{"version":3,"file":"assets/chunk.becfef044d1114b8e891.js","mappings":"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CA,MAEJ,GAAM,CACF,IACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,KACA,KACA,IACA,KAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,KACA,KAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,IACA,KAEJ,GAAM,CACF,KACA,KACA,IACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,KACA,IACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,KAEJ,GAAM,CACF,KACA,KACA,IACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,KACA,KACA,IACA,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,KAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,KACA,KACA,IACA,KAEJ,GAAM,CACF,KACA,KACA,IACA,KAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,KACA,KACA,IACA,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GA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KAANA,GACM,KAANA,GACM,KAANA,GACM,KAANA,GACCA,GAAK,IAAUA,GAAK,IACpBA,GAAK,IAAUA,GAAK,IACpBA,GAAK,IAAUA,GAAK,IACpBA,GAAK,IAAUA,GAAK,IACf,KAANA,GACM,KAANA,GACM,KAANA,GACM,KAANA,GACM,KAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACCA,GAAK,KAAUA,GAAK,KACf,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,KACf,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,KAC7B,CEvvCA,SAASgR,GAAcC,GACnBA,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Q,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,cAAe0qG,EAAE+7B,GAC7B,IAAQ,CAAEzmI,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAA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eACL,IAAK,aACL,IAAK,eACL,IAAK,gBACL,IAAK,aACL,IAAK,cACL,IAAK,cACL,IAAK,iBACL,IAAK,YACL,IAAK,cACL,IAAK,eACL,IAAK,aACL,IAAK,aACL,IAAK,gBACL,IAAK,eACL,IAAK,kBACL,IAAK,gBACL,IAAK,qBACL,IAAK,WACL,IAAK,OACL,IAAK,gBACL,IAAK,kBACL,IAAK,aACL,IAAK,aACL,IAAK,eACL,IAAK,iBACL,IAAK,cACL,IAAK,iBACL,IAAK,qBACL,IAAK,YACL,IAAK,oBACL,IAAK,WACL,IAAK,cACL,IAAK,iBACL,IAAK,WACL,IAAK,eACL,IAAK,gBACL,IAAK,gBACL,IAAK,mBACL,IAAK,iBACL,IAAK,eACL,IAAK,cACL,IAAK,YACL,IAAK,kBACL,IAAK,oBACL,IAAK,iBACL,IAAK,YACL,IAAK,aACL,IAAK,oBACL,IAAK,aACL,IAAK,eACL,IAAK,iBACL,IAAK,kBACL,IAAK,eACL,IAAK,gBACL,IAAK,gBACL,IAAK,qBACL,IAAK,mBACL,IAAK,qBACL,IAAK,yBACL,IAAK,cACL,IAAK,aACL,IAAK,mBACL,IAAK,sBACL,IAAK,eACL,IAAK,eACL,IAAK,gBACL,IAAK,cACL,IAAK,kBACL,IAAK,cACL,IAAK,gBACL,IAAK,kBACL,IAAK,2BACL,IAAK,eACL,IAAK,iBACL,IAAK,aACL,IAAK,iBACL,IAAK,YACL,IAAK,mBACL,IAAK,cACL,IAAK,wBACL,IAAK,kBACL,IAAK,qBACL,IAAK,kBACL,IAAK,kBACL,IAAK,kBACL,IAAK,qBACL,IAAK,aACL,IAAK,iBACL,IAAK,eACL,IAAK,mBACL,IAAK,aACL,IAAK,eACL,IAAK,kBACL,IAAK,gBACL,IAAK,gBACL,IAAK,kBACL,IAAK,kBACL,IAAK,gBACL,IAAK,iBACL,IAAK,uBACL,IAAK,0BACL,IAAK,iBACL,IAAK,eACL,IAAK,YACL,IAAK,cACL,IAAK,aACL,IAAK,iBACL,IAAK,kBACL,IAAK,kBACL,IAAK,gBACL,IAAK,kBACL,IAAK,gBACL,IAAK,gBACL,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K,MACL,IAAK,MACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,WACL,IAAK,WACL,IAAK,OACL,IAAK,UACL,IAAK,WACL,IAAK,cACL,IAAK,iBACL,IAAK,gBACL,IAAK,iBACL,IAAK,WACL,IAAK,cACL,IAAK,iBACL,IAAK,iBACL,IAAK,aACL,IAAK,QACL,IAAK,UACL,IAAK,WACL,IAAK,QACL,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAK,aACL,IAAK,MACL,IAAK,QACL,IAAK,QACL,IAAK,OACL,IAAK,WACL,IAAK,UACL,IAAK,OACL,IAAK,UACL,IAAK,YACL,IAAK,UACL,IAAK,OACL,IAAK,UACL,IAAK,UACL,IAAK,OACL,IAAK,WACL,IAAK,gBACL,IAAK,aACL,IAAK,eACL,IAAK,WACL,IAAK,YACL,IAAK,WACL,IAAK,OACL,IAAK,SACL,IAAK,OACL,IAAK,UACL,IAAK,QACL,IAAK,QACL,IAAK,YACL,IAAK,UACL,IAAK,aACL,IAAK,aACL,IAAK,WACL,IAAK,QACL,IAAK,UACL,IAAK,WACL,IAAK,QACL,IAAK,SACL,IAAK,OACL,IAAK,OACL,IAAK,UACL,IAAK,YACL,IAAK,MACL,IAAK,OACL,IAAK,OACL,IAAK,UACL,IAAK,UACL,IAAK,QACL,IAAK,MACL,IAAK,OACL,IAAK,UACL,IAAK,SACL,IAAK,WACL,IAAK,SACL,IAAK,aACL,IAAK,OACL,IAAK,OACL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,OACL,IAAK,gBACL,IAAK,WACL,IAAK,aACL,IAAK,cACL,IAAK,gBACL,IAAK,kBACL,IAAK,gBACL,IAAK,WACL,IAAK,OACL,IAAK,QACL,IAAK,aACL,IAAK,KACL,IAAK,QACL,IAAK,SACL,IAAK,YACL,IAAK,cACL,IAAK,iBACL,IAAK,OACL,IAAK,gBACL,IAAK,WACL,IAAK,cACL,IAAK,WACL,IAAK,iBACL,IAAK,aACL,IAAK,YACL,IAAK,eACL,IAAK,eACL,IAAK,cACL,IAAK,aACL,IAAK,cACL,IAAK,eACL,IAAK,SACL,IAAK,WACL,IAAK,UACL,IAAK,UACL,IAAK,YACL,IAAK,UACL,IAAK,SACL,IAAK,SACL,IAAK,aACL,IAAK,YACL,IAAK,OACL,IAAK,YACL,IAAK,QACL,IAAK,OACL,IAAK,SACL,IAAK,YACL,IAAK,QACL,IAAK,YACL,IAAK,WACL,IAAK,UACL,IAAK,cACL,IAAK,cACL,IAAK,SACL,IAAK,eACL,IAAK,WACL,IAAK,YACL,IAAK,UACL,IAAK,WACL,IAAK,cACL,IAAK,MACL,IAAK,SACL,IAAK,UACL,IAAK,QACL,IAAK,UACL,IAAK,UACL,IAAK,WACL,IAAK,WACL,IAAK,UACL,IAAK,SACL,IAAK,QACL,IAAK,WACL,IAAK,QACL,IAAK,YACL,IAAK,UACL,IAAK,MACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,UACL,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,WACL,IAAK,aACL,IAAK,cACL,IAAK,OACL,IAAK,WACL,IAAK,OACL,IAAK,gBACL,IAAK,YACL,IAAK,cACL,IAAK,QACL,IAAK,iBACL,IAAK,kBACL,IAAK,kBACL,IAAK,iBACL,IAAK,UACL,IAAK,UACL,IAAK,WACL,IAAK,QACL,IAAK,UACL,IAAK,aACL,IAAK,eACL,IAAK,oBACL,IAAK,QACL,IAAK,UACL,IAAK,aACL,IAAK,eACL,IAAK,QACL,IAAK,cACL,IAAK,cACL,IAAK,WACL,IAAK,eACL,IAAK,YACL,IAAK,WACL,IAAK,WACL,IAAK,OACL,IAAK,OACL,IAAK,UACL,IAAK,QACL,IAAK,SACL,IAAK,OACL,IAAK,WACL,IAAK,gBACL,IAAK,YACL,IAAK,kBACL,IAAK,eACL,IAAK,gBACL,IAAK,mBACL,IAAK,cACL,IAAK,gBACL,IAAK,cACL,IAAK,WACL,IAAK,MACL,IAAK,YACL,IAAK,aACL,IAAK,qBACL,IAAK,mBACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,QACL,IAAK,QACL,IAAK,UACL,IAAK,QACL,IAAK,SACL,IAAK,OACL,IAAK,SACL,IAAK,UACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,aACL,IAAK,cACL,IAAK,YACL,IAAK,SACL,IAAK,UACL,IAAK,QACL,IAAK,YACL,IAAK,YACL,IAAK,aACL,IAAK,SACL,IAAK,WACL,IAAK,QACL,IAAK,SACL,IAAK,SACL,IAAK,QACL,IAAK,SACL,IAAK,MACL,IAAK,OACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,OACL,IAAK,OACL,IAAK,WACL,IAAK,WACL,IAAK,UACL,IAAK,WACL,IAAK,OACL,IAAK,YACL,IAAK,YACL,IAAK,UACL,IAAK,aACL,IAAK,aACL,IAAK,QACL,IAAK,QACL,IAAK,WACL,IAAK,WACL,IAAK,UACL,IAAK,SACL,IAAK,WACL,IAAK,UACL,IAAK,QACL,IAAK,UACL,IAAK,WACL,IAAK,YACL,IAAK,WACL,IAAK,aACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,WACL,IAAK,YACL,IAAK,YACL,IAAK,YACL,IAAK,YACL,IAAK,YACL,IAAK,cACL,IAAK,UACL,IAAK,YACL,IAAK,WACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,WACL,IAAK,UACL,IAAK,cACL,IAAK,MACL,IAAK,cACL,IAAK,MACL,IAAK,aACL,IAAK,gBACL,IAAK,UACL,IAAK,eACL,IAAK,UACL,IAAK,WACL,IAAK,SACL,IAAK,YACL,IAAK,cAEHD,GAAW,CACb,EAAG,EACH,EAAG,EACH,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,MAAO,GAkCT,SAASgF,GAAcl3G,GACtB,OAAOA,EAAEl/B,QAAQ,IAAI,KAAKA,QAAQ,IAAK,KACxC,CAEA,IAKIq2I,GAAi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CzB,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,YACT,CAAC,MAAQ,MAAQ,MAAO,YACxB,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,YACT,CAAC,YACD,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,YACT,CAAC,MAAQ,YACT,CAAC,MAAQ,YACT,CAAC,MAAQ,YACT,CAAC,MAAQ,YACT,CAAC,MAAQ,YACT,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,YACT,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,YACT,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,YACT,CAAC,MAAQ,YACT,CAAC,MAAQ,YACT,CAAC,MAAQ,YACT,CAAC,MAAQ,YACT,CAAC,MAAQ,YACT,CAAC,MAAQ,MAAQ,MAAQ,YACzB,CAAC,MAAQ,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,EACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IAGE9qF,EAA2B,CAC7B,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAEE+kG,EAA0B,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,IAC7DrrF,EAA2B,CAC7B,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,KAEEwqF,EAA0B,CAC5B,EACA,EACA,EACA,EACA,EACA,GACA,EACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,EACA,GACA,IACA,GACA,GACA,IACA,IACA,IACA,EACA,GACA,GACA,IACA,IACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,IACA,IACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAGE3vB,EAA6B,CAC/B,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAEEviB,EAA4B,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,IAC/DojE,EAA6B,CAC/B,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,KAEE3yF,EAA4B,CAC9B,EACA,EACA,EACA,EACA,GACA,EACA,EACA,GACA,GACA,EACA,GACA,GACA,GACA,EACA,GACA,IACA,GACA,GACA,GACA,IACA,EACA,GACA,GACA,IACA,IACA,IACA,IACA,EACA,GACA,GACA,GACA,IACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,GACA,IACA,GACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA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,GACH3sC,EAAA,QAGL4nE,EADAxkG,EAAI,EAEDA,GAAKojB,GAAS,SACfzF,EAAW3d,EACC,GAAT+4C,EAAG/4C,IAAWA,GAAKojB,KACtBpjB,EAAA,IAEAE,EAAWF,EAAI2d,EAAA,GACfzd,GApCI,GAoCa,CACnBskG,EAAMtkG,GAAY,MACb,IAAIs6B,EAAW,EAAGA,GAAYgqE,IAAOhqE,EACxCq8F,EAAUxzE,GACZnjD,GAAsB,GAExBwd,EAAM,MAAQq7B,EAAG/4C,GACjB62H,EAAUv3H,GAAMY,GAAY,GAAKypG,EAASjsF,KAC1Cm5G,EAAU1tD,EAAQzrD,IAClB1d,GAAA,QA5CQ,IA8CNojB,GACFyzG,EAAUttD,GAEL3sC,CAAA,UA8HA6Z,EAAWtyB,GAClBA,EAAUxkB,KAAKD,IAAIC,KAAKC,IAAIukB,EAAS,GAAI,KAErCzG,GAAkByG,IAAA,SA1qBCA,GAAA,QACnB3d,EAAM,CACR,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IAGOo2B,EAAI,EAAGA,EAAI,GAAIA,IAAK,KACvB39B,EAAIsqE,GAAQ/iE,EAAIo2B,GAAKzY,EAAK,IAAM,KACpCllB,EAAIU,KAAKD,IAAIC,KAAKC,IAAIX,EAAG,GAAI,KAC7BokD,EAAO0nC,EAAOnuD,IAAM39B,CAAA,SAElBK,EAAO,CACT,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA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EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAEJ/yV,EAAE,aAAc,iBAChB1tC,EAAK2tY,WAAa,kBACT,YAET3tY,EAAK4tY,WAAa,SAAS5tY,GAAA,OAClBA,CAAA,EAETA,EAAK6tY,WAAa,SAAS7tY,EAAG3d,EAAGo2B,GAAA,OACxBp2B,EAAEo2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CX2kB,EAAKivY,eAAiB,IAAI5zZ,OAAS,IACnC2kB,EAAKkvY,oBAAsB,IAAI7zZ,OAAS,IACxC2kB,EAAKmvY,iBAAmB,IAAI9zZ,OAAS,OAClCmpZ,GACFK,GACAnrJ,GACAvrK,GACA62T,GACAhrR,GA+3BA61H,GAIAz0O,GACAq9O,GACApqK,GACAw9T,GACAC,GACAz2J,GACAj/O,GACA88I,GACA84P,GACAC,GACAr2J,GACAs2J,GACAt7J,GACAu7J,GACAC,GACAC,GACAC,GAIA1J,GACAkC,GACAnC,GACAvtR,GAz5BAs2R,GAAKnyY,EAAE,KACPg7O,GAAKh7O,EAAE,MACPoyY,GAAKpyY,EAAE,KACPqyY,GAAKryY,EAAE,KACPkyY,GAAK,EACLiB,GAAKn4J,GACL45I,GAAKwd,GACLc,GAAIb,GACJe,GAAIjB,GACJ9G,GAAK,EACL9B,GAAK,EACLpqR,GAAK,EACLqqR,GAAK,EACLN,GAAK,EACLO,GAAK,EACL+B,GAAK,EACL/D,GAAK,EACLC,GAAK,EACLC,GAAK,EACLC,GAAK,GACLmF,GAAK,CAAC,EAAG,EAAG,GACZD,GAAK,CAAC,EAAG,EAAG,IACZF,GAAK,CAAC,IAAK,IAAK,IAAK,IAAK,IAC1BI,GAAK,CAAC,EAAG,EAAG,EAAG,EAAG,GAClBH,GAAK,CAAC,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,IACpEtC,GAAK,CACH,GACA,EACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,EACA,IACA,IACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,GACA,GACA,IACA,EACA,IACA,IACA,GACA,GACA,GACA,GACA,IACA,IACA,GACA,GACA,IACA,IACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,IACA,GACA,GACA,EACA,IACA,IACA,GACA,GACA,GACA,GACA,GACA,IACA,GACA,IACA,IACA,GACA,GACA,GACA,IACA,IACA,GACA,IACA,GACA,IACA,IACA,GACA,KAEFoC,GAAK,CACH,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEF5sJ,GAAK,EACL8xJ,GAAK,CACH,EACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEFtnT,GAAK,CACH,EACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,G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AK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,OAGvD,CACE,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,OAGvD,CACE,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,OAGvD,CACE,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,I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A,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,KACA,IACA,IACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,IACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,IACA,MACA,IACA,MACA,MACA,IACA,MACA,MACA,IACA,MACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,IACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,MACA,MACA,IACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,MACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,KACA,IACA,IACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,IACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,KACA,IACA,IACA,IACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,IACA,IACA,IACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KA8jBEo2B,EAAa,IAAIzY,EAAMg3Y,eAAe,CAAEK,eAAA,IAoC5Cr3Y,EAAM6+W,IAAIz/C,OAAOjpU,KAAK,CAAC,kBAlCE,SAAS6J,GAAA,IAC5B3d,EAAO2d,EAAKylB,KAGZ3qC,GAFIklB,EAAKlkB,EACLkkB,EAAKjkB,EACCikB,EAAKlhB,SAAW,CAAC,GAG3B3D,GAFQ6kB,EAAKwkX,MACN1pY,EAAQ6tC,KACL,OAEd7tC,EAAQu8Z,cAC2B,kBAA1Bv8Z,EAAQu8Z,eAA8Bv8Z,EAAQu8Z,cACvD5+X,EAAWq1J,WAAWhzL,GAEuB,mBAAzC+J,OAAO9J,UAAU6nB,SAASpQ,KAAKnQ,GAA4B,KACzDkX,EAAI,MACRpe,EAAU,GACLoe,EAAI,EAAGA,EAAIlX,EAAKhH,OAAQke,GAAK,EACgB,mBAA5C1U,OAAO9J,UAAU6nB,SAASpQ,KAAKnQ,EAAKkX,IACtCpe,EAAQgb,KAAK,CACXsiB,EAAW2+X,cAAc/0Z,EAAKkX,GAAG,IACjClX,EAAKkX,GAAG,GACRlX,EAAKkX,GAAG,KAGVpe,EAAQgb,KAAK,CAACsiB,EAAW2+X,cAAc/0Z,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","sources":["webpack://photodiode/../src/constants.ts","webpack://photodiode/../../src/components/aditools-header.hbs","webpack://photodiode/../../src/components/aditools-header.ts","webpack://photodiode/../../src/components/aditools-studio-dropdown.hbs","webpack://photodiode/../../src/components/aditools-studio-dropdown.ts","webpack://photodiode/../rewritten-packages/ember-truth-helpers.33b6493b/node_modules/ember-truth-helpers/helpers/not.js","webpack://photodiode/../../../../node_modules/.pnpm/@floating-ui+utils@0.2.7/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","webpack://photodiode/../../../../node_modules/.pnpm/@floating-ui+core@1.6.2/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","webpack://photodiode/../../../../node_modules/.pnpm/@floating-ui+utils@0.2.7/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","webpack://photodiode/../../../../node_modules/.pnpm/@floating-ui+dom@1.6.10/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","webpack://photodiode/../src/events.ts","webpack://photodiode/../src/popover-helpers.ts","webpack://photodiode/../src/popover.ts","webpack://photodiode/../src/index.ts","webpack://photodiode/../../src/modifiers/aditools-positioner.ts","webpack://photodiode/../../src/components/aditools-toolbar.hbs","webpack://photodiode/../../src/components/aditools-toolbar.ts","webpack://photodiode/../rewritten-packages/@ember/string.de568682/node_modules/@ember/string/cache.js","webpack://photodiode/../rewritten-packages/@ember/string.de568682/node_modules/@ember/string/index.js","webpack://photodiode/../../src/components/aditools-toolbar-tab.hbs","webpack://photodiode/../../src/components/aditools-toolbar-tab.ts","webpack://photodiode/../../src/components/aditools-toolbar-action.hbs","webpack://photodiode/../../src/components/aditools-toolbar-action.ts","webpack://photodiode/../../src/components/aditools-dialog-load.hbs","webpack://photodiode/../../src/components/aditools-dialog-load.ts","webpack://photodiode/../../src/components/aditools-dialog-save.hbs","webpack://photodiode/../../src/components/aditools-dialog-save.ts","webpack://photodiode/../../src/components/aditools-feedback-dialog.hbs","webpack://photodiode/../../src/components/aditools-feedback-dialog.ts","webpack://photodiode/./components/controls/help-dialog.hbs","webpack://photodiode/./components/controls/help-dialog.js","webpack://photodiode/../../src/components/aditools-content-wrap.hbs","webpack://photodiode/../../src/components/aditools-content-wrap.ts","webpack://photodiode/./components/tab-button.hbs","webpack://photodiode/./components/tab-button.ts","webpack://photodiode/../../src/components/aditools-footer.hbs","webpack://photodiode/../../src/components/aditools-footer.ts","webpack://photodiode/../../src/components/aditools-system-dialog.hbs","webpack://photodiode/../../src/components/aditools-system-dialog.ts","webpack://photodiode/./templates/application.hbs","webpack://photodiode/../rewritten-packages/ember-changeset.41299fc8/node_modules/ember-changeset/helpers/changeset.js","webpack://photodiode/../../src/utils/formatter.ts","webpack://photodiode/../../src/utils/range-filter.ts","webpack://photodiode/./components/dialogs/sensor-selection.hbs","webpack://photodiode/./components/dialogs/sensor-selection.ts","webpack://photodiode/./components/dialogs/current-calculation.hbs","webpack://photodiode/./components/dialogs/current-calculation.ts","webpack://photodiode/./components/settings/photodiode.hbs","webpack://photodiode/./components/settings/photodiode.ts","webpack://photodiode/./templates/photodiode.hbs","webpack://photodiode/../rewritten-packages/ember-load-initializers.54ebefb1/node_modules/ember-load-initializers/index.js","webpack://photodiode/./app.js","webpack://photodiode/./assets/photodiode.js","webpack://photodiode/./components/controls/input.hbs","webpack://photodiode/./components/controls/input.ts","webpack://photodiode/./components/controls/radio-group.hbs","webpack://photodiode/./components/controls/radio-group.js","webpack://photodiode/./components/controls/radio-item.hbs","webpack://photodiode/./components/controls/radio-item.js","webpack://photodiode/../../src/components/aditools-help-tooltip.hbs","webpack://photodiode/../../src/components/aditools-help-tooltip.ts","webpack://photodiode/./components/controls/tooltip.hbs","webpack://photodiode/./components/controls/tooltip.js","webpack://photodiode/../rewritten-packages/@ember/render-modifiers.7080e106/node_modules/@ember/render-modifiers/modifiers/did-update.js","webpack://photodiode/../rewritten-packages/ember-intl.00f79baf/node_modules/ember-intl/helpers/format-message.js","webpack://photodiode/./components/figures/schematic.hbs","webpack://photodiode/./components/figures/schematic.ts","webpack://photodiode/./config/environment.js","webpack://photodiode/./controllers/application.ts","webpack://photodiode/./controllers/photodiode.ts","webpack://photodiode/./formats.js","webpack://photodiode/./helpers/engnum.ts","webpack://photodiode/./helpers/helpitem.ts","webpack://photodiode/./helpers/helptext.ts","webpack://photodiode/./helpers/stdnum.ts","webpack://photodiode/./modifiers/apply-expand-click.ts","webpack://photodiode/./router.ts","webpack://photodiode/./routes/application.ts","webpack://photodiode/./routes/index.ts","webpack://photodiode/./routes/photodiode.ts","webpack://photodiode/../../../../node_modules/.pnpm/v4-uuid@1.1.0/node_modules/v4-uuid/esm/index.js","webpack://photodiode/./services/cdp.ts","webpack://photodiode/./services/help-text.ts","webpack://photodiode/./services/logger.ts","webpack://photodiode/./services/model.ts","webpack://photodiode/./services/opamp.ts","webpack://photodiode/./services/persistence.ts","webpack://photodiode/./services/sensor.ts","webpack://photodiode/./services/snapshot.ts","webpack://photodiode/./services/svg-cache.ts","webpack://photodiode/./services/toolsapi.ts","webpack://photodiode/./utils/analytics.ts","webpack://photodiode/./utils/design-files.ts","webpack://photodiode/./utils/download.ts","webpack://photodiode/./utils/parametric.ts","webpack://photodiode/../../../../node_modules/.pnpm/@ebiz+aditools-spice@1.4.1/node_modules/@ebiz/aditools-spice/src/netlists.js","webpack://photodiode/./utils/spice-netlist.ts","webpack://photodiode/../../../../node_modules/.pnpm/@ebiz+aditools-spice@1.4.1/node_modules/@ebiz/aditools-spice/src/schematics.js","webpack://photodiode/./utils/spice-schematics.ts","webpack://photodiode/../rewritten-packages/@ember/render-modifiers.7080e106/node_modules/@ember/render-modifiers/modifiers/did-insert.js","webpack://photodiode/../rewritten-packages/@ember/test-waiters.6ca1db3e/node_modules/@ember/test-waiters/waiter-manager.js","webpack://photodiode/../rewritten-packages/@ember/test-waiters.6ca1db3e/node_modules/@ember/test-waiters/build-waiter.js","webpack://photodiode/../rewritten-packages/@ember/test-waiters.6ca1db3e/node_modules/@ember/test-waiters/wait-for-promise.js","webpack://photodiode/../rewritten-packages/@ember/test-waiters.6ca1db3e/node_modules/@ember/test-waiters/wait-for.js","webpack://photodiode/../rewritten-packages/@glimmer/component.52988084/node_modules/@glimmer/component/-private/component.js","webpack://photodiode/../rewritten-packages/@glimmer/component.52988084/node_modules/@glimmer/component/-private/destroyables.js","webpack://photodiode/../rewritten-packages/@glimmer/component.52988084/node_modules/@glimmer/component/-private/ember-component-manager.js","webpack://photodiode/../rewritten-packages/@glimmer/component.52988084/node_modules/@glimmer/component/-private/base-component-manager.js","webpack://photodiode/../rewritten-packages/@glimmer/component.52988084/node_modules/@glimmer/component/index.js","webpack://photodiode/../rewritten-packages/@glimmer/tracking.e3840884/node_modules/@glimmer/tracking/index.js","webpack://photodiode/../rewritten-packages/ember-async-await-helper.d75b706b/node_modules/ember-async-await-helper/templates/components/async-await.hbs","webpack://photodiode/../rewritten-packages/ember-async-await-helper.d75b706b/node_modules/ember-async-await-helper/components/async-await.js","webpack://photodiode/../rewritten-packages/ember-changeset.41299fc8/node_modules/ember-changeset/utils/merge-deep.js","webpack://photodiode/../rewritten-packages/ember-changeset.41299fc8/node_modules/ember-changeset/utils/is-object.js","webpack://photodiode/../rewritten-packages/ember-changeset.41299fc8/node_modules/ember-changeset/validated-changeset.js","webpack://photodiode/../rewritten-packages/ember-changeset.41299fc8/node_modules/ember-changeset/index.js","webpack://photodiode/../rewritten-packages/ember-cli-app-version.cb3efc1e/node_modules/ember-cli-app-version/_app_/initializers/app-version.js","webpack://photodiode/../rewritten-packages/ember-cli-app-version.cb3efc1e/node_modules/ember-cli-app-version/initializer-factory.js","webpack://photodiode/../rewritten-packages/ember-intl.00f79baf/node_modules/ember-intl/helpers/t.js","webpack://photodiode/../../../../node_modules/.pnpm/eventemitter3@5.0.1/node_modules/eventemitter3/index.mjs","webpack://photodiode/../rewritten-packages/ember-intl.00f79baf/node_modules/ember-intl/-private/formatters/-base.js","webpack://photodiode/../rewritten-packages/ember-intl.00f79baf/node_modules/ember-intl/-private/formatters/format-date.js","webpack://photodiode/../rewritten-packages/ember-intl.00f79baf/node_modules/ember-intl/-private/formatters/format-list.js","webpack://photodiode/../rewritten-packages/ember-intl.00f79baf/node_modules/ember-intl/-private/formatters/format-message.js","webpack://photodiode/../rewritten-packages/ember-intl.00f79baf/node_modules/ember-intl/-private/formatters/format-number.js","webpack://photodiode/../rewritten-packages/ember-intl.00f79baf/node_modules/ember-intl/-private/formatters/format-relative.js","webpack://photodiode/../rewritten-packages/ember-intl.00f79baf/node_modules/ember-intl/-private/formatters/format-time.js","webpack://photodiode/../../../../node_modules/.pnpm/tslib@2.6.3/node_modules/tslib/tslib.es6.mjs","webpack://photodiode/../../../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.7.8/node_modules/@formatjs/icu-messageformat-parser/lib/error.js","webpack://photodiode/../../../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.7.8/node_modules/@formatjs/icu-messageformat-parser/lib/types.js","webpack://photodiode/../../../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.7.8/node_modules/@formatjs/icu-messageformat-parser/lib/regex.generated.js","webpack://photodiode/../../../../node_modules/.pnpm/@formatjs+icu-skeleton-parser@1.8.2/node_modules/@formatjs/icu-skeleton-parser/lib/date-time.js","webpack://photodiode/../../../../node_modules/.pnpm/@formatjs+icu-skeleton-parser@1.8.2/node_modules/@formatjs/icu-skeleton-parser/lib/regex.generated.js","webpack://photodiode/../../../../node_modules/.pnpm/@formatjs+icu-skeleton-parser@1.8.2/node_modules/@formatjs/icu-skeleton-parser/lib/number.js","webpack://photodiode/../../../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.7.8/node_modules/@formatjs/icu-messageformat-parser/lib/time-data.generated.js","webpack://photodiode/../../../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.7.8/node_modules/@formatjs/icu-messageformat-parser/lib/parser.js","webpack://photodiode/../../../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.7.8/node_modules/@formatjs/icu-messageformat-parser/lib/date-time-pattern-generator.js","webpack://photodiode/../../../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.7.8/node_modules/@formatjs/icu-messageformat-parser/lib/index.js","webpack://photodiode/../../../../node_modules/.pnpm/@formatjs+fast-memoize@2.2.0/node_modules/@formatjs/fast-memoize/lib/index.js","webpack://photodiode/../../../../node_modules/.pnpm/intl-messageformat@10.5.14/node_modules/intl-messageformat/lib/src/error.js","webpack://photodiode/../../../../node_modules/.pnpm/intl-messageformat@10.5.14/node_modules/intl-messageformat/lib/src/formatters.js","webpack://photodiode/../../../../node_modules/.pnpm/intl-messageformat@10.5.14/node_modules/intl-messageformat/lib/src/core.js","webpack://photodiode/../../../../node_modules/.pnpm/@formatjs+intl@2.10.4_typescript@5.4.5/node_modules/@formatjs/intl/lib/src/error.js","webpack://photodiode/../../../../node_modules/.pnpm/@formatjs+intl@2.10.4_typescript@5.4.5/node_modules/@formatjs/intl/lib/src/utils.js","webpack://photodiode/../../../../node_modules/.pnpm/@formatjs+intl@2.10.4_typescript@5.4.5/node_modules/@formatjs/intl/lib/src/number.js","webpack://photodiode/../../../../node_modules/.pnpm/@formatjs+intl@2.10.4_typescript@5.4.5/node_modules/@formatjs/intl/lib/src/relativeTime.js","webpack://photodiode/../../../../node_modules/.pnpm/@formatjs+intl@2.10.4_typescript@5.4.5/node_modules/@formatjs/intl/lib/src/dateTime.js","webpack://photodiode/../../../../node_modules/.pnpm/@formatjs+intl@2.10.4_typescript@5.4.5/node_modules/@formatjs/intl/lib/src/plural.js","webpack://photodiode/../../../../node_modules/.pnpm/@formatjs+intl@2.10.4_typescript@5.4.5/node_modules/@formatjs/intl/lib/src/message.js","webpack://photodiode/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@2.0.0/node_modules/@formatjs/ecma402-abstract/lib/utils.js","webpack://photodiode/../../../../node_modules/.pnpm/@formatjs+intl@2.10.4_typescript@5.4.5/node_modules/@formatjs/intl/lib/src/list.js","webpack://photodiode/../../../../node_modules/.pnpm/@formatjs+intl@2.10.4_typescript@5.4.5/node_modules/@formatjs/intl/lib/src/displayName.js","webpack://photodiode/../../../../node_modules/.pnpm/@formatjs+intl@2.10.4_typescript@5.4.5/node_modules/@formatjs/intl/lib/src/create-intl.js","webpack://photodiode/../rewritten-packages/ember-intl.00f79baf/node_modules/ember-intl/-private/utils/formatjs.js","webpack://photodiode/../rewritten-packages/ember-intl.00f79baf/node_modules/ember-intl/translations.js","webpack://photodiode/../rewritten-packages/ember-intl.00f79baf/node_modules/ember-intl/-private/utils/locale.js","webpack://photodiode/../rewritten-packages/ember-intl.00f79baf/node_modules/ember-intl/-private/utils/translations.js","webpack://photodiode/../rewritten-packages/ember-intl.00f79baf/node_modules/ember-intl/services/intl.js","webpack://photodiode/../rewritten-packages/ember-intl.00f79baf/node_modules/ember-intl/-private/utils/hydrate.js","webpack://photodiode/../rewritten-packages/ember-intl.00f79baf/node_modules/ember-intl/-private/utils/get-dom.js","webpack://photodiode/../rewritten-packages/ember-intl.00f79baf/node_modules/ember-intl/-private/utils/missing-message.js","webpack://photodiode/../rewritten-packages/ember-modifier.ad16094b/node_modules/ember-modifier/-private/compat.js","webpack://photodiode/../rewritten-packages/ember-modifier.ad16094b/node_modules/ember-modifier/-private/class/modifier-manager.js","webpack://photodiode/../rewritten-packages/ember-modifier.ad16094b/node_modules/ember-modifier/-private/class/modifier.js","webpack://photodiode/../rewritten-packages/ember-modifier.ad16094b/node_modules/ember-modifier/-private/function-based/modifier-manager.js","webpack://photodiode/../rewritten-packages/ember-modifier.ad16094b/node_modules/ember-modifier/-private/function-based/modifier.js","webpack://photodiode/../rewritten-packages/ember-resolver.152274b0/node_modules/ember-resolver/container-debug-adapter.js","webpack://photodiode/../rewritten-packages/ember-resolver.152274b0/node_modules/ember-resolver/string/cache.js","webpack://photodiode/../rewritten-packages/ember-resolver.152274b0/node_modules/ember-resolver/string/index.js","webpack://photodiode/../rewritten-packages/ember-resolver.152274b0/node_modules/ember-resolver/index.js","webpack://photodiode/../rewritten-packages/ember-resolver.152274b0/node_modules/ember-resolver/utils/class-factory.js","webpack://photodiode/../rewritten-packages/ember-truth-helpers.33b6493b/node_modules/ember-truth-helpers/helpers/and.js","webpack://photodiode/../rewritten-packages/ember-truth-helpers.33b6493b/node_modules/ember-truth-helpers/helpers/equal.js","webpack://photodiode/../rewritten-packages/ember-truth-helpers.33b6493b/node_modules/ember-truth-helpers/utils/truth-convert.js","webpack://photodiode/../../../../node_modules/.pnpm/@ebiz+aditools-design-report@1.0.11/node_modules/@ebiz/aditools-design-report/lib/src/pdf.js","webpack://photodiode/../../../../node_modules/.pnpm/@ebiz+aditools-precisionstudio-menu@1.4.0/node_modules/@ebiz/aditools-precisionstudio-menu/lib/index.js","webpack://photodiode/../../../../node_modules/.pnpm/@ebiz+aditools-schematic@2.2.1/node_modules/@ebiz/aditools-schematic/src/math.js","webpack://photodiode/../../../../node_modules/.pnpm/@ebiz+aditools-schematic@2.2.1/node_modules/@ebiz/aditools-schematic/src/text.js","webpack://photodiode/../../../../node_modules/.pnpm/@ebiz+aditools-schematic@2.2.1/node_modules/@ebiz/aditools-schematic/src/dom.js","webpack://photodiode/../../../../node_modules/.pnpm/@ebiz+aditools-schematic@2.2.1/node_modules/@ebiz/aditools-schematic/src/circuits.js","webpack://photodiode/../src/utils/analytics.ts","webpack://photodiode/../../src/services/aditools-analytics.ts","webpack://photodiode/../../../../node_modules/.pnpm/xlsx@https+++cdn.sheetjs.com+xlsx-0.20.2+xlsx-0.20.2.tgz/node_modules/xlsx/xlsx.mjs","webpack://photodiode/../../src/modifiers/aditools-renderer.ts","webpack://photodiode/../../src/utils/export-to-excel.ts","webpack://photodiode/../../src/utils/download.ts","webpack://photodiode/../../../../node_modules/.pnpm/sortablejs@1.15.3/node_modules/sortablejs/modular/sortable.esm.js","webpack://photodiode/../../src/slick.core.ts","webpack://photodiode/../../src/plugins/slick.cellrangedecorator.ts","webpack://photodiode/../../src/slick.interactions.ts","webpack://photodiode/../../src/plugins/slick.cellrangeselector.ts","webpack://photodiode/../../src/plugins/slick.rowselectionmodel.ts","webpack://photodiode/../../src/slick.groupitemmetadataprovider.ts","webpack://photodiode/../../src/slick.dataview.ts","webpack://photodiode/../../src/slick.editors.ts","webpack://photodiode/../../src/slick.grid.ts","webpack://photodiode/../../src/components/aditools-device-table.ts","webpack://photodiode/../../src/utils/comparator.ts","webpack://photodiode/../../src/utils/engineering-range-value-filter.ts","webpack://photodiode/../../src/utils/partial-text-filter.ts","webpack://photodiode/../../src/utils/validation.ts","webpack://photodiode/../../src/components/aditools-card.hbs","webpack://photodiode/../../src/components/aditools-card.ts","webpack://photodiode/../../src/components/aditools-dialog.hbs","webpack://photodiode/../../src/components/aditools-dialog.ts","webpack://photodiode/../../src/components/aditools-help-dialog.hbs","webpack://photodiode/../../src/components/aditools-help-dialog.ts","webpack://photodiode/../../src/utils/aditools-site.ts","webpack://photodiode/../../src/services/aditools-site.ts","webpack://photodiode/../../../../node_modules/.pnpm/@ebiz+pretty-num@2.3.0/node_modules/@ebiz/pretty-num/pretty-num.js","webpack://photodiode/../../../../node_modules/.pnpm/@embroider+macros@1.16.8/node_modules/@embroider/macros/src/addon/es-compat2.js","webpack://photodiode/../../../../node_modules/.pnpm/@messageformat+core@3.3.0/node_modules/@messageformat/core/messageformat.js","webpack://photodiode/../../../../node_modules/.pnpm/@xmldom+xmldom@0.8.10/node_modules/@xmldom/xmldom/lib/conventions.js","webpack://photodiode/../../../../node_modules/.pnpm/@xmldom+xmldom@0.8.10/node_modules/@xmldom/xmldom/lib/dom-parser.js","webpack://photodiode/../../../../node_modules/.pnpm/@xmldom+xmldom@0.8.10/node_modules/@xmldom/xmldom/lib/dom.js","webpack://photodiode/../../../../node_modules/.pnpm/@xmldom+xmldom@0.8.10/node_modules/@xmldom/xmldom/lib/entities.js","webpack://photodiode/../../../../node_modules/.pnpm/@xmldom+xmldom@0.8.10/node_modules/@xmldom/xmldom/lib/index.js","webpack://photodiode/../../../../node_modules/.pnpm/@xmldom+xmldom@0.8.10/node_modules/@xmldom/xmldom/lib/sax.js","webpack://photodiode/../src/-private/class-based/modifier-manager.ts","webpack://photodiode/../src/-private/class-based/modifier.ts","webpack://photodiode/../src/-private/function-based/modifier.ts","webpack://photodiode/../src/-private/function-based/modifier-manager.ts","webpack://photodiode/../../src/services/page-title.ts","webpack://photodiode/../../../../node_modules/.pnpm/eventemitter3@5.0.1/node_modules/eventemitter3/index.js","webpack://photodiode/../node_modules/tslib/tslib.es6.js","webpack://photodiode/../node_modules/src/Util.ts","webpack://photodiode/../../src/css/layout/bounds.ts","webpack://photodiode/../node_modules/css-line-break/node_modules/src/Util.ts","webpack://photodiode/../node_modules/css-line-break/node_modules/utrie/node_modules/src/index.ts","webpack://photodiode/../node_modules/css-line-break/node_modules/src/Trie.ts","webpack://photodiode/../node_modules/src/linebreak-trie.ts","webpack://photodiode/../node_modules/src/LineBreak.ts","webpack://photodiode/../../src/css/syntax/tokenizer.ts","webpack://photodiode/../../src/css/syntax/parser.ts","webpack://photodiode/../../src/css/types/length.ts","webpack://photodiode/../../src/css/types/length-percentage.ts","webpack://photodiode/../../src/css/types/angle.ts","webpack://photodiode/../../src/css/types/color.ts","webpack://photodiode/../../src/css/property-descriptors/background-clip.ts","webpack://photodiode/../../src/css/property-descriptors/background-color.ts","webpack://photodiode/../../src/css/types/functions/gradient.ts","webpack://photodiode/../../src/css/types/functions/-prefix-linear-gradient.ts","webpack://photodiode/../../src/css/types/functions/radial-gradient.ts","webpack://photodiode/../../src/css/types/functions/-prefix-radial-gradient.ts","webpack://photodiode/../../src/css/types/image.ts","webpack://photodiode/../../src/css/property-descriptors/background-size.ts","webpack://photodiode/../../src/css/types/functions/linear-gradient.ts","webpack://photodiode/../../src/css/types/functions/-webkit-gradient.ts","webpack://photodiode/../../src/css/property-descriptors/background-image.ts","webpack://photodiode/../../src/css/property-descriptors/background-origin.ts","webpack://photodiode/../../src/css/property-descriptors/background-position.ts","webpack://photodiode/../../src/css/property-descriptors/background-repeat.ts","webpack://photodiode/../../src/css/property-descriptors/line-break.ts","webpack://photodiode/../../src/css/property-descriptors/border-color.ts","webpack://photodiode/../../src/css/property-descriptors/border-radius.ts","webpack://photodiode/../../src/css/property-descriptors/border-style.ts","webpack://photodiode/../../src/css/property-descriptors/border-width.ts","webpack://photodiode/../../src/css/property-descriptors/color.ts","webpack://photodiode/../../src/css/property-descriptors/direction.ts","webpack://photodiode/../../src/css/property-descriptors/display.ts","webpack://photodiode/../../src/css/property-descriptors/float.ts","webpack://photodiode/../../src/css/property-descriptors/letter-spacing.ts","webpack://photodiode/../../src/css/property-descriptors/word-break.ts","webpack://photodiode/../../src/css/property-descriptors/line-height.ts","webpack://photodiode/../../src/css/property-descriptors/list-style-image.ts","webpack://photodiode/../../src/css/property-descriptors/list-style-position.ts","webpack://photodiode/../../src/css/property-descriptors/list-style-type.ts","webpack://photodiode/../../src/css/property-descriptors/margin.ts","webpack://photodiode/../../src/css/property-descriptors/overflow.ts","webpack://photodiode/../../src/css/property-descriptors/overflow-wrap.ts","webpack://photodiode/../../src/css/property-descriptors/padding.ts","webpack://photodiode/../../src/css/property-descriptors/text-align.ts","webpack://photodiode/../../src/css/property-descriptors/position.ts","webpack://photodiode/../../src/css/property-descriptors/text-shadow.ts","webpack://photodiode/../../src/css/property-descriptors/text-transform.ts","webpack://photodiode/../../src/css/property-descriptors/transform.ts","webpack://photodiode/../../src/css/property-descriptors/transform-origin.ts","webpack://photodiode/../../src/css/property-descriptors/visibility.ts","webpack://photodiode/../node_modules/text-segmentation/node_modules/src/Util.ts","webpack://photodiode/../../src/css/property-descriptors/z-index.ts","webpack://photodiode/../../src/css/types/time.ts","webpack://photodiode/../../src/css/property-descriptors/opacity.ts","webpack://photodiode/../../src/css/property-descriptors/text-decoration-color.ts","webpack://photodiode/../../src/css/property-descriptors/text-decoration-line.ts","webpack://photodiode/../../src/css/property-descriptors/font-family.ts","webpack://photodiode/../../src/css/property-descriptors/font-size.ts","webpack://photodiode/../../src/css/property-descriptors/font-weight.ts","webpack://photodiode/../../src/css/property-descriptors/font-variant.ts","webpack://photodiode/../../src/css/property-descriptors/font-style.ts","webpack://photodiode/../../src/core/bitwise.ts","webpack://photodiode/../../src/css/property-descriptors/content.ts","webpack://photodiode/../../src/css/property-descriptors/counter-increment.ts","webpack://photodiode/../../src/css/property-descriptors/counter-reset.ts","webpack://photodiode/../../src/css/property-descriptors/duration.ts","webpack://photodiode/../../src/css/property-descriptors/quotes.ts","webpack://photodiode/../../src/css/property-descriptors/box-shadow.ts","webpack://photodiode/../../src/css/property-descriptors/paint-order.ts","webpack://photodiode/../../src/css/property-descriptors/webkit-text-stroke-color.ts","webpack://photodiode/../../src/css/property-descriptors/webkit-text-stroke-width.ts","webpack://photodiode/../../src/css/index.ts","webpack://photodiode/../../src/core/debugger.ts","webpack://photodiode/../../src/dom/element-container.ts","webpack://photodiode/../node_modules/text-segmentation/node_modules/utrie/node_modules/src/index.ts","webpack://photodiode/../node_modules/text-segmentation/node_modules/src/Trie.ts","webpack://photodiode/../node_modules/src/GraphemeBreak.ts","webpack://photodiode/../../src/dom/document-cloner.ts","webpack://photodiode/../node_modules/src/grapheme-break-trie.ts","webpack://photodiode/../../src/core/features.ts","webpack://photodiode/../../src/css/layout/text.ts","webpack://photodiode/../../src/dom/text-container.ts","webpack://photodiode/../../src/dom/replaced-elements/image-element-container.ts","webpack://photodiode/../../src/dom/replaced-elements/canvas-element-container.ts","webpack://photodiode/../../src/dom/replaced-elements/svg-element-container.ts","webpack://photodiode/../../src/dom/elements/li-element-container.ts","webpack://photodiode/../../src/dom/elements/ol-element-container.ts","webpack://photodiode/../../src/dom/replaced-elements/input-element-container.ts","webpack://photodiode/../../src/dom/elements/select-element-container.ts","webpack://photodiode/../../src/dom/elements/textarea-element-container.ts","webpack://photodiode/../../src/dom/replaced-elements/iframe-element-container.ts","webpack://photodiode/../../src/dom/node-parser.ts","webpack://photodiode/../../src/css/types/functions/counter.ts","webpack://photodiode/../../src/render/bound-curves.ts","webpack://photodiode/../../src/core/cache-storage.ts","webpack://photodiode/../../src/render/vector.ts","webpack://photodiode/../../src/render/bezier-curve.ts","webpack://photodiode/../../src/render/effects.ts","webpack://photodiode/../../src/render/path.ts","webpack://photodiode/../../src/render/stacking-context.ts","webpack://photodiode/../../src/render/border.ts","webpack://photodiode/../../src/render/box-sizing.ts","webpack://photodiode/../../src/render/background.ts","webpack://photodiode/../../src/render/font-metrics.ts","webpack://photodiode/../../src/core/util.ts","webpack://photodiode/../../src/render/renderer.ts","webpack://photodiode/../../src/render/canvas/canvas-renderer.ts","webpack://photodiode/../../src/render/canvas/foreignobject-renderer.ts","webpack://photodiode/../../src/core/logger.ts","webpack://photodiode/../../src/core/context.ts","webpack://photodiode/../../src/index.ts","webpack://photodiode/../../../../node_modules/.pnpm/fflate@0.4.8/node_modules/fflate/esm/browser.js","webpack://photodiode/../src/libs/globalObject.js","webpack://photodiode/../src/libs/console.js","webpack://photodiode/../src/libs/FileSaver.js","webpack://photodiode/../src/libs/AtobBtoa.js","webpack://photodiode/../src/libs/rgbcolor.js","webpack://photodiode/../src/libs/md5.js","webpack://photodiode/../src/libs/rc4.js","webpack://photodiode/../src/libs/pdfsecurity.js","webpack://photodiode/../src/libs/pdfname.js","webpack://photodiode/../src/jspdf.js","webpack://photodiode/../src/modules/acroform.js","webpack://photodiode/../src/modules/annotations.js","webpack://photodiode/../src/libs/fontFace.js","webpack://photodiode/../src/modules/addimage.js","webpack://photodiode/../src/modules/arabic.js","webpack://photodiode/../src/modules/autoprint.js","webpack://photodiode/../src/modules/canvas.js","webpack://photodiode/../src/modules/cell.js","webpack://photodiode/../src/modules/javascript.js","webpack://photodiode/../src/modules/context2d.js","webpack://photodiode/../src/modules/filters.js","webpack://photodiode/../src/modules/fileloading.js","webpack://photodiode/../src/modules/html.js","webpack://photodiode/../src/modules/outline.js","webpack://photodiode/../src/modules/jpeg_support.js","webpack://photodiode/../src/libs/png.js","webpack://photodiode/../src/modules/split_text_to_size.js","webpack://photodiode/../src/libs/omggif.js","webpack://photodiode/../src/libs/JPEGEncoder.js","webpack://photodiode/../src/libs/BMPDecoder.js","webpack://photodiode/../src/libs/WebPDecoder.js","webpack://photodiode/../src/modules/png_support.js","webpack://photodiode/../src/modules/gif_support.js","webpack://photodiode/../src/modules/bmp_support.js","webpack://photodiode/../src/modules/webp_support.js","webpack://photodiode/../src/modules/rgba_support.js","webpack://photodiode/../src/modules/setlanguage.js","webpack://photodiode/../src/modules/standard_fonts_metrics.js","webpack://photodiode/../src/modules/ttfsupport.js","webpack://photodiode/../src/modules/svg.js","webpack://photodiode/../src/modules/total_pages.js","webpack://photodiode/../src/modules/viewerpreferences.js","webpack://photodiode/../src/modules/xmp_metadata.js","webpack://photodiode/../src/modules/utf8.js","webpack://photodiode/../src/modules/vfs.js","webpack://photodiode/../src/libs/bidiEngine.js","webpack://photodiode/../src/libs/ttffont.js","webpack://photodiode/../../../../node_modules/.pnpm/@ungap+structured-clone@0.3.4/node_modules/@ungap/structured-clone/esm/types.js","webpack://photodiode/../../../../node_modules/.pnpm/@ungap+structured-clone@0.3.4/node_modules/@ungap/structured-clone/esm/deserialize.js","webpack://photodiode/../../../../node_modules/.pnpm/@ungap+structured-clone@0.3.4/node_modules/@ungap/structured-clone/esm/serialize.js","webpack://photodiode/../../../../node_modules/.pnpm/@ungap+structured-clone@0.3.4/node_modules/@ungap/structured-clone/esm/index.js","webpack://photodiode/../src/utils/is-object.ts","webpack://photodiode/../src/-private/change.ts","webpack://photodiode/../src/-private/err.ts","webpack://photodiode/../src/utils/get-key-values.ts","webpack://photodiode/../src/utils/is-promise.ts","webpack://photodiode/../src/utils/handle-multiple-validations.ts","webpack://photodiode/../src/utils/get-deep.ts","webpack://photodiode/../src/utils/validator-lookup.ts","webpack://photodiode/../src/-private/notifier.ts","webpack://photodiode/../src/-private/evented.ts","webpack://photodiode/../src/utils/has-key.ts","webpack://photodiode/../src/utils/normalize-object.ts","webpack://photodiode/../src/utils/has-changes.ts","webpack://photodiode/../src/utils/assign.ts","webpack://photodiode/../src/utils/flatten-validations.ts","webpack://photodiode/../src/utils/is-changeset.ts","webpack://photodiode/../src/utils/key-in-object.ts","webpack://photodiode/../src/utils/array-object.ts","webpack://photodiode/../src/utils/set-deep.ts","webpack://photodiode/../src/utils/merge-nested.ts","webpack://photodiode/../src/utils/build-old-values.ts","webpack://photodiode/../src/utils/merge-deep.ts","webpack://photodiode/../src/utils/object-tree-node.ts","webpack://photodiode/../src/utils/object-without.ts","webpack://photodiode/../src/validated.ts","webpack://photodiode/../src/utils/take.ts","webpack://photodiode/../../../../node_modules/.pnpm/@babel+runtime@7.24.7/node_modules/@babel/runtime/helpers/esm/applyDecoratedDescriptor.js","webpack://photodiode/../../../../node_modules/.pnpm/@babel+runtime@7.24.7/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://photodiode/../../../../node_modules/.pnpm/@babel+runtime@7.24.7/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://photodiode/../../../../node_modules/.pnpm/@babel+runtime@7.24.7/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://photodiode/../../../../node_modules/.pnpm/@babel+runtime@7.24.7/node_modules/@babel/runtime/helpers/esm/initializerDefineProperty.js","webpack://photodiode/../../../../node_modules/.pnpm/@babel+runtime@7.24.7/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://photodiode/../src/runtime.ts"],"sourcesContent":["export default {\n  urls: {\n    home: '{siteURL}/{loc}/',\n    company: '{siteURL}/{loc}/company.html',\n    products: '{siteURL}/{loc}/products.html',\n    applications: '{siteURL}/{loc}/applications.html',\n    designCenter: '{siteURL}/{loc}/design-center.html',\n    education: '{siteURL}/{loc}/education.html',\n    support: '{siteURL}/{loc}/support.html',\n    sitemap: '{siteURL}/{loc}/sitemap.html',\n    legal: '{siteURL}/{loc}/who-we-are/legal-and-risk-oversight.html',\n    accessibility: '{siteURL}/{loc}/who-we-are/legal-and-risk-oversight/accessibility-statement.html',\n    privacyPolicy: '{siteURL}/{loc}/who-we-are/legal-and-risk-oversight/data-privacy/privacy-policy.html',\n    privacySettings: '{siteURL}/{loc}/lp/001/privacy-settings.html',\n    cookieSettings: '{siteURL}/{loc}/cookie-notice.html',\n  },\n};\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<header class=\\\"aditools-header\\\" ...attributes>\\n  <ul class=\\\"aditools-header_links\\\">\\n    {{#if @suppressDropdown}}\\n      <li class=\\\"aditools-header_dropdown-placeholder\\\"/>\\n    {{else}}\\n      <li class=\\\"aditools-header_dropdown dropdown--site\\\" >\\n        <button type=\\\"button\\\" class=\\\"aditools-header_dropdown-trigger\\\" data-qa-element=\\\"header_hamburger_menu_btn\\\" aria-label={{t \\\"ember-aditools-page.header.spoken.sitelinks\\\"}}></button>\\n        <ul class=\\\"aditools-header_dropdown-links\\\" data-qa-element=\\\"header_hamburger_menu\\\">\\n          <li class=\\\"company\\\">\\n            <a href={{this.companyURL}}>{{t \\\"ember-aditools-page.header.company\\\" }}</a>\\n          </li>\\n          <li class=\\\"products\\\">\\n            <a href={{this.productsURL}}>{{t \\\"ember-aditools-page.header.products\\\" }}</a>\\n          </li>\\n          <li class=\\\"application\\\">\\n            <a href={{this.applicationsURL}}>{{t \\\"ember-aditools-page.header.applications\\\" }}</a>\\n          </li>\\n          <li class=\\\"designcenter\\\">\\n            <a href={{this.designCenterURL}}>{{t \\\"ember-aditools-page.header.design-center\\\" }}</a>\\n          </li>\\n          <li class=\\\"education\\\">\\n            <a href={{this.educationURL}}>{{t \\\"ember-aditools-page.header.education\\\" }}</a>\\n          </li>\\n          <li class=\\\"support\\\">\\n            <a href={{this.supportURL}}>{{t \\\"ember-aditools-page.header.support\\\" }}</a>\\n          </li>\\n        </ul>\\n      </li>\\n    {{/if}}\\n    <li class=\\\"aditools-header_logo {{this.logoClass}}\\\">\\n      <a data-qa-element=\\\"header_adi_logo_link\\\" href={{this.homeURL}}>\\n        <span class=\\\"aditools-speech-only\\\">{{t \\\"ember-aditools-page.header.spoken.homepage\\\"}}</span>\\n        <div></div>\\n      </a>\\n    </li>\\n    <li class=\\\"aditools-header_separator hidden-sm hidden-xs\\\"></li>\\n    <li class=\\\"aditools-header_title {{if (has-block) \\\"title--is-not-rightmost\\\"}}\\\">\\n      <h1 data-qa-element=\\\"header_page_title\\\">{{this.title}}</h1>\\n    </li>\\n    {{yield}}\\n  </ul>\\n</header>\")","import Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport Constants from '../constants.ts';\nimport type { htmlSafe } from '@ember/template';\ntype SafeString = ReturnType<typeof htmlSafe>;\n\nexport interface AditoolsHeaderSignature {\n  Element: HTMLElement;\n  Args: {\n    'tools-title'?: string | SafeString;\n    title?: string | SafeString;\n    siteURL?: string;\n    locale?: string;\n    logo?: string;\n    suppressDropdown?: boolean;\n  };\n  Blocks: {\n    default: [];\n    footer: [];\n  };\n}\ntype AditoolsHeaderArgs = AditoolsHeaderSignature['Args'];\n\nexport default class AditoolsHeader extends Component<AditoolsHeaderSignature> {\n  headerElement: HTMLElement | null = null;\n\n  constructor(owner: unknown, args: AditoolsHeaderArgs) {\n    super(owner, args);\n    assert('ADI domains now use https -- check `siteURL` string', this._siteURL.startsWith('https:'));\n    assert('Locale should be one of the following: en/jp/cn/ru', ['en', 'jp', 'cn', 'ru'].includes(this._locale));\n  }\n\n  // Optional parameters with defaults applied\n  get _siteURL() {\n    return this.args.siteURL || 'https://www.analog.com';\n  }\n\n  get _locale() {\n    return this.args.locale || 'en';\n  }\n\n  get title() {\n    return this.args.title ?? this.args['tools-title'] ?? '';\n  }\n\n  get logoClass() {\n    return this.args.logo && this.args.logo === 'adi2'\n      ? 'logo--adi2'\n      : this.args.logo && this.args.logo === 'adi'\n      ? 'logo--adi'\n      : 'logo--awp';\n  }\n\n  get companyURL() {\n    return Constants.urls.company.replace('{siteURL}', this._siteURL).replace('{loc}', this._locale);\n  }\n\n  get productsURL() {\n    return Constants.urls.products.replace('{siteURL}', this._siteURL).replace('{loc}', this._locale);\n  }\n\n  get applicationsURL() {\n    return Constants.urls.applications.replace('{siteURL}', this._siteURL).replace('{loc}', this._locale);\n  }\n\n  get designCenterURL() {\n    return Constants.urls.designCenter.replace('{siteURL}', this._siteURL).replace('{loc}', this._locale);\n  }\n\n  get educationURL() {\n    return Constants.urls.education.replace('{siteURL}', this._siteURL).replace('{loc}', this._locale);\n  }\n\n  get supportURL() {\n    return Constants.urls.support.replace('{siteURL}', this._siteURL).replace('{loc}', this._locale);\n  }\n\n  get homeURL() {\n    return Constants.urls.home.replace('{siteURL}', this._siteURL).replace('{loc}', this._locale);\n  }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<div class=\\\"aditools-precision-studio-dropdown\\\" {{this.renderer this.insertedMenu this.destroyingMenu}} />\\n\")","import Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport PrecisionStudioMenu from '@ebiz/aditools-precisionstudio-menu';\nimport '@ebiz/aditools-precisionstudio-menu/lib/precisionstudio-menu.css';\nimport AditoolsRenderer from '../modifiers/aditools-renderer.ts';\n\nexport interface AditoolsStudioDropdownSignature {\n  Element: HTMLDivElement;\n  Args: {\n    locale?: string;\n    toolUrls?: { [K: string]: string };\n  };\n}\n\nexport default class AditoolsStudioDropdown extends Component<AditoolsStudioDropdownSignature> {\n  renderer = AditoolsRenderer;\n  precisionStudioMenu?: PrecisionStudioMenu;\n\n  // Optional parameters with defaults applied\n  get _toolUrls() {\n    return this.args.toolUrls ?? {};\n  }\n\n  get _locale() {\n    return this.args.locale ?? 'en';\n  }\n\n  @action\n  insertedMenu(element: Element) {\n    this.precisionStudioMenu = new PrecisionStudioMenu({\n      locale: this._locale,\n      toolurls: this._toolUrls,\n    });\n    this.precisionStudioMenu.attach(element);\n  }\n\n  @action\n  destroyingMenu(/*element: Element*/) {\n    if (this.precisionStudioMenu) {\n      this.precisionStudioMenu.detach();\n      this.precisionStudioMenu = undefined;\n    }\n  }\n}\n","import { helper } from '@ember/component/helper';\nimport truthConvert from '../utils/truth-convert';\n\nexport function not(params) {\n  for (let i=0, len=params.length; i<len; i++) {\n    if (truthConvert(params[i]) === true) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport default helper(not);\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n  x: v,\n  y: v\n});\nconst oppositeSideMap = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n  start: 'end',\n  end: 'start'\n};\nfunction clamp(start, value, end) {\n  return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n  return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n  return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n  return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n  return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n  return ['top', 'bottom'].includes(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n  return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n  if (rtl === void 0) {\n    rtl = false;\n  }\n  const alignment = getAlignment(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const length = getAxisLength(alignmentAxis);\n  let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n  if (rects.reference[length] > rects.floating[length]) {\n    mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n  }\n  return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n  const oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n  return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nfunction getSideList(side, isStart, rtl) {\n  const lr = ['left', 'right'];\n  const rl = ['right', 'left'];\n  const tb = ['top', 'bottom'];\n  const bt = ['bottom', 'top'];\n  switch (side) {\n    case 'top':\n    case 'bottom':\n      if (rtl) return isStart ? rl : lr;\n      return isStart ? lr : rl;\n    case 'left':\n    case 'right':\n      return isStart ? tb : bt;\n    default:\n      return [];\n  }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n  const alignment = getAlignment(placement);\n  let list = getSideList(getSide(placement), direction === 'start', rtl);\n  if (alignment) {\n    list = list.map(side => side + \"-\" + alignment);\n    if (flipAlignment) {\n      list = list.concat(list.map(getOppositeAlignmentPlacement));\n    }\n  }\n  return list;\n}\nfunction getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    ...padding\n  };\n}\nfunction getPaddingObject(padding) {\n  return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n    top: padding,\n    right: padding,\n    bottom: padding,\n    left: padding\n  };\n}\nfunction rectToClientRect(rect) {\n  const {\n    x,\n    y,\n    width,\n    height\n  } = rect;\n  return {\n    width,\n    height,\n    top: y,\n    left: x,\n    right: x + width,\n    bottom: y + height,\n    x,\n    y\n  };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n  let {\n    reference,\n    floating\n  } = _ref;\n  const sideAxis = getSideAxis(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const alignLength = getAxisLength(alignmentAxis);\n  const side = getSide(placement);\n  const isVertical = sideAxis === 'y';\n  const commonX = reference.x + reference.width / 2 - floating.width / 2;\n  const commonY = reference.y + reference.height / 2 - floating.height / 2;\n  const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n  let coords;\n  switch (side) {\n    case 'top':\n      coords = {\n        x: commonX,\n        y: reference.y - floating.height\n      };\n      break;\n    case 'bottom':\n      coords = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n    case 'right':\n      coords = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n    case 'left':\n      coords = {\n        x: reference.x - floating.width,\n        y: commonY\n      };\n      break;\n    default:\n      coords = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n  switch (getAlignment(placement)) {\n    case 'start':\n      coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n    case 'end':\n      coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n  }\n  return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform\n  } = config;\n  const validMiddleware = middleware.filter(Boolean);\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n  let rects = await platform.getElementRects({\n    reference,\n    floating,\n    strategy\n  });\n  let {\n    x,\n    y\n  } = computeCoordsFromPlacement(rects, placement, rtl);\n  let statefulPlacement = placement;\n  let middlewareData = {};\n  let resetCount = 0;\n  for (let i = 0; i < validMiddleware.length; i++) {\n    const {\n      name,\n      fn\n    } = validMiddleware[i];\n    const {\n      x: nextX,\n      y: nextY,\n      data,\n      reset\n    } = await fn({\n      x,\n      y,\n      initialPlacement: placement,\n      placement: statefulPlacement,\n      strategy,\n      middlewareData,\n      rects,\n      platform,\n      elements: {\n        reference,\n        floating\n      }\n    });\n    x = nextX != null ? nextX : x;\n    y = nextY != null ? nextY : y;\n    middlewareData = {\n      ...middlewareData,\n      [name]: {\n        ...middlewareData[name],\n        ...data\n      }\n    };\n    if (reset && resetCount <= 50) {\n      resetCount++;\n      if (typeof reset === 'object') {\n        if (reset.placement) {\n          statefulPlacement = reset.placement;\n        }\n        if (reset.rects) {\n          rects = reset.rects === true ? await platform.getElementRects({\n            reference,\n            floating,\n            strategy\n          }) : reset.rects;\n        }\n        ({\n          x,\n          y\n        } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n      }\n      i = -1;\n    }\n  }\n  return {\n    x,\n    y,\n    placement: statefulPlacement,\n    strategy,\n    middlewareData\n  };\n};\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n  var _await$platform$isEle;\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    x,\n    y,\n    platform,\n    rects,\n    elements,\n    strategy\n  } = state;\n  const {\n    boundary = 'clippingAncestors',\n    rootBoundary = 'viewport',\n    elementContext = 'floating',\n    altBoundary = false,\n    padding = 0\n  } = evaluate(options, state);\n  const paddingObject = getPaddingObject(padding);\n  const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n  const element = elements[altBoundary ? altContext : elementContext];\n  const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n    element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n    boundary,\n    rootBoundary,\n    strategy\n  }));\n  const rect = elementContext === 'floating' ? {\n    x,\n    y,\n    width: rects.floating.width,\n    height: rects.floating.height\n  } : rects.reference;\n  const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n  const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n    x: 1,\n    y: 1\n  } : {\n    x: 1,\n    y: 1\n  };\n  const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  }) : rect);\n  return {\n    top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n    bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n    left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n    right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n  };\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n  name: 'arrow',\n  options,\n  async fn(state) {\n    const {\n      x,\n      y,\n      placement,\n      rects,\n      platform,\n      elements,\n      middlewareData\n    } = state;\n    // Since `element` is required, we don't Partial<> the type.\n    const {\n      element,\n      padding = 0\n    } = evaluate(options, state) || {};\n    if (element == null) {\n      return {};\n    }\n    const paddingObject = getPaddingObject(padding);\n    const coords = {\n      x,\n      y\n    };\n    const axis = getAlignmentAxis(placement);\n    const length = getAxisLength(axis);\n    const arrowDimensions = await platform.getDimensions(element);\n    const isYAxis = axis === 'y';\n    const minProp = isYAxis ? 'top' : 'left';\n    const maxProp = isYAxis ? 'bottom' : 'right';\n    const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n    const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n    const startDiff = coords[axis] - rects.reference[axis];\n    const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n    let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n    // DOM platform can return `window` as the `offsetParent`.\n    if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n      clientSize = elements.floating[clientProp] || rects.floating[length];\n    }\n    const centerToReference = endDiff / 2 - startDiff / 2;\n\n    // If the padding is large enough that it causes the arrow to no longer be\n    // centered, modify the padding so that it is centered.\n    const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n    const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n    const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n    // Make sure the arrow doesn't overflow the floating element if the center\n    // point is outside the floating element's bounds.\n    const min$1 = minPadding;\n    const max = clientSize - arrowDimensions[length] - maxPadding;\n    const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n    const offset = clamp(min$1, center, max);\n\n    // If the reference is small enough that the arrow's padding causes it to\n    // to point to nothing for an aligned placement, adjust the offset of the\n    // floating element itself. To ensure `shift()` continues to take action,\n    // a single reset is performed when this is true.\n    const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n    const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n    return {\n      [axis]: coords[axis] + alignmentOffset,\n      data: {\n        [axis]: offset,\n        centerOffset: center - offset - alignmentOffset,\n        ...(shouldAddOffset && {\n          alignmentOffset\n        })\n      },\n      reset: shouldAddOffset\n    };\n  }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n  const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n  return allowedPlacementsSortedByAlignment.filter(placement => {\n    if (alignment) {\n      return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n    }\n    return true;\n  });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'autoPlacement',\n    options,\n    async fn(state) {\n      var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n      const {\n        rects,\n        middlewareData,\n        placement,\n        platform,\n        elements\n      } = state;\n      const {\n        crossAxis = false,\n        alignment,\n        allowedPlacements = placements,\n        autoAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n      const currentPlacement = placements$1[currentIndex];\n      if (currentPlacement == null) {\n        return {};\n      }\n      const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n      // Make `computeCoords` start from the right place.\n      if (placement !== currentPlacement) {\n        return {\n          reset: {\n            placement: placements$1[0]\n          }\n        };\n      }\n      const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n      const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n        placement: currentPlacement,\n        overflows: currentOverflows\n      }];\n      const nextPlacement = placements$1[currentIndex + 1];\n\n      // There are more placements to check.\n      if (nextPlacement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: nextPlacement\n          }\n        };\n      }\n      const placementsSortedByMostSpace = allOverflows.map(d => {\n        const alignment = getAlignment(d.placement);\n        return [d.placement, alignment && crossAxis ?\n        // Check along the mainAxis and main crossAxis side.\n        d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n        // Check only the mainAxis.\n        d.overflows[0], d.overflows];\n      }).sort((a, b) => a[1] - b[1]);\n      const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n      // Aligned placements should not check their opposite crossAxis\n      // side.\n      getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n      const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n      if (resetPlacement !== placement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: resetPlacement\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'flip',\n    options,\n    async fn(state) {\n      var _middlewareData$arrow, _middlewareData$flip;\n      const {\n        placement,\n        middlewareData,\n        rects,\n        initialPlacement,\n        platform,\n        elements\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true,\n        fallbackPlacements: specifiedFallbackPlacements,\n        fallbackStrategy = 'bestFit',\n        fallbackAxisSideDirection = 'none',\n        flipAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n\n      // If a reset by the arrow was caused due to an alignment offset being\n      // added, we should skip any logic now since `flip()` has already done its\n      // work.\n      // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n      if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      const side = getSide(placement);\n      const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n      const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n      const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n      if (!specifiedFallbackPlacements && fallbackAxisSideDirection !== 'none') {\n        fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n      }\n      const placements = [initialPlacement, ...fallbackPlacements];\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const overflows = [];\n      let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n      if (checkMainAxis) {\n        overflows.push(overflow[side]);\n      }\n      if (checkCrossAxis) {\n        const sides = getAlignmentSides(placement, rects, rtl);\n        overflows.push(overflow[sides[0]], overflow[sides[1]]);\n      }\n      overflowsData = [...overflowsData, {\n        placement,\n        overflows\n      }];\n\n      // One or more sides is overflowing.\n      if (!overflows.every(side => side <= 0)) {\n        var _middlewareData$flip2, _overflowsData$filter;\n        const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n        const nextPlacement = placements[nextIndex];\n        if (nextPlacement) {\n          // Try next placement and re-run the lifecycle.\n          return {\n            data: {\n              index: nextIndex,\n              overflows: overflowsData\n            },\n            reset: {\n              placement: nextPlacement\n            }\n          };\n        }\n\n        // First, find the candidates that fit on the mainAxis side of overflow,\n        // then find the placement that fits the best on the main crossAxis side.\n        let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n        // Otherwise fallback.\n        if (!resetPlacement) {\n          switch (fallbackStrategy) {\n            case 'bestFit':\n              {\n                var _overflowsData$map$so;\n                const placement = (_overflowsData$map$so = overflowsData.map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$map$so[0];\n                if (placement) {\n                  resetPlacement = placement;\n                }\n                break;\n              }\n            case 'initialPlacement':\n              resetPlacement = initialPlacement;\n              break;\n          }\n        }\n        if (placement !== resetPlacement) {\n          return {\n            reset: {\n              placement: resetPlacement\n            }\n          };\n        }\n      }\n      return {};\n    }\n  };\n};\n\nfunction getSideOffsets(overflow, rect) {\n  return {\n    top: overflow.top - rect.height,\n    right: overflow.right - rect.width,\n    bottom: overflow.bottom - rect.height,\n    left: overflow.left - rect.width\n  };\n}\nfunction isAnySideFullyClipped(overflow) {\n  return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'hide',\n    options,\n    async fn(state) {\n      const {\n        rects\n      } = state;\n      const {\n        strategy = 'referenceHidden',\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      switch (strategy) {\n        case 'referenceHidden':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              elementContext: 'reference'\n            });\n            const offsets = getSideOffsets(overflow, rects.reference);\n            return {\n              data: {\n                referenceHiddenOffsets: offsets,\n                referenceHidden: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        case 'escaped':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              altBoundary: true\n            });\n            const offsets = getSideOffsets(overflow, rects.floating);\n            return {\n              data: {\n                escapedOffsets: offsets,\n                escaped: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        default:\n          {\n            return {};\n          }\n      }\n    }\n  };\n};\n\nfunction getBoundingRect(rects) {\n  const minX = min(...rects.map(rect => rect.left));\n  const minY = min(...rects.map(rect => rect.top));\n  const maxX = max(...rects.map(rect => rect.right));\n  const maxY = max(...rects.map(rect => rect.bottom));\n  return {\n    x: minX,\n    y: minY,\n    width: maxX - minX,\n    height: maxY - minY\n  };\n}\nfunction getRectsByLine(rects) {\n  const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n  const groups = [];\n  let prevRect = null;\n  for (let i = 0; i < sortedRects.length; i++) {\n    const rect = sortedRects[i];\n    if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n      groups.push([rect]);\n    } else {\n      groups[groups.length - 1].push(rect);\n    }\n    prevRect = rect;\n  }\n  return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'inline',\n    options,\n    async fn(state) {\n      const {\n        placement,\n        elements,\n        rects,\n        platform,\n        strategy\n      } = state;\n      // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n      // ClientRect's bounds, despite the event listener being triggered. A\n      // padding of 2 seems to handle this issue.\n      const {\n        padding = 2,\n        x,\n        y\n      } = evaluate(options, state);\n      const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n      const clientRects = getRectsByLine(nativeClientRects);\n      const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n      const paddingObject = getPaddingObject(padding);\n      function getBoundingClientRect() {\n        // There are two rects and they are disjoined.\n        if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n          // Find the first rect in which the point is fully inside.\n          return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n        }\n\n        // There are 2 or more connected rects.\n        if (clientRects.length >= 2) {\n          if (getSideAxis(placement) === 'y') {\n            const firstRect = clientRects[0];\n            const lastRect = clientRects[clientRects.length - 1];\n            const isTop = getSide(placement) === 'top';\n            const top = firstRect.top;\n            const bottom = lastRect.bottom;\n            const left = isTop ? firstRect.left : lastRect.left;\n            const right = isTop ? firstRect.right : lastRect.right;\n            const width = right - left;\n            const height = bottom - top;\n            return {\n              top,\n              bottom,\n              left,\n              right,\n              width,\n              height,\n              x: left,\n              y: top\n            };\n          }\n          const isLeftSide = getSide(placement) === 'left';\n          const maxRight = max(...clientRects.map(rect => rect.right));\n          const minLeft = min(...clientRects.map(rect => rect.left));\n          const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n          const top = measureRects[0].top;\n          const bottom = measureRects[measureRects.length - 1].bottom;\n          const left = minLeft;\n          const right = maxRight;\n          const width = right - left;\n          const height = bottom - top;\n          return {\n            top,\n            bottom,\n            left,\n            right,\n            width,\n            height,\n            x: left,\n            y: top\n          };\n        }\n        return fallback;\n      }\n      const resetRects = await platform.getElementRects({\n        reference: {\n          getBoundingClientRect\n        },\n        floating: elements.floating,\n        strategy\n      });\n      if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n        return {\n          reset: {\n            rects: resetRects\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n  const {\n    placement,\n    platform,\n    elements\n  } = state;\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n  const side = getSide(placement);\n  const alignment = getAlignment(placement);\n  const isVertical = getSideAxis(placement) === 'y';\n  const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;\n  const crossAxisMulti = rtl && isVertical ? -1 : 1;\n  const rawValue = evaluate(options, state);\n\n  // eslint-disable-next-line prefer-const\n  let {\n    mainAxis,\n    crossAxis,\n    alignmentAxis\n  } = typeof rawValue === 'number' ? {\n    mainAxis: rawValue,\n    crossAxis: 0,\n    alignmentAxis: null\n  } : {\n    mainAxis: 0,\n    crossAxis: 0,\n    alignmentAxis: null,\n    ...rawValue\n  };\n  if (alignment && typeof alignmentAxis === 'number') {\n    crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n  }\n  return isVertical ? {\n    x: crossAxis * crossAxisMulti,\n    y: mainAxis * mainAxisMulti\n  } : {\n    x: mainAxis * mainAxisMulti,\n    y: crossAxis * crossAxisMulti\n  };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n  if (options === void 0) {\n    options = 0;\n  }\n  return {\n    name: 'offset',\n    options,\n    async fn(state) {\n      var _middlewareData$offse, _middlewareData$arrow;\n      const {\n        x,\n        y,\n        placement,\n        middlewareData\n      } = state;\n      const diffCoords = await convertValueToCoords(state, options);\n\n      // If the placement is the same and the arrow caused an alignment offset\n      // then we don't need to change the positioning coordinates.\n      if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      return {\n        x: x + diffCoords.x,\n        y: y + diffCoords.y,\n        data: {\n          ...diffCoords,\n          placement\n        }\n      };\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'shift',\n    options,\n    async fn(state) {\n      const {\n        x,\n        y,\n        placement\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = false,\n        limiter = {\n          fn: _ref => {\n            let {\n              x,\n              y\n            } = _ref;\n            return {\n              x,\n              y\n            };\n          }\n        },\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const crossAxis = getSideAxis(getSide(placement));\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      if (checkMainAxis) {\n        const minSide = mainAxis === 'y' ? 'top' : 'left';\n        const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n        const min = mainAxisCoord + overflow[minSide];\n        const max = mainAxisCoord - overflow[maxSide];\n        mainAxisCoord = clamp(min, mainAxisCoord, max);\n      }\n      if (checkCrossAxis) {\n        const minSide = crossAxis === 'y' ? 'top' : 'left';\n        const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n        const min = crossAxisCoord + overflow[minSide];\n        const max = crossAxisCoord - overflow[maxSide];\n        crossAxisCoord = clamp(min, crossAxisCoord, max);\n      }\n      const limitedCoords = limiter.fn({\n        ...state,\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      });\n      return {\n        ...limitedCoords,\n        data: {\n          x: limitedCoords.x - x,\n          y: limitedCoords.y - y\n        }\n      };\n    }\n  };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    options,\n    fn(state) {\n      const {\n        x,\n        y,\n        placement,\n        rects,\n        middlewareData\n      } = state;\n      const {\n        offset = 0,\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const crossAxis = getSideAxis(placement);\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      const rawOffset = evaluate(offset, state);\n      const computedOffset = typeof rawOffset === 'number' ? {\n        mainAxis: rawOffset,\n        crossAxis: 0\n      } : {\n        mainAxis: 0,\n        crossAxis: 0,\n        ...rawOffset\n      };\n      if (checkMainAxis) {\n        const len = mainAxis === 'y' ? 'height' : 'width';\n        const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n        const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n        if (mainAxisCoord < limitMin) {\n          mainAxisCoord = limitMin;\n        } else if (mainAxisCoord > limitMax) {\n          mainAxisCoord = limitMax;\n        }\n      }\n      if (checkCrossAxis) {\n        var _middlewareData$offse, _middlewareData$offse2;\n        const len = mainAxis === 'y' ? 'width' : 'height';\n        const isOriginSide = ['top', 'left'].includes(getSide(placement));\n        const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n        const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n        if (crossAxisCoord < limitMin) {\n          crossAxisCoord = limitMin;\n        } else if (crossAxisCoord > limitMax) {\n          crossAxisCoord = limitMax;\n        }\n      }\n      return {\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      };\n    }\n  };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'size',\n    options,\n    async fn(state) {\n      const {\n        placement,\n        rects,\n        platform,\n        elements\n      } = state;\n      const {\n        apply = () => {},\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const side = getSide(placement);\n      const alignment = getAlignment(placement);\n      const isYAxis = getSideAxis(placement) === 'y';\n      const {\n        width,\n        height\n      } = rects.floating;\n      let heightSide;\n      let widthSide;\n      if (side === 'top' || side === 'bottom') {\n        heightSide = side;\n        widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n      } else {\n        widthSide = side;\n        heightSide = alignment === 'end' ? 'top' : 'bottom';\n      }\n      const maximumClippingHeight = height - overflow.top - overflow.bottom;\n      const maximumClippingWidth = width - overflow.left - overflow.right;\n      const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n      const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n      const noShift = !state.middlewareData.shift;\n      let availableHeight = overflowAvailableHeight;\n      let availableWidth = overflowAvailableWidth;\n      if (isYAxis) {\n        availableWidth = alignment || noShift ? min(overflowAvailableWidth, maximumClippingWidth) : maximumClippingWidth;\n      } else {\n        availableHeight = alignment || noShift ? min(overflowAvailableHeight, maximumClippingHeight) : maximumClippingHeight;\n      }\n      if (noShift && !alignment) {\n        const xMin = max(overflow.left, 0);\n        const xMax = max(overflow.right, 0);\n        const yMin = max(overflow.top, 0);\n        const yMax = max(overflow.bottom, 0);\n        if (isYAxis) {\n          availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n        } else {\n          availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n        }\n      }\n      await apply({\n        ...state,\n        availableWidth,\n        availableHeight\n      });\n      const nextDimensions = await platform.getDimensions(elements.floating);\n      if (width !== nextDimensions.width || height !== nextDimensions.height) {\n        return {\n          reset: {\n            rects: true\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function getNodeName(node) {\n  if (isNode(node)) {\n    return (node.nodeName || '').toLowerCase();\n  }\n  // Mocked nodes in testing environments may not be instances of Node. By\n  // returning `#document` an infinite loop won't occur.\n  // https://github.com/floating-ui/floating-ui/issues/2317\n  return '#document';\n}\nfunction getWindow(node) {\n  var _node$ownerDocument;\n  return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n  var _ref;\n  return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n  return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n  return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n  return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n  // Browsers without `ShadowRoot` support.\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n  const {\n    overflow,\n    overflowX,\n    overflowY,\n    display\n  } = getComputedStyle(element);\n  return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display);\n}\nfunction isTableElement(element) {\n  return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isTopLayer(element) {\n  return [':popover-open', ':modal'].some(selector => {\n    try {\n      return element.matches(selector);\n    } catch (e) {\n      return false;\n    }\n  });\n}\nfunction isContainingBlock(elementOrCss) {\n  const webkit = isWebKit();\n  const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  return css.transform !== 'none' || css.perspective !== 'none' || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || ['transform', 'perspective', 'filter'].some(value => (css.willChange || '').includes(value)) || ['paint', 'layout', 'strict', 'content'].some(value => (css.contain || '').includes(value));\n}\nfunction getContainingBlock(element) {\n  let currentNode = getParentNode(element);\n  while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    if (isContainingBlock(currentNode)) {\n      return currentNode;\n    } else if (isTopLayer(currentNode)) {\n      return null;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  return null;\n}\nfunction isWebKit() {\n  if (typeof CSS === 'undefined' || !CSS.supports) return false;\n  return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nfunction isLastTraversableNode(node) {\n  return ['html', 'body', '#document'].includes(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n  if (isElement(element)) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n  return {\n    scrollLeft: element.scrollX,\n    scrollTop: element.scrollY\n  };\n}\nfunction getParentNode(node) {\n  if (getNodeName(node) === 'html') {\n    return node;\n  }\n  const result =\n  // Step into the shadow DOM of the parent of a slotted node.\n  node.assignedSlot ||\n  // DOM Element detected.\n  node.parentNode ||\n  // ShadowRoot detected.\n  isShadowRoot(node) && node.host ||\n  // Fallback.\n  getDocumentElement(node);\n  return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n  const parentNode = getParentNode(node);\n  if (isLastTraversableNode(parentNode)) {\n    return node.ownerDocument ? node.ownerDocument.body : node.body;\n  }\n  if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n    return parentNode;\n  }\n  return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n  var _node$ownerDocument2;\n  if (list === void 0) {\n    list = [];\n  }\n  if (traverseIframes === void 0) {\n    traverseIframes = true;\n  }\n  const scrollableAncestor = getNearestOverflowAncestor(node);\n  const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n  const win = getWindow(scrollableAncestor);\n  if (isBody) {\n    const frameElement = getFrameElement(win);\n    return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n  }\n  return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\nfunction getFrameElement(win) {\n  return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { rectToClientRect, detectOverflow as detectOverflow$1, offset as offset$1, autoPlacement as autoPlacement$1, shift as shift$1, flip as flip$1, size as size$1, hide as hide$1, arrow as arrow$1, inline as inline$1, limitShift as limitShift$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getNodeScroll, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n  const css = getComputedStyle(element);\n  // In testing environments, the `width` and `height` properties are empty\n  // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n  let width = parseFloat(css.width) || 0;\n  let height = parseFloat(css.height) || 0;\n  const hasOffset = isHTMLElement(element);\n  const offsetWidth = hasOffset ? element.offsetWidth : width;\n  const offsetHeight = hasOffset ? element.offsetHeight : height;\n  const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n  if (shouldFallback) {\n    width = offsetWidth;\n    height = offsetHeight;\n  }\n  return {\n    width,\n    height,\n    $: shouldFallback\n  };\n}\n\nfunction unwrapElement(element) {\n  return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n  const domElement = unwrapElement(element);\n  if (!isHTMLElement(domElement)) {\n    return createCoords(1);\n  }\n  const rect = domElement.getBoundingClientRect();\n  const {\n    width,\n    height,\n    $\n  } = getCssDimensions(domElement);\n  let x = ($ ? round(rect.width) : rect.width) / width;\n  let y = ($ ? round(rect.height) : rect.height) / height;\n\n  // 0, NaN, or Infinity should always fallback to 1.\n\n  if (!x || !Number.isFinite(x)) {\n    x = 1;\n  }\n  if (!y || !Number.isFinite(y)) {\n    y = 1;\n  }\n  return {\n    x,\n    y\n  };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n  const win = getWindow(element);\n  if (!isWebKit() || !win.visualViewport) {\n    return noOffsets;\n  }\n  return {\n    x: win.visualViewport.offsetLeft,\n    y: win.visualViewport.offsetTop\n  };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n  if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n    return false;\n  }\n  return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n  const clientRect = element.getBoundingClientRect();\n  const domElement = unwrapElement(element);\n  let scale = createCoords(1);\n  if (includeScale) {\n    if (offsetParent) {\n      if (isElement(offsetParent)) {\n        scale = getScale(offsetParent);\n      }\n    } else {\n      scale = getScale(element);\n    }\n  }\n  const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n  let x = (clientRect.left + visualOffsets.x) / scale.x;\n  let y = (clientRect.top + visualOffsets.y) / scale.y;\n  let width = clientRect.width / scale.x;\n  let height = clientRect.height / scale.y;\n  if (domElement) {\n    const win = getWindow(domElement);\n    const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n    let currentWin = win;\n    let currentIFrame = getFrameElement(currentWin);\n    while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n      const iframeScale = getScale(currentIFrame);\n      const iframeRect = currentIFrame.getBoundingClientRect();\n      const css = getComputedStyle(currentIFrame);\n      const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n      const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n      x *= iframeScale.x;\n      y *= iframeScale.y;\n      width *= iframeScale.x;\n      height *= iframeScale.y;\n      x += left;\n      y += top;\n      currentWin = getWindow(currentIFrame);\n      currentIFrame = getFrameElement(currentWin);\n    }\n  }\n  return rectToClientRect({\n    width,\n    height,\n    x,\n    y\n  });\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n  let {\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  } = _ref;\n  const isFixed = strategy === 'fixed';\n  const documentElement = getDocumentElement(offsetParent);\n  const topLayer = elements ? isTopLayer(elements.floating) : false;\n  if (offsetParent === documentElement || topLayer && isFixed) {\n    return rect;\n  }\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  let scale = createCoords(1);\n  const offsets = createCoords(0);\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isHTMLElement(offsetParent)) {\n      const offsetRect = getBoundingClientRect(offsetParent);\n      scale = getScale(offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    }\n  }\n  return {\n    width: rect.width * scale.x,\n    height: rect.height * scale.y,\n    x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x,\n    y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y\n  };\n}\n\nfunction getClientRects(element) {\n  return Array.from(element.getClientRects());\n}\n\nfunction getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  return getBoundingClientRect(getDocumentElement(element)).left + getNodeScroll(element).scrollLeft;\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n  const html = getDocumentElement(element);\n  const scroll = getNodeScroll(element);\n  const body = element.ownerDocument.body;\n  const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n  const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n  let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -scroll.scrollTop;\n  if (getComputedStyle(body).direction === 'rtl') {\n    x += max(html.clientWidth, body.clientWidth) - width;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\nfunction getViewportRect(element, strategy) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    const visualViewportBased = isWebKit();\n    if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n  const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n  const top = clientRect.top + element.clientTop;\n  const left = clientRect.left + element.clientLeft;\n  const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n  const width = element.clientWidth * scale.x;\n  const height = element.clientHeight * scale.y;\n  const x = left * scale.x;\n  const y = top * scale.y;\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n  let rect;\n  if (clippingAncestor === 'viewport') {\n    rect = getViewportRect(element, strategy);\n  } else if (clippingAncestor === 'document') {\n    rect = getDocumentRect(getDocumentElement(element));\n  } else if (isElement(clippingAncestor)) {\n    rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n  } else {\n    const visualOffsets = getVisualOffsets(element);\n    rect = {\n      ...clippingAncestor,\n      x: clippingAncestor.x - visualOffsets.x,\n      y: clippingAncestor.y - visualOffsets.y\n    };\n  }\n  return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n  const parentNode = getParentNode(element);\n  if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n    return false;\n  }\n  return getComputedStyle(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n  const cachedResult = cache.get(element);\n  if (cachedResult) {\n    return cachedResult;\n  }\n  let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n  let currentContainingBlockComputedStyle = null;\n  const elementIsFixed = getComputedStyle(element).position === 'fixed';\n  let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    const computedStyle = getComputedStyle(currentNode);\n    const currentNodeIsContaining = isContainingBlock(currentNode);\n    if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n      currentContainingBlockComputedStyle = null;\n    }\n    const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n    if (shouldDropCurrentNode) {\n      // Drop non-containing blocks.\n      result = result.filter(ancestor => ancestor !== currentNode);\n    } else {\n      // Record last containing block for next iteration.\n      currentContainingBlockComputedStyle = computedStyle;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  cache.set(element, result);\n  return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n  let {\n    element,\n    boundary,\n    rootBoundary,\n    strategy\n  } = _ref;\n  const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n  const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n  const firstClippingAncestor = clippingAncestors[0];\n  const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n    const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n  return {\n    width: clippingRect.right - clippingRect.left,\n    height: clippingRect.bottom - clippingRect.top,\n    x: clippingRect.left,\n    y: clippingRect.top\n  };\n}\n\nfunction getDimensions(element) {\n  const {\n    width,\n    height\n  } = getCssDimensions(element);\n  return {\n    width,\n    height\n  };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const isFixed = strategy === 'fixed';\n  const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  const offsets = createCoords(0);\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isOffsetParentAnElement) {\n      const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n  const x = rect.left + scroll.scrollLeft - offsets.x;\n  const y = rect.top + scroll.scrollTop - offsets.y;\n  return {\n    x,\n    y,\n    width: rect.width,\n    height: rect.height\n  };\n}\n\nfunction isStaticPositioned(element) {\n  return getComputedStyle(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n  if (!isHTMLElement(element) || getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n  if (polyfill) {\n    return polyfill(element);\n  }\n  return element.offsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n  const win = getWindow(element);\n  if (isTopLayer(element)) {\n    return win;\n  }\n  if (!isHTMLElement(element)) {\n    let svgOffsetParent = getParentNode(element);\n    while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n      if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n        return svgOffsetParent;\n      }\n      svgOffsetParent = getParentNode(svgOffsetParent);\n    }\n    return win;\n  }\n  let offsetParent = getTrueOffsetParent(element, polyfill);\n  while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n    offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n  }\n  if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n    return win;\n  }\n  return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n  const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n  const getDimensionsFn = this.getDimensions;\n  const floatingDimensions = await getDimensionsFn(data.floating);\n  return {\n    reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n    floating: {\n      x: 0,\n      y: 0,\n      width: floatingDimensions.width,\n      height: floatingDimensions.height\n    }\n  };\n};\n\nfunction isRTL(element) {\n  return getComputedStyle(element).direction === 'rtl';\n}\n\nconst platform = {\n  convertOffsetParentRelativeRectToViewportRelativeRect,\n  getDocumentElement,\n  getClippingRect,\n  getOffsetParent,\n  getElementRects,\n  getClientRects,\n  getDimensions,\n  getScale,\n  isElement,\n  isRTL\n};\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n  let io = null;\n  let timeoutId;\n  const root = getDocumentElement(element);\n  function cleanup() {\n    var _io;\n    clearTimeout(timeoutId);\n    (_io = io) == null || _io.disconnect();\n    io = null;\n  }\n  function refresh(skip, threshold) {\n    if (skip === void 0) {\n      skip = false;\n    }\n    if (threshold === void 0) {\n      threshold = 1;\n    }\n    cleanup();\n    const {\n      left,\n      top,\n      width,\n      height\n    } = element.getBoundingClientRect();\n    if (!skip) {\n      onMove();\n    }\n    if (!width || !height) {\n      return;\n    }\n    const insetTop = floor(top);\n    const insetRight = floor(root.clientWidth - (left + width));\n    const insetBottom = floor(root.clientHeight - (top + height));\n    const insetLeft = floor(left);\n    const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n    const options = {\n      rootMargin,\n      threshold: max(0, min(1, threshold)) || 1\n    };\n    let isFirstUpdate = true;\n    function handleObserve(entries) {\n      const ratio = entries[0].intersectionRatio;\n      if (ratio !== threshold) {\n        if (!isFirstUpdate) {\n          return refresh();\n        }\n        if (!ratio) {\n          // If the reference is clipped, the ratio is 0. Throttle the refresh\n          // to prevent an infinite loop of updates.\n          timeoutId = setTimeout(() => {\n            refresh(false, 1e-7);\n          }, 1000);\n        } else {\n          refresh(false, ratio);\n        }\n      }\n      isFirstUpdate = false;\n    }\n\n    // Older browsers don't support a `document` as the root and will throw an\n    // error.\n    try {\n      io = new IntersectionObserver(handleObserve, {\n        ...options,\n        // Handle <iframe>s\n        root: root.ownerDocument\n      });\n    } catch (e) {\n      io = new IntersectionObserver(handleObserve, options);\n    }\n    io.observe(element);\n  }\n  refresh(true);\n  return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    ancestorScroll = true,\n    ancestorResize = true,\n    elementResize = typeof ResizeObserver === 'function',\n    layoutShift = typeof IntersectionObserver === 'function',\n    animationFrame = false\n  } = options;\n  const referenceEl = unwrapElement(reference);\n  const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...getOverflowAncestors(floating)] : [];\n  ancestors.forEach(ancestor => {\n    ancestorScroll && ancestor.addEventListener('scroll', update, {\n      passive: true\n    });\n    ancestorResize && ancestor.addEventListener('resize', update);\n  });\n  const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n  let reobserveFrame = -1;\n  let resizeObserver = null;\n  if (elementResize) {\n    resizeObserver = new ResizeObserver(_ref => {\n      let [firstEntry] = _ref;\n      if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {\n        // Prevent update loops when using the `size` middleware.\n        // https://github.com/floating-ui/floating-ui/issues/1740\n        resizeObserver.unobserve(floating);\n        cancelAnimationFrame(reobserveFrame);\n        reobserveFrame = requestAnimationFrame(() => {\n          var _resizeObserver;\n          (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n        });\n      }\n      update();\n    });\n    if (referenceEl && !animationFrame) {\n      resizeObserver.observe(referenceEl);\n    }\n    resizeObserver.observe(floating);\n  }\n  let frameId;\n  let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n  if (animationFrame) {\n    frameLoop();\n  }\n  function frameLoop() {\n    const nextRefRect = getBoundingClientRect(reference);\n    if (prevRefRect && (nextRefRect.x !== prevRefRect.x || nextRefRect.y !== prevRefRect.y || nextRefRect.width !== prevRefRect.width || nextRefRect.height !== prevRefRect.height)) {\n      update();\n    }\n    prevRefRect = nextRefRect;\n    frameId = requestAnimationFrame(frameLoop);\n  }\n  update();\n  return () => {\n    var _resizeObserver2;\n    ancestors.forEach(ancestor => {\n      ancestorScroll && ancestor.removeEventListener('scroll', update);\n      ancestorResize && ancestor.removeEventListener('resize', update);\n    });\n    cleanupIo == null || cleanupIo();\n    (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n    resizeObserver = null;\n    if (animationFrame) {\n      cancelAnimationFrame(frameId);\n    }\n  };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n  // This caches the expensive `getClippingElementAncestors` function so that\n  // multiple lifecycle resets re-use the same result. It only lives for a\n  // single call. If other functions become expensive, we can add them as well.\n  const cache = new Map();\n  const mergedOptions = {\n    platform,\n    ...options\n  };\n  const platformWithCache = {\n    ...mergedOptions.platform,\n    _c: cache\n  };\n  return computePosition$1(reference, floating, {\n    ...mergedOptions,\n    platform: platformWithCache\n  });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","export interface ToggleInit extends EventInit {\n  oldState: string;\n  newState: string;\n}\n\nexport class ToggleEvent extends Event {\n  public oldState: string;\n  public newState: string;\n  constructor(\n    type: string,\n    { oldState = '', newState = '', ...init }: Partial<ToggleInit> = {},\n  ) {\n    super(type, init);\n    this.oldState = String(oldState || '');\n    this.newState = String(newState || '');\n  }\n}\n\nconst popoverToggleTaskQueue = new WeakMap<HTMLElement, unknown>();\nexport function queuePopoverToggleEventTask(\n  element: HTMLElement,\n  oldState: string,\n  newState: string,\n) {\n  popoverToggleTaskQueue.set(\n    element,\n    setTimeout(() => {\n      if (!popoverToggleTaskQueue.has(element)) return;\n      element.dispatchEvent(\n        new ToggleEvent('toggle', {\n          cancelable: false,\n          oldState,\n          newState,\n        }),\n      );\n    }, 0),\n  );\n}\n","import { queuePopoverToggleEventTask, ToggleEvent } from './events.js';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst ShadowRoot = globalThis.ShadowRoot || function () {};\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst HTMLDialogElement = globalThis.HTMLDialogElement || function () {};\n\nconst topLayerElements = new WeakMap<Document, Set<HTMLElement>>();\nconst autoPopoverList = new WeakMap<Document, Set<HTMLElement>>();\nexport const visibilityState = new WeakMap<HTMLElement, 'hidden' | 'showing'>();\nfunction getPopoverVisibilityState(popover: HTMLElement): 'hidden' | 'showing' {\n  return visibilityState.get(popover) || 'hidden';\n}\n\nconst popoverInvoker = new WeakMap<\n  HTMLElement,\n  HTMLButtonElement | HTMLInputElement\n>();\n\n// https://html.spec.whatwg.org/#popover-target-attribute-activation-behavior\nexport function popoverTargetAttributeActivationBehavior(\n  element: HTMLButtonElement | HTMLInputElement,\n) {\n  const popover = element.popoverTargetElement;\n  if (!(popover instanceof HTMLElement)) {\n    return;\n  }\n  const visibility = getPopoverVisibilityState(popover);\n  if (element.popoverTargetAction === 'show' && visibility === 'showing') {\n    return;\n  }\n  if (element.popoverTargetAction === 'hide' && visibility === 'hidden') return;\n  if (visibility === 'showing') {\n    hidePopover(popover, true, true);\n  } else if (checkPopoverValidity(popover, false)) {\n    popoverInvoker.set(popover, element);\n    showPopover(popover);\n  }\n}\n\n// https://whatpr.org/html/8221/popover.html#check-popover-validity\nfunction checkPopoverValidity(\n  element: HTMLElement,\n  expectedToBeShowing: boolean,\n) {\n  if (element.popover !== 'auto' && element.popover !== 'manual') {\n    return false;\n  }\n  if (!element.isConnected) return false;\n  if (expectedToBeShowing && getPopoverVisibilityState(element) !== 'showing') {\n    return false;\n  }\n  if (!expectedToBeShowing && getPopoverVisibilityState(element) !== 'hidden') {\n    return false;\n  }\n  if (element instanceof HTMLDialogElement && element.hasAttribute('open')) {\n    return false;\n  }\n  if (document.fullscreenElement === element) return false;\n  return true;\n}\n\nfunction getStackPosition(popover?: Element) {\n  if (!popover) return 0;\n  return (\n    Array.from(autoPopoverList.get(popover.ownerDocument) || []).indexOf(\n      popover as HTMLElement,\n    ) + 1\n  );\n}\n\nfunction topMostClickedPopover(target: HTMLElement) {\n  const clickedPopover = nearestInclusiveOpenPopover(target);\n  const invokerPopover = nearestInclusiveTargetPopoverForInvoker(target);\n  if (getStackPosition(clickedPopover) > getStackPosition(invokerPopover)) {\n    return clickedPopover;\n  }\n  return invokerPopover;\n}\n\n// https://html.spec.whatwg.org/#topmost-auto-popover\nfunction topMostAutoPopover(document: Document): HTMLElement | null {\n  const documentPopovers = autoPopoverList.get(document);\n  for (const popover of documentPopovers || []) {\n    if (!popover.isConnected) {\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      documentPopovers!.delete(popover);\n    } else {\n      return popover;\n    }\n  }\n  return null;\n}\n\nexport function getRootNode(node: Node): Node {\n  if (typeof node.getRootNode === 'function') {\n    return node.getRootNode();\n  }\n  if (node.parentNode) return getRootNode(node.parentNode);\n  return node;\n}\n\n// https://html.spec.whatwg.org/#nearest-inclusive-open-popover\nfunction nearestInclusiveOpenPopover(\n  node: Node | null,\n): HTMLElement | undefined {\n  while (node) {\n    if (\n      node instanceof HTMLElement &&\n      node.popover === 'auto' &&\n      visibilityState.get(node) === 'showing'\n    ) {\n      return node;\n    }\n    node = node.parentElement || getRootNode(node);\n    if (node instanceof ShadowRoot) node = node.host;\n    if (node instanceof Document) return;\n  }\n}\n\n// https://html.spec.whatwg.org/#popover-light-dismiss:nearest-inclusive-target-popover-for-invoker\nfunction nearestInclusiveTargetPopoverForInvoker(\n  node: Node | null,\n): HTMLElement | undefined {\n  while (node) {\n    const nodePopover = (node as HTMLButtonElement).popoverTargetElement;\n    if (nodePopover instanceof HTMLElement) return nodePopover;\n    node = node.parentElement || getRootNode(node);\n    if (node instanceof ShadowRoot) node = node.host;\n    if (node instanceof Document) return;\n  }\n}\n\n// https://html.spec.whatwg.org/#topmost-popover-ancestor\nfunction topMostPopoverAncestor(newPopover: HTMLElement): HTMLElement | null {\n  const popoverPositions = new Map();\n  let i = 0;\n  const document = newPopover.ownerDocument;\n  for (const popover of autoPopoverList.get(document) || []) {\n    popoverPositions.set(popover, i);\n    i += 1;\n  }\n  popoverPositions.set(newPopover, i);\n  i += 1;\n  let topMostPopoverAncestor: HTMLElement | null = null;\n  function checkAncestor(candidate: HTMLElement | null) {\n    const candidateAncestor = nearestInclusiveOpenPopover(candidate);\n    if (candidateAncestor === null) return null;\n    const candidatePosition = popoverPositions.get(candidateAncestor);\n    if (\n      topMostPopoverAncestor === null ||\n      popoverPositions.get(topMostPopoverAncestor) < candidatePosition\n    ) {\n      topMostPopoverAncestor = candidateAncestor!;\n    }\n  }\n  checkAncestor(newPopover?.parentElement);\n  return topMostPopoverAncestor;\n}\n\nfunction isFocusable(focusTarget: HTMLElement) {\n  if (focusTarget.hidden || focusTarget instanceof ShadowRoot) return false;\n  if (\n    focusTarget instanceof HTMLButtonElement ||\n    focusTarget instanceof HTMLInputElement ||\n    focusTarget instanceof HTMLSelectElement ||\n    focusTarget instanceof HTMLTextAreaElement ||\n    focusTarget instanceof HTMLOptGroupElement ||\n    focusTarget instanceof HTMLOptionElement ||\n    focusTarget instanceof HTMLFieldSetElement\n  ) {\n    if (focusTarget.disabled) return false;\n  }\n  if (\n    focusTarget instanceof HTMLInputElement &&\n    focusTarget.type === 'hidden'\n  ) {\n    return false;\n  }\n  if (focusTarget instanceof HTMLAnchorElement && focusTarget.href === '') {\n    return false;\n  }\n  return (\n    typeof focusTarget.tabIndex === 'number' && focusTarget.tabIndex !== -1\n  );\n}\n\n// This method is not spec compliant, as it also looks in slotted content\n// for autofocus elements.\n// See: https://github.com/oddbird/popover-polyfill/issues/149\n// Spec: https://html.spec.whatwg.org/#focus-delegate\nfunction focusDelegate(focusTarget: HTMLElement) {\n  if (\n    focusTarget.shadowRoot &&\n    focusTarget.shadowRoot.delegatesFocus !== true\n  ) {\n    return null;\n  }\n  let whereToLook: DocumentFragment | HTMLElement = focusTarget;\n  if (whereToLook.shadowRoot) {\n    whereToLook = whereToLook.shadowRoot;\n  }\n  let autoFocusDelegate = whereToLook.querySelector('[autofocus]');\n  if (autoFocusDelegate) {\n    return autoFocusDelegate;\n  } else {\n    const slots = whereToLook.querySelectorAll('slot');\n    for (const slot of slots) {\n      const assignedElements = slot.assignedElements({ flatten: true });\n      for (const el of assignedElements) {\n        if (el.hasAttribute('autofocus')) {\n          return el;\n        } else {\n          autoFocusDelegate = el.querySelector('[autofocus]');\n          if (autoFocusDelegate) {\n            return autoFocusDelegate;\n          }\n        }\n      }\n    }\n  }\n  const walker = focusTarget.ownerDocument.createTreeWalker(\n    whereToLook,\n    NodeFilter.SHOW_ELEMENT,\n  );\n  let descendant: Node | null = walker.currentNode;\n  while (descendant) {\n    // this is not spec compliant\n    if (isFocusable(descendant as HTMLElement)) {\n      return descendant;\n    }\n    descendant = walker.nextNode();\n  }\n}\n\n// https://html.spec.whatwg.org/#popover-focusing-steps\nfunction popoverFocusingSteps(subject: HTMLElement) {\n  (focusDelegate(subject) as HTMLElement)?.focus();\n}\n\nconst previouslyFocusedElements = new WeakMap<HTMLElement, HTMLElement>();\n\n// https://html.spec.whatwg.org/#show-popover\nexport function showPopover(element: HTMLElement) {\n  if (!checkPopoverValidity(element, false)) {\n    return;\n  }\n  const document = element.ownerDocument;\n  if (\n    !element.dispatchEvent(\n      new ToggleEvent('beforetoggle', {\n        cancelable: true,\n        oldState: 'closed',\n        newState: 'open',\n      }),\n    )\n  ) {\n    return;\n  }\n  if (!checkPopoverValidity(element, false)) {\n    return;\n  }\n  let shouldRestoreFocus = false;\n  if (element.popover === 'auto') {\n    const originalType = element.getAttribute('popover');\n    const ancestor = topMostPopoverAncestor(element) || document;\n    hideAllPopoversUntil(ancestor, false, true);\n    if (\n      originalType !== element.getAttribute('popover') ||\n      !checkPopoverValidity(element, false)\n    ) {\n      return;\n    }\n  }\n  if (!topMostAutoPopover(document)) {\n    shouldRestoreFocus = true;\n  }\n  previouslyFocusedElements.delete(element);\n  const originallyFocusedElement = document.activeElement as HTMLElement;\n  element.classList.add(':popover-open');\n  visibilityState.set(element, 'showing');\n  if (!topLayerElements.has(document)) {\n    topLayerElements.set(document, new Set());\n  }\n  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n  topLayerElements.get(document)!.add(element);\n  popoverFocusingSteps(element);\n  if (element.popover === 'auto') {\n    if (!autoPopoverList.has(document)) {\n      autoPopoverList.set(document, new Set());\n    }\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    autoPopoverList.get(document)!.add(element);\n    setInvokerAriaExpanded(popoverInvoker.get(element), true);\n  }\n  if (\n    shouldRestoreFocus &&\n    originallyFocusedElement &&\n    element.popover === 'auto'\n  ) {\n    previouslyFocusedElements.set(element, originallyFocusedElement);\n  }\n  queuePopoverToggleEventTask(element, 'closed', 'open');\n}\n\n// https://html.spec.whatwg.org/#hide-popover\nexport function hidePopover(\n  element: HTMLElement,\n  focusPreviousElement = false,\n  fireEvents = false,\n) {\n  // https://whatpr.org/html/8221/popover.html#hide-popover\n  if (!checkPopoverValidity(element, true)) {\n    return;\n  }\n  const document = element.ownerDocument;\n  if (element.popover === 'auto') {\n    hideAllPopoversUntil(element, focusPreviousElement, fireEvents);\n    if (!checkPopoverValidity(element, true)) {\n      return;\n    }\n  }\n  setInvokerAriaExpanded(popoverInvoker.get(element), false);\n  popoverInvoker.delete(element);\n  if (fireEvents) {\n    element.dispatchEvent(\n      new ToggleEvent('beforetoggle', {\n        oldState: 'open',\n        newState: 'closed',\n      }),\n    );\n    if (!checkPopoverValidity(element, true)) {\n      return;\n    }\n  }\n  topLayerElements.get(document)?.delete(element);\n  autoPopoverList.get(document)?.delete(element);\n  element.classList.remove(':popover-open');\n  visibilityState.set(element, 'hidden');\n  if (fireEvents) {\n    queuePopoverToggleEventTask(element, 'open', 'closed');\n  }\n  const previouslyFocusedElement = previouslyFocusedElements.get(element);\n  if (previouslyFocusedElement) {\n    previouslyFocusedElements.delete(element);\n    if (focusPreviousElement) {\n      previouslyFocusedElement.focus();\n    }\n  }\n}\n\nfunction closeAllOpenPopovers(\n  document: Document,\n  focusPreviousElement = false,\n  fireEvents = false,\n) {\n  let popover = topMostAutoPopover(document);\n  while (popover) {\n    hidePopover(popover, focusPreviousElement, fireEvents);\n    popover = topMostAutoPopover(document);\n  }\n}\n\n// https://html.spec.whatwg.org/#hide-all-popovers-until\nexport function hideAllPopoversUntil(\n  endpoint: Element | Document,\n  focusPreviousElement: boolean,\n  fireEvents: boolean,\n) {\n  const document = endpoint.ownerDocument || endpoint;\n  if (endpoint instanceof Document) {\n    return closeAllOpenPopovers(document, focusPreviousElement, fireEvents);\n  }\n  let lastToHide = null;\n  let foundEndpoint = false;\n  for (const popover of autoPopoverList.get(document) || []) {\n    if (popover === endpoint) {\n      foundEndpoint = true;\n    } else if (foundEndpoint) {\n      lastToHide = popover;\n      break;\n    }\n  }\n  if (!foundEndpoint) {\n    return closeAllOpenPopovers(document, focusPreviousElement, fireEvents);\n  }\n  while (\n    lastToHide &&\n    getPopoverVisibilityState(lastToHide) === 'showing' &&\n    autoPopoverList.get(document)?.size\n  ) {\n    hidePopover(lastToHide, focusPreviousElement, fireEvents);\n  }\n}\n\nconst popoverPointerDownTargets = new WeakMap<Document, HTMLElement>();\n// https://html.spec.whatwg.org/#topmost-clicked-popover\nexport function lightDismissOpenPopovers(event: Event) {\n  if (!event.isTrusted) return;\n  // Composed path allows us to find the target within shadowroots\n  const target = event.composedPath()[0] as HTMLElement;\n  if (!target) return;\n  const document = target.ownerDocument;\n  const topMostPopover = topMostAutoPopover(document);\n  if (!topMostPopover) return;\n  const ancestor = topMostClickedPopover(target);\n  if (ancestor && event.type === 'pointerdown') {\n    popoverPointerDownTargets.set(document, ancestor);\n  } else if (event.type === 'pointerup') {\n    const sameTarget = popoverPointerDownTargets.get(document) === ancestor;\n    popoverPointerDownTargets.delete(document);\n    if (sameTarget) {\n      hideAllPopoversUntil(ancestor || document, false, true);\n    }\n  }\n}\n\nconst initialAriaExpandedValue = new WeakMap<\n  HTMLButtonElement | HTMLInputElement,\n  null | string\n>();\n\nfunction setInvokerAriaExpanded(\n  el?: HTMLButtonElement | HTMLInputElement,\n  force = false,\n) {\n  if (!el) return;\n  if (!initialAriaExpandedValue.has(el)) {\n    initialAriaExpandedValue.set(el, el.getAttribute('aria-expanded'));\n  }\n  const popover = el.popoverTargetElement;\n  if (popover instanceof HTMLElement && popover.popover === 'auto') {\n    el.setAttribute('aria-expanded', String(force));\n  } else {\n    const initialValue = initialAriaExpandedValue.get(el);\n    if (!initialValue) {\n      el.removeAttribute('aria-expanded');\n    } else {\n      el.setAttribute('aria-expanded', initialValue);\n    }\n  }\n}\n","import { ToggleEvent } from './events.js';\nimport {\n  getRootNode,\n  hideAllPopoversUntil,\n  hidePopover,\n  lightDismissOpenPopovers,\n  popoverTargetAttributeActivationBehavior,\n  showPopover,\n  visibilityState,\n} from './popover-helpers.js';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst ShadowRoot = globalThis.ShadowRoot || function () {};\n\nexport function isSupported() {\n  return (\n    typeof HTMLElement !== 'undefined' &&\n    typeof HTMLElement.prototype === 'object' &&\n    'popover' in HTMLElement.prototype\n  );\n}\n\nfunction patchSelectorFn<K extends string>(\n  object: Record<PropertyKey & K, unknown>,\n  name: K,\n  mapper: (selector: string) => string,\n) {\n  const original = object[name] as (selectors: string) => NodeList;\n  Object.defineProperty(object, name, {\n    value(selector: string) {\n      return original.call(this, mapper(selector));\n    },\n  });\n}\n\nconst nonEscapedPopoverSelector = /(^|[^\\\\]):popover-open\\b/g;\n\n// To emulate a UA stylesheet which is the lowest priority in the cascade,\n// all selectors must be wrapped in a :where() which has a specificity of zero.\nconst styles = `\n  :where([popover]) {\n    position: fixed;\n    z-index: 2147483647;\n    inset: 0;\n    padding: 0.25em;\n    width: fit-content;\n    height: fit-content;\n    border-width: initial;\n    border-color: initial;\n    border-image: initial;\n    border-style: solid;\n    background-color: canvas;\n    color: canvastext;\n    overflow: auto;\n    margin: auto;\n  }\n\n  :where(dialog[popover][open]) {\n    display: revert;\n  }\n\n  :where([anchor].\\\\:popover-open) {\n    inset: auto;\n  }\n\n  :where([anchor]:popover-open) {\n    inset: auto;\n  }\n\n  @supports not (background-color: canvas) {\n    :where([popover]) {\n      background-color: white;\n      color: black;\n    }\n  }\n\n  @supports (width: -moz-fit-content) {\n    :where([popover]) {\n      width: -moz-fit-content;\n      height: -moz-fit-content;\n    }\n  }\n\n  @supports not (inset: 0) {\n    :where([popover]) {\n      top: 0;\n      left: 0;\n      right: 0;\n      bottom: 0;\n    }\n  }\n\n  :where([popover]:not(.\\\\:popover-open)) {\n    display: none;\n  }\n`;\nlet popoverStyleSheet: null | false | CSSStyleSheet = null;\nexport function injectStyles(root: Document | ShadowRoot) {\n  if (popoverStyleSheet === null) {\n    try {\n      popoverStyleSheet = new CSSStyleSheet();\n      popoverStyleSheet.replaceSync(styles);\n    } catch {\n      popoverStyleSheet = false;\n    }\n  }\n  if (popoverStyleSheet === false) {\n    const sheet = document.createElement('style');\n    sheet.textContent = styles;\n    if (root instanceof Document) {\n      root.head.prepend(sheet);\n    } else {\n      root.prepend(sheet);\n    }\n  } else {\n    root.adoptedStyleSheets = [popoverStyleSheet, ...root.adoptedStyleSheets];\n  }\n}\n\nexport function apply() {\n  window.ToggleEvent = window.ToggleEvent || ToggleEvent;\n\n  function rewriteSelector(selector: string) {\n    if (selector?.includes(':popover-open')) {\n      selector = selector.replace(\n        nonEscapedPopoverSelector,\n        '$1.\\\\:popover-open',\n      );\n    }\n    return selector;\n  }\n\n  patchSelectorFn(Document.prototype, 'querySelector', rewriteSelector);\n  patchSelectorFn(Document.prototype, 'querySelectorAll', rewriteSelector);\n  patchSelectorFn(Element.prototype, 'querySelector', rewriteSelector);\n  patchSelectorFn(Element.prototype, 'querySelectorAll', rewriteSelector);\n  patchSelectorFn(Element.prototype, 'matches', rewriteSelector);\n  patchSelectorFn(Element.prototype, 'closest', rewriteSelector);\n  patchSelectorFn(\n    DocumentFragment.prototype,\n    'querySelectorAll',\n    rewriteSelector,\n  );\n  patchSelectorFn(\n    DocumentFragment.prototype,\n    'querySelectorAll',\n    rewriteSelector,\n  );\n\n  Object.defineProperties(HTMLElement.prototype, {\n    popover: {\n      enumerable: true,\n      configurable: true,\n      get() {\n        if (!this.hasAttribute('popover')) return null;\n        const value = (this.getAttribute('popover') || '').toLowerCase();\n        if (value === '' || value == 'auto') return 'auto';\n        return 'manual';\n      },\n      set(value) {\n        this.setAttribute('popover', value);\n      },\n    },\n\n    showPopover: {\n      enumerable: true,\n      configurable: true,\n      value() {\n        showPopover(this);\n      },\n    },\n\n    hidePopover: {\n      enumerable: true,\n      configurable: true,\n      value() {\n        hidePopover(this, true, true);\n      },\n    },\n\n    togglePopover: {\n      enumerable: true,\n      configurable: true,\n      value(force: boolean) {\n        if (\n          (visibilityState.get(this) === 'showing' && force === undefined) ||\n          force === false\n        ) {\n          hidePopover(this, true, true);\n        } else if (force === undefined || force === true) {\n          showPopover(this);\n        }\n      },\n    },\n  });\n\n  const originalAttachShadow = Element.prototype.attachShadow;\n  if (originalAttachShadow) {\n    Object.defineProperties(Element.prototype, {\n      attachShadow: {\n        enumerable: true,\n        configurable: true,\n        writable: true,\n        value(options: ShadowRootInit) {\n          const shadowRoot = originalAttachShadow.call(this, options);\n          injectStyles(shadowRoot);\n          return shadowRoot;\n        },\n      },\n    });\n  }\n  const originalAttachInternals = HTMLElement.prototype.attachInternals;\n  if (originalAttachInternals) {\n    Object.defineProperties(HTMLElement.prototype, {\n      attachInternals: {\n        enumerable: true,\n        configurable: true,\n        writable: true,\n        value() {\n          const internals = originalAttachInternals.call(this);\n          if (internals.shadowRoot) {\n            injectStyles(internals.shadowRoot);\n          }\n          return internals;\n        },\n      },\n    });\n  }\n\n  const popoverTargetAssociatedElements = new WeakMap<Element, Element>();\n  function applyPopoverInvokerElementMixin(ElementClass: typeof HTMLElement) {\n    Object.defineProperties(ElementClass.prototype, {\n      popoverTargetElement: {\n        enumerable: true,\n        configurable: true,\n        set(targetElement: unknown) {\n          if (targetElement === null) {\n            this.removeAttribute('popovertarget');\n            popoverTargetAssociatedElements.delete(this);\n          } else if (!(targetElement instanceof Element)) {\n            throw new TypeError(\n              `popoverTargetElement must be an element or null`,\n            );\n          } else {\n            this.setAttribute('popovertarget', '');\n            popoverTargetAssociatedElements.set(this, targetElement);\n          }\n        },\n        get() {\n          if (this.localName !== 'button' && this.localName !== 'input') {\n            return null;\n          }\n          if (\n            this.localName === 'input' &&\n            this.type !== 'reset' &&\n            this.type !== 'image' &&\n            this.type !== 'button'\n          ) {\n            return null;\n          }\n          if (this.disabled) {\n            return null;\n          }\n          if (this.form && this.type === 'submit') {\n            return null;\n          }\n          const targetElement = popoverTargetAssociatedElements.get(this);\n          if (targetElement && targetElement.isConnected) {\n            return targetElement;\n          } else if (targetElement && !targetElement.isConnected) {\n            popoverTargetAssociatedElements.delete(this);\n            return null;\n          }\n          const root = getRootNode(this);\n          const idref = this.getAttribute('popovertarget');\n          if (\n            (root instanceof Document || root instanceof ShadowRoot) &&\n            idref\n          ) {\n            return root.getElementById(idref) || null;\n          }\n          return null;\n        },\n      },\n      popoverTargetAction: {\n        enumerable: true,\n        configurable: true,\n        get() {\n          const value = (\n            this.getAttribute('popovertargetaction') || ''\n          ).toLowerCase();\n          if (value === 'show' || value === 'hide') return value;\n          return 'toggle';\n        },\n        set(value) {\n          this.setAttribute('popovertargetaction', value);\n        },\n      },\n    });\n  }\n\n  applyPopoverInvokerElementMixin(HTMLButtonElement);\n  applyPopoverInvokerElementMixin(HTMLInputElement);\n\n  const handleInvokerActivation = (event: Event) => {\n    // Composed path allows us to find the target within shadowroots\n    const target = event.composedPath()[0] as HTMLElement;\n    if (!(target instanceof Element) || target?.shadowRoot) {\n      return;\n    }\n    const root = getRootNode(target);\n    if (!(root instanceof ShadowRoot || root instanceof Document)) {\n      return;\n    }\n    const invoker = target.closest('[popovertargetaction],[popovertarget]');\n    if (invoker) {\n      popoverTargetAttributeActivationBehavior(invoker as HTMLButtonElement);\n      event.preventDefault();\n      return;\n    }\n  };\n\n  const onKeydown = (event: Event) => {\n    const key = (event as KeyboardEvent).key;\n    const target = event.target as Element;\n    if (\n      !event.defaultPrevented &&\n      target &&\n      (key === 'Escape' || key === 'Esc')\n    ) {\n      hideAllPopoversUntil(target.ownerDocument, true, true);\n    }\n  };\n\n  const addEventListeners = (root: Document | ShadowRoot) => {\n    root.addEventListener('click', handleInvokerActivation);\n    root.addEventListener('keydown', onKeydown);\n    root.addEventListener('pointerdown', lightDismissOpenPopovers);\n    root.addEventListener('pointerup', lightDismissOpenPopovers);\n  };\n\n  addEventListeners(document);\n  injectStyles(document);\n}\n","import { apply, isSupported } from './popover.js';\n\ninterface PopoverToggleTargetElementInvoker {\n  /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLButtonElement/popoverTargetAction) */\n  popoverTargetAction: string;\n  /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLButtonElement/popoverTargetElement) */\n  popoverTargetElement: Element | null;\n}\n\ndeclare global {\n  /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ToggleEvent) */\n  interface ToggleEvent extends Event {\n    /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ToggleEvent/newState) */\n    readonly newState: string;\n    /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ToggleEvent/oldState) */\n    readonly oldState: string;\n  }\n\n  interface HTMLElement {\n    /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/popover) */\n    popover: string | null;\n    /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/hidePopover) */\n    hidePopover(): void;\n    /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/showPopover) */\n    showPopover(): void;\n    /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/togglePopover) */\n    togglePopover(force?: boolean): void;\n  }\n\n  /* eslint-disable @typescript-eslint/no-empty-interface */\n  interface HTMLButtonElement extends PopoverToggleTargetElementInvoker {}\n  interface HTMLInputElement extends PopoverToggleTargetElementInvoker {}\n  /* eslint-enable @typescript-eslint/no-empty-interface */\n\n  interface Window {\n    ToggleEvent: ToggleEvent;\n  }\n}\n\nif (!isSupported()) apply();\n","import { modifier } from 'ember-modifier';\nimport { computePosition, flip as flipfn, shift, offset as offsetfn } from '@floating-ui/dom';\nimport type { Placement } from '@floating-ui/dom';\nimport '@oddbird/popover-polyfill';\n\ninterface PositionerOptions {\n  width?: number;\n  placement?: Placement;\n  padding?: number;\n  offset?: number;\n  flip?: boolean;\n}\nexport interface AditoolsPositionerSignature {\n  Element: HTMLElement;\n  Args: {\n    Positional: [];\n    Named: PositionerOptions;\n  };\n}\n\nconst positioner = modifier<AditoolsPositionerSignature>(\n  (element, _, { width, placement, padding, offset, flip }) => {\n    const positionPopover = function (event: Event) {\n      // The width calculation could be abstracted into a helper and passed to the modifier\n      // This would allow for a more reuasable modifier\n      const _placement: Placement = (placement as Placement | undefined) ?? 'bottom';\n      const _padding = padding ?? 8;\n      const _offset = offset ?? 0;\n      const _flip = flip ?? true;\n      const invoker = document.querySelector(`[popovertarget=\"${element.getAttribute('id')}\"`) as HTMLElement;\n      if (typeof width !== undefined) {\n        element.style.width = `${width}px`;\n      }\n      if ((event as ToggleEvent).newState === 'open') {\n        const middleware = [];\n        if (_offset !== 0) {\n          middleware.push(offsetfn(_offset));\n        }\n        if (_flip) {\n          middleware.push(flipfn());\n        }\n        middleware.push(shift({ padding: _padding }));\n        computePosition(invoker, element as HTMLElement, {\n          placement: _placement,\n          middleware: middleware,\n        }).then(({ x, y }) => {\n          Object.assign(element.style, {\n            left: `${x}px`,\n            top: `${y}px`,\n          });\n        });\n      }\n    };\n    element.addEventListener('toggle', positionPopover);\n    return () => {\n      element.removeEventListener('toggle', positionPopover);\n    };\n  },\n  { eager: false }\n);\nexport default positioner;\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<div class=\\\"aditools-toolbar\\\" ...attributes>\\n  {{#if @useTitle}}\\n    <div class=\\\"aditools-toolbar_title\\\">\\n      <h1 data-qa-element=\\\"header_page_title\\\">{{@title}}</h1>\\n    </div>\\n  {{else}}\\n    {{#if (has-block \\'context\\')}}\\n      <div class=\\\"aditools-toolbar_context\\\">\\n        {{yield to=\\'context\\'}}\\n      </div>\\n    {{/if}}\\n  {{/if}}\\n  {{#if (and (has-block \\'tabs\\') (not @dropTabs) (not @separateTabs))}}\\n    <ul class=\\\"aditools-toolbar_tabs\\\">\\n      {{yield to=\\'tabs\\'}}\\n    </ul>\\n  {{/if}}\\n  {{#if (has-block \\'actions\\')}}\\n    <ul class=\\\"aditools-toolbar_actions\\\">\\n      {{#if @dropActions}}\\n        <li class=\\\"aditools-toolbar_action action__dropdown\\\">\\n          <button type=\\\"button\\\" class=\\\"aditools-toolbar_button\\\" data-qa-element=\\\"menu_bar_action_dropdown\\\" popovertarget=\\\"aditools_action_dropdown\\\">\\n            <span class=\\\"aditools-toolbar_icon\\\"></span>\\n            {{! template-lint-disable no-nested-interactive}}\\n            <label class=\\\"aditools-toolbar_label\\\">{{t \\\"ember-aditools-page.toolbar.actions\\\"}}</label>\\n          </button>\\n          <div \\n            id=\\\"aditools_action_dropdown\\\" class=\\\"aditools-toolbar_action-dropdown\\\" popover=\\\"manual\\\" \\n            {{aditools-positioner placement=\\'bottom-end\\'}}\\n            {{this.hideOnClickOutside}}\\n            {{on \\'focusout\\' this.hideDropdown}}\\n          >\\n            <ul class=\\\"aditools-toolbar_action-dropdown-menu\\\">\\n              {{yield to=\\'actions\\'}}\\n            </ul>\\n          </div>\\n        </li>\\n      {{else}}\\n        {{yield to=\\'actions\\'}}\\n      {{/if}}\\n    </ul>\\n  {{/if}}\\n</div>\\n{{#if (and (has-block \\'tabs\\') @dropTabs)}}  \\n  <div class=\\\"aditools-toolbar_tab-list\\\">\\n    <ul class=\\\"aditools-toolbar_tabs\\\">\\n      {{yield to=\\'tabs\\'}}\\n    </ul>\\n  </div>\\n{{/if}}\\n\")","import Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { modifier } from 'ember-modifier';\n\ninterface AditoolsToolbarSignature {\n  Element: HTMLDivElement;\n  Args: {\n    title: string;\n    dropActions: boolean;\n    dropTabs: boolean;\n    separateTabs: boolean;\n    useTitle: boolean;\n  };\n  Blocks: {\n    context: [];\n    tabs: [];\n    actions: [];\n  };\n}\n\nconst hidePopoverOnClickOutside = modifier(\n  function (element) {\n    const globalClickListener = function (event: Event) {\n      const container = element as HTMLElement;\n      if (!(event.target instanceof Node) || !container.contains(event.target as HTMLElement)) {\n        container.hidePopover();\n      }\n    };\n    const body = document.querySelector('body');\n    body?.addEventListener('click', globalClickListener);\n    return () => {\n      body?.removeEventListener('click', globalClickListener);\n    };\n  },\n  { eager: false }\n);\n\nexport default class AditoolsToolbar extends Component<AditoolsToolbarSignature> {\n  hideOnClickOutside = hidePopoverOnClickOutside;\n  @action hideDropdown(event: FocusEvent) {\n    const container = event.currentTarget as HTMLElement;\n    const currentFocus = event.target as HTMLElement;\n    // First make sure we're not in a dialog nested in a popover (or we'll create a dead UI)\n    if (!(currentFocus.closest('dialog') && currentFocus.closest('dialog')?.closest('[popover]'))) {\n      // Then make sure the new target isn't in the same popover\n      if (!event.relatedTarget || !container.contains(event.relatedTarget as HTMLElement)) {\n        container.hidePopover();\n      }\n    }\n  }\n}\n","export default class Cache {\n  size = 0;\n  misses = 0;\n  hits = 0;\n\n  constructor(limit, func, store) {\n    this.limit = limit;\n    this.func = func;\n    this.store = store;\n    this.store = store || new Map();\n  }\n\n  get(key) {\n    let value = this.store.get(key);\n\n    if (this.store.has(key)) {\n      this.hits++;\n      return this.store.get(key);\n    } else {\n      this.misses++;\n      value = this.set(key, this.func(key));\n    }\n\n    return value;\n  }\n\n  set(key, value) {\n    if (this.limit > this.size) {\n      this.size++;\n      this.store.set(key, value);\n    }\n\n    return value;\n  }\n\n  purge() {\n    this.store.clear();\n    this.size = 0;\n    this.hits = 0;\n    this.misses = 0;\n  }\n\n}","/* eslint-disable no-useless-escape */\n\n/**\n @module @ember/string\n */\nimport Cache from './cache';\n// STATE within a module is frowned upon, this exists\n// to support Ember.STRINGS but shield ember internals from this legacy global\n// API.\nlet STRINGS = {};\nexport function setStrings(strings) {\n  STRINGS = strings;\n}\nexport function getStrings() {\n  return STRINGS;\n}\nexport function getString(name) {\n  return STRINGS[name];\n}\nconst STRING_DASHERIZE_REGEXP = /[ _]/g;\nconst STRING_DASHERIZE_CACHE = new Cache(1000, key => decamelize(key).replace(STRING_DASHERIZE_REGEXP, '-'));\nconst STRING_CAMELIZE_REGEXP_1 = /(\\-|\\_|\\.|\\s)+(.)?/g;\nconst STRING_CAMELIZE_REGEXP_2 = /(^|\\/)([A-Z])/g;\nconst CAMELIZE_CACHE = new Cache(1000, key => key.replace(STRING_CAMELIZE_REGEXP_1, (_match, _separator, chr) => chr ? chr.toUpperCase() : '').replace(STRING_CAMELIZE_REGEXP_2, (match\n/*, separator, chr */\n) => match.toLowerCase()));\nconst STRING_CLASSIFY_REGEXP_1 = /^(\\-|_)+(.)?/;\nconst STRING_CLASSIFY_REGEXP_2 = /(.)(\\-|\\_|\\.|\\s)+(.)?/g;\nconst STRING_CLASSIFY_REGEXP_3 = /(^|\\/|\\.)([a-z])/g;\nconst CLASSIFY_CACHE = new Cache(1000, str => {\n  const replace1 = (_match, _separator, chr) => chr ? `_${chr.toUpperCase()}` : '';\n\n  const replace2 = (_match, initialChar, _separator, chr) => initialChar + (chr ? chr.toUpperCase() : '');\n\n  const parts = str.split('/');\n\n  for (let i = 0; i < parts.length; i++) {\n    parts[i] = parts[i].replace(STRING_CLASSIFY_REGEXP_1, replace1).replace(STRING_CLASSIFY_REGEXP_2, replace2);\n  }\n\n  return parts.join('/').replace(STRING_CLASSIFY_REGEXP_3, (match\n  /*, separator, chr */\n  ) => match.toUpperCase());\n});\nconst STRING_UNDERSCORE_REGEXP_1 = /([a-z\\d])([A-Z]+)/g;\nconst STRING_UNDERSCORE_REGEXP_2 = /\\-|\\s+/g;\nconst UNDERSCORE_CACHE = new Cache(1000, str => str.replace(STRING_UNDERSCORE_REGEXP_1, '$1_$2').replace(STRING_UNDERSCORE_REGEXP_2, '_').toLowerCase());\nconst STRING_CAPITALIZE_REGEXP = /(^|\\/)([a-z\\u00C0-\\u024F])/g;\nconst CAPITALIZE_CACHE = new Cache(1000, str => str.replace(STRING_CAPITALIZE_REGEXP, (match\n/*, separator, chr */\n) => match.toUpperCase()));\nconst STRING_DECAMELIZE_REGEXP = /([a-z\\d])([A-Z])/g;\nconst DECAMELIZE_CACHE = new Cache(1000, str => str.replace(STRING_DECAMELIZE_REGEXP, '$1_$2').toLowerCase());\n/**\n  Splits a string into separate units separated by spaces, eliminating any\n  empty strings in the process. This is a convenience method for split that\n  is mostly useful when applied to the `String.prototype`.\n\n  ```javascript\n  import { w } from '@ember/string';\n\n  w(\"alpha beta gamma\").forEach(function(key) {\n    console.log(key);\n  });\n\n  // > alpha\n  // > beta\n  // > gamma\n  ```\n\n  @method w\n  @param {String} str The string to split\n  @return {Array} array containing the split strings\n  @public\n*/\n\nexport function w(str) {\n  return str.split(/\\s+/);\n}\n/**\n  Converts a camelized string into all lower case separated by underscores.\n\n  ```javascript\n  import { decamelize } from '@ember/string';\n\n  decamelize('innerHTML');          // 'inner_html'\n  decamelize('action_name');        // 'action_name'\n  decamelize('css-class-name');     // 'css-class-name'\n  decamelize('my favorite items');  // 'my favorite items'\n  ```\n\n  @method decamelize\n  @param {String} str The string to decamelize.\n  @return {String} the decamelized string.\n  @public\n*/\n\nexport function decamelize(str) {\n  return DECAMELIZE_CACHE.get(str);\n}\n/**\n  Replaces underscores, spaces, or camelCase with dashes.\n\n  ```javascript\n  import { dasherize } from '@ember/string';\n\n  dasherize('innerHTML');                // 'inner-html'\n  dasherize('action_name');              // 'action-name'\n  dasherize('css-class-name');           // 'css-class-name'\n  dasherize('my favorite items');        // 'my-favorite-items'\n  dasherize('privateDocs/ownerInvoice';  // 'private-docs/owner-invoice'\n  ```\n\n  @method dasherize\n  @param {String} str The string to dasherize.\n  @return {String} the dasherized string.\n  @public\n*/\n\nexport function dasherize(str) {\n  return STRING_DASHERIZE_CACHE.get(str);\n}\n/**\n  Returns the lowerCamelCase form of a string.\n\n  ```javascript\n  import { camelize } from '@ember/string';\n\n  camelize('innerHTML');                   // 'innerHTML'\n  camelize('action_name');                 // 'actionName'\n  camelize('css-class-name');              // 'cssClassName'\n  camelize('my favorite items');           // 'myFavoriteItems'\n  camelize('My Favorite Items');           // 'myFavoriteItems'\n  camelize('private-docs/owner-invoice');  // 'privateDocs/ownerInvoice'\n  ```\n\n  @method camelize\n  @param {String} str The string to camelize.\n  @return {String} the camelized string.\n  @public\n*/\n\nexport function camelize(str) {\n  return CAMELIZE_CACHE.get(str);\n}\n/**\n  Returns the UpperCamelCase form of a string.\n\n  ```javascript\n  import { classify } from '@ember/string';\n\n  classify('innerHTML');                   // 'InnerHTML'\n  classify('action_name');                 // 'ActionName'\n  classify('css-class-name');              // 'CssClassName'\n  classify('my favorite items');           // 'MyFavoriteItems'\n  classify('private-docs/owner-invoice');  // 'PrivateDocs/OwnerInvoice'\n  ```\n\n  @method classify\n  @param {String} str the string to classify\n  @return {String} the classified string\n  @public\n*/\n\nexport function classify(str) {\n  return CLASSIFY_CACHE.get(str);\n}\n/**\n  More general than decamelize. Returns the lower\\_case\\_and\\_underscored\n  form of a string.\n\n  ```javascript\n  import { underscore } from '@ember/string';\n\n  underscore('innerHTML');                 // 'inner_html'\n  underscore('action_name');               // 'action_name'\n  underscore('css-class-name');            // 'css_class_name'\n  underscore('my favorite items');         // 'my_favorite_items'\n  underscore('privateDocs/ownerInvoice');  // 'private_docs/owner_invoice'\n  ```\n\n  @method underscore\n  @param {String} str The string to underscore.\n  @return {String} the underscored string.\n  @public\n*/\n\nexport function underscore(str) {\n  return UNDERSCORE_CACHE.get(str);\n}\n/**\n  Returns the Capitalized form of a string\n\n  ```javascript\n  import { capitalize } from '@ember/string';\n\n  capitalize('innerHTML')                 // 'InnerHTML'\n  capitalize('action_name')               // 'Action_name'\n  capitalize('css-class-name')            // 'Css-class-name'\n  capitalize('my favorite items')         // 'My favorite items'\n  capitalize('privateDocs/ownerInvoice'); // 'PrivateDocs/ownerInvoice'\n  ```\n\n  @method capitalize\n  @param {String} str The string to capitalize.\n  @return {String} The capitalized string.\n  @public\n*/\n\nexport function capitalize(str) {\n  return CAPITALIZE_CACHE.get(str);\n}\n/*\n  The following are implemented here to give users adding `@ember/string` to\n  their projects a useful error message. The `ember-source` implementation of\n  `@ember/string` is clobbered by adding this addon, and so the deprecation of\n  the import path is not triggered. This error message is intended to help\n  users discover what they need to change.\n*/\n\nexport function htmlSafe(str) {\n  throw new Error('htmlSafe is not implemented in the `@ember/string` package. Please import from `@ember/template` instead.');\n}\nexport function isHTMLSafe(str) {\n  throw new Error('isHTMLSafe is not implemented in the `@ember/string` package. Please import from `@ember/template` instead.');\n}","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<li class=\\\"aditools-toolbar_tab {{if (eq @tab @activeTab) \\\"tab--selected\\\"}}\\\">\\n  <button type=\\\"button\\\" aria-label={{@label}} class=\\\"aditools-toolbar_button\\\" data-qa-element=\\\"menu_bar_{{this.qaName}}_tab\\\" disabled={{@disabled}} {{on \\'click\\' (fn @select @tab)}} ...attributes>\\n    <span class=\\\"aditools-toolbar_icon {{@iconClass}}\\\"></span>\\n    <span class=\\\"aditools-toolbar_label\\\" >{{@label}}</span>\\n  </button>\\n</li>\\n\")","import Component from '@glimmer/component';\nimport { underscore } from '@ember/string';\n\ninterface AditoolsToolbarTabSignature {\n  Element: HTMLButtonElement;\n  Args: {\n    label: string;\n    tab: string;\n    activeTab: string;\n    iconClass: string;\n    disabled?: boolean;\n    qaName?: string;\n    select: () => void;\n  };\n}\n\nexport default class AditoolsToolbarTab extends Component<AditoolsToolbarTabSignature> {\n  get qaName() {\n    return this.args.qaName ?? underscore(this.args.tab.toLowerCase());\n  }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<li class=\\\"aditools-toolbar_action\\\">\\n  <button type=\\\"button\\\" aria-label={{@label}} class=\\\"aditools-toolbar_button\\\" data-qa-element=\\\"menu_bar_{{this.qaName}}_link\\\" {{on \\'click\\' this.activate}} ...attributes >\\n    <span class=\\\"aditools-toolbar_icon {{@iconClass}}\\\" data-qa-element=\\\"menu_bar_{{this.qaName}}_icon\\\"></span>\\n    <span class=\\\"aditools-toolbar_label\\\" data-qa-element=\\\"menu_bar_{{this.qaName}}_text\\\">{{@label}}</span>\\n  </button>\\n  {{#if this.isActive}}\\n    {{yield this.select this.close}}\\n  {{/if}}\\n</li>\\n\")","import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { underscore } from '@ember/string';\n\ninterface AditoolsToolbarActionSignature {\n  Element: HTMLButtonElement;\n  Args: {\n    label: string;\n    iconClass: string;\n    qaName?: string;\n    onOpen?: () => void;\n    onSubmit?: () => void;\n    onClose?: () => void;\n  };\n  Blocks: {\n    default: [() => void, () => void];\n  };\n}\nexport default class AditoolsToolbarAction extends Component<AditoolsToolbarActionSignature> {\n  @tracked isActive = false;\n\n  get qaName() {\n    return this.args.qaName || underscore(this.args.label.toLowerCase());\n  }\n\n  @action activate() {\n    this.isActive = true;\n    if (this.args.onOpen) {\n      this.args.onOpen();\n    }\n  }\n  @action select() {\n    this.isActive = false;\n    if (this.args.onSubmit) {\n      this.args.onSubmit();\n    }\n  }\n  @action close() {\n    this.isActive = false;\n    if (this.args.onClose) {\n      this.args.onClose();\n    }\n  }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<div class=\\\"dialog-load\\\">\\n  <AditoolsDialog @title={{@title}} @dialogClass={{@dialogClass}} @close={{@close}} ...attributes>\\n    <:default>\\n      <div class=\\\"dialog-load-content\\\">\\n        <div class=\\\"dialog-load-message\\\">{{t \\\"ember-aditools-page.dialogs.load.message\\\"}}</div>\\n        <button\\n          id=\\\"choose-file-button\\\"\\n          class=\\\"aditools-button button--primary\\\"\\n          type=\\\"button\\\"\\n          data-qa-element=\\\"dialog_load_choose_btn\\\"\\n          {{on \\\"click\\\" this.chooseFile}}\\n        >\\n          {{this._chooseFileButtonText}}\\n        </button>\\n        <span id=\\\"upload-file-name\\\" class=\\\"design-file-name\\\" data-qa-element=\\\"dialog_load_file_name\\\" >{{this._fileName}}</span>\\n        <input id=\\\"design-file-upload\\\" class=\\\"dialog-load-upload\\\" type=\\\"file\\\" data-qa-element=\\\"dialog_load_file_input\\\" {{on \\\"change\\\" this.getFileInfo }} accept=\\\".json\\\" >\\n      </div>\\n    </:default>\\n    <:footer as | closeDialog |>\\n      <button id=\\\"close-button\\\" class=\\\"aditools-button dialog--closer\\\" type=\\\"button\\\" data-qa-element=\\\"dialog_close\\\" {{on \\\"click\\\" closeDialog}}>\\n        {{this._closeButtonText}}\\n      </button>\\n      {{#if this.uploadDisabled}}\\n        <button id=\\\"load-file-button\\\" class=\\\"aditools-button button--disabled\\\" type=\\\"button\\\" data-qa-element=\\\"dialog_submit\\\" disabled=\\\"disabled\\\">\\n          {{this._loadButtonText}}\\n        </button>\\n      {{else}}\\n        <button id=\\\"load-file-button\\\" class=\\\"aditools-button button--primary\\\" type=\\\"button\\\" data-qa-element=\\\"dialog_submit\\\" {{on \\\"click\\\" (fn this.loadFile closeDialog)}}>\\n          {{this._loadButtonText}}\\n        </button>\\n      {{/if}}\\n    </:footer>\\n  </AditoolsDialog>\\n</div>\")","import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { inject as service } from '@ember/service';\nimport { action } from '@ember/object';\nimport { assert } from '@ember/debug';\nimport { isNone } from '@ember/utils';\nimport type IntlService from 'ember-intl/services/intl';\n\nexport interface AditoolsDialogLoadSignature {\n  Element: HTMLDialogElement;\n  Args: {\n    title: string;\n    load: (design: any) => void;\n    close: () => void;\n    chooseFileButtonText?: string;\n    closeButtonText?: string;\n    loadButtonText?: string;\n    dialogClass?: string;\n    submit?: () => void;\n  };\n}\ntype AditoolsDialogLoadArgs = AditoolsDialogLoadSignature['Args'];\nexport default class AditoolsDialogLoad extends Component<AditoolsDialogLoadSignature> {\n  supportsDataTestProperties = true;\n  @service declare intl: IntlService;\n  @tracked fileName = ''; // Name of file to be uploaded\n  @tracked designData: any = null; // Design Data to be uploaded\n  fileObject: any = null; // File to be uploaded\n  @tracked uploadDisabled = true; // Flag that Enables/Disables Load Button\n\n  constructor(owner: unknown, args: AditoolsDialogLoadArgs) {\n    super(owner, args);\n    assert('`title` is required', !isNone(this.args.title));\n    if (!isNone(this.args.submit)) {\n      console.log(`\n            The \\`submit\\` parameter has changed to \\`load\\`.\n            Please adjust your usage accordingly.\n            `);\n    }\n    assert('`load` is required', !isNone(this.args.load));\n    assert('`close` is required', !isNone(this.args.close));\n  }\n\n  // Optional parameters with defaults applied\n  get _chooseFileButtonText() {\n    return this.args.chooseFileButtonText ?? this.intl.t('ember-aditools-page.dialogs.load.choose-button');\n  }\n\n  get _loadButtonText() {\n    return this.args.loadButtonText ?? this.intl.t('ember-aditools-page.common.load');\n  }\n\n  get _closeButtonText() {\n    return this.args.closeButtonText ?? this.intl.t('ember-aditools-page.common.cancel');\n  }\n\n  get _fileName() {\n    return this.fileName && this.fileName.length > 0\n      ? this.fileName\n      : this.intl.t('ember-aditools-page.dialogs.load.no-file-selected');\n  }\n\n  @action chooseFile(event: MouseEvent) {\n    const target = event.currentTarget as HTMLElement; //Safe because we are setting the handlers on an HTML element\n    const rootForSelection = target.parentElement; // Limit the scope of the lookup to keep it inside this component\n    if (rootForSelection) {\n      const designFileUpload = rootForSelection.querySelectorAll('#design-file-upload')[0] as HTMLElement;\n      designFileUpload.click();\n    }\n  }\n  // Event Handler when the user selects a file from the Directory/Explorer Dialog\n  @action getFileInfo({ target }: { target: any }) {\n    const files = target.files;\n    const [file] = files;\n    const fileobj = files && file ? file : null;\n    this.fileObject = fileobj;\n    this.fileName = files && file ? file.name : '';\n    this.uploadDisabled = fileobj === null;\n  }\n  // Event Handler when the user selects a file from the Directory/Explorer Dialog\n  @action loadFile(closeDialog: () => void) {\n    const selfRef = this; // eslint-disable-line @typescript-eslint/no-this-alias\n    if (this.fileObject) {\n      const reader = new FileReader();\n      reader.onload = function (e) {\n        if (!e) {\n          selfRef.designData = reader.result;\n        } else if (e.target) {\n          selfRef.designData = e.target.result;\n        }\n        if (selfRef.args.load) {\n          selfRef.args.load(selfRef.designData);\n        }\n        closeDialog();\n      };\n      //@ts-ignore\n      reader.readAsText(this.fileObject, 'utf-8');\n    }\n  }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<div class=\\\"dialog-save\\\">\\n  <AditoolsDialog @title={{@title}} @dialogClass={{@dialogClass}} @close={{@close}} ...attributes>\\n    <:default>\\n      <div class=\\\"dialog-save-content\\\">\\n        <div class=\\\"design-name aditools-text-input\\\">\\n          {{#unless this.isDesignNameValid}}\\n            <div class=\\\"design-name-error aditools-text-input_error-text\\\" data-qa-element=\\\"dialog_save_name_error\\\">{{t \\\"ember-aditools-page.dialogs.save.save-name-error\\\"}}</div>\\n          {{/unless}}\\n          <label for=\\\"save-design-name-id\\\" class=\\\"aditools-text-input_main-label\\\">{{t \\\"ember-aditools-page.dialogs.save.save-name-field\\\"}}:</label>\\n          <div>\\n            <input\\n              id=\\\"save-design-name-id\\\"\\n              class={{concat \\\"aditools-text-input_input \\\" this._designNameClass}}\\n              data-qa-element=\\\"dialog_save_name_txtbx\\\"\\n              value={{this.workingDesignName}}\\n              {{on \\\"keyup\\\" this.onValueChanged}}\\n              {{on \\\"change\\\" this.onValueChanged}}\\n              {{on \\\"blur\\\" this.onValueChanged}}            \\n            >\\n          </div>\\n        </div>\\n        <div class=\\\"design-desc aditools-text-input\\\">\\n          {{#unless this.isDesignDescValid}}\\n            <div class=\\\"design-desc-error aditools-text-input_error-text\\\" data-qa-element=\\\"dialog_save_description_error\\\">{{t \\\"ember-aditools-page.dialogs.save.save-desc-error\\\"}}</div>\\n          {{/unless}}\\n          <label for=\\\"save-design-desc-id\\\" class=\\\"aditools-text-input_main-label\\\">{{t \\\"ember-aditools-page.dialogs.save.save-desc-field\\\"}}:</label>\\n          <div>\\n            <textarea\\n              id=\\\"save-design-desc-id\\\"\\n              class={{concat \\\"aditools-text-input_input \\\" this._designDescClass}}\\n              data-qa-element=\\\"dialog_save_description_txtbx\\\"\\n              value={{this.workingDesignDesc}}\\n              {{on \\\"keyup\\\" this.onValueChanged}}\\n              {{on \\\"change\\\" this.onValueChanged}}\\n              {{on \\\"blur\\\" this.onValueChanged}}            \\n            />\\n          </div>\\n        </div>\\n      </div>\\n    </:default>\\n    <:footer as |closeDialog| >\\n      <button id=\\\"close-button\\\" class=\\\"aditools-button dialog--closer\\\" type=\\\"button\\\" data-qa-element=\\\"dialog_close\\\" {{on \\\"click\\\" closeDialog}}>\\n        {{this._closeButtonText}}\\n      </button>\\n      <button id=\\\"save-file-button\\\"  class=\\\"aditools-button button--primary\\\" type=\\\"button\\\" data-qa-element=\\\"dialog_submit\\\" {{on \\\"click\\\" (fn this.saveDesign closeDialog) }}>\\n        {{this._saveButtonText}}\\n      </button>\\n    </:footer>\\n  </AditoolsDialog>\\n</div>\")","import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { inject as service } from '@ember/service';\nimport { action } from '@ember/object';\nimport { assert } from '@ember/debug';\nimport { isNone } from '@ember/utils';\nimport type IntlService from 'ember-intl/services/intl';\n\nexport interface AditoolsDialogSaveSignature {\n  Element: HTMLDialogElement;\n  Args: {\n    title: string;\n    save: (name: string, description: string) => void;\n    close: () => void;\n    designName?: string;\n    designDesc?: string;\n    designNameClass?: string;\n    designDescClass?: string;\n    closeButtonText?: string;\n    saveButtonText?: string;\n    dialogClass?: string;\n    submit?: () => void; // Obsolete\n  };\n}\ntype AditoolsDialogSaveArgs = AditoolsDialogSaveSignature['Args'];\n\nexport default class AditoolsDialogSave extends Component<AditoolsDialogSaveSignature> {\n  @service declare intl: IntlService;\n  @tracked workingDesignName: string = this._designName;\n  @tracked workingDesignDesc: string = this._designDesc;\n  @tracked isDesignNameValid = true;\n  @tracked isDesignDescValid = true;\n\n  constructor(owner: unknown, args: AditoolsDialogSaveArgs) {\n    super(owner, args);\n\n    assert('`title` is required', !isNone(this.args.title));\n    if (!isNone(this.args.submit)) {\n      console.log(`\n      The \\`submit\\` parameter has changed to \\`save\\`.\n      Please adjust your usage accordingly.\n      `);\n    }\n    assert('`save` is required', !isNone(this.args.save));\n    assert('`close` is required', !isNone(this.args.close));\n  }\n\n  // Optional parameters with defaults applied\n  get _designName() {\n    return this.args.designName ?? '';\n  }\n\n  get _designDesc() {\n    return this.args.designDesc ?? '';\n  }\n\n  get _designNameClass() {\n    return this.args.designNameClass ?? '';\n  }\n\n  get _designDescClass() {\n    return this.args.designDescClass ?? '';\n  }\n\n  get _closeButtonText() {\n    return this.args.closeButtonText ?? this.intl.t('ember-aditools-page.common.cancel');\n  }\n\n  get _saveButtonText() {\n    return this.args.saveButtonText ?? this.intl.t('ember-aditools-page.common.save');\n  }\n\n  @action onValueChanged(event: Event) {\n    const fieldName: string = (<HTMLInputElement>event.target).id.toString();\n    const value: string = (<HTMLInputElement>event.target).value.toString();\n    if (fieldName === 'save-design-name-id') {\n      if (this.workingDesignName !== value) {\n        this.workingDesignName = value;\n      }\n    } else if (fieldName === 'save-design-desc-id') {\n      if (this.workingDesignDesc !== value) {\n        this.workingDesignDesc = value;\n      }\n    }\n  }\n\n  @action saveDesign(closeDialog: () => void) {\n    if (this.validateDesignFields()) {\n      this.args.save(this.workingDesignName, this.workingDesignDesc);\n      closeDialog();\n    }\n  }\n\n  validateDesignFields(this: AditoolsDialogSave) {\n    const workingDesignName = this.workingDesignName ? this.workingDesignName.trim() : '';\n    const workingDesignDesc = this.workingDesignDesc ? this.workingDesignDesc.trim() : '';\n    this.isDesignNameValid = workingDesignName.length > 0;\n    this.isDesignDescValid = workingDesignDesc.length > 0;\n    return this.isDesignNameValid && this.isDesignDescValid;\n  }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<AditoolsDialog @title={{t \\\"ember-aditools-page.dialogs.feedback.title\\\"}} @dialogClass={{@dialogClass}} @close={{@close}} ...attributes>\\n  <:default>\\n    <div class=\\\"feedback-dialog\\\">\\n      <p>{{t \\\"ember-aditools-page.dialogs.feedback.invitation\\\"}}</p>\\n      <div>\\n        <label for=\\\"feedback-text\\\">{{t \\\"ember-aditools-page.dialogs.feedback.feedback\\\"}}</label>\\n      </div>\\n      <div>\\n        <textarea\\n          id=\\\"feedback-text\\\"\\n          class=\\\"feedback-text-area\\\"\\n          data-qa-element=\\\"dialog_feedback_txtarea\\\" \\n          value={{this.feedback}}\\n          {{on \\\"keyup\\\" this.onValueChanged}}\\n          {{on \\\"change\\\" this.onValueChanged}}\\n          {{on \\\"blur\\\" this.onValueChanged}}\\n        />\\n      </div>\\n      <div class=\\\"aditools-text-input\\\">\\n        <label for=\\\"feedback-name\\\" class=\\\"aditools-text-input_main-label\\\">{{t \\\"ember-aditools-page.dialogs.feedback.name\\\"}}</label>\\n        <input \\n          id=\\\"feedback-name\\\"\\n          class=\\\"aditools-text-input_input\\\"\\n          type=\\\"text\\\"\\n          data-qa-element=\\\"dialog_feedback_name_txtbx\\\"\\n          value={{this.name}}\\n          placeholder={{t \\\"ember-aditools-page.dialogs.feedback.optional\\\"}}\\n          {{on \\\"keyup\\\" this.onValueChanged}}\\n          {{on \\\"change\\\" this.onValueChanged}}\\n          {{on \\\"blur\\\" this.onValueChanged}}\\n        >\\n      </div>\\n      <div class=\\\"aditools-text-input\\\">\\n        <label for=\\\"feedback-email\\\" class=\\\"aditools-text-input_main-label\\\">{{t \\\"ember-aditools-page.dialogs.feedback.email\\\"}}</label>\\n        <input \\n          id=\\\"feedback-email\\\"\\n          class=\\\"aditools-text-input_input\\\"\\n          type=\\\"email\\\"\\n          data-qa-element=\\\"dialog_feedback_email_txtbx\\\"\\n          value={{this.email}}\\n          placeholder={{t \\\"ember-aditools-page.dialogs.feedback.optional\\\"}}\\n          {{on \\\"keyup\\\" this.onValueChanged}}\\n          {{on \\\"change\\\" this.onValueChanged}}\\n          {{on \\\"blur\\\" this.onValueChanged}}\\n        >\\n      </div>\\n    </div>\\n  </:default>\\n  <:footer as |closeDialog| >\\n    <button \\n      id=\\\"close-button\\\" \\n      class=\\\"aditools-button dialog--closer\\\" \\n      type=\\\"button\\\" \\n      data-qa-element=\\\"dialog_close\\\" \\n      {{on \\\"click\\\" closeDialog}}\\n    >\\n      {{t \\\"ember-aditools-page.common.cancel\\\"}}\\n    </button>\\n    <button \\n      id=\\\"submit-button\\\" \\n      class=\\\"aditools-button {{if this.isDisabled \\\"button--disabled\\\" \\\"button--primary\\\"}}\\\" \\n      type=\\\"button\\\" \\n      data-qa-element=\\\"dialog_submit\\\"\\n      disabled={{this.isDisabled}}\\n      {{on \\\"click\\\" (fn this.giveFeedback closeDialog)}} \\n    >    \\n      {{t \\\"ember-aditools-page.dialogs.feedback.give-feedback\\\"}}\\n    </button>\\n  </:footer>\\n</AditoolsDialog>\")","import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { inject as service } from '@ember/service';\nimport { action } from '@ember/object';\nimport type IntlService from 'ember-intl/services/intl';\n\ninterface FeedbackHash {\n  name: string;\n  email: string;\n  feedback: string;\n}\n\nexport interface AditoolsFeedbackDialogSignature {\n  Element: HTMLDialogElement;\n  Args: {\n    submitFeedback: (feedback: FeedbackHash) => void;\n    close: () => void;\n    dialogClass?: string;\n    model?: FeedbackHash;\n  };\n}\n\ninterface FeedbackHash {\n  name: string;\n  email: string;\n  feedback: string;\n}\n\nexport default class AditoolsFeedbackDialog extends Component<AditoolsFeedbackDialogSignature> {\n  @service declare intl: IntlService;\n  @tracked name = this._model.name;\n  @tracked email = this._model.email;\n  @tracked feedback = this._model.feedback;\n\n  get _model() {\n    return this.args.model ?? { name: '', email: '', feedback: '' };\n  }\n\n  get isDisabled() {\n    return this.feedback.length === 0;\n  }\n\n  validate() {\n    return this.feedback.length > 0;\n  }\n\n  @action onValueChanged(event: Event) {\n    const fieldName: string = (<HTMLInputElement>event.target).id.toString();\n    const value: string = (<HTMLInputElement>event.target).value.toString();\n    const fieldProperties = { 'feedback-name': 'name', 'feedback-email': 'email', 'feedback-text': 'feedback' };\n    if (Object.prototype.hasOwnProperty.call(fieldProperties, fieldName)) {\n      // Typescript can't see that the hash makes the values safe, so we have to declare they are.\n      const fieldProperty = fieldProperties[fieldName as 'feedback-name' | 'feedback-email' | 'feedback-text'];\n      const fieldPropertySafe = fieldProperty as 'name' | 'email' | 'feedback';\n      if (this[fieldPropertySafe] !== value) {\n        this[fieldPropertySafe] = value;\n      }\n    }\n  }\n\n  @action giveFeedback(closeDialog: () => void) {\n    if (this.validate() && this.args.submitFeedback) {\n      this.args.submitFeedback({ name: this.name, email: this.email, feedback: this.feedback });\n      closeDialog();\n    }\n  }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"    <AditoolsHelpDialog @title={{@item.title}} @message={{@item.message}} @close={{@close}}>\\r\\n      {{#if @item.isFromUrl}}\\r\\n        {{#async-await (helptext @item.url) as |text| }}\\r\\n          <div {{apply-expand-click}}>\\r\\n            {{text}}\\r\\n          </div>\\r\\n        {{else}}\\r\\n          <div class=\\\"help-spinner\\\">\\r\\n             <div class=\\\"help-spinner-image\\\"/>\\r\\n             <div class=\\\"help-spinner-message\\\">{{t \\'main.busy\\'}}</div>\\r\\n          </div>          \\r\\n        {{/async-await}}\\r\\n      {{/if}}\\r\\n    </AditoolsHelpDialog>\\r\\n\",{ moduleName: \"photodiode/components/controls/help-dialog.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './help-dialog.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\nexport default templateOnlyComponent();","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<div class=\\\"aditools-content-wrap\\\" ...attributes>\\n  <div class=\\\"main-content\\\">\\n    {{yield}}\\n  </div>\\n</div>\")","import templateOnlyComponent from '@ember/component/template-only';\n\ninterface AditoolsContentWrapSignature {\n  Element: HTMLDivElement;\n  Blocks: {\n    default: [];\n  };\n}\n\nconst AditoolsContentWrap = templateOnlyComponent<AditoolsContentWrapSignature>();\n\nexport default AditoolsContentWrap;\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<button\\r\\n  class=\\\"tab-button-area {{@type}}\\\"\\r\\n  disabled={{this.isDisabled}}\\r\\n  tabindex=\\\"0\\\"\\r\\n  type=\\\"button\\\"\\r\\n  {{on \\\"click\\\" (fn @onclick this.toTab) }}\\r\\n  ...attributes\\r\\n>\\r\\n  <div class=\\\"tab-button {{@type}}\\\">\\r\\n    <svg class=\\\"svg-link-icon\\\" focusable=\\\"false\\\"><use xlink:href=\\\"#photodiode-svgicon-{{@type}}\\\"></use></svg>\\r\\n  </div>\\r\\n</button>\",{ moduleName: \"photodiode/components/tab-button.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './tab-button.hbs'; */\nimport Component from '@glimmer/component';\r\n\r\ninterface TabButtonArgs {\r\n  type: string;\r\n  activeTab: string;\r\n  enabledTabs: [string];\r\n  onclick: () => void;\r\n}\r\nexport default class TabButton extends Component<TabButtonArgs> {\r\n  get isDisabled(): boolean {\r\n    const index = this.args.enabledTabs.findIndex((item) => {\r\n      return item === this.args.activeTab;\r\n    });\r\n    return (\r\n      index === -1 ||\r\n      (this.args.type === 'previous' && index === 0) ||\r\n      (this.args.type === 'next' && index === this.args.enabledTabs.length - 1)\r\n    );\r\n  }\r\n\r\n  get toTab(): string | null {\r\n    const index = this.args.enabledTabs.findIndex((item) => {\r\n      return item === this.args.activeTab;\r\n    });\r\n    if (\r\n      index === -1 ||\r\n      (this.args.type === 'previous' && index === 0) ||\r\n      (this.args.type === 'next' && index === this.args.enabledTabs.length - 1)\r\n    ) {\r\n      return null;\r\n    }\r\n    if (this.args.type === 'previous') {\r\n      return this.args.enabledTabs[index - 1] as string;\r\n    }\r\n    if (this.args.type === 'next') {\r\n      return this.args.enabledTabs[index + 1] as string;\r\n    }\r\n    return this.args.enabledTabs[index] as string;\r\n  }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<footer class=\\\"aditools-footer\\\" ...attributes>\\n  <div class=\\\"aditools-footer_links\\\">\\n    <a class=\\\"aditools-footer-link\\\" href={{this.legalURL}} target=\\\"\\\" data-qa-element=\\\"footer_legal_link\\\" >{{t \\\"ember-aditools-page.footer.legal\\\"}}</a>\\n    <a class=\\\"aditools-footer-link\\\" href={{this.accessibilityURL}} target=\\\"\\\" data-qa-element=\\\"footer_accessibility_link\\\" >{{t \\\"ember-aditools-page.footer.accessibility\\\"}}</a>\\n    <a class=\\\"aditools-footer-link\\\" href={{this.privacyPolicyURL}} target=\\\"\\\" data-qa-element=\\\"footer_privacy_and_security_link\\\" >{{t \\\"ember-aditools-page.footer.privacy-policy\\\"}}</a>\\n    <a class=\\\"aditools-footer-link\\\" href={{this.privacySettingsURL}} target=\\\"\\\" data-qa-element=\\\"footer_privacy_settings_link\\\" >{{t \\\"ember-aditools-page.footer.privacy-settings\\\"}}</a>\\n    <a id=\\\"ot-sdk-link\\\" class=\\\"aditools-footer-link ot-sdk-show-settings\\\" href={{this.cookieSettingsURL}} {{on \\\"click\\\" this.doNotAddToUrl}} data-qa-element=\\\"footer_cookie_settings_link\\\" >{{t \\\"ember-aditools-page.footer.cookie-settings\\\"}}</a>\\n  </div>\\n  <div class=\\\"aditools-footer_icp\\\">{{t \\\"ember-aditools-page.footer.icp-id\\\" htmlSafe=true}}</div>\\n  <div class=\\\"aditools-footer_copyright\\\" data-qa-element=\\\"footer_copyright_lbl\\\">\\n    <span class=\\\"copy\\\">&copy;</span> {{t \\\"ember-aditools-page.footer.copyright-text\\\"}}\\n  </div>\\n</footer>\")","import Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport Constants from '../constants.ts';\nimport { action } from '@ember/object';\n\nexport interface AditoolsFooterSignature {\n  Element: HTMLElement;\n  Args: {\n    siteURL?: string;\n    locale?: string;\n  };\n}\ntype AditoolsFooterArgs = AditoolsFooterSignature['Args'];\n\nexport default class AditoolsFooter extends Component<AditoolsFooterSignature> {\n  constructor(owner: unknown, args: AditoolsFooterArgs) {\n    super(owner, args);\n    assert('ADI domains now use https -- check `siteURL` string', this._siteURL.startsWith('https'));\n    assert(\n      'Locale should be one of the following: en/jp/cn/ru',\n      this._locale === 'en' || this._locale === 'jp' || this._locale === 'cn' || this._locale === 'ru'\n    );\n  }\n\n  // Optional parameters with defaults applied\n  get _siteURL() {\n    return this.args.siteURL ?? 'https://www.analog.com';\n  }\n\n  get _locale() {\n    return this.args.locale ?? 'en';\n  }\n\n  get sitemapURL() {\n    return Constants.urls.sitemap.replace('{siteURL}', this._siteURL).replace('{loc}', this._locale);\n  }\n\n  get legalURL() {\n    return Constants.urls.legal.replace('{siteURL}', this._siteURL).replace('{loc}', this._locale);\n  }\n\n  get accessibilityURL() {\n    return Constants.urls.accessibility.replace('{siteURL}', this._siteURL).replace('{loc}', this._locale);\n  }\n\n  get privacyPolicyURL() {\n    return Constants.urls.privacyPolicy.replace('{siteURL}', this._siteURL).replace('{loc}', this._locale);\n  }\n\n  get privacySettingsURL() {\n    return Constants.urls.privacySettings.replace('{siteURL}', this._siteURL).replace('{loc}', this._locale);\n  }\n\n  get cookieSettingsURL() {\n    return Constants.urls.cookieSettings.replace('{siteURL}', this._siteURL).replace('{loc}', this._locale);\n  }\n\n  @action doNotAddToUrl(e: Event): void {\n    e.preventDefault(); // Cancel the native event\n  }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#if @dialogEnabled}}\\n  <AditoolsDialog @title={{this._title}} @dialogClass={{@dialogClass}} @close={{this.dontClose}} @hideCloseX={{true}} ...attributes>\\n    <:default>\\n      <div class=\\\"system-dialog {{@bodyClass}}\\\">\\n        <div class=\\\"spinner-image\\\"></div>\\n        <div class=\\\"spinner-message\\\">{{this._message}}</div>\\n      </div>\\n    </:default>\\n  </AditoolsDialog>\\n{{/if}}\")","import Component from '@glimmer/component';\nimport { inject as service } from '@ember/service';\nimport type IntlService from 'ember-intl/services/intl';\nimport { assert } from '@ember/debug';\nimport type { htmlSafe } from '@ember/template';\ntype SafeString = ReturnType<typeof htmlSafe>;\n\nexport interface AditoolsSystemDialogSignature {\n  Element: HTMLDialogElement;\n  Args: {\n    title?: string | SafeString;\n    message?: string | SafeString;\n    dialogClass?: string;\n    bodyClass?: string;\n    dialogEnabled?: boolean;\n  };\n}\n\nexport default class AditoolsSystemDialog extends Component<AditoolsSystemDialogSignature> {\n  @service declare intl: IntlService;\n\n  // Parameters\n\n  // Optional parameters with defaults applied\n  get _message() {\n    return this.args.message ?? this.intl.t('ember-aditools-page.dialogs.system.application-busy');\n  }\n\n  get _title() {\n    return this.args.title ?? this.intl.t('ember-aditools-page.dialogs.system.title');\n  }\n\n  dontClose() {\n    assert('This function must never be called - reset @dialogEnabled instead', false);\n  }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{!page-title \\\"Photodiode\\\"}}\\r\\n<div class=\\\"aditools-frame photodiode-frame\\\">\\r\\n<AditoolsHeader\\r\\n  @tools-title={{t \\\"main.title\\\"}}\\r\\n  @siteURL={{this.siteconfig.SiteUrl}}\\r\\n  @locale={{this.siteconfig.AdiLocale}}\\r\\n  @logo=\\\"adi\\\"\\r\\n  @suppressDropdown={{true}}>\\r\\n\\r\\n  <li class=\\\"suite-links-menu header-dropdown\\\" >\\r\\n    <AditoolsStudioDropdown\\r\\n      @locale={{this.siteconfig.AdiLocale}}\\r\\n      @toolUrls={{hash\\r\\n        PrecisionStudioUrl = this.siteconfig.PrecisionStudioUrl\\r\\n        FilterWizardUrl = this.siteconfig.FilterWizardUrl\\r\\n        AdcDriverUrl = this.siteconfig.AdcDriverUrl\\r\\n        PhotodiodeUrl = this.siteconfig.PhotodiodeUrl\\r\\n        DiamondUrl = this.siteconfig.DiamondUrl\\r\\n        SimDDSUrl = this.siteconfig.SimDDSUrl\\r\\n        VirtualEvalUrl = this.siteconfig.VirtualEvalUrl\\r\\n        DACErrorCalculatorUrl = this.siteconfig.DACErrorCalculatorUrl\\r\\n        SignalChainDesignerUrl = this.siteconfig.SignalChainDesignerUrl\\r\\n      }}\\r\\n    />\\r\\n  </li>\\r\\n</AditoolsHeader>\\r\\n<nav>\\r\\n  <AditoolsToolbar>\\r\\n    <:tabs>\\r\\n      <AditoolsToolbarTab\\r\\n          id=\\\"photodiode_tab\\\"\\r\\n        @label={{t \\\"menu.tabs.photodiode\\\"}}\\r\\n        @tab=\\\"photodiode\\\"\\r\\n        @iconClass=\\\"icon-photodiode\\\"\\r\\n        @activeTab={{this.tab}}\\r\\n        @disabled={{this.isTabDisabled \\\"photodiode\\\"}}\\r\\n        @select={{fn this.selectTab \\\"TAB\\\" \\\"photodiode\\\"}}\\r\\n      />\\r\\n      <AditoolsToolbarTab\\r\\n        id=\\\"circuit_design_tab\\\"\\r\\n        @label={{t \\\"menu.tabs.circuit-design\\\"}}\\r\\n        @tab=\\\"circuit\\\"\\r\\n        @iconClass=\\\"icon-circuit\\\"\\r\\n        @activeTab={{this.tab}}\\r\\n        @disabled={{this.isTabDisabled \\\"circuit\\\"}}\\r\\n        @select={{fn this.selectTab \\\"TAB\\\" \\\"circuit\\\"}}\\r\\n      />\\r\\n      <AditoolsToolbarTab\\r\\n        id=\\\"next_steps_tab\\\"\\r\\n        @label={{t \\\"menu.tabs.next-steps\\\"}}\\r\\n        @tab=\\\"nextsteps\\\"\\r\\n        @iconClass=\\\"icon-nextsteps\\\"\\r\\n        @activeTab={{this.tab}}\\r\\n        @disabled={{this.isTabDisabled \\\"nextsteps\\\"}}\\r\\n        @select={{fn this.selectTab \\\"TAB\\\" \\\"nextsteps\\\"}}\\r\\n      />\\r\\n    </:tabs>\\r\\n    <:actions>\\r\\n      <AditoolsToolbarAction\\r\\n        @label={{t \\\"menu.links.load\\\"}}\\r\\n        @qaName=\\\"load\\\"\\r\\n        @onOpen={{fn this.toolbarMenuClick \\\"Load\\\"}}\\r\\n        @iconClass=\\\"icon-load\\\" as | submit close |\\r\\n      >\\r\\n        <AditoolsDialogLoad\\r\\n          @title={{t \\\"menu.links.load\\\"}}\\r\\n          @load={{this.loadDesign}}\\r\\n          @close={{close}}\\r\\n        />\\r\\n      </AditoolsToolbarAction>\\r\\n      <AditoolsToolbarAction\\r\\n        @label={{t \\\"menu.links.save\\\"}}\\r\\n        @qaName=\\\"save\\\"\\r\\n        @onOpen={{fn this.toolbarMenuClick \\\"Save\\\"}}\\r\\n        @iconClass=\\\"icon-save\\\" as | submit close |\\r\\n      >\\r\\n        {{#if this.isSafeToSave}}\\r\\n          <AditoolsDialogSave\\r\\n            @title={{t \\\"menu.links.save\\\"}}\\r\\n            @save={{this.saveDesign}}\\r\\n            @close={{close}}\\r\\n          />\\r\\n        {{else}}\\r\\n          <AditoolsHelpDialog\\r\\n            @title={{t \\'dialogs.save.error-title\\'}}\\r\\n            @message={{t \\'dialogs.save.error-message\\'}}\\r\\n            @close={{close}}\\r\\n          />\\r\\n        {{/if}}\\r\\n    </AditoolsToolbarAction>\\r\\n      <AditoolsToolbarAction\\r\\n        @label={{t \\\"menu.links.feedback\\\"}}\\r\\n        @qaName=\\\"feedback\\\"\\r\\n        @onOpen={{fn this.toolbarMenuClick \\\"Feedback\\\"}}\\r\\n        @iconClass=\\\"icon-feedback\\\" as |submit close|\\r\\n      >\\r\\n        <AditoolsFeedbackDialog\\r\\n          @submitFeedback={{this.sendFeedback}}\\r\\n          @close={{close}}\\r\\n        />\\r\\n      </AditoolsToolbarAction>\\r\\n      <AditoolsToolbarAction\\r\\n        @label={{t \\\"menu.links.help\\\"}}\\r\\n        @qaName=\\\"help\\\"\\r\\n        @onOpen={{fn this.toolbarMenuClick \\\"Help\\\"}}\\r\\n        @iconClass=\\\"icon-help\\\" as |submit close|\\r\\n      >\\r\\n        <Controls::HelpDialog @item={{helpitem \\\"@main-help\\\"}} @close={{close}}/>\\r\\n      </AditoolsToolbarAction>\\r\\n    </:actions>\\r\\n  </AditoolsToolbar>\\r\\n</nav>\\r\\n<main class=\\\"aditools-content\\\">\\r\\n  <AditoolsContentWrap>\\r\\n    <TabButton\\r\\n      @type=\\\"previous\\\"\\r\\n      title={{t \\\"main.previous-tab\\\"}}\\r\\n      @activeTab={{this.tab}}\\r\\n      @enabledTabs={{this.enabledTabs}}\\r\\n      @onclick={{fn this.selectTab \\\"ARROW\\\"}}\\r\\n    />\\r\\n    <section class=\\\"content\\\">\\r\\n      {{outlet}}\\r\\n    </section>\\r\\n    <TabButton\\r\\n      @type=\\\"next\\\"\\r\\n      title={{t \\\"main.next-tab\\\"}}\\r\\n      @activeTab={{this.tab}}\\r\\n      @enabledTabs={{this.enabledTabs}}\\r\\n      @onclick={{fn this.selectTab \\\"ARROW\\\"}}\\r\\n    />\\r\\n  </AditoolsContentWrap>\\r\\n</main>\\r\\n<AditoolsFooter @siteURL={{this.siteconfig.SiteUrl}} @locale={{this.siteconfig.AdiLocale}}/>\\r\\n</div>\\r\\n{{! The following are pop-ups invoked at this level}}\\r\\n\\r\\n<AditoolsSystemDialog\\r\\n  @dialogEnabled={{this.systemDialog.enabled}}\\r\\n  @title={{t \\\"dialogs.system.title\\\"}}\\r\\n  @message={{this.systemDialog.message}}\\r\\n  @bodyClass=\\\"system-dialog\\\"\\r\\n/>\\r\\n\\r\\n{{#if this.notificationDialog.enabled}}\\r\\n  <AditoolsHelpDialog\\r\\n    @close={{this.closeNotification}}\\r\\n    @title={{this.notificationDialog.title}}\\r\\n    @message={{this.notificationDialog.message}}\\r\\n  />\\r\\n{{/if}}\",{ moduleName: \"photodiode/templates/application.hbs\" })","import { helper } from '@ember/component/helper';\nimport { Changeset } from 'ember-changeset';\nimport { lookupValidator, isChangeset, isPromise, isObject } from 'validated-changeset';\nexport function changeset([obj, validations], options = {}) {\n  if (!obj) {\n    // route transitions may trigger this\n    return;\n  }\n  if (isChangeset(obj)) {\n    return obj;\n  }\n  if (isObject(validations)) {\n    if (isPromise(obj)) {\n      return obj.then(resolved => Changeset(resolved, lookupValidator(validations), validations, options));\n    }\n    return Changeset(obj, lookupValidator(validations), validations, options);\n  }\n  if (isPromise(obj)) {\n    return Promise.resolve(obj).then(resolved => Changeset(resolved, validations, {}, options));\n  }\n  return Changeset(obj, validations, {}, options);\n}\nexport default helper(changeset);","import type { Column } from 'slickgrid';\nimport type { DeviceData } from '../components/aditools-device-table.ts';\n\nexport default {\n  linkFormatter: function (\n    _row: number,\n    _cell: number,\n    value: { url: string; name: string },\n    _columnDef: Column<DeviceData>,\n    dataContext: DeviceData,\n  ): string {\n    return [\n      '<a target=\"_blank\"',\n      'class=\"recommended-part-item\"',\n      'rel=\"noopener noreferrer\"',\n      'data-action=\"part\"',\n      'data-partid=\"',\n      dataContext['id'],\n      '\"',\n      ' href=\"',\n      value.url,\n      '\">',\n      value.name,\n      '</a>',\n    ].join('');\n  },\n};\n","import { assert } from '@ember/debug';\nimport type { Column } from 'slickgrid';\nimport { userEntryToNumber } from '@ebiz/pretty-num';\nimport Validation from './validation.ts';\nimport type { ColumnFilter, DeviceData } from '../components/aditools-device-table.ts';\n\nconst _stripTrailingDecimal = function (item: string) {\n  const dotted = item.split('.');\n  return dotted.length === 2 && dotted[1] && dotted[1].length === 0 ? item.slice(0, -1) : item;\n};\n\nexport default class PriceFilter implements ColumnFilter<DeviceData> {\n  defaultRelation: string;\n  relation: string;\n  initialValue: string;\n  value: string;\n  qaName?: string;\n\n  constructor(defaultRelation: string, initialValue?: string, qaName?: string) {\n    this.defaultRelation = defaultRelation ?? 'GT';\n    this.relation = this.defaultRelation;\n    this.initialValue = initialValue ?? '';\n    this.value = this.initialValue;\n    this.qaName = qaName;\n  }\n\n  populate(column: Column<DeviceData>): HTMLElement {\n    if (!column) {\n      throw 'column passed to populate is invalid';\n    }\n    const selection = $(this.generateDOMElement(column));\n    selection.find('select').val(this.relation);\n    selection.find('input').val(this.value);\n    assert('At least one element is always generated', selection[0]);\n    return selection[0];\n  }\n\n  generateDOMElement(column: Column<DeviceData>): string {\n    const selectQaElement = this.qaName ? `data-qa-element=\"device_table_${this.qaName}_select\"` : '';\n    const inputQaElement = this.qaName ? `data-qa-element=\"device_table_${this.qaName}_input\"` : '';\n    return `<div class=\"slickgrid-filter-engineering\">\n      <select id=\"filter-${column.id}-rel\" class=\"slickgrid-filter-relation\" aria-label=\"${column.name} filter direction\" ${selectQaElement} data-column-id=\"${column.id}\">\n        <option value=\"EQ\">=</option>\n      </select>\n      <input id=\"filter-${column.id}-val\" class=\"slickgrid-filter-relative-value\" type=\"text\" autocomplete=\"off\" aria-label=\"${column.name} filter value\" ${inputQaElement} data-column-id=\"${column.id}\" />\n    </div>`;\n  }\n\n  update(element: HTMLInputElement): void {\n    const children = element.parentElement?.children;\n    if (children) {\n      this.relation = (<HTMLInputElement>children[0]).value;\n      this.value = (<HTMLInputElement>children[1]).value;\n    }\n  }\n\n  unpack(packedValues: string): void {\n    if (packedValues) {\n      const initialValues = JSON.parse(packedValues);\n      if (\n        Object.prototype.hasOwnProperty.call(initialValues, 'relation') &&\n        Object.prototype.hasOwnProperty.call(initialValues, 'value')\n      ) {\n        this.relation = initialValues.relation;\n        this.value = initialValues.value;\n      }\n    }\n  }\n\n  pack(): string {\n    return JSON.stringify({ relation: this.relation, value: this.value });\n  }\n\n  hasValue(): boolean {\n    return this.value !== '';\n  }\n\n  reset(): void {\n    this.relation = this.defaultRelation;\n    this.value = this.initialValue;\n  }\n\n  filter(field: string): boolean {\n    const fieldValue1 = field && field.split(' ~ ')[0] ? userEntryToNumber(field.split(' ~ ')[0] ?? '') : field;\n    const fieldValue2 = field && field.split(' ~ ')[1] ? userEntryToNumber(field.split(' ~ ')[1] ?? '') : field;\n    const filterRelation = this.relation;\n    const filterValueString = _stripTrailingDecimal(this.value);\n    if (Validation.validateFieldInput(filterValueString, 'ENGINEERING')) {\n      const filterValue = userEntryToNumber(filterValueString);\n      if (filterValue && fieldValue1 && fieldValue2) {\n        switch (filterRelation) {\n          case 'EQ':\n            return filterValue >= (fieldValue1 as number) && filterValue <= (fieldValue2 as number);\n        }\n      }\n    }\n    return true;\n  }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<AditoolsDialog @title={{@title}} @close={{@close}}>\\r\\n  <:default>\\r\\n    <div id=\\\"sensor-selection-grid\\\">\\r\\n      <div>\\r\\n        <AditoolsDeviceTable\\r\\n          @data={{this.data}}\\r\\n          @columns={{this.columns}}\\r\\n          @options={{this.options}}\\r\\n          @rowSelected={{this.partSelected}}\\r\\n          @selectedPart={{@selectedPart}}\\r\\n          @summaryRowText={{t \\\"sensor-selection.row-count\\\"}}\\r\\n          data-qa-element=\\\"pd_sensor_tbl\\\"\\r\\n        />\\r\\n      </div>\\r\\n    </div>\\r\\n  </:default>\\r\\n  <:footer as |closeDialog|>\\r\\n    <div class=\\\"bottom-buttons\\\">\\r\\n      <button type=\\\"button\\\"\\r\\n        class=\\\"aditools-button\\\"\\r\\n        title={{t \\\"sensor-selection.cancel\\\"}}\\r\\n        {{on \\\"click\\\" closeDialog}}\\r\\n        data-qa-element=\\\"dialog_close\\\">\\r\\n        {{t \\\"sensor-selection.cancel\\\"}}\\r\\n      </button>\\r\\n      {{#if this.selectEnabled}}\\r\\n        <button type=\\\"button\\\"\\r\\n          id=\\\"current-calculation-button\\\"\\r\\n          class=\\\"aditools-button button--primary\\\"\\r\\n          title={{t \\\"sensor-selection.select\\\"}}\\r\\n          {{on \\\"click\\\" (fn this.applyAndClose closeDialog)}}\\r\\n          data-qa-element=\\\"dialog_submit\\\">\\r\\n          {{t \\\"sensor-selection.select\\\"}}\\r\\n        </button>\\r\\n      {{else}}\\r\\n        <button type=\\\"button\\\"\\r\\n          id=\\\"current-calculation-button\\\"\\r\\n          class=\\\"aditools-button button--disabled\\\"\\r\\n          title={{t \\\"sensor-selection.select\\\"}}\\r\\n          data-qa-element=\\\"dialog_submit\\\">\\r\\n          {{t \\\"sensor-selection.select\\\"}}\\r\\n        </button>\\r\\n      {{/if}}\\r\\n    </div>\\r\\n  </:footer>\\r\\n</AditoolsDialog>\",{ moduleName: \"photodiode/components/dialogs/sensor-selection.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './sensor-selection.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { inject as service } from '@ember/service';\r\nimport { action } from '@ember/object';\r\nimport { tracked } from '@glimmer/tracking';\r\nimport { numberToUserDisplay } from '@ebiz/pretty-num';\r\nimport { DeviceColumn, DeviceData } from '@ebiz/ember-aditools-device-table/components/aditools-device-table';\r\nimport DeviceTableComparator from '@ebiz/ember-aditools-device-table/utils/comparator';\r\nimport DeviceTableFormatter from '@ebiz/ember-aditools-device-table/utils/formatter';\r\nimport { SensorData } from '../../models/sensor';\r\nimport PartialTextFilter from '@ebiz/ember-aditools-device-table/utils/partial-text-filter';\r\nimport RangeFilter from '@ebiz/ember-aditools-device-table/utils/range-filter';\r\nimport EngineeringRangeValueFilter from '@ebiz/ember-aditools-device-table/utils/engineering-range-value-filter';\r\nimport type IntlService from 'ember-intl/services/intl';\r\n\r\ninterface SensorSelectionArgs {\r\n  title: string;\r\n  close: () => void;\r\n  selectedPart: string;\r\n  sensorData: SensorData[];\r\n  selectSensor: (partNumber: string) => void;\r\n}\r\n\r\nconst options = {\r\n  asyncEditorLoading: true,\r\n  forceFitColumns: false,\r\n  showHeaderRow: true,\r\n  headerRowHeight: 30,\r\n  explicitInitialization: true,\r\n  autoHeight: false,\r\n  multiColumnSort: true,\r\n  multiSelect: false,\r\n  enableColumnReorder: false,\r\n  enableAddRow: false,\r\n  frozenColumn: 0,\r\n};\r\n\r\nexport default class SensorSelection extends Component<SensorSelectionArgs> {\r\n  @service declare intl: IntlService;\r\n  @tracked selectEnabled = false;\r\n  selectedPart?: string;\r\n\r\n  get data(): SensorDataItem[] {\r\n    return this.buildSensorSelectionData(this.args.sensorData);\r\n  }\r\n\r\n  get columns(): DeviceColumn<DeviceData>[] {\r\n    return this.getSensorSelectionColumns();\r\n  }\r\n\r\n  get options(): { [x: string]: boolean | number } {\r\n    return options;\r\n  }\r\n\r\n  getSensorSelectionColumns(): DeviceColumn<DeviceData>[] {\r\n    return [\r\n      {\r\n        id: 'part',\r\n        field: 'part',\r\n        name: this.intl.t('sensor-selection.part-number'),\r\n        sortable: true,\r\n        resizable: false,\r\n        width: 140,\r\n        comparator: DeviceTableComparator.textComparator,\r\n        filter: new PartialTextFilter(),\r\n      },\r\n      {\r\n        id: 'manufacturer',\r\n        field: 'manufacturer',\r\n        name: this.intl.t('sensor-selection.manufacturer'),\r\n        sortable: true,\r\n        width: 121,\r\n      },\r\n      {\r\n        id: 'packageType',\r\n        field: 'packageType',\r\n        name: this.intl.t('sensor-selection.package'),\r\n        sortable: true,\r\n        width: 95,\r\n      },\r\n      {\r\n        id: 'spectralRange',\r\n        field: 'spectralRange',\r\n        name: this.intl.t('sensor-selection.spectral-range') + ' (' + this.intl.t('units.meters') + ')',\r\n        sortable: true,\r\n        width: 160,\r\n        comparator: DeviceTableComparator.rangeComparator,\r\n        filter: new RangeFilter('EQ'),\r\n      },\r\n      {\r\n        id: 'spectralPeak',\r\n        field: 'spectralPeak',\r\n        name: this.intl.t('sensor-selection.spectral-peak') + ' (' + this.intl.t('units.meters') + ')',\r\n        sortable: true,\r\n        width: 190,\r\n        comparator: DeviceTableComparator.engineeringComparator,\r\n        filter: new EngineeringRangeValueFilter('', ''),\r\n      },\r\n      {\r\n        id: 'sensitivity',\r\n        field: 'sensitivity',\r\n        name: this.intl.t('sensor-selection.sensitivity') + ' (' + this.intl.t('units.sensitivity') + ')',\r\n        sortable: true,\r\n        width: 140,\r\n        comparator: DeviceTableComparator.engineeringComparator,\r\n        filter: new EngineeringRangeValueFilter('', ''),\r\n      },\r\n      {\r\n        id: 'darkCurrent',\r\n        field: 'darkCurrent',\r\n        name: this.intl.t('sensor-selection.dark-current') + ' (' + this.intl.t('units.A') + ')',\r\n        sortable: true,\r\n        width: 153,\r\n        comparator: DeviceTableComparator.engineeringComparator,\r\n        filter: new EngineeringRangeValueFilter('', ''),\r\n      },\r\n      {\r\n        id: 'capacitance',\r\n        field: 'capacitance',\r\n        name: this.intl.t('sensor-selection.capacitance') + ' (' + this.intl.t('units.farad') + ')',\r\n        sortable: true,\r\n        width: 153,\r\n        comparator: DeviceTableComparator.engineeringComparator,\r\n        filter: new EngineeringRangeValueFilter('', ''),\r\n      },\r\n      {\r\n        id: 'resistance',\r\n        field: 'resistance',\r\n        name: this.intl.t('sensor-selection.resistance') + ' (' + this.intl.t('units.ohm') + ')',\r\n        sortable: true,\r\n        width: 153,\r\n        comparator: DeviceTableComparator.engineeringComparator,\r\n        filter: new EngineeringRangeValueFilter('', ''),\r\n      },\r\n      {\r\n        id: 'responseTime',\r\n        field: 'responseTime',\r\n        name: this.intl.t('sensor-selection.response-time') + ' (' + this.intl.t('units.seconds') + ')',\r\n        sortable: true,\r\n        width: 162,\r\n        comparator: DeviceTableComparator.engineeringComparator,\r\n        filter: new EngineeringRangeValueFilter('', ''),\r\n      },\r\n      {\r\n        id: 'reverseBreakdown',\r\n        field: 'reverseBreakdown',\r\n        name: this.intl.t('sensor-selection.reverse-breakdown') + ' (' + this.intl.t('units.V') + ')',\r\n        sortable: true,\r\n        width: 205,\r\n        comparator: DeviceTableComparator.engineeringComparator,\r\n        filter: new EngineeringRangeValueFilter('', ''),\r\n      },\r\n      {\r\n        id: 'activeArea',\r\n        field: 'activeArea',\r\n        name: this.intl.t('sensor-selection.active-area') + ' (' + this.intl.t('units.active-area') + ')',\r\n        sortable: true,\r\n        width: 180,\r\n        comparator: DeviceTableComparator.engineeringComparator,\r\n        filter: new EngineeringRangeValueFilter('', ''),\r\n      },\r\n      {\r\n        id: 'viewingAngle',\r\n        field: 'viewingAngle',\r\n        name: this.intl.t('sensor-selection.viewing-angle') + ' (' + this.intl.t('units.viewing-angle') + ')',\r\n        sortable: true,\r\n        width: 145,\r\n        comparator: DeviceTableComparator.engineeringComparator,\r\n        filter: new EngineeringRangeValueFilter('', ''),\r\n      },\r\n      {\r\n        id: 'operatingTemperature',\r\n        field: 'operatingTemperature',\r\n        name:\r\n          this.intl.t('sensor-selection.operating-temperature') +\r\n          ' (' +\r\n          this.intl.t('units.operating-temperature') +\r\n          ')',\r\n        sortable: true,\r\n        width: 210,\r\n        comparator: DeviceTableComparator.rangeComparator,\r\n        filter: new RangeFilter('EQ'),\r\n      },\r\n      {\r\n        id: 'spiceFileUrl',\r\n        field: 'spiceFileLink',\r\n        name: this.intl.t('sensor-selection.spice-file'),\r\n        formatter: DeviceTableFormatter.linkFormatter as Slick.Formatter<DeviceData>,\r\n        sortable: false,\r\n        width: 110,\r\n      },\r\n      {\r\n        id: 'vendorLink',\r\n        field: 'vendorLink',\r\n        name: this.intl.t('sensor-selection.vendor-link'),\r\n        sortable: false,\r\n        formatter: DeviceTableFormatter.linkFormatter as Slick.Formatter<DeviceData>,\r\n        width: 210,\r\n      },\r\n    ];\r\n  }\r\n\r\n  buildSensorSelectionData(sensorData: SensorData[]): SensorDataItem[] {\r\n    let data: SensorDataItem[] = [];\r\n    for (const [index, sensor] of sensorData.entries()) {\r\n      data.push({\r\n        id: 'row_' + index,\r\n        part: sensor.partNumber,\r\n        cost: sensor.cost,\r\n        manufacturer: sensor.manufacturer,\r\n        packageType: sensor.packageType,\r\n        spectralRange: sensor.spectralRange,\r\n        spectralPeak: numberToUserDisplay(sensor.spectralPeak as number, 'Engineering', 3, { showZeroes: false }),\r\n        sensitivity: numberToUserDisplay(sensor.sensitivity as number, 'Engineering', 3, { showZeroes: false }),\r\n        darkCurrent: numberToUserDisplay(sensor.darkCurrent as number, 'Engineering', 3, { showZeroes: false }),\r\n        capacitance: numberToUserDisplay(sensor.capacitance as number, 'Engineering', 3, { showZeroes: false }),\r\n        resistance: numberToUserDisplay(sensor.resistance as number, 'Engineering', 3, { showZeroes: false }),\r\n        responseTime: numberToUserDisplay(sensor.responseTime as number, 'Engineering', 3, { showZeroes: false }),\r\n        reverseBreakdown: sensor.reverseBreakdown,\r\n        activeArea: sensor.area,\r\n        viewingAngle: sensor.angle,\r\n        operatingTemperature: sensor.operatingTemp,\r\n        spiceFileLink: {\r\n          name: this.intl.t('sensor-selection.spice'),\r\n          url: sensor.spiceFileUrl,\r\n        },\r\n        vendorLink: {\r\n          name: this.intl.t('sensor-selection.product-page'),\r\n          url: sensor.vendorLink,\r\n        },\r\n      });\r\n    }\r\n    return data;\r\n  }\r\n\r\n  @action partSelected(partName: string): void {\r\n    this.selectedPart = partName;\r\n    this.selectEnabled = true;\r\n  }\r\n\r\n  @action applyAndClose(closeDialog: () => void) {\r\n    if (this.selectedPart) {\r\n      this.args.selectSensor(this.selectedPart);\r\n      closeDialog();\r\n    }\r\n  }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<AditoolsDialog @title={{@title}} @close={{@close}}>\\r\\n  <:default>\\r\\n    <div id=\\\"current-calculation-dialog\\\">\\r\\n      <div class=\\\"user-instruction\\\">{{t \\\"current-calculation.instruction\\\"}}</div>\\r\\n      <div class=\\\"current-calculation-container\\\">\\r\\n          <span class=\\\"peak-light-container\\\">\\r\\n            <div class=\\\"{{if this.invalidPeakLightIntensity \\\"invalid\\\"}}\\\">{{t \\\"current-calculation.peak-light-intensity\\\"}}</div>\\r\\n            <div>\\r\\n              <input\\r\\n                id=\\\"peak-light-intensity\\\"\\r\\n                class=\\\"aditools-text-input_input aditools-text-input_input--numeric {{if this.invalidPeakLightIntensity \\\" invalid\\\"}}\\\"\\r\\n                value={{this.peakLightIntensity}}\\r\\n                {{on \\\"blur\\\" this.calculatePeakCurrent}}\\r\\n                {{on \\\"change\\\" this.calculatePeakCurrent}}\\r\\n                data-qa-element=\\\"pd_peak_light_intensity\\\"\\r\\n              />\\r\\n              <span>{{t \\\"units.peak-light-intensity\\\" htmlSafe=true}}</span>\\r\\n            </div>\\r\\n          </span>\\r\\n          <div class=\\\"x1-container\\\">{{t \\\"current-calculation.multiply\\\"}}</div>\\r\\n          <div class=\\\"sensitivity-container\\\">\\r\\n            <div>{{@selectedPart}}</div>\\r\\n            <div>{{t \\\"current-calculation.sensitivity\\\"}}&nbsp;{{engnum @selectedPartData.sensitivity}}{{t \\\"units.sensitivity\\\"}}</div>\\r\\n          </div>\\r\\n          <div class=\\\"x2-container\\\">{{t \\\"current-calculation.multiply\\\"}}</div>\\r\\n          <div class=\\\"active-area-container\\\">\\r\\n            <div>{{@selectedPart}}</div>\\r\\n            <div>{{t \\\"current-calculation.active-area\\\"}}&nbsp;{{engnum @selectedPartData.area}}{{t \\\"units.active-area\\\" htmlSafe=true}}</div>\\r\\n          </div>\\r\\n          <div class=\\\"equals-container\\\">{{t \\\"current-calculation.equals\\\"}}</div>\\r\\n          <span class=\\\"peak-current-container\\\">\\r\\n            <div class=\\\"{{if this.invalidPeakCurrent \\\"invalid\\\"}}\\\">{{t \\\"current-calculation.peak-current\\\"}}</div>\\r\\n            <div>\\r\\n              <input\\r\\n                id=\\\"peak-photodiode-current\\\"\\r\\n                class=\\\"aditools-text-input_input aditools-text-input_input--numeric {{if this.invalidPeakCurrent \\\" invalid\\\"}}\\\"\\r\\n                value={{this.peakCurrent}}\\r\\n                {{on \\\"blur\\\" this.calculatePeakLightIntensity}}\\r\\n                {{on \\\"change\\\" this.calculatePeakLightIntensity}}\\r\\n                data-qa-element=\\\"pd_peak_photodiode_current\\\"\\r\\n              />\\r\\n              <span>{{t \\\"units.A\\\" htmlSafe=true}}</span>\\r\\n            </div>\\r\\n          </span>\\r\\n        </div>\\r\\n        <div class=\\\"error-message\\\">\\r\\n          {{#if this.invalidInput}}\\r\\n            {{t \\\"validation-error.invalid-input-error\\\" value=this.invalidInputValue field=this.invalidInputField}}\\r\\n          {{else}}\\r\\n            {{#if this.invalidPeakLightIntensity}}\\r\\n              {{t \\\"validation-error.peak-light-intensity\\\" min=(engnum this.lightIntensityLimits.min digits=5) max=(engnum this.lightIntensityLimits.max digits=5)}}\\r\\n            {{/if}}\\r\\n            {{#if this.invalidPeakCurrent}}\\r\\n              {{t \\\"validation-error.peak-current\\\" min=(engnum @sensorLimits.min) max=(engnum @sensorLimits.max)}}\\r\\n            {{/if}}\\r\\n          {{/if}}\\r\\n        </div>\\r\\n    </div>\\r\\n  </:default>\\r\\n  <:footer as |closeDialog|>\\r\\n    <div class=\\\"bottom-buttons\\\">\\r\\n      <button type=\\\"button\\\"\\r\\n        class=\\\"aditools-button\\\"\\r\\n        title={{t \\\"current-calculation.cancel\\\"}}\\r\\n        {{on \\\"click\\\" closeDialog}}\\r\\n        data-qa-element=\\\"dialog_close\\\"\\r\\n      >\\r\\n        {{t \\\"current-calculation.cancel\\\"}}\\r\\n      </button>\\r\\n      {{#if this.assignEnabled}}\\r\\n        <button type=\\\"button\\\"\\r\\n          class=\\\"aditools-button button--primary\\\"\\r\\n          title={{t \\\"current-calculation.use-this-peak\\\"}}\\r\\n          {{on \\\"click\\\" (fn this.applyAndClose closeDialog)}}\\r\\n          data-qa-element=\\\"dialog_submit\\\">\\r\\n          {{t \\\"current-calculation.use-this-peak\\\"}}\\r\\n        </button>\\r\\n      {{else}}\\r\\n        <button type=\\\"button\\\"\\r\\n          class=\\\"aditools-button button--disabled\\\"\\r\\n          title={{t \\\"current-calculation.use-this-peak\\\"}}\\r\\n          data-qa-element=\\\"dialog_submit\\\">\\r\\n          {{t \\\"current-calculation.use-this-peak\\\"}}\\r\\n        </button>\\r\\n      {{/if}}\\r\\n    </div>\\r\\n  </:footer>\\r\\n</AditoolsDialog>\",{ moduleName: \"photodiode/components/dialogs/current-calculation.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './current-calculation.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { inject as service } from '@ember/service';\r\nimport { action } from '@ember/object';\r\nimport { tracked } from '@glimmer/tracking';\r\nimport { eng3, userEntryToNumber } from '@ebiz/pretty-num';\r\nimport type IntlService from 'ember-intl/services/intl';\r\n\r\ninterface CurrentCalculationArgs {\r\n  title: string;\r\n  close: () => void;\r\n  selectedPart: string;\r\n  selectedPartData: { sensitivity: string; area: string };\r\n  sensorLimits: { max: number; min: number };\r\n  assignPeakCurrent: (peakCurrent: string) => void;\r\n}\r\n\r\nexport default class CurrentCalculation extends Component<CurrentCalculationArgs> {\r\n  @service declare intl: IntlService;\r\n  @tracked assignEnabled = false;\r\n  @tracked invalidPeakLightIntensity = false;\r\n  @tracked invalidPeakCurrent = false;\r\n  @tracked invalidInput = false;\r\n  @tracked invalidInputValue?: string;\r\n  @tracked invalidInputField?: string;\r\n  @tracked peakCurrent = '';\r\n  @tracked peakLightIntensity = '';\r\n\r\n  currentOfLightIntensity(intensity: number): number {\r\n    return (\r\n      intensity *\r\n      (userEntryToNumber(this.args.selectedPartData.sensitivity, NaN) *\r\n        (userEntryToNumber(this.args.selectedPartData.area, NaN) / 1e6))\r\n    );\r\n  }\r\n\r\n  lightIntensityOfCurrent(current: number): number {\r\n    return (\r\n      current /\r\n      (userEntryToNumber(this.args.selectedPartData.sensitivity, NaN) *\r\n        (userEntryToNumber(this.args.selectedPartData.area, NaN) / 1e6))\r\n    );\r\n  }\r\n\r\n  invalidUserInput(value: string, field: string): void {\r\n    this.invalidInput = true;\r\n    this.invalidInputValue = value;\r\n    this.invalidInputField = field;\r\n  }\r\n\r\n  resetValidity(): void {\r\n    this.assignEnabled = false;\r\n    this.invalidPeakCurrent = false;\r\n    this.invalidPeakLightIntensity = false;\r\n    this.invalidInput = false;\r\n  }\r\n\r\n  enableAssignButton(): void {\r\n    this.assignEnabled = true;\r\n  }\r\n\r\n  get lightIntensityLimits(): { min: number; max: number } {\r\n    let maxValue = this.lightIntensityOfCurrent(this.args.sensorLimits.max);\r\n    let minValue = this.lightIntensityOfCurrent(this.args.sensorLimits.min);\r\n    return { min: minValue, max: maxValue };\r\n  }\r\n\r\n  @action applyAndClose(closeDialog: () => void) {\r\n    this.args.assignPeakCurrent(this.peakCurrent);\r\n    closeDialog();\r\n  }\r\n\r\n  @action calculatePeakLightIntensity(event: InputEvent): void {\r\n    let target = event.target as HTMLInputElement;\r\n    let peakLimits = this.args.sensorLimits;\r\n    let current, intensity;\r\n\r\n    this.peakCurrent = target.value;\r\n\r\n    current = userEntryToNumber(this.peakCurrent, NaN);\r\n    intensity = this.lightIntensityOfCurrent(current);\r\n\r\n    if (this.peakCurrent != '' && peakLimits) {\r\n      if (!isNaN(current)) {\r\n        if (current <= peakLimits.max && current >= peakLimits.min) {\r\n          this.peakLightIntensity = eng3(intensity);\r\n          this.resetValidity();\r\n          this.enableAssignButton();\r\n        } else {\r\n          this.peakLightIntensity = '';\r\n          this.resetValidity();\r\n          this.invalidPeakCurrent = true;\r\n        }\r\n      } else {\r\n        this.peakLightIntensity = '';\r\n        this.resetValidity();\r\n        this.invalidPeakCurrent = true;\r\n        this.invalidUserInput(this.peakCurrent, this.intl.t('current-calculation.peak-current').replace(':', ''));\r\n      }\r\n    } else if (this.invalidPeakCurrent || this.peakCurrent === '') {\r\n      this.peakLightIntensity = '';\r\n      this.resetValidity();\r\n    }\r\n  }\r\n\r\n  @action calculatePeakCurrent(event: InputEvent): void {\r\n    let target = event.target as HTMLInputElement;\r\n    let peakLimits = this.args.sensorLimits;\r\n    let current: number, intensity: number;\r\n\r\n    this.peakLightIntensity = target.value;\r\n\r\n    intensity = userEntryToNumber(this.peakLightIntensity, NaN);\r\n    current = this.currentOfLightIntensity(intensity);\r\n\r\n    if (this.peakLightIntensity != '' && peakLimits) {\r\n      if (!isNaN(current)) {\r\n        if (current <= peakLimits.max && current >= peakLimits.min) {\r\n          this.peakCurrent = eng3(current);\r\n          this.resetValidity();\r\n          this.enableAssignButton();\r\n        } else {\r\n          this.peakCurrent = '';\r\n          this.resetValidity();\r\n          this.invalidPeakLightIntensity = true;\r\n        }\r\n      } else {\r\n        this.peakCurrent = '';\r\n        this.resetValidity();\r\n        this.invalidPeakLightIntensity = true;\r\n        this.invalidUserInput(\r\n          this.peakLightIntensity,\r\n          this.intl.t('current-calculation.peak-light-intensity').replace(':', ''),\r\n        );\r\n      }\r\n    } else if (this.invalidPeakLightIntensity || this.peakLightIntensity === '') {\r\n      this.peakCurrent = '';\r\n      this.resetValidity();\r\n    }\r\n  }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<div class=\\\"settings photodiode-settings\\\">\\r\\n  <AditoolsCard @title={{t \\\"settings.photodiode.photodiode-bias\\\"}}>\\r\\n    <Controls::Input class=\\\"photodiode-reverse-voltage\\\" @inputId=\\\"reverse-voltage\\\" @inputClass=\\\"{{if this.invalidVr \\\" invalid\\\"}}\\\" @units=\\\"V\\\" \\r\\n      @tooltip=\\\"@reverse-voltage\\\" @tooltipText={{t \\\"settings.photodiode.reverse-voltage-tooltip\\\"}} \\r\\n      @value={{engnum this.modelService.state.Vr}} @onValueChanged={{this.updateVr}} @qaName=\\\"reverse_voltage\\\"\\r\\n    >\\r\\n      {{t \\\"settings.photodiode.reverse-voltage\\\" htmlSafe=true}}\\r\\n    </Controls::Input>\\r\\n    <Controls::RadioGroup class=\\\"photodiode-bias-polarity\\\" @tooltip=\\\"@bias-polarity\\\"  @tooltipQaName=\\\"bias_polarity\\\" @tooltipText={{t \\\"settings.photodiode.bias-polarity-tooltip\\\"}}>\\r\\n        <Controls::RadioItem @inputId=\\\"polarity-positive\\\" @group=\\\"polarity\\\" @checked={{if this.isPositive \\\"checked\\\"}} @value=\\\"+\\\" @onClick={{this.updateBias}} @qaName=\\\"bias_preference_positive\\\">{{t \\\"settings.photodiode.reverse-voltage-positive\\\"}}</Controls::RadioItem>\\r\\n        <Controls::RadioItem @inputId=\\\"polarity-negative\\\" @group=\\\"polarity\\\" @checked={{if this.isNegative \\\"checked\\\"}} @value=\\\"-\\\" @onClick={{this.updateBias}} @qaName=\\\"bias_preference_negative\\\">{{t \\\"settings.photodiode.reverse-voltage-negative\\\"}}</Controls::RadioItem>\\r\\n    </Controls::RadioGroup>\\r\\n  </AditoolsCard>\\r\\n  <AditoolsCard @title={{t \\\"settings.photodiode.photodiode-specs\\\"}}>\\r\\n    <Controls::Input class=\\\"photodiode-capacitance\\\" @inputId=\\\"photodiode-capacitance\\\" @inputClass=\\\"{{if this.invalidCd \\\" invalid\\\"}}\\\" @units=\\\"F\\\" \\r\\n      @tooltip=\\\"@photodiode-capacitance\\\" @tooltipText={{t \\\"settings.photodiode.capacitance-tooltip\\\"}} \\r\\n      @value={{engnum this.modelService.state.Cd}} @onValueChanged={{this.updateCd}} @qaName=\\\"capacitance\\\"\\r\\n      @onFocusIn={{this.showCapacitanceWarning}} @onFocusOut={{this.hideCapacitanceWarning}}\\r\\n    >\\r\\n      <div>{{t \\\"settings.photodiode.capacitance-1\\\" htmlSafe=true}}</div>\\r\\n      <div class=\\\"photodiode-capacitance-detail\\\">{{t \\\"settings.photodiode.capacitance-2\\\" vr=(engnum this.modelService.state.Vr) htmlSafe=true}}</div>\\r\\n    </Controls::Input>\\r\\n    {{#if this.capacitanceWarningEnabled}}\\r\\n      <div class=\\\"capacitance-warning\\\">{{t \\\"settings.photodiode.capacitance-warning\\\" htmlSafe=true}}</div>\\r\\n    {{/if}}\\r\\n    <Controls::Input class=\\\"photodiode-shunt-resistance\\\" @inputId=\\\"shunt-resistance\\\" @inputClass=\\\"{{if this.invalidRsh \\\" invalid\\\"}}\\\" @units=\\\"&#x2126;\\\" \\r\\n      @tooltip=\\\"@shunt-resistance\\\" @tooltipText={{t \\\"settings.photodiode.shunt-resistance-tooltip\\\"}}\\r\\n      @value={{engnum this.modelService.state.Rsh}} @onValueChanged={{this.updateRsh}}\\r\\n      @qaName=\\\"shunt_resistance\\\"\\r\\n    >\\r\\n      {{t \\\"settings.photodiode.shunt-resistance\\\" htmlSafe=true}}\\r\\n    </Controls::Input>\\r\\n    <Controls::Input class=\\\"photodiode-peak-current\\\" @inputId=\\\"peak-current\\\" @inputClass=\\\"{{if this.invalidIp \\\" invalid\\\"}}\\\" @units=\\\"A\\\" \\r\\n      @tooltip=\\\"@peak-current\\\" @tooltipText={{t \\\"settings.photodiode.peak-current-tooltip\\\"}}\\r\\n      @value={{engnum this.modelService.state.Ip}} @onValueChanged={{this.updateIp}} \\r\\n      @qaName=\\\"peak_current\\\"\\r\\n    >\\r\\n      {{t \\\"settings.photodiode.peak-current\\\" htmlSafe=true}}\\r\\n    </Controls::Input>\\r\\n    <div class=\\\"photodiode-big-space\\\">{{t \\\"settings.photodiode.or\\\"}}</div>\\r\\n    <button type=\\\"button\\\"\\r\\n      id=\\\"sensor-selection-button\\\"\\r\\n      class=\\\"aditools-button button--block button--primary\\\"\\r\\n      title={{t \\\"settings.photodiode.photodiode-select\\\"}}\\r\\n      {{on \\\"click\\\" this.openSensorDialog}}\\r\\n      data-qa-element=\\\"pd_sensor_selection\\\"\\r\\n    >\\r\\n      {{t \\\"settings.photodiode.photodiode-select\\\"}}\\r\\n    </button>\\r\\n  </AditoolsCard>\\r\\n  {{#if this.sensorDialogState.sensorDialogEnabled}}\\r\\n    <Dialogs::SensorSelection \\r\\n      @selectedPart={{this.selectedPart}}\\r\\n      @sensorData={{this.modelService.sensors}}\\r\\n      @selectSensor={{this.selectSensor}}\\r\\n      @title={{t \\\"sensor-selection.title\\\"}}\\r\\n      @close={{this.closeSensorDialog}}\\r\\n    />\\r\\n  {{/if}}\\r\\n  {{#if this.sensorDialogState.currentCalcDialogEnabled}}\\r\\n    <Dialogs::CurrentCalculation\\r\\n      @selectedPart={{this.selectedPart}}\\r\\n      @selectedPartData={{this.selectedPartData}}\\r\\n      @sensorLimits={{this.modelService.limits.peakCurrent}}\\r\\n      @assignPeakCurrent={{this.assignPeakCurrent}}\\r\\n      @title={{t \\\"current-calculation.title\\\"}}\\r\\n      @close={{this.closeCurrentCalcDialog}}\\r\\n    />\\r\\n  {{/if}}\\r\\n</div>\\r\\n\",{ moduleName: \"photodiode/components/settings/photodiode.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './photodiode.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { action } from '@ember/object';\r\nimport { inject as service } from '@ember/service';\r\nimport { tracked } from '@glimmer/tracking';\r\nimport { numberToUserDisplay, userEntryToNumber } from '@ebiz/pretty-num';\r\nimport ModelService from '../../services/model';\r\nimport SensorService from '../../services/sensor';\r\nimport { SensorData } from 'photodiode/models/sensor';\r\nimport type IntlService from 'ember-intl/services/intl';\r\nimport { BufferedChangeset } from 'ember-changeset/types';\r\n\r\nclass SensorDialogsState {\r\n  @tracked sensorDialogEnabled = false;\r\n  @tracked currentCalcDialogEnabled = false;\r\n  @tracked currentCalcDialogDelivered = false;\r\n  @tracked currentCalculationAccepted = false;\r\n\r\n  enableSensorSelection() {\r\n    this.sensorDialogEnabled = true;\r\n  }\r\n  cancelSensorSelection() {\r\n    this.sensorDialogEnabled = false;\r\n  }\r\n  selectSensor() {\r\n    this.sensorDialogEnabled = false;\r\n    this.currentCalculationAccepted = false;\r\n    this.currentCalcDialogEnabled = true;\r\n  }\r\n  closeCurrentCalculation() {\r\n    this.currentCalcDialogEnabled = false;\r\n    if (!this.currentCalculationAccepted) {\r\n      this.sensorDialogEnabled = true;\r\n    }\r\n  }\r\n  acceptCurrentCalculation() {\r\n    this.currentCalculationAccepted = true;\r\n  }\r\n}\r\ninterface PhotodiodeArgs {\r\n  changeset: BufferedChangeset;\r\n  updateEnabledTabs?: (tab: string, isInvalid: boolean) => void;\r\n  systemDialogFunc?: (status: string, message: string, msgparams?: Record<string, unknown>) => void;\r\n  openNotification?: (title: string, message: string, msgparams?: Record<string, unknown>) => void;\r\n  isCriticalError: boolean;\r\n}\r\n\r\nexport default class Photodiode extends Component<PhotodiodeArgs> {\r\n  @tracked selectedPart?: string;\r\n  @service declare intl: IntlService;\r\n  @service('model') declare modelService: ModelService;\r\n  @service('sensor') declare sensorService: SensorService;\r\n  @tracked capacitanceWarningEnabled = false;\r\n  @tracked sensorDialogState = new SensorDialogsState();\r\n\r\n  get changeset(): BufferedChangeset {\r\n    return this.args.changeset;\r\n  }\r\n\r\n  get isPositive(): boolean {\r\n    return this.changeset.get('Bias') === '+' ? true : false;\r\n  }\r\n\r\n  get isNegative(): boolean {\r\n    return this.changeset.get('Bias') === '-' ? true : false;\r\n  }\r\n\r\n  get invalidVr(): boolean {\r\n    return this.checkValidity('Vr');\r\n  }\r\n\r\n  get invalidCd(): boolean {\r\n    return this.checkValidity('Cd');\r\n  }\r\n\r\n  get invalidRsh(): boolean {\r\n    return this.checkValidity('Rsh');\r\n  }\r\n\r\n  get invalidIp(): boolean {\r\n    return this.checkValidity('Ip');\r\n  }\r\n\r\n  get selectedPartData(): SensorData | undefined {\r\n    return this.modelService.sensors?.find((rowData) => {\r\n      return rowData.partNumber === this.selectedPart;\r\n    });\r\n  }\r\n\r\n  checkValidity(key: string): boolean {\r\n    let result = false;\r\n    this.changeset.get('errors').forEach((item: { key: string }) => {\r\n      if (item.key === key) {\r\n        result = true;\r\n      }\r\n    });\r\n    return result;\r\n  }\r\n\r\n  validateTextField(name: string, value: string): void {\r\n    let candidate = userEntryToNumber(value, NaN);\r\n    if (isNaN(candidate)) {\r\n      this.changeset.addError(name, {\r\n        value: value,\r\n        validation: this.intl.t('validation-error.invalid-input-error', { value: value, field: name }),\r\n      });\r\n    } else {\r\n      this.changeset.set(name, candidate);\r\n    }\r\n  }\r\n\r\n  canonicalize(value: string): string {\r\n    return numberToUserDisplay(userEntryToNumber(value, NaN), 'Engineering', 3);\r\n  }\r\n\r\n  @action updateVr(event: InputEvent): void {\r\n    let target = event.target as HTMLInputElement;\r\n    this.validateTextField('Vr', target.value);\r\n    if (!this.changeset.isInvalid) {\r\n      this.changeset.save();\r\n      target.value = this.canonicalize(target.value);\r\n    }\r\n    if (this.args.updateEnabledTabs)\r\n      this.args.updateEnabledTabs('photodiode', this.changeset.isInvalid || this.args.isCriticalError);\r\n  }\r\n\r\n  @action updateBias(event: InputEvent): void {\r\n    let target = event.target as HTMLInputElement;\r\n    this.changeset.set('Bias', target.value);\r\n    if (!this.changeset.isInvalid) {\r\n      this.changeset.save();\r\n    }\r\n    if (this.args.updateEnabledTabs)\r\n      this.args.updateEnabledTabs('photodiode', this.changeset.isInvalid || this.args.isCriticalError);\r\n  }\r\n\r\n  @action updateCd(event: InputEvent): void {\r\n    let target = event.target as HTMLInputElement;\r\n    this.validateTextField('Cd', target.value);\r\n    if (!this.changeset.isInvalid) {\r\n      this.selectedPart = '';\r\n      this.changeset.set('Photodiode', '');\r\n      this.changeset.save();\r\n      target.value = this.canonicalize(target.value);\r\n    }\r\n    if (this.args.updateEnabledTabs)\r\n      this.args.updateEnabledTabs('photodiode', this.changeset.isInvalid || this.args.isCriticalError);\r\n  }\r\n\r\n  @action updateRsh(event: InputEvent): void {\r\n    let target = event.target as HTMLInputElement;\r\n    this.validateTextField('Rsh', target.value);\r\n    if (!this.changeset.isInvalid) {\r\n      this.selectedPart = '';\r\n      this.changeset.set('Photodiode', '');\r\n      this.changeset.save();\r\n      target.value = this.canonicalize(target.value);\r\n    }\r\n    if (this.args.updateEnabledTabs)\r\n      this.args.updateEnabledTabs('photodiode', this.changeset.isInvalid || this.args.isCriticalError);\r\n  }\r\n\r\n  @action updateIp(event: InputEvent): void {\r\n    let target = event.target as HTMLInputElement;\r\n    this.validateTextField('Ip', target.value);\r\n    if (!this.changeset.isInvalid) {\r\n      this.selectedPart = '';\r\n      this.changeset.set('Photodiode', '');\r\n      this.changeset.save();\r\n      target.value = this.canonicalize(target.value);\r\n    }\r\n    if (this.args.updateEnabledTabs)\r\n      this.args.updateEnabledTabs('photodiode', this.changeset.isInvalid || this.args.isCriticalError);\r\n  }\r\n\r\n  @action assignPeakCurrent(peakCurrent: string): void {\r\n    this.sensorDialogState.acceptCurrentCalculation();\r\n    // Need to keep text and numbers in sync\r\n    let sensorData = this.selectedPartData;\r\n    if (sensorData) {\r\n      // Rollback Properties that weren't saved for Cd, Rsh and Ip\r\n      // Fortunately, these are the only ones that caused an error as valid values are already saved\r\n      this.changeset.rollbackProperty('Cd');\r\n      this.changeset.rollbackProperty('Rsh');\r\n      this.changeset.rollbackProperty('Ip');\r\n      this.changeset.execute();\r\n      // Update State Directly as this data is valid\r\n      this.modelService.state.Cd = userEntryToNumber(sensorData.capacitance as string, NaN);\r\n      this.modelService.state.Rsh = userEntryToNumber(sensorData.resistance as string, NaN);\r\n      this.modelService.state.Ip = userEntryToNumber(peakCurrent, NaN);\r\n      this.modelService.state.Photodiode = this.selectedPart as string;\r\n    }\r\n    if (this.args.updateEnabledTabs)\r\n      this.args.updateEnabledTabs('photodiode', this.changeset.isInvalid || this.args.isCriticalError);\r\n  }\r\n\r\n  @action showCapacitanceWarning(): void {\r\n    this.capacitanceWarningEnabled = true;\r\n  }\r\n\r\n  @action hideCapacitanceWarning(): void {\r\n    this.capacitanceWarningEnabled = false;\r\n  }\r\n\r\n  @action openSensorDialog(): void {\r\n    if (this.sensorService.sensors) {\r\n      if (this.args.systemDialogFunc) this.args.systemDialogFunc('ON', 'application-busy');\r\n      this.sensorService.sensors.then(async (sensors) => {\r\n        if (this.args.systemDialogFunc) this.args.systemDialogFunc('OFF', '');\r\n        if (sensors !== null) {\r\n          this.sensorDialogState.enableSensorSelection();\r\n        } else {\r\n          if (this.args.openNotification)\r\n            this.args.openNotification('dialogs.system.title', 'dialogs.system.error-sensor-data');\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  @action closeSensorDialog(): void {\r\n    this.sensorDialogState.cancelSensorSelection();\r\n  }\r\n\r\n  @action selectSensor(selectedPart: string): void {\r\n    this.selectedPart = selectedPart;\r\n    this.sensorDialogState.selectSensor();\r\n  }\r\n\r\n  @action closeCurrentCalcDialog(): void {\r\n    this.sensorDialogState.closeCurrentCalculation();\r\n  }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<div class=\\\"untabbed-content\\\" {{did-insert this.insertingPhotodiode}} >\\r\\n  {{#let (changeset this.modelService.state this.modelService.validate)  as |changesetObj| }}\\r\\n    <Settings::Photodiode\\r\\n      @changeset={{changesetObj}}\\r\\n      @updateEnabledTabs={{this.updateEnabledTabs}}\\r\\n      @systemDialogFunc={{this.systemDialogFunc}}\\r\\n      @openNotification={{this.openNotification}}\\r\\n      @isCriticalError={{this.isCriticalError}}\\r\\n    />\\r\\n    <div class=\\\"figure\\\">\\r\\n      {{#if changesetObj.isInvalid}}\\r\\n        <ul data-qa-element=\\\"pd_error_message_list\\\" class=\\\"error-message-list\\\">\\r\\n          {{#each changesetObj.errors as |error|}}\\r\\n            <li>{{error.validation}}</li>\\r\\n          {{/each}}\\r\\n        </ul>\\r\\n      {{else}} \\r\\n        <this.figureClass @page=\\\"photodiode\\\" @model={{this.modelService}} @tab=\\'circuit\\' @isPdfFigure={{false}}/>\\r\\n      {{/if}}\\r\\n    </div>\\r\\n  {{/let}}\\r\\n</div>\",{ moduleName: \"photodiode/templates/photodiode.hbs\" })","import require from 'require';\nfunction resolveInitializer(moduleName) {\n  var module = require(moduleName, null, null, true);\n  if (!module) {\n    throw new Error(moduleName + ' must export an initializer.');\n  }\n  var initializer = module['default'];\n  if (!initializer) {\n    throw new Error(moduleName + ' must have a default export');\n  }\n  if (!initializer.name) {\n    initializer.name = moduleName.slice(moduleName.lastIndexOf('/') + 1);\n  }\n  return initializer;\n}\nfunction registerInitializers(app, moduleNames) {\n  for (var i = 0; i < moduleNames.length; i++) {\n    app.initializer(resolveInitializer(moduleNames[i]));\n  }\n}\nfunction registerInstanceInitializers(app, moduleNames) {\n  for (var i = 0; i < moduleNames.length; i++) {\n    app.instanceInitializer(resolveInitializer(moduleNames[i]));\n  }\n}\nfunction _endsWith(str, suffix) {\n  return str.indexOf(suffix, str.length - suffix.length) !== -1;\n}\n\n/**\n * Configure your application as it boots\n */\nexport default function loadInitializers(app, prefix) {\n  var initializerPrefix = prefix + '/initializers/';\n  var instanceInitializerPrefix = prefix + '/instance-initializers/';\n  var initializers = [];\n  var instanceInitializers = [];\n  // this is 2 pass because generally the first pass is the problem\n  // and is reduced, and resolveInitializer has potential to deopt\n  var moduleNames = Object.keys(requirejs._eak_seen);\n  for (var i = 0; i < moduleNames.length; i++) {\n    var moduleName = moduleNames[i];\n    if (moduleName.lastIndexOf(initializerPrefix, 0) === 0) {\n      if (!_endsWith(moduleName, '-test')) {\n        initializers.push(moduleName);\n      }\n    } else if (moduleName.lastIndexOf(instanceInitializerPrefix, 0) === 0) {\n      if (!_endsWith(moduleName, '-test')) {\n        instanceInitializers.push(moduleName);\n      }\n    }\n  }\n  registerInitializers(app, initializers);\n  registerInstanceInitializers(app, instanceInitializers);\n}","import Application from '@ember/application';\r\nimport Resolver from 'ember-resolver';\r\nimport loadInitializers from 'ember-load-initializers';\r\nimport config from 'photodiode/config/environment';\r\n\r\nexport default class App extends Application {\r\n  modulePrefix = config.modulePrefix;\r\n  podModulePrefix = config.podModulePrefix;\r\n  Resolver = Resolver;\r\n}\r\n\r\nloadInitializers(App, config.modulePrefix);\r\n","\nimport { importSync as i, macroCondition, getGlobalConfig } from '@embroider/macros';\nlet w = window;\nlet d = w.define;\n\n\ni(\"./-embroider-implicit-modules.js\");\n\nd(\"photodiode/app\", function(){ return i(\"photodiode/app.js\");});\nd(\"photodiode/config/environment\", function(){ return i(\"photodiode/config/environment.js\");});\nd(\"photodiode/formats\", function(){ return i(\"photodiode/formats.js\");});\nd(\"photodiode/router\", function(){ return i(\"photodiode/router.ts\");});\nd(\"photodiode/services/cdp\", function(){ return i(\"photodiode/services/cdp.ts\");});\nd(\"photodiode/services/help-text\", function(){ return i(\"photodiode/services/help-text.ts\");});\nd(\"photodiode/services/logger\", function(){ return i(\"photodiode/services/logger.ts\");});\nd(\"photodiode/services/model\", function(){ return i(\"photodiode/services/model.ts\");});\nd(\"photodiode/services/opamp\", function(){ return i(\"photodiode/services/opamp.ts\");});\nd(\"photodiode/services/persistence\", function(){ return i(\"photodiode/services/persistence.ts\");});\nd(\"photodiode/services/sensor\", function(){ return i(\"photodiode/services/sensor.ts\");});\nd(\"photodiode/services/snapshot\", function(){ return i(\"photodiode/services/snapshot.ts\");});\nd(\"photodiode/services/svg-cache\", function(){ return i(\"photodiode/services/svg-cache.ts\");});\nd(\"photodiode/services/toolsapi\", function(){ return i(\"photodiode/services/toolsapi.ts\");});\nd(\"photodiode/utils/analytics\", function(){ return i(\"photodiode/utils/analytics.ts\");});\nd(\"photodiode/utils/design-files\", function(){ return i(\"photodiode/utils/design-files.ts\");});\nd(\"photodiode/utils/download\", function(){ return i(\"photodiode/utils/download.ts\");});\nd(\"photodiode/utils/parametric\", function(){ return i(\"photodiode/utils/parametric.ts\");});\nd(\"photodiode/utils/spice-netlist\", function(){ return i(\"photodiode/utils/spice-netlist.ts\");});\nd(\"photodiode/utils/spice-schematics\", function(){ return i(\"photodiode/utils/spice-schematics.ts\");});\nd(\"photodiode/services/aditools-analytics\", function(){ return i(\"photodiode/services/aditools-analytics.js\");});\nd(\"photodiode/services/aditools-site\", function(){ return i(\"photodiode/services/aditools-site.js\");});\nd(\"photodiode/services/page-title\", function(){ return i(\"photodiode/services/page-title.js\");});\nd(\"photodiode/component-managers/glimmer\", function(){ return i(\"photodiode/component-managers/glimmer.js\");});\nd(\"photodiode/initializers/app-version\", function(){ return i(\"photodiode/initializers/app-version.js\");});\nd(\"photodiode/services/intl\", function(){ return i(\"photodiode/services/intl.js\");});\nd(\"photodiode/utils/intl/missing-message\", function(){ return i(\"photodiode/utils/intl/missing-message.js\");});\nd(\"photodiode/container-debug-adapter\", function(){ return i(\"photodiode/container-debug-adapter.js\");});\nd(\"photodiode/templates/application\", function(){ return i(\"photodiode/templates/application.hbs\");});\nd(\"photodiode/controllers/application\", function(){ return i(\"photodiode/controllers/application.ts\");});\nd(\"photodiode/routes/application\", function(){ return i(\"photodiode/routes/application.ts\");});\nd(\"photodiode/templates/photodiode\", function(){ return i(\"photodiode/templates/photodiode.hbs\");});\nd(\"photodiode/controllers/photodiode\", function(){ return i(\"photodiode/controllers/photodiode.ts\");});\nd(\"photodiode/routes/photodiode\", function(){ return i(\"photodiode/routes/photodiode.ts\");});\nd(\"photodiode/routes/index\", function(){ return i(\"photodiode/routes/index.ts\");});\n\n\n\nw._embroiderRouteBundles_ = [\n  {\n    names: [\"circuit\"],\n    load: function() {\n      return import(\"photodiode/assets/_route_/circuit.js\");\n    }\n  },\n  {\n    names: [\"nextsteps\"],\n    load: function() {\n      return import(\"photodiode/assets/_route_/nextsteps.js\");\n    }\n  },\n]\n\n\nif (!runningTests) {\n  i(\"../app\").default.create({\"name\":\"photodiode\",\"version\":\"2.13.0+22df2ca0\"});\n}\n\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<div class=\\\"settings-input\\\" ...attributes>\\r\\n  <label for={{@inputId}} class=\\\"aditools-text-input_main-label\\\">{{yield}}</label>\\r\\n  {{#if this.hasFocusEvent}}\\r\\n    <input\\r\\n    id={{@inputId}}\\r\\n    class=\\\"aditools-text-input_input aditools-text-input_input--numeric {{@inputClass}}\\\"\\r\\n    type=\\\"text\\\"\\r\\n    value={{@value}}\\r\\n    {{on \\\"change\\\" @onValueChanged}}\\r\\n    {{on \\\"focus\\\" @onFocusIn}}\\r\\n    {{on \\\"blur\\\" @onFocusOut}}\\r\\n    data-qa-element=\\\"pd_{{@qaName}}\\\"\\r\\n  >\\r\\n  {{else}}\\r\\n    <input\\r\\n    id={{@inputId}}\\r\\n    class=\\\"aditools-text-input_input aditools-text-input_input--numeric {{@inputClass}}\\\"\\r\\n    type=\\\"text\\\"\\r\\n    value={{@value}}\\r\\n    {{on \\\"change\\\" @onValueChanged}}\\r\\n    data-qa-element=\\\"pd_{{@qaName}}\\\"\\r\\n  >\\r\\n  {{/if}}\\r\\n  <span class=\\\"aditools-text-input_post-label\\\">{{@units}}</span>\\r\\n  {{#if @tooltip}}\\r\\n    <Controls::Tooltip @tooltipText={{@tooltipText}} @qaName={{@qaName}} @item={{helpitem @tooltip}} />\\r\\n  {{else}}\\r\\n    <span/>\\r\\n  {{/if}}\\r\\n</div>\\r\\n\",{ moduleName: \"photodiode/components/controls/input.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './input.hbs'; */\nimport Component from '@glimmer/component';\r\n\r\ninterface InputArgs {\r\n  onFocusIn?: (focusEvent: void) => void;\r\n  onFocusOut?: (blurEvent: void) => void;\r\n}\r\nexport default class Input extends Component<InputArgs> {\r\n  get hasFocusEvent(): boolean {\r\n    return this.args.onFocusIn && this.args.onFocusOut ? true : false;\r\n  }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"  <fieldset class=\\\"settings-radio-group aditools-radio-set\\\" ...attributes>\\r\\n    {{yield}}\\r\\n  {{#if @tooltip}}\\r\\n    <Controls::Tooltip @tooltipText={{@tooltipText}} @qaName={{@tooltipQaName}} @item={{helpitem @tooltip}} />\\r\\n  {{/if}}\\r\\n  </fieldset>\\r\\n\",{ moduleName: \"photodiode/components/controls/radio-group.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './radio-group.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\nexport default templateOnlyComponent();","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<input\\r\\n    id={{@inputId}}\\r\\n    class=\\\"aditools-radio-set_radio radio--primary\\\"\\r\\n    type=\\\"radio\\\"\\r\\n    name={{@group}}\\r\\n    value={{@value}}\\r\\n    checked={{@checked}}\\r\\n    {{on \\\"click\\\" @onClick}}\\r\\n    data-qa-element=\\\"pd_{{@qaName}}_rb\\\"\\r\\n>\\r\\n<label for={{@inputId}} class=\\\"aditools-radio-set_label\\\">{{yield}}</label>\\r\\n\",{ moduleName: \"photodiode/components/controls/radio-item.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './radio-item.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\nexport default templateOnlyComponent();","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<button \\n  type=\\\"button\\\" \\n  class=\\\"aditools-help-tooltip\\\" \\n  data-qa-element=\\\"tooltip_{{this.qaTooltipName}}\\\"\\n  {{on \\\"click\\\" this.showTooltipClick }} \\n  title={{this._tooltip}}\\n  aria-label={{this._tooltip}}\\n  ...attributes>\\n</button>\\n{{#if this.tooltipModalEnabled}}\\n  <AditoolsHelpDialog\\n    @title={{@title}}\\n    @close={{fn this.showTooltipClose @close}}\\n    @message={{@message}}\\n    @dialogClass={{@dialogClass}}\\n    @closeButtonText={{this._closeButtonText}}\\n  >\\n    {{yield}}\\n  </AditoolsHelpDialog>\\n{{/if}}\\n\")","import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { assert } from '@ember/debug';\nimport { isNone } from '@ember/utils';\nimport type IntlService from 'ember-intl/services/intl';\n\nexport interface AditoolsHelpTooltipSignature {\n  Element: HTMLButtonElement;\n  Args: {\n    title: string;\n    message: string;\n    tooltip?: string;\n    qaName?: string;\n    close?: () => void;\n    closeButtonText?: string;\n    dialogClass?: string;\n  };\n  Blocks: {\n    default: [];\n  };\n}\ntype AditoolsHelpTooltipArgs = AditoolsHelpTooltipSignature['Args'];\nexport default class AditoolsHelpTooltip extends Component<AditoolsHelpTooltipSignature> {\n  @service declare intl: IntlService;\n\n  @tracked tooltipModalEnabled = false;\n\n  constructor(owner: unknown, args: AditoolsHelpTooltipArgs) {\n    super(owner, args);\n    assert('`title` is required', !isNone(this.args.title));\n    assert('`message` is required', !isNone(this.args.message));\n  }\n\n  get _closeButtonText() {\n    return this.args.closeButtonText ?? this.intl.t('ember-aditools-page.common.cancel');\n  }\n\n  get _tooltip() {\n    return this.args.tooltip ?? this.intl.t('ember-aditools-page.card.help-tooltip');\n  }\n\n  get qaTooltipName() {\n    return this.args.qaName ?? 'unnamed';\n  }\n\n  @action showTooltipClick() {\n    this.tooltipModalEnabled = true;\n  }\n\n  @action showTooltipClose(close?: () => void) {\n    if (typeof close === 'function') {\n      close();\n    }\n    this.tooltipModalEnabled = false;\n  }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"    <AditoolsHelpTooltip ...attributes @tooltip={{@tooltipText}} @title={{@item.title}} @message={{@item.message}} @qaName={{@qaName}}>\\r\\n      {{#if @item.isFromUrl}}\\r\\n        {{#async-await (helptext @item.url) as |text| }}\\r\\n          <div {{apply-expand-click}}>\\r\\n            {{text}}\\r\\n          </div>\\r\\n        {{else}}\\r\\n          <div class=\\\"help-spinner\\\">\\r\\n             <div class=\\\"help-spinner-image\\\"/>\\r\\n             <div class=\\\"help-spinner-message\\\">{{t \\'main.busy\\'}}</div>\\r\\n          </div>          \\r\\n        {{/async-await}}\\r\\n      {{/if}}\\r\\n    </AditoolsHelpTooltip>\\r\\n\",{ moduleName: \"photodiode/components/controls/tooltip.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './tooltip.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\nexport default templateOnlyComponent();","import { setModifierManager, capabilities } from '@ember/modifier';\nimport { macroCondition, dependencySatisfies, importSync } from '@embroider/macros';\nconst untrack = function () {\n  if (macroCondition(dependencySatisfies('ember-source', '> 3.27.0-beta.1'))) {\n    // ember-source@3.27 shipped \"real modules\" by default, so we can just use\n    // importSync to get @glimmer/validator directly\n    return importSync('@glimmer/validator').untrack;\n  } else if (macroCondition(dependencySatisfies('ember-source', '>= 3.22.0-alpha.1'))) {\n    // we can access `window.Ember` here because it wasn't deprecated until at least 3.27\n    // eslint-disable-next-line no-undef\n    return Ember.__loader.require('@glimmer/validator').untrack;\n  } else {\n    // nothing needed here, we do not call `untrack` in this case\n  }\n}();\n\n/**\n  The `{{did-update}}` element modifier is activated when any of its arguments\n  are updated. It does not run on initial render.\n\n  In this example, the `resize` function receives the `textarea` DOM element as its\n  first argument and is executed anytime the `@text` argument changes.\n\n  ```handlebars\n  <textarea {{did-update this.resize @text}} readonly style=\"padding: 0px;\">\n    {{@text}}\n  </textarea>\n  ```\n\n  ```js\n  export default Component.extend({\n    resize(element) {\n      element.style.height = `${element.scrollHeight}px`;\n    }\n  });\n  ```\n\n  In addition to the `element`, both named and positional arguments are passed to the\n  executed function:\n\n  ```handlebars\n  <div {{did-update this.logArguments @first @second third=@third}} />\n  ```\n\n  ```js\n  export default Component.extend({\n    logArguments(element, [first, second], { third }) {\n      console.log('element', element);\n      console.log('positional args', first, second);\n      console.log('names args', third);\n    }\n  });\n  ```\n\n  By default, the executed function will be unbound. If you would like to access\n  the component context in your function, use the `action` decorator as follows:\n\n  ```handlebars\n  <div {{did-update this.someFunction @someArg} />\n  ```\n\n  ```js\n  export default Component.extend({\n    someFunction: action(function(element, [someArg]) {\n      // the `this` context will be the component instance\n    })\n  });\n  ```\n\n  @method did-update\n  @public\n*/\nexport default setModifierManager(() => ({\n  capabilities: macroCondition(dependencySatisfies('ember-source', '>= 3.22.0-alpha.1')) ? capabilities('3.22', {\n    disableAutoTracking: false\n  }) : capabilities('3.13', {\n    disableAutoTracking: true\n  }),\n  createModifier() {\n    return {\n      element: null\n    };\n  },\n  installModifier(state, element, args) {\n    // save element into state bucket\n    state.element = element;\n    if (macroCondition(dependencySatisfies('ember-source', '>= 3.22.0-alpha.1'))) {\n      // Consume individual properties to entangle tracking.\n      // https://github.com/emberjs/ember.js/issues/19277\n      // https://github.com/ember-modifier/ember-modifier/pull/63#issuecomment-815908201\n      args.positional.forEach(() => {});\n      args.named && Object.values(args.named);\n    }\n  },\n  updateModifier({\n    element\n  }, args) {\n    let [fn, ...positional] = args.positional;\n    if (macroCondition(dependencySatisfies('ember-source', '>= 3.22.0-alpha.1'))) {\n      // Consume individual properties to entangle tracking.\n      // https://github.com/emberjs/ember.js/issues/19277\n      // https://github.com/ember-modifier/ember-modifier/pull/63#issuecomment-815908201\n      args.positional.forEach(() => {});\n      args.named && Object.values(args.named);\n      untrack(() => {\n        fn(element, positional, args.named);\n      });\n    } else {\n      fn(element, positional, args.named);\n    }\n  },\n  destroyModifier() {}\n}), class DidUpdateModifier {});","var _class, _descriptor;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\nimport Helper from '@ember/component/helper';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nlet FormatMessageHelper = (_class = class FormatMessageHelper extends Helper {\n  constructor() {\n    // eslint-disable-next-line prefer-rest-params\n    super(...arguments);\n\n    // @ts-expect-error: Property 'onLocaleChanged' is private and only accessible within class 'IntlService'.\n    _initializerDefineProperty(this, \"intl\", _descriptor, this);\n    _defineProperty(this, \"allowEmpty\", false);\n    this.intl.onLocaleChanged(this.recompute, this);\n  }\n  compute([value, positionalOptions], namedOptions) {\n    const options = positionalOptions ? Object.assign({}, positionalOptions, namedOptions) : namedOptions;\n    if (isEmpty(value)) {\n      if (options?.allowEmpty ?? this.allowEmpty) {\n        return '';\n      }\n      if (typeof value === 'undefined') {\n        throw new Error('{{format-message}} helper requires a value.');\n      }\n    }\n    return this.intl.formatMessage(value, options);\n  }\n}, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"intl\", [service], {\n  configurable: true,\n  enumerable: true,\n  writable: true,\n  initializer: null\n}), _class);\nexport { FormatMessageHelper as default };","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#if this.tooltipType}}\\r\\n    <Controls::Tooltip \\r\\n        @tooltipText={{t this.tooltipText}} \\r\\n        @qaName={{this.tooltipQaName}} \\r\\n        @item={{helpitem this.tooltipType}}\\r\\n    />\\r\\n{{/if}}\\r\\n<div id={{this.schematicId}} class=\\\"schematic\\\" \\r\\n    {{did-insert this.loadSchematic}} \\r\\n    {{did-update this.loadSchematic\\r\\n        @page\\r\\n        @model.state.Bias\\r\\n        @model.state.Vr\\r\\n        @model.state.Ip\\r\\n        @model.state.Rsh\\r\\n        @model.state.Cd\\r\\n        @model.state.Vp\\r\\n        @model.state.TargetSpeed\\r\\n        @model.state.StageCount\\r\\n        @model.state.OpAmp1\\r\\n        @model.state.OpAmp2\\r\\n        @model.state.Peaking\\r\\n        @model.state.Photodiode}}\\r\\n    data-qa-element=\\\"pd_figure_schematic\\\"\\r\\n/>\\r\\n{{#if this.showWhySparesDialog}}\\r\\n    <AditoolsHelpDialog\\r\\n        @title={{t \\\"help.why-the-spares.title\\\" }}\\r\\n        @close={{this.closeWhySparesDialog}}\\r\\n        @closeButtonText={{t \\\"ember-aditools-page.common.cancel\\\" }}\\r\\n    >\\r\\n    {{#async-await this.whySparesText as |text| }}\\r\\n        {{format-message text htmlSafe=true}}\\r\\n    {{/async-await}}\\r\\n    </AditoolsHelpDialog>\\r\\n{{/if}}\\r\\n{{#if this.warnAboutNoiseGainUnstable}}\\r\\n    <div class=\\\"schematic-warning\\\" data-qa-element=\\\"pd_noise_gain_unstable_warning_msg\\\">\\r\\n        {{t \\\"figures.schematic.warning-gain-greater-than-1-stable\\\"\\r\\n            opamp = @model.schematicModel.stage1.opAmp.partNumber\\r\\n            gain = @model.schematicModel.stage1.opAmp.minStableGain\\r\\n            capacitance = (engnum @model.state.Cd supplySpace=true)\\r\\n            feedback =  (engnum @model.schematicModel.stage1.cf supplySpace=true)\\r\\n            noise = (stdnum this.noiseGain)\\r\\n        }}\\r\\n    </div>\\r\\n{{/if}}\\r\\n{{#if this.warnAboutLowCf}}\\r\\n    <div class=\\\"schematic-warning\\\" data-qa-element=\\\"pd_feedback_capacitor_warning_msg\\\">\\r\\n        {{t \\\"figures.schematic.warning-cf-less-than-1pF\\\" feedback=(engnum @model.schematicModel.stage1.cf supplySpace=true )}}\\r\\n    </div>\\r\\n{{/if}}\\r\\n\",{ moduleName: \"photodiode/components/figures/schematic.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './schematic.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { tracked } from '@glimmer/tracking';\r\nimport { action } from '@ember/object';\r\nimport { inject as service } from '@ember/service';\r\nimport { assert } from '@ember/debug';\r\nimport Schematic from '@ebiz/aditools-schematic';\r\nimport { numberToUserDisplay } from '@ebiz/pretty-num';\r\nimport type IntlService from 'ember-intl/services/intl';\r\nimport ModelService from '../../services/model';\r\nimport type { OpAmpSpec } from '../../services/model';\r\nimport SvgCacheService from '../../services/svg-cache';\r\nimport ENV from '../../config/environment';\r\nimport { next } from '@ember/runloop';\r\n\r\nimport * as SpiceSchematicsUtil from '../../utils/spice-schematics';\r\nimport HelpTextService from '../../services/help-text';\r\n\r\ninterface FigureArgs {\r\n  page: string;\r\n  model: ModelService;\r\n  tab: string;\r\n  isPdfFigure: boolean;\r\n}\r\n\r\ntype SVGPreparedCircuit = ReturnType<typeof Schematic.prepare>;\r\ntype SVGString = ReturnType<typeof Schematic.stitchCircuits>;\r\n\r\nexport default class SchematicFigure extends Component<FigureArgs> {\r\n  @service declare intl: IntlService;\r\n  @service('aditools-site') declare siteconfig: { [key: string]: string }; // SiteService;\r\n  @service('svg-cache') declare svgCacheService: SvgCacheService;\r\n  @service('help-text') declare helptext: HelpTextService;\r\n  @tracked hasSpares = false;\r\n\r\n  @tracked showWhySparesDialog = false;\r\n  @tracked whySparesText: Promise<string> | undefined;\r\n\r\n  get schematicId(): string {\r\n    return this.args.isPdfFigure ? `pdfschematic-${this.args.page}` : `schematic-${this.args.page}`;\r\n  }\r\n\r\n  @action async loadSchematic(element: HTMLElement): Promise<void> {\r\n    let id = element.id;\r\n    let schematicName = SpiceSchematicsUtil.getSchematicName(this.args.page, this.args.model);\r\n    console.debug(`${ENV.rootURL}schematics/${schematicName}.svg`);\r\n    let schematic = await this.svgCacheService.getSVG(`${ENV.rootURL}schematics/${schematicName}.svg`);\r\n    if (!schematic) {\r\n      console.log(`Unable to load schematic from \"${ENV.rootURL}schematics/${schematicName}.svg\"`);\r\n    } else {\r\n      schematic = this.addSchematicLabels(schematic);\r\n      if (this.args.page === 'nextsteps') {\r\n        let capacitorsAndSpares = await this.buildCapacitorsAndSpares(this.args.model.opAmp1, this.args.model.opAmp2);\r\n        schematic = Schematic.prepare(\r\n          Schematic.composeCircuits(\r\n            [schematic, Schematic.prepare(capacitorsAndSpares.schematic)],\r\n            [\r\n              { x: 0, y: 0 },\r\n              { x: 30, y: 360 },\r\n            ],\r\n          ),\r\n        );\r\n        next(this, () => {\r\n          let svgElement = document.querySelector('.why-spares');\r\n          let url = `${ENV.rootURL}helptext/${this.intl.locale}/why-the-spares.html`;\r\n          svgElement?.addEventListener('click', () => {\r\n            this.whySparesText = this.helptext.helpText(url);\r\n            this.showWhySparesDialog = true;\r\n          });\r\n        });\r\n      }\r\n      Schematic.insert(id, schematic);\r\n    }\r\n  }\r\n  @action closeWhySparesDialog(): void {\r\n    this.showWhySparesDialog = false;\r\n  }\r\n\r\n  get tooltipType(): string {\r\n    return this.args.page === 'photodiode'\r\n      ? '@equivalent-circuit'\r\n      : this.args.page === 'nextsteps'\r\n        ? '@supply-voltage'\r\n        : '';\r\n  }\r\n  get tooltipText(): string {\r\n    return this.args.page === 'photodiode'\r\n      ? 'figures.schematic.equivalent-circuit-tooltip'\r\n      : this.args.page === 'nextsteps'\r\n        ? 'figures.schematic.supply-voltage-tooltip'\r\n        : '';\r\n  }\r\n  get tooltipQaName(): string {\r\n    return this.args.page === 'photodiode'\r\n      ? 'equivalent_circuit'\r\n      : this.args.page === 'nextsteps'\r\n        ? 'supply_voltage'\r\n        : '';\r\n  }\r\n  get sparesTooltipType(): string {\r\n    return this.args.page === 'nextsteps' && this.hasSpares ? '@why-the-spares' : '';\r\n  }\r\n\r\n  get noiseGain(): number {\r\n    let cf = this.args.model.schematicModel.stage1.cf;\r\n    return (this.args.model.state.Cd + cf) / cf;\r\n  }\r\n  get warnAboutNoiseGainUnstable(): boolean {\r\n    return this.args.page === 'circuit' && this.noiseGain < this.args.model.schematicModel.stage1.opAmp.minStableGain;\r\n  }\r\n\r\n  get warnAboutLowCf(): boolean {\r\n    return (\r\n      this.args.page === 'circuit' &&\r\n      this.args.model.schematicModel.stage1.cf < 1e-12 &&\r\n      !this.warnAboutNoiseGainUnstable\r\n    );\r\n  }\r\n\r\n  addSchematicLabels(schematic: SVGPreparedCircuit): SVGPreparedCircuit {\r\n    let schematicValues: { [item: string]: string } = {};\r\n    let page = this.args.page;\r\n    let state = this.args.model.state;\r\n\r\n    // Add labels and values to photodiode Circuit\r\n    let pdModel =\r\n      state.Photodiode && state.Photodiode !== ''\r\n        ? state.Photodiode\r\n        : this.intl.t('figures.schematic.photodiode-model-custom').toString();\r\n    schematicValues['PhotodiodeStageTitle'] = this.intl.t('figures.schematic.photodiode-stage-title-1').toString();\r\n    schematicValues['PhotodiodeStageTitle2'] = this.intl.t('figures.schematic.photodiode-stage-title-2').toString();\r\n    schematicValues['PhotoTitle'] = this.intl.t('figures.schematic.photodiode-model', { pd: pdModel }).toString();\r\n    schematicValues['Vr'] =\r\n      numberToUserDisplay(state.Vr, 'Engineering', 3, { showZeroes: false }) + this.intl.t('units.V').toString();\r\n    schematicValues['Ip'] =\r\n      numberToUserDisplay(state.Ip, 'Engineering', 3, { showZeroes: false }) + this.intl.t('units.A').toString();\r\n    schematicValues['Rsh'] =\r\n      numberToUserDisplay(state.Rsh, 'Engineering', 3, { showZeroes: false }) + this.intl.t('units.R').toString();\r\n    schematicValues['Cd'] =\r\n      numberToUserDisplay(state.Cd, 'Engineering', 3, { showZeroes: false }) + this.intl.t('units.F').toString();\r\n    schematicValues['Vbias'] =\r\n      (state.Bias === '+' || state.Vr === 0 ? '' : '-') +\r\n      numberToUserDisplay(state.Vr, 'Engineering', 3, { showZeroes: false }) +\r\n      this.intl.t('units.V').toString();\r\n\r\n    // Fields not used in photodiode (tab 1) schematic - may be overridden later\r\n    schematicValues['Cf'] = '';\r\n    schematicValues['Rf'] = '';\r\n    schematicValues['OpAmp1'] = '';\r\n    schematicValues['OpAmp1Ref'] = '';\r\n\r\n    // Stage naming for one stage - may be overridden later\r\n    schematicValues['AmpSingleStageTitle'] = this.intl.t('figures.schematic.amp-single-stage-title-1').toString();\r\n    schematicValues['AmpSingleStageTitle2'] = this.intl.t('figures.schematic.amp-single-stage-title-2').toString();\r\n    schematicValues['AmpSingleStageTitle3'] = this.intl.t('figures.schematic.amp-single-stage-title-3').toString();\r\n\r\n    if (page !== 'photodiode') {\r\n      let schematicModel = this.args.model.schematicModel;\r\n      // Stage 1 details\r\n      let linkElem = '<a href=\"{OpAmp1Url}\" target=\"_blank\" class=\"op-amp-url\">{Label}</a>';\r\n      linkElem = linkElem.replace(\r\n        '{OpAmp1Url}',\r\n        `${this.siteconfig['SiteUrl']}/${\r\n          this.siteconfig['AdiLocale']\r\n        }/${schematicModel.stage1.opAmp.generic.toUpperCase()}.html`,\r\n      );\r\n      let opAmp1RefText = '';\r\n      if (page === 'nextsteps') {\r\n        if (this.args.model.opAmp1.numberChannels > 1) {\r\n          linkElem = '1/' + this.args.model.opAmp1.numberChannels.toString() + ' ' + linkElem;\r\n        }\r\n        opAmp1RefText = '{OpAmp1RefDesignator}';\r\n      }\r\n      let opAmp1PartText = linkElem.replace('{Label}', schematicModel.stage1.opAmp.partNumber);\r\n      schematicValues['Cf'] =\r\n        numberToUserDisplay(schematicModel.stage1.cfext, 'Engineering', 3, { showZeroes: false }) +\r\n        this.intl.t('units.F').toString();\r\n      schematicValues['Rf'] =\r\n        numberToUserDisplay(schematicModel.stage1.rf, 'Engineering', 3, { showZeroes: false }) +\r\n        this.intl.t('units.R').toString();\r\n      schematicValues['OpAmp1'] = opAmp1PartText;\r\n      schematicValues['OpAmp1Ref'] = opAmp1RefText;\r\n\r\n      if (schematicModel.stage2) {\r\n        // Stage naming with two stages\r\n        schematicValues['AmpStage1Title'] = this.intl.t('figures.schematic.amp-stage-one-title-1').toString();\r\n        schematicValues['AmpStage1Title2'] = this.intl.t('figures.schematic.amp-stage-one-title-2').toString();\r\n        schematicValues['AmpStage1Title3'] = this.intl.t('figures.schematic.amp-stage-one-title-3').toString();\r\n        schematicValues['AmpStage2Title'] = this.intl.t('figures.schematic.amp-stage-two-title-1').toString();\r\n        schematicValues['AmpStage2Title2'] = this.intl.t('figures.schematic.amp-stage-two-title-2').toString();\r\n        schematicValues['AmpStage2Title3'] = this.intl.t('figures.schematic.amp-stage-two-title-3').toString();\r\n        // Stage 2 details\r\n        schematicValues['Rfilter'] =\r\n          numberToUserDisplay(schematicModel.stage2.rfilter, 'Engineering', 3, { showZeroes: false }) +\r\n          this.intl.t('units.R').toString();\r\n        schematicValues['Cfilter'] =\r\n          numberToUserDisplay(schematicModel.stage2.cfilter, 'Engineering', 3, { showZeroes: false }) +\r\n          this.intl.t('units.F').toString();\r\n        schematicValues['Rf2'] =\r\n          numberToUserDisplay(schematicModel.stage2.rf, 'Engineering', 3, { showZeroes: false }) +\r\n          this.intl.t('units.R').toString();\r\n        schematicValues['Rg2'] =\r\n          numberToUserDisplay(schematicModel.stage2.rg, 'Engineering', 3, { showZeroes: false }) +\r\n          this.intl.t('units.R').toString();\r\n        let linkElem2 = '<a href=\"{OpAmp2Url}\" target=\"_blank\" class=\"op-amp-url\">{Label}</a>';\r\n        linkElem2 = linkElem2.replace(\r\n          '{OpAmp2Url}',\r\n          `${this.siteconfig['SiteUrl']}/${\r\n            this.siteconfig['AdiLocale']\r\n          }/${schematicModel.stage2.opAmp.generic.toUpperCase()}.html`,\r\n        );\r\n        let opAmp2RefText = '';\r\n        if (page === 'nextsteps') {\r\n          // this.args.model.opAmp2 will always be truthy when schematicModel.stage2 is truthy, but the type system doesn't know that\r\n          if (this.args.model.opAmp2) {\r\n            if (this.args.model.opAmp2.numberChannels > 1) {\r\n              linkElem2 = '1/' + this.args.model.opAmp2.numberChannels.toString() + ' ' + linkElem2;\r\n            }\r\n          }\r\n          opAmp2RefText = '{OpAmp2RefDesignator}';\r\n        }\r\n        let opAmp2PartText = linkElem2.replace('{Label}', schematicModel.stage2.opAmp.partNumber);\r\n        schematicValues['OpAmp2'] = opAmp2PartText;\r\n        schematicValues['OpAmp2Ref'] = opAmp2RefText;\r\n      }\r\n      // Additional data for next steps diagram\r\n      if (page === 'nextsteps') {\r\n        schematicValues['SupplyVoltageTitle'] = this.intl.t('figures.schematic.supply-voltage-title-1').toString();\r\n        schematicValues['SupplyMinTitle'] = this.intl.t('figures.schematic.supply-voltage-title-2', {\r\n          minVoltage: this.args.model.powerSupplyRange.min\r\n            ? numberToUserDisplay(this.args.model.powerSupplyRange.min, 'Engineering', 3, {\r\n                showZeroes: false,\r\n              }).toString()\r\n            : '',\r\n        });\r\n        schematicValues['SupplyMaxTitle'] = this.intl.t('figures.schematic.supply-voltage-title-3', {\r\n          maxVoltage: numberToUserDisplay(this.args.model.powerSupplyRange.max, 'Engineering', 3, {\r\n            showZeroes: false,\r\n          }).toString(),\r\n        });\r\n        schematicValues['PhotoModel'] = this.intl\r\n          .t('figures.schematic.photodiode-model-next-steps', { pd: pdModel })\r\n          .toString();\r\n        // Search OpAmp Designators\r\n        let bom = this.args.model.bom;\r\n        let partsToSearch = [schematicModel.stage1.opAmp.partNumber];\r\n        if (schematicModel.stage2) partsToSearch.push(schematicModel.stage2.opAmp.partNumber);\r\n        for (const [index, part] of partsToSearch.entries()) {\r\n          for (const item of bom) {\r\n            if (part === item.value) {\r\n              let designators = item.designators;\r\n              let ref = designators.length > 1 ? designators[index] : designators[0];\r\n              schematicValues[index === 0 ? 'OpAmp1RefDesignator' : 'OpAmp2RefDesignator'] = ref as string;\r\n              break;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return Schematic.substituteCircuitValues(schematic, schematicValues, true);\r\n  }\r\n\r\n  async buildCapacitorsAndSpares(\r\n    opAmp1: OpAmpSpec,\r\n    opAmp2: OpAmpSpec | undefined,\r\n  ): Promise<{ schematic: SVGString; width: number; height: number }> {\r\n    assert('buildCapacitorsAndSpares should only be called for nextsteps page', this.args.page === 'nextsteps');\r\n    let schematicModel = this.args.model.schematicModel;\r\n    let schematicsList: SVGPreparedCircuit[] = [];\r\n    let schematicPositions = [];\r\n    let svgWidth = 0;\r\n    // Build Capacitors\r\n    let capacitorSchematicList = [\r\n      {\r\n        schematicFile: `${ENV.rootURL}schematics/bpCapNeg.svg`,\r\n        schematicValues: {\r\n          Cref: 'Cbp+',\r\n          C:\r\n            numberToUserDisplay(0.0000001, 'Engineering', 3, { showZeroes: false }) + this.intl.t('units.F').toString(),\r\n        },\r\n        isSecondStageUse: false,\r\n      },\r\n      {\r\n        schematicFile: `${ENV.rootURL}schematics/bpCapPos.svg`,\r\n        schematicValues: {\r\n          Cref: 'Cbp-',\r\n          C:\r\n            numberToUserDisplay(0.0000001, 'Engineering', 3, { showZeroes: false }) + this.intl.t('units.F').toString(),\r\n        },\r\n        isSecondStageUse: false,\r\n      },\r\n      {\r\n        schematicFile: `${ENV.rootURL}schematics/bpCapNeg.svg`,\r\n        schematicValues: {\r\n          Cref: 'Cbp2+',\r\n          C:\r\n            numberToUserDisplay(0.0000001, 'Engineering', 3, { showZeroes: false }) + this.intl.t('units.F').toString(),\r\n        },\r\n        isSecondStageUse: true,\r\n      },\r\n      {\r\n        schematicFile: `${ENV.rootURL}schematics/bpCapPos.svg`,\r\n        schematicValues: {\r\n          Cref: 'Cbp2-',\r\n          C:\r\n            numberToUserDisplay(0.0000001, 'Engineering', 3, { showZeroes: false }) + this.intl.t('units.F').toString(),\r\n        },\r\n        isSecondStageUse: true,\r\n      },\r\n      {\r\n        schematicFile: `${ENV.rootURL}schematics/tantcapNeg.svg`,\r\n        schematicValues: {\r\n          Cref: 'Ctant+',\r\n          C: numberToUserDisplay(0.00001, 'Engineering', 3, { showZeroes: false }) + this.intl.t('units.F').toString(),\r\n        },\r\n        isSecondStageUse: false,\r\n      },\r\n      {\r\n        schematicFile: `${ENV.rootURL}schematics/tantcapPos.svg`,\r\n        schematicValues: {\r\n          Cref: 'Ctant-',\r\n          C: numberToUserDisplay(0.00001, 'Engineering', 3, { showZeroes: false }) + this.intl.t('units.F').toString(),\r\n        },\r\n        isSecondStageUse: false,\r\n      },\r\n    ];\r\n\r\n    // Let us push the container first\r\n    let xCapacitorPos = 0;\r\n    let container = await this.svgCacheService.getSVG(`${ENV.rootURL}schematics/bpcapContainer.svg`);\r\n    if (!container) {\r\n      console.log(`Unable to load schematic from \"${ENV.rootURL}schematics/bpcapContainer.svg\"`);\r\n    } else {\r\n      schematicsList.push(\r\n        Schematic.substituteCircuitValues(\r\n          container,\r\n          { BypassCapacitorText: this.intl.t('figures.schematic.bypass-capacitors').toString() },\r\n          true,\r\n        ),\r\n      );\r\n      schematicPositions.push({ x: 0, y: 0 });\r\n      // Then push the capacitors\r\n      for (const capacitorSchematic of capacitorSchematicList) {\r\n        if (!capacitorSchematic.isSecondStageUse || schematicModel.stage2) {\r\n          let schematic = await this.svgCacheService.getSVG(capacitorSchematic.schematicFile);\r\n          if (!schematic) {\r\n            console.log(`Unable to load schematic from \"${capacitorSchematic.schematicFile}\"`);\r\n          } else {\r\n            schematic = Schematic.substituteCircuitValues(schematic, capacitorSchematic.schematicValues, true);\r\n            schematicsList.push(schematic);\r\n            schematicPositions.push({ x: xCapacitorPos, y: 10 });\r\n            xCapacitorPos += 60;\r\n            svgWidth += 60;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Build Spares\r\n    let sparesSchematicList = [];\r\n    // Stage 1\r\n    if (opAmp1.numberChannels > 1) {\r\n      let linkElem = `1/${opAmp1.numberChannels.toString()} <a href=\"{OpAmpUrl}\" target=\"_blank\" class=\"op-amp-url\">{Label}</a>`;\r\n      linkElem = linkElem.replace(\r\n        '{OpAmpUrl}',\r\n        `${this.siteconfig['SiteUrl']}/${\r\n          this.siteconfig['AdiLocale']\r\n        }/${schematicModel.stage1.opAmp.generic.toUpperCase()}.html`,\r\n      );\r\n      for (let i = 0; i < opAmp1.numberChannels - 1; i++) {\r\n        // Add Spare OpAmp\r\n        sparesSchematicList.push({\r\n          schematicFile: `${ENV.rootURL}schematics/spare.svg`,\r\n          schematicValues: {\r\n            OpAmp: linkElem.replace('{Label}', schematicModel.stage1.opAmp.partNumber),\r\n            OpAmpRef: 'U1',\r\n          },\r\n        });\r\n      }\r\n    }\r\n\r\n    if (schematicModel.stage2) {\r\n      if (schematicModel.stage1.opAmp.partNumber === schematicModel.stage2.opAmp.partNumber) {\r\n        sparesSchematicList.pop();\r\n      } else if (opAmp2 && opAmp2.numberChannels > 1) {\r\n        let linkElem = `1/${opAmp2.numberChannels.toString()} <a href=\"{OpAmpUrl}\" target=\"_blank\" class=\"op-amp-url\">{Label}</a>`;\r\n        linkElem = linkElem.replace(\r\n          '{OpAmpUrl}',\r\n          `${this.siteconfig['SiteUrl']}/${\r\n            this.siteconfig['AdiLocale']\r\n          }/${schematicModel.stage2.opAmp.generic.toUpperCase()}.html`,\r\n        );\r\n        for (let i = 0; i < opAmp2.numberChannels - 1; i++) {\r\n          sparesSchematicList.push({\r\n            schematicFile: `${ENV.rootURL}schematics/spare.svg`,\r\n            schematicValues: {\r\n              OpAmp: linkElem.replace('{Label}', schematicModel.stage2.opAmp.partNumber),\r\n              OpAmpRef: 'U1',\r\n            },\r\n          });\r\n        }\r\n      }\r\n    }\r\n    let xSparePos = xCapacitorPos + 30;\r\n    svgWidth += 30;\r\n    // Let us push the container first (if there are spares)\r\n    container = await this.svgCacheService.getSVG(`${ENV.rootURL}schematics/sparesContainer.svg`);\r\n    if (!container) {\r\n      console.log(`Unable to load schematic from \"${ENV.rootURL}schematics/sparesContainer.svg\"`);\r\n    } else {\r\n      if (sparesSchematicList.length > 0) {\r\n        schematicsList.push(\r\n          Schematic.substituteCircuitValues(\r\n            container,\r\n            {\r\n              SparesText: this.intl.t('figures.schematic.spares').toString(),\r\n              WhySparesText: this.intl.t('figures.schematic.why-the-spares-tooltip').toString(),\r\n            },\r\n            true,\r\n          ),\r\n        );\r\n        schematicPositions.push({ x: xSparePos, y: 0 });\r\n        this.hasSpares = true;\r\n      }\r\n      // Then push the spares\r\n      for (const sparesSchematic of sparesSchematicList) {\r\n        let schematic = await this.svgCacheService.getSVG(sparesSchematic.schematicFile);\r\n        if (!schematic) {\r\n          console.log(`Unable to load schematic from \"${sparesSchematic.schematicFile}\"`);\r\n        } else {\r\n          schematic = Schematic.substituteCircuitValues(schematic, sparesSchematic.schematicValues, true);\r\n          schematicsList.push(schematic);\r\n          schematicPositions.push({ x: xSparePos, y: 10 });\r\n          xSparePos += 100;\r\n          svgWidth += 100;\r\n        }\r\n      }\r\n    }\r\n    return {\r\n      schematic: Schematic.composeCircuits(schematicsList, schematicPositions, svgWidth, 140),\r\n      width: svgWidth + 10,\r\n      height: 120,\r\n    };\r\n  }\r\n}\r\n","\n    export default (function() {\n      var prefix = 'photodiode';\ntry {\n  var metaName = prefix + '/config/environment';\n  var rawConfig = document.querySelector('meta[name=\"' + metaName + '\"]').getAttribute('content');\n  var config = JSON.parse(decodeURIComponent(rawConfig));\n\n  var exports = { 'default': config };\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n  return exports;\n}\ncatch(err) {\n  throw new Error('Could not read config from meta tag with name \"' + metaName + '\".');\n}\n\n    })().default;\n  ","import Controller from '@ember/controller';\r\nimport { action } from '@ember/object';\r\nimport { tracked } from '@glimmer/tracking';\r\nimport { inject as service } from '@ember/service';\r\nimport type AnalyticsService from '@ebiz/ember-aditools-analytics/services/aditools-analytics';\r\nimport type ModelService from '../services/model';\r\nimport type PersistenceService from '../services/persistence';\r\nimport type RouterService from '@ember/routing/router-service';\r\nimport type ToolsService from '../services/toolsapi';\r\nimport type LoggingService from '../services/logger';\r\nimport {\r\n  sendTabNavigationAnalytics,\r\n  toolbarLinkClickAnalytics,\r\n  loadDesignUnsupportedPartAnalytics,\r\n} from '../utils/analytics';\r\nimport type IntlService from 'ember-intl/services/intl';\r\nimport type OpampService from '../services/opamp';\r\nimport type { SafeString } from '@ember/template/-private/handlebars';\r\n\r\nlet delay = function (t: number, v?: void | PromiseLike<void>): Promise<void> {\r\n  return new Promise(function (resolve) {\r\n    setTimeout(resolve.bind(null, v), t);\r\n  });\r\n};\r\n\r\ninterface FeedbackHash {\r\n  email: string;\r\n  name: string;\r\n  feedback: string;\r\n}\r\n\r\ninterface SystemDialogHash {\r\n  enabled: boolean;\r\n  message: string;\r\n}\r\ninterface NotificationDialogHash {\r\n  enabled: boolean;\r\n  title: string | SafeString;\r\n  message: string;\r\n}\r\nconst tabNames: Record<string, string> = {\r\n  photodiode: 'Photodiode',\r\n  circuit: 'Circuit Design',\r\n  nextsteps: 'Next Steps',\r\n};\r\n\r\nconst TABS = ['photodiode', 'circuit', 'nextsteps'];\r\nexport default class ApplicationController extends Controller {\r\n  @service declare router: RouterService;\r\n  @service declare model: ModelService;\r\n  @service declare persistence: PersistenceService;\r\n  @service declare toolsapi: ToolsService;\r\n  @service('aditools-site') declare siteconfig: { [key: string]: string };\r\n  @service('aditools-analytics') declare analytics: AnalyticsService;\r\n  @service declare intl: IntlService;\r\n  @service declare logger: LoggingService;\r\n  @service('opamp') declare opampService: OpampService;\r\n\r\n  @tracked lang: string | null = null;\r\n  @tracked pdf: string | null = null;\r\n\r\n  @tracked enabledTabs = ['photodiode', 'circuit'];\r\n  @tracked visitedTabs = ['photodiode'];\r\n  @tracked tab = 'photodiode';\r\n  @tracked systemDialog: SystemDialogHash = { enabled: false, message: '' };\r\n  @tracked notificationDialog: NotificationDialogHash = { enabled: false, title: '', message: '' };\r\n\r\n  @tracked safeToSave: (() => boolean)[] = [];\r\n\r\n  @action addSaveValidator(item: () => boolean): void {\r\n    this.safeToSave = this.safeToSave.concat([item]);\r\n  }\r\n\r\n  get isSafeToSave(): boolean {\r\n    return this.safeToSave.every((fn) => {\r\n      return fn();\r\n    });\r\n  }\r\n\r\n  @action isTabDisabled(tabName: string) {\r\n    return !this.enabledTabs.includes(tabName);\r\n  }\r\n\r\n  @action selectTab(how: string, tab: string): void {\r\n    let oldTab = this.tab;\r\n    this.tab = tab;\r\n    if (tab === 'circuit') {\r\n      console.time('Selecting Circuit Tab to End of Circuit Tab Validation');\r\n      if (this.opampService.opAmps) {\r\n        this.systemDialogFunc('ON', 'loading-opamp-data');\r\n        this.opampService.opAmps.then(async (opamps) => {\r\n          this.systemDialogFunc('OFF', '');\r\n          if (opamps !== null) {\r\n            this.router.transitionTo(this.tab);\r\n            sendTabNavigationAnalytics(tabNames[oldTab] as string, tabNames[this.tab] as string, how, this.analytics);\r\n          } else {\r\n            this.tab = oldTab;\r\n            this.openNotification('dialogs.system.title', 'dialogs.system.error-opamp-data');\r\n          }\r\n        });\r\n      }\r\n    } else {\r\n      this.router.transitionTo(this.tab);\r\n      sendTabNavigationAnalytics(tabNames[oldTab] as string, tabNames[this.tab] as string, how, this.analytics);\r\n    }\r\n  }\r\n\r\n  @action loadDesign(jsonData: string): Promise<void> {\r\n    return Promise.resolve()\r\n      .then(() => {\r\n        this.systemDialogFunc('ON', 'application-busy');\r\n        return delay(10).then(() => {\r\n          return;\r\n        });\r\n      })\r\n      .then(() => {\r\n        return this.persistence.loadDesign(jsonData);\r\n      })\r\n      .then((result) => {\r\n        this.systemDialogFunc('OFF', '');\r\n        if (result.status !== 0) {\r\n          switch (result.status) {\r\n            case -1:\r\n              this.openNotification('dialogs.load.title', 'dialogs.load.invalid-file');\r\n              break;\r\n            case -2:\r\n              loadDesignUnsupportedPartAnalytics(result.message ? result.message : '', this.analytics);\r\n              this.openNotification('dialogs.load.title', 'dialogs.load.invalid-parts', {\r\n                numParts: result.message?.split(','),\r\n                parts: result.message,\r\n              });\r\n              break;\r\n            case -3:\r\n              this.openNotification('dialogs.load.title', 'dialogs.load.no-opamps');\r\n              break;\r\n          }\r\n          this.logger.log('Error:' + result.message);\r\n        } else {\r\n          this.tab = 'photodiode';\r\n          this.router.transitionTo(this.tab);\r\n          this.enabledTabs = ['photodiode', 'circuit'];\r\n          if (result.updatedChangeSet) {\r\n            // Update the model.state with the load design data\r\n            result.updatedChangeSet.save();\r\n          }\r\n        }\r\n      })\r\n      .catch((error) => {\r\n        this.systemDialogFunc('OFF', '');\r\n        this.openNotification('dialogs.load.title', 'dialogs.load.invalid-file');\r\n        this.logger.log(`Error: ${error}`);\r\n      });\r\n  }\r\n\r\n  @action saveDesign(fileName: string, fileDescription: string): void {\r\n    this.persistence.saveDesign(fileName, fileDescription);\r\n    this.logger.log('Save submitted. \\nDesign Name: ' + fileName + '\\nDesign Description: ' + fileDescription);\r\n  }\r\n\r\n  @action sendFeedback(model: FeedbackHash): Promise<void> {\r\n    return Promise.resolve()\r\n      .then(() => {\r\n        this.systemDialogFunc('ON', 'application-busy');\r\n        return delay(10).then(() => {\r\n          return;\r\n        });\r\n      })\r\n      .then(() => {\r\n        return this.toolsapi.deliverFeedback('feedback', model.name, model.email, model.feedback);\r\n      })\r\n      .then((result) => {\r\n        this.systemDialogFunc('OFF', '');\r\n        if (result.status === 0) {\r\n          this.openNotification('dialogs.feedback.title', 'dialogs.feedback.feedback-dialog-ok-message');\r\n        } else {\r\n          this.openNotification('dialogs.feedback.title', 'dialogs.feedback.feedback-dialog-ng-message');\r\n        }\r\n      })\r\n      .catch((error) => {\r\n        this.systemDialogFunc('OFF', '');\r\n        this.openNotification('dialogs.feedback.title', 'dialogs.feedback.feedback-dialog-ng-message');\r\n        this.logger.log(`Error: ${error}`);\r\n      });\r\n  }\r\n\r\n  @action systemDialogFunc(status: string, message: string, msgparams?: Record<string, unknown>): void {\r\n    switch (status) {\r\n      case 'ON':\r\n        this.systemDialog = { enabled: true, message: this.intl.t(`dialogs.system.${message}`, msgparams) };\r\n        break;\r\n      case 'OFF':\r\n        this.systemDialog = { enabled: false, message: '' };\r\n        break;\r\n      case 'NONE':\r\n        break;\r\n      default:\r\n        break;\r\n    }\r\n  }\r\n\r\n  @action openNotification(title: string, message: string, msgparams?: Record<string, unknown>): void {\r\n    let adjparams = msgparams;\r\n    if (adjparams) {\r\n      adjparams['htmlSafe'] = 'true';\r\n    } else {\r\n      adjparams = { htmlSafe: 'true' };\r\n    }\r\n    this.notificationDialog = {\r\n      enabled: true,\r\n      title: this.intl.t(title, { htmlSafe: true }),\r\n      message: this.intl.t(message, adjparams),\r\n    };\r\n  }\r\n\r\n  @action closeNotification(): void {\r\n    this.notificationDialog = {\r\n      enabled: false,\r\n      title: '',\r\n      message: '',\r\n    };\r\n  }\r\n\r\n  @action toolbarMenuClick(menuLink: string): void {\r\n    toolbarLinkClickAnalytics(menuLink, tabNames[this.tab] as string, this.analytics);\r\n  }\r\n\r\n  @action updateEnabledTabs(tab: string, isInvalid: boolean): void {\r\n    let tablist: string[] = TABS.slice();\r\n    let spliceIndex = tablist.indexOf(tab) + 1;\r\n    if (spliceIndex < tablist.length) {\r\n      tablist.splice(isInvalid ? spliceIndex : spliceIndex + 1);\r\n    }\r\n    for (const [index, tabItem] of tablist.entries()) {\r\n      if (!this.visitedTabs.includes(tabItem) && this.visitedTabs.includes(tablist[index - 1] as string)) {\r\n        this.visitedTabs.push(tabItem);\r\n        break;\r\n      }\r\n    }\r\n    this.enabledTabs = tablist;\r\n  }\r\n}\r\n\r\ndeclare module '@ember/controller' {\r\n  interface Registry {\r\n    application: ApplicationController;\r\n  }\r\n}\r\n","import Controller, { inject as controller } from '@ember/controller';\r\nimport { inject as service } from '@ember/service';\r\nimport { action } from '@ember/object';\r\nimport { tracked } from '@glimmer/tracking';\r\nimport { Changeset } from 'ember-changeset';\r\nimport { BufferedChangeset, ValidatorAction } from 'ember-changeset/types';\r\nimport type ApplicationController from './application';\r\nimport type ModelService from '../services/model';\r\nimport SensorService from '../services/sensor';\r\nimport SchematicFigure from '../components/figures/schematic';\r\n\r\nexport default class PhotodiodeController extends Controller {\r\n  @service('model') declare modelService: ModelService;\r\n  @service('sensor') declare sensorService: SensorService;\r\n  @controller('application') declare applicationController: ApplicationController;\r\n  @tracked figureTab = 'schematic';\r\n  @tracked changesetObj: BufferedChangeset = Changeset({}); // Very temporary value - see init()\r\n  @tracked isCriticalError = false;\r\n  updateEnabledTabs?: (tab: string, isError: boolean) => void;\r\n  figures: Record<string, unknown> = {\r\n    schematic: SchematicFigure,\r\n  };\r\n\r\n  systemDialogFunc?: (status: string, message: string, msgparams?: Record<string, unknown>) => void;\r\n  openNotification?: (title: string, message: string, msgparams?: Record<string, unknown>) => void;\r\n\r\n  // eslint-disable-next-line ember/classic-decorator-hooks\r\n  init(): void {\r\n    super.init();\r\n    this.changesetObj = Changeset(this.modelService.state, this.modelService.validate as ValidatorAction);\r\n    this.applicationController.addSaveValidator(this.validateSafeToSave);\r\n  }\r\n\r\n  @action insertingPhotodiode(): void {\r\n    if (!this.modelService.limits) {\r\n      if (this.sensorService.sensors) {\r\n        if (this.systemDialogFunc) this.systemDialogFunc('ON', 'application-busy');\r\n        this.sensorService.sensors.then(async (sensors) => {\r\n          if (this.systemDialogFunc) this.systemDialogFunc('OFF', '');\r\n          if (sensors === null) {\r\n            this.isCriticalError = true;\r\n            if (this.openNotification)\r\n              this.openNotification('dialogs.system.title', 'dialogs.system.error-config-data');\r\n            if (this.updateEnabledTabs) this.updateEnabledTabs('photodiode', this.isCriticalError);\r\n          }\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  @action validateSafeToSave(): boolean {\r\n    return !this.changesetObj.isInvalid;\r\n  }\r\n\r\n  get figureClass(): unknown {\r\n    return this.figures[this.figureTab];\r\n  }\r\n\r\n  setupDialogFunctions(parentController: ApplicationController): void {\r\n    this.systemDialogFunc = parentController.systemDialogFunc;\r\n    this.openNotification = parentController.openNotification;\r\n  }\r\n}\r\n","export default {\r\n  time: {\r\n    hhmmss: {\r\n      hour: 'numeric',\r\n      minute: 'numeric',\r\n      second: 'numeric',\r\n    },\r\n  },\r\n  date: {\r\n    hhmmss: {\r\n      hour: 'numeric',\r\n      minute: 'numeric',\r\n      second: 'numeric',\r\n    },\r\n  },\r\n  number: {\r\n    compact: { notation: 'compact' },\r\n    EUR: {\r\n      style: 'currency',\r\n      currency: 'EUR',\r\n      minimumFractionDigits: 2,\r\n      maximumFractionDigits: 2,\r\n    },\r\n    USD: {\r\n      style: 'currency',\r\n      currency: 'USD',\r\n      minimumFractionDigits: 2,\r\n      maximumFractionDigits: 2,\r\n    },\r\n  },\r\n};\r\n","import { helper } from '@ember/component/helper';\r\nimport { numberToUserDisplay } from '@ebiz/pretty-num';\r\n\r\nexport default helper(function engnum(\r\n  [num],\r\n  { digits = 3, showZeroes = false, supplySpace = false }: UserDisplayOptions,\r\n) {\r\n  return numberToUserDisplay(num as number, 'Engineering', digits, {\r\n    showZeroes: showZeroes,\r\n    supplySpace: supplySpace,\r\n  });\r\n});\r\n","import Helper from '@ember/component/helper';\r\nimport { inject as service } from '@ember/service';\r\nimport ENV from '../config/environment';\r\nimport type IntlService from 'ember-intl/services/intl';\r\nimport type LoggingService from '../services/logger';\r\n\r\nclass HelpItem {\r\n  @service declare intl: IntlService;\r\n  topic = '';\r\n\r\n  constructor(topic: string, intl: IntlService) {\r\n    this.topic = topic;\r\n    this.intl = intl;\r\n  }\r\n  get isFromUrl() {\r\n    return this.topic[0] === '@';\r\n  }\r\n  get title() {\r\n    let key = this.topic;\r\n    if (this.topic[0] === '@') {\r\n      key = this.topic.slice(1);\r\n    }\r\n    let result = this.intl.t(`help.${key}.title`, { htmlSafe: true });\r\n    return result ? result : '';\r\n  }\r\n  get url() {\r\n    if (this.topic[0] === '@') {\r\n      return `${ENV.rootURL}helptext/${this.intl.locale}/${this.topic.slice(1)}.html`;\r\n    } else {\r\n      return '';\r\n    }\r\n  }\r\n  get message() {\r\n    let key = this.topic;\r\n    if (this.topic[0] === '@') {\r\n      return '';\r\n    } else {\r\n      let result = this.intl.t(`help.${key}.message`, { htmlSafe: true });\r\n      return result ? result : '';\r\n    }\r\n  }\r\n}\r\n\r\nexport default class HelpitemHelper extends Helper {\r\n  @service declare intl: IntlService;\r\n  @service declare logger: LoggingService;\r\n  compute(params: string[]): HelpItem {\r\n    let topic = '';\r\n    if (params[0]) {\r\n      topic = params[0];\r\n    } else {\r\n      this.logger.warn(`Help topic is undefined...`);\r\n    }\r\n    return new HelpItem(topic, this.intl);\r\n  }\r\n}\r\n","import Helper from '@ember/component/helper';\r\nimport { inject as service } from '@ember/service';\r\nimport type IntlService from 'ember-intl/services/intl';\r\nimport type HelpTextService from '../services/help-text';\r\nimport type { SafeString } from '@ember/template/-private/handlebars';\r\n\r\nexport default class HelptextHelper extends Helper {\r\n  @service('help-text') declare helptext: HelpTextService;\r\n  @service declare intl: IntlService;\r\n  @service('aditools-site') declare siteconfig: { [key: string]: string }; //SiteService;\r\n\r\n  async compute(params: string[], hash: Record<string, unknown>): Promise<string | SafeString> {\r\n    let text = await this.helptext.helpText(params[0] as string);\r\n    let keyParms: Record<string, unknown> = { htmlSafe: true };\r\n    if (text.indexOf('{siteurl}') > -1) {\r\n      keyParms['siteurl'] = this.siteconfig['SiteUrl'] + '/' + this.siteconfig['AdiLocale'];\r\n    }\r\n    //await new Promise((res) => setTimeout(res, 2000));  // For testing visual presentation of simulated load delay locally\r\n    return this.intl.formatMessage(this.helptext.toICUMessage(text), Object.assign(keyParms, hash));\r\n  }\r\n}\r\n","import { helper } from '@ember/component/helper';\r\nimport { numberToUserDisplay } from '@ebiz/pretty-num';\r\n\r\nexport default helper(function stdnum(\r\n  [num],\r\n  { digits = 3, showZeroes = false, supplySpace = false, fixedDigits = false }: UserDisplayOptions,\r\n) {\r\n  return numberToUserDisplay(num as number, 'Standard', digits, {\r\n    showZeroes: showZeroes,\r\n    supplySpace: supplySpace,\r\n    fixedDigits: fixedDigits,\r\n  });\r\n});\r\n","import { modifier } from 'ember-modifier';\r\n\r\nexport default modifier(\r\n  (element: Element) => {\r\n    function handleClickEvent(event: Event) {\r\n      if (\r\n        event.target &&\r\n        event.target instanceof Element &&\r\n        event.target.parentElement &&\r\n        event.target.parentElement.nextElementSibling\r\n      ) {\r\n        let element = event.target.parentElement.nextElementSibling;\r\n        if (element && element.classList.contains('toggle')) {\r\n          if (element.classList.contains('hide')) {\r\n            element.classList.remove('hide');\r\n          } else {\r\n            element.classList.add('hide');\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    let toggles = element.querySelectorAll('.helptext-section_header button');\r\n    for (const toggle of toggles) {\r\n      toggle.addEventListener('click', handleClickEvent);\r\n    }\r\n\r\n    return () => {\r\n      let toggles = element.querySelectorAll('.helptext-section_header button');\r\n      for (const toggle of toggles) {\r\n        toggle.removeEventListener('click', handleClickEvent);\r\n      }\r\n    };\r\n  },\r\n  { eager: false },\r\n);\r\n","import EmberRouter from '@embroider/router';\r\n//import EmberRouter from '@ember/routing/router';\r\nimport config from 'photodiode/config/environment';\r\n\r\nexport default class Router extends EmberRouter {\r\n  location = config.locationType;\r\n  rootURL = config.rootURL;\r\n}\r\n\r\nRouter.map(function () {\r\n  this.route('photodiode');\r\n  this.route('circuit');\r\n  this.route('nextsteps');\r\n});\r\n","import Route from '@ember/routing/route';\r\nimport { inject as service } from '@ember/service';\r\nimport type RouterService from '@ember/routing/router-service';\r\nimport { isTesting } from '@embroider/macros';\r\nimport type SiteService from '@ebiz/ember-aditools-site/services/aditools-site';\r\nimport type AnalyticsService from '@ebiz/ember-aditools-analytics/services/aditools-analytics';\r\nimport type IntlService from 'ember-intl/services/intl';\r\n\r\nimport type LoggingService from '../services/logger';\r\nimport type CdpService from '../services/cdp';\r\nimport type OpampService from '../services/opamp';\r\nimport type SensorService from '../services/sensor';\r\nimport type ModelService from '../services/model';\r\nimport { loadTimeAnalytics } from '../utils/analytics';\r\nimport ApplicationController from '../controllers/application';\r\nimport ENV from '../config/environment';\r\nimport '@ebiz/ember-aditools-graph/ember-aditools-graph.css';\r\n\r\ntype Transition = ReturnType<RouterService['transitionTo']>;\r\n\r\nconst LOCALES: { [name: string]: string } = { 'en-us': 'en', 'zh-cn': 'cn', 'ja-jp': 'jp', 'ru-ru': 'ru' };\r\n\r\n// let lookForAttributeChanges = function(element?: HTMLElement) {\r\n//         // Had to find out what was rewriting the lang attribute to 'en-us', so I wrote the following snippet of code.\r\n//         // It turns out it's updateDocumentLanguage() in ember-intl, when you set the locale.\r\n//         if (element) {\r\n//             let observer = new MutationObserver(function(mutations) {\r\n//                 mutations.forEach(function(mutation) {\r\n//                   if (mutation.type == \"attributes\") {\r\n//                     console.log(\"attributes changed\")\r\n//                   }\r\n//                 });\r\n//             });\r\n//             observer.observe(element, {\r\n//                 attributes: true //configure it to listen to attribute changes\r\n//             });\r\n//         }\r\n// }\r\nexport default class ApplicationRoute extends Route {\r\n  @service declare intl: IntlService;\r\n  @service declare logger: LoggingService;\r\n  @service('aditools-site') declare siteconfig: SiteService;\r\n  @service('aditools-analytics') declare analytics: AnalyticsService;\r\n  @service('model') declare modelService: ModelService;\r\n  @service declare cdp: CdpService;\r\n  @service declare opamp: OpampService;\r\n  @service declare sensor: SensorService;\r\n  toolsConfig?: Promise<PhotodiodeConfigJson | null>;\r\n\r\n  lang: string | null = null;\r\n  pdf: string | null = null;\r\n\r\n  async beforeModel(): Promise<void> {\r\n    this.lang = new URLSearchParams(window.location.search).get('lang');\r\n    this.pdf = new URLSearchParams(window.location.search).get('pdf');\r\n    let htmlElement = document?.querySelector('html');\r\n    //lookForAttributeChanges(htmlElement);\r\n    let fullLanguage = htmlElement?.getAttribute('lang');\r\n    if (!fullLanguage) fullLanguage = 'en-us';\r\n    const defaultLanguage = this.lang ? this.lang : (LOCALES[fullLanguage] as string);\r\n    const configURL = ENV.rootURL.endsWith('/') ? ENV.rootURL + 'siteconfig.json' : ENV.rootURL + '/siteconfig.json';\r\n    await this.siteconfig.start(\r\n      configURL,\r\n      ENV.rootURL,\r\n      defaultLanguage,\r\n      this.intl.locales.concat('ru-ru'),\r\n      this.logger,\r\n    );\r\n    if (this.siteconfig.FullLocale === 'ru-ru') {\r\n      this.intl.setLocale('en-us');\r\n    } else {\r\n      this.intl.setLocale(this.siteconfig.FullLocale);\r\n    }\r\n    this.analytics.start(\r\n      ENV.toolname,\r\n      this.siteconfig['AnalyticsUrl'] as string,\r\n      false,\r\n      isTesting(),\r\n      ENV.environment === 'development',\r\n      this.logger,\r\n    );\r\n    this.toolsConfig = this.setupToolsConfig();\r\n    this.opamp.load(this.toolsConfig);\r\n    this.sensor.load(this.toolsConfig);\r\n  }\r\n\r\n  afterModel(): void {\r\n    if (document.documentElement) {\r\n      document.documentElement.setAttribute('lang', this.siteconfig.FullLocale);\r\n    }\r\n  }\r\n\r\n  setupController(controller: ApplicationController, model: ModelService, transition: Transition): void {\r\n    super.setupController(controller, model, transition);\r\n    controller.lang = this.lang;\r\n    controller.pdf = this.pdf;\r\n    loadTimeAnalytics(window.appStartDateTime, new Date().getTime(), this.analytics); // Analytics Placed here for Load Complete. (Unless there is a better place)\r\n  }\r\n\r\n  setupToolsConfig(): Promise<PhotodiodeConfigJson | null> {\r\n    return this.cdp.getToolsConfig<PhotodiodeConfigJson>('pd').then((config) => {\r\n      return config;\r\n    });\r\n  }\r\n}\r\n\r\ndeclare module '@ember/service' {\r\n  interface Registry {\r\n    'aditools-site': SiteService;\r\n    'aditools-analytics': AnalyticsService;\r\n  }\r\n}\r\n","import Route from '@ember/routing/route';\r\nimport type RoutingService from '@ember/routing/router-service';\r\nimport { inject as service } from '@ember/service';\r\n\r\nexport default class IndexRoute extends Route {\r\n  @service declare router: RoutingService;\r\n  beforeModel(): void {\r\n    // Ensure the presence of the terminal slash in the URL\r\n    let url = window.location.href;\r\n    let queryIndex = url.indexOf('?');\r\n    if (queryIndex === -1) {\r\n      queryIndex = url.length;\r\n    }\r\n    if (url[queryIndex - 1] !== '/') {\r\n      let newUrl = url.substring(0, queryIndex) + '/' + url.substring(queryIndex);\r\n      window.history.replaceState({}, '', newUrl);\r\n    }\r\n    this.router.transitionTo('photodiode'); // Implicitly aborts the on-going transition.\r\n  }\r\n}\r\n","import Route from '@ember/routing/route';\r\nimport { inject as service } from '@ember/service';\r\nimport type SensorService from '../services/sensor';\r\nimport type ModelService from '../services/model';\r\nimport type RouterService from '@ember/routing/router-service';\r\nimport PhotodiodeController from '../controllers/photodiode';\r\nimport ApplicationController from '../controllers/application';\r\n\r\ntype Transition = ReturnType<RouterService['transitionTo']>;\r\n\r\nexport default class PhotodiodeRoute extends Route {\r\n  @service('model') declare modelService: ModelService;\r\n  @service('sensor') declare sensorService: SensorService;\r\n\r\n  beforeModel(/* transition */): Promise<void> {\r\n    if (this.sensorService.sensors) {\r\n      return this.sensorService.sensors.then((sensors) => {\r\n        if (sensors !== null) {\r\n          this.modelService.sensors = sensors;\r\n          this.modelService.limits = this.sensorService.limits;\r\n          this.modelService.shoppingCartUrl = this.sensorService.shoppingCartUrl;\r\n        }\r\n        return Promise.resolve();\r\n      });\r\n    }\r\n    return Promise.resolve();\r\n  }\r\n\r\n  setupController(controller: PhotodiodeController, model: ModelService, transition: Transition): void {\r\n    super.setupController(controller, model, transition);\r\n    /* eslint-disable ember/no-controller-access-in-routes */\r\n    let appController = <ApplicationController>this.controllerFor('application');\r\n    controller.updateEnabledTabs = appController.updateEnabledTabs;\r\n    controller.setupDialogFunctions(appController);\r\n    /* eslint-disable ember/no-controller-access-in-routes */\r\n  }\r\n}\r\n","const str = () => ('00000000000000000' + (Math.random() * 0xffffffffffffffff).toString(16)).slice(-16);\nconst uuid = () => {\n    const a = str();\n    const b = str();\n    return a.slice(0, 8) + '-' + a.slice(8, 12) + '-4' + a.slice(13) + '-a' + b.slice(1, 4) + '-' + b.slice(4);\n};\nexport default uuid;\n","import Service from '@ember/service';\r\nimport { inject as service } from '@ember/service';\r\nimport { waitForPromise } from '@ember/test-waiters';\r\n//import type SiteService from '@ebiz/ember-aditools-site/services/aditools-site';\r\nimport type LoggerService from './logger';\r\nimport { loadCDPAnalytics } from '../utils/analytics';\r\nimport type AnalyticsService from '@ebiz/ember-aditools-analytics/services/aditools-analytics';\r\nimport uuid from 'v4-uuid';\r\n\r\nconst FETCH_POLL_INTERVAL_MS = 1000;\r\n\r\nexport default class CdpService extends Service {\r\n  @service('aditools-site') declare siteconfig: { [key: string]: string }; //SiteService;\r\n  @service declare logger: LoggerService;\r\n  @service('aditools-analytics') declare analytics: AnalyticsService;\r\n  abortController: AbortController = new AbortController();\r\n  cdpSessionId?: string;\r\n\r\n  constructor(owner: object | undefined) {\r\n    super(owner);\r\n    this.cdpSessionId = uuid();\r\n  }\r\n\r\n  willDestroy(): void {\r\n    this.abortController.abort();\r\n  }\r\n\r\n  _getFetchPromise<T>(description: string, url: string): Promise<T | null> {\r\n    let reqId = uuid();\r\n    let startTime = new Date();\r\n    loadCDPAnalytics(\r\n      'Start',\r\n      { sId: this.cdpSessionId, reqId: reqId, name: description, url: url, timeStart: startTime },\r\n      this.analytics,\r\n    );\r\n    let pollHandler = setInterval(() => {\r\n      let endTime = new Date();\r\n      loadCDPAnalytics(\r\n        'In Process',\r\n        {\r\n          sId: this.cdpSessionId,\r\n          reqId: reqId,\r\n          name: description,\r\n          timeStart: startTime,\r\n          timeEnd: endTime,\r\n        },\r\n        this.analytics,\r\n      );\r\n    }, FETCH_POLL_INTERVAL_MS);\r\n    return waitForPromise(\r\n      fetch(url, { signal: this.abortController.signal })\r\n        .then((response) => {\r\n          let endTime = new Date();\r\n          if (response.status !== 200) {\r\n            throw { code: response.status, message: response.statusText };\r\n          }\r\n          clearInterval(pollHandler);\r\n          loadCDPAnalytics(\r\n            'End',\r\n            {\r\n              sId: this.cdpSessionId,\r\n              reqId: reqId,\r\n              name: description,\r\n              timeStart: startTime,\r\n              timeEnd: endTime,\r\n              status: { code: response.status, message: response.statusText },\r\n            },\r\n            this.analytics,\r\n          );\r\n          return response.json() as Promise<T>;\r\n        })\r\n        .catch((error) => {\r\n          clearInterval(pollHandler);\r\n          let endTime = new Date();\r\n          let status = { code: error.code ? error.code : -1, message: error.message ? error.message : 'Other' };\r\n          loadCDPAnalytics(\r\n            'End',\r\n            {\r\n              sId: this.cdpSessionId,\r\n              reqId: reqId,\r\n              name: description,\r\n              timeStart: startTime,\r\n              timeEnd: endTime,\r\n              status: status,\r\n            },\r\n            this.analytics,\r\n          );\r\n          this.logger.error(\r\n            `Load of ${description} at ${url} failed: HTTP Request Failed ${status.code} ${status.message}`,\r\n          );\r\n          return null;\r\n        }),\r\n      description,\r\n    );\r\n  }\r\n\r\n  _applyJsonOverrides(item: string, defaultpath: string, forceunique: boolean, override?: string): string {\r\n    const suffix = override && override.startsWith('/testdata') ? 'json' : 'js';\r\n    let url = override ? `${override}/${item}.${suffix}` : `${defaultpath}/${item}.js`;\r\n    return forceunique ? url + '?id=' + new Date().getTime().toString() : url;\r\n  }\r\n\r\n  _logCDPUrl(cdpUrl: string | undefined): void {\r\n    if (!cdpUrl) {\r\n      this.logger.error(`CDP URL is undefined and should be configured...`);\r\n    }\r\n  }\r\n\r\n  getDeviceModelData<T>(item: string): Promise<T | null> {\r\n    this._logCDPUrl(this.siteconfig['CdpUrl']);\r\n    return this._getFetchPromise<T>(\r\n      'Model data',\r\n      this._applyJsonOverrides(\r\n        item,\r\n        `${this.siteconfig['CdpUrl']}/genericsmodelinfo`,\r\n        false,\r\n        this.siteconfig['ModelUrl'],\r\n      ),\r\n    );\r\n  }\r\n\r\n  getCmsData<T>(item: string): Promise<T | null> {\r\n    this._logCDPUrl(this.siteconfig['CdpUrl']);\r\n    return this._getFetchPromise<T>(\r\n      'CMS data',\r\n      this._applyJsonOverrides(\r\n        item,\r\n        `${this.siteconfig['CdpUrl']}/cms/${this.siteconfig['CdpLocale']}`,\r\n        false,\r\n        this.siteconfig['CmsUrl'],\r\n      ),\r\n    );\r\n  }\r\n\r\n  getPstIndex<T>(item: string): Promise<T | null> {\r\n    this._logCDPUrl(this.siteconfig['CdpUrl']);\r\n    let nonRuLocale = this.siteconfig['CdpLocale'] === 'ru' ? 'en' : this.siteconfig['CdpLocale'];\r\n    return this._getFetchPromise<T>(\r\n      'PST index',\r\n      this._applyJsonOverrides(\r\n        item,\r\n        `${this.siteconfig['CdpUrl']}/pst/view/${nonRuLocale}`,\r\n        true,\r\n        this.siteconfig['PstIndexUrl'],\r\n      ),\r\n    );\r\n  }\r\n\r\n  getPstData<T>(item: string): Promise<T | null> {\r\n    this._logCDPUrl(this.siteconfig['CdpUrl']);\r\n    let nonRuLocale = this.siteconfig['CdpLocale'] === 'ru' ? 'en' : this.siteconfig['CdpLocale'];\r\n    return this._getFetchPromise<T>(\r\n      'PST data',\r\n      this._applyJsonOverrides(\r\n        item,\r\n        `${this.siteconfig['CdpUrl']}/pst/data/${nonRuLocale}`,\r\n        true,\r\n        this.siteconfig['PstDataUrl'],\r\n      ),\r\n    );\r\n  }\r\n\r\n  getPstMapping<T>(): Promise<T | null> {\r\n    this._logCDPUrl(this.siteconfig['CdpUrl']);\r\n    return this._getFetchPromise<T>(\r\n      'PST mappings',\r\n      this._applyJsonOverrides(\r\n        'parametermapping',\r\n        `${this.siteconfig['CdpUrl']}/pst`,\r\n        true,\r\n        this.siteconfig['PstMappingUrl'],\r\n      ),\r\n    );\r\n  }\r\n\r\n  getToolsConfig<T>(item: string): Promise<T | null> {\r\n    this._logCDPUrl(this.siteconfig['CdpUrl']);\r\n    return this._getFetchPromise<T>(\r\n      'tools config',\r\n      this._applyJsonOverrides(item, `${this.siteconfig['CdpUrl']}/toolsconfig`, true, this.siteconfig['ConfigUrl']),\r\n    );\r\n  }\r\n}\r\n\r\ndeclare module '@ember/service' {\r\n  interface Registry {\r\n    cdp: CdpService;\r\n  }\r\n}\r\n","import Service from '@ember/service';\r\nimport { waitForPromise } from '@ember/test-waiters';\r\n\r\nexport default class HelpTextService extends Service {\r\n  bodycache: { [url: string]: string } = {};\r\n  titlecache: { [url: string]: string } = {};\r\n  async helpText(url: string): Promise<string> {\r\n    if (Object.prototype.hasOwnProperty.call(this.bodycache, 'url')) {\r\n      return this.bodycache[url] as string;\r\n    }\r\n    let result;\r\n    try {\r\n      let response = await waitForPromise(fetch(url));\r\n      result = await response.text();\r\n    } catch (error: unknown) {\r\n      let namedError = error as { message: string };\r\n      throw new Error(`Help Text for ${url} failed fetch: ` + namedError.message);\r\n    }\r\n    let titlestart = result.indexOf('<title>');\r\n    let titleend = result.indexOf('</title>');\r\n    if (titlestart !== -1 && titleend !== -1) {\r\n      let title = result.substring(titlestart + 7, titleend);\r\n      this.titlecache[url] = title;\r\n    }\r\n\r\n    let bodystart = result.indexOf('<body');\r\n    let bodyend = result.indexOf('</body>');\r\n    if (bodystart !== -1 && bodyend !== -1) {\r\n      let bodyendstart = result.substring(bodystart).indexOf('>');\r\n      let body = result.substring(bodystart + bodyendstart + 1, bodyend);\r\n      this.bodycache[url] = body;\r\n      return body;\r\n    } else throw new Error(`Help Text for ${url} has no HTML body`);\r\n  }\r\n\r\n  async hasTitle(url: string): Promise<boolean> {\r\n    await this.helpText(url);\r\n    return Object.prototype.hasOwnProperty.call(this.titlecache, 'url');\r\n  }\r\n\r\n  async helpTitle(url: string): Promise<string> {\r\n    await this.helpText(url);\r\n    if (Object.prototype.hasOwnProperty.call(this.titlecache, 'url')) {\r\n      return this.titlecache[url] as string;\r\n    } else throw new Error(`Help Text for ${url} has no HTML title`);\r\n  }\r\n\r\n  toICUMessage(text: string): string {\r\n    //TODO: Escape all < and > in text\r\n    return text;\r\n  }\r\n}\r\n\r\ndeclare module '@ember/service' {\r\n  interface Registry {\r\n    'help-text': HelpTextService;\r\n  }\r\n}\r\n","import Service from '@ember/service';\r\n\r\nexport interface Logger {\r\n  log(...args: unknown[]): void;\r\n  info(...args: unknown[]): void;\r\n  warn(...args: unknown[]): void;\r\n  error(...args: unknown[]): void;\r\n  time(label?: string): void;\r\n  timeEnd(label?: string): void;\r\n}\r\n// Logging Service: Centralizes logging for the application so we can filter it or direct it as we please.\r\n\r\n/* eslint-disable no-console */\r\n// It's what this service *does* :)\r\nexport default class LoggingService extends Service implements Logger {\r\n  log(...args: unknown[]): void {\r\n    console.log(...args);\r\n  }\r\n  info(...args: unknown[]): void {\r\n    console.info(...args);\r\n  }\r\n  warn(...args: unknown[]): void {\r\n    console.warn(...args);\r\n  }\r\n  error(...args: unknown[]): void {\r\n    console.error(...args);\r\n  }\r\n  time(label?: string): void {\r\n    console.time(label);\r\n  }\r\n  timeEnd(label?: string): void {\r\n    console.timeEnd(label);\r\n  }\r\n}\r\n\r\ndeclare module '@ember/service' {\r\n  interface Registry {\r\n    logger: LoggingService;\r\n  }\r\n}\r\n","import Service, { inject as service } from '@ember/service';\r\nimport { action } from '@ember/object';\r\nimport { assert } from '@ember/debug';\r\nimport { tracked, cached } from '@glimmer/tracking';\r\nimport { GraphModel, MultilineGraphModel, GraphLine } from '@ebiz/ember-aditools-graph';\r\nimport type IntlService from 'ember-intl/services/intl';\r\nimport { eng3 } from '@ebiz/pretty-num';\r\nimport { isNone } from '@ember/utils';\r\nimport OpampService from './opamp';\r\nimport SensorService from './sensor';\r\nimport { SensorData } from '../models/sensor';\r\nimport * as PhotodiodeModel from 'photodiode-model/lib/src/model';\r\nimport * as ModelUtils from 'photodiode-model/lib/src/utils';\r\nimport * as GraphCalculations from 'photodiode-model/lib/src/graphs';\r\nimport ModelError from 'photodiode-model/lib/src/models/model-error';\r\nimport type {\r\n  PdStage,\r\n  BiasPreference,\r\n  UserInput,\r\n  StageOne,\r\n  StageTwo,\r\n  PhotodiodeSchematic,\r\n  OpAmpSpec as ModelOpAmpSpec,\r\n  OpAmpSelectionItem,\r\n  OpAmpStatusItem as ModelOpAmpStatusItem,\r\n} from 'photodiode-model/lib/src/model';\r\nimport type { CircuitGraphDataResult } from 'photodiode-model/lib/src/graphs';\r\nimport { getIdealOpAmp1 } from 'photodiode-model/lib/src/recommendations';\r\nimport { PSTData, PSTIndex, PSTParameterMapping } from '@ebiz/ember-aditools-device-table/utils/device-table-pst';\r\nimport {\r\n  DeviceColumn,\r\n  DeviceData,\r\n  PackedFilterValue,\r\n  SortColumnRef,\r\n} from '@ebiz/ember-aditools-device-table/components/aditools-device-table';\r\n\r\nexport type OpAmpStatusItem = ModelOpAmpStatusItem;\r\nexport type OpAmpSpec = ModelOpAmpSpec;\r\n\r\nexport class StateModel {\r\n  constructor(copyState?: StateModel) {\r\n    if (copyState) {\r\n      this.Vr = copyState.Vr;\r\n      this.Bias = copyState.Bias;\r\n      this.Cd = copyState.Cd;\r\n      this.Rsh = copyState.Rsh;\r\n      this.Ip = copyState.Ip;\r\n      this.Photodiode = copyState.Photodiode;\r\n      this.StageCount = copyState.StageCount;\r\n      this.OpAmp1 = copyState.OpAmp1;\r\n      this.OpAmp2 = copyState.OpAmp2;\r\n      this.Vp = copyState.Vp;\r\n      this.TargetSpeed = copyState.TargetSpeed;\r\n      this.SpeedPreference = copyState.SpeedPreference;\r\n      this.Peaking = copyState.Peaking;\r\n      this.FrequencyResponseUnit = copyState.FrequencyResponseUnit;\r\n      this.NoiseGainUnit = copyState.NoiseGainUnit;\r\n      this.RequireRecommended = copyState.RequireRecommended;\r\n      this.FirstVisit = copyState.RequireRecommended;\r\n    } else {\r\n      this.Vr = 0;\r\n      this.Bias = '-';\r\n      this.Cd = 1e-10;\r\n      this.Rsh = 1000000000;\r\n      this.Ip = 0.00005;\r\n      this.Photodiode = '';\r\n      this.StageCount = 1;\r\n      this.OpAmp1 = null;\r\n      this.OpAmp2 = null;\r\n      this.Vp = 2;\r\n      this.TargetSpeed = 4e-6;\r\n      this.SpeedPreference = 'PulseWidth';\r\n      this.Peaking = 0.707107;\r\n      this.FrequencyResponseUnit = 'dB';\r\n      this.NoiseGainUnit = 'dB';\r\n      this.RequireRecommended = true;\r\n      this.FirstVisit = true;\r\n    }\r\n  }\r\n\r\n  @tracked Vr: number; // Volts\r\n  @tracked Bias: '+' | '-'; // + or -\r\n  @tracked Cd: number; // Farads\r\n  @tracked Rsh: number; //Ohms\r\n  @tracked Ip: number; // Amperes\r\n  @tracked Photodiode: string; //part number or \"\"\r\n  @tracked StageCount: PdStage;\r\n  @tracked OpAmp1: string | null;\r\n  @tracked OpAmp2: string | null;\r\n  @tracked Vp: number; // Volts\r\n  @tracked TargetSpeed: number; // seconds or Hertz\r\n  @tracked SpeedPreference: string; // \"PulseWidth\" or \"Bandwidth\"\r\n  @tracked Peaking: number; // seconds\r\n  @tracked FrequencyResponseUnit: string; // \"dB\" | \"V/A\";\r\n  @tracked NoiseGainUnit: string; // \"dB\" | \"V/V\";\r\n  @tracked RequireRecommended: boolean;\r\n  @tracked FirstVisit: boolean;\r\n}\r\n\r\ntype SchematicModel = {\r\n  photodiodeModel: PhotodiodeSchematic;\r\n  stage1: StageOne;\r\n  stage2: StageTwo | null;\r\n};\r\n\r\ntype PulseResponseModel = {\r\n  riseTime: number;\r\n  overshoot: number;\r\n  graph: GraphModel;\r\n};\r\ntype FrequencyResponseModel = {\r\n  fN: number;\r\n  Q: number;\r\n  graph: GraphModel;\r\n};\r\ntype SpectralNoiseModel = {\r\n  graph: MultilineGraphModel;\r\n};\r\ntype NoiseGainModel = {\r\n  graph: MultilineGraphModel;\r\n};\r\ntype SNRModel = {\r\n  peakSignalCurrent: number;\r\n  peakSignalVoltage: number;\r\n  snr: number;\r\n  enob: number;\r\n  minimumSignalCurrent: number;\r\n  outputOffsetVoltage: number;\r\n  stage1Noise: {\r\n    opampVoltage: number;\r\n    opampCurrent: number;\r\n    rf: number;\r\n    rin: number;\r\n    total: number;\r\n  };\r\n  stage2Noise: {\r\n    opampVoltage: number;\r\n    opampCurrent: number;\r\n    rf: number;\r\n    rg: number;\r\n    rFilter: number;\r\n    total: number;\r\n  };\r\n  totalNoise: number;\r\n};\r\n\r\ntype BOMHash = {\r\n  count: number;\r\n  designators: string[];\r\n  value: string;\r\n  package: string;\r\n  material: string;\r\n  tolerance: string;\r\n  prodURL?: string;\r\n};\r\ntype BOMModel = BOMHash[];\r\n\r\ntype limits = {\r\n  xmax: number;\r\n  xmin: number;\r\n  ymax: number;\r\n  ymin: number;\r\n};\r\n\r\ntype PowerSupplyRange = {\r\n  min?: number;\r\n  max: number;\r\n};\r\n\r\nclass SelectionTableFilterOptions {\r\n  constructor() {\r\n    this.columns = undefined;\r\n    this.filters = undefined;\r\n    this.sortColumns = undefined;\r\n  }\r\n  columns: DeviceColumn<DeviceData>[] | undefined;\r\n  filters: PackedFilterValue[] | undefined;\r\n  sortColumns: SortColumnRef[] | undefined;\r\n}\r\n\r\nexport class OpAmpSelectionDisplayItem {\r\n  constructor() {\r\n    this.selectable = false;\r\n    this.disallowed = true;\r\n    this.partNumber = '';\r\n    this.comment = [];\r\n    this.feedbackMethod = '';\r\n    this.status = '';\r\n    this.statusText = '';\r\n    this.deviceStatus = '';\r\n    this.ltSpice = '';\r\n  }\r\n\r\n  selectable: boolean;\r\n  disallowed: boolean;\r\n  comment: OpAmpStatusItem[];\r\n  partNumber: string;\r\n  feedbackMethod: string;\r\n  status: string;\r\n  statusText: string;\r\n  deviceStatus: string;\r\n  ltSpice: string;\r\n}\r\n\r\nlet isSupportedOpAmp = function (opamps: OpAmpSpec[], partNumber: string): boolean {\r\n  return opamps.some((item) => {\r\n    return item.partNumber === partNumber;\r\n  });\r\n};\r\n\r\nexport default class ModelService extends Service {\r\n  @service declare intl: IntlService;\r\n  @service('aditools-site') declare siteconfig: { [key: string]: string };\r\n  @service('opamp') declare opampService: OpampService;\r\n  @service('sensor') declare sensorService: SensorService;\r\n  state: StateModel = new StateModel();\r\n  opamps?: OpAmpSpec[] | null;\r\n  sensors?: SensorData[];\r\n  pstData?: PSTData | null;\r\n  pstView?: PSTIndex | null;\r\n  pstMapping?: PSTParameterMapping | null;\r\n  shoppingCartUrl?: string;\r\n  limits?: Limits;\r\n  selectionFilterOptions: SelectionTableFilterOptions = new SelectionTableFilterOptions();\r\n\r\n  tryCircuitDesignResults(state: StateModel): CircuitGraphDataResult | ModelError {\r\n    let result = PhotodiodeModel.getResult(\r\n      this.opampdbDTO,\r\n      state.Vr,\r\n      state.Bias == '-' ? 'negative' : 'positive',\r\n      state.Cd,\r\n      state.Rsh,\r\n      state.Ip,\r\n      '',\r\n      state.Vp,\r\n      state.SpeedPreference === 'PulseWidth' ? 2 / state.TargetSpeed : state.TargetSpeed,\r\n      state.Peaking,\r\n      state.StageCount,\r\n      state.OpAmp1,\r\n      state.OpAmp2,\r\n      state.RequireRecommended,\r\n    );\r\n\r\n    if (\r\n      this.state.FirstVisit &&\r\n      result instanceof ModelError &&\r\n      result.ErrorCode === 'no_op_amps_available_for_single_stage_too_slow'\r\n    ) {\r\n      result = this.adjustSpeed(result);\r\n    }\r\n    return result;\r\n  }\r\n\r\n  private adjustSpeed(result: CircuitGraphDataResult | ModelError): CircuitGraphDataResult | ModelError {\r\n    let speedAltered =\r\n      this.state.SpeedPreference === 'PulseWidth' ? 2 / this.state.TargetSpeed : this.state.TargetSpeed;\r\n    while (\r\n      speedAltered < 200e6 &&\r\n      result instanceof ModelError &&\r\n      result.ErrorCode === 'no_op_amps_available_for_single_stage_too_slow'\r\n    ) {\r\n      speedAltered *= 10;\r\n      this.state.TargetSpeed = this.state.SpeedPreference === 'PulseWidth' ? 2 / speedAltered : speedAltered;\r\n      result = this.tryCircuitDesignResults(this.state);\r\n    }\r\n    return result;\r\n  }\r\n\r\n  @cached\r\n  private get circuitDesignResults(): CircuitGraphDataResult | ModelError {\r\n    return this.tryCircuitDesignResults(this.state);\r\n  }\r\n\r\n  // The following properties below are called assuming the model has no validation errors\r\n  //   - opAmp1\r\n  //   - opAmp2\r\n  //   - schematicModel\r\n  //   - bom\r\n  //   - pulseResponse\r\n  //   - frequencyResponseVA\r\n  //   - frequencyResponseDb\r\n  //   - spectralNoise\r\n  //   - noiseGainVV\r\n  //   - noiseGainDb\r\n  //   - snr\r\n  // While there is no flag that determines if there are parse errors or model errors,\r\n  // the validate and validateModel functions can be used to determine those.\r\n  // It is the responsibility of the controllers to make sure that these properties are not called\r\n  // in case an error occurs.\r\n\r\n  get opAmp1(): OpAmpSpec {\r\n    let opAmpSpec: OpAmpSpec | ModelError;\r\n    if (!(this.circuitDesignResults instanceof ModelError)) {\r\n      opAmpSpec = (this.circuitDesignResults as CircuitGraphDataResult).stagesObject.stage1.opAmp;\r\n    } else {\r\n      opAmpSpec = getIdealOpAmp1(\r\n        this.opampdbDTO,\r\n        this.state.Vr,\r\n        this.state.Bias == '-' ? 'negative' : 'positive',\r\n        this.state.Cd,\r\n        this.state.Rsh,\r\n        this.state.Ip,\r\n        this.state.Photodiode,\r\n        this.state.Vp,\r\n        this.state.SpeedPreference === 'PulseWidth' ? 2 / this.state.TargetSpeed : this.state.TargetSpeed,\r\n        this.state.Peaking,\r\n        this.state.StageCount,\r\n      );\r\n\r\n      // Added an assert here. This block doesn't get called unless we have a fixed opamp error\r\n      // but in the event an error occurs, the assert will trigger\r\n      assert('Ideal Op Amp function returns a Model Error', !(opAmpSpec instanceof ModelError));\r\n    }\r\n    return opAmpSpec as OpAmpSpec;\r\n  }\r\n\r\n  get opAmp2(): OpAmpSpec | undefined {\r\n    return (this.circuitDesignResults as CircuitGraphDataResult).stagesObject.stage2?.opAmp;\r\n  }\r\n\r\n  get opAmpList(): string[] {\r\n    let opAmps = [];\r\n    try {\r\n      opAmps.push(this.state.OpAmp1 ? this.state.OpAmp1 : '');\r\n      if (this.opAmp2) {\r\n        opAmps.push(this.state.OpAmp2 ? this.state.OpAmp2 : '');\r\n      }\r\n    } catch (error: unknown) {\r\n      opAmps = [];\r\n    }\r\n    return opAmps;\r\n  }\r\n\r\n  @cached\r\n  get schematicModel(): SchematicModel {\r\n    let photodiodeModel = PhotodiodeModel.getSchematicFromInput(\r\n      this.state.Vr,\r\n      this.state.Bias,\r\n      this.state.Cd,\r\n      this.state.Rsh,\r\n      this.state.Ip,\r\n      this.state.Photodiode,\r\n    );\r\n    let stagesObject = (this.circuitDesignResults as CircuitGraphDataResult).stagesObject;\r\n    return {\r\n      photodiodeModel: photodiodeModel,\r\n      stage1: stagesObject.stage1,\r\n      stage2: stagesObject.stage2,\r\n    };\r\n  }\r\n\r\n  get bom(): BOMModel {\r\n    let circuitDesignResults = this.circuitDesignResults as CircuitGraphDataResult;\r\n    let bomArr = PhotodiodeModel.billOfMaterials(\r\n      circuitDesignResults.stagesObject,\r\n      this.state.StageCount,\r\n      this.state.Photodiode,\r\n    );\r\n    for (const data of bomArr) {\r\n      if (data.material === 'tantalum') {\r\n        data.material = this.intl.t('figures.bom.materials.tantalum').toString();\r\n      }\r\n      data.prodURL = data.prodURL\r\n        ? this.siteconfig['SiteUrl'] + '/' + this.siteconfig['AdiLocale'] + '/' + data.prodURL\r\n        : undefined;\r\n    }\r\n    return bomArr;\r\n  }\r\n\r\n  get pulseResponse(): PulseResponseModel {\r\n    let circuitDesignResults = this.circuitDesignResults as CircuitGraphDataResult;\r\n    let graphData = ModelUtils.joinArrays(circuitDesignResults.timeAxis, circuitDesignResults.stepResponse);\r\n    let limits = this.addMargins(ModelUtils.getRangeLimits(graphData));\r\n    return {\r\n      riseTime: circuitDesignResults.riseTime,\r\n      overshoot: circuitDesignResults.overshoot,\r\n      graph: {\r\n        limits: limits,\r\n        data: graphData,\r\n      },\r\n    };\r\n  }\r\n\r\n  get frequencyResponseVA(): FrequencyResponseModel {\r\n    let circuitDesignResults = this.circuitDesignResults as CircuitGraphDataResult;\r\n    let stages = circuitDesignResults.stagesObject;\r\n    let fnAndQ = GraphCalculations.calculateNaturalFrequencyAndQ(stages, this.state.StageCount);\r\n    let frequencyArray = circuitDesignResults.frequency;\r\n    let magnitudeArray = circuitDesignResults.magnitude;\r\n    let graphData = ModelUtils.joinArrays(frequencyArray, magnitudeArray);\r\n    let limits = this.addLogMargins(ModelUtils.getRangeLimits(graphData));\r\n    return {\r\n      fN: fnAndQ.fn,\r\n      Q: fnAndQ.q,\r\n      graph: {\r\n        limits: limits,\r\n        data: graphData,\r\n      },\r\n    };\r\n  }\r\n\r\n  get frequencyResponseDb(): FrequencyResponseModel {\r\n    let circuitDesignResults = this.circuitDesignResults as CircuitGraphDataResult;\r\n    let stages = circuitDesignResults.stagesObject;\r\n    let fnAndQ = GraphCalculations.calculateNaturalFrequencyAndQ(stages, this.state.StageCount);\r\n    let frequencyArray = circuitDesignResults.frequency;\r\n    let magnitudeArray = circuitDesignResults.magnitude;\r\n    let magnitudeDbArray = ModelUtils.VAarrtoDBarr(magnitudeArray);\r\n    let graphData = ModelUtils.joinArrays(frequencyArray, magnitudeDbArray);\r\n    let limits = this.addMargins(ModelUtils.getRangeLimits(graphData));\r\n    return {\r\n      fN: fnAndQ.fn,\r\n      Q: fnAndQ.q,\r\n      graph: {\r\n        limits: limits,\r\n        data: graphData,\r\n      },\r\n    };\r\n  }\r\n\r\n  get spectralNoise(): SpectralNoiseModel {\r\n    let stages = (this.circuitDesignResults as CircuitGraphDataResult).stagesObject;\r\n    let frequencyArray = (this.circuitDesignResults as CircuitGraphDataResult).frequency;\r\n    let graphData = GraphCalculations.getSpectralNoiseData(frequencyArray, stages) as Array<GraphLine>;\r\n    if (graphData.length > 8) {\r\n      graphData.splice(7, 2); // Remove rf2 and rg from the data to deliver\r\n    }\r\n    let limits = this.addLogMargins(ModelUtils.getMultilineLimits(graphData));\r\n    return {\r\n      graph: {\r\n        limits: limits,\r\n        data: graphData,\r\n      },\r\n    };\r\n  }\r\n\r\n  get noiseGainVV(): NoiseGainModel {\r\n    let stages = (this.circuitDesignResults as CircuitGraphDataResult).stagesObject;\r\n    let frequencyArray = (this.circuitDesignResults as CircuitGraphDataResult).frequency;\r\n    let noiseGraphData = GraphCalculations.calculateArraysForNoiseGainPlot(frequencyArray, stages.stage1);\r\n    let graphData = [];\r\n    graphData[0] = ModelUtils.joinArrays(frequencyArray, noiseGraphData[0] as number[]);\r\n    graphData[1] = ModelUtils.joinArrays(frequencyArray, noiseGraphData[1] as number[]);\r\n    graphData[2] = ModelUtils.joinArrays(frequencyArray, noiseGraphData[2] as number[]);\r\n    graphData[3] = ModelUtils.joinArrays(frequencyArray, noiseGraphData[3] as number[]);\r\n    let limits = this.addLogMargins(ModelUtils.getMultilineLimits(graphData));\r\n    limits.ymax = limits.ymax + 0.0000001;\r\n    return {\r\n      graph: {\r\n        limits: limits,\r\n        data: graphData,\r\n      },\r\n    };\r\n  }\r\n\r\n  get noiseGainDb(): NoiseGainModel {\r\n    let stages = (this.circuitDesignResults as CircuitGraphDataResult).stagesObject;\r\n    let frequencyArray = (this.circuitDesignResults as CircuitGraphDataResult).frequency;\r\n    let noiseGraphData = GraphCalculations.calculateArraysForNoiseGainPlot(frequencyArray, stages.stage1);\r\n    let graphData = [];\r\n    graphData[0] = ModelUtils.joinArrays(frequencyArray, ModelUtils.VVarrtoDBarr(noiseGraphData[0] as number[]));\r\n    graphData[1] = ModelUtils.joinArrays(frequencyArray, ModelUtils.VVarrtoDBarr(noiseGraphData[1] as number[]));\r\n    graphData[2] = ModelUtils.joinArrays(frequencyArray, ModelUtils.VVarrtoDBarr(noiseGraphData[2] as number[]));\r\n    graphData[3] = ModelUtils.joinArrays(frequencyArray, ModelUtils.VVarrtoDBarr(noiseGraphData[3] as number[]));\r\n    let limits = ModelUtils.getMultilineLimits(graphData);\r\n    limits.ymax = limits.ymax + 0.0000001;\r\n    return {\r\n      graph: {\r\n        limits: limits,\r\n        data: graphData,\r\n      },\r\n    };\r\n  }\r\n\r\n  get snr(): SNRModel {\r\n    let circuitDesignResults = this.circuitDesignResults as CircuitGraphDataResult;\r\n    return {\r\n      peakSignalCurrent: this.state.Ip,\r\n      peakSignalVoltage: this.state.Vp,\r\n      snr: circuitDesignResults.dynamicRange.snr,\r\n      enob: circuitDesignResults.dynamicRange.enob,\r\n      minimumSignalCurrent: circuitDesignResults.dynamicRange.minPhotoCurrent,\r\n      outputOffsetVoltage: circuitDesignResults.dynamicRange.outputOffset,\r\n      stage1Noise: {\r\n        opampVoltage: circuitDesignResults.dynamicRange.noise.stage1.opAmpV,\r\n        opampCurrent: circuitDesignResults.dynamicRange.noise.stage1.opAmpI,\r\n        rf: circuitDesignResults.dynamicRange.noise.stage1.rf,\r\n        rin: circuitDesignResults.dynamicRange.noise.stage1.rin,\r\n        total: circuitDesignResults.dynamicRange.noise.stage1.total,\r\n      },\r\n      stage2Noise: {\r\n        opampVoltage: circuitDesignResults.dynamicRange.noise.stage2.opAmpV,\r\n        opampCurrent: circuitDesignResults.dynamicRange.noise.stage2.opAmpI,\r\n        rf: circuitDesignResults.dynamicRange.noise.stage2.rf,\r\n        rg: circuitDesignResults.dynamicRange.noise.stage2.rg,\r\n        rFilter: circuitDesignResults.dynamicRange.noise.stage2.rfilter,\r\n        total: circuitDesignResults.dynamicRange.noise.stage2.total,\r\n      },\r\n      totalNoise: circuitDesignResults.dynamicRange.noise.total,\r\n    };\r\n  }\r\n\r\n  get peakingLimits(): { min: number; max: number } {\r\n    return { min: 0.166666, max: 1.33333 };\r\n  }\r\n\r\n  @cached\r\n  get availableOpAmps(): { stage1: OpAmpSelectionDisplayItem[]; stage2: OpAmpSelectionDisplayItem[] } {\r\n    if (this.opamps === undefined) throw 'Op amps source is undefined. ';\r\n    let biasPreference: BiasPreference = 'positive';\r\n    if (this.state.Bias == '-') biasPreference = 'negative';\r\n    let targetSpeed = this.state.SpeedPreference === 'PulseWidth' ? 2 / this.state.TargetSpeed : this.state.TargetSpeed; // Always pass the bandwidth to the model\r\n    let stage1OpAmpList = PhotodiodeModel.getAvailableOpAmps(\r\n      this.opampdbDTO,\r\n      this.state.Vr,\r\n      biasPreference,\r\n      this.state.Cd,\r\n      this.state.Rsh,\r\n      this.state.Ip,\r\n      '',\r\n      this.state.Vp,\r\n      targetSpeed,\r\n      this.state.Peaking,\r\n      this.state.StageCount,\r\n      this.state.OpAmp1 ? this.state.OpAmp1 : this.opAmp1.partNumber,\r\n      1,\r\n    );\r\n    let stage2OpAmpList =\r\n      this.state.StageCount === 2\r\n        ? PhotodiodeModel.getAvailableOpAmps(\r\n            this.opampdbDTO,\r\n            this.state.Vr,\r\n            biasPreference,\r\n            this.state.Cd,\r\n            this.state.Rsh,\r\n            this.state.Ip,\r\n            '',\r\n            this.state.Vp,\r\n            targetSpeed,\r\n            this.state.Peaking,\r\n            this.state.StageCount,\r\n            this.state.OpAmp1 ? this.state.OpAmp1 : this.opAmp1.partNumber,\r\n            2,\r\n          )\r\n        : stage1OpAmpList;\r\n    let resultStage1 = this.convertToOpAmpList(this.opamps, stage1OpAmpList);\r\n    let resultStage2 = this.convertToOpAmpList(this.opamps, stage2OpAmpList);\r\n    return { stage1: resultStage1, stage2: resultStage2 };\r\n  }\r\n\r\n  private convertToOpAmpList(\r\n    opampDB: OpAmpSpec[] | null | undefined,\r\n    opAmpList: OpAmpSelectionItem[],\r\n  ): OpAmpSelectionDisplayItem[] {\r\n    if (opampDB === undefined || opampDB === null) throw 'Opamp DB should not be undefined. ';\r\n\r\n    let result = new Array<OpAmpSelectionDisplayItem>();\r\n    for (const opAmpItem of opAmpList) {\r\n      let opAmpDbInfo = opampDB.find((p: OpAmpSpec) => p.partNumber == opAmpItem.partNumber);\r\n\r\n      if (opAmpDbInfo === undefined) continue;\r\n\r\n      let item = new OpAmpSelectionDisplayItem();\r\n      item.partNumber = opAmpItem.partNumber;\r\n      item.selectable = opAmpItem.selectable;\r\n      item.disallowed = opAmpItem.disallowed;\r\n      item.comment = opAmpItem.comment;\r\n      item.feedbackMethod = opAmpDbInfo.feedbackMethod;\r\n      item.status = opAmpItem.status;\r\n      item.statusText = opAmpDbInfo.statusText;\r\n      item.deviceStatus = `${opAmpDbInfo.deviceStatus}`;\r\n      item.ltSpice = opAmpDbInfo.spice ? 'Yes' : 'No';\r\n      result.push(item);\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  private get opampdbDTO(): OpAmpSpec[] {\r\n    if (typeof this.opamps === 'undefined') {\r\n      throw 'op amps collection never completed request - cannot proceed';\r\n    } else if (this.opamps === null) {\r\n      throw 'op amps collection failed - cannot proceed';\r\n    }\r\n    return this.opamps;\r\n  }\r\n\r\n  @action validate(e: {\r\n    key: string;\r\n    newValue: number | string | PdStage;\r\n    oldValue: number | string | PdStage;\r\n    changes: { [key: string]: string | number | PdStage };\r\n    content: StateModel;\r\n    tab: string;\r\n  }): boolean | string {\r\n    let result: boolean | string = true;\r\n    let speedPreference = '';\r\n    let minLimit;\r\n    let maxLimit;\r\n    if (e.newValue != e.oldValue) {\r\n      if (!isNone(this.limits)) {\r\n        let newContent = new StateModel(e.content);\r\n        switch (e.key) {\r\n          case 'Vr':\r\n            {\r\n              const reverseVoltage = this.limits['reverseVoltage'] as LimitDetails;\r\n              if (this.isRangeValid(e.newValue as number, reverseVoltage)) {\r\n                newContent.Vr = e.newValue as number;\r\n              } else {\r\n                result = this.intl.t('validation-error.reverse-voltage', {\r\n                  min: eng3(reverseVoltage.min),\r\n                  max: eng3(reverseVoltage.max),\r\n                });\r\n              }\r\n            }\r\n            break;\r\n          case 'Cd':\r\n            {\r\n              const capacitance = this.limits['capacitance'] as LimitDetails;\r\n              if (this.isRangeValid(e.newValue as number, capacitance)) {\r\n                newContent.Cd = e.newValue as number;\r\n              } else {\r\n                result = this.intl.t('validation-error.capacitance', {\r\n                  min: eng3(capacitance.min),\r\n                  max: eng3(capacitance.max),\r\n                });\r\n              }\r\n            }\r\n            break;\r\n          case 'Rsh':\r\n            {\r\n              const shuntResistance = this.limits['shuntResistance'] as LimitDetails;\r\n              if (this.isRangeValid(e.newValue as number, shuntResistance)) {\r\n                newContent.Rsh = e.newValue as number;\r\n              } else {\r\n                result = this.intl.t('validation-error.shunt-resistance', {\r\n                  min: eng3(shuntResistance.min),\r\n                  max: eng3(shuntResistance.max),\r\n                });\r\n              }\r\n            }\r\n            break;\r\n          case 'Ip':\r\n            {\r\n              const peakCurrent = this.limits['peakCurrent'] as LimitDetails;\r\n              if (this.isRangeValid(e.newValue as number, peakCurrent)) {\r\n                newContent.Ip = e.newValue as number;\r\n              } else {\r\n                result = this.intl.t('validation-error.peak-current', {\r\n                  min: eng3(peakCurrent.min),\r\n                  max: eng3(peakCurrent.max),\r\n                });\r\n              }\r\n            }\r\n            break;\r\n          case 'Vp':\r\n            {\r\n              const peakVoltage = this.limits['peakVoltage'] as LimitDetails;\r\n              if (this.isRangeValid(e.newValue as number, peakVoltage)) {\r\n                newContent.Vp = e.newValue as number;\r\n              } else {\r\n                result = this.intl.t('validation-error.peak-voltage', {\r\n                  min: eng3(peakVoltage.min),\r\n                  max: eng3(peakVoltage.max),\r\n                });\r\n              }\r\n            }\r\n            break;\r\n          case 'TargetSpeed':\r\n            {\r\n              const limitSpeed = this.limits['speed'] as LimitDetails;\r\n              speedPreference = (e.changes['SpeedPreference'] as string)\r\n                ? (e.changes['SpeedPreference'] as string)\r\n                : (e.content.SpeedPreference as string);\r\n              minLimit = speedPreference === 'Bandwidth' ? limitSpeed.min : 2 / limitSpeed.max;\r\n              maxLimit = speedPreference === 'Bandwidth' ? limitSpeed.max : 2 / limitSpeed.min;\r\n              if (this.isRangeValid(e.newValue as number, { min: minLimit, max: maxLimit })) {\r\n                newContent.TargetSpeed = e.newValue as number;\r\n              } else {\r\n                result = this.intl.t('validation-error.speed', {\r\n                  min: eng3(minLimit),\r\n                  max: eng3(maxLimit),\r\n                });\r\n              }\r\n            }\r\n            break;\r\n          case 'OpAmp1':\r\n            newContent.OpAmp1 = e.newValue as string;\r\n            break;\r\n          case 'OpAmp2':\r\n            newContent.OpAmp2 = e.newValue as string;\r\n            break;\r\n          case 'Peaking':\r\n            newContent.Peaking = Number(e.newValue);\r\n            break;\r\n          case 'StageCount':\r\n            newContent.StageCount = e.newValue as PdStage;\r\n            break;\r\n        }\r\n      } else {\r\n        result = 'Limits are required';\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n  @action validateLoadDesign(e: {\r\n    key: string;\r\n    newValue: number | string | PdStage;\r\n    oldValue: number | string | PdStage;\r\n    changes: { [key: string]: string | number | PdStage };\r\n    content: StateModel;\r\n    tab: string;\r\n  }): boolean | string {\r\n    let result: boolean | string = true;\r\n    let speedPreference = '';\r\n    let minLimit;\r\n    let maxLimit;\r\n    if (e.newValue != e.oldValue) {\r\n      if (!isNone(this.limits)) {\r\n        switch (e.key) {\r\n          case 'Vr':\r\n            {\r\n              const reverseVoltage = this.limits['reverseVoltage'] as LimitDetails;\r\n              if (!isNaN(e.newValue as number)) {\r\n                if (!this.isRangeValid(e.newValue as number, reverseVoltage)) {\r\n                  result = this.intl.t('validation-error.reverse-voltage', {\r\n                    min: eng3(reverseVoltage.min),\r\n                    max: eng3(reverseVoltage.max),\r\n                  });\r\n                }\r\n              } else {\r\n                result = this.intl.t('validation-error.invalid-input-error', { value: e.newValue, field: 'Vr' });\r\n              }\r\n            }\r\n            break;\r\n          case 'Cd':\r\n            {\r\n              const capacitance = this.limits['capacitance'] as LimitDetails;\r\n              if (!isNaN(e.newValue as number)) {\r\n                if (!this.isRangeValid(e.newValue as number, capacitance)) {\r\n                  result = this.intl.t('validation-error.capacitance', {\r\n                    min: eng3(capacitance.min),\r\n                    max: eng3(capacitance.max),\r\n                  });\r\n                }\r\n              } else {\r\n                result = this.intl.t('validation-error.invalid-input-error', { value: e.newValue, field: 'Cd' });\r\n              }\r\n            }\r\n            break;\r\n          case 'Rsh':\r\n            {\r\n              const shuntResistance = this.limits['shuntResistance'] as LimitDetails;\r\n              if (!isNaN(e.newValue as number)) {\r\n                if (!this.isRangeValid(e.newValue as number, shuntResistance)) {\r\n                  result = this.intl.t('validation-error.shunt-resistance', {\r\n                    min: eng3(shuntResistance.min),\r\n                    max: eng3(shuntResistance.max),\r\n                  });\r\n                }\r\n              } else {\r\n                result = this.intl.t('validation-error.invalid-input-error', { value: e.newValue, field: 'Rsh' });\r\n              }\r\n            }\r\n            break;\r\n          case 'Ip':\r\n            {\r\n              const peakCurrent = this.limits['peakCurrent'] as LimitDetails;\r\n              if (!isNaN(e.newValue as number)) {\r\n                if (!this.isRangeValid(e.newValue as number, peakCurrent)) {\r\n                  result = this.intl.t('validation-error.peak-current', {\r\n                    min: eng3(peakCurrent.min),\r\n                    max: eng3(peakCurrent.max),\r\n                  });\r\n                }\r\n              } else {\r\n                result = this.intl.t('validation-error.invalid-input-error', { value: e.newValue, field: 'Ip' });\r\n              }\r\n            }\r\n            break;\r\n          case 'Vp':\r\n            {\r\n              const peakVoltage = this.limits['peakVoltage'] as LimitDetails;\r\n              if (!isNaN(e.newValue as number)) {\r\n                if (!this.isRangeValid(e.newValue as number, peakVoltage)) {\r\n                  result = this.intl.t('validation-error.peak-voltage', {\r\n                    min: eng3(peakVoltage.min),\r\n                    max: eng3(peakVoltage.max),\r\n                  });\r\n                }\r\n              } else {\r\n                result = this.intl.t('validation-error.invalid-input-error', { value: e.newValue, field: 'Vp' });\r\n              }\r\n            }\r\n            break;\r\n          case 'TargetSpeed':\r\n            {\r\n              const limitSpeed = this.limits['speed'] as LimitDetails;\r\n              speedPreference = (e.changes['SpeedPreference'] as string)\r\n                ? (e.changes['SpeedPreference'] as string)\r\n                : (e.content.SpeedPreference as string);\r\n              minLimit = speedPreference === 'Bandwidth' ? limitSpeed.min : 2 / limitSpeed.max;\r\n              maxLimit = speedPreference === 'Bandwidth' ? limitSpeed.max : 2 / limitSpeed.min;\r\n              if (!isNaN(e.newValue as number)) {\r\n                if (!this.isRangeValid(e.newValue as number, { min: minLimit, max: maxLimit })) {\r\n                  result = this.intl.t('validation-error.speed', {\r\n                    min: eng3(minLimit),\r\n                    max: eng3(maxLimit),\r\n                  });\r\n                }\r\n              } else {\r\n                result = this.intl.t('validation-error.invalid-input-error', {\r\n                  value: e.newValue,\r\n                  field: 'TargetSpeed',\r\n                });\r\n              }\r\n            }\r\n            break;\r\n          case 'OpAmp1':\r\n          case 'OpAmp2':\r\n            if (e.newValue) {\r\n              if (!isSupportedOpAmp(this.opamps as OpAmpSpec[], e.newValue as string)) {\r\n                result = `OpAmpError:${e.newValue}`;\r\n              }\r\n            }\r\n            break;\r\n          case 'StageCount':\r\n            if (isNaN(e.newValue as number)) {\r\n              result = this.intl.t('validation-error.invalid-input-error', { value: e.newValue, field: 'StageCount' });\r\n            }\r\n            break;\r\n        }\r\n      } else {\r\n        result = 'Limits are required';\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n  @action validateModel(state: StateModel): ModelError | undefined {\r\n    let modelResult: CircuitGraphDataResult | ModelError = this.tryCircuitDesignResults(state);\r\n    let result = 'ErrorCode' in modelResult ? (modelResult as ModelError) : undefined;\r\n    if (result?.ErrorParameter) {\r\n      result.ErrorParameter.statusMessage?.forEach((status: { key: string }) => {\r\n        status.key = 'model-error.' + status.key;\r\n      });\r\n      result.ErrorParameter.marginalStatusMessage?.forEach((status: { key: string }) => {\r\n        status.key = 'model-error.' + status.key;\r\n      });\r\n    }\r\n    return result;\r\n  }\r\n\r\n  addMargins(limits: limits): limits {\r\n    let newLimits = { ...limits };\r\n    let newYmax = limits.ymax + (limits.ymax - limits.ymin) / 10;\r\n    let newYmin = limits.ymin - (limits.ymax - limits.ymin) / 10;\r\n    newLimits.ymax = newYmax;\r\n    newLimits.ymin = newYmin;\r\n\r\n    return newLimits;\r\n  }\r\n\r\n  addLogMargins(limits: limits): limits {\r\n    let newLimits = { ...limits };\r\n    let newYmax = Math.pow(10, Math.floor(Math.log10(limits.ymax) + 1));\r\n    let newYmin = Math.pow(10, Math.floor(Math.log10(limits.ymin - limits.ymin / 10)));\r\n    newLimits.ymax = newYmax;\r\n    newLimits.ymin = newYmin;\r\n\r\n    return newLimits;\r\n  }\r\n\r\n  isRangeValid(value: number | null, limitDetails: LimitDetails): boolean {\r\n    let valid = false;\r\n    if (typeof value === 'number') {\r\n      valid = value >= limitDetails.min && value <= limitDetails.max;\r\n    }\r\n    return valid;\r\n  }\r\n\r\n  get powerSupplyRange(): PowerSupplyRange {\r\n    let userInput: UserInput = {\r\n      opAmps: this.opAmpList,\r\n      stages: this.state.StageCount,\r\n      peaking: this.state.Peaking,\r\n      speed: this.state.TargetSpeed,\r\n      peakVoltage: this.state.Vp,\r\n      peakCurrent: this.state.Ip,\r\n      shuntResistance: this.state.Rsh,\r\n      capacitance: this.state.Cd,\r\n      biasPreference: this.state.Bias == '-' ? 'negative' : 'positive',\r\n      reverseVoltage: this.state.Vr,\r\n      sensor: this.state.Photodiode,\r\n    };\r\n    let stage1 = this.schematicModel.stage1;\r\n    if (this.state.StageCount === 2) {\r\n      let stage2 = this.schematicModel.stage2 as StageTwo;\r\n      return {\r\n        min: GraphCalculations.calculateMinSupplyVoltage(userInput, stage1, stage2),\r\n        max: GraphCalculations.calculateMaxSupplyVoltage(userInput, stage1, stage2),\r\n      };\r\n    } else {\r\n      return {\r\n        min: GraphCalculations.calculateMinSupplyVoltage(userInput, stage1),\r\n        max: GraphCalculations.calculateMaxSupplyVoltage(userInput, stage1),\r\n      };\r\n    }\r\n  }\r\n}\r\n\r\ndeclare module '@ember/service' {\r\n  interface Registry {\r\n    model: ModelService;\r\n  }\r\n}\r\n","import Service from '@ember/service';\r\nimport { inject as service } from '@ember/service';\r\nimport * as ParametricData from '../utils/parametric';\r\nimport { DataType as D, CardinalityType as C } from '../utils/parametric';\r\nimport type CdpService from '../services/cdp';\r\nimport type LoggingService from '../services/logger';\r\nimport type ModelService from '../services/model';\r\nimport type { OpAmpSpec } from '../services/model';\r\nimport type SiteService from '@ebiz/ember-aditools-site/services/aditools-site';\r\nimport { PSTData, PSTIndex, PSTParameterMapping } from '@ebiz/ember-aditools-device-table/utils/device-table-pst';\r\n\r\ntype SpiceDetails = {\r\n  value: string;\r\n};\r\n\r\ntype CfbDetails = {\r\n  rIn: number;\r\n  minRf: number;\r\n  zbw: number;\r\n};\r\n\r\ntype SpiceModelDetails = {\r\n  compPin: boolean;\r\n};\r\n\r\ntype OpAmpPSTParameterName =\r\n  | 'partNumber'\r\n  | 'gbw'\r\n  | 'slewRate'\r\n  | 'rOut'\r\n  | 'supplyCurrent'\r\n  | 'iNoise'\r\n  | 'vNoise'\r\n  | 'outHeadroomPlus'\r\n  | 'outHeadroomMinus'\r\n  | 'inHeadroomPlus'\r\n  | 'inHeadroomMinus'\r\n  | 'feedbackMethod'\r\n  | 'architecture'\r\n  | 'minSupplyVoltage'\r\n  | 'maxSupplyVoltage'\r\n  | 'numberChannels'\r\n  | 'packageCode'\r\n  | 'minStableGain'\r\n  | 'iBias'\r\n  | 'vos'\r\n  | 'vintage'\r\n  | 'statusText'\r\n  | 'deviceStatus'\r\n  | 'price'\r\n  | 'tempRange'\r\n  | 'cCm'\r\n  | 'cDiff'\r\n  | 'generic';\r\n\r\nconst PST_PARAMETERS: ParametricData.PstParameterSet<OpAmpPSTParameterName> = {\r\n  '0': { id: '0', name: 'partNumber', data: D.t_none, value: C.c_none, optional: true },\r\n  '4502': {\r\n    id: '4502',\r\n    name: 'gbw',\r\n    data: D.t_float,\r\n    value: C.c_single,\r\n    optional: (part) => {\r\n      return part.feedbackMethod === 'Current';\r\n    },\r\n  },\r\n  '300': { id: '300', name: 'slewRate', data: D.t_float, value: C.c_single, optional: false },\r\n  '4401': { id: '4401', name: 'rOut', data: D.t_float, value: C.c_single, optional: true },\r\n  '4108': { id: '4108', name: 'supplyCurrent', data: D.t_float, value: C.c_single, optional: false },\r\n  '4124': {\r\n    id: '4124',\r\n    name: 'iNoise',\r\n    data: D.t_float,\r\n    value: C.c_single,\r\n    optional: false,\r\n    default: (part) => {\r\n      if (\r\n        'iBias' in part &&\r\n        !isNaN(Number(part.iBias)) &&\r\n        parseFloat(part.iBias) < 80e-12 &&\r\n        'architecture' in part &&\r\n        part.architecture.length > 0 &&\r\n        -1 === part.architecture.indexOf('Zero Drift')\r\n      ) {\r\n        return '1e-12';\r\n      } else {\r\n        return;\r\n      }\r\n    },\r\n  },\r\n  '4101': { id: '4101', name: 'vNoise', data: D.t_float, value: C.c_single, optional: false },\r\n  '4099': { id: '4099', name: 'outHeadroomPlus', data: D.t_float, value: C.c_single, optional: false },\r\n  '4100': { id: '4100', name: 'outHeadroomMinus', data: D.t_float, value: C.c_single, optional: false },\r\n  '4084': { id: '4084', name: 'inHeadroomPlus', data: D.t_float, value: C.c_single, optional: false },\r\n  '4085': { id: '4085', name: 'inHeadroomMinus', data: D.t_float, value: C.c_single, optional: false },\r\n  '5034': { id: '5034', name: 'feedbackMethod', data: D.t_pulldown, value: C.c_single, optional: true },\r\n  '5056': { id: '5056', name: 'architecture', data: D.t_pulldown, value: C.c_multi, optional: true },\r\n  '2839': { id: '2839', name: 'minSupplyVoltage', data: D.t_float, value: C.c_single, optional: false },\r\n  '2840': { id: '2840', name: 'maxSupplyVoltage', data: D.t_float, value: C.c_single, optional: false },\r\n  '2687': { id: '2687', name: 'numberChannels', data: D.t_integer, value: C.c_single, optional: false },\r\n  s4: { id: 's4', name: 'packageCode', data: D.t_pulldown, value: C.c_multi, optional: false },\r\n  '4127': { id: '4127', name: 'minStableGain', data: D.t_float, value: C.c_single, optional: false },\r\n  '4500': { id: '4500', name: 'iBias', data: D.t_float, value: C.c_single, optional: false },\r\n  '4501': { id: '4501', name: 'vos', data: D.t_float, value: C.c_single, optional: false },\r\n  '4455': { id: '4455', name: 'cCm', data: D.t_float, value: C.c_single, optional: false },\r\n  '4117': { id: '4117', name: 'cDiff', data: D.t_float, value: C.c_single, optional: false },\r\n  s1: { id: 's1', name: 'vintage', data: D.t_integer, value: C.c_single, optional: true },\r\n  s7: { id: 's7', name: 'statusText', data: D.t_string, value: C.c_single, optional: true },\r\n  s11: { id: 's11', name: 'deviceStatus', data: D.t_integer, value: C.c_single, optional: true },\r\n  s3: { id: 's3', name: 'price', data: D.t_float, value: C.c_single, optional: true },\r\n  s14: { id: 's14', name: 'tempRange', data: D.t_string, value: C.c_single, optional: true },\r\n};\r\n\r\nconst LOG_PARTS = false;\r\nconst ENABLE_POLE_ZERO_SYNTHESIS = false;\r\n\r\nlet LTPartsPolesZeroes = function (\r\n  item: Record<\r\n    OpAmpPSTParameterName | 'spice' | 'cfb' | 'spiceModels' | 'polesZeroes',\r\n    string | Record<string, unknown>\r\n  >,\r\n  logger: LoggingService,\r\n): PolesZeroesDetails | undefined {\r\n  let result: PolesZeroesDetails | undefined;\r\n  if (ENABLE_POLE_ZERO_SYNTHESIS && (item.partNumber as string).substring(0, 2) === 'LT') {\r\n    let gbw = parseFloat(item.gbw as string);\r\n    if (LOG_PARTS) {\r\n      logger.log(`Synthesizing polesZeroes for ${item.partNumber}`);\r\n    }\r\n    result = {\r\n      gbw: gbw,\r\n      domPole: 0.15 * gbw,\r\n      p: [2.5 * gbw],\r\n      z: [0.5 * gbw],\r\n      rhpz: 1e14,\r\n    };\r\n  }\r\n  return result;\r\n};\r\n\r\nexport default class OpampService extends Service {\r\n  @service('aditools-site') declare siteconfig: SiteService; //{ [key: string]: string };\r\n  @service('model') declare modelService: ModelService;\r\n  @service('opamp') declare opampService: OpampService;\r\n  @service declare cdp: CdpService;\r\n  @service declare logger: LoggingService;\r\n  opAmps?: Promise<OpAmpSpec[] | null>;\r\n  pstData?: PSTData | null;\r\n  pstViewPromise?: Promise<PSTIndex | null>;\r\n  pstView?: PSTIndex | null;\r\n  pstMappingPromise?: Promise<PSTParameterMapping | null>;\r\n  pstMapping?: PSTParameterMapping | null;\r\n  // Load the opamps from cdp\r\n  load(config?: Promise<PhotodiodeConfigJson | null>): void {\r\n    if (config) {\r\n      this.pstMappingPromise = this.cdp.getPstMapping<PSTParameterMapping>();\r\n      this.opAmps = config.then((cfg) => {\r\n        if (cfg === null) return cfg;\r\n        this.pstViewPromise = this.cdp.getPstIndex<PSTIndex>(cfg.cdpsource.viewsource);\r\n        let pst = this.cdp.getPstData<PSTData>(cfg.cdpsource.datasource);\r\n        return pst.then(async (resolvedPst) => {\r\n          this.pstData = resolvedPst;\r\n          if (resolvedPst === null) return resolvedPst;\r\n          return ParametricData.load<\r\n            OpAmpPSTParameterName,\r\n            OpAmpPSTParameterName | 'spice' | 'cfb' | 'spiceModels' | 'polesZeroes'\r\n          >(\r\n            this.siteconfig.AdiLocale,\r\n            config,\r\n            pst,\r\n            PST_PARAMETERS,\r\n            ['cfbParts:cfb', 'spiceModels', 'polesZeroes'],\r\n            this.logger,\r\n            undefined,\r\n            LOG_PARTS,\r\n          ).then((data) => {\r\n            if (data === null) return data;\r\n            return data\r\n              .filter((item) => {\r\n                // Remove currrent feedback parts without cfb data in the json\r\n                return item.feedbackMethod !== 'Current' || item['cfb'];\r\n              })\r\n              .map((item) => {\r\n                return {\r\n                  partNumber: item.partNumber as string,\r\n                  gbw: parseFloat(item.gbw as string),\r\n                  slewRate: parseFloat(item.slewRate as string),\r\n                  rOut: parseFloat(item.rOut as string),\r\n                  supplyCurrent: parseFloat(item.supplyCurrent as string),\r\n                  iNoise: parseFloat(item.iNoise as string),\r\n                  vNoise: parseFloat(item.vNoise as string),\r\n                  outHeadroomPlus: parseFloat(item.outHeadroomPlus as string),\r\n                  outHeadroomMinus: parseFloat(item.outHeadroomMinus as string),\r\n                  inHeadroomPlus: parseFloat(item.inHeadroomPlus as string),\r\n                  inHeadroomMinus: parseFloat(item.inHeadroomMinus as string),\r\n                  feedbackMethod: item.feedbackMethod as string,\r\n                  architecture: item.architecture as string,\r\n                  minSupplyVoltage: parseFloat(item.minSupplyVoltage as string),\r\n                  maxSupplyVoltage: parseFloat(item.maxSupplyVoltage as string),\r\n                  numberChannels: parseInt(item.numberChannels as string),\r\n                  packageCode: item.packageCode as string,\r\n                  minStableGain: parseFloat(item.minStableGain as string),\r\n                  iBias: parseFloat(item.iBias as string),\r\n                  vos: parseFloat(item.vos as string),\r\n                  cCm: parseFloat(item.cCm as string),\r\n                  cDiff: parseFloat(item.cDiff as string),\r\n                  vintage: parseInt(item.vintage as string),\r\n                  statusText: item.statusText as string,\r\n                  deviceStatus: parseInt(item.deviceStatus as string),\r\n                  price: parseFloat(item.price as string),\r\n                  tempRange: item.tempRange as string,\r\n                  spice: item.spice !== undefined && (item.spice as SpiceDetails).value === 'Yes',\r\n                  cfb: item.cfb as CfbDetails,\r\n                  spiceModels: item.spiceModels as SpiceModelDetails,\r\n                  polesZeroes: item.polesZeroes\r\n                    ? (item.polesZeroes as PolesZeroesDetails)\r\n                    : LTPartsPolesZeroes(item, this.logger),\r\n                  generic: item.generic as string,\r\n                  cfint: parseFloat((item.partNumber == 'ADA4351-2' ? '3e-12' : '0') as string),\r\n                };\r\n              });\r\n          });\r\n        });\r\n      });\r\n    }\r\n  }\r\n}\r\n\r\ndeclare module '@ember/service' {\r\n  interface Registry {\r\n    opamp: OpampService;\r\n  }\r\n}\r\n\r\n// Pulled from old code in FilterWizard - probably not needed in Photodiode\r\n\r\n// postprocess(mergedPart, part)\r\n// {\r\n//     if (mergedPart.partId.substring(0, 2) === \"LT\") {\r\n//         let GBW = part['gbw'];\r\n//         part['pole1'] = 0.15 * GBW;\r\n//         part['pole2'] = 2.5 * GBW;\r\n//         part['zero'] = 0.5 * GBW;\r\n//         part['compPin'] = false;\r\n//         part['specialOpAmp'] = true;\r\n//     } else if ('special' in mergedPart) {\r\n//         part['minStableGain'] = mergedPart['special'].minGain;\r\n//         part['pole1'] = mergedPart['special'].pole1;\r\n//         part['pole2'] = mergedPart['special'].pole2;\r\n//         part['zero'] = mergedPart['special'].zero;\r\n//         part['compPin'] = mergedPart['special'].compPin;\r\n//         part['specialOpAmp'] = true;\r\n//     } else {\r\n//         part['specialOpAmp'] = false;\r\n//     }\r\n// }\r\n","import Service from '@ember/service';\r\nimport { inject as service } from '@ember/service';\r\nimport type AnalyticsService from '@ebiz/ember-aditools-analytics/services/aditools-analytics';\r\nimport type SiteService from '@ebiz/ember-aditools-site/services/aditools-site';\r\nimport type LoggingService from './logger';\r\nimport type ModelService from './model';\r\nimport { StateModel } from './model';\r\nimport { Changeset } from 'ember-changeset';\r\nimport { saveDesignAnalytics, loadDesignAnalytics } from '../utils/analytics';\r\nimport OpampService from '../services/opamp';\r\nimport { PdStage } from 'photodiode-model/lib/src/model';\r\nimport { BufferedChangeset, ValidatorAction } from 'ember-changeset/types';\r\n\r\ntype opamp = {\r\n  opAmp: string | null;\r\n  stage: string;\r\n  found: boolean;\r\n  locked: boolean;\r\n  valid: boolean;\r\n};\r\n\r\nexport default class PersistenceService extends Service {\r\n  @service('aditools-analytics') declare analytics: AnalyticsService;\r\n  @service('aditools-site') declare siteconfig: SiteService;\r\n  @service declare logger: LoggingService;\r\n  @service declare model: ModelService;\r\n  @service('opamp') declare opampService: OpampService;\r\n\r\n  getDesign(): Record<string, unknown> {\r\n    return this.normalize(this.model.state);\r\n  }\r\n\r\n  getOpAmps(): opamp[] {\r\n    let data = this.model.state;\r\n    let opAmps = [];\r\n    try {\r\n      opAmps.push({\r\n        stage: 'stage_1',\r\n        opAmp: this.model.opAmp1 ? this.model.opAmp1.partNumber : null,\r\n        locked: data.OpAmp1 ? true : false,\r\n        found: true,\r\n        valid: true,\r\n      });\r\n      if (this.model.opAmp2) {\r\n        opAmps.push({\r\n          stage: 'stage_2',\r\n          opAmp: this.model.opAmp2 ? this.model.opAmp2.partNumber : null,\r\n          locked: data.OpAmp2 ? true : false,\r\n          found: true,\r\n          valid: true,\r\n        });\r\n      }\r\n    } catch (error: unknown) {\r\n      opAmps = [];\r\n    }\r\n    return opAmps;\r\n  }\r\n\r\n  loadDesign(\r\n    data: string,\r\n  ): Promise<{ updatedChangeSet?: BufferedChangeset; status: number; message: string | undefined }> {\r\n    let parsedData = JSON.parse(data);\r\n    return Promise.resolve()\r\n      .then(() => {\r\n        if (!this.model.opamps) {\r\n          if (this.opampService.opAmps) {\r\n            return this.opampService.opAmps.then((opamps) => {\r\n              if (opamps !== null) {\r\n                this.model.opamps = opamps;\r\n              } else {\r\n                throw { status: -3, message: `No OpAmps` };\r\n              }\r\n              return Promise.resolve();\r\n            });\r\n          }\r\n        }\r\n        return;\r\n      })\r\n      .then(() => {\r\n        let designData = parsedData.Design.photodiode;\r\n        let modelStateChangeset = Changeset(this.model.state, this.model.validateLoadDesign as ValidatorAction);\r\n        try {\r\n          modelStateChangeset.set('Photodiode', designData.sensor);\r\n          modelStateChangeset.set('Vr', parseFloat(designData.reverseVoltage));\r\n          modelStateChangeset.set('Bias', designData.biasPreference === 'positive' ? '+' : '-');\r\n          modelStateChangeset.set('Cd', parseFloat(designData.capacitance));\r\n          modelStateChangeset.set('Rsh', parseFloat(designData.shuntResistance));\r\n          modelStateChangeset.set('Ip', parseFloat(designData.peakCurrent));\r\n          modelStateChangeset.set('StageCount', parseFloat(designData.stages));\r\n          modelStateChangeset.set(\r\n            'OpAmp1',\r\n            designData.opAmps.length > 0 && designData.opAmps[0].locked ? designData.opAmps[0].opAmp : null,\r\n          );\r\n          modelStateChangeset.set(\r\n            'OpAmp2',\r\n            designData.opAmps.length > 1 && designData.opAmps[1].locked ? designData.opAmps[1].opAmp : null,\r\n          );\r\n          modelStateChangeset.set('Vp', parseFloat(designData.peakVoltage));\r\n          modelStateChangeset.set(\r\n            'SpeedPreference',\r\n            designData.speedPreference === 'bandwidth'\r\n              ? 'Bandwidth'\r\n              : designData.speedPreference === 'minPulseWidth'\r\n                ? 'PulseWidth'\r\n                : designData.speedPreference,\r\n          );\r\n          modelStateChangeset.set(\r\n            'TargetSpeed',\r\n            designData.speedPreference === 'minPulseWidth'\r\n              ? 2 / parseFloat(designData.speed)\r\n              : parseFloat(designData.speed),\r\n          );\r\n          modelStateChangeset.set('Peaking', parseFloat(designData.peaking));\r\n          modelStateChangeset.set(\r\n            'FrequencyResponseUnit',\r\n            designData.frequencyResponseUnit ? designData.frequencyResponseUnit : 'dB',\r\n          );\r\n          modelStateChangeset.set('NoiseGainUnit', designData.noiseGainUnit ? designData.noiseGainUnit : 'V/V');\r\n        } catch {\r\n          // Exception occurs when changeset data cannot be populated because design data does not exist for said field\r\n          // This is an invalid design case.\r\n          throw 'Invalid Design';\r\n        }\r\n        return modelStateChangeset;\r\n      })\r\n      .then((modelStateChangeset) => {\r\n        return modelStateChangeset.validate().then(() => {\r\n          let status = 0;\r\n          let message: string | undefined = '';\r\n          // Check if there are State Validation Errors\r\n          if (modelStateChangeset.errors.length > 0) {\r\n            let opAmpErrors = modelStateChangeset.errors.filter(\r\n              (item) => item.key === 'OpAmp1' || item.key === 'OpAmp2',\r\n            );\r\n            if (opAmpErrors.length > 0) {\r\n              let opAmpList: string[] = [];\r\n              opAmpErrors.forEach((item) => {\r\n                opAmpList.push(item.value);\r\n              });\r\n              // OpAmp not Supported Error\r\n              status = -2;\r\n              message = opAmpList.join();\r\n            } else {\r\n              // General Error\r\n              status = -1;\r\n              message = modelStateChangeset.errors[0] ? modelStateChangeset.errors[0].validation.toString() : '';\r\n            }\r\n          } else {\r\n            // Check if there are Model Errors\r\n            let newState = new StateModel();\r\n            newState.Photodiode = modelStateChangeset['Photodiode'] as string;\r\n            newState.Vr = modelStateChangeset['Vr'] as number;\r\n            newState.Bias = modelStateChangeset['Bias'] as '+' | '-';\r\n            newState.Cd = modelStateChangeset['Cd'] as number;\r\n            newState.Rsh = modelStateChangeset['Rsh'] as number;\r\n            newState.Ip = modelStateChangeset['Ip'] as number;\r\n            newState.StageCount = modelStateChangeset['StageCount'] as PdStage;\r\n            newState.OpAmp1 = modelStateChangeset['OpAmp1'] as string | null;\r\n            newState.OpAmp2 = modelStateChangeset['OpAmp2'] as string | null;\r\n            newState.Vp = modelStateChangeset['Vp'] as number;\r\n            newState.TargetSpeed = modelStateChangeset['TargetSpeed'] as number;\r\n            newState.SpeedPreference = modelStateChangeset['SpeedPreference'] as string;\r\n            newState.Peaking = modelStateChangeset['Peaking'] as number;\r\n            newState.FrequencyResponseUnit = modelStateChangeset['FrequencyResponseUnit'] as string;\r\n            newState.NoiseGainUnit = modelStateChangeset['NoiseGainUnit'] as string;\r\n\r\n            let modelInvalid = this.model.validateModel(newState);\r\n            let isMarginalDesign =\r\n              modelInvalid && modelInvalid.ErrorParameter && modelInvalid.ErrorParameter.notRecommendedAvailable;\r\n            if (!modelInvalid || isMarginalDesign) {\r\n              loadDesignAnalytics(parsedData, this.analytics);\r\n              status = 0;\r\n              message = '';\r\n            } else {\r\n              status = -1;\r\n              message = 'model-error.' + modelInvalid.ErrorCode;\r\n            }\r\n          }\r\n          return { updatedChangeSet: modelStateChangeset, status: status, message: message };\r\n        });\r\n      })\r\n      .catch((error) => {\r\n        // Return Exception when Error\r\n        return { status: error.status ? error.status : -1, message: `${error.message ? error.message : error}` };\r\n      });\r\n  }\r\n\r\n  normalize(data: StateModel): Record<string, unknown> {\r\n    let opAmps = this.model.opamps ? this.getOpAmps() : [];\r\n    return {\r\n      photodiode: {\r\n        sensor: data.Photodiode,\r\n        reverseVoltage: data.Vr,\r\n        biasPreference: data.Bias === '+' ? 'positive' : 'negative',\r\n        capacitance: data.Cd,\r\n        shuntResistance: data.Rsh,\r\n        peakCurrent: data.Ip,\r\n        peakVoltage: data.Vp,\r\n        speedPreference:\r\n          data.SpeedPreference === 'Bandwidth'\r\n            ? 'bandwidth'\r\n            : data.SpeedPreference === 'PulseWidth'\r\n              ? 'minPulseWidth'\r\n              : data.SpeedPreference,\r\n        speed: data.SpeedPreference === 'Bandwidth' ? data.TargetSpeed : 2 / data.TargetSpeed,\r\n        peaking: data.Peaking,\r\n        stages: opAmps.length.toString(),\r\n        opAmps: opAmps,\r\n        frequencyResponseUnit: data.FrequencyResponseUnit === 'dB' ? 'dB' : 'V/A',\r\n        noiseGainUnit: data.NoiseGainUnit === 'dB' ? 'dB' : 'V/V',\r\n      },\r\n    };\r\n  }\r\n\r\n  saveDesign(name: string, description: string): void {\r\n    let data = this.getDesign();\r\n    let now = new Date();\r\n    let ticks = now.getTime();\r\n    let fileName = (name.length > 0 ? name : 'SavedDesignPD' + ticks.toString()) + '.json';\r\n    let saveDateStamp =\r\n      now.getFullYear() +\r\n      '-' +\r\n      ('0' + (now.getMonth() + 1)).slice(-2) +\r\n      '-' +\r\n      ('0' + now.getDate()).slice(-2) +\r\n      ' ' +\r\n      ('0' + (((now.getHours() + 11) % 12) + 1)).slice(-2) +\r\n      ':' +\r\n      ('0' + now.getMinutes()).slice(-2) +\r\n      ':' +\r\n      ('0' + now.getSeconds()).slice(-2) +\r\n      ' ' +\r\n      (now.getHours() >= 12 ? 'PM' : 'AM');\r\n    let toolName = 'PD';\r\n    let jsonVersion = '1.0.0';\r\n\r\n    let designData = {\r\n      Name: name,\r\n      Description: description,\r\n      Tool: toolName,\r\n      Design: data,\r\n      CreatedDate: saveDateStamp,\r\n      UpdatedDate: saveDateStamp,\r\n      JsonVersion: jsonVersion,\r\n    };\r\n\r\n    let jsonStringData = JSON.stringify(designData, null, '\\t');\r\n    // console.log(jsonStringData);\r\n\r\n    let blob = new Blob([jsonStringData], {\r\n      type: 'application/octet-stream; charset=UTF-8',\r\n    });\r\n\r\n    if (typeof window.navigator.msSaveBlob !== 'undefined') {\r\n      window.navigator.msSaveBlob(blob, fileName);\r\n    } else {\r\n      let URL = window.URL || window.webkitURL;\r\n      let downloadUrl = URL.createObjectURL(blob);\r\n\r\n      if (fileName) {\r\n        let a = document.createElement('a');\r\n        if (typeof a.download === 'undefined') {\r\n          window.location.href = downloadUrl;\r\n        } else {\r\n          a.href = downloadUrl;\r\n          a.download = fileName;\r\n          a.click();\r\n        }\r\n      } else {\r\n        window.location.href = downloadUrl;\r\n      }\r\n      URL.revokeObjectURL(downloadUrl);\r\n    }\r\n    saveDesignAnalytics(this.model, this.analytics);\r\n  }\r\n}\r\n\r\ndeclare module '@ember/service' {\r\n  interface Registry {\r\n    persistence: PersistenceService;\r\n  }\r\n}\r\n","import Service from '@ember/service';\r\nimport { inject as service } from '@ember/service';\r\n//import type SiteService from '@ebiz/ember-aditools-site/services/aditools-site';\r\nimport CdpService from '../services/cdp';\r\nimport ModelService from 'photodiode/services/model';\r\nimport { SensorData } from '../models/sensor';\r\n\r\nexport default class SensorService extends Service {\r\n  @service('aditools-site') declare siteconfig: { [key: string]: string }; // SiteService;\r\n  @service('model') declare modelService: ModelService;\r\n  @service('sensor') declare sensorService: SensorService;\r\n  @service declare cdp: CdpService;\r\n  sensors?: Promise<SensorData[] | null>;\r\n  limits?: Limits;\r\n  shoppingCartUrl?: string;\r\n\r\n  load(config: Promise<PhotodiodeConfigJson | null>): void {\r\n    if (config) {\r\n      this.sensors = config.then((cfg) => {\r\n        if (cfg === null) return cfg;\r\n        this.limits = cfg.limits;\r\n        this.shoppingCartUrl = this.siteconfig['ShoppingCartBaseUrl'];\r\n        return this.buildSensorData(\r\n          cfg.sensors,\r\n          this.siteconfig['SiteUrl'] + '/media/' + this.siteconfig['AdiLocale'] + '/designtools/photodiode/models/',\r\n        );\r\n      });\r\n    }\r\n  }\r\n\r\n  async buildSensorData(data: Sensor[], modelsURL: string): Promise<SensorData[]> {\r\n    let sensorData = [];\r\n    for (const sensorItem of data) {\r\n      //These values will be overridded by values from the CDP. Only for reference.\r\n      let sensor = {\r\n        id: 'PDB-C134',\r\n        partNumber: 'PDB-C134',\r\n        cost: '$1.71',\r\n        manufacturer: 'Advanced Photonix',\r\n        packageType: 'Radial',\r\n        packageSize: 'null',\r\n        spectralRange: '700n ~ 1100n',\r\n        spectralPeak: '9.00E-07',\r\n        sensitivity: '0.54',\r\n        darkCurrent: '2.00E-09',\r\n        resistance: '2.00E+09',\r\n        capacitance: '6.E-12',\r\n        responseTime: '1.00E-08',\r\n        reverseBreakdown: '50',\r\n        area: '1.54',\r\n        angle: '30',\r\n        operatingTemp: '-40 ~ 80',\r\n        spiceFileUrl: 'spice/Sensors/PDB-C134.cir.txt',\r\n        vendorLink: 'http://www.advancedphotonix.com',\r\n        vendorDatasheetUrl: 'http://www.advancedphotonix.com/ap_products/pdfs/PDB-C134.pdf',\r\n      };\r\n      let minSpecRange = '',\r\n        maxSpecRange = '',\r\n        minTemp = '',\r\n        maxTemp = '';\r\n      for (const parameter of sensorItem.parameters) {\r\n        const paramValue = parameter.value[0] ? parameter.value[0].basevalue : null;\r\n        const displayValue = parameter.value[0] ? parameter.value[0].displayvalue : null;\r\n        switch (parseInt(parameter.id)) {\r\n          case 4499:\r\n            sensor.cost = paramValue as string;\r\n            break;\r\n          case 4494:\r\n            sensor.packageType = paramValue as string;\r\n            break;\r\n          case 4485:\r\n            minSpecRange = (displayValue as string | number) + 'n';\r\n            break;\r\n          case 4486:\r\n            maxSpecRange = (displayValue as string | number) + 'n';\r\n            break;\r\n          case 4484:\r\n            sensor.spectralPeak = paramValue as string;\r\n            break;\r\n          case 4487:\r\n            sensor.sensitivity = paramValue as string;\r\n            break;\r\n          case 4488:\r\n            sensor.darkCurrent = paramValue as string;\r\n            break;\r\n          case 4489:\r\n            sensor.resistance = paramValue as string;\r\n            break;\r\n          case 4490:\r\n            sensor.capacitance = paramValue as string;\r\n            break;\r\n          case 4227:\r\n            sensor.responseTime = paramValue as string;\r\n            break;\r\n          case 4491:\r\n            sensor.reverseBreakdown = paramValue as string;\r\n            break;\r\n          case 4492:\r\n            sensor.area = displayValue as string;\r\n            break;\r\n          case 4493:\r\n            sensor.angle = paramValue as string;\r\n            break;\r\n          case 4395:\r\n            minTemp = paramValue as string;\r\n            break;\r\n          case 4396:\r\n            maxTemp = paramValue as string;\r\n            break;\r\n          case 4497:\r\n            sensor.vendorLink = paramValue as string;\r\n            break;\r\n          case 4498:\r\n            sensor.vendorDatasheetUrl = paramValue as string;\r\n            break;\r\n        }\r\n      }\r\n      sensor.id = sensorItem.id;\r\n      sensor.partNumber = sensorItem.display;\r\n\r\n      //We have some photoDiodes that do not have matching part numbers to ids, therefore the photodiode selected does not select since those properties do not match TRK 05-01-2013\r\n      if (sensor.id != sensor.partNumber) {\r\n        sensor.partNumber = sensor.id;\r\n      }\r\n      sensor.manufacturer = sensorItem.mfr;\r\n      sensor.spectralRange = minSpecRange.toString() + ' ~ ' + maxSpecRange.toString();\r\n      sensor.operatingTemp = minTemp.toString() + ' ~ ' + maxTemp.toString();\r\n      sensor.spiceFileUrl = modelsURL + sensorItem.id + '.cir';\r\n\r\n      sensorData.push(sensor);\r\n    }\r\n    return sensorData;\r\n  }\r\n}\r\n\r\ndeclare module '@ember/service' {\r\n  interface Registry {\r\n    sensor: SensorService;\r\n  }\r\n}\r\n","import Service from '@ember/service';\r\nimport Html2ToCanvas from 'html2canvas';\r\nimport type LoggingService from './logger';\r\nimport { inject as service } from '@ember/service';\r\n\r\nconst generateStyleDefs = function (svgDomElement: Element, logger: LoggingService): void {\r\n  // method for adding styles inline for the svg to png conversion, in progress\r\n  let styleDefs = '';\r\n  const sheets = document.styleSheets;\r\n  for (const sheet of sheets) {\r\n    try {\r\n      const csshref = sheet.href;\r\n      // console.log(csshref, ':', sheet.cssRules.length > 1 && (sheet.cssRules[1] as CSSStyleRule).selectorText : '');\r\n      if (\r\n        (csshref && csshref.includes(window.location.origin)) ||\r\n        // The following line is a dreadfully fragile hack to use the ea-graph CSS and exclude all the anonymous CSS modules introduced by analytics\r\n        (!csshref && sheet.cssRules.length > 1 && (sheet.cssRules[1] as CSSStyleRule).selectorText === '.titletext')\r\n      ) {\r\n        const rules = sheet.cssRules;\r\n        for (let j = 0; j < rules.length; j++) {\r\n          const rule = rules[j] as CSSStyleRule;\r\n          if (rule.style) {\r\n            const selectorText = rule.selectorText;\r\n            try {\r\n              const elems = selectorText.indexOf('::') === -1 ? svgDomElement.querySelectorAll(selectorText) : [];\r\n              if (elems.length || selectorText === ':root') {\r\n                styleDefs += selectorText + ' { ' + rule.style.cssText + ' }\\n';\r\n              }\r\n            } catch (error: unknown) {\r\n              // We should never get here but this will keep failures within one rule from stopping processing\r\n              const namedError = error as { message: string };\r\n              logger.log(`Error on rule #${j} in ${csshref} with \"${selectorText}\":` + namedError.message.toString());\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } catch (error: unknown) {\r\n      const namedError = error as { message: string };\r\n      logger.log('Error:' + namedError.message.toString());\r\n    }\r\n  }\r\n  const s = document.createElement('style');\r\n  s.setAttribute('type', 'text/css');\r\n  s.innerHTML = styleDefs;\r\n  const defs = document.createElement('defs');\r\n  defs.appendChild(s);\r\n  svgDomElement.insertBefore(s, svgDomElement.firstChild);\r\n};\r\n\r\nexport default class SnapShotService extends Service {\r\n  @service declare logger: LoggingService;\r\n\r\n  convertSVGToImage(componentId: string): Promise<PDFImageInfo> {\r\n    let imageData;\r\n    const canvas = document.createElement('canvas');\r\n    return new Promise((resolve, reject) => {\r\n      const svgElem: Element | null = document.querySelector(componentId + ' svg');\r\n      if (svgElem) {\r\n        generateStyleDefs(svgElem, this.logger);\r\n        canvas.width = (svgElem as SVGSVGElement).width.baseVal.value;\r\n        canvas.height = (svgElem as SVGSVGElement).height.baseVal.value;\r\n      }\r\n      const svgString = new XMLSerializer().serializeToString(svgElem as Node);\r\n      const ctx = canvas.getContext('2d');\r\n      const DOMURL = window.URL || window.webkitURL;\r\n      const img = new Image();\r\n      const svg = new Blob([svgString], { type: 'image/svg+xml;charset=utf-8' });\r\n      const url = DOMURL.createObjectURL(svg);\r\n      img.onload = () => {\r\n        if (ctx) ctx.drawImage(img, 0, 0);\r\n        imageData = canvas.toDataURL('image/png');\r\n        DOMURL.revokeObjectURL(url);\r\n        if (imageData !== null) {\r\n          resolve({ data: imageData, width: img.width, height: img.height, format: 'PNG' });\r\n        } else {\r\n          reject({ data: null, width: 0, height: 0, format: 'PNG' });\r\n        }\r\n      };\r\n      img.src = url;\r\n    });\r\n  }\r\n\r\n  convertHTMLToImage(componentId: string): Promise<PDFImageInfo> {\r\n    let imageData;\r\n    return new Promise((resolve, reject) => {\r\n      const svgItemList = document.querySelectorAll(componentId + ' svg');\r\n      for (const svgItem of svgItemList) {\r\n        // If there are SVG Items into your HTML, try to get the styles into the SVG\r\n        generateStyleDefs(svgItem, this.logger);\r\n      }\r\n      // Convert HTML into PNG Image\r\n      const htmlItem: HTMLElement | null = document.querySelector(componentId);\r\n      if (htmlItem) {\r\n        Html2ToCanvas(htmlItem, { scrollX: 0, scrollY: 0 }).then((canvas: HTMLCanvasElement) => {\r\n          imageData = canvas.toDataURL('image/png');\r\n          if (imageData !== null) {\r\n            resolve({ data: imageData, width: canvas.width, height: canvas.height, format: 'PNG' });\r\n          } else {\r\n            reject({ data: null, width: 0, height: 0, format: 'PNG' });\r\n          }\r\n        });\r\n      } else {\r\n        reject({ data: null, width: 0, height: 0, format: 'PNG' });\r\n      }\r\n    });\r\n  }\r\n}\r\n\r\ndeclare module '@ember/service' {\r\n  interface Registry {\r\n    snapshot: SnapShotService;\r\n  }\r\n}\r\n","import Service from '@ember/service';\r\nimport { waitForPromise } from '@ember/test-waiters';\r\nimport Circuits from '@ebiz/aditools-schematic';\r\n\r\ntype SVGPreparedCircuit = ReturnType<typeof Circuits.prepare>;\r\n\r\nexport default class SvgCacheService extends Service {\r\n  circuit: Record<string, Promise<SVGPreparedCircuit | null>> = {};\r\n\r\n  _loadSVG(path: string): Promise<SVGPreparedCircuit | null> {\r\n    return waitForPromise(\r\n      Circuits.loadFile(path).then((svg) => {\r\n        return svg ? Circuits.prepare(svg) : null;\r\n      }),\r\n      path,\r\n    );\r\n  }\r\n\r\n  getSVG(path: string): Promise<SVGPreparedCircuit | null> {\r\n    let value = this.circuit[path];\r\n    if (!value) {\r\n      value = this._loadSVG(path);\r\n      this.circuit[path] = value;\r\n    }\r\n    return value;\r\n  }\r\n}\r\n\r\ndeclare module '@ember/service' {\r\n  interface Registry {\r\n    'svg-cache': SvgCacheService;\r\n  }\r\n}\r\n","import Service from '@ember/service';\r\nimport { inject as service } from '@ember/service';\r\nimport { waitForPromise } from '@ember/test-waiters';\r\n\r\nimport type LoggingService from './logger';\r\nimport type AnalyticsService from '@ebiz/ember-aditools-analytics/services/aditools-analytics';\r\n\r\nexport interface ToolsAPIResponse<T> {\r\n  status: number;\r\n  data?: T;\r\n}\r\nexport default class ToolsAPIService extends Service {\r\n  @service('aditools-analytics') declare analytics: AnalyticsService;\r\n  @service('aditools-site') declare siteconfig: { [key: string]: string };\r\n  @service declare logger: LoggingService;\r\n  abortController: AbortController = new AbortController();\r\n\r\n  willDestroy(): void {\r\n    this.abortController.abort();\r\n  }\r\n\r\n  getResponse(process: string, data: string): Promise<Response> {\r\n    return waitForPromise(\r\n      fetch(`${this.siteconfig['ApiUrl']}/${process}/${this.siteconfig['AdiLocale']}`, {\r\n        headers: {\r\n          Accept: 'application/json',\r\n          'Content-Type': 'application/json',\r\n          'Cache-Control': 'no-store',\r\n        },\r\n        body: data,\r\n        method: 'POST',\r\n        signal: this.abortController.signal,\r\n      }),\r\n    );\r\n  }\r\n\r\n  //download\r\n  async downloadDesign(process: string, data: string): Promise<[string, string, Blob | null]> {\r\n    let processWord = process || 'download';\r\n    try {\r\n      let response = await this.getResponse(processWord, '\"' + encodeURIComponent(data) + '\"');\r\n      if (response.ok) {\r\n        let contentType = response.headers.get('Content-Type');\r\n        let contentDisposition = response.headers.get('Content-Disposition');\r\n        let fileName = '';\r\n        if (contentDisposition && contentDisposition.indexOf('attachment') !== -1) {\r\n          let filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\r\n          let matches = filenameRegex.exec(contentDisposition);\r\n          if (matches !== null && matches[1]) {\r\n            fileName = matches[1].replace(/['\"]/g, '');\r\n          } else {\r\n            fileName = 'DesignFiles.zip';\r\n          }\r\n        } else {\r\n          fileName = 'DesignFiles.zip';\r\n        }\r\n        let responseBlob = await response.blob();\r\n        return Promise.resolve([contentType ? contentType : '', fileName, responseBlob]);\r\n      } else {\r\n        return Promise.resolve(['', '', null]);\r\n      }\r\n    } catch (error: unknown) {\r\n      let namedError = error as { message: string };\r\n      this.logger.error(`Download failed: ${namedError.message}`);\r\n      return Promise.resolve(['', '', null]);\r\n    }\r\n  }\r\n\r\n  // feedback\r\n  deliverFeedback(process: string, name: string, email: string, feedback: string): Promise<ToolsAPIResponse<unknown>> {\r\n    let processWord = process || 'feedback';\r\n    let feedbackData = {\r\n      ToolId: 2,\r\n      Name: encodeURIComponent(name),\r\n      Email: encodeURIComponent(email),\r\n      Feedback: encodeURIComponent(feedback),\r\n    };\r\n    return this.getResponse(processWord, JSON.stringify(feedbackData))\r\n      .then((response) => {\r\n        return response.json();\r\n      })\r\n      .catch((error) => {\r\n        this.logger.error(`Give feedback failed: ${error}`);\r\n        return { status: -1 };\r\n      });\r\n  }\r\n\r\n  // share\r\n  shareDesign(\r\n    process: string,\r\n    name: string,\r\n    sender: string,\r\n    recipients: string,\r\n    design: Record<string, unknown>,\r\n  ): Promise<ToolsAPIResponse<unknown>> {\r\n    let processWord = process || 'share';\r\n    let now = new Date();\r\n    let ticks = now.getTime();\r\n    let fileName = name.length > 0 ? name.replace(/[/\\\\?*:|\"<>]/g, '') : 'SharedDesign_PD' + ticks.toString();\r\n    let saveDateStamp =\r\n      now.getFullYear() +\r\n      '-' +\r\n      ('0' + (now.getMonth() + 1)).slice(-2) +\r\n      '-' +\r\n      ('0' + now.getDate()).slice(-2) +\r\n      ' ' +\r\n      ('0' + (((now.getHours() + 11) % 12) + 1)).slice(-2) +\r\n      ':' +\r\n      ('0' + now.getMinutes()).slice(-2) +\r\n      ':' +\r\n      ('0' + now.getSeconds()).slice(-2) +\r\n      ' ' +\r\n      (now.getHours() >= 12 ? 'PM' : 'AM');\r\n    let toolName = 'PD';\r\n    let toolVersion = '1.1';\r\n    let jsonVersion = '1.0.0';\r\n    let shareData = {\r\n      ToolId: 2,\r\n      Name: name,\r\n      Description: name,\r\n      FileName: fileName,\r\n      DesignData: {\r\n        Name: name,\r\n        Description: name,\r\n        Tool: toolName,\r\n        Version: toolVersion,\r\n        Design: design,\r\n        CreatedDate: saveDateStamp,\r\n        UpdatedDate: saveDateStamp,\r\n        JsonVersion: jsonVersion,\r\n      },\r\n      EmailRecipients: recipients,\r\n      SenderName: sender,\r\n    };\r\n    return this.getResponse(processWord, '\"' + encodeURIComponent(JSON.stringify(shareData)) + '\"')\r\n      .then((response) => {\r\n        return response.json();\r\n      })\r\n      .catch((error) => {\r\n        this.logger.error(`Share design failed: ${error}`);\r\n        return { status: -1 };\r\n      });\r\n  }\r\n}\r\n\r\ndeclare module '@ember/service' {\r\n  interface Registry {\r\n    toolsapi: ToolsAPIService;\r\n  }\r\n}\r\n","import { numberToUserDisplay } from '@ebiz/pretty-num';\r\nimport ModelService from 'photodiode/services/model';\r\nimport ENV from '../config/environment';\r\nimport type AnalyticsService from '@ebiz/ember-aditools-analytics/services/aditools-analytics';\r\n\r\nexport interface cdpAnalyticsOptions {\r\n  sId?: string;\r\n  reqId?: string;\r\n  name?: string;\r\n  url?: string;\r\n  timeStart?: Date;\r\n  timeEnd?: Date;\r\n  status?: { code: number; message: string };\r\n}\r\n\r\ntype cdpPayload = {\r\n  sId?: string;\r\n  reqId?: string;\r\n  name?: string;\r\n  url?: string;\r\n  time?: number;\r\n  status?: number;\r\n  statusText?: string;\r\n  stamp?: string;\r\n};\r\n\r\nlet getElapsedInformation = function (currTime: number, startTime: number) {\r\n  let endDateTime = new Date(currTime),\r\n    startDateTime = new Date(startTime),\r\n    deltaLoadTime = +currTime - +startTime;\r\n\r\n  return 'startDate: ' + startDateTime + ', endDate: ' + endDateTime + ', loadTime(ms): ' + deltaLoadTime;\r\n};\r\n\r\nlet buildAnalyticsData = function (model: ModelService) {\r\n  let payload =\r\n    'Vr: {VrBias}; {VrPolarity}; PD cap: {PdCap}; Rshunt: {Rshunt}; Ipeak: {Ipeak}; Vpeak: {Vpeak}; Pulse Width: {PulseWidth}; Slider: {SliderSetting}; Stages: {NumStages}; Op Amps: {OpAmps}';\r\n  payload = payload.replace('{VrBias}', numberToUserDisplay(model.state.Vr, 'Engineering', 3, { showZeroes: false }));\r\n  payload = payload.replace('{VrPolarity}', model.state.Bias === '+' ? 'positive' : 'negative');\r\n  payload = payload.replace('{PdCap}', numberToUserDisplay(model.state.Cd, 'Engineering', 3, { showZeroes: false }));\r\n  payload = payload.replace('{Rshunt}', numberToUserDisplay(model.state.Rsh, 'Engineering', 3, { showZeroes: false }));\r\n  payload = payload.replace('{Ipeak}', numberToUserDisplay(model.state.Ip, 'Engineering', 3, { showZeroes: false }));\r\n  payload = payload.replace('{Vpeak}', numberToUserDisplay(model.state.Vp, 'Engineering', 3, { showZeroes: false }));\r\n  payload = payload.replace(\r\n    '{PulseWidth}',\r\n    numberToUserDisplay(\r\n      model.state.SpeedPreference === 'Bandwidth' ? 2 / model.state.TargetSpeed : model.state.TargetSpeed,\r\n      'Engineering',\r\n      3,\r\n      { showZeroes: false },\r\n    ),\r\n  );\r\n  let sliderValue = (10 * Math.log(6 * model.state.Peaking)) / Math.log(8) + 0.1;\r\n  payload = payload.replace('{SliderSetting}', parseFloat(sliderValue.toPrecision(2)).toString());\r\n  payload = payload.replace('{NumStages}', model.state.StageCount.toString());\r\n  let opAmpList = [];\r\n  if (model.opamps) {\r\n    opAmpList.push(model.opAmp1.partNumber + ' - ' + (model.state.OpAmp1 ? 'Locked' : 'Not Locked'));\r\n    if (model.state.StageCount > 1 && model.opAmp2) {\r\n      opAmpList.push(model.opAmp2.partNumber + ' - ' + (model.state.OpAmp2 ? 'Locked' : 'Not Locked'));\r\n    }\r\n  }\r\n  payload = payload.replace('{OpAmps}', opAmpList.length > 0 ? opAmpList.join(', ') : '');\r\n  return payload;\r\n};\r\n\r\nexport function sendTabNavigationAnalytics(\r\n  oldTab: string,\r\n  newTab: string,\r\n  trigger: string,\r\n  analytics: AnalyticsService,\r\n): void {\r\n  if (oldTab && trigger) {\r\n    let eventName = 'navigation';\r\n    let payloadText = (trigger === 'TAB' ? 'Button Bar: ' : 'Button Individual: ') + oldTab + ' to ' + newTab;\r\n    analytics.setWebEvent(ENV.toolname, eventName, payloadText);\r\n  }\r\n}\r\n\r\nexport function loadTimeAnalytics(startDate: number, endDate: number, analytics: AnalyticsService): void {\r\n  let eventName = 'appLoad';\r\n  let payloadText = getElapsedInformation(endDate, startDate);\r\n  analytics.setWebEvent(ENV.toolname, eventName, payloadText);\r\n}\r\n\r\nexport function toolbarLinkClickAnalytics(menuLink: string, activeTab: string, analytics: AnalyticsService): void {\r\n  let eventName = 'Toolbar Link';\r\n  let payloadText = `${menuLink}; ${activeTab}`;\r\n  analytics.setWebEvent(ENV.toolname, eventName, payloadText);\r\n}\r\n\r\nexport function downloadDesignAnalytics(event: string, model: ModelService, analytics: AnalyticsService): void {\r\n  let eventName = event === 'all' ? 'Get all files' : 'Get spice only';\r\n  let payloadText = buildAnalyticsData(model);\r\n  analytics.setWebEvent(ENV.toolname, eventName, payloadText);\r\n}\r\n\r\nexport function saveDesignAnalytics(model: ModelService, analytics: AnalyticsService): void {\r\n  let eventName = 'save';\r\n  let payloadText = buildAnalyticsData(model);\r\n  analytics.setWebEvent(ENV.toolname, eventName, payloadText);\r\n}\r\n\r\nexport function loadDesignAnalytics(designData: Record<string, unknown>, analytics: AnalyticsService): void {\r\n  let eventName = 'load';\r\n  let now = new Date();\r\n  let loadDate =\r\n    now.getFullYear() +\r\n    '-' +\r\n    ('0' + (now.getMonth() + 1)).slice(-2) +\r\n    '-' +\r\n    ('0' + now.getDate()).slice(-2) +\r\n    ' ' +\r\n    ('0' + (((now.getHours() + 11) % 12) + 1)).slice(-2) +\r\n    ':' +\r\n    ('0' + now.getMinutes()).slice(-2) +\r\n    ':' +\r\n    ('0' + now.getSeconds()).slice(-2) +\r\n    ' ' +\r\n    (now.getHours() >= 12 ? 'PM' : 'AM');\r\n  let payload = {\r\n    designName: designData['Name'],\r\n    designDescription: designData['Description'],\r\n    toolName: ENV.toolname,\r\n    loadDate: loadDate,\r\n  };\r\n  analytics.setWebEvent(ENV.toolname, eventName, JSON.stringify(payload));\r\n}\r\n\r\nexport function loadDesignUnsupportedPartAnalytics(message: string, analytics: AnalyticsService): void {\r\n  let eventName = 'Load Design Error';\r\n  let payload = message?.split(',').join(', ') + ' in design no longer supported';\r\n  analytics.setWebEvent(ENV.toolname, eventName, payload);\r\n}\r\n\r\nexport function shareDesignAnalytics(\r\n  description: string,\r\n  sender: string,\r\n  recipients: string,\r\n  designData: Record<string, unknown>,\r\n  analytics: AnalyticsService,\r\n): void {\r\n  let eventName = 'toolShare';\r\n  let payload = {\r\n    designDescription: description,\r\n    senderName: sender,\r\n    emailRecipients: recipients,\r\n    projectData: designData,\r\n  };\r\n  analytics.setWebEvent(ENV.toolname, eventName, JSON.stringify(payload));\r\n}\r\n\r\nexport function sendOpenCloseDialogAnalytics(\r\n  control: string,\r\n  status: string,\r\n  model: ModelService,\r\n  analytics: AnalyticsService,\r\n): void {\r\n  let eventName = control + (status === 'O' ? ' first click' : status === 'S' ? ' second click' : ' cancel');\r\n  let payloadText = buildAnalyticsData(model);\r\n  analytics.setWebEvent(ENV.toolname, eventName, payloadText);\r\n}\r\n\r\nexport function loadCDPAnalytics(step: string, options: cdpAnalyticsOptions, analytics: AnalyticsService): void {\r\n  let eventName = 'CDP Load ' + step;\r\n  let payload: cdpPayload = {};\r\n  if (options.sId) {\r\n    payload['sId'] = options.sId.substr(0, 8);\r\n  }\r\n  if (options.reqId) {\r\n    payload['reqId'] = options.reqId.substr(0, 8);\r\n  }\r\n  if (options.name) {\r\n    payload['name'] = options.name;\r\n  }\r\n  if (options.url) {\r\n    payload['url'] = options.url;\r\n  }\r\n  if (options.status) {\r\n    payload['status'] = options.status.code;\r\n    payload['statusText'] = options.status.message;\r\n  }\r\n  if (options.timeStart) {\r\n    if (options.timeEnd) {\r\n      payload['time'] = +options.timeEnd - +options.timeStart;\r\n      payload['stamp'] = options.timeEnd.toISOString();\r\n    } else {\r\n      payload['stamp'] = options.timeStart.toISOString();\r\n    }\r\n  }\r\n  analytics.setWebEvent(ENV.toolname, eventName, JSON.stringify(payload));\r\n}\r\n","import { numberToUserDisplay } from '@ebiz/pretty-num';\r\nimport { SensorData } from '../models/sensor';\r\nimport ModelService from '../services/model';\r\nimport PersistenceService from '../services/persistence';\r\nimport PDFReport from '@ebiz/aditools-design-report';\r\nimport type { PdfImageData, PdfTableData } from '@ebiz/aditools-design-report';\r\nimport type IntlService from 'ember-intl/services/intl';\r\n\r\n// import OpampService from '../services/opamp';\r\n// import SensorService from '../services/sensor';\r\nimport ENV from '../config/environment';\r\nimport { GraphLine, GraphPoint } from '@ebiz/ember-aditools-graph';\r\n\r\nconst ROOT_URL = window.location.origin;\r\nconst COVER_IMAGE_RESOURCE = `${ENV.rootURL}assets/images/PDFDesignFrontPage.jpg`;\r\n\r\ninterface PDFStructure {\r\n  dictionary: Array<{ name: string; value: string }>;\r\n  applicationDisplayName: string;\r\n  userName: string;\r\n  heading: string;\r\n  subheading: string;\r\n  fields: Array<{ name: string; value: string }>;\r\n  images: Array<{ name: string; value: string }>;\r\n  designInfo: { name: string; description: string; dataSheetUrl: unknown };\r\n  date: string;\r\n  bomTableData: Array<Array<string>>;\r\n}\r\n\r\ninterface BOMHash {\r\n  count: number;\r\n  designators: string[];\r\n  value: string;\r\n  package: string;\r\n  material: string;\r\n  tolerance: string;\r\n  prodURL?: string;\r\n}\r\n\r\nlet cleanImage = function (image: string): string {\r\n  let stringToRemove = 'data:image/png;base64,';\r\n  let imageString = image.toString();\r\n  imageString = imageString.replace(stringToRemove, '');\r\n  return imageString;\r\n};\r\n\r\nlet generatePDFTitlePageDescription = function (\r\n  designName: string,\r\n  userNameString: string,\r\n  pdfDate: string,\r\n  intl: IntlService,\r\n): string {\r\n  let titlePageText = '';\r\n  if (isNullOrWhiteSpace(designName) && isNullOrWhiteSpace(userNameString)) {\r\n    // Username and design missing.\r\n    titlePageText = intl.t('download.pdf-content.pdf-desc-no-name-desc', { date: pdfDate }).toString();\r\n  } else if (isNullOrWhiteSpace(designName) && !isNullOrWhiteSpace(userNameString)) {\r\n    // Design name missing and username is present.\r\n    titlePageText = intl\r\n      .t('download.pdf-content.pdf-desc-no-design-name', { user: userNameString.trim(), date: pdfDate })\r\n      .toString();\r\n  } else if (isNullOrWhiteSpace(userNameString) && !isNullOrWhiteSpace(designName)) {\r\n    // Username name missing and design name is present.\r\n    titlePageText = intl\r\n      .t('download.pdf-content.pdf-desc-no-user-name', { desc: designName.trim(), date: pdfDate })\r\n      .toString();\r\n  } else {\r\n    // Username and design presnt.\r\n    titlePageText = intl\r\n      .t('download.pdf-content.pdf-desc', { desc: designName.trim(), user: userNameString.trim(), date: pdfDate })\r\n      .toString();\r\n  }\r\n  return titlePageText;\r\n};\r\n\r\nlet isNullOrWhiteSpace = function (str: string): boolean {\r\n  // Check if the string is undefined.\r\n  if (str)\r\n    // Check if the string is empty, null or white space.\r\n    return str === null || str.match(/^ *$/) !== null;\r\n  else return true;\r\n};\r\n\r\nlet bomForPDF = function (bom: Array<BOMHash>, intl: IntlService): Array<Array<string>> {\r\n  let bomArray: Array<Array<string>> = [];\r\n  bomArray.push([\r\n    intl.t('figures.bom.quantity').toString(),\r\n    intl.t('figures.bom.designator').toString(),\r\n    intl.t('figures.bom.value').toString(),\r\n    intl.t('figures.bom.package').toString(),\r\n    intl.t('figures.bom.material').toString(),\r\n    intl.t('figures.bom.tolerance').toString(),\r\n  ]);\r\n  for (const item of bom) {\r\n    bomArray.push([\r\n      item.count.toString(),\r\n      item.designators.join(),\r\n      item.value,\r\n      item.package,\r\n      item.material,\r\n      item.tolerance,\r\n    ]);\r\n  }\r\n  return bomArray;\r\n};\r\n\r\nlet getFullSensorName = function (sensor: string, sensorList?: Array<SensorData>): string {\r\n  let sensorName = '';\r\n  if (sensorList && sensor.length > 0) {\r\n    const sensorData = sensorList.find((item) => item.partNumber === sensor);\r\n    if (sensorData) {\r\n      sensorName = sensorData.manufacturer + ' ' + sensorData.partNumber;\r\n    }\r\n  }\r\n  return sensorName;\r\n};\r\n\r\nlet createCsvData = function (headers: string[], data: GraphLine[], columnSelectors: number[][]): string[][] {\r\n  let rows = [];\r\n\r\n  // Lay out the header row\r\n  let headerdata = [];\r\n  for (let header of headers) {\r\n    headerdata.push(header);\r\n  }\r\n  rows.push(headerdata);\r\n\r\n  // Now lay out the numeric rows\r\n  let count = data[0] ? data[0].length : 0;\r\n  // walk the rows\r\n  for (let rowIndex = 0; rowIndex < count; rowIndex++) {\r\n    let row = [];\r\n    // walk the columns\r\n    for (let columnSelector of columnSelectors) {\r\n      let dataGraphIndex = data[columnSelector[0] as number] as GraphLine;\r\n      let dataGraphRowIndex = dataGraphIndex[rowIndex] as GraphPoint;\r\n      let cellValue = dataGraphRowIndex[columnSelector[1] as number];\r\n      if (cellValue) {\r\n        row.push(cellValue.toString());\r\n      }\r\n    }\r\n    rows.push(row);\r\n  }\r\n  return rows;\r\n};\r\n\r\nexport function buildDesignFile(persistence: PersistenceService): DownloadFile {\r\n  let data = persistence.getDesign();\r\n  let now = new Date();\r\n  let ticks = now.getTime();\r\n  let name = 'SavedDesignPD' + ticks.toString() + '.json';\r\n  let description = 'Photodiode Design';\r\n  let saveDateStamp =\r\n    now.getFullYear() +\r\n    '-' +\r\n    ('0' + (now.getMonth() + 1)).slice(-2) +\r\n    '-' +\r\n    ('0' + now.getDate()).slice(-2) +\r\n    ' ' +\r\n    ('0' + (((now.getHours() + 11) % 12) + 1)).slice(-2) +\r\n    ':' +\r\n    ('0' + now.getMinutes()).slice(-2) +\r\n    ':' +\r\n    ('0' + now.getSeconds()).slice(-2) +\r\n    ' ' +\r\n    (now.getHours() >= 12 ? 'PM' : 'AM');\r\n  let toolName = 'PD';\r\n  let jsonVersion = '1.0.0';\r\n  let designData = {\r\n    Name: name,\r\n    Description: description,\r\n    Tool: toolName,\r\n    Design: data,\r\n    CreatedDate: saveDateStamp,\r\n    UpdatedDate: saveDateStamp,\r\n    JsonVersion: jsonVersion,\r\n  };\r\n  let jsonStringData = JSON.stringify(designData, null, '\\t');\r\n  return {\r\n    name: 'design.json',\r\n    value: jsonStringData,\r\n    location: '',\r\n    type: 'DESIGNJSON',\r\n  };\r\n}\r\n\r\nexport function buildPDFData(\r\n  model: ModelService,\r\n  imageList: Array<PDFImageInfo>,\r\n  name: string,\r\n  desc: string,\r\n  intl: IntlService,\r\n): Array<DownloadFile> {\r\n  let filesToUpload = [];\r\n  let now = new Date();\r\n  let saveDateStamp =\r\n    ('0' + (now.getMonth() + 1)).slice(-2) + '/' + ('0' + now.getDate()).slice(-2) + '/' + now.getFullYear();\r\n  let designName = name && name.trim().length > 0 ? name : 'Photodiode Design';\r\n  let designDesc = desc && desc.trim().length > 0 ? desc : 'Photodiode Design';\r\n  let pdfData: PDFStructure = {\r\n    dictionary: [\r\n      { name: 'designDescription', value: generatePDFTitlePageDescription(designName, '', saveDateStamp, intl) },\r\n      { name: 'ieImageMissing', value: intl.t('download.pdf-content.pdf-data-ie-image-missing').toString() },\r\n      { name: 'bomPageTitle', value: intl.t('download.pdf-content.pdf-page-headers.bill-of-materials').toString() },\r\n    ],\r\n    applicationDisplayName: intl.t('download.pdf-content.pdf-tool-name').toString(),\r\n    userName: ' ',\r\n    heading: intl.t('download.pdf-content.pdf-heading').toString(),\r\n    subheading: intl.t('download.pdf-content.pdf-subheading').toString(),\r\n    fields: [\r\n      {\r\n        name: intl.t('download.pdf-content.pdf-data-fields.reverse-voltage').toString(),\r\n        value:\r\n          numberToUserDisplay(model.state.Vr, 'Engineering', 3, { showZeroes: false, supplySpace: true }) +\r\n          intl.t('units.V').toString(),\r\n      },\r\n      {\r\n        name: intl.t('download.pdf-content.pdf-data-fields.photodiode-bias').toString(),\r\n        value:\r\n          model.state.Bias === '+'\r\n            ? intl.t('settings.photodiode.reverse-voltage-positive').toString()\r\n            : intl.t('settings.photodiode.reverse-voltage-negative').toString(),\r\n      },\r\n      {\r\n        name: intl.t('download.pdf-content.pdf-data-fields.capacitance').toString(),\r\n        value:\r\n          numberToUserDisplay(model.state.Cd, 'Engineering', 3, { showZeroes: false, supplySpace: true }) +\r\n          intl.t('units.F').toString(),\r\n      },\r\n      {\r\n        name: intl.t('download.pdf-content.pdf-data-fields.shunt-resistance').toString(),\r\n        value:\r\n          numberToUserDisplay(model.state.Rsh, 'Engineering', 3, { showZeroes: false, supplySpace: true }) +\r\n          intl.t('units.R').toString(),\r\n      },\r\n      {\r\n        name: intl.t('download.pdf-content.pdf-data-fields.peak-current').toString(),\r\n        value:\r\n          numberToUserDisplay(model.state.Ip, 'Engineering', 3, { showZeroes: false, supplySpace: true }) +\r\n          intl.t('units.A').toString(),\r\n      },\r\n      {\r\n        name: intl.t('units.Q'),\r\n        value: numberToUserDisplay(model.frequencyResponseDb.Q, 'Standard', 3),\r\n      },\r\n      {\r\n        name: intl.t('download.pdf-content.pdf-data-fields.peak-voltage').toString(),\r\n        value:\r\n          numberToUserDisplay(model.state.Vp, 'Engineering', 3, { showZeroes: false, supplySpace: true }) +\r\n          intl.t('units.V').toString(),\r\n      },\r\n      {\r\n        name: intl.t('download.pdf-content.pdf-data-fields.requested-bandwidth').toString(),\r\n        value:\r\n          numberToUserDisplay(\r\n            model.state.SpeedPreference === 'PulseWidth' ? 2 / model.state.TargetSpeed : model.state.TargetSpeed,\r\n            'Engineering',\r\n            3,\r\n            { showZeroes: false, supplySpace: true },\r\n          ) + intl.t('units.hertz').toString(),\r\n      },\r\n      {\r\n        name: intl.t('download.pdf-content.pdf-data-fields.sensor').toString(),\r\n        value:\r\n          model.state.Photodiode && model.state.Photodiode !== ''\r\n            ? getFullSensorName(model.state.Photodiode, model.sensors)\r\n            : intl.t('figures.schematic.photodiode-model-custom').toString(),\r\n      },\r\n      {\r\n        name: intl.t('download.pdf-content.pdf-data-fields.stages').toString(),\r\n        value:\r\n          model.state.StageCount === 1\r\n            ? intl.t('download.pdf-content.pdf-data-fields.one-stage').toString()\r\n            : intl.t('download.pdf-content.pdf-data-fields.two-stage').toString(),\r\n      },\r\n    ],\r\n    images: [\r\n      {\r\n        name: intl.t('download.pdf-content.pdf-page-headers.circuit'),\r\n        value: cleanImage(imageList[0] ? imageList[0].data : ''),\r\n      },\r\n      {\r\n        name: intl.t('download.pdf-content.pdf-page-headers.pulse-response'),\r\n        value: cleanImage(imageList[1] ? imageList[1].data : ''),\r\n      },\r\n      {\r\n        name: intl.t('download.pdf-content.pdf-page-headers.frequency-response'),\r\n        value: cleanImage(imageList[2] ? imageList[2].data : ''),\r\n      },\r\n      {\r\n        name: intl.t('download.pdf-content.pdf-page-headers.spectral-noise'),\r\n        value: cleanImage(imageList[3] ? imageList[3].data : ''),\r\n      },\r\n      {\r\n        name: intl.t('download.pdf-content.pdf-page-headers.noise-gain'),\r\n        value: cleanImage(imageList[4] ? imageList[4].data : ''),\r\n      },\r\n      {\r\n        name: intl.t('download.pdf-content.pdf-page-headers.snr'),\r\n        value: cleanImage(imageList[5] ? imageList[5].data : ''),\r\n      },\r\n    ],\r\n    designInfo: { name: designName, description: designDesc, dataSheetUrl: null },\r\n    date: saveDateStamp,\r\n    bomTableData: bomForPDF(model.bom, intl),\r\n  };\r\n  filesToUpload.push({ name: 'Design.pdf', value: pdfData, location: '', type: 'DESIGNPDF' });\r\n  return filesToUpload;\r\n}\r\n\r\nexport function buildPDFBinaryData(\r\n  model: ModelService,\r\n  images: Array<PDFImageInfo>,\r\n  name: string,\r\n  desc: string,\r\n  fonts: Array<PDFFontInfo>,\r\n  intl: IntlService,\r\n): Promise<Array<DownloadFile>> {\r\n  let filesToUpload: Array<DownloadFile> = [];\r\n  let now = new Date();\r\n  let saveDateStamp =\r\n    ('0' + (now.getMonth() + 1)).slice(-2) + '/' + ('0' + now.getDate()).slice(-2) + '/' + now.getFullYear();\r\n  let designName = name && name.trim().length > 0 ? name : 'Photodiode Design';\r\n  let designDesc = desc && desc.trim().length > 0 ? desc : '';\r\n  let fields: Array<{ name: string; value: string }> = [\r\n    {\r\n      name: intl.t('download.pdf-content.pdf-data-fields.reverse-voltage').toString(),\r\n      value:\r\n        numberToUserDisplay(model.state.Vr, 'Engineering', 3, { showZeroes: false, supplySpace: true }) +\r\n        intl.t('units.V').toString(),\r\n    },\r\n    {\r\n      name: intl.t('download.pdf-content.pdf-data-fields.photodiode-bias').toString(),\r\n      value:\r\n        model.state.Bias === '+'\r\n          ? intl.t('settings.photodiode.reverse-voltage-positive').toString()\r\n          : intl.t('settings.photodiode.reverse-voltage-negative').toString(),\r\n    },\r\n    {\r\n      name: intl.t('download.pdf-content.pdf-data-fields.capacitance').toString(),\r\n      value:\r\n        numberToUserDisplay(model.state.Cd, 'Engineering', 3, { showZeroes: false, supplySpace: true }) +\r\n        intl.t('units.F').toString(),\r\n    },\r\n    {\r\n      name: intl.t('download.pdf-content.pdf-data-fields.shunt-resistance').toString(),\r\n      value:\r\n        numberToUserDisplay(model.state.Rsh, 'Engineering', 3, { showZeroes: false, supplySpace: true }) +\r\n        intl.t('units.R').toString(),\r\n    },\r\n    {\r\n      name: intl.t('download.pdf-content.pdf-data-fields.peak-current').toString(),\r\n      value:\r\n        numberToUserDisplay(model.state.Ip, 'Engineering', 3, { showZeroes: false, supplySpace: true }) +\r\n        intl.t('units.A').toString(),\r\n    },\r\n    {\r\n      name: intl.t('units.Q'),\r\n      value: numberToUserDisplay(model.frequencyResponseDb.Q, 'Standard', 3),\r\n    },\r\n    {\r\n      name: intl.t('download.pdf-content.pdf-data-fields.peak-voltage').toString(),\r\n      value:\r\n        numberToUserDisplay(model.state.Vp, 'Engineering', 3, { showZeroes: false, supplySpace: true }) +\r\n        intl.t('units.V').toString(),\r\n    },\r\n    {\r\n      name: intl.t('download.pdf-content.pdf-data-fields.requested-bandwidth').toString(),\r\n      value:\r\n        numberToUserDisplay(\r\n          model.state.SpeedPreference === 'PulseWidth' ? 2 / model.state.TargetSpeed : model.state.TargetSpeed,\r\n          'Engineering',\r\n          3,\r\n          { showZeroes: false, supplySpace: true },\r\n        ) + intl.t('units.hertz').toString(),\r\n    },\r\n    {\r\n      name: intl.t('download.pdf-content.pdf-data-fields.sensor').toString(),\r\n      value:\r\n        model.state.Photodiode && model.state.Photodiode !== ''\r\n          ? getFullSensorName(model.state.Photodiode, model.sensors)\r\n          : intl.t('figures.schematic.photodiode-model-custom').toString(),\r\n    },\r\n    {\r\n      name: intl.t('download.pdf-content.pdf-data-fields.stages').toString(),\r\n      value:\r\n        model.state.StageCount === 1\r\n          ? intl.t('download.pdf-content.pdf-data-fields.one-stage').toString()\r\n          : intl.t('download.pdf-content.pdf-data-fields.two-stage').toString(),\r\n    },\r\n  ];\r\n\r\n  let imagesList: Array<PdfImageData> = [\r\n    {\r\n      name: intl.t('download.pdf-content.pdf-page-headers.circuit'),\r\n      value: cleanImage(images[0] ? images[0].data : ''),\r\n      width: images[0] ? images[0].width : 0,\r\n      height: images[0] ? images[0].height : 0,\r\n      format: images[0] ? images[0].format : '',\r\n    },\r\n    {\r\n      name: intl.t('download.pdf-content.pdf-page-headers.pulse-response'),\r\n      value: cleanImage(images[1] ? images[1].data : ''),\r\n      width: images[1] ? images[1].width : 0,\r\n      height: images[1] ? images[1].height : 0,\r\n      format: images[1] ? images[1].format : '',\r\n    },\r\n    {\r\n      name: intl.t('download.pdf-content.pdf-page-headers.frequency-response'),\r\n      value: cleanImage(images[2] ? images[2].data : ''),\r\n      width: images[2] ? images[2].width : 0,\r\n      height: images[2] ? images[2].height : 0,\r\n      format: images[2] ? images[2].format : '',\r\n    },\r\n    {\r\n      name: intl.t('download.pdf-content.pdf-page-headers.spectral-noise'),\r\n      value: cleanImage(images[3] ? images[3].data : ''),\r\n      width: images[3] ? images[3].width : 0,\r\n      height: images[3] ? images[3].height : 0,\r\n      format: images[3] ? images[3].format : '',\r\n    },\r\n    {\r\n      name: intl.t('download.pdf-content.pdf-page-headers.noise-gain'),\r\n      value: cleanImage(images[4] ? images[4].data : ''),\r\n      width: images[4] ? images[4].width : 0,\r\n      height: images[4] ? images[4].height : 0,\r\n      format: images[4] ? images[4].format : '',\r\n    },\r\n    {\r\n      name: intl.t('download.pdf-content.pdf-page-headers.snr'),\r\n      value: cleanImage(images[5] ? images[5].data : ''),\r\n      width: images[5] ? images[5].width : 0,\r\n      height: images[5] ? images[5].height : 0,\r\n      format: images[5] ? images[5].format : '',\r\n    },\r\n  ];\r\n\r\n  let bomTable = bomForPDF(model.bom, intl);\r\n  let bomData: PdfTableData = {\r\n    title: intl.t('download.pdf-content.pdf-page-headers.bill-of-materials').toString(),\r\n    columns: bomTable[0] as string[],\r\n    columnWidths: [0.1, 0.29, 0.25, 0.12, 0.12, 0.12],\r\n    data: bomTable.slice(1),\r\n  };\r\n\r\n  return new Promise((resolve, reject) => {\r\n    let coverImage = `${ROOT_URL}/${COVER_IMAGE_RESOURCE.replace(/^\\/+/g, '')}`;\r\n    return fetch(coverImage, { headers: { 'Cache-Control': 'no-store' }, method: 'GET' })\r\n      .then((response) => {\r\n        if (response.status !== 200) {\r\n          throw `HTTP Request Failed: ${response.status} ${response.statusText}`;\r\n        }\r\n        return response.blob();\r\n      })\r\n      .then((content) => {\r\n        // 1. Read the Cover Image that will be used in the PDF\r\n        return new Promise((resolve, reject) => {\r\n          let reader = new FileReader();\r\n          reader.readAsDataURL(content);\r\n          reader.onloadend = function () {\r\n            let coverImageData = reader.result;\r\n            if (coverImageData !== null) {\r\n              resolve(coverImageData);\r\n            } else {\r\n              reject(coverImageData);\r\n            }\r\n          };\r\n        });\r\n      })\r\n      .then((coverImageData: unknown) => {\r\n        // 2. Create new Design Report Object\r\n        let pdfReport = new PDFReport(fonts);\r\n\r\n        // 3. Add Title Page\r\n        pdfReport.addTitlePage(\r\n          intl.t('download.pdf-content.pdf-tool-name').toString(),\r\n          generatePDFTitlePageDescription(designName, designDesc, saveDateStamp, intl),\r\n          { data: atob((coverImageData as string).replace('data:image/jpeg;base64,', '')), format: 'JPEG' },\r\n        );\r\n\r\n        // 4. Add Data Page\r\n        pdfReport.addDataPage(\r\n          intl.t('download.pdf-content.pdf-heading').toString(),\r\n          intl.t('download.pdf-content.pdf-subheading').toString(),\r\n          fields,\r\n        );\r\n\r\n        // 5. Add Image Pages\r\n        for (const [index, image] of imagesList.entries()) {\r\n          pdfReport.addImagePage(image);\r\n\r\n          // 6. Same hack as the API, where the BOM comes after the image\r\n          if (index === 0) {\r\n            pdfReport.addTablePage(bomData);\r\n          }\r\n        }\r\n\r\n        // Read Generated PDF File and convert to Base-64 String\r\n        let reader = new FileReader();\r\n        reader.readAsDataURL(pdfReport.toBlob() as Blob);\r\n        reader.onloadend = function () {\r\n          let pdfData = reader.result;\r\n          if (pdfData) {\r\n            pdfData = (pdfData as string).replace('data:application/pdf;base64,', '');\r\n            filesToUpload.push({ name: 'Design.pdf', value: pdfData, location: '', type: 'BINARY' });\r\n            resolve(filesToUpload);\r\n          } else {\r\n            reject(filesToUpload);\r\n          }\r\n        };\r\n      });\r\n  });\r\n}\r\n\r\nexport function buildBOMData(model: ModelService, intl: IntlService): DownloadFile {\r\n  let bomDownloadData = [];\r\n  let bomData = model.bom;\r\n  for (const bomItem of bomData) {\r\n    let bomItemCopy = Object.assign({}, bomItem);\r\n    let value = '';\r\n    if (bomItemCopy.value !== '') {\r\n      value = bomItemCopy.value.replace('Ω', ' ohm'); // replace Ω with ohm\r\n    }\r\n    if (bomItemCopy.package !== '') {\r\n      let pkg = bomItemCopy.package;\r\n      // Change Package Details to Conform to Locale Strings on Extra Parts\r\n      if (pkg.includes('{{header}}')) {\r\n        pkg = pkg.replace('{{header}}', intl.t('figures.bom.extra-components.header').toString());\r\n      } else if (pkg.includes('{{socket}}')) {\r\n        pkg = pkg.replace('{{socket}}', intl.t('figures.bom.extra-components.socket').toString());\r\n      } else if (pkg.includes('{{jumper}}')) {\r\n        pkg = pkg.replace('{{jumper}}', intl.t('figures.bom.extra-components.jumper').toString());\r\n      } else if (pkg.includes('{{test-pin}}')) {\r\n        pkg = pkg.replace('{{test-pin}}', intl.t('figures.bom.extra-components.test-pin').toString());\r\n      } else if (pkg.includes('{{sma-jack}}')) {\r\n        pkg = pkg.replace('{{sma-jack}}', intl.t('figures.bom.extra-components.sma-jack').toString());\r\n      } else if (pkg.includes('{{sma-male}}')) {\r\n        pkg = pkg.replace('{{sma-male}}', intl.t('figures.bom.extra-components.sma-male').toString());\r\n      }\r\n      value += ', ' + pkg;\r\n    }\r\n    if (bomItemCopy.material !== '') {\r\n      value += ', ' + bomItemCopy.material;\r\n    }\r\n    if (bomItemCopy.tolerance !== '') {\r\n      value += ', ' + bomItemCopy.tolerance;\r\n    }\r\n    bomDownloadData.push({ name: value, quantity: bomItemCopy.count, identifier: bomItemCopy.designators.join() });\r\n  }\r\n  return {\r\n    name: 'BOM.csv',\r\n    value: bomDownloadData,\r\n    location: '',\r\n    type: 'BOM',\r\n  };\r\n}\r\n\r\nexport function buildDataFiles(model: ModelService, intl: IntlService): Array<DownloadFile> {\r\n  let filesToUpload = [];\r\n\r\n  // Frequency Response\r\n  filesToUpload.push(buildFrequencyResponseCSV(model, intl));\r\n\r\n  // Pulse Response\r\n  filesToUpload.push(buildPulseResponseCSV(model, intl));\r\n\r\n  // Noise Gain\r\n  filesToUpload.push(buildNoiseGainCSV(model, intl));\r\n\r\n  // Spectral Noise\r\n  filesToUpload.push(buildSpectralNoiseCSV(model, intl));\r\n\r\n  return filesToUpload;\r\n}\r\n\r\nfunction buildFrequencyResponseCSV(model: ModelService, intl: IntlService): DownloadFile {\r\n  return {\r\n    name: intl.t('help.frequency-response.title') + '.csv',\r\n    value: createCsvData(\r\n      [\r\n        intl.t('download.data-files.frequency-response.frequency'),\r\n        intl.t('download.data-files.frequency-response.magnitude'),\r\n      ],\r\n      [model.frequencyResponseVA.graph.data],\r\n      [\r\n        [0, 0],\r\n        [0, 1],\r\n      ],\r\n    ),\r\n    location: 'Data Files',\r\n    type: 'CSV',\r\n  };\r\n}\r\n\r\nfunction buildPulseResponseCSV(model: ModelService, intl: IntlService): DownloadFile {\r\n  return {\r\n    name: intl.t('help.pulse-response.title') + '.csv',\r\n    value: createCsvData(\r\n      [\r\n        intl.t('download.data-files.pulse-response.time-axis'),\r\n        intl.t('download.data-files.pulse-response.pulse-response'),\r\n      ],\r\n      [model.pulseResponse.graph.data],\r\n      [\r\n        [0, 0],\r\n        [0, 1],\r\n      ],\r\n    ),\r\n    location: 'Data Files',\r\n    type: 'CSV',\r\n  };\r\n}\r\n\r\nfunction buildNoiseGainCSV(model: ModelService, intl: IntlService): DownloadFile {\r\n  return {\r\n    name: intl.t('help.noise-gain.title') + '.csv',\r\n    value: createCsvData(\r\n      [\r\n        intl.t('download.data-files.noise-gain.frequency'),\r\n        intl.t('download.data-files.noise-gain.noise-gain'),\r\n        intl.t('download.data-files.noise-gain.caps'),\r\n        intl.t('download.data-files.noise-gain.opamp-gain'),\r\n        intl.t('download.data-files.noise-gain.zero'),\r\n      ],\r\n      model.noiseGainVV.graph.data,\r\n      [\r\n        [0, 0],\r\n        [0, 1],\r\n        [1, 1],\r\n        [2, 1],\r\n        [3, 1],\r\n      ],\r\n    ),\r\n    location: 'Data Files',\r\n    type: 'CSV',\r\n  };\r\n}\r\n\r\nfunction buildSpectralNoiseCSV(model: ModelService, intl: IntlService): DownloadFile {\r\n  let titles1 = [\r\n    intl.t('download.data-files.spectral-noise.frequency'),\r\n    intl.t('download.data-files.spectral-noise.total'),\r\n    intl.t('download.data-files.spectral-noise.opv'),\r\n    intl.t('download.data-files.spectral-noise.opi'),\r\n    intl.t('download.data-files.spectral-noise.rf'),\r\n    intl.t('download.data-files.spectral-noise.rin'),\r\n  ];\r\n  let titles2 = [\r\n    intl.t('download.data-files.spectral-noise.frequency'),\r\n    intl.t('download.data-files.spectral-noise.total'),\r\n    intl.t('download.data-files.spectral-noise.opv'),\r\n    intl.t('download.data-files.spectral-noise.opi'),\r\n    intl.t('download.data-files.spectral-noise.rf'),\r\n    intl.t('download.data-files.spectral-noise.rin'),\r\n    intl.t('download.data-files.spectral-noise.opv2'),\r\n    intl.t('download.data-files.spectral-noise.opi2'),\r\n    intl.t('download.data-files.spectral-noise.rfilter'),\r\n  ];\r\n  let arrays1 = [\r\n    [0, 0],\r\n    [0, 1],\r\n    [1, 1],\r\n    [2, 1],\r\n    [3, 1],\r\n    [4, 1],\r\n  ];\r\n  let arrays2 = [\r\n    [5, 1],\r\n    [6, 1],\r\n    [7, 1],\r\n  ];\r\n  let oneStage = model.state.StageCount == 1 ? true : false;\r\n  let titles = oneStage ? titles1 : titles2;\r\n  let arrays = oneStage ? arrays1 : arrays1.concat(arrays2);\r\n  return {\r\n    name: intl.t('help.spectral-noise-density.title') + '.csv',\r\n    value: createCsvData(titles, model.spectralNoise.graph.data, arrays),\r\n    location: 'Data Files',\r\n    type: 'CSV',\r\n  };\r\n}\r\n","export function downloadFile(contentType: string, fileName: string, fileData: Blob | null): boolean {\r\n  let success = false;\r\n  if (fileData) {\r\n    let blob = new Blob([fileData], { type: contentType });\r\n    if (typeof window.navigator.msSaveBlob !== 'undefined') {\r\n      window.navigator.msSaveBlob(blob, fileName);\r\n    } else {\r\n      let URL = window.URL || window.webkitURL;\r\n      let downloadUrl: string = URL.createObjectURL(blob);\r\n\r\n      if (fileName) {\r\n        let a = document.createElement('a');\r\n        a.setAttribute('id', 'download-design-link');\r\n        if (typeof a.download === 'undefined') {\r\n          window.location.href = downloadUrl;\r\n        } else {\r\n          a.href = downloadUrl;\r\n          a.download = fileName;\r\n          a.click();\r\n        }\r\n      } else {\r\n        window.location.href = downloadUrl;\r\n      }\r\n      URL.revokeObjectURL(downloadUrl);\r\n    }\r\n    success = true;\r\n  }\r\n\r\n  return success;\r\n}\r\n","import { PSTData } from '@ebiz/ember-aditools-device-table/utils/device-table-pst';\r\nimport Logger from '../services/logger';\r\nimport * as AditoolsSpice from '@ebiz/aditools-spice/schematics';\r\nimport * as AditoolsSpiceParts from '@ebiz/aditools-spice/data/opamps.json';\r\n\r\nlet interpretParameter = function (\r\n  parameter: PSTParameter,\r\n  datatype: DataType,\r\n  datavalue: CardinalityType,\r\n): [string | null, string | null] {\r\n  if (\r\n    typeof parameter.value === 'undefined' ||\r\n    parameter.value === null ||\r\n    typeof parameter.value.length === 'undefined'\r\n  ) {\r\n    return [null, 'INVALID'];\r\n  }\r\n  if (parameter.value.length === 0 || (parameter.value.length === 1 && parameter.value[0] === '')) {\r\n    return [null, 'EMPTY'];\r\n  }\r\n  if (datatype === DataType.t_pulldown && datavalue === CardinalityType.c_multi) {\r\n    return [parameter.value.join('; '), null];\r\n  } else {\r\n    return [parameter.value[0] as string, null];\r\n  }\r\n};\r\n\r\n// This function determines which parameters are empty, missing, or invalid,\r\n// whether they are optional and thus being missing or empty is okay,\r\n// and whether the optional parameters have defaults.\r\nlet convertMergedPartToFlatHash = function (\r\n  mergedPart: Record<string, PSTParameter>,\r\n  parameters: PstParameterSet<string>,\r\n  extras: string[],\r\n  logging: Logger,\r\n  logOmissions?: boolean,\r\n): Record<string, string | Record<string, unknown>> | null {\r\n  //TODO: Handle error case where there is no part value.\r\n\r\n  const partId = mergedPart['partId'];\r\n  const generic = mergedPart['generic'];\r\n  // Fill in all the part's parameters listed in the table and enumerate what was invalid, empty, or simply missing.\r\n  let part: Record<string, string | Record<string, unknown>> = {\r\n    partNumber: partId && partId.value ? (partId.value[0] as string) : '',\r\n    generic: generic && generic.value ? (generic.value[0] as string) : '',\r\n  };\r\n  let potentialErrors: { error: string; parminfo: PstParameterDescriptor<string> }[] = [];\r\n  Object.values(parameters).forEach((parminfo) => {\r\n    if (parminfo.id !== '0') {\r\n      // Skip the name - we've already got it\r\n      if (parminfo.id in mergedPart) {\r\n        let [value, error] = interpretParameter(mergedPart[parminfo.id] as PSTParameter, parminfo.data, parminfo.value);\r\n        if (error) {\r\n          if (error === 'INVALID') {\r\n            potentialErrors.push({ error: 'INVALID', parminfo: parminfo });\r\n          } else if (error === 'EMPTY' && !('default' in parminfo)) {\r\n            potentialErrors.push({ error: 'EMPTY', parminfo: parminfo });\r\n          }\r\n        } else {\r\n          if (value !== null) {\r\n            // this won't happen because the null value only happens on error\r\n            part[parminfo.name] = value;\r\n          }\r\n        }\r\n      } else {\r\n        potentialErrors.push({ error: 'MISSING', parminfo: parminfo });\r\n      }\r\n    }\r\n  });\r\n\r\n  // Fill in the contents of the extra parameters as well - could be any hash\r\n  for (let parm of ['spice'].concat(extras)) {\r\n    let parmParts = parm.split(':');\r\n    let outParm = parmParts[parmParts.length - 1] as string; //Same as inParm if there is no colon\r\n    if (outParm in mergedPart) {\r\n      part[outParm] = mergedPart[outParm] as PSTParameter;\r\n    }\r\n  }\r\n\r\n  // We have all of the provided non-default parameters. Fill in the defaults for the part's parameters based on other parameters.\r\n  // Notes:\r\n  // * Default values should not be used to determine other default values, as there is no guarantee which default will be evaluated first.\r\n  // * A part with a default value or function will only be disqualified based on that value\r\n  //   if the default value is undefined _and_ the parameter is not optional. Until we process the optional state, it's only a potential error.\r\n  Object.values(parameters).forEach((parminfo) => {\r\n    if ('default' in parminfo && typeof parminfo.default !== 'undefined') {\r\n      if (!(parminfo.name in part)) {\r\n        let value = parminfo.default(part as Record<string, string>);\r\n        if (typeof value === 'string') {\r\n          part[parminfo.name] = value;\r\n        } else {\r\n          potentialErrors.push({ error: 'EMPTY', parminfo: parminfo });\r\n        }\r\n      }\r\n    }\r\n  });\r\n\r\n  // Now we have all the available parameter values (including defaults) to use to determine which other parameters are optional.\r\n  // We need to go through all our pending EMPTY or MISSING errors and see if the parameters involved are optional.\r\n  // If a parameter is optional, it isn't an error if it is missing, so it isn't a reason to disqualify the part.\r\n  let invalidParms: string[] = [];\r\n  let missingParms: string[] = [];\r\n  let emptyParms: string[] = [];\r\n  for (let error of potentialErrors) {\r\n    if (error.error === 'INVALID') {\r\n      invalidParms.push(`${error.parminfo.name}(${error.parminfo.id})`);\r\n    } else {\r\n      let isOptional =\r\n        typeof error.parminfo.optional === 'boolean'\r\n          ? error.parminfo.optional\r\n          : error.parminfo.optional(part as Record<string, string>);\r\n      if (!isOptional) {\r\n        if (error.error === 'EMPTY') {\r\n          emptyParms.push(`${error.parminfo.name}(${error.parminfo.id})`);\r\n        } else if (error.error === 'MISSING') {\r\n          missingParms.push(`${error.parminfo.name}(${error.parminfo.id})`);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  // We're done - either deliver the part or (optionally) log the reasons we're not delivering it.\r\n  if (missingParms.length > 0 || emptyParms.length > 0 || invalidParms.length > 0) {\r\n    if (logOmissions) {\r\n      let causes = [];\r\n      if (invalidParms.length > 0) {\r\n        causes.push(`invalid parms ${invalidParms.join(', ')}`);\r\n      }\r\n      if (emptyParms.length > 0) {\r\n        causes.push(`empty parms ${emptyParms.join(', ')}`);\r\n      }\r\n      if (missingParms.length > 0) {\r\n        causes.push(`missing parms ${missingParms.join(', ')}`);\r\n      }\r\n      const partId = mergedPart['partId'] as PSTParameter;\r\n      logging.info(`Skipping ${partId.value} due to ${causes.join('; ')} `);\r\n    }\r\n    return null;\r\n  }\r\n\r\n  return part;\r\n};\r\n\r\nlet interpretPartIndex = function (\r\n  index: PartIndex,\r\n  parameters: PstParameterSet<string>,\r\n  extras: string[],\r\n  logging: Logger,\r\n  logOmissions?: boolean,\r\n): PstDeviceList<string> | null {\r\n  try {\r\n    let parts: PstDeviceList<string> = [];\r\n    index.getIds().forEach((partId) => {\r\n      let convertedPart = convertMergedPartToFlatHash(\r\n        index.getMergedPart(partId, extras),\r\n        parameters,\r\n        extras,\r\n        logging,\r\n        logOmissions,\r\n      );\r\n      if (convertedPart) {\r\n        parts.push(convertedPart);\r\n      }\r\n    });\r\n    return parts;\r\n  } catch (error: unknown) {\r\n    let namedError = error as { message: string };\r\n    logging.warn('Failure occurred interpreting device data:', namedError.message);\r\n    return null;\r\n  }\r\n};\r\n\r\n// Collect the information from the config data into the Part Index, which organizes the data by part, source, and parameter, keeping all the sources separate.\r\nlet collectConfigData = function (\r\n  adiLocale: string,\r\n  config: ToolsConfigJson<unknown>,\r\n  configParms: string[],\r\n  index: PartIndex,\r\n  staticParts?: StaticPartList,\r\n): void {\r\n  // Static data in a separate file\r\n  if (config.cdpsource.useStaticPartsData && staticParts) {\r\n    let staticPartList = staticParts.data[adiLocale] as PSTParameterSet[];\r\n    staticPartList.forEach((part) => {\r\n      index.addPart(part['0'] ? (part['0'].displayValue as string) : '', 'static', part);\r\n    });\r\n  }\r\n\r\n  // Parts data from the config file\r\n  if (config.cdpsource.useLocalPartsData) {\r\n    let item = Object.entries(config.cdpsource.localParts).filter((item) => item[0] == adiLocale)[0];\r\n    if (item) {\r\n      item[1].forEach((part) => {\r\n        index.addPart(part['partId'] as string, 'config', part as PSTParameterSet);\r\n      });\r\n    }\r\n  }\r\n\r\n  // Aditools Spice Parts\r\n  const spiceParts: Record<string, AditoolsSpice.SpicePartInfo> = AditoolsSpiceParts;\r\n  if (spiceParts) {\r\n    Object.keys(spiceParts).forEach((id) => {\r\n      index.addPart(id, 'spice', { value: spiceParts[id] !== undefined ? 'Yes' : 'No' } as PSTParameterSet);\r\n    });\r\n  }\r\n\r\n  // Additional sections from the config file\r\n  for (let parm of configParms) {\r\n    let parmParts = parm.split(':');\r\n    let inParm = parmParts[0] as string;\r\n    //let outParm = parmParts[parmParts.length-1]; //Same as inParm if there is no colon\r\n    let item = Object.entries(config).find((item) => item[0] == inParm) as [string, Record<string, unknown>];\r\n    if (item) {\r\n      Object.keys(item[1]).forEach((id) => {\r\n        index.addPart(id, inParm, item[1][id] as PSTParameterSet);\r\n      });\r\n    }\r\n  }\r\n};\r\n\r\nlet collectPstData = function (ignoreRX: string, parts: PSTData, index: PartIndex): void {\r\n  let ignoreRegEx = ignoreRX ? new RegExp(ignoreRX) : null;\r\n  parts.data.forEach((part) => {\r\n    if (!ignoreRegEx || !ignoreRegEx.test(part['0'].displayValue as string)) {\r\n      index.addPart(part['0'].displayValue as string, 'pst', part as PSTParameterSet);\r\n    }\r\n  });\r\n};\r\n\r\n/// -------- Public interface --------\r\n\r\n/// PST Parameter Metadata\r\n\r\nexport enum DataType {\r\n  t_pulldown = 'Pulldown',\r\n  t_float = 'Floating Point',\r\n  t_integer = 'Integer',\r\n  t_string = 'String',\r\n  t_none = 'N/A',\r\n}\r\n\r\nexport enum CardinalityType {\r\n  c_single = 'single',\r\n  c_multi = 'multi',\r\n  c_none = 'N/A',\r\n}\r\n\r\nexport interface PstParameterDescriptor<ParmName extends string> {\r\n  id: string;\r\n  name: ParmName;\r\n  data: DataType;\r\n  value: CardinalityType;\r\n  optional: ((part: Record<ParmName, string>) => boolean) | boolean;\r\n  default?: (part: Record<ParmName, string>) => string | undefined;\r\n}\r\nexport type PstParameterSet<ParmName extends string> = Record<string, PstParameterDescriptor<ParmName>>;\r\nexport type PstDeviceList<ParmName extends string> = Record<ParmName, string | Record<string, unknown>>[];\r\n\r\nexport async function load<PSTParmName extends string, ParmName extends string>(\r\n  adiLocale: string,\r\n  configRequest: Promise<ToolsConfigJson<unknown> | null>,\r\n  pstRequest: Promise<PSTData | null>,\r\n  pstParameters: PstParameterSet<PSTParmName>,\r\n  configParameters: string[],\r\n  logger: Logger,\r\n  staticParts?: StaticPartList,\r\n  logOmissions?: boolean,\r\n): Promise<PstDeviceList<ParmName> | null> {\r\n  let index = new PartIndex();\r\n  return configRequest\r\n    .then((config) => {\r\n      if (!config) {\r\n        throw 'No config data';\r\n      }\r\n      logger.time('partsCfgTime');\r\n      collectConfigData(adiLocale, config, configParameters, index, staticParts);\r\n      logger.timeEnd('partsCfgTime');\r\n      return config;\r\n    })\r\n    .then((config) => {\r\n      return pstRequest.then((parts) => {\r\n        if (!parts) {\r\n          throw 'No PST Parts Data';\r\n        }\r\n        logger.time('partsPstTime');\r\n        collectPstData(config.cdpsource.ignoreInPDB, parts, index);\r\n        logger.timeEnd('partsPstTime');\r\n        return index;\r\n      });\r\n    })\r\n    .then((index) => {\r\n      logger.time('partsInterpretTime');\r\n      let parts = interpretPartIndex(index, pstParameters, configParameters, logger, logOmissions);\r\n      logger.timeEnd('partsInterpretTime');\r\n      if (logOmissions) {\r\n        logger.log('Parts:');\r\n        logger.log(parts?.map((item) => item['partNumber']));\r\n      }\r\n      return parts;\r\n    })\r\n    .catch((error) => {\r\n      logger.error(`Error collecting part Data: ${error}`);\r\n      return null;\r\n    });\r\n}\r\n\r\n// The PartIndex keeps all the parameter data organized first by part, then by source, then by parameter\r\nclass PartIndex {\r\n  data: Record<string, Record<string, PSTParameterSet>>;\r\n\r\n  constructor() {\r\n    this.data = {};\r\n  }\r\n\r\n  getIds(): string[] {\r\n    return Object.keys(this.data);\r\n  }\r\n\r\n  addPart(id: string, source: string, value: PSTParameterSet): void {\r\n    if (!(id in this.data)) {\r\n      this.data[id] = {};\r\n    }\r\n    (this.data[id] as Record<string, PSTParameterSet>)[source] = value;\r\n  }\r\n\r\n  getMergedPart(id: string, configParms: string[]): PSTParameterSet {\r\n    // merged part will have properties partId, the \"numeric\" properties, and\r\n    // may also have polesZeroes or special for additional properties.\r\n    let mergedPart: Record<string, PSTParameter> = { partId: { value: [id], displayValue: id } };\r\n    let part = this.data[id] as Record<string, PSTParameterSet>;\r\n    let partIsLive = false;\r\n    let proptest = /^[s0-9-][0-9]+$/;\r\n\r\n    // Walk the properties of the part\r\n    // Override order: pdb overrides static, but config overrides all\r\n    if ('static' in part) {\r\n      for (let propId in part['static']) {\r\n        if (proptest.test(propId)) {\r\n          mergedPart[propId] = part['static'][propId] as PSTParameter;\r\n        }\r\n      }\r\n      partIsLive = true;\r\n    }\r\n    if ('pst' in part) {\r\n      const pstParameterSet = part['pst'] as PSTParameterSet;\r\n      const genericPart = pstParameterSet['0'] as PSTParameter;\r\n      const generic = genericPart.generic ?? id.toLowerCase();\r\n      mergedPart['generic'] = { value: [generic] };\r\n      for (let propId in part['pst']) {\r\n        if (proptest.test(propId)) {\r\n          let isok = true;\r\n          if (propId in mergedPart) {\r\n            // Don't overwrite a parameter that might be well-formed with one that isn't\r\n            isok = this.parameterWellFormed(part['pst'][propId] as PSTParameter);\r\n          }\r\n          if (isok) {\r\n            mergedPart[propId] = part['pst'][propId] as PSTParameter;\r\n          }\r\n        }\r\n      }\r\n      partIsLive = true;\r\n    }\r\n    if ('config' in part) {\r\n      for (let propId in part['config']) {\r\n        if (proptest.test(propId)) {\r\n          let isok = true;\r\n          if (propId in mergedPart) {\r\n            // Don't overwrite a parameter that might be well-formed with one that isn't.\r\n            isok = this.parameterWellFormed(part['config'][propId] as PSTParameter);\r\n          }\r\n          if (isok) {\r\n            mergedPart[propId] = part['config'][propId] as PSTParameter;\r\n          }\r\n        }\r\n      }\r\n      partIsLive = true;\r\n    }\r\n\r\n    for (let parm of ['spice'].concat(configParms)) {\r\n      let parmParts = parm.split(':');\r\n      let inParm = parmParts[0] as string;\r\n      let outParm = parmParts[parmParts.length - 1] as string; //Same as inParm if there is no colon\r\n      if (partIsLive && inParm in part) {\r\n        mergedPart[outParm] = part[inParm] as PSTParameter;\r\n      }\r\n    }\r\n    return mergedPart;\r\n  }\r\n\r\n  parameterWellFormed(parameter: PSTParameter): boolean {\r\n    return (\r\n      typeof parameter.value !== 'undefined' &&\r\n      parameter.value !== null &&\r\n      typeof parameter.value.length !== 'undefined' &&\r\n      parameter.value.length !== 0 &&\r\n      parameter.value[0] !== ''\r\n    );\r\n  }\r\n}\r\n","import { /*userEntryToNumber, */ numberToUserDisplay } from '@ebiz/pretty-num';\n\nconst sweepType = {\n  decade: 'DEC',\n  linear: 'LIN',\n  octave: 'OCT',\n};\n\nconst orderedPulseParams = [\n  'lowValue',\n  'highValue',\n  'delayTime',\n  'riseTime',\n  'fallTime',\n  'pulseWidth',\n  'period',\n  'cycles',\n];\nconst orderedSineParams = ['offset', 'peakAmplitude', 'frequency', 'delayTime', 'dampingFactor', 'phase', 'cycles'];\nconst orderedSweepParams = ['sweepType', 'points', 'startFrequency', 'stopFrequency'];\nconst orderedTransientParams = ['step', 'stopTime', 'startTime', 'maxDelayTime'];\n\nconst DefaultPorts = {\n  R: { name: 'resistor', portCount: 2 },\n  C: { name: 'capacitor', portCount: 2 },\n  L: { name: 'inductor', portCount: 2 },\n  D: { name: 'diode', portCount: 2 },\n  V: { name: 'voltage', portCount: 2 },\n  I: { name: 'current', portCount: 2 },\n};\n\nexport class SpiceNetList {\n  constructor(netListTemplate, digits) {\n    this._netList = netListTemplate.replace(/\\r?\\n/g, '\\r\\n');\n    this._digits = digits ? digits : 3;\n  }\n\n  get netlist() {\n    return this._netList;\n  }\n\n  getElementValue(name) {\n    let lines = this._makeLines(this._netList);\n    let portCount = DefaultPorts[name.toUpperCase()[0]].portCount;\n    let line = lines[this._findIndex(lines, name)][0];\n    let pieces = line.split(' ');\n    let newData = pieces.slice(portCount + 1);\n    return newData.join(' ');\n  }\n\n  getElementPortCount(name) {\n    let lines = this._makeLines(this._netList);\n    let length = lines[this._findIndex(lines, name)][0].trim().split(/\\s+/).length - 2;\n    return length ? length : DefaultPorts[name[0]].portCount;\n  }\n\n  getSubcircuitPortCount(name) {\n    let lines = this._makeLines(this._netList);\n    return lines[this._findIndex(lines, name)][0].trim().split(/\\s+/).length - 2;\n  }\n\n  getSubcircuitName() {\n    let lines = this._makeLines(this._netList);\n    let startLine = lines[this._findIndex(lines, '.subckt')];\n    return startLine[0].split(/\\s+/)[1];\n  }\n\n  getSubcircuitNetList(name) {\n    let lines = this._makeLines(this._netList);\n    let startLine = lines[this._findSubcircuitIndex(lines, '.subckt', name) + 1];\n    let endLine = lines[this._findSubcircuitIndex(lines, '.ends', name) - 1];\n    let subcircuit = this._netList.substring(startLine[1], endLine[1] + endLine[0].length);\n    return new SpiceNetList(subcircuit);\n  }\n\n  /* Exported Functions */\n  updateTitle(newTitle) {\n    let lines = this._makeLines(this._netList);\n    let line = lines[0];\n    let title = newTitle ? newTitle : '*';\n    let value = title.substring(0, 1) == '*' ? title : '*' + title;\n    let result = this._netList.substring(0, line[1]) + value + this._netList.substring(line[1] + line[0].length);\n    this._netList = result;\n    return this;\n  }\n\n  updateSubcircuitName(oldName, newName) {\n    let lines = this._makeLines(this._netList);\n    let result = '';\n    let startLine = lines[this._findSubcircuitIndex(lines, '.subckt', oldName)];\n    let endLine = lines[this._findSubcircuitIndex(lines, '.ends', oldName)];\n    result = this._netList.replace(startLine[0], startLine[0].replace(oldName, newName));\n    result = result.replace(endLine[0], endLine[0].replace(oldName, newName));\n    this._netList = result;\n    return this;\n  }\n\n  updateSubcircuitNetList(name, netlist) {\n    let lines = this._makeLines(this._netList);\n    let startLine = lines[this._findSubcircuitIndex(lines, '.subckt', name) + 1];\n    let endLine = lines[this._findSubcircuitIndex(lines, '.ends', name) - 1];\n    let subcircuit = this._netList.substring(startLine[1], endLine[1] + endLine[0].length);\n    let result = this._netList.replace(subcircuit, netlist.netlist);\n    this._netList = result;\n    return this;\n  }\n\n  updateElementValue(name, value, ports) {\n    let lines = this._makeLines(this._netList);\n    let oldLine = lines[this._findIndex(lines, name)][0];\n    let newLine = this._updateElementValue(name, value, ports);\n    let result = this._netList.replace(oldLine, newLine);\n    this._netList = result;\n    return this;\n  }\n\n  updateElementValues(valuesList) {\n    let lines = this._makeLines(this._netList);\n    let result = '';\n    valuesList.forEach((value) => {\n      let oldLine = lines[this._findIndex(lines, value.name)][0];\n      let newLine = this._updateElementValue(value.name, value.value, value.ports);\n      result = this._netList.replace(oldLine, newLine);\n      this._netList = result;\n    });\n    return this;\n  }\n\n  updateACAnalysis(parameters) {\n    let lines = this._makeLines(this._netList);\n    let line = lines[this._findIndex(lines, '.AC')];\n    let pieces = line[0].split(/\\s/);\n    if (pieces[0].toLowerCase() !== '.ac') {\n      throw new Error(`Invalid simulation type in template; expecting .AC, received ${pieces[0]}`);\n    }\n    let values = pieces.slice(1);\n    let sweepTypes = ['DEC', 'LIN', 'OCT'];\n    if (values.length - 1 >= this._getMaxIndex(orderedSweepParams, parameters)) {\n      let newValues = this._getUpdatedValues(values, parameters, orderedSweepParams, sweepTypes);\n      let value = `.AC ${newValues.join(' ')}`;\n      let result = this._netList.substring(0, line[1]) + value + this._netList.substring(line[1] + line[0].length);\n      this._netList = result;\n      return this;\n    }\n    throw new Error(`One of the parameters provided is not contained in the sequence of values in the template`);\n  }\n\n  updateNoiseAnalysis(parameters) {\n    let lines = this._makeLines(this._netList);\n    let line = lines[this._findIndex(lines, '.NOISE')];\n    let pieces = line[0].split(/\\s/);\n    if (pieces[0].toLowerCase() !== '.noise') {\n      throw new Error(`Invalid simulation type in template; expecting .NOISE, received ${pieces[0]}`);\n    }\n    let values = pieces.slice(3);\n    let sweepTypes = ['DEC', 'LIN', 'OCT'];\n    if (values.length - 1 >= this._getMaxIndex(orderedSweepParams, parameters)) {\n      let newValues = this._getUpdatedValues(values, parameters, orderedSweepParams, sweepTypes);\n      let value = `.NOISE V(OUT) VNOISE ${newValues.join(' ')}`;\n      let result = this._netList.substring(0, line[1]) + value + this._netList.substring(line[1] + line[0].length);\n      this._netList = result;\n      return this;\n    }\n    throw new Error(`One of the parameters provided is not contained in the sequence of values in the template`);\n  }\n\n  updateTransientAnalysis(parameters) {\n    let lines = this._makeLines(this._netList);\n    let line = lines[this._findIndex(lines, '.TRAN')];\n    let pieces = line[0].split(/\\s/);\n    if (pieces[0].toLowerCase() !== '.tran') {\n      throw new Error(`Invalid simulation type in template; expecting .TRAN, received ${pieces[0]}`);\n    }\n    let values = pieces.slice(1);\n    if (values.length - 1 >= this._getMaxIndex(orderedTransientParams, parameters)) {\n      let newValues = this._getUpdatedValues(values, parameters, orderedTransientParams);\n      let value = `.TRAN ${newValues.join(' ')}`;\n      let result = this._netList.substring(0, line[1]) + value + this._netList.substring(line[1] + line[0].length);\n      this._netList = result;\n      return this;\n    }\n    throw new Error(`One of the parameters provided is not contained in the sequence of values in the template`);\n  }\n\n  /* Exported Voltage Source Functions */\n  updateDCVoltageSource(name, voltage) {\n    let result = this._updateDCSource(name, voltage);\n    this._netList = result;\n    return this;\n  }\n\n  updateACVoltageSource(name, voltage, delay) {\n    let result = this._updateACSource(name, voltage, delay);\n    this._netList = result;\n    return this;\n  }\n\n  updateSineVoltageSource(name, parameters) {\n    let result = this._updateSineSource(name, parameters);\n    this._netList = result;\n    return this;\n  }\n\n  updatePulseVoltageSource(name, parameters) {\n    let result = this._updatePulseSource(name, parameters);\n    this._netList = result;\n    return this;\n  }\n\n  /* Exported Current Source Functions */\n  updateDCCurrentSource(name, current) {\n    let result = this._updateDCSource(name, current);\n    this._netList = result;\n    return this;\n  }\n\n  updateACCurrentSource(name, current, delay) {\n    let result = this._updateACSource(name, current, delay);\n    this._netList = result;\n    return this;\n  }\n\n  updateSineCurrentSource(name, parameters) {\n    let result = this._updateSineSource(name, parameters);\n    this._netList = result;\n    return this;\n  }\n\n  updatePulseCurrentSource(name, parameters) {\n    let result = this._updatePulseSource(name, parameters);\n    this._netList = result;\n    return this;\n  }\n\n  /* Internal Functions */\n  _makeLines() {\n    let index = 0;\n    const lines = [];\n    const linePattern = /([^\\r\\n]*)\\r?\\n/g;\n    const termBuffer = this._netList[this._netList.length - 1] === '\\n' ? this._netList : this._netList + '\\n';\n    let line = null;\n    while ((line = linePattern.exec(termBuffer)) !== null) {\n      lines.push([line[1], index]);\n      index = linePattern.lastIndex;\n    }\n    return lines;\n  }\n\n  _findIndex(lines, value) {\n    let result = lines.findIndex((line) => {\n      let pieces = line[0].trim().split(/\\s/);\n      return pieces[0].toLowerCase() == value.toLowerCase();\n    });\n    return result;\n  }\n\n  _findSubcircuitIndex(lines, keyword, name) {\n    let result = lines.findIndex((line) => {\n      let pieces = line[0].trim().split(/\\s/);\n      return pieces[0].toLowerCase() == keyword.toLowerCase() && pieces[1].toLowerCase() == name.toLowerCase();\n    });\n    return result;\n  }\n\n  _updateElementValue(name, value, ports) {\n    let lines = this._makeLines(this._netList);\n    let line = lines[this._findIndex(lines, name)];\n    let subCircuitKeys = ['.subckt', '.ends'];\n    let pieces = line[0].split(/\\s/);\n    let result = '';\n    if (subCircuitKeys.includes(pieces[0].toLowerCase())) {\n      result = line[0].replace(pieces[1], value);\n    } else {\n      result = ports\n        ? line[0].replace(\n            pieces[ports + 1],\n            isNaN(value) ? value : numberToUserDisplay(value, 'Spice', 3, { showZeroes: false })\n          )\n        : line[0].replace(\n            pieces[pieces.length - 1],\n            isNaN(value) ? value : numberToUserDisplay(value, 'Spice', 3, { showZeroes: false })\n          );\n    }\n    return result;\n  }\n\n  _updateDCSource(name, value) {\n    let lines = this._makeLines(this._netList);\n    let line = lines[this._findIndex(lines, name)];\n    let pieces = line[0].split(/\\s/);\n    let newValue = numberToUserDisplay(value, 'Spice', this._digits, { showZeroes: false });\n    pieces[pieces.length - 1] = newValue;\n    let _value = pieces.join(' ');\n    let result = this._netList.substring(0, line[1]) + _value + this._netList.substring(line[1] + line[0].length);\n    this._netList = result;\n    return result;\n  }\n\n  _updateACSource(name, value, delay) {\n    let lines = this._makeLines(this._netList);\n    let line = lines[this._findIndex(lines, name)];\n    let pieces = line[0].split(/\\s/);\n\n    let newValue = numberToUserDisplay(value, 'Spice', this._digits, { showZeroes: false });\n    let _pieces = `${newValue}`;\n    if (typeof delay !== 'undefined') {\n      let newDelay = numberToUserDisplay(delay, 'Spice', this._digits, { showZeroes: false });\n      _pieces = `${newValue} ${newDelay}`;\n    }\n    pieces[pieces.length - 1] = _pieces;\n    let _value = pieces.join(' ');\n    let result = this._netList.substring(0, line[1]) + _value + this._netList.substring(line[1] + line[0].length);\n    this._netList = result;\n    return result;\n  }\n\n  _updateSineSource(name, parameters) {\n    let lines = this._makeLines(this._netList);\n    let line = lines[this._findIndex(lines, name)];\n    let indexOf = line[0].toLowerCase().indexOf('sine');\n    if (indexOf == -1) {\n      throw new Error(`Template value not containing SINE keyword`);\n    }\n    let values = line[0].substring(line[0].indexOf('(') + 1, line[0].indexOf(')')).split(' ');\n    if (values.length - 1 >= this._getMaxIndex(orderedSineParams, parameters)) {\n      let newValues = this._getUpdatedValues(values, parameters, orderedSineParams);\n      let value = `${line[0].substring(0, indexOf)}SINE(${newValues.join(' ')})`;\n      let result = this._netList.substring(0, line[1]) + value + this._netList.substring(line[1] + line[0].length);\n      this._netList = result;\n      return result;\n    }\n    throw new Error(`One of the parameters provided is not contained in the sequence of values in the template`);\n  }\n\n  _updatePulseSource(name, parameters) {\n    let lines = this._makeLines(this._netList);\n    let line = lines[this._findIndex(lines, name)];\n    let indexOf = line[0].toLowerCase().indexOf('pulse');\n    if (indexOf == -1) {\n      throw new Error(`Template value not containing PULSE keyword`);\n    }\n    let values = line[0].substring(line[0].indexOf('(') + 1, line[0].indexOf(')')).split(' ');\n    if (values.length - 1 >= this._getMaxIndex(orderedPulseParams, parameters)) {\n      let newValues = this._getUpdatedValues(values, parameters, orderedPulseParams);\n      let value = `${line[0].substring(0, indexOf)}PULSE(${newValues.join(' ')})`;\n      let result = this._netList.substring(0, line[1]) + value + this._netList.substring(line[1] + line[0].length);\n      this._netList = result;\n      return result;\n    }\n    throw new Error(`One of the parameters provided is not contained in the sequence of values in the template`);\n  }\n\n  _getMaxIndex(list, parameters) {\n    let maxIndex = -1;\n    for (let param in parameters) {\n      maxIndex = Math.max(\n        maxIndex,\n        list.findIndex((item) => item == param)\n      );\n    }\n    return maxIndex;\n  }\n\n  _getUpdatedValues(values, parameters, orderedList, sweepTypes) {\n    let result = values.map((value, index) => {\n      let isValid = parameters[orderedList[index]] !== null && typeof parameters[orderedList[index]] !== 'undefined';\n      if (orderedList[index] == 'sweepType') {\n        return isValid && sweepTypes.includes(sweepType[parameters[orderedList[index]]])\n          ? sweepType[parameters[orderedList[index]]]\n          : value.toUpperCase();\n      } else {\n        return isValid\n          ? numberToUserDisplay(parameters[orderedList[index]], 'Spice', this._digits, { showZeroes: false })\n          : value;\n      }\n    });\n    return result;\n  }\n}\n","import { waitForPromise } from '@ember/test-waiters';\r\nimport { numberToUserDisplay } from '@ebiz/pretty-num';\r\nimport CdpService from '../services/cdp';\r\nimport ModelService from '../services/model';\r\nimport type IntlService from 'ember-intl/services/intl';\r\nimport * as AditoolsSpice from '@ebiz/aditools-spice/netlists';\r\n\r\ninterface CmsData {\r\n  Product: {\r\n    id: string;\r\n    creationDate: string;\r\n    lastUpdateDate: string;\r\n    launchDate: string;\r\n    product: string;\r\n    status: string;\r\n    url: string;\r\n    shortDesc: string;\r\n    longDesc: string;\r\n    category: string;\r\n    categoryID: string;\r\n    subCategory: string;\r\n    subCategoryID: string;\r\n    Videos: Record<string, string>[] | null;\r\n    Webcasts: Record<string, string>[] | null;\r\n    cftls: Record<string, string>[] | null;\r\n    diagrams: Record<string, string>[] | null;\r\n    evalBoards: Record<string, string>[] | null;\r\n    pressReleases: Record<string, string>[] | null;\r\n    AlternativeParts: Record<string, string>[] | null;\r\n    CompanionProduct: Record<string, string>[] | null;\r\n    ProductDocs: [ProductDocs];\r\n  };\r\n  menuItems: Record<string, string>[];\r\n}\r\n\r\ninterface ProductDocs {\r\n  Features: string;\r\n  PstMap: Record<string, string>;\r\n  Specifications: Record<string, string>[] | null;\r\n  Documentation: Record<string, string>[] | null;\r\n  DeviceDrivers: Record<string, string>[] | null;\r\n  Hardware: Record<string, string>[] | null;\r\n  SimulationModels: [SimulationModel];\r\n}\r\n\r\ninterface SimulationModel {\r\n  id: string;\r\n  dataSheetRevisionNumber: string;\r\n  fileSize: string;\r\n  fileURL: string;\r\n  languageCode: string;\r\n  UID: string;\r\n  nodename: string;\r\n  optionalDesc: string;\r\n  publishDate: string;\r\n  lastUpdatedDate: string;\r\n  releaseDate: string;\r\n  title: string;\r\n  titlePlain: string;\r\n}\r\n\r\nconst analysisList: Record<string, string> = {\r\n  AC: 'ACAnalysis.cir',\r\n  NOISE: 'NoiseAnalysis.cir',\r\n  TRAN: 'TransientAnalysis.cir',\r\n};\r\n\r\nconst INFINITY = 1e66;\r\n\r\nexport function getSchematicName(page: string, model: ModelService): string {\r\n  let schematicName = 'Photo';\r\n  let schematicBias = model.state.Bias === '+' ? 'Pos' : 'Neg';\r\n  let schematicStage = model.state.StageCount === 1 || page === 'photodiode' ? '1Stage' : '2Stage';\r\n  let schematicVoltageFollower = '';\r\n  if (\r\n    page !== 'photodiode' &&\r\n    model.state.Bias === '-' &&\r\n    model.schematicModel.stage2 &&\r\n    model.schematicModel.stage2.rf === 0 &&\r\n    model.schematicModel.stage2.rg === INFINITY\r\n  ) {\r\n    schematicVoltageFollower = 'VoltageFollower';\r\n  }\r\n  schematicName = schematicName + schematicBias + schematicStage + schematicVoltageFollower;\r\n  if (page === 'nextsteps') {\r\n    schematicName = schematicName + '_NextSteps';\r\n  }\r\n  return schematicName;\r\n}\r\n\r\nexport async function getSpiceNetListFiles(\r\n  pathURL: string,\r\n  name: string,\r\n  opamps: string[],\r\n  downloadType: string,\r\n  modelFiles: Record<string, string>,\r\n  modelService: ModelService,\r\n  intl: IntlService,\r\n): Promise<Array<DownloadFile>> {\r\n  let downloadFiles: Array<DownloadFile> = [];\r\n  let downloadFile: DownloadFile;\r\n  if (checkModelFiles(modelFiles)) {\r\n    let modelFile = getModelFile(getMacroModelInfo([...new Set(opamps)], modelFiles));\r\n    let schematicValues = getSchematicValues(name, modelFiles, modelService);\r\n    let responseLimits = getResponseLimits(modelService);\r\n    for (let cir in analysisList) {\r\n      let netlist = new AditoolsSpice.SpiceNetList(await getTemplateFile(pathURL, `${name}_${analysisList[cir]}`));\r\n      // Update the title line\r\n      let stageText =\r\n        opamps.length > 1\r\n          ? `2 stages using ${[...new Set(opamps)].join(',')}`\r\n          : `1 stage using ${[...new Set(opamps)].join(',')}`;\r\n      netlist.updateTitle(`Photodiode ${cir} Analysis Spice Netlist - ${stageText}`);\r\n      // Update the input signal\r\n      let pulseParameters: AditoolsSpice.PulseSourceParameters = {\r\n        lowValue: 0,\r\n        highValue: modelService.state.Ip,\r\n        delayTime: 0.000000001,\r\n        riseTime: 0.000000001,\r\n        fallTime: 0.000000001,\r\n        pulseWidth: 1,\r\n        period: 2,\r\n      };\r\n      netlist.updatePulseCurrentSource('IS', pulseParameters);\r\n      // Update the values for the component elements and stages\r\n      for (const item in schematicValues) {\r\n        let itemValue = schematicValues[item] as string | number;\r\n        netlist.updateElementValue(\r\n          item,\r\n          typeof itemValue === 'number' ? numberToUserDisplay(itemValue, 'Spice', 3, { showZeroes: false }) : itemValue,\r\n        );\r\n      }\r\n      // Update the simulation directive line\r\n      if (cir == 'AC') {\r\n        let parameters: AditoolsSpice.SweepParameters = {\r\n          sweepType: 'decade',\r\n          points: 100,\r\n          startFrequency: responseLimits['minimumFrequency'],\r\n          stopFrequency: responseLimits['maximumFrequency'],\r\n        };\r\n        netlist.updateACAnalysis(parameters);\r\n      }\r\n      if (cir == 'NOISE') {\r\n        let parameters: AditoolsSpice.SweepParameters = {\r\n          sweepType: 'decade',\r\n          points: 100,\r\n          startFrequency: responseLimits['minimumFrequency'],\r\n          stopFrequency: responseLimits['maximumFrequency'],\r\n        };\r\n        netlist.updateNoiseAnalysis(parameters);\r\n      }\r\n      if (cir == 'TRAN') {\r\n        let parameters: AditoolsSpice.TransientParameters = {\r\n          step: 0.000000001,\r\n          stopTime: responseLimits['maximumTimeAxis'],\r\n          /*stopTime: responseLimits.maximumTimeAxis / 2,*/\r\n        };\r\n        netlist.updateTransientAnalysis(parameters);\r\n      }\r\n      // Push the content into the downloadFiles collection\r\n      downloadFile = {\r\n        name: analysisList[cir],\r\n        value: netlist.netlist + modelFile,\r\n        location: downloadType == 'all' ? 'SPICE Files\\\\Netlists' : 'Netlists',\r\n        type: 'LTSPICE',\r\n      };\r\n      downloadFiles.push(downloadFile);\r\n    }\r\n    // Check if README.txt needs to be pushed into the downloadFiles collection\r\n    if (downloadFiles.length > 0) {\r\n      let fileName = intl.t('download.spice-files.message_netlist_readme_filename');\r\n      let content = intl.t('download.spice-files.message_netlist_readme');\r\n      downloadFiles.push({\r\n        name: fileName,\r\n        value: content,\r\n        location: downloadType == 'all' ? 'SPICE Files\\\\Netlists' : 'Netlists',\r\n        type: 'LTSPICE',\r\n      });\r\n    }\r\n  } else {\r\n    let fileName = intl.t('download.spice-files.message_no_netlist_filename');\r\n    let content = intl.t('download.spice-files.message_part_no_netlist');\r\n    for (let name in modelFiles) {\r\n      if (modelFiles[name] === '') content += `\\r\\n${name}`;\r\n    }\r\n    downloadFiles.push({\r\n      name: fileName,\r\n      value: content,\r\n      location: downloadType == 'all' ? 'SPICE Files' : '',\r\n      type: 'LTSPICE',\r\n    });\r\n  }\r\n  return downloadFiles;\r\n}\r\n\r\nexport function getModelFiles(opamps: string[], cdp: CdpService): PromiseHash {\r\n  let fileHash: PromiseHash = {};\r\n  for (const opamp of opamps) {\r\n    fileHash[opamp] = getModelFileForGeneric(opamp, cdp);\r\n  }\r\n  return fileHash;\r\n}\r\n\r\nfunction getSchematicValues(\r\n  name: string,\r\n  modelFiles: Record<string, string>,\r\n  modelService: ModelService,\r\n): Record<string, string | number> {\r\n  let schematicValues: Record<string, string | number> = {};\r\n  let model = modelService;\r\n  let netlist;\r\n\r\n  schematicValues['Cd'] = model.state.Cd;\r\n  schematicValues['Rsh'] = model.state.Rsh;\r\n  schematicValues['Cf'] = model.schematicModel.stage1.cf;\r\n  schematicValues['Rf'] = model.schematicModel.stage1.rf;\r\n  netlist = new AditoolsSpice.SpiceNetList(modelFiles[model.schematicModel.stage1.opAmp.partNumber] as string);\r\n  let x1 = _buildXString(netlist, 0);\r\n  schematicValues['X1'] = x1.xString;\r\n\r\n  if (model.schematicModel.stage2) {\r\n    netlist = new AditoolsSpice.SpiceNetList(modelFiles[model.schematicModel.stage2.opAmp.partNumber] as string);\r\n    let x2 = _buildXString(netlist, x1.lastFloatIndex);\r\n    schematicValues['X2'] = x2.xString;\r\n    schematicValues['Cfilt'] = model.schematicModel.stage2.cfilter;\r\n    if (name == 'photoneg2stagevoltagefollower') {\r\n      schematicValues['Rfilt'] = model.schematicModel.stage2.rfilter;\r\n    }\r\n    if (name == 'photoneg2stage') {\r\n      schematicValues['Rfilt'] = model.schematicModel.stage2.rfilter;\r\n      schematicValues['Rf2'] = model.schematicModel.stage2.rf;\r\n      schematicValues['Rg2'] = model.schematicModel.stage2.rg;\r\n    }\r\n    if (name == 'photopos2stage') {\r\n      schematicValues['Rf2'] = model.schematicModel.stage2.rf;\r\n      schematicValues['Rg2'] = model.schematicModel.stage2.rg;\r\n    }\r\n  }\r\n  schematicValues['VP'] = numberToUserDisplay(model.powerSupplyRange.max, 'Spice', 5, { showZeroes: false });\r\n  schematicValues['VM'] = numberToUserDisplay(-model.powerSupplyRange.max, 'Spice', 5, { showZeroes: false });\r\n\r\n  return schematicValues;\r\n}\r\n\r\nfunction getResponseLimits(modelService: ModelService): Record<string, number> {\r\n  return {\r\n    minimumFrequency: modelService.frequencyResponseVA.graph.limits.xmin,\r\n    maximumFrequency: modelService.frequencyResponseVA.graph.limits.xmax,\r\n    minimumTimeAxis: modelService.pulseResponse.graph.limits.xmin,\r\n    maximumTimeAxis: modelService.pulseResponse.graph.limits.xmax,\r\n  };\r\n}\r\n\r\nfunction getTemplateFile(pathURL: string, name: string): Promise<string> {\r\n  let url = `${pathURL}/${name}`;\r\n  return waitForPromise(\r\n    fetch(url).then((response) => {\r\n      if (response.status !== 200) {\r\n        throw `HTTP Request Failed reading ${url}: ${response.status} ${response.statusText}`;\r\n      }\r\n      return response.text();\r\n    }),\r\n  );\r\n}\r\n\r\nfunction getModelFileForGeneric(partNumber: string, cdp: CdpService): Promise<string> {\r\n  return cdp.getCmsData(partNumber.toLowerCase()).then((data) => {\r\n    if (!data) return '';\r\n    let json: SimulationModel = (data as CmsData)['Product']['ProductDocs'][0]['SimulationModels'][0];\r\n    let fileName = '';\r\n    if (typeof json !== 'undefined' && json) {\r\n      fileName = json['fileURL'];\r\n      fileName = fileName.substring(fileName.indexOf('=') + 1);\r\n      fileName = _proxyIfLocal(fileName);\r\n      let url = `${fileName}?modeltype=spice-models`;\r\n      return fetch(url)\r\n        .then((response) => {\r\n          if (response.status !== 200) {\r\n            throw `HTTP Request Failed fetching ${url}: ${response.status} ${response.statusText}`;\r\n          }\r\n          return response.text();\r\n        })\r\n        .then((text) => {\r\n          if (text.indexOf(`Page Not Found`) !== -1) {\r\n            console.log('Unexpected: 200 response status with embedded \"Page Not Found\" for CIR file - url: ', url);\r\n            throw `HTTP Request Succeeded but contained Page Not Found - url: ${url}`;\r\n          }\r\n          return text;\r\n        })\r\n        .catch(() => {\r\n          return '';\r\n        });\r\n    } else {\r\n      console.log(`SPICE model doesn't exist for ${partNumber}`);\r\n      return '';\r\n    }\r\n  });\r\n}\r\n\r\nfunction getMacroModelInfo(\r\n  opamps: string[],\r\n  modelFiles: Record<string, string>,\r\n): Record<string, Record<string, string>> {\r\n  let result: Record<string, Record<string, string>> = {};\r\n  opamps.forEach((opamp) => {\r\n    let netlist = new AditoolsSpice.SpiceNetList(modelFiles[opamp] as string);\r\n    let subcktName = modelFiles[opamp] !== '' ? netlist.getSubcircuitName() : opamp;\r\n    result[opamp] = { subcktName: subcktName, data: modelFiles[opamp] as string };\r\n  });\r\n  return result;\r\n}\r\n\r\nfunction getModelFile(macroModelInfo: Record<string, Record<string, string>>): string {\r\n  let result = '';\r\n  let modelFiles: Record<string, string> = {};\r\n  for (let opamp in macroModelInfo) {\r\n    const macroModelInfoOpamp = macroModelInfo[opamp] as Record<string, string>;\r\n    modelFiles[macroModelInfoOpamp['subcktName'] as string] = macroModelInfoOpamp['data'] as string;\r\n  }\r\n  for (let name in modelFiles) {\r\n    result += modelFiles[name];\r\n  }\r\n  return result;\r\n}\r\n\r\nfunction _proxyIfLocal(url: string): string {\r\n  return window.location.hostname === 'localhost' ? url.substring(url.search(/[^/][/][^/]/) + 1) : url;\r\n}\r\n\r\nfunction checkModelFiles(modelFiles: Record<string, string>): boolean {\r\n  let isValid = true;\r\n  for (let name in modelFiles) {\r\n    if (modelFiles[name] === '') return false;\r\n  }\r\n  return isValid;\r\n}\r\n\r\nfunction _buildXString(\r\n  netlist: AditoolsSpice.SpiceNetList,\r\n  lastFloatIndex: number,\r\n): { xString: string; lastFloatIndex: number } {\r\n  const DEFAULT_PIN_COUNT = 5;\r\n  const extraPins = netlist.getSubcircuitPortCount('.subckt') - DEFAULT_PIN_COUNT;\r\n  let x1Items = [];\r\n  for (let i = 0; i < extraPins; i++) {\r\n    x1Items.push('PDFloat' + (++lastFloatIndex).toString());\r\n  }\r\n  x1Items.push(netlist.getSubcircuitName());\r\n  return { xString: x1Items.join(' '), lastFloatIndex: lastFloatIndex };\r\n}\r\n","import { userEntryToNumber, numberToUserDisplay } from '@ebiz/pretty-num';\n\nconst sweepType = {\n  linear: 'LIN',\n  decade: 'DEC',\n  octave: 'OCT',\n};\nconst orderedPulseParams = [\n  'lowValue',\n  'highValue',\n  'delayTime',\n  'riseTime',\n  'fallTime',\n  'pulseWidth',\n  'period',\n  'cycles',\n];\nconst orderedSineParams = ['offset', 'peakAmplitude', 'frequency', 'delayTime', 'dampingFactor', 'phase', 'cycles'];\nconst orderedSweepParams = ['sweepType', 'points', 'startFrequency', 'stopFrequency'];\nconst orderedTransientParams = ['step', 'stopTime', 'startTime', 'maxDelayTime'];\nconst orderedTransientParams2 = ['stopTime'];\nconst directives = ['!.AC', '!.NOISE', '!.TRAN', '!.DC', '!.OP'];\nconst transientRegExp = /^[.+-\\d].*/;\nconst symbolPattern = /(\\S+\\s+)(\\S+)(\\s+)([+-\\d]+)(\\s+)([+-\\d]+)(\\s+)(\\S+)(.*)/;\n\nexport class SpiceSchematic {\n  constructor(partsData, schematicTemplate, digits, templateParts) {\n    this._partsData = partsData;\n    this._schematic = schematicTemplate.replace(/\\r?\\n/g, '\\r\\n');\n    this._digits = digits ? digits : 3;\n    this._templateParts = templateParts ?? partsData;\n  }\n\n  get schematic() {\n    return this._schematic;\n  }\n\n  /* Exported Functions */\n  getSymbolValue(name) {\n    const symbolRange = this._findSymbolByInstanceName(name);\n    if (!symbolRange) {\n      throw new Error(`Couldn't find ${name} in schematic schematic`);\n    }\n    const attributeLine = this._findSymbolAttributeByName(symbolRange, 'Value');\n    if (!attributeLine) {\n      throw new Error(`Couldn't find ${name} Value in schematic`);\n    }\n    const attributeValue = attributeLine[0].split('Value ')[1];\n    return attributeValue;\n  }\n\n  getSymbolAttribute(name, attribute) {\n    const symbolRange = this._findSymbolByInstanceName(name);\n    if (!symbolRange) {\n      throw new Error(`Couldn't find ${name} in schematic schematic`);\n    }\n    const attributeLine = this._findSymbolAttributeByName(symbolRange, attribute);\n    if (!attributeLine) {\n      throw new Error(`Couldn't find ${name} ${attribute} in schematic schematic`);\n    }\n    const attributeValue = attributeLine[0].split(attribute + ' ')[1];\n    return attributeValue;\n  }\n\n  removeFlagElements(name) {\n    if (typeof name == 'undefined' || name == null || name == '') {\n      throw new Error(`Target Flag name is required.`);\n    }\n    const lines = this._makeLines();\n    let result = '';\n    for (let i = lines.length - 1; i > -1; i--) {\n      let line = lines[i];\n      if (line[0].toLowerCase().startsWith('flag')) {\n        if (!line[0].endsWith(name)) {\n          result = line[0] + '\\n' + result;\n        }\n      } else {\n        result = line[0] + '\\n' + result;\n      }\n    }\n    this._schematic = result;\n    return this;\n  }\n\n  selectAnalysisType(analysisType) {\n    const lines = this._makeLines();\n    let result = '';\n    for (let i = lines.length - 1; i > -1; i--) {\n      let line = lines[i];\n      if (line[0].toLowerCase().startsWith('text') && this._isDirectiveLine(line[0])) {\n        if (line[0].toLowerCase().indexOf(`!.${analysisType.toLowerCase()}`) > -1) {\n          result = line[0] + '\\r\\n' + result;\n        }\n      } else {\n        result = line[0] + '\\r\\n' + result;\n      }\n    }\n    this._schematic = result;\n    return this;\n  }\n\n  updateFlagName(name, replacementName) {\n    if (typeof name == 'undefined' || name == null || name == '') {\n      throw new Error(`Target flag name is required.`);\n    }\n    if (typeof replacementName == 'undefined' || replacementName == null || replacementName == '') {\n      throw new Error(`Replacement name for targeted flags is required.`);\n    }\n    const lines = this._makeLines();\n    let result = '';\n    for (let i = lines.length - 1; i > -1; i--) {\n      let line = lines[i];\n      if (line[0].toLowerCase().startsWith('flag')) {\n        result = (line[0].endsWith(name) ? line[0].replace(name, replacementName) : line[0]) + '\\n' + result;\n      } else {\n        result = line[0] + '\\n' + result;\n      }\n    }\n    this._schematic = result;\n    return this;\n  }\n\n  updateSymbol(name, genericPartNumber, deleteIfNotFound, rails) {\n    if (rails) {\n      this._untiePinsFromRails(name, rails);\n      const deleteNotFound = this._replaceSymbol(name, genericPartNumber, rails, deleteIfNotFound);\n      if (!deleteNotFound) {\n        this._tiePinsToRails(name, genericPartNumber, rails);\n      }\n    } else {\n      this._replaceSymbol(name, genericPartNumber, rails, deleteIfNotFound);\n    }\n\n    return this;\n  }\n\n  updateSymbolValue(name, value) {\n    const symbolRange = this._findSymbolByInstanceName(name);\n    if (!symbolRange) {\n      throw new Error(`No symbol found with reference designator ${name}`);\n    }\n    const attributeLine = this._findSymbolAttributeByName(symbolRange, 'Value');\n    if (!attributeLine) {\n      throw new Error(`Attribute Value not found for reference designator ${name}`);\n    }\n    const attributePattern = /(\\S+\\s+\\S+\\s+)(.*)/;\n    const pieces = attributePattern.exec(attributeLine[0]);\n    if (!pieces) {\n      throw new Error(`Attribute Value for ${name} doesn't have expected structure`);\n    }\n    let newValue = numberToUserDisplay(value, 'Spice', this._digits, { showZeroes: false });\n    const newSymattr = attributeLine[0].replace(attributePattern, `$1${newValue}`);\n    let result =\n      this._schematic.substring(0, attributeLine[1]) +\n      newSymattr +\n      this._schematic.substring(attributeLine[1] + attributeLine[0].length);\n    this._schematic = result;\n    return this;\n  }\n\n  updateSymbolAttribute(name, attribute, value) {\n    this._schematic = this._updateSymbolAttribute(name, attribute, value);\n    return this;\n  }\n\n  updateSubcircuitSymbol(name, symbolName) {\n    const symbolRange = this._findSymbolByInstanceName(name);\n    const symbolPieces = symbolPattern.exec(symbolRange[0][0]);\n    if (!symbolPieces) {\n      throw new Error(`The SYMBOL row for the specified reference designator doesn't have the expected format.`);\n    }\n    let part = {\n      name: symbolPieces[2],\n      x: parseInt(symbolPieces[4]),\n      y: parseInt(symbolPieces[6]),\n      transform: symbolPieces[8],\n    };\n\n    const newSymbol = symbolRange[0][0].replace(\n      symbolPattern,\n      `$1${symbolName}$3${part.x}$5${part.y}$7${part.transform}$9`\n    );\n    let result =\n      this._schematic.substring(0, symbolRange[0][1]) +\n      newSymbol +\n      this._schematic.substring(symbolRange[0][1] + symbolRange[0][0].length);\n    this._schematic = result;\n    return this;\n  }\n\n  updateTextContent(placeholderText, replacementText) {\n    const lines = this._makeLines();\n    let textLines = lines.filter((line) => line[0].toLowerCase().startsWith('text') && line[0].indexOf(' !') == -1);\n    let result = '';\n    textLines.forEach((line) => {\n      let segments = line[0].match(/[\\w'\\w;]+(?:[^\\w\\n]+[\\w'\\w;]+){0,4}/g);\n      if (placeholderText == '') {\n        result = this._schematic.replace(line[0], `${segments[0]} ${replacementText}`);\n        this._schematic = result;\n      } else {\n        if (segments[1].includes(placeholderText)) {\n          let newTextContent = segments[1].replace(placeholderText, replacementText);\n          result = this._schematic.replace(line[0], `${segments[0]} ${newTextContent}`);\n          this._schematic = result;\n        }\n      }\n    });\n    return this;\n  }\n\n  setSymbolAttribute(name, attribute, value) {\n    const symbolRange = this._findSymbolByInstanceName(name);\n    if (!symbolRange) {\n      throw new Error(`Couldn't find ${name} in schematic schematic`);\n    }\n    const attributeLine = this._findSymbolAttributeByName(symbolRange, attribute);\n    if (attributeLine) {\n      if (value === null) {\n        // attributeLine is [the line text, the index where it starts]\n        const hasCarriageReturn = this._schematic.substr(attributeLine[1] + attributeLine[0].length, 1) === '\\r';\n        this._schematic =\n          this._schematic.substring(0, attributeLine[1]) +\n          this._schematic.substring(attributeLine[1] + attributeLine[0].length + (hasCarriageReturn ? 2 : 1));\n      } else {\n        this._schematic = this._updateSymbolAttribute(name, attribute, value);\n      }\n    } else if (value !== null) {\n      this._schematic = this._addSymbolAttribute(name, attribute, value);\n    }\n    return this;\n  }\n\n  /* Exported Voltage Source Functions */\n  updateDCVoltageSource(name, voltage) {\n    let result = this._updateDCSource(name, voltage);\n    this._schematic = result;\n    return this;\n  }\n\n  updateACVoltageSource(name, voltage, phase) {\n    let result = this._updateACSource(name, voltage, phase);\n    this._schematic = result;\n    return this;\n  }\n\n  updateSineVoltageSource(name, parameters) {\n    let result = this._updateSineSource(name, parameters);\n    this._schematic = result;\n    return this;\n  }\n\n  updatePulseVoltageSource(name, parameters) {\n    let result = this._updatePulseSource(name, parameters);\n    this._schematic = result;\n    return this;\n  }\n\n  /* Exported Current Source Functions */\n  updateDCCurrentSource(name, current) {\n    let result = this._updateDCSource(name, current);\n    this._schematic = result;\n    return this;\n  }\n\n  updateACCurrentSource(name, current, phase) {\n    let result = this._updateACSource(name, current, phase);\n    this._schematic = result;\n    return this;\n  }\n\n  updateSineCurrentSource(name, parameters) {\n    let result = this._updateSineSource(name, parameters);\n    this._schematic = result;\n    return this;\n  }\n\n  updatePulseCurrentSource(name, parameters) {\n    let result = this._updatePulseSource(name, parameters);\n    this._schematic = result;\n    return this;\n  }\n\n  /* Exported Simulation Directive Functions */\n  updateTransientAnalysis(parameters) {\n    let line = this._findSimulationTypeCommand('tran');\n    if (!line) {\n      throw new Error(`No transient simulation directive found in schematic`);\n    }\n    let segments = line[0].split(' !.');\n    let pieces = segments[segments.length - 1].split(' ');\n    let values = pieces.slice(1);\n    let orderedParams = this._useSecondTransientSyntax(values) ? orderedTransientParams2 : orderedTransientParams;\n    if (this._checkParameters(parameters, orderedParams)) {\n      if (values.length - 1 >= this._getMaxIndex(orderedParams, parameters)) {\n        let newValues = this._getUpdatedValues(values, parameters, orderedParams);\n        let value = `TRAN ${newValues.join(' ')}`;\n        let result = this._updateSimulationType(value);\n        this._schematic = result;\n        return this;\n      }\n      throw new Error(`One of the parameters provided is not contained in the sequence of values in the template`);\n    }\n    throw new Error(`One of the parameters provided is not valid for the directive used in the template`);\n  }\n\n  updateACAnalysis(parameters) {\n    let line = this._findSimulationTypeCommand('ac');\n    if (!line) {\n      throw new Error(`No ac simulation directive found in schematic`);\n    }\n    let segments = line[0].split(' !.');\n    let pieces = segments[segments.length - 1].split(' ');\n    let values = pieces.slice(1);\n    let sweepTypes = ['DEC', 'LIN', 'OCT'];\n    if (values.length - 1 >= this._getMaxIndex(orderedSweepParams, parameters)) {\n      let newValues = this._getUpdatedValues(values, parameters, orderedSweepParams, sweepTypes);\n      let value = `AC ${newValues.join(' ')}`;\n      let result = this._updateSimulationType(value);\n      this._schematic = result;\n      return this;\n    }\n    throw new Error(`One of the parameters provided is not contained in the sequence of values in the template`);\n  }\n\n  updateNoiseAnalysis(parameters) {\n    let line = this._findSimulationTypeCommand('noise');\n    if (!line) {\n      throw new Error(`No noise simulation directive found in schematic`);\n    }\n    let segments = line[0].split(' !.');\n    let pieces = segments[segments.length - 1].split(' ');\n    let values = pieces.slice(3);\n    let sweepTypes = ['DEC', 'LIN', 'OCT'];\n    if (values.length - 1 >= this._getMaxIndex(orderedSweepParams, parameters)) {\n      let newValues = this._getUpdatedValues(values, parameters, orderedSweepParams, sweepTypes);\n      let value = `NOISE ${pieces[1]} ${pieces[2]} ${newValues.join(' ')}`;\n      let result = this._updateSimulationType(value);\n      this._schematic = result;\n      return this;\n    }\n    throw new Error(`One of the parameters provided is not contained in the sequence of values in the template`);\n  }\n\n  getComponentValue(name) {\n    const valueAsString = this.getSymbolAttribute(name, 'Value');\n    return userEntryToNumber(valueAsString);\n  }\n\n  setComponentValue(name, value) {\n    const displayValue = numberToUserDisplay(value, 'Spice', this._digits, { showZeroes: false });\n    let result = this._updateSymbolAttribute(name, 'Value', displayValue);\n    this._schematic = result;\n    return this;\n  }\n\n  /* Internal Functions */\n  _getOffset(newPartValue, oldPartValue) {\n    return newPartValue - oldPartValue;\n  }\n\n  _findSymbolByInstanceName(name) {\n    const lines = this._makeLines();\n    let startBlock = -1;\n    let endBlock = -1;\n    let match = false;\n    for (let index = 0; index < lines.length; index++) {\n      const line = lines[index];\n      const pieces = line[0].split(/\\s/);\n      if (pieces.length < 1) {\n        continue;\n      }\n      switch (pieces[0].toLowerCase()) {\n        case 'symbol':\n          if (match) {\n            endBlock = index;\n          } else {\n            startBlock = index;\n          }\n          break;\n        case 'symattr':\n          if (\n            pieces.length > 2 &&\n            pieces[1].toLowerCase() === 'instname' &&\n            pieces[2].toLowerCase() === name.toLowerCase()\n          ) {\n            match = true;\n          }\n          break;\n        case 'window':\n        case 'pinattr':\n          break;\n        default:\n          if (match) {\n            endBlock = index;\n          }\n      }\n      if (match && startBlock >= 0 && endBlock >= 0) {\n        return lines.slice(startBlock, endBlock);\n      }\n    }\n    if (match && startBlock >= 0) {\n      return lines.slice(startBlock, lines.length);\n    }\n    return;\n  }\n\n  _findSymbolAttributeByName(schematicLines, name) {\n    const line = schematicLines.find((line) => {\n      const pieces = line[0].split(/\\s/);\n      if (pieces.length < 1) {\n        return false;\n      }\n      return pieces[0].toLowerCase() === 'symattr' && pieces[1].toLowerCase() === name.toLowerCase();\n    });\n    return line;\n  }\n\n  _findSymbolAttributeInsertionPoint(schematicLines, terminator) {\n    const lineStart = schematicLines[schematicLines.length - 1][1];\n    const lineLength = schematicLines[schematicLines.length - 1][0].length;\n    return lineStart + lineLength + terminator.length;\n  }\n\n  _findSimulationTypeCommand(type) {\n    const SIMCMDS = ['!.ac', '!.dc', '!.noise', '!.op', '!.tf', '!.tran'];\n    const lines = this._makeLines();\n    const line = lines.find((value) => {\n      const pieces = value[0].split(/\\s/);\n      return (\n        pieces.length > 6 &&\n        pieces[0].toLowerCase() === 'text' &&\n        SIMCMDS.includes(pieces[5].toLowerCase()) &&\n        pieces[5].toLowerCase() === '!.' + type.toLowerCase()\n      );\n    });\n    return line;\n  }\n\n  _makeLines() {\n    let index = 0;\n    const lines = [];\n    const linePattern = /([^\\r\\n]*)\\r?\\n/g;\n    const schematicTerm =\n      this._schematic[this._schematic.length - 1] === '\\n' ? this._schematic : this._schematic + '\\n';\n    let line = null;\n    while ((line = linePattern.exec(schematicTerm)) !== null) {\n      lines.push([line[1], index]);\n      index = linePattern.lastIndex;\n    }\n    return lines;\n  }\n\n  _findIndex(lines, value) {\n    let result = lines.findIndex((line) => {\n      let pieces = line[0].split(/\\s/);\n      return pieces[0].toLowerCase() == value.toLowerCase();\n    });\n    return result;\n  }\n\n  _addSymbolAttribute(name, attribute, value) {\n    const symbolRange = this._findSymbolByInstanceName(name);\n    if (!symbolRange) {\n      throw new Error(`No symbol found with reference designator ${name}`);\n    }\n    const lineTerminator = this._schematic.substr(symbolRange[0][1] - 2, 2) === '\\r\\n' ? '\\r\\n' : '\\n';\n    const position = this._findSymbolAttributeInsertionPoint(symbolRange, lineTerminator);\n    let result =\n      this._schematic.substring(0, position) +\n      `SYMATTR ${attribute} ${value}${lineTerminator}` +\n      this._schematic.substring(position);\n\n    return result;\n  }\n\n  _updateSymbolAttribute(name, attribute, value) {\n    const symbolRange = this._findSymbolByInstanceName(name);\n    if (!symbolRange) {\n      throw new Error(`No symbol found with reference designator ${name}`);\n    }\n    const attributeLine = this._findSymbolAttributeByName(symbolRange, attribute);\n    if (!attributeLine) {\n      throw new Error(`Attribute ${attribute} not found for reference designator ${name}`);\n    }\n    const attributePattern = /(\\S+\\s+\\S+\\s+)(.*)/;\n    const pieces = attributePattern.exec(attributeLine[0]);\n    if (!pieces) {\n      throw new Error(`Attribute ${attribute} for ${name} doesn't have expected structure`);\n    }\n    const newSymattr = attributeLine[0].replace(attributePattern, `$1${value}`);\n    let result =\n      this._schematic.substring(0, attributeLine[1]) +\n      newSymattr +\n      this._schematic.substring(attributeLine[1] + attributeLine[0].length);\n    return result;\n  }\n\n  _updateSimulationType(type) {\n    const SIMCMDS = ['ac', 'dc', 'noise', 'op', 'tf', 'tran'];\n    const bits = type.toLowerCase().split(/\\s+/);\n    if (bits.length > 0 && SIMCMDS.includes(bits[0])) {\n      const command = this._findSimulationTypeCommand(bits[0]);\n      if (!command) {\n        throw new Error(`Couldn't find a simulation type command in the schematic`);\n      }\n      const simulationPattern = /(\\S+\\s+\\S+\\s+\\S+\\s+\\S+\\s+\\S+\\s+)(.*)/;\n      const pieces = simulationPattern.exec(command[0]);\n      if (!pieces) {\n        throw new Error(`Simulation type command doesn't have expected structure`);\n      }\n      const newCommand = command[0].replace(simulationPattern, `$1${'!.' + type}`);\n      let result =\n        this._schematic.substring(0, command[1]) +\n        newCommand +\n        this._schematic.substring(command[1] + command[0].length);\n      return result;\n    }\n    throw new Error(`Invalid or missing command in '${type}'`);\n  }\n\n  _updateDCSource(name, value) {\n    let newValue = numberToUserDisplay(value, 'Spice', this._digits, { showZeroes: false });\n    return this._updateSymbolAttribute(name, 'Value', newValue);\n  }\n\n  _updateACSource(name, value, phase) {\n    let newValue = numberToUserDisplay(value, 'Spice', this._digits, { showZeroes: false });\n    let _value = `${newValue}`;\n    if (typeof phase !== 'undefined') {\n      let newPhase = numberToUserDisplay(phase, 'Spice', this._digits, { showZeroes: false });\n      _value = `${newValue} ${newPhase}`;\n    }\n    return this._updateSymbolAttribute(name, 'Value', _value);\n  }\n\n  _updateSineSource(name, parameters) {\n    let templateValue = this.getSymbolAttribute(name, 'Value');\n    if (!templateValue.toLowerCase().startsWith('sine')) {\n      throw new Error(`Template value not starting with SINE keyword`);\n    }\n    let values = templateValue.substring(templateValue.indexOf('(') + 1, templateValue.indexOf(')')).split(' ');\n    if (values.length - 1 >= this._getMaxIndex(orderedSineParams, parameters)) {\n      let newValues = this._getUpdatedValues(values, parameters, orderedSineParams);\n      let value = `SINE(${newValues.join(' ')})`;\n      return this._updateSymbolAttribute(name, 'Value', value);\n    }\n    throw new Error(`One of the parameters provided is not contained in the sequence of values in the template`);\n  }\n\n  _updatePulseSource(name, parameters) {\n    let templateValue = this.getSymbolAttribute(name, 'Value');\n    if (!templateValue.toLowerCase().startsWith('pulse')) {\n      throw new Error(`Template value not starting with PULSE keyword`);\n    }\n    let values = templateValue.substring(templateValue.indexOf('(') + 1, templateValue.indexOf(')')).split(' ');\n    if (values.length - 1 >= this._getMaxIndex(orderedPulseParams, parameters)) {\n      let newValues = this._getUpdatedValues(values, parameters, orderedPulseParams);\n      let value = `PULSE(${newValues.join(' ')})`;\n      return this._updateSymbolAttribute(name, 'Value', value);\n    }\n    throw new Error(`One of the parameters provided is not contained in the sequence of values in the template`);\n  }\n\n  _validateSymbolPath(templateSymbolPath, targetSymbolPath) {\n    let result = true;\n    let templatePath = templateSymbolPath.substring(0, templateSymbolPath.lastIndexOf('\\\\'));\n    let targetPath = targetSymbolPath.substring(0, targetSymbolPath.lastIndexOf('\\\\'));\n    result = targetPath.toLowerCase() == templatePath.toLowerCase() ? true : false;\n    return result;\n  }\n\n  _isDirectiveLine(line) {\n    let result = false;\n    for (let i = 0; i < directives.length; i++) {\n      result = line.toLowerCase().indexOf(directives[i].toLowerCase()) > -1;\n      if (result === true) return result;\n    }\n    return result;\n  }\n\n  _getMaxIndex(list, parameters) {\n    let maxIndex = -1;\n    for (let param in parameters) {\n      maxIndex = Math.max(\n        maxIndex,\n        list.findIndex((item) => item == param)\n      );\n    }\n    return maxIndex;\n  }\n\n  _getUpdatedValues(values, parameters, orderedList, sweepTypes) {\n    let result = values.map((value, index) => {\n      let isValid = parameters[orderedList[index]] !== null && typeof parameters[orderedList[index]] !== 'undefined';\n      if (orderedList[index] == 'sweepType') {\n        return isValid && sweepTypes.includes(sweepType[parameters[orderedList[index]]])\n          ? sweepType[parameters[orderedList[index]]]\n          : value.toUpperCase();\n      } else {\n        return isValid\n          ? numberToUserDisplay(parameters[orderedList[index]], 'Spice', this._digits, { showZeroes: false })\n          : value;\n      }\n    });\n    return result;\n  }\n\n  _useSecondTransientSyntax(values) {\n    let result = false;\n    result = values.length == 1 || (values.length > 1 && !transientRegExp.test(values[1]));\n    return result;\n  }\n\n  _checkParameters(parameters, orderedParams) {\n    let result = true;\n    for (let param in parameters) {\n      result = orderedParams.indexOf(param) > -1 ? true : false;\n      if (!result) return result;\n    }\n    return result;\n  }\n\n  _untiePinsFromRails(referenceDesignator, rails) {\n    const part = this._getPartPieces(referenceDesignator);\n    const templateSpiceNum = this._getTemplateSpiceNum(part);\n    // If we couldn't find the part number in spice-parts, bail.\n    if (!templateSpiceNum) {\n      throw new Error(\n        `Unable to find symbol path \"${part.name}\", referenced in template, in spiceParts collection. All parts in template to be updated must appear in the collection.`\n      );\n    }\n\n    let result = this._schematic;\n    const spicePart = templateSpiceNum[1];\n    if (spicePart && spicePart.pins) {\n      const applicablePins = this._getApplicablePins(spicePart, rails);\n      for (const pin of applicablePins) {\n        if (pin.x && pin.y) {\n          const pinOffset = this._determineSymbolPinAdjustment(\n            spicePart.offsetX,\n            spicePart.offsetY,\n            pin.x,\n            pin.y,\n            part.transform\n          );\n          const pinEnd = { x: pinOffset.x + part.x, y: pinOffset.y + part.y };\n          const wireEnd = this._getStubWireEnd(part.transform, pin.orientation ?? '', pinEnd.x, pinEnd.y, 25);\n          result = this._removeWireStubAt(result, pinEnd.x, pinEnd.y, wireEnd.x, wireEnd.y);\n          result = this._removeFlagAt(result, wireEnd.x, wireEnd.y);\n        }\n      }\n    }\n\n    this._schematic = result;\n  }\n\n  _replaceSymbol(referenceDesignator, newPartNumber, rails, deleteIfNotFound) {\n    const symbolRange = this._findSymbolByInstanceName(referenceDesignator);\n    if (!symbolRange) {\n      throw new Error('Reference designator ' + referenceDesignator + ' not found.');\n    }\n    let part = this._getPartPieces(referenceDesignator);\n    const sourcePart = Object.assign({}, part);\n    const templateSpiceNum = this._getTemplateSpiceNum(part);\n    // If we couldn't find the part number in spice-parts, bail.\n    if (!templateSpiceNum) {\n      throw new Error(\n        `Unable to find symbol path \"${sourcePart.name}\", referenced in template, in spiceParts collection. All parts in template to be updated must appear in the collection.`\n      );\n    }\n\n    let result = '';\n    const sourcePartDetails = templateSpiceNum[1];\n    const targetPartDetails = this._partsData[newPartNumber];\n    // Adjust (x,y) based on difference between parts (x,y)\n    if (targetPartDetails) {\n      part.name = targetPartDetails.symbolPath;\n      if (rails) {\n        const positionAdjustment = this._determineSymbolPinAdjustment(\n          sourcePartDetails.offsetX,\n          sourcePartDetails.offsetY,\n          targetPartDetails.offsetX,\n          targetPartDetails.offsetY,\n          part.transform\n        );\n        part.x = sourcePart.x + positionAdjustment.x;\n        part.y = sourcePart.y + positionAdjustment.y;\n      } else {\n        part.x = sourcePart.x + this._getOffset(targetPartDetails.offsetX, sourcePartDetails.offsetX);\n        part.y = sourcePart.y + this._getOffset(targetPartDetails.offsetY, sourcePartDetails.offsetY);\n      }\n\n      const newSymbol = symbolRange[0][0].replace(\n        symbolPattern,\n        `$1${part.name}$3${part.x}$5${part.y}$7${part.transform}$9`\n      );\n\n      result =\n        this._schematic.substring(0, symbolRange[0][1]) +\n        newSymbol +\n        this._schematic.substring(symbolRange[0][1] + symbolRange[0][0].length);\n\n      deleteIfNotFound = false;\n    } else {\n      if (deleteIfNotFound === true) {\n        // Since targetPartDetails is undefined, we use the x and y values of the template part to place the text.\n        const newTextLine = `TEXT ${sourcePart.x} ${sourcePart.y} Left 2 ;Schematic generator \\\\ncould not find ${\n          newPartNumber ? newPartNumber : `blank part`\n        } \\\\nin LTspice parts library`;\n        const newSymbol = symbolRange[0][0].replace(symbolPattern, newTextLine);\n        result =\n          this._schematic.substring(0, symbolRange[0][1]) +\n          newSymbol +\n          this._schematic.substring(\n            symbolRange[symbolRange.length - 1][1] + symbolRange[symbolRange.length - 1][0].length\n          );\n      } else {\n        throw new Error(\n          `Unable to find ${newPartNumber ? newPartNumber : 'blank'} target partNumber in spiceParts collection`\n        );\n      }\n    }\n\n    this._schematic = result;\n    return deleteIfNotFound;\n  }\n\n  _tiePinsToRails(referenceDesignator, newPartNumber, rails) {\n    const part = this._getPartPieces(referenceDesignator);\n    const templateSpiceNum = this._getTemplateSpiceNum(part);\n    // If we couldn't find the part number in spice-parts, bail.\n    if (!templateSpiceNum) {\n      throw new Error(\n        `Unable to find symbol path \"${part.name}\", referenced in template, in spiceParts collection. All parts in template to be updated must appear in the collection.`\n      );\n    }\n\n    let result = this._schematic;\n    const spicePart = this._partsData[newPartNumber];\n    if (spicePart && spicePart.pins) {\n      const applicablePins = this._getApplicablePins(spicePart, rails);\n      for (const pin of applicablePins) {\n        if (pin.x && pin.y && pin.connection) {\n          const pinOffset = this._determineSymbolPinAdjustment(\n            spicePart.offsetX,\n            spicePart.offsetY,\n            pin.x,\n            pin.y,\n            part.transform\n          );\n          const pinEnd = { x: pinOffset.x + part.x, y: pinOffset.y + part.y };\n          const wireEnd = this._getStubWireEnd(part.transform, pin.orientation ?? '', pinEnd.x, pinEnd.y, 25);\n          result = this._addWireStubAt(result, pinEnd.x, pinEnd.y, wireEnd.x, wireEnd.y);\n          result = this._addFlagAt(result, wireEnd.x, wireEnd.y, rails[pin.connection]);\n        }\n      }\n    }\n\n    this._schematic = result;\n  }\n\n  _getApplicablePins(partDetails, rails) {\n    const railKeys = Object.keys(rails);\n    const applicablePins = partDetails.pins.filter((value) => {\n      return value.connection && railKeys.includes(value.connection);\n    });\n\n    return applicablePins;\n  }\n\n  _getPartPieces(referenceDesignator) {\n    const symbolRange = this._findSymbolByInstanceName(referenceDesignator);\n    if (!symbolRange) {\n      throw new Error('Reference designator ' + referenceDesignator + ' not found.');\n    }\n    const pieces = symbolPattern.exec(symbolRange[0][0]);\n    if (!pieces) {\n      throw new Error(\"The SYMBOL row for the specified reference designator doesn't have the expected format.\");\n    }\n\n    const part = {\n      name: pieces[2],\n      x: parseInt(pieces[4]),\n      y: parseInt(pieces[6]),\n      transform: pieces[8],\n    };\n\n    return part;\n  }\n\n  _getTemplateSpiceNum(part) {\n    let templateSpiceNum = Object.entries(this._templateParts).find((partData) => {\n      return partData[1].symbolPath === part.name;\n    });\n    if (!templateSpiceNum) {\n      if (this._templateParts === this._partsData) {\n        throw new Error(\n          `Unable to find symbol path \"${part.name}\", referenced in template, in spiceParts collection. All parts in template to be updated must appear in this collection unless a separate templateParts collection is supplied.`\n        );\n      } else {\n        templateSpiceNum = Object.entries(this._partsData).find((partData) => {\n          return partData[1].symbolPath === part.name;\n        });\n        if (!templateSpiceNum) {\n          throw new Error(\n            `Unable to find symbol path \"${part.name}\", referenced in template, in either templateParts collection or partsData collection.`\n          );\n        }\n      }\n    }\n    return templateSpiceNum;\n  }\n\n  _determineSymbolPinAdjustment(partX, partY, pinX, pinY, orientation) {\n    const xyRotationTable = {\n      R0: { x: 1, y: 1 },\n      R90: { x: -1, y: 1 },\n      R180: { x: -1, y: -1 },\n      R270: { x: 1, y: -1 },\n      M0: { x: -1, y: 1 },\n      M90: { x: 1, y: 1 },\n      M180: { x: 1, y: -1 },\n      M270: { x: -1, y: -1 },\n    };\n    //The orientation we read from the file has to be checked against our list at some point.\n    //Here is as good as any.\n    //see: https://dev.to/kingdaro/indexing-objects-in-typescript-1cgi\n    function _hasKey(obj, key) {\n      return key in obj;\n    }\n    // Adjust (x,y) based on difference between parts (x,y)\n    const xDiff = pinX - partX;\n    const yDiff = pinY - partY;\n    let adjustment = { x: NaN, y: NaN };\n    if (_hasKey(xyRotationTable, orientation)) {\n      adjustment.x = xDiff * xyRotationTable[orientation].x;\n      adjustment.y = yDiff * xyRotationTable[orientation].y;\n    } else {\n      throw new Error(\n        'Orientation read from file is ' + orientation + '. This is not an orientation we know how to parse'\n      );\n    }\n    return adjustment;\n  }\n\n  _getStubWireEnd(partDirection, pinDirection, xin, yin, length) {\n    const xyRotationTable = {\n      R0: { x: 1, y: 1 },\n      R90: { x: -1, y: 1 },\n      R180: { x: -1, y: -1 },\n      R270: { x: 1, y: -1 },\n      M0: { x: -1, y: 1 },\n      M90: { x: 1, y: 1 },\n      M180: { x: 1, y: -1 },\n      M270: { x: -1, y: -1 },\n    };\n    const rotation = xyRotationTable[partDirection];\n    const relativeEnd =\n      pinDirection === 'top'\n        ? { x: 0, y: -length }\n        : pinDirection === 'bottom'\n        ? { x: 0, y: length }\n        : pinDirection === 'left'\n        ? { x: -length, y: 0 }\n        : pinDirection === 'right'\n        ? { x: length, y: 0 }\n        : { x: 0, y: 0 };\n\n    return {\n      x: xin + relativeEnd.x * rotation.x,\n      y: yin + relativeEnd.y * rotation.y,\n    };\n  }\n\n  _removeWireStubAt(schematic, x1, y1, x2, y2) {\n    const regex = /wire\\s+(-?\\d+(.\\d+)?)\\s+(-?\\d+(.\\d+)?)\\s+(-?\\d+(.\\d+)?)\\s+(-?\\d+(.\\d+)?)/gi;\n    let matched;\n    while ((matched = regex.exec(schematic))) {\n      const offset = schematic[regex.lastIndex] === '\\r' ? 2 : 1;\n      if (\n        Math.round(parseFloat(matched[1])) === Math.round(x1) &&\n        Math.round(parseFloat(matched[3])) === Math.round(y1) &&\n        Math.round(parseFloat(matched[5])) === Math.round(x2) &&\n        Math.round(parseFloat(matched[7])) === Math.round(y2)\n      ) {\n        return schematic.substring(0, matched.index) + schematic.substring(regex.lastIndex + offset);\n      }\n    }\n    return schematic;\n  }\n\n  _addWireStubAt(schematic, x1, y1, x2, y2) {\n    const pos = schematic.toLowerCase().indexOf('\\nsymbol');\n    if (pos > 0) {\n      const separator = schematic[pos - 1] !== '\\r' ? '\\n' : '\\r\\n';\n      return (\n        schematic.substring(0, pos + 1) + `WIRE ${x1} ${y1} ${x2} ${y2}${separator}` + schematic.substring(pos + 1)\n      );\n    }\n    return schematic;\n  }\n\n  _removeFlagAt(schematic, x, y) {\n    const regex = /flag\\s+(-?\\d+(.\\d+)?)\\s+(-?\\d+(.\\d+)?)\\s+[\\w\\d_-]+/gi;\n    let matched;\n    while ((matched = regex.exec(schematic))) {\n      const offset = schematic[regex.lastIndex] === '\\r' ? 2 : 1;\n      if (\n        Math.round(parseFloat(matched[1])) === Math.round(x) &&\n        Math.round(parseFloat(matched[3])) === Math.round(y)\n      ) {\n        return schematic.substring(0, matched.index) + schematic.substring(regex.lastIndex + offset);\n      }\n    }\n    return schematic;\n  }\n\n  _addFlagAt(schematic, x, y, flagName) {\n    const pos = schematic.toLowerCase().indexOf('\\nsymbol');\n    if (pos > 0) {\n      const separator = schematic[pos - 1] !== '\\r' ? '\\n' : '\\r\\n';\n      return schematic.substring(0, pos + 1) + `FLAG ${x} ${y} ${flagName}${separator}` + schematic.substring(pos + 1);\n    }\n    return schematic;\n  }\n}\n","import { waitForPromise } from '@ember/test-waiters';\r\nimport { numberToUserDisplay } from '@ebiz/pretty-num';\r\nimport * as AditoolsSpice from '@ebiz/aditools-spice/schematics';\r\nimport ModelService from '../services/model';\r\nimport type IntlService from 'ember-intl/services/intl';\r\nimport * as AditoolsSpiceParts from '@ebiz/aditools-spice/data/opamps.json';\r\n\r\nconst ascAnalysisList: Record<string, string> = {\r\n  AC: 'ACAnalysis.asc',\r\n  NOISE: 'NoiseAnalysis.asc',\r\n  TRAN: 'TransientAnalysis.asc',\r\n};\r\n\r\nconst INFINITY = 1e66;\r\n\r\nexport function getSchematicName(page: string, model: ModelService): string {\r\n  let schematicName = 'Photo';\r\n  let schematicBias = model.state.Bias === '+' ? 'Pos' : 'Neg';\r\n  let schematicStage = model.state.StageCount === 1 || page === 'photodiode' ? '1Stage' : '2Stage';\r\n  let schematicVoltageFollower = '';\r\n  if (\r\n    page !== 'photodiode' &&\r\n    model.state.Bias === '-' &&\r\n    model.schematicModel.stage2 &&\r\n    model.schematicModel.stage2.rf === 0 &&\r\n    model.schematicModel.stage2.rg === INFINITY\r\n  ) {\r\n    schematicVoltageFollower = 'VoltageFollower';\r\n  }\r\n  schematicName = schematicName + schematicBias + schematicStage + schematicVoltageFollower;\r\n  if (page === 'nextsteps') {\r\n    schematicName = schematicName + '_NextSteps';\r\n  }\r\n  return schematicName;\r\n}\r\n\r\nexport function getAnalysisFiles(pathURL: string, name: string): Record<string, Promise<string>> {\r\n  let promiseArray: Record<string, Promise<string>> = {};\r\n  for (let asc in ascAnalysisList) {\r\n    let url = `${pathURL}/${name}_${ascAnalysisList[asc]}`;\r\n    promiseArray[asc] = getAnalysisFile(url);\r\n  }\r\n  return promiseArray;\r\n}\r\n\r\nexport function getAnalysisFile(url: string): Promise<string> {\r\n  return waitForPromise(\r\n    fetch(url).then((response) => {\r\n      if (response.status !== 200) {\r\n        throw `HTTP Request Failed reading ${url}: ${response.status} ${response.statusText}`;\r\n      }\r\n      return response.text();\r\n    }),\r\n  );\r\n}\r\n\r\nexport async function getSpiceSchematicFiles(\r\n  pathURL: string,\r\n  name: string,\r\n  opamps: string[],\r\n  downloadType: string,\r\n  modelService: ModelService,\r\n  intl: IntlService,\r\n): Promise<Array<DownloadFile>> {\r\n  let downloadFiles: Array<DownloadFile> = [];\r\n  let downloadFile: DownloadFile;\r\n  const spicePartsInfo: Record<string, AditoolsSpice.SpicePartInfo> = AditoolsSpiceParts;\r\n  const readmeFile = generateReadMeFile(opamps, spicePartsInfo, downloadType, intl);\r\n  if (Object.entries(readmeFile).length > 0) {\r\n    downloadFiles.push(readmeFile);\r\n    return downloadFiles;\r\n  }\r\n  const schematicValues = getSchematicValues(modelService);\r\n  const responseLimits = getResponseLimits(modelService);\r\n  const analysisFiles = getAnalysisFiles(pathURL, name);\r\n  for (const asc in ascAnalysisList) {\r\n    let schematic = new AditoolsSpice.SpiceSchematic(spicePartsInfo, (await analysisFiles[asc]) as string, 3);\r\n    for (const [index, opamp] of opamps.entries()) {\r\n      const rails = { '+Rail': 'Vp', '-Rail': 'Vn' };\r\n      schematic.updateSymbol(`U${index + 1}`, opamp, true, rails);\r\n    }\r\n    for (const item in schematicValues) {\r\n      const itemValue = schematicValues[item] as number | string;\r\n      schematic.updateSymbolAttribute(\r\n        item,\r\n        'Value',\r\n        typeof itemValue === 'number' ? numberToUserDisplay(itemValue, 'Spice', 3, { showZeroes: false }) : itemValue,\r\n      );\r\n    }\r\n    if (asc == 'AC') {\r\n      const parameters: AditoolsSpice.SweepParameters = {\r\n        sweepType: 'decade',\r\n        points: 100,\r\n        startFrequency: responseLimits['minimumFrequency'],\r\n        stopFrequency: responseLimits['maximumFrequency'],\r\n      };\r\n      schematic.updateACAnalysis(parameters);\r\n    }\r\n    if (asc == 'NOISE') {\r\n      const parameters: AditoolsSpice.SweepParameters = {\r\n        sweepType: 'decade',\r\n        points: 100,\r\n        startFrequency: responseLimits['minimumFrequency'],\r\n        stopFrequency: responseLimits['maximumFrequency'],\r\n      };\r\n      schematic.updateNoiseAnalysis(parameters);\r\n    }\r\n    if (asc == 'TRAN') {\r\n      const parameters: AditoolsSpice.TransientParameters = {\r\n        step: 0.000000001,\r\n        stopTime: (responseLimits['maximumTimeAxis'] as number) / 2,\r\n      };\r\n      schematic.updateTransientAnalysis(parameters);\r\n\r\n      const pulseParameters: AditoolsSpice.PulseSourceParameters = {\r\n        lowValue: 0,\r\n        highValue: modelService.state.Ip,\r\n        delayTime: 0.000000001,\r\n        riseTime: 0.000000001,\r\n        fallTime: 0.000000001,\r\n        pulseWidth: 1,\r\n        period: 2,\r\n      };\r\n      schematic.updatePulseCurrentSource('Ip', pulseParameters);\r\n    }\r\n    downloadFile = {\r\n      name: ascAnalysisList[asc],\r\n      value: schematic.schematic,\r\n      location: downloadType == 'all' ? 'SPICE Files\\\\LTSpice' : 'LTSpice',\r\n      type: 'LTSPICE',\r\n    };\r\n    downloadFiles.push(downloadFile);\r\n  }\r\n  return downloadFiles;\r\n}\r\n\r\nfunction getSchematicValues(modelService: ModelService): Record<string, string | number> {\r\n  let schematicValues: Record<string, string | number> = {};\r\n  let model = modelService;\r\n  schematicValues['Cd'] = model.state.Cd;\r\n  schematicValues['Rsh'] = model.state.Rsh;\r\n  schematicValues['V3'] =\r\n    (model.state.Bias == '-' ? '-' : '') + numberToUserDisplay(model.state.Vr, 'Spice', 5, { showZeroes: false });\r\n  schematicValues['V2'] = numberToUserDisplay(-model.powerSupplyRange.max, 'Spice', 5, { showZeroes: false });\r\n  schematicValues['V1'] = numberToUserDisplay(model.powerSupplyRange.max, 'Spice', 5, { showZeroes: false });\r\n  if (model.schematicModel.stage1) {\r\n    schematicValues['Cf'] = model.schematicModel.stage1.cf;\r\n    schematicValues['Rf'] = model.schematicModel.stage1.rf;\r\n  }\r\n  if (model.schematicModel.stage2) {\r\n    schematicValues['Cfilter'] = model.schematicModel.stage2.cfilter;\r\n    if (model.state.Bias == '+') {\r\n      schematicValues['Rf2'] = model.schematicModel.stage2.rf;\r\n      schematicValues['Rg2'] = model.schematicModel.stage2.rg;\r\n    }\r\n    if (model.state.Bias == '-') {\r\n      if (model.schematicModel.stage2.rf === 0 && model.schematicModel.stage2.rg === INFINITY) {\r\n        // This is a voltage follower circuit, which has no rf or rg on the second stage.\r\n        schematicValues['Rfilter'] = model.schematicModel.stage2.rfilter;\r\n      } else {\r\n        schematicValues['Rfilter'] = model.schematicModel.stage2.rfilter;\r\n        schematicValues['Rf2'] = model.schematicModel.stage2.rf;\r\n        schematicValues['Rg2'] = model.schematicModel.stage2.rg;\r\n      }\r\n    }\r\n  }\r\n  return schematicValues;\r\n}\r\n\r\nfunction getResponseLimits(modelService: ModelService): Record<string, number> {\r\n  return {\r\n    minimumFrequency: modelService.frequencyResponseVA.graph.limits.xmin,\r\n    maximumFrequency: modelService.frequencyResponseVA.graph.limits.xmax,\r\n    minimumTimeAxis: modelService.pulseResponse.graph.limits.xmin,\r\n    maximumTimeAxis: modelService.pulseResponse.graph.limits.xmax,\r\n  };\r\n}\r\n\r\nfunction generateReadMeFile(\r\n  opamps: string[],\r\n  spicePartsInfo: Record<string, AditoolsSpice.SpicePartInfo>,\r\n  downloadType: string,\r\n  intl: IntlService,\r\n): DownloadFile {\r\n  let result: DownloadFile = {};\r\n  let fileName = '';\r\n  let content = '';\r\n  let noSpicePartsInfo = [];\r\n  let _opamps = [...new Set(opamps)];\r\n\r\n  for (const _opamp of _opamps) {\r\n    if (typeof spicePartsInfo[_opamp] === 'undefined') {\r\n      noSpicePartsInfo.push(_opamp);\r\n    }\r\n  }\r\n\r\n  if (noSpicePartsInfo.length > 0) {\r\n    fileName = intl.t('download.spice-files.message_part_no_spice_info_filename');\r\n    content = intl.t('download.spice-files.message_part_no_spice_info');\r\n    noSpicePartsInfo.forEach((opamp) => {\r\n      content += `\\r\\n${opamp}\\tLTSpice`;\r\n    });\r\n    result = {\r\n      name: fileName,\r\n      value: content,\r\n      location: downloadType == 'all' ? 'SPICE Files' : '',\r\n      type: 'LTSPICE',\r\n    };\r\n  }\r\n  return result;\r\n}\r\n","import { setModifierManager, capabilities } from '@ember/modifier';\nimport { macroCondition, dependencySatisfies } from '@embroider/macros';\n\n/**\n  The `{{did-insert}}` element modifier is activated when an element is\n  inserted into the DOM.\n\n  In this example, the `fadeIn` function receives the `div` DOM element as its\n  first argument and is executed after the element is inserted into the DOM.\n\n  ```handlebars\n  <div {{did-insert this.fadeIn}} class=\"alert\">\n    {{yield}}\n  </div>\n  ```\n\n  ```js\n  export default Component.extend({\n    fadeIn(element) {\n      element.classList.add('fade-in');\n    }\n  });\n  ```\n\n  By default, the executed function will be unbound. If you would like to access\n  the component context in your function, use the `action` decorator as follows:\n\n  ```handlebars\n  <div {{did-insert this.incrementCount}}>first</div>\n  <div {{did-insert this.incrementCount}}>second</div>\n\n  <p>{{this.count}} elements were rendered</p>\n  ```\n\n  ```js\n  export default Component.extend({\n    count: tracked({ value: 0 }),\n\n    incrementCount: action(function() {\n      this.count++;\n    })\n  });\n  ```\n\n  @method did-insert\n  @public\n*/\nexport default setModifierManager(() => ({\n  capabilities: capabilities(macroCondition(dependencySatisfies('ember-source', '>= 3.22.0-beta.1')) ? '3.22' : '3.13', {\n    disableAutoTracking: true\n  }),\n  createModifier() {},\n  installModifier(_state, element, {\n    positional: [fn, ...args],\n    named\n  }) {\n    fn(element, args, named);\n  },\n  updateModifier() {},\n  destroyModifier() {}\n}), class DidInsertModifier {});","import Ember from 'ember';\nimport { registerWaiter } from '@ember/test';\n\n// this ensures that if @ember/test-waiters exists in multiple places in the\n// build output we will still use a single map of waiters (there really should\n// only be one of them, or else `settled` will not work at all)\nconst WAITERS = function () {\n  const HAS_SYMBOL = typeof Symbol !== 'undefined';\n  let symbolName = 'TEST_WAITERS';\n  let symbol = HAS_SYMBOL ? Symbol.for(symbolName) : symbolName;\n  let global = getGlobal();\n  let waiters = global[symbol];\n  if (waiters === undefined) {\n    waiters = global[symbol] = new Map();\n  }\n  return waiters;\n}();\nfunction indexable(input) {\n  return input;\n}\nfunction getGlobal() {\n  // eslint-disable-next-line node/no-unsupported-features/es-builtins\n  if (typeof globalThis !== 'undefined') return indexable(globalThis);\n  if (typeof self !== 'undefined') return indexable(self);\n  if (typeof window !== 'undefined') return indexable(window);\n  if (typeof global !== 'undefined') return indexable(global);\n  throw new Error('unable to locate global object');\n}\n/**\n * Backwards compatibility with legacy waiters system.\n *\n * We want to always register a waiter using the legacy waiter system, as right\n * now if consumers are not on the right version of @ember/test-helpers, using\n * this addon will result in none of these waiters waiting.\n */\n// eslint-disable-next-line ember/new-module-imports\n\nif (Ember.Test) {\n  registerWaiter(() => !hasPendingWaiters());\n}\n/**\n * Registers a waiter.\n *\n * @public\n * @param waiter {Waiter} A test waiter instance\n */\n\nexport function register(waiter) {\n  WAITERS.set(waiter.name, waiter);\n}\n/**\n * Un-registers a waiter.\n *\n * @public\n * @param waiter {Waiter} A test waiter instance\n */\n\nexport function unregister(waiter) {\n  WAITERS.delete(waiter.name);\n}\n/**\n * Gets an array of all waiters current registered.\n *\n * @public\n * @returns {Waiter[]}\n */\n\nexport function getWaiters() {\n  let result = [];\n  WAITERS.forEach(value => {\n    result.push(value);\n  });\n  return result;\n}\n/**\n * Clears all waiters.\n *\n * @private\n */\n\nexport function _reset() {\n  for (let waiter of getWaiters()) {\n    waiter.isRegistered = false;\n  }\n  WAITERS.clear();\n}\n/**\n * Gets the current state of all waiters. Any waiters whose\n * `waitUntil` method returns false will be considered `pending`.\n *\n * @returns {PendingWaiterState} An object containing a count of all waiters\n * pending and a `waiters` object containing the name of all pending waiters\n * and their debug info.\n */\n\nexport function getPendingWaiterState() {\n  let result = {\n    pending: 0,\n    waiters: {}\n  };\n  WAITERS.forEach(waiter => {\n    if (!waiter.waitUntil()) {\n      result.pending++;\n      let debugInfo = waiter.debugInfo();\n      result.waiters[waiter.name] = debugInfo || true;\n    }\n  });\n  return result;\n}\n/**\n * Determines if there are any pending waiters.\n *\n * @returns {boolean} `true` if there are pending waiters, otherwise `false`.\n */\n\nexport function hasPendingWaiters() {\n  let state = getPendingWaiterState();\n  return state.pending > 0;\n}","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { DEBUG } from '@glimmer/env';\nimport { warn } from '@ember/debug';\nimport Token from './token';\nimport { register } from './waiter-manager';\nconst WAITER_NAME_PATTERN = /^[^:]*:?.*/;\nlet WAITER_NAMES = DEBUG ? new Set() : undefined;\nexport function _resetWaiterNames() {\n  WAITER_NAMES = new Set();\n}\nfunction getNextToken() {\n  return new Token();\n}\nclass TestWaiterImpl {\n  constructor(name, nextToken) {\n    _defineProperty(this, \"isRegistered\", false);\n    _defineProperty(this, \"items\", new Map());\n    _defineProperty(this, \"completedOperationsForTokens\", new WeakMap());\n    _defineProperty(this, \"completedOperationsForPrimitives\", new Map());\n    this.name = name; // @ts-ignore\n\n    this.nextToken = nextToken || getNextToken;\n  }\n  beginAsync(token = this.nextToken(), label) {\n    this._register();\n    if (this.items.has(token)) {\n      throw new Error(`beginAsync called for ${token} but it is already pending.`);\n    }\n    let error = new Error();\n    this.items.set(token, {\n      get stack() {\n        return error.stack;\n      },\n      label\n    });\n    return token;\n  }\n  endAsync(token) {\n    if (!this.items.has(token) && !this._getCompletedOperations(token).has(token)) {\n      throw new Error(`testWaiter.endAsync called with no preceding testWaiter.beginAsync call.\n        Test waiter calls should always be paired. This can occur when a test waiter's paired calls are invoked in a non-deterministic order.\n\n        See https://github.com/emberjs/ember-test-waiters#keep-beginasyncendasync-in-same-block-scope for more information.`);\n    }\n    this.items.delete(token); // Mark when a waiter operation has completed so we can distinguish\n    // whether endAsync is being called before a prior beginAsync call above.\n\n    this._getCompletedOperations(token).set(token, true);\n  }\n  waitUntil() {\n    return this.items.size === 0;\n  }\n  debugInfo() {\n    let result = [];\n    this.items.forEach(value => {\n      result.push(value);\n    });\n    return result;\n  }\n  reset() {\n    this.items.clear();\n  }\n  _register() {\n    if (!this.isRegistered) {\n      register(this);\n      this.isRegistered = true;\n    }\n  }\n  _getCompletedOperations(token) {\n    let type = typeof token;\n    let isFunction = type === 'function';\n    let isObject = token !== null && type === 'object';\n    let isPrimitive = !isFunction && !isObject;\n    return isPrimitive ? this.completedOperationsForPrimitives : this.completedOperationsForTokens;\n  }\n}\nclass NoopTestWaiter {\n  constructor(name) {\n    this.name = name;\n  }\n  beginAsync() {\n    return this;\n  }\n  endAsync() {}\n  waitUntil() {\n    return true;\n  }\n  debugInfo() {\n    return [];\n  }\n  reset() {}\n}\n/**\n * Builds and returns a test waiter. The type of the\n * returned waiter is dependent on whether the app or\n * addon is in `DEBUG` mode or not.\n *\n * @public\n *\n * @param name {string} The name of the test waiter\n * @returns {TestWaiter}\n *\n * @example\n *\n * import Component from '@ember/component';\n * import { buildWaiter } from '@ember/test-waiters';\n *\n * if (DEBUG) {\n *   let waiter = buildWaiter('friend-waiter');\n * }\n *\n * export default class Friendz extends Component {\n *   didInsertElement() {\n *     let token = waiter.beginAsync(this);\n *\n *     someAsyncWork().then(() => {\n *       waiter.endAsync(token);\n *     });\n *   }\n * }\n */\n\nexport default function buildWaiter(name) {\n  if (DEBUG) {\n    warn(`The waiter name '${name}' is already in use`, !WAITER_NAMES.has(name), {\n      id: '@ember/test-waiters.duplicate-waiter-name'\n    });\n    WAITER_NAMES.add(name);\n  }\n  if (!DEBUG) {\n    return new NoopTestWaiter(name);\n  } else {\n    warn(`You must provide a name that contains a descriptive prefix separated by a colon.\n\n        Example: ember-fictitious-addon:some-file\n\n        You passed: ${name}`, WAITER_NAME_PATTERN.test(name), {\n      id: '@ember/test-waiters.invalid-waiter-name'\n    });\n    return new TestWaiterImpl(name);\n  }\n}","import { DEBUG } from '@glimmer/env';\nimport buildWaiter from './build-waiter';\nconst PROMISE_WAITER = buildWaiter('@ember/test-waiters:promise-waiter');\n/**\n * A convenient utility function to simplify waiting for a promise.\n *\n * @public\n * @param promise {Promise<T> | RSVP.Promise<T>} The promise to track async operations for\n * @param label {string} An optional string to identify the promise\n *\n * @example\n *\n * import Component from '@ember/component';\n * import { waitForPromise } from '@ember/test-waiters';\n *\n * export default class Friendz extends Component {\n *   didInsertElement() {\n *     waitForPromise(new Promise(resolve => {\n *       doSomeWork();\n *       resolve();\n *     }));\n *   }\n * }\n */\n\nexport default function waitForPromise(promise, label) {\n  let result = promise;\n  if (DEBUG) {\n    PROMISE_WAITER.beginAsync(promise, label);\n    result = promise.then(value => {\n      PROMISE_WAITER.endAsync(promise);\n      return value;\n    }, error => {\n      PROMISE_WAITER.endAsync(promise);\n      throw error;\n    });\n  }\n  return result;\n}","import { DEBUG } from '@glimmer/env';\nimport waitForPromise from './wait-for-promise';\nimport buildWaiter from './build-waiter';\nexport default function waitFor(...args) {\n  let isFunction = args.length < 3;\n  if (isFunction) {\n    let [fn, label] = args;\n    return wrapFunction(fn, label);\n  } else {\n    let [,, descriptor, label] = args;\n    if (!DEBUG) {\n      return descriptor;\n    }\n    let fn = descriptor.value;\n    descriptor.value = wrapFunction(fn, label);\n    return descriptor;\n  }\n}\nfunction wrapFunction(fn, label) {\n  if (!DEBUG) {\n    return fn;\n  }\n  return function (...args) {\n    let result = fn.call(this, ...args);\n    if (isThenable(result)) {\n      return waitForPromise(result, label);\n    } else if (isGenerator(result)) {\n      return waitForGenerator(result, label);\n    } else {\n      return result;\n    }\n  };\n}\nfunction isThenable(maybePromise) {\n  let type = typeof maybePromise;\n  return (maybePromise !== null && type === 'object' || type === 'function') && typeof maybePromise.then === 'function';\n}\nfunction isGenerator(maybeGenerator) {\n  // Because we don't have Symbol.iterator in IE11\n  return typeof maybeGenerator.next === 'function' && typeof maybeGenerator.return === 'function' && typeof maybeGenerator.throw === 'function';\n}\nconst GENERATOR_WAITER = buildWaiter('@ember/test-waiters:generator-waiter');\nfunction waitForGenerator(generator, label) {\n  GENERATOR_WAITER.beginAsync(generator, label);\n  let isWaiting = true;\n  function stopWaiting() {\n    if (isWaiting) {\n      GENERATOR_WAITER.endAsync(generator);\n      isWaiting = false;\n    }\n  }\n  return {\n    next(...args) {\n      let hasErrored = true;\n      try {\n        let val = generator.next(...args);\n        hasErrored = false;\n        if (val.done) {\n          stopWaiting();\n        }\n        return val;\n      } finally {\n        // If generator.next() throws, we need to stop waiting. But if we catch\n        // and re-throw exceptions, it could move the location from which the\n        // uncaught exception is thrown, interfering with the developer\n        // debugging experience if they have break-on-exceptions enabled. So we\n        // use a boolean flag and a finally block to emulate a catch block.\n        if (hasErrored) {\n          stopWaiting();\n        }\n      }\n    },\n    return(...args) {\n      stopWaiting();\n      return generator.return(...args);\n    },\n    throw(...args) {\n      stopWaiting();\n      return generator.throw(...args);\n    }\n  };\n}","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { DEBUG } from '@glimmer/env';\nimport { setOwner } from './owner';\nimport { isDestroying, isDestroyed } from './destroyables';\n\n// This provides a type-safe `WeakMap`: the getter and setter link the key to a\n// specific value. This is how `WeakMap`s actually behave, but the TS type\n// system does not (yet!) have a good way to capture that for types like\n// `WeakMap` where the type is generic over another generic type (here, `Args`).\n\n// SAFETY: this only holds because we *only* acces this when `DEBUG` is `true`.\n// There is not a great way to connect that data in TS at present.\nexport let ARGS_SET;\nif (DEBUG) {\n  ARGS_SET = new WeakMap();\n}\n\n// --- Type utilities for component signatures --- //\n// Type-only \"symbol\" to use with `EmptyObject` below, so that it is *not*\n// equivalent to an empty interface.\n\n/**\n * This provides us a way to have a \"fallback\" which represents an empty object,\n * without the downsides of how TS treats `{}`. Specifically: this will\n * correctly leverage \"excess property checking\" so that, given a component\n * which has no named args, if someone invokes it with any named args, they will\n * get a type error.\n *\n * @internal This is exported so declaration emit works (if it were not emitted,\n *   declarations which fall back to it would not work). It is *not* intended for\n *   public usage, and the specific mechanics it uses may change at any time.\n *   The location of this export *is* part of the public API, because moving it\n *   will break existing declarations, but is not legal for end users to import\n *   themselves, so ***DO NOT RELY ON IT***.\n */\n\n/** Given a signature `S`, get back the `Args` type. */\n\n/**\n * Given any allowed shorthand form of a signature, desugars it to its full\n * expanded type.\n *\n * @internal This is only exported so we can avoid duplicating it in\n *   [Glint](https://github.com/typed-ember/glint) or other such tooling. It is\n *   *not* intended for public usage, and the specific mechanics it uses may\n *   change at any time. Although the signature produced by is part of Glimmer's\n *   public API the existence and mechanics of this specific symbol are *not*,\n *   so ***DO NOT RELY ON IT***.\n */\n// The conditional type here is because TS applies conditional types\n// distributively. This means that for union types, checks like `keyof T` get\n// all the keys from all elements of the union, instead of ending up as `never`\n// and then always falling into the `Signature` path instead of falling back to\n// the legacy args handling path.\n\n/**\n * @internal we use this type for convenience internally; inference means users\n *   should not normally need to name it\n */\n\n/**\n * The `Component` class defines an encapsulated UI element that is rendered to\n * the DOM. A component is made up of a template and, optionally, this component\n * object.\n *\n * ## Defining a Component\n *\n * To define a component, subclass `Component` and add your own properties,\n * methods and lifecycle hooks:\n *\n * ```ts\n * import Component from '@glimmer/component';\n *\n * export default class extends Component {\n * }\n * ```\n *\n * ## Lifecycle Hooks\n *\n * Lifecycle hooks allow you to respond to changes to a component, such as when\n * it gets created, rendered, updated or destroyed. To add a lifecycle hook to a\n * component, implement the hook as a method on your component subclass.\n *\n * For example, to be notified when Glimmer has rendered your component so you\n * can attach a legacy jQuery plugin, implement the `didInsertElement()` method:\n *\n * ```ts\n * import Component from '@glimmer/component';\n *\n * export default class extends Component {\n *   didInsertElement() {\n *     $(this.element).pickadate();\n *   }\n * }\n * ```\n *\n * ## Data for Templates\n *\n * `Component`s have two different kinds of data, or state, that can be\n * displayed in templates:\n *\n * 1. Arguments\n * 2. Properties\n *\n * Arguments are data that is passed in to a component from its parent\n * component. For example, if I have a `UserGreeting` component, I can pass it\n * a name and greeting to use:\n *\n * ```hbs\n * <UserGreeting @name=\"Ricardo\" @greeting=\"Olá\" />\n * ```\n *\n * Inside my `UserGreeting` template, I can access the `@name` and `@greeting`\n * arguments that I've been given:\n *\n * ```hbs\n * {{@greeting}}, {{@name}}!\n * ```\n *\n * Arguments are also available inside my component:\n *\n * ```ts\n * console.log(this.args.greeting); // prints \"Olá\"\n * ```\n *\n * Properties, on the other hand, are internal to the component and declared in\n * the class. You can use properties to store data that you want to show in the\n * template, or pass to another component as an argument.\n *\n * ```ts\n * import Component from '@glimmer/component';\n *\n * export default class extends Component {\n *   user = {\n *     name: 'Robbie'\n *   }\n * }\n * ```\n *\n * In the above example, we've defined a component with a `user` property that\n * contains an object with its own `name` property.\n *\n * We can render that property in our template:\n *\n * ```hbs\n * Hello, {{user.name}}!\n * ```\n *\n * We can also take that property and pass it as an argument to the\n * `UserGreeting` component we defined above:\n *\n * ```hbs\n * <UserGreeting @greeting=\"Hello\" @name={{user.name}} />\n * ```\n *\n * ## Arguments vs. Properties\n *\n * Remember, arguments are data that was given to your component by its parent\n * component, and properties are data your component has defined for itself.\n *\n * You can tell the difference between arguments and properties in templates\n * because arguments always start with an `@` sign (think \"A is for arguments\"):\n *\n * ```hbs\n * {{@firstName}}\n * ```\n *\n * We know that `@firstName` came from the parent component, not the current\n * component, because it starts with `@` and is therefore an argument.\n *\n * On the other hand, if we see:\n *\n * ```hbs\n * {{name}}\n * ```\n *\n * We know that `name` is a property on the component. If we want to know where\n * the data is coming from, we can go look at our component class to find out.\n *\n * Inside the component itself, arguments always show up inside the component's\n * `args` property. For example, if `{{@firstName}}` is `Tom` in the template,\n * inside the component `this.args.firstName` would also be `Tom`.\n */\nexport default class BaseComponent {\n  /**\n   * Constructs a new component and assigns itself the passed properties. You\n   * should not construct new components yourself. Instead, Glimmer will\n   * instantiate new components automatically as it renders.\n   *\n   * @param owner\n   * @param args\n   */\n  constructor(owner, args) {\n    /**\n     * Named arguments passed to the component from its parent component.\n     * They can be accessed in JavaScript via `this.args.argumentName` and in the template via `@argumentName`.\n     *\n     * Say you have the following component, which will have two `args`, `firstName` and `lastName`:\n     *\n     * ```hbs\n     * <my-component @firstName=\"Arthur\" @lastName=\"Dent\" />\n     * ```\n     *\n     * If you needed to calculate `fullName` by combining both of them, you would do:\n     *\n     * ```ts\n     * didInsertElement() {\n     *   console.log(`Hi, my full name is ${this.args.firstName} ${this.args.lastName}`);\n     * }\n     * ```\n     *\n     * While in the template you could do:\n     *\n     * ```hbs\n     * <p>Welcome, {{@firstName}} {{@lastName}}!</p>\n     * ```\n     */\n    _defineProperty(this, \"args\", void 0);\n    if (DEBUG && !(owner !== null && typeof owner === 'object' && ARGS_SET.has(args))) {\n      throw new Error(`You must pass both the owner and args to super() in your component: ${this.constructor.name}. You can pass them directly, or use ...arguments to pass all arguments through.`);\n    }\n    this.args = args;\n    setOwner(this, owner);\n  }\n  get isDestroying() {\n    return isDestroying(this);\n  }\n  get isDestroyed() {\n    return isDestroyed(this);\n  }\n\n  /**\n   * Called before the component has been removed from the DOM.\n   */\n  willDestroy() {}\n}","import Ember from 'ember';\nexport const isDestroying = Ember._isDestroying;\nexport const isDestroyed = Ember._isDestroyed;","import { DEBUG } from '@glimmer/env';\nimport Ember from 'ember';\nimport { set } from '@ember/object';\nimport { getOwner, setOwner } from '@ember/application';\nimport { capabilities } from '@ember/component';\nimport { schedule } from '@ember/runloop';\nimport BaseComponentManager from './base-component-manager';\nimport * as destroyables from './destroyables';\nconst {\n  setDestroyed,\n  setDestroying\n} = destroyables;\nconst CAPABILITIES = true // @ts-ignore\n// @ts-ignore\n? capabilities('3.13', {\n  destructor: true,\n  asyncLifecycleCallbacks: false,\n  updateHook: false\n}) : capabilities('3.4', {\n  destructor: true,\n  asyncLifecycleCallbacks: false\n});\nconst scheduledDestroyComponent = true ? undefined : (component, meta) => {\n  if (component.isDestroyed) {\n    return;\n  }\n  Ember.destroy(component);\n  meta.setSourceDestroyed();\n  setDestroyed(component);\n};\nconst destroy = true ? Ember.destroy : component => {\n  if (component.isDestroying) {\n    return;\n  }\n  let meta = Ember.meta(component);\n  meta.setSourceDestroying();\n  setDestroying(component);\n  schedule('actions', component, component.willDestroy);\n  schedule('destroy', this, scheduledDestroyComponent, component, meta);\n};\nconst registerDestructor = true ? Ember._registerDestructor : true ? Ember.__loader.require('@glimmer/runtime').registerDestructor : undefined;\n\n/**\n * This component manager runs in Ember.js environments and extends the base component manager to:\n *\n * 1. Properly destroy the component's associated `meta` data structure\n * 2. Schedule destruction using Ember's runloop\n */\nclass EmberGlimmerComponentManager extends BaseComponentManager(setOwner, getOwner, CAPABILITIES) {\n  createComponent(ComponentClass, args) {\n    const component = super.createComponent(ComponentClass, args);\n    if (true) {\n      registerDestructor(component, () => {\n        component.willDestroy();\n      });\n    }\n    return component;\n  }\n  destroyComponent(component) {\n    destroy(component);\n  }\n}\n// In Ember 3.12 and earlier, the updateComponent hook was mandatory.\n// As of Ember 3.13, the `args` object is stable and each property of the\n// object participates in the autotrack stack on its own. This means we do not\n// need to set the `args` property on the component instance to invalidate\n// tracked getters that rely on `args`, and therefore don't require the `updateComponent`\n// hook at all.\nif (!true) {\n  EmberGlimmerComponentManager.prototype.updateComponent = function updateComponent(component, args) {\n    let argSnapshot = args.named;\n    if (DEBUG) {\n      argSnapshot = Object.freeze(argSnapshot);\n    }\n    set(component, 'args', argSnapshot);\n  };\n}\nexport default EmberGlimmerComponentManager;","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { DEBUG } from '@glimmer/env';\nimport { ARGS_SET } from './component';\n/**\n * This factory function returns a component manager class with common behavior\n * that can be extend to add Glimmer.js- or Ember.js-specific functionality. As\n * these environments converge, the need for two component manager\n * implementations (and thus this factory) should go away.\n */\nexport default function BaseComponentManager(setOwner, getOwner, capabilities) {\n  return class {\n    static create(attrs) {\n      let owner = getOwner(attrs);\n      return new this(owner);\n    }\n    constructor(owner) {\n      _defineProperty(this, \"capabilities\", capabilities);\n      setOwner(this, owner);\n    }\n    createComponent(ComponentClass, args) {\n      if (DEBUG) {\n        ARGS_SET.set(args.named, true);\n      }\n      return new ComponentClass(getOwner(this), args.named);\n    }\n    getContext(component) {\n      return component;\n    }\n  };\n}","import { DEBUG } from '@glimmer/env';\nimport { setComponentManager } from '@ember/component';\n\n// Hax because the old version of `@types/ember__component` the `1.x` branch\n// uses does not provide any types for `setComponentManager` *and* because we\n// are using a very old version of `setComponentManager` for versions before\n// Ember 3.8.\n\nimport GlimmerComponentManager from './-private/ember-component-manager';\nimport GlimmerComponentBase from './-private/component';\nlet GlimmerComponent = GlimmerComponentBase;\nif (DEBUG) {\n  // Add assertions against using Glimmer.js only APIs\n\n  // TODO: Add GlimmerComponent API docs link to these messages once API docs are live\n  function throwMethodUseError(methodName) {\n    throw new Error(`You attempted to define the '${methodName}' method on a Glimmer Component, but that lifecycle hook does not exist in Ember.js applications, it only exists in Glimmer.js apps. You can rename this method, and you can trigger it using a modifier such as {{did-insert}} from '@ember/render-modifiers': https://github.com/emberjs/ember-render-modifiers.`);\n  }\n  function throwPropertyUseError(propertyName) {\n    throw new Error(`You attempted to access the '${propertyName}' property on a Glimmer Component, but that property does not exist in Ember.js applications, it only exists in Glimmer.js apps. You define a class field with the same name on your component class and it will overwrite this error message, but it will not be used by the framework.`);\n  }\n  GlimmerComponent = class GlimmerDebugComponent extends GlimmerComponent {\n    constructor(owner, args) {\n      super(owner, args);\n      if (typeof this['didInsertElement'] === 'function') {\n        throwMethodUseError('didInsertElement');\n      }\n      if (typeof this['didUpdate'] === 'function') {\n        throwMethodUseError('didUpdate');\n      }\n    }\n  };\n  let proto = GlimmerComponent.prototype;\n  function defineErrorProp(proto, key, getterMethod) {\n    Object.defineProperty(proto, key, {\n      get: () => getterMethod(key),\n      set(value) {\n        Object.defineProperty(this, key, {\n          value\n        });\n      }\n    });\n  }\n\n  // Methods should still throw whenever they are accessed\n  defineErrorProp(proto, 'bounds', throwPropertyUseError);\n  defineErrorProp(proto, 'element', throwPropertyUseError);\n  defineErrorProp(proto, 'debugName', throwPropertyUseError);\n}\nif (true) {\n  setComponentManager(owner => {\n    return new GlimmerComponentManager(owner);\n  }, GlimmerComponent);\n} else {\n  setComponentManager('glimmer', GlimmerComponent);\n}\nexport default GlimmerComponent;","import * as metal from \"@ember/-internals/metal\";\n    const { cached, tracked } = metal;\n    export { cached, tracked };","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#if this.isResolved}}\\n  {{yield this.resolvedValue}}\\n{{else}}\\n  {{yield to=\\\"inverse\\\"}}\\n{{/if}}\\n\",{ moduleName: \"C:/JenkinsWS/workspace/s-Cloud_photodiode-cd_Deploy_Dev/Progressive/node_modules/.embroider/rewritten-packages/ember-async-await-helper.d75b706b/node_modules/ember-async-await-helper/templates/components/async-await.hbs\" })","/* eslint-disable ember/no-component-lifecycle-hooks */\n/* eslint-disable ember/no-classic-classes */\n/* eslint-disable ember/no-classic-components */\n\nimport { VERSION } from '@ember/version';\nimport Component from '@ember/component';\nimport { bind } from '@ember/runloop';\nimport Ember from 'ember';\nimport RSVP from 'rsvp';\nimport layout from '../templates/components/async-await';\n\n/**\n  Used for uninitialized values so that we can distinguish them from values that\n  were intentionally set to `null`/`undefined` in the console.\n\n  @private\n  @method UNINITIALIZED\n  @returns undefined\n*/\nfunction UNINITIALIZED() {}\nfunction DEFAULT_REJECTION_HANDLER(reason) {\n  try {\n    let error = new Error(`Unhandled promise rejection in {{#async-await}}: ${reason}`);\n    error.reason = reason;\n    throw error;\n  } catch (error) {\n    if (typeof Ember.onerror === 'function') {\n      Ember.onerror(error);\n    } else {\n      console.assert(false, error); // eslint-disable-line no-console\n    }\n  }\n}\nlet hashProto;\nif (VERSION.startsWith('2.')) {\n  // Glimmer in older version of Ember does some weird things in creating an empty \"hash\",\n  // so we have to jump through some hoops to get the correct prototype.\n  hashProto = Object.getPrototypeOf(Ember.__loader.require('@glimmer/util').dict());\n} else {\n  // The `hash` helper creates an object with `Object.create(null)` which will have no\n  // prototype.\n  hashProto = null;\n}\nfunction isHash(value) {\n  return typeof value === 'object' && Object.getPrototypeOf(value) === hashProto;\n}\n\n/**\n  This component awaits a promise (passed as a positional param), then yields\n  the resolved value to the given block. Thus, the code within the block can be\n  synchronous.\n\n  Optionally, pass in an inverse block to show while the promise is resolving.\n\n  ```\n  {{#async-await this.promise as |value|}}\n    <SynchronousComponent @value={{value}} />\n  {{else}}\n    <LoadingSpinner />\n  {{/async-await}}\n  ```\n\n  @class component:async-await\n  @extends Ember.Component\n */\nexport default Component.extend({\n  tagName: '',\n  layout,\n  /**\n    The promise or hash of promises to await on (passed as a positional argument).\n     @public\n    @property argument\n    @type any\n    @required\n  */\n  argument: UNINITIALIZED(),\n  /**\n    A callback to run when the promise rejects. By default, it calls\n    `Ember.onerror` with an error object with its `reason` property set to the\n    promise's rejection reason. You can pass a different function here to\n    handle the rejection more locally. Pass `null` to silence the rejection\n    completely.\n     @public\n    @property onReject\n    @type Function | null\n    @required\n  */\n  onReject: DEFAULT_REJECTION_HANDLER,\n  /**\n    The most-recently awaited argument.\n     @private\n    @property awaited\n    @type any\n  */\n  awaited: UNINITIALIZED(),\n  /**\n    Whether the promise is pending, i.e. it has neither been resolved or\n    rejected. This is the opposite of `isSettled`. Only one of `isPending`,\n    `isResolved` or `isRejected` can be true at any given moment.\n     @private\n    @property isPending\n    @type Boolean\n    @default true\n  */\n  isPending: true,\n  /**\n    Whether the promise is settled, i.e. it has either been resolved or\n    rejected. This is the opposite of `isPending`.\n     @private\n    @property isSettled\n    @type Boolean\n    @default false\n  */\n  isSettled: false,\n  /**\n    Whether the promise has been resolved. If `true`, the resolution value can\n    be found in `resolvedValue`. Only one of `isPending`, `isResolved` or\n    `isRejected` can be true at any given moment.\n     @private\n    @property isResolved\n    @type Boolean\n    @default false\n  */\n  isResolved: false,\n  /**\n    Whether the promise has been rejected. If `true`, the rejection reason can\n    be found in `rejectReason`. Only one of `isPending`, `isResolved` or\n    `isRejected` can be true at any given moment.\n     @private\n    @property isRejected\n    @type Boolean\n    @default false\n  */\n  isRejected: false,\n  /**\n    If the promise has been resolved, this will contain the resolved value.\n     @private\n    @property resolvedValue\n    @type any\n  */\n  resolvedValue: UNINITIALIZED(),\n  /**\n    If the promise has been resolved, this will contain the rejection reason.\n     @private\n    @property rejectReason\n    @type any\n  */\n  rejectReason: UNINITIALIZED(),\n  didReceiveAttrs() {\n    this._super(...arguments);\n    this.didReceiveArgument(this.argument);\n  },\n  didReceiveArgument(argument) {\n    if (argument === this.awaited) {\n      return;\n    }\n    this.setProperties({\n      awaited: argument,\n      isPending: true,\n      isSettled: false,\n      isResolved: false,\n      isRejected: false,\n      resolvedValue: UNINITIALIZED(),\n      rejectReason: UNINITIALIZED()\n    });\n    let target = isHash(argument) ? RSVP.hash(argument) : argument;\n    Promise.resolve(target).then(bind(this, this.didResolve, argument), bind(this, this.didReject, argument));\n  },\n  didResolve(resolvedArgument, value) {\n    if (this.shouldIgnorePromise(resolvedArgument)) {\n      return;\n    }\n    this.setProperties({\n      isPending: false,\n      isSettled: true,\n      isResolved: true,\n      isRejected: false,\n      resolvedValue: value,\n      rejectReason: UNINITIALIZED()\n    });\n  },\n  didReject(rejectedArgument, reason) {\n    if (this.shouldIgnorePromise(rejectedArgument)) {\n      return;\n    }\n    this.setProperties({\n      isPending: false,\n      isSettled: true,\n      isResolved: false,\n      isRejected: true,\n      resolvedValue: UNINITIALIZED(),\n      rejectReason: reason\n    });\n    let {\n      onReject\n    } = this;\n    if (onReject) {\n      onReject(reason);\n    }\n  },\n  shouldIgnorePromise(argument) {\n    return this.isDestroyed || this.isDestroying || this.argument !== argument;\n  }\n}).reopenClass({\n  positionalParams: ['argument']\n});","import { isChange, getChangeValue, normalizeObject, isArrayObject, objectToArray, arrayToObject } from 'validated-changeset';\nfunction isMergeableObject(value) {\n  return isNonNullObject(value) && !isSpecial(value);\n}\nfunction isNonNullObject(value) {\n  return !!value && typeof value === 'object' && value !== null;\n}\nfunction isSpecial(value) {\n  let stringValue = Object.prototype.toString.call(value);\n  return stringValue === '[object RegExp]' || stringValue === '[object Date]';\n}\n\n// Reconsider when enumerable symbols are removed - https://github.com/emberjs/ember.js/commit/ef0e277533b3eab01e58d68b79d7e37d8b11ee34\n// function getEnumerableOwnPropertySymbols(target) {\n//   return Object.getOwnPropertySymbols\n//     ? Object.getOwnPropertySymbols(target).filter(symbol => {\n//       return Object.prototype.propertyIsEnumerable.call(target, symbol)\n//     })\n//     : [];\n// }\n\nfunction getKeys(target) {\n  return Object.keys(target);\n  // .concat(getEnumerableOwnPropertySymbols(target))\n}\nfunction propertyIsOnObject(object, property) {\n  try {\n    return property in object;\n  } catch (_) {\n    return false;\n  }\n}\n\n// Ember Data models don't respond as expected to foo.hasOwnProperty, so we do a special check\nfunction hasEmberDataProperty(target, key, options) {\n  let fields = options.safeGet(target, 'constructor.fields');\n  return fields instanceof Map && fields.has(key);\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key, options) {\n  if (hasEmberDataProperty(target, key, options)) {\n    return false;\n  }\n  return propertyIsOnObject(target, key) &&\n  // Properties are safe to merge if they don't exist in the target yet,\n  !(Object.prototype.hasOwnProperty.call(target, key) && Object.prototype.propertyIsEnumerable.call(target, key) // unsafe if they exist up the prototype chain,\n  ); // and also unsafe if they're nonenumerable.\n}\n\n/**\n * DFS - traverse depth first until find object with `value`.  Then go back up tree and try on next key\n * Need to exhaust all possible avenues.\n *\n * @method buildPathToValue\n */\nfunction buildPathToValue(source, options, kv, possibleKeys) {\n  Object.keys(source).forEach(key => {\n    let possible = source[key];\n    if (possible && isChange(possible)) {\n      kv[[...possibleKeys, key].join('.')] = getChangeValue(possible);\n      return;\n    }\n    if (possible && typeof possible === 'object') {\n      buildPathToValue(possible, options, kv, [...possibleKeys, key]);\n    }\n  });\n  return kv;\n}\n\n/**\n * `source` will always have a leaf key `value` with the property we want to set\n *\n * @method mergeTargetAndSource\n */\nfunction mergeTargetAndSource(target, source, options) {\n  getKeys(source).forEach(key => {\n    // proto poisoning.  So can set by nested key path 'person.name'\n    if (propertyIsUnsafe(target, key, options)) {\n      // if safeSet, we will find keys leading up to value and set\n      if (options.safeSet) {\n        const kv = buildPathToValue(source, options, {}, []);\n        // each key will be a path nested to the value `person.name.other`\n        if (Object.keys(kv).length > 0) {\n          // we found some keys!\n          for (key in kv) {\n            const val = kv[key];\n            options.safeSet(target, key, val);\n          }\n        }\n      }\n      return;\n    }\n\n    // else safe key on object\n    if (propertyIsOnObject(target, key) && isMergeableObject(source[key]) && !isChange(source[key])) {\n      options.safeSet(target, key, mergeDeep(options.safeGet(target, key), options.safeGet(source, key), options));\n    } else {\n      let next = source[key];\n      if (isChange(next)) {\n        return options.safeSet(target, key, getChangeValue(next));\n      }\n\n      // if just some normal leaf value, then set\n      return options.safeSet(target, key, normalizeObject(next));\n    }\n  });\n  return target;\n}\n\n/**\n * goal is to mutate target with source's properties, ensuring we dont encounter\n * pitfalls of { ..., ... } spread syntax overwriting keys on objects that we merged\n *\n * This is also adjusted for Ember peculiarities.  Specifically `options.safeSet` will allows us\n * to handle properties on Proxy objects (that aren't the target's own property)\n *\n * @method mergeDeep\n */\nexport default function mergeDeep(target, source, options = {}) {\n  options.safeGet = options.safeGet || function (obj, key) {\n    return obj[key];\n  };\n  options.safeSet = options.safeSet || function (obj, key, value) {\n    return obj[key] = value;\n  };\n  let sourceIsArray = Array.isArray(source);\n  let targetIsArray = Array.isArray(target);\n  let sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n  if (!sourceAndTargetTypesMatch) {\n    let sourceIsArrayLike = isArrayObject(source);\n    if (targetIsArray && sourceIsArrayLike) {\n      return objectToArray(mergeTargetAndSource(arrayToObject(target), source, options));\n    }\n    return source;\n  } else if (sourceIsArray) {\n    return source;\n  } else if (target === null || target === undefined) {\n    /**\n     * If the target was set to null or undefined, we always want to return the source.\n     * There is nothing to merge.\n     *\n     * Without this explicit check, typeof null === typeof {any object-like thing}\n     * which means that mergeTargetAndSource will be called, and you can't merge with null\n     */\n    return source;\n  } else {\n    try {\n      return mergeTargetAndSource(target, source, options);\n    } catch (e) {\n      // this is very unlikely to be hit but lets throw an error otherwise\n      throw new Error('Unable to `mergeDeep` with your data. Are you trying to merge two ember-data objects? Please file an issue with ember-changeset.');\n    }\n  }\n}","import { isArray } from '@ember/array';\n\n/**\n * Employ Ember strategies for isObject detection\n * @method isObject\n */\nexport default function isObject(val) {\n  return val !== null && typeof val === 'object' && !(val instanceof Date || val instanceof RegExp) && !isArray(val);\n}","var _class, _descriptor, _descriptor2, _descriptor3;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\nimport { assert } from '@ember/debug';\nimport { dependentKeyCompat } from '@ember/object/compat';\nimport { ValidationChangeset, getKeyValues } from 'validated-changeset';\nimport ArrayProxy from '@ember/array/proxy';\nimport ObjectProxy from '@ember/object/proxy';\nimport { notifyPropertyChange } from '@ember/object';\nimport mergeDeep from './utils/merge-deep';\nimport isObject from './utils/is-object';\nimport { tracked } from '@glimmer/tracking';\nimport { get as safeGet, set as safeSet } from '@ember/object';\nimport { macroCondition, dependencySatisfies, importSync } from '@embroider/macros';\nconst CHANGES = '_changes';\nconst PREVIOUS_CONTENT = '_previousContent';\nconst CONTENT = '_content';\nexport function buildOldValues(content, changes, getDeep) {\n  const obj = Object.create(null);\n  for (let change of changes) {\n    obj[change.key] = getDeep(content, change.key);\n  }\n  return obj;\n}\nfunction isProxy(o) {\n  return !!(o && (o instanceof ObjectProxy || o instanceof ArrayProxy));\n}\nfunction maybeUnwrapProxy(o) {\n  return isProxy(o) ? maybeUnwrapProxy(safeGet(o, 'content')) : o;\n}\nlet Model;\nif (macroCondition(dependencySatisfies('ember-data', '*'))) {\n  Model = importSync('@ember-data/model').default;\n}\nexport let EmberValidationChangeset = (_class = class EmberValidationChangeset extends ValidationChangeset {\n  constructor(...args) {\n    super(...args);\n    _initializerDefineProperty(this, \"_changes\", _descriptor, this);\n    _initializerDefineProperty(this, \"_errors\", _descriptor2, this);\n    _initializerDefineProperty(this, \"_content\", _descriptor3, this);\n    _defineProperty(this, \"isObject\", isObject);\n    _defineProperty(this, \"maybeUnwrapProxy\", maybeUnwrapProxy);\n    // DO NOT override setDeep. Ember.set does not work wth empty hash and nested\n    // key Ember.set({}, 'user.name', 'foo');\n    // override base class\n    // DO NOT override setDeep. Ember.set does not work with Ember.set({}, 'user.name', 'foo');\n    _defineProperty(this, \"getDeep\", safeGet);\n    _defineProperty(this, \"mergeDeep\", mergeDeep);\n  }\n  safeGet(obj, key) {\n    if (Model && obj.relationshipFor?.(key)?.meta?.kind == 'belongsTo') {\n      return obj.belongsTo(key).value();\n    }\n    return safeGet(obj, key);\n  }\n  safeSet(obj, key, value) {\n    return safeSet(obj, key, value);\n  }\n\n  /**\n   * @property isValid\n   * @type {Array}\n   */\n  get isValid() {\n    return super.isValid;\n  }\n\n  /**\n   * @property isInvalid\n   * @type {Boolean}\n   */\n  get isInvalid() {\n    return super.isInvalid;\n  }\n\n  /**\n   * @property isPristine\n   * @type {Boolean}\n   */\n  get isPristine() {\n    return super.isPristine;\n  }\n\n  /**\n   * @property isDirty\n   * @type {Boolean}\n   */\n  get isDirty() {\n    return super.isDirty;\n  }\n  get pendingData() {\n    let content = this[CONTENT];\n    let changes = this[CHANGES];\n    let pendingChanges = this.mergeDeep(Object.create(Object.getPrototypeOf(content)), content, {\n      safeGet,\n      safeSet\n    });\n    return this.mergeDeep(pendingChanges, changes, {\n      safeGet,\n      safeSet\n    });\n  }\n\n  /**\n   * Manually add an error to the changeset. If there is an existing\n   * error or change for `key`, it will be overwritten.\n   *\n   * @method addError\n   */\n  addError(key, error) {\n    super.addError(key, error);\n    notifyPropertyChange(this, key);\n    // Return passed-in `error`.\n    return error;\n  }\n\n  /**\n   * Manually push multiple errors to the changeset as an array.\n   *\n   * @method pushErrors\n   */\n  pushErrors(key, ...newErrors) {\n    const {\n      value,\n      validation\n    } = super.pushErrors(key, ...newErrors);\n    notifyPropertyChange(this, key);\n    return {\n      value,\n      validation\n    };\n  }\n\n  /**\n   * Sets property or error on the changeset.\n   * Returns value or error\n   */\n  _setProperty({\n    key,\n    value,\n    oldValue\n  }) {\n    super._setProperty({\n      key,\n      value,\n      oldValue\n    });\n    notifyPropertyChange(this, key);\n  }\n\n  /**\n   * Notifies virtual properties set on the changeset of a change.\n   * You can specify which keys are notified by passing in an array.\n   *\n   * @private\n   * @param {Array} keys\n   * @return {Void}\n   */\n  _notifyVirtualProperties(keys) {\n    keys = super._notifyVirtualProperties(keys);\n    (keys || []).forEach(key => notifyPropertyChange(this, key));\n    return;\n  }\n\n  /**\n   * Deletes a key off an object and notifies observers.\n   */\n  _deleteKey(objName, key = '') {\n    const result = super._deleteKey(objName, key);\n    notifyPropertyChange(this, key);\n    return result;\n  }\n\n  /**\n   * Executes the changeset if in a valid state.\n   *\n   * @method execute\n   */\n  execute() {\n    let oldContent;\n    if (this.isValid && this.isDirty) {\n      let content = this[CONTENT];\n      let changes = this[CHANGES];\n\n      // keep old values in case of error and we want to rollback\n      oldContent = buildOldValues(content, getKeyValues(changes), this.getDeep);\n\n      // we want mutation on original object\n      // @tracked\n      this[CONTENT] = this.mergeDeep(content, changes, {\n        safeGet,\n        safeSet\n      });\n    }\n    this[PREVIOUS_CONTENT] = oldContent;\n    return this;\n  }\n}, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"_changes\", [tracked], {\n  configurable: true,\n  enumerable: true,\n  writable: true,\n  initializer: null\n}), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"_errors\", [tracked], {\n  configurable: true,\n  enumerable: true,\n  writable: true,\n  initializer: null\n}), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"_content\", [tracked], {\n  configurable: true,\n  enumerable: true,\n  writable: true,\n  initializer: null\n}), _applyDecoratedDescriptor(_class.prototype, \"isValid\", [dependentKeyCompat], Object.getOwnPropertyDescriptor(_class.prototype, \"isValid\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isInvalid\", [dependentKeyCompat], Object.getOwnPropertyDescriptor(_class.prototype, \"isInvalid\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isPristine\", [dependentKeyCompat], Object.getOwnPropertyDescriptor(_class.prototype, \"isPristine\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isDirty\", [dependentKeyCompat], Object.getOwnPropertyDescriptor(_class.prototype, \"isDirty\"), _class.prototype), _class);\n\n/**\n * Creates new changesets.\n */\nexport function changeset(obj) {\n  assert('Underlying object for changeset is missing', Boolean(obj));\n  assert('Array is not a valid type to pass as the first argument to `changeset`', !Array.isArray(obj));\n  const c = new EmberValidationChangeset(obj);\n  return c;\n}\n\n/**\n * Creates new changesets.\n * @function Changeset\n */\nexport function Changeset(obj) {\n  const c = changeset(obj);\n  return new Proxy(c, {\n    get(targetBuffer, key /*, receiver*/) {\n      const res = targetBuffer.get(key.toString());\n      return res;\n    },\n    set(targetBuffer, key, value /*, receiver*/) {\n      targetBuffer.set(key.toString(), value);\n      return true;\n    }\n  });\n}","var _class, _descriptor, _descriptor2, _descriptor3;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\nimport { assert } from '@ember/debug';\nimport { dependentKeyCompat } from '@ember/object/compat';\nimport { BufferedChangeset } from 'validated-changeset';\nimport { Changeset as ValidatedChangeset } from './validated-changeset';\nimport ArrayProxy from '@ember/array/proxy';\nimport ObjectProxy from '@ember/object/proxy';\nimport { notifyPropertyChange } from '@ember/object';\nimport mergeDeep from './utils/merge-deep';\nimport isObject from './utils/is-object';\nimport { tracked } from '@glimmer/tracking';\nimport { get as safeGet, set as safeSet } from '@ember/object';\nimport { macroCondition, dependencySatisfies, importSync } from '@embroider/macros';\nexport { ValidatedChangeset };\nconst CHANGES = '_changes';\nconst PREVIOUS_CONTENT = '_previousContent';\nconst CONTENT = '_content';\nconst defaultValidatorFn = () => true;\nexport function buildOldValues(content, changes, getDeep) {\n  const obj = Object.create(null);\n  for (let change of changes) {\n    obj[change.key] = getDeep(content, change.key);\n  }\n  return obj;\n}\nfunction isProxy(o) {\n  return !!(o && (o instanceof ObjectProxy || o instanceof ArrayProxy));\n}\nfunction maybeUnwrapProxy(o) {\n  return isProxy(o) ? maybeUnwrapProxy(safeGet(o, 'content')) : o;\n}\nlet Model;\nif (macroCondition(dependencySatisfies('ember-data', '*'))) {\n  Model = importSync('@ember-data/model').default;\n}\nexport let EmberChangeset = (_class = class EmberChangeset extends BufferedChangeset {\n  constructor(...args) {\n    super(...args);\n    _initializerDefineProperty(this, \"_changes\", _descriptor, this);\n    _initializerDefineProperty(this, \"_errors\", _descriptor2, this);\n    _initializerDefineProperty(this, \"_content\", _descriptor3, this);\n    _defineProperty(this, \"isObject\", isObject);\n    _defineProperty(this, \"maybeUnwrapProxy\", maybeUnwrapProxy);\n    // DO NOT override setDeep. Ember.set does not work wth empty hash and nested\n    // key Ember.set({}, 'user.name', 'foo');\n    // override base class\n    // DO NOT override setDeep. Ember.set does not work with Ember.set({}, 'user.name', 'foo');\n    _defineProperty(this, \"getDeep\", safeGet);\n    _defineProperty(this, \"mergeDeep\", mergeDeep);\n  }\n  safeGet(obj, key) {\n    if (Model && obj.relationshipFor?.(key)?.meta?.kind == 'belongsTo') {\n      return obj.belongsTo(key).value();\n    }\n    return safeGet(obj, key);\n  }\n  safeSet(obj, key, value) {\n    return safeSet(obj, key, value);\n  }\n\n  /**\n   * @property isValid\n   * @type {Array}\n   */\n  get isValid() {\n    return super.isValid;\n  }\n\n  /**\n   * @property isInvalid\n   * @type {Boolean}\n   */\n  get isInvalid() {\n    return super.isInvalid;\n  }\n\n  /**\n   * @property isPristine\n   * @type {Boolean}\n   */\n  get isPristine() {\n    return super.isPristine;\n  }\n\n  /**\n   * @property isDirty\n   * @type {Boolean}\n   */\n  get isDirty() {\n    return super.isDirty;\n  }\n  get pendingData() {\n    let content = this[CONTENT];\n    let changes = this[CHANGES];\n    let pendingChanges = this.mergeDeep(Object.create(Object.getPrototypeOf(content)), content, {\n      safeGet,\n      safeSet\n    });\n    return this.mergeDeep(pendingChanges, changes, {\n      safeGet,\n      safeSet\n    });\n  }\n\n  /**\n   * Manually add an error to the changeset. If there is an existing\n   * error or change for `key`, it will be overwritten.\n   *\n   * @method addError\n   */\n  addError(key, error) {\n    super.addError(key, error);\n    notifyPropertyChange(this, key);\n    // Return passed-in `error`.\n    return error;\n  }\n\n  /**\n   * Manually push multiple errors to the changeset as an array.\n   *\n   * @method pushErrors\n   */\n  pushErrors(key, ...newErrors) {\n    const {\n      value,\n      validation\n    } = super.pushErrors(key, ...newErrors);\n    notifyPropertyChange(this, key);\n    return {\n      value,\n      validation\n    };\n  }\n\n  /**\n   * Sets property or error on the changeset.\n   * Returns value or error\n   */\n  _setProperty({\n    key,\n    value,\n    oldValue\n  }) {\n    super._setProperty({\n      key,\n      value,\n      oldValue\n    });\n    notifyPropertyChange(this, key);\n  }\n\n  /**\n   * Notifies virtual properties set on the changeset of a change.\n   * You can specify which keys are notified by passing in an array.\n   *\n   * @private\n   * @param {Array} keys\n   * @return {Void}\n   */\n  _notifyVirtualProperties(keys) {\n    keys = super._notifyVirtualProperties(keys);\n    (keys || []).forEach(key => notifyPropertyChange(this, key));\n    return;\n  }\n\n  /**\n   * Deletes a key off an object and notifies observers.\n   */\n  _deleteKey(objName, key = '') {\n    const result = super._deleteKey(objName, key);\n    notifyPropertyChange(this, key);\n    return result;\n  }\n\n  /**\n   * Executes the changeset if in a valid state.\n   *\n   * @method execute\n   */\n  execute() {\n    let oldContent;\n    if (this.isValid && this.isDirty) {\n      let content = this[CONTENT];\n      let changes = this[CHANGES];\n\n      // keep old values in case of error and we want to rollback\n      oldContent = buildOldValues(content, this.changes, this.getDeep);\n\n      // we want mutation on original object\n      // @tracked\n      this[CONTENT] = this.mergeDeep(content, changes, {\n        safeGet,\n        safeSet\n      });\n    }\n    this[PREVIOUS_CONTENT] = oldContent;\n    return this;\n  }\n}, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"_changes\", [tracked], {\n  configurable: true,\n  enumerable: true,\n  writable: true,\n  initializer: null\n}), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"_errors\", [tracked], {\n  configurable: true,\n  enumerable: true,\n  writable: true,\n  initializer: null\n}), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"_content\", [tracked], {\n  configurable: true,\n  enumerable: true,\n  writable: true,\n  initializer: null\n}), _applyDecoratedDescriptor(_class.prototype, \"isValid\", [dependentKeyCompat], Object.getOwnPropertyDescriptor(_class.prototype, \"isValid\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isInvalid\", [dependentKeyCompat], Object.getOwnPropertyDescriptor(_class.prototype, \"isInvalid\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isPristine\", [dependentKeyCompat], Object.getOwnPropertyDescriptor(_class.prototype, \"isPristine\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isDirty\", [dependentKeyCompat], Object.getOwnPropertyDescriptor(_class.prototype, \"isDirty\"), _class.prototype), _class);\n\n/**\n * Creates new changesets.\n */\nexport function changeset(obj, validateFn = defaultValidatorFn, validationMap = {}, options = {}) {\n  assert('Underlying object for changeset is missing', Boolean(obj));\n  assert('Array is not a valid type to pass as the first argument to `changeset`', !Array.isArray(obj));\n  if (options.changeset) {\n    return new options.changeset(obj, validateFn, validationMap, options);\n  }\n  const c = new EmberChangeset(obj, validateFn, validationMap, options);\n  return c;\n}\n\n/**\n * Creates new changesets.\n * @function Changeset\n */\nexport function Changeset(obj, validateFn = defaultValidatorFn, validationMap = {}, options = {}) {\n  const c = changeset(obj, validateFn, validationMap, options);\n  return new Proxy(c, {\n    get(targetBuffer, key /*, receiver*/) {\n      const res = targetBuffer.get(key.toString());\n      return res;\n    },\n    set(targetBuffer, key, value /*, receiver*/) {\n      targetBuffer.set(key.toString(), value);\n      return true;\n    }\n  });\n}\nexport default class ChangesetKlass {\n  /**\n   * Changeset factory\n   * TODO: deprecate in favor of factory function\n   *\n   * @class ChangesetKlass\n   * @constructor\n   */\n  constructor(obj, validateFn = defaultValidatorFn, validationMap = {}, options = {}) {\n    const c = changeset(obj, validateFn, validationMap, options);\n    return new Proxy(c, {\n      get(targetBuffer, key /*, receiver*/) {\n        const res = targetBuffer.get(key.toString());\n        return res;\n      },\n      set(targetBuffer, key, value /*, receiver*/) {\n        targetBuffer.set(key.toString(), value);\n        return true;\n      }\n    });\n  }\n}","import initializerFactory from 'ember-cli-app-version/initializer-factory';\nimport config from '../config/environment';\n\nlet name, version;\nif (config.APP) {\n  name = config.APP.name;\n  version = config.APP.version;\n}\n\nexport default {\n  name: 'App Version',\n  initialize: initializerFactory(name, version),\n};\n","import { libraries } from '@ember/-internals/metal';\n\nexport default function initializerFactory(name, version) {\n  let registered = false;\n\n  return function () {\n    if (!registered && name && version) {\n      libraries.register(name, version);\n      registered = true;\n    }\n  };\n}\n","var _class, _descriptor;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\nimport Helper from '@ember/component/helper';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nlet THelper = (_class = class THelper extends Helper {\n  constructor() {\n    // eslint-disable-next-line prefer-rest-params\n    super(...arguments);\n\n    // @ts-expect-error: Property 'onLocaleChanged' is private and only accessible within class 'IntlService'.\n    _initializerDefineProperty(this, \"intl\", _descriptor, this);\n    _defineProperty(this, \"allowEmpty\", false);\n    this.intl.onLocaleChanged(this.recompute, this);\n  }\n  compute([value, positionalOptions], namedOptions) {\n    const options = positionalOptions ? Object.assign({}, positionalOptions, namedOptions) : namedOptions;\n    if (isEmpty(value)) {\n      if (options?.allowEmpty ?? this.allowEmpty) {\n        return '';\n      }\n      if (typeof value === 'undefined') {\n        throw new Error('{{t}} helper requires a value.');\n      }\n    }\n    return this.intl.t(value, options);\n  }\n}, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"intl\", [service], {\n  configurable: true,\n  enumerable: true,\n  writable: true,\n  initializer: null\n}), _class);\nexport { THelper as default };","import EventEmitter from './index.js'\n\nexport { EventEmitter }\nexport default EventEmitter\n","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/**\n * @private\n * @hide\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport default class FormatterBase {\n  get options() {\n    return [];\n  }\n}\n_defineProperty(FormatterBase, \"type\", void 0);","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport Formatter from './-base';\n/**\n * @private\n * @hide\n */\nexport default class FormatDate extends Formatter {\n  format(intl, ...[value, opts]) {\n    return intl.formatDate(value, opts);\n  }\n}\n_defineProperty(FormatDate, \"type\", 'date');","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport Formatter from './-base';\n\n/**\n * @private\n * @hide\n */\nexport default class FormatList extends Formatter {\n  format(intl, ...[value, opts]) {\n    return intl.formatList(value, opts);\n  }\n}\n_defineProperty(FormatList, \"type\", 'list');","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport { htmlSafe, isHTMLSafe } from '@ember/template';\nimport Formatter from './-base';\nconst escaped = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#x27;',\n  '`': '&#x60;',\n  '=': '&#x3D;'\n};\nconst needToEscape = /[&<>\"'`=]/;\nconst badCharacters = /[&<>\"'`=]/g;\n\n// https://github.com/emberjs/ember.js/blob/v5.6.0/packages/%40ember/-internals/glimmer/lib/utils/string.ts#L103-L118\nfunction escapeExpression(value) {\n  if (!needToEscape.test(value)) {\n    return value;\n  }\n  return value.replace(badCharacters, character => {\n    return escaped[character];\n  });\n}\nfunction escapeOptions(object) {\n  if (typeof object !== 'object') {\n    return;\n  }\n  const escapedOpts = {};\n  Object.keys(object).forEach(key => {\n    const value = object[key];\n    if (isHTMLSafe(value)) {\n      // If the option is an instance of Ember SafeString,\n      // we don't want to pass it into the formatter, since the\n      // formatter won't know what to do with it. Instead, we cast\n      // the SafeString to a regular string using `toHTML`.\n      // Since it was already marked as safe we should *not* escape it.\n      // @ts-ignore: see comment above\n      escapedOpts[key] = value.toHTML();\n    } else if (typeof value === 'string') {\n      // @ts-ignore: see comment above\n      escapedOpts[key] = escapeExpression(value);\n    } else {\n      // @ts-ignore: see comment above\n      escapedOpts[key] = value; // copy as-is\n    }\n  });\n  return escapedOpts;\n}\n/**\n * @private\n * @hide\n */\nexport default class FormatMessage extends Formatter {\n  // ! Function overloads are not passed through generic types for reasons that\n  // evade my knowledge. ¯\\_(ツ)_/¯\n  // For this reason these types need to be manually copied over to the\n  // `IntlService#formatMessage`.\n\n  format(intl, stringOrDesc, options) {\n    const isHTMLSafe = options && options.htmlSafe;\n    const escapedOptions = isHTMLSafe ? escapeOptions(options) : options;\n    const desc = stringOrDesc && typeof stringOrDesc === 'object' ? stringOrDesc : {\n      id: stringOrDesc,\n      defaultMessage: stringOrDesc\n    };\n    const result = intl.formatMessage(desc, escapedOptions, {\n      ignoreTag: true\n    });\n    return isHTMLSafe ? htmlSafe(result) : result;\n  }\n}\n_defineProperty(FormatMessage, \"type\", 'message');","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport Formatter from './-base';\n\n/**\n * @private\n * @hide\n */\nexport default class FormatNumber extends Formatter {\n  format(intl, ...[value, opts]) {\n    return intl.formatNumber(value, opts);\n  }\n}\n_defineProperty(FormatNumber, \"type\", 'number');","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { assert } from '@ember/debug';\nimport Formatter from './-base';\n\n/**\n * An object with some or all of properties of `options` parameter\n * of `Intl.RelativeTimeFormat` constructor.\n *\n * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/RelativeTimeFormat#Parameters).\n *\n * [Specification](https://tc39.es/ecma402/#sec-InitializeRelativeTimeFormat).\n */\n\n/**\n * @private\n * @hide\n */\nexport default class FormatRelative extends Formatter {\n  format(intl, value, formatOptions) {\n    assert(`[ember-intl] FormatRelative: Missing option`, formatOptions);\n    const {\n      format\n    } = formatOptions;\n    let unit = formatOptions.unit;\n    let opts = formatOptions;\n    if (!unit && format && intl.formats.relative && (opts = intl.formats.relative[format])) {\n      unit = opts.unit;\n    }\n    assert(`[ember-intl] FormatRelative: 'formatOptions' are missing a 'unit'. ${JSON.stringify(formatOptions)}`, unit);\n    return intl.formatRelativeTime(value, unit, opts);\n  }\n}\n_defineProperty(FormatRelative, \"type\", 'relative');","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport Formatter from './-base';\n\n/**\n * @private\n * @hide\n */\nexport default class FormatTime extends Formatter {\n  format(intl, ...[value, opts]) {\n    return intl.formatTime(value, opts);\n  }\n}\n_defineProperty(FormatTime, \"type\", 'time');","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null)\n      throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n              t[p[i]] = s[p[i]];\n      }\n  return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n  var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _, done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n      var context = {};\n      for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n      for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n      context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n      var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n      if (kind === \"accessor\") {\n          if (result === void 0) continue;\n          if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n          if (_ = accept(result.get)) descriptor.get = _;\n          if (_ = accept(result.set)) descriptor.set = _;\n          if (_ = accept(result.init)) initializers.unshift(_);\n      }\n      else if (_ = accept(result)) {\n          if (kind === \"field\") initializers.unshift(_);\n          else descriptor[key] = _;\n      }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n  return new (P || (P = Promise))(function (resolve, reject) {\n      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n      function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\n\nexport function __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n  return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n  function verb(n) { return function (v) { return step([n, v]); }; }\n  function step(op) {\n      if (f) throw new TypeError(\"Generator is already executing.\");\n      while (g && (g = 0, op[0] && (_ = 0)), _) try {\n          if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n              case 0: case 1: t = op; break;\n              case 4: _.label++; return { value: op[1], done: false };\n              case 5: _.label++; y = op[1]; op = [0]; continue;\n              case 7: op = _.ops.pop(); _.trys.pop(); continue;\n              default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                  if (t[2]) _.ops.pop();\n                  _.trys.pop(); continue;\n          }\n          op = body.call(thisArg, _);\n      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n  }\n  Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n  return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n      if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n      }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n  function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n  function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n  function fulfill(value) { resume(\"next\", value); }\n  function reject(value) { resume(\"throw\", value); }\n  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n  Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n  o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n  __setModuleDefault(result, mod);\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n  return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n    var dispose, inner;\n    if (async) {\n      if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n      dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n      if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n      dispose = value[Symbol.dispose];\n      if (async) inner = dispose;\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n    env.stack.push({ value: value, dispose: dispose, async: async });\n  }\n  else if (async) {\n    env.stack.push({ async: true });\n  }\n  return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  function next() {\n    while (env.stack.length) {\n      var rec = env.stack.pop();\n      try {\n        var result = rec.dispose && rec.dispose.call(rec.value);\n        if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n      }\n      catch (e) {\n          fail(e);\n      }\n    }\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n};\n","export var ErrorKind;\n(function (ErrorKind) {\n    /** Argument is unclosed (e.g. `{0`) */\n    ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_CLOSING_BRACE\"] = 1] = \"EXPECT_ARGUMENT_CLOSING_BRACE\";\n    /** Argument is empty (e.g. `{}`). */\n    ErrorKind[ErrorKind[\"EMPTY_ARGUMENT\"] = 2] = \"EMPTY_ARGUMENT\";\n    /** Argument is malformed (e.g. `{foo!}``) */\n    ErrorKind[ErrorKind[\"MALFORMED_ARGUMENT\"] = 3] = \"MALFORMED_ARGUMENT\";\n    /** Expect an argument type (e.g. `{foo,}`) */\n    ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_TYPE\"] = 4] = \"EXPECT_ARGUMENT_TYPE\";\n    /** Unsupported argument type (e.g. `{foo,foo}`) */\n    ErrorKind[ErrorKind[\"INVALID_ARGUMENT_TYPE\"] = 5] = \"INVALID_ARGUMENT_TYPE\";\n    /** Expect an argument style (e.g. `{foo, number, }`) */\n    ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_STYLE\"] = 6] = \"EXPECT_ARGUMENT_STYLE\";\n    /** The number skeleton is invalid. */\n    ErrorKind[ErrorKind[\"INVALID_NUMBER_SKELETON\"] = 7] = \"INVALID_NUMBER_SKELETON\";\n    /** The date time skeleton is invalid. */\n    ErrorKind[ErrorKind[\"INVALID_DATE_TIME_SKELETON\"] = 8] = \"INVALID_DATE_TIME_SKELETON\";\n    /** Exepct a number skeleton following the `::` (e.g. `{foo, number, ::}`) */\n    ErrorKind[ErrorKind[\"EXPECT_NUMBER_SKELETON\"] = 9] = \"EXPECT_NUMBER_SKELETON\";\n    /** Exepct a date time skeleton following the `::` (e.g. `{foo, date, ::}`) */\n    ErrorKind[ErrorKind[\"EXPECT_DATE_TIME_SKELETON\"] = 10] = \"EXPECT_DATE_TIME_SKELETON\";\n    /** Unmatched apostrophes in the argument style (e.g. `{foo, number, 'test`) */\n    ErrorKind[ErrorKind[\"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\"] = 11] = \"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\";\n    /** Missing select argument options (e.g. `{foo, select}`) */\n    ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_OPTIONS\"] = 12] = \"EXPECT_SELECT_ARGUMENT_OPTIONS\";\n    /** Expecting an offset value in `plural` or `selectordinal` argument (e.g `{foo, plural, offset}`) */\n    ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\"] = 13] = \"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\";\n    /** Offset value in `plural` or `selectordinal` is invalid (e.g. `{foo, plural, offset: x}`) */\n    ErrorKind[ErrorKind[\"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\"] = 14] = \"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\";\n    /** Expecting a selector in `select` argument (e.g `{foo, select}`) */\n    ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_SELECTOR\"] = 15] = \"EXPECT_SELECT_ARGUMENT_SELECTOR\";\n    /** Expecting a selector in `plural` or `selectordinal` argument (e.g `{foo, plural}`) */\n    ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_SELECTOR\"] = 16] = \"EXPECT_PLURAL_ARGUMENT_SELECTOR\";\n    /** Expecting a message fragment after the `select` selector (e.g. `{foo, select, apple}`) */\n    ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\"] = 17] = \"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\";\n    /**\n     * Expecting a message fragment after the `plural` or `selectordinal` selector\n     * (e.g. `{foo, plural, one}`)\n     */\n    ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\"] = 18] = \"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\";\n    /** Selector in `plural` or `selectordinal` is malformed (e.g. `{foo, plural, =x {#}}`) */\n    ErrorKind[ErrorKind[\"INVALID_PLURAL_ARGUMENT_SELECTOR\"] = 19] = \"INVALID_PLURAL_ARGUMENT_SELECTOR\";\n    /**\n     * Duplicate selectors in `plural` or `selectordinal` argument.\n     * (e.g. {foo, plural, one {#} one {#}})\n     */\n    ErrorKind[ErrorKind[\"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\"] = 20] = \"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\";\n    /** Duplicate selectors in `select` argument.\n     * (e.g. {foo, select, apple {apple} apple {apple}})\n     */\n    ErrorKind[ErrorKind[\"DUPLICATE_SELECT_ARGUMENT_SELECTOR\"] = 21] = \"DUPLICATE_SELECT_ARGUMENT_SELECTOR\";\n    /** Plural or select argument option must have `other` clause. */\n    ErrorKind[ErrorKind[\"MISSING_OTHER_CLAUSE\"] = 22] = \"MISSING_OTHER_CLAUSE\";\n    /** The tag is malformed. (e.g. `<bold!>foo</bold!>) */\n    ErrorKind[ErrorKind[\"INVALID_TAG\"] = 23] = \"INVALID_TAG\";\n    /** The tag name is invalid. (e.g. `<123>foo</123>`) */\n    ErrorKind[ErrorKind[\"INVALID_TAG_NAME\"] = 25] = \"INVALID_TAG_NAME\";\n    /** The closing tag does not match the opening tag. (e.g. `<bold>foo</italic>`) */\n    ErrorKind[ErrorKind[\"UNMATCHED_CLOSING_TAG\"] = 26] = \"UNMATCHED_CLOSING_TAG\";\n    /** The opening tag has unmatched closing tag. (e.g. `<bold>foo`) */\n    ErrorKind[ErrorKind[\"UNCLOSED_TAG\"] = 27] = \"UNCLOSED_TAG\";\n})(ErrorKind || (ErrorKind = {}));\n","export var TYPE;\n(function (TYPE) {\n    /**\n     * Raw text\n     */\n    TYPE[TYPE[\"literal\"] = 0] = \"literal\";\n    /**\n     * Variable w/o any format, e.g `var` in `this is a {var}`\n     */\n    TYPE[TYPE[\"argument\"] = 1] = \"argument\";\n    /**\n     * Variable w/ number format\n     */\n    TYPE[TYPE[\"number\"] = 2] = \"number\";\n    /**\n     * Variable w/ date format\n     */\n    TYPE[TYPE[\"date\"] = 3] = \"date\";\n    /**\n     * Variable w/ time format\n     */\n    TYPE[TYPE[\"time\"] = 4] = \"time\";\n    /**\n     * Variable w/ select format\n     */\n    TYPE[TYPE[\"select\"] = 5] = \"select\";\n    /**\n     * Variable w/ plural format\n     */\n    TYPE[TYPE[\"plural\"] = 6] = \"plural\";\n    /**\n     * Only possible within plural argument.\n     * This is the `#` symbol that will be substituted with the count.\n     */\n    TYPE[TYPE[\"pound\"] = 7] = \"pound\";\n    /**\n     * XML-like tag\n     */\n    TYPE[TYPE[\"tag\"] = 8] = \"tag\";\n})(TYPE || (TYPE = {}));\nexport var SKELETON_TYPE;\n(function (SKELETON_TYPE) {\n    SKELETON_TYPE[SKELETON_TYPE[\"number\"] = 0] = \"number\";\n    SKELETON_TYPE[SKELETON_TYPE[\"dateTime\"] = 1] = \"dateTime\";\n})(SKELETON_TYPE || (SKELETON_TYPE = {}));\n/**\n * Type Guards\n */\nexport function isLiteralElement(el) {\n    return el.type === TYPE.literal;\n}\nexport function isArgumentElement(el) {\n    return el.type === TYPE.argument;\n}\nexport function isNumberElement(el) {\n    return el.type === TYPE.number;\n}\nexport function isDateElement(el) {\n    return el.type === TYPE.date;\n}\nexport function isTimeElement(el) {\n    return el.type === TYPE.time;\n}\nexport function isSelectElement(el) {\n    return el.type === TYPE.select;\n}\nexport function isPluralElement(el) {\n    return el.type === TYPE.plural;\n}\nexport function isPoundElement(el) {\n    return el.type === TYPE.pound;\n}\nexport function isTagElement(el) {\n    return el.type === TYPE.tag;\n}\nexport function isNumberSkeleton(el) {\n    return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.number);\n}\nexport function isDateTimeSkeleton(el) {\n    return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.dateTime);\n}\nexport function createLiteralElement(value) {\n    return {\n        type: TYPE.literal,\n        value: value,\n    };\n}\nexport function createNumberElement(value, style) {\n    return {\n        type: TYPE.number,\n        value: value,\n        style: style,\n    };\n}\n","// @generated from regex-gen.ts\nexport var SPACE_SEPARATOR_REGEX = /[ \\xA0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/;\nexport var WHITE_SPACE_REGEX = /[\\t-\\r \\x85\\u200E\\u200F\\u2028\\u2029]/;\n","/**\n * https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * Credit: https://github.com/caridy/intl-datetimeformat-pattern/blob/master/index.js\n * with some tweaks\n */\nvar DATE_TIME_REGEX = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;\n/**\n * Parse Date time skeleton into Intl.DateTimeFormatOptions\n * Ref: https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * @public\n * @param skeleton skeleton string\n */\nexport function parseDateTimeSkeleton(skeleton) {\n    var result = {};\n    skeleton.replace(DATE_TIME_REGEX, function (match) {\n        var len = match.length;\n        switch (match[0]) {\n            // Era\n            case 'G':\n                result.era = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short';\n                break;\n            // Year\n            case 'y':\n                result.year = len === 2 ? '2-digit' : 'numeric';\n                break;\n            case 'Y':\n            case 'u':\n            case 'U':\n            case 'r':\n                throw new RangeError('`Y/u/U/r` (year) patterns are not supported, use `y` instead');\n            // Quarter\n            case 'q':\n            case 'Q':\n                throw new RangeError('`q/Q` (quarter) patterns are not supported');\n            // Month\n            case 'M':\n            case 'L':\n                result.month = ['numeric', '2-digit', 'short', 'long', 'narrow'][len - 1];\n                break;\n            // Week\n            case 'w':\n            case 'W':\n                throw new RangeError('`w/W` (week) patterns are not supported');\n            case 'd':\n                result.day = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'D':\n            case 'F':\n            case 'g':\n                throw new RangeError('`D/F/g` (day) patterns are not supported, use `d` instead');\n            // Weekday\n            case 'E':\n                result.weekday = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short';\n                break;\n            case 'e':\n                if (len < 4) {\n                    throw new RangeError('`e..eee` (weekday) patterns are not supported');\n                }\n                result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n                break;\n            case 'c':\n                if (len < 4) {\n                    throw new RangeError('`c..ccc` (weekday) patterns are not supported');\n                }\n                result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n                break;\n            // Period\n            case 'a': // AM, PM\n                result.hour12 = true;\n                break;\n            case 'b': // am, pm, noon, midnight\n            case 'B': // flexible day periods\n                throw new RangeError('`b/B` (period) patterns are not supported, use `a` instead');\n            // Hour\n            case 'h':\n                result.hourCycle = 'h12';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'H':\n                result.hourCycle = 'h23';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'K':\n                result.hourCycle = 'h11';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'k':\n                result.hourCycle = 'h24';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'j':\n            case 'J':\n            case 'C':\n                throw new RangeError('`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead');\n            // Minute\n            case 'm':\n                result.minute = ['numeric', '2-digit'][len - 1];\n                break;\n            // Second\n            case 's':\n                result.second = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'S':\n            case 'A':\n                throw new RangeError('`S/A` (second) patterns are not supported, use `s` instead');\n            // Zone\n            case 'z': // 1..3, 4: specific non-location format\n                result.timeZoneName = len < 4 ? 'short' : 'long';\n                break;\n            case 'Z': // 1..3, 4, 5: The ISO8601 varios formats\n            case 'O': // 1, 4: milliseconds in day short, long\n            case 'v': // 1, 4: generic non-location format\n            case 'V': // 1, 2, 3, 4: time zone ID or city\n            case 'X': // 1, 2, 3, 4: The ISO8601 varios formats\n            case 'x': // 1, 2, 3, 4: The ISO8601 varios formats\n                throw new RangeError('`Z/O/v/V/X/x` (timeZone) patterns are not supported, use `z` instead');\n        }\n        return '';\n    });\n    return result;\n}\n","// @generated from regex-gen.ts\nexport var WHITE_SPACE_REGEX = /[\\t-\\r \\x85\\u200E\\u200F\\u2028\\u2029]/i;\n","import { __assign } from \"tslib\";\nimport { WHITE_SPACE_REGEX } from './regex.generated';\nexport function parseNumberSkeletonFromString(skeleton) {\n    if (skeleton.length === 0) {\n        throw new Error('Number skeleton cannot be empty');\n    }\n    // Parse the skeleton\n    var stringTokens = skeleton\n        .split(WHITE_SPACE_REGEX)\n        .filter(function (x) { return x.length > 0; });\n    var tokens = [];\n    for (var _i = 0, stringTokens_1 = stringTokens; _i < stringTokens_1.length; _i++) {\n        var stringToken = stringTokens_1[_i];\n        var stemAndOptions = stringToken.split('/');\n        if (stemAndOptions.length === 0) {\n            throw new Error('Invalid number skeleton');\n        }\n        var stem = stemAndOptions[0], options = stemAndOptions.slice(1);\n        for (var _a = 0, options_1 = options; _a < options_1.length; _a++) {\n            var option = options_1[_a];\n            if (option.length === 0) {\n                throw new Error('Invalid number skeleton');\n            }\n        }\n        tokens.push({ stem: stem, options: options });\n    }\n    return tokens;\n}\nfunction icuUnitToEcma(unit) {\n    return unit.replace(/^(.*?)-/, '');\n}\nvar FRACTION_PRECISION_REGEX = /^\\.(?:(0+)(\\*)?|(#+)|(0+)(#+))$/g;\nvar SIGNIFICANT_PRECISION_REGEX = /^(@+)?(\\+|#+)?[rs]?$/g;\nvar INTEGER_WIDTH_REGEX = /(\\*)(0+)|(#+)(0+)|(0+)/g;\nvar CONCISE_INTEGER_WIDTH_REGEX = /^(0+)$/;\nfunction parseSignificantPrecision(str) {\n    var result = {};\n    if (str[str.length - 1] === 'r') {\n        result.roundingPriority = 'morePrecision';\n    }\n    else if (str[str.length - 1] === 's') {\n        result.roundingPriority = 'lessPrecision';\n    }\n    str.replace(SIGNIFICANT_PRECISION_REGEX, function (_, g1, g2) {\n        // @@@ case\n        if (typeof g2 !== 'string') {\n            result.minimumSignificantDigits = g1.length;\n            result.maximumSignificantDigits = g1.length;\n        }\n        // @@@+ case\n        else if (g2 === '+') {\n            result.minimumSignificantDigits = g1.length;\n        }\n        // .### case\n        else if (g1[0] === '#') {\n            result.maximumSignificantDigits = g1.length;\n        }\n        // .@@## or .@@@ case\n        else {\n            result.minimumSignificantDigits = g1.length;\n            result.maximumSignificantDigits =\n                g1.length + (typeof g2 === 'string' ? g2.length : 0);\n        }\n        return '';\n    });\n    return result;\n}\nfunction parseSign(str) {\n    switch (str) {\n        case 'sign-auto':\n            return {\n                signDisplay: 'auto',\n            };\n        case 'sign-accounting':\n        case '()':\n            return {\n                currencySign: 'accounting',\n            };\n        case 'sign-always':\n        case '+!':\n            return {\n                signDisplay: 'always',\n            };\n        case 'sign-accounting-always':\n        case '()!':\n            return {\n                signDisplay: 'always',\n                currencySign: 'accounting',\n            };\n        case 'sign-except-zero':\n        case '+?':\n            return {\n                signDisplay: 'exceptZero',\n            };\n        case 'sign-accounting-except-zero':\n        case '()?':\n            return {\n                signDisplay: 'exceptZero',\n                currencySign: 'accounting',\n            };\n        case 'sign-never':\n        case '+_':\n            return {\n                signDisplay: 'never',\n            };\n    }\n}\nfunction parseConciseScientificAndEngineeringStem(stem) {\n    // Engineering\n    var result;\n    if (stem[0] === 'E' && stem[1] === 'E') {\n        result = {\n            notation: 'engineering',\n        };\n        stem = stem.slice(2);\n    }\n    else if (stem[0] === 'E') {\n        result = {\n            notation: 'scientific',\n        };\n        stem = stem.slice(1);\n    }\n    if (result) {\n        var signDisplay = stem.slice(0, 2);\n        if (signDisplay === '+!') {\n            result.signDisplay = 'always';\n            stem = stem.slice(2);\n        }\n        else if (signDisplay === '+?') {\n            result.signDisplay = 'exceptZero';\n            stem = stem.slice(2);\n        }\n        if (!CONCISE_INTEGER_WIDTH_REGEX.test(stem)) {\n            throw new Error('Malformed concise eng/scientific notation');\n        }\n        result.minimumIntegerDigits = stem.length;\n    }\n    return result;\n}\nfunction parseNotationOptions(opt) {\n    var result = {};\n    var signOpts = parseSign(opt);\n    if (signOpts) {\n        return signOpts;\n    }\n    return result;\n}\n/**\n * https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#skeleton-stems-and-options\n */\nexport function parseNumberSkeleton(tokens) {\n    var result = {};\n    for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {\n        var token = tokens_1[_i];\n        switch (token.stem) {\n            case 'percent':\n            case '%':\n                result.style = 'percent';\n                continue;\n            case '%x100':\n                result.style = 'percent';\n                result.scale = 100;\n                continue;\n            case 'currency':\n                result.style = 'currency';\n                result.currency = token.options[0];\n                continue;\n            case 'group-off':\n            case ',_':\n                result.useGrouping = false;\n                continue;\n            case 'precision-integer':\n            case '.':\n                result.maximumFractionDigits = 0;\n                continue;\n            case 'measure-unit':\n            case 'unit':\n                result.style = 'unit';\n                result.unit = icuUnitToEcma(token.options[0]);\n                continue;\n            case 'compact-short':\n            case 'K':\n                result.notation = 'compact';\n                result.compactDisplay = 'short';\n                continue;\n            case 'compact-long':\n            case 'KK':\n                result.notation = 'compact';\n                result.compactDisplay = 'long';\n                continue;\n            case 'scientific':\n                result = __assign(__assign(__assign({}, result), { notation: 'scientific' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {}));\n                continue;\n            case 'engineering':\n                result = __assign(__assign(__assign({}, result), { notation: 'engineering' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {}));\n                continue;\n            case 'notation-simple':\n                result.notation = 'standard';\n                continue;\n            // https://github.com/unicode-org/icu/blob/master/icu4c/source/i18n/unicode/unumberformatter.h\n            case 'unit-width-narrow':\n                result.currencyDisplay = 'narrowSymbol';\n                result.unitDisplay = 'narrow';\n                continue;\n            case 'unit-width-short':\n                result.currencyDisplay = 'code';\n                result.unitDisplay = 'short';\n                continue;\n            case 'unit-width-full-name':\n                result.currencyDisplay = 'name';\n                result.unitDisplay = 'long';\n                continue;\n            case 'unit-width-iso-code':\n                result.currencyDisplay = 'symbol';\n                continue;\n            case 'scale':\n                result.scale = parseFloat(token.options[0]);\n                continue;\n            case 'rounding-mode-floor':\n                result.roundingMode = 'floor';\n                continue;\n            case 'rounding-mode-ceiling':\n                result.roundingMode = 'ceil';\n                continue;\n            case 'rounding-mode-down':\n                result.roundingMode = 'trunc';\n                continue;\n            case 'rounding-mode-up':\n                result.roundingMode = 'expand';\n                continue;\n            case 'rounding-mode-half-even':\n                result.roundingMode = 'halfEven';\n                continue;\n            case 'rounding-mode-half-down':\n                result.roundingMode = 'halfTrunc';\n                continue;\n            case 'rounding-mode-half-up':\n                result.roundingMode = 'halfExpand';\n                continue;\n            // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width\n            case 'integer-width':\n                if (token.options.length > 1) {\n                    throw new RangeError('integer-width stems only accept a single optional option');\n                }\n                token.options[0].replace(INTEGER_WIDTH_REGEX, function (_, g1, g2, g3, g4, g5) {\n                    if (g1) {\n                        result.minimumIntegerDigits = g2.length;\n                    }\n                    else if (g3 && g4) {\n                        throw new Error('We currently do not support maximum integer digits');\n                    }\n                    else if (g5) {\n                        throw new Error('We currently do not support exact integer digits');\n                    }\n                    return '';\n                });\n                continue;\n        }\n        // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width\n        if (CONCISE_INTEGER_WIDTH_REGEX.test(token.stem)) {\n            result.minimumIntegerDigits = token.stem.length;\n            continue;\n        }\n        if (FRACTION_PRECISION_REGEX.test(token.stem)) {\n            // Precision\n            // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#fraction-precision\n            // precision-integer case\n            if (token.options.length > 1) {\n                throw new RangeError('Fraction-precision stems only accept a single optional option');\n            }\n            token.stem.replace(FRACTION_PRECISION_REGEX, function (_, g1, g2, g3, g4, g5) {\n                // .000* case (before ICU67 it was .000+)\n                if (g2 === '*') {\n                    result.minimumFractionDigits = g1.length;\n                }\n                // .### case\n                else if (g3 && g3[0] === '#') {\n                    result.maximumFractionDigits = g3.length;\n                }\n                // .00## case\n                else if (g4 && g5) {\n                    result.minimumFractionDigits = g4.length;\n                    result.maximumFractionDigits = g4.length + g5.length;\n                }\n                else {\n                    result.minimumFractionDigits = g1.length;\n                    result.maximumFractionDigits = g1.length;\n                }\n                return '';\n            });\n            var opt = token.options[0];\n            // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#trailing-zero-display\n            if (opt === 'w') {\n                result = __assign(__assign({}, result), { trailingZeroDisplay: 'stripIfInteger' });\n            }\n            else if (opt) {\n                result = __assign(__assign({}, result), parseSignificantPrecision(opt));\n            }\n            continue;\n        }\n        // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#significant-digits-precision\n        if (SIGNIFICANT_PRECISION_REGEX.test(token.stem)) {\n            result = __assign(__assign({}, result), parseSignificantPrecision(token.stem));\n            continue;\n        }\n        var signOpts = parseSign(token.stem);\n        if (signOpts) {\n            result = __assign(__assign({}, result), signOpts);\n        }\n        var conciseScientificAndEngineeringOpts = parseConciseScientificAndEngineeringStem(token.stem);\n        if (conciseScientificAndEngineeringOpts) {\n            result = __assign(__assign({}, result), conciseScientificAndEngineeringOpts);\n        }\n    }\n    return result;\n}\n","// @generated from time-data-gen.ts\n// prettier-ignore  \nexport var timeData = {\n    \"001\": [\n        \"H\",\n        \"h\"\n    ],\n    \"AC\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"AD\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AE\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"AF\": [\n        \"H\",\n        \"hb\",\n        \"hB\",\n        \"h\"\n    ],\n    \"AG\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"AI\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"AL\": [\n        \"h\",\n        \"H\",\n        \"hB\"\n    ],\n    \"AM\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AO\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AR\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"AS\": [\n        \"h\",\n        \"H\"\n    ],\n    \"AT\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AU\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"AW\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AX\": [\n        \"H\"\n    ],\n    \"AZ\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"BA\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"BB\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"BD\": [\n        \"h\",\n        \"hB\",\n        \"H\"\n    ],\n    \"BE\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BF\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BG\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"BH\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"BI\": [\n        \"H\",\n        \"h\"\n    ],\n    \"BJ\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BL\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"BN\": [\n        \"hb\",\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"BO\": [\n        \"H\",\n        \"hB\",\n        \"h\",\n        \"hb\"\n    ],\n    \"BQ\": [\n        \"H\"\n    ],\n    \"BR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BS\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"BT\": [\n        \"h\",\n        \"H\"\n    ],\n    \"BW\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"BY\": [\n        \"H\",\n        \"h\"\n    ],\n    \"BZ\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CA\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"CC\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CD\": [\n        \"hB\",\n        \"H\"\n    ],\n    \"CF\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"CG\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"CH\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"CI\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"CK\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CL\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"CM\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"CN\": [\n        \"H\",\n        \"hB\",\n        \"hb\",\n        \"h\"\n    ],\n    \"CO\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"CP\": [\n        \"H\"\n    ],\n    \"CR\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"CU\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"CV\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"CW\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"CX\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CY\": [\n        \"h\",\n        \"H\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CZ\": [\n        \"H\"\n    ],\n    \"DE\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"DG\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"DJ\": [\n        \"h\",\n        \"H\"\n    ],\n    \"DK\": [\n        \"H\"\n    ],\n    \"DM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"DO\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"DZ\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"EA\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"EC\": [\n        \"H\",\n        \"hB\",\n        \"h\",\n        \"hb\"\n    ],\n    \"EE\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"EG\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"EH\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"ER\": [\n        \"h\",\n        \"H\"\n    ],\n    \"ES\": [\n        \"H\",\n        \"hB\",\n        \"h\",\n        \"hb\"\n    ],\n    \"ET\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"FI\": [\n        \"H\"\n    ],\n    \"FJ\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"FK\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"FM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"FO\": [\n        \"H\",\n        \"h\"\n    ],\n    \"FR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GA\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GB\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"GD\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"GE\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"GF\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GG\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"GH\": [\n        \"h\",\n        \"H\"\n    ],\n    \"GI\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"GL\": [\n        \"H\",\n        \"h\"\n    ],\n    \"GM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"GN\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GP\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GQ\": [\n        \"H\",\n        \"hB\",\n        \"h\",\n        \"hb\"\n    ],\n    \"GR\": [\n        \"h\",\n        \"H\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"GT\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"GU\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"GW\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GY\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"HK\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"HN\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"HR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"HU\": [\n        \"H\",\n        \"h\"\n    ],\n    \"IC\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"ID\": [\n        \"H\"\n    ],\n    \"IE\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"IL\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"IM\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"IN\": [\n        \"h\",\n        \"H\"\n    ],\n    \"IO\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"IQ\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"IR\": [\n        \"hB\",\n        \"H\"\n    ],\n    \"IS\": [\n        \"H\"\n    ],\n    \"IT\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"JE\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"JM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"JO\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"JP\": [\n        \"H\",\n        \"K\",\n        \"h\"\n    ],\n    \"KE\": [\n        \"hB\",\n        \"hb\",\n        \"H\",\n        \"h\"\n    ],\n    \"KG\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"KH\": [\n        \"hB\",\n        \"h\",\n        \"H\",\n        \"hb\"\n    ],\n    \"KI\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"KM\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"KN\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"KP\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"KR\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"KW\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"KY\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"KZ\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"LA\": [\n        \"H\",\n        \"hb\",\n        \"hB\",\n        \"h\"\n    ],\n    \"LB\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"LC\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"LI\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"LK\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"LR\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"LS\": [\n        \"h\",\n        \"H\"\n    ],\n    \"LT\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"LU\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"LV\": [\n        \"H\",\n        \"hB\",\n        \"hb\",\n        \"h\"\n    ],\n    \"LY\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"MA\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"MC\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"MD\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"ME\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"MF\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"MG\": [\n        \"H\",\n        \"h\"\n    ],\n    \"MH\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"MK\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"ML\": [\n        \"H\"\n    ],\n    \"MM\": [\n        \"hB\",\n        \"hb\",\n        \"H\",\n        \"h\"\n    ],\n    \"MN\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"MO\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"MP\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"MQ\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"MR\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"MS\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"MT\": [\n        \"H\",\n        \"h\"\n    ],\n    \"MU\": [\n        \"H\",\n        \"h\"\n    ],\n    \"MV\": [\n        \"H\",\n        \"h\"\n    ],\n    \"MW\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"MX\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"MY\": [\n        \"hb\",\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"MZ\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"NA\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"NC\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"NE\": [\n        \"H\"\n    ],\n    \"NF\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"NG\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"NI\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"NL\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"NO\": [\n        \"H\",\n        \"h\"\n    ],\n    \"NP\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"NR\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"NU\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"NZ\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"OM\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"PA\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"PE\": [\n        \"H\",\n        \"hB\",\n        \"h\",\n        \"hb\"\n    ],\n    \"PF\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"PG\": [\n        \"h\",\n        \"H\"\n    ],\n    \"PH\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"PK\": [\n        \"h\",\n        \"hB\",\n        \"H\"\n    ],\n    \"PL\": [\n        \"H\",\n        \"h\"\n    ],\n    \"PM\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"PN\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"PR\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"PS\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"PT\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"PW\": [\n        \"h\",\n        \"H\"\n    ],\n    \"PY\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"QA\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"RE\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"RO\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"RS\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"RU\": [\n        \"H\"\n    ],\n    \"RW\": [\n        \"H\",\n        \"h\"\n    ],\n    \"SA\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"SB\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"SC\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"SD\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"SE\": [\n        \"H\"\n    ],\n    \"SG\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"SH\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"SI\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"SJ\": [\n        \"H\"\n    ],\n    \"SK\": [\n        \"H\"\n    ],\n    \"SL\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"SM\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"SN\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"SO\": [\n        \"h\",\n        \"H\"\n    ],\n    \"SR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"SS\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"ST\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"SV\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"SX\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"SY\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"SZ\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"TA\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"TC\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"TD\": [\n        \"h\",\n        \"H\",\n        \"hB\"\n    ],\n    \"TF\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"TG\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"TH\": [\n        \"H\",\n        \"h\"\n    ],\n    \"TJ\": [\n        \"H\",\n        \"h\"\n    ],\n    \"TL\": [\n        \"H\",\n        \"hB\",\n        \"hb\",\n        \"h\"\n    ],\n    \"TM\": [\n        \"H\",\n        \"h\"\n    ],\n    \"TN\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"TO\": [\n        \"h\",\n        \"H\"\n    ],\n    \"TR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"TT\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"TW\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"TZ\": [\n        \"hB\",\n        \"hb\",\n        \"H\",\n        \"h\"\n    ],\n    \"UA\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"UG\": [\n        \"hB\",\n        \"hb\",\n        \"H\",\n        \"h\"\n    ],\n    \"UM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"US\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"UY\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"UZ\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"VA\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"VC\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"VE\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"VG\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"VI\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"VN\": [\n        \"H\",\n        \"h\"\n    ],\n    \"VU\": [\n        \"h\",\n        \"H\"\n    ],\n    \"WF\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"WS\": [\n        \"h\",\n        \"H\"\n    ],\n    \"XK\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"YE\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"YT\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"ZA\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"ZM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"ZW\": [\n        \"H\",\n        \"h\"\n    ],\n    \"af-ZA\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"ar-001\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"ca-ES\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"en-001\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"es-BO\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"es-BR\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"es-EC\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"es-ES\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"es-GQ\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"es-PE\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"fr-CA\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"gl-ES\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"gu-IN\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"hi-IN\": [\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"it-CH\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"it-IT\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"kn-IN\": [\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"ml-IN\": [\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"mr-IN\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"pa-IN\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"ta-IN\": [\n        \"hB\",\n        \"h\",\n        \"hb\",\n        \"H\"\n    ],\n    \"te-IN\": [\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"zu-ZA\": [\n        \"H\",\n        \"hB\",\n        \"hb\",\n        \"h\"\n    ]\n};\n","var _a;\nimport { __assign } from \"tslib\";\nimport { ErrorKind } from './error';\nimport { SKELETON_TYPE, TYPE, } from './types';\nimport { SPACE_SEPARATOR_REGEX } from './regex.generated';\nimport { parseNumberSkeleton, parseNumberSkeletonFromString, parseDateTimeSkeleton, } from '@formatjs/icu-skeleton-parser';\nimport { getBestPattern } from './date-time-pattern-generator';\nvar SPACE_SEPARATOR_START_REGEX = new RegExp(\"^\".concat(SPACE_SEPARATOR_REGEX.source, \"*\"));\nvar SPACE_SEPARATOR_END_REGEX = new RegExp(\"\".concat(SPACE_SEPARATOR_REGEX.source, \"*$\"));\nfunction createLocation(start, end) {\n    return { start: start, end: end };\n}\n// #region Ponyfills\n// Consolidate these variables up top for easier toggling during debugging\nvar hasNativeStartsWith = !!String.prototype.startsWith && '_a'.startsWith('a', 1);\nvar hasNativeFromCodePoint = !!String.fromCodePoint;\nvar hasNativeFromEntries = !!Object.fromEntries;\nvar hasNativeCodePointAt = !!String.prototype.codePointAt;\nvar hasTrimStart = !!String.prototype.trimStart;\nvar hasTrimEnd = !!String.prototype.trimEnd;\nvar hasNativeIsSafeInteger = !!Number.isSafeInteger;\nvar isSafeInteger = hasNativeIsSafeInteger\n    ? Number.isSafeInteger\n    : function (n) {\n        return (typeof n === 'number' &&\n            isFinite(n) &&\n            Math.floor(n) === n &&\n            Math.abs(n) <= 0x1fffffffffffff);\n    };\n// IE11 does not support y and u.\nvar REGEX_SUPPORTS_U_AND_Y = true;\ntry {\n    var re = RE('([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)', 'yu');\n    /**\n     * legacy Edge or Xbox One browser\n     * Unicode flag support: supported\n     * Pattern_Syntax support: not supported\n     * See https://github.com/formatjs/formatjs/issues/2822\n     */\n    REGEX_SUPPORTS_U_AND_Y = ((_a = re.exec('a')) === null || _a === void 0 ? void 0 : _a[0]) === 'a';\n}\ncatch (_) {\n    REGEX_SUPPORTS_U_AND_Y = false;\n}\nvar startsWith = hasNativeStartsWith\n    ? // Native\n        function startsWith(s, search, position) {\n            return s.startsWith(search, position);\n        }\n    : // For IE11\n        function startsWith(s, search, position) {\n            return s.slice(position, position + search.length) === search;\n        };\nvar fromCodePoint = hasNativeFromCodePoint\n    ? String.fromCodePoint\n    : // IE11\n        function fromCodePoint() {\n            var codePoints = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                codePoints[_i] = arguments[_i];\n            }\n            var elements = '';\n            var length = codePoints.length;\n            var i = 0;\n            var code;\n            while (length > i) {\n                code = codePoints[i++];\n                if (code > 0x10ffff)\n                    throw RangeError(code + ' is not a valid code point');\n                elements +=\n                    code < 0x10000\n                        ? String.fromCharCode(code)\n                        : String.fromCharCode(((code -= 0x10000) >> 10) + 0xd800, (code % 0x400) + 0xdc00);\n            }\n            return elements;\n        };\nvar fromEntries = \n// native\nhasNativeFromEntries\n    ? Object.fromEntries\n    : // Ponyfill\n        function fromEntries(entries) {\n            var obj = {};\n            for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n                var _a = entries_1[_i], k = _a[0], v = _a[1];\n                obj[k] = v;\n            }\n            return obj;\n        };\nvar codePointAt = hasNativeCodePointAt\n    ? // Native\n        function codePointAt(s, index) {\n            return s.codePointAt(index);\n        }\n    : // IE 11\n        function codePointAt(s, index) {\n            var size = s.length;\n            if (index < 0 || index >= size) {\n                return undefined;\n            }\n            var first = s.charCodeAt(index);\n            var second;\n            return first < 0xd800 ||\n                first > 0xdbff ||\n                index + 1 === size ||\n                (second = s.charCodeAt(index + 1)) < 0xdc00 ||\n                second > 0xdfff\n                ? first\n                : ((first - 0xd800) << 10) + (second - 0xdc00) + 0x10000;\n        };\nvar trimStart = hasTrimStart\n    ? // Native\n        function trimStart(s) {\n            return s.trimStart();\n        }\n    : // Ponyfill\n        function trimStart(s) {\n            return s.replace(SPACE_SEPARATOR_START_REGEX, '');\n        };\nvar trimEnd = hasTrimEnd\n    ? // Native\n        function trimEnd(s) {\n            return s.trimEnd();\n        }\n    : // Ponyfill\n        function trimEnd(s) {\n            return s.replace(SPACE_SEPARATOR_END_REGEX, '');\n        };\n// Prevent minifier to translate new RegExp to literal form that might cause syntax error on IE11.\nfunction RE(s, flag) {\n    return new RegExp(s, flag);\n}\n// #endregion\nvar matchIdentifierAtIndex;\nif (REGEX_SUPPORTS_U_AND_Y) {\n    // Native\n    var IDENTIFIER_PREFIX_RE_1 = RE('([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)', 'yu');\n    matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) {\n        var _a;\n        IDENTIFIER_PREFIX_RE_1.lastIndex = index;\n        var match = IDENTIFIER_PREFIX_RE_1.exec(s);\n        return (_a = match[1]) !== null && _a !== void 0 ? _a : '';\n    };\n}\nelse {\n    // IE11\n    matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) {\n        var match = [];\n        while (true) {\n            var c = codePointAt(s, index);\n            if (c === undefined || _isWhiteSpace(c) || _isPatternSyntax(c)) {\n                break;\n            }\n            match.push(c);\n            index += c >= 0x10000 ? 2 : 1;\n        }\n        return fromCodePoint.apply(void 0, match);\n    };\n}\nvar Parser = /** @class */ (function () {\n    function Parser(message, options) {\n        if (options === void 0) { options = {}; }\n        this.message = message;\n        this.position = { offset: 0, line: 1, column: 1 };\n        this.ignoreTag = !!options.ignoreTag;\n        this.locale = options.locale;\n        this.requiresOtherClause = !!options.requiresOtherClause;\n        this.shouldParseSkeletons = !!options.shouldParseSkeletons;\n    }\n    Parser.prototype.parse = function () {\n        if (this.offset() !== 0) {\n            throw Error('parser can only be used once');\n        }\n        return this.parseMessage(0, '', false);\n    };\n    Parser.prototype.parseMessage = function (nestingLevel, parentArgType, expectingCloseTag) {\n        var elements = [];\n        while (!this.isEOF()) {\n            var char = this.char();\n            if (char === 123 /* `{` */) {\n                var result = this.parseArgument(nestingLevel, expectingCloseTag);\n                if (result.err) {\n                    return result;\n                }\n                elements.push(result.val);\n            }\n            else if (char === 125 /* `}` */ && nestingLevel > 0) {\n                break;\n            }\n            else if (char === 35 /* `#` */ &&\n                (parentArgType === 'plural' || parentArgType === 'selectordinal')) {\n                var position = this.clonePosition();\n                this.bump();\n                elements.push({\n                    type: TYPE.pound,\n                    location: createLocation(position, this.clonePosition()),\n                });\n            }\n            else if (char === 60 /* `<` */ &&\n                !this.ignoreTag &&\n                this.peek() === 47 // char code for '/'\n            ) {\n                if (expectingCloseTag) {\n                    break;\n                }\n                else {\n                    return this.error(ErrorKind.UNMATCHED_CLOSING_TAG, createLocation(this.clonePosition(), this.clonePosition()));\n                }\n            }\n            else if (char === 60 /* `<` */ &&\n                !this.ignoreTag &&\n                _isAlpha(this.peek() || 0)) {\n                var result = this.parseTag(nestingLevel, parentArgType);\n                if (result.err) {\n                    return result;\n                }\n                elements.push(result.val);\n            }\n            else {\n                var result = this.parseLiteral(nestingLevel, parentArgType);\n                if (result.err) {\n                    return result;\n                }\n                elements.push(result.val);\n            }\n        }\n        return { val: elements, err: null };\n    };\n    /**\n     * A tag name must start with an ASCII lower/upper case letter. The grammar is based on the\n     * [custom element name][] except that a dash is NOT always mandatory and uppercase letters\n     * are accepted:\n     *\n     * ```\n     * tag ::= \"<\" tagName (whitespace)* \"/>\" | \"<\" tagName (whitespace)* \">\" message \"</\" tagName (whitespace)* \">\"\n     * tagName ::= [a-z] (PENChar)*\n     * PENChar ::=\n     *     \"-\" | \".\" | [0-9] | \"_\" | [a-z] | [A-Z] | #xB7 | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x37D] |\n     *     [#x37F-#x1FFF] | [#x200C-#x200D] | [#x203F-#x2040] | [#x2070-#x218F] | [#x2C00-#x2FEF] |\n     *     [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\n     * ```\n     *\n     * [custom element name]: https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name\n     * NOTE: We're a bit more lax here since HTML technically does not allow uppercase HTML element but we do\n     * since other tag-based engines like React allow it\n     */\n    Parser.prototype.parseTag = function (nestingLevel, parentArgType) {\n        var startPosition = this.clonePosition();\n        this.bump(); // `<`\n        var tagName = this.parseTagName();\n        this.bumpSpace();\n        if (this.bumpIf('/>')) {\n            // Self closing tag\n            return {\n                val: {\n                    type: TYPE.literal,\n                    value: \"<\".concat(tagName, \"/>\"),\n                    location: createLocation(startPosition, this.clonePosition()),\n                },\n                err: null,\n            };\n        }\n        else if (this.bumpIf('>')) {\n            var childrenResult = this.parseMessage(nestingLevel + 1, parentArgType, true);\n            if (childrenResult.err) {\n                return childrenResult;\n            }\n            var children = childrenResult.val;\n            // Expecting a close tag\n            var endTagStartPosition = this.clonePosition();\n            if (this.bumpIf('</')) {\n                if (this.isEOF() || !_isAlpha(this.char())) {\n                    return this.error(ErrorKind.INVALID_TAG, createLocation(endTagStartPosition, this.clonePosition()));\n                }\n                var closingTagNameStartPosition = this.clonePosition();\n                var closingTagName = this.parseTagName();\n                if (tagName !== closingTagName) {\n                    return this.error(ErrorKind.UNMATCHED_CLOSING_TAG, createLocation(closingTagNameStartPosition, this.clonePosition()));\n                }\n                this.bumpSpace();\n                if (!this.bumpIf('>')) {\n                    return this.error(ErrorKind.INVALID_TAG, createLocation(endTagStartPosition, this.clonePosition()));\n                }\n                return {\n                    val: {\n                        type: TYPE.tag,\n                        value: tagName,\n                        children: children,\n                        location: createLocation(startPosition, this.clonePosition()),\n                    },\n                    err: null,\n                };\n            }\n            else {\n                return this.error(ErrorKind.UNCLOSED_TAG, createLocation(startPosition, this.clonePosition()));\n            }\n        }\n        else {\n            return this.error(ErrorKind.INVALID_TAG, createLocation(startPosition, this.clonePosition()));\n        }\n    };\n    /**\n     * This method assumes that the caller has peeked ahead for the first tag character.\n     */\n    Parser.prototype.parseTagName = function () {\n        var startOffset = this.offset();\n        this.bump(); // the first tag name character\n        while (!this.isEOF() && _isPotentialElementNameChar(this.char())) {\n            this.bump();\n        }\n        return this.message.slice(startOffset, this.offset());\n    };\n    Parser.prototype.parseLiteral = function (nestingLevel, parentArgType) {\n        var start = this.clonePosition();\n        var value = '';\n        while (true) {\n            var parseQuoteResult = this.tryParseQuote(parentArgType);\n            if (parseQuoteResult) {\n                value += parseQuoteResult;\n                continue;\n            }\n            var parseUnquotedResult = this.tryParseUnquoted(nestingLevel, parentArgType);\n            if (parseUnquotedResult) {\n                value += parseUnquotedResult;\n                continue;\n            }\n            var parseLeftAngleResult = this.tryParseLeftAngleBracket();\n            if (parseLeftAngleResult) {\n                value += parseLeftAngleResult;\n                continue;\n            }\n            break;\n        }\n        var location = createLocation(start, this.clonePosition());\n        return {\n            val: { type: TYPE.literal, value: value, location: location },\n            err: null,\n        };\n    };\n    Parser.prototype.tryParseLeftAngleBracket = function () {\n        if (!this.isEOF() &&\n            this.char() === 60 /* `<` */ &&\n            (this.ignoreTag ||\n                // If at the opening tag or closing tag position, bail.\n                !_isAlphaOrSlash(this.peek() || 0))) {\n            this.bump(); // `<`\n            return '<';\n        }\n        return null;\n    };\n    /**\n     * Starting with ICU 4.8, an ASCII apostrophe only starts quoted text if it immediately precedes\n     * a character that requires quoting (that is, \"only where needed\"), and works the same in\n     * nested messages as on the top level of the pattern. The new behavior is otherwise compatible.\n     */\n    Parser.prototype.tryParseQuote = function (parentArgType) {\n        if (this.isEOF() || this.char() !== 39 /* `'` */) {\n            return null;\n        }\n        // Parse escaped char following the apostrophe, or early return if there is no escaped char.\n        // Check if is valid escaped character\n        switch (this.peek()) {\n            case 39 /* `'` */:\n                // double quote, should return as a single quote.\n                this.bump();\n                this.bump();\n                return \"'\";\n            // '{', '<', '>', '}'\n            case 123:\n            case 60:\n            case 62:\n            case 125:\n                break;\n            case 35: // '#'\n                if (parentArgType === 'plural' || parentArgType === 'selectordinal') {\n                    break;\n                }\n                return null;\n            default:\n                return null;\n        }\n        this.bump(); // apostrophe\n        var codePoints = [this.char()]; // escaped char\n        this.bump();\n        // read chars until the optional closing apostrophe is found\n        while (!this.isEOF()) {\n            var ch = this.char();\n            if (ch === 39 /* `'` */) {\n                if (this.peek() === 39 /* `'` */) {\n                    codePoints.push(39);\n                    // Bump one more time because we need to skip 2 characters.\n                    this.bump();\n                }\n                else {\n                    // Optional closing apostrophe.\n                    this.bump();\n                    break;\n                }\n            }\n            else {\n                codePoints.push(ch);\n            }\n            this.bump();\n        }\n        return fromCodePoint.apply(void 0, codePoints);\n    };\n    Parser.prototype.tryParseUnquoted = function (nestingLevel, parentArgType) {\n        if (this.isEOF()) {\n            return null;\n        }\n        var ch = this.char();\n        if (ch === 60 /* `<` */ ||\n            ch === 123 /* `{` */ ||\n            (ch === 35 /* `#` */ &&\n                (parentArgType === 'plural' || parentArgType === 'selectordinal')) ||\n            (ch === 125 /* `}` */ && nestingLevel > 0)) {\n            return null;\n        }\n        else {\n            this.bump();\n            return fromCodePoint(ch);\n        }\n    };\n    Parser.prototype.parseArgument = function (nestingLevel, expectingCloseTag) {\n        var openingBracePosition = this.clonePosition();\n        this.bump(); // `{`\n        this.bumpSpace();\n        if (this.isEOF()) {\n            return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        if (this.char() === 125 /* `}` */) {\n            this.bump();\n            return this.error(ErrorKind.EMPTY_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        // argument name\n        var value = this.parseIdentifierIfPossible().value;\n        if (!value) {\n            return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        this.bumpSpace();\n        if (this.isEOF()) {\n            return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        switch (this.char()) {\n            // Simple argument: `{name}`\n            case 125 /* `}` */: {\n                this.bump(); // `}`\n                return {\n                    val: {\n                        type: TYPE.argument,\n                        // value does not include the opening and closing braces.\n                        value: value,\n                        location: createLocation(openingBracePosition, this.clonePosition()),\n                    },\n                    err: null,\n                };\n            }\n            // Argument with options: `{name, format, ...}`\n            case 44 /* `,` */: {\n                this.bump(); // `,`\n                this.bumpSpace();\n                if (this.isEOF()) {\n                    return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n                }\n                return this.parseArgumentOptions(nestingLevel, expectingCloseTag, value, openingBracePosition);\n            }\n            default:\n                return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n        }\n    };\n    /**\n     * Advance the parser until the end of the identifier, if it is currently on\n     * an identifier character. Return an empty string otherwise.\n     */\n    Parser.prototype.parseIdentifierIfPossible = function () {\n        var startingPosition = this.clonePosition();\n        var startOffset = this.offset();\n        var value = matchIdentifierAtIndex(this.message, startOffset);\n        var endOffset = startOffset + value.length;\n        this.bumpTo(endOffset);\n        var endPosition = this.clonePosition();\n        var location = createLocation(startingPosition, endPosition);\n        return { value: value, location: location };\n    };\n    Parser.prototype.parseArgumentOptions = function (nestingLevel, expectingCloseTag, value, openingBracePosition) {\n        var _a;\n        // Parse this range:\n        // {name, type, style}\n        //        ^---^\n        var typeStartPosition = this.clonePosition();\n        var argType = this.parseIdentifierIfPossible().value;\n        var typeEndPosition = this.clonePosition();\n        switch (argType) {\n            case '':\n                // Expecting a style string number, date, time, plural, selectordinal, or select.\n                return this.error(ErrorKind.EXPECT_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition));\n            case 'number':\n            case 'date':\n            case 'time': {\n                // Parse this range:\n                // {name, number, style}\n                //              ^-------^\n                this.bumpSpace();\n                var styleAndLocation = null;\n                if (this.bumpIf(',')) {\n                    this.bumpSpace();\n                    var styleStartPosition = this.clonePosition();\n                    var result = this.parseSimpleArgStyleIfPossible();\n                    if (result.err) {\n                        return result;\n                    }\n                    var style = trimEnd(result.val);\n                    if (style.length === 0) {\n                        return this.error(ErrorKind.EXPECT_ARGUMENT_STYLE, createLocation(this.clonePosition(), this.clonePosition()));\n                    }\n                    var styleLocation = createLocation(styleStartPosition, this.clonePosition());\n                    styleAndLocation = { style: style, styleLocation: styleLocation };\n                }\n                var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n                if (argCloseResult.err) {\n                    return argCloseResult;\n                }\n                var location_1 = createLocation(openingBracePosition, this.clonePosition());\n                // Extract style or skeleton\n                if (styleAndLocation && startsWith(styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style, '::', 0)) {\n                    // Skeleton starts with `::`.\n                    var skeleton = trimStart(styleAndLocation.style.slice(2));\n                    if (argType === 'number') {\n                        var result = this.parseNumberSkeletonFromString(skeleton, styleAndLocation.styleLocation);\n                        if (result.err) {\n                            return result;\n                        }\n                        return {\n                            val: { type: TYPE.number, value: value, location: location_1, style: result.val },\n                            err: null,\n                        };\n                    }\n                    else {\n                        if (skeleton.length === 0) {\n                            return this.error(ErrorKind.EXPECT_DATE_TIME_SKELETON, location_1);\n                        }\n                        var dateTimePattern = skeleton;\n                        // Get \"best match\" pattern only if locale is passed, if not, let it\n                        // pass as-is where `parseDateTimeSkeleton()` will throw an error\n                        // for unsupported patterns.\n                        if (this.locale) {\n                            dateTimePattern = getBestPattern(skeleton, this.locale);\n                        }\n                        var style = {\n                            type: SKELETON_TYPE.dateTime,\n                            pattern: dateTimePattern,\n                            location: styleAndLocation.styleLocation,\n                            parsedOptions: this.shouldParseSkeletons\n                                ? parseDateTimeSkeleton(dateTimePattern)\n                                : {},\n                        };\n                        var type = argType === 'date' ? TYPE.date : TYPE.time;\n                        return {\n                            val: { type: type, value: value, location: location_1, style: style },\n                            err: null,\n                        };\n                    }\n                }\n                // Regular style or no style.\n                return {\n                    val: {\n                        type: argType === 'number'\n                            ? TYPE.number\n                            : argType === 'date'\n                                ? TYPE.date\n                                : TYPE.time,\n                        value: value,\n                        location: location_1,\n                        style: (_a = styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style) !== null && _a !== void 0 ? _a : null,\n                    },\n                    err: null,\n                };\n            }\n            case 'plural':\n            case 'selectordinal':\n            case 'select': {\n                // Parse this range:\n                // {name, plural, options}\n                //              ^---------^\n                var typeEndPosition_1 = this.clonePosition();\n                this.bumpSpace();\n                if (!this.bumpIf(',')) {\n                    return this.error(ErrorKind.EXPECT_SELECT_ARGUMENT_OPTIONS, createLocation(typeEndPosition_1, __assign({}, typeEndPosition_1)));\n                }\n                this.bumpSpace();\n                // Parse offset:\n                // {name, plural, offset:1, options}\n                //                ^-----^\n                //\n                // or the first option:\n                //\n                // {name, plural, one {...} other {...}}\n                //                ^--^\n                var identifierAndLocation = this.parseIdentifierIfPossible();\n                var pluralOffset = 0;\n                if (argType !== 'select' && identifierAndLocation.value === 'offset') {\n                    if (!this.bumpIf(':')) {\n                        return this.error(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, createLocation(this.clonePosition(), this.clonePosition()));\n                    }\n                    this.bumpSpace();\n                    var result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, ErrorKind.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE);\n                    if (result.err) {\n                        return result;\n                    }\n                    // Parse another identifier for option parsing\n                    this.bumpSpace();\n                    identifierAndLocation = this.parseIdentifierIfPossible();\n                    pluralOffset = result.val;\n                }\n                var optionsResult = this.tryParsePluralOrSelectOptions(nestingLevel, argType, expectingCloseTag, identifierAndLocation);\n                if (optionsResult.err) {\n                    return optionsResult;\n                }\n                var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n                if (argCloseResult.err) {\n                    return argCloseResult;\n                }\n                var location_2 = createLocation(openingBracePosition, this.clonePosition());\n                if (argType === 'select') {\n                    return {\n                        val: {\n                            type: TYPE.select,\n                            value: value,\n                            options: fromEntries(optionsResult.val),\n                            location: location_2,\n                        },\n                        err: null,\n                    };\n                }\n                else {\n                    return {\n                        val: {\n                            type: TYPE.plural,\n                            value: value,\n                            options: fromEntries(optionsResult.val),\n                            offset: pluralOffset,\n                            pluralType: argType === 'plural' ? 'cardinal' : 'ordinal',\n                            location: location_2,\n                        },\n                        err: null,\n                    };\n                }\n            }\n            default:\n                return this.error(ErrorKind.INVALID_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition));\n        }\n    };\n    Parser.prototype.tryParseArgumentClose = function (openingBracePosition) {\n        // Parse: {value, number, ::currency/GBP }\n        //\n        if (this.isEOF() || this.char() !== 125 /* `}` */) {\n            return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        this.bump(); // `}`\n        return { val: true, err: null };\n    };\n    /**\n     * See: https://github.com/unicode-org/icu/blob/af7ed1f6d2298013dc303628438ec4abe1f16479/icu4c/source/common/messagepattern.cpp#L659\n     */\n    Parser.prototype.parseSimpleArgStyleIfPossible = function () {\n        var nestedBraces = 0;\n        var startPosition = this.clonePosition();\n        while (!this.isEOF()) {\n            var ch = this.char();\n            switch (ch) {\n                case 39 /* `'` */: {\n                    // Treat apostrophe as quoting but include it in the style part.\n                    // Find the end of the quoted literal text.\n                    this.bump();\n                    var apostrophePosition = this.clonePosition();\n                    if (!this.bumpUntil(\"'\")) {\n                        return this.error(ErrorKind.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE, createLocation(apostrophePosition, this.clonePosition()));\n                    }\n                    this.bump();\n                    break;\n                }\n                case 123 /* `{` */: {\n                    nestedBraces += 1;\n                    this.bump();\n                    break;\n                }\n                case 125 /* `}` */: {\n                    if (nestedBraces > 0) {\n                        nestedBraces -= 1;\n                    }\n                    else {\n                        return {\n                            val: this.message.slice(startPosition.offset, this.offset()),\n                            err: null,\n                        };\n                    }\n                    break;\n                }\n                default:\n                    this.bump();\n                    break;\n            }\n        }\n        return {\n            val: this.message.slice(startPosition.offset, this.offset()),\n            err: null,\n        };\n    };\n    Parser.prototype.parseNumberSkeletonFromString = function (skeleton, location) {\n        var tokens = [];\n        try {\n            tokens = parseNumberSkeletonFromString(skeleton);\n        }\n        catch (e) {\n            return this.error(ErrorKind.INVALID_NUMBER_SKELETON, location);\n        }\n        return {\n            val: {\n                type: SKELETON_TYPE.number,\n                tokens: tokens,\n                location: location,\n                parsedOptions: this.shouldParseSkeletons\n                    ? parseNumberSkeleton(tokens)\n                    : {},\n            },\n            err: null,\n        };\n    };\n    /**\n     * @param nesting_level The current nesting level of messages.\n     *     This can be positive when parsing message fragment in select or plural argument options.\n     * @param parent_arg_type The parent argument's type.\n     * @param parsed_first_identifier If provided, this is the first identifier-like selector of\n     *     the argument. It is a by-product of a previous parsing attempt.\n     * @param expecting_close_tag If true, this message is directly or indirectly nested inside\n     *     between a pair of opening and closing tags. The nested message will not parse beyond\n     *     the closing tag boundary.\n     */\n    Parser.prototype.tryParsePluralOrSelectOptions = function (nestingLevel, parentArgType, expectCloseTag, parsedFirstIdentifier) {\n        var _a;\n        var hasOtherClause = false;\n        var options = [];\n        var parsedSelectors = new Set();\n        var selector = parsedFirstIdentifier.value, selectorLocation = parsedFirstIdentifier.location;\n        // Parse:\n        // one {one apple}\n        // ^--^\n        while (true) {\n            if (selector.length === 0) {\n                var startPosition = this.clonePosition();\n                if (parentArgType !== 'select' && this.bumpIf('=')) {\n                    // Try parse `={number}` selector\n                    var result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, ErrorKind.INVALID_PLURAL_ARGUMENT_SELECTOR);\n                    if (result.err) {\n                        return result;\n                    }\n                    selectorLocation = createLocation(startPosition, this.clonePosition());\n                    selector = this.message.slice(startPosition.offset, this.offset());\n                }\n                else {\n                    break;\n                }\n            }\n            // Duplicate selector clauses\n            if (parsedSelectors.has(selector)) {\n                return this.error(parentArgType === 'select'\n                    ? ErrorKind.DUPLICATE_SELECT_ARGUMENT_SELECTOR\n                    : ErrorKind.DUPLICATE_PLURAL_ARGUMENT_SELECTOR, selectorLocation);\n            }\n            if (selector === 'other') {\n                hasOtherClause = true;\n            }\n            // Parse:\n            // one {one apple}\n            //     ^----------^\n            this.bumpSpace();\n            var openingBracePosition = this.clonePosition();\n            if (!this.bumpIf('{')) {\n                return this.error(parentArgType === 'select'\n                    ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\n                    : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT, createLocation(this.clonePosition(), this.clonePosition()));\n            }\n            var fragmentResult = this.parseMessage(nestingLevel + 1, parentArgType, expectCloseTag);\n            if (fragmentResult.err) {\n                return fragmentResult;\n            }\n            var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n            if (argCloseResult.err) {\n                return argCloseResult;\n            }\n            options.push([\n                selector,\n                {\n                    value: fragmentResult.val,\n                    location: createLocation(openingBracePosition, this.clonePosition()),\n                },\n            ]);\n            // Keep track of the existing selectors\n            parsedSelectors.add(selector);\n            // Prep next selector clause.\n            this.bumpSpace();\n            (_a = this.parseIdentifierIfPossible(), selector = _a.value, selectorLocation = _a.location);\n        }\n        if (options.length === 0) {\n            return this.error(parentArgType === 'select'\n                ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR\n                : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, createLocation(this.clonePosition(), this.clonePosition()));\n        }\n        if (this.requiresOtherClause && !hasOtherClause) {\n            return this.error(ErrorKind.MISSING_OTHER_CLAUSE, createLocation(this.clonePosition(), this.clonePosition()));\n        }\n        return { val: options, err: null };\n    };\n    Parser.prototype.tryParseDecimalInteger = function (expectNumberError, invalidNumberError) {\n        var sign = 1;\n        var startingPosition = this.clonePosition();\n        if (this.bumpIf('+')) {\n        }\n        else if (this.bumpIf('-')) {\n            sign = -1;\n        }\n        var hasDigits = false;\n        var decimal = 0;\n        while (!this.isEOF()) {\n            var ch = this.char();\n            if (ch >= 48 /* `0` */ && ch <= 57 /* `9` */) {\n                hasDigits = true;\n                decimal = decimal * 10 + (ch - 48);\n                this.bump();\n            }\n            else {\n                break;\n            }\n        }\n        var location = createLocation(startingPosition, this.clonePosition());\n        if (!hasDigits) {\n            return this.error(expectNumberError, location);\n        }\n        decimal *= sign;\n        if (!isSafeInteger(decimal)) {\n            return this.error(invalidNumberError, location);\n        }\n        return { val: decimal, err: null };\n    };\n    Parser.prototype.offset = function () {\n        return this.position.offset;\n    };\n    Parser.prototype.isEOF = function () {\n        return this.offset() === this.message.length;\n    };\n    Parser.prototype.clonePosition = function () {\n        // This is much faster than `Object.assign` or spread.\n        return {\n            offset: this.position.offset,\n            line: this.position.line,\n            column: this.position.column,\n        };\n    };\n    /**\n     * Return the code point at the current position of the parser.\n     * Throws if the index is out of bound.\n     */\n    Parser.prototype.char = function () {\n        var offset = this.position.offset;\n        if (offset >= this.message.length) {\n            throw Error('out of bound');\n        }\n        var code = codePointAt(this.message, offset);\n        if (code === undefined) {\n            throw Error(\"Offset \".concat(offset, \" is at invalid UTF-16 code unit boundary\"));\n        }\n        return code;\n    };\n    Parser.prototype.error = function (kind, location) {\n        return {\n            val: null,\n            err: {\n                kind: kind,\n                message: this.message,\n                location: location,\n            },\n        };\n    };\n    /** Bump the parser to the next UTF-16 code unit. */\n    Parser.prototype.bump = function () {\n        if (this.isEOF()) {\n            return;\n        }\n        var code = this.char();\n        if (code === 10 /* '\\n' */) {\n            this.position.line += 1;\n            this.position.column = 1;\n            this.position.offset += 1;\n        }\n        else {\n            this.position.column += 1;\n            // 0 ~ 0x10000 -> unicode BMP, otherwise skip the surrogate pair.\n            this.position.offset += code < 0x10000 ? 1 : 2;\n        }\n    };\n    /**\n     * If the substring starting at the current position of the parser has\n     * the given prefix, then bump the parser to the character immediately\n     * following the prefix and return true. Otherwise, don't bump the parser\n     * and return false.\n     */\n    Parser.prototype.bumpIf = function (prefix) {\n        if (startsWith(this.message, prefix, this.offset())) {\n            for (var i = 0; i < prefix.length; i++) {\n                this.bump();\n            }\n            return true;\n        }\n        return false;\n    };\n    /**\n     * Bump the parser until the pattern character is found and return `true`.\n     * Otherwise bump to the end of the file and return `false`.\n     */\n    Parser.prototype.bumpUntil = function (pattern) {\n        var currentOffset = this.offset();\n        var index = this.message.indexOf(pattern, currentOffset);\n        if (index >= 0) {\n            this.bumpTo(index);\n            return true;\n        }\n        else {\n            this.bumpTo(this.message.length);\n            return false;\n        }\n    };\n    /**\n     * Bump the parser to the target offset.\n     * If target offset is beyond the end of the input, bump the parser to the end of the input.\n     */\n    Parser.prototype.bumpTo = function (targetOffset) {\n        if (this.offset() > targetOffset) {\n            throw Error(\"targetOffset \".concat(targetOffset, \" must be greater than or equal to the current offset \").concat(this.offset()));\n        }\n        targetOffset = Math.min(targetOffset, this.message.length);\n        while (true) {\n            var offset = this.offset();\n            if (offset === targetOffset) {\n                break;\n            }\n            if (offset > targetOffset) {\n                throw Error(\"targetOffset \".concat(targetOffset, \" is at invalid UTF-16 code unit boundary\"));\n            }\n            this.bump();\n            if (this.isEOF()) {\n                break;\n            }\n        }\n    };\n    /** advance the parser through all whitespace to the next non-whitespace code unit. */\n    Parser.prototype.bumpSpace = function () {\n        while (!this.isEOF() && _isWhiteSpace(this.char())) {\n            this.bump();\n        }\n    };\n    /**\n     * Peek at the *next* Unicode codepoint in the input without advancing the parser.\n     * If the input has been exhausted, then this returns null.\n     */\n    Parser.prototype.peek = function () {\n        if (this.isEOF()) {\n            return null;\n        }\n        var code = this.char();\n        var offset = this.offset();\n        var nextCode = this.message.charCodeAt(offset + (code >= 0x10000 ? 2 : 1));\n        return nextCode !== null && nextCode !== void 0 ? nextCode : null;\n    };\n    return Parser;\n}());\nexport { Parser };\n/**\n * This check if codepoint is alphabet (lower & uppercase)\n * @param codepoint\n * @returns\n */\nfunction _isAlpha(codepoint) {\n    return ((codepoint >= 97 && codepoint <= 122) ||\n        (codepoint >= 65 && codepoint <= 90));\n}\nfunction _isAlphaOrSlash(codepoint) {\n    return _isAlpha(codepoint) || codepoint === 47; /* '/' */\n}\n/** See `parseTag` function docs. */\nfunction _isPotentialElementNameChar(c) {\n    return (c === 45 /* '-' */ ||\n        c === 46 /* '.' */ ||\n        (c >= 48 && c <= 57) /* 0..9 */ ||\n        c === 95 /* '_' */ ||\n        (c >= 97 && c <= 122) /** a..z */ ||\n        (c >= 65 && c <= 90) /* A..Z */ ||\n        c == 0xb7 ||\n        (c >= 0xc0 && c <= 0xd6) ||\n        (c >= 0xd8 && c <= 0xf6) ||\n        (c >= 0xf8 && c <= 0x37d) ||\n        (c >= 0x37f && c <= 0x1fff) ||\n        (c >= 0x200c && c <= 0x200d) ||\n        (c >= 0x203f && c <= 0x2040) ||\n        (c >= 0x2070 && c <= 0x218f) ||\n        (c >= 0x2c00 && c <= 0x2fef) ||\n        (c >= 0x3001 && c <= 0xd7ff) ||\n        (c >= 0xf900 && c <= 0xfdcf) ||\n        (c >= 0xfdf0 && c <= 0xfffd) ||\n        (c >= 0x10000 && c <= 0xeffff));\n}\n/**\n * Code point equivalent of regex `\\p{White_Space}`.\n * From: https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n */\nfunction _isWhiteSpace(c) {\n    return ((c >= 0x0009 && c <= 0x000d) ||\n        c === 0x0020 ||\n        c === 0x0085 ||\n        (c >= 0x200e && c <= 0x200f) ||\n        c === 0x2028 ||\n        c === 0x2029);\n}\n/**\n * Code point equivalent of regex `\\p{Pattern_Syntax}`.\n * See https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n */\nfunction _isPatternSyntax(c) {\n    return ((c >= 0x0021 && c <= 0x0023) ||\n        c === 0x0024 ||\n        (c >= 0x0025 && c <= 0x0027) ||\n        c === 0x0028 ||\n        c === 0x0029 ||\n        c === 0x002a ||\n        c === 0x002b ||\n        c === 0x002c ||\n        c === 0x002d ||\n        (c >= 0x002e && c <= 0x002f) ||\n        (c >= 0x003a && c <= 0x003b) ||\n        (c >= 0x003c && c <= 0x003e) ||\n        (c >= 0x003f && c <= 0x0040) ||\n        c === 0x005b ||\n        c === 0x005c ||\n        c === 0x005d ||\n        c === 0x005e ||\n        c === 0x0060 ||\n        c === 0x007b ||\n        c === 0x007c ||\n        c === 0x007d ||\n        c === 0x007e ||\n        c === 0x00a1 ||\n        (c >= 0x00a2 && c <= 0x00a5) ||\n        c === 0x00a6 ||\n        c === 0x00a7 ||\n        c === 0x00a9 ||\n        c === 0x00ab ||\n        c === 0x00ac ||\n        c === 0x00ae ||\n        c === 0x00b0 ||\n        c === 0x00b1 ||\n        c === 0x00b6 ||\n        c === 0x00bb ||\n        c === 0x00bf ||\n        c === 0x00d7 ||\n        c === 0x00f7 ||\n        (c >= 0x2010 && c <= 0x2015) ||\n        (c >= 0x2016 && c <= 0x2017) ||\n        c === 0x2018 ||\n        c === 0x2019 ||\n        c === 0x201a ||\n        (c >= 0x201b && c <= 0x201c) ||\n        c === 0x201d ||\n        c === 0x201e ||\n        c === 0x201f ||\n        (c >= 0x2020 && c <= 0x2027) ||\n        (c >= 0x2030 && c <= 0x2038) ||\n        c === 0x2039 ||\n        c === 0x203a ||\n        (c >= 0x203b && c <= 0x203e) ||\n        (c >= 0x2041 && c <= 0x2043) ||\n        c === 0x2044 ||\n        c === 0x2045 ||\n        c === 0x2046 ||\n        (c >= 0x2047 && c <= 0x2051) ||\n        c === 0x2052 ||\n        c === 0x2053 ||\n        (c >= 0x2055 && c <= 0x205e) ||\n        (c >= 0x2190 && c <= 0x2194) ||\n        (c >= 0x2195 && c <= 0x2199) ||\n        (c >= 0x219a && c <= 0x219b) ||\n        (c >= 0x219c && c <= 0x219f) ||\n        c === 0x21a0 ||\n        (c >= 0x21a1 && c <= 0x21a2) ||\n        c === 0x21a3 ||\n        (c >= 0x21a4 && c <= 0x21a5) ||\n        c === 0x21a6 ||\n        (c >= 0x21a7 && c <= 0x21ad) ||\n        c === 0x21ae ||\n        (c >= 0x21af && c <= 0x21cd) ||\n        (c >= 0x21ce && c <= 0x21cf) ||\n        (c >= 0x21d0 && c <= 0x21d1) ||\n        c === 0x21d2 ||\n        c === 0x21d3 ||\n        c === 0x21d4 ||\n        (c >= 0x21d5 && c <= 0x21f3) ||\n        (c >= 0x21f4 && c <= 0x22ff) ||\n        (c >= 0x2300 && c <= 0x2307) ||\n        c === 0x2308 ||\n        c === 0x2309 ||\n        c === 0x230a ||\n        c === 0x230b ||\n        (c >= 0x230c && c <= 0x231f) ||\n        (c >= 0x2320 && c <= 0x2321) ||\n        (c >= 0x2322 && c <= 0x2328) ||\n        c === 0x2329 ||\n        c === 0x232a ||\n        (c >= 0x232b && c <= 0x237b) ||\n        c === 0x237c ||\n        (c >= 0x237d && c <= 0x239a) ||\n        (c >= 0x239b && c <= 0x23b3) ||\n        (c >= 0x23b4 && c <= 0x23db) ||\n        (c >= 0x23dc && c <= 0x23e1) ||\n        (c >= 0x23e2 && c <= 0x2426) ||\n        (c >= 0x2427 && c <= 0x243f) ||\n        (c >= 0x2440 && c <= 0x244a) ||\n        (c >= 0x244b && c <= 0x245f) ||\n        (c >= 0x2500 && c <= 0x25b6) ||\n        c === 0x25b7 ||\n        (c >= 0x25b8 && c <= 0x25c0) ||\n        c === 0x25c1 ||\n        (c >= 0x25c2 && c <= 0x25f7) ||\n        (c >= 0x25f8 && c <= 0x25ff) ||\n        (c >= 0x2600 && c <= 0x266e) ||\n        c === 0x266f ||\n        (c >= 0x2670 && c <= 0x2767) ||\n        c === 0x2768 ||\n        c === 0x2769 ||\n        c === 0x276a ||\n        c === 0x276b ||\n        c === 0x276c ||\n        c === 0x276d ||\n        c === 0x276e ||\n        c === 0x276f ||\n        c === 0x2770 ||\n        c === 0x2771 ||\n        c === 0x2772 ||\n        c === 0x2773 ||\n        c === 0x2774 ||\n        c === 0x2775 ||\n        (c >= 0x2794 && c <= 0x27bf) ||\n        (c >= 0x27c0 && c <= 0x27c4) ||\n        c === 0x27c5 ||\n        c === 0x27c6 ||\n        (c >= 0x27c7 && c <= 0x27e5) ||\n        c === 0x27e6 ||\n        c === 0x27e7 ||\n        c === 0x27e8 ||\n        c === 0x27e9 ||\n        c === 0x27ea ||\n        c === 0x27eb ||\n        c === 0x27ec ||\n        c === 0x27ed ||\n        c === 0x27ee ||\n        c === 0x27ef ||\n        (c >= 0x27f0 && c <= 0x27ff) ||\n        (c >= 0x2800 && c <= 0x28ff) ||\n        (c >= 0x2900 && c <= 0x2982) ||\n        c === 0x2983 ||\n        c === 0x2984 ||\n        c === 0x2985 ||\n        c === 0x2986 ||\n        c === 0x2987 ||\n        c === 0x2988 ||\n        c === 0x2989 ||\n        c === 0x298a ||\n        c === 0x298b ||\n        c === 0x298c ||\n        c === 0x298d ||\n        c === 0x298e ||\n        c === 0x298f ||\n        c === 0x2990 ||\n        c === 0x2991 ||\n        c === 0x2992 ||\n        c === 0x2993 ||\n        c === 0x2994 ||\n        c === 0x2995 ||\n        c === 0x2996 ||\n        c === 0x2997 ||\n        c === 0x2998 ||\n        (c >= 0x2999 && c <= 0x29d7) ||\n        c === 0x29d8 ||\n        c === 0x29d9 ||\n        c === 0x29da ||\n        c === 0x29db ||\n        (c >= 0x29dc && c <= 0x29fb) ||\n        c === 0x29fc ||\n        c === 0x29fd ||\n        (c >= 0x29fe && c <= 0x2aff) ||\n        (c >= 0x2b00 && c <= 0x2b2f) ||\n        (c >= 0x2b30 && c <= 0x2b44) ||\n        (c >= 0x2b45 && c <= 0x2b46) ||\n        (c >= 0x2b47 && c <= 0x2b4c) ||\n        (c >= 0x2b4d && c <= 0x2b73) ||\n        (c >= 0x2b74 && c <= 0x2b75) ||\n        (c >= 0x2b76 && c <= 0x2b95) ||\n        c === 0x2b96 ||\n        (c >= 0x2b97 && c <= 0x2bff) ||\n        (c >= 0x2e00 && c <= 0x2e01) ||\n        c === 0x2e02 ||\n        c === 0x2e03 ||\n        c === 0x2e04 ||\n        c === 0x2e05 ||\n        (c >= 0x2e06 && c <= 0x2e08) ||\n        c === 0x2e09 ||\n        c === 0x2e0a ||\n        c === 0x2e0b ||\n        c === 0x2e0c ||\n        c === 0x2e0d ||\n        (c >= 0x2e0e && c <= 0x2e16) ||\n        c === 0x2e17 ||\n        (c >= 0x2e18 && c <= 0x2e19) ||\n        c === 0x2e1a ||\n        c === 0x2e1b ||\n        c === 0x2e1c ||\n        c === 0x2e1d ||\n        (c >= 0x2e1e && c <= 0x2e1f) ||\n        c === 0x2e20 ||\n        c === 0x2e21 ||\n        c === 0x2e22 ||\n        c === 0x2e23 ||\n        c === 0x2e24 ||\n        c === 0x2e25 ||\n        c === 0x2e26 ||\n        c === 0x2e27 ||\n        c === 0x2e28 ||\n        c === 0x2e29 ||\n        (c >= 0x2e2a && c <= 0x2e2e) ||\n        c === 0x2e2f ||\n        (c >= 0x2e30 && c <= 0x2e39) ||\n        (c >= 0x2e3a && c <= 0x2e3b) ||\n        (c >= 0x2e3c && c <= 0x2e3f) ||\n        c === 0x2e40 ||\n        c === 0x2e41 ||\n        c === 0x2e42 ||\n        (c >= 0x2e43 && c <= 0x2e4f) ||\n        (c >= 0x2e50 && c <= 0x2e51) ||\n        c === 0x2e52 ||\n        (c >= 0x2e53 && c <= 0x2e7f) ||\n        (c >= 0x3001 && c <= 0x3003) ||\n        c === 0x3008 ||\n        c === 0x3009 ||\n        c === 0x300a ||\n        c === 0x300b ||\n        c === 0x300c ||\n        c === 0x300d ||\n        c === 0x300e ||\n        c === 0x300f ||\n        c === 0x3010 ||\n        c === 0x3011 ||\n        (c >= 0x3012 && c <= 0x3013) ||\n        c === 0x3014 ||\n        c === 0x3015 ||\n        c === 0x3016 ||\n        c === 0x3017 ||\n        c === 0x3018 ||\n        c === 0x3019 ||\n        c === 0x301a ||\n        c === 0x301b ||\n        c === 0x301c ||\n        c === 0x301d ||\n        (c >= 0x301e && c <= 0x301f) ||\n        c === 0x3020 ||\n        c === 0x3030 ||\n        c === 0xfd3e ||\n        c === 0xfd3f ||\n        (c >= 0xfe45 && c <= 0xfe46));\n}\n","import { timeData } from './time-data.generated';\n/**\n * Returns the best matching date time pattern if a date time skeleton\n * pattern is provided with a locale. Follows the Unicode specification:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#table-mapping-requested-time-skeletons-to-patterns\n * @param skeleton date time skeleton pattern that possibly includes j, J or C\n * @param locale\n */\nexport function getBestPattern(skeleton, locale) {\n    var skeletonCopy = '';\n    for (var patternPos = 0; patternPos < skeleton.length; patternPos++) {\n        var patternChar = skeleton.charAt(patternPos);\n        if (patternChar === 'j') {\n            var extraLength = 0;\n            while (patternPos + 1 < skeleton.length &&\n                skeleton.charAt(patternPos + 1) === patternChar) {\n                extraLength++;\n                patternPos++;\n            }\n            var hourLen = 1 + (extraLength & 1);\n            var dayPeriodLen = extraLength < 2 ? 1 : 3 + (extraLength >> 1);\n            var dayPeriodChar = 'a';\n            var hourChar = getDefaultHourSymbolFromLocale(locale);\n            if (hourChar == 'H' || hourChar == 'k') {\n                dayPeriodLen = 0;\n            }\n            while (dayPeriodLen-- > 0) {\n                skeletonCopy += dayPeriodChar;\n            }\n            while (hourLen-- > 0) {\n                skeletonCopy = hourChar + skeletonCopy;\n            }\n        }\n        else if (patternChar === 'J') {\n            skeletonCopy += 'H';\n        }\n        else {\n            skeletonCopy += patternChar;\n        }\n    }\n    return skeletonCopy;\n}\n/**\n * Maps the [hour cycle type](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle)\n * of the given `locale` to the corresponding time pattern.\n * @param locale\n */\nfunction getDefaultHourSymbolFromLocale(locale) {\n    var hourCycle = locale.hourCycle;\n    if (hourCycle === undefined &&\n        // @ts-ignore hourCycle(s) is not identified yet\n        locale.hourCycles &&\n        // @ts-ignore\n        locale.hourCycles.length) {\n        // @ts-ignore\n        hourCycle = locale.hourCycles[0];\n    }\n    if (hourCycle) {\n        switch (hourCycle) {\n            case 'h24':\n                return 'k';\n            case 'h23':\n                return 'H';\n            case 'h12':\n                return 'h';\n            case 'h11':\n                return 'K';\n            default:\n                throw new Error('Invalid hourCycle');\n        }\n    }\n    // TODO: Once hourCycle is fully supported remove the following with data generation\n    var languageTag = locale.language;\n    var regionTag;\n    if (languageTag !== 'root') {\n        regionTag = locale.maximize().region;\n    }\n    var hourCycles = timeData[regionTag || ''] ||\n        timeData[languageTag || ''] ||\n        timeData[\"\".concat(languageTag, \"-001\")] ||\n        timeData['001'];\n    return hourCycles[0];\n}\n","import { __assign } from \"tslib\";\nimport { ErrorKind } from './error';\nimport { Parser } from './parser';\nimport { isDateElement, isDateTimeSkeleton, isNumberElement, isNumberSkeleton, isPluralElement, isSelectElement, isTagElement, isTimeElement, } from './types';\nfunction pruneLocation(els) {\n    els.forEach(function (el) {\n        delete el.location;\n        if (isSelectElement(el) || isPluralElement(el)) {\n            for (var k in el.options) {\n                delete el.options[k].location;\n                pruneLocation(el.options[k].value);\n            }\n        }\n        else if (isNumberElement(el) && isNumberSkeleton(el.style)) {\n            delete el.style.location;\n        }\n        else if ((isDateElement(el) || isTimeElement(el)) &&\n            isDateTimeSkeleton(el.style)) {\n            delete el.style.location;\n        }\n        else if (isTagElement(el)) {\n            pruneLocation(el.children);\n        }\n    });\n}\nexport function parse(message, opts) {\n    if (opts === void 0) { opts = {}; }\n    opts = __assign({ shouldParseSkeletons: true, requiresOtherClause: true }, opts);\n    var result = new Parser(message, opts).parse();\n    if (result.err) {\n        var error = SyntaxError(ErrorKind[result.err.kind]);\n        // @ts-expect-error Assign to error object\n        error.location = result.err.location;\n        // @ts-expect-error Assign to error object\n        error.originalMessage = result.err.message;\n        throw error;\n    }\n    if (!(opts === null || opts === void 0 ? void 0 : opts.captureLocation)) {\n        pruneLocation(result.val);\n    }\n    return result.val;\n}\nexport * from './types';\n// only for testing\nexport var _Parser = Parser;\n","//\n// Main\n//\nexport function memoize(fn, options) {\n    var cache = options && options.cache ? options.cache : cacheDefault;\n    var serializer = options && options.serializer ? options.serializer : serializerDefault;\n    var strategy = options && options.strategy ? options.strategy : strategyDefault;\n    return strategy(fn, {\n        cache: cache,\n        serializer: serializer,\n    });\n}\n//\n// Strategy\n//\nfunction isPrimitive(value) {\n    return (value == null || typeof value === 'number' || typeof value === 'boolean'); // || typeof value === \"string\" 'unsafe' primitive for our needs\n}\nfunction monadic(fn, cache, serializer, arg) {\n    var cacheKey = isPrimitive(arg) ? arg : serializer(arg);\n    var computedValue = cache.get(cacheKey);\n    if (typeof computedValue === 'undefined') {\n        computedValue = fn.call(this, arg);\n        cache.set(cacheKey, computedValue);\n    }\n    return computedValue;\n}\nfunction variadic(fn, cache, serializer) {\n    var args = Array.prototype.slice.call(arguments, 3);\n    var cacheKey = serializer(args);\n    var computedValue = cache.get(cacheKey);\n    if (typeof computedValue === 'undefined') {\n        computedValue = fn.apply(this, args);\n        cache.set(cacheKey, computedValue);\n    }\n    return computedValue;\n}\nfunction assemble(fn, context, strategy, cache, serialize) {\n    return strategy.bind(context, fn, cache, serialize);\n}\nfunction strategyDefault(fn, options) {\n    var strategy = fn.length === 1 ? monadic : variadic;\n    return assemble(fn, this, strategy, options.cache.create(), options.serializer);\n}\nfunction strategyVariadic(fn, options) {\n    return assemble(fn, this, variadic, options.cache.create(), options.serializer);\n}\nfunction strategyMonadic(fn, options) {\n    return assemble(fn, this, monadic, options.cache.create(), options.serializer);\n}\n//\n// Serializer\n//\nvar serializerDefault = function () {\n    return JSON.stringify(arguments);\n};\n//\n// Cache\n//\nfunction ObjectWithoutPrototypeCache() {\n    this.cache = Object.create(null);\n}\nObjectWithoutPrototypeCache.prototype.get = function (key) {\n    return this.cache[key];\n};\nObjectWithoutPrototypeCache.prototype.set = function (key, value) {\n    this.cache[key] = value;\n};\nvar cacheDefault = {\n    create: function create() {\n        // @ts-ignore\n        return new ObjectWithoutPrototypeCache();\n    },\n};\nexport var strategies = {\n    variadic: strategyVariadic,\n    monadic: strategyMonadic,\n};\n","import { __extends } from \"tslib\";\nexport var ErrorCode;\n(function (ErrorCode) {\n    // When we have a placeholder but no value to format\n    ErrorCode[\"MISSING_VALUE\"] = \"MISSING_VALUE\";\n    // When value supplied is invalid\n    ErrorCode[\"INVALID_VALUE\"] = \"INVALID_VALUE\";\n    // When we need specific Intl API but it's not available\n    ErrorCode[\"MISSING_INTL_API\"] = \"MISSING_INTL_API\";\n})(ErrorCode || (ErrorCode = {}));\nvar FormatError = /** @class */ (function (_super) {\n    __extends(FormatError, _super);\n    function FormatError(msg, code, originalMessage) {\n        var _this = _super.call(this, msg) || this;\n        _this.code = code;\n        _this.originalMessage = originalMessage;\n        return _this;\n    }\n    FormatError.prototype.toString = function () {\n        return \"[formatjs Error: \".concat(this.code, \"] \").concat(this.message);\n    };\n    return FormatError;\n}(Error));\nexport { FormatError };\nvar InvalidValueError = /** @class */ (function (_super) {\n    __extends(InvalidValueError, _super);\n    function InvalidValueError(variableId, value, options, originalMessage) {\n        return _super.call(this, \"Invalid values for \\\"\".concat(variableId, \"\\\": \\\"\").concat(value, \"\\\". Options are \\\"\").concat(Object.keys(options).join('\", \"'), \"\\\"\"), ErrorCode.INVALID_VALUE, originalMessage) || this;\n    }\n    return InvalidValueError;\n}(FormatError));\nexport { InvalidValueError };\nvar InvalidValueTypeError = /** @class */ (function (_super) {\n    __extends(InvalidValueTypeError, _super);\n    function InvalidValueTypeError(value, type, originalMessage) {\n        return _super.call(this, \"Value for \\\"\".concat(value, \"\\\" must be of type \").concat(type), ErrorCode.INVALID_VALUE, originalMessage) || this;\n    }\n    return InvalidValueTypeError;\n}(FormatError));\nexport { InvalidValueTypeError };\nvar MissingValueError = /** @class */ (function (_super) {\n    __extends(MissingValueError, _super);\n    function MissingValueError(variableId, originalMessage) {\n        return _super.call(this, \"The intl string context variable \\\"\".concat(variableId, \"\\\" was not provided to the string \\\"\").concat(originalMessage, \"\\\"\"), ErrorCode.MISSING_VALUE, originalMessage) || this;\n    }\n    return MissingValueError;\n}(FormatError));\nexport { MissingValueError };\n","import { isArgumentElement, isDateElement, isDateTimeSkeleton, isLiteralElement, isNumberElement, isNumberSkeleton, isPluralElement, isPoundElement, isSelectElement, isTimeElement, isTagElement, } from '@formatjs/icu-messageformat-parser';\nimport { MissingValueError, InvalidValueError, ErrorCode, FormatError, InvalidValueTypeError, } from './error';\nexport var PART_TYPE;\n(function (PART_TYPE) {\n    PART_TYPE[PART_TYPE[\"literal\"] = 0] = \"literal\";\n    PART_TYPE[PART_TYPE[\"object\"] = 1] = \"object\";\n})(PART_TYPE || (PART_TYPE = {}));\nfunction mergeLiteral(parts) {\n    if (parts.length < 2) {\n        return parts;\n    }\n    return parts.reduce(function (all, part) {\n        var lastPart = all[all.length - 1];\n        if (!lastPart ||\n            lastPart.type !== PART_TYPE.literal ||\n            part.type !== PART_TYPE.literal) {\n            all.push(part);\n        }\n        else {\n            lastPart.value += part.value;\n        }\n        return all;\n    }, []);\n}\nexport function isFormatXMLElementFn(el) {\n    return typeof el === 'function';\n}\n// TODO(skeleton): add skeleton support\nexport function formatToParts(els, locales, formatters, formats, values, currentPluralValue, \n// For debugging\noriginalMessage) {\n    // Hot path for straight simple msg translations\n    if (els.length === 1 && isLiteralElement(els[0])) {\n        return [\n            {\n                type: PART_TYPE.literal,\n                value: els[0].value,\n            },\n        ];\n    }\n    var result = [];\n    for (var _i = 0, els_1 = els; _i < els_1.length; _i++) {\n        var el = els_1[_i];\n        // Exit early for string parts.\n        if (isLiteralElement(el)) {\n            result.push({\n                type: PART_TYPE.literal,\n                value: el.value,\n            });\n            continue;\n        }\n        // TODO: should this part be literal type?\n        // Replace `#` in plural rules with the actual numeric value.\n        if (isPoundElement(el)) {\n            if (typeof currentPluralValue === 'number') {\n                result.push({\n                    type: PART_TYPE.literal,\n                    value: formatters.getNumberFormat(locales).format(currentPluralValue),\n                });\n            }\n            continue;\n        }\n        var varName = el.value;\n        // Enforce that all required values are provided by the caller.\n        if (!(values && varName in values)) {\n            throw new MissingValueError(varName, originalMessage);\n        }\n        var value = values[varName];\n        if (isArgumentElement(el)) {\n            if (!value || typeof value === 'string' || typeof value === 'number') {\n                value =\n                    typeof value === 'string' || typeof value === 'number'\n                        ? String(value)\n                        : '';\n            }\n            result.push({\n                type: typeof value === 'string' ? PART_TYPE.literal : PART_TYPE.object,\n                value: value,\n            });\n            continue;\n        }\n        // Recursively format plural and select parts' option — which can be a\n        // nested pattern structure. The choosing of the option to use is\n        // abstracted-by and delegated-to the part helper object.\n        if (isDateElement(el)) {\n            var style = typeof el.style === 'string'\n                ? formats.date[el.style]\n                : isDateTimeSkeleton(el.style)\n                    ? el.style.parsedOptions\n                    : undefined;\n            result.push({\n                type: PART_TYPE.literal,\n                value: formatters\n                    .getDateTimeFormat(locales, style)\n                    .format(value),\n            });\n            continue;\n        }\n        if (isTimeElement(el)) {\n            var style = typeof el.style === 'string'\n                ? formats.time[el.style]\n                : isDateTimeSkeleton(el.style)\n                    ? el.style.parsedOptions\n                    : formats.time.medium;\n            result.push({\n                type: PART_TYPE.literal,\n                value: formatters\n                    .getDateTimeFormat(locales, style)\n                    .format(value),\n            });\n            continue;\n        }\n        if (isNumberElement(el)) {\n            var style = typeof el.style === 'string'\n                ? formats.number[el.style]\n                : isNumberSkeleton(el.style)\n                    ? el.style.parsedOptions\n                    : undefined;\n            if (style && style.scale) {\n                value =\n                    value *\n                        (style.scale || 1);\n            }\n            result.push({\n                type: PART_TYPE.literal,\n                value: formatters\n                    .getNumberFormat(locales, style)\n                    .format(value),\n            });\n            continue;\n        }\n        if (isTagElement(el)) {\n            var children = el.children, value_1 = el.value;\n            var formatFn = values[value_1];\n            if (!isFormatXMLElementFn(formatFn)) {\n                throw new InvalidValueTypeError(value_1, 'function', originalMessage);\n            }\n            var parts = formatToParts(children, locales, formatters, formats, values, currentPluralValue);\n            var chunks = formatFn(parts.map(function (p) { return p.value; }));\n            if (!Array.isArray(chunks)) {\n                chunks = [chunks];\n            }\n            result.push.apply(result, chunks.map(function (c) {\n                return {\n                    type: typeof c === 'string' ? PART_TYPE.literal : PART_TYPE.object,\n                    value: c,\n                };\n            }));\n        }\n        if (isSelectElement(el)) {\n            var opt = el.options[value] || el.options.other;\n            if (!opt) {\n                throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage);\n            }\n            result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values));\n            continue;\n        }\n        if (isPluralElement(el)) {\n            var opt = el.options[\"=\".concat(value)];\n            if (!opt) {\n                if (!Intl.PluralRules) {\n                    throw new FormatError(\"Intl.PluralRules is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-pluralrules\\\"\\n\", ErrorCode.MISSING_INTL_API, originalMessage);\n                }\n                var rule = formatters\n                    .getPluralRules(locales, { type: el.pluralType })\n                    .select(value - (el.offset || 0));\n                opt = el.options[rule] || el.options.other;\n            }\n            if (!opt) {\n                throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage);\n            }\n            result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values, value - (el.offset || 0)));\n            continue;\n        }\n    }\n    return mergeLiteral(result);\n}\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\nimport { __assign, __rest, __spreadArray } from \"tslib\";\nimport { parse, } from '@formatjs/icu-messageformat-parser';\nimport { memoize, strategies } from '@formatjs/fast-memoize';\nimport { formatToParts, PART_TYPE, } from './formatters';\n// -- MessageFormat --------------------------------------------------------\nfunction mergeConfig(c1, c2) {\n    if (!c2) {\n        return c1;\n    }\n    return __assign(__assign(__assign({}, (c1 || {})), (c2 || {})), Object.keys(c1).reduce(function (all, k) {\n        all[k] = __assign(__assign({}, c1[k]), (c2[k] || {}));\n        return all;\n    }, {}));\n}\nfunction mergeConfigs(defaultConfig, configs) {\n    if (!configs) {\n        return defaultConfig;\n    }\n    return Object.keys(defaultConfig).reduce(function (all, k) {\n        all[k] = mergeConfig(defaultConfig[k], configs[k]);\n        return all;\n    }, __assign({}, defaultConfig));\n}\nfunction createFastMemoizeCache(store) {\n    return {\n        create: function () {\n            return {\n                get: function (key) {\n                    return store[key];\n                },\n                set: function (key, value) {\n                    store[key] = value;\n                },\n            };\n        },\n    };\n}\nfunction createDefaultFormatters(cache) {\n    if (cache === void 0) { cache = {\n        number: {},\n        dateTime: {},\n        pluralRules: {},\n    }; }\n    return {\n        getNumberFormat: memoize(function () {\n            var _a;\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new ((_a = Intl.NumberFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n        }, {\n            cache: createFastMemoizeCache(cache.number),\n            strategy: strategies.variadic,\n        }),\n        getDateTimeFormat: memoize(function () {\n            var _a;\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new ((_a = Intl.DateTimeFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n        }, {\n            cache: createFastMemoizeCache(cache.dateTime),\n            strategy: strategies.variadic,\n        }),\n        getPluralRules: memoize(function () {\n            var _a;\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new ((_a = Intl.PluralRules).bind.apply(_a, __spreadArray([void 0], args, false)))();\n        }, {\n            cache: createFastMemoizeCache(cache.pluralRules),\n            strategy: strategies.variadic,\n        }),\n    };\n}\nvar IntlMessageFormat = /** @class */ (function () {\n    function IntlMessageFormat(message, locales, overrideFormats, opts) {\n        var _this = this;\n        if (locales === void 0) { locales = IntlMessageFormat.defaultLocale; }\n        this.formatterCache = {\n            number: {},\n            dateTime: {},\n            pluralRules: {},\n        };\n        this.format = function (values) {\n            var parts = _this.formatToParts(values);\n            // Hot path for straight simple msg translations\n            if (parts.length === 1) {\n                return parts[0].value;\n            }\n            var result = parts.reduce(function (all, part) {\n                if (!all.length ||\n                    part.type !== PART_TYPE.literal ||\n                    typeof all[all.length - 1] !== 'string') {\n                    all.push(part.value);\n                }\n                else {\n                    all[all.length - 1] += part.value;\n                }\n                return all;\n            }, []);\n            if (result.length <= 1) {\n                return result[0] || '';\n            }\n            return result;\n        };\n        this.formatToParts = function (values) {\n            return formatToParts(_this.ast, _this.locales, _this.formatters, _this.formats, values, undefined, _this.message);\n        };\n        this.resolvedOptions = function () {\n            var _a;\n            return ({\n                locale: ((_a = _this.resolvedLocale) === null || _a === void 0 ? void 0 : _a.toString()) ||\n                    Intl.NumberFormat.supportedLocalesOf(_this.locales)[0],\n            });\n        };\n        this.getAst = function () { return _this.ast; };\n        // Defined first because it's used to build the format pattern.\n        this.locales = locales;\n        this.resolvedLocale = IntlMessageFormat.resolveLocale(locales);\n        if (typeof message === 'string') {\n            this.message = message;\n            if (!IntlMessageFormat.__parse) {\n                throw new TypeError('IntlMessageFormat.__parse must be set to process `message` of type `string`');\n            }\n            var _a = opts || {}, formatters = _a.formatters, parseOpts = __rest(_a, [\"formatters\"]);\n            // Parse string messages into an AST.\n            this.ast = IntlMessageFormat.__parse(message, __assign(__assign({}, parseOpts), { locale: this.resolvedLocale }));\n        }\n        else {\n            this.ast = message;\n        }\n        if (!Array.isArray(this.ast)) {\n            throw new TypeError('A message must be provided as a String or AST.');\n        }\n        // Creates a new object with the specified `formats` merged with the default\n        // formats.\n        this.formats = mergeConfigs(IntlMessageFormat.formats, overrideFormats);\n        this.formatters =\n            (opts && opts.formatters) || createDefaultFormatters(this.formatterCache);\n    }\n    Object.defineProperty(IntlMessageFormat, \"defaultLocale\", {\n        get: function () {\n            if (!IntlMessageFormat.memoizedDefaultLocale) {\n                IntlMessageFormat.memoizedDefaultLocale =\n                    new Intl.NumberFormat().resolvedOptions().locale;\n            }\n            return IntlMessageFormat.memoizedDefaultLocale;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    IntlMessageFormat.memoizedDefaultLocale = null;\n    IntlMessageFormat.resolveLocale = function (locales) {\n        if (typeof Intl.Locale === 'undefined') {\n            return;\n        }\n        var supportedLocales = Intl.NumberFormat.supportedLocalesOf(locales);\n        if (supportedLocales.length > 0) {\n            return new Intl.Locale(supportedLocales[0]);\n        }\n        return new Intl.Locale(typeof locales === 'string' ? locales : locales[0]);\n    };\n    IntlMessageFormat.__parse = parse;\n    // Default format options used as the prototype of the `formats` provided to the\n    // constructor. These are used when constructing the internal Intl.NumberFormat\n    // and Intl.DateTimeFormat instances.\n    IntlMessageFormat.formats = {\n        number: {\n            integer: {\n                maximumFractionDigits: 0,\n            },\n            currency: {\n                style: 'currency',\n            },\n            percent: {\n                style: 'percent',\n            },\n        },\n        date: {\n            short: {\n                month: 'numeric',\n                day: 'numeric',\n                year: '2-digit',\n            },\n            medium: {\n                month: 'short',\n                day: 'numeric',\n                year: 'numeric',\n            },\n            long: {\n                month: 'long',\n                day: 'numeric',\n                year: 'numeric',\n            },\n            full: {\n                weekday: 'long',\n                month: 'long',\n                day: 'numeric',\n                year: 'numeric',\n            },\n        },\n        time: {\n            short: {\n                hour: 'numeric',\n                minute: 'numeric',\n            },\n            medium: {\n                hour: 'numeric',\n                minute: 'numeric',\n                second: 'numeric',\n            },\n            long: {\n                hour: 'numeric',\n                minute: 'numeric',\n                second: 'numeric',\n                timeZoneName: 'short',\n            },\n            full: {\n                hour: 'numeric',\n                minute: 'numeric',\n                second: 'numeric',\n                timeZoneName: 'short',\n            },\n        },\n    };\n    return IntlMessageFormat;\n}());\nexport { IntlMessageFormat };\n","import { __extends } from \"tslib\";\nexport var IntlErrorCode;\n(function (IntlErrorCode) {\n    IntlErrorCode[\"FORMAT_ERROR\"] = \"FORMAT_ERROR\";\n    IntlErrorCode[\"UNSUPPORTED_FORMATTER\"] = \"UNSUPPORTED_FORMATTER\";\n    IntlErrorCode[\"INVALID_CONFIG\"] = \"INVALID_CONFIG\";\n    IntlErrorCode[\"MISSING_DATA\"] = \"MISSING_DATA\";\n    IntlErrorCode[\"MISSING_TRANSLATION\"] = \"MISSING_TRANSLATION\";\n})(IntlErrorCode || (IntlErrorCode = {}));\nvar IntlError = /** @class */ (function (_super) {\n    __extends(IntlError, _super);\n    function IntlError(code, message, exception) {\n        var _this = this;\n        var err = exception\n            ? exception instanceof Error\n                ? exception\n                : new Error(String(exception))\n            : undefined;\n        _this = _super.call(this, \"[@formatjs/intl Error \".concat(code, \"] \").concat(message, \"\\n\").concat(err ? \"\\n\".concat(err.message, \"\\n\").concat(err.stack) : '')) || this;\n        _this.code = code;\n        // @ts-ignore just so we don't need to declare dep on @types/node\n        if (typeof Error.captureStackTrace === 'function') {\n            // @ts-ignore just so we don't need to declare dep on @types/node\n            Error.captureStackTrace(_this, IntlError);\n        }\n        return _this;\n    }\n    return IntlError;\n}(Error));\nexport { IntlError };\nvar UnsupportedFormatterError = /** @class */ (function (_super) {\n    __extends(UnsupportedFormatterError, _super);\n    function UnsupportedFormatterError(message, exception) {\n        return _super.call(this, IntlErrorCode.UNSUPPORTED_FORMATTER, message, exception) || this;\n    }\n    return UnsupportedFormatterError;\n}(IntlError));\nexport { UnsupportedFormatterError };\nvar InvalidConfigError = /** @class */ (function (_super) {\n    __extends(InvalidConfigError, _super);\n    function InvalidConfigError(message, exception) {\n        return _super.call(this, IntlErrorCode.INVALID_CONFIG, message, exception) || this;\n    }\n    return InvalidConfigError;\n}(IntlError));\nexport { InvalidConfigError };\nvar MissingDataError = /** @class */ (function (_super) {\n    __extends(MissingDataError, _super);\n    function MissingDataError(message, exception) {\n        return _super.call(this, IntlErrorCode.MISSING_DATA, message, exception) || this;\n    }\n    return MissingDataError;\n}(IntlError));\nexport { MissingDataError };\nvar IntlFormatError = /** @class */ (function (_super) {\n    __extends(IntlFormatError, _super);\n    function IntlFormatError(message, locale, exception) {\n        var _this = _super.call(this, IntlErrorCode.FORMAT_ERROR, \"\".concat(message, \"\\nLocale: \").concat(locale, \"\\n\"), exception) || this;\n        _this.locale = locale;\n        return _this;\n    }\n    return IntlFormatError;\n}(IntlError));\nexport { IntlFormatError };\nvar MessageFormatError = /** @class */ (function (_super) {\n    __extends(MessageFormatError, _super);\n    function MessageFormatError(message, locale, descriptor, exception) {\n        var _this = _super.call(this, \"\".concat(message, \"\\nMessageID: \").concat(descriptor === null || descriptor === void 0 ? void 0 : descriptor.id, \"\\nDefault Message: \").concat(descriptor === null || descriptor === void 0 ? void 0 : descriptor.defaultMessage, \"\\nDescription: \").concat(descriptor === null || descriptor === void 0 ? void 0 : descriptor.description, \"\\n\"), locale, exception) || this;\n        _this.descriptor = descriptor;\n        _this.locale = locale;\n        return _this;\n    }\n    return MessageFormatError;\n}(IntlFormatError));\nexport { MessageFormatError };\nvar MissingTranslationError = /** @class */ (function (_super) {\n    __extends(MissingTranslationError, _super);\n    function MissingTranslationError(descriptor, locale) {\n        var _this = _super.call(this, IntlErrorCode.MISSING_TRANSLATION, \"Missing message: \\\"\".concat(descriptor.id, \"\\\" for locale \\\"\").concat(locale, \"\\\", using \").concat(descriptor.defaultMessage\n            ? \"default message (\".concat(typeof descriptor.defaultMessage === 'string'\n                ? descriptor.defaultMessage\n                : descriptor.defaultMessage\n                    .map(function (e) { var _a; return (_a = e.value) !== null && _a !== void 0 ? _a : JSON.stringify(e); })\n                    .join(), \")\")\n            : 'id', \" as fallback.\")) || this;\n        _this.descriptor = descriptor;\n        return _this;\n    }\n    return MissingTranslationError;\n}(IntlError));\nexport { MissingTranslationError };\n","import { __assign, __spreadArray } from \"tslib\";\nimport { IntlMessageFormat } from 'intl-messageformat';\nimport { memoize, strategies } from '@formatjs/fast-memoize';\nimport { UnsupportedFormatterError } from './error';\nexport function filterProps(props, allowlist, defaults) {\n    if (defaults === void 0) { defaults = {}; }\n    return allowlist.reduce(function (filtered, name) {\n        if (name in props) {\n            filtered[name] = props[name];\n        }\n        else if (name in defaults) {\n            filtered[name] = defaults[name];\n        }\n        return filtered;\n    }, {});\n}\nvar defaultErrorHandler = function (error) {\n    // @ts-ignore just so we don't need to declare dep on @types/node\n    if (process.env.NODE_ENV !== 'production') {\n        console.error(error);\n    }\n};\nvar defaultWarnHandler = function (warning) {\n    // @ts-ignore just so we don't need to declare dep on @types/node\n    if (process.env.NODE_ENV !== 'production') {\n        console.warn(warning);\n    }\n};\nexport var DEFAULT_INTL_CONFIG = {\n    formats: {},\n    messages: {},\n    timeZone: undefined,\n    defaultLocale: 'en',\n    defaultFormats: {},\n    fallbackOnEmptyString: true,\n    onError: defaultErrorHandler,\n    onWarn: defaultWarnHandler,\n};\nexport function createIntlCache() {\n    return {\n        dateTime: {},\n        number: {},\n        message: {},\n        relativeTime: {},\n        pluralRules: {},\n        list: {},\n        displayNames: {},\n    };\n}\nfunction createFastMemoizeCache(store) {\n    return {\n        create: function () {\n            return {\n                get: function (key) {\n                    return store[key];\n                },\n                set: function (key, value) {\n                    store[key] = value;\n                },\n            };\n        },\n    };\n}\n/**\n * Create intl formatters and populate cache\n * @param cache explicit cache to prevent leaking memory\n */\nexport function createFormatters(cache) {\n    if (cache === void 0) { cache = createIntlCache(); }\n    var RelativeTimeFormat = Intl.RelativeTimeFormat;\n    var ListFormat = Intl.ListFormat;\n    var DisplayNames = Intl.DisplayNames;\n    var getDateTimeFormat = memoize(function () {\n        var _a;\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return new ((_a = Intl.DateTimeFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n    }, {\n        cache: createFastMemoizeCache(cache.dateTime),\n        strategy: strategies.variadic,\n    });\n    var getNumberFormat = memoize(function () {\n        var _a;\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return new ((_a = Intl.NumberFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n    }, {\n        cache: createFastMemoizeCache(cache.number),\n        strategy: strategies.variadic,\n    });\n    var getPluralRules = memoize(function () {\n        var _a;\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return new ((_a = Intl.PluralRules).bind.apply(_a, __spreadArray([void 0], args, false)))();\n    }, {\n        cache: createFastMemoizeCache(cache.pluralRules),\n        strategy: strategies.variadic,\n    });\n    return {\n        getDateTimeFormat: getDateTimeFormat,\n        getNumberFormat: getNumberFormat,\n        getMessageFormat: memoize(function (message, locales, overrideFormats, opts) {\n            return new IntlMessageFormat(message, locales, overrideFormats, __assign({ formatters: {\n                    getNumberFormat: getNumberFormat,\n                    getDateTimeFormat: getDateTimeFormat,\n                    getPluralRules: getPluralRules,\n                } }, (opts || {})));\n        }, {\n            cache: createFastMemoizeCache(cache.message),\n            strategy: strategies.variadic,\n        }),\n        getRelativeTimeFormat: memoize(function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new (RelativeTimeFormat.bind.apply(RelativeTimeFormat, __spreadArray([void 0], args, false)))();\n        }, {\n            cache: createFastMemoizeCache(cache.relativeTime),\n            strategy: strategies.variadic,\n        }),\n        getPluralRules: getPluralRules,\n        getListFormat: memoize(function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new (ListFormat.bind.apply(ListFormat, __spreadArray([void 0], args, false)))();\n        }, {\n            cache: createFastMemoizeCache(cache.list),\n            strategy: strategies.variadic,\n        }),\n        getDisplayNames: memoize(function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new (DisplayNames.bind.apply(DisplayNames, __spreadArray([void 0], args, false)))();\n        }, {\n            cache: createFastMemoizeCache(cache.displayNames),\n            strategy: strategies.variadic,\n        }),\n    };\n}\nexport function getNamedFormat(formats, type, name, onError) {\n    var formatType = formats && formats[type];\n    var format;\n    if (formatType) {\n        format = formatType[name];\n    }\n    if (format) {\n        return format;\n    }\n    onError(new UnsupportedFormatterError(\"No \".concat(type, \" format named: \").concat(name)));\n}\n","import { IntlFormatError } from './error';\nimport { filterProps, getNamedFormat } from './utils';\nvar NUMBER_FORMAT_OPTIONS = [\n    'style',\n    'currency',\n    'unit',\n    'unitDisplay',\n    'useGrouping',\n    'minimumIntegerDigits',\n    'minimumFractionDigits',\n    'maximumFractionDigits',\n    'minimumSignificantDigits',\n    'maximumSignificantDigits',\n    // ES2020 NumberFormat\n    'compactDisplay',\n    'currencyDisplay',\n    'currencySign',\n    'notation',\n    'signDisplay',\n    'unit',\n    'unitDisplay',\n    'numberingSystem',\n    // ES2023 NumberFormat\n    'trailingZeroDisplay',\n    'roundingPriority',\n    'roundingIncrement',\n    'roundingMode',\n];\nexport function getFormatter(_a, getNumberFormat, options) {\n    var locale = _a.locale, formats = _a.formats, onError = _a.onError;\n    if (options === void 0) { options = {}; }\n    var format = options.format;\n    var defaults = ((format &&\n        getNamedFormat(formats, 'number', format, onError)) ||\n        {});\n    var filteredOptions = filterProps(options, NUMBER_FORMAT_OPTIONS, defaults);\n    return getNumberFormat(locale, filteredOptions);\n}\nexport function formatNumber(config, getNumberFormat, value, options) {\n    if (options === void 0) { options = {}; }\n    try {\n        return getFormatter(config, getNumberFormat, options).format(value);\n    }\n    catch (e) {\n        config.onError(new IntlFormatError('Error formatting number.', config.locale, e));\n    }\n    return String(value);\n}\nexport function formatNumberToParts(config, getNumberFormat, value, options) {\n    if (options === void 0) { options = {}; }\n    try {\n        return getFormatter(config, getNumberFormat, options).formatToParts(value);\n    }\n    catch (e) {\n        config.onError(new IntlFormatError('Error formatting number.', config.locale, e));\n    }\n    return [];\n}\n","import { getNamedFormat, filterProps } from './utils';\nimport { FormatError, ErrorCode } from 'intl-messageformat';\nimport { IntlFormatError } from './error';\nvar RELATIVE_TIME_FORMAT_OPTIONS = ['numeric', 'style'];\nfunction getFormatter(_a, getRelativeTimeFormat, options) {\n    var locale = _a.locale, formats = _a.formats, onError = _a.onError;\n    if (options === void 0) { options = {}; }\n    var format = options.format;\n    var defaults = (!!format && getNamedFormat(formats, 'relative', format, onError)) || {};\n    var filteredOptions = filterProps(options, RELATIVE_TIME_FORMAT_OPTIONS, defaults);\n    return getRelativeTimeFormat(locale, filteredOptions);\n}\nexport function formatRelativeTime(config, getRelativeTimeFormat, value, unit, options) {\n    if (options === void 0) { options = {}; }\n    if (!unit) {\n        unit = 'second';\n    }\n    var RelativeTimeFormat = Intl.RelativeTimeFormat;\n    if (!RelativeTimeFormat) {\n        config.onError(new FormatError(\"Intl.RelativeTimeFormat is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-relativetimeformat\\\"\\n\", ErrorCode.MISSING_INTL_API));\n    }\n    try {\n        return getFormatter(config, getRelativeTimeFormat, options).format(value, unit);\n    }\n    catch (e) {\n        config.onError(new IntlFormatError('Error formatting relative time.', config.locale, e));\n    }\n    return String(value);\n}\n","import { __assign } from \"tslib\";\nimport { filterProps, getNamedFormat } from './utils';\nimport { IntlFormatError } from './error';\nvar DATE_TIME_FORMAT_OPTIONS = [\n    'formatMatcher',\n    'timeZone',\n    'hour12',\n    'weekday',\n    'era',\n    'year',\n    'month',\n    'day',\n    'hour',\n    'minute',\n    'second',\n    'timeZoneName',\n    'hourCycle',\n    'dateStyle',\n    'timeStyle',\n    'calendar',\n    // 'dayPeriod',\n    'numberingSystem',\n    'fractionalSecondDigits',\n];\nexport function getFormatter(_a, type, getDateTimeFormat, options) {\n    var locale = _a.locale, formats = _a.formats, onError = _a.onError, timeZone = _a.timeZone;\n    if (options === void 0) { options = {}; }\n    var format = options.format;\n    var defaults = __assign(__assign({}, (timeZone && { timeZone: timeZone })), (format && getNamedFormat(formats, type, format, onError)));\n    var filteredOptions = filterProps(options, DATE_TIME_FORMAT_OPTIONS, defaults);\n    if (type === 'time' &&\n        !filteredOptions.hour &&\n        !filteredOptions.minute &&\n        !filteredOptions.second &&\n        !filteredOptions.timeStyle &&\n        !filteredOptions.dateStyle) {\n        // Add default formatting options if hour, minute, or second isn't defined.\n        filteredOptions = __assign(__assign({}, filteredOptions), { hour: 'numeric', minute: 'numeric' });\n    }\n    return getDateTimeFormat(locale, filteredOptions);\n}\nexport function formatDate(config, getDateTimeFormat) {\n    var _a = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n        _a[_i - 2] = arguments[_i];\n    }\n    var value = _a[0], _b = _a[1], options = _b === void 0 ? {} : _b;\n    var date = typeof value === 'string' ? new Date(value || 0) : value;\n    try {\n        return getFormatter(config, 'date', getDateTimeFormat, options).format(date);\n    }\n    catch (e) {\n        config.onError(new IntlFormatError('Error formatting date.', config.locale, e));\n    }\n    return String(date);\n}\nexport function formatTime(config, getDateTimeFormat) {\n    var _a = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n        _a[_i - 2] = arguments[_i];\n    }\n    var value = _a[0], _b = _a[1], options = _b === void 0 ? {} : _b;\n    var date = typeof value === 'string' ? new Date(value || 0) : value;\n    try {\n        return getFormatter(config, 'time', getDateTimeFormat, options).format(date);\n    }\n    catch (e) {\n        config.onError(new IntlFormatError('Error formatting time.', config.locale, e));\n    }\n    return String(date);\n}\nexport function formatDateTimeRange(config, getDateTimeFormat) {\n    var _a = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n        _a[_i - 2] = arguments[_i];\n    }\n    var from = _a[0], to = _a[1], _b = _a[2], options = _b === void 0 ? {} : _b;\n    var timeZone = config.timeZone, locale = config.locale, onError = config.onError;\n    var filteredOptions = filterProps(options, DATE_TIME_FORMAT_OPTIONS, timeZone ? { timeZone: timeZone } : {});\n    try {\n        return getDateTimeFormat(locale, filteredOptions).formatRange(from, to);\n    }\n    catch (e) {\n        onError(new IntlFormatError('Error formatting date time range.', config.locale, e));\n    }\n    return String(from);\n}\nexport function formatDateToParts(config, getDateTimeFormat) {\n    var _a = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n        _a[_i - 2] = arguments[_i];\n    }\n    var value = _a[0], _b = _a[1], options = _b === void 0 ? {} : _b;\n    var date = typeof value === 'string' ? new Date(value || 0) : value;\n    try {\n        return getFormatter(config, 'date', getDateTimeFormat, options).formatToParts(date); // TODO: remove this when https://github.com/microsoft/TypeScript/pull/50402 is merged\n    }\n    catch (e) {\n        config.onError(new IntlFormatError('Error formatting date.', config.locale, e));\n    }\n    return [];\n}\nexport function formatTimeToParts(config, getDateTimeFormat) {\n    var _a = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n        _a[_i - 2] = arguments[_i];\n    }\n    var value = _a[0], _b = _a[1], options = _b === void 0 ? {} : _b;\n    var date = typeof value === 'string' ? new Date(value || 0) : value;\n    try {\n        return getFormatter(config, 'time', getDateTimeFormat, options).formatToParts(date); // TODO: remove this when https://github.com/microsoft/TypeScript/pull/50402 is merged\n    }\n    catch (e) {\n        config.onError(new IntlFormatError('Error formatting time.', config.locale, e));\n    }\n    return [];\n}\n","import { filterProps } from './utils';\nimport { IntlFormatError } from './error';\nimport { ErrorCode, FormatError } from 'intl-messageformat';\nvar PLURAL_FORMAT_OPTIONS = ['type'];\nexport function formatPlural(_a, getPluralRules, value, options) {\n    var locale = _a.locale, onError = _a.onError;\n    if (options === void 0) { options = {}; }\n    if (!Intl.PluralRules) {\n        onError(new FormatError(\"Intl.PluralRules is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-pluralrules\\\"\\n\", ErrorCode.MISSING_INTL_API));\n    }\n    var filteredOptions = filterProps(options, PLURAL_FORMAT_OPTIONS);\n    try {\n        return getPluralRules(locale, filteredOptions).select(value);\n    }\n    catch (e) {\n        onError(new IntlFormatError('Error formatting plural.', locale, e));\n    }\n    return 'other';\n}\n","import { __assign } from \"tslib\";\nimport { invariant } from '@formatjs/ecma402-abstract';\nimport { IntlMessageFormat, } from 'intl-messageformat';\nimport { MissingTranslationError, MessageFormatError } from './error';\nimport { TYPE } from '@formatjs/icu-messageformat-parser';\nfunction setTimeZoneInOptions(opts, timeZone) {\n    return Object.keys(opts).reduce(function (all, k) {\n        all[k] = __assign({ timeZone: timeZone }, opts[k]);\n        return all;\n    }, {});\n}\nfunction deepMergeOptions(opts1, opts2) {\n    var keys = Object.keys(__assign(__assign({}, opts1), opts2));\n    return keys.reduce(function (all, k) {\n        all[k] = __assign(__assign({}, (opts1[k] || {})), (opts2[k] || {}));\n        return all;\n    }, {});\n}\nfunction deepMergeFormatsAndSetTimeZone(f1, timeZone) {\n    if (!timeZone) {\n        return f1;\n    }\n    var mfFormats = IntlMessageFormat.formats;\n    return __assign(__assign(__assign({}, mfFormats), f1), { date: deepMergeOptions(setTimeZoneInOptions(mfFormats.date, timeZone), setTimeZoneInOptions(f1.date || {}, timeZone)), time: deepMergeOptions(setTimeZoneInOptions(mfFormats.time, timeZone), setTimeZoneInOptions(f1.time || {}, timeZone)) });\n}\nexport var formatMessage = function (_a, state, messageDescriptor, values, opts) {\n    var locale = _a.locale, formats = _a.formats, messages = _a.messages, defaultLocale = _a.defaultLocale, defaultFormats = _a.defaultFormats, fallbackOnEmptyString = _a.fallbackOnEmptyString, onError = _a.onError, timeZone = _a.timeZone, defaultRichTextElements = _a.defaultRichTextElements;\n    if (messageDescriptor === void 0) { messageDescriptor = { id: '' }; }\n    var msgId = messageDescriptor.id, defaultMessage = messageDescriptor.defaultMessage;\n    // `id` is a required field of a Message Descriptor.\n    invariant(!!msgId, \"[@formatjs/intl] An `id` must be provided to format a message. You can either:\\n1. Configure your build toolchain with [babel-plugin-formatjs](https://formatjs.io/docs/tooling/babel-plugin)\\nor [@formatjs/ts-transformer](https://formatjs.io/docs/tooling/ts-transformer) OR\\n2. Configure your `eslint` config to include [eslint-plugin-formatjs](https://formatjs.io/docs/tooling/linter#enforce-id)\\nto autofix this issue\");\n    var id = String(msgId);\n    var message = \n    // In case messages is Object.create(null)\n    // e.g import('foo.json') from webpack)\n    // See https://github.com/formatjs/formatjs/issues/1914\n    messages &&\n        Object.prototype.hasOwnProperty.call(messages, id) &&\n        messages[id];\n    // IMPORTANT: Hot path if `message` is AST with a single literal node\n    if (Array.isArray(message) &&\n        message.length === 1 &&\n        message[0].type === TYPE.literal) {\n        return message[0].value;\n    }\n    // IMPORTANT: Hot path straight lookup for performance\n    if (!values &&\n        message &&\n        typeof message === 'string' &&\n        !defaultRichTextElements) {\n        return message.replace(/'\\{(.*?)\\}'/gi, \"{$1}\");\n    }\n    values = __assign(__assign({}, defaultRichTextElements), (values || {}));\n    formats = deepMergeFormatsAndSetTimeZone(formats, timeZone);\n    defaultFormats = deepMergeFormatsAndSetTimeZone(defaultFormats, timeZone);\n    if (!message) {\n        if (fallbackOnEmptyString === false && message === '') {\n            return message;\n        }\n        if (!defaultMessage ||\n            (locale && locale.toLowerCase() !== defaultLocale.toLowerCase())) {\n            // This prevents warnings from littering the console in development\n            // when no `messages` are passed into the <IntlProvider> for the\n            // default locale.\n            onError(new MissingTranslationError(messageDescriptor, locale));\n        }\n        if (defaultMessage) {\n            try {\n                var formatter = state.getMessageFormat(defaultMessage, defaultLocale, defaultFormats, opts);\n                return formatter.format(values);\n            }\n            catch (e) {\n                onError(new MessageFormatError(\"Error formatting default message for: \\\"\".concat(id, \"\\\", rendering default message verbatim\"), locale, messageDescriptor, e));\n                return typeof defaultMessage === 'string' ? defaultMessage : id;\n            }\n        }\n        return id;\n    }\n    // We have the translated message\n    try {\n        var formatter = state.getMessageFormat(message, locale, formats, __assign({ formatters: state }, (opts || {})));\n        return formatter.format(values);\n    }\n    catch (e) {\n        onError(new MessageFormatError(\"Error formatting message: \\\"\".concat(id, \"\\\", using \").concat(defaultMessage ? 'default message' : 'id', \" as fallback.\"), locale, messageDescriptor, e));\n    }\n    if (defaultMessage) {\n        try {\n            var formatter = state.getMessageFormat(defaultMessage, defaultLocale, defaultFormats, opts);\n            return formatter.format(values);\n        }\n        catch (e) {\n            onError(new MessageFormatError(\"Error formatting the default message for: \\\"\".concat(id, \"\\\", rendering message verbatim\"), locale, messageDescriptor, e));\n        }\n    }\n    if (typeof message === 'string') {\n        return message;\n    }\n    if (typeof defaultMessage === 'string') {\n        return defaultMessage;\n    }\n    return id;\n};\n","/**\n * Cannot do Math.log(x) / Math.log(10) bc if IEEE floating point issue\n * @param x number\n */\nexport function getMagnitude(x) {\n    // Cannot count string length via Number.toString because it may use scientific notation\n    // for very small or very large numbers.\n    return Math.floor(Math.log(x) * Math.LOG10E);\n}\nexport function repeat(s, times) {\n    if (typeof s.repeat === 'function') {\n        return s.repeat(times);\n    }\n    var arr = new Array(times);\n    for (var i = 0; i < arr.length; i++) {\n        arr[i] = s;\n    }\n    return arr.join('');\n}\nexport function setInternalSlot(map, pl, field, value) {\n    if (!map.get(pl)) {\n        map.set(pl, Object.create(null));\n    }\n    var slots = map.get(pl);\n    slots[field] = value;\n}\nexport function setMultiInternalSlots(map, pl, props) {\n    for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\n        var k = _a[_i];\n        setInternalSlot(map, pl, k, props[k]);\n    }\n}\nexport function getInternalSlot(map, pl, field) {\n    return getMultiInternalSlots(map, pl, field)[field];\n}\nexport function getMultiInternalSlots(map, pl) {\n    var fields = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n        fields[_i - 2] = arguments[_i];\n    }\n    var slots = map.get(pl);\n    if (!slots) {\n        throw new TypeError(\"\".concat(pl, \" InternalSlot has not been initialized\"));\n    }\n    return fields.reduce(function (all, f) {\n        all[f] = slots[f];\n        return all;\n    }, Object.create(null));\n}\nexport function isLiteralPart(patternPart) {\n    return patternPart.type === 'literal';\n}\n/*\n  17 ECMAScript Standard Built-in Objects:\n    Every built-in Function object, including constructors, that is not\n    identified as an anonymous function has a name property whose value\n    is a String.\n\n    Unless otherwise specified, the name property of a built-in Function\n    object, if it exists, has the attributes { [[Writable]]: false,\n    [[Enumerable]]: false, [[Configurable]]: true }.\n*/\nexport function defineProperty(target, name, _a) {\n    var value = _a.value;\n    Object.defineProperty(target, name, {\n        configurable: true,\n        enumerable: false,\n        writable: true,\n        value: value,\n    });\n}\n/**\n * 7.3.5 CreateDataProperty\n * @param target\n * @param name\n * @param value\n */\nexport function createDataProperty(target, name, value) {\n    Object.defineProperty(target, name, {\n        configurable: true,\n        enumerable: true,\n        writable: true,\n        value: value,\n    });\n}\nexport var UNICODE_EXTENSION_SEQUENCE_REGEX = /-u(?:-[0-9a-z]{2,8})+/gi;\nexport function invariant(condition, message, Err) {\n    if (Err === void 0) { Err = Error; }\n    if (!condition) {\n        throw new Err(message);\n    }\n}\n","import { __assign } from \"tslib\";\nimport { filterProps } from './utils';\nimport { FormatError, ErrorCode } from 'intl-messageformat';\nimport { IntlFormatError } from './error';\nvar LIST_FORMAT_OPTIONS = [\n    'type',\n    'style',\n];\nvar now = Date.now();\nfunction generateToken(i) {\n    return \"\".concat(now, \"_\").concat(i, \"_\").concat(now);\n}\nexport function formatList(opts, getListFormat, values, options) {\n    if (options === void 0) { options = {}; }\n    var results = formatListToParts(opts, getListFormat, values, options).reduce(function (all, el) {\n        var val = el.value;\n        if (typeof val !== 'string') {\n            all.push(val);\n        }\n        else if (typeof all[all.length - 1] === 'string') {\n            all[all.length - 1] += val;\n        }\n        else {\n            all.push(val);\n        }\n        return all;\n    }, []);\n    return results.length === 1 ? results[0] : results.length === 0 ? '' : results;\n}\nexport function formatListToParts(_a, getListFormat, values, options) {\n    var locale = _a.locale, onError = _a.onError;\n    if (options === void 0) { options = {}; }\n    var ListFormat = Intl.ListFormat;\n    if (!ListFormat) {\n        onError(new FormatError(\"Intl.ListFormat is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-listformat\\\"\\n\", ErrorCode.MISSING_INTL_API));\n    }\n    var filteredOptions = filterProps(options, LIST_FORMAT_OPTIONS);\n    try {\n        var richValues_1 = {};\n        var serializedValues = values.map(function (v, i) {\n            if (typeof v === 'object') {\n                var id = generateToken(i);\n                richValues_1[id] = v;\n                return id;\n            }\n            return String(v);\n        });\n        return getListFormat(locale, filteredOptions)\n            .formatToParts(serializedValues)\n            .map(function (part) {\n            return part.type === 'literal'\n                ? part\n                : __assign(__assign({}, part), { value: richValues_1[part.value] || part.value });\n        });\n    }\n    catch (e) {\n        onError(new IntlFormatError('Error formatting list.', locale, e));\n    }\n    // @ts-ignore\n    return values;\n}\n","import { filterProps } from './utils';\nimport { FormatError, ErrorCode } from 'intl-messageformat';\nimport { IntlFormatError } from './error';\nvar DISPLAY_NAMES_OPTONS = [\n    'style',\n    'type',\n    'fallback',\n    'languageDisplay',\n];\nexport function formatDisplayName(_a, getDisplayNames, value, options) {\n    var locale = _a.locale, onError = _a.onError;\n    var DisplayNames = Intl.DisplayNames;\n    if (!DisplayNames) {\n        onError(new FormatError(\"Intl.DisplayNames is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-displaynames\\\"\\n\", ErrorCode.MISSING_INTL_API));\n    }\n    var filteredOptions = filterProps(options, DISPLAY_NAMES_OPTONS);\n    try {\n        return getDisplayNames(locale, filteredOptions).of(value);\n    }\n    catch (e) {\n        onError(new IntlFormatError('Error formatting display name.', locale, e));\n    }\n}\n","import { __assign } from \"tslib\";\nimport { createFormatters, DEFAULT_INTL_CONFIG } from './utils';\nimport { InvalidConfigError, MissingDataError } from './error';\nimport { formatNumber, formatNumberToParts } from './number';\nimport { formatRelativeTime } from './relativeTime';\nimport { formatDate, formatDateToParts, formatTime, formatTimeToParts, formatDateTimeRange, } from './dateTime';\nimport { formatPlural } from './plural';\nimport { formatMessage } from './message';\nimport { formatList, formatListToParts } from './list';\nimport { formatDisplayName } from './displayName';\nfunction messagesContainString(messages) {\n    var firstMessage = messages ? messages[Object.keys(messages)[0]] : undefined;\n    return typeof firstMessage === 'string';\n}\nfunction verifyConfigMessages(config) {\n    if (config.onWarn &&\n        config.defaultRichTextElements &&\n        messagesContainString(config.messages || {})) {\n        config.onWarn(\"[@formatjs/intl] \\\"defaultRichTextElements\\\" was specified but \\\"message\\\" was not pre-compiled. \\nPlease consider using \\\"@formatjs/cli\\\" to pre-compile your messages for performance.\\nFor more details see https://formatjs.io/docs/getting-started/message-distribution\");\n    }\n}\n/**\n * Create intl object\n * @param config intl config\n * @param cache cache for formatter instances to prevent memory leak\n */\nexport function createIntl(config, cache) {\n    var formatters = createFormatters(cache);\n    var resolvedConfig = __assign(__assign({}, DEFAULT_INTL_CONFIG), config);\n    var locale = resolvedConfig.locale, defaultLocale = resolvedConfig.defaultLocale, onError = resolvedConfig.onError;\n    if (!locale) {\n        if (onError) {\n            onError(new InvalidConfigError(\"\\\"locale\\\" was not configured, using \\\"\".concat(defaultLocale, \"\\\" as fallback. See https://formatjs.io/docs/react-intl/api#intlshape for more details\")));\n        }\n        // Since there's no registered locale data for `locale`, this will\n        // fallback to the `defaultLocale` to make sure things can render.\n        // The `messages` are overridden to the `defaultProps` empty object\n        // to maintain referential equality across re-renders. It's assumed\n        // each <FormattedMessage> contains a `defaultMessage` prop.\n        resolvedConfig.locale = resolvedConfig.defaultLocale || 'en';\n    }\n    else if (!Intl.NumberFormat.supportedLocalesOf(locale).length && onError) {\n        onError(new MissingDataError(\"Missing locale data for locale: \\\"\".concat(locale, \"\\\" in Intl.NumberFormat. Using default locale: \\\"\").concat(defaultLocale, \"\\\" as fallback. See https://formatjs.io/docs/react-intl#runtime-requirements for more details\")));\n    }\n    else if (!Intl.DateTimeFormat.supportedLocalesOf(locale).length &&\n        onError) {\n        onError(new MissingDataError(\"Missing locale data for locale: \\\"\".concat(locale, \"\\\" in Intl.DateTimeFormat. Using default locale: \\\"\").concat(defaultLocale, \"\\\" as fallback. See https://formatjs.io/docs/react-intl#runtime-requirements for more details\")));\n    }\n    verifyConfigMessages(resolvedConfig);\n    return __assign(__assign({}, resolvedConfig), { formatters: formatters, formatNumber: formatNumber.bind(null, resolvedConfig, formatters.getNumberFormat), formatNumberToParts: formatNumberToParts.bind(null, resolvedConfig, formatters.getNumberFormat), formatRelativeTime: formatRelativeTime.bind(null, resolvedConfig, formatters.getRelativeTimeFormat), formatDate: formatDate.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatDateToParts: formatDateToParts.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatTime: formatTime.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatDateTimeRange: formatDateTimeRange.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatTimeToParts: formatTimeToParts.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatPlural: formatPlural.bind(null, resolvedConfig, formatters.getPluralRules), \n        // @ts-expect-error TODO: will get to this later\n        formatMessage: formatMessage.bind(null, resolvedConfig, formatters), \n        // @ts-expect-error TODO: will get to this later\n        $t: formatMessage.bind(null, resolvedConfig, formatters), formatList: formatList.bind(null, resolvedConfig, formatters.getListFormat), formatListToParts: formatListToParts.bind(null, resolvedConfig, formatters.getListFormat), formatDisplayName: formatDisplayName.bind(null, resolvedConfig, formatters.getDisplayNames) });\n}\n","import { createIntl, createIntlCache, IntlErrorCode } from '@formatjs/intl';\nexport { createIntl, createIntlCache };\nexport function onFormatjsIntlError(error) {\n  switch (error.code) {\n    case IntlErrorCode.MISSING_TRANSLATION:\n      {\n        // Do nothing\n        break;\n      }\n    default:\n      {\n        throw error;\n      }\n  }\n}","export default [[\"en-us\", {\n  \"controls\": {\n    \"future\": {\n      \"placeholder\": \"Placeholder for future development\",\n      \"q\": \"Q\"\n    },\n    \"schematic-table\": {\n      \"model\": {\n        \"photodiode\": {\n          \"bias\": \"bias\",\n          \"cd\": \"cd\",\n          \"circuitName\": \"circuitName\",\n          \"ip\": \"ip\",\n          \"rsh\": \"rsh\",\n          \"vBias\": \"vBias\",\n          \"vr\": \"vr\"\n        },\n        \"stage1\": {\n          \"bw\": \"bw\",\n          \"cf\": \"cf\",\n          \"cin\": \"cin\",\n          \"opamp\": {\n            \"partNumber\": \"opAmp\"\n          },\n          \"q\": \"q\",\n          \"rf\": \"rf\",\n          \"rin\": \"rin\",\n          \"title\": \"Stage 1\"\n        },\n        \"stage2\": {\n          \"bw\": \"bw\",\n          \"cfilter\": \"cfilter\",\n          \"opamp\": {\n            \"partNumber\": \"opAmp\"\n          },\n          \"rf\": \"rf\",\n          \"rfilter\": \"rfilter\",\n          \"rg\": \"rg\",\n          \"title\": \"Stage 2\"\n        }\n      },\n      \"title\": \"Photodiode\"\n    }\n  },\n  \"current-calculation\": {\n    \"active-area\": \"Active Area:\",\n    \"cancel\": \"Cancel\",\n    \"equals\": \" = \",\n    \"instruction\": \"Enter either the peak light intensity or the peak photodiode current:\",\n    \"multiply\": \" X \",\n    \"peak-current\": \"Peak Photodiode Current:\",\n    \"peak-light-intensity\": \"Peak Light Intensity:\",\n    \"sensitivity\": \"Sensitivity:\",\n    \"title\": \"Peak Photodiode Current Calculation\",\n    \"use-this-peak\": \"Use this Peak Current\"\n  },\n  \"dialogs\": {\n    \"download\": {\n      \"error-message\": \"<p>Unable to get design files. This error may occur for the following reasons:</p><p>1) Broken connection to the server.</p><p>2) Services are down.</p>\",\n      \"error-title\": \"Download\"\n    },\n    \"feedback\": {\n      \"email\": \"EMail: \",\n      \"feedback\": \"Your Feedback\",\n      \"feedback-dialog-ng-message\": \"Failed to send user feedback. This may be due to a poor connection to the server. Please try again.\",\n      \"feedback-dialog-ok-message\": \"Your feedback has been sent.\",\n      \"give-feedback\": \"Tell us\",\n      \"invitation\": \"Please let us know your opinion of this tool, good and bad.\",\n      \"name\": \"Name: \",\n      \"optional\": \"(Optional)\",\n      \"title\": \"Give us your feedback!\"\n    },\n    \"load\": {\n      \"invalid-file\": \"Invalid design file. Please verify the contents of the design file you are trying to load.\",\n      \"invalid-parts\": \"Unable to load design. The following {numParts, plural, =1 {part in this design file is} other {parts in this design file are}} no longer supported by this application: {parts}\",\n      \"no-opamps\": \"OpAmp data is unavailable. Unable to load design. Try to refresh your browser. If the problem persists, please use Photodiode's feedback button in the upper right to report the issue.\",\n      \"title\": \"Load Design\"\n    },\n    \"samples\": {\n      \"title\": \"Order Samples\"\n    },\n    \"save\": {\n      \"error-message\": \"Cannot save design. Please check if the data you entered is correct before saving.\",\n      \"error-title\": \"Save Design\"\n    },\n    \"share\": {\n      \"share-dialog-ng-message\": \"Unable to share design. This is likely due to a server connection error. Please try again.\",\n      \"share-dialog-ok-message\": \"Design has been shared\",\n      \"title\": \"Email My Design\"\n    },\n    \"system\": {\n      \"application-busy\": \"Working...\",\n      \"connecting-to\": \"Connecting to {tool}...\",\n      \"download-create-bom\": \"Creating BOM File...\",\n      \"download-create-data\": \"Creating Data Files...\",\n      \"download-create-design\": \"Creating Design File...\",\n      \"download-create-eval-board\": \"Creating Eval Board File...\",\n      \"download-create-graph\": \"Creating Graph Data...\",\n      \"download-create-pdf\": \"Creating PDF File...\",\n      \"download-create-spice\": \"Creating SPICE Files...\",\n      \"download-downloading\": \"Downloading...\",\n      \"download-requesting\": \"Requesting...\",\n      \"error-config-data\": \"Configuration data is unavailable. Unable to proceed as Photodiode Specifications cannot be validated properly. Try to refresh your browser. If the problem persists, please use Photodiode's feedback button in the upper right to report the issue.\",\n      \"error-opamp-data\": \"OpAmp data is unavailable. Photodiode is unable to proceed. Save your design and try to refresh your browser. If the problem persists, please use Photodiode's feedback button in the upper right to report the issue.\",\n      \"error-pst-data\": \"Data map is temporarily unavailable, and hence the OpAmp table cannot be displayed. Save your design and try to refresh your browser. If the problem persists, please use Photodiode's feedback button in the upper right to report the issue.\",\n      \"error-sensor-data\": \"Sensor data is temporarily unavailable, and hence the Sensor table cannot be displayed. Save your design and try to refresh your browser. If the problem persists, please use Photodiode's feedback button in the upper right to report the issue.\",\n      \"loading-opamp-data\": \"Loading OpAmp data...\",\n      \"sending-filter\": \"Sending filter to {tool}...\",\n      \"title\": \"Application Message\"\n    }\n  },\n  \"download\": {\n    \"data-files\": {\n      \"frequency-response\": {\n        \"frequency\": \"Frequency\",\n        \"magnitude\": \"Magnitude\"\n      },\n      \"noise-gain\": {\n        \"caps\": \"(Cin + Cf) / Cf\",\n        \"frequency\": \"Frequency\",\n        \"noise-gain\": \"Noise Gain\",\n        \"opamp-gain\": \"Op Amp Gain\",\n        \"zero\": \"(Cin || Cf) (Rin || Rf) <br/> Zero\"\n      },\n      \"pulse-response\": {\n        \"pulse-response\": \"Pulse Response\",\n        \"time-axis\": \"Time Axis\"\n      },\n      \"spectral-noise\": {\n        \"frequency\": \"Frequency\",\n        \"opi\": \"Op Amp I\",\n        \"opi2\": \"Op Amp 2 I\",\n        \"opv\": \"Op Amp V\",\n        \"opv2\": \"Op Amp 2 V\",\n        \"rf\": \"Rf\",\n        \"rfilter\": \"Rfilter\",\n        \"rin\": \"Rin\",\n        \"total\": \"Total\"\n      }\n    },\n    \"pdf-content\": {\n      \"pdf-data-fields\": {\n        \"capacitance\": \"Capacitance (Cd)\",\n        \"one-stage\": \"One Stage\",\n        \"peak-current\": \"Peak Current (Ip)\",\n        \"peak-voltage\": \"Peak Voltage (Vp)\",\n        \"photodiode-bias\": \"Photodiode Bias\",\n        \"requested-bandwidth\": \"Requested Bandwidth\",\n        \"reverse-voltage\": \"Reverse Voltage (Vr)\",\n        \"sensor\": \"Sensor\",\n        \"shunt-resistance\": \"Shunt Resistance (Rsh)\",\n        \"stages\": \"Stage\",\n        \"two-stage\": \"Two Stages\"\n      },\n      \"pdf-data-ie-image-missing\": \"We are very sorry, but we are unable to generate images if you are using Internet Explorer 8 or below to browse this tool. Please use Firefox, Chrome, or Internet Explorer 9 or above if you would like to see the image on this page.\",\n      \"pdf-desc\": \"{desc}\\n\\nCreated by {user} on {date}\",\n      \"pdf-desc-no-design-name\": \"Created by {user} on {date}\",\n      \"pdf-desc-no-name-desc\": \"Created on {date}\",\n      \"pdf-desc-no-user-name\": \"{desc}\\n\\nCreated on {date}\",\n      \"pdf-heading\": \"Photodiode Design Report\",\n      \"pdf-page-headers\": {\n        \"bill-of-materials\": \"Bill of Materials\",\n        \"circuit\": \"Circuit\",\n        \"frequency-response\": \"Frequency Response\",\n        \"noise-gain\": \"Noise Gain\",\n        \"pulse-response\": \"Pulse Response\",\n        \"snr\": \"SNR\",\n        \"spectral-noise\": \"Spectral Noise Density\"\n      },\n      \"pdf-subheading\": \"Design Parameters Entered by User\",\n      \"pdf-tool-name\": \"Photodiode\"\n    },\n    \"spice-files\": {\n      \"message_netlist_readme\": \"This directory (Spice Files) contains three simulation-ready SPICE netlists.\\r\\nThese netlists contain the photodiode amplifier design generated by Photodiode \\r\\nWizard, and the corresponding SPICE macromodels for the selected op amp(s). \\r\\nAlso included is a suitable input signal, and appropriate analysis mode \\r\\n(.AC, .TRAN, .NOISE).\\r\\n\\nThese netlists are text-based .cir files, and should be compatible with a wide\\r\\nvariety of SPICE simulators.  More information about text-based SPICE netlists\\r\\ncan be found at: http://bwrcs.eecs.berkeley.edu/Classes/IcBook/SPICE/ \\r\\n\\n\\t- ACAnalysis.cir: Simulates AC response of the photodiode amplifier design. \\r\\n\\t                  Output of circuit can be plotted by probing V(OUT) \\r\\n\\n\\t- TransientAnalysis.cir: Simulates the step response of the photodiode \\r\\n\\t                         amplifier design. Output of circuit can be plotted by \\r\\n\\t                         probing V(OUT) \\r\\n\\n\\t- NoiseAnalysis.cir: Simulates the noise of the photodiode amplifier design. \\r\\n\\t                     Noise gain can be plotted by probing GAIN, or \\r\\n\\t                     V(ONOISE)/V(INOISE) \\r\\n\\n\\nAny questions about these SPICE netlists, or about Photodiode Wizard in general \\r\\ncan be submitted at: \\r\\nhttp://ez.analog.com/community/amplifiers/operational-amplifiers \\r\\n\",\n      \"message_netlist_readme_filename\": \"README.txt\",\n      \"message_no_netlist_filename\": \"Why no netlist files.txt\",\n      \"message_no_schematic\": \"Now that LTspice is part of Analog Devices, we are converting our SPICE netlists into LTspice models.  The op amps in your design do not currently have LTspice models available.  If you would like ADI to prioritize LTspice model generation for a particular part, please let your sales representative know or send feedback through this tool.\\r\\n\\r\\nSPICE simulation supported by parts in your design:\\r\\n\",\n      \"message_no_schematic_filename\": \"Why no LTspice.txt\",\n      \"message_no_schematic_no_netlist\": \"ADI is currently in the process of transitioning our op amps from SPICE netlists to LTspice models.  Your design contains a mixture of parts, where some have text based netlists and some have LTspice files.  Because of this, the tool is not able to generate any SPICE output.  We apologize for the inconvenience and are working on getting this fixed.  If you would like ADI to prioritize LTspice model generation for a particular part, please let your sales representative know or send feedback through this tool.\\r\\n\\r\\nSPICE simulation supported by parts in your design:\\r\\n\",\n      \"message_no_schematic_no_netlist_filename\": \"README.txt\",\n      \"message_part_no_netlist\": \"The following parts cannot generate netlist model information.\\r\\n\",\n      \"message_part_no_spice_info\": \"The following op amps in your design do not have LTspice models or text netlist models.\\r\\nIf you would like ADI to prioritize LTspice model generation for a particular part, please let your sales representative know or send feedback through this tool.\\r\\n\",\n      \"message_part_no_spice_info_filename\": \"Why no spice files.txt\"\n    }\n  },\n  \"ember-aditools-page\": {\n    \"card\": {\n      \"checkbox-tooltip\": \"Toggle\",\n      \"help-tooltip\": \"Click for help\",\n      \"part-number-tooltip\": \"Click to select part\"\n    },\n    \"common\": {\n      \"cancel\": \"Cancel\",\n      \"close\": \"Close\",\n      \"load\": \"Load\",\n      \"ok\": \"OK\",\n      \"open\": \"Open\",\n      \"save\": \"Save\",\n      \"select\": \"Select\"\n    },\n    \"dialogs\": {\n      \"feedback\": {\n        \"email\": \"EMail: \",\n        \"feedback\": \"Your Feedback\",\n        \"give-feedback\": \"Tell us\",\n        \"invitation\": \"Please let us know your opinion of this tool, good and bad.\",\n        \"name\": \"Name: \",\n        \"optional\": \"(Optional)\",\n        \"title\": \"Give us your feedback!\"\n      },\n      \"load\": {\n        \"choose-button\": \"Choose File\",\n        \"message\": \"Load a design from a file on your computer.\",\n        \"no-file-selected\": \"No file selected.\",\n        \"title\": \"Load Design\"\n      },\n      \"samples\": {\n        \"add-button\": \"Add Selected Samples to Cart\",\n        \"add-link\": \"Add to Order\",\n        \"add-to-cart-column\": \"Add Sample to Cart\",\n        \"model-column\": \"Device Model/Package\",\n        \"part-column\": \"Device Name\",\n        \"quantities-warning\": \"Analog Devices offers a limited amount of free samples to qualified customers. Due to the large demand for our product samples we ask that you limit your sample request to 2 pieces per part with a maximum of 4 parts per request within a 14 day time period. Should your design needs require additional product quantities, you can purchase them on the web through Buy Online, or you can contact one of our authorized distributors.\",\n        \"title\": \"Order Samples\",\n        \"unavailable-message\": \"Not available for sample\"\n      },\n      \"save\": {\n        \"save-desc-error\": \"Please provide a Description\",\n        \"save-desc-field\": \"Description\",\n        \"save-name-error\": \"Please provide a Design Name\",\n        \"save-name-field\": \"Design Name\",\n        \"title\": \"Save Design\"\n      },\n      \"share\": {\n        \"share-button\": \"Email\",\n        \"share-design-information\": \"<p>To share a copy of your design, enter your name into the <b>Sender name</b> field. Then enter the email address of the recipients in the <b>Share design with</b> field.</p><p>The recipients will receive an email from Analog Devices with an attachment containing a ZIP archive of the shared design. All you have to do is extract the design from the ZIP file and upload it using the Load Design functionality of the application</p><p>This process creates a copy of the design for each recipient. If recipients choose to make edits on their copies, it will have no effect on your design you saved to your own computer.</p>\",\n        \"share-dialog-ng-message\": \"Unable to share design. This is likely due to a server connection error. Please try again.\",\n        \"share-dialog-ok-message\": \"Design has been shared\",\n        \"share-duplicate-email\": \"Duplicate emails found\",\n        \"share-email-empty-error\": \"Please enter an email address\",\n        \"share-email-field\": \"Share design with\",\n        \"share-email-format-error\": \"At least one of the email addresses you entered is invalid. Please correct and try again\",\n        \"share-email-placeholder\": \"Email Address\",\n        \"share-name-error\": \"Please provide a Design Name\",\n        \"share-name-field\": \"Design Name\",\n        \"share-sender-error\": \"Please provide a Sender Name\",\n        \"share-sender-field\": \"Sender Name\",\n        \"title\": \"Share My Design\"\n      },\n      \"system\": {\n        \"application-busy\": \"Working...\",\n        \"title\": \"Application Message\"\n      }\n    },\n    \"footer\": {\n      \"accessibility\": \"Accessibility\",\n      \"cookie-settings\": \"Cookie Settings\",\n      \"copyright-text\": \"1995 - 2025 Analog Devices, Inc. All Rights Reserved\",\n      \"icp-id\": \"\",\n      \"legal\": \"Legal and Risk\",\n      \"privacy-policy\": \"Privacy Policy\",\n      \"privacy-settings\": \"Privacy Settings\",\n      \"sitemap\": \"Sitemap\"\n    },\n    \"header\": {\n      \"applications\": \"Applications\",\n      \"company\": \"Company\",\n      \"design-center\": \"Design Center\",\n      \"education\": \"Education\",\n      \"parametric-search\": \"Parametric Search\",\n      \"products\": \"Products\",\n      \"spoken\": {\n        \"homepage\": \"ADI Home Page\",\n        \"sitelinks\": \"ADI Site Links\"\n      },\n      \"support\": \"Support\"\n    },\n    \"menubar\": {\n      \"chinese\": \"简体中文\",\n      \"english\": \"English\",\n      \"help\": \"Help\",\n      \"japanese\": \"日本語\",\n      \"load\": \"Load Design\",\n      \"save\": \"Save\"\n    },\n    \"studio\": {\n      \"adcdriver\": \"ADC Driver\",\n      \"dacebc\": \"DAC\",\n      \"diamond\": \"In Amp\",\n      \"filterwizard\": \"Analog Filter\",\n      \"noise\": \"Noise\",\n      \"photodiode\": \"Photodiode\",\n      \"precisionstudio\": \"ADI<span class=''service-mark''>℠</span> Precision Studio\",\n      \"signalchaindesigner\": \"Signal Chain\",\n      \"simdds\": \"DDS\",\n      \"spoken\": {\n        \"studiolinks\": \"ADI Precision Studio Links\"\n      },\n      \"virteval\": \"Virtual Eval\"\n    },\n    \"toolbar\": {\n      \"actions\": \"Actions\"\n    }\n  },\n  \"figures\": {\n    \"bom\": {\n      \"description\": \"Click on 'Get Design File' to download a zip file that includes a Bill of Materials in tab delimited format.\",\n      \"designator\": \"Reference Designator\",\n      \"extra-components\": {\n        \"header\": \"header\",\n        \"jumper\": \"jumper\",\n        \"sma-jack\": \"SMA Jack, board edge female\",\n        \"sma-male\": \"male-male SMA\",\n        \"socket\": \"socket\",\n        \"test-pin\": \"Test pin\"\n      },\n      \"material\": \"Material\",\n      \"materials\": {\n        \"tantalum\": \"tantalum\"\n      },\n      \"package\": \"Package\",\n      \"quantity\": \"Quantity\",\n      \"title\": \"BOM\",\n      \"tolerance\": \"Tolerance\",\n      \"value\": \"Value\"\n    },\n    \"frequency-response\": {\n      \"fn\": \"f<tspan dy=\\\"5px\\\">N</tspan><tspan dy=\\\"-5px\\\"> = {fn}Hz</tspan>\",\n      \"hover-graph-legend\": {\n        \"trans-gain\": \"Transimpedance Gain: \",\n        \"x-title\": \"Frequency: \",\n        \"x-unit\": \"Hz\",\n        \"y-unit\": \"dB\",\n        \"y-unit2\": \"V/A\"\n      },\n      \"q\": \"Q = {q}\",\n      \"title\": \"Frequency Resp.\",\n      \"tooltip\": \"Frequency Response\",\n      \"x-title\": \"Frequency (Hz)\",\n      \"y-title\": \"Transimpedance Gain ({unit})\"\n    },\n    \"noise-gain\": {\n      \"graph-legend\": {\n        \"caps\": \"(C<sub>in</sub> + C<sub>f</sub>) / C<sub>f</sub>\",\n        \"noise-gain\": \"Noise Gain\",\n        \"opamp-gain\": \"Op Amp Gain\",\n        \"x-title\": \"Frequency\",\n        \"zero\": \"(C<sub>in</sub> || C<sub>f</sub>) (R<sub>in</sub> || R<sub>f</sub>) <br/> Zero\"\n      },\n      \"hover-graph-legend\": {\n        \"caps\": \"(Cin + Cf) / Cf: \",\n        \"noise-gain\": \"Noise Gain: \",\n        \"opamp-gain\": \"Op Amp Gain: \",\n        \"x-title\": \"Frequency: \",\n        \"x-unit\": \"Hz\",\n        \"y-unit\": \"dB\",\n        \"y-unit2\": \"V/V\",\n        \"zero\": \"(Cin || Cf) (Rin || Rf) Zero: \"\n      },\n      \"title\": \"Noise Gain\",\n      \"tooltip\": \"Noise Gain\",\n      \"x-title\": \"Frequency (Hz)\",\n      \"y-title\": \"Gain ({unit})\"\n    },\n    \"pulse-response\": {\n      \"hover-graph-legend\": {\n        \"circuit-output\": \"Circuit Output: \",\n        \"x-title\": \"Time: \",\n        \"x-unit\": \"s\",\n        \"y-unit\": \"V\"\n      },\n      \"overshoot\": \"Overshoot = {overshootPercent}%\",\n      \"rise-time\": \"Rise Time (10% to 90%) = {riseTime}s\",\n      \"title\": \"Pulse Resp.\",\n      \"tooltip\": \"Pulse Response\",\n      \"x-title\": \"Time (s)\",\n      \"y-title\": \"Circuit Output (V)\"\n    },\n    \"schematic\": {\n      \"amp-single-stage-title-1\": \"TRANSIMPEDANCE\",\n      \"amp-single-stage-title-2\": \"AMPLIFIER\",\n      \"amp-single-stage-title-3\": \"\",\n      \"amp-stage-one-title-1\": \"STAGE 1\",\n      \"amp-stage-one-title-2\": \"TRANSIMPEDANCE\",\n      \"amp-stage-one-title-3\": \"AMPLIFIER\",\n      \"amp-stage-two-title-1\": \"STAGE 2\",\n      \"amp-stage-two-title-2\": \"ADDITIONAL GAIN\",\n      \"amp-stage-two-title-3\": \"AND FILTERING\",\n      \"bypass-capacitors\": \"BYPASS CAPACITORS\",\n      \"equivalent-circuit-tooltip\": \"Equivalent Circuit\",\n      \"photodiode-model\": \"Photodiode Model ( {pd} )\",\n      \"photodiode-model-custom\": \"Custom\",\n      \"photodiode-model-next-steps\": \"Model: {pd}\",\n      \"photodiode-stage-title-1\": \"PHOTODIODE\",\n      \"photodiode-stage-title-2\": \"\",\n      \"spares\": \"SPARES\",\n      \"supply-voltage-title-1\": \"SUPPLY VOLTAGE\",\n      \"supply-voltage-title-2\": \"MIN: ± {minVoltage}V\",\n      \"supply-voltage-title-3\": \"MAX: ± {maxVoltage}V\",\n      \"supply-voltage-tooltip\": \"Supply Voltage\",\n      \"title\": \"Circuit\",\n      \"warning-cf-less-than-1pF\": \"Warning: The feedback capacitance, Cf, needed for your design is only {feedback}F. At this low level, board capacitance will have a significant effect on the peaking (Q) of this design. The actual value of Cf should be determined empirically with your specific PCB board. Because the value is so low, the tool has not converted the capacitance into a standard value.\",\n      \"warning-gain-greater-than-1-stable\": \"Warning:  This circuit may not be stable. The {opamp} is stable for noise gains of {gain} or greater. This means (Cd + Cf) / Cf should be larger than {gain}. In the circuit above Cd = {capacitance}F and Cf = {feedback}F, so (Cd + Cf) / Cf = {noise}. Make sure you verify in spice before building.\",\n      \"why-the-spares-tooltip\": \"Why the Spares?\"\n    },\n    \"snr\": {\n      \"enob\": \"ENOB = {enob} bits\",\n      \"minimum-signal\": \"Minimum Signal (Noise Floor)\",\n      \"noise-1f-not-modeled\": \"1/f and tail current noise not modeled.\",\n      \"noise-contributors\": \"Noise Contributors (V rms)\",\n      \"noise-floor\": \"Referred to Output: {voltage}V rms\",\n      \"noise-referred-output\": \"All noise referred to output\",\n      \"opamp-current\": \"Op Amp Current\",\n      \"opamp-voltage\": \"Op Amp Voltage\",\n      \"output-voltage\": \"Output Voltage: {voltage}V\",\n      \"peak-signal\": \"Peak Signal\",\n      \"photodiode-current\": \"Photodiode Current: {current}A\",\n      \"photodiode-current-rms\": \"Referred to Input: {current}A rms\",\n      \"rf\": \"R<sub>F</sub>\",\n      \"rfilter\": \"R<sub>FILTER</sub>\",\n      \"rg\": \"R<sub>G</sub>\",\n      \"rin\": \"R<sub>IN</sub>\",\n      \"snr\": \"SNR = {snr} dB\",\n      \"stage-1\": \"Stage 1\",\n      \"stage-1-total\": \"Stage 1 Total\",\n      \"stage-2\": \"Stage 2\",\n      \"stage-2-total\": \"Stage 2 Total\",\n      \"title\": \"SNR\",\n      \"tooltip\": \"SNR/Dynamic Range\",\n      \"total\": \"Total\",\n      \"total-noise\": \"Total Noise: {noise}V rms\"\n    },\n    \"spectral-noise\": {\n      \"graph-legend\": {\n        \"opi\": \"Op Amp I\",\n        \"opi2\": \"Op Amp 2 I\",\n        \"opv\": \"Op Amp V\",\n        \"opv2\": \"Op Amp 2 V\",\n        \"rf\": \"R<sub>f</sub>\",\n        \"rfilter\": \"R<sub>filter</sub>\",\n        \"rin\": \"R<sub>in</sub>\",\n        \"total\": \"Total\",\n        \"x-title\": \"Frequency\"\n      },\n      \"hover-graph-legend\": {\n        \"opi\": \"Op Amp I: \",\n        \"opi2\": \"Op Amp 2 I: \",\n        \"opv\": \"Op Amp V: \",\n        \"opv2\": \"Op Amp 2 V: \",\n        \"rf\": \"Rf: \",\n        \"rfilter\": \"Rfilter: \",\n        \"rin\": \"Rin: \",\n        \"total\": \"Total: \",\n        \"x-title\": \"Frequency: \",\n        \"x-unit\": \"Hz\",\n        \"y-unit\": \"V/√Hz\"\n      },\n      \"title\": \"Spectral Noise\",\n      \"tooltip\": \"Spectral Noise Density\",\n      \"x-title\": \"Frequency (Hz)\",\n      \"y-title\": \"Spectral Noise (V/√Hz)\"\n    }\n  },\n  \"help\": {\n    \"bias-polarity\": {\n      \"title\": \"Photodiode Bias\"\n    },\n    \"circuit-peaking\": {\n      \"title\": \"Output Signal: Peaking\"\n    },\n    \"circuit-stages\": {\n      \"title\": \"Stages\"\n    },\n    \"dynamic-range\": {\n      \"title\": \"SNR/Dynamic Range\"\n    },\n    \"equivalent-circuit\": {\n      \"title\": \"Photodiode Equivalent Circuit\"\n    },\n    \"frequency-response\": {\n      \"title\": \"Frequency Response\"\n    },\n    \"main-help\": {\n      \"title\": \"Photodiode Circuit Design Wizard Help\"\n    },\n    \"noise-gain\": {\n      \"title\": \"Noise Gain\"\n    },\n    \"opamp\": {\n      \"title\": \"Op Amp\"\n    },\n    \"peak-current\": {\n      \"title\": \"Photodiode Specs: Peak Current\"\n    },\n    \"peak-voltage\": {\n      \"title\": \"Output Signal: Peak Voltage\"\n    },\n    \"photodiode-capacitance\": {\n      \"title\": \"Photodiode Specs: Capacitance (C<sub>D</sub>)\"\n    },\n    \"pulse-response\": {\n      \"title\": \"Pulse Response\"\n    },\n    \"quick-results\": {\n      \"title\": \"Quick Results\"\n    },\n    \"reverse-voltage\": {\n      \"title\": \"Photodiode Bias: Reverse Voltage (V<sub>R</sub>)\"\n    },\n    \"shunt-resistance\": {\n      \"title\": \"Photodiode Specs: Shunt Resistance (R<sub>SH</sub>)\"\n    },\n    \"spectral-noise-density\": {\n      \"title\": \"Spectral Noise Density\"\n    },\n    \"stability\": {\n      \"title\": \"Stability\"\n    },\n    \"supply-voltage\": {\n      \"title\": \"Supply Voltage\"\n    },\n    \"target-speed\": {\n      \"title\": \"Output Signal: Speed\"\n    },\n    \"why-the-spares\": {\n      \"title\": \"Why the spares?\"\n    }\n  },\n  \"main\": {\n    \"busy\": \"Working...\",\n    \"next-tab\": \"Next Tab\",\n    \"previous-tab\": \"Previous Tab\",\n    \"title\": \"Photodiode Circuit Design Wizard\"\n  },\n  \"marginal-design\": {\n    \"button\": \"Show marginal design\",\n    \"message\": \"To create a robust design, we recommend adjusting your design parameters as described above. However if that is not possible, we were able to find an op amp that might work. The tool has identified the following issues with this design: \"\n  },\n  \"menu\": {\n    \"links\": {\n      \"feedback\": \"Feedback\",\n      \"help\": \"Help\",\n      \"load\": \"Load\",\n      \"save\": \"Save\"\n    },\n    \"tabs\": {\n      \"circuit-design\": \"Circuit Design\",\n      \"next-steps\": \"Next Steps\",\n      \"photodiode\": \"Photodiode\"\n    }\n  },\n  \"model-error\": {\n    \"amp_status_bias_current_is\": \"high output offset (bias current is {data})\",\n    \"amp_status_big_2nd_stage_gain\": \"Requires 2nd stage gain of {data}\",\n    \"amp_status_cf_less_100fF\": \"Cf < 0.1pF\",\n    \"amp_status_cf_less_50fF\": \"Cf < 50fF\",\n    \"amp_status_cfb_no_cf\": \"Current feedback amp can't support cap in feedback path\",\n    \"amp_status_cfb_rf_too_small\": \"unable to drive Rf\",\n    \"amp_status_dB_error\": \"database error - part data incorrect in database\",\n    \"amp_status_gbw_less_than_bandwith_requested\": \"Op Amp GBW less than bandwidth requested \",\n    \"amp_status_high_vos\": \"high output offset (input Vos is {data})\",\n    \"amp_status_internal_cf_too_high\": \"internal feedback capacitance too high\",\n    \"amp_status_min_stable_gain\": \"min stable gain = {data}\",\n    \"amp_status_not_enough_peaking\": \"can't create enough peaking\",\n    \"amp_status_not_fast_enough\": \"not fast enough\",\n    \"amp_status_quad\": \"quad\",\n    \"amp_status_slew_rate_low\": \"slew rate too low\",\n    \"amp_status_slew_rate_marginal\": \"slew rate marginal\",\n    \"amp_status_specialty_amp\": \"specialty amplifier\",\n    \"amp_status_too_fast\": \"fast amp = lower SNR\",\n    \"amp_status_voltage_not_enough\": \"voltage range not enough for peak output voltage\",\n    \"amp_status_zero_drift\": \"zero drift\",\n    \"fixed_op_amp_no_good\": \"The {partName} is not able to meet the design requirements.  Please choose another op amp or unlock the op amp to have the program choose for you.  <br/><br/>Reason {partName} is unsuitable:\",\n    \"internal_cf_too_high\": \"The {partName} has {cfint}F of internal feedback capacitance. So what would normally be {cf}F of feedback capacitance for a standard amp is {cfext}F for the {partName}.  <br/><br/>Reason {partName} is unsuitable:\",\n    \"no_op_amps_available_for_first_stage_too_fast\": \"<p>Unable to recommend an op amp that can meet design requirements for the first stage.</p><p>Things to try: <ul><li>Reduce speed requirements</li><li>Reduce photodiode capacitance</li><li>Reduce peak output voltage</li><li>Increase photodiode peak current</li></ul></p>\",\n    \"no_op_amps_available_for_first_stage_too_slow\": \"<p>Unable to recommend an op amp that can meet design requirements for the first stage.</p><p>Things to try: <ul><li>Increase speed requirements</li><li>Increase photodiode capacitance</li><li>Increase peak output voltage</li><li>Decrease photodiode peak current</li></ul></p>\",\n    \"no_op_amps_available_for_second_stage\": \"<p>Unable to recommend an op amp that can meet design requirements for the second stage.</p><p>Solutions: <ul><li>Reduce speed requirements</li><li>Reduce peak output voltage</li></ul></p>\",\n    \"no_op_amps_available_for_single_stage_too_fast\": \"<p>Unable to recommend an op amp that meets these design requirements.</p><p>Things to try: <ul><li>Choose 2 stage solution</li><li>Reduce speed requirements</li><li>Reduce photodiode capacitance</li><li>Reduce peak output voltage</li><li>Increase photodiode peak current</li></ul></p>\",\n    \"no_op_amps_available_for_single_stage_too_slow\": \"<p>Unable to recommend an op amp that meets these design requirements.</p><p>Things to try: <ul><li>Increase speed requirements</li><li>Increase photodiode capacitance</li><li>Increase peak output voltage</li><li>Decrease photodiode peak current</li></ul></p>\",\n    \"peak_light_error\": \"The peak current you provided does not fall in the accepted range ({min} - {max}). Please update the value.\",\n    \"peak_photodiode_error\": \"The resulting peak current does not fall in the accepted range ({min} - {max}).\",\n    \"rf_too_high\": \"<p>Gain required is too high for a single stage amplifier configuration.</p><p>Solutions:<ul><li>Choose 2 stage solution</li><li>Reduce peak output voltage</li><li>Increase photodiode peak current</li></ul></p>\"\n  },\n  \"opamp-selection\": {\n    \"GBW\": \"GBW\",\n    \"cancel\": \"Cancel\",\n    \"comment-drop-down\": {\n      \"message\": {\n        \"amp_status_bias_current_is\": \"high output offset (bias current is {value}A)\",\n        \"amp_status_big_2nd_stage_gain\": \"Requires 2nd stage gain of {value}\",\n        \"amp_status_cf_less_100fF\": \"Cf < 0.1pF\",\n        \"amp_status_cf_less_50fF\": \"Cf < 50fF\",\n        \"amp_status_cfb_no_cf\": \"Current feedback amp can't support cap in feedback path\",\n        \"amp_status_cfb_rf_too_small\": \"unable to drive Rf\",\n        \"amp_status_dB_error\": \"database error - part data incorrect in database\",\n        \"amp_status_gbw_less_than_bandwith_requested\": \"Op Amp GBW less than bandwidth requested \",\n        \"amp_status_high_vos\": \"high output offset (input Vos is {value}V) \",\n        \"amp_status_internal_cf_too_high\": \"internal feedback capacitance too high\",\n        \"amp_status_last_time_buy\": \"Last Time Buy\",\n        \"amp_status_min_stable_gain\": \"min stable gain = {value}\",\n        \"amp_status_not_allowed\": \"not allowed:\",\n        \"amp_status_not_enough_peaking\": \"can't create enough peaking\",\n        \"amp_status_not_fast_enough\": \"not fast enough\",\n        \"amp_status_not_recommended\": \"not recommended:\",\n        \"amp_status_not_recommended_for_new_designs\": \"not recommended for new designs\",\n        \"amp_status_obsolete\": \"Obsolete\",\n        \"amp_status_quad\": \"quad\",\n        \"amp_status_recommended\": \"recommended\",\n        \"amp_status_slew_rate_low\": \"slew rate too low\",\n        \"amp_status_slew_rate_marginal\": \"slew rate marginal\",\n        \"amp_status_specialty_amp\": \"specialty amplifier\",\n        \"amp_status_too_fast\": \"fast amp = lower SNR\",\n        \"amp_status_voltage_not_enough\": \"voltage range not enough for peak output voltage\",\n        \"amp_status_zero_drift\": \"zero drift\"\n      },\n      \"not-allowed\": \"Not Allowed\",\n      \"not-allowed-match\": \"not allowed\",\n      \"not-recommended\": \"Not Recommended\",\n      \"not-recommended-match\": \"not recommended\",\n      \"recommended\": \"Recommended\",\n      \"recommended-match\": \"recommended\",\n      \"show-all\": \"Show all\"\n    },\n    \"comments\": \"Comments\",\n    \"part-label\": \"Part\",\n    \"row-count\": \"'{count, plural, =0 {Displaying # of {total} op amps. Please check the filters provided.} other {Displaying # of {total} op amps.}}'\",\n    \"select\": \"Select\",\n    \"spice-drop-down\": {\n      \"no\": \"No\",\n      \"show-all\": \"Show all\",\n      \"yes\": \"Yes\"\n    },\n    \"status-drop-down\": {\n      \"not-recommended\": \"Not Recommended for New Designs\",\n      \"not-recommended-match\": \"Not Recommended for New Designs\",\n      \"production\": \"Production\",\n      \"production-match\": \"Production\",\n      \"recommended\": \"Recommended for New Designs\",\n      \"recommended-match\": \"Recommended for New Designs\",\n      \"show-all\": \"Show all\"\n    },\n    \"supply-max\": \"Supply Max\",\n    \"supply-min\": \"Supply Min\",\n    \"temp-range\": \"Temperature Range\",\n    \"title\": \"Choose Op Amp\"\n  },\n  \"parameter-selector\": {\n    \"choose-parameters\": \"Choose Parameters\",\n    \"ok\": \"OK\"\n  },\n  \"sensor-selection\": {\n    \"active-area\": \"Active Area\",\n    \"cancel\": \"Cancel\",\n    \"capacitance\": \"Capacitance\",\n    \"dark-current\": \"Dark Current\",\n    \"manufacturer\": \"Manufacturer\",\n    \"operating-temperature\": \"Operating Temperature\",\n    \"package\": \"Package\",\n    \"part-number\": \"Part Number\",\n    \"product-page\": \"Home Page\",\n    \"resistance\": \"Resistance\",\n    \"response-time\": \"Response Time\",\n    \"reverse-breakdown\": \"Reverse Breakdown\",\n    \"row-count\": \"'{count, plural, =0 {Displaying # of {total} sensors. Please check the filters provided.} other {Displaying # of {total} sensors.}}'\",\n    \"select\": \"Select\",\n    \"sensitivity\": \"Sensitivity\",\n    \"spectral-peak\": \"Spectral Peak\",\n    \"spectral-range\": \"Spectral Range\",\n    \"spice\": \"SPICE\",\n    \"spice-file\": \"Spice&nbsp;File\",\n    \"title\": \"Please Select A Sensor\",\n    \"vendor-link\": \"Vendor&nbsp;Link\",\n    \"viewing-angle\": \"Viewing Angle\"\n  },\n  \"settings\": {\n    \"circuit-design\": {\n      \"enob\": \"ENOB: {enob} bits\",\n      \"one-stage\": \"One Stage\",\n      \"opamp-lock\": \"Lock\",\n      \"opamp-stage1\": \"Stage 1:\",\n      \"opamp-stage2\": \"Stage 2:\",\n      \"opamps\": \"Op Amps:\",\n      \"opamps-tooltip\": \"Op Amp\",\n      \"output-offset\": \"Output Offset: {offset}V\",\n      \"output-signal\": \"Output Signal\",\n      \"peak-voltage\": \"Peak Voltage (V<sub>P</sub>)\",\n      \"peak-voltage-tooltip\": \"Peak Voltage\",\n      \"peaking\": \"Peaking\",\n      \"peaking-high\": \"high\",\n      \"peaking-low\": \"low\",\n      \"peaking-tooltip\": \"Peaking\",\n      \"quick-results\": \"Quick Results\",\n      \"quick-results-tooltip\": \"Quick Results\",\n      \"snr\": \"SNR: {snr} dB\",\n      \"stages\": \"Stages\",\n      \"stages-tooltip\": \"Stages\",\n      \"target-bandwidth\": \"Target Bandwidth\",\n      \"target-option-band\": \"Bandwidth\",\n      \"target-option-pulse\": \"Pulse Width\",\n      \"target-pulse-width\": \"Target Pulse Width\",\n      \"target-speed-tooltip\": \"Speed\",\n      \"two-stage\": \"Two Stages\"\n    },\n    \"next-steps\": {\n      \"get-files\": \"Get Files\",\n      \"get-files-all\": \"All Files\",\n      \"get-files-all-tooltip\": \"Download zip file containing SPICE files, BOM, and pdf versions of views\",\n      \"get-files-spice\": \"SPICE Only\",\n      \"get-files-spice-tooltip\": \"Download zip file containing schematic files\",\n      \"mail\": \"Mail to Colleague\",\n      \"mail-tooltip\": \"Send a copy of this design to a colleague\",\n      \"order\": \"Order\",\n      \"order-samples\": \"Order Samples\",\n      \"order-samples-tooltip\": \"Order component sample\",\n      \"share\": \"Share\"\n    },\n    \"photodiode\": {\n      \"bias-polarity-tooltip\": \"Photodiode Bias\",\n      \"capacitance-1\": \"Capacitance (C<sub>D</sub>)\",\n      \"capacitance-2\": \"at V<sub>R</sub> = {vr} V\",\n      \"capacitance-tooltip\": \"Capacitance\",\n      \"capacitance-warning\": \"Be careful. This is the capacitance at <u>your</u> reverse voltage, which may be different than what is specified in the datasheet table. You may need to read this value from a datasheet graph instead.\",\n      \"or\": \"or\",\n      \"peak-current\": \"Peak Current (I<sub>P</sub>)\",\n      \"peak-current-tooltip\": \"Peak Current\",\n      \"photodiode-bias\": \"Photodiode Bias\",\n      \"photodiode-select\": \"Select Photodiode From Library\",\n      \"photodiode-specs\": \"Photodiode Specs\",\n      \"reverse-voltage\": \"Reverse Voltage (V<sub>R</sub>)\",\n      \"reverse-voltage-negative\": \"Negative\",\n      \"reverse-voltage-positive\": \"Positive\",\n      \"reverse-voltage-tooltip\": \"Reverse Voltage\",\n      \"shunt-resistance\": \"Shunt Resistance (R<sub>SH</sub>)\",\n      \"shunt-resistance-tooltip\": \"Shunt Resistance\"\n    }\n  },\n  \"units\": {\n    \"A\": \"A\",\n    \"F\": \"F\",\n    \"Q\": \"Q\",\n    \"R\": \"Ω\",\n    \"V\": \"V\",\n    \"active-area\": \"mm<sup>2</sup>\",\n    \"dB\": \"dB\",\n    \"farad\": \"F\",\n    \"hertz\": \"Hz\",\n    \"meters\": \"m\",\n    \"ohm\": \"Ohm\",\n    \"operating-temperature\": \"&deg;C\",\n    \"peak-light-intensity\": \" W/m'<sup>2</sup>\",\n    \"seconds\": \"s\",\n    \"sensitivity\": \"A/W\",\n    \"unit-price\": \"$ US\",\n    \"viewing-angle\": \"&deg;\",\n    \"volts-per-amp\": \"V/A\",\n    \"volts-per-volt\": \"V/V\"\n  },\n  \"validation-error\": {\n    \"button-tooltip\": \"Please correct error before continuing\",\n    \"capacitance\": \"Capacitance Value must be in range: {min} to {max}\",\n    \"invalid-input-error\": \"The value \\\"{value}\\\" in field {field} cannot be parsed.\",\n    \"min-pulse-speed\": \"Speed Value must be in range: {min} to {max}\",\n    \"no-opamp-found\": \"None found\",\n    \"peak-current\": \"Peak Current Value must be in range: {min} to {max}\",\n    \"peak-light-intensity\": \"Peak Light Intensity must be in range: {min} to {max}\",\n    \"peak-voltage\": \"Peak Voltage Value must be in range: {min} to {max}\",\n    \"reverse-voltage\": \"Reverse Voltage value must be in range: {min} to {max}\",\n    \"shunt-resistance\": \"Shunt Resistance Value  must be in range: {min} to {max}\",\n    \"speed\": \"Speed Value must be in range: {min} to {max}\"\n  }\n}], [\"ja-jp\", {\n  \"controls\": {\n    \"future\": {\n      \"placeholder\": \"将来の開発のためのプレースホルダー\",\n      \"q\": \"Q\"\n    },\n    \"schematic-table\": {\n      \"model\": {\n        \"photodiode\": {\n          \"bias\": \"バイアス\",\n          \"cd\": \"CD\",\n          \"circuitName\": \"回路名\",\n          \"ip\": \"IP\",\n          \"rsh\": \"rsh\",\n          \"vBias\": \"vバイアス\",\n          \"vr\": \"vr\"\n        },\n        \"stage1\": {\n          \"bw\": \"bw\",\n          \"cf\": \"cf\",\n          \"cin\": \"シン\",\n          \"opamp\": {\n            \"partNumber\": \"オペアンプ\"\n          },\n          \"q\": \"q\",\n          \"rf\": \"rf\",\n          \"rin\": \"リン\",\n          \"title\": \"ステージ1\"\n        },\n        \"stage2\": {\n          \"bw\": \"bw\",\n          \"cfilter\": \"cfilter\",\n          \"opamp\": {\n            \"partNumber\": \"opAmp\"\n          },\n          \"rf\": \"rf\",\n          \"rfilter\": \"rfilter\",\n          \"rg\": \"rg\",\n          \"title\": \"Stage 2\"\n        }\n      },\n      \"title\": \"フォトダイオード\"\n    }\n  },\n  \"current-calculation\": {\n    \"active-area\": \"アクティブ領域:\",\n    \"cancel\": \"キャンセル\",\n    \"equals\": \" = \",\n    \"instruction\": \"ピーク光度あるいはピーク・フォトダイオード電流を入力してください:\",\n    \"multiply\": \" X \",\n    \"peak-current\": \"ピーク・フォトダイオード電流:\",\n    \"peak-light-intensity\": \"光量のピーク強度:\",\n    \"sensitivity\": \"感度:\",\n    \"title\": \"ピーク・フォトダイオード電流の計算\",\n    \"use-this-peak\": \"このピーク電流を使用します\"\n  },\n  \"dialogs\": {\n    \"download\": {\n      \"error-message\": \"<p>設計ファイルを取得できません。 このエラーは、以下の理由で発生している場合があります。</ p> <p> 1)サーバとの接続が切れているため。</ p> <p> 2)サービスが停止されているため。\",\n      \"error-title\": \"ダウンロード\"\n    },\n    \"feedback\": {\n      \"email\": \"お客様のメールアドレス:\",\n      \"feedback\": \"ご意見、ご要望:\",\n      \"feedback-dialog-ng-message\": \"フィードバックの送信に失敗しました。ネットワーク接続に問題がある場合があります。お手数ですが再度お試しください。\",\n      \"feedback-dialog-ok-message\": \"ご意見、ご要望をご記入頂きありがとうございました。\",\n      \"give-feedback\": \"意見または感想を送る\",\n      \"invitation\": \"このツールに関する率直なご意見、ご要望をお聞かせください。 \",\n      \"name\": \"お客様のお名前:\",\n      \"optional\": \"(Optional)\",\n      \"title\": \"皆様のご意見をお聞かせください!\"\n    },\n    \"load\": {\n      \"invalid-file\": \"有効でない設計ファイルです。ファイルをご確認ください。\",\n      \"invalid-parts\": \"{numParts,plural,other{設計を読み込めません。この設計で使用されている次の部品は、このアプリケーションではサポートされていません: }}{parts}\",\n      \"no-opamps\": \"オペアンプのデータが入手できません。設計を読み込むことができません。ブラウザを更新してみてください。引き続きこの問題が発生する場合は、フォトダイオード回路設計ウィザードの右上部にある[ご意見・ご要望]ボタンで問題をご報告ください。\",\n      \"title\": \"設計を読み込む\"\n    },\n    \"samples\": {\n      \"title\": \"サンプル注文\"\n    },\n    \"save\": {\n      \"error-message\": \"デザインを保存できません。入力したデータが正しいか確認してから保存してください。\",\n      \"error-title\": \"デザインを保存\"\n    },\n    \"share\": {\n      \"share-dialog-ng-message\": \"回路を共有できません。サーバーの接続不良による可能性があります。再度お試しください。\",\n      \"share-dialog-ok-message\": \"回路は共有されました\",\n      \"title\": \"自分の設計をメールで送信\"\n    },\n    \"system\": {\n      \"application-busy\": \"処理中・・・\",\n      \"connecting-to\": \"Connecting to {tool}...\",\n      \"download-create-bom\": \"BOM ファイルを作成中・・・\",\n      \"download-create-data\": \"データ・ファイルを作成中・・・\",\n      \"download-create-design\": \"設計ファイルの作成中・・・\",\n      \"download-create-eval-board\": \"評価用ボード・ファイルを作成中・・・\",\n      \"download-create-graph\": \"Graph データを作成中・・・\",\n      \"download-create-pdf\": \"PDFファイルを作成中・・・\",\n      \"download-create-spice\": \"SPICEファイルを作成中・・・\",\n      \"download-downloading\": \"ダウンロード中・・・\",\n      \"download-requesting\": \"送信中・・・\",\n      \"error-config-data\": \"構成データが入手できません。フォトダイオードの仕様を正しく検証できないため続行できません。ブラウザを更新してみてください。引き続きこの問題が発生する場合は、フォトダイオード回路設計ウィザードの右上部にある[ご意見・ご要望]ボタンで問題をご報告ください。\",\n      \"error-opamp-data\": \"オペアンプのデータが入手できません。フォトダイオード回路設計ウィザードを続行できません。設計を保存しブラウザを更新してみてください。引き続きこの問題が発生する場合は、フォトダイオード回路設計ウィザードの右上部にある[ご意見・ご要望]ボタンで問題をご報告ください。\",\n      \"error-pst-data\": \"現在データ・マップが入手できません。そのため、オペアンプ・テーブルを表示できません。設計を保存しブラウザを更新してみてください。引き続きこの問題が発生する場合は、フォトダイオード回路設計ウィザードの右上部にある[ご意見・ご要望]ボタンで問題をご報告ください。\",\n      \"error-sensor-data\": \"現在センサー・データが入手できません。そのため、センサー・テーブルを表示できません。設計を保存しブラウザを更新してみてください。引き続きこの問題が発生する場合は、フォトダイオード回路設計ウィザードの右上部にある[ご意見・ご要望]ボタンで問題をご報告ください。\",\n      \"loading-opamp-data\": \"オペアンプ・データ読み込み中...\",\n      \"sending-filter\": \"Sending filter to {tool}...\",\n      \"title\": \"アプリケーション・メッセージ\"\n    }\n  },\n  \"download\": {\n    \"data-files\": {\n      \"frequency-response\": {\n        \"frequency\": \"周波数\",\n        \"magnitude\": \"振幅\"\n      },\n      \"noise-gain\": {\n        \"caps\": \"(Cin + Cf) / Cf\",\n        \"frequency\": \"周波数\",\n        \"noise-gain\": \"ノイズゲイン\",\n        \"opamp-gain\": \"オペアンプ・ゲイン\",\n        \"zero\": \"(Cin || Cf) (Rin || Rf) <br/> Zero\"\n      },\n      \"pulse-response\": {\n        \"pulse-response\": \"パルス応答\",\n        \"time-axis\": \"時間軸\"\n      },\n      \"spectral-noise\": {\n        \"frequency\": \"周波数\",\n        \"opi\": \"Op Amp I\",\n        \"opi2\": \"Op Amp 2 I\",\n        \"opv\": \"Op Amp V\",\n        \"opv2\": \"Op Amp 2 V\",\n        \"rf\": \"Rf\",\n        \"rfilter\": \"Rfilter\",\n        \"rin\": \"Rin\",\n        \"total\": \"Total\"\n      }\n    },\n    \"pdf-content\": {\n      \"pdf-data-fields\": {\n        \"capacitance\": \"静電容量 (Cd)\",\n        \"one-stage\": \"1ステージ\",\n        \"peak-current\": \"ピーク電流 (Ip)\",\n        \"peak-voltage\": \"ピーク電圧 (Vp)\",\n        \"photodiode-bias\": \"フォトダイオードのバイアス電圧\",\n        \"requested-bandwidth\": \"希望する帯域\",\n        \"reverse-voltage\": \"逆電圧 (Vr)\",\n        \"sensor\": \"センサー\",\n        \"shunt-resistance\": \"フォトダイオードのシャント抵抗 (Rsh)\",\n        \"stages\": \"段\",\n        \"two-stage\": \"2ステージ\"\n      },\n      \"pdf-data-ie-image-missing\": \"大変申し訳ありませんが、このツールをExplorer 8 またはそれ以下のバージョンでお使いの場合、画像を表示することができません。Firefox,Chrome,または Explorer 9をお使いください。\",\n      \"pdf-desc\": \"{desc}\\n\\n作成者 {user} 作成日 {date}\",\n      \"pdf-desc-no-design-name\": \"作成者 {user} 作成日{date}\",\n      \"pdf-desc-no-name-desc\": \"作成日{date}\",\n      \"pdf-desc-no-user-name\": \"{desc}\\n\\n作成日 {date}\",\n      \"pdf-heading\": \"フォトダイオード・デザイン・レポート\",\n      \"pdf-page-headers\": {\n        \"bill-of-materials\": \"部品表\",\n        \"circuit\": \"回路\",\n        \"frequency-response\": \"周波数応答\",\n        \"noise-gain\": \"ノイズ・ゲイン\",\n        \"pulse-response\": \"パルス応答\",\n        \"snr\": \"SNR\",\n        \"spectral-noise\": \"スペクトル・ノイズ密度\"\n      },\n      \"pdf-subheading\": \"フォトダイオードの特性と部品\",\n      \"pdf-tool-name\": \"フォトダイオード\"\n    },\n    \"spice-files\": {\n      \"message_netlist_readme\": \"This directory (Spice Files) contains three simulation-ready SPICE netlists.\\r\\nThese netlists contain the photodiode amplifier design generated by Photodiode \\r\\nWizard, and the corresponding SPICE macromodels for the selected op amp(s). \\r\\nAlso included is a suitable input signal, and appropriate analysis mode \\r\\n(.AC, .TRAN, .NOISE).\\r\\n\\nThese netlists are text-based .cir files, and should be compatible with a wide\\r\\nvariety of SPICE simulators.  More information about text-based SPICE netlists\\r\\ncan be found at: http://bwrcs.eecs.berkeley.edu/Classes/IcBook/SPICE/ \\r\\n\\n\\t- ACAnalysis.cir: Simulates AC response of the photodiode amplifier design. \\r\\n\\t                  Output of circuit can be plotted by probing V(OUT) \\r\\n\\n\\t- TransientAnalysis.cir: Simulates the step response of the photodiode \\r\\n\\t                         amplifier design. Output of circuit can be plotted by \\r\\n\\t                         probing V(OUT) \\r\\n\\n\\t- NoiseAnalysis.cir: Simulates the noise of the photodiode amplifier design. \\r\\n\\t                     Noise gain can be plotted by probing GAIN, or \\r\\n\\t                     V(ONOISE)/V(INOISE) \\r\\n\\n\\nAny questions about these SPICE netlists, or about Photodiode Wizard in general \\r\\ncan be submitted at: \\r\\nhttp://ez.analog.com/community/amplifiers/operational-amplifiers \\r\\n\",\n      \"message_netlist_readme_filename\": \"README.txt\",\n      \"message_no_netlist_filename\": \"Why no netlist files.txt\",\n      \"message_no_schematic\": \"現在、LTspiceはアナログ・デバイセズのツールとなり、SPICEネットリストをLTspiceモデルに変換しております。残念ながら、お客様の設計で使用しているオペアンプ製品は、現在LTspiceでは使用できません。特定の製品をLTspiceで使用されることをご希望の場合には、営業担当者にご連絡いただくか、このツールのフィードバック機能よりご意見をお送りください。\\r\\n\\r\\nSPICEシュミレーション・ツールでのサポート済み製品:\\r\\n\",\n      \"message_no_schematic_filename\": \"Why no LTspice.txt\",\n      \"message_no_schematic_no_netlist\": \"アナログ・デバイセズは、現在SPICE ネットリストのオペアンプ製品をLTspiceにてご使用いただけるよう移行を行っております。お客様の設計にはLTspiceで使用できるものと使用できないものがあり、このツールではSPICE用ファイルを作成することが出来ません。ご不便をお掛けしておりますこと、お詫び申し上げます。特定の製品をLTspiceで使用されることをご希望の場合には、営業担当者にご連絡いただくか、このツールのフィードバック機能よりご意見を頂きますようお願い申し上げます。\\r\\n\\r\\nSPICEシュミレーション・ツールでのサポート済み製品:\\r\\n\",\n      \"message_no_schematic_no_netlist_filename\": \"README.txt\",\n      \"message_part_no_netlist\": \"以下の部分は、ネットリストモデル情報を生成できません。\\r\\n\",\n      \"message_part_no_spice_info\": \"The following op amps in your design do not have LTspice models or text netlist models.\\r\\nIf you would like ADI to prioritize LTspice model generation for a particular part, please let your sales representative know or send feedback through this tool.\\r\\n\",\n      \"message_part_no_spice_info_filename\": \"Why no spice files.txt\"\n    }\n  },\n  \"ember-aditools-page\": {\n    \"card\": {\n      \"checkbox-tooltip\": \"Toggle\",\n      \"help-tooltip\": \"Click for help\",\n      \"part-number-tooltip\": \"Click to select part\"\n    },\n    \"common\": {\n      \"cancel\": \"キャンセル\",\n      \"close\": \"閉じる\",\n      \"load\": \"読み込む\",\n      \"ok\": \"OK\",\n      \"open\": \"開く\",\n      \"save\": \"保存する\",\n      \"select\": \"選ぶ\"\n    },\n    \"dialogs\": {\n      \"feedback\": {\n        \"email\": \"お客様のメールアドレス:\",\n        \"feedback\": \"ご意見、ご要望:\",\n        \"give-feedback\": \"意見または感想を送る\",\n        \"invitation\": \"このツールに関する率直なご意見、ご要望をお聞かせください。 \",\n        \"name\": \"お客様のお名前:\",\n        \"optional\": \"(Optional)\",\n        \"title\": \"皆様のご意見をお聞かせください!\"\n      },\n      \"load\": {\n        \"choose-button\": \"ファイルを選択\",\n        \"message\": \"ローカルPC上の設計ファイルを読み込む\",\n        \"no-file-selected\": \"No file selected.\",\n        \"title\": \"設計を読み込む\"\n      },\n      \"samples\": {\n        \"add-button\": \"選択したサンプルをカートに入れる\",\n        \"add-link\": \"Add to Order\",\n        \"add-to-cart-column\": \"サンプルをカートに入れる\",\n        \"model-column\": \"モデル/パッケージ\",\n        \"part-column\": \"構成部品\",\n        \"quantities-warning\": \"アナログ・デバイセズは認証させていただいたお客様に限り、無料サンプルのご注文を受け付けています。 サンプルについては大変多くのご要望をいただいておりますため、おひとり様2週間あたり最大で4製品、各2個ずつまでのご注文とさせていただきます。無料サンプルとしてご注文いただける以上の量が必要な場合は、オンライン購入をしていただくか(在庫がある場合に限ります)、販売代理店にお問い合わせください。\",\n        \"title\": \"サンプル注文\",\n        \"unavailable-message\": \"サンプルの提供はありません。\"\n      },\n      \"save\": {\n        \"save-desc-error\": \"概要を入力してください。\",\n        \"save-desc-field\": \"概要\",\n        \"save-name-error\": \"デザイン名を入力してください。\",\n        \"save-name-field\": \"デザイン名\",\n        \"title\": \"保存\"\n      },\n      \"share\": {\n        \"share-button\": \"Email\",\n        \"share-design-information\": \"<p>設計ファイルのコピーを共有するには、<b>“差出人名”</b>にお客様のお名前を、共有したい方のメールアドレスを<b>“設計を共有”</b>項目にご入力ください。送信先が複数の場合には、それぞれのメールアドレスを改行してご入力ください。</p><p>アナログ・デバイセズよりZIPファイルにまとめられた設計ファイルが添付されたメールを、ご入力いただいたメールアドレスにお送りします。添付されたZIPファイルを解凍して、各ツールのアップロード機能を使用して設計ファイルをアップロードするだけで、その設計ファイルを使用することが出来ます。</p><p>上記手順により、共有された設計ファイルのコピーを使用することが出来ます。ただし、共有された設計ファイルのコピーが編集されても、お客様のオリジナルの設計ファイルが編集されることはありません。</p>\",\n        \"share-dialog-ng-message\": \"回路を共有できません。サーバーの接続不良による可能性があります。再度お試しください。\",\n        \"share-dialog-ok-message\": \"回路は共有されました\",\n        \"share-duplicate-email\": \"同じメールアドレスが複数含まれています\",\n        \"share-email-empty-error\": \"メールアドレスを入力してください。\",\n        \"share-email-field\": \"設計を共有\",\n        \"share-email-format-error\": \"お客様が入力したメールアドレスの中で少なくとも1つは無効です。修正して再度お試しください。\",\n        \"share-email-placeholder\": \"メールアドレス\",\n        \"share-name-error\": \"デザイン名を入力してください。\",\n        \"share-name-field\": \"デザイン名\",\n        \"share-sender-error\": \"差出人名を入力してください。\",\n        \"share-sender-field\": \"差出人名\",\n        \"title\": \"自分の設計をメールで送信\"\n      },\n      \"system\": {\n        \"application-busy\": \"処理中・・・\",\n        \"title\": \"アプリケーション・メッセージ\"\n      }\n    },\n    \"footer\": {\n      \"accessibility\": \"アクセシビリティ\",\n      \"cookie-settings\": \"Cookieの設定\",\n      \"copyright-text\": \"1995 - 2025 Analog Devices, Inc. 全著作権所有\",\n      \"icp-id\": \"\",\n      \"legal\": \"法的事項およびリスク約\",\n      \"privacy-policy\": \"プライバシーポリシー\",\n      \"privacy-settings\": \"プライバシー設定\",\n      \"sitemap\": \"サイトマップ\"\n    },\n    \"header\": {\n      \"applications\": \"アプリケーション\",\n      \"company\": \"企業情報\",\n      \"design-center\": \"設計支援\",\n      \"education\": \"調べる/学ぶ\",\n      \"parametric-search\": \"パラメータ検索\",\n      \"products\": \"製品\",\n      \"spoken\": {\n        \"homepage\": \"ホームページ\",\n        \"sitelinks\": \"アナログ・デバイセズのサイトへのリンク\"\n      },\n      \"support\": \"サポート\"\n    },\n    \"menubar\": {\n      \"chinese\": \"简体中文\",\n      \"english\": \"English\",\n      \"help\": \"ヘルプ\",\n      \"japanese\": \"日本語\",\n      \"load\": \"設計を読み込む\",\n      \"save\": \"保存\"\n    },\n    \"studio\": {\n      \"adcdriver\": \"ADCドライバ\",\n      \"dacebc\": \"DAC\",\n      \"diamond\": \"計装アンプ\",\n      \"filterwizard\": \"アナログ・フィルタ\",\n      \"noise\": \"ノイズ\",\n      \"photodiode\": \"フォトダイオード\",\n      \"precisionstudio\": \"ADI<span class=''service-mark''>℠</span> Precision Studio\",\n      \"signalchaindesigner\": \"Signal Chain\",\n      \"simdds\": \"DDS\",\n      \"spoken\": {\n        \"studiolinks\": \"ADI Precision Studio へのリンク\"\n      },\n      \"virteval\": \"Virtual Eval\"\n    },\n    \"toolbar\": {\n      \"actions\": \"Actions\"\n    }\n  },\n  \"figures\": {\n    \"bom\": {\n      \"description\": \"「設計用ファイル」のボタンをクリックすると、テキストファイル形式のBOMのzipファイルをダウンロードできます。\",\n      \"designator\": \"リファレンス・デジグネーター\",\n      \"extra-components\": {\n        \"header\": \"ヘッダ\",\n        \"jumper\": \"ジャンパ\",\n        \"sma-jack\": \"SMAジャック、ボード・エッジ、メス\",\n        \"sma-male\": \"オス-オスSMA\",\n        \"socket\": \"ソケット\",\n        \"test-pin\": \"テスト・ピン\"\n      },\n      \"material\": \"材料\",\n      \"materials\": {\n        \"tantalum\": \"タンタル\"\n      },\n      \"package\": \"パッケージ\",\n      \"quantity\": \"量\",\n      \"title\": \"部品リスト(BOM)\",\n      \"tolerance\": \"許容誤差\",\n      \"value\": \"値\"\n    },\n    \"frequency-response\": {\n      \"fn\": \"f<tspan dy=\\\"5px\\\">N</tspan><tspan dy=\\\"-5px\\\"> = {fn}Hz</tspan>\",\n      \"hover-graph-legend\": {\n        \"trans-gain\": \"トランスインピーダンス・ゲイン: \",\n        \"x-title\": \"周波数: \",\n        \"x-unit\": \"Hz\",\n        \"y-unit\": \"dB\",\n        \"y-unit2\": \"V/A\"\n      },\n      \"q\": \"Q = {q}\",\n      \"title\": \"周波数応答\",\n      \"tooltip\": \"Frequency Response\",\n      \"x-title\": \"周波数(Hz)\",\n      \"y-title\": \"トランスインピーダンス・ゲイン({unit})\"\n    },\n    \"noise-gain\": {\n      \"graph-legend\": {\n        \"caps\": \"(C<sub>in</sub> + C<sub>f</sub>) / C<sub>f</sub>\",\n        \"noise-gain\": \"ノイズゲイン\",\n        \"opamp-gain\": \"オペアンプ・ゲイン\",\n        \"x-title\": \"周波数\",\n        \"zero\": \"(C<sub>in</sub> || C<sub>f</sub>) (R<sub>in</sub> || R<sub>f</sub>) <br/> Zero\"\n      },\n      \"hover-graph-legend\": {\n        \"caps\": \"(Cin + Cf) / Cf: \",\n        \"noise-gain\": \"ノイズゲイン: \",\n        \"opamp-gain\": \"オペアンプ・ゲイン: \",\n        \"x-title\": \"周波数: \",\n        \"x-unit\": \"Hz\",\n        \"y-unit\": \"dB\",\n        \"y-unit2\": \"V/V\",\n        \"zero\": \"(Cin || Cf) (Rin || Rf) Zero: \"\n      },\n      \"title\": \"ノイズ・ゲイン\",\n      \"tooltip\": \"ノイズ・ゲイン\",\n      \"x-title\": \"周波数(Hz)\",\n      \"y-title\": \"ゲイン({unit})\"\n    },\n    \"pulse-response\": {\n      \"hover-graph-legend\": {\n        \"circuit-output\": \"回路出力: \",\n        \"x-title\": \"時間: \",\n        \"x-unit\": \"秒\",\n        \"y-unit\": \"V\"\n      },\n      \"overshoot\": \"オーバーシュート = {overshootPercent}%\",\n      \"rise-time\": \"立上り時間(10%~90%)= {riseTime}s\",\n      \"title\": \"パルス応答\",\n      \"tooltip\": \"Pulse Response\",\n      \"x-title\": \"時間(秒)\",\n      \"y-title\": \"回路出力(V)\"\n    },\n    \"schematic\": {\n      \"amp-single-stage-title-1\": \"トランスインピーダンス・\",\n      \"amp-single-stage-title-2\": \"アンプ\",\n      \"amp-single-stage-title-3\": \"\",\n      \"amp-stage-one-title-1\": \"1段\",\n      \"amp-stage-one-title-2\": \"トランスインピーダンス・\",\n      \"amp-stage-one-title-3\": \"アンプ\",\n      \"amp-stage-two-title-1\": \"2段\",\n      \"amp-stage-two-title-2\": \"追加ゲイン\",\n      \"amp-stage-two-title-3\": \"とフィルタリング\",\n      \"bypass-capacitors\": \"バイパスコンデンサ\",\n      \"equivalent-circuit-tooltip\": \"Equivalent Circuit\",\n      \"photodiode-model\": \"フォトダイオードの等価回路モデル ( {pd} )\",\n      \"photodiode-model-custom\": \"カスタム\",\n      \"photodiode-model-next-steps\": \"製品番号: {pd}\",\n      \"photodiode-stage-title-1\": \"フォトダイオード\",\n      \"photodiode-stage-title-2\": \"\",\n      \"spares\": \"スペア\",\n      \"supply-voltage-title-1\": \"供給電圧\",\n      \"supply-voltage-title-2\": \"最小値: ± {minVoltage}V\",\n      \"supply-voltage-title-3\": \"最大値: ± {maxVoltage}V\",\n      \"supply-voltage-tooltip\": \"Supply Voltage\",\n      \"title\": \"回路\",\n      \"warning-cf-less-than-1pF\": \"警告:お客様の設計回路に必要とされるフィードバック容量(Cf)は {feedback}F。 この低いレベルおいては、基板の寄生容量はこの設計のピーキング(Q)に大きく影響します。 Cfの実際の値はお客様のPCBボードで実験的に決める必要があります。 値が低すぎるのでツールはコンデンサ容量を標準値に変換しませんでした。\",\n      \"warning-gain-greater-than-1-stable\": \"Warning:  This circuit may not be stable. The {opamp} is stable for noise gains of {gain} or greater. This means (Cd + Cf) / Cf should be larger than {gain}. In the circuit above Cd = {capacitance}F and Cf = {feedback}F, so (Cd + Cf) / Cf = {noise}. Make sure you verify in spice before building.\",\n      \"why-the-spares-tooltip\": \"Why the Spares?\"\n    },\n    \"snr\": {\n      \"enob\": \"ENOB = {enob} bits\",\n      \"minimum-signal\": \"最小信号(ノイズフロア)\",\n      \"noise-1f-not-modeled\": \"1/fノイズとテール電流ノイズはモデル化されていません。\",\n      \"noise-contributors\": \"ノイズの要因 (V rms)\",\n      \"noise-floor\": \"出力換算: {voltage}V rms\",\n      \"noise-referred-output\": \"全出力換算ノイズ\",\n      \"opamp-current\": \"オペアンプ電流\",\n      \"opamp-voltage\": \"オペアンプ電圧\",\n      \"output-voltage\": \"出力電圧: {voltage}V\",\n      \"peak-signal\": \"ピークシグナル\",\n      \"photodiode-current\": \"フォトダイオード電流: {current}A\",\n      \"photodiode-current-rms\": \"入力換算: {current}A rms\",\n      \"rf\": \"R<sub>F</sub>\",\n      \"rfilter\": \"R<sub>FILTER</sub>\",\n      \"rg\": \"R<sub>G</sub>\",\n      \"rin\": \"R<sub>IN</sub>\",\n      \"snr\": \"SNR = {snr} dB\",\n      \"stage-1\": \"1段目\",\n      \"stage-1-total\": \"1段目合計\",\n      \"stage-2\": \"2段目\",\n      \"stage-2-total\": \"2段目合計\",\n      \"title\": \"SNR\",\n      \"tooltip\": \"SNR/Dynamic Range\",\n      \"total\": \"合計\",\n      \"total-noise\": \"総合ノイズ: {noise}V rms\"\n    },\n    \"spectral-noise\": {\n      \"graph-legend\": {\n        \"opi\": \"Op Amp I\",\n        \"opi2\": \"Op Amp 2 I\",\n        \"opv\": \"Op Amp V\",\n        \"opv2\": \"Op Amp 2 V\",\n        \"rf\": \"R<sub>f</sub>\",\n        \"rfilter\": \"R<sub>filter</sub>\",\n        \"rin\": \"R<sub>in</sub>\",\n        \"total\": \"Total\",\n        \"x-title\": \"周波数\"\n      },\n      \"hover-graph-legend\": {\n        \"opi\": \"Op Amp I: \",\n        \"opi2\": \"Op Amp 2 I: \",\n        \"opv\": \"Op Amp V: \",\n        \"opv2\": \"Op Amp 2 V: \",\n        \"rf\": \"Rf: \",\n        \"rfilter\": \"Rfilter: \",\n        \"rin\": \"Rin: \",\n        \"total\": \"Total: \",\n        \"x-title\": \"周波数: \",\n        \"x-unit\": \"Hz\",\n        \"y-unit\": \"V/√Hz\"\n      },\n      \"title\": \"スペクトラル・ノイズ密度\",\n      \"tooltip\": \"Spectral Noise Density\",\n      \"x-title\": \"周波数(Hz)\",\n      \"y-title\": \"スペクトラル・ノイズ密度 (V/√Hz)\"\n    }\n  },\n  \"help\": {\n    \"bias-polarity\": {\n      \"title\": \"フォトダイオード・バイアス\"\n    },\n    \"circuit-peaking\": {\n      \"title\": \"出力信号:ピーキング\"\n    },\n    \"circuit-stages\": {\n      \"title\": \"段\"\n    },\n    \"dynamic-range\": {\n      \"title\": \"SNR/ダイナミック・レンジ\"\n    },\n    \"equivalent-circuit\": {\n      \"title\": \"フォトダイオードの等価回路\"\n    },\n    \"frequency-response\": {\n      \"title\": \"周波数応答\"\n    },\n    \"main-help\": {\n      \"title\": \"フォトダイオード回路設計ウィザードのヘルプ\"\n    },\n    \"noise-gain\": {\n      \"title\": \"ノイズ・ゲイン\"\n    },\n    \"opamp\": {\n      \"title\": \"オペアンプ\"\n    },\n    \"peak-current\": {\n      \"title\": \"フォトダイオードの仕様:ピーク電流\"\n    },\n    \"peak-voltage\": {\n      \"title\": \"出力信号:ピーク電圧\"\n    },\n    \"photodiode-capacitance\": {\n      \"title\": \"フォトダイオードの仕様:容量(C<sub>D</sub>)\"\n    },\n    \"pulse-response\": {\n      \"title\": \"パルス応答\"\n    },\n    \"quick-results\": {\n      \"title\": \"クイック・リザルト\"\n    },\n    \"reverse-voltage\": {\n      \"title\": \"フォトダイオード・バイアス:  逆電圧 (V<sub>R</sub>)\"\n    },\n    \"shunt-resistance\": {\n      \"title\": \"フォトダイオードの仕様:シャント抵抗(R<sub>SH</sub>)\"\n    },\n    \"spectral-noise-density\": {\n      \"title\": \"スペクトル・ノイズ密度\"\n    },\n    \"stability\": {\n      \"title\": \"安定性\"\n    },\n    \"supply-voltage\": {\n      \"title\": \"供給電圧\"\n    },\n    \"target-speed\": {\n      \"title\": \"出力信号:スピード\"\n    },\n    \"why-the-spares\": {\n      \"title\": \"なぜ予備品?\"\n    }\n  },\n  \"main\": {\n    \"busy\": \"処理中・・・\",\n    \"next-tab\": \"次のタブ\",\n    \"previous-tab\": \"前のタブ\",\n    \"title\": \"フォトダイオード 回路設計 ウィザード\"\n  },\n  \"marginal-design\": {\n    \"button\": \"設計限界を示します\",\n    \"message\": \"ロバストな設計回路を作成するために、上記のような設計回路のパラメータを調整する事をお勧めします。 もしそれができなければ、動作すると思われるオペアンプを探す事は困難です。 ツールはこの設計回路で次の問題を認識しました。 \"\n  },\n  \"menu\": {\n    \"links\": {\n      \"feedback\": \"ご意見 ・ ご要望\",\n      \"help\": \"ヘルプ\",\n      \"load\": \"設計を読み込む\",\n      \"save\": \"保存\"\n    },\n    \"tabs\": {\n      \"circuit-design\": \"回路設計\",\n      \"next-steps\": \"次のステップ\",\n      \"photodiode\": \"フォトダイオード\"\n    }\n  },\n  \"model-error\": {\n    \"amp_status_bias_current_is\": \"高い出力オフセット(バイアス電流は {data})\",\n    \"amp_status_big_2nd_stage_gain\": \"要求される2段目のゲインは {data}\",\n    \"amp_status_cf_less_100fF\": \"Cf < 0.1pF\",\n    \"amp_status_cf_less_50fF\": \"Cf < 50fF\",\n    \"amp_status_cfb_no_cf\": \"現在の帰還アンプでは帰還パスのコンデンサに対応できません。\",\n    \"amp_status_cfb_rf_too_small\": \"无法驱动Rf; \",\n    \"amp_status_dB_error\": \"データベース・エラー - データベースの一部間違ったデータ\",\n    \"amp_status_gbw_less_than_bandwith_requested\": \"Op Amp GBW less than bandwidth requested \",\n    \"amp_status_high_vos\": \"高い出力オフセット(入力 Vosは {data})\",\n    \"amp_status_internal_cf_too_high\": \"内部フィードバック容量が高すぎる\",\n    \"amp_status_min_stable_gain\": \"最小安定ゲイン= {data}\",\n    \"amp_status_not_enough_peaking\": \"充分なピークを作成できません\",\n    \"amp_status_not_fast_enough\": \"速度が十分でありません\",\n    \"amp_status_quad\": \"クワッド\",\n    \"amp_status_slew_rate_low\": \"スルーレートの値が低すぎます\",\n    \"amp_status_slew_rate_marginal\": \"スルーレートが不十分\",\n    \"amp_status_specialty_amp\": \"特殊機能アンプ\",\n    \"amp_status_too_fast\": \"高速アンプ=低SNR\",\n    \"amp_status_voltage_not_enough\": \"電圧範囲はピーク出力電圧に対して不十分です\",\n    \"amp_status_zero_drift\": \"ゼロ・ドリフト\",\n    \"fixed_op_amp_no_good\": \"{partName}で設計要求を満たすことはできません。別のオペアンプを選択するか、オペアンプのロックを解除してプログラムを使って選択してください。<br/><br/>{partName}は理由として適していません。:\",\n    \"internal_cf_too_high\": \"{partName}の内部フィードバック容量は{cfint}Fです。そのため、標準的なアンプでは通常{cf}Fの帰還容量が、{partName}では{cfext}Fとなります。  <br/><br/>{partName}が不向きな理由:\",\n    \"no_op_amps_available_for_first_stage_too_fast\": \"<p>設計要求を満たす1段目のオペアンプはありません。</p><p>以下をお試しください: <ul><li>速度に対する要求を低くしてください</li><li>フォトダイオードの容量を小さくしてください</li><li>ピーク出力電圧を低くしてください</li><li>フォトダイオードのピーク電流を増やす</li></ul></p>\",\n    \"no_op_amps_available_for_first_stage_too_slow\": \"<p>これらの設計要求を満たすオペアンプはありません。</p><p>以下をお試しください: <ul><li>2段回路構成を選んでください</li><li>速度に対する要求を低くしてください</li><li>フォトダイオードの容量を小さくしてください</li><li>ピーク出力電圧を低くしてください</li><li>フォトダイオードのピーク電流を増やしてください</li></ul></p>\",\n    \"no_op_amps_available_for_second_stage\": \"<p>設計要求を満たす2段目のオペアンプはありません。</p><p>解決方法: <ul><li>速度に対する要求を低くしてください</li><li>ピーク出力電圧を低くしてください</li></ul></p>\",\n    \"no_op_amps_available_for_single_stage_too_fast\": \"<p>これらの設計要求を満たすオペアンプはありません。</p><p>以下をお試しください: <ul><li>2段回路構成を選んでください</li><li>速度に対する要求を低くしてください</li><li>フォトダイオードの容量を小さくしてください</li><li>ピーク出力電圧を低くしてください</li><li>フォトダイオードのピーク電流を増やしてください</li></ul></p>\",\n    \"no_op_amps_available_for_single_stage_too_slow\": \"<p>これらの設計要求を満たすオペアンプはありません。</p><p>以下をお試しください: <ul><li>速度を増やす</li><li>フォトダイオードの容量を大きくする</li><li>ピーク出力電圧を大きくする</li><li>フォトダイオードのピーク電流を減少させる</li></ul></p>\",\n    \"peak_light_error\": \"お客様が入力したピーク電流は許容範囲内に入りません ({min} - {max})。 値を更新してください。\",\n    \"peak_photodiode_error\": \"ピーク電流は許容範囲内に入りません ({min} - {max})。\",\n    \"rf_too_high\": \"<p>必要となるゲインは1段のアンプ構成としては高過ぎます。</p><p>解決方法: <ul><li>2段回路構成を選んでください</li><li>ピーク出力電圧を低くしてください</li><li>フォトダイオードのピーク電流を増やしてください</li></ul></p>\"\n  },\n  \"opamp-selection\": {\n    \"GBW\": \"GBW\",\n    \"cancel\": \"キャンセル\",\n    \"comment-drop-down\": {\n      \"message\": {\n        \"amp_status_bias_current_is\": \"高い出力オフセット(バイアス電流は {value}A)\",\n        \"amp_status_big_2nd_stage_gain\": \"要求される2段目のゲインは {value}\",\n        \"amp_status_cf_less_100fF\": \"Cf < 0.1pF\",\n        \"amp_status_cf_less_50fF\": \"Cf < 50fF\",\n        \"amp_status_cfb_no_cf\": \"現在の帰還アンプでは帰還パスのコンデンサに対応できません。\",\n        \"amp_status_cfb_rf_too_small\": \"无法驱动Rf; \",\n        \"amp_status_dB_error\": \"データベース・エラー - データベースの一部間違ったデータ\",\n        \"amp_status_gbw_less_than_bandwith_requested\": \"Op Amp GBW less than bandwidth requested \",\n        \"amp_status_high_vos\": \"高い出力オフセット(入力 Vosは {value}V)\",\n        \"amp_status_internal_cf_too_high\": \"内部フィードバック容量が高すぎる\",\n        \"amp_status_last_time_buy\": \"ラスト・タイム・バイ\",\n        \"amp_status_min_stable_gain\": \"最小安定ゲイン= {value}  \",\n        \"amp_status_not_allowed\": \"使用できません:\",\n        \"amp_status_not_enough_peaking\": \"充分なピークを作成できません\",\n        \"amp_status_not_fast_enough\": \"速度が十分でありません\",\n        \"amp_status_not_recommended\": \"非推奨:\",\n        \"amp_status_not_recommended_for_new_designs\": \"新規設計にお勧めしません。\",\n        \"amp_status_obsolete\": \"生産中止\",\n        \"amp_status_quad\": \"クワッド\",\n        \"amp_status_recommended\": \"推奨\",\n        \"amp_status_slew_rate_low\": \"スルーレートの値が低すぎます\",\n        \"amp_status_slew_rate_marginal\": \"スルーレートが不十分\",\n        \"amp_status_specialty_amp\": \"特殊機能アンプ\",\n        \"amp_status_too_fast\": \"高速アンプ=低SNR\",\n        \"amp_status_voltage_not_enough\": \"電圧範囲はピーク出力電圧に対して不十分です\",\n        \"amp_status_zero_drift\": \"ゼロ・ドリフト\"\n      },\n      \"not-allowed\": \"許可されていない\",\n      \"not-allowed-match\": \"使用できません\",\n      \"not-recommended\": \"おススメではない\",\n      \"not-recommended-match\": \"非推奨\",\n      \"recommended\": \"お勧め\",\n      \"recommended-match\": \"推奨\",\n      \"show-all\": \"すべて表示\"\n    },\n    \"comments\": \"コメント\",\n    \"part-label\": \"部品\",\n    \"row-count\": \"'{count, plural, =0 {{total}製品中#個のオペアンプを表示しています。フィルタを確認してください。} other {{total}製品中#個のオペアンプを表示しています。}}'\",\n    \"select\": \"選ぶ\",\n    \"spice-drop-down\": {\n      \"no\": \"いいえ\",\n      \"show-all\": \"すべて表示\",\n      \"yes\": \"はい\"\n    },\n    \"status-drop-down\": {\n      \"not-recommended\": \"新規設計には非推奨\",\n      \"not-recommended-match\": \"Not Recommended for New Designs\",\n      \"production\": \"生産/供給中\",\n      \"production-match\": \"Production\",\n      \"recommended\": \"新規設計にお薦めします。\",\n      \"recommended-match\": \"Recommended for New Designs\",\n      \"show-all\": \"すべて表示\"\n    },\n    \"supply-max\": \"最大供給\",\n    \"supply-min\": \"最少供給\",\n    \"temp-range\": \"温度範囲\",\n    \"title\": \"オペアンプを選ぶ\"\n  },\n  \"parameter-selector\": {\n    \"choose-parameters\": \"パラメータを選ぶ\",\n    \"ok\": \"OK\"\n  },\n  \"sensor-selection\": {\n    \"active-area\": \"アクティブ領域\",\n    \"cancel\": \"キャンセル\",\n    \"capacitance\": \"静電容量\",\n    \"dark-current\": \"暗電流\",\n    \"manufacturer\": \"メーカー名\",\n    \"operating-temperature\": \"動作温度\",\n    \"package\": \"梱包\",\n    \"part-number\": \"部品番号\",\n    \"product-page\": \"製品ページ\",\n    \"resistance\": \"抵抗\",\n    \"response-time\": \"応答時間\",\n    \"reverse-breakdown\": \"逆方向ブレークダウン\",\n    \"row-count\": \"'{count, plural, =0 {{total}製品中#個のセンサーを表示しています。フィルタを確認してください。} other {{total}製品中#個のセンサーを表示しています。}}'\",\n    \"select\": \"選ぶ\",\n    \"sensitivity\": \"感度\",\n    \"spectral-peak\": \"スペクトルのピーク\",\n    \"spectral-range\": \"スペクトル範囲\",\n    \"spice\": \"SPICE\",\n    \"spice-file\": \"SPICEファイル\",\n    \"title\": \"センサーをお選びください。\",\n    \"vendor-link\": \"ベンダーのデータシートリンク\",\n    \"viewing-angle\": \"視野角\"\n  },\n  \"settings\": {\n    \"circuit-design\": {\n      \"enob\": \"ENOB: {enob} bits\",\n      \"one-stage\": \"1 段\",\n      \"opamp-lock\": \"Lock\",\n      \"opamp-stage1\": \"1段\",\n      \"opamp-stage2\": \"2段\",\n      \"opamps\": \"Op Amps:\",\n      \"opamps-tooltip\": \"Op Amp\",\n      \"output-offset\": \"出力オフセット: {offset}V\",\n      \"output-signal\": \"出力信号\",\n      \"peak-voltage\": \"ピーク電圧 (V<sub>P</sub>)\",\n      \"peak-voltage-tooltip\": \"ピーク電圧\",\n      \"peaking\": \"ピーク\",\n      \"peaking-high\": \"高\",\n      \"peaking-low\": \"低\",\n      \"peaking-tooltip\": \"ピーク\",\n      \"quick-results\": \"クイック・リザルト\",\n      \"quick-results-tooltip\": \"クイック・リザルト\",\n      \"snr\": \"SNR: {snr} dB\",\n      \"stages\": \"段\",\n      \"stages-tooltip\": \"段\",\n      \"target-bandwidth\": \"Target Bandwidth\",\n      \"target-option-band\": \"帯域幅\",\n      \"target-option-pulse\": \"パルス幅\",\n      \"target-pulse-width\": \"目標とする速度\",\n      \"target-speed-tooltip\": \"Speed\",\n      \"two-stage\": \"2 段\"\n    },\n    \"next-steps\": {\n      \"get-files\": \"ファイル取得\",\n      \"get-files-all\": \"設計用ファイル\",\n      \"get-files-all-tooltip\": \"SPICEファイル、BOM、評価ボードデザインファイル、PDFファイルのバージョン情報等が格納されたzipファイルをダウンロードする \",\n      \"get-files-spice\": \"SPICE ファイル\",\n      \"get-files-spice-tooltip\": \"SPICEファイルを含んだzipファイルをダウンロード\",\n      \"mail\": \"同僚にメールする(email)\",\n      \"mail-tooltip\": \"同僚に送る\",\n      \"order\": \"注文\",\n      \"order-samples\": \"サンプル注文\",\n      \"order-samples-tooltip\": \"構成部品のサンプルを注文\",\n      \"share\": \"共有\"\n    },\n    \"photodiode\": {\n      \"bias-polarity-tooltip\": \"フォトダイオードのバイアス電圧\",\n      \"capacitance-1\": \"静電容量 (C<sub>D</sub>)\",\n      \"capacitance-2\": \"@ V<sub>R</sub> = {vr} V\",\n      \"capacitance-tooltip\": \"静電容量\",\n      \"capacitance-warning\": \"Be careful. This is the capacitance at <u>your</u> reverse voltage, which may be different than what is specified in the datasheet table. You may need to read this value from a datasheet graph instead.\",\n      \"or\": \"または\",\n      \"peak-current\": \"ピーク電流 (I<sub>P</sub>)\",\n      \"peak-current-tooltip\": \"ピーク電流\",\n      \"photodiode-bias\": \"フォトダイオードのバイアス電圧\",\n      \"photodiode-select\": \"フォトダイオードを選択\",\n      \"photodiode-specs\": \"フォトダイオードの仕様\",\n      \"reverse-voltage\": \"逆電圧 (V<sub>R</sub>)\",\n      \"reverse-voltage-negative\": \"負\",\n      \"reverse-voltage-positive\": \"正\",\n      \"reverse-voltage-tooltip\": \"逆電圧\",\n      \"shunt-resistance\": \"フォトダイオードのシャント抵抗 (R<sub>SH</sub>)\",\n      \"shunt-resistance-tooltip\": \"フォトダイオードのシャント抵抗\"\n    }\n  },\n  \"units\": {\n    \"A\": \"A\",\n    \"F\": \"F\",\n    \"Q\": \"Q\",\n    \"R\": \"Ω\",\n    \"V\": \"V\",\n    \"active-area\": \"mm<sup>2</sup>\",\n    \"dB\": \"dB\",\n    \"farad\": \"F\",\n    \"hertz\": \"Hz\",\n    \"meters\": \"m\",\n    \"ohm\": \"Ohm\",\n    \"operating-temperature\": \"&deg;C\",\n    \"peak-light-intensity\": \" W/m<sup>2</sup>\",\n    \"seconds\": \"s\",\n    \"sensitivity\": \"A/W\",\n    \"unit-price\": \"$ US\",\n    \"viewing-angle\": \"&deg;\",\n    \"volts-per-amp\": \"V/A\",\n    \"volts-per-volt\": \"V/V\"\n  },\n  \"validation-error\": {\n    \"button-tooltip\": \"エラーを修正してから続けてください。\",\n    \"capacitance\": \"コンデンサ値は次の範囲にある必要があります: {min} ~ {max}\",\n    \"invalid-input-error\": \"{field}フィールドに入力された{value}という値は解析できません。\",\n    \"min-pulse-speed\": \"速度の値は次の範囲にある必要があります: {min} ~ {max}\",\n    \"no-opamp-found\": \"None found\",\n    \"peak-current\": \"ピーク電流値は次の範囲にある必要があります: {min} ~ {max}\",\n    \"peak-light-intensity\": \"光量のピーク強度の範囲: {min} ~ {max}\",\n    \"peak-voltage\": \"ピーク電圧値は次の範囲にある必要があります: {min} ~ {max}\",\n    \"reverse-voltage\": \"逆電圧値は次の範囲にある必要があります: {min} ~ {max}\",\n    \"shunt-resistance\": \"シャント抵抗値は次の範囲にある必要があります: {min} ~ {max}\",\n    \"speed\": \"速度の値は次の範囲にある必要があります: {min} ~ {max}\"\n  }\n}], [\"zh-cn\", {\n  \"controls\": {\n    \"future\": {\n      \"placeholder\": \"未来发展的占位符\",\n      \"q\": \"Q\"\n    },\n    \"schematic-table\": {\n      \"model\": {\n        \"photodiode\": {\n          \"bias\": \"偏见\",\n          \"cd\": \"光盘\",\n          \"circuitName\": \"电路名称\",\n          \"ip\": \"ip\",\n          \"rsh\": \"rsh\",\n          \"vBias\": \"偏差\",\n          \"vr\": \"虚拟现实\"\n        },\n        \"stage1\": {\n          \"bw\": \"体重\",\n          \"cf\": \"参考\",\n          \"cin\": \"辛\",\n          \"opamp\": {\n            \"partNumber\": \"运算放大器\"\n          },\n          \"q\": \"q\",\n          \"rf\": \"射频\",\n          \"rin\": \"凛\",\n          \"title\": \"阶段1\"\n        },\n        \"stage2\": {\n          \"bw\": \"bw\",\n          \"cfilter\": \"cfilter\",\n          \"opamp\": {\n            \"partNumber\": \"opAmp\"\n          },\n          \"rf\": \"rf\",\n          \"rfilter\": \"rfilter\",\n          \"rg\": \"rg\",\n          \"title\": \"Stage 2\"\n        }\n      },\n      \"title\": \"光电二极管\"\n    }\n  },\n  \"current-calculation\": {\n    \"active-area\": \"有效面积:\",\n    \"cancel\": \"取消\",\n    \"equals\": \" = \",\n    \"instruction\": \"输入光强度峰值或光电二极管峰值电流:\",\n    \"multiply\": \" X \",\n    \"peak-current\": \"光电二极管峰值电流:\",\n    \"peak-light-intensity\": \"光强度峰值:\",\n    \"sensitivity\": \"灵敏度:\",\n    \"title\": \"光电二极管峰值电流计算\",\n    \"use-this-peak\": \"采用该峰值电流\"\n  },\n  \"dialogs\": {\n    \"download\": {\n      \"error-message\": \"<p>无法获取设计文件。出现此错误的原因可能有:</p><p>1)与服务器的连接中断。</p><p>2)服务中断。</p>\",\n      \"error-title\": \"下载\"\n    },\n    \"feedback\": {\n      \"email\": \"电子邮件:\",\n      \"feedback\": \"你的反馈:\",\n      \"feedback-dialog-ng-message\": \"您的反馈发送失败。可能是由于服务器的连接问题,请尝试再次发送。\",\n      \"feedback-dialog-ok-message\": \"您的反馈已经发送。\",\n      \"give-feedback\": \"给予反馈\",\n      \"invitation\": \"请告诉我们你对这款工具的看法,任何好的或坏的。 \",\n      \"name\": \"姓名:\",\n      \"optional\": \"(Optional)\",\n      \"title\": \"提交您的意见或反馈!\"\n    },\n    \"load\": {\n      \"invalid-file\": \"设计文件无效。请验证您尝试加载的设计文件的内容。\",\n      \"invalid-parts\": \"{numParts,plural,other{如果不能加载设计,接下来的设计文件将不支持这个应用:}}{parts}\",\n      \"no-opamps\": \"运算放大器数据不可用。无法加载设计。请尝试刷新浏览器。如果问题依然存在,请使用光电二极管设计向导右上方的反馈按钮来报告该问题。\",\n      \"title\": \"加载设计\"\n    },\n    \"samples\": {\n      \"title\": \"申请样片\"\n    },\n    \"save\": {\n      \"error-message\": \"無法保存設計。保存前請檢查您輸入的數據是否正確。\",\n      \"error-title\": \"保存設計\"\n    },\n    \"share\": {\n      \"share-dialog-ng-message\": \"无法共享设计,这可能是因为服务器连接问题。请重试。\",\n      \"share-dialog-ok-message\": \"已共享设计\",\n      \"title\": \"通过邮件发送我的设计\"\n    },\n    \"system\": {\n      \"application-busy\": \"处理中...\",\n      \"connecting-to\": \"Connecting to {tool}...\",\n      \"download-create-bom\": \"正在创建BOM文件...\",\n      \"download-create-data\": \"正在创建数据文件...\",\n      \"download-create-design\": \"正在创建设计文件...\",\n      \"download-create-eval-board\": \"正在创建评估板文件...\",\n      \"download-create-graph\": \"正在创建图形数据...\",\n      \"download-create-pdf\": \"正在创建PDF文件...\",\n      \"download-create-spice\": \"正在创建SPICE文件...\",\n      \"download-downloading\": \"正在下载……\",\n      \"download-requesting\": \"正在请求……\",\n      \"error-config-data\": \"配置数据不可用。由于因此无法正确验证光电二极管规格,无法继续进行操作。请尝试刷新浏览器。如果问题依然存在,请使用光电二极管设计向导右上方的反馈按钮来报告该问题。\",\n      \"error-opamp-data\": \"运算放大器数据不可用。光电二极管设计向导无法继续运行。请保存您的设计,然后尝试刷新浏览器。如果问题依然存在,请使用光电二极管设计向导右上方的反馈按钮来报告该问题。\",\n      \"error-pst-data\": \"数据映射暂时不可用,因此无法显示运算放大器表。请保存您的设计,然后尝试刷新浏览器。如果问题依然存在,请使用光电二极管设计向导右上方的反馈按钮来报告该问题。\",\n      \"error-sensor-data\": \"传感器数据暂时不可用,因此无法显示传感器表。请保存您的设计,然后尝试刷新浏览器。如果问题依然存在,请使用光电二极管设计向导右上方的反馈按钮来报告该问题。\",\n      \"loading-opamp-data\": \"加载 OpAmp 数据...\",\n      \"sending-filter\": \"Sending filter to {tool}...\",\n      \"title\": \"应用消息\"\n    }\n  },\n  \"download\": {\n    \"data-files\": {\n      \"frequency-response\": {\n        \"frequency\": \"频率\",\n        \"magnitude\": \"幅度\"\n      },\n      \"noise-gain\": {\n        \"caps\": \"(Cin + Cf) / Cf\",\n        \"frequency\": \"频率\",\n        \"noise-gain\": \"噪声增益\",\n        \"opamp-gain\": \"运算放大器增益\",\n        \"zero\": \"(Cin || Cf) (Rin || Rf) </br> Zero\"\n      },\n      \"pulse-response\": {\n        \"pulse-response\": \"脉冲响应\",\n        \"time-axis\": \"时间轴\"\n      },\n      \"spectral-noise\": {\n        \"frequency\": \"频率\",\n        \"opi\": \"Op Amp I\",\n        \"opi2\": \"Op Amp 2 I\",\n        \"opv\": \"Op Amp V\",\n        \"opv2\": \"Op Amp 2 V\",\n        \"rf\": \"Rf\",\n        \"rfilter\": \"Rfilter\",\n        \"rin\": \"Rin\",\n        \"total\": \"Total\"\n      }\n    },\n    \"pdf-content\": {\n      \"pdf-data-fields\": {\n        \"capacitance\": \"电容 (Cd)\",\n        \"one-stage\": \"单级\",\n        \"peak-current\": \"峰值电流 (Ip)\",\n        \"peak-voltage\": \"峰值电压 (Vp)\",\n        \"photodiode-bias\": \"光电二极管偏置\",\n        \"requested-bandwidth\": \"要求带宽\",\n        \"reverse-voltage\": \"反向电压 (Vr)\",\n        \"sensor\": \"传感器\",\n        \"shunt-resistance\": \"分流电阻 (Rsh)\",\n        \"stages\": \"级数\",\n        \"two-stage\": \"双级\"\n      },\n      \"pdf-data-ie-image-missing\": \"很遗憾,若您使用IE 8或更低版本的IE浏览该工具,将无法生成图片。若您想要浏览页面上的图片,请使用Firefox、Chrome、IE 9或更高版本的IE浏览器。\",\n      \"pdf-desc\": \"{desc}\\n\\n由{user}在{date}上创建\",\n      \"pdf-desc-no-design-name\": \"由 {user} 创建于{date}\",\n      \"pdf-desc-no-name-desc\": \"创建于{date}\",\n      \"pdf-desc-no-user-name\": \"{desc}\\n\\n创建于 {date}\",\n      \"pdf-heading\": \"光电二极管设计报告\",\n      \"pdf-page-headers\": {\n        \"bill-of-materials\": \"物料清单\",\n        \"circuit\": \"电路\",\n        \"frequency-response\": \"频率响应\",\n        \"noise-gain\": \"噪声增益\",\n        \"pulse-response\": \"脉冲响应\",\n        \"snr\": \"SNR\",\n        \"spectral-noise\": \"频谱噪声密度\"\n      },\n      \"pdf-subheading\": \"Photodiode属性和器件\",\n      \"pdf-tool-name\": \"光电二极管\"\n    },\n    \"spice-files\": {\n      \"message_netlist_readme\": \"This directory (Spice Files) contains three simulation-ready SPICE netlists.\\r\\nThese netlists contain the photodiode amplifier design generated by Photodiode \\r\\nWizard, and the corresponding SPICE macromodels for the selected op amp(s). \\r\\nAlso included is a suitable input signal, and appropriate analysis mode \\r\\n(.AC, .TRAN, .NOISE).\\r\\n\\nThese netlists are text-based .cir files, and should be compatible with a wide\\r\\nvariety of SPICE simulators.  More information about text-based SPICE netlists\\r\\ncan be found at: http://bwrcs.eecs.berkeley.edu/Classes/IcBook/SPICE/ \\r\\n\\n\\t- ACAnalysis.cir: Simulates AC response of the photodiode amplifier design. \\r\\n\\t                  Output of circuit can be plotted by probing V(OUT) \\r\\n\\n\\t- TransientAnalysis.cir: Simulates the step response of the photodiode \\r\\n\\t                         amplifier design. Output of circuit can be plotted by \\r\\n\\t                         probing V(OUT) \\r\\n\\n\\t- NoiseAnalysis.cir: Simulates the noise of the photodiode amplifier design. \\r\\n\\t                     Noise gain can be plotted by probing GAIN, or \\r\\n\\t                     V(ONOISE)/V(INOISE) \\r\\n\\n\\nAny questions about these SPICE netlists, or about Photodiode Wizard in general \\r\\ncan be submitted at: \\r\\nhttp://ez.analog.com/community/amplifiers/operational-amplifiers \\r\\n\",\n      \"message_netlist_readme_filename\": \"README.txt\",\n      \"message_no_netlist_filename\": \"Why no netlist files.txt\",\n      \"message_no_schematic\": \"既然 LTspice 是ADI公司的一部分,我们可将SPICE网络列表转换为 LTspice 模型。设计中的运算放大器当前没有可用的 LTspice 模型。如果您希望ADI优先考虑针对特定器件生成 LTspice 模型,请告诉您的销售代表或通过此工具发送反馈。\\r\\n\\r\\n由您设计中的器件支持的SPICE仿真:\\r\\n\",\n      \"message_no_schematic_filename\": \"Why no LTspice.txt\",\n      \"message_no_schematic_no_netlist\": \"ADI当前正处于将运算放大器从SPICE网络列表转换为LTspice模型的过程。您的设计包含一系列器件,有些器件具有基于文本的网络列表,而另一些具有LTspice文件。为此,该工具无法生成任何SPICE输出。对于由此带来的不便,我们表示歉意并将努力解决此问题。如果您希望ADI优先考虑针对特定器件生成LTspice模型,请告诉您的销售代表或通过此工具发送反馈。\\r\\n\\r\\n由您设计中的器件支持的SPICE仿真:\\r\\n\",\n      \"message_no_schematic_no_netlist_filename\": \"README.txt\",\n      \"message_part_no_netlist\": \"以下部分无法生成网表模型信息。\\r\\n\",\n      \"message_part_no_spice_info\": \"The following op amps in your design do not have LTspice models or text netlist models.\\r\\nIf you would like ADI to prioritize LTspice model generation for a particular part, please let your sales representative know or send feedback through this tool.\\r\\n\",\n      \"message_part_no_spice_info_filename\": \"Why no spice files.txt\"\n    }\n  },\n  \"ember-aditools-page\": {\n    \"card\": {\n      \"checkbox-tooltip\": \"Toggle\",\n      \"help-tooltip\": \"Click for help\",\n      \"part-number-tooltip\": \"Click to select part\"\n    },\n    \"common\": {\n      \"cancel\": \"取消\",\n      \"close\": \"关闭\",\n      \"load\": \"加载\",\n      \"ok\": \"确定\",\n      \"open\": \"打开\",\n      \"save\": \"保存\",\n      \"select\": \"选择\"\n    },\n    \"dialogs\": {\n      \"feedback\": {\n        \"email\": \"电子邮件:\",\n        \"feedback\": \"你的反馈:\",\n        \"give-feedback\": \"给予反馈\",\n        \"invitation\": \"请告诉我们你对这款工具的看法,任何好的或坏的。 \",\n        \"name\": \"姓名:\",\n        \"optional\": \"(Optional)\",\n        \"title\": \"提交您的意见或反馈!\"\n      },\n      \"load\": {\n        \"choose-button\": \"选择文档\",\n        \"message\": \"从计算机文件中加载设计\",\n        \"no-file-selected\": \"No file selected.\",\n        \"title\": \"加载设计\"\n      },\n      \"samples\": {\n        \"add-button\": \"添加所选样片至购物车\",\n        \"add-link\": \"Add to Order\",\n        \"add-to-cart-column\": \"样片加入购物车\",\n        \"model-column\": \"元器件模型/封装\",\n        \"part-column\": \"组成部分\",\n        \"quantities-warning\": \"ADI公司向符合条件的客户免费限量提供样片。 出于客户对我们产品样片有大量需求,两周内,每款器件您只能申请2片,每份申请最多申请4款器件。 如果您的设计需要额外数量的产品,请在网站上通过在线购买或者联系我们的授权代理商购买。\",\n        \"title\": \"申请样片\",\n        \"unavailable-message\": \"无法申请样片\"\n      },\n      \"save\": {\n        \"save-desc-error\": \"请提供描述\",\n        \"save-desc-field\": \"介绍\",\n        \"save-name-error\": \"请输入设计名称\",\n        \"save-name-field\": \"设计名称\",\n        \"title\": \"保存\"\n      },\n      \"share\": {\n        \"share-button\": \"Email\",\n        \"share-design-information\": \"<p>若要共享您的设计副本,请在 <b>发件人名称</b> 字段中输入您的姓名。然后在 <b>共享设计</b> 字段中输入收件人的电子邮件地址。多个收件人的地址需分行填写。</p><p>收件人将收到ADI发出的电子邮件,内含包括共享设计ZIP存档的附件。您只需要从ZIP文件中提取设计并使用应用的“加载设计”功能上传。</p><p>本过程为每个收件人创建一份设计副本。收件人编辑他们的副本并不会影响您保存在您自己的电脑中的设计。</p>\",\n        \"share-dialog-ng-message\": \"无法共享设计,这可能是因为服务器连接问题。请重试。\",\n        \"share-dialog-ok-message\": \"已共享设计\",\n        \"share-duplicate-email\": \"找到重复的电子邮件\",\n        \"share-email-empty-error\": \"请输入电子邮件地址\",\n        \"share-email-field\": \"收件人\",\n        \"share-email-format-error\": \"您输入的电子邮件地址中有一个或多个无效,请更正后重试。\",\n        \"share-email-placeholder\": \"电子邮件地址\",\n        \"share-name-error\": \"请输入设计名称\",\n        \"share-name-field\": \"设计名称\",\n        \"share-sender-error\": \"请提交收件人姓名\",\n        \"share-sender-field\": \"收件人姓名\",\n        \"title\": \"通过邮件发送我的设计\"\n      },\n      \"system\": {\n        \"application-busy\": \"处理中...\",\n        \"title\": \"应用消息\"\n      }\n    },\n    \"footer\": {\n      \"accessibility\": \"可访问性\",\n      \"cookie-settings\": \"Cookie设置\",\n      \"copyright-text\": \"1995 - 2025 Analog Devices, Inc. 保留所有权利\",\n      \"icp-id\": \"<a href=\\\"https://beian.miit.gov.cn/\\\">沪ICP备09046653号-1</a>\",\n      \"legal\": \"法律与风险\",\n      \"privacy-policy\": \"隐私政策\",\n      \"privacy-settings\": \"隐私设置\",\n      \"sitemap\": \"网站地图\"\n    },\n    \"header\": {\n      \"applications\": \"应用\",\n      \"company\": \"公司\",\n      \"design-center\": \"设计中心\",\n      \"education\": \"教育培训\",\n      \"parametric-search\": \"参数搜索\",\n      \"products\": \"产品\",\n      \"spoken\": {\n        \"homepage\": \"ADI主页\",\n        \"sitelinks\": \"ADI网站链接\"\n      },\n      \"support\": \"支持\"\n    },\n    \"menubar\": {\n      \"chinese\": \"简体中文\",\n      \"english\": \"English\",\n      \"help\": \"帮助\",\n      \"japanese\": \"日本語\",\n      \"load\": \"加载设计\",\n      \"save\": \"保存\"\n    },\n    \"studio\": {\n      \"adcdriver\": \"ADC驱动器\",\n      \"dacebc\": \"DAC\",\n      \"diamond\": \"仪表放大器\",\n      \"filterwizard\": \"模拟滤波器\",\n      \"noise\": \"噪声\",\n      \"photodiode\": \"光电二极管\",\n      \"precisionstudio\": \"ADI<span class=''service-mark''>℠</span> Precision Studio\",\n      \"signalchaindesigner\": \"Signal Chain\",\n      \"simdds\": \"DDS\",\n      \"spoken\": {\n        \"studiolinks\": \"ADI Precision Studio链接\"\n      },\n      \"virteval\": \"Virtual Eval\"\n    },\n    \"toolbar\": {\n      \"actions\": \"Actions\"\n    }\n  },\n  \"figures\": {\n    \"bom\": {\n      \"description\": \" 点击“获取设计文件”下载Zip包,其中包含一张表格形式的物料清单。\",\n      \"designator\": \"标识\",\n      \"extra-components\": {\n        \"header\": \"表头\",\n        \"jumper\": \"跳线\",\n        \"sma-jack\": \"SMA插孔、插口式电路板边缘\",\n        \"sma-male\": \"插入式-插入式SMA\",\n        \"socket\": \"插座\",\n        \"test-pin\": \"测试引脚\"\n      },\n      \"material\": \"材料\",\n      \"materials\": {\n        \"tantalum\": \"钽\"\n      },\n      \"package\": \"封装\",\n      \"quantity\": \"数量\",\n      \"title\": \"材料清单(BOM)\",\n      \"tolerance\": \"容差\",\n      \"value\": \"值\"\n    },\n    \"frequency-response\": {\n      \"fn\": \"f<tspan dy=\\\"5px\\\">N</tspan><tspan dy=\\\"-5px\\\"> = {fn}Hz</tspan>\",\n      \"hover-graph-legend\": {\n        \"trans-gain\": \"跨阻增益: \",\n        \"x-title\": \"频率: \",\n        \"x-unit\": \"Hz\",\n        \"y-unit\": \"dB\",\n        \"y-unit2\": \"V/A\"\n      },\n      \"q\": \"Q = {q}\",\n      \"title\": \"频率响应\",\n      \"tooltip\": \"Frequency Response\",\n      \"x-title\": \"频率(Hz)\",\n      \"y-title\": \"跨阻增益({unit})\"\n    },\n    \"noise-gain\": {\n      \"graph-legend\": {\n        \"caps\": \"(C<sub>in</sub> + C<sub>f</sub>) / C<sub>f</sub>\",\n        \"noise-gain\": \"噪声增益\",\n        \"opamp-gain\": \"运算放大器增益\",\n        \"x-title\": \"频率\",\n        \"zero\": \"(C<sub>in</sub> || C<sub>f</sub>) (R<sub>in</sub> || R<sub>f</sub>) <br/> Zero\"\n      },\n      \"hover-graph-legend\": {\n        \"caps\": \"(Cin + Cf) / Cf: \",\n        \"noise-gain\": \"噪声增益: \",\n        \"opamp-gain\": \"运算放大器增益: \",\n        \"x-title\": \"频率: \",\n        \"x-unit\": \"Hz\",\n        \"y-unit\": \"dB\",\n        \"y-unit2\": \"V/V\",\n        \"zero\": \"(Cin || Cf) (Rin || Rf) Zero: \"\n      },\n      \"title\": \"噪声增益\",\n      \"tooltip\": \"噪声增益\",\n      \"x-title\": \"频率(Hz)\",\n      \"y-title\": \"增益({unit})\"\n    },\n    \"pulse-response\": {\n      \"hover-graph-legend\": {\n        \"circuit-output\": \"电路输出: \",\n        \"x-title\": \"时间: \",\n        \"x-unit\": \"s\",\n        \"y-unit\": \"伏\"\n      },\n      \"overshoot\": \"过冲 = {overshootPercent}%\",\n      \"rise-time\": \"上升时间(10%至90%)= {riseTime}s\",\n      \"title\": \"脉冲响应\",\n      \"tooltip\": \"Pulse Response\",\n      \"x-title\": \"时间(s)\",\n      \"y-title\": \"电路输出(伏)\"\n    },\n    \"schematic\": {\n      \"amp-single-stage-title-1\": \"互阻放大器\",\n      \"amp-single-stage-title-2\": \"\",\n      \"amp-single-stage-title-3\": \"\",\n      \"amp-stage-one-title-1\": \"第1级\",\n      \"amp-stage-one-title-2\": \"互阻放大器\",\n      \"amp-stage-one-title-3\": \"\",\n      \"amp-stage-two-title-1\": \"第2级\",\n      \"amp-stage-two-title-2\": \"额外的增益\",\n      \"amp-stage-two-title-3\": \"和滤波\",\n      \"bypass-capacitors\": \"旁路电容\",\n      \"equivalent-circuit-tooltip\": \"Equivalent Circuit\",\n      \"photodiode-model\": \"光电二极管模型 ( {pd} )\",\n      \"photodiode-model-custom\": \"定制\",\n      \"photodiode-model-next-steps\": \"型号: {pd}\",\n      \"photodiode-stage-title-1\": \"光电二极管\",\n      \"photodiode-stage-title-2\": \"\",\n      \"spares\": \"备件\",\n      \"supply-voltage-title-1\": \"电源电压\",\n      \"supply-voltage-title-2\": \"最小值: ± {minVoltage}V\",\n      \"supply-voltage-title-3\": \"最大值: ± {maxVoltage}V\",\n      \"supply-voltage-tooltip\": \"Supply Voltage\",\n      \"title\": \"电路\",\n      \"warning-cf-less-than-1pF\": \"警告:您的设计所需要的反馈电容Cf仅 {feedback}F. 在如此低的水平下,电路板电容将会显著 产生严重的峰化(Q)影响。实际Cf值应当被确定 根据您特定的PCB板凭经验确定。  由于该数值过低,工具未能转换 电容值转换为标准值。\",\n      \"warning-gain-greater-than-1-stable\": \"Warning:  This circuit may not be stable. The {opamp} is stable for noise gains of {gain} or greater. This means (Cd + Cf) / Cf should be larger than {gain}. In the circuit above Cd = {capacitance}F and Cf = {feedback}F, so (Cd + Cf) / Cf = {noise}. Make sure you verify in spice before building.\",\n      \"why-the-spares-tooltip\": \"Why the Spares?\"\n    },\n    \"snr\": {\n      \"enob\": \"ENOB = {enob} bits\",\n      \"minimum-signal\": \"最小信号(本底噪声)\",\n      \"noise-1f-not-modeled\": \"1/f和尾电流噪声未建模。\",\n      \"noise-contributors\": \"噪声来源 (V rms)\",\n      \"noise-floor\": \"参考输出: {voltage}V rms\",\n      \"noise-referred-output\": \"所有噪声均指输出\",\n      \"opamp-current\": \"运算放大器电流\",\n      \"opamp-voltage\": \"运算放大器电压\",\n      \"output-voltage\": \"输出电压: {voltage}V\",\n      \"peak-signal\": \"峰值信号\",\n      \"photodiode-current\": \"光电二极管电流: {current}A\",\n      \"photodiode-current-rms\": \"参考输入: {current}A rms\",\n      \"rf\": \"R<sub>F</sub>\",\n      \"rfilter\": \"R<sub>FILTER</sub>\",\n      \"rg\": \"R<sub>G</sub>\",\n      \"rin\": \"R<sub>IN</sub>\",\n      \"snr\": \"SNR = {snr} dB\",\n      \"stage-1\": \"第一级\",\n      \"stage-1-total\": \"第一级总和\",\n      \"stage-2\": \"第二级\",\n      \"stage-2-total\": \"第二级总和\",\n      \"title\": \"SNR\",\n      \"tooltip\": \"SNR/Dynamic Range\",\n      \"total\": \"总\",\n      \"total-noise\": \"噪声总和: {noise}V rms\"\n    },\n    \"spectral-noise\": {\n      \"graph-legend\": {\n        \"opi\": \"Op Amp I\",\n        \"opi2\": \"Op Amp 2 I\",\n        \"opv\": \"Op Amp V\",\n        \"opv2\": \"Op Amp 2 V\",\n        \"rf\": \"R<sub>f</sub>\",\n        \"rfilter\": \"R<sub>filter</sub>\",\n        \"rin\": \"R<sub>in</sub>\",\n        \"total\": \"Total\",\n        \"x-title\": \"频率\"\n      },\n      \"hover-graph-legend\": {\n        \"opi\": \"Op Amp I: \",\n        \"opi2\": \"Op Amp 2 I: \",\n        \"opv\": \"Op Amp V: \",\n        \"opv2\": \"Op Amp 2 V: \",\n        \"rf\": \"Rf: \",\n        \"rfilter\": \"Rfilter: \",\n        \"rin\": \"Rin: \",\n        \"total\": \"Total: \",\n        \"x-title\": \"频率: \",\n        \"x-unit\": \"Hz\",\n        \"y-unit\": \"V/√Hz\"\n      },\n      \"title\": \"频谱噪声密度\",\n      \"tooltip\": \"Spectral Noise Density\",\n      \"x-title\": \"频率(Hz)\",\n      \"y-title\": \"频谱噪声密度 (V/√Hz)\"\n    }\n  },\n  \"help\": {\n    \"bias-polarity\": {\n      \"title\": \"光电二极管偏置\"\n    },\n    \"circuit-peaking\": {\n      \"title\": \"输出信号:峰化\"\n    },\n    \"circuit-stages\": {\n      \"title\": \"级数\"\n    },\n    \"dynamic-range\": {\n      \"title\": \"SNR/动态范围\"\n    },\n    \"equivalent-circuit\": {\n      \"title\": \"光电二极管等效电路\"\n    },\n    \"frequency-response\": {\n      \"title\": \"频率响应\"\n    },\n    \"main-help\": {\n      \"title\": \"光电二极管电路设计向导帮助\"\n    },\n    \"noise-gain\": {\n      \"title\": \"噪声增益\"\n    },\n    \"opamp\": {\n      \"title\": \"运算放大器\"\n    },\n    \"peak-current\": {\n      \"title\": \"光电二极管规格:峰值电流\"\n    },\n    \"peak-voltage\": {\n      \"title\": \"输出信号:峰值电压\"\n    },\n    \"photodiode-capacitance\": {\n      \"title\": \"光电二极管规格:电容(C<sub>D</sub>)\"\n    },\n    \"pulse-response\": {\n      \"title\": \"脉冲响应\"\n    },\n    \"quick-results\": {\n      \"title\": \"快速结果\"\n    },\n    \"reverse-voltage\": {\n      \"title\": \"光电二极管偏置:反向电压 (V<sub>R</sub>)\"\n    },\n    \"shunt-resistance\": {\n      \"title\": \"光电二极管规格:分流电阻(R<sub>SH</sub>)\"\n    },\n    \"spectral-noise-density\": {\n      \"title\": \"频谱噪声密度\"\n    },\n    \"stability\": {\n      \"title\": \"稳定性\"\n    },\n    \"supply-voltage\": {\n      \"title\": \"电源电压\"\n    },\n    \"target-speed\": {\n      \"title\": \"输出信号:速度\"\n    },\n    \"why-the-spares\": {\n      \"title\": \"为何要有备件?\"\n    }\n  },\n  \"main\": {\n    \"busy\": \"处理中...\",\n    \"next-tab\": \"下一个选项卡\",\n    \"previous-tab\": \"上一个选项卡\",\n    \"title\": \"光电二极管电路设计向导\"\n  },\n  \"marginal-design\": {\n    \"button\": \"显示边际设计\",\n    \"message\": \"若要创建鲁棒的设计,我们建议根据下文所述调节您的设计参数。 然而,如果这样做不可行,我们仍能找到可行的运算放大器。 本工具发现该设计存在如下问题: \"\n  },\n  \"menu\": {\n    \"links\": {\n      \"feedback\": \"提交意见反馈\",\n      \"help\": \"帮助\",\n      \"load\": \"加载设计\",\n      \"save\": \"保存\"\n    },\n    \"tabs\": {\n      \"circuit-design\": \"电路设计\",\n      \"next-steps\": \"后续步骤\",\n      \"photodiode\": \"光电二极管\"\n    }\n  },\n  \"model-error\": {\n    \"amp_status_bias_current_is\": \"高输出失调(偏置电流等于 {data})\",\n    \"amp_status_big_2nd_stage_gain\": \"需第二级增益 {data}\",\n    \"amp_status_cf_less_100fF\": \"Cf < 0.1pF\",\n    \"amp_status_cf_less_50fF\": \"Cf < 50fF\",\n    \"amp_status_cfb_no_cf\": \"电流反馈放大器的反馈路径不支持电容\",\n    \"amp_status_cfb_rf_too_small\": \"无法驱动Rf;\",\n    \"amp_status_dB_error\": \"数据库错误 - 数据库中的器件数据不正确\",\n    \"amp_status_gbw_less_than_bandwith_requested\": \"Op Amp GBW less than bandwidth requested \",\n    \"amp_status_high_vos\": \"高输出失调(输入Vos等于 {data})\",\n    \"amp_status_internal_cf_too_high\": \"内部反馈电容过高\",\n    \"amp_status_min_stable_gain\": \"最小稳定增益 = {data}\",\n    \"amp_status_not_enough_peaking\": \"无法形成足够的峰化\",\n    \"amp_status_not_fast_enough\": \"不够快\",\n    \"amp_status_quad\": \"四通道\",\n    \"amp_status_slew_rate_low\": \"压摆率过低\",\n    \"amp_status_slew_rate_marginal\": \"边际压摆率\",\n    \"amp_status_specialty_amp\": \"专用放大器\",\n    \"amp_status_too_fast\": \"太快\",\n    \"amp_status_voltage_not_enough\": \"电压范围不足以用于峰值输出电压\",\n    \"amp_status_zero_drift\": \"零漂移\",\n    \"fixed_op_amp_no_good\": \"{partName}不能满足设计要求。请选择另外一个运算放大器或解锁,允许程序为您选择运算放大器。 <br/><br/>原因 {partName} 是不适合:\",\n    \"internal_cf_too_high\": \"{partName} 提供了内部反馈电容 {cfint}F。因此,标准放大器的反馈电容 {cf}F 通常为 {partName} 的 {cfext}F.  <br/><br/>原因 {partName} 不合适:\",\n    \"no_op_amps_available_for_first_stage_too_fast\": \"<p>无法推荐满足第一级设计要求的运算放大器。</p><p>可以尝试如下方式:<ul><li>降低速度要求</li><li>减小光电二极管电容</li><li>减小峰值输出电压</li><li>增加光电二极管峰值电流</li></ul></p>\",\n    \"no_op_amps_available_for_first_stage_too_slow\": \"<p>无法推荐满足第一级设计要求的运算放大器。</p><p>可以尝试如下方式:<ul><li>增加速度要求</li><li>增加光电二极管电容</li><li>增加峰值输出电压</li><li>降低光电二极管峰值电流</li></ul></p>\",\n    \"no_op_amps_available_for_second_stage\": \"<p>无法推荐满足第二级设计要求的运算放大器。</p><p>解决方案: <ul><li>降低速度要求</li><li>减小峰值输出电压</li></ul></p>\",\n    \"no_op_amps_available_for_single_stage_too_fast\": \"<p>无法推荐满足这些设计要求的运算放大器</p><p>可以尝试如下方式: <ul><li>选择双级解决方案</li><li>降低速度要求</li><li>减小光电二极管电容</li><li>减小峰值输出电压</li><li>增加光电二极管峰值电流</li></ul></p>\",\n    \"no_op_amps_available_for_single_stage_too_slow\": \"<p>无法推荐满足这些设计要求的运算放大器</p><p>可以尝试如下方式:<ul><li>增加速度要求</li><li>增加光电二极管电容</li><li>增加峰值输出电压</li><li>降低光电二极管峰值电流</li></ul></p>\",\n    \"peak_light_error\": \"您提供的峰值电流超出可接受范围 ({min} - {max})。 请更新数值。\",\n    \"peak_photodiode_error\": \"峰值电流计算结果超出可接受范围 ({min} - {max})。\",\n    \"rf_too_high\": \"<p>单级放大器配置的增益要求过高。.</p><p>可以尝试如下方式: <ul><li>选择双级解决方案</li><li>减小峰值输出电压</li><li>增加光电二极管峰值电流</li></ul></p>\"\n  },\n  \"opamp-selection\": {\n    \"GBW\": \"GBW\",\n    \"cancel\": \"取消\",\n    \"comment-drop-down\": {\n      \"message\": {\n        \"amp_status_bias_current_is\": \"高输出失调(偏置电流等于 {value}A)\",\n        \"amp_status_big_2nd_stage_gain\": \"需第二级增益 {value}\",\n        \"amp_status_cf_less_100fF\": \"Cf < 0.1pF\",\n        \"amp_status_cf_less_50fF\": \"Cf < 50fF\",\n        \"amp_status_cfb_no_cf\": \"电流反馈放大器的反馈路径不支持电容\",\n        \"amp_status_cfb_rf_too_small\": \"无法驱动Rf;\",\n        \"amp_status_dB_error\": \"数据库错误 - 数据库中的器件数据不正确\",\n        \"amp_status_gbw_less_than_bandwith_requested\": \"Op Amp GBW less than bandwidth requested \",\n        \"amp_status_high_vos\": \"高输出失调(输入Vos等于 {value}V)\",\n        \"amp_status_internal_cf_too_high\": \"内部反馈电容过高\",\n        \"amp_status_last_time_buy\": \"最后一次采购\",\n        \"amp_status_min_stable_gain\": \"最小稳定增益 = {value}\",\n        \"amp_status_not_allowed\": \"不允许:\",\n        \"amp_status_not_enough_peaking\": \"无法形成足够的峰化\",\n        \"amp_status_not_fast_enough\": \"不够快\",\n        \"amp_status_not_recommended\": \"不推荐使用:\",\n        \"amp_status_not_recommended_for_new_designs\": \"新设计不推荐使用本产品\",\n        \"amp_status_obsolete\": \"停产\",\n        \"amp_status_quad\": \"四通道\",\n        \"amp_status_recommended\": \"推荐\",\n        \"amp_status_slew_rate_low\": \"压摆率过低\",\n        \"amp_status_slew_rate_marginal\": \"边际压摆率\",\n        \"amp_status_specialty_amp\": \"专用放大器\",\n        \"amp_status_too_fast\": \"太快\",\n        \"amp_status_voltage_not_enough\": \"电压范围不足以用于峰值输出电压\",\n        \"amp_status_zero_drift\": \"零漂移\"\n      },\n      \"not-allowed\": \"不允许\",\n      \"not-allowed-match\": \"不允许\",\n      \"not-recommended\": \"不推荐使用\",\n      \"not-recommended-match\": \"不推荐使用\",\n      \"recommended\": \"推荐\",\n      \"recommended-match\": \"推荐\",\n      \"show-all\": \"显示全部\"\n    },\n    \"comments\": \"注释\",\n    \"part-label\": \"产品型号\",\n    \"row-count\": \"'{count, plural, =0 {显示#/{total}个运算放大器。请检查提供的滤波器。} other {显示#/{total}个运算放大器。}}'\",\n    \"select\": \"选择\",\n    \"spice-drop-down\": {\n      \"no\": \"否\",\n      \"show-all\": \"显示全部\",\n      \"yes\": \"是\"\n    },\n    \"status-drop-down\": {\n      \"not-recommended\": \"不推荐用于新设计\",\n      \"not-recommended-match\": \"Not Recommended for New Designs\",\n      \"production\": \"量产\",\n      \"production-match\": \"Production\",\n      \"recommended\": \"推荐用于新设计\",\n      \"recommended-match\": \"Recommended for New Designs\",\n      \"show-all\": \"显示全部\"\n    },\n    \"supply-max\": \"最大电源电压\",\n    \"supply-min\": \"最小电源电压\",\n    \"temp-range\": \"温度范围\",\n    \"title\": \"选择运算放大器\"\n  },\n  \"parameter-selector\": {\n    \"choose-parameters\": \"选择参数\",\n    \"ok\": \"OK\"\n  },\n  \"sensor-selection\": {\n    \"active-area\": \"有效面积\",\n    \"cancel\": \"取消\",\n    \"capacitance\": \"电容\",\n    \"dark-current\": \"暗电流\",\n    \"manufacturer\": \"制造厂商\",\n    \"operating-temperature\": \"工作温度\",\n    \"package\": \"封装\",\n    \"part-number\": \"产品型号\",\n    \"product-page\": \"产品页面\",\n    \"resistance\": \"电阻\",\n    \"response-time\": \"响应时间\",\n    \"reverse-breakdown\": \"反向击穿\",\n    \"row-count\": \"'{count, plural, =0 {Displaying # of {total} sensors. Please check the filters provided.} other {Displaying # of {total} sensors.}}'\",\n    \"select\": \"选择\",\n    \"sensitivity\": \"灵敏度\",\n    \"spectral-peak\": \"频谱峰值\",\n    \"spectral-range\": \"频谱范围\",\n    \"spice\": \"SPICE\",\n    \"spice-file\": \"SPICE文件\",\n    \"title\": \"请选择一个传感器\",\n    \"vendor-link\": \"供应商链接\",\n    \"viewing-angle\": \"视角\"\n  },\n  \"settings\": {\n    \"circuit-design\": {\n      \"enob\": \"ENOB: {enob} bits\",\n      \"one-stage\": \"单\",\n      \"opamp-lock\": \"Lock\",\n      \"opamp-stage1\": \"第1级\",\n      \"opamp-stage2\": \"第2级\",\n      \"opamps\": \"Op Amps:\",\n      \"opamps-tooltip\": \"Op Amp\",\n      \"output-offset\": \"输出失调: {offset}V\",\n      \"output-signal\": \"输出信号\",\n      \"peak-voltage\": \"峰值电压 (V<sub>P</sub>)\",\n      \"peak-voltage-tooltip\": \"Peak Voltage\",\n      \"peaking\": \"峰值\",\n      \"peaking-high\": \"高\",\n      \"peaking-low\": \"低\",\n      \"peaking-tooltip\": \"峰值\",\n      \"quick-results\": \"快速结果\",\n      \"quick-results-tooltip\": \"快速结果\",\n      \"snr\": \"SNR: {snr} dB\",\n      \"stages\": \"级数\",\n      \"stages-tooltip\": \"级数\",\n      \"target-bandwidth\": \"Target Bandwidth\",\n      \"target-option-band\": \"带宽\",\n      \"target-option-pulse\": \"脉冲宽度\",\n      \"target-pulse-width\": \"目标速度\",\n      \"target-speed-tooltip\": \"Speed\",\n      \"two-stage\": \"双\"\n    },\n    \"next-steps\": {\n      \"get-files\": \"获取文件\",\n      \"get-files-all\": \"获取设计\",\n      \"get-files-all-tooltip\": \"下载包含SPICE文件、BOM、评估板文件、和pdf版视图的zip文件\",\n      \"get-files-spice\": \"仅SPICE\",\n      \"get-files-spice-tooltip\": \"下载包含SPICE文件的zip文件\",\n      \"mail\": \"邮件分享给同事\",\n      \"mail-tooltip\": \"将此设计的副本发送给同事\",\n      \"order\": \"订购\",\n      \"order-samples\": \"申请样片\",\n      \"order-samples-tooltip\": \"申请器件样片\",\n      \"share\": \"共享\"\n    },\n    \"photodiode\": {\n      \"bias-polarity-tooltip\": \"光电二极管偏置\",\n      \"capacitance-1\": \"电容 (C<sub>D</sub>)\",\n      \"capacitance-2\": \"在 VR = {vr} V\",\n      \"capacitance-tooltip\": \"电容\",\n      \"capacitance-warning\": \"Be careful. This is the capacitance at <u>your</u> reverse voltage, which may be different than what is specified in the datasheet table. You may need to read this value from a datasheet graph instead.\",\n      \"or\": \"或\",\n      \"peak-current\": \"峰值电流 (I<sub>P</sub>)\",\n      \"peak-current-tooltip\": \"峰值电流\",\n      \"photodiode-bias\": \"光电二极管偏置\",\n      \"photodiode-select\": \"从器件库中选择光电二极管\",\n      \"photodiode-specs\": \"光电二极管规格\",\n      \"reverse-voltage\": \"反向电压 (V<sub>R</sub>)\",\n      \"reverse-voltage-negative\": \"负\",\n      \"reverse-voltage-positive\": \"正\",\n      \"reverse-voltage-tooltip\": \"反向电压\",\n      \"shunt-resistance\": \"分流电阻 (R<sub>SH</sub>)\",\n      \"shunt-resistance-tooltip\": \"分流电阻\"\n    }\n  },\n  \"units\": {\n    \"A\": \"A\",\n    \"F\": \"F\",\n    \"Q\": \"Q\",\n    \"R\": \"Ω\",\n    \"V\": \"V\",\n    \"active-area\": \"mm<sup>2</sup>\",\n    \"dB\": \"dB\",\n    \"farad\": \"F\",\n    \"hertz\": \"Hz\",\n    \"meters\": \"m\",\n    \"ohm\": \"Ohm\",\n    \"operating-temperature\": \"&deg;C\",\n    \"peak-light-intensity\": \" W/m<sup>2</sup>\",\n    \"seconds\": \"s\",\n    \"sensitivity\": \"A/W\",\n    \"unit-price\": \"$ US\",\n    \"viewing-angle\": \"&deg;\",\n    \"volts-per-amp\": \"V/A\",\n    \"volts-per-volt\": \"V/V\"\n  },\n  \"validation-error\": {\n    \"button-tooltip\": \"请先修正错误,然后继续。\",\n    \"capacitance\": \"电容值必须在以下范围内:{min}至{max}\",\n    \"invalid-input-error\": \"无法解析字段{field}中的值{value}。\",\n    \"min-pulse-speed\": \"电容值必须在以下范围内:{min}至{max}\",\n    \"no-opamp-found\": \"None found\",\n    \"peak-current\": \"峰值电流必须在以下范围内:{min}至{max}\",\n    \"peak-light-intensity\": \"光强度的峰值必须限制在这个范围:{min}到{max}\",\n    \"peak-voltage\": \"峰值电压值必须在以下范围内:{min}至{max}\",\n    \"reverse-voltage\": \"反向电压值必须在以下范围内:{min}至{max}\",\n    \"shunt-resistance\": \"分流电阻值必须在以下范围内:{min}至{max}\",\n    \"speed\": \"电容值必须在以下范围内:{min}至{max}\"\n  }\n}]];","/**\n * @private\n * @hide\n */\nexport function convertToArray(locale) {\n  if (Array.isArray(locale)) {\n    return locale;\n  }\n  return [locale];\n}\n\n/**\n * @private\n * @hide\n */\nexport function convertToString(locale) {\n  if (Array.isArray(locale)) {\n    return locale[0];\n  }\n  return locale;\n}\n/**\n * @private\n * @hide\n */\nexport function hasLocaleChanged(locale1, locale2) {\n  if (!Array.isArray(locale2)) {\n    return true;\n  }\n  return locale1.toString() !== locale2.toString();\n}\n\n/**\n * @private\n * @hide\n */\nexport function normalizeLocale(locale) {\n  return locale.replace(/_/g, '-').toLowerCase();\n}","/**\n * @private\n * @hide\n */\nexport function flattenKeys(object) {\n  const result = {};\n  for (const key in object) {\n    if (!Object.prototype.hasOwnProperty.call(object, key)) {\n      continue;\n    }\n    const value = object[key];\n\n    // If `value` is not `null`\n    if (value && typeof value === 'object') {\n      const hash = flattenKeys(value);\n      for (const suffix in hash) {\n        const translation = hash[suffix];\n        if (typeof translation !== 'undefined') {\n          result[`${key}.${suffix}`] = translation;\n        }\n      }\n    } else {\n      if (typeof value !== 'undefined') {\n        result[key] = value;\n      }\n    }\n  }\n  return result;\n}","var _class, _descriptor, _descriptor2;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nimport { getOwner } from '@ember/application';\nimport { assert } from '@ember/debug';\nimport { registerDestructor } from '@ember/destroyable';\nimport { dependentKeyCompat } from '@ember/object/compat';\nimport { cancel, next } from '@ember/runloop';\nimport Service from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport EventEmitter from 'eventemitter3';\nimport { FormatDate, FormatList, FormatMessage, FormatNumber, FormatRelative, FormatTime } from '../-private/formatters';\nimport { createIntl, createIntlCache, onFormatjsIntlError } from '../-private/utils/formatjs';\nimport getDOM from '../-private/utils/get-dom';\nimport hydrate from '../-private/utils/hydrate';\nimport { convertToArray, convertToString, hasLocaleChanged, normalizeLocale } from '../-private/utils/locale';\nimport { flattenKeys } from '../-private/utils/translations';\nlet IntlService = (_class = class IntlService extends Service {\n  /**\n   * Returns an array of registered locale names\n   *\n   */\n  get locales() {\n    return Object.keys(this._intls);\n  }\n\n  /** @public **/\n  set locale(localeName) {\n    const proposedLocale = convertToArray(localeName).map(normalizeLocale);\n    if (hasLocaleChanged(proposedLocale, this._locale)) {\n      this._locale = proposedLocale;\n      cancel(this._timer);\n      this._timer = next(() => {\n        this._ee.emit('localeChanged');\n        this._updateDocumentLanguage(this._locale);\n      });\n    }\n  }\n  get locale() {\n    return this._locale;\n  }\n\n  /**\n   * Returns the first locale of the currently active locales\n   *\n   */\n  get primaryLocale() {\n    return this.locale[0];\n  }\n\n  /** @public **/\n\n  /** @public **/\n  constructor() {\n    super(...arguments);\n    _defineProperty(this, \"formatRelative\", createFormatterProxy('relative'));\n    /** @public **/\n    _defineProperty(this, \"formatMessage\", createFormatterProxy('message'));\n    /** @public **/\n    _defineProperty(this, \"formatNumber\", createFormatterProxy('number'));\n    /** @public **/\n    _defineProperty(this, \"formatTime\", createFormatterProxy('time'));\n    /** @public **/\n    _defineProperty(this, \"formatDate\", createFormatterProxy('date'));\n    /** @public **/\n    _defineProperty(this, \"formatList\", createFormatterProxy('list'));\n    /** @private **/\n    _initializerDefineProperty(this, \"_locale\", _descriptor, this);\n    /** @private **/\n    _defineProperty(this, \"_timer\", null);\n    /** @private **/\n    _defineProperty(this, \"_formats\", null);\n    /** @private **/\n    _defineProperty(this, \"_formatters\", {\n      message: new FormatMessage(),\n      relative: new FormatRelative(),\n      number: new FormatNumber(),\n      time: new FormatTime(),\n      date: new FormatDate(),\n      list: new FormatList()\n    });\n    /** @private */\n    _initializerDefineProperty(this, \"_intls\", _descriptor2, this);\n    /**\n     * @private\n     * @type {EventEmitter}\n     */\n    _defineProperty(this, \"_ee\", null);\n    _defineProperty(this, \"_cache\", createIntlCache());\n    const initialLocale = this.locale || ['en-us'];\n    this._intls = {};\n    this._ee = new EventEmitter();\n    this.setLocale(initialLocale);\n    this._owner = getOwner(this);\n    if (!this._formats) {\n      this._formats = this._owner.resolveRegistration('formats:main') || {};\n    }\n    this.getIntl = this.getIntl.bind(this);\n    this.getOrCreateIntl = this.getOrCreateIntl.bind(this);\n    hydrate(this);\n  }\n  willDestroy() {\n    super.willDestroy(...arguments);\n    cancel(this._timer);\n  }\n\n  /** @public **/\n  lookup(key, localeName, options = {}) {\n    const localeNames = this._localeWithDefault(localeName);\n    let translation;\n    for (let i = 0; i < localeNames.length; i++) {\n      const messages = this.translationsFor(localeNames[i]);\n      if (!messages) {\n        continue;\n      }\n      translation = messages[key];\n      if (translation !== undefined) {\n        break;\n      }\n    }\n    if (translation === undefined && options.resilient !== true) {\n      const missingMessage = this._owner.resolveRegistration('util:intl/missing-message');\n      return missingMessage.call(this, key, localeNames, options);\n    }\n    return translation;\n  }\n\n  /**\n   * @private\n   */\n  getIntl(locale) {\n    const resolvedLocale = convertToString(locale);\n    return this._intls[resolvedLocale];\n  }\n  getOrCreateIntl(locale, messages) {\n    const resolvedLocale = convertToString(locale);\n    const existingIntl = this._intls[resolvedLocale];\n    if (!existingIntl) {\n      this._intls = {\n        ...this._intls,\n        [resolvedLocale]: this.createIntl(resolvedLocale, messages)\n      };\n    } else if (messages) {\n      this._intls = {\n        ...this._intls,\n        [resolvedLocale]: this.createIntl(resolvedLocale, {\n          ...(existingIntl.messages || {}),\n          ...messages\n        })\n      };\n    }\n    return this._intls[resolvedLocale];\n  }\n\n  /**\n   * @private\n   * @param {String} locale Locale of intl obj to create\n   */\n  createIntl(locale, messages = {}) {\n    const {\n      _formats: formats\n    } = this;\n    const resolvedLocale = convertToString(locale);\n    return createIntl({\n      defaultFormats: formats,\n      defaultLocale: resolvedLocale,\n      formats,\n      locale: resolvedLocale,\n      messages,\n      onError: onFormatjsIntlError\n    }, this._cache);\n  }\n\n  /** @public **/\n  t(key, options = {}) {\n    let keys = [key];\n    if (options.default) {\n      if (Array.isArray(options.default)) {\n        keys = [...keys, ...options.default];\n      } else if (typeof options.default === 'string') {\n        keys = [...keys, options.default];\n      }\n    }\n    keys.forEach(key => {\n      assert(`[ember-intl] expected translation key \"${key}\" to be of type String but received: \"${typeof key}\"`, typeof key === 'string');\n    });\n    for (let index = 0; index < keys.length; index++) {\n      const key = keys[index];\n      const message = this.lookup(key, options.locale, {\n        ...options,\n        // Note: last iteration will throw with the last key that was missing\n        // in the future maybe the thrown error should include all the keys to help debugging\n        resilient: keys.length - 1 !== index\n      });\n\n      // @formatjs/intl consider empty message to be an error\n      if (message === '' || typeof message === 'number') {\n        return message;\n      }\n      if (message) {\n        return this.formatMessage({\n          id: key,\n          defaultMessage: message\n        }, options);\n      }\n    }\n  }\n\n  /** @public **/\n  exists(key, localeName) {\n    const localeNames = this._localeWithDefault(localeName);\n    assert(`[ember-intl] locale is unset, cannot lookup '${key}'`, Array.isArray(localeNames) && localeNames.length);\n    return localeNames.some(localeName => key in (this.getIntl(localeName)?.messages || {}));\n  }\n\n  /** @public */\n  setLocale(locale) {\n    assert(`[ember-intl] No locale has been set. See https://ember-intl.github.io/ember-intl/docs/quickstart#4-configure-project`, locale);\n    this.locale = locale;\n    this.getOrCreateIntl(locale);\n  }\n\n  /** @public **/\n  addTranslations(localeName, payload) {\n    const locale = normalizeLocale(localeName);\n    const messages = flattenKeys(payload);\n    this.getOrCreateIntl(locale, messages);\n  }\n\n  /** @public **/\n  translationsFor(localeName) {\n    const locale = normalizeLocale(localeName);\n    return this.getIntl(locale)?.messages;\n  }\n\n  /** @private **/\n  _localeWithDefault(localeName) {\n    if (!localeName) {\n      return this._locale || [];\n    }\n    return convertToArray(localeName).map(normalizeLocale);\n  }\n\n  /** @private **/\n  _updateDocumentLanguage(locales) {\n    const dom = getDOM(this);\n    if (dom) {\n      const [primaryLocale] = locales;\n      const html = dom.documentElement;\n      html.setAttribute('lang', primaryLocale);\n    }\n  }\n\n  /**\n   * @private\n   * @param fn\n   * @param context\n   */\n  onLocaleChanged(fn, context) {\n    this._ee.on('localeChanged', fn, context);\n    registerDestructor(context, () => {\n      this._ee.off('localeChanged', fn, context);\n    });\n  }\n}, _applyDecoratedDescriptor(_class.prototype, \"locale\", [dependentKeyCompat], Object.getOwnPropertyDescriptor(_class.prototype, \"locale\"), _class.prototype), _descriptor = _applyDecoratedDescriptor(_class.prototype, \"_locale\", [tracked], {\n  configurable: true,\n  enumerable: true,\n  writable: true,\n  initializer: function () {\n    return null;\n  }\n}), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"_intls\", [tracked], {\n  configurable: true,\n  enumerable: true,\n  writable: true,\n  initializer: function () {\n    return null;\n  }\n}), _class);\nexport { IntlService as default };\nfunction createFormatterProxy(name) {\n  return function serviceFormatterProxy(value, formatOptions) {\n    let locale;\n    let intl;\n    if (formatOptions && formatOptions.locale) {\n      locale = this._localeWithDefault(formatOptions.locale);\n      // Cannot use getOrCreateIntl since it triggers a re-render which\n      // might cause infinite loop\n      // This is also a case we're not optimizing for so let it take\n      // the slow path\n      intl = this.createIntl(locale);\n    } else {\n      locale = this.locale;\n      intl = this.getIntl(locale);\n    }\n    return this._formatters[name].format(intl, value, formatOptions);\n  };\n}","import translations from '../../translations';\n\n/**\n * @private\n * @hide\n */\nexport default function hydrate(service) {\n  translations.forEach(([locale, translations]) => {\n    service.addTranslations(locale, translations);\n  });\n}","import { getOwner } from '@ember/application';\n\n// adjusted from https://github.com/yapplabs/ember-wormhole/blob/0.5.4/addon/utils/dom.js#L45-L63\n//\n// Private Ember API usage. Get the dom implementation used by the current\n// renderer, be it native browser DOM or Fastboot SimpleDOM\n/**\n * @private\n * @hide\n */\nexport default function getDOM(context) {\n  let {\n    renderer\n  } = context;\n  if (!renderer || !renderer._dom) {\n    // pre glimmer2\n    let container = getOwner ? getOwner(context) : context.container;\n    let documentService = container.lookup('service:-document');\n    if (documentService) {\n      return documentService;\n    }\n    renderer = container.lookup('renderer:-dom');\n  }\n  if (renderer._dom && renderer._dom.document) {\n    // pre Ember 2.6\n    return renderer._dom.document;\n  }\n  return null;\n}","import { warn } from '@ember/debug';\nimport { isEmpty } from '@ember/utils';\n\n/**\n * @private\n * @hide\n */\nexport default function missingMessage(key, locales) {\n  if (isEmpty(locales)) {\n    warn(`[ember-intl] No locale has been set. See https://ember-intl.github.io/ember-intl/docs/quickstart#4-configure-project`, false, {\n      id: 'ember-intl-no-locale-set'\n    });\n    return `No locale defined.  Unable to resolve translation: \"${key}\"`;\n  }\n  const localeNames = locales.join(', ');\n  warn(`[ember-intl] translation: \"${key}\" on locale: \"${localeNames}\" was not found.`, false, {\n    id: 'ember-intl-missing-translation'\n  });\n  return `Missing translation \"${key}\" for locale \"${localeNames}\"`;\n}","export function isFactory(\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\n_factoryOrClass) {\n  return !true;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst noop = () => {};\n\n/**\n * Consume each positional and named argument to entangle it in autotracking and\n * enable updates.\n *\n * This is a temporary workaround for a change in the autotracking semantics of\n * the args proxy introduced in `v3.22`. What changed is that arguments are no\n * longer eagerly consumed. Didn’t use an argument? Then updates won’t be run\n * when its value changes. This workaround reproduces the previous behaviour to\n * avoid introducing a breaking change until a suitable transition path is made\n * available.\n */\nlet consumeArgs = noop;\nif (true) {\n  consumeArgs = function ({\n    positional,\n    named\n  }) {\n    // SAFETY: TS before 4.6 does not correctly/fully resolve the type in a way\n    // that allows the type checker to see that `positional` must *always* be\n    // something which `extends unknown[]` here, because the underlying\n    // machinery is fairly complicated and relies on a fair bit of type\n    // recursion. It will stop mattering when we cut v4.0, because we won't be\n    // doing this anyway.\n    const pos = positional;\n    for (let i = 0; i < pos.length; i++) {\n      pos[i];\n    }\n\n    // SAFETY: TS 4.7 does not see that `named` will always be an object here.\n    // However, it is guaranteed to be resolved as such by the types. This *may*\n    // be a bug (https://github.com/microsoft/TypeScript/issues/48468), but it\n    // *should* also stop being relevant once we ship 4.0.\n    Object.values(named);\n  };\n}\nexport { consumeArgs };","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { capabilities } from '@ember/modifier';\nimport { destroy, registerDestructor } from '@ember/destroyable';\nimport { Element, _implementsModify, Args } from './modifier';\nimport { consumeArgs, isFactory } from '../compat';\nfunction destroyModifier(modifier) {\n  modifier.willRemove();\n  modifier.willDestroy();\n}\n\n/**\n * The state bucket used throughout the life-cycle of the modifier. Basically a\n * state *machine*, where the framework calls us with the version we hand back\n * to it at each phase. The two states are the two `extends` versions of this\n * below.\n *\n * @internal\n */\n\n/**\n * The `State` after calling `createModifier`, and therefore the state available\n * at the start of `InstallModifier`.\n * @internal\n */\n\n/**\n * The `State` after calling `installModifier`, and therefore the state\n * available in all `updateModifier` calls and in `destroyModifier`.\n * @internal\n */\n\n// Wraps the unsafe (b/c it mutates, rather than creating new state) code that\n// TS does not yet understand.\nfunction installElement(state, element) {\n  // SAFETY: this cast represents how we are actually handling the state machine\n  // transition: from this point forward in the lifecycle of the modifier, it\n  // always behaves as `InstalledState<S>`. It is safe because, and *only*\n  // because, we immediately initialize `element`. (We cannot create a new state\n  // from the old one because the modifier manager API expects mutation of a\n  // single state bucket rather than updating it at hook calls.)\n  const installedState = state;\n  installedState.element = element;\n  return installedState;\n}\nfunction installElementOnInstance(instance, element) {\n  // SAFETY: we use the internal API for all class-based modifiers to set this\n  // in a way which lets us issue the deprecation warning for anyone accessing\n  // `element` as a getter while allowing types to continue working for any\n  // existing subclasses (see the discussion on the class definition).\n  instance[Element] = element;\n}\nfunction updateArgsOnInstance(instance, args) {\n  // SAFETY: we use the internal API for all class-based modifiers to set this\n  // in a way which lets us issue the deprecation warning for anyone accessing\n  // `args` as a getter while allowing types to continue working for any\n  // existing subclasses (see the discussion on the class definition).\n  instance[Args] = args;\n}\nexport default class ClassBasedModifierManager {\n  constructor(owner) {\n    _defineProperty(this, \"capabilities\", capabilities(true ? '3.22' : '3.13'));\n    this.owner = owner;\n  }\n  createModifier(factoryOrClass, args) {\n    const Modifier = isFactory(factoryOrClass) ? factoryOrClass.class : factoryOrClass;\n    const modifier = new Modifier(this.owner, args);\n    registerDestructor(modifier, destroyModifier);\n    return {\n      instance: modifier,\n      implementsModify: _implementsModify(modifier),\n      element: null\n    };\n  }\n  installModifier(createdState, element, args) {\n    const state = installElement(createdState, element);\n\n    // TODO: this can be deleted entirely at v4.\n    const {\n      instance\n    } = state;\n    installElementOnInstance(instance, element);\n    if (state.implementsModify) {\n      instance.modify(element, args.positional, args.named);\n    } else {\n      // The `consumeArgs()` call provides backwards compatibility on v3 for the\n      // deprecated legacy lifecycle hooks (`didInstall`, `didReceiveArguments`,\n      // and `didUpdateArguments`), which accidentally had eager consumption\n      // semantics prior to Ember 3.22. The new, recommended `modify` hook has\n      // the updated lazy semantics associated with normal auto-tracking.\n      if (true) {\n        consumeArgs(args);\n      }\n      instance.didReceiveArguments();\n      instance.didInstall();\n    }\n  }\n  updateModifier(state, args) {\n    const {\n      instance\n    } = state;\n\n    // TODO: remove at 4.0\n    updateArgsOnInstance(state.instance, args);\n    if (state.implementsModify) {\n      instance.modify(state.element, args.positional, args.named);\n    } else {\n      // The `consumeArgs()` call provides backwards compatibility on v3 for the\n      // deprecated legacy lifecycle hooks (`didInstall`, `didReceiveArguments`,\n      // and `didUpdateArguments`), which accidentally had eager consumption\n      // semantics prior to Ember 3.22. The new, recommended `modify` hook has\n      // the updated lazy semantics associated with normal auto-tracking.\n      if (true) {\n        consumeArgs(args);\n      }\n      instance.didUpdateArguments();\n      instance.didReceiveArguments();\n    }\n  }\n  destroyModifier(state) {\n    destroy(state.instance);\n  }\n}","import { setOwner } from '@ember/application';\nimport { setModifierManager } from '@ember/modifier';\nimport Manager from './modifier-manager';\nimport { isDestroying, isDestroyed } from '@ember/destroyable';\nimport { assert, deprecate } from '@ember/debug';\nimport { DEBUG } from '@glimmer/env';\n\n// SAFETY: these sets are dev-only code to avoid showing deprecations for the\n// same class more than once.\n\nlet SEEN_CLASSES_FOR_LIFECYCLE;\nif (DEBUG) {\n  SEEN_CLASSES_FOR_LIFECYCLE = new Set();\n}\nlet SEEN_CLASSES_FOR_DESTROYABLES;\nif (DEBUG) {\n  SEEN_CLASSES_FOR_DESTROYABLES = new Set();\n}\nlet SEEN_CLASSES_FOR_ARGS;\nif (DEBUG) {\n  SEEN_CLASSES_FOR_ARGS = new Set();\n}\nlet SEEN_CLASSES_FOR_ELEMENTS;\nif (DEBUG) {\n  SEEN_CLASSES_FOR_ELEMENTS = new Set();\n}\n\n/** @internal */\nexport const _implementsModify = instance => instance.modify !== ClassBasedModifier.prototype.modify;\n\n/** @internal */\nexport const _implementsLegacyHooks = instance => instance.didInstall !== ClassBasedModifier.prototype.didInstall || instance.didUpdateArguments !== ClassBasedModifier.prototype.didUpdateArguments || instance.didReceiveArguments !== ClassBasedModifier.prototype.didReceiveArguments;\n\n/** @internal */\nexport const Element = Symbol('Element');\n\n/** @internal */\nexport const Args = Symbol('Args');\n\n// Preserve the signature on a class-based modifier so it can be plucked off\n// later (by e.g. Glint), using interface merging with an opaque item to\n// preserve it in the type system. The fact that it's an empty interface is\n// actually the point: it *only* hooks the type parameter into the opaque\n// (nominal) type. Note that this is distinct from the function-based modifier\n// type intentionally, because it is actually the static class side of a\n// class-based modifier which corresponds to the result of calling `modifier()`\n// with a callback defining a function-based modifier.\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\n\n/**\n * A base class for modifiers which need more capabilities than function-based\n * modifiers. Useful if, for example:\n *\n * 1. You need to inject services and access them\n * 2. You need fine-grained control of updates, either for performance or\n *    convenience reasons, and don't want to teardown the state of your modifier\n *    every time only to set it up again.\n * 3. You need to store some local state within your modifier.\n *\n * The lifecycle hooks of class modifiers are tracked. When they run, they any\n * values they access will be added to the modifier, and the modifier will\n * update if any of those values change.\n */\nexport default class ClassBasedModifier {\n  // Done this way with the weird combination of `declare` and `defineProperty`\n  // so that subclasses which are overriding this by writing their own `args`\n  // field type declarations continue to type check correctly. (If we introduced\n  // a getter here, existing classes defining their args via a `declare args:`\n  // would stop type checking, because TS -- correctly! -- differentiates\n  // between class fields and getters).\n  /**\n   * The arguments passed to the modifier. `args.positional` is an array of\n   * positional arguments, and `args.named` is an object containing the named\n   * arguments.\n   *\n   * @deprecated Until 4.0. Access positional and named arguments directly in\n   *   the `modify` hook instead.\n   */\n\n  // Done this way with the weird combination of `declare` and `defineProperty`\n  // so that subclasses which are overriding this by writing their own `element`\n  // field declarations continue to type check correctly.\n  /**\n   * The element the modifier is applied to.\n   *\n   * @warning `element` is ***not*** available during `constructor` or\n   *   `willDestroy`.\n   * @deprecated Until 4.0. Access the `element` as an argument in the `modify`\n   *   hook instead.\n   */\n\n  constructor(owner, args) {\n    setOwner(this, owner);\n\n    // SAFETY: the point here is (for the period where we are providing `args`\n    // and `element`) to provide an internal-only way of setting and update the\n    // `args` for the modifier instance; we use the `InternalClassBasedModifier`\n    // interface to represent the internal-only API in a way that end users do\n    // *not* have access to when subclassing `ClassBasedModifier`.\n    this[Args] = args;\n    assert('ember-modifier: You cannot implement both `modify` and any of the deprecated legacy lifecycle hooks (`didInstall`, `didReceiveArguments`, and `didUpdateArguments`)', !(_implementsModify(this) && _implementsLegacyHooks(this)));\n    deprecate(`ember-modifier (in ${this.constructor.name} at ${new Error().stack}): \\`willDestroy\\`, \\`isDestroyed\\`, and \\`isDestroyed\\` are deprecated. Use the corresponding API from '@ember/destroyable' instead.`, this.willDestroy === ClassBasedModifier.prototype.willDestroy || SEEN_CLASSES_FOR_DESTROYABLES.has(this.constructor), {\n      id: 'ember-modifier.use-destroyables',\n      until: '4.0.0',\n      for: 'ember-modifier',\n      since: {\n        available: '3.2.0',\n        enabled: '3.2.0'\n      }\n    });\n    if (DEBUG && !SEEN_CLASSES_FOR_DESTROYABLES.has(this.constructor)) {\n      SEEN_CLASSES_FOR_DESTROYABLES.add(this.constructor);\n    }\n    deprecate(`ember-modifier (in ${this.constructor.name} at ${new Error().stack}): The \\`didInstall\\`, \\`didReceiveArguments\\`, and \\`didUpdateArguments\\` hooks are deprecated. Use the new \\`modify\\` hook instead.`, _implementsModify(this) || SEEN_CLASSES_FOR_LIFECYCLE.has(this.constructor), {\n      id: 'ember-modifier.use-modify',\n      until: '4.0.0',\n      for: 'ember-modifier',\n      since: {\n        available: '3.2.0',\n        enabled: '3.2.0'\n      }\n    });\n    if (DEBUG && !SEEN_CLASSES_FOR_LIFECYCLE.has(this.constructor)) {\n      SEEN_CLASSES_FOR_LIFECYCLE.add(this.constructor);\n    }\n  }\n\n  /**\n   * Called when the modifier is installed and any time any tracked state used\n   * in the modifier changes.\n   *\n   * If you need to do first-time-only setup, create a class field representing\n   * the initialization state and check it when running the hook. That is also\n   * where and when you should use `registerDestructor` for any teardown you\n   * need to do. For example:\n   *\n   * ```js\n   * function disconnect(instance) {\n   *  instance.observer?.disconnect();\n   * }\n   *\n   * class IntersectionObserver extends Modifier {\n   *   observer;\n   *\n   *   constructor(owner, args) {\n   *     super(owner, args);\n   *     registerDestructor(this, disconnect);\n   *   }\n   *\n   *   modify(element, callback, options) {\n   *     disconnect(this);\n   *\n   *     this.observer = new IntersectionObserver(callback, options);\n   *     this.observer.observe(element);\n   *   }\n   * }\n   * ```\n   *\n   * @param element The element to which the modifier is applied.\n   * @param positional The positional arguments to the modifier.\n   * @param named The named arguments to the modifier.\n   */\n  modify(/* eslint-disable @typescript-eslint/no-unused-vars */\n  element, positional, named) {\n    /* no op, for subclassing */\n  }\n\n  /**\n   * Called when the modifier is installed **and** anytime the arguments are\n   * updated.\n   *\n   * @deprecated Until 4.0. Use `modify()`.\n   */\n  didReceiveArguments() {\n    /* no op, for subclassing */\n  }\n\n  /**\n   * Called anytime the arguments are updated but **not** on the initial\n   * install. Called before `didReceiveArguments`.\n   *\n   * @deprecated Until 4.0. Use `modify()`.\n   */\n  didUpdateArguments() {\n    /* no op, for subclassing */\n  }\n\n  /**\n   * Called when the modifier is installed on the DOM element. Called after\n   * `didReceiveArguments`.\n   *\n   * @deprecated Until 4.0. Use `modify()`.\n   */\n  didInstall() {\n    /* no op, for subclassing */\n  }\n\n  /**\n   * Called when the DOM element is about to be destroyed; use for removing\n   * event listeners on the element and other similar clean-up tasks.\n   *\n   * @deprecated since 2.0.0: prefer to use `willDestroy`, since both it and\n   *   `willRemove` can perform all the same operations, including on the\n   *   `element`.\n   */\n  willRemove() {\n    /* no op, for subclassing */\n  }\n\n  /**\n   * Called when the modifier itself is about to be destroyed; use for teardown\n   * code. Called after `willRemove`.\n   *\n   * @deprecated Until 4.0. Use `registerDestructor` from `@ember/destroyables`.\n   */\n  willDestroy() {\n    /* no op, for subclassing */\n  }\n\n  /**\n   * @deprecated Until 4.0. Use `isDestroying` from `@ember/destroyables`.\n   */\n  get isDestroying() {\n    deprecate('Modifier.isDestroying is deprecated', SEEN_CLASSES_FOR_DESTROYABLES.has(this.constructor), {\n      id: 'ember-modifier.use-destroyables',\n      until: '4.0.0',\n      for: 'ember-modifier',\n      since: {\n        available: '3.2.0',\n        enabled: '3.2.0'\n      }\n    });\n    if (DEBUG && !SEEN_CLASSES_FOR_DESTROYABLES.has(this.constructor)) {\n      SEEN_CLASSES_FOR_DESTROYABLES.add(this.constructor);\n    }\n    return isDestroying(this);\n  }\n\n  /**\n   * @deprecated Until 4.0. Use `isDestroyed` from `@ember/destroyables`.\n   */\n  get isDestroyed() {\n    deprecate('Modifier.isDestroyed is deprecated', SEEN_CLASSES_FOR_DESTROYABLES.has(this.constructor), {\n      id: 'ember-modifier.use-destroyables',\n      until: '4.0.0',\n      for: 'ember-modifier',\n      since: {\n        available: '3.2.0',\n        enabled: '3.2.0'\n      }\n    });\n    if (DEBUG && !SEEN_CLASSES_FOR_DESTROYABLES.has(this.constructor)) {\n      SEEN_CLASSES_FOR_DESTROYABLES.add(this.constructor);\n    }\n    return isDestroyed(this);\n  }\n}\n\n// We apply these here, against the prototype, so that there is only one of\n// these, rather than one per instance. We also only issue the deprecation once\n// per class for each of `args` and `element`.\nObject.defineProperty(ClassBasedModifier.prototype, 'args', {\n  enumerable: true,\n  get() {\n    deprecate(`ember-modifier (in ${this.constructor.name} at ${new Error().stack}): using \\`this.args\\` is deprecated. Access positional and named arguments directly in the \\`modify\\` hook instead.`, SEEN_CLASSES_FOR_ARGS.has(this.constructor), {\n      id: 'ember-modifier.no-args-property',\n      for: 'ember-modifier',\n      since: {\n        available: '3.2.0',\n        enabled: '3.2.0'\n      },\n      until: '4.0.0'\n    });\n    if (DEBUG && !SEEN_CLASSES_FOR_ARGS.has(this.constructor)) {\n      SEEN_CLASSES_FOR_ARGS.add(this.constructor);\n    }\n    return this[Args];\n  }\n});\nObject.defineProperty(ClassBasedModifier.prototype, 'element', {\n  enumerable: true,\n  get() {\n    deprecate(`ember-modifier (in ${this.constructor.name} at ${new Error().stack}): using \\`this.element\\` is deprecated. Access the \\`element\\` as an argument in the \\`modify\\` hook instead.`, SEEN_CLASSES_FOR_ELEMENTS.has(this.constructor), {\n      id: 'ember-modifier.no-element-property',\n      for: 'ember-modifier',\n      since: {\n        available: '3.2.0',\n        enabled: '3.2.0'\n      },\n      until: '4.0.0'\n    });\n    if (DEBUG && !SEEN_CLASSES_FOR_ELEMENTS.has(this.constructor)) {\n      SEEN_CLASSES_FOR_ELEMENTS.add(this.constructor);\n    }\n    return this[Element] ?? null;\n  }\n});\n\n/**\n * @internal This provides an interface we can use to backwards-compatibly set\n *   up the element in a way that external callers will not have access to or\n *   even see.\n */\n\nsetModifierManager(owner => new Manager(owner), ClassBasedModifier);","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { capabilities } from '@ember/modifier';\nimport { consumeArgs, isFactory } from '../compat';\n// Wraps the unsafe (b/c it mutates, rather than creating new state) code that\n// TS does not yet understand.\nfunction installElement(state, element) {\n  // SAFETY: this cast represents how we are actually handling the state machine\n  // transition: from this point forward in the lifecycle of the modifier, it\n  // always behaves as `InstalledState<S>`. It is safe because, and *only*\n  // because, we immediately initialize `element`. (We cannot create a new state\n  // from the old one because the modifier manager API expects mutation of a\n  // single state bucket rather than updating it at hook calls.)\n  const installedState = state;\n  installedState.element = element;\n  return installedState;\n}\nexport default class FunctionBasedModifierManager {\n  constructor(options) {\n    _defineProperty(this, \"capabilities\", capabilities(true ? '3.22' : '3.13'));\n    _defineProperty(this, \"options\", void 0);\n    this.options = {\n      eager: options?.eager ?? true\n    };\n  }\n  createModifier(factoryOrClass) {\n    const instance = isFactory(factoryOrClass) ? factoryOrClass.class : factoryOrClass;\n    return {\n      element: null,\n      instance: instance\n    };\n  }\n  installModifier(createdState, element, args) {\n    const state = installElement(createdState, element);\n    const {\n      positional,\n      named\n    } = args;\n    const teardown = createdState.instance(element, positional, named);\n    if (typeof teardown === 'function') {\n      state.teardown = teardown;\n    }\n    if (true && this.options.eager) {\n      consumeArgs(args);\n    }\n  }\n  updateModifier(state, args) {\n    if (state.teardown) {\n      state.teardown();\n    }\n    const teardown = state.instance(state.element, args.positional, args.named);\n    if (typeof teardown === 'function') {\n      state.teardown = teardown;\n    }\n    if (true && this.options.eager) {\n      consumeArgs(args);\n    }\n  }\n  destroyModifier(state) {\n    if (typeof state.teardown === 'function') {\n      state.teardown();\n    }\n  }\n}","import { deprecate } from '@ember/debug';\nimport { setModifierManager } from '@ember/modifier';\nimport Modifier from '../class/modifier';\nimport FunctionBasedModifierManager from './modifier-manager';\n\n// Provide a singleton manager for each of the options. (If we extend this to\n// many more options in the future, we can revisit, but for now this means we\n// only ever allocate two managers.)\nconst EAGER_MANAGER = new FunctionBasedModifierManager({\n  eager: true\n});\nconst LAZY_MANAGER = new FunctionBasedModifierManager({\n  eager: false\n});\n\n// This type exists to provide a non-user-constructible, non-subclassable\n// type representing the conceptual \"instance type\" of a function modifier.\n// The abstract field of type `never` prevents subclassing in userspace of\n// the value returned from `modifier()`. By extending `Modifier<S>`, any\n// augmentations of the `Modifier` type performed by tools like Glint will\n// also apply to function-based modifiers as well.\n\n// This provides a type whose only purpose here is to represent the runtime\n// type of a function-based modifier: a virtually opaque item. The fact that it's\n// a bare constructor type allows `modifier()` to preserve type parameters from\n// a generic function it's passed, and by making it abstract and impossible to\n// subclass (see above) we prevent users from attempting to instantiate the return\n// value from a `modifier()` call.\n\n/**\n * The (optional) return type for a modifier which needs to perform some kind of\n * cleanup or teardown -- for example, removing an event listener from an\n * element besides the one passed into the modifier.\n */\n\n/**\n * An API for writing simple modifiers.\n *\n * This function runs the first time when the element the modifier was applied\n * to is inserted into the DOM, and it *autotracks* while running. Any values\n * that it accesses will be tracked, and if any of them changes, the function\n * will run again.\n *\n * **Note:** this will rerun if any of its arguments change, *whether or not you\n * access them*. This is legacy behavior and you should switch to using the\n * `{ eager: false }` variant, which has normal auto-tracking semantics.\n *\n * The modifier can also optionally return a *destructor*. The destructor\n * function will be run just before the next update, and when the element is\n * being removed entirely. It should generally clean up the changes that the\n * modifier made in the first place.\n *\n * @deprecated Until 4.0. Calling `modifier()` without an options argument is\n *   deprecated. It is supported until 4.0 so that existing modifiers can be\n *   migrated individually. Please update your function-based modifiers to pass\n *   `{ eager: false }`.\n *\n * @param fn The function which defines the modifier.\n */\n// This overload allows users to write types directly on the callback passed to\n// the `modifier` function and infer the resulting type correctly.\n\n/**\n * An API for writing simple modifiers.\n *\n * This function runs the first time when the element the modifier was applied\n * to is inserted into the DOM, and it *autotracks* while running. Any values\n * that it accesses will be tracked, and if any of them changes, the function\n * will run again.\n *\n * **Note:** this will rerun if any of its arguments change, *whether or not you\n * access them*. This is legacy behavior and you should switch to using the\n * `{ eager: false }` variant, which has normal auto-tracking semantics.\n *\n * The modifier can also optionally return a *destructor*. The destructor\n * function will be run just before the next update, and when the element is\n * being removed entirely. It should generally clean up the changes that the\n * modifier made in the first place.\n *\n * @deprecated Until 4.0. Calling `modifier()` with `{ eager: true }` is\n *   deprecated. It is supported until 4.0 so that existing modifiers can be\n *   migrated individually. Please update your function-based modifiers to pass\n *   `{ eager: false }`.\n *\n * @param fn The function which defines the modifier.\n * @param options Configuration for the modifier.\n */\n// This overload allows users to write types directly on the callback passed to\n// the `modifier` function and infer the resulting type correctly.\n\n/**\n * An API for writing simple modifiers.\n *\n * This function runs the first time when the element the modifier was applied\n * to is inserted into the DOM, and it *autotracks* while running. Any values\n * that it accesses will be tracked, including any of its arguments that it\n * accesses, and if any of them changes, the function will run again.\n *\n * **Note:** this will *not* automatically rerun because an argument changes. It\n * will only rerun if it is *using* that argument (the same as with auto-tracked\n * state in general).\n *\n * The modifier can also optionally return a *destructor*. The destructor\n * function will be run just before the next update, and when the element is\n * being removed entirely. It should generally clean up the changes that the\n * modifier made in the first place.\n *\n * @param fn The function which defines the modifier.\n * @param options Configuration for the modifier.\n */\n// This overload allows users to write types directly on the callback passed to\n// the `modifier` function and infer the resulting type correctly.\n\n/**\n * An API for writing simple modifiers.\n *\n * This function runs the first time when the element the modifier was applied\n * to is inserted into the DOM, and it *autotracks* while running. Any values\n * that it accesses will be tracked, including any of its arguments that it\n * accesses, and if any of them changes, the function will run again.\n *\n * **Note:** this will *not* automatically rerun because an argument changes. It\n * will only rerun if it is *using* that argument (the same as with auto-tracked\n * state in general).\n *\n * The modifier can also optionally return a *destructor*. The destructor\n * function will be run just before the next update, and when the element is\n * being removed entirely. It should generally clean up the changes that the\n * modifier made in the first place.\n *\n * @param fn The function which defines the modifier.\n * @param options Configuration for the modifier.\n */\n// This overload allows users to provide a `Signature` type explicitly at the\n// modifier definition site, e.g. `modifier<Sig>((el, pos, named) => {...})`.\n// **Note:** this overload must appear second, since TS' inference engine will\n// not correctly infer the type of `S` here from the types on the supplied\n// callback.\n\n// This is the runtime signature; it performs no inference whatsover and just\n// uses the simplest version of the invocation possible since, for the case of\n// setting it on the modifier manager, we don't *need* any of that info, and\n// the two previous overloads capture all invocations from a type perspective.\nexport default function modifier(fn, options = {\n  eager: true\n}) {\n  deprecate(`ember-modifier (for ${fn.name ?? fn} at ${new Error().stack}): creating a function-based modifier without options is deprecated and will be removed at v4.0`, options !== undefined, {\n    id: 'ember-modifier.function-based-options',\n    for: 'ember-modifier',\n    since: {\n      available: '3.2.0',\n      enabled: '3.2.0'\n    },\n    until: '4.0.0'\n  });\n  deprecate(`ember-modifier (for ${fn.name ?? fn} at ${new Error().stack}): creating a function-based modifier with \\`{ eager: true }\\` is deprecated and will be removed at v4.0`, options?.eager === false, {\n    id: 'ember-modifier.function-based-options',\n    for: 'ember-modifier',\n    since: {\n      available: '3.2.0',\n      enabled: '3.2.0'\n    },\n    until: '4.0.0'\n  });\n\n  // SAFETY: the cast here is a *lie*, but it is a useful one. The actual return\n  // type of `setModifierManager` today is `void`; we pretend it actually\n  // returns an opaque `Modifier` type so that we can provide a result from this\n  // type which is useful to TS-aware tooling (e.g. Glint).\n  return setModifierManager(() => options.eager ? EAGER_MANAGER : LAZY_MANAGER, fn);\n}\n\n/**\n * @internal\n */\n\n/**\n * @deprecated Instead of defining a function to match this type, simply define\n *   a function-based modifier either using a `Signature` or by defining the\n *   types on the callback passed to the `modifier`.\n */","import { A } from '@ember/array';\nimport ContainerDebugAdapter from '@ember/debug/container-debug-adapter';\nimport { ModuleRegistry } from './index';\nimport { getOwner } from '@ember/application';\n\nfunction getPod(type, key, prefix) {\n  let match = key.match(new RegExp('^/?' + prefix + '/(.+)/' + type + '$'));\n  if (match !== null) {\n    return match[1];\n  }\n}\n\n/*\n * This module defines a subclass of Ember.ContainerDebugAdapter that adds\n * support for resolving from modules.\n *\n */\n\n/* eslint-disable ember/no-classic-classes */\nexport default ContainerDebugAdapter.extend({\n  _moduleRegistry: null,\n\n  init() {\n    this._super(...arguments);\n    this.namespace = getOwner(this).lookup('application:main');\n\n    if (!this._moduleRegistry) {\n      this._moduleRegistry = new ModuleRegistry();\n    }\n  },\n\n  /**\n      The container of the application being debugged.\n      This property will be injected\n      on creation.\n\n      @property container\n      @default null\n      */\n\n  /**\n      The resolver instance of the application\n      being debugged. This property will be injected\n      on creation.\n\n      @property resolver\n      @default null\n      */\n\n  /**\n      Returns true if it is possible to catalog a list of available\n      classes in the resolver for a given type.\n\n      @method canCatalogEntriesByType\n      @param {string} type The type. e.g. \"model\", \"controller\", \"route\"\n      @return {boolean} whether a list is available for this type.\n      */\n  canCatalogEntriesByType(type) {\n    if (type === 'model') {\n      return true;\n    }\n    return this._super(...arguments);\n  },\n\n  /**\n      Returns the available classes a given type.\n\n      @method catalogEntriesByType\n      @param {string} type The type. e.g. \"model\", \"controller\", \"route\"\n      @return {Array} An array of classes.\n      */\n  catalogEntriesByType(type) {\n    let moduleNames = this._moduleRegistry.moduleNames();\n    let types = A();\n\n    let prefix = this.namespace.modulePrefix;\n\n    for (let i = 0, l = moduleNames.length; i < l; i++) {\n      let key = moduleNames[i];\n\n      if (key.indexOf(type) !== -1) {\n        // Check if it's a pod module\n        let name = getPod(type, key, this.namespace.podModulePrefix || prefix);\n        if (!name) {\n          // Not pod\n          name = key.split(type + 's/').pop();\n\n          // Support for different prefix (such as ember-cli addons).\n          // Uncomment the code below when\n          // https://github.com/ember-cli/ember-resolver/pull/80 is merged.\n\n          //let match = key.match('^/?(.+)/' + type);\n          //if (match && match[1] !== prefix) {\n          // Different prefix such as an addon\n          //name = match[1] + '@' + name;\n          //}\n        }\n        types.addObject(name);\n      }\n    }\n    return types;\n  },\n});\n","export default class Cache {\n  constructor(limit, func, store) {\n    this.limit = limit;\n    this.func = func;\n    this.store = store;\n    this.size = 0;\n    this.misses = 0;\n    this.hits = 0;\n    this.store = store || new Map();\n  }\n  get(key) {\n    let value = this.store.get(key);\n    if (this.store.has(key)) {\n      this.hits++;\n      return this.store.get(key);\n    } else {\n      this.misses++;\n      value = this.set(key, this.func(key));\n    }\n    return value;\n  }\n  set(key, value) {\n    if (this.limit > this.size) {\n      this.size++;\n      this.store.set(key, value);\n    }\n    return value;\n  }\n  purge() {\n    this.store.clear();\n    this.size = 0;\n    this.hits = 0;\n    this.misses = 0;\n  }\n}\n","/* eslint-disable no-useless-escape */\nimport Cache from './cache';\nlet STRINGS = {};\nexport function setStrings(strings) {\n  STRINGS = strings;\n}\nexport function getStrings() {\n  return STRINGS;\n}\nexport function getString(name) {\n  return STRINGS[name];\n}\nconst STRING_DASHERIZE_REGEXP = /[ _]/g;\nconst STRING_DASHERIZE_CACHE = new Cache(1000, (key) =>\n  decamelize(key).replace(STRING_DASHERIZE_REGEXP, '-')\n);\nconst STRING_CLASSIFY_REGEXP_1 = /^(\\-|_)+(.)?/;\nconst STRING_CLASSIFY_REGEXP_2 = /(.)(\\-|\\_|\\.|\\s)+(.)?/g;\nconst STRING_CLASSIFY_REGEXP_3 = /(^|\\/|\\.)([a-z])/g;\nconst CLASSIFY_CACHE = new Cache(1000, (str) => {\n  const replace1 = (_match, _separator, chr) =>\n    chr ? `_${chr.toUpperCase()}` : '';\n  const replace2 = (_match, initialChar, _separator, chr) =>\n    initialChar + (chr ? chr.toUpperCase() : '');\n  const parts = str.split('/');\n  for (let i = 0; i < parts.length; i++) {\n    parts[i] = parts[i]\n      .replace(STRING_CLASSIFY_REGEXP_1, replace1)\n      .replace(STRING_CLASSIFY_REGEXP_2, replace2);\n  }\n  return parts\n    .join('/')\n    .replace(STRING_CLASSIFY_REGEXP_3, (match /*, separator, chr */) =>\n      match.toUpperCase()\n    );\n});\nconst STRING_UNDERSCORE_REGEXP_1 = /([a-z\\d])([A-Z]+)/g;\nconst STRING_UNDERSCORE_REGEXP_2 = /\\-|\\s+/g;\nconst UNDERSCORE_CACHE = new Cache(1000, (str) =>\n  str\n    .replace(STRING_UNDERSCORE_REGEXP_1, '$1_$2')\n    .replace(STRING_UNDERSCORE_REGEXP_2, '_')\n    .toLowerCase()\n);\nconst STRING_DECAMELIZE_REGEXP = /([a-z\\d])([A-Z])/g;\nconst DECAMELIZE_CACHE = new Cache(1000, (str) =>\n  str.replace(STRING_DECAMELIZE_REGEXP, '$1_$2').toLowerCase()\n);\n/**\n  Converts a camelized string into all lower case separated by underscores.\n\n  ```javascript\n  import { decamelize } from '@ember/string';\n\n  decamelize('innerHTML');          // 'inner_html'\n  decamelize('action_name');        // 'action_name'\n  decamelize('css-class-name');     // 'css-class-name'\n  decamelize('my favorite items');  // 'my favorite items'\n  ```\n\n  @method decamelize\n  @param {String} str The string to decamelize.\n  @return {String} the decamelized string.\n  @public\n*/\nexport function decamelize(str) {\n  return DECAMELIZE_CACHE.get(str);\n}\n/**\n  Replaces underscores, spaces, or camelCase with dashes.\n\n  ```javascript\n  import { dasherize } from '@ember/string';\n\n  dasherize('innerHTML');                // 'inner-html'\n  dasherize('action_name');              // 'action-name'\n  dasherize('css-class-name');           // 'css-class-name'\n  dasherize('my favorite items');        // 'my-favorite-items'\n  dasherize('privateDocs/ownerInvoice';  // 'private-docs/owner-invoice'\n  ```\n\n  @method dasherize\n  @param {String} str The string to dasherize.\n  @return {String} the dasherized string.\n  @public\n*/\nexport function dasherize(str) {\n  return STRING_DASHERIZE_CACHE.get(str);\n}\n/**\n  Returns the UpperCamelCase form of a string.\n\n  ```javascript\n  import { classify } from '@ember/string';\n\n  classify('innerHTML');                   // 'InnerHTML'\n  classify('action_name');                 // 'ActionName'\n  classify('css-class-name');              // 'CssClassName'\n  classify('my favorite items');           // 'MyFavoriteItems'\n  classify('private-docs/owner-invoice');  // 'PrivateDocs/OwnerInvoice'\n  ```\n\n  @method classify\n  @param {String} str the string to classify\n  @return {String} the classified string\n  @public\n*/\nexport function classify(str) {\n  return CLASSIFY_CACHE.get(str);\n}\n/**\n  More general than decamelize. Returns the lower\\_case\\_and\\_underscored\n  form of a string.\n\n  ```javascript\n  import { underscore } from '@ember/string';\n\n  underscore('innerHTML');                 // 'inner_html'\n  underscore('action_name');               // 'action_name'\n  underscore('css-class-name');            // 'css_class_name'\n  underscore('my favorite items');         // 'my_favorite_items'\n  underscore('privateDocs/ownerInvoice');  // 'private_docs/owner_invoice'\n  ```\n\n  @method underscore\n  @param {String} str The string to underscore.\n  @return {String} the underscored string.\n  @public\n*/\nexport function underscore(str) {\n  return UNDERSCORE_CACHE.get(str);\n}\n","/* globals requirejs, require */\n\nimport { assert, deprecate, warn } from '@ember/debug';\nimport EmberObject from '@ember/object';\nimport { dasherize, classify, underscore } from './string';\nimport { DEBUG } from '@glimmer/env';\nimport classFactory from './utils/class-factory';\n\nimport { getOwner } from '@ember/owner';\n\nif (typeof requirejs.entries === 'undefined') {\n  requirejs.entries = requirejs._eak_seen;\n}\n\nexport class ModuleRegistry {\n  constructor(entries) {\n    this._entries = entries || requirejs.entries;\n  }\n  moduleNames() {\n    return Object.keys(this._entries);\n  }\n  has(moduleName) {\n    return moduleName in this._entries;\n  }\n  get(...args) {\n    return require(...args);\n  }\n}\n\n/**\n * This module defines a subclass of Ember.DefaultResolver that adds two\n * important features:\n *\n *  1) The resolver makes the container aware of es6 modules via the AMD\n *     output. The loader's _moduleEntries is consulted so that classes can be\n *     resolved directly via the module loader, without needing a manual\n *     `import`.\n *  2) is able to provide injections to classes that implement `extend`\n *     (as is typical with Ember).\n */\nclass Resolver extends EmberObject {\n  static moduleBasedResolver = true;\n  moduleBasedResolver = true;\n\n  _deprecatedPodModulePrefix = false;\n  _normalizeCache = Object.create(null);\n\n  /**\n   A listing of functions to test for moduleName's based on the provided\n   `parsedName`. This allows easy customization of additional module based\n   lookup patterns.\n\n   @property moduleNameLookupPatterns\n   @returns {Ember.Array}\n   */\n  moduleNameLookupPatterns = [\n    this.podBasedModuleName,\n    this.podBasedComponentsInSubdir,\n    this.mainModuleName,\n    this.defaultModuleName,\n    this.nestedColocationComponentModuleName,\n  ];\n\n  constructor() {\n    super(...arguments);\n\n    if (!this._moduleRegistry) {\n      this._moduleRegistry = new ModuleRegistry();\n    }\n\n    this.pluralizedTypes = this.pluralizedTypes || Object.create(null);\n\n    if (!this.pluralizedTypes.config) {\n      this.pluralizedTypes.config = 'config';\n    }\n  }\n\n  makeToString(factory, fullName) {\n    return '' + this.namespace.modulePrefix + '@' + fullName + ':';\n  }\n\n  shouldWrapInClassFactory(/* module, parsedName */) {\n    return false;\n  }\n\n  parseName(fullName) {\n    if (fullName.parsedName === true) {\n      return fullName;\n    }\n\n    let prefix, type, name;\n    let fullNameParts = fullName.split('@');\n\n    if (fullNameParts.length === 3) {\n      if (fullNameParts[0].length === 0) {\n        // leading scoped namespace: `@scope/pkg@type:name`\n        prefix = `@${fullNameParts[1]}`;\n        let prefixParts = fullNameParts[2].split(':');\n        type = prefixParts[0];\n        name = prefixParts[1];\n      } else {\n        // interweaved scoped namespace: `type:@scope/pkg@name`\n        prefix = `@${fullNameParts[1]}`;\n        type = fullNameParts[0].slice(0, -1);\n        name = fullNameParts[2];\n      }\n\n      if (type === 'template:components') {\n        name = `components/${name}`;\n        type = 'template';\n      }\n    } else if (fullNameParts.length === 2) {\n      let prefixParts = fullNameParts[0].split(':');\n\n      if (prefixParts.length === 2) {\n        if (prefixParts[1].length === 0) {\n          type = prefixParts[0];\n          name = `@${fullNameParts[1]}`;\n        } else {\n          prefix = prefixParts[1];\n          type = prefixParts[0];\n          name = fullNameParts[1];\n        }\n      } else {\n        let nameParts = fullNameParts[1].split(':');\n\n        prefix = fullNameParts[0];\n        type = nameParts[0];\n        name = nameParts[1];\n      }\n\n      if (type === 'template' && prefix.lastIndexOf('components/', 0) === 0) {\n        name = `components/${name}`;\n        prefix = prefix.slice(11);\n      }\n    } else {\n      fullNameParts = fullName.split(':');\n      type = fullNameParts[0];\n      name = fullNameParts[1];\n    }\n\n    let fullNameWithoutType = name;\n    let namespace = this.namespace;\n    let root = namespace;\n\n    return {\n      parsedName: true,\n      fullName: fullName,\n      prefix: prefix || this.prefix({ type: type }),\n      type: type,\n      fullNameWithoutType: fullNameWithoutType,\n      name: name,\n      root: root,\n      resolveMethodName: 'resolve' + classify(type),\n    };\n  }\n\n  resolveOther(parsedName) {\n    assert('`modulePrefix` must be defined', this.namespace.modulePrefix);\n\n    let normalizedModuleName = this.findModuleName(parsedName);\n\n    if (normalizedModuleName) {\n      let defaultExport = this._extractDefaultExport(\n        normalizedModuleName,\n        parsedName\n      );\n\n      if (defaultExport === undefined) {\n        throw new Error(\n          ` Expected to find: '${parsedName.fullName}' within '${normalizedModuleName}' but got 'undefined'. Did you forget to 'export default' within '${normalizedModuleName}'?`\n        );\n      }\n\n      if (this.shouldWrapInClassFactory(defaultExport, parsedName)) {\n        defaultExport = classFactory(defaultExport);\n      }\n\n      return defaultExport;\n    }\n  }\n\n  normalize(fullName) {\n    return (\n      this._normalizeCache[fullName] ||\n      (this._normalizeCache[fullName] = this._normalize(fullName))\n    );\n  }\n\n  resolve(fullName) {\n    let parsedName = this.parseName(fullName);\n    let resolveMethodName = parsedName.resolveMethodName;\n    let resolved;\n\n    if (typeof this[resolveMethodName] === 'function') {\n      resolved = this[resolveMethodName](parsedName);\n    }\n\n    if (resolved == null) {\n      resolved = this.resolveOther(parsedName);\n    }\n\n    return resolved;\n  }\n\n  _normalize(fullName) {\n    // A) Convert underscores to dashes\n    // B) Convert camelCase to dash-case, except for components (their\n    //    templates) and helpers where we want to avoid shadowing camelCase\n    //    expressions\n    // C) replace `.` with `/` in order to make nested controllers work in the following cases\n    //      1. `needs: ['posts/post']`\n    //      2. `{{render \"posts/post\"}}`\n    //      3. `this.render('posts/post')` from Route\n\n    let split = fullName.split(':');\n    if (split.length > 1) {\n      let type = split[0];\n\n      if (\n        type === 'component' ||\n        type === 'helper' ||\n        type === 'modifier' ||\n        (type === 'template' && split[1].indexOf('components/') === 0)\n      ) {\n        return type + ':' + split[1].replace(/_/g, '-');\n      } else {\n        return type + ':' + dasherize(split[1].replace(/\\./g, '/'));\n      }\n    } else {\n      return fullName;\n    }\n  }\n\n  pluralize(type) {\n    return (\n      this.pluralizedTypes[type] || (this.pluralizedTypes[type] = type + 's')\n    );\n  }\n\n  podBasedLookupWithPrefix(podPrefix, parsedName) {\n    let fullNameWithoutType = parsedName.fullNameWithoutType;\n\n    if (parsedName.type === 'template') {\n      fullNameWithoutType = fullNameWithoutType.replace(/^components\\//, '');\n    }\n\n    return podPrefix + '/' + fullNameWithoutType + '/' + parsedName.type;\n  }\n\n  podBasedModuleName(parsedName) {\n    let podPrefix =\n      this.namespace.podModulePrefix || this.namespace.modulePrefix;\n\n    return this.podBasedLookupWithPrefix(podPrefix, parsedName);\n  }\n\n  podBasedComponentsInSubdir(parsedName) {\n    let podPrefix =\n      this.namespace.podModulePrefix || this.namespace.modulePrefix;\n    podPrefix = podPrefix + '/components';\n\n    if (\n      parsedName.type === 'component' ||\n      /^components/.test(parsedName.fullNameWithoutType)\n    ) {\n      return this.podBasedLookupWithPrefix(podPrefix, parsedName);\n    }\n  }\n\n  resolveEngine(parsedName) {\n    let engineName = parsedName.fullNameWithoutType;\n    let engineModule = engineName + '/engine';\n\n    if (this._moduleRegistry.has(engineModule)) {\n      return this._extractDefaultExport(engineModule);\n    }\n  }\n\n  resolveRouteMap(parsedName) {\n    let engineName = parsedName.fullNameWithoutType;\n    let engineRoutesModule = engineName + '/routes';\n\n    if (this._moduleRegistry.has(engineRoutesModule)) {\n      let routeMap = this._extractDefaultExport(engineRoutesModule);\n\n      assert(\n        `The route map for ${engineName} should be wrapped by 'buildRoutes' before exporting.`,\n        routeMap.isRouteMap\n      );\n\n      return routeMap;\n    }\n  }\n\n  resolveTemplate(parsedName) {\n    return this.resolveOther(parsedName);\n  }\n\n  mainModuleName(parsedName) {\n    if (parsedName.fullNameWithoutType === 'main') {\n      // if router:main or adapter:main look for a module with just the type first\n      return parsedName.prefix + '/' + parsedName.type;\n    }\n  }\n\n  defaultModuleName(parsedName) {\n    return (\n      parsedName.prefix +\n      '/' +\n      this.pluralize(parsedName.type) +\n      '/' +\n      parsedName.fullNameWithoutType\n    );\n  }\n\n  nestedColocationComponentModuleName(parsedName) {\n    if (parsedName.type === 'component') {\n      return (\n        parsedName.prefix +\n        '/' +\n        this.pluralize(parsedName.type) +\n        '/' +\n        parsedName.fullNameWithoutType +\n        '/index'\n      );\n    }\n  }\n\n  prefix(parsedName) {\n    let tmpPrefix = this.namespace.modulePrefix;\n\n    if (this.namespace[parsedName.type + 'Prefix']) {\n      tmpPrefix = this.namespace[parsedName.type + 'Prefix'];\n    }\n\n    return tmpPrefix;\n  }\n\n  findModuleName(parsedName, loggingDisabled) {\n    let moduleNameLookupPatterns = this.moduleNameLookupPatterns;\n    let moduleName;\n\n    for (\n      let index = 0, length = moduleNameLookupPatterns.length;\n      index < length;\n      index++\n    ) {\n      let item = moduleNameLookupPatterns[index];\n\n      let tmpModuleName = item.call(this, parsedName);\n\n      // allow treat all dashed and all underscored as the same thing\n      // supports components with dashes and other stuff with underscores.\n      if (tmpModuleName) {\n        tmpModuleName = this.chooseModuleName(tmpModuleName, parsedName);\n      }\n\n      if (tmpModuleName && this._moduleRegistry.has(tmpModuleName)) {\n        moduleName = tmpModuleName;\n      }\n\n      if (!loggingDisabled) {\n        this._logLookup(moduleName, parsedName, tmpModuleName);\n      }\n\n      if (moduleName) {\n        return moduleName;\n      }\n    }\n  }\n\n  chooseModuleName(moduleName, parsedName) {\n    let underscoredModuleName = underscore(moduleName);\n\n    if (\n      moduleName !== underscoredModuleName &&\n      this._moduleRegistry.has(moduleName) &&\n      this._moduleRegistry.has(underscoredModuleName)\n    ) {\n      throw new TypeError(\n        `Ambiguous module names: '${moduleName}' and '${underscoredModuleName}'`\n      );\n    }\n\n    if (this._moduleRegistry.has(moduleName)) {\n      return moduleName;\n    } else if (this._moduleRegistry.has(underscoredModuleName)) {\n      return underscoredModuleName;\n    }\n    // workaround for dasherized partials:\n    // something/something/-something => something/something/_something\n    let partializedModuleName = moduleName.replace(/\\/-([^/]*)$/, '/_$1');\n\n    if (this._moduleRegistry.has(partializedModuleName)) {\n      deprecate(\n        'Modules should not contain underscores. ' +\n          'Attempted to lookup \"' +\n          moduleName +\n          '\" which ' +\n          'was not found. Please rename \"' +\n          partializedModuleName +\n          '\" ' +\n          'to \"' +\n          moduleName +\n          '\" instead.',\n        false,\n        {\n          id: 'ember-resolver.underscored-modules',\n          until: '3.0.0',\n          for: 'ember-resolver',\n          since: '0.1.0',\n        }\n      );\n\n      return partializedModuleName;\n    }\n\n    if (DEBUG) {\n      let isCamelCaseHelper =\n        parsedName.type === 'helper' && /[a-z]+[A-Z]+/.test(moduleName);\n      if (isCamelCaseHelper) {\n        this._camelCaseHelperWarnedNames =\n          this._camelCaseHelperWarnedNames || [];\n        let alreadyWarned =\n          this._camelCaseHelperWarnedNames.indexOf(parsedName.fullName) > -1;\n        if (!alreadyWarned && this._moduleRegistry.has(dasherize(moduleName))) {\n          this._camelCaseHelperWarnedNames.push(parsedName.fullName);\n          warn(\n            'Attempted to lookup \"' +\n              parsedName.fullName +\n              '\" which ' +\n              'was not found. In previous versions of ember-resolver, a bug would have ' +\n              'caused the module at \"' +\n              dasherize(moduleName) +\n              '\" to be ' +\n              'returned for this camel case helper name. This has been fixed. ' +\n              'Use the dasherized name to resolve the module that would have been ' +\n              'returned in previous versions.',\n            false,\n            { id: 'ember-resolver.camelcase-helper-names', until: '3.0.0' }\n          );\n        }\n      }\n    }\n  }\n\n  // used by Ember.DefaultResolver.prototype._logLookup\n  lookupDescription(fullName) {\n    let parsedName = this.parseName(fullName);\n\n    let moduleName = this.findModuleName(parsedName, true);\n\n    return moduleName;\n  }\n\n  // only needed until 1.6.0-beta.2 can be required\n  _logLookup(found, parsedName, description) {\n    let owner = getOwner(this);\n    let env = owner?.resolveRegistration?.('config:environment');\n    if (!env?.LOG_MODULE_RESOLVER && !parsedName.root.LOG_RESOLVER) {\n      return;\n    }\n\n    let padding;\n    let symbol = found ? '[✓]' : '[ ]';\n\n    if (parsedName.fullName.length > 60) {\n      padding = '.';\n    } else {\n      padding = new Array(60 - parsedName.fullName.length).join('.');\n    }\n\n    if (!description) {\n      description = this.lookupDescription(parsedName);\n    }\n\n    /* eslint-disable no-console */\n    if (console && console.info) {\n      console.info(symbol, parsedName.fullName, padding, description);\n    }\n  }\n\n  knownForType(type) {\n    let moduleKeys = this._moduleRegistry.moduleNames();\n\n    let items = Object.create(null);\n    for (let index = 0, length = moduleKeys.length; index < length; index++) {\n      let moduleName = moduleKeys[index];\n      let fullname = this.translateToContainerFullname(type, moduleName);\n\n      if (fullname) {\n        items[fullname] = true;\n      }\n    }\n\n    return items;\n  }\n\n  translateToContainerFullname(type, moduleName) {\n    let prefix = this.prefix({ type });\n\n    // Note: using string manipulation here rather than regexes for better performance.\n    // pod modules\n    // '^' + prefix + '/(.+)/' + type + '$'\n    let podPrefix = prefix + '/';\n    let podSuffix = '/' + type;\n    let start = moduleName.indexOf(podPrefix);\n    let end = moduleName.indexOf(podSuffix);\n\n    if (\n      start === 0 &&\n      end === moduleName.length - podSuffix.length &&\n      moduleName.length > podPrefix.length + podSuffix.length\n    ) {\n      return type + ':' + moduleName.slice(start + podPrefix.length, end);\n    }\n\n    // non-pod modules\n    // '^' + prefix + '/' + pluralizedType + '/(.+)$'\n    let pluralizedType = this.pluralize(type);\n    let nonPodPrefix = prefix + '/' + pluralizedType + '/';\n\n    if (\n      moduleName.indexOf(nonPodPrefix) === 0 &&\n      moduleName.length > nonPodPrefix.length\n    ) {\n      return type + ':' + moduleName.slice(nonPodPrefix.length);\n    }\n  }\n\n  _extractDefaultExport(normalizedModuleName) {\n    let module = this._moduleRegistry.get(\n      normalizedModuleName,\n      null,\n      null,\n      true /* force sync */\n    );\n\n    if (module && module['default']) {\n      module = module['default'];\n    }\n\n    return module;\n  }\n}\n\nexport default Resolver;\n","export default function classFactory(klass) {\n  return {\n    create(injections) {\n      if (typeof klass.extend === 'function') {\n        return klass.extend(injections);\n      } else {\n        return klass;\n      }\n    },\n  };\n}\n","import { helper } from '@ember/component/helper';\nimport truthConvert from '../utils/truth-convert';\n\nexport function and(params) {\n  for (let i=0, len=params.length; i<len; i++) {\n    if (truthConvert(params[i]) === false) {\n      return params[i];\n    }\n  }\n  return params[params.length-1];\n}\n\nexport default helper(and);\n","import { helper } from '@ember/component/helper';\n\nexport function equal(params) {\n  return params[0] === params[1];\n}\n\nexport default helper(equal);\n","import { isArray } from '@ember/array';\nimport { get } from '@ember/object';\n\nexport default function truthConvert(result) {\n  const truthy = result && get(result, 'isTruthy');\n  if (typeof truthy === 'boolean') { return truthy; }\n\n  if (isArray(result)) {\n    return get(result, 'length') !== 0;\n  } else {\n    return !!result;\n  }\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _jspdf = _interopRequireDefault(require(\"jspdf\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n///////////////////////////////////////////////////////////////////////////////////////////\n// pdf.js: Class for creating PDF Files                                                  //\n///////////////////////////////////////////////////////////////////////////////////////////\n// These are in mm\nconst PAGE_MARGIN_LEFT = 15;\nconst PAGE_MARGIN_RIGHT = 15;\nconst PAGE_MARGIN_TOP = 15;\nconst PAGE_MARGIN_BOTTOM = 15; // Font Sizes\n\nconst FONT_SIZE_H1 = 24;\nconst FONT_SIZE_H2 = 16;\nconst FONT_SIZE_NORMAL = 14;\nconst FONT_SIZE_SMALL = 12;\nconst PX_PER_MM = 3.77952755906;\n\nclass Pdf {\n  constructor(fonts, orientation, units, papersize) {\n    _defineProperty(this, \"pdfDoc\", null);\n\n    _defineProperty(this, \"boldFontName\", null);\n\n    _defineProperty(this, \"normalFontName\", null);\n\n    _defineProperty(this, \"italicFontName\", null);\n\n    let o = orientation ? orientation : 'l';\n    let u = units ? units : 'mm';\n    let s = papersize ? papersize : 'letter';\n    this.pdfDoc = new _jspdf.default(o, u, s, true, true);\n    this.addFonts(fonts);\n    this.pdfDoc.deletePage(1); // Start PDF with no pages\n  } ///////////////////////////////////////////////////////////////////////////////////////\n  // This function adds the title page of your PDF File.                               //\n  // Inputs:                                                                           //\n  //   appName - Application Name (string)                                             //\n  //   designDescription - Includes design name, description and date created (string) //\n  //   coverImage - a structure containing the following properties:                   //\n  //     > data image data base64 encoded (string)                                     //\n  //     > format - Image format like PNG or JPEG (string)                             //\n  ///////////////////////////////////////////////////////////////////////////////////////\n\n\n  addTitlePage(appName, designDescription, coverImage) {\n    // Add a Page\n    this.pdfDoc.addPage(); // Get Page dimensions\n\n    let width = this.pdfDoc.internal.pageSize.getWidth();\n    let height = this.pdfDoc.internal.pageSize.getHeight(); // Set Image Dimensions (We will stretch to fill the page)\n\n    let imageWidth = width - 16;\n    let imageHeight = height - 16; // Draw Cover Image\n\n    this.pdfDoc.addImage(coverImage.data, coverImage.format, 8, 8, imageWidth, imageHeight, undefined, 'MEDIUM');\n    let xOffset = width * 32 / 50;\n    let yOffset = height * 14 / 48; // Draw Application Name\n\n    this.pdfDoc.setFont(this.normalFontName, 'normal').setFontSize(FONT_SIZE_H1).setTextColor('#48D1CC').text(appName, xOffset, yOffset, 'left');\n    yOffset = height * 16 / 48; // Draw Box\n\n    this.pdfDoc.setLineWidth(0.75);\n    this.pdfDoc.rect(xOffset, yOffset, 85, 60);\n    this.pdfDoc.setFont(this.normalFontName, 'normal').setFontSize(FONT_SIZE_SMALL).setTextColor('#000000');\n    yOffset += this.pdfDoc.getTextDimensions('A').h * 1.5;\n    xOffset += this.pdfDoc.getTextDimensions('A').w * 1.5; // Draw Text inside Box (Design Description, Design Owner, Created Date)\n\n    let descriptionContents = this.pdfDoc.splitTextToSize(designDescription, 85 - this.pdfDoc.getTextDimensions('A').w * 3);\n\n    for (let i = 0; i < descriptionContents.length; i++) {\n      this.pdfDoc.text(descriptionContents[i], xOffset, yOffset, 'left');\n      yOffset += this.pdfDoc.getTextDimensions('A').h;\n    }\n\n    return;\n  } ///////////////////////////////////////////////////////////////////////////////////////\n  // This function adds the data page to your PDF File.                                //\n  // Inputs:                                                                           //\n  //   heading - Page heading (string)                                                 //\n  //   subheading - Page subheading (string)                                           //\n  //   fieldData - a structure with the following properties:                          //\n  //     > name (string)                                                               //\n  //     > value (string)                                                              //\n  ///////////////////////////////////////////////////////////////////////////////////////\n\n\n  addDataPage(heading, subheading, fieldData) {\n    // Add a Page\n    this.pdfDoc.addPage(); // Get Page dimensions\n\n    let width = this.pdfDoc.internal.pageSize.getWidth(); //let height = this.pdfDoc.internal.pageSize.getHeight();\n\n    let yOffset = PAGE_MARGIN_TOP; // Draw Data Page Title, Top and Center\n\n    this.pdfDoc.setFont(this.boldFontName, 'bold').setFontSize(FONT_SIZE_H1).text(heading, width / 2, yOffset, 'center');\n    yOffset += this.pdfDoc.getTextDimensions(heading).h * 2; // Draw Data Page Subheading\n\n    this.pdfDoc.setFont(this.boldFontName, 'bold').setFontSize(FONT_SIZE_H2).text(subheading, PAGE_MARGIN_LEFT, yOffset);\n    yOffset += this.pdfDoc.getTextDimensions(subheading).h * 2; // Draw Data Fields\n\n    this.pdfDoc.setFont(this.normalFontName, 'normal').setFontSize(FONT_SIZE_NORMAL);\n\n    for (let fieldItem of fieldData) {\n      let fieldtext = fieldItem.name + ': ' + fieldItem.value;\n      this.pdfDoc.text(fieldtext, PAGE_MARGIN_LEFT, yOffset);\n      yOffset += this.pdfDoc.getTextDimensions(fieldtext).h * 1.5;\n    }\n\n    return;\n  } ///////////////////////////////////////////////////////////////////////////////////////\n  // This function adds a page containing an image to your PDF File.                   //\n  // Usually our graphs, stages and circuits are images.                               //\n  // Inputs:                                                                           //\n  //   imgData - a structure with the following properties:                            //\n  //     > name - Page heading (string)                                                //\n  //     > value - image data in Base64 format (string)                                //\n  //     > format - image format like PNG, JPEG, GIF (string)                          //\n  //     > width - image width in pixels (number)                                      //\n  //     > height - image height in pixels (number)                                    //\n  ///////////////////////////////////////////////////////////////////////////////////////\n\n\n  addImagePage(imgData) {\n    // Get image information\n    let name = imgData.name;\n    let data = imgData.value;\n    let format = imgData.format;\n    let imgWidth = imgData.width / PX_PER_MM;\n    let imgHeight = imgData.height / PX_PER_MM; // Add a Page\n\n    this.pdfDoc.addPage(); // Get Page dimensions\n\n    let width = this.pdfDoc.internal.pageSize.getWidth();\n    let height = this.pdfDoc.internal.pageSize.getHeight();\n    let yOffset = PAGE_MARGIN_TOP; // Draw Image Title, Top and Center\n\n    this.pdfDoc.setFont(this.boldFontName, 'bold').setFontSize(FONT_SIZE_H2).text(name, width / 2, yOffset, 'center');\n    yOffset += this.pdfDoc.getTextDimensions(name).h; // Set Image Dimensions (Scaling is considered)\n\n    let scaleWidth = (width - PAGE_MARGIN_LEFT - PAGE_MARGIN_RIGHT) / imgWidth;\n    let scaleHeight = (height - yOffset - PAGE_MARGIN_BOTTOM) / imgHeight;\n    let useScale = scaleWidth < scaleHeight ? scaleWidth : scaleHeight;\n    let imageWidth = imgWidth * useScale;\n    let imageHeight = imgHeight * useScale; // Draw Image information\n\n    this.pdfDoc.addImage(data, format, PAGE_MARGIN_LEFT, yOffset, imageWidth, imageHeight, undefined, 'MEDIUM');\n    return;\n  } ///////////////////////////////////////////////////////////////////////////////////////\n  // This function adds a page containing a table to your PDF File.                    //\n  // Inputs:                                                                           //\n  //   tableData - a structure with the following properties:                          //\n  //     > title - Page heading (string)                                               //\n  //     > columns - Table column names (array of string)                              //\n  //     > columnWidths - List of table columns widths in                              //\n  //                      percentage/100 (array of number)                             //\n  //     > data - table rows (two dimensional array of strings)                        //\n  ///////////////////////////////////////////////////////////////////////////////////////\n\n\n  addTablePage(tableData) {\n    this.pdfDoc.addPage(); // Get Page dimensions\n\n    let width = this.pdfDoc.internal.pageSize.getWidth();\n    let yOffset = PAGE_MARGIN_TOP;\n    let xOffset = PAGE_MARGIN_LEFT; // Draw Data Page Title, Top and Center\n\n    this.pdfDoc.setFont(this.boldFontName, 'bold').setFontSize(FONT_SIZE_H2).text(tableData.title, width / 2, yOffset, 'center');\n    yOffset += this.pdfDoc.getTextDimensions(tableData.title).h * 2;\n    let tableWidth = width - PAGE_MARGIN_LEFT - PAGE_MARGIN_RIGHT;\n    let rowHeight = this.pdfDoc.getTextDimensions(tableData.title).h * 1.25; // Draw Data Table Headers\n\n    this.pdfDoc.setFont(this.boldFontName, 'bold').setFontSize(FONT_SIZE_NORMAL);\n    this.pdfDoc.setFillColor(0, 91, 149);\n    this.pdfDoc.rect(xOffset, yOffset, tableWidth, rowHeight, 'FD');\n    let tableStart = yOffset;\n    let tableEnd = yOffset + rowHeight * (tableData.data.length + 1); // Draw Table Content\n\n    yOffset += rowHeight;\n    this.pdfDoc.rect(xOffset, yOffset, tableWidth, rowHeight * tableData.data.length); // Draw Row Lines\n\n    for (let i = 0; i < tableData.data.length - 1; i++) {\n      yOffset += rowHeight;\n      this.pdfDoc.line(xOffset, yOffset, width - PAGE_MARGIN_RIGHT, yOffset);\n    } // Draw Column Lines\n\n\n    for (let i = 0; i < tableData.columns.length - 1; i++) {\n      xOffset += tableWidth * tableData.columnWidths[i];\n      this.pdfDoc.line(xOffset, tableStart, xOffset, tableEnd);\n    } // Draw Header Text\n\n\n    this.pdfDoc.setTextColor(255);\n    xOffset = PAGE_MARGIN_LEFT + 1;\n    yOffset = tableStart;\n\n    for (let i = 0; i < tableData.columns.length; i++) {\n      this.pdfDoc.text(tableData.columns[i], xOffset, yOffset + this.pdfDoc.getTextDimensions(tableData.columns[i]).h + 0.5, 'left');\n      xOffset += tableWidth * tableData.columnWidths[i];\n    } // Draw Row Data\n\n\n    this.pdfDoc.setFont(this.normalFontName, 'normal').setFontSize(FONT_SIZE_NORMAL);\n    this.pdfDoc.setTextColor(0);\n    yOffset = tableStart;\n\n    for (let i = 0; i < tableData.data.length; i++) {\n      xOffset = PAGE_MARGIN_LEFT + 1;\n      yOffset += rowHeight;\n      let rowData = tableData.data[i];\n\n      for (let j = 0; j < rowData.length; j++) {\n        this.pdfDoc.text(rowData[j], xOffset, yOffset + this.pdfDoc.getTextDimensions(rowData[j]).h + 0.5, 'left');\n        xOffset += tableWidth * tableData.columnWidths[j];\n      }\n    }\n\n    return;\n  } ///////////////////////////////////////////////////////////////////////////////////////\n  // This function returns your PDF Document Object in Blob form.                      //\n  // Returns:                                                                          //\n  //   Blob object containing your PDF document (Blob)                                 //\n  ///////////////////////////////////////////////////////////////////////////////////////\n\n\n  toBlob() {\n    return this.pdfDoc.output('blob');\n  } ///////////////////////////////////////////////////////////////////////////////////////\n  // This function saves your PDF to a file on storage.                                //\n  // Inputs:                                                                           //\n  //   fileName - Name of PDF file, including path (string)                            //\n  ///////////////////////////////////////////////////////////////////////////////////////\n\n\n  toFile(fileName) {\n    this.pdfDoc.save(fileName);\n    return;\n  } ///////////////////////////////////////////////////////////////////////////////////////\n  // This function deletes all pages of your PDF Document.                             //\n  ///////////////////////////////////////////////////////////////////////////////////////\n\n\n  clear() {\n    let numPages = this.pdfDoc.internal.getNumberOfPages();\n\n    for (let i = 0; i < numPages; i++) {\n      this.pdfDoc.deletePage(1); // Delete PDF PAge\n    }\n\n    return;\n  } // Internal function called inside constructor to add custom/external fonts\n\n\n  addFonts(fonts) {\n    let normalFontIndex = 0;\n\n    if (fonts) {\n      for (let i = 0; i < fonts.length; i++) {\n        this.pdfDoc.addFileToVFS(fonts[i].fileName, fonts[i].data);\n        this.pdfDoc.addFont(fonts[i].fileName, fonts[i].fontName, fonts[i].fontStyle);\n\n        switch (fonts[i].fontStyle) {\n          case 'normal':\n            this.normalFontName = fonts[i].fontName;\n            normalFontIndex = i;\n            break;\n\n          case 'bold':\n            this.boldFontName = fonts[i].fontName;\n            break;\n\n          case 'italic':\n            this.italicFontName = fonts[i].fontName;\n            break;\n        }\n      }\n    }\n\n    if (!this.normalFontName) this.normalFontName = 'helvetica';\n\n    if (!this.boldFontName) {\n      this.boldFontName = this.normalFontName;\n      if (this.normalFontName !== 'helvetica') this.pdfDoc.addFont(fonts[normalFontIndex].fileName, fonts[normalFontIndex].fontName, 'bold');\n    }\n\n    if (!this.italicFontName) {\n      this.italicFontName = this.normalFontName;\n      if (this.normalFontName !== 'helvetica') this.pdfDoc.addFont(fonts[normalFontIndex].fileName, fonts[normalFontIndex].fontName, 'italic');\n    }\n  }\n\n}\n\nexports.default = Pdf;","\n// UMD Module boilerplate\n(function (root, factory) {\n  /*global define */\n  /*global module */\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define([], factory);\n  } else if (typeof module === 'object' && module.exports) {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory();\n  } else {\n    // Browser globals (root is window)\n    root.PrecisionStudioMenu = factory();\n  }\n}(typeof self !== 'undefined' ? self : this, function () { /* eslint-disable-line no-restricted-globals */\n  var SYMBOLTEXT = \n    '<svg id=\"precisionstudio-icons\" aria-hidden=\"true\" focusable=\"false\" style=\"position: absolute; width: 0; height: 0; overflow: hidden;\" ' + \n          'version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">' + \n    '<defs>' +\n    '<linearGradient id=\"precisionstudio-icon-gradient\" x1=\"103.25\" y1=\"207.08\" x2=\"103.25\" y2=\"0.57\" gradientUnits=\"userSpaceOnUse\"><stop offset=\"0\" stop-color=\"#006fb9\"/><stop offset=\"1\" stop-color=\"#15bef0\"/></linearGradient>' +\n    '<symbol id=\"precisionstudio-icon-precision-studio\" viewBox=\"0 0 32 32\">' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"1.3406\" d=\"M29.050 2.942c-0.001 0-0.001 0-0.002 0-1.229 0-2.225 0.996-2.225 2.225v0 22.203c-0.001-0.019-0.001-0.042-0.001-0.065 0-1.23 0.997-2.227 2.227-2.227s2.227 0.997 2.227 2.227c0 0.023-0 0.046-0.001 0.068l0-0.003v-22.203c0-1.229-0.996-2.225-2.225-2.225v0z\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"1.3406\" d=\"M2.895 2.942c-1.229 0-2.225 0.996-2.225 2.225v0 22.203c-0.001-0.019-0.001-0.042-0.001-0.065 0-1.23 0.997-2.227 2.227-2.227s2.227 0.997 2.227 2.227c0 0.023-0 0.046-0.001 0.068l0-0.003v-22.203c0-1.229-0.996-2.225-2.225-2.225-0.001 0-0.001 0-0.002 0h0z\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"1.3406\" d=\"M5.122 5.141h21.701\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"1.3406\" d=\"M0.67 27.37v0c0 0.941 0.763 1.704 1.704 1.704v0h27.204c0.941 0 1.704-0.763 1.704-1.704v0 0\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"1.3406\" d=\"M10.289 10.202h11.147c0.333 0 0.602 0.27 0.602 0.602v11.147c0 0.333-0.27 0.602-0.602 0.602h-11.147c-0.333 0-0.602-0.27-0.602-0.602v-11.147c0-0.333 0.27-0.602 0.602-0.602z\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"0.6627\" d=\"M13.569 13.633h4.59c0.248 0 0.449 0.201 0.449 0.449v4.59c0 0.248-0.201 0.449-0.449 0.449h-4.59c-0.248 0-0.449-0.201-0.449-0.449v-4.59c0-0.248 0.201-0.449 0.449-0.449z\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"0.6627\" d=\"M21.171 10.202v-1.922\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"0.6627\" d=\"M19.403 10.202v-1.922\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"0.6627\" d=\"M17.632 10.202v-1.922\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"0.6627\" d=\"M15.864 10.202v-1.922\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"0.6627\" d=\"M14.093 10.202v-1.922\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"0.6627\" d=\"M12.325 10.202v-1.922\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"0.6627\" d=\"M10.554 10.202v-1.922\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"0.6627\" d=\"M21.171 24.466v-1.912\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"0.6627\" d=\"M19.403 24.466v-1.912\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"0.6627\" d=\"M17.632 24.466v-1.912\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"0.6627\" d=\"M15.864 24.466v-1.912\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"0.6627\" d=\"M14.093 24.466v-1.912\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"0.6627\" d=\"M12.325 24.466v-1.912\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"0.6627\" d=\"M10.554 24.466v-1.912\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"0.6627\" d=\"M22.040 21.686h1.929\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"0.6627\" d=\"M22.040 19.916h1.929\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"0.6627\" d=\"M22.040 18.147h1.929\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"0.6627\" d=\"M22.040 16.379h1.929\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"0.6627\" d=\"M22.040 14.608h1.929\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"0.6627\" d=\"M22.040 12.84h1.929\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"0.6627\" d=\"M22.040 11.069h1.929\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"0.6627\" d=\"M7.784 21.686h1.903\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"0.6627\" d=\"M7.784 19.916h1.903\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"0.6627\" d=\"M7.784 18.147h1.903\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"0.6627\" d=\"M7.784 16.379h1.903\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"0.6627\" d=\"M7.784 14.608h1.903\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"0.6627\" d=\"M7.784 12.84h1.903\"></path>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"4\" stroke-width=\"0.6627\" d=\"M7.784 11.069h1.903\"></path>' +\n    '</symbol>' +\n\n    '<symbol id=\"precisionstudio-icon-adc-driver\" viewBox=\"0 0 206.51 206.51\">' +\n    '<rect class=\"precisionstudiomenu-takes-gradient\" width=\"206.51\" height=\"206.51\" rx=\"29.67\"/>' +\n    '<rect fill=\"none\" stroke=\"currentcolor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" x=\"9\" y=\"9\" width=\"188.51\" height=\"188.51\" rx=\"20.67\" transform=\"translate(206.51 0) rotate(90)\"/>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-width=\"7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M31.86,78.9v48.7l43-24.46-43-24.24Z\"/>' +\n    '<polygon fill=\"none\" stroke=\"currentcolor\" stroke-width=\"7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill-rule=\"evenodd\" points=\"90.72 103.25 115.07 79.05 174.64 79.05 174.64 127.45 115.07 127.45 90.72 103.25\"/>' +\n    '</symbol>' +\n\n    '<symbol id=\"precisionstudio-icon-analog-filter\" viewBox=\"0 0 206.51 206.51\">' +\n    '<rect class=\"precisionstudiomenu-takes-gradient\" width=\"206.51\" height=\"206.51\" rx=\"29.67\"/>' +\n    '<rect fill=\"none\" stroke=\"currentcolor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"cls-2\" x=\"9\" y=\"9\" width=\"188.51\" height=\"188.51\" rx=\"20.67\" transform=\"translate(206.51 0) rotate(90)\"/>' +\n    '<polyline fill=\"none\" stroke=\"currentcolor\" stroke-width=\"10.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" points=\"57.27 57.86 128.68 57.81 149.24 148.69\"/>' +\n    '</symbol>' +\n\n    '<symbol id=\"precisionstudio-icon-dds\" viewBox=\"0 0 206.51 206.51\">' +\n    '<rect class=\"precisionstudiomenu-takes-gradient\" width=\"206.51\" height=\"206.51\" rx=\"24.75\"/>' +\n    '<rect fill=\"none\" stroke=\"currentcolor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" x=\"9\" y=\"9\" width=\"188.51\" height=\"188.51\" rx=\"15.75\" transform=\"translate(206.51 0) rotate(90)\"/>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-width=\"10.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M37.33,104C42.08,94.61,46.76,85.2,51.87,76c3.93-7,9.68-17.27,18.93-17.31s15,9.33,19,16.42c5.21,9.3,10,18.8,14.56,28.45,4.38,9.32,8.93,18.51,13.89,27.54,3.78,6.9,9.87,18,19.3,16.55,9.17-1.38,14.61-11.38,18.73-18.64,2.7-4.76,5.13-9.67,7.72-14.49,1.44-2.69,5.15-9.23,5.15-9.23\"/>' +\n    '</symbol>' +\n\n    '<symbol id=\"precisionstudio-icon-in-amp\" viewBox=\"0 0 206.51 206.51\">' +\n    '<rect class=\"precisionstudiomenu-takes-gradient\" width=\"206.51\" height=\"206.51\" rx=\"29.67\"/>' +\n    '<rect fill=\"none\" stroke=\"currentcolor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" x=\"9\" y=\"9\" width=\"188.51\" height=\"188.51\" rx=\"20.67\" transform=\"translate(206.51 0) rotate(90)\"/>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-width=\"7.08\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M83.18,66.85v72.81l64.32-36.57L83.18,66.85Z\"/>' +\n    '<polyline fill=\"none\" stroke=\"currentcolor\" stroke-width=\"3.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" points=\"83.18 124.13 64.29 124.13 64.29 117.39 60.42 115.3 68.6 110.53 60.37 105.61 68.6 100.77 60.42 96.07 68.6 91.23 64.29 88.69 64.29 82.37 83.18 82.37\"/>' +\n    '<polygon fill=\"none\" stroke=\"currentcolor\" stroke-width=\"10.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"  points=\"166.12 140.3 103.25 165.86 40.39 140.3 40.39 66.21 103.25 40.65 166.12 66.21 166.12 140.3\"/>' +\n    '</symbol>' +\n\n    '<symbol id=\"precisionstudio-icon-photodiode\" viewBox=\"0 0 206.51 206.51\">' +\n    '<rect class=\"precisionstudiomenu-takes-gradient\" width=\"206.51\" height=\"206.51\" rx=\"29.67\"/>' +\n    '<rect fill=\"none\" stroke=\"currentcolor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" x=\"9\" y=\"9\" width=\"188.51\" height=\"188.51\" rx=\"20.67\" transform=\"translate(206.51 0) rotate(90)\"/>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-width=\"7.08\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M134.86,78.05v50.41l44.53-25.32L134.86,78.05Z\"/>' +\n    '<polyline fill=\"currentcolor\" points=\"74.76 126.82 65.62 108.91 54.66 119.87 72.56 129.01\"/>' +\n    '<polyline fill=\"none\" stroke=\"currentcolor\" stroke-width=\"3.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" points=\"28.68 101.44 45.36 118.11 48.54 102.23 63.36 117.06\"/>' +\n    '<polyline fill=\"currentcolor\" points=\"73.45 102.87 64.31 84.97 53.35 95.93 71.26 105.07\"/>' +\n    '<polyline fill=\"none\" stroke=\"currentcolor\" stroke-width=\"3.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" points=\"27.38 77.49 44.06 94.17 47.23 78.28 62.06 93.11\"/>' +\n    '<line fill=\"none\" stroke=\"currentcolor\" stroke-width=\"3.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" x1=\"87.05\" y1=\"87.45\" x2=\"115.41\" y2=\"87.45\"/>' +\n    '<polygon fill=\"currentcolor\" fill-rule=\"evenodd\" points=\"85.52 113.81 99.76 85.83 101.19 85.83 115.98 113.81 85.52 113.81 85.52 113.81\"/>' +\n    '<line fill=\"none\" stroke=\"currentcolor\" stroke-width=\"3.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" x1=\"100.75\" y1=\"77.49\" x2=\"100.75\" y2=\"129.01\"/>' +\n    '</symbol>' +\n\n    '<symbol id=\"precisionstudio-icon-virtual-eval\" viewBox=\"0 0 206.51 206.51\">' +\n    '<rect class=\"precisionstudiomenu-takes-gradient\" width=\"206.51\" height=\"206.51\" rx=\"24.75\"/>' +\n    '<rect fill=\"none\" stroke=\"currentcolor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" x=\"9\" y=\"9\" width=\"188.51\" height=\"188.51\" rx=\"15.75\" transform=\"translate(206.51 0) rotate(90)\"/>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-width=\"3.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M100.09,78.56l4.15-3.51-3.77-5.57-4.93,2.61a15.26,15.26,0,0,0-5-2.78l-.17-5.43-6.7-.52-1,5.47A15.41,15.41,0,0,0,77.43,71l-4.35-3.26-4.59,4.91,3.64,4.22a15.17,15.17,0,0,0-1.6,5.46l-5.26,1.36,1,6.66,5.56-.22\"/>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-width=\"3.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M80.53,83.18a5.32,5.32,0,0,1,7.72-4.29\"/>' +\n    '<polyline fill=\"none\" stroke=\"currentcolor\" stroke-width=\"3.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" points=\"158.89 134.98 114.8 134.98 114.8 98.42\"/>' +\n    '<polygon fill=\"currentcolor\" points=\"120.04 99.95 114.8 90.89 109.56 99.95 120.04 99.95\"/>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-width=\"3.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M121.17,98.9h.41a6.37,6.37,0,0,1,6.37,6.37V135a0,0,0,0,1,0,0H114.8a0,0,0,0,1,0,0V105.27A6.37,6.37,0,0,1,121.17,98.9Z\"/>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-width=\"3.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M133.29,107.74h.34a5.34,5.34,0,0,1,5.34,5.34V135a0,0,0,0,1,0,0h-11a0,0,0,0,1,0,0V113.08a5.34,5.34,0,0,1,5.34-5.34Z\"/>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-width=\"3.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M143.8,119.63h.31a4.82,4.82,0,0,1,4.82,4.82V135a0,0,0,0,1,0,0H139a0,0,0,0,1,0,0V124.45A4.82,4.82,0,0,1,143.8,119.63Z\"/>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-width=\"3.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M153.76,126.74h.31a4.82,4.82,0,0,1,4.82,4.82V135a0,0,0,0,1,0,0h-10a0,0,0,0,1,0,0v-3.42a4.82,4.82,0,0,1,4.82-4.82Z\"/>' +\n    '<path fill=\"currentcolor\" d=\"M82.39,44.35c12.53,0,22.39,7.22,26.43,17.27,3-2,11.06-6.59,20.65-6.59a28.69,28.69,0,0,1,19,7.2c12.51,10.65,7.58,27.86,7.41,29.11,11.32,4.42,20.62,14.17,20.62,27.06,0,22.06-20.7,29.33-28.7,29.33-.8,0-73.45.07-87.67.07-8.4,0-15.74-2.65-21.24-8.16A29.67,29.67,0,0,1,30,118.4c0-7.5,2-14.73,6.48-20s10.42-9.5,17.67-10.71c-2.86-4.62-2.85-9.35-2.85-15.19,0-8.4,5.76-25.15,26.79-27.84a33.51,33.51,0,0,1,4.31-.28m0-10.5a44.73,44.73,0,0,0-5.64.36c-26.38,3.38-36,24.73-36,38.26a72.66,72.66,0,0,0,.35,8.69A43.57,43.57,0,0,0,28.46,91.58c-5.87,6.94-9,16.21-9,26.82a40.35,40.35,0,0,0,12,28.67c7.35,7.34,17.26,11.23,28.67,11.23s61.43-.05,80.23-.07h7.44c13.67,0,39.2-11.69,39.2-39.83,0-13.53-7.35-25.64-19.63-33.07.9-12.73-3.27-23.59-12.1-31.1a39.5,39.5,0,0,0-25.82-9.7,46.23,46.23,0,0,0-16.77,3.31,39.08,39.08,0,0,0-30.31-14Z\"/>' +\n    '<polyline fill=\"none\" stroke=\"currentcolor\" stroke-width=\"3.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill-rule=\"evenodd\" points=\"109.35 122.01 86.48 122.01 67.59 103.24 86.48 84.47 132.68 84.47 132.68 97.28\"/>' +\n    '</symbol>' +\n\n    '<symbol id=\"precisionstudio-icon-dac-ebc\" viewBox=\"0 0 206.51 206.51\">' +\n    '<rect class=\"precisionstudiomenu-takes-gradient\" width=\"206.51\" height=\"206.51\" rx=\"29.67\"/>' +\n    '<rect fill=\"none\" stroke=\"currentcolor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" x=\"9\" y=\"9\" width=\"188.51\" height=\"188.51\" rx=\"20.67\"/>' +\n    '<polygon fill=\"none\" stroke=\"currentcolor\" stroke-width=\"8.83\" stroke-linecap=\"round\" stroke-linejoin=\"round\" points=\"174.44 120.32 142.79 151.78 65.36 151.78 65.36 88.87 142.79 88.87 174.44 120.32\"/>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-width=\"4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M92.52,70.13a33.2,33.2,0,1,1-3.88-4.64\"/>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-width=\"4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M73.74,89A8.5,8.5,0,1,1,71,82.71\"/>' +\n    '<line fill=\"none\" stroke=\"currentcolor\" stroke-width=\"4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" x1=\"65.38\" y1=\"88.76\" x2=\"102.63\" y2=\"51.5\"/>' +\n    '<polyline fill=\"none\" stroke=\"currentcolor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" points=\"110.53 56.01 98.12 56.01 98.12 43.6\"/>' +\n    '<polygon fill=\"none\" stroke=\"currentcolor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" points=\"102.63 39.1 102.63 51.5 115.03 51.5 106.02 60.52 93.61 60.52 93.61 48.11 102.63 39.1\"/>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-width=\"4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M83.63,79.07A20.91,20.91,0,1,1,80,74.17\"/>' +\n    '</symbol>' +\n\n    '<symbol id=\"precisionstudio-icon-noise\" viewBox=\"0 0 206.51 206.51\">' +\n    '<path class=\"precisionstudiomenu-takes-gradient\" d=\"M176.8,206.5H29.7C13.3,206.5,0,193.2,0,176.8V29.7C0,13.3,13.3,0,29.7,0h147.2c16.4,0,29.7,13.3,29.7,29.7v147.2C206.5,193.2,193.2,206.5,176.8,206.5z\"/>' +\n    '<path fill=\"none\" stroke=\"currentcolor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M197.5,29.7v147.2c0,11.4-9.3,20.7-20.7,20.7H29.7c-11.4,0-20.7-9.3-20.7-20.7V29.7C9,18.3,18.3,9,29.7,9h147.2C188.3,9,197.5,18.3,197.5,29.7z\"/>' +\n    '<path fill=\"currentcolor\" d=\"M25.1,97.9v53.2c0,2.5,2,4.5,4.5,4.5s4.5-2,4.5-4.5V97.9c0-2.5-2-4.5-4.5-4.5S25.1,95.4,25.1,97.9\"/>' +\n    '<path fill=\"currentcolor\" d=\"M174.9,113.7v29.7c0,2.5,2,4.5,4.5,4.5c2.5,0,4.5-2,4.5-4.5v-29.7c0-2.5-2-4.5-4.5-4.5C176.9,109.3,174.9,111.3,174.9,113.7\"/>' +\n    '<path fill=\"currentcolor\" d=\"M89.7,113.7v29.7c0,2.5,2,4.5,4.5,4.5s4.5-2,4.5-4.5v-29.7c0-2.5-2-4.5-4.5-4.5S89.7,111.3,89.7,113.7\"/>' +\n    '<path fill=\"currentcolor\" d=\"M65.4,113.7v29.7c0,2.5,2,4.5,4.5,4.5c2.5,0,4.5-2,4.5-4.5v-29.7c0-2.5-2-4.5-4.5-4.5C67.4,109.3,65.4,111.3,65.4,113.7\"/>' +\n    '<path fill=\"currentcolor\" d=\"M73.3,105v47.1c0,2.5,2,4.5,4.5,4.5s4.5-2,4.5-4.5V105c0-2.5-2-4.5-4.5-4.5S73.3,102.6,73.3,105\"/>' +\n    '<path fill=\"currentcolor\" d=\"M139.5,116.5v29.7c0,2.5,2,4.5,4.5,4.5c2.5,0,4.5-2,4.5-4.5v-29.7c0-2.5-2-4.5-4.5-4.5C141.5,112,139.5,114,139.5,116.5\"/>' +\n    '<path fill=\"currentcolor\" d=\"M98.5,102v45.5c0,2.5,2,4.5,4.5,4.5c2.5,0,4.5-2,4.5-4.5V102c0-2.5-2-4.5-4.5-4.5C100.5,97.5,98.5,99.5,98.5,102\"/>' +\n    '<path fill=\"currentcolor\" d=\"M123.6,121.1v22.4c0,2.5,2,4.5,4.5,4.5c2.5,0,4.5-2,4.5-4.5v-22.4c0-2.5-2-4.5-4.5-4.5C125.6,116.6,123.6,118.6,123.6,121.1\"/>' +\n    '<path fill=\"currentcolor\" d=\"M157.2,126v10.7c0,2.5,2,4.5,4.5,4.5c2.5,0,4.5-2,4.5-4.5V126c0-2.5-2-4.5-4.5-4.5C159.2,121.5,157.2,123.6,157.2,126\"/>' +\n    '<path fill=\"currentcolor\" d=\"M106.4,128.8v10.7c0,2.5,2,4.5,4.5,4.5s4.5-2,4.5-4.5l0,0v-10.7c0-2.5-2-4.5-4.5-4.5S106.4,126.3,106.4,128.8\"/>' +\n    '<path fill=\"currentcolor\" d=\"M166,105v47.1c0,2.5,2,4.5,4.5,4.5c2.5,0,4.5-2,4.5-4.5V105c0-2.5-2-4.5-4.5-4.5C168,100.6,166,102.6,166,105\"/>' +\n    '<path fill=\"currentcolor\" d=\"M115.1,111.7v38c0,2.5,2,4.5,4.5,4.5s4.5-2,4.5-4.5v-38c0-2.5-2-4.5-4.5-4.5S115.1,109.2,115.1,111.7\"/>' +\n    '<path fill=\"currentcolor\" d=\"M148.3,102v61.5c0,2.5,2,4.5,4.5,4.5c2.5,0,4.5-2,4.5-4.5V102c0-2.5-2-4.5-4.5-4.5C150.3,97.5,148.3,99.5,148.3,102\"/>' +\n    '<path fill=\"currentcolor\" d=\"M81.3,93.7v61.5c0,2.5,2,4.5,4.5,4.5c2.5,0,4.5-2,4.5-4.5V93.7c0-2.5-2-4.5-4.5-4.5S81.3,91.2,81.3,93.7\"/>' +\n    '<path fill=\"currentcolor\" d=\"M131,95.1v62.2c0,2.5,2,4.5,4.5,4.5c2.5,0,4.5-2,4.5-4.5V95.1c0-2.5-2-4.5-4.5-4.5C133,90.6,131,92.6,131,95.1\"/>' +\n    '<path fill=\"currentcolor\" d=\"M33.3,120.4v19.9c0,2.5,2,4.5,4.5,4.5c2.5,0,4.5-2,4.5-4.5v-19.9c0-2.5-2-4.5-4.5-4.5S33.3,117.9,33.3,120.4\"/>' +\n    '<path fill=\"currentcolor\" d=\"M50.1,106.8V136c0,2.5,2,4.5,4.5,4.5s4.5-2,4.5-4.5v-29.2c0-2.5-2-4.5-4.5-4.5S50.1,104.3,50.1,106.8\"/>' +\n    '<path fill=\"currentcolor\" d=\"M41.5,89.4v58.2c0,2.5,2,4.5,4.5,4.5s4.5-2,4.5-4.5V89.4c0-2.5-2-4.5-4.5-4.5S41.5,87,41.5,89.4\"/>' +\n    '<path fill=\"currentcolor\" d=\"M58.6,38.9v115.7c0,2.5,2,4.5,4.5,4.5c2.5,0,4.5-2,4.5-4.5V38.9c0-2.5-2-4.5-4.5-4.5C60.6,34.4,58.6,36.4,58.6,38.9\"/>' +\n    '</symbol>' +\n\n    '<symbol id=\"precisionstudio-icon-signal-chain-designer\" viewBox=\"0 0 206.5 206.5\" >' +\n    '<path class=\"precisionstudiomenu-takes-gradient\" d=\"M176.8,206.5H29.7C13.3,206.5,0,193.2,0,176.8V29.7C0,13.3,13.3,0,29.7,0h147.2c16.4,0,29.7,13.3,29.7,29.7v147.2C206.5,193.2,193.2,206.5,176.8,206.5z\"/>' +\n    '<path style=\"fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;\" stroke=\"currentcolor\" d=\"M197.5,29.7v147.2c0,11.4-9.3,20.7-20.7,20.7H29.7c-11.4,0-20.7-9.3-20.7-20.7V29.7C9,18.3,18.3,9,29.7,9h147.2C188.3,9,197.5,18.3,197.5,29.7z\"/>' +\n    '<polygon style=\"fill:none;stroke-width:7.992;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;\" stroke=\"currentcolor\" points=\"126.5,104.4 147.6,77.7 183.3,77.7 183.3,131 147.6,131 \t\t\t\t\t\t\"/>' +\n    '<path style=\"fill:none;stroke-width:7.992;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;\" stroke=\"currentcolor\" d=\"M23.2,77.5v53.6l42.5-26.9L23.2,77.5L23.2,77.5z\"/>' +\n    '<polyline style=\"fill:none;stroke-width:7.992;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;\" stroke=\"currentcolor\" points=\"70.7,77.4 101.9,77.4 108.9,131.1 \t\t\"/>' +\n    '</symbol>' +\n\n    '</defs></svg>';\n\n  var DROPDOWN_EN = \n    '<button class=\"precisionstudiomenu_trigger\" title=\"ADI\\u2120 Precision Studio Links\" data-qa-element=\"aps_dropdown_btn\" popovertarget=\"precisionstudio-menu-items\">'+    \n      '<div class=\"icon-wrapper\"> <svg class=\"trigger_icon\" focusable=\"false\"> <use xlink:href=\"#precisionstudio-icon-precision-studio\"></use></svg></div>' +\n      '<span class=\"trigger_label\">Tools</span>' +\n    '</button>' +\n    '<ul id=\"precisionstudio-menu-items\" class=\"precisionstudiomenu_items\" data-qa-element=\"aps_dropdown\" popover=\"auto\">' + \n      '<li class=\"menutitle\">' +\n        '<a href=\"{pstdUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_precisionstudio_link\"> ' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-precision-studio\"></use></svg></div>' +\n          '<span class=\"item_label\">ADI<span class=\"service-mark\">\\u2120</span> Precision Studio</span>' +\n        '</a>' +\n      '</li>' + \n      '<li>' + \n        '<a href=\"{scdUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_scd_link\">' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-signal-chain-designer\"></use></svg></div>' +\n          '<span class=\"item_label\">Signal Chain</span>' +\n        '</a>' +\n      '</li>' +\n      '<li>'+\n        '<a href=\"{fwUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_filterwizard_link\">' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-analog-filter\"></use></svg></div>' +\n          '<span class=\"item_label\">Analog Filter</span>' +\n        '</a>' +\n      '</li>' +\n      '<li>' +\n        '<a href=\"{dmdUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_diamond_link\">' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-in-amp\"></use></svg></div>' +\n          '<span class=\"item_label\">In Amp</span>' +\n        '</a>' +\n      '</li>' + \n      '<li>' +\n        '<a href=\"{pdUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_photodiode_link\">' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-photodiode\"></use></svg></div>' +\n          '<span class=\"item_label\">Photodiode</span>' +\n        '</a>' +\n      '</li>' +\n      '<li>' +\n        '<a href=\"{dacUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_dacebc_link\">' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-dac-ebc\"></use></svg></div>' +\n          '<span class=\"item_label\">DAC</span>' +\n        '</a>' +\n      '</li>' +\n      '<li>' +\n        '<a href=\"{adcUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_adcdriver_link\">' + \n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-adc-driver\"></use></svg></div>' +\n          '<span class=\"item_label\">ADC Driver</span>' +\n        '</a>' +\n      '</li>' +\n      '<li>' +\n        '<a href=\"{ddsUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_simdds_link\">' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-dds\"></use></svg></div>' +\n          '<span class=\"item_label\">DDS</span>' +\n        '</a>' +\n      '</li>' +\n      '<li>' +\n        '<a href=\"{evalUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_virtualeval_link\">' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-virtual-eval\"></use></svg></div>' +\n          '<span class=\"item_label\">Virtual Eval</span>' +\n        '</a>' +\n      '</li>' +\n    '</ul>';\n\n  var DROPDOWN_JP = \n    '<button class=\"precisionstudiomenu_trigger\" title=\"ADI\\u2120 Precision Studio へのリンク\" data-qa-element=\"aps_dropdown_btn\" popovertarget=\"precisionstudio-menu-items\">'+    \n      '<div class=\"icon-wrapper\"><svg class=\"trigger_icon\" focusable=\"false\"> <use xlink:href=\"#precisionstudio-icon-precision-studio\"></use></svg></div>' +\n      '<span class=\"trigger_label\">Tools</span>' +\n    '</button>' +\n    '<ul id=\"precisionstudio-menu-items\" class=\"precisionstudiomenu_items\" popover=\"auto\">' + \n      '<li class=\"menutitle\">' +\n        '<a href=\"{pstdUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_precisionstudio_link\"> ' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-precision-studio\"></use></svg></div>' +\n          '<span class=\"item_label\">ADI<span class=\"service-mark\">\\u2120</span> Precision Studio</span>' +\n        '</a>' +\n      '</li>' + \n      '<li>' +\n        '<a href=\"{scdUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_scd_link\">' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-signal-chain-designer\"></use></svg></div>' +\n          '<span class=\"item_label\">Signal Chain</span>' +\n        '</a>' +\n      '</li>' +\n      '<li>'+\n        '<a href=\"{fwUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_filterwizard_link\">' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-analog-filter\"></use></svg></div>' +\n          '<span class=\"item_label\">アナログ・フィルタ</span>' +\n        '</a>' +\n      '</li>' +\n      '<li>' +\n        '<a href=\"{dmdUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_diamond_link\">' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-in-amp\"></use></svg></div>' +\n          '<span class=\"item_label\">計装アンプ</span>' +\n        '</a>' +\n      '</li>' + \n      '<li>' +\n        '<a href=\"{pdUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_photodiode_link\">' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-photodiode\"></use></svg></div>' +\n          '<span class=\"item_label\">フォトダイオード</span>' +\n        '</a>' +\n      '</li>' +\n      '<li>' +\n        '<a href=\"{dacUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_dacebc_link\">' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-dac-ebc\"></use></svg></div>' +\n          '<span class=\"item_label\">DAC</span>' +\n        '</a>' +\n      '</li>' +\n      '<li>' +\n        '<a href=\"{adcUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_adcdriver_link\">' + \n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-adc-driver\"></use></svg></div>' +\n          '<span class=\"item_label\">ADCドライバ</span>' +\n        '</a>' +\n      '</li>' +\n      '<li>' +\n        '<a href=\"{ddsUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_simdds_link\">' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-dds\"></use></svg></div>' +\n          '<span class=\"item_label\">DDS</span>' +\n        '</a>' +\n      '</li>' +\n      '<li>' +\n        '<a href=\"{evalUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_virtualeval_link\">' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-virtual-eval\"></use></svg></div>' +      \n          '<span class=\"item_label\">Virtual Eval</span>' +\n        '</a>' +\n      '</li>' +    \n    '</ul>';\n\n  var DROPDOWN_CN = \n    '<button class=\"precisionstudiomenu_trigger\" title=\"ADI\\u2120 Precision Studio链接\" data-qa-element=\"aps_dropdown_btn\" popovertarget=\"precisionstudio-menu-items\">'+    \n      '<div class=\"icon-wrapper\"><svg class=\"trigger_icon\" focusable=\"false\"> <use xlink:href=\"#precisionstudio-icon-precision-studio\"></use></svg></div>' +\n      '<span class=\"trigger_label\">Tools</span>' +\n    '</button>' +\n    '<ul id=\"precisionstudio-menu-items\" class=\"precisionstudiomenu_items\" popover=\"auto\">' + \n      '<li class=\"menutitle\">' +\n        '<a href=\"{pstdUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_precisionstudio_link\"> ' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-precision-studio\"></use></svg></div>' +\n          '<span class=\"item_label\">ADI<span class=\"service-mark\">\\u2120</span> Precision Studio</span>' +\n        '</a>' +\n      '</li>' + \n      '<li>' + \n        '<a href=\"{scdUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_scd_link\">' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-signal-chain-designer\"></use></svg></div>' +\n          '<span class=\"item_label\">Signal Chain</span>' +\n        '</a>' +\n      '</li>' +\n      '<li>' +\n        '<a href=\"{fwUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_filterwizard_link\">' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-analog-filter\"></use></svg></div>' +\n          '<span class=\"item_label\">模拟滤波器</span>' +\n        '</a>' +\n      '</li>' +\n      '<li>' +\n        '<a href=\"{dmdUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_diamond_link\">' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-in-amp\"></use></svg></div>' +\n          '<span class=\"item_label\">仪表放大器</span>' +\n        '</a>' +\n      '</li>' + \n      '<li>' +\n        '<a href=\"{pdUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_photodiode_link\">' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-photodiode\"></use></svg></div>' +\n          '<span class=\"item_label\">光电二极管</span>' +\n        '</a>' +\n      '</li>' +\n      '<li>' +\n        '<a href=\"{dacUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_dacebc_link\">' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-dac-ebc\"></use></svg></div>' +\n          '<span class=\"item_label\">DAC</span>' +\n        '</a>' +\n      '</li>' +\n      '<li>' +\n        '<a href=\"{adcUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_adcdriver_link\">' + \n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-adc-driver\"></use></svg></div>' +\n          '<span class=\"item_label\">ADC驱动器</span>' +\n        '</a>' +\n      '</li>' +\n      '<li>' +\n        '<a href=\"{ddsUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_simdds_link\">' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-dds\"></use></svg></div>' +\n          '<span class=\"item_label\">DDS</span>' +\n        '</a>' +\n      '</li>' +\n      '<li>' +\n        '<a href=\"{evalUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_virtualeval_link\">' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-virtual-eval\"></use></svg></div>' +      \n          '<span class=\"item_label\">Virtual Eval</span>' +\n        '</a>' +\n      '</li>' +    \n    '</ul>';\n\n  var DROPDOWN_RU = \n    '<button class=\"precisionstudiomenu_trigger\" title=\"ADI\\u2120 Precision Studio Links\" data-qa-element=\"aps_dropdown_btn\" popovertarget=\"precisionstudio-menu-items\">'+    \n      '<div class=\"icon-wrapper\"> <svg class=\"trigger_icon\" focusable=\"false\"> <use xlink:href=\"#precisionstudio-icon-precision-studio\"></use></svg></div>' +\n      '<span class=\"trigger_label\">Tools</span>' +\n    '</button>' +\n    '<ul id=\"precisionstudio-menu-items\" class=\"precisionstudiomenu_items\" popover=\"auto\">' + \n      '<li class=\"menutitle\">' +\n        '<a href=\"{pstdUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_precisionstudio_link\"> ' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-precision-studio\"></use></svg></div>' +\n          '<span class=\"item_label\">ADI<span class=\"service-mark\">\\u2120</span> Precision Studio</span>' +\n        '</a>' +\n      '</li>' + \n      '<li>' +\n        '<a href=\"{scdUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_scd_link\">' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-signal-chain-designer\"></use></svg></div>' +\n          '<span class=\"item_label\">Signal Chain</span>' +\n        '</a>' +\n      '</li>' +\n      '<li>'+\n        '<a href=\"{fwUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_filterwizard_link\">' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-analog-filter\"></use></svg></div>' +\n          '<span class=\"item_label\">Analog Filter</span>' +\n        '</a>' +\n      '</li>' +\n      '<li>' +\n        '<a href=\"{dmdUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_diamond_link\">' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-in-amp\"></use></svg></div>' +\n          '<span class=\"item_label\">In Amp</span>' +\n        '</a>' +\n      '</li>' + \n      '<li>' +\n        '<a href=\"{pdUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_photodiode_link\">' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-photodiode\"></use></svg></div>' +\n          '<span class=\"item_label\">Photodiode</span>' +\n        '</a>' +\n      '</li>' +\n      '<li>' +\n        '<a href=\"{dacUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_dacebc_link\">' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-dac-ebc\"></use></svg></div>' +\n          '<span class=\"item_label\">DAC</span>' +\n        '</a>' +\n      '</li>' +\n      '<li>' +\n        '<a href=\"{adcUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_adcdriver_link\">' + \n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-adc-driver\"></use></svg></div>' +\n          '<span class=\"item_label\">ADC Driver</span>' +\n        '</a>' +\n      '</li>' +\n      '<li>' +\n        '<a href=\"{ddsUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_simdds_link\">' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-dds\"></use></svg></div>' +\n          '<span class=\"item_label\">DDS</span>' +\n        '</a>' +\n      '</li>' +\n      '<li>' +\n        '<a href=\"{evalUrl}\" target=\"_blank\" rel=\"noopener\" data-qa-element=\"aps_virtualeval_link\">' +\n          '<div class=\"icon-wrapper\"><svg class=\"item_icon\" focusable=\"false\"><use xlink:href=\"#precisionstudio-icon-virtual-eval\"></use></svg></div>' +\n          '<span class=\"item_label\">Virtual Eval</span>' +\n        '</a>' +\n      '</li>' +    \n    '</ul>';\n\n  var DROPDOWN = {\n      en: DROPDOWN_EN,\n      jp: DROPDOWN_JP,\n      cn: DROPDOWN_CN,\n      ru: DROPDOWN_RU\n  }\n  \n  var DEFAULT_TOOL_URLS = {\n    PrecisionStudioUrl: \"https://tools.analog.com/{pstd-locale}/precisionstudio\",\n    FilterWizardUrl: \"https://tools.analog.com/{pstd-locale}/filterwizard\",\n    AdcDriverUrl: \"https://tools.analog.com/{pstd-locale}/adcdriver/\",\n    PhotodiodeUrl: \"https://tools.analog.com/{pstd-locale}/photodiode\",\n    DiamondUrl: \"https:/tools.analog.com/{pstd-locale}/diamond\",\n    NoiseUrl: \"https://beta-tools.analog.com/noise/\",\n    SignalChainDesignerUrl: \"https://beta-tools.analog.com/signalchaindesigner/\",\n    SimDDSUrl: \"https://tools.analog.com/{pstd-locale}/simdds\",\n    VirtualEvalUrl: \"https://beta-tools.analog.com/virtualeval/#category=2\",\n    DACErrorCalculatorUrl: \"https://beta-tools.analog.com/DACErrorBudget/\"\n  }\n  \n  var DEFAULT_OPTIONS = {\n    locale: 'en',\n    toolurls: DEFAULT_TOOL_URLS\n  }\n\n  var URL_KEY_MAP = {\n    PrecisionStudioUrl: \"pstdUrl\",\n    FilterWizardUrl: \"fwUrl\",\n    AdcDriverUrl: \"adcUrl\",\n    PhotodiodeUrl: \"pdUrl\",\n    DiamondUrl: \"dmdUrl\",\n    NoiseUrl: \"noiseUrl\",\n    SignalChainDesignerUrl: \"scdUrl\",\n    SimDDSUrl: \"ddsUrl\",\n    VirtualEvalUrl: \"evalUrl\",\n    DACErrorCalculatorUrl: \"dacUrl\" \n  }\n\n  var applyUrlsToMarkup = function(markup, urls, locale) {\n    var updatedMarkup = markup;\n    for (let name in URL_KEY_MAP) {\n      updatedMarkup = updatedMarkup.replace(\n        new RegExp('{' + URL_KEY_MAP[name] + '}','gi'), \n        (name in urls) ? urls[name] : DEFAULT_TOOL_URLS[name]);\n    }\n    updatedMarkup = updatedMarkup.replace(/\\{pstd-locale\\}/gi, locale);\n    updatedMarkup = updatedMarkup.replace(/\\{pstd-locale-w-ru\\}/gi, locale); //For compatibility with a very short-lived feature from 1.0.0\n    return updatedMarkup;\n  }\n  // This is where the returned class really begins\n\n  return /** @class */ (function () {\n    function PrecisionStudioMenu(options) {\n      var locale = (!!options && !!options.locale && options.locale in DROPDOWN) ? options.locale : DEFAULT_OPTIONS.locale;\n      var toolurls = (!!options && !!options.toolurls) ? options.toolurls : DEFAULT_OPTIONS.toolurls;\n      this.dropdown = applyUrlsToMarkup(DROPDOWN[locale], toolurls, locale);\n      this.focusOutListenerBound = this.focusOutListener.bind(this);\n    }\n\n    PrecisionStudioMenu.prototype.focusOutListener = function (event) {\n      const popover = this.element.querySelector(\".precisionstudiomenu_items\");\n      // If focusout bubbled from within popover isn't headed to something else inside popover, hide the popover\n      if (event.relatedTarget && !popover.contains(event.relatedTarget)) {\n        popover.hidePopover();\n      }\n    }\n\n    PrecisionStudioMenu.prototype.attach = function(element){\n      this.element = element;\n      // Apply icon catalog\n      var tempwrapper = document.createElement(\"div\");\n      tempwrapper.innerHTML = SYMBOLTEXT;\n      var symbols = tempwrapper.querySelector(\"svg\");\n      document.body.insertBefore(symbols, document.body.firstChild);\n\n      // Apply dropdown using icons\n      element.innerHTML = this.dropdown;\n      var dropdown = this.element.querySelector(\".precisionstudiomenu_items\");\n      dropdown.addEventListener(\"focusout\", this.focusOutListenerBound);\n\n    }\n\n    PrecisionStudioMenu.prototype.detach = function(){\n\n      if (this.element) {\n        // First tear down behavior - no event listener leaks\n        var dropdown = this.element.querySelector(\".precisionstudiomenu_items\");\n        if (dropdown) {\n          dropdown.removeEventListener(\"focusout\", this.focusOutListenerBound);\n        }\n          // Remove the dropdown\n        this.element.innerHTML = \"\";\n\n        // Remove the icon catalog \n        var iconsNode = document.querySelector(\"#precisionstudio-icons\");\n        if (iconsNode) {\n            document.body.removeChild(iconsNode);\n        }\n\n      }\n    }\n\n    return PrecisionStudioMenu;\n  }());\n}));","export {\r\n  transformCoordinates,\r\n  multiply3x3,\r\n  multiply3x1,\r\n  getConnectionOffset,\r\n  calculatePositions,\r\n  _orderConnections,\r\n  IDENTITY_MATRIX,\r\n};\r\n\r\n// export to a buffer with utf-8 encoding.\r\n// export function toBuffer(circuitSVG) {\r\n//   var buf = Buffer.from(circuitSVG, 'utf-8');\r\n//   return buf;\r\n// }\r\nconst IDENTITY_MATRIX = [1, 0, 0, 0, 1, 0, 0, 0, 1];\r\n\r\nfunction multiply3x3(a, b) {\r\n  // Multiply each row by matrixA\r\n  let result0 = multiply3x1(a, [b[0], b[1], b[2]]);\r\n  let result1 = multiply3x1(a, [b[3], b[4], b[5]]);\r\n  let result2 = multiply3x1(a, [b[6], b[7], b[8]]);\r\n  return [result0[0], result0[1], result0[2], result1[0], result1[1], result1[2], result2[0], result2[1], result2[2]];\r\n}\r\n\r\nfunction multiply3x1(matrix, [x, y, z]) {\r\n  return [\r\n    x * matrix[0] + y * matrix[1] + z * matrix[2],\r\n    x * matrix[3] + y * matrix[4] + z * matrix[5],\r\n    x * matrix[6] + y * matrix[7] + z * matrix[8],\r\n  ];\r\n}\r\n\r\nfunction transformCoordinates([x, y], matrices) {\r\n  let coords = [x, y, 1];\r\n  for (let matrix of matrices) {\r\n    coords = multiply3x1(matrix, coords);\r\n  }\r\n  return [coords[0], coords[1]];\r\n}\r\n\r\nfunction getConnectionOffset(connection, circuitsWithMetadata) {\r\n  let fromConnectionPoint = circuitsWithMetadata[connection.fromCircuit].metadata.connectionPoints.find((cp) => {\r\n    return cp.type === 'primary-out' && cp.name === connection.fromOutput;\r\n  });\r\n  let toConnectionPoint = circuitsWithMetadata[connection.toCircuit].metadata.connectionPoints.find((cp) => {\r\n    return cp.type === 'primary-in' && cp.name === connection.toInput;\r\n  });\r\n  return {\r\n    x: fromConnectionPoint.position[0] - toConnectionPoint.position[0],\r\n    y: fromConnectionPoint.position[1] - toConnectionPoint.position[1],\r\n  };\r\n}\r\n\r\nfunction calculatePositions(connections, offsets, circuitCount) {\r\n  let orderedConnections = _orderConnections(connections, offsets);\r\n  // Seed the positions with an initial position of [0,0] - the rest should follow\r\n\r\n  let positions = [];\r\n  for (let i = 0; i < circuitCount; i++) positions.push(undefined);\r\n\r\n  if (orderedConnections[0].reverse) {\r\n    positions[orderedConnections[0].toCircuit] = { x: 0, y: 0 };\r\n  } else {\r\n    positions[orderedConnections[0].fromCircuit] = { x: 0, y: 0 };\r\n  }\r\n  for (let connIndex = 0; connIndex < orderedConnections.length; connIndex++) {\r\n    let conn = orderedConnections[connIndex];\r\n    if (conn.reverse) {\r\n      // ToCircuit already placed - apply offsets in reverse\r\n      let newPosition = {\r\n        x: positions[conn.toCircuit].x - conn.offset.x,\r\n        y: positions[conn.toCircuit].y - conn.offset.y,\r\n      };\r\n      if (!positions[conn.fromCircuit]) {\r\n        positions[conn.fromCircuit] = newPosition;\r\n      } else if (positions[conn.fromCircuit].x != newPosition.x || positions[conn.fromCircuit].y != newPosition.y) {\r\n        throw 'Circuits in meshes with inconsistent connection point positions cannot be placed';\r\n      }\r\n    } else {\r\n      // FromCircuit already placed - apply offsets as calculated\r\n      let newPosition = {\r\n        x: positions[conn.fromCircuit].x + conn.offset.x,\r\n        y: positions[conn.fromCircuit].y + conn.offset.y,\r\n      };\r\n      if (!positions[conn.toCircuit]) {\r\n        positions[conn.toCircuit] = newPosition;\r\n      } else if (positions[conn.toCircuit].x !== newPosition.x || positions[conn.toCircuit].y !== newPosition.y) {\r\n        throw 'Circuits in meshes with inconsistent connection point positions cannot be placed';\r\n      }\r\n    }\r\n  }\r\n  return positions;\r\n}\r\n\r\nfunction _orderConnections(connections, offsets) {\r\n  let orderCount = 0;\r\n  let orderedConnections = connections.map((connection, index) =>\r\n    Object.assign({ offset: offsets[index] }, connection)\r\n  ); //shallow clone with offset\r\n  // Seed the loop with the first connection, regardless of topology\r\n  let toProcess = [0];\r\n  orderedConnections[0]['ordered'] = orderCount++;\r\n  orderedConnections[0]['reverse'] = false;\r\n  while (toProcess.length > 0) {\r\n    let processing = toProcess;\r\n    toProcess = [];\r\n    // find unprocessed connections adjacent to each connection processed so far\r\n    for (let connectionIndex of processing) {\r\n      orderedConnections.forEach((connection, index) => {\r\n        if (\r\n          !('ordered' in connection) &&\r\n          (connection.fromCircuit === connections[connectionIndex].toCircuit ||\r\n            connection.toCircuit === connections[connectionIndex].fromCircuit)\r\n        ) {\r\n          toProcess.push(index);\r\n          connection['ordered'] = orderCount;\r\n          connection['reverse'] = connection.toCircuit === connections[connectionIndex].fromCircuit;\r\n          orderCount++;\r\n        }\r\n      });\r\n    }\r\n  }\r\n  if (orderCount < connections.length) {\r\n    throw 'Circuits that do not form a single island of connection cannot be placed';\r\n  }\r\n  orderedConnections.sort((a, b) => {\r\n    return a.ordered - b.ordered;\r\n  });\r\n  return orderedConnections;\r\n}\r\n","export { innerSVG, reduceSVGToGroup, wrapGroupsInSVG, removeConnectionPoints };\r\n\r\n// return all the elements inside SVG element.\r\nfunction innerSVG(circuit) {\r\n  var svgContent = circuit.substr(circuit.indexOf('<svg'));\r\n  var svgTagEndIndex = svgContent.indexOf('>');\r\n  return svgContent.substr(svgTagEndIndex + 1).replace('</svg>', '');\r\n}\r\n\r\nfunction reduceSVGToGroup(circuit, xOffset, yOffset, id, matrix) {\r\n  var endSvgOffset = circuit.indexOf('>', circuit.indexOf('<svg')) + 1;\r\n  var closeSvgOffset = circuit.indexOf('</svg>', endSvgOffset);\r\n  var innerSvg = circuit.substring(endSvgOffset, closeSvgOffset);\r\n  var matrixClause = matrix\r\n    ? ` matrix(${matrix[0]},${matrix[3]},${matrix[1]},${matrix[4]},${matrix[2]},${matrix[5]})`\r\n    : '';\r\n  return `<g id=\"${id}\" transform=\"translate(${xOffset},${yOffset})${matrixClause}\">` + innerSvg + '</g>';\r\n}\r\n\r\n// group all circuits inside an SVG element.\r\nfunction wrapGroupsInSVG(groups, width, height) {\r\n  let svgWidth = width ? width : 640;\r\n  let svgHeight = height ? height : 480;\r\n  var result = `<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:svg=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"${svgWidth.toString()}\" height=\"${svgHeight.toString()}\">`;\r\n  for (var i = 0; i <= groups.length - 1; i++) {\r\n    result += groups[i];\r\n  }\r\n  return (result += '</svg>');\r\n}\r\n\r\n// Return a circuit with all the relevant connection points removed\r\nfunction removeConnectionPoints(circuit, connections, index) {\r\n  // Find the names of all the connection points we need to cull from this circuit\r\n  let names = [];\r\n  for (let connection of connections) {\r\n    if (connection.fromCircuit === index) {\r\n      if (!names.includes[connection.fromOutput]) {\r\n        names.push(connection.fromOutput);\r\n      }\r\n    }\r\n    if (connection.toCircuit === index) {\r\n      if (!names.includes[connection.toInput]) {\r\n        names.push(connection.toInput);\r\n      }\r\n    }\r\n  }\r\n  // Find the names and text ranges of the connection points in the circuit\r\n  // Sort so we start culling from the end and don't have to track offsets for what we've already culled.\r\n  let connectionPoints = _findConnectionPoints(circuit);\r\n  connectionPoints.sort((a, b) => b.position - a.position);\r\n  // Remove the desired connection points\r\n  let newCircuit = circuit;\r\n  for (let point of connectionPoints) {\r\n    if (names.includes(point.name)) {\r\n      newCircuit = newCircuit.substr(0, point.position) + newCircuit.substr(point.endPosition);\r\n    }\r\n  }\r\n  return newCircuit;\r\n}\r\n\r\n// Find all the connection points in a circuit with their text ranges and names\r\nfunction _findConnectionPoints(circuit) {\r\n  let points = [];\r\n  let internalCircuit = circuit.split('\\r').join(' ').split('\\n').join(' ');\r\n  let groupPattern =\r\n    /<(svg:)?g([^>]+)class\\s*=\\s*\"[^\"]*(primary-in|primary-out|secondary-in|secondary-out)[^\"]*\"([^>]*)>(.*?)<\\/(svg:)?g>/g;\r\n  let groupMatch;\r\n  while ((groupMatch = groupPattern.exec(internalCircuit)) != null) {\r\n    let attrPattern = /data-connection-group\\s*=\\s*\"([^\"]*)\"/g;\r\n    let attrMatch = attrPattern.exec(groupMatch[2]) || attrPattern.exec(groupMatch[4]);\r\n    let attrName = attrMatch ? attrMatch[1] : groupMatch[3].includes('-in') ? 'IN' : 'OUT';\r\n    let point = {\r\n      name: attrName,\r\n      position: groupMatch.index,\r\n      endPosition: groupMatch.index + groupMatch[0].length,\r\n    };\r\n    points.push(point);\r\n  }\r\n  return points;\r\n}\r\n","// Use the following when you are testing live in browser\r\n//import xmldom from '../web_modules/xmldom.js';\r\n// Use the following in all other circumstances\r\nimport xmldom from '@xmldom/xmldom';\r\nimport { transformCoordinates, multiply3x3, IDENTITY_MATRIX } from './math.js';\r\nexport {\r\n  stringToDoc,\r\n  docToString,\r\n  normalize,\r\n  getDocumentMetadata,\r\n  applySubstitutionClasses,\r\n  _trimBraceGroup,\r\n  _getTopLevelBraceGroups,\r\n  _mergeClasses,\r\n};\r\n\r\nfunction stringToDoc(circuit) {\r\n  return new xmldom.DOMParser().parseFromString(circuit, 'text/xml');\r\n}\r\nfunction docToString(doc) {\r\n  var serializer = new xmldom.XMLSerializer();\r\n  //HACK: Undocumented isHtml parameter seems to help avoid <svg:xxx> prefixing that can be harmful.\r\n  return serializer.serializeToString(doc);\r\n}\r\n// Core processing of normalize, given a document already open on the circuit\r\nfunction normalize(document) {\r\n  var defaultNamespaces = ['', 'svg', 'xlink'];\r\n  const namespaceMap = Object.keys(document.documentElement._nsMap)\r\n    .filter((key) => !defaultNamespaces.includes(key))\r\n    .reduce((obj, key) => {\r\n      return {\r\n        ...obj,\r\n        [key]: document.documentElement._nsMap[key],\r\n      };\r\n    }, {});\r\n\r\n  // Remove target top-level child elements\r\n  let removableNodeNames = ['defs', 'metadata', 'sodipodi', 'namedview', 'inkscape'];\r\n  for (var i = document.documentElement.childNodes.length - 1; i >= 0; i--) {\r\n    var node = document.documentElement.childNodes[i];\r\n\r\n    //deletes the <defs>, <metadata>, <sodipodi> element blocks.\r\n    if (removableNodeNames.includes(node.localName)) {\r\n      document.documentElement.removeChild(node);\r\n    }\r\n  }\r\n\r\n  // Remove all attributes with targeted namespaces\r\n  let elements = document.getElementsByTagName('*');\r\n  for (let elementIndex = elements.length - 1; elementIndex >= 0; elementIndex--) {\r\n    let node = elements[elementIndex];\r\n    // Walk the NamedNodeMap backwards so deletions don't mess up where you are\r\n    for (let attributeIndex = node.attributes.length - 1; attributeIndex >= 0; attributeIndex--) {\r\n      let attribute = node.attributes[attributeIndex];\r\n      if (attribute.prefix !== null && namespaceMap[attribute.prefix] === attribute.namespaceURI) {\r\n        node.removeAttributeNS(attribute.namespaceURI, attribute.localName);\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nfunction applySubstitutionClasses(document) {\r\n  let elements = document.getElementsByTagName('tspan');\r\n  for (let elementIndex = elements.length - 1; elementIndex >= 0; elementIndex--) {\r\n    let content = elements[elementIndex].textContent;\r\n    let classes = _getClassesForSubstitutions(content);\r\n    if (classes.length > 0) {\r\n      let existingClasses = elements[elementIndex].getAttribute('class');\r\n      elements[elementIndex].setAttribute('class', _mergeClasses(existingClasses, classes));\r\n    }\r\n  }\r\n}\r\n\r\nfunction _getClassesForSubstitutions(elementText) {\r\n  let groups = _getTopLevelBraceGroups(elementText);\r\n  return groups.map((value) => 'test-' + _trimBraceGroup(value));\r\n}\r\n\r\nfunction _mergeClasses(existing, newClasses) {\r\n  return (existing ? existing : '')\r\n    .trim()\r\n    .split(/\\s+/)\r\n    .filter((clazz) => !newClasses.includes(clazz))\r\n    .concat(newClasses)\r\n    .join(' ')\r\n    .trim();\r\n}\r\n\r\nfunction _trimBraceGroup(text) {\r\n  return text\r\n    .trim()\r\n    .replace(/[^-_ \\w\\d]*/g, '')\r\n    .replace(/\\s+/g, '-');\r\n}\r\n\r\nfunction _getTopLevelBraceGroups(text) {\r\n  let groups = [];\r\n  let first = 0,\r\n    last = 0,\r\n    depth = 0;\r\n  for (let index = 0; index < text.length; index++) {\r\n    switch (text[index]) {\r\n      case '{':\r\n        if (depth === 0) {\r\n          first = index;\r\n        }\r\n        depth++;\r\n        break;\r\n      case '}':\r\n        depth--;\r\n        if (depth < 0) {\r\n          throw 'Unbalanced braces in substitution';\r\n        }\r\n        if (depth === 0) {\r\n          last = index;\r\n          groups.push(text.substring(first, last + 1));\r\n        }\r\n    }\r\n  }\r\n  return groups;\r\n}\r\n\r\nfunction getDocumentMetadata(document) {\r\n  let width = _coordinateToPixels(document.documentElement.getAttribute('width'));\r\n  let height = _coordinateToPixels(document.documentElement.getAttribute('height'));\r\n  let viewBox = document.documentElement.getAttribute('viewBox') ?? `0 0 ${width} ${height}`;\r\n  let preserve = document.documentElement.getAttribute('preserveAspectRatio') ?? 'xMidYMid meet';\r\n  let transformMatrix = _parseTransformAsMatrix(document.documentElement.getAttribute('transform'));\r\n  let viewboxMatrix = _viewboxMatrix(\r\n    [0, 0, width, height],\r\n    viewBox.split(/[\\s]+/).map((value) => parseFloat(value)),\r\n    preserve.split(/[\\s]+/)\r\n  );\r\n  let connectionPoints = [];\r\n  let connectionPointClasses = ['primary-in', 'primary-out', 'secondary-in', 'secondary-out'];\r\n  let elements = document.getElementsByTagName('g');\r\n  for (let elementIndex = elements.length - 1; elementIndex >= 0; elementIndex--) {\r\n    let group = elements[elementIndex];\r\n    if (group.hasAttribute('class')) {\r\n      for (let clazz of group.getAttribute('class').split(/[\\s]+/)) {\r\n        if (connectionPointClasses.includes(clazz)) {\r\n          if (_isVisibleElement(group)) {\r\n            let defaultConnectionGroup = clazz.includes('-in') ? 'IN' : 'OUT';\r\n            let connectionPoint = _collectConnectionPoint(\r\n              document,\r\n              group,\r\n              clazz,\r\n              [transformMatrix, viewboxMatrix],\r\n              defaultConnectionGroup\r\n            );\r\n            if (connectionPoint) {\r\n              connectionPoints.push(connectionPoint);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n  return {\r\n    docWidth: width,\r\n    docHeight: height,\r\n    matrix: multiply3x3(transformMatrix, viewboxMatrix),\r\n    connectionPoints: connectionPoints,\r\n  };\r\n}\r\n\r\nfunction _isVisibleElement(elem) {\r\n  let result = elem.getAttribute('display') !== 'none';\r\n  if (result && elem.parentNode && elem.parentNode.nodeType === 1) {\r\n    result = _isVisibleElement(elem.parentNode);\r\n  }\r\n  return result;\r\n}\r\n\r\nfunction _parseTranslateAsMatrix(...args) {\r\n  if (args.length !== 2) return;\r\n  let x = parseFloat(args[0]);\r\n  let y = parseFloat(args[1]);\r\n  if (isNaN(x) || isNaN(y)) return;\r\n  return [1, 0, x, 0, 1, y, 0, 0, 1];\r\n}\r\nfunction _parseRotateAsMatrix() {\r\n  if (arguments.length !== 1 && arguments.length != 3) return;\r\n  let angle = parseFloat(arguments[0]);\r\n  if (isNaN(angle)) return;\r\n  angle = (angle * Math.PI) / 180;\r\n  if (arguments.length === 3) {\r\n    let x = parseFloat(arguments[1]);\r\n    let y = parseFloat(arguments[2]);\r\n    if (isNaN(x) || isNaN(y)) return;\r\n    return [Math.cos(angle), -Math.sin(angle), 0, Math.sin(angle), Math.cos(angle), 0, 0, 0, 1];\r\n  } else {\r\n    return [Math.cos(angle), -Math.sin(angle), 0, Math.sin(angle), Math.cos(angle), 0, 0, 0, 1];\r\n  }\r\n}\r\nfunction _parseScaleAsMatrix(...args) {\r\n  if (args.length != 1 && args.length !== 2) return;\r\n  let scaleX = parseFloat(args[0]);\r\n  let scaleY = args.length > 1 ? parseFloat(args[1]) : scaleX;\r\n  if (isNaN(scaleX) || isNaN(scaleY)) return;\r\n  return [scaleX, 0, 0, 0, scaleY, 0, 0, 0, 1];\r\n}\r\nfunction _parseMatrixAsMatrix(...args) {\r\n  if (args.length != 6) return;\r\n  return [\r\n    parseFloat(args[0]),\r\n    parseFloat(args[2]),\r\n    parseFloat(args[4]),\r\n    parseFloat(args[1]),\r\n    parseFloat(args[3]),\r\n    parseFloat(args[5]),\r\n    0,\r\n    0,\r\n    1,\r\n  ];\r\n}\r\n\r\nfunction _parseTransformAsMatrix(transform) {\r\n  let index = 0;\r\n  let finalMatrix = IDENTITY_MATRIX;\r\n  let items = [\r\n    [_parseTranslateAsMatrix, 'translate'.length + 1, transform.indexOf('translate', index)],\r\n    [_parseRotateAsMatrix, 'rotate'.length + 1, transform.indexOf('rotate', index)],\r\n    [_parseScaleAsMatrix, 'scale'.length + 1, transform.indexOf('scale', index)],\r\n    //[_parseSkewAsMatrix, 'skew'.length + 1, transform.indexOf('skew', index)],\r\n    [_parseMatrixAsMatrix, 'matrix'.length + 1, transform.indexOf('matrix', index)],\r\n  ];\r\n  items = items.filter((item) => item[2] >= 0);\r\n  items.sort((a, b) => a[2] - b[2]);\r\n  for (let item of items) {\r\n    let parms = transform.substring(item[2] + item[1], transform.indexOf(')', item[2] + item[1])).split(/[\\s,]+/);\r\n    let matrix = item[0].apply(this, parms);\r\n    if (matrix) {\r\n      finalMatrix = multiply3x3(finalMatrix, matrix);\r\n    } else {\r\n      console.log('Failed to parse ' + transform.substring(item[2], transform.indexOf(')', item[2]) + item[1]));\r\n    }\r\n  }\r\n  return finalMatrix;\r\n}\r\n\r\nconst CSS_PIXELS_PER_INCH = 96;\r\nconst MM_PER_INCH = 25.4;\r\nconst PICAS_PER_INCH = 6;\r\nconst POINTS_PER_INCH = 72;\r\nlet unitsAsPixels = {\r\n  em: NaN,\r\n  ex: NaN,\r\n  px: 1,\r\n  pt: CSS_PIXELS_PER_INCH / POINTS_PER_INCH,\r\n  pc: CSS_PIXELS_PER_INCH / PICAS_PER_INCH,\r\n  cm: (CSS_PIXELS_PER_INCH * 10) / MM_PER_INCH,\r\n  mm: CSS_PIXELS_PER_INCH / MM_PER_INCH,\r\n  in: CSS_PIXELS_PER_INCH,\r\n};\r\n\r\nfunction _coordinateToPixels(value) {\r\n  let match = /([+-]?([0-9]*[.])?[0-9]+)(px|pt|pc|cm|mm|in)?/.exec(value);\r\n  if (!match) {\r\n    return undefined;\r\n  }\r\n  let units = match[3] ? unitsAsPixels[match[3]] : unitsAsPixels['px'];\r\n  if (isNaN(units)) {\r\n    return undefined;\r\n  }\r\n  return parseFloat(match[1]) * units;\r\n}\r\n\r\nfunction _viewboxMatrix([ex, ey, ew, eh], [vbx, vby, vbw, vbh], [align, meetOrSlice]) {\r\n  // Protect against missing data\r\n  ew = typeof ew === 'undefined' || isNaN(ew) ? 300 : ew;\r\n  eh = typeof eh === 'undefined' || isNaN(eh) ? 150 : eh;\r\n  vbx = typeof vbx === 'undefined' || isNaN(vbx) ? 0 : vbx;\r\n  vby = typeof vby === 'undefined' || isNaN(vby) ? 0 : vby;\r\n  vbw = typeof vbw === 'undefined' || isNaN(vbw) ? ew : vbw;\r\n  vbh = typeof vbh === 'undefined' || isNaN(vbh) ? eh : vbh;\r\n  // Calculate scale\r\n  let scaleX = ew / vbw;\r\n  let scaleY = eh / vbh;\r\n  if (align !== 'none') {\r\n    let scale = meetOrSlice === 'meet' ? Math.min(scaleX, scaleY) : Math.max(scaleX, scaleY);\r\n    scaleX = scale;\r\n    scaleY = scale;\r\n  }\r\n  // Calculate translation\r\n  let translateX = ex - vbx * scaleX;\r\n  let translateY = ey - vby * scaleY;\r\n  if (-1 !== align.indexOf('xMid')) translateX = translateX + (ew - vbw * scaleX) / 2;\r\n  if (-1 !== align.indexOf('xMax')) translateX = translateX + (ew - vbw * scaleX);\r\n  if (-1 !== align.indexOf('yMid')) translateY = translateY + (eh - vbh * scaleY) / 2;\r\n  if (-1 !== align.indexOf('yMax')) translateY = translateY + (eh - vbh * scaleY);\r\n  let result = _parseTransformAsMatrix(`translate(${translateX},${translateY}) scale(${scaleX},${scaleY})`);\r\n\r\n  return result;\r\n}\r\n\r\nfunction _collectConnectionPoint(document, group, clazz, matrices, defaultConnectionGroup) {\r\n  let tspans = group.getElementsByTagName('tspan');\r\n  let circles = group.getElementsByTagName('circle');\r\n  // Bail if it doesn't follow the rules\r\n  let invalidTSpans = !tspans || tspans.length !== 1;\r\n  let invalidCircles = !circles || circles.length !== 1;\r\n  if (invalidTSpans || invalidCircles) {\r\n    let element = invalidTSpans ? (invalidCircles ? 'text and circle' : 'text') : 'circle';\r\n    console.log('Missing ' + element + ' on ' + clazz + ' connection point.');\r\n    return;\r\n  }\r\n  let connectionGroup = group.hasAttribute('data-connection-group')\r\n    ? group.getAttribute('data-connection-group')\r\n    : defaultConnectionGroup;\r\n  let cx = _coordinateToPixels(circles[0].getAttribute('cx'));\r\n  let cy = _coordinateToPixels(circles[0].getAttribute('cy'));\r\n  let relevantTransforms = [];\r\n  for (let currentParent = group; currentParent.localName !== 'svg'; currentParent = currentParent.parentNode) {\r\n    if (currentParent.hasAttribute('transform')) {\r\n      relevantTransforms.push(currentParent.getAttribute('transform')); // put transform on list, with the deepest one last\r\n    }\r\n  }\r\n  let applicableMatrices = [].concat(\r\n    // Transforms in order from bottom to top...\r\n    relevantTransforms.map((transform) => _parseTransformAsMatrix(transform)),\r\n    matrices\r\n  );\r\n  return {\r\n    type: clazz,\r\n    name: connectionGroup,\r\n    position: transformCoordinates([cx, cy], applicableMatrices),\r\n  };\r\n}\r\n","import { getConnectionOffset, calculatePositions } from './math.js';\r\nimport { reduceSVGToGroup, wrapGroupsInSVG, removeConnectionPoints } from './text.js';\r\nimport {\r\n  stringToDoc,\r\n  docToString,\r\n  normalize as normalizeCore,\r\n  getDocumentMetadata,\r\n  applySubstitutionClasses,\r\n} from './dom.js';\r\n\r\nlet TIMINGS = false;\r\n\r\n// combine circuits at the specified positions, using the height and width for the combined circuit calculated from metadata for each circuit\r\nfunction _composeCircuitsUsingMetadata(circuits, positions) {\r\n  let groups = [];\r\n  let maxX = -Infinity;\r\n  let maxY = -Infinity;\r\n  for (var i = 0; i <= circuits.length - 1; i++) {\r\n    maxX = Math.max(maxX, positions[i].x + circuits[i].metadata.docWidth);\r\n    maxY = Math.max(maxY, positions[i].y + circuits[i].metadata.docHeight);\r\n    groups.push(\r\n      reduceSVGToGroup(circuits[i].circuit, positions[i].x, positions[i].y, `group-${i}`, circuits[i].metadata.matrix)\r\n    );\r\n  }\r\n  return wrapGroupsInSVG(groups, maxX, maxY);\r\n}\r\n\r\n// combine circuits at the specified positions, using the supplied height and width for the combined circuit\r\nfunction _composeCircuitsToFixedDimensions(circuits, positions, width, height) {\r\n  var groups = [];\r\n  for (var i = 0; i <= circuits.length - 1; i++) {\r\n    groups.push(reduceSVGToGroup(circuits[i], positions[i].x, positions[i].y, `group-${i}`));\r\n  }\r\n  let circuit = wrapGroupsInSVG(groups, width, height);\r\n  return circuit;\r\n}\r\n\r\n// type SVGConnectionPoint = { name: string, type: string, x: number, y: number, index: number, offset: number};\r\nexport default {\r\n  // import the content of a URL file.\r\n  loadFile(fileName, abortController) {\r\n    if (TIMINGS) console.time('load');\r\n    return fetch(fileName, { signal: abortController?.signal })\r\n      .then((response) => {\r\n        if (TIMINGS) console.timeEnd('load');\r\n        if (response.status > 400) {\r\n          return '';\r\n        } else {\r\n          return response.text();\r\n        }\r\n      })\r\n      .catch((error) => {\r\n        if (TIMINGS) console.timeEnd('load');\r\n        if (!error.type || error.type !== 'aborted') {\r\n          console.log(error);\r\n        }\r\n      });\r\n  },\r\n\r\n  // clean up a circuit, deleting namespaces and associated attributes.\r\n  normalize(circuit) {\r\n    if (TIMINGS) console.time('normalize');\r\n\r\n    var doc = stringToDoc(circuit);\r\n    normalizeCore(doc);\r\n    var result = docToString(doc);\r\n\r\n    if (TIMINGS) console.timeEnd('normalize');\r\n    return result;\r\n  },\r\n\r\n  prepare(circuit) {\r\n    if (TIMINGS) console.time('prepare');\r\n\r\n    var doc = stringToDoc(circuit);\r\n    var metadata = getDocumentMetadata(doc);\r\n    normalizeCore(doc);\r\n    applySubstitutionClasses(doc);\r\n    var result = docToString(doc);\r\n\r\n    if (TIMINGS) console.timeEnd('prepare');\r\n    return { circuit: result, metadata: metadata };\r\n  },\r\n\r\n  // process from content and substitute key values.\r\n  substituteCircuitValues(circuit, changeList, useBraces) {\r\n    if (TIMINGS) console.time('substitute');\r\n    var svg = typeof circuit === 'string' ? circuit : circuit.circuit;\r\n    if (changeList) {\r\n      for (var changeKey in changeList) {\r\n        var replValue = changeList[changeKey];\r\n        svg = svg.replace(new RegExp(useBraces ? `{${changeKey}}` : `${changeKey}`, 'gi'), `${replValue}`);\r\n      }\r\n    }\r\n    let result = typeof circuit === 'string' ? svg : { circuit: svg, metadata: circuit.metadata };\r\n    if (TIMINGS) console.timeEnd('substitute');\r\n    return result;\r\n  },\r\n\r\n  // comnbine a circuit and position, returns a modified circuit\r\n  // with the position values set as svg attributes.\r\n  composeCircuits(circuits, positions, width, height) {\r\n    if (TIMINGS) console.time('compose');\r\n    let circuit = undefined;\r\n    if (circuits.length > 0 && typeof circuits[0] === 'string') {\r\n      circuit = _composeCircuitsToFixedDimensions(circuits, positions, width, height);\r\n    } else if (circuits.length > 0 && 'metadata' in circuits[0]) {\r\n      circuit = _composeCircuitsUsingMetadata(circuits, positions);\r\n    }\r\n    if (TIMINGS) console.timeEnd('compose');\r\n    return circuit;\r\n  },\r\n\r\n  // return circuit composed of multiple connected circuits\r\n  stitchCircuits(circuits, connections) {\r\n    let circuitsWithConnections = this.stitchCircuitsWithConnectionPoints(circuits, connections);\r\n    return circuitsWithConnections.circuit;\r\n  },\r\n\r\n  // return circuit composed of multiple connected circuits, delivering connection point information as well\r\n  stitchCircuitsWithConnectionPoints(circuits, connections) {\r\n    if (TIMINGS) console.time('stitch');\r\n\r\n    if (circuits.length < 2 || connections.length < 1) {\r\n      if (TIMINGS) console.timeEnd('stitch');\r\n      throw 'Need at least two circuits and one connection';\r\n    }\r\n    let offsets = connections.map((connection) => {\r\n      return getConnectionOffset(connection, circuits);\r\n    });\r\n    let positions = calculatePositions(connections, offsets, circuits.length);\r\n    let min = {\r\n      x: Math.min.apply(\r\n        null,\r\n        positions.map((item) => item.x)\r\n      ),\r\n      y: Math.min.apply(\r\n        null,\r\n        positions.map((item) => item.y)\r\n      ),\r\n    };\r\n    let origins = positions.map((item) => {\r\n      return { x: item.x - min.x, y: item.y - min.y };\r\n    });\r\n    let deliveredPoints = circuits.map((circuit, circuitIndex) => {\r\n      return circuit.metadata.connectionPoints.map((cp) => {\r\n        return {\r\n          type: cp.type,\r\n          name: cp.name,\r\n          position: [origins[circuitIndex].x + cp.position[0], origins[circuitIndex].y + cp.position[1]],\r\n        };\r\n      });\r\n    });\r\n    let cleanedCircuits = circuits.map((item, index) => {\r\n      return { circuit: removeConnectionPoints(item.circuit, connections, index), metadata: item.metadata };\r\n    });\r\n    let result = _composeCircuitsUsingMetadata(cleanedCircuits, origins);\r\n    if (TIMINGS) console.timeEnd('stitch');\r\n    return { circuit: result, circuitConnectionPoints: deliveredPoints };\r\n  },\r\n\r\n  // insert an svg string into a DOM element.\r\n  insert(elementId, circuit) {\r\n    if (TIMINGS) console.time('insert');\r\n    let svg = typeof circuit === 'string' ? circuit : circuit.circuit;\r\n    var element = document.getElementById(elementId);\r\n    if (element) {\r\n      element.innerHTML = svg;\r\n    }\r\n    if (TIMINGS) console.timeEnd('insert');\r\n    return document;\r\n  },\r\n\r\n  // remove a DOM element.\r\n  remove(elementId) {\r\n    if (TIMINGS) console.time('remove');\r\n    var element = document.getElementById(elementId);\r\n    if (element) {\r\n      element.innerHTML = '';\r\n    }\r\n    if (TIMINGS) console.timeEnd('remove');\r\n    return document;\r\n  },\r\n};\r\n","// Analytics: Delivers events to analytics when interesting behaviors occur\n\nexport interface Logger {\n  log(...args: unknown[]): void;\n  info(...args: unknown[]): void;\n  warn(...args: unknown[]): void;\n  error(...args: unknown[]): void;\n  time(label?: string): void;\n  timeEnd(label?: string): void;\n}\n\ninterface AnalyticsGlobal {\n  webData: { toolName: string };\n  setWebEvent: (name: string, options: { toolName?: string; event?: string; payload?: string }) => void;\n}\n\ndeclare global {\n  // eslint-disable-next-line @typescript-eslint/no-namespace\n  namespace globalThis {\n    // eslint-disable-next-line no-var\n    var AnalyticsAL: AnalyticsGlobal | undefined;\n  }\n}\n\ninterface QueuedEvent {\n  tool: string;\n  evt: string;\n  data?: string;\n}\n//------------------------ Local non-class functions ---------------------\n\nconst loadScript = (source: string, beforeEl?: Element, async = true, defer = true) => {\n  // eslint-disable-next-line no-undef\n  return new Promise((resolve, reject) => {\n    let script: HTMLScriptElement | undefined = document.createElement('script');\n    const scripts = document.getElementsByTagName('script');\n    const lastScript = scripts && scripts.length ? scripts[scripts.length - 1] : undefined;\n    const prior = beforeEl || lastScript?.nextElementSibling;\n\n    script.async = async;\n    script.defer = defer;\n\n    function onloadHander(this: GlobalEventHandlers, event: Event): void {\n      if (script) {\n        script.onload = null;\n        script = undefined;\n      }\n      event instanceof AbortSignal ? reject() : resolve('');\n    }\n\n    script.onload = onloadHander;\n\n    script.src = source;\n    if (prior) {\n      prior.parentNode?.insertBefore(script, prior);\n    } else {\n      document.getElementsByTagName('body')[0]?.append(script);\n    }\n  });\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst poll = function (fn: () => any, interval: number, retries: number) {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const checkCondition = function (resolve: (result: any) => void, reject: (e: Error) => void) {\n    // If the condition is met, we're done!\n    const result = fn();\n    if (result) {\n      resolve(result);\n    }\n    // If the condition isn't met but the timeout hasn't elapsed, go again\n    else if (--retries > 0) {\n      setTimeout(checkCondition, interval, resolve, reject);\n    }\n    // Didn't match and too much time, reject!\n    else {\n      reject(new Error('timed out for ' + fn));\n    }\n  };\n\n  // eslint-disable-next-line no-undef\n  return new Promise(checkCondition);\n};\n\nconst supplyDummySession = function (toolname: string, logger: Logger, message?: string) {\n  // Supply placeholder for dummmy analytics for remainder of session\n  globalThis.AnalyticsAL = {\n    setWebEvent: function () {\n      if (message) {\n        logger.info(message);\n      }\n    },\n    webData: { toolName: toolname },\n  };\n};\n\nconst releaseDummySessionResources = function () {\n  globalThis.AnalyticsAL = undefined;\n};\n\nconst analyticsLoaded = function () {\n  return typeof globalThis.AnalyticsAL !== 'undefined' && globalThis.AnalyticsAL;\n};\n\nconst CONSOLE_LOGGER: Logger = {\n  error(...args) {\n    console.error(...args);\n  }, // eslint-disable-line no-console\n  warn(...args) {\n    console.warn(...args);\n  }, // eslint-disable-line no-console\n  info(...args) {\n    console.info(...args);\n  }, // eslint-disable-line no-console\n  log(...args) {\n    console.error(...args);\n  }, // eslint-disable-line no-console\n  time(...args) {\n    console.time(...args);\n  }, // eslint-disable-line no-console\n  timeEnd(...args) {\n    console.timeEnd(...args);\n  }, // eslint-disable-line no-console\n};\nconst INTERVAL = 200; //ms\nconst RETRIES = 30;\n// Analytics states\nexport const LOADING = 0;\nexport const ACTIVE = 1;\nexport const ABANDONED = -1;\n\n//-----------------------------Analytics class definition---------------------\n\nexport default class Analytics {\n  toolname = '';\n  analyticsUrl = '';\n  logSuppressions = false;\n  usesDummySession = false;\n  state = LOADING;\n  queue: Array<QueuedEvent> = [];\n  logger: Logger = CONSOLE_LOGGER;\n  start(\n    toolname: string,\n    analyticsUrl: string,\n    isSSR: boolean,\n    isTesting: boolean,\n    logSuppressions: boolean,\n    logger?: Logger,\n  ): void {\n    this.toolname = toolname;\n    this.logger = logger || this.logger;\n    this.logSuppressions = logSuppressions;\n    if (isSSR) {\n      this.logger.info('Analytics turned off for SSR');\n      this.usesDummySession = true;\n      supplyDummySession(this.toolname, this.logger);\n      this.state = ABANDONED;\n      this._trackSessionStart();\n    } else if (isTesting) {\n      this.logger.info('Analytics turned off in test automation');\n      this.usesDummySession = true;\n      supplyDummySession(this.toolname, this.logger);\n      this.state = ABANDONED;\n      this._trackSessionStart();\n    } else {\n      this.logger.time('analyticsLoadTime');\n      loadScript(analyticsUrl)\n        .then(() => {\n          // Execution of the Analytics URL from Adobe defines a global AnalyticsAL object ... eventually ... in theory\n          poll(analyticsLoaded, INTERVAL, RETRIES)\n            .then(() => {\n              // if statement to satisfy TypeScript\n              if (globalThis.AnalyticsAL) {\n                this.logger.timeEnd('analyticsLoadTime');\n                this.state = ACTIVE;\n                globalThis.AnalyticsAL.webData.toolName = this.toolname;\n                this._trackSessionStart();\n              }\n            })\n            .catch(() => {\n              this.logger.timeEnd('analyticsLoadTime');\n              this.state = ABANDONED;\n              this.logger.warn(\n                `Analytics didn't start after a timeout of roughly ${(INTERVAL * RETRIES) / 1000} seconds.`,\n              );\n              this.usesDummySession = true;\n              supplyDummySession(\n                this.toolname,\n                this.logger,\n                'Analytics event not delivered - analytics startup timed out',\n              );\n              this._trackSessionStart();\n            });\n        })\n        .catch((error) => {\n          this.logger.timeEnd('analyticsLoadTime');\n          this.state = ABANDONED;\n          this.logger.warn(`Analytics failed to load for ${location.origin}.`, error);\n          this.usesDummySession = true;\n          supplyDummySession(\n            this.toolname,\n            this.logger,\n            'Analytics event not delivered - analytics URL failed to load',\n          );\n          this._trackSessionStart();\n        });\n    }\n  }\n  stop() {\n    if (this.usesDummySession) {\n      releaseDummySessionResources();\n    }\n    this.queue = [];\n    this.state = LOADING;\n  }\n  _trackSessionStart() {\n    // Track session start\n    // if statement to satisfy TypeScript\n    if (globalThis.AnalyticsAL) {\n      globalThis.AnalyticsAL.setWebEvent('toolStart', { toolName: this.toolname });\n      this.logger.info(`ADOBEDTM: ${this.toolname} session start`);\n      for (let q = 0, qlen = this.queue.length; q < qlen; q++) {\n        const item = this.queue[q];\n        if (item) {\n          this.setWebEvent(item.tool, item.evt, item.data);\n        }\n      }\n    }\n    this.queue = [];\n  }\n  setWebEvent(toolName: string, eventName: string, eventData?: string) {\n    if (this.state == LOADING) {\n      this.queue.push({ tool: toolName, evt: eventName, data: eventData });\n    } else {\n      try {\n        if (globalThis.AnalyticsAL) {\n          globalThis.AnalyticsAL.setWebEvent('payload', { event: eventName, payload: eventData });\n          if (!this.usesDummySession || this.logSuppressions) {\n            this.logger.info(`ADOBEDTM: ${this.toolname} [${eventName}]`, eventData);\n          }\n        }\n      } catch (e) {\n        this.logger.error(`setWebEvent or subsequent logging failed unexpectedly for ${eventName}`, eventData);\n      }\n    }\n  }\n}\n","import Service from '@ember/service';\nimport Analytics, { LOADING, ACTIVE, ABANDONED } from '../utils/analytics.ts';\nimport type { Logger } from '../utils/analytics';\nexport type { Logger };\n\nexport default class AnalyticsService extends Service {\n  analytics: Analytics = new Analytics();\n\n  start(\n    toolname: string,\n    url: string,\n    isSSR: boolean,\n    isTesting: boolean,\n    logSuppressions: boolean,\n    logger?: Logger,\n  ): void {\n    this.analytics.start(toolname, url, isSSR, isTesting, logSuppressions, logger);\n  }\n  willDestroy(): void {\n    this.analytics.stop();\n  }\n  setWebEvent(toolName: string, eventName: string, eventData?: string): void {\n    this.analytics.setWebEvent(toolName, eventName, eventData);\n  }\n  get isActive(): boolean {\n    return this.analytics.state === ACTIVE;\n  }\n  get isAbandoned(): boolean {\n    return this.analytics.state === ABANDONED;\n  }\n  get isLoading(): boolean {\n    return this.analytics.state === LOADING;\n  }\n}\ndeclare module '@ember/service' {\n  interface Registry {\n    'aditools-analytics': AnalyticsService;\n  }\n}\n","/*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*exported XLSX */\n/*global process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false */\nvar XLSX = {};\nXLSX.version = '0.20.2';\nvar current_codepage = 1200, current_ansi = 1252;\n/*:: declare var cptable:any; */\n/*global cptable:true, window */\nvar $cptable;\n\nvar VALID_ANSI = [ 874, 932, 936, 949, 950, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 10000 ];\n/* ECMA-376 Part I 18.4.1 charset to codepage mapping */\nvar CS2CP = ({\n\t0:    1252, /* ANSI */\n\t1:   65001, /* DEFAULT */\n\t2:   65001, /* SYMBOL */\n\t77:  10000, /* MAC */\n\t128:   932, /* SHIFTJIS */\n\t129:   949, /* HANGUL */\n\t130:  1361, /* JOHAB */\n\t134:   936, /* GB2312 */\n\t136:   950, /* CHINESEBIG5 */\n\t161:  1253, /* GREEK */\n\t162:  1254, /* TURKISH */\n\t163:  1258, /* VIETNAMESE */\n\t177:  1255, /* HEBREW */\n\t178:  1256, /* ARABIC */\n\t186:  1257, /* BALTIC */\n\t204:  1251, /* RUSSIAN */\n\t222:   874, /* THAI */\n\t238:  1250, /* EASTEUROPE */\n\t255:  1252, /* OEM */\n\t69:   6969  /* MISC */\n}/*:any*/);\n\nvar set_ansi = function(cp/*:number*/) { if(VALID_ANSI.indexOf(cp) == -1) return; current_ansi = CS2CP[0] = cp; };\nfunction reset_ansi() { set_ansi(1252); }\n\nvar set_cp = function(cp/*:number*/) { current_codepage = cp; set_ansi(cp); };\nfunction reset_cp() { set_cp(1200); reset_ansi(); }\n\nfunction char_codes(data/*:string*/)/*:Array<number>*/ { var o/*:Array<number>*/ = []; for(var i = 0, len = data.length; i < len; ++i) o[i] = data.charCodeAt(i); return o; }\n\nfunction utf16leread(data/*:string*/)/*:string*/ {\n\tvar o/*:Array<string>*/ = [];\n\tfor(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i) + (data.charCodeAt(2*i+1)<<8));\n\treturn o.join(\"\");\n}\nfunction utf16lereadu(data/*:Uint8Array*/)/*:string*/ {\n\tvar o/*:Array<string>*/ = [];\n\tfor(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data[2*i] + (data[2*i+1]<<8));\n\treturn o.join(\"\");\n}\nfunction utf16beread(data/*:string*/)/*:string*/ {\n\tvar o/*:Array<string>*/ = [];\n\tfor(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i+1) + (data.charCodeAt(2*i)<<8));\n\treturn o.join(\"\");\n}\n\nvar debom = function(data/*:string*/)/*:string*/ {\n\tvar c1 = data.charCodeAt(0), c2 = data.charCodeAt(1);\n\tif(c1 == 0xFF && c2 == 0xFE) return utf16leread(data.slice(2));\n\tif(c1 == 0xFE && c2 == 0xFF) return utf16beread(data.slice(2));\n\tif(c1 == 0xFEFF) return data.slice(1);\n\treturn data;\n};\n\nvar _getchar = function _gc1(x/*:number*/)/*:string*/ { return String.fromCharCode(x); };\nvar _getansi = function _ga1(x/*:number*/)/*:string*/ { return String.fromCharCode(x); };\n\nfunction set_cptable(cptable) {\n\t$cptable = cptable;\n\tset_cp = function(cp/*:number*/) { current_codepage = cp; set_ansi(cp); };\n\tdebom = function(data/*:string*/) {\n\t\tif(data.charCodeAt(0) === 0xFF && data.charCodeAt(1) === 0xFE) { return $cptable.utils.decode(1200, char_codes(data.slice(2))); }\n\t\treturn data;\n\t};\n\t_getchar = function _gc2(x/*:number*/)/*:string*/ {\n\t\tif(current_codepage === 1200) return String.fromCharCode(x);\n\t\treturn $cptable.utils.decode(current_codepage, [x&255,x>>8])[0];\n\t};\n\t_getansi = function _ga2(x/*:number*/)/*:string*/ {\n\t\treturn $cptable.utils.decode(current_ansi, [x])[0];\n\t};\n\tcpdoit();\n}\nvar DENSE = null;\nvar DIF_XL = true;\nvar Base64_map = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nfunction Base64_encode(input) {\n  var o = \"\";\n  var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;\n  for (var i = 0; i < input.length; ) {\n    c1 = input.charCodeAt(i++);\n    e1 = c1 >> 2;\n    c2 = input.charCodeAt(i++);\n    e2 = (c1 & 3) << 4 | c2 >> 4;\n    c3 = input.charCodeAt(i++);\n    e3 = (c2 & 15) << 2 | c3 >> 6;\n    e4 = c3 & 63;\n    if (isNaN(c2)) {\n      e3 = e4 = 64;\n    } else if (isNaN(c3)) {\n      e4 = 64;\n    }\n    o += Base64_map.charAt(e1) + Base64_map.charAt(e2) + Base64_map.charAt(e3) + Base64_map.charAt(e4);\n  }\n  return o;\n}\nfunction Base64_encode_pass(input) {\n  var o = \"\";\n  var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;\n  for (var i = 0; i < input.length; ) {\n    c1 = input.charCodeAt(i++);\n    if (c1 > 255)\n      c1 = 95;\n    e1 = c1 >> 2;\n    c2 = input.charCodeAt(i++);\n    if (c2 > 255)\n      c2 = 95;\n    e2 = (c1 & 3) << 4 | c2 >> 4;\n    c3 = input.charCodeAt(i++);\n    if (c3 > 255)\n      c3 = 95;\n    e3 = (c2 & 15) << 2 | c3 >> 6;\n    e4 = c3 & 63;\n    if (isNaN(c2)) {\n      e3 = e4 = 64;\n    } else if (isNaN(c3)) {\n      e4 = 64;\n    }\n    o += Base64_map.charAt(e1) + Base64_map.charAt(e2) + Base64_map.charAt(e3) + Base64_map.charAt(e4);\n  }\n  return o;\n}\nfunction Base64_encode_arr(input) {\n  var o = \"\";\n  var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;\n  for (var i = 0; i < input.length; ) {\n    c1 = input[i++];\n    e1 = c1 >> 2;\n    c2 = input[i++];\n    e2 = (c1 & 3) << 4 | c2 >> 4;\n    c3 = input[i++];\n    e3 = (c2 & 15) << 2 | c3 >> 6;\n    e4 = c3 & 63;\n    if (isNaN(c2)) {\n      e3 = e4 = 64;\n    } else if (isNaN(c3)) {\n      e4 = 64;\n    }\n    o += Base64_map.charAt(e1) + Base64_map.charAt(e2) + Base64_map.charAt(e3) + Base64_map.charAt(e4);\n  }\n  return o;\n}\nfunction Base64_decode(input) {\n  var o = \"\";\n  var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;\n  if (input.slice(0, 5) == \"data:\") {\n    var i = input.slice(0, 1024).indexOf(\";base64,\");\n    if (i > -1)\n      input = input.slice(i + 8);\n  }\n  input = input.replace(/[^\\w\\+\\/\\=]/g, \"\");\n  for (var i = 0; i < input.length; ) {\n    e1 = Base64_map.indexOf(input.charAt(i++));\n    e2 = Base64_map.indexOf(input.charAt(i++));\n    c1 = e1 << 2 | e2 >> 4;\n    o += String.fromCharCode(c1);\n    e3 = Base64_map.indexOf(input.charAt(i++));\n    c2 = (e2 & 15) << 4 | e3 >> 2;\n    if (e3 !== 64) {\n      o += String.fromCharCode(c2);\n    }\n    e4 = Base64_map.indexOf(input.charAt(i++));\n    c3 = (e3 & 3) << 6 | e4;\n    if (e4 !== 64) {\n      o += String.fromCharCode(c3);\n    }\n  }\n  return o;\n}\nvar has_buf = /*#__PURE__*/(function() { return typeof Buffer !== 'undefined' && typeof process !== 'undefined' && typeof process.versions !== 'undefined' && !!process.versions.node; })();\n\nvar Buffer_from = /*#__PURE__*/(function() {\n\tif(typeof Buffer !== 'undefined') {\n\t\tvar nbfs = !Buffer.from;\n\t\tif(!nbfs) try { Buffer.from(\"foo\", \"utf8\"); } catch(e) { nbfs = true; }\n\t\treturn nbfs ? function(buf, enc) { return (enc) ? new Buffer(buf, enc) : new Buffer(buf); } : Buffer.from.bind(Buffer);\n\t}\n\treturn function() {};\n})();\nvar buf_utf16le = /*#__PURE__*/(function() {\n\tif(typeof Buffer === 'undefined') return false;\n\tvar x = Buffer_from([65,0]);\n\tif(!x) return false;\n\tvar o = x.toString(\"utf16le\");\n\treturn o.length == 1;\n})();\n\n\nfunction new_raw_buf(len/*:number*/) {\n\t/* jshint -W056 */\n\tif(has_buf) return Buffer.alloc ? Buffer.alloc(len) : new Buffer(len);\n\treturn typeof Uint8Array != \"undefined\" ? new Uint8Array(len) : new Array(len);\n\t/* jshint +W056 */\n}\n\nfunction new_unsafe_buf(len/*:number*/) {\n\t/* jshint -W056 */\n\tif(has_buf) return Buffer.allocUnsafe ? Buffer.allocUnsafe(len) : new Buffer(len);\n\treturn typeof Uint8Array != \"undefined\" ? new Uint8Array(len) : new Array(len);\n\t/* jshint +W056 */\n}\n\nvar s2a = function s2a(s/*:string*/)/*:any*/ {\n\tif(has_buf) return Buffer_from(s, \"binary\");\n\treturn s.split(\"\").map(function(x/*:string*/)/*:number*/{ return x.charCodeAt(0) & 0xff; });\n};\n\nfunction s2ab(s/*:string*/)/*:any*/ {\n\tif(typeof ArrayBuffer === 'undefined') return s2a(s);\n\tvar buf = new ArrayBuffer(s.length), view = new Uint8Array(buf);\n\tfor (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;\n\treturn buf;\n}\n\nfunction a2s(data/*:any*/)/*:string*/ {\n\tif(Array.isArray(data)) return data.map(function(c) { return String.fromCharCode(c); }).join(\"\");\n\tvar o/*:Array<string>*/ = []; for(var i = 0; i < data.length; ++i) o[i] = String.fromCharCode(data[i]); return o.join(\"\");\n}\n\nfunction a2u(data/*:Array<number>*/)/*:Uint8Array*/ {\n\tif(typeof Uint8Array === 'undefined') throw new Error(\"Unsupported\");\n\treturn new Uint8Array(data);\n}\n\nfunction ab2a(data/*:ArrayBuffer|Uint8Array*/)/*:Array<number>*/ {\n\tif(typeof ArrayBuffer == 'undefined') throw new Error(\"Unsupported\");\n\tif(data instanceof ArrayBuffer) return ab2a(new Uint8Array(data));\n\t/*:: if(data instanceof ArrayBuffer) throw new Error(\"unreachable\"); */\n\tvar o = new Array(data.length);\n\tfor(var i = 0; i < data.length; ++i) o[i] = data[i];\n\treturn o;\n}\n\nvar bconcat = has_buf ? function(bufs) { return Buffer.concat(bufs.map(function(buf) { return Buffer.isBuffer(buf) ? buf : Buffer_from(buf); })); } : function(bufs) {\n\tif(typeof Uint8Array !== \"undefined\") {\n\t\tvar i = 0, maxlen = 0;\n\t\tfor(i = 0; i < bufs.length; ++i) maxlen += bufs[i].length;\n\t\tvar o = new Uint8Array(maxlen);\n\t\tvar len = 0;\n\t\tfor(i = 0, maxlen = 0; i < bufs.length; maxlen += len, ++i) {\n\t\t\tlen = bufs[i].length;\n\t\t\tif(bufs[i] instanceof Uint8Array) o.set(bufs[i], maxlen);\n\t\t\telse if(typeof bufs[i] == \"string\") o.set(new Uint8Array(s2a(bufs[i])), maxlen);\n\t\t\telse o.set(new Uint8Array(bufs[i]), maxlen);\n\t\t}\n\t\treturn o;\n\t}\n\treturn [].concat.apply([], bufs.map(function(buf) { return Array.isArray(buf) ? buf : [].slice.call(buf); }));\n};\n\nfunction utf8decode(content/*:string*/) {\n\tvar out = [], widx = 0, L = content.length + 250;\n\tvar o = new_raw_buf(content.length + 255);\n\tfor(var ridx = 0; ridx < content.length; ++ridx) {\n\t\tvar c = content.charCodeAt(ridx);\n\t\tif(c < 0x80) o[widx++] = c;\n\t\telse if(c < 0x800) {\n\t\t\to[widx++] = (192|((c>>6)&31));\n\t\t\to[widx++] = (128|(c&63));\n\t\t} else if(c >= 0xD800 && c < 0xE000) {\n\t\t\tc = (c&1023)+64;\n\t\t\tvar d = content.charCodeAt(++ridx)&1023;\n\t\t\to[widx++] = (240|((c>>8)&7));\n\t\t\to[widx++] = (128|((c>>2)&63));\n\t\t\to[widx++] = (128|((d>>6)&15)|((c&3)<<4));\n\t\t\to[widx++] = (128|(d&63));\n\t\t} else {\n\t\t\to[widx++] = (224|((c>>12)&15));\n\t\t\to[widx++] = (128|((c>>6)&63));\n\t\t\to[widx++] = (128|(c&63));\n\t\t}\n\t\tif(widx > L) {\n\t\t\tout.push(o.slice(0, widx));\n\t\t\twidx = 0;\n\t\t\to = new_raw_buf(65535);\n\t\t\tL = 65530;\n\t\t}\n\t}\n\tout.push(o.slice(0, widx));\n\treturn bconcat(out);\n}\n\nvar chr0 = /\\u0000/g, chr1 = /[\\u0001-\\u0006]/g;\n/*::\ndeclare type Block = any;\ndeclare type BufArray = {\n\tnewblk(sz:number):Block;\n\tnext(sz:number):Block;\n\tend():any;\n\tpush(buf:Block):void;\n};\n\ntype RecordHopperCB = {(d:any, Rn:string, RT:number):?boolean;};\n\ntype EvertType = {[string]:string};\ntype EvertNumType = {[string]:number};\ntype EvertArrType = {[string]:Array<string>};\n\ntype StringConv = {(string):string};\n\n*/\n/* ssf.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/*jshint -W041 */\nfunction _strrev(x/*:string*/)/*:string*/ { var o = \"\", i = x.length-1; while(i>=0) o += x.charAt(i--); return o; }\nfunction pad0(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v; return t.length>=d?t:fill('0',d-t.length)+t;}\nfunction pad_(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v;return t.length>=d?t:fill(' ',d-t.length)+t;}\nfunction rpad_(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v; return t.length>=d?t:t+fill(' ',d-t.length);}\nfunction pad0r1(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+Math.round(v); return t.length>=d?t:fill('0',d-t.length)+t;}\nfunction pad0r2(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v; return t.length>=d?t:fill('0',d-t.length)+t;}\nvar p2_32 = /*#__PURE__*/Math.pow(2,32);\nfunction pad0r(v/*:any*/,d/*:number*/)/*:string*/{if(v>p2_32||v<-p2_32) return pad0r1(v,d); var i = Math.round(v); return pad0r2(i,d); }\n/* yes, in 2022 this is still faster than string compare */\nfunction SSF_isgeneral(s/*:string*/, i/*:?number*/)/*:boolean*/ { i = i || 0; return s.length >= 7 + i && (s.charCodeAt(i)|32) === 103 && (s.charCodeAt(i+1)|32) === 101 && (s.charCodeAt(i+2)|32) === 110 && (s.charCodeAt(i+3)|32) === 101 && (s.charCodeAt(i+4)|32) === 114 && (s.charCodeAt(i+5)|32) === 97 && (s.charCodeAt(i+6)|32) === 108; }\nvar days/*:Array<Array<string> >*/ = [\n\t['Sun', 'Sunday'],\n\t['Mon', 'Monday'],\n\t['Tue', 'Tuesday'],\n\t['Wed', 'Wednesday'],\n\t['Thu', 'Thursday'],\n\t['Fri', 'Friday'],\n\t['Sat', 'Saturday']\n];\nvar months/*:Array<Array<string> >*/ = [\n\t['J', 'Jan', 'January'],\n\t['F', 'Feb', 'February'],\n\t['M', 'Mar', 'March'],\n\t['A', 'Apr', 'April'],\n\t['M', 'May', 'May'],\n\t['J', 'Jun', 'June'],\n\t['J', 'Jul', 'July'],\n\t['A', 'Aug', 'August'],\n\t['S', 'Sep', 'September'],\n\t['O', 'Oct', 'October'],\n\t['N', 'Nov', 'November'],\n\t['D', 'Dec', 'December']\n];\nfunction SSF_init_table(t/*:any*/) {\n\tif(!t) t = {};\n\tt[0]=  'General';\n\tt[1]=  '0';\n\tt[2]=  '0.00';\n\tt[3]=  '#,##0';\n\tt[4]=  '#,##0.00';\n\tt[9]=  '0%';\n\tt[10]= '0.00%';\n\tt[11]= '0.00E+00';\n\tt[12]= '# ?/?';\n\tt[13]= '# ??/??';\n\tt[14]= 'm/d/yy';\n\tt[15]= 'd-mmm-yy';\n\tt[16]= 'd-mmm';\n\tt[17]= 'mmm-yy';\n\tt[18]= 'h:mm AM/PM';\n\tt[19]= 'h:mm:ss AM/PM';\n\tt[20]= 'h:mm';\n\tt[21]= 'h:mm:ss';\n\tt[22]= 'm/d/yy h:mm';\n\tt[37]= '#,##0 ;(#,##0)';\n\tt[38]= '#,##0 ;[Red](#,##0)';\n\tt[39]= '#,##0.00;(#,##0.00)';\n\tt[40]= '#,##0.00;[Red](#,##0.00)';\n\tt[45]= 'mm:ss';\n\tt[46]= '[h]:mm:ss';\n\tt[47]= 'mmss.0';\n\tt[48]= '##0.0E+0';\n\tt[49]= '@';\n\tt[56]= '\"上午/下午 \"hh\"時\"mm\"分\"ss\"秒 \"';\n\treturn t;\n}\n/* repeated to satiate webpack */\nvar table_fmt = {\n\t0:  'General',\n\t1:  '0',\n\t2:  '0.00',\n\t3:  '#,##0',\n\t4:  '#,##0.00',\n\t9:  '0%',\n\t10: '0.00%',\n\t11: '0.00E+00',\n\t12: '# ?/?',\n\t13: '# ??/??',\n\t14: 'm/d/yy',\n\t15: 'd-mmm-yy',\n\t16: 'd-mmm',\n\t17: 'mmm-yy',\n\t18: 'h:mm AM/PM',\n\t19: 'h:mm:ss AM/PM',\n\t20: 'h:mm',\n\t21: 'h:mm:ss',\n\t22: 'm/d/yy h:mm',\n\t37: '#,##0 ;(#,##0)',\n\t38: '#,##0 ;[Red](#,##0)',\n\t39: '#,##0.00;(#,##0.00)',\n\t40: '#,##0.00;[Red](#,##0.00)',\n\t45: 'mm:ss',\n\t46: '[h]:mm:ss',\n\t47: 'mmss.0',\n\t48: '##0.0E+0',\n\t49: '@',\n\t56: '\"上午/下午 \"hh\"時\"mm\"分\"ss\"秒 \"'\n};\n\n/* Defaults determined by systematically testing in Excel 2019 */\n\n/* These formats appear to default to other formats in the table */\nvar SSF_default_map = {\n\t5:  37, 6:  38, 7:  39, 8:  40,         //  5 -> 37 ...  8 -> 40\n\n\t23:  0, 24:  0, 25:  0, 26:  0,         // 23 ->  0 ... 26 ->  0\n\n\t27: 14, 28: 14, 29: 14, 30: 14, 31: 14, // 27 -> 14 ... 31 -> 14\n\n\t50: 14, 51: 14, 52: 14, 53: 14, 54: 14, // 50 -> 14 ... 58 -> 14\n\t55: 14, 56: 14, 57: 14, 58: 14,\n\t59:  1, 60:  2, 61:  3, 62:  4,         // 59 ->  1 ... 62 ->  4\n\n\t67:  9, 68: 10,                         // 67 ->  9 ... 68 -> 10\n\t69: 12, 70: 13, 71: 14,                 // 69 -> 12 ... 71 -> 14\n\t72: 14, 73: 15, 74: 16, 75: 17,         // 72 -> 14 ... 75 -> 17\n\t76: 20, 77: 21, 78: 22,                 // 76 -> 20 ... 78 -> 22\n\t79: 45, 80: 46, 81: 47,                 // 79 -> 45 ... 81 -> 47\n\t82: 0                                   // 82 ->  0 ... 65536 -> 0 (omitted)\n};\n\n\n/* These formats technically refer to Accounting formats with no equivalent */\nvar SSF_default_str = {\n\t//  5 -- Currency,   0 decimal, black negative\n\t5:  '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\t63: '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\n\t//  6 -- Currency,   0 decimal, red   negative\n\t6:  '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\t64: '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\n\t//  7 -- Currency,   2 decimal, black negative\n\t7:  '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\t65: '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\n\t//  8 -- Currency,   2 decimal, red   negative\n\t8:  '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t66: '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\n\t// 41 -- Accounting, 0 decimal, No Symbol\n\t41: '_(* #,##0_);_(* \\\\(#,##0\\\\);_(* \"-\"_);_(@_)',\n\n\t// 42 -- Accounting, 0 decimal, $  Symbol\n\t42: '_(\"$\"* #,##0_);_(\"$\"* \\\\(#,##0\\\\);_(\"$\"* \"-\"_);_(@_)',\n\n\t// 43 -- Accounting, 2 decimal, No Symbol\n\t43: '_(* #,##0.00_);_(* \\\\(#,##0.00\\\\);_(* \"-\"??_);_(@_)',\n\n\t// 44 -- Accounting, 2 decimal, $  Symbol\n\t44: '_(\"$\"* #,##0.00_);_(\"$\"* \\\\(#,##0.00\\\\);_(\"$\"* \"-\"??_);_(@_)'\n};\n\nfunction SSF_frac(x/*:number*/, D/*:number*/, mixed/*:?boolean*/)/*:Array<number>*/ {\n\tvar sgn = x < 0 ? -1 : 1;\n\tvar B = x * sgn;\n\tvar P_2 = 0, P_1 = 1, P = 0;\n\tvar Q_2 = 1, Q_1 = 0, Q = 0;\n\tvar A = Math.floor(B);\n\twhile(Q_1 < D) {\n\t\tA = Math.floor(B);\n\t\tP = A * P_1 + P_2;\n\t\tQ = A * Q_1 + Q_2;\n\t\tif((B - A) < 0.00000005) break;\n\t\tB = 1 / (B - A);\n\t\tP_2 = P_1; P_1 = P;\n\t\tQ_2 = Q_1; Q_1 = Q;\n\t}\n\tif(Q > D) { if(Q_1 > D) { Q = Q_2; P = P_2; } else { Q = Q_1; P = P_1; } }\n\tif(!mixed) return [0, sgn * P, Q];\n\tvar q = Math.floor(sgn * P/Q);\n\treturn [q, sgn*P - q*Q, Q];\n}\nfunction SSF_normalize_xl_unsafe(v/*:number*/)/*:number*/ {\n\tvar s = v.toPrecision(16);\n\tif(s.indexOf(\"e\") > -1) {\n\t\tvar m = s.slice(0, s.indexOf(\"e\"));\n\t\tm = m.indexOf(\".\") > -1 ? m.slice(0, (m.slice(0,2) == \"0.\" ? 17 : 16)) : (m.slice(0,15) + fill(\"0\", m.length - 15));\n\t\treturn m + s.slice(s.indexOf(\"e\"));\n\t}\n\tvar n = s.indexOf(\".\") > -1 ? s.slice(0, (s.slice(0,2) == \"0.\" ? 17 : 16)) : (s.slice(0,15) + fill(\"0\", s.length - 15));\n\treturn Number(n);\n}\n\nfunction SSF_parse_date_code(v/*:number*/,opts/*:?any*/,b2/*:?boolean*/) {\n\tif(v > 2958465 || v < 0) return null;\n\tv = SSF_normalize_xl_unsafe(v);\n\tvar date = (v|0), time = Math.floor(86400 * (v - date)), dow=0;\n\tvar dout=[];\n\tvar out={D:date, T:time, u:86400*(v-date)-time,y:0,m:0,d:0,H:0,M:0,S:0,q:0};\n\tif(Math.abs(out.u) < 1e-6) out.u = 0;\n\tif(opts && opts.date1904) date += 1462;\n\tif(out.u > 0.9999) {\n\t\tout.u = 0;\n\t\tif(++time == 86400) { out.T = time = 0; ++date; ++out.D; }\n\t}\n\tif(date === 60) {dout = b2 ? [1317,10,29] : [1900,2,29]; dow=3;}\n\telse if(date === 0) {dout = b2 ? [1317,8,29] : [1900,1,0]; dow=6;}\n\telse {\n\t\tif(date > 60) --date;\n\t\t/* 1 = Jan 1 1900 in Gregorian */\n\t\tvar d = new Date(1900, 0, 1);\n\t\td.setDate(d.getDate() + date - 1);\n\t\tdout = [d.getFullYear(), d.getMonth()+1,d.getDate()];\n\t\tdow = d.getDay();\n\t\tif(date < 60) dow = (dow + 6) % 7;\n\t\tif(b2) dow = SSF_fix_hijri(d, dout);\n\t}\n\tout.y = dout[0]; out.m = dout[1]; out.d = dout[2];\n\tout.S = time % 60; time = Math.floor(time / 60);\n\tout.M = time % 60; time = Math.floor(time / 60);\n\tout.H = time;\n\tout.q = dow;\n\treturn out;\n}\n/* ECMA-376 18.8.30 numFmt*/\n/* Note: `toPrecision` uses standard form when prec > E and E >= -6 */\n/* exponent >= -9 and <= 9 */\nfunction SSF_strip_decimal(o/*:string*/)/*:string*/ {\n\treturn (o.indexOf(\".\") == -1) ? o : o.replace(/(?:\\.0*|(\\.\\d*[1-9])0+)$/, \"$1\");\n}\n\n/* General Exponential always shows 2 digits exp and trims the mantissa */\nfunction SSF_normalize_exp(o/*:string*/)/*:string*/ {\n\tif(o.indexOf(\"E\") == -1) return o;\n\treturn o.replace(/(?:\\.0*|(\\.\\d*[1-9])0+)[Ee]/,\"$1E\").replace(/(E[+-])(\\d)$/,\"$10$2\");\n}\n\n/* exponent >= -9 and <= 9 */\nfunction SSF_small_exp(v/*:number*/)/*:string*/ {\n\tvar w = (v<0?12:11);\n\tvar o = SSF_strip_decimal(v.toFixed(12)); if(o.length <= w) return o;\n\to = v.toPrecision(10); if(o.length <= w) return o;\n\treturn v.toExponential(5);\n}\n\n/* exponent >= 11 or <= -10 likely exponential */\nfunction SSF_large_exp(v/*:number*/)/*:string*/ {\n\tvar o = SSF_strip_decimal(v.toFixed(11));\n\treturn (o.length > (v<0?12:11) || o === \"0\" || o === \"-0\") ? v.toPrecision(6) : o;\n}\n\nfunction SSF_general_num(v/*:number*/)/*:string*/ {\n\tvar V = Math.floor(Math.log(Math.abs(v))*Math.LOG10E), o;\n\n\tif(V >= -4 && V <= -1) o = v.toPrecision(10+V);\n\telse if(Math.abs(V) <= 9) o = SSF_small_exp(v);\n\telse if(V === 10) o = v.toFixed(10).substr(0,12);\n\telse o = SSF_large_exp(v);\n\n\treturn SSF_strip_decimal(SSF_normalize_exp(o.toUpperCase()));\n}\n\n\n/*\n\t\"General\" rules:\n\t- text is passed through (\"@\")\n\t- booleans are rendered as TRUE/FALSE\n\t- \"up to 11 characters\" displayed for numbers\n\t- Default date format (code 14) used for Dates\n\n\tThe longest 32-bit integer text is \"-2147483648\", exactly 11 chars\n\tTODO: technically the display depends on the width of the cell\n*/\nfunction SSF_general(v/*:any*/, opts/*:any*/) {\n\tswitch(typeof v) {\n\t\tcase 'string': return v;\n\t\tcase 'boolean': return v ? \"TRUE\" : \"FALSE\";\n\t\tcase 'number': return (v|0) === v ? v.toString(10) : SSF_general_num(v);\n\t\tcase 'undefined': return \"\";\n\t\tcase 'object':\n\t\t\tif(v == null) return \"\";\n\t\t\tif(v instanceof Date) return SSF_format(14, datenum(v, opts && opts.date1904), opts);\n\t}\n\tthrow new Error(\"unsupported value in General format: \" + v);\n}\n\nfunction SSF_fix_hijri(date/*:Date*/, o/*:[number, number, number]*/) {\n  /* TODO: properly adjust y/m/d and  */\n  o[0] -= 581;\n  var dow = date.getDay();\n  if(date < 60) dow = (dow + 6) % 7;\n  return dow;\n}\n//var THAI_DIGITS = \"\\u0E50\\u0E51\\u0E52\\u0E53\\u0E54\\u0E55\\u0E56\\u0E57\\u0E58\\u0E59\".split(\"\");\nfunction SSF_write_date(type/*:number*/, fmt/*:string*/, val, ss0/*:?number*/)/*:string*/ {\n\tvar o=\"\", ss=0, tt=0, y = val.y, out, outl = 0;\n\tswitch(type) {\n\t\tcase 98: /* 'b' buddhist year */\n\t\t\ty = val.y + 543;\n\t\t\t/* falls through */\n\t\tcase 121: /* 'y' year */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = y % 100; outl = 2; break;\n\t\t\tdefault: out = y % 10000; outl = 4; break;\n\t\t} break;\n\t\tcase 109: /* 'm' month */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.m; outl = fmt.length; break;\n\t\t\tcase 3: return months[val.m-1][1];\n\t\t\tcase 5: return months[val.m-1][0];\n\t\t\tdefault: return months[val.m-1][2];\n\t\t} break;\n\t\tcase 100: /* 'd' day */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.d; outl = fmt.length; break;\n\t\t\tcase 3: return days[val.q][0];\n\t\t\tdefault: return days[val.q][1];\n\t\t} break;\n\t\tcase 104: /* 'h' 12-hour */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = 1+(val.H+11)%12; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad hour format: ' + fmt;\n\t\t} break;\n\t\tcase 72: /* 'H' 24-hour */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.H; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad hour format: ' + fmt;\n\t\t} break;\n\t\tcase 77: /* 'M' minutes */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.M; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad minute format: ' + fmt;\n\t\t} break;\n\t\tcase 115: /* 's' seconds */\n\t\t\tif(fmt != 's' && fmt != 'ss' && fmt != '.0' && fmt != '.00' && fmt != '.000') throw 'bad second format: ' + fmt;\n\t\t\tif(val.u === 0 && (fmt == \"s\" || fmt == \"ss\")) return pad0(val.S, fmt.length);\n\t\t\t/*::if(!ss0) ss0 = 0; */\n\t\t\tif(ss0 >= 2) tt = ss0 === 3 ? 1000 : 100;\n\t\t\telse tt = ss0 === 1 ? 10 : 1;\n\t\t\tss = Math.round((tt)*(val.S + val.u));\n\t\t\tif(ss >= 60*tt) ss = 0;\n\t\t\tif(fmt === 's') return ss === 0 ? \"0\" : \"\"+ss/tt;\n\t\t\to = pad0(ss,2 + ss0);\n\t\t\tif(fmt === 'ss') return o.substr(0,2);\n\t\t\treturn \".\" + o.substr(2,fmt.length-1);\n\t\tcase 90: /* 'Z' absolute time */\n\t\tswitch(fmt) {\n\t\t\tcase '[h]': case '[hh]': out = val.D*24+val.H; break;\n\t\t\tcase '[m]': case '[mm]': out = (val.D*24+val.H)*60+val.M; break;\n\t\t\tcase '[s]': case '[ss]': out = ((val.D*24+val.H)*60+val.M)*60+(ss0 == 0 ? Math.round(val.S+val.u) : val.S); break;\n\t\t\tdefault: throw 'bad abstime format: ' + fmt;\n\t\t} outl = fmt.length === 3 ? 1 : 2; break;\n\t\tcase 101: /* 'e' era */\n\t\t\tout = y; outl = 1; break;\n\t}\n\tvar outstr = outl > 0 ? pad0(out, outl) : \"\";\n\treturn outstr;\n}\n\n\n/*jshint -W086 */\n/*jshint +W086 */\nfunction commaify(s/*:string*/)/*:string*/ {\n\tvar w = 3;\n\tif(s.length <= w) return s;\n\tvar j = (s.length % w), o = s.substr(0,j);\n\tfor(; j!=s.length; j+=w) o+=(o.length > 0 ? \",\" : \"\") + s.substr(j,w);\n\treturn o;\n}\nvar pct1 = /%/g;\nfunction write_num_pct(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/{\n\tvar sfmt = fmt.replace(pct1,\"\"), mul = fmt.length - sfmt.length;\n\treturn write_num(type, sfmt, val * Math.pow(10,2*mul)) + fill(\"%\",mul);\n}\n\nfunction write_num_cm(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/{\n\tvar idx = fmt.length - 1;\n\twhile(fmt.charCodeAt(idx-1) === 44) --idx;\n\treturn write_num(type, fmt.substr(0,idx), val / Math.pow(10,3*(fmt.length-idx)));\n}\n\nfunction write_num_exp(fmt/*:string*/, val/*:number*/)/*:string*/{\n\tvar o/*:string*/;\n\tvar idx = fmt.indexOf(\"E\") - fmt.indexOf(\".\") - 1;\n\tif(fmt.match(/^#+0.0E\\+0$/)) {\n\t\tif(val == 0) return \"0.0E+0\";\n\t\telse if(val < 0) return \"-\" + write_num_exp(fmt, -val);\n\t\tvar period = fmt.indexOf(\".\"); if(period === -1) period=fmt.indexOf('E');\n\t\tvar ee = Math.floor(Math.log(val)*Math.LOG10E)%period;\n\t\tif(ee < 0) ee += period;\n\t\to = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);\n\t\tif(o.indexOf(\"e\") === -1) {\n\t\t\tvar fakee = Math.floor(Math.log(val)*Math.LOG10E);\n\t\t\tif(o.indexOf(\".\") === -1) o = o.charAt(0) + \".\" + o.substr(1) + \"E+\" + (fakee - o.length+ee);\n\t\t\telse o += \"E+\" + (fakee - ee);\n\t\t\twhile(o.substr(0,2) === \"0.\") {\n\t\t\t\to = o.charAt(0) + o.substr(2,period) + \".\" + o.substr(2+period);\n\t\t\t\to = o.replace(/^0+([1-9])/,\"$1\").replace(/^0+\\./,\"0.\");\n\t\t\t}\n\t\t\to = o.replace(/\\+-/,\"-\");\n\t\t}\n\t\to = o.replace(/^([+-]?)(\\d*)\\.(\\d*)[Ee]/,function($$,$1,$2,$3) { return $1 + $2 + $3.substr(0,(period+ee)%period) + \".\" + $3.substr(ee) + \"E\"; });\n\t} else o = val.toExponential(idx);\n\tif(fmt.match(/E\\+00$/) && o.match(/e[+-]\\d$/)) o = o.substr(0,o.length-1) + \"0\" + o.charAt(o.length-1);\n\tif(fmt.match(/E\\-/) && o.match(/e\\+/)) o = o.replace(/e\\+/,\"e\");\n\treturn o.replace(\"e\",\"E\");\n}\nvar frac1 = /# (\\?+)( ?)\\/( ?)(\\d+)/;\nfunction write_num_f1(r/*:Array<string>*/, aval/*:number*/, sign/*:string*/)/*:string*/ {\n\tvar den = parseInt(r[4],10), rr = Math.round(aval * den), base = Math.floor(rr/den);\n\tvar myn = (rr - base*den), myd = den;\n\treturn sign + (base === 0 ? \"\" : \"\"+base) + \" \" + (myn === 0 ? fill(\" \", r[1].length + 1 + r[4].length) : pad_(myn,r[1].length) + r[2] + \"/\" + r[3] + pad0(myd,r[4].length));\n}\nfunction write_num_f2(r/*:Array<string>*/, aval/*:number*/, sign/*:string*/)/*:string*/ {\n\treturn sign + (aval === 0 ? \"\" : \"\"+aval) + fill(\" \", r[1].length + 2 + r[4].length);\n}\nvar dec1 = /^#*0*\\.([0#]+)/;\nvar closeparen = /\\)[^)]*[0#]/;\nvar phone = /\\(###\\) ###\\\\?-####/;\nfunction hashq(str/*:string*/)/*:string*/ {\n\tvar o = \"\", cc;\n\tfor(var i = 0; i != str.length; ++i) switch((cc=str.charCodeAt(i))) {\n\t\tcase 35: break;\n\t\tcase 63: o+= \" \"; break;\n\t\tcase 48: o+= \"0\"; break;\n\t\tdefault: o+= String.fromCharCode(cc);\n\t}\n\treturn o;\n}\nfunction rnd(val/*:number*/, d/*:number*/)/*:string*/ { var dd = Math.pow(10,d); return \"\"+(Math.round(val * dd)/dd); }\nfunction dec(val/*:number*/, d/*:number*/)/*:number*/ {\n\tvar _frac = val - Math.floor(val), dd = Math.pow(10,d);\n\tif (d < ('' + Math.round(_frac * dd)).length) return 0;\n\treturn Math.round(_frac * dd);\n}\nfunction carry(val/*:number*/, d/*:number*/)/*:number*/ {\n\tif (d < ('' + Math.round((val-Math.floor(val))*Math.pow(10,d))).length) {\n\t\treturn 1;\n\t}\n\treturn 0;\n}\nfunction flr(val/*:number*/)/*:string*/ {\n\tif(val < 2147483647 && val > -2147483648) return \"\"+(val >= 0 ? (val|0) : (val-1|0));\n\treturn \"\"+Math.floor(val);\n}\nfunction write_num_flt(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/ {\n\tif(type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\n\t\tvar ffmt = fmt.replace(/\\( */,\"\").replace(/ \\)/,\"\").replace(/\\)/,\"\");\n\t\tif(val >= 0) return write_num_flt('n', ffmt, val);\n\t\treturn '(' + write_num_flt('n', ffmt, -val) + ')';\n\t}\n\tif(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm(type, fmt, val);\n\tif(fmt.indexOf('%') !== -1) return write_num_pct(type, fmt, val);\n\tif(fmt.indexOf('E') !== -1) return write_num_exp(fmt, val);\n\tif(fmt.charCodeAt(0) === 36) return \"$\"+write_num_flt(type,fmt.substr(fmt.charAt(1)==' '?2:1),val);\n\tvar o;\n\tvar r/*:?Array<string>*/, ri, ff, aval = Math.abs(val), sign = val < 0 ? \"-\" : \"\";\n\tif(fmt.match(/^00+$/)) return sign + pad0r(aval,fmt.length);\n\tif(fmt.match(/^[#?]+$/)) {\n\t\to = pad0r(val,0); if(o === \"0\") o = \"\";\n\t\treturn o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n\tif((r = fmt.match(frac1))) return write_num_f1(r, aval, sign);\n\tif(fmt.match(/^#+0+$/)) return sign + pad0r(aval,fmt.length - fmt.indexOf(\"0\"));\n\tif((r = fmt.match(dec1))) {\n\t\to = rnd(val, r[1].length).replace(/^([^\\.]+)$/,\"$1.\"+hashq(r[1])).replace(/\\.$/,\".\"+hashq(r[1])).replace(/\\.(\\d*)$/,function($$, $1) { return \".\" + $1 + fill(\"0\", hashq(/*::(*/r/*::||[\"\"])*/[1]).length-$1.length); });\n\t\treturn fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./,\".\");\n\t}\n\tfmt = fmt.replace(/^#+([0.])/, \"$1\");\n\tif((r = fmt.match(/^(0*)\\.(#*)$/))) {\n\t\treturn sign + rnd(aval, r[2].length).replace(/\\.(\\d*[1-9])0*$/,\".$1\").replace(/^(-?\\d*)$/,\"$1.\").replace(/^0\\./,r[1].length?\"0.\":\".\");\n\t}\n\tif((r = fmt.match(/^#{1,3},##0(\\.?)$/))) return sign + commaify(pad0r(aval,0));\n\tif((r = fmt.match(/^#,##0\\.([#0]*0)$/))) {\n\t\treturn val < 0 ? \"-\" + write_num_flt(type, fmt, -val) : commaify(\"\"+(Math.floor(val) + carry(val, r[1].length))) + \".\" + pad0(dec(val, r[1].length),r[1].length);\n\t}\n\tif((r = fmt.match(/^#,#*,#0/))) return write_num_flt(type,fmt.replace(/^#,#*,/,\"\"),val);\n\tif((r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/))) {\n\t\to = _strrev(write_num_flt(type, fmt.replace(/[\\\\-]/g,\"\"), val));\n\t\tri = 0;\n\t\treturn _strrev(_strrev(fmt.replace(/\\\\/g,\"\")).replace(/[0#]/g,function(x){return ri<o.length?o.charAt(ri++):x==='0'?'0':\"\";}));\n\t}\n\tif(fmt.match(phone)) {\n\t\to = write_num_flt(type, \"##########\", val);\n\t\treturn \"(\" + o.substr(0,3) + \") \" + o.substr(3, 3) + \"-\" + o.substr(6);\n\t}\n\tvar oa = \"\";\n\tif((r = fmt.match(/^([#0?]+)( ?)\\/( ?)([#0?]+)/))) {\n\t\tri = Math.min(/*::String(*/r[4]/*::)*/.length,7);\n\t\tff = SSF_frac(aval, Math.pow(10,ri)-1, false);\n\t\to = \"\" + sign;\n\t\toa = write_num(\"n\", /*::String(*/r[1]/*::)*/, ff[1]);\n\t\tif(oa.charAt(oa.length-1) == \" \") oa = oa.substr(0,oa.length-1) + \"0\";\n\t\to += oa + /*::String(*/r[2]/*::)*/ + \"/\" + /*::String(*/r[3]/*::)*/;\n\t\toa = rpad_(ff[2],ri);\n\t\tif(oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length-oa.length)) + oa;\n\t\to += oa;\n\t\treturn o;\n\t}\n\tif((r = fmt.match(/^# ([#0?]+)( ?)\\/( ?)([#0?]+)/))) {\n\t\tri = Math.min(Math.max(r[1].length, r[4].length),7);\n\t\tff = SSF_frac(aval, Math.pow(10,ri)-1, true);\n\t\treturn sign + (ff[0]||(ff[1] ? \"\" : \"0\")) + \" \" + (ff[1] ? pad_(ff[1],ri) + r[2] + \"/\" + r[3] + rpad_(ff[2],ri): fill(\" \", 2*ri+1 + r[2].length + r[3].length));\n\t}\n\tif((r = fmt.match(/^[#0?]+$/))) {\n\t\to = pad0r(val, 0);\n\t\tif(fmt.length <= o.length) return o;\n\t\treturn hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n\tif((r = fmt.match(/^([#0?]+)\\.([#0]+)$/))) {\n\t\to = \"\" + val.toFixed(Math.min(r[2].length,10)).replace(/([^0])0+$/,\"$1\");\n\t\tri = o.indexOf(\".\");\n\t\tvar lres = fmt.indexOf(\".\") - ri, rres = fmt.length - o.length - lres;\n\t\treturn hashq(fmt.substr(0,lres) + o + fmt.substr(fmt.length-rres));\n\t}\n\tif((r = fmt.match(/^00,000\\.([#0]*0)$/))) {\n\t\tri = dec(val, r[1].length);\n\t\treturn val < 0 ? \"-\" + write_num_flt(type, fmt, -val) : commaify(flr(val)).replace(/^\\d,\\d{3}$/,\"0$&\").replace(/^\\d*$/,function($$) { return \"00,\" + ($$.length < 3 ? pad0(0,3-$$.length) : \"\") + $$; }) + \".\" + pad0(ri,r[1].length);\n\t}\n\tswitch(fmt) {\n\t\tcase \"###,##0.00\": return write_num_flt(type, \"#,##0.00\", val);\n\t\tcase \"###,###\":\n\t\tcase \"##,###\":\n\t\tcase \"#,###\": var x = commaify(pad0r(aval,0)); return x !== \"0\" ? sign + x : \"\";\n\t\tcase \"###,###.00\": return write_num_flt(type, \"###,##0.00\",val).replace(/^0\\./,\".\");\n\t\tcase \"#,###.00\": return write_num_flt(type, \"#,##0.00\",val).replace(/^0\\./,\".\");\n\t\tdefault:\n\t}\n\tthrow new Error(\"unsupported format |\" + fmt + \"|\");\n}\nfunction write_num_cm2(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/{\n\tvar idx = fmt.length - 1;\n\twhile(fmt.charCodeAt(idx-1) === 44) --idx;\n\treturn write_num(type, fmt.substr(0,idx), val / Math.pow(10,3*(fmt.length-idx)));\n}\nfunction write_num_pct2(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/{\n\tvar sfmt = fmt.replace(pct1,\"\"), mul = fmt.length - sfmt.length;\n\treturn write_num(type, sfmt, val * Math.pow(10,2*mul)) + fill(\"%\",mul);\n}\nfunction write_num_exp2(fmt/*:string*/, val/*:number*/)/*:string*/{\n\tvar o/*:string*/;\n\tvar idx = fmt.indexOf(\"E\") - fmt.indexOf(\".\") - 1;\n\tif(fmt.match(/^#+0.0E\\+0$/)) {\n\t\tif(val == 0) return \"0.0E+0\";\n\t\telse if(val < 0) return \"-\" + write_num_exp2(fmt, -val);\n\t\tvar period = fmt.indexOf(\".\"); if(period === -1) period=fmt.indexOf('E');\n\t\tvar ee = Math.floor(Math.log(val)*Math.LOG10E)%period;\n\t\tif(ee < 0) ee += period;\n\t\to = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);\n\t\tif(!o.match(/[Ee]/)) {\n\t\t\tvar fakee = Math.floor(Math.log(val)*Math.LOG10E);\n\t\t\tif(o.indexOf(\".\") === -1) o = o.charAt(0) + \".\" + o.substr(1) + \"E+\" + (fakee - o.length+ee);\n\t\t\telse o += \"E+\" + (fakee - ee);\n\t\t\to = o.replace(/\\+-/,\"-\");\n\t\t}\n\t\to = o.replace(/^([+-]?)(\\d*)\\.(\\d*)[Ee]/,function($$,$1,$2,$3) { return $1 + $2 + $3.substr(0,(period+ee)%period) + \".\" + $3.substr(ee) + \"E\"; });\n\t} else o = val.toExponential(idx);\n\tif(fmt.match(/E\\+00$/) && o.match(/e[+-]\\d$/)) o = o.substr(0,o.length-1) + \"0\" + o.charAt(o.length-1);\n\tif(fmt.match(/E\\-/) && o.match(/e\\+/)) o = o.replace(/e\\+/,\"e\");\n\treturn o.replace(\"e\",\"E\");\n}\nfunction write_num_int(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/ {\n\tif(type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\n\t\tvar ffmt = fmt.replace(/\\( */,\"\").replace(/ \\)/,\"\").replace(/\\)/,\"\");\n\t\tif(val >= 0) return write_num_int('n', ffmt, val);\n\t\treturn '(' + write_num_int('n', ffmt, -val) + ')';\n\t}\n\tif(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm2(type, fmt, val);\n\tif(fmt.indexOf('%') !== -1) return write_num_pct2(type, fmt, val);\n\tif(fmt.indexOf('E') !== -1) return write_num_exp2(fmt, val);\n\tif(fmt.charCodeAt(0) === 36) return \"$\"+write_num_int(type,fmt.substr(fmt.charAt(1)==' '?2:1),val);\n\tvar o;\n\tvar r/*:?Array<string>*/, ri, ff, aval = Math.abs(val), sign = val < 0 ? \"-\" : \"\";\n\tif(fmt.match(/^00+$/)) return sign + pad0(aval,fmt.length);\n\tif(fmt.match(/^[#?]+$/)) {\n\t\to = (\"\"+val); if(val === 0) o = \"\";\n\t\treturn o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n\tif((r = fmt.match(frac1))) return write_num_f2(r, aval, sign);\n\tif(fmt.match(/^#+0+$/)) return sign + pad0(aval,fmt.length - fmt.indexOf(\"0\"));\n\tif((r = fmt.match(dec1))) {\n\t\t/*:: if(!Array.isArray(r)) throw new Error(\"unreachable\"); */\n\t\to = (\"\"+val).replace(/^([^\\.]+)$/,\"$1.\"+hashq(r[1])).replace(/\\.$/,\".\"+hashq(r[1]));\n\t\to = o.replace(/\\.(\\d*)$/,function($$, $1) {\n\t\t/*:: if(!Array.isArray(r)) throw new Error(\"unreachable\"); */\n\t\t\treturn \".\" + $1 + fill(\"0\", hashq(r[1]).length-$1.length); });\n\t\treturn fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./,\".\");\n\t}\n\tfmt = fmt.replace(/^#+([0.])/, \"$1\");\n\tif((r = fmt.match(/^(0*)\\.(#*)$/))) {\n\t\treturn sign + (\"\"+aval).replace(/\\.(\\d*[1-9])0*$/,\".$1\").replace(/^(-?\\d*)$/,\"$1.\").replace(/^0\\./,r[1].length?\"0.\":\".\");\n\t}\n\tif((r = fmt.match(/^#{1,3},##0(\\.?)$/))) return sign + commaify((\"\"+aval));\n\tif((r = fmt.match(/^#,##0\\.([#0]*0)$/))) {\n\t\treturn val < 0 ? \"-\" + write_num_int(type, fmt, -val) : commaify((\"\"+val)) + \".\" + fill('0',r[1].length);\n\t}\n\tif((r = fmt.match(/^#,#*,#0/))) return write_num_int(type,fmt.replace(/^#,#*,/,\"\"),val);\n\tif((r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/))) {\n\t\to = _strrev(write_num_int(type, fmt.replace(/[\\\\-]/g,\"\"), val));\n\t\tri = 0;\n\t\treturn _strrev(_strrev(fmt.replace(/\\\\/g,\"\")).replace(/[0#]/g,function(x){return ri<o.length?o.charAt(ri++):x==='0'?'0':\"\";}));\n\t}\n\tif(fmt.match(phone)) {\n\t\to = write_num_int(type, \"##########\", val);\n\t\treturn \"(\" + o.substr(0,3) + \") \" + o.substr(3, 3) + \"-\" + o.substr(6);\n\t}\n\tvar oa = \"\";\n\tif((r = fmt.match(/^([#0?]+)( ?)\\/( ?)([#0?]+)/))) {\n\t\tri = Math.min(/*::String(*/r[4]/*::)*/.length,7);\n\t\tff = SSF_frac(aval, Math.pow(10,ri)-1, false);\n\t\to = \"\" + sign;\n\t\toa = write_num(\"n\", /*::String(*/r[1]/*::)*/, ff[1]);\n\t\tif(oa.charAt(oa.length-1) == \" \") oa = oa.substr(0,oa.length-1) + \"0\";\n\t\to += oa + /*::String(*/r[2]/*::)*/ + \"/\" + /*::String(*/r[3]/*::)*/;\n\t\toa = rpad_(ff[2],ri);\n\t\tif(oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length-oa.length)) + oa;\n\t\to += oa;\n\t\treturn o;\n\t}\n\tif((r = fmt.match(/^# ([#0?]+)( ?)\\/( ?)([#0?]+)/))) {\n\t\tri = Math.min(Math.max(r[1].length, r[4].length),7);\n\t\tff = SSF_frac(aval, Math.pow(10,ri)-1, true);\n\t\treturn sign + (ff[0]||(ff[1] ? \"\" : \"0\")) + \" \" + (ff[1] ? pad_(ff[1],ri) + r[2] + \"/\" + r[3] + rpad_(ff[2],ri): fill(\" \", 2*ri+1 + r[2].length + r[3].length));\n\t}\n\tif((r = fmt.match(/^[#0?]+$/))) {\n\t\to = \"\" + val;\n\t\tif(fmt.length <= o.length) return o;\n\t\treturn hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n\tif((r = fmt.match(/^([#0]+)\\.([#0]+)$/))) {\n\t\to = \"\" + val.toFixed(Math.min(r[2].length,10)).replace(/([^0])0+$/,\"$1\");\n\t\tri = o.indexOf(\".\");\n\t\tvar lres = fmt.indexOf(\".\") - ri, rres = fmt.length - o.length - lres;\n\t\treturn hashq(fmt.substr(0,lres) + o + fmt.substr(fmt.length-rres));\n\t}\n\tif((r = fmt.match(/^00,000\\.([#0]*0)$/))) {\n\t\treturn val < 0 ? \"-\" + write_num_int(type, fmt, -val) : commaify(\"\"+val).replace(/^\\d,\\d{3}$/,\"0$&\").replace(/^\\d*$/,function($$) { return \"00,\" + ($$.length < 3 ? pad0(0,3-$$.length) : \"\") + $$; }) + \".\" + pad0(0,r[1].length);\n\t}\n\tswitch(fmt) {\n\t\tcase \"###,###\":\n\t\tcase \"##,###\":\n\t\tcase \"#,###\": var x = commaify(\"\"+aval); return x !== \"0\" ? sign + x : \"\";\n\t\tdefault:\n\t\t\tif(fmt.match(/\\.[0#?]*$/)) return write_num_int(type, fmt.slice(0,fmt.lastIndexOf(\".\")), val) + hashq(fmt.slice(fmt.lastIndexOf(\".\")));\n\t}\n\tthrow new Error(\"unsupported format |\" + fmt + \"|\");\n}\nfunction write_num(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/ {\n\treturn (val|0) === val ? write_num_int(type, fmt, val) : write_num_flt(type, fmt, val);\n}\nfunction SSF_split_fmt(fmt/*:string*/)/*:Array<string>*/ {\n\tvar out/*:Array<string>*/ = [];\n\tvar in_str = false/*, cc*/;\n\tfor(var i = 0, j = 0; i < fmt.length; ++i) switch((/*cc=*/fmt.charCodeAt(i))) {\n\t\tcase 34: /* '\"' */\n\t\t\tin_str = !in_str; break;\n\t\tcase 95: case 42: case 92: /* '_' '*' '\\\\' */\n\t\t\t++i; break;\n\t\tcase 59: /* ';' */\n\t\t\tout[out.length] = fmt.substr(j,i-j);\n\t\t\tj = i+1;\n\t}\n\tout[out.length] = fmt.substr(j);\n\tif(in_str === true) throw new Error(\"Format |\" + fmt + \"| unterminated string \");\n\treturn out;\n}\n\nvar SSF_abstime = /\\[[HhMmSs\\u0E0A\\u0E19\\u0E17]*\\]/;\nfunction fmt_is_date(fmt/*:string*/)/*:boolean*/ {\n\tvar i = 0, /*cc = 0,*/ c = \"\", o = \"\";\n\twhile(i < fmt.length) {\n\t\tswitch((c = fmt.charAt(i))) {\n\t\t\tcase 'G': if(SSF_isgeneral(fmt, i)) i+= 6; i++; break;\n\t\t\tcase '\"': for(;(/*cc=*/fmt.charCodeAt(++i)) !== 34 && i < fmt.length;){/*empty*/} ++i; break;\n\t\t\tcase '\\\\': i+=2; break;\n\t\t\tcase '_': i+=2; break;\n\t\t\tcase '@': ++i; break;\n\t\t\tcase 'B': case 'b':\n\t\t\t\tif(fmt.charAt(i+1) === \"1\" || fmt.charAt(i+1) === \"2\") return true;\n\t\t\t\t/* falls through */\n\t\t\tcase 'M': case 'D': case 'Y': case 'H': case 'S': case 'E':\n\t\t\t\t/* falls through */\n\t\t\tcase 'm': case 'd': case 'y': case 'h': case 's': case 'e': case 'g': return true;\n\t\t\tcase 'A': case 'a': case '上':\n\t\t\t\tif(fmt.substr(i, 3).toUpperCase() === \"A/P\") return true;\n\t\t\t\tif(fmt.substr(i, 5).toUpperCase() === \"AM/PM\") return true;\n\t\t\t\tif(fmt.substr(i, 5).toUpperCase() === \"上午/下午\") return true;\n\t\t\t\t++i; break;\n\t\t\tcase '[':\n\t\t\t\to = c;\n\t\t\t\twhile(fmt.charAt(i++) !== ']' && i < fmt.length) o += fmt.charAt(i);\n\t\t\t\tif(o.match(SSF_abstime)) return true;\n\t\t\t\tbreak;\n\t\t\tcase '.':\n\t\t\t\t/* falls through */\n\t\t\tcase '0': case '#':\n\t\t\t\twhile(i < fmt.length && (\"0#?.,E+-%\".indexOf(c=fmt.charAt(++i)) > -1 || (c=='\\\\' && fmt.charAt(i+1) == \"-\" && \"0#\".indexOf(fmt.charAt(i+2))>-1))){/* empty */}\n\t\t\t\tbreak;\n\t\t\tcase '?': while(fmt.charAt(++i) === c){/* empty */} break;\n\t\t\tcase '*': ++i; if(fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i; break;\n\t\t\tcase '(': case ')': ++i; break;\n\t\t\tcase '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':\n\t\t\t\twhile(i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1){/* empty */} break;\n\t\t\tcase ' ': ++i; break;\n\t\t\tdefault: ++i; break;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction eval_fmt(fmt/*:string*/, v/*:any*/, opts/*:any*/, flen/*:number*/) {\n\tvar out = [], o = \"\", i = 0, c = \"\", lst='t', dt, j, cc;\n\tvar hr='H';\n\t/* Tokenize */\n\twhile(i < fmt.length) {\n\t\tswitch((c = fmt.charAt(i))) {\n\t\t\tcase 'G': /* General */\n\t\t\t\tif(!SSF_isgeneral(fmt, i)) throw new Error('unrecognized character ' + c + ' in ' +fmt);\n\t\t\t\tout[out.length] = {t:'G', v:'General'}; i+=7; break;\n\t\t\tcase '\"': /* Literal text */\n\t\t\t\tfor(o=\"\";(cc=fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) o += String.fromCharCode(cc);\n\t\t\t\tout[out.length] = {t:'t', v:o}; ++i; break;\n\t\t\tcase '\\\\': var w = fmt.charAt(++i), t = (w === \"(\" || w === \")\") ? w : 't';\n\t\t\t\tout[out.length] = {t:t, v:w}; ++i; break;\n\t\t\tcase '_': out[out.length] = {t:'t', v:\" \"}; i+=2; break;\n\t\t\tcase '@': /* Text Placeholder */\n\t\t\t\tout[out.length] = {t:'T', v:v}; ++i; break;\n\t\t\tcase 'B': case 'b':\n\t\t\t\tif(fmt.charAt(i+1) === \"1\" || fmt.charAt(i+1) === \"2\") {\n\t\t\t\t\tif(dt==null) { dt=SSF_parse_date_code(v, opts, fmt.charAt(i+1) === \"2\"); if(dt==null) return \"\"; }\n\t\t\t\t\tout[out.length] = {t:'X', v:fmt.substr(i,2)}; lst = c; i+=2; break;\n\t\t\t\t}\n\t\t\t\t/* falls through */\n\t\t\tcase 'M': case 'D': case 'Y': case 'H': case 'S': case 'E':\n\t\t\t\tc = c.toLowerCase();\n\t\t\t\t/* falls through */\n\t\t\tcase 'm': case 'd': case 'y': case 'h': case 's': case 'e': case 'g':\n\t\t\t\tif(v < 0) return \"\";\n\t\t\t\tif(dt==null) { dt=SSF_parse_date_code(v, opts); if(dt==null) return \"\"; }\n\t\t\t\to = c; while(++i < fmt.length && fmt.charAt(i).toLowerCase() === c) o+=c;\n\t\t\t\tif(c === 'm' && lst.toLowerCase() === 'h') c = 'M';\n\t\t\t\tif(c === 'h') c = hr;\n\t\t\t\tout[out.length] = {t:c, v:o}; lst = c; break;\n\t\t\tcase 'A': case 'a': case '上':\n\t\t\t\tvar q={t:c, v:c};\n\t\t\t\tif(dt==null) dt=SSF_parse_date_code(v, opts);\n\t\t\t\tif(fmt.substr(i, 3).toUpperCase() === \"A/P\") { if(dt!=null) q.v = dt.H >= 12 ? fmt.charAt(i+2) : c; q.t = 'T'; hr='h';i+=3;}\n\t\t\t\telse if(fmt.substr(i,5).toUpperCase() === \"AM/PM\") { if(dt!=null) q.v = dt.H >= 12 ? \"PM\" : \"AM\"; q.t = 'T'; i+=5; hr='h'; }\n\t\t\t\telse if(fmt.substr(i,5).toUpperCase() === \"上午/下午\") { if(dt!=null) q.v = dt.H >= 12 ? \"下午\" : \"上午\"; q.t = 'T'; i+=5; hr='h'; }\n\t\t\t\telse { q.t = \"t\"; ++i; }\n\t\t\t\tif(dt==null && q.t === 'T') return \"\";\n\t\t\t\tout[out.length] = q; lst = c; break;\n\t\t\tcase '[':\n\t\t\t\to = c;\n\t\t\t\twhile(fmt.charAt(i++) !== ']' && i < fmt.length) o += fmt.charAt(i);\n\t\t\t\tif(o.slice(-1) !== ']') throw 'unterminated \"[\" block: |' + o + '|';\n\t\t\t\tif(o.match(SSF_abstime)) {\n\t\t\t\t\tif(dt==null) { dt=SSF_parse_date_code(v, opts); if(dt==null) return \"\"; }\n\t\t\t\t\tout[out.length] = {t:'Z', v:o.toLowerCase()};\n\t\t\t\t\tlst = o.charAt(1);\n\t\t\t\t} else if(o.indexOf(\"$\") > -1) {\n\t\t\t\t\to = (o.match(/\\$([^-\\[\\]]*)/)||[])[1]||\"$\";\n\t\t\t\t\tif(!fmt_is_date(fmt)) out[out.length] = {t:'t',v:o};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t/* Numbers */\n\t\t\tcase '.':\n\t\t\t\tif(dt != null) {\n\t\t\t\t\to = c; while(++i < fmt.length && (c=fmt.charAt(i)) === \"0\") o += c;\n\t\t\t\t\tout[out.length] = {t:'s', v:o}; break;\n\t\t\t\t}\n\t\t\t\t/* falls through */\n\t\t\tcase '0': case '#':\n\t\t\t\to = c; while(++i < fmt.length && \"0#?.,E+-%\".indexOf(c=fmt.charAt(i)) > -1) o += c;\n\t\t\t\tout[out.length] = {t:'n', v:o}; break;\n\t\t\tcase '?':\n\t\t\t\to = c; while(fmt.charAt(++i) === c) o+=c;\n\t\t\t\tout[out.length] = {t:c, v:o}; lst = c; break;\n\t\t\tcase '*': ++i; if(fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i; break; // **\n\t\t\tcase '(': case ')': out[out.length] = {t:(flen===1?'t':c), v:c}; ++i; break;\n\t\t\tcase '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':\n\t\t\t\to = c; while(i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1) o+=fmt.charAt(i);\n\t\t\t\tout[out.length] = {t:'D', v:o}; break;\n\t\t\tcase ' ': out[out.length] = {t:c, v:c}; ++i; break;\n\t\t\tcase '$': out[out.length] = {t:'t', v:'$'}; ++i; break;\n\t\t\tdefault:\n\t\t\t\tif(\",$-+/():!^&'~{}<>=€acfijklopqrtuvwxzP\".indexOf(c) === -1) throw new Error('unrecognized character ' + c + ' in ' + fmt);\n\t\t\t\tout[out.length] = {t:'t', v:c}; ++i; break;\n\t\t}\n\t}\n\n\t/* Scan for date/time parts */\n\tvar bt = 0, ss0 = 0, ssm;\n\tfor(i=out.length-1, lst='t'; i >= 0; --i) {\n\t\tswitch(out[i].t) {\n\t\t\tcase 'h': case 'H': out[i].t = hr; lst='h'; if(bt < 1) bt = 1; break;\n\t\t\tcase 's':\n\t\t\t\tif((ssm=out[i].v.match(/\\.0+$/))) { ss0=Math.max(ss0,ssm[0].length-1); bt = 4;}\n\t\t\t\tif(bt < 3) bt = 3;\n\t\t\t/* falls through */\n\t\t\tcase 'd': case 'y': case 'e': lst=out[i].t; break;\n\t\t\tcase 'M': lst=out[i].t; if(bt < 2) bt = 2; break;\n\t\t\tcase 'm': if(lst === 's') { out[i].t = 'M'; if(bt < 2) bt = 2; } break;\n\t\t\tcase 'X': /*if(out[i].v === \"B2\");*/\n\t\t\t\tbreak;\n\t\t\tcase 'Z':\n\t\t\t\tif(bt < 1 && out[i].v.match(/[Hh]/)) bt = 1;\n\t\t\t\tif(bt < 2 && out[i].v.match(/[Mm]/)) bt = 2;\n\t\t\t\tif(bt < 3 && out[i].v.match(/[Ss]/)) bt = 3;\n\t\t}\n\t}\n\n\t/* time rounding depends on presence of minute / second / usec fields */\n\tvar _dt;\n\tswitch(bt) {\n\t\tcase 0: break;\n\t\tcase 1:\n\t\tcase 2:\n\t\tcase 3:\n\t\t\tif(dt.u >= 0.5) { dt.u = 0; ++dt.S; }\n\t\t\tif(dt.S >=  60) { dt.S = 0; ++dt.M; }\n\t\t\tif(dt.M >=  60) { dt.M = 0; ++dt.H; }\n\t\t\tif(dt.H >=  24) { dt.H = 0; ++dt.D; _dt = SSF_parse_date_code(dt.D); _dt.u = dt.u; _dt.S = dt.S; _dt.M = dt.M; _dt.H = dt.H; dt = _dt; }\n\t\t\tbreak;\n\t\tcase 4:\n\t\t\tswitch(ss0) {\n\t\t\t\tcase 1: dt.u = Math.round(dt.u * 10)/10; break;\n\t\t\t\tcase 2: dt.u = Math.round(dt.u * 100)/100; break;\n\t\t\t\tcase 3: dt.u = Math.round(dt.u * 1000)/1000; break;\n\t\t\t}\n\t\t\tif(dt.u >=   1) { dt.u = 0; ++dt.S; }\n\t\t\tif(dt.S >=  60) { dt.S = 0; ++dt.M; }\n\t\t\tif(dt.M >=  60) { dt.M = 0; ++dt.H; }\n\t\t\tif(dt.H >=  24) { dt.H = 0; ++dt.D; _dt = SSF_parse_date_code(dt.D); _dt.u = dt.u; _dt.S = dt.S; _dt.M = dt.M; _dt.H = dt.H; dt = _dt; }\n\t\t\tbreak;\n\t}\n\n\t/* replace fields */\n\tvar nstr = \"\", jj;\n\tfor(i=0; i < out.length; ++i) {\n\t\tswitch(out[i].t) {\n\t\t\tcase 't': case 'T': case ' ': case 'D': break;\n\t\t\tcase 'X': out[i].v = \"\"; out[i].t = \";\"; break;\n\t\t\tcase 'd': case 'm': case 'y': case 'h': case 'H': case 'M': case 's': case 'e': case 'b': case 'Z':\n\t\t\t\t/*::if(!dt) throw \"unreachable\"; */\n\t\t\t\tout[i].v = SSF_write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0);\n\t\t\t\tout[i].t = 't'; break;\n\t\t\tcase 'n': case '?':\n\t\t\t\tjj = i+1;\n\t\t\t\twhile(out[jj] != null && (\n\t\t\t\t\t(c=out[jj].t) === \"?\" || c === \"D\" ||\n\t\t\t\t\t((c === \" \" || c === \"t\") && out[jj+1] != null && (out[jj+1].t === '?' || out[jj+1].t === \"t\" && out[jj+1].v === '/')) ||\n\t\t\t\t\t(out[i].t === '(' && (c === ' ' || c === 'n' || c === ')')) ||\n\t\t\t\t\t(c === 't' && (out[jj].v === '/' || out[jj].v === ' ' && out[jj+1] != null && out[jj+1].t == '?'))\n\t\t\t\t)) {\n\t\t\t\t\tout[i].v += out[jj].v;\n\t\t\t\t\tout[jj] = {v:\"\", t:\";\"}; ++jj;\n\t\t\t\t}\n\t\t\t\tnstr += out[i].v;\n\t\t\t\ti = jj-1; break;\n\t\t\tcase 'G': out[i].t = 't'; out[i].v = SSF_general(v,opts); break;\n\t\t}\n\t}\n\tvar vv = \"\", myv, ostr;\n\tif(nstr.length > 0) {\n\t\tif(nstr.charCodeAt(0) == 40) /* '(' */ {\n\t\t\tmyv = (v<0&&nstr.charCodeAt(0) === 45 ? -v : v);\n\t\t\tostr = write_num('n', nstr, myv);\n\t\t} else {\n\t\t\tmyv = (v<0 && flen > 1 ? -v : v);\n\t\t\tostr = write_num('n', nstr, myv);\n\t\t\tif(myv < 0 && out[0] && out[0].t == 't') {\n\t\t\t\tostr = ostr.substr(1);\n\t\t\t\tout[0].v = \"-\" + out[0].v;\n\t\t\t}\n\t\t}\n\t\tjj=ostr.length-1;\n\t\tvar decpt = out.length;\n\t\tfor(i=0; i < out.length; ++i) if(out[i] != null && out[i].t != 't' && out[i].v.indexOf(\".\") > -1) { decpt = i; break; }\n\t\tvar lasti=out.length;\n\t\tif(decpt === out.length && ostr.indexOf(\"E\") === -1) {\n\t\t\tfor(i=out.length-1; i>= 0;--i) {\n\t\t\t\tif(out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;\n\t\t\t\tif(jj>=out[i].v.length-1) { jj -= out[i].v.length; out[i].v = ostr.substr(jj+1, out[i].v.length); }\n\t\t\t\telse if(jj < 0) out[i].v = \"\";\n\t\t\t\telse { out[i].v = ostr.substr(0, jj+1); jj = -1; }\n\t\t\t\tout[i].t = 't';\n\t\t\t\tlasti = i;\n\t\t\t}\n\t\t\tif(jj>=0 && lasti<out.length) out[lasti].v = ostr.substr(0,jj+1) + out[lasti].v;\n\t\t}\n\t\telse if(decpt !== out.length && ostr.indexOf(\"E\") === -1) {\n\t\t\tjj = ostr.indexOf(\".\")-1;\n\t\t\tfor(i=decpt; i>= 0; --i) {\n\t\t\t\tif(out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;\n\t\t\t\tj=out[i].v.indexOf(\".\")>-1&&i===decpt?out[i].v.indexOf(\".\")-1:out[i].v.length-1;\n\t\t\t\tvv = out[i].v.substr(j+1);\n\t\t\t\tfor(; j>=0; --j) {\n\t\t\t\t\tif(jj>=0 && (out[i].v.charAt(j) === \"0\" || out[i].v.charAt(j) === \"#\")) vv = ostr.charAt(jj--) + vv;\n\t\t\t\t}\n\t\t\t\tout[i].v = vv;\n\t\t\t\tout[i].t = 't';\n\t\t\t\tlasti = i;\n\t\t\t}\n\t\t\tif(jj>=0 && lasti<out.length) out[lasti].v = ostr.substr(0,jj+1) + out[lasti].v;\n\t\t\tjj = ostr.indexOf(\".\")+1;\n\t\t\tfor(i=decpt; i<out.length; ++i) {\n\t\t\t\tif(out[i] == null || ('n?('.indexOf(out[i].t) === -1 && i !== decpt)) continue;\n\t\t\t\tj=out[i].v.indexOf(\".\")>-1&&i===decpt?out[i].v.indexOf(\".\")+1:0;\n\t\t\t\tvv = out[i].v.substr(0,j);\n\t\t\t\tfor(; j<out[i].v.length; ++j) {\n\t\t\t\t\tif(jj<ostr.length) vv += ostr.charAt(jj++);\n\t\t\t\t}\n\t\t\t\tout[i].v = vv;\n\t\t\t\tout[i].t = 't';\n\t\t\t\tlasti = i;\n\t\t\t}\n\t\t}\n\t}\n\tfor(i=0; i<out.length; ++i) if(out[i] != null && 'n?'.indexOf(out[i].t)>-1) {\n\t\tmyv = (flen >1 && v < 0 && i>0 && out[i-1].v === \"-\" ? -v:v);\n\t\tout[i].v = write_num(out[i].t, out[i].v, myv);\n\t\tout[i].t = 't';\n\t}\n\tvar retval = \"\";\n\tfor(i=0; i !== out.length; ++i) if(out[i] != null) retval += out[i].v;\n\treturn retval;\n}\n\nvar cfregex2 = /\\[(=|>[=]?|<[>=]?)(-?\\d+(?:\\.\\d*)?)\\]/;\nfunction chkcond(v, rr) {\n\tif(rr == null) return false;\n\tvar thresh = parseFloat(rr[2]);\n\tswitch(rr[1]) {\n\t\tcase \"=\":  if(v == thresh) return true; break;\n\t\tcase \">\":  if(v >  thresh) return true; break;\n\t\tcase \"<\":  if(v <  thresh) return true; break;\n\t\tcase \"<>\": if(v != thresh) return true; break;\n\t\tcase \">=\": if(v >= thresh) return true; break;\n\t\tcase \"<=\": if(v <= thresh) return true; break;\n\t}\n\treturn false;\n}\nfunction choose_fmt(f/*:string*/, v/*:any*/) {\n\tvar fmt = SSF_split_fmt(f);\n\tvar l = fmt.length, lat = fmt[l-1].indexOf(\"@\");\n\tif(l<4 && lat>-1) --l;\n\tif(fmt.length > 4) throw new Error(\"cannot find right format for |\" + fmt.join(\"|\") + \"|\");\n\tif(typeof v !== \"number\") return [4, fmt.length === 4 || lat>-1?fmt[fmt.length-1]:\"@\"];\n\tswitch(fmt.length) {\n\t\tcase 1: fmt = lat>-1 ? [\"General\", \"General\", \"General\", fmt[0]] : [fmt[0], fmt[0], fmt[0], \"@\"]; break;\n\t\tcase 2: fmt = lat>-1 ? [fmt[0], fmt[0], fmt[0], fmt[1]] : [fmt[0], fmt[1], fmt[0], \"@\"]; break;\n\t\tcase 3: fmt = lat>-1 ? [fmt[0], fmt[1], fmt[0], fmt[2]] : [fmt[0], fmt[1], fmt[2], \"@\"]; break;\n\t\tcase 4: break;\n\t}\n\tvar ff = v > 0 ? fmt[0] : v < 0 ? fmt[1] : fmt[2];\n\tif(fmt[0].indexOf(\"[\") === -1 && fmt[1].indexOf(\"[\") === -1) return [l, ff];\n\tif(fmt[0].match(/\\[[=<>]/) != null || fmt[1].match(/\\[[=<>]/) != null) {\n\t\tvar m1 = fmt[0].match(cfregex2);\n\t\tvar m2 = fmt[1].match(cfregex2);\n\t\treturn chkcond(v, m1) ? [l, fmt[0]] : chkcond(v, m2) ? [l, fmt[1]] : [l, fmt[m1 != null && m2 != null ? 2 : 1]];\n\t}\n\treturn [l, ff];\n}\nfunction SSF_format(fmt/*:string|number*/,v/*:any*/,o/*:?any*/) {\n\tif(o == null) o = {};\n\tvar sfmt = \"\";\n\tswitch(typeof fmt) {\n\t\tcase \"string\":\n\t\t\tif(fmt == \"m/d/yy\" && o.dateNF) sfmt = o.dateNF;\n\t\t\telse sfmt = fmt;\n\t\t\tbreak;\n\t\tcase \"number\":\n\t\t\tif(fmt == 14 && o.dateNF) sfmt = o.dateNF;\n\t\t\telse sfmt = (o.table != null ? (o.table/*:any*/) : table_fmt)[fmt];\n\t\t\tif(sfmt == null) sfmt = (o.table && o.table[SSF_default_map[fmt]]) || table_fmt[SSF_default_map[fmt]];\n\t\t\tif(sfmt == null) sfmt = SSF_default_str[fmt] || \"General\";\n\t\t\tbreak;\n\t}\n\tif(SSF_isgeneral(sfmt,0)) return SSF_general(v, o);\n\tif(v instanceof Date) v = datenum(v, o.date1904);\n\tvar f = choose_fmt(sfmt, v);\n\tif(SSF_isgeneral(f[1])) return SSF_general(v, o);\n\tif(v === true) v = \"TRUE\"; else if(v === false) v = \"FALSE\";\n\telse if(v === \"\" || v == null) return \"\";\n\treturn eval_fmt(f[1], v, o, f[0]);\n}\nfunction SSF_load(fmt/*:string*/, idx/*:?number*/)/*:number*/ {\n\tif(typeof idx != 'number') {\n\t\tidx = +idx || -1;\n/*::if(typeof idx != 'number') return 0x188; */\n\t\tfor(var i = 0; i < 0x0188; ++i) {\n/*::if(typeof idx != 'number') return 0x188; */\n\t\t\tif(table_fmt[i] == undefined) { if(idx < 0) idx = i; continue; }\n\t\t\tif(table_fmt[i] == fmt) { idx = i; break; }\n\t\t}\n/*::if(typeof idx != 'number') return 0x188; */\n\t\tif(idx < 0) idx = 0x187;\n\t}\n/*::if(typeof idx != 'number') return 0x188; */\n\ttable_fmt[idx] = fmt;\n\treturn idx;\n}\nfunction SSF_load_table(tbl/*:SSFTable*/)/*:void*/ {\n\tfor(var i=0; i!=0x0188; ++i)\n\t\tif(tbl[i] !== undefined) SSF_load(tbl[i], i);\n}\n\nfunction make_ssf() {\n\ttable_fmt = SSF_init_table();\n}\n\nvar SSF = {\n\tformat: SSF_format,\n\tload: SSF_load,\n\t_table: table_fmt,\n\tload_table: SSF_load_table,\n\tparse_date_code: SSF_parse_date_code,\n\tis_date: fmt_is_date,\n\tget_table: function get_table() { return SSF._table = table_fmt; }\n};\n\nvar SSFImplicit/*{[number]:string}*/ = ({\n\t\"5\": '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\t\"6\": '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\t\"7\": '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\t\"8\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t\"23\": 'General', \"24\": 'General', \"25\": 'General', \"26\": 'General',\n\t\"27\": 'm/d/yy', \"28\": 'm/d/yy', \"29\": 'm/d/yy', \"30\": 'm/d/yy', \"31\": 'm/d/yy',\n\t\"32\": 'h:mm:ss', \"33\": 'h:mm:ss', \"34\": 'h:mm:ss', \"35\": 'h:mm:ss',\n\t\"36\": 'm/d/yy',\n\t\"41\": '_(* #,##0_);_(* \\(#,##0\\);_(* \"-\"_);_(@_)',\n\t\"42\": '_(\"$\"* #,##0_);_(\"$\"* \\(#,##0\\);_(\"$\"* \"-\"_);_(@_)',\n\t\"43\": '_(* #,##0.00_);_(* \\(#,##0.00\\);_(* \"-\"??_);_(@_)',\n\t\"44\": '_(\"$\"* #,##0.00_);_(\"$\"* \\(#,##0.00\\);_(\"$\"* \"-\"??_);_(@_)',\n\t\"50\": 'm/d/yy', \"51\": 'm/d/yy', \"52\": 'm/d/yy', \"53\": 'm/d/yy', \"54\": 'm/d/yy',\n\t\"55\": 'm/d/yy', \"56\": 'm/d/yy', \"57\": 'm/d/yy', \"58\": 'm/d/yy',\n\t\"59\": '0',\n\t\"60\": '0.00',\n\t\"61\": '#,##0',\n\t\"62\": '#,##0.00',\n\t\"63\": '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\t\"64\": '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\t\"65\": '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\t\"66\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t\"67\": '0%',\n\t\"68\": '0.00%',\n\t\"69\": '# ?/?',\n\t\"70\": '# ??/??',\n\t\"71\": 'm/d/yy',\n\t\"72\": 'm/d/yy',\n\t\"73\": 'd-mmm-yy',\n\t\"74\": 'd-mmm',\n\t\"75\": 'mmm-yy',\n\t\"76\": 'h:mm',\n\t\"77\": 'h:mm:ss',\n\t\"78\": 'm/d/yy h:mm',\n\t\"79\": 'mm:ss',\n\t\"80\": '[h]:mm:ss',\n\t\"81\": 'mmss.0'\n}/*:any*/);\n\n/* dateNF parse TODO: move to SSF */\nvar dateNFregex = /[dD]+|[mM]+|[yYeE]+|[Hh]+|[Ss]+/g;\nfunction dateNF_regex(dateNF/*:string|number*/)/*:RegExp*/ {\n\tvar fmt = typeof dateNF == \"number\" ? table_fmt[dateNF] : dateNF;\n\tfmt = fmt.replace(dateNFregex, \"(\\\\d+)\");\n\tdateNFregex.lastIndex = 0;\n\treturn new RegExp(\"^\" + fmt + \"$\");\n}\nfunction dateNF_fix(str/*:string*/, dateNF/*:string*/, match/*:Array<string>*/)/*:string*/ {\n\tvar Y = -1, m = -1, d = -1, H = -1, M = -1, S = -1;\n\t(dateNF.match(dateNFregex)||[]).forEach(function(n, i) {\n\t\tvar v = parseInt(match[i+1], 10);\n\t\tswitch(n.toLowerCase().charAt(0)) {\n\t\t\tcase 'y': Y = v; break; case 'd': d = v; break;\n\t\t\tcase 'h': H = v; break; case 's': S = v; break;\n\t\t\tcase 'm': if(H >= 0) M = v; else m = v; break;\n\t\t}\n\t});\n\tdateNFregex.lastIndex = 0;\n\tif(S >= 0 && M == -1 && m >= 0) { M = m; m = -1; }\n\tvar datestr = ((\"\" + (Y>=0?Y: new Date().getFullYear())).slice(-4) + \"-\" + (\"00\" + (m>=1?m:1)).slice(-2) + \"-\" + (\"00\" + (d>=1?d:1)).slice(-2));\n\tif(datestr.length == 7) datestr = \"0\" + datestr;\n\tif(datestr.length == 8) datestr = \"20\" + datestr;\n\tvar timestr = ((\"00\" + (H>=0?H:0)).slice(-2) + \":\" + (\"00\" + (M>=0?M:0)).slice(-2) + \":\" + (\"00\" + (S>=0?S:0)).slice(-2));\n\tif(H == -1 && M == -1 && S == -1) return datestr;\n\tif(Y == -1 && m == -1 && d == -1) return timestr;\n\treturn datestr + \"T\" + timestr;\n}\n\n/* table of bad formats written by third-party tools */\nvar bad_formats = {\n\t\"d.m\": \"d\\\\.m\" // Issue #2571 Google Sheets writes invalid format 'd.m', correct format is 'd\".\"m' or 'd\\\\.m'\n};\n\nfunction SSF__load(fmt, idx) {\n\treturn SSF_load(bad_formats[fmt] || fmt, idx);\n}\n\n/*::\ndeclare var ReadShift:any;\ndeclare var CheckField:any;\ndeclare var prep_blob:any;\ndeclare var __readUInt32LE:any;\ndeclare var __readInt32LE:any;\ndeclare var __toBuffer:any;\ndeclare var __utf16le:any;\ndeclare var bconcat:any;\ndeclare var s2a:any;\ndeclare var chr0:any;\ndeclare var chr1:any;\ndeclare var has_buf:boolean;\ndeclare var new_buf:any;\ndeclare var new_raw_buf:any;\ndeclare var new_unsafe_buf:any;\ndeclare var Buffer_from:any;\n*/\n/* cfb.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*jshint eqnull:true */\n/*exported CFB */\n/*global Uint8Array:false, Uint16Array:false */\n\n/*::\ntype SectorEntry = {\n\tname?:string;\n\tnodes?:Array<number>;\n\tdata:RawBytes;\n};\ntype SectorList = {\n\t[k:string|number]:SectorEntry;\n\tname:?string;\n\tfat_addrs:Array<number>;\n\tssz:number;\n}\ntype CFBFiles = {[n:string]:CFBEntry};\n*/\n/* crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*exported CRC32 */\nvar CRC32 = /*#__PURE__*/(function() {\nvar CRC32 = {};\nCRC32.version = '1.2.0';\n/* see perf/crc32table.js */\n/*global Int32Array */\nfunction signed_crc_table()/*:any*/ {\n\tvar c = 0, table/*:Array<number>*/ = new Array(256);\n\n\tfor(var n =0; n != 256; ++n){\n\t\tc = n;\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\ttable[n] = c;\n\t}\n\n\treturn typeof Int32Array !== 'undefined' ? new Int32Array(table) : table;\n}\n\nvar T0 = signed_crc_table();\nfunction slice_by_16_tables(T) {\n\tvar c = 0, v = 0, n = 0, table/*:Array<number>*/ = typeof Int32Array !== 'undefined' ? new Int32Array(4096) : new Array(4096) ;\n\n\tfor(n = 0; n != 256; ++n) table[n] = T[n];\n\tfor(n = 0; n != 256; ++n) {\n\t\tv = T[n];\n\t\tfor(c = 256 + n; c < 4096; c += 256) v = table[c] = (v >>> 8) ^ T[v & 0xFF];\n\t}\n\tvar out = [];\n\tfor(n = 1; n != 16; ++n) out[n - 1] = typeof Int32Array !== 'undefined' && typeof table.subarray == \"function\" ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256);\n\treturn out;\n}\nvar TT = slice_by_16_tables(T0);\nvar T1 = TT[0],  T2 = TT[1],  T3 = TT[2],  T4 = TT[3],  T5 = TT[4];\nvar T6 = TT[5],  T7 = TT[6],  T8 = TT[7],  T9 = TT[8],  Ta = TT[9];\nvar Tb = TT[10], Tc = TT[11], Td = TT[12], Te = TT[13], Tf = TT[14];\nfunction crc32_bstr(bstr/*:string*/, seed/*:number*/)/*:number*/ {\n\tvar C = seed/*:: ? 0 : 0 */ ^ -1;\n\tfor(var i = 0, L = bstr.length; i < L;) C = (C>>>8) ^ T0[(C^bstr.charCodeAt(i++))&0xFF];\n\treturn ~C;\n}\n\nfunction crc32_buf(B/*:Uint8Array|Array<number>*/, seed/*:number*/)/*:number*/ {\n\tvar C = seed/*:: ? 0 : 0 */ ^ -1, L = B.length - 15, i = 0;\n\tfor(; i < L;) C =\n\t\tTf[B[i++] ^ (C & 255)] ^\n\t\tTe[B[i++] ^ ((C >> 8) & 255)] ^\n\t\tTd[B[i++] ^ ((C >> 16) & 255)] ^\n\t\tTc[B[i++] ^ (C >>> 24)] ^\n\t\tTb[B[i++]] ^ Ta[B[i++]] ^ T9[B[i++]] ^ T8[B[i++]] ^\n\t\tT7[B[i++]] ^ T6[B[i++]] ^ T5[B[i++]] ^ T4[B[i++]] ^\n\t\tT3[B[i++]] ^ T2[B[i++]] ^ T1[B[i++]] ^ T0[B[i++]];\n\tL += 15;\n\twhile(i < L) C = (C>>>8) ^ T0[(C^B[i++])&0xFF];\n\treturn ~C;\n}\n\nfunction crc32_str(str/*:string*/, seed/*:number*/)/*:number*/ {\n\tvar C = seed ^ -1;\n\tfor(var i = 0, L = str.length, c = 0, d = 0; i < L;) {\n\t\tc = str.charCodeAt(i++);\n\t\tif(c < 0x80) {\n\t\t\tC = (C>>>8) ^ T0[(C^c)&0xFF];\n\t\t} else if(c < 0x800) {\n\t\t\tC = (C>>>8) ^ T0[(C ^ (192|((c>>6)&31)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(c&63)))&0xFF];\n\t\t} else if(c >= 0xD800 && c < 0xE000) {\n\t\t\tc = (c&1023)+64; d = str.charCodeAt(i++)&1023;\n\t\t\tC = (C>>>8) ^ T0[(C ^ (240|((c>>8)&7)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((c>>2)&63)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((d>>6)&15)|((c&3)<<4)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(d&63)))&0xFF];\n\t\t} else {\n\t\t\tC = (C>>>8) ^ T0[(C ^ (224|((c>>12)&15)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((c>>6)&63)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(c&63)))&0xFF];\n\t\t}\n\t}\n\treturn ~C;\n}\nCRC32.table = T0;\nCRC32.bstr = crc32_bstr;\nCRC32.buf = crc32_buf;\nCRC32.str = crc32_str;\nreturn CRC32;\n})();\n/* [MS-CFB] v20171201 */\nvar CFB = /*#__PURE__*/(function _CFB(){\nvar exports/*:CFBModule*/ = /*::(*/{}/*:: :any)*/;\nexports.version = '1.2.2';\n/* [MS-CFB] 2.6.4 */\nfunction namecmp(l/*:string*/, r/*:string*/)/*:number*/ {\n\tvar L = l.split(\"/\"), R = r.split(\"/\");\n\tfor(var i = 0, c = 0, Z = Math.min(L.length, R.length); i < Z; ++i) {\n\t\tif((c = L[i].length - R[i].length)) return c;\n\t\tif(L[i] != R[i]) return L[i] < R[i] ? -1 : 1;\n\t}\n\treturn L.length - R.length;\n}\nfunction dirname(p/*:string*/)/*:string*/ {\n\tif(p.charAt(p.length - 1) == \"/\") return (p.slice(0,-1).indexOf(\"/\") === -1) ? p : dirname(p.slice(0, -1));\n\tvar c = p.lastIndexOf(\"/\");\n\treturn (c === -1) ? p : p.slice(0, c+1);\n}\n\nfunction filename(p/*:string*/)/*:string*/ {\n\tif(p.charAt(p.length - 1) == \"/\") return filename(p.slice(0, -1));\n\tvar c = p.lastIndexOf(\"/\");\n\treturn (c === -1) ? p : p.slice(c+1);\n}\n/* -------------------------------------------------------------------------- */\n/* DOS Date format:\n   high|YYYYYYYm.mmmddddd.HHHHHMMM.MMMSSSSS|low\n   add 1980 to stored year\n   stored second should be doubled\n*/\n\n/* write JS date to buf as a DOS date */\nfunction write_dos_date(buf/*:CFBlob*/, date/*:Date|string*/) {\n\tif(typeof date === \"string\") date = new Date(date);\n\tvar hms/*:number*/ = date.getHours();\n\thms = hms << 6 | date.getMinutes();\n\thms = hms << 5 | (date.getSeconds()>>>1);\n\tbuf.write_shift(2, hms);\n\tvar ymd/*:number*/ = (date.getFullYear() - 1980);\n\tymd = ymd << 4 | (date.getMonth()+1);\n\tymd = ymd << 5 | date.getDate();\n\tbuf.write_shift(2, ymd);\n}\n\n/* read four bytes from buf and interpret as a DOS date */\nfunction parse_dos_date(buf/*:CFBlob*/)/*:Date*/ {\n\tvar hms = buf.read_shift(2) & 0xFFFF;\n\tvar ymd = buf.read_shift(2) & 0xFFFF;\n\tvar val = new Date();\n\tvar d = ymd & 0x1F; ymd >>>= 5;\n\tvar m = ymd & 0x0F; ymd >>>= 4;\n\tval.setMilliseconds(0);\n\tval.setFullYear(ymd + 1980);\n\tval.setMonth(m-1);\n\tval.setDate(d);\n\tvar S = hms & 0x1F; hms >>>= 5;\n\tvar M = hms & 0x3F; hms >>>= 6;\n\tval.setHours(hms);\n\tval.setMinutes(M);\n\tval.setSeconds(S<<1);\n\treturn val;\n}\nfunction parse_extra_field(blob/*:CFBlob*/)/*:any*/ {\n\tprep_blob(blob, 0);\n\tvar o = /*::(*/{}/*:: :any)*/;\n\tvar flags = 0;\n\twhile(blob.l <= blob.length - 4) {\n\t\tvar type = blob.read_shift(2);\n\t\tvar sz = blob.read_shift(2), tgt = blob.l + sz;\n\t\tvar p = {};\n\t\tswitch(type) {\n\t\t\t/* UNIX-style Timestamps */\n\t\t\tcase 0x5455: {\n\t\t\t\tflags = blob.read_shift(1);\n\t\t\t\tif(flags & 1) p.mtime = blob.read_shift(4);\n\t\t\t\t/* for some reason, CD flag corresponds to LFH */\n\t\t\t\tif(sz > 5) {\n\t\t\t\t\tif(flags & 2) p.atime = blob.read_shift(4);\n\t\t\t\t\tif(flags & 4) p.ctime = blob.read_shift(4);\n\t\t\t\t}\n\t\t\t\tif(p.mtime) p.mt = new Date(p.mtime*1000);\n\t\t\t} break;\n\t\t\t/* ZIP64 Extended Information Field */\n\t\t\tcase 0x0001: {\n\t\t\t\tvar sz1 = blob.read_shift(4), sz2 = blob.read_shift(4);\n\t\t\t\tp.usz = (sz2 * Math.pow(2,32) + sz1);\n\t\t\t\tsz1 = blob.read_shift(4); sz2 = blob.read_shift(4);\n\t\t\t\tp.csz = (sz2 * Math.pow(2,32) + sz1);\n\t\t\t\t// NOTE: volume fields are skipped\n\t\t\t} break;\n\t\t}\n\t\tblob.l = tgt;\n\t\to[type] = p;\n\t}\n\treturn o;\n}\nvar fs/*:: = require('fs'); */;\nfunction get_fs() { return fs || (fs = _fs); }\nfunction parse(file/*:RawBytes*/, options/*:CFBReadOpts*/)/*:CFBContainer*/ {\nif(file[0] == 0x50 && file[1] == 0x4b) return parse_zip(file, options);\nif((file[0] | 0x20) == 0x6d && (file[1]|0x20) == 0x69) return parse_mad(file, options);\nif(file.length < 512) throw new Error(\"CFB file size \" + file.length + \" < 512\");\nvar mver = 3;\nvar ssz = 512;\nvar nmfs = 0; // number of mini FAT sectors\nvar difat_sec_cnt = 0;\nvar dir_start = 0;\nvar minifat_start = 0;\nvar difat_start = 0;\n\nvar fat_addrs/*:Array<number>*/ = []; // locations of FAT sectors\n\n/* [MS-CFB] 2.2 Compound File Header */\nvar blob/*:CFBlob*/ = /*::(*/file.slice(0,512)/*:: :any)*/;\nprep_blob(blob, 0);\n\n/* major version */\nvar mv = check_get_mver(blob);\nmver = mv[0];\nswitch(mver) {\n\tcase 3: ssz = 512; break; case 4: ssz = 4096; break;\n\tcase 0: if(mv[1] == 0) return parse_zip(file, options);\n\t/* falls through */\n\tdefault: throw new Error(\"Major Version: Expected 3 or 4 saw \" + mver);\n}\n\n/* reprocess header */\nif(ssz !== 512) { blob = /*::(*/file.slice(0,ssz)/*:: :any)*/; prep_blob(blob, 28 /* blob.l */); }\n/* Save header for final object */\nvar header/*:RawBytes*/ = file.slice(0,ssz);\n\ncheck_shifts(blob, mver);\n\n// Number of Directory Sectors\nvar dir_cnt/*:number*/ = blob.read_shift(4, 'i');\nif(mver === 3 && dir_cnt !== 0) throw new Error('# Directory Sectors: Expected 0 saw ' + dir_cnt);\n\n// Number of FAT Sectors\nblob.l += 4;\n\n// First Directory Sector Location\ndir_start = blob.read_shift(4, 'i');\n\n// Transaction Signature\nblob.l += 4;\n\n// Mini Stream Cutoff Size\nblob.chk('00100000', 'Mini Stream Cutoff Size: ');\n\n// First Mini FAT Sector Location\nminifat_start = blob.read_shift(4, 'i');\n\n// Number of Mini FAT Sectors\nnmfs = blob.read_shift(4, 'i');\n\n// First DIFAT sector location\ndifat_start = blob.read_shift(4, 'i');\n\n// Number of DIFAT Sectors\ndifat_sec_cnt = blob.read_shift(4, 'i');\n\n// Grab FAT Sector Locations\nfor(var q = -1, j = 0; j < 109; ++j) { /* 109 = (512 - blob.l)>>>2; */\n\tq = blob.read_shift(4, 'i');\n\tif(q<0) break;\n\tfat_addrs[j] = q;\n}\n\n/** Break the file up into sectors */\nvar sectors/*:Array<RawBytes>*/ = sectorify(file, ssz);\n\nsleuth_fat(difat_start, difat_sec_cnt, sectors, ssz, fat_addrs);\n\n/** Chains */\nvar sector_list/*:SectorList*/ = make_sector_list(sectors, dir_start, fat_addrs, ssz);\n\nif(dir_start < sector_list.length) sector_list[dir_start].name = \"!Directory\";\nif(nmfs > 0 && minifat_start !== ENDOFCHAIN) sector_list[minifat_start].name = \"!MiniFAT\";\nsector_list[fat_addrs[0]].name = \"!FAT\";\nsector_list.fat_addrs = fat_addrs;\nsector_list.ssz = ssz;\n\n/* [MS-CFB] 2.6.1 Compound File Directory Entry */\nvar files/*:CFBFiles*/ = {}, Paths/*:Array<string>*/ = [], FileIndex/*:CFBFileIndex*/ = [], FullPaths/*:Array<string>*/ = [];\nread_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, minifat_start);\n\nbuild_full_paths(FileIndex, FullPaths, Paths);\nPaths.shift();\n\nvar o = {\n\tFileIndex: FileIndex,\n\tFullPaths: FullPaths\n};\n\n// $FlowIgnore\nif(options && options.raw) o.raw = {header: header, sectors: sectors};\nreturn o;\n} // parse\n\n/* [MS-CFB] 2.2 Compound File Header -- read up to major version */\nfunction check_get_mver(blob/*:CFBlob*/)/*:[number, number]*/ {\n\tif(blob[blob.l] == 0x50 && blob[blob.l + 1] == 0x4b) return [0, 0];\n\t// header signature 8\n\tblob.chk(HEADER_SIGNATURE, 'Header Signature: ');\n\n\t// clsid 16\n\t//blob.chk(HEADER_CLSID, 'CLSID: ');\n\tblob.l += 16;\n\n\t// minor version 2\n\tvar mver/*:number*/ = blob.read_shift(2, 'u');\n\n\treturn [blob.read_shift(2,'u'), mver];\n}\nfunction check_shifts(blob/*:CFBlob*/, mver/*:number*/)/*:void*/ {\n\tvar shift = 0x09;\n\n\t// Byte Order\n\t//blob.chk('feff', 'Byte Order: '); // note: some writers put 0xffff\n\tblob.l += 2;\n\n\t// Sector Shift\n\tswitch((shift = blob.read_shift(2))) {\n\t\tcase 0x09: if(mver != 3) throw new Error('Sector Shift: Expected 9 saw ' + shift); break;\n\t\tcase 0x0c: if(mver != 4) throw new Error('Sector Shift: Expected 12 saw ' + shift); break;\n\t\tdefault: throw new Error('Sector Shift: Expected 9 or 12 saw ' + shift);\n\t}\n\n\t// Mini Sector Shift\n\tblob.chk('0600', 'Mini Sector Shift: ');\n\n\t// Reserved\n\tblob.chk('000000000000', 'Reserved: ');\n}\n\n/** Break the file up into sectors */\nfunction sectorify(file/*:RawBytes*/, ssz/*:number*/)/*:Array<RawBytes>*/ {\n\tvar nsectors = Math.ceil(file.length/ssz)-1;\n\tvar sectors/*:Array<RawBytes>*/ = [];\n\tfor(var i=1; i < nsectors; ++i) sectors[i-1] = file.slice(i*ssz,(i+1)*ssz);\n\tsectors[nsectors-1] = file.slice(nsectors*ssz);\n\treturn sectors;\n}\n\n/* [MS-CFB] 2.6.4 Red-Black Tree */\nfunction build_full_paths(FI/*:CFBFileIndex*/, FP/*:Array<string>*/, Paths/*:Array<string>*/)/*:void*/ {\n\tvar i = 0, L = 0, R = 0, C = 0, j = 0, pl = Paths.length;\n\tvar dad/*:Array<number>*/ = [], q/*:Array<number>*/ = [];\n\n\tfor(; i < pl; ++i) { dad[i]=q[i]=i; FP[i]=Paths[i]; }\n\n\tfor(; j < q.length; ++j) {\n\t\ti = q[j];\n\t\tL = FI[i].L; R = FI[i].R; C = FI[i].C;\n\t\tif(dad[i] === i) {\n\t\t\tif(L !== -1 /*NOSTREAM*/ && dad[L] !== L) dad[i] = dad[L];\n\t\t\tif(R !== -1 && dad[R] !== R) dad[i] = dad[R];\n\t\t}\n\t\tif(C !== -1 /*NOSTREAM*/) dad[C] = i;\n\t\tif(L !== -1 && i != dad[i]) { dad[L] = dad[i]; if(q.lastIndexOf(L) < j) q.push(L); }\n\t\tif(R !== -1 && i != dad[i]) { dad[R] = dad[i]; if(q.lastIndexOf(R) < j) q.push(R); }\n\t}\n\tfor(i=1; i < pl; ++i) if(dad[i] === i) {\n\t\tif(R !== -1 /*NOSTREAM*/ && dad[R] !== R) dad[i] = dad[R];\n\t\telse if(L !== -1 && dad[L] !== L) dad[i] = dad[L];\n\t}\n\n\tfor(i=1; i < pl; ++i) {\n\t\tif(FI[i].type === 0 /* unknown */) continue;\n\t\tj = i;\n\t\tif(j != dad[j]) do {\n\t\t\tj = dad[j];\n\t\t\tFP[i] = FP[j] + \"/\" + FP[i];\n\t\t} while (j !== 0 && -1 !== dad[j] && j != dad[j]);\n\t\tdad[i] = -1;\n\t}\n\n\tFP[0] += \"/\";\n\tfor(i=1; i < pl; ++i) {\n\t\tif(FI[i].type !== 2 /* stream */) FP[i] += \"/\";\n\t}\n}\n\nfunction get_mfat_entry(entry/*:CFBEntry*/, payload/*:RawBytes*/, mini/*:?RawBytes*/)/*:CFBlob*/ {\n\tvar start = entry.start, size = entry.size;\n\t//return (payload.slice(start*MSSZ, start*MSSZ + size)/*:any*/);\n\tvar o = [];\n\tvar idx = start;\n\twhile(mini && size > 0 && idx >= 0) {\n\t\to.push(payload.slice(idx * MSSZ, idx * MSSZ + MSSZ));\n\t\tsize -= MSSZ;\n\t\tidx = __readInt32LE(mini, idx * 4);\n\t}\n\tif(o.length === 0) return (new_buf(0)/*:any*/);\n\treturn (bconcat(o).slice(0, entry.size)/*:any*/);\n}\n\n/** Chase down the rest of the DIFAT chain to build a comprehensive list\n    DIFAT chains by storing the next sector number as the last 32 bits */\nfunction sleuth_fat(idx/*:number*/, cnt/*:number*/, sectors/*:Array<RawBytes>*/, ssz/*:number*/, fat_addrs)/*:void*/ {\n\tvar q/*:number*/ = ENDOFCHAIN;\n\tif(idx === ENDOFCHAIN) {\n\t\tif(cnt !== 0) throw new Error(\"DIFAT chain shorter than expected\");\n\t} else if(idx !== -1 /*FREESECT*/) {\n\t\tvar sector = sectors[idx], m = (ssz>>>2)-1;\n\t\tif(!sector) return;\n\t\tfor(var i = 0; i < m; ++i) {\n\t\t\tif((q = __readInt32LE(sector,i*4)) === ENDOFCHAIN) break;\n\t\t\tfat_addrs.push(q);\n\t\t}\n\t\tif(cnt >= 1) sleuth_fat(__readInt32LE(sector,ssz-4),cnt - 1, sectors, ssz, fat_addrs);\n\t}\n}\n\n/** Follow the linked list of sectors for a given starting point */\nfunction get_sector_list(sectors/*:Array<RawBytes>*/, start/*:number*/, fat_addrs/*:Array<number>*/, ssz/*:number*/, chkd/*:?Array<boolean>*/)/*:SectorEntry*/ {\n\tvar buf/*:Array<number>*/ = [], buf_chain/*:Array<any>*/ = [];\n\tif(!chkd) chkd = [];\n\tvar modulus = ssz - 1, j = 0, jj = 0;\n\tfor(j=start; j>=0;) {\n\t\tchkd[j] = true;\n\t\tbuf[buf.length] = j;\n\t\tbuf_chain.push(sectors[j]);\n\t\tvar addr = fat_addrs[Math.floor(j*4/ssz)];\n\t\tjj = ((j*4) & modulus);\n\t\tif(ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \"+ssz);\n\t\tif(!sectors[addr]) break;\n\t\tj = __readInt32LE(sectors[addr], jj);\n\t}\n\treturn {nodes: buf, data:__toBuffer([buf_chain])};\n}\n\n/** Chase down the sector linked lists */\nfunction make_sector_list(sectors/*:Array<RawBytes>*/, dir_start/*:number*/, fat_addrs/*:Array<number>*/, ssz/*:number*/)/*:SectorList*/ {\n\tvar sl = sectors.length, sector_list/*:SectorList*/ = ([]/*:any*/);\n\tvar chkd/*:Array<boolean>*/ = [], buf/*:Array<number>*/ = [], buf_chain/*:Array<RawBytes>*/ = [];\n\tvar modulus = ssz - 1, i=0, j=0, k=0, jj=0;\n\tfor(i=0; i < sl; ++i) {\n\t\tbuf = ([]/*:Array<number>*/);\n\t\tk = (i + dir_start); if(k >= sl) k-=sl;\n\t\tif(chkd[k]) continue;\n\t\tbuf_chain = [];\n\t\tvar seen = [];\n\t\tfor(j=k; j>=0;) {\n\t\t\tseen[j] = true;\n\t\t\tchkd[j] = true;\n\t\t\tbuf[buf.length] = j;\n\t\t\tbuf_chain.push(sectors[j]);\n\t\t\tvar addr/*:number*/ = fat_addrs[Math.floor(j*4/ssz)];\n\t\t\tjj = ((j*4) & modulus);\n\t\t\tif(ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \"+ssz);\n\t\t\tif(!sectors[addr]) break;\n\t\t\tj = __readInt32LE(sectors[addr], jj);\n\t\t\tif(seen[j]) break;\n\t\t}\n\t\tsector_list[k] = ({nodes: buf, data:__toBuffer([buf_chain])}/*:SectorEntry*/);\n\t}\n\treturn sector_list;\n}\n\n/* [MS-CFB] 2.6.1 Compound File Directory Entry */\nfunction read_directory(dir_start/*:number*/, sector_list/*:SectorList*/, sectors/*:Array<RawBytes>*/, Paths/*:Array<string>*/, nmfs, files, FileIndex, mini) {\n\tvar minifat_store = 0, pl = (Paths.length?2:0);\n\tvar sector = sector_list[dir_start].data;\n\tvar i = 0, namelen = 0, name;\n\tfor(; i < sector.length; i+= 128) {\n\t\tvar blob/*:CFBlob*/ = /*::(*/sector.slice(i, i+128)/*:: :any)*/;\n\t\tprep_blob(blob, 64);\n\t\tnamelen = blob.read_shift(2);\n\t\tname = __utf16le(blob,0,namelen-pl);\n\t\tPaths.push(name);\n\t\tvar o/*:CFBEntry*/ = ({\n\t\t\tname:  name,\n\t\t\ttype:  blob.read_shift(1),\n\t\t\tcolor: blob.read_shift(1),\n\t\t\tL:     blob.read_shift(4, 'i'),\n\t\t\tR:     blob.read_shift(4, 'i'),\n\t\t\tC:     blob.read_shift(4, 'i'),\n\t\t\tclsid: blob.read_shift(16),\n\t\t\tstate: blob.read_shift(4, 'i'),\n\t\t\tstart: 0,\n\t\t\tsize: 0\n\t\t});\n\t\tvar ctime/*:number*/ = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n\t\tif(ctime !== 0) o.ct = read_date(blob, blob.l-8);\n\t\tvar mtime/*:number*/ = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n\t\tif(mtime !== 0) o.mt = read_date(blob, blob.l-8);\n\t\to.start = blob.read_shift(4, 'i');\n\t\to.size = blob.read_shift(4, 'i');\n\t\tif(o.size < 0 && o.start < 0) { o.size = o.type = 0; o.start = ENDOFCHAIN; o.name = \"\"; }\n\t\tif(o.type === 5) { /* root */\n\t\t\tminifat_store = o.start;\n\t\t\tif(nmfs > 0 && minifat_store !== ENDOFCHAIN) sector_list[minifat_store].name = \"!StreamData\";\n\t\t\t/*minifat_size = o.size;*/\n\t\t} else if(o.size >= 4096 /* MSCSZ */) {\n\t\t\to.storage = 'fat';\n\t\t\tif(sector_list[o.start] === undefined) sector_list[o.start] = get_sector_list(sectors, o.start, sector_list.fat_addrs, sector_list.ssz);\n\t\t\tsector_list[o.start].name = o.name;\n\t\t\to.content = (sector_list[o.start].data.slice(0,o.size)/*:any*/);\n\t\t} else {\n\t\t\to.storage = 'minifat';\n\t\t\tif(o.size < 0) o.size = 0;\n\t\t\telse if(minifat_store !== ENDOFCHAIN && o.start !== ENDOFCHAIN && sector_list[minifat_store]) {\n\t\t\t\to.content = get_mfat_entry(o, sector_list[minifat_store].data, (sector_list[mini]||{}).data);\n\t\t\t}\n\t\t}\n\t\tif(o.content) prep_blob(o.content, 0);\n\t\tfiles[name] = o;\n\t\tFileIndex.push(o);\n\t}\n}\n\nfunction read_date(blob/*:RawBytes|CFBlob*/, offset/*:number*/)/*:Date*/ {\n\treturn new Date(( ( (__readUInt32LE(blob,offset+4)/1e7)*Math.pow(2,32)+__readUInt32LE(blob,offset)/1e7 ) - 11644473600)*1000);\n}\n\nfunction read_file(filename/*:string*/, options/*:CFBReadOpts*/) {\n\tget_fs();\n\treturn parse(fs.readFileSync(filename), options);\n}\n\nfunction read(blob/*:RawBytes|string*/, options/*:CFBReadOpts*/) {\n\tvar type = options && options.type;\n\tif(!type) {\n\t\tif(has_buf && Buffer.isBuffer(blob)) type = \"buffer\";\n\t}\n\tswitch(type || \"base64\") {\n\t\tcase \"file\": /*:: if(typeof blob !== 'string') throw \"Must pass a filename when type='file'\"; */return read_file(blob, options);\n\t\tcase \"base64\": /*:: if(typeof blob !== 'string') throw \"Must pass a base64-encoded binary string when type='file'\"; */return parse(s2a(Base64_decode(blob)), options);\n\t\tcase \"binary\": /*:: if(typeof blob !== 'string') throw \"Must pass a binary string when type='file'\"; */return parse(s2a(blob), options);\n\t}\n\treturn parse(/*::typeof blob == 'string' ? new Buffer(blob, 'utf-8') : */blob, options);\n}\n\nfunction init_cfb(cfb/*:CFBContainer*/, opts/*:?any*/)/*:void*/ {\n\tvar o = opts || {}, root = o.root || \"Root Entry\";\n\tif(!cfb.FullPaths) cfb.FullPaths = [];\n\tif(!cfb.FileIndex) cfb.FileIndex = [];\n\tif(cfb.FullPaths.length !== cfb.FileIndex.length) throw new Error(\"inconsistent CFB structure\");\n\tif(cfb.FullPaths.length === 0) {\n\t\tcfb.FullPaths[0] = root + \"/\";\n\t\tcfb.FileIndex[0] = ({ name: root, type: 5 }/*:any*/);\n\t}\n\tif(o.CLSID) cfb.FileIndex[0].clsid = o.CLSID;\n\tseed_cfb(cfb);\n}\nfunction seed_cfb(cfb/*:CFBContainer*/)/*:void*/ {\n\tvar nm = \"\\u0001Sh33tJ5\";\n\tif(CFB.find(cfb, \"/\" + nm)) return;\n\tvar p = new_buf(4); p[0] = 55; p[1] = p[3] = 50; p[2] = 54;\n\tcfb.FileIndex.push(({ name: nm, type: 2, content:p, size:4, L:69, R:69, C:69 }/*:any*/));\n\tcfb.FullPaths.push(cfb.FullPaths[0] + nm);\n\trebuild_cfb(cfb);\n}\nfunction rebuild_cfb(cfb/*:CFBContainer*/, f/*:?boolean*/)/*:void*/ {\n\tinit_cfb(cfb);\n\tvar gc = false, s = false;\n\tfor(var i = cfb.FullPaths.length - 1; i >= 0; --i) {\n\t\tvar _file = cfb.FileIndex[i];\n\t\tswitch(_file.type) {\n\t\t\tcase 0:\n\t\t\t\tif(s) gc = true;\n\t\t\t\telse { cfb.FileIndex.pop(); cfb.FullPaths.pop(); }\n\t\t\t\tbreak;\n\t\t\tcase 1: case 2: case 5:\n\t\t\t\ts = true;\n\t\t\t\tif(isNaN(_file.R * _file.L * _file.C)) gc = true;\n\t\t\t\tif(_file.R > -1 && _file.L > -1 && _file.R == _file.L) gc = true;\n\t\t\t\tbreak;\n\t\t\tdefault: gc = true; break;\n\t\t}\n\t}\n\tif(!gc && !f) return;\n\n\tvar now = new Date(1987, 1, 19), j = 0;\n\t// Track which names exist\n\tvar fullPaths = Object.create ? Object.create(null) : {};\n\tvar data/*:Array<[string, CFBEntry]>*/ = [];\n\tfor(i = 0; i < cfb.FullPaths.length; ++i) {\n\t\tfullPaths[cfb.FullPaths[i]] = true;\n\t\tif(cfb.FileIndex[i].type === 0) continue;\n\t\tdata.push([cfb.FullPaths[i], cfb.FileIndex[i]]);\n\t}\n\tfor(i = 0; i < data.length; ++i) {\n\t\tvar dad = dirname(data[i][0]);\n\t\ts = fullPaths[dad];\n\t\twhile(!s) {\n\t\t\twhile(dirname(dad) && !fullPaths[dirname(dad)]) dad = dirname(dad);\n\n\t\t\tdata.push([dad, ({\n\t\t\t\tname: filename(dad).replace(\"/\",\"\"),\n\t\t\t\ttype: 1,\n\t\t\t\tclsid: HEADER_CLSID,\n\t\t\t\tct: now, mt: now,\n\t\t\t\tcontent: null\n\t\t\t}/*:any*/)]);\n\n\t\t\t// Add name to set\n\t\t\tfullPaths[dad] = true;\n\n\t\t\tdad = dirname(data[i][0]);\n\t\t\ts = fullPaths[dad];\n\t\t}\n\t}\n\n\tdata.sort(function(x,y) { return namecmp(x[0], y[0]); });\n\tcfb.FullPaths = []; cfb.FileIndex = [];\n\tfor(i = 0; i < data.length; ++i) { cfb.FullPaths[i] = data[i][0]; cfb.FileIndex[i] = data[i][1]; }\n\tfor(i = 0; i < data.length; ++i) {\n\t\tvar elt = cfb.FileIndex[i];\n\t\tvar nm = cfb.FullPaths[i];\n\n\t\telt.name =  filename(nm).replace(\"/\",\"\");\n\t\telt.L = elt.R = elt.C = -(elt.color = 1);\n\t\telt.size = elt.content ? elt.content.length : 0;\n\t\telt.start = 0;\n\t\telt.clsid = (elt.clsid || HEADER_CLSID);\n\t\tif(i === 0) {\n\t\t\telt.C = data.length > 1 ? 1 : -1;\n\t\t\telt.size = 0;\n\t\t\telt.type = 5;\n\t\t} else if(nm.slice(-1) == \"/\") {\n\t\t\tfor(j=i+1;j < data.length; ++j) if(dirname(cfb.FullPaths[j])==nm) break;\n\t\t\telt.C = j >= data.length ? -1 : j;\n\t\t\tfor(j=i+1;j < data.length; ++j) if(dirname(cfb.FullPaths[j])==dirname(nm)) break;\n\t\t\telt.R = j >= data.length ? -1 : j;\n\t\t\telt.type = 1;\n\t\t} else {\n\t\t\tif(dirname(cfb.FullPaths[i+1]||\"\") == dirname(nm)) elt.R = i + 1;\n\t\t\telt.type = 2;\n\t\t}\n\t}\n\n}\n\nfunction _write(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes|string*/ {\n\tvar _opts = options || {};\n\t/* MAD is order-sensitive, skip rebuild and sort */\n\tif(_opts.fileType == 'mad') return write_mad(cfb, _opts);\n\trebuild_cfb(cfb);\n\tswitch(_opts.fileType) {\n\t\tcase 'zip': return write_zip(cfb, _opts);\n\t\t//case 'mad': return write_mad(cfb, _opts);\n\t}\n\tvar L = (function(cfb/*:CFBContainer*/)/*:Array<number>*/{\n\t\tvar mini_size = 0, fat_size = 0;\n\t\tfor(var i = 0; i < cfb.FileIndex.length; ++i) {\n\t\t\tvar file = cfb.FileIndex[i];\n\t\t\tif(!file.content) continue;\n\t\t\tvar flen = file.content.length;\n\t\t\tif(flen > 0){\n\t\t\t\tif(flen < 0x1000) mini_size += (flen + 0x3F) >> 6;\n\t\t\t\telse fat_size += (flen + 0x01FF) >> 9;\n\t\t\t}\n\t\t}\n\t\tvar dir_cnt = (cfb.FullPaths.length +3) >> 2;\n\t\tvar mini_cnt = (mini_size + 7) >> 3;\n\t\tvar mfat_cnt = (mini_size + 0x7F) >> 7;\n\t\tvar fat_base = mini_cnt + fat_size + dir_cnt + mfat_cnt;\n\t\tvar fat_cnt = (fat_base + 0x7F) >> 7;\n\t\tvar difat_cnt = fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt-109)/0x7F);\n\t\twhile(((fat_base + fat_cnt + difat_cnt + 0x7F) >> 7) > fat_cnt) difat_cnt = ++fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt-109)/0x7F);\n\t\tvar L =  [1, difat_cnt, fat_cnt, mfat_cnt, dir_cnt, fat_size, mini_size, 0];\n\t\tcfb.FileIndex[0].size = mini_size << 6;\n\t\tL[7] = (cfb.FileIndex[0].start=L[0]+L[1]+L[2]+L[3]+L[4]+L[5])+((L[6]+7) >> 3);\n\t\treturn L;\n\t})(cfb);\n\tvar o = new_buf(L[7] << 9);\n\tvar i = 0, T = 0;\n\t{\n\t\tfor(i = 0; i < 8; ++i) o.write_shift(1, HEADER_SIG[i]);\n\t\tfor(i = 0; i < 8; ++i) o.write_shift(2, 0);\n\t\to.write_shift(2, 0x003E);\n\t\to.write_shift(2, 0x0003);\n\t\to.write_shift(2, 0xFFFE);\n\t\to.write_shift(2, 0x0009);\n\t\to.write_shift(2, 0x0006);\n\t\tfor(i = 0; i < 3; ++i) o.write_shift(2, 0);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, L[2]);\n\t\to.write_shift(4, L[0] + L[1] + L[2] + L[3] - 1);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, 1<<12);\n\t\to.write_shift(4, L[3] ? L[0] + L[1] + L[2] - 1: ENDOFCHAIN);\n\t\to.write_shift(4, L[3]);\n\t\to.write_shift(-4, L[1] ? L[0] - 1: ENDOFCHAIN);\n\t\to.write_shift(4, L[1]);\n\t\tfor(i = 0; i < 109; ++i) o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n\t}\n\tif(L[1]) {\n\t\tfor(T = 0; T < L[1]; ++T) {\n\t\t\tfor(; i < 236 + T * 127; ++i) o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n\t\t\to.write_shift(-4, T === L[1] - 1 ? ENDOFCHAIN : T + 1);\n\t\t}\n\t}\n\tvar chainit = function(w/*:number*/)/*:void*/ {\n\t\tfor(T += w; i<T-1; ++i) o.write_shift(-4, i+1);\n\t\tif(w) { ++i; o.write_shift(-4, ENDOFCHAIN); }\n\t};\n\tT = i = 0;\n\tfor(T+=L[1]; i<T; ++i) o.write_shift(-4, consts.DIFSECT);\n\tfor(T+=L[2]; i<T; ++i) o.write_shift(-4, consts.FATSECT);\n\tchainit(L[3]);\n\tchainit(L[4]);\n\tvar j/*:number*/ = 0, flen/*:number*/ = 0;\n\tvar file/*:CFBEntry*/ = cfb.FileIndex[0];\n\tfor(; j < cfb.FileIndex.length; ++j) {\n\t\tfile = cfb.FileIndex[j];\n\t\tif(!file.content) continue;\n\t\t/*:: if(file.content == null) throw new Error(\"unreachable\"); */\n\t\tflen = file.content.length;\n\t\tif(flen < 0x1000) continue;\n\t\tfile.start = T;\n\t\tchainit((flen + 0x01FF) >> 9);\n\t}\n\tchainit((L[6] + 7) >> 3);\n\twhile(o.l & 0x1FF) o.write_shift(-4, consts.ENDOFCHAIN);\n\tT = i = 0;\n\tfor(j = 0; j < cfb.FileIndex.length; ++j) {\n\t\tfile = cfb.FileIndex[j];\n\t\tif(!file.content) continue;\n\t\t/*:: if(file.content == null) throw new Error(\"unreachable\"); */\n\t\tflen = file.content.length;\n\t\tif(!flen || flen >= 0x1000) continue;\n\t\tfile.start = T;\n\t\tchainit((flen + 0x3F) >> 6);\n\t}\n\twhile(o.l & 0x1FF) o.write_shift(-4, consts.ENDOFCHAIN);\n\tfor(i = 0; i < L[4]<<2; ++i) {\n\t\tvar nm = cfb.FullPaths[i];\n\t\tif(!nm || nm.length === 0) {\n\t\t\tfor(j = 0; j < 17; ++j) o.write_shift(4, 0);\n\t\t\tfor(j = 0; j < 3; ++j) o.write_shift(4, -1);\n\t\t\tfor(j = 0; j < 12; ++j) o.write_shift(4, 0);\n\t\t\tcontinue;\n\t\t}\n\t\tfile = cfb.FileIndex[i];\n\t\tif(i === 0) file.start = file.size ? file.start - 1 : ENDOFCHAIN;\n\t\tvar _nm/*:string*/ = (i === 0 && _opts.root) || file.name;\n\t\tif(_nm.length > 31) {\n\t\t\tconsole.error(\"Name \" + _nm + \" will be truncated to \" + _nm.slice(0,31));\n\t\t\t_nm = _nm.slice(0, 31);\n\t\t}\n\t\tflen = 2*(_nm.length+1);\n\t\to.write_shift(64, _nm, \"utf16le\");\n\t\to.write_shift(2, flen);\n\t\to.write_shift(1, file.type);\n\t\to.write_shift(1, file.color);\n\t\to.write_shift(-4, file.L);\n\t\to.write_shift(-4, file.R);\n\t\to.write_shift(-4, file.C);\n\t\tif(!file.clsid) for(j = 0; j < 4; ++j) o.write_shift(4, 0);\n\t\telse o.write_shift(16, file.clsid, \"hex\");\n\t\to.write_shift(4, file.state || 0);\n\t\to.write_shift(4, 0); o.write_shift(4, 0);\n\t\to.write_shift(4, 0); o.write_shift(4, 0);\n\t\to.write_shift(4, file.start);\n\t\to.write_shift(4, file.size); o.write_shift(4, 0);\n\t}\n\tfor(i = 1; i < cfb.FileIndex.length; ++i) {\n\t\tfile = cfb.FileIndex[i];\n\t\t/*:: if(!file.content) throw new Error(\"unreachable\"); */\n\t\tif(file.size >= 0x1000) {\n\t\t\to.l = (file.start+1) << 9;\n\t\t\tif (has_buf && Buffer.isBuffer(file.content)) {\n\t\t\t\tfile.content.copy(o, o.l, 0, file.size);\n\t\t\t\t// o is a 0-filled Buffer so just set next offset\n\t\t\t\to.l += (file.size + 511) & -512;\n\t\t\t} else {\n\t\t\t\tfor(j = 0; j < file.size; ++j) o.write_shift(1, file.content[j]);\n\t\t\t\tfor(; j & 0x1FF; ++j) o.write_shift(1, 0);\n\t\t\t}\n\t\t}\n\t}\n\tfor(i = 1; i < cfb.FileIndex.length; ++i) {\n\t\tfile = cfb.FileIndex[i];\n\t\t/*:: if(!file.content) throw new Error(\"unreachable\"); */\n\t\tif(file.size > 0 && file.size < 0x1000) {\n\t\t\tif (has_buf && Buffer.isBuffer(file.content)) {\n\t\t\t\tfile.content.copy(o, o.l, 0, file.size);\n\t\t\t\t// o is a 0-filled Buffer so just set next offset\n\t\t\t\to.l += (file.size + 63) & -64;\n\t\t\t} else {\n\t\t\t\tfor(j = 0; j < file.size; ++j) o.write_shift(1, file.content[j]);\n\t\t\t\tfor(; j & 0x3F; ++j) o.write_shift(1, 0);\n\t\t\t}\n\t\t}\n\t}\n\tif (has_buf) {\n\t\to.l = o.length;\n\t} else {\n\t\t// When using Buffer, already 0-filled\n\t\twhile(o.l < o.length) o.write_shift(1, 0);\n\t}\n\treturn o;\n}\n/* [MS-CFB] 2.6.4 (Unicode 3.0.1 case conversion) */\nfunction find(cfb/*:CFBContainer*/, path/*:string*/)/*:?CFBEntry*/ {\n\tvar UCFullPaths/*:Array<string>*/ = cfb.FullPaths.map(function(x) { return x.toUpperCase(); });\n\tvar UCPaths/*:Array<string>*/ = UCFullPaths.map(function(x) { var y = x.split(\"/\"); return y[y.length - (x.slice(-1) == \"/\" ? 2 : 1)]; });\n\tvar k/*:boolean*/ = false;\n\tif(path.charCodeAt(0) === 47 /* \"/\" */) { k = true; path = UCFullPaths[0].slice(0, -1) + path; }\n\telse k = path.indexOf(\"/\") !== -1;\n\tvar UCPath/*:string*/ = path.toUpperCase();\n\tvar w/*:number*/ = k === true ? UCFullPaths.indexOf(UCPath) : UCPaths.indexOf(UCPath);\n\tif(w !== -1) return cfb.FileIndex[w];\n\n\tvar m = !UCPath.match(chr1);\n\tUCPath = UCPath.replace(chr0,'');\n\tif(m) UCPath = UCPath.replace(chr1,'!');\n\tfor(w = 0; w < UCFullPaths.length; ++w) {\n\t\tif((m ? UCFullPaths[w].replace(chr1,'!') : UCFullPaths[w]).replace(chr0,'') == UCPath) return cfb.FileIndex[w];\n\t\tif((m ? UCPaths[w].replace(chr1,'!') : UCPaths[w]).replace(chr0,'') == UCPath) return cfb.FileIndex[w];\n\t}\n\treturn null;\n}\n/** CFB Constants */\nvar MSSZ = 64; /* Mini Sector Size = 1<<6 */\n//var MSCSZ = 4096; /* Mini Stream Cutoff Size */\n/* 2.1 Compound File Sector Numbers and Types */\nvar ENDOFCHAIN = -2;\n/* 2.2 Compound File Header */\nvar HEADER_SIGNATURE = 'd0cf11e0a1b11ae1';\nvar HEADER_SIG = [0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1];\nvar HEADER_CLSID = '00000000000000000000000000000000';\nvar consts = {\n\t/* 2.1 Compund File Sector Numbers and Types */\n\tMAXREGSECT: -6,\n\tDIFSECT: -4,\n\tFATSECT: -3,\n\tENDOFCHAIN: ENDOFCHAIN,\n\tFREESECT: -1,\n\t/* 2.2 Compound File Header */\n\tHEADER_SIGNATURE: HEADER_SIGNATURE,\n\tHEADER_MINOR_VERSION: '3e00',\n\tMAXREGSID: -6,\n\tNOSTREAM: -1,\n\tHEADER_CLSID: HEADER_CLSID,\n\t/* 2.6.1 Compound File Directory Entry */\n\tEntryTypes: ['unknown','storage','stream','lockbytes','property','root']\n};\n\nfunction write_file(cfb/*:CFBContainer*/, filename/*:string*/, options/*:CFBWriteOpts*/)/*:void*/ {\n\tget_fs();\n\tvar o = _write(cfb, options);\n\t/*:: if(typeof Buffer == 'undefined' || !Buffer.isBuffer(o) || !(o instanceof Buffer)) throw new Error(\"unreachable\"); */\n\tfs.writeFileSync(filename, o);\n}\n\nfunction a2s(o/*:RawBytes*/)/*:string*/ {\n\tvar out = new Array(o.length);\n\tfor(var i = 0; i < o.length; ++i) out[i] = String.fromCharCode(o[i]);\n\treturn out.join(\"\");\n}\n\nfunction write(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes|string*/ {\n\tvar o = _write(cfb, options);\n\tswitch(options && options.type || \"buffer\") {\n\t\tcase \"file\": get_fs(); fs.writeFileSync(options.filename, (o/*:any*/)); return o;\n\t\tcase \"binary\": return typeof o == \"string\" ? o : a2s(o);\n\t\tcase \"base64\": return Base64_encode(typeof o == \"string\" ? o : a2s(o));\n\t\tcase \"buffer\": if(has_buf) return Buffer.isBuffer(o) ? o : Buffer_from(o);\n\t\t\t/* falls through */\n\t\tcase \"array\": return typeof o == \"string\" ? s2a(o) : o;\n\t}\n\treturn o;\n}\n/* node < 8.1 zlib does not expose bytesRead, so default to pure JS */\nvar _zlib;\nfunction use_zlib(zlib) { try {\n\tvar InflateRaw = zlib.InflateRaw;\n\tvar InflRaw = new InflateRaw();\n\tInflRaw._processChunk(new Uint8Array([3, 0]), InflRaw._finishFlushFlag);\n\tif(InflRaw.bytesRead) _zlib = zlib;\n\telse throw new Error(\"zlib does not expose bytesRead\");\n} catch(e) {console.error(\"cannot use native zlib: \" + (e.message || e)); } }\n\nfunction _inflateRawSync(payload, usz) {\n\tif(!_zlib) return _inflate(payload, usz);\n\tvar InflateRaw = _zlib.InflateRaw;\n\tvar InflRaw = new InflateRaw();\n\tvar out = InflRaw._processChunk(payload.slice(payload.l), InflRaw._finishFlushFlag);\n\tpayload.l += InflRaw.bytesRead;\n\treturn out;\n}\n\nfunction _deflateRawSync(payload) {\n\treturn _zlib ? _zlib.deflateRawSync(payload) : _deflate(payload);\n}\nvar CLEN_ORDER = [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n/*  LEN_ID = [ 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285 ]; */\nvar LEN_LN = [   3,   4,   5,   6,   7,   8,   9,  10,  11,  13 , 15,  17,  19,  23,  27,  31,  35,  43,  51,  59,  67,  83,  99, 115, 131, 163, 195, 227, 258 ];\n\n/*  DST_ID = [  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13,  14,  15,  16,  17,  18,  19,   20,   21,   22,   23,   24,   25,   26,    27,    28,    29 ]; */\nvar DST_LN = [  1,  2,  3,  4,  5,  7,  9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577 ];\n\nfunction bit_swap_8(n) { var t = (((((n<<1)|(n<<11)) & 0x22110) | (((n<<5)|(n<<15)) & 0x88440))); return ((t>>16) | (t>>8) |t)&0xFF; }\n\nvar use_typed_arrays = typeof Uint8Array !== 'undefined';\n\nvar bitswap8 = use_typed_arrays ? new Uint8Array(1<<8) : [];\nfor(var q = 0; q < (1<<8); ++q) bitswap8[q] = bit_swap_8(q);\n\nfunction bit_swap_n(n, b) {\n\tvar rev = bitswap8[n & 0xFF];\n\tif(b <= 8) return rev >>> (8-b);\n\trev = (rev << 8) | bitswap8[(n>>8)&0xFF];\n\tif(b <= 16) return rev >>> (16-b);\n\trev = (rev << 8) | bitswap8[(n>>16)&0xFF];\n\treturn rev >>> (24-b);\n}\n\n/* helpers for unaligned bit reads */\nfunction read_bits_2(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 6 ? 0 : buf[h+1]<<8))>>>w)& 0x03; }\nfunction read_bits_3(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 5 ? 0 : buf[h+1]<<8))>>>w)& 0x07; }\nfunction read_bits_4(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 4 ? 0 : buf[h+1]<<8))>>>w)& 0x0F; }\nfunction read_bits_5(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 3 ? 0 : buf[h+1]<<8))>>>w)& 0x1F; }\nfunction read_bits_7(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 1 ? 0 : buf[h+1]<<8))>>>w)& 0x7F; }\n\n/* works up to n = 3 * 8 + 1 = 25 */\nfunction read_bits_n(buf, bl, n) {\n\tvar w = (bl&7), h = (bl>>>3), f = ((1<<n)-1);\n\tvar v = buf[h] >>> w;\n\tif(n < 8 - w) return v & f;\n\tv |= buf[h+1]<<(8-w);\n\tif(n < 16 - w) return v & f;\n\tv |= buf[h+2]<<(16-w);\n\tif(n < 24 - w) return v & f;\n\tv |= buf[h+3]<<(24-w);\n\treturn v & f;\n}\n\n/* helpers for unaligned bit writes */\nfunction write_bits_3(buf, bl, v) { var w = bl & 7, h = bl >>> 3;\n\tif(w <= 5) buf[h] |= (v & 7) << w;\n\telse {\n\t\tbuf[h] |= (v << w) & 0xFF;\n\t\tbuf[h+1] = (v&7) >> (8-w);\n\t}\n\treturn bl + 3;\n}\n\nfunction write_bits_1(buf, bl, v) {\n\tvar w = bl & 7, h = bl >>> 3;\n\tv = (v&1) << w;\n\tbuf[h] |= v;\n\treturn bl + 1;\n}\nfunction write_bits_8(buf, bl, v) {\n\tvar w = bl & 7, h = bl >>> 3;\n\tv <<= w;\n\tbuf[h] |=  v & 0xFF; v >>>= 8;\n\tbuf[h+1] = v;\n\treturn bl + 8;\n}\nfunction write_bits_16(buf, bl, v) {\n\tvar w = bl & 7, h = bl >>> 3;\n\tv <<= w;\n\tbuf[h] |=  v & 0xFF; v >>>= 8;\n\tbuf[h+1] = v & 0xFF;\n\tbuf[h+2] = v >>> 8;\n\treturn bl + 16;\n}\n\n/* until ArrayBuffer#realloc is a thing, fake a realloc */\nfunction realloc(b, sz/*:number*/) {\n\tvar L = b.length, M = 2*L > sz ? 2*L : sz + 5, i = 0;\n\tif(L >= sz) return b;\n\tif(has_buf) {\n\t\tvar o = new_unsafe_buf(M);\n\t\t// $FlowIgnore\n\t\tif(b.copy) b.copy(o);\n\t\telse for(; i < b.length; ++i) o[i] = b[i];\n\t\treturn o;\n\t} else if(use_typed_arrays) {\n\t\tvar a = new Uint8Array(M);\n\t\tif(a.set) a.set(b);\n\t\telse for(; i < L; ++i) a[i] = b[i];\n\t\treturn a;\n\t}\n\tb.length = M;\n\treturn b;\n}\n\n/* zero-filled arrays for older browsers */\nfunction zero_fill_array(n) {\n\tvar o = new Array(n);\n\tfor(var i = 0; i < n; ++i) o[i] = 0;\n\treturn o;\n}\n\n/* build tree (used for literals and lengths) */\nfunction build_tree(clens, cmap, MAX/*:number*/)/*:number*/ {\n\tvar maxlen = 1, w = 0, i = 0, j = 0, ccode = 0, L = clens.length;\n\n\tvar bl_count  = use_typed_arrays ? new Uint16Array(32) : zero_fill_array(32);\n\tfor(i = 0; i < 32; ++i) bl_count[i] = 0;\n\n\tfor(i = L; i < MAX; ++i) clens[i] = 0;\n\tL = clens.length;\n\n\tvar ctree = use_typed_arrays ? new Uint16Array(L) : zero_fill_array(L); // []\n\n\t/* build code tree */\n\tfor(i = 0; i < L; ++i) {\n\t\tbl_count[(w = clens[i])]++;\n\t\tif(maxlen < w) maxlen = w;\n\t\tctree[i] = 0;\n\t}\n\tbl_count[0] = 0;\n\tfor(i = 1; i <= maxlen; ++i) bl_count[i+16] = (ccode = (ccode + bl_count[i-1])<<1);\n\tfor(i = 0; i < L; ++i) {\n\t\tccode = clens[i];\n\t\tif(ccode != 0) ctree[i] = bl_count[ccode+16]++;\n\t}\n\n\t/* cmap[maxlen + 4 bits] = (off&15) + (lit<<4) reverse mapping */\n\tvar cleni = 0;\n\tfor(i = 0; i < L; ++i) {\n\t\tcleni = clens[i];\n\t\tif(cleni != 0) {\n\t\t\tccode = bit_swap_n(ctree[i], maxlen)>>(maxlen-cleni);\n\t\t\tfor(j = (1<<(maxlen + 4 - cleni)) - 1; j>=0; --j)\n\t\t\t\tcmap[ccode|(j<<cleni)] = (cleni&15) | (i<<4);\n\t\t}\n\t}\n\treturn maxlen;\n}\n\n/* Fixed Huffman */\nvar fix_lmap = use_typed_arrays ? new Uint16Array(512) : zero_fill_array(512);\nvar fix_dmap = use_typed_arrays ? new Uint16Array(32)  : zero_fill_array(32);\nif(!use_typed_arrays) {\n\tfor(var i = 0; i < 512; ++i) fix_lmap[i] = 0;\n\tfor(i = 0; i < 32; ++i) fix_dmap[i] = 0;\n}\n(function() {\n\tvar dlens/*:Array<number>*/ = [];\n\tvar i = 0;\n\tfor(;i<32; i++) dlens.push(5);\n\tbuild_tree(dlens, fix_dmap, 32);\n\n\tvar clens/*:Array<number>*/ = [];\n\ti = 0;\n\tfor(; i<=143; i++) clens.push(8);\n\tfor(; i<=255; i++) clens.push(9);\n\tfor(; i<=279; i++) clens.push(7);\n\tfor(; i<=287; i++) clens.push(8);\n\tbuild_tree(clens, fix_lmap, 288);\n})();var _deflateRaw = /*#__PURE__*/(function _deflateRawIIFE() {\n\tvar DST_LN_RE = use_typed_arrays ? new Uint8Array(0x8000) : [];\n\tvar j = 0, k = 0;\n\tfor(; j < DST_LN.length - 1; ++j) {\n\t\tfor(; k < DST_LN[j+1]; ++k) DST_LN_RE[k] = j;\n\t}\n\tfor(;k < 32768; ++k) DST_LN_RE[k] = 29;\n\n\tvar LEN_LN_RE = use_typed_arrays ? new Uint8Array(0x103) : [];\n\tfor(j = 0, k = 0; j < LEN_LN.length - 1; ++j) {\n\t\tfor(; k < LEN_LN[j+1]; ++k) LEN_LN_RE[k] = j;\n\t}\n\n\tfunction write_stored(data, out) {\n\t\tvar boff = 0;\n\t\twhile(boff < data.length) {\n\t\t\tvar L = Math.min(0xFFFF, data.length - boff);\n\t\t\tvar h = boff + L == data.length;\n\t\t\tout.write_shift(1, +h);\n\t\t\tout.write_shift(2, L);\n\t\t\tout.write_shift(2, (~L) & 0xFFFF);\n\t\t\twhile(L-- > 0) out[out.l++] = data[boff++];\n\t\t}\n\t\treturn out.l;\n\t}\n\n\t/* Fixed Huffman */\n\tfunction write_huff_fixed(data, out) {\n\t\tvar bl = 0;\n\t\tvar boff = 0;\n\t\tvar addrs = use_typed_arrays ? new Uint16Array(0x8000) : [];\n\t\twhile(boff < data.length) {\n\t\t\tvar L = /* data.length - boff; */ Math.min(0xFFFF, data.length - boff);\n\n\t\t\t/* write a stored block for short data */\n\t\t\tif(L < 10) {\n\t\t\t\tbl = write_bits_3(out, bl, +!!(boff + L == data.length)); // jshint ignore:line\n\t\t\t\tif(bl & 7) bl += 8 - (bl & 7);\n\t\t\t\tout.l = (bl / 8) | 0;\n\t\t\t\tout.write_shift(2, L);\n\t\t\t\tout.write_shift(2, (~L) & 0xFFFF);\n\t\t\t\twhile(L-- > 0) out[out.l++] = data[boff++];\n\t\t\t\tbl = out.l * 8;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tbl = write_bits_3(out, bl, +!!(boff + L == data.length) + 2); // jshint ignore:line\n\t\t\tvar hash = 0;\n\t\t\twhile(L-- > 0) {\n\t\t\t\tvar d = data[boff];\n\t\t\t\thash = ((hash << 5) ^ d) & 0x7FFF;\n\n\t\t\t\tvar match = -1, mlen = 0;\n\n\t\t\t\tif((match = addrs[hash])) {\n\t\t\t\t\tmatch |= boff & ~0x7FFF;\n\t\t\t\t\tif(match > boff) match -= 0x8000;\n\t\t\t\t\tif(match < boff) while(data[match + mlen] == data[boff + mlen] && mlen < 250) ++mlen;\n\t\t\t\t}\n\n\t\t\t\tif(mlen > 2) {\n\t\t\t\t\t/* Copy Token  */\n\t\t\t\t\td = LEN_LN_RE[mlen];\n\t\t\t\t\tif(d <= 22) bl = write_bits_8(out, bl, bitswap8[d+1]>>1) - 1;\n\t\t\t\t\telse {\n\t\t\t\t\t\twrite_bits_8(out, bl, 3);\n\t\t\t\t\t\tbl += 5;\n\t\t\t\t\t\twrite_bits_8(out, bl, bitswap8[d-23]>>5);\n\t\t\t\t\t\tbl += 3;\n\t\t\t\t\t}\n\t\t\t\t\tvar len_eb = (d < 8) ? 0 : ((d - 4)>>2);\n\t\t\t\t\tif(len_eb > 0) {\n\t\t\t\t\t\twrite_bits_16(out, bl, mlen - LEN_LN[d]);\n\t\t\t\t\t\tbl += len_eb;\n\t\t\t\t\t}\n\n\t\t\t\t\td = DST_LN_RE[boff - match];\n\t\t\t\t\tbl = write_bits_8(out, bl, bitswap8[d]>>3);\n\t\t\t\t\tbl -= 3;\n\n\t\t\t\t\tvar dst_eb = d < 4 ? 0 : (d-2)>>1;\n\t\t\t\t\tif(dst_eb > 0) {\n\t\t\t\t\t\twrite_bits_16(out, bl, boff - match - DST_LN[d]);\n\t\t\t\t\t\tbl += dst_eb;\n\t\t\t\t\t}\n\t\t\t\t\tfor(var q = 0; q < mlen; ++q) {\n\t\t\t\t\t\taddrs[hash] = boff & 0x7FFF;\n\t\t\t\t\t\thash = ((hash << 5) ^ data[boff]) & 0x7FFF;\n\t\t\t\t\t\t++boff;\n\t\t\t\t\t}\n\t\t\t\t\tL-= mlen - 1;\n\t\t\t\t} else {\n\t\t\t\t\t/* Literal Token */\n\t\t\t\t\tif(d <= 143) d = d + 48;\n\t\t\t\t\telse bl = write_bits_1(out, bl, 1);\n\t\t\t\t\tbl = write_bits_8(out, bl, bitswap8[d]);\n\t\t\t\t\taddrs[hash] = boff & 0x7FFF;\n\t\t\t\t\t++boff;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbl = write_bits_8(out, bl, 0) - 1;\n\t\t}\n\t\tout.l = ((bl + 7)/8)|0;\n\t\treturn out.l;\n\t}\n\treturn function _deflateRaw(data, out) {\n\t\tif(data.length < 8) return write_stored(data, out);\n\t\treturn write_huff_fixed(data, out);\n\t};\n})();\n\nfunction _deflate(data) {\n\tvar buf = new_buf(50+Math.floor(data.length*1.1));\n\tvar off = _deflateRaw(data, buf);\n\treturn buf.slice(0, off);\n}\n/* modified inflate function also moves original read head */\n\nvar dyn_lmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);\nvar dyn_dmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);\nvar dyn_cmap = use_typed_arrays ? new Uint16Array(128)   : zero_fill_array(128);\nvar dyn_len_1 = 1, dyn_len_2 = 1;\n\n/* 5.5.3 Expanding Huffman Codes */\nfunction dyn(data, boff/*:number*/) {\n\t/* nomenclature from RFC1951 refers to bit values; these are offset by the implicit constant */\n\tvar _HLIT = read_bits_5(data, boff) + 257; boff += 5;\n\tvar _HDIST = read_bits_5(data, boff) + 1; boff += 5;\n\tvar _HCLEN = read_bits_4(data, boff) + 4; boff += 4;\n\tvar w = 0;\n\n\t/* grab and store code lengths */\n\tvar clens = use_typed_arrays ? new Uint8Array(19) : zero_fill_array(19);\n\tvar ctree = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n\tvar maxlen = 1;\n\tvar bl_count =  use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);\n\tvar next_code = use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);\n\tvar L = clens.length; /* 19 */\n\tfor(var i = 0; i < _HCLEN; ++i) {\n\t\tclens[CLEN_ORDER[i]] = w = read_bits_3(data, boff);\n\t\tif(maxlen < w) maxlen = w;\n\t\tbl_count[w]++;\n\t\tboff += 3;\n\t}\n\n\t/* build code tree */\n\tvar ccode = 0;\n\tbl_count[0] = 0;\n\tfor(i = 1; i <= maxlen; ++i) next_code[i] = ccode = (ccode + bl_count[i-1])<<1;\n\tfor(i = 0; i < L; ++i) if((ccode = clens[i]) != 0) ctree[i] = next_code[ccode]++;\n\t/* cmap[7 bits from stream] = (off&7) + (lit<<3) */\n\tvar cleni = 0;\n\tfor(i = 0; i < L; ++i) {\n\t\tcleni = clens[i];\n\t\tif(cleni != 0) {\n\t\t\tccode = bitswap8[ctree[i]]>>(8-cleni);\n\t\t\tfor(var j = (1<<(7-cleni))-1; j>=0; --j) dyn_cmap[ccode|(j<<cleni)] = (cleni&7) | (i<<3);\n\t\t}\n\t}\n\n\t/* read literal and dist codes at once */\n\tvar hcodes/*:Array<number>*/ = [];\n\tmaxlen = 1;\n\tfor(; hcodes.length < _HLIT + _HDIST;) {\n\t\tccode = dyn_cmap[read_bits_7(data, boff)];\n\t\tboff += ccode & 7;\n\t\tswitch((ccode >>>= 3)) {\n\t\t\tcase 16:\n\t\t\t\tw = 3 + read_bits_2(data, boff); boff += 2;\n\t\t\t\tccode = hcodes[hcodes.length - 1];\n\t\t\t\twhile(w-- > 0) hcodes.push(ccode);\n\t\t\t\tbreak;\n\t\t\tcase 17:\n\t\t\t\tw = 3 + read_bits_3(data, boff); boff += 3;\n\t\t\t\twhile(w-- > 0) hcodes.push(0);\n\t\t\t\tbreak;\n\t\t\tcase 18:\n\t\t\t\tw = 11 + read_bits_7(data, boff); boff += 7;\n\t\t\t\twhile(w -- > 0) hcodes.push(0);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\thcodes.push(ccode);\n\t\t\t\tif(maxlen < ccode) maxlen = ccode;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/* build literal / length trees */\n\tvar h1 = hcodes.slice(0, _HLIT), h2 = hcodes.slice(_HLIT);\n\tfor(i = _HLIT; i < 286; ++i) h1[i] = 0;\n\tfor(i = _HDIST; i < 30; ++i) h2[i] = 0;\n\tdyn_len_1 = build_tree(h1, dyn_lmap, 286);\n\tdyn_len_2 = build_tree(h2, dyn_dmap, 30);\n\treturn boff;\n}\n\n/* return [ data, bytesRead ] */\nfunction inflate(data, usz/*:number*/) {\n\t/* shortcircuit for empty buffer [0x03, 0x00] */\n\tif(data[0] == 3 && !(data[1] & 0x3)) { return [new_raw_buf(usz), 2]; }\n\n\t/* bit offset */\n\tvar boff = 0;\n\n\t/* header includes final bit and type bits */\n\tvar header = 0;\n\n\tvar outbuf = new_unsafe_buf(usz ? usz : (1<<18));\n\tvar woff = 0;\n\tvar OL = outbuf.length>>>0;\n\tvar max_len_1 = 0, max_len_2 = 0;\n\n\twhile((header&1) == 0) {\n\t\theader = read_bits_3(data, boff); boff += 3;\n\t\tif((header >>> 1) == 0) {\n\t\t\t/* Stored block */\n\t\t\tif(boff & 7) boff += 8 - (boff&7);\n\t\t\t/* 2 bytes sz, 2 bytes bit inverse */\n\t\t\tvar sz = data[boff>>>3] | data[(boff>>>3)+1]<<8;\n\t\t\tboff += 32;\n\t\t\t/* push sz bytes */\n\t\t\tif(sz > 0) {\n\t\t\t\tif(!usz && OL < woff + sz) { outbuf = realloc(outbuf, woff + sz); OL = outbuf.length; }\n\t\t\t\twhile(sz-- > 0) { outbuf[woff++] = data[boff>>>3]; boff += 8; }\n\t\t\t}\n\t\t\tcontinue;\n\t\t} else if((header >> 1) == 1) {\n\t\t\t/* Fixed Huffman */\n\t\t\tmax_len_1 = 9; max_len_2 = 5;\n\t\t} else {\n\t\t\t/* Dynamic Huffman */\n\t\t\tboff = dyn(data, boff);\n\t\t\tmax_len_1 = dyn_len_1; max_len_2 = dyn_len_2;\n\t\t}\n\t\tfor(;;) { // while(true) is apparently out of vogue in modern JS circles\n\t\t\tif(!usz && (OL < woff + 32767)) { outbuf = realloc(outbuf, woff + 32767); OL = outbuf.length; }\n\t\t\t/* ingest code and move read head */\n\t\t\tvar bits = read_bits_n(data, boff, max_len_1);\n\t\t\tvar code = (header>>>1) == 1 ? fix_lmap[bits] : dyn_lmap[bits];\n\t\t\tboff += code & 15; code >>>= 4;\n\t\t\t/* 0-255 are literals, 256 is end of block token, 257+ are copy tokens */\n\t\t\tif(((code>>>8)&0xFF) === 0) outbuf[woff++] = code;\n\t\t\telse if(code == 256) break;\n\t\t\telse {\n\t\t\t\tcode -= 257;\n\t\t\t\tvar len_eb = (code < 8) ? 0 : ((code-4)>>2); if(len_eb > 5) len_eb = 0;\n\t\t\t\tvar tgt = woff + LEN_LN[code];\n\t\t\t\t/* length extra bits */\n\t\t\t\tif(len_eb > 0) {\n\t\t\t\t\ttgt += read_bits_n(data, boff, len_eb);\n\t\t\t\t\tboff += len_eb;\n\t\t\t\t}\n\n\t\t\t\t/* dist code */\n\t\t\t\tbits = read_bits_n(data, boff, max_len_2);\n\t\t\t\tcode = (header>>>1) == 1 ? fix_dmap[bits] : dyn_dmap[bits];\n\t\t\t\tboff += code & 15; code >>>= 4;\n\t\t\t\tvar dst_eb = (code < 4 ? 0 : (code-2)>>1);\n\t\t\t\tvar dst = DST_LN[code];\n\t\t\t\t/* dist extra bits */\n\t\t\t\tif(dst_eb > 0) {\n\t\t\t\t\tdst += read_bits_n(data, boff, dst_eb);\n\t\t\t\t\tboff += dst_eb;\n\t\t\t\t}\n\n\t\t\t\t/* in the common case, manual byte copy is faster than TA set / Buffer copy */\n\t\t\t\tif(!usz && OL < tgt) { outbuf = realloc(outbuf, tgt + 100); OL = outbuf.length; }\n\t\t\t\twhile(woff < tgt) { outbuf[woff] = outbuf[woff - dst]; ++woff; }\n\t\t\t}\n\t\t}\n\t}\n\tif(usz) return [outbuf, (boff+7)>>>3];\n\treturn [outbuf.slice(0, woff), (boff+7)>>>3];\n}\n\nfunction _inflate(payload, usz) {\n\tvar data = payload.slice(payload.l||0);\n\tvar out = inflate(data, usz);\n\tpayload.l += out[1];\n\treturn out[0];\n}\n\nfunction warn_or_throw(wrn, msg) {\n\tif(wrn) { if(typeof console !== 'undefined') console.error(msg); }\n\telse throw new Error(msg);\n}\n\nfunction parse_zip(file/*:RawBytes*/, options/*:CFBReadOpts*/)/*:CFBContainer*/ {\n\tvar blob/*:CFBlob*/ = /*::(*/file/*:: :any)*/;\n\tprep_blob(blob, 0);\n\n\tvar FileIndex/*:CFBFileIndex*/ = [], FullPaths/*:Array<string>*/ = [];\n\tvar o = {\n\t\tFileIndex: FileIndex,\n\t\tFullPaths: FullPaths\n\t};\n\tinit_cfb(o, { root: options.root });\n\n\t/* find end of central directory, start just after signature */\n\tvar i = blob.length - 4;\n\twhile((blob[i] != 0x50 || blob[i+1] != 0x4b || blob[i+2] != 0x05 || blob[i+3] != 0x06) && i >= 0) --i;\n\tblob.l = i + 4;\n\n\t/* parse end of central directory */\n\tblob.l += 4;\n\tvar fcnt = blob.read_shift(2);\n\tblob.l += 6;\n\tvar start_cd = blob.read_shift(4);\n\n\t/* parse central directory */\n\tblob.l = start_cd;\n\n\tfor(i = 0; i < fcnt; ++i) {\n\t\t/* trust local file header instead of CD entry */\n\t\tblob.l += 20;\n\t\tvar csz = blob.read_shift(4);\n\t\tvar usz = blob.read_shift(4);\n\t\tvar namelen = blob.read_shift(2);\n\t\tvar efsz = blob.read_shift(2);\n\t\tvar fcsz = blob.read_shift(2);\n\t\tblob.l += 8;\n\t\tvar offset = blob.read_shift(4);\n\t\tvar EF = parse_extra_field(/*::(*/blob.slice(blob.l+namelen, blob.l+namelen+efsz)/*:: :any)*/);\n\t\tblob.l += namelen + efsz + fcsz;\n\n\t\tvar L = blob.l;\n\t\tblob.l = offset + 4;\n\t\t/* ZIP64 lengths */\n\t\tif(EF && EF[0x0001]) {\n\t\t\tif((EF[0x0001]||{}).usz) usz = EF[0x0001].usz;\n\t\t\tif((EF[0x0001]||{}).csz) csz = EF[0x0001].csz;\n\t\t}\n\t\tparse_local_file(blob, csz, usz, o, EF);\n\t\tblob.l = L;\n\t}\n\n\treturn o;\n}\n\n\n/* head starts just after local file header signature */\nfunction parse_local_file(blob/*:CFBlob*/, csz/*:number*/, usz/*:number*/, o/*:CFBContainer*/, EF) {\n\t/* [local file header] */\n\tblob.l += 2;\n\tvar flags = blob.read_shift(2);\n\tvar meth = blob.read_shift(2);\n\tvar date = parse_dos_date(blob);\n\n\tif(flags & 0x2041) throw new Error(\"Unsupported ZIP encryption\");\n\tvar crc32 = blob.read_shift(4);\n\tvar _csz = blob.read_shift(4);\n\tvar _usz = blob.read_shift(4);\n\n\tvar namelen = blob.read_shift(2);\n\tvar efsz = blob.read_shift(2);\n\n\t// TODO: flags & (1<<11) // UTF8\n\tvar name = \"\"; for(var i = 0; i < namelen; ++i) name += String.fromCharCode(blob[blob.l++]);\n\tif(efsz) {\n\t\tvar ef = parse_extra_field(/*::(*/blob.slice(blob.l, blob.l + efsz)/*:: :any)*/);\n\t\tif((ef[0x5455]||{}).mt) date = ef[0x5455].mt;\n\t\tif((ef[0x0001]||{}).usz) _usz = ef[0x0001].usz;\n\t\tif((ef[0x0001]||{}).csz) _csz = ef[0x0001].csz;\n\t\tif(EF) {\n\t\t\tif((EF[0x5455]||{}).mt) date = EF[0x5455].mt;\n\t\t\tif((EF[0x0001]||{}).usz) _usz = ef[0x0001].usz;\n\t\t\tif((EF[0x0001]||{}).csz) _csz = ef[0x0001].csz;\n\t\t}\n\t}\n\tblob.l += efsz;\n\n\t/* [encryption header] */\n\n\t/* [file data] */\n\tvar data = blob.slice(blob.l, blob.l + _csz);\n\tswitch(meth) {\n\t\tcase 8: data = _inflateRawSync(blob, _usz); break;\n\t\tcase 0: break; // TODO: scan for magic number\n\t\tdefault: throw new Error(\"Unsupported ZIP Compression method \" + meth);\n\t}\n\n\t/* [data descriptor] */\n\tvar wrn = false;\n\tif(flags & 8) {\n\t\tcrc32 = blob.read_shift(4);\n\t\tif(crc32 == 0x08074b50) { crc32 = blob.read_shift(4); wrn = true; }\n\t\t_csz = blob.read_shift(4);\n\t\t_usz = blob.read_shift(4);\n\t}\n\n\tif(_csz != csz) warn_or_throw(wrn, \"Bad compressed size: \" + csz + \" != \" + _csz);\n\tif(_usz != usz) warn_or_throw(wrn, \"Bad uncompressed size: \" + usz + \" != \" + _usz);\n\t//var _crc32 = CRC32.buf(data, 0);\n\t//if((crc32>>0) != (_crc32>>0)) warn_or_throw(wrn, \"Bad CRC32 checksum: \" + crc32 + \" != \" + _crc32);\n\tcfb_add(o, name, data, {unsafe: true, mt: date});\n}\nfunction write_zip(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes*/ {\n\tvar _opts = options || {};\n\tvar out = [], cdirs = [];\n\tvar o/*:CFBlob*/ = new_buf(1);\n\tvar method = (_opts.compression ? 8 : 0), flags = 0;\n\tvar desc = false;\n\tif(desc) flags |= 8;\n\tvar i = 0, j = 0;\n\n\tvar start_cd = 0, fcnt = 0;\n\tvar root = cfb.FullPaths[0], fp = root, fi = cfb.FileIndex[0];\n\tvar crcs = [];\n\tvar sz_cd = 0;\n\n\tfor(i = 1; i < cfb.FullPaths.length; ++i) {\n\t\tfp = cfb.FullPaths[i].slice(root.length); fi = cfb.FileIndex[i];\n\t\tif(!fi.size || !fi.content || fp == \"\\u0001Sh33tJ5\") continue;\n\t\tvar start = start_cd;\n\n\t\t/* TODO: CP437 filename */\n\t\tvar namebuf = new_buf(fp.length);\n\t\tfor(j = 0; j < fp.length; ++j) namebuf.write_shift(1, fp.charCodeAt(j) & 0x7F);\n\t\tnamebuf = namebuf.slice(0, namebuf.l);\n\t\tcrcs[fcnt] = typeof fi.content == \"string\" ? CRC32.bstr(fi.content, 0) : CRC32.buf(/*::((*/fi.content/*::||[]):any)*/, 0);\n\n\t\tvar outbuf = typeof fi.content == \"string\" ? s2a(fi.content) : fi.content/*::||[]*/;\n\t\tif(method == 8) outbuf = _deflateRawSync(outbuf);\n\n\t\t/* local file header */\n\t\to = new_buf(30);\n\t\to.write_shift(4, 0x04034b50);\n\t\to.write_shift(2, 20);\n\t\to.write_shift(2, flags);\n\t\to.write_shift(2, method);\n\t\t/* TODO: last mod file time/date */\n\t\tif(fi.mt) write_dos_date(o, fi.mt);\n\t\telse o.write_shift(4, 0);\n\t\to.write_shift(-4, (flags & 8) ? 0 : crcs[fcnt]);\n\t\to.write_shift(4,  (flags & 8) ? 0 : outbuf.length);\n\t\to.write_shift(4,  (flags & 8) ? 0 : /*::(*/fi.content/*::||[])*/.length);\n\t\to.write_shift(2, namebuf.length);\n\t\to.write_shift(2, 0);\n\n\t\tstart_cd += o.length;\n\t\tout.push(o);\n\t\tstart_cd += namebuf.length;\n\t\tout.push(namebuf);\n\n\t\t/* TODO: extra fields? */\n\n\t\t/* TODO: encryption header ? */\n\n\t\tstart_cd += outbuf.length;\n\t\tout.push(outbuf);\n\n\t\t/* data descriptor */\n\t\tif(flags & 8) {\n\t\t\to = new_buf(12);\n\t\t\to.write_shift(-4, crcs[fcnt]);\n\t\t\to.write_shift(4, outbuf.length);\n\t\t\to.write_shift(4, /*::(*/fi.content/*::||[])*/.length);\n\t\t\tstart_cd += o.l;\n\t\t\tout.push(o);\n\t\t}\n\n\t\t/* central directory */\n\t\to = new_buf(46);\n\t\to.write_shift(4, 0x02014b50);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 20);\n\t\to.write_shift(2, flags);\n\t\to.write_shift(2, method);\n\t\to.write_shift(4, 0); /* TODO: last mod file time/date */\n\t\to.write_shift(-4, crcs[fcnt]);\n\n\t\to.write_shift(4, outbuf.length);\n\t\to.write_shift(4, /*::(*/fi.content/*::||[])*/.length);\n\t\to.write_shift(2, namebuf.length);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, start);\n\n\t\tsz_cd += o.l;\n\t\tcdirs.push(o);\n\t\tsz_cd += namebuf.length;\n\t\tcdirs.push(namebuf);\n\t\t++fcnt;\n\t}\n\n\t/* end of central directory */\n\to = new_buf(22);\n\to.write_shift(4, 0x06054b50);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, fcnt);\n\to.write_shift(2, fcnt);\n\to.write_shift(4, sz_cd);\n\to.write_shift(4, start_cd);\n\to.write_shift(2, 0);\n\n\treturn bconcat(([bconcat((out/*:any*/)), bconcat(cdirs), o]/*:any*/));\n}\nvar ContentTypeMap = ({\n\t\"htm\": \"text/html\",\n\t\"xml\": \"text/xml\",\n\n\t\"gif\": \"image/gif\",\n\t\"jpg\": \"image/jpeg\",\n\t\"png\": \"image/png\",\n\n\t\"mso\": \"application/x-mso\",\n\t\"thmx\": \"application/vnd.ms-officetheme\",\n\t\"sh33tj5\": \"application/octet-stream\"\n}/*:any*/);\n\nfunction get_content_type(fi/*:CFBEntry*/, fp/*:string*/)/*:string*/ {\n\tif(fi.ctype) return fi.ctype;\n\n\tvar ext = fi.name || \"\", m = ext.match(/\\.([^\\.]+)$/);\n\tif(m && ContentTypeMap[m[1]]) return ContentTypeMap[m[1]];\n\n\tif(fp) {\n\t\tm = (ext = fp).match(/[\\.\\\\]([^\\.\\\\])+$/);\n\t\tif(m && ContentTypeMap[m[1]]) return ContentTypeMap[m[1]];\n\t}\n\n\treturn \"application/octet-stream\";\n}\n\n/* 76 character chunks TODO: intertwine encoding */\nfunction write_base64_76(bstr/*:string*/)/*:string*/ {\n\tvar data = Base64_encode(bstr);\n\tvar o = [];\n\tfor(var i = 0; i < data.length; i+= 76) o.push(data.slice(i, i+76));\n\treturn o.join(\"\\r\\n\") + \"\\r\\n\";\n}\n\n/*\nRules for QP:\n\t- escape =## applies for all non-display characters and literal \"=\"\n\t- space or tab at end of line must be encoded\n\t- \\r\\n newlines can be preserved, but bare \\r and \\n must be escaped\n\t- lines must not exceed 76 characters, use soft breaks =\\r\\n\n\nTODO: Some files from word appear to write line extensions with bare equals:\n\n```\n<table class=3DMsoTableGrid border=3D1 cellspacing=3D0 cellpadding=3D0 width=\n=\"70%\"\n```\n*/\nfunction write_quoted_printable(text/*:string*/)/*:string*/ {\n\tvar encoded = text.replace(/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7E-\\xFF=]/g, function(c) {\n\t\tvar w = c.charCodeAt(0).toString(16).toUpperCase();\n\t\treturn \"=\" + (w.length == 1 ? \"0\" + w : w);\n\t});\n\n\tencoded = encoded.replace(/ $/mg, \"=20\").replace(/\\t$/mg, \"=09\");\n\n\tif(encoded.charAt(0) == \"\\n\") encoded = \"=0D\" + encoded.slice(1);\n\tencoded = encoded.replace(/\\r(?!\\n)/mg, \"=0D\").replace(/\\n\\n/mg, \"\\n=0A\").replace(/([^\\r\\n])\\n/mg, \"$1=0A\");\n\n\tvar o/*:Array<string>*/ = [], split = encoded.split(\"\\r\\n\");\n\tfor(var si = 0; si < split.length; ++si) {\n\t\tvar str = split[si];\n\t\tif(str.length == 0) { o.push(\"\"); continue; }\n\t\tfor(var i = 0; i < str.length;) {\n\t\t\tvar end = 76;\n\t\t\tvar tmp = str.slice(i, i + end);\n\t\t\tif(tmp.charAt(end - 1) == \"=\") end --;\n\t\t\telse if(tmp.charAt(end - 2) == \"=\") end -= 2;\n\t\t\telse if(tmp.charAt(end - 3) == \"=\") end -= 3;\n\t\t\ttmp = str.slice(i, i + end);\n\t\t\ti += end;\n\t\t\tif(i < str.length) tmp += \"=\";\n\t\t\to.push(tmp);\n\t\t}\n\t}\n\n\treturn o.join(\"\\r\\n\");\n}\nfunction parse_quoted_printable(data/*:Array<string>*/)/*:RawBytes*/ {\n\tvar o = [];\n\n\t/* unify long lines */\n\tfor(var di = 0; di < data.length; ++di) {\n\t\tvar line = data[di];\n\t\twhile(di <= data.length && line.charAt(line.length - 1) == \"=\") line = line.slice(0, line.length - 1) + data[++di];\n\t\to.push(line);\n\t}\n\n\t/* decode */\n\tfor(var oi = 0; oi < o.length; ++oi) o[oi] = o[oi].replace(/[=][0-9A-Fa-f]{2}/g, function($$) { return String.fromCharCode(parseInt($$.slice(1), 16)); });\n\treturn s2a(o.join(\"\\r\\n\"));\n}\n\n\nfunction parse_mime(cfb/*:CFBContainer*/, data/*:Array<string>*/, root/*:string*/)/*:void*/ {\n\tvar fname = \"\", cte = \"\", ctype = \"\", fdata;\n\tvar di = 0;\n\tfor(;di < 10; ++di) {\n\t\tvar line = data[di];\n\t\tif(!line || line.match(/^\\s*$/)) break;\n\t\tvar m = line.match(/^([^:]*?):\\s*([^\\s].*)$/);\n\t\tif(m) switch(m[1].toLowerCase()) {\n\t\t\tcase \"content-location\": fname = m[2].trim(); break;\n\t\t\tcase \"content-type\": ctype = m[2].trim(); break;\n\t\t\tcase \"content-transfer-encoding\": cte = m[2].trim(); break;\n\t\t}\n\t}\n\t++di;\n\tswitch(cte.toLowerCase()) {\n\t\tcase 'base64': fdata = s2a(Base64_decode(data.slice(di).join(\"\"))); break;\n\t\tcase 'quoted-printable': fdata = parse_quoted_printable(data.slice(di)); break;\n\t\tdefault: throw new Error(\"Unsupported Content-Transfer-Encoding \" + cte);\n\t}\n\tvar file = cfb_add(cfb, fname.slice(root.length), fdata, {unsafe: true});\n\tif(ctype) file.ctype = ctype;\n}\n\nfunction parse_mad(file/*:RawBytes*/, options/*:CFBReadOpts*/)/*:CFBContainer*/ {\n\tif(a2s(file.slice(0,13)).toLowerCase() != \"mime-version:\") throw new Error(\"Unsupported MAD header\");\n\tvar root = (options && options.root || \"\");\n\t// $FlowIgnore\n\tvar data = (has_buf && Buffer.isBuffer(file) ? file.toString(\"binary\") : a2s(file)).split(\"\\r\\n\");\n\tvar di = 0, row = \"\";\n\n\t/* if root is not specified, scan for the common prefix */\n\tfor(di = 0; di < data.length; ++di) {\n\t\trow = data[di];\n\t\tif(!/^Content-Location:/i.test(row)) continue;\n\t\trow = row.slice(row.indexOf(\"file\"));\n\t\tif(!root) root = row.slice(0, row.lastIndexOf(\"/\") + 1);\n\t\tif(row.slice(0, root.length) == root) continue;\n\t\twhile(root.length > 0) {\n\t\t\troot = root.slice(0, root.length - 1);\n\t\t\troot = root.slice(0, root.lastIndexOf(\"/\") + 1);\n\t\t\tif(row.slice(0,root.length) == root) break;\n\t\t}\n\t}\n\n\tvar mboundary = (data[1] || \"\").match(/boundary=\"(.*?)\"/);\n\tif(!mboundary) throw new Error(\"MAD cannot find boundary\");\n\tvar boundary = \"--\" + (mboundary[1] || \"\");\n\n\tvar FileIndex/*:CFBFileIndex*/ = [], FullPaths/*:Array<string>*/ = [];\n\tvar o = {\n\t\tFileIndex: FileIndex,\n\t\tFullPaths: FullPaths\n\t};\n\tinit_cfb(o);\n\tvar start_di, fcnt = 0;\n\tfor(di = 0; di < data.length; ++di) {\n\t\tvar line = data[di];\n\t\tif(line !== boundary && line !== boundary + \"--\") continue;\n\t\tif(fcnt++) parse_mime(o, data.slice(start_di, di), root);\n\t\tstart_di = di;\n\t}\n\treturn o;\n}\n\nfunction write_mad(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:string*/ {\n\tvar opts = options || {};\n\tvar boundary = opts.boundary || \"SheetJS\";\n\tboundary = '------=' + boundary;\n\n\tvar out = [\n\t\t'MIME-Version: 1.0',\n\t\t'Content-Type: multipart/related; boundary=\"' + boundary.slice(2) + '\"',\n\t\t'',\n\t\t'',\n\t\t''\n\t];\n\n\tvar root = cfb.FullPaths[0], fp = root, fi = cfb.FileIndex[0];\n\tfor(var i = 1; i < cfb.FullPaths.length; ++i) {\n\t\tfp = cfb.FullPaths[i].slice(root.length);\n\t\tfi = cfb.FileIndex[i];\n\t\tif(!fi.size || !fi.content || fp == \"\\u0001Sh33tJ5\") continue;\n\n\t\t/* Normalize filename */\n\t\tfp = fp.replace(/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7E-\\xFF]/g, function(c) {\n\t\t\treturn \"_x\" + c.charCodeAt(0).toString(16) + \"_\";\n\t\t}).replace(/[\\u0080-\\uFFFF]/g, function(u) {\n\t\t\treturn \"_u\" + u.charCodeAt(0).toString(16) + \"_\";\n\t\t});\n\n\t\t/* Extract content as binary string */\n\t\tvar ca = fi.content;\n\t\t// $FlowIgnore\n\t\tvar cstr = has_buf && Buffer.isBuffer(ca) ? ca.toString(\"binary\") : a2s(ca);\n\n\t\t/* 4/5 of first 1024 chars ascii -> quoted printable, else base64 */\n\t\tvar dispcnt = 0, L = Math.min(1024, cstr.length), cc = 0;\n\t\tfor(var csl = 0; csl <= L; ++csl) if((cc=cstr.charCodeAt(csl)) >= 0x20 && cc < 0x80) ++dispcnt;\n\t\tvar qp = dispcnt >= L * 4 / 5;\n\n\t\tout.push(boundary);\n\t\tout.push('Content-Location: ' + (opts.root || 'file:///C:/SheetJS/') + fp);\n\t\tout.push('Content-Transfer-Encoding: ' + (qp ? 'quoted-printable' : 'base64'));\n\t\tout.push('Content-Type: ' + get_content_type(fi, fp));\n\t\tout.push('');\n\n\t\tout.push(qp ? write_quoted_printable(cstr) : write_base64_76(cstr));\n\t}\n\tout.push(boundary + '--\\r\\n');\n\treturn out.join(\"\\r\\n\");\n}\nfunction cfb_new(opts/*:?any*/)/*:CFBContainer*/ {\n\tvar o/*:CFBContainer*/ = ({}/*:any*/);\n\tinit_cfb(o, opts);\n\treturn o;\n}\n\nfunction cfb_add(cfb/*:CFBContainer*/, name/*:string*/, content/*:?RawBytes*/, opts/*:?any*/)/*:CFBEntry*/ {\n\tvar unsafe = opts && opts.unsafe;\n\tif(!unsafe) init_cfb(cfb);\n\tvar file = !unsafe && CFB.find(cfb, name);\n\tif(!file) {\n\t\tvar fpath/*:string*/ = cfb.FullPaths[0];\n\t\tif(name.slice(0, fpath.length) == fpath) fpath = name;\n\t\telse {\n\t\t\tif(fpath.slice(-1) != \"/\") fpath += \"/\";\n\t\t\tfpath = (fpath + name).replace(\"//\",\"/\");\n\t\t}\n\t\tfile = ({name: filename(name), type: 2}/*:any*/);\n\t\tcfb.FileIndex.push(file);\n\t\tcfb.FullPaths.push(fpath);\n\t\tif(!unsafe) CFB.utils.cfb_gc(cfb);\n\t}\n\t/*:: if(!file) throw new Error(\"unreachable\"); */\n\tfile.content = (content/*:any*/);\n\tfile.size = content ? content.length : 0;\n\tif(opts) {\n\t\tif(opts.CLSID) file.clsid = opts.CLSID;\n\t\tif(opts.mt) file.mt = opts.mt;\n\t\tif(opts.ct) file.ct = opts.ct;\n\t}\n\treturn file;\n}\n\nfunction cfb_del(cfb/*:CFBContainer*/, name/*:string*/)/*:boolean*/ {\n\tinit_cfb(cfb);\n\tvar file = CFB.find(cfb, name);\n\tif(file) for(var j = 0; j < cfb.FileIndex.length; ++j) if(cfb.FileIndex[j] == file) {\n\t\tcfb.FileIndex.splice(j, 1);\n\t\tcfb.FullPaths.splice(j, 1);\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction cfb_mov(cfb/*:CFBContainer*/, old_name/*:string*/, new_name/*:string*/)/*:boolean*/ {\n\tinit_cfb(cfb);\n\tvar file = CFB.find(cfb, old_name);\n\tif(file) for(var j = 0; j < cfb.FileIndex.length; ++j) if(cfb.FileIndex[j] == file) {\n\t\tcfb.FileIndex[j].name = filename(new_name);\n\t\tcfb.FullPaths[j] = new_name;\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction cfb_gc(cfb/*:CFBContainer*/)/*:void*/ { rebuild_cfb(cfb, true); }\n\nexports.find = find;\nexports.read = read;\nexports.parse = parse;\nexports.write = write;\nexports.writeFile = write_file;\nexports.utils = {\n\tcfb_new: cfb_new,\n\tcfb_add: cfb_add,\n\tcfb_del: cfb_del,\n\tcfb_mov: cfb_mov,\n\tcfb_gc: cfb_gc,\n\tReadShift: ReadShift,\n\tCheckField: CheckField,\n\tprep_blob: prep_blob,\n\tbconcat: bconcat,\n\tuse_zlib: use_zlib,\n\t_deflateRaw: _deflate,\n\t_inflateRaw: _inflate,\n\tconsts: consts\n};\n\nreturn exports;\n})();\n\nvar _fs;\nfunction set_fs(fs) { _fs = fs; }\n\n/* normalize data for blob ctor */\nfunction blobify(data) {\n\tif(typeof data === \"string\") return s2ab(data);\n\tif(Array.isArray(data)) return a2u(data);\n\treturn data;\n}\n/* write or download file */\nfunction write_dl(fname/*:string*/, payload/*:any*/, enc/*:?string*/) {\n\t/*global IE_SaveFile, Blob, navigator, saveAs, document, File, chrome */\n\tif(typeof _fs !== 'undefined' && _fs.writeFileSync) return enc ? _fs.writeFileSync(fname, payload, enc) : _fs.writeFileSync(fname, payload);\n\tif(typeof Deno !== 'undefined') {\n\t\t/* in this spot, it's safe to assume typed arrays and TextEncoder/TextDecoder exist */\n\t\tif(enc && typeof payload == \"string\") switch(enc) {\n\t\t\tcase \"utf8\": payload = new TextEncoder(enc).encode(payload); break;\n\t\t\tcase \"binary\": payload = s2ab(payload); break;\n\t\t\t/* TODO: binary equivalent */\n\t\t\tdefault: throw new Error(\"Unsupported encoding \" + enc);\n\t\t}\n\t\treturn Deno.writeFileSync(fname, payload);\n\t}\n\tvar data = (enc == \"utf8\") ? utf8write(payload) : payload;\n\t/*:: declare var IE_SaveFile: any; */\n\tif(typeof IE_SaveFile !== 'undefined') return IE_SaveFile(data, fname);\n\tif(typeof Blob !== 'undefined') {\n\t\tvar blob = new Blob([blobify(data)], {type:\"application/octet-stream\"});\n\t\t/*:: declare var navigator: any; */\n\t\tif(typeof navigator !== 'undefined' && navigator.msSaveBlob) return navigator.msSaveBlob(blob, fname);\n\t\t/*:: declare var saveAs: any; */\n\t\tif(typeof saveAs !== 'undefined') return saveAs(blob, fname);\n\t\tif(typeof URL !== 'undefined' && typeof document !== 'undefined' && document.createElement && URL.createObjectURL) {\n\t\t\tvar url = URL.createObjectURL(blob);\n\t\t\t/*:: declare var chrome: any; */\n\t\t\tif(typeof chrome === 'object' && typeof (chrome.downloads||{}).download == \"function\") {\n\t\t\t\tif(URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function() { URL.revokeObjectURL(url); }, 60000);\n\t\t\t\treturn chrome.downloads.download({ url: url, filename: fname, saveAs: true });\n\t\t\t}\n\t\t\tvar a = document.createElement(\"a\");\n\t\t\tif(a.download != null) {\n\t\t\t\t/*:: if(document.body == null) throw new Error(\"unreachable\"); */\n\t\t\t\ta.download = fname; a.href = url; document.body.appendChild(a); a.click();\n\t\t\t\t/*:: if(document.body == null) throw new Error(\"unreachable\"); */ document.body.removeChild(a);\n\t\t\t\tif(URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function() { URL.revokeObjectURL(url); }, 60000);\n\t\t\t\treturn url;\n\t\t\t}\n\t\t} else if(typeof URL !== 'undefined' && !URL.createObjectURL && typeof chrome === 'object') {\n\t\t\t/* manifest v3 extensions -- no URL.createObjectURL */\n\t\t\tvar b64 = \"data:application/octet-stream;base64,\" + Base64_encode_arr(new Uint8Array(blobify(data)));\n\t\t\treturn chrome.downloads.download({ url: b64, filename: fname, saveAs: true });\n\t\t}\n\t}\n\t// $FlowIgnore\n\tif(typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try { // extendscript\n\t\t// $FlowIgnore\n\t\tvar out = File(fname); out.open(\"w\"); out.encoding = \"binary\";\n\t\tif(Array.isArray(payload)) payload = a2s(payload);\n\t\tout.write(payload); out.close(); return payload;\n\t} catch(e) { if(!e.message || e.message.indexOf(\"onstruct\") == -1) throw e; }\n\tthrow new Error(\"cannot save file \" + fname);\n}\n\n/* read binary data from file */\nfunction read_binary(path/*:string*/) {\n\tif(typeof _fs !== 'undefined') return _fs.readFileSync(path);\n\tif(typeof Deno !== 'undefined') return Deno.readFileSync(path);\n\t// $FlowIgnore\n\tif(typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try { // extendscript\n\t\t// $FlowIgnore\n\t\tvar infile = File(path); infile.open(\"r\"); infile.encoding = \"binary\";\n\t\tvar data = infile.read(); infile.close();\n\t\treturn data;\n\t} catch(e) { if(!e.message || e.message.indexOf(\"onstruct\") == -1) throw e; }\n\tthrow new Error(\"Cannot access file \" + path);\n}\nfunction keys(o/*:any*/)/*:Array<any>*/ {\n\tvar ks = Object.keys(o), o2 = [];\n\tfor(var i = 0; i < ks.length; ++i) if(Object.prototype.hasOwnProperty.call(o, ks[i])) o2.push(ks[i]);\n\treturn o2;\n}\n\nfunction evert_key(obj/*:any*/, key/*:string*/)/*:EvertType*/ {\n\tvar o = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) if(o[obj[K[i]][key]] == null) o[obj[K[i]][key]] = K[i];\n\treturn o;\n}\n\nfunction evert(obj/*:any*/)/*:EvertType*/ {\n\tvar o = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = K[i];\n\treturn o;\n}\n\nfunction evert_num(obj/*:any*/)/*:EvertNumType*/ {\n\tvar o = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = parseInt(K[i],10);\n\treturn o;\n}\n\nfunction evert_arr(obj/*:any*/)/*:EvertArrType*/ {\n\tvar o/*:EvertArrType*/ = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) {\n\t\tif(o[obj[K[i]]] == null) o[obj[K[i]]] = [];\n\t\to[obj[K[i]]].push(K[i]);\n\t}\n\treturn o;\n}\n\nvar dnthresh  = /*#__PURE__*/Date.UTC(1899, 11, 30, 0, 0, 0); // -2209161600000\nvar dnthresh1 = /*#__PURE__*/Date.UTC(1899, 11, 31, 0, 0, 0); // -2209075200000\nvar dnthresh2 = /*#__PURE__*/Date.UTC(1904, 0, 1, 0, 0, 0); // -2209075200000\nfunction datenum(v/*:Date*/, date1904/*:?boolean*/)/*:number*/ {\n\tvar epoch = /*#__PURE__*/v.getTime();\n\tvar res = (epoch - dnthresh) / (24 * 60 * 60 * 1000);\n\tif(date1904) { res -= 1462; return res < -1402 ? res - 1 : res; }\n\treturn res < 60 ? res - 1 : res;\n}\nfunction numdate(v/*:number*/)/*:Date|number*/ {\n\tif(v >= 60 && v < 61) return v;\n\tvar out = new Date();\n\tout.setTime((v>60 ? v : (v+1)) * 24 * 60 * 60 * 1000 + dnthresh);\n\treturn out;\n}\n\n/* ISO 8601 Duration */\nfunction parse_isodur(s) {\n\tvar sec = 0, mt = 0, time = false;\n\tvar m = s.match(/P([0-9\\.]+Y)?([0-9\\.]+M)?([0-9\\.]+D)?T([0-9\\.]+H)?([0-9\\.]+M)?([0-9\\.]+S)?/);\n\tif(!m) throw new Error(\"|\" + s + \"| is not an ISO8601 Duration\");\n\tfor(var i = 1; i != m.length; ++i) {\n\t\tif(!m[i]) continue;\n\t\tmt = 1;\n\t\tif(i > 3) time = true;\n\t\tswitch(m[i].slice(m[i].length-1)) {\n\t\t\tcase 'Y':\n\t\t\t\tthrow new Error(\"Unsupported ISO Duration Field: \" + m[i].slice(m[i].length-1));\n\t\t\tcase 'D': mt *= 24;\n\t\t\t\t/* falls through */\n\t\t\tcase 'H': mt *= 60;\n\t\t\t\t/* falls through */\n\t\t\tcase 'M':\n\t\t\t\tif(!time) throw new Error(\"Unsupported ISO Duration Field: M\");\n\t\t\t\telse mt *= 60;\n\t\t\t\t/* falls through */\n\t\t\tcase 'S': break;\n\t\t}\n\t\tsec += mt * parseInt(m[i], 10);\n\t}\n\treturn sec;\n}\n\n/* Blame https://bugs.chromium.org/p/v8/issues/detail?id=7863 for the regexide */\nvar pdre1 = /^(\\d+):(\\d+)(:\\d+)?(\\.\\d+)?$/; // HH:MM[:SS[.UUU]]\nvar pdre2 = /^(\\d+)-(\\d+)-(\\d+)$/; // YYYY-mm-dd\nvar pdre3 = /^(\\d+)-(\\d+)-(\\d+)[T ](\\d+):(\\d+)(:\\d+)?(\\.\\d+)?$/; // YYYY-mm-dd(T or space)HH:MM[:SS[.UUU]], sans \"Z\"\n/* parses a date string as a UTC date */\nfunction parseDate(str/*:string*/, date1904/*:boolean*/)/*:Date*/ {\n\tif(str instanceof Date) return str;\n\tvar m = str.match(pdre1);\n\tif(m) return new Date((date1904 ? dnthresh2 : dnthresh1) + ((parseInt(m[1], 10)*60 + parseInt(m[2], 10))*60 + (m[3] ? parseInt(m[3].slice(1), 10) : 0))*1000 + (m[4] ? parseInt((m[4]+\"000\").slice(1,4), 10) : 0));\n\tm = str.match(pdre2);\n\tif(m) return new Date(Date.UTC(+m[1], +m[2]-1, +m[3], 0, 0, 0, 0));\n\t/* TODO: 1900-02-29T00:00:00.000 should return a flag to treat as a date code (affects xlml) */\n\tm = str.match(pdre3);\n\tif(m) return new Date(Date.UTC(+m[1], +m[2]-1, +m[3], +m[4], +m[5], ((m[6] && parseInt(m[6].slice(1), 10))|| 0), ((m[7] && parseInt((m[7] + \"0000\").slice(1,4), 10))||0)));\n\tvar d = new Date(str);\n\treturn d;\n}\n\nfunction cc2str(arr/*:Array<number>*/, debomit)/*:string*/ {\n\tif(has_buf && Buffer.isBuffer(arr)) {\n\t\tif(debomit && buf_utf16le) {\n\t\t\t// TODO: temporary patch\n\t\t\tif(arr[0] == 0xFF && arr[1] == 0xFE) return utf8write(arr.slice(2).toString(\"utf16le\"));\n\t\t\tif(arr[1] == 0xFE && arr[2] == 0xFF) return utf8write(utf16beread(arr.slice(2).toString(\"binary\")));\n\t\t}\n\t\treturn arr.toString(\"binary\");\n\t}\n\n\tif(typeof TextDecoder !== \"undefined\") try {\n\t\tif(debomit) {\n\t\t\tif(arr[0] == 0xFF && arr[1] == 0xFE) return utf8write(new TextDecoder(\"utf-16le\").decode(arr.slice(2)));\n\t\t\tif(arr[0] == 0xFE && arr[1] == 0xFF) return utf8write(new TextDecoder(\"utf-16be\").decode(arr.slice(2)));\n\t\t}\n\t\tvar rev = {\n\t\t\t\"\\u20ac\": \"\\x80\", \"\\u201a\": \"\\x82\", \"\\u0192\": \"\\x83\", \"\\u201e\": \"\\x84\",\n\t\t\t\"\\u2026\": \"\\x85\", \"\\u2020\": \"\\x86\", \"\\u2021\": \"\\x87\", \"\\u02c6\": \"\\x88\",\n\t\t\t\"\\u2030\": \"\\x89\", \"\\u0160\": \"\\x8a\", \"\\u2039\": \"\\x8b\", \"\\u0152\": \"\\x8c\",\n\t\t\t\"\\u017d\": \"\\x8e\", \"\\u2018\": \"\\x91\", \"\\u2019\": \"\\x92\", \"\\u201c\": \"\\x93\",\n\t\t\t\"\\u201d\": \"\\x94\", \"\\u2022\": \"\\x95\", \"\\u2013\": \"\\x96\", \"\\u2014\": \"\\x97\",\n\t\t\t\"\\u02dc\": \"\\x98\", \"\\u2122\": \"\\x99\", \"\\u0161\": \"\\x9a\", \"\\u203a\": \"\\x9b\",\n\t\t\t\"\\u0153\": \"\\x9c\", \"\\u017e\": \"\\x9e\", \"\\u0178\": \"\\x9f\"\n\t\t};\n\t\tif(Array.isArray(arr)) arr = new Uint8Array(arr);\n\t\treturn new TextDecoder(\"latin1\").decode(arr).replace(/[€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ]/g, function(c) { return rev[c] || c; });\n\t} catch(e) {}\n\n\tvar o = [], i = 0;\n\t// this cascade is for the browsers and runtimes of antiquity (and for modern runtimes that lack TextEncoder)\n\ttry {\n\t\tfor(i = 0; i < arr.length - 65536; i+=65536) o.push(String.fromCharCode.apply(0, arr.slice(i, i + 65536)));\n\t\to.push(String.fromCharCode.apply(0, arr.slice(i)));\n\t} catch(e) { try {\n\t\t\tfor(; i < arr.length - 16384; i+=16384) o.push(String.fromCharCode.apply(0, arr.slice(i, i + 16384)));\n\t\t\to.push(String.fromCharCode.apply(0, arr.slice(i)));\n\t\t} catch(e) {\n\t\t\tfor(; i != arr.length; ++i) o.push(String.fromCharCode(arr[i]));\n\t\t}\n\t}\n\treturn o.join(\"\");\n}\n\nfunction dup(o/*:any*/)/*:any*/ {\n\tif(typeof JSON != 'undefined' && !Array.isArray(o)) return JSON.parse(JSON.stringify(o));\n\tif(typeof o != 'object' || o == null) return o;\n\tif(o instanceof Date) return new Date(o.getTime());\n\tvar out = {};\n\tfor(var k in o) if(Object.prototype.hasOwnProperty.call(o, k)) out[k] = dup(o[k]);\n\treturn out;\n}\n\nfunction fill(c/*:string*/,l/*:number*/)/*:string*/ { var o = \"\"; while(o.length < l) o+=c; return o; }\n\n/* TODO: stress test */\nfunction fuzzynum(s/*:string*/)/*:number*/ {\n\tvar v/*:number*/ = Number(s);\n\tif(!isNaN(v)) return isFinite(v) ? v : NaN;\n\tif(!/\\d/.test(s)) return v;\n\tvar wt = 1;\n\tvar ss = s.replace(/([\\d]),([\\d])/g,\"$1$2\").replace(/[$]/g,\"\").replace(/[%]/g, function() { wt *= 100; return \"\";});\n\tif(!isNaN(v = Number(ss))) return v / wt;\n\tss = ss.replace(/[(]([^()]*)[)]/,function($$, $1) { wt = -wt; return $1;});\n\tif(!isNaN(v = Number(ss))) return v / wt;\n\treturn v;\n}\n\n/* NOTE: Chrome rejects bare times like 1:23 PM */\nvar FDRE1 = /^(0?\\d|1[0-2])(?:|:([0-5]?\\d)(?:|(\\.\\d+)(?:|:([0-5]?\\d))|:([0-5]?\\d)(|\\.\\d+)))\\s+([ap])m?$/;\nvar FDRE2 = /^([01]?\\d|2[0-3])(?:|:([0-5]?\\d)(?:|(\\.\\d+)(?:|:([0-5]?\\d))|:([0-5]?\\d)(|\\.\\d+)))$/;\nvar FDISO = /^(\\d+)-(\\d+)-(\\d+)[T ](\\d+):(\\d+)(:\\d+)(\\.\\d+)?[Z]?$/; // YYYY-mm-dd(T or space)HH:MM:SS[.UUU][Z]\n\n/* TODO: 1904 adjustment */\nvar utc_append_works = new Date(\"6/9/69 00:00 UTC\").valueOf() == -17798400000;\nfunction fuzzytime1(M) /*:Date*/ {\n\tif(!M[2]) return new Date(Date.UTC(1899,11,31,(+M[1]%12) + (M[7] == \"p\" ? 12 : 0), 0, 0, 0));\n\tif(M[3]) {\n\t\t\tif(M[4]) return new Date(Date.UTC(1899,11,31,(+M[1]%12) + (M[7] == \"p\" ? 12 : 0), +M[2], +M[4], parseFloat(M[3])*1000));\n\t\t\telse return new Date(Date.UTC(1899,11,31,(M[7] == \"p\" ? 12 : 0), +M[1], +M[2], parseFloat(M[3])*1000));\n\t}\n\telse if(M[5]) return new Date(Date.UTC(1899,11,31, (+M[1]%12) + (M[7] == \"p\" ? 12 : 0), +M[2], +M[5], M[6] ? parseFloat(M[6]) * 1000 : 0));\n\telse return new Date(Date.UTC(1899,11,31,(+M[1]%12) + (M[7] == \"p\" ? 12 : 0), +M[2], 0, 0));\n}\nfunction fuzzytime2(M) /*:Date*/ {\n\tif(!M[2]) return new Date(Date.UTC(1899,11,31,+M[1], 0, 0, 0));\n\tif(M[3]) {\n\t\t\tif(M[4]) return new Date(Date.UTC(1899,11,31,+M[1], +M[2], +M[4], parseFloat(M[3])*1000));\n\t\t\telse return new Date(Date.UTC(1899,11,31,0, +M[1], +M[2], parseFloat(M[3])*1000));\n\t}\n\telse if(M[5]) return new Date(Date.UTC(1899,11,31, +M[1], +M[2], +M[5], M[6] ? parseFloat(M[6]) * 1000 : 0));\n\telse return new Date(Date.UTC(1899,11,31,+M[1], +M[2], 0, 0));\n}\nvar lower_months = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'];\nfunction fuzzydate(s/*:string*/)/*:Date*/ {\n\t// See issue 2863 -- this is technically not supported in Excel but is otherwise useful\n\tif(FDISO.test(s)) return s.indexOf(\"Z\") == -1 ? local_to_utc(new Date(s)) : new Date(s);\n\tvar lower = s.toLowerCase();\n\tvar lnos = lower.replace(/\\s+/g, \" \").trim();\n\tvar M = lnos.match(FDRE1);\n\tif(M) return fuzzytime1(M);\n\tM = lnos.match(FDRE2);\n\tif(M) return fuzzytime2(M);\n\tM = lnos.match(pdre3);\n\tif(M) return new Date(Date.UTC(+M[1], +M[2]-1, +M[3], +M[4], +M[5], ((M[6] && parseInt(M[6].slice(1), 10))|| 0), ((M[7] && parseInt((M[7] + \"0000\").slice(1,4), 10))||0)));\n\tvar o = new Date(utc_append_works && s.indexOf(\"UTC\") == -1 ? s + \" UTC\": s), n = new Date(NaN);\n\tvar y = o.getYear(), m = o.getMonth(), d = o.getDate();\n\tif(isNaN(d)) return n;\n\tif(lower.match(/jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec/)) {\n\t\tlower = lower.replace(/[^a-z]/g,\"\").replace(/([^a-z]|^)[ap]m?([^a-z]|$)/,\"\");\n\t\tif(lower.length > 3 && lower_months.indexOf(lower) == -1) return n;\n\t} else if(lower.replace(/[ap]m?/, \"\").match(/[a-z]/)) return n;\n\tif(y < 0 || y > 8099 || s.match(/[^-0-9:,\\/\\\\\\ ]/)) return n;\n\treturn o;\n}\n\nvar split_regex = /*#__PURE__*/(function() {\n\tvar safe_split_regex = \"abacaba\".split(/(:?b)/i).length == 5;\n\treturn function split_regex(str/*:string*/, re, def/*:string*/)/*:Array<string>*/ {\n\t\tif(safe_split_regex || typeof re == \"string\") return str.split(re);\n\t\tvar p = str.split(re), o = [p[0]];\n\t\tfor(var i = 1; i < p.length; ++i) { o.push(def); o.push(p[i]); }\n\t\treturn o;\n\t};\n})();\n\nfunction utc_to_local(utc) {\n\treturn new Date(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate(), utc.getUTCHours(), utc.getUTCMinutes(), utc.getUTCSeconds(), utc.getUTCMilliseconds());\n}\nfunction local_to_utc(local) {\n\treturn new Date(Date.UTC(local.getFullYear(), local.getMonth(), local.getDate(), local.getHours(), local.getMinutes(), local.getSeconds(), local.getMilliseconds()));\n}\n\nfunction remove_doctype(str) {\n\tvar preamble = str.slice(0, 1024);\n\tvar si = preamble.indexOf(\"<!DOCTYPE\");\n\tif(si == -1) return str;\n\tvar m = str.match(/<[\\w]/);\n\tif(!m) return str;\n\treturn str.slice(0, si) + str.slice(m.index);\n}\n\n/* str.match(/<!--[\\s\\S]*?-->/g) --> str_match_ng(str, \"<!--\", \"-->\") */\nfunction str_match_ng(str, s, e) {\n  var out = [];\n\n  var si = str.indexOf(s);\n  while(si > -1) {\n    var ei = str.indexOf(e, si + s.length);\n\t\tif(ei == -1) break;\n\n\t\tout.push(str.slice(si, ei + e.length));\n\t\tsi = str.indexOf(s, ei + e.length);\n\t}\n\n  return out.length > 0 ? out : null;\n}\n\n/* str.replace(/<!--[\\s\\S]*?-->/g, \"\") --> str_remove_ng(str, \"<!--\", \"-->\") */\nfunction str_remove_ng(str, s, e) {\n  var out = [], last = 0;\n\n  var si = str.indexOf(s);\n\tif(si == -1) return str;\n  while(si > -1) {\n\t\tout.push(str.slice(last, si));\n    var ei = str.indexOf(e, si + s.length);\n\t\tif(ei == -1) break;\n\n\t\tif((si = str.indexOf(s, (last = ei + e.length))) == -1) out.push(str.slice(last));\n\t}\n\n  return out.join(\"\");\n}\n\n/* str.match(/<tag\\b[^>]*?>([\\s\\S]*?)</tag>/) --> str_match_xml(str, \"tag\") */\nvar xml_boundary = { \" \": 1, \"\\t\": 1, \"\\r\": 1, \"\\n\": 1, \">\": 1 };\nfunction str_match_xml(str, tag) {\n\tvar si = str.indexOf('<' + tag), w = tag.length + 1, L = str.length;\n\twhile(si >= 0 && si <= L - w && !xml_boundary[str.charAt(si + w)]) si = str.indexOf('<' + tag, si+1);\n\tif(si === -1) return null;\n\tvar sf = str.indexOf(\">\", si + tag.length);\n\tif(sf === -1) return null;\n\tvar et = \"</\" + tag + \">\";\n\tvar ei = str.indexOf(et, sf);\n\tif(ei == -1) return null;\n\treturn [str.slice(si, ei + et.length), str.slice(sf + 1, ei)];\n}\n\n/* str.match(/<(?:\\w+:)?tag\\b[^<>]*?>([\\s\\S]*?)<\\/(?:\\w+:)?tag>/) --> str_match_xml(str, \"tag\") */\nvar str_match_xml_ns = /*#__PURE__*/(function() {\n\tvar str_match_xml_ns_cache = {};\n\treturn function str_match_xml_ns(str, tag) {\n\t\tvar res = str_match_xml_ns_cache[tag];\n\t\tif(!res) str_match_xml_ns_cache[tag] = res = [\n\t\t\tnew RegExp('<(?:\\\\w+:)?'+tag+'\\\\b[^<>]*>', \"g\"),\n\t\t\tnew RegExp('</(?:\\\\w+:)?'+tag+'>', \"g\")\n\t\t];\n\t\tres[0].lastIndex = res[1].lastIndex = 0;\n\t\tvar m = res[0].exec(str);\n\t\tif(!m) return null;\n\t\tvar si = m.index;\n\t\tvar sf = res[0].lastIndex;\n\t\tres[1].lastIndex = res[0].lastIndex;\n\t\tm = res[1].exec(str);\n\t\tif(!m) return null;\n\t\tvar ei = m.index;\n\t\tvar ef = res[1].lastIndex;\n\t\treturn [str.slice(si, ef), str.slice(sf, ei)];\n\t};\n})();\n\n/* str.match(/<(?:\\w+:)?tag\\b[^<>]*?>([\\s\\S]*?)<\\/(?:\\w+:)?tag>/g) --> str_match_xml_ns_g(str, \"tag\") */\nvar str_match_xml_ns_g = /*#__PURE__*/(function() {\n\tvar str_match_xml_ns_cache = {};\n\treturn function str_match_xml_ns(str, tag) {\n\t\tvar out = [];\n\t\tvar res = str_match_xml_ns_cache[tag];\n\t\tif(!res) str_match_xml_ns_cache[tag] = res = [\n\t\t\tnew RegExp('<(?:\\\\w+:)?'+tag+'\\\\b[^<>]*>', \"g\"),\n\t\t\tnew RegExp('</(?:\\\\w+:)?'+tag+'>', \"g\")\n\t\t];\n\t\tres[0].lastIndex = res[1].lastIndex = 0;\n\t\tvar m;\n\t\twhile((m = res[0].exec(str))) {\n\t\t\tvar si = m.index;\n\t\t\tres[1].lastIndex = res[0].lastIndex;\n\t\t\tm = res[1].exec(str);\n\t\t\tif(!m) return null;\n\t\t\tvar ef = res[1].lastIndex;\n\t\t\tout.push(str.slice(si, ef));\n\t\t\tres[0].lastIndex = res[1].lastIndex;\n\t\t}\n\t\treturn out.length == 0 ? null : out;\n\t};\n})();\nvar str_remove_xml_ns_g = /*#__PURE__*/(function() {\n\tvar str_remove_xml_ns_cache = {};\n\treturn function str_remove_xml_ns_g(str, tag) {\n\t\tvar out = [];\n\t\tvar res = str_remove_xml_ns_cache[tag];\n\t\tif(!res) str_remove_xml_ns_cache[tag] = res = [\n\t\t\tnew RegExp('<(?:\\\\w+:)?'+tag+'\\\\b[^<>]*>', \"g\"),\n\t\t\tnew RegExp('</(?:\\\\w+:)?'+tag+'>', \"g\")\n\t\t];\n\t\tres[0].lastIndex = res[1].lastIndex = 0;\n\t\tvar m;\n\t\tvar si = 0, ef = 0;\n\t\twhile((m = res[0].exec(str))) {\n\t\t\tsi = m.index;\n\t\t\tout.push(str.slice(ef, si));\n\t\t\tef = si;\n\t\t\tres[1].lastIndex = res[0].lastIndex;\n\t\t\tm = res[1].exec(str);\n\t\t\tif(!m) return null;\n\t\t\tef = res[1].lastIndex;\n\t\t\tres[0].lastIndex = res[1].lastIndex;\n\t\t}\n\t\tout.push(str.slice(ef));\n\t\treturn out.length == 0 ? \"\" : out.join(\"\");\n\t};\n})();\n\n/* str.match(/<(?:\\w+:)?tag\\b[^>]*?>([\\s\\S]*?)<\\/(?:\\w+:)?tag>/gi) --> str_match_xml_ns_ig(str, \"tag\") */\nvar str_match_xml_ig = /*#__PURE__*/(function() {\n\tvar str_match_xml_ns_cache = {};\n\treturn function str_match_xml_ns(str, tag) {\n\t\tvar out = [];\n\t\tvar res = str_match_xml_ns_cache[tag];\n\t\tif(!res) str_match_xml_ns_cache[tag] = res = [\n\t\t\tnew RegExp('<'+tag+'\\\\b[^<>]*>', \"ig\"),\n\t\t\tnew RegExp('</'+tag+'>', \"ig\")\n\t\t];\n\t\tres[0].lastIndex = res[1].lastIndex = 0;\n\t\tvar m;\n\t\twhile((m = res[0].exec(str))) {\n\t\t\tvar si = m.index;\n\t\t\tres[1].lastIndex = res[0].lastIndex;\n\t\t\tm = res[1].exec(str);\n\t\t\tif(!m) return null;\n\t\t\tvar ef = res[1].lastIndex;\n\t\t\tout.push(str.slice(si, ef));\n\t\t\tres[0].lastIndex = res[1].lastIndex;\n\t\t}\n\t\treturn out.length == 0 ? null : out;\n\t};\n})();\nfunction getdatastr(data)/*:?string*/ {\n\tif(!data) return null;\n\tif(data.content && data.type) return cc2str(data.content, true);\n\tif(data.data) return debom(data.data);\n\tif(data.asNodeBuffer && has_buf) return debom(data.asNodeBuffer().toString('binary'));\n\tif(data.asBinary) return debom(data.asBinary());\n\tif(data._data && data._data.getContent) return debom(cc2str(Array.prototype.slice.call(data._data.getContent(),0)));\n\treturn null;\n}\n\nfunction getdatabin(data) {\n\tif(!data) return null;\n\tif(data.data) return char_codes(data.data);\n\tif(data.asNodeBuffer && has_buf) return data.asNodeBuffer();\n\tif(data._data && data._data.getContent) {\n\t\tvar o = data._data.getContent();\n\t\tif(typeof o == \"string\") return char_codes(o);\n\t\treturn Array.prototype.slice.call(o);\n\t}\n\tif(data.content && data.type) return data.content;\n\treturn null;\n}\n\nfunction getdata(data) { return (data && data.name.slice(-4) === \".bin\") ? getdatabin(data) : getdatastr(data); }\n\n/* Part 2 Section 10.1.2 \"Mapping Content Types\" Names are case-insensitive */\n/* OASIS does not comment on filename case sensitivity */\nfunction safegetzipfile(zip, file/*:string*/) {\n\tvar k = zip.FullPaths || keys(zip.files);\n\tvar f = file.toLowerCase().replace(/[\\/]/g, '\\\\'), g = f.replace(/\\\\/g,'\\/');\n\tfor(var i=0; i<k.length; ++i) {\n\t\tvar n = k[i].replace(/^Root Entry[\\/]/,\"\").toLowerCase();\n\t\tif(f == n || g == n) return zip.files ? zip.files[k[i]] : zip.FileIndex[i];\n\t}\n\treturn null;\n}\n\nfunction getzipfile(zip, file/*:string*/) {\n\tvar o = safegetzipfile(zip, file);\n\tif(o == null) throw new Error(\"Cannot find file \" + file + \" in zip\");\n\treturn o;\n}\n\nfunction getzipdata(zip, file/*:string*/, safe/*:?boolean*/)/*:any*/ {\n\tif(!safe) return getdata(getzipfile(zip, file));\n\tif(!file) return null;\n\ttry { return getzipdata(zip, file); } catch(e) { return null; }\n}\n\nfunction getzipstr(zip, file/*:string*/, safe/*:?boolean*/)/*:?string*/ {\n\tif(!safe) return getdatastr(getzipfile(zip, file));\n\tif(!file) return null;\n\ttry { return getzipstr(zip, file); } catch(e) { return null; }\n}\n\nfunction getzipbin(zip, file/*:string*/, safe/*:?boolean*/)/*:any*/ {\n\tif(!safe) return getdatabin(getzipfile(zip, file));\n\tif(!file) return null;\n\ttry { return getzipbin(zip, file); } catch(e) { return null; }\n}\n\nfunction zipentries(zip) {\n\tvar k = zip.FullPaths || keys(zip.files), o = [];\n\tfor(var i = 0; i < k.length; ++i) if(k[i].slice(-1) != '/') o.push(k[i].replace(/^Root Entry[\\/]/, \"\"));\n\treturn o.sort();\n}\n\nfunction zip_add_file(zip, path, content) {\n\tif(zip.FullPaths) {\n\t\tif(typeof content == \"string\") {\n\t\t\tvar res;\n\t\t\tif(has_buf) res = Buffer_from(content);\n\t\t\t/* TODO: investigate performance in Edge 13 */\n\t\t\t//else if(typeof TextEncoder !== \"undefined\") res = new TextEncoder().encode(content);\n\t\t\telse res = utf8decode(content);\n\t\t\treturn CFB.utils.cfb_add(zip, path, res);\n\t\t}\n\t\tCFB.utils.cfb_add(zip, path, content);\n\t}\n\telse zip.file(path, content);\n}\n\nfunction zip_new() { return CFB.utils.cfb_new(); }\n\nfunction zip_read(d, o) {\n\tswitch(o.type) {\n\t\tcase \"base64\": return CFB.read(d, { type: \"base64\" });\n\t\tcase \"binary\": return CFB.read(d, { type: \"binary\" });\n\t\tcase \"buffer\": case \"array\": return CFB.read(d, { type: \"buffer\" });\n\t}\n\tthrow new Error(\"Unrecognized type \" + o.type);\n}\n\nfunction resolve_path(path/*:string*/, base/*:string*/)/*:string*/ {\n\tif(path.charAt(0) == \"/\") return path.slice(1);\n\tvar result = base.split('/');\n\tif(base.slice(-1) != \"/\") result.pop(); // folder path\n\tvar target = path.split('/');\n\twhile (target.length !== 0) {\n\t\tvar step = target.shift();\n\t\tif (step === '..') result.pop();\n\t\telse if (step !== '.') result.push(step);\n\t}\n\treturn result.join('/');\n}\nvar XML_HEADER = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\r\\n';\nvar attregexg=/\\s([^\"\\s?>\\/]+)\\s*=\\s*((?:\")([^\"]*)(?:\")|(?:')([^']*)(?:')|([^'\">\\s]+))/g;\nvar tagregex1=/<[\\/\\?]?[a-zA-Z0-9:_-]+(?:\\s+[^\"\\s?<>\\/]+\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^'\"<>\\s=]+))*\\s*[\\/\\?]?>/mg, tagregex2 = /<[^<>]*>/g;\nvar tagregex = /*#__PURE__*/XML_HEADER.match(tagregex1) ? tagregex1 : tagregex2;\nvar nsregex=/<\\w*:/, nsregex2 = /<(\\/?)\\w+:/;\nfunction parsexmltag(tag/*:string*/, skip_root/*:?boolean*/, skip_LC/*:?boolean*/)/*:any*/ {\n\tvar z = ({}/*:any*/);\n\tvar eq = 0, c = 0;\n\tfor(; eq !== tag.length; ++eq) if((c = tag.charCodeAt(eq)) === 32 || c === 10 || c === 13) break;\n\tif(!skip_root) z[0] = tag.slice(0, eq);\n\tif(eq === tag.length) return z;\n\tvar m = tag.match(attregexg), j=0, v=\"\", i=0, q=\"\", cc=\"\", quot = 1;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\tcc = m[i].slice(1);\n\t\tfor(c=0; c != cc.length; ++c) if(cc.charCodeAt(c) === 61) break;\n\t\tq = cc.slice(0,c).trim();\n\t\twhile(cc.charCodeAt(c+1) == 32) ++c;\n\t\tquot = ((eq=cc.charCodeAt(c+1)) == 34 || eq == 39) ? 1 : 0;\n\t\tv = cc.slice(c+1+quot, cc.length-quot);\n\t\tfor(j=0;j!=q.length;++j) if(q.charCodeAt(j) === 58) break;\n\t\tif(j===q.length) {\n\t\t\tif(q.indexOf(\"_\") > 0) q = q.slice(0, q.indexOf(\"_\")); // from ods\n\t\t\tz[q] = v;\n\t\t\tif(!skip_LC) z[q.toLowerCase()] = v;\n\t\t}\n\t\telse {\n\t\t\tvar k = (j===5 && q.slice(0,5)===\"xmlns\"?\"xmlns\":\"\")+q.slice(j+1);\n\t\t\tif(z[k] && q.slice(j-3,j) == \"ext\") continue; // from ods\n\t\t\tz[k] = v;\n\t\t\tif(!skip_LC) z[k.toLowerCase()] = v;\n\t\t}\n\t}\n\treturn z;\n}\nfunction strip_ns(x/*:string*/)/*:string*/ { return x.replace(nsregex2, \"<$1\"); }\n\nvar encodings = {\n\t'&quot;': '\"',\n\t'&apos;': \"'\",\n\t'&gt;': '>',\n\t'&lt;': '<',\n\t'&amp;': '&'\n};\nvar rencoding = /*#__PURE__*/evert(encodings);\n//var rencstr = \"&<>'\\\"\".split(\"\");\n\n// TODO: CP remap (need to read file version to determine OS)\nvar unescapexml/*:StringConv*/ = /*#__PURE__*/(function() {\n\t/* 22.4.2.4 bstr (Basic String) */\n\tvar encregex = /&(?:quot|apos|gt|lt|amp|#x?([\\da-fA-F]+));/ig, coderegex = /_x([\\da-fA-F]{4})_/ig;\n\tfunction raw_unescapexml(text/*:string*/)/*:string*/ {\n\t\tvar s = text + '', i = s.indexOf(\"<![CDATA[\");\n\t\tif(i == -1) return s.replace(encregex, function($$, $1) { return encodings[$$]||String.fromCharCode(parseInt($1,$$.indexOf(\"x\")>-1?16:10))||$$; }).replace(coderegex,function(m,c) {return String.fromCharCode(parseInt(c,16));});\n\t\tvar j = s.indexOf(\"]]>\");\n\t\treturn raw_unescapexml(s.slice(0, i)) + s.slice(i+9,j) + raw_unescapexml(s.slice(j+3));\n\t}\n\treturn function unescapexml(text/*:string*/, xlsx/*:boolean*/) {\n\t\tvar out = raw_unescapexml(text);\n\t\treturn xlsx ? out.replace(/\\r\\n/g, \"\\n\") : out;\n\t};\n})();\n\nvar decregex=/[&<>'\"]/g, charegex = /[\\u0000-\\u0008\\u000b-\\u001f\\uFFFE-\\uFFFF]/g;\nfunction escapexml(text/*:string*/)/*:string*/{\n\tvar s = text + '';\n\treturn s.replace(decregex, function(y) { return rencoding[y]; }).replace(charegex,function(s) { return \"_x\" + (\"000\"+s.charCodeAt(0).toString(16)).slice(-4) + \"_\";});\n}\nfunction escapexmltag(text/*:string*/)/*:string*/{ return escapexml(text).replace(/ /g,\"_x0020_\"); }\n\nvar htmlcharegex = /[\\u0000-\\u001f]/g;\nfunction escapehtml(text/*:string*/)/*:string*/{\n\tvar s = text + '';\n\treturn s.replace(decregex, function(y) { return rencoding[y]; }).replace(/\\n/g, \"<br/>\").replace(htmlcharegex,function(s) { return \"&#x\" + (\"000\"+s.charCodeAt(0).toString(16)).slice(-4) + \";\"; });\n}\n\nfunction escapexlml(text/*:string*/)/*:string*/{\n\tvar s = text + '';\n\treturn s.replace(decregex, function(y) { return rencoding[y]; }).replace(htmlcharegex,function(s) { return \"&#x\" + (s.charCodeAt(0).toString(16)).toUpperCase() + \";\"; });\n}\n\n/* TODO: handle codepages */\nvar xlml_fixstr/*:StringConv*/ = /*#__PURE__*/(function() {\n\tvar entregex = /&#(\\d+);/g;\n\tfunction entrepl($$/*:string*/,$1/*:string*/)/*:string*/ { return String.fromCharCode(parseInt($1,10)); }\n\treturn function xlml_fixstr(str/*:string*/)/*:string*/ { return str.replace(entregex,entrepl); };\n})();\nfunction xlml_unfixstr(str/*:string*/)/*:string*/ { return str.replace(/(\\r\\n|[\\r\\n])/g,\"\\&#10;\"); }\n\n/* note: xsd:boolean valid values: true / 1 / false / 0 */\nfunction parsexmlbool(value/*:any*/)/*:boolean*/ {\n\tswitch(value) {\n\t\tcase 1: case true:  case '1': case 'true':  return true;\n\t\tcase 0: case false: case '0': case 'false': return false;\n\t\t//default: throw new Error(\"Invalid xsd:boolean \" + value);\n\t}\n\treturn false;\n}\n\nfunction utf8reada(orig/*:string*/)/*:string*/ {\n\tvar out = \"\", i = 0, c = 0, d = 0, e = 0, f = 0, w = 0;\n\twhile (i < orig.length) {\n\t\tc = orig.charCodeAt(i++);\n\t\tif (c < 128) { out += String.fromCharCode(c); continue; }\n\t\td = orig.charCodeAt(i++);\n\t\tif (c>191 && c<224) { f = ((c & 31) << 6); f |= (d & 63); out += String.fromCharCode(f); continue; }\n\t\te = orig.charCodeAt(i++);\n\t\tif (c < 240) { out += String.fromCharCode(((c & 15) << 12) | ((d & 63) << 6) | (e & 63)); continue; }\n\t\tf = orig.charCodeAt(i++);\n\t\tw = (((c & 7) << 18) | ((d & 63) << 12) | ((e & 63) << 6) | (f & 63))-65536;\n\t\tout += String.fromCharCode(0xD800 + ((w>>>10)&1023));\n\t\tout += String.fromCharCode(0xDC00 + (w&1023));\n\t}\n\treturn out;\n}\n\nfunction utf8readb(data) {\n\tvar out = new_raw_buf(2*data.length), w, i, j = 1, k = 0, ww=0, c;\n\tfor(i = 0; i < data.length; i+=j) {\n\t\tj = 1;\n\t\tif((c=data.charCodeAt(i)) < 128) w = c;\n\t\telse if(c < 224) { w = (c&31)*64+(data.charCodeAt(i+1)&63); j=2; }\n\t\telse if(c < 240) { w=(c&15)*4096+(data.charCodeAt(i+1)&63)*64+(data.charCodeAt(i+2)&63); j=3; }\n\t\telse { j = 4;\n\t\t\tw = (c & 7)*262144+(data.charCodeAt(i+1)&63)*4096+(data.charCodeAt(i+2)&63)*64+(data.charCodeAt(i+3)&63);\n\t\t\tw -= 65536; ww = 0xD800 + ((w>>>10)&1023); w = 0xDC00 + (w&1023);\n\t\t}\n\t\tif(ww !== 0) { out[k++] = ww&255; out[k++] = ww>>>8; ww = 0; }\n\t\tout[k++] = w%256; out[k++] = w>>>8;\n\t}\n\treturn out.slice(0,k).toString('ucs2');\n}\n\nfunction utf8readc(data) { return Buffer_from(data, 'binary').toString('utf8'); }\n\nvar utf8corpus = \"foo bar baz\\u00e2\\u0098\\u0083\\u00f0\\u009f\\u008d\\u00a3\";\nvar utf8read = has_buf && (/*#__PURE__*/utf8readc(utf8corpus) == /*#__PURE__*/utf8reada(utf8corpus) && utf8readc || /*#__PURE__*/utf8readb(utf8corpus) == /*#__PURE__*/utf8reada(utf8corpus) && utf8readb) || utf8reada;\n\nvar utf8write/*:StringConv*/ = has_buf ? function(data) { return Buffer_from(data, 'utf8').toString(\"binary\"); } : function(orig/*:string*/)/*:string*/ {\n\tvar out/*:Array<string>*/ = [], i = 0, c = 0, d = 0;\n\twhile(i < orig.length) {\n\t\tc = orig.charCodeAt(i++);\n\t\tswitch(true) {\n\t\t\tcase c < 128: out.push(String.fromCharCode(c)); break;\n\t\t\tcase c < 2048:\n\t\t\t\tout.push(String.fromCharCode(192 + (c >> 6)));\n\t\t\t\tout.push(String.fromCharCode(128 + (c & 63)));\n\t\t\t\tbreak;\n\t\t\tcase c >= 55296 && c < 57344:\n\t\t\t\tc -= 55296; d = orig.charCodeAt(i++) - 56320 + (c<<10);\n\t\t\t\tout.push(String.fromCharCode(240 + ((d >>18) & 7)));\n\t\t\t\tout.push(String.fromCharCode(144 + ((d >>12) & 63)));\n\t\t\t\tout.push(String.fromCharCode(128 + ((d >> 6) & 63)));\n\t\t\t\tout.push(String.fromCharCode(128 + (d & 63)));\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tout.push(String.fromCharCode(224 + (c >> 12)));\n\t\t\t\tout.push(String.fromCharCode(128 + ((c >> 6) & 63)));\n\t\t\t\tout.push(String.fromCharCode(128 + (c & 63)));\n\t\t}\n\t}\n\treturn out.join(\"\");\n};\n\nvar htmldecode/*:{(s:string):string}*/ = /*#__PURE__*/(function() {\n\tvar entities/*:Array<[RegExp, string]>*/ = [\n\t\t['nbsp', ' '], ['middot', '·'],\n\t\t['quot', '\"'], ['apos', \"'\"], ['gt',   '>'], ['lt',   '<'], ['amp',  '&']\n\t].map(function(x/*:[string, string]*/) { return [new RegExp('&' + x[0] + ';', \"ig\"), x[1]]; });\n\treturn function htmldecode(str/*:string*/)/*:string*/ {\n\t\tvar o = str\n\t\t\t\t// Remove new lines and spaces from start of content\n\t\t\t\t.replace(/^[\\t\\n\\r ]+/, \"\")\n\t\t\t\t// Remove new lines and spaces from end of content\n\t\t\t\t.replace(/(^|[^\\t\\n\\r ])[\\t\\n\\r ]+$/,\"$1\")\n\t\t\t\t// Added line which removes any white space characters after and before html tags\n\t\t\t\t.replace(/>\\s+/g,\">\").replace(/\\b\\s+</g,\"<\")\n\t\t\t\t// Replace remaining new lines and spaces with space\n\t\t\t\t.replace(/[\\t\\n\\r ]+/g, \" \")\n\t\t\t\t// Replace <br> tags with new lines\n\t\t\t\t.replace(/<\\s*[bB][rR]\\s*\\/?>/g,\"\\n\")\n\t\t\t\t// Strip HTML elements\n\t\t\t\t.replace(/<[^<>]*>/g,\"\");\n\t\tfor(var i = 0; i < entities.length; ++i) o = o.replace(entities[i][0], entities[i][1]);\n\t\treturn o;\n\t};\n})();\n\nvar vtvregex = /<\\/?(?:vt:)?variant>/g, vtmregex = /<(?:vt:)([^<\"'>]*)>([\\s\\S]*)</;\nfunction parseVector(data/*:string*/, opts)/*:Array<{v:string,t:string}>*/ {\n\tvar h = parsexmltag(data);\n\n\tvar matches/*:Array<string>*/ = str_match_xml_ns_g(data, h.baseType)||[];\n\tvar res/*:Array<any>*/ = [];\n\tif(matches.length != h.size) {\n\t\tif(opts.WTF) throw new Error(\"unexpected vector length \" + matches.length + \" != \" + h.size);\n\t\treturn res;\n\t}\n\tmatches.forEach(function(x/*:string*/) {\n\t\tvar v = x.replace(vtvregex,\"\").match(vtmregex);\n\t\tif(v) res.push({v:utf8read(v[2]), t:v[1]});\n\t});\n\treturn res;\n}\n\nvar wtregex = /(^\\s|\\s$|\\n)/;\nfunction writetag(f/*:string*/,g/*:string*/)/*:string*/ { return '<' + f + (g.match(wtregex)?' xml:space=\"preserve\"' : \"\") + '>' + g + '</' + f + '>'; }\n\nfunction wxt_helper(h)/*:string*/ { return keys(h).map(function(k) { return \" \" + k + '=\"' + h[k] + '\"';}).join(\"\"); }\nfunction writextag(f/*:string*/,g/*:?string*/,h) { return '<' + f + ((h != null) ? wxt_helper(h) : \"\") + ((g != null) ? (g.match(wtregex)?' xml:space=\"preserve\"' : \"\") + '>' + g + '</' + f : \"/\") + '>';}\n\nfunction write_w3cdtf(d/*:Date*/, t/*:?boolean*/)/*:string*/ { try { return d.toISOString().replace(/\\.\\d*/,\"\"); } catch(e) { if(t) throw e; } return \"\"; }\n\nfunction write_vt(s, xlsx/*:?boolean*/)/*:string*/ {\n\tswitch(typeof s) {\n\t\tcase 'string':\n\t\t\tvar o = writextag('vt:lpwstr', escapexml(s));\n\t\t\tif(xlsx) o = o.replace(/&quot;/g, \"_x0022_\");\n\t\t\treturn o;\n\t\tcase 'number': return writextag((s|0)==s?'vt:i4':'vt:r8', escapexml(String(s)));\n\t\tcase 'boolean': return writextag('vt:bool',s?'true':'false');\n\t}\n\tif(s instanceof Date) return writextag('vt:filetime', write_w3cdtf(s));\n\tthrow new Error(\"Unable to serialize \" + s);\n}\n\nfunction xlml_normalize(d)/*:string*/ {\n\tif(has_buf &&/*::typeof Buffer !== \"undefined\" && d != null && d instanceof Buffer &&*/ Buffer.isBuffer(d)) return d.toString('utf8');\n\tif(typeof d === 'string') return d;\n\t/* duktape */\n\tif(typeof Uint8Array !== 'undefined' && d instanceof Uint8Array) return utf8read(a2s(ab2a(d)));\n\tthrow new Error(\"Bad input format: expected Buffer or string\");\n}\n/* UOS uses CJK in tags, ODS uses invalid XML */\nvar xlmlregex = /<([\\/]?)([^\\s?><!\\/:\"]*:|)([^\\s?<>:\\/\"]+)(?:\\s+[^<>=?\"'\\s]+=\"[^\"]*?\")*\\s*[\\/]?>/mg;\n\nvar XMLNS = ({\n\tCORE_PROPS: 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties',\n\tCUST_PROPS: \"http://schemas.openxmlformats.org/officeDocument/2006/custom-properties\",\n\tEXT_PROPS: \"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\",\n\tCT: 'http://schemas.openxmlformats.org/package/2006/content-types',\n\tRELS: 'http://schemas.openxmlformats.org/package/2006/relationships',\n\tTCMNT: 'http://schemas.microsoft.com/office/spreadsheetml/2018/threadedcomments',\n\t'dc': 'http://purl.org/dc/elements/1.1/',\n\t'dcterms': 'http://purl.org/dc/terms/',\n\t'dcmitype': 'http://purl.org/dc/dcmitype/',\n\t'mx': 'http://schemas.microsoft.com/office/mac/excel/2008/main',\n\t'r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n\t'sjs': 'http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties',\n\t'vt': 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes',\n\t'xsi': 'http://www.w3.org/2001/XMLSchema-instance',\n\t'xsd': 'http://www.w3.org/2001/XMLSchema'\n}/*:any*/);\n\nvar XMLNS_main = [\n\t'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n\t'http://purl.oclc.org/ooxml/spreadsheetml/main',\n\t'http://schemas.microsoft.com/office/excel/2006/main',\n\t'http://schemas.microsoft.com/office/excel/2006/2'\n];\n\nvar XLMLNS = ({\n\t'o':    'urn:schemas-microsoft-com:office:office',\n\t'x':    'urn:schemas-microsoft-com:office:excel',\n\t'ss':   'urn:schemas-microsoft-com:office:spreadsheet',\n\t'dt':   'uuid:C2F41010-65B3-11d1-A29F-00AA00C14882',\n\t'mv':   'http://macVmlSchemaUri',\n\t'v':    'urn:schemas-microsoft-com:vml',\n\t'html': 'http://www.w3.org/TR/REC-html40'\n}/*:any*/);\nfunction read_double_le(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ {\n\tvar s = 1 - 2 * (b[idx + 7] >>> 7);\n\tvar e = ((b[idx + 7] & 0x7f) << 4) + ((b[idx + 6] >>> 4) & 0x0f);\n\tvar m = (b[idx+6]&0x0f);\n\tfor(var i = 5; i >= 0; --i) m = m * 256 + b[idx + i];\n\tif(e == 0x7ff) return m == 0 ? (s * Infinity) : NaN;\n\tif(e == 0) e = -1022;\n\telse { e -= 1023; m += Math.pow(2,52); }\n\treturn s * Math.pow(2, e - 52) * m;\n}\n\nfunction write_double_le(b/*:RawBytes|CFBlob*/, v/*:number*/, idx/*:number*/) {\n\tvar bs = ((((v < 0) || (1/v == -Infinity)) ? 1 : 0) << 7), e = 0, m = 0;\n\tvar av = bs ? (-v) : v;\n\tif(!isFinite(av)) { e = 0x7ff; m = isNaN(v) ? 0x6969 : 0; }\n\telse if(av == 0) e = m = 0;\n\telse {\n\t\te = Math.floor(Math.log(av) / Math.LN2);\n\t\tm = av * Math.pow(2, 52 - e);\n\t\tif((e <= -1023) && (!isFinite(m) || (m < Math.pow(2,52)))) { e = -1022; }\n\t\telse { m -= Math.pow(2,52); e+=1023; }\n\t}\n\tfor(var i = 0; i <= 5; ++i, m/=256) b[idx + i] = m & 0xff;\n\tb[idx + 6] = ((e & 0x0f) << 4) | (m & 0xf);\n\tb[idx + 7] = (e >> 4) | bs;\n}\n\nvar ___toBuffer = function(bufs/*:Array<Array<RawBytes> >*/)/*:RawBytes*/ { var x=[],w=10240; for(var i=0;i<bufs[0].length;++i) if(bufs[0][i]) for(var j=0,L=bufs[0][i].length;j<L;j+=w) x.push.apply(x, bufs[0][i].slice(j,j+w)); return x; };\nvar __toBuffer = has_buf ? function(bufs) { return (bufs[0].length > 0 && Buffer.isBuffer(bufs[0][0])) ? Buffer.concat(bufs[0].map(function(x) { return Buffer.isBuffer(x) ? x : Buffer_from(x); })) : ___toBuffer(bufs);} : ___toBuffer;\n\nvar ___utf16le = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/)/*:string*/ { var ss/*:Array<string>*/=[]; for(var i=s; i<e; i+=2) ss.push(String.fromCharCode(__readUInt16LE(b,i))); return ss.join(\"\").replace(chr0,''); };\nvar __utf16le = has_buf ? function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/)/*:string*/ { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/ || !buf_utf16le) return ___utf16le(b,s,e); return b.toString('utf16le',s,e).replace(chr0,'')/*.replace(chr1,'!')*/; } : ___utf16le;\n\nvar ___hexlify = function(b/*:RawBytes|CFBlob*/,s/*:number*/,l/*:number*/)/*:string*/ { var ss/*:Array<string>*/=[]; for(var i=s; i<s+l; ++i) ss.push((\"0\" + b[i].toString(16)).slice(-2)); return ss.join(\"\"); };\nvar __hexlify = has_buf ? function(b/*:RawBytes|CFBlob*/,s/*:number*/,l/*:number*/)/*:string*/ { return Buffer.isBuffer(b)/*:: && b instanceof Buffer*/ ? b.toString('hex',s,s+l) : ___hexlify(b,s,l); } : ___hexlify;\n\nvar ___utf8 = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/) { var ss=[]; for(var i=s; i<e; i++) ss.push(String.fromCharCode(__readUInt8(b,i))); return ss.join(\"\"); };\nvar __utf8 = has_buf ? function utf8_b(b/*:RawBytes|CFBlob*/, s/*:number*/, e/*:number*/) { return (Buffer.isBuffer(b)/*:: && (b instanceof Buffer)*/) ? b.toString('utf8',s,e) : ___utf8(b,s,e); } : ___utf8;\n\nvar ___lpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : \"\";};\nvar __lpstr = ___lpstr;\n\nvar ___cpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : \"\";};\nvar __cpstr = ___cpstr;\n\nvar ___lpwstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = 2*__readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : \"\";};\nvar __lpwstr = ___lpwstr;\n\nvar ___lpp4 = function lpp4_(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf16le(b, i+4,i+4+len) : \"\";};\nvar __lpp4 = ___lpp4;\n\nvar ___8lpp4 = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len) : \"\";};\nvar __8lpp4 = ___8lpp4;\n\nvar ___double = function(b/*:RawBytes|CFBlob*/, idx/*:number*/) { return read_double_le(b, idx);};\nvar __double = ___double;\n\nvar is_buf = function is_buf_a(a) { return Array.isArray(a) || (typeof Uint8Array !== \"undefined\" && a instanceof Uint8Array); };\n\nif(has_buf/*:: && typeof Buffer !== 'undefined'*/) {\n\t__lpstr = function lpstr_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___lpstr(b, i); var len = b.readUInt32LE(i); return len > 0 ? b.toString('utf8',i+4,i+4+len-1) : \"\";};\n\t__cpstr = function cpstr_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___cpstr(b, i); var len = b.readUInt32LE(i); return len > 0 ? b.toString('utf8',i+4,i+4+len-1) : \"\";};\n\t__lpwstr = function lpwstr_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/ || !buf_utf16le) return ___lpwstr(b, i); var len = 2*b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len-1);};\n\t__lpp4 = function lpp4_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/ || !buf_utf16le) return ___lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len);};\n\t__8lpp4 = function lpp4_8b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___8lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf8',i+4,i+4+len);};\n\t__double = function double_(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(Buffer.isBuffer(b)/*::&& b instanceof Buffer*/) return b.readDoubleLE(i); return ___double(b,i); };\n\tis_buf = function is_buf_b(a) { return Buffer.isBuffer(a) || Array.isArray(a) || (typeof Uint8Array !== \"undefined\" && a instanceof Uint8Array); };\n}\n\n/* from js-xls */\nfunction cpdoit() {\n\t__utf16le = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/) { return $cptable.utils.decode(1200, b.slice(s,e)).replace(chr0, ''); };\n\t__utf8 = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/) { return $cptable.utils.decode(65001, b.slice(s,e)); };\n\t__lpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(current_ansi, b.slice(i+4, i+4+len-1)) : \"\";};\n\t__cpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(current_codepage, b.slice(i+4, i+4+len-1)) : \"\";};\n\t__lpwstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = 2*__readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(1200, b.slice(i+4,i+4+len-1)) : \"\";};\n\t__lpp4 = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(1200, b.slice(i+4,i+4+len)) : \"\";};\n\t__8lpp4 = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(65001, b.slice(i+4,i+4+len)) : \"\";};\n}\nif(typeof $cptable !== 'undefined') cpdoit();\n\nvar __readUInt8 = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return b[idx]; };\nvar __readUInt16LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return (b[idx+1]*(1<<8))+b[idx]; };\nvar __readInt16LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { var u = (b[idx+1]*(1<<8))+b[idx]; return (u < 0x8000) ? u : ((0xffff - u + 1) * -1); };\nvar __readUInt32LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return b[idx+3]*(1<<24)+(b[idx+2]<<16)+(b[idx+1]<<8)+b[idx]; };\nvar __readInt32LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return (b[idx+3]<<24)|(b[idx+2]<<16)|(b[idx+1]<<8)|b[idx]; };\nvar __readInt32BE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return (b[idx]<<24)|(b[idx+1]<<16)|(b[idx+2]<<8)|b[idx+3]; };\n\nfunction ReadShift(size/*:number*/, t/*:?string*/)/*:number|string*/ {\n\tvar o=\"\", oI/*:: :number = 0*/, oR, oo=[], w, vv, i, loc;\n\tswitch(t) {\n\t\tcase 'dbcs':\n\t\t\tloc = this.l;\n\t\t\tif(has_buf && Buffer.isBuffer(this)  && buf_utf16le) o = this.slice(this.l, this.l+2*size).toString(\"utf16le\");\n\t\t\telse for(i = 0; i < size; ++i) { o+=String.fromCharCode(__readUInt16LE(this, loc)); loc+=2; }\n\t\t\tsize *= 2;\n\t\t\tbreak;\n\n\t\tcase 'utf8': o = __utf8(this, this.l, this.l + size); break;\n\t\tcase 'utf16le': size *= 2; o = __utf16le(this, this.l, this.l + size); break;\n\n\t\tcase 'wstr':\n\t\t\tif(typeof $cptable !== 'undefined') o = $cptable.utils.decode(current_codepage, this.slice(this.l, this.l+2*size));\n\t\t\telse return ReadShift.call(this, size, 'dbcs');\n\t\t\tsize = 2 * size; break;\n\n\t\t/* [MS-OLEDS] 2.1.4 LengthPrefixedAnsiString */\n\t\tcase 'lpstr-ansi': o = __lpstr(this, this.l); size = 4 + __readUInt32LE(this, this.l); break;\n\t\tcase 'lpstr-cp': o = __cpstr(this, this.l); size = 4 + __readUInt32LE(this, this.l); break;\n\t\t/* [MS-OLEDS] 2.1.5 LengthPrefixedUnicodeString */\n\t\tcase 'lpwstr': o = __lpwstr(this, this.l); size = 4 + 2 * __readUInt32LE(this, this.l); break;\n\t\t/* [MS-OFFCRYPTO] 2.1.2 Length-Prefixed Padded Unicode String (UNICODE-LP-P4) */\n\t\tcase 'lpp4': size = 4 +  __readUInt32LE(this, this.l); o = __lpp4(this, this.l); if(size & 0x02) size += 2; break;\n\t\t/* [MS-OFFCRYPTO] 2.1.3 Length-Prefixed UTF-8 String (UTF-8-LP-P4) */\n\t\tcase '8lpp4': size = 4 +  __readUInt32LE(this, this.l); o = __8lpp4(this, this.l); if(size & 0x03) size += 4 - (size & 0x03); break;\n\n\t\tcase 'cstr': size = 0; o = \"\";\n\t\t\twhile((w=__readUInt8(this, this.l + size++))!==0) oo.push(_getchar(w));\n\t\t\to = oo.join(\"\"); break;\n\t\tcase '_wstr': size = 0; o = \"\";\n\t\t\twhile((w=__readUInt16LE(this,this.l +size))!==0){oo.push(_getchar(w));size+=2;}\n\t\t\tsize+=2; o = oo.join(\"\"); break;\n\n\t\t/* sbcs and dbcs support continue records in the SST way TODO codepages */\n\t\tcase 'dbcs-cont': o = \"\"; loc = this.l;\n\t\t\tfor(i = 0; i < size; ++i) {\n\t\t\t\tif(this.lens && this.lens.indexOf(loc) !== -1) {\n\t\t\t\t\tw = __readUInt8(this, loc);\n\t\t\t\t\tthis.l = loc + 1;\n\t\t\t\t\tvv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont');\n\t\t\t\t\treturn oo.join(\"\") + vv;\n\t\t\t\t}\n\t\t\t\too.push(_getchar(__readUInt16LE(this, loc)));\n\t\t\t\tloc+=2;\n\t\t\t} o = oo.join(\"\"); size *= 2; break;\n\n\t\tcase 'cpstr':\n\t\t\tif(typeof $cptable !== 'undefined') {\n\t\t\t\to = $cptable.utils.decode(current_codepage, this.slice(this.l, this.l + size));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t/* falls through */\n\t\tcase 'sbcs-cont': o = \"\"; loc = this.l;\n\t\t\tfor(i = 0; i != size; ++i) {\n\t\t\t\tif(this.lens && this.lens.indexOf(loc) !== -1) {\n\t\t\t\t\tw = __readUInt8(this, loc);\n\t\t\t\t\tthis.l = loc + 1;\n\t\t\t\t\tvv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont');\n\t\t\t\t\treturn oo.join(\"\") + vv;\n\t\t\t\t}\n\t\t\t\too.push(_getchar(__readUInt8(this, loc)));\n\t\t\t\tloc+=1;\n\t\t\t} o = oo.join(\"\"); break;\n\n\t\tdefault:\n\tswitch(size) {\n\t\tcase 1: oI = __readUInt8(this, this.l); this.l++; return oI;\n\t\tcase 2: oI = (t === 'i' ? __readInt16LE : __readUInt16LE)(this, this.l); this.l += 2; return oI;\n\t\tcase 4: case -4:\n\t\t\tif(t === 'i' || ((this[this.l+3] & 0x80)===0)) { oI = ((size > 0) ? __readInt32LE : __readInt32BE)(this, this.l); this.l += 4; return oI; }\n\t\t\telse { oR = __readUInt32LE(this, this.l); this.l += 4; } return oR;\n\t\tcase 8: case -8:\n\t\t\tif(t === 'f') {\n\t\t\t\tif(size == 8) oR = __double(this, this.l);\n\t\t\t\telse oR = __double([this[this.l+7],this[this.l+6],this[this.l+5],this[this.l+4],this[this.l+3],this[this.l+2],this[this.l+1],this[this.l+0]], 0);\n\t\t\t\tthis.l += 8; return oR;\n\t\t\t} else size = 8;\n\t\t/* falls through */\n\t\tcase 16: o = __hexlify(this, this.l, size); break;\n\t}}\n\tthis.l+=size; return o;\n}\n\nvar __writeUInt32LE = function(b/*:RawBytes|CFBlob*/, val/*:number*/, idx/*:number*/)/*:void*/ { b[idx] = (val & 0xFF); b[idx+1] = ((val >>> 8) & 0xFF); b[idx+2] = ((val >>> 16) & 0xFF); b[idx+3] = ((val >>> 24) & 0xFF); };\nvar __writeInt32LE  = function(b/*:RawBytes|CFBlob*/, val/*:number*/, idx/*:number*/)/*:void*/ { b[idx] = (val & 0xFF); b[idx+1] = ((val >> 8) & 0xFF); b[idx+2] = ((val >> 16) & 0xFF); b[idx+3] = ((val >> 24) & 0xFF); };\nvar __writeUInt16LE = function(b/*:RawBytes|CFBlob*/, val/*:number*/, idx/*:number*/)/*:void*/ { b[idx] = (val & 0xFF); b[idx+1] = ((val >>> 8) & 0xFF); };\n\nfunction WriteShift(t/*:number*/, val/*:string|number*/, f/*:?string*/)/*:any*/ {\n\tvar size = 0, i = 0;\n\tif(f === 'dbcs') {\n\t\t/*:: if(typeof val !== 'string') throw new Error(\"unreachable\"); */\n\t\tfor(i = 0; i != val.length; ++i) __writeUInt16LE(this, val.charCodeAt(i), this.l + 2 * i);\n\t\tsize = 2 * val.length;\n\t} else if(f === 'sbcs' || f == 'cpstr') {\n\t\tif(typeof $cptable !== 'undefined' && current_ansi == 874) {\n\t\t\t/* TODO: use tables directly, don't encode */\n\t\t\t/*:: if(typeof val !== \"string\") throw new Error(\"unreachable\"); */\n\t\t\tfor(i = 0; i != val.length; ++i) {\n\t\t\t\tvar cpp = $cptable.utils.encode(current_ansi, val.charAt(i));\n\t\t\t\tthis[this.l + i] = cpp[0];\n\t\t\t}\n\t\t\tsize = val.length;\n\t\t} else if(typeof $cptable !== 'undefined' && f == 'cpstr') {\n\t\t\tcpp = $cptable.utils.encode(current_codepage, val);\n\t\t\t/* replace null bytes with _ when relevant */\n      if(cpp.length == val.length) for(i = 0; i < val.length; ++i) if(cpp[i] == 0 && val.charCodeAt(i) != 0) cpp[i] = 0x5F;\n      if(cpp.length == 2 * val.length) for(i = 0; i < val.length; ++i) if(cpp[2*i] == 0 && cpp[2*i+1] == 0 && val.charCodeAt(i) != 0) cpp[2*i] = 0x5F;\n\t\t\tfor(i = 0; i < cpp.length; ++i) this[this.l + i] = cpp[i];\n\t\t\tsize = cpp.length;\n\t\t} else {\n\t\t\t/*:: if(typeof val !== 'string') throw new Error(\"unreachable\"); */\n\t\t\tval = val.replace(/[^\\x00-\\x7F]/g, \"_\");\n\t\t\t/*:: if(typeof val !== 'string') throw new Error(\"unreachable\"); */\n\t\t\tfor(i = 0; i != val.length; ++i) this[this.l + i] = (val.charCodeAt(i) & 0xFF);\n\t\t\tsize = val.length;\n\t\t}\n\t} else if(f === 'hex') {\n\t\tfor(; i < t; ++i) {\n\t\t\t/*:: if(typeof val !== \"string\") throw new Error(\"unreachable\"); */\n\t\t\tthis[this.l++] = (parseInt(val.slice(2*i, 2*i+2), 16)||0);\n\t\t} return this;\n\t} else if(f === 'utf16le') {\n\t\t\t/*:: if(typeof val !== \"string\") throw new Error(\"unreachable\"); */\n\t\t\tvar end/*:number*/ = Math.min(this.l + t, this.length);\n\t\t\tfor(i = 0; i < Math.min(val.length, t); ++i) {\n\t\t\t\tvar cc = val.charCodeAt(i);\n\t\t\t\tthis[this.l++] = (cc & 0xff);\n\t\t\t\tthis[this.l++] = (cc >> 8);\n\t\t\t}\n\t\t\twhile(this.l < end) this[this.l++] = 0;\n\t\t\treturn this;\n\t} else /*:: if(typeof val === 'number') */ switch(t) {\n\t\tcase  1: size = 1; this[this.l] = val&0xFF; break;\n\t\tcase  2: size = 2; this[this.l] = val&0xFF; val >>>= 8; this[this.l+1] = val&0xFF; break;\n\t\tcase  3: size = 3; this[this.l] = val&0xFF; val >>>= 8; this[this.l+1] = val&0xFF; val >>>= 8; this[this.l+2] = val&0xFF; break;\n\t\tcase  4: size = 4; __writeUInt32LE(this, val, this.l); break;\n\t\tcase  8: size = 8; if(f === 'f') { write_double_le(this, val, this.l); break; }\n\t\t/* falls through */\n\t\tcase 16: break;\n\t\tcase -4: size = 4; __writeInt32LE(this, val, this.l); break;\n\t}\n\tthis.l += size; return this;\n}\n\nfunction CheckField(hexstr/*:string*/, fld/*:string*/)/*:void*/ {\n\tvar m = __hexlify(this,this.l,hexstr.length>>1);\n\tif(m !== hexstr) throw new Error(fld + 'Expected ' + hexstr + ' saw ' + m);\n\tthis.l += hexstr.length>>1;\n}\n\nfunction prep_blob(blob, pos/*:number*/)/*:void*/ {\n\tblob.l = pos;\n\tblob.read_shift = /*::(*/ReadShift/*:: :any)*/;\n\tblob.chk = CheckField;\n\tblob.write_shift = WriteShift;\n}\n\nfunction parsenoop(blob, length/*:: :number, opts?:any */) { blob.l += length; }\n\nfunction new_buf(sz/*:number*/)/*:Block*/ {\n\tvar o = new_raw_buf(sz);\n\tprep_blob(o, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.1.4 Record */\nfunction recordhopper(data, cb/*:RecordHopperCB*/, opts/*:?any*/) {\n\tif(!data) return;\n\tvar tmpbyte, cntbyte, length;\n\tprep_blob(data, data.l || 0);\n\tvar L = data.length, RT = 0, tgt = 0;\n\twhile(data.l < L) {\n\t\tRT = data.read_shift(1);\n\t\tif(RT & 0x80) RT = (RT & 0x7F) + ((data.read_shift(1) & 0x7F)<<7);\n\t\tvar R = XLSBRecordEnum[RT] || XLSBRecordEnum[0xFFFF];\n\t\ttmpbyte = data.read_shift(1);\n\t\tlength = tmpbyte & 0x7F;\n\t\tfor(cntbyte = 1; cntbyte <4 && (tmpbyte & 0x80); ++cntbyte) length += ((tmpbyte = data.read_shift(1)) & 0x7F)<<(7*cntbyte);\n\t\ttgt = data.l + length;\n\t\tvar d = R.f && R.f(data, length, opts);\n\t\tdata.l = tgt;\n\t\tif(cb(d, R, RT)) return;\n\t}\n}\n\n/* control buffer usage for fixed-length buffers */\nfunction buf_array()/*:BufArray*/ {\n\tvar bufs/*:Array<Block>*/ = [], blksz = has_buf ? 256 : 2048;\n\tvar newblk = function ba_newblk(sz/*:number*/)/*:Block*/ {\n\t\tvar o/*:Block*/ = (new_buf(sz)/*:any*/);\n\t\tprep_blob(o, 0);\n\t\treturn o;\n\t};\n\n\tvar curbuf/*:Block*/ = newblk(blksz);\n\n\tvar endbuf = function ba_endbuf() {\n\t\tif(!curbuf) return;\n\t\t// workaround for new Buffer(3).slice(0,0) bug in bun 0.1.3\n\t\tif(curbuf.l) {\n\t\t\tif(curbuf.length > curbuf.l) { curbuf = curbuf.slice(0, curbuf.l); curbuf.l = curbuf.length; }\n\t\t\tif(curbuf.length > 0) bufs.push(curbuf);\n\t\t}\n\t\tcurbuf = null;\n\t};\n\n\tvar next = function ba_next(sz/*:number*/)/*:Block*/ {\n\t\tif(curbuf && (sz < (curbuf.length - curbuf.l))) return curbuf;\n\t\tendbuf();\n\t\treturn (curbuf = newblk(Math.max(sz+1, blksz)));\n\t};\n\n\tvar end = function ba_end() {\n\t\tendbuf();\n\t\treturn bconcat(bufs);\n\t};\n\n\tvar push = function ba_push(buf) { endbuf(); curbuf = buf; if(curbuf.l == null) curbuf.l = curbuf.length; next(blksz); };\n\n\treturn ({ next:next, push:push, end:end, _bufs:bufs }/*:any*/);\n}\n\nfunction write_record(ba/*:BufArray*/, type/*:number*/, payload, length/*:?number*/) {\n\tvar t/*:number*/ = +type, l;\n\tif(isNaN(t)) return; // TODO: throw something here?\n\tif(!length) length = XLSBRecordEnum[t].p || (payload||[]).length || 0;\n\tl = 1 + (t >= 0x80 ? 1 : 0) + 1/* + length*/;\n\tif(length >= 0x80) ++l; if(length >= 0x4000) ++l; if(length >= 0x200000) ++l;\n\tvar o = ba.next(l);\n\tif(t <= 0x7F) o.write_shift(1, t);\n\telse {\n\t\to.write_shift(1, (t & 0x7F) + 0x80);\n\t\to.write_shift(1, (t >> 7));\n\t}\n\tfor(var i = 0; i != 4; ++i) {\n\t\tif(length >= 0x80) { o.write_shift(1, (length & 0x7F)+0x80); length >>= 7; }\n\t\telse { o.write_shift(1, length); break; }\n\t}\n\tif(/*:: length != null &&*/length > 0 && is_buf(payload)) ba.push(payload);\n}\n/* XLS ranges enforced */\nfunction shift_cell_xls(cell/*:CellAddress*/, tgt/*:any*/, opts/*:?any*/)/*:CellAddress*/ {\n\tvar out = dup(cell);\n\tif(tgt.s) {\n\t\tif(out.cRel) out.c += tgt.s.c;\n\t\tif(out.rRel) out.r += tgt.s.r;\n\t} else {\n\t\tif(out.cRel) out.c += tgt.c;\n\t\tif(out.rRel) out.r += tgt.r;\n\t}\n\tif(!opts || opts.biff < 12) {\n\t\twhile(out.c >= 0x100) out.c -= 0x100;\n\t\twhile(out.r >= 0x10000) out.r -= 0x10000;\n\t}\n\treturn out;\n}\n\nfunction shift_range_xls(cell, range, opts) {\n\tvar out = dup(cell);\n\tout.s = shift_cell_xls(out.s, range.s, opts);\n\tout.e = shift_cell_xls(out.e, range.s, opts);\n\treturn out;\n}\n\nfunction encode_cell_xls(c/*:CellAddress*/, biff/*:number*/)/*:string*/ {\n\tif(c.cRel && c.c < 0) { c = dup(c); while(c.c < 0) c.c += (biff > 8) ? 0x4000 : 0x100; }\n\tif(c.rRel && c.r < 0) { c = dup(c); while(c.r < 0) c.r += (biff > 8) ? 0x100000 : ((biff > 5) ? 0x10000 : 0x4000); }\n\tvar s = encode_cell(c);\n\tif(!c.cRel && c.cRel != null) s = fix_col(s);\n\tif(!c.rRel && c.rRel != null) s = fix_row(s);\n\treturn s;\n}\n\nfunction encode_range_xls(r, opts)/*:string*/ {\n\tif(r.s.r == 0 && !r.s.rRel) {\n\t\tif(r.e.r == (opts.biff >= 12 ? 0xFFFFF : (opts.biff >= 8 ? 0x10000 : 0x4000)) && !r.e.rRel) {\n\t\t\treturn (r.s.cRel ? \"\" : \"$\") + encode_col(r.s.c) + \":\" + (r.e.cRel ? \"\" : \"$\") + encode_col(r.e.c);\n\t\t}\n\t}\n\tif(r.s.c == 0 && !r.s.cRel) {\n\t\tif(r.e.c == (opts.biff >= 12 ? 0x3FFF : 0xFF) && !r.e.cRel) {\n\t\t\treturn (r.s.rRel ? \"\" : \"$\") + encode_row(r.s.r) + \":\" + (r.e.rRel ? \"\" : \"$\") + encode_row(r.e.r);\n\t\t}\n\t}\n\treturn encode_cell_xls(r.s, opts.biff) + \":\" + encode_cell_xls(r.e, opts.biff);\n}\nfunction decode_row(rowstr/*:string*/)/*:number*/ { return parseInt(unfix_row(rowstr),10) - 1; }\nfunction encode_row(row/*:number*/)/*:string*/ { return \"\" + (row + 1); }\nfunction fix_row(cstr/*:string*/)/*:string*/ { return cstr.replace(/([A-Z]|^)(\\d+)$/,\"$1$$$2\"); }\nfunction unfix_row(cstr/*:string*/)/*:string*/ { return cstr.replace(/\\$(\\d+)$/,\"$1\"); }\n\nfunction decode_col(colstr/*:string*/)/*:number*/ { var c = unfix_col(colstr), d = 0, i = 0; for(; i !== c.length; ++i) d = 26*d + c.charCodeAt(i) - 64; return d - 1; }\nfunction encode_col(col/*:number*/)/*:string*/ { if(col < 0) throw new Error(\"invalid column \" + col); var s=\"\"; for(++col; col; col=Math.floor((col-1)/26)) s = String.fromCharCode(((col-1)%26) + 65) + s; return s; }\nfunction fix_col(cstr/*:string*/)/*:string*/ { return cstr.replace(/^([A-Z])/,\"$$$1\"); }\nfunction unfix_col(cstr/*:string*/)/*:string*/ { return cstr.replace(/^\\$([A-Z])/,\"$1\"); }\n\nfunction split_cell(cstr/*:string*/)/*:Array<string>*/ { return cstr.replace(/(\\$?[A-Z]*)(\\$?\\d*)/,\"$1,$2\").split(\",\"); }\nfunction decode_cell(cstr/*:string*/)/*:CellAddress*/ {\n\tvar R = 0, C = 0;\n\tfor(var i = 0; i < cstr.length; ++i) {\n\t\tvar cc = cstr.charCodeAt(i);\n\t\tif(cc >= 48 && cc <= 57) R = 10 * R + (cc - 48);\n\t\telse if(cc >= 65 && cc <= 90) C = 26 * C + (cc - 64);\n\t}\n\treturn { c: C - 1, r:R - 1 };\n}\nfunction encode_cell(cell/*:CellAddress*/)/*:string*/ {\n\tvar col = cell.c + 1;\n\tvar s=\"\";\n\tfor(; col; col=((col-1)/26)|0) s = String.fromCharCode(((col-1)%26) + 65) + s;\n\treturn s + (cell.r + 1);\n}\nfunction decode_range(range/*:string*/)/*:Range*/ {\n\tvar idx = range.indexOf(\":\");\n\tif(idx == -1) return { s: decode_cell(range), e: decode_cell(range) };\n\treturn { s: decode_cell(range.slice(0, idx)), e: decode_cell(range.slice(idx + 1)) };\n}\n/*# if only one arg, it is assumed to be a Range.  If 2 args, both are cell addresses */\nfunction encode_range(cs/*:CellAddrSpec|Range*/,ce/*:?CellAddrSpec*/)/*:string*/ {\n\tif(typeof ce === 'undefined' || typeof ce === 'number') {\n/*:: if(!(cs instanceof Range)) throw \"unreachable\"; */\n\t\treturn encode_range(cs.s, cs.e);\n\t}\n/*:: if((cs instanceof Range)) throw \"unreachable\"; */\n\tif(typeof cs !== 'string') cs = encode_cell((cs/*:any*/));\n\tif(typeof ce !== 'string') ce = encode_cell((ce/*:any*/));\n/*:: if(typeof cs !== 'string') throw \"unreachable\"; */\n/*:: if(typeof ce !== 'string') throw \"unreachable\"; */\n\treturn cs == ce ? cs : cs + \":\" + ce;\n}\nfunction fix_range(a1/*:string*/)/*:string*/ {\n\tvar s = decode_range(a1);\n\treturn \"$\" + encode_col(s.s.c) + \"$\" + encode_row(s.s.r) + \":$\" + encode_col(s.e.c) + \"$\" + encode_row(s.e.r);\n}\n\n// List of invalid characters needs to be tested further\nfunction formula_quote_sheet_name(sname/*:string*/, opts)/*:string*/ {\n\tif(!sname && !(opts && opts.biff <= 5 && opts.biff >= 2)) throw new Error(\"empty sheet name\");\n\tif (/[^\\w\\u4E00-\\u9FFF\\u3040-\\u30FF]/.test(sname)) return \"'\" + sname.replace(/'/g, \"''\") + \"'\";\n\treturn sname;\n}\n\nfunction safe_decode_range(range/*:string*/)/*:Range*/ {\n\tvar o = {s:{c:0,r:0},e:{c:0,r:0}};\n\tvar idx = 0, i = 0, cc = 0;\n\tvar len = range.length;\n\tfor(idx = 0; i < len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;\n\t\tidx = 26*idx + cc;\n\t}\n\to.s.c = --idx;\n\n\tfor(idx = 0; i < len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;\n\t\tidx = 10*idx + cc;\n\t}\n\to.s.r = --idx;\n\n\tif(i === len || cc != 10) { o.e.c=o.s.c; o.e.r=o.s.r; return o; }\n\t++i;\n\n\tfor(idx = 0; i != len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;\n\t\tidx = 26*idx + cc;\n\t}\n\to.e.c = --idx;\n\n\tfor(idx = 0; i != len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;\n\t\tidx = 10*idx + cc;\n\t}\n\to.e.r = --idx;\n\treturn o;\n}\n\nfunction safe_format_cell(cell/*:Cell*/, v/*:any*/) {\n\tvar q = (cell.t == 'd' && v instanceof Date);\n\tif(cell.z != null) try { return (cell.w = SSF_format(cell.z, q ? datenum(v) : v)); } catch(e) { }\n\ttry { return (cell.w = SSF_format((cell.XF||{}).numFmtId||(q ? 14 : 0),  q ? datenum(v) : v)); } catch(e) { return ''+v; }\n}\n\nfunction format_cell(cell/*:Cell*/, v/*:any*/, o/*:any*/) {\n\tif(cell == null || cell.t == null || cell.t == 'z') return \"\";\n\tif(cell.w !== undefined) return cell.w;\n\tif(cell.t == 'd' && !cell.z && o && o.dateNF) cell.z = o.dateNF;\n\tif(cell.t == \"e\") return BErr[cell.v] || cell.v;\n\tif(v == undefined) return safe_format_cell(cell, cell.v);\n\treturn safe_format_cell(cell, v);\n}\n\nfunction sheet_to_workbook(sheet/*:Worksheet*/, opts)/*:Workbook*/ {\n\tvar n = opts && opts.sheet ? opts.sheet : \"Sheet1\";\n\tvar sheets = {}; sheets[n] = sheet;\n\treturn { SheetNames: [n], Sheets: sheets };\n}\n\nfunction sheet_new(opts) {\n\tvar out = {};\n\tvar o = opts || {};\n\tif(o.dense) out[\"!data\"] = [];\n\treturn out;\n}\n\nfunction sheet_add_aoa(_ws/*:?Worksheet*/, data/*:AOA*/, opts/*:?any*/)/*:Worksheet*/ {\n\tvar o = opts || {};\n\tvar dense = _ws ? (_ws[\"!data\"] != null) : o.dense;\n\tif(DENSE != null && dense == null) dense = DENSE;\n\tvar ws/*:Worksheet*/ = _ws || ({}/*:any*/);\n\tif(dense && !ws[\"!data\"]) ws[\"!data\"] = [];\n\tvar _R = 0, _C = 0;\n\tif(ws && o.origin != null) {\n\t\tif(typeof o.origin == 'number') _R = o.origin;\n\t\telse {\n\t\t\tvar _origin/*:CellAddress*/ = typeof o.origin == \"string\" ? decode_cell(o.origin) : o.origin;\n\t\t\t_R = _origin.r; _C = _origin.c;\n\t\t}\n\t}\n\tvar range/*:Range*/ = ({s: {c:10000000, r:10000000}, e: {c:0, r:0}}/*:any*/);\n\tif(ws[\"!ref\"]){\n\t\tvar _range = safe_decode_range(ws['!ref']);\n\t\trange.s.c = _range.s.c;\n\t\trange.s.r = _range.s.r;\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\tif(_R == -1) range.e.r = _R = (ws[\"!ref\"] ? _range.e.r + 1 : 0);\n\t} else {\n\t\trange.s.c = range.e.c = range.s.r = range.e.r = 0;\n\t}\n\tvar row = [], seen = false;\n\tfor(var R = 0; R != data.length; ++R) {\n\t\tif(!data[R]) continue;\n\t\tif(!Array.isArray(data[R])) throw new Error(\"aoa_to_sheet expects an array of arrays\");\n\t\tvar __R = _R + R, __Rstr = \"\" + (__R + 1);\n\t\t//console.log(\"!!\", R, _R, __R);\n\t\tif(dense) {\n\t\t\tif(!ws[\"!data\"][__R]) ws[\"!data\"][__R] = [];\n\t\t\trow = ws[\"!data\"][__R];\n\t\t}\n\t\tfor(var C = 0; C != data[R].length; ++C) {\n\t\t\tif(typeof data[R][C] === 'undefined') continue;\n\t\t\tvar cell/*:Cell*/ = ({v: data[R][C] }/*:any*/);\n\t\t\tvar __C = _C + C;\n\t\t\tif(range.s.r > __R) range.s.r = __R;\n\t\t\tif(range.s.c > __C) range.s.c = __C;\n\t\t\tif(range.e.r < __R) range.e.r = __R;\n\t\t\tif(range.e.c < __C) range.e.c = __C;\n\t\t\tseen = true;\n\t\t\tif(data[R][C] && typeof data[R][C] === 'object' && !Array.isArray(data[R][C]) && !(data[R][C] instanceof Date)) cell = data[R][C];\n\t\t\telse {\n\t\t\t\tif(Array.isArray(cell.v)) { cell.f = data[R][C][1]; cell.v = cell.v[0]; }\n\t\t\t\tif(cell.v === null) {\n\t\t\t\t\tif(cell.f) cell.t = 'n';\n\t\t\t\t\telse if(o.nullError) { cell.t = 'e'; cell.v = 0; }\n\t\t\t\t\telse if(!o.sheetStubs) continue;\n\t\t\t\t\telse cell.t = 'z';\n\t\t\t\t}\n\t\t\t\telse if(typeof cell.v === 'number') cell.t = 'n';\n\t\t\t\telse if(typeof cell.v === 'boolean') cell.t = 'b';\n\t\t\t\telse if(cell.v instanceof Date) {\n\t\t\t\t\tcell.z = o.dateNF || table_fmt[14];\n\t\t\t\t\tif(!o.UTC) cell.v = local_to_utc(cell.v);\n\t\t\t\t\tif(o.cellDates) { cell.t = 'd'; cell.w = SSF_format(cell.z, datenum(cell.v, o.date1904)); }\n\t\t\t\t\telse { cell.t = 'n'; cell.v = datenum(cell.v, o.date1904); cell.w = SSF_format(cell.z, cell.v); }\n\t\t\t\t}\n\t\t\t\telse cell.t = 's';\n\t\t\t}\n\t\t\tif(dense) {\n\t\t\t\tif(row[__C] && row[__C].z) cell.z = row[__C].z;\n\t\t\t\trow[__C] = cell;\n\t\t\t} else {\n\t\t\t\tvar cell_ref = encode_col(__C) + __Rstr/*:any*/;\n\t\t\t\tif(ws[cell_ref] && ws[cell_ref].z) cell.z = ws[cell_ref].z;\n\t\t\t\tws[cell_ref] = cell;\n\t\t\t}\n\t\t}\n\t}\n\tif(seen && range.s.c < 10400000) ws['!ref'] = encode_range(range);\n\treturn ws;\n}\nfunction aoa_to_sheet(data/*:AOA*/, opts/*:?any*/)/*:Worksheet*/ { return sheet_add_aoa(null, data, opts); }\n\nfunction parse_Int32LE(data) {\n\treturn data.read_shift(4, 'i');\n}\nfunction write_UInt32LE(x/*:number*/, o) {\n\tif (!o) o = new_buf(4);\n\to.write_shift(4, x);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.168 */\nfunction parse_XLWideString(data/*::, length*/)/*:string*/ {\n\tvar cchCharacters = data.read_shift(4);\n\treturn cchCharacters === 0 ? \"\" : data.read_shift(cchCharacters, 'dbcs');\n}\nfunction write_XLWideString(data/*:string*/, o) {\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(4 + 2 * data.length); }\n\to.write_shift(4, data.length);\n\tif (data.length > 0) o.write_shift(0, data, 'dbcs');\n\treturn _null ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.5.91 */\n//function parse_LPWideString(data/*::, length*/)/*:string*/ {\n//\tvar cchCharacters = data.read_shift(2);\n//\treturn cchCharacters === 0 ? \"\" : data.read_shift(cchCharacters, \"utf16le\");\n//}\n\n/* [MS-XLSB] 2.5.143 */\nfunction parse_StrRun(data) {\n\treturn { ich: data.read_shift(2), ifnt: data.read_shift(2) };\n}\nfunction write_StrRun(run, o) {\n\tif (!o) o = new_buf(4);\n\to.write_shift(2, run.ich || 0);\n\to.write_shift(2, run.ifnt || 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.121 */\nfunction parse_RichStr(data, length/*:number*/)/*:XLString*/ {\n\tvar start = data.l;\n\tvar flags = data.read_shift(1);\n\tvar str = parse_XLWideString(data);\n\tvar rgsStrRun = [];\n\tvar z = ({ t: str, h: str }/*:any*/);\n\tif ((flags & 1) !== 0) { /* fRichStr */\n\t\t/* TODO: formatted string */\n\t\tvar dwSizeStrRun = data.read_shift(4);\n\t\tfor (var i = 0; i != dwSizeStrRun; ++i) rgsStrRun.push(parse_StrRun(data));\n\t\tz.r = rgsStrRun;\n\t}\n\telse z.r = [{ ich: 0, ifnt: 0 }];\n\t//if((flags & 2) !== 0) { /* fExtStr */\n\t//\t/* TODO: phonetic string */\n\t//}\n\tdata.l = start + length;\n\treturn z;\n}\nfunction write_RichStr(str/*:XLString*/, o/*:?Block*/)/*:Block*/ {\n\t/* TODO: formatted string */\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(15 + 4 * str.t.length); }\n\to.write_shift(1, 0);\n\twrite_XLWideString(str.t, o);\n\treturn _null ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.4.328 BrtCommentText (RichStr w/1 run) */\nvar parse_BrtCommentText = parse_RichStr;\nfunction write_BrtCommentText(str/*:XLString*/, o/*:?Block*/)/*:Block*/ {\n\t/* TODO: formatted string */\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(23 + 4 * str.t.length); }\n\to.write_shift(1, 1);\n\twrite_XLWideString(str.t, o);\n\to.write_shift(4, 1);\n\twrite_StrRun({ ich: 0, ifnt: 0 }, o);\n\treturn _null ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.5.9 */\nfunction parse_XLSBCell(data)/*:any*/ {\n\tvar col = data.read_shift(4);\n\tvar iStyleRef = data.read_shift(2);\n\tiStyleRef += data.read_shift(1) << 16;\n\tdata.l++; //var fPhShow = data.read_shift(1);\n\treturn { c: col, iStyleRef: iStyleRef };\n}\nfunction write_XLSBCell(cell/*:any*/, o/*:?Block*/) {\n\tif (o == null) o = new_buf(8);\n\to.write_shift(-4, cell.c);\n\to.write_shift(3, cell.iStyleRef || cell.s);\n\to.write_shift(1, 0); /* fPhShow */\n\treturn o;\n}\n\n/* Short XLSB Cell does not include column */\nfunction parse_XLSBShortCell(data)/*:any*/ {\n\tvar iStyleRef = data.read_shift(2);\n\tiStyleRef += data.read_shift(1) <<16;\n\tdata.l++; //var fPhShow = data.read_shift(1);\n\treturn { c:-1, iStyleRef: iStyleRef };\n}\nfunction write_XLSBShortCell(cell/*:any*/, o/*:?Block*/) {\n\tif(o == null) o = new_buf(4);\n\to.write_shift(3, cell.iStyleRef || cell.s);\n\to.write_shift(1, 0); /* fPhShow */\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.21 */\nvar parse_XLSBCodeName = parse_XLWideString;\nvar write_XLSBCodeName = write_XLWideString;\n\n/* [MS-XLSB] 2.5.166 */\nfunction parse_XLNullableWideString(data/*::, length*/)/*:string*/ {\n\tvar cchCharacters = data.read_shift(4);\n\treturn cchCharacters === 0 || cchCharacters === 0xFFFFFFFF ? \"\" : data.read_shift(cchCharacters, 'dbcs');\n}\nfunction write_XLNullableWideString(data/*:string*/, o) {\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(127); }\n\to.write_shift(4, data.length > 0 ? data.length : 0xFFFFFFFF);\n\tif (data.length > 0) o.write_shift(0, data, 'dbcs');\n\treturn _null ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.5.165 */\nvar parse_XLNameWideString = parse_XLWideString;\n//var write_XLNameWideString = write_XLWideString;\n\n/* [MS-XLSB] 2.5.114 */\nvar parse_RelID = parse_XLNullableWideString;\nvar write_RelID = write_XLNullableWideString;\n\n\n/* [MS-XLS] 2.5.217 ; [MS-XLSB] 2.5.122 */\nfunction parse_RkNumber(data)/*:number*/ {\n\tvar b = data.slice(data.l, data.l + 4);\n\tvar fX100 = (b[0] & 1), fInt = (b[0] & 2);\n\tdata.l += 4;\n\tvar RK = fInt === 0 ? __double([0, 0, 0, 0, (b[0] & 0xFC), b[1], b[2], b[3]], 0) : __readInt32LE(b, 0) >> 2;\n\treturn fX100 ? (RK / 100) : RK;\n}\nfunction write_RkNumber(data/*:number*/, o) {\n\tif (o == null) o = new_buf(4);\n\tvar fX100 = 0, fInt = 0, d100 = data * 100;\n\tif ((data == (data | 0)) && (data >= -(1 << 29)) && (data < (1 << 29))) { fInt = 1; }\n\telse if ((d100 == (d100 | 0)) && (d100 >= -(1 << 29)) && (d100 < (1 << 29))) { fInt = 1; fX100 = 1; }\n\tif (fInt) o.write_shift(-4, ((fX100 ? d100 : data) << 2) + (fX100 + 2));\n\telse throw new Error(\"unsupported RkNumber \" + data); // TODO\n}\n\n\n/* [MS-XLSB] 2.5.117 RfX */\nfunction parse_RfX(data /*::, length*/)/*:Range*/ {\n\tvar cell/*:Range*/ = ({ s: {}, e: {} }/*:any*/);\n\tcell.s.r = data.read_shift(4);\n\tcell.e.r = data.read_shift(4);\n\tcell.s.c = data.read_shift(4);\n\tcell.e.c = data.read_shift(4);\n\treturn cell;\n}\nfunction write_RfX(r/*:Range*/, o) {\n\tif (!o) o = new_buf(16);\n\to.write_shift(4, r.s.r);\n\to.write_shift(4, r.e.r);\n\to.write_shift(4, r.s.c);\n\to.write_shift(4, r.e.c);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.153 UncheckedRfX */\nvar parse_UncheckedRfX = parse_RfX;\nvar write_UncheckedRfX = write_RfX;\n\n/* [MS-XLSB] 2.5.155 UncheckedSqRfX */\n//function parse_UncheckedSqRfX(data) {\n//\tvar cnt = data.read_shift(4);\n//\tvar out = [];\n//\tfor(var i = 0; i < cnt; ++i) {\n//\t\tvar rng = parse_UncheckedRfX(data);\n//\t\tout.push(encode_range(rng));\n//\t}\n//\treturn out.join(\",\");\n//}\n//function write_UncheckedSqRfX(sqrfx/*:string*/) {\n//\tvar parts = sqrfx.split(/\\s*,\\s*/);\n//\tvar o = new_buf(4); o.write_shift(4, parts.length);\n//\tvar out = [o];\n//\tparts.forEach(function(rng) {\n//\t\tout.push(write_UncheckedRfX(safe_decode_range(rng)));\n//\t});\n//\treturn bconcat(out);\n//}\n\n/* [MS-XLS] 2.5.342 ; [MS-XLSB] 2.5.171 */\n/* TODO: error checking, NaN and Infinity values are not valid Xnum */\nfunction parse_Xnum(data/*::, length*/) {\n\tif(data.length - data.l < 8) throw \"XLS Xnum Buffer underflow\";\n\treturn data.read_shift(8, 'f');\n}\nfunction write_Xnum(data, o) { return (o || new_buf(8)).write_shift(8, data, 'f'); }\n\n/* [MS-XLSB] 2.4.324 BrtColor */\nfunction parse_BrtColor(data/*::, length*/) {\n\tvar out = {};\n\tvar d = data.read_shift(1);\n\n\t//var fValidRGB = d & 1;\n\tvar xColorType = d >>> 1;\n\n\tvar index = data.read_shift(1);\n\tvar nTS = data.read_shift(2, 'i');\n\tvar bR = data.read_shift(1);\n\tvar bG = data.read_shift(1);\n\tvar bB = data.read_shift(1);\n\tdata.l++; //var bAlpha = data.read_shift(1);\n\n\tswitch (xColorType) {\n\t\tcase 0: out.auto = 1; break;\n\t\tcase 1:\n\t\t\tout.index = index;\n\t\t\tvar icv = XLSIcv[index];\n\t\t\t/* automatic pseudo index 81 */\n\t\t\tif (icv) out.rgb = rgb2Hex(icv);\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\t/* if(!fValidRGB) throw new Error(\"invalid\"); */\n\t\t\tout.rgb = rgb2Hex([bR, bG, bB]);\n\t\t\tbreak;\n\t\tcase 3: out.theme = index; break;\n\t}\n\tif (nTS != 0) out.tint = nTS > 0 ? nTS / 32767 : nTS / 32768;\n\n\treturn out;\n}\nfunction write_BrtColor(color, o) {\n\tif (!o) o = new_buf(8);\n\tif (!color || color.auto) { o.write_shift(4, 0); o.write_shift(4, 0); return o; }\n\tif (color.index != null) {\n\t\to.write_shift(1, 0x02);\n\t\to.write_shift(1, color.index);\n\t} else if (color.theme != null) {\n\t\to.write_shift(1, 0x06);\n\t\to.write_shift(1, color.theme);\n\t} else {\n\t\to.write_shift(1, 0x05);\n\t\to.write_shift(1, 0);\n\t}\n\tvar nTS = color.tint || 0;\n\tif (nTS > 0) nTS *= 32767;\n\telse if (nTS < 0) nTS *= 32768;\n\to.write_shift(2, nTS);\n\tif (!color.rgb || color.theme != null) {\n\t\to.write_shift(2, 0);\n\t\to.write_shift(1, 0);\n\t\to.write_shift(1, 0);\n\t} else {\n\t\tvar rgb = (color.rgb || 'FFFFFF');\n\t\tif (typeof rgb == 'number') rgb = (\"000000\" + rgb.toString(16)).slice(-6);\n\t\to.write_shift(1, parseInt(rgb.slice(0, 2), 16));\n\t\to.write_shift(1, parseInt(rgb.slice(2, 4), 16));\n\t\to.write_shift(1, parseInt(rgb.slice(4, 6), 16));\n\t\to.write_shift(1, 0xFF);\n\t}\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.52 */\nfunction parse_FontFlags(data/*::, length, opts*/) {\n\tvar d = data.read_shift(1);\n\tdata.l++;\n\tvar out = {\n\t\tfBold: d & 0x01,\n\t\tfItalic: d & 0x02,\n\t\tfUnderline: d & 0x04,\n\t\tfStrikeout: d & 0x08,\n\t\tfOutline: d & 0x10,\n\t\tfShadow: d & 0x20,\n\t\tfCondense: d & 0x40,\n\t\tfExtend: d & 0x80\n\t};\n\treturn out;\n}\nfunction write_FontFlags(font, o) {\n\tif (!o) o = new_buf(2);\n\tvar grbit =\n\t\t(font.italic ? 0x02 : 0) |\n\t\t(font.strike ? 0x08 : 0) |\n\t\t(font.outline ? 0x10 : 0) |\n\t\t(font.shadow ? 0x20 : 0) |\n\t\t(font.condense ? 0x40 : 0) |\n\t\t(font.extend ? 0x80 : 0);\n\to.write_shift(1, grbit);\n\to.write_shift(1, 0);\n\treturn o;\n}\n\n/* [MS-OLEDS] 2.3.1 and 2.3.2 */\nfunction parse_ClipboardFormatOrString(o, w/*:number*/)/*:string*/ {\n\t// $FlowIgnore\n\tvar ClipFmt = { 2: \"BITMAP\", 3: \"METAFILEPICT\", 8: \"DIB\", 14: \"ENHMETAFILE\" };\n\tvar m/*:number*/ = o.read_shift(4);\n\tswitch (m) {\n\t\tcase 0x00000000: return \"\";\n\t\tcase 0xffffffff: case 0xfffffffe: return ClipFmt[o.read_shift(4)] || \"\";\n\t}\n\tif (m > 0x190) throw new Error(\"Unsupported Clipboard: \" + m.toString(16));\n\to.l -= 4;\n\treturn o.read_shift(0, w == 1 ? \"lpstr\" : \"lpwstr\");\n}\nfunction parse_ClipboardFormatOrAnsiString(o) { return parse_ClipboardFormatOrString(o, 1); }\nfunction parse_ClipboardFormatOrUnicodeString(o) { return parse_ClipboardFormatOrString(o, 2); }\n\n/* [MS-OLEPS] 2.2 PropertyType */\n// Note: some tree shakers cannot handle VT_VECTOR | $CONST, hence extra vars\n//var VT_EMPTY    = 0x0000;\n//var VT_NULL     = 0x0001;\nvar VT_I2       = 0x0002;\nvar VT_I4       = 0x0003;\n//var VT_R4       = 0x0004;\n//var VT_R8       = 0x0005;\n//var VT_CY       = 0x0006;\n//var VT_DATE     = 0x0007;\n//var VT_BSTR     = 0x0008;\n//var VT_ERROR    = 0x000A;\nvar VT_BOOL     = 0x000B;\nvar VT_VARIANT  = 0x000C;\n//var VT_DECIMAL  = 0x000E;\n//var VT_I1       = 0x0010;\n//var VT_UI1      = 0x0011;\n//var VT_UI2      = 0x0012;\nvar VT_UI4      = 0x0013;\n//var VT_I8       = 0x0014;\n//var VT_UI8      = 0x0015;\n//var VT_INT      = 0x0016;\n//var VT_UINT     = 0x0017;\n//var VT_LPSTR    = 0x001E;\n//var VT_LPWSTR   = 0x001F;\nvar VT_FILETIME = 0x0040;\nvar VT_BLOB     = 0x0041;\n//var VT_STREAM   = 0x0042;\n//var VT_STORAGE  = 0x0043;\n//var VT_STREAMED_Object  = 0x0044;\n//var VT_STORED_Object    = 0x0045;\n//var VT_BLOB_Object      = 0x0046;\nvar VT_CF       = 0x0047;\n//var VT_CLSID    = 0x0048;\n//var VT_VERSIONED_STREAM = 0x0049;\n//var VT_VECTOR   = 0x1000;\nvar VT_VECTOR_VARIANT = 0x100C;\nvar VT_VECTOR_LPSTR   = 0x101E;\n//var VT_ARRAY    = 0x2000;\n\nvar VT_STRING   = 0x0050; // 2.3.3.1.11 VtString\nvar VT_USTR     = 0x0051; // 2.3.3.1.12 VtUnalignedString\nvar VT_CUSTOM   = [VT_STRING, VT_USTR];\n\n/* [MS-OSHARED] 2.3.3.2.2.1 Document Summary Information PIDDSI */\nvar DocSummaryPIDDSI = {\n\t0x01: { n: 'CodePage', t: VT_I2 },\n\t0x02: { n: 'Category', t: VT_STRING },\n\t0x03: { n: 'PresentationFormat', t: VT_STRING },\n\t0x04: { n: 'ByteCount', t: VT_I4 },\n\t0x05: { n: 'LineCount', t: VT_I4 },\n\t0x06: { n: 'ParagraphCount', t: VT_I4 },\n\t0x07: { n: 'SlideCount', t: VT_I4 },\n\t0x08: { n: 'NoteCount', t: VT_I4 },\n\t0x09: { n: 'HiddenCount', t: VT_I4 },\n\t0x0a: { n: 'MultimediaClipCount', t: VT_I4 },\n\t0x0b: { n: 'ScaleCrop', t: VT_BOOL },\n\t0x0c: { n: 'HeadingPairs', t: VT_VECTOR_VARIANT /* VT_VECTOR | VT_VARIANT */ },\n\t0x0d: { n: 'TitlesOfParts', t: VT_VECTOR_LPSTR /* VT_VECTOR | VT_LPSTR */ },\n\t0x0e: { n: 'Manager', t: VT_STRING },\n\t0x0f: { n: 'Company', t: VT_STRING },\n\t0x10: { n: 'LinksUpToDate', t: VT_BOOL },\n\t0x11: { n: 'CharacterCount', t: VT_I4 },\n\t0x13: { n: 'SharedDoc', t: VT_BOOL },\n\t0x16: { n: 'HyperlinksChanged', t: VT_BOOL },\n\t0x17: { n: 'AppVersion', t: VT_I4, p: 'version' },\n\t0x18: { n: 'DigSig', t: VT_BLOB },\n\t0x1A: { n: 'ContentType', t: VT_STRING },\n\t0x1B: { n: 'ContentStatus', t: VT_STRING },\n\t0x1C: { n: 'Language', t: VT_STRING },\n\t0x1D: { n: 'Version', t: VT_STRING },\n\t0xFF: {},\n\t/* [MS-OLEPS] 2.18 */\n\t0x80000000: { n: 'Locale', t: VT_UI4 },\n\t0x80000003: { n: 'Behavior', t: VT_UI4 },\n\t0x72627262: {}\n};\n\n/* [MS-OSHARED] 2.3.3.2.1.1 Summary Information Property Set PIDSI */\nvar SummaryPIDSI = {\n\t0x01: { n: 'CodePage', t: VT_I2 },\n\t0x02: { n: 'Title', t: VT_STRING },\n\t0x03: { n: 'Subject', t: VT_STRING },\n\t0x04: { n: 'Author', t: VT_STRING },\n\t0x05: { n: 'Keywords', t: VT_STRING },\n\t0x06: { n: 'Comments', t: VT_STRING },\n\t0x07: { n: 'Template', t: VT_STRING },\n\t0x08: { n: 'LastAuthor', t: VT_STRING },\n\t0x09: { n: 'RevNumber', t: VT_STRING },\n\t0x0A: { n: 'EditTime', t: VT_FILETIME },\n\t0x0B: { n: 'LastPrinted', t: VT_FILETIME },\n\t0x0C: { n: 'CreatedDate', t: VT_FILETIME },\n\t0x0D: { n: 'ModifiedDate', t: VT_FILETIME },\n\t0x0E: { n: 'PageCount', t: VT_I4 },\n\t0x0F: { n: 'WordCount', t: VT_I4 },\n\t0x10: { n: 'CharCount', t: VT_I4 },\n\t0x11: { n: 'Thumbnail', t: VT_CF },\n\t0x12: { n: 'Application', t: VT_STRING },\n\t0x13: { n: 'DocSecurity', t: VT_I4 },\n\t0xFF: {},\n\t/* [MS-OLEPS] 2.18 */\n\t0x80000000: { n: 'Locale', t: VT_UI4 },\n\t0x80000003: { n: 'Behavior', t: VT_UI4 },\n\t0x72627262: {}\n};\n\n/* [MS-XLS] 2.4.63 Country/Region codes */\nvar CountryEnum = {\n\t0x0001: \"US\", // United States\n\t0x0002: \"CA\", // Canada\n\t0x0003: \"\", // Latin America (except Brazil)\n\t0x0007: \"RU\", // Russia\n\t0x0014: \"EG\", // Egypt\n\t0x001E: \"GR\", // Greece\n\t0x001F: \"NL\", // Netherlands\n\t0x0020: \"BE\", // Belgium\n\t0x0021: \"FR\", // France\n\t0x0022: \"ES\", // Spain\n\t0x0024: \"HU\", // Hungary\n\t0x0027: \"IT\", // Italy\n\t0x0029: \"CH\", // Switzerland\n\t0x002B: \"AT\", // Austria\n\t0x002C: \"GB\", // United Kingdom\n\t0x002D: \"DK\", // Denmark\n\t0x002E: \"SE\", // Sweden\n\t0x002F: \"NO\", // Norway\n\t0x0030: \"PL\", // Poland\n\t0x0031: \"DE\", // Germany\n\t0x0034: \"MX\", // Mexico\n\t0x0037: \"BR\", // Brazil\n\t0x003d: \"AU\", // Australia\n\t0x0040: \"NZ\", // New Zealand\n\t0x0042: \"TH\", // Thailand\n\t0x0051: \"JP\", // Japan\n\t0x0052: \"KR\", // Korea\n\t0x0054: \"VN\", // Viet Nam\n\t0x0056: \"CN\", // China\n\t0x005A: \"TR\", // Turkey\n\t0x0069: \"JS\", // Ramastan\n\t0x00D5: \"DZ\", // Algeria\n\t0x00D8: \"MA\", // Morocco\n\t0x00DA: \"LY\", // Libya\n\t0x015F: \"PT\", // Portugal\n\t0x0162: \"IS\", // Iceland\n\t0x0166: \"FI\", // Finland\n\t0x01A4: \"CZ\", // Czech Republic\n\t0x0376: \"TW\", // Taiwan\n\t0x03C1: \"LB\", // Lebanon\n\t0x03C2: \"JO\", // Jordan\n\t0x03C3: \"SY\", // Syria\n\t0x03C4: \"IQ\", // Iraq\n\t0x03C5: \"KW\", // Kuwait\n\t0x03C6: \"SA\", // Saudi Arabia\n\t0x03CB: \"AE\", // United Arab Emirates\n\t0x03CC: \"IL\", // Israel\n\t0x03CE: \"QA\", // Qatar\n\t0x03D5: \"IR\", // Iran\n\t0xFFFF: \"US\"  // United States\n};\n\n/* [MS-XLS] 2.5.127 */\nvar XLSFillPattern = [\n\tnull,\n\t'solid',\n\t'mediumGray',\n\t'darkGray',\n\t'lightGray',\n\t'darkHorizontal',\n\t'darkVertical',\n\t'darkDown',\n\t'darkUp',\n\t'darkGrid',\n\t'darkTrellis',\n\t'lightHorizontal',\n\t'lightVertical',\n\t'lightDown',\n\t'lightUp',\n\t'lightGrid',\n\t'lightTrellis',\n\t'gray125',\n\t'gray0625'\n];\n\nfunction rgbify(arr/*:Array<number>*/)/*:Array<[number, number, number]>*/ { return arr.map(function(x) { return [(x>>16)&255,(x>>8)&255,x&255]; }); }\n\n/* [MS-XLS] 2.5.161 */\n/* [MS-XLSB] 2.5.75 Icv */\nvar _XLSIcv = /*#__PURE__*/ rgbify([\n\t/* Color Constants */\n\t0x000000,\n\t0xFFFFFF,\n\t0xFF0000,\n\t0x00FF00,\n\t0x0000FF,\n\t0xFFFF00,\n\t0xFF00FF,\n\t0x00FFFF,\n\n\t/* Overridable Defaults */\n\t0x000000,\n\t0xFFFFFF,\n\t0xFF0000,\n\t0x00FF00,\n\t0x0000FF,\n\t0xFFFF00,\n\t0xFF00FF,\n\t0x00FFFF,\n\n\t0x800000,\n\t0x008000,\n\t0x000080,\n\t0x808000,\n\t0x800080,\n\t0x008080,\n\t0xC0C0C0,\n\t0x808080,\n\t0x9999FF,\n\t0x993366,\n\t0xFFFFCC,\n\t0xCCFFFF,\n\t0x660066,\n\t0xFF8080,\n\t0x0066CC,\n\t0xCCCCFF,\n\n\t0x000080,\n\t0xFF00FF,\n\t0xFFFF00,\n\t0x00FFFF,\n\t0x800080,\n\t0x800000,\n\t0x008080,\n\t0x0000FF,\n\t0x00CCFF,\n\t0xCCFFFF,\n\t0xCCFFCC,\n\t0xFFFF99,\n\t0x99CCFF,\n\t0xFF99CC,\n\t0xCC99FF,\n\t0xFFCC99,\n\n\t0x3366FF,\n\t0x33CCCC,\n\t0x99CC00,\n\t0xFFCC00,\n\t0xFF9900,\n\t0xFF6600,\n\t0x666699,\n\t0x969696,\n\t0x003366,\n\t0x339966,\n\t0x003300,\n\t0x333300,\n\t0x993300,\n\t0x993366,\n\t0x333399,\n\t0x333333,\n\n\t/* Other entries to appease BIFF8/12 */\n\t0x000000, /* 0x40 icvForeground ?? */\n\t0xFFFFFF, /* 0x41 icvBackground ?? */\n\t0x000000, /* 0x42 icvFrame ?? */\n\t0x000000, /* 0x43 icv3D ?? */\n\t0x000000, /* 0x44 icv3DText ?? */\n\t0x000000, /* 0x45 icv3DHilite ?? */\n\t0x000000, /* 0x46 icv3DShadow ?? */\n\t0x000000, /* 0x47 icvHilite ?? */\n\t0x000000, /* 0x48 icvCtlText ?? */\n\t0x000000, /* 0x49 icvCtlScrl ?? */\n\t0x000000, /* 0x4A icvCtlInv ?? */\n\t0x000000, /* 0x4B icvCtlBody ?? */\n\t0x000000, /* 0x4C icvCtlFrame ?? */\n\t0x000000, /* 0x4D icvCtlFore ?? */\n\t0x000000, /* 0x4E icvCtlBack ?? */\n\t0x000000, /* 0x4F icvCtlNeutral */\n\t0x000000, /* 0x50 icvInfoBk ?? */\n\t0x000000 /* 0x51 icvInfoText ?? */\n]);\nvar XLSIcv = /*#__PURE__*/dup(_XLSIcv);\n\n/* [MS-XLSB] 2.5.97.2 */\nvar BErr = {\n\t0x00: \"#NULL!\",\n\t0x07: \"#DIV/0!\",\n\t0x0F: \"#VALUE!\",\n\t0x17: \"#REF!\",\n\t0x1D: \"#NAME?\",\n\t0x24: \"#NUM!\",\n\t0x2A: \"#N/A\",\n\t0x2B: \"#GETTING_DATA\",\n\t0xFF: \"#WTF?\"\n};\n//var RBErr = evert_num(BErr);\nvar RBErr = {\n\t\"#NULL!\":        0x00,\n\t\"#DIV/0!\":       0x07,\n\t\"#VALUE!\":       0x0F,\n\t\"#REF!\":         0x17,\n\t\"#NAME?\":        0x1D,\n\t\"#NUM!\":         0x24,\n\t\"#N/A\":          0x2A,\n\t\"#GETTING_DATA\": 0x2B,\n\t\"#WTF?\":         0xFF\n};\n\nvar XLSLblBuiltIn = [\n\t\"_xlnm.Consolidate_Area\",\n\t\"_xlnm.Auto_Open\",\n\t\"_xlnm.Auto_Close\",\n\t\"_xlnm.Extract\",\n\t\"_xlnm.Database\",\n\t\"_xlnm.Criteria\",\n\t\"_xlnm.Print_Area\",\n\t\"_xlnm.Print_Titles\",\n\t\"_xlnm.Recorder\",\n\t\"_xlnm.Data_Form\",\n\t\"_xlnm.Auto_Activate\",\n\t\"_xlnm.Auto_Deactivate\",\n\t\"_xlnm.Sheet_Title\",\n\t\"_xlnm._FilterDatabase\"\n];\n\n/* Parts enumerated in OPC spec, MS-XLSB and MS-XLSX */\n/* 12.3 Part Summary <SpreadsheetML> */\n/* 14.2 Part Summary <DrawingML> */\n/* [MS-XLSX] 2.1 Part Enumerations ; [MS-XLSB] 2.1.7 Part Enumeration */\nvar ct2type/*{[string]:string}*/ = ({\n\t/* Workbook */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": \"workbooks\",\n\t\"application/vnd.ms-excel.sheet.macroEnabled.main+xml\": \"workbooks\",\n\t\"application/vnd.ms-excel.sheet.binary.macroEnabled.main\": \"workbooks\",\n\t\"application/vnd.ms-excel.addin.macroEnabled.main+xml\": \"workbooks\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": \"workbooks\",\n\n\t/* Worksheet */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": \"sheets\",\n\t\"application/vnd.ms-excel.worksheet\": \"sheets\",\n\t\"application/vnd.ms-excel.binIndexWs\": \"TODO\", /* Binary Index */\n\n\t/* Chartsheet */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": \"charts\",\n\t\"application/vnd.ms-excel.chartsheet\": \"charts\",\n\n\t/* Macrosheet */\n\t\"application/vnd.ms-excel.macrosheet+xml\": \"macros\",\n\t\"application/vnd.ms-excel.macrosheet\": \"macros\",\n\t\"application/vnd.ms-excel.intlmacrosheet\": \"TODO\",\n\t\"application/vnd.ms-excel.binIndexMs\": \"TODO\", /* Binary Index */\n\n\t/* Dialogsheet */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": \"dialogs\",\n\t\"application/vnd.ms-excel.dialogsheet\": \"dialogs\",\n\n\t/* Shared Strings */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\": \"strs\",\n\t\"application/vnd.ms-excel.sharedStrings\": \"strs\",\n\n\t/* Styles */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": \"styles\",\n\t\"application/vnd.ms-excel.styles\": \"styles\",\n\n\t/* File Properties */\n\t\"application/vnd.openxmlformats-package.core-properties+xml\": \"coreprops\",\n\t\"application/vnd.openxmlformats-officedocument.custom-properties+xml\": \"custprops\",\n\t\"application/vnd.openxmlformats-officedocument.extended-properties+xml\": \"extprops\",\n\n\t/* Custom Data Properties */\n\t\"application/vnd.openxmlformats-officedocument.customXmlProperties+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.customProperty\": \"TODO\",\n\n\t/* Comments */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": \"comments\",\n\t\"application/vnd.ms-excel.comments\": \"comments\",\n\t\"application/vnd.ms-excel.threadedcomments+xml\": \"threadedcomments\",\n\t\"application/vnd.ms-excel.person+xml\": \"people\",\n\n\t/* Metadata (Stock/Geography and Dynamic Array) */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml\": \"metadata\",\n\t\"application/vnd.ms-excel.sheetMetadata\": \"metadata\",\n\n\t/* PivotTable */\n\t\"application/vnd.ms-excel.pivotTable\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml\": \"TODO\",\n\n\t/* Chart Objects */\n\t\"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": \"TODO\",\n\n\t/* Chart Colors */\n\t\"application/vnd.ms-office.chartcolorstyle+xml\": \"TODO\",\n\n\t/* Chart Style */\n\t\"application/vnd.ms-office.chartstyle+xml\": \"TODO\",\n\n\t/* Chart Advanced */\n\t\"application/vnd.ms-office.chartex+xml\": \"TODO\",\n\n\t/* Calculation Chain */\n\t\"application/vnd.ms-excel.calcChain\": \"calcchains\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml\": \"calcchains\",\n\n\t/* Printer Settings */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings\": \"TODO\",\n\n\t/* ActiveX */\n\t\"application/vnd.ms-office.activeX\": \"TODO\",\n\t\"application/vnd.ms-office.activeX+xml\": \"TODO\",\n\n\t/* Custom Toolbars */\n\t\"application/vnd.ms-excel.attachedToolbars\": \"TODO\",\n\n\t/* External Data Connections */\n\t\"application/vnd.ms-excel.connections\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": \"TODO\",\n\n\t/* External Links */\n\t\"application/vnd.ms-excel.externalLink\": \"links\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml\": \"links\",\n\n\t/* PivotCache */\n\t\"application/vnd.ms-excel.pivotCacheDefinition\": \"TODO\",\n\t\"application/vnd.ms-excel.pivotCacheRecords\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml\": \"TODO\",\n\n\t/* Query Table */\n\t\"application/vnd.ms-excel.queryTable\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml\": \"TODO\",\n\n\t/* Shared Workbook */\n\t\"application/vnd.ms-excel.userNames\": \"TODO\",\n\t\"application/vnd.ms-excel.revisionHeaders\": \"TODO\",\n\t\"application/vnd.ms-excel.revisionLog\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml\": \"TODO\",\n\n\t/* Single Cell Table */\n\t\"application/vnd.ms-excel.tableSingleCells\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml\": \"TODO\",\n\n\t/* Slicer */\n\t\"application/vnd.ms-excel.slicer\": \"TODO\",\n\t\"application/vnd.ms-excel.slicerCache\": \"TODO\",\n\t\"application/vnd.ms-excel.slicer+xml\": \"TODO\",\n\t\"application/vnd.ms-excel.slicerCache+xml\": \"TODO\",\n\n\t/* Sort Map */\n\t\"application/vnd.ms-excel.wsSortMap\": \"TODO\",\n\n\t/* Table */\n\t\"application/vnd.ms-excel.table\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": \"TODO\",\n\n\t/* Themes */\n\t\"application/vnd.openxmlformats-officedocument.theme+xml\": \"themes\",\n\n\t/* Theme Override */\n\t\"application/vnd.openxmlformats-officedocument.themeOverride+xml\": \"TODO\",\n\n\t/* Timeline */\n\t\"application/vnd.ms-excel.Timeline+xml\": \"TODO\", /* verify */\n\t\"application/vnd.ms-excel.TimelineCache+xml\": \"TODO\", /* verify */\n\n\t/* VBA */\n\t\"application/vnd.ms-office.vbaProject\": \"vba\",\n\t\"application/vnd.ms-office.vbaProjectSignature\": \"TODO\",\n\n\t/* Volatile Dependencies */\n\t\"application/vnd.ms-office.volatileDependencies\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml\": \"TODO\",\n\n\t/* Control Properties */\n\t\"application/vnd.ms-excel.controlproperties+xml\": \"TODO\",\n\n\t/* Data Model */\n\t\"application/vnd.openxmlformats-officedocument.model+data\": \"TODO\",\n\n\t/* Survey */\n\t\"application/vnd.ms-excel.Survey+xml\": \"TODO\",\n\n\t/* Drawing */\n\t\"application/vnd.openxmlformats-officedocument.drawing+xml\": \"drawings\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml\": \"TODO\",\n\n\t/* VML */\n\t\"application/vnd.openxmlformats-officedocument.vmlDrawing\": \"TODO\",\n\n\t\"application/vnd.openxmlformats-package.relationships+xml\": \"rels\",\n\t\"application/vnd.openxmlformats-officedocument.oleObject\": \"TODO\",\n\n\t/* Image */\n\t\"image/png\": \"TODO\",\n\n\t\"sheet\": \"js\"\n}/*:any*/);\n\nvar CT_LIST = {\n\tworkbooks: {\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\",\n\t\txlsm: \"application/vnd.ms-excel.sheet.macroEnabled.main+xml\",\n\t\txlsb: \"application/vnd.ms-excel.sheet.binary.macroEnabled.main\",\n\t\txlam: \"application/vnd.ms-excel.addin.macroEnabled.main+xml\",\n\t\txltx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\"\n\t},\n\tstrs: { /* Shared Strings */\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\",\n\t\txlsb: \"application/vnd.ms-excel.sharedStrings\"\n\t},\n\tcomments: { /* Comments */\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\",\n\t\txlsb: \"application/vnd.ms-excel.comments\"\n\t},\n\tsheets: { /* Worksheet */\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\",\n\t\txlsb: \"application/vnd.ms-excel.worksheet\"\n\t},\n\tcharts: { /* Chartsheet */\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\",\n\t\txlsb: \"application/vnd.ms-excel.chartsheet\"\n\t},\n\tdialogs: { /* Dialogsheet */\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\",\n\t\txlsb: \"application/vnd.ms-excel.dialogsheet\"\n\t},\n\tmacros: { /* Macrosheet (Excel 4.0 Macros) */\n\t\txlsx: \"application/vnd.ms-excel.macrosheet+xml\",\n\t\txlsb: \"application/vnd.ms-excel.macrosheet\"\n\t},\n\tmetadata: { /* Metadata (Stock/Geography and Dynamic Array) */\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml\",\n\t\txlsb: \"application/vnd.ms-excel.sheetMetadata\"\n\t},\n\tstyles: { /* Styles */\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\",\n\t\txlsb: \"application/vnd.ms-excel.styles\"\n\t}\n};\n\nfunction new_ct()/*:any*/ {\n\treturn ({\n\t\tworkbooks:[], sheets:[], charts:[], dialogs:[], macros:[],\n\t\trels:[], strs:[], comments:[], threadedcomments:[], links:[],\n\t\tcoreprops:[], extprops:[], custprops:[], themes:[], styles:[],\n\t\tcalcchains:[], vba: [], drawings: [], metadata: [], people:[],\n\t\tTODO:[], xmlns: \"\" }/*:any*/);\n}\n\nfunction parse_ct(data/*:?string*/) {\n\tvar ct = new_ct();\n\tif(!data || !data.match) return ct;\n\tvar ctext = {};\n\t(data.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0].replace(nsregex,\"<\")) {\n\t\t\tcase '<?xml': break;\n\t\t\tcase '<Types': ct.xmlns = y['xmlns' + (y[0].match(/<(\\w+):/)||[\"\",\"\"])[1] ]; break;\n\t\t\tcase '<Default': ctext[y.Extension.toLowerCase()] = y.ContentType; break;\n\t\t\tcase '<Override':\n\t\t\t\tif(ct[ct2type[y.ContentType]] !== undefined) ct[ct2type[y.ContentType]].push(y.PartName);\n\t\t\t\tbreak;\n\t\t}\n\t});\n\tif(ct.xmlns !== XMLNS.CT) throw new Error(\"Unknown Namespace: \" + ct.xmlns);\n\tct.calcchain = ct.calcchains.length > 0 ? ct.calcchains[0] : \"\";\n\tct.sst = ct.strs.length > 0 ? ct.strs[0] : \"\";\n\tct.style = ct.styles.length > 0 ? ct.styles[0] : \"\";\n\tct.defaults = ctext;\n\tdelete ct.calcchains;\n\treturn ct;\n}\n\nfunction write_ct(ct, opts, raw)/*:string*/ {\n\tvar type2ct/*{[string]:Array<string>}*/ = evert_arr(ct2type);\n\n\tvar o/*:Array<string>*/ = [], v;\n\n\tif(!raw) {\n\t\to[o.length] = (XML_HEADER);\n\t\to[o.length] = writextag('Types', null, {\n\t\t\t'xmlns': XMLNS.CT,\n\t\t\t'xmlns:xsd': XMLNS.xsd,\n\t\t\t'xmlns:xsi': XMLNS.xsi\n\t\t});\n\t\to = o.concat([\n\t\t\t['xml', 'application/xml'],\n\t\t\t['bin', 'application/vnd.ms-excel.sheet.binary.macroEnabled.main'],\n\t\t\t['vml', 'application/vnd.openxmlformats-officedocument.vmlDrawing'],\n\t\t\t['data', 'application/vnd.openxmlformats-officedocument.model+data'],\n\t\t\t/* from test files */\n\t\t\t['bmp', 'image/bmp'],\n\t\t\t['png', 'image/png'],\n\t\t\t['gif', 'image/gif'],\n\t\t\t['emf', 'image/x-emf'],\n\t\t\t['wmf', 'image/x-wmf'],\n\t\t\t['jpg', 'image/jpeg'], ['jpeg', 'image/jpeg'],\n\t\t\t['tif', 'image/tiff'], ['tiff', 'image/tiff'],\n\t\t\t['pdf', 'application/pdf'],\n\t\t\t['rels', 'application/vnd.openxmlformats-package.relationships+xml']\n\t\t].map(function(x) {\n\t\t\treturn writextag('Default', null, {'Extension':x[0], 'ContentType': x[1]});\n\t\t}));\n\t}\n\n\t/* only write first instance */\n\tvar f1 = function(w) {\n\t\tif(ct[w] && ct[w].length > 0) {\n\t\t\tv = ct[w][0];\n\t\t\to[o.length] = (writextag('Override', null, {\n\t\t\t\t'PartName': (v[0] == '/' ? \"\":\"/\") + v,\n\t\t\t\t'ContentType': CT_LIST[w][opts.bookType] || CT_LIST[w]['xlsx']\n\t\t\t}));\n\t\t}\n\t};\n\n\t/* book type-specific */\n\tvar f2 = function(w) {\n\t\t(ct[w]||[]).forEach(function(v) {\n\t\t\to[o.length] = (writextag('Override', null, {\n\t\t\t\t'PartName': (v[0] == '/' ? \"\":\"/\") + v,\n\t\t\t\t'ContentType': CT_LIST[w][opts.bookType] || CT_LIST[w]['xlsx']\n\t\t\t}));\n\t\t});\n\t};\n\n\t/* standard type */\n\tvar f3 = function(t) {\n\t\t(ct[t]||[]).forEach(function(v) {\n\t\t\to[o.length] = (writextag('Override', null, {\n\t\t\t\t'PartName': (v[0] == '/' ? \"\":\"/\") + v,\n\t\t\t\t'ContentType': type2ct[t][0]\n\t\t\t}));\n\t\t});\n\t};\n\n\tf1('workbooks');\n\tf2('sheets');\n\tf2('charts');\n\tf3('themes');\n\t['strs', 'styles'].forEach(f1);\n\t['coreprops', 'extprops', 'custprops'].forEach(f3);\n\tf3('vba');\n\tf3('comments');\n\tf3('threadedcomments');\n\tf3('drawings');\n\tf2('metadata');\n\tf3('people');\n\tif(!raw && o.length>2){ o[o.length] = ('</Types>'); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* 9.3 Relationships */\nvar RELS = ({\n\tWB: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n\tSHEET: \"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n\tHLINK: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\",\n\tVML: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing\",\n\tXPATH: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath\",\n\tXMISS: \"http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing\",\n\tXLINK: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink\",\n\tCXML: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml\",\n\tCXMLP: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps\",\n\tCMNT: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments\",\n\tCORE_PROPS: \"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\",\n\tEXT_PROPS: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties',\n\tCUST_PROPS: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties',\n\tSST: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\",\n\tSTY: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\",\n\tTHEME: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\",\n\tCHART: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart\",\n\tCHARTEX: \"http://schemas.microsoft.com/office/2014/relationships/chartEx\",\n\tCS: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet\",\n\tWS: [\n\t\t\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\",\n\t\t\"http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet\"\n\t],\n\tDS: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/dialogsheet\",\n\tMS: \"http://schemas.microsoft.com/office/2006/relationships/xlMacrosheet\",\n\tIMG: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",\n\tDRAW: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing\",\n\tXLMETA: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sheetMetadata\",\n\tTCMNT: \"http://schemas.microsoft.com/office/2017/10/relationships/threadedComment\",\n\tPEOPLE: \"http://schemas.microsoft.com/office/2017/10/relationships/person\",\n\tCONN: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/connections\",\n\tVBA: \"http://schemas.microsoft.com/office/2006/relationships/vbaProject\"\n}/*:any*/);\n\n/* 9.3.3 Representing Relationships */\nfunction get_rels_path(file/*:string*/)/*:string*/ {\n\tvar n = file.lastIndexOf(\"/\");\n\treturn file.slice(0,n+1) + '_rels/' + file.slice(n+1) + \".rels\";\n}\n\nfunction parse_rels(data/*:?string*/, currentFilePath/*:string*/) {\n\tvar rels = {\"!id\":{}};\n\tif (!data) return rels;\n\tif (currentFilePath.charAt(0) !== '/') {\n\t\tcurrentFilePath = '/'+currentFilePath;\n\t}\n\tvar hash = {};\n\n\t(data.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\t/* 9.3.2.2 OPC_Relationships */\n\t\tif (y[0] === '<Relationship') {\n\t\t\tvar rel = {}; rel.Type = y.Type; rel.Target = unescapexml(y.Target); rel.Id = y.Id; if(y.TargetMode) rel.TargetMode = y.TargetMode;\n\t\t\tvar canonictarget = y.TargetMode === 'External' ? y.Target : resolve_path(y.Target, currentFilePath);\n\t\t\trels[canonictarget] = rel;\n\t\t\thash[y.Id] = rel;\n\t\t}\n\t});\n\trels[\"!id\"] = hash;\n\treturn rels;\n}\n\n\n/* TODO */\nfunction write_rels(rels)/*:string*/ {\n\tvar o = [XML_HEADER, writextag('Relationships', null, {\n\t\t//'xmlns:ns0': XMLNS.RELS,\n\t\t'xmlns': XMLNS.RELS\n\t})];\n\tkeys(rels['!id']).forEach(function(rid) {\n\t\to[o.length] = (writextag('Relationship', null, rels['!id'][rid]));\n\t});\n\tif(o.length>2){ o[o.length] = ('</Relationships>'); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\nfunction add_rels(rels, rId/*:number*/, f, type, relobj, targetmode/*:?string*/)/*:number*/ {\n\tif(!relobj) relobj = {};\n\tif(!rels['!id']) rels['!id'] = {};\n\tif(!rels['!idx']) rels['!idx'] = 1;\n\tif(rId < 0) for(rId = rels['!idx']; rels['!id']['rId' + rId]; ++rId){/* empty */}\n\trels['!idx'] = rId + 1;\n\trelobj.Id = 'rId' + rId;\n\trelobj.Type = type;\n\trelobj.Target = f;\n\tif(targetmode) relobj.TargetMode = targetmode;\n\telse if([RELS.HLINK, RELS.XPATH, RELS.XMISS].indexOf(relobj.Type) > -1) relobj.TargetMode = \"External\";\n\tif(rels['!id'][relobj.Id]) throw new Error(\"Cannot rewrite rId \" + rId);\n\trels['!id'][relobj.Id] = relobj;\n\trels[('/' + relobj.Target).replace(\"//\",\"/\")] = relobj;\n\treturn rId;\n}\nvar CT_ODS = \"application/vnd.oasis.opendocument.spreadsheet\";\nfunction parse_manifest(d, opts) {\n  var str = xlml_normalize(d);\n  var Rn;\n  var FEtag;\n  while (Rn = xlmlregex.exec(str))\n    switch (Rn[3]) {\n      case \"manifest\":\n        break;\n      case \"file-entry\":\n        FEtag = parsexmltag(Rn[0], false);\n        if (FEtag.path == \"/\" && FEtag.type !== CT_ODS)\n          throw new Error(\"This OpenDocument is not a spreadsheet\");\n        break;\n      case \"encryption-data\":\n      case \"algorithm\":\n      case \"start-key-generation\":\n      case \"key-derivation\":\n        throw new Error(\"Unsupported ODS Encryption\");\n      default:\n        if (opts && opts.WTF)\n          throw Rn;\n    }\n}\nfunction write_manifest(manifest) {\n  var o = [XML_HEADER];\n  o.push('<manifest:manifest xmlns:manifest=\"urn:oasis:names:tc:opendocument:xmlns:manifest:1.0\" manifest:version=\"1.2\">\\n');\n  o.push('  <manifest:file-entry manifest:full-path=\"/\" manifest:version=\"1.2\" manifest:media-type=\"application/vnd.oasis.opendocument.spreadsheet\"/>\\n');\n  for (var i = 0; i < manifest.length; ++i)\n    o.push('  <manifest:file-entry manifest:full-path=\"' + manifest[i][0] + '\" manifest:media-type=\"' + manifest[i][1] + '\"/>\\n');\n  o.push(\"</manifest:manifest>\");\n  return o.join(\"\");\n}\nfunction write_rdf_type(file, res, tag) {\n  return [\n    '  <rdf:Description rdf:about=\"' + file + '\">\\n',\n    '    <rdf:type rdf:resource=\"http://docs.oasis-open.org/ns/office/1.2/meta/' + (tag || \"odf\") + \"#\" + res + '\"/>\\n',\n    \"  </rdf:Description>\\n\"\n  ].join(\"\");\n}\nfunction write_rdf_has(base, file) {\n  return [\n    '  <rdf:Description rdf:about=\"' + base + '\">\\n',\n    '    <ns0:hasPart xmlns:ns0=\"http://docs.oasis-open.org/ns/office/1.2/meta/pkg#\" rdf:resource=\"' + file + '\"/>\\n',\n    \"  </rdf:Description>\\n\"\n  ].join(\"\");\n}\nfunction write_rdf(rdf) {\n  var o = [XML_HEADER];\n  o.push('<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\\n');\n  for (var i = 0; i != rdf.length; ++i) {\n    o.push(write_rdf_type(rdf[i][0], rdf[i][1]));\n    o.push(write_rdf_has(\"\", rdf[i][0]));\n  }\n  o.push(write_rdf_type(\"\", \"Document\", \"pkg\"));\n  o.push(\"</rdf:RDF>\");\n  return o.join(\"\");\n}\nfunction write_meta_ods(wb, opts) {\n  return '<office:document-meta xmlns:office=\"urn:oasis:names:tc:opendocument:xmlns:office:1.0\" xmlns:meta=\"urn:oasis:names:tc:opendocument:xmlns:meta:1.0\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" office:version=\"1.2\"><office:meta><meta:generator>SheetJS ' + XLSX.version + \"</meta:generator></office:meta></office:document-meta>\";\n}\n/* ECMA-376 Part II 11.1 Core Properties Part */\n/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */\nvar CORE_PROPS/*:Array<Array<string> >*/ = [\n\t[\"cp:category\", \"Category\"],\n\t[\"cp:contentStatus\", \"ContentStatus\"],\n\t[\"cp:keywords\", \"Keywords\"],\n\t[\"cp:lastModifiedBy\", \"LastAuthor\"],\n\t[\"cp:lastPrinted\", \"LastPrinted\"],\n\t[\"cp:revision\", \"RevNumber\"],\n\t[\"cp:version\", \"Version\"],\n\t[\"dc:creator\", \"Author\"],\n\t[\"dc:description\", \"Comments\"],\n\t[\"dc:identifier\", \"Identifier\"],\n\t[\"dc:language\", \"Language\"],\n\t[\"dc:subject\", \"Subject\"],\n\t[\"dc:title\", \"Title\"],\n\t[\"dcterms:created\", \"CreatedDate\", 'date'],\n\t[\"dcterms:modified\", \"ModifiedDate\", 'date']\n];\n\nfunction parse_core_props(data) {\n\tvar p = {};\n\tdata = utf8read(data);\n\n\tfor(var i = 0; i < CORE_PROPS.length; ++i) {\n\t\tvar f = CORE_PROPS[i], cur = str_match_xml(data, f[0]);\n\t\tif(cur != null && cur.length > 0) p[f[1]] = unescapexml(cur[1]);\n\t\tif(f[2] === 'date' && p[f[1]]) p[f[1]] = parseDate(p[f[1]]);\n\t}\n\n\treturn p;\n}\n\nfunction cp_doit(f, g, h, o, p) {\n\tif(p[f] != null || g == null || g === \"\") return;\n\tp[f] = g;\n\tg = escapexml(g);\n\to[o.length] = (h ? writextag(f,g,h) : writetag(f,g));\n}\n\nfunction write_core_props(cp, _opts) {\n\tvar opts = _opts || {};\n\tvar o = [XML_HEADER, writextag('cp:coreProperties', null, {\n\t\t//'xmlns': XMLNS.CORE_PROPS,\n\t\t'xmlns:cp': XMLNS.CORE_PROPS,\n\t\t'xmlns:dc': XMLNS.dc,\n\t\t'xmlns:dcterms': XMLNS.dcterms,\n\t\t'xmlns:dcmitype': XMLNS.dcmitype,\n\t\t'xmlns:xsi': XMLNS.xsi\n\t})], p = {};\n\tif(!cp && !opts.Props) return o.join(\"\");\n\n\tif(cp) {\n\t\tif(cp.CreatedDate != null) cp_doit(\"dcterms:created\", typeof cp.CreatedDate === \"string\" ? cp.CreatedDate : write_w3cdtf(cp.CreatedDate, opts.WTF), {\"xsi:type\":\"dcterms:W3CDTF\"}, o, p);\n\t\tif(cp.ModifiedDate != null) cp_doit(\"dcterms:modified\", typeof cp.ModifiedDate === \"string\" ? cp.ModifiedDate : write_w3cdtf(cp.ModifiedDate, opts.WTF), {\"xsi:type\":\"dcterms:W3CDTF\"}, o, p);\n\t}\n\n\tfor(var i = 0; i != CORE_PROPS.length; ++i) {\n\t\tvar f = CORE_PROPS[i];\n\t\tvar v = opts.Props && opts.Props[f[1]] != null ? opts.Props[f[1]] : cp ? cp[f[1]] : null;\n\t\tif(v === true) v = \"1\";\n\t\telse if(v === false) v = \"0\";\n\t\telse if(typeof v == \"number\") v = String(v);\n\t\tif(v != null) cp_doit(f[0], v, null, o, p);\n\t}\n\tif(o.length>2){ o[o.length] = ('</cp:coreProperties>'); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* 15.2.12.3 Extended File Properties Part */\n/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */\nvar EXT_PROPS/*:Array<Array<string> >*/ = [\n\t[\"Application\", \"Application\", \"string\"],\n\t[\"AppVersion\", \"AppVersion\", \"string\"],\n\t[\"Company\", \"Company\", \"string\"],\n\t[\"DocSecurity\", \"DocSecurity\", \"string\"],\n\t[\"Manager\", \"Manager\", \"string\"],\n\t[\"HyperlinksChanged\", \"HyperlinksChanged\", \"bool\"],\n\t[\"SharedDoc\", \"SharedDoc\", \"bool\"],\n\t[\"LinksUpToDate\", \"LinksUpToDate\", \"bool\"],\n\t[\"ScaleCrop\", \"ScaleCrop\", \"bool\"],\n\t[\"HeadingPairs\", \"HeadingPairs\", \"raw\"],\n\t[\"TitlesOfParts\", \"TitlesOfParts\", \"raw\"]\n];\n\nvar PseudoPropsPairs = [\n\t\"Worksheets\",  \"SheetNames\",\n\t\"NamedRanges\", \"DefinedNames\",\n\t\"Chartsheets\", \"ChartNames\"\n];\nfunction load_props_pairs(HP/*:string|Array<Array<any>>*/, TOP, props, opts) {\n\tvar v = [];\n\tif(typeof HP == \"string\") v = parseVector(HP, opts);\n\telse for(var j = 0; j < HP.length; ++j) v = v.concat(HP[j].map(function(hp) { return {v:hp}; }));\n\tvar parts = (typeof TOP == \"string\") ? parseVector(TOP, opts).map(function (x) { return x.v; }) : TOP;\n\tvar idx = 0, len = 0;\n\tif(parts.length > 0) for(var i = 0; i !== v.length; i += 2) {\n\t\tlen = +(v[i+1].v);\n\t\tswitch(v[i].v) {\n\t\t\tcase \"Worksheets\":\n\t\t\tcase \"工作表\":\n\t\t\tcase \"Листы\":\n\t\t\tcase \"أوراق العمل\":\n\t\t\tcase \"ワークシート\":\n\t\t\tcase \"גליונות עבודה\":\n\t\t\tcase \"Arbeitsblätter\":\n\t\t\tcase \"Çalışma Sayfaları\":\n\t\t\tcase \"Feuilles de calcul\":\n\t\t\tcase \"Fogli di lavoro\":\n\t\t\tcase \"Folhas de cálculo\":\n\t\t\tcase \"Planilhas\":\n\t\t\tcase \"Regneark\":\n\t\t\tcase \"Hojas de cálculo\":\n\t\t\tcase \"Werkbladen\":\n\t\t\t\tprops.Worksheets = len;\n\t\t\t\tprops.SheetNames = parts.slice(idx, idx + len);\n\t\t\t\tbreak;\n\n\t\t\tcase \"Named Ranges\":\n\t\t\tcase \"Rangos con nombre\":\n\t\t\tcase \"名前付き一覧\":\n\t\t\tcase \"Benannte Bereiche\":\n\t\t\tcase \"Navngivne områder\":\n\t\t\t\tprops.NamedRanges = len;\n\t\t\t\tprops.DefinedNames = parts.slice(idx, idx + len);\n\t\t\t\tbreak;\n\n\t\t\tcase \"Charts\":\n\t\t\tcase \"Diagramme\":\n\t\t\t\tprops.Chartsheets = len;\n\t\t\t\tprops.ChartNames = parts.slice(idx, idx + len);\n\t\t\t\tbreak;\n\t\t}\n\t\tidx += len;\n\t}\n}\n\nfunction parse_ext_props(data, p, opts) {\n\tvar q = {}; if(!p) p = {};\n\tdata = utf8read(data);\n\n\tEXT_PROPS.forEach(function(f) {\n\t\tvar xml = (str_match_xml_ns(data, f[0])||[])[1];\n\t\tswitch(f[2]) {\n\t\t\tcase \"string\": if(xml) p[f[1]] = unescapexml(xml); break;\n\t\t\tcase \"bool\": p[f[1]] = xml === \"true\"; break;\n\t\t\tcase \"raw\":\n\t\t\t\tvar cur = str_match_xml(data, f[0]);\n\t\t\t\tif(cur && cur.length > 0) q[f[1]] = cur[1];\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif(q.HeadingPairs && q.TitlesOfParts) load_props_pairs(q.HeadingPairs, q.TitlesOfParts, p, opts);\n\n\treturn p;\n}\n\nfunction write_ext_props(cp/*::, opts*/)/*:string*/ {\n\tvar o/*:Array<string>*/ = [], W = writextag;\n\tif(!cp) cp = {};\n\tcp.Application = \"SheetJS\";\n\to[o.length] = (XML_HEADER);\n\to[o.length] = (writextag('Properties', null, {\n\t\t'xmlns': XMLNS.EXT_PROPS,\n\t\t'xmlns:vt': XMLNS.vt\n\t}));\n\n\tEXT_PROPS.forEach(function(f) {\n\t\tif(cp[f[1]] === undefined) return;\n\t\tvar v;\n\t\tswitch(f[2]) {\n\t\t\tcase 'string': v = escapexml(String(cp[f[1]])); break;\n\t\t\tcase 'bool': v = cp[f[1]] ? 'true' : 'false'; break;\n\t\t}\n\t\tif(v !== undefined) o[o.length] = (W(f[0], v));\n\t});\n\n\t/* TODO: HeadingPairs, TitlesOfParts */\n\to[o.length] = (W('HeadingPairs', W('vt:vector', W('vt:variant', '<vt:lpstr>Worksheets</vt:lpstr>')+W('vt:variant', W('vt:i4', String(cp.Worksheets))), {size:2, baseType:\"variant\"})));\n\to[o.length] = (W('TitlesOfParts', W('vt:vector', cp.SheetNames.map(function(s) { return \"<vt:lpstr>\" + escapexml(s) + \"</vt:lpstr>\"; }).join(\"\"), {size: cp.Worksheets, baseType:\"lpstr\"})));\n\tif(o.length>2){ o[o.length] = ('</Properties>'); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* 15.2.12.2 Custom File Properties Part */\nvar custregex = /<[^<>]+>[^<]*/g;\nfunction parse_cust_props(data/*:string*/, opts) {\n\tvar p = {}, name = \"\";\n\tvar m = data.match(custregex);\n\tif(m) for(var i = 0; i != m.length; ++i) {\n\t\tvar x = m[i], y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '<?xml': break;\n\t\t\tcase '<Properties': break;\n\t\t\tcase '<property': name = unescapexml(y.name); break;\n\t\t\tcase '</property>': name = null; break;\n\t\t\tdefault: if (x.indexOf('<vt:') === 0) {\n\t\t\t\tvar toks = x.split('>');\n\t\t\t\tvar type = toks[0].slice(4), text = toks[1];\n\t\t\t\t/* 22.4.2.32 (CT_Variant). Omit the binary types from 22.4 (Variant Types) */\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase 'lpstr': case 'bstr': case 'lpwstr':\n\t\t\t\t\t\tp[name] = unescapexml(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'bool':\n\t\t\t\t\t\tp[name] = parsexmlbool(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'i1': case 'i2': case 'i4': case 'i8': case 'int': case 'uint':\n\t\t\t\t\t\tp[name] = parseInt(text, 10);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'r4': case 'r8': case 'decimal':\n\t\t\t\t\t\tp[name] = parseFloat(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'filetime': case 'date':\n\t\t\t\t\t\tp[name] = parseDate(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'cy': case 'error':\n\t\t\t\t\t\tp[name] = unescapexml(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif(type.slice(-1) == '/') break;\n\t\t\t\t\t\tif(opts.WTF && typeof console !== 'undefined') console.warn('Unexpected', x, type, toks);\n\t\t\t\t}\n\t\t\t} else if(x.slice(0,2) === \"</\") {/* empty */\n\t\t\t} else if(opts.WTF) throw new Error(x);\n\t\t}\n\t}\n\treturn p;\n}\n\nfunction write_cust_props(cp/*::, opts*/)/*:string*/ {\n\tvar o = [XML_HEADER, writextag('Properties', null, {\n\t\t'xmlns': XMLNS.CUST_PROPS,\n\t\t'xmlns:vt': XMLNS.vt\n\t})];\n\tif(!cp) return o.join(\"\");\n\tvar pid = 1;\n\tkeys(cp).forEach(function custprop(k) { ++pid;\n\t\to[o.length] = (writextag('property', write_vt(cp[k], true), {\n\t\t\t'fmtid': '{D5CDD505-2E9C-101B-9397-08002B2CF9AE}',\n\t\t\t'pid': pid,\n\t\t\t'name': escapexml(k)\n\t\t}));\n\t});\n\tif(o.length>2){ o[o.length] = '</Properties>'; o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* Common Name -> XLML Name */\nvar XLMLDocPropsMap = {\n\tTitle: 'Title',\n\tSubject: 'Subject',\n\tAuthor: 'Author',\n\tKeywords: 'Keywords',\n\tComments: 'Description',\n\tLastAuthor: 'LastAuthor',\n\tRevNumber: 'Revision',\n\tApplication: 'AppName',\n\t/* TotalTime: 'TotalTime', */\n\tLastPrinted: 'LastPrinted',\n\tCreatedDate: 'Created',\n\tModifiedDate: 'LastSaved',\n\t/* Pages */\n\t/* Words */\n\t/* Characters */\n\tCategory: 'Category',\n\t/* PresentationFormat */\n\tManager: 'Manager',\n\tCompany: 'Company',\n\t/* Guid */\n\t/* HyperlinkBase */\n\t/* Bytes */\n\t/* Lines */\n\t/* Paragraphs */\n\t/* CharactersWithSpaces */\n\tAppVersion: 'Version',\n\n\tContentStatus: 'ContentStatus', /* NOTE: missing from schema */\n\tIdentifier: 'Identifier', /* NOTE: missing from schema */\n\tLanguage: 'Language' /* NOTE: missing from schema */\n};\nvar evert_XLMLDPM;\n\nfunction xlml_set_prop(Props, tag/*:string*/, val) {\n\tif(!evert_XLMLDPM) evert_XLMLDPM = evert(XLMLDocPropsMap);\n\ttag = evert_XLMLDPM[tag] || tag;\n\tProps[tag] = val;\n}\n\nfunction xlml_write_docprops(Props, opts) {\n\tvar o/*:Array<string>*/ = [];\n\tkeys(XLMLDocPropsMap).map(function(m) {\n\t\tfor(var i = 0; i < CORE_PROPS.length; ++i) if(CORE_PROPS[i][1] == m) return CORE_PROPS[i];\n\t\tfor(i = 0; i < EXT_PROPS.length; ++i) if(EXT_PROPS[i][1] == m) return EXT_PROPS[i];\n\t\tthrow m;\n\t}).forEach(function(p) {\n\t\tif(Props[p[1]] == null) return;\n\t\tvar m = opts && opts.Props && opts.Props[p[1]] != null ? opts.Props[p[1]] : Props[p[1]];\n\t\tswitch(p[2]) {\n\t\t\tcase 'date': m = new Date(m).toISOString().replace(/\\.\\d*Z/,\"Z\"); break;\n\t\t}\n\t\tif(typeof m == 'number') m = String(m);\n\t\telse if(m === true || m === false) { m = m ? \"1\" : \"0\"; }\n\t\telse if(m instanceof Date) m = new Date(m).toISOString().replace(/\\.\\d*Z/,\"\");\n\t\to.push(writetag(XLMLDocPropsMap[p[1]] || p[1], m));\n\t});\n\treturn writextag('DocumentProperties', o.join(\"\"), {xmlns:XLMLNS.o });\n}\nfunction xlml_write_custprops(Props, Custprops/*::, opts*/) {\n\tvar BLACKLIST = [\"Worksheets\",\"SheetNames\"];\n\tvar T = 'CustomDocumentProperties';\n\tvar o/*:Array<string>*/ = [];\n\tif(Props) keys(Props).forEach(function(k) {\n\t\t/*:: if(!Props) return; */\n\t\tif(!Object.prototype.hasOwnProperty.call(Props, k)) return;\n\t\tfor(var i = 0; i < CORE_PROPS.length; ++i) if(k == CORE_PROPS[i][1]) return;\n\t\tfor(i = 0; i < EXT_PROPS.length; ++i) if(k == EXT_PROPS[i][1]) return;\n\t\tfor(i = 0; i < BLACKLIST.length; ++i) if(k == BLACKLIST[i]) return;\n\n\t\tvar m = Props[k];\n\t\tvar t = \"string\";\n\t\tif(typeof m == 'number') { t = \"float\"; m = String(m); }\n\t\telse if(m === true || m === false) { t = \"boolean\"; m = m ? \"1\" : \"0\"; }\n\t\telse m = String(m);\n\t\to.push(writextag(escapexmltag(k), m, {\"dt:dt\":t}));\n\t});\n\tif(Custprops) keys(Custprops).forEach(function(k) {\n\t\t/*:: if(!Custprops) return; */\n\t\tif(!Object.prototype.hasOwnProperty.call(Custprops, k)) return;\n\t\tif(Props && Object.prototype.hasOwnProperty.call(Props, k)) return;\n\t\tvar m = Custprops[k];\n\t\tvar t = \"string\";\n\t\tif(typeof m == 'number') { t = \"float\"; m = String(m); }\n\t\telse if(m === true || m === false) { t = \"boolean\"; m = m ? \"1\" : \"0\"; }\n\t\telse if(m instanceof Date) { t = \"dateTime.tz\"; m = m.toISOString(); }\n\t\telse m = String(m);\n\t\to.push(writextag(escapexmltag(k), m, {\"dt:dt\":t}));\n\t});\n\treturn '<' + T + ' xmlns=\"' + XLMLNS.o + '\">' + o.join(\"\") + '</' + T + '>';\n}\n/* [MS-DTYP] 2.3.3 FILETIME */\n/* [MS-OLEDS] 2.1.3 FILETIME (Packet Version) */\n/* [MS-OLEPS] 2.8 FILETIME (Packet Version) */\nfunction parse_FILETIME(blob) {\n\tvar dwLowDateTime = blob.read_shift(4), dwHighDateTime = blob.read_shift(4);\n\treturn new Date(((dwHighDateTime/1e7*Math.pow(2,32) + dwLowDateTime/1e7) - 11644473600)*1000).toISOString().replace(/\\.000/,\"\");\n}\nfunction write_FILETIME(time/*:string|Date*/) {\n\tvar date = (typeof time == \"string\") ? new Date(Date.parse(time)) : time;\n\tvar t = date.getTime() / 1000 + 11644473600;\n\tvar l = t % Math.pow(2,32), h = (t - l) / Math.pow(2,32);\n\tl *= 1e7; h *= 1e7;\n\tvar w = (l / Math.pow(2,32)) | 0;\n\tif(w > 0) { l = l % Math.pow(2,32); h += w; }\n\tvar o = new_buf(8); o.write_shift(4, l); o.write_shift(4, h); return o;\n}\n\n/* [MS-OSHARED] 2.3.3.1.4 Lpstr */\nfunction parse_lpstr(blob, type, pad/*:?number*/) {\n\tvar start = blob.l;\n\tvar str = blob.read_shift(0, 'lpstr-cp');\n\tif(pad) while((blob.l - start) & 3) ++blob.l;\n\treturn str;\n}\n\n/* [MS-OSHARED] 2.3.3.1.6 Lpwstr */\nfunction parse_lpwstr(blob, type, pad) {\n\tvar str = blob.read_shift(0, 'lpwstr');\n\tif(pad) blob.l += (4 - ((str.length+1) & 3)) & 3;\n\treturn str;\n}\n\n\n/* [MS-OSHARED] 2.3.3.1.11 VtString */\n/* [MS-OSHARED] 2.3.3.1.12 VtUnalignedString */\nfunction parse_VtStringBase(blob, stringType, pad) {\n\tif(stringType === 0x1F /*VT_LPWSTR*/) return parse_lpwstr(blob);\n\treturn parse_lpstr(blob, stringType, pad);\n}\n\nfunction parse_VtString(blob, t/*:number*/, pad/*:?boolean*/) { return parse_VtStringBase(blob, t, pad === false ? 0: 4); }\nfunction parse_VtUnalignedString(blob, t/*:number*/) { if(!t) throw new Error(\"VtUnalignedString must have positive length\"); return parse_VtStringBase(blob, t, 0); }\n\n/* [MS-OSHARED] 2.3.3.1.7 VtVecLpwstrValue */\nfunction parse_VtVecLpwstrValue(blob)/*:Array<string>*/ {\n\tvar length = blob.read_shift(4);\n\tvar ret/*:Array<string>*/ = [];\n\tfor(var i = 0; i != length; ++i) {\n\t\tvar start = blob.l;\n\t\tret[i] = blob.read_shift(0, 'lpwstr').replace(chr0,'');\n\t\tif((blob.l - start) & 0x02) blob.l += 2;\n\t}\n\treturn ret;\n}\n\n/* [MS-OSHARED] 2.3.3.1.9 VtVecUnalignedLpstrValue */\nfunction parse_VtVecUnalignedLpstrValue(blob)/*:Array<string>*/ {\n\tvar length = blob.read_shift(4);\n\tvar ret/*:Array<string>*/ = [];\n\tfor(var i = 0; i != length; ++i) ret[i] = blob.read_shift(0, 'lpstr-cp').replace(chr0,'');\n\treturn ret;\n}\n\n\n/* [MS-OSHARED] 2.3.3.1.13 VtHeadingPair */\nfunction parse_VtHeadingPair(blob) {\n\tvar start = blob.l;\n\tvar headingString = parse_TypedPropertyValue(blob, VT_USTR);\n\tif(blob[blob.l] == 0x00 && blob[blob.l+1] == 0x00 && ((blob.l - start) & 0x02)) blob.l += 2;\n\tvar headerParts = parse_TypedPropertyValue(blob, VT_I4);\n\treturn [headingString, headerParts];\n}\n\n/* [MS-OSHARED] 2.3.3.1.14 VtVecHeadingPairValue */\nfunction parse_VtVecHeadingPairValue(blob) {\n\tvar cElements = blob.read_shift(4);\n\tvar out = [];\n\tfor(var i = 0; i < cElements / 2; ++i) out.push(parse_VtHeadingPair(blob));\n\treturn out;\n}\n\n/* [MS-OLEPS] 2.18.1 Dictionary (uses 2.17, 2.16) */\nfunction parse_dictionary(blob,CodePage) {\n\tvar cnt = blob.read_shift(4);\n\tvar dict/*:{[number]:string}*/ = ({}/*:any*/);\n\tfor(var j = 0; j != cnt; ++j) {\n\t\tvar pid = blob.read_shift(4);\n\t\tvar len = blob.read_shift(4);\n\t\tdict[pid] = blob.read_shift(len, (CodePage === 0x4B0 ?'utf16le':'utf8')).replace(chr0,'').replace(chr1,'!');\n\t\tif(CodePage === 0x4B0 && (len % 2)) blob.l += 2;\n\t}\n\tif(blob.l & 3) blob.l = (blob.l>>2+1)<<2;\n\treturn dict;\n}\n\n/* [MS-OLEPS] 2.9 BLOB */\nfunction parse_BLOB(blob) {\n\tvar size = blob.read_shift(4);\n\tvar bytes = blob.slice(blob.l,blob.l+size);\n\tblob.l += size;\n\tif((size & 3) > 0) blob.l += (4 - (size & 3)) & 3;\n\treturn bytes;\n}\n\n/* [MS-OLEPS] 2.11 ClipboardData */\nfunction parse_ClipboardData(blob) {\n\t// TODO\n\tvar o = {};\n\to.Size = blob.read_shift(4);\n\t//o.Format = blob.read_shift(4);\n\tblob.l += o.Size + 3 - (o.Size - 1) % 4;\n\treturn o;\n}\n\n/* [MS-OLEPS] 2.15 TypedPropertyValue */\nfunction parse_TypedPropertyValue(blob, type/*:number*/, _opts)/*:any*/ {\n\tvar t = blob.read_shift(2), ret, opts = _opts||{};\n\tblob.l += 2;\n\tif(type !== VT_VARIANT)\n\tif(t !== type && VT_CUSTOM.indexOf(type)===-1 && !((type & 0xFFFE) == 0x101E && (t & 0xFFFE) == 0x101E)) throw new Error('Expected type ' + type + ' saw ' + t);\n\tswitch(type === VT_VARIANT ? t : type) {\n\t\tcase 0x02 /*VT_I2*/: ret = blob.read_shift(2, 'i'); if(!opts.raw) blob.l += 2; return ret;\n\t\tcase 0x03 /*VT_I4*/: ret = blob.read_shift(4, 'i'); return ret;\n\t\tcase 0x0B /*VT_BOOL*/: return blob.read_shift(4) !== 0x0;\n\t\tcase 0x13 /*VT_UI4*/: ret = blob.read_shift(4); return ret;\n\t\tcase 0x1E /*VT_LPSTR*/: return parse_lpstr(blob, t, 4).replace(chr0,'');\n\t\tcase 0x1F /*VT_LPWSTR*/: return parse_lpwstr(blob);\n\t\tcase 0x40 /*VT_FILETIME*/: return parse_FILETIME(blob);\n\t\tcase 0x41 /*VT_BLOB*/: return parse_BLOB(blob);\n\t\tcase 0x47 /*VT_CF*/: return parse_ClipboardData(blob);\n\t\tcase 0x50 /*VT_STRING*/: return parse_VtString(blob, t, !opts.raw).replace(chr0,'');\n\t\tcase 0x51 /*VT_USTR*/: return parse_VtUnalignedString(blob, t/*, 4*/).replace(chr0,'');\n\t\tcase 0x100C /*VT_VECTOR|VT_VARIANT*/: return parse_VtVecHeadingPairValue(blob);\n\t\tcase 0x101E /*VT_VECTOR|VT_LPSTR*/:\n\t\tcase 0x101F /*VT_VECTOR|VT_LPWSTR*/:\n\t\t\treturn t == 0x101F ? parse_VtVecLpwstrValue(blob) : parse_VtVecUnalignedLpstrValue(blob);\n\t\tdefault: throw new Error(\"TypedPropertyValue unrecognized type \" + type + \" \" + t);\n\t}\n}\nfunction write_TypedPropertyValue(type/*:number*/, value) {\n\tvar o = new_buf(4), p = new_buf(4);\n\to.write_shift(4, type == 0x50 ? 0x1F : type);\n\tswitch(type) {\n\t\tcase 0x03 /*VT_I4*/: p.write_shift(-4, value); break;\n\t\tcase 0x05 /*VT_I4*/: p = new_buf(8); p.write_shift(8, value, 'f'); break;\n\t\tcase 0x0B /*VT_BOOL*/: p.write_shift(4, value ? 0x01 : 0x00); break;\n\t\tcase 0x40 /*VT_FILETIME*/: /*:: if(typeof value !== \"string\" && !(value instanceof Date)) throw \"unreachable\"; */ p = write_FILETIME(value); break;\n\t\tcase 0x1F /*VT_LPWSTR*/:\n\t\tcase 0x50 /*VT_STRING*/:\n\t\t\t/*:: if(typeof value !== \"string\") throw \"unreachable\"; */\n\t\t\tp = new_buf(4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));\n\t\t\tp.write_shift(4, value.length + 1);\n\t\t\tp.write_shift(0, value, \"dbcs\");\n\t\t\twhile(p.l != p.length) p.write_shift(1, 0);\n\t\t\tbreak;\n\t\tdefault: throw new Error(\"TypedPropertyValue unrecognized type \" + type + \" \" + value);\n\t}\n\treturn bconcat([o, p]);\n}\n\n/* [MS-OLEPS] 2.20 PropertySet */\nfunction parse_PropertySet(blob, PIDSI) {\n\tvar start_addr = blob.l;\n\tvar size = blob.read_shift(4);\n\tvar NumProps = blob.read_shift(4);\n\tvar Props = [], i = 0;\n\tvar CodePage = 0;\n\tvar Dictionary = -1, DictObj/*:{[number]:string}*/ = ({}/*:any*/);\n\tfor(i = 0; i != NumProps; ++i) {\n\t\tvar PropID = blob.read_shift(4);\n\t\tvar Offset = blob.read_shift(4);\n\t\tProps[i] = [PropID, Offset + start_addr];\n\t}\n\tProps.sort(function(x,y) { return x[1] - y[1]; });\n\tvar PropH = {};\n\tfor(i = 0; i != NumProps; ++i) {\n\t\tif(blob.l !== Props[i][1]) {\n\t\t\tvar fail = true;\n\t\t\tif(i>0 && PIDSI) switch(PIDSI[Props[i-1][0]].t) {\n\t\t\t\tcase 0x02 /*VT_I2*/: if(blob.l+2 === Props[i][1]) { blob.l+=2; fail = false; } break;\n\t\t\t\tcase 0x50 /*VT_STRING*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break;\n\t\t\t\tcase 0x100C /*VT_VECTOR|VT_VARIANT*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break;\n\t\t\t}\n\t\t\tif((!PIDSI||i==0) && blob.l <= Props[i][1]) { fail=false; blob.l = Props[i][1]; }\n\t\t\tif(fail) throw new Error(\"Read Error: Expected address \" + Props[i][1] + ' at ' + blob.l + ' :' + i);\n\t\t}\n\t\tif(PIDSI) {\n\t\t\tif(Props[i][0] == 0 && Props.length > i+1 && Props[i][1] == Props[i+1][1]) continue; // R9\n\t\t\tvar piddsi = PIDSI[Props[i][0]];\n\t\t\tPropH[piddsi.n] = parse_TypedPropertyValue(blob, piddsi.t, {raw:true});\n\t\t\tif(piddsi.p === 'version') PropH[piddsi.n] = String(PropH[piddsi.n] >> 16) + \".\" + (\"0000\" + String(PropH[piddsi.n] & 0xFFFF)).slice(-4);\n\t\t\tif(piddsi.n == \"CodePage\") switch(PropH[piddsi.n]) {\n\t\t\t\tcase 0: PropH[piddsi.n] = 1252;\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 874:\n\t\t\t\tcase 932:\n\t\t\t\tcase 936:\n\t\t\t\tcase 949:\n\t\t\t\tcase 950:\n\t\t\t\tcase 1250:\n\t\t\t\tcase 1251:\n\t\t\t\tcase 1253:\n\t\t\t\tcase 1254:\n\t\t\t\tcase 1255:\n\t\t\t\tcase 1256:\n\t\t\t\tcase 1257:\n\t\t\t\tcase 1258:\n\t\t\t\tcase 10000:\n\t\t\t\tcase 1200:\n\t\t\t\tcase 1201:\n\t\t\t\tcase 1252:\n\t\t\t\tcase 65000: case -536:\n\t\t\t\tcase 65001: case -535:\n\t\t\t\t\tset_cp(CodePage = (PropH[piddsi.n]>>>0) & 0xFFFF); break;\n\t\t\t\tdefault: throw new Error(\"Unsupported CodePage: \" + PropH[piddsi.n]);\n\t\t\t}\n\t\t} else {\n\t\t\tif(Props[i][0] === 0x1) {\n\t\t\t\tCodePage = PropH.CodePage = (parse_TypedPropertyValue(blob, VT_I2)/*:number*/);\n\t\t\t\tset_cp(CodePage);\n\t\t\t\tif(Dictionary !== -1) {\n\t\t\t\t\tvar oldpos = blob.l;\n\t\t\t\t\tblob.l = Props[Dictionary][1];\n\t\t\t\t\tDictObj = parse_dictionary(blob,CodePage);\n\t\t\t\t\tblob.l = oldpos;\n\t\t\t\t}\n\t\t\t} else if(Props[i][0] === 0) {\n\t\t\t\tif(CodePage === 0) { Dictionary = i; blob.l = Props[i+1][1]; continue; }\n\t\t\t\tDictObj = parse_dictionary(blob,CodePage);\n\t\t\t} else {\n\t\t\t\tvar name = DictObj[Props[i][0]];\n\t\t\t\tvar val;\n\t\t\t\t/* [MS-OSHARED] 2.3.3.2.3.1.2 + PROPVARIANT */\n\t\t\t\tswitch(blob[blob.l]) {\n\t\t\t\t\tcase 0x41 /*VT_BLOB*/: blob.l += 4; val = parse_BLOB(blob); break;\n\t\t\t\t\tcase 0x1E /*VT_LPSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]).replace(/(^|[^\\u0000])\\u0000+$/,\"$1\"); break;\n\t\t\t\t\tcase 0x1F /*VT_LPWSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]).replace(/(^|[^\\u0000])\\u0000+$/,\"$1\"); break;\n\t\t\t\t\tcase 0x03 /*VT_I4*/: blob.l += 4; val = blob.read_shift(4, 'i'); break;\n\t\t\t\t\tcase 0x13 /*VT_UI4*/: blob.l += 4; val = blob.read_shift(4); break;\n\t\t\t\t\tcase 0x05 /*VT_R8*/: blob.l += 4; val = blob.read_shift(8, 'f'); break;\n\t\t\t\t\tcase 0x0B /*VT_BOOL*/: blob.l += 4; val = parsebool(blob, 4); break;\n\t\t\t\t\tcase 0x40 /*VT_FILETIME*/: blob.l += 4; val = parseDate(parse_FILETIME(blob)); break;\n\t\t\t\t\tdefault: throw new Error(\"unparsed value: \" + blob[blob.l]);\n\t\t\t\t}\n\t\t\t\tPropH[name] = val;\n\t\t\t}\n\t\t}\n\t}\n\tblob.l = start_addr + size; /* step ahead to skip padding */\n\treturn PropH;\n}\nvar XLSPSSkip = [ \"CodePage\", \"Thumbnail\", \"_PID_LINKBASE\", \"_PID_HLINKS\", \"SystemIdentifier\", \"FMTID\" ];\nfunction guess_property_type(val/*:any*/)/*:number*/ {\n\tswitch(typeof val) {\n\t\tcase \"boolean\": return 0x0B;\n\t\tcase \"number\": return ((val|0)==val) ? 0x03 : 0x05;\n\t\tcase \"string\": return 0x1F;\n\t\tcase \"object\": if(val instanceof Date) return 0x40; break;\n\t}\n\treturn -1;\n}\nfunction write_PropertySet(entries, RE, PIDSI) {\n\tvar hdr = new_buf(8), piao = [], prop = [];\n\tvar sz = 8, i = 0;\n\n\tvar pr = new_buf(8), pio = new_buf(8);\n\tpr.write_shift(4, 0x0002);\n\tpr.write_shift(4, 0x04B0);\n\tpio.write_shift(4, 0x0001);\n\tprop.push(pr); piao.push(pio);\n\tsz += 8 + pr.length;\n\n\tif(!RE) {\n\t\tpio = new_buf(8);\n\t\tpio.write_shift(4, 0);\n\t\tpiao.unshift(pio);\n\n\t\tvar bufs = [new_buf(4)];\n\t\tbufs[0].write_shift(4, entries.length);\n\t\tfor(i = 0; i < entries.length; ++i) {\n\t\t\tvar value = entries[i][0];\n\t\t\tpr = new_buf(4 + 4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));\n\t\t\tpr.write_shift(4, i+2);\n\t\t\tpr.write_shift(4, value.length + 1);\n\t\t\tpr.write_shift(0, value, \"dbcs\");\n\t\t\twhile(pr.l != pr.length) pr.write_shift(1, 0);\n\t\t\tbufs.push(pr);\n\t\t}\n\t\tpr = bconcat(bufs);\n\t\tprop.unshift(pr);\n\t\tsz += 8 + pr.length;\n\t}\n\n\tfor(i = 0; i < entries.length; ++i) {\n\t\tif(RE && !RE[entries[i][0]]) continue;\n\t\tif(XLSPSSkip.indexOf(entries[i][0]) > -1 || PseudoPropsPairs.indexOf(entries[i][0]) > -1) continue;\n\t\tif(entries[i][1] == null) continue;\n\n\t\tvar val = entries[i][1], idx = 0;\n\t\tif(RE) {\n\t\t\tidx = +RE[entries[i][0]];\n\t\t\tvar pinfo = (PIDSI/*:: || {}*/)[idx]/*:: || {} */;\n\t\t\tif(pinfo.p == \"version\" && typeof val == \"string\") {\n\t\t\t\t/*:: if(typeof val !== \"string\") throw \"unreachable\"; */\n\t\t\t\tvar arr = val.split(\".\");\n\t\t\t\tval = ((+arr[0])<<16) + ((+arr[1])||0);\n\t\t\t}\n\t\t\tpr = write_TypedPropertyValue(pinfo.t, val);\n\t\t} else {\n\t\t\tvar T = guess_property_type(val);\n\t\t\tif(T == -1) { T = 0x1F; val = String(val); }\n\t\t\tpr = write_TypedPropertyValue(T, val);\n\t\t}\n\t\tprop.push(pr);\n\n\t\tpio = new_buf(8);\n\t\tpio.write_shift(4, !RE ? 2+i : idx);\n\t\tpiao.push(pio);\n\n\t\tsz += 8 + pr.length;\n\t}\n\n\tvar w = 8 * (prop.length + 1);\n\tfor(i = 0; i < prop.length; ++i) { piao[i].write_shift(4, w); w += prop[i].length; }\n\thdr.write_shift(4, sz);\n\thdr.write_shift(4, prop.length);\n\treturn bconcat([hdr].concat(piao).concat(prop));\n}\n\n/* [MS-OLEPS] 2.21 PropertySetStream */\nfunction parse_PropertySetStream(file, PIDSI, clsid) {\n\tvar blob = file.content;\n\tif(!blob) return ({}/*:any*/);\n\tprep_blob(blob, 0);\n\n\tvar NumSets, FMTID0, FMTID1, Offset0, Offset1 = 0;\n\tblob.chk('feff', 'Byte Order: ');\n\n\t/*var vers = */blob.read_shift(2); // TODO: check version\n\tvar SystemIdentifier = blob.read_shift(4);\n\tvar CLSID = blob.read_shift(16);\n\tif(CLSID !== CFB.utils.consts.HEADER_CLSID && CLSID !== clsid) throw new Error(\"Bad PropertySet CLSID \" + CLSID);\n\tNumSets = blob.read_shift(4);\n\tif(NumSets !== 1 && NumSets !== 2) throw new Error(\"Unrecognized #Sets: \" + NumSets);\n\tFMTID0 = blob.read_shift(16); Offset0 = blob.read_shift(4);\n\n\tif(NumSets === 1 && Offset0 !== blob.l) throw new Error(\"Length mismatch: \" + Offset0 + \" !== \" + blob.l);\n\telse if(NumSets === 2) { FMTID1 = blob.read_shift(16); Offset1 = blob.read_shift(4); }\n\tvar PSet0 = parse_PropertySet(blob, PIDSI);\n\n\tvar rval = ({ SystemIdentifier: SystemIdentifier }/*:any*/);\n\tfor(var y in PSet0) rval[y] = PSet0[y];\n\t//rval.blob = blob;\n\trval.FMTID = FMTID0;\n\t//rval.PSet0 = PSet0;\n\tif(NumSets === 1) return rval;\n\tif(Offset1 - blob.l == 2) blob.l += 2;\n\tif(blob.l !== Offset1) throw new Error(\"Length mismatch 2: \" + blob.l + \" !== \" + Offset1);\n\tvar PSet1;\n\ttry { PSet1 = parse_PropertySet(blob, null); } catch(e) {/* empty */}\n\tfor(y in PSet1) rval[y] = PSet1[y];\n\trval.FMTID = [FMTID0, FMTID1]; // TODO: verify FMTID0/1\n\treturn rval;\n}\nfunction write_PropertySetStream(entries, clsid, RE, PIDSI/*:{[key:string|number]:any}*/, entries2/*:?any*/, clsid2/*:?any*/) {\n\tvar hdr = new_buf(entries2 ? 68 : 48);\n\tvar bufs = [hdr];\n\thdr.write_shift(2, 0xFFFE);\n\thdr.write_shift(2, 0x0000); /* TODO: type 1 props */\n\thdr.write_shift(4, 0x32363237);\n\thdr.write_shift(16, CFB.utils.consts.HEADER_CLSID, \"hex\");\n\thdr.write_shift(4, (entries2 ? 2 : 1));\n\thdr.write_shift(16, clsid, \"hex\");\n\thdr.write_shift(4, (entries2 ? 68 : 48));\n\tvar ps0 = write_PropertySet(entries, RE, PIDSI);\n\tbufs.push(ps0);\n\n\tif(entries2) {\n\t\tvar ps1 = write_PropertySet(entries2, null, null);\n\t\thdr.write_shift(16, clsid2, \"hex\");\n\t\thdr.write_shift(4, 68 + ps0.length);\n\t\tbufs.push(ps1);\n\t}\n\treturn bconcat(bufs);\n}\n\nfunction parsenoop2(blob, length) { blob.read_shift(length); return null; }\nfunction writezeroes(n, o) { if(!o) o=new_buf(n); for(var j=0; j<n; ++j) o.write_shift(1, 0); return o; }\n\nfunction parslurp(blob, length, cb) {\n\tvar arr = [], target = blob.l + length;\n\twhile(blob.l < target) arr.push(cb(blob, target - blob.l));\n\tif(target !== blob.l) throw new Error(\"Slurp error\");\n\treturn arr;\n}\n\nfunction parsebool(blob, length/*:number*/) { return blob.read_shift(length) === 0x1; }\nfunction writebool(v/*:any*/, o) { if(!o) o=new_buf(2); o.write_shift(2, +!!v); return o; }\n\nfunction parseuint16(blob/*::, length:?number, opts:?any*/) { return blob.read_shift(2, 'u'); }\nfunction writeuint16(v/*:number*/, o) { if(!o) o=new_buf(2); o.write_shift(2, v); return o; }\nfunction parseuint16a(blob, length/*:: :?number, opts:?any*/) { return parslurp(blob,length,parseuint16);}\n\n/* --- 2.5 Structures --- */\n\n/* [MS-XLS] 2.5.10 Bes (boolean or error) */\nfunction parse_Bes(blob/*::, length*/) {\n\tvar v = blob.read_shift(1), t = blob.read_shift(1);\n\treturn t === 0x01 ? v : v === 0x01;\n}\nfunction write_Bes(v, t/*:string*/, o) {\n\tif(!o) o = new_buf(2);\n\to.write_shift(1, ((t == 'e') ? +v : +!!v));\n\to.write_shift(1, ((t == 'e') ? 1 : 0));\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.240 ShortXLUnicodeString */\nfunction parse_ShortXLUnicodeString(blob, length, opts) {\n\tvar cch = blob.read_shift(opts && opts.biff >= 12 ? 2 : 1);\n\tvar encoding = 'sbcs-cont';\n\tvar cp = current_codepage;\n\tif(opts && opts.biff >= 8) current_codepage = 1200;\n\tif(!opts || opts.biff == 8 ) {\n\t\tvar fHighByte = blob.read_shift(1);\n\t\tif(fHighByte) { encoding = 'dbcs-cont'; }\n\t} else if(opts.biff == 12) {\n\t\tencoding = 'wstr';\n\t}\n\tif(opts.biff >= 2 && opts.biff <= 5) encoding = 'cpstr';\n\tvar o = cch ? blob.read_shift(cch, encoding) : \"\";\n\tcurrent_codepage = cp;\n\treturn o;\n}\n\n/* 2.5.293 XLUnicodeRichExtendedString */\nfunction parse_XLUnicodeRichExtendedString(blob) {\n\tvar cp = current_codepage;\n\tcurrent_codepage = 1200;\n\tvar cch = blob.read_shift(2), flags = blob.read_shift(1);\n\tvar /*fHighByte = flags & 0x1,*/ fExtSt = flags & 0x4, fRichSt = flags & 0x8;\n\tvar width = 1 + (flags & 0x1); // 0x0 -> utf8, 0x1 -> dbcs\n\tvar cRun = 0, cbExtRst;\n\tvar z = {};\n\tif(fRichSt) cRun = blob.read_shift(2);\n\tif(fExtSt) cbExtRst = blob.read_shift(4);\n\tvar encoding = width == 2 ? 'dbcs-cont' : 'sbcs-cont';\n\tvar msg = cch === 0 ? \"\" : blob.read_shift(cch, encoding);\n\tif(fRichSt) blob.l += 4 * cRun; //TODO: parse this\n\tif(fExtSt) blob.l += cbExtRst; //TODO: parse this\n\tz.t = msg;\n\tif(!fRichSt) { z.raw = \"<t>\" + z.t + \"</t>\"; z.r = z.t; }\n\tcurrent_codepage = cp;\n\treturn z;\n}\nfunction write_XLUnicodeRichExtendedString(xlstr/*:: :XLString, opts*/) {\n\tvar str = (xlstr.t||\"\"), nfmts = 1;\n\n\tvar hdr = new_buf(3 + (nfmts > 1 ? 2 : 0));\n\thdr.write_shift(2, str.length);\n\thdr.write_shift(1, (nfmts > 1 ? 0x08 : 0x00) | 0x01);\n\tif(nfmts > 1) hdr.write_shift(2, nfmts);\n\n\tvar otext = new_buf(2 * str.length);\n\totext.write_shift(2 * str.length, str, 'utf16le');\n\n\tvar out = [hdr, otext];\n\n\treturn bconcat(out);\n}\n\n/* 2.5.296 XLUnicodeStringNoCch */\nfunction parse_XLUnicodeStringNoCch(blob, cch, opts) {\n\tvar retval;\n\tif(opts) {\n\t\tif(opts.biff >= 2 && opts.biff <= 5) return blob.read_shift(cch, 'cpstr');\n\t\tif(opts.biff >= 12) return blob.read_shift(cch, 'dbcs-cont');\n\t}\n\tvar fHighByte = blob.read_shift(1);\n\tif(fHighByte===0) { retval = blob.read_shift(cch, 'sbcs-cont'); }\n\telse { retval = blob.read_shift(cch, 'dbcs-cont'); }\n\treturn retval;\n}\n\n/* 2.5.294 XLUnicodeString */\nfunction parse_XLUnicodeString(blob, length, opts) {\n\tvar cch = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\tif(cch === 0) { blob.l++; return \"\"; }\n\treturn parse_XLUnicodeStringNoCch(blob, cch, opts);\n}\n/* BIFF5 override */\nfunction parse_XLUnicodeString2(blob, length, opts) {\n\tif(opts.biff > 5) return parse_XLUnicodeString(blob, length, opts);\n\tvar cch = blob.read_shift(1);\n\tif(cch === 0) { blob.l++; return \"\"; }\n\treturn blob.read_shift(cch, (opts.biff <= 4 || !blob.lens ) ? 'cpstr' : 'sbcs-cont');\n}\n/* TODO: BIFF5 and lower, codepage awareness */\nfunction write_XLUnicodeString(str, opts, o) {\n\tif(!o) o = new_buf(3 + 2 * str.length);\n\to.write_shift(2, str.length);\n\to.write_shift(1, 1);\n\to.write_shift(31, str, 'utf16le');\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.61 ControlInfo */\nfunction parse_ControlInfo(blob/*::, length, opts*/) {\n\tvar flags = blob.read_shift(1);\n\tblob.l++;\n\tvar accel = blob.read_shift(2);\n\tblob.l += 2;\n\treturn [flags, accel];\n}\n\n/* [MS-OSHARED] 2.3.7.6 URLMoniker TODO: flags */\nfunction parse_URLMoniker(blob/*::, length, opts*/) {\n\tvar len = blob.read_shift(4), start = blob.l;\n\tvar extra = false;\n\tif(len > 24) {\n\t\t/* look ahead */\n\t\tblob.l += len - 24;\n\t\tif(blob.read_shift(16) === \"795881f43b1d7f48af2c825dc4852763\") extra = true;\n\t\tblob.l = start;\n\t}\n\tvar url = blob.read_shift((extra?len-24:len)>>1, 'utf16le').replace(chr0,\"\");\n\tif(extra) blob.l += 24;\n\treturn url;\n}\n\n/* [MS-OSHARED] 2.3.7.8 FileMoniker TODO: all fields */\nfunction parse_FileMoniker(blob/*::, length*/) {\n\tvar cAnti = blob.read_shift(2);\n\tvar preamble = \"\"; while(cAnti-- > 0) preamble += \"../\";\n\tvar ansiPath = blob.read_shift(0, 'lpstr-ansi');\n\tblob.l += 2; //var endServer = blob.read_shift(2);\n\tif(blob.read_shift(2) != 0xDEAD) throw new Error(\"Bad FileMoniker\");\n\tvar sz = blob.read_shift(4);\n\tif(sz === 0) return preamble + ansiPath.replace(/\\\\/g,\"/\");\n\tvar bytes = blob.read_shift(4);\n\tif(blob.read_shift(2) != 3) throw new Error(\"Bad FileMoniker\");\n\tvar unicodePath = blob.read_shift(bytes>>1, 'utf16le').replace(chr0,\"\");\n\treturn preamble + unicodePath;\n}\n\n/* [MS-OSHARED] 2.3.7.2 HyperlinkMoniker TODO: all the monikers */\nfunction parse_HyperlinkMoniker(blob, length) {\n\tvar clsid = blob.read_shift(16); length -= 16;\n\tswitch(clsid) {\n\t\tcase \"e0c9ea79f9bace118c8200aa004ba90b\": return parse_URLMoniker(blob, length);\n\t\tcase \"0303000000000000c000000000000046\": return parse_FileMoniker(blob, length);\n\t\tdefault: throw new Error(\"Unsupported Moniker \" + clsid);\n\t}\n}\n\n/* [MS-OSHARED] 2.3.7.9 HyperlinkString */\nfunction parse_HyperlinkString(blob/*::, length*/) {\n\tvar len = blob.read_shift(4);\n\tvar o = len > 0 ? blob.read_shift(len, 'utf16le').replace(chr0, \"\") : \"\";\n\treturn o;\n}\nfunction write_HyperlinkString(str/*:string*/, o) {\n\tif(!o) o = new_buf(6 + str.length * 2);\n\to.write_shift(4, 1 + str.length);\n\tfor(var i = 0; i < str.length; ++i) o.write_shift(2, str.charCodeAt(i));\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-OSHARED] 2.3.7.1 Hyperlink Object */\nfunction parse_Hyperlink(blob, length)/*:Hyperlink*/ {\n\tvar end = blob.l + length;\n\tvar sVer = blob.read_shift(4);\n\tif(sVer !== 2) throw new Error(\"Unrecognized streamVersion: \" + sVer);\n\tvar flags = blob.read_shift(2);\n\tblob.l += 2;\n\tvar displayName, targetFrameName, moniker, oleMoniker, Loc=\"\", guid, fileTime;\n\tif(flags & 0x0010) displayName = parse_HyperlinkString(blob, end - blob.l);\n\tif(flags & 0x0080) targetFrameName = parse_HyperlinkString(blob, end - blob.l);\n\tif((flags & 0x0101) === 0x0101) moniker = parse_HyperlinkString(blob, end - blob.l);\n\tif((flags & 0x0101) === 0x0001) oleMoniker = parse_HyperlinkMoniker(blob, end - blob.l);\n\tif(flags & 0x0008) Loc = parse_HyperlinkString(blob, end - blob.l);\n\tif(flags & 0x0020) guid = blob.read_shift(16);\n\tif(flags & 0x0040) fileTime = parse_FILETIME(blob/*, 8*/);\n\tblob.l = end;\n\tvar target = targetFrameName||moniker||oleMoniker||\"\";\n\tif(target && Loc) target+=\"#\"+Loc;\n\tif(!target) target = \"#\" + Loc;\n\tif((flags & 0x0002) && target.charAt(0) == \"/\" && target.charAt(1) != \"/\") target = \"file://\" + target;\n\tvar out = ({Target:target}/*:any*/);\n\tif(guid) out.guid = guid;\n\tif(fileTime) out.time = fileTime;\n\tif(displayName) out.Tooltip = displayName;\n\treturn out;\n}\nfunction write_Hyperlink(hl) {\n\tvar out = new_buf(512), i = 0;\n\tvar Target = hl.Target;\n\tif(Target.slice(0,7) == \"file://\") Target = Target.slice(7);\n\tvar hashidx = Target.indexOf(\"#\");\n\tvar F = hashidx > -1 ? 0x1f : 0x17;\n\tswitch(Target.charAt(0)) { case \"#\": F=0x1c; break; case \".\": F&=~2; break; }\n\tout.write_shift(4,2); out.write_shift(4, F);\n\tvar data = [8,6815827,6619237,4849780,83]; for(i = 0; i < data.length; ++i) out.write_shift(4, data[i]);\n\tif(F == 0x1C) {\n\t\tTarget = Target.slice(1);\n\t\twrite_HyperlinkString(Target, out);\n\t} else if(F & 0x02) {\n\t\tdata = \"e0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b\".split(\" \");\n\t\tfor(i = 0; i < data.length; ++i) out.write_shift(1, parseInt(data[i], 16));\n\t\tvar Pretarget = hashidx > -1 ? Target.slice(0, hashidx) : Target;\n\t\tout.write_shift(4, 2*(Pretarget.length + 1));\n\t\tfor(i = 0; i < Pretarget.length; ++i) out.write_shift(2, Pretarget.charCodeAt(i));\n\t\tout.write_shift(2, 0);\n\t\tif(F & 0x08) write_HyperlinkString(hashidx > -1 ? Target.slice(hashidx+1): \"\", out);\n\t} else {\n\t\tdata = \"03 03 00 00 00 00 00 00 c0 00 00 00 00 00 00 46\".split(\" \");\n\t\tfor(i = 0; i < data.length; ++i) out.write_shift(1, parseInt(data[i], 16));\n\t\tvar P = 0;\n\t\twhile(Target.slice(P*3,P*3+3)==\"../\"||Target.slice(P*3,P*3+3)==\"..\\\\\") ++P;\n\t\tout.write_shift(2, P);\n\t\tout.write_shift(4, Target.length - 3 * P + 1);\n\t\tfor(i = 0; i < Target.length - 3 * P; ++i) out.write_shift(1, Target.charCodeAt(i + 3 * P) & 0xFF);\n\t\tout.write_shift(1, 0);\n\t\tout.write_shift(2, 0xFFFF);\n\t\tout.write_shift(2, 0xDEAD);\n\t\tfor(i = 0; i < 6; ++i) out.write_shift(4, 0);\n\t}\n\treturn out.slice(0, out.l);\n}\n\n/* 2.5.178 LongRGBA */\nfunction parse_LongRGBA(blob/*::, length*/) { var r = blob.read_shift(1), g = blob.read_shift(1), b = blob.read_shift(1), a = blob.read_shift(1); return [r,g,b,a]; }\n\n/* 2.5.177 LongRGB */\nfunction parse_LongRGB(blob, length) { var x = parse_LongRGBA(blob, length); x[3] = 0; return x; }\n\n\n/* [MS-XLS] 2.5.19 */\nfunction parse_XLSCell(blob, length, opts)/*:Cell*/ {\n\tvar rw = blob.read_shift(2); // 0-indexed\n\tvar col = blob.read_shift(2);\n\tvar ret = ({r:rw, c:col, ixfe:0}/*:any*/);\n\tif(opts && opts.biff == 2 || length == 7) {\n\t\t/* TODO: pass back flags */\n\t\tvar flags = blob.read_shift(1);\n\t\tret.ixfe = flags & 0x3F;\n\t\tblob.l += 2;\n\t\t/*\n\t\tvar ifntifmt = blob.read_shift(1);\n\t\tvar ifmt = ifntifmt & 0x3f, ifnt = ifntifmt >> 6;\n\t\tvar flags3 = blob.read_shift(1);\n\t\t*/\n\t} else ret.ixfe = blob.read_shift(2);\n\treturn ret;\n}\nfunction write_XLSCell(R/*:number*/, C/*:number*/, ixfe/*:?number*/, o) {\n\tif(!o) o = new_buf(6);\n\to.write_shift(2, R);\n\to.write_shift(2, C);\n\to.write_shift(2, ixfe||0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.134 */\nfunction parse_frtHeader(blob) {\n\tvar rt = blob.read_shift(2);\n\tvar flags = blob.read_shift(2); // TODO: parse these flags\n\tblob.l += 8;\n\treturn {type: rt, flags: flags};\n}\n\n\n\nfunction parse_OptXLUnicodeString(blob, length, opts) { return length === 0 ? \"\" : parse_XLUnicodeString2(blob, length, opts); }\n\n/* [MS-XLS] 2.5.344 */\nfunction parse_XTI(blob, length, opts) {\n\tvar w = opts.biff > 8 ? 4 : 2;\n\tvar iSupBook = blob.read_shift(w), itabFirst = blob.read_shift(w,'i'), itabLast = blob.read_shift(w,'i');\n\treturn [iSupBook, itabFirst, itabLast];\n}\n\n/* [MS-XLS] 2.5.218 */\nfunction parse_RkRec(blob) {\n\tvar ixfe = blob.read_shift(2);\n\tvar RK = parse_RkNumber(blob);\n\treturn [ixfe, RK];\n}\n\n/* [MS-XLS] 2.5.1 */\nfunction parse_AddinUdf(blob, length, opts) {\n\tblob.l += 4; length -= 4;\n\tvar l = blob.l + length;\n\tvar udfName = parse_ShortXLUnicodeString(blob, length, opts);\n\tvar cb = blob.read_shift(2);\n\tl -= blob.l;\n\tif(cb !== l) throw new Error(\"Malformed AddinUdf: padding = \" + l + \" != \" + cb);\n\tblob.l += cb;\n\treturn udfName;\n}\n\n/* [MS-XLS] 2.5.209 TODO: Check sizes */\nfunction parse_Ref8U(blob/*::, length*/) {\n\tvar rwFirst = blob.read_shift(2);\n\tvar rwLast = blob.read_shift(2);\n\tvar colFirst = blob.read_shift(2);\n\tvar colLast = blob.read_shift(2);\n\treturn {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}};\n}\nfunction write_Ref8U(r/*:Range*/, o) {\n\tif(!o) o = new_buf(8);\n\to.write_shift(2, r.s.r);\n\to.write_shift(2, r.e.r);\n\to.write_shift(2, r.s.c);\n\to.write_shift(2, r.e.c);\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.211 */\nfunction parse_RefU(blob/*::, length*/) {\n\tvar rwFirst = blob.read_shift(2);\n\tvar rwLast = blob.read_shift(2);\n\tvar colFirst = blob.read_shift(1);\n\tvar colLast = blob.read_shift(1);\n\treturn {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}};\n}\n\n/* [MS-XLS] 2.5.207 */\nvar parse_Ref = parse_RefU;\n\n/* [MS-XLS] 2.5.143 */\nfunction parse_FtCmo(blob/*::, length*/) {\n\tblob.l += 4;\n\tvar ot = blob.read_shift(2);\n\tvar id = blob.read_shift(2);\n\tvar flags = blob.read_shift(2);\n\tblob.l+=12;\n\treturn [id, ot, flags];\n}\n\n/* [MS-XLS] 2.5.149 */\nfunction parse_FtNts(blob) {\n\tvar out = {};\n\tblob.l += 4;\n\tblob.l += 16; // GUID TODO\n\tout.fSharedNote = blob.read_shift(2);\n\tblob.l += 4;\n\treturn out;\n}\n\n/* [MS-XLS] 2.5.142 */\nfunction parse_FtCf(blob) {\n\tvar out = {};\n\tblob.l += 4;\n\tblob.cf = blob.read_shift(2);\n\treturn out;\n}\n\n/* [MS-XLS] 2.5.140 - 2.5.154 and friends */\nfunction parse_FtSkip(blob) { blob.l += 2; blob.l += blob.read_shift(2); }\nvar FtTab = {\n\t0x00: parse_FtSkip,      /* FtEnd */\n\t0x04: parse_FtSkip,      /* FtMacro */\n\t0x05: parse_FtSkip,      /* FtButton */\n\t0x06: parse_FtSkip,      /* FtGmo */\n\t0x07: parse_FtCf,        /* FtCf */\n\t0x08: parse_FtSkip,      /* FtPioGrbit */\n\t0x09: parse_FtSkip,      /* FtPictFmla */\n\t0x0A: parse_FtSkip,      /* FtCbls */\n\t0x0B: parse_FtSkip,      /* FtRbo */\n\t0x0C: parse_FtSkip,      /* FtSbs */\n\t0x0D: parse_FtNts,       /* FtNts */\n\t0x0E: parse_FtSkip,      /* FtSbsFmla */\n\t0x0F: parse_FtSkip,      /* FtGboData */\n\t0x10: parse_FtSkip,      /* FtEdoData */\n\t0x11: parse_FtSkip,      /* FtRboData */\n\t0x12: parse_FtSkip,      /* FtCblsData */\n\t0x13: parse_FtSkip,      /* FtLbsData */\n\t0x14: parse_FtSkip,      /* FtCblsFmla */\n\t0x15: parse_FtCmo\n};\nfunction parse_FtArray(blob, length/*::, ot*/) {\n\tvar tgt = blob.l + length;\n\tvar fts = [];\n\twhile(blob.l < tgt) {\n\t\tvar ft = blob.read_shift(2);\n\t\tblob.l-=2;\n\t\ttry {\n\t\t\tfts[ft] = FtTab[ft](blob, tgt - blob.l);\n\t\t} catch(e) { blob.l = tgt; return fts; }\n\t}\n\tif(blob.l != tgt) blob.l = tgt; //throw new Error(\"bad Object Ft-sequence\");\n\treturn fts;\n}\n\n/* --- 2.4 Records --- */\n\n/* [MS-XLS] 2.4.21 */\nfunction parse_BOF(blob, length) {\n\tvar o = {BIFFVer:0, dt:0};\n\to.BIFFVer = blob.read_shift(2); length -= 2;\n\tif(length >= 2) { o.dt = blob.read_shift(2); blob.l -= 2; }\n\tswitch(o.BIFFVer) {\n\t\tcase 0x0600: /* BIFF8 */\n\t\tcase 0x0500: /* BIFF5 */\n\t\tcase 0x0400: /* BIFF4 */\n\t\tcase 0x0300: /* BIFF3 */\n\t\tcase 0x0200: /* BIFF2 */\n\t\tcase 0x0002: case 0x0007: /* BIFF2 */\n\t\t\tbreak;\n\t\tdefault: if(length > 6) throw new Error(\"Unexpected BIFF Ver \" + o.BIFFVer);\n\t}\n\n\tblob.read_shift(length);\n\treturn o;\n}\nfunction write_BOF(wb/*:Workbook*/, t/*:number*/, o) {\n\tvar h = 0x0600, w = 16;\n\tswitch(o.bookType) {\n\t\tcase 'biff8': break;\n\t\tcase 'biff5': h = 0x0500; w = 8; break;\n\t\tcase 'biff4': h = 0x0004; w = 6; break;\n\t\tcase 'biff3': h = 0x0003; w = 6; break;\n\t\tcase 'biff2': h = 0x0002; w = 4; break;\n\t\tcase 'xla': break;\n\t\tdefault: throw new Error(\"unsupported BIFF version\");\n\t}\n\tvar out = new_buf(w);\n\tout.write_shift(2, h);\n\tout.write_shift(2, t);\n\tif(w > 4) out.write_shift(2, 0x7262);\n\tif(w > 6) out.write_shift(2, 0x07CD);\n\tif(w > 8) {\n\t\tout.write_shift(2, 0xC009);\n\t\tout.write_shift(2, 0x0001);\n\t\tout.write_shift(2, 0x0706);\n\t\tout.write_shift(2, 0x0000);\n\t}\n\treturn out;\n}\n\n\n/* [MS-XLS] 2.4.146 */\nfunction parse_InterfaceHdr(blob, length) {\n\tif(length === 0) return 0x04b0;\n\tif((blob.read_shift(2))!==0x04b0){/* empty */}\n\treturn 0x04b0;\n}\n\n\n/* [MS-XLS] 2.4.349 */\nfunction parse_WriteAccess(blob, length, opts) {\n\tif(opts.enc) { blob.l += length; return \"\"; }\n\tvar l = blob.l;\n\t// TODO: make sure XLUnicodeString doesnt overrun\n\tvar UserName = parse_XLUnicodeString2(blob, 0, opts);\n\tblob.read_shift(length + l - blob.l);\n\treturn UserName;\n}\nfunction write_WriteAccess(s/*:string*/, opts) {\n\tvar b8 = !opts || opts.biff == 8;\n\tvar o = new_buf(b8 ? 112 : 54);\n\to.write_shift(opts.biff == 8 ? 2 : 1, 7);\n\tif(b8) o.write_shift(1, 0);\n\to.write_shift(4, 0x33336853);\n\to.write_shift(4, (0x00534A74 | (b8 ? 0 : 0x20000000)));\n\twhile(o.l < o.length) o.write_shift(1, (b8 ? 0 : 32));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.351 */\nfunction parse_WsBool(blob, length, opts) {\n\tvar flags = opts && opts.biff == 8 || length == 2 ? blob.read_shift(2) : (blob.l += length, 0);\n\treturn { fDialog: flags & 0x10, fBelow: flags & 0x40, fRight: flags & 0x80 };\n}\n\n/* [MS-XLS] 2.4.28 */\nfunction parse_BoundSheet8(blob, length, opts) {\n\tvar name = \"\";\n\tif(opts.biff == 4) {\n\t\tname = parse_ShortXLUnicodeString(blob, 0, opts);\n\t\tif(name.length === 0) name = \"Sheet1\";\n\t\treturn { name:name };\n\t}\n\tvar pos = blob.read_shift(4);\n\tvar hidden = blob.read_shift(1) & 0x03;\n\tvar dt = blob.read_shift(1);\n\tswitch(dt) {\n\t\tcase 0: dt = 'Worksheet'; break;\n\t\tcase 1: dt = 'Macrosheet'; break;\n\t\tcase 2: dt = 'Chartsheet'; break;\n\t\tcase 6: dt = 'VBAModule'; break;\n\t}\n\tname = parse_ShortXLUnicodeString(blob, 0, opts);\n\tif(name.length === 0) name = \"Sheet1\";\n\treturn { pos:pos, hs:hidden, dt:dt, name:name };\n}\nfunction write_BoundSheet8(data, opts) {\n\tvar w = (!opts || opts.biff >= 8 ? 2 : 1);\n\tvar o = new_buf(8 + w * data.name.length);\n\to.write_shift(4, data.pos);\n\to.write_shift(1, data.hs || 0);\n\to.write_shift(1, data.dt);\n\to.write_shift(1, data.name.length);\n\tif(opts.biff >= 8) o.write_shift(1, 1);\n\to.write_shift(w * data.name.length, data.name, opts.biff < 8 ? 'sbcs' : 'utf16le');\n\tvar out = o.slice(0, o.l);\n\tout.l = o.l; return out;\n}\n\n/* [MS-XLS] 2.4.265 TODO */\nfunction parse_SST(blob, length)/*:SST*/ {\n\tvar end = blob.l + length;\n\tvar cnt = blob.read_shift(4);\n\tvar ucnt = blob.read_shift(4);\n\tvar strs/*:SST*/ = ([]/*:any*/);\n\tfor(var i = 0; i != ucnt && blob.l < end; ++i) {\n\t\tstrs.push(parse_XLUnicodeRichExtendedString(blob));\n\t}\n\tstrs.Count = cnt; strs.Unique = ucnt;\n\treturn strs;\n}\nfunction write_SST(sst, opts) {\n\tvar header = new_buf(8);\n\theader.write_shift(4, sst.Count);\n\theader.write_shift(4, sst.Unique);\n\tvar strs = [];\n\tfor(var j = 0; j < sst.length; ++j) strs[j] = write_XLUnicodeRichExtendedString(sst[j], opts);\n\tvar o = bconcat([header].concat(strs));\n\t/*::(*/o/*:: :any)*/.parts = [header.length].concat(strs.map(function(str) { return str.length; }));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.107 */\nfunction parse_ExtSST(blob, length) {\n\tvar extsst = {};\n\textsst.dsst = blob.read_shift(2);\n\tblob.l += length-2;\n\treturn extsst;\n}\n\n\n/* [MS-XLS] 2.4.221 TODO: check BIFF2-4 */\nfunction parse_Row(blob) {\n\tvar z = ({}/*:any*/);\n\tz.r = blob.read_shift(2);\n\tz.c = blob.read_shift(2);\n\tz.cnt = blob.read_shift(2) - z.c;\n\tvar miyRw = blob.read_shift(2);\n\tblob.l += 4; // reserved(2), unused(2)\n\tvar flags = blob.read_shift(1); // various flags\n\tblob.l += 3; // reserved(8), ixfe(12), flags(4)\n\tif(flags & 0x07) z.level = flags & 0x07;\n\t// collapsed: flags & 0x10\n\tif(flags & 0x20) z.hidden = true;\n\tif(flags & 0x40) z.hpt = miyRw / 20;\n\treturn z;\n}\n\n\n/* [MS-XLS] 2.4.125 */\nfunction parse_ForceFullCalculation(blob) {\n\tvar header = parse_frtHeader(blob);\n\tif(header.type != 0x08A3) throw new Error(\"Invalid Future Record \" + header.type);\n\tvar fullcalc = blob.read_shift(4);\n\treturn fullcalc !== 0x0;\n}\n\n\n\n\n\n/* [MS-XLS] 2.4.215 rt */\nfunction parse_RecalcId(blob) {\n\tblob.read_shift(2);\n\treturn blob.read_shift(4);\n}\n\n/* [MS-XLS] 2.4.87 */\nfunction parse_DefaultRowHeight(blob, length, opts) {\n\tvar f = 0;\n\tif(!(opts && opts.biff == 2)) {\n\t\tf = blob.read_shift(2);\n\t}\n\tvar miyRw = blob.read_shift(2);\n\tif((opts && opts.biff == 2)) {\n\t\tf = 1 - (miyRw >> 15); miyRw &= 0x7fff;\n\t}\n\tvar fl = {Unsynced:f&1,DyZero:(f&2)>>1,ExAsc:(f&4)>>2,ExDsc:(f&8)>>3};\n\treturn [fl, miyRw];\n}\n\n/* [MS-XLS] 2.4.345 TODO */\nfunction parse_Window1(blob) {\n\tvar xWn = blob.read_shift(2), yWn = blob.read_shift(2), dxWn = blob.read_shift(2), dyWn = blob.read_shift(2);\n\tvar flags = blob.read_shift(2), iTabCur = blob.read_shift(2), iTabFirst = blob.read_shift(2);\n\tvar ctabSel = blob.read_shift(2), wTabRatio = blob.read_shift(2);\n\treturn { Pos: [xWn, yWn], Dim: [dxWn, dyWn], Flags: flags, CurTab: iTabCur,\n\t\tFirstTab: iTabFirst, Selected: ctabSel, TabRatio: wTabRatio };\n}\nfunction write_Window1(/*::opts*/) {\n\tvar o = new_buf(18);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0x7260);\n\to.write_shift(2, 0x44c0);\n\to.write_shift(2, 0x38);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 1);\n\to.write_shift(2, 0x01f4);\n\treturn o;\n}\n/* [MS-XLS] 2.4.346 TODO */\nfunction parse_Window2(blob, length, opts) {\n\tif(opts && opts.biff >= 2 && opts.biff < 5) return {};\n\tvar f = blob.read_shift(2);\n\treturn { RTL: f & 0x40 };\n}\nfunction write_Window2(view) {\n\tvar o = new_buf(18), f = 0x6b6;\n\tif(view && view.RTL) f |= 0x40;\n\to.write_shift(2, f);\n\to.write_shift(4, 0);\n\to.write_shift(4, 64);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.189 TODO */\nfunction parse_Pane(/*blob, length, opts*/) {\n}\n\n/* [MS-XLS] 2.4.122 TODO */\nfunction parse_Font(blob, length, opts) {\n\tvar o/*:any*/ = {\n\t\tdyHeight: blob.read_shift(2),\n\t\tfl: blob.read_shift(2)\n\t};\n\tswitch((opts && opts.biff) || 8) {\n\t\tcase 2: break;\n\t\tcase 3: case 4: blob.l += 2; break;\n\t\tdefault: blob.l += 10; break;\n\t}\n\to.name = parse_ShortXLUnicodeString(blob, 0, opts);\n\treturn o;\n}\nfunction write_Font(data, opts) {\n\tvar name = data.name || \"Arial\";\n\tvar b5 = (opts && (opts.biff == 5)), w = (b5 ? (15 + name.length) : (16 + 2 * name.length));\n\tvar o = new_buf(w);\n\to.write_shift(2, (data.sz || 12) * 20);\n\to.write_shift(4, 0);\n\to.write_shift(2, 400);\n\to.write_shift(4, 0);\n\to.write_shift(2, 0);\n\to.write_shift(1, name.length);\n\tif(!b5) o.write_shift(1, 1);\n\to.write_shift((b5 ? 1 : 2) * name.length, name, (b5 ? \"sbcs\" : \"utf16le\"));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.149 */\nfunction parse_LabelSst(blob, length, opts) {\n\tvar cell = parse_XLSCell(blob, length, opts);\n\tcell.isst = blob.read_shift(4);\n\treturn cell;\n}\nfunction write_LabelSst(R/*:number*/, C/*:number*/, v/*:number*/, os/*:number*/ /*::, opts*/) {\n\tvar o = new_buf(10);\n\twrite_XLSCell(R, C, os, o);\n\to.write_shift(4, v);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.148 */\nfunction parse_Label(blob, length, opts) {\n\tif(opts.biffguess && opts.biff == 2) opts.biff = 5;\n\tvar target = blob.l + length;\n\tvar cell = parse_XLSCell(blob, length, opts);\n\tvar str = parse_XLUnicodeString(blob, target - blob.l, opts);\n\tcell.val = str;\n\treturn cell;\n}\nfunction write_Label(R/*:number*/, C/*:number*/, v/*:string*/, os/*:number*/, opts) {\n\tvar b8 = !opts || opts.biff == 8;\n\tvar o = new_buf(6 + 2 + (+b8) + (1 + b8) * v.length);\n\twrite_XLSCell(R, C, os, o);\n\to.write_shift(2, v.length);\n\tif(b8) o.write_shift(1, 1);\n\to.write_shift((1 + b8) * v.length, v, b8 ? 'utf16le' : 'sbcs');\n\treturn o;\n}\n\n\n/* [MS-XLS] 2.4.126 Number Formats */\nfunction parse_Format(blob, length, opts) {\n\tvar numFmtId = blob.read_shift(2);\n\tvar fmtstr = parse_XLUnicodeString2(blob, 0, opts);\n\treturn [numFmtId, fmtstr];\n}\nfunction write_Format(i/*:number*/, f/*:string*/, opts, o) {\n\tvar b5 = (opts && (opts.biff == 5));\n\tif(!o) o = new_buf(b5 ? (3 + f.length) : (5 + 2 * f.length));\n\to.write_shift(2, i);\n\to.write_shift((b5 ? 1 : 2), f.length);\n\tif(!b5) o.write_shift(1, 1);\n\to.write_shift((b5 ? 1 : 2) * f.length, f, (b5 ? 'sbcs' : 'utf16le'));\n\tvar out = (o.length > o.l) ? o.slice(0, o.l) : o;\n\tif(out.l == null) out.l = out.length;\n\treturn out;\n}\nvar parse_BIFF2Format = parse_XLUnicodeString2;\nfunction write_BIFF2Format(f/*:string*/) {\n\tvar o = new_buf(1 + f.length);\n\to.write_shift(1, f.length);\n\to.write_shift(f.length, f, \"sbcs\");\n\treturn o;\n}\nfunction write_BIFF4Format(f/*:string*/) {\n\tvar o = new_buf(3 + f.length);\n\to.l += 2;\n\to.write_shift(1, f.length);\n\to.write_shift(f.length, f, \"sbcs\");\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.90 */\nfunction parse_Dimensions(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar w = opts.biff == 8 || !opts.biff ? 4 : 2;\n\tvar r = blob.read_shift(w), R = blob.read_shift(w);\n\tvar c = blob.read_shift(2), C = blob.read_shift(2);\n\tblob.l = end;\n\treturn {s: {r:r, c:c}, e: {r:R, c:C}};\n}\nfunction write_Dimensions(range, opts) {\n\tvar w = opts.biff == 8 || !opts.biff ? 4 : 2;\n\tvar o = new_buf(2*w + 6);\n\to.write_shift(w, range.s.r);\n\to.write_shift(w, range.e.r + 1);\n\to.write_shift(2, range.s.c);\n\to.write_shift(2, range.e.c + 1);\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.220 */\nfunction parse_RK(blob) {\n\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\n\tvar rkrec = parse_RkRec(blob);\n\treturn {r:rw, c:col, ixfe:rkrec[0], rknum:rkrec[1]};\n}\n\n/* [MS-XLS] 2.4.175 */\nfunction parse_MulRk(blob, length) {\n\tvar target = blob.l + length - 2;\n\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\n\tvar rkrecs = [];\n\twhile(blob.l < target) rkrecs.push(parse_RkRec(blob));\n\tif(blob.l !== target) throw new Error(\"MulRK read error\");\n\tvar lastcol = blob.read_shift(2);\n\tif(rkrecs.length != lastcol - col + 1) throw new Error(\"MulRK length mismatch\");\n\treturn {r:rw, c:col, C:lastcol, rkrec:rkrecs};\n}\n/* [MS-XLS] 2.4.174 */\nfunction parse_MulBlank(blob, length) {\n\tvar target = blob.l + length - 2;\n\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\n\tvar ixfes = [];\n\twhile(blob.l < target) ixfes.push(blob.read_shift(2));\n\tif(blob.l !== target) throw new Error(\"MulBlank read error\");\n\tvar lastcol = blob.read_shift(2);\n\tif(ixfes.length != lastcol - col + 1) throw new Error(\"MulBlank length mismatch\");\n\treturn {r:rw, c:col, C:lastcol, ixfe:ixfes};\n}\n\n/* [MS-XLS] 2.5.20 2.5.249 TODO: interpret values here */\nfunction parse_CellStyleXF(blob, length, style, opts) {\n\tvar o = {};\n\tvar a = blob.read_shift(4), b = blob.read_shift(4);\n\tvar c = blob.read_shift(4), d = blob.read_shift(2);\n\to.patternType = XLSFillPattern[c >> 26];\n\n\tif(!opts.cellStyles) return o;\n\to.alc = a & 0x07;\n\to.fWrap = (a >> 3) & 0x01;\n\to.alcV = (a >> 4) & 0x07;\n\to.fJustLast = (a >> 7) & 0x01;\n\to.trot = (a >> 8) & 0xFF;\n\to.cIndent = (a >> 16) & 0x0F;\n\to.fShrinkToFit = (a >> 20) & 0x01;\n\to.iReadOrder = (a >> 22) & 0x02;\n\to.fAtrNum = (a >> 26) & 0x01;\n\to.fAtrFnt = (a >> 27) & 0x01;\n\to.fAtrAlc = (a >> 28) & 0x01;\n\to.fAtrBdr = (a >> 29) & 0x01;\n\to.fAtrPat = (a >> 30) & 0x01;\n\to.fAtrProt = (a >> 31) & 0x01;\n\n\to.dgLeft = b & 0x0F;\n\to.dgRight = (b >> 4) & 0x0F;\n\to.dgTop = (b >> 8) & 0x0F;\n\to.dgBottom = (b >> 12) & 0x0F;\n\to.icvLeft = (b >> 16) & 0x7F;\n\to.icvRight = (b >> 23) & 0x7F;\n\to.grbitDiag = (b >> 30) & 0x03;\n\n\to.icvTop = c & 0x7F;\n\to.icvBottom = (c >> 7) & 0x7F;\n\to.icvDiag = (c >> 14) & 0x7F;\n\to.dgDiag = (c >> 21) & 0x0F;\n\n\to.icvFore = d & 0x7F;\n\to.icvBack = (d >> 7) & 0x7F;\n\to.fsxButton = (d >> 14) & 0x01;\n\treturn o;\n}\n//function parse_CellXF(blob, length, opts) {return parse_CellStyleXF(blob,length,0, opts);}\n//function parse_StyleXF(blob, length, opts) {return parse_CellStyleXF(blob,length,1, opts);}\n\n/* [MS-XLS] 2.4.353 TODO: actually do this right */\nfunction parse_XF(blob, length, opts) {\n\tvar o = {};\n\to.ifnt = blob.read_shift(2); o.numFmtId = blob.read_shift(2); o.flags = blob.read_shift(2);\n\to.fStyle = (o.flags >> 2) & 0x01;\n\tlength -= 6;\n\to.data = parse_CellStyleXF(blob, length, o.fStyle, opts);\n\treturn o;\n}\nfunction write_XF(data, ixfeP, opts, o) {\n\tvar b5 = (opts && (opts.biff == 5));\n\tif(!o) o = new_buf(b5 ? 16 : 20);\n\to.write_shift(2, 0);\n\tif(data.style) {\n\t\to.write_shift(2, (data.numFmtId||0));\n\t\to.write_shift(2, 0xFFF4);\n\t} else {\n\t\to.write_shift(2, (data.numFmtId||0));\n\t\to.write_shift(2, (ixfeP<<4));\n\t}\n\tvar f = 0;\n\tif(data.numFmtId > 0 && b5) f |= 0x0400;\n\to.write_shift(4, f);\n\to.write_shift(4, 0);\n\tif(!b5) o.write_shift(4, 0);\n\to.write_shift(2, 0);\n\treturn o;\n}\nfunction parse_BIFF2XF(blob/*::, length, opts*/) {\n\tvar o = {};\n\to.ifnt = blob.read_shift(1); blob.l++; o.flags = blob.read_shift(1);\n\to.numFmtId = o.flags & 0x3F; o.flags>>=6;\n\to.fStyle = 0;\n\to.data = {}; // TODO\n\treturn o;\n}\nfunction write_BIFF2XF(xf) {\n\tvar o = new_buf(4);\n\to.l+=2;\n\to.write_shift(1, xf.numFmtId);\n\to.l++;\n\treturn o;\n}\nfunction write_BIFF3XF(xf) {\n\tvar o = new_buf(12);\n\to.l++;\n\to.write_shift(1, xf.numFmtId);\n\to.l += 10;\n\treturn o;\n}\n/* TODO: check other fields */\nvar write_BIFF4XF = write_BIFF3XF;\nfunction parse_BIFF3XF(blob/*::, length, opts*/) {\n\tvar o = {};\n\to.ifnt = blob.read_shift(1); o.numFmtId = blob.read_shift(1); o.flags = blob.read_shift(2);\n\to.fStyle = (o.flags >> 2) & 0x01;\n\to.data = {}; // TODO\n\treturn o;\n}\nfunction parse_BIFF4XF(blob/*::, length, opts*/) {\n\tvar o = {};\n\to.ifnt = blob.read_shift(1); o.numFmtId = blob.read_shift(1); o.flags = blob.read_shift(2);\n\to.fStyle = (o.flags >> 2) & 0x01;\n\to.data = {}; // TODO\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.134 */\nfunction parse_Guts(blob) {\n\tblob.l += 4;\n\tvar out = [blob.read_shift(2), blob.read_shift(2)];\n\tif(out[0] !== 0) out[0]--;\n\tif(out[1] !== 0) out[1]--;\n\tif(out[0] > 7 || out[1] > 7) throw new Error(\"Bad Gutters: \" + out.join(\"|\"));\n\treturn out;\n}\nfunction write_Guts(guts/*:Array<number>*/) {\n\tvar o = new_buf(8);\n\to.write_shift(4, 0);\n\to.write_shift(2, guts[0] ? guts[0] + 1 : 0);\n\to.write_shift(2, guts[1] ? guts[1] + 1 : 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.24 */\nfunction parse_BoolErr(blob, length, opts) {\n\tvar cell = parse_XLSCell(blob, 6, opts);\n\tvar val = parse_Bes(blob, 2);\n\tcell.val = val;\n\tcell.t = (val === true || val === false) ? 'b' : 'e';\n\treturn cell;\n}\nfunction write_BoolErr(R/*:number*/, C/*:number*/, v, os/*:number*/, opts, t/*:string*/) {\n\tvar o = new_buf(8);\n\twrite_XLSCell(R, C, os, o);\n\twrite_Bes(v, t, o);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.180 Number */\nfunction parse_Number(blob, length, opts) {\n\tif(opts.biffguess && opts.biff == 2) opts.biff = 5;\n\tvar cell = parse_XLSCell(blob, 6, opts);\n\tvar xnum = parse_Xnum(blob, 8);\n\tcell.val = xnum;\n\treturn cell;\n}\nfunction write_Number(R/*:number*/, C/*:number*/, v, os/*:: :number, opts*/) {\n\tvar o = new_buf(14);\n\twrite_XLSCell(R, C, os, o);\n\twrite_Xnum(v, o);\n\treturn o;\n}\n\nvar parse_XLHeaderFooter = parse_OptXLUnicodeString; // TODO: parse 2.4.136\n\n/* [MS-XLS] 2.4.271 */\nfunction parse_SupBook(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar ctab = blob.read_shift(2);\n\tvar cch = blob.read_shift(2);\n\topts.sbcch = cch;\n\tif(cch == 0x0401 || cch == 0x3A01) return [cch, ctab];\n\tif(cch < 0x01 || cch >0xff) throw new Error(\"Unexpected SupBook type: \"+cch);\n\tvar virtPath = parse_XLUnicodeStringNoCch(blob, cch);\n\t/* TODO: 2.5.277 Virtual Path */\n\tvar rgst = [];\n\twhile(end > blob.l) rgst.push(parse_XLUnicodeString(blob));\n\treturn [cch, ctab, virtPath, rgst];\n}\n\n/* [MS-XLS] 2.4.105 TODO */\nfunction parse_ExternName(blob, length, opts) {\n\tvar flags = blob.read_shift(2);\n\tvar body;\n\tvar o = ({\n\t\tfBuiltIn: flags & 0x01,\n\t\tfWantAdvise: (flags >>> 1) & 0x01,\n\t\tfWantPict: (flags >>> 2) & 0x01,\n\t\tfOle: (flags >>> 3) & 0x01,\n\t\tfOleLink: (flags >>> 4) & 0x01,\n\t\tcf: (flags >>> 5) & 0x3FF,\n\t\tfIcon: flags >>> 15 & 0x01\n\t}/*:any*/);\n\tif(opts.sbcch === 0x3A01) body = parse_AddinUdf(blob, length-2, opts);\n\t//else throw new Error(\"unsupported SupBook cch: \" + opts.sbcch);\n\to.body = body || blob.read_shift(length-2);\n\tif(typeof body === \"string\") o.Name = body;\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.150 TODO */\nfunction parse_Lbl(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar flags = blob.read_shift(2);\n\tvar chKey = blob.read_shift(1);\n\tvar cch = blob.read_shift(1);\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\tvar itab = 0;\n\tif(!opts || opts.biff >= 5) {\n\t\tif(opts.biff != 5) blob.l += 2;\n\t\titab = blob.read_shift(2);\n\t\tif(opts.biff == 5) blob.l += 2;\n\t\tblob.l += 4;\n\t}\n\tvar name = parse_XLUnicodeStringNoCch(blob, cch, opts);\n\tif(flags & 0x20) name = XLSLblBuiltIn[name.charCodeAt(0)];\n\tvar npflen = target - blob.l; if(opts && opts.biff == 2) --npflen;\n\t/*jshint -W018 */\n\tvar rgce = (target == blob.l || cce === 0 || !(npflen > 0)) ? [] : parse_NameParsedFormula(blob, npflen, opts, cce);\n\t/*jshint +W018 */\n\treturn {\n\t\tchKey: chKey,\n\t\tName: name,\n\t\titab: itab,\n\t\trgce: rgce\n\t};\n}\n\n/* [MS-XLS] 2.4.106 TODO: legacy record filename encoding */\nfunction parse_ExternSheet(blob, length, opts) {\n\tif(opts.biff < 8) return parse_BIFF5ExternSheet(blob, length, opts);\n\t/* see issue 2907 */\n\tif(!(opts.biff > 8) && (length == blob[blob.l] + (blob[blob.l+1] == 0x03 ? 1 : 0) + 1)) return parse_BIFF5ExternSheet(blob, length, opts);\n\tvar o = [], target = blob.l + length, len = blob.read_shift(opts.biff > 8 ? 4 : 2);\n\twhile(len-- !== 0) o.push(parse_XTI(blob, opts.biff > 8 ? 12 : 6, opts));\n\t\t// [iSupBook, itabFirst, itabLast];\n\tif(blob.l != target) throw new Error(\"Bad ExternSheet: \" + blob.l + \" != \" + target);\n\treturn o;\n}\nfunction parse_BIFF5ExternSheet(blob, length, opts) {\n\tif(blob[blob.l + 1] == 0x03) blob[blob.l]++;\n\tvar o = parse_ShortXLUnicodeString(blob, length, opts);\n\treturn o.charCodeAt(0) == 0x03 ? o.slice(1) : o;\n}\n\n/* [MS-XLS] 2.4.176 TODO: check older biff */\nfunction parse_NameCmt(blob, length, opts) {\n\tif(opts.biff < 8) { blob.l += length; return; }\n\tvar cchName = blob.read_shift(2);\n\tvar cchComment = blob.read_shift(2);\n\tvar name = parse_XLUnicodeStringNoCch(blob, cchName, opts);\n\tvar comment = parse_XLUnicodeStringNoCch(blob, cchComment, opts);\n\treturn [name, comment];\n}\n\n/* [MS-XLS] 2.4.260 */\nfunction parse_ShrFmla(blob, length, opts) {\n\tvar ref = parse_RefU(blob, 6);\n\tblob.l++;\n\tvar cUse = blob.read_shift(1);\n\tlength -= 8;\n\treturn [parse_SharedParsedFormula(blob, length, opts), cUse, ref];\n}\n\n/* [MS-XLS] 2.4.4 TODO */\nfunction parse_Array(blob, length, opts) {\n\tvar ref = parse_Ref(blob, 6);\n\t/* TODO: fAlwaysCalc */\n\tswitch(opts.biff) {\n\t\tcase 2: blob.l ++; length -= 7; break;\n\t\tcase 3: case 4: blob.l += 2; length -= 8; break;\n\t\tdefault: blob.l += 6; length -= 12;\n\t}\n\treturn [ref, parse_ArrayParsedFormula(blob, length, opts, ref)];\n}\n\n/* [MS-XLS] 2.4.173 */\nfunction parse_MTRSettings(blob) {\n\tvar fMTREnabled = blob.read_shift(4) !== 0x00;\n\tvar fUserSetThreadCount = blob.read_shift(4) !== 0x00;\n\tvar cUserThreadCount = blob.read_shift(4);\n\treturn [fMTREnabled, fUserSetThreadCount, cUserThreadCount];\n}\n\n/* [MS-XLS] 2.5.186 */\nfunction parse_NoteSh(blob, length, opts) {\n\tvar row = blob.read_shift(2), col = blob.read_shift(2);\n\tvar flags = blob.read_shift(2), idObj = blob.read_shift(2);\n\tvar stAuthor = parse_XLUnicodeString2(blob, 0, opts);\n\treturn [{r:row,c:col}, stAuthor, idObj, flags];\n}\n\n/* [MS-XLS] 2.4.179 */\nfunction parse_Note(blob, length, opts) {\n\tif(opts && (opts.biff < 8)) {\n\t\tvar row = blob.read_shift(2), col = blob.read_shift(2);\n\t\tif(row == 0xFFFF || row == -1) return; // TODO: test continuation\n\t\tvar cch = blob.read_shift(2);\n\t\tvar cmnt = blob.read_shift(Math.min(cch,2048), 'cpstr');\n\t\treturn [{r:row, c:col}, cmnt];\n\t}\n\t/* TODO: Support revisions */\n\treturn parse_NoteSh(blob, length, opts);\n}\nfunction write_NOTE_BIFF2(text/*:string*/, R/*:number*/, C/*:number*/, len/*?:number*/) {\n\tvar o = new_buf(6 + (len || text.length));\n\to.write_shift(2, R);\n\to.write_shift(2, C);\n\to.write_shift(2, len || text.length);\n\to.write_shift(text.length, text, \"sbcs\");\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.168 */\nfunction parse_MergeCells(blob, length)/*:Array<Range>*/ {\n\tvar merges/*:Array<Range>*/ = [];\n\tvar cmcs = blob.read_shift(2);\n\twhile (cmcs--) merges.push(parse_Ref8U(blob,length));\n\treturn merges;\n}\nfunction write_MergeCells(merges/*:Array<Range>*/) {\n\tvar o = new_buf(2 + merges.length * 8);\n\to.write_shift(2, merges.length);\n\tfor(var i = 0; i < merges.length; ++i) write_Ref8U(merges[i], o);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.181 TODO: parse all the things! */\nfunction parse_Obj(blob, length, opts) {\n\tif(opts && opts.biff < 8) return parse_BIFF5Obj(blob, length, opts);\n\tvar cmo = parse_FtCmo(blob, 22); // id, ot, flags\n\tvar fts = parse_FtArray(blob, length-22, cmo[1]);\n\treturn { cmo: cmo, ft:fts };\n}\n/* from older spec */\nvar parse_BIFF5OT = {\n0x08: function(blob, length) {\n\tvar tgt = blob.l + length;\n\tblob.l += 10; // todo\n\tvar cf = blob.read_shift(2);\n\tblob.l += 4;\n\tblob.l += 2; //var cbPictFmla = blob.read_shift(2);\n\tblob.l += 2;\n\tblob.l += 2; //var grbit = blob.read_shift(2);\n\tblob.l += 4;\n\tvar cchName = blob.read_shift(1);\n\tblob.l += cchName; // TODO: stName\n\tblob.l = tgt; // TODO: fmla\n\treturn { fmt:cf };\n}\n};\n\nfunction parse_BIFF5Obj(blob, length, opts) {\n\tblob.l += 4; //var cnt = blob.read_shift(4);\n\tvar ot = blob.read_shift(2);\n\tvar id = blob.read_shift(2);\n\tvar grbit = blob.read_shift(2);\n\tblob.l += 2; //var colL = blob.read_shift(2);\n\tblob.l += 2; //var dxL = blob.read_shift(2);\n\tblob.l += 2; //var rwT = blob.read_shift(2);\n\tblob.l += 2; //var dyT = blob.read_shift(2);\n\tblob.l += 2; //var colR = blob.read_shift(2);\n\tblob.l += 2; //var dxR = blob.read_shift(2);\n\tblob.l += 2; //var rwB = blob.read_shift(2);\n\tblob.l += 2; //var dyB = blob.read_shift(2);\n\tblob.l += 2; //var cbMacro = blob.read_shift(2);\n\tblob.l += 6;\n\tlength -= 36;\n\tvar fts = [];\n\tfts.push((parse_BIFF5OT[ot]||parsenoop)(blob, length, opts));\n\treturn { cmo: [id, ot, grbit], ft:fts };\n}\n\n/* [MS-XLS] 2.4.329 TODO: parse properly */\nfunction parse_TxO(blob, length, opts) {\n\tvar s = blob.l;\n\tvar texts = \"\";\ntry {\n\tblob.l += 4;\n\tvar ot = (opts.lastobj||{cmo:[0,0]}).cmo[1];\n\tvar controlInfo; // eslint-disable-line no-unused-vars\n\tif([0,5,7,11,12,14].indexOf(ot) == -1) blob.l += 6;\n\telse controlInfo = parse_ControlInfo(blob, 6, opts); // eslint-disable-line no-unused-vars\n\tvar cchText = blob.read_shift(2);\n\t/*var cbRuns = */blob.read_shift(2);\n\t/*var ifntEmpty = */parseuint16(blob, 2);\n\tvar len = blob.read_shift(2);\n\tblob.l += len;\n\t//var fmla = parse_ObjFmla(blob, s + length - blob.l);\n\n\tfor(var i = 1; i < blob.lens.length-1; ++i) {\n\t\tif(blob.l-s != blob.lens[i]) throw new Error(\"TxO: bad continue record\");\n\t\tvar hdr = blob[blob.l];\n\t\tvar t = parse_XLUnicodeStringNoCch(blob, blob.lens[i+1]-blob.lens[i]-1);\n\t\ttexts += t;\n\t\tif(texts.length >= (hdr ? cchText : 2*cchText)) break;\n\t}\n\tif(texts.length !== cchText && texts.length !== cchText*2) {\n\t\tthrow new Error(\"cchText: \" + cchText + \" != \" + texts.length);\n\t}\n\n\tblob.l = s + length;\n\t/* [MS-XLS] 2.5.272 TxORuns */\n//\tvar rgTxoRuns = [];\n//\tfor(var j = 0; j != cbRuns/8-1; ++j) blob.l += 8;\n//\tvar cchText2 = blob.read_shift(2);\n//\tif(cchText2 !== cchText) throw new Error(\"TxOLastRun mismatch: \" + cchText2 + \" \" + cchText);\n//\tblob.l += 6;\n//\tif(s + length != blob.l) throw new Error(\"TxO \" + (s + length) + \", at \" + blob.l);\n\treturn { t: texts };\n} catch(e) { blob.l = s + length; return { t: texts }; }\n}\n\n/* [MS-XLS] 2.4.140 */\nfunction parse_HLink(blob, length) {\n\tvar ref = parse_Ref8U(blob, 8);\n\tblob.l += 16; /* CLSID */\n\tvar hlink = parse_Hyperlink(blob, length-24);\n\treturn [ref, hlink];\n}\nfunction write_HLink(hl) {\n\tvar O = new_buf(24);\n\tvar ref = decode_cell(hl[0]);\n\tO.write_shift(2, ref.r); O.write_shift(2, ref.r);\n\tO.write_shift(2, ref.c); O.write_shift(2, ref.c);\n\tvar clsid = \"d0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b\".split(\" \");\n\tfor(var i = 0; i < 16; ++i) O.write_shift(1, parseInt(clsid[i], 16));\n\treturn bconcat([O, write_Hyperlink(hl[1])]);\n}\n\n\n/* [MS-XLS] 2.4.141 */\nfunction parse_HLinkTooltip(blob, length) {\n\tblob.read_shift(2);\n\tvar ref = parse_Ref8U(blob, 8);\n\tvar wzTooltip = blob.read_shift((length-10)/2, 'dbcs-cont');\n\twzTooltip = wzTooltip.replace(chr0,\"\");\n\treturn [ref, wzTooltip];\n}\nfunction write_HLinkTooltip(hl) {\n\tvar TT = hl[1].Tooltip;\n\tvar O = new_buf(10 + 2 * (TT.length + 1));\n\tO.write_shift(2, 0x0800);\n\tvar ref = decode_cell(hl[0]);\n\tO.write_shift(2, ref.r); O.write_shift(2, ref.r);\n\tO.write_shift(2, ref.c); O.write_shift(2, ref.c);\n\tfor(var i = 0; i < TT.length; ++i) O.write_shift(2, TT.charCodeAt(i));\n\tO.write_shift(2, 0);\n\treturn O;\n}\n\n/* [MS-XLS] 2.4.63 */\nfunction parse_Country(blob)/*:[string|number, string|number]*/ {\n\tvar o = [0,0], d;\n\td = blob.read_shift(2); o[0] = CountryEnum[d] || d;\n\td = blob.read_shift(2); o[1] = CountryEnum[d] || d;\n\treturn o;\n}\nfunction write_Country(o) {\n\tif(!o) o = new_buf(4);\n\to.write_shift(2, 0x01);\n\to.write_shift(2, 0x01);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.50 ClrtClient */\nfunction parse_ClrtClient(blob) {\n\tvar ccv = blob.read_shift(2);\n\tvar o = [];\n\twhile(ccv-->0) o.push(parse_LongRGB(blob, 8));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.188 */\nfunction parse_Palette(blob) {\n\tvar ccv = blob.read_shift(2);\n\tvar o = [];\n\twhile(ccv-->0) o.push(parse_LongRGB(blob, 8));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.354 */\nfunction parse_XFCRC(blob) {\n\tblob.l += 2;\n\tvar o = {cxfs:0, crc:0};\n\to.cxfs = blob.read_shift(2);\n\to.crc = blob.read_shift(4);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.53 TODO: parse flags */\n/* [MS-XLSB] 2.4.323 TODO: parse flags */\nfunction parse_ColInfo(blob, length, opts) {\n\tif(!opts.cellStyles) return parsenoop(blob, length);\n\tvar w = opts && opts.biff >= 12 ? 4 : 2;\n\tvar colFirst = blob.read_shift(w);\n\tvar colLast = blob.read_shift(w);\n\tvar coldx = blob.read_shift(w);\n\tvar ixfe = blob.read_shift(w);\n\tvar flags = blob.read_shift(2);\n\tif(w == 2) blob.l += 2;\n\tvar o = ({s:colFirst, e:colLast, w:coldx, ixfe:ixfe, flags:flags}/*:any*/);\n\tif(opts.biff >= 5 || !opts.biff) o.level = (flags >> 8) & 0x7;\n\treturn o;\n}\nfunction write_ColInfo(col, idx) {\n\tvar o = new_buf(12);\n\to.write_shift(2, idx);\n\to.write_shift(2, idx);\n\to.write_shift(2, col.width * 256);\n\to.write_shift(2, 0);\n\tvar f = 0;\n\tif(col.hidden) f |= 1;\n\to.write_shift(1, f);\n\tf = col.level || 0;\n\to.write_shift(1, f);\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.257 */\nfunction parse_Setup(blob, length) {\n\tvar o = {};\n\tif(length < 32) return o;\n\tblob.l += 16;\n\to.header = parse_Xnum(blob, 8);\n\to.footer = parse_Xnum(blob, 8);\n\tblob.l += 2;\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.261 */\nfunction parse_ShtProps(blob, length, opts) {\n\tvar def = {area:false};\n\tif(opts.biff != 5) { blob.l += length; return def; }\n\tvar d = blob.read_shift(1); blob.l += 3;\n\tif((d & 0x10)) def.area = true;\n\treturn def;\n}\n\n/* [MS-XLS] 2.4.241 */\nfunction write_RRTabId(n/*:number*/) {\n\tvar out = new_buf(2 * n);\n\tfor(var i = 0; i < n; ++i) out.write_shift(2, i+1);\n\treturn out;\n}\n\nvar parse_Blank = parse_XLSCell; /* [MS-XLS] 2.4.20 Just the cell */\nvar parse_Scl = parseuint16a; /* [MS-XLS] 2.4.247 num, den */\nvar parse_String = parse_XLUnicodeString; /* [MS-XLS] 2.4.268 */\n\n/* --- Specific to versions before BIFF8 --- */\nfunction parse_ImData(blob) {\n\tvar cf = blob.read_shift(2);\n\tvar env = blob.read_shift(2);\n\tvar lcb = blob.read_shift(4);\n\tvar o = {fmt:cf, env:env, len:lcb, data:blob.slice(blob.l,blob.l+lcb)};\n\tblob.l += lcb;\n\treturn o;\n}\n\nfunction write_BIFF2Cell(out, r/*:number*/, c/*:number*/, ixfe/*:number*/, ifmt/*:number*/) {\n\tif(!out) out = new_buf(7);\n\tout.write_shift(2, r);\n\tout.write_shift(2, c);\n\tout.write_shift(1, ixfe||0/* & 0x3F */);\n\tout.write_shift(1, ifmt||0/* & 0x3F */);\n\tout.write_shift(1, 0);\n\treturn out;\n}\n\n/* BIFF2_??? where ??? is the name from [XLS] */\nfunction parse_BIFF2STR(blob, length, opts) {\n\tif(opts.biffguess && opts.biff == 5) opts.biff = 2;\n\tvar cell = parse_XLSCell(blob, 7, opts);\n\tvar str = parse_XLUnicodeString2(blob, length-7, opts);\n\tcell.t = 'str';\n\tcell.val = str;\n\treturn cell;\n}\n\nfunction parse_BIFF2NUM(blob, length, opts) {\n\tvar cell = parse_XLSCell(blob, 7, opts);\n\tvar num = parse_Xnum(blob, 8);\n\tcell.t = 'n';\n\tcell.val = num;\n\treturn cell;\n}\nfunction write_BIFF2NUM(r/*:number*/, c/*:number*/, val/*:number*/, ixfe, ifmt) {\n\tvar out = new_buf(15);\n\twrite_BIFF2Cell(out, r, c, ixfe||0, ifmt||0);\n\tout.write_shift(8, val, 'f');\n\treturn out;\n}\n\nfunction parse_BIFF2INT(blob, length, opts) {\n\tvar cell = parse_XLSCell(blob, 7, opts);\n\tvar num = blob.read_shift(2);\n\tcell.t = 'n';\n\tcell.val = num;\n\treturn cell;\n}\nfunction write_BIFF2INT(r/*:number*/, c/*:number*/, val/*:number*/, ixfe/*:number*/, ifmt/*:number*/) {\n\tvar out = new_buf(9);\n\twrite_BIFF2Cell(out, r, c, ixfe||0, ifmt||0);\n\tout.write_shift(2, val);\n\treturn out;\n}\n\nfunction parse_BIFF2STRING(blob) {\n\tvar cch = blob.read_shift(1);\n\tif(cch === 0) { blob.l++; return \"\"; }\n\treturn blob.read_shift(cch, 'sbcs-cont');\n}\n\nfunction parse_BIFF2BOOLERR(blob, length, opts) {\n\tvar bestart = blob.l + 7;\n\tvar cell = parse_XLSCell(blob, 6, opts);\n\tblob.l = bestart;\n\tvar val = parse_Bes(blob, 2);\n\tcell.val = val;\n\tcell.t = (val === true || val === false) ? 'b' : 'e';\n\treturn cell;\n}\n\n/* TODO: convert to BIFF8 font struct */\nfunction parse_BIFF2FONTXTRA(blob, length) {\n\tblob.l += 6; // unknown\n\tblob.l += 2; // font weight \"bls\"\n\tblob.l += 1; // charset\n\tblob.l += 3; // unknown\n\tblob.l += 1; // font family\n\tblob.l += length - 13;\n}\n\n/* TODO: parse rich text runs */\nfunction parse_RString(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar cell = parse_XLSCell(blob, 6, opts);\n\tvar cch = blob.read_shift(2);\n\tvar str = parse_XLUnicodeStringNoCch(blob, cch, opts);\n\tblob.l = end;\n\tcell.t = 'str';\n\tcell.val = str;\n\treturn cell;\n}\n\nfunction parse_BIFF4SheetInfo(blob/*::, length, opts*/) {\n\tvar flags = blob.read_shift(4);\n\tvar cch = blob.read_shift(1), name = blob.read_shift(cch, \"sbcs\");\n\tif(name.length === 0) name = \"Sheet1\";\n\treturn { flags: flags, name:name };\n}var DBF_SUPPORTED_VERSIONS = [0x02, 0x03, 0x30, 0x31, 0x83, 0x8B, 0x8C, 0xF5];\nvar DBF = /*#__PURE__*/(function() {\nvar dbf_codepage_map = {\n\t/* Code Pages Supported by Visual FoxPro */\n\t0x01:   437,           0x02:   850,\n\t0x03:  1252,           0x04: 10000,\n\t0x64:   852,           0x65:   866,\n\t0x66:   865,           0x67:   861,\n\t0x68:   895,           0x69:   620,\n\t0x6A:   737,           0x6B:   857,\n\t0x78:   950,           0x79:   949,\n\t0x7A:   936,           0x7B:   932,\n\t0x7C:   874,           0x7D:  1255,\n\t0x7E:  1256,           0x96: 10007,\n\t0x97: 10029,           0x98: 10006,\n\t0xC8:  1250,           0xC9:  1251,\n\t0xCA:  1254,           0xCB:  1253,\n\n\t/* shapefile DBF extension */\n\t0x00: 20127,           0x08:   865,\n\t0x09:   437,           0x0A:   850,\n\t0x0B:   437,           0x0D:   437,\n\t0x0E:   850,           0x0F:   437,\n\t0x10:   850,           0x11:   437,\n\t0x12:   850,           0x13:   932,\n\t0x14:   850,           0x15:   437,\n\t0x16:   850,           0x17:   865,\n\t0x18:   437,           0x19:   437,\n\t0x1A:   850,           0x1B:   437,\n\t0x1C:   863,           0x1D:   850,\n\t0x1F:   852,           0x22:   852,\n\t0x23:   852,           0x24:   860,\n\t0x25:   850,           0x26:   866,\n\t0x37:   850,           0x40:   852,\n\t0x4D:   936,           0x4E:   949,\n\t0x4F:   950,           0x50:   874,\n\t0x57:  1252,           0x58:  1252,\n\t0x59:  1252,           0x6C:   863,\n\t0x86:   737,           0x87:   852,\n\t0x88:   857,           0xCC:  1257,\n\n\t0xFF: 16969\n};\nvar dbf_reverse_map = evert({\n\t0x01:   437,           0x02:   850,\n\t0x03:  1252,           0x04: 10000,\n\t0x64:   852,           0x65:   866,\n\t0x66:   865,           0x67:   861,\n\t0x68:   895,           0x69:   620,\n\t0x6A:   737,           0x6B:   857,\n\t0x78:   950,           0x79:   949,\n\t0x7A:   936,           0x7B:   932,\n\t0x7C:   874,           0x7D:  1255,\n\t0x7E:  1256,           0x96: 10007,\n\t0x97: 10029,           0x98: 10006,\n\t0xC8:  1250,           0xC9:  1251,\n\t0xCA:  1254,           0xCB:  1253,\n\t0x00: 20127\n});\n/* TODO: find an actual specification */\nfunction dbf_to_aoa(buf, opts)/*:AOA*/ {\n\tvar out/*:AOA*/ = [];\n\tvar d/*:Block*/ = (new_raw_buf(1)/*:any*/);\n\tswitch(opts.type) {\n\t\tcase 'base64': d = s2a(Base64_decode(buf)); break;\n\t\tcase 'binary': d = s2a(buf); break;\n\t\tcase 'buffer':\n\t\tcase 'array': d = buf; break;\n\t}\n\tprep_blob(d, 0);\n\n\t/* header */\n\tvar ft = d.read_shift(1);\n\tvar memo = !!(ft & 0x88);\n\tvar vfp = false, l7 = false;\n\tswitch(ft) {\n\t\tcase 0x02: break; // dBASE II\n\t\tcase 0x03: break; // dBASE III\n\t\tcase 0x30: vfp = true; memo = true; break; // VFP\n\t\tcase 0x31: vfp = true; memo = true; break; // VFP with autoincrement\n\t\t// 0x43 dBASE IV SQL table files\n\t\t// 0x63 dBASE IV SQL system files\n\t\tcase 0x83: break; // dBASE III with memo\n\t\tcase 0x8B: break; // dBASE IV with memo\n\t\tcase 0x8C: l7 = true; break; // dBASE Level 7 with memo\n\t\t// case 0xCB dBASE IV SQL table files with memo\n\t\tcase 0xF5: break; // FoxPro 2.x with memo\n\t\t// case 0xFB FoxBASE\n\t\tdefault: throw new Error(\"DBF Unsupported Version: \" + ft.toString(16));\n\t}\n\n\tvar nrow = 0, fpos = 0x0209;\n\tif(ft == 0x02) nrow = d.read_shift(2);\n\td.l += 3; // dBASE II stores DDMMYY date, others use YYMMDD\n\tif(ft != 0x02) nrow = d.read_shift(4);\n\tif(nrow > 1048576) nrow = 1e6;\n\n\tif(ft != 0x02) fpos = d.read_shift(2); // header length\n\tvar rlen = d.read_shift(2); // record length\n\n\tvar /*flags = 0,*/ current_cp = opts.codepage || 1252;\n\tif(ft != 0x02) { // 20 reserved bytes\n\t\td.l+=16;\n\t\t/*flags = */d.read_shift(1);\n\t\t//if(memo && ((flags & 0x02) === 0)) throw new Error(\"DBF Flags \" + flags.toString(16) + \" ft \" + ft.toString(16));\n\n\t\t/* codepage present in FoxPro and dBASE Level 7 */\n\t\tif(d[d.l] !== 0) current_cp = dbf_codepage_map[d[d.l]];\n\t\td.l+=1;\n\n\t\td.l+=2;\n\t}\n\tif(l7) d.l += 36; // Level 7: 32 byte \"Language driver name\", 4 byte reserved\n\n/*:: type DBFField = { name:string; len:number; type:string; } */\n\tvar fields/*:Array<DBFField>*/ = [], field/*:DBFField*/ = ({}/*:any*/);\n\tvar hend = Math.min(d.length, (ft == 0x02 ? 0x209 : (fpos - 10 - (vfp ? 264 : 0))));\n\tvar ww = l7 ? 32 : 11;\n\twhile(d.l < hend && d[d.l] != 0x0d) {\n\t\tfield = ({}/*:any*/);\n\t\tfield.name = (typeof $cptable !== \"undefined\" ? $cptable.utils.decode(current_cp, d.slice(d.l, d.l+ww)) : a2s(d.slice(d.l, d.l + ww))).replace(/[\\u0000\\r\\n][\\S\\s]*$/g,\"\");\n\t\td.l += ww;\n\t\tfield.type = String.fromCharCode(d.read_shift(1));\n\t\tif(ft != 0x02 && !l7) field.offset = d.read_shift(4);\n\t\tfield.len = d.read_shift(1);\n\t\tif(ft == 0x02) field.offset = d.read_shift(2);\n\t\tfield.dec = d.read_shift(1);\n\t\tif(field.name.length) fields.push(field);\n\t\tif(ft != 0x02) d.l += l7 ? 13 : 14;\n\t\tswitch(field.type) {\n\t\t\tcase 'B': // Double (VFP) / Binary (dBASE L7)\n\t\t\t\tif((!vfp || field.len != 8) && opts.WTF) console.log('Skipping ' + field.name + ':' + field.type);\n\t\t\t\tbreak;\n\t\t\tcase 'G': // General (FoxPro and dBASE L7)\n\t\t\tcase 'P': // Picture (FoxPro and dBASE L7)\n\t\t\t\tif(opts.WTF) console.log('Skipping ' + field.name + ':' + field.type);\n\t\t\t\tbreak;\n\t\t\tcase '+': // Autoincrement (dBASE L7 only)\n\t\t\tcase '0': // _NullFlags (VFP only)\n\t\t\tcase '@': // Timestamp (dBASE L7 only)\n\t\t\tcase 'C': // Character (dBASE II)\n\t\t\tcase 'D': // Date (dBASE III)\n\t\t\tcase 'F': // Float (dBASE IV)\n\t\t\tcase 'I': // Long (VFP and dBASE L7)\n\t\t\tcase 'L': // Logical (dBASE II)\n\t\t\tcase 'M': // Memo (dBASE III)\n\t\t\tcase 'N': // Number (dBASE II)\n\t\t\tcase 'O': // Double (dBASE L7 only)\n\t\t\tcase 'T': // Datetime (VFP only)\n\t\t\tcase 'Y': // Currency (VFP only)\n\t\t\t\tbreak;\n\t\t\tdefault: throw new Error('Unknown Field Type: ' + field.type);\n\t\t}\n\t}\n\n\tif(d[d.l] !== 0x0D) d.l = fpos-1;\n\tif(d.read_shift(1) !== 0x0D) throw new Error(\"DBF Terminator not found \" + d.l + \" \" + d[d.l]);\n\td.l = fpos;\n\n\t/* data */\n\tvar R = 0, C = 0;\n\tout[0] = [];\n\tfor(C = 0; C != fields.length; ++C) out[0][C] = fields[C].name;\n\twhile(nrow-- > 0) {\n\t\tif(d[d.l] === 0x2A) {\n\t\t\t// TODO: record marked as deleted -- create a hidden row?\n\t\t\td.l+=rlen;\n\t\t\tcontinue;\n\t\t}\n\t\t++d.l;\n\t\tout[++R] = []; C = 0;\n\t\tfor(C = 0; C != fields.length; ++C) {\n\t\t\tvar dd = d.slice(d.l, d.l+fields[C].len); d.l+=fields[C].len;\n\t\t\tprep_blob(dd, 0);\n\t\t\tvar s = typeof $cptable !== \"undefined\" ? $cptable.utils.decode(current_cp, dd) : a2s(dd);\n\t\t\tswitch(fields[C].type) {\n\t\t\t\tcase 'C':\n\t\t\t\t\t// NOTE: it is conventional to write '  /  /  ' for empty dates\n\t\t\t\t\tif(s.trim().length) out[R][C] = s.replace(/([^\\s])\\s+$/,\"$1\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'D':\n\t\t\t\t\tif(s.length === 8) {\n\t\t\t\t\t\tout[R][C] = new Date(Date.UTC(+s.slice(0,4), +s.slice(4,6)-1, +s.slice(6,8), 0, 0, 0, 0));\n\t\t\t\t\t\tif(!(opts && opts.UTC)) { out[R][C] = utc_to_local(out[R][C]); }\n\t\t\t\t\t}\n\t\t\t\t\telse out[R][C] = s;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'F': out[R][C] = parseFloat(s.trim()); break;\n\t\t\t\tcase '+': case 'I': out[R][C] = l7 ? dd.read_shift(-4, 'i') ^ 0x80000000 : dd.read_shift(4, 'i'); break;\n\t\t\t\tcase 'L': switch(s.trim().toUpperCase()) {\n\t\t\t\t\tcase 'Y': case 'T': out[R][C] = true; break;\n\t\t\t\t\tcase 'N': case 'F': out[R][C] = false; break;\n\t\t\t\t\tcase '': case '\\x00': case '?': break;\n\t\t\t\t\tdefault: throw new Error(\"DBF Unrecognized L:|\" + s + \"|\");\n\t\t\t\t\t} break;\n\t\t\t\tcase 'M': /* TODO: handle memo files */\n\t\t\t\t\tif(!memo) throw new Error(\"DBF Unexpected MEMO for type \" + ft.toString(16));\n\t\t\t\t\tout[R][C] = \"##MEMO##\" + (l7 ? parseInt(s.trim(), 10): dd.read_shift(4));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'N':\n\t\t\t\t\ts = s.replace(/\\u0000/g,\"\").trim();\n\t\t\t\t\t// NOTE: dBASE II interprets \"  .  \" as 0\n\t\t\t\t\tif(s && s != \".\") out[R][C] = +s || 0; break;\n\t\t\t\tcase '@':\n\t\t\t\t\t// NOTE: dBASE specs appear to be incorrect\n\t\t\t\t\tout[R][C] = new Date(dd.read_shift(-8, 'f') - 0x388317533400);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'T': {\n\t\t\t\t\tvar hi = dd.read_shift(4), lo = dd.read_shift(4);\n\t\t\t\t\tif(hi == 0 && lo == 0) break;\n\t\t\t\t\tout[R][C] = new Date((hi - 0x253D8C) * 0x5265C00 + lo);\n\t\t\t\t\tif(!(opts && opts.UTC)) out[R][C] = utc_to_local(out[R][C]);\n\t\t\t\t} break;\n\t\t\t\tcase 'Y': out[R][C] = dd.read_shift(4,'i')/1e4 + (dd.read_shift(4, 'i')/1e4)*Math.pow(2,32); break;\n\t\t\t\tcase 'O': out[R][C] = -dd.read_shift(-8, 'f'); break;\n\t\t\t\tcase 'B': if(vfp && fields[C].len == 8) { out[R][C] = dd.read_shift(8,'f'); break; }\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 'G': case 'P': dd.l += fields[C].len; break;\n\t\t\t\tcase '0':\n\t\t\t\t\tif(fields[C].name === '_NullFlags') break;\n\t\t\t\t\t/* falls through */\n\t\t\t\tdefault: throw new Error(\"DBF Unsupported data type \" + fields[C].type);\n\t\t\t}\n\t\t}\n\t}\n\tif(ft != 0x02) if(d.l < d.length && d[d.l++] != 0x1A) throw new Error(\"DBF EOF Marker missing \" + (d.l-1) + \" of \" + d.length + \" \" + d[d.l-1].toString(16));\n\tif(opts && opts.sheetRows) out = out.slice(0, opts.sheetRows);\n\topts.DBF = fields;\n\treturn out;\n}\n\nfunction dbf_to_sheet(buf, opts)/*:Worksheet*/ {\n\tvar o = opts || {};\n\tif(!o.dateNF) o.dateNF = \"yyyymmdd\";\n\tvar ws = aoa_to_sheet(dbf_to_aoa(buf, o), o);\n\tws[\"!cols\"] = o.DBF.map(function(field) { return {\n\t\twch: field.len,\n\t\tDBF: field\n\t};});\n\tdelete o.DBF;\n\treturn ws;\n}\n\nfunction dbf_to_workbook(buf, opts)/*:Workbook*/ {\n\ttry {\n\t\tvar o = sheet_to_workbook(dbf_to_sheet(buf, opts), opts);\n\t\to.bookType = \"dbf\";\n\t\treturn o;\n\t} catch(e) { if(opts && opts.WTF) throw e; }\n\treturn ({SheetNames:[],Sheets:{}});\n}\n\nvar _RLEN = { 'B': 8, 'C': 250, 'L': 1, 'D': 8, '?': 0, '': 0 };\nfunction sheet_to_dbf(ws/*:Worksheet*/, opts/*:WriteOpts*/) {\n\tif(!ws[\"!ref\"]) throw new Error(\"Cannot export empty sheet to DBF\");\n\tvar o = opts || {};\n\tvar old_cp = current_codepage;\n\tif(+o.codepage >= 0) set_cp(+o.codepage);\n\tif(o.type == \"string\") throw new Error(\"Cannot write DBF to JS string\");\n\tvar ba = buf_array();\n\tvar aoa/*:AOA*/ = sheet_to_json(ws, {header:1, raw:true, cellDates:true});\n\tvar headers = aoa[0], data = aoa.slice(1), cols = ws[\"!cols\"] || [];\n\tvar i = 0, j = 0, hcnt = 0, rlen = 1;\n\tfor(i = 0; i < headers.length; ++i) {\n\t\tif(((cols[i]||{}).DBF||{}).name) { headers[i] = cols[i].DBF.name; ++hcnt; continue; }\n\t\tif(headers[i] == null) continue;\n\t\t++hcnt;\n\t\tif(typeof headers[i] === 'number') headers[i] = headers[i].toString(10);\n\t\tif(typeof headers[i] !== 'string') throw new Error(\"DBF Invalid column name \" + headers[i] + \" |\" + (typeof headers[i]) + \"|\");\n\t\tif(headers.indexOf(headers[i]) !== i) for(j=0; j<1024;++j)\n\t\t\tif(headers.indexOf(headers[i] + \"_\" + j) == -1) { headers[i] += \"_\" + j; break; }\n\t}\n\tvar range = safe_decode_range(ws['!ref']);\n\tvar coltypes/*:Array<string>*/ = [];\n\tvar colwidths/*:Array<number>*/ = [];\n\tvar coldecimals/*:Array<number>*/ = [];\n\tfor(i = 0; i <= range.e.c - range.s.c; ++i) {\n\t\tvar guess = '', _guess = '', maxlen = 0;\n\t\tvar col/*:Array<any>*/ = [];\n\t\tfor(j=0; j < data.length; ++j) {\n\t\t\tif(data[j][i] != null) col.push(data[j][i]);\n\t\t}\n\t\tif(col.length == 0 || headers[i] == null) { coltypes[i] = '?'; continue; }\n\t\tfor(j = 0; j < col.length; ++j) {\n\t\t\tswitch(typeof col[j]) {\n\t\t\t\t/* TODO: check if L2 compat is desired */\n\t\t\t\tcase 'number': _guess = 'B'; break;\n\t\t\t\tcase 'string': _guess = 'C'; break;\n\t\t\t\tcase 'boolean': _guess = 'L'; break;\n\t\t\t\tcase 'object': _guess = col[j] instanceof Date ? 'D' : 'C'; break;\n\t\t\t\tdefault: _guess = 'C';\n\t\t\t}\n\t\t\t/* TODO: cache the values instead of encoding twice */\n\t\t\tmaxlen = Math.max(maxlen, (typeof $cptable !== \"undefined\" && typeof col[j] == \"string\" ? $cptable.utils.encode(current_ansi, col[j]): String(col[j])).length);\n\t\t\tguess = guess && guess != _guess ? 'C' : _guess;\n\t\t\t//if(guess == 'C') break;\n\t\t}\n\t\tif(maxlen > 250) maxlen = 250;\n\t\t_guess = ((cols[i]||{}).DBF||{}).type;\n\t\t/* TODO: more fine grained control over DBF type resolution */\n\t\tif(_guess == 'C') {\n\t\t\tif(cols[i].DBF.len > maxlen) maxlen = cols[i].DBF.len;\n\t\t}\n\t\tif(guess == 'B' && _guess == 'N') {\n\t\t\tguess = 'N';\n\t\t\tcoldecimals[i] = cols[i].DBF.dec;\n\t\t\tmaxlen = cols[i].DBF.len;\n\t\t}\n\t\tcolwidths[i] = guess == 'C' || _guess == 'N' ? maxlen : (_RLEN[guess] || 0);\n\t\trlen += colwidths[i];\n\t\tcoltypes[i] = guess;\n\t}\n\n\tvar h = ba.next(32);\n\th.write_shift(4, 0x13021130);\n\th.write_shift(4, data.length);\n\th.write_shift(2, 296 + 32 * hcnt);\n\th.write_shift(2, rlen);\n\tfor(i=0; i < 4; ++i) h.write_shift(4, 0);\n\tvar cp = +dbf_reverse_map[/*::String(*/current_codepage/*::)*/] || 0x03;\n\th.write_shift(4, 0x00000000 | (cp<<8));\n\tif(dbf_codepage_map[cp] != +o.codepage) {\n\t\tif(o.codepage) console.error(\"DBF Unsupported codepage \" + current_codepage + \", using 1252\");\n\t\tcurrent_codepage = 1252;\n\t}\n\n\tfor(i = 0, j = 0; i < headers.length; ++i) {\n\t\tif(headers[i] == null) continue;\n\t\tvar hf = ba.next(32);\n\t\t/* TODO: test how applications handle non-ASCII field names */\n\t\tvar _f = (headers[i].slice(-10) + \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\").slice(0, 11);\n\t\thf.write_shift(1, _f, \"sbcs\");\n\t\thf.write_shift(1, coltypes[i] == '?' ? 'C' : coltypes[i], \"sbcs\");\n\t\thf.write_shift(4, j);\n\t\thf.write_shift(1, colwidths[i] || _RLEN[coltypes[i]] || 0);\n\t\thf.write_shift(1, coldecimals[i] || 0);\n\t\thf.write_shift(1, 0x02);\n\t\thf.write_shift(4, 0);\n\t\thf.write_shift(1, 0);\n\t\thf.write_shift(4, 0);\n\t\thf.write_shift(4, 0);\n\t\tj += (colwidths[i] || _RLEN[coltypes[i]] || 0);\n\t}\n\n\tvar hb = ba.next(264);\n\thb.write_shift(4, 0x0000000D);\n\tfor(i=0; i < 65;++i) hb.write_shift(4, 0x00000000);\n\tfor(i=0; i < data.length; ++i) {\n\t\tvar rout = ba.next(rlen);\n\t\trout.write_shift(1, 0);\n\t\tfor(j=0; j<headers.length; ++j) {\n\t\t\tif(headers[j] == null) continue;\n\t\t\tswitch(coltypes[j]) {\n\t\t\t\tcase 'L': rout.write_shift(1, data[i][j] == null ? 0x3F : data[i][j] ? 0x54 : 0x46); break;\n\t\t\t\tcase 'B': rout.write_shift(8, data[i][j]||0, 'f'); break;\n\t\t\t\tcase 'N':\n\t\t\t\t\tvar _n = \"0\";\n\t\t\t\t\tif(typeof data[i][j] == \"number\") _n = data[i][j].toFixed(coldecimals[j]||0);\n\t\t\t\t\tif(_n.length > colwidths[j]) _n = _n.slice(0, colwidths[j]); // addresses decimal > width\n\t\t\t\t\tfor(hcnt=0; hcnt < colwidths[j]-_n.length; ++hcnt) rout.write_shift(1, 0x20);\n\t\t\t\t\trout.write_shift(1, _n, \"sbcs\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'D':\n\t\t\t\t\tif(!data[i][j]) rout.write_shift(8, \"00000000\", \"sbcs\");\n\t\t\t\t\telse {\n\t\t\t\t\t\trout.write_shift(4, (\"0000\"+data[i][j].getFullYear()).slice(-4), \"sbcs\");\n\t\t\t\t\t\trout.write_shift(2, (\"00\"+(data[i][j].getMonth()+1)).slice(-2), \"sbcs\");\n\t\t\t\t\t\trout.write_shift(2, (\"00\"+data[i][j].getDate()).slice(-2), \"sbcs\");\n\t\t\t\t\t} break;\n\t\t\t\tcase 'C':\n\t\t\t\t\tvar _l = rout.l;\n\t\t\t\t\tvar _s = String(data[i][j] != null ? data[i][j] : \"\").slice(0, colwidths[j]);\n\t\t\t\t\trout.write_shift(1, _s, \"cpstr\");\n\t\t\t\t\t_l += colwidths[j] - rout.l;\n\t\t\t\t\tfor(hcnt=0; hcnt < _l; ++hcnt) rout.write_shift(1, 0x20); break;\n\t\t\t}\n\t\t}\n\t\t// data\n\t}\n\tcurrent_codepage = old_cp;\n\tba.next(1).write_shift(1, 0x1A);\n\treturn ba.end();\n}\n\treturn {\n\t\tto_workbook: dbf_to_workbook,\n\t\tto_sheet: dbf_to_sheet,\n\t\tfrom_sheet: sheet_to_dbf\n\t};\n})();\n\nvar SYLK = /*#__PURE__*/(function() {\n\t/* TODO: stress test sequences */\n\tvar sylk_escapes = ({\n\t\tAA:'À', BA:'Á', CA:'Â', DA:195, HA:'Ä', JA:197,\n\t\tAE:'È', BE:'É', CE:'Ê',         HE:'Ë',\n\t\tAI:'Ì', BI:'Í', CI:'Î',         HI:'Ï',\n\t\tAO:'Ò', BO:'Ó', CO:'Ô', DO:213, HO:'Ö',\n\t\tAU:'Ù', BU:'Ú', CU:'Û',         HU:'Ü',\n\t\tAa:'à', Ba:'á', Ca:'â', Da:227, Ha:'ä', Ja:229,\n\t\tAe:'è', Be:'é', Ce:'ê',         He:'ë',\n\t\tAi:'ì', Bi:'í', Ci:'î',         Hi:'ï',\n\t\tAo:'ò', Bo:'ó', Co:'ô', Do:245, Ho:'ö',\n\t\tAu:'ù', Bu:'ú', Cu:'û',         Hu:'ü',\n\t\tKC:'Ç', Kc:'ç', q:'æ',  z:'œ',  a:'Æ',  j:'Œ',\n\t\tDN:209, Dn:241, Hy:255,\n\t\tS:169,  c:170,  R:174,  \"B \":180,\n\t\t0:176,  1:177,  2:178,\n\t\t3:179,  5:181,  6:182,\n\t\t7:183,  Q:185,  k:186,  b:208,  i:216,  l:222,  s:240,  y:248,\n\t\t\"!\":161, '\"':162, \"#\":163, \"(\":164, \"%\":165, \"'\":167, \"H \":168,\n\t\t\"+\":171, \";\":187, \"<\":188, \"=\":189, \">\":190, \"?\":191, \"{\":223\n\t}/*:any*/);\n\tvar sylk_char_regex = new RegExp(\"\\u001BN(\" + keys(sylk_escapes).join(\"|\").replace(/\\|\\|\\|/, \"|\\\\||\").replace(/([?()+])/g,\"\\\\$1\").replace(\"{\", \"\\\\{\") + \"|\\\\|)\", \"gm\");\n\ttry {\n\t\tsylk_char_regex = new RegExp(\"\\u001BN(\" + keys(sylk_escapes).join(\"|\").replace(/\\|\\|\\|/, \"|\\\\||\").replace(/([?()+])/g,\"\\\\$1\") + \"|\\\\|)\", \"gm\");\n\t} catch(e) {}\n\tvar sylk_char_fn = function(_, $1){ var o = sylk_escapes[$1]; return typeof o == \"number\" ? _getansi(o) : o; };\n\tvar decode_sylk_char = function($$, $1, $2) { var newcc = (($1.charCodeAt(0) - 0x20)<<4) | ($2.charCodeAt(0) - 0x30); return newcc == 59 ? $$ : _getansi(newcc); };\n\tsylk_escapes[\"|\"] = 254;\n\t/* TODO: evert the escape map */\n\tvar encode_sylk_str = function($$) { return $$.replace(/\\n/g, \"\\x1b :\").replace(/\\r/g, \"\\x1b =\"); };\n\t/* https://oss.sheetjs.com/notes/sylk/ for more details */\n\tfunction sylk_to_aoa(d/*:RawData*/, opts)/*:[AOA, Worksheet]*/ {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return sylk_to_aoa_str(Base64_decode(d), opts);\n\t\t\tcase 'binary': return sylk_to_aoa_str(d, opts);\n\t\t\tcase 'buffer': return sylk_to_aoa_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts);\n\t\t\tcase 'array': return sylk_to_aoa_str(cc2str(d), opts);\n\t\t}\n\t\tthrow new Error(\"Unrecognized type \" + opts.type);\n\t}\n\tfunction sylk_to_aoa_str(str/*:string*/, opts)/*:[AOA, Worksheet]*/ {\n\t\tvar records = str.split(/[\\n\\r]+/), R = -1, C = -1, ri = 0, rj = 0, arr/*:AOA*/ = [];\n\t\tvar formats/*:Array<string>*/ = [];\n\t\tvar next_cell_format/*:string|null*/ = null;\n\t\tvar sht = {}, rowinfo/*:Array<RowInfo>*/ = [], colinfo/*:Array<ColInfo>*/ = [], cw/*:Array<string>*/ = [];\n\t\tvar Mval = 0, j;\n\t\tvar wb = { Workbook: { WBProps: {}, Names: [] } };\n\t\tif(+opts.codepage >= 0) set_cp(+opts.codepage);\n\t\tfor (; ri !== records.length; ++ri) {\n\t\t\tMval = 0;\n\t\t\tvar rstr=records[ri].trim().replace(/\\x1B([\\x20-\\x2F])([\\x30-\\x3F])/g, decode_sylk_char).replace(sylk_char_regex, sylk_char_fn);\n\t\t\tvar record=rstr.replace(/;;/g, \"\\u0000\").split(\";\").map(function(x) { return x.replace(/\\u0000/g, \";\"); });\n\t\t\tvar RT=record[0], val;\n\t\t\tif(rstr.length > 0) switch(RT) {\n\t\t\tcase 'ID': break; /* header */\n\t\t\tcase 'E': break; /* EOF */\n\t\t\tcase 'B': break; /* dimensions */\n\t\t\tcase 'O': /* workbook options */\n\t\t\tfor(rj=1; rj<record.length; ++rj) switch(record[rj].charAt(0)) {\n\t\t\t\tcase 'V': {\n\t\t\t\t\tvar d1904 = parseInt(record[rj].slice(1), 10);\n\t\t\t\t\t// NOTE: it is technically an error if d1904 >= 5 or < 0\n\t\t\t\t\tif(d1904 >= 1 && d1904 <= 4) wb.Workbook.WBProps.date1904 = true;\n\t\t\t\t} break;\n\t\t\t} break;\n\t\t\tcase 'W': break; /* window */\n\t\t\tcase 'P':\n\t\t\t\tswitch(record[1].charAt(0)){\n\t\t\t\t\tcase 'P': formats.push(rstr.slice(3).replace(/;;/g, \";\")); break;\n\t\t\t\t} break;\n\t\t\tcase 'NN': { /* defined name */\n\t\t\t\tvar nn = {Sheet: 0};\n\t\t\t\tfor(rj=1; rj<record.length; ++rj) switch(record[rj].charAt(0)) {\n\t\t\t\t\tcase 'N': nn.Name = record[rj].slice(1); break;\n\t\t\t\t\tcase 'E': nn.Ref = (opts && opts.sheet || \"Sheet1\") + \"!\" + rc_to_a1(record[rj].slice(1)); break;\n\t\t\t\t}\n\t\t\t\twb.Workbook.Names.push(nn);\n\t\t\t} break;\n\t\t\t// case 'NE': // ??\n\t\t\t// case 'NU': // ??\n\t\t\tcase 'C': /* cell */\n\t\t\tvar C_seen_K = false, C_seen_X = false, C_seen_S = false, C_seen_E = false, _R = -1, _C = -1, formula = \"\", cell_t = \"z\";\n\t\t\tvar cmnt = \"\";\n\t\t\tfor(rj=1; rj<record.length; ++rj) switch(record[rj].charAt(0)) {\n\t\t\t\tcase 'A': cmnt = record[rj].slice(1); break; // TODO: comment\n\t\t\t\tcase 'X': C = parseInt(record[rj].slice(1), 10)-1; C_seen_X = true; break;\n\t\t\t\tcase 'Y':\n\t\t\t\t\tR = parseInt(record[rj].slice(1), 10)-1; if(!C_seen_X) C = 0;\n\t\t\t\t\tfor(j = arr.length; j <= R; ++j) arr[j] = [];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'K':\n\t\t\t\t\tval = record[rj].slice(1);\n\t\t\t\t\tif(val.charAt(0) === '\"') { val = val.slice(1,val.length - 1); cell_t = \"s\"; }\n\t\t\t\t\telse if(val === 'TRUE' || val === 'FALSE') { val = val === 'TRUE'; cell_t = \"b\"; }\n\t\t\t\t\telse if(val.charAt(0) == \"#\" && RBErr[val] != null) { cell_t = \"e\"; val = RBErr[val]; }\n\t\t\t\t\telse if(!isNaN(fuzzynum(val))) {\n\t\t\t\t\t\tval = fuzzynum(val); cell_t = \"n\";\n\t\t\t\t\t\tif(next_cell_format !== null && fmt_is_date(next_cell_format) && opts.cellDates) {\n\t\t\t\t\t\t\tval = numdate(wb.Workbook.WBProps.date1904 ? val + 1462 : val); cell_t = typeof val == \"number\" ? \"n\" : \"d\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(typeof $cptable !== 'undefined' && typeof val == \"string\" && ((opts||{}).type != \"string\") && (opts||{}).codepage) val = $cptable.utils.decode(opts.codepage, val);\n\t\t\t\t\tC_seen_K = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'E':\n\t\t\t\t\tC_seen_E = true;\n\t\t\t\t\tformula = rc_to_a1(record[rj].slice(1), {r:R,c:C});\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'S':\n\t\t\t\t\tC_seen_S = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'G': break; // unknown\n\t\t\t\tcase 'R': _R = parseInt(record[rj].slice(1), 10)-1; break;\n\t\t\t\tcase 'C': _C = parseInt(record[rj].slice(1), 10)-1; break;\n\t\t\t\t// case 'P': // ??\n\t\t\t\t// case 'D': // ??\n\t\t\t\tdefault: if(opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n\t\t\t}\n\t\t\tif(C_seen_K) {\n\t\t\t\tif(!arr[R][C]) arr[R][C] = { t: cell_t, v: val };\n\t\t\t\telse { arr[R][C].t = cell_t; arr[R][C].v = val; }\n\t\t\t\tif(next_cell_format) arr[R][C].z = next_cell_format;\n\t\t\t\tif(opts.cellText !== false && next_cell_format) arr[R][C].w = SSF_format(arr[R][C].z, arr[R][C].v, { date1904: wb.Workbook.WBProps.date1904 });\n\t\t\t\tnext_cell_format = null;\n\t\t\t}\n\t\t\tif(C_seen_S) {\n\t\t\t\tif(C_seen_E) throw new Error(\"SYLK shared formula cannot have own formula\");\n\t\t\t\tvar shrbase = _R > -1 && arr[_R][_C];\n\t\t\t\tif(!shrbase || !shrbase[1]) throw new Error(\"SYLK shared formula cannot find base\");\n\t\t\t\tformula = shift_formula_str(shrbase[1], {r: R - _R, c: C - _C});\n\t\t\t}\n\t\t\tif(formula) {\n\t\t\t\tif(!arr[R][C]) arr[R][C] = { t: 'n', f: formula };\n\t\t\t\telse arr[R][C].f = formula;\n\t\t\t}\n\t\t\tif(cmnt) {\n\t\t\t\tif(!arr[R][C]) arr[R][C] = { t: 'z' };\n\t\t\t\tarr[R][C].c = [{a:\"SheetJSYLK\", t: cmnt}];\n\t\t\t}\n\t\t\tbreak;\n\t\t\tcase 'F': /* Format */\n\t\t\tvar F_seen = 0;\n\t\t\tfor(rj=1; rj<record.length; ++rj) switch(record[rj].charAt(0)) {\n\t\t\t\tcase 'X': C = parseInt(record[rj].slice(1), 10)-1; ++F_seen; break;\n\t\t\t\tcase 'Y':\n\t\t\t\t\tR = parseInt(record[rj].slice(1), 10)-1; /*C = 0;*/\n\t\t\t\t\tfor(j = arr.length; j <= R; ++j) arr[j] = [];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'M': Mval = parseInt(record[rj].slice(1), 10) / 20; break;\n\t\t\t\tcase 'F': break; /* ??? */\n\t\t\t\tcase 'G': break; /* hide grid */\n\t\t\t\tcase 'P':\n\t\t\t\t\tnext_cell_format = formats[parseInt(record[rj].slice(1), 10)];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'S': break; /* cell style */\n\t\t\t\tcase 'D': break; /* column */\n\t\t\t\tcase 'N': break; /* font */\n\t\t\t\tcase 'W':\n\t\t\t\t\tcw = record[rj].slice(1).split(\" \");\n\t\t\t\t\tfor(j = parseInt(cw[0], 10); j <= parseInt(cw[1], 10); ++j) {\n\t\t\t\t\t\tMval = parseInt(cw[2], 10);\n\t\t\t\t\t\tcolinfo[j-1] = Mval === 0 ? {hidden:true}: {wch:Mval};\n\t\t\t\t\t} break;\n\t\t\t\tcase 'C': /* default column format */\n\t\t\t\t\tC = parseInt(record[rj].slice(1), 10)-1;\n\t\t\t\t\tif(!colinfo[C]) colinfo[C] = {};\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'R': /* row properties */\n\t\t\t\t\tR = parseInt(record[rj].slice(1), 10)-1;\n\t\t\t\t\tif(!rowinfo[R]) rowinfo[R] = {};\n\t\t\t\t\tif(Mval > 0) { rowinfo[R].hpt = Mval; rowinfo[R].hpx = pt2px(Mval); }\n\t\t\t\t\telse if(Mval === 0) rowinfo[R].hidden = true;\n\t\t\t\t\tbreak;\n\t\t\t\t// case 'K': // ??\n\t\t\t\t// case 'E': // ??\n\t\t\t\tdefault: if(opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n\t\t\t}\n\t\t\tif(F_seen < 1) next_cell_format = null; break;\n\t\t\tdefault: if(opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n\t\t\t}\n\t\t}\n\t\tif(rowinfo.length > 0) sht['!rows'] = rowinfo;\n\t\tif(colinfo.length > 0) sht['!cols'] = colinfo;\n\t\tcolinfo.forEach(function(col) { process_col(col); });\n\t\tif(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n\t\treturn [arr, sht, wb];\n\t}\n\n\tfunction sylk_to_workbook(d/*:RawData*/, opts)/*:Workbook*/ {\n\t\tvar aoasht = sylk_to_aoa(d, opts);\n\t\tvar aoa = aoasht[0], ws = aoasht[1], wb = aoasht[2];\n\t\tvar _opts = dup(opts); _opts.date1904 = (((wb||{}).Workbook || {}).WBProps || {}).date1904;\n\t\tvar o = aoa_to_sheet(aoa, _opts);\n\t\tkeys(ws).forEach(function(k) { o[k] = ws[k]; });\n\t\tvar outwb = sheet_to_workbook(o, opts);\n\t\tkeys(wb).forEach(function(k) { outwb[k] = wb[k]; });\n\t\toutwb.bookType = \"sylk\";\n\t\treturn outwb;\n\t}\n\n\tfunction write_ws_cell_sylk(cell/*:Cell*/, ws/*:Worksheet*/, R/*:number*/, C/*:number*/, opts, date1904/*:boolean*/)/*:string*/ {\n\t\tvar o = \"C;Y\" + (R+1) + \";X\" + (C+1) + \";K\";\n\t\tswitch(cell.t) {\n\t\t\tcase 'n':\n\t\t\t\to += (cell.v||0);\n\t\t\t\tif(cell.f && !cell.F) o += \";E\" + a1_to_rc(cell.f, {r:R, c:C}); break;\n\t\t\tcase 'b': o += cell.v ? \"TRUE\" : \"FALSE\"; break;\n\t\t\tcase 'e': o += cell.w || BErr[cell.v] || cell.v; break;\n\t\t\tcase 'd': o += datenum(parseDate(cell.v, date1904), date1904); break;\n\t\t\tcase 's': o += '\"' + (cell.v == null ? \"\" : String(cell.v)).replace(/\"/g,\"\").replace(/;/g, \";;\") + '\"'; break;\n\t\t}\n\t\treturn o;\n\t}\n\n\tfunction write_ws_cmnt_sylk(cmnt/*:Comment*/, R/*:number*/, C/*:number*/)/*:string*/ {\n\t\tvar o = \"C;Y\" + (R+1) + \";X\" + (C+1) + \";A\";\n\t\t/* TODO: max length? */\n\t\to += encode_sylk_str(cmnt.map(function(c) { return c.t; }).join(\"\"));\n\t\treturn o;\n\t}\n\n\tfunction write_ws_cols_sylk(out, cols) {\n\t\tcols.forEach(function(col, i) {\n\t\t\tvar rec = \"F;W\" + (i+1) + \" \" + (i+1) + \" \";\n\t\t\tif(col.hidden) rec += \"0\";\n\t\t\telse {\n\t\t\t\tif(typeof col.width == 'number' && !col.wpx) col.wpx = width2px(col.width);\n\t\t\t\tif(typeof col.wpx == 'number' && !col.wch) col.wch = px2char(col.wpx);\n\t\t\t\tif(typeof col.wch == 'number') rec += Math.round(col.wch);\n\t\t\t}\n\t\t\tif(rec.charAt(rec.length - 1) != \" \") out.push(rec);\n\t\t});\n\t}\n\n\tfunction write_ws_rows_sylk(out/*:Array<string>*/, rows/*:Array<RowInfo>*/) {\n\t\trows.forEach(function(row, i) {\n\t\t\tvar rec = \"F;\";\n\t\t\tif(row.hidden) rec += \"M0;\";\n\t\t\telse if(row.hpt) rec += \"M\" + 20 * row.hpt + \";\";\n\t\t\telse if(row.hpx) rec += \"M\" + 20 * px2pt(row.hpx) + \";\";\n\t\t\tif(rec.length > 2) out.push(rec + \"R\" + (i+1));\n\t\t});\n\t}\n\n\tfunction sheet_to_sylk(ws/*:Worksheet*/, opts/*:?any*/, wb/*:?WorkBook*/)/*:string*/ {\n\t\tif(!opts) opts = {}; opts._formats = [\"General\"];\n\t\t/* TODO: codepage */\n\t\tvar preamble/*:Array<string>*/ = [\"ID;PSheetJS;N;E\"], o/*:Array<string>*/ = [];\n\t\tvar r = safe_decode_range(ws['!ref']||\"A1\"), cell/*:Cell*/;\n\t\tvar dense = ws[\"!data\"] != null;\n\t\tvar RS = \"\\r\\n\";\n\t\tvar d1904 = (((wb||{}).Workbook||{}).WBProps||{}).date1904;\n\n\t\tvar _lastfmt = \"General\";\n\t\tpreamble.push(\"P;PGeneral\");\n\t\t/* Excel has been inconsistent in comment placement */\n\t\tvar R = r.s.r, C = r.s.c, p = [];\n\t\tif(ws[\"!ref\"]) for(R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tif(dense && !ws[\"!data\"][R]) continue;\n\t\t\tp = [];\n\t\t\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tcell = dense ? ws[\"!data\"][R][C] : ws[encode_col(C) + encode_row(R)];\n\t\t\t\tif(!cell || !cell.c) continue;\n\t\t\t\tp.push(write_ws_cmnt_sylk(cell.c, R, C));\n\t\t\t}\n\t\t\tif(p.length) o.push(p.join(RS));\n\t\t}\n\t\tif(ws[\"!ref\"]) for(R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tif(dense && !ws[\"!data\"][R]) continue;\n\t\t\tp = [];\n\t\t\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tcell = dense ? ws[\"!data\"][R][C] : ws[encode_col(C) + encode_row(R)];\n\t\t\t\tif(!cell || (cell.v == null && (!cell.f || cell.F))) continue;\n\t\t\t\tif((cell.z||(cell.t == \"d\" ? table_fmt[14] : \"General\")) != _lastfmt) {\n\t\t\t\t\tvar ifmt = opts._formats.indexOf(cell.z);\n\t\t\t\t\tif(ifmt == -1) { opts._formats.push(cell.z); ifmt = opts._formats.length - 1; preamble.push(\"P;P\" + cell.z.replace(/;/g, \";;\")); }\n\t\t\t\t\tp.push(\"F;P\" + ifmt + \";Y\" + (R+1) + \";X\" + (C+1));\n\t\t\t\t}\n\t\t\t\tp.push(write_ws_cell_sylk(cell, ws, R, C, opts, d1904));\n\t\t\t}\n\t\t\to.push(p.join(RS));\n\t\t}\n\n\t\tpreamble.push(\"F;P0;DG0G8;M255\");\n\t\tif(ws['!cols']) write_ws_cols_sylk(preamble, ws['!cols']);\n\t\tif(ws['!rows']) write_ws_rows_sylk(preamble, ws['!rows']);\n\n\t\tif(ws[\"!ref\"]) preamble.push(\"B;Y\" + (r.e.r - r.s.r + 1) + \";X\" + (r.e.c - r.s.c + 1) + \";D\" + [r.s.c,r.s.r,r.e.c,r.e.r].join(\" \"));\n\t\tpreamble.push(\"O;L;D;B\" + (d1904 ? \";V4\" : \"\") + \";K47;G100 0.001\");\n\n\t\tdelete opts._formats;\n\t\treturn preamble.join(RS) + RS + o.join(RS) + RS + \"E\" + RS;\n\t}\n\n\treturn {\n\t\tto_workbook: sylk_to_workbook,\n\t\tfrom_sheet: sheet_to_sylk\n\t};\n})();\n\nvar DIF = /*#__PURE__*/(function() {\n\tfunction dif_to_aoa(d/*:RawData*/, opts)/*:AOA*/ {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return dif_to_aoa_str(Base64_decode(d), opts);\n\t\t\tcase 'binary': return dif_to_aoa_str(d, opts);\n\t\t\tcase 'buffer': return dif_to_aoa_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts);\n\t\t\tcase 'array': return dif_to_aoa_str(cc2str(d), opts);\n\t\t}\n\t\tthrow new Error(\"Unrecognized type \" + opts.type);\n\t}\n\tfunction dif_to_aoa_str(str/*:string*/, opts)/*:AOA*/ {\n\t\tvar records = str.split('\\n'), R = -1, C = -1, ri = 0, arr/*:AOA*/ = [];\n\t\tfor (; ri !== records.length; ++ri) {\n\t\t\tif (records[ri].trim() === 'BOT') { arr[++R] = []; C = 0; continue; }\n\t\t\tif (R < 0) continue;\n\t\t\tvar metadata = records[ri].trim().split(\",\");\n\t\t\tvar type = metadata[0], value = metadata[1];\n\t\t\t++ri;\n\t\t\tvar data = records[ri] || \"\";\n\t\t\twhile(((data.match(/[\"]/g)||[]).length & 1) && ri < records.length - 1) data += \"\\n\" + records[++ri];\n\t\t\tdata = data.trim();\n\t\t\tswitch (+type) {\n\t\t\t\tcase -1:\n\t\t\t\t\tif (data === 'BOT') { arr[++R] = []; C = 0; continue; }\n\t\t\t\t\telse if (data !== 'EOD') throw new Error(\"Unrecognized DIF special command \" + data);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0:\n\t\t\t\t\tif(data === 'TRUE') arr[R][C] = true;\n\t\t\t\t\telse if(data === 'FALSE') arr[R][C] = false;\n\t\t\t\t\telse if(!isNaN(fuzzynum(value))) arr[R][C] = fuzzynum(value);\n\t\t\t\t\telse if(!isNaN(fuzzydate(value).getDate())) {\n\t\t\t\t\t\tarr[R][C] = parseDate(value);\n\t\t\t\t\t\tif(!(opts && opts.UTC)) { arr[R][C] = utc_to_local(arr[R][C]); }\n\t\t\t\t\t}\n\t\t\t\t\telse arr[R][C] = value;\n\t\t\t\t\t++C; break;\n\t\t\t\tcase 1:\n\t\t\t\t\tdata = data.slice(1,data.length-1);\n\t\t\t\t\tdata = data.replace(/\"\"/g, '\"');\n\t\t\t\t\tif(DIF_XL && data && data.match(/^=\".*\"$/)) data = data.slice(2, -1);\n\t\t\t\t\tarr[R][C++] = data !== '' ? data : null;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (data === 'EOD') break;\n\t\t}\n\t\tif(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n\t\treturn arr;\n\t}\n\n\tfunction dif_to_sheet(str/*:string*/, opts)/*:Worksheet*/ { return aoa_to_sheet(dif_to_aoa(str, opts), opts); }\n\tfunction dif_to_workbook(str/*:string*/, opts)/*:Workbook*/ {\n\t\tvar o = sheet_to_workbook(dif_to_sheet(str, opts), opts);\n\t\to.bookType = \"dif\";\n\t\treturn o;\n\t}\n\n\tfunction make_value(v/*:number*/, s/*:string*/)/*:string*/ { return \"0,\" + String(v) + \"\\r\\n\" + s; }\n\tfunction make_value_str(s/*:string*/)/*:string*/ { return \"1,0\\r\\n\\\"\" + s.replace(/\"/g,'\"\"') + '\"'; }\n\tfunction sheet_to_dif(ws/*:Worksheet*//*::, opts:?any*/)/*:string*/ {\n\t\tvar _DIF_XL = DIF_XL;\n\t\tif(!ws[\"!ref\"]) throw new Error(\"Cannot export empty sheet to DIF\");\n\t\tvar r = safe_decode_range(ws['!ref']);\n\t\tvar dense = ws[\"!data\"] != null;\n\t\tvar o/*:Array<string>*/ = [\n\t\t\t\"TABLE\\r\\n0,1\\r\\n\\\"sheetjs\\\"\\r\\n\",\n\t\t\t\"VECTORS\\r\\n0,\" + (r.e.r - r.s.r + 1) + \"\\r\\n\\\"\\\"\\r\\n\",\n\t\t\t\"TUPLES\\r\\n0,\" + (r.e.c - r.s.c + 1) + \"\\r\\n\\\"\\\"\\r\\n\",\n\t\t\t\"DATA\\r\\n0,0\\r\\n\\\"\\\"\\r\\n\"\n\t\t];\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tvar row = dense ? ws[\"!data\"][R] : [];\n\t\t\tvar p = \"-1,0\\r\\nBOT\\r\\n\";\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tvar cell/*:Cell*/ = dense ? (row && row[C]) : ws[encode_cell({r:R,c:C})];\n\t\t\t\tif(cell == null) { p +=(\"1,0\\r\\n\\\"\\\"\\r\\n\"); continue;}\n\t\t\t\tswitch(cell.t) {\n\t\t\t\t\tcase 'n':\n\t\t\t\t\t\tif(_DIF_XL) {\n\t\t\t\t\t\t\tif(cell.w != null) p +=(\"0,\" + cell.w + \"\\r\\nV\");\n\t\t\t\t\t\t\telse if(cell.v != null) p +=(make_value(cell.v, \"V\")); // TODO: should this call SSF_format?\n\t\t\t\t\t\t\telse if(cell.f != null && !cell.F) p +=(make_value_str(\"=\" + cell.f));\n\t\t\t\t\t\t\telse p +=(\"1,0\\r\\n\\\"\\\"\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif(cell.v == null) p +=(\"1,0\\r\\n\\\"\\\"\");\n\t\t\t\t\t\t\telse p +=(make_value(cell.v, \"V\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\tp +=(cell.v ? make_value(1, \"TRUE\") : make_value(0, \"FALSE\"));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 's':\n\t\t\t\t\t\tp +=(make_value_str((!_DIF_XL || isNaN(+cell.v)) ? cell.v : '=\"' + cell.v + '\"'));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\tif(!cell.w) cell.w = SSF_format(cell.z || table_fmt[14], datenum(parseDate(cell.v)));\n\t\t\t\t\t\tif(_DIF_XL) p +=(make_value(cell.w, \"V\"));\n\t\t\t\t\t\telse p +=(make_value_str(cell.w));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault: p +=(\"1,0\\r\\n\\\"\\\"\");\n\t\t\t\t}\n\t\t\t\tp += \"\\r\\n\";\n\t\t\t}\n\t\t\to.push(p);\n\t\t}\n\t\treturn o.join(\"\") + \"-1,0\\r\\nEOD\";\n\t}\n\treturn {\n\t\tto_workbook: dif_to_workbook,\n\t\tto_sheet: dif_to_sheet,\n\t\tfrom_sheet: sheet_to_dif\n\t};\n})();\n\nvar ETH = /*#__PURE__*/(function() {\n\tfunction decode(s/*:string*/)/*:string*/ { return s.replace(/\\\\b/g,\"\\\\\").replace(/\\\\c/g,\":\").replace(/\\\\n/g,\"\\n\"); }\n\tfunction encode(s/*:string*/)/*:string*/ { return s.replace(/\\\\/g, \"\\\\b\").replace(/:/g, \"\\\\c\").replace(/\\n/g,\"\\\\n\"); }\n\n\tfunction eth_to_aoa(str/*:string*/, opts)/*:AOA*/ {\n\t\tvar records = str.split('\\n'), R = -1, C = -1, ri = 0, arr/*:AOA*/ = [];\n\t\tfor (; ri !== records.length; ++ri) {\n\t\t\tvar record = records[ri].trim().split(\":\");\n\t\t\tif(record[0] !== 'cell') continue;\n\t\t\tvar addr = decode_cell(record[1]);\n\t\t\tif(arr.length <= addr.r) for(R = arr.length; R <= addr.r; ++R) if(!arr[R]) arr[R] = [];\n\t\t\tR = addr.r; C = addr.c;\n\t\t\tswitch(record[2]) {\n\t\t\t\tcase 't': arr[R][C] = decode(record[3]); break;\n\t\t\t\tcase 'v': arr[R][C] = +record[3]; break;\n\t\t\t\tcase 'vtf': var _f = record[record.length - 1];\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 'vtc':\n\t\t\t\t\tswitch(record[3]) {\n\t\t\t\t\t\tcase 'nl': arr[R][C] = +record[4] ? true : false; break;\n\t\t\t\t\t\tdefault: arr[R][C] = +record[4]; break;\n\t\t\t\t\t}\n\t\t\t\t\tif(record[2] == 'vtf') arr[R][C] = [arr[R][C], _f];\n\t\t\t}\n\t\t}\n\t\tif(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n\t\treturn arr;\n\t}\n\n\tfunction eth_to_sheet(d/*:string*/, opts)/*:Worksheet*/ { return aoa_to_sheet(eth_to_aoa(d, opts), opts); }\n\tfunction eth_to_workbook(d/*:string*/, opts)/*:Workbook*/ { return sheet_to_workbook(eth_to_sheet(d, opts), opts); }\n\n\tvar header = [\n\t\t\"socialcalc:version:1.5\",\n\t\t\"MIME-Version: 1.0\",\n\t\t\"Content-Type: multipart/mixed; boundary=SocialCalcSpreadsheetControlSave\"\n\t].join(\"\\n\");\n\n\tvar sep = [\n\t\t\"--SocialCalcSpreadsheetControlSave\",\n\t\t\"Content-type: text/plain; charset=UTF-8\"\n\t].join(\"\\n\") + \"\\n\";\n\n\t/* TODO: the other parts */\n\tvar meta = [\n\t\t\"# SocialCalc Spreadsheet Control Save\",\n\t\t\"part:sheet\"\n\t].join(\"\\n\");\n\n\tvar end = \"--SocialCalcSpreadsheetControlSave--\";\n\n\tfunction sheet_to_eth_data(ws/*:Worksheet*/)/*:string*/ {\n\t\tif(!ws || !ws['!ref']) return \"\";\n\t\tvar o/*:Array<string>*/ = [], oo/*:Array<string>*/ = [], cell, coord = \"\";\n\t\tvar r = decode_range(ws['!ref']);\n\t\tvar dense = ws[\"!data\"] != null;\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tcoord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[\"!data\"][R]||[])[C] : ws[coord];\n\t\t\t\tif(!cell || cell.v == null || cell.t === 'z') continue;\n\t\t\t\too = [\"cell\", coord, 't'];\n\t\t\t\tswitch(cell.t) {\n\t\t\t\t\tcase 's': case 'str': oo.push(encode(cell.v)); break;\n\t\t\t\t\tcase 'n':\n\t\t\t\t\t\tif(!cell.f) { oo[2]='v'; oo[3]=cell.v; }\n\t\t\t\t\t\telse { oo[2]='vtf'; oo[3]='n'; oo[4]=cell.v; oo[5]=encode(cell.f); }\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\too[2] = 'vt'+(cell.f?'f':'c'); oo[3]='nl'; oo[4]=cell.v?\"1\":\"0\";\n\t\t\t\t\t\too[5] = encode(cell.f||(cell.v?'TRUE':'FALSE'));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\tvar t = datenum(parseDate(cell.v));\n\t\t\t\t\t\too[2] = 'vtc'; oo[3] = 'nd'; oo[4] = \"\"+t;\n\t\t\t\t\t\too[5] = cell.w || SSF_format(cell.z || table_fmt[14], t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'e': continue;\n\t\t\t\t}\n\t\t\t\to.push(oo.join(\":\"));\n\t\t\t}\n\t\t}\n\t\to.push(\"sheet:c:\" + (r.e.c-r.s.c+1) + \":r:\" + (r.e.r-r.s.r+1) + \":tvf:1\");\n\t\to.push(\"valueformat:1:text-wiki\");\n\t\t//o.push(\"copiedfrom:\" + ws['!ref']); // clipboard only\n\t\treturn o.join(\"\\n\");\n\t}\n\n\tfunction sheet_to_eth(ws/*:Worksheet*//*::, opts:?any*/)/*:string*/ {\n\t\treturn [header, sep, meta, sep, sheet_to_eth_data(ws), end].join(\"\\n\");\n\t\t// return [\"version:1.5\", sheet_to_eth_data(ws)].join(\"\\n\"); // clipboard form\n\t}\n\n\treturn {\n\t\tto_workbook: eth_to_workbook,\n\t\tto_sheet: eth_to_sheet,\n\t\tfrom_sheet: sheet_to_eth\n\t};\n})();\n\nvar PRN = /*#__PURE__*/(function() {\n\tfunction set_text_arr(data/*:string*/, arr/*:AOA*/, R/*:number*/, C/*:number*/, o/*:any*/) {\n\t\tif(o.raw) arr[R][C] = data;\n\t\telse if(data === \"\"){/* empty */}\n\t\telse if(data === 'TRUE') arr[R][C] = true;\n\t\telse if(data === 'FALSE') arr[R][C] = false;\n\t\telse if(!isNaN(fuzzynum(data))) arr[R][C] = fuzzynum(data);\n\t\telse if(!isNaN(fuzzydate(data).getDate())) arr[R][C] = parseDate(data);\n\t\telse arr[R][C] = data;\n\t}\n\n\tfunction prn_to_aoa_str(f/*:string*/, opts)/*:AOA*/ {\n\t\tvar o = opts || {};\n\t\tvar arr/*:AOA*/ = ([]/*:any*/);\n\t\tif(!f || f.length === 0) return arr;\n\t\tvar lines = f.split(/[\\r\\n]/);\n\t\tvar L = lines.length - 1;\n\t\twhile(L >= 0 && lines[L].length === 0) --L;\n\t\tvar start = 10, idx = 0;\n\t\tvar R = 0;\n\t\tfor(; R <= L; ++R) {\n\t\t\tidx = lines[R].indexOf(\" \");\n\t\t\tif(idx == -1) idx = lines[R].length; else idx++;\n\t\t\tstart = Math.max(start, idx);\n\t\t}\n\t\tfor(R = 0; R <= L; ++R) {\n\t\t\tarr[R] = [];\n\t\t\t/* TODO: confirm that widths are always 10 */\n\t\t\tvar C = 0;\n\t\t\tset_text_arr(lines[R].slice(0, start).trim(), arr, R, C, o);\n\t\t\tfor(C = 1; C <= (lines[R].length - start)/10 + 1; ++C)\n\t\t\t\tset_text_arr(lines[R].slice(start+(C-1)*10,start+C*10).trim(),arr,R,C,o);\n\t\t}\n\t\tif(o.sheetRows) arr = arr.slice(0, o.sheetRows);\n\t\treturn arr;\n\t}\n\n\t// List of accepted CSV separators\n\tvar guess_seps = {\n\t\t0x2C: ',',\n\t\t0x09: \"\\t\",\n\t\t0x3B: ';',\n\t\t0x7C: '|'\n\t};\n\n\t// CSV separator weights to be used in case of equal numbers\n\tvar guess_sep_weights = {\n\t\t0x2C: 3,\n\t\t0x09: 2,\n\t\t0x3B: 1,\n\t\t0x7C: 0\n\t};\n\n\tfunction guess_sep(str) {\n\t\tvar cnt = {}, instr = false, end = 0, cc = 0;\n\t\tfor(;end < str.length;++end) {\n\t\t\tif((cc=str.charCodeAt(end)) == 0x22) instr = !instr;\n\t\t\telse if(!instr && cc in guess_seps) cnt[cc] = (cnt[cc]||0)+1;\n\t\t}\n\n\t\tcc = [];\n\t\tfor(end in cnt) if ( Object.prototype.hasOwnProperty.call(cnt, end) ) {\n\t\t\tcc.push([ cnt[end], end ]);\n\t\t}\n\n\t\tif ( !cc.length ) {\n\t\t\tcnt = guess_sep_weights;\n\t\t\tfor(end in cnt) if ( Object.prototype.hasOwnProperty.call(cnt, end) ) {\n\t\t\t\tcc.push([ cnt[end], end ]);\n\t\t\t}\n\t\t}\n\n\t\tcc.sort(function(a, b) { return a[0] - b[0] || guess_sep_weights[a[1]] - guess_sep_weights[b[1]]; });\n\n\t\treturn guess_seps[cc.pop()[1]] || 0x2C;\n\t}\n\n\tfunction dsv_to_sheet_str(str/*:string*/, opts)/*:Worksheet*/ {\n\t\tvar o = opts || {};\n\t\tvar sep = \"\";\n\t\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\t\tvar ws/*:Worksheet*/ = ({}/*:any*/);\n\t\tif(o.dense) ws[\"!data\"] = [];\n\t\tvar range/*:Range*/ = ({s: {c:0, r:0}, e: {c:0, r:0}}/*:any*/);\n\n\t\tif(str.slice(0,4) == \"sep=\") {\n\t\t\t// If the line ends in \\r\\n\n\t\t\tif(str.charCodeAt(5) == 13 && str.charCodeAt(6) == 10 ) {\n\t\t\t\tsep = str.charAt(4); str = str.slice(7);\n\t\t\t}\n\t\t\t// If line ends in \\r OR \\n\n\t\t\telse if(str.charCodeAt(5) == 13 || str.charCodeAt(5) == 10 ) {\n\t\t\t\tsep = str.charAt(4); str = str.slice(6);\n\t\t\t}\n\t\t\telse sep = guess_sep(str.slice(0,1024));\n\t\t}\n\t\telse if(o && o.FS) sep = o.FS;\n\t\telse sep = guess_sep(str.slice(0,1024));\n\t\tvar R = 0, C = 0, v = 0;\n\t\tvar start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc=0, startcc=str.charCodeAt(0);\n\t\tvar _re/*:?RegExp*/ = o.dateNF != null ? dateNF_regex(o.dateNF) : null;\n\t\tfunction finish_cell() {\n\t\t\t/* TODO: fuzzy parsers should pass back assumed number format */\n\t\t\tvar s = str.slice(start, end); if(s.slice(-1) == \"\\r\") s = s.slice(0, -1);\n\t\t\tvar cell = ({}/*:any*/);\n\t\t\tif(s.charAt(0) == '\"' && s.charAt(s.length - 1) == '\"') s = s.slice(1,-1).replace(/\"\"/g,'\"');\n\t\t\tif(o.cellText !== false) cell.w = s;\n\t\t\tif(s.length === 0) cell.t = 'z';\n\t\t\telse if(o.raw) { cell.t = 's'; cell.v = s; }\n\t\t\telse if(s.trim().length === 0) { cell.t = 's'; cell.v = s; }\n\t\t\telse if(s.charCodeAt(0) == 0x3D) {\n\t\t\t\tif(s.charCodeAt(1) == 0x22 && s.charCodeAt(s.length - 1) == 0x22) { cell.t = 's'; cell.v = s.slice(2,-1).replace(/\"\"/g,'\"'); }\n\t\t\t\telse if(fuzzyfmla(s)) { cell.t = 's'; cell.f = s.slice(1); cell.v = s; }\n\t\t\t\telse { cell.t = 's'; cell.v = s; } }\n\t\t\telse if(s == \"TRUE\") { cell.t = 'b'; cell.v = true; }\n\t\t\telse if(s == \"FALSE\") { cell.t = 'b'; cell.v = false; }\n\t\t\telse if(!isNaN(v = fuzzynum(s))) { cell.t = 'n'; cell.v = v; }\n\t\t\telse if(!isNaN((v = fuzzydate(s)).getDate()) || _re && s.match(_re)) {\n\t\t\t\tcell.z = o.dateNF || table_fmt[14];\n\t\t\t\tif(_re && s.match(_re)){ var news=dateNF_fix(s, o.dateNF, (s.match(_re)||[])); v = parseDate(news); if(o && o.UTC === false) v = utc_to_local(v); }\n\t\t\t\telse if(o && o.UTC === false) v = utc_to_local(v);\n\t\t\t\telse if(o.cellText !== false && o.dateNF) cell.w = SSF_format(cell.z, v);\n\t\t\t\tif(o.cellDates) { cell.t = 'd'; cell.v = v; }\n\t\t\t\telse { cell.t = 'n'; cell.v = datenum(v); }\n\t\t\t\tif(!o.cellNF) delete cell.z;\n\t\t\t} else {\n\t\t\t\tcell.t = 's';\n\t\t\t\tcell.v = s;\n\t\t\t}\n\t\t\tif(cell.t == 'z'){}\n\t\t\telse if(o.dense) { if(!ws[\"!data\"][R]) ws[\"!data\"][R] = []; ws[\"!data\"][R][C] = cell; }\n\t\t\telse ws[encode_cell({c:C,r:R})] = cell;\n\t\t\tstart = end+1; startcc = str.charCodeAt(start);\n\t\t\tif(range.e.c < C) range.e.c = C;\n\t\t\tif(range.e.r < R) range.e.r = R;\n\t\t\tif(cc == sepcc) ++C; else { C = 0; ++R; if(o.sheetRows && o.sheetRows <= R) return true; }\n\t\t}\n\t\touter: for(;end < str.length;++end) switch((cc=str.charCodeAt(end))) {\n\t\t\tcase 0x22: if(startcc === 0x22) instr = !instr; break;\n\t\t\tcase 0x0d:\n\t\t\t\tif(instr) break;\n\t\t\t\tif(str.charCodeAt(end+1) == 0x0a) ++end;\n\t\t\t\t/* falls through */\n\t\t\tcase sepcc: case 0x0a: if(!instr && finish_cell()) break outer; break;\n\t\t\tdefault: break;\n\t\t}\n\t\tif(end - start > 0) finish_cell();\n\n\t\tws['!ref'] = encode_range(range);\n\t\treturn ws;\n\t}\n\n\tfunction prn_to_sheet_str(str/*:string*/, opts)/*:Worksheet*/ {\n\t\tif(!(opts && opts.PRN)) return dsv_to_sheet_str(str, opts);\n\t\tif(opts.FS) return dsv_to_sheet_str(str, opts);\n\t\tif(str.slice(0,4) == \"sep=\") return dsv_to_sheet_str(str, opts);\n\t\tif(str.indexOf(\"\\t\") >= 0 || str.indexOf(\",\") >= 0 || str.indexOf(\";\") >= 0) return dsv_to_sheet_str(str, opts);\n\t\treturn aoa_to_sheet(prn_to_aoa_str(str, opts), opts);\n\t}\n\n\tfunction prn_to_sheet(d/*:RawData*/, opts)/*:Worksheet*/ {\n\t\tvar str = \"\", bytes = opts.type == 'string' ? [0,0,0,0] : firstbyte(d, opts);\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': str = Base64_decode(d); break;\n\t\t\tcase 'binary': str = d; break;\n\t\t\tcase 'buffer':\n\t\t\t\tif(opts.codepage == 65001) str = d.toString('utf8'); // TODO: test if buf\n\t\t\t\telse if(opts.codepage && typeof $cptable !== 'undefined') str = $cptable.utils.decode(opts.codepage, d);\n\t\t\t\telse str = has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d);\n\t\t\t\tbreak;\n\t\t\tcase 'array': str = cc2str(d); break;\n\t\t\tcase 'string': str = d; break;\n\t\t\tdefault: throw new Error(\"Unrecognized type \" + opts.type);\n\t\t}\n\t\tif(bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str.slice(3));\n\t\telse if(opts.type != 'string' && opts.type != 'buffer' && opts.codepage == 65001) str = utf8read(str);\n\t\telse if((opts.type == 'binary') && typeof $cptable !== 'undefined' && opts.codepage)  str = $cptable.utils.decode(opts.codepage, $cptable.utils.encode(28591,str));\n\t\tif(str.slice(0,19) == \"socialcalc:version:\") return ETH.to_sheet(opts.type == 'string' ? str : utf8read(str), opts);\n\t\treturn prn_to_sheet_str(str, opts);\n\t}\n\n\tfunction prn_to_workbook(d/*:RawData*/, opts)/*:Workbook*/ { return sheet_to_workbook(prn_to_sheet(d, opts), opts); }\n\n\tfunction sheet_to_prn(ws/*:Worksheet*//*::, opts:?any*/)/*:string*/ {\n\t\tvar o/*:Array<string>*/ = [];\n\t\tif(!ws[\"!ref\"]) return \"\";\n\t\tvar r = safe_decode_range(ws['!ref']), cell/*:Cell*/;\n\t\tvar dense = ws[\"!data\"] != null;\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tvar oo/*:Array<string>*/ = [];\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[\"!data\"][R]||[])[C] : ws[coord];\n\t\t\t\tif(!cell || cell.v == null) { oo.push(\"          \"); continue; }\n\t\t\t\tvar w = (cell.w || (format_cell(cell), cell.w) || \"\").slice(0,10);\n\t\t\t\twhile(w.length < 10) w += \" \";\n\t\t\t\too.push(w + (C === 0 ? \" \" : \"\"));\n\t\t\t}\n\t\t\to.push(oo.join(\"\"));\n\t\t}\n\t\treturn o.join(\"\\n\");\n\t}\n\n\treturn {\n\t\tto_workbook: prn_to_workbook,\n\t\tto_sheet: prn_to_sheet,\n\t\tfrom_sheet: sheet_to_prn\n\t};\n})();\n\n/* Excel defaults to SYLK but warns if data is not valid */\nfunction read_wb_ID(d, opts) {\n\tvar o = opts || {}, OLD_WTF = !!o.WTF; o.WTF = true;\n\ttry {\n\t\tvar out = SYLK.to_workbook(d, o);\n\t\to.WTF = OLD_WTF;\n\t\treturn out;\n\t} catch(e) {\n\t\to.WTF = OLD_WTF;\n\t\tif((e.message.indexOf(\"SYLK bad record ID\") == -1) && OLD_WTF) throw e;\n\t\treturn PRN.to_workbook(d, opts);\n\t}\n}\n\nvar WK_ = /*#__PURE__*/(function() {\n\tfunction lotushopper(data, cb/*:RecordHopperCB*/, opts/*:any*/) {\n\t\tif(!data) return;\n\t\tprep_blob(data, data.l || 0);\n\t\tvar Enum = opts.Enum || WK1Enum;\n\t\twhile(data.l < data.length) {\n\t\t\tvar RT = data.read_shift(2);\n\t\t\tvar R = Enum[RT] || Enum[0xFFFF];\n\t\t\tvar length = data.read_shift(2);\n\t\t\tvar tgt = data.l + length;\n\t\t\tvar d = R.f && R.f(data, length, opts);\n\t\t\tdata.l = tgt;\n\t\t\tif(cb(d, R, RT)) return;\n\t\t}\n\t}\n\n\tfunction lotus_to_workbook(d/*:RawData*/, opts) {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return lotus_to_workbook_buf(s2a(Base64_decode(d)), opts);\n\t\t\tcase 'binary': return lotus_to_workbook_buf(s2a(d), opts);\n\t\t\tcase 'buffer':\n\t\t\tcase 'array': return lotus_to_workbook_buf(d, opts);\n\t\t}\n\t\tthrow \"Unsupported type \" + opts.type;\n\t}\n\n\t/* NOTE: this list intentionally starts at 1 */\n\tvar LOTUS_DATE_FMTS = [\n\t\t\"mmmm\",\n\t\t\"dd-mmm-yyyy\",\n\t\t\"dd-mmm\",\n\t\t\"mmm-yyyy\",\n\t\t\"@\", // \"text\"?\n\t\t\"mm/dd\",\n\t\t\"hh:mm:ss AM/PM\", // 7\n\t\t\"hh:mm AM/PM\",\n\t\t\"mm/dd/yyyy\",\n\t\t\"mm/dd\",\n\t\t\"hh:mm:ss\",\n\t\t\"hh:mm\" // 12\n\t];\n\n\tfunction lotus_to_workbook_buf(d, opts)/*:Workbook*/ {\n\t\tif(!d) return d;\n\t\tvar o = opts || {};\n\t\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\t\tvar s/*:Worksheet*/ = ({}/*:any*/), n = \"Sheet1\", next_n = \"\", sidx = 0;\n\t\tvar sheets = {}, snames = [], realnames = [], sdata = [];\n\t\tif(o.dense) sdata = s[\"!data\"] = [];\n\n\t\tvar refguess = {s: {r:0, c:0}, e: {r:0, c:0} };\n\t\tvar sheetRows = o.sheetRows || 0;\n\t\tvar lastcell = {};\n\n\t\tif(d[4] == 0x51 && d[5] == 0x50 && d[6] == 0x57) return qpw_to_workbook_buf(d, opts);\n\t\tif(d[2] == 0x00) {\n\t\t\tif(d[3] == 0x08 || d[3] == 0x09) {\n\t\t\t\tif(d.length >= 16 && d[14] == 0x05 && d[15] === 0x6c) throw new Error(\"Unsupported Works 3 for Mac file\");\n\t\t\t}\n\t\t}\n\n\t\tif(d[2] == 0x02) {\n\t\t\to.Enum = WK1Enum;\n\t\t\tlotushopper(d, function(val, R, RT) { switch(RT) {\n\t\t\t\tcase 0x00: /* BOF */\n\t\t\t\t\to.vers = val;\n\t\t\t\t\tif(val >= 0x1000) o.qpro = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0xFF: /* BOF (works 3+) */\n\t\t\t\t\to.vers = val;\n\t\t\t\t\to.works = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x06: refguess = val; break; /* RANGE */\n\t\t\t\tcase 0xCC: if(val) next_n = val; break; /* SHEETNAMECS */\n\t\t\t\tcase 0xDE: next_n = val; break; /* SHEETNAMELP */\n\t\t\t\tcase 0x0F: /* LABEL */\n\t\t\t\tcase 0x33: /* STRING */\n\t\t\t\t\tif((!o.qpro && !o.works || RT == 0x33) && val[1].v.charCodeAt(0) < 0x30) val[1].v = val[1].v.slice(1);\n\t\t\t\t\tif(o.works || o.works2) val[1].v = val[1].v.replace(/\\r\\n/g, \"\\n\");\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 0x0D: /* INTEGER */\n\t\t\t\tcase 0x0E: /* NUMBER */\n\t\t\t\tcase 0x10: /* FORMULA */\n\t\t\t\t\t/* TODO: actual translation of the format code */\n\t\t\t\t\tif((val[2] & 0x70) == 0x70 && (val[2] & 0x0F) > 1 && (val[2] & 0x0F) < 15) {\n\t\t\t\t\t\tval[1].z = o.dateNF || LOTUS_DATE_FMTS[(val[2] & 0x0F)-1] || table_fmt[14];\n\t\t\t\t\t\tif(o.cellDates) { val[1].v = numdate(val[1].v); val[1].t = typeof val[1].v == \"number\" ? 'n' : 'd'; }\n\t\t\t\t\t}\n\n\t\t\t\t\tif(o.qpro) {\n\t\t\t\t\t\tif(val[3] > sidx) {\n\t\t\t\t\t\t\ts[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\t\t\tsheets[n] = s;\n\t\t\t\t\t\t\tsnames.push(n);\n\t\t\t\t\t\t\ts = ({}/*:any*/); if(o.dense) sdata = s[\"!data\"] = [];\n\t\t\t\t\t\t\trefguess = {s: {r:0, c:0}, e: {r:0, c:0} };\n\t\t\t\t\t\t\tsidx = val[3]; n = next_n || \"Sheet\" + (sidx + 1); next_n = \"\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tvar tmpcell = o.dense ? (sdata[val[0].r]||[])[val[0].c] : s[encode_cell(val[0])];\n\t\t\t\t\tif(tmpcell) {\n\t\t\t\t\t\ttmpcell.t = val[1].t; tmpcell.v = val[1].v;\n\t\t\t\t\t\tif(val[1].z != null) tmpcell.z = val[1].z;\n\t\t\t\t\t\tif(val[1].f != null) tmpcell.f = val[1].f;\n\t\t\t\t\t\tlastcell = tmpcell;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif(o.dense) {\n\t\t\t\t\t\tif(!sdata[val[0].r]) sdata[val[0].r] = [];\n\t\t\t\t\t\tsdata[val[0].r][val[0].c] = val[1];\n\t\t\t\t\t} else s[encode_cell(val[0])] = val[1];\n\t\t\t\t\tlastcell = val[1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x5405: o.works2 = true; break;\n\t\t\t\tcase 0x5402: {\n\t\t\t\t\t/* TODO: enumerate all extended number formats */\n\t\t\t\t\tif(val == 0x14a1) {\n\t\t\t\t\t\tlastcell.z = \"hh:mm:ss\";\n\t\t\t\t\t\tif(o.cellDates && lastcell.t == \"n\") {\n\t\t\t\t\t\t\tlastcell.v = numdate(lastcell.v); lastcell.t = typeof lastcell.v == \"number\" ? 'n' : 'd';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t}}, o);\n\t\t} else if(d[2] == 0x1A || d[2] == 0x0E) {\n\t\t\to.Enum = WK3Enum;\n\t\t\tif(d[2] == 0x0E) { o.qpro = true; d.l = 0; }\n\t\t\tlotushopper(d, function(val, R, RT) { switch(RT) {\n\t\t\t\tcase 0xCC: n = val; break; /* SHEETNAMECS */\n\t\t\t\tcase 0x16: /* LABEL16 */\n\t\t\t\t\tif(val[1].v.charCodeAt(0) < 0x30) val[1].v = val[1].v.slice(1);\n\t\t\t\t\t// TODO: R9 appears to encode control codes this way -- verify against other versions\n\t\t\t\t\tval[1].v = val[1].v.replace(/\\x0F./g, function($$) { return String.fromCharCode($$.charCodeAt(1) - 0x20); }).replace(/\\r\\n/g, \"\\n\");\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 0x17: /* NUMBER17 */\n\t\t\t\tcase 0x18: /* NUMBER18 */\n\t\t\t\tcase 0x19: /* FORMULA19 */\n\t\t\t\tcase 0x25: /* NUMBER25 */\n\t\t\t\tcase 0x27: /* NUMBER27 */\n\t\t\t\tcase 0x28: /* FORMULA28 */\n\t\t\t\t\tif(val[3] > sidx) {\n\t\t\t\t\t\ts[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\t\tsheets[n] = s;\n\t\t\t\t\t\tsnames.push(n);\n\t\t\t\t\t\ts = ({}/*:any*/); if(o.dense) sdata = s[\"!data\"] = [];\n\t\t\t\t\t\trefguess = {s: {r:0, c:0}, e: {r:0, c:0} };\n\t\t\t\t\t\tsidx = val[3]; n = \"Sheet\" + (sidx + 1);\n\t\t\t\t\t}\n\t\t\t\t\tif(sheetRows > 0 && val[0].r >= sheetRows) break;\n\t\t\t\t\tif(o.dense) {\n\t\t\t\t\t\tif(!sdata[val[0].r]) sdata[val[0].r] = [];\n\t\t\t\t\t\tsdata[val[0].r][val[0].c] = val[1];\n\t\t\t\t\t} else s[encode_cell(val[0])] = val[1];\n\t\t\t\t\tif(refguess.e.c < val[0].c) refguess.e.c = val[0].c;\n\t\t\t\t\tif(refguess.e.r < val[0].r) refguess.e.r = val[0].r;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x1B: /* XFORMAT */\n\t\t\t\t\tif(val[0x36b0]) realnames[val[0x36b0][0]] = val[0x36b0][1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0601: /* SHEETINFOQP */\n\t\t\t\t\trealnames[val[0]] = val[1]; if(val[0] == sidx) n = val[1]; break;\n\t\t\t\tdefault: break;\n\t\t\t}}, o);\n\t\t} else throw new Error(\"Unrecognized LOTUS BOF \" + d[2]);\n\t\ts[\"!ref\"] = encode_range(refguess);\n\t\tsheets[next_n || n] = s;\n\t\tsnames.push(next_n || n);\n\t\tif(!realnames.length) return { SheetNames: snames, Sheets: sheets };\n\t\tvar osheets = {}, rnames = [];\n\t\t/* TODO: verify no collisions */\n\t\tfor(var i = 0; i < realnames.length; ++i) if(sheets[snames[i]]) {\n\t\t\trnames.push(realnames[i] || snames[i]);\n\t\t\tosheets[realnames[i]] = sheets[realnames[i]] || sheets[snames[i]];\n\t\t} else {\n\t\t\trnames.push(realnames[i]);\n\t\t\tosheets[realnames[i]] = ({ \"!ref\": \"A1\" });\n\t\t}\n\t\treturn { SheetNames: rnames, Sheets: osheets };\n\t}\n\n\tfunction sheet_to_wk1(ws/*:Worksheet*/, opts/*:WriteOpts*/) {\n\t\tvar o = opts || {};\n\t\tif(+o.codepage >= 0) set_cp(+o.codepage);\n\t\tif(o.type == \"string\") throw new Error(\"Cannot write WK1 to JS string\");\n\t\tvar ba = buf_array();\n\t\tif(!ws[\"!ref\"]) throw new Error(\"Cannot export empty sheet to WK1\");\n\t\tvar range = safe_decode_range(ws[\"!ref\"]);\n\t\tvar dense = ws[\"!data\"] != null;\n\t\tvar cols = [];\n\n\t\twrite_biff_rec(ba, 0x00, write_BOF_WK1(0x0406));\n\t\twrite_biff_rec(ba, 0x06, write_RANGE(range));\n\t\tvar max_R = Math.min(range.e.r, 8191);\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);\n\t\tfor(var R = range.s.r; R <= max_R; ++R) {\n\t\t\tvar rr = encode_row(R);\n\t\t\tfor(C = range.s.c; C <= range.e.c; ++C) {\n\t\t\t\tvar cell = dense ? (ws[\"!data\"][R]||[])[C] : ws[cols[C] + rr];\n\t\t\t\tif(!cell || cell.t == \"z\") continue;\n\t\t\t\t/* TODO: formula records */\n\t\t\t\tswitch(cell.t) {\n\t\t\t\tcase \"n\":\n\t\t\t\t\tif((cell.v|0)==cell.v && cell.v >= -32768 && cell.v <= 32767) write_biff_rec(ba, 0x0d, write_INTEGER(R, C, cell));\n\t\t\t\t\telse write_biff_rec(ba, 0x0e, write_NUMBER(R, C, cell));\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"d\":\n\t\t\t\t\tvar dc = datenum(cell.v);\n\t\t\t\t\tif((dc|0)==dc && dc >= -32768 && dc <= 32767) write_biff_rec(ba, 0x0d, write_INTEGER(R, C, {t:\"n\", v:dc, z:cell.z || table_fmt[14]}));\n\t\t\t\t\telse write_biff_rec(ba, 0x0e, write_NUMBER(R, C, {t:\"n\", v:dc, z:cell.z || table_fmt[14]}));\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tvar str = format_cell(cell);\n\t\t\t\t\twrite_biff_rec(ba, 0x0F, write_LABEL(R, C, str.slice(0, 239)));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\twrite_biff_rec(ba, 0x01);\n\t\treturn ba.end();\n\t}\n\n\tfunction book_to_wk3(wb/*:Workbook*/, opts/*:WriteOpts*/) {\n\t\tvar o = opts || {};\n\t\tif(+o.codepage >= 0) set_cp(+o.codepage);\n\t\tif(o.type == \"string\") throw new Error(\"Cannot write WK3 to JS string\");\n\t\tvar ba = buf_array();\n\n\t\twrite_biff_rec(ba, 0x00, write_BOF_WK3(wb));\n\n\t\tfor(var i = 0, cnt = 0; i < wb.SheetNames.length; ++i) if((wb.Sheets[wb.SheetNames[i]] || {})[\"!ref\"]) write_biff_rec(ba, 0x1b, write_XFORMAT_SHEETNAME(wb.SheetNames[i], cnt++));\n\n\t\tvar wsidx = 0;\n\t\tfor(i = 0; i < wb.SheetNames.length; ++i) {\n\t\t\tvar ws = wb.Sheets[wb.SheetNames[i]];\n\t\t\tif(!ws || !ws[\"!ref\"]) continue;\n\t\t\tvar range = safe_decode_range(ws[\"!ref\"]);\n\t\t\tvar dense = ws[\"!data\"] != null;\n\t\t\tvar cols = [];\n\t\t\tvar max_R = Math.min(range.e.r, 8191);\n\t\t\tfor(var R = range.s.r; R <= max_R; ++R) {\n\t\t\t\tvar rr = encode_row(R);\n\t\t\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\t\t\tvar ref = cols[C] + rr;\n\t\t\t\t\tvar cell = dense ? (ws[\"!data\"][R]||[])[C] : ws[ref];\n\t\t\t\t\tif(!cell || cell.t == \"z\") continue;\n\t\t\t\t\t/* TODO: FORMULA19 NUMBER18 records */\n\t\t\t\t\tif(cell.t == \"n\") {\n\t\t\t\t\t\twrite_biff_rec(ba, 0x17, write_NUMBER_17(R, C, wsidx, cell.v));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar str = format_cell(cell);\n\t\t\t\t\t\t/* TODO: max len? */\n\t\t\t\t\t\twrite_biff_rec(ba, 0x16, write_LABEL_16(R, C, wsidx, str.slice(0, 239)));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t++wsidx;\n\t\t}\n\n\t\twrite_biff_rec(ba, 0x01);\n\t\treturn ba.end();\n\t}\n\n\n\tfunction write_BOF_WK1(v/*:number*/) {\n\t\tvar out = new_buf(2);\n\t\tout.write_shift(2, v);\n\t\treturn out;\n\t}\n\n\tfunction write_BOF_WK3(wb/*:Workbook*/) {\n\t\tvar out = new_buf(26);\n\t\tout.write_shift(2, 0x1000);\n\t\tout.write_shift(2, 0x0004);\n\t\tout.write_shift(4, 0x0000);\n\t\tvar rows = 0, cols = 0, wscnt = 0;\n\t\tfor(var i = 0; i < wb.SheetNames.length; ++i) {\n\t\t\tvar name = wb.SheetNames[i];\n\t\t\tvar ws = wb.Sheets[name];\n\t\t\tif(!ws || !ws[\"!ref\"]) continue;\n\t\t\t++wscnt;\n\t\t\tvar range = decode_range(ws[\"!ref\"]);\n\t\t\tif(rows < range.e.r) rows = range.e.r;\n\t\t\tif(cols < range.e.c) cols = range.e.c;\n\t\t}\n\t\tif(rows > 8191) rows = 8191;\n\t\tout.write_shift(2, rows);\n\t\tout.write_shift(1, wscnt);\n\t\tout.write_shift(1, cols);\n\t\tout.write_shift(2, 0x00);\n\t\tout.write_shift(2, 0x00);\n\t\tout.write_shift(1, 0x01);\n\t\tout.write_shift(1, 0x02);\n\t\tout.write_shift(4, 0);\n\t\tout.write_shift(4, 0);\n\t\treturn out;\n\t}\n\n\tfunction parse_RANGE(blob, length, opts) {\n\t\tvar o = {s:{c:0,r:0},e:{c:0,r:0}};\n\t\tif(length == 8 && opts.qpro) {\n\t\t\to.s.c = blob.read_shift(1);\n\t\t\tblob.l++;\n\t\t\to.s.r = blob.read_shift(2);\n\t\t\to.e.c = blob.read_shift(1);\n\t\t\tblob.l++;\n\t\t\to.e.r = blob.read_shift(2);\n\t\t\treturn o;\n\t\t}\n\t\to.s.c = blob.read_shift(2);\n\t\to.s.r = blob.read_shift(2);\n\t\tif(length == 12 && opts.qpro) blob.l += 2;\n\t\to.e.c = blob.read_shift(2);\n\t\to.e.r = blob.read_shift(2);\n\t\tif(length == 12 && opts.qpro) blob.l += 2;\n\t\tif(o.s.c == 0xFFFF) o.s.c = o.e.c = o.s.r = o.e.r = 0;\n\t\treturn o;\n\t}\n\tfunction write_RANGE(range) {\n\t\tvar out = new_buf(8);\n\t\tout.write_shift(2, range.s.c);\n\t\tout.write_shift(2, range.s.r);\n\t\tout.write_shift(2, range.e.c);\n\t\tout.write_shift(2, range.e.r);\n\t\treturn out;\n\t}\n\n\tfunction parse_cell(blob, length, opts) {\n\t\tvar o = [{c:0,r:0}, {t:'n',v:0}, 0, 0];\n\t\tif(opts.qpro && opts.vers != 0x5120) {\n\t\t\to[0].c = blob.read_shift(1);\n\t\t\to[3] = blob.read_shift(1);\n\t\t\to[0].r = blob.read_shift(2);\n\t\t\tblob.l+=2;\n\t\t} else if(opts.works) { // TODO: verify with more complex works3-4 examples\n\t\t\to[0].c = blob.read_shift(2); o[0].r = blob.read_shift(2);\n\t\t\to[2] = blob.read_shift(2);\n\t\t} else {\n\t\t\to[2] = blob.read_shift(1);\n\t\t\to[0].c = blob.read_shift(2); o[0].r = blob.read_shift(2);\n\t\t}\n\t\treturn o;\n\t}\n\n\tfunction get_wk1_fmt(cell)/*:number*/ {\n\t\t/* TODO: some fuzzy matching on the number format */\n\t\tif(cell.z && fmt_is_date(cell.z)) {\n\t\t\treturn 0xf0 | (LOTUS_DATE_FMTS.indexOf(cell.z) + 1 || 2);\n\t\t}\n\t\treturn 0xFF;\n\t}\n\tfunction parse_LABEL(blob, length, opts) {\n\t\tvar tgt = blob.l + length;\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].t = 's';\n\t\tif((opts.vers & 0xFFFE) == 0x5120) { // WQ1 / WQ2\n\t\t\tblob.l++;\n\t\t\tvar len = blob.read_shift(1);\n\t\t\to[1].v = blob.read_shift(len, 'utf8');\n\t\t\treturn o;\n\t\t}\n\t\tif(opts.qpro) blob.l++;\n\t\to[1].v = blob.read_shift(tgt - blob.l, 'cstr');\n\t\treturn o;\n\t}\n\tfunction write_LABEL(R, C, s) {\n\t\t/* TODO: encoding */\n\t\tvar o = new_buf(7 + s.length);\n\t\to.write_shift(1, 0xFF);\n\t\to.write_shift(2, C);\n\t\to.write_shift(2, R);\n\t\to.write_shift(1, 0x27); // ??\n\t\tfor(var i = 0; i < o.length; ++i) {\n\t\t\tvar cc = s.charCodeAt(i);\n\t\t\to.write_shift(1, cc >= 0x80 ? 0x5F : cc);\n\t\t}\n\t\to.write_shift(1, 0);\n\t\treturn o;\n\t}\n\tfunction parse_STRING(blob, length, opts) {\n\t\tvar tgt = blob.l + length;\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].t = 's';\n\t\tif(opts.vers == 0x5120) {\n\t\t\tvar len = blob.read_shift(1);\n\t\t\to[1].v = blob.read_shift(len, 'utf8');\n\t\t\treturn o;\n\t\t}\n\t\to[1].v = blob.read_shift(tgt - blob.l, 'cstr');\n\t\treturn o;\n\t}\n\n\tfunction parse_INTEGER(blob, length, opts) {\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].v = blob.read_shift(2, 'i');\n\t\treturn o;\n\t}\n\tfunction write_INTEGER(R, C, cell) {\n\t\tvar o = new_buf(7);\n\t\to.write_shift(1, get_wk1_fmt(cell));\n\t\to.write_shift(2, C);\n\t\to.write_shift(2, R);\n\t\to.write_shift(2, cell.v, 'i');\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER(blob, length, opts) {\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].v = blob.read_shift(8, 'f');\n\t\treturn o;\n\t}\n\tfunction write_NUMBER(R, C, cell) {\n\t\tvar o = new_buf(13);\n\t\to.write_shift(1, get_wk1_fmt(cell));\n\t\to.write_shift(2, C);\n\t\to.write_shift(2, R);\n\t\to.write_shift(8, cell.v, 'f');\n\t\treturn o;\n\t}\n\n\tfunction parse_FORMULA(blob, length, opts) {\n\t\tvar tgt = blob.l + length;\n\t\tvar o = parse_cell(blob, length, opts);\n\t\t/* TODO: formula */\n\t\to[1].v = blob.read_shift(8, 'f');\n\t\tif(opts.qpro) blob.l = tgt;\n\t\telse {\n\t\t\tvar flen = blob.read_shift(2);\n\t\t\twk1_fmla_to_csf(blob.slice(blob.l, blob.l + flen), o);\n\t\t\tblob.l += flen;\n\t\t}\n\t\treturn o;\n\t}\n\n\tfunction wk1_parse_rc(B, V, col) {\n\t\tvar rel = V & 0x8000;\n\t\tV &= ~0x8000;\n\t\tV = (rel ? B : 0) + ((V >= 0x2000) ? V - 0x4000 : V);\n\t\treturn (rel ? \"\" : \"$\") + (col ? encode_col(V) : encode_row(V));\n\t}\n\t/* var oprec = [\n\t\t8, 8, 8, 8, 8, 8, 8, 8, 6, 4, 4, 5, 5, 7, 3, 3,\n\t\t3, 3, 3, 3, 1, 1, 2, 6, 8, 8, 8, 8, 8, 8, 8, 8\n\t]; */\n\t/* TODO: flesh out */\n\tvar FuncTab = {\n\t\t0x1F: [\"NA\", 0],\n\t\t// 0x20: [\"ERR\", 0],\n\t\t0x21: [\"ABS\", 1],\n\t\t0x22: [\"TRUNC\", 1],\n\t\t0x23: [\"SQRT\", 1],\n\t\t0x24: [\"LOG\", 1],\n\t\t0x25: [\"LN\", 1],\n\t\t0x26: [\"PI\", 0],\n\t\t0x27: [\"SIN\", 1],\n\t\t0x28: [\"COS\", 1],\n\t\t0x29: [\"TAN\", 1],\n\t\t0x2A: [\"ATAN2\", 2],\n\t\t0x2B: [\"ATAN\", 1],\n\t\t0x2C: [\"ASIN\", 1],\n\t\t0x2D: [\"ACOS\", 1],\n\t\t0x2E: [\"EXP\", 1],\n\t\t0x2F: [\"MOD\", 2],\n\t\t// 0x30\n\t\t0x31: [\"ISNA\", 1],\n\t\t0x32: [\"ISERR\", 1],\n\t\t0x33: [\"FALSE\", 0],\n\t\t0x34: [\"TRUE\", 0],\n\t\t0x35: [\"RAND\", 0],\n\t\t0x36: [\"DATE\", 3],\n\t\t// 0x37 NOW\n\t\t// 0x38 PMT\n\t\t// 0x39 PV\n\t\t// 0x3A FV\n\t\t// 0x3B IF\n\t\t// 0x3C DAY\n\t\t// 0x3D MONTH\n\t\t// 0x3E YEAR\n\t\t0x3F: [\"ROUND\", 2],\n\t\t0x40: [\"TIME\", 3],\n\t\t// 0x41 HOUR\n\t\t// 0x42 MINUTE\n\t\t// 0x43 SECOND\n\t\t0x44: [\"ISNUMBER\", 1],\n\t\t0x45: [\"ISTEXT\", 1],\n\t\t0x46: [\"LEN\", 1],\n\t\t0x47: [\"VALUE\", 1],\n\t\t// 0x48: [\"FIXED\", ?? 1],\n\t\t0x49: [\"MID\", 3],\n\t\t0x4A: [\"CHAR\", 1],\n\t\t// 0x4B\n\t\t// 0x4C FIND\n\t\t// 0x4D DATEVALUE\n\t\t// 0x4E TIMEVALUE\n\t\t// 0x4F CELL\n\t\t0x50: [\"SUM\", 69],\n\t\t0x51: [\"AVERAGEA\", 69],\n\t\t0x52: [\"COUNTA\", 69],\n\t\t0x53: [\"MINA\", 69],\n\t\t0x54: [\"MAXA\", 69],\n\t\t// 0x55 VLOOKUP\n\t\t// 0x56 NPV\n\t\t// 0x57 VAR\n\t\t// 0x58 STD\n\t\t// 0x59 IRR\n\t\t// 0x5A HLOOKUP\n\t\t// 0x5B DSUM\n\t\t// 0x5C DAVERAGE\n\t\t// 0x5D DCOUNTA\n\t\t// 0x5E DMIN\n\t\t// 0x5F DMAX\n\t\t// 0x60 DVARP\n\t\t// 0x61 DSTDEVP\n\t\t// 0x62 INDEX\n\t\t// 0x63 COLS\n\t\t// 0x64 ROWS\n\t\t// 0x65 REPEAT\n\t\t0x66: [\"UPPER\", 1],\n\t\t0x67: [\"LOWER\", 1],\n\t\t// 0x68 LEFT\n\t\t// 0x69 RIGHT\n\t\t// 0x6A REPLACE\n\t\t0x6B: [\"PROPER\", 1],\n\t\t// 0x6C CELL\n\t\t0x6D: [\"TRIM\", 1],\n\t\t// 0x6E CLEAN\n\t\t0x6F: [\"T\", 1]\n\t\t// 0x70 V\n\t};\n\tvar BinOpTab = [\n\t\t  \"\",   \"\",   \"\",   \"\",   \"\",   \"\",   \"\",   \"\", // eslint-disable-line no-mixed-spaces-and-tabs\n\t\t  \"\",  \"+\",  \"-\",  \"*\",  \"/\",  \"^\",  \"=\", \"<>\", // eslint-disable-line no-mixed-spaces-and-tabs\n\t\t\"<=\", \">=\",  \"<\",  \">\",   \"\",   \"\",   \"\",   \"\", // eslint-disable-line no-mixed-spaces-and-tabs\n\t\t \"&\",   \"\",   \"\",   \"\",   \"\",   \"\",   \"\",   \"\"  // eslint-disable-line no-mixed-spaces-and-tabs\n\t];\n\n\tfunction wk1_fmla_to_csf(blob, o) {\n\t\tprep_blob(blob, 0);\n\t\tvar out = [], argc = 0, R = \"\", C = \"\", argL = \"\", argR = \"\";\n\t\twhile(blob.l < blob.length) {\n\t\t\tvar cc = blob[blob.l++];\n\t\t\tswitch(cc) {\n\t\t\t\tcase 0x00: out.push(blob.read_shift(8, 'f')); break;\n\t\t\t\tcase 0x01: {\n\t\t\t\t\tC = wk1_parse_rc(o[0].c, blob.read_shift(2), true);\n\t\t\t\t\tR = wk1_parse_rc(o[0].r, blob.read_shift(2), false);\n\t\t\t\t\tout.push(C + R);\n\t\t\t\t} break;\n\t\t\t\tcase 0x02: {\n\t\t\t\t\tvar c = wk1_parse_rc(o[0].c, blob.read_shift(2), true);\n\t\t\t\t\tvar r = wk1_parse_rc(o[0].r, blob.read_shift(2), false);\n\t\t\t\t\tC = wk1_parse_rc(o[0].c, blob.read_shift(2), true);\n\t\t\t\t\tR = wk1_parse_rc(o[0].r, blob.read_shift(2), false);\n\t\t\t\t\tout.push(c + r + \":\" + C + R);\n\t\t\t\t} break;\n\t\t\t\tcase 0x03:\n\t\t\t\t\tif(blob.l < blob.length) { console.error(\"WK1 premature formula end\"); return; }\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x04: out.push(\"(\" + out.pop() + \")\"); break;\n\t\t\t\tcase 0x05: out.push(blob.read_shift(2)); break;\n\t\t\t\tcase 0x06: {\n\t\t\t\t\t/* TODO: text encoding */\n\t\t\t\t\tvar Z = \"\"; while((cc = blob[blob.l++])) Z += String.fromCharCode(cc);\n\t\t\t\t\tout.push('\"' + Z.replace(/\"/g, '\"\"') + '\"');\n\t\t\t\t} break;\n\n\t\t\t\tcase 0x08: out.push(\"-\" + out.pop()); break;\n\t\t\t\tcase 0x17: out.push(\"+\" + out.pop()); break;\n\t\t\t\tcase 0x16: out.push(\"NOT(\" + out.pop() + \")\"); break;\n\n\t\t\t\tcase 0x14: case 0x15: {\n\t\t\t\t\targR = out.pop(); argL = out.pop();\n\t\t\t\t\tout.push([\"AND\", \"OR\"][cc - 0x14] + \"(\" + argL + \",\" + argR + \")\");\n\t\t\t\t} break;\n\n\t\t\t\tdefault:\n\t\t\t\t\tif(cc < 0x20 && BinOpTab[cc]) {\n\t\t\t\t\t\targR = out.pop(); argL = out.pop();\n\t\t\t\t\t\tout.push(argL + BinOpTab[cc] + argR);\n\t\t\t\t\t} else if(FuncTab[cc]) {\n\t\t\t\t\t\targc = FuncTab[cc][1];\n\t\t\t\t\t\tif(argc == 69) argc = blob[blob.l++];\n\t\t\t\t\t\tif(argc > out.length) { console.error(\"WK1 bad formula parse 0x\" + cc.toString(16) + \":|\" + out.join(\"|\") + \"|\"); return; }\n\t\t\t\t\t\tvar args = out.slice(-argc);\n\t\t\t\t\t\tout.length -= argc;\n\t\t\t\t\t\tout.push(FuncTab[cc][0] + \"(\" + args.join(\",\") + \")\");\n\t\t\t\t\t}\n\t\t\t\t\telse if(cc <= 0x07) return console.error(\"WK1 invalid opcode \" + cc.toString(16));\n\t\t\t\t\telse if(cc <= 0x18) return console.error(\"WK1 unsupported op \" + cc.toString(16));\n\t\t\t\t\telse if(cc <= 0x1E) return console.error(\"WK1 invalid opcode \" + cc.toString(16));\n\t\t\t\t\telse if(cc <= 0x73) return console.error(\"WK1 unsupported function opcode \" + cc.toString(16));\n\t\t\t\t\t// possible future functions ??\n\t\t\t\t\telse return console.error(\"WK1 unrecognized opcode \" + cc.toString(16));\n\t\t\t}\n\t\t}\n\t\tif(out.length == 1) o[1].f = \"\" + out[0];\n\t\telse console.error(\"WK1 bad formula parse |\" + out.join(\"|\") + \"|\");\n\t}\n\n\n\tfunction parse_cell_3(blob/*::, length*/) {\n\t\tvar o = [{c:0,r:0}, {t:'n',v:0}, 0];\n\t\to[0].r = blob.read_shift(2); o[3] = blob[blob.l++]; o[0].c = blob[blob.l++];\n\t\treturn o;\n\t}\n\n\tfunction parse_LABEL_16(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\to[1].t = 's';\n\t\to[1].v = blob.read_shift(length - 4, 'cstr');\n\t\treturn o;\n\t}\n\tfunction write_LABEL_16(R, C, wsidx, s) {\n\t\t/* TODO: encoding */\n\t\tvar o = new_buf(6 + s.length);\n\t\to.write_shift(2, R);\n\t\to.write_shift(1, wsidx);\n\t\to.write_shift(1, C);\n\t\to.write_shift(1, 0x27);\n\t\tfor(var i = 0; i < s.length; ++i) {\n\t\t\tvar cc = s.charCodeAt(i);\n\t\t\to.write_shift(1, cc >= 0x80 ? 0x5F : cc);\n\t\t}\n\t\to.write_shift(1, 0);\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_18(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\to[1].v = blob.read_shift(2);\n\t\tvar v = o[1].v >> 1;\n\t\tif(o[1].v & 0x1) {\n\t\t\tswitch(v & 0x07) {\n\t\t\t\tcase 0: v = (v >> 3) * 5000; break;\n\t\t\t\tcase 1: v = (v >> 3) * 500; break;\n\t\t\t\tcase 2: v = (v >> 3) / 20; break;\n\t\t\t\tcase 3: v = (v >> 3) / 200; break;\n\t\t\t\tcase 4: v = (v >> 3) / 2000; break;\n\t\t\t\tcase 5: v = (v >> 3) / 20000; break;\n\t\t\t\tcase 6: v = (v >> 3) / 16; break;\n\t\t\t\tcase 7: v = (v >> 3) / 64; break;\n\t\t\t}\n\t\t}\n\t\to[1].v = v;\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_17(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\tvar v1 = blob.read_shift(4);\n\t\tvar v2 = blob.read_shift(4);\n\t\tvar e = blob.read_shift(2);\n\t\tif(e == 0xFFFF) {\n\t\t\tif(v1 === 0 && v2 === 0xC0000000) { o[1].t = \"e\"; o[1].v = 0x0F; } // ERR -> #VALUE!\n\t\t\telse if(v1 === 0 && v2 === 0xD0000000) { o[1].t = \"e\"; o[1].v = 0x2A; } // NA -> #N/A\n\t\t\telse o[1].v = 0;\n\t\t\treturn o;\n\t\t}\n\t\tvar s = e & 0x8000; e = (e&0x7FFF) - 16446;\n\t\to[1].v = (1 - s*2) * (v2 * Math.pow(2, e+32) + v1 * Math.pow(2, e));\n\t\treturn o;\n\t}\n\tfunction write_NUMBER_17(R, C, wsidx, v) {\n\t\tvar o = new_buf(14);\n\t\to.write_shift(2, R);\n\t\to.write_shift(1, wsidx);\n\t\to.write_shift(1, C);\n\t\tif(v == 0) {\n\t\t\to.write_shift(4, 0);\n\t\t\to.write_shift(4, 0);\n\t\t\to.write_shift(2, 0xFFFF);\n\t\t\treturn o;\n\t\t}\n\t\tvar s = 0, e = 0, v1 = 0, v2 = 0;\n\t\tif(v < 0) { s = 1; v = -v; }\n\t\te = Math.log2(v) | 0;\n\t\tv /= Math.pow(2, e-31);\n\t\tv2 = (v)>>>0;\n\t\tif((v2&0x80000000) == 0) { v/=2; ++e; v2 = v >>> 0; }\n\t\tv -= v2;\n\t\tv2 |= 0x80000000;\n\t\tv2 >>>= 0;\n\t\tv *= Math.pow(2, 32);\n\t\tv1 = v>>>0;\n\t\to.write_shift(4, v1);\n\t\to.write_shift(4, v2);\n\t\te += 0x3FFF + (s ? 0x8000 : 0);\n\t\to.write_shift(2, e);\n\t\treturn o;\n\t}\n\n\tfunction parse_FORMULA_19(blob, length) {\n\t\tvar o = parse_NUMBER_17(blob, 14);\n\t\tblob.l += length - 14; /* TODO: WK3 formula */\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_25(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\tvar v1 = blob.read_shift(4);\n\t\to[1].v = v1 >> 6;\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_27(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\tvar v1 = blob.read_shift(8,'f');\n\t\to[1].v = v1;\n\t\treturn o;\n\t}\n\n\tfunction parse_FORMULA_28(blob, length) {\n\t\tvar o = parse_NUMBER_27(blob, 12);\n\t\tblob.l += length - 12; /* TODO: formula */\n\t\treturn o;\n\t}\n\n\tfunction parse_SHEETNAMECS(blob, length) {\n\t\treturn blob[blob.l + length - 1] == 0 ? blob.read_shift(length, 'cstr') : \"\";\n\t}\n\n\tfunction parse_SHEETNAMELP(blob, length) {\n\t\tvar len = blob[blob.l++];\n\t\tif(len > length - 1) len = length - 1;\n\t\tvar o = \"\"; while(o.length < len) o += String.fromCharCode(blob[blob.l++]);\n\t\treturn o;\n\t}\n\n\tfunction parse_SHEETINFOQP(blob, length, opts) {\n\t\tif(!opts.qpro || length < 21) return;\n\t\tvar id = blob.read_shift(1);\n\t\tblob.l += 17;\n\t\tblob.l += 1; //var len = blob.read_shift(1);\n\t\tblob.l += 2;\n\t\tvar nm = blob.read_shift(length - 21, 'cstr');\n\t\treturn [id, nm];\n\t}\n\n\tfunction parse_XFORMAT(blob, length) {\n\t\tvar o = {}, tgt = blob.l + length;\n\t\twhile(blob.l < tgt) {\n\t\t\tvar dt = blob.read_shift(2);\n\t\t\tif(dt == 0x36b0) {\n\t\t\t\to[dt] = [0, \"\"];\n\t\t\t\to[dt][0] = blob.read_shift(2);\n\t\t\t\twhile(blob[blob.l]) { o[dt][1] += String.fromCharCode(blob[blob.l]); blob.l++; } blob.l++;\n\t\t\t}\n\t\t\t// TODO: 0x3a99 ??\n\t\t}\n\t\treturn o;\n\t}\n\tfunction write_XFORMAT_SHEETNAME(name, wsidx) {\n\t\tvar out = new_buf(5 + name.length);\n\t\tout.write_shift(2, 0x36b0);\n\t\tout.write_shift(2, wsidx);\n\t\tfor(var i = 0; i < name.length; ++i) {\n\t\t\tvar cc = name.charCodeAt(i);\n\t\t\tout[out.l++] = cc > 0x7F ? 0x5F : cc;\n\t\t}\n\t\tout[out.l++] = 0;\n\t\treturn out;\n\t}\n\n\tvar WK1Enum = {\n\t\t0x0000: { n:\"BOF\", f:parseuint16 },\n\t\t0x0001: { n:\"EOF\" },\n\t\t0x0002: { n:\"CALCMODE\" },\n\t\t0x0003: { n:\"CALCORDER\" },\n\t\t0x0004: { n:\"SPLIT\" },\n\t\t0x0005: { n:\"SYNC\" },\n\t\t0x0006: { n:\"RANGE\", f:parse_RANGE },\n\t\t0x0007: { n:\"WINDOW1\" },\n\t\t0x0008: { n:\"COLW1\" },\n\t\t0x0009: { n:\"WINTWO\" },\n\t\t0x000A: { n:\"COLW2\" },\n\t\t0x000B: { n:\"NAME\" },\n\t\t0x000C: { n:\"BLANK\" },\n\t\t0x000D: { n:\"INTEGER\", f:parse_INTEGER },\n\t\t0x000E: { n:\"NUMBER\", f:parse_NUMBER },\n\t\t0x000F: { n:\"LABEL\", f:parse_LABEL },\n\t\t0x0010: { n:\"FORMULA\", f:parse_FORMULA },\n\t\t0x0018: { n:\"TABLE\" },\n\t\t0x0019: { n:\"ORANGE\" },\n\t\t0x001A: { n:\"PRANGE\" },\n\t\t0x001B: { n:\"SRANGE\" },\n\t\t0x001C: { n:\"FRANGE\" },\n\t\t0x001D: { n:\"KRANGE1\" },\n\t\t0x0020: { n:\"HRANGE\" },\n\t\t0x0023: { n:\"KRANGE2\" },\n\t\t0x0024: { n:\"PROTEC\" },\n\t\t0x0025: { n:\"FOOTER\" },\n\t\t0x0026: { n:\"HEADER\" },\n\t\t0x0027: { n:\"SETUP\" },\n\t\t0x0028: { n:\"MARGINS\" },\n\t\t0x0029: { n:\"LABELFMT\" },\n\t\t0x002A: { n:\"TITLES\" },\n\t\t0x002B: { n:\"SHEETJS\" },\n\t\t0x002D: { n:\"GRAPH\" },\n\t\t0x002E: { n:\"NGRAPH\" },\n\t\t0x002F: { n:\"CALCCOUNT\" },\n\t\t0x0030: { n:\"UNFORMATTED\" },\n\t\t0x0031: { n:\"CURSORW12\" },\n\t\t0x0032: { n:\"WINDOW\" },\n\t\t0x0033: { n:\"STRING\", f:parse_STRING },\n\t\t0x0037: { n:\"PASSWORD\" },\n\t\t0x0038: { n:\"LOCKED\" },\n\t\t0x003C: { n:\"QUERY\" },\n\t\t0x003D: { n:\"QUERYNAME\" },\n\t\t0x003E: { n:\"PRINT\" },\n\t\t0x003F: { n:\"PRINTNAME\" },\n\t\t0x0040: { n:\"GRAPH2\" },\n\t\t0x0041: { n:\"GRAPHNAME\" },\n\t\t0x0042: { n:\"ZOOM\" },\n\t\t0x0043: { n:\"SYMSPLIT\" },\n\t\t0x0044: { n:\"NSROWS\" },\n\t\t0x0045: { n:\"NSCOLS\" },\n\t\t0x0046: { n:\"RULER\" },\n\t\t0x0047: { n:\"NNAME\" },\n\t\t0x0048: { n:\"ACOMM\" },\n\t\t0x0049: { n:\"AMACRO\" },\n\t\t0x004A: { n:\"PARSE\" },\n\t\t// 0x0064\n\t\t0x0066: { n:\"PRANGES??\" },\n\t\t0x0067: { n:\"RRANGES??\" },\n\t\t0x0068: { n:\"FNAME??\" },\n\t\t0x0069: { n:\"MRANGES??\" },\n\t\t// 0x0096\n\t\t// 0x0099\n\t\t// 0x009A\n\t\t// 0x009B\n\t\t// 0x009C\n\t\t// 0x00C0\n\t\t// 0x00C7\n\t\t// 0x00C9\n\t\t0x00CC: { n:\"SHEETNAMECS\", f:parse_SHEETNAMECS },\n\t\t// 0x00CD\n\t\t0x00DE: { n:\"SHEETNAMELP\", f:parse_SHEETNAMELP },\n\t\t0x00FF: { n:\"BOF\", f:parseuint16 },\n\t\t0x5402: { n:\"WKSNF\", f:parseuint16 },\n\t\t0xFFFF: { n:\"\" }\n\t};\n\n\tvar WK3Enum = {\n\t\t0x0000: { n:\"BOF\" },\n\t\t0x0001: { n:\"EOF\" },\n\t\t0x0002: { n:\"PASSWORD\" },\n\t\t0x0003: { n:\"CALCSET\" },\n\t\t0x0004: { n:\"WINDOWSET\" },\n\t\t0x0005: { n:\"SHEETCELLPTR\" },\n\t\t0x0006: { n:\"SHEETLAYOUT\" },\n\t\t0x0007: { n:\"COLUMNWIDTH\" },\n\t\t0x0008: { n:\"HIDDENCOLUMN\" },\n\t\t0x0009: { n:\"USERRANGE\" },\n\t\t0x000A: { n:\"SYSTEMRANGE\" },\n\t\t0x000B: { n:\"ZEROFORCE\" },\n\t\t0x000C: { n:\"SORTKEYDIR\" },\n\t\t0x000D: { n:\"FILESEAL\" },\n\t\t0x000E: { n:\"DATAFILLNUMS\" },\n\t\t0x000F: { n:\"PRINTMAIN\" },\n\t\t0x0010: { n:\"PRINTSTRING\" },\n\t\t0x0011: { n:\"GRAPHMAIN\" },\n\t\t0x0012: { n:\"GRAPHSTRING\" },\n\t\t0x0013: { n:\"??\" },\n\t\t0x0014: { n:\"ERRCELL\" },\n\t\t0x0015: { n:\"NACELL\" },\n\t\t0x0016: { n:\"LABEL16\", f:parse_LABEL_16},\n\t\t0x0017: { n:\"NUMBER17\", f:parse_NUMBER_17 },\n\t\t0x0018: { n:\"NUMBER18\", f:parse_NUMBER_18 },\n\t\t0x0019: { n:\"FORMULA19\", f:parse_FORMULA_19},\n\t\t0x001A: { n:\"FORMULA1A\" },\n\t\t0x001B: { n:\"XFORMAT\", f:parse_XFORMAT },\n\t\t0x001C: { n:\"DTLABELMISC\" },\n\t\t0x001D: { n:\"DTLABELCELL\" },\n\t\t0x001E: { n:\"GRAPHWINDOW\" },\n\t\t0x001F: { n:\"CPA\" },\n\t\t0x0020: { n:\"LPLAUTO\" },\n\t\t0x0021: { n:\"QUERY\" },\n\t\t0x0022: { n:\"HIDDENSHEET\" },\n\t\t0x0023: { n:\"??\" },\n\t\t0x0025: { n:\"NUMBER25\", f:parse_NUMBER_25 },\n\t\t0x0026: { n:\"??\" },\n\t\t0x0027: { n:\"NUMBER27\", f:parse_NUMBER_27 },\n\t\t0x0028: { n:\"FORMULA28\", f:parse_FORMULA_28 },\n\t\t0x008E: { n:\"??\" },\n\t\t0x0093: { n:\"??\" },\n\t\t0x0096: { n:\"??\" },\n\t\t0x0097: { n:\"??\" },\n\t\t0x0098: { n:\"??\" },\n\t\t0x0099: { n:\"??\" },\n\t\t0x009A: { n:\"??\" },\n\t\t0x009B: { n:\"??\" },\n\t\t0x009C: { n:\"??\" },\n\t\t0x00A3: { n:\"??\" },\n\t\t0x00AE: { n:\"??\" },\n\t\t0x00AF: { n:\"??\" },\n\t\t0x00B0: { n:\"??\" },\n\t\t0x00B1: { n:\"??\" },\n\t\t0x00B8: { n:\"??\" },\n\t\t0x00B9: { n:\"??\" },\n\t\t0x00BA: { n:\"??\" },\n\t\t0x00BB: { n:\"??\" },\n\t\t0x00BC: { n:\"??\" },\n\t\t0x00C3: { n:\"??\" },\n\t\t0x00C9: { n:\"??\" },\n\t\t0x00CC: { n:\"SHEETNAMECS\", f:parse_SHEETNAMECS },\n\t\t0x00CD: { n:\"??\" },\n\t\t0x00CE: { n:\"??\" },\n\t\t0x00CF: { n:\"??\" },\n\t\t0x00D0: { n:\"??\" },\n\t\t0x0100: { n:\"??\" },\n\t\t0x0103: { n:\"??\" },\n\t\t0x0104: { n:\"??\" },\n\t\t0x0105: { n:\"??\" },\n\t\t0x0106: { n:\"??\" },\n\t\t0x0107: { n:\"??\" },\n\t\t0x0109: { n:\"??\" },\n\t\t0x010A: { n:\"??\" },\n\t\t0x010B: { n:\"??\" },\n\t\t0x010C: { n:\"??\" },\n\t\t0x010E: { n:\"??\" },\n\t\t0x010F: { n:\"??\" },\n\t\t0x0180: { n:\"??\" },\n\t\t0x0185: { n:\"??\" },\n\t\t0x0186: { n:\"??\" },\n\t\t0x0189: { n:\"??\" },\n\t\t0x018C: { n:\"??\" },\n\t\t0x0200: { n:\"??\" },\n\t\t0x0202: { n:\"??\" },\n\t\t0x0201: { n:\"??\" },\n\t\t0x0204: { n:\"??\" },\n\t\t0x0205: { n:\"??\" },\n\t\t0x0280: { n:\"??\" },\n\t\t0x0281: { n:\"??\" },\n\t\t0x0282: { n:\"??\" },\n\t\t0x0283: { n:\"??\" },\n\t\t0x0284: { n:\"??\" },\n\t\t0x0285: { n:\"??\" },\n\t\t0x0286: { n:\"??\" },\n\t\t0x0287: { n:\"??\" },\n\t\t0x0288: { n:\"??\" },\n\t\t0x0292: { n:\"??\" },\n\t\t0x0293: { n:\"??\" },\n\t\t0x0294: { n:\"??\" },\n\t\t0x0295: { n:\"??\" },\n\t\t0x0296: { n:\"??\" },\n\t\t0x0299: { n:\"??\" },\n\t\t0x029A: { n:\"??\" },\n\t\t0x0300: { n:\"??\" },\n\t\t0x0304: { n:\"??\" },\n\t\t0x0601: { n:\"SHEETINFOQP\", f:parse_SHEETINFOQP },\n\t\t0x0640: { n:\"??\" },\n\t\t0x0642: { n:\"??\" },\n\t\t0x0701: { n:\"??\" },\n\t\t0x0702: { n:\"??\" },\n\t\t0x0703: { n:\"??\" },\n\t\t0x0704: { n:\"??\" },\n\t\t0x0780: { n:\"??\" },\n\t\t0x0800: { n:\"??\" },\n\t\t0x0801: { n:\"??\" },\n\t\t0x0804: { n:\"??\" },\n\t\t0x0A80: { n:\"??\" },\n\t\t0x2AF6: { n:\"??\" },\n\t\t0x3231: { n:\"??\" },\n\t\t0x6E49: { n:\"??\" },\n\t\t0x6F44: { n:\"??\" },\n\t\t0xFFFF: { n:\"\" }\n\t};\n\n\t/* TODO: fill out and verify this table across QP versions */\n\tvar QPWNFTable = {\n\t\t0x05: \"dd-mmm-yy\",\n\t\t0x06: \"dd-mmm\",\n\t\t0x07: \"mmm-yy\",\n\t\t0x08: \"mm/dd/yy\", // Long Date Intl\n\t\t0x0A: \"hh:mm:ss AM/PM\",\n\t\t0x0B: \"hh:mm AM/PM\",\n\t\t0x0E: \"dd-mmm-yyyy\",\n\t\t0x0F: \"mmm-yyyy\",\n\n\t\t/* It is suspected that the the low nybble specifies decimal places */\n\t\t0x0022: \"0.00\",\n\t\t0x0032: \"0.00;[Red]0.00\",\n\t\t0x0042: \"0.00;\\(0.00\\)\",\n\t\t0x0052: \"0.00;[Red]\\(0.00\\)\",\n\t\t0x00A2: '\"$\"#,##0.00;\\\\(\"$\"#,##0.00\\\\)',\n\t\t0x0120: '0%',\n\t\t0x0130: '0E+00',\n\t\t0x0140: '# ?/?'\n\t};\n\n\tfunction parse_qpw_str(p) {\n\t\tvar cch = p.read_shift(2);\n\t\tvar flags = p.read_shift(1);\n\t\t/* TODO: find examples with nonzero flags */\n\t\tif(flags != 0) throw \"unsupported QPW string type \" + flags.toString(16);\n\t\treturn p.read_shift(cch, \"sbcs-cont\");\n\t}\n\n\t/* QPW uses a different set of record types */\n\tfunction qpw_to_workbook_buf(d, opts)/*:Workbook*/ {\n\t\tprep_blob(d, 0);\n\t\tvar o = opts || {};\n\t\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\t\tvar s/*:Worksheet*/ = ({}/*:any*/); if(o.dense) s[\"!data\"] = [];\n\t\tvar SST = [], sname = \"\", formulae = [];\n\t\tvar range = {s:{r:-1,c:-1}, e:{r:-1,c:-1}};\n\t\tvar cnt = 0, type = 0, C = 0, R = 0;\n\t\tvar wb = { SheetNames: [], Sheets: {} };\n\t\tvar FMTS = [];\n\t\touter: while(d.l < d.length) {\n\t\t\tvar RT = d.read_shift(2), length = d.read_shift(2);\n\t\t\tvar p = d.slice(d.l, d.l + length);\n\t\t\tprep_blob(p, 0);\n\t\t\tswitch(RT) {\n\t\t\t\tcase 0x01: /* BOF */\n\t\t\t\t\tif(p.read_shift(4) != 0x39575051) throw \"Bad QPW9 BOF!\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x02: /* EOF */ break outer;\n\n\t\t\t\tcase 0x08: /* NF */ break; // TODO: this is tied to custom number formats\n\n\t\t\t\tcase 0x0A: /* FORMATS */ {\n\t\t\t\t\tvar fcnt = p.read_shift(4);\n\t\t\t\t\tvar step = ((p.length - p.l)/ fcnt)|0;\n\t\t\t\t\tfor(var ifmt = 0; ifmt < fcnt; ++ifmt) {\n\t\t\t\t\t\tvar end = p.l + step;\n\t\t\t\t\t\tvar fmt = {};\n\t\t\t\t\t\tp.l += 2;\n\t\t\t\t\t\tfmt.numFmtId = p.read_shift(2);\n\t\t\t\t\t\tif(QPWNFTable[fmt.numFmtId]) fmt.z = QPWNFTable[fmt.numFmtId];\n\t\t\t\t\t\tp.l = end;\n\t\t\t\t\t\tFMTS.push(fmt);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\n\t\t\t\t/* TODO: The behavior here should be consistent with Numbers: QP Notebook ~ .TN.SheetArchive, QP Sheet ~ .TST.TableModelArchive */\n\t\t\t\tcase 0x0401: /* BON */ break;\n\t\t\t\tcase 0x0402: /* EON */ /* TODO: backfill missing sheets based on BON cnt */ break;\n\n\t\t\t\tcase 0x0407: { /* SST */\n\t\t\t\t\tp.l += 12;\n\t\t\t\t\twhile(p.l < p.length) {\n\t\t\t\t\t\tcnt = p.read_shift(2);\n\t\t\t\t\t\ttype = p.read_shift(1);\n\t\t\t\t\t\tSST.push(p.read_shift(cnt, 'cstr'));\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0408: { /* FORMULAE */\n\t\t\t\t\t//p.l += 12;\n\t\t\t\t\t//while(p.l < p.length) {\n\t\t\t\t\t//\tcnt = p.read_shift(2);\n\t\t\t\t\t//\tformulae.push(p.slice(p.l, p.l + cnt + 1)); p.l += cnt + 1;\n\t\t\t\t\t//}\n\t\t\t\t} break;\n\n\t\t\t\tcase 0x0601: { /* BOS */\n\t\t\t\t\tvar sidx = p.read_shift(2);\n\t\t\t\t\ts = ({}/*:any*/); if(o.dense) s[\"!data\"] = [];\n\t\t\t\t\trange.s.c = p.read_shift(2);\n\t\t\t\t\trange.e.c = p.read_shift(2);\n\t\t\t\t\trange.s.r = p.read_shift(4);\n\t\t\t\t\trange.e.r = p.read_shift(4);\n\t\t\t\t\tp.l += 4;\n\t\t\t\t\tif(p.l + 2 < p.length) {\n\t\t\t\t\t\tcnt = p.read_shift(2);\n\t\t\t\t\t\ttype = p.read_shift(1);\n\t\t\t\t\t\tsname = cnt == 0 ? \"\" : p.read_shift(cnt, 'cstr');\n\t\t\t\t\t}\n\t\t\t\t\tif(!sname) sname = encode_col(sidx);\n\t\t\t\t\t/* TODO: backfill empty sheets */\n\t\t\t\t} break;\n\t\t\t\tcase 0x0602: { /* EOS */\n\t\t\t\t\t/* NOTE: QP valid range A1:IV1000000 */\n\t\t\t\t\tif(range.s.c > 0xFF || range.s.r > 999999) break;\n\t\t\t\t\tif(range.e.c < range.s.c) range.e.c = range.s.c;\n\t\t\t\t\tif(range.e.r < range.s.r) range.e.r = range.s.r;\n\t\t\t\t\ts[\"!ref\"] = encode_range(range);\n\t\t\t\t\tbook_append_sheet(wb, s, sname); // TODO: a barrel roll\n\t\t\t\t} break;\n\n\t\t\t\tcase 0x0A01: { /* COL (like XLS Row, modulo the layout transposition) */\n\t\t\t\t\tC = p.read_shift(2);\n\t\t\t\t\tif(range.e.c < C) range.e.c = C;\n\t\t\t\t\tif(range.s.c > C) range.s.c = C;\n\t\t\t\t\tR = p.read_shift(4);\n\t\t\t\t\tif(range.s.r > R) range.s.r = R;\n\t\t\t\t\tR = p.read_shift(4);\n\t\t\t\t\tif(range.e.r < R) range.e.r = R;\n\t\t\t\t} break;\n\n\t\t\t\tcase 0x0C01: { /* MulCells (like XLS MulRK, but takes advantage of common column data patterns) */\n\t\t\t\t\tR = p.read_shift(4), cnt = p.read_shift(4);\n\t\t\t\t\tif(range.s.r > R) range.s.r = R;\n\t\t\t\t\tif(range.e.r < R + cnt - 1) range.e.r = R + cnt - 1;\n\t\t\t\t\tvar CC = encode_col(C);\n\t\t\t\t\twhile(p.l < p.length) {\n\t\t\t\t\t\tvar cell = { t: \"z\" };\n\t\t\t\t\t\tvar flags = p.read_shift(1), fmtidx = -1;\n\t\t\t\t\t\tif(flags & 0x80) fmtidx = p.read_shift(2);\n\t\t\t\t\t\tvar mul = (flags & 0x40) ? p.read_shift(2) - 1: 0;\n\t\t\t\t\t\tswitch(flags & 0x1F) {\n\t\t\t\t\t\t\tcase 0: break;\n\t\t\t\t\t\t\tcase 1: break;\n\t\t\t\t\t\t\tcase 2: cell = { t: \"n\", v: p.read_shift(2) }; break;\n\t\t\t\t\t\t\tcase 3: cell = { t: \"n\", v: p.read_shift(2, 'i') }; break;\n\t\t\t\t\t\t\tcase 4: cell = { t: \"n\", v: parse_RkNumber(p) }; break;\n\t\t\t\t\t\t\tcase 5: cell = { t: \"n\", v: p.read_shift(8, 'f') }; break;\n\t\t\t\t\t\t\tcase 7: cell = { t: \"s\", v: SST[type = p.read_shift(4) - 1] }; break;\n\t\t\t\t\t\t\tcase 8:\n\t\t\t\t\t\t\t\tcell = { t: \"n\", v: p.read_shift(8, 'f') };\n\t\t\t\t\t\t\t\tp.l += 2; /* cell.f = formulae[p.read_shift(4)]; */ p.l += 4;\n\t\t\t\t\t\t\t\tif(isNaN(cell.v)) cell = { t: \"e\", v: 0x0F }; // #VALUE!\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault: throw \"Unrecognized QPW cell type \" + (flags & 0x1F);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(fmtidx != -1 && (FMTS[fmtidx - 1]||{}).z) cell.z = FMTS[fmtidx-1].z;\n\t\t\t\t\t\tvar delta = 0;\n\t\t\t\t\t\tif(flags & 0x20) switch(flags & 0x1F) {\n\t\t\t\t\t\t\tcase 2: delta = p.read_shift(2); break;\n\t\t\t\t\t\t\tcase 3: delta = p.read_shift(2, 'i'); break;\n\t\t\t\t\t\t\tcase 7: delta = p.read_shift(2); break;\n\t\t\t\t\t\t\tdefault: throw \"Unsupported delta for QPW cell type \" + (flags & 0x1F);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(!(!o.sheetStubs && cell.t == \"z\")) {\n\t\t\t\t\t\t\tvar newcell = dup(cell);\n\t\t\t\t\t\t\tif(cell.t == \"n\" && cell.z && fmt_is_date(cell.z) && o.cellDates) {\n\t\t\t\t\t\t\t\tnewcell.v = numdate(cell.v); newcell.t = typeof newcell.v == \"number\" ? 'n' : 'd';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(s[\"!data\"] != null) {\n\t\t\t\t\t\t\t\tif(!s[\"!data\"][R]) s[\"!data\"][R] = [];\n\t\t\t\t\t\t\t\ts[\"!data\"][R][C] = newcell;\n\t\t\t\t\t\t\t} else s[CC + encode_row(R)] = newcell;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t++R; --cnt;\n\t\t\t\t\t\twhile(mul-- > 0 && cnt >= 0) {\n\t\t\t\t\t\t\tif(flags & 0x20) switch(flags & 0x1F) {\n\t\t\t\t\t\t\t\tcase 2: cell = { t: \"n\", v: (cell.v + delta) & 0xFFFF }; break;\n\t\t\t\t\t\t\t\tcase 3: cell = { t: \"n\", v: (cell.v + delta) & 0xFFFF }; if(cell.v > 0x7FFF) cell.v -= 0x10000; break;\n\t\t\t\t\t\t\t\tcase 7: cell = { t: \"s\", v: SST[type = (type + delta) >>> 0] }; break;\n\t\t\t\t\t\t\t\tdefault: throw \"Cannot apply delta for QPW cell type \" + (flags & 0x1F);\n\t\t\t\t\t\t\t} else switch(flags & 0x1F) {\n\t\t\t\t\t\t\t\tcase 1: cell = { t: \"z\" }; break;\n\t\t\t\t\t\t\t\tcase 2: cell = { t: \"n\", v: p.read_shift(2) }; break;\n\t\t\t\t\t\t\t\tcase 7: cell = { t: \"s\", v: SST[type = p.read_shift(4) - 1] }; break;\n\t\t\t\t\t\t\t\tdefault: throw \"Cannot apply repeat for QPW cell type \" + (flags & 0x1F);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(fmtidx != -1);\n\t\t\t\t\t\t\tif(!(!o.sheetStubs && cell.t == \"z\")) {\n\t\t\t\t\t\t\t\tif(s[\"!data\"] != null) {\n\t\t\t\t\t\t\t\t\tif(!s[\"!data\"][R]) s[\"!data\"][R] = [];\n\t\t\t\t\t\t\t\t\ts[\"!data\"][R][C] = cell;\n\t\t\t\t\t\t\t\t} else s[CC + encode_row(R)] = cell;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t++R; --cnt;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} break;\n\n\t\t\t\tcase 0x0C02: { /* String (result of string formula expression) */\n\t\t\t\t\tC = p.read_shift(2);\n\t\t\t\t\tR = p.read_shift(4);\n\t\t\t\t\tvar str = parse_qpw_str(p);\n\t\t\t\t\t/* TODO: QP10 record has an additional unknown character after the string */\n\t\t\t\t\tif(s[\"!data\"] != null) {\n\t\t\t\t\t\tif(!s[\"!data\"][R]) s[\"!data\"][R] = [];\n\t\t\t\t\t\ts[\"!data\"][R][C] = { t:\"s\", v:str };\n\t\t\t\t\t} else s[encode_col(C) + encode_row(R)] = { t:\"s\", v:str };\n\t\t\t\t} break;\n\n\t\t\t\tdefault: break;\n\t\t\t}\n\t\t\td.l += length;\n\t\t}\n\t\treturn wb;\n\t}\n\n\treturn {\n\t\tsheet_to_wk1: sheet_to_wk1,\n\t\tbook_to_wk3: book_to_wk3,\n\t\tto_workbook: lotus_to_workbook\n\t};\n})();\n/* 18.4.7 rPr CT_RPrElt */\nfunction parse_rpr(rpr) {\n\tvar font = {}, m = rpr.match(tagregex), i = 0;\n\tvar pass = false;\n\tif(m) for(;i!=m.length; ++i) {\n\t\tvar y = parsexmltag(m[i]);\n\t\tswitch(y[0].replace(/<\\w*:/g,\"<\")) {\n\t\t\t/* 18.8.12 condense CT_BooleanProperty */\n\t\t\t/* ** not required . */\n\t\t\tcase '<condense': break;\n\t\t\t/* 18.8.17 extend CT_BooleanProperty */\n\t\t\t/* ** not required . */\n\t\t\tcase '<extend': break;\n\t\t\t/* 18.8.36 shadow CT_BooleanProperty */\n\t\t\t/* ** not required . */\n\t\t\tcase '<shadow':\n\t\t\t\tif(!y.val) break;\n\t\t\t\t/* falls through */\n\t\t\tcase '<shadow>':\n\t\t\tcase '<shadow/>': font.shadow = 1; break;\n\t\t\tcase '</shadow>': break;\n\n\t\t\t/* 18.4.1 charset CT_IntProperty TODO */\n\t\t\tcase '<charset':\n\t\t\t\tif(y.val == '1') break;\n\t\t\t\tfont.cp = CS2CP[parseInt(y.val, 10)];\n\t\t\t\tbreak;\n\n\t\t\t/* 18.4.2 outline CT_BooleanProperty TODO */\n\t\t\tcase '<outline':\n\t\t\t\tif(!y.val) break;\n\t\t\t\t/* falls through */\n\t\t\tcase '<outline>':\n\t\t\tcase '<outline/>': font.outline = 1; break;\n\t\t\tcase '</outline>': break;\n\n\t\t\t/* 18.4.5 rFont CT_FontName */\n\t\t\tcase '<rFont': font.name = y.val; break;\n\n\t\t\t/* 18.4.11 sz CT_FontSize */\n\t\t\tcase '<sz': font.sz = y.val; break;\n\n\t\t\t/* 18.4.10 strike CT_BooleanProperty */\n\t\t\tcase '<strike':\n\t\t\t\tif(!y.val) break;\n\t\t\t\t/* falls through */\n\t\t\tcase '<strike>':\n\t\t\tcase '<strike/>': font.strike = 1; break;\n\t\t\tcase '</strike>': break;\n\n\t\t\t/* 18.4.13 u CT_UnderlineProperty */\n\t\t\tcase '<u':\n\t\t\t\tif(!y.val) break;\n\t\t\t\tswitch(y.val) {\n\t\t\t\t\tcase 'double': font.uval = \"double\"; break;\n\t\t\t\t\tcase 'singleAccounting': font.uval = \"single-accounting\"; break;\n\t\t\t\t\tcase 'doubleAccounting': font.uval = \"double-accounting\"; break;\n\t\t\t\t}\n\t\t\t\t/* falls through */\n\t\t\tcase '<u>':\n\t\t\tcase '<u/>': font.u = 1; break;\n\t\t\tcase '</u>': break;\n\n\t\t\t/* 18.8.2 b */\n\t\t\tcase '<b':\n\t\t\t\tif(y.val == '0') break;\n\t\t\t\t/* falls through */\n\t\t\tcase '<b>':\n\t\t\tcase '<b/>': font.b = 1; break;\n\t\t\tcase '</b>': break;\n\n\t\t\t/* 18.8.26 i */\n\t\t\tcase '<i':\n\t\t\t\tif(y.val == '0') break;\n\t\t\t\t/* falls through */\n\t\t\tcase '<i>':\n\t\t\tcase '<i/>': font.i = 1; break;\n\t\t\tcase '</i>': break;\n\n\t\t\t/* 18.3.1.15 color CT_Color TODO: tint, theme, auto, indexed */\n\t\t\tcase '<color':\n\t\t\t\tif(y.rgb) font.color = y.rgb.slice(2,8);\n\t\t\t\tbreak;\n\t\t\tcase '<color>': case '<color/>': case '</color>': break;\n\n\t\t\t/* 18.8.18 family ST_FontFamily */\n\t\t\tcase '<family': font.family = y.val; break;\n\t\t\tcase '<family>': case '<family/>': case '</family>': break;\n\n\t\t\t/* 18.4.14 vertAlign CT_VerticalAlignFontProperty TODO */\n\t\t\tcase '<vertAlign': font.valign = y.val; break;\n\t\t\tcase '<vertAlign>': case '<vertAlign/>': case '</vertAlign>': break;\n\n\t\t\t/* 18.8.35 scheme CT_FontScheme TODO */\n\t\t\tcase '<scheme': break;\n\t\t\tcase '<scheme>': case '<scheme/>': case '</scheme>': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '<extLst': case '<extLst>': case '</extLst>': break;\n\t\t\tcase '<ext': pass = true; break;\n\t\t\tcase '</ext>': pass = false; break;\n\t\t\tdefault:\n\t\t\t\tif(y[0].charCodeAt(1) !== 47 && !pass) throw new Error('Unrecognized rich format ' + y[0]);\n\t\t}\n\t}\n\treturn font;\n}\n\nvar parse_rs = /*#__PURE__*/(function() {\n\t/* 18.4.4 r CT_RElt */\n\tfunction parse_r(r) {\n\t\t/* 18.4.12 t ST_Xstring */\n\t\tvar t = str_match_xml_ns(r, \"t\")/*, cp = 65001*/;\n\t\tif(!t) return {t:\"s\", v:\"\"};\n\n\t\tvar o/*:Cell*/ = ({t:'s', v:unescapexml(t[1])}/*:any*/);\n\t\tvar rpr = str_match_xml_ns(r, \"rPr\");\n\t\tif(rpr) o.s = parse_rpr(rpr[1]);\n\t\treturn o;\n\t}\n\tvar rregex = /<(?:\\w+:)?r>/g, rend = /<\\/(?:\\w+:)?r>/;\n\treturn function parse_rs(rs) {\n\t\treturn rs.replace(rregex,\"\").split(rend).map(parse_r).filter(function(r) { return r.v; });\n\t};\n})();\n\n\n/* Parse a list of <r> tags */\nvar rs_to_html = /*#__PURE__*/(function parse_rs_factory() {\n\tvar nlregex = /(\\r\\n|\\n)/g;\n\tfunction parse_rpr2(font, intro, outro) {\n\t\tvar style/*:Array<string>*/ = [];\n\n\t\tif(font.u) style.push(\"text-decoration: underline;\");\n\t\tif(font.uval) style.push(\"text-underline-style:\" + font.uval + \";\");\n\t\tif(font.sz) style.push(\"font-size:\" + font.sz + \"pt;\");\n\t\tif(font.outline) style.push(\"text-effect: outline;\");\n\t\tif(font.shadow) style.push(\"text-shadow: auto;\");\n\t\tintro.push('<span style=\"' + style.join(\"\") + '\">');\n\n\t\tif(font.b) { intro.push(\"<b>\"); outro.push(\"</b>\"); }\n\t\tif(font.i) { intro.push(\"<i>\"); outro.push(\"</i>\"); }\n\t\tif(font.strike) { intro.push(\"<s>\"); outro.push(\"</s>\"); }\n\n\t\tvar align = font.valign || \"\";\n\t\tif(align == \"superscript\" || align == \"super\") align = \"sup\";\n\t\telse if(align == \"subscript\") align = \"sub\";\n\t\tif(align != \"\") { intro.push(\"<\" + align + \">\"); outro.push(\"</\" + align + \">\"); }\n\n\t\toutro.push(\"</span>\");\n\t\treturn font;\n\t}\n\n\t/* 18.4.4 r CT_RElt */\n\tfunction r_to_html(r) {\n\t\tvar terms/*:[Array<string>, string, Array<string>]*/ = [[],r.v,[]];\n\t\tif(!r.v) return \"\";\n\n\t\tif(r.s) parse_rpr2(r.s, terms[0], terms[2]);\n\n\t\treturn terms[0].join(\"\") + terms[1].replace(nlregex,'<br/>') + terms[2].join(\"\");\n\t}\n\n\treturn function parse_rs(rs) {\n\t\treturn rs.map(r_to_html).join(\"\");\n\t};\n})();\n\n/* 18.4.8 si CT_Rst */\nvar sitregex = /<(?:\\w+:)?t\\b[^<>]*>([^<]*)<\\/(?:\\w+:)?t>/g, sirregex = /<(?:\\w+:)?r\\b[^<>]*>/;\nfunction parse_si(x, opts) {\n\tvar html = opts ? opts.cellHTML : true;\n\tvar z = {};\n\tif(!x) return { t: \"\" };\n\t//var y;\n\t/* 18.4.12 t ST_Xstring (Plaintext String) */\n\t// TODO: is whitespace actually valid here?\n\tif(x.match(/^\\s*<(?:\\w+:)?t[^>]*>/)) {\n\t\tz.t = unescapexml(utf8read(x.slice(x.indexOf(\">\")+1).split(/<\\/(?:\\w+:)?t>/)[0]||\"\"), true);\n\t\tz.r = utf8read(x);\n\t\tif(html) z.h = escapehtml(z.t);\n\t}\n\t/* 18.4.4 r CT_RElt (Rich Text Run) */\n\telse if((/*y = */x.match(sirregex))) {\n\t\tz.r = utf8read(x);\n\t\tz.t = unescapexml(utf8read((str_remove_xml_ns_g(x, \"rPh\").match(sitregex)||[]).join(\"\").replace(tagregex,\"\")), true);\n\t\tif(html) z.h = rs_to_html(parse_rs(z.r));\n\t}\n\t/* 18.4.3 phoneticPr CT_PhoneticPr (TODO: needed for Asian support) */\n\t/* 18.4.6 rPh CT_PhoneticRun (TODO: needed for Asian support) */\n\treturn z;\n}\n\n/* 18.4 Shared String Table */\nvar sstr1 = /<(?:\\w+:)?(?:si|sstItem)>/g;\nvar sstr2 = /<\\/(?:\\w+:)?(?:si|sstItem)>/;\nfunction parse_sst_xml(data/*:string*/, opts)/*:SST*/ {\n\tvar s/*:SST*/ = ([]/*:any*/), ss = \"\";\n\tif(!data) return s;\n\t/* 18.4.9 sst CT_Sst */\n\tvar sst = str_match_xml_ns(data, \"sst\");\n\tif(sst) {\n\t\tss = sst[1].replace(sstr1,\"\").split(sstr2);\n\t\tfor(var i = 0; i != ss.length; ++i) {\n\t\t\tvar o = parse_si(ss[i].trim(), opts);\n\t\t\tif(o != null) s[s.length] = o;\n\t\t}\n\t\tsst = parsexmltag(sst[0].slice(0, sst[0].indexOf(\">\"))); s.Count = sst.count; s.Unique = sst.uniqueCount;\n\t}\n\treturn s;\n}\n\nvar straywsregex = /^\\s|\\s$|[\\t\\n\\r]/;\nfunction write_sst_xml(sst/*:SST*/, opts)/*:string*/ {\n\tif(!opts.bookSST) return \"\";\n\tvar o = [XML_HEADER];\n\to[o.length] = (writextag('sst', null, {\n\t\txmlns: XMLNS_main[0],\n\t\tcount: sst.Count,\n\t\tuniqueCount: sst.Unique\n\t}));\n\tfor(var i = 0; i != sst.length; ++i) { if(sst[i] == null) continue;\n\t\tvar s/*:XLString*/ = sst[i];\n\t\tvar sitag = \"<si>\";\n\t\tif(s.r) sitag += s.r;\n\t\telse {\n\t\t\tsitag += \"<t\";\n\t\t\tif(!s.t) s.t = \"\";\n\t\t\tif(typeof s.t !== \"string\") s.t = String(s.t);\n\t\t\tif(s.t.match(straywsregex)) sitag += ' xml:space=\"preserve\"';\n\t\t\tsitag += \">\" + escapexml(s.t) + \"</t>\";\n\t\t}\n\t\tsitag += \"</si>\";\n\t\to[o.length] = (sitag);\n\t}\n\tif(o.length>2){ o[o.length] = ('</sst>'); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.221 BrtBeginSst */\nfunction parse_BrtBeginSst(data) {\n\treturn [data.read_shift(4), data.read_shift(4)];\n}\n\n/* [MS-XLSB] 2.1.7.45 Shared Strings */\nfunction parse_sst_bin(data, opts)/*:SST*/ {\n\tvar s/*:SST*/ = ([]/*:any*/);\n\tvar pass = false;\n\trecordhopper(data, function hopper_sst(val, R, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x009F: /* BrtBeginSst */\n\t\t\t\ts.Count = val[0]; s.Unique = val[1]; break;\n\t\t\tcase 0x0013: /* BrtSSTItem */\n\t\t\t\ts.push(val); break;\n\t\t\tcase 0x00A0: /* BrtEndSst */\n\t\t\t\treturn true;\n\n\t\t\tcase 0x0023: /* BrtFRTBegin */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* BrtFRTEnd */\n\t\t\t\tpass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T){}\n\t\t\t\tif(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t});\n\treturn s;\n}\n\nfunction write_BrtBeginSst(sst, o) {\n\tif(!o) o = new_buf(8);\n\to.write_shift(4, sst.Count);\n\to.write_shift(4, sst.Unique);\n\treturn o;\n}\n\nvar write_BrtSSTItem = write_RichStr;\n\nfunction write_sst_bin(sst/*::, opts*/) {\n\tvar ba = buf_array();\n\twrite_record(ba, 0x009F /* BrtBeginSst */, write_BrtBeginSst(sst));\n\tfor(var i = 0; i < sst.length; ++i) write_record(ba, 0x0013 /* BrtSSTItem */, write_BrtSSTItem(sst[i]));\n\t/* FRTSST */\n\twrite_record(ba, 0x00A0 /* BrtEndSst */);\n\treturn ba.end();\n}\nfunction _JS2ANSI(str/*:string*/)/*:Array<number>*/ {\n\tif(typeof $cptable !== 'undefined') return $cptable.utils.encode(current_ansi, str);\n\tvar o/*:Array<number>*/ = [], oo = str.split(\"\");\n\tfor(var i = 0; i < oo.length; ++i) o[i] = oo[i].charCodeAt(0);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.4 Version */\nfunction parse_CRYPTOVersion(blob, length/*:?number*/) {\n\tvar o/*:any*/ = {};\n\to.Major = blob.read_shift(2);\n\to.Minor = blob.read_shift(2);\n\t/*:: if(length == null) return o; */\n\tif(length >= 4) blob.l += length - 4;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.5 DataSpaceVersionInfo */\nfunction parse_DataSpaceVersionInfo(blob) {\n\tvar o = {};\n\to.id = blob.read_shift(0, 'lpp4');\n\to.R = parse_CRYPTOVersion(blob, 4);\n\to.U = parse_CRYPTOVersion(blob, 4);\n\to.W = parse_CRYPTOVersion(blob, 4);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.6.1 DataSpaceMapEntry Structure */\nfunction parse_DataSpaceMapEntry(blob) {\n\tvar len = blob.read_shift(4);\n\tvar end = blob.l + len - 4;\n\tvar o = {};\n\tvar cnt = blob.read_shift(4);\n\tvar comps/*:Array<{t:number, v:string}>*/ = [];\n\t/* [MS-OFFCRYPTO] 2.1.6.2 DataSpaceReferenceComponent Structure */\n\twhile(cnt-- > 0) comps.push({ t: blob.read_shift(4), v: blob.read_shift(0, 'lpp4') });\n\to.name = blob.read_shift(0, 'lpp4');\n\to.comps = comps;\n\tif(blob.l != end) throw new Error(\"Bad DataSpaceMapEntry: \" + blob.l + \" != \" + end);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.6 DataSpaceMap */\nfunction parse_DataSpaceMap(blob) {\n\tvar o = [];\n\tblob.l += 4; // must be 0x8\n\tvar cnt = blob.read_shift(4);\n\twhile(cnt-- > 0) o.push(parse_DataSpaceMapEntry(blob));\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.7 DataSpaceDefinition */\nfunction parse_DataSpaceDefinition(blob)/*:Array<string>*/ {\n\tvar o/*:Array<string>*/ = [];\n\tblob.l += 4; // must be 0x8\n\tvar cnt = blob.read_shift(4);\n\twhile(cnt-- > 0) o.push(blob.read_shift(0, 'lpp4'));\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.8 DataSpaceDefinition */\nfunction parse_TransformInfoHeader(blob) {\n\tvar o = {};\n\t/*var len = */blob.read_shift(4);\n\tblob.l += 4; // must be 0x1\n\to.id = blob.read_shift(0, 'lpp4');\n\to.name = blob.read_shift(0, 'lpp4');\n\to.R = parse_CRYPTOVersion(blob, 4);\n\to.U = parse_CRYPTOVersion(blob, 4);\n\to.W = parse_CRYPTOVersion(blob, 4);\n\treturn o;\n}\n\nfunction parse_Primary(blob) {\n\t/* [MS-OFFCRYPTO] 2.2.6 IRMDSTransformInfo */\n\tvar hdr = parse_TransformInfoHeader(blob);\n\t/* [MS-OFFCRYPTO] 2.1.9 EncryptionTransformInfo */\n\thdr.ename = blob.read_shift(0, '8lpp4');\n\thdr.blksz = blob.read_shift(4);\n\thdr.cmode = blob.read_shift(4);\n\tif(blob.read_shift(4) != 0x04) throw new Error(\"Bad !Primary record\");\n\treturn hdr;\n}\n\n/* [MS-OFFCRYPTO] 2.3.2 Encryption Header */\nfunction parse_EncryptionHeader(blob, length/*:number*/) {\n\tvar tgt = blob.l + length;\n\tvar o = {};\n\to.Flags = (blob.read_shift(4) & 0x3F);\n\tblob.l += 4;\n\to.AlgID = blob.read_shift(4);\n\tvar valid = false;\n\tswitch(o.AlgID) {\n\t\tcase 0x660E: case 0x660F: case 0x6610: valid = (o.Flags == 0x24); break;\n\t\tcase 0x6801: valid = (o.Flags == 0x04); break;\n\t\tcase 0: valid = (o.Flags == 0x10 || o.Flags == 0x04 || o.Flags == 0x24); break;\n\t\tdefault: throw 'Unrecognized encryption algorithm: ' + o.AlgID;\n\t}\n\tif(!valid) throw new Error(\"Encryption Flags/AlgID mismatch\");\n\to.AlgIDHash = blob.read_shift(4);\n\to.KeySize = blob.read_shift(4);\n\to.ProviderType = blob.read_shift(4);\n\tblob.l += 8;\n\to.CSPName = blob.read_shift((tgt-blob.l)>>1, 'utf16le');\n\tblob.l = tgt;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.3 Encryption Verifier */\nfunction parse_EncryptionVerifier(blob, length/*:number*/) {\n\tvar o = {}, tgt = blob.l + length;\n\tblob.l += 4; // SaltSize must be 0x10\n\to.Salt = blob.slice(blob.l, blob.l+16); blob.l += 16;\n\to.Verifier = blob.slice(blob.l, blob.l+16); blob.l += 16;\n\t/*var sz = */blob.read_shift(4);\n\to.VerifierHash = blob.slice(blob.l, tgt); blob.l = tgt;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.4.* EncryptionInfo Stream */\nfunction parse_EncryptionInfo(blob) {\n\tvar vers = parse_CRYPTOVersion(blob);\n\tswitch(vers.Minor) {\n\t\tcase 0x02: return [vers.Minor, parse_EncInfoStd(blob, vers)];\n\t\tcase 0x03: return [vers.Minor, parse_EncInfoExt(blob, vers)];\n\t\tcase 0x04: return [vers.Minor, parse_EncInfoAgl(blob, vers)];\n\t}\n\tthrow new Error(\"ECMA-376 Encrypted file unrecognized Version: \" + vers.Minor);\n}\n\n/* [MS-OFFCRYPTO] 2.3.4.5  EncryptionInfo Stream (Standard Encryption) */\nfunction parse_EncInfoStd(blob/*::, vers*/) {\n\tvar flags = blob.read_shift(4);\n\tif((flags & 0x3F) != 0x24) throw new Error(\"EncryptionInfo mismatch\");\n\tvar sz = blob.read_shift(4);\n\t//var tgt = blob.l + sz;\n\tvar hdr = parse_EncryptionHeader(blob, sz);\n\tvar verifier = parse_EncryptionVerifier(blob, blob.length - blob.l);\n\treturn { t:\"Std\", h:hdr, v:verifier };\n}\n/* [MS-OFFCRYPTO] 2.3.4.6  EncryptionInfo Stream (Extensible Encryption) */\nfunction parse_EncInfoExt(/*::blob, vers*/) { throw new Error(\"File is password-protected: ECMA-376 Extensible\"); }\n/* [MS-OFFCRYPTO] 2.3.4.10 EncryptionInfo Stream (Agile Encryption) */\nfunction parse_EncInfoAgl(blob/*::, vers*/) {\n\tvar KeyData = [\"saltSize\",\"blockSize\",\"keyBits\",\"hashSize\",\"cipherAlgorithm\",\"cipherChaining\",\"hashAlgorithm\",\"saltValue\"];\n\tblob.l+=4;\n\tvar xml = blob.read_shift(blob.length - blob.l, 'utf8');\n\tvar o = {};\n\txml.replace(tagregex, function xml_agile(x) {\n\t\tvar y/*:any*/ = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '<?xml': break;\n\t\t\tcase '<encryption': case '</encryption>': break;\n\t\t\tcase '<keyData': KeyData.forEach(function(k) { o[k] = y[k]; }); break;\n\t\t\tcase '<dataIntegrity': o.encryptedHmacKey = y.encryptedHmacKey; o.encryptedHmacValue = y.encryptedHmacValue; break;\n\t\t\tcase '<keyEncryptors>': case '<keyEncryptors': o.encs = []; break;\n\t\t\tcase '</keyEncryptors>': break;\n\n\t\t\tcase '<keyEncryptor': o.uri = y.uri; break;\n\t\t\tcase '</keyEncryptor>': break;\n\t\t\tcase '<encryptedKey': o.encs.push(y); break;\n\t\t\tdefault: throw y[0];\n\t\t}\n\t});\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.5.1 RC4 CryptoAPI Encryption Header */\nfunction parse_RC4CryptoHeader(blob, length/*:number*/) {\n\tvar o = {};\n\tvar vers = o.EncryptionVersionInfo = parse_CRYPTOVersion(blob, 4); length -= 4;\n\tif(vers.Minor != 2) throw new Error('unrecognized minor version code: ' + vers.Minor);\n\tif(vers.Major > 4 || vers.Major < 2) throw new Error('unrecognized major version code: ' + vers.Major);\n\to.Flags = blob.read_shift(4); length -= 4;\n\tvar sz = blob.read_shift(4); length -= 4;\n\to.EncryptionHeader = parse_EncryptionHeader(blob, sz); length -= sz;\n\to.EncryptionVerifier = parse_EncryptionVerifier(blob, length);\n\treturn o;\n}\n/* [MS-OFFCRYPTO] 2.3.6.1 RC4 Encryption Header */\nfunction parse_RC4Header(blob/*::, length*/) {\n\tvar o = {};\n\tvar vers = o.EncryptionVersionInfo = parse_CRYPTOVersion(blob, 4);\n\tif(vers.Major != 1 || vers.Minor != 1) throw 'unrecognized version code ' + vers.Major + ' : ' + vers.Minor;\n\to.Salt = blob.read_shift(16);\n\to.EncryptedVerifier = blob.read_shift(16);\n\to.EncryptedVerifierHash = blob.read_shift(16);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.7.1 Binary Document Password Verifier Derivation */\nfunction crypto_CreatePasswordVerifier_Method1(Password/*:string*/) {\n\tvar Verifier = 0x0000, PasswordArray;\n\tvar PasswordDecoded = _JS2ANSI(Password);\n\tvar len = PasswordDecoded.length + 1, i, PasswordByte;\n\tvar Intermediate1, Intermediate2, Intermediate3;\n\tPasswordArray = new_raw_buf(len);\n\tPasswordArray[0] = PasswordDecoded.length;\n\tfor(i = 1; i != len; ++i) PasswordArray[i] = PasswordDecoded[i-1];\n\tfor(i = len-1; i >= 0; --i) {\n\t\tPasswordByte = PasswordArray[i];\n\t\tIntermediate1 = ((Verifier & 0x4000) === 0x0000) ? 0 : 1;\n\t\tIntermediate2 = (Verifier << 1) & 0x7FFF;\n\t\tIntermediate3 = Intermediate1 | Intermediate2;\n\t\tVerifier = Intermediate3 ^ PasswordByte;\n\t}\n\treturn Verifier ^ 0xCE4B;\n}\n\n/* [MS-OFFCRYPTO] 2.3.7.2 Binary Document XOR Array Initialization */\nvar crypto_CreateXorArray_Method1 = /*#__PURE__*/(function() {\n\tvar PadArray = [0xBB, 0xFF, 0xFF, 0xBA, 0xFF, 0xFF, 0xB9, 0x80, 0x00, 0xBE, 0x0F, 0x00, 0xBF, 0x0F, 0x00];\n\tvar InitialCode = [0xE1F0, 0x1D0F, 0xCC9C, 0x84C0, 0x110C, 0x0E10, 0xF1CE, 0x313E, 0x1872, 0xE139, 0xD40F, 0x84F9, 0x280C, 0xA96A, 0x4EC3];\n\tvar XorMatrix = [0xAEFC, 0x4DD9, 0x9BB2, 0x2745, 0x4E8A, 0x9D14, 0x2A09, 0x7B61, 0xF6C2, 0xFDA5, 0xEB6B, 0xC6F7, 0x9DCF, 0x2BBF, 0x4563, 0x8AC6, 0x05AD, 0x0B5A, 0x16B4, 0x2D68, 0x5AD0, 0x0375, 0x06EA, 0x0DD4, 0x1BA8, 0x3750, 0x6EA0, 0xDD40, 0xD849, 0xA0B3, 0x5147, 0xA28E, 0x553D, 0xAA7A, 0x44D5, 0x6F45, 0xDE8A, 0xAD35, 0x4A4B, 0x9496, 0x390D, 0x721A, 0xEB23, 0xC667, 0x9CEF, 0x29FF, 0x53FE, 0xA7FC, 0x5FD9, 0x47D3, 0x8FA6, 0x0F6D, 0x1EDA, 0x3DB4, 0x7B68, 0xF6D0, 0xB861, 0x60E3, 0xC1C6, 0x93AD, 0x377B, 0x6EF6, 0xDDEC, 0x45A0, 0x8B40, 0x06A1, 0x0D42, 0x1A84, 0x3508, 0x6A10, 0xAA51, 0x4483, 0x8906, 0x022D, 0x045A, 0x08B4, 0x1168, 0x76B4, 0xED68, 0xCAF1, 0x85C3, 0x1BA7, 0x374E, 0x6E9C, 0x3730, 0x6E60, 0xDCC0, 0xA9A1, 0x4363, 0x86C6, 0x1DAD, 0x3331, 0x6662, 0xCCC4, 0x89A9, 0x0373, 0x06E6, 0x0DCC, 0x1021, 0x2042, 0x4084, 0x8108, 0x1231, 0x2462, 0x48C4];\n\tvar Ror = function(Byte) { return ((Byte/2) | (Byte*128)) & 0xFF; };\n\tvar XorRor = function(byte1, byte2) { return Ror(byte1 ^ byte2); };\n\tvar CreateXorKey_Method1 = function(Password) {\n\t\tvar XorKey = InitialCode[Password.length - 1];\n\t\tvar CurrentElement = 0x68;\n\t\tfor(var i = Password.length-1; i >= 0; --i) {\n\t\t\tvar Char = Password[i];\n\t\t\tfor(var j = 0; j != 7; ++j) {\n\t\t\t\tif(Char & 0x40) XorKey ^= XorMatrix[CurrentElement];\n\t\t\t\tChar *= 2; --CurrentElement;\n\t\t\t}\n\t\t}\n\t\treturn XorKey;\n\t};\n\treturn function(password/*:string*/) {\n\t\tvar Password = _JS2ANSI(password);\n\t\tvar XorKey = CreateXorKey_Method1(Password);\n\t\tvar Index = Password.length;\n\t\tvar ObfuscationArray = new_raw_buf(16);\n\t\tfor(var i = 0; i != 16; ++i) ObfuscationArray[i] = 0x00;\n\t\tvar Temp, PasswordLastChar, PadIndex;\n\t\tif((Index & 1) === 1) {\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(PadArray[0], Temp);\n\t\t\t--Index;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tPasswordLastChar = Password[Password.length - 1];\n\t\t\tObfuscationArray[Index] = XorRor(PasswordLastChar, Temp);\n\t\t}\n\t\twhile(Index > 0) {\n\t\t\t--Index;\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t\t--Index;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t}\n\t\tIndex = 15;\n\t\tPadIndex = 15 - Password.length;\n\t\twhile(PadIndex > 0) {\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(PadArray[PadIndex], Temp);\n\t\t\t--Index;\n\t\t\t--PadIndex;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t\t--Index;\n\t\t\t--PadIndex;\n\t\t}\n\t\treturn ObfuscationArray;\n\t};\n})();\n\n/* [MS-OFFCRYPTO] 2.3.7.3 Binary Document XOR Data Transformation Method 1 */\nvar crypto_DecryptData_Method1 = function(password/*:string*/, Data, XorArrayIndex, XorArray, O) {\n\t/* If XorArray is set, use it; if O is not set, make changes in-place */\n\tif(!O) O = Data;\n\tif(!XorArray) XorArray = crypto_CreateXorArray_Method1(password);\n\tvar Index, Value;\n\tfor(Index = 0; Index != Data.length; ++Index) {\n\t\tValue = Data[Index];\n\t\tValue ^= XorArray[XorArrayIndex];\n\t\tValue = ((Value>>5) | (Value<<3)) & 0xFF;\n\t\tO[Index] = Value;\n\t\t++XorArrayIndex;\n\t}\n\treturn [O, XorArrayIndex, XorArray];\n};\n\nvar crypto_MakeXorDecryptor = function(password/*:string*/) {\n\tvar XorArrayIndex = 0, XorArray = crypto_CreateXorArray_Method1(password);\n\treturn function(Data) {\n\t\tvar O = crypto_DecryptData_Method1(\"\", Data, XorArrayIndex, XorArray);\n\t\tXorArrayIndex = O[1];\n\t\treturn O[0];\n\t};\n};\n\n/* 2.5.343 */\nfunction parse_XORObfuscation(blob, length, opts, out) {\n\tvar o = ({ key: parseuint16(blob), verificationBytes: parseuint16(blob) }/*:any*/);\n\tif(opts.password) o.verifier = crypto_CreatePasswordVerifier_Method1(opts.password);\n\tout.valid = o.verificationBytes === o.verifier;\n\tif(out.valid) out.insitu = crypto_MakeXorDecryptor(opts.password);\n\treturn o;\n}\n\n/* 2.4.117 */\nfunction parse_FilePassHeader(blob, length/*:number*/, oo) {\n\tvar o = oo || {}; o.Info = blob.read_shift(2); blob.l -= 2;\n\tif(o.Info === 1) o.Data = parse_RC4Header(blob, length);\n\telse o.Data = parse_RC4CryptoHeader(blob, length);\n\treturn o;\n}\nfunction parse_FilePass(blob, length/*:number*/, opts) {\n\tvar o = ({ Type: opts.biff >= 8 ? blob.read_shift(2) : 0 }/*:any*/); /* wEncryptionType */\n\tif(o.Type) parse_FilePassHeader(blob, length-2, o);\n\telse parse_XORObfuscation(blob, opts.biff >= 8 ? length : length - 2, opts, o);\n\treturn o;\n}\n\n\nfunction rtf_to_sheet(d, opts) {\n  switch (opts.type) {\n    case \"base64\":\n      return rtf_to_sheet_str(Base64_decode(d), opts);\n    case \"binary\":\n      return rtf_to_sheet_str(d, opts);\n    case \"buffer\":\n      return rtf_to_sheet_str(has_buf && Buffer.isBuffer(d) ? d.toString(\"binary\") : a2s(d), opts);\n    case \"array\":\n      return rtf_to_sheet_str(cc2str(d), opts);\n  }\n  throw new Error(\"Unrecognized type \" + opts.type);\n}\nfunction rtf_to_sheet_str(str, opts) {\n  var o = opts || {};\n  var ws = {};\n  var dense = o.dense;\n  if (dense)\n    ws[\"!data\"] = [];\n  var rows = str_match_ng(str, \"\\\\trowd\", \"\\\\row\");\n  if (!rows)\n    throw new Error(\"RTF missing table\");\n  var range = { s: { c: 0, r: 0 }, e: { c: 0, r: rows.length - 1 } };\n  var row = [];\n  rows.forEach(function(rowtf, R) {\n    if (dense)\n      row = ws[\"!data\"][R] = [];\n    var rtfre = /\\\\[\\w\\-]+\\b/g;\n    var last_index = 0;\n    var res;\n    var C = -1;\n    var payload = [];\n    while ((res = rtfre.exec(rowtf)) != null) {\n      var data = rowtf.slice(last_index, rtfre.lastIndex - res[0].length);\n      if (data.charCodeAt(0) == 32)\n        data = data.slice(1);\n      if (data.length)\n        payload.push(data);\n      switch (res[0]) {\n        case \"\\\\cell\":\n          ++C;\n          if (payload.length) {\n            var cell = { v: payload.join(\"\"), t: \"s\" };\n            if (cell.v == \"TRUE\" || cell.v == \"FALSE\") {\n              cell.v = cell.v == \"TRUE\";\n              cell.t = \"b\";\n            } else if (!isNaN(fuzzynum(cell.v))) {\n              cell.t = \"n\";\n              if (o.cellText !== false)\n                cell.w = cell.v;\n              cell.v = fuzzynum(cell.v);\n            }\n            if (dense)\n              row[C] = cell;\n            else\n              ws[encode_cell({ r: R, c: C })] = cell;\n          }\n          payload = [];\n          break;\n        case \"\\\\par\":\n          payload.push(\"\\n\");\n          break;\n      }\n      last_index = rtfre.lastIndex;\n    }\n    if (C > range.e.c)\n      range.e.c = C;\n  });\n  ws[\"!ref\"] = encode_range(range);\n  return ws;\n}\nfunction rtf_to_workbook(d, opts) {\n  var wb = sheet_to_workbook(rtf_to_sheet(d, opts), opts);\n  wb.bookType = \"rtf\";\n  return wb;\n}\nfunction sheet_to_rtf(ws, opts) {\n  var o = [\"{\\\\rtf1\\\\ansi\"];\n  if (!ws[\"!ref\"])\n    return o[0] + \"}\";\n  var r = safe_decode_range(ws[\"!ref\"]), cell;\n  var dense = ws[\"!data\"] != null, row = [];\n  for (var R = r.s.r; R <= r.e.r; ++R) {\n    o.push(\"\\\\trowd\\\\trautofit1\");\n    for (var C = r.s.c; C <= r.e.c; ++C)\n      o.push(\"\\\\cellx\" + (C + 1));\n    o.push(\"\\\\pard\\\\intbl\");\n    if (dense)\n      row = ws[\"!data\"][R] || [];\n    for (C = r.s.c; C <= r.e.c; ++C) {\n      var coord = encode_cell({ r: R, c: C });\n      cell = dense ? row[C] : ws[coord];\n      if (!cell || cell.v == null && (!cell.f || cell.F)) {\n        o.push(\" \\\\cell\");\n        continue;\n      }\n      o.push(\" \" + (cell.w || (format_cell(cell), cell.w) || \"\").replace(/[\\r\\n]/g, \"\\\\par \"));\n      o.push(\"\\\\cell\");\n    }\n    o.push(\"\\\\pard\\\\intbl\\\\row\");\n  }\n  return o.join(\"\") + \"}\";\n}\nfunction hex2RGB(h) {\n\tvar o = h.slice(h[0]===\"#\"?1:0).slice(0,6);\n\treturn [parseInt(o.slice(0,2),16),parseInt(o.slice(2,4),16),parseInt(o.slice(4,6),16)];\n}\nfunction rgb2Hex(rgb) {\n\tfor(var i=0,o=1; i!=3; ++i) o = o*256 + (rgb[i]>255?255:rgb[i]<0?0:rgb[i]);\n\treturn o.toString(16).toUpperCase().slice(1);\n}\n\nfunction rgb2HSL(rgb) {\n\tvar R = rgb[0]/255, G = rgb[1]/255, B=rgb[2]/255;\n\tvar M = Math.max(R, G, B), m = Math.min(R, G, B), C = M - m;\n\tif(C === 0) return [0, 0, R];\n\n\tvar H6 = 0, S = 0, L2 = (M + m);\n\tS = C / (L2 > 1 ? 2 - L2 : L2);\n\tswitch(M){\n\t\tcase R: H6 = ((G - B) / C + 6)%6; break;\n\t\tcase G: H6 = ((B - R) / C + 2); break;\n\t\tcase B: H6 = ((R - G) / C + 4); break;\n\t}\n\treturn [H6 / 6, S, L2 / 2];\n}\n\nfunction hsl2RGB(hsl){\n\tvar H = hsl[0], S = hsl[1], L = hsl[2];\n\tvar C = S * 2 * (L < 0.5 ? L : 1 - L), m = L - C/2;\n\tvar rgb = [m,m,m], h6 = 6*H;\n\n\tvar X;\n\tif(S !== 0) switch(h6|0) {\n\t\tcase 0: case 6: X = C * h6; rgb[0] += C; rgb[1] += X; break;\n\t\tcase 1: X = C * (2 - h6);   rgb[0] += X; rgb[1] += C; break;\n\t\tcase 2: X = C * (h6 - 2);   rgb[1] += C; rgb[2] += X; break;\n\t\tcase 3: X = C * (4 - h6);   rgb[1] += X; rgb[2] += C; break;\n\t\tcase 4: X = C * (h6 - 4);   rgb[2] += C; rgb[0] += X; break;\n\t\tcase 5: X = C * (6 - h6);   rgb[2] += X; rgb[0] += C; break;\n\t}\n\tfor(var i = 0; i != 3; ++i) rgb[i] = Math.round(rgb[i]*255);\n\treturn rgb;\n}\n\n/* 18.8.3 bgColor tint algorithm */\nfunction rgb_tint(hex, tint) {\n\tif(tint === 0) return hex;\n\tvar hsl = rgb2HSL(hex2RGB(hex));\n\tif (tint < 0) hsl[2] = hsl[2] * (1 + tint);\n\telse hsl[2] = 1 - (1 - hsl[2]) * (1 - tint);\n\treturn rgb2Hex(hsl2RGB(hsl));\n}\n\n/* 18.3.1.13 width calculations */\n/* [MS-OI29500] 2.1.595 Column Width & Formatting */\nvar DEF_MDW = 6, MAX_MDW = 15, MIN_MDW = 1, MDW = DEF_MDW;\nfunction width2px(width) { return Math.floor(( width + (Math.round(128/MDW))/256 )* MDW ); }\nfunction px2char(px) { return (Math.floor((px - 5)/MDW * 100 + 0.5))/100; }\nfunction char2width(chr) { return (Math.round((chr * MDW + 5)/MDW*256))/256; }\n//function px2char_(px) { return (((px - 5)/MDW * 100 + 0.5))/100; }\n//function char2width_(chr) { return (((chr * MDW + 5)/MDW*256))/256; }\nfunction cycle_width(collw) { return char2width(px2char(width2px(collw))); }\n/* XLSX/XLSB/XLS specify width in units of MDW */\nfunction find_mdw_colw(collw) {\n\tvar delta = Math.abs(collw - cycle_width(collw)), _MDW = MDW;\n\tif(delta > 0.005) for(MDW=MIN_MDW; MDW<MAX_MDW; ++MDW) if(Math.abs(collw - cycle_width(collw)) <= delta) { delta = Math.abs(collw - cycle_width(collw)); _MDW = MDW; }\n\tMDW = _MDW;\n}\n/* XLML specifies width in terms of pixels */\n/*function find_mdw_wpx(wpx) {\n\tvar delta = Infinity, guess = 0, _MDW = MIN_MDW;\n\tfor(MDW=MIN_MDW; MDW<MAX_MDW; ++MDW) {\n\t\tguess = char2width_(px2char_(wpx))*256;\n\t\tguess = (guess) % 1;\n\t\tif(guess > 0.5) guess--;\n\t\tif(Math.abs(guess) < delta) { delta = Math.abs(guess); _MDW = MDW; }\n\t}\n\tMDW = _MDW;\n}*/\n\nfunction process_col(coll/*:ColInfo*/) {\n\tif(coll.width) {\n\t\tcoll.wpx = width2px(coll.width);\n\t\tcoll.wch = px2char(coll.wpx);\n\t\tcoll.MDW = MDW;\n\t} else if(coll.wpx) {\n\t\tcoll.wch = px2char(coll.wpx);\n\t\tcoll.width = char2width(coll.wch);\n\t\tcoll.MDW = MDW;\n\t} else if(typeof coll.wch == 'number') {\n\t\tcoll.width = char2width(coll.wch);\n\t\tcoll.wpx = width2px(coll.width);\n\t\tcoll.MDW = MDW;\n\t}\n\tif(coll.customWidth) delete coll.customWidth;\n}\n\nvar DEF_PPI = 96, PPI = DEF_PPI;\nfunction px2pt(px) { return px * 96 / PPI; }\nfunction pt2px(pt) { return pt * PPI / 96; }\n\n/* [MS-EXSPXML3] 2.4.54 ST_enmPattern */\nvar XLMLPatternTypeMap = {\n\t\"None\": \"none\",\n\t\"Solid\": \"solid\",\n\t\"Gray50\": \"mediumGray\",\n\t\"Gray75\": \"darkGray\",\n\t\"Gray25\": \"lightGray\",\n\t\"HorzStripe\": \"darkHorizontal\",\n\t\"VertStripe\": \"darkVertical\",\n\t\"ReverseDiagStripe\": \"darkDown\",\n\t\"DiagStripe\": \"darkUp\",\n\t\"DiagCross\": \"darkGrid\",\n\t\"ThickDiagCross\": \"darkTrellis\",\n\t\"ThinHorzStripe\": \"lightHorizontal\",\n\t\"ThinVertStripe\": \"lightVertical\",\n\t\"ThinReverseDiagStripe\": \"lightDown\",\n\t\"ThinHorzCross\": \"lightGrid\"\n};\n\n/* 18.8.5 borders CT_Borders */\nfunction parse_borders(t, styles, themes, opts) {\n\tstyles.Borders = [];\n\tvar border = {};\n\tvar pass = false;\n\t(t.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '<borders': case '<borders>': case '</borders>': break;\n\n\t\t\t/* 18.8.4 border CT_Border */\n\t\t\tcase '<border': case '<border>': case '<border/>':\n\t\t\t\tborder = /*::(*/{}/*:: :any)*/;\n\t\t\t\tif(y.diagonalUp) border.diagonalUp = parsexmlbool(y.diagonalUp);\n\t\t\t\tif(y.diagonalDown) border.diagonalDown = parsexmlbool(y.diagonalDown);\n\t\t\t\tstyles.Borders.push(border);\n\t\t\t\tbreak;\n\t\t\tcase '</border>': break;\n\n\t\t\t/* note: not in spec, appears to be CT_BorderPr */\n\t\t\tcase '<left/>': break;\n\t\t\tcase '<left': case '<left>': break;\n\t\t\tcase '</left>': break;\n\n\t\t\t/* note: not in spec, appears to be CT_BorderPr */\n\t\t\tcase '<right/>': break;\n\t\t\tcase '<right': case '<right>': break;\n\t\t\tcase '</right>': break;\n\n\t\t\t/* 18.8.43 top CT_BorderPr */\n\t\t\tcase '<top/>': break;\n\t\t\tcase '<top': case '<top>': break;\n\t\t\tcase '</top>': break;\n\n\t\t\t/* 18.8.6 bottom CT_BorderPr */\n\t\t\tcase '<bottom/>': break;\n\t\t\tcase '<bottom': case '<bottom>': break;\n\t\t\tcase '</bottom>': break;\n\n\t\t\t/* 18.8.13 diagonal CT_BorderPr */\n\t\t\tcase '<diagonal': case '<diagonal>': case '<diagonal/>': break;\n\t\t\tcase '</diagonal>': break;\n\n\t\t\t/* 18.8.25 horizontal CT_BorderPr */\n\t\t\tcase '<horizontal': case '<horizontal>': case '<horizontal/>': break;\n\t\t\tcase '</horizontal>': break;\n\n\t\t\t/* 18.8.44 vertical CT_BorderPr */\n\t\t\tcase '<vertical': case '<vertical>': case '<vertical/>': break;\n\t\t\tcase '</vertical>': break;\n\n\t\t\t/* 18.8.37 start CT_BorderPr */\n\t\t\tcase '<start': case '<start>': case '<start/>': break;\n\t\t\tcase '</start>': break;\n\n\t\t\t/* 18.8.16 end CT_BorderPr */\n\t\t\tcase '<end': case '<end>': case '<end/>': break;\n\t\t\tcase '</end>': break;\n\n\t\t\t/* 18.8.? color CT_Color */\n\t\t\tcase '<color': case '<color>':\n\t\t\t\tbreak;\n\t\t\tcase '<color/>': case '</color>': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '<extLst': case '<extLst>': case '</extLst>': break;\n\t\t\tcase '<ext': pass = true; break;\n\t\t\tcase '</ext>': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in borders');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.21 fills CT_Fills */\nfunction parse_fills(t, styles, themes, opts) {\n\tstyles.Fills = [];\n\tvar fill = {};\n\tvar pass = false;\n\t(t.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '<fills': case '<fills>': case '</fills>': break;\n\n\t\t\t/* 18.8.20 fill CT_Fill */\n\t\t\tcase '<fill>': case '<fill': case '<fill/>':\n\t\t\t\tfill = {}; styles.Fills.push(fill); break;\n\t\t\tcase '</fill>': break;\n\n\t\t\t/* 18.8.24 gradientFill CT_GradientFill */\n\t\t\tcase '<gradientFill>': break;\n\t\t\tcase '<gradientFill':\n\t\t\tcase '</gradientFill>': styles.Fills.push(fill); fill = {}; break;\n\n\t\t\t/* 18.8.32 patternFill CT_PatternFill */\n\t\t\tcase '<patternFill': case '<patternFill>':\n\t\t\t\tif(y.patternType) fill.patternType = y.patternType;\n\t\t\t\tbreak;\n\t\t\tcase '<patternFill/>': case '</patternFill>': break;\n\n\t\t\t/* 18.8.3 bgColor CT_Color */\n\t\t\tcase '<bgColor':\n\t\t\t\tif(!fill.bgColor) fill.bgColor = {};\n\t\t\t\tif(y.indexed) fill.bgColor.indexed = parseInt(y.indexed, 10);\n\t\t\t\tif(y.theme) fill.bgColor.theme = parseInt(y.theme, 10);\n\t\t\t\tif(y.tint) fill.bgColor.tint = parseFloat(y.tint);\n\t\t\t\t/* Excel uses ARGB strings */\n\t\t\t\tif(y.rgb) fill.bgColor.rgb = y.rgb.slice(-6);\n\t\t\t\tbreak;\n\t\t\tcase '<bgColor/>': case '</bgColor>': break;\n\n\t\t\t/* 18.8.19 fgColor CT_Color */\n\t\t\tcase '<fgColor':\n\t\t\t\tif(!fill.fgColor) fill.fgColor = {};\n\t\t\t\tif(y.theme) fill.fgColor.theme = parseInt(y.theme, 10);\n\t\t\t\tif(y.tint) fill.fgColor.tint = parseFloat(y.tint);\n\t\t\t\t/* Excel uses ARGB strings */\n\t\t\t\tif(y.rgb != null) fill.fgColor.rgb = y.rgb.slice(-6);\n\t\t\t\tbreak;\n\t\t\tcase '<fgColor/>': case '</fgColor>': break;\n\n\t\t\t/* 18.8.38 stop CT_GradientStop */\n\t\t\tcase '<stop': case '<stop/>': break;\n\t\t\tcase '</stop>': break;\n\n\t\t\t/* 18.8.? color CT_Color */\n\t\t\tcase '<color': case '<color/>': break;\n\t\t\tcase '</color>': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '<extLst': case '<extLst>': case '</extLst>': break;\n\t\t\tcase '<ext': pass = true; break;\n\t\t\tcase '</ext>': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in fills');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.23 fonts CT_Fonts */\nfunction parse_fonts(t, styles, themes, opts) {\n\tstyles.Fonts = [];\n\tvar font = {};\n\tvar pass = false;\n\t(t.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '<fonts': case '<fonts>': case '</fonts>': break;\n\n\t\t\t/* 18.8.22 font CT_Font */\n\t\t\tcase '<font': case '<font>': break;\n\t\t\tcase '</font>': case '<font/>':\n\t\t\t\tstyles.Fonts.push(font);\n\t\t\t\tfont = {};\n\t\t\t\tbreak;\n\n\t\t\t/* 18.8.29 name CT_FontName */\n\t\t\tcase '<name': if(y.val) font.name = utf8read(y.val); break;\n\t\t\tcase '<name/>': case '</name>': break;\n\n\t\t\t/* 18.8.2  b CT_BooleanProperty */\n\t\t\tcase '<b': font.bold = y.val ? parsexmlbool(y.val) : 1; break;\n\t\t\tcase '<b/>': font.bold = 1; break;\n\n\t\t\t/* 18.8.26 i CT_BooleanProperty */\n\t\t\tcase '<i': font.italic = y.val ? parsexmlbool(y.val) : 1; break;\n\t\t\tcase '<i/>': font.italic = 1; break;\n\n\t\t\t/* 18.4.13 u CT_UnderlineProperty */\n\t\t\tcase '<u':\n\t\t\t\tswitch(y.val) {\n\t\t\t\t\tcase \"none\": font.underline = 0x00; break;\n\t\t\t\t\tcase \"single\": font.underline = 0x01; break;\n\t\t\t\t\tcase \"double\": font.underline = 0x02; break;\n\t\t\t\t\tcase \"singleAccounting\": font.underline = 0x21; break;\n\t\t\t\t\tcase \"doubleAccounting\": font.underline = 0x22; break;\n\t\t\t\t} break;\n\t\t\tcase '<u/>': font.underline = 1; break;\n\n\t\t\t/* 18.4.10 strike CT_BooleanProperty */\n\t\t\tcase '<strike': font.strike = y.val ? parsexmlbool(y.val) : 1; break;\n\t\t\tcase '<strike/>': font.strike = 1; break;\n\n\t\t\t/* 18.4.2  outline CT_BooleanProperty */\n\t\t\tcase '<outline': font.outline = y.val ? parsexmlbool(y.val) : 1; break;\n\t\t\tcase '<outline/>': font.outline = 1; break;\n\n\t\t\t/* 18.8.36 shadow CT_BooleanProperty */\n\t\t\tcase '<shadow': font.shadow = y.val ? parsexmlbool(y.val) : 1; break;\n\t\t\tcase '<shadow/>': font.shadow = 1; break;\n\n\t\t\t/* 18.8.12 condense CT_BooleanProperty */\n\t\t\tcase '<condense': font.condense = y.val ? parsexmlbool(y.val) : 1; break;\n\t\t\tcase '<condense/>': font.condense = 1; break;\n\n\t\t\t/* 18.8.17 extend CT_BooleanProperty */\n\t\t\tcase '<extend': font.extend = y.val ? parsexmlbool(y.val) : 1; break;\n\t\t\tcase '<extend/>': font.extend = 1; break;\n\n\t\t\t/* 18.4.11 sz CT_FontSize */\n\t\t\tcase '<sz': if(y.val) font.sz = +y.val; break;\n\t\t\tcase '<sz/>': case '</sz>': break;\n\n\t\t\t/* 18.4.14 vertAlign CT_VerticalAlignFontProperty */\n\t\t\tcase '<vertAlign': if(y.val) font.vertAlign = y.val; break;\n\t\t\tcase '<vertAlign/>': case '</vertAlign>': break;\n\n\t\t\t/* 18.8.18 family CT_FontFamily */\n\t\t\tcase '<family': if(y.val) font.family = parseInt(y.val,10); break;\n\t\t\tcase '<family/>': case '</family>': break;\n\n\t\t\t/* 18.8.35 scheme CT_FontScheme */\n\t\t\tcase '<scheme': if(y.val) font.scheme = y.val; break;\n\t\t\tcase '<scheme/>': case '</scheme>': break;\n\n\t\t\t/* 18.4.1 charset CT_IntProperty */\n\t\t\tcase '<charset':\n\t\t\t\tif(y.val == '1') break;\n\t\t\t\ty.codepage = CS2CP[parseInt(y.val, 10)];\n\t\t\t\tbreak;\n\n\t\t\t/* 18.?.? color CT_Color */\n\t\t\tcase '<color':\n\t\t\t\tif(!font.color) font.color = {};\n\t\t\t\tif(y.auto) font.color.auto = parsexmlbool(y.auto);\n\n\t\t\t\tif(y.rgb) font.color.rgb = y.rgb.slice(-6);\n\t\t\t\telse if(y.indexed) {\n\t\t\t\t\tfont.color.index = parseInt(y.indexed, 10);\n\t\t\t\t\tvar icv = XLSIcv[font.color.index];\n\t\t\t\t\tif(font.color.index == 81) icv = XLSIcv[1];\n\t\t\t\t\tif(!icv) icv = XLSIcv[1]; //throw new Error(x); // note: 206 is valid\n\t\t\t\t\tfont.color.rgb = icv[0].toString(16) + icv[1].toString(16) + icv[2].toString(16);\n\t\t\t\t} else if(y.theme) {\n\t\t\t\t\tfont.color.theme = parseInt(y.theme, 10);\n\t\t\t\t\tif(y.tint) font.color.tint = parseFloat(y.tint);\n\t\t\t\t\tif(y.theme && themes.themeElements && themes.themeElements.clrScheme) {\n\t\t\t\t\t\tfont.color.rgb = rgb_tint(themes.themeElements.clrScheme[font.color.theme].rgb, font.color.tint || 0);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase '<color/>': case '</color>': break;\n\n\t\t\t/* note: sometimes mc:AlternateContent appears bare */\n\t\t\tcase '<AlternateContent': pass = true; break;\n\t\t\tcase '</AlternateContent>': pass = false; break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '<extLst': case '<extLst>': case '</extLst>': break;\n\t\t\tcase '<ext': pass = true; break;\n\t\t\tcase '</ext>': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in fonts');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.31 numFmts CT_NumFmts */\nfunction parse_numFmts(t, styles, opts) {\n\tstyles.NumberFmt = [];\n\tvar k/*Array<number>*/ = (keys(table_fmt)/*:any*/);\n\tfor(var i=0; i < k.length; ++i) styles.NumberFmt[k[i]] = table_fmt[k[i]];\n\tvar m = t.match(tagregex);\n\tif(!m) return;\n\tfor(i=0; i < m.length; ++i) {\n\t\tvar y = parsexmltag(m[i]);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '<numFmts': case '</numFmts>': case '<numFmts/>': case '<numFmts>': break;\n\t\t\tcase '<numFmt': {\n\t\t\t\tvar f=unescapexml(utf8read(y.formatCode)), j=parseInt(y.numFmtId,10);\n\t\t\t\tstyles.NumberFmt[j] = f;\n\t\t\t\tif(j>0) {\n\t\t\t\t\tif(j > 0x188) {\n\t\t\t\t\t\tfor(j = 0x188; j > 0x3c; --j) if(styles.NumberFmt[j] == null) break;\n\t\t\t\t\t\tstyles.NumberFmt[j] = f;\n\t\t\t\t\t}\n\t\t\t\t\tSSF__load(f,j);\n\t\t\t\t}\n\t\t\t} break;\n\t\t\tcase '</numFmt>': break;\n\t\t\tdefault: if(opts.WTF) throw new Error('unrecognized ' + y[0] + ' in numFmts');\n\t\t}\n\t}\n}\n\nfunction write_numFmts(NF/*:{[n:number|string]:string}*//*::, opts*/) {\n\tvar o = [\"<numFmts>\"];\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\n\t\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) o[o.length] = (writextag('numFmt',null,{numFmtId:i,formatCode:escapexml(NF[i])}));\n\t});\n\tif(o.length === 1) return \"\";\n\to[o.length] = (\"</numFmts>\");\n\to[0] = writextag('numFmts', null, { count:o.length-2 }).replace(\"/>\", \">\");\n\treturn o.join(\"\");\n}\n\n/* 18.8.10 cellXfs CT_CellXfs */\nvar cellXF_uint = [ \"numFmtId\", \"fillId\", \"fontId\", \"borderId\", \"xfId\" ];\nvar cellXF_bool = [ \"applyAlignment\", \"applyBorder\", \"applyFill\", \"applyFont\", \"applyNumberFormat\", \"applyProtection\", \"pivotButton\", \"quotePrefix\" ];\nfunction parse_cellXfs(t, styles, opts) {\n\tstyles.CellXf = [];\n\tvar xf;\n\tvar pass = false;\n\t(t.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x), i = 0;\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '<cellXfs': case '<cellXfs>': case '<cellXfs/>': case '</cellXfs>': break;\n\n\t\t\t/* 18.8.45 xf CT_Xf */\n\t\t\tcase '<xf': case '<xf/>': case '<xf>':\n\t\t\t\txf = y;\n\t\t\t\tdelete xf[0];\n\t\t\t\tfor(i = 0; i < cellXF_uint.length; ++i) if(xf[cellXF_uint[i]])\n\t\t\t\t\txf[cellXF_uint[i]] = parseInt(xf[cellXF_uint[i]], 10);\n\t\t\t\tfor(i = 0; i < cellXF_bool.length; ++i) if(xf[cellXF_bool[i]])\n\t\t\t\t\txf[cellXF_bool[i]] = parsexmlbool(xf[cellXF_bool[i]]);\n\t\t\t\tif(styles.NumberFmt && xf.numFmtId > 0x188) {\n\t\t\t\t\tfor(i = 0x188; i > 0x3c; --i) if(styles.NumberFmt[xf.numFmtId] == styles.NumberFmt[i]) { xf.numFmtId = i; break; }\n\t\t\t\t}\n\t\t\t\tstyles.CellXf.push(xf); break;\n\t\t\tcase '</xf>': break;\n\n\t\t\t/* 18.8.1 alignment CT_CellAlignment */\n\t\t\tcase '<alignment': case '<alignment/>': case '<alignment>':\n\t\t\t\tvar alignment = {};\n\t\t\t\tif(y.vertical) alignment.vertical = y.vertical;\n\t\t\t\tif(y.horizontal) alignment.horizontal = y.horizontal;\n\t\t\t\tif(y.textRotation != null) alignment.textRotation = y.textRotation;\n\t\t\t\tif(y.indent) alignment.indent = y.indent;\n\t\t\t\tif(y.wrapText) alignment.wrapText = parsexmlbool(y.wrapText);\n\t\t\t\txf.alignment = alignment;\n\t\t\t\tbreak;\n\t\t\tcase '</alignment>': break;\n\n\t\t\t/* 18.8.33 protection CT_CellProtection */\n\t\t\tcase '<protection': case '<protection>':\n\t\t\t\tbreak;\n\t\t\tcase '</protection>': case '<protection/>': break;\n\n\t\t\t/* note: sometimes mc:AlternateContent appears bare */\n\t\t\tcase '<AlternateContent': case '<AlternateContent>': pass = true; break;\n\t\t\tcase '</AlternateContent>': pass = false; break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '<extLst': case '<extLst>': case '</extLst>': break;\n\t\t\tcase '<ext': pass = true; break;\n\t\t\tcase '</ext>': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in cellXfs');\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction write_cellXfs(cellXfs)/*:string*/ {\n\tvar o/*:Array<string>*/ = [];\n\to[o.length] = (writextag('cellXfs',null));\n\tcellXfs.forEach(function(c) {\n\t\to[o.length] = (writextag('xf', null, c));\n\t});\n\to[o.length] = (\"</cellXfs>\");\n\tif(o.length === 2) return \"\";\n\to[0] = writextag('cellXfs',null, {count:o.length-2}).replace(\"/>\",\">\");\n\treturn o.join(\"\");\n}\n\n/* 18.8 Styles CT_Stylesheet*/\nvar parse_sty_xml= /*#__PURE__*/(function make_pstyx() {\n\nreturn function parse_sty_xml(data, themes, opts) {\n\tvar styles = {};\n\tif(!data) return styles;\n\tdata = remove_doctype(str_remove_ng(data, \"<!--\", \"-->\"));\n\t/* 18.8.39 styleSheet CT_Stylesheet */\n\tvar t;\n\n\t/* 18.8.31 numFmts CT_NumFmts ? */\n\tif((t=str_match_xml_ns(data, \"numFmts\"))) parse_numFmts(t[0], styles, opts);\n\n\t/* 18.8.23 fonts CT_Fonts ? */\n\tif((t=str_match_xml_ns(data, \"fonts\"))) parse_fonts(t[0], styles, themes, opts);\n\n\t/* 18.8.21 fills CT_Fills ? */\n\tif((t=str_match_xml_ns(data, \"fills\"))) parse_fills(t[0], styles, themes, opts);\n\n\t/* 18.8.5  borders CT_Borders ? */\n\tif((t=str_match_xml_ns(data, \"borders\"))) parse_borders(t[0], styles, themes, opts);\n\n\t/* 18.8.9  cellStyleXfs CT_CellStyleXfs ? */\n\t/* 18.8.8  cellStyles CT_CellStyles ? */\n\n\t/* 18.8.10 cellXfs CT_CellXfs ? */\n\tif((t=str_match_xml_ns(data, \"cellXfs\"))) parse_cellXfs(t[0], styles, opts);\n\n\t/* 18.8.15 dxfs CT_Dxfs ? */\n\t/* 18.8.42 tableStyles CT_TableStyles ? */\n\t/* 18.8.11 colors CT_Colors ? */\n\t/* 18.2.10 extLst CT_ExtensionList ? */\n\n\treturn styles;\n};\n})();\n\nfunction write_sty_xml(wb/*:Workbook*/, opts)/*:string*/ {\n\tvar o = [XML_HEADER, writextag('styleSheet', null, {\n\t\t'xmlns': XMLNS_main[0],\n\t\t'xmlns:vt': XMLNS.vt\n\t})], w;\n\tif(wb.SSF && (w = write_numFmts(wb.SSF)) != null) o[o.length] = w;\n\to[o.length] = ('<fonts count=\"1\"><font><sz val=\"12\"/><color theme=\"1\"/><name val=\"Calibri\"/><family val=\"2\"/><scheme val=\"minor\"/></font></fonts>');\n\to[o.length] = ('<fills count=\"2\"><fill><patternFill patternType=\"none\"/></fill><fill><patternFill patternType=\"gray125\"/></fill></fills>');\n\to[o.length] = ('<borders count=\"1\"><border><left/><right/><top/><bottom/><diagonal/></border></borders>');\n\to[o.length] = ('<cellStyleXfs count=\"1\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\"/></cellStyleXfs>');\n\tif((w = write_cellXfs(opts.cellXfs))) o[o.length] = (w);\n\to[o.length] = ('<cellStyles count=\"1\"><cellStyle name=\"Normal\" xfId=\"0\" builtinId=\"0\"/></cellStyles>');\n\to[o.length] = ('<dxfs count=\"0\"/>');\n\to[o.length] = ('<tableStyles count=\"0\" defaultTableStyle=\"TableStyleMedium9\" defaultPivotStyle=\"PivotStyleMedium4\"/>');\n\n\tif(o.length>2){ o[o.length] = ('</styleSheet>'); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.657 BrtFmt */\nfunction parse_BrtFmt(data, length/*:number*/) {\n\tvar numFmtId = data.read_shift(2);\n\tvar stFmtCode = parse_XLWideString(data,length-2);\n\treturn [numFmtId, stFmtCode];\n}\nfunction write_BrtFmt(i/*:number*/, f/*:string*/, o) {\n\tif(!o) o = new_buf(6 + 4 * f.length);\n\to.write_shift(2, i);\n\twrite_XLWideString(f, o);\n\tvar out = (o.length > o.l) ? o.slice(0, o.l) : o;\n\tif(o.l == null) o.l = o.length;\n\treturn out;\n}\n\n/* [MS-XLSB] 2.4.659 BrtFont TODO */\nfunction parse_BrtFont(data, length/*:number*/, opts) {\n\tvar out = ({}/*:any*/);\n\n\tout.sz = data.read_shift(2) / 20;\n\n\tvar grbit = parse_FontFlags(data, 2, opts);\n\tif(grbit.fItalic) out.italic = 1;\n\tif(grbit.fCondense) out.condense = 1;\n\tif(grbit.fExtend) out.extend = 1;\n\tif(grbit.fShadow) out.shadow = 1;\n\tif(grbit.fOutline) out.outline = 1;\n\tif(grbit.fStrikeout) out.strike = 1;\n\n\tvar bls = data.read_shift(2);\n\tif(bls === 0x02BC) out.bold = 1;\n\n\tswitch(data.read_shift(2)) {\n\t\t/* case 0: out.vertAlign = \"baseline\"; break; */\n\t\tcase 1: out.vertAlign = \"superscript\"; break;\n\t\tcase 2: out.vertAlign = \"subscript\"; break;\n\t}\n\n\tvar underline = data.read_shift(1);\n\tif(underline != 0) out.underline = underline;\n\n\tvar family = data.read_shift(1);\n\tif(family > 0) out.family = family;\n\n\tvar bCharSet = data.read_shift(1);\n\tif(bCharSet > 0) out.charset = bCharSet;\n\n\tdata.l++;\n\tout.color = parse_BrtColor(data, 8);\n\n\tswitch(data.read_shift(1)) {\n\t\t/* case 0: out.scheme = \"none\": break; */\n\t\tcase 1: out.scheme = \"major\"; break;\n\t\tcase 2: out.scheme = \"minor\"; break;\n\t}\n\n\tout.name = parse_XLWideString(data, length - 21);\n\n\treturn out;\n}\nfunction write_BrtFont(font/*:any*/, o) {\n\tif(!o) o = new_buf(25+4*32);\n\to.write_shift(2, font.sz * 20);\n\twrite_FontFlags(font, o);\n\to.write_shift(2, font.bold ? 0x02BC : 0x0190);\n\tvar sss = 0;\n\tif(font.vertAlign == \"superscript\") sss = 1;\n\telse if(font.vertAlign == \"subscript\") sss = 2;\n\to.write_shift(2, sss);\n\to.write_shift(1, font.underline || 0);\n\to.write_shift(1, font.family || 0);\n\to.write_shift(1, font.charset || 0);\n\to.write_shift(1, 0);\n\twrite_BrtColor(font.color, o);\n\tvar scheme = 0;\n\tif(font.scheme == \"major\") scheme = 1;\n\tif(font.scheme == \"minor\") scheme = 2;\n\to.write_shift(1, scheme);\n\twrite_XLWideString(font.name, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.650 BrtFill */\nvar XLSBFillPTNames = [\n\t\"none\",\n\t\"solid\",\n\t\"mediumGray\",\n\t\"darkGray\",\n\t\"lightGray\",\n\t\"darkHorizontal\",\n\t\"darkVertical\",\n\t\"darkDown\",\n\t\"darkUp\",\n\t\"darkGrid\",\n\t\"darkTrellis\",\n\t\"lightHorizontal\",\n\t\"lightVertical\",\n\t\"lightDown\",\n\t\"lightUp\",\n\t\"lightGrid\",\n\t\"lightTrellis\",\n\t\"gray125\",\n\t\"gray0625\"\n];\nvar rev_XLSBFillPTNames/*:EvertNumType*/;\n/* TODO: gradient fill representation */\nvar parse_BrtFill = parsenoop;\nfunction write_BrtFill(fill, o) {\n\tif(!o) o = new_buf(4*3 + 8*7 + 16*1);\n\tif(!rev_XLSBFillPTNames) rev_XLSBFillPTNames = (evert(XLSBFillPTNames)/*:any*/);\n\tvar fls/*:number*/ = rev_XLSBFillPTNames[fill.patternType];\n\tif(fls == null) fls = 0x28;\n\to.write_shift(4, fls);\n\tvar j = 0;\n\tif(fls != 0x28) {\n\t\t/* TODO: custom FG Color */\n\t\twrite_BrtColor({auto:1}, o);\n\t\t/* TODO: custom BG Color */\n\t\twrite_BrtColor({auto:1}, o);\n\n\t\tfor(; j < 12; ++j) o.write_shift(4, 0);\n\t} else {\n\t\tfor(; j < 4; ++j) o.write_shift(4, 0);\n\n\t\tfor(; j < 12; ++j) o.write_shift(4, 0); /* TODO */\n\t\t/* iGradientType */\n\t\t/* xnumDegree */\n\t\t/* xnumFillToLeft */\n\t\t/* xnumFillToRight */\n\t\t/* xnumFillToTop */\n\t\t/* xnumFillToBottom */\n\t\t/* cNumStop */\n\t\t/* xfillGradientStop */\n\t}\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.824 BrtXF */\nfunction parse_BrtXF(data, length/*:number*/) {\n\tvar tgt = data.l + length;\n\tvar ixfeParent = data.read_shift(2);\n\tvar ifmt = data.read_shift(2);\n\tdata.l = tgt;\n\treturn {ixfe:ixfeParent, numFmtId:ifmt };\n}\nfunction write_BrtXF(data, ixfeP, o) {\n\tif(!o) o = new_buf(16);\n\to.write_shift(2, ixfeP||0);\n\to.write_shift(2, data.numFmtId||0);\n\to.write_shift(2, 0); /* iFont */\n\to.write_shift(2, 0); /* iFill */\n\to.write_shift(2, 0); /* ixBorder */\n\to.write_shift(1, 0); /* trot */\n\to.write_shift(1, 0); /* indent */\n\tvar flow = 0;\n\to.write_shift(1, flow); /* flags */\n\to.write_shift(1, 0); /* flags */\n\to.write_shift(1, 0); /* xfGrbitAtr */\n\to.write_shift(1, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.4 Blxf TODO */\nfunction write_Blxf(data, o) {\n\tif(!o) o = new_buf(10);\n\to.write_shift(1, 0); /* dg */\n\to.write_shift(1, 0);\n\to.write_shift(4, 0); /* color */\n\to.write_shift(4, 0); /* color */\n\treturn o;\n}\n/* [MS-XLSB] 2.4.302 BrtBorder TODO */\nvar parse_BrtBorder = parsenoop;\nfunction write_BrtBorder(border, o) {\n\tif(!o) o = new_buf(51);\n\to.write_shift(1, 0); /* diagonal */\n\twrite_Blxf(null, o); /* top */\n\twrite_Blxf(null, o); /* bottom */\n\twrite_Blxf(null, o); /* left */\n\twrite_Blxf(null, o); /* right */\n\twrite_Blxf(null, o); /* diag */\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.763 BrtStyle TODO */\nfunction write_BrtStyle(style, o) {\n\tif(!o) o = new_buf(12+4*10);\n\to.write_shift(4, style.xfId);\n\to.write_shift(2, 1);\n\to.write_shift(1, +style.builtinId);\n\to.write_shift(1, 0); /* iLevel */\n\twrite_XLNullableWideString(style.name || \"\", o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.272 BrtBeginTableStyles */\nfunction write_BrtBeginTableStyles(cnt, defTableStyle, defPivotStyle) {\n\tvar o = new_buf(4+256*2*4);\n\to.write_shift(4, cnt);\n\twrite_XLNullableWideString(defTableStyle, o);\n\twrite_XLNullableWideString(defPivotStyle, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.1.7.50 Styles */\nfunction parse_sty_bin(data, themes, opts) {\n\tvar styles = {};\n\tstyles.NumberFmt = ([]/*:any*/);\n\tfor(var y in table_fmt) styles.NumberFmt[y] = table_fmt[y];\n\n\tstyles.CellXf = [];\n\tstyles.Fonts = [];\n\tvar state/*:Array<string>*/ = [];\n\tvar pass = false;\n\trecordhopper(data, function hopper_sty(val, R, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x002C: /* BrtFmt */\n\t\t\t\tstyles.NumberFmt[val[0]] = val[1]; SSF__load(val[1], val[0]);\n\t\t\t\tbreak;\n\t\t\tcase 0x002B: /* BrtFont */\n\t\t\t\tstyles.Fonts.push(val);\n\t\t\t\tif(val.color.theme != null && themes && themes.themeElements && themes.themeElements.clrScheme) {\n\t\t\t\t\tval.color.rgb = rgb_tint(themes.themeElements.clrScheme[val.color.theme].rgb, val.color.tint || 0);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x0401: /* BrtKnownFonts */ break;\n\t\t\tcase 0x002D: /* BrtFill */\n\t\t\t\tbreak;\n\t\t\tcase 0x002E: /* BrtBorder */\n\t\t\t\tbreak;\n\t\t\tcase 0x002F: /* BrtXF */\n\t\t\t\tif(state[state.length - 1] == 0x0269 /* BrtBeginCellXFs */) {\n\t\t\t\t\tstyles.CellXf.push(val);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x0030: /* BrtStyle */\n\t\t\tcase 0x01FB: /* BrtDXF */\n\t\t\tcase 0x023C: /* BrtMRUColor */\n\t\t\tcase 0x01DB: /* BrtIndexedColor */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0493: /* BrtDXF14 */\n\t\t\tcase 0x0836: /* BrtDXF15 */\n\t\t\tcase 0x046A: /* BrtSlicerStyleElement */\n\t\t\tcase 0x0200: /* BrtTableStyleElement */\n\t\t\tcase 0x082F: /* BrtTimelineStyleElement */\n\t\t\tcase 0x0C00: /* BrtUid */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* BrtFRTBegin */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* BrtFRTEnd */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* BrtACBegin */\n\t\t\t\tstate.push(RT); pass = true; break;\n\t\t\tcase 0x0026: /* BrtACEnd */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T > 0) state.push(RT);\n\t\t\t\telse if(R.T < 0) state.pop();\n\t\t\t\telse if(!pass || (opts.WTF && state[state.length-1] != 0x0025 /* BrtACBegin */)) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t});\n\treturn styles;\n}\n\nfunction write_FMTS_bin(ba, NF/*:?SSFTable*/) {\n\tif(!NF) return;\n\tvar cnt = 0;\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\n\t\t/*:: if(!NF) return; */\n\t\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) ++cnt;\n\t});\n\n\tif(cnt == 0) return;\n\twrite_record(ba, 0x0267 /* BrtBeginFmts */, write_UInt32LE(cnt));\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\n\t\t/*:: if(!NF) return; */\n\t\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) write_record(ba, 0x002C /* BrtFmt */, write_BrtFmt(i, NF[i]));\n\t});\n\twrite_record(ba, 0x0268 /* BrtEndFmts */);\n}\n\nfunction write_FONTS_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, 0x0263 /* BrtBeginFonts */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x002B /* BrtFont */, write_BrtFont({\n\t\tsz:12,\n\t\tcolor: {theme:1},\n\t\tname: \"Calibri\",\n\t\tfamily: 2,\n\t\tscheme: \"minor\"\n\t}));\n\t/* 1*65491BrtFont [ACFONTS] */\n\twrite_record(ba, 0x0264 /* BrtEndFonts */);\n}\n\nfunction write_FILLS_bin(ba/*::, data*/) {\n\tvar cnt = 2;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, 0x025B /* BrtBeginFills */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x002D /* BrtFill */, write_BrtFill({patternType:\"none\"}));\n\twrite_record(ba, 0x002D /* BrtFill */, write_BrtFill({patternType:\"gray125\"}));\n\t/* 1*65431BrtFill */\n\twrite_record(ba, 0x025C /* BrtEndFills */);\n}\n\nfunction write_BORDERS_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, 0x0265 /* BrtBeginBorders */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x002E /* BrtBorder */, write_BrtBorder({}));\n\t/* 1*65430BrtBorder */\n\twrite_record(ba, 0x0266 /* BrtEndBorders */);\n}\n\nfunction write_CELLSTYLEXFS_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\twrite_record(ba, 0x0272 /* BrtBeginCellStyleXFs */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x002F /* BrtXF */, write_BrtXF({\n\t\tnumFmtId: 0,\n\t\tfontId:   0,\n\t\tfillId:   0,\n\t\tborderId: 0\n\t}, 0xFFFF));\n\t/* 1*65430(BrtXF *FRT) */\n\twrite_record(ba, 0x0273 /* BrtEndCellStyleXFs */);\n}\n\nfunction write_CELLXFS_bin(ba, data) {\n\twrite_record(ba, 0x0269 /* BrtBeginCellXFs */, write_UInt32LE(data.length));\n\tdata.forEach(function(c) { write_record(ba, 0x002F /* BrtXF */, write_BrtXF(c,0)); });\n\t/* 1*65430(BrtXF *FRT) */\n\twrite_record(ba, 0x026A /* BrtEndCellXFs */);\n}\n\nfunction write_STYLES_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\n\twrite_record(ba, 0x026B /* BrtBeginStyles */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x0030 /* BrtStyle */, write_BrtStyle({\n\t\txfId:0,\n\t\tbuiltinId:0,\n\t\tname:\"Normal\"\n\t}));\n\t/* 1*65430(BrtStyle *FRT) */\n\twrite_record(ba, 0x026C /* BrtEndStyles */);\n}\n\nfunction write_DXFS_bin(ba/*::, data*/) {\n\tvar cnt = 0;\n\n\twrite_record(ba, 0x01F9 /* BrtBeginDXFs */, write_UInt32LE(cnt));\n\t/* *2147483647(BrtDXF *FRT) */\n\twrite_record(ba, 0x01FA /* BrtEndDXFs */);\n}\n\nfunction write_TABLESTYLES_bin(ba/*::, data*/) {\n\tvar cnt = 0;\n\n\twrite_record(ba, 0x01FC /* BrtBeginTableStyles */, write_BrtBeginTableStyles(cnt, \"TableStyleMedium9\", \"PivotStyleMedium4\"));\n\t/* *TABLESTYLE */\n\twrite_record(ba, 0x01FD /* BrtEndTableStyles */);\n}\n\nfunction write_COLORPALETTE_bin(/*::ba, data*/) {\n\treturn;\n\t/* BrtBeginColorPalette [INDEXEDCOLORS] [MRUCOLORS] BrtEndColorPalette */\n}\n\n/* [MS-XLSB] 2.1.7.50 Styles */\nfunction write_sty_bin(wb, opts) {\n\tvar ba = buf_array();\n\twrite_record(ba, 0x0116 /* BrtBeginStyleSheet */);\n\twrite_FMTS_bin(ba, wb.SSF);\n\twrite_FONTS_bin(ba, wb);\n\twrite_FILLS_bin(ba, wb);\n\twrite_BORDERS_bin(ba, wb);\n\twrite_CELLSTYLEXFS_bin(ba, wb);\n\twrite_CELLXFS_bin(ba, opts.cellXfs);\n\twrite_STYLES_bin(ba, wb);\n\twrite_DXFS_bin(ba, wb);\n\twrite_TABLESTYLES_bin(ba, wb);\n\twrite_COLORPALETTE_bin(ba, wb);\n\t/* FRTSTYLESHEET*/\n\twrite_record(ba, 0x0117 /* BrtEndStyleSheet */);\n\treturn ba.end();\n}\n/* Even though theme layout is dk1 lt1 dk2 lt2, true order is lt1 dk1 lt2 dk2 */\nvar XLSXThemeClrScheme = [\n\t'</a:lt1>', '</a:dk1>', '</a:lt2>', '</a:dk2>',\n\t'</a:accent1>', '</a:accent2>', '</a:accent3>',\n\t'</a:accent4>', '</a:accent5>', '</a:accent6>',\n\t'</a:hlink>', '</a:folHlink>'\n];\n/* 20.1.6.2 clrScheme CT_ColorScheme */\nfunction parse_clrScheme(t, themes, opts) {\n\tthemes.themeElements.clrScheme = [];\n\tvar color = {};\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0]) {\n\t\t\t/* 20.1.6.2 clrScheme (Color Scheme) CT_ColorScheme */\n\t\t\tcase '<a:clrScheme': case '</a:clrScheme>': break;\n\n\t\t\t/* 20.1.2.3.32 srgbClr CT_SRgbColor */\n\t\t\tcase '<a:srgbClr':\n\t\t\t\tcolor.rgb = y.val; break;\n\t\t\tcase '</a:srgbClr>': break;\n\n\t\t\t/* 20.1.2.3.33 sysClr CT_SystemColor */\n\t\t\tcase '<a:sysClr':\n\t\t\t\tcolor.rgb = y.lastClr; break;\n\t\t\tcase '</a:sysClr>': break;\n\n\t\t\t/* 20.1.4.1.1 accent1 (Accent 1) */\n\t\t\t/* 20.1.4.1.2 accent2 (Accent 2) */\n\t\t\t/* 20.1.4.1.3 accent3 (Accent 3) */\n\t\t\t/* 20.1.4.1.4 accent4 (Accent 4) */\n\t\t\t/* 20.1.4.1.5 accent5 (Accent 5) */\n\t\t\t/* 20.1.4.1.6 accent6 (Accent 6) */\n\t\t\t/* 20.1.4.1.9 dk1 (Dark 1) */\n\t\t\t/* 20.1.4.1.10 dk2 (Dark 2) */\n\t\t\t/* 20.1.4.1.15 folHlink (Followed Hyperlink) */\n\t\t\t/* 20.1.4.1.19 hlink (Hyperlink) */\n\t\t\t/* 20.1.4.1.22 lt1 (Light 1) */\n\t\t\t/* 20.1.4.1.23 lt2 (Light 2) */\n\t\t\tcase '</a:dk1>':\n\t\t\tcase '</a:lt1>':\n\t\t\tcase '<a:dk1>':\n\t\t\tcase '<a:lt1>':\n\t\t\tcase '<a:dk2>': case '</a:dk2>':\n\t\t\tcase '<a:lt2>': case '</a:lt2>':\n\t\t\tcase '<a:accent1>': case '</a:accent1>':\n\t\t\tcase '<a:accent2>': case '</a:accent2>':\n\t\t\tcase '<a:accent3>': case '</a:accent3>':\n\t\t\tcase '<a:accent4>': case '</a:accent4>':\n\t\t\tcase '<a:accent5>': case '</a:accent5>':\n\t\t\tcase '<a:accent6>': case '</a:accent6>':\n\t\t\tcase '<a:hlink>': case '</a:hlink>':\n\t\t\tcase '<a:folHlink>': case '</a:folHlink>':\n\t\t\t\tif (y[0].charAt(1) === '/') {\n\t\t\t\t\tthemes.themeElements.clrScheme[XLSXThemeClrScheme.indexOf(y[0])] = color;\n\t\t\t\t\tcolor = {};\n\t\t\t\t} else {\n\t\t\t\t\tcolor.name = y[0].slice(3, y[0].length - 1);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tdefault: if(opts && opts.WTF) throw new Error('Unrecognized ' + y[0] + ' in clrScheme');\n\t\t}\n\t});\n}\n\n/* 20.1.4.1.18 fontScheme CT_FontScheme */\nfunction parse_fontScheme(/*::t, themes, opts*/) { }\n\n/* 20.1.4.1.15 fmtScheme CT_StyleMatrix */\nfunction parse_fmtScheme(/*::t, themes, opts*/) { }\n\n/* 20.1.6.10 themeElements CT_BaseStyles */\nfunction parse_themeElements(data, themes, opts) {\n\tthemes.themeElements = {};\n\n\tvar t;\n\n\t/* clrScheme CT_ColorScheme */\n\tif(!(t=str_match_xml(data, \"a:clrScheme\"))) throw new Error('clrScheme not found in themeElements');\n\tparse_clrScheme(t, themes, opts);\n\n\t/* fontScheme CT_FontScheme */\n\tif(!(t=str_match_xml(data, \"a:fontScheme\"))) throw new Error('fontScheme not found in themeElements');\n\tparse_fontScheme(t, themes, opts);\n\n\t/* fmtScheme CT_StyleMatrix */\n\tif(!(t=str_match_xml(data, \"a:fmtScheme\"))) throw new Error('fmtScheme not found in themeElements');\n\tparse_fmtScheme(t, themes, opts);\n}\n\n/* 14.2.7 Theme Part */\nfunction parse_theme_xml(data/*:string*/, opts) {\n\t/* 20.1.6.9 theme CT_OfficeStyleSheet */\n\tif(!data || data.length === 0) data = write_theme();\n\n\tvar t;\n\tvar themes = {};\n\n\t/* themeElements CT_BaseStyles */\n\tif(!(t=str_match_xml(data, \"a:themeElements\"))) throw new Error('themeElements not found in theme');\n\tparse_themeElements(t[0], themes, opts);\n\tthemes.raw = data;\n\treturn themes;\n}\n\nfunction write_theme(Themes, opts)/*:string*/ {\n\tif(opts && opts.themeXLSX) return opts.themeXLSX;\n\tif(Themes && typeof Themes.raw == \"string\") return Themes.raw;\n\tvar o = [XML_HEADER];\n\to[o.length] = '<a:theme xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" name=\"Office Theme\">';\n\to[o.length] =  '<a:themeElements>';\n\n\to[o.length] =   '<a:clrScheme name=\"Office\">';\n\to[o.length] =    '<a:dk1><a:sysClr val=\"windowText\" lastClr=\"000000\"/></a:dk1>';\n\to[o.length] =    '<a:lt1><a:sysClr val=\"window\" lastClr=\"FFFFFF\"/></a:lt1>';\n\to[o.length] =    '<a:dk2><a:srgbClr val=\"1F497D\"/></a:dk2>';\n\to[o.length] =    '<a:lt2><a:srgbClr val=\"EEECE1\"/></a:lt2>';\n\to[o.length] =    '<a:accent1><a:srgbClr val=\"4F81BD\"/></a:accent1>';\n\to[o.length] =    '<a:accent2><a:srgbClr val=\"C0504D\"/></a:accent2>';\n\to[o.length] =    '<a:accent3><a:srgbClr val=\"9BBB59\"/></a:accent3>';\n\to[o.length] =    '<a:accent4><a:srgbClr val=\"8064A2\"/></a:accent4>';\n\to[o.length] =    '<a:accent5><a:srgbClr val=\"4BACC6\"/></a:accent5>';\n\to[o.length] =    '<a:accent6><a:srgbClr val=\"F79646\"/></a:accent6>';\n\to[o.length] =    '<a:hlink><a:srgbClr val=\"0000FF\"/></a:hlink>';\n\to[o.length] =    '<a:folHlink><a:srgbClr val=\"800080\"/></a:folHlink>';\n\to[o.length] =   '</a:clrScheme>';\n\n\to[o.length] =   '<a:fontScheme name=\"Office\">';\n\to[o.length] =    '<a:majorFont>';\n\to[o.length] =     '<a:latin typeface=\"Cambria\"/>';\n\to[o.length] =     '<a:ea typeface=\"\"/>';\n\to[o.length] =     '<a:cs typeface=\"\"/>';\n\to[o.length] =     '<a:font script=\"Jpan\" typeface=\"MS Pゴシック\"/>';\n\to[o.length] =     '<a:font script=\"Hang\" typeface=\"맑은 고딕\"/>';\n\to[o.length] =     '<a:font script=\"Hans\" typeface=\"宋体\"/>';\n\to[o.length] =     '<a:font script=\"Hant\" typeface=\"新細明體\"/>';\n\to[o.length] =     '<a:font script=\"Arab\" typeface=\"Times New Roman\"/>';\n\to[o.length] =     '<a:font script=\"Hebr\" typeface=\"Times New Roman\"/>';\n\to[o.length] =     '<a:font script=\"Thai\" typeface=\"Tahoma\"/>';\n\to[o.length] =     '<a:font script=\"Ethi\" typeface=\"Nyala\"/>';\n\to[o.length] =     '<a:font script=\"Beng\" typeface=\"Vrinda\"/>';\n\to[o.length] =     '<a:font script=\"Gujr\" typeface=\"Shruti\"/>';\n\to[o.length] =     '<a:font script=\"Khmr\" typeface=\"MoolBoran\"/>';\n\to[o.length] =     '<a:font script=\"Knda\" typeface=\"Tunga\"/>';\n\to[o.length] =     '<a:font script=\"Guru\" typeface=\"Raavi\"/>';\n\to[o.length] =     '<a:font script=\"Cans\" typeface=\"Euphemia\"/>';\n\to[o.length] =     '<a:font script=\"Cher\" typeface=\"Plantagenet Cherokee\"/>';\n\to[o.length] =     '<a:font script=\"Yiii\" typeface=\"Microsoft Yi Baiti\"/>';\n\to[o.length] =     '<a:font script=\"Tibt\" typeface=\"Microsoft Himalaya\"/>';\n\to[o.length] =     '<a:font script=\"Thaa\" typeface=\"MV Boli\"/>';\n\to[o.length] =     '<a:font script=\"Deva\" typeface=\"Mangal\"/>';\n\to[o.length] =     '<a:font script=\"Telu\" typeface=\"Gautami\"/>';\n\to[o.length] =     '<a:font script=\"Taml\" typeface=\"Latha\"/>';\n\to[o.length] =     '<a:font script=\"Syrc\" typeface=\"Estrangelo Edessa\"/>';\n\to[o.length] =     '<a:font script=\"Orya\" typeface=\"Kalinga\"/>';\n\to[o.length] =     '<a:font script=\"Mlym\" typeface=\"Kartika\"/>';\n\to[o.length] =     '<a:font script=\"Laoo\" typeface=\"DokChampa\"/>';\n\to[o.length] =     '<a:font script=\"Sinh\" typeface=\"Iskoola Pota\"/>';\n\to[o.length] =     '<a:font script=\"Mong\" typeface=\"Mongolian Baiti\"/>';\n\to[o.length] =     '<a:font script=\"Viet\" typeface=\"Times New Roman\"/>';\n\to[o.length] =     '<a:font script=\"Uigh\" typeface=\"Microsoft Uighur\"/>';\n\to[o.length] =     '<a:font script=\"Geor\" typeface=\"Sylfaen\"/>';\n\to[o.length] =    '</a:majorFont>';\n\to[o.length] =    '<a:minorFont>';\n\to[o.length] =     '<a:latin typeface=\"Calibri\"/>';\n\to[o.length] =     '<a:ea typeface=\"\"/>';\n\to[o.length] =     '<a:cs typeface=\"\"/>';\n\to[o.length] =     '<a:font script=\"Jpan\" typeface=\"MS Pゴシック\"/>';\n\to[o.length] =     '<a:font script=\"Hang\" typeface=\"맑은 고딕\"/>';\n\to[o.length] =     '<a:font script=\"Hans\" typeface=\"宋体\"/>';\n\to[o.length] =     '<a:font script=\"Hant\" typeface=\"新細明體\"/>';\n\to[o.length] =     '<a:font script=\"Arab\" typeface=\"Arial\"/>';\n\to[o.length] =     '<a:font script=\"Hebr\" typeface=\"Arial\"/>';\n\to[o.length] =     '<a:font script=\"Thai\" typeface=\"Tahoma\"/>';\n\to[o.length] =     '<a:font script=\"Ethi\" typeface=\"Nyala\"/>';\n\to[o.length] =     '<a:font script=\"Beng\" typeface=\"Vrinda\"/>';\n\to[o.length] =     '<a:font script=\"Gujr\" typeface=\"Shruti\"/>';\n\to[o.length] =     '<a:font script=\"Khmr\" typeface=\"DaunPenh\"/>';\n\to[o.length] =     '<a:font script=\"Knda\" typeface=\"Tunga\"/>';\n\to[o.length] =     '<a:font script=\"Guru\" typeface=\"Raavi\"/>';\n\to[o.length] =     '<a:font script=\"Cans\" typeface=\"Euphemia\"/>';\n\to[o.length] =     '<a:font script=\"Cher\" typeface=\"Plantagenet Cherokee\"/>';\n\to[o.length] =     '<a:font script=\"Yiii\" typeface=\"Microsoft Yi Baiti\"/>';\n\to[o.length] =     '<a:font script=\"Tibt\" typeface=\"Microsoft Himalaya\"/>';\n\to[o.length] =     '<a:font script=\"Thaa\" typeface=\"MV Boli\"/>';\n\to[o.length] =     '<a:font script=\"Deva\" typeface=\"Mangal\"/>';\n\to[o.length] =     '<a:font script=\"Telu\" typeface=\"Gautami\"/>';\n\to[o.length] =     '<a:font script=\"Taml\" typeface=\"Latha\"/>';\n\to[o.length] =     '<a:font script=\"Syrc\" typeface=\"Estrangelo Edessa\"/>';\n\to[o.length] =     '<a:font script=\"Orya\" typeface=\"Kalinga\"/>';\n\to[o.length] =     '<a:font script=\"Mlym\" typeface=\"Kartika\"/>';\n\to[o.length] =     '<a:font script=\"Laoo\" typeface=\"DokChampa\"/>';\n\to[o.length] =     '<a:font script=\"Sinh\" typeface=\"Iskoola Pota\"/>';\n\to[o.length] =     '<a:font script=\"Mong\" typeface=\"Mongolian Baiti\"/>';\n\to[o.length] =     '<a:font script=\"Viet\" typeface=\"Arial\"/>';\n\to[o.length] =     '<a:font script=\"Uigh\" typeface=\"Microsoft Uighur\"/>';\n\to[o.length] =     '<a:font script=\"Geor\" typeface=\"Sylfaen\"/>';\n\to[o.length] =    '</a:minorFont>';\n\to[o.length] =   '</a:fontScheme>';\n\n\to[o.length] =   '<a:fmtScheme name=\"Office\">';\n\to[o.length] =    '<a:fillStyleLst>';\n\to[o.length] =     '<a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>';\n\to[o.length] =     '<a:gradFill rotWithShape=\"1\">';\n\to[o.length] =      '<a:gsLst>';\n\to[o.length] =       '<a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"50000\"/><a:satMod val=\"300000\"/></a:schemeClr></a:gs>';\n\to[o.length] =       '<a:gs pos=\"35000\"><a:schemeClr val=\"phClr\"><a:tint val=\"37000\"/><a:satMod val=\"300000\"/></a:schemeClr></a:gs>';\n\to[o.length] =       '<a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:tint val=\"15000\"/><a:satMod val=\"350000\"/></a:schemeClr></a:gs>';\n\to[o.length] =      '</a:gsLst>';\n\to[o.length] =      '<a:lin ang=\"16200000\" scaled=\"1\"/>';\n\to[o.length] =     '</a:gradFill>';\n\to[o.length] =     '<a:gradFill rotWithShape=\"1\">';\n\to[o.length] =      '<a:gsLst>';\n\to[o.length] =       '<a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"100000\"/><a:shade val=\"100000\"/><a:satMod val=\"130000\"/></a:schemeClr></a:gs>';\n\to[o.length] =       '<a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:tint val=\"50000\"/><a:shade val=\"100000\"/><a:satMod val=\"350000\"/></a:schemeClr></a:gs>';\n\to[o.length] =      '</a:gsLst>';\n\to[o.length] =      '<a:lin ang=\"16200000\" scaled=\"0\"/>';\n\to[o.length] =     '</a:gradFill>';\n\to[o.length] =    '</a:fillStyleLst>';\n\to[o.length] =    '<a:lnStyleLst>';\n\to[o.length] =     '<a:ln w=\"9525\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"><a:shade val=\"95000\"/><a:satMod val=\"105000\"/></a:schemeClr></a:solidFill><a:prstDash val=\"solid\"/></a:ln>';\n\to[o.length] =     '<a:ln w=\"25400\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/></a:ln>';\n\to[o.length] =     '<a:ln w=\"38100\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/></a:ln>';\n\to[o.length] =    '</a:lnStyleLst>';\n\to[o.length] =    '<a:effectStyleLst>';\n\to[o.length] =     '<a:effectStyle>';\n\to[o.length] =      '<a:effectLst>';\n\to[o.length] =       '<a:outerShdw blurRad=\"40000\" dist=\"20000\" dir=\"5400000\" rotWithShape=\"0\"><a:srgbClr val=\"000000\"><a:alpha val=\"38000\"/></a:srgbClr></a:outerShdw>';\n\to[o.length] =      '</a:effectLst>';\n\to[o.length] =     '</a:effectStyle>';\n\to[o.length] =     '<a:effectStyle>';\n\to[o.length] =      '<a:effectLst>';\n\to[o.length] =       '<a:outerShdw blurRad=\"40000\" dist=\"23000\" dir=\"5400000\" rotWithShape=\"0\"><a:srgbClr val=\"000000\"><a:alpha val=\"35000\"/></a:srgbClr></a:outerShdw>';\n\to[o.length] =      '</a:effectLst>';\n\to[o.length] =     '</a:effectStyle>';\n\to[o.length] =     '<a:effectStyle>';\n\to[o.length] =      '<a:effectLst>';\n\to[o.length] =       '<a:outerShdw blurRad=\"40000\" dist=\"23000\" dir=\"5400000\" rotWithShape=\"0\"><a:srgbClr val=\"000000\"><a:alpha val=\"35000\"/></a:srgbClr></a:outerShdw>';\n\to[o.length] =      '</a:effectLst>';\n\to[o.length] =      '<a:scene3d><a:camera prst=\"orthographicFront\"><a:rot lat=\"0\" lon=\"0\" rev=\"0\"/></a:camera><a:lightRig rig=\"threePt\" dir=\"t\"><a:rot lat=\"0\" lon=\"0\" rev=\"1200000\"/></a:lightRig></a:scene3d>';\n\to[o.length] =      '<a:sp3d><a:bevelT w=\"63500\" h=\"25400\"/></a:sp3d>';\n\to[o.length] =     '</a:effectStyle>';\n\to[o.length] =    '</a:effectStyleLst>';\n\to[o.length] =    '<a:bgFillStyleLst>';\n\to[o.length] =     '<a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>';\n\to[o.length] =     '<a:gradFill rotWithShape=\"1\">';\n\to[o.length] =      '<a:gsLst>';\n\to[o.length] =       '<a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"40000\"/><a:satMod val=\"350000\"/></a:schemeClr></a:gs>';\n\to[o.length] =       '<a:gs pos=\"40000\"><a:schemeClr val=\"phClr\"><a:tint val=\"45000\"/><a:shade val=\"99000\"/><a:satMod val=\"350000\"/></a:schemeClr></a:gs>';\n\to[o.length] =       '<a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:shade val=\"20000\"/><a:satMod val=\"255000\"/></a:schemeClr></a:gs>';\n\to[o.length] =      '</a:gsLst>';\n\to[o.length] =      '<a:path path=\"circle\"><a:fillToRect l=\"50000\" t=\"-80000\" r=\"50000\" b=\"180000\"/></a:path>';\n\to[o.length] =     '</a:gradFill>';\n\to[o.length] =     '<a:gradFill rotWithShape=\"1\">';\n\to[o.length] =      '<a:gsLst>';\n\to[o.length] =       '<a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"80000\"/><a:satMod val=\"300000\"/></a:schemeClr></a:gs>';\n\to[o.length] =       '<a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:shade val=\"30000\"/><a:satMod val=\"200000\"/></a:schemeClr></a:gs>';\n\to[o.length] =      '</a:gsLst>';\n\to[o.length] =      '<a:path path=\"circle\"><a:fillToRect l=\"50000\" t=\"50000\" r=\"50000\" b=\"50000\"/></a:path>';\n\to[o.length] =     '</a:gradFill>';\n\to[o.length] =    '</a:bgFillStyleLst>';\n\to[o.length] =   '</a:fmtScheme>';\n\to[o.length] =  '</a:themeElements>';\n\n\to[o.length] =  '<a:objectDefaults>';\n\to[o.length] =   '<a:spDef>';\n\to[o.length] =    '<a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx=\"1\"><a:schemeClr val=\"accent1\"/></a:lnRef><a:fillRef idx=\"3\"><a:schemeClr val=\"accent1\"/></a:fillRef><a:effectRef idx=\"2\"><a:schemeClr val=\"accent1\"/></a:effectRef><a:fontRef idx=\"minor\"><a:schemeClr val=\"lt1\"/></a:fontRef></a:style>';\n\to[o.length] =   '</a:spDef>';\n\to[o.length] =   '<a:lnDef>';\n\to[o.length] =    '<a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx=\"2\"><a:schemeClr val=\"accent1\"/></a:lnRef><a:fillRef idx=\"0\"><a:schemeClr val=\"accent1\"/></a:fillRef><a:effectRef idx=\"1\"><a:schemeClr val=\"accent1\"/></a:effectRef><a:fontRef idx=\"minor\"><a:schemeClr val=\"tx1\"/></a:fontRef></a:style>';\n\to[o.length] =   '</a:lnDef>';\n\to[o.length] =  '</a:objectDefaults>';\n\to[o.length] =  '<a:extraClrSchemeLst/>';\n\to[o.length] = '</a:theme>';\n\treturn o.join(\"\");\n}\n/* [MS-XLS] 2.4.326 TODO: payload is a zip file */\nfunction parse_Theme(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar dwThemeVersion = blob.read_shift(4);\n\tif(dwThemeVersion === 124226) return;\n\tif(!opts.cellStyles) { blob.l = end; return; }\n\tvar data = blob.slice(blob.l);\n\tblob.l = end;\n\tvar zip; try { zip = zip_read(data, {type: \"array\"}); } catch(e) { return; }\n\tvar themeXML = getzipstr(zip, \"theme/theme/theme1.xml\", true);\n\tif(!themeXML) return;\n\treturn parse_theme_xml(themeXML, opts);\n}\n\n/* 2.5.49 */\nfunction parse_ColorTheme(blob/*::, length*/) { return blob.read_shift(4); }\n\n/* 2.5.155 */\nfunction parse_FullColorExt(blob/*::, length*/) {\n\tvar o = {};\n\to.xclrType = blob.read_shift(2);\n\to.nTintShade = blob.read_shift(2);\n\tswitch(o.xclrType) {\n\t\tcase 0: blob.l += 4; break;\n\t\tcase 1: o.xclrValue = parse_IcvXF(blob, 4); break;\n\t\tcase 2: o.xclrValue = parse_LongRGBA(blob, 4); break;\n\t\tcase 3: o.xclrValue = parse_ColorTheme(blob, 4); break;\n\t\tcase 4: blob.l += 4; break;\n\t}\n\tblob.l += 8;\n\treturn o;\n}\n\n/* 2.5.164 TODO: read 7 bits*/\nfunction parse_IcvXF(blob, length) {\n\treturn parsenoop(blob, length);\n}\n\n/* 2.5.280 */\nfunction parse_XFExtGradient(blob, length) {\n\treturn parsenoop(blob, length);\n}\n\n/* [MS-XLS] 2.5.108 */\nfunction parse_ExtProp(blob/*::, length*/)/*:Array<any>*/ {\n\tvar extType = blob.read_shift(2);\n\tvar cb = blob.read_shift(2) - 4;\n\tvar o = [extType];\n\tswitch(extType) {\n\t\tcase 0x04: case 0x05: case 0x07: case 0x08:\n\t\tcase 0x09: case 0x0A: case 0x0B: case 0x0D:\n\t\t\to[1] = parse_FullColorExt(blob, cb); break;\n\t\tcase 0x06: o[1] = parse_XFExtGradient(blob, cb); break;\n\t\tcase 0x0E: case 0x0F: o[1] = blob.read_shift(cb === 1 ? 1 : 2); break;\n\t\tdefault: throw new Error(\"Unrecognized ExtProp type: \" + extType + \" \" + cb);\n\t}\n\treturn o;\n}\n\n/* 2.4.355 */\nfunction parse_XFExt(blob, length) {\n\tvar end = blob.l + length;\n\tblob.l += 2;\n\tvar ixfe = blob.read_shift(2);\n\tblob.l += 2;\n\tvar cexts = blob.read_shift(2);\n\tvar ext/*:AOA*/ = [];\n\twhile(cexts-- > 0) ext.push(parse_ExtProp(blob, end-blob.l));\n\treturn {ixfe:ixfe, ext:ext};\n}\n\n/* xf is an XF, see parse_XFExt for xfext */\nfunction update_xfext(xf, xfext) {\n\txfext.forEach(function(xfe) {\n\t\tswitch(xfe[0]) { /* 2.5.108 extPropData */\n\t\t\tcase 0x04: break; /* foreground color */\n\t\t\tcase 0x05: break; /* background color */\n\t\t\tcase 0x06: break; /* gradient fill */\n\t\t\tcase 0x07: break; /* top cell border color */\n\t\t\tcase 0x08: break; /* bottom cell border color */\n\t\t\tcase 0x09: break; /* left cell border color */\n\t\t\tcase 0x0a: break; /* right cell border color */\n\t\t\tcase 0x0b: break; /* diagonal cell border color */\n\t\t\tcase 0x0d: /* text color */\n\t\t\t\tbreak;\n\t\t\tcase 0x0e: break; /* font scheme */\n\t\t\tcase 0x0f: break; /* indentation level */\n\t\t}\n\t});\n}\n\nfunction parse_BrtMdtinfo(data, length) {\n  return {\n    flags: data.read_shift(4),\n    version: data.read_shift(4),\n    name: parse_XLWideString(data, length - 8)\n  };\n}\nfunction write_BrtMdtinfo(data) {\n  var o = new_buf(12 + 2 * data.name.length);\n  o.write_shift(4, data.flags);\n  o.write_shift(4, data.version);\n  write_XLWideString(data.name, o);\n  return o.slice(0, o.l);\n}\nfunction parse_BrtMdb(data) {\n  var out = [];\n  var cnt = data.read_shift(4);\n  while (cnt-- > 0)\n    out.push([data.read_shift(4), data.read_shift(4)]);\n  return out;\n}\nfunction write_BrtMdb(mdb) {\n  var o = new_buf(4 + 8 * mdb.length);\n  o.write_shift(4, mdb.length);\n  for (var i = 0; i < mdb.length; ++i) {\n    o.write_shift(4, mdb[i][0]);\n    o.write_shift(4, mdb[i][1]);\n  }\n  return o;\n}\nfunction write_BrtBeginEsfmd(cnt, name) {\n  var o = new_buf(8 + 2 * name.length);\n  o.write_shift(4, cnt);\n  write_XLWideString(name, o);\n  return o.slice(0, o.l);\n}\nfunction parse_BrtBeginEsmdb(data) {\n  data.l += 4;\n  return data.read_shift(4) != 0;\n}\nfunction write_BrtBeginEsmdb(cnt, cm) {\n  var o = new_buf(8);\n  o.write_shift(4, cnt);\n  o.write_shift(4, cm ? 1 : 0);\n  return o;\n}\nfunction parse_xlmeta_bin(data, name, _opts) {\n  var out = { Types: [], Cell: [], Value: [] };\n  var opts = _opts || {};\n  var state = [];\n  var pass = false;\n  var metatype = 2;\n  recordhopper(data, function(val, R, RT) {\n    switch (RT) {\n      case 335:\n        out.Types.push({ name: val.name });\n        break;\n      case 51:\n        val.forEach(function(r) {\n          if (metatype == 1)\n            out.Cell.push({ type: out.Types[r[0] - 1].name, index: r[1] });\n          else if (metatype == 0)\n            out.Value.push({ type: out.Types[r[0] - 1].name, index: r[1] });\n        });\n        break;\n      case 337:\n        metatype = val ? 1 : 0;\n        break;\n      case 338:\n        metatype = 2;\n        break;\n      case 35:\n        state.push(RT);\n        pass = true;\n        break;\n      case 36:\n        state.pop();\n        pass = false;\n        break;\n      default:\n        if (R.T) {\n        } else if (!pass || opts.WTF && state[state.length - 1] != 35)\n          throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n    }\n  });\n  return out;\n}\nfunction write_xlmeta_bin() {\n  var ba = buf_array();\n  write_record(ba, 332);\n  write_record(ba, 334, write_UInt32LE(1));\n  write_record(ba, 335, write_BrtMdtinfo({\n    name: \"XLDAPR\",\n    version: 12e4,\n    flags: 3496657072\n  }));\n  write_record(ba, 336);\n  write_record(ba, 339, write_BrtBeginEsfmd(1, \"XLDAPR\"));\n  write_record(ba, 52);\n  write_record(ba, 35, write_UInt32LE(514));\n  write_record(ba, 4096, write_UInt32LE(0));\n  write_record(ba, 4097, writeuint16(1));\n  write_record(ba, 36);\n  write_record(ba, 53);\n  write_record(ba, 340);\n  write_record(ba, 337, write_BrtBeginEsmdb(1, true));\n  write_record(ba, 51, write_BrtMdb([[1, 0]]));\n  write_record(ba, 338);\n  write_record(ba, 333);\n  return ba.end();\n}\nfunction parse_xlmeta_xml(data, name, opts) {\n  var out = { Types: [], Cell: [], Value: [] };\n  if (!data)\n    return out;\n  var pass = false;\n  var metatype = 2;\n  var lastmeta;\n  data.replace(tagregex, function(x) {\n    var y = parsexmltag(x);\n    switch (strip_ns(y[0])) {\n      case \"<?xml\":\n        break;\n      case \"<metadata\":\n      case \"</metadata>\":\n        break;\n      case \"<metadataTypes\":\n      case \"</metadataTypes>\":\n        break;\n      case \"<metadataType\":\n        out.Types.push({ name: y.name });\n        break;\n      case \"</metadataType>\":\n        break;\n      case \"<futureMetadata\":\n        for (var j = 0; j < out.Types.length; ++j)\n          if (out.Types[j].name == y.name)\n            lastmeta = out.Types[j];\n        break;\n      case \"</futureMetadata>\":\n        break;\n      case \"<bk>\":\n        break;\n      case \"</bk>\":\n        break;\n      case \"<rc\":\n        if (metatype == 1)\n          out.Cell.push({ type: out.Types[y.t - 1].name, index: +y.v });\n        else if (metatype == 0)\n          out.Value.push({ type: out.Types[y.t - 1].name, index: +y.v });\n        break;\n      case \"</rc>\":\n        break;\n      case \"<cellMetadata\":\n        metatype = 1;\n        break;\n      case \"</cellMetadata>\":\n        metatype = 2;\n        break;\n      case \"<valueMetadata\":\n        metatype = 0;\n        break;\n      case \"</valueMetadata>\":\n        metatype = 2;\n        break;\n      case \"<extLst\":\n      case \"<extLst>\":\n      case \"</extLst>\":\n      case \"<extLst/>\":\n        break;\n      case \"<ext\":\n        pass = true;\n        break;\n      case \"</ext>\":\n        pass = false;\n        break;\n      case \"<rvb\":\n        if (!lastmeta)\n          break;\n        if (!lastmeta.offsets)\n          lastmeta.offsets = [];\n        lastmeta.offsets.push(+y.i);\n        break;\n      default:\n        if (!pass && (opts == null ? void 0 : opts.WTF))\n          throw new Error(\"unrecognized \" + y[0] + \" in metadata\");\n    }\n    return x;\n  });\n  return out;\n}\nfunction write_xlmeta_xml() {\n  var o = [XML_HEADER];\n  o.push('<metadata xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:xlrd=\"http://schemas.microsoft.com/office/spreadsheetml/2017/richdata\" xmlns:xda=\"http://schemas.microsoft.com/office/spreadsheetml/2017/dynamicarray\">\\n  <metadataTypes count=\"1\">\\n    <metadataType name=\"XLDAPR\" minSupportedVersion=\"120000\" copy=\"1\" pasteAll=\"1\" pasteValues=\"1\" merge=\"1\" splitFirst=\"1\" rowColShift=\"1\" clearFormats=\"1\" clearComments=\"1\" assign=\"1\" coerce=\"1\" cellMeta=\"1\"/>\\n  </metadataTypes>\\n  <futureMetadata name=\"XLDAPR\" count=\"1\">\\n    <bk>\\n      <extLst>\\n        <ext uri=\"{bdbb8cdc-fa1e-496e-a857-3c3f30c029c3}\">\\n          <xda:dynamicArrayProperties fDynamic=\"1\" fCollapsed=\"0\"/>\\n        </ext>\\n      </extLst>\\n    </bk>\\n  </futureMetadata>\\n  <cellMetadata count=\"1\">\\n    <bk>\\n      <rc t=\"1\" v=\"0\"/>\\n    </bk>\\n  </cellMetadata>\\n</metadata>');\n  return o.join(\"\");\n}\n/* 18.6 Calculation Chain */\nfunction parse_cc_xml(data/*::, name, opts*/)/*:Array<any>*/ {\n\tvar d = [];\n\tif(!data) return d;\n\tvar i = 1;\n\t(data.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0]) {\n\t\t\tcase '<?xml': break;\n\t\t\t/* 18.6.2  calcChain CT_CalcChain 1 */\n\t\t\tcase '<calcChain': case '<calcChain>': case '</calcChain>': break;\n\t\t\t/* 18.6.1  c CT_CalcCell 1 */\n\t\t\tcase '<c': delete y[0]; if(y.i) i = y.i; else y.i = i; d.push(y); break;\n\t\t}\n\t});\n\treturn d;\n}\n\n//function write_cc_xml(data, opts) { }\n\n/* [MS-XLSB] 2.6.4.1 */\nfunction parse_BrtCalcChainItem$(data) {\n\tvar out = {};\n\tout.i = data.read_shift(4);\n\tvar cell = {};\n\tcell.r = data.read_shift(4);\n\tcell.c = data.read_shift(4);\n\tout.r = encode_cell(cell);\n\tvar flags = data.read_shift(1);\n\tif(flags & 0x2) out.l = '1';\n\tif(flags & 0x8) out.a = '1';\n\treturn out;\n}\n\n/* 18.6 Calculation Chain */\nfunction parse_cc_bin(data, name, opts) {\n\tvar out = [];\n\tvar pass = false;\n\trecordhopper(data, function hopper_cc(val, R, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x003F: /* 'BrtCalcChainItem$' */\n\t\t\t\tout.push(val); break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t});\n\treturn out;\n}\n\n//function write_cc_bin(data, opts) { }\n/* 18.14 Supplementary Workbook Data */\nfunction parse_xlink_xml(/*::data, rel, name:string, _opts*/) {\n\t//var opts = _opts || {};\n\t//if(opts.WTF) throw \"XLSX External Link\";\n}\n\n/* [MS-XLSB] 2.1.7.25 External Link */\nfunction parse_xlink_bin(data, rel, name/*:string*/, _opts) {\n\tif(!data) return data;\n\tvar opts = _opts || {};\n\n\tvar pass = false, end = false;\n\n\trecordhopper(data, function xlink_parse(val, R, RT) {\n\t\tif(end) return;\n\t\tswitch(RT) {\n\t\t\tcase 0x0167: /* 'BrtSupTabs' */\n\t\t\tcase 0x016B: /* 'BrtExternTableStart' */\n\t\t\tcase 0x016C: /* 'BrtExternTableEnd' */\n\t\t\tcase 0x016E: /* 'BrtExternRowHdr' */\n\t\t\tcase 0x016F: /* 'BrtExternCellBlank' */\n\t\t\tcase 0x0170: /* 'BrtExternCellReal' */\n\t\t\tcase 0x0171: /* 'BrtExternCellBool' */\n\t\t\tcase 0x0172: /* 'BrtExternCellError' */\n\t\t\tcase 0x0173: /* 'BrtExternCellString' */\n\t\t\tcase 0x01D8: /* 'BrtExternValueMeta' */\n\t\t\tcase 0x0241: /* 'BrtSupNameStart' */\n\t\t\tcase 0x0242: /* 'BrtSupNameValueStart' */\n\t\t\tcase 0x0243: /* 'BrtSupNameValueEnd' */\n\t\t\tcase 0x0244: /* 'BrtSupNameNum' */\n\t\t\tcase 0x0245: /* 'BrtSupNameErr' */\n\t\t\tcase 0x0246: /* 'BrtSupNameSt' */\n\t\t\tcase 0x0247: /* 'BrtSupNameNil' */\n\t\t\tcase 0x0248: /* 'BrtSupNameBool' */\n\t\t\tcase 0x0249: /* 'BrtSupNameFmla' */\n\t\t\tcase 0x024A: /* 'BrtSupNameBits' */\n\t\t\tcase 0x024B: /* 'BrtSupNameEnd' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t}, opts);\n}\n/* 20.5 DrawingML - SpreadsheetML Drawing */\n/* 20.5.2.35 wsDr CT_Drawing */\nfunction parse_drawing(data, rels/*:any*/) {\n\tif(!data) return \"??\";\n\t/*\n\t  Chartsheet Drawing:\n\t   - 20.5.2.35 wsDr CT_Drawing\n\t    - 20.5.2.1  absoluteAnchor CT_AbsoluteAnchor\n\t     - 20.5.2.16 graphicFrame CT_GraphicalObjectFrame\n\t      - 20.1.2.2.16 graphic CT_GraphicalObject\n\t       - 20.1.2.2.17 graphicData CT_GraphicalObjectData\n          - chart reference\n\t   the actual type is based on the URI of the graphicData\n\t\tTODO: handle embedded charts and other types of graphics\n\t*/\n\tvar id = (data.match(/<c:chart [^<>]*r:id=\"([^<>\"]*)\"/)||[\"\",\"\"])[1];\n\n\treturn rels['!id'][id].Target;\n}\n\n/* L.5.5.2 SpreadsheetML Comments + VML Schema */\nfunction parse_vml(data/*:string*/, sheet, comments) {\n\tvar cidx = 0;\n\t(str_match_xml_ns_g(data, \"shape\")||[]).forEach(function(m) {\n\t\tvar type = \"\";\n\t\tvar hidden = true;\n\t\tvar aidx = -1;\n\t\tvar R = -1, C = -1;\n\t\tm.replace(tagregex, function(x/*:string*/, idx/*:number*/) {\n\t\t\tvar y = parsexmltag(x);\n\t\t\tswitch(strip_ns(y[0])) {\n\t\t\t\tcase '<ClientData': if(y.ObjectType) type = y.ObjectType; break;\n\n\t\t\t\tcase '<Visible': case '<Visible/>': hidden = false; break;\n\n\t\t\t\tcase '<Row': case '<Row>': aidx = idx + x.length; break;\n\t\t\t\tcase '</Row>': R = +m.slice(aidx, idx).trim(); break;\n\n\t\t\t\tcase '<Column': case '<Column>': aidx = idx + x.length; break;\n\t\t\t\tcase '</Column>': C = +m.slice(aidx, idx).trim(); break;\n\t\t\t}\n\t\t\treturn \"\";\n\t\t});\n\t\tswitch(type) {\n\t\tcase 'Note':\n\t\t\tvar cell = ws_get_cell_stub(sheet, ((R>=0 && C>=0) ? encode_cell({r:R,c:C}) : comments[cidx].ref));\n\t\t\tif(cell.c) {\n\t\t\t\tcell.c.hidden = hidden;\n\t\t\t}\n\t\t\t++cidx;\n\t\t\tbreak;\n\t\t}\n\n\t});\n}\n\n\n/* comment boxes */\nfunction write_vml(rId/*:number*/, comments, ws) {\n\tvar csize = [21600, 21600];\n\t/* L.5.2.1.2 Path Attribute */\n\tvar bbox = [\"m0,0l0\",csize[1],csize[0],csize[1],csize[0],\"0xe\"].join(\",\");\n\tvar o = [\n\t\twritextag(\"xml\", null, { 'xmlns:v': XLMLNS.v, 'xmlns:o': XLMLNS.o, 'xmlns:x': XLMLNS.x, 'xmlns:mv': XLMLNS.mv }).replace(/\\/>/,\">\"),\n\t\twritextag(\"o:shapelayout\", writextag(\"o:idmap\", null, {'v:ext':\"edit\", 'data':rId}), {'v:ext':\"edit\"})\n\t];\n\n\tvar _shapeid = 65536 * rId;\n\n\tvar _comments = comments || [];\n\tif(_comments.length > 0) o.push(writextag(\"v:shapetype\", [\n\t\twritextag(\"v:stroke\", null, {joinstyle:\"miter\"}),\n\t\twritextag(\"v:path\", null, {gradientshapeok:\"t\", 'o:connecttype':\"rect\"})\n\t].join(\"\"), {id:\"_x0000_t202\", coordsize:csize.join(\",\"), 'o:spt':202, path:bbox}));\n\n\t_comments.forEach(function(x) { ++_shapeid; o.push(write_vml_comment(x, _shapeid)); });\n\to.push('</xml>');\n\treturn o.join(\"\");\n}\n\nfunction write_vml_comment(x, _shapeid, ws)/*:string*/ {\n\tvar c = decode_cell(x[0]);\n\tvar fillopts = /*::(*/{'color2':\"#BEFF82\", 'type':\"gradient\"}/*:: :any)*/;\n\tif(fillopts.type == \"gradient\") fillopts.angle = \"-180\";\n\tvar fillparm = fillopts.type == \"gradient\" ? writextag(\"o:fill\", null, {type:\"gradientUnscaled\", 'v:ext':\"view\"}) : null;\n\tvar fillxml = writextag('v:fill', fillparm, fillopts);\n\n\tvar shadata = ({on:\"t\", 'obscured':\"t\"}/*:any*/);\n\n\treturn [\n\t'<v:shape' + wxt_helper({\n\t\tid:'_x0000_s' + _shapeid,\n\t\ttype:\"#_x0000_t202\",\n\t\tstyle:\"position:absolute; margin-left:80pt;margin-top:5pt;width:104pt;height:64pt;z-index:10\" + (x[1].hidden ? \";visibility:hidden\" : \"\") ,\n\t\tfillcolor:\"#ECFAD4\",\n\t\tstrokecolor:\"#edeaa1\"\n\t}) + '>',\n\t\tfillxml,\n\t\twritextag(\"v:shadow\", null, shadata),\n\t\twritextag(\"v:path\", null, {'o:connecttype':\"none\"}),\n\t\t'<v:textbox><div style=\"text-align:left\"></div></v:textbox>',\n\t\t'<x:ClientData ObjectType=\"Note\">',\n\t\t\t'<x:MoveWithCells/>',\n\t\t\t'<x:SizeWithCells/>',\n\t\t\t/* Part 4 19.4.2.3 Anchor (Anchor) */\n\t\t\twritetag('x:Anchor', [c.c+1, 0, c.r+1, 0, c.c+3, 20, c.r+5, 20].join(\",\")),\n\t\t\twritetag('x:AutoFill', \"False\"),\n\t\t\twritetag('x:Row', String(c.r)),\n\t\t\twritetag('x:Column', String(c.c)),\n\t\t\tx[1].hidden ? '' : '<x:Visible/>',\n\t\t'</x:ClientData>',\n\t'</v:shape>'\n\t].join(\"\");\n}\nfunction sheet_insert_comments(sheet/*:WorkSheet*/, comments/*:Array<RawComment>*/, threaded/*:boolean*/, people/*:?Array<any>*/) {\n\tvar dense = sheet[\"!data\"] != null;\n\tvar cell/*:Cell*/;\n\tcomments.forEach(function(comment) {\n\t\tvar r = decode_cell(comment.ref);\n\t\tif(r.r < 0 || r.c < 0) return;\n\t\tif(dense) {\n\t\t\tif(!sheet[\"!data\"][r.r]) sheet[\"!data\"][r.r] = [];\n\t\t\tcell = sheet[\"!data\"][r.r][r.c];\n\t\t} else cell = sheet[comment.ref];\n\t\tif (!cell) {\n\t\t\tcell = ({t:\"z\"}/*:any*/);\n\t\t\tif(dense) sheet[\"!data\"][r.r][r.c] = cell;\n\t\t\telse sheet[comment.ref] = cell;\n\t\t\tvar range = safe_decode_range(sheet[\"!ref\"]||\"BDWGO1000001:A1\");\n\t\t\tif(range.s.r > r.r) range.s.r = r.r;\n\t\t\tif(range.e.r < r.r) range.e.r = r.r;\n\t\t\tif(range.s.c > r.c) range.s.c = r.c;\n\t\t\tif(range.e.c < r.c) range.e.c = r.c;\n\t\t\tvar encoded = encode_range(range);\n\t\t\tsheet[\"!ref\"] = encoded;\n\t\t}\n\n\t\tif (!cell.c) cell.c = [];\n\t\tvar o/*:Comment*/ = ({a: comment.author, t: comment.t, r: comment.r, T: threaded});\n\t\tif(comment.h) o.h = comment.h;\n\n\t\t/* threaded comments always override */\n\t\tfor(var i = cell.c.length - 1; i >= 0; --i) {\n\t\t\tif(!threaded && cell.c[i].T) return;\n\t\t\tif(threaded && !cell.c[i].T) cell.c.splice(i, 1);\n\t\t}\n\t\tif(threaded && people) for(i = 0; i < people.length; ++i) {\n\t\t\tif(o.a == people[i].id) { o.a = people[i].name || o.a; break; }\n\t\t}\n\t\tcell.c.push(o);\n\t});\n}\n/* 18.7 Comments */\nfunction parse_comments_xml(data/*:string*/, opts)/*:Array<RawComment>*/ {\n\t/* 18.7.6 CT_Comments */\n\tif(data.match(/<(?:\\w+:)?comments *\\/>/)) return [];\n\tvar authors/*:Array<string>*/ = [];\n\tvar commentList/*:Array<RawComment>*/ = [];\n\tvar authtag = str_match_xml_ns(data, \"authors\");\n\tif(authtag && authtag[1]) authtag[1].split(/<\\/\\w*:?author>/).forEach(function(x) {\n\t\tif(x === \"\" || x.trim() === \"\") return;\n\t\tvar a = x.match(/<(?:\\w+:)?author[^<>]*>(.*)/);\n\t\tif(a) authors.push(a[1]);\n\t});\n\tvar cmnttag = str_match_xml_ns(data, \"commentList\");\n\tif(cmnttag && cmnttag[1]) cmnttag[1].split(/<\\/\\w*:?comment>/).forEach(function(x) {\n\t\tif(x === \"\" || x.trim() === \"\") return;\n\t\tvar cm = x.match(/<(?:\\w+:)?comment[^<>]*>/);\n\t\tif(!cm) return;\n\t\tvar y = parsexmltag(cm[0]);\n\t\tvar comment/*:RawComment*/ = ({ author: y.authorId && authors[y.authorId] || \"sheetjsghost\", ref: y.ref, guid: y.guid }/*:any*/);\n\t\tvar cell = decode_cell(y.ref);\n\t\tif(opts.sheetRows && opts.sheetRows <= cell.r) return;\n\t\tvar textMatch = str_match_xml_ns(x, \"text\");\n\t\tvar rt = !!textMatch && !!textMatch[1] && parse_si(textMatch[1]) || {r:\"\",t:\"\",h:\"\"};\n\t\tcomment.r = rt.r;\n\t\tif(rt.r == \"<t></t>\") rt.t = rt.h = \"\";\n\t\tcomment.t = (rt.t||\"\").replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\");\n\t\tif(opts.cellHTML) comment.h = rt.h;\n\t\tcommentList.push(comment);\n\t});\n\treturn commentList;\n}\n\nfunction write_comments_xml(data/*::, opts*/) {\n\tvar o = [XML_HEADER, writextag('comments', null, { 'xmlns': XMLNS_main[0] })];\n\n\tvar iauthor/*:Array<string>*/ = [];\n\to.push(\"<authors>\");\n\tdata.forEach(function(x) { x[1].forEach(function(w) { var a = escapexml(w.a);\n\t\tif(iauthor.indexOf(a) == -1) {\n\t\t\tiauthor.push(a);\n\t\t\to.push(\"<author>\" + a + \"</author>\");\n\t\t}\n\t\tif(w.T && w.ID && iauthor.indexOf(\"tc=\" + w.ID) == -1) {\n\t\t\tiauthor.push(\"tc=\" + w.ID);\n\t\t\to.push(\"<author>\" + \"tc=\" + w.ID + \"</author>\");\n\t\t}\n\t}); });\n\tif(iauthor.length == 0) { iauthor.push(\"SheetJ5\"); o.push(\"<author>SheetJ5</author>\"); }\n\to.push(\"</authors>\");\n\to.push(\"<commentList>\");\n\tdata.forEach(function(d) {\n\t\t/* 18.7.3 CT_Comment */\n\t\tvar lastauthor = 0, ts = [], tcnt = 0;\n\t\tif(d[1][0] && d[1][0].T && d[1][0].ID) lastauthor = iauthor.indexOf(\"tc=\" + d[1][0].ID);\n\t\td[1].forEach(function(c) {\n\t\t\tif(c.a) lastauthor = iauthor.indexOf(escapexml(c.a));\n\t\t\tif(c.T) ++tcnt;\n\t\t\tts.push(c.t == null ? \"\" : escapexml(c.t));\n\t\t});\n\t\tif(tcnt === 0) {\n\t\t\td[1].forEach(function(c) {\n\t\t\t\to.push('<comment ref=\"' + d[0] + '\" authorId=\"' + iauthor.indexOf(escapexml(c.a)) + '\"><text>');\n\t\t\t\to.push(writetag(\"t\", c.t == null ? \"\" : escapexml(c.t)));\n\t\t\t\to.push('</text></comment>');\n\t\t\t});\n\t\t} else {\n\t\t\tif(d[1][0] && d[1][0].T && d[1][0].ID) lastauthor = iauthor.indexOf(\"tc=\" + d[1][0].ID);\n\t\t\t/* based on Threaded Comments -> Comments projection */\n\t\t\to.push('<comment ref=\"' + d[0] + '\" authorId=\"' + lastauthor + '\"><text>');\n\t\t\tvar t = \"Comment:\\n    \" + (ts[0]) + \"\\n\";\n\t\t\tfor(var i = 1; i < ts.length; ++i) t += \"Reply:\\n    \" + ts[i] + \"\\n\";\n\t\t\to.push(writetag(\"t\", escapexml(t)));\n\t\t\to.push('</text></comment>');\n\t\t}\n\t});\n\to.push(\"</commentList>\");\n\tif(o.length>2) { o[o.length] = ('</comments>'); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSX] 2.1.17 */\nfunction parse_tcmnt_xml(data/*:string*/, opts)/*:Array<RawComment>*/ {\n\tvar out = [];\n\tvar pass = false, comment = {}, tidx = 0;\n\tdata.replace(tagregex, function xml_tcmnt(x, idx) {\n\t\tvar y/*:any*/ = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '<?xml': break;\n\n\t\t\t/* 2.6.207 ThreadedComments CT_ThreadedComments */\n\t\t\tcase '<ThreadedComments': break;\n\t\t\tcase '</ThreadedComments>': break;\n\n\t\t\t/* 2.6.205 threadedComment CT_ThreadedComment */\n\t\t\tcase '<threadedComment': comment = {author: y.personId, guid: y.id, ref: y.ref, T: 1}; break;\n\t\t\tcase '</threadedComment>': if(comment.t != null) out.push(comment); break;\n\n\t\t\tcase '<text>': case '<text': tidx = idx + x.length; break;\n\t\t\tcase '</text>': comment.t = data.slice(tidx, idx).replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\"); break;\n\n\t\t\t/* 2.6.206 mentions CT_ThreadedCommentMentions TODO */\n\t\t\tcase '<mentions': case '<mentions>': pass = true; break;\n\t\t\tcase '</mentions>': pass = false; break;\n\n\t\t\t/* 2.6.202 mention CT_Mention TODO */\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '<extLst': case '<extLst>': case '</extLst>': case '<extLst/>': break;\n\t\t\t/* 18.2.7  ext CT_Extension + */\n\t\t\tcase '<ext': pass=true; break;\n\t\t\tcase '</ext>': pass=false; break;\n\n\t\t\tdefault: if(!pass && opts.WTF) throw new Error('unrecognized ' + y[0] + ' in threaded comments');\n\t\t}\n\t\treturn x;\n\t});\n\treturn out;\n}\n\nfunction write_tcmnt_xml(comments, people, opts) {\n\tvar o = [XML_HEADER, writextag('ThreadedComments', null, { 'xmlns': XMLNS.TCMNT }).replace(/[\\/]>/, \">\")];\n\tcomments.forEach(function(carr) {\n\t\tvar rootid = \"\";\n\t\t(carr[1] || []).forEach(function(c, idx) {\n\t\t\tif(!c.T) { delete c.ID; return; }\n\t\t\tif(c.a && people.indexOf(c.a) == -1) people.push(c.a);\n\t\t\tvar tcopts = {\n\t\t\t\tref: carr[0],\n\t\t\t\tid: \"{54EE7951-7262-4200-6969-\" + (\"000000000000\" + opts.tcid++).slice(-12) + \"}\"\n\t\t\t};\n\t\t\tif(idx == 0) rootid = tcopts.id;\n\t\t\telse tcopts.parentId = rootid;\n\t\t\tc.ID = tcopts.id;\n\t\t\tif(c.a) tcopts.personId = \"{54EE7950-7262-4200-6969-\" + (\"000000000000\" + people.indexOf(c.a)).slice(-12) + \"}\";\n\t\t\to.push(writextag('threadedComment', writetag('text', c.t||\"\"), tcopts));\n\t\t});\n\t});\n\to.push('</ThreadedComments>');\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSX] 2.1.18 */\nfunction parse_people_xml(data/*:string*/, opts) {\n\tvar out = [];\n\tvar pass = false;\n\tdata.replace(tagregex, function xml_tcmnt(x) {\n\t\tvar y/*:any*/ = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '<?xml': break;\n\n\t\t\t/* 2.4.85 personList CT_PersonList */\n\t\t\tcase '<personList': break;\n\t\t\tcase '</personList>': break;\n\n\t\t\t/* 2.6.203 person CT_Person TODO: providers */\n\t\t\tcase '<person': out.push({name: y.displayname, id: y.id }); break;\n\t\t\tcase '</person>': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '<extLst': case '<extLst>': case '</extLst>': case '<extLst/>': break;\n\t\t\t/* 18.2.7  ext CT_Extension + */\n\t\t\tcase '<ext': pass=true; break;\n\t\t\tcase '</ext>': pass=false; break;\n\n\t\t\tdefault: if(!pass && opts.WTF) throw new Error('unrecognized ' + y[0] + ' in threaded comments');\n\t\t}\n\t\treturn x;\n\t});\n\treturn out;\n}\nfunction write_people_xml(people/*, opts*/) {\n\tvar o = [XML_HEADER, writextag('personList', null, {\n\t\t'xmlns': XMLNS.TCMNT,\n\t\t'xmlns:x': XMLNS_main[0]\n\t}).replace(/[\\/]>/, \">\")];\n\tpeople.forEach(function(person, idx) {\n\t\to.push(writextag('person', null, {\n\t\t\tdisplayName: person,\n\t\t\tid: \"{54EE7950-7262-4200-6969-\" + (\"000000000000\" + idx).slice(-12) + \"}\",\n\t\t\tuserId: person,\n\t\t\tproviderId: \"None\"\n\t\t}));\n\t});\n\to.push(\"</personList>\");\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.28 BrtBeginComment */\nfunction parse_BrtBeginComment(data) {\n\tvar out = {};\n\tout.iauthor = data.read_shift(4);\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tout.rfx = rfx.s;\n\tout.ref = encode_cell(rfx.s);\n\tdata.l += 16; /*var guid = parse_GUID(data); */\n\treturn out;\n}\nfunction write_BrtBeginComment(data, o) {\n\tif(o == null) o = new_buf(36);\n\to.write_shift(4, data[1].iauthor);\n\twrite_UncheckedRfX((data[0]/*:any*/), o);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.327 BrtCommentAuthor */\nvar parse_BrtCommentAuthor = parse_XLWideString;\nfunction write_BrtCommentAuthor(data) { return write_XLWideString(data.slice(0, 54)); }\n\n/* [MS-XLSB] 2.1.7.8 Comments */\nfunction parse_comments_bin(data, opts)/*:Array<RawComment>*/ {\n\tvar out/*:Array<RawComment>*/ = [];\n\tvar authors/*:Array<string>*/ = [];\n\tvar c = {};\n\tvar pass = false;\n\trecordhopper(data, function hopper_cmnt(val, R, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x0278: /* 'BrtCommentAuthor' */\n\t\t\t\tauthors.push(val); break;\n\t\t\tcase 0x027B: /* 'BrtBeginComment' */\n\t\t\t\tc = val; break;\n\t\t\tcase 0x027D: /* 'BrtCommentText' */\n\t\t\t\tc.t = val.t; c.h = val.h; c.r = val.r; break;\n\t\t\tcase 0x027C: /* 'BrtEndComment' */\n\t\t\t\tc.author = authors[c.iauthor];\n\t\t\t\tdelete (c/*:any*/).iauthor;\n\t\t\t\tif(opts.sheetRows && c.rfx && opts.sheetRows <= c.rfx.r) break;\n\t\t\t\tif(!c.t) c.t = \"\";\n\t\t\t\tdelete c.rfx; out.push(c); break;\n\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */ break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */ break;\n\n\n\t\t\tdefault:\n\t\t\t\tif(R.T){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t});\n\treturn out;\n}\n\nfunction write_comments_bin(data/*::, opts*/) {\n\tvar ba = buf_array();\n\tvar iauthor/*:Array<string>*/ = [];\n\twrite_record(ba, 0x0274 /* BrtBeginComments */);\n\n\twrite_record(ba, 0x0276 /* BrtBeginCommentAuthors */);\n\tdata.forEach(function(comment) {\n\t\tcomment[1].forEach(function(c) {\n\t\t\tif(iauthor.indexOf(c.a) > -1) return;\n\t\t\tiauthor.push(c.a.slice(0,54));\n\t\t\twrite_record(ba, 0x0278 /* BrtCommentAuthor */, write_BrtCommentAuthor(c.a));\n\t\t\tif(c.T && c.ID && iauthor.indexOf(\"tc=\" + c.ID) == -1) {\n\t\t\t\tiauthor.push(\"tc=\" + c.ID);\n\t\t\t\twrite_record(ba, 0x0278 /* BrtCommentAuthor */, write_BrtCommentAuthor(\"tc=\" + c.ID));\n\t\t\t}\n\t\t});\n\t});\n\twrite_record(ba, 0x0277 /* BrtEndCommentAuthors */);\n\n\twrite_record(ba, 0x0279 /* BrtBeginCommentList */);\n\tdata.forEach(function(comment) {\n\t\tcomment[1].forEach(function(c) {\n\t\t\tvar _ia = -1;\n\t\t\tif(c.ID) _ia = iauthor.indexOf(\"tc=\" + c.ID);\n\t\t\tif(_ia == -1 && comment[1][0].T && comment[1][0].ID) _ia = iauthor.indexOf(\"tc=\" + comment[1][0].ID);\n\t\t\tif(_ia == -1) _ia = iauthor.indexOf(c.a);\n\t\t\tc.iauthor = _ia;\n\t\t\tvar range = {s:decode_cell(comment[0]),e:decode_cell(comment[0])};\n\t\t\twrite_record(ba, 0x027B /* BrtBeginComment */, write_BrtBeginComment([range, c]));\n\t\t\tif(c.t && c.t.length > 0) write_record(ba, 0x027D /* BrtCommentText */, write_BrtCommentText(c));\n\t\t\twrite_record(ba, 0x027C /* BrtEndComment */);\n\t\t\tdelete c.iauthor;\n\t\t});\n\t});\n\twrite_record(ba, 0x027A /* BrtEndCommentList */);\n\n\twrite_record(ba, 0x0275 /* BrtEndComments */);\n\treturn ba.end();\n}\nvar CT_VBA = \"application/vnd.ms-office.vbaProject\";\nfunction make_vba_xls(cfb) {\n  var newcfb = CFB.utils.cfb_new({ root: \"R\" });\n  cfb.FullPaths.forEach(function(p, i) {\n    if (p.slice(-1) === \"/\" || !p.match(/_VBA_PROJECT_CUR/))\n      return;\n    var newpath = p.replace(/^[^\\/]*/, \"R\").replace(/\\/_VBA_PROJECT_CUR\\u0000*/, \"\");\n    CFB.utils.cfb_add(newcfb, newpath, cfb.FileIndex[i].content);\n  });\n  return CFB.write(newcfb);\n}\nfunction fill_vba_xls(cfb, vba) {\n  vba.FullPaths.forEach(function(p, i) {\n    if (i == 0)\n      return;\n    var newpath = p.replace(/^[\\/]*[^\\/]*[\\/]/, \"/_VBA_PROJECT_CUR/\");\n    if (newpath.slice(-1) !== \"/\")\n      CFB.utils.cfb_add(cfb, newpath, vba.FileIndex[i].content);\n  });\n}\nvar VBAFMTS = [\"xlsb\", \"xlsm\", \"xlam\", \"biff8\", \"xla\"];\n/* macro and dialog sheet stubs */\nfunction parse_ds_bin(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'dialog'}; }\nfunction parse_ds_xml(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'dialog'}; }\nfunction parse_ms_bin(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'macro'}; }\nfunction parse_ms_xml(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'macro'}; }\n/* TODO: it will be useful to parse the function str */\nvar rc_to_a1 = /*#__PURE__*/(function(){\n\tvar rcregex = /(^|[^A-Za-z_])R(\\[?-?\\d+\\]|[1-9]\\d*|)C(\\[?-?\\d+\\]|[1-9]\\d*|)(?![A-Za-z0-9_])/g;\n\tvar rcbase/*:Cell*/ = ({r:0,c:0}/*:any*/);\n\tfunction rcfunc($$,$1,$2,$3) {\n\t\tvar cRel = false, rRel = false;\n\n\t\tif($2.length == 0) rRel = true;\n\t\telse if($2.charAt(0) == \"[\") { rRel = true; $2 = $2.slice(1, -1); }\n\n\t\tif($3.length == 0) cRel = true;\n\t\telse if($3.charAt(0) == \"[\") { cRel = true; $3 = $3.slice(1, -1); }\n\n\t\tvar R = $2.length>0?parseInt($2,10)|0:0, C = $3.length>0?parseInt($3,10)|0:0;\n\n\t\tif(cRel) C += rcbase.c; else --C;\n\t\tif(rRel) R += rcbase.r; else --R;\n\t\treturn $1 + (cRel ? \"\" : \"$\") + encode_col(C) + (rRel ? \"\" : \"$\") + encode_row(R);\n\t}\n\treturn function rc_to_a1(fstr/*:string*/, base/*:Cell*/)/*:string*/ {\n\t\trcbase = base;\n\t\treturn fstr.replace(rcregex, rcfunc);\n\t};\n})();\n\nvar crefregex = /(^|[^._A-Z0-9])(\\$?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])(\\$?)(\\d{1,7})(?![_.\\(A-Za-z0-9])/g;\ntry {\n\tcrefregex = /(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)(10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})(?![_.\\(A-Za-z0-9])/g;\n}catch(e){}\nvar a1_to_rc = /*#__PURE__*/(function(){\n\treturn function a1_to_rc(fstr/*:string*/, base/*:CellAddress*/) {\n\t\treturn fstr.replace(crefregex, function($0, $1, $2, $3, $4, $5) {\n\t\t\tvar c = decode_col($3) - ($2 ? 0 : base.c);\n\t\t\tvar r = decode_row($5) - ($4 ? 0 : base.r);\n\t\t\tvar R = $4 == \"$\" ? (r+1) : (r == 0 ? \"\" : \"[\" + r + \"]\");\n\t\t\tvar C = $2 == \"$\" ? (c+1) : (c == 0 ? \"\" : \"[\" + c + \"]\");\n\t\t\treturn $1 + \"R\" + R + \"C\" + C;\n\t\t});\n\t};\n})();\n\n/* no defined name can collide with a valid cell address A1:XFD1048576 ... except LOG10! */\nfunction shift_formula_str(f/*:string*/, delta/*:Cell*/)/*:string*/ {\n\treturn f.replace(crefregex, function($0, $1, $2, $3, $4, $5) {\n\t\treturn $1+($2==\"$\" ? $2+$3 : encode_col(decode_col($3)+delta.c))+($4==\"$\" ? $4+$5 : encode_row(decode_row($5) + delta.r));\n\t});\n}\n\nfunction shift_formula_xlsx(f/*:string*/, range/*:string*/, cell/*:string*/)/*:string*/ {\n\tvar r = decode_range(range), s = r.s, c = decode_cell(cell);\n\tvar delta = {r:c.r - s.r, c:c.c - s.c};\n\treturn shift_formula_str(f, delta);\n}\n\n/* TODO: parse formula */\nfunction fuzzyfmla(f/*:string*/)/*:boolean*/ {\n\tif(f.length == 1) return false;\n\treturn true;\n}\n\nfunction _xlfn(f/*:string*/)/*:string*/ {\n\treturn f.replace(/_xlfn\\./g,\"\");\n}\nfunction parseread1(blob) { blob.l+=1; return; }\n\n/* [MS-XLS] 2.5.51 */\nfunction parse_ColRelU(blob, length) {\n\tvar c = blob.read_shift(length == 1 ? 1 : 2);\n\treturn [c & 0x3FFF, (c >> 14) & 1, (c >> 15) & 1];\n}\n\n/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.89 */\nfunction parse_RgceArea(blob, length, opts) {\n\tvar w = 2;\n\tif(opts) {\n\t\tif(opts.biff >= 2 && opts.biff <= 5) return parse_RgceArea_BIFF2(blob, length, opts);\n\t\telse if(opts.biff == 12) w = 4;\n\t}\n\tvar r=blob.read_shift(w), R=blob.read_shift(w);\n\tvar c=parse_ColRelU(blob, 2);\n\tvar C=parse_ColRelU(blob, 2);\n\treturn { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };\n}\n/* BIFF 2-5 encodes flags in the row field */\nfunction parse_RgceArea_BIFF2(blob/*::, length, opts*/) {\n\tvar r=parse_ColRelU(blob, 2), R=parse_ColRelU(blob, 2);\n\tvar c=blob.read_shift(1);\n\tvar C=blob.read_shift(1);\n\treturn { s:{r:r[0], c:c, cRel:r[1], rRel:r[2]}, e:{r:R[0], c:C, cRel:R[1], rRel:R[2]} };\n}\n\n/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.90 */\nfunction parse_RgceAreaRel(blob, length, opts) {\n\tif(opts.biff < 8) return parse_RgceArea_BIFF2(blob, length, opts);\n\tvar r=blob.read_shift(opts.biff == 12 ? 4 : 2), R=blob.read_shift(opts.biff == 12 ? 4 : 2);\n\tvar c=parse_ColRelU(blob, 2);\n\tvar C=parse_ColRelU(blob, 2);\n\treturn { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };\n}\n\n/* [MS-XLS] 2.5.198.109 ; [MS-XLSB] 2.5.97.91 */\nfunction parse_RgceLoc(blob, length, opts) {\n\tif(opts && opts.biff >= 2 && opts.biff <= 5) return parse_RgceLoc_BIFF2(blob, length, opts);\n\tvar r = blob.read_shift(opts && opts.biff == 12 ? 4 : 2);\n\tvar c = parse_ColRelU(blob, 2);\n\treturn {r:r, c:c[0], cRel:c[1], rRel:c[2]};\n}\nfunction parse_RgceLoc_BIFF2(blob/*::, length, opts*/) {\n\tvar r = parse_ColRelU(blob, 2);\n\tvar c = blob.read_shift(1);\n\treturn {r:r[0], c:c, cRel:r[1], rRel:r[2]};\n}\n\n/* [MS-XLS] 2.5.198.107, 2.5.47 */\nfunction parse_RgceElfLoc(blob/*::, length, opts*/) {\n\tvar r = blob.read_shift(2);\n\tvar c = blob.read_shift(2);\n\treturn {r:r, c:c & 0xFF, fQuoted:!!(c & 0x4000), cRel:c>>15, rRel:c>>15 };\n}\n\n/* [MS-XLS] 2.5.198.111 ; [MS-XLSB] 2.5.97.92 TODO */\nfunction parse_RgceLocRel(blob, length, opts) {\n\tvar biff = opts && opts.biff ? opts.biff : 8;\n\tif(biff >= 2 && biff <= 5) return parse_RgceLocRel_BIFF2(blob, length, opts);\n\tvar r = blob.read_shift(biff >= 12 ? 4 : 2);\n\tvar cl = blob.read_shift(2);\n\tvar cRel = (cl & 0x4000) >> 14, rRel = (cl & 0x8000) >> 15;\n\tcl &= 0x3FFF;\n\tif(rRel == 1) while(r > 0x7FFFF) r -= 0x100000;\n\tif(cRel == 1) while(cl > 0x1FFF) cl = cl - 0x4000;\n\treturn {r:r,c:cl,cRel:cRel,rRel:rRel};\n}\nfunction parse_RgceLocRel_BIFF2(blob/*::, length:number, opts*/) {\n\tvar rl = blob.read_shift(2);\n\tvar c = blob.read_shift(1);\n\tvar rRel = (rl & 0x8000) >> 15, cRel = (rl & 0x4000) >> 14;\n\trl &= 0x3FFF;\n\tif(rRel == 1 && rl >= 0x2000) rl = rl - 0x4000;\n\tif(cRel == 1 && c >= 0x80) c = c - 0x100;\n\treturn {r:rl,c:c,cRel:cRel,rRel:rRel};\n}\n\n/* [MS-XLS] 2.5.198.27 ; [MS-XLSB] 2.5.97.18 */\nfunction parse_PtgArea(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar area = parse_RgceArea(blob, opts.biff >= 2 && opts.biff <= 5 ? 6 : 8, opts);\n\treturn [type, area];\n}\n\n/* [MS-XLS] 2.5.198.28 ; [MS-XLSB] 2.5.97.19 */\nfunction parse_PtgArea3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2, 'i');\n\tvar w = 8;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: blob.l += 12; w = 6; break;\n\t\tcase 12: w = 12; break;\n\t}\n\tvar area = parse_RgceArea(blob, w, opts);\n\treturn [type, ixti, area];\n}\n\n/* [MS-XLS] 2.5.198.29 ; [MS-XLSB] 2.5.97.20 */\nfunction parse_PtgAreaErr(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tblob.l += opts && (opts.biff > 8) ? 12 : (opts.biff < 8 ? 6 : 8);\n\treturn [type];\n}\n/* [MS-XLS] 2.5.198.30 ; [MS-XLSB] 2.5.97.21 */\nfunction parse_PtgAreaErr3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2);\n\tvar w = 8;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: blob.l += 12; w = 6; break;\n\t\tcase 12: w = 12; break;\n\t}\n\tblob.l += w;\n\treturn [type, ixti];\n}\n\n/* [MS-XLS] 2.5.198.31 ; [MS-XLSB] 2.5.97.22 */\nfunction parse_PtgAreaN(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar area = parse_RgceAreaRel(blob, length - 1, opts);\n\treturn [type, area];\n}\n\n/* [MS-XLS] 2.5.198.32 ; [MS-XLSB] 2.5.97.23 */\nfunction parse_PtgArray(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tblob.l += opts.biff == 2 ? 6 : opts.biff == 12 ? 14 : 7;\n\treturn [type];\n}\n\n/* [MS-XLS] 2.5.198.33 ; [MS-XLSB] 2.5.97.24 */\nfunction parse_PtgAttrBaxcel(blob) {\n\tvar bitSemi = blob[blob.l+1] & 0x01; /* 1 = volatile */\n\tvar bitBaxcel = 1;\n\tblob.l += 4;\n\treturn [bitSemi, bitBaxcel];\n}\n\n/* [MS-XLS] 2.5.198.34 ; [MS-XLSB] 2.5.97.25 */\nfunction parse_PtgAttrChoose(blob, length, opts)/*:Array<number>*/ {\n\tblob.l +=2;\n\tvar offset = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\tvar o/*:Array<number>*/ = [];\n\t/* offset is 1 less than the number of elements */\n\tfor(var i = 0; i <= offset; ++i) o.push(blob.read_shift(opts && opts.biff == 2 ? 1 : 2));\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.35 ; [MS-XLSB] 2.5.97.26 */\nfunction parse_PtgAttrGoto(blob, length, opts) {\n\tvar bitGoto = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitGoto, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];\n}\n\n/* [MS-XLS] 2.5.198.36 ; [MS-XLSB] 2.5.97.27 */\nfunction parse_PtgAttrIf(blob, length, opts) {\n\tvar bitIf = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitIf, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];\n}\n\n/* [MS-XLSB] 2.5.97.28 */\nfunction parse_PtgAttrIfError(blob) {\n\tvar bitIf = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitIf, blob.read_shift(2)];\n}\n\n/* [MS-XLS] 2.5.198.37 ; [MS-XLSB] 2.5.97.29 */\nfunction parse_PtgAttrSemi(blob, length, opts) {\n\tvar bitSemi = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += opts && opts.biff == 2 ? 3 : 4;\n\treturn [bitSemi];\n}\n\n/* [MS-XLS] 2.5.198.40 ; [MS-XLSB] 2.5.97.32 */\nfunction parse_PtgAttrSpaceType(blob/*::, length*/) {\n\tvar type = blob.read_shift(1), cch = blob.read_shift(1);\n\treturn [type, cch];\n}\n\n/* [MS-XLS] 2.5.198.38 ; [MS-XLSB] 2.5.97.30 */\nfunction parse_PtgAttrSpace(blob) {\n\tblob.read_shift(2);\n\treturn parse_PtgAttrSpaceType(blob, 2);\n}\n\n/* [MS-XLS] 2.5.198.39 ; [MS-XLSB] 2.5.97.31 */\nfunction parse_PtgAttrSpaceSemi(blob) {\n\tblob.read_shift(2);\n\treturn parse_PtgAttrSpaceType(blob, 2);\n}\n\n/* [MS-XLS] 2.5.198.84 ; [MS-XLSB] 2.5.97.68 TODO */\nfunction parse_PtgRef(blob, length, opts) {\n\t//var ptg = blob[blob.l] & 0x1F;\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar loc = parse_RgceLoc(blob, 0, opts);\n\treturn [type, loc];\n}\n\n/* [MS-XLS] 2.5.198.88 ; [MS-XLSB] 2.5.97.72 TODO */\nfunction parse_PtgRefN(blob, length, opts) {\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar loc = parse_RgceLocRel(blob, 0, opts);\n\treturn [type, loc];\n}\n\n/* [MS-XLS] 2.5.198.85 ; [MS-XLSB] 2.5.97.69 TODO */\nfunction parse_PtgRef3d(blob, length, opts) {\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar ixti = blob.read_shift(2); // XtiIndex\n\tif(opts && opts.biff == 5) blob.l += 12;\n\tvar loc = parse_RgceLoc(blob, 0, opts); // TODO: or RgceLocRel\n\treturn [type, ixti, loc];\n}\n\n\n/* [MS-XLS] 2.5.198.62 ; [MS-XLSB] 2.5.97.45 TODO */\nfunction parse_PtgFunc(blob, length, opts) {\n\t//var ptg = blob[blob.l] & 0x1F;\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar iftab = blob.read_shift(opts && opts.biff <= 3 ? 1 : 2);\n\treturn [FtabArgc[iftab], Ftab[iftab], type];\n}\n/* [MS-XLS] 2.5.198.63 ; [MS-XLSB] 2.5.97.46 TODO */\nfunction parse_PtgFuncVar(blob, length, opts) {\n\tvar type = blob[blob.l++];\n\tvar cparams = blob.read_shift(1), tab = opts && opts.biff <= 3 ? [(type == 0x58 ? -1 : 0), blob.read_shift(1)]: parsetab(blob);\n\treturn [cparams, (tab[0] === 0 ? Ftab : Cetab)[tab[1]]];\n}\n\nfunction parsetab(blob) {\n\treturn [blob[blob.l+1]>>7, blob.read_shift(2) & 0x7FFF];\n}\n\n/* [MS-XLS] 2.5.198.41 ; [MS-XLSB] 2.5.97.33 */\nfunction parse_PtgAttrSum(blob, length, opts) {\n\tblob.l += opts && opts.biff == 2 ? 3 : 4; return;\n}\n\n/* [MS-XLS] 2.5.198.58 ; [MS-XLSB] 2.5.97.40 */\nfunction parse_PtgExp(blob, length, opts) {\n\tblob.l++;\n\tif(opts && opts.biff == 12) return [blob.read_shift(4, 'i'), 0];\n\tvar row = blob.read_shift(2);\n\tvar col = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [row, col];\n}\n\n/* [MS-XLS] 2.5.198.57 ; [MS-XLSB] 2.5.97.39 */\nfunction parse_PtgErr(blob) { blob.l++; return BErr[blob.read_shift(1)]; }\n\n/* [MS-XLS] 2.5.198.66 ; [MS-XLSB] 2.5.97.49 */\nfunction parse_PtgInt(blob) { blob.l++; return blob.read_shift(2); }\n\n/* [MS-XLS] 2.5.198.42 ; [MS-XLSB] 2.5.97.34 */\nfunction parse_PtgBool(blob) { blob.l++; return blob.read_shift(1)!==0;}\n\n/* [MS-XLS] 2.5.198.79 ; [MS-XLSB] 2.5.97.63 */\nfunction parse_PtgNum(blob) { blob.l++; return parse_Xnum(blob, 8); }\n\n/* [MS-XLS] 2.5.198.89 ; [MS-XLSB] 2.5.97.74 */\nfunction parse_PtgStr(blob, length, opts) { blob.l++; return parse_ShortXLUnicodeString(blob, length-1, opts); }\n\n/* [MS-XLS] 2.5.192.112 + 2.5.192.11{3,4,5,6,7} */\n/* [MS-XLSB] 2.5.97.93 + 2.5.97.9{4,5,6,7} */\nfunction parse_SerAr(blob, biff/*:number*/) {\n\tvar val = [blob.read_shift(1)];\n\tif(biff == 12) switch(val[0]) {\n\t\tcase 0x02: val[0] = 0x04; break; /* SerBool */\n\t\tcase 0x04: val[0] = 0x10; break; /* SerErr */\n\t\tcase 0x00: val[0] = 0x01; break; /* SerNum */\n\t\tcase 0x01: val[0] = 0x02; break; /* SerStr */\n\t}\n\tswitch(val[0]) {\n\t\tcase 0x04: /* SerBool -- boolean */\n\t\t\tval[1] = parsebool(blob, 1) ? 'TRUE' : 'FALSE';\n\t\t\tif(biff != 12) blob.l += 7; break;\n\t\tcase 0x25: /* appears to be an alias */\n\t\tcase 0x10: /* SerErr -- error */\n\t\t\tval[1] = BErr[blob[blob.l]];\n\t\t\tblob.l += ((biff == 12) ? 4 : 8); break;\n\t\tcase 0x00: /* SerNil -- honestly, I'm not sure how to reproduce this */\n\t\t\tblob.l += 8; break;\n\t\tcase 0x01: /* SerNum -- Xnum */\n\t\t\tval[1] = parse_Xnum(blob, 8); break;\n\t\tcase 0x02: /* SerStr -- XLUnicodeString (<256 chars) */\n\t\t\tval[1] = parse_XLUnicodeString2(blob, 0, {biff:biff > 0 && biff < 8 ? 2 : biff}); break;\n\t\tdefault: throw new Error(\"Bad SerAr: \" + val[0]); /* Unreachable */\n\t}\n\treturn val;\n}\n\n/* [MS-XLS] 2.5.198.61 ; [MS-XLSB] 2.5.97.44 */\nfunction parse_PtgExtraMem(blob, cce, opts) {\n\tvar count = blob.read_shift((opts.biff == 12) ? 4 : 2);\n\tvar out/*:Array<Range>*/ = [];\n\tfor(var i = 0; i != count; ++i) out.push(((opts.biff == 12) ? parse_UncheckedRfX : parse_Ref8U)(blob, 8));\n\treturn out;\n}\n\n/* [MS-XLS] 2.5.198.59 ; [MS-XLSB] 2.5.97.41 */\nfunction parse_PtgExtraArray(blob, length, opts) {\n\tvar rows = 0, cols = 0;\n\tif(opts.biff == 12) {\n\t\trows = blob.read_shift(4); // DRw\n\t\tcols = blob.read_shift(4); // DCol\n\t} else {\n\t\tcols = 1 + blob.read_shift(1); //DColByteU\n\t\trows = 1 + blob.read_shift(2); //DRw\n\t}\n\tif(opts.biff >= 2 && opts.biff < 8) { --rows; if(--cols == 0) cols = 0x100; }\n\t// $FlowIgnore\n\tfor(var i = 0, o/*:Array<Array<any>>*/ = []; i != rows && (o[i] = []); ++i)\n\t\tfor(var j = 0; j != cols; ++j) o[i][j] = parse_SerAr(blob, opts.biff);\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 */\nfunction parse_PtgName(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar w = (!opts || (opts.biff >= 8)) ? 4 : 2;\n\tvar nameindex = blob.read_shift(w);\n\tswitch(opts.biff) {\n\t\tcase 2: blob.l += 5; break;\n\t\tcase 3: case 4: blob.l += 8; break;\n\t\tcase 5: blob.l += 12; break;\n\t}\n\treturn [type, 0, nameindex];\n}\n\n/* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 */\nfunction parse_PtgNameX(blob, length, opts) {\n\tif(opts.biff == 5) return parse_PtgNameX_BIFF5(blob, length, opts);\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar ixti = blob.read_shift(2); // XtiIndex\n\tvar nameindex = blob.read_shift(4);\n\treturn [type, ixti, nameindex];\n}\nfunction parse_PtgNameX_BIFF5(blob/*::, length, opts*/) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar ixti = blob.read_shift(2, 'i'); // XtiIndex\n\tblob.l += 8;\n\tvar nameindex = blob.read_shift(2);\n\tblob.l += 12;\n\treturn [type, ixti, nameindex];\n}\n\n/* [MS-XLS] 2.5.198.70 ; [MS-XLSB] 2.5.97.54 */\nfunction parse_PtgMemArea(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tblob.l += (opts && opts.biff == 2 ? 3 : 4);\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [type, cce];\n}\n\n/* [MS-XLS] 2.5.198.72 ; [MS-XLSB] 2.5.97.56 */\nfunction parse_PtgMemFunc(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [type, cce];\n}\n\n\n/* [MS-XLS] 2.5.198.86 ; [MS-XLSB] 2.5.97.69 */\nfunction parse_PtgRefErr(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tblob.l += 4;\n\tif(opts.biff < 8) blob.l--;\n\tif(opts.biff == 12) blob.l += 2;\n\treturn [type];\n}\n\n/* [MS-XLS] 2.5.198.87 ; [MS-XLSB] 2.5.97.71 */\nfunction parse_PtgRefErr3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2);\n\tvar w = 4;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: w = 15; break;\n\t\tcase 12: w = 6; break;\n\t}\n\tblob.l += w;\n\treturn [type, ixti];\n}\n\n/* [MS-XLS] 2.5.198.71 ; [MS-XLSB] 2.5.97.55 */\nvar parse_PtgMemErr = parsenoop;\n/* [MS-XLS] 2.5.198.73  ; [MS-XLSB] 2.5.97.57 */\nvar parse_PtgMemNoMem = parsenoop;\n/* [MS-XLS] 2.5.198.92 */\nvar parse_PtgTbl = parsenoop;\n\nfunction parse_PtgElfLoc(blob, length, opts) {\n\tblob.l += 2;\n\treturn [parse_RgceElfLoc(blob, 4, opts)];\n}\nfunction parse_PtgElfNoop(blob/*::, length, opts*/) {\n\tblob.l += 6;\n\treturn [];\n}\n/* [MS-XLS] 2.5.198.46 */\nvar parse_PtgElfCol = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.47 */\nvar parse_PtgElfColS = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.48 */\nvar parse_PtgElfColSV = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.49 */\nvar parse_PtgElfColV = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.50 */\nfunction parse_PtgElfLel(blob/*::, length, opts*/) {\n\tblob.l += 2;\n\treturn [parseuint16(blob), blob.read_shift(2) & 0x01];\n}\n/* [MS-XLS] 2.5.198.51 */\nvar parse_PtgElfRadical = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.52 */\nvar parse_PtgElfRadicalLel = parse_PtgElfLel;\n/* [MS-XLS] 2.5.198.53 */\nvar parse_PtgElfRadicalS = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.54 */\nvar parse_PtgElfRw = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.55 */\nvar parse_PtgElfRwV = parse_PtgElfLoc;\n\n/* [MS-XLSB] 2.5.97.52 TODO */\nvar PtgListRT = [\n\t\"Data\",\n\t\"All\",\n\t\"Headers\",\n\t\"??\",\n\t\"?Data2\",\n\t\"??\",\n\t\"?DataHeaders\",\n\t\"??\",\n\t\"Totals\",\n\t\"??\",\n\t\"??\",\n\t\"??\",\n\t\"?DataTotals\",\n\t\"??\",\n\t\"??\",\n\t\"??\",\n\t\"?Current\"\n];\nfunction parse_PtgList(blob/*::, length, opts*/) {\n\tblob.l += 2;\n\tvar ixti = blob.read_shift(2);\n\tvar flags = blob.read_shift(2);\n\tvar idx = blob.read_shift(4);\n\tvar c = blob.read_shift(2);\n\tvar C = blob.read_shift(2);\n\tvar rt = PtgListRT[(flags >> 2) & 0x1F];\n\treturn {ixti: ixti, coltype:(flags&0x3), rt:rt, idx:idx, c:c, C:C};\n}\n/* [MS-XLS] 2.5.198.91 ; [MS-XLSB] 2.5.97.76 */\nfunction parse_PtgSxName(blob/*::, length, opts*/) {\n\tblob.l += 2;\n\treturn [blob.read_shift(4)];\n}\n\n/* [XLS] old spec */\nfunction parse_PtgSheet(blob, length, opts) {\n\tblob.l += 5;\n\tblob.l += 2;\n\tblob.l += (opts.biff == 2 ? 1 : 4);\n\treturn [\"PTGSHEET\"];\n}\nfunction parse_PtgEndSheet(blob, length, opts) {\n\tblob.l += (opts.biff == 2 ? 4 : 5);\n\treturn [\"PTGENDSHEET\"];\n}\nfunction parse_PtgMemAreaN(blob/*::, length, opts*/) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(2);\n\treturn [type, cce];\n}\nfunction parse_PtgMemNoMemN(blob/*::, length, opts*/) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(2);\n\treturn [type, cce];\n}\nfunction parse_PtgAttrNoop(blob/*::, length, opts*/) {\n\tblob.l += 4;\n\treturn [0, 0];\n}\n\n/* [MS-XLS] 2.5.198.25 ; [MS-XLSB] 2.5.97.16 */\nvar PtgTypes = {\n\t0x01: { n:'PtgExp', f:parse_PtgExp },\n\t0x02: { n:'PtgTbl', f:parse_PtgTbl },\n\t0x03: { n:'PtgAdd', f:parseread1 },\n\t0x04: { n:'PtgSub', f:parseread1 },\n\t0x05: { n:'PtgMul', f:parseread1 },\n\t0x06: { n:'PtgDiv', f:parseread1 },\n\t0x07: { n:'PtgPower', f:parseread1 },\n\t0x08: { n:'PtgConcat', f:parseread1 },\n\t0x09: { n:'PtgLt', f:parseread1 },\n\t0x0A: { n:'PtgLe', f:parseread1 },\n\t0x0B: { n:'PtgEq', f:parseread1 },\n\t0x0C: { n:'PtgGe', f:parseread1 },\n\t0x0D: { n:'PtgGt', f:parseread1 },\n\t0x0E: { n:'PtgNe', f:parseread1 },\n\t0x0F: { n:'PtgIsect', f:parseread1 },\n\t0x10: { n:'PtgUnion', f:parseread1 },\n\t0x11: { n:'PtgRange', f:parseread1 },\n\t0x12: { n:'PtgUplus', f:parseread1 },\n\t0x13: { n:'PtgUminus', f:parseread1 },\n\t0x14: { n:'PtgPercent', f:parseread1 },\n\t0x15: { n:'PtgParen', f:parseread1 },\n\t0x16: { n:'PtgMissArg', f:parseread1 },\n\t0x17: { n:'PtgStr', f:parse_PtgStr },\n\t0x1A: { n:'PtgSheet', f:parse_PtgSheet },\n\t0x1B: { n:'PtgEndSheet', f:parse_PtgEndSheet },\n\t0x1C: { n:'PtgErr', f:parse_PtgErr },\n\t0x1D: { n:'PtgBool', f:parse_PtgBool },\n\t0x1E: { n:'PtgInt', f:parse_PtgInt },\n\t0x1F: { n:'PtgNum', f:parse_PtgNum },\n\t0x20: { n:'PtgArray', f:parse_PtgArray },\n\t0x21: { n:'PtgFunc', f:parse_PtgFunc },\n\t0x22: { n:'PtgFuncVar', f:parse_PtgFuncVar },\n\t0x23: { n:'PtgName', f:parse_PtgName },\n\t0x24: { n:'PtgRef', f:parse_PtgRef },\n\t0x25: { n:'PtgArea', f:parse_PtgArea },\n\t0x26: { n:'PtgMemArea', f:parse_PtgMemArea },\n\t0x27: { n:'PtgMemErr', f:parse_PtgMemErr },\n\t0x28: { n:'PtgMemNoMem', f:parse_PtgMemNoMem },\n\t0x29: { n:'PtgMemFunc', f:parse_PtgMemFunc },\n\t0x2A: { n:'PtgRefErr', f:parse_PtgRefErr },\n\t0x2B: { n:'PtgAreaErr', f:parse_PtgAreaErr },\n\t0x2C: { n:'PtgRefN', f:parse_PtgRefN },\n\t0x2D: { n:'PtgAreaN', f:parse_PtgAreaN },\n\t0x2E: { n:'PtgMemAreaN', f:parse_PtgMemAreaN },\n\t0x2F: { n:'PtgMemNoMemN', f:parse_PtgMemNoMemN },\n\t0x39: { n:'PtgNameX', f:parse_PtgNameX },\n\t0x3A: { n:'PtgRef3d', f:parse_PtgRef3d },\n\t0x3B: { n:'PtgArea3d', f:parse_PtgArea3d },\n\t0x3C: { n:'PtgRefErr3d', f:parse_PtgRefErr3d },\n\t0x3D: { n:'PtgAreaErr3d', f:parse_PtgAreaErr3d },\n\t0xFF: {}\n};\n/* These are duplicated in the PtgTypes table */\nvar PtgDupes = {\n\t0x40: 0x20, 0x60: 0x20,\n\t0x41: 0x21, 0x61: 0x21,\n\t0x42: 0x22, 0x62: 0x22,\n\t0x43: 0x23, 0x63: 0x23,\n\t0x44: 0x24, 0x64: 0x24,\n\t0x45: 0x25, 0x65: 0x25,\n\t0x46: 0x26, 0x66: 0x26,\n\t0x47: 0x27, 0x67: 0x27,\n\t0x48: 0x28, 0x68: 0x28,\n\t0x49: 0x29, 0x69: 0x29,\n\t0x4A: 0x2A, 0x6A: 0x2A,\n\t0x4B: 0x2B, 0x6B: 0x2B,\n\t0x4C: 0x2C, 0x6C: 0x2C,\n\t0x4D: 0x2D, 0x6D: 0x2D,\n\t0x4E: 0x2E, 0x6E: 0x2E,\n\t0x4F: 0x2F, 0x6F: 0x2F,\n\t0x58: 0x22, 0x78: 0x22,\n\t0x59: 0x39, 0x79: 0x39,\n\t0x5A: 0x3A, 0x7A: 0x3A,\n\t0x5B: 0x3B, 0x7B: 0x3B,\n\t0x5C: 0x3C, 0x7C: 0x3C,\n\t0x5D: 0x3D, 0x7D: 0x3D\n};\n\nvar Ptg18 = {\n\t0x01: { n:'PtgElfLel', f:parse_PtgElfLel },\n\t0x02: { n:'PtgElfRw', f:parse_PtgElfRw },\n\t0x03: { n:'PtgElfCol', f:parse_PtgElfCol },\n\t0x06: { n:'PtgElfRwV', f:parse_PtgElfRwV },\n\t0x07: { n:'PtgElfColV', f:parse_PtgElfColV },\n\t0x0A: { n:'PtgElfRadical', f:parse_PtgElfRadical },\n\t0x0B: { n:'PtgElfRadicalS', f:parse_PtgElfRadicalS },\n\t0x0D: { n:'PtgElfColS', f:parse_PtgElfColS },\n\t0x0F: { n:'PtgElfColSV', f:parse_PtgElfColSV },\n\t0x10: { n:'PtgElfRadicalLel', f:parse_PtgElfRadicalLel },\n\t0x19: { n:'PtgList', f:parse_PtgList },\n\t0x1D: { n:'PtgSxName', f:parse_PtgSxName },\n\t0xFF: {}\n};\nvar Ptg19 = {\n\t0x00: { n:'PtgAttrNoop', f:parse_PtgAttrNoop },\n\t0x01: { n:'PtgAttrSemi', f:parse_PtgAttrSemi },\n\t0x02: { n:'PtgAttrIf', f:parse_PtgAttrIf },\n\t0x04: { n:'PtgAttrChoose', f:parse_PtgAttrChoose },\n\t0x08: { n:'PtgAttrGoto', f:parse_PtgAttrGoto },\n\t0x10: { n:'PtgAttrSum', f:parse_PtgAttrSum },\n\t0x20: { n:'PtgAttrBaxcel', f:parse_PtgAttrBaxcel },\n\t0x21: { n:'PtgAttrBaxcel', f:parse_PtgAttrBaxcel },\n\t0x40: { n:'PtgAttrSpace', f:parse_PtgAttrSpace },\n\t0x41: { n:'PtgAttrSpaceSemi', f:parse_PtgAttrSpaceSemi },\n\t0x80: { n:'PtgAttrIfError', f:parse_PtgAttrIfError },\n\t0xFF: {}\n};\n\n/* [MS-XLS] 2.5.198.103 ; [MS-XLSB] 2.5.97.87 */\nfunction parse_RgbExtra(blob, length, rgce, opts) {\n\tif(opts.biff < 8) return parsenoop(blob, length);\n\tvar target = blob.l + length;\n\tvar o = [];\n\tfor(var i = 0; i !== rgce.length; ++i) {\n\t\tswitch(rgce[i][0]) {\n\t\t\tcase 'PtgArray': /* PtgArray -> PtgExtraArray */\n\t\t\t\trgce[i][1] = parse_PtgExtraArray(blob, 0, opts);\n\t\t\t\to.push(rgce[i][1]);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgMemArea': /* PtgMemArea -> PtgExtraMem */\n\t\t\t\trgce[i][2] = parse_PtgExtraMem(blob, rgce[i][1], opts);\n\t\t\t\to.push(rgce[i][2]);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgExp': /* PtgExp -> PtgExtraCol */\n\t\t\t\tif(opts && opts.biff == 12) {\n\t\t\t\t\trgce[i][1][1] = blob.read_shift(4);\n\t\t\t\t\to.push(rgce[i][1]);\n\t\t\t\t} break;\n\t\t\tcase 'PtgList': /* TODO: PtgList -> PtgExtraList */\n\t\t\tcase 'PtgElfRadicalS': /* TODO: PtgElfRadicalS -> PtgExtraElf */\n\t\t\tcase 'PtgElfColS': /* TODO: PtgElfColS -> PtgExtraElf */\n\t\t\tcase 'PtgElfColSV': /* TODO: PtgElfColSV -> PtgExtraElf */\n\t\t\t\tthrow \"Unsupported \" + rgce[i][0];\n\t\t\tdefault: break;\n\t\t}\n\t}\n\tlength = target - blob.l;\n\t/* note: this is technically an error but Excel disregards */\n\t//if(target !== blob.l && blob.l !== target - length) throw new Error(target + \" != \" + blob.l);\n\tif(length !== 0) o.push(parsenoop(blob, length));\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.104 ; [MS-XLSB] 2.5.97.88 */\nfunction parse_Rgce(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar R, id, ptgs = [];\n\twhile(target != blob.l) {\n\t\tlength = target - blob.l;\n\t\tid = blob[blob.l];\n\t\tR = PtgTypes[id] || PtgTypes[PtgDupes[id]];\n\t\tif(id === 0x18 || id === 0x19) R = (id === 0x18 ? Ptg18 : Ptg19)[blob[blob.l + 1]];\n\t\tif(!R || !R.f) { /*ptgs.push*/(parsenoop(blob, length)); }\n\t\telse { ptgs.push([R.n, R.f(blob, length, opts)]); }\n\t}\n\treturn ptgs;\n}\n\nfunction stringify_array(f/*:Array<Array<string>>*/)/*:string*/ {\n\tvar o/*:Array<string>*/ = [];\n\tfor(var i = 0; i < f.length; ++i) {\n\t\tvar x = f[i], r/*:Array<string>*/ = [];\n\t\tfor(var j = 0; j < x.length; ++j) {\n\t\t\tvar y = x[j];\n\t\t\tif(y) switch(y[0]) {\n\t\t\t\t// TODO: handle embedded quotes\n\t\t\t\tcase 0x02:\n\t\t\t\t\t/*:: if(typeof y[1] != 'string') throw \"unreachable\"; */\n\t\t\t\t\tr.push('\"' + y[1].replace(/\"/g,'\"\"') + '\"'); break;\n\t\t\t\tdefault: r.push(y[1]);\n\t\t\t} else r.push(\"\");\n\t\t}\n\t\to.push(r.join(\",\"));\n\t}\n\treturn o.join(\";\");\n}\n\n/* [MS-XLS] 2.2.2 ; [MS-XLSB] 2.2.2 TODO */\nvar PtgBinOp = {\n\tPtgAdd: \"+\",\n\tPtgConcat: \"&\",\n\tPtgDiv: \"/\",\n\tPtgEq: \"=\",\n\tPtgGe: \">=\",\n\tPtgGt: \">\",\n\tPtgLe: \"<=\",\n\tPtgLt: \"<\",\n\tPtgMul: \"*\",\n\tPtgNe: \"<>\",\n\tPtgPower: \"^\",\n\tPtgSub: \"-\"\n};\n\n// TODO: explore space\nfunction make_3d_range(start, end) {\n\tvar s = start.lastIndexOf(\"!\"), e = end.lastIndexOf(\"!\");\n\tif(s == -1 && e == -1) return start + \":\" + end;\n\tif(s > 0 && e > 0 && start.slice(0, s).toLowerCase() == end.slice(0, e).toLowerCase()) return start + \":\" + end.slice(e+1);\n\tconsole.error(\"Cannot hydrate range\", start, end);\n\treturn start + \":\" + end;\n}\n\nfunction get_ixti_raw(supbooks, ixti/*:number*/, opts)/*:string*/ {\n\tif(!supbooks) return \"SH33TJSERR0\";\n\tif(opts.biff > 8 && (!supbooks.XTI || !supbooks.XTI[ixti])) return supbooks.SheetNames[ixti];\n\tif(!supbooks.XTI) return \"SH33TJSERR6\";\n\tvar XTI = supbooks.XTI[ixti];\n\tif(opts.biff < 8) {\n\t\tif(ixti > 10000) ixti-= 65536;\n\t\tif(ixti < 0) ixti = -ixti;\n\t\treturn ixti == 0 ? \"\" : supbooks.XTI[ixti - 1];\n\t}\n\tif(!XTI) return \"SH33TJSERR1\";\n\tvar o = \"\";\n\tif(opts.biff > 8) switch(supbooks[XTI[0]][0]) {\n\t\tcase 0x0165: /* 'BrtSupSelf' */\n\t\t\to = XTI[1] == -1 ? \"#REF\" : supbooks.SheetNames[XTI[1]];\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks.SheetNames[XTI[2]];\n\t\tcase 0x0166: /* 'BrtSupSame' */\n\t\t\tif(opts.SID != null) return supbooks.SheetNames[opts.SID];\n\t\t\treturn \"SH33TJSSAME\" + supbooks[XTI[0]][0];\n\t\tcase 0x0163: /* 'BrtSupBookSrc' */\n\t\t\t/* falls through */\n\t\tdefault: return \"SH33TJSSRC\" + supbooks[XTI[0]][0];\n\t}\n\tswitch(supbooks[XTI[0]][0][0]) {\n\t\tcase 0x0401:\n\t\t\to = XTI[1] == -1 ? \"#REF\" : (supbooks.SheetNames[XTI[1]] || \"SH33TJSERR3\");\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks.SheetNames[XTI[2]];\n\t\tcase 0x3A01: return supbooks[XTI[0]].slice(1).map(function(name) { return name.Name; }).join(\";;\"); //return \"SH33TJSERR8\";\n\t\tdefault:\n\t\t\tif(!supbooks[XTI[0]][0][3]) return \"SH33TJSERR2\";\n\t\t\to = XTI[1] == -1 ? \"#REF\" : (supbooks[XTI[0]][0][3][XTI[1]] || \"SH33TJSERR4\");\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks[XTI[0]][0][3][XTI[2]];\n\t}\n}\nfunction get_ixti(supbooks, ixti/*:number*/, opts)/*:string*/ {\n\tvar ixtiraw = get_ixti_raw(supbooks, ixti, opts);\n\treturn ixtiraw == \"#REF\" ? ixtiraw : formula_quote_sheet_name(ixtiraw, opts);\n}\nfunction stringify_formula(formula/*Array<any>*/, range, cell/*:any*/, supbooks, opts)/*:string*/ {\n\tvar biff = (opts && opts.biff) || 8;\n\tvar _range = /*range != null ? range :*/ {s:{c:0, r:0},e:{c:0, r:0}};\n\tvar stack/*:Array<string>*/ = [], e1, e2, /*::type,*/ c/*:CellAddress*/, ixti=0, nameidx=0, r, sname=\"\";\n\tif(!formula[0] || !formula[0][0]) return \"\";\n\tvar last_sp = -1, sp = \"\";\n\tfor(var ff = 0, fflen = formula[0].length; ff < fflen; ++ff) {\n\t\tvar f = formula[0][ff];\n\t\tswitch(f[0]) {\n\t\t\tcase 'PtgUminus': /* [MS-XLS] 2.5.198.93 */\n\t\t\t\tstack.push(\"-\" + stack.pop()); break;\n\t\t\tcase 'PtgUplus': /* [MS-XLS] 2.5.198.95 */\n\t\t\t\tstack.push(\"+\" + stack.pop()); break;\n\t\t\tcase 'PtgPercent': /* [MS-XLS] 2.5.198.81 */\n\t\t\t\tstack.push(stack.pop() + \"%\"); break;\n\n\t\t\tcase 'PtgAdd':    /* [MS-XLS] 2.5.198.26 */\n\t\t\tcase 'PtgConcat': /* [MS-XLS] 2.5.198.43 */\n\t\t\tcase 'PtgDiv':    /* [MS-XLS] 2.5.198.45 */\n\t\t\tcase 'PtgEq':     /* [MS-XLS] 2.5.198.56 */\n\t\t\tcase 'PtgGe':     /* [MS-XLS] 2.5.198.64 */\n\t\t\tcase 'PtgGt':     /* [MS-XLS] 2.5.198.65 */\n\t\t\tcase 'PtgLe':     /* [MS-XLS] 2.5.198.68 */\n\t\t\tcase 'PtgLt':     /* [MS-XLS] 2.5.198.69 */\n\t\t\tcase 'PtgMul':    /* [MS-XLS] 2.5.198.75 */\n\t\t\tcase 'PtgNe':     /* [MS-XLS] 2.5.198.78 */\n\t\t\tcase 'PtgPower':  /* [MS-XLS] 2.5.198.82 */\n\t\t\tcase 'PtgSub':    /* [MS-XLS] 2.5.198.90 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tif(last_sp >= 0) {\n\t\t\t\t\tswitch(formula[0][last_sp][1][0]) {\n\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tsp = fill(\" \", formula[0][last_sp][1][1]); break;\n\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tsp = fill(\"\\r\", formula[0][last_sp][1][1]); break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tsp = \"\";\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + formula[0][last_sp][1][0]);\n\t\t\t\t\t}\n\t\t\t\t\te2 = e2 + sp;\n\t\t\t\t\tlast_sp = -1;\n\t\t\t\t}\n\t\t\t\tstack.push(e2+PtgBinOp[f[0]]+e1);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgIsect': /* [MS-XLS] 2.5.198.67 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(e2+\" \"+e1);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgUnion': /* [MS-XLS] 2.5.198.94 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(e2+\",\"+e1);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRange': /* [MS-XLS] 2.5.198.83 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(make_3d_range(e2,e1));\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrChoose': /* [MS-XLS] 2.5.198.34 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrGoto': /* [MS-XLS] 2.5.198.35 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrIf': /* [MS-XLS] 2.5.198.36 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrIfError': /* [MS-XLSB] 2.5.97.28 */\n\t\t\t\tbreak;\n\n\n\t\t\tcase 'PtgRef': /* [MS-XLS] 2.5.198.84 */\n\t\t\t\t/*::type = f[1][0]; */c = shift_cell_xls((f[1][1]/*:any*/), _range, opts);\n\t\t\t\tstack.push(encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRefN': /* [MS-XLS] 2.5.198.88 */\n\t\t\t\t/*::type = f[1][0]; */c = cell ? shift_cell_xls((f[1][1]/*:any*/), cell, opts) : (f[1][1]/*:any*/);\n\t\t\t\tstack.push(encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRef3d': /* [MS-XLS] 2.5.198.85 */\n\t\t\t\t/*::type = f[1][0]; */ixti = /*::Number(*/f[1][1]/*::)*/; c = shift_cell_xls((f[1][2]/*:any*/), _range, opts);\n\t\t\t\tsname = get_ixti(supbooks, ixti, opts);\n\t\t\t\tvar w = sname; /* IE9 fails on defined names */ // eslint-disable-line no-unused-vars\n\t\t\t\tstack.push(sname + \"!\" + encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgFunc': /* [MS-XLS] 2.5.198.62 */\n\t\t\tcase 'PtgFuncVar': /* [MS-XLS] 2.5.198.63 */\n\t\t\t\t/* f[1] = [argc, func, type] */\n\t\t\t\tvar argc/*:number*/ = (f[1][0]/*:any*/), func/*:string*/ = (f[1][1]/*:any*/);\n\t\t\t\tif(!argc) argc = 0;\n\t\t\t\targc &= 0x7F;\n\t\t\t\tvar args = argc == 0 ? [] : stack.slice(-argc);\n\t\t\t\tstack.length -= argc;\n\t\t\t\tif(func === 'User') func = args.shift();\n\t\t\t\tstack.push(func + \"(\" + args.join(\",\") + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgBool': /* [MS-XLS] 2.5.198.42 */\n\t\t\t\tstack.push(f[1] ? \"TRUE\" : \"FALSE\"); break;\n\t\t\tcase 'PtgInt': /* [MS-XLS] 2.5.198.66 */\n\t\t\t\tstack.push(/*::String(*/f[1]/*::)*/); break;\n\t\t\tcase 'PtgNum': /* [MS-XLS] 2.5.198.79 TODO: precision? */\n\t\t\t\tstack.push(String(f[1])); break;\n\t\t\tcase 'PtgStr': /* [MS-XLS] 2.5.198.89 */\n\t\t\t\t// $FlowIgnore\n\t\t\t\tstack.push('\"' + f[1].replace(/\"/g, '\"\"') + '\"'); break;\n\t\t\tcase 'PtgErr': /* [MS-XLS] 2.5.198.57 */\n\t\t\t\tstack.push(/*::String(*/f[1]/*::)*/); break;\n\t\t\tcase 'PtgAreaN': /* [MS-XLS] 2.5.198.31 TODO */\n\t\t\t\t/*::type = f[1][0]; */r = shift_range_xls(f[1][1], cell ? {s:cell} : _range, opts);\n\t\t\t\tstack.push(encode_range_xls((r/*:any*/), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgArea': /* [MS-XLS] 2.5.198.27 TODO: fixed points */\n\t\t\t\t/*::type = f[1][0]; */r = shift_range_xls(f[1][1], _range, opts);\n\t\t\t\tstack.push(encode_range_xls((r/*:any*/), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgArea3d': /* [MS-XLS] 2.5.198.28 TODO */\n\t\t\t\t/*::type = f[1][0]; */ixti = /*::Number(*/f[1][1]/*::)*/; r = f[1][2];\n\t\t\t\tsname = get_ixti(supbooks, ixti, opts);\n\t\t\t\tstack.push(sname + \"!\" + encode_range_xls((r/*:any*/), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrSum': /* [MS-XLS] 2.5.198.41 */\n\t\t\t\tstack.push(\"SUM(\" + stack.pop() + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrBaxcel': /* [MS-XLS] 2.5.198.33 */\n\t\t\tcase 'PtgAttrSemi': /* [MS-XLS] 2.5.198.37 */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgName': /* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 TODO: revisions */\n\t\t\t\t/* f[1] = type, 0, nameindex */\n\t\t\t\tnameidx = (f[1][2]/*:any*/);\n\t\t\t\tvar lbl = (supbooks.names||[])[nameidx-1] || (supbooks[0]||[])[nameidx];\n\t\t\t\tvar name = lbl ? lbl.Name : \"SH33TJSNAME\" + String(nameidx);\n\t\t\t\t/* [MS-XLSB] 2.5.97.10 Ftab -- last verified 20220204 */\n\t\t\t\tif(name && name.slice(0,6) == \"_xlfn.\" && !opts.xlfn) name = name.slice(6);\n\t\t\t\tstack.push(name);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgNameX': /* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 TODO: revisions */\n\t\t\t\t/* f[1] = type, ixti, nameindex */\n\t\t\t\tvar bookidx/*:number*/ = (f[1][1]/*:any*/); nameidx = (f[1][2]/*:any*/); var externbook;\n\t\t\t\t/* TODO: Properly handle missing values -- this should be using get_ixti_raw primarily */\n\t\t\t\tif(opts.biff <= 5) {\n\t\t\t\t\tif(bookidx < 0) bookidx = -bookidx;\n\t\t\t\t\tif(supbooks[bookidx]) externbook = supbooks[bookidx][nameidx];\n\t\t\t\t} else {\n\t\t\t\t\tvar o = \"\";\n\t\t\t\t\tif(((supbooks[bookidx]||[])[0]||[])[0] == 0x3A01){/* empty */}\n\t\t\t\t\telse if(((supbooks[bookidx]||[])[0]||[])[0] == 0x0401){\n\t\t\t\t\t\tif(supbooks[bookidx][nameidx] && supbooks[bookidx][nameidx].itab > 0) {\n\t\t\t\t\t\t\to = supbooks.SheetNames[supbooks[bookidx][nameidx].itab-1] + \"!\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse o = supbooks.SheetNames[nameidx-1]+ \"!\";\n\t\t\t\t\tif(supbooks[bookidx] && supbooks[bookidx][nameidx]) o += supbooks[bookidx][nameidx].Name;\n\t\t\t\t\telse if(supbooks[0] && supbooks[0][nameidx]) o += supbooks[0][nameidx].Name;\n\t\t\t\t\telse {\n\t\t\t\t\t\tvar ixtidata = (get_ixti_raw(supbooks, bookidx, opts)||\"\").split(\";;\");\n\t\t\t\t\t\tif(ixtidata[nameidx - 1]) o = ixtidata[nameidx - 1]; // TODO: confirm this is correct\n\t\t\t\t\t\telse o += \"SH33TJSERRX\";\n\t\t\t\t\t}\n\t\t\t\t\tstack.push(o);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(!externbook) externbook = {Name: \"SH33TJSERRY\"};\n\t\t\t\tstack.push(externbook.Name);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgParen': /* [MS-XLS] 2.5.198.80 */\n\t\t\t\tvar lp = '(', rp = ')';\n\t\t\t\tif(last_sp >= 0) {\n\t\t\t\t\tsp = \"\";\n\t\t\t\t\tswitch(formula[0][last_sp][1][0]) {\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 2: lp = fill(\" \", formula[0][last_sp][1][1]) + lp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 3: lp = fill(\"\\r\", formula[0][last_sp][1][1]) + lp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 4: rp = fill(\" \", formula[0][last_sp][1][1]) + rp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 5: rp = fill(\"\\r\", formula[0][last_sp][1][1]) + rp; break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + formula[0][last_sp][1][0]);\n\t\t\t\t\t}\n\t\t\t\t\tlast_sp = -1;\n\t\t\t\t}\n\t\t\t\tstack.push(lp + stack.pop() + rp); break;\n\n\t\t\tcase 'PtgRefErr': /* [MS-XLS] 2.5.198.86 */\n\t\t\t\tstack.push('#REF!'); break;\n\n\t\t\tcase 'PtgRefErr3d': /* [MS-XLS] 2.5.198.87 */\n\t\t\t\tstack.push('#REF!'); break;\n\n\t\t\tcase 'PtgExp': /* [MS-XLS] 2.5.198.58 TODO */\n\t\t\t\tc = {c:(f[1][1]/*:any*/),r:(f[1][0]/*:any*/)};\n\t\t\t\tvar q = ({c: cell.c, r:cell.r}/*:any*/);\n\t\t\t\tif(supbooks.sharedf[encode_cell(c)]) {\n\t\t\t\t\tvar parsedf = (supbooks.sharedf[encode_cell(c)]);\n\t\t\t\t\tstack.push(stringify_formula(parsedf, _range, q, supbooks, opts));\n\t\t\t\t} else {\n\t\t\t\t\tvar fnd = false;\n\t\t\t\t\tfor(e1=0;e1!=supbooks.arrayf.length; ++e1) {\n\t\t\t\t\t\t/* TODO: should be something like range_has */\n\t\t\t\t\t\te2 = supbooks.arrayf[e1];\n\t\t\t\t\t\tif(c.c < e2[0].s.c || c.c > e2[0].e.c) continue;\n\t\t\t\t\t\tif(c.r < e2[0].s.r || c.r > e2[0].e.r) continue;\n\t\t\t\t\t\tstack.push(stringify_formula(e2[1], _range, q, supbooks, opts));\n\t\t\t\t\t\tfnd = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif(!fnd) stack.push(/*::String(*/f[1]/*::)*/);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgArray': /* [MS-XLS] 2.5.198.32 TODO */\n\t\t\t\tstack.push(\"{\" + stringify_array(/*::(*/f[1]/*:: :any)*/) + \"}\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemArea': /* [MS-XLS] 2.5.198.70 TODO: confirm this is a non-display */\n\t\t\t\t//stack.push(\"(\" + f[2].map(encode_range).join(\",\") + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrSpace': /* [MS-XLS] 2.5.198.38 */\n\t\t\tcase 'PtgAttrSpaceSemi': /* [MS-XLS] 2.5.198.39 */\n\t\t\t\tlast_sp = ff;\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgTbl': /* [MS-XLS] 2.5.198.92 TODO */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemErr': /* [MS-XLS] 2.5.198.71 */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMissArg': /* [MS-XLS] 2.5.198.74 */\n\t\t\t\tstack.push(\"\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAreaErr': /* [MS-XLS] 2.5.198.29 */\n\t\t\t\tstack.push(\"#REF!\"); break;\n\n\t\t\tcase 'PtgAreaErr3d': /* [MS-XLS] 2.5.198.30 */\n\t\t\t\tstack.push(\"#REF!\"); break;\n\n\t\t\tcase 'PtgList': /* [MS-XLSB] 2.5.97.52 */\n\t\t\t\t// $FlowIgnore\n\t\t\t\tstack.push(\"Table\" + f[1].idx + \"[#\" + f[1].rt + \"]\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemAreaN':\n\t\t\tcase 'PtgMemNoMemN':\n\t\t\tcase 'PtgAttrNoop':\n\t\t\tcase 'PtgSheet':\n\t\t\tcase 'PtgEndSheet':\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemFunc': /* [MS-XLS] 2.5.198.72 TODO */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgMemNoMem': /* [MS-XLS] 2.5.198.73 TODO */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgElfCol': /* [MS-XLS] 2.5.198.46 */\n\t\t\tcase 'PtgElfColS': /* [MS-XLS] 2.5.198.47 */\n\t\t\tcase 'PtgElfColSV': /* [MS-XLS] 2.5.198.48 */\n\t\t\tcase 'PtgElfColV': /* [MS-XLS] 2.5.198.49 */\n\t\t\tcase 'PtgElfLel': /* [MS-XLS] 2.5.198.50 */\n\t\t\tcase 'PtgElfRadical': /* [MS-XLS] 2.5.198.51 */\n\t\t\tcase 'PtgElfRadicalLel': /* [MS-XLS] 2.5.198.52 */\n\t\t\tcase 'PtgElfRadicalS': /* [MS-XLS] 2.5.198.53 */\n\t\t\tcase 'PtgElfRw': /* [MS-XLS] 2.5.198.54 */\n\t\t\tcase 'PtgElfRwV': /* [MS-XLS] 2.5.198.55 */\n\t\t\t\tthrow new Error(\"Unsupported ELFs\");\n\n\t\t\tcase 'PtgSxName': /* [MS-XLS] 2.5.198.91 TODO -- find a test case */\n\t\t\t\tthrow new Error('Unrecognized Formula Token: ' + String(f));\n\t\t\tdefault: throw new Error('Unrecognized Formula Token: ' + String(f));\n\t\t}\n\t\tvar PtgNonDisp = ['PtgAttrSpace', 'PtgAttrSpaceSemi', 'PtgAttrGoto'];\n\t\tif(opts.biff != 3) if(last_sp >= 0 && PtgNonDisp.indexOf(formula[0][ff][0]) == -1) {\n\t\t\tf = formula[0][last_sp];\n\t\t\tvar _left = true;\n\t\t\tswitch(f[1][0]) {\n\t\t\t\t/* note: some bad XLSB files omit the PtgParen */\n\t\t\t\tcase 4: _left = false;\n\t\t\t\t/* falls through */\n\t\t\t\tcase 0:\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tsp = fill(\" \", f[1][1]); break;\n\t\t\t\tcase 5: _left = false;\n\t\t\t\t/* falls through */\n\t\t\t\tcase 1:\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tsp = fill(\"\\r\", f[1][1]); break;\n\t\t\t\tdefault:\n\t\t\t\t\tsp = \"\";\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + f[1][0]);\n\t\t\t}\n\t\t\tstack.push((_left ? sp : \"\") + stack.pop() + (_left ? \"\" : sp));\n\t\t\tlast_sp = -1;\n\t\t}\n\t}\n\tif(stack.length > 1 && opts.WTF) throw new Error(\"bad formula stack\");\n\tif(stack[0] == \"TRUE\") return true; if(stack[0] == \"FALSE\") return false;\n\treturn stack[0];\n}\n\n/* [MS-XLS] 2.5.198.1 TODO */\nfunction parse_ArrayParsedFormula(blob, length, opts/*::, ref*/) {\n\tvar target = blob.l + length, len = opts.biff == 2 ? 1 : 2;\n\tvar rgcb, cce = blob.read_shift(len); // length of rgce\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);\n\tblob.l = target;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.3 TODO */\nfunction parse_XLSCellParsedFormula(blob, length, opts) {\n\tvar target = blob.l + length, len = opts.biff == 2 ? 1 : 2;\n\tvar rgcb, cce = blob.read_shift(len); // length of rgce\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);\n\tblob.l = target;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.21 */\nfunction parse_NameParsedFormula(blob, length, opts, cce) {\n\tvar target = blob.l + length;\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tvar rgcb;\n\tif(target !== blob.l) rgcb = parse_RgbExtra(blob, target - blob.l, rgce, opts);\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.118 TODO */\nfunction parse_SharedParsedFormula(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar rgcb, cce = blob.read_shift(2); // length of rgce\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tif(length !== cce + 2) rgcb = parse_RgbExtra(blob, target - cce - 2, rgce, opts);\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.133 TODO: how to emit empty strings? */\nfunction parse_FormulaValue(blob/*::, length*/) {\n\tvar b;\n\tif(__readUInt16LE(blob,blob.l + 6) !== 0xFFFF) return [parse_Xnum(blob),'n'];\n\tswitch(blob[blob.l]) {\n\t\tcase 0x00: blob.l += 8; return [\"String\", 's'];\n\t\tcase 0x01: b = blob[blob.l+2] === 0x1; blob.l += 8; return [b,'b'];\n\t\tcase 0x02: b = blob[blob.l+2]; blob.l += 8; return [b,'e'];\n\t\tcase 0x03: blob.l += 8; return [\"\",'s'];\n\t}\n\treturn [];\n}\nfunction write_FormulaValue(value) {\n\tif(value == null) {\n\t\t// Blank String Value\n\t\tvar o = new_buf(8);\n\t\to.write_shift(1, 0x03);\n\t\to.write_shift(1, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0xFFFF);\n\t\treturn o;\n\t} else if(typeof value == \"number\") return write_Xnum(value);\n\treturn write_Xnum(0);\n}\n\n/* [MS-XLS] 2.4.127 TODO */\nfunction parse_Formula(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar cell = parse_XLSCell(blob, 6, opts);\n\tvar val = parse_FormulaValue(blob,8);\n\tvar flags = blob.read_shift(1);\n\tif(opts.biff != 2) {\n\t\tblob.read_shift(1);\n\t\tif(opts.biff >= 5) {\n\t\t\t/*var chn = */blob.read_shift(4);\n\t\t}\n\t}\n\tvar cbf = parse_XLSCellParsedFormula(blob, end - blob.l, opts);\n\treturn {cell:cell, val:val[0], formula:cbf, shared: (flags >> 3) & 1, tt:val[1]};\n}\nfunction write_Formula(cell/*:Cell*/, R/*:number*/, C/*:number*/, opts, os/*:number*/) {\n\t// Cell\n\tvar o1 = write_XLSCell(R, C, os);\n\n\t// FormulaValue\n\tvar o2 = write_FormulaValue(cell.v);\n\n\t// flags + cache\n\tvar o3 = new_buf(6);\n\tvar flags = 0x01 | 0x20;\n\to3.write_shift(2, flags);\n\to3.write_shift(4, 0);\n\n\t// CellParsedFormula\n\tvar bf = new_buf(cell.bf.length);\n\tfor(var i = 0; i < cell.bf.length; ++i) bf[i] = cell.bf[i];\n\n\tvar out = bconcat([o1, o2, o3, bf]);\n\treturn out;\n}\n\n\n/* XLSB Parsed Formula records have the same shape */\nfunction parse_XLSBParsedFormula(data, length, opts) {\n\tvar cce = data.read_shift(4);\n\tvar rgce = parse_Rgce(data, cce, opts);\n\tvar cb = data.read_shift(4);\n\tvar rgcb = cb > 0 ? parse_RgbExtra(data, cb, rgce, opts) : null;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLSB] 2.5.97.1 ArrayParsedFormula */\nvar parse_XLSBArrayParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.4 CellParsedFormula */\nvar parse_XLSBCellParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.8 DVParsedFormula */\n//var parse_XLSBDVParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.9 FRTParsedFormula */\n//var parse_XLSBFRTParsedFormula = parse_XLSBParsedFormula2;\n/* [MS-XLSB] 2.5.97.12 NameParsedFormula */\nvar parse_XLSBNameParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.98 SharedParsedFormula */\nvar parse_XLSBSharedParsedFormula = parse_XLSBParsedFormula;\n\n/* Writes a PtgNum or PtgInt */\nfunction write_XLSBFormulaNum(val/*:number*/) {\n\tif((val | 0) == val && val < Math.pow(2,16) && val >= 0) {\n\t\tvar oint = new_buf(11);\n\t\toint.write_shift(4, 3);\n\t\toint.write_shift(1, 0x1e);\n\t\toint.write_shift(2, val);\n\t\toint.write_shift(4, 0);\n\t\treturn oint;\n\t}\n\n\tvar num = new_buf(17);\n\tnum.write_shift(4, 11);\n\tnum.write_shift(1, 0x1f);\n\tnum.write_shift(8, val);\n\tnum.write_shift(4, 0);\n\treturn num;\n}\n/* Writes a PtgErr */\nfunction write_XLSBFormulaErr(val/*:number*/) {\n\tvar oint = new_buf(10);\n\toint.write_shift(4, 2);\n\toint.write_shift(1, 0x1C);\n\toint.write_shift(1, val);\n\toint.write_shift(4, 0);\n\treturn oint;\n}\n/* Writes a PtgBool */\nfunction write_XLSBFormulaBool(val/*:boolean*/) {\n\tvar oint = new_buf(10);\n\toint.write_shift(4, 2);\n\toint.write_shift(1, 0x1D);\n\toint.write_shift(1, val?1:0);\n\toint.write_shift(4, 0);\n\treturn oint;\n}\n\n/* Writes a PtgStr */\nfunction write_XLSBFormulaStr(val/*:string*/) {\n\tvar preamble = new_buf(7);\n\tpreamble.write_shift(4, 3 + 2 * val.length);\n\tpreamble.write_shift(1, 0x17);\n\tpreamble.write_shift(2, val.length);\n\n\tvar body = new_buf(2 * val.length);\n\tbody.write_shift(2 * val.length, val, \"utf16le\");\n\n\tvar postamble = new_buf(4);\n\tpostamble.write_shift(4, 0);\n\n\treturn bconcat([preamble, body, postamble]);\n}\n\n/* Writes a PtgRef */\nfunction write_XLSBFormulaRef(str) {\n\tvar cell = decode_cell(str);\n\tvar out = new_buf(15);\n\tout.write_shift(4, 7);\n\tout.write_shift(1, 0x04 | ((1)<<5));\n\tout.write_shift(4, cell.r);\n\tout.write_shift(2, cell.c | ((str.charAt(0) == \"$\" ? 0 : 1)<<14) | ((str.match(/\\$\\d/) ? 0 : 1)<<15)); // <== ColRelShort\n\tout.write_shift(4, 0);\n\n\treturn out;\n}\n\n/* Writes a PtgRef3d */\nfunction write_XLSBFormulaRef3D(str, wb) {\n\tvar lastbang = str.lastIndexOf(\"!\");\n\tvar sname = str.slice(0, lastbang);\n\tstr = str.slice(lastbang+1);\n\tvar cell = decode_cell(str);\n\tif(sname.charAt(0) == \"'\") sname = sname.slice(1, -1).replace(/''/g, \"'\");\n\n\tvar out = new_buf(17);\n\tout.write_shift(4, 9);\n\tout.write_shift(1, 0x1A | ((1)<<5));\n\tout.write_shift(2, 2 + wb.SheetNames.map(function(n) { return n.toLowerCase(); }).indexOf(sname.toLowerCase()));\n\tout.write_shift(4, cell.r);\n\tout.write_shift(2, cell.c | ((str.charAt(0) == \"$\" ? 0 : 1)<<14) | ((str.match(/\\$\\d/) ? 0 : 1)<<15)); // <== ColRelShort\n\tout.write_shift(4, 0);\n\n\treturn out;\n}\n\n/* Writes a PtgRefErr3d */\nfunction write_XLSBFormulaRefErr3D(str, wb) {\n\tvar lastbang = str.lastIndexOf(\"!\");\n\tvar sname = str.slice(0, lastbang);\n\tstr = str.slice(lastbang+1);\n\tif(sname.charAt(0) == \"'\") sname = sname.slice(1, -1).replace(/''/g, \"'\");\n\n\tvar out = new_buf(17);\n\tout.write_shift(4, 9);\n\tout.write_shift(1, 0x1C | ((1)<<5));\n\tout.write_shift(2, 2 + wb.SheetNames.map(function(n) { return n.toLowerCase(); }).indexOf(sname.toLowerCase()));\n\tout.write_shift(4, 0);\n\tout.write_shift(2, 0); // <== ColRelShort\n\tout.write_shift(4, 0);\n\n\treturn out;\n}\n\n/* Writes a single sheet range [PtgRef PtgRef PtgRange] */\nfunction write_XLSBFormulaRange(_str) {\n\tvar parts = _str.split(\":\"), str = parts[0];\n\n\tvar out = new_buf(23);\n\tout.write_shift(4, 15);\n\n\t/* start cell */\n\tstr = parts[0]; var cell = decode_cell(str);\n\tout.write_shift(1, 0x04 | ((1)<<5));\n\tout.write_shift(4, cell.r);\n\tout.write_shift(2, cell.c | ((str.charAt(0) == \"$\" ? 0 : 1)<<14) | ((str.match(/\\$\\d/) ? 0 : 1)<<15)); // <== ColRelShort\n\tout.write_shift(4, 0);\n\n\t/* end cell */\n\tstr = parts[1]; cell = decode_cell(str);\n\tout.write_shift(1, 0x04 | ((1)<<5));\n\tout.write_shift(4, cell.r);\n\tout.write_shift(2, cell.c | ((str.charAt(0) == \"$\" ? 0 : 1)<<14) | ((str.match(/\\$\\d/) ? 0 : 1)<<15)); // <== ColRelShort\n\tout.write_shift(4, 0);\n\n\t/* PtgRange */\n\tout.write_shift(1, 0x11);\n\n\tout.write_shift(4, 0);\n\n\treturn out;\n}\n\n/* Writes a range with explicit sheet name [PtgRef3D PtgRef3D PtgRange] */\nfunction write_XLSBFormulaRangeWS(_str, wb) {\n\tvar lastbang = _str.lastIndexOf(\"!\");\n\tvar sname = _str.slice(0, lastbang);\n\t_str = _str.slice(lastbang+1);\n\tif(sname.charAt(0) == \"'\") sname = sname.slice(1, -1).replace(/''/g, \"'\");\n\tvar parts = _str.split(\":\");\n\n\tvar out = new_buf(27);\n\tout.write_shift(4, 19);\n\n\t/* start cell */\n\tvar str = parts[0], cell = decode_cell(str);\n\tout.write_shift(1, 0x1A | ((1)<<5));\n\tout.write_shift(2, 2 + wb.SheetNames.map(function(n) { return n.toLowerCase(); }).indexOf(sname.toLowerCase()));\n\tout.write_shift(4, cell.r);\n\tout.write_shift(2, cell.c | ((str.charAt(0) == \"$\" ? 0 : 1)<<14) | ((str.match(/\\$\\d/) ? 0 : 1)<<15)); // <== ColRelShort\n\n\t/* end cell */\n\tstr = parts[1]; cell = decode_cell(str);\n\tout.write_shift(1, 0x1A | ((1)<<5));\n\tout.write_shift(2, 2 + wb.SheetNames.map(function(n) { return n.toLowerCase(); }).indexOf(sname.toLowerCase()));\n\tout.write_shift(4, cell.r);\n\tout.write_shift(2, cell.c | ((str.charAt(0) == \"$\" ? 0 : 1)<<14) | ((str.match(/\\$\\d/) ? 0 : 1)<<15)); // <== ColRelShort\n\n\t/* PtgRange */\n\tout.write_shift(1, 0x11);\n\n\tout.write_shift(4, 0);\n\n\treturn out;\n}\n\n/* Writes a range with explicit sheet name [PtgArea3d] */\nfunction write_XLSBFormulaArea3D(_str, wb) {\n\tvar lastbang = _str.lastIndexOf(\"!\");\n\tvar sname = _str.slice(0, lastbang);\n\t_str = _str.slice(lastbang+1);\n\tif(sname.charAt(0) == \"'\") sname = sname.slice(1, -1).replace(/''/g, \"'\");\n\tvar range = decode_range(_str);\n\n\tvar out = new_buf(23);\n\tout.write_shift(4, 15);\n\n\tout.write_shift(1, 0x1B | ((1)<<5));\n\tout.write_shift(2, 2 + wb.SheetNames.map(function(n) { return n.toLowerCase(); }).indexOf(sname.toLowerCase()));\n\tout.write_shift(4, range.s.r);\n\tout.write_shift(4, range.e.r);\n\tout.write_shift(2, range.s.c);\n\tout.write_shift(2, range.e.c);\n\n\tout.write_shift(4, 0);\n\n\treturn out;\n}\n\n\n/* General Formula */\nfunction write_XLSBFormula(val/*:string|number*/, wb) {\n\tif(typeof val == \"number\") return write_XLSBFormulaNum(val);\n\tif(typeof val == \"boolean\") return write_XLSBFormulaBool(val);\n\tif(/^#(DIV\\/0!|GETTING_DATA|N\\/A|NAME\\?|NULL!|NUM!|REF!|VALUE!)$/.test(val)) return write_XLSBFormulaErr(+RBErr[val]);\n\tif(val.match(/^\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})$/)) return write_XLSBFormulaRef(val);\n\tif(val.match(/^\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5}):\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})$/)) return write_XLSBFormulaRange(val);\n\tif(val.match(/^#REF!\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5}):\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})$/)) return write_XLSBFormulaArea3D(val, wb);\n\tif(val.match(/^(?:'[^\\\\\\/?*\\[\\]:]*'|[^'][^\\\\\\/?*\\[\\]:'`~!@#$%^()\\-=+{}|;,<.>]*)!\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})$/)) return write_XLSBFormulaRef3D(val, wb);\n\tif(val.match(/^(?:'[^\\\\\\/?*\\[\\]:]*'|[^'][^\\\\\\/?*\\[\\]:'`~!@#$%^()\\-=+{}|;,<.>]*)!\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5}):\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})$/)) return write_XLSBFormulaRangeWS(val, wb);\n\tif(/^(?:'[^\\\\\\/?*\\[\\]:]*'|[^'][^\\\\\\/?*\\[\\]:'`~!@#$%^()\\-=+{}|;,<.>]*)!#REF!$/.test(val)) return write_XLSBFormulaRefErr3D(val, wb);\n\tif(/^\".*\"$/.test(val)) return write_XLSBFormulaStr(val);\n\tif(/^[+-]\\d+$/.test(val)) return write_XLSBFormulaNum(parseInt(val, 10));\n\tthrow \"Formula |\" + val + \"| not supported for XLSB\";\n}\nvar write_XLSBNameParsedFormula = write_XLSBFormula;\nvar Cetab = {\n  0: \"BEEP\",\n  1: \"OPEN\",\n  2: \"OPEN.LINKS\",\n  3: \"CLOSE.ALL\",\n  4: \"SAVE\",\n  5: \"SAVE.AS\",\n  6: \"FILE.DELETE\",\n  7: \"PAGE.SETUP\",\n  8: \"PRINT\",\n  9: \"PRINTER.SETUP\",\n  10: \"QUIT\",\n  11: \"NEW.WINDOW\",\n  12: \"ARRANGE.ALL\",\n  13: \"WINDOW.SIZE\",\n  14: \"WINDOW.MOVE\",\n  15: \"FULL\",\n  16: \"CLOSE\",\n  17: \"RUN\",\n  22: \"SET.PRINT.AREA\",\n  23: \"SET.PRINT.TITLES\",\n  24: \"SET.PAGE.BREAK\",\n  25: \"REMOVE.PAGE.BREAK\",\n  26: \"FONT\",\n  27: \"DISPLAY\",\n  28: \"PROTECT.DOCUMENT\",\n  29: \"PRECISION\",\n  30: \"A1.R1C1\",\n  31: \"CALCULATE.NOW\",\n  32: \"CALCULATION\",\n  34: \"DATA.FIND\",\n  35: \"EXTRACT\",\n  36: \"DATA.DELETE\",\n  37: \"SET.DATABASE\",\n  38: \"SET.CRITERIA\",\n  39: \"SORT\",\n  40: \"DATA.SERIES\",\n  41: \"TABLE\",\n  42: \"FORMAT.NUMBER\",\n  43: \"ALIGNMENT\",\n  44: \"STYLE\",\n  45: \"BORDER\",\n  46: \"CELL.PROTECTION\",\n  47: \"COLUMN.WIDTH\",\n  48: \"UNDO\",\n  49: \"CUT\",\n  50: \"COPY\",\n  51: \"PASTE\",\n  52: \"CLEAR\",\n  53: \"PASTE.SPECIAL\",\n  54: \"EDIT.DELETE\",\n  55: \"INSERT\",\n  56: \"FILL.RIGHT\",\n  57: \"FILL.DOWN\",\n  61: \"DEFINE.NAME\",\n  62: \"CREATE.NAMES\",\n  63: \"FORMULA.GOTO\",\n  64: \"FORMULA.FIND\",\n  65: \"SELECT.LAST.CELL\",\n  66: \"SHOW.ACTIVE.CELL\",\n  67: \"GALLERY.AREA\",\n  68: \"GALLERY.BAR\",\n  69: \"GALLERY.COLUMN\",\n  70: \"GALLERY.LINE\",\n  71: \"GALLERY.PIE\",\n  72: \"GALLERY.SCATTER\",\n  73: \"COMBINATION\",\n  74: \"PREFERRED\",\n  75: \"ADD.OVERLAY\",\n  76: \"GRIDLINES\",\n  77: \"SET.PREFERRED\",\n  78: \"AXES\",\n  79: \"LEGEND\",\n  80: \"ATTACH.TEXT\",\n  81: \"ADD.ARROW\",\n  82: \"SELECT.CHART\",\n  83: \"SELECT.PLOT.AREA\",\n  84: \"PATTERNS\",\n  85: \"MAIN.CHART\",\n  86: \"OVERLAY\",\n  87: \"SCALE\",\n  88: \"FORMAT.LEGEND\",\n  89: \"FORMAT.TEXT\",\n  90: \"EDIT.REPEAT\",\n  91: \"PARSE\",\n  92: \"JUSTIFY\",\n  93: \"HIDE\",\n  94: \"UNHIDE\",\n  95: \"WORKSPACE\",\n  96: \"FORMULA\",\n  97: \"FORMULA.FILL\",\n  98: \"FORMULA.ARRAY\",\n  99: \"DATA.FIND.NEXT\",\n  100: \"DATA.FIND.PREV\",\n  101: \"FORMULA.FIND.NEXT\",\n  102: \"FORMULA.FIND.PREV\",\n  103: \"ACTIVATE\",\n  104: \"ACTIVATE.NEXT\",\n  105: \"ACTIVATE.PREV\",\n  106: \"UNLOCKED.NEXT\",\n  107: \"UNLOCKED.PREV\",\n  108: \"COPY.PICTURE\",\n  109: \"SELECT\",\n  110: \"DELETE.NAME\",\n  111: \"DELETE.FORMAT\",\n  112: \"VLINE\",\n  113: \"HLINE\",\n  114: \"VPAGE\",\n  115: \"HPAGE\",\n  116: \"VSCROLL\",\n  117: \"HSCROLL\",\n  118: \"ALERT\",\n  119: \"NEW\",\n  120: \"CANCEL.COPY\",\n  121: \"SHOW.CLIPBOARD\",\n  122: \"MESSAGE\",\n  124: \"PASTE.LINK\",\n  125: \"APP.ACTIVATE\",\n  126: \"DELETE.ARROW\",\n  127: \"ROW.HEIGHT\",\n  128: \"FORMAT.MOVE\",\n  129: \"FORMAT.SIZE\",\n  130: \"FORMULA.REPLACE\",\n  131: \"SEND.KEYS\",\n  132: \"SELECT.SPECIAL\",\n  133: \"APPLY.NAMES\",\n  134: \"REPLACE.FONT\",\n  135: \"FREEZE.PANES\",\n  136: \"SHOW.INFO\",\n  137: \"SPLIT\",\n  138: \"ON.WINDOW\",\n  139: \"ON.DATA\",\n  140: \"DISABLE.INPUT\",\n  142: \"OUTLINE\",\n  143: \"LIST.NAMES\",\n  144: \"FILE.CLOSE\",\n  145: \"SAVE.WORKBOOK\",\n  146: \"DATA.FORM\",\n  147: \"COPY.CHART\",\n  148: \"ON.TIME\",\n  149: \"WAIT\",\n  150: \"FORMAT.FONT\",\n  151: \"FILL.UP\",\n  152: \"FILL.LEFT\",\n  153: \"DELETE.OVERLAY\",\n  155: \"SHORT.MENUS\",\n  159: \"SET.UPDATE.STATUS\",\n  161: \"COLOR.PALETTE\",\n  162: \"DELETE.STYLE\",\n  163: \"WINDOW.RESTORE\",\n  164: \"WINDOW.MAXIMIZE\",\n  166: \"CHANGE.LINK\",\n  167: \"CALCULATE.DOCUMENT\",\n  168: \"ON.KEY\",\n  169: \"APP.RESTORE\",\n  170: \"APP.MOVE\",\n  171: \"APP.SIZE\",\n  172: \"APP.MINIMIZE\",\n  173: \"APP.MAXIMIZE\",\n  174: \"BRING.TO.FRONT\",\n  175: \"SEND.TO.BACK\",\n  185: \"MAIN.CHART.TYPE\",\n  186: \"OVERLAY.CHART.TYPE\",\n  187: \"SELECT.END\",\n  188: \"OPEN.MAIL\",\n  189: \"SEND.MAIL\",\n  190: \"STANDARD.FONT\",\n  191: \"CONSOLIDATE\",\n  192: \"SORT.SPECIAL\",\n  193: \"GALLERY.3D.AREA\",\n  194: \"GALLERY.3D.COLUMN\",\n  195: \"GALLERY.3D.LINE\",\n  196: \"GALLERY.3D.PIE\",\n  197: \"VIEW.3D\",\n  198: \"GOAL.SEEK\",\n  199: \"WORKGROUP\",\n  200: \"FILL.GROUP\",\n  201: \"UPDATE.LINK\",\n  202: \"PROMOTE\",\n  203: \"DEMOTE\",\n  204: \"SHOW.DETAIL\",\n  206: \"UNGROUP\",\n  207: \"OBJECT.PROPERTIES\",\n  208: \"SAVE.NEW.OBJECT\",\n  209: \"SHARE\",\n  210: \"SHARE.NAME\",\n  211: \"DUPLICATE\",\n  212: \"APPLY.STYLE\",\n  213: \"ASSIGN.TO.OBJECT\",\n  214: \"OBJECT.PROTECTION\",\n  215: \"HIDE.OBJECT\",\n  216: \"SET.EXTRACT\",\n  217: \"CREATE.PUBLISHER\",\n  218: \"SUBSCRIBE.TO\",\n  219: \"ATTRIBUTES\",\n  220: \"SHOW.TOOLBAR\",\n  222: \"PRINT.PREVIEW\",\n  223: \"EDIT.COLOR\",\n  224: \"SHOW.LEVELS\",\n  225: \"FORMAT.MAIN\",\n  226: \"FORMAT.OVERLAY\",\n  227: \"ON.RECALC\",\n  228: \"EDIT.SERIES\",\n  229: \"DEFINE.STYLE\",\n  240: \"LINE.PRINT\",\n  243: \"ENTER.DATA\",\n  249: \"GALLERY.RADAR\",\n  250: \"MERGE.STYLES\",\n  251: \"EDITION.OPTIONS\",\n  252: \"PASTE.PICTURE\",\n  253: \"PASTE.PICTURE.LINK\",\n  254: \"SPELLING\",\n  256: \"ZOOM\",\n  259: \"INSERT.OBJECT\",\n  260: \"WINDOW.MINIMIZE\",\n  265: \"SOUND.NOTE\",\n  266: \"SOUND.PLAY\",\n  267: \"FORMAT.SHAPE\",\n  268: \"EXTEND.POLYGON\",\n  269: \"FORMAT.AUTO\",\n  272: \"GALLERY.3D.BAR\",\n  273: \"GALLERY.3D.SURFACE\",\n  274: \"FILL.AUTO\",\n  276: \"CUSTOMIZE.TOOLBAR\",\n  277: \"ADD.TOOL\",\n  278: \"EDIT.OBJECT\",\n  279: \"ON.DOUBLECLICK\",\n  280: \"ON.ENTRY\",\n  281: \"WORKBOOK.ADD\",\n  282: \"WORKBOOK.MOVE\",\n  283: \"WORKBOOK.COPY\",\n  284: \"WORKBOOK.OPTIONS\",\n  285: \"SAVE.WORKSPACE\",\n  288: \"CHART.WIZARD\",\n  289: \"DELETE.TOOL\",\n  290: \"MOVE.TOOL\",\n  291: \"WORKBOOK.SELECT\",\n  292: \"WORKBOOK.ACTIVATE\",\n  293: \"ASSIGN.TO.TOOL\",\n  295: \"COPY.TOOL\",\n  296: \"RESET.TOOL\",\n  297: \"CONSTRAIN.NUMERIC\",\n  298: \"PASTE.TOOL\",\n  302: \"WORKBOOK.NEW\",\n  305: \"SCENARIO.CELLS\",\n  306: \"SCENARIO.DELETE\",\n  307: \"SCENARIO.ADD\",\n  308: \"SCENARIO.EDIT\",\n  309: \"SCENARIO.SHOW\",\n  310: \"SCENARIO.SHOW.NEXT\",\n  311: \"SCENARIO.SUMMARY\",\n  312: \"PIVOT.TABLE.WIZARD\",\n  313: \"PIVOT.FIELD.PROPERTIES\",\n  314: \"PIVOT.FIELD\",\n  315: \"PIVOT.ITEM\",\n  316: \"PIVOT.ADD.FIELDS\",\n  318: \"OPTIONS.CALCULATION\",\n  319: \"OPTIONS.EDIT\",\n  320: \"OPTIONS.VIEW\",\n  321: \"ADDIN.MANAGER\",\n  322: \"MENU.EDITOR\",\n  323: \"ATTACH.TOOLBARS\",\n  324: \"VBAActivate\",\n  325: \"OPTIONS.CHART\",\n  328: \"VBA.INSERT.FILE\",\n  330: \"VBA.PROCEDURE.DEFINITION\",\n  336: \"ROUTING.SLIP\",\n  338: \"ROUTE.DOCUMENT\",\n  339: \"MAIL.LOGON\",\n  342: \"INSERT.PICTURE\",\n  343: \"EDIT.TOOL\",\n  344: \"GALLERY.DOUGHNUT\",\n  350: \"CHART.TREND\",\n  352: \"PIVOT.ITEM.PROPERTIES\",\n  354: \"WORKBOOK.INSERT\",\n  355: \"OPTIONS.TRANSITION\",\n  356: \"OPTIONS.GENERAL\",\n  370: \"FILTER.ADVANCED\",\n  373: \"MAIL.ADD.MAILER\",\n  374: \"MAIL.DELETE.MAILER\",\n  375: \"MAIL.REPLY\",\n  376: \"MAIL.REPLY.ALL\",\n  377: \"MAIL.FORWARD\",\n  378: \"MAIL.NEXT.LETTER\",\n  379: \"DATA.LABEL\",\n  380: \"INSERT.TITLE\",\n  381: \"FONT.PROPERTIES\",\n  382: \"MACRO.OPTIONS\",\n  383: \"WORKBOOK.HIDE\",\n  384: \"WORKBOOK.UNHIDE\",\n  385: \"WORKBOOK.DELETE\",\n  386: \"WORKBOOK.NAME\",\n  388: \"GALLERY.CUSTOM\",\n  390: \"ADD.CHART.AUTOFORMAT\",\n  391: \"DELETE.CHART.AUTOFORMAT\",\n  392: \"CHART.ADD.DATA\",\n  393: \"AUTO.OUTLINE\",\n  394: \"TAB.ORDER\",\n  395: \"SHOW.DIALOG\",\n  396: \"SELECT.ALL\",\n  397: \"UNGROUP.SHEETS\",\n  398: \"SUBTOTAL.CREATE\",\n  399: \"SUBTOTAL.REMOVE\",\n  400: \"RENAME.OBJECT\",\n  412: \"WORKBOOK.SCROLL\",\n  413: \"WORKBOOK.NEXT\",\n  414: \"WORKBOOK.PREV\",\n  415: \"WORKBOOK.TAB.SPLIT\",\n  416: \"FULL.SCREEN\",\n  417: \"WORKBOOK.PROTECT\",\n  420: \"SCROLLBAR.PROPERTIES\",\n  421: \"PIVOT.SHOW.PAGES\",\n  422: \"TEXT.TO.COLUMNS\",\n  423: \"FORMAT.CHARTTYPE\",\n  424: \"LINK.FORMAT\",\n  425: \"TRACER.DISPLAY\",\n  430: \"TRACER.NAVIGATE\",\n  431: \"TRACER.CLEAR\",\n  432: \"TRACER.ERROR\",\n  433: \"PIVOT.FIELD.GROUP\",\n  434: \"PIVOT.FIELD.UNGROUP\",\n  435: \"CHECKBOX.PROPERTIES\",\n  436: \"LABEL.PROPERTIES\",\n  437: \"LISTBOX.PROPERTIES\",\n  438: \"EDITBOX.PROPERTIES\",\n  439: \"PIVOT.REFRESH\",\n  440: \"LINK.COMBO\",\n  441: \"OPEN.TEXT\",\n  442: \"HIDE.DIALOG\",\n  443: \"SET.DIALOG.FOCUS\",\n  444: \"ENABLE.OBJECT\",\n  445: \"PUSHBUTTON.PROPERTIES\",\n  446: \"SET.DIALOG.DEFAULT\",\n  447: \"FILTER\",\n  448: \"FILTER.SHOW.ALL\",\n  449: \"CLEAR.OUTLINE\",\n  450: \"FUNCTION.WIZARD\",\n  451: \"ADD.LIST.ITEM\",\n  452: \"SET.LIST.ITEM\",\n  453: \"REMOVE.LIST.ITEM\",\n  454: \"SELECT.LIST.ITEM\",\n  455: \"SET.CONTROL.VALUE\",\n  456: \"SAVE.COPY.AS\",\n  458: \"OPTIONS.LISTS.ADD\",\n  459: \"OPTIONS.LISTS.DELETE\",\n  460: \"SERIES.AXES\",\n  461: \"SERIES.X\",\n  462: \"SERIES.Y\",\n  463: \"ERRORBAR.X\",\n  464: \"ERRORBAR.Y\",\n  465: \"FORMAT.CHART\",\n  466: \"SERIES.ORDER\",\n  467: \"MAIL.LOGOFF\",\n  468: \"CLEAR.ROUTING.SLIP\",\n  469: \"APP.ACTIVATE.MICROSOFT\",\n  470: \"MAIL.EDIT.MAILER\",\n  471: \"ON.SHEET\",\n  472: \"STANDARD.WIDTH\",\n  473: \"SCENARIO.MERGE\",\n  474: \"SUMMARY.INFO\",\n  475: \"FIND.FILE\",\n  476: \"ACTIVE.CELL.FONT\",\n  477: \"ENABLE.TIPWIZARD\",\n  478: \"VBA.MAKE.ADDIN\",\n  480: \"INSERTDATATABLE\",\n  481: \"WORKGROUP.OPTIONS\",\n  482: \"MAIL.SEND.MAILER\",\n  485: \"AUTOCORRECT\",\n  489: \"POST.DOCUMENT\",\n  491: \"PICKLIST\",\n  493: \"VIEW.SHOW\",\n  494: \"VIEW.DEFINE\",\n  495: \"VIEW.DELETE\",\n  509: \"SHEET.BACKGROUND\",\n  510: \"INSERT.MAP.OBJECT\",\n  511: \"OPTIONS.MENONO\",\n  517: \"MSOCHECKS\",\n  518: \"NORMAL\",\n  519: \"LAYOUT\",\n  520: \"RM.PRINT.AREA\",\n  521: \"CLEAR.PRINT.AREA\",\n  522: \"ADD.PRINT.AREA\",\n  523: \"MOVE.BRK\",\n  545: \"HIDECURR.NOTE\",\n  546: \"HIDEALL.NOTES\",\n  547: \"DELETE.NOTE\",\n  548: \"TRAVERSE.NOTES\",\n  549: \"ACTIVATE.NOTES\",\n  620: \"PROTECT.REVISIONS\",\n  621: \"UNPROTECT.REVISIONS\",\n  647: \"OPTIONS.ME\",\n  653: \"WEB.PUBLISH\",\n  667: \"NEWWEBQUERY\",\n  673: \"PIVOT.TABLE.CHART\",\n  753: \"OPTIONS.SAVE\",\n  755: \"OPTIONS.SPELL\",\n  808: \"HIDEALL.INKANNOTS\"\n};\nvar Ftab = {\n  0: \"COUNT\",\n  1: \"IF\",\n  2: \"ISNA\",\n  3: \"ISERROR\",\n  4: \"SUM\",\n  5: \"AVERAGE\",\n  6: \"MIN\",\n  7: \"MAX\",\n  8: \"ROW\",\n  9: \"COLUMN\",\n  10: \"NA\",\n  11: \"NPV\",\n  12: \"STDEV\",\n  13: \"DOLLAR\",\n  14: \"FIXED\",\n  15: \"SIN\",\n  16: \"COS\",\n  17: \"TAN\",\n  18: \"ATAN\",\n  19: \"PI\",\n  20: \"SQRT\",\n  21: \"EXP\",\n  22: \"LN\",\n  23: \"LOG10\",\n  24: \"ABS\",\n  25: \"INT\",\n  26: \"SIGN\",\n  27: \"ROUND\",\n  28: \"LOOKUP\",\n  29: \"INDEX\",\n  30: \"REPT\",\n  31: \"MID\",\n  32: \"LEN\",\n  33: \"VALUE\",\n  34: \"TRUE\",\n  35: \"FALSE\",\n  36: \"AND\",\n  37: \"OR\",\n  38: \"NOT\",\n  39: \"MOD\",\n  40: \"DCOUNT\",\n  41: \"DSUM\",\n  42: \"DAVERAGE\",\n  43: \"DMIN\",\n  44: \"DMAX\",\n  45: \"DSTDEV\",\n  46: \"VAR\",\n  47: \"DVAR\",\n  48: \"TEXT\",\n  49: \"LINEST\",\n  50: \"TREND\",\n  51: \"LOGEST\",\n  52: \"GROWTH\",\n  53: \"GOTO\",\n  54: \"HALT\",\n  55: \"RETURN\",\n  56: \"PV\",\n  57: \"FV\",\n  58: \"NPER\",\n  59: \"PMT\",\n  60: \"RATE\",\n  61: \"MIRR\",\n  62: \"IRR\",\n  63: \"RAND\",\n  64: \"MATCH\",\n  65: \"DATE\",\n  66: \"TIME\",\n  67: \"DAY\",\n  68: \"MONTH\",\n  69: \"YEAR\",\n  70: \"WEEKDAY\",\n  71: \"HOUR\",\n  72: \"MINUTE\",\n  73: \"SECOND\",\n  74: \"NOW\",\n  75: \"AREAS\",\n  76: \"ROWS\",\n  77: \"COLUMNS\",\n  78: \"OFFSET\",\n  79: \"ABSREF\",\n  80: \"RELREF\",\n  81: \"ARGUMENT\",\n  82: \"SEARCH\",\n  83: \"TRANSPOSE\",\n  84: \"ERROR\",\n  85: \"STEP\",\n  86: \"TYPE\",\n  87: \"ECHO\",\n  88: \"SET.NAME\",\n  89: \"CALLER\",\n  90: \"DEREF\",\n  91: \"WINDOWS\",\n  92: \"SERIES\",\n  93: \"DOCUMENTS\",\n  94: \"ACTIVE.CELL\",\n  95: \"SELECTION\",\n  96: \"RESULT\",\n  97: \"ATAN2\",\n  98: \"ASIN\",\n  99: \"ACOS\",\n  100: \"CHOOSE\",\n  101: \"HLOOKUP\",\n  102: \"VLOOKUP\",\n  103: \"LINKS\",\n  104: \"INPUT\",\n  105: \"ISREF\",\n  106: \"GET.FORMULA\",\n  107: \"GET.NAME\",\n  108: \"SET.VALUE\",\n  109: \"LOG\",\n  110: \"EXEC\",\n  111: \"CHAR\",\n  112: \"LOWER\",\n  113: \"UPPER\",\n  114: \"PROPER\",\n  115: \"LEFT\",\n  116: \"RIGHT\",\n  117: \"EXACT\",\n  118: \"TRIM\",\n  119: \"REPLACE\",\n  120: \"SUBSTITUTE\",\n  121: \"CODE\",\n  122: \"NAMES\",\n  123: \"DIRECTORY\",\n  124: \"FIND\",\n  125: \"CELL\",\n  126: \"ISERR\",\n  127: \"ISTEXT\",\n  128: \"ISNUMBER\",\n  129: \"ISBLANK\",\n  130: \"T\",\n  131: \"N\",\n  132: \"FOPEN\",\n  133: \"FCLOSE\",\n  134: \"FSIZE\",\n  135: \"FREADLN\",\n  136: \"FREAD\",\n  137: \"FWRITELN\",\n  138: \"FWRITE\",\n  139: \"FPOS\",\n  140: \"DATEVALUE\",\n  141: \"TIMEVALUE\",\n  142: \"SLN\",\n  143: \"SYD\",\n  144: \"DDB\",\n  145: \"GET.DEF\",\n  146: \"REFTEXT\",\n  147: \"TEXTREF\",\n  148: \"INDIRECT\",\n  149: \"REGISTER\",\n  150: \"CALL\",\n  151: \"ADD.BAR\",\n  152: \"ADD.MENU\",\n  153: \"ADD.COMMAND\",\n  154: \"ENABLE.COMMAND\",\n  155: \"CHECK.COMMAND\",\n  156: \"RENAME.COMMAND\",\n  157: \"SHOW.BAR\",\n  158: \"DELETE.MENU\",\n  159: \"DELETE.COMMAND\",\n  160: \"GET.CHART.ITEM\",\n  161: \"DIALOG.BOX\",\n  162: \"CLEAN\",\n  163: \"MDETERM\",\n  164: \"MINVERSE\",\n  165: \"MMULT\",\n  166: \"FILES\",\n  167: \"IPMT\",\n  168: \"PPMT\",\n  169: \"COUNTA\",\n  170: \"CANCEL.KEY\",\n  171: \"FOR\",\n  172: \"WHILE\",\n  173: \"BREAK\",\n  174: \"NEXT\",\n  175: \"INITIATE\",\n  176: \"REQUEST\",\n  177: \"POKE\",\n  178: \"EXECUTE\",\n  179: \"TERMINATE\",\n  180: \"RESTART\",\n  181: \"HELP\",\n  182: \"GET.BAR\",\n  183: \"PRODUCT\",\n  184: \"FACT\",\n  185: \"GET.CELL\",\n  186: \"GET.WORKSPACE\",\n  187: \"GET.WINDOW\",\n  188: \"GET.DOCUMENT\",\n  189: \"DPRODUCT\",\n  190: \"ISNONTEXT\",\n  191: \"GET.NOTE\",\n  192: \"NOTE\",\n  193: \"STDEVP\",\n  194: \"VARP\",\n  195: \"DSTDEVP\",\n  196: \"DVARP\",\n  197: \"TRUNC\",\n  198: \"ISLOGICAL\",\n  199: \"DCOUNTA\",\n  200: \"DELETE.BAR\",\n  201: \"UNREGISTER\",\n  204: \"USDOLLAR\",\n  205: \"FINDB\",\n  206: \"SEARCHB\",\n  207: \"REPLACEB\",\n  208: \"LEFTB\",\n  209: \"RIGHTB\",\n  210: \"MIDB\",\n  211: \"LENB\",\n  212: \"ROUNDUP\",\n  213: \"ROUNDDOWN\",\n  214: \"ASC\",\n  215: \"DBCS\",\n  216: \"RANK\",\n  219: \"ADDRESS\",\n  220: \"DAYS360\",\n  221: \"TODAY\",\n  222: \"VDB\",\n  223: \"ELSE\",\n  224: \"ELSE.IF\",\n  225: \"END.IF\",\n  226: \"FOR.CELL\",\n  227: \"MEDIAN\",\n  228: \"SUMPRODUCT\",\n  229: \"SINH\",\n  230: \"COSH\",\n  231: \"TANH\",\n  232: \"ASINH\",\n  233: \"ACOSH\",\n  234: \"ATANH\",\n  235: \"DGET\",\n  236: \"CREATE.OBJECT\",\n  237: \"VOLATILE\",\n  238: \"LAST.ERROR\",\n  239: \"CUSTOM.UNDO\",\n  240: \"CUSTOM.REPEAT\",\n  241: \"FORMULA.CONVERT\",\n  242: \"GET.LINK.INFO\",\n  243: \"TEXT.BOX\",\n  244: \"INFO\",\n  245: \"GROUP\",\n  246: \"GET.OBJECT\",\n  247: \"DB\",\n  248: \"PAUSE\",\n  251: \"RESUME\",\n  252: \"FREQUENCY\",\n  253: \"ADD.TOOLBAR\",\n  254: \"DELETE.TOOLBAR\",\n  255: \"User\",\n  256: \"RESET.TOOLBAR\",\n  257: \"EVALUATE\",\n  258: \"GET.TOOLBAR\",\n  259: \"GET.TOOL\",\n  260: \"SPELLING.CHECK\",\n  261: \"ERROR.TYPE\",\n  262: \"APP.TITLE\",\n  263: \"WINDOW.TITLE\",\n  264: \"SAVE.TOOLBAR\",\n  265: \"ENABLE.TOOL\",\n  266: \"PRESS.TOOL\",\n  267: \"REGISTER.ID\",\n  268: \"GET.WORKBOOK\",\n  269: \"AVEDEV\",\n  270: \"BETADIST\",\n  271: \"GAMMALN\",\n  272: \"BETAINV\",\n  273: \"BINOMDIST\",\n  274: \"CHIDIST\",\n  275: \"CHIINV\",\n  276: \"COMBIN\",\n  277: \"CONFIDENCE\",\n  278: \"CRITBINOM\",\n  279: \"EVEN\",\n  280: \"EXPONDIST\",\n  281: \"FDIST\",\n  282: \"FINV\",\n  283: \"FISHER\",\n  284: \"FISHERINV\",\n  285: \"FLOOR\",\n  286: \"GAMMADIST\",\n  287: \"GAMMAINV\",\n  288: \"CEILING\",\n  289: \"HYPGEOMDIST\",\n  290: \"LOGNORMDIST\",\n  291: \"LOGINV\",\n  292: \"NEGBINOMDIST\",\n  293: \"NORMDIST\",\n  294: \"NORMSDIST\",\n  295: \"NORMINV\",\n  296: \"NORMSINV\",\n  297: \"STANDARDIZE\",\n  298: \"ODD\",\n  299: \"PERMUT\",\n  300: \"POISSON\",\n  301: \"TDIST\",\n  302: \"WEIBULL\",\n  303: \"SUMXMY2\",\n  304: \"SUMX2MY2\",\n  305: \"SUMX2PY2\",\n  306: \"CHITEST\",\n  307: \"CORREL\",\n  308: \"COVAR\",\n  309: \"FORECAST\",\n  310: \"FTEST\",\n  311: \"INTERCEPT\",\n  312: \"PEARSON\",\n  313: \"RSQ\",\n  314: \"STEYX\",\n  315: \"SLOPE\",\n  316: \"TTEST\",\n  317: \"PROB\",\n  318: \"DEVSQ\",\n  319: \"GEOMEAN\",\n  320: \"HARMEAN\",\n  321: \"SUMSQ\",\n  322: \"KURT\",\n  323: \"SKEW\",\n  324: \"ZTEST\",\n  325: \"LARGE\",\n  326: \"SMALL\",\n  327: \"QUARTILE\",\n  328: \"PERCENTILE\",\n  329: \"PERCENTRANK\",\n  330: \"MODE\",\n  331: \"TRIMMEAN\",\n  332: \"TINV\",\n  334: \"MOVIE.COMMAND\",\n  335: \"GET.MOVIE\",\n  336: \"CONCATENATE\",\n  337: \"POWER\",\n  338: \"PIVOT.ADD.DATA\",\n  339: \"GET.PIVOT.TABLE\",\n  340: \"GET.PIVOT.FIELD\",\n  341: \"GET.PIVOT.ITEM\",\n  342: \"RADIANS\",\n  343: \"DEGREES\",\n  344: \"SUBTOTAL\",\n  345: \"SUMIF\",\n  346: \"COUNTIF\",\n  347: \"COUNTBLANK\",\n  348: \"SCENARIO.GET\",\n  349: \"OPTIONS.LISTS.GET\",\n  350: \"ISPMT\",\n  351: \"DATEDIF\",\n  352: \"DATESTRING\",\n  353: \"NUMBERSTRING\",\n  354: \"ROMAN\",\n  355: \"OPEN.DIALOG\",\n  356: \"SAVE.DIALOG\",\n  357: \"VIEW.GET\",\n  358: \"GETPIVOTDATA\",\n  359: \"HYPERLINK\",\n  360: \"PHONETIC\",\n  361: \"AVERAGEA\",\n  362: \"MAXA\",\n  363: \"MINA\",\n  364: \"STDEVPA\",\n  365: \"VARPA\",\n  366: \"STDEVA\",\n  367: \"VARA\",\n  368: \"BAHTTEXT\",\n  369: \"THAIDAYOFWEEK\",\n  370: \"THAIDIGIT\",\n  371: \"THAIMONTHOFYEAR\",\n  372: \"THAINUMSOUND\",\n  373: \"THAINUMSTRING\",\n  374: \"THAISTRINGLENGTH\",\n  375: \"ISTHAIDIGIT\",\n  376: \"ROUNDBAHTDOWN\",\n  377: \"ROUNDBAHTUP\",\n  378: \"THAIYEAR\",\n  379: \"RTD\",\n  380: \"CUBEVALUE\",\n  381: \"CUBEMEMBER\",\n  382: \"CUBEMEMBERPROPERTY\",\n  383: \"CUBERANKEDMEMBER\",\n  384: \"HEX2BIN\",\n  385: \"HEX2DEC\",\n  386: \"HEX2OCT\",\n  387: \"DEC2BIN\",\n  388: \"DEC2HEX\",\n  389: \"DEC2OCT\",\n  390: \"OCT2BIN\",\n  391: \"OCT2HEX\",\n  392: \"OCT2DEC\",\n  393: \"BIN2DEC\",\n  394: \"BIN2OCT\",\n  395: \"BIN2HEX\",\n  396: \"IMSUB\",\n  397: \"IMDIV\",\n  398: \"IMPOWER\",\n  399: \"IMABS\",\n  400: \"IMSQRT\",\n  401: \"IMLN\",\n  402: \"IMLOG2\",\n  403: \"IMLOG10\",\n  404: \"IMSIN\",\n  405: \"IMCOS\",\n  406: \"IMEXP\",\n  407: \"IMARGUMENT\",\n  408: \"IMCONJUGATE\",\n  409: \"IMAGINARY\",\n  410: \"IMREAL\",\n  411: \"COMPLEX\",\n  412: \"IMSUM\",\n  413: \"IMPRODUCT\",\n  414: \"SERIESSUM\",\n  415: \"FACTDOUBLE\",\n  416: \"SQRTPI\",\n  417: \"QUOTIENT\",\n  418: \"DELTA\",\n  419: \"GESTEP\",\n  420: \"ISEVEN\",\n  421: \"ISODD\",\n  422: \"MROUND\",\n  423: \"ERF\",\n  424: \"ERFC\",\n  425: \"BESSELJ\",\n  426: \"BESSELK\",\n  427: \"BESSELY\",\n  428: \"BESSELI\",\n  429: \"XIRR\",\n  430: \"XNPV\",\n  431: \"PRICEMAT\",\n  432: \"YIELDMAT\",\n  433: \"INTRATE\",\n  434: \"RECEIVED\",\n  435: \"DISC\",\n  436: \"PRICEDISC\",\n  437: \"YIELDDISC\",\n  438: \"TBILLEQ\",\n  439: \"TBILLPRICE\",\n  440: \"TBILLYIELD\",\n  441: \"PRICE\",\n  442: \"YIELD\",\n  443: \"DOLLARDE\",\n  444: \"DOLLARFR\",\n  445: \"NOMINAL\",\n  446: \"EFFECT\",\n  447: \"CUMPRINC\",\n  448: \"CUMIPMT\",\n  449: \"EDATE\",\n  450: \"EOMONTH\",\n  451: \"YEARFRAC\",\n  452: \"COUPDAYBS\",\n  453: \"COUPDAYS\",\n  454: \"COUPDAYSNC\",\n  455: \"COUPNCD\",\n  456: \"COUPNUM\",\n  457: \"COUPPCD\",\n  458: \"DURATION\",\n  459: \"MDURATION\",\n  460: \"ODDLPRICE\",\n  461: \"ODDLYIELD\",\n  462: \"ODDFPRICE\",\n  463: \"ODDFYIELD\",\n  464: \"RANDBETWEEN\",\n  465: \"WEEKNUM\",\n  466: \"AMORDEGRC\",\n  467: \"AMORLINC\",\n  468: \"CONVERT\",\n  724: \"SHEETJS\",\n  469: \"ACCRINT\",\n  470: \"ACCRINTM\",\n  471: \"WORKDAY\",\n  472: \"NETWORKDAYS\",\n  473: \"GCD\",\n  474: \"MULTINOMIAL\",\n  475: \"LCM\",\n  476: \"FVSCHEDULE\",\n  477: \"CUBEKPIMEMBER\",\n  478: \"CUBESET\",\n  479: \"CUBESETCOUNT\",\n  480: \"IFERROR\",\n  481: \"COUNTIFS\",\n  482: \"SUMIFS\",\n  483: \"AVERAGEIF\",\n  484: \"AVERAGEIFS\"\n};\nvar FtabArgc = {\n  2: 1,\n  3: 1,\n  10: 0,\n  15: 1,\n  16: 1,\n  17: 1,\n  18: 1,\n  19: 0,\n  20: 1,\n  21: 1,\n  22: 1,\n  23: 1,\n  24: 1,\n  25: 1,\n  26: 1,\n  27: 2,\n  30: 2,\n  31: 3,\n  32: 1,\n  33: 1,\n  34: 0,\n  35: 0,\n  38: 1,\n  39: 2,\n  40: 3,\n  41: 3,\n  42: 3,\n  43: 3,\n  44: 3,\n  45: 3,\n  47: 3,\n  48: 2,\n  53: 1,\n  61: 3,\n  63: 0,\n  65: 3,\n  66: 3,\n  67: 1,\n  68: 1,\n  69: 1,\n  70: 1,\n  71: 1,\n  72: 1,\n  73: 1,\n  74: 0,\n  75: 1,\n  76: 1,\n  77: 1,\n  79: 2,\n  80: 2,\n  83: 1,\n  85: 0,\n  86: 1,\n  89: 0,\n  90: 1,\n  94: 0,\n  95: 0,\n  97: 2,\n  98: 1,\n  99: 1,\n  101: 3,\n  102: 3,\n  105: 1,\n  106: 1,\n  108: 2,\n  111: 1,\n  112: 1,\n  113: 1,\n  114: 1,\n  117: 2,\n  118: 1,\n  119: 4,\n  121: 1,\n  126: 1,\n  127: 1,\n  128: 1,\n  129: 1,\n  130: 1,\n  131: 1,\n  133: 1,\n  134: 1,\n  135: 1,\n  136: 2,\n  137: 2,\n  138: 2,\n  140: 1,\n  141: 1,\n  142: 3,\n  143: 4,\n  144: 4,\n  161: 1,\n  162: 1,\n  163: 1,\n  164: 1,\n  165: 2,\n  172: 1,\n  175: 2,\n  176: 2,\n  177: 3,\n  178: 2,\n  179: 1,\n  184: 1,\n  186: 1,\n  189: 3,\n  190: 1,\n  195: 3,\n  196: 3,\n  197: 1,\n  198: 1,\n  199: 3,\n  201: 1,\n  207: 4,\n  210: 3,\n  211: 1,\n  212: 2,\n  213: 2,\n  214: 1,\n  215: 1,\n  225: 0,\n  229: 1,\n  230: 1,\n  231: 1,\n  232: 1,\n  233: 1,\n  234: 1,\n  235: 3,\n  244: 1,\n  247: 4,\n  252: 2,\n  257: 1,\n  261: 1,\n  271: 1,\n  273: 4,\n  274: 2,\n  275: 2,\n  276: 2,\n  277: 3,\n  278: 3,\n  279: 1,\n  280: 3,\n  281: 3,\n  282: 3,\n  283: 1,\n  284: 1,\n  285: 2,\n  286: 4,\n  287: 3,\n  288: 2,\n  289: 4,\n  290: 3,\n  291: 3,\n  292: 3,\n  293: 4,\n  294: 1,\n  295: 3,\n  296: 1,\n  297: 3,\n  298: 1,\n  299: 2,\n  300: 3,\n  301: 3,\n  302: 4,\n  303: 2,\n  304: 2,\n  305: 2,\n  306: 2,\n  307: 2,\n  308: 2,\n  309: 3,\n  310: 2,\n  311: 2,\n  312: 2,\n  313: 2,\n  314: 2,\n  315: 2,\n  316: 4,\n  325: 2,\n  326: 2,\n  327: 2,\n  328: 2,\n  331: 2,\n  332: 2,\n  337: 2,\n  342: 1,\n  343: 1,\n  346: 2,\n  347: 1,\n  350: 4,\n  351: 3,\n  352: 1,\n  353: 2,\n  360: 1,\n  368: 1,\n  369: 1,\n  370: 1,\n  371: 1,\n  372: 1,\n  373: 1,\n  374: 1,\n  375: 1,\n  376: 1,\n  377: 1,\n  378: 1,\n  382: 3,\n  385: 1,\n  392: 1,\n  393: 1,\n  396: 2,\n  397: 2,\n  398: 2,\n  399: 1,\n  400: 1,\n  401: 1,\n  402: 1,\n  403: 1,\n  404: 1,\n  405: 1,\n  406: 1,\n  407: 1,\n  408: 1,\n  409: 1,\n  410: 1,\n  414: 4,\n  415: 1,\n  416: 1,\n  417: 2,\n  420: 1,\n  421: 1,\n  422: 2,\n  424: 1,\n  425: 2,\n  426: 2,\n  427: 2,\n  428: 2,\n  430: 3,\n  438: 3,\n  439: 3,\n  440: 3,\n  443: 2,\n  444: 2,\n  445: 2,\n  446: 2,\n  447: 6,\n  448: 6,\n  449: 2,\n  450: 2,\n  464: 2,\n  468: 3,\n  476: 2,\n  479: 1,\n  480: 2,\n  65535: 0\n};\n/* Part 3 TODO: actually parse formulae */\nfunction ods_to_csf_formula(f/*:string*/)/*:string*/ {\n\tif(f.slice(0,3) == \"of:\") f = f.slice(3);\n\t/* 5.2 Basic Expressions */\n\tif(f.charCodeAt(0) == 61) {\n\t\tf = f.slice(1);\n\t\tif(f.charCodeAt(0) == 61) f = f.slice(1);\n\t}\n\tf = f.replace(/COM\\.MICROSOFT\\./g, \"\");\n\t/* Part 3 Section 5.8 References */\n\tf = f.replace(/\\[((?:\\.[A-Z]+[0-9]+)(?::\\.[A-Z]+[0-9]+)?)\\]/g, function($$, $1) { return $1.replace(/\\./g,\"\"); });\n\tf = f.replace(/\\$'([^']|'')+'/g, function($$) { return $$.slice(1); });\n\tf = f.replace(/\\$([^\\]\\. #$]+)/g, function($$, $1) { return ($1).match(/^([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])?(10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})?$/) ? $$ : $1; });\n\t/* TODO: something other than this */\n\tf = f.replace(/\\[.(#[A-Z]*[?!])\\]/g, \"$1\");\n\treturn f.replace(/[;~]/g,\",\").replace(/\\|/g,\";\");\n}\n\nfunction csf_to_ods_formula(f/*:string*/)/*:string*/ {\n\tvar o = \"of:=\" + f.replace(crefregex, \"$1[.$2$3$4$5]\").replace(/\\]:\\[/g,\":\");\n\t/* TODO: something other than this */\n\treturn o.replace(/;/g, \"|\").replace(/,/g,\";\");\n}\n\nfunction ods_to_csf_3D(r/*:string*/)/*:[string, string]*/ {\n\tr = r.replace(/\\$'([^']|'')+'/g, function($$) { return $$.slice(1); });\n\tr = r.replace(/\\$([^\\]\\. #$]+)/g, function($$, $1) { return ($1).match(/^([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])?(10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})?$/) ? $$ : $1; });\n\tvar a = r.split(\":\");\n\tvar s = a[0].split(\".\")[0];\n\treturn [s, a[0].split(\".\")[1] + (a.length > 1 ? (\":\" + (a[1].split(\".\")[1] || a[1].split(\".\")[0])) : \"\")];\n}\n\nfunction csf_to_ods_3D(r/*:string*/)/*:string*/ {\n\treturn r.replace(/!/,\".\").replace(/:/, \":.\");\n}\n\nvar strs = {}; // shared strings\nvar _ssfopts = {}; // spreadsheet formatting options\n\n\n/*global Map */\nvar browser_has_Map = typeof Map !== 'undefined';\n\nfunction get_sst_id(sst/*:SST*/, str/*:string*/, rev)/*:number*/ {\n\tvar i = 0, len = sst.length;\n\tif(rev) {\n\t\tif(browser_has_Map ? rev.has(str) : Object.prototype.hasOwnProperty.call(rev, str)) {\n\t\t\tvar revarr = browser_has_Map ? rev.get(str) : rev[str];\n\t\t\tfor(; i < revarr.length; ++i) {\n\t\t\t\tif(sst[revarr[i]].t === str) { sst.Count ++; return revarr[i]; }\n\t\t\t}\n\t\t}\n\t} else for(; i < len; ++i) {\n\t\tif(sst[i].t === str) { sst.Count ++; return i; }\n\t}\n\tsst[len] = ({t:str}/*:any*/); sst.Count ++; sst.Unique ++;\n\tif(rev) {\n\t\tif(browser_has_Map) {\n\t\t\tif(!rev.has(str)) rev.set(str, []);\n\t\t\trev.get(str).push(len);\n\t\t} else {\n\t\t\tif(!Object.prototype.hasOwnProperty.call(rev, str)) rev[str] = [];\n\t\t\trev[str].push(len);\n\t\t}\n\t}\n\treturn len;\n}\n\nfunction col_obj_w(C/*:number*/, col) {\n\tvar p = ({min:C+1,max:C+1}/*:any*/);\n\t/* wch (chars), wpx (pixels) */\n\tvar wch = -1;\n\tif(col.MDW) MDW = col.MDW;\n\tif(col.width != null) p.customWidth = 1;\n\telse if(col.wpx != null) wch = px2char(col.wpx);\n\telse if(col.wch != null) wch = col.wch;\n\tif(wch > -1) { p.width = char2width(wch); p.customWidth = 1; }\n\telse if(col.width != null) p.width = col.width;\n\tif(col.hidden) p.hidden = true;\n\tif(col.level != null) { p.outlineLevel = p.level = col.level; }\n\treturn p;\n}\n\nfunction default_margins(margins/*:Margins*/, mode/*:?string*/) {\n\tif(!margins) return;\n\tvar defs = [0.7, 0.7, 0.75, 0.75, 0.3, 0.3];\n\tif(mode == 'xlml') defs = [1, 1, 1, 1, 0.5, 0.5];\n\tif(margins.left   == null) margins.left   = defs[0];\n\tif(margins.right  == null) margins.right  = defs[1];\n\tif(margins.top    == null) margins.top    = defs[2];\n\tif(margins.bottom == null) margins.bottom = defs[3];\n\tif(margins.header == null) margins.header = defs[4];\n\tif(margins.footer == null) margins.footer = defs[5];\n}\n\nfunction get_cell_style(styles/*:Array<any>*/, cell/*:Cell*/, opts) {\n\tvar z = opts.revssf[cell.z != null ? cell.z : \"General\"];\n\tvar i = 0x3c, len = styles.length;\n\tif(z == null && opts.ssf) {\n\t\tfor(; i < 0x188; ++i) if(opts.ssf[i] == null) {\n\t\t\tSSF__load(cell.z, i);\n\t\t\t// $FlowIgnore\n\t\t\topts.ssf[i] = cell.z;\n\t\t\topts.revssf[cell.z] = z = i;\n\t\t\tbreak;\n\t\t}\n\t}\n\tfor(i = 0; i != len; ++i) if(styles[i].numFmtId === z) return i;\n\tstyles[len] = {\n\t\tnumFmtId:z,\n\t\tfontId:0,\n\t\tfillId:0,\n\t\tborderId:0,\n\t\txfId:0,\n\t\tapplyNumberFormat:1\n\t};\n\treturn len;\n}\n\nfunction safe_format(p/*:Cell*/, fmtid/*:number*/, fillid/*:?number*/, opts, themes, styles, date1904) {\n\ttry {\n\t\tif(opts.cellNF) p.z = table_fmt[fmtid];\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(p.t === 'z' && !opts.cellStyles) return;\n\tif(p.t === 'd' && typeof p.v === 'string') p.v = parseDate(p.v);\n\tif((!opts || opts.cellText !== false) && p.t !== 'z') try {\n\t\tif(table_fmt[fmtid] == null) SSF__load(SSFImplicit[fmtid] || \"General\", fmtid);\n\t\tif(p.t === 'e') p.w = p.w || BErr[p.v];\n\t\telse if(fmtid === 0) {\n\t\t\tif(p.t === 'n') {\n\t\t\t\tif((p.v|0) === p.v) p.w = p.v.toString(10);\n\t\t\t\telse p.w = SSF_general_num(p.v);\n\t\t\t}\n\t\t\telse if(p.t === 'd') {\n\t\t\t\tvar dd = datenum(p.v, !!date1904);\n\t\t\t\tif((dd|0) === dd) p.w = dd.toString(10);\n\t\t\t\telse p.w = SSF_general_num(dd);\n\t\t\t}\n\t\t\telse if(p.v === undefined) return \"\";\n\t\t\telse p.w = SSF_general(p.v,_ssfopts);\n\t\t}\n\t\telse if(p.t === 'd') p.w = SSF_format(fmtid,datenum(p.v, !!date1904),_ssfopts);\n\t\telse p.w = SSF_format(fmtid,p.v,_ssfopts);\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(!opts.cellStyles) return;\n\tif(fillid != null) try {\n\t\tp.s = styles.Fills[fillid];\n\t\tif (p.s.fgColor && p.s.fgColor.theme && !p.s.fgColor.rgb) {\n\t\t\tp.s.fgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.fgColor.theme].rgb, p.s.fgColor.tint || 0);\n\t\t\tif(opts.WTF) p.s.fgColor.raw_rgb = themes.themeElements.clrScheme[p.s.fgColor.theme].rgb;\n\t\t}\n\t\tif (p.s.bgColor && p.s.bgColor.theme) {\n\t\t\tp.s.bgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.bgColor.theme].rgb, p.s.bgColor.tint || 0);\n\t\t\tif(opts.WTF) p.s.bgColor.raw_rgb = themes.themeElements.clrScheme[p.s.bgColor.theme].rgb;\n\t\t}\n\t} catch(e) { if(opts.WTF && styles.Fills) throw e; }\n}\n\nfunction check_ws(ws/*:Worksheet*/, sname/*:string*/, i/*:number*/) {\n\tif(ws && ws['!ref']) {\n\t\tvar range = safe_decode_range(ws['!ref']);\n\t\tif(range.e.c < range.s.c || range.e.r < range.s.r) throw new Error(\"Bad range (\" + i + \"): \" + ws['!ref']);\n\t}\n}\nfunction parse_ws_xml_dim(ws/*:Worksheet*/, s/*:string*/) {\n\tvar d = safe_decode_range(s);\n\tif(d.s.r<=d.e.r && d.s.c<=d.e.c && d.s.r>=0 && d.s.c>=0) ws[\"!ref\"] = encode_range(d);\n}\nvar mergecregex = /<(?:\\w+:)?mergeCell ref=[\"'][A-Z0-9:]+['\"]\\s*[\\/]?>/g;\nvar hlinkregex = /<(?:\\w+:)?hyperlink [^<>]*>/mg;\nvar dimregex = /\"(\\w*:\\w*)\"/;\nvar colregex = /<(?:\\w+:)?col\\b[^<>]*[\\/]?>/g;\nvar afregex = /<(?:\\w+:)?autoFilter[^>]*/g;\nvar marginregex= /<(?:\\w+:)?pageMargins[^<>]*\\/>/g;\nvar sheetprregex = /<(?:\\w+:)?sheetPr\\b[^<>]*?\\/>/;\n\n/* 18.3 Worksheets */\nfunction parse_ws_xml(data/*:?string*/, opts, idx/*:number*/, rels, wb/*:WBWBProps*/, themes, styles)/*:Worksheet*/ {\n\tif(!data) return data;\n\tif(!rels) rels = {'!id':{}};\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\n\t/* 18.3.1.99 worksheet CT_Worksheet */\n\tvar s = ({}/*:any*/); if(opts.dense) s[\"!data\"] = [];\n\tvar refguess/*:Range*/ = ({s: {r:2000000, c:2000000}, e: {r:0, c:0} }/*:any*/);\n\n\tvar data1 = \"\", data2 = \"\";\n\tvar mtch/*:?any*/ = str_match_xml_ns(data, \"sheetData\");\n\tif(mtch) {\n\t\tdata1 = data.slice(0, mtch.index);\n\t\tdata2 = data.slice(mtch.index + mtch[0].length);\n\t} else data1 = data2 = data;\n\n\t/* 18.3.1.82 sheetPr CT_SheetPr */\n\tvar sheetPr = data1.match(sheetprregex);\n\tif(sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);\n\telse if((sheetPr = str_match_xml_ns(data1, \"sheetPr\"))) parse_ws_xml_sheetpr2(sheetPr[0], sheetPr[1]||\"\", s, wb, idx, styles, themes);\n\n\t/* 18.3.1.35 dimension CT_SheetDimension */\n\tvar ridx = (data1.match(/<(?:\\w*:)?dimension/)||{index:-1}).index;\n\tif(ridx > 0) {\n\t\tvar ref = data1.slice(ridx,ridx+50).match(dimregex);\n\t\tif(ref && !(opts && opts.nodim)) parse_ws_xml_dim(s, ref[1]);\n\t}\n\n\t/* 18.3.1.88 sheetViews CT_SheetViews */\n\tvar svs = str_match_xml_ns(data1, \"sheetViews\");\n\tif(svs && svs[1]) parse_ws_xml_sheetviews(svs[1], wb);\n\n\t/* 18.3.1.17 cols CT_Cols */\n\tvar columns/*:Array<ColInfo>*/ = [];\n\tif(opts.cellStyles) {\n\t\t/* 18.3.1.13 col CT_Col */\n\t\tvar cols = data1.match(colregex);\n\t\tif(cols) parse_ws_xml_cols(columns, cols);\n\t}\n\n\t/* 18.3.1.80 sheetData CT_SheetData ? */\n\tif(mtch) parse_ws_xml_data(mtch[1], s, opts, refguess, themes, styles, wb);\n\n\t/* 18.3.1.2  autoFilter CT_AutoFilter */\n\tvar afilter = data2.match(afregex);\n\tif(afilter) s['!autofilter'] = parse_ws_xml_autofilter(afilter[0]);\n\n\t/* 18.3.1.55 mergeCells CT_MergeCells */\n\tvar merges/*:Array<Range>*/ = [];\n\tvar _merge = data2.match(mergecregex);\n\tif(_merge) for(ridx = 0; ridx != _merge.length; ++ridx)\n\t\tmerges[ridx] = safe_decode_range(_merge[ridx].slice(_merge[ridx].indexOf(\"\\\"\")+1));\n\n\t/* 18.3.1.48 hyperlinks CT_Hyperlinks */\n\tvar hlink = data2.match(hlinkregex);\n\tif(hlink) parse_ws_xml_hlinks(s, hlink, rels);\n\n\t/* 18.3.1.62 pageMargins CT_PageMargins */\n\tvar margins = data2.match(marginregex);\n\tif(margins) s['!margins'] = parse_ws_xml_margins(parsexmltag(margins[0]));\n\n\t/* legacyDrawing */\n\tvar m;\n\tif((m = data2.match(/legacyDrawing r:id=\"(.*?)\"/))) s['!legrel'] = m[1];\n\n\tif(opts && opts.nodim) refguess.s.c = refguess.s.r = 0;\n\tif(!s[\"!ref\"] && refguess.e.c >= refguess.s.c && refguess.e.r >= refguess.s.r) s[\"!ref\"] = encode_range(refguess);\n\tif(opts.sheetRows > 0 && s[\"!ref\"]) {\n\t\tvar tmpref = safe_decode_range(s[\"!ref\"]);\n\t\tif(opts.sheetRows <= +tmpref.e.r) {\n\t\t\ttmpref.e.r = opts.sheetRows - 1;\n\t\t\tif(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\n\t\t\tif(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\n\t\t\tif(tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\n\t\t\tif(tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\n\t\t\ts[\"!fullref\"] = s[\"!ref\"];\n\t\t\ts[\"!ref\"] = encode_range(tmpref);\n\t\t}\n\t}\n\tif(columns.length > 0) s[\"!cols\"] = columns;\n\tif(merges.length > 0) s[\"!merges\"] = merges;\n\tif(rels['!id'][s['!legrel']]) s['!legdrawel'] = rels['!id'][s['!legrel']];\n\treturn s;\n}\n\nfunction write_ws_xml_merges(merges/*:Array<Range>*/)/*:string*/ {\n\tif(merges.length === 0) return \"\";\n\tvar o = '<mergeCells count=\"' + merges.length + '\">';\n\tfor(var i = 0; i != merges.length; ++i) o += '<mergeCell ref=\"' + encode_range(merges[i]) + '\"/>';\n\treturn o + '</mergeCells>';\n}\n\n/* 18.3.1.82-3 sheetPr CT_ChartsheetPr / CT_SheetPr */\nfunction parse_ws_xml_sheetpr(sheetPr/*:string*/, s, wb/*:WBWBProps*/, idx/*:number*/) {\n\tvar data = parsexmltag(sheetPr);\n\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\tif(data.codeName) wb.Sheets[idx].CodeName = unescapexml(utf8read(data.codeName));\n}\nfunction parse_ws_xml_sheetpr2(sheetPr/*:string*/, body/*:string*/, s, wb/*:WBWBProps*/, idx/*:number*/) {\n\tparse_ws_xml_sheetpr(sheetPr.slice(0, sheetPr.indexOf(\">\")), s, wb, idx);\n}\nfunction write_ws_xml_sheetpr(ws, wb, idx, opts, o) {\n\tvar needed = false;\n\tvar props = {}, payload = null;\n\tif(opts.bookType !== 'xlsx' && wb.vbaraw) {\n\t\tvar cname = wb.SheetNames[idx];\n\t\ttry { if(wb.Workbook) cname = wb.Workbook.Sheets[idx].CodeName || cname; } catch(e) {}\n\t\tneeded = true;\n\t\tprops.codeName = utf8write(escapexml(cname));\n\t}\n\n\tif(ws && ws[\"!outline\"]) {\n\t\tvar outlineprops = {summaryBelow:1, summaryRight:1};\n\t\tif(ws[\"!outline\"].above) outlineprops.summaryBelow = 0;\n\t\tif(ws[\"!outline\"].left) outlineprops.summaryRight = 0;\n\t\tpayload = (payload||\"\") + writextag('outlinePr', null, outlineprops);\n\t}\n\n\tif(!needed && !payload) return;\n\to[o.length] = (writextag('sheetPr', payload, props));\n}\n\n/* 18.3.1.85 sheetProtection CT_SheetProtection */\nvar sheetprot_deffalse = [\"objects\", \"scenarios\", \"selectLockedCells\", \"selectUnlockedCells\"];\nvar sheetprot_deftrue = [\n\t\"formatColumns\", \"formatRows\", \"formatCells\",\n\t\"insertColumns\", \"insertRows\", \"insertHyperlinks\",\n\t\"deleteColumns\", \"deleteRows\",\n\t\"sort\", \"autoFilter\", \"pivotTables\"\n];\nfunction write_ws_xml_protection(sp)/*:string*/ {\n\t// algorithmName, hashValue, saltValue, spinCount\n\tvar o = ({sheet:1}/*:any*/);\n\tsheetprot_deffalse.forEach(function(n) { if(sp[n] != null && sp[n]) o[n] = \"1\"; });\n\tsheetprot_deftrue.forEach(function(n) { if(sp[n] != null && !sp[n]) o[n] = \"0\"; });\n\t/* TODO: algorithm */\n\tif(sp.password) o.password = crypto_CreatePasswordVerifier_Method1(sp.password).toString(16).toUpperCase();\n\treturn writextag('sheetProtection', null, o);\n}\n\nfunction parse_ws_xml_hlinks(s, data/*:Array<string>*/, rels) {\n\tvar dense = s[\"!data\"] != null;\n\tfor(var i = 0; i != data.length; ++i) {\n\t\tvar val = parsexmltag(utf8read(data[i]), true);\n\t\tif(!val.ref) return;\n\t\tvar rel = ((rels || {})['!id']||[])[val.id];\n\t\tif(rel) {\n\t\t\tval.Target = rel.Target;\n\t\t\tif(val.location) val.Target += \"#\"+unescapexml(val.location);\n\t\t} else {\n\t\t\tval.Target = \"#\" + unescapexml(val.location);\n\t\t\trel = {Target: val.Target, TargetMode: 'Internal'};\n\t\t}\n\t\tval.Rel = rel;\n\t\tif(val.tooltip) { val.Tooltip = val.tooltip; delete val.tooltip; }\n\t\tvar rng = safe_decode_range(val.ref);\n\t\tfor(var R=rng.s.r;R<=rng.e.r;++R) for(var C=rng.s.c;C<=rng.e.c;++C) {\n\t\t\tvar addr = encode_col(C) + encode_row(R);\n\t\t\tif(dense) {\n\t\t\t\tif(!s[\"!data\"][R]) s[\"!data\"][R] = [];\n\t\t\t\tif(!s[\"!data\"][R][C]) s[\"!data\"][R][C] = {t:\"z\",v:undefined};\n\t\t\t\ts[\"!data\"][R][C].l = val;\n\t\t\t} else {\n\t\t\t\tif(!s[addr]) s[addr] = {t:\"z\",v:undefined};\n\t\t\t\ts[addr].l = val;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction parse_ws_xml_margins(margin) {\n\tvar o = {};\n\t[\"left\", \"right\", \"top\", \"bottom\", \"header\", \"footer\"].forEach(function(k) {\n\t\tif(margin[k]) o[k] = parseFloat(margin[k]);\n\t});\n\treturn o;\n}\nfunction write_ws_xml_margins(margin)/*:string*/ {\n\tdefault_margins(margin);\n\treturn writextag('pageMargins', null, margin);\n}\n\nfunction parse_ws_xml_cols(columns, cols) {\n\tvar seencol = false;\n\tfor(var coli = 0; coli != cols.length; ++coli) {\n\t\tvar coll = parsexmltag(cols[coli], true);\n\t\tif(coll.hidden) coll.hidden = parsexmlbool(coll.hidden);\n\t\tvar colm=parseInt(coll.min, 10)-1, colM=parseInt(coll.max,10)-1;\n\t\tif(coll.outlineLevel) coll.level = (+coll.outlineLevel || 0);\n\t\tdelete coll.min; delete coll.max; coll.width = +coll.width;\n\t\tif(!seencol && coll.width) { seencol = true; find_mdw_colw(coll.width); }\n\t\tprocess_col(coll);\n\t\twhile(colm <= colM) columns[colm++] = dup(coll);\n\t}\n}\nfunction write_ws_xml_cols(ws, cols)/*:string*/ {\n\tvar o = [\"<cols>\"], col;\n\tfor(var i = 0; i != cols.length; ++i) {\n\t\tif(!(col = cols[i])) continue;\n\t\to[o.length] = (writextag('col', null, col_obj_w(i, col)));\n\t}\n\to[o.length] = \"</cols>\";\n\treturn o.join(\"\");\n}\n\nfunction parse_ws_xml_autofilter(data/*:string*/) {\n\tvar o = { ref: (data.match(/ref=\"([^\"]*)\"/)||[])[1]};\n\treturn o;\n}\nfunction write_ws_xml_autofilter(data, ws, wb, idx)/*:string*/ {\n\tvar ref = typeof data.ref == \"string\" ? data.ref : encode_range(data.ref);\n\tif(!wb.Workbook) wb.Workbook = ({Sheets:[]}/*:any*/);\n\tif(!wb.Workbook.Names) wb.Workbook.Names = [];\n\tvar names/*: Array<any> */ = wb.Workbook.Names;\n\tvar range = decode_range(ref);\n\tif(range.s.r == range.e.r) { range.e.r = decode_range(ws[\"!ref\"]).e.r; ref = encode_range(range); }\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar name = names[i];\n\t\tif(name.Name != '_xlnm._FilterDatabase') continue;\n\t\tif(name.Sheet != idx) continue;\n\t\tname.Ref = formula_quote_sheet_name(wb.SheetNames[idx]) + \"!\" + fix_range(ref); break;\n\t}\n\tif(i == names.length) names.push({ Name: '_xlnm._FilterDatabase', Sheet: idx, Ref: \"'\" + wb.SheetNames[idx] + \"'!\" + ref  });\n\treturn writextag(\"autoFilter\", null, {ref:ref});\n}\n\n/* 18.3.1.88 sheetViews CT_SheetViews */\n/* 18.3.1.87 sheetView CT_SheetView */\nvar sviewregex = /<(?:\\w:)?sheetView(?:[^<>a-z][^<>]*)?\\/?>/g;\nfunction parse_ws_xml_sheetviews(data, wb/*:WBWBProps*/) {\n\tif(!wb.Views) wb.Views = [{}];\n\t(data.match(sviewregex)||[]).forEach(function(r/*:string*/, i/*:number*/) {\n\t\tvar tag = parsexmltag(r);\n\t\t// $FlowIgnore\n\t\tif(!wb.Views[i]) wb.Views[i] = {};\n\t\t// $FlowIgnore\n\t\tif(+tag.zoomScale) wb.Views[i].zoom = +tag.zoomScale;\n\t\t// $FlowIgnore\n\t\tif(tag.rightToLeft && parsexmlbool(tag.rightToLeft)) wb.Views[i].RTL = true;\n\t});\n}\nfunction write_ws_xml_sheetviews(ws, opts, idx, wb)/*:string*/ {\n\tvar sview = ({workbookViewId:\"0\"}/*:any*/);\n\t// $FlowIgnore\n\tif((((wb||{}).Workbook||{}).Views||[])[0]) sview.rightToLeft = wb.Workbook.Views[0].RTL ? \"1\" : \"0\";\n\treturn writextag(\"sheetViews\", writextag(\"sheetView\", null, sview), {});\n}\n\nfunction write_ws_xml_cell(cell/*:Cell*/, ref, ws, opts, idx, wb, date1904)/*:string*/ {\n\tif(cell.c) ws['!comments'].push([ref, cell.c]);\n\tif((cell.v === undefined || cell.t === \"z\" && !(opts||{}).sheetStubs) && typeof cell.f !== \"string\" && typeof cell.z == \"undefined\") return \"\";\n\tvar vv = \"\";\n\tvar oldt = cell.t, oldv = cell.v;\n\tif(cell.t !== \"z\") switch(cell.t) {\n\t\tcase 'b': vv = cell.v ? \"1\" : \"0\"; break;\n\t\tcase 'n':\n\t\t\tif(isNaN(cell.v)) { cell.t = \"e\"; vv = BErr[cell.v = 0x24]; } // #NUM!\n\t\t\telse if(!isFinite(cell.v)) { cell.t = \"e\"; vv = BErr[cell.v = 0x07]; } // #DIV/0!\n\t\t\telse vv = ''+cell.v; break;\n\t\tcase 'e': vv = BErr[cell.v]; break;\n\t\tcase 'd':\n\t\t\tif(opts && opts.cellDates) {\n\t\t\t\tvar _vv = parseDate(cell.v, date1904);\n\t\t\t\tvv = _vv.toISOString();\n\t\t\t\tif(_vv.getUTCFullYear() < 1900) vv = vv.slice(vv.indexOf(\"T\") + 1).replace(\"Z\",\"\");\n\t\t\t} else {\n\t\t\t\tcell = dup(cell);\n\t\t\t\tcell.t = 'n';\n\t\t\t\tvv = ''+(cell.v = datenum(parseDate(cell.v, date1904), date1904));\n\t\t\t}\n\t\t\tif(typeof cell.z === 'undefined') cell.z = table_fmt[14];\n\t\t\tbreak;\n\t\tdefault: vv = cell.v; break;\n\t}\n\tvar v = (cell.t == \"z\" || cell.v == null)? \"\" : writetag('v', escapexml(vv)), o = ({r:ref}/*:any*/);\n\t/* TODO: cell style */\n\tvar os = get_cell_style(opts.cellXfs, cell, opts);\n\tif(os !== 0) o.s = os;\n\tswitch(cell.t) {\n\t\tcase 'n': break;\n\t\tcase 'd': o.t = \"d\"; break;\n\t\tcase 'b': o.t = \"b\"; break;\n\t\tcase 'e': o.t = \"e\"; break;\n\t\tcase 'z': break;\n\t\tdefault: if(cell.v == null) { delete cell.t; break; }\n\t\t\tif(cell.v.length > 32767) throw new Error(\"Text length must not exceed 32767 characters\");\n\t\t\tif(opts && opts.bookSST) {\n\t\t\t\tv = writetag('v', ''+get_sst_id(opts.Strings, cell.v, opts.revStrings));\n\t\t\t\to.t = \"s\"; break;\n\t\t\t}\n\t\t\telse o.t = \"str\"; break;\n\t}\n\tif(cell.t != oldt) { cell.t = oldt; cell.v = oldv; }\n\tif(typeof cell.f == \"string\" && cell.f) {\n\t\tvar ff = cell.F && cell.F.slice(0, ref.length) == ref ? {t:\"array\", ref:cell.F} : null;\n\t\tv = writextag('f', escapexml(cell.f), ff) + (cell.v != null ? v : \"\");\n\t}\n\tif(cell.l) {\n\t\tcell.l.display = escapexml(vv);\n\t\tws['!links'].push([ref, cell.l]);\n\t}\n\tif(cell.D) o.cm = 1;\n\treturn writextag('c', v, o);\n}\n\nvar parse_ws_xml_data = /*#__PURE__*/(function() {\n\tvar cellregex = /<(?:\\w+:)?c[ \\/>]/, rowregex = /<\\/(?:\\w+:)?row>/;\n\tvar rregex = /r=[\"']([^\"']*)[\"']/;\n\tvar refregex = /ref=[\"']([^\"']*)[\"']/;\n\nreturn function parse_ws_xml_data(sdata/*:string*/, s, opts, guess/*:Range*/, themes, styles, wb) {\n\tvar ri = 0, x = \"\", cells/*:Array<string>*/ = [], cref/*:?Array<string>*/ = [], idx=0, i=0, cc=0, d=\"\", p/*:any*/;\n\tvar tag, tagr = 0, tagc = 0;\n\tvar sstr, ftag;\n\tvar fmtid = 0, fillid = 0;\n\tvar do_format = Array.isArray(styles.CellXf), cf;\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar sharedf = [];\n\tvar dense = s[\"!data\"] != null;\n\tvar rows/*:Array<RowInfo>*/ = [], rowobj = {}, rowrite = false;\n\tvar sheetStubs = !!opts.sheetStubs;\n\tvar date1904 = !!((wb||{}).WBProps||{}).date1904;\n\tfor(var marr = sdata.split(rowregex), mt = 0, marrlen = marr.length; mt != marrlen; ++mt) {\n\t\tx = marr[mt].trim();\n\t\tvar xlen = x.length;\n\t\tif(xlen === 0) continue;\n\n\t\t/* 18.3.1.73 row CT_Row */\n\t\tvar rstarti = 0;\n\t\touta: for(ri = 0; ri < xlen; ++ri) switch(/*x.charCodeAt(ri)*/x[ri]) {\n\t\t\tcase \">\" /*62*/:\n\t\t\t\tif(/*x.charCodeAt(ri-1) != 47*/x[ri-1] != \"/\") { ++ri; break outa; }\n\t\t\t\tif(opts && opts.cellStyles) {\n\t\t\t\t\t// TODO: avoid duplication\n\t\t\t\t\ttag = parsexmltag(x.slice(rstarti,ri), true);\n\t\t\t\t\ttagr = tag.r != null ? parseInt(tag.r, 10) : tagr+1; tagc = -1;\n\t\t\t\t\tif(opts.sheetRows && opts.sheetRows < tagr) continue;\n\t\t\t\t\trowobj = {}; rowrite = false;\n\t\t\t\t\tif(tag.ht) { rowrite = true; rowobj.hpt = parseFloat(tag.ht); rowobj.hpx = pt2px(rowobj.hpt); }\n\t\t\t\t\tif(tag.hidden && parsexmlbool(tag.hidden)) { rowrite = true; rowobj.hidden = true; }\n\t\t\t\t\tif(tag.outlineLevel != null) { rowrite = true; rowobj.level = +tag.outlineLevel; }\n\t\t\t\t\tif(rowrite) rows[tagr-1] = rowobj;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"<\" /*60*/: rstarti = ri; break;\n\t\t}\n\t\tif(rstarti >= ri) break;\n\t\ttag = parsexmltag(x.slice(rstarti,ri), true);\n\t\ttagr = tag.r != null ? parseInt(tag.r, 10) : tagr+1; tagc = -1;\n\t\tif(opts.sheetRows && opts.sheetRows < tagr) continue;\n\t\tif(!opts.nodim) {\n\t\t\tif(guess.s.r > tagr - 1) guess.s.r = tagr - 1;\n\t\t\tif(guess.e.r < tagr - 1) guess.e.r = tagr - 1;\n\t\t}\n\n\t\tif(opts && opts.cellStyles) {\n\t\t\trowobj = {}; rowrite = false;\n\t\t\tif(tag.ht) { rowrite = true; rowobj.hpt = parseFloat(tag.ht); rowobj.hpx = pt2px(rowobj.hpt); }\n\t\t\tif(tag.hidden && parsexmlbool(tag.hidden)) { rowrite = true; rowobj.hidden = true; }\n\t\t\tif(tag.outlineLevel != null) { rowrite = true; rowobj.level = +tag.outlineLevel; }\n\t\t\tif(rowrite) rows[tagr-1] = rowobj;\n\t\t}\n\n\t\t/* 18.3.1.4 c CT_Cell */\n\t\tcells = x.slice(ri).split(cellregex);\n\t\tfor(var rslice = 0; rslice != cells.length; ++rslice) if(cells[rslice].trim().charAt(0) != \"<\") break;\n\t\tcells = cells.slice(rslice);\n\t\tfor(ri = 0; ri != cells.length; ++ri) {\n\t\t\tx = cells[ri].trim();\n\t\t\tif(x.length === 0) continue;\n\t\t\tcref = x.match(rregex); idx = ri; i=0; cc=0;\n\t\t\tx = \"<c \" + (x.slice(0,1)==\"<\"?\">\":\"\") + x;\n\t\t\tif(cref != null && cref.length === 2) {\n\t\t\t\tidx = 0; d=cref[1];\n\t\t\t\tfor(i=0; i != d.length; ++i) {\n\t\t\t\t\tif((cc=d.charCodeAt(i)-64) < 1 || cc > 26) break;\n\t\t\t\t\tidx = 26*idx + cc;\n\t\t\t\t}\n\t\t\t\t--idx;\n\t\t\t\ttagc = idx;\n\t\t\t} else ++tagc;\n\t\t\tfor(i = 0; i != x.length; ++i) if(x.charCodeAt(i) === 62) break; ++i;\n\t\t\ttag = parsexmltag(x.slice(0,i), true);\n\t\t\tif(!tag.r) tag.r = encode_cell({r:tagr-1, c:tagc});\n\t\t\td = x.slice(i);\n\t\t\tp = ({t:\"\"}/*:any*/);\n\n\t\t\tif((cref=str_match_xml_ns(d, \"v\"))!= null && /*::cref != null && */cref[1] !== '') p.v=unescapexml(cref[1]);\n\t\t\tif(opts.cellFormula) {\n\t\t\t\tif((cref=str_match_xml_ns(d, \"f\"))!= null /*:: && cref != null*/) {\n\t\t\t\t\tif(cref[1] == \"\") {\n\t\t\t\t\t\tif(/*::cref != null && cref[0] != null && */cref[0].indexOf('t=\"shared\"') > -1) {\n\t\t\t\t\t\t\t// TODO: parse formula\n\t\t\t\t\t\t\tftag = parsexmltag(cref[0]);\n\t\t\t\t\t\t\tif(sharedf[ftag.si]) p.f = shift_formula_xlsx(sharedf[ftag.si][1], sharedf[ftag.si][2]/*[0].ref*/, tag.r);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t/* TODO: match against XLSXFutureFunctions */\n\t\t\t\t\t\tp.f=unescapexml(utf8read(cref[1]), true);\n\t\t\t\t\t\tif(!opts.xlfn) p.f = _xlfn(p.f);\n\t\t\t\t\t\tif(/*::cref != null && cref[0] != null && */cref[0].indexOf('t=\"array\"') > -1) {\n\t\t\t\t\t\t\tp.F = (d.match(refregex)||[])[1];\n\t\t\t\t\t\t\tif(p.F.indexOf(\":\") > -1) arrayf.push([safe_decode_range(p.F), p.F]);\n\t\t\t\t\t\t} else if(/*::cref != null && cref[0] != null && */cref[0].indexOf('t=\"shared\"') > -1) {\n\t\t\t\t\t\t\t// TODO: parse formula\n\t\t\t\t\t\t\tftag = parsexmltag(cref[0]);\n\t\t\t\t\t\t\tvar ___f = unescapexml(utf8read(cref[1]));\n\t\t\t\t\t\t\tif(!opts.xlfn) ___f = _xlfn(___f);\n\t\t\t\t\t\t\tsharedf[parseInt(ftag.si, 10)] = [ftag, ___f, tag.r];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if((cref=d.match(/<f[^<>]*\\/>/))) {\n\t\t\t\t\tftag = parsexmltag(cref[0]);\n\t\t\t\t\tif(sharedf[ftag.si]) p.f = shift_formula_xlsx(sharedf[ftag.si][1], sharedf[ftag.si][2]/*[0].ref*/, tag.r);\n\t\t\t\t}\n\t\t\t\t/* TODO: factor out contains logic */\n\t\t\t\tvar _tag = decode_cell(tag.r);\n\t\t\t\tfor(i = 0; i < arrayf.length; ++i)\n\t\t\t\t\tif(_tag.r >= arrayf[i][0].s.r && _tag.r <= arrayf[i][0].e.r)\n\t\t\t\t\t\tif(_tag.c >= arrayf[i][0].s.c && _tag.c <= arrayf[i][0].e.c)\n\t\t\t\t\t\t\tp.F = arrayf[i][1];\n\t\t\t}\n\n\t\t\tif(tag.t == null && p.v === undefined) {\n\t\t\t\tif(p.f || p.F) {\n\t\t\t\t\tp.v = 0; p.t = \"n\";\n\t\t\t\t} else if(!sheetStubs) continue;\n\t\t\t\telse p.t = \"z\";\n\t\t\t}\n\t\t\telse p.t = tag.t || \"n\";\n\t\t\tif(guess.s.c > tagc) guess.s.c = tagc;\n\t\t\tif(guess.e.c < tagc) guess.e.c = tagc;\n\t\t\t/* 18.18.11 t ST_CellType */\n\t\t\tswitch(p.t) {\n\t\t\t\tcase 'n':\n\t\t\t\t\tif(p.v == \"\" || p.v == null) {\n\t\t\t\t\t\tif(!sheetStubs) continue;\n\t\t\t\t\t\tp.t = 'z';\n\t\t\t\t\t} else p.v = parseFloat(p.v);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 's':\n\t\t\t\t\tif(typeof p.v == 'undefined') {\n\t\t\t\t\t\tif(!sheetStubs) continue;\n\t\t\t\t\t\tp.t = 'z';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsstr = strs[parseInt(p.v, 10)];\n\t\t\t\t\t\tp.v = sstr.t;\n\t\t\t\t\t\tp.r = sstr.r;\n\t\t\t\t\t\tif(opts.cellHTML) p.h = sstr.h;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'str':\n\t\t\t\t\tp.t = \"s\";\n\t\t\t\t\tp.v = (p.v!=null) ? unescapexml(utf8read(p.v), true) : '';\n\t\t\t\t\tif(opts.cellHTML) p.h = escapehtml(p.v);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'inlineStr':\n\t\t\t\t\tcref = str_match_xml_ns(d, \"is\");\n\t\t\t\t\tp.t = 's';\n\t\t\t\t\tif(cref != null && (sstr = parse_si(cref[1]))) {\n\t\t\t\t\t\tp.v = sstr.t;\n\t\t\t\t\t\tif(opts.cellHTML) p.h = sstr.h;\n\t\t\t\t\t} else p.v = \"\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'b': p.v = parsexmlbool(p.v); break;\n\t\t\t\tcase 'd':\n\t\t\t\t\tif(opts.cellDates) p.v = parseDate(p.v, date1904);\n\t\t\t\t\telse { p.v = datenum(parseDate(p.v, date1904), date1904); p.t = 'n'; }\n\t\t\t\t\tbreak;\n\t\t\t\t/* error string in .w, number in .v */\n\t\t\t\tcase 'e':\n\t\t\t\t\tif(!opts || opts.cellText !== false) p.w = p.v;\n\t\t\t\t\tp.v = RBErr[p.v]; break;\n\t\t\t}\n\t\t\t/* formatting */\n\t\t\tfmtid = fillid = 0;\n\t\t\tcf = null;\n\t\t\tif(do_format && tag.s !== undefined) {\n\t\t\t\tcf = styles.CellXf[tag.s];\n\t\t\t\tif(cf != null) {\n\t\t\t\t\tif(cf.numFmtId != null) fmtid = cf.numFmtId;\n\t\t\t\t\tif(opts.cellStyles) {\n\t\t\t\t\t\tif(cf.fillId != null) fillid = cf.fillId;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tsafe_format(p, fmtid, fillid, opts, themes, styles, date1904);\n\t\t\tif(opts.cellDates && do_format && p.t == 'n' && fmt_is_date(table_fmt[fmtid])) { p.v = numdate(p.v + (date1904 ? 1462 : 0)); p.t = typeof p.v == \"number\" ? 'n' : 'd'; }\n\t\t\tif(tag.cm && opts.xlmeta) {\n\t\t\t\tvar cm = (opts.xlmeta.Cell||[])[+tag.cm-1];\n\t\t\t\tif(cm && cm.type == 'XLDAPR') p.D = true;\n\t\t\t}\n\t\t\tvar _r;\n\t\t\tif(opts.nodim) {\n\t\t\t\t_r = decode_cell(tag.r);\n\t\t\t\tif(guess.s.r > _r.r) guess.s.r = _r.r;\n\t\t\t\tif(guess.e.r < _r.r) guess.e.r = _r.r;\n\t\t\t}\n\t\t\tif(dense) {\n\t\t\t\t_r = decode_cell(tag.r);\n\t\t\t\tif(!s[\"!data\"][_r.r]) s[\"!data\"][_r.r] = [];\n\t\t\t\ts[\"!data\"][_r.r][_r.c] = p;\n\t\t\t} else s[tag.r] = p;\n\t\t}\n\t}\n\tif(rows.length > 0) s['!rows'] = rows;\n}; })();\n\nfunction write_ws_xml_data(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*//*::, rels*/)/*:string*/ {\n\tvar o/*:Array<string>*/ = [], r/*:Array<string>*/ = [], range = safe_decode_range(ws['!ref']), cell=\"\", ref, rr = \"\", cols/*:Array<string>*/ = [], R=0, C=0, rows = ws['!rows'];\n\tvar dense = ws[\"!data\"] != null;\n\tvar params = ({r:rr}/*:any*/), row/*:RowInfo*/, height = -1;\n\tvar date1904 = (((wb||{}).Workbook||{}).WBProps||{}).date1904;\n\tfor(C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);\n\tfor(R = range.s.r; R <= range.e.r; ++R) {\n\t\tr = [];\n\t\trr = encode_row(R);\n\t\tfor(C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tref = cols[C] + rr;\n\t\t\tvar _cell = dense ? (ws[\"!data\"][R]||[])[C]: ws[ref];\n\t\t\tif(_cell === undefined) continue;\n\t\t\tif((cell = write_ws_xml_cell(_cell, ref, ws, opts, idx, wb, date1904)) != null) r.push(cell);\n\t\t}\n\t\tif(r.length > 0 || (rows && rows[R])) {\n\t\t\tparams = ({r:rr}/*:any*/);\n\t\t\tif(rows && rows[R]) {\n\t\t\t\trow = rows[R];\n\t\t\t\tif(row.hidden) params.hidden = 1;\n\t\t\t\theight = -1;\n\t\t\t\tif(row.hpx) height = px2pt(row.hpx);\n\t\t\t\telse if(row.hpt) height = row.hpt;\n\t\t\t\tif(height > -1) { params.ht = height; params.customHeight = 1; }\n\t\t\t\tif(row.level) { params.outlineLevel = row.level; }\n\t\t\t}\n\t\t\to[o.length] = (writextag('row', r.join(\"\"), params));\n\t\t}\n\t}\n\tif(rows) for(; R < rows.length; ++R) {\n\t\tif(rows && rows[R]) {\n\t\t\tparams = ({r:R+1}/*:any*/);\n\t\t\trow = rows[R];\n\t\t\tif(row.hidden) params.hidden = 1;\n\t\t\theight = -1;\n\t\t\tif (row.hpx) height = px2pt(row.hpx);\n\t\t\telse if (row.hpt) height = row.hpt;\n\t\t\tif (height > -1) { params.ht = height; params.customHeight = 1; }\n\t\t\tif (row.level) { params.outlineLevel = row.level; }\n\t\t\to[o.length] = (writextag('row', \"\", params));\n\t\t}\n\t}\n\treturn o.join(\"\");\n}\n\nfunction write_ws_xml(idx/*:number*/, opts, wb/*:Workbook*/, rels)/*:string*/ {\n\tvar o = [XML_HEADER, writextag('worksheet', null, {\n\t\t'xmlns': XMLNS_main[0],\n\t\t'xmlns:r': XMLNS.r\n\t})];\n\tvar s = wb.SheetNames[idx], sidx = 0, rdata = \"\";\n\tvar ws = wb.Sheets[s];\n\tif(ws == null) ws = {};\n\tvar ref = ws['!ref'] || 'A1';\n\tvar range = safe_decode_range(ref);\n\tif(range.e.c > 0x3FFF || range.e.r > 0xFFFFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + ref + \" exceeds format limit A1:XFD1048576\");\n\t\trange.e.c = Math.min(range.e.c, 0x3FFF);\n\t\trange.e.r = Math.min(range.e.c, 0xFFFFF);\n\t\tref = encode_range(range);\n\t}\n\tif(!rels) rels = {};\n\tws['!comments'] = [];\n\tvar _drawing = [];\n\n\twrite_ws_xml_sheetpr(ws, wb, idx, opts, o);\n\n\to[o.length] = (writextag('dimension', null, {'ref': ref}));\n\n\to[o.length] = write_ws_xml_sheetviews(ws, opts, idx, wb);\n\n\t/* TODO: store in WB, process styles */\n\tif(opts.sheetFormat) o[o.length] = (writextag('sheetFormatPr', null, {\n\t\tdefaultRowHeight:opts.sheetFormat.defaultRowHeight||'16',\n\t\tbaseColWidth:opts.sheetFormat.baseColWidth||'10',\n\t\toutlineLevelRow:opts.sheetFormat.outlineLevelRow||'7'\n\t}));\n\n\tif(ws['!cols'] != null && ws['!cols'].length > 0) o[o.length] = (write_ws_xml_cols(ws, ws['!cols']));\n\n\to[sidx = o.length] = '<sheetData/>';\n\tws['!links'] = [];\n\tif(ws['!ref'] != null) {\n\t\trdata = write_ws_xml_data(ws, opts, idx, wb, rels);\n\t\tif(rdata.length > 0) o[o.length] = (rdata);\n\t}\n\tif(o.length>sidx+1) { o[o.length] = ('</sheetData>'); o[sidx]=o[sidx].replace(\"/>\",\">\"); }\n\n\t/* sheetCalcPr */\n\n\tif(ws['!protect']) o[o.length] = write_ws_xml_protection(ws['!protect']);\n\n\t/* protectedRanges */\n\t/* scenarios */\n\n\tif(ws['!autofilter'] != null) o[o.length] = write_ws_xml_autofilter(ws['!autofilter'], ws, wb, idx);\n\n\t/* sortState */\n\t/* dataConsolidate */\n\t/* customSheetViews */\n\n\tif(ws['!merges'] != null && ws['!merges'].length > 0) o[o.length] = (write_ws_xml_merges(ws['!merges']));\n\n\t/* phoneticPr */\n\t/* conditionalFormatting */\n\t/* dataValidations */\n\n\tvar relc = -1, rel, rId = -1;\n\tif(/*::(*/ws['!links']/*::||[])*/.length > 0) {\n\t\to[o.length] = \"<hyperlinks>\";\n\t\t/*::(*/ws['!links']/*::||[])*/.forEach(function(l) {\n\t\t\tif(!l[1].Target) return;\n\t\t\trel = ({\"ref\":l[0]}/*:any*/);\n\t\t\tif(l[1].Target.charAt(0) != \"#\") {\n\t\t\t\trId = add_rels(rels, -1, escapexml(l[1].Target).replace(/#[\\s\\S]*$/, \"\"), RELS.HLINK);\n\t\t\t\trel[\"r:id\"] = \"rId\"+rId;\n\t\t\t}\n\t\t\tif((relc = l[1].Target.indexOf(\"#\")) > -1) rel.location = escapexml(l[1].Target.slice(relc+1));\n\t\t\tif(l[1].Tooltip) rel.tooltip = escapexml(l[1].Tooltip);\n\t\t\trel.display = l[1].display;\n\t\t\to[o.length] = writextag(\"hyperlink\",null,rel);\n\t\t});\n\t\to[o.length] = \"</hyperlinks>\";\n\t}\n\tdelete ws['!links'];\n\n\t/* printOptions */\n\n\tif(ws['!margins'] != null) o[o.length] =  write_ws_xml_margins(ws['!margins']);\n\n\t/* pageSetup */\n\t/* headerFooter */\n\t/* rowBreaks */\n\t/* colBreaks */\n\t/* customProperties */\n\t/* cellWatches */\n\n\tif(!opts || opts.ignoreEC || (opts.ignoreEC == (void 0))) o[o.length] = writetag(\"ignoredErrors\", writextag(\"ignoredError\", null, {numberStoredAsText:1, sqref:ref}));\n\n\t/* smartTags */\n\n\tif(_drawing.length > 0) {\n\t\trId = add_rels(rels, -1, \"../drawings/drawing\" + (idx+1) + \".xml\", RELS.DRAW);\n\t\to[o.length] = writextag(\"drawing\", null, {\"r:id\":\"rId\" + rId});\n\t\tws['!drawing'] = _drawing;\n\t}\n\n\tif(ws['!comments'].length > 0) {\n\t\trId = add_rels(rels, -1, \"../drawings/vmlDrawing\" + (idx+1) + \".vml\", RELS.VML);\n\t\to[o.length] = writextag(\"legacyDrawing\", null, {\"r:id\":\"rId\" + rId});\n\t\tws['!legacy'] = rId;\n\t}\n\n\t/* legacyDrawingHF */\n\t/* picture */\n\t/* oleObjects */\n\t/* controls */\n\t/* webPublishItems */\n\t/* tableParts */\n\t/* extLst */\n\n\tif(o.length>1) { o[o.length] = ('</worksheet>'); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSB] 2.4.726 BrtRowHdr */\nfunction parse_BrtRowHdr(data, length) {\n\tvar z = ({}/*:any*/);\n\tvar tgt = data.l + length;\n\tz.r = data.read_shift(4);\n\tdata.l += 4; // TODO: ixfe\n\tvar miyRw = data.read_shift(2);\n\tdata.l += 1; // TODO: top/bot padding\n\tvar flags = data.read_shift(1);\n\tdata.l = tgt;\n\tif(flags & 0x07) z.level = flags & 0x07;\n\tif(flags & 0x10) z.hidden = true;\n\tif(flags & 0x20) z.hpt = miyRw / 20;\n\treturn z;\n}\nfunction write_BrtRowHdr(R/*:number*/, range, ws) {\n\tvar o = new_buf(17+8*16);\n\tvar row = (ws['!rows']||[])[R]||{};\n\to.write_shift(4, R);\n\n\to.write_shift(4, 0); /* TODO: ixfe */\n\n\tvar miyRw = 0x0140;\n\tif(row.hpx) miyRw = px2pt(row.hpx) * 20;\n\telse if(row.hpt) miyRw = row.hpt * 20;\n\to.write_shift(2, miyRw);\n\n\to.write_shift(1, 0); /* top/bot padding */\n\n\tvar flags = 0x0;\n\tif(row.level) flags |= row.level;\n\tif(row.hidden) flags |= 0x10;\n\tif(row.hpx || row.hpt) flags |= 0x20;\n\to.write_shift(1, flags);\n\n\to.write_shift(1, 0); /* phonetic guide */\n\n\t/* [MS-XLSB] 2.5.8 BrtColSpan explains the mechanism */\n\tvar ncolspan = 0, lcs = o.l;\n\to.l += 4;\n\n\tvar caddr = {r:R, c:0};\n\tvar dense = ws[\"!data\"] != null;\n\tfor(var i = 0; i < 16; ++i) {\n\t\tif((range.s.c > ((i+1) << 10)) || (range.e.c < (i << 10))) continue;\n\t\tvar first = -1, last = -1;\n\t\tfor(var j = (i<<10); j < ((i+1)<<10); ++j) {\n\t\t\tcaddr.c = j;\n\t\t\tvar cell = dense ? (ws[\"!data\"][caddr.r]||[])[caddr.c] : ws[encode_cell(caddr)];\n\t\t\tif(cell) { if(first < 0) first = j; last = j; }\n\t\t}\n\t\tif(first < 0) continue;\n\t\t++ncolspan;\n\t\to.write_shift(4, first);\n\t\to.write_shift(4, last);\n\t}\n\n\tvar l = o.l;\n\to.l = lcs;\n\to.write_shift(4, ncolspan);\n\to.l = l;\n\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\nfunction write_row_header(ba, ws, range, R) {\n\tvar o = write_BrtRowHdr(R, range, ws);\n\tif((o.length > 17) || (ws['!rows']||[])[R]) write_record(ba, 0x0000 /* BrtRowHdr */, o);\n}\n\n/* [MS-XLSB] 2.4.820 BrtWsDim */\nvar parse_BrtWsDim = parse_UncheckedRfX;\nvar write_BrtWsDim = write_UncheckedRfX;\n\n/* [MS-XLSB] 2.4.821 BrtWsFmtInfo */\nfunction parse_BrtWsFmtInfo(/*::data, length*/) {\n}\n//function write_BrtWsFmtInfo(ws, o) { }\n\n/* [MS-XLSB] 2.4.823 BrtWsProp */\nfunction parse_BrtWsProp(data, length) {\n\tvar z = {};\n\tvar f = data[data.l]; ++data.l;\n\tz.above = !(f & 0x40);\n\tz.left  = !(f & 0x80);\n\t/* TODO: pull flags */\n\tdata.l += 18;\n\tz.name = parse_XLSBCodeName(data, length - 19);\n\treturn z;\n}\nfunction write_BrtWsProp(str, outl, o) {\n\tif(o == null) o = new_buf(84+4*str.length);\n\tvar f = 0xC0;\n\tif(outl) {\n\t\tif(outl.above) f &= ~0x40;\n\t\tif(outl.left)  f &= ~0x80;\n\t}\n\to.write_shift(1, f);\n\tfor(var i = 1; i < 3; ++i) o.write_shift(1,0);\n\twrite_BrtColor({auto:1}, o);\n\to.write_shift(-4,-1);\n\to.write_shift(-4,-1);\n\twrite_XLSBCodeName(str, o);\n\treturn o.slice(0, o.l);\n}\n\n/* [MS-XLSB] 2.4.306 BrtCellBlank */\nfunction parse_BrtCellBlank(data) {\n\tvar cell = parse_XLSBCell(data);\n\treturn [cell];\n}\nfunction write_BrtCellBlank(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\treturn write_XLSBCell(ncell, o);\n}\nfunction parse_BrtShortBlank(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\treturn [cell];\n}\nfunction write_BrtShortBlank(cell, ncell, o) {\n\tif(o == null) o = new_buf(4);\n\treturn write_XLSBShortCell(ncell, o);\n}\n\n/* [MS-XLSB] 2.4.307 BrtCellBool */\nfunction parse_BrtCellBool(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar fBool = data.read_shift(1);\n\treturn [cell, fBool, 'b'];\n}\nfunction write_BrtCellBool(cell, ncell, o) {\n\tif(o == null) o = new_buf(9);\n\twrite_XLSBCell(ncell, o);\n\to.write_shift(1, cell.v ? 1 : 0);\n\treturn o;\n}\nfunction parse_BrtShortBool(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar fBool = data.read_shift(1);\n\treturn [cell, fBool, 'b'];\n}\nfunction write_BrtShortBool(cell, ncell, o) {\n\tif(o == null) o = new_buf(5);\n\twrite_XLSBShortCell(ncell, o);\n\to.write_shift(1, cell.v ? 1 : 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.308 BrtCellError */\nfunction parse_BrtCellError(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar bError = data.read_shift(1);\n\treturn [cell, bError, 'e'];\n}\nfunction write_BrtCellError(cell, ncell, o) {\n\tif(o == null) o = new_buf(9);\n\twrite_XLSBCell(ncell, o);\n\to.write_shift(1, cell.v);\n\treturn o;\n}\nfunction parse_BrtShortError(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar bError = data.read_shift(1);\n\treturn [cell, bError, 'e'];\n}\nfunction write_BrtShortError(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\twrite_XLSBShortCell(ncell, o);\n\to.write_shift(1, cell.v);\n\to.write_shift(2, 0);\n\to.write_shift(1, 0);\n\treturn o;\n}\n\n\n/* [MS-XLSB] 2.4.311 BrtCellIsst */\nfunction parse_BrtCellIsst(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar isst = data.read_shift(4);\n\treturn [cell, isst, 's'];\n}\nfunction write_BrtCellIsst(cell, ncell, o) {\n\tif(o == null) o = new_buf(12);\n\twrite_XLSBCell(ncell, o);\n\to.write_shift(4, ncell.v);\n\treturn o;\n}\nfunction parse_BrtShortIsst(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar isst = data.read_shift(4);\n\treturn [cell, isst, 's'];\n}\nfunction write_BrtShortIsst(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\twrite_XLSBShortCell(ncell, o);\n\to.write_shift(4, ncell.v);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.313 BrtCellReal */\nfunction parse_BrtCellReal(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_Xnum(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtCellReal(cell, ncell, o) {\n\tif(o == null) o = new_buf(16);\n\twrite_XLSBCell(ncell, o);\n\twrite_Xnum(cell.v, o);\n\treturn o;\n}\nfunction parse_BrtShortReal(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar value = parse_Xnum(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtShortReal(cell, ncell, o) {\n\tif(o == null) o = new_buf(12);\n\twrite_XLSBShortCell(ncell, o);\n\twrite_Xnum(cell.v, o);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.314 BrtCellRk */\nfunction parse_BrtCellRk(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_RkNumber(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtCellRk(cell, ncell, o) {\n\tif(o == null) o = new_buf(12);\n\twrite_XLSBCell(ncell, o);\n\twrite_RkNumber(cell.v, o);\n\treturn o;\n}\nfunction parse_BrtShortRk(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar value = parse_RkNumber(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtShortRk(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\twrite_XLSBShortCell(ncell, o);\n\twrite_RkNumber(cell.v, o);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.323 BrtCellRString */\nfunction parse_BrtCellRString(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_RichStr(data);\n\treturn [cell, value, 'is'];\n}\n\n/* [MS-XLSB] 2.4.317 BrtCellSt */\nfunction parse_BrtCellSt(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_XLWideString(data);\n\treturn [cell, value, 'str'];\n}\nfunction write_BrtCellSt(cell, ncell, o) {\n\tvar data = cell.v == null ? \"\" : String(cell.v);\n\tif(o == null) o = new_buf(12 + 4 * cell.v.length);\n\twrite_XLSBCell(ncell, o);\n\twrite_XLWideString(data, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\nfunction parse_BrtShortSt(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar value = parse_XLWideString(data);\n\treturn [cell, value, 'str'];\n}\nfunction write_BrtShortSt(cell, ncell, o) {\n\tvar data = cell.v == null ? \"\" : String(cell.v);\n\tif(o == null) o = new_buf(8 + 4 * data.length);\n\twrite_XLSBShortCell(ncell, o);\n\twrite_XLWideString(data, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.653 BrtFmlaBool */\nfunction parse_BrtFmlaBool(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = data.read_shift(1);\n\tvar o = [cell, value, 'b'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.654 BrtFmlaError */\nfunction parse_BrtFmlaError(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = data.read_shift(1);\n\tvar o = [cell, value, 'e'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.655 BrtFmlaNum */\nfunction parse_BrtFmlaNum(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = parse_Xnum(data);\n\tvar o = [cell, value, 'n'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.656 BrtFmlaString */\nfunction parse_BrtFmlaString(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = parse_XLWideString(data);\n\tvar o = [cell, value, 'str'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.682 BrtMergeCell */\nvar parse_BrtMergeCell = parse_UncheckedRfX;\nvar write_BrtMergeCell = write_UncheckedRfX;\n/* [MS-XLSB] 2.4.107 BrtBeginMergeCells */\nfunction write_BrtBeginMergeCells(cnt, o) {\n\tif(o == null) o = new_buf(4);\n\to.write_shift(4, cnt);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.662 BrtHLink */\nfunction parse_BrtHLink(data, length/*::, opts*/) {\n\tvar end = data.l + length;\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tvar relId = parse_XLNullableWideString(data);\n\tvar loc = parse_XLWideString(data);\n\tvar tooltip = parse_XLWideString(data);\n\tvar display = parse_XLWideString(data);\n\tdata.l = end;\n\tvar o = ({rfx:rfx, relId:relId, loc:loc, display:display}/*:any*/);\n\tif(tooltip) o.Tooltip = tooltip;\n\treturn o;\n}\nfunction write_BrtHLink(l, rId) {\n\tvar o = new_buf(50+4*(l[1].Target.length + (l[1].Tooltip || \"\").length));\n\twrite_UncheckedRfX({s:decode_cell(l[0]), e:decode_cell(l[0])}, o);\n\twrite_RelID(\"rId\" + rId, o);\n\tvar locidx = l[1].Target.indexOf(\"#\");\n\tvar loc = locidx == -1 ? \"\" : l[1].Target.slice(locidx+1);\n\twrite_XLWideString(loc || \"\", o);\n\twrite_XLWideString(l[1].Tooltip || \"\", o);\n\twrite_XLWideString(\"\", o);\n\treturn o.slice(0, o.l);\n}\n\n/* [MS-XLSB] 2.4.692 BrtPane */\nfunction parse_BrtPane(/*data, length, opts*/) {\n}\n\n/* [MS-XLSB] 2.4.6 BrtArrFmla */\nfunction parse_BrtArrFmla(data, length, opts) {\n\tvar end = data.l + length;\n\tvar rfx = parse_RfX(data, 16);\n\tvar fAlwaysCalc = data.read_shift(1);\n\tvar o = [rfx]; o[2] = fAlwaysCalc;\n\tif(opts.cellFormula) {\n\t\tvar formula = parse_XLSBArrayParsedFormula(data, end - data.l, opts);\n\t\to[1] = formula;\n\t} else data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.750 BrtShrFmla */\nfunction parse_BrtShrFmla(data, length, opts) {\n\tvar end = data.l + length;\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tvar o = [rfx];\n\tif(opts.cellFormula) {\n\t\tvar formula = parse_XLSBSharedParsedFormula(data, end - data.l, opts);\n\t\to[1] = formula;\n\t\tdata.l = end;\n\t} else data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.323 BrtColInfo */\n/* TODO: once XLS ColInfo is set, combine the functions */\nfunction write_BrtColInfo(C/*:number*/, col, o) {\n\tif(o == null) o = new_buf(18);\n\tvar p = col_obj_w(C, col);\n\to.write_shift(-4, C);\n\to.write_shift(-4, C);\n\to.write_shift(4, (p.width || 10) * 256);\n\to.write_shift(4, 0/*ixfe*/); // style\n\tvar flags = 0;\n\tif(col.hidden) flags |= 0x01;\n\tif(typeof p.width == 'number') flags |= 0x02;\n\tif(col.level) flags |= (col.level << 8);\n\to.write_shift(2, flags); // bit flag\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.678 BrtMargins */\nvar BrtMarginKeys = [\"left\",\"right\",\"top\",\"bottom\",\"header\",\"footer\"];\nfunction parse_BrtMargins(data/*::, length, opts*/)/*:Margins*/ {\n\tvar margins = ({}/*:any*/);\n\tBrtMarginKeys.forEach(function(k) { margins[k] = parse_Xnum(data, 8); });\n\treturn margins;\n}\nfunction write_BrtMargins(margins/*:Margins*/, o) {\n\tif(o == null) o = new_buf(6*8);\n\tdefault_margins(margins);\n\tBrtMarginKeys.forEach(function(k) { write_Xnum((margins/*:any*/)[k], o); });\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.299 BrtBeginWsView */\nfunction parse_BrtBeginWsView(data/*::, length, opts*/) {\n\tvar f = data.read_shift(2);\n\tdata.l += 28;\n\treturn { RTL: f & 0x20 };\n}\nfunction write_BrtBeginWsView(ws, Workbook, o) {\n\tif(o == null) o = new_buf(30);\n\tvar f = 0x39c;\n\tif((((Workbook||{}).Views||[])[0]||{}).RTL) f |= 0x20;\n\to.write_shift(2, f); // bit flag\n\to.write_shift(4, 0);\n\to.write_shift(4, 0); // view first row\n\to.write_shift(4, 0); // view first col\n\to.write_shift(1, 0); // gridline color ICV\n\to.write_shift(1, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 100); // zoom scale\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(4, 0); // workbook view id\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.309 BrtCellIgnoreEC */\nfunction write_BrtCellIgnoreEC(ref) {\n\tvar o = new_buf(24);\n\to.write_shift(4, 4);\n\to.write_shift(4, 1);\n\twrite_UncheckedRfX(ref, o);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.748 BrtSheetProtection */\nfunction write_BrtSheetProtection(sp, o) {\n\tif(o == null) o = new_buf(16*4+2);\n\to.write_shift(2, sp.password ? crypto_CreatePasswordVerifier_Method1(sp.password) : 0);\n\to.write_shift(4, 1); // this record should not be written if no protection\n\t[\n\t\t[\"objects\",             false], // fObjects\n\t\t[\"scenarios\",           false], // fScenarios\n\t\t[\"formatCells\",          true], // fFormatCells\n\t\t[\"formatColumns\",        true], // fFormatColumns\n\t\t[\"formatRows\",           true], // fFormatRows\n\t\t[\"insertColumns\",        true], // fInsertColumns\n\t\t[\"insertRows\",           true], // fInsertRows\n\t\t[\"insertHyperlinks\",     true], // fInsertHyperlinks\n\t\t[\"deleteColumns\",        true], // fDeleteColumns\n\t\t[\"deleteRows\",           true], // fDeleteRows\n\t\t[\"selectLockedCells\",   false], // fSelLockedCells\n\t\t[\"sort\",                 true], // fSort\n\t\t[\"autoFilter\",           true], // fAutoFilter\n\t\t[\"pivotTables\",          true], // fPivotTables\n\t\t[\"selectUnlockedCells\", false]  // fSelUnlockedCells\n\t].forEach(function(n) {\n\t\t/*:: if(o == null) throw \"unreachable\"; */\n\t\tif(n[1]) o.write_shift(4, sp[n[0]] != null && !sp[n[0]] ? 1 : 0);\n\t\telse      o.write_shift(4, sp[n[0]] != null && sp[n[0]] ? 0 : 1);\n\t});\n\treturn o;\n}\n\nfunction parse_BrtDVal(/*data, length, opts*/) {\n}\nfunction parse_BrtDVal14(/*data, length, opts*/) {\n}\n/* [MS-XLSB] 2.1.7.61 Worksheet */\nfunction parse_ws_bin(data, _opts, idx, rels, wb/*:WBWBProps*/, themes, styles)/*:Worksheet*/ {\n\tif(!data) return data;\n\tvar opts = _opts || {};\n\tif(!rels) rels = {'!id':{}};\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\tvar s/*:Worksheet*/ = ({}); if(opts.dense) s[\"!data\"] = [];\n\n\tvar ref;\n\tvar refguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\n\tvar state/*:Array<string>*/ = [];\n\tvar pass = false, end = false;\n\tvar row, p, cf, R, C, addr, sstr, rr, cell/*:Cell*/;\n\tvar merges/*:Array<Range>*/ = [];\n\topts.biff = 12;\n\topts['!row'] = 0;\n\n\tvar ai = 0, af = false;\n\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar sharedf = {};\n\tvar supbooks = opts.supbooks || /*::(*/wb/*:: :any)*/.supbooks || ([[]]/*:any*/);\n\tsupbooks.sharedf = sharedf;\n\tsupbooks.arrayf = arrayf;\n\tsupbooks.SheetNames = wb.SheetNames || wb.Sheets.map(function(x) { return x.name; });\n\tif(!opts.supbooks) {\n\t\topts.supbooks = supbooks;\n\t\tif(wb.Names) for(var i = 0; i < wb.Names.length; ++i) supbooks[0][i+1] = wb.Names[i];\n\t}\n\n\tvar colinfo/*:Array<ColInfo>*/ = [], rowinfo/*:Array<RowInfo>*/ = [];\n\tvar seencol = false;\n\n\tXLSBRecordEnum[0x0010] = { n:\"BrtShortReal\", f:parse_BrtShortReal };\n\n\tvar cm, vm;\n\tvar date1904 = 1462 * +!!((wb||{}).WBProps||{}).date1904;\n\n\trecordhopper(data, function ws_parse(val, RR, RT) {\n\t\tif(end) return;\n\t\tswitch(RT) {\n\t\t\tcase 0x0094: /* 'BrtWsDim' */\n\t\t\t\tref = val; break;\n\t\t\tcase 0x0000: /* 'BrtRowHdr' */\n\t\t\t\trow = val;\n\t\t\t\tif(opts.sheetRows && opts.sheetRows <= row.r) end=true;\n\t\t\t\trr = encode_row(R = row.r);\n\t\t\t\topts['!row'] = row.r;\n\t\t\t\tif(val.hidden || val.hpt || val.level != null) {\n\t\t\t\t\tif(val.hpt) val.hpx = pt2px(val.hpt);\n\t\t\t\t\trowinfo[val.r] = val;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0002: /* 'BrtCellRk' */\n\t\t\tcase 0x0003: /* 'BrtCellError' */\n\t\t\tcase 0x0004: /* 'BrtCellBool' */\n\t\t\tcase 0x0005: /* 'BrtCellReal' */\n\t\t\tcase 0x0006: /* 'BrtCellSt' */\n\t\t\tcase 0x0007: /* 'BrtCellIsst' */\n\t\t\tcase 0x0008: /* 'BrtFmlaString' */\n\t\t\tcase 0x0009: /* 'BrtFmlaNum' */\n\t\t\tcase 0x000A: /* 'BrtFmlaBool' */\n\t\t\tcase 0x000B: /* 'BrtFmlaError' */\n\t\t\tcase 0x000D: /* 'BrtShortRk' */\n\t\t\tcase 0x000E: /* 'BrtShortError' */\n\t\t\tcase 0x000F: /* 'BrtShortBool' */\n\t\t\tcase 0x0010: /* 'BrtShortReal' */\n\t\t\tcase 0x0011: /* 'BrtShortSt' */\n\t\t\tcase 0x0012: /* 'BrtShortIsst' */\n\t\t\tcase 0x003E: /* 'BrtCellRString' */\n\t\t\t\tp = ({t:val[2]}/*:any*/);\n\t\t\t\tswitch(val[2]) {\n\t\t\t\t\tcase 'n': p.v = val[1]; break;\n\t\t\t\t\tcase 's': sstr = strs[val[1]]; p.v = sstr.t; p.r = sstr.r; break;\n\t\t\t\t\tcase 'b': p.v = val[1] ? true : false; break;\n\t\t\t\t\tcase 'e': p.v = val[1]; if(opts.cellText !== false) p.w = BErr[p.v]; break;\n\t\t\t\t\tcase 'str': p.t = 's'; p.v = val[1]; break;\n\t\t\t\t\tcase 'is': p.t = 's'; p.v = val[1].t; break;\n\t\t\t\t}\n\t\t\t\tif((cf = styles.CellXf[val[0].iStyleRef])) safe_format(p,cf.numFmtId,null,opts, themes, styles, date1904>0);\n\t\t\t\tC = val[0].c == -1 ? C + 1 : val[0].c;\n\t\t\t\tif(opts.dense) { if(!s[\"!data\"][R]) s[\"!data\"][R] = []; s[\"!data\"][R][C] = p; }\n\t\t\t\telse s[encode_col(C) + rr] = p;\n\t\t\t\tif(opts.cellFormula) {\n\t\t\t\t\taf = false;\n\t\t\t\t\tfor(ai = 0; ai < arrayf.length; ++ai) {\n\t\t\t\t\t\tvar aii = arrayf[ai];\n\t\t\t\t\t\tif(row.r >= aii[0].s.r && row.r <= aii[0].e.r)\n\t\t\t\t\t\t\tif(C >= aii[0].s.c && C <= aii[0].e.c) {\n\t\t\t\t\t\t\t\tp.F = encode_range(aii[0]); af = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(!af && val.length > 3) p.f = val[3];\n\t\t\t\t}\n\n\t\t\t\tif(refguess.s.r > row.r) refguess.s.r = row.r;\n\t\t\t\tif(refguess.s.c > C) refguess.s.c = C;\n\t\t\t\tif(refguess.e.r < row.r) refguess.e.r = row.r;\n\t\t\t\tif(refguess.e.c < C) refguess.e.c = C;\n\t\t\t\tif(opts.cellDates && cf && p.t == 'n' && fmt_is_date(table_fmt[cf.numFmtId])) {\n\t\t\t\t\tvar _d = SSF_parse_date_code(p.v + date1904); if(_d) { p.t = 'd'; p.v = new Date(Date.UTC(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u)); }\n\t\t\t\t}\n\t\t\t\tif(cm) {\n\t\t\t\t\tif(cm.type == 'XLDAPR') p.D = true;\n\t\t\t\t\tcm = void 0;\n\t\t\t\t}\n\t\t\t\tif(vm) vm = void 0;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0001: /* 'BrtCellBlank' */\n\t\t\tcase 0x000C: /* 'BrtShortBlank' */\n\t\t\t\tif(!opts.sheetStubs || pass) break;\n\t\t\t\tp = ({t:'z',v:void 0}/*:any*/);\n\t\t\t\tC = val[0].c == -1 ? C + 1 : val[0].c;\n\t\t\t\tif(opts.dense) { if(!s[\"!data\"][R]) s[\"!data\"][R] = []; s[\"!data\"][R][C] = p; }\n\t\t\t\telse s[encode_col(C) + rr] = p;\n\t\t\t\tif(refguess.s.r > row.r) refguess.s.r = row.r;\n\t\t\t\tif(refguess.s.c > C) refguess.s.c = C;\n\t\t\t\tif(refguess.e.r < row.r) refguess.e.r = row.r;\n\t\t\t\tif(refguess.e.c < C) refguess.e.c = C;\n\t\t\t\tif(cm) {\n\t\t\t\t\tif(cm.type == 'XLDAPR') p.D = true;\n\t\t\t\t\tcm = void 0;\n\t\t\t\t}\n\t\t\t\tif(vm) vm = void 0;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x00B0: /* 'BrtMergeCell' */\n\t\t\t\tmerges.push(val); break;\n\n\t\t\tcase 0x0031: { /* 'BrtCellMeta' */\n\t\t\t\tcm = ((opts.xlmeta||{}).Cell||[])[val-1];\n\t\t\t} break;\n\n\t\t\tcase 0x01EE: /* 'BrtHLink' */\n\t\t\t\tvar rel = rels['!id'][val.relId];\n\t\t\t\tif(rel) {\n\t\t\t\t\tval.Target = rel.Target;\n\t\t\t\t\tif(val.loc) val.Target += \"#\"+val.loc;\n\t\t\t\t\tval.Rel = rel;\n\t\t\t\t} else if(val.relId == '') {\n\t\t\t\t\tval.Target = \"#\" + val.loc;\n\t\t\t\t}\n\t\t\t\tfor(R=val.rfx.s.r;R<=val.rfx.e.r;++R) for(C=val.rfx.s.c;C<=val.rfx.e.c;++C) {\n\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\tif(!s[\"!data\"][R]) s[\"!data\"][R] = [];\n\t\t\t\t\t\tif(!s[\"!data\"][R][C]) s[\"!data\"][R][C] = {t:'z',v:undefined};\n\t\t\t\t\t\ts[\"!data\"][R][C].l = val;\n\t\t\t\t\t} else {\n\t\t\t\t\t\taddr = encode_col(C) + encode_row(R);\n\t\t\t\t\t\tif(!s[addr]) s[addr] = {t:'z',v:undefined};\n\t\t\t\t\t\ts[addr].l = val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01AA: /* 'BrtArrFmla' */\n\t\t\t\tif(!opts.cellFormula) break;\n\t\t\t\tarrayf.push(val);\n\t\t\t\tcell = ((opts.dense ? s[\"!data\"][R][C] : s[encode_col(C) + rr])/*:any*/);\n\t\t\t\tcell.f = stringify_formula(val[1], refguess, {r:row.r, c:C}, supbooks, opts);\n\t\t\t\tcell.F = encode_range(val[0]);\n\t\t\t\tbreak;\n\t\t\tcase 0x01AB: /* 'BrtShrFmla' */\n\t\t\t\tif(!opts.cellFormula) break;\n\t\t\t\tsharedf[encode_cell(val[0].s)] = val[1];\n\t\t\t\tcell = (opts.dense ? s[\"!data\"][R][C] : s[encode_col(C) + rr]);\n\t\t\t\tcell.f = stringify_formula(val[1], refguess, {r:row.r, c:C}, supbooks, opts);\n\t\t\t\tbreak;\n\n\t\t\t/* identical to 'ColInfo' in XLS */\n\t\t\tcase 0x003C: /* 'BrtColInfo' */\n\t\t\t\tif(!opts.cellStyles) break;\n\t\t\t\twhile(val.e >= val.s) {\n\t\t\t\t\tcolinfo[val.e--] = { width: val.w/256, hidden: !!(val.flags & 0x01), level: val.level };\n\t\t\t\t\tif(!seencol) { seencol = true; find_mdw_colw(val.w/256); }\n\t\t\t\t\tprocess_col(colinfo[val.e+1]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0227: /* 'BrtLegacyDrawing' */\n\t\t\t\tif(val) s[\"!legrel\"] = val;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x00A1: /* 'BrtBeginAFilter' */\n\t\t\t\ts['!autofilter'] = { ref:encode_range(val) };\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01DC: /* 'BrtMargins' */\n\t\t\t\ts['!margins'] = val;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0093: /* 'BrtWsProp' */\n\t\t\t\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\t\t\t\tif(val.name) wb.Sheets[idx].CodeName = val.name;\n\t\t\t\tif(val.above || val.left) s['!outline'] = { above: val.above, left: val.left };\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0089: /* 'BrtBeginWsView' */\n\t\t\t\tif(!wb.Views) wb.Views = [{}];\n\t\t\t\tif(!wb.Views[0]) wb.Views[0] = {};\n\t\t\t\tif(val.RTL) wb.Views[0].RTL = true;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01E5: /* 'BrtWsFmtInfo' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0040: /* 'BrtDVal' */\n\t\t\tcase 0x041D: /* 'BrtDVal14' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0097: /* 'BrtPane' */\n\t\t\t\tbreak;\n\t\t\tcase 0x0098: /* 'BrtSel' */\n\t\t\tcase 0x00AF: /* 'BrtAFilterDateGroupItem' */\n\t\t\tcase 0x0284: /* 'BrtActiveX' */\n\t\t\tcase 0x0271: /* 'BrtBigName' */\n\t\t\tcase 0x0232: /* 'BrtBkHim' */\n\t\t\tcase 0x018C: /* 'BrtBrk' */\n\t\t\tcase 0x0458: /* 'BrtCFIcon' */\n\t\t\tcase 0x047A: /* 'BrtCFRuleExt' */\n\t\t\tcase 0x01D7: /* 'BrtCFVO' */\n\t\t\tcase 0x041A: /* 'BrtCFVO14' */\n\t\t\tcase 0x0289: /* 'BrtCellIgnoreEC' */\n\t\t\tcase 0x0451: /* 'BrtCellIgnoreEC14' */\n\t\t\tcase 0x024D: /* 'BrtCellSmartTagProperty' */\n\t\t\tcase 0x025F: /* 'BrtCellWatch' */\n\t\t\tcase 0x0234: /* 'BrtColor' */\n\t\t\tcase 0x041F: /* 'BrtColor14' */\n\t\t\tcase 0x00A8: /* 'BrtColorFilter' */\n\t\t\tcase 0x00AE: /* 'BrtCustomFilter' */\n\t\t\tcase 0x049C: /* 'BrtCustomFilter14' */\n\t\t\tcase 0x01F3: /* 'BrtDRef' */\n\t\t\tcase 0x01FB: /* 'BrtDXF' */\n\t\t\tcase 0x0226: /* 'BrtDrawing' */\n\t\t\tcase 0x00AB: /* 'BrtDynamicFilter' */\n\t\t\tcase 0x00A7: /* 'BrtFilter' */\n\t\t\tcase 0x0499: /* 'BrtFilter14' */\n\t\t\tcase 0x00A9: /* 'BrtIconFilter' */\n\t\t\tcase 0x049D: /* 'BrtIconFilter14' */\n\t\t\tcase 0x0228: /* 'BrtLegacyDrawingHF' */\n\t\t\tcase 0x0295: /* 'BrtListPart' */\n\t\t\tcase 0x027F: /* 'BrtOleObject' */\n\t\t\tcase 0x01DE: /* 'BrtPageSetup' */\n\t\t\tcase 0x0219: /* 'BrtPhoneticInfo' */\n\t\t\tcase 0x01DD: /* 'BrtPrintOptions' */\n\t\t\tcase 0x0218: /* 'BrtRangeProtection' */\n\t\t\tcase 0x044F: /* 'BrtRangeProtection14' */\n\t\t\tcase 0x02A8: /* 'BrtRangeProtectionIso' */\n\t\t\tcase 0x0450: /* 'BrtRangeProtectionIso14' */\n\t\t\tcase 0x0400: /* 'BrtRwDescent' */\n\t\t\tcase 0x0297: /* 'BrtSheetCalcProp' */\n\t\t\tcase 0x0217: /* 'BrtSheetProtection' */\n\t\t\tcase 0x02A6: /* 'BrtSheetProtectionIso' */\n\t\t\tcase 0x01F8: /* 'BrtSlc' */\n\t\t\tcase 0x0413: /* 'BrtSparkline' */\n\t\t\tcase 0x01AC: /* 'BrtTable' */\n\t\t\tcase 0x00AA: /* 'BrtTop10Filter' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\tcase 0x0032: /* 'BrtValueMeta' */\n\t\t\tcase 0x0816: /* 'BrtWebExtension' */\n\t\t\tcase 0x0415: /* 'BrtWsFmtInfoEx14' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(RT); pass = true; break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif(RR.T){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t}, opts);\n\n\tdelete opts.supbooks;\n\tdelete opts['!row'];\n\n\tif(!s[\"!ref\"] && (refguess.s.r < 2000000 || ref && (ref.e.r > 0 || ref.e.c > 0 || ref.s.r > 0 || ref.s.c > 0))) s[\"!ref\"] = encode_range(ref || refguess);\n\tif(opts.sheetRows && s[\"!ref\"]) {\n\t\tvar tmpref = safe_decode_range(s[\"!ref\"]);\n\t\tif(opts.sheetRows <= +tmpref.e.r) {\n\t\t\ttmpref.e.r = opts.sheetRows - 1;\n\t\t\tif(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\n\t\t\tif(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\n\t\t\tif(tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\n\t\t\tif(tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\n\t\t\ts[\"!fullref\"] = s[\"!ref\"];\n\t\t\ts[\"!ref\"] = encode_range(tmpref);\n\t\t}\n\t}\n\tif(merges.length > 0) s[\"!merges\"] = merges;\n\tif(colinfo.length > 0) s[\"!cols\"] = colinfo;\n\tif(rowinfo.length > 0) s[\"!rows\"] = rowinfo;\n\tif(rels['!id'][s['!legrel']]) s['!legdrawel'] = rels['!id'][s['!legrel']];\n\treturn s;\n}\n\n/* TODO: something useful -- this is a stub */\nfunction write_ws_bin_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/, C/*:number*/, opts, ws/*:Worksheet*/, last_seen/*:boolean*/, date1904/*:boolean*/)/*:boolean*/ {\n\tvar o/*:any*/ = ({r:R, c:C}/*:any*/);\n\tif(cell.c) ws['!comments'].push([encode_cell(o), cell.c]);\n\tif(cell.v === undefined) return false;\n\tvar vv = \"\";\n\tswitch(cell.t) {\n\t\tcase 'b': vv = cell.v ? \"1\" : \"0\"; break;\n\t\tcase 'd': // no BrtCellDate :(\n\t\t\tcell = dup(cell);\n\t\t\tcell.z = cell.z || table_fmt[14];\n\t\t\tcell.v = datenum(parseDate(cell.v, date1904), date1904); cell.t = 'n';\n\t\t\tbreak;\n\t\t/* falls through */\n\t\tcase 'n': case 'e': vv = ''+cell.v; break;\n\t\tdefault: vv = cell.v; break;\n\t}\n\t/* TODO: cell style */\n\to.s = get_cell_style(opts.cellXfs, cell, opts);\n\tif(cell.l) ws['!links'].push([encode_cell(o), cell.l]);\n\tswitch(cell.t) {\n\t\tcase 's': case 'str':\n\t\t\tif(opts.bookSST) {\n\t\t\t\tvv = get_sst_id(opts.Strings, (cell.v == null ? \"\" : String(cell.v)/*:any*/), opts.revStrings);\n\t\t\t\to.t = \"s\"; o.v = vv;\n\t\t\t\tif(last_seen) write_record(ba, 0x0012 /* BrtShortIsst */, write_BrtShortIsst(cell, o));\n\t\t\t\telse write_record(ba, 0x0007 /* BrtCellIsst */, write_BrtCellIsst(cell, o));\n\t\t\t} else {\n\t\t\t\to.t = \"str\";\n\t\t\t\tif(last_seen) write_record(ba, 0x0011 /* BrtShortSt */, write_BrtShortSt(cell, o));\n\t\t\t\telse write_record(ba, 0x0006 /* BrtCellSt */, write_BrtCellSt(cell, o));\n\t\t\t}\n\t\t\treturn true;\n\t\tcase 'n':\n\t\t\t/* TODO: determine threshold for Real vs RK */\n\t\t\tif(cell.v == (cell.v | 0) && cell.v > -1000 && cell.v < 1000) {\n\t\t\t\tif(last_seen) write_record(ba, 0x000D /* BrtShortRk */, write_BrtShortRk(cell, o));\n\t\t\t\telse write_record(ba, 0x0002 /* BrtCellRk */, write_BrtCellRk(cell, o));\n\t\t\t} else if(isNaN(cell.v)) {\n\t\t\t\tif(last_seen) write_record(ba, 0x000E /* BrtShortError */, write_BrtShortError({t:\"e\", v: 0x24}, o)); // #NUM!\n\t\t\t\telse write_record(ba, 0x0003 /* BrtCellError */, write_BrtCellError({t:\"e\", v: 0x24}, o)); // #NUM!\n\t\t\t} else if(!isFinite(cell.v)) {\n\t\t\t\tif(last_seen) write_record(ba, 0x000E /* BrtShortError */, write_BrtShortError({t:\"e\", v: 0x07}, o)); // #DIV/0!\n\t\t\t\telse write_record(ba, 0x0003 /* BrtCellError */, write_BrtCellError({t:\"e\", v: 0x07}, o)); // #DIV/0!\n\t\t\t} else {\n\t\t\t\tif(last_seen) write_record(ba, 0x0010 /* BrtShortReal */, write_BrtShortReal(cell, o));\n\t\t\t\telse write_record(ba, 0x0005 /* BrtCellReal */, write_BrtCellReal(cell, o));\n\t\t\t} return true;\n\t\tcase 'b':\n\t\t\to.t = \"b\";\n\t\t\tif(last_seen) write_record(ba, 0x000F /* BrtShortBool */, write_BrtShortBool(cell, o));\n\t\t\telse write_record(ba, 0x0004 /* BrtCellBool */, write_BrtCellBool(cell, o));\n\t\t\treturn true;\n\t\tcase 'e':\n\t\t\to.t = \"e\";\n\t\t\tif(last_seen) write_record(ba, 0x000E /* BrtShortError */, write_BrtShortError(cell, o));\n\t\t\telse write_record(ba, 0x0003 /* BrtCellError */, write_BrtCellError(cell, o));\n\t\t\treturn true;\n\t}\n\tif(last_seen) write_record(ba, 0x000C /* BrtShortBlank */, write_BrtShortBlank(cell, o));\n\telse write_record(ba, 0x0001 /* BrtCellBlank */, write_BrtCellBlank(cell, o));\n\treturn true;\n}\n\nfunction write_CELLTABLE(ba, ws/*:Worksheet*/, idx/*:number*/, opts, wb/*:Workbook*/) {\n\tvar range = safe_decode_range(ws['!ref'] || \"A1\"), ref, rr = \"\", cols/*:Array<string>*/ = [];\n\tvar date1904 = (((wb||{}).Workbook||{}).WBProps||{}).date1904;\n\twrite_record(ba, 0x0091 /* BrtBeginSheetData */);\n\tvar dense = ws[\"!data\"] != null;\n\tvar cap = range.e.r;\n\tif(ws['!rows']) cap = Math.max(range.e.r, ws['!rows'].length - 1);\n\tfor(var R = range.s.r; R <= cap; ++R) {\n\t\trr = encode_row(R);\n\t\t/* [ACCELLTABLE] */\n\t\t/* BrtRowHdr */\n\t\twrite_row_header(ba, ws, range, R);\n\t\tvar last_seen = false;\n\t\tif(R <= range.e.r) for(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\t/* *16384CELL */\n\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\tref = cols[C] + rr;\n\t\t\tvar cell = dense ? (ws[\"!data\"][R]||[])[C] : ws[ref];\n\t\t\tif(!cell) { last_seen = false; continue; }\n\t\t\t/* write cell */\n\t\t\tlast_seen = write_ws_bin_cell(ba, cell, R, C, opts, ws, last_seen, date1904);\n\t\t}\n\t}\n\twrite_record(ba, 0x0092 /* BrtEndSheetData */);\n}\n\nfunction write_MERGECELLS(ba, ws/*:Worksheet*/) {\n\tif(!ws || !ws['!merges']) return;\n\twrite_record(ba, 0x00B1 /* BrtBeginMergeCells */, write_BrtBeginMergeCells(ws['!merges'].length));\n\tws['!merges'].forEach(function(m) { write_record(ba, 0x00B0 /* BrtMergeCell */, write_BrtMergeCell(m)); });\n\twrite_record(ba, 0x00B2 /* BrtEndMergeCells */);\n}\n\nfunction write_COLINFOS(ba, ws/*:Worksheet*//*::, idx:number, opts, wb:Workbook*/) {\n\tif(!ws || !ws['!cols']) return;\n\twrite_record(ba, 0x0186 /* BrtBeginColInfos */);\n\tws['!cols'].forEach(function(m, i) { if(m) write_record(ba, 0x003C /* 'BrtColInfo' */, write_BrtColInfo(i, m)); });\n\twrite_record(ba, 0x0187 /* BrtEndColInfos */);\n}\n\nfunction write_IGNOREECS(ba, ws/*:Worksheet*/) {\n\tif(!ws || !ws['!ref']) return;\n\twrite_record(ba, 0x0288 /* BrtBeginCellIgnoreECs */);\n\twrite_record(ba, 0x0289 /* BrtCellIgnoreEC */, write_BrtCellIgnoreEC(safe_decode_range(ws['!ref'])));\n\twrite_record(ba, 0x028A /* BrtEndCellIgnoreECs */);\n}\n\nfunction write_HLINKS(ba, ws/*:Worksheet*/, rels) {\n\t/* *BrtHLink */\n\tws['!links'].forEach(function(l) {\n\t\tif(!l[1].Target) return;\n\t\tvar rId = add_rels(rels, -1, l[1].Target.replace(/#[\\s\\S]*$/, \"\"), RELS.HLINK);\n\t\twrite_record(ba, 0x01EE /* BrtHLink */, write_BrtHLink(l, rId));\n\t});\n\tdelete ws['!links'];\n}\nfunction write_LEGACYDRAWING(ba, ws/*:Worksheet*/, idx/*:number*/, rels) {\n\t/* [BrtLegacyDrawing] */\n\tif(ws['!comments'].length > 0) {\n\t\tvar rId = add_rels(rels, -1, \"../drawings/vmlDrawing\" + (idx+1) + \".vml\", RELS.VML);\n\t\twrite_record(ba, 0x0227 /* BrtLegacyDrawing */, write_RelID(\"rId\" + rId));\n\t\tws['!legacy'] = rId;\n\t}\n}\n\nfunction write_AUTOFILTER(ba, ws, wb, idx) {\n\tif(!ws['!autofilter']) return;\n\tvar data = ws['!autofilter'];\n\tvar ref = typeof data.ref === \"string\" ? data.ref : encode_range(data.ref);\n\n\t/* Update FilterDatabase defined name for the worksheet */\n\tif(!wb.Workbook) wb.Workbook = ({Sheets:[]}/*:any*/);\n\tif(!wb.Workbook.Names) wb.Workbook.Names = [];\n\tvar names/*: Array<any> */ = wb.Workbook.Names;\n\tvar range = decode_range(ref);\n\tif(range.s.r == range.e.r) { range.e.r = decode_range(ws[\"!ref\"]).e.r; ref = encode_range(range); }\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar name = names[i];\n\t\tif(name.Name != '_xlnm._FilterDatabase') continue;\n\t\tif(name.Sheet != idx) continue;\n\t\tname.Ref = formula_quote_sheet_name(wb.SheetNames[idx]) + \"!\" + fix_range(ref); break;\n\t}\n\tif(i == names.length) names.push({ Name: '_xlnm._FilterDatabase', Sheet: idx, Ref: formula_quote_sheet_name(wb.SheetNames[idx]) + \"!\" + fix_range(ref)  });\n\n\twrite_record(ba, 0x00A1 /* BrtBeginAFilter */, write_UncheckedRfX(safe_decode_range(ref)));\n\t/* *FILTERCOLUMN */\n\t/* [SORTSTATE] */\n\t/* BrtEndAFilter */\n\twrite_record(ba, 0x00A2 /* BrtEndAFilter */);\n}\n\nfunction write_WSVIEWS2(ba, ws, Workbook) {\n\twrite_record(ba, 0x0085 /* BrtBeginWsViews */);\n\t{ /* 1*WSVIEW2 */\n\t\t/* [ACUID] */\n\t\twrite_record(ba, 0x0089 /* BrtBeginWsView */, write_BrtBeginWsView(ws, Workbook));\n\t\t/* [BrtPane] */\n\t\t/* *4BrtSel */\n\t\t/* *4SXSELECT */\n\t\t/* *FRT */\n\t\twrite_record(ba, 0x008A /* BrtEndWsView */);\n\t}\n\t/* *FRT */\n\twrite_record(ba, 0x0086 /* BrtEndWsViews */);\n}\n\nfunction write_WSFMTINFO(/*::ba, ws*/) {\n\t/* [ACWSFMTINFO] */\n\t// write_record(ba, 0x01E5 /* BrtWsFmtInfo */, write_BrtWsFmtInfo(ws));\n}\n\nfunction write_SHEETPROTECT(ba, ws) {\n\tif(!ws['!protect']) return;\n\t/* [BrtSheetProtectionIso] */\n\twrite_record(ba, 0x0217 /* BrtSheetProtection */, write_BrtSheetProtection(ws['!protect']));\n}\n\nfunction write_ws_bin(idx/*:number*/, opts, wb/*:Workbook*/, rels) {\n\tvar ba = buf_array();\n\tvar s = wb.SheetNames[idx], ws = wb.Sheets[s] || {};\n\tvar c/*:string*/ = s; try { if(wb && wb.Workbook) c = wb.Workbook.Sheets[idx].CodeName || c; } catch(e) {}\n\tvar r = safe_decode_range(ws['!ref'] || \"A1\");\n\tif(r.e.c > 0x3FFF || r.e.r > 0xFFFFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:XFD1048576\");\n\t\tr.e.c = Math.min(r.e.c, 0x3FFF);\n\t\tr.e.r = Math.min(r.e.c, 0xFFFFF);\n\t}\n\tws['!links'] = [];\n\t/* passed back to write_zip and removed there */\n\tws['!comments'] = [];\n\twrite_record(ba, 0x0081 /* BrtBeginSheet */);\n\tif(wb.vbaraw || ws['!outline']) write_record(ba, 0x0093 /* BrtWsProp */, write_BrtWsProp(c, ws['!outline']));\n\twrite_record(ba, 0x0094 /* BrtWsDim */, write_BrtWsDim(r));\n\twrite_WSVIEWS2(ba, ws, wb.Workbook);\n\twrite_WSFMTINFO(ba, ws);\n\twrite_COLINFOS(ba, ws, idx, opts, wb);\n\twrite_CELLTABLE(ba, ws, idx, opts, wb);\n\t/* [BrtSheetCalcProp] */\n\twrite_SHEETPROTECT(ba, ws);\n\t/* *([BrtRangeProtectionIso] BrtRangeProtection) */\n\t/* [SCENMAN] */\n\twrite_AUTOFILTER(ba, ws, wb, idx);\n\t/* [SORTSTATE] */\n\t/* [DCON] */\n\t/* [USERSHVIEWS] */\n\twrite_MERGECELLS(ba, ws);\n\t/* [BrtPhoneticInfo] */\n\t/* *CONDITIONALFORMATTING */\n\t/* [DVALS] */\n\twrite_HLINKS(ba, ws, rels);\n\t/* [BrtPrintOptions] */\n\tif(ws['!margins']) write_record(ba, 0x01DC /* BrtMargins */, write_BrtMargins(ws['!margins']));\n\t/* [BrtPageSetup] */\n\t/* [HEADERFOOTER] */\n\t/* [RWBRK] */\n\t/* [COLBRK] */\n\t/* *BrtBigName */\n\t/* [CELLWATCHES] */\n\tif(!opts || opts.ignoreEC || (opts.ignoreEC == (void 0))) write_IGNOREECS(ba, ws);\n\t/* [SMARTTAGS] */\n\t/* [BrtDrawing] */\n\twrite_LEGACYDRAWING(ba, ws, idx, rels);\n\t/* [BrtLegacyDrawingHF] */\n\t/* [BrtBkHim] */\n\t/* [OLEOBJECTS] */\n\t/* [ACTIVEXCONTROLS] */\n\t/* [WEBPUBITEMS] */\n\t/* [LISTPARTS] */\n\t/* FRTWORKSHEET */\n\twrite_record(ba, 0x0082 /* BrtEndSheet */);\n\treturn ba.end();\n}\nfunction parse_Cache(data/*:string*/)/*:[Array<number|string>, string, ?string]*/ {\n\tvar col/*:Array<number|string>*/ = [];\n\tvar num = data.match(/^<c:numCache>/);\n\tvar f;\n\n\t/* 21.2.2.150 pt CT_NumVal */\n\t(data.match(/<c:pt idx=\"(\\d*)\"[^<>\\/]*><c:v>([^<])<\\/c:v><\\/c:pt>/mg)||[]).forEach(function(pt) {\n\t\tvar q = pt.match(/<c:pt idx=\"(\\d*)\"[^<>\\/]*><c:v>([^<]*)<\\/c:v><\\/c:pt>/);\n\t\tif(!q) return;\n\t\tcol[+q[1]] = num ? +q[2] : q[2];\n\t});\n\n\t/* 21.2.2.71 formatCode CT_Xstring */\n\tvar nf = unescapexml((str_match_xml(data, \"c:formatCode\") || [\"\",\"General\"])[1]);\n\n\t(str_match_ng(data, \"<c:f>\", \"</c:f>\")||[]).forEach(function(F) { f = F.replace(/<[^<>]*>/g,\"\"); });\n\n\treturn [col, nf, f];\n}\n\n/* 21.2 DrawingML - Charts */\nfunction parse_chart(data/*:?string*/, name/*:string*/, opts, rels, wb, csheet) {\n\tvar cs/*:Worksheet*/ = ((csheet || {\"!type\":\"chart\"})/*:any*/);\n\tif(!data) return csheet;\n\t/* 21.2.2.27 chart CT_Chart */\n\n\tvar C = 0, R = 0, col = \"A\";\n\tvar refguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\n\t/* 21.2.2.120 numCache CT_NumData */\n\t(str_match_ng(data, \"<c:numCache>\", \"</c:numCache>\")||[]).forEach(function(nc) {\n\t\tvar cache = parse_Cache(nc);\n\t\trefguess.s.r = refguess.s.c = 0;\n\t\trefguess.e.c = C;\n\t\tcol = encode_col(C);\n\t\tcache[0].forEach(function(n,i) {\n\t\t\tif(cs[\"!data\"]) {\n\t\t\t\tif(!cs[\"!data\"][i]) cs[\"!data\"][i] = [];\n\t\t\t\tcs[\"!data\"][i][C] = {t:'n', v:n, z:cache[1] };\n\t\t\t} else cs[col + encode_row(i)] = {t:'n', v:n, z:cache[1] };\n\t\t\tR = i;\n\t\t});\n\t\tif(refguess.e.r < R) refguess.e.r = R;\n\t\t++C;\n\t});\n\tif(C > 0) cs[\"!ref\"] = encode_range(refguess);\n\treturn cs;\n}\n/* 18.3 Worksheets also covers Chartsheets */\nfunction parse_cs_xml(data/*:?string*/, opts, idx/*:number*/, rels, wb/*::, themes, styles*/)/*:Worksheet*/ {\n\tif(!data) return data;\n\t/* 18.3.1.12 chartsheet CT_ChartSheet */\n\tif(!rels) rels = {'!id':{}};\n\tvar s = ({'!type':\"chart\", '!drawel':null, '!rel':\"\"}/*:any*/);\n\tvar m;\n\n\t/* 18.3.1.83 sheetPr CT_ChartsheetPr */\n\tvar sheetPr = data.match(sheetprregex);\n\tif(sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);\n\n\t/* 18.3.1.36 drawing CT_Drawing */\n\tif((m = data.match(/drawing r:id=\"(.*?)\"/))) s['!rel'] = m[1];\n\n\tif(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];\n\treturn s;\n}\n//function write_cs_xml(idx/*:number*/, opts, wb/*:Workbook*/, rels)/*:string*/ {\n//\tvar o = [XML_HEADER, writextag('chartsheet', null, {\n//\t\t'xmlns': XMLNS_main[0],\n//\t\t'xmlns:r': XMLNS.r\n//\t})];\n//\to[o.length] = writextag(\"drawing\", null, {\"r:id\": \"rId1\"});\n//\tadd_rels(rels, -1, \"../drawings/drawing\" + (idx+1) + \".xml\", RELS.DRAW);\n//\tif(o.length>2) { o[o.length] = ('</chartsheet>'); o[1]=o[1].replace(\"/>\",\">\"); }\n//\treturn o.join(\"\");\n//}\n\n/* [MS-XLSB] 2.4.331 BrtCsProp */\nfunction parse_BrtCsProp(data, length/*:number*/) {\n\tdata.l += 10;\n\tvar name = parse_XLWideString(data, length - 10);\n\treturn { name: name };\n}\n\n/* [MS-XLSB] 2.1.7.7 Chart Sheet */\nfunction parse_cs_bin(data, opts, idx/*:number*/, rels, wb/*::, themes, styles*/)/*:Worksheet*/ {\n\tif(!data) return data;\n\tif(!rels) rels = {'!id':{}};\n\tvar s = {'!type':\"chart\", '!drawel':null, '!rel':\"\"};\n\tvar state/*:Array<string>*/ = [];\n\tvar pass = false;\n\trecordhopper(data, function cs_parse(val, R, RT) {\n\t\tswitch(RT) {\n\n\t\t\tcase 0x0226: /* 'BrtDrawing' */\n\t\t\t\ts['!rel'] = val; break;\n\n\t\t\tcase 0x028B: /* 'BrtCsProp' */\n\t\t\t\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\t\t\t\tif(val.name) wb.Sheets[idx].CodeName = val.name;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0232: /* 'BrtBkHim' */\n\t\t\tcase 0x028C: /* 'BrtCsPageSetup' */\n\t\t\tcase 0x029D: /* 'BrtCsProtection' */\n\t\t\tcase 0x02A7: /* 'BrtCsProtectionIso' */\n\t\t\tcase 0x0227: /* 'BrtLegacyDrawing' */\n\t\t\tcase 0x0228: /* 'BrtLegacyDrawingHF' */\n\t\t\tcase 0x01DC: /* 'BrtMargins' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(RT); break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T > 0) state.push(RT);\n\t\t\t\telse if(R.T < 0) state.pop();\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t}, opts);\n\n\tif(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];\n\treturn s;\n}\n//function write_cs_bin(/*::idx:number, opts, wb:Workbook, rels*/) {\n//\tvar ba = buf_array();\n//\twrite_record(ba, 0x0081 /* BrtBeginSheet */);\n//\t/* [BrtCsProp] */\n//\t/* CSVIEWS */\n//\t/* [[BrtCsProtectionIso] BrtCsProtection] */\n//\t/* [USERCSVIEWS] */\n//\t/* [BrtMargins] */\n//\t/* [BrtCsPageSetup] */\n//\t/* [HEADERFOOTER] */\n//\t/* BrtDrawing */\n//\t/* [BrtLegacyDrawing] */\n//\t/* [BrtLegacyDrawingHF] */\n//\t/* [BrtBkHim] */\n//\t/* [WEBPUBITEMS] */\n//\t/* FRTCHARTSHEET */\n//\twrite_record(ba, 0x0082 /* BrtEndSheet */);\n//\treturn ba.end();\n//}\n/* 18.2.28 (CT_WorkbookProtection) Defaults */\nvar WBPropsDef = [\n\t['allowRefreshQuery',           false, \"bool\"],\n\t['autoCompressPictures',        true,  \"bool\"],\n\t['backupFile',                  false, \"bool\"],\n\t['checkCompatibility',          false, \"bool\"],\n\t['CodeName',                    ''],\n\t['date1904',                    false, \"bool\"],\n\t['defaultThemeVersion',         0,      \"int\"],\n\t['filterPrivacy',               false, \"bool\"],\n\t['hidePivotFieldList',          false, \"bool\"],\n\t['promptedSolutions',           false, \"bool\"],\n\t['publishItems',                false, \"bool\"],\n\t['refreshAllConnections',       false, \"bool\"],\n\t['saveExternalLinkValues',      true,  \"bool\"],\n\t['showBorderUnselectedTables',  true,  \"bool\"],\n\t['showInkAnnotation',           true,  \"bool\"],\n\t['showObjects',                 'all'],\n\t['showPivotChartFilter',        false, \"bool\"],\n\t['updateLinks', 'userSet']\n];\n\n/* 18.2.30 (CT_BookView) Defaults */\nvar WBViewDef = [\n\t['activeTab',                   0,      \"int\"],\n\t['autoFilterDateGrouping',      true,  \"bool\"],\n\t['firstSheet',                  0,      \"int\"],\n\t['minimized',                   false, \"bool\"],\n\t['showHorizontalScroll',        true,  \"bool\"],\n\t['showSheetTabs',               true,  \"bool\"],\n\t['showVerticalScroll',          true,  \"bool\"],\n\t['tabRatio',                    600,    \"int\"],\n\t['visibility',                  'visible']\n\t//window{Height,Width}, {x,y}Window\n];\n\n/* 18.2.19 (CT_Sheet) Defaults */\nvar SheetDef = [\n\t//['state', 'visible']\n];\n\n/* 18.2.2  (CT_CalcPr) Defaults */\nvar CalcPrDef = [\n\t['calcCompleted', 'true'],\n\t['calcMode', 'auto'],\n\t['calcOnSave', 'true'],\n\t['concurrentCalc', 'true'],\n\t['fullCalcOnLoad', 'false'],\n\t['fullPrecision', 'true'],\n\t['iterate', 'false'],\n\t['iterateCount', '100'],\n\t['iterateDelta', '0.001'],\n\t['refMode', 'A1']\n];\n\n/* 18.2.3 (CT_CustomWorkbookView) Defaults */\n/*var CustomWBViewDef = [\n\t['autoUpdate', 'false'],\n\t['changesSavedWin', 'false'],\n\t['includeHiddenRowCol', 'true'],\n\t['includePrintSettings', 'true'],\n\t['maximized', 'false'],\n\t['minimized', 'false'],\n\t['onlySync', 'false'],\n\t['personalView', 'false'],\n\t['showComments', 'commIndicator'],\n\t['showFormulaBar', 'true'],\n\t['showHorizontalScroll', 'true'],\n\t['showObjects', 'all'],\n\t['showSheetTabs', 'true'],\n\t['showStatusbar', 'true'],\n\t['showVerticalScroll', 'true'],\n\t['tabRatio', '600'],\n\t['xWindow', '0'],\n\t['yWindow', '0']\n];*/\n\nfunction push_defaults_array(target, defaults) {\n\tfor(var j = 0; j != target.length; ++j) { var w = target[j];\n\t\tfor(var i=0; i != defaults.length; ++i) { var z = defaults[i];\n\t\t\tif(w[z[0]] == null) w[z[0]] = z[1];\n\t\t\telse switch(z[2]) {\n\t\t\tcase \"bool\": if(typeof w[z[0]] == \"string\") w[z[0]] = parsexmlbool(w[z[0]]); break;\n\t\t\tcase \"int\": if(typeof w[z[0]] == \"string\") w[z[0]] = parseInt(w[z[0]], 10); break;\n\t\t\t}\n\t\t}\n\t}\n}\nfunction push_defaults(target, defaults) {\n\tfor(var i = 0; i != defaults.length; ++i) { var z = defaults[i];\n\t\tif(target[z[0]] == null) target[z[0]] = z[1];\n\t\telse switch(z[2]) {\n\t\t\tcase \"bool\": if(typeof target[z[0]] == \"string\") target[z[0]] = parsexmlbool(target[z[0]]); break;\n\t\t\tcase \"int\": if(typeof target[z[0]] == \"string\") target[z[0]] = parseInt(target[z[0]], 10); break;\n\t\t}\n\t}\n}\n\nfunction parse_wb_defaults(wb) {\n\tpush_defaults(wb.WBProps, WBPropsDef);\n\tpush_defaults(wb.CalcPr, CalcPrDef);\n\n\tpush_defaults_array(wb.WBView, WBViewDef);\n\tpush_defaults_array(wb.Sheets, SheetDef);\n\n\t_ssfopts.date1904 = parsexmlbool(wb.WBProps.date1904);\n}\n\nfunction safe1904(wb/*:Workbook*/)/*:string*/ {\n\t/* TODO: store date1904 somewhere else */\n\tif(!wb.Workbook) return \"false\";\n\tif(!wb.Workbook.WBProps) return \"false\";\n\treturn parsexmlbool(wb.Workbook.WBProps.date1904) ? \"true\" : \"false\";\n}\n\nvar badchars = /*#__PURE__*/\":][*?\\/\\\\\".split(\"\");\nfunction check_ws_name(n/*:string*/, safe/*:?boolean*/)/*:boolean*/ {\n\ttry {\n\t\tif(n == \"\") throw new Error(\"Sheet name cannot be blank\");\n\t\tif(n.length > 31) throw new Error(\"Sheet name cannot exceed 31 chars\");\n\t\tif(n.charCodeAt(0) == 0x27 || n.charCodeAt(n.length - 1) == 0x27) throw new Error(\"Sheet name cannot start or end with apostrophe (')\");\n\t\tif(n.toLowerCase() == \"history\") throw new Error(\"Sheet name cannot be 'History'\");\n\t\tbadchars.forEach(function(c) {\n\t\t\tif(n.indexOf(c) == -1) return;\n\t\t\tthrow new Error(\"Sheet name cannot contain : \\\\ / ? * [ ]\");\n\t\t});\n\t} catch(e) { if(safe) return false; throw e; }\n\treturn true;\n}\nfunction check_wb_names(N, S, codes) {\n\tN.forEach(function(n,i) {\n\t\tcheck_ws_name(n);\n\t\tfor(var j = 0; j < i; ++j) if(n == N[j]) throw new Error(\"Duplicate Sheet Name: \" + n);\n\t\tif(codes) {\n\t\t\tvar cn = (S && S[i] && S[i].CodeName) || n;\n\t\t\tif(cn.charCodeAt(0) == 95 && cn.length > 22) throw new Error(\"Bad Code Name: Worksheet\" + cn);\n\t\t}\n\t});\n}\nfunction check_wb(wb) {\n\tif(!wb || !wb.SheetNames || !wb.Sheets) throw new Error(\"Invalid Workbook\");\n\tif(!wb.SheetNames.length) throw new Error(\"Workbook is empty\");\n\tvar Sheets = (wb.Workbook && wb.Workbook.Sheets) || [];\n\tcheck_wb_names(wb.SheetNames, Sheets, !!wb.vbaraw);\n\tfor(var i = 0; i < wb.SheetNames.length; ++i) check_ws(wb.Sheets[wb.SheetNames[i]], wb.SheetNames[i], i);\n\twb.SheetNames.forEach(function(n, i) {\n\t\tvar ws = wb.Sheets[n];\n\t\tif(!ws || !ws[\"!autofilter\"]) return;\n\t\tvar DN;\n\t\tif(!wb.Workbook) wb.Workbook = {};\n\t\tif(!wb.Workbook.Names) wb.Workbook.Names = [];\n\t\twb.Workbook.Names.forEach(function(dn) { if(dn.Name == \"_xlnm._FilterDatabase\" && dn.Sheet == i) DN = dn; });\n\t\tvar nn = formula_quote_sheet_name(n) + \"!\" + fix_range(ws[\"!autofilter\"].ref);\n\t\tif(DN) DN.Ref = nn;\n\t\telse wb.Workbook.Names.push({Name: \"_xlnm._FilterDatabase\", Sheet: i, Ref: nn});\n\t});\n\t/* TODO: validate workbook */\n}\n/* 18.2 Workbook */\nvar wbnsregex = /<\\w+:workbook/;\nfunction parse_wb_xml(data, opts)/*:WorkbookFile*/ {\n\tif(!data) throw new Error(\"Could not find file\");\n\tvar wb = /*::(*/{ AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, Names:[], xmlns: \"\" }/*::)*/;\n\tvar pass = false, xmlns = \"xmlns\";\n\tvar dname = {}, dnstart = 0;\n\tdata.replace(tagregex, function xml_wb(x, idx) {\n\t\tvar y/*:any*/ = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '<?xml': break;\n\n\t\t\t/* 18.2.27 workbook CT_Workbook 1 */\n\t\t\tcase '<workbook':\n\t\t\t\tif(x.match(wbnsregex)) xmlns = \"xmlns\" + x.match(/<(\\w+):/)[1];\n\t\t\t\twb.xmlns = y[xmlns];\n\t\t\t\tbreak;\n\t\t\tcase '</workbook>': break;\n\n\t\t\t/* 18.2.13 fileVersion CT_FileVersion ? */\n\t\t\tcase '<fileVersion': delete y[0]; wb.AppVersion = y; break;\n\t\t\tcase '<fileVersion/>': case '</fileVersion>': break;\n\n\t\t\t/* 18.2.12 fileSharing CT_FileSharing ? */\n\t\t\tcase '<fileSharing':\n\t\t\t\tbreak;\n\t\t\tcase '<fileSharing/>': break;\n\n\t\t\t/* 18.2.28 workbookPr CT_WorkbookPr ? */\n\t\t\tcase '<workbookPr':\n\t\t\tcase '<workbookPr/>':\n\t\t\t\tWBPropsDef.forEach(function(w) {\n\t\t\t\t\tif(y[w[0]] == null) return;\n\t\t\t\t\tswitch(w[2]) {\n\t\t\t\t\t\tcase \"bool\": wb.WBProps[w[0]] = parsexmlbool(y[w[0]]); break;\n\t\t\t\t\t\tcase \"int\": wb.WBProps[w[0]] = parseInt(y[w[0]], 10); break;\n\t\t\t\t\t\tdefault: wb.WBProps[w[0]] = y[w[0]];\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif(y.codeName) wb.WBProps.CodeName = utf8read(y.codeName);\n\t\t\t\tbreak;\n\t\t\tcase '</workbookPr>': break;\n\n\t\t\t/* 18.2.29 workbookProtection CT_WorkbookProtection ? */\n\t\t\tcase '<workbookProtection':\n\t\t\t\tbreak;\n\t\t\tcase '<workbookProtection/>': break;\n\n\t\t\t/* 18.2.1  bookViews CT_BookViews ? */\n\t\t\tcase '<bookViews': case '<bookViews>': case '</bookViews>': break;\n\t\t\t/* 18.2.30   workbookView CT_BookView + */\n\t\t\tcase '<workbookView': case '<workbookView/>': delete y[0]; wb.WBView.push(y); break;\n\t\t\tcase '</workbookView>': break;\n\n\t\t\t/* 18.2.20 sheets CT_Sheets 1 */\n\t\t\tcase '<sheets': case '<sheets>': case '</sheets>': break; // aggregate sheet\n\t\t\t/* 18.2.19   sheet CT_Sheet + */\n\t\t\tcase '<sheet':\n\t\t\t\tswitch(y.state) {\n\t\t\t\t\tcase \"hidden\": y.Hidden = 1; break;\n\t\t\t\t\tcase \"veryHidden\": y.Hidden = 2; break;\n\t\t\t\t\tdefault: y.Hidden = 0;\n\t\t\t\t}\n\t\t\t\tdelete y.state;\n\t\t\t\ty.name = unescapexml(utf8read(y.name));\n\t\t\t\tdelete y[0]; wb.Sheets.push(y); break;\n\t\t\tcase '</sheet>': break;\n\n\t\t\t/* 18.2.15 functionGroups CT_FunctionGroups ? */\n\t\t\tcase '<functionGroups': case '<functionGroups/>': break;\n\t\t\t/* 18.2.14   functionGroup CT_FunctionGroup + */\n\t\t\tcase '<functionGroup': break;\n\n\t\t\t/* 18.2.9  externalReferences CT_ExternalReferences ? */\n\t\t\tcase '<externalReferences': case '</externalReferences>': case '<externalReferences>': break;\n\t\t\t/* 18.2.8    externalReference CT_ExternalReference + */\n\t\t\tcase '<externalReference': break;\n\n\t\t\t/* 18.2.6  definedNames CT_DefinedNames ? */\n\t\t\tcase '<definedNames/>': break;\n\t\t\tcase '<definedNames>': case '<definedNames': pass=true; break;\n\t\t\tcase '</definedNames>': pass=false; break;\n\t\t\t/* 18.2.5    definedName CT_DefinedName + */\n\t\t\tcase '<definedName': {\n\t\t\t\tdname = {};\n\t\t\t\tdname.Name = utf8read(y.name);\n\t\t\t\tif(y.comment) dname.Comment = y.comment;\n\t\t\t\tif(y.localSheetId) dname.Sheet = +y.localSheetId;\n\t\t\t\tif(parsexmlbool(y.hidden||\"0\")) dname.Hidden = true;\n\t\t\t\tdnstart = idx + x.length;\n\t\t\t}\tbreak;\n\t\t\tcase '</definedName>': {\n\t\t\t\tdname.Ref = unescapexml(utf8read(data.slice(dnstart, idx)));\n\t\t\t\twb.Names.push(dname);\n\t\t\t} break;\n\t\t\tcase '<definedName/>': break;\n\n\t\t\t/* 18.2.2  calcPr CT_CalcPr ? */\n\t\t\tcase '<calcPr': delete y[0]; wb.CalcPr = y; break;\n\t\t\tcase '<calcPr/>': delete y[0]; wb.CalcPr = y; break;\n\t\t\tcase '</calcPr>': break;\n\n\t\t\t/* 18.2.16 oleSize CT_OleSize ? (ref required) */\n\t\t\tcase '<oleSize': break;\n\n\t\t\t/* 18.2.4  customWorkbookViews CT_CustomWorkbookViews ? */\n\t\t\tcase '<customWorkbookViews>': case '</customWorkbookViews>': case '<customWorkbookViews': break;\n\t\t\t/* 18.2.3  customWorkbookView CT_CustomWorkbookView + */\n\t\t\tcase '<customWorkbookView': case '</customWorkbookView>': break;\n\n\t\t\t/* 18.2.18 pivotCaches CT_PivotCaches ? */\n\t\t\tcase '<pivotCaches>': case '</pivotCaches>': case '<pivotCaches': break;\n\t\t\t/* 18.2.17 pivotCache CT_PivotCache ? */\n\t\t\tcase '<pivotCache': break;\n\n\t\t\t/* 18.2.21 smartTagPr CT_SmartTagPr ? */\n\t\t\tcase '<smartTagPr': case '<smartTagPr/>': break;\n\n\t\t\t/* 18.2.23 smartTagTypes CT_SmartTagTypes ? */\n\t\t\tcase '<smartTagTypes': case '<smartTagTypes>': case '</smartTagTypes>': break;\n\t\t\t/* 18.2.22 smartTagType CT_SmartTagType ? */\n\t\t\tcase '<smartTagType': break;\n\n\t\t\t/* 18.2.24 webPublishing CT_WebPublishing ? */\n\t\t\tcase '<webPublishing': case '<webPublishing/>': break;\n\n\t\t\t/* 18.2.11 fileRecoveryPr CT_FileRecoveryPr ? */\n\t\t\tcase '<fileRecoveryPr': case '<fileRecoveryPr/>': break;\n\n\t\t\t/* 18.2.26 webPublishObjects CT_WebPublishObjects ? */\n\t\t\tcase '<webPublishObjects>': case '<webPublishObjects': case '</webPublishObjects>': break;\n\t\t\t/* 18.2.25 webPublishObject CT_WebPublishObject ? */\n\t\t\tcase '<webPublishObject': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '<extLst': case '<extLst>': case '</extLst>': case '<extLst/>': break;\n\t\t\t/* 18.2.7  ext CT_Extension + */\n\t\t\tcase '<ext': pass=true; break; //TODO: check with versions of excel\n\t\t\tcase '</ext>': pass=false; break;\n\n\t\t\t/* Others */\n\t\t\tcase '<ArchID': break;\n\t\t\tcase '<AlternateContent':\n\t\t\tcase '<AlternateContent>': pass=true; break;\n\t\t\tcase '</AlternateContent>': pass=false; break;\n\n\t\t\t/* TODO */\n\t\t\tcase '<revisionPtr': break;\n\n\t\t\tdefault: if(!pass && opts.WTF) throw new Error('unrecognized ' + y[0] + ' in workbook');\n\t\t}\n\t\treturn x;\n\t});\n\tif(XMLNS_main.indexOf(wb.xmlns) === -1) throw new Error(\"Unknown Namespace: \" + wb.xmlns);\n\n\tparse_wb_defaults(wb);\n\n\treturn wb;\n}\n\nfunction write_wb_xml(wb/*:Workbook*//*::, opts:?WriteOpts*/)/*:string*/ {\n\tvar o = [XML_HEADER];\n\to[o.length] = writextag('workbook', null, {\n\t\t'xmlns': XMLNS_main[0],\n\t\t//'xmlns:mx': XMLNS.mx,\n\t\t//'xmlns:s': XMLNS_main[0],\n\t\t'xmlns:r': XMLNS.r\n\t});\n\n\tvar write_names = (wb.Workbook && (wb.Workbook.Names||[]).length > 0);\n\n\t/* fileVersion */\n\t/* fileSharing */\n\n\tvar workbookPr/*:any*/ = ({codeName:\"ThisWorkbook\"}/*:any*/);\n\tif(wb.Workbook && wb.Workbook.WBProps) {\n\t\tWBPropsDef.forEach(function(x) {\n\t\t\t/*:: if(!wb.Workbook || !wb.Workbook.WBProps) throw \"unreachable\"; */\n\t\t\tif((wb.Workbook.WBProps[x[0]]/*:any*/) == null) return;\n\t\t\tif((wb.Workbook.WBProps[x[0]]/*:any*/) == x[1]) return;\n\t\t\tworkbookPr[x[0]] = (wb.Workbook.WBProps[x[0]]/*:any*/);\n\t\t});\n\t\t/*:: if(!wb.Workbook || !wb.Workbook.WBProps) throw \"unreachable\"; */\n\t\tif(wb.Workbook.WBProps.CodeName) { workbookPr.codeName = wb.Workbook.WBProps.CodeName; delete workbookPr.CodeName; }\n\t}\n\to[o.length] = (writextag('workbookPr', null, workbookPr));\n\n\t/* workbookProtection */\n\n\tvar sheets = wb.Workbook && wb.Workbook.Sheets || [];\n\tvar i = 0;\n\n\t/* bookViews only written if first worksheet is hidden */\n\tif(sheets && sheets[0] && !!sheets[0].Hidden) {\n\t\to[o.length] = \"<bookViews>\";\n\t\tfor(i = 0; i != wb.SheetNames.length; ++i) {\n\t\t\tif(!sheets[i]) break;\n\t\t\tif(!sheets[i].Hidden) break;\n\t\t}\n\t\tif(i == wb.SheetNames.length) i = 0;\n\t\to[o.length] = '<workbookView firstSheet=\"' + i + '\" activeTab=\"' + i + '\"/>';\n\t\to[o.length] = \"</bookViews>\";\n\t}\n\n\to[o.length] = \"<sheets>\";\n\tfor(i = 0; i != wb.SheetNames.length; ++i) {\n\t\tvar sht = ({name:escapexml(wb.SheetNames[i].slice(0,31))}/*:any*/);\n\t\tsht.sheetId = \"\"+(i+1);\n\t\tsht[\"r:id\"] = \"rId\"+(i+1);\n\t\tif(sheets[i]) switch(sheets[i].Hidden) {\n\t\t\tcase 1: sht.state = \"hidden\"; break;\n\t\t\tcase 2: sht.state = \"veryHidden\"; break;\n\t\t}\n\t\to[o.length] = (writextag('sheet',null,sht));\n\t}\n\to[o.length] = \"</sheets>\";\n\n\t/* functionGroups */\n\t/* externalReferences */\n\n\tif(write_names) {\n\t\to[o.length] = \"<definedNames>\";\n\t\tif(wb.Workbook && wb.Workbook.Names) wb.Workbook.Names.forEach(function(n) {\n\t\t\tvar d/*:any*/ = {name:n.Name};\n\t\t\tif(n.Comment) d.comment = n.Comment;\n\t\t\tif(n.Sheet != null) d.localSheetId = \"\"+n.Sheet;\n\t\t\tif(n.Hidden) d.hidden = \"1\";\n\t\t\tif(!n.Ref) return;\n\t\t\to[o.length] = writextag('definedName', escapexml(n.Ref), d);\n\t\t});\n\t\to[o.length] = \"</definedNames>\";\n\t}\n\n\t/* calcPr */\n\t/* oleSize */\n\t/* customWorkbookViews */\n\t/* pivotCaches */\n\t/* smartTagPr */\n\t/* smartTagTypes */\n\t/* webPublishing */\n\t/* fileRecoveryPr */\n\t/* webPublishObjects */\n\t/* extLst */\n\n\tif(o.length>2){ o[o.length] = '</workbook>'; o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.304 BrtBundleSh */\nfunction parse_BrtBundleSh(data, length/*:number*/) {\n\tvar z = {};\n\tz.Hidden = data.read_shift(4); //hsState ST_SheetState\n\tz.iTabID = data.read_shift(4);\n\tz.strRelID = parse_RelID(data,length-8);\n\tz.name = parse_XLWideString(data);\n\treturn z;\n}\nfunction write_BrtBundleSh(data, o) {\n\tif(!o) o = new_buf(127);\n\to.write_shift(4, data.Hidden);\n\to.write_shift(4, data.iTabID);\n\twrite_RelID(data.strRelID, o);\n\twrite_XLWideString(data.name.slice(0,31), o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.815 BrtWbProp */\nfunction parse_BrtWbProp(data, length)/*:WBProps*/ {\n\tvar o/*:WBProps*/ = ({}/*:any*/);\n\tvar flags = data.read_shift(4);\n\to.defaultThemeVersion = data.read_shift(4);\n\tvar strName = (length > 8) ? parse_XLWideString(data) : \"\";\n\tif(strName.length > 0) o.CodeName = strName;\n\to.autoCompressPictures = !!(flags & 0x10000);\n\to.backupFile = !!(flags & 0x40);\n\to.checkCompatibility = !!(flags & 0x1000);\n\to.date1904 = !!(flags & 0x01);\n\to.filterPrivacy = !!(flags & 0x08);\n\to.hidePivotFieldList = !!(flags & 0x400);\n\to.promptedSolutions = !!(flags & 0x10);\n\to.publishItems = !!(flags & 0x800);\n\to.refreshAllConnections = !!(flags & 0x40000);\n\to.saveExternalLinkValues = !!(flags & 0x80);\n\to.showBorderUnselectedTables = !!(flags & 0x04);\n\to.showInkAnnotation = !!(flags & 0x20);\n\to.showObjects = [\"all\", \"placeholders\", \"none\"][(flags >> 13) & 0x03];\n\to.showPivotChartFilter = !!(flags & 0x8000);\n\to.updateLinks = [\"userSet\", \"never\", \"always\"][(flags >> 8) & 0x03];\n\treturn o;\n}\nfunction write_BrtWbProp(data/*:?WBProps*/, o) {\n\tif(!o) o = new_buf(72);\n\tvar flags = 0;\n\tif(data) {\n\t\t/* TODO: mirror parse_BrtWbProp fields */\n\t\tif(data.date1904) flags |= 0x01;\n\t\tif(data.filterPrivacy) flags |= 0x08;\n\t}\n\to.write_shift(4, flags);\n\to.write_shift(4, 0);\n\twrite_XLSBCodeName(data && data.CodeName || \"ThisWorkbook\", o);\n\treturn o.slice(0, o.l);\n}\n\nfunction parse_BrtFRTArchID$(data, length) {\n\tvar o = {};\n\tdata.read_shift(4);\n\to.ArchID = data.read_shift(4);\n\tdata.l += length - 8;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.687 BrtName */\nfunction parse_BrtName(data, length, opts) {\n\tvar end = data.l + length;\n\tvar flags = data.read_shift(4);\n\tdata.l += 1; //var chKey = data.read_shift(1);\n\tvar itab = data.read_shift(4);\n\tvar name = parse_XLNameWideString(data);\n\tvar formula;\n\tvar comment = \"\";\n\ttry {\n\t\tformula = parse_XLSBNameParsedFormula(data, 0, opts);\n\t\ttry {\n\t\t\tcomment = parse_XLNullableWideString(data);\n\t\t} catch(e){}\n\t} catch(e) { console.error(\"Could not parse defined name \" + name); }\n\tif(flags & 0x20) name = \"_xlnm.\" + name;\n\t//if(0 /* fProc */) {\n\t\t// unusedstring1: XLNullableWideString\n\t\t// description: XLNullableWideString\n\t\t// helpTopic: XLNullableWideString\n\t\t// unusedstring2: XLNullableWideString\n\t//}\n\tdata.l = end;\n\tvar out = ({Name:name, Ptg:formula, Flags: flags}/*:any*/);\n\tif(itab < 0xFFFFFFF) out.Sheet = itab;\n\tif(comment) out.Comment = comment;\n\treturn out;\n}\nfunction write_BrtName(name, wb) {\n\tvar o = new_buf(9);\n\tvar flags = 0;\n\tvar dname = name.Name;\n\tif(XLSLblBuiltIn.indexOf(dname) > -1) { flags |= 0x20; dname = dname.slice(6); }\n\to.write_shift(4, flags); // flags\n\to.write_shift(1, 0); // chKey\n\to.write_shift(4, name.Sheet == null ? 0xFFFFFFFF : name.Sheet);\n\n\tvar arr = [\n\t\to,\n\t\twrite_XLWideString(dname),\n\t\twrite_XLSBNameParsedFormula(name.Ref, wb)\n\t];\n\tif(name.Comment) arr.push(write_XLNullableWideString(name.Comment));\n\telse {\n\t\tvar x = new_buf(4);\n\t\tx.write_shift(4, 0xFFFFFFFF);\n\t\tarr.push(x);\n\t}\n\n\t// if macro (flags & 0x0F):\n\t// write_shift(4, 0xFFFFFFFF);\n\t// write_XLNullableWideString(description)\n\t// write_XLNullableWideString(helpTopic)\n\t// write_shift(4, 0xFFFFFFFF);\n\n\treturn bconcat(arr);\n}\n\n/* [MS-XLSB] 2.1.7.61 Workbook */\nfunction parse_wb_bin(data, opts)/*:WorkbookFile*/ {\n\tvar wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, xmlns: \"\" };\n\tvar state/*:Array<string>*/ = [];\n\tvar pass = false;\n\n\tif(!opts) opts = {};\n\topts.biff = 12;\n\n\tvar Names = [];\n\tvar supbooks = ([[]]/*:any*/);\n\tsupbooks.SheetNames = [];\n\tsupbooks.XTI = [];\n\n\tXLSBRecordEnum[0x0010] = { n:\"BrtFRTArchID$\", f:parse_BrtFRTArchID$ };\n\n\trecordhopper(data, function hopper_wb(val, R, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x009C: /* 'BrtBundleSh' */\n\t\t\t\tsupbooks.SheetNames.push(val.name);\n\t\t\t\twb.Sheets.push(val); break;\n\n\t\t\tcase 0x0099: /* 'BrtWbProp' */\n\t\t\t\twb.WBProps = val; break;\n\n\t\t\tcase 0x0027: /* 'BrtName' */\n\t\t\t\tif(val.Sheet != null) opts.SID = val.Sheet;\n\t\t\t\tval.Ref = val.Ptg ? stringify_formula(val.Ptg, null, null, supbooks, opts) : \"#REF!\";\n\t\t\t\tdelete opts.SID;\n\t\t\t\tdelete val.Ptg;\n\t\t\t\tNames.push(val);\n\t\t\t\tbreak;\n\t\t\tcase 0x040C: /* 'BrtNameExt' */ break;\n\n\t\t\tcase 0x0165: /* 'BrtSupSelf' */\n\t\t\tcase 0x0166: /* 'BrtSupSame' */\n\t\t\tcase 0x0163: /* 'BrtSupBookSrc' */\n\t\t\tcase 0x029B: /* 'BrtSupAddin' */\n\t\t\t\tif(!supbooks[0].length) supbooks[0] = [RT, val];\n\t\t\t\telse supbooks.push([RT, val]);\n\t\t\t\tsupbooks[supbooks.length - 1].XTI = [];\n\t\t\t\tbreak;\n\t\t\tcase 0x016A: /* 'BrtExternSheet' */\n\t\t\t\tif(supbooks.length === 0) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\tsupbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val);\n\t\t\t\tsupbooks.XTI = supbooks.XTI.concat(val);\n\t\t\t\tbreak;\n\t\t\tcase 0x0169: /* 'BrtPlaceholderName' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0817: /* 'BrtAbsPath15' */\n\t\t\tcase 0x009E: /* 'BrtBookView' */\n\t\t\tcase 0x008F: /* 'BrtBeginBundleShs' */\n\t\t\tcase 0x0298: /* 'BrtBeginFnGroup' */\n\t\t\tcase 0x0161: /* 'BrtBeginExternals' */\n\t\t\t\tbreak;\n\n\t\t\t/* case 'BrtModelTimeGroupingCalcCol' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\tcase 0x0C01: /* 'BrtRevisionPtr' */\n\t\t\tcase 0x0216: /* 'BrtBookProtection' */\n\t\t\tcase 0x02A5: /* 'BrtBookProtectionIso' */\n\t\t\tcase 0x009D: /* 'BrtCalcProp' */\n\t\t\tcase 0x0262: /* 'BrtCrashRecErr' */\n\t\t\tcase 0x0802: /* 'BrtDecoupledPivotCacheID' */\n\t\t\tcase 0x009B: /* 'BrtFileRecover' */\n\t\t\tcase 0x0224: /* 'BrtFileSharing' */\n\t\t\tcase 0x02A4: /* 'BrtFileSharingIso' */\n\t\t\tcase 0x0080: /* 'BrtFileVersion' */\n\t\t\tcase 0x0299: /* 'BrtFnGroup' */\n\t\t\tcase 0x0850: /* 'BrtModelRelationship' */\n\t\t\tcase 0x084D: /* 'BrtModelTable' */\n\t\t\tcase 0x0225: /* 'BrtOleSize' */\n\t\t\tcase 0x0805: /* 'BrtPivotTableRef' */\n\t\t\tcase 0x0254: /* 'BrtSmartTagType' */\n\t\t\tcase 0x081C: /* 'BrtTableSlicerCacheID' */\n\t\t\tcase 0x081B: /* 'BrtTableSlicerCacheIDs' */\n\t\t\tcase 0x0822: /* 'BrtTimelineCachePivotCacheID' */\n\t\t\tcase 0x018D: /* 'BrtUserBookView' */\n\t\t\tcase 0x009A: /* 'BrtWbFactoid' */\n\t\t\tcase 0x045D: /* 'BrtWbProp14' */\n\t\t\tcase 0x0229: /* 'BrtWebOpt' */\n\t\t\tcase 0x082B: /* 'BrtWorkBookPr15' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tstate.push(RT); pass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(RT); pass = true; break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tcase 0x0010: /* 'BrtFRTArchID$' */ break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T){/* empty */}\n\t\t\t\telse if(!pass || (opts.WTF && state[state.length-1] != 0x0025 /* BrtACBegin */ && state[state.length-1] != 0x0023 /* BrtFRTBegin */)) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t}, opts);\n\n\tparse_wb_defaults(wb);\n\n\t// $FlowIgnore\n\twb.Names = Names;\n\n\t(wb/*:any*/).supbooks = supbooks;\n\treturn wb;\n}\n\nfunction write_BUNDLESHS(ba, wb/*::, opts*/) {\n\twrite_record(ba, 0x008F /* BrtBeginBundleShs */);\n\tfor(var idx = 0; idx != wb.SheetNames.length; ++idx) {\n\t\tvar viz = wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx] && wb.Workbook.Sheets[idx].Hidden || 0;\n\t\tvar d = { Hidden: viz, iTabID: idx+1, strRelID: 'rId' + (idx+1), name: wb.SheetNames[idx] };\n\t\twrite_record(ba, 0x009C /* BrtBundleSh */, write_BrtBundleSh(d));\n\t}\n\twrite_record(ba, 0x0090 /* BrtEndBundleShs */);\n}\n\n/* [MS-XLSB] 2.4.649 BrtFileVersion */\nfunction write_BrtFileVersion(data, o) {\n\tif(!o) o = new_buf(127);\n\tfor(var i = 0; i != 4; ++i) o.write_shift(4, 0);\n\twrite_XLWideString(\"SheetJS\", o);\n\twrite_XLWideString(XLSX.version, o);\n\twrite_XLWideString(XLSX.version, o);\n\twrite_XLWideString(\"7262\", o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.301 BrtBookView */\nfunction write_BrtBookView(idx, o) {\n\tif(!o) o = new_buf(29);\n\to.write_shift(-4, 0);\n\to.write_shift(-4, 460);\n\to.write_shift(4,  28800);\n\to.write_shift(4,  17600);\n\to.write_shift(4,  500);\n\to.write_shift(4,  idx);\n\to.write_shift(4,  idx);\n\tvar flags = 0x78;\n\to.write_shift(1,  flags);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\nfunction write_BOOKVIEWS(ba, wb/*::, opts*/) {\n\t/* required if hidden tab appears before visible tab */\n\tif(!wb.Workbook || !wb.Workbook.Sheets) return;\n\tvar sheets = wb.Workbook.Sheets;\n\tvar i = 0, vistab = -1, hidden = -1;\n\tfor(; i < sheets.length; ++i) {\n\t\tif(!sheets[i] || !sheets[i].Hidden && vistab == -1) vistab = i;\n\t\telse if(sheets[i].Hidden == 1 && hidden == -1) hidden = i;\n\t}\n\tif(hidden > vistab) return;\n\twrite_record(ba, 0x0087 /* BrtBeginBookViews */);\n\twrite_record(ba, 0x009E /* BrtBookView */, write_BrtBookView(vistab));\n\t/* 1*(BrtBookView *FRT) */\n\twrite_record(ba, 0x0088 /* BrtEndBookViews */);\n}\n\nfunction write_BRTNAMES(ba, wb) {\n\tif(!wb.Workbook || !wb.Workbook.Names) return;\n\twb.Workbook.Names.forEach(function(name) { try {\n\t\tif(name.Flags & 0x0e) return; // TODO: macro name write\n\t\twrite_record(ba, 0x0027 /* BrtName */, write_BrtName(name, wb));\n\t} catch(e) {\n\t\tconsole.error(\"Could not serialize defined name \" + JSON.stringify(name));\n\t} });\n}\n\nfunction write_SELF_EXTERNS_xlsb(wb) {\n\tvar L = wb.SheetNames.length;\n\tvar o = new_buf(12 * L + 28);\n\to.write_shift(4, L + 2);\n\to.write_shift(4, 0); o.write_shift(4, -2); o.write_shift(4, -2); // workbook-level reference\n\to.write_shift(4, 0); o.write_shift(4, -1); o.write_shift(4, -1); // #REF!...\n\tfor(var i = 0; i < L; ++i) {\n\t\to.write_shift(4, 0); o.write_shift(4, i); o.write_shift(4, i);\n\t}\n\treturn o;\n}\nfunction write_EXTERNALS_xlsb(ba, wb) {\n\twrite_record(ba, 0x0161 /* BrtBeginExternals */);\n\twrite_record(ba, 0x0165 /* BrtSupSelf */);\n\twrite_record(ba, 0x016A /* BrtExternSheet */, write_SELF_EXTERNS_xlsb(wb, 0));\n\twrite_record(ba, 0x0162 /* BrtEndExternals */);\n}\n\n/* [MS-XLSB] 2.4.305 BrtCalcProp */\n/*function write_BrtCalcProp(data, o) {\n\tif(!o) o = new_buf(26);\n\to.write_shift(4,0); // force recalc\n\to.write_shift(4,1);\n\to.write_shift(4,0);\n\twrite_Xnum(0, o);\n\to.write_shift(-4, 1023);\n\to.write_shift(1, 0x33);\n\to.write_shift(1, 0x00);\n\treturn o;\n}*/\n\n/* [MS-XLSB] 2.4.646 BrtFileRecover */\n/*function write_BrtFileRecover(data, o) {\n\tif(!o) o = new_buf(1);\n\to.write_shift(1,0);\n\treturn o;\n}*/\n\n/* [MS-XLSB] 2.1.7.61 Workbook */\nfunction write_wb_bin(wb, opts) {\n\tvar ba = buf_array();\n\twrite_record(ba, 0x0083 /* BrtBeginBook */);\n\twrite_record(ba, 0x0080 /* BrtFileVersion */, write_BrtFileVersion());\n\t/* [[BrtFileSharingIso] BrtFileSharing] */\n\twrite_record(ba, 0x0099 /* BrtWbProp */, write_BrtWbProp(wb.Workbook && wb.Workbook.WBProps || null));\n\t/* [ACABSPATH] */\n\t/* [[BrtBookProtectionIso] BrtBookProtection] */\n\twrite_BOOKVIEWS(ba, wb, opts);\n\twrite_BUNDLESHS(ba, wb, opts);\n\t/* [FNGROUP] */\n\twrite_EXTERNALS_xlsb(ba, wb);\n\tif((wb.Workbook||{}).Names) write_BRTNAMES(ba, wb);\n\t/* write_record(ba, 0x009D BrtCalcProp, write_BrtCalcProp()); */\n\t/* [BrtOleSize] */\n\t/* *(BrtUserBookView *FRT) */\n\t/* [PIVOTCACHEIDS] */\n\t/* [BrtWbFactoid] */\n\t/* [SMARTTAGTYPES] */\n\t/* [BrtWebOpt] */\n\t/* write_record(ba, 0x009B BrtFileRecover, write_BrtFileRecover()); */\n\t/* [WEBPUBITEMS] */\n\t/* [CRERRS] */\n\t/* FRTWORKBOOK */\n\twrite_record(ba, 0x0084 /* BrtEndBook */);\n\n\treturn ba.end();\n}\nfunction parse_wb(data, name/*:string*/, opts)/*:WorkbookFile*/ {\n\tif(name.slice(-4)===\".bin\") return parse_wb_bin((data/*:any*/), opts);\n\treturn parse_wb_xml((data/*:any*/), opts);\n}\n\nfunction parse_ws(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_ws_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_ws_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_cs(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_cs_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_cs_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_ms(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_ms_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_ms_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_ds(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_ds_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_ds_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_sty(data, name/*:string*/, themes, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_sty_bin((data/*:any*/), themes, opts);\n\treturn parse_sty_xml((data/*:any*/), themes, opts);\n}\n\nfunction parse_sst(data, name/*:string*/, opts)/*:SST*/ {\n\tif(name.slice(-4)===\".bin\") return parse_sst_bin((data/*:any*/), opts);\n\treturn parse_sst_xml((data/*:any*/), opts);\n}\n\nfunction parse_cmnt(data, name/*:string*/, opts)/*:Array<RawComment>*/ {\n\tif(name.slice(-4)===\".bin\") return parse_comments_bin((data/*:any*/), opts);\n\treturn parse_comments_xml((data/*:any*/), opts);\n}\n\nfunction parse_cc(data, name/*:string*/, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_cc_bin((data/*:any*/), name, opts);\n\treturn parse_cc_xml((data/*:any*/), name, opts);\n}\n\nfunction parse_xlink(data, rel, name/*:string*/, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_xlink_bin((data/*:any*/), rel, name, opts);\n\treturn parse_xlink_xml((data/*:any*/), rel, name, opts);\n}\n\nfunction parse_xlmeta(data, name/*:string*/, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_xlmeta_bin((data/*:any*/), name, opts);\n\treturn parse_xlmeta_xml((data/*:any*/), name, opts);\n}\nvar attregexg2=/\\b((?:\\w+:)?[\\w]+)=((?:\")([^\"]*)(?:\")|(?:')([^']*)(?:'))/g;\nvar attregex2=/\\b((?:\\w+:)?[\\w]+)=((?:\")(?:[^\"]*)(?:\")|(?:')(?:[^']*)(?:'))/;\nfunction xlml_parsexmltag(tag/*:string*/, skip_root/*:?boolean*/) {\n\tvar words = tag.split(/\\s+/);\n\tvar z/*:any*/ = ([]/*:any*/); if(!skip_root) z[0] = words[0];\n\tif(words.length === 1) return z;\n\tvar m = tag.match(attregexg2), y, j, w, i;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\ty = m[i].match(attregex2);\n/*:: if(!y || !y[2]) continue; */\n\t\tif((j=y[1].indexOf(\":\")) === -1) z[y[1]] = y[2].slice(1,y[2].length-1);\n\t\telse {\n\t\t\tif(y[1].slice(0,6) === \"xmlns:\") w = \"xmlns\"+y[1].slice(6);\n\t\t\telse w = y[1].slice(j+1);\n\t\t\tz[w] = y[2].slice(1,y[2].length-1);\n\t\t}\n\t}\n\treturn z;\n}\nfunction xlml_parsexmltagobj(tag/*:string*/) {\n\tvar words = tag.split(/\\s+/);\n\tvar z = {};\n\tif(words.length === 1) return z;\n\tvar m = tag.match(attregexg2), y, j, w, i;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\ty = m[i].match(attregex2);\n/*:: if(!y || !y[2]) continue; */\n\t\tif((j=y[1].indexOf(\":\")) === -1) z[y[1]] = y[2].slice(1,y[2].length-1);\n\t\telse {\n\t\t\tif(y[1].slice(0,6) === \"xmlns:\") w = \"xmlns\"+y[1].slice(6);\n\t\t\telse w = y[1].slice(j+1);\n\t\t\tz[w] = y[2].slice(1,y[2].length-1);\n\t\t}\n\t}\n\treturn z;\n}\n\n// ----\n\n/* map from xlml named formats to SSF TODO: localize */\nvar XLMLFormatMap/*: {[string]:string}*/;\n\nfunction xlml_format(format, value, date1904)/*:string*/ {\n\tvar fmt = XLMLFormatMap[format] || unescapexml(format);\n\tif(fmt === \"General\") return SSF_general(value);\n\treturn SSF_format(fmt, value, {date1904: !!date1904});\n}\n\nfunction xlml_set_custprop(Custprops, key, cp, val/*:string*/) {\n\tvar oval/*:any*/ = val;\n\tswitch((cp[0].match(/dt:dt=\"([\\w.]+)\"/)||[\"\",\"\"])[1]) {\n\t\tcase \"boolean\": oval = parsexmlbool(val); break;\n\t\tcase \"i2\": case \"int\": oval = parseInt(val, 10); break;\n\t\tcase \"r4\": case \"float\": oval = parseFloat(val); break;\n\t\tcase \"date\": case \"dateTime.tz\": oval = parseDate(val); break;\n\t\tcase \"i8\": case \"string\": case \"fixed\": case \"uuid\": case \"bin.base64\": break;\n\t\tdefault: throw new Error(\"bad custprop:\" + cp[0]);\n\t}\n\tCustprops[unescapexml(key)] = oval;\n}\n\nfunction safe_format_xlml(cell/*:Cell*/, nf, o, date1904) {\n\tif(cell.t === 'z') return;\n\tif(!o || o.cellText !== false) try {\n\t\tif(cell.t === 'e') { cell.w = cell.w || BErr[cell.v]; }\n\t\telse if(nf === \"General\") {\n\t\t\tif(cell.t === 'n') {\n\t\t\t\tif((cell.v|0) === cell.v) cell.w = cell.v.toString(10);\n\t\t\t\telse cell.w = SSF_general_num(cell.v);\n\t\t\t}\n\t\t\telse cell.w = SSF_general(cell.v);\n\t\t}\n\t\telse cell.w = xlml_format(nf||\"General\", cell.v, date1904);\n\t} catch(e) { if(o.WTF) throw e; }\n\ttry {\n\t\tvar z = XLMLFormatMap[nf]||nf||\"General\";\n\t\tif(o.cellNF) cell.z = z;\n\t\tif(o.cellDates && cell.t == 'n' && fmt_is_date(z)) {\n\t\t\tvar _d = SSF_parse_date_code(cell.v + (date1904 ? 1462 : 0)); if(_d) { cell.t = 'd'; cell.v = new Date(Date.UTC(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u)); }\n\t\t}\n\t} catch(e) { if(o.WTF) throw e; }\n}\n\nfunction process_style_xlml(styles, stag, opts) {\n\tif(opts.cellStyles) {\n\t\tif(stag.Interior) {\n\t\t\tvar I = stag.Interior;\n\t\t\tif(I.Pattern) I.patternType = XLMLPatternTypeMap[I.Pattern] || I.Pattern;\n\t\t}\n\t}\n\tstyles[stag.ID] = stag;\n}\n\n/* TODO: there must exist some form of OSP-blessed spec */\nfunction parse_xlml_data(xml, ss, data, cell/*:any*/, base, styles, csty, row, arrayf, o, date1904) {\n\tvar nf = \"General\", sid = cell.StyleID, S = {}; o = o || {};\n\tvar interiors = [];\n\tvar i = 0;\n\tif(sid === undefined && row) sid = row.StyleID;\n\tif(sid === undefined && csty) sid = csty.StyleID;\n\twhile(styles[sid] !== undefined) {\n\t\tvar ssid = styles[sid];\n\t\tif(ssid.nf) nf = ssid.nf;\n\t\tif(ssid.Interior) interiors.push(ssid.Interior);\n\t\tif(!ssid.Parent) break;\n\t\tsid = ssid.Parent;\n\t}\n\tswitch(data.Type) {\n\t\tcase 'Boolean':\n\t\t\tcell.t = 'b';\n\t\t\tcell.v = parsexmlbool(xml);\n\t\t\tbreak;\n\t\tcase 'String':\n\t\t\tcell.t = 's'; cell.r = xlml_fixstr(unescapexml(xml));\n\t\t\tcell.v = (xml.indexOf(\"<\") > -1 ? unescapexml(ss||xml).replace(/<[^<>]*>/g, \"\") : cell.r); // todo: BR etc\n\t\t\tbreak;\n\t\tcase 'DateTime':\n\t\t\tif(xml.slice(-1) != \"Z\") xml += \"Z\";\n\t\t\tcell.v = datenum(parseDate(xml, date1904), date1904);\n\t\t\tif(cell.v !== cell.v) cell.v = unescapexml(xml);\n\t\t\tif(!nf || nf == \"General\") nf = \"yyyy-mm-dd\";\n\t\t\t/* falls through */\n\t\tcase 'Number':\n\t\t\tif(cell.v === undefined) cell.v=+xml;\n\t\t\tif(!cell.t) cell.t = 'n';\n\t\t\tbreak;\n\t\tcase 'Error': cell.t = 'e'; cell.v = RBErr[xml]; if(o.cellText !== false) cell.w = xml; break;\n\t\tdefault:\n\t\t\tif(xml == \"\" && ss == \"\") { cell.t = 'z'; }\n\t\t\telse { cell.t = 's'; cell.v = xlml_fixstr(ss||xml); }\n\t\t\tbreak;\n\t}\n\tsafe_format_xlml(cell, nf, o, date1904);\n\tif(o.cellFormula !== false) {\n\t\tif(cell.Formula) {\n\t\t\tvar fstr = unescapexml(cell.Formula);\n\t\t\t/* strictly speaking, the leading = is required but some writers omit */\n\t\t\tif(fstr.charCodeAt(0) == 61 /* = */) fstr = fstr.slice(1);\n\t\t\tcell.f = rc_to_a1(fstr, base);\n\t\t\tdelete cell.Formula;\n\t\t\tif(cell.ArrayRange == \"RC\") cell.F = rc_to_a1(\"RC:RC\", base);\n\t\t\telse if(cell.ArrayRange) {\n\t\t\t\tcell.F = rc_to_a1(cell.ArrayRange, base);\n\t\t\t\tarrayf.push([safe_decode_range(cell.F), cell.F]);\n\t\t\t}\n\t\t} else {\n\t\t\tfor(i = 0; i < arrayf.length; ++i)\n\t\t\t\tif(base.r >= arrayf[i][0].s.r && base.r <= arrayf[i][0].e.r)\n\t\t\t\t\tif(base.c >= arrayf[i][0].s.c && base.c <= arrayf[i][0].e.c)\n\t\t\t\t\t\tcell.F = arrayf[i][1];\n\t\t}\n\t}\n\tif(o.cellStyles) {\n\t\tinteriors.forEach(function(x) {\n\t\t\tif(!S.patternType && x.patternType) S.patternType = x.patternType;\n\t\t});\n\t\tcell.s = S;\n\t}\n\tif(cell.StyleID !== undefined) cell.ixfe = cell.StyleID;\n}\n\nfunction xlml_prefix_dname(dname) {\n\treturn XLSLblBuiltIn.indexOf(\"_xlnm.\" + dname) > -1 ? \"_xlnm.\" + dname : dname;\n}\n\nfunction xlml_clean_comment(comment/*:any*/) {\n\tcomment.t = comment.v || \"\";\n\tcomment.t = comment.t.replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\");\n\tcomment.v = comment.w = comment.ixfe = undefined;\n}\n\n/* TODO: Everything */\nfunction parse_xlml_xml(d, _opts)/*:Workbook*/ {\n\tvar opts = _opts || {};\n\tmake_ssf();\n\tvar str = debom(xlml_normalize(d));\n\tif(opts.type == 'binary' || opts.type == 'array' || opts.type == 'base64') {\n\t\tif(typeof $cptable !== 'undefined') str = $cptable.utils.decode(65001, char_codes(str));\n\t\telse str = utf8read(str);\n\t}\n\tvar opening = str.slice(0, 1024).toLowerCase(), ishtml = false;\n\topening = opening.replace(/\".*?\"/g, \"\");\n\tif((opening.indexOf(\">\") & 1023) > Math.min((opening.indexOf(\",\") & 1023), (opening.indexOf(\";\")&1023))) { var _o = dup(opts); _o.type = \"string\"; return PRN.to_workbook(str, _o); }\n\tif(opening.indexOf(\"<?xml\") == -1) [\"html\", \"table\", \"head\", \"meta\", \"script\", \"style\", \"div\"].forEach(function(tag) { if(opening.indexOf(\"<\" + tag) >= 0) ishtml = true; });\n\tif(ishtml) return html_to_workbook(str, opts);\n\n\tXLMLFormatMap = ({\n\t\t\"General Number\": \"General\",\n\t\t\"General Date\": table_fmt[22],\n\t\t\"Long Date\": \"dddd, mmmm dd, yyyy\",\n\t\t\"Medium Date\": table_fmt[15],\n\t\t\"Short Date\": table_fmt[14],\n\t\t\"Long Time\": table_fmt[19],\n\t\t\"Medium Time\": table_fmt[18],\n\t\t\"Short Time\": table_fmt[20],\n\t\t\"Currency\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t\t\"Fixed\": table_fmt[2],\n\t\t\"Standard\": table_fmt[4],\n\t\t\"Percent\": table_fmt[10],\n\t\t\"Scientific\": table_fmt[11],\n\t\t\"Yes/No\": '\"Yes\";\"Yes\";\"No\";@',\n\t\t\"True/False\": '\"True\";\"True\";\"False\";@',\n\t\t\"On/Off\": '\"Yes\";\"Yes\";\"No\";@'\n\t}/*:any*/);\n\n\n\tvar Rn;\n\tvar state = [], tmp;\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\tvar sheets = {}, sheetnames/*:Array<string>*/ = [], cursheet/*:Worksheet*/ = ({}), sheetname = \"\"; if(opts.dense) cursheet[\"!data\"] = [];\n\tvar cell = ({}/*:any*/), row = {};// eslint-disable-line no-unused-vars\n\tvar dtag = xlml_parsexmltag('<Data ss:Type=\"String\">'), didx = 0;\n\tvar c = 0, r = 0;\n\tvar refguess/*:Range*/ = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\tvar styles = {}, stag = {};\n\tvar ss = \"\", fidx = 0;\n\tvar merges/*:Array<Range>*/ = [];\n\tvar Props = {}, Custprops = {}, pidx = 0, cp = [];\n\tvar comments/*:Array<Comment>*/ = [], comment/*:Comment*/ = ({}/*:any*/);\n\tvar cstys = [], csty, seencol = false;\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar rowinfo/*:Array<RowInfo>*/ = [], rowobj = {}, cc = 0, rr = 0;\n\tvar Workbook/*:WBWBProps*/ = ({ Sheets:[], WBProps:{date1904:false} }/*:any*/), wsprops = {};\n\txlmlregex.lastIndex = 0;\n\tstr = str_remove_ng(str, \"<!--\", \"-->\");\n\tvar raw_Rn3 = \"\";\n\twhile((Rn = xlmlregex.exec(str))) switch((Rn[3] = (raw_Rn3 = Rn[3]).toLowerCase())) {\n\t\tcase 'data' /*case 'Data'*/:\n\t\t\tif(raw_Rn3 == \"data\") {\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(state[state.length-1][1]) break;\n\t\t\tif(Rn[1]==='/') parse_xlml_data(str.slice(didx, Rn.index), ss, dtag, state[state.length-1][0]==/*\"Comment\"*/\"comment\"?comment:cell, {c:c,r:r}, styles, cstys[c], row, arrayf, opts, Workbook.WBProps.date1904);\n\t\t\telse { ss = \"\"; dtag = xlml_parsexmltag(Rn[0]); didx = Rn.index + Rn[0].length; }\n\t\t\tbreak;\n\t\tcase 'cell' /*case 'Cell'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif(comments.length > 0) cell.c = comments;\n\t\t\t\tif((!opts.sheetRows || opts.sheetRows > r) && cell.v !== void 0) {\n\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\tif(!cursheet[\"!data\"][r]) cursheet[\"!data\"][r] = [];\n\t\t\t\t\t\tcursheet[\"!data\"][r][c] = cell;\n\t\t\t\t\t} else cursheet[encode_col(c) + encode_row(r)] = cell;\n\t\t\t\t}\n\t\t\t\tif(cell.HRef) {\n\t\t\t\t\tcell.l = ({Target:unescapexml(cell.HRef)}/*:any*/);\n\t\t\t\t\tif(cell.HRefScreenTip) cell.l.Tooltip = cell.HRefScreenTip;\n\t\t\t\t\tdelete cell.HRef; delete cell.HRefScreenTip;\n\t\t\t\t}\n\t\t\t\tif(cell.MergeAcross || cell.MergeDown) {\n\t\t\t\t\tcc = c + (parseInt(cell.MergeAcross,10)|0);\n\t\t\t\t\trr = r + (parseInt(cell.MergeDown,10)|0);\n\t\t\t\t\tif(cc > c || rr > r) merges.push({s:{c:c,r:r},e:{c:cc,r:rr}});\n\t\t\t\t}\n\t\t\t\tif(!opts.sheetStubs) { if(cell.MergeAcross) c = cc + 1; else ++c; }\n\t\t\t\telse if(cell.MergeAcross || cell.MergeDown) {\n\t\t\t\t\t/*:: if(!cc) cc = 0; if(!rr) rr = 0; */\n\t\t\t\t\tfor(var cma = c; cma <= cc; ++cma) {\n\t\t\t\t\t\tfor(var cmd = r; cmd <= rr; ++cmd) {\n\t\t\t\t\t\t\tif(cma > c || cmd > r) {\n\t\t\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\t\t\tif(!cursheet[\"!data\"][cmd]) cursheet[\"!data\"][cmd] = [];\n\t\t\t\t\t\t\t\t\tcursheet[\"!data\"][cmd][cma] = {t:'z'};\n\t\t\t\t\t\t\t\t} else cursheet[encode_col(cma) + encode_row(cmd)] = {t:'z'};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tc = cc + 1;\n\t\t\t\t}\n\t\t\t\telse ++c;\n\t\t\t} else {\n\t\t\t\tcell = xlml_parsexmltagobj(Rn[0]);\n\t\t\t\tif(cell.Index) c = +cell.Index - 1;\n\t\t\t\tif(c < refguess.s.c) refguess.s.c = c;\n\t\t\t\tif(c > refguess.e.c) refguess.e.c = c;\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") ++c;\n\t\t\t\tcomments = [];\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'row' /*case 'Row'*/:\n\t\t\tif(Rn[1]==='/' || Rn[0].slice(-2) === \"/>\") {\n\t\t\t\tif(r < refguess.s.r) refguess.s.r = r;\n\t\t\t\tif(r > refguess.e.r) refguess.e.r = r;\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") {\n\t\t\t\t\trow = xlml_parsexmltag(Rn[0]);\n\t\t\t\t\tif(row.Index) r = +row.Index - 1;\n\t\t\t\t}\n\t\t\t\tc = 0; ++r;\n\t\t\t} else {\n\t\t\t\trow = xlml_parsexmltag(Rn[0]);\n\t\t\t\tif(row.Index) r = +row.Index - 1;\n\t\t\t\trowobj = {};\n\t\t\t\tif(row.AutoFitHeight == \"0\" || row.Height) {\n\t\t\t\t\trowobj.hpx = parseInt(row.Height, 10); rowobj.hpt = px2pt(rowobj.hpx);\n\t\t\t\t\trowinfo[r] = rowobj;\n\t\t\t\t}\n\t\t\t\tif(row.Hidden == \"1\") { rowobj.hidden = true; rowinfo[r] = rowobj; }\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'worksheet' /*case 'Worksheet'*/: /* TODO: read range from FullRows/FullColumns */\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t\tsheetnames.push(sheetname);\n\t\t\t\tif(refguess.s.r <= refguess.e.r && refguess.s.c <= refguess.e.c) {\n\t\t\t\t\tcursheet[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\tif(opts.sheetRows && opts.sheetRows <= refguess.e.r) {\n\t\t\t\t\t\tcursheet[\"!fullref\"] = cursheet[\"!ref\"];\n\t\t\t\t\t\trefguess.e.r = opts.sheetRows - 1;\n\t\t\t\t\t\tcursheet[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(merges.length) cursheet[\"!merges\"] = merges;\n\t\t\t\tif(cstys.length > 0) cursheet[\"!cols\"] = cstys;\n\t\t\t\tif(rowinfo.length > 0) cursheet[\"!rows\"] = rowinfo;\n\t\t\t\tsheets[sheetname] = cursheet;\n\t\t\t} else {\n\t\t\t\trefguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\t\t\t\tr = c = 0;\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\ttmp = xlml_parsexmltag(Rn[0]);\n\t\t\t\tsheetname = unescapexml(tmp.Name);\n\t\t\t\tcursheet = ({}); if(opts.dense) cursheet[\"!data\"] = [];\n\t\t\t\tmerges = [];\n\t\t\t\tarrayf = [];\n\t\t\t\trowinfo = [];\n\t\t\t\twsprops = {name:sheetname, Hidden:0};\n\t\t\t\tWorkbook.Sheets.push(wsprops);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'table' /*case 'Table'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].slice(-2) == \"/>\") break;\n\t\t\telse {\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\tcstys = []; seencol = false;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'style' /*case 'Style'*/:\n\t\t\tif(Rn[1]==='/') process_style_xlml(styles, stag, opts);\n\t\t\telse stag = xlml_parsexmltag(Rn[0]);\n\t\t\tbreak;\n\n\t\tcase 'numberformat' /*case 'NumberFormat'*/:\n\t\t\tstag.nf = unescapexml(xlml_parsexmltag(Rn[0]).Format || \"General\");\n\t\t\tif(XLMLFormatMap[stag.nf]) stag.nf = XLMLFormatMap[stag.nf];\n\t\t\tfor(var ssfidx = 0; ssfidx != 0x188; ++ssfidx) if(table_fmt[ssfidx] == stag.nf) break;\n\t\t\tif(ssfidx == 0x188) for(ssfidx = 0x39; ssfidx != 0x188; ++ssfidx) if(table_fmt[ssfidx] == null) { SSF__load(stag.nf, ssfidx); break; }\n\t\t\tbreak;\n\n\t\tcase 'column' /*case 'Column'*/:\n\t\t\tif(state[state.length-1][0] !== /*'Table'*/'table') break;\n\t\t\tif(Rn[1]==='/') break;\n\t\t\tcsty = xlml_parsexmltag(Rn[0]);\n\t\t\tif(csty.Hidden) { csty.hidden = true; delete csty.Hidden; }\n\t\t\tif(csty.Width) csty.wpx = parseInt(csty.Width, 10);\n\t\t\tif(!seencol && csty.wpx > 10) {\n\t\t\t\tseencol = true; MDW = DEF_MDW; //find_mdw_wpx(csty.wpx);\n\t\t\t\tfor(var _col = 0; _col < cstys.length; ++_col) if(cstys[_col]) process_col(cstys[_col]);\n\t\t\t}\n\t\t\tif(seencol) process_col(csty);\n\t\t\tcstys[(csty.Index-1||cstys.length)] = csty;\n\t\t\tfor(var i = 0; i < +csty.Span; ++i) cstys[cstys.length] = dup(csty);\n\t\t\tbreak;\n\n\t\tcase 'namedrange' /*case 'NamedRange'*/:\n\t\t\tif(Rn[1]==='/') break;\n\t\t\tif(!Workbook.Names) Workbook.Names = [];\n\t\t\tvar _NamedRange = parsexmltag(Rn[0]);\n\t\t\tvar _DefinedName/*:DefinedName*/ = ({\n\t\t\t\tName: xlml_prefix_dname(_NamedRange.Name),\n\t\t\t\tRef: rc_to_a1(_NamedRange.RefersTo.slice(1), {r:0, c:0})\n\t\t\t}/*:any*/);\n\t\t\tif(Workbook.Sheets.length>0) _DefinedName.Sheet=Workbook.Sheets.length-1;\n\t\t\t/*:: if(Workbook.Names) */Workbook.Names.push(_DefinedName);\n\t\t\tbreak;\n\n\t\tcase 'namedcell' /*case 'NamedCell'*/: break;\n\t\tcase 'b' /*case 'B'*/: break;\n\t\tcase 'i' /*case 'I'*/: break;\n\t\tcase 'u' /*case 'U'*/: break;\n\t\tcase 's' /*case 'S'*/: break;\n\t\tcase 'em' /*case 'EM'*/: break;\n\t\tcase 'h2' /*case 'H2'*/: break;\n\t\tcase 'h3' /*case 'H3'*/: break;\n\t\tcase 'sub' /*case 'Sub'*/: break;\n\t\tcase 'sup' /*case 'Sup'*/: break;\n\t\tcase 'span' /*case 'Span'*/: break;\n\t\tcase 'alignment' /*case 'Alignment'*/:\n\t\t\tbreak;\n\t\tcase 'borders' /*case 'Borders'*/: break;\n\t\tcase 'border' /*case 'Border'*/: break;\n\t\tcase 'font' /*case 'Font'*/:\n\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\telse if(Rn[1]===\"/\") ss += str.slice(fidx, Rn.index);\n\t\t\telse fidx = Rn.index + Rn[0].length;\n\t\t\tbreak;\n\t\tcase 'interior' /*case 'Interior'*/:\n\t\t\tif(!opts.cellStyles) break;\n\t\t\tstag.Interior = xlml_parsexmltag(Rn[0]);\n\t\t\tbreak;\n\t\tcase 'protection' /*case 'Protection'*/: break;\n\n\t\tcase 'author' /*case 'Author'*/:\n\t\tcase 'title' /*case 'Title'*/:\n\t\tcase 'description' /*case 'Description'*/:\n\t\tcase 'created' /*case 'Created'*/:\n\t\tcase 'keywords' /*case 'Keywords'*/:\n\t\tcase 'subject' /*case 'Subject'*/:\n\t\tcase 'category' /*case 'Category'*/:\n\t\tcase 'company' /*case 'Company'*/:\n\t\tcase 'lastauthor' /*case 'LastAuthor'*/:\n\t\tcase 'lastsaved' /*case 'LastSaved'*/:\n\t\tcase 'lastprinted' /*case 'LastPrinted'*/:\n\t\tcase 'version' /*case 'Version'*/:\n\t\tcase 'revision' /*case 'Revision'*/:\n\t\tcase 'totaltime' /*case 'TotalTime'*/:\n\t\tcase 'hyperlinkbase' /*case 'HyperlinkBase'*/:\n\t\tcase 'manager' /*case 'Manager'*/:\n\t\tcase 'contentstatus' /*case 'ContentStatus'*/:\n\t\tcase 'identifier' /*case 'Identifier'*/:\n\t\tcase 'language' /*case 'Language'*/:\n\t\tcase 'appname' /*case 'AppName'*/:\n\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\telse if(Rn[1]===\"/\") xlml_set_prop(Props, raw_Rn3, str.slice(pidx, Rn.index));\n\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\tbreak;\n\t\tcase 'paragraphs' /*case 'Paragraphs'*/: break;\n\n\t\tcase 'styles' /*case 'Styles'*/:\n\t\tcase 'workbook' /*case 'Workbook'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse state.push([Rn[3], false]);\n\t\t\tbreak;\n\n\t\tcase 'comment' /*case 'Comment'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t\txlml_clean_comment(comment);\n\t\t\t\tcomments.push(comment);\n\t\t\t} else {\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\ttmp = xlml_parsexmltag(Rn[0]);\n\t\t\t\tif(!parsexmlbool(tmp[\"ShowAlways\"]||\"0\")) comments.hidden = true;\n\t\t\t\tcomment = ({a:tmp.Author}/*:any*/);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'autofilter' /*case 'AutoFilter'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\tvar AutoFilter = xlml_parsexmltag(Rn[0]);\n\t\t\t\tcursheet['!autofilter'] = { ref:rc_to_a1(AutoFilter.Range).replace(/\\$/g,\"\") };\n\t\t\t\tstate.push([Rn[3], true]);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'name' /*case 'Name'*/: break;\n\n\t\tcase 'datavalidation' /*case 'DataValidation'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t} else {\n\t\t\t\tif(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'pixelsperinch' /*case 'PixelsPerInch'*/:\n\t\t\tbreak;\n\t\tcase 'componentoptions' /*case 'ComponentOptions'*/:\n\t\tcase 'documentproperties' /*case 'DocumentProperties'*/:\n\t\tcase 'customdocumentproperties' /*case 'CustomDocumentProperties'*/:\n\t\tcase 'officedocumentsettings' /*case 'OfficeDocumentSettings'*/:\n\t\tcase 'pivottable' /*case 'PivotTable'*/:\n\t\tcase 'pivotcache' /*case 'PivotCache'*/:\n\t\tcase 'names' /*case 'Names'*/:\n\t\tcase 'mapinfo' /*case 'MapInfo'*/:\n\t\tcase 'pagebreaks' /*case 'PageBreaks'*/:\n\t\tcase 'querytable' /*case 'QueryTable'*/:\n\t\tcase 'sorting' /*case 'Sorting'*/:\n\t\tcase 'schema' /*case 'Schema'*/: //case 'data' /*case 'data'*/:\n\t\tcase 'conditionalformatting' /*case 'ConditionalFormatting'*/:\n\t\tcase 'smarttagtype' /*case 'SmartTagType'*/:\n\t\tcase 'smarttags' /*case 'SmartTags'*/:\n\t\tcase 'excelworkbook' /*case 'ExcelWorkbook'*/:\n\t\tcase 'workbookoptions' /*case 'WorkbookOptions'*/:\n\t\tcase 'worksheetoptions' /*case 'WorksheetOptions'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\tbreak;\n\n\t\tcase 'null' /*case 'Null'*/: break;\n\n\t\tdefault:\n\t\t\t/* FODS file root is <office:document> */\n\t\t\tif(state.length == 0 && Rn[3] == \"document\") return parse_fods(str, opts);\n\t\t\t/* UOS file root is <uof:UOF> */\n\t\t\tif(state.length == 0 && Rn[3] == \"uof\"/*\"UOF\"*/) return parse_fods(str, opts);\n\n\t\t\tvar seen = true;\n\t\t\tswitch(state[state.length-1][0]) {\n\t\t\t\t/* OfficeDocumentSettings */\n\t\t\t\tcase 'officedocumentsettings' /*case 'OfficeDocumentSettings'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'allowpng' /*case 'AllowPNG'*/: break;\n\t\t\t\t\tcase 'removepersonalinformation' /*case 'RemovePersonalInformation'*/: break;\n\t\t\t\t\tcase 'downloadcomponents' /*case 'DownloadComponents'*/: break;\n\t\t\t\t\tcase 'locationofcomponents' /*case 'LocationOfComponents'*/: break;\n\t\t\t\t\tcase 'colors' /*case 'Colors'*/: break;\n\t\t\t\t\tcase 'color' /*case 'Color'*/: break;\n\t\t\t\t\tcase 'index' /*case 'Index'*/: break;\n\t\t\t\t\tcase 'rgb' /*case 'RGB'*/: break;\n\t\t\t\t\tcase 'targetscreensize' /*case 'TargetScreenSize'*/: break;\n\t\t\t\t\tcase 'readonlyrecommended' /*case 'ReadOnlyRecommended'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* ComponentOptions */\n\t\t\t\tcase 'componentoptions' /*case 'ComponentOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'toolbar' /*case 'Toolbar'*/: break;\n\t\t\t\t\tcase 'hideofficelogo' /*case 'HideOfficeLogo'*/: break;\n\t\t\t\t\tcase 'spreadsheetautofit' /*case 'SpreadsheetAutoFit'*/: break;\n\t\t\t\t\tcase 'label' /*case 'Label'*/: break;\n\t\t\t\t\tcase 'caption' /*case 'Caption'*/: break;\n\t\t\t\t\tcase 'maxheight' /*case 'MaxHeight'*/: break;\n\t\t\t\t\tcase 'maxwidth' /*case 'MaxWidth'*/: break;\n\t\t\t\t\tcase 'nextsheetnumber' /*case 'NextSheetNumber'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* ExcelWorkbook */\n\t\t\t\tcase 'excelworkbook' /*case 'ExcelWorkbook'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'date1904' /*case 'Date1904'*/:\n\t\t\t\t\t\t/*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */\n\t\t\t\t\t\tWorkbook.WBProps.date1904 = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'hidehorizontalscrollbar' /*case 'HideHorizontalScrollBar'*/: break;\n\t\t\t\t\tcase 'hideverticalscrollbar' /*case 'HideVerticalScrollBar'*/: break;\n\t\t\t\t\tcase 'hideworkbooktabs' /*case 'HideWorkbookTabs'*/: break;\n\t\t\t\t\tcase 'windowheight' /*case 'WindowHeight'*/: break;\n\t\t\t\t\tcase 'windowwidth' /*case 'WindowWidth'*/: break;\n\t\t\t\t\tcase 'windowtopx' /*case 'WindowTopX'*/: break;\n\t\t\t\t\tcase 'windowtopy' /*case 'WindowTopY'*/: break;\n\t\t\t\t\tcase 'tabratio' /*case 'TabRatio'*/: break;\n\t\t\t\t\tcase 'protectstructure' /*case 'ProtectStructure'*/: break;\n\t\t\t\t\tcase 'protectwindow' /*case 'ProtectWindow'*/: break;\n\t\t\t\t\tcase 'protectwindows' /*case 'ProtectWindows'*/: break;\n\t\t\t\t\tcase 'activesheet' /*case 'ActiveSheet'*/: break;\n\t\t\t\t\tcase 'displayinknotes' /*case 'DisplayInkNotes'*/: break;\n\t\t\t\t\tcase 'firstvisiblesheet' /*case 'FirstVisibleSheet'*/: break;\n\t\t\t\t\tcase 'supbook' /*case 'SupBook'*/: break;\n\t\t\t\t\tcase 'sheetname' /*case 'SheetName'*/: break;\n\t\t\t\t\tcase 'sheetindex' /*case 'SheetIndex'*/: break;\n\t\t\t\t\tcase 'sheetindexfirst' /*case 'SheetIndexFirst'*/: break;\n\t\t\t\t\tcase 'sheetindexlast' /*case 'SheetIndexLast'*/: break;\n\t\t\t\t\tcase 'dll' /*case 'Dll'*/: break;\n\t\t\t\t\tcase 'acceptlabelsinformulas' /*case 'AcceptLabelsInFormulas'*/: break;\n\t\t\t\t\tcase 'donotsavelinkvalues' /*case 'DoNotSaveLinkValues'*/: break;\n\t\t\t\t\tcase 'iteration' /*case 'Iteration'*/: break;\n\t\t\t\t\tcase 'maxiterations' /*case 'MaxIterations'*/: break;\n\t\t\t\t\tcase 'maxchange' /*case 'MaxChange'*/: break;\n\t\t\t\t\tcase 'path' /*case 'Path'*/: break;\n\t\t\t\t\tcase 'xct' /*case 'Xct'*/: break;\n\t\t\t\t\tcase 'count' /*case 'Count'*/: break;\n\t\t\t\t\tcase 'selectedsheets' /*case 'SelectedSheets'*/: break;\n\t\t\t\t\tcase 'calculation' /*case 'Calculation'*/: break;\n\t\t\t\t\tcase 'uncalced' /*case 'Uncalced'*/: break;\n\t\t\t\t\tcase 'startupprompt' /*case 'StartupPrompt'*/: break;\n\t\t\t\t\tcase 'crn' /*case 'Crn'*/: break;\n\t\t\t\t\tcase 'externname' /*case 'ExternName'*/: break;\n\t\t\t\t\tcase 'formula' /*case 'Formula'*/: break;\n\t\t\t\t\tcase 'colfirst' /*case 'ColFirst'*/: break;\n\t\t\t\t\tcase 'collast' /*case 'ColLast'*/: break;\n\t\t\t\t\tcase 'wantadvise' /*case 'WantAdvise'*/: break;\n\t\t\t\t\tcase 'boolean' /*case 'Boolean'*/: break;\n\t\t\t\t\tcase 'error' /*case 'Error'*/: break;\n\t\t\t\t\tcase 'text' /*case 'Text'*/: break;\n\t\t\t\t\tcase 'ole' /*case 'OLE'*/: break;\n\t\t\t\t\tcase 'noautorecover' /*case 'NoAutoRecover'*/: break;\n\t\t\t\t\tcase 'publishobjects' /*case 'PublishObjects'*/: break;\n\t\t\t\t\tcase 'donotcalculatebeforesave' /*case 'DoNotCalculateBeforeSave'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'refmoder1c1' /*case 'RefModeR1C1'*/: break;\n\t\t\t\t\tcase 'embedsavesmarttags' /*case 'EmbedSaveSmartTags'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* WorkbookOptions */\n\t\t\t\tcase 'workbookoptions' /*case 'WorkbookOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'owcversion' /*case 'OWCVersion'*/: break;\n\t\t\t\t\tcase 'height' /*case 'Height'*/: break;\n\t\t\t\t\tcase 'width' /*case 'Width'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* WorksheetOptions */\n\t\t\t\tcase 'worksheetoptions' /*case 'WorksheetOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'visible' /*case 'Visible'*/:\n\t\t\t\t\t\tif(Rn[0].slice(-2) === \"/>\"){/* empty */}\n\t\t\t\t\t\telse if(Rn[1]===\"/\") switch(str.slice(pidx, Rn.index)) {\n\t\t\t\t\t\t\tcase \"SheetHidden\": wsprops.Hidden = 1; break;\n\t\t\t\t\t\t\tcase \"SheetVeryHidden\": wsprops.Hidden = 2; break;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'header' /*case 'Header'*/:\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={}, 'xlml');\n\t\t\t\t\t\tif(!isNaN(+parsexmltag(Rn[0]).Margin)) cursheet['!margins'].header = +parsexmltag(Rn[0]).Margin;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'footer' /*case 'Footer'*/:\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={}, 'xlml');\n\t\t\t\t\t\tif(!isNaN(+parsexmltag(Rn[0]).Margin)) cursheet['!margins'].footer = +parsexmltag(Rn[0]).Margin;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'pagemargins' /*case 'PageMargins'*/:\n\t\t\t\t\t\tvar pagemargins = parsexmltag(Rn[0]);\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={},'xlml');\n\t\t\t\t\t\tif(!isNaN(+pagemargins.Top)) cursheet['!margins'].top = +pagemargins.Top;\n\t\t\t\t\t\tif(!isNaN(+pagemargins.Left)) cursheet['!margins'].left = +pagemargins.Left;\n\t\t\t\t\t\tif(!isNaN(+pagemargins.Right)) cursheet['!margins'].right = +pagemargins.Right;\n\t\t\t\t\t\tif(!isNaN(+pagemargins.Bottom)) cursheet['!margins'].bottom = +pagemargins.Bottom;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'displayrighttoleft' /*case 'DisplayRightToLeft'*/:\n\t\t\t\t\t\tif(!Workbook.Views) Workbook.Views = [];\n\t\t\t\t\t\tif(!Workbook.Views[0]) Workbook.Views[0] = {};\n\t\t\t\t\t\tWorkbook.Views[0].RTL = true;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'freezepanes' /*case 'FreezePanes'*/: break;\n\t\t\t\t\tcase 'frozennosplit' /*case 'FrozenNoSplit'*/: break;\n\n\t\t\t\t\tcase 'splithorizontal' /*case 'SplitHorizontal'*/:\n\t\t\t\t\tcase 'splitvertical' /*case 'SplitVertical'*/:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'donotdisplaygridlines' /*case 'DoNotDisplayGridlines'*/:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'activerow' /*case 'ActiveRow'*/: break;\n\t\t\t\t\tcase 'activecol' /*case 'ActiveCol'*/: break;\n\t\t\t\t\tcase 'toprowbottompane' /*case 'TopRowBottomPane'*/: break;\n\t\t\t\t\tcase 'leftcolumnrightpane' /*case 'LeftColumnRightPane'*/: break;\n\n\t\t\t\t\tcase 'unsynced' /*case 'Unsynced'*/: break;\n\t\t\t\t\tcase 'print' /*case 'Print'*/: break;\n\t\t\t\t\tcase 'printerrors' /*case 'PrintErrors'*/: break;\n\t\t\t\t\tcase 'panes' /*case 'Panes'*/: break;\n\t\t\t\t\tcase 'scale' /*case 'Scale'*/: break;\n\t\t\t\t\tcase 'pane' /*case 'Pane'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'layout' /*case 'Layout'*/: break;\n\t\t\t\t\tcase 'pagesetup' /*case 'PageSetup'*/: break;\n\t\t\t\t\tcase 'selected' /*case 'Selected'*/: break;\n\t\t\t\t\tcase 'protectobjects' /*case 'ProtectObjects'*/: break;\n\t\t\t\t\tcase 'enableselection' /*case 'EnableSelection'*/: break;\n\t\t\t\t\tcase 'protectscenarios' /*case 'ProtectScenarios'*/: break;\n\t\t\t\t\tcase 'validprinterinfo' /*case 'ValidPrinterInfo'*/: break;\n\t\t\t\t\tcase 'horizontalresolution' /*case 'HorizontalResolution'*/: break;\n\t\t\t\t\tcase 'verticalresolution' /*case 'VerticalResolution'*/: break;\n\t\t\t\t\tcase 'numberofcopies' /*case 'NumberofCopies'*/: break;\n\t\t\t\t\tcase 'activepane' /*case 'ActivePane'*/: break;\n\t\t\t\t\tcase 'toprowvisible' /*case 'TopRowVisible'*/: break;\n\t\t\t\t\tcase 'leftcolumnvisible' /*case 'LeftColumnVisible'*/: break;\n\t\t\t\t\tcase 'fittopage' /*case 'FitToPage'*/: break;\n\t\t\t\t\tcase 'rangeselection' /*case 'RangeSelection'*/: break;\n\t\t\t\t\tcase 'papersizeindex' /*case 'PaperSizeIndex'*/: break;\n\t\t\t\t\tcase 'pagelayoutzoom' /*case 'PageLayoutZoom'*/: break;\n\t\t\t\t\tcase 'pagebreakzoom' /*case 'PageBreakZoom'*/: break;\n\t\t\t\t\tcase 'filteron' /*case 'FilterOn'*/: break;\n\t\t\t\t\tcase 'fitwidth' /*case 'FitWidth'*/: break;\n\t\t\t\t\tcase 'fitheight' /*case 'FitHeight'*/: break;\n\t\t\t\t\tcase 'commentslayout' /*case 'CommentsLayout'*/: break;\n\t\t\t\t\tcase 'zoom' /*case 'Zoom'*/: break;\n\t\t\t\t\tcase 'lefttoright' /*case 'LeftToRight'*/: break;\n\t\t\t\t\tcase 'gridlines' /*case 'Gridlines'*/: break;\n\t\t\t\t\tcase 'allowsort' /*case 'AllowSort'*/: break;\n\t\t\t\t\tcase 'allowfilter' /*case 'AllowFilter'*/: break;\n\t\t\t\t\tcase 'allowinsertrows' /*case 'AllowInsertRows'*/: break;\n\t\t\t\t\tcase 'allowdeleterows' /*case 'AllowDeleteRows'*/: break;\n\t\t\t\t\tcase 'allowinsertcols' /*case 'AllowInsertCols'*/: break;\n\t\t\t\t\tcase 'allowdeletecols' /*case 'AllowDeleteCols'*/: break;\n\t\t\t\t\tcase 'allowinserthyperlinks' /*case 'AllowInsertHyperlinks'*/: break;\n\t\t\t\t\tcase 'allowformatcells' /*case 'AllowFormatCells'*/: break;\n\t\t\t\t\tcase 'allowsizecols' /*case 'AllowSizeCols'*/: break;\n\t\t\t\t\tcase 'allowsizerows' /*case 'AllowSizeRows'*/: break;\n\t\t\t\t\tcase 'nosummaryrowsbelowdetail' /*case 'NoSummaryRowsBelowDetail'*/:\n\t\t\t\t\t\tif(!cursheet[\"!outline\"]) cursheet[\"!outline\"] = {};\n\t\t\t\t\t\tcursheet[\"!outline\"].above = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'tabcolorindex' /*case 'TabColorIndex'*/: break;\n\t\t\t\t\tcase 'donotdisplayheadings' /*case 'DoNotDisplayHeadings'*/: break;\n\t\t\t\t\tcase 'showpagelayoutzoom' /*case 'ShowPageLayoutZoom'*/: break;\n\t\t\t\t\tcase 'nosummarycolumnsrightdetail' /*case 'NoSummaryColumnsRightDetail'*/:\n\t\t\t\t\t\tif(!cursheet[\"!outline\"]) cursheet[\"!outline\"] = {};\n\t\t\t\t\t\tcursheet[\"!outline\"].left = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'blackandwhite' /*case 'BlackAndWhite'*/: break;\n\t\t\t\t\tcase 'donotdisplayzeros' /*case 'DoNotDisplayZeros'*/: break;\n\t\t\t\t\tcase 'displaypagebreak' /*case 'DisplayPageBreak'*/: break;\n\t\t\t\t\tcase 'rowcolheadings' /*case 'RowColHeadings'*/: break;\n\t\t\t\t\tcase 'donotdisplayoutline' /*case 'DoNotDisplayOutline'*/: break;\n\t\t\t\t\tcase 'noorientation' /*case 'NoOrientation'*/: break;\n\t\t\t\t\tcase 'allowusepivottables' /*case 'AllowUsePivotTables'*/: break;\n\t\t\t\t\tcase 'zeroheight' /*case 'ZeroHeight'*/: break;\n\t\t\t\t\tcase 'viewablerange' /*case 'ViewableRange'*/: break;\n\t\t\t\t\tcase 'selection' /*case 'Selection'*/: break;\n\t\t\t\t\tcase 'protectcontents' /*case 'ProtectContents'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* PivotTable */\n\t\t\t\tcase 'pivottable' /*case 'PivotTable'*/: case 'pivotcache' /*case 'PivotCache'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'immediateitemsondrop' /*case 'ImmediateItemsOnDrop'*/: break;\n\t\t\t\t\tcase 'showpagemultipleitemlabel' /*case 'ShowPageMultipleItemLabel'*/: break;\n\t\t\t\t\tcase 'compactrowindent' /*case 'CompactRowIndent'*/: break;\n\t\t\t\t\tcase 'location' /*case 'Location'*/: break;\n\t\t\t\t\tcase 'pivotfield' /*case 'PivotField'*/: break;\n\t\t\t\t\tcase 'orientation' /*case 'Orientation'*/: break;\n\t\t\t\t\tcase 'layoutform' /*case 'LayoutForm'*/: break;\n\t\t\t\t\tcase 'layoutsubtotallocation' /*case 'LayoutSubtotalLocation'*/: break;\n\t\t\t\t\tcase 'layoutcompactrow' /*case 'LayoutCompactRow'*/: break;\n\t\t\t\t\tcase 'position' /*case 'Position'*/: break;\n\t\t\t\t\tcase 'pivotitem' /*case 'PivotItem'*/: break;\n\t\t\t\t\tcase 'datatype' /*case 'DataType'*/: break;\n\t\t\t\t\tcase 'datafield' /*case 'DataField'*/: break;\n\t\t\t\t\tcase 'sourcename' /*case 'SourceName'*/: break;\n\t\t\t\t\tcase 'parentfield' /*case 'ParentField'*/: break;\n\t\t\t\t\tcase 'ptlineitems' /*case 'PTLineItems'*/: break;\n\t\t\t\t\tcase 'ptlineitem' /*case 'PTLineItem'*/: break;\n\t\t\t\t\tcase 'countofsameitems' /*case 'CountOfSameItems'*/: break;\n\t\t\t\t\tcase 'item' /*case 'Item'*/: break;\n\t\t\t\t\tcase 'itemtype' /*case 'ItemType'*/: break;\n\t\t\t\t\tcase 'ptsource' /*case 'PTSource'*/: break;\n\t\t\t\t\tcase 'cacheindex' /*case 'CacheIndex'*/: break;\n\t\t\t\t\tcase 'consolidationreference' /*case 'ConsolidationReference'*/: break;\n\t\t\t\t\tcase 'filename' /*case 'FileName'*/: break;\n\t\t\t\t\tcase 'reference' /*case 'Reference'*/: break;\n\t\t\t\t\tcase 'nocolumngrand' /*case 'NoColumnGrand'*/: break;\n\t\t\t\t\tcase 'norowgrand' /*case 'NoRowGrand'*/: break;\n\t\t\t\t\tcase 'blanklineafteritems' /*case 'BlankLineAfterItems'*/: break;\n\t\t\t\t\tcase 'hidden' /*case 'Hidden'*/: break;\n\t\t\t\t\tcase 'subtotal' /*case 'Subtotal'*/: break;\n\t\t\t\t\tcase 'basefield' /*case 'BaseField'*/: break;\n\t\t\t\t\tcase 'mapchilditems' /*case 'MapChildItems'*/: break;\n\t\t\t\t\tcase 'function' /*case 'Function'*/: break;\n\t\t\t\t\tcase 'refreshonfileopen' /*case 'RefreshOnFileOpen'*/: break;\n\t\t\t\t\tcase 'printsettitles' /*case 'PrintSetTitles'*/: break;\n\t\t\t\t\tcase 'mergelabels' /*case 'MergeLabels'*/: break;\n\t\t\t\t\tcase 'defaultversion' /*case 'DefaultVersion'*/: break;\n\t\t\t\t\tcase 'refreshname' /*case 'RefreshName'*/: break;\n\t\t\t\t\tcase 'refreshdate' /*case 'RefreshDate'*/: break;\n\t\t\t\t\tcase 'refreshdatecopy' /*case 'RefreshDateCopy'*/: break;\n\t\t\t\t\tcase 'versionlastrefresh' /*case 'VersionLastRefresh'*/: break;\n\t\t\t\t\tcase 'versionlastupdate' /*case 'VersionLastUpdate'*/: break;\n\t\t\t\t\tcase 'versionupdateablemin' /*case 'VersionUpdateableMin'*/: break;\n\t\t\t\t\tcase 'versionrefreshablemin' /*case 'VersionRefreshableMin'*/: break;\n\t\t\t\t\tcase 'calculation' /*case 'Calculation'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* PageBreaks */\n\t\t\t\tcase 'pagebreaks' /*case 'PageBreaks'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'colbreaks' /*case 'ColBreaks'*/: break;\n\t\t\t\t\tcase 'colbreak' /*case 'ColBreak'*/: break;\n\t\t\t\t\tcase 'rowbreaks' /*case 'RowBreaks'*/: break;\n\t\t\t\t\tcase 'rowbreak' /*case 'RowBreak'*/: break;\n\t\t\t\t\tcase 'colstart' /*case 'ColStart'*/: break;\n\t\t\t\t\tcase 'colend' /*case 'ColEnd'*/: break;\n\t\t\t\t\tcase 'rowend' /*case 'RowEnd'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* AutoFilter */\n\t\t\t\tcase 'autofilter' /*case 'AutoFilter'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'autofiltercolumn' /*case 'AutoFilterColumn'*/: break;\n\t\t\t\t\tcase 'autofiltercondition' /*case 'AutoFilterCondition'*/: break;\n\t\t\t\t\tcase 'autofilterand' /*case 'AutoFilterAnd'*/: break;\n\t\t\t\t\tcase 'autofilteror' /*case 'AutoFilterOr'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* QueryTable */\n\t\t\t\tcase 'querytable' /*case 'QueryTable'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'id' /*case 'Id'*/: break;\n\t\t\t\t\tcase 'autoformatfont' /*case 'AutoFormatFont'*/: break;\n\t\t\t\t\tcase 'autoformatpattern' /*case 'AutoFormatPattern'*/: break;\n\t\t\t\t\tcase 'querysource' /*case 'QuerySource'*/: break;\n\t\t\t\t\tcase 'querytype' /*case 'QueryType'*/: break;\n\t\t\t\t\tcase 'enableredirections' /*case 'EnableRedirections'*/: break;\n\t\t\t\t\tcase 'refreshedinxl9' /*case 'RefreshedInXl9'*/: break;\n\t\t\t\t\tcase 'urlstring' /*case 'URLString'*/: break;\n\t\t\t\t\tcase 'htmltables' /*case 'HTMLTables'*/: break;\n\t\t\t\t\tcase 'connection' /*case 'Connection'*/: break;\n\t\t\t\t\tcase 'commandtext' /*case 'CommandText'*/: break;\n\t\t\t\t\tcase 'refreshinfo' /*case 'RefreshInfo'*/: break;\n\t\t\t\t\tcase 'notitles' /*case 'NoTitles'*/: break;\n\t\t\t\t\tcase 'nextid' /*case 'NextId'*/: break;\n\t\t\t\t\tcase 'columninfo' /*case 'ColumnInfo'*/: break;\n\t\t\t\t\tcase 'overwritecells' /*case 'OverwriteCells'*/: break;\n\t\t\t\t\tcase 'donotpromptforfile' /*case 'DoNotPromptForFile'*/: break;\n\t\t\t\t\tcase 'textwizardsettings' /*case 'TextWizardSettings'*/: break;\n\t\t\t\t\tcase 'source' /*case 'Source'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'decimal' /*case 'Decimal'*/: break;\n\t\t\t\t\tcase 'thousandseparator' /*case 'ThousandSeparator'*/: break;\n\t\t\t\t\tcase 'trailingminusnumbers' /*case 'TrailingMinusNumbers'*/: break;\n\t\t\t\t\tcase 'formatsettings' /*case 'FormatSettings'*/: break;\n\t\t\t\t\tcase 'fieldtype' /*case 'FieldType'*/: break;\n\t\t\t\t\tcase 'delimiters' /*case 'Delimiters'*/: break;\n\t\t\t\t\tcase 'tab' /*case 'Tab'*/: break;\n\t\t\t\t\tcase 'comma' /*case 'Comma'*/: break;\n\t\t\t\t\tcase 'autoformatname' /*case 'AutoFormatName'*/: break;\n\t\t\t\t\tcase 'versionlastedit' /*case 'VersionLastEdit'*/: break;\n\t\t\t\t\tcase 'versionlastrefresh' /*case 'VersionLastRefresh'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\tcase 'datavalidation' /*case 'DataValidation'*/:\n\t\t\t\tswitch(Rn[3]) {\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\n\t\t\t\t\tcase 'type' /*case 'Type'*/: break;\n\t\t\t\t\tcase 'min' /*case 'Min'*/: break;\n\t\t\t\t\tcase 'max' /*case 'Max'*/: break;\n\t\t\t\t\tcase 'sort' /*case 'Sort'*/: break;\n\t\t\t\t\tcase 'descending' /*case 'Descending'*/: break;\n\t\t\t\t\tcase 'order' /*case 'Order'*/: break;\n\t\t\t\t\tcase 'casesensitive' /*case 'CaseSensitive'*/: break;\n\t\t\t\t\tcase 'value' /*case 'Value'*/: break;\n\t\t\t\t\tcase 'errorstyle' /*case 'ErrorStyle'*/: break;\n\t\t\t\t\tcase 'errormessage' /*case 'ErrorMessage'*/: break;\n\t\t\t\t\tcase 'errortitle' /*case 'ErrorTitle'*/: break;\n\t\t\t\t\tcase 'inputmessage' /*case 'InputMessage'*/: break;\n\t\t\t\t\tcase 'inputtitle' /*case 'InputTitle'*/: break;\n\t\t\t\t\tcase 'combohide' /*case 'ComboHide'*/: break;\n\t\t\t\t\tcase 'inputhide' /*case 'InputHide'*/: break;\n\t\t\t\t\tcase 'condition' /*case 'Condition'*/: break;\n\t\t\t\t\tcase 'qualifier' /*case 'Qualifier'*/: break;\n\t\t\t\t\tcase 'useblank' /*case 'UseBlank'*/: break;\n\t\t\t\t\tcase 'value1' /*case 'Value1'*/: break;\n\t\t\t\t\tcase 'value2' /*case 'Value2'*/: break;\n\t\t\t\t\tcase 'format' /*case 'Format'*/: break;\n\n\t\t\t\t\tcase 'cellrangelist' /*case 'CellRangeList'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\tcase 'sorting' /*case 'Sorting'*/:\n\t\t\t\tcase 'conditionalformatting' /*case 'ConditionalFormatting'*/:\n\t\t\t\tswitch(Rn[3]) {\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\t\t\t\t\tcase 'type' /*case 'Type'*/: break;\n\t\t\t\t\tcase 'min' /*case 'Min'*/: break;\n\t\t\t\t\tcase 'max' /*case 'Max'*/: break;\n\t\t\t\t\tcase 'sort' /*case 'Sort'*/: break;\n\t\t\t\t\tcase 'descending' /*case 'Descending'*/: break;\n\t\t\t\t\tcase 'order' /*case 'Order'*/: break;\n\t\t\t\t\tcase 'casesensitive' /*case 'CaseSensitive'*/: break;\n\t\t\t\t\tcase 'value' /*case 'Value'*/: break;\n\t\t\t\t\tcase 'errorstyle' /*case 'ErrorStyle'*/: break;\n\t\t\t\t\tcase 'errormessage' /*case 'ErrorMessage'*/: break;\n\t\t\t\t\tcase 'errortitle' /*case 'ErrorTitle'*/: break;\n\t\t\t\t\tcase 'cellrangelist' /*case 'CellRangeList'*/: break;\n\t\t\t\t\tcase 'inputmessage' /*case 'InputMessage'*/: break;\n\t\t\t\t\tcase 'inputtitle' /*case 'InputTitle'*/: break;\n\t\t\t\t\tcase 'combohide' /*case 'ComboHide'*/: break;\n\t\t\t\t\tcase 'inputhide' /*case 'InputHide'*/: break;\n\t\t\t\t\tcase 'condition' /*case 'Condition'*/: break;\n\t\t\t\t\tcase 'qualifier' /*case 'Qualifier'*/: break;\n\t\t\t\t\tcase 'useblank' /*case 'UseBlank'*/: break;\n\t\t\t\t\tcase 'value1' /*case 'Value1'*/: break;\n\t\t\t\t\tcase 'value2' /*case 'Value2'*/: break;\n\t\t\t\t\tcase 'format' /*case 'Format'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* MapInfo (schema) */\n\t\t\t\tcase 'mapinfo' /*case 'MapInfo'*/: case 'schema' /*case 'Schema'*/: case 'data' /*case 'data'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'map' /*case 'Map'*/: break;\n\t\t\t\t\tcase 'entry' /*case 'Entry'*/: break;\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\t\t\t\t\tcase 'xpath' /*case 'XPath'*/: break;\n\t\t\t\t\tcase 'field' /*case 'Field'*/: break;\n\t\t\t\t\tcase 'xsdtype' /*case 'XSDType'*/: break;\n\t\t\t\t\tcase 'filteron' /*case 'FilterOn'*/: break;\n\t\t\t\t\tcase 'aggregate' /*case 'Aggregate'*/: break;\n\t\t\t\t\tcase 'elementtype' /*case 'ElementType'*/: break;\n\t\t\t\t\tcase 'attributetype' /*case 'AttributeType'*/: break;\n\t\t\t\t/* These are from xsd (XML Schema Definition) */\n\t\t\t\t\tcase 'schema' /*case 'schema'*/:\n\t\t\t\t\tcase 'element' /*case 'element'*/:\n\t\t\t\t\tcase 'complextype' /*case 'complexType'*/:\n\t\t\t\t\tcase 'datatype' /*case 'datatype'*/:\n\t\t\t\t\tcase 'all' /*case 'all'*/:\n\t\t\t\t\tcase 'attribute' /*case 'attribute'*/:\n\t\t\t\t\tcase 'extends' /*case 'extends'*/: break;\n\n\t\t\t\t\tcase 'row' /*case 'row'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* SmartTags (can be anything) */\n\t\t\t\tcase 'smarttags' /*case 'SmartTags'*/: break;\n\n\t\t\t\tdefault: seen = false; break;\n\t\t\t}\n\t\t\tif(seen) break;\n\t\t\t/* CustomDocumentProperties */\n\t\t\tif(Rn[3].match(/!\\[CDATA/)) break;\n\t\t\tif(!state[state.length-1][1]) throw 'Unrecognized tag: ' + Rn[3] + \"|\" + state.join(\"|\");\n\t\t\tif(state[state.length-1][0]===/*'CustomDocumentProperties'*/'customdocumentproperties') {\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\t\telse if(Rn[1]===\"/\") xlml_set_custprop(Custprops, raw_Rn3, cp, str.slice(pidx, Rn.index));\n\t\t\t\telse { cp = Rn; pidx = Rn.index + Rn[0].length; }\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(opts.WTF) throw 'Unrecognized tag: ' + Rn[3] + \"|\" + state.join(\"|\");\n\t}\n\tvar out = ({}/*:any*/);\n\tif(!opts.bookSheets && !opts.bookProps) out.Sheets = sheets;\n\tout.SheetNames = sheetnames;\n\tout.Workbook = Workbook;\n\tout.SSF = dup(table_fmt);\n\tout.Props = Props;\n\tout.Custprops = Custprops;\n\tout.bookType = \"xlml\";\n\treturn out;\n}\n\nfunction parse_xlml(data/*:RawBytes|string*/, opts)/*:Workbook*/ {\n\tfix_read_opts(opts=opts||{});\n\tswitch(opts.type||\"base64\") {\n\t\tcase \"base64\": return parse_xlml_xml(Base64_decode(data), opts);\n\t\tcase \"binary\": case \"buffer\": case \"file\": return parse_xlml_xml(data, opts);\n\t\tcase \"array\": return parse_xlml_xml(a2s(data), opts);\n\t}\n\t/*:: throw new Error(\"unsupported type \" + opts.type); */\n}\n\n/* TODO */\nfunction write_props_xlml(wb/*:Workbook*/, opts)/*:string*/ {\n\tvar o/*:Array<string>*/ = [];\n\t/* DocumentProperties */\n\tif(wb.Props) o.push(xlml_write_docprops(wb.Props, opts));\n\t/* CustomDocumentProperties */\n\tif(wb.Custprops) o.push(xlml_write_custprops(wb.Props, wb.Custprops, opts));\n\treturn o.join(\"\");\n}\n/* TODO */\nfunction write_wb_xlml(wb/*::, opts*/)/*:string*/ {\n\t/* OfficeDocumentSettings */\n\t/* ExcelWorkbook */\n\tif((((wb||{}).Workbook||{}).WBProps||{}).date1904) return '<ExcelWorkbook xmlns=\"urn:schemas-microsoft-com:office:excel\"><Date1904/></ExcelWorkbook>';\n\treturn \"\";\n}\n/* TODO */\nfunction write_sty_xlml(wb, opts)/*:string*/ {\n\t/* Styles */\n\tvar styles/*:Array<string>*/ = ['<Style ss:ID=\"Default\" ss:Name=\"Normal\"><NumberFormat/></Style>'];\n\topts.cellXfs.forEach(function(xf, id) {\n\t\tvar payload/*:Array<string>*/ = [];\n\t\tpayload.push(writextag('NumberFormat', null, {\"ss:Format\": escapexml(table_fmt[xf.numFmtId])}));\n\n\t\tvar o = /*::(*/{\"ss:ID\": \"s\" + (21+id)}/*:: :any)*/;\n\t\tstyles.push(writextag('Style', payload.join(\"\"), o));\n\t});\n\treturn writextag(\"Styles\", styles.join(\"\"));\n}\nfunction write_name_xlml(n) { return writextag(\"NamedRange\", null, {\"ss:Name\": n.Name.slice(0,6) == \"_xlnm.\" ? n.Name.slice(6) : n.Name, \"ss:RefersTo\":\"=\" + a1_to_rc(n.Ref, {r:0,c:0})}); }\nfunction write_names_xlml(wb/*::, opts*/)/*:string*/ {\n\tif(!((wb||{}).Workbook||{}).Names) return \"\";\n\t/*:: if(!wb || !wb.Workbook || !wb.Workbook.Names) throw new Error(\"unreachable\"); */\n\tvar names/*:Array<any>*/ = wb.Workbook.Names;\n\tvar out/*:Array<string>*/ = [];\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar n = names[i];\n\t\tif(n.Sheet != null) continue;\n\t\tif(n.Name.match(/^_xlfn\\./)) continue;\n\t\tout.push(write_name_xlml(n));\n\t}\n\treturn writextag(\"Names\", out.join(\"\"));\n}\nfunction write_ws_xlml_names(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*/)/*:string*/ {\n\tif(!ws) return \"\";\n\tif(!((wb||{}).Workbook||{}).Names) return \"\";\n\t/*:: if(!wb || !wb.Workbook || !wb.Workbook.Names) throw new Error(\"unreachable\"); */\n\tvar names/*:Array<any>*/ = wb.Workbook.Names;\n\tvar out/*:Array<string>*/ = [];\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar n = names[i];\n\t\tif(n.Sheet != idx) continue;\n\t\t/*switch(n.Name) {\n\t\t\tcase \"_\": continue;\n\t\t}*/\n\t\tif(n.Name.match(/^_xlfn\\./)) continue;\n\t\tout.push(write_name_xlml(n));\n\t}\n\treturn out.join(\"\");\n}\n/* WorksheetOptions */\nfunction write_ws_xlml_wsopts(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*/)/*:string*/ {\n\tif(!ws) return \"\";\n\tvar o/*:Array<string>*/ = [];\n\t/* NOTE: spec technically allows any order, but stick with implied order */\n\n\t/* FitToPage */\n\t/* DoNotDisplayColHeaders */\n\t/* DoNotDisplayRowHeaders */\n\t/* ViewableRange */\n\t/* Selection */\n\t/* GridlineColor */\n\t/* Name */\n\t/* ExcelWorksheetType */\n\t/* IntlMacro */\n\t/* Unsynced */\n\t/* Selected */\n\t/* CodeName */\n\n\tif(ws['!margins']) {\n\t\to.push(\"<PageSetup>\");\n\t\tif(ws['!margins'].header) o.push(writextag(\"Header\", null, {'x:Margin':ws['!margins'].header}));\n\t\tif(ws['!margins'].footer) o.push(writextag(\"Footer\", null, {'x:Margin':ws['!margins'].footer}));\n\t\to.push(writextag(\"PageMargins\", null, {\n\t\t\t'x:Bottom': ws['!margins'].bottom || \"0.75\",\n\t\t\t'x:Left': ws['!margins'].left || \"0.7\",\n\t\t\t'x:Right': ws['!margins'].right || \"0.7\",\n\t\t\t'x:Top': ws['!margins'].top || \"0.75\"\n\t\t}));\n\t\to.push(\"</PageSetup>\");\n\t}\n\n\t/* PageSetup */\n\t/* DisplayPageBreak */\n\t/* TransitionExpressionEvaluation */\n\t/* TransitionFormulaEntry */\n\t/* Print */\n\t/* Zoom */\n\t/* PageLayoutZoom */\n\t/* PageBreakZoom */\n\t/* ShowPageBreakZoom */\n\t/* DefaultRowHeight */\n\t/* DefaultColumnWidth */\n\t/* StandardWidth */\n\n\tif(wb && wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx]) {\n\t\t/* Visible */\n\t\tif(wb.Workbook.Sheets[idx].Hidden) o.push(writextag(\"Visible\", (wb.Workbook.Sheets[idx].Hidden == 1 ? \"SheetHidden\" : \"SheetVeryHidden\"), {}));\n\t\telse {\n\t\t\t/* Selected */\n\t\t\tfor(var i = 0; i < idx; ++i) if(wb.Workbook.Sheets[i] && !wb.Workbook.Sheets[i].Hidden) break;\n\t\t\tif(i == idx) o.push(\"<Selected/>\");\n\t\t}\n\t}\n\n\t/* LeftColumnVisible */\n\n\tif(((((wb||{}).Workbook||{}).Views||[])[0]||{}).RTL) o.push(\"<DisplayRightToLeft/>\");\n\n\t/* GridlineColorIndex */\n\t/* DisplayFormulas */\n\t/* DoNotDisplayGridlines */\n\t/* DoNotDisplayHeadings */\n\t/* DoNotDisplayOutline */\n\t/* ApplyAutomaticOutlineStyles */\n\t/* NoSummaryRowsBelowDetail */\n\t/* NoSummaryColumnsRightDetail */\n\t/* DoNotDisplayZeros */\n\t/* ActiveRow */\n\t/* ActiveColumn */\n\t/* FilterOn */\n\t/* RangeSelection */\n\t/* TopRowVisible */\n\t/* TopRowBottomPane */\n\t/* LeftColumnRightPane */\n\t/* ActivePane */\n\t/* SplitHorizontal */\n\t/* SplitVertical */\n\t/* FreezePanes */\n\t/* FrozenNoSplit */\n\t/* TabColorIndex */\n\t/* Panes */\n\n\t/* NOTE: Password not supported in XLML Format */\n\tif(ws['!protect']) {\n\t\to.push(writetag(\"ProtectContents\", \"True\"));\n\t\tif(ws['!protect'].objects) o.push(writetag(\"ProtectObjects\", \"True\"));\n\t\tif(ws['!protect'].scenarios) o.push(writetag(\"ProtectScenarios\", \"True\"));\n\t\tif(ws['!protect'].selectLockedCells != null && !ws['!protect'].selectLockedCells) o.push(writetag(\"EnableSelection\", \"NoSelection\"));\n\t\telse if(ws['!protect'].selectUnlockedCells != null && !ws['!protect'].selectUnlockedCells) o.push(writetag(\"EnableSelection\", \"UnlockedCells\"));\n\t[\n\t\t[ \"formatCells\", \"AllowFormatCells\" ],\n\t\t[ \"formatColumns\", \"AllowSizeCols\" ],\n\t\t[ \"formatRows\", \"AllowSizeRows\" ],\n\t\t[ \"insertColumns\", \"AllowInsertCols\" ],\n\t\t[ \"insertRows\", \"AllowInsertRows\" ],\n\t\t[ \"insertHyperlinks\", \"AllowInsertHyperlinks\" ],\n\t\t[ \"deleteColumns\", \"AllowDeleteCols\" ],\n\t\t[ \"deleteRows\", \"AllowDeleteRows\" ],\n\t\t[ \"sort\", \"AllowSort\" ],\n\t\t[ \"autoFilter\", \"AllowFilter\" ],\n\t\t[ \"pivotTables\", \"AllowUsePivotTables\" ]\n\t].forEach(function(x) { if(ws['!protect'][x[0]]) o.push(\"<\"+x[1]+\"/>\"); });\n\t}\n\n\tif(o.length == 0) return \"\";\n\treturn writextag(\"WorksheetOptions\", o.join(\"\"), {xmlns:XLMLNS.x});\n}\nfunction write_ws_xlml_comment(comments/*:Array<any>*/)/*:string*/ {\n\t/* TODO: test multiple comments */\n\treturn comments.map(function(c) {\n\t\t// TODO: formatted text\n\t\tvar t = xlml_unfixstr(c.t||\"\");\n\t\tvar d =writextag(\"ss:Data\", t, {\"xmlns\":\"http://www.w3.org/TR/REC-html40\"});\n\t\tvar p = {};\n\t\tif(c.a) p[\"ss:Author\"] = c.a;\n\t\tif(!comments.hidden) p[\"ss:ShowAlways\"] = \"1\";\n\t\treturn writextag(\"Comment\", d, p);\n\t}).join(\"\");\n}\nfunction write_ws_xlml_cell(cell, ref/*:string*/, ws, opts, idx/*:number*/, wb, addr)/*:string*/{\n\tif(!cell || (cell.v == undefined && cell.f == undefined)) return \"\";\n\n\tvar attr = {};\n\tif(cell.f) attr[\"ss:Formula\"] = \"=\" + escapexml(a1_to_rc(cell.f, addr));\n\tif(cell.F && cell.F.slice(0, ref.length) == ref) {\n\t\tvar end = decode_cell(cell.F.slice(ref.length + 1));\n\t\tattr[\"ss:ArrayRange\"] = \"RC:R\" + (end.r == addr.r ? \"\" : \"[\" + (end.r - addr.r) + \"]\") + \"C\" + (end.c == addr.c ? \"\" : \"[\" + (end.c - addr.c) + \"]\");\n\t}\n\n\tif(cell.l && cell.l.Target) {\n\t\tattr[\"ss:HRef\"] = escapexml(cell.l.Target);\n\t\tif(cell.l.Tooltip) attr[\"x:HRefScreenTip\"] = escapexml(cell.l.Tooltip);\n\t}\n\n\tif(ws['!merges']) {\n\t\tvar marr = ws['!merges'];\n\t\tfor(var mi = 0; mi != marr.length; ++mi) {\n\t\t\tif(marr[mi].s.c != addr.c || marr[mi].s.r != addr.r) continue;\n\t\t\tif(marr[mi].e.c > marr[mi].s.c) attr['ss:MergeAcross'] = marr[mi].e.c - marr[mi].s.c;\n\t\t\tif(marr[mi].e.r > marr[mi].s.r) attr['ss:MergeDown'] = marr[mi].e.r - marr[mi].s.r;\n\t\t}\n\t}\n\n\tvar t = \"\", p = \"\";\n\tswitch(cell.t) {\n\t\tcase 'z': if(!opts.sheetStubs) return \"\"; break;\n\t\tcase 'n': t = 'Number'; p = String(cell.v); break;\n\t\tcase 'b': t = 'Boolean'; p = (cell.v ? \"1\" : \"0\"); break;\n\t\tcase 'e': t = 'Error'; p = BErr[cell.v]; break;\n\t\tcase 'd': t = 'DateTime'; p = new Date(cell.v).toISOString(); if(cell.z == null) cell.z = cell.z || table_fmt[14]; break;\n\t\tcase 's': t = 'String'; p = escapexlml(cell.v||\"\"); break;\n\t}\n\t/* TODO: cell style */\n\tvar os = get_cell_style(opts.cellXfs, cell, opts);\n\tattr[\"ss:StyleID\"] = \"s\" + (21+os);\n\tattr[\"ss:Index\"] = addr.c + 1;\n\tvar _v = (cell.v != null ? p : \"\");\n\tvar m = cell.t == 'z' ? \"\" : ('<Data ss:Type=\"' + t + '\">' + _v + '</Data>');\n\n\tif((cell.c||[]).length > 0) m += write_ws_xlml_comment(cell.c);\n\n\treturn writextag(\"Cell\", m, attr);\n}\nfunction write_ws_xlml_row(R/*:number*/, row)/*:string*/ {\n\tvar o = '<Row ss:Index=\"' + (R+1) + '\"';\n\tif(row) {\n\t\tif(row.hpt && !row.hpx) row.hpx = pt2px(row.hpt);\n\t\tif(row.hpx) o += ' ss:AutoFitHeight=\"0\" ss:Height=\"' + row.hpx + '\"';\n\t\tif(row.hidden) o += ' ss:Hidden=\"1\"';\n\t}\n\treturn o + '>';\n}\n/* TODO */\nfunction write_ws_xlml_table(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*/)/*:string*/ {\n\tif(!ws['!ref']) return \"\";\n\tvar range/*:Range*/ = safe_decode_range(ws['!ref']);\n\tvar marr/*:Array<Range>*/ = ws['!merges'] || [], mi = 0;\n\tvar o/*:Array<string>*/ = [];\n\tif(ws['!cols']) ws['!cols'].forEach(function(n, i) {\n\t\tprocess_col(n);\n\t\tvar w = !!n.width;\n\t\tvar p = col_obj_w(i, n);\n\t\tvar k/*:any*/ = {\"ss:Index\":i+1};\n\t\tif(w) k['ss:Width'] = width2px(p.width);\n\t\tif(n.hidden) k['ss:Hidden']=\"1\";\n\t\to.push(writextag(\"Column\",null,k));\n\t});\n\tvar dense = ws[\"!data\"] != null;\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\tvar row = [write_ws_xlml_row(R, (ws['!rows']||[])[R])];\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tvar skip = false;\n\t\t\tfor(mi = 0; mi != marr.length; ++mi) {\n\t\t\t\tif(marr[mi].s.c > C) continue;\n\t\t\t\tif(marr[mi].s.r > R) continue;\n\t\t\t\tif(marr[mi].e.c < C) continue;\n\t\t\t\tif(marr[mi].e.r < R) continue;\n\t\t\t\tif(marr[mi].s.c != C || marr[mi].s.r != R) skip = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(skip) continue;\n\t\t\tvar addr = {r:R,c:C};\n\t\t\tvar ref = encode_col(C) + encode_row(R), cell = dense ? (ws[\"!data\"][R]||[])[C] : ws[ref];\n\t\t\trow.push(write_ws_xlml_cell(cell, ref, ws, opts, idx, wb, addr));\n\t\t}\n\t\trow.push(\"</Row>\");\n\t\tif(row.length > 2) o.push(row.join(\"\"));\n\t}\n\treturn o.join(\"\");\n}\nfunction write_ws_xlml(idx/*:number*/, opts, wb/*:Workbook*/)/*:string*/ {\n\tvar o/*:Array<string>*/ = [];\n\tvar s = wb.SheetNames[idx];\n\tvar ws = wb.Sheets[s];\n\n\tvar t/*:string*/ = ws ? write_ws_xlml_names(ws, opts, idx, wb) : \"\";\n\tif(t.length > 0) o.push(\"<Names>\" + t + \"</Names>\");\n\n\t/* Table */\n\tt = ws ? write_ws_xlml_table(ws, opts, idx, wb) : \"\";\n\tif(t.length > 0) o.push(\"<Table>\" + t + \"</Table>\");\n\n\t/* WorksheetOptions */\n\to.push(write_ws_xlml_wsopts(ws, opts, idx, wb));\n\n\tif(ws[\"!autofilter\"]) o.push('<AutoFilter x:Range=\"' + a1_to_rc(fix_range(ws[\"!autofilter\"].ref), {r:0,c:0}) + '\" xmlns=\"urn:schemas-microsoft-com:office:excel\"></AutoFilter>');\n\n\treturn o.join(\"\");\n}\nfunction write_xlml(wb, opts)/*:string*/ {\n\tif(!opts) opts = {};\n\tif(!wb.SSF) wb.SSF = dup(table_fmt);\n\tif(wb.SSF) {\n\t\tmake_ssf(); SSF_load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\topts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;\n\t\topts.ssf = wb.SSF;\n\t\topts.cellXfs = [];\n\t\tget_cell_style(opts.cellXfs, {}, {revssf:{\"General\":0}});\n\t}\n\tvar d/*:Array<string>*/ = [];\n\td.push(write_props_xlml(wb, opts));\n\td.push(write_wb_xlml(wb, opts));\n\td.push(\"\");\n\td.push(\"\");\n\tfor(var i = 0; i < wb.SheetNames.length; ++i)\n\t\td.push(writextag(\"Worksheet\", write_ws_xlml(i, opts, wb), {\"ss:Name\":escapexml(wb.SheetNames[i])}));\n\td[2] = write_sty_xlml(wb, opts);\n\td[3] = write_names_xlml(wb, opts);\n\treturn XML_HEADER + writextag(\"Workbook\", d.join(\"\"), {\n\t\t'xmlns':      XLMLNS.ss,\n\t\t'xmlns:o':    XLMLNS.o,\n\t\t'xmlns:x':    XLMLNS.x,\n\t\t'xmlns:ss':   XLMLNS.ss,\n\t\t'xmlns:dt':   XLMLNS.dt,\n\t\t'xmlns:html': XLMLNS.html\n\t});\n}\n/* [MS-OLEDS] 2.3.8 CompObjStream */\nfunction parse_compobj(obj/*:CFBEntry*/) {\n\tvar v = {};\n\tvar o = obj.content;\n\t/*:: if(o == null) return; */\n\n\t/* [MS-OLEDS] 2.3.7 CompObjHeader -- All fields MUST be ignored */\n\to.l = 28;\n\n\tv.AnsiUserType = o.read_shift(0, \"lpstr-ansi\");\n\tv.AnsiClipboardFormat = parse_ClipboardFormatOrAnsiString(o);\n\n\tif(o.length - o.l <= 4) return v;\n\n\tvar m/*:number*/ = o.read_shift(4);\n\tif(m == 0 || m > 40) return v;\n\to.l-=4; v.Reserved1 = o.read_shift(0, \"lpstr-ansi\");\n\n\tif(o.length - o.l <= 4) return v;\n\tm = o.read_shift(4);\n\tif(m !== 0x71b239f4) return v;\n\tv.UnicodeClipboardFormat = parse_ClipboardFormatOrUnicodeString(o);\n\n\tm = o.read_shift(4);\n\tif(m == 0 || m > 40) return v;\n\to.l-=4; v.Reserved2 = o.read_shift(0, \"lpwstr\");\n}\n\n/*\n\tContinue logic for:\n\t- 2.4.58 Continue          0x003c\n\t- 2.4.59 ContinueBigName   0x043c\n\t- 2.4.60 ContinueFrt       0x0812\n\t- 2.4.61 ContinueFrt11     0x0875\n\t- 2.4.62 ContinueFrt12     0x087f\n*/\nvar CONTINUE_RT = [ 0x003c, 0x043c, 0x0812, 0x0875, 0x087f ];\nfunction slurp(RecordType, R, blob, length/*:number*/, opts)/*:any*/ {\n\tvar l = length;\n\tvar bufs = [];\n\tvar d = blob.slice(blob.l,blob.l+l);\n\tif(opts && opts.enc && opts.enc.insitu && d.length > 0) switch(RecordType) {\n\tcase 0x0009: case 0x0209: case 0x0409: case 0x0809/* BOF */: case 0x002F /* FilePass */: case 0x0195 /* FileLock */: case 0x00E1 /* InterfaceHdr */: case 0x0196 /* RRDInfo */: case 0x0138 /* RRDHead */: case 0x0194 /* UsrExcl */: case 0x000a /* EOF */:\n\t\tbreak;\n\tcase 0x0085 /* BoundSheet8 */:\n\t\tbreak;\n\tdefault:\n\t\topts.enc.insitu(d);\n\t}\n\tbufs.push(d);\n\tblob.l += l;\n\tvar nextrt = __readUInt16LE(blob,blob.l), next = XLSRecordEnum[nextrt];\n\tvar start = 0;\n\twhile(next != null && CONTINUE_RT.indexOf(nextrt) > -1) {\n\t\tl = __readUInt16LE(blob,blob.l+2);\n\t\tstart = blob.l + 4;\n\t\tif(nextrt == 0x0812 /* ContinueFrt */) start += 4;\n\t\telse if(nextrt == 0x0875 || nextrt == 0x087f) {\n\t\t\tstart += 12;\n\t\t}\n\t\td = blob.slice(start,blob.l+4+l);\n\t\tbufs.push(d);\n\t\tblob.l += 4+l;\n\t\tnext = (XLSRecordEnum[nextrt = __readUInt16LE(blob, blob.l)]);\n\t}\n\tvar b = (bconcat(bufs)/*:any*/);\n\tprep_blob(b, 0);\n\tvar ll = 0; b.lens = [];\n\tfor(var j = 0; j < bufs.length; ++j) { b.lens.push(ll); ll += bufs[j].length; }\n\tif(b.length < length) throw \"XLS Record 0x\" + RecordType.toString(16) + \" Truncated: \" + b.length + \" < \" + length;\n\treturn R.f(b, b.length, opts);\n}\n\nfunction safe_format_xf(p/*:any*/, opts/*:ParseOpts*/, date1904/*:?boolean*/) {\n\tif(p.t === 'z') return;\n\tif(!p.XF) return;\n\tvar fmtid = 0;\n\ttry {\n\t\tfmtid = p.z || p.XF.numFmtId || 0;\n\t\tif(opts.cellNF && p.z == null) p.z = table_fmt[fmtid];\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(!opts || opts.cellText !== false) try {\n\t\tif(p.t === 'e') { p.w = p.w || BErr[p.v]; }\n\t\telse if(fmtid === 0 || fmtid == \"General\") {\n\t\t\tif(p.t === 'n') {\n\t\t\t\tif((p.v|0) === p.v) p.w = p.v.toString(10);\n\t\t\t\telse p.w = SSF_general_num(p.v);\n\t\t\t}\n\t\t\telse p.w = SSF_general(p.v);\n\t\t}\n\t\telse p.w = SSF_format(fmtid,p.v, {date1904:!!date1904, dateNF: opts && opts.dateNF});\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(opts.cellDates && fmtid && p.t == 'n' && fmt_is_date(table_fmt[fmtid] || String(fmtid))) {\n\t\tvar _d = SSF_parse_date_code(p.v + (date1904 ? 1462 : 0)); if(_d) { p.t = 'd'; p.v = new Date(Date.UTC(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u)); }\n\t}\n}\n\nfunction make_cell(val, ixfe, t)/*:Cell*/ {\n\treturn ({v:val, ixfe:ixfe, t:t}/*:any*/);\n}\n\n// 2.3.2\nfunction parse_workbook(blob, options/*:ParseOpts*/)/*:Workbook*/ {\n\tvar wb = ({opts:{}}/*:any*/);\n\tvar Sheets = {};\n\tif(DENSE != null && options.dense == null) options.dense = DENSE;\n\tvar out/*:Worksheet*/ = ({}/*:any*/); if(options.dense) out[\"!data\"] = [];\n\tvar Directory = {};\n\tvar range/*:Range*/ = ({}/*:any*/);\n\tvar last_formula = null;\n\tvar sst/*:SST*/ = ([]/*:any*/);\n\tvar cur_sheet = \"\";\n\tvar Preamble = {};\n\tvar lastcell, last_cell = \"\", cc/*:Cell*/, cmnt, rngC, rngR;\n\tvar sharedf = {};\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar temp_val/*:Cell*/;\n\tvar country;\n\tvar XFs = []; /* XF records */\n\tvar palette/*:Array<[number, number, number]>*/ = [];\n\tvar Workbook/*:WBWBProps*/ = ({ Sheets:[], WBProps:{date1904:false}, Views:[{}] }/*:any*/), wsprops = {};\n\tvar biff4w = false;\n\tvar get_rgb = function getrgb(icv/*:number*/)/*:[number, number, number]*/ {\n\t\tif(icv < 8) return XLSIcv[icv];\n\t\tif(icv < 64) return palette[icv-8] || XLSIcv[icv];\n\t\treturn XLSIcv[icv];\n\t};\n\tvar process_cell_style = function pcs(line/*:any*/, options) {\n\t\tvar xfd = line.XF.data;\n\t\tif(!xfd || !xfd.patternType || !options || !options.cellStyles) return;\n\t\tline.s = ({}/*:any*/);\n\t\tline.s.patternType = xfd.patternType;\n\t\tvar t;\n\t\tif((t = rgb2Hex(get_rgb(xfd.icvFore)))) { line.s.fgColor = {rgb:t}; }\n\t\tif((t = rgb2Hex(get_rgb(xfd.icvBack)))) { line.s.bgColor = {rgb:t}; }\n\t};\n\tvar addcell = function addcell(cell/*:any*/, line/*:any*/, options/*:any*/) {\n\t\tif(!biff4w && file_depth > 1) return;\n\t\tif(options.sheetRows && cell.r >= options.sheetRows) return;\n\t\tif(options.cellStyles && line.XF && line.XF.data) process_cell_style(line, options);\n\t\tdelete line.ixfe; delete line.XF;\n\t\tlastcell = cell;\n\t\tlast_cell = encode_cell(cell);\n\t\tif(!range || !range.s || !range.e) range = {s:{r:0,c:0},e:{r:0,c:0}};\n\t\tif(cell.r < range.s.r) range.s.r = cell.r;\n\t\tif(cell.c < range.s.c) range.s.c = cell.c;\n\t\tif(cell.r + 1 > range.e.r) range.e.r = cell.r + 1;\n\t\tif(cell.c + 1 > range.e.c) range.e.c = cell.c + 1;\n\t\tif(options.cellFormula && line.f) {\n\t\t\tfor(var afi = 0; afi < arrayf.length; ++afi) {\n\t\t\t\tif(arrayf[afi][0].s.c > cell.c || arrayf[afi][0].s.r > cell.r) continue;\n\t\t\t\tif(arrayf[afi][0].e.c < cell.c || arrayf[afi][0].e.r < cell.r) continue;\n\t\t\t\tline.F = encode_range(arrayf[afi][0]);\n\t\t\t\tif(arrayf[afi][0].s.c != cell.c || arrayf[afi][0].s.r != cell.r) delete line.f;\n\t\t\t\tif(line.f) line.f = \"\" + stringify_formula(arrayf[afi][1], range, cell, supbooks, opts);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t{\n\t\t\tif(options.dense) {\n\t\t\t\tif(!out[\"!data\"][cell.r]) out[\"!data\"][cell.r] = [];\n\t\t\t\tout[\"!data\"][cell.r][cell.c] = line;\n\t\t\t} else out[last_cell] = line;\n\t\t}\n\t};\n\tvar opts = ({\n\t\tenc: false, // encrypted\n\t\tsbcch: 0, // cch in the preceding SupBook\n\t\tsnames: [], // sheetnames\n\t\tsharedf: sharedf, // shared formulae by address\n\t\tarrayf: arrayf, // array formulae array\n\t\trrtabid: [], // RRTabId\n\t\tlastuser: \"\", // Last User from WriteAccess\n\t\tbiff: 8, // BIFF version\n\t\tcodepage: 0, // CP from CodePage record\n\t\twinlocked: 0, // fLockWn from WinProtect\n\t\tcellStyles: !!options && !!options.cellStyles,\n\t\tWTF: !!options && !!options.wtf\n\t}/*:any*/);\n\tif(options.password) opts.password = options.password;\n\tvar themes;\n\tvar merges/*:Array<Range>*/ = [];\n\tvar objects = [];\n\tvar colinfo/*:Array<ColInfo>*/ = [], rowinfo/*:Array<RowInfo>*/ = [];\n\tvar seencol = false;\n\tvar supbooks = ([]/*:any*/); // 1-indexed, will hold extern names\n\tsupbooks.SheetNames = opts.snames;\n\tsupbooks.sharedf = opts.sharedf;\n\tsupbooks.arrayf = opts.arrayf;\n\tsupbooks.names = [];\n\tsupbooks.XTI = [];\n\tvar last_RT = 0;\n\tvar file_depth = 0; /* TODO: make a real stack */\n\tvar BIFF2Fmt = 0, BIFF2FmtTable/*:Array<string>*/ = [];\n\tvar FilterDatabases = []; /* TODO: sort out supbooks and process elsewhere */\n\tvar last_lbl/*:?DefinedName*/;\n\n\t/* explicit override for some broken writers */\n\topts.codepage = 1200;\n\tset_cp(1200);\n\tvar seen_codepage = false;\n\twhile(blob.l < blob.length - 1) {\n\t\tvar s = blob.l;\n\t\tvar RecordType = blob.read_shift(2);\n\t\tif(RecordType === 0 && last_RT === 0x000a /* EOF */) break;\n\t\tvar length = (blob.l === blob.length ? 0 : blob.read_shift(2));\n\t\tvar R = XLSRecordEnum[RecordType];\n\t\tif(file_depth == 0 && [0x0009, 0x0209, 0x0409, 0x0809].indexOf(RecordType) == -1 /* BOF */) break;\n\t\t//console.log(RecordType.toString(16), RecordType, R, blob.l, length, blob.length);\n\t\t//if(!R) console.log(blob.slice(blob.l, blob.l + length));\n\t\tif(R && R.f) {\n\t\t\tif(options.bookSheets) {\n\t\t\t\tif(last_RT === 0x0085 /* BoundSheet8 */ && RecordType !== 0x0085 /* R.n !== 'BoundSheet8' */) break;\n\t\t\t}\n\t\t\tlast_RT = RecordType;\n\t\t\tif(R.r === 2 || R.r == 12) {\n\t\t\t\tvar rt = blob.read_shift(2); length -= 2;\n\t\t\t\tif(!opts.enc && rt !== RecordType && (((rt&0xFF)<<8)|(rt>>8)) !== RecordType) throw new Error(\"rt mismatch: \" + rt + \"!=\" + RecordType);\n\t\t\t\tif(R.r == 12){\n\t\t\t\t\tblob.l += 10; length -= 10;\n\t\t\t\t} // skip FRT\n\t\t\t}\n\t\t\t//console.error(R,blob.l,length,blob.length);\n\t\t\tvar val/*:any*/ = ({}/*:any*/);\n\t\t\tif(RecordType === 0x000a /* EOF */) val = /*::(*/R.f(blob, length, opts)/*:: :any)*/;\n\t\t\telse val = /*::(*/slurp(RecordType, R, blob, length, opts)/*:: :any)*/;\n\t\t\t/*:: val = (val:any); */\n\t\t\tif(file_depth == 0 && [0x0009, 0x0209, 0x0409, 0x0809].indexOf(last_RT) === -1 /* BOF */) continue;\n\t\t\tswitch(RecordType) {\n\t\t\t\tcase 0x0022 /* Date1904 */:\n\t\t\t\t\t/*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */\n\t\t\t\t\twb.opts.Date1904 = Workbook.WBProps.date1904 = val; break;\n\t\t\t\tcase 0x0086 /* WriteProtect */: wb.opts.WriteProtect = true; break;\n\t\t\t\tcase 0x002f /* FilePass */:\n\t\t\t\t\tif(!opts.enc) blob.l = 0;\n\t\t\t\t\topts.enc = val;\n\t\t\t\t\tif(!options.password) throw new Error(\"File is password-protected\");\n\t\t\t\t\tif(val.valid == null) throw new Error(\"Encryption scheme unsupported\");\n\t\t\t\t\tif(!val.valid) throw new Error(\"Password is incorrect\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x005c /* WriteAccess */: opts.lastuser = val; break;\n\t\t\t\tcase 0x0042 /* CodePage */:\n\t\t\t\t\tvar cpval = Number(val);\n\t\t\t\t\t/* overrides based on test cases */\n\t\t\t\t\tswitch(cpval) {\n\t\t\t\t\t\tcase 0x5212: cpval =  1200; break;\n\t\t\t\t\t\tcase 0x8000: cpval = 10000; break;\n\t\t\t\t\t\tcase 0x8001: cpval =  1252; break;\n\t\t\t\t\t}\n\t\t\t\t\tset_cp(opts.codepage = cpval);\n\t\t\t\t\tseen_codepage = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x013d /* RRTabId */: opts.rrtabid = val; break;\n\t\t\t\tcase 0x0019 /* WinProtect */: opts.winlocked = val; break;\n\t\t\t\tcase 0x01b7 /* RefreshAll */: wb.opts[\"RefreshAll\"] = val; break;\n\t\t\t\tcase 0x000c /* CalcCount */: wb.opts[\"CalcCount\"] = val; break;\n\t\t\t\tcase 0x0010 /* CalcDelta */: wb.opts[\"CalcDelta\"] = val; break;\n\t\t\t\tcase 0x0011 /* CalcIter */: wb.opts[\"CalcIter\"] = val; break;\n\t\t\t\tcase 0x000d /* CalcMode */: wb.opts[\"CalcMode\"] = val; break;\n\t\t\t\tcase 0x000e /* CalcPrecision */: wb.opts[\"CalcPrecision\"] = val; break;\n\t\t\t\tcase 0x005f /* CalcSaveRecalc */: wb.opts[\"CalcSaveRecalc\"] = val; break;\n\t\t\t\tcase 0x000f /* CalcRefMode */: opts.CalcRefMode = val; break; // TODO: implement R1C1\n\t\t\t\tcase 0x08a3 /* ForceFullCalculation */: wb.opts.FullCalc = val; break;\n\t\t\t\tcase 0x0081 /* WsBool */:\n\t\t\t\t\tif(val.fDialog) out[\"!type\"] = \"dialog\";\n\t\t\t\t\tif(!val.fBelow) (out[\"!outline\"] || (out[\"!outline\"] = {})).above = true;\n\t\t\t\t\tif(!val.fRight) (out[\"!outline\"] || (out[\"!outline\"] = {})).left = true;\n\t\t\t\t\tbreak; // TODO\n\t\t\t\tcase 0x0043: /* BIFF2XF */ case 0x0243: /* BIFF3XF */ case 0x0443: /* BIFF4XF */\n\t\t\t\tcase 0x00e0 /* XF */:\n\t\t\t\t\tXFs.push(val); break;\n\t\t\t\tcase 0x01ae /* SupBook */:\n\t\t\t\t\tsupbooks.push([val]);\n\t\t\t\t\tsupbooks[supbooks.length-1].XTI = [];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0023: case 0x0223 /* ExternName */:\n\t\t\t\t\tsupbooks[supbooks.length-1].push(val);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0018: case 0x0218 /* Lbl */:\n\t\t\t\t\tlast_lbl = ({\n\t\t\t\t\t\tName: val.Name,\n\t\t\t\t\t\tRef: stringify_formula(val.rgce,range,null,supbooks,opts)\n\t\t\t\t\t}/*:DefinedName*/);\n\t\t\t\t\tif(val.itab > 0) last_lbl.Sheet = val.itab - 1;\n\t\t\t\t\tsupbooks.names.push(last_lbl);\n\t\t\t\t\tif(!supbooks[0]) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\t\tsupbooks[supbooks.length-1].push(val);\n\t\t\t\t\tif(val.Name == \"_xlnm._FilterDatabase\" && val.itab > 0)\n\t\t\t\t\t\tif(val.rgce && val.rgce[0] && val.rgce[0][0] && val.rgce[0][0][0] == 'PtgArea3d')\n\t\t\t\t\t\t\tFilterDatabases[val.itab - 1] = { ref: encode_range(val.rgce[0][0][1][2]) };\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0016 /* ExternCount */: opts.ExternCount = val; break;\n\t\t\t\tcase 0x0017 /* ExternSheet */:\n\t\t\t\t\tif(supbooks.length == 0) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\t\tsupbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val); supbooks.XTI = supbooks.XTI.concat(val); break;\n\t\t\t\tcase 0x0894 /* NameCmt */:\n\t\t\t\t\t/* TODO: search for correct name */\n\t\t\t\t\tif(opts.biff < 8) break;\n\t\t\t\t\tif(last_lbl != null) last_lbl.Comment = val[1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0012 /* Protect */: out[\"!protect\"] = val; break; /* for sheet or book */\n\t\t\t\tcase 0x0013 /* Password */: if(val !== 0 && opts.WTF) console.error(\"Password verifier: \" + val); break;\n\t\t\t\tcase 0x0085 /* BoundSheet8 */: {\n\t\t\t\t\tDirectory[opts.biff == 4 ? opts.snames.length : val.pos] = val;\n\t\t\t\t\topts.snames.push(val.name);\n\t\t\t\t} break;\n\t\t\t\tcase 0x000a /* EOF */: {\n\t\t\t\t\tif(--file_depth ? !biff4w : biff4w) break;\n\t\t\t\t\tif(range.e) {\n\t\t\t\t\t\tif(range.e.r > 0 && range.e.c > 0) {\n\t\t\t\t\t\t\trange.e.r--; range.e.c--;\n\t\t\t\t\t\t\tout[\"!ref\"] = encode_range(range);\n\t\t\t\t\t\t\tif(options.sheetRows && options.sheetRows <= range.e.r) {\n\t\t\t\t\t\t\t\tvar tmpri = range.e.r;\n\t\t\t\t\t\t\t\trange.e.r = options.sheetRows - 1;\n\t\t\t\t\t\t\t\tout[\"!fullref\"] = out[\"!ref\"];\n\t\t\t\t\t\t\t\tout[\"!ref\"] = encode_range(range);\n\t\t\t\t\t\t\t\trange.e.r = tmpri;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\trange.e.r++; range.e.c++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(merges.length > 0) out[\"!merges\"] = merges;\n\t\t\t\t\t\tif(objects.length > 0) out[\"!objects\"] = objects;\n\t\t\t\t\t\tif(colinfo.length > 0) out[\"!cols\"] = colinfo;\n\t\t\t\t\t\tif(rowinfo.length > 0) out[\"!rows\"] = rowinfo;\n\t\t\t\t\t\tWorkbook.Sheets.push(wsprops);\n\t\t\t\t\t}\n\t\t\t\t\tif(cur_sheet === \"\") Preamble = out; else Sheets[cur_sheet] = out;\n\t\t\t\t\tout = ({}/*:any*/); if(options.dense) out[\"!data\"] = [];\n\t\t\t\t} break;\n\t\t\t\tcase 0x0009: case 0x0209: case 0x0409: case 0x0809 /* BOF */: {\n\t\t\t\t\tif(opts.biff === 8) opts.biff = {\n\t\t\t\t\t\t0x0009: 2,\n\t\t\t\t\t\t0x0209: 3,\n\t\t\t\t\t\t0x0409: 4\n\t\t\t\t\t}[RecordType] || {\n\t\t\t\t\t\t0x0200: 2,\n\t\t\t\t\t\t0x0300: 3,\n\t\t\t\t\t\t0x0400: 4,\n\t\t\t\t\t\t0x0500: 5,\n\t\t\t\t\t\t0x0600: 8,\n\t\t\t\t\t\t0x0002: 2,\n\t\t\t\t\t\t0x0007: 2\n\t\t\t\t\t}[val.BIFFVer] || 8;\n\t\t\t\t\topts.biffguess = val.BIFFVer == 0;\n\t\t\t\t\tif(val.BIFFVer == 0 && val.dt == 0x1000) { opts.biff = 5; seen_codepage = true; set_cp(opts.codepage = 28591); }\n\t\t\t\t\tif(opts.biff == 4 && val.dt & 0x100) biff4w = true;\n\t\t\t\t\tif(opts.biff == 8 && val.BIFFVer == 0 && val.dt == 16) opts.biff = 2;\n\t\t\t\t\tif(file_depth++ && !biff4w) break;\n\t\t\t\t\tout = ({}/*:any*/); if(options.dense) out[\"!data\"] = [];\n\n\t\t\t\t\tif(opts.biff < 8 && !seen_codepage) { seen_codepage = true; set_cp(opts.codepage = options.codepage || 1252); }\n\t\t\t\t\tif(opts.biff == 4 && biff4w) {\n\t\t\t\t\t\tcur_sheet = (Directory[opts.snames.indexOf(cur_sheet)+1] || {name:\"\"}).name;\n\t\t\t\t\t} else if(opts.biff < 5 || val.BIFFVer == 0 && val.dt == 0x1000) {\n\t\t\t\t\t\tif(cur_sheet === \"\") cur_sheet = \"Sheet1\";\n\t\t\t\t\t\trange = {s:{r:0,c:0},e:{r:0,c:0}};\n\t\t\t\t\t\t/* fake BoundSheet8 */\n\t\t\t\t\t\tvar fakebs8 = {pos: blob.l - length, name:cur_sheet};\n\t\t\t\t\t\tDirectory[fakebs8.pos] = fakebs8;\n\t\t\t\t\t\topts.snames.push(cur_sheet);\n\t\t\t\t\t}\n\t\t\t\t\telse cur_sheet = (Directory[s] || {name:\"\"}).name;\n\t\t\t\t\tif(val.dt == 0x20) out[\"!type\"] = \"chart\";\n\t\t\t\t\tif(val.dt == 0x40) out[\"!type\"] = \"macro\";\n\t\t\t\t\tmerges = [];\n\t\t\t\t\tobjects = [];\n\t\t\t\t\topts.arrayf = arrayf = [];\n\t\t\t\t\tcolinfo = []; rowinfo = [];\n\t\t\t\t\tseencol = false;\n\t\t\t\t\twsprops = {Hidden:(Directory[s]||{hs:0}).hs, name:cur_sheet };\n\t\t\t\t} break;\n\t\t\t\tcase 0x0203 /* Number */: case 0x0003 /* BIFF2NUM */: case 0x0002 /* BIFF2INT */: {\n\t\t\t\t\tif(out[\"!type\"] == \"chart\") if(options.dense ? (out[\"!data\"][val.r]||[])[val.c]: out[encode_col(val.c) + encode_row(val.r)]) ++val.c;\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe]||{}, v:val.val, t:'n'}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 0x0005: case 0x0205 /* BoolErr */: {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.val, t:val.t}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 0x027e /* RK */: {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.rknum, t:'n'}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 0x00bd /* MulRk */: {\n\t\t\t\t\tfor(var j = val.c; j <= val.C; ++j) {\n\t\t\t\t\t\tvar ixfe = val.rkrec[j-val.c][0];\n\t\t\t\t\t\ttemp_val= ({ixfe:ixfe, XF:XFs[ixfe], v:val.rkrec[j-val.c][1], t:'n'}/*:any*/);\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell({c:j, r:val.r}, temp_val, options);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0006: case 0x0206: case 0x0406 /* Formula */: {\n\t\t\t\t\tif(val.val == 'String') { last_formula = val; break; }\n\t\t\t\t\ttemp_val = make_cell(val.val, val.cell.ixfe, val.tt);\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(options.cellFormula) {\n\t\t\t\t\t\tvar _f = val.formula;\n\t\t\t\t\t\tif(_f && _f[0] && _f[0][0] && _f[0][0][0] == 'PtgExp') {\n\t\t\t\t\t\t\tvar _fr = _f[0][0][1][0], _fc = _f[0][0][1][1];\n\t\t\t\t\t\t\tvar _fe = encode_cell({r:_fr, c:_fc});\n\t\t\t\t\t\t\tif(sharedf[_fe]) temp_val.f = \"\"+stringify_formula(val.formula,range,val.cell,supbooks, opts);\n\t\t\t\t\t\t\telse temp_val.F = ((options.dense ? (out[\"!data\"][_fr]||[])[_fc]: out[_fe]) || {}).F;\n\t\t\t\t\t\t} else temp_val.f = \"\"+stringify_formula(val.formula,range,val.cell,supbooks, opts);\n\t\t\t\t\t}\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell(val.cell, temp_val, options);\n\t\t\t\t\tlast_formula = val;\n\t\t\t\t} break;\n\t\t\t\tcase 0x0007: case 0x0207 /* String */: {\n\t\t\t\t\tif(last_formula) { /* technically always true */\n\t\t\t\t\t\tlast_formula.val = val;\n\t\t\t\t\t\ttemp_val = make_cell(val, last_formula.cell.ixfe, 's');\n\t\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\t\tif(options.cellFormula) {\n\t\t\t\t\t\t\ttemp_val.f = \"\"+stringify_formula(last_formula.formula, range, last_formula.cell, supbooks, opts);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell(last_formula.cell, temp_val, options);\n\t\t\t\t\t\tlast_formula = null;\n\t\t\t\t\t} else throw new Error(\"String record expects Formula\");\n\t\t\t\t} break;\n\t\t\t\tcase 0x0021: case 0x0221 /* Array */: {\n\t\t\t\t\tarrayf.push(val);\n\t\t\t\t\tvar _arraystart = encode_cell(val[0].s);\n\t\t\t\t\tcc = options.dense ? (out[\"!data\"][val[0].s.r]||[])[val[0].s.c] : out[_arraystart];\n\t\t\t\t\tif(options.cellFormula && cc) {\n\t\t\t\t\t\tif(!last_formula) break; /* technically unreachable */\n\t\t\t\t\t\tif(!_arraystart || !cc) break;\n\t\t\t\t\t\tcc.f = \"\"+stringify_formula(val[1], range, val[0], supbooks, opts);\n\t\t\t\t\t\tcc.F = encode_range(val[0]);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x04bc /* ShrFmla */: {\n\t\t\t\t\tif(!options.cellFormula) break;\n\t\t\t\t\tif(last_cell) {\n\t\t\t\t\t\t/* TODO: capture range */\n\t\t\t\t\t\tif(!last_formula) break; /* technically unreachable */\n\t\t\t\t\t\tsharedf[encode_cell(last_formula.cell)]= val[0];\n\t\t\t\t\t\tcc = options.dense ? (out[\"!data\"][last_formula.cell.r]||[])[last_formula.cell.c] : out[encode_cell(last_formula.cell)];\n\t\t\t\t\t\t(cc||{}).f = \"\"+stringify_formula(val[0], range, lastcell, supbooks, opts);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x00fd /* LabelSst */:\n\t\t\t\t\ttemp_val=make_cell(sst[val.isst].t, val.ixfe, 's');\n\t\t\t\t\tif(sst[val.isst].h) temp_val.h = sst[val.isst].h;\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0201 /* Blank */: if(options.sheetStubs) {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], t:'z'}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 0x00be /* MulBlank */: if(options.sheetStubs) {\n\t\t\t\t\tfor(var _j = val.c; _j <= val.C; ++_j) {\n\t\t\t\t\t\tvar _ixfe = val.ixfe[_j-val.c];\n\t\t\t\t\t\ttemp_val= ({ixfe:_ixfe, XF:XFs[_ixfe], t:'z'}/*:any*/);\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell({c:_j, r:val.r}, temp_val, options);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x00d6 /* RString */:\n\t\t\t\tcase 0x0204 /* Label */: case 0x0004 /* BIFF2STR */:\n\t\t\t\t\ttemp_val=make_cell(val.val, val.ixfe, 's');\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 0x0000: case 0x0200 /* Dimensions */: {\n\t\t\t\t\tif(file_depth === 1) range = val; /* TODO: stack */\n\t\t\t\t} break;\n\t\t\t\tcase 0x00fc /* SST */: {\n\t\t\t\t\tsst = val;\n\t\t\t\t} break;\n\t\t\t\tcase 0x041e /* Format */: { /* val = [id, fmt] */\n\t\t\t\t\tif(opts.biff >= 3 && opts.biff <= 4) {\n\t\t\t\t\t\tBIFF2FmtTable[BIFF2Fmt++] = val[1];\n\t\t\t\t\t\tfor(var b4idx = 0; b4idx < BIFF2Fmt + 163; ++b4idx) if(table_fmt[b4idx] == val[1]) break;\n\t\t\t\t\t\tif(b4idx >= 163) SSF__load(val[1], BIFF2Fmt + 163);\n\t\t\t\t\t}\n\t\t\t\t\telse SSF__load(val[1], val[0]);\n\t\t\t\t} break;\n\t\t\t\tcase 0x001e /* BIFF2FORMAT */: {\n\t\t\t\t\tBIFF2FmtTable[BIFF2Fmt++] = val;\n\t\t\t\t\tfor(var b2idx = 0; b2idx < BIFF2Fmt + 163; ++b2idx) if(table_fmt[b2idx] == val) break;\n\t\t\t\t\tif(b2idx >= 163) SSF__load(val, BIFF2Fmt + 163);\n\t\t\t\t} break;\n\n\t\t\t\tcase 0x00e5 /* MergeCells */: merges = merges.concat(val); break;\n\n\t\t\t\tcase 0x005d /* Obj */: objects[val.cmo[0]] = opts.lastobj = val; break;\n\t\t\t\tcase 0x01b6 /* TxO */: opts.lastobj.TxO = val; break;\n\t\t\t\tcase 0x007f /* ImData */: opts.lastobj.ImData = val; break;\n\n\t\t\t\tcase 0x01b8 /* HLink */: {\n\t\t\t\t\tfor(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)\n\t\t\t\t\t\tfor(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n\t\t\t\t\t\t\tcc = options.dense ? (out[\"!data\"][rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];\n\t\t\t\t\t\t\tif(cc) cc.l = val[1];\n\t\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0800 /* HLinkTooltip */: {\n\t\t\t\t\tfor(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)\n\t\t\t\t\t\tfor(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n\t\t\t\t\t\t\tcc = options.dense ? (out[\"!data\"][rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];\n\t\t\t\t\t\t\tif(cc && cc.l) cc.l.Tooltip = val[1];\n\t\t\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x001c /* Note */: {\n\t\t\t\t\t/* TODO: comment continuation (row == -1 / 0xFFFF) */\n\t\t\t\t\tcc = options.dense ? (out[\"!data\"][val[0].r]||[])[val[0].c] : out[encode_cell(val[0])];\n\t\t\t\t\tif(!cc) {\n\t\t\t\t\t\tif(options.dense) {\n\t\t\t\t\t\t\tif(!out[\"!data\"][val[0].r]) out[\"!data\"][val[0].r] = [];\n\t\t\t\t\t\t\tcc = out[\"!data\"][val[0].r][val[0].c] = ({t:\"z\"}/*:any*/);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcc = out[encode_cell(val[0])] = ({t:\"z\"}/*:any*/);\n\t\t\t\t\t\t}\n\t\t\t\t\t\trange.e.r = Math.max(range.e.r, val[0].r);\n\t\t\t\t\t\trange.s.r = Math.min(range.s.r, val[0].r);\n\t\t\t\t\t\trange.e.c = Math.max(range.e.c, val[0].c);\n\t\t\t\t\t\trange.s.c = Math.min(range.s.c, val[0].c);\n\t\t\t\t\t}\n\t\t\t\t\tif(!cc.c) cc.c = [];\n\t\t\t\t\tif(opts.biff <= 5 && opts.biff >= 2) cmnt = {a:\"SheetJ5\", t:val[1]};\n\t\t\t\t\telse {\n\t\t\t\t\t\tvar noteobj = objects[val[2]];\n\t\t\t\t\t\tcmnt = {a:val[1],t:noteobj.TxO.t};\n\t\t\t\t\t\tif(val[3] != null && !(val[3] & 0x02)) cc.c.hidden = true;\n\t\t\t\t\t}\n\t\t\t\t\tcc.c.push(cmnt);\n\t\t\t\t} break;\n\t\t\t\tcase 0x087d /* XFExt */: update_xfext(XFs[val.ixfe], val.ext); break;\n\t\t\t\tcase 0x007d /* ColInfo */: {\n\t\t\t\t\tif(!opts.cellStyles) break;\n\t\t\t\t\twhile(val.e >= val.s) {\n\t\t\t\t\t\tcolinfo[val.e--] = { width: val.w/256, level: (val.level || 0), hidden: !!(val.flags & 1) };\n\t\t\t\t\t\tif(!seencol) { seencol = true; find_mdw_colw(val.w/256); }\n\t\t\t\t\t\tprocess_col(colinfo[val.e+1]);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0208 /* Row */: {\n\t\t\t\t\tvar rowobj = {};\n\t\t\t\t\tif(val.level != null) { rowinfo[val.r] = rowobj; rowobj.level = val.level; }\n\t\t\t\t\tif(val.hidden) { rowinfo[val.r] = rowobj; rowobj.hidden = true; }\n\t\t\t\t\tif(val.hpt) {\n\t\t\t\t\t\trowinfo[val.r] = rowobj;\n\t\t\t\t\t\trowobj.hpt = val.hpt; rowobj.hpx = pt2px(val.hpt);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0026 /* LeftMargin */:\n\t\t\t\tcase 0x0027 /* RightMargin */:\n\t\t\t\tcase 0x0028 /* TopMargin */:\n\t\t\t\tcase 0x0029 /* BottomMargin */:\n\t\t\t\t\tif(!out['!margins']) default_margins(out['!margins'] = {});\n\t\t\t\t\tout['!margins'][({0x26: \"left\", 0x27:\"right\", 0x28:\"top\", 0x29:\"bottom\"})[RecordType]] = val;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x00a1 /* Setup */: // TODO\n\t\t\t\t\tif(!out['!margins']) default_margins(out['!margins'] = {});\n\t\t\t\t\tout['!margins'].header = val.header;\n\t\t\t\t\tout['!margins'].footer = val.footer;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x023e /* Window2 */: // TODO\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tif(val.RTL) Workbook.Views[0].RTL = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0092 /* Palette */: palette = val; break;\n\t\t\t\tcase 0x0896 /* Theme */: themes = val; break;\n\t\t\t\tcase 0x008c /* Country */: country = val; break;\n\t\t\t\tcase 0x01ba /* CodeName */: {\n\t\t\t\t\t/*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */\n\t\t\t\t\tif(!cur_sheet) Workbook.WBProps.CodeName = val || \"ThisWorkbook\";\n\t\t\t\t\telse wsprops.CodeName = val || wsprops.name;\n\t\t\t\t} break;\n\t\t\t}\n\t\t} else {\n\t\t\tif(!R) console.error(\"Missing Info for XLS Record 0x\" + RecordType.toString(16));\n\t\t\tblob.l += length;\n\t\t}\n\t}\n\twb.SheetNames=keys(Directory).sort(function(a,b) { return Number(a) - Number(b); }).map(function(x){return Directory[x].name;});\n\tif(!options.bookSheets) wb.Sheets=Sheets;\n\tif(!wb.SheetNames.length && Preamble[\"!ref\"]) {\n\t\twb.SheetNames.push(\"Sheet1\");\n\t\t/*jshint -W069 */\n\t\tif(wb.Sheets) wb.Sheets[\"Sheet1\"] = Preamble;\n\t\t/*jshint +W069 */\n\t} else wb.Preamble=Preamble;\n\tif(wb.Sheets) FilterDatabases.forEach(function(r,i) { wb.Sheets[wb.SheetNames[i]]['!autofilter'] = r; });\n\twb.Strings = sst;\n\twb.SSF = dup(table_fmt);\n\tif(opts.enc) wb.Encryption = opts.enc;\n\tif(themes) wb.Themes = themes;\n\twb.Metadata = {};\n\tif(country !== undefined) wb.Metadata.Country = country;\n\tif(supbooks.names.length > 0) Workbook.Names = supbooks.names;\n\twb.Workbook = Workbook;\n\treturn wb;\n}\n\n/* TODO: split props*/\nvar PSCLSID = {\n\tSI: \"e0859ff2f94f6810ab9108002b27b3d9\",\n\tDSI: \"02d5cdd59c2e1b10939708002b2cf9ae\",\n\tUDI: \"05d5cdd59c2e1b10939708002b2cf9ae\"\n};\nfunction parse_xls_props(cfb/*:CFBContainer*/, props, o) {\n\t/* [MS-OSHARED] 2.3.3.2.2 Document Summary Information Property Set */\n\tvar DSI = CFB.find(cfb, '/!DocumentSummaryInformation');\n\tif(DSI && DSI.size > 0) try {\n\t\tvar DocSummary = parse_PropertySetStream(DSI, DocSummaryPIDDSI, PSCLSID.DSI);\n\t\tfor(var d in DocSummary) props[d] = DocSummary[d];\n\t} catch(e) {if(o.WTF) throw e;/* empty */}\n\n\t/* [MS-OSHARED] 2.3.3.2.1 Summary Information Property Set*/\n\tvar SI = CFB.find(cfb, '/!SummaryInformation');\n\tif(SI && SI.size > 0) try {\n\t\tvar Summary = parse_PropertySetStream(SI, SummaryPIDSI, PSCLSID.SI);\n\t\tfor(var s in Summary) if(props[s] == null) props[s] = Summary[s];\n\t} catch(e) {if(o.WTF) throw e;/* empty */}\n\n\tif(props.HeadingPairs && props.TitlesOfParts) {\n\t\tload_props_pairs(props.HeadingPairs, props.TitlesOfParts, props, o);\n\t\tdelete props.HeadingPairs; delete props.TitlesOfParts;\n\t}\n}\nfunction write_xls_props(wb/*:Workbook*/, cfb/*:CFBContainer*/) {\n\tvar DSEntries = [], SEntries = [], CEntries = [];\n\tvar i = 0, Keys;\n\tvar DocSummaryRE/*:{[key:string]:string}*/ = evert_key(DocSummaryPIDDSI, \"n\");\n\tvar SummaryRE/*:{[key:string]:string}*/ = evert_key(SummaryPIDSI, \"n\");\n\tif(wb.Props) {\n\t\tKeys = keys(wb.Props);\n\t\t// $FlowIgnore\n\t\tfor(i = 0; i < Keys.length; ++i) (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Props[Keys[i]]]);\n\t}\n\tif(wb.Custprops) {\n\t\tKeys = keys(wb.Custprops);\n\t\t// $FlowIgnore\n\t\tfor(i = 0; i < Keys.length; ++i) if(!Object.prototype.hasOwnProperty.call((wb.Props||{}), Keys[i])) (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Custprops[Keys[i]]]);\n\t}\n\tvar CEntries2 = [];\n\tfor(i = 0; i < CEntries.length; ++i) {\n\t\tif(XLSPSSkip.indexOf(CEntries[i][0]) > -1 || PseudoPropsPairs.indexOf(CEntries[i][0]) > -1) continue;\n\t\tif(CEntries[i][1] == null) continue;\n\t\tCEntries2.push(CEntries[i]);\n\t}\n\tif(SEntries.length) CFB.utils.cfb_add(cfb, \"/\\u0005SummaryInformation\", write_PropertySetStream(SEntries, PSCLSID.SI, SummaryRE, SummaryPIDSI));\n\tif(DSEntries.length || CEntries2.length) CFB.utils.cfb_add(cfb, \"/\\u0005DocumentSummaryInformation\", write_PropertySetStream(DSEntries, PSCLSID.DSI, DocSummaryRE, DocSummaryPIDDSI, CEntries2.length ? CEntries2 : null, PSCLSID.UDI));\n}\n\nfunction parse_xlscfb(cfb/*:any*/, options/*:?ParseOpts*/)/*:Workbook*/ {\nif(!options) options = {};\nfix_read_opts(options);\nreset_cp();\nif(options.codepage) set_ansi(options.codepage);\nvar CompObj/*:?CFBEntry*/, WB/*:?any*/;\nif(cfb.FullPaths) {\n\tif(CFB.find(cfb, '/encryption')) throw new Error(\"File is password-protected\");\n\tCompObj = CFB.find(cfb, '!CompObj');\n\tWB = CFB.find(cfb, '/Workbook') || CFB.find(cfb, '/Book');\n} else {\n\tswitch(options.type) {\n\t\tcase 'base64': cfb = s2a(Base64_decode(cfb)); break;\n\t\tcase 'binary': cfb = s2a(cfb); break;\n\t\tcase 'buffer': break;\n\t\tcase 'array': if(!Array.isArray(cfb)) cfb = Array.prototype.slice.call(cfb); break;\n\t}\n\tprep_blob(cfb, 0);\n\tWB = ({content: cfb}/*:any*/);\n}\nvar /*::CompObjP, */WorkbookP/*:: :Workbook = XLSX.utils.book_new(); */;\n\nvar _data/*:?any*/;\nif(CompObj) /*::CompObjP = */parse_compobj(CompObj);\nif(options.bookProps && !options.bookSheets) WorkbookP = ({}/*:any*/);\nelse/*:: if(cfb instanceof CFBContainer) */ {\n\tvar T = has_buf ? 'buffer' : 'array';\n\tif(WB && WB.content) WorkbookP = parse_workbook(WB.content, options);\n\t/* Quattro Pro 7-8 */\n\telse if((_data=CFB.find(cfb, 'PerfectOffice_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));\n\t/* Quattro Pro 9 */\n\telse if((_data=CFB.find(cfb, 'NativeContent_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));\n\t/* Works 4 for Mac */\n\telse if((_data=CFB.find(cfb, 'MN0')) && _data.content) throw new Error(\"Unsupported Works 4 for Mac file\");\n\telse throw new Error(\"Cannot find Workbook stream\");\n\tif(options.bookVBA && cfb.FullPaths && CFB.find(cfb, '/_VBA_PROJECT_CUR/VBA/dir')) WorkbookP.vbaraw = make_vba_xls(cfb);\n}\n\nvar props = {};\nif(cfb.FullPaths) parse_xls_props(/*::((*/cfb/*:: :any):CFBContainer)*/, props, options);\n\nWorkbookP.Props = WorkbookP.Custprops = props; /* TODO: split up properties */\nif(options.bookFiles) WorkbookP.cfb = cfb;\n/*WorkbookP.CompObjP = CompObjP; // TODO: storage? */\nreturn WorkbookP;\n}\n\n\nfunction write_xlscfb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:CFBContainer*/ {\n\tvar o = opts || {};\n\tvar cfb = CFB.utils.cfb_new({root:\"R\"});\n\tvar wbpath = \"/Workbook\";\n\tswitch(o.bookType || \"xls\") {\n\t\tcase \"xls\": o.bookType = \"biff8\";\n\t\t/* falls through */\n\t\tcase \"xla\": if(!o.bookType) o.bookType = \"xla\";\n\t\t/* falls through */\n\t\tcase \"biff8\": wbpath = \"/Workbook\"; o.biff = 8; break;\n\t\tcase \"biff5\": wbpath = \"/Book\"; o.biff = 5; break;\n\t\tdefault: throw new Error(\"invalid type \" + o.bookType + \" for XLS CFB\");\n\t}\n\tCFB.utils.cfb_add(cfb, wbpath, write_biff_buf(wb, o));\n\tif(o.biff == 8 && (wb.Props || wb.Custprops)) write_xls_props(wb, cfb);\n\t// TODO: SI, DSI, CO\n\tif(o.biff == 8 && wb.vbaraw) fill_vba_xls(cfb, CFB.read(wb.vbaraw, {type: typeof wb.vbaraw == \"string\" ? \"binary\" : \"buffer\"}));\n\treturn cfb;\n}\n/* [MS-XLSB] 2.3 Record Enumeration */\nvar XLSBRecordEnum = {\n\t0x0000: { /* n:\"BrtRowHdr\", */ f:parse_BrtRowHdr },\n\t0x0001: { /* n:\"BrtCellBlank\", */ f:parse_BrtCellBlank },\n\t0x0002: { /* n:\"BrtCellRk\", */ f:parse_BrtCellRk },\n\t0x0003: { /* n:\"BrtCellError\", */ f:parse_BrtCellError },\n\t0x0004: { /* n:\"BrtCellBool\", */ f:parse_BrtCellBool },\n\t0x0005: { /* n:\"BrtCellReal\", */ f:parse_BrtCellReal },\n\t0x0006: { /* n:\"BrtCellSt\", */ f:parse_BrtCellSt },\n\t0x0007: { /* n:\"BrtCellIsst\", */ f:parse_BrtCellIsst },\n\t0x0008: { /* n:\"BrtFmlaString\", */ f:parse_BrtFmlaString },\n\t0x0009: { /* n:\"BrtFmlaNum\", */ f:parse_BrtFmlaNum },\n\t0x000A: { /* n:\"BrtFmlaBool\", */ f:parse_BrtFmlaBool },\n\t0x000B: { /* n:\"BrtFmlaError\", */ f:parse_BrtFmlaError },\n\t0x000C: { /* n:\"BrtShortBlank\", */ f:parse_BrtShortBlank },\n\t0x000D: { /* n:\"BrtShortRk\", */ f:parse_BrtShortRk },\n\t0x000E: { /* n:\"BrtShortError\", */ f:parse_BrtShortError },\n\t0x000F: { /* n:\"BrtShortBool\", */ f:parse_BrtShortBool },\n\t0x0010: { /* n:\"BrtShortReal\", */ f:parse_BrtShortReal },\n\t0x0011: { /* n:\"BrtShortSt\", */ f:parse_BrtShortSt },\n\t0x0012: { /* n:\"BrtShortIsst\", */ f:parse_BrtShortIsst },\n\t0x0013: { /* n:\"BrtSSTItem\", */ f:parse_RichStr },\n\t0x0014: { /* n:\"BrtPCDIMissing\" */ },\n\t0x0015: { /* n:\"BrtPCDINumber\" */ },\n\t0x0016: { /* n:\"BrtPCDIBoolean\" */ },\n\t0x0017: { /* n:\"BrtPCDIError\" */ },\n\t0x0018: { /* n:\"BrtPCDIString\" */ },\n\t0x0019: { /* n:\"BrtPCDIDatetime\" */ },\n\t0x001A: { /* n:\"BrtPCDIIndex\" */ },\n\t0x001B: { /* n:\"BrtPCDIAMissing\" */ },\n\t0x001C: { /* n:\"BrtPCDIANumber\" */ },\n\t0x001D: { /* n:\"BrtPCDIABoolean\" */ },\n\t0x001E: { /* n:\"BrtPCDIAError\" */ },\n\t0x001F: { /* n:\"BrtPCDIAString\" */ },\n\t0x0020: { /* n:\"BrtPCDIADatetime\" */ },\n\t0x0021: { /* n:\"BrtPCRRecord\" */ },\n\t0x0022: { /* n:\"BrtPCRRecordDt\" */ },\n\t0x0023: { /* n:\"BrtFRTBegin\", */ T:1 },\n\t0x0024: { /* n:\"BrtFRTEnd\", */ T:-1 },\n\t0x0025: { /* n:\"BrtACBegin\", */ T:1 },\n\t0x0026: { /* n:\"BrtACEnd\", */ T:-1 },\n\t0x0027: { /* n:\"BrtName\", */ f:parse_BrtName },\n\t0x0028: { /* n:\"BrtIndexRowBlock\" */ },\n\t0x002A: { /* n:\"BrtIndexBlock\" */ },\n\t0x002B: { /* n:\"BrtFont\", */ f:parse_BrtFont },\n\t0x002C: { /* n:\"BrtFmt\", */ f:parse_BrtFmt },\n\t0x002D: { /* n:\"BrtFill\", */ f:parse_BrtFill },\n\t0x002E: { /* n:\"BrtBorder\", */ f:parse_BrtBorder },\n\t0x002F: { /* n:\"BrtXF\", */ f:parse_BrtXF },\n\t0x0030: { /* n:\"BrtStyle\" */ },\n\t0x0031: { /* n:\"BrtCellMeta\", */ f:parse_Int32LE },\n\t0x0032: { /* n:\"BrtValueMeta\" */ },\n\t0x0033: { /* n:\"BrtMdb\" */ f:parse_BrtMdb },\n\t0x0034: { /* n:\"BrtBeginFmd\", */ T:1 },\n\t0x0035: { /* n:\"BrtEndFmd\", */ T:-1 },\n\t0x0036: { /* n:\"BrtBeginMdx\", */ T:1 },\n\t0x0037: { /* n:\"BrtEndMdx\", */ T:-1 },\n\t0x0038: { /* n:\"BrtBeginMdxTuple\", */ T:1 },\n\t0x0039: { /* n:\"BrtEndMdxTuple\", */ T:-1 },\n\t0x003A: { /* n:\"BrtMdxMbrIstr\" */ },\n\t0x003B: { /* n:\"BrtStr\" */ },\n\t0x003C: { /* n:\"BrtColInfo\", */ f:parse_ColInfo },\n\t0x003E: { /* n:\"BrtCellRString\", */ f:parse_BrtCellRString },\n\t0x003F: { /* n:\"BrtCalcChainItem$\", */ f:parse_BrtCalcChainItem$ },\n\t0x0040: { /* n:\"BrtDVal\", */ f:parse_BrtDVal },\n\t0x0041: { /* n:\"BrtSxvcellNum\" */ },\n\t0x0042: { /* n:\"BrtSxvcellStr\" */ },\n\t0x0043: { /* n:\"BrtSxvcellBool\" */ },\n\t0x0044: { /* n:\"BrtSxvcellErr\" */ },\n\t0x0045: { /* n:\"BrtSxvcellDate\" */ },\n\t0x0046: { /* n:\"BrtSxvcellNil\" */ },\n\t0x0080: { /* n:\"BrtFileVersion\" */ },\n\t0x0081: { /* n:\"BrtBeginSheet\", */ T:1 },\n\t0x0082: { /* n:\"BrtEndSheet\", */ T:-1 },\n\t0x0083: { /* n:\"BrtBeginBook\", */ T:1, f:parsenoop, p:0 },\n\t0x0084: { /* n:\"BrtEndBook\", */ T:-1 },\n\t0x0085: { /* n:\"BrtBeginWsViews\", */ T:1 },\n\t0x0086: { /* n:\"BrtEndWsViews\", */ T:-1 },\n\t0x0087: { /* n:\"BrtBeginBookViews\", */ T:1 },\n\t0x0088: { /* n:\"BrtEndBookViews\", */ T:-1 },\n\t0x0089: { /* n:\"BrtBeginWsView\", */ T:1, f:parse_BrtBeginWsView },\n\t0x008A: { /* n:\"BrtEndWsView\", */ T:-1 },\n\t0x008B: { /* n:\"BrtBeginCsViews\", */ T:1 },\n\t0x008C: { /* n:\"BrtEndCsViews\", */ T:-1 },\n\t0x008D: { /* n:\"BrtBeginCsView\", */ T:1 },\n\t0x008E: { /* n:\"BrtEndCsView\", */ T:-1 },\n\t0x008F: { /* n:\"BrtBeginBundleShs\", */ T:1 },\n\t0x0090: { /* n:\"BrtEndBundleShs\", */ T:-1 },\n\t0x0091: { /* n:\"BrtBeginSheetData\", */ T:1 },\n\t0x0092: { /* n:\"BrtEndSheetData\", */ T:-1 },\n\t0x0093: { /* n:\"BrtWsProp\", */ f:parse_BrtWsProp },\n\t0x0094: { /* n:\"BrtWsDim\", */ f:parse_BrtWsDim, p:16 },\n\t0x0097: { /* n:\"BrtPane\", */ f:parse_BrtPane },\n\t0x0098: { /* n:\"BrtSel\" */ },\n\t0x0099: { /* n:\"BrtWbProp\", */ f:parse_BrtWbProp },\n\t0x009A: { /* n:\"BrtWbFactoid\" */ },\n\t0x009B: { /* n:\"BrtFileRecover\" */ },\n\t0x009C: { /* n:\"BrtBundleSh\", */ f:parse_BrtBundleSh },\n\t0x009D: { /* n:\"BrtCalcProp\" */ },\n\t0x009E: { /* n:\"BrtBookView\" */ },\n\t0x009F: { /* n:\"BrtBeginSst\", */ T:1, f:parse_BrtBeginSst },\n\t0x00A0: { /* n:\"BrtEndSst\", */ T:-1 },\n\t0x00A1: { /* n:\"BrtBeginAFilter\", */ T:1, f:parse_UncheckedRfX },\n\t0x00A2: { /* n:\"BrtEndAFilter\", */ T:-1 },\n\t0x00A3: { /* n:\"BrtBeginFilterColumn\", */ T:1 },\n\t0x00A4: { /* n:\"BrtEndFilterColumn\", */ T:-1 },\n\t0x00A5: { /* n:\"BrtBeginFilters\", */ T:1 },\n\t0x00A6: { /* n:\"BrtEndFilters\", */ T:-1 },\n\t0x00A7: { /* n:\"BrtFilter\" */ },\n\t0x00A8: { /* n:\"BrtColorFilter\" */ },\n\t0x00A9: { /* n:\"BrtIconFilter\" */ },\n\t0x00AA: { /* n:\"BrtTop10Filter\" */ },\n\t0x00AB: { /* n:\"BrtDynamicFilter\" */ },\n\t0x00AC: { /* n:\"BrtBeginCustomFilters\", */ T:1 },\n\t0x00AD: { /* n:\"BrtEndCustomFilters\", */ T:-1 },\n\t0x00AE: { /* n:\"BrtCustomFilter\" */ },\n\t0x00AF: { /* n:\"BrtAFilterDateGroupItem\" */ },\n\t0x00B0: { /* n:\"BrtMergeCell\", */ f:parse_BrtMergeCell },\n\t0x00B1: { /* n:\"BrtBeginMergeCells\", */ T:1 },\n\t0x00B2: { /* n:\"BrtEndMergeCells\", */ T:-1 },\n\t0x00B3: { /* n:\"BrtBeginPivotCacheDef\", */ T:1 },\n\t0x00B4: { /* n:\"BrtEndPivotCacheDef\", */ T:-1 },\n\t0x00B5: { /* n:\"BrtBeginPCDFields\", */ T:1 },\n\t0x00B6: { /* n:\"BrtEndPCDFields\", */ T:-1 },\n\t0x00B7: { /* n:\"BrtBeginPCDField\", */ T:1 },\n\t0x00B8: { /* n:\"BrtEndPCDField\", */ T:-1 },\n\t0x00B9: { /* n:\"BrtBeginPCDSource\", */ T:1 },\n\t0x00BA: { /* n:\"BrtEndPCDSource\", */ T:-1 },\n\t0x00BB: { /* n:\"BrtBeginPCDSRange\", */ T:1 },\n\t0x00BC: { /* n:\"BrtEndPCDSRange\", */ T:-1 },\n\t0x00BD: { /* n:\"BrtBeginPCDFAtbl\", */ T:1 },\n\t0x00BE: { /* n:\"BrtEndPCDFAtbl\", */ T:-1 },\n\t0x00BF: { /* n:\"BrtBeginPCDIRun\", */ T:1 },\n\t0x00C0: { /* n:\"BrtEndPCDIRun\", */ T:-1 },\n\t0x00C1: { /* n:\"BrtBeginPivotCacheRecords\", */ T:1 },\n\t0x00C2: { /* n:\"BrtEndPivotCacheRecords\", */ T:-1 },\n\t0x00C3: { /* n:\"BrtBeginPCDHierarchies\", */ T:1 },\n\t0x00C4: { /* n:\"BrtEndPCDHierarchies\", */ T:-1 },\n\t0x00C5: { /* n:\"BrtBeginPCDHierarchy\", */ T:1 },\n\t0x00C6: { /* n:\"BrtEndPCDHierarchy\", */ T:-1 },\n\t0x00C7: { /* n:\"BrtBeginPCDHFieldsUsage\", */ T:1 },\n\t0x00C8: { /* n:\"BrtEndPCDHFieldsUsage\", */ T:-1 },\n\t0x00C9: { /* n:\"BrtBeginExtConnection\", */ T:1 },\n\t0x00CA: { /* n:\"BrtEndExtConnection\", */ T:-1 },\n\t0x00CB: { /* n:\"BrtBeginECDbProps\", */ T:1 },\n\t0x00CC: { /* n:\"BrtEndECDbProps\", */ T:-1 },\n\t0x00CD: { /* n:\"BrtBeginECOlapProps\", */ T:1 },\n\t0x00CE: { /* n:\"BrtEndECOlapProps\", */ T:-1 },\n\t0x00CF: { /* n:\"BrtBeginPCDSConsol\", */ T:1 },\n\t0x00D0: { /* n:\"BrtEndPCDSConsol\", */ T:-1 },\n\t0x00D1: { /* n:\"BrtBeginPCDSCPages\", */ T:1 },\n\t0x00D2: { /* n:\"BrtEndPCDSCPages\", */ T:-1 },\n\t0x00D3: { /* n:\"BrtBeginPCDSCPage\", */ T:1 },\n\t0x00D4: { /* n:\"BrtEndPCDSCPage\", */ T:-1 },\n\t0x00D5: { /* n:\"BrtBeginPCDSCPItem\", */ T:1 },\n\t0x00D6: { /* n:\"BrtEndPCDSCPItem\", */ T:-1 },\n\t0x00D7: { /* n:\"BrtBeginPCDSCSets\", */ T:1 },\n\t0x00D8: { /* n:\"BrtEndPCDSCSets\", */ T:-1 },\n\t0x00D9: { /* n:\"BrtBeginPCDSCSet\", */ T:1 },\n\t0x00DA: { /* n:\"BrtEndPCDSCSet\", */ T:-1 },\n\t0x00DB: { /* n:\"BrtBeginPCDFGroup\", */ T:1 },\n\t0x00DC: { /* n:\"BrtEndPCDFGroup\", */ T:-1 },\n\t0x00DD: { /* n:\"BrtBeginPCDFGItems\", */ T:1 },\n\t0x00DE: { /* n:\"BrtEndPCDFGItems\", */ T:-1 },\n\t0x00DF: { /* n:\"BrtBeginPCDFGRange\", */ T:1 },\n\t0x00E0: { /* n:\"BrtEndPCDFGRange\", */ T:-1 },\n\t0x00E1: { /* n:\"BrtBeginPCDFGDiscrete\", */ T:1 },\n\t0x00E2: { /* n:\"BrtEndPCDFGDiscrete\", */ T:-1 },\n\t0x00E3: { /* n:\"BrtBeginPCDSDTupleCache\", */ T:1 },\n\t0x00E4: { /* n:\"BrtEndPCDSDTupleCache\", */ T:-1 },\n\t0x00E5: { /* n:\"BrtBeginPCDSDTCEntries\", */ T:1 },\n\t0x00E6: { /* n:\"BrtEndPCDSDTCEntries\", */ T:-1 },\n\t0x00E7: { /* n:\"BrtBeginPCDSDTCEMembers\", */ T:1 },\n\t0x00E8: { /* n:\"BrtEndPCDSDTCEMembers\", */ T:-1 },\n\t0x00E9: { /* n:\"BrtBeginPCDSDTCEMember\", */ T:1 },\n\t0x00EA: { /* n:\"BrtEndPCDSDTCEMember\", */ T:-1 },\n\t0x00EB: { /* n:\"BrtBeginPCDSDTCQueries\", */ T:1 },\n\t0x00EC: { /* n:\"BrtEndPCDSDTCQueries\", */ T:-1 },\n\t0x00ED: { /* n:\"BrtBeginPCDSDTCQuery\", */ T:1 },\n\t0x00EE: { /* n:\"BrtEndPCDSDTCQuery\", */ T:-1 },\n\t0x00EF: { /* n:\"BrtBeginPCDSDTCSets\", */ T:1 },\n\t0x00F0: { /* n:\"BrtEndPCDSDTCSets\", */ T:-1 },\n\t0x00F1: { /* n:\"BrtBeginPCDSDTCSet\", */ T:1 },\n\t0x00F2: { /* n:\"BrtEndPCDSDTCSet\", */ T:-1 },\n\t0x00F3: { /* n:\"BrtBeginPCDCalcItems\", */ T:1 },\n\t0x00F4: { /* n:\"BrtEndPCDCalcItems\", */ T:-1 },\n\t0x00F5: { /* n:\"BrtBeginPCDCalcItem\", */ T:1 },\n\t0x00F6: { /* n:\"BrtEndPCDCalcItem\", */ T:-1 },\n\t0x00F7: { /* n:\"BrtBeginPRule\", */ T:1 },\n\t0x00F8: { /* n:\"BrtEndPRule\", */ T:-1 },\n\t0x00F9: { /* n:\"BrtBeginPRFilters\", */ T:1 },\n\t0x00FA: { /* n:\"BrtEndPRFilters\", */ T:-1 },\n\t0x00FB: { /* n:\"BrtBeginPRFilter\", */ T:1 },\n\t0x00FC: { /* n:\"BrtEndPRFilter\", */ T:-1 },\n\t0x00FD: { /* n:\"BrtBeginPNames\", */ T:1 },\n\t0x00FE: { /* n:\"BrtEndPNames\", */ T:-1 },\n\t0x00FF: { /* n:\"BrtBeginPName\", */ T:1 },\n\t0x0100: { /* n:\"BrtEndPName\", */ T:-1 },\n\t0x0101: { /* n:\"BrtBeginPNPairs\", */ T:1 },\n\t0x0102: { /* n:\"BrtEndPNPairs\", */ T:-1 },\n\t0x0103: { /* n:\"BrtBeginPNPair\", */ T:1 },\n\t0x0104: { /* n:\"BrtEndPNPair\", */ T:-1 },\n\t0x0105: { /* n:\"BrtBeginECWebProps\", */ T:1 },\n\t0x0106: { /* n:\"BrtEndECWebProps\", */ T:-1 },\n\t0x0107: { /* n:\"BrtBeginEcWpTables\", */ T:1 },\n\t0x0108: { /* n:\"BrtEndECWPTables\", */ T:-1 },\n\t0x0109: { /* n:\"BrtBeginECParams\", */ T:1 },\n\t0x010A: { /* n:\"BrtEndECParams\", */ T:-1 },\n\t0x010B: { /* n:\"BrtBeginECParam\", */ T:1 },\n\t0x010C: { /* n:\"BrtEndECParam\", */ T:-1 },\n\t0x010D: { /* n:\"BrtBeginPCDKPIs\", */ T:1 },\n\t0x010E: { /* n:\"BrtEndPCDKPIs\", */ T:-1 },\n\t0x010F: { /* n:\"BrtBeginPCDKPI\", */ T:1 },\n\t0x0110: { /* n:\"BrtEndPCDKPI\", */ T:-1 },\n\t0x0111: { /* n:\"BrtBeginDims\", */ T:1 },\n\t0x0112: { /* n:\"BrtEndDims\", */ T:-1 },\n\t0x0113: { /* n:\"BrtBeginDim\", */ T:1 },\n\t0x0114: { /* n:\"BrtEndDim\", */ T:-1 },\n\t0x0115: { /* n:\"BrtIndexPartEnd\" */ },\n\t0x0116: { /* n:\"BrtBeginStyleSheet\", */ T:1 },\n\t0x0117: { /* n:\"BrtEndStyleSheet\", */ T:-1 },\n\t0x0118: { /* n:\"BrtBeginSXView\", */ T:1 },\n\t0x0119: { /* n:\"BrtEndSXVI\", */ T:-1 },\n\t0x011A: { /* n:\"BrtBeginSXVI\", */ T:1 },\n\t0x011B: { /* n:\"BrtBeginSXVIs\", */ T:1 },\n\t0x011C: { /* n:\"BrtEndSXVIs\", */ T:-1 },\n\t0x011D: { /* n:\"BrtBeginSXVD\", */ T:1 },\n\t0x011E: { /* n:\"BrtEndSXVD\", */ T:-1 },\n\t0x011F: { /* n:\"BrtBeginSXVDs\", */ T:1 },\n\t0x0120: { /* n:\"BrtEndSXVDs\", */ T:-1 },\n\t0x0121: { /* n:\"BrtBeginSXPI\", */ T:1 },\n\t0x0122: { /* n:\"BrtEndSXPI\", */ T:-1 },\n\t0x0123: { /* n:\"BrtBeginSXPIs\", */ T:1 },\n\t0x0124: { /* n:\"BrtEndSXPIs\", */ T:-1 },\n\t0x0125: { /* n:\"BrtBeginSXDI\", */ T:1 },\n\t0x0126: { /* n:\"BrtEndSXDI\", */ T:-1 },\n\t0x0127: { /* n:\"BrtBeginSXDIs\", */ T:1 },\n\t0x0128: { /* n:\"BrtEndSXDIs\", */ T:-1 },\n\t0x0129: { /* n:\"BrtBeginSXLI\", */ T:1 },\n\t0x012A: { /* n:\"BrtEndSXLI\", */ T:-1 },\n\t0x012B: { /* n:\"BrtBeginSXLIRws\", */ T:1 },\n\t0x012C: { /* n:\"BrtEndSXLIRws\", */ T:-1 },\n\t0x012D: { /* n:\"BrtBeginSXLICols\", */ T:1 },\n\t0x012E: { /* n:\"BrtEndSXLICols\", */ T:-1 },\n\t0x012F: { /* n:\"BrtBeginSXFormat\", */ T:1 },\n\t0x0130: { /* n:\"BrtEndSXFormat\", */ T:-1 },\n\t0x0131: { /* n:\"BrtBeginSXFormats\", */ T:1 },\n\t0x0132: { /* n:\"BrtEndSxFormats\", */ T:-1 },\n\t0x0133: { /* n:\"BrtBeginSxSelect\", */ T:1 },\n\t0x0134: { /* n:\"BrtEndSxSelect\", */ T:-1 },\n\t0x0135: { /* n:\"BrtBeginISXVDRws\", */ T:1 },\n\t0x0136: { /* n:\"BrtEndISXVDRws\", */ T:-1 },\n\t0x0137: { /* n:\"BrtBeginISXVDCols\", */ T:1 },\n\t0x0138: { /* n:\"BrtEndISXVDCols\", */ T:-1 },\n\t0x0139: { /* n:\"BrtEndSXLocation\", */ T:-1 },\n\t0x013A: { /* n:\"BrtBeginSXLocation\", */ T:1 },\n\t0x013B: { /* n:\"BrtEndSXView\", */ T:-1 },\n\t0x013C: { /* n:\"BrtBeginSXTHs\", */ T:1 },\n\t0x013D: { /* n:\"BrtEndSXTHs\", */ T:-1 },\n\t0x013E: { /* n:\"BrtBeginSXTH\", */ T:1 },\n\t0x013F: { /* n:\"BrtEndSXTH\", */ T:-1 },\n\t0x0140: { /* n:\"BrtBeginISXTHRws\", */ T:1 },\n\t0x0141: { /* n:\"BrtEndISXTHRws\", */ T:-1 },\n\t0x0142: { /* n:\"BrtBeginISXTHCols\", */ T:1 },\n\t0x0143: { /* n:\"BrtEndISXTHCols\", */ T:-1 },\n\t0x0144: { /* n:\"BrtBeginSXTDMPS\", */ T:1 },\n\t0x0145: { /* n:\"BrtEndSXTDMPs\", */ T:-1 },\n\t0x0146: { /* n:\"BrtBeginSXTDMP\", */ T:1 },\n\t0x0147: { /* n:\"BrtEndSXTDMP\", */ T:-1 },\n\t0x0148: { /* n:\"BrtBeginSXTHItems\", */ T:1 },\n\t0x0149: { /* n:\"BrtEndSXTHItems\", */ T:-1 },\n\t0x014A: { /* n:\"BrtBeginSXTHItem\", */ T:1 },\n\t0x014B: { /* n:\"BrtEndSXTHItem\", */ T:-1 },\n\t0x014C: { /* n:\"BrtBeginMetadata\", */ T:1 },\n\t0x014D: { /* n:\"BrtEndMetadata\", */ T:-1 },\n\t0x014E: { /* n:\"BrtBeginEsmdtinfo\", */ T:1 },\n\t0x014F: { /* n:\"BrtMdtinfo\", */ f:parse_BrtMdtinfo },\n\t0x0150: { /* n:\"BrtEndEsmdtinfo\", */ T:-1 },\n\t0x0151: { /* n:\"BrtBeginEsmdb\", */ f:parse_BrtBeginEsmdb, T:1 },\n\t0x0152: { /* n:\"BrtEndEsmdb\", */ T:-1 },\n\t0x0153: { /* n:\"BrtBeginEsfmd\", */ T:1 },\n\t0x0154: { /* n:\"BrtEndEsfmd\", */ T:-1 },\n\t0x0155: { /* n:\"BrtBeginSingleCells\", */ T:1 },\n\t0x0156: { /* n:\"BrtEndSingleCells\", */ T:-1 },\n\t0x0157: { /* n:\"BrtBeginList\", */ T:1 },\n\t0x0158: { /* n:\"BrtEndList\", */ T:-1 },\n\t0x0159: { /* n:\"BrtBeginListCols\", */ T:1 },\n\t0x015A: { /* n:\"BrtEndListCols\", */ T:-1 },\n\t0x015B: { /* n:\"BrtBeginListCol\", */ T:1 },\n\t0x015C: { /* n:\"BrtEndListCol\", */ T:-1 },\n\t0x015D: { /* n:\"BrtBeginListXmlCPr\", */ T:1 },\n\t0x015E: { /* n:\"BrtEndListXmlCPr\", */ T:-1 },\n\t0x015F: { /* n:\"BrtListCCFmla\" */ },\n\t0x0160: { /* n:\"BrtListTrFmla\" */ },\n\t0x0161: { /* n:\"BrtBeginExternals\", */ T:1 },\n\t0x0162: { /* n:\"BrtEndExternals\", */ T:-1 },\n\t0x0163: { /* n:\"BrtSupBookSrc\", */ f:parse_RelID},\n\t0x0165: { /* n:\"BrtSupSelf\" */ },\n\t0x0166: { /* n:\"BrtSupSame\" */ },\n\t0x0167: { /* n:\"BrtSupTabs\" */ },\n\t0x0168: { /* n:\"BrtBeginSupBook\", */ T:1 },\n\t0x0169: { /* n:\"BrtPlaceholderName\" */ },\n\t0x016A: { /* n:\"BrtExternSheet\", */ f:parse_ExternSheet },\n\t0x016B: { /* n:\"BrtExternTableStart\" */ },\n\t0x016C: { /* n:\"BrtExternTableEnd\" */ },\n\t0x016E: { /* n:\"BrtExternRowHdr\" */ },\n\t0x016F: { /* n:\"BrtExternCellBlank\" */ },\n\t0x0170: { /* n:\"BrtExternCellReal\" */ },\n\t0x0171: { /* n:\"BrtExternCellBool\" */ },\n\t0x0172: { /* n:\"BrtExternCellError\" */ },\n\t0x0173: { /* n:\"BrtExternCellString\" */ },\n\t0x0174: { /* n:\"BrtBeginEsmdx\", */ T:1 },\n\t0x0175: { /* n:\"BrtEndEsmdx\", */ T:-1 },\n\t0x0176: { /* n:\"BrtBeginMdxSet\", */ T:1 },\n\t0x0177: { /* n:\"BrtEndMdxSet\", */ T:-1 },\n\t0x0178: { /* n:\"BrtBeginMdxMbrProp\", */ T:1 },\n\t0x0179: { /* n:\"BrtEndMdxMbrProp\", */ T:-1 },\n\t0x017A: { /* n:\"BrtBeginMdxKPI\", */ T:1 },\n\t0x017B: { /* n:\"BrtEndMdxKPI\", */ T:-1 },\n\t0x017C: { /* n:\"BrtBeginEsstr\", */ T:1 },\n\t0x017D: { /* n:\"BrtEndEsstr\", */ T:-1 },\n\t0x017E: { /* n:\"BrtBeginPRFItem\", */ T:1 },\n\t0x017F: { /* n:\"BrtEndPRFItem\", */ T:-1 },\n\t0x0180: { /* n:\"BrtBeginPivotCacheIDs\", */ T:1 },\n\t0x0181: { /* n:\"BrtEndPivotCacheIDs\", */ T:-1 },\n\t0x0182: { /* n:\"BrtBeginPivotCacheID\", */ T:1 },\n\t0x0183: { /* n:\"BrtEndPivotCacheID\", */ T:-1 },\n\t0x0184: { /* n:\"BrtBeginISXVIs\", */ T:1 },\n\t0x0185: { /* n:\"BrtEndISXVIs\", */ T:-1 },\n\t0x0186: { /* n:\"BrtBeginColInfos\", */ T:1 },\n\t0x0187: { /* n:\"BrtEndColInfos\", */ T:-1 },\n\t0x0188: { /* n:\"BrtBeginRwBrk\", */ T:1 },\n\t0x0189: { /* n:\"BrtEndRwBrk\", */ T:-1 },\n\t0x018A: { /* n:\"BrtBeginColBrk\", */ T:1 },\n\t0x018B: { /* n:\"BrtEndColBrk\", */ T:-1 },\n\t0x018C: { /* n:\"BrtBrk\" */ },\n\t0x018D: { /* n:\"BrtUserBookView\" */ },\n\t0x018E: { /* n:\"BrtInfo\" */ },\n\t0x018F: { /* n:\"BrtCUsr\" */ },\n\t0x0190: { /* n:\"BrtUsr\" */ },\n\t0x0191: { /* n:\"BrtBeginUsers\", */ T:1 },\n\t0x0193: { /* n:\"BrtEOF\" */ },\n\t0x0194: { /* n:\"BrtUCR\" */ },\n\t0x0195: { /* n:\"BrtRRInsDel\" */ },\n\t0x0196: { /* n:\"BrtRREndInsDel\" */ },\n\t0x0197: { /* n:\"BrtRRMove\" */ },\n\t0x0198: { /* n:\"BrtRREndMove\" */ },\n\t0x0199: { /* n:\"BrtRRChgCell\" */ },\n\t0x019A: { /* n:\"BrtRREndChgCell\" */ },\n\t0x019B: { /* n:\"BrtRRHeader\" */ },\n\t0x019C: { /* n:\"BrtRRUserView\" */ },\n\t0x019D: { /* n:\"BrtRRRenSheet\" */ },\n\t0x019E: { /* n:\"BrtRRInsertSh\" */ },\n\t0x019F: { /* n:\"BrtRRDefName\" */ },\n\t0x01A0: { /* n:\"BrtRRNote\" */ },\n\t0x01A1: { /* n:\"BrtRRConflict\" */ },\n\t0x01A2: { /* n:\"BrtRRTQSIF\" */ },\n\t0x01A3: { /* n:\"BrtRRFormat\" */ },\n\t0x01A4: { /* n:\"BrtRREndFormat\" */ },\n\t0x01A5: { /* n:\"BrtRRAutoFmt\" */ },\n\t0x01A6: { /* n:\"BrtBeginUserShViews\", */ T:1 },\n\t0x01A7: { /* n:\"BrtBeginUserShView\", */ T:1 },\n\t0x01A8: { /* n:\"BrtEndUserShView\", */ T:-1 },\n\t0x01A9: { /* n:\"BrtEndUserShViews\", */ T:-1 },\n\t0x01AA: { /* n:\"BrtArrFmla\", */ f:parse_BrtArrFmla },\n\t0x01AB: { /* n:\"BrtShrFmla\", */ f:parse_BrtShrFmla },\n\t0x01AC: { /* n:\"BrtTable\" */ },\n\t0x01AD: { /* n:\"BrtBeginExtConnections\", */ T:1 },\n\t0x01AE: { /* n:\"BrtEndExtConnections\", */ T:-1 },\n\t0x01AF: { /* n:\"BrtBeginPCDCalcMems\", */ T:1 },\n\t0x01B0: { /* n:\"BrtEndPCDCalcMems\", */ T:-1 },\n\t0x01B1: { /* n:\"BrtBeginPCDCalcMem\", */ T:1 },\n\t0x01B2: { /* n:\"BrtEndPCDCalcMem\", */ T:-1 },\n\t0x01B3: { /* n:\"BrtBeginPCDHGLevels\", */ T:1 },\n\t0x01B4: { /* n:\"BrtEndPCDHGLevels\", */ T:-1 },\n\t0x01B5: { /* n:\"BrtBeginPCDHGLevel\", */ T:1 },\n\t0x01B6: { /* n:\"BrtEndPCDHGLevel\", */ T:-1 },\n\t0x01B7: { /* n:\"BrtBeginPCDHGLGroups\", */ T:1 },\n\t0x01B8: { /* n:\"BrtEndPCDHGLGroups\", */ T:-1 },\n\t0x01B9: { /* n:\"BrtBeginPCDHGLGroup\", */ T:1 },\n\t0x01BA: { /* n:\"BrtEndPCDHGLGroup\", */ T:-1 },\n\t0x01BB: { /* n:\"BrtBeginPCDHGLGMembers\", */ T:1 },\n\t0x01BC: { /* n:\"BrtEndPCDHGLGMembers\", */ T:-1 },\n\t0x01BD: { /* n:\"BrtBeginPCDHGLGMember\", */ T:1 },\n\t0x01BE: { /* n:\"BrtEndPCDHGLGMember\", */ T:-1 },\n\t0x01BF: { /* n:\"BrtBeginQSI\", */ T:1 },\n\t0x01C0: { /* n:\"BrtEndQSI\", */ T:-1 },\n\t0x01C1: { /* n:\"BrtBeginQSIR\", */ T:1 },\n\t0x01C2: { /* n:\"BrtEndQSIR\", */ T:-1 },\n\t0x01C3: { /* n:\"BrtBeginDeletedNames\", */ T:1 },\n\t0x01C4: { /* n:\"BrtEndDeletedNames\", */ T:-1 },\n\t0x01C5: { /* n:\"BrtBeginDeletedName\", */ T:1 },\n\t0x01C6: { /* n:\"BrtEndDeletedName\", */ T:-1 },\n\t0x01C7: { /* n:\"BrtBeginQSIFs\", */ T:1 },\n\t0x01C8: { /* n:\"BrtEndQSIFs\", */ T:-1 },\n\t0x01C9: { /* n:\"BrtBeginQSIF\", */ T:1 },\n\t0x01CA: { /* n:\"BrtEndQSIF\", */ T:-1 },\n\t0x01CB: { /* n:\"BrtBeginAutoSortScope\", */ T:1 },\n\t0x01CC: { /* n:\"BrtEndAutoSortScope\", */ T:-1 },\n\t0x01CD: { /* n:\"BrtBeginConditionalFormatting\", */ T:1 },\n\t0x01CE: { /* n:\"BrtEndConditionalFormatting\", */ T:-1 },\n\t0x01CF: { /* n:\"BrtBeginCFRule\", */ T:1 },\n\t0x01D0: { /* n:\"BrtEndCFRule\", */ T:-1 },\n\t0x01D1: { /* n:\"BrtBeginIconSet\", */ T:1 },\n\t0x01D2: { /* n:\"BrtEndIconSet\", */ T:-1 },\n\t0x01D3: { /* n:\"BrtBeginDatabar\", */ T:1 },\n\t0x01D4: { /* n:\"BrtEndDatabar\", */ T:-1 },\n\t0x01D5: { /* n:\"BrtBeginColorScale\", */ T:1 },\n\t0x01D6: { /* n:\"BrtEndColorScale\", */ T:-1 },\n\t0x01D7: { /* n:\"BrtCFVO\" */ },\n\t0x01D8: { /* n:\"BrtExternValueMeta\" */ },\n\t0x01D9: { /* n:\"BrtBeginColorPalette\", */ T:1 },\n\t0x01DA: { /* n:\"BrtEndColorPalette\", */ T:-1 },\n\t0x01DB: { /* n:\"BrtIndexedColor\" */ },\n\t0x01DC: { /* n:\"BrtMargins\", */ f:parse_BrtMargins },\n\t0x01DD: { /* n:\"BrtPrintOptions\" */ },\n\t0x01DE: { /* n:\"BrtPageSetup\" */ },\n\t0x01DF: { /* n:\"BrtBeginHeaderFooter\", */ T:1 },\n\t0x01E0: { /* n:\"BrtEndHeaderFooter\", */ T:-1 },\n\t0x01E1: { /* n:\"BrtBeginSXCrtFormat\", */ T:1 },\n\t0x01E2: { /* n:\"BrtEndSXCrtFormat\", */ T:-1 },\n\t0x01E3: { /* n:\"BrtBeginSXCrtFormats\", */ T:1 },\n\t0x01E4: { /* n:\"BrtEndSXCrtFormats\", */ T:-1 },\n\t0x01E5: { /* n:\"BrtWsFmtInfo\", */ f:parse_BrtWsFmtInfo },\n\t0x01E6: { /* n:\"BrtBeginMgs\", */ T:1 },\n\t0x01E7: { /* n:\"BrtEndMGs\", */ T:-1 },\n\t0x01E8: { /* n:\"BrtBeginMGMaps\", */ T:1 },\n\t0x01E9: { /* n:\"BrtEndMGMaps\", */ T:-1 },\n\t0x01EA: { /* n:\"BrtBeginMG\", */ T:1 },\n\t0x01EB: { /* n:\"BrtEndMG\", */ T:-1 },\n\t0x01EC: { /* n:\"BrtBeginMap\", */ T:1 },\n\t0x01ED: { /* n:\"BrtEndMap\", */ T:-1 },\n\t0x01EE: { /* n:\"BrtHLink\", */ f:parse_BrtHLink },\n\t0x01EF: { /* n:\"BrtBeginDCon\", */ T:1 },\n\t0x01F0: { /* n:\"BrtEndDCon\", */ T:-1 },\n\t0x01F1: { /* n:\"BrtBeginDRefs\", */ T:1 },\n\t0x01F2: { /* n:\"BrtEndDRefs\", */ T:-1 },\n\t0x01F3: { /* n:\"BrtDRef\" */ },\n\t0x01F4: { /* n:\"BrtBeginScenMan\", */ T:1 },\n\t0x01F5: { /* n:\"BrtEndScenMan\", */ T:-1 },\n\t0x01F6: { /* n:\"BrtBeginSct\", */ T:1 },\n\t0x01F7: { /* n:\"BrtEndSct\", */ T:-1 },\n\t0x01F8: { /* n:\"BrtSlc\" */ },\n\t0x01F9: { /* n:\"BrtBeginDXFs\", */ T:1 },\n\t0x01FA: { /* n:\"BrtEndDXFs\", */ T:-1 },\n\t0x01FB: { /* n:\"BrtDXF\" */ },\n\t0x01FC: { /* n:\"BrtBeginTableStyles\", */ T:1 },\n\t0x01FD: { /* n:\"BrtEndTableStyles\", */ T:-1 },\n\t0x01FE: { /* n:\"BrtBeginTableStyle\", */ T:1 },\n\t0x01FF: { /* n:\"BrtEndTableStyle\", */ T:-1 },\n\t0x0200: { /* n:\"BrtTableStyleElement\" */ },\n\t0x0201: { /* n:\"BrtTableStyleClient\" */ },\n\t0x0202: { /* n:\"BrtBeginVolDeps\", */ T:1 },\n\t0x0203: { /* n:\"BrtEndVolDeps\", */ T:-1 },\n\t0x0204: { /* n:\"BrtBeginVolType\", */ T:1 },\n\t0x0205: { /* n:\"BrtEndVolType\", */ T:-1 },\n\t0x0206: { /* n:\"BrtBeginVolMain\", */ T:1 },\n\t0x0207: { /* n:\"BrtEndVolMain\", */ T:-1 },\n\t0x0208: { /* n:\"BrtBeginVolTopic\", */ T:1 },\n\t0x0209: { /* n:\"BrtEndVolTopic\", */ T:-1 },\n\t0x020A: { /* n:\"BrtVolSubtopic\" */ },\n\t0x020B: { /* n:\"BrtVolRef\" */ },\n\t0x020C: { /* n:\"BrtVolNum\" */ },\n\t0x020D: { /* n:\"BrtVolErr\" */ },\n\t0x020E: { /* n:\"BrtVolStr\" */ },\n\t0x020F: { /* n:\"BrtVolBool\" */ },\n\t0x0210: { /* n:\"BrtBeginCalcChain$\", */ T:1 },\n\t0x0211: { /* n:\"BrtEndCalcChain$\", */ T:-1 },\n\t0x0212: { /* n:\"BrtBeginSortState\", */ T:1 },\n\t0x0213: { /* n:\"BrtEndSortState\", */ T:-1 },\n\t0x0214: { /* n:\"BrtBeginSortCond\", */ T:1 },\n\t0x0215: { /* n:\"BrtEndSortCond\", */ T:-1 },\n\t0x0216: { /* n:\"BrtBookProtection\" */ },\n\t0x0217: { /* n:\"BrtSheetProtection\" */ },\n\t0x0218: { /* n:\"BrtRangeProtection\" */ },\n\t0x0219: { /* n:\"BrtPhoneticInfo\" */ },\n\t0x021A: { /* n:\"BrtBeginECTxtWiz\", */ T:1 },\n\t0x021B: { /* n:\"BrtEndECTxtWiz\", */ T:-1 },\n\t0x021C: { /* n:\"BrtBeginECTWFldInfoLst\", */ T:1 },\n\t0x021D: { /* n:\"BrtEndECTWFldInfoLst\", */ T:-1 },\n\t0x021E: { /* n:\"BrtBeginECTwFldInfo\", */ T:1 },\n\t0x0224: { /* n:\"BrtFileSharing\" */ },\n\t0x0225: { /* n:\"BrtOleSize\" */ },\n\t0x0226: { /* n:\"BrtDrawing\", */ f:parse_RelID },\n\t0x0227: { /* n:\"BrtLegacyDrawing\", */ f:parse_XLNullableWideString },\n\t0x0228: { /* n:\"BrtLegacyDrawingHF\" */ },\n\t0x0229: { /* n:\"BrtWebOpt\" */ },\n\t0x022A: { /* n:\"BrtBeginWebPubItems\", */ T:1 },\n\t0x022B: { /* n:\"BrtEndWebPubItems\", */ T:-1 },\n\t0x022C: { /* n:\"BrtBeginWebPubItem\", */ T:1 },\n\t0x022D: { /* n:\"BrtEndWebPubItem\", */ T:-1 },\n\t0x022E: { /* n:\"BrtBeginSXCondFmt\", */ T:1 },\n\t0x022F: { /* n:\"BrtEndSXCondFmt\", */ T:-1 },\n\t0x0230: { /* n:\"BrtBeginSXCondFmts\", */ T:1 },\n\t0x0231: { /* n:\"BrtEndSXCondFmts\", */ T:-1 },\n\t0x0232: { /* n:\"BrtBkHim\" */ },\n\t0x0234: { /* n:\"BrtColor\" */ },\n\t0x0235: { /* n:\"BrtBeginIndexedColors\", */ T:1 },\n\t0x0236: { /* n:\"BrtEndIndexedColors\", */ T:-1 },\n\t0x0239: { /* n:\"BrtBeginMRUColors\", */ T:1 },\n\t0x023A: { /* n:\"BrtEndMRUColors\", */ T:-1 },\n\t0x023C: { /* n:\"BrtMRUColor\" */ },\n\t0x023D: { /* n:\"BrtBeginDVals\", */ T:1 },\n\t0x023E: { /* n:\"BrtEndDVals\", */ T:-1 },\n\t0x0241: { /* n:\"BrtSupNameStart\" */ },\n\t0x0242: { /* n:\"BrtSupNameValueStart\" */ },\n\t0x0243: { /* n:\"BrtSupNameValueEnd\" */ },\n\t0x0244: { /* n:\"BrtSupNameNum\" */ },\n\t0x0245: { /* n:\"BrtSupNameErr\" */ },\n\t0x0246: { /* n:\"BrtSupNameSt\" */ },\n\t0x0247: { /* n:\"BrtSupNameNil\" */ },\n\t0x0248: { /* n:\"BrtSupNameBool\" */ },\n\t0x0249: { /* n:\"BrtSupNameFmla\" */ },\n\t0x024A: { /* n:\"BrtSupNameBits\" */ },\n\t0x024B: { /* n:\"BrtSupNameEnd\" */ },\n\t0x024C: { /* n:\"BrtEndSupBook\", */ T:-1 },\n\t0x024D: { /* n:\"BrtCellSmartTagProperty\" */ },\n\t0x024E: { /* n:\"BrtBeginCellSmartTag\", */ T:1 },\n\t0x024F: { /* n:\"BrtEndCellSmartTag\", */ T:-1 },\n\t0x0250: { /* n:\"BrtBeginCellSmartTags\", */ T:1 },\n\t0x0251: { /* n:\"BrtEndCellSmartTags\", */ T:-1 },\n\t0x0252: { /* n:\"BrtBeginSmartTags\", */ T:1 },\n\t0x0253: { /* n:\"BrtEndSmartTags\", */ T:-1 },\n\t0x0254: { /* n:\"BrtSmartTagType\" */ },\n\t0x0255: { /* n:\"BrtBeginSmartTagTypes\", */ T:1 },\n\t0x0256: { /* n:\"BrtEndSmartTagTypes\", */ T:-1 },\n\t0x0257: { /* n:\"BrtBeginSXFilters\", */ T:1 },\n\t0x0258: { /* n:\"BrtEndSXFilters\", */ T:-1 },\n\t0x0259: { /* n:\"BrtBeginSXFILTER\", */ T:1 },\n\t0x025A: { /* n:\"BrtEndSXFilter\", */ T:-1 },\n\t0x025B: { /* n:\"BrtBeginFills\", */ T:1 },\n\t0x025C: { /* n:\"BrtEndFills\", */ T:-1 },\n\t0x025D: { /* n:\"BrtBeginCellWatches\", */ T:1 },\n\t0x025E: { /* n:\"BrtEndCellWatches\", */ T:-1 },\n\t0x025F: { /* n:\"BrtCellWatch\" */ },\n\t0x0260: { /* n:\"BrtBeginCRErrs\", */ T:1 },\n\t0x0261: { /* n:\"BrtEndCRErrs\", */ T:-1 },\n\t0x0262: { /* n:\"BrtCrashRecErr\" */ },\n\t0x0263: { /* n:\"BrtBeginFonts\", */ T:1 },\n\t0x0264: { /* n:\"BrtEndFonts\", */ T:-1 },\n\t0x0265: { /* n:\"BrtBeginBorders\", */ T:1 },\n\t0x0266: { /* n:\"BrtEndBorders\", */ T:-1 },\n\t0x0267: { /* n:\"BrtBeginFmts\", */ T:1 },\n\t0x0268: { /* n:\"BrtEndFmts\", */ T:-1 },\n\t0x0269: { /* n:\"BrtBeginCellXFs\", */ T:1 },\n\t0x026A: { /* n:\"BrtEndCellXFs\", */ T:-1 },\n\t0x026B: { /* n:\"BrtBeginStyles\", */ T:1 },\n\t0x026C: { /* n:\"BrtEndStyles\", */ T:-1 },\n\t0x0271: { /* n:\"BrtBigName\" */ },\n\t0x0272: { /* n:\"BrtBeginCellStyleXFs\", */ T:1 },\n\t0x0273: { /* n:\"BrtEndCellStyleXFs\", */ T:-1 },\n\t0x0274: { /* n:\"BrtBeginComments\", */ T:1 },\n\t0x0275: { /* n:\"BrtEndComments\", */ T:-1 },\n\t0x0276: { /* n:\"BrtBeginCommentAuthors\", */ T:1 },\n\t0x0277: { /* n:\"BrtEndCommentAuthors\", */ T:-1 },\n\t0x0278: { /* n:\"BrtCommentAuthor\", */ f:parse_BrtCommentAuthor },\n\t0x0279: { /* n:\"BrtBeginCommentList\", */ T:1 },\n\t0x027A: { /* n:\"BrtEndCommentList\", */ T:-1 },\n\t0x027B: { /* n:\"BrtBeginComment\", */ T:1, f:parse_BrtBeginComment},\n\t0x027C: { /* n:\"BrtEndComment\", */ T:-1 },\n\t0x027D: { /* n:\"BrtCommentText\", */ f:parse_BrtCommentText },\n\t0x027E: { /* n:\"BrtBeginOleObjects\", */ T:1 },\n\t0x027F: { /* n:\"BrtOleObject\" */ },\n\t0x0280: { /* n:\"BrtEndOleObjects\", */ T:-1 },\n\t0x0281: { /* n:\"BrtBeginSxrules\", */ T:1 },\n\t0x0282: { /* n:\"BrtEndSxRules\", */ T:-1 },\n\t0x0283: { /* n:\"BrtBeginActiveXControls\", */ T:1 },\n\t0x0284: { /* n:\"BrtActiveX\" */ },\n\t0x0285: { /* n:\"BrtEndActiveXControls\", */ T:-1 },\n\t0x0286: { /* n:\"BrtBeginPCDSDTCEMembersSortBy\", */ T:1 },\n\t0x0288: { /* n:\"BrtBeginCellIgnoreECs\", */ T:1 },\n\t0x0289: { /* n:\"BrtCellIgnoreEC\" */ },\n\t0x028A: { /* n:\"BrtEndCellIgnoreECs\", */ T:-1 },\n\t0x028B: { /* n:\"BrtCsProp\", */ f:parse_BrtCsProp },\n\t0x028C: { /* n:\"BrtCsPageSetup\" */ },\n\t0x028D: { /* n:\"BrtBeginUserCsViews\", */ T:1 },\n\t0x028E: { /* n:\"BrtEndUserCsViews\", */ T:-1 },\n\t0x028F: { /* n:\"BrtBeginUserCsView\", */ T:1 },\n\t0x0290: { /* n:\"BrtEndUserCsView\", */ T:-1 },\n\t0x0291: { /* n:\"BrtBeginPcdSFCIEntries\", */ T:1 },\n\t0x0292: { /* n:\"BrtEndPCDSFCIEntries\", */ T:-1 },\n\t0x0293: { /* n:\"BrtPCDSFCIEntry\" */ },\n\t0x0294: { /* n:\"BrtBeginListParts\", */ T:1 },\n\t0x0295: { /* n:\"BrtListPart\" */ },\n\t0x0296: { /* n:\"BrtEndListParts\", */ T:-1 },\n\t0x0297: { /* n:\"BrtSheetCalcProp\" */ },\n\t0x0298: { /* n:\"BrtBeginFnGroup\", */ T:1 },\n\t0x0299: { /* n:\"BrtFnGroup\" */ },\n\t0x029A: { /* n:\"BrtEndFnGroup\", */ T:-1 },\n\t0x029B: { /* n:\"BrtSupAddin\" */ },\n\t0x029C: { /* n:\"BrtSXTDMPOrder\" */ },\n\t0x029D: { /* n:\"BrtCsProtection\" */ },\n\t0x029F: { /* n:\"BrtBeginWsSortMap\", */ T:1 },\n\t0x02A0: { /* n:\"BrtEndWsSortMap\", */ T:-1 },\n\t0x02A1: { /* n:\"BrtBeginRRSort\", */ T:1 },\n\t0x02A2: { /* n:\"BrtEndRRSort\", */ T:-1 },\n\t0x02A3: { /* n:\"BrtRRSortItem\" */ },\n\t0x02A4: { /* n:\"BrtFileSharingIso\" */ },\n\t0x02A5: { /* n:\"BrtBookProtectionIso\" */ },\n\t0x02A6: { /* n:\"BrtSheetProtectionIso\" */ },\n\t0x02A7: { /* n:\"BrtCsProtectionIso\" */ },\n\t0x02A8: { /* n:\"BrtRangeProtectionIso\" */ },\n\t0x02A9: { /* n:\"BrtDValList\" */ },\n\t0x0400: { /* n:\"BrtRwDescent\" */ },\n\t0x0401: { /* n:\"BrtKnownFonts\" */ },\n\t0x0402: { /* n:\"BrtBeginSXTupleSet\", */ T:1 },\n\t0x0403: { /* n:\"BrtEndSXTupleSet\", */ T:-1 },\n\t0x0404: { /* n:\"BrtBeginSXTupleSetHeader\", */ T:1 },\n\t0x0405: { /* n:\"BrtEndSXTupleSetHeader\", */ T:-1 },\n\t0x0406: { /* n:\"BrtSXTupleSetHeaderItem\" */ },\n\t0x0407: { /* n:\"BrtBeginSXTupleSetData\", */ T:1 },\n\t0x0408: { /* n:\"BrtEndSXTupleSetData\", */ T:-1 },\n\t0x0409: { /* n:\"BrtBeginSXTupleSetRow\", */ T:1 },\n\t0x040A: { /* n:\"BrtEndSXTupleSetRow\", */ T:-1 },\n\t0x040B: { /* n:\"BrtSXTupleSetRowItem\" */ },\n\t0x040C: { /* n:\"BrtNameExt\" */ },\n\t0x040D: { /* n:\"BrtPCDH14\" */ },\n\t0x040E: { /* n:\"BrtBeginPCDCalcMem14\", */ T:1 },\n\t0x040F: { /* n:\"BrtEndPCDCalcMem14\", */ T:-1 },\n\t0x0410: { /* n:\"BrtSXTH14\" */ },\n\t0x0411: { /* n:\"BrtBeginSparklineGroup\", */ T:1 },\n\t0x0412: { /* n:\"BrtEndSparklineGroup\", */ T:-1 },\n\t0x0413: { /* n:\"BrtSparkline\" */ },\n\t0x0414: { /* n:\"BrtSXDI14\" */ },\n\t0x0415: { /* n:\"BrtWsFmtInfoEx14\" */ },\n\t0x0416: { /* n:\"BrtBeginConditionalFormatting14\", */ T:1 },\n\t0x0417: { /* n:\"BrtEndConditionalFormatting14\", */ T:-1 },\n\t0x0418: { /* n:\"BrtBeginCFRule14\", */ T:1 },\n\t0x0419: { /* n:\"BrtEndCFRule14\", */ T:-1 },\n\t0x041A: { /* n:\"BrtCFVO14\" */ },\n\t0x041B: { /* n:\"BrtBeginDatabar14\", */ T:1 },\n\t0x041C: { /* n:\"BrtBeginIconSet14\", */ T:1 },\n\t0x041D: { /* n:\"BrtDVal14\", */ f: parse_BrtDVal14 },\n\t0x041E: { /* n:\"BrtBeginDVals14\", */ T:1 },\n\t0x041F: { /* n:\"BrtColor14\" */ },\n\t0x0420: { /* n:\"BrtBeginSparklines\", */ T:1 },\n\t0x0421: { /* n:\"BrtEndSparklines\", */ T:-1 },\n\t0x0422: { /* n:\"BrtBeginSparklineGroups\", */ T:1 },\n\t0x0423: { /* n:\"BrtEndSparklineGroups\", */ T:-1 },\n\t0x0425: { /* n:\"BrtSXVD14\" */ },\n\t0x0426: { /* n:\"BrtBeginSXView14\", */ T:1 },\n\t0x0427: { /* n:\"BrtEndSXView14\", */ T:-1 },\n\t0x0428: { /* n:\"BrtBeginSXView16\", */ T:1 },\n\t0x0429: { /* n:\"BrtEndSXView16\", */ T:-1 },\n\t0x042A: { /* n:\"BrtBeginPCD14\", */ T:1 },\n\t0x042B: { /* n:\"BrtEndPCD14\", */ T:-1 },\n\t0x042C: { /* n:\"BrtBeginExtConn14\", */ T:1 },\n\t0x042D: { /* n:\"BrtEndExtConn14\", */ T:-1 },\n\t0x042E: { /* n:\"BrtBeginSlicerCacheIDs\", */ T:1 },\n\t0x042F: { /* n:\"BrtEndSlicerCacheIDs\", */ T:-1 },\n\t0x0430: { /* n:\"BrtBeginSlicerCacheID\", */ T:1 },\n\t0x0431: { /* n:\"BrtEndSlicerCacheID\", */ T:-1 },\n\t0x0433: { /* n:\"BrtBeginSlicerCache\", */ T:1 },\n\t0x0434: { /* n:\"BrtEndSlicerCache\", */ T:-1 },\n\t0x0435: { /* n:\"BrtBeginSlicerCacheDef\", */ T:1 },\n\t0x0436: { /* n:\"BrtEndSlicerCacheDef\", */ T:-1 },\n\t0x0437: { /* n:\"BrtBeginSlicersEx\", */ T:1 },\n\t0x0438: { /* n:\"BrtEndSlicersEx\", */ T:-1 },\n\t0x0439: { /* n:\"BrtBeginSlicerEx\", */ T:1 },\n\t0x043A: { /* n:\"BrtEndSlicerEx\", */ T:-1 },\n\t0x043B: { /* n:\"BrtBeginSlicer\", */ T:1 },\n\t0x043C: { /* n:\"BrtEndSlicer\", */ T:-1 },\n\t0x043D: { /* n:\"BrtSlicerCachePivotTables\" */ },\n\t0x043E: { /* n:\"BrtBeginSlicerCacheOlapImpl\", */ T:1 },\n\t0x043F: { /* n:\"BrtEndSlicerCacheOlapImpl\", */ T:-1 },\n\t0x0440: { /* n:\"BrtBeginSlicerCacheLevelsData\", */ T:1 },\n\t0x0441: { /* n:\"BrtEndSlicerCacheLevelsData\", */ T:-1 },\n\t0x0442: { /* n:\"BrtBeginSlicerCacheLevelData\", */ T:1 },\n\t0x0443: { /* n:\"BrtEndSlicerCacheLevelData\", */ T:-1 },\n\t0x0444: { /* n:\"BrtBeginSlicerCacheSiRanges\", */ T:1 },\n\t0x0445: { /* n:\"BrtEndSlicerCacheSiRanges\", */ T:-1 },\n\t0x0446: { /* n:\"BrtBeginSlicerCacheSiRange\", */ T:1 },\n\t0x0447: { /* n:\"BrtEndSlicerCacheSiRange\", */ T:-1 },\n\t0x0448: { /* n:\"BrtSlicerCacheOlapItem\" */ },\n\t0x0449: { /* n:\"BrtBeginSlicerCacheSelections\", */ T:1 },\n\t0x044A: { /* n:\"BrtSlicerCacheSelection\" */ },\n\t0x044B: { /* n:\"BrtEndSlicerCacheSelections\", */ T:-1 },\n\t0x044C: { /* n:\"BrtBeginSlicerCacheNative\", */ T:1 },\n\t0x044D: { /* n:\"BrtEndSlicerCacheNative\", */ T:-1 },\n\t0x044E: { /* n:\"BrtSlicerCacheNativeItem\" */ },\n\t0x044F: { /* n:\"BrtRangeProtection14\" */ },\n\t0x0450: { /* n:\"BrtRangeProtectionIso14\" */ },\n\t0x0451: { /* n:\"BrtCellIgnoreEC14\" */ },\n\t0x0457: { /* n:\"BrtList14\" */ },\n\t0x0458: { /* n:\"BrtCFIcon\" */ },\n\t0x0459: { /* n:\"BrtBeginSlicerCachesPivotCacheIDs\", */ T:1 },\n\t0x045A: { /* n:\"BrtEndSlicerCachesPivotCacheIDs\", */ T:-1 },\n\t0x045B: { /* n:\"BrtBeginSlicers\", */ T:1 },\n\t0x045C: { /* n:\"BrtEndSlicers\", */ T:-1 },\n\t0x045D: { /* n:\"BrtWbProp14\" */ },\n\t0x045E: { /* n:\"BrtBeginSXEdit\", */ T:1 },\n\t0x045F: { /* n:\"BrtEndSXEdit\", */ T:-1 },\n\t0x0460: { /* n:\"BrtBeginSXEdits\", */ T:1 },\n\t0x0461: { /* n:\"BrtEndSXEdits\", */ T:-1 },\n\t0x0462: { /* n:\"BrtBeginSXChange\", */ T:1 },\n\t0x0463: { /* n:\"BrtEndSXChange\", */ T:-1 },\n\t0x0464: { /* n:\"BrtBeginSXChanges\", */ T:1 },\n\t0x0465: { /* n:\"BrtEndSXChanges\", */ T:-1 },\n\t0x0466: { /* n:\"BrtSXTupleItems\" */ },\n\t0x0468: { /* n:\"BrtBeginSlicerStyle\", */ T:1 },\n\t0x0469: { /* n:\"BrtEndSlicerStyle\", */ T:-1 },\n\t0x046A: { /* n:\"BrtSlicerStyleElement\" */ },\n\t0x046B: { /* n:\"BrtBeginStyleSheetExt14\", */ T:1 },\n\t0x046C: { /* n:\"BrtEndStyleSheetExt14\", */ T:-1 },\n\t0x046D: { /* n:\"BrtBeginSlicerCachesPivotCacheID\", */ T:1 },\n\t0x046E: { /* n:\"BrtEndSlicerCachesPivotCacheID\", */ T:-1 },\n\t0x046F: { /* n:\"BrtBeginConditionalFormattings\", */ T:1 },\n\t0x0470: { /* n:\"BrtEndConditionalFormattings\", */ T:-1 },\n\t0x0471: { /* n:\"BrtBeginPCDCalcMemExt\", */ T:1 },\n\t0x0472: { /* n:\"BrtEndPCDCalcMemExt\", */ T:-1 },\n\t0x0473: { /* n:\"BrtBeginPCDCalcMemsExt\", */ T:1 },\n\t0x0474: { /* n:\"BrtEndPCDCalcMemsExt\", */ T:-1 },\n\t0x0475: { /* n:\"BrtPCDField14\" */ },\n\t0x0476: { /* n:\"BrtBeginSlicerStyles\", */ T:1 },\n\t0x0477: { /* n:\"BrtEndSlicerStyles\", */ T:-1 },\n\t0x0478: { /* n:\"BrtBeginSlicerStyleElements\", */ T:1 },\n\t0x0479: { /* n:\"BrtEndSlicerStyleElements\", */ T:-1 },\n\t0x047A: { /* n:\"BrtCFRuleExt\" */ },\n\t0x047B: { /* n:\"BrtBeginSXCondFmt14\", */ T:1 },\n\t0x047C: { /* n:\"BrtEndSXCondFmt14\", */ T:-1 },\n\t0x047D: { /* n:\"BrtBeginSXCondFmts14\", */ T:1 },\n\t0x047E: { /* n:\"BrtEndSXCondFmts14\", */ T:-1 },\n\t0x0480: { /* n:\"BrtBeginSortCond14\", */ T:1 },\n\t0x0481: { /* n:\"BrtEndSortCond14\", */ T:-1 },\n\t0x0482: { /* n:\"BrtEndDVals14\", */ T:-1 },\n\t0x0483: { /* n:\"BrtEndIconSet14\", */ T:-1 },\n\t0x0484: { /* n:\"BrtEndDatabar14\", */ T:-1 },\n\t0x0485: { /* n:\"BrtBeginColorScale14\", */ T:1 },\n\t0x0486: { /* n:\"BrtEndColorScale14\", */ T:-1 },\n\t0x0487: { /* n:\"BrtBeginSxrules14\", */ T:1 },\n\t0x0488: { /* n:\"BrtEndSxrules14\", */ T:-1 },\n\t0x0489: { /* n:\"BrtBeginPRule14\", */ T:1 },\n\t0x048A: { /* n:\"BrtEndPRule14\", */ T:-1 },\n\t0x048B: { /* n:\"BrtBeginPRFilters14\", */ T:1 },\n\t0x048C: { /* n:\"BrtEndPRFilters14\", */ T:-1 },\n\t0x048D: { /* n:\"BrtBeginPRFilter14\", */ T:1 },\n\t0x048E: { /* n:\"BrtEndPRFilter14\", */ T:-1 },\n\t0x048F: { /* n:\"BrtBeginPRFItem14\", */ T:1 },\n\t0x0490: { /* n:\"BrtEndPRFItem14\", */ T:-1 },\n\t0x0491: { /* n:\"BrtBeginCellIgnoreECs14\", */ T:1 },\n\t0x0492: { /* n:\"BrtEndCellIgnoreECs14\", */ T:-1 },\n\t0x0493: { /* n:\"BrtDxf14\" */ },\n\t0x0494: { /* n:\"BrtBeginDxF14s\", */ T:1 },\n\t0x0495: { /* n:\"BrtEndDxf14s\", */ T:-1 },\n\t0x0499: { /* n:\"BrtFilter14\" */ },\n\t0x049A: { /* n:\"BrtBeginCustomFilters14\", */ T:1 },\n\t0x049C: { /* n:\"BrtCustomFilter14\" */ },\n\t0x049D: { /* n:\"BrtIconFilter14\" */ },\n\t0x049E: { /* n:\"BrtPivotCacheConnectionName\" */ },\n\t0x0800: { /* n:\"BrtBeginDecoupledPivotCacheIDs\", */ T:1 },\n\t0x0801: { /* n:\"BrtEndDecoupledPivotCacheIDs\", */ T:-1 },\n\t0x0802: { /* n:\"BrtDecoupledPivotCacheID\" */ },\n\t0x0803: { /* n:\"BrtBeginPivotTableRefs\", */ T:1 },\n\t0x0804: { /* n:\"BrtEndPivotTableRefs\", */ T:-1 },\n\t0x0805: { /* n:\"BrtPivotTableRef\" */ },\n\t0x0806: { /* n:\"BrtSlicerCacheBookPivotTables\" */ },\n\t0x0807: { /* n:\"BrtBeginSxvcells\", */ T:1 },\n\t0x0808: { /* n:\"BrtEndSxvcells\", */ T:-1 },\n\t0x0809: { /* n:\"BrtBeginSxRow\", */ T:1 },\n\t0x080A: { /* n:\"BrtEndSxRow\", */ T:-1 },\n\t0x080C: { /* n:\"BrtPcdCalcMem15\" */ },\n\t0x0813: { /* n:\"BrtQsi15\" */ },\n\t0x0814: { /* n:\"BrtBeginWebExtensions\", */ T:1 },\n\t0x0815: { /* n:\"BrtEndWebExtensions\", */ T:-1 },\n\t0x0816: { /* n:\"BrtWebExtension\" */ },\n\t0x0817: { /* n:\"BrtAbsPath15\" */ },\n\t0x0818: { /* n:\"BrtBeginPivotTableUISettings\", */ T:1 },\n\t0x0819: { /* n:\"BrtEndPivotTableUISettings\", */ T:-1 },\n\t0x081B: { /* n:\"BrtTableSlicerCacheIDs\" */ },\n\t0x081C: { /* n:\"BrtTableSlicerCacheID\" */ },\n\t0x081D: { /* n:\"BrtBeginTableSlicerCache\", */ T:1 },\n\t0x081E: { /* n:\"BrtEndTableSlicerCache\", */ T:-1 },\n\t0x081F: { /* n:\"BrtSxFilter15\" */ },\n\t0x0820: { /* n:\"BrtBeginTimelineCachePivotCacheIDs\", */ T:1 },\n\t0x0821: { /* n:\"BrtEndTimelineCachePivotCacheIDs\", */ T:-1 },\n\t0x0822: { /* n:\"BrtTimelineCachePivotCacheID\" */ },\n\t0x0823: { /* n:\"BrtBeginTimelineCacheIDs\", */ T:1 },\n\t0x0824: { /* n:\"BrtEndTimelineCacheIDs\", */ T:-1 },\n\t0x0825: { /* n:\"BrtBeginTimelineCacheID\", */ T:1 },\n\t0x0826: { /* n:\"BrtEndTimelineCacheID\", */ T:-1 },\n\t0x0827: { /* n:\"BrtBeginTimelinesEx\", */ T:1 },\n\t0x0828: { /* n:\"BrtEndTimelinesEx\", */ T:-1 },\n\t0x0829: { /* n:\"BrtBeginTimelineEx\", */ T:1 },\n\t0x082A: { /* n:\"BrtEndTimelineEx\", */ T:-1 },\n\t0x082B: { /* n:\"BrtWorkBookPr15\" */ },\n\t0x082C: { /* n:\"BrtPCDH15\" */ },\n\t0x082D: { /* n:\"BrtBeginTimelineStyle\", */ T:1 },\n\t0x082E: { /* n:\"BrtEndTimelineStyle\", */ T:-1 },\n\t0x082F: { /* n:\"BrtTimelineStyleElement\" */ },\n\t0x0830: { /* n:\"BrtBeginTimelineStylesheetExt15\", */ T:1 },\n\t0x0831: { /* n:\"BrtEndTimelineStylesheetExt15\", */ T:-1 },\n\t0x0832: { /* n:\"BrtBeginTimelineStyles\", */ T:1 },\n\t0x0833: { /* n:\"BrtEndTimelineStyles\", */ T:-1 },\n\t0x0834: { /* n:\"BrtBeginTimelineStyleElements\", */ T:1 },\n\t0x0835: { /* n:\"BrtEndTimelineStyleElements\", */ T:-1 },\n\t0x0836: { /* n:\"BrtDxf15\" */ },\n\t0x0837: { /* n:\"BrtBeginDxfs15\", */ T:1 },\n\t0x0838: { /* n:\"BrtEndDxfs15\", */ T:-1 },\n\t0x0839: { /* n:\"BrtSlicerCacheHideItemsWithNoData\" */ },\n\t0x083A: { /* n:\"BrtBeginItemUniqueNames\", */ T:1 },\n\t0x083B: { /* n:\"BrtEndItemUniqueNames\", */ T:-1 },\n\t0x083C: { /* n:\"BrtItemUniqueName\" */ },\n\t0x083D: { /* n:\"BrtBeginExtConn15\", */ T:1 },\n\t0x083E: { /* n:\"BrtEndExtConn15\", */ T:-1 },\n\t0x083F: { /* n:\"BrtBeginOledbPr15\", */ T:1 },\n\t0x0840: { /* n:\"BrtEndOledbPr15\", */ T:-1 },\n\t0x0841: { /* n:\"BrtBeginDataFeedPr15\", */ T:1 },\n\t0x0842: { /* n:\"BrtEndDataFeedPr15\", */ T:-1 },\n\t0x0843: { /* n:\"BrtTextPr15\" */ },\n\t0x0844: { /* n:\"BrtRangePr15\" */ },\n\t0x0845: { /* n:\"BrtDbCommand15\" */ },\n\t0x0846: { /* n:\"BrtBeginDbTables15\", */ T:1 },\n\t0x0847: { /* n:\"BrtEndDbTables15\", */ T:-1 },\n\t0x0848: { /* n:\"BrtDbTable15\" */ },\n\t0x0849: { /* n:\"BrtBeginDataModel\", */ T:1 },\n\t0x084A: { /* n:\"BrtEndDataModel\", */ T:-1 },\n\t0x084B: { /* n:\"BrtBeginModelTables\", */ T:1 },\n\t0x084C: { /* n:\"BrtEndModelTables\", */ T:-1 },\n\t0x084D: { /* n:\"BrtModelTable\" */ },\n\t0x084E: { /* n:\"BrtBeginModelRelationships\", */ T:1 },\n\t0x084F: { /* n:\"BrtEndModelRelationships\", */ T:-1 },\n\t0x0850: { /* n:\"BrtModelRelationship\" */ },\n\t0x0851: { /* n:\"BrtBeginECTxtWiz15\", */ T:1 },\n\t0x0852: { /* n:\"BrtEndECTxtWiz15\", */ T:-1 },\n\t0x0853: { /* n:\"BrtBeginECTWFldInfoLst15\", */ T:1 },\n\t0x0854: { /* n:\"BrtEndECTWFldInfoLst15\", */ T:-1 },\n\t0x0855: { /* n:\"BrtBeginECTWFldInfo15\", */ T:1 },\n\t0x0856: { /* n:\"BrtFieldListActiveItem\" */ },\n\t0x0857: { /* n:\"BrtPivotCacheIdVersion\" */ },\n\t0x0858: { /* n:\"BrtSXDI15\" */ },\n\t0x0859: { /* n:\"BrtBeginModelTimeGroupings\", */ T:1 },\n\t0x085A: { /* n:\"BrtEndModelTimeGroupings\", */ T:-1 },\n\t0x085B: { /* n:\"BrtBeginModelTimeGrouping\", */ T:1 },\n\t0x085C: { /* n:\"BrtEndModelTimeGrouping\", */ T:-1 },\n\t0x085D: { /* n:\"BrtModelTimeGroupingCalcCol\" */ },\n\t0x0C00: { /* n:\"BrtUid\" */ },\n\t0x0C01: { /* n:\"BrtRevisionPtr\" */ },\n\t0x1000: { /* n:\"BrtBeginDynamicArrayPr\", */ T:1 },\n\t0x1001: { /* n:\"BrtEndDynamicArrayPr\", */ T:-1 },\n\t0x138A: { /* n:\"BrtBeginRichValueBlock\", */ T:1 },\n\t0x138B: { /* n:\"BrtEndRichValueBlock\", */ T:-1 },\n\t0x13D9: { /* n:\"BrtBeginRichFilters\", */ T:1 },\n\t0x13DA: { /* n:\"BrtEndRichFilters\", */ T:-1 },\n\t0x13DB: { /* n:\"BrtRichFilter\" */ },\n\t0x13DC: { /* n:\"BrtBeginRichFilterColumn\", */ T:1 },\n\t0x13DD: { /* n:\"BrtEndRichFilterColumn\", */ T:-1 },\n\t0x13DE: { /* n:\"BrtBeginCustomRichFilters\", */ T:1 },\n\t0x13DF: { /* n:\"BrtEndCustomRichFilters\", */ T:-1 },\n\t0x13E0: { /* n:\"BrtCustomRichFilter\" */ },\n\t0x13E1: { /* n:\"BrtTop10RichFilter\" */ },\n\t0x13E2: { /* n:\"BrtDynamicRichFilter\" */ },\n\t0x13E4: { /* n:\"BrtBeginRichSortCondition\", */ T:1 },\n\t0x13E5: { /* n:\"BrtEndRichSortCondition\", */ T:-1 },\n\t0x13E6: { /* n:\"BrtRichFilterDateGroupItem\" */ },\n\t0x13E7: { /* n:\"BrtBeginCalcFeatures\", */ T:1 },\n\t0x13E8: { /* n:\"BrtEndCalcFeatures\", */ T:-1 },\n\t0x13E9: { /* n:\"BrtCalcFeature\" */ },\n\t0x13EB: { /* n:\"BrtExternalLinksPr\" */ },\n\t0xFFFF: { n:\"\" }\n};\n\n/* [MS-XLS] 2.3 Record Enumeration (and other sources) */\nvar XLSRecordEnum = {\n\t/* [MS-XLS] 2.3 Record Enumeration 2021-08-17 */\n\t0x0006: { /* n:\"Formula\", */ f:parse_Formula },\n\t0x000a: { /* n:\"EOF\", */ f:parsenoop2 },\n\t0x000c: { /* n:\"CalcCount\", */ f:parseuint16 }, //\n\t0x000d: { /* n:\"CalcMode\", */ f:parseuint16 }, //\n\t0x000e: { /* n:\"CalcPrecision\", */ f:parsebool }, //\n\t0x000f: { /* n:\"CalcRefMode\", */ f:parsebool }, //\n\t0x0010: { /* n:\"CalcDelta\", */ f:parse_Xnum }, //\n\t0x0011: { /* n:\"CalcIter\", */ f:parsebool }, //\n\t0x0012: { /* n:\"Protect\", */ f:parsebool },\n\t0x0013: { /* n:\"Password\", */ f:parseuint16 },\n\t0x0014: { /* n:\"Header\", */ f:parse_XLHeaderFooter },\n\t0x0015: { /* n:\"Footer\", */ f:parse_XLHeaderFooter },\n\t0x0017: { /* n:\"ExternSheet\", */ f:parse_ExternSheet },\n\t0x0018: { /* n:\"Lbl\", */ f:parse_Lbl },\n\t0x0019: { /* n:\"WinProtect\", */ f:parsebool },\n\t0x001a: { /* n:\"VerticalPageBreaks\", */ },\n\t0x001b: { /* n:\"HorizontalPageBreaks\", */ },\n\t0x001c: { /* n:\"Note\", */ f:parse_Note },\n\t0x001d: { /* n:\"Selection\", */ },\n\t0x0022: { /* n:\"Date1904\", */ f:parsebool },\n\t0x0023: { /* n:\"ExternName\", */ f:parse_ExternName },\n\t0x0026: { /* n:\"LeftMargin\", */ f:parse_Xnum }, // *\n\t0x0027: { /* n:\"RightMargin\", */ f:parse_Xnum }, // *\n\t0x0028: { /* n:\"TopMargin\", */ f:parse_Xnum }, // *\n\t0x0029: { /* n:\"BottomMargin\", */ f:parse_Xnum }, // *\n\t0x002a: { /* n:\"PrintRowCol\", */ f:parsebool },\n\t0x002b: { /* n:\"PrintGrid\", */ f:parsebool },\n\t0x002f: { /* n:\"FilePass\", */ f:parse_FilePass },\n\t0x0031: { /* n:\"Font\", */ f:parse_Font },\n\t0x0033: { /* n:\"PrintSize\", */ f:parseuint16 },\n\t0x003c: { /* n:\"Continue\", */ },\n\t0x003d: { /* n:\"Window1\", */ f:parse_Window1 },\n\t0x0040: { /* n:\"Backup\", */ f:parsebool },\n\t0x0041: { /* n:\"Pane\", */ f:parse_Pane },\n\t0x0042: { /* n:\"CodePage\", */ f:parseuint16 },\n\t0x004d: { /* n:\"Pls\", */ },\n\t0x0050: { /* n:\"DCon\", */ },\n\t0x0051: { /* n:\"DConRef\", */ },\n\t0x0052: { /* n:\"DConName\", */ },\n\t0x0055: { /* n:\"DefColWidth\", */ f:parseuint16 },\n\t0x0059: { /* n:\"XCT\", */ },\n\t0x005a: { /* n:\"CRN\", */ },\n\t0x005b: { /* n:\"FileSharing\", */ },\n\t0x005c: { /* n:\"WriteAccess\", */ f:parse_WriteAccess },\n\t0x005d: { /* n:\"Obj\", */ f:parse_Obj },\n\t0x005e: { /* n:\"Uncalced\", */ },\n\t0x005f: { /* n:\"CalcSaveRecalc\", */ f:parsebool }, //\n\t0x0060: { /* n:\"Template\", */ },\n\t0x0061: { /* n:\"Intl\", */ },\n\t0x0063: { /* n:\"ObjProtect\", */ f:parsebool },\n\t0x007d: { /* n:\"ColInfo\", */ f:parse_ColInfo },\n\t0x0080: { /* n:\"Guts\", */ f:parse_Guts },\n\t0x0081: { /* n:\"WsBool\", */ f:parse_WsBool },\n\t0x0082: { /* n:\"GridSet\", */ f:parseuint16 },\n\t0x0083: { /* n:\"HCenter\", */ f:parsebool },\n\t0x0084: { /* n:\"VCenter\", */ f:parsebool },\n\t0x0085: { /* n:\"BoundSheet8\", */ f:parse_BoundSheet8 },\n\t0x0086: { /* n:\"WriteProtect\", */ },\n\t0x008c: { /* n:\"Country\", */ f:parse_Country },\n\t0x008d: { /* n:\"HideObj\", */ f:parseuint16 },\n\t0x0090: { /* n:\"Sort\", */ },\n\t0x0092: { /* n:\"Palette\", */ f:parse_Palette },\n\t0x0097: { /* n:\"Sync\", */ },\n\t0x0098: { /* n:\"LPr\", */ },\n\t0x0099: { /* n:\"DxGCol\", */ },\n\t0x009a: { /* n:\"FnGroupName\", */ },\n\t0x009b: { /* n:\"FilterMode\", */ },\n\t0x009c: { /* n:\"BuiltInFnGroupCount\", */ f:parseuint16 },\n\t0x009d: { /* n:\"AutoFilterInfo\", */ },\n\t0x009e: { /* n:\"AutoFilter\", */ },\n\t0x00a0: { /* n:\"Scl\", */ f:parse_Scl },\n\t0x00a1: { /* n:\"Setup\", */ f:parse_Setup },\n\t0x00ae: { /* n:\"ScenMan\", */ },\n\t0x00af: { /* n:\"SCENARIO\", */ },\n\t0x00b0: { /* n:\"SxView\", */ },\n\t0x00b1: { /* n:\"Sxvd\", */ },\n\t0x00b2: { /* n:\"SXVI\", */ },\n\t0x00b4: { /* n:\"SxIvd\", */ },\n\t0x00b5: { /* n:\"SXLI\", */ },\n\t0x00b6: { /* n:\"SXPI\", */ },\n\t0x00b8: { /* n:\"DocRoute\", */ },\n\t0x00b9: { /* n:\"RecipName\", */ },\n\t0x00bd: { /* n:\"MulRk\", */ f:parse_MulRk },\n\t0x00be: { /* n:\"MulBlank\", */ f:parse_MulBlank },\n\t0x00c1: { /* n:\"Mms\", */ f:parsenoop2 },\n\t0x00c5: { /* n:\"SXDI\", */ },\n\t0x00c6: { /* n:\"SXDB\", */ },\n\t0x00c7: { /* n:\"SXFDB\", */ },\n\t0x00c8: { /* n:\"SXDBB\", */ },\n\t0x00c9: { /* n:\"SXNum\", */ },\n\t0x00ca: { /* n:\"SxBool\", */ f:parsebool },\n\t0x00cb: { /* n:\"SxErr\", */ },\n\t0x00cc: { /* n:\"SXInt\", */ },\n\t0x00cd: { /* n:\"SXString\", */ },\n\t0x00ce: { /* n:\"SXDtr\", */ },\n\t0x00cf: { /* n:\"SxNil\", */ },\n\t0x00d0: { /* n:\"SXTbl\", */ },\n\t0x00d1: { /* n:\"SXTBRGIITM\", */ },\n\t0x00d2: { /* n:\"SxTbpg\", */ },\n\t0x00d3: { /* n:\"ObProj\", */ },\n\t0x00d5: { /* n:\"SXStreamID\", */ },\n\t0x00d7: { /* n:\"DBCell\", */ },\n\t0x00d8: { /* n:\"SXRng\", */ },\n\t0x00d9: { /* n:\"SxIsxoper\", */ },\n\t0x00da: { /* n:\"BookBool\", */ f:parseuint16 },\n\t0x00dc: { /* n:\"DbOrParamQry\", */ },\n\t0x00dd: { /* n:\"ScenarioProtect\", */ f:parsebool },\n\t0x00de: { /* n:\"OleObjectSize\", */ },\n\t0x00e0: { /* n:\"XF\", */ f:parse_XF },\n\t0x00e1: { /* n:\"InterfaceHdr\", */ f:parse_InterfaceHdr },\n\t0x00e2: { /* n:\"InterfaceEnd\", */ f:parsenoop2 },\n\t0x00e3: { /* n:\"SXVS\", */ },\n\t0x00e5: { /* n:\"MergeCells\", */ f:parse_MergeCells },\n\t0x00e9: { /* n:\"BkHim\", */ },\n\t0x00eb: { /* n:\"MsoDrawingGroup\", */ },\n\t0x00ec: { /* n:\"MsoDrawing\", */ },\n\t0x00ed: { /* n:\"MsoDrawingSelection\", */ },\n\t0x00ef: { /* n:\"PhoneticInfo\", */ },\n\t0x00f0: { /* n:\"SxRule\", */ },\n\t0x00f1: { /* n:\"SXEx\", */ },\n\t0x00f2: { /* n:\"SxFilt\", */ },\n\t0x00f4: { /* n:\"SxDXF\", */ },\n\t0x00f5: { /* n:\"SxItm\", */ },\n\t0x00f6: { /* n:\"SxName\", */ },\n\t0x00f7: { /* n:\"SxSelect\", */ },\n\t0x00f8: { /* n:\"SXPair\", */ },\n\t0x00f9: { /* n:\"SxFmla\", */ },\n\t0x00fb: { /* n:\"SxFormat\", */ },\n\t0x00fc: { /* n:\"SST\", */ f:parse_SST },\n\t0x00fd: { /* n:\"LabelSst\", */ f:parse_LabelSst },\n\t0x00ff: { /* n:\"ExtSST\", */ f:parse_ExtSST },\n\t0x0100: { /* n:\"SXVDEx\", */ },\n\t0x0103: { /* n:\"SXFormula\", */ },\n\t0x0122: { /* n:\"SXDBEx\", */ },\n\t0x0137: { /* n:\"RRDInsDel\", */ },\n\t0x0138: { /* n:\"RRDHead\", */ },\n\t0x013b: { /* n:\"RRDChgCell\", */ },\n\t0x013d: { /* n:\"RRTabId\", */ f:parseuint16a },\n\t0x013e: { /* n:\"RRDRenSheet\", */ },\n\t0x013f: { /* n:\"RRSort\", */ },\n\t0x0140: { /* n:\"RRDMove\", */ },\n\t0x014a: { /* n:\"RRFormat\", */ },\n\t0x014b: { /* n:\"RRAutoFmt\", */ },\n\t0x014d: { /* n:\"RRInsertSh\", */ },\n\t0x014e: { /* n:\"RRDMoveBegin\", */ },\n\t0x014f: { /* n:\"RRDMoveEnd\", */ },\n\t0x0150: { /* n:\"RRDInsDelBegin\", */ },\n\t0x0151: { /* n:\"RRDInsDelEnd\", */ },\n\t0x0152: { /* n:\"RRDConflict\", */ },\n\t0x0153: { /* n:\"RRDDefName\", */ },\n\t0x0154: { /* n:\"RRDRstEtxp\", */ },\n\t0x015f: { /* n:\"LRng\", */ },\n\t0x0160: { /* n:\"UsesELFs\", */ f:parsebool },\n\t0x0161: { /* n:\"DSF\", */ f:parsenoop2 },\n\t0x0191: { /* n:\"CUsr\", */ },\n\t0x0192: { /* n:\"CbUsr\", */ },\n\t0x0193: { /* n:\"UsrInfo\", */ },\n\t0x0194: { /* n:\"UsrExcl\", */ },\n\t0x0195: { /* n:\"FileLock\", */ },\n\t0x0196: { /* n:\"RRDInfo\", */ },\n\t0x0197: { /* n:\"BCUsrs\", */ },\n\t0x0198: { /* n:\"UsrChk\", */ },\n\t0x01a9: { /* n:\"UserBView\", */ },\n\t0x01aa: { /* n:\"UserSViewBegin\", */ },\n\t0x01ab: { /* n:\"UserSViewEnd\", */ },\n\t0x01ac: { /* n:\"RRDUserView\", */ },\n\t0x01ad: { /* n:\"Qsi\", */ },\n\t0x01ae: { /* n:\"SupBook\", */ f:parse_SupBook },\n\t0x01af: { /* n:\"Prot4Rev\", */ f:parsebool },\n\t0x01b0: { /* n:\"CondFmt\", */ },\n\t0x01b1: { /* n:\"CF\", */ },\n\t0x01b2: { /* n:\"DVal\", */ },\n\t0x01b5: { /* n:\"DConBin\", */ },\n\t0x01b6: { /* n:\"TxO\", */ f:parse_TxO },\n\t0x01b7: { /* n:\"RefreshAll\", */ f:parsebool }, //\n\t0x01b8: { /* n:\"HLink\", */ f:parse_HLink },\n\t0x01b9: { /* n:\"Lel\", */ },\n\t0x01ba: { /* n:\"CodeName\", */ f:parse_XLUnicodeString },\n\t0x01bb: { /* n:\"SXFDBType\", */ },\n\t0x01bc: { /* n:\"Prot4RevPass\", */ f:parseuint16 },\n\t0x01bd: { /* n:\"ObNoMacros\", */ },\n\t0x01be: { /* n:\"Dv\", */ },\n\t0x01c0: { /* n:\"Excel9File\", */ f:parsenoop2 },\n\t0x01c1: { /* n:\"RecalcId\", */ f:parse_RecalcId, r:2},\n\t0x01c2: { /* n:\"EntExU2\", */ f:parsenoop2 },\n\t0x0200: { /* n:\"Dimensions\", */ f:parse_Dimensions },\n\t0x0201: { /* n:\"Blank\", */ f:parse_Blank },\n\t0x0203: { /* n:\"Number\", */ f:parse_Number },\n\t0x0204: { /* n:\"Label\", */ f:parse_Label },\n\t0x0205: { /* n:\"BoolErr\", */ f:parse_BoolErr },\n\t0x0207: { /* n:\"String\", */ f:parse_String },\n\t0x0208: { /* n:\"Row\", */ f:parse_Row },\n\t0x020b: { /* n:\"Index\", */ },\n\t0x0221: { /* n:\"Array\", */ f:parse_Array },\n\t0x0225: { /* n:\"DefaultRowHeight\", */ f:parse_DefaultRowHeight },\n\t0x0236: { /* n:\"Table\", */ },\n\t0x023e: { /* n:\"Window2\", */ f:parse_Window2 },\n\t0x027e: { /* n:\"RK\", */ f:parse_RK },\n\t0x0293: { /* n:\"Style\", */ },\n\t0x0418: { /* n:\"BigName\", */ },\n\t0x041e: { /* n:\"Format\", */ f:parse_Format },\n\t0x043c: { /* n:\"ContinueBigName\", */ },\n\t0x04bc: { /* n:\"ShrFmla\", */ f:parse_ShrFmla },\n\t0x0800: { /* n:\"HLinkTooltip\", */ f:parse_HLinkTooltip },\n\t0x0801: { /* n:\"WebPub\", */ },\n\t0x0802: { /* n:\"QsiSXTag\", */ },\n\t0x0803: { /* n:\"DBQueryExt\", */ },\n\t0x0804: { /* n:\"ExtString\", */ },\n\t0x0805: { /* n:\"TxtQry\", */ },\n\t0x0806: { /* n:\"Qsir\", */ },\n\t0x0807: { /* n:\"Qsif\", */ },\n\t0x0808: { /* n:\"RRDTQSIF\", */ },\n\t0x0809: { /* n:\"BOF\", */ f:parse_BOF },\n\t0x080a: { /* n:\"OleDbConn\", */ },\n\t0x080b: { /* n:\"WOpt\", */ },\n\t0x080c: { /* n:\"SXViewEx\", */ },\n\t0x080d: { /* n:\"SXTH\", */ },\n\t0x080e: { /* n:\"SXPIEx\", */ },\n\t0x080f: { /* n:\"SXVDTEx\", */ },\n\t0x0810: { /* n:\"SXViewEx9\", */ },\n\t0x0812: { /* n:\"ContinueFrt\", */ },\n\t0x0813: { /* n:\"RealTimeData\", */ },\n\t0x0850: { /* n:\"ChartFrtInfo\", */ },\n\t0x0851: { /* n:\"FrtWrapper\", */ },\n\t0x0852: { /* n:\"StartBlock\", */ },\n\t0x0853: { /* n:\"EndBlock\", */ },\n\t0x0854: { /* n:\"StartObject\", */ },\n\t0x0855: { /* n:\"EndObject\", */ },\n\t0x0856: { /* n:\"CatLab\", */ },\n\t0x0857: { /* n:\"YMult\", */ },\n\t0x0858: { /* n:\"SXViewLink\", */ },\n\t0x0859: { /* n:\"PivotChartBits\", */ },\n\t0x085a: { /* n:\"FrtFontList\", */ },\n\t0x0862: { /* n:\"SheetExt\", */ },\n\t0x0863: { /* n:\"BookExt\", */ r:12},\n\t0x0864: { /* n:\"SXAddl\", */ },\n\t0x0865: { /* n:\"CrErr\", */ },\n\t0x0866: { /* n:\"HFPicture\", */ },\n\t0x0867: { /* n:\"FeatHdr\", */ f:parsenoop2 },\n\t0x0868: { /* n:\"Feat\", */ },\n\t0x086a: { /* n:\"DataLabExt\", */ },\n\t0x086b: { /* n:\"DataLabExtContents\", */ },\n\t0x086c: { /* n:\"CellWatch\", */ },\n\t0x0871: { /* n:\"FeatHdr11\", */ },\n\t0x0872: { /* n:\"Feature11\", */ },\n\t0x0874: { /* n:\"DropDownObjIds\", */ },\n\t0x0875: { /* n:\"ContinueFrt11\", */ },\n\t0x0876: { /* n:\"DConn\", */ },\n\t0x0877: { /* n:\"List12\", */ },\n\t0x0878: { /* n:\"Feature12\", */ },\n\t0x0879: { /* n:\"CondFmt12\", */ },\n\t0x087a: { /* n:\"CF12\", */ },\n\t0x087b: { /* n:\"CFEx\", */ },\n\t0x087c: { /* n:\"XFCRC\", */ f:parse_XFCRC, r:12 },\n\t0x087d: { /* n:\"XFExt\", */ f:parse_XFExt, r:12 },\n\t0x087e: { /* n:\"AutoFilter12\", */ },\n\t0x087f: { /* n:\"ContinueFrt12\", */ },\n\t0x0884: { /* n:\"MDTInfo\", */ },\n\t0x0885: { /* n:\"MDXStr\", */ },\n\t0x0886: { /* n:\"MDXTuple\", */ },\n\t0x0887: { /* n:\"MDXSet\", */ },\n\t0x0888: { /* n:\"MDXProp\", */ },\n\t0x0889: { /* n:\"MDXKPI\", */ },\n\t0x088a: { /* n:\"MDB\", */ },\n\t0x088b: { /* n:\"PLV\", */ },\n\t0x088c: { /* n:\"Compat12\", */ f:parsebool, r:12 },\n\t0x088d: { /* n:\"DXF\", */ },\n\t0x088e: { /* n:\"TableStyles\", */ r:12 },\n\t0x088f: { /* n:\"TableStyle\", */ },\n\t0x0890: { /* n:\"TableStyleElement\", */ },\n\t0x0892: { /* n:\"StyleExt\", */ },\n\t0x0893: { /* n:\"NamePublish\", */ },\n\t0x0894: { /* n:\"NameCmt\", */ f:parse_NameCmt, r:12 },\n\t0x0895: { /* n:\"SortData\", */ },\n\t0x0896: { /* n:\"Theme\", */ f:parse_Theme, r:12 },\n\t0x0897: { /* n:\"GUIDTypeLib\", */ },\n\t0x0898: { /* n:\"FnGrp12\", */ },\n\t0x0899: { /* n:\"NameFnGrp12\", */ },\n\t0x089a: { /* n:\"MTRSettings\", */ f:parse_MTRSettings, r:12 },\n\t0x089b: { /* n:\"CompressPictures\", */ f:parsenoop2 },\n\t0x089c: { /* n:\"HeaderFooter\", */ },\n\t0x089d: { /* n:\"CrtLayout12\", */ },\n\t0x089e: { /* n:\"CrtMlFrt\", */ },\n\t0x089f: { /* n:\"CrtMlFrtContinue\", */ },\n\t0x08a3: { /* n:\"ForceFullCalculation\", */ f:parse_ForceFullCalculation },\n\t0x08a4: { /* n:\"ShapePropsStream\", */ },\n\t0x08a5: { /* n:\"TextPropsStream\", */ },\n\t0x08a6: { /* n:\"RichTextStream\", */ },\n\t0x08a7: { /* n:\"CrtLayout12A\", */ },\n\t0x1001: { /* n:\"Units\", */ },\n\t0x1002: { /* n:\"Chart\", */ },\n\t0x1003: { /* n:\"Series\", */ },\n\t0x1006: { /* n:\"DataFormat\", */ },\n\t0x1007: { /* n:\"LineFormat\", */ },\n\t0x1009: { /* n:\"MarkerFormat\", */ },\n\t0x100a: { /* n:\"AreaFormat\", */ },\n\t0x100b: { /* n:\"PieFormat\", */ },\n\t0x100c: { /* n:\"AttachedLabel\", */ },\n\t0x100d: { /* n:\"SeriesText\", */ },\n\t0x1014: { /* n:\"ChartFormat\", */ },\n\t0x1015: { /* n:\"Legend\", */ },\n\t0x1016: { /* n:\"SeriesList\", */ },\n\t0x1017: { /* n:\"Bar\", */ },\n\t0x1018: { /* n:\"Line\", */ },\n\t0x1019: { /* n:\"Pie\", */ },\n\t0x101a: { /* n:\"Area\", */ },\n\t0x101b: { /* n:\"Scatter\", */ },\n\t0x101c: { /* n:\"CrtLine\", */ },\n\t0x101d: { /* n:\"Axis\", */ },\n\t0x101e: { /* n:\"Tick\", */ },\n\t0x101f: { /* n:\"ValueRange\", */ },\n\t0x1020: { /* n:\"CatSerRange\", */ },\n\t0x1021: { /* n:\"AxisLine\", */ },\n\t0x1022: { /* n:\"CrtLink\", */ },\n\t0x1024: { /* n:\"DefaultText\", */ },\n\t0x1025: { /* n:\"Text\", */ },\n\t0x1026: { /* n:\"FontX\", */ f:parseuint16 },\n\t0x1027: { /* n:\"ObjectLink\", */ },\n\t0x1032: { /* n:\"Frame\", */ },\n\t0x1033: { /* n:\"Begin\", */ },\n\t0x1034: { /* n:\"End\", */ },\n\t0x1035: { /* n:\"PlotArea\", */ },\n\t0x103a: { /* n:\"Chart3d\", */ },\n\t0x103c: { /* n:\"PicF\", */ },\n\t0x103d: { /* n:\"DropBar\", */ },\n\t0x103e: { /* n:\"Radar\", */ },\n\t0x103f: { /* n:\"Surf\", */ },\n\t0x1040: { /* n:\"RadarArea\", */ },\n\t0x1041: { /* n:\"AxisParent\", */ },\n\t0x1043: { /* n:\"LegendException\", */ },\n\t0x1044: { /* n:\"ShtProps\", */ f:parse_ShtProps },\n\t0x1045: { /* n:\"SerToCrt\", */ },\n\t0x1046: { /* n:\"AxesUsed\", */ },\n\t0x1048: { /* n:\"SBaseRef\", */ },\n\t0x104a: { /* n:\"SerParent\", */ },\n\t0x104b: { /* n:\"SerAuxTrend\", */ },\n\t0x104e: { /* n:\"IFmtRecord\", */ },\n\t0x104f: { /* n:\"Pos\", */ },\n\t0x1050: { /* n:\"AlRuns\", */ },\n\t0x1051: { /* n:\"BRAI\", */ },\n\t0x105b: { /* n:\"SerAuxErrBar\", */ },\n\t0x105c: { /* n:\"ClrtClient\", */ f:parse_ClrtClient },\n\t0x105d: { /* n:\"SerFmt\", */ },\n\t0x105f: { /* n:\"Chart3DBarShape\", */ },\n\t0x1060: { /* n:\"Fbi\", */ },\n\t0x1061: { /* n:\"BopPop\", */ },\n\t0x1062: { /* n:\"AxcExt\", */ },\n\t0x1063: { /* n:\"Dat\", */ },\n\t0x1064: { /* n:\"PlotGrowth\", */ },\n\t0x1065: { /* n:\"SIIndex\", */ },\n\t0x1066: { /* n:\"GelFrame\", */ },\n\t0x1067: { /* n:\"BopPopCustom\", */ },\n\t0x1068: { /* n:\"Fbi2\", */ },\n\n\t0x0000: { /* n:\"Dimensions\", */ f:parse_Dimensions },\n\t0x0001: { /* n:\"BIFF2BLANK\", */ },\n\t0x0002: { /* n:\"BIFF2INT\", */ f:parse_BIFF2INT },\n\t0x0003: { /* n:\"BIFF2NUM\", */ f:parse_BIFF2NUM },\n\t0x0004: { /* n:\"BIFF2STR\", */ f:parse_BIFF2STR },\n\t0x0005: { /* n:\"BIFF2BOOLERR\", */ f:parse_BIFF2BOOLERR },\n\t0x0007: { /* n:\"String\", */ f:parse_BIFF2STRING },\n\t0x0008: { /* n:\"BIFF2ROW\", */ },\n\t0x0009: { /* n:\"BOF\", */ f:parse_BOF },\n\t0x000b: { /* n:\"Index\", */ },\n\t0x0016: { /* n:\"ExternCount\", */ f:parseuint16 },\n\t0x001e: { /* n:\"BIFF2FORMAT\", */ f:parse_BIFF2Format },\n\t0x001f: { /* n:\"BIFF2FMTCNT\", */ }, /* 16-bit cnt of BIFF2FORMAT records */\n\t0x0020: { /* n:\"BIFF2COLINFO\", */ },\n\t0x0021: { /* n:\"Array\", */ f:parse_Array },\n\t0x0024: { /* n:\"COLWIDTH\", */ },\n\t0x0025: { /* n:\"DefaultRowHeight\", */ f:parse_DefaultRowHeight },\n\t// 0x002c ??\n\t// 0x002d ??\n\t// 0x002e ??\n\t// 0x0030 FONTCOUNT: number of fonts\n\t0x0032: { /* n:\"BIFF2FONTXTRA\", */ f:parse_BIFF2FONTXTRA },\n\t// 0x0035: INFOOPTS\n\t// 0x0036: TABLE (BIFF2 only)\n\t// 0x0037: TABLE2 (BIFF2 only)\n\t// 0x0038: WNDESK\n\t// 0x0039 ??\n\t// 0x003a: BEGINPREF\n\t// 0x003b: ENDPREF\n\t0x003e: { /* n:\"BIFF2WINDOW2\", */ },\n\t// 0x003f ??\n\t// 0x0046: SHOWSCROLL\n\t// 0x0047: SHOWFORMULA\n\t// 0x0048: STATUSBAR\n\t// 0x0049: SHORTMENUS\n\t// 0x004A:\n\t// 0x004B:\n\t// 0x004C:\n\t// 0x004E:\n\t// 0x004F:\n\t// 0x0058: TOOLBAR (BIFF3)\n\n\t/* - - - */\n\t0x0034: { /* n:\"DDEObjName\", */ },\n\t0x0043: { /* n:\"BIFF2XF\", */ f:parse_BIFF2XF },\n\t0x0044: { /* n:\"BIFF2XFINDEX\", */ f:parseuint16 },\n\t0x0045: { /* n:\"BIFF2FONTCLR\", */ },\n\t0x0056: { /* n:\"BIFF4FMTCNT\", */ }, /* 16-bit cnt, similar to BIFF2 */\n\t0x007e: { /* n:\"RK\", */ }, /* Not necessarily same as 0x027e */\n\t0x007f: { /* n:\"ImData\", */ f:parse_ImData },\n\t0x0087: { /* n:\"Addin\", */ },\n\t0x0088: { /* n:\"Edg\", */ },\n\t0x0089: { /* n:\"Pub\", */ },\n\t// 0x8A\n\t// 0x8B LH: alternate menu key flag (BIFF3/4)\n\t// 0x8E\n\t0x008F: { /* n:\"BIFF4SheetInfo\", */ f:parse_BIFF4SheetInfo },\n\t0x0091: { /* n:\"Sub\", */ },\n\t// 0x93 STYLE\n\t0x0094: { /* n:\"LHRecord\", */ },\n\t0x0095: { /* n:\"LHNGraph\", */ },\n\t0x0096: { /* n:\"Sound\", */ },\n\t// 0xA2 FNPROTO: function prototypes (BIFF4)\n\t// 0xA3\n\t// 0xA8\n\t0x00a9: { /* n:\"CoordList\", */ },\n\t0x00ab: { /* n:\"GCW\", */ },\n\t0x00bc: { /* n:\"ShrFmla\", */ }, /* Not necessarily same as 0x04bc */\n\t0x00bf: { /* n:\"ToolbarHdr\", */ },\n\t0x00c0: { /* n:\"ToolbarEnd\", */ },\n\t0x00c2: { /* n:\"AddMenu\", */ },\n\t0x00c3: { /* n:\"DelMenu\", */ },\n\t0x00d6: { /* n:\"RString\", */ f:parse_RString },\n\t0x00df: { /* n:\"UDDesc\", */ },\n\t0x00ea: { /* n:\"TabIdConf\", */ },\n\t0x0162: { /* n:\"XL5Modify\", */ },\n\t0x01a5: { /* n:\"FileSharing2\", */ },\n\t0x0206: { /* n:\"Formula\", */ f:parse_Formula },\n\t0x0209: { /* n:\"BOF\", */ f:parse_BOF },\n\t0x0218: { /* n:\"Lbl\", */ f:parse_Lbl },\n\t0x0223: { /* n:\"ExternName\", */ f:parse_ExternName },\n\t0x0231: { /* n:\"Font\", */ },\n\t0x0243: { /* n:\"BIFF3XF\", */ f:parse_BIFF3XF },\n\t0x0406: { /* n:\"Formula\", */ f:parse_Formula },\n\t0x0409: { /* n:\"BOF\", */ f:parse_BOF },\n\t0x0443: { /* n:\"BIFF4XF\", */ f:parse_BIFF4XF },\n\t0x086d: { /* n:\"FeatInfo\", */ },\n\t0x0873: { /* n:\"FeatInfo11\", */ },\n\t0x0881: { /* n:\"SXAddl12\", */ },\n\t0x08c0: { /* n:\"AutoWebPub\", */ },\n\t0x08c1: { /* n:\"ListObj\", */ },\n\t0x08c2: { /* n:\"ListField\", */ },\n\t0x08c3: { /* n:\"ListDV\", */ },\n\t0x08c4: { /* n:\"ListCondFmt\", */ },\n\t0x08c5: { /* n:\"ListCF\", */ },\n\t0x08c6: { /* n:\"FMQry\", */ },\n\t0x08c7: { /* n:\"FMSQry\", */ },\n\t0x08c8: { /* n:\"PLV\", */ },\n\t0x08c9: { /* n:\"LnExt\", */ },\n\t0x08ca: { /* n:\"MkrExt\", */ },\n\t0x08cb: { /* n:\"CrtCoopt\", */ },\n\t0x08d6: { /* n:\"FRTArchId$\", */ r:12 },\n\n\t/* --- multiplan 4 records --- */\n\t0x0065: { /* n:\"\", */ }, // one per window\n\t0x0066: { /* n:\"\", */ }, // calc settings\n\t0x0069: { /* n:\"\", */ }, // print header\n\t0x006a: { /* n:\"\", */ }, // print footer\n\t0x006b: { /* n:\"\", */ }, // print settings\n\t0x006d: { /* n:\"\", */ }, // one per window\n\t0x0070: { /* n:\"\", */ }, // includes default col width\n\t0x0072: { /* n:\"\", */ }, // includes selected cell\n\n\t0x7262: {}\n};\n\nfunction write_biff_rec(ba/*:BufArray*/, type/*:number*/, payload, length/*:?number*/)/*:void*/ {\n\tvar t/*:number*/ = type;\n\tif(isNaN(t)) return;\n\tvar len = length || (payload||[]).length || 0;\n\tvar o = ba.next(4);\n\to.write_shift(2, t);\n\to.write_shift(2, len);\n\tif(/*:: len != null &&*/len > 0 && is_buf(payload)) ba.push(payload);\n}\n\nfunction write_biff_continue(ba/*:BufArray*/, type/*:number*/, payload, length/*:?number*/)/*:void*/ {\n\tvar len = length || (payload||[]).length || 0;\n\tif(len <= 8224) return write_biff_rec(ba, type, payload, len);\n\tvar t = type;\n\tif(isNaN(t)) return;\n\tvar parts = payload.parts || [], sidx = 0;\n\tvar i = 0, w = 0;\n\twhile(w + (parts[sidx] || 8224) <= 8224) { w+= (parts[sidx] || 8224); sidx++; }\n\tvar o = ba.next(4);\n\to.write_shift(2, t);\n\to.write_shift(2, w);\n\tba.push(payload.slice(i, i + w));\n\ti += w;\n\twhile(i < len) {\n\t\to = ba.next(4);\n\t\to.write_shift(2, 0x3c); // TODO: figure out correct continue type\n\t\tw = 0;\n\t\twhile(w + (parts[sidx] || 8224) <= 8224) { w+= (parts[sidx] || 8224); sidx++; }\n\t\to.write_shift(2, w);\n\t\tba.push(payload.slice(i, i+w)); i+= w;\n\t}\n}\n\nfunction write_BIFF2BERR(r/*:number*/, c/*:number*/, val, t/*:?string*/) {\n\tvar out = new_buf(9);\n\twrite_BIFF2Cell(out, r, c);\n\twrite_Bes(val, t || 'b', out);\n\treturn out;\n}\n\n/* TODO: codepage, large strings */\nfunction write_BIFF2LABEL(r/*:number*/, c/*:number*/, val) {\n\tvar out = new_buf(8 + 2*val.length);\n\twrite_BIFF2Cell(out, r, c);\n\tout.write_shift(1, val.length);\n\tout.write_shift(val.length, val, 'sbcs');\n\treturn out.l < out.length ? out.slice(0, out.l) : out;\n}\n\nfunction write_comments_biff2(ba/*:BufArray*/, comments/*:Array<[Comment[], number, number]>*/) {\n\tcomments.forEach(function(data) {\n\t\tvar text = data[0].map(function(cc) { return cc.t; }).join(\"\");\n\t\t// TODO: should '\\n' be translated to '\\r' to correct for Excel 5.0 bug when exporting to BIFF2/3 ?\n\t\tif(text.length <= 2048) return write_biff_rec(ba, 0x001C, write_NOTE_BIFF2(text, data[1], data[2]));\n\t\twrite_biff_rec(ba, 0x001C, write_NOTE_BIFF2(text.slice(0, 2048), data[1], data[2], text.length));\n\t\tfor(var i = 2048; i < text.length; i += 2048)\n\t\t\twrite_biff_rec(ba, 0x001C, write_NOTE_BIFF2(text.slice(i, Math.min(i+2048, text.length)), -1, -1, Math.min(2048, text.length - i)));\n\t});\n}\n\n/* TODO: BIFF3/4 use different records -- see comments*/\nfunction write_ws_biff2_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/, C/*:number*/, opts, date1904/*:boolean*/) {\n\tvar ifmt = 0;\n\tif(cell.z != null) {\n\t\tifmt = opts._BIFF2FmtTable.indexOf(cell.z);\n\t\tif(ifmt == -1) { opts._BIFF2FmtTable.push(cell.z); ifmt = opts._BIFF2FmtTable.length - 1; }\n\t}\n\tvar ixfe = 0;\n\tif(cell.z != null) {\n\t\tfor(; ixfe < opts.cellXfs.length; ++ixfe) if(opts.cellXfs[ixfe].numFmtId == ifmt) break;\n\t\tif(ixfe == opts.cellXfs.length) opts.cellXfs.push({numFmtId: ifmt});\n\t}\n\tif(cell.v != null) switch(cell.t) {\n\t\tcase 'd': case 'n':\n\t\t\tvar v = cell.t == 'd' ? datenum(parseDate(cell.v, date1904), date1904) : cell.v;\n\t\t\tif(opts.biff == 2 && (v == (v|0)) && (v >= 0) && (v < 65536))\n\t\t\t\t// 0x027E (RK) in BIFF3/4\n\t\t\t\twrite_biff_rec(ba, 0x0002, write_BIFF2INT(R, C, v, ixfe, ifmt));\n\t\t\telse if(isNaN(v))\n\t\t\t\t// 0x0205 in BIFF3/4\n\t\t\t\twrite_biff_rec(ba, 0x0005, write_BIFF2BERR(R, C, 0x24, \"e\")); // #NUM!\n\t\t\telse if(!isFinite(v))\n\t\t\t\t// 0x0205 in BIFF3/4\n\t\t\t\twrite_biff_rec(ba, 0x0005, write_BIFF2BERR(R, C, 0x07, \"e\")); // #DIV/0!\n\t\t\telse\n\t\t\t\t// 0x0203 in BIFF3/4\n\t\t\t\twrite_biff_rec(ba, 0x0003, write_BIFF2NUM(R,C, v, ixfe, ifmt));\n\t\t\treturn;\n\t\tcase 'b': case 'e':\n\t\t\t// 0x0205 in BIFF3/4\n\t\t\twrite_biff_rec(ba, 0x0005, write_BIFF2BERR(R, C, cell.v, cell.t)); return;\n\t\t/* TODO: codepage, sst */\n\t\tcase 's': case 'str':\n\t\t\t// 0x0204 in BIFF3/4\n\t\t\twrite_biff_rec(ba, 0x0004, write_BIFF2LABEL(R, C, cell.v == null ? \"\" : String(cell.v).slice(0,255)));\n\t\t\treturn;\n\t}\n\t// 0x0201 in BIFF3/4\n\twrite_biff_rec(ba, 0x0001, write_BIFF2Cell(null, R, C));\n}\n\nfunction write_ws_biff2(ba/*:BufArray*/, ws/*:Worksheet*/, idx/*:number*/, opts, wb/*:Workbook*/) {\n\tvar dense = ws[\"!data\"] != null;\n\tvar range = safe_decode_range(ws['!ref'] || \"A1\"), rr = \"\", cols/*:Array<string>*/ = [];\n\tif(range.e.c > 0xFF || range.e.r > 0x3FFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n\t\trange.e.c = Math.min(range.e.c, 0xFF);\n\t\trange.e.r = Math.min(range.e.c, 0x3FFF);\n\t}\n\tvar date1904 = (((wb||{}).Workbook||{}).WBProps||{}).date1904;\n\tvar row = [], comments = [];\n\t/* TODO: 0x0000 / 0x0200 dimensions? */\n\tfor(var C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\tif(dense) row = ws[\"!data\"][R] || [];\n\t\trr = encode_row(R);\n\t\tfor(C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tvar cell = dense ? row[C] : ws[cols[C] + rr];\n\t\t\tif(!cell) continue;\n\t\t\t/* write cell */\n\t\t\twrite_ws_biff2_cell(ba, cell, R, C, opts, date1904);\n\t\t\tif(cell.c) comments.push([cell.c, R, C]);\n\t\t}\n\t}\n\n\t/* ... 0x12 0x19 0x13 (Password) */\n\twrite_comments_biff2(ba, comments);\n\t/* 0x3d (Window1) ... */\n}\n\n/* Based on test files */\nfunction write_biff2_buf(wb/*:Workbook*/, opts/*:WriteOpts*/) {\n\tvar o = opts || {};\n\n\tvar ba = buf_array();\n\tvar idx = 0;\n\tfor(var i=0;i<wb.SheetNames.length;++i) if(wb.SheetNames[i] == o.sheet) idx=i;\n\tif(idx == 0 && !!o.sheet && wb.SheetNames[0] != o.sheet) throw new Error(\"Sheet not found: \" + o.sheet);\n\twrite_biff_rec(ba, (o.biff == 4 ? 0x0409 : (o.biff == 3 ? 0x0209 : 0x0009)), write_BOF(wb, 0x10, o));\n\tif(((wb.Workbook||{}).WBProps||{}).date1904) write_biff_rec(ba, 0x0022, writebool(true));\n\to.cellXfs = [{numFmtId: 0}];\n\to._BIFF2FmtTable/*:Array<string>*/ = [\"General\"]; o._Fonts = [];\n\tvar body = buf_array();\n\twrite_ws_biff2(body, wb.Sheets[wb.SheetNames[idx]], idx, o, wb);\n\n\to._BIFF2FmtTable.forEach(function(f) {\n\t\tif(o.biff <= 3) write_biff_rec(ba, 0x001E, write_BIFF2Format(f));\n\t\telse write_biff_rec(ba, 0x041E, write_BIFF4Format(f));\n\t});\n\to.cellXfs.forEach(function(xf) {\n\t\tswitch(o.biff) {\n\t\t\tcase 2: write_biff_rec(ba, 0x0043, write_BIFF2XF(xf)); break;\n\t\t\tcase 3: write_biff_rec(ba, 0x0243, write_BIFF3XF(xf)); break;\n\t\t\tcase 4: write_biff_rec(ba, 0x0443, write_BIFF4XF(xf)); break;\n\t\t}\n\t});\n\tdelete o._BIFF2FmtTable; delete o.cellXfs; delete o._Fonts;\n\n\tba.push(body.end());\n\twrite_biff_rec(ba, 0x000A);\n\treturn ba.end();\n}\n\nvar b8oid = 1, b8ocnts/*:Array<[number, number, number]>*/ = [];\nfunction write_MsoDrawingGroup() {\n\tvar buf = new_buf(82 + 8 * b8ocnts.length);\n\t/* [MS-ODRAW] 2.2.12 OfficeArtDggContainer */\n\tbuf.write_shift(2, 0x0F);\n\tbuf.write_shift(2, 0xF000);\n\tbuf.write_shift(4, 74 + 8 * b8ocnts.length);\n\t/* 2.2.48 OfficeArtFDGGBlock */\n\t{\n\t\tbuf.write_shift(2, 0);\n\t\tbuf.write_shift(2, 0xF006);\n\t\tbuf.write_shift(4, 16 + 8 * b8ocnts.length);\n\t\t/* 2.2.47 OfficeArtFDGG */\n\t\t{\n\t\t\tbuf.write_shift(4, b8oid);\n\t\t\tbuf.write_shift(4, b8ocnts.length+1);\n\t\t\tvar acc = 0; for(var i = 0; i < b8ocnts.length; ++i) acc += (b8ocnts[i] && b8ocnts[i][1] || 0); buf.write_shift(4, acc);\n\t\t\tbuf.write_shift(4, b8ocnts.length);\n\t\t}\n\t\t/* 2.2.46 OfficeArtIDCL + */\n\t\tb8ocnts.forEach(function(b8) {\n\t\t\tbuf.write_shift(4, b8[0]);\n\t\t\tbuf.write_shift(4, b8[2]);\n\t\t});\n\t}\n\t/* 2.2.9 OfficeArtFOPT */\n\t{\n\t\tbuf.write_shift(2, 0x33); // 0x03 | (3 << 4)\n\t\tbuf.write_shift(2, 0xF00B);\n\t\tbuf.write_shift(4, 0x12); // 3 * 6\n\t\t/* 2.3.21.15 Text Boolean Properties */\n\t\tbuf.write_shift(2, 0xBF); buf.write_shift(4, 0x00080008);\n\t\t/* 2.3.7.2 fillColor */\n\t\tbuf.write_shift(2, 0x0181); buf.write_shift(4, 0x08000041);\n\t\t/* 2.3.8.1 lineColor */\n\t\tbuf.write_shift(2, 0x01C0); buf.write_shift(4, 0x08000040);\n\t}\n\t/* 2.2.45 OfficeArtSplitMenuColorContainer */\n\t{\n\t\tbuf.write_shift(2, 0x40);\n\t\tbuf.write_shift(2, 0xF11E);\n\t\tbuf.write_shift(4, 16);\n\t\tbuf.write_shift(4, 0x0800000D);\n\t\tbuf.write_shift(4, 0x0800000C);\n\t\tbuf.write_shift(4, 0x08000017);\n\t\tbuf.write_shift(4, 0x100000F7);\n\t}\n\treturn buf;\n}\nfunction write_comments_biff8(ba/*:BufArray*/, comments/*:Array<[Comment[], number, number]>*/) {\n\tvar notes/*:Array<RawData>*/ = [], sz = 0, pl = buf_array(), baseid = b8oid;\n\tvar _oasc;\n\tcomments.forEach(function(c, ci) {\n\t\tvar author = \"\";\n\t\tvar text = c[0].map(function(t) { if(t.a && !author) author = t.a; return t.t; }).join(\"\");\n\t\t++b8oid;\n\n\t\t/* 2.2.14 OfficeArtSpContainer */\n\t\t{\n\t\t\tvar oasc = new_buf(0x96);\n\t\t\toasc.write_shift(2, 0x0F);\n\t\t\toasc.write_shift(2, 0xF004);\n\t\t\toasc.write_shift(4, 0x96);\n\t\t\t/* 2.2.40 OfficeArtFSP */\n\t\t\t{\n\t\t\t\toasc.write_shift(2, 0xca2); // 0x02 | (0xca << 4)\n\t\t\t\toasc.write_shift(2, 0xF00A);\n\t\t\t\toasc.write_shift(4, 8);\n\t\t\t\toasc.write_shift(4, b8oid);\n\t\t\t\toasc.write_shift(4, 0xA00);\n\t\t\t}\n\t\t\t/* 2.2.9 OfficeArtFOPT */\n\t\t\t{\n\t\t\t\toasc.write_shift(2, 0xE3); // 0x03 | (14 << 4)\n\t\t\t\toasc.write_shift(2, 0xF00B);\n\t\t\t\toasc.write_shift(4, 0x54); // 14 * 6\n\t\t\t\t/* 2.3.21.1 ITxid */\n\t\t\t\toasc.write_shift(2, 0x80); oasc.write_shift(4, 0);\n\t\t\t\t/* 2.3.21.12 txdir */\n\t\t\t\toasc.write_shift(2, 0x8B); oasc.write_shift(4, 0x02);\n\t\t\t\t/* 2.3.21.15 Text Boolean Properties */\n\t\t\t\toasc.write_shift(2, 0xBF); oasc.write_shift(4, 0x00080008);\n\t\t\t\t/* 2.3.6.30 cxk */\n\t\t\t\toasc.write_shift(2, 0x0158); oasc.l += 4;\n\t\t\t\t/* 2.3.7.2 fillColor */\n\t\t\t\toasc.write_shift(2, 0x0181); oasc.write_shift(4, 0x08000050);\n\t\t\t\t/* 2.3.7.4 fillBackColor */\n\t\t\t\toasc.write_shift(2, 0x0183); oasc.write_shift(4, 0x08000050);\n\t\t\t\t/* 2.3.7.6 fillCrMod */\n\t\t\t\toasc.write_shift(2, 0x0185); oasc.write_shift(4, 0x100000F4);\n\t\t\t\t/* 2.3.7.43 Fill Style Boolean Properties */\n\t\t\t\toasc.write_shift(2, 0x01BF); oasc.write_shift(4, 0x00100010);\n\t\t\t\t/* 2.3.8.1 lineColor */\n\t\t\t\toasc.write_shift(2, 0x01C0); oasc.write_shift(4, 0x08000051);\n\t\t\t\t/* 2.3.8.4 lineCrMod */\n\t\t\t\toasc.write_shift(2, 0x01C3); oasc.write_shift(4, 0x100000F4);\n\t\t\t\t/* 2.3.13.2 shadowColor */\n\t\t\t\toasc.write_shift(2, 0x0201); oasc.write_shift(4, 0x08000051);\n\t\t\t\t/* 2.3.13.4 shadowCrMod */\n\t\t\t\toasc.write_shift(2, 0x0203); oasc.write_shift(4, 0x100000F4);\n\t\t\t\t/* 2.3.13.23 Shadow Style Boolean Properties */\n\t\t\t\toasc.write_shift(2, 0x023F); oasc.write_shift(4, 0x00030001);\n\t\t\t\t/* 2.3.4.44 Group Shape Boolean Properties */\n\t\t\t\toasc.write_shift(2, 0x03BF); oasc.write_shift(4, 0x00020000 | (c[0].hidden ? 2 : 0));\n\t\t\t}\n\t\t\t/* [MS-XLS] 2.5.193 OfficeArtClientAnchorSheet */\n\t\t\t{\n\t\t\t\toasc.l += 2;\n\t\t\t\toasc.write_shift(2, 0xF010);\n\t\t\t\toasc.write_shift(4, 0x12);\n\t\t\t\toasc.write_shift(2, 0x3); // do not move or size with cells\n\t\t\t\toasc.write_shift(2, c[2] + 2); oasc.l += 2;\n\t\t\t\toasc.write_shift(2, c[1] + 1); oasc.l += 2;\n\t\t\t\toasc.write_shift(2, c[2] + 4); oasc.l += 2;\n\t\t\t\toasc.write_shift(2, c[1] + 5); oasc.l += 2;\n\t\t\t}\n\t\t\t/* [MS-XLS] 2.5.194 OfficeArtClientData */\n\t\t\t{\n\t\t\t\toasc.l += 2;\n\t\t\t\toasc.write_shift(2, 0xF011);\n\t\t\t\toasc.l += 4;\n\t\t\t}\n\t\t\toasc.l = 0x96;\n\t\t\tif(ci == 0) /* write_biff_rec(pl, 0x003C, oasc); */ _oasc = oasc;\n\t\t\telse write_biff_rec(pl, 0x00EC, oasc);\n\t\t}\n\t\tsz += 0x96;\n\n\t\t/* [MS-XLS] 2.4.181 Obj */\n\t\t{\n\t\t\tvar obj = new_buf(52); // 22 + 26 + 4\n\t\t\t/* [MS-XLS] 2.5.143 FtCmo */\n\t\t\tobj.write_shift(2, 0x15);\n\t\t\tobj.write_shift(2, 0x12);\n\t\t\tobj.write_shift(2, 0x19);\n\t\t\tobj.write_shift(2, b8oid);\n\t\t\tobj.write_shift(2, 0);\n\t\t\tobj.l = 22;\n\t\t\t/* [MS-XLS] 2.5.149 FtNts */\n\t\t\tobj.write_shift(2, 0x0D);\n\t\t\tobj.write_shift(2, 0x16);\n\t\t\tobj.write_shift(4, 0x62726272);\n\t\t\tobj.write_shift(4, 0x95374305);\n\t\t\tobj.write_shift(4, 0x80301328);\n\t\t\tobj.write_shift(4, 0x69696904 + b8oid*256);\n\t\t\tobj.write_shift(2,0);\n\t\t\tobj.write_shift(4,0);\n\t\t\t// reserved\n\t\t\tobj.l += 4;\n\t\t\twrite_biff_rec(pl, 0x005D, obj);\n\t\t}\n\n\t\t/* [MS-XLS] 2.5.195 OfficeArtClientTextbox */\n\t\t{\n\t\t\tvar oact = new_buf(8);\n\t\t\toact.l += 2;\n\t\t\toact.write_shift(2, 0xF00D);\n\t\t\toact.l += 4;\n\t\t\twrite_biff_rec(pl, 0x00EC, oact);\n\t\t}\n\t\tsz += 8;\n\n\t\t/* [MS-XLS] 2.4.329 TxO */\n\t\t{\n\t\t\tvar txo = new_buf(18);\n\t\t\ttxo.write_shift(2, 0x12);\n\t\t\ttxo.l += 8;\n\t\t\ttxo.write_shift(2, text.length);\n\t\t\ttxo.write_shift(2, 0x10);\n\t\t\ttxo.l += 4;\n\t\t\twrite_biff_rec(pl, 0x01b6, txo);\n\t\t\t/* text continue record TODO: switch to wide strings */\n\t\t\t{\n\t\t\t\tvar cont = new_buf(1 + text.length);\n\t\t\t\tcont.write_shift(1, 0);\n\t\t\t\tcont.write_shift(text.length, text, \"sbcs\");\n\t\t\t\twrite_biff_rec(pl, 0x003C, cont);\n\t\t\t}\n\t\t\t/* formatting continue records */\n\t\t\t{\n\t\t\t\tvar conf = new_buf(0x10);\n\t\t\t\tconf.l += 8;\n\t\t\t\tconf.write_shift(2, text.length);\n\t\t\t\tconf.l += 6;\n\t\t\t\twrite_biff_rec(pl, 0x003C, conf);\n\t\t\t}\n\t\t}\n\n\t\t/* 2.4.179 Note */\n\t\t{\n\t\t\tvar notesh = new_buf(12 + author.length);\n\t\t\tnotesh.write_shift(2, c[1]);\n\t\t\tnotesh.write_shift(2, c[2]);\n\t\t\tnotesh.write_shift(2, 0 | (c[0].hidden ? 0 : 2));\n\t\t\tnotesh.write_shift(2, b8oid);\n\t\t\tnotesh.write_shift(2, author.length);\n\t\t\tnotesh.write_shift(1, 0);\n\t\t\tnotesh.write_shift(author.length, author, \"sbcs\");\n\t\t\tnotesh.l ++;\n\t\t\tnotes.push(notesh);\n\t\t}\n\t});\n\t/* [MS-ODRAW] 2.2.13 OfficeArtDgContainer */\n\t{\n\t\tvar hdr = new_buf(80);\n\t\thdr.write_shift(2, 0x0F);\n\t\thdr.write_shift(2, 0xF002);\n\t\thdr.write_shift(4, sz + hdr.length - 8);\n\t\t/* [MS-ODRAW] 2.2.49 OfficeArtFDG */\n\t\t{\n\t\t\thdr.write_shift(2, 0x10);\n\t\t\thdr.write_shift(2, 0xF008);\n\t\t\thdr.write_shift(4, 0x08);\n\t\t\thdr.write_shift(4, comments.length + 1);\n\t\t\thdr.write_shift(4, b8oid);\n\t\t}\n\t\t/* [MS-ODRAW] 2.2.16 OfficeArtSpgrContainer */\n\t\t{\n\t\t\thdr.write_shift(2, 0x0f);\n\t\t\thdr.write_shift(2, 0xF003);\n\t\t\thdr.write_shift(4, sz + 0x30);\n\t\t\t/* [MS-ODRAW] 2.2.14 OfficeArtSpContainer */\n\t\t\t{\n\t\t\t\thdr.write_shift(2, 0x0f);\n\t\t\t\thdr.write_shift(2, 0xF004);\n\t\t\t\thdr.write_shift(4, 0x28);\n\t\t\t\t/* [MS-ODRAW] 2.2.38 OfficeArtFSPGR */\n\t\t\t\t{\n\t\t\t\t\thdr.write_shift(2, 0x01);\n\t\t\t\t\thdr.write_shift(2, 0xF009);\n\t\t\t\t\thdr.write_shift(4, 0x10);\n\t\t\t\t\thdr.l += 16;\n\t\t\t\t}\n\t\t\t\t/* [MS-ODRAW] 2.2.40 OfficeArtFSP */\n\t\t\t\t{\n\t\t\t\t\thdr.write_shift(2, 0x02);\n\t\t\t\t\thdr.write_shift(2, 0xF00A);\n\t\t\t\t\thdr.write_shift(4, 0x08);\n\t\t\t\t\thdr.write_shift(4, baseid);\n\t\t\t\t\thdr.write_shift(4, 0x05);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\twrite_biff_rec(ba, 0x00EC, /* hdr */ _oasc ? bconcat([hdr, _oasc]) : hdr);\n\t}\n\tba.push(pl.end());\n\tnotes.forEach(function(n) { write_biff_rec(ba, 0x001C, n); });\n\tb8ocnts.push([baseid, comments.length + 1, b8oid]);\n\t++b8oid;\n}\n\nfunction write_FONTS_biff8(ba, data, opts) {\n\twrite_biff_rec(ba, 0x0031 /* Font */, write_Font({\n\t\tsz:12,\n\t\tcolor: {theme:1},\n\t\tname: \"Arial\",\n\t\tfamily: 2,\n\t\tscheme: \"minor\"\n\t}, opts));\n}\n\n\nfunction write_FMTS_biff8(ba, NF/*:?SSFTable*/, opts) {\n\tif(!NF) return;\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\n\t\t/*:: if(!NF) return; */\n\t\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) write_biff_rec(ba, 0x041E /* Format */, write_Format(i, NF[i], opts));\n\t});\n}\n\nfunction write_FEAT(ba, ws) {\n\t/* [MS-XLS] 2.4.112 */\n\tvar o = new_buf(19);\n\to.write_shift(4, 0x867); o.write_shift(4, 0); o.write_shift(4, 0);\n\to.write_shift(2, 3); o.write_shift(1, 1); o.write_shift(4, 0);\n\twrite_biff_rec(ba, 0x0867 /* FeatHdr */, o);\n\t/* [MS-XLS] 2.4.111 */\n\to = new_buf(39);\n\to.write_shift(4, 0x868); o.write_shift(4, 0); o.write_shift(4, 0);\n\to.write_shift(2, 3); o.write_shift(1, 0); o.write_shift(4, 0);\n\to.write_shift(2, 1); o.write_shift(4, 4); o.write_shift(2, 0);\n\twrite_Ref8U(safe_decode_range(ws['!ref']||\"A1\"), o);\n\to.write_shift(4, 4);\n\twrite_biff_rec(ba, 0x0868 /* Feat */, o);\n}\n\nfunction write_CELLXFS_biff8(ba, opts) {\n\tfor(var i = 0; i < 16; ++i) write_biff_rec(ba, 0x00e0 /* XF */, write_XF({numFmtId:0, style:true}, 0, opts));\n\topts.cellXfs.forEach(function(c) {\n\t\twrite_biff_rec(ba, 0x00e0 /* XF */, write_XF(c, 0, opts));\n\t});\n}\n\nfunction write_ws_biff8_hlinks(ba/*:BufArray*/, ws) {\n\tfor(var R=0; R<ws['!links'].length; ++R) {\n\t\tvar HL = ws['!links'][R];\n\t\twrite_biff_rec(ba, 0x01b8 /* HLink */, write_HLink(HL));\n\t\tif(HL[1].Tooltip) write_biff_rec(ba, 0x0800 /* HLinkTooltip */, write_HLinkTooltip(HL));\n\t}\n\tdelete ws['!links'];\n}\n\nfunction write_ws_cols_biff8(ba, cols) {\n\tif(!cols) return;\n\tvar cnt = 0;\n\tcols.forEach(function(col, idx) {\n\t\tif(++cnt <= 256 && col) {\n\t\t\twrite_biff_rec(ba, 0x007d /* ColInfo */, write_ColInfo(col_obj_w(idx, col), idx));\n\t\t}\n\t});\n}\n\nfunction write_ws_biff8_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/, C/*:number*/, opts, date1904/*:boolean*/) {\n\tvar os = 16 + get_cell_style(opts.cellXfs, cell, opts);\n\tif(cell.v == null && !cell.bf) {\n\t\twrite_biff_rec(ba, 0x0201 /* Blank */, write_XLSCell(R, C, os));\n\t\treturn;\n\t}\n\tif(cell.bf) write_biff_rec(ba, 0x0006 /* Formula */, write_Formula(cell, R, C, opts, os));\n\telse switch(cell.t) {\n\t\tcase 'd': case 'n':\n\t\t\tvar v = cell.t == 'd' ? datenum(parseDate(cell.v, date1904), date1904) : cell.v;\n\t\t\tif(isNaN(v)) write_biff_rec(ba, 0x0205 /* BoolErr */, write_BoolErr(R, C, 0x24, os, opts, \"e\")); // #NUM!\n\t\t\telse if(!isFinite(v)) write_biff_rec(ba, 0x0205 /* BoolErr */, write_BoolErr(R, C, 0x07, os, opts, \"e\")); // #DIV/0!\n\t\t\t/* TODO: emit RK as appropriate */\n\t\t\telse write_biff_rec(ba, 0x0203 /* Number */, write_Number(R, C, v, os, opts));\n\t\t\tbreak;\n\t\tcase 'b': case 'e':\n\t\t\twrite_biff_rec(ba, 0x0205 /* BoolErr */, write_BoolErr(R, C, cell.v, os, opts, cell.t));\n\t\t\tbreak;\n\t\t/* TODO: codepage, sst */\n\t\tcase 's': case 'str':\n\t\t\tif(opts.bookSST) {\n\t\t\t\tvar isst = get_sst_id(opts.Strings, cell.v == null ? \"\" : String(cell.v), opts.revStrings);\n\t\t\t\twrite_biff_rec(ba, 0x00fd /* LabelSst */, write_LabelSst(R, C, isst, os, opts));\n\t\t\t} else write_biff_rec(ba, 0x0204 /* Label */, write_Label(R, C, (cell.v == null ? \"\" : String(cell.v)).slice(0,255), os, opts));\n\t\t\tbreak;\n\t\tdefault:\n\t\t\twrite_biff_rec(ba, 0x0201 /* Blank */, write_XLSCell(R, C, os));\n\t}\n}\n\n/* [MS-XLS] 2.1.7.20.5 */\nfunction write_ws_biff8(idx/*:number*/, opts, wb/*:Workbook*/) {\n\tvar ba = buf_array();\n\tvar s = wb.SheetNames[idx], ws = wb.Sheets[s] || {};\n\tvar _WB/*:WBWBProps*/ = ((wb||{}).Workbook||{}/*:any*/);\n\tvar _sheet/*:WBWSProp*/ = ((_WB.Sheets||[])[idx]||{}/*:any*/);\n\tvar dense = ws[\"!data\"] != null;\n\tvar b8 = opts.biff == 8;\n\tvar ref/*:string*/, rr = \"\", cols/*:Array<string>*/ = [];\n\tvar range = safe_decode_range(ws['!ref'] || \"A1\");\n\tvar MAX_ROWS = b8 ? 65536 : 16384;\n\tif(range.e.c > 0xFF || range.e.r >= MAX_ROWS) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n\t\trange.e.c = Math.min(range.e.c, 0xFF);\n\t\trange.e.r = Math.min(range.e.c, MAX_ROWS-1);\n\t}\n\n\twrite_biff_rec(ba, 0x0809, write_BOF(wb, 0x10, opts));\n\t/* [Uncalced] Index */\n\twrite_biff_rec(ba, 0x000d /* CalcMode */, writeuint16(1));\n\twrite_biff_rec(ba, 0x000c /* CalcCount */, writeuint16(100));\n\twrite_biff_rec(ba, 0x000f /* CalcRefMode */, writebool(true));\n\twrite_biff_rec(ba, 0x0011 /* CalcIter */, writebool(false));\n\twrite_biff_rec(ba, 0x0010 /* CalcDelta */, write_Xnum(0.001));\n\twrite_biff_rec(ba, 0x005f /* CalcSaveRecalc */, writebool(true));\n\twrite_biff_rec(ba, 0x002a /* PrintRowCol */, writebool(false));\n\twrite_biff_rec(ba, 0x002b /* PrintGrid */, writebool(false));\n\twrite_biff_rec(ba, 0x0082 /* GridSet */, writeuint16(1));\n\twrite_biff_rec(ba, 0x0080 /* Guts */, write_Guts([0,0]));\n\t/* DefaultRowHeight WsBool [Sync] [LPr] [HorizontalPageBreaks] [VerticalPageBreaks] */\n\t/* Header (string) */\n\t/* Footer (string) */\n\twrite_biff_rec(ba, 0x0083 /* HCenter */, writebool(false));\n\twrite_biff_rec(ba, 0x0084 /* VCenter */, writebool(false));\n\t/* ... */\n\tif(b8) write_ws_cols_biff8(ba, ws[\"!cols\"]);\n\t/* ... */\n\twrite_biff_rec(ba, 0x0200 /* Dimensions */, write_Dimensions(range, opts));\n\t/* ... */\n\n\tvar date1904 = (((wb||{}).Workbook||{}).WBProps||{}).date1904;\n\tif(b8) ws['!links'] = [];\n\tfor(var C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);\n\tvar comments = [];\n\tvar row = [];\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\tif(dense) row = ws[\"!data\"][R] || [];\n\t\trr = encode_row(R);\n\t\tfor(C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tref = cols[C] + rr;\n\t\t\tvar cell = dense ? row[C] : ws[ref];\n\t\t\tif(!cell) continue;\n\t\t\t/* write cell */\n\t\t\twrite_ws_biff8_cell(ba, cell, R, C, opts, date1904);\n\t\t\tif(b8 && cell.l) ws['!links'].push([ref, cell.l]);\n\t\t\tif(cell.c) comments.push([cell.c, R, C]);\n\t\t}\n\t}\n\tvar cname/*:string*/ = _sheet.CodeName || _sheet.name || s;\n\t/* ... */\n\tif(b8) write_comments_biff8(ba, comments); else write_comments_biff2(ba, comments);\n\t/* ... */\n\tif(b8) write_biff_rec(ba, 0x023e /* Window2 */, write_Window2((_WB.Views||[])[0]));\n\t/* ... */\n\tif(b8 && (ws['!merges']||[]).length) write_biff_rec(ba, 0x00e5 /* MergeCells */, write_MergeCells(ws['!merges']));\n\t/* [LRng] *QUERYTABLE [PHONETICINFO] CONDFMTS */\n\tif(b8) write_ws_biff8_hlinks(ba, ws);\n\t/* [DVAL] */\n\twrite_biff_rec(ba, 0x01ba /* CodeName */, write_XLUnicodeString(cname, opts));\n\t/* *WebPub *CellWatch [SheetExt] */\n\tif(b8) write_FEAT(ba, ws);\n\t/* *FEAT11 *RECORD12 */\n\twrite_biff_rec(ba, 0x000a /* EOF */);\n\treturn ba.end();\n}\n\n/* [MS-XLS] 2.1.7.20.3 */\nfunction write_biff8_global(wb/*:Workbook*/, bufs, opts/*:WriteOpts*/) {\n\tvar A = buf_array();\n\tvar _WB/*:WBWBProps*/ = ((wb||{}).Workbook||{}/*:any*/);\n\tvar _sheets/*:Array<WBWSProp>*/ = (_WB.Sheets||[]);\n\tvar _wb/*:WBProps*/ = /*::((*/_WB.WBProps||{/*::CodeName:\"ThisWorkbook\"*/}/*:: ):any)*/;\n\tvar b8 = opts.biff == 8, b5 = opts.biff == 5;\n\twrite_biff_rec(A, 0x0809, write_BOF(wb, 0x05, opts));\n\tif(opts.bookType == \"xla\") write_biff_rec(A, 0x0087 /* Addin */);\n\twrite_biff_rec(A, 0x00e1 /* InterfaceHdr */, b8 ? writeuint16(0x04b0) : null);\n\twrite_biff_rec(A, 0x00c1 /* Mms */, writezeroes(2));\n\tif(b5) write_biff_rec(A, 0x00bf /* ToolbarHdr */);\n\tif(b5) write_biff_rec(A, 0x00c0 /* ToolbarEnd */);\n\twrite_biff_rec(A, 0x00e2 /* InterfaceEnd */);\n\twrite_biff_rec(A, 0x005c /* WriteAccess */, write_WriteAccess(\"SheetJS\", opts));\n\t/* [FileSharing] */\n\twrite_biff_rec(A, 0x0042 /* CodePage */, writeuint16(b8 ? 0x04b0 : 0x04E4));\n\t/* *2047 Lel */\n\tif(b8) write_biff_rec(A, 0x0161 /* DSF */, writeuint16(0));\n\tif(b8) write_biff_rec(A, 0x01c0 /* Excel9File */);\n\twrite_biff_rec(A, 0x013d /* RRTabId */, write_RRTabId(wb.SheetNames.length));\n\tif(b8 && wb.vbaraw) write_biff_rec(A, 0x00d3 /* ObProj */);\n\t/* [ObNoMacros] */\n\tif(b8 && wb.vbaraw) {\n\t\tvar cname/*:string*/ = _wb.CodeName || \"ThisWorkbook\";\n\t\twrite_biff_rec(A, 0x01ba /* CodeName */, write_XLUnicodeString(cname, opts));\n\t}\n\twrite_biff_rec(A, 0x009c /* BuiltInFnGroupCount */, writeuint16(0x11));\n\t/* *FnGroupName *FnGrp12 */\n\t/* *Lbl */\n\t/* [OleObjectSize] */\n\twrite_biff_rec(A, 0x0019 /* WinProtect */, writebool(false));\n\twrite_biff_rec(A, 0x0012 /* Protect */, writebool(false));\n\twrite_biff_rec(A, 0x0013 /* Password */, writeuint16(0));\n\tif(b8) write_biff_rec(A, 0x01af /* Prot4Rev */, writebool(false));\n\tif(b8) write_biff_rec(A, 0x01bc /* Prot4RevPass */, writeuint16(0));\n\twrite_biff_rec(A, 0x003d /* Window1 */, write_Window1(opts));\n\twrite_biff_rec(A, 0x0040 /* Backup */, writebool(false));\n\twrite_biff_rec(A, 0x008d /* HideObj */, writeuint16(0));\n\twrite_biff_rec(A, 0x0022 /* Date1904 */, writebool(safe1904(wb)==\"true\"));\n\twrite_biff_rec(A, 0x000e /* CalcPrecision */, writebool(true));\n\tif(b8) write_biff_rec(A, 0x01b7 /* RefreshAll */, writebool(false));\n\twrite_biff_rec(A, 0x00DA /* BookBool */, writeuint16(0));\n\t/* ... */\n\twrite_FONTS_biff8(A, wb, opts);\n\twrite_FMTS_biff8(A, wb.SSF, opts);\n\twrite_CELLXFS_biff8(A, opts);\n\t/* ... */\n\tif(b8) write_biff_rec(A, 0x0160 /* UsesELFs */, writebool(false));\n\tvar a = A.end();\n\n\tvar C = buf_array();\n\t/* METADATA [MTRSettings] [ForceFullCalculation] */\n\tif(b8) write_biff_rec(C, 0x008C /* Country */, write_Country());\n\t/* *SUPBOOK *LBL *RTD [RecalcId] *HFPicture */\n\n\t/* BIFF8: MsoDrawingGroup [*Continue] */\n\tif(b8 && b8ocnts.length) write_biff_rec(C, 0x00EB /* MsoDrawingGroup */, write_MsoDrawingGroup());\n\t/* BIFF8: [SST *Continue] ExtSST */\n\tif(b8 && opts.Strings) write_biff_continue(C, 0x00FC /* SST */, write_SST(opts.Strings, opts));\n\n\t/* *WebPub [WOpt] [CrErr] [BookExt] *FeatHdr *DConn [THEME] [CompressPictures] [Compat12] [GUIDTypeLib] */\n\twrite_biff_rec(C, 0x000A /* EOF */);\n\tvar c = C.end();\n\n\tvar B = buf_array();\n\tvar blen = 0, j = 0;\n\tfor(j = 0; j < wb.SheetNames.length; ++j) blen += (b8 ? 12 : 11) + (b8 ? 2 : 1) * wb.SheetNames[j].length;\n\tvar start = a.length + blen + c.length;\n\tfor(j = 0; j < wb.SheetNames.length; ++j) {\n\t\tvar _sheet/*:WBWSProp*/ = _sheets[j] || ({}/*:any*/);\n\t\twrite_biff_rec(B, 0x0085 /* BoundSheet8 */, write_BoundSheet8({pos:start, hs:_sheet.Hidden||0, dt:0, name:wb.SheetNames[j]}, opts));\n\t\tstart += bufs[j].length;\n\t}\n\t/* 1*BoundSheet8 */\n\tvar b = B.end();\n\tif(blen != b.length) throw new Error(\"BS8 \" + blen + \" != \" + b.length);\n\n\tvar out = [];\n\tif(a.length) out.push(a);\n\tif(b.length) out.push(b);\n\tif(c.length) out.push(c);\n\treturn bconcat(out);\n}\n\n/* [MS-XLS] 2.1.7.20 Workbook Stream */\nfunction write_biff8_buf(wb/*:Workbook*/, opts/*:WriteOpts*/) {\n\tvar o = opts || {};\n\tvar bufs = [];\n\n\tif(wb && !wb.SSF) {\n\t\twb.SSF = dup(table_fmt);\n\t}\n\tif(wb && wb.SSF) {\n\t\tmake_ssf(); SSF_load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\to.revssf = evert_num(wb.SSF); o.revssf[wb.SSF[65535]] = 0;\n\t\to.ssf = wb.SSF;\n\t}\n\n\tb8oid = 1; b8ocnts = [];\n\to.Strings = /*::((*/[]/*:: :any):SST)*/; o.Strings.Count = 0; o.Strings.Unique = 0;\n\tfix_write_opts(o);\n\n\to.cellXfs = [];\n\tget_cell_style(o.cellXfs, {}, {revssf:{\"General\":0}});\n\n\tif(!wb.Props) wb.Props = {};\n\n\tfor(var i = 0; i < wb.SheetNames.length; ++i) bufs[bufs.length] = write_ws_biff8(i, o, wb);\n\tbufs.unshift(write_biff8_global(wb, bufs, o));\n\treturn bconcat(bufs);\n}\n\nfunction write_biff_buf(wb/*:Workbook*/, opts/*:WriteOpts*/) {\n\tfor(var i = 0; i <= wb.SheetNames.length; ++i) {\n\t\tvar ws = wb.Sheets[wb.SheetNames[i]];\n\t\tif(!ws || !ws[\"!ref\"]) continue;\n\t\tvar range = decode_range(ws[\"!ref\"]);\n\t\tif(range.e.c > 255) { // note: 255 is IV\n\t\t\tif(typeof console != \"undefined\" && console.error) console.error(\"Worksheet '\" + wb.SheetNames[i] + \"' extends beyond column IV (255).  Data may be lost.\");\n\t\t}\n\t}\n\n\tvar o = opts || {};\n\tswitch(o.biff || 2) {\n\t\tcase 8: case 5: return write_biff8_buf(wb, opts);\n\t\tcase 4: case 3: case 2: return write_biff2_buf(wb, opts);\n\t}\n\tthrow new Error(\"invalid type \" + o.bookType + \" for BIFF\");\n}\n/* note: browser DOM element cannot see mso- style attrs, must parse */\nfunction html_to_sheet(str/*:string*/, _opts)/*:Workbook*/ {\n\tvar opts = _opts || {};\n\tvar dense = (opts.dense != null) ? opts.dense : DENSE;\n\tvar ws/*:Worksheet*/ = ({}/*:any*/); if(dense) ws[\"!data\"] = [];\n\tstr = str_remove_ng(str, \"<!--\", \"-->\");\n\tvar mtch/*:any*/ = str.match(/<table/i);\n\tif(!mtch) throw new Error(\"Invalid HTML: could not find <table>\");\n\tvar mtch2/*:any*/ = str.match(/<\\/table/i);\n\tvar i/*:number*/ = mtch.index, j/*:number*/ = mtch2 && mtch2.index || str.length;\n\tvar rows = split_regex(str.slice(i, j), /(:?<tr[^<>]*>)/i, \"<tr>\");\n\tvar R = -1, C = 0, RS = 0, CS = 0;\n\tvar range/*:Range*/ = {s:{r:10000000, c:10000000},e:{r:0,c:0}};\n\tvar merges/*:Array<Range>*/ = [];\n\tfor(i = 0; i < rows.length; ++i) {\n\t\tvar row = rows[i].trim();\n\t\tvar hd = row.slice(0,3).toLowerCase();\n\t\tif(hd == \"<tr\") { ++R; if(opts.sheetRows && opts.sheetRows <= R) { --R; break; } C = 0; continue; }\n\t\tif(hd != \"<td\" && hd != \"<th\") continue;\n\t\tvar cells = row.split(/<\\/t[dh]>/i);\n\t\tfor(j = 0; j < cells.length; ++j) {\n\t\t\tvar cell = cells[j].trim();\n\t\t\tif(!cell.match(/<t[dh]/i)) continue;\n\t\t\tvar m = cell, cc = 0;\n\t\t\t/* TODO: parse styles etc */\n\t\t\twhile(m.charAt(0) == \"<\" && (cc = m.indexOf(\">\")) > -1) m = m.slice(cc+1);\n\t\t\tfor(var midx = 0; midx < merges.length; ++midx) {\n\t\t\t\tvar _merge/*:Range*/ = merges[midx];\n\t\t\t\tif(_merge.s.c == C && _merge.s.r < R && R <= _merge.e.r) { C = _merge.e.c + 1; midx = -1; }\n\t\t\t}\n\t\t\tvar tag = parsexmltag(cell.slice(0, cell.indexOf(\">\")));\n\t\t\tCS = tag.colspan ? +tag.colspan : 1;\n\t\t\tif((RS = +tag.rowspan)>1 || CS>1) merges.push({s:{r:R,c:C},e:{r:R + (RS||1) - 1, c:C + CS - 1}});\n\t\t\tvar _t/*:string*/ = tag.t || tag[\"data-t\"] || \"\";\n\t\t\t/* TODO: generate stub cells */\n\t\t\tif(!m.length) { C += CS; continue; }\n\t\t\tm = htmldecode(m);\n\t\t\tif(range.s.r > R) range.s.r = R; if(range.e.r < R) range.e.r = R;\n\t\t\tif(range.s.c > C) range.s.c = C; if(range.e.c < C) range.e.c = C;\n\t\t\tif(!m.length) { C += CS; continue; }\n\t\t\tvar o/*:Cell*/ = {t:'s', v:m};\n\t\t\tif(opts.raw || !m.trim().length || _t == 's'){}\n\t\t\telse if(m === 'TRUE') o = {t:'b', v:true};\n\t\t\telse if(m === 'FALSE') o = {t:'b', v:false};\n\t\t\telse if(!isNaN(fuzzynum(m))) o = {t:'n', v:fuzzynum(m)};\n\t\t\telse if(!isNaN(fuzzydate(m).getDate())) {\n\t\t\t\to = ({t:'d', v:parseDate(m)}/*:any*/);\n\t\t\t\tif(opts.UTC === false) o.v = utc_to_local(o.v);\n\t\t\t\tif(!opts.cellDates) o = ({t:'n', v:datenum(o.v)}/*:any*/);\n\t\t\t\to.z = opts.dateNF || table_fmt[14];\n\t\t\t}\n\t\t\tif(o.cellText !== false) o.w = m;\n\t\t\tif(dense) { if(!ws[\"!data\"][R]) ws[\"!data\"][R] = []; ws[\"!data\"][R][C] = o; }\n\t\t\telse ws[encode_cell({r:R, c:C})] = o;\n\t\t\tC += CS;\n\t\t}\n\t}\n\tws['!ref'] = encode_range(range);\n\tif(merges.length) ws[\"!merges\"] = merges;\n\treturn ws;\n}\nfunction make_html_row(ws/*:Worksheet*/, r/*:Range*/, R/*:number*/, o/*:Sheet2HTMLOpts*/)/*:string*/ {\n\tvar M/*:Array<Range>*/ = (ws['!merges'] ||[]);\n\tvar oo/*:Array<string>*/ = [];\n\tvar sp = ({}/*:any*/);\n\tvar dense = ws[\"!data\"] != null;\n\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\tvar RS = 0, CS = 0;\n\t\tfor(var j = 0; j < M.length; ++j) {\n\t\t\tif(M[j].s.r > R || M[j].s.c > C) continue;\n\t\t\tif(M[j].e.r < R || M[j].e.c < C) continue;\n\t\t\tif(M[j].s.r < R || M[j].s.c < C) { RS = -1; break; }\n\t\t\tRS = M[j].e.r - M[j].s.r + 1; CS = M[j].e.c - M[j].s.c + 1; break;\n\t\t}\n\t\tif(RS < 0) continue;\n\t\tvar coord = encode_col(C) + encode_row(R);\n\t\tvar cell = dense ? (ws[\"!data\"][R]||[])[C] : ws[coord];\n\t\t/* TODO: html entities */\n\t\tvar w = (cell && cell.v != null) && (cell.h || escapehtml(cell.w || (format_cell(cell), cell.w) || \"\")) || \"\";\n\t\tsp = ({}/*:any*/);\n\t\tif(RS > 1) sp.rowspan = RS;\n\t\tif(CS > 1) sp.colspan = CS;\n\t\tif(o.editable) w = '<span contenteditable=\"true\">' + w + '</span>';\n\t\telse if(cell) {\n\t\t\tsp[\"data-t\"] = cell && cell.t || 'z';\n\t\t\t// note: data-v is unaffected by the timezone interpretation\n\t\t\tif(cell.v != null) sp[\"data-v\"] = escapehtml(cell.v instanceof Date ? cell.v.toISOString() : cell.v);\n\t\t\tif(cell.z != null) sp[\"data-z\"] = cell.z;\n\t\t\tif(cell.l && (cell.l.Target || \"#\").charAt(0) != \"#\") w = '<a href=\"' + escapehtml(cell.l.Target) +'\">' + w + '</a>';\n\t\t}\n\t\tsp.id = (o.id || \"sjs\") + \"-\" + coord;\n\t\too.push(writextag('td', w, sp));\n\t}\n\tvar preamble = \"<tr>\";\n\treturn preamble + oo.join(\"\") + \"</tr>\";\n}\n\nvar HTML_BEGIN = '<html><head><meta charset=\"utf-8\"/><title>SheetJS Table Export</title></head><body>';\nvar HTML_END = '</body></html>';\n\nfunction html_to_workbook(str/*:string*/, opts)/*:Workbook*/ {\n\tvar mtch = str_match_xml_ig(str, \"table\");\n\tif(!mtch || mtch.length == 0) throw new Error(\"Invalid HTML: could not find <table>\");\n\tif(mtch.length == 1) {\n\t\tvar w = sheet_to_workbook(html_to_sheet(mtch[0], opts), opts);\n\t\tw.bookType = \"html\";\n\t\treturn w;\n\t}\n\tvar wb = book_new();\n\tmtch.forEach(function(s, idx) { book_append_sheet(wb, html_to_sheet(s, opts), \"Sheet\" + (idx+1)); });\n\twb.bookType = \"html\";\n\treturn wb;\n}\n\nfunction make_html_preamble(ws/*:Worksheet*/, R/*:Range*/, o/*:Sheet2HTMLOpts*/)/*:string*/ {\n\tvar out/*:Array<string>*/ = [];\n\treturn out.join(\"\") + '<table' + (o && o.id ? ' id=\"' + o.id + '\"' : \"\") + '>';\n}\n\nfunction sheet_to_html(ws/*:Worksheet*/, opts/*:?Sheet2HTMLOpts*//*, wb:?Workbook*/)/*:string*/ {\n\tvar o = opts || {};\n\tvar header = o.header != null ? o.header : HTML_BEGIN;\n\tvar footer = o.footer != null ? o.footer : HTML_END;\n\tvar out/*:Array<string>*/ = [header];\n\tvar r = decode_range(ws['!ref'] || \"A1\");\n\tout.push(make_html_preamble(ws, r, o));\n\tif(ws[\"!ref\"]) for(var R = r.s.r; R <= r.e.r; ++R) out.push(make_html_row(ws, r, R, o));\n\tout.push(\"</table>\" + footer);\n\treturn out.join(\"\");\n}\n\nfunction sheet_add_dom(ws/*:Worksheet*/, table/*:HTMLElement*/, _opts/*:?any*/)/*:Worksheet*/ {\n\tvar rows/*:HTMLCollection<HTMLTableRowElement>*/ = table.rows;\n\tif(!rows) {\n\t\t/* not an HTML TABLE */\n\t\tthrow \"Unsupported origin when \" + table.tagName + \" is not a TABLE\";\n\t}\n\n\tvar opts = _opts || {};\n\tvar dense = ws[\"!data\"] != null;\n\tvar or_R = 0, or_C = 0;\n\tif(opts.origin != null) {\n\t\tif(typeof opts.origin == 'number') or_R = opts.origin;\n\t\telse {\n\t\t\tvar _origin/*:CellAddress*/ = typeof opts.origin == \"string\" ? decode_cell(opts.origin) : opts.origin;\n\t\t\tor_R = _origin.r; or_C = _origin.c;\n\t\t}\n\t}\n\n\tvar sheetRows = Math.min(opts.sheetRows||10000000, rows.length);\n\tvar range/*:Range*/ = {s:{r:0,c:0},e:{r:or_R,c:or_C}};\n\tif(ws[\"!ref\"]) {\n\t\tvar _range/*:Range*/ = decode_range(ws[\"!ref\"]);\n\t\trange.s.r = Math.min(range.s.r, _range.s.r);\n\t\trange.s.c = Math.min(range.s.c, _range.s.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\tif(or_R == -1) range.e.r = or_R = _range.e.r + 1;\n\t}\n\tvar merges/*:Array<Range>*/ = [], midx = 0;\n\tvar rowinfo/*:Array<RowInfo>*/ = ws[\"!rows\"] || (ws[\"!rows\"] = []);\n\tvar _R = 0, R = 0, _C = 0, C = 0, RS = 0, CS = 0;\n\tif(!ws[\"!cols\"]) ws['!cols'] = [];\n\tfor(; _R < rows.length && R < sheetRows; ++_R) {\n\t\tvar row/*:HTMLTableRowElement*/ = rows[_R];\n\t\tif (is_dom_element_hidden(row)) {\n\t\t\tif (opts.display) continue;\n\t\t\trowinfo[R] = {hidden: true};\n\t\t}\n\t\tvar elts/*:HTMLCollection<HTMLTableCellElement>*/ = (row.cells);\n\t\tfor(_C = C = 0; _C < elts.length; ++_C) {\n\t\t\tvar elt/*:HTMLTableCellElement*/ = elts[_C];\n\t\t\tif (opts.display && is_dom_element_hidden(elt)) continue;\n\t\t\tvar v/*:?string*/ = elt.hasAttribute('data-v') ? elt.getAttribute('data-v') : elt.hasAttribute('v') ? elt.getAttribute('v') : htmldecode(elt.innerHTML);\n\t\t\tvar z/*:?string*/ = elt.getAttribute('data-z') || elt.getAttribute('z');\n\t\t\tfor(midx = 0; midx < merges.length; ++midx) {\n\t\t\t\tvar m/*:Range*/ = merges[midx];\n\t\t\t\tif(m.s.c == C + or_C && m.s.r < R + or_R && R + or_R <= m.e.r) { C = m.e.c+1 - or_C; midx = -1; }\n\t\t\t}\n\t\t\t/* TODO: figure out how to extract nonstandard mso- style */\n\t\t\tCS = +elt.getAttribute(\"colspan\") || 1;\n\t\t\tif( ((RS = (+elt.getAttribute(\"rowspan\") || 1)))>1 || CS>1) merges.push({s:{r:R + or_R,c:C + or_C},e:{r:R + or_R + (RS||1) - 1, c:C + or_C + (CS||1) - 1}});\n\t\t\tvar o/*:Cell*/ = {t:'s', v:v};\n\t\t\tvar _t/*:string*/ = elt.getAttribute(\"data-t\") || elt.getAttribute(\"t\") || \"\";\n\t\t\tif(v != null) {\n\t\t\t\tif(v.length == 0) o.t = _t || 'z';\n\t\t\t\telse if(opts.raw || v.trim().length == 0 || _t == \"s\"){}\n\t\t\t\telse if(v === 'TRUE') o = {t:'b', v:true};\n\t\t\t\telse if(v === 'FALSE') o = {t:'b', v:false};\n\t\t\t\telse if(!isNaN(fuzzynum(v))) o = {t:'n', v:fuzzynum(v)};\n\t\t\t\telse if(!isNaN(fuzzydate(v).getDate())) {\n\t\t\t\t\to = ({t:'d', v:parseDate(v)}/*:any*/);\n\t\t\t\t\tif(opts.UTC) o.v = local_to_utc(o.v);\n\t\t\t\t\tif(!opts.cellDates) o = ({t:'n', v:datenum(o.v)}/*:any*/);\n\t\t\t\t\to.z = opts.dateNF || table_fmt[14];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(o.z === undefined && z != null) o.z = z;\n\t\t\t/* The first link is used.  Links are assumed to be fully specified.\n\t\t\t * TODO: The right way to process relative links is to make a new <a> */\n\t\t\tvar l = \"\", Aelts = elt.getElementsByTagName(\"A\");\n\t\t\tif(Aelts && Aelts.length) for(var Aelti = 0; Aelti < Aelts.length; ++Aelti)\tif(Aelts[Aelti].hasAttribute(\"href\")) {\n\t\t\t\tl = Aelts[Aelti].getAttribute(\"href\"); if(l.charAt(0) != \"#\") break;\n\t\t\t}\n\t\t\tif(l && l.charAt(0) != \"#\" &&\tl.slice(0, 11).toLowerCase() != 'javascript:') o.l = ({ Target: l });\n\t\t\tif(dense) { if(!ws[\"!data\"][R + or_R]) ws[\"!data\"][R + or_R] = []; ws[\"!data\"][R + or_R][C + or_C] = o; }\n\t\t\telse ws[encode_cell({c:C + or_C, r:R + or_R})] = o;\n\t\t\tif(range.e.c < C + or_C) range.e.c = C + or_C;\n\t\t\tC += CS;\n\t\t}\n\t\t++R;\n\t}\n\tif(merges.length) ws['!merges'] = (ws[\"!merges\"] || []).concat(merges);\n\trange.e.r = Math.max(range.e.r, R - 1 + or_R);\n\tws['!ref'] = encode_range(range);\n\tif(R >= sheetRows) ws['!fullref'] = encode_range((range.e.r = rows.length-_R+R-1 + or_R,range)); // We can count the real number of rows to parse but we don't to improve the performance\n\treturn ws;\n}\n\nfunction parse_dom_table(table/*:HTMLElement*/, _opts/*:?any*/)/*:Worksheet*/ {\n\tvar opts = _opts || {};\n\tvar ws/*:Worksheet*/ = ({}/*:any*/); if(opts.dense) ws[\"!data\"] = [];\n\treturn sheet_add_dom(ws, table, _opts);\n}\n\nfunction table_to_book(table/*:HTMLElement*/, opts/*:?any*/)/*:Workbook*/ {\n\tvar o = sheet_to_workbook(parse_dom_table(table, opts), opts);\n\t//o.bookType = \"dom\"; // TODO: define a type for this\n\treturn o;\n}\n\nfunction is_dom_element_hidden(element/*:HTMLElement*/)/*:boolean*/ {\n\tvar display/*:string*/ = '';\n\tvar get_computed_style/*:?function*/ = get_get_computed_style_function(element);\n\tif(get_computed_style) display = get_computed_style(element).getPropertyValue('display');\n\tif(!display) display = element.style && element.style.display;\n\treturn display === 'none';\n}\n\n/* global getComputedStyle */\nfunction get_get_computed_style_function(element/*:HTMLElement*/)/*:?function*/ {\n\t// The proper getComputedStyle implementation is the one defined in the element window\n\tif(element.ownerDocument.defaultView && typeof element.ownerDocument.defaultView.getComputedStyle === 'function') return element.ownerDocument.defaultView.getComputedStyle;\n\t// If it is not available, try to get one from the global namespace\n\tif(typeof getComputedStyle === 'function') return getComputedStyle;\n\treturn null;\n}\n/* OpenDocument */\nfunction parse_text_p(text/*:string*//*::, tag*/)/*:Array<any>*/ {\n\t/* 6.1.2 White Space Characters */\n\tvar fixed = text\n\t\t.replace(/[\\t\\r\\n]/g, \" \").trim().replace(/ +/g, \" \")\n\t\t.replace(/<text:s\\/>/g,\" \")\n\t\t.replace(/<text:s text:c=\"(\\d+)\"\\/>/g, function($$,$1) { return Array(parseInt($1,10)+1).join(\" \"); })\n\t\t.replace(/<text:tab[^<>]*\\/>/g,\"\\t\")\n\t\t.replace(/<text:line-break\\/>/g,\"\\n\");\n\tvar v = unescapexml(fixed.replace(/<[^<>]*>/g,\"\"));\n\n\treturn [v];\n}\n\n/* Note: ODS can stick styles in content.xml or styles.xml, FODS blurs lines */\nfunction parse_ods_styles(d/*:string*/, _opts, _nfm) {\n\tvar number_format_map = _nfm || {};\n\tvar str = xlml_normalize(d);\n\txlmlregex.lastIndex = 0;\n\tstr = remove_doctype(str_remove_ng(str, \"<!--\", \"-->\"));\n\tvar Rn, NFtag, NF = \"\", tNF = \"\", y, etpos = 0, tidx = -1, infmt = false, payload = \"\";\n\twhile((Rn = xlmlregex.exec(str))) {\n\t\tswitch((Rn[3]=Rn[3].replace(/_[\\s\\S]*$/,\"\"))) {\n\t\t/* Number Format Definitions */\n\t\tcase 'number-style': // <number:number-style> 16.29.2\n\t\tcase 'currency-style': // <number:currency-style> 16.29.8\n\t\tcase 'percentage-style': // <number:percentage-style> 16.29.10\n\t\tcase 'date-style': // <number:date-style> 16.29.11\n\t\tcase 'time-style': // <number:time-style> 16.29.19\n\t\tcase 'text-style': // <number:text-style> 16.29.26\n\t\t\tif(Rn[1]==='/') {\n\t\t\t\tinfmt = false;\n\t\t\t\tif(NFtag['truncate-on-overflow'] == \"false\") {\n\t\t\t\t\tif(NF.match(/h/)) NF = NF.replace(/h+/, \"[$&]\");\n\t\t\t\t\telse if(NF.match(/m/)) NF = NF.replace(/m+/, \"[$&]\");\n\t\t\t\t\telse if(NF.match(/s/)) NF = NF.replace(/s+/, \"[$&]\");\n\t\t\t\t}\n\t\t\t\tnumber_format_map[NFtag.name] = NF;\n\t\t\t\tNF = \"\";\n\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\tinfmt = true;\n\t\t\t\tNF = \"\";\n\t\t\t\tNFtag = parsexmltag(Rn[0], false);\n\t\t\t} break;\n\n\t\t// LibreOffice bug https://bugs.documentfoundation.org/show_bug.cgi?id=149484\n\t\tcase 'boolean-style': // <number:boolean-style> 16.29.24\n\t\t\tif(Rn[1]==='/') {\n\t\t\t\tinfmt = false;\n\t\t\t\tnumber_format_map[NFtag.name] = \"General\";\n\t\t\t\tNF = \"\";\n\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\tinfmt = true;\n\t\t\t\tNF = \"\";\n\t\t\t\tNFtag = parsexmltag(Rn[0], false);\n\t\t\t} break;\n\n\t\t/* Number Format Elements */\n\t\tcase 'boolean': // <number:boolean> 16.29.25\n\t\t\tNF += \"General\"; // ODF spec is unfortunately underspecified here\n\t\t\tbreak;\n\n\t\tcase 'text': // <number:text> 16.29.27\n\t\t\tif(Rn[1]==='/') {\n\t\t\t\tpayload = str.slice(tidx, xlmlregex.lastIndex - Rn[0].length);\n\t\t\t\t// NOTE: Excel has a different interpretation of \"%%\" and friends\n\t\t\t\tif(payload == \"%\" && NFtag[0] == '<number:percentage-style') NF += \"%\";\n\t\t\t\telse NF += '\"' + payload.replace(/\"/g, '\"\"') + '\"';\n\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\ttidx = xlmlregex.lastIndex;\n\t\t\t} break;\n\n\n\t\tcase 'day': { // <number:day> 16.29.12\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"d\"; break;\n\t\t\t\tcase \"long\": NF += \"dd\"; break;\n\t\t\t\tdefault: NF += \"dd\"; break; // TODO: error condition\n\t\t\t}\n\t\t} break;\n\n\t\tcase 'day-of-week': { // <number:day-of-week> 16.29.16\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"ddd\"; break;\n\t\t\t\tcase \"long\": NF += \"dddd\"; break;\n\t\t\t\tdefault: NF += \"ddd\"; break;\n\t\t\t}\n\t\t} break;\n\n\t\tcase 'era': { // <number:era> 16.29.15 TODO: proper mapping\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"ee\"; break;\n\t\t\t\tcase \"long\": NF += \"eeee\"; break;\n\t\t\t\tdefault: NF += \"eeee\"; break; // TODO: error condition\n\t\t\t}\n\t\t} break;\n\n\t\tcase 'hours': { // <number:hours> 16.29.20\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"h\"; break;\n\t\t\t\tcase \"long\": NF += \"hh\"; break;\n\t\t\t\tdefault: NF += \"hh\"; break; // TODO: error condition\n\t\t\t}\n\t\t} break;\n\n\t\tcase 'minutes': { // <number:minutes> 16.29.21\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"m\"; break;\n\t\t\t\tcase \"long\": NF += \"mm\"; break;\n\t\t\t\tdefault: NF += \"mm\"; break; // TODO: error condition\n\t\t\t}\n\t\t} break;\n\n\t\tcase 'month': { // <number:month> 16.29.13\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tif(y[\"textual\"]) NF += \"mm\";\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"m\"; break;\n\t\t\t\tcase \"long\": NF += \"mm\"; break;\n\t\t\t\tdefault: NF += \"m\"; break;\n\t\t\t}\n\t\t} break;\n\n\t\tcase 'seconds': { // <number:seconds> 16.29.22\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"s\"; break;\n\t\t\t\tcase \"long\": NF += \"ss\"; break;\n\t\t\t\tdefault: NF += \"ss\"; break; // TODO: error condition\n\t\t\t}\n\t\t\tif(y[\"decimal-places\"]) NF += \".\" + fill(\"0\", +y[\"decimal-places\"]);\n\t\t} break;\n\n\t\tcase 'year': { // <number:year> 16.29.14\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"yy\"; break;\n\t\t\t\tcase \"long\": NF += \"yyyy\"; break;\n\t\t\t\tdefault: NF += \"yy\"; break; // TODO: error condition\n\t\t\t}\n\t\t} break;\n\n\t\tcase 'am-pm': // <number:am-pm> 16.29.23\n\t\t\tNF += \"AM/PM\"; // LO autocorrects A/P -> AM/PM\n\t\t\tbreak;\n\n\t\tcase 'week-of-year': // <number:week-of-year> 16.29.17\n\t\tcase 'quarter': // <number:quarter> 16.29.18\n\t\t\tconsole.error(\"Excel does not support ODS format token \" + Rn[3]);\n\t\t\tbreak;\n\n\t\tcase 'fill-character': // <number:fill-character> 16.29.5\n\t\t\tif(Rn[1]==='/') {\n\t\t\t\tpayload = str.slice(tidx, xlmlregex.lastIndex - Rn[0].length);\n\t\t\t\t// NOTE: Excel has a different interpretation of \"%%\" and friends\n\t\t\t\tNF += '\"' + payload.replace(/\"/g, '\"\"') + '\"*';\n\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\ttidx = xlmlregex.lastIndex;\n\t\t\t} break;\n\n\t\tcase 'scientific-number': // <number:scientific-number> 16.29.6\n\t\t\t// TODO: find a mapping for all parameters\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tNF += \"0.\" + fill(\"0\", +y[\"min-decimal-places\"] || +y[\"decimal-places\"] || 2) + fill(\"?\", +y[\"decimal-places\"] - +y[\"min-decimal-places\"] || 0) + \"E\" + (parsexmlbool(y[\"forced-exponent-sign\"]) ? \"+\" : \"\") + fill(\"0\", +y[\"min-exponent-digits\"] || 2);\n\t\t\tbreak;\n\n\t\tcase 'fraction': // <number:fraction> 16.29.7\n\t\t\t// TODO: find a mapping for all parameters\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tif(!+y[\"min-integer-digits\"]) NF += \"#\";\n\t\t\telse NF += fill(\"0\", +y[\"min-integer-digits\"]);\n\t\t\tNF += \" \";\n\t\t\tNF += fill(\"?\", +y[\"min-numerator-digits\"] || 1);\n\t\t\tNF += \"/\";\n\t\t\tif(+y[\"denominator-value\"]) NF += y[\"denominator-value\"];\n\t\t\telse NF += fill(\"?\", +y[\"min-denominator-digits\"] || 1);\n\t\t\tbreak;\n\n\t\tcase 'currency-symbol': // <number:currency-symbol> 16.29.9\n\t\t\t// TODO: localization with [$-...]\n\t\t\tif(Rn[1]==='/') {\n\t\t\t\tNF += '\"' + str.slice(tidx, xlmlregex.lastIndex - Rn[0].length).replace(/\"/g, '\"\"') + '\"';\n\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\ttidx = xlmlregex.lastIndex;\n\t\t\t} else NF += \"$\";\n\t\t\tbreak;\n\n\t\tcase 'text-properties': // <style:text-properties> 16.29.29\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch((y[\"color\"]||\"\").toLowerCase().replace(\"#\", \"\")) {\n\t\t\t\tcase \"ff0000\": case \"red\": NF = \"[Red]\" + NF; break;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'text-content': // <number:text-content> 16.29.28\n\t\t\tNF += \"@\";\n\t\t\tbreak;\n\n\t\tcase 'map': // <style:map> 16.3\n\t\t\t// TODO: handle more complex maps\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tif(unescapexml(y[\"condition\"]) == \"value()>=0\") NF = number_format_map[y[\"apply-style-name\"]] + \";\" + NF;\n\t\t\telse console.error(\"ODS number format may be incorrect: \" + y[\"condition\"]);\n\t\t\tbreak;\n\n\t\tcase 'number': // <number:number> 16.29.3\n\t\t\t// TODO: handle all the attributes\n\t\t\tif(Rn[1]==='/') break;\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\ttNF = \"\";\n\t\t\ttNF += fill(\"0\", +y[\"min-integer-digits\"] || 1);\n\t\t\tif(parsexmlbool(y[\"grouping\"])) tNF = commaify(fill(\"#\", Math.max(0, 4 - tNF.length)) + tNF);\n\t\t\tif(+y[\"min-decimal-places\"] || +y[\"decimal-places\"]) tNF += \".\";\n\t\t\tif(+y[\"min-decimal-places\"]) tNF += fill(\"0\", +y[\"min-decimal-places\"] || 1);\n\t\t\tif(+y[\"decimal-places\"] - (+y[\"min-decimal-places\"]||0)) tNF += fill(\"0\", +y[\"decimal-places\"] - (+y[\"min-decimal-places\"]||0)); // TODO: should this be \"#\" ?\n\t\t\tNF += tNF;\n\t\t\tbreak;\n\n\t\tcase 'embedded-text': // <number:embedded-text> 16.29.4\n\t\t\t// TODO: verify interplay with grouping et al\n\t\t\tif(Rn[1]==='/') {\n\t\t\t\tif(etpos == 0) NF += '\"' + str.slice(tidx, xlmlregex.lastIndex - Rn[0].length).replace(/\"/g, '\"\"') + '\"';\n\t\t\t\telse NF = NF.slice(0, etpos) + '\"' + str.slice(tidx, xlmlregex.lastIndex - Rn[0].length).replace(/\"/g, '\"\"') + '\"' + NF.slice(etpos);\n\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\ttidx = xlmlregex.lastIndex;\n\t\t\t\tetpos = -+parsexmltag(Rn[0], false)[\"position\"] || 0;\n\t\t\t} break;\n\n\t}}\n\treturn number_format_map;\n}\n\nfunction parse_content_xml(d/*:string*/, _opts, _nfm)/*:Workbook*/ {\n\t\tvar opts = _opts || {};\n\t\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\t\tvar str = xlml_normalize(d);\n\t\tvar state/*:Array<any>*/ = [], tmp;\n\t\tvar tag/*:: = {}*/;\n\t\tvar nfidx, NF = \"\", pidx = 0;\n\t\tvar sheetag/*:: = {name:\"\", '名称':\"\"}*/;\n\t\tvar rowtag/*:: = {'行号':\"\"}*/;\n\t\tvar Sheets = {}, SheetNames/*:Array<string>*/ = [];\n\t\tvar ws = ({}/*:any*/); if(opts.dense) ws[\"!data\"] = [];\n\t\tvar Rn, q/*:: :any = ({t:\"\", v:null, z:null, w:\"\",c:[],}:any)*/;\n\t\tvar ctag = ({value:\"\"}/*:any*/);\n\t\tvar textp = \"\", textpidx = 0, textptag/*:: = {}*/, oldtextp = \"\", oldtextpidx = 0;\n\t\tvar textR = [], oldtextR = [];\n\t\tvar R = -1, C = -1, range = {s: {r:1000000,c:10000000}, e: {r:0, c:0}};\n\t\tvar row_ol = 0;\n\t\tvar number_format_map = _nfm || {}, styles = {};\n\t\tvar merges/*:Array<Range>*/ = [], mrange = {}, mR = 0, mC = 0;\n\t\tvar rowinfo/*:Array<RowInfo>*/ = [], rowpeat = 1, colpeat = 1;\n\t\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\t\tvar WB = {Names:[], WBProps:{}};\n\t\tvar atag = ({}/*:any*/);\n\t\tvar _Ref/*:[string, string]*/ = [\"\", \"\"];\n\t\tvar comments/*:Array<Comment>*/ = [], comment/*:Comment*/ = ({}/*:any*/);\n\t\tvar creator = \"\", creatoridx = 0;\n\t\tvar isstub = false, intable = false;\n\t\tvar i = 0;\n\t\txlmlregex.lastIndex = 0;\n\t\tstr = remove_doctype(str_remove_ng(str, \"<!--\", \"-->\"));\n\t\twhile((Rn = xlmlregex.exec(str))) switch((Rn[3]=Rn[3].replace(/_[\\s\\S]*$/,\"\"))) {\n\n\t\t\tcase 'table': case '工作表': // 9.1.2 <table:table>\n\t\t\t\tif(Rn[1]==='/') {\n\t\t\t\t\tif(range.e.c >= range.s.c && range.e.r >= range.s.r) ws['!ref'] = encode_range(range);\n\t\t\t\t\telse ws['!ref'] = \"A1:A1\";\n\t\t\t\t\tif(opts.sheetRows > 0 && opts.sheetRows <= range.e.r) {\n\t\t\t\t\t\tws['!fullref'] = ws['!ref'];\n\t\t\t\t\t\trange.e.r = opts.sheetRows - 1;\n\t\t\t\t\t\tws['!ref'] = encode_range(range);\n\t\t\t\t\t}\n\t\t\t\t\tif(merges.length) ws['!merges'] = merges;\n\t\t\t\t\tif(rowinfo.length) ws[\"!rows\"] = rowinfo;\n\t\t\t\t\tsheetag.name = sheetag['名称'] || sheetag.name;\n\t\t\t\t\tif(typeof JSON !== 'undefined') JSON.stringify(sheetag);\n\t\t\t\t\tSheetNames.push(sheetag.name);\n\t\t\t\t\tSheets[sheetag.name] = ws;\n\t\t\t\t\tintable = false;\n\t\t\t\t}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\t\tsheetag = parsexmltag(Rn[0], false);\n\t\t\t\t\tR = C = -1;\n\t\t\t\t\trange.s.r = range.s.c = 10000000; range.e.r = range.e.c = 0;\n\t\t\t\t\tws = ({}/*:any*/); if(opts.dense) ws[\"!data\"] = []; merges = [];\n\t\t\t\t\trowinfo = [];\n\t\t\t\t\tintable = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'table-row-group': // 9.1.9 <table:table-row-group>\n\t\t\t\tif(Rn[1] === \"/\") --row_ol; else ++row_ol;\n\t\t\t\tbreak;\n\t\t\tcase 'table-row': case '行': // 9.1.3 <table:table-row>\n\t\t\t\tif(Rn[1] === '/') { R+=rowpeat; rowpeat = 1; break; }\n\t\t\t\trowtag = parsexmltag(Rn[0], false);\n\t\t\t\tif(rowtag['行号']) R = rowtag['行号'] - 1; else if(R == -1) R = 0;\n\t\t\t\trowpeat = +rowtag['number-rows-repeated'] || 1;\n\t\t\t\t/* TODO: remove magic */\n\t\t\t\tif(rowpeat < 10) for(i = 0; i < rowpeat; ++i) if(row_ol > 0) rowinfo[R + i] = {level: row_ol};\n\t\t\t\tC = -1; break;\n\t\t\tcase 'covered-table-cell': // 9.1.5 <table:covered-table-cell>\n\t\t\t\tif(Rn[1] !== '/') ++C;\n\t\t\t\tif(opts.sheetStubs) {\n\t\t\t\t\tif(opts.dense) { if(!ws[\"!data\"][R]) ws[\"!data\"][R] = []; ws[\"!data\"][R][C] = {t:'z'}; }\n\t\t\t\t\telse ws[encode_cell({r:R,c:C})] = {t:'z'};\n\t\t\t\t}\n\t\t\t\ttextp = \"\"; textR = [];\n\t\t\t\tbreak; /* stub */\n\t\t\tcase 'table-cell': case '数据':\n\t\t\t\tif(Rn[0].charAt(Rn[0].length-2) === '/') {\n\t\t\t\t\t++C;\n\t\t\t\t\tctag = parsexmltag(Rn[0], false);\n\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\tq = ({t:'z', v:null/*:: , z:null, w:\"\",c:[]*/}/*:any*/);\n\t\t\t\t\tif(ctag.formula && opts.cellFormula != false) q.f = ods_to_csf_formula(unescapexml(ctag.formula));\n\t\t\t\t\tif(ctag[\"style-name\"] && styles[ctag[\"style-name\"]]) q.z = styles[ctag[\"style-name\"]];\n\t\t\t\t\tif((ctag['数据类型'] || ctag['value-type']) == \"string\") {\n\t\t\t\t\t\tq.t = \"s\"; q.v = unescapexml(ctag['string-value'] || \"\");\n\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\tif(!ws[\"!data\"][R]) ws[\"!data\"][R] = [];\n\t\t\t\t\t\t\tws[\"!data\"][R][C] = q;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tws[encode_col(C) + encode_row(R)] = q;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tC+= colpeat-1;\n\t\t\t\t} else if(Rn[1]!=='/') {\n\t\t\t\t\t++C;\n\t\t\t\t\ttextp = oldtextp = \"\"; textpidx = oldtextpidx = 0; textR = []; oldtextR = [];\n\t\t\t\t\tcolpeat = 1;\n\t\t\t\t\tvar rptR = rowpeat ? R + rowpeat - 1 : R;\n\t\t\t\t\tif(C > range.e.c) range.e.c = C;\n\t\t\t\t\tif(C < range.s.c) range.s.c = C;\n\t\t\t\t\tif(R < range.s.r) range.s.r = R;\n\t\t\t\t\tif(rptR > range.e.r) range.e.r = rptR;\n\t\t\t\t\tctag = parsexmltag(Rn[0], false);\n\t\t\t\t\tcomments = []; comment = ({}/*:any*/);\n\t\t\t\t\tq = ({t:ctag['数据类型'] || ctag['value-type'], v:null/*:: , z:null, w:\"\",c:[]*/}/*:any*/);\n\t\t\t\t\tif(ctag[\"style-name\"] && styles[ctag[\"style-name\"]]) q.z = styles[ctag[\"style-name\"]];\n\t\t\t\t\tif(opts.cellFormula) {\n\t\t\t\t\t\tif(ctag.formula) ctag.formula = unescapexml(ctag.formula);\n\t\t\t\t\t\tif(ctag['number-matrix-columns-spanned'] && ctag['number-matrix-rows-spanned']) {\n\t\t\t\t\t\t\tmR = parseInt(ctag['number-matrix-rows-spanned'],10) || 0;\n\t\t\t\t\t\t\tmC = parseInt(ctag['number-matrix-columns-spanned'],10) || 0;\n\t\t\t\t\t\t\tmrange = {s: {r:R,c:C}, e:{r:R + mR-1,c:C + mC-1}};\n\t\t\t\t\t\t\tq.F = encode_range(mrange);\n\t\t\t\t\t\t\tarrayf.push([mrange, q.F]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(ctag.formula) q.f = ods_to_csf_formula(ctag.formula);\n\t\t\t\t\t\telse for(i = 0; i < arrayf.length; ++i)\n\t\t\t\t\t\t\tif(R >= arrayf[i][0].s.r && R <= arrayf[i][0].e.r)\n\t\t\t\t\t\t\t\tif(C >= arrayf[i][0].s.c && C <= arrayf[i][0].e.c)\n\t\t\t\t\t\t\t\t\tq.F = arrayf[i][1];\n\t\t\t\t\t}\n\t\t\t\t\tif(ctag['number-columns-spanned'] || ctag['number-rows-spanned']) {\n\t\t\t\t\t\tmR = parseInt(ctag['number-rows-spanned'],10) || 0;\n\t\t\t\t\t\tmC = parseInt(ctag['number-columns-spanned'],10) || 0;\n\t\t\t\t\t\tmrange = {s: {r:R,c:C}, e:{r:R + mR-1,c:C + mC-1}};\n\t\t\t\t\t\tmerges.push(mrange);\n\t\t\t\t\t}\n\n\t\t\t\t\t/* 19.675.2 table:number-columns-repeated */\n\t\t\t\t\tif(ctag['number-columns-repeated']) colpeat = parseInt(ctag['number-columns-repeated'], 10);\n\n\t\t\t\t\t/* 19.385 office:value-type TODO: verify ODS and UOS */\n\t\t\t\t\tswitch(q.t) {\n\t\t\t\t\t\tcase 'boolean': q.t = 'b'; q.v = parsexmlbool(ctag['boolean-value']) || (+ctag['boolean-value'] >= 1); break;\n\t\t\t\t\t\tcase 'float': q.t = 'n'; q.v = parseFloat(ctag.value);\n\t\t\t\t\t\t\tif(opts.cellDates && q.z && fmt_is_date(q.z)) { q.v = numdate(q.v + (WB.WBProps.date1904 ? 1462 : 0)); q.t = typeof q.v == \"number\" ? 'n' : 'd'; }\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'percentage': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'currency': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'date': q.t = 'd'; q.v = parseDate(ctag['date-value'], WB.WBProps.date1904);\n\t\t\t\t\t\t\tif(!opts.cellDates) { q.t = 'n'; q.v = datenum(q.v, WB.WBProps.date1904); }\n\t\t\t\t\t\t\tif(!q.z) q.z = 'm/d/yy'; break;\n\t\t\t\t\t\t/* NOTE: for `time`, Excel ODS export incorrectly uses durations relative to 1900 epoch even if 1904 is specified */\n\t\t\t\t\t\tcase 'time': q.t = 'n'; q.v = parse_isodur(ctag['time-value'])/86400;\n\t\t\t\t\t\t\tif(opts.cellDates) { q.v = numdate(q.v); q.t = typeof q.v == \"number\" ? 'n' : 'd'; }\n\t\t\t\t\t\t\tif(!q.z) q.z = 'HH:MM:SS'; break;\n\t\t\t\t\t\tcase 'number': q.t = 'n'; q.v = parseFloat(ctag['数据数值']);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif(q.t === 'string' || q.t === 'text' || !q.t) {\n\t\t\t\t\t\t\t\tq.t = 's';\n\t\t\t\t\t\t\t\tif(ctag['string-value'] != null) { textp = unescapexml(ctag['string-value']); textR = []; }\n\t\t\t\t\t\t\t} else throw new Error('Unsupported value type ' + q.t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tisstub = false;\n\t\t\t\t\tif(q.t === 's') {\n\t\t\t\t\t\tq.v = textp || '';\n\t\t\t\t\t\tif(textR.length) q.R = textR;\n\t\t\t\t\t\tisstub = textpidx == 0;\n\t\t\t\t\t}\n\t\t\t\t\tif(atag.Target) q.l = atag;\n\t\t\t\t\tif(comments.length > 0) { q.c = comments; comments = []; }\n\t\t\t\t\tif(textp && opts.cellText !== false) q.w = textp;\n\t\t\t\t\tif(isstub) { q.t = \"z\"; delete q.v; }\n\t\t\t\t\tif(!isstub || opts.sheetStubs) {\n\t\t\t\t\t\tif(!(opts.sheetRows && opts.sheetRows <= R)) {\n\t\t\t\t\t\t\tfor(var rpt = 0; rpt < rowpeat; ++rpt) {\n\t\t\t\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\t\t\tif(!ws[\"!data\"][R + rpt]) ws[\"!data\"][R + rpt] = [];\n\t\t\t\t\t\t\t\t\tws[\"!data\"][R + rpt][C] = rpt == 0 ? q : dup(q);\n\t\t\t\t\t\t\t\t\twhile(--colpeat > 0) ws[\"!data\"][R + rpt][C + colpeat] = dup(q);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tws[encode_cell({r:R + rpt,c:C})] = q;\n\t\t\t\t\t\t\t\t\twhile(--colpeat > 0) ws[encode_cell({r:R + rpt,c:C + colpeat})] = dup(q);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(range.e.c <= C) range.e.c = C;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\tC += colpeat-1; colpeat = 0;\n\t\t\t\t\tq = {/*:: t:\"\", v:null, z:null, w:\"\",c:[]*/};\n\t\t\t\t\ttextp = \"\"; textR = [];\n\t\t\t\t}\n\t\t\t\tatag = ({}/*:any*/);\n\t\t\t\tbreak; // 9.1.4 <table:table-cell>\n\n\t\t\t/* pure state */\n\t\t\tcase 'document': // TODO: <office:document> is the root for FODS\n\t\t\tcase 'document-content': case '电子表格文档': // 3.1.3.2 <office:document-content>\n\t\t\tcase 'spreadsheet': case '主体': // 3.7 <office:spreadsheet>\n\t\t\tcase 'scripts': // 3.12 <office:scripts>\n\t\t\tcase 'styles': // TODO <office:styles>\n\t\t\tcase 'font-face-decls': // 3.14 <office:font-face-decls>\n\t\t\tcase 'master-styles': // 3.15.4 <office:master-styles> -- relevant for FODS\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t\tbreak;\n\n\t\t\tcase 'annotation': // 14.1 <office:annotation>\n\t\t\t\tif(Rn[1]==='/'){\n\t\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;\n\t\t\t\t\tcomment.t = textp;\n\t\t\t\t\tif(textR.length) /*::(*/comment/*:: :any)*/.R = textR;\n\t\t\t\t\tcomment.a = creator;\n\t\t\t\t\tcomments.push(comment);\n\t\t\t\t\ttextp = oldtextp; textpidx = oldtextpidx; textR = oldtextR;\n\t\t\t\t}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\t\tvar annotag = parsexmltag(Rn[0], true);\n\t\t\t\t\t/* office:display TODO: check if there is a global override */\n\t\t\t\t\tif(!(annotag[\"display\"] && parsexmlbool(annotag[\"display\"]))) comments.hidden = true;\n\t\t\t\t\toldtextp = textp; oldtextpidx = textpidx; oldtextR = textR;\n\t\t\t\t\ttextp = \"\"; textpidx = 0; textR = [];\n\t\t\t\t}\n\t\t\t\tcreator = \"\"; creatoridx = 0;\n\t\t\t\tbreak;\n\n\t\t\tcase 'creator': // 4.3.2.7 <dc:creator>\n\t\t\t\tif(Rn[1]==='/') { creator = str.slice(creatoridx,Rn.index); }\n\t\t\t\telse creatoridx = Rn.index + Rn[0].length;\n\t\t\t\tbreak;\n\n\t\t\t/* ignore state */\n\t\t\tcase 'meta': case '元数据': // TODO: <office:meta> <uof:元数据> FODS/UOF\n\t\t\tcase 'settings': // TODO: <office:settings>\n\t\t\tcase 'config-item-set': // TODO: <office:config-item-set>\n\t\t\tcase 'config-item-map-indexed': // TODO: <office:config-item-map-indexed>\n\t\t\tcase 'config-item-map-entry': // TODO: <office:config-item-map-entry>\n\t\t\tcase 'config-item-map-named': // TODO: <office:config-item-map-entry>\n\t\t\tcase 'shapes': // 9.2.8 <table:shapes>\n\t\t\tcase 'frame': // 10.4.2 <draw:frame>\n\t\t\tcase 'text-box': // 10.4.3 <draw:text-box>\n\t\t\tcase 'image': // 10.4.4 <draw:image>\n\t\t\tcase 'data-pilot-tables': // 9.6.2 <table:data-pilot-tables>\n\t\t\tcase 'list-style': // 16.30 <text:list-style>\n\t\t\tcase 'form': // 13.13 <form:form>\n\t\t\tcase 'dde-links': // 9.8 <table:dde-links>\n\t\t\tcase 'event-listeners': // TODO\n\t\t\tcase 'chart': // TODO\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], false]);\n\t\t\t\ttextp = \"\"; textpidx = 0; textR = [];\n\t\t\t\tbreak;\n\n\t\t\tcase 'scientific-number': // <number:scientific-number>\n\t\t\tcase 'currency-symbol': // <number:currency-symbol>\n\t\t\tcase 'fill-character': // 16.29.5 <number:fill-character>\n\t\t\t\tbreak;\n\n\t\t\tcase 'text-style': // 16.27.25 <number:text-style>\n\t\t\tcase 'boolean-style': // 16.27.23 <number:boolean-style>\n\t\t\tcase 'number-style': // 16.27.2 <number:number-style>\n\t\t\tcase 'currency-style': // 16.29.8 <number:currency-style>\n\t\t\tcase 'percentage-style': // 16.27.9 <number:percentage-style>\n\t\t\tcase 'date-style': // 16.27.10 <number:date-style>\n\t\t\tcase 'time-style': // 16.27.18 <number:time-style>\n\t\t\t\tif(Rn[1]==='/'){\n\t\t\t\t\tvar xlmlidx = xlmlregex.lastIndex;\n\t\t\t\t\tparse_ods_styles(str.slice(nfidx, xlmlregex.lastIndex), _opts, number_format_map);\n\t\t\t\t\txlmlregex.lastIndex = xlmlidx;\n\t\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\t\tnfidx = xlmlregex.lastIndex - Rn[0].length;\n\t\t\t\t} break;\n\n\t\t\tcase 'script': break; // 3.13 <office:script>\n\t\t\tcase 'libraries': break; // TODO: <ooo:libraries>\n\t\t\tcase 'automatic-styles': break; // 3.15.3 <office:automatic-styles>\n\n\t\t\tcase 'default-style': // TODO: <style:default-style>\n\t\t\tcase 'page-layout': break; // TODO: <style:page-layout>\n\t\t\tcase 'style': { // 16.2 <style:style>\n\t\t\t\tvar styletag = parsexmltag(Rn[0], false);\n\t\t\t\tif(styletag[\"family\"] == \"table-cell\" && number_format_map[styletag[\"data-style-name\"]]) styles[styletag[\"name\"]] = number_format_map[styletag[\"data-style-name\"]];\n\t\t\t} break;\n\t\t\tcase 'map': break; // 16.3 <style:map>\n\t\t\tcase 'font-face': break; // 16.21 <style:font-face>\n\n\t\t\tcase 'paragraph-properties': break; // 17.6 <style:paragraph-properties>\n\t\t\tcase 'table-properties': break; // 17.15 <style:table-properties>\n\t\t\tcase 'table-column-properties': break; // 17.16 <style:table-column-properties>\n\t\t\tcase 'table-row-properties': break; // 17.17 <style:table-row-properties>\n\t\t\tcase 'table-cell-properties': break; // 17.18 <style:table-cell-properties>\n\n\t\t\tcase 'number': // 16.27.3 <number:number>\n\t\t\t\tbreak;\n\n\t\t\tcase 'fraction': break; // TODO 16.27.6 <number:fraction>\n\n\t\t\tcase 'day': // 16.27.11 <number:day>\n\t\t\tcase 'month': // 16.27.12 <number:month>\n\t\t\tcase 'year': // 16.27.13 <number:year>\n\t\t\tcase 'era': // 16.27.14 <number:era>\n\t\t\tcase 'day-of-week': // 16.27.15 <number:day-of-week>\n\t\t\tcase 'week-of-year': // 16.27.16 <number:week-of-year>\n\t\t\tcase 'quarter': // 16.27.17 <number:quarter>\n\t\t\tcase 'hours': // 16.27.19 <number:hours>\n\t\t\tcase 'minutes': // 16.27.20 <number:minutes>\n\t\t\tcase 'seconds': // 16.27.21 <number:seconds>\n\t\t\tcase 'am-pm': // 16.27.22 <number:am-pm>\n\t\t\t\tbreak;\n\n\t\t\tcase 'boolean': break; // 16.27.24 <number:boolean>\n\t\t\tcase 'text': // 16.27.26 <number:text>\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\t\telse if(Rn[1]===\"/\") switch(state[state.length-1][0]) {\n\t\t\t\t\tcase 'number-style':\n\t\t\t\t\tcase 'date-style':\n\t\t\t\t\tcase 'time-style':\n\t\t\t\t\t\tNF += str.slice(pidx, Rn.index);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\t\tbreak;\n\n\t\t\tcase 'named-range': // 9.4.12 <table:named-range>\n\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\t_Ref = ods_to_csf_3D(tag['cell-range-address']);\n\t\t\t\tvar nrange = ({Name:tag.name, Ref:_Ref[0] + '!' + _Ref[1]}/*:any*/);\n\t\t\t\tif(intable) nrange.Sheet = SheetNames.length;\n\t\t\t\tWB.Names.push(nrange);\n\t\t\t\tbreak;\n\n\t\t\tcase 'text-content': break; // 16.27.27 <number:text-content>\n\t\t\tcase 'text-properties': break; // 16.27.27 <style:text-properties>\n\t\t\tcase 'embedded-text': break; // 16.27.4 <number:embedded-text>\n\n\t\t\tcase 'body': case '电子表格': break; // 3.3 16.9.6 19.726.3\n\n\t\t\tcase 'forms': break; // 12.25.2 13.2\n\t\t\tcase 'table-column': break; // 9.1.6 <table:table-column>\n\t\t\tcase 'table-header-rows': break; // 9.1.7 <table:table-header-rows>\n\t\t\tcase 'table-rows': break; // 9.1.12 <table:table-rows>\n\t\t\t/* TODO: outline levels */\n\t\t\tcase 'table-column-group': break; // 9.1.10 <table:table-column-group>\n\t\t\tcase 'table-header-columns': break; // 9.1.11 <table:table-header-columns>\n\t\t\tcase 'table-columns': break; // 9.1.12 <table:table-columns>\n\n\t\t\tcase 'null-date': // 9.4.2 <table:null-date>\n\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\tswitch(tag[\"date-value\"]) {\n\t\t\t\t\tcase \"1904-01-01\": WB.WBProps.date1904 = true; break;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'graphic-properties': break; // 17.21 <style:graphic-properties>\n\t\t\tcase 'calculation-settings': break; // 9.4.1 <table:calculation-settings>\n\t\t\tcase 'named-expressions': break; // 9.4.11 <table:named-expressions>\n\t\t\tcase 'label-range': break; // 9.4.9 <table:label-range>\n\t\t\tcase 'label-ranges': break; // 9.4.10 <table:label-ranges>\n\t\t\tcase 'named-expression': break; // 9.4.13 <table:named-expression>\n\t\t\tcase 'sort': break; // 9.4.19 <table:sort>\n\t\t\tcase 'sort-by': break; // 9.4.20 <table:sort-by>\n\t\t\tcase 'sort-groups': break; // 9.4.22 <table:sort-groups>\n\n\t\t\tcase 'tab': break; // 6.1.4 <text:tab>\n\t\t\tcase 'line-break': break; // 6.1.5 <text:line-break>\n\t\t\tcase 'span': break; // 6.1.7 <text:span>\n\t\t\tcase 'p': case '文本串': // 5.1.3 <text:p>\n\t\t\t\tif(['master-styles'].indexOf(state[state.length-1][0]) > -1) break;\n\t\t\t\tif(Rn[1]==='/' && (!ctag || !ctag['string-value'])) {\n\t\t\t\t\tvar ptp = parse_text_p(str.slice(textpidx,Rn.index), textptag);\n\t\t\t\t\ttextp = (textp.length > 0 ? textp + \"\\n\" : \"\") + ptp[0];\n\t\t\t\t} else if(Rn[0].slice(-2) == \"/>\") {\n\t\t\t\t\t/* TODO: is self-closing 文本串 valid? */\n\t\t\t\t\ttextp += \"\\n\";\n\t\t\t\t} else { textptag = parsexmltag(Rn[0], false); textpidx = Rn.index + Rn[0].length; }\n\t\t\t\tbreak; // <text:p>\n\t\t\tcase 's': break; // <text:s>\n\n\t\t\tcase 'database-range': // 9.4.15 <table:database-range>\n\t\t\t\tif(Rn[1]==='/') break;\n\t\t\t\ttry {\n\t\t\t\t\t_Ref = ods_to_csf_3D(parsexmltag(Rn[0])['target-range-address']);\n\t\t\t\t\tSheets[_Ref[0]]['!autofilter'] = { ref:_Ref[1] };\n\t\t\t\t} catch(e) {/* empty */}\n\t\t\t\tbreak;\n\n\t\t\tcase 'date': break; // <*:date>\n\n\t\t\tcase 'object': break; // 10.4.6.2 <draw:object>\n\t\t\tcase 'title': case '标题': break; // <*:title> OR <uof:标题>\n\t\t\tcase 'desc': break; // <*:desc>\n\t\t\tcase 'binary-data': break; // 10.4.5 TODO: b64 blob\n\n\t\t\t/* 9.2 Advanced Tables */\n\t\t\tcase 'table-source': break; // 9.2.6\n\t\t\tcase 'scenario': break; // 9.2.6\n\n\t\t\tcase 'iteration': break; // 9.4.3 <table:iteration>\n\t\t\tcase 'content-validations': break; // 9.4.4 <table:\n\t\t\tcase 'content-validation': break; // 9.4.5 <table:\n\t\t\tcase 'help-message': break; // 9.4.6 <table:\n\t\t\tcase 'error-message': break; // 9.4.7 <table:\n\t\t\tcase 'database-ranges': break; // 9.4.14 <table:database-ranges>\n\n\t\t\t/* 9.5 Filters */\n\t\t\tcase 'filter': break; // 9.5.2 <table:filter>\n\t\t\tcase 'filter-and': break; // 9.5.3 <table:filter-and>\n\t\t\tcase 'filter-or': break; // 9.5.4 <table:filter-or>\n\t\t\tcase 'filter-condition': break; // 9.5.5 <table:filter-condition>\n\t\t\tcase 'filter-set-item': break; // 9.5.6 <table:filter-condition>\n\n\t\t\tcase 'list-level-style-bullet': break; // 16.31 <text:\n\t\t\tcase 'list-level-style-number': break; // 16.32 <text:\n\t\t\tcase 'list-level-properties': break; // 17.19 <style:\n\n\t\t\t/* 7.3 Document Fields */\n\t\t\tcase 'sender-firstname': // 7.3.6.2\n\t\t\tcase 'sender-lastname': // 7.3.6.3\n\t\t\tcase 'sender-initials': // 7.3.6.4\n\t\t\tcase 'sender-title': // 7.3.6.5\n\t\t\tcase 'sender-position': // 7.3.6.6\n\t\t\tcase 'sender-email': // 7.3.6.7\n\t\t\tcase 'sender-phone-private': // 7.3.6.8\n\t\t\tcase 'sender-fax': // 7.3.6.9\n\t\t\tcase 'sender-company': // 7.3.6.10\n\t\t\tcase 'sender-phone-work': // 7.3.6.11\n\t\t\tcase 'sender-street': // 7.3.6.12\n\t\t\tcase 'sender-city': // 7.3.6.13\n\t\t\tcase 'sender-postal-code': // 7.3.6.14\n\t\t\tcase 'sender-country': // 7.3.6.15\n\t\t\tcase 'sender-state-or-province': // 7.3.6.16\n\t\t\tcase 'author-name': // 7.3.7.1\n\t\t\tcase 'author-initials': // 7.3.7.2\n\t\t\tcase 'chapter': // 7.3.8\n\t\t\tcase 'file-name': // 7.3.9\n\t\t\tcase 'template-name': // 7.3.9\n\t\t\tcase 'sheet-name': // 7.3.9\n\t\t\t\tbreak;\n\n\t\t\tcase 'event-listener':\n\t\t\t\tbreak;\n\t\t\t/* TODO: FODS Properties */\n\t\t\tcase 'initial-creator':\n\t\t\tcase 'creation-date':\n\t\t\tcase 'print-date':\n\t\t\tcase 'generator':\n\t\t\tcase 'document-statistic':\n\t\t\tcase 'user-defined':\n\t\t\tcase 'editing-duration':\n\t\t\tcase 'editing-cycles':\n\t\t\t\tbreak;\n\n\t\t\t/* TODO: FODS Config */\n\t\t\tcase 'config-item':\n\t\t\t\tbreak;\n\n\t\t\t/* TODO: style tokens */\n\t\t\tcase 'page-number': break; // TODO <text:page-number>\n\t\t\tcase 'page-count': break; // TODO <text:page-count>\n\t\t\tcase 'time': break; // TODO <text:time>\n\n\t\t\t/* 9.3 Advanced Table Cells */\n\t\t\tcase 'cell-range-source': break; // 9.3.1 <table:\n\t\t\tcase 'detective': break; // 9.3.2 <table:\n\t\t\tcase 'operation': break; // 9.3.3 <table:\n\t\t\tcase 'highlighted-range': break; // 9.3.4 <table:\n\n\t\t\t/* 9.6 Data Pilot Tables <table: */\n\t\t\tcase 'data-pilot-table': // 9.6.3\n\t\t\tcase 'source-cell-range': // 9.6.5\n\t\t\tcase 'source-service': // 9.6.6\n\t\t\tcase 'data-pilot-field': // 9.6.7\n\t\t\tcase 'data-pilot-level': // 9.6.8\n\t\t\tcase 'data-pilot-subtotals': // 9.6.9\n\t\t\tcase 'data-pilot-subtotal': // 9.6.10\n\t\t\tcase 'data-pilot-members': // 9.6.11\n\t\t\tcase 'data-pilot-member': // 9.6.12\n\t\t\tcase 'data-pilot-display-info': // 9.6.13\n\t\t\tcase 'data-pilot-sort-info': // 9.6.14\n\t\t\tcase 'data-pilot-layout-info': // 9.6.15\n\t\t\tcase 'data-pilot-field-reference': // 9.6.16\n\t\t\tcase 'data-pilot-groups': // 9.6.17\n\t\t\tcase 'data-pilot-group': // 9.6.18\n\t\t\tcase 'data-pilot-group-member': // 9.6.19\n\t\t\t\tbreak;\n\n\t\t\t/* 10.3 Drawing Shapes */\n\t\t\tcase 'rect': // 10.3.2\n\t\t\t\tbreak;\n\n\t\t\t/* 14.6 DDE Connections */\n\t\t\tcase 'dde-connection-decls': // 14.6.2 <text:\n\t\t\tcase 'dde-connection-decl': // 14.6.3 <text:\n\t\t\tcase 'dde-link': // 14.6.4 <table:\n\t\t\tcase 'dde-source': // 14.6.5 <office:\n\t\t\t\tbreak;\n\n\t\t\tcase 'properties': break; // 13.7 <form:properties>\n\t\t\tcase 'property': break; // 13.8 <form:property>\n\n\t\t\tcase 'a': // 6.1.8 hyperlink\n\t\t\t\tif(Rn[1]!== '/') {\n\t\t\t\t\tatag = parsexmltag(Rn[0], false);\n\t\t\t\t\tif(!atag.href) break;\n\t\t\t\t\tatag.Target = unescapexml(atag.href); delete atag.href;\n\t\t\t\t\tif(atag.Target.charAt(0) == \"#\" && atag.Target.indexOf(\".\") > -1) {\n\t\t\t\t\t\t_Ref = ods_to_csf_3D(atag.Target.slice(1));\n\t\t\t\t\t\tatag.Target = \"#\" + _Ref[0] + \"!\" + _Ref[1];\n\t\t\t\t\t} else if(atag.Target.match(/^\\.\\.[\\\\\\/]/)) atag.Target = atag.Target.slice(3);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t/* non-standard */\n\t\t\tcase 'table-protection': break;\n\t\t\tcase 'data-pilot-grand-total': break; // <table:\n\t\t\tcase 'office-document-common-attrs': break; // bare\n\t\t\tdefault: switch(Rn[2]) {\n\t\t\t\tcase 'dc:':       // TODO: properties\n\t\t\t\tcase 'calcext:':  // ignore undocumented extensions\n\t\t\t\tcase 'loext:':    // ignore undocumented extensions\n\t\t\t\tcase 'ooo:':      // ignore undocumented extensions\n\t\t\t\tcase 'chartooo:': // ignore undocumented extensions\n\t\t\t\tcase 'draw:':     // TODO: drawing\n\t\t\t\tcase 'style:':    // TODO: styles\n\t\t\t\tcase 'chart:':    // TODO: charts\n\t\t\t\tcase 'form:':     // TODO: forms\n\t\t\t\tcase 'uof:':      // TODO: uof\n\t\t\t\tcase '表:':       // TODO: uof\n\t\t\t\tcase '字:':       // TODO: uof\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: if(opts.WTF) throw new Error(Rn);\n\t\t\t}\n\t\t}\n\t\tvar out/*:Workbook*/ = ({\n\t\t\tSheets: Sheets,\n\t\t\tSheetNames: SheetNames,\n\t\t\tWorkbook: WB\n\t\t}/*:any*/);\n\t\tif(opts.bookSheets) delete /*::(*/out/*:: :any)*/.Sheets;\n\t\treturn out;\n}\n\nfunction parse_ods(zip/*:ZIPFile*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\topts = opts || ({}/*:any*/);\n\tif(safegetzipfile(zip, 'META-INF/manifest.xml')) parse_manifest(getzipdata(zip, 'META-INF/manifest.xml'), opts);\n\tvar styles = getzipstr(zip, 'styles.xml');\n\tvar Styles = styles && parse_ods_styles(utf8read(styles), opts);\n\tvar content = getzipstr(zip, 'content.xml');\n\tif(!content) throw new Error(\"Missing content.xml in ODS / UOF file\");\n\tvar wb = parse_content_xml(utf8read(content), opts, Styles);\n\tif(safegetzipfile(zip, 'meta.xml')) wb.Props = parse_core_props(getzipdata(zip, 'meta.xml'));\n\twb.bookType = \"ods\";\n\treturn wb;\n}\nfunction parse_fods(data/*:string*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tvar wb = parse_content_xml(data, opts);\n\twb.bookType = \"fods\";\n\treturn wb;\n}\n\n/* OpenDocument */\nvar write_styles_ods/*:{(wb:any, opts:any):string}*/ = /* @__PURE__ */(function() {\n\tvar master_styles = [\n\t\t'<office:master-styles>',\n\t\t\t'<style:master-page style:name=\"mp1\" style:page-layout-name=\"mp1\">',\n\t\t\t\t'<style:header/>',\n\t\t\t\t'<style:header-left style:display=\"false\"/>',\n\t\t\t\t'<style:footer/>',\n\t\t\t\t'<style:footer-left style:display=\"false\"/>',\n\t\t\t'</style:master-page>',\n\t\t'</office:master-styles>'\n\t].join(\"\");\n\n\tvar payload = '<office:document-styles ' + wxt_helper({\n\t\t'xmlns:office':   \"urn:oasis:names:tc:opendocument:xmlns:office:1.0\",\n\t\t'xmlns:table':    \"urn:oasis:names:tc:opendocument:xmlns:table:1.0\",\n\t\t'xmlns:style':    \"urn:oasis:names:tc:opendocument:xmlns:style:1.0\",\n\t\t'xmlns:text':     \"urn:oasis:names:tc:opendocument:xmlns:text:1.0\",\n\t\t'xmlns:draw':     \"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0\",\n\t\t'xmlns:fo':       \"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0\",\n\t\t'xmlns:xlink':    \"http://www.w3.org/1999/xlink\",\n\t\t'xmlns:dc':       \"http://purl.org/dc/elements/1.1/\",\n\t\t'xmlns:number':   \"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0\",\n\t\t'xmlns:svg':      \"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0\",\n\t\t'xmlns:of':       \"urn:oasis:names:tc:opendocument:xmlns:of:1.2\",\n\t\t'office:version': \"1.2\"\n\t}) + '>' + master_styles + '</office:document-styles>';\n\n\treturn function wso(/*::wb, opts*/) {\n\t\treturn XML_HEADER + payload;\n\t};\n})();\n\n// TODO: find out if anyone actually read the spec.  LO has some wild errors\nfunction write_number_format_ods(nf/*:string*/, nfidx/*:string*/)/*:string*/ {\n\tvar type = \"number\", payload = \"\", nopts = { \"style:name\": nfidx }, c = \"\", i = 0;\n\tnf = nf.replace(/\"[$]\"/g, \"$\");\n\t/* TODO: replace with an actual parser based on a real grammar */\n\tj: {\n\t\t// TODO: support style maps\n\t\tif(nf.indexOf(\";\") > -1) {\n\t\t\tconsole.error(\"Unsupported ODS Style Map exported.  Using first branch of \" + nf);\n\t\t\tnf = nf.slice(0, nf.indexOf(\";\"));\n\t\t}\n\n\t\tif(nf == \"@\") { type = \"text\"; payload = \"<number:text-content/>\"; break j; }\n\n\t\t/* currency flag */\n\t\tif(nf.indexOf(/\\$/) > -1) { type = \"currency\"; }\n\n\t\t/* opening string literal */\n\t\tif(nf[i] == '\"') {\n\t\t\tc = \"\";\n\t\t\twhile(nf[++i] != '\"' || nf[++i] == '\"') c += nf[i]; --i;\n\t\t\tif(nf[i+1] == \"*\") {\n\t\t\t\ti++;\n\t\t\t\tpayload += '<number:fill-character>' + escapexml(c.replace(/\"\"/g, '\"')) + '</number:fill-character>';\n\t\t\t} else {\n\t\t\t\tpayload += '<number:text>' + escapexml(c.replace(/\"\"/g, '\"')) + '</number:text>';\n\t\t\t}\n\t\t\tnf = nf.slice(i+1); i = 0;\n\t\t}\n\n\t\t/* fractions */\n\t\tvar t = nf.match(/# (\\?+)\\/(\\?+)/);\n\t\tif(t) { payload += writextag(\"number:fraction\", null, {\"number:min-integer-digits\":0, \"number:min-numerator-digits\": t[1].length, \"number:max-denominator-value\": Math.max(+(t[1].replace(/./g, \"9\")), +(t[2].replace(/./g, \"9\"))) }); break j; }\n\t\tif((t=nf.match(/# (\\?+)\\/(\\d+)/))) { payload += writextag(\"number:fraction\", null, {\"number:min-integer-digits\":0, \"number:min-numerator-digits\": t[1].length, \"number:denominator-value\": +t[2]}); break j; }\n\n\t\t/* percentages */\n\t\tif((t=nf.match(/\\b(\\d+)(|\\.\\d+)%/))) { type = \"percentage\"; payload += writextag(\"number:number\", null, {\"number:decimal-places\": t[2] && t.length - 1 || 0, \"number:min-decimal-places\": t[2] && t.length - 1 || 0, \"number:min-integer-digits\": t[1].length }) + \"<number:text>%</number:text>\"; break j; }\n\n\t\t/* datetime */\n\t\tvar has_time = false;\n\t\tif([\"y\",\"m\",\"d\"].indexOf(nf[0]) > -1) {\n\t\t\ttype = \"date\";\n\t\t\tk: for(; i < nf.length; ++i) switch((c = nf[i].toLowerCase())) {\n\t\t\t\tcase \"h\": case \"s\": has_time = true; --i; break k;\n\t\t\t\tcase \"m\":\n\t\t\t\t\tl: for(var h = i+1; h < nf.length; ++h) switch(nf[h]) {\n\t\t\t\t\t\tcase \"y\": case \"d\": break l;\n\t\t\t\t\t\tcase \"h\": case \"s\": has_time = true; --i; break k;\n\t\t\t\t\t}\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase \"y\": case \"d\":\n\t\t\t\t\twhile((nf[++i]||\"\").toLowerCase() == c[0]) c += c[0]; --i;\n\t\t\t\t\tswitch(c) {\n\t\t\t\t\t\tcase \"y\": case \"yy\": payload += \"<number:year/>\"; break;\n\t\t\t\t\t\tcase \"yyy\": case \"yyyy\": payload += '<number:year number:style=\"long\"/>'; break;\n\t\t\t\t\t\tcase \"mmmmm\": console.error(\"ODS has no equivalent of format |mmmmm|\");\n\t\t\t\t\t\t\t/* falls through */\n\t\t\t\t\t\tcase \"m\": case \"mm\": case \"mmm\": case \"mmmm\":\n\t\t\t\t\t\t\tpayload += '<number:month number:style=\"' + (c.length % 2 ? \"short\" : \"long\") + '\" number:textual=\"' + (c.length >= 3 ? \"true\" : \"false\") + '\"/>';\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"d\": case \"dd\": payload += '<number:day number:style=\"' + (c.length % 2 ? \"short\" : \"long\") + '\"/>'; break;\n\t\t\t\t\t\tcase \"ddd\": case \"dddd\": payload += '<number:day-of-week number:style=\"' + (c.length % 2 ? \"short\" : \"long\") + '\"/>'; break;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '\"':\n\t\t\t\t\twhile(nf[++i] != '\"' || nf[++i] == '\"') c += nf[i]; --i;\n\t\t\t\t\tpayload += '<number:text>' + escapexml(c.slice(1).replace(/\"\"/g, '\"')) + '</number:text>';\n\t\t\t\t\tbreak;\n\t\t\t\tcase '\\\\': c = nf[++i];\n\t\t\t\t\tpayload += '<number:text>' + escapexml(c) + '</number:text>'; break;\n\t\t\t\tcase '/': case ':': payload += '<number:text>' + escapexml(c) + '</number:text>'; break;\n\t\t\t\tdefault: console.error(\"unrecognized character \" + c + \" in ODF format \" + nf);\n\t\t\t}\n\t\t\tif(!has_time) break j;\n\t\t\tnf = nf.slice(i+1); i = 0;\n\t\t}\n\t\tif(nf.match(/^\\[?[hms]/)) {\n\t\t\tif(type == \"number\") type = \"time\";\n\t\t\tif(nf.match(/\\[/)) {\n\t\t\t\tnf = nf.replace(/[\\[\\]]/g, \"\");\n\t\t\t\tnopts['number:truncate-on-overflow'] = \"false\";\n\t\t\t}\n\t\t\tfor(; i < nf.length; ++i) switch((c = nf[i].toLowerCase())) {\n\t\t\t\tcase \"h\": case \"m\": case \"s\":\n\t\t\t\t\twhile((nf[++i]||\"\").toLowerCase() == c[0]) c += c[0]; --i;\n\t\t\t\t\tswitch(c) {\n\t\t\t\t\t\tcase \"h\": case \"hh\": payload += '<number:hours number:style=\"' + (c.length % 2 ? \"short\" : \"long\") + '\"/>'; break;\n\t\t\t\t\t\tcase \"m\": case \"mm\": payload += '<number:minutes number:style=\"' + (c.length % 2 ? \"short\" : \"long\") + '\"/>'; break;\n\t\t\t\t\t\tcase \"s\": case \"ss\":\n\t\t\t\t\t\t\tif(nf[i+1] == \".\") do { c += nf[i+1]; ++i; } while(nf[i+1] == \"0\");\n\t\t\t\t\t\t\tpayload += '<number:seconds number:style=\"' + (c.match(\"ss\") ? \"long\" : \"short\") + '\"' + (c.match(/\\./) ? ' number:decimal-places=\"' + (c.match(/0+/)||[\"\"])[0].length + '\"' : \"\")+ '/>'; break;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '\"':\n\t\t\t\t\twhile(nf[++i] != '\"' || nf[++i] == '\"') c += nf[i]; --i;\n\t\t\t\t\tpayload += '<number:text>' + escapexml(c.slice(1).replace(/\"\"/g, '\"')) + '</number:text>';\n\t\t\t\t\tbreak;\n\t\t\t\tcase '/': case ':': payload += '<number:text>' + escapexml(c) + '</number:text>'; break;\n\t\t\t\tcase \"a\":\n\t\t\t\t\tif(nf.slice(i, i+3).toLowerCase() == \"a/p\") { payload += '<number:am-pm/>'; i += 2; break; } // Note: ODF does not support A/P\n\t\t\t\t\tif(nf.slice(i, i+5).toLowerCase() == \"am/pm\")  { payload += '<number:am-pm/>'; i += 4; break; }\n\t\t\t\t\t/* falls through */\n\t\t\t\tdefault: console.error(\"unrecognized character \" + c + \" in ODF format \" + nf);\n\t\t\t}\n\t\t\tbreak j;\n\t\t}\n\n\t\t/* currency flag */\n\t\tif(nf.indexOf(/\\$/) > -1) { type = \"currency\"; }\n\n\t\t/* should be in a char loop */\n\t\tif(nf[0] == \"$\") { payload += '<number:currency-symbol number:language=\"en\" number:country=\"US\">$</number:currency-symbol>'; nf = nf.slice(1); i = 0; }\n\t\ti = 0; if(nf[i] == '\"') {\n\t\t\twhile(nf[++i] != '\"' || nf[++i] == '\"') c += nf[i]; --i;\n\t\t\tif(nf[i+1] == \"*\") {\n\t\t\t\ti++;\n\t\t\t\tpayload += '<number:fill-character>' + escapexml(c.replace(/\"\"/g, '\"')) + '</number:fill-character>';\n\t\t\t} else {\n\t\t\t\tpayload += '<number:text>' + escapexml(c.replace(/\"\"/g, '\"')) + '</number:text>';\n\t\t\t}\n\t\t\tnf = nf.slice(i+1); i = 0;\n\t\t}\n\n\t\t/* number TODO: interstitial text e.g. 000)000-0000 */\n\t\tvar np = nf.match(/([#0][0#,]*)(\\.[0#]*|)(E[+]?0*|)/i);\n\t\tif(!np || !np[0]) console.error(\"Could not find numeric part of \" + nf);\n\t\telse {\n\t\t\tvar base = np[1].replace(/,/g, \"\");\n\t\t\tpayload += '<number:' + (np[3] ? \"scientific-\" : \"\")+ 'number' +\n\t\t\t\t' number:min-integer-digits=\"' + (base.indexOf(\"0\") == -1 ? \"0\" : base.length - base.indexOf(\"0\")) + '\"' +\n\t\t\t\t(np[0].indexOf(\",\") > -1 ? ' number:grouping=\"true\"' : \"\") +\n\t\t\t\t(np[2] && ' number:decimal-places=\"' + (np[2].length - 1) + '\"' || ' number:decimal-places=\"0\"') +\n\t\t\t\t(np[3] && np[3].indexOf(\"+\") > -1 ? ' number:forced-exponent-sign=\"true\"' : \"\" ) +\n\t\t\t\t(np[3] ? ' number:min-exponent-digits=\"' + np[3].match(/0+/)[0].length + '\"' : \"\" ) +\n\t\t\t\t'>' +\n\t\t\t\t/* TODO: interstitial text placeholders */\n\t\t\t\t'</number:' + (np[3] ? \"scientific-\" : \"\") + 'number>';\n\t\t\ti = np.index + np[0].length;\n\t\t}\n\n\t\t/* residual text */\n\t\tif(nf[i] == '\"') {\n\t\t\tc = \"\";\n\t\t\twhile(nf[++i] != '\"' || nf[++i] == '\"') c += nf[i]; --i;\n\t\t\tpayload += '<number:text>' + escapexml(c.replace(/\"\"/g, '\"')) + '</number:text>';\n\t\t}\n\t}\n\n\tif(!payload) { console.error(\"Could not generate ODS number format for |\" + nf + \"|\"); return \"\"; }\n\treturn writextag(\"number:\" + type + \"-style\", payload, nopts);\n}\n\nfunction write_names_ods(Names, SheetNames, idx) {\n\t//var scoped = Names.filter(function(name) { return name.Sheet == (idx == -1 ? null : idx); });\n\tvar scoped = []; for(var namei = 0; namei < Names.length; ++namei) {\n\t\tvar name = Names[namei];\n\t\tif(!name) continue;\n\t\tif(name.Sheet == (idx == -1 ? null : idx)) scoped.push(name);\n\t}\n\tif(!scoped.length) return \"\";\n\treturn \"      <table:named-expressions>\\n\" + scoped.map(function(name) {\n\t\tvar odsref =  (idx == -1 ? \"$\" : \"\") + csf_to_ods_3D(name.Ref);\n\t\treturn \"        \" + writextag(\"table:named-range\", null, {\n\t\t\t\"table:name\": name.Name,\n\t\t\t\"table:cell-range-address\": odsref,\n\t\t\t\"table:base-cell-address\": odsref.replace(/[\\.][^\\.]*$/, \".$A$1\")\n\t\t});\n\t}).join(\"\\n\") + \"\\n      </table:named-expressions>\\n\";\n}\nvar write_content_ods/*:{(wb:any, opts:any):string}*/ = /* @__PURE__ */(function() {\n\t/* 6.1.2 White Space Characters */\n\tvar write_text_p = function(text/*:string*/, span)/*:string*/ {\n\t\treturn escapexml(text)\n\t\t\t.replace(/  +/g, function($$){return '<text:s text:c=\"'+$$.length+'\"/>';})\n\t\t\t.replace(/\\t/g, \"<text:tab/>\")\n\t\t\t.replace(/\\n/g, span ? \"<text:line-break/>\": \"</text:p><text:p>\")\n\t\t\t.replace(/^ /, \"<text:s/>\").replace(/ $/, \"<text:s/>\");\n\t};\n\n\tvar null_cell_xml = '          <table:table-cell />\\n';\n\tvar write_ws = function(ws, wb/*:Workbook*/, i/*:number*/, opts, nfs, date1904)/*:string*/ {\n\t\t/* Section 9 Tables */\n\t\tvar o/*:Array<string>*/ = [];\n\t\to.push('      <table:table table:name=\"' + escapexml(wb.SheetNames[i]) + '\" table:style-name=\"ta1\">\\n');\n\t\tvar R=0,C=0, range = decode_range(ws['!ref']||\"A1\");\n\t\tvar marr/*:Array<Range>*/ = ws['!merges'] || [], mi = 0;\n\t\tvar dense = ws[\"!data\"] != null;\n\t\tif(ws[\"!cols\"]) {\n\t\t\tfor(C = 0; C <= range.e.c; ++C) o.push('        <table:table-column' + (ws[\"!cols\"][C] ? ' table:style-name=\"co' + ws[\"!cols\"][C].ods + '\"' : '') + '></table:table-column>\\n');\n\t\t}\n\t\tvar H = \"\", ROWS = ws[\"!rows\"]||[];\n\t\tfor(R = 0; R < range.s.r; ++R) {\n\t\t\tH = ROWS[R] ? ' table:style-name=\"ro' + ROWS[R].ods + '\"' : \"\";\n\t\t\to.push('        <table:table-row' + H + '></table:table-row>\\n');\n\t\t}\n\t\tfor(; R <= range.e.r; ++R) {\n\t\t\tH = ROWS[R] ? ' table:style-name=\"ro' + ROWS[R].ods + '\"' : \"\";\n\t\t\to.push('        <table:table-row' + H + '>\\n');\n\t\t\tfor(C=0; C < range.s.c; ++C) o.push(null_cell_xml);\n\t\t\tfor(; C <= range.e.c; ++C) {\n\t\t\t\tvar skip = false, ct = {}, textp = \"\";\n\t\t\t\tfor(mi = 0; mi != marr.length; ++mi) {\n\t\t\t\t\tif(marr[mi].s.c > C) continue;\n\t\t\t\t\tif(marr[mi].s.r > R) continue;\n\t\t\t\t\tif(marr[mi].e.c < C) continue;\n\t\t\t\t\tif(marr[mi].e.r < R) continue;\n\t\t\t\t\tif(marr[mi].s.c != C || marr[mi].s.r != R) skip = true;\n\t\t\t\t\tct['table:number-columns-spanned'] = (marr[mi].e.c - marr[mi].s.c + 1);\n\t\t\t\t\tct['table:number-rows-spanned'] =    (marr[mi].e.r - marr[mi].s.r + 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(skip) { o.push('          <table:covered-table-cell/>\\n'); continue; }\n\t\t\t\tvar ref = encode_cell({r:R, c:C}), cell = dense ? (ws[\"!data\"][R]||[])[C]: ws[ref];\n\t\t\t\tif(cell && cell.f) {\n\t\t\t\t\tct['table:formula'] = escapexml(csf_to_ods_formula(cell.f));\n\t\t\t\t\tif(cell.F) {\n\t\t\t\t\t\tif(cell.F.slice(0, ref.length) == ref) {\n\t\t\t\t\t\t\tvar _Fref = decode_range(cell.F);\n\t\t\t\t\t\t\tct['table:number-matrix-columns-spanned'] = (_Fref.e.c - _Fref.s.c + 1);\n\t\t\t\t\t\t\tct['table:number-matrix-rows-spanned'] =    (_Fref.e.r - _Fref.s.r + 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(!cell) { o.push(null_cell_xml); continue; }\n\t\t\t\tswitch(cell.t) {\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\ttextp = (cell.v ? 'TRUE' : 'FALSE');\n\t\t\t\t\t\tct['office:value-type'] = \"boolean\";\n\t\t\t\t\t\tct['office:boolean-value'] = (cell.v ? 'true' : 'false');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'n':\n\t\t\t\t\t\ttextp = (cell.w||String(cell.v||0));\n\t\t\t\t\t\tct['office:value-type'] = \"float\";\n\t\t\t\t\t\tct['office:value'] = (cell.v||0);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 's': case 'str':\n\t\t\t\t\t\ttextp = cell.v == null ? \"\" : cell.v;\n\t\t\t\t\t\tct['office:value-type'] = \"string\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\ttextp = (cell.w||(parseDate(cell.v, date1904).toISOString()));\n\t\t\t\t\t\tct['office:value-type'] = \"date\";\n\t\t\t\t\t\tct['office:date-value'] = (parseDate(cell.v, date1904).toISOString());\n\t\t\t\t\t\tct['table:style-name'] = \"ce1\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t//case 'e': // TODO: translate to ODS errors\n\t\t\t\t\tdefault: o.push(null_cell_xml); continue; // TODO: empty cell with comments\n\t\t\t\t}\n\t\t\t\tvar text_p = write_text_p(textp);\n\t\t\t\tif(cell.l && cell.l.Target) {\n\t\t\t\t\tvar _tgt = cell.l.Target;\n\t\t\t\t\t_tgt = _tgt.charAt(0) == \"#\" ? \"#\" + csf_to_ods_3D(_tgt.slice(1)) : _tgt;\n\t\t\t\t\t// TODO: choose correct parent path format based on link delimiters\n\t\t\t\t\tif(_tgt.charAt(0) != \"#\" && !_tgt.match(/^\\w+:/)) _tgt = '../' + _tgt;\n\t\t\t\t\ttext_p = writextag('text:a', text_p, {'xlink:href': _tgt.replace(/&/g, \"&amp;\")});\n\t\t\t\t}\n\t\t\t\tif(nfs[cell.z]) ct[\"table:style-name\"] = \"ce\" + nfs[cell.z].slice(1);\n\t\t\t\tvar payload = writextag('text:p', text_p, {});\n\t\t\t\tif(cell.c) {\n\t\t\t\t\tvar acreator = \"\", apayload = \"\", aprops = {};\n\t\t\t\t\tfor(var ci = 0; ci < cell.c.length; ++ci) {\n\t\t\t\t\t\tif(!acreator && cell.c[ci].a) acreator = cell.c[ci].a;\n\t\t\t\t\t\tapayload += \"<text:p>\" + write_text_p(cell.c[ci].t) + \"</text:p>\";\n\t\t\t\t\t}\n\t\t\t\t\tif(!cell.c.hidden) aprops[\"office:display\"] = true;\n\t\t\t\t\tpayload = writextag('office:annotation', apayload, aprops) + payload;\n\t\t\t\t}\n\t\t\t\to.push('          ' + writextag('table:table-cell', payload, ct) + '\\n');\n\t\t\t}\n\t\t\to.push('        </table:table-row>\\n');\n\t\t}\n\t\tif((wb.Workbook||{}).Names) o.push(write_names_ods(wb.Workbook.Names, wb.SheetNames, i));\n\t\to.push('      </table:table>\\n');\n\t\treturn o.join(\"\");\n\t};\n\n\tvar write_automatic_styles_ods = function(o/*:Array<string>*/, wb) {\n\t\to.push(' <office:automatic-styles>\\n');\n\n\t\t/* column styles */\n\t\tvar cidx = 0;\n\t\twb.SheetNames.map(function(n) { return wb.Sheets[n]; }).forEach(function(ws) {\n\t\t\tif(!ws) return;\n\t\t\tif(ws[\"!cols\"]) {\n\t\t\t\tfor(var C = 0; C < ws[\"!cols\"].length; ++C) if(ws[\"!cols\"][C]) {\n\t\t\t\t\tvar colobj = ws[\"!cols\"][C];\n\t\t\t\t\tif(colobj.width == null && colobj.wpx == null && colobj.wch == null) continue;\n\t\t\t\t\tprocess_col(colobj);\n\t\t\t\t\tcolobj.ods = cidx;\n\t\t\t\t\tvar w = ws[\"!cols\"][C].wpx + \"px\";\n\t\t\t\t\to.push('  <style:style style:name=\"co' + cidx + '\" style:family=\"table-column\">\\n');\n\t\t\t\t\to.push('   <style:table-column-properties fo:break-before=\"auto\" style:column-width=\"' + w + '\"/>\\n');\n\t\t\t\t\to.push('  </style:style>\\n');\n\t\t\t\t\t++cidx;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t/* row styles */\n\t\tvar ridx = 0;\n\t\twb.SheetNames.map(function(n) { return wb.Sheets[n]; }).forEach(function(ws) {\n\t\t\tif(!ws) return;\n\t\t\tif(ws[\"!rows\"]) {\n\t\t\t\tfor(var R = 0; R < ws[\"!rows\"].length; ++R) if(ws[\"!rows\"][R]) {\n\t\t\t\t\tws[\"!rows\"][R].ods = ridx;\n\t\t\t\t\tvar h = ws[\"!rows\"][R].hpx + \"px\";\n\t\t\t\t\to.push('  <style:style style:name=\"ro' + ridx + '\" style:family=\"table-row\">\\n');\n\t\t\t\t\to.push('   <style:table-row-properties fo:break-before=\"auto\" style:row-height=\"' + h + '\"/>\\n');\n\t\t\t\t\to.push('  </style:style>\\n');\n\t\t\t\t\t++ridx;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t/* table */\n\t\to.push('  <style:style style:name=\"ta1\" style:family=\"table\" style:master-page-name=\"mp1\">\\n');\n\t\to.push('   <style:table-properties table:display=\"true\" style:writing-mode=\"lr-tb\"/>\\n');\n\t\to.push('  </style:style>\\n');\n\n\t\to.push('  <number:date-style style:name=\"N37\" number:automatic-order=\"true\">\\n');\n\t\to.push('   <number:month number:style=\"long\"/>\\n');\n\t\to.push('   <number:text>/</number:text>\\n');\n\t\to.push('   <number:day number:style=\"long\"/>\\n');\n\t\to.push('   <number:text>/</number:text>\\n');\n\t\to.push('   <number:year/>\\n');\n\t\to.push('  </number:date-style>\\n');\n\n\t\t/* number formats, table cells, text */\n\t\tvar nfs = {};\n\t\tvar nfi = 69;\n\t\twb.SheetNames.map(function(n) { return wb.Sheets[n]; }).forEach(function(ws) {\n\t\t\tif(!ws) return;\n\t\t\tvar dense = (ws[\"!data\"] != null);\n\t\t\tif(!ws[\"!ref\"]) return;\n\t\t\tvar range = decode_range(ws[\"!ref\"]);\n\t\t\tfor(var R = 0; R <= range.e.r; ++R) for(var C = 0; C <= range.e.c; ++C) {\n\t\t\t\tvar c = dense ? (ws[\"!data\"][R]||[])[C] : ws[encode_cell({r:R,c:C})];\n\t\t\t\tif(!c || !c.z || c.z.toLowerCase() == \"general\") continue;\n\t\t\t\tif(!nfs[c.z]) {\n\t\t\t\t\tvar out = write_number_format_ods(c.z, \"N\" + nfi);\n\t\t\t\t\tif(out) { nfs[c.z] = \"N\" + nfi; ++nfi; o.push(out + \"\\n\"); }\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\to.push('  <style:style style:name=\"ce1\" style:family=\"table-cell\" style:parent-style-name=\"Default\" style:data-style-name=\"N37\"/>\\n');\n\t\tkeys(nfs).forEach(function(nf) {\n\t\t\to.push('<style:style style:name=\"ce' + nfs[nf].slice(1) + '\" style:family=\"table-cell\" style:parent-style-name=\"Default\" style:data-style-name=\"' + nfs[nf] + '\"/>\\n');\n\t\t});\n\n\t\t/* page-layout */\n\n\t\to.push(' </office:automatic-styles>\\n');\n\t\treturn nfs;\n\t};\n\n\treturn function wcx(wb, opts) {\n\t\tvar o = [XML_HEADER];\n\t\t/* 3.1.3.2 */\n\t\tvar attr = wxt_helper({\n\t\t\t'xmlns:office':       \"urn:oasis:names:tc:opendocument:xmlns:office:1.0\",\n\t\t\t'xmlns:table':        \"urn:oasis:names:tc:opendocument:xmlns:table:1.0\",\n\t\t\t'xmlns:style':        \"urn:oasis:names:tc:opendocument:xmlns:style:1.0\",\n\t\t\t'xmlns:text':         \"urn:oasis:names:tc:opendocument:xmlns:text:1.0\",\n\t\t\t'xmlns:draw':         \"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0\",\n\t\t\t'xmlns:fo':           \"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0\",\n\t\t\t'xmlns:xlink':        \"http://www.w3.org/1999/xlink\",\n\t\t\t'xmlns:dc':           \"http://purl.org/dc/elements/1.1/\",\n\t\t\t'xmlns:meta':         \"urn:oasis:names:tc:opendocument:xmlns:meta:1.0\",\n\t\t\t'xmlns:number':       \"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0\",\n\t\t\t'xmlns:presentation': \"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0\",\n\t\t\t'xmlns:svg':          \"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0\",\n\t\t\t'xmlns:chart':        \"urn:oasis:names:tc:opendocument:xmlns:chart:1.0\",\n\t\t\t'xmlns:dr3d':         \"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0\",\n\t\t\t'xmlns:math':         \"http://www.w3.org/1998/Math/MathML\",\n\t\t\t'xmlns:form':         \"urn:oasis:names:tc:opendocument:xmlns:form:1.0\",\n\t\t\t'xmlns:script':       \"urn:oasis:names:tc:opendocument:xmlns:script:1.0\",\n\t\t\t'xmlns:ooo':          \"http://openoffice.org/2004/office\",\n\t\t\t'xmlns:ooow':         \"http://openoffice.org/2004/writer\",\n\t\t\t'xmlns:oooc':         \"http://openoffice.org/2004/calc\",\n\t\t\t'xmlns:dom':          \"http://www.w3.org/2001/xml-events\",\n\t\t\t'xmlns:xforms':       \"http://www.w3.org/2002/xforms\",\n\t\t\t'xmlns:xsd':          \"http://www.w3.org/2001/XMLSchema\",\n\t\t\t'xmlns:xsi':          \"http://www.w3.org/2001/XMLSchema-instance\",\n\t\t\t'xmlns:sheet':        \"urn:oasis:names:tc:opendocument:sh33tjs:1.0\",\n\t\t\t'xmlns:rpt':          \"http://openoffice.org/2005/report\",\n\t\t\t'xmlns:of':           \"urn:oasis:names:tc:opendocument:xmlns:of:1.2\",\n\t\t\t'xmlns:xhtml':        \"http://www.w3.org/1999/xhtml\",\n\t\t\t'xmlns:grddl':        \"http://www.w3.org/2003/g/data-view#\",\n\t\t\t'xmlns:tableooo':     \"http://openoffice.org/2009/table\",\n\t\t\t'xmlns:drawooo':      \"http://openoffice.org/2010/draw\",\n\t\t\t'xmlns:calcext':      \"urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0\",\n\t\t\t'xmlns:loext':        \"urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0\",\n\t\t\t'xmlns:field':        \"urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0\",\n\t\t\t'xmlns:formx':        \"urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0\",\n\t\t\t'xmlns:css3t':        \"http://www.w3.org/TR/css3-text/\",\n\t\t\t'office:version':     \"1.2\"\n\t\t});\n\n\t\tvar fods = wxt_helper({\n\t\t\t'xmlns:config':    \"urn:oasis:names:tc:opendocument:xmlns:config:1.0\",\n\t\t\t'office:mimetype': \"application/vnd.oasis.opendocument.spreadsheet\"\n\t\t});\n\n\t\tif(opts.bookType == \"fods\") {\n\t\t\to.push('<office:document' + attr + fods + '>\\n');\n\t\t\to.push(write_meta_ods().replace(/<office:document-meta[^<>]*?>/, \"\").replace(/<\\/office:document-meta>/, \"\") + \"\\n\");\n\t\t\t// TODO: settings (equiv of settings.xml for ODS)\n\t\t} else o.push('<office:document-content' + attr  + '>\\n');\n\t\t// o.push('  <office:scripts/>\\n');\n\t\tvar nfs = write_automatic_styles_ods(o, wb);\n\t\to.push('  <office:body>\\n');\n\t\to.push('    <office:spreadsheet>\\n');\n\t\tif(((wb.Workbook||{}).WBProps||{}).date1904) o.push('      <table:calculation-settings table:case-sensitive=\"false\" table:search-criteria-must-apply-to-whole-cell=\"true\" table:use-wildcards=\"true\" table:use-regular-expressions=\"false\" table:automatic-find-labels=\"false\">\\n        <table:null-date table:date-value=\"1904-01-01\"/>\\n      </table:calculation-settings>\\n');\n\t\tfor(var i = 0; i != wb.SheetNames.length; ++i) o.push(write_ws(wb.Sheets[wb.SheetNames[i]], wb, i, opts, nfs, ((wb.Workbook||{}).WBProps||{}).date1904));\n\t\tif((wb.Workbook||{}).Names) o.push(write_names_ods(wb.Workbook.Names, wb.SheetNames, -1));\n\t\to.push('    </office:spreadsheet>\\n');\n\t\to.push('  </office:body>\\n');\n\t\tif(opts.bookType == \"fods\") o.push('</office:document>');\n\t\telse o.push('</office:document-content>');\n\t\treturn o.join(\"\");\n\t};\n})();\n\nfunction write_ods(wb/*:any*/, opts/*:any*/) {\n\tif(opts.bookType == \"fods\") return write_content_ods(wb, opts);\n\n\tvar zip = zip_new();\n\tvar f = \"\";\n\n\tvar manifest/*:Array<Array<string> >*/ = [];\n\tvar rdf/*:Array<[string, string]>*/ = [];\n\n\t/* Part 3 Section 3.3 MIME Media Type */\n\tf = \"mimetype\";\n\tzip_add_file(zip, f, \"application/vnd.oasis.opendocument.spreadsheet\");\n\n\t/* Part 1 Section 2.2 Documents */\n\tf = \"content.xml\";\n\tzip_add_file(zip, f, write_content_ods(wb, opts));\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"ContentFile\"]);\n\n\t/* TODO: these are hard-coded styles to satiate excel */\n\tf = \"styles.xml\";\n\tzip_add_file(zip, f, write_styles_ods(wb, opts));\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"StylesFile\"]);\n\n\t/* TODO: this is hard-coded to satiate excel */\n\tf = \"meta.xml\";\n\tzip_add_file(zip, f, XML_HEADER + write_meta_ods(/*::wb, opts*/));\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"MetadataFile\"]);\n\n\t/* Part 3 Section 6 Metadata Manifest File */\n\tf = \"manifest.rdf\";\n\tzip_add_file(zip, f, write_rdf(rdf/*, opts*/));\n\tmanifest.push([f, \"application/rdf+xml\"]);\n\n\t/* Part 3 Section 4 Manifest File */\n\tf = \"META-INF/manifest.xml\";\n\tzip_add_file(zip, f, write_manifest(manifest/*, opts*/));\n\n\treturn zip;\n}\n\n/*! sheetjs (C) 2013-present SheetJS -- http://sheetjs.com */\nvar subarray = function() {\n  try {\n    if (typeof Uint8Array == \"undefined\")\n      return \"slice\";\n    if (typeof Uint8Array.prototype.subarray == \"undefined\")\n      return \"slice\";\n    if (typeof Buffer !== \"undefined\") {\n      if (typeof Buffer.prototype.subarray == \"undefined\")\n        return \"slice\";\n      if ((typeof Buffer.from == \"function\" ? Buffer.from([72, 62]) : new Buffer([72, 62])) instanceof Uint8Array)\n        return \"subarray\";\n      return \"slice\";\n    }\n    return \"subarray\";\n  } catch (e) {\n    return \"slice\";\n  }\n}();\nfunction u8_to_dataview(array) {\n  return new DataView(array.buffer, array.byteOffset, array.byteLength);\n}\nfunction u8str(u8) {\n  return typeof TextDecoder != \"undefined\" ? new TextDecoder().decode(u8) : utf8read(a2s(u8));\n}\nfunction stru8(str) {\n  return typeof TextEncoder != \"undefined\" ? new TextEncoder().encode(str) : s2a(utf8write(str));\n}\nfunction u8concat(u8a) {\n  var len = 0;\n  for (var i = 0; i < u8a.length; ++i)\n    len += u8a[i].length;\n  var out = new Uint8Array(len);\n  var off = 0;\n  for (i = 0; i < u8a.length; ++i) {\n    var u8 = u8a[i], L = u8.length;\n    if (L < 250) {\n      for (var j = 0; j < L; ++j)\n        out[off++] = u8[j];\n    } else {\n      out.set(u8, off);\n      off += L;\n    }\n  }\n  return out;\n}\nfunction popcnt(x) {\n  x -= x >> 1 & 1431655765;\n  x = (x & 858993459) + (x >> 2 & 858993459);\n  return (x + (x >> 4) & 252645135) * 16843009 >>> 24;\n}\nfunction readDecimal128LE(buf, offset) {\n  var exp = (buf[offset + 15] & 127) << 7 | buf[offset + 14] >> 1;\n  var mantissa = buf[offset + 14] & 1;\n  for (var j = offset + 13; j >= offset; --j)\n    mantissa = mantissa * 256 + buf[j];\n  return (buf[offset + 15] & 128 ? -mantissa : mantissa) * Math.pow(10, exp - 6176);\n}\nfunction writeDecimal128LE(buf, offset, value) {\n  var exp = Math.floor(value == 0 ? 0 : Math.LOG10E * Math.log(Math.abs(value))) + 6176 - 16;\n  var mantissa = value / Math.pow(10, exp - 6176);\n  buf[offset + 15] |= exp >> 7;\n  buf[offset + 14] |= (exp & 127) << 1;\n  for (var i = 0; mantissa >= 1; ++i, mantissa /= 256)\n    buf[offset + i] = mantissa & 255;\n  buf[offset + 15] |= value >= 0 ? 0 : 128;\n}\nfunction parse_varint49(buf, ptr) {\n  var l = ptr.l;\n  var usz = buf[l] & 127;\n  varint:\n    if (buf[l++] >= 128) {\n      usz |= (buf[l] & 127) << 7;\n      if (buf[l++] < 128)\n        break varint;\n      usz |= (buf[l] & 127) << 14;\n      if (buf[l++] < 128)\n        break varint;\n      usz |= (buf[l] & 127) << 21;\n      if (buf[l++] < 128)\n        break varint;\n      usz += (buf[l] & 127) * Math.pow(2, 28);\n      ++l;\n      if (buf[l++] < 128)\n        break varint;\n      usz += (buf[l] & 127) * Math.pow(2, 35);\n      ++l;\n      if (buf[l++] < 128)\n        break varint;\n      usz += (buf[l] & 127) * Math.pow(2, 42);\n      ++l;\n      if (buf[l++] < 128)\n        break varint;\n    }\n  ptr.l = l;\n  return usz;\n}\nfunction write_varint49(v) {\n  var usz = new Uint8Array(7);\n  usz[0] = v & 127;\n  var L = 1;\n  sz:\n    if (v > 127) {\n      usz[L - 1] |= 128;\n      usz[L] = v >> 7 & 127;\n      ++L;\n      if (v <= 16383)\n        break sz;\n      usz[L - 1] |= 128;\n      usz[L] = v >> 14 & 127;\n      ++L;\n      if (v <= 2097151)\n        break sz;\n      usz[L - 1] |= 128;\n      usz[L] = v >> 21 & 127;\n      ++L;\n      if (v <= 268435455)\n        break sz;\n      usz[L - 1] |= 128;\n      usz[L] = v / 256 >>> 21 & 127;\n      ++L;\n      if (v <= 34359738367)\n        break sz;\n      usz[L - 1] |= 128;\n      usz[L] = v / 65536 >>> 21 & 127;\n      ++L;\n      if (v <= 4398046511103)\n        break sz;\n      usz[L - 1] |= 128;\n      usz[L] = v / 16777216 >>> 21 & 127;\n      ++L;\n    }\n  return usz[subarray](0, L);\n}\nfunction parse_packed_varints(buf) {\n  var ptr = { l: 0 };\n  var out = [];\n  while (ptr.l < buf.length)\n    out.push(parse_varint49(buf, ptr));\n  return out;\n}\nfunction write_packed_varints(nums) {\n  return u8concat(nums.map(function(x) {\n    return write_varint49(x);\n  }));\n}\nfunction varint_to_i32(buf) {\n  var l = 0, i32 = buf[l] & 127;\n  if (buf[l++] < 128)\n    return i32;\n  i32 |= (buf[l] & 127) << 7;\n  if (buf[l++] < 128)\n    return i32;\n  i32 |= (buf[l] & 127) << 14;\n  if (buf[l++] < 128)\n    return i32;\n  i32 |= (buf[l] & 127) << 21;\n  if (buf[l++] < 128)\n    return i32;\n  i32 |= (buf[l] & 15) << 28;\n  return i32;\n}\nfunction varint_to_u64(buf) {\n  var l = 0, lo = buf[l] & 127, hi = 0;\n  varint:\n    if (buf[l++] >= 128) {\n      lo |= (buf[l] & 127) << 7;\n      if (buf[l++] < 128)\n        break varint;\n      lo |= (buf[l] & 127) << 14;\n      if (buf[l++] < 128)\n        break varint;\n      lo |= (buf[l] & 127) << 21;\n      if (buf[l++] < 128)\n        break varint;\n      lo |= (buf[l] & 127) << 28;\n      hi = buf[l] >> 4 & 7;\n      if (buf[l++] < 128)\n        break varint;\n      hi |= (buf[l] & 127) << 3;\n      if (buf[l++] < 128)\n        break varint;\n      hi |= (buf[l] & 127) << 10;\n      if (buf[l++] < 128)\n        break varint;\n      hi |= (buf[l] & 127) << 17;\n      if (buf[l++] < 128)\n        break varint;\n      hi |= (buf[l] & 127) << 24;\n      if (buf[l++] < 128)\n        break varint;\n      hi |= (buf[l] & 127) << 31;\n    }\n  return [lo >>> 0, hi >>> 0];\n}\nfunction parse_shallow(buf) {\n  var out = [], ptr = { l: 0 };\n  while (ptr.l < buf.length) {\n    var off = ptr.l;\n    var num = parse_varint49(buf, ptr);\n    var type = num & 7;\n    num = num / 8 | 0;\n    var data;\n    var l = ptr.l;\n    switch (type) {\n      case 0:\n        {\n          while (buf[l++] >= 128)\n            ;\n          data = buf[subarray](ptr.l, l);\n          ptr.l = l;\n        }\n        break;\n      case 1:\n        {\n          data = buf[subarray](l, l + 8);\n          ptr.l = l + 8;\n        }\n        break;\n      case 2:\n        {\n          var len = parse_varint49(buf, ptr);\n          data = buf[subarray](ptr.l, ptr.l + len);\n          ptr.l += len;\n        }\n        break;\n      case 5:\n        {\n          data = buf[subarray](l, l + 4);\n          ptr.l = l + 4;\n        }\n        break;\n      default:\n        throw new Error(\"PB Type \".concat(type, \" for Field \").concat(num, \" at offset \").concat(off));\n    }\n    var v = { data: data, type: type };\n    if (out[num] == null)\n      out[num] = [];\n    out[num].push(v);\n  }\n  return out;\n}\nfunction write_shallow(proto) {\n  var out = [];\n  proto.forEach(function(field, idx) {\n    if (idx == 0)\n      return;\n    field.forEach(function(item) {\n      if (!item.data)\n        return;\n      out.push(write_varint49(idx * 8 + item.type));\n      if (item.type == 2)\n        out.push(write_varint49(item.data.length));\n      out.push(item.data);\n    });\n  });\n  return u8concat(out);\n}\nfunction mappa(data, cb) {\n  return (data == null ? void 0 : data.map(function(d) {\n    return cb(d.data);\n  })) || [];\n}\nfunction parse_iwa_file(buf) {\n  var _a;\n  var out = [], ptr = { l: 0 };\n  while (ptr.l < buf.length) {\n    var len = parse_varint49(buf, ptr);\n    var ai = parse_shallow(buf[subarray](ptr.l, ptr.l + len));\n    ptr.l += len;\n    var res = {\n      id: varint_to_i32(ai[1][0].data),\n      messages: []\n    };\n    ai[2].forEach(function(b) {\n      var mi = parse_shallow(b.data);\n      var fl = varint_to_i32(mi[3][0].data);\n      res.messages.push({\n        meta: mi,\n        data: buf[subarray](ptr.l, ptr.l + fl)\n      });\n      ptr.l += fl;\n    });\n    if ((_a = ai[3]) == null ? void 0 : _a[0])\n      res.merge = varint_to_i32(ai[3][0].data) >>> 0 > 0;\n    out.push(res);\n  }\n  return out;\n}\nfunction write_iwa_file(ias) {\n  var bufs = [];\n  ias.forEach(function(ia) {\n    var ai = [\n      [],\n      [{ data: write_varint49(ia.id), type: 0 }],\n      []\n    ];\n    if (ia.merge != null)\n      ai[3] = [{ data: write_varint49(+!!ia.merge), type: 0 }];\n    var midata = [];\n    ia.messages.forEach(function(mi) {\n      midata.push(mi.data);\n      mi.meta[3] = [{ type: 0, data: write_varint49(mi.data.length) }];\n      ai[2].push({ data: write_shallow(mi.meta), type: 2 });\n    });\n    var aipayload = write_shallow(ai);\n    bufs.push(write_varint49(aipayload.length));\n    bufs.push(aipayload);\n    midata.forEach(function(mid) {\n      return bufs.push(mid);\n    });\n  });\n  return u8concat(bufs);\n}\nfunction parse_snappy_chunk(type, buf) {\n  if (type != 0)\n    throw new Error(\"Unexpected Snappy chunk type \".concat(type));\n  var ptr = { l: 0 };\n  var usz = parse_varint49(buf, ptr);\n  var chunks = [];\n  var l = ptr.l;\n  while (l < buf.length) {\n    var tag = buf[l] & 3;\n    if (tag == 0) {\n      var len = buf[l++] >> 2;\n      if (len < 60)\n        ++len;\n      else {\n        var c = len - 59;\n        len = buf[l];\n        if (c > 1)\n          len |= buf[l + 1] << 8;\n        if (c > 2)\n          len |= buf[l + 2] << 16;\n        if (c > 3)\n          len |= buf[l + 3] << 24;\n        len >>>= 0;\n        len++;\n        l += c;\n      }\n      chunks.push(buf[subarray](l, l + len));\n      l += len;\n      continue;\n    } else {\n      var offset = 0, length = 0;\n      if (tag == 1) {\n        length = (buf[l] >> 2 & 7) + 4;\n        offset = (buf[l++] & 224) << 3;\n        offset |= buf[l++];\n      } else {\n        length = (buf[l++] >> 2) + 1;\n        if (tag == 2) {\n          offset = buf[l] | buf[l + 1] << 8;\n          l += 2;\n        } else {\n          offset = (buf[l] | buf[l + 1] << 8 | buf[l + 2] << 16 | buf[l + 3] << 24) >>> 0;\n          l += 4;\n        }\n      }\n      if (offset == 0)\n        throw new Error(\"Invalid offset 0\");\n      var j = chunks.length - 1, off = offset;\n      while (j >= 0 && off >= chunks[j].length) {\n        off -= chunks[j].length;\n        --j;\n      }\n      if (j < 0) {\n        if (off == 0)\n          off = chunks[j = 0].length;\n        else\n          throw new Error(\"Invalid offset beyond length\");\n      }\n      if (length < off)\n        chunks.push(chunks[j][subarray](chunks[j].length - off, chunks[j].length - off + length));\n      else {\n        if (off > 0) {\n          chunks.push(chunks[j][subarray](chunks[j].length - off));\n          length -= off;\n        }\n        ++j;\n        while (length >= chunks[j].length) {\n          chunks.push(chunks[j]);\n          length -= chunks[j].length;\n          ++j;\n        }\n        if (length)\n          chunks.push(chunks[j][subarray](0, length));\n      }\n      if (chunks.length > 25)\n        chunks = [u8concat(chunks)];\n    }\n  }\n  var clen = 0;\n  for (var u8i = 0; u8i < chunks.length; ++u8i)\n    clen += chunks[u8i].length;\n  if (clen != usz)\n    throw new Error(\"Unexpected length: \".concat(clen, \" != \").concat(usz));\n  return chunks;\n}\nfunction decompress_iwa_file(buf) {\n  if (Array.isArray(buf))\n    buf = new Uint8Array(buf);\n  var out = [];\n  var l = 0;\n  while (l < buf.length) {\n    var t = buf[l++];\n    var len = buf[l] | buf[l + 1] << 8 | buf[l + 2] << 16;\n    l += 3;\n    out.push.apply(out, parse_snappy_chunk(t, buf[subarray](l, l + len)));\n    l += len;\n  }\n  if (l !== buf.length)\n    throw new Error(\"data is not a valid framed stream!\");\n  return out.length == 1 ? out[0] : u8concat(out);\n}\nfunction compress_iwa_file(buf) {\n  var out = [];\n  var l = 0;\n  while (l < buf.length) {\n    var c = Math.min(buf.length - l, 268435455);\n    var frame = new Uint8Array(4);\n    out.push(frame);\n    var usz = write_varint49(c);\n    var L = usz.length;\n    out.push(usz);\n    if (c <= 60) {\n      L++;\n      out.push(new Uint8Array([c - 1 << 2]));\n    } else if (c <= 256) {\n      L += 2;\n      out.push(new Uint8Array([240, c - 1 & 255]));\n    } else if (c <= 65536) {\n      L += 3;\n      out.push(new Uint8Array([244, c - 1 & 255, c - 1 >> 8 & 255]));\n    } else if (c <= 16777216) {\n      L += 4;\n      out.push(new Uint8Array([248, c - 1 & 255, c - 1 >> 8 & 255, c - 1 >> 16 & 255]));\n    } else if (c <= 4294967296) {\n      L += 5;\n      out.push(new Uint8Array([252, c - 1 & 255, c - 1 >> 8 & 255, c - 1 >> 16 & 255, c - 1 >>> 24 & 255]));\n    }\n    out.push(buf[subarray](l, l + c));\n    L += c;\n    frame[0] = 0;\n    frame[1] = L & 255;\n    frame[2] = L >> 8 & 255;\n    frame[3] = L >> 16 & 255;\n    l += c;\n  }\n  return u8concat(out);\n}\nvar numbers_lut_new = function() {\n  return { sst: [], rsst: [], ofmt: [], nfmt: [], fmla: [], ferr: [], cmnt: [] };\n};\nfunction numbers_format_cell(cell, t, flags, ofmt, nfmt) {\n  var _a, _b, _c, _d;\n  var ctype = t & 255, ver = t >> 8;\n  var fmt = ver >= 5 ? nfmt : ofmt;\n  dur:\n    if (flags & (ver > 4 ? 8 : 4) && cell.t == \"n\" && ctype == 7) {\n      var dstyle = ((_a = fmt[7]) == null ? void 0 : _a[0]) ? varint_to_i32(fmt[7][0].data) : -1;\n      if (dstyle == -1)\n        break dur;\n      var dmin = ((_b = fmt[15]) == null ? void 0 : _b[0]) ? varint_to_i32(fmt[15][0].data) : -1;\n      var dmax = ((_c = fmt[16]) == null ? void 0 : _c[0]) ? varint_to_i32(fmt[16][0].data) : -1;\n      var auto = ((_d = fmt[40]) == null ? void 0 : _d[0]) ? varint_to_i32(fmt[40][0].data) : -1;\n      var d = cell.v, dd = d;\n      autodur:\n        if (auto) {\n          if (d == 0) {\n            dmin = dmax = 2;\n            break autodur;\n          }\n          if (d >= 604800)\n            dmin = 1;\n          else if (d >= 86400)\n            dmin = 2;\n          else if (d >= 3600)\n            dmin = 4;\n          else if (d >= 60)\n            dmin = 8;\n          else if (d >= 1)\n            dmin = 16;\n          else\n            dmin = 32;\n          if (Math.floor(d) != d)\n            dmax = 32;\n          else if (d % 60)\n            dmax = 16;\n          else if (d % 3600)\n            dmax = 8;\n          else if (d % 86400)\n            dmax = 4;\n          else if (d % 604800)\n            dmax = 2;\n          if (dmax < dmin)\n            dmax = dmin;\n        }\n      if (dmin == -1 || dmax == -1)\n        break dur;\n      var dstr = [], zstr = [];\n      if (dmin == 1) {\n        dd = d / 604800;\n        if (dmax == 1) {\n          zstr.push('d\"d\"');\n        } else {\n          dd |= 0;\n          d -= 604800 * dd;\n        }\n        dstr.push(dd + (dstyle == 2 ? \" week\" + (dd == 1 ? \"\" : \"s\") : dstyle == 1 ? \"w\" : \"\"));\n      }\n      if (dmin <= 2 && dmax >= 2) {\n        dd = d / 86400;\n        if (dmax > 2) {\n          dd |= 0;\n          d -= 86400 * dd;\n        }\n        zstr.push('d\"d\"');\n        dstr.push(dd + (dstyle == 2 ? \" day\" + (dd == 1 ? \"\" : \"s\") : dstyle == 1 ? \"d\" : \"\"));\n      }\n      if (dmin <= 4 && dmax >= 4) {\n        dd = d / 3600;\n        if (dmax > 4) {\n          dd |= 0;\n          d -= 3600 * dd;\n        }\n        zstr.push((dmin >= 4 ? \"[h]\" : \"h\") + '\"h\"');\n        dstr.push(dd + (dstyle == 2 ? \" hour\" + (dd == 1 ? \"\" : \"s\") : dstyle == 1 ? \"h\" : \"\"));\n      }\n      if (dmin <= 8 && dmax >= 8) {\n        dd = d / 60;\n        if (dmax > 8) {\n          dd |= 0;\n          d -= 60 * dd;\n        }\n        zstr.push((dmin >= 8 ? \"[m]\" : \"m\") + '\"m\"');\n        if (dstyle == 0)\n          dstr.push((dmin == 8 && dmax == 8 || dd >= 10 ? \"\" : \"0\") + dd);\n        else\n          dstr.push(dd + (dstyle == 2 ? \" minute\" + (dd == 1 ? \"\" : \"s\") : dstyle == 1 ? \"m\" : \"\"));\n      }\n      if (dmin <= 16 && dmax >= 16) {\n        dd = d;\n        if (dmax > 16) {\n          dd |= 0;\n          d -= dd;\n        }\n        zstr.push((dmin >= 16 ? \"[s]\" : \"s\") + '\"s\"');\n        if (dstyle == 0)\n          dstr.push((dmax == 16 && dmin == 16 || dd >= 10 ? \"\" : \"0\") + dd);\n        else\n          dstr.push(dd + (dstyle == 2 ? \" second\" + (dd == 1 ? \"\" : \"s\") : dstyle == 1 ? \"s\" : \"\"));\n      }\n      if (dmax >= 32) {\n        dd = Math.round(1e3 * d);\n        if (dmin < 32)\n          zstr.push('.000\"ms\"');\n        if (dstyle == 0)\n          dstr.push((dd >= 100 ? \"\" : dd >= 10 ? \"0\" : \"00\") + dd);\n        else\n          dstr.push(dd + (dstyle == 2 ? \" millisecond\" + (dd == 1 ? \"\" : \"s\") : dstyle == 1 ? \"ms\" : \"\"));\n      }\n      cell.w = dstr.join(dstyle == 0 ? \":\" : \" \");\n      cell.z = zstr.join(dstyle == 0 ? '\":\"' : \" \");\n      if (dstyle == 0)\n        cell.w = cell.w.replace(/:(\\d\\d\\d)$/, \".$1\");\n    }\n}\nfunction parse_old_storage(buf, lut, v, opts) {\n  var dv = u8_to_dataview(buf);\n  var flags = dv.getUint32(4, true);\n  var ridx = -1, sidx = -1, zidx = -1, ieee = NaN, dc = 0, dt = new Date(Date.UTC(2001, 0, 1));\n  var doff = v > 1 ? 12 : 8;\n  if (flags & 2) {\n    zidx = dv.getUint32(doff, true);\n    doff += 4;\n  }\n  doff += popcnt(flags & (v > 1 ? 3468 : 396)) * 4;\n  if (flags & 512) {\n    ridx = dv.getUint32(doff, true);\n    doff += 4;\n  }\n  doff += popcnt(flags & (v > 1 ? 12288 : 4096)) * 4;\n  if (flags & 16) {\n    sidx = dv.getUint32(doff, true);\n    doff += 4;\n  }\n  if (flags & 32) {\n    ieee = dv.getFloat64(doff, true);\n    doff += 8;\n  }\n  if (flags & 64) {\n    dt.setTime(dt.getTime() + (dc = dv.getFloat64(doff, true)) * 1e3);\n    doff += 8;\n  }\n  if (v > 1) {\n    flags = dv.getUint32(8, true) >>> 16;\n    if (flags & 255) {\n      if (zidx == -1)\n        zidx = dv.getUint32(doff, true);\n      doff += 4;\n    }\n  }\n  var ret;\n  var t = buf[v >= 4 ? 1 : 2];\n  switch (t) {\n    case 0:\n      return void 0;\n    case 2:\n      ret = { t: \"n\", v: ieee };\n      break;\n    case 3:\n      ret = { t: \"s\", v: lut.sst[sidx] };\n      break;\n    case 5:\n      {\n        if (opts == null ? void 0 : opts.cellDates)\n          ret = { t: \"d\", v: dt };\n        else\n          ret = { t: \"n\", v: dc / 86400 + 35430, z: table_fmt[14] };\n      }\n      break;\n    case 6:\n      ret = { t: \"b\", v: ieee > 0 };\n      break;\n    case 7:\n      ret = { t: \"n\", v: ieee };\n      break;\n    case 8:\n      ret = { t: \"e\", v: 0 };\n      break;\n    case 9:\n      {\n        if (ridx > -1) {\n          var rts = lut.rsst[ridx];\n          ret = { t: \"s\", v: rts.v };\n          if (rts.l)\n            ret.l = { Target: rts.l };\n        } else\n          throw new Error(\"Unsupported cell type \".concat(buf[subarray](0, 4)));\n      }\n      break;\n    default:\n      throw new Error(\"Unsupported cell type \".concat(buf[subarray](0, 4)));\n  }\n  if (zidx > -1)\n    numbers_format_cell(ret, t | v << 8, flags, lut.ofmt[zidx], lut.nfmt[zidx]);\n  if (t == 7)\n    ret.v /= 86400;\n  return ret;\n}\nfunction parse_new_storage(buf, lut, opts) {\n  var dv = u8_to_dataview(buf);\n  var flags = dv.getUint32(4, true);\n  var fields = dv.getUint32(8, true);\n  var doff = 12;\n  var ridx = -1, sidx = -1, zidx = -1, d128 = NaN, ieee = NaN, dc = 0, dt = new Date(Date.UTC(2001, 0, 1)), eidx = -1, fidx = -1;\n  if (fields & 1) {\n    d128 = readDecimal128LE(buf, doff);\n    doff += 16;\n  }\n  if (fields & 2) {\n    ieee = dv.getFloat64(doff, true);\n    doff += 8;\n  }\n  if (fields & 4) {\n    dt.setTime(dt.getTime() + (dc = dv.getFloat64(doff, true)) * 1e3);\n    doff += 8;\n  }\n  if (fields & 8) {\n    sidx = dv.getUint32(doff, true);\n    doff += 4;\n  }\n  if (fields & 16) {\n    ridx = dv.getUint32(doff, true);\n    doff += 4;\n  }\n  doff += popcnt(fields & 480) * 4;\n  if (fields & 512) {\n    fidx = dv.getUint32(doff, true);\n    doff += 4;\n  }\n  doff += popcnt(fields & 1024) * 4;\n  if (fields & 2048) {\n    eidx = dv.getUint32(doff, true);\n    doff += 4;\n  }\n  var ret;\n  var t = buf[1];\n  switch (t) {\n    case 0:\n      ret = { t: \"z\" };\n      break;\n    case 2:\n      ret = { t: \"n\", v: d128 };\n      break;\n    case 3:\n      ret = { t: \"s\", v: lut.sst[sidx] };\n      break;\n    case 5:\n      {\n        if (opts == null ? void 0 : opts.cellDates)\n          ret = { t: \"d\", v: dt };\n        else\n          ret = { t: \"n\", v: dc / 86400 + 35430, z: table_fmt[14] };\n      }\n      break;\n    case 6:\n      ret = { t: \"b\", v: ieee > 0 };\n      break;\n    case 7:\n      ret = { t: \"n\", v: ieee };\n      break;\n    case 8:\n      ret = { t: \"e\", v: 0 };\n      break;\n    case 9:\n      {\n        if (ridx > -1) {\n          var rts = lut.rsst[ridx];\n          ret = { t: \"s\", v: rts.v };\n          if (rts.l)\n            ret.l = { Target: rts.l };\n        } else\n          throw new Error(\"Unsupported cell type \".concat(buf[1], \" : \").concat(fields & 31, \" : \").concat(buf[subarray](0, 4)));\n      }\n      break;\n    case 10:\n      ret = { t: \"n\", v: d128 };\n      break;\n    default:\n      throw new Error(\"Unsupported cell type \".concat(buf[1], \" : \").concat(fields & 31, \" : \").concat(buf[subarray](0, 4)));\n  }\n  doff += popcnt(fields & 4096) * 4;\n  if (fields & 516096) {\n    if (zidx == -1)\n      zidx = dv.getUint32(doff, true);\n    doff += 4;\n  }\n  if (fields & 524288) {\n    var cmntidx = dv.getUint32(doff, true);\n    doff += 4;\n    if (lut.cmnt[cmntidx])\n      ret.c = iwa_to_s5s_comment(lut.cmnt[cmntidx]);\n  }\n  if (zidx > -1)\n    numbers_format_cell(ret, t | 5 << 8, fields >> 13, lut.ofmt[zidx], lut.nfmt[zidx]);\n  if (t == 7)\n    ret.v /= 86400;\n  return ret;\n}\nfunction write_new_storage(cell, lut) {\n  var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, fields = 0;\n  out[0] = 5;\n  switch (cell.t) {\n    case \"n\":\n      if (cell.z && fmt_is_date(cell.z)) {\n        out[1] = 5;\n        dv.setFloat64(l, (numdate(cell.v + 1462).getTime() - Date.UTC(2001, 0, 1)) / 1e3, true);\n        fields |= 4;\n        l += 8;\n        break;\n      } else {\n        out[1] = 2;\n        writeDecimal128LE(out, l, cell.v);\n        fields |= 1;\n        l += 16;\n      }\n      break;\n    case \"b\":\n      out[1] = 6;\n      dv.setFloat64(l, cell.v ? 1 : 0, true);\n      fields |= 2;\n      l += 8;\n      break;\n    case \"s\":\n      {\n        var s = cell.v == null ? \"\" : String(cell.v);\n        if (cell.l) {\n          var irsst = lut.rsst.findIndex(function(v) {\n            var _a;\n            return v.v == s && v.l == ((_a = cell.l) == null ? void 0 : _a.Target);\n          });\n          if (irsst == -1)\n            lut.rsst[irsst = lut.rsst.length] = { v: s, l: cell.l.Target };\n          out[1] = 9;\n          dv.setUint32(l, irsst, true);\n          fields |= 16;\n          l += 4;\n        } else {\n          var isst = lut.sst.indexOf(s);\n          if (isst == -1)\n            lut.sst[isst = lut.sst.length] = s;\n          out[1] = 3;\n          dv.setUint32(l, isst, true);\n          fields |= 8;\n          l += 4;\n        }\n      }\n      break;\n    case \"d\":\n      out[1] = 5;\n      dv.setFloat64(l, (cell.v.getTime() - Date.UTC(2001, 0, 1)) / 1e3, true);\n      fields |= 4;\n      l += 8;\n      break;\n    case \"z\":\n      out[1] = 0;\n      break;\n    default:\n      throw \"unsupported cell type \" + cell.t;\n  }\n  if (cell.c) {\n    lut.cmnt.push(s5s_to_iwa_comment(cell.c));\n    dv.setUint32(l, lut.cmnt.length - 1, true);\n    fields |= 524288;\n    l += 4;\n  }\n  dv.setUint32(8, fields, true);\n  return out[subarray](0, l);\n}\nfunction write_old_storage(cell, lut) {\n  var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, fields = 0, s = \"\";\n  out[0] = 4;\n  switch (cell.t) {\n    case \"n\":\n      break;\n    case \"b\":\n      break;\n    case \"s\":\n      {\n        s = cell.v == null ? \"\" : String(cell.v);\n        if (cell.l) {\n          var irsst = lut.rsst.findIndex(function(v) {\n            var _a;\n            return v.v == s && v.l == ((_a = cell.l) == null ? void 0 : _a.Target);\n          });\n          if (irsst == -1)\n            lut.rsst[irsst = lut.rsst.length] = { v: s, l: cell.l.Target };\n          out[1] = 9;\n          dv.setUint32(l, irsst, true);\n          fields |= 512;\n          l += 4;\n        } else {\n        }\n      }\n      break;\n    case \"d\":\n      break;\n    case \"e\":\n      break;\n    case \"z\":\n      break;\n    default:\n      throw \"unsupported cell type \" + cell.t;\n  }\n  if (cell.c) {\n    dv.setUint32(l, lut.cmnt.length - 1, true);\n    fields |= 4096;\n    l += 4;\n  }\n  switch (cell.t) {\n    case \"n\":\n      out[1] = 2;\n      dv.setFloat64(l, cell.v, true);\n      fields |= 32;\n      l += 8;\n      break;\n    case \"b\":\n      out[1] = 6;\n      dv.setFloat64(l, cell.v ? 1 : 0, true);\n      fields |= 32;\n      l += 8;\n      break;\n    case \"s\":\n      {\n        s = cell.v == null ? \"\" : String(cell.v);\n        if (cell.l) {\n        } else {\n          var isst = lut.sst.indexOf(s);\n          if (isst == -1)\n            lut.sst[isst = lut.sst.length] = s;\n          out[1] = 3;\n          dv.setUint32(l, isst, true);\n          fields |= 16;\n          l += 4;\n        }\n      }\n      break;\n    case \"d\":\n      out[1] = 5;\n      dv.setFloat64(l, (cell.v.getTime() - Date.UTC(2001, 0, 1)) / 1e3, true);\n      fields |= 64;\n      l += 8;\n      break;\n    case \"z\":\n      out[1] = 0;\n      break;\n    default:\n      throw \"unsupported cell type \" + cell.t;\n  }\n  dv.setUint32(8, fields, true);\n  return out[subarray](0, l);\n}\nfunction parse_cell_storage(buf, lut, opts) {\n  switch (buf[0]) {\n    case 0:\n    case 1:\n    case 2:\n    case 3:\n    case 4:\n      return parse_old_storage(buf, lut, buf[0], opts);\n    case 5:\n      return parse_new_storage(buf, lut, opts);\n    default:\n      throw new Error(\"Unsupported payload version \".concat(buf[0]));\n  }\n}\nfunction parse_TSP_Reference(buf) {\n  var pb = parse_shallow(buf);\n  return varint_to_i32(pb[1][0].data);\n}\nfunction write_TSP_Reference(idx) {\n  return write_shallow([\n    [],\n    [{ type: 0, data: write_varint49(idx) }]\n  ]);\n}\nfunction numbers_add_oref(iwa, ref) {\n  var _a;\n  var orefs = ((_a = iwa.messages[0].meta[5]) == null ? void 0 : _a[0]) ? parse_packed_varints(iwa.messages[0].meta[5][0].data) : [];\n  var orefidx = orefs.indexOf(ref);\n  if (orefidx == -1) {\n    orefs.push(ref);\n    iwa.messages[0].meta[5] = [{ type: 2, data: write_packed_varints(orefs) }];\n  }\n}\nfunction numbers_del_oref(iwa, ref) {\n  var _a;\n  var orefs = ((_a = iwa.messages[0].meta[5]) == null ? void 0 : _a[0]) ? parse_packed_varints(iwa.messages[0].meta[5][0].data) : [];\n  iwa.messages[0].meta[5] = [{ type: 2, data: write_packed_varints(orefs.filter(function(r) {\n    return r != ref;\n  })) }];\n}\nfunction parse_TST_TableDataList(M, root) {\n  var pb = parse_shallow(root.data);\n  var type = varint_to_i32(pb[1][0].data);\n  var entries = pb[3];\n  var data = [];\n  (entries || []).forEach(function(entry) {\n    var _a, _b;\n    var le = parse_shallow(entry.data);\n    if (!le[1])\n      return;\n    var key = varint_to_i32(le[1][0].data) >>> 0;\n    switch (type) {\n      case 1:\n        data[key] = u8str(le[3][0].data);\n        break;\n      case 8:\n        {\n          var rt = M[parse_TSP_Reference(le[9][0].data)][0];\n          var rtp = parse_shallow(rt.data);\n          var rtpref = M[parse_TSP_Reference(rtp[1][0].data)][0];\n          var mtype = varint_to_i32(rtpref.meta[1][0].data);\n          if (mtype != 2001)\n            throw new Error(\"2000 unexpected reference to \".concat(mtype));\n          var tswpsa = parse_shallow(rtpref.data);\n          var richtext = { v: tswpsa[3].map(function(x) {\n            return u8str(x.data);\n          }).join(\"\") };\n          data[key] = richtext;\n          sfields:\n            if ((_a = tswpsa == null ? void 0 : tswpsa[11]) == null ? void 0 : _a[0]) {\n              var smartfields = (_b = parse_shallow(tswpsa[11][0].data)) == null ? void 0 : _b[1];\n              if (!smartfields)\n                break sfields;\n              smartfields.forEach(function(sf) {\n                var _a2, _b2, _c;\n                var attr = parse_shallow(sf.data);\n                if ((_a2 = attr[2]) == null ? void 0 : _a2[0]) {\n                  var obj = M[parse_TSP_Reference((_b2 = attr[2]) == null ? void 0 : _b2[0].data)][0];\n                  var objtype = varint_to_i32(obj.meta[1][0].data);\n                  switch (objtype) {\n                    case 2032:\n                      var hlink = parse_shallow(obj.data);\n                      if (((_c = hlink == null ? void 0 : hlink[2]) == null ? void 0 : _c[0]) && !richtext.l)\n                        richtext.l = u8str(hlink[2][0].data);\n                      break;\n                    case 2039:\n                      break;\n                    default:\n                      console.log(\"unrecognized ObjectAttribute type \".concat(objtype));\n                  }\n                }\n              });\n            }\n        }\n        break;\n      case 2:\n        data[key] = parse_shallow(le[6][0].data);\n        break;\n      case 3:\n        data[key] = parse_shallow(le[5][0].data);\n        break;\n      case 10:\n        {\n          var cs = M[parse_TSP_Reference(le[10][0].data)][0];\n          data[key] = parse_TSD_CommentStorageArchive(M, cs.data);\n        }\n        break;\n      default:\n        throw type;\n    }\n  });\n  return data;\n}\nfunction parse_TST_TileRowInfo(u8, type) {\n  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;\n  var pb = parse_shallow(u8);\n  var R = varint_to_i32(pb[1][0].data) >>> 0;\n  var cnt = varint_to_i32(pb[2][0].data) >>> 0;\n  var wide_offsets = ((_b = (_a = pb[8]) == null ? void 0 : _a[0]) == null ? void 0 : _b.data) && varint_to_i32(pb[8][0].data) > 0 || false;\n  var used_storage_u8, used_storage;\n  if (((_d = (_c = pb[7]) == null ? void 0 : _c[0]) == null ? void 0 : _d.data) && type != 0) {\n    used_storage_u8 = (_f = (_e = pb[7]) == null ? void 0 : _e[0]) == null ? void 0 : _f.data;\n    used_storage = (_h = (_g = pb[6]) == null ? void 0 : _g[0]) == null ? void 0 : _h.data;\n  } else if (((_j = (_i = pb[4]) == null ? void 0 : _i[0]) == null ? void 0 : _j.data) && type != 1) {\n    used_storage_u8 = (_l = (_k = pb[4]) == null ? void 0 : _k[0]) == null ? void 0 : _l.data;\n    used_storage = (_n = (_m = pb[3]) == null ? void 0 : _m[0]) == null ? void 0 : _n.data;\n  } else\n    throw \"NUMBERS Tile missing \".concat(type, \" cell storage\");\n  var width = wide_offsets ? 4 : 1;\n  var used_storage_offsets = u8_to_dataview(used_storage_u8);\n  var offsets = [];\n  for (var C = 0; C < used_storage_u8.length / 2; ++C) {\n    var off = used_storage_offsets.getUint16(C * 2, true);\n    if (off < 65535)\n      offsets.push([C, off]);\n  }\n  if (offsets.length != cnt)\n    throw \"Expected \".concat(cnt, \" cells, found \").concat(offsets.length);\n  var cells = [];\n  for (C = 0; C < offsets.length - 1; ++C)\n    cells[offsets[C][0]] = used_storage[subarray](offsets[C][1] * width, offsets[C + 1][1] * width);\n  if (offsets.length >= 1)\n    cells[offsets[offsets.length - 1][0]] = used_storage[subarray](offsets[offsets.length - 1][1] * width);\n  return { R: R, cells: cells };\n}\nfunction parse_TST_Tile(M, root) {\n  var _a;\n  var pb = parse_shallow(root.data);\n  var storage = -1;\n  if ((_a = pb == null ? void 0 : pb[7]) == null ? void 0 : _a[0]) {\n    if (varint_to_i32(pb[7][0].data) >>> 0)\n      storage = 1;\n    else\n      storage = 0;\n  }\n  var ri = mappa(pb[5], function(u8) {\n    return parse_TST_TileRowInfo(u8, storage);\n  });\n  return {\n    nrows: varint_to_i32(pb[4][0].data) >>> 0,\n    data: ri.reduce(function(acc, x) {\n      if (!acc[x.R])\n        acc[x.R] = [];\n      x.cells.forEach(function(cell, C) {\n        if (acc[x.R][C])\n          throw new Error(\"Duplicate cell r=\".concat(x.R, \" c=\").concat(C));\n        acc[x.R][C] = cell;\n      });\n      return acc;\n    }, [])\n  };\n}\nfunction parse_TSD_CommentStorageArchive(M, data) {\n  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;\n  var out = { t: \"\", a: \"\" };\n  var csp = parse_shallow(data);\n  if ((_b = (_a = csp == null ? void 0 : csp[1]) == null ? void 0 : _a[0]) == null ? void 0 : _b.data)\n    out.t = u8str((_d = (_c = csp == null ? void 0 : csp[1]) == null ? void 0 : _c[0]) == null ? void 0 : _d.data) || \"\";\n  if ((_f = (_e = csp == null ? void 0 : csp[3]) == null ? void 0 : _e[0]) == null ? void 0 : _f.data) {\n    var as = M[parse_TSP_Reference((_h = (_g = csp == null ? void 0 : csp[3]) == null ? void 0 : _g[0]) == null ? void 0 : _h.data)][0];\n    var asp = parse_shallow(as.data);\n    if ((_j = (_i = asp[1]) == null ? void 0 : _i[0]) == null ? void 0 : _j.data)\n      out.a = u8str(asp[1][0].data);\n  }\n  if (csp == null ? void 0 : csp[4]) {\n    out.replies = [];\n    csp[4].forEach(function(pi) {\n      var cs = M[parse_TSP_Reference(pi.data)][0];\n      out.replies.push(parse_TSD_CommentStorageArchive(M, cs.data));\n    });\n  }\n  return out;\n}\nfunction iwa_to_s5s_comment(iwa) {\n  var out = [];\n  out.push({ t: iwa.t || \"\", a: iwa.a, T: iwa.replies && iwa.replies.length > 0 });\n  if (iwa.replies)\n    iwa.replies.forEach(function(reply) {\n      out.push({ t: reply.t || \"\", a: reply.a, T: true });\n    });\n  return out;\n}\nfunction s5s_to_iwa_comment(s5s) {\n  var out = { a: \"\", t: \"\", replies: [] };\n  for (var i = 0; i < s5s.length; ++i) {\n    if (i == 0) {\n      out.a = s5s[i].a;\n      out.t = s5s[i].t;\n    } else {\n      out.replies.push({ a: s5s[i].a, t: s5s[i].t });\n    }\n  }\n  return out;\n}\nfunction parse_TST_TableModelArchive(M, root, ws, opts) {\n  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;\n  var pb = parse_shallow(root.data);\n  var range = { s: { r: 0, c: 0 }, e: { r: 0, c: 0 } };\n  range.e.r = (varint_to_i32(pb[6][0].data) >>> 0) - 1;\n  if (range.e.r < 0)\n    throw new Error(\"Invalid row varint \".concat(pb[6][0].data));\n  range.e.c = (varint_to_i32(pb[7][0].data) >>> 0) - 1;\n  if (range.e.c < 0)\n    throw new Error(\"Invalid col varint \".concat(pb[7][0].data));\n  ws[\"!ref\"] = encode_range(range);\n  var dense = ws[\"!data\"] != null, dws = ws;\n  var store = parse_shallow(pb[4][0].data);\n  var lut = numbers_lut_new();\n  if ((_a = store[4]) == null ? void 0 : _a[0])\n    lut.sst = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[4][0].data)][0]);\n  if ((_b = store[6]) == null ? void 0 : _b[0])\n    lut.fmla = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[6][0].data)][0]);\n  if ((_c = store[11]) == null ? void 0 : _c[0])\n    lut.ofmt = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[11][0].data)][0]);\n  if ((_d = store[12]) == null ? void 0 : _d[0])\n    lut.ferr = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[12][0].data)][0]);\n  if ((_e = store[17]) == null ? void 0 : _e[0])\n    lut.rsst = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[17][0].data)][0]);\n  if ((_f = store[19]) == null ? void 0 : _f[0])\n    lut.cmnt = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[19][0].data)][0]);\n  if ((_g = store[22]) == null ? void 0 : _g[0])\n    lut.nfmt = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[22][0].data)][0]);\n  var tile = parse_shallow(store[3][0].data);\n  var _R = 0;\n  if (!((_h = store[9]) == null ? void 0 : _h[0]))\n    throw \"NUMBERS file missing row tree\";\n  var rtt = parse_shallow(store[9][0].data)[1].map(function(p) {\n    return parse_shallow(p.data);\n  });\n  rtt.forEach(function(kv) {\n    _R = varint_to_i32(kv[1][0].data);\n    var tidx = varint_to_i32(kv[2][0].data);\n    var t = tile[1][tidx];\n    if (!t)\n      throw \"NUMBERS missing tile \" + tidx;\n    var tl = parse_shallow(t.data);\n    var ref2 = M[parse_TSP_Reference(tl[2][0].data)][0];\n    var mtype2 = varint_to_i32(ref2.meta[1][0].data);\n    if (mtype2 != 6002)\n      throw new Error(\"6001 unexpected reference to \".concat(mtype2));\n    var _tile = parse_TST_Tile(M, ref2);\n    _tile.data.forEach(function(row, R) {\n      row.forEach(function(buf, C) {\n        var res = parse_cell_storage(buf, lut, opts);\n        if (res) {\n          if (dense) {\n            if (!dws[\"!data\"][_R + R])\n              dws[\"!data\"][_R + R] = [];\n            dws[\"!data\"][_R + R][C] = res;\n          } else {\n            ws[encode_col(C) + encode_row(_R + R)] = res;\n          }\n        }\n      });\n    });\n    _R += _tile.nrows;\n  });\n  if ((_i = store[13]) == null ? void 0 : _i[0]) {\n    var ref = M[parse_TSP_Reference(store[13][0].data)][0];\n    var mtype = varint_to_i32(ref.meta[1][0].data);\n    if (mtype != 6144)\n      throw new Error(\"Expected merge type 6144, found \".concat(mtype));\n    ws[\"!merges\"] = (_j = parse_shallow(ref.data)) == null ? void 0 : _j[1].map(function(pi) {\n      var merge = parse_shallow(pi.data);\n      var origin = u8_to_dataview(parse_shallow(merge[1][0].data)[1][0].data), size = u8_to_dataview(parse_shallow(merge[2][0].data)[1][0].data);\n      return {\n        s: { r: origin.getUint16(0, true), c: origin.getUint16(2, true) },\n        e: {\n          r: origin.getUint16(0, true) + size.getUint16(0, true) - 1,\n          c: origin.getUint16(2, true) + size.getUint16(2, true) - 1\n        }\n      };\n    });\n  }\n}\nfunction parse_TST_TableInfoArchive(M, root, opts) {\n  var pb = parse_shallow(root.data);\n  var out = { \"!ref\": \"A1\" };\n  if (opts == null ? void 0 : opts.dense)\n    out[\"!data\"] = [];\n  var tableref = M[parse_TSP_Reference(pb[2][0].data)];\n  var mtype = varint_to_i32(tableref[0].meta[1][0].data);\n  if (mtype != 6001)\n    throw new Error(\"6000 unexpected reference to \".concat(mtype));\n  parse_TST_TableModelArchive(M, tableref[0], out, opts);\n  return out;\n}\nfunction parse_TN_SheetArchive(M, root, opts) {\n  var _a;\n  var pb = parse_shallow(root.data);\n  var out = {\n    name: ((_a = pb[1]) == null ? void 0 : _a[0]) ? u8str(pb[1][0].data) : \"\",\n    sheets: []\n  };\n  var shapeoffs = mappa(pb[2], parse_TSP_Reference);\n  shapeoffs.forEach(function(off) {\n    M[off].forEach(function(m) {\n      var mtype = varint_to_i32(m.meta[1][0].data);\n      if (mtype == 6e3)\n        out.sheets.push(parse_TST_TableInfoArchive(M, m, opts));\n    });\n  });\n  return out;\n}\nfunction parse_TN_DocumentArchive(M, root, opts) {\n  var _a;\n  var out = book_new();\n  out.Workbook = { WBProps: { date1904: true } };\n  var pb = parse_shallow(root.data);\n  if ((_a = pb[2]) == null ? void 0 : _a[0])\n    throw new Error(\"Keynote presentations are not supported\");\n  var sheetoffs = mappa(pb[1], parse_TSP_Reference);\n  sheetoffs.forEach(function(off) {\n    M[off].forEach(function(m) {\n      var mtype = varint_to_i32(m.meta[1][0].data);\n      if (mtype == 2) {\n        var root2 = parse_TN_SheetArchive(M, m, opts);\n        root2.sheets.forEach(function(sheet, idx) {\n          book_append_sheet(out, sheet, idx == 0 ? root2.name : root2.name + \"_\" + idx, true);\n        });\n      }\n    });\n  });\n  if (out.SheetNames.length == 0)\n    throw new Error(\"Empty NUMBERS file\");\n  out.bookType = \"numbers\";\n  return out;\n}\nfunction parse_numbers_iwa(cfb, opts) {\n  var _a, _b, _c, _d, _e, _f, _g;\n  var M = {}, indices = [];\n  cfb.FullPaths.forEach(function(p) {\n    if (p.match(/\\.iwpv2/))\n      throw new Error(\"Unsupported password protection\");\n  });\n  cfb.FileIndex.forEach(function(s) {\n    if (!s.name.match(/\\.iwa$/))\n      return;\n    if (s.content[0] != 0)\n      return;\n    var o;\n    try {\n      o = decompress_iwa_file(s.content);\n    } catch (e) {\n      return console.log(\"?? \" + s.content.length + \" \" + (e.message || e));\n    }\n    var packets;\n    try {\n      packets = parse_iwa_file(o);\n    } catch (e) {\n      return console.log(\"## \" + (e.message || e));\n    }\n    packets.forEach(function(packet) {\n      M[packet.id] = packet.messages;\n      indices.push(packet.id);\n    });\n  });\n  if (!indices.length)\n    throw new Error(\"File has no messages\");\n  if (((_c = (_b = (_a = M == null ? void 0 : M[1]) == null ? void 0 : _a[0].meta) == null ? void 0 : _b[1]) == null ? void 0 : _c[0].data) && varint_to_i32(M[1][0].meta[1][0].data) == 1e4)\n    throw new Error(\"Pages documents are not supported\");\n  var docroot = ((_g = (_f = (_e = (_d = M == null ? void 0 : M[1]) == null ? void 0 : _d[0]) == null ? void 0 : _e.meta) == null ? void 0 : _f[1]) == null ? void 0 : _g[0].data) && varint_to_i32(M[1][0].meta[1][0].data) == 1 && M[1][0];\n  if (!docroot)\n    indices.forEach(function(idx) {\n      M[idx].forEach(function(iwam) {\n        var mtype = varint_to_i32(iwam.meta[1][0].data) >>> 0;\n        if (mtype == 1) {\n          if (!docroot)\n            docroot = iwam;\n          else\n            throw new Error(\"Document has multiple roots\");\n        }\n      });\n    });\n  if (!docroot)\n    throw new Error(\"Cannot find Document root\");\n  return parse_TN_DocumentArchive(M, docroot, opts);\n}\nfunction write_TST_TileRowInfo(data, lut, wide) {\n  var _a, _b, _c;\n  var tri = [\n    [],\n    [{ type: 0, data: write_varint49(0) }],\n    [{ type: 0, data: write_varint49(0) }],\n    [{ type: 2, data: new Uint8Array([]) }],\n    [{ type: 2, data: new Uint8Array(Array.from({ length: 510 }, function() {\n      return 255;\n    })) }],\n    [{ type: 0, data: write_varint49(5) }],\n    [{ type: 2, data: new Uint8Array([]) }],\n    [{ type: 2, data: new Uint8Array(Array.from({ length: 510 }, function() {\n      return 255;\n    })) }],\n    [{ type: 0, data: write_varint49(1) }]\n  ];\n  if (!((_a = tri[6]) == null ? void 0 : _a[0]) || !((_b = tri[7]) == null ? void 0 : _b[0]))\n    throw \"Mutation only works on post-BNC storages!\";\n  var cnt = 0;\n  if (tri[7][0].data.length < 2 * data.length) {\n    var new_7 = new Uint8Array(2 * data.length);\n    new_7.set(tri[7][0].data);\n    tri[7][0].data = new_7;\n  }\n  if (tri[4][0].data.length < 2 * data.length) {\n    var new_4 = new Uint8Array(2 * data.length);\n    new_4.set(tri[4][0].data);\n    tri[4][0].data = new_4;\n  }\n  var dv = u8_to_dataview(tri[7][0].data), last_offset = 0, cell_storage = [];\n  var _dv = u8_to_dataview(tri[4][0].data), _last_offset = 0, _cell_storage = [];\n  var width = wide ? 4 : 1;\n  for (var C = 0; C < data.length; ++C) {\n    if (data[C] == null || data[C].t == \"z\" && !((_c = data[C].c) == null ? void 0 : _c.length) || data[C].t == \"e\") {\n      dv.setUint16(C * 2, 65535, true);\n      _dv.setUint16(C * 2, 65535);\n      continue;\n    }\n    dv.setUint16(C * 2, last_offset / width, true);\n    _dv.setUint16(C * 2, _last_offset / width, true);\n    var celload, _celload;\n    switch (data[C].t) {\n      case \"d\":\n        if (data[C].v instanceof Date) {\n          celload = write_new_storage(data[C], lut);\n          _celload = write_old_storage(data[C], lut);\n          break;\n        }\n        celload = write_new_storage(data[C], lut);\n        _celload = write_old_storage(data[C], lut);\n        break;\n      case \"s\":\n      case \"n\":\n      case \"b\":\n      case \"z\":\n        celload = write_new_storage(data[C], lut);\n        _celload = write_old_storage(data[C], lut);\n        break;\n      default:\n        throw new Error(\"Unsupported value \" + data[C]);\n    }\n    cell_storage.push(celload);\n    last_offset += celload.length;\n    {\n      _cell_storage.push(_celload);\n      _last_offset += _celload.length;\n    }\n    ++cnt;\n  }\n  tri[2][0].data = write_varint49(cnt);\n  tri[5][0].data = write_varint49(5);\n  for (; C < tri[7][0].data.length / 2; ++C) {\n    dv.setUint16(C * 2, 65535, true);\n    _dv.setUint16(C * 2, 65535, true);\n  }\n  tri[6][0].data = u8concat(cell_storage);\n  tri[3][0].data = u8concat(_cell_storage);\n  tri[8] = [{ type: 0, data: write_varint49(wide ? 1 : 0) }];\n  return tri;\n}\nfunction write_iwam(type, payload) {\n  return {\n    meta: [\n      [],\n      [{ type: 0, data: write_varint49(type) }]\n    ],\n    data: payload\n  };\n}\nfunction get_unique_msgid(dep, dependents) {\n  if (!dependents.last)\n    dependents.last = 927262;\n  for (var i = dependents.last; i < 2e6; ++i)\n    if (!dependents[i]) {\n      dependents[dependents.last = i] = dep;\n      return i;\n    }\n  throw new Error(\"Too many messages\");\n}\nfunction build_numbers_deps(cfb) {\n  var dependents = {};\n  var indices = [];\n  cfb.FileIndex.map(function(fi, idx) {\n    return [fi, cfb.FullPaths[idx]];\n  }).forEach(function(row) {\n    var fi = row[0], fp = row[1];\n    if (fi.type != 2)\n      return;\n    if (!fi.name.match(/\\.iwa/))\n      return;\n    if (fi.content[0] != 0)\n      return;\n    parse_iwa_file(decompress_iwa_file(fi.content)).forEach(function(packet) {\n      indices.push(packet.id);\n      dependents[packet.id] = { deps: [], location: fp, type: varint_to_i32(packet.messages[0].meta[1][0].data) };\n    });\n  });\n  cfb.FileIndex.forEach(function(fi) {\n    if (!fi.name.match(/\\.iwa/))\n      return;\n    if (fi.content[0] != 0)\n      return;\n    parse_iwa_file(decompress_iwa_file(fi.content)).forEach(function(ia) {\n      ia.messages.forEach(function(mess) {\n        [5, 6].forEach(function(f) {\n          if (!mess.meta[f])\n            return;\n          mess.meta[f].forEach(function(x) {\n            dependents[ia.id].deps.push(varint_to_i32(x.data));\n          });\n        });\n      });\n    });\n  });\n  return dependents;\n}\nfunction write_TSP_Color_RGB(r, g, b) {\n  return write_shallow([\n    [],\n    [{ type: 0, data: write_varint49(1) }],\n    [],\n    [{ type: 5, data: new Uint8Array(Float32Array.from([r / 255]).buffer) }],\n    [{ type: 5, data: new Uint8Array(Float32Array.from([g / 255]).buffer) }],\n    [{ type: 5, data: new Uint8Array(Float32Array.from([b / 255]).buffer) }],\n    [{ type: 5, data: new Uint8Array(Float32Array.from([1]).buffer) }],\n    [],\n    [],\n    [],\n    [],\n    [],\n    [{ type: 0, data: write_varint49(1) }]\n  ]);\n}\nfunction get_author_color(n) {\n  switch (n) {\n    case 0:\n      return write_TSP_Color_RGB(99, 222, 171);\n    case 1:\n      return write_TSP_Color_RGB(162, 197, 240);\n    case 2:\n      return write_TSP_Color_RGB(255, 189, 189);\n  }\n  return write_TSP_Color_RGB(Math.random() * 255, Math.random() * 255, Math.random() * 255);\n}\nfunction write_numbers_iwa(wb, opts) {\n  if (!opts || !opts.numbers)\n    throw new Error(\"Must pass a `numbers` option -- check the README\");\n  var cfb = CFB.read(opts.numbers, { type: \"base64\" });\n  var deps = build_numbers_deps(cfb);\n  var docroot = numbers_iwa_find(cfb, deps, 1);\n  if (docroot == null)\n    throw \"Could not find message \".concat(1, \" in Numbers template\");\n  var sheetrefs = mappa(parse_shallow(docroot.messages[0].data)[1], parse_TSP_Reference);\n  if (sheetrefs.length > 1)\n    throw new Error(\"Template NUMBERS file must have exactly one sheet\");\n  wb.SheetNames.forEach(function(name, idx) {\n    if (idx >= 1) {\n      numbers_add_ws(cfb, deps, idx + 1);\n      docroot = numbers_iwa_find(cfb, deps, 1);\n      sheetrefs = mappa(parse_shallow(docroot.messages[0].data)[1], parse_TSP_Reference);\n    }\n    write_numbers_ws(cfb, deps, wb.Sheets[name], name, idx, sheetrefs[idx]);\n  });\n  return cfb;\n}\nfunction numbers_iwa_doit(cfb, deps, id, cb) {\n  var entry = CFB.find(cfb, deps[id].location);\n  if (!entry)\n    throw \"Could not find \".concat(deps[id].location, \" in Numbers template\");\n  var x = parse_iwa_file(decompress_iwa_file(entry.content));\n  var ainfo = x.find(function(packet) {\n    return packet.id == id;\n  });\n  cb(ainfo, x);\n  entry.content = compress_iwa_file(write_iwa_file(x));\n  entry.size = entry.content.length;\n}\nfunction numbers_iwa_find(cfb, deps, id) {\n  var entry = CFB.find(cfb, deps[id].location);\n  if (!entry)\n    throw \"Could not find \".concat(deps[id].location, \" in Numbers template\");\n  var x = parse_iwa_file(decompress_iwa_file(entry.content));\n  var ainfo = x.find(function(packet) {\n    return packet.id == id;\n  });\n  return ainfo;\n}\nfunction numbers_add_meta(mlist, newid, newloc) {\n  mlist[3].push({ type: 2, data: write_shallow([\n    [],\n    [{ type: 0, data: write_varint49(newid) }],\n    [{ type: 2, data: stru8(newloc.replace(/-[\\s\\S]*$/, \"\")) }],\n    [{ type: 2, data: stru8(newloc) }],\n    [{ type: 2, data: new Uint8Array([2, 0, 0]) }],\n    [{ type: 2, data: new Uint8Array([2, 0, 0]) }],\n    [],\n    [],\n    [],\n    [],\n    [{ type: 0, data: write_varint49(0) }],\n    [],\n    [{ type: 0, data: write_varint49(0) }]\n  ]) });\n  mlist[1] = [{ type: 0, data: write_varint49(Math.max(newid + 1, varint_to_i32(mlist[1][0].data))) }];\n}\nfunction numbers_add_msg(cfb, type, msg, path, deps, id) {\n  if (!id)\n    id = get_unique_msgid({ deps: [], location: \"\", type: type }, deps);\n  var loc = \"\".concat(path, \"-\").concat(id, \".iwa\");\n  deps[id].location = \"Root Entry\" + loc;\n  CFB.utils.cfb_add(cfb, loc, compress_iwa_file(write_iwa_file([{\n    id: id,\n    messages: [write_iwam(type, write_shallow(msg))]\n  }])));\n  var newloc = loc.replace(/^[\\/]/, \"\").replace(/^Index\\//, \"\").replace(/\\.iwa$/, \"\");\n  numbers_iwa_doit(cfb, deps, 2, function(ai) {\n    var mlist = parse_shallow(ai.messages[0].data);\n    numbers_add_meta(mlist, id || 0, newloc);\n    ai.messages[0].data = write_shallow(mlist);\n  });\n  return id;\n}\nfunction numbers_meta_add_dep(mlist, deps, id, dep) {\n  var loc = deps[id].location.replace(/^Root Entry\\//, \"\").replace(/^Index\\//, \"\").replace(/\\.iwa$/, \"\");\n  var parentidx = mlist[3].findIndex(function(m) {\n    var _a, _b;\n    var mm = parse_shallow(m.data);\n    if ((_a = mm[3]) == null ? void 0 : _a[0])\n      return u8str(mm[3][0].data) == loc;\n    if (((_b = mm[2]) == null ? void 0 : _b[0]) && u8str(mm[2][0].data) == loc)\n      return true;\n    return false;\n  });\n  var parent = parse_shallow(mlist[3][parentidx].data);\n  if (!parent[6])\n    parent[6] = [];\n  (Array.isArray(dep) ? dep : [dep]).forEach(function(dep2) {\n    parent[6].push({\n      type: 2,\n      data: write_shallow([\n        [],\n        [{ type: 0, data: write_varint49(dep2) }]\n      ])\n    });\n  });\n  mlist[3][parentidx].data = write_shallow(parent);\n}\nfunction numbers_meta_del_dep(mlist, deps, id, dep) {\n  var loc = deps[id].location.replace(/^Root Entry\\//, \"\").replace(/^Index\\//, \"\").replace(/\\.iwa$/, \"\");\n  var parentidx = mlist[3].findIndex(function(m) {\n    var _a, _b;\n    var mm = parse_shallow(m.data);\n    if ((_a = mm[3]) == null ? void 0 : _a[0])\n      return u8str(mm[3][0].data) == loc;\n    if (((_b = mm[2]) == null ? void 0 : _b[0]) && u8str(mm[2][0].data) == loc)\n      return true;\n    return false;\n  });\n  var parent = parse_shallow(mlist[3][parentidx].data);\n  if (!parent[6])\n    parent[6] = [];\n  parent[6] = parent[6].filter(function(m) {\n    return varint_to_i32(parse_shallow(m.data)[1][0].data) != dep;\n  });\n  mlist[3][parentidx].data = write_shallow(parent);\n}\nfunction numbers_add_ws(cfb, deps, wsidx) {\n  var sheetref = -1, newsheetref = -1;\n  var remap = {};\n  numbers_iwa_doit(cfb, deps, 1, function(docroot, arch) {\n    var doc = parse_shallow(docroot.messages[0].data);\n    sheetref = parse_TSP_Reference(parse_shallow(docroot.messages[0].data)[1][0].data);\n    newsheetref = get_unique_msgid({ deps: [1], location: deps[sheetref].location, type: 2 }, deps);\n    remap[sheetref] = newsheetref;\n    numbers_add_oref(docroot, newsheetref);\n    doc[1].push({ type: 2, data: write_TSP_Reference(newsheetref) });\n    var sheet = numbers_iwa_find(cfb, deps, sheetref);\n    sheet.id = newsheetref;\n    if (deps[1].location == deps[newsheetref].location)\n      arch.push(sheet);\n    else\n      numbers_iwa_doit(cfb, deps, newsheetref, function(_, x) {\n        return x.push(sheet);\n      });\n    docroot.messages[0].data = write_shallow(doc);\n  });\n  var tiaref = -1;\n  numbers_iwa_doit(cfb, deps, newsheetref, function(sheetroot, arch) {\n    var sa = parse_shallow(sheetroot.messages[0].data);\n    for (var i = 3; i <= 69; ++i)\n      delete sa[i];\n    var drawables = mappa(sa[2], parse_TSP_Reference);\n    drawables.forEach(function(n) {\n      return numbers_del_oref(sheetroot, n);\n    });\n    tiaref = get_unique_msgid({ deps: [newsheetref], location: deps[drawables[0]].location, type: deps[drawables[0]].type }, deps);\n    numbers_add_oref(sheetroot, tiaref);\n    remap[drawables[0]] = tiaref;\n    sa[2] = [{ type: 2, data: write_TSP_Reference(tiaref) }];\n    var tia = numbers_iwa_find(cfb, deps, drawables[0]);\n    tia.id = tiaref;\n    if (deps[drawables[0]].location == deps[newsheetref].location)\n      arch.push(tia);\n    else {\n      numbers_iwa_doit(cfb, deps, 2, function(ai) {\n        var mlist = parse_shallow(ai.messages[0].data);\n        numbers_meta_add_dep(mlist, deps, newsheetref, tiaref);\n        ai.messages[0].data = write_shallow(mlist);\n      });\n      numbers_iwa_doit(cfb, deps, tiaref, function(_, x) {\n        return x.push(tia);\n      });\n    }\n    sheetroot.messages[0].data = write_shallow(sa);\n  });\n  var tmaref = -1;\n  numbers_iwa_doit(cfb, deps, tiaref, function(tiaroot, arch) {\n    var tia = parse_shallow(tiaroot.messages[0].data);\n    var da = parse_shallow(tia[1][0].data);\n    for (var i = 3; i <= 69; ++i)\n      delete da[i];\n    var dap = parse_TSP_Reference(da[2][0].data);\n    da[2][0].data = write_TSP_Reference(remap[dap]);\n    tia[1][0].data = write_shallow(da);\n    var oldtmaref = parse_TSP_Reference(tia[2][0].data);\n    numbers_del_oref(tiaroot, oldtmaref);\n    tmaref = get_unique_msgid({ deps: [tiaref], location: deps[oldtmaref].location, type: deps[oldtmaref].type }, deps);\n    numbers_add_oref(tiaroot, tmaref);\n    remap[oldtmaref] = tmaref;\n    tia[2][0].data = write_TSP_Reference(tmaref);\n    var tma = numbers_iwa_find(cfb, deps, oldtmaref);\n    tma.id = tmaref;\n    if (deps[tiaref].location == deps[tmaref].location)\n      arch.push(tma);\n    else\n      numbers_iwa_doit(cfb, deps, tmaref, function(_, x) {\n        return x.push(tma);\n      });\n    tiaroot.messages[0].data = write_shallow(tia);\n  });\n  numbers_iwa_doit(cfb, deps, tmaref, function(tmaroot, arch) {\n    var _a, _b;\n    var tma = parse_shallow(tmaroot.messages[0].data);\n    var uuid = u8str(tma[1][0].data), new_uuid = uuid.replace(/-[A-Z0-9]*/, \"-\".concat((\"0000\" + wsidx.toString(16)).slice(-4)));\n    tma[1][0].data = stru8(new_uuid);\n    [12, 13, 29, 31, 32, 33, 39, 44, 47, 81, 82, 84].forEach(function(n) {\n      return delete tma[n];\n    });\n    if (tma[45]) {\n      var srrta = parse_shallow(tma[45][0].data);\n      var ref = parse_TSP_Reference(srrta[1][0].data);\n      numbers_del_oref(tmaroot, ref);\n      delete tma[45];\n    }\n    if (tma[70]) {\n      var hsoa = parse_shallow(tma[70][0].data);\n      (_a = hsoa[2]) == null ? void 0 : _a.forEach(function(item) {\n        var hsa = parse_shallow(item.data);\n        [2, 3].map(function(n) {\n          return hsa[n][0];\n        }).forEach(function(hseadata) {\n          var hsea = parse_shallow(hseadata.data);\n          if (!hsea[8])\n            return;\n          var ref2 = parse_TSP_Reference(hsea[8][0].data);\n          numbers_del_oref(tmaroot, ref2);\n        });\n      });\n      delete tma[70];\n    }\n    [\n      46,\n      30,\n      34,\n      35,\n      36,\n      38,\n      48,\n      49,\n      60,\n      61,\n      62,\n      63,\n      64,\n      71,\n      72,\n      73,\n      74,\n      75,\n      85,\n      86,\n      87,\n      88,\n      89\n    ].forEach(function(n) {\n      if (!tma[n])\n        return;\n      var ref2 = parse_TSP_Reference(tma[n][0].data);\n      delete tma[n];\n      numbers_del_oref(tmaroot, ref2);\n    });\n    var store = parse_shallow(tma[4][0].data);\n    {\n      [2, 4, 5, 6, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22].forEach(function(n) {\n        var _a2;\n        if (!((_a2 = store[n]) == null ? void 0 : _a2[0]))\n          return;\n        var oldref = parse_TSP_Reference(store[n][0].data);\n        var newref = get_unique_msgid({ deps: [tmaref], location: deps[oldref].location, type: deps[oldref].type }, deps);\n        numbers_del_oref(tmaroot, oldref);\n        numbers_add_oref(tmaroot, newref);\n        remap[oldref] = newref;\n        var msg = numbers_iwa_find(cfb, deps, oldref);\n        msg.id = newref;\n        if (deps[oldref].location == deps[tmaref].location)\n          arch.push(msg);\n        else {\n          deps[newref].location = deps[oldref].location.replace(oldref.toString(), newref.toString());\n          if (deps[newref].location == deps[oldref].location)\n            deps[newref].location = deps[newref].location.replace(/\\.iwa/, \"-\".concat(newref, \".iwa\"));\n          CFB.utils.cfb_add(cfb, deps[newref].location, compress_iwa_file(write_iwa_file([msg])));\n          var newloc = deps[newref].location.replace(/^Root Entry\\//, \"\").replace(/^Index\\//, \"\").replace(/\\.iwa$/, \"\");\n          numbers_iwa_doit(cfb, deps, 2, function(ai) {\n            var mlist = parse_shallow(ai.messages[0].data);\n            numbers_add_meta(mlist, newref, newloc);\n            numbers_meta_add_dep(mlist, deps, tmaref, newref);\n            ai.messages[0].data = write_shallow(mlist);\n          });\n        }\n        store[n][0].data = write_TSP_Reference(newref);\n      });\n      var row_headers = parse_shallow(store[1][0].data);\n      {\n        (_b = row_headers[2]) == null ? void 0 : _b.forEach(function(tspref) {\n          var oldref = parse_TSP_Reference(tspref.data);\n          var newref = get_unique_msgid({ deps: [tmaref], location: deps[oldref].location, type: deps[oldref].type }, deps);\n          numbers_del_oref(tmaroot, oldref);\n          numbers_add_oref(tmaroot, newref);\n          remap[oldref] = newref;\n          var msg = numbers_iwa_find(cfb, deps, oldref);\n          msg.id = newref;\n          if (deps[oldref].location == deps[tmaref].location) {\n            arch.push(msg);\n          } else {\n            deps[newref].location = deps[oldref].location.replace(oldref.toString(), newref.toString());\n            if (deps[newref].location == deps[oldref].location)\n              deps[newref].location = deps[newref].location.replace(/\\.iwa/, \"-\".concat(newref, \".iwa\"));\n            CFB.utils.cfb_add(cfb, deps[newref].location, compress_iwa_file(write_iwa_file([msg])));\n            var newloc = deps[newref].location.replace(/^Root Entry\\//, \"\").replace(/^Index\\//, \"\").replace(/\\.iwa$/, \"\");\n            numbers_iwa_doit(cfb, deps, 2, function(ai) {\n              var mlist = parse_shallow(ai.messages[0].data);\n              numbers_add_meta(mlist, newref, newloc);\n              numbers_meta_add_dep(mlist, deps, tmaref, newref);\n              ai.messages[0].data = write_shallow(mlist);\n            });\n          }\n          tspref.data = write_TSP_Reference(newref);\n        });\n      }\n      store[1][0].data = write_shallow(row_headers);\n      var tiles = parse_shallow(store[3][0].data);\n      {\n        tiles[1].forEach(function(t) {\n          var tst = parse_shallow(t.data);\n          var oldtileref = parse_TSP_Reference(tst[2][0].data);\n          var newtileref = remap[oldtileref];\n          if (!remap[oldtileref]) {\n            newtileref = get_unique_msgid({ deps: [tmaref], location: \"\", type: deps[oldtileref].type }, deps);\n            deps[newtileref].location = \"Root Entry/Index/Tables/Tile-\".concat(newtileref, \".iwa\");\n            remap[oldtileref] = newtileref;\n            var oldtile = numbers_iwa_find(cfb, deps, oldtileref);\n            oldtile.id = newtileref;\n            numbers_del_oref(tmaroot, oldtileref);\n            numbers_add_oref(tmaroot, newtileref);\n            CFB.utils.cfb_add(cfb, \"/Index/Tables/Tile-\".concat(newtileref, \".iwa\"), compress_iwa_file(write_iwa_file([oldtile])));\n            numbers_iwa_doit(cfb, deps, 2, function(ai) {\n              var mlist = parse_shallow(ai.messages[0].data);\n              mlist[3].push({ type: 2, data: write_shallow([\n                [],\n                [{ type: 0, data: write_varint49(newtileref) }],\n                [{ type: 2, data: stru8(\"Tables/Tile\") }],\n                [{ type: 2, data: stru8(\"Tables/Tile-\".concat(newtileref)) }],\n                [{ type: 2, data: new Uint8Array([2, 0, 0]) }],\n                [{ type: 2, data: new Uint8Array([2, 0, 0]) }],\n                [],\n                [],\n                [],\n                [],\n                [{ type: 0, data: write_varint49(0) }],\n                [],\n                [{ type: 0, data: write_varint49(0) }]\n              ]) });\n              mlist[1] = [{ type: 0, data: write_varint49(Math.max(newtileref + 1, varint_to_i32(mlist[1][0].data))) }];\n              numbers_meta_add_dep(mlist, deps, tmaref, newtileref);\n              ai.messages[0].data = write_shallow(mlist);\n            });\n          }\n          tst[2][0].data = write_TSP_Reference(newtileref);\n          t.data = write_shallow(tst);\n        });\n      }\n      store[3][0].data = write_shallow(tiles);\n    }\n    tma[4][0].data = write_shallow(store);\n    tmaroot.messages[0].data = write_shallow(tma);\n  });\n}\nfunction write_numbers_ws(cfb, deps, ws, wsname, sheetidx, rootref) {\n  var drawables = [];\n  numbers_iwa_doit(cfb, deps, rootref, function(docroot) {\n    var sheetref = parse_shallow(docroot.messages[0].data);\n    {\n      sheetref[1] = [{ type: 2, data: stru8(wsname) }];\n      drawables = mappa(sheetref[2], parse_TSP_Reference);\n    }\n    docroot.messages[0].data = write_shallow(sheetref);\n  });\n  var tia = numbers_iwa_find(cfb, deps, drawables[0]);\n  var tmaref = parse_TSP_Reference(parse_shallow(tia.messages[0].data)[2][0].data);\n  numbers_iwa_doit(cfb, deps, tmaref, function(docroot, x) {\n    return write_numbers_tma(cfb, deps, ws, docroot, x, tmaref);\n  });\n}\nvar USE_WIDE_ROWS = true;\nfunction write_numbers_tma(cfb, deps, ws, tmaroot, tmafile, tmaref) {\n  if (!ws[\"!ref\"])\n    throw new Error(\"Cannot export empty sheet to NUMBERS\");\n  var range = decode_range(ws[\"!ref\"]);\n  range.s.r = range.s.c = 0;\n  var trunc = false;\n  if (range.e.c > 999) {\n    trunc = true;\n    range.e.c = 999;\n  }\n  if (range.e.r > 999999) {\n    trunc = true;\n    range.e.r = 999999;\n  }\n  if (trunc)\n    console.error(\"Truncating to \".concat(encode_range(range)));\n  var data = [];\n  if (ws[\"!data\"])\n    data = ws[\"!data\"];\n  else {\n    var colstr = [];\n    for (var _C = 0; _C <= range.e.c; ++_C)\n      colstr[_C] = encode_col(_C);\n    for (var R_ = 0; R_ <= range.e.r; ++R_) {\n      data[R_] = [];\n      var _R = \"\" + (R_ + 1);\n      for (_C = 0; _C <= range.e.c; ++_C) {\n        var _cell = ws[colstr[_C] + _R];\n        if (!_cell)\n          continue;\n        data[R_][_C] = _cell;\n      }\n    }\n  }\n  var LUT = {\n    cmnt: [{ a: \"~54ee77S~\", t: \"... the people who are crazy enough to think they can change the world, are the ones who do.\" }],\n    ferr: [],\n    fmla: [],\n    nfmt: [],\n    ofmt: [],\n    rsst: [{ v: \"~54ee77S~\", l: \"https://sheetjs.com/\" }],\n    sst: [\"~Sh33tJ5~\"]\n  };\n  var pb = parse_shallow(tmaroot.messages[0].data);\n  {\n    pb[6][0].data = write_varint49(range.e.r + 1);\n    pb[7][0].data = write_varint49(range.e.c + 1);\n    delete pb[46];\n    var store = parse_shallow(pb[4][0].data);\n    {\n      var row_header_ref = parse_TSP_Reference(parse_shallow(store[1][0].data)[2][0].data);\n      numbers_iwa_doit(cfb, deps, row_header_ref, function(rowhead, _x) {\n        var _a;\n        var base_bucket = parse_shallow(rowhead.messages[0].data);\n        if ((_a = base_bucket == null ? void 0 : base_bucket[2]) == null ? void 0 : _a[0])\n          for (var R2 = 0; R2 < data.length; ++R2) {\n            var _bucket = parse_shallow(base_bucket[2][0].data);\n            _bucket[1][0].data = write_varint49(R2);\n            _bucket[4][0].data = write_varint49(data[R2].length);\n            base_bucket[2][R2] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };\n          }\n        rowhead.messages[0].data = write_shallow(base_bucket);\n      });\n      var col_header_ref = parse_TSP_Reference(store[2][0].data);\n      numbers_iwa_doit(cfb, deps, col_header_ref, function(colhead, _x) {\n        var base_bucket = parse_shallow(colhead.messages[0].data);\n        for (var C = 0; C <= range.e.c; ++C) {\n          var _bucket = parse_shallow(base_bucket[2][0].data);\n          _bucket[1][0].data = write_varint49(C);\n          _bucket[4][0].data = write_varint49(range.e.r + 1);\n          base_bucket[2][C] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };\n        }\n        colhead.messages[0].data = write_shallow(base_bucket);\n      });\n      var rbtree = parse_shallow(store[9][0].data);\n      rbtree[1] = [];\n      var tilestore = parse_shallow(store[3][0].data);\n      {\n        var tstride = 256;\n        tilestore[2] = [{ type: 0, data: write_varint49(tstride) }];\n        var tileref = parse_TSP_Reference(parse_shallow(tilestore[1][0].data)[2][0].data);\n        var save_token = function() {\n          var metadata = numbers_iwa_find(cfb, deps, 2);\n          var mlist = parse_shallow(metadata.messages[0].data);\n          var mlst = mlist[3].filter(function(m) {\n            return varint_to_i32(parse_shallow(m.data)[1][0].data) == tileref;\n          });\n          return (mlst == null ? void 0 : mlst.length) ? varint_to_i32(parse_shallow(mlst[0].data)[12][0].data) : 0;\n        }();\n        {\n          CFB.utils.cfb_del(cfb, deps[tileref].location);\n          numbers_iwa_doit(cfb, deps, 2, function(ai) {\n            var mlist = parse_shallow(ai.messages[0].data);\n            mlist[3] = mlist[3].filter(function(m) {\n              return varint_to_i32(parse_shallow(m.data)[1][0].data) != tileref;\n            });\n            numbers_meta_del_dep(mlist, deps, tmaref, tileref);\n            ai.messages[0].data = write_shallow(mlist);\n          });\n          numbers_del_oref(tmaroot, tileref);\n        }\n        tilestore[1] = [];\n        var ntiles = Math.ceil((range.e.r + 1) / tstride);\n        for (var tidx = 0; tidx < ntiles; ++tidx) {\n          var newtileid = get_unique_msgid({\n            deps: [],\n            location: \"\",\n            type: 6002\n          }, deps);\n          deps[newtileid].location = \"Root Entry/Index/Tables/Tile-\".concat(newtileid, \".iwa\");\n          var tiledata = [\n            [],\n            [{ type: 0, data: write_varint49(0) }],\n            [{ type: 0, data: write_varint49(Math.min(range.e.r + 1, (tidx + 1) * tstride)) }],\n            [{ type: 0, data: write_varint49(0) }],\n            [{ type: 0, data: write_varint49(Math.min((tidx + 1) * tstride, range.e.r + 1) - tidx * tstride) }],\n            [],\n            [{ type: 0, data: write_varint49(5) }],\n            [{ type: 0, data: write_varint49(1) }],\n            [{ type: 0, data: write_varint49(USE_WIDE_ROWS ? 1 : 0) }]\n          ];\n          for (var R = tidx * tstride; R <= Math.min(range.e.r, (tidx + 1) * tstride - 1); ++R) {\n            var tilerow = write_TST_TileRowInfo(data[R], LUT, USE_WIDE_ROWS);\n            tilerow[1][0].data = write_varint49(R - tidx * tstride);\n            tiledata[5].push({ data: write_shallow(tilerow), type: 2 });\n          }\n          tilestore[1].push({ type: 2, data: write_shallow([\n            [],\n            [{ type: 0, data: write_varint49(tidx) }],\n            [{ type: 2, data: write_TSP_Reference(newtileid) }]\n          ]) });\n          var newtile = {\n            id: newtileid,\n            messages: [write_iwam(6002, write_shallow(tiledata))]\n          };\n          var tilecontent = compress_iwa_file(write_iwa_file([newtile]));\n          CFB.utils.cfb_add(cfb, \"/Index/Tables/Tile-\".concat(newtileid, \".iwa\"), tilecontent);\n          numbers_iwa_doit(cfb, deps, 2, function(ai) {\n            var mlist = parse_shallow(ai.messages[0].data);\n            mlist[3].push({ type: 2, data: write_shallow([\n              [],\n              [{ type: 0, data: write_varint49(newtileid) }],\n              [{ type: 2, data: stru8(\"Tables/Tile\") }],\n              [{ type: 2, data: stru8(\"Tables/Tile-\".concat(newtileid)) }],\n              [{ type: 2, data: new Uint8Array([2, 0, 0]) }],\n              [{ type: 2, data: new Uint8Array([2, 0, 0]) }],\n              [],\n              [],\n              [],\n              [],\n              [{ type: 0, data: write_varint49(0) }],\n              [],\n              [{ type: 0, data: write_varint49(save_token) }]\n            ]) });\n            mlist[1] = [{ type: 0, data: write_varint49(Math.max(newtileid + 1, varint_to_i32(mlist[1][0].data))) }];\n            numbers_meta_add_dep(mlist, deps, tmaref, newtileid);\n            ai.messages[0].data = write_shallow(mlist);\n          });\n          numbers_add_oref(tmaroot, newtileid);\n          rbtree[1].push({ type: 2, data: write_shallow([\n            [],\n            [{ type: 0, data: write_varint49(tidx * tstride) }],\n            [{ type: 0, data: write_varint49(tidx) }]\n          ]) });\n        }\n      }\n      store[3][0].data = write_shallow(tilestore);\n      store[9][0].data = write_shallow(rbtree);\n      store[10] = [{ type: 2, data: new Uint8Array([]) }];\n      if (ws[\"!merges\"]) {\n        var mergeid = get_unique_msgid({\n          type: 6144,\n          deps: [tmaref],\n          location: deps[tmaref].location\n        }, deps);\n        tmafile.push({\n          id: mergeid,\n          messages: [write_iwam(6144, write_shallow([\n            [],\n            ws[\"!merges\"].map(function(m) {\n              return { type: 2, data: write_shallow([\n                [],\n                [{ type: 2, data: write_shallow([\n                  [],\n                  [{ type: 5, data: new Uint8Array(new Uint16Array([m.s.r, m.s.c]).buffer) }]\n                ]) }],\n                [{ type: 2, data: write_shallow([\n                  [],\n                  [{ type: 5, data: new Uint8Array(new Uint16Array([m.e.r - m.s.r + 1, m.e.c - m.s.c + 1]).buffer) }]\n                ]) }]\n              ]) };\n            })\n          ]))]\n        });\n        store[13] = [{ type: 2, data: write_TSP_Reference(mergeid) }];\n        numbers_iwa_doit(cfb, deps, 2, function(ai) {\n          var mlist = parse_shallow(ai.messages[0].data);\n          numbers_meta_add_dep(mlist, deps, tmaref, mergeid);\n          ai.messages[0].data = write_shallow(mlist);\n        });\n        numbers_add_oref(tmaroot, mergeid);\n      } else\n        delete store[13];\n      var sstref = parse_TSP_Reference(store[4][0].data);\n      numbers_iwa_doit(cfb, deps, sstref, function(sstroot) {\n        var sstdata = parse_shallow(sstroot.messages[0].data);\n        {\n          sstdata[3] = [];\n          LUT.sst.forEach(function(str, i) {\n            if (i == 0)\n              return;\n            sstdata[3].push({ type: 2, data: write_shallow([\n              [],\n              [{ type: 0, data: write_varint49(i) }],\n              [{ type: 0, data: write_varint49(1) }],\n              [{ type: 2, data: stru8(str) }]\n            ]) });\n          });\n        }\n        sstroot.messages[0].data = write_shallow(sstdata);\n      });\n      var rsstref = parse_TSP_Reference(store[17][0].data);\n      numbers_iwa_doit(cfb, deps, rsstref, function(rsstroot) {\n        var rsstdata = parse_shallow(rsstroot.messages[0].data);\n        rsstdata[3] = [];\n        var style_indices = [\n          904980,\n          903835,\n          903815,\n          903845\n        ];\n        LUT.rsst.forEach(function(rsst, i) {\n          if (i == 0)\n            return;\n          var tswpsa = [\n            [],\n            [{ type: 0, data: new Uint8Array([5]) }],\n            [],\n            [{ type: 2, data: stru8(rsst.v) }]\n          ];\n          tswpsa[10] = [{ type: 0, data: new Uint8Array([1]) }];\n          tswpsa[19] = [{ type: 2, data: new Uint8Array([10, 6, 8, 0, 18, 2, 101, 110]) }];\n          tswpsa[5] = [{ type: 2, data: new Uint8Array([10, 8, 8, 0, 18, 4, 8, 155, 149, 55]) }];\n          tswpsa[2] = [{ type: 2, data: new Uint8Array([8, 148, 158, 55]) }];\n          tswpsa[6] = [{ type: 2, data: new Uint8Array([10, 6, 8, 0, 16, 0, 24, 0]) }];\n          tswpsa[7] = [{ type: 2, data: new Uint8Array([10, 8, 8, 0, 18, 4, 8, 135, 149, 55]) }];\n          tswpsa[8] = [{ type: 2, data: new Uint8Array([10, 8, 8, 0, 18, 4, 8, 165, 149, 55]) }];\n          tswpsa[14] = [{ type: 2, data: new Uint8Array([10, 6, 8, 0, 16, 0, 24, 0]) }];\n          tswpsa[24] = [{ type: 2, data: new Uint8Array([10, 6, 8, 0, 16, 0, 24, 0]) }];\n          var tswpsaid = get_unique_msgid({ deps: [], location: \"\", type: 2001 }, deps);\n          var tswpsarefs = [];\n          if (rsst.l) {\n            var newhlinkid = numbers_add_msg(cfb, 2032, [\n              [],\n              [],\n              [{ type: 2, data: stru8(rsst.l) }]\n            ], \"/Index/Tables/DataList\", deps);\n            tswpsa[11] = [];\n            var smartfield = [[], []];\n            if (!smartfield[1])\n              smartfield[1] = [];\n            smartfield[1].push({ type: 2, data: write_shallow([\n              [],\n              [{ type: 0, data: write_varint49(0) }],\n              [{ type: 2, data: write_TSP_Reference(newhlinkid) }]\n            ]) });\n            tswpsa[11][0] = { type: 2, data: write_shallow(smartfield) };\n            tswpsarefs.push(newhlinkid);\n          }\n          numbers_add_msg(cfb, 2001, tswpsa, \"/Index/Tables/DataList\", deps, tswpsaid);\n          numbers_iwa_doit(cfb, deps, tswpsaid, function(iwa) {\n            style_indices.forEach(function(ref) {\n              return numbers_add_oref(iwa, ref);\n            });\n            tswpsarefs.forEach(function(ref) {\n              return numbers_add_oref(iwa, ref);\n            });\n          });\n          var rtpaid = numbers_add_msg(cfb, 6218, [\n            [],\n            [{ type: 2, data: write_TSP_Reference(tswpsaid) }],\n            [],\n            [{ type: 2, data: new Uint8Array([13, 255, 255, 255, 0, 18, 10, 16, 255, 255, 1, 24, 255, 255, 255, 255, 7]) }]\n          ], \"/Index/Tables/DataList\", deps);\n          numbers_iwa_doit(cfb, deps, rtpaid, function(iwa) {\n            return numbers_add_oref(iwa, tswpsaid);\n          });\n          rsstdata[3].push({ type: 2, data: write_shallow([\n            [],\n            [{ type: 0, data: write_varint49(i) }],\n            [{ type: 0, data: write_varint49(1) }],\n            [],\n            [],\n            [],\n            [],\n            [],\n            [],\n            [{ type: 2, data: write_TSP_Reference(rtpaid) }]\n          ]) });\n          numbers_add_oref(rsstroot, rtpaid);\n          numbers_iwa_doit(cfb, deps, 2, function(ai) {\n            var mlist = parse_shallow(ai.messages[0].data);\n            numbers_meta_add_dep(mlist, deps, rsstref, rtpaid);\n            numbers_meta_add_dep(mlist, deps, rtpaid, tswpsaid);\n            numbers_meta_add_dep(mlist, deps, tswpsaid, tswpsarefs);\n            numbers_meta_add_dep(mlist, deps, tswpsaid, style_indices);\n            ai.messages[0].data = write_shallow(mlist);\n          });\n        });\n        rsstroot.messages[0].data = write_shallow(rsstdata);\n      });\n      if (LUT.cmnt.length > 1) {\n        var cmntref = parse_TSP_Reference(store[19][0].data);\n        var authors = {}, iauthor = 0;\n        numbers_iwa_doit(cfb, deps, cmntref, function(cmntroot) {\n          var cmntdata = parse_shallow(cmntroot.messages[0].data);\n          {\n            cmntdata[3] = [];\n            LUT.cmnt.forEach(function(cc, i) {\n              if (i == 0)\n                return;\n              var replies = [];\n              if (cc.replies)\n                cc.replies.forEach(function(c) {\n                  if (!authors[c.a || \"\"])\n                    authors[c.a || \"\"] = numbers_add_msg(cfb, 212, [\n                      [],\n                      [{ type: 2, data: stru8(c.a || \"\") }],\n                      [{ type: 2, data: get_author_color(++iauthor) }],\n                      [],\n                      [{ type: 0, data: write_varint49(0) }]\n                    ], \"/Index/Tables/DataList\", deps);\n                  var aaaid2 = authors[c.a || \"\"];\n                  var csaid2 = numbers_add_msg(cfb, 3056, [\n                    [],\n                    [{ type: 2, data: stru8(c.t || \"\") }],\n                    [{ type: 2, data: write_shallow([\n                      [],\n                      [{ type: 1, data: new Uint8Array([0, 0, 0, 128, 116, 109, 182, 65]) }]\n                    ]) }],\n                    [{ type: 2, data: write_TSP_Reference(aaaid2) }]\n                  ], \"/Index/Tables/DataList\", deps);\n                  numbers_iwa_doit(cfb, deps, csaid2, function(iwa) {\n                    return numbers_add_oref(iwa, aaaid2);\n                  });\n                  replies.push(csaid2);\n                  numbers_iwa_doit(cfb, deps, 2, function(ai) {\n                    var mlist = parse_shallow(ai.messages[0].data);\n                    numbers_meta_add_dep(mlist, deps, csaid2, aaaid2);\n                    ai.messages[0].data = write_shallow(mlist);\n                  });\n                });\n              if (!authors[cc.a || \"\"])\n                authors[cc.a || \"\"] = numbers_add_msg(cfb, 212, [\n                  [],\n                  [{ type: 2, data: stru8(cc.a || \"\") }],\n                  [{ type: 2, data: get_author_color(++iauthor) }],\n                  [],\n                  [{ type: 0, data: write_varint49(0) }]\n                ], \"/Index/Tables/DataList\", deps);\n              var aaaid = authors[cc.a || \"\"];\n              var csaid = numbers_add_msg(cfb, 3056, [\n                [],\n                [{ type: 2, data: stru8(cc.t || \"\") }],\n                [{ type: 2, data: write_shallow([\n                  [],\n                  [{ type: 1, data: new Uint8Array([0, 0, 0, 128, 116, 109, 182, 65]) }]\n                ]) }],\n                [{ type: 2, data: write_TSP_Reference(aaaid) }],\n                replies.map(function(r) {\n                  return { type: 2, data: write_TSP_Reference(r) };\n                }),\n                [{ type: 2, data: write_shallow([\n                  [],\n                  [{ type: 0, data: write_varint49(i) }],\n                  [{ type: 0, data: write_varint49(0) }]\n                ]) }]\n              ], \"/Index/Tables/DataList\", deps);\n              numbers_iwa_doit(cfb, deps, csaid, function(iwa) {\n                numbers_add_oref(iwa, aaaid);\n                replies.forEach(function(r) {\n                  return numbers_add_oref(iwa, r);\n                });\n              });\n              cmntdata[3].push({ type: 2, data: write_shallow([\n                [],\n                [{ type: 0, data: write_varint49(i) }],\n                [{ type: 0, data: write_varint49(1) }],\n                [],\n                [],\n                [],\n                [],\n                [],\n                [],\n                [],\n                [{ type: 2, data: write_TSP_Reference(csaid) }]\n              ]) });\n              numbers_add_oref(cmntroot, csaid);\n              numbers_iwa_doit(cfb, deps, 2, function(ai) {\n                var mlist = parse_shallow(ai.messages[0].data);\n                numbers_meta_add_dep(mlist, deps, cmntref, csaid);\n                numbers_meta_add_dep(mlist, deps, csaid, aaaid);\n                if (replies.length)\n                  numbers_meta_add_dep(mlist, deps, csaid, replies);\n                ai.messages[0].data = write_shallow(mlist);\n              });\n            });\n          }\n          cmntdata[2][0].data = write_varint49(LUT.cmnt.length + 1);\n          cmntroot.messages[0].data = write_shallow(cmntdata);\n        });\n      }\n    }\n    pb[4][0].data = write_shallow(store);\n  }\n  tmaroot.messages[0].data = write_shallow(pb);\n}\nfunction fix_opts_func(defaults/*:Array<Array<any> >*/)/*:{(o:any):void}*/ {\n\treturn function fix_opts(opts) {\n\t\tfor(var i = 0; i != defaults.length; ++i) {\n\t\t\tvar d = defaults[i];\n\t\t\tif(opts[d[0]] === undefined) opts[d[0]] = d[1];\n\t\t\tif(d[2] === 'n') opts[d[0]] = Number(opts[d[0]]);\n\t\t}\n\t};\n}\n\nfunction fix_read_opts(opts) {\nfix_opts_func([\n\t['cellNF', false], /* emit cell number format string as .z */\n\t['cellHTML', true], /* emit html string as .h */\n\t['cellFormula', true], /* emit formulae as .f */\n\t['cellStyles', false], /* emits style/theme as .s */\n\t['cellText', true], /* emit formatted text as .w */\n\t['cellDates', false], /* emit date cells with type `d` */\n\n\t['sheetStubs', false], /* emit empty cells */\n\t['sheetRows', 0, 'n'], /* read n rows (0 = read all rows) */\n\n\t['bookDeps', false], /* parse calculation chains */\n\t['bookSheets', false], /* only try to get sheet names (no Sheets) */\n\t['bookProps', false], /* only try to get properties (no Sheets) */\n\t['bookFiles', false], /* include raw file structure (keys, files, cfb) */\n\t['bookVBA', false], /* include vba raw data (vbaraw) */\n\n\t['password',''], /* password */\n\t['WTF', false] /* WTF mode (throws errors) */\n])(opts);\n}\n\nfunction fix_write_opts(opts) {\nfix_opts_func([\n\t['cellDates', false], /* write date cells with type `d` */\n\n\t['bookSST', false], /* Generate Shared String Table */\n\n\t['bookType', 'xlsx'], /* Type of workbook (xlsx/m/b) */\n\n\t['compression', false], /* Use file compression */\n\n\t['WTF', false] /* WTF mode (throws errors) */\n])(opts);\n}\nfunction get_sheet_type(n/*:string*/)/*:string*/ {\n\tif(RELS.WS.indexOf(n) > -1) return \"sheet\";\n\tif(RELS.CS && n == RELS.CS) return \"chart\";\n\tif(RELS.DS && n == RELS.DS) return \"dialog\";\n\tif(RELS.MS && n == RELS.MS) return \"macro\";\n\treturn (n && n.length) ? n : \"sheet\";\n}\nfunction safe_parse_wbrels(wbrels, sheets) {\n\tif(!wbrels) return 0;\n\ttry {\n\t\twbrels = sheets.map(function pwbr(w) { if(!w.id) w.id = w.strRelID; return [w.name, wbrels['!id'][w.id].Target, get_sheet_type(wbrels['!id'][w.id].Type)]; });\n\t} catch(e) { return null; }\n\treturn !wbrels || wbrels.length === 0 ? null : wbrels;\n}\n\nfunction parse_sheet_legacy_drawing(sheet, type, zip, path, idx, opts, wb, comments) {\n\tif(!sheet || !sheet['!legdrawel']) return;\n\tvar dfile = resolve_path(sheet['!legdrawel'].Target, path);\n\tvar draw = getzipstr(zip, dfile, true);\n\tif(draw) parse_vml(utf8read(draw), sheet, comments||[]);\n}\n\nfunction safe_parse_sheet(zip, path/*:string*/, relsPath/*:string*/, sheet, idx/*:number*/, sheetRels, sheets, stype/*:string*/, opts, wb, themes, styles) {\n\ttry {\n\t\tsheetRels[sheet]=parse_rels(getzipstr(zip, relsPath, true), path);\n\t\tvar data = getzipdata(zip, path);\n\t\tvar _ws;\n\t\tswitch(stype) {\n\t\t\tcase 'sheet':  _ws = parse_ws(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tcase 'chart':  _ws = parse_cs(data, path, idx, opts, sheetRels[sheet], wb, themes, styles);\n\t\t\t\tif(!_ws || !_ws['!drawel']) break;\n\t\t\t\tvar dfile = resolve_path(_ws['!drawel'].Target, path);\n\t\t\t\tvar drelsp = get_rels_path(dfile);\n\t\t\t\tvar draw = parse_drawing(getzipstr(zip, dfile, true), parse_rels(getzipstr(zip, drelsp, true), dfile));\n\t\t\t\tvar chartp = resolve_path(draw, dfile);\n\t\t\t\tvar crelsp = get_rels_path(chartp);\n\t\t\t\t_ws = parse_chart(getzipstr(zip, chartp, true), chartp, opts, parse_rels(getzipstr(zip, crelsp, true), chartp), wb, _ws);\n\t\t\t\tbreak;\n\t\t\tcase 'macro':  _ws = parse_ms(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tcase 'dialog': _ws = parse_ds(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tdefault: throw new Error(\"Unrecognized sheet type \" + stype);\n\t\t}\n\t\tsheets[sheet] = _ws;\n\n\t\t/* scan rels for comments and threaded comments */\n\t\tvar comments = [], tcomments = [];\n\t\tif(sheetRels && sheetRels[sheet]) keys(sheetRels[sheet]).forEach(function(n) {\n\t\t\tvar dfile = \"\";\n\t\t\tif(sheetRels[sheet][n].Type == RELS.CMNT) {\n\t\t\t\tdfile = resolve_path(sheetRels[sheet][n].Target, path);\n\t\t\t\tcomments = parse_cmnt(getzipdata(zip, dfile, true), dfile, opts);\n\t\t\t\tif(!comments || !comments.length) return;\n\t\t\t\tsheet_insert_comments(_ws, comments, false);\n\t\t\t}\n\t\t\tif(sheetRels[sheet][n].Type == RELS.TCMNT) {\n\t\t\t\tdfile = resolve_path(sheetRels[sheet][n].Target, path);\n\t\t\t\ttcomments = tcomments.concat(parse_tcmnt_xml(getzipdata(zip, dfile, true), opts));\n\t\t\t}\n\t\t});\n\t\tif(tcomments && tcomments.length) sheet_insert_comments(_ws, tcomments, true, opts.people || []);\n\t\tparse_sheet_legacy_drawing(_ws, stype, zip, path, idx, opts, wb, comments);\n\t} catch(e) { if(opts.WTF) throw e; }\n}\n\nfunction strip_front_slash(x/*:string*/)/*:string*/ { return x.charAt(0) == '/' ? x.slice(1) : x; }\n\nfunction parse_zip(zip/*:ZIP*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tmake_ssf();\n\topts = opts || {};\n\tfix_read_opts(opts);\n\n\t/* OpenDocument Part 3 Section 2.2.1 OpenDocument Package */\n\tif(safegetzipfile(zip, 'META-INF/manifest.xml')) return parse_ods(zip, opts);\n\t/* UOC */\n\tif(safegetzipfile(zip, 'objectdata.xml')) return parse_ods(zip, opts);\n\t/* Numbers */\n\tif(safegetzipfile(zip, 'Index/Document.iwa')) {\n\t\tif(typeof Uint8Array == \"undefined\") throw new Error('NUMBERS file parsing requires Uint8Array support');\n\t\tif(typeof parse_numbers_iwa != \"undefined\") {\n\t\t\tif(zip.FileIndex) return parse_numbers_iwa(zip, opts);\n\t\t\tvar _zip = CFB.utils.cfb_new();\n\t\t\tzipentries(zip).forEach(function(e) { zip_add_file(_zip, e, getzipbin(zip, e)); });\n\t\t\treturn parse_numbers_iwa(_zip, opts);\n\t\t}\n\t\tthrow new Error('Unsupported NUMBERS file');\n\t}\n\tif(!safegetzipfile(zip, '[Content_Types].xml')) {\n\t\tif(safegetzipfile(zip, 'index.xml.gz')) throw new Error('Unsupported NUMBERS 08 file');\n\t\tif(safegetzipfile(zip, 'index.xml')) throw new Error('Unsupported NUMBERS 09 file');\n\t\tvar index_zip = CFB.find(zip, 'Index.zip');\n\t\tif(index_zip) {\n\t\t\topts = dup(opts);\n\t\t\tdelete opts.type;\n\t\t\tif(typeof index_zip.content == \"string\") opts.type = \"binary\";\n\t\t\t// TODO: Bun buffer bug\n\t\t\tif(typeof Bun !== \"undefined\" && Buffer.isBuffer(index_zip.content)) return readSync(new Uint8Array(index_zip.content), opts);\n\t\t\treturn readSync(index_zip.content, opts);\n\t\t}\n\t\tthrow new Error('Unsupported ZIP file');\n\t}\n\n\tvar entries = zipentries(zip);\n\tvar dir = parse_ct((getzipstr(zip, '[Content_Types].xml')/*:?any*/));\n\tvar xlsb = false;\n\tvar sheets, binname;\n\tif(dir.workbooks.length === 0) {\n\t\tbinname = \"xl/workbook.xml\";\n\t\tif(getzipdata(zip,binname, true)) dir.workbooks.push(binname);\n\t}\n\tif(dir.workbooks.length === 0) {\n\t\tbinname = \"xl/workbook.bin\";\n\t\tif(!getzipdata(zip,binname,true)) throw new Error(\"Could not find workbook\");\n\t\tdir.workbooks.push(binname);\n\t\txlsb = true;\n\t}\n\tif(dir.workbooks[0].slice(-3) == \"bin\") xlsb = true;\n\n\tvar themes = ({}/*:any*/);\n\tvar styles = ({}/*:any*/);\n\tif(!opts.bookSheets && !opts.bookProps) {\n\t\tstrs = [];\n\t\tif(dir.sst) try { strs=parse_sst(getzipdata(zip, strip_front_slash(dir.sst)), dir.sst, opts); } catch(e) { if(opts.WTF) throw e; }\n\n\t\tif(opts.cellStyles && dir.themes.length) themes = parse_theme_xml(getzipstr(zip, dir.themes[0].replace(/^\\//,''), true)||\"\", opts);\n\n\t\tif(dir.style) styles = parse_sty(getzipdata(zip, strip_front_slash(dir.style)), dir.style, themes, opts);\n\t}\n\n\t/*var externbooks = */dir.links.map(function(link) {\n\t\ttry {\n\t\t\tvar rels = parse_rels(getzipstr(zip, get_rels_path(strip_front_slash(link))), link);\n\t\t\treturn parse_xlink(getzipdata(zip, strip_front_slash(link)), rels, link, opts);\n\t\t} catch(e) {}\n\t});\n\n\tvar wb = parse_wb(getzipdata(zip, strip_front_slash(dir.workbooks[0])), dir.workbooks[0], opts);\n\n\tvar props = {}, propdata = \"\";\n\n\tif(dir.coreprops.length) {\n\t\tpropdata = getzipdata(zip, strip_front_slash(dir.coreprops[0]), true);\n\t\tif(propdata) props = parse_core_props(propdata);\n\t\tif(dir.extprops.length !== 0) {\n\t\t\tpropdata = getzipdata(zip, strip_front_slash(dir.extprops[0]), true);\n\t\t\tif(propdata) parse_ext_props(propdata, props, opts);\n\t\t}\n\t}\n\n\tvar custprops = {};\n\tif(!opts.bookSheets || opts.bookProps) {\n\t\tif (dir.custprops.length !== 0) {\n\t\t\tpropdata = getzipstr(zip, strip_front_slash(dir.custprops[0]), true);\n\t\t\tif(propdata) custprops = parse_cust_props(propdata, opts);\n\t\t}\n\t}\n\n\tvar out = ({}/*:any*/);\n\tif(opts.bookSheets || opts.bookProps) {\n\t\tif(wb.Sheets) sheets = wb.Sheets.map(function pluck(x){ return x.name; });\n\t\telse if(props.Worksheets && props.SheetNames.length > 0) sheets=props.SheetNames;\n\t\tif(opts.bookProps) { out.Props = props; out.Custprops = custprops; }\n\t\tif(opts.bookSheets && typeof sheets !== 'undefined') out.SheetNames = sheets;\n\t\tif(opts.bookSheets ? out.SheetNames : opts.bookProps) return out;\n\t}\n\tsheets = {};\n\n\tvar deps = {};\n\tif(opts.bookDeps && dir.calcchain) deps=parse_cc(getzipdata(zip, strip_front_slash(dir.calcchain)),dir.calcchain,opts);\n\n\tvar i=0;\n\tvar sheetRels = ({}/*:any*/);\n\tvar path, relsPath;\n\n\t{\n\t\tvar wbsheets = wb.Sheets;\n\t\tprops.Worksheets = wbsheets.length;\n\t\tprops.SheetNames = [];\n\t\tfor(var j = 0; j != wbsheets.length; ++j) {\n\t\t\tprops.SheetNames[j] = wbsheets[j].name;\n\t\t}\n\t}\n\n\tvar wbext = xlsb ? \"bin\" : \"xml\";\n\tvar wbrelsi = dir.workbooks[0].lastIndexOf(\"/\");\n\tvar wbrelsfile = (dir.workbooks[0].slice(0, wbrelsi+1) + \"_rels/\" + dir.workbooks[0].slice(wbrelsi+1) + \".rels\").replace(/^\\//,\"\");\n\tif(!safegetzipfile(zip, wbrelsfile)) wbrelsfile = 'xl/_rels/workbook.' + wbext + '.rels';\n\tvar wbrels = parse_rels(getzipstr(zip, wbrelsfile, true), wbrelsfile.replace(/_rels.*/, \"s5s\"));\n\n\tif((dir.metadata || []).length >= 1) {\n\t\t/* TODO: MDX and other types of metadata */\n\t\topts.xlmeta = parse_xlmeta(getzipdata(zip, strip_front_slash(dir.metadata[0])),dir.metadata[0],opts);\n\t}\n\n\tif((dir.people || []).length >= 1) {\n\t\topts.people = parse_people_xml(getzipdata(zip, strip_front_slash(dir.people[0])),opts);\n\t}\n\n\tif(wbrels) wbrels = safe_parse_wbrels(wbrels, wb.Sheets);\n\n\t/* Numbers iOS hack */\n\tvar nmode = (getzipdata(zip,\"xl/worksheets/sheet.xml\",true))?1:0;\n\twsloop: for(i = 0; i != props.Worksheets; ++i) {\n\t\tvar stype = \"sheet\";\n\t\tif(wbrels && wbrels[i]) {\n\t\t\tpath = 'xl/' + (wbrels[i][1]).replace(/[\\/]?xl\\//, \"\");\n\t\t\tif(!safegetzipfile(zip, path)) path = wbrels[i][1];\n\t\t\tif(!safegetzipfile(zip, path)) path = wbrelsfile.replace(/_rels\\/[\\S\\s]*$/,\"\") + wbrels[i][1];\n\t\t\tstype = wbrels[i][2];\n\t\t} else {\n\t\t\tpath = 'xl/worksheets/sheet'+(i+1-nmode)+\".\" + wbext;\n\t\t\tpath = path.replace(/sheet0\\./,\"sheet.\");\n\t\t}\n\t\trelsPath = path.replace(/^(.*)(\\/)([^\\/]*)$/, \"$1/_rels/$3.rels\");\n\t\tif(opts && opts.sheets != null) switch(typeof opts.sheets) {\n\t\t\tcase \"number\": if(i != opts.sheets) continue wsloop; break;\n\t\t\tcase \"string\": if(props.SheetNames[i].toLowerCase() != opts.sheets.toLowerCase()) continue wsloop; break;\n\t\t\tdefault: if(Array.isArray && Array.isArray(opts.sheets)) {\n\t\t\t\tvar snjseen = false;\n\t\t\t\tfor(var snj = 0; snj != opts.sheets.length; ++snj) {\n\t\t\t\t\tif(typeof opts.sheets[snj] == \"number\" && opts.sheets[snj] == i) snjseen=1;\n\t\t\t\t\tif(typeof opts.sheets[snj] == \"string\" && opts.sheets[snj].toLowerCase() == props.SheetNames[i].toLowerCase()) snjseen = 1;\n\t\t\t\t}\n\t\t\t\tif(!snjseen) continue wsloop;\n\t\t\t}\n\t\t}\n\t\tsafe_parse_sheet(zip, path, relsPath, props.SheetNames[i], i, sheetRels, sheets, stype, opts, wb, themes, styles);\n\t}\n\n\tout = ({\n\t\tDirectory: dir,\n\t\tWorkbook: wb,\n\t\tProps: props,\n\t\tCustprops: custprops,\n\t\tDeps: deps,\n\t\tSheets: sheets,\n\t\tSheetNames: props.SheetNames,\n\t\tStrings: strs,\n\t\tStyles: styles,\n\t\tThemes: themes,\n\t\tSSF: dup(table_fmt)\n\t}/*:any*/);\n\tif(opts && opts.bookFiles) {\n\t\tif(zip.files) {\n\t\t\tout.keys = entries;\n\t\t\tout.files = zip.files;\n\t\t} else {\n\t\t\tout.keys = [];\n\t\t\tout.files = {};\n\t\t\tzip.FullPaths.forEach(function(p, idx) {\n\t\t\t\tp = p.replace(/^Root Entry[\\/]/, \"\");\n\t\t\t\tout.keys.push(p);\n\t\t\t\tout.files[p] = zip.FileIndex[idx];\n\t\t\t});\n\t\t}\n\t}\n\tif(opts && opts.bookVBA) {\n\t\tif(dir.vba.length > 0) out.vbaraw = getzipdata(zip,strip_front_slash(dir.vba[0]),true);\n\t\telse if(dir.defaults && dir.defaults.bin === CT_VBA) out.vbaraw = getzipdata(zip, 'xl/vbaProject.bin',true);\n\t}\n\t// TODO: pass back content types metadata for xlsm/xlsx resolution\n\tout.bookType = xlsb ? \"xlsb\" : \"xlsx\";\n\treturn out;\n}\n\n/* [MS-OFFCRYPTO] 2.1.1 */\nfunction parse_xlsxcfb(cfb, _opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tvar opts = _opts || {};\n\tvar f = 'Workbook', data = CFB.find(cfb, f);\n\ttry {\n\tf = '/!DataSpaces/Version';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\t/*var version = */parse_DataSpaceVersionInfo(data.content);\n\n\t/* 2.3.4.1 */\n\tf = '/!DataSpaces/DataSpaceMap';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar dsm = parse_DataSpaceMap(data.content);\n\tif(dsm.length !== 1 || dsm[0].comps.length !== 1 || dsm[0].comps[0].t !== 0 || dsm[0].name !== \"StrongEncryptionDataSpace\" || dsm[0].comps[0].v !== \"EncryptedPackage\")\n\t\tthrow new Error(\"ECMA-376 Encrypted file bad \" + f);\n\n\t/* 2.3.4.2 */\n\tf = '/!DataSpaces/DataSpaceInfo/StrongEncryptionDataSpace';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar seds = parse_DataSpaceDefinition(data.content);\n\tif(seds.length != 1 || seds[0] != \"StrongEncryptionTransform\")\n\t\tthrow new Error(\"ECMA-376 Encrypted file bad \" + f);\n\n\t/* 2.3.4.3 */\n\tf = '/!DataSpaces/TransformInfo/StrongEncryptionTransform/!Primary';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\t/*var hdr = */parse_Primary(data.content);\n\t} catch(e) {}\n\n\tf = '/EncryptionInfo';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar einfo = parse_EncryptionInfo(data.content);\n\n\t/* 2.3.4.4 */\n\tf = '/EncryptedPackage';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\n/*global decrypt_agile */\n/*:: declare var decrypt_agile:any; */\n\tif(einfo[0] == 0x04 && typeof decrypt_agile !== 'undefined') return decrypt_agile(einfo[1], data.content, opts.password || \"\", opts);\n/*global decrypt_std76 */\n/*:: declare var decrypt_std76:any; */\n\tif(einfo[0] == 0x02 && typeof decrypt_std76 !== 'undefined') return decrypt_std76(einfo[1], data.content, opts.password || \"\", opts);\n\tthrow new Error(\"File is password-protected\");\n}\n\nfunction write_zip_xlsb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {\n\tif(wb && !wb.SSF) {\n\t\twb.SSF = dup(table_fmt);\n\t}\n\tif(wb && wb.SSF) {\n\t\tmake_ssf(); SSF_load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\topts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;\n\t\topts.ssf = wb.SSF;\n\t}\n\topts.rels = {}; opts.wbrels = {};\n\topts.Strings = /*::((*/[]/*:: :any):SST)*/; opts.Strings.Count = 0; opts.Strings.Unique = 0;\n\tif(browser_has_Map) opts.revStrings = new Map();\n\telse { opts.revStrings = {}; opts.revStrings.foo = []; delete opts.revStrings.foo; }\n\tvar wbext = \"bin\";\n\tvar vbafmt = true;\n\tvar ct = new_ct();\n\tfix_write_opts(opts = opts || {});\n\tvar zip = zip_new();\n\tvar f = \"\", rId = 0;\n\n\topts.cellXfs = [];\n\tget_cell_style(opts.cellXfs, {}, {revssf:{\"General\":0}});\n\n\tif(!wb.Props) wb.Props = {};\n\n\tf = \"docProps/core.xml\";\n\tzip_add_file(zip, f, write_core_props(wb.Props, opts));\n\tct.coreprops.push(f);\n\tadd_rels(opts.rels, 2, f, RELS.CORE_PROPS);\n\n\t/*::if(!wb.Props) throw \"unreachable\"; */\n\tf = \"docProps/app.xml\";\n\tif(wb.Props && wb.Props.SheetNames){/* empty */}\n\telse if(!wb.Workbook || !wb.Workbook.Sheets) wb.Props.SheetNames = wb.SheetNames;\n\telse {\n\t\tvar _sn = [];\n\t\tfor(var _i = 0; _i < wb.SheetNames.length; ++_i)\n\t\t\tif((wb.Workbook.Sheets[_i]||{}).Hidden != 2) _sn.push(wb.SheetNames[_i]);\n\t\twb.Props.SheetNames = _sn;\n\t}\n\twb.Props.Worksheets = wb.Props.SheetNames.length;\n\tzip_add_file(zip, f, write_ext_props(wb.Props, opts));\n\tct.extprops.push(f);\n\tadd_rels(opts.rels, 3, f, RELS.EXT_PROPS);\n\n\tif(wb.Custprops !== wb.Props && keys(wb.Custprops||{}).length > 0) {\n\t\tf = \"docProps/custom.xml\";\n\t\tzip_add_file(zip, f, write_cust_props(wb.Custprops, opts));\n\t\tct.custprops.push(f);\n\t\tadd_rels(opts.rels, 4, f, RELS.CUST_PROPS);\n\t}\n\n\tvar people = [\"SheetJ5\"];\n\topts.tcid = 0;\n\n\tfor(rId=1;rId <= wb.SheetNames.length; ++rId) {\n\t\tvar wsrels = {'!id':{}};\n\t\tvar ws = wb.Sheets[wb.SheetNames[rId-1]];\n\t\tvar _type = (ws || {})[\"!type\"] || \"sheet\";\n\t\tswitch(_type) {\n\t\tcase \"chart\":\n\t\t\t/* falls through */\n\t\tdefault:\n\t\t\tf = \"xl/worksheets/sheet\" + rId + \".\" + wbext;\n\t\t\tzip_add_file(zip, f, write_ws_bin(rId-1, opts, wb, wsrels));\n\t\t\tct.sheets.push(f);\n\t\t\tadd_rels(opts.wbrels, -1, \"worksheets/sheet\" + rId + \".\" + wbext, RELS.WS[0]);\n\t\t}\n\n\t\tif(ws) {\n\t\t\tvar comments = ws['!comments'];\n\t\t\tvar need_vml = false;\n\t\t\tvar cf = \"\";\n\t\t\tif(comments && comments.length > 0) {\n\t\t\t\tvar needtc = false;\n\t\t\t\tcomments.forEach(function(carr) {\n\t\t\t\t\tcarr[1].forEach(function(c) { if(c.T == true) needtc = true; });\n\t\t\t\t});\n\t\t\t\tif(needtc) {\n\t\t\t\t\tcf = \"xl/threadedComments/threadedComment\" + rId + \".xml\";\n\t\t\t\t\tzip_add_file(zip, cf, write_tcmnt_xml(comments, people, opts));\n\t\t\t\t\tct.threadedcomments.push(cf);\n\t\t\t\t\tadd_rels(wsrels, -1, \"../threadedComments/threadedComment\" + rId + \".xml\", RELS.TCMNT);\n\t\t\t\t}\n\n\t\t\t\tcf = \"xl/comments\" + rId + \".\" + wbext;\n\t\t\t\tzip_add_file(zip, cf, write_comments_bin(comments, opts));\n\t\t\t\tct.comments.push(cf);\n\t\t\t\tadd_rels(wsrels, -1, \"../comments\" + rId + \".\" + wbext, RELS.CMNT);\n\t\t\t\tneed_vml = true;\n\t\t\t}\n\t\t\tif(ws['!legacy']) {\n\t\t\t\tif(need_vml) zip_add_file(zip, \"xl/drawings/vmlDrawing\" + (rId) + \".vml\", write_vml(rId, ws['!comments']));\n\t\t\t}\n\t\t\tdelete ws['!comments'];\n\t\t\tdelete ws['!legacy'];\n\t\t}\n\n\t\tif(wsrels['!id'].rId1) zip_add_file(zip, get_rels_path(f), write_rels(wsrels));\n\t}\n\n\tif(opts.Strings != null && opts.Strings.length > 0) {\n\t\tf = \"xl/sharedStrings.\" + wbext;\n\t\tzip_add_file(zip, f, write_sst_bin(opts.Strings, opts));\n\t\tct.strs.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"sharedStrings.\" + wbext, RELS.SST);\n\t}\n\n\tf = \"xl/workbook.\" + wbext;\n\tzip_add_file(zip, f, write_wb_bin(wb, opts));\n\tct.workbooks.push(f);\n\tadd_rels(opts.rels, 1, f, RELS.WB);\n\n\t/* TODO: something more intelligent with themes */\n\n\tf = \"xl/theme/theme1.xml\";\n\tvar ww = write_theme(wb.Themes, opts);\n\tzip_add_file(zip, f, ww);\n\tct.themes.push(f);\n\tadd_rels(opts.wbrels, -1, \"theme/theme1.xml\", RELS.THEME);\n\n\t/* TODO: something more intelligent with styles */\n\n\tf = \"xl/styles.\" + wbext;\n\tzip_add_file(zip, f, write_sty_bin(wb, opts));\n\tct.styles.push(f);\n\tadd_rels(opts.wbrels, -1, \"styles.\" + wbext, RELS.STY);\n\n\tif(wb.vbaraw && vbafmt) {\n\t\tf = \"xl/vbaProject.bin\";\n\t\tzip_add_file(zip, f, wb.vbaraw);\n\t\tct.vba.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"vbaProject.bin\", RELS.VBA);\n\t}\n\n\tf = \"xl/metadata.\" + wbext;\n\tzip_add_file(zip, f, write_xlmeta_bin());\n\tct.metadata.push(f);\n\tadd_rels(opts.wbrels, -1, \"metadata.\" + wbext, RELS.XLMETA);\n\n\tif(people.length > 1) {\n\t\tf = \"xl/persons/person.xml\";\n\t\tzip_add_file(zip, f, write_people_xml(people, opts));\n\t\tct.people.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"persons/person.xml\", RELS.PEOPLE);\n\t}\n\n\tzip_add_file(zip, \"[Content_Types].xml\", write_ct(ct, opts));\n\tzip_add_file(zip, '_rels/.rels', write_rels(opts.rels));\n\tzip_add_file(zip, 'xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels));\n\n\tdelete opts.revssf; delete opts.ssf;\n\treturn zip;\n}\n\nfunction write_zip_xlsx(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {\n\tif(wb && !wb.SSF) {\n\t\twb.SSF = dup(table_fmt);\n\t}\n\tif(wb && wb.SSF) {\n\t\tmake_ssf(); SSF_load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\topts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;\n\t\topts.ssf = wb.SSF;\n\t}\n\topts.rels = {}; opts.wbrels = {};\n\topts.Strings = /*::((*/[]/*:: :any):SST)*/; opts.Strings.Count = 0; opts.Strings.Unique = 0;\n\tif(browser_has_Map) opts.revStrings = new Map();\n\telse { opts.revStrings = {}; opts.revStrings.foo = []; delete opts.revStrings.foo; }\n\tvar wbext = \"xml\";\n\tvar vbafmt = VBAFMTS.indexOf(opts.bookType) > -1;\n\tvar ct = new_ct();\n\tfix_write_opts(opts = opts || {});\n\tvar zip = zip_new();\n\tvar f = \"\", rId = 0;\n\n\topts.cellXfs = [];\n\tget_cell_style(opts.cellXfs, {}, {revssf:{\"General\":0}});\n\n\tif(!wb.Props) wb.Props = {};\n\n\tf = \"docProps/core.xml\";\n\tzip_add_file(zip, f, write_core_props(wb.Props, opts));\n\tct.coreprops.push(f);\n\tadd_rels(opts.rels, 2, f, RELS.CORE_PROPS);\n\n\t/*::if(!wb.Props) throw \"unreachable\"; */\n\tf = \"docProps/app.xml\";\n\tif(wb.Props && wb.Props.SheetNames){/* empty */}\n\telse if(!wb.Workbook || !wb.Workbook.Sheets) wb.Props.SheetNames = wb.SheetNames;\n\telse {\n\t\tvar _sn = [];\n\t\tfor(var _i = 0; _i < wb.SheetNames.length; ++_i)\n\t\t\tif((wb.Workbook.Sheets[_i]||{}).Hidden != 2) _sn.push(wb.SheetNames[_i]);\n\t\twb.Props.SheetNames = _sn;\n\t}\n\twb.Props.Worksheets = wb.Props.SheetNames.length;\n\tzip_add_file(zip, f, write_ext_props(wb.Props, opts));\n\tct.extprops.push(f);\n\tadd_rels(opts.rels, 3, f, RELS.EXT_PROPS);\n\n\tif(wb.Custprops !== wb.Props && keys(wb.Custprops||{}).length > 0) {\n\t\tf = \"docProps/custom.xml\";\n\t\tzip_add_file(zip, f, write_cust_props(wb.Custprops, opts));\n\t\tct.custprops.push(f);\n\t\tadd_rels(opts.rels, 4, f, RELS.CUST_PROPS);\n\t}\n\n\tvar people = [\"SheetJ5\"];\n\topts.tcid = 0;\n\n\tfor(rId=1;rId <= wb.SheetNames.length; ++rId) {\n\t\tvar wsrels = {'!id':{}};\n\t\tvar ws = wb.Sheets[wb.SheetNames[rId-1]];\n\t\tvar _type = (ws || {})[\"!type\"] || \"sheet\";\n\t\tswitch(_type) {\n\t\tcase \"chart\":\n\t\t\t/* falls through */\n\t\tdefault:\n\t\t\tf = \"xl/worksheets/sheet\" + rId + \".\" + wbext;\n\t\t\tzip_add_file(zip, f, write_ws_xml(rId-1, opts, wb, wsrels));\n\t\t\tct.sheets.push(f);\n\t\t\tadd_rels(opts.wbrels, -1, \"worksheets/sheet\" + rId + \".\" + wbext, RELS.WS[0]);\n\t\t}\n\n\t\tif(ws) {\n\t\t\tvar comments = ws['!comments'];\n\t\t\tvar need_vml = false;\n\t\t\tvar cf = \"\";\n\t\t\tif(comments && comments.length > 0) {\n\t\t\t\tvar needtc = false;\n\t\t\t\tcomments.forEach(function(carr) {\n\t\t\t\t\tcarr[1].forEach(function(c) { if(c.T == true) needtc = true; });\n\t\t\t\t});\n\t\t\t\tif(needtc) {\n\t\t\t\t\tcf = \"xl/threadedComments/threadedComment\" + rId + \".xml\";\n\t\t\t\t\tzip_add_file(zip, cf, write_tcmnt_xml(comments, people, opts));\n\t\t\t\t\tct.threadedcomments.push(cf);\n\t\t\t\t\tadd_rels(wsrels, -1, \"../threadedComments/threadedComment\" + rId + \".xml\", RELS.TCMNT);\n\t\t\t\t}\n\n\t\t\t\tcf = \"xl/comments\" + rId + \".\" + wbext;\n\t\t\t\tzip_add_file(zip, cf, write_comments_xml(comments, opts));\n\t\t\t\tct.comments.push(cf);\n\t\t\t\tadd_rels(wsrels, -1, \"../comments\" + rId + \".\" + wbext, RELS.CMNT);\n\t\t\t\tneed_vml = true;\n\t\t\t}\n\t\t\tif(ws['!legacy']) {\n\t\t\t\tif(need_vml) zip_add_file(zip, \"xl/drawings/vmlDrawing\" + (rId) + \".vml\", write_vml(rId, ws['!comments']));\n\t\t\t}\n\t\t\tdelete ws['!comments'];\n\t\t\tdelete ws['!legacy'];\n\t\t}\n\n\t\tif(wsrels['!id'].rId1) zip_add_file(zip, get_rels_path(f), write_rels(wsrels));\n\t}\n\n\tif(opts.Strings != null && opts.Strings.length > 0) {\n\t\tf = \"xl/sharedStrings.\" + wbext;\n\t\tzip_add_file(zip, f, write_sst_xml(opts.Strings, opts));\n\t\tct.strs.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"sharedStrings.\" + wbext, RELS.SST);\n\t}\n\n\tf = \"xl/workbook.\" + wbext;\n\tzip_add_file(zip, f, write_wb_xml(wb, opts));\n\tct.workbooks.push(f);\n\tadd_rels(opts.rels, 1, f, RELS.WB);\n\n\t/* TODO: something more intelligent with themes */\n\n\tf = \"xl/theme/theme1.xml\";\n\tzip_add_file(zip, f, write_theme(wb.Themes, opts));\n\tct.themes.push(f);\n\tadd_rels(opts.wbrels, -1, \"theme/theme1.xml\", RELS.THEME);\n\n\t/* TODO: something more intelligent with styles */\n\n\tf = \"xl/styles.\" + wbext;\n\tzip_add_file(zip, f, write_sty_xml(wb, opts));\n\tct.styles.push(f);\n\tadd_rels(opts.wbrels, -1, \"styles.\" + wbext, RELS.STY);\n\n\tif(wb.vbaraw && vbafmt) {\n\t\tf = \"xl/vbaProject.bin\";\n\t\tzip_add_file(zip, f, wb.vbaraw);\n\t\tct.vba.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"vbaProject.bin\", RELS.VBA);\n\t}\n\n\tf = \"xl/metadata.\" + wbext;\n\tzip_add_file(zip, f, write_xlmeta_xml());\n\tct.metadata.push(f);\n\tadd_rels(opts.wbrels, -1, \"metadata.\" + wbext, RELS.XLMETA);\n\n\tif(people.length > 1) {\n\t\tf = \"xl/persons/person.xml\";\n\t\tzip_add_file(zip, f, write_people_xml(people, opts));\n\t\tct.people.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"persons/person.xml\", RELS.PEOPLE);\n\t}\n\n\tzip_add_file(zip, \"[Content_Types].xml\", write_ct(ct, opts));\n\tzip_add_file(zip, '_rels/.rels', write_rels(opts.rels));\n\tzip_add_file(zip, 'xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels));\n\n\tdelete opts.revssf; delete opts.ssf;\n\treturn zip;\n}\n\nfunction firstbyte(f/*:RawData*/,o/*:?TypeOpts*/)/*:Array<number>*/ {\n\tvar x = \"\";\n\tswitch((o||{}).type || \"base64\") {\n\t\tcase 'buffer': return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];\n\t\tcase 'base64': x = Base64_decode(f.slice(0,12)); break;\n\t\tcase 'binary': x = f; break;\n\t\tcase 'array':  return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];\n\t\tdefault: throw new Error(\"Unrecognized type \" + (o && o.type || \"undefined\"));\n\t}\n\treturn [x.charCodeAt(0), x.charCodeAt(1), x.charCodeAt(2), x.charCodeAt(3), x.charCodeAt(4), x.charCodeAt(5), x.charCodeAt(6), x.charCodeAt(7)];\n}\n\nfunction read_cfb(cfb/*:CFBContainer*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tif(CFB.find(cfb, \"EncryptedPackage\")) return parse_xlsxcfb(cfb, opts);\n\treturn parse_xlscfb(cfb, opts);\n}\n\nfunction read_zip(data/*:RawData*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tvar zip, d = data;\n\tvar o = opts||{};\n\tif(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? \"buffer\" : \"base64\";\n\tzip = zip_read(d, o);\n\treturn parse_zip(zip, o);\n}\n\nfunction read_plaintext(data/*:string*/, o/*:ParseOpts*/)/*:Workbook*/ {\n\tvar i = 0;\n\tmain: while(i < data.length) switch(data.charCodeAt(i)) {\n\t\tcase 0x0A: case 0x0D: case 0x20: ++i; break;\n\t\tcase 0x3C: return parse_xlml(data.slice(i),o);\n\t\tdefault: break main;\n\t}\n\treturn PRN.to_workbook(data, o);\n}\n\nfunction read_plaintext_raw(data/*:RawData*/, o/*:ParseOpts*/)/*:Workbook*/ {\n\tvar str = \"\", bytes = firstbyte(data, o);\n\tswitch(o.type) {\n\t\tcase 'base64': str = Base64_decode(data); break;\n\t\tcase 'binary': str = data; break;\n\t\tcase 'buffer': str = data.toString('binary'); break;\n\t\tcase 'array': str = cc2str(data); break;\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\tif(bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str);\n\to.type = \"binary\";\n\treturn read_plaintext(str, o);\n}\n\nfunction read_utf16(data/*:RawData*/, o/*:ParseOpts*/)/*:Workbook*/ {\n\tvar d = data;\n\tif(o.type == 'base64') d = Base64_decode(d);\n\tif(typeof ArrayBuffer !== \"undefined\" && data instanceof ArrayBuffer) d = new Uint8Array(data);\n\td = typeof $cptable !== \"undefined\" ? $cptable.utils.decode(1200, d.slice(2), 'str') : (\n\t\t(has_buf && Buffer.isBuffer(data)) ? data.slice(2).toString(\"utf16le\") :\n\t\t(typeof Uint8Array !== \"undefined\" && d instanceof Uint8Array) ? (\n\t\t\ttypeof TextDecoder !== \"undefined\" ? new TextDecoder(\"utf-16le\").decode(d.slice(2)) : utf16lereadu(d.slice(2))\n\t\t) : utf16leread(d.slice(2))\n\t);\n\to.type = \"binary\";\n\treturn read_plaintext(d, o);\n}\n\nfunction bstrify(data/*:string*/)/*:string*/ {\n\treturn !data.match(/[^\\x00-\\x7F]/) ? data : utf8write(data);\n}\n\nfunction read_prn(data, d, o, str) {\n\tif(str) { o.type = \"string\"; return PRN.to_workbook(data, o); }\n\treturn PRN.to_workbook(d, o);\n}\n\nfunction readSync(data/*:RawData*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\treset_cp();\n\tvar o = opts||{};\n\tif(o.codepage && typeof $cptable === \"undefined\") console.error(\"Codepage tables are not loaded.  Non-ASCII characters may not give expected results\");\n\tif(typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) return readSync(new Uint8Array(data), (o = dup(o), o.type = \"array\", o));\n\tif(typeof Uint8Array !== 'undefined' && data instanceof Uint8Array && !o.type) o.type = typeof Deno !== \"undefined\" ? \"buffer\" : \"array\";\n\tvar d = data, n = [0,0,0,0], str = false;\n\tif(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; }\n\t_ssfopts = {};\n\tif(o.dateNF) _ssfopts.dateNF = o.dateNF;\n\tif(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? \"buffer\" : \"base64\";\n\tif(o.type == \"file\") { o.type = has_buf ? \"buffer\" : \"binary\"; d = read_binary(data); if(typeof Uint8Array !== 'undefined' && !has_buf) o.type = \"array\"; }\n\tif(o.type == \"string\") { str = true; o.type = \"binary\"; o.codepage = 65001; d = bstrify(data); }\n\tif(o.type == 'array' && typeof Uint8Array !== 'undefined' && data instanceof Uint8Array && typeof ArrayBuffer !== 'undefined') {\n\t\t// $FlowIgnore\n\t\tvar ab=new ArrayBuffer(3), vu=new Uint8Array(ab); vu.foo=\"bar\";\n\t\t// $FlowIgnore\n\t\tif(!vu.foo) {o=dup(o); o.type='array'; return readSync(ab2a(d), o);}\n\t}\n\tswitch((n = firstbyte(d, o))[0]) {\n\t\tcase 0xD0: if(n[1] === 0xCF && n[2] === 0x11 && n[3] === 0xE0 && n[4] === 0xA1 && n[5] === 0xB1 && n[6] === 0x1A && n[7] === 0xE1) return read_cfb(CFB.read(d, o), o); break;\n\t\tcase 0x09: if(n[1] <= 0x08) return parse_xlscfb(d, o); break;\n\t\tcase 0x3C: return parse_xlml(d, o);\n\t\tcase 0x49:\n\t\t\tif(n[1] === 0x49 && n[2] === 0x2a && n[3] === 0x00) throw new Error(\"TIFF Image File is not a spreadsheet\");\n\t\t\tif(n[1] === 0x44) return read_wb_ID(d, o);\n\t\t\tbreak;\n\t\tcase 0x54: if(n[1] === 0x41 && n[2] === 0x42 && n[3] === 0x4C) return DIF.to_workbook(d, o); break;\n\t\tcase 0x50: return (n[1] === 0x4B && n[2] < 0x09 && n[3] < 0x09) ? read_zip(d, o) : read_prn(data, d, o, str);\n\t\tcase 0xEF: return n[3] === 0x3C ? parse_xlml(d, o) : read_prn(data, d, o, str);\n\t\tcase 0xFF:\n\t\t\tif(n[1] === 0xFE) { return read_utf16(d, o); }\n\t\t\telse if(n[1] === 0x00 && n[2] === 0x02 && n[3] === 0x00) return WK_.to_workbook(d, o);\n\t\t\tbreak;\n\t\tcase 0x00:\n\t\t\tif(n[1] === 0x00) {\n\t\t\t\tif(n[2] >= 0x02 && n[3] === 0x00) return WK_.to_workbook(d, o);\n\t\t\t\tif(n[2] === 0x00 && (n[3] === 0x08 || n[3] === 0x09)) return WK_.to_workbook(d, o);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 0x03: case 0x83: case 0x8B: case 0x8C: return DBF.to_workbook(d, o);\n\t\tcase 0x7B: if(n[1] === 0x5C && n[2] === 0x72 && n[3] === 0x74) return rtf_to_workbook(d, o); break;\n\t\tcase 0x0A: case 0x0D: case 0x20: return read_plaintext_raw(d, o);\n\t\tcase 0x89: if(n[1] === 0x50 && n[2] === 0x4E && n[3] === 0x47) throw new Error(\"PNG Image File is not a spreadsheet\"); break;\n\t\tcase 0x08: if(n[1] === 0xE7) throw new Error(\"Unsupported Multiplan 1.x file!\"); break;\n\t\tcase 0x0C:\n\t\t\tif(n[1] === 0xEC) throw new Error(\"Unsupported Multiplan 2.x file!\");\n\t\t\tif(n[1] === 0xED) throw new Error(\"Unsupported Multiplan 3.x file!\");\n\t\t\tbreak;\n\t}\n\tif(DBF_SUPPORTED_VERSIONS.indexOf(n[0]) > -1 && n[2] <= 12 && n[3] <= 31) return DBF.to_workbook(d, o);\n\treturn read_prn(data, d, o, str);\n}\n\nfunction readFileSync(filename/*:string*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tvar o = opts||{}; o.type = 'file';\n\treturn readSync(filename, o);\n}\nfunction write_cfb_ctr(cfb/*:CFBContainer*/, o/*:WriteOpts*/)/*:any*/ {\n\tswitch(o.type) {\n\t\tcase \"base64\": case \"binary\": break;\n\t\tcase \"buffer\": case \"array\": o.type = \"\"; break;\n\t\tcase \"file\": return write_dl(o.file, CFB.write(cfb, {type:has_buf ? 'buffer' : \"\"}));\n\t\tcase \"string\": throw new Error(\"'string' output type invalid for '\" + o.bookType + \"' files\");\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\treturn CFB.write(cfb, o);\n}\n\nfunction write_zip(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {\n\tswitch(opts.bookType) {\n\t\tcase \"ods\": return write_ods(wb, opts);\n\t\tcase \"numbers\": return write_numbers_iwa(wb, opts);\n\t\tcase \"xlsb\": return write_zip_xlsb(wb, opts);\n\t\tdefault: return write_zip_xlsx(wb, opts);\n\t}\n}\n\n/*:: declare var encrypt_agile:any; */\nfunction write_zip_type(wb/*:Workbook*/, opts/*:?WriteOpts*/)/*:any*/ {\n\tvar o = dup(opts||{});\n\tvar z = write_zip(wb, o);\n\treturn write_zip_denouement(z, o);\n}\nfunction write_zip_typeXLSX(wb/*:Workbook*/, opts/*:?WriteOpts*/)/*:any*/ {\n\tvar o = dup(opts||{});\n\tvar z = write_zip_xlsx(wb, o);\n\treturn write_zip_denouement(z, o);\n}\nfunction write_zip_denouement(z/*:any*/, o/*:?WriteOpts*/)/*:any*/ {\n\tvar oopts = {};\n\tvar ftype = has_buf ? \"nodebuffer\" : (typeof Uint8Array !== \"undefined\" ? \"array\" : \"string\");\n\tif(o.compression) oopts.compression = 'DEFLATE';\n\tif(o.password) oopts.type = ftype;\n\telse switch(o.type) {\n\t\tcase \"base64\": oopts.type = \"base64\"; break;\n\t\tcase \"binary\": oopts.type = \"string\"; break;\n\t\tcase \"string\": throw new Error(\"'string' output type invalid for '\" + o.bookType + \"' files\");\n\t\tcase \"buffer\":\n\t\tcase \"file\": oopts.type = ftype; break;\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\tvar out = z.FullPaths ? CFB.write(z, {fileType:\"zip\", type: /*::(*/{\"nodebuffer\": \"buffer\", \"string\": \"binary\"}/*:: :any)*/[oopts.type] || oopts.type, compression: !!o.compression}) : z.generate(oopts);\n\tif(typeof Deno !== \"undefined\") {\n\t\tif(typeof out == \"string\") {\n\t\t\tif(o.type == \"binary\" || o.type == \"base64\") return out;\n\t\t\tout = new Uint8Array(s2ab(out));\n\t\t}\n\t}\n/*jshint -W083 */\n\tif(o.password && typeof encrypt_agile !== 'undefined') return write_cfb_ctr(encrypt_agile(out, o.password), o); // eslint-disable-line no-undef\n/*jshint +W083 */\n\tif(o.type === \"file\") return write_dl(o.file, out);\n\treturn o.type == \"string\" ? utf8read(/*::(*/out/*:: :any)*/) : out;\n}\n\nfunction write_cfb_type(wb/*:Workbook*/, opts/*:?WriteOpts*/)/*:any*/ {\n\tvar o = opts||{};\n\tvar cfb/*:CFBContainer*/ = write_xlscfb(wb, o);\n\treturn write_cfb_ctr(cfb, o);\n}\n\nfunction write_string_type(out/*:string*/, opts/*:WriteOpts*/, bom/*:?string*/)/*:any*/ {\n\tif(!bom) bom = \"\";\n\tvar o = bom + out;\n\tswitch(opts.type) {\n\t\tcase \"base64\": return Base64_encode(utf8write(o));\n\t\tcase \"binary\": return utf8write(o);\n\t\tcase \"string\": return out;\n\t\tcase \"file\": return write_dl(opts.file, o, 'utf8');\n\t\tcase \"buffer\": {\n\t\t\tif(has_buf) return Buffer_from(o, 'utf8');\n\t\t\telse if(typeof TextEncoder !== \"undefined\") return new TextEncoder().encode(o);\n\t\t\telse return write_string_type(o, {type:'binary'}).split(\"\").map(function(c) { return c.charCodeAt(0); });\n\t\t}\n\t}\n\tthrow new Error(\"Unrecognized type \" + opts.type);\n}\n\nfunction write_stxt_type(out/*:string*/, opts/*:WriteOpts*/)/*:any*/ {\n\tswitch(opts.type) {\n\t\tcase \"base64\": return Base64_encode_pass(out);\n\t\tcase \"binary\": return out;\n\t\tcase \"string\": return out; /* override in sheet_to_txt */\n\t\tcase \"file\": return write_dl(opts.file, out, 'binary');\n\t\tcase \"buffer\": {\n\t\t\tif(has_buf) return Buffer_from(out, 'binary');\n\t\t\telse return out.split(\"\").map(function(c) { return c.charCodeAt(0); });\n\t\t}\n\t}\n\tthrow new Error(\"Unrecognized type \" + opts.type);\n}\n\n/* TODO: test consistency */\nfunction write_binary_type(out, opts/*:WriteOpts*/)/*:any*/ {\n\tswitch(opts.type) {\n\t\tcase \"string\":\n\t\tcase \"base64\":\n\t\tcase \"binary\":\n\t\t\tvar bstr = \"\";\n\t\t\t// $FlowIgnore\n\t\t\tfor(var i = 0; i < out.length; ++i) bstr += String.fromCharCode(out[i]);\n\t\t\treturn opts.type == 'base64' ? Base64_encode(bstr) : opts.type == 'string' ? utf8read(bstr) : bstr;\n\t\tcase \"file\": return write_dl(opts.file, out);\n\t\tcase \"buffer\": return out;\n\t\tdefault: throw new Error(\"Unrecognized type \" + opts.type);\n\t}\n}\n\nfunction writeSyncXLSX(wb/*:Workbook*/, opts/*:?WriteOpts*/) {\n\treset_cp();\n\tcheck_wb(wb);\n\tvar o = dup(opts||{});\n\tif(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; }\n\tif(o.type == \"array\") { o.type = \"binary\"; var out/*:string*/ = (writeSyncXLSX(wb, o)/*:any*/); o.type = \"array\"; return s2ab(out); }\n\treturn write_zip_typeXLSX(wb, o);\n}\n\nfunction writeSync(wb/*:Workbook*/, opts/*:?WriteOpts*/) {\n\treset_cp();\n\tcheck_wb(wb);\n\tvar o = dup(opts||{});\n\tif(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; }\n\tif(o.type == \"array\") { o.type = \"binary\"; var out/*:string*/ = (writeSync(wb, o)/*:any*/); o.type = \"array\"; return s2ab(out); }\n\tvar idx = 0;\n\tif(o.sheet) {\n\t\tif(typeof o.sheet == \"number\") idx = o.sheet;\n\t\telse idx = wb.SheetNames.indexOf(o.sheet);\n\t\tif(!wb.SheetNames[idx]) throw new Error(\"Sheet not found: \" + o.sheet + \" : \" + (typeof o.sheet));\n\t}\n\tswitch(o.bookType || 'xlsb') {\n\t\tcase 'xml':\n\t\tcase 'xlml': return write_string_type(write_xlml(wb, o), o);\n\t\tcase 'slk':\n\t\tcase 'sylk': return write_string_type(SYLK.from_sheet(wb.Sheets[wb.SheetNames[idx]], o, wb), o);\n\t\tcase 'htm':\n\t\tcase 'html': return write_string_type(sheet_to_html(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'txt': return write_stxt_type(sheet_to_txt(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'csv': return write_string_type(sheet_to_csv(wb.Sheets[wb.SheetNames[idx]], o), o, \"\\ufeff\");\n\t\tcase 'dif': return write_string_type(DIF.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'dbf': return write_binary_type(DBF.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'prn': return write_string_type(PRN.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'rtf': return write_string_type(sheet_to_rtf(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'eth': return write_string_type(ETH.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'fods': return write_string_type(write_ods(wb, o), o);\n\t\tcase 'wk1': return write_binary_type(WK_.sheet_to_wk1(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'wk3': return write_binary_type(WK_.book_to_wk3(wb, o), o);\n\t\tcase 'biff2': if(!o.biff) o.biff = 2; /* falls through */\n\t\tcase 'biff3': if(!o.biff) o.biff = 3; /* falls through */\n\t\tcase 'biff4': if(!o.biff) o.biff = 4; return write_binary_type(write_biff_buf(wb, o), o);\n\t\tcase 'biff5': if(!o.biff) o.biff = 5; /* falls through */\n\t\tcase 'biff8':\n\t\tcase 'xla':\n\t\tcase 'xls': if(!o.biff) o.biff = 8; return write_cfb_type(wb, o);\n\t\tcase 'xlsx':\n\t\tcase 'xlsm':\n\t\tcase 'xlam':\n\t\tcase 'xlsb':\n\t\tcase 'numbers':\n\t\tcase 'ods': return write_zip_type(wb, o);\n\t\tdefault: throw new Error (\"Unrecognized bookType |\" + o.bookType + \"|\");\n\t}\n}\n\nfunction resolve_book_type(o/*:WriteFileOpts*/) {\n\tif(o.bookType) return;\n\tvar _BT = {\n\t\t\"xls\": \"biff8\",\n\t\t\"htm\": \"html\",\n\t\t\"slk\": \"sylk\",\n\t\t\"socialcalc\": \"eth\",\n\t\t\"Sh33tJS\": \"WTF\"\n\t};\n\tvar ext = o.file.slice(o.file.lastIndexOf(\".\")).toLowerCase();\n\tif(ext.match(/^\\.[a-z]+$/)) o.bookType = ext.slice(1);\n\to.bookType = _BT[o.bookType] || o.bookType;\n}\n\nfunction writeFileSync(wb/*:Workbook*/, filename/*:string*/, opts/*:?WriteFileOpts*/) {\n\tvar o = opts||{}; o.type = 'file';\n\to.file = filename;\n\tresolve_book_type(o);\n\treturn writeSync(wb, o);\n}\n\nfunction writeFileSyncXLSX(wb/*:Workbook*/, filename/*:string*/, opts/*:?WriteFileOpts*/) {\n\tvar o = opts||{}; o.type = 'file';\n\to.file = filename;\n\tresolve_book_type(o);\n\treturn writeSyncXLSX(wb, o);\n}\n\n\nfunction writeFileAsync(filename/*:string*/, wb/*:Workbook*/, opts/*:?WriteFileOpts*/, cb/*:?(e?:ErrnoError)=>void*/) {\n\tvar o = opts||{}; o.type = 'file';\n\to.file = filename;\n\tresolve_book_type(o);\n\to.type = 'buffer';\n\tvar _cb = cb; if(!(_cb instanceof Function)) _cb = (opts/*:any*/);\n\treturn _fs.writeFile(filename, writeSync(wb, o), _cb);\n}\n/*::\ntype MJRObject = {\n\trow: any;\n\tisempty: boolean;\n};\n*/\nfunction make_json_row(sheet/*:Worksheet*/, r/*:Range*/, R/*:number*/, cols/*:Array<string>*/, header/*:number*/, hdr/*:Array<any>*/, o/*:Sheet2JSONOpts*/)/*:MJRObject*/ {\n\tvar rr = encode_row(R);\n\tvar defval = o.defval, raw = o.raw || !Object.prototype.hasOwnProperty.call(o, \"raw\");\n\tvar isempty = true, dense = (sheet[\"!data\"] != null);\n\tvar row/*:any*/ = (header === 1) ? [] : {};\n\tif(header !== 1) {\n\t\tif(Object.defineProperty) try { Object.defineProperty(row, '__rowNum__', {value:R, enumerable:false}); } catch(e) { row.__rowNum__ = R; }\n\t\telse row.__rowNum__ = R;\n\t}\n\tif(!dense || sheet[\"!data\"][R]) for (var C = r.s.c; C <= r.e.c; ++C) {\n\t\tvar val = dense ? (sheet[\"!data\"][R]||[])[C] : sheet[cols[C] + rr];\n\t\tif(val == null || val.t === undefined) {\n\t\t\tif(defval === undefined) continue;\n\t\t\tif(hdr[C] != null) { row[hdr[C]] = defval; }\n\t\t\tcontinue;\n\t\t}\n\t\tvar v = val.v;\n\t\tswitch(val.t){\n\t\t\tcase 'z': if(v == null) break; continue;\n\t\t\tcase 'e': v = (v == 0 ? null : void 0); break;\n\t\t\tcase 's': case 'b':\n\t\t\tcase 'n': if(!val.z || !fmt_is_date(val.z)) break;\n\t\t\tv = numdate(v); // TODO: date1904 setting should also be stored in worksheet object\n\t\t\tif(typeof v == \"number\") break;\n\t\t\t/* falls through */\n\t\t\tcase 'd': if(!(o && (o.UTC||(o.raw === false)))) v = utc_to_local(new Date(v)); break;\n\t\t\tdefault: throw new Error('unrecognized type ' + val.t);\n\t\t}\n\t\tif(hdr[C] != null) {\n\t\t\tif(v == null) {\n\t\t\t\tif(val.t == \"e\" && v === null) row[hdr[C]] = null;\n\t\t\t\telse if(defval !== undefined) row[hdr[C]] = defval;\n\t\t\t\telse if(raw && v === null) row[hdr[C]] = null;\n\t\t\t\telse continue;\n\t\t\t} else {\n\t\t\t\trow[hdr[C]] = (val.t === 'n' && typeof o.rawNumbers === 'boolean' ? o.rawNumbers : raw) ? v : format_cell(val, v, o);\n\t\t\t}\n\t\t\tif(v != null) isempty = false;\n\t\t}\n\t}\n\treturn { row: row, isempty: isempty };\n}\n\n\nfunction sheet_to_json(sheet/*:Worksheet*/, opts/*:?Sheet2JSONOpts*/) {\n\tif(sheet == null || sheet[\"!ref\"] == null) return [];\n\tvar val = {t:'n',v:0}, header = 0, offset = 1, hdr/*:Array<any>*/ = [], v=0, vv=\"\";\n\tvar r = {s:{r:0,c:0},e:{r:0,c:0}};\n\tvar o = opts || {};\n\tvar range = o.range != null ? o.range : sheet[\"!ref\"];\n\tif(o.header === 1) header = 1;\n\telse if(o.header === \"A\") header = 2;\n\telse if(Array.isArray(o.header)) header = 3;\n\telse if(o.header == null) header = 0;\n\tswitch(typeof range) {\n\t\tcase 'string': r = safe_decode_range(range); break;\n\t\tcase 'number': r = safe_decode_range(sheet[\"!ref\"]); r.s.r = range; break;\n\t\tdefault: r = range;\n\t}\n\tif(header > 0) offset = 0;\n\tvar rr = encode_row(r.s.r);\n\tvar cols/*:Array<string>*/ = [];\n\tvar out/*:Array<any>*/ = [];\n\tvar outi = 0, counter = 0;\n\tvar dense = sheet[\"!data\"] != null;\n\tvar R = r.s.r, C = 0;\n\tvar header_cnt = {};\n\tif(dense && !sheet[\"!data\"][R]) sheet[\"!data\"][R] = [];\n\tvar colinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\tif(((colinfo[C]||{}).hidden)) continue;\n\t\tcols[C] = encode_col(C);\n\t\tval = dense ? sheet[\"!data\"][R][C] : sheet[cols[C] + rr];\n\t\tswitch(header) {\n\t\t\tcase 1: hdr[C] = C - r.s.c; break;\n\t\t\tcase 2: hdr[C] = cols[C]; break;\n\t\t\tcase 3: hdr[C] = o.header[C - r.s.c]; break;\n\t\t\tdefault:\n\t\t\t\tif(val == null) val = {w: \"__EMPTY\", t: \"s\"};\n\t\t\t\tvv = v = format_cell(val, null, o);\n\t\t\t\tcounter = header_cnt[v] || 0;\n\t\t\t\tif(!counter) header_cnt[v] = 1;\n\t\t\t\telse {\n\t\t\t\t\tdo { vv = v + \"_\" + (counter++); } while(header_cnt[vv]); header_cnt[v] = counter;\n\t\t\t\t\theader_cnt[vv] = 1;\n\t\t\t\t}\n\t\t\t\thdr[C] = vv;\n\t\t}\n\t}\n\tfor (R = r.s.r + offset; R <= r.e.r; ++R) {\n\t\tif ((rowinfo[R]||{}).hidden) continue;\n\t\tvar row = make_json_row(sheet, r, R, cols, header, hdr, o);\n\t\tif((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) out[outi++] = row.row;\n\t}\n\tout.length = outi;\n\treturn out;\n}\n\nvar qreg = /\"/g;\nfunction make_csv_row(sheet/*:Worksheet*/, r/*:Range*/, R/*:number*/, cols/*:Array<string>*/, fs/*:number*/, rs/*:number*/, FS/*:string*/, o/*:Sheet2CSVOpts*/)/*:?string*/ {\n\tvar isempty = true;\n\tvar row/*:Array<string>*/ = [], txt = \"\", rr = encode_row(R);\n\tvar dense = sheet[\"!data\"] != null;\n\tvar datarow = dense && sheet[\"!data\"][R] || [];\n\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\tif (!cols[C]) continue;\n\t\tvar val = dense ? datarow[C]: sheet[cols[C] + rr];\n\t\tif(val == null) txt = \"\";\n\t\telse if(val.v != null) {\n\t\t\tisempty = false;\n\t\t\ttxt = ''+(o.rawNumbers && val.t == \"n\" ? val.v : format_cell(val, null, o));\n\t\t\tfor(var i = 0, cc = 0; i !== txt.length; ++i) if((cc = txt.charCodeAt(i)) === fs || cc === rs || cc === 34 || o.forceQuotes) {txt = \"\\\"\" + txt.replace(qreg, '\"\"') + \"\\\"\"; break; }\n\t\t\tif(txt == \"ID\") txt = '\"ID\"';\n\t\t} else if(val.f != null && !val.F) {\n\t\t\tisempty = false;\n\t\t\ttxt = '=' + val.f; if(txt.indexOf(\",\") >= 0) txt = '\"' + txt.replace(qreg, '\"\"') + '\"';\n\t\t} else txt = \"\";\n\t\t/* NOTE: Excel CSV does not support array formulae */\n\t\trow.push(txt);\n\t}\n\tif(o.strip) while(row[row.length - 1] === \"\") --row.length;\n\tif(o.blankrows === false && isempty) return null;\n\treturn row.join(FS);\n}\n\nfunction sheet_to_csv(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/)/*:string*/ {\n\tvar out/*:Array<string>*/ = [];\n\tvar o = opts == null ? {} : opts;\n\tif(sheet == null || sheet[\"!ref\"] == null) return \"\";\n\tvar r = safe_decode_range(sheet[\"!ref\"]);\n\tvar FS = o.FS !== undefined ? o.FS : \",\", fs = FS.charCodeAt(0);\n\tvar RS = o.RS !== undefined ? o.RS : \"\\n\", rs = RS.charCodeAt(0);\n\tvar row = \"\", cols/*:Array<string>*/ = [];\n\tvar colinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C);\n\tvar w = 0;\n\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\tif ((rowinfo[R]||{}).hidden) continue;\n\t\trow = make_csv_row(sheet, r, R, cols, fs, rs, FS, o);\n\t\tif(row == null) { continue; }\n\t\tif(row || (o.blankrows !== false)) out.push((w++ ? RS : \"\") + row);\n\t}\n\treturn out.join(\"\");\n}\n\nfunction sheet_to_txt(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) {\n\tif(!opts) opts = {}; opts.FS = \"\\t\"; opts.RS = \"\\n\";\n\tvar s = sheet_to_csv(sheet, opts);\n\tif(typeof $cptable == 'undefined' || opts.type == 'string') return s;\n\tvar o = $cptable.utils.encode(1200, s, 'str');\n\treturn String.fromCharCode(255) + String.fromCharCode(254) + o;\n}\n\nfunction sheet_to_formulae(sheet/*:Worksheet*/)/*:Array<string>*/ {\n\tvar y = \"\", x, val=\"\";\n\tif(sheet == null || sheet[\"!ref\"] == null) return [];\n\tvar r = safe_decode_range(sheet['!ref']), rr = \"\", cols/*:Array<string>*/ = [], C;\n\tvar cmds/*:Array<string>*/ = [];\n\tvar dense = sheet[\"!data\"] != null;\n\tfor(C = r.s.c; C <= r.e.c; ++C) cols[C] = encode_col(C);\n\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\trr = encode_row(R);\n\t\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\t\ty = cols[C] + rr;\n\t\t\tx = dense ? (sheet[\"!data\"][R]||[])[C] : sheet[y];\n\t\t\tval = \"\";\n\t\t\tif(x === undefined) continue;\n\t\t\telse if(x.F != null) {\n\t\t\t\ty = x.F;\n\t\t\t\tif(!x.f) continue;\n\t\t\t\tval = x.f;\n\t\t\t\tif(y.indexOf(\":\") == -1) y = y + \":\" + y;\n\t\t\t}\n\t\t\tif(x.f != null) val = x.f;\n\t\t\telse if(x.t == 'z') continue;\n\t\t\telse if(x.t == 'n' && x.v != null) val = \"\" + x.v;\n\t\t\telse if(x.t == 'b') val = x.v ? \"TRUE\" : \"FALSE\";\n\t\t\telse if(x.w !== undefined) val = \"'\" + x.w;\n\t\t\telse if(x.v === undefined) continue;\n\t\t\telse if(x.t == 's') val = \"'\" + x.v;\n\t\t\telse val = \"\"+x.v;\n\t\t\tcmds[cmds.length] = y + \"=\" + val;\n\t\t}\n\t}\n\treturn cmds;\n}\n\nfunction sheet_add_json(_ws/*:?Worksheet*/, js/*:Array<any>*/, opts)/*:Worksheet*/ {\n\tvar o = opts || {};\n\tvar dense = _ws ? (_ws[\"!data\"] != null) : o.dense;\n\tif(DENSE != null && dense == null) dense = DENSE;\n\tvar offset = +!o.skipHeader;\n\tvar ws/*:Worksheet*/ = _ws || ({});\n\tif(!_ws && dense) ws[\"!data\"] = [];\n\tvar _R = 0, _C = 0;\n\tif(ws && o.origin != null) {\n\t\tif(typeof o.origin == 'number') _R = o.origin;\n\t\telse {\n\t\t\tvar _origin/*:CellAddress*/ = typeof o.origin == \"string\" ? decode_cell(o.origin) : o.origin;\n\t\t\t_R = _origin.r; _C = _origin.c;\n\t\t}\n\t}\n\tvar range/*:Range*/ = ({s: {c:0, r:0}, e: {c:_C, r:_R + js.length - 1 + offset}}/*:any*/);\n\tif(ws['!ref']) {\n\t\tvar _range = safe_decode_range(ws['!ref']);\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\tif(_R == -1) { _R = _range.e.r + 1; range.e.r = _R + js.length - 1 + offset; }\n\t} else {\n\t\tif(_R == -1) { _R = 0; range.e.r = js.length - 1 + offset; }\n\t}\n\tvar hdr/*:Array<string>*/ = o.header || [], C = 0;\n\tvar ROW = [];\n\tjs.forEach(function (JS, R/*:number*/) {\n\t\tif(dense && !ws[\"!data\"][_R + R + offset]) ws[\"!data\"][_R + R + offset] = [];\n\t\tif(dense) ROW = ws[\"!data\"][_R + R + offset];\n\t\tkeys(JS).forEach(function(k) {\n\t\t\tif((C=hdr.indexOf(k)) == -1) hdr[C=hdr.length] = k;\n\t\t\tvar v = JS[k];\n\t\t\tvar t = 'z';\n\t\t\tvar z = \"\";\n\t\t\tvar ref = dense ? \"\" : (encode_col(_C + C) + encode_row(_R + R + offset));\n\t\t\tvar cell/*:Cell*/ = dense ? ROW[_C + C] : ws[ref];\n\t\t\tif(v && typeof v === 'object' && !(v instanceof Date)){\n\t\t\t\tif(dense) ROW[_C + C] = v;\n\t\t\t\telse ws[ref] = v;\n\t\t\t} else {\n\t\t\t\tif(typeof v == 'number') t = 'n';\n\t\t\t\telse if(typeof v == 'boolean') t = 'b';\n\t\t\t\telse if(typeof v == 'string') t = 's';\n\t\t\t\telse if(v instanceof Date) {\n\t\t\t\t\tt = 'd';\n\t\t\t\t\tif(!o.UTC) v = local_to_utc(v);\n\t\t\t\t\tif(!o.cellDates) { t = 'n'; v = datenum(v); }\n\t\t\t\t\tz = (cell != null && cell.z && fmt_is_date(cell.z)) ? cell.z : (o.dateNF || table_fmt[14]);\n\t\t\t\t}\n\t\t\t\telse if(v === null && o.nullError) { t = 'e'; v = 0; }\n\t\t\t\tif(!cell) {\n\t\t\t\t\tif(!dense) ws[ref] = cell = ({t:t, v:v}/*:any*/);\n\t\t\t\t\telse ROW[_C + C] = cell = ({t:t, v:v}/*:any*/);\n\t\t\t\t} else {\n\t\t\t\t\tcell.t = t; cell.v = v;\n\t\t\t\t\tdelete cell.w; delete cell.R;\n\t\t\t\t\tif(z) cell.z = z;\n\t\t\t\t}\n\t\t\t\tif(z) cell.z = z;\n\t\t\t}\n\t\t});\n\t});\n\trange.e.c = Math.max(range.e.c, _C + hdr.length - 1);\n\tvar __R = encode_row(_R);\n\tif(dense && !ws[\"!data\"][_R]) ws[\"!data\"][_R] = [];\n\tif(offset) for(C = 0; C < hdr.length; ++C) {\n\t\tif(dense) ws[\"!data\"][_R][C + _C] = {t:'s', v:hdr[C]};\n\t\telse ws[encode_col(C + _C) + __R] = {t:'s', v:hdr[C]};\n\t}\n\tws['!ref'] = encode_range(range);\n\treturn ws;\n}\nfunction json_to_sheet(js/*:Array<any>*/, opts)/*:Worksheet*/ { return sheet_add_json(null, js, opts); }\n\n/* get cell, creating a stub if necessary */\nfunction ws_get_cell_stub(ws/*:Worksheet*/, R, C/*:?number*/)/*:Cell*/ {\n\t/* A1 cell address */\n\tif(typeof R == \"string\") {\n\t\tif(ws[\"!data\"] != null) {\n\t\t\tvar RC = decode_cell(R);\n\t\t\tif(!ws[\"!data\"][RC.r]) ws[\"!data\"][RC.r] = [];\n\t\t\treturn ws[\"!data\"][RC.r][RC.c] || (ws[\"!data\"][RC.r][RC.c] = {t:'z'});\n\t\t}\n\t\treturn ws[R] || (ws[R] = {t:'z'});\n\t}\n\t/* cell address object */\n\tif(typeof R != \"number\") return ws_get_cell_stub(ws, encode_cell(R));\n\t/* R and C are 0-based indices */\n\treturn ws_get_cell_stub(ws, encode_col(C||0) + encode_row(R));\n}\n\n/* find sheet index for given name / validate index */\nfunction wb_sheet_idx(wb/*:Workbook*/, sh/*:number|string*/) {\n\tif(typeof sh == \"number\") {\n\t\tif(sh >= 0 && wb.SheetNames.length > sh) return sh;\n\t\tthrow new Error(\"Cannot find sheet # \" + sh);\n\t} else if(typeof sh == \"string\") {\n\t\tvar idx = wb.SheetNames.indexOf(sh);\n\t\tif(idx > -1) return idx;\n\t\tthrow new Error(\"Cannot find sheet name |\" + sh + \"|\");\n\t} else throw new Error(\"Cannot find sheet |\" + sh + \"|\");\n}\n\n/* simple blank or single-sheet workbook object */\nfunction book_new(ws/*:?Worksheet*/, wsname/*:?string*/)/*:Workbook*/ {\n\tvar wb = { SheetNames: [], Sheets: {} };\n\tif(ws) book_append_sheet(wb, ws, wsname || \"Sheet1\");\n\treturn wb;\n}\n\n/* add a worksheet to the end of a given workbook */\nfunction book_append_sheet(wb/*:Workbook*/, ws/*:Worksheet*/, name/*:?string*/, roll/*:?boolean*/)/*:string*/ {\n\tvar i = 1;\n\tif(!name) for(; i <= 0xFFFF; ++i, name = undefined) if(wb.SheetNames.indexOf(name = \"Sheet\" + i) == -1) break;\n\tif(!name || wb.SheetNames.length >= 0xFFFF) throw new Error(\"Too many worksheets\");\n\tif(roll && wb.SheetNames.indexOf(name) >= 0 && name.length < 32) {\n\t\tvar m = name.match(/\\d+$/); // at this point, name length is capped at 32\n\t\ti = m && +m[0] || 0;\n\t\tvar root = m && name.slice(0, m.index) || name;\n\t\tfor(++i; i <= 0xFFFF; ++i) if(wb.SheetNames.indexOf(name = root + i) == -1) break;\n\t}\n\tcheck_ws_name(name);\n\tif(wb.SheetNames.indexOf(name) >= 0) throw new Error(\"Worksheet with name |\" + name + \"| already exists!\");\n\n\twb.SheetNames.push(name);\n\twb.Sheets[name] = ws;\n\treturn name;\n}\n\n/* set sheet visibility (visible/hidden/very hidden) */\nfunction book_set_sheet_visibility(wb/*:Workbook*/, sh/*:number|string*/, vis/*:number*/) {\n\tif(!wb.Workbook) wb.Workbook = {};\n\tif(!wb.Workbook.Sheets) wb.Workbook.Sheets = [];\n\n\tvar idx = wb_sheet_idx(wb, sh);\n\t// $FlowIgnore\n\tif(!wb.Workbook.Sheets[idx]) wb.Workbook.Sheets[idx] = {};\n\n\tswitch(vis) {\n\t\tcase 0: case 1: case 2: break;\n\t\tdefault: throw new Error(\"Bad sheet visibility setting \" + vis);\n\t}\n\t// $FlowIgnore\n\twb.Workbook.Sheets[idx].Hidden = vis;\n}\n\n/* set number format */\nfunction cell_set_number_format(cell/*:Cell*/, fmt/*:string|number*/) {\n\tcell.z = fmt;\n\treturn cell;\n}\n\n/* set cell hyperlink */\nfunction cell_set_hyperlink(cell/*:Cell*/, target/*:string*/, tooltip/*:?string*/) {\n\tif(!target) {\n\t\tdelete cell.l;\n\t} else {\n\t\tcell.l = ({ Target: target }/*:Hyperlink*/);\n\t\tif(tooltip) cell.l.Tooltip = tooltip;\n\t}\n\treturn cell;\n}\nfunction cell_set_internal_link(cell/*:Cell*/, range/*:string*/, tooltip/*:?string*/) { return cell_set_hyperlink(cell, \"#\" + range, tooltip); }\n\n/* add to cell comments */\nfunction cell_add_comment(cell/*:Cell*/, text/*:string*/, author/*:?string*/) {\n\tif(!cell.c) cell.c = [];\n\tcell.c.push({t:text, a:author||\"SheetJS\"});\n}\n\n/* set array formula and flush related cells */\nfunction sheet_set_array_formula(ws/*:Worksheet*/, range, formula/*:string*/, dynamic/*:boolean*/) {\n\tvar rng = typeof range != \"string\" ? range : safe_decode_range(range);\n\tvar rngstr = typeof range == \"string\" ? range : encode_range(range);\n\tfor(var R = rng.s.r; R <= rng.e.r; ++R) for(var C = rng.s.c; C <= rng.e.c; ++C) {\n\t\tvar cell = ws_get_cell_stub(ws, R, C);\n\t\tcell.t = 'n';\n\t\tcell.F = rngstr;\n\t\tdelete cell.v;\n\t\tif(R == rng.s.r && C == rng.s.c) {\n\t\t\tcell.f = formula;\n\t\t\tif(dynamic) cell.D = true;\n\t\t}\n\t}\n\tvar wsr = decode_range(ws[\"!ref\"]);\n\tif(wsr.s.r > rng.s.r) wsr.s.r = rng.s.r;\n\tif(wsr.s.c > rng.s.c) wsr.s.c = rng.s.c;\n\tif(wsr.e.r < rng.e.r) wsr.e.r = rng.e.r;\n\tif(wsr.e.c < rng.e.c) wsr.e.c = rng.e.c;\n\tws[\"!ref\"] = encode_range(wsr);\n\treturn ws;\n}\n\nvar utils/*:any*/ = {\n\tencode_col: encode_col,\n\tencode_row: encode_row,\n\tencode_cell: encode_cell,\n\tencode_range: encode_range,\n\tdecode_col: decode_col,\n\tdecode_row: decode_row,\n\tsplit_cell: split_cell,\n\tdecode_cell: decode_cell,\n\tdecode_range: decode_range,\n\tformat_cell: format_cell,\n\tsheet_new: sheet_new,\n\tsheet_add_aoa: sheet_add_aoa,\n\tsheet_add_json: sheet_add_json,\n\tsheet_add_dom: sheet_add_dom,\n\taoa_to_sheet: aoa_to_sheet,\n\tjson_to_sheet: json_to_sheet,\n\ttable_to_sheet: parse_dom_table,\n\ttable_to_book: table_to_book,\n\tsheet_to_csv: sheet_to_csv,\n\tsheet_to_txt: sheet_to_txt,\n\tsheet_to_json: sheet_to_json,\n\tsheet_to_html: sheet_to_html,\n\tsheet_to_formulae: sheet_to_formulae,\n\tsheet_to_row_object_array: sheet_to_json,\n\tsheet_get_cell: ws_get_cell_stub,\n\tbook_new: book_new,\n\tbook_append_sheet: book_append_sheet,\n\tbook_set_sheet_visibility: book_set_sheet_visibility,\n\tcell_set_number_format: cell_set_number_format,\n\tcell_set_hyperlink: cell_set_hyperlink,\n\tcell_set_internal_link: cell_set_internal_link,\n\tcell_add_comment: cell_add_comment,\n\tsheet_set_array_formula: sheet_set_array_formula,\n\tconsts: {\n\t\tSHEET_VISIBLE: 0,\n\t\tSHEET_HIDDEN: 1,\n\t\tSHEET_VERY_HIDDEN: 2\n\t}\n};\n\nvar _Readable;\nfunction set_readable(R) { _Readable = R; }\n\nfunction write_csv_stream(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) {\n\tvar stream = _Readable();\n\tvar o = opts == null ? {} : opts;\n\tif(sheet == null || sheet[\"!ref\"] == null) { stream.push(null); return stream; }\n\tvar r = safe_decode_range(sheet[\"!ref\"]);\n\tvar FS = o.FS !== undefined ? o.FS : \",\", fs = FS.charCodeAt(0);\n\tvar RS = o.RS !== undefined ? o.RS : \"\\n\", rs = RS.charCodeAt(0);\n\tvar row/*:?string*/ = \"\", cols/*:Array<string>*/ = [];\n\tvar colinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo/*:Array<RowInfo>*/ = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C);\n\tvar R = r.s.r;\n\tvar BOM = false, w = 0;\n\tstream._read = function() {\n\t\tif(!BOM) { BOM = true; return stream.push(\"\\uFEFF\"); }\n\t\twhile(R <= r.e.r) {\n\t\t\t++R;\n\t\t\tif ((rowinfo[R-1]||{}).hidden) continue;\n\t\t\trow = make_csv_row(sheet, r, R-1, cols, fs, rs, FS, o);\n\t\t\tif(row != null) {\n\t\t\t\tif(row || (o.blankrows !== false)) return stream.push((w++ ? RS : \"\") + row);\n\t\t\t}\n\t\t}\n\t\treturn stream.push(null);\n\t};\n\treturn stream;\n}\n\nfunction write_html_stream(ws/*:Worksheet*/, opts/*:?Sheet2HTMLOpts*/) {\n\tvar stream = _Readable();\n\n\tvar o = opts || {};\n\tvar header = o.header != null ? o.header : HTML_BEGIN;\n\tvar footer = o.footer != null ? o.footer : HTML_END;\n\tstream.push(header);\n\tvar r = decode_range(ws['!ref']);\n\tstream.push(make_html_preamble(ws, r, o));\n\tvar R = r.s.r;\n\tvar end = false;\n\tstream._read = function() {\n\t\tif(R > r.e.r) {\n\t\t\tif(!end) { end = true; stream.push(\"</table>\" + footer); }\n\t\t\treturn stream.push(null);\n\t\t}\n\t\twhile(R <= r.e.r) {\n\t\t\tstream.push(make_html_row(ws, r, R, o));\n\t\t\t++R;\n\t\t\tbreak;\n\t\t}\n\t};\n\treturn stream;\n}\n\nfunction write_json_stream(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) {\n\tvar stream = _Readable({objectMode:true});\n\n\tif(sheet == null || sheet[\"!ref\"] == null) { stream.push(null); return stream; }\n\tvar val = {t:'n',v:0}, header = 0, offset = 1, hdr/*:Array<any>*/ = [], v=0, vv=\"\";\n\tvar r = {s:{r:0,c:0},e:{r:0,c:0}};\n\tvar o = opts || {};\n\tvar range = o.range != null ? o.range : sheet[\"!ref\"];\n\tif(o.header === 1) header = 1;\n\telse if(o.header === \"A\") header = 2;\n\telse if(Array.isArray(o.header)) header = 3;\n\tswitch(typeof range) {\n\t\tcase 'string': r = safe_decode_range(range); break;\n\t\tcase 'number': r = safe_decode_range(sheet[\"!ref\"]); r.s.r = range; break;\n\t\tdefault: r = range;\n\t}\n\tif(header > 0) offset = 0;\n\tvar rr = encode_row(r.s.r);\n\tvar cols/*:Array<string>*/ = [];\n\tvar counter = 0;\n\tvar dense = sheet[\"!data\"] != null;\n\tvar R = r.s.r, C = 0;\n\tvar header_cnt = {};\n\tif(dense && !sheet[\"!data\"][R]) sheet[\"!data\"][R] = [];\n\tvar colinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo/*:Array<RowInfo>*/ = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\tif(((colinfo[C]||{}).hidden)) continue;\n\t\tcols[C] = encode_col(C);\n\t\tval = dense ? sheet[\"!data\"][R][C] : sheet[cols[C] + rr];\n\t\tswitch(header) {\n\t\t\tcase 1: hdr[C] = C - r.s.c; break;\n\t\t\tcase 2: hdr[C] = cols[C]; break;\n\t\t\tcase 3: hdr[C] = o.header[C - r.s.c]; break;\n\t\t\tdefault:\n\t\t\t\tif(val == null) val = {w: \"__EMPTY\", t: \"s\"};\n\t\t\t\tvv = v = format_cell(val, null, o);\n\t\t\t\tcounter = header_cnt[v] || 0;\n\t\t\t\tif(!counter) header_cnt[v] = 1;\n\t\t\t\telse {\n\t\t\t\t\tdo { vv = v + \"_\" + (counter++); } while(header_cnt[vv]); header_cnt[v] = counter;\n\t\t\t\t\theader_cnt[vv] = 1;\n\t\t\t\t}\n\t\t\t\thdr[C] = vv;\n\t\t}\n\t}\n\tR = r.s.r + offset;\n\tstream._read = function() {\n\t\twhile(R <= r.e.r) {\n\t\t\tif ((rowinfo[R-1]||{}).hidden) continue;\n\t\t\tvar row = make_json_row(sheet, r, R, cols, header, hdr, o);\n\t\t\t++R;\n\t\t\tif((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) {\n\t\t\t\tstream.push(row.row);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\treturn stream.push(null);\n\t};\n\treturn stream;\n}\n\nvar __stream = {\n\tto_json: write_json_stream,\n\tto_html: write_html_stream,\n\tto_csv: write_csv_stream,\n\tset_readable: set_readable\n};\nexport const version = XLSX.version;\nexport {\n\tparse_xlscfb,\n\tparse_zip,\n\treadSync as read,\n\treadFileSync as readFile,\n\treadFileSync,\n\twriteSync as write,\n\twriteFileSync as writeFile,\n\twriteFileSync,\n\twriteFileAsync,\n\twriteSyncXLSX as writeXLSX,\n\twriteFileSyncXLSX as writeFileXLSX,\n\tutils,\n\tset_fs,\n\tset_cptable,\n\t__stream as stream,\n\tSSF,\n\tCFB\n};\nexport default {\n\tparse_xlscfb,\n\tparse_zip,\n\tread: readSync,\n\treadFile: readFileSync,\n\treadFileSync,\n\twrite: writeSync,\n\twriteFile: writeFileSync,\n\twriteFileSync,\n\twriteFileAsync,\n\twriteXLSX: writeSyncXLSX,\n\twriteFileXLSX: writeFileSyncXLSX,\n\tutils,\n\tset_fs,\n\tset_cptable,\n\tstream: __stream,\n\tSSF,\n\tCFB\n}\n","import { modifier } from 'ember-modifier';\nexport default modifier<Element, [(inserted: Element) => void, (destroying: Element) => void]>(\n  (element, [inserted, destroying]) => {\n    inserted(element);\n    return () => {\n      if (destroying) {\n        destroying(element);\n      }\n    };\n  },\n  { eager: false },\n);\n","import * as XLSX from 'xlsx';\nimport type { DeviceColumn, DeviceData } from '../components/aditools-device-table.ts';\nimport { downloadFile } from './download.ts';\n\n////////////////////////////////////////////////////////////////////////////////////\n// export-to-excel - Class containing functions for export to excel (xlsx format) //\n////////////////////////////////////////////////////////////////////////////////////\n\nexport default {\n  ////////////////////////////////////////////////////////////////////////////////\n  // Functions                                                                  //\n  ////////////////////////////////////////////////////////////////////////////////\n\n  getVersion(): string {\n    return XLSX.version;\n  },\n  exportTable(\n    columns: DeviceColumn<DeviceData>[],\n    rows: DeviceData[],\n    locale: string,\n    dataSourceName: string | undefined,\n  ): void {\n    const workBook = XLSX.utils.book_new();\n    const now = new Date();\n    const createDateStamp =\n      ('0' + (now.getMonth() + 1)).slice(-2) +\n      '/' +\n      ('0' + now.getDate()).slice(-2) +\n      '/' +\n      now.getFullYear() +\n      ' ' +\n      ('0' + (((now.getHours() + 11) % 12) + 1)).slice(-2) +\n      ':' +\n      ('0' + now.getMinutes()).slice(-2) +\n      ':' +\n      ('0' + now.getSeconds()).slice(-2) +\n      ' ' +\n      (now.getHours() >= 12 ? 'PM' : 'AM');\n    workBook.Props = {\n      Title: 'Table Export',\n      Subject: 'Exporting Table Data',\n      CreatedDate: now,\n    };\n    workBook.SheetNames.push('Cover');\n    workBook.SheetNames.push('Web Display');\n    workBook.SheetNames.push('Raw Data Display');\n\n    // Build Cover\n    const coverData: Array<Array<string>> = [];\n    coverData.push(['Date Created:', createDateStamp]);\n    coverData.push(['Product Type:', dataSourceName ? dataSourceName : '']);\n\n    // Build Display and Raw Worksheets\n    const displaySheetData: Array<Array<string>> = [];\n    const rawSheetData: Array<Array<string | number>> = [];\n    const headerNameRowLine: Array<string> = [];\n    const headerContextRowLine: Array<string> = [];\n    const headerUnitRowLine: Array<string> = [];\n\n    columns.forEach((column) => {\n      const name = column.name + (column.minMaxTyp ? ` (${column.minMaxTyp})` : '');\n      const context = column.fieldContext ? column.fieldContext : '';\n      const unit = column.unit && column.unit !== 'n/a' ? column.unit : '';\n      headerNameRowLine.push(name);\n      headerContextRowLine.push(context);\n      headerUnitRowLine.push(unit);\n    });\n\n    const hasContextRow = headerContextRowLine.filter((item) => item !== '').length > 0;\n    displaySheetData.push(headerNameRowLine);\n    rawSheetData.push(headerNameRowLine);\n    if (hasContextRow) {\n      displaySheetData.push(headerContextRowLine);\n      rawSheetData.push(headerContextRowLine);\n    }\n    displaySheetData.push(headerUnitRowLine);\n    rawSheetData.push(headerUnitRowLine);\n    rows.forEach((row) => {\n      const rawRow: Array<string | number> = [];\n      const displayRow: Array<string> = [];\n      columns.forEach((column) => {\n        if (column.id !== '0') {\n          const displayId = row['display_' + column.id] ? 'display_' + column.id : (column.id as string);\n          const rawId = row['value_' + column.id] ? 'value_' + column.id : (column.id as string);\n          const displayField: string = row[displayId]\n            ? Array.isArray(row[displayId])\n              ? ((row[displayId] as Array<unknown>).join(', ') as string)\n              : (row[displayId] as string)\n            : '';\n          const rawField: string | number = row[rawId]\n            ? Array.isArray(row[rawId])\n              ? ((row[rawId] as Array<unknown>).join(', ') as string)\n              : typeof row[rawId] === 'number'\n                ? (row[rawId] as number)\n                : (row[rawId] as string)\n            : '';\n          displayRow.push(displayField);\n          rawRow.push(rawField);\n        } else {\n          displayRow.push(row['partNumber'] as string);\n          rawRow.push(row['partNumber'] as string);\n        }\n      });\n      displaySheetData.push(displayRow);\n      rawSheetData.push(rawRow);\n    });\n    workBook.Sheets['Cover'] = XLSX.utils.aoa_to_sheet(coverData);\n    workBook.Sheets['Web Display'] = XLSX.utils.aoa_to_sheet(displaySheetData);\n    workBook.Sheets['Raw Data Display'] = XLSX.utils.aoa_to_sheet(rawSheetData);\n\n    // Add links to the part numbers\n    const wRange = XLSX.utils.decode_range(workBook.Sheets['Web Display']['!ref'] as string);\n    const rowCount = wRange.e.r - wRange.s.r + 1;\n    const dataStartRow = hasContextRow ? 4 : 3;\n    for (let i = dataStartRow; i <= rowCount; i++) {\n      const cell = 'A' + i.toString();\n      workBook.Sheets['Web Display'][cell].l = {\n        Target: 'https://www.analog.com/' + locale + '/' + workBook.Sheets['Web Display'][cell].v,\n      };\n      workBook.Sheets['Raw Data Display'][cell].l = {\n        Target: 'https://www.analog.com/' + locale + '/' + workBook.Sheets['Raw Data Display'][cell].v,\n      };\n    }\n\n    // Format Column Widths for Cover\n    let columnMaxLength: Array<number> = [];\n    coverData.forEach((arr) => {\n      arr.forEach((value, key) => {\n        columnMaxLength[key] = Math.max(columnMaxLength[key] ?? 0, value.length);\n      });\n    });\n    workBook.Sheets['Cover']['!cols'] = columnMaxLength.map((width) => {\n      return { width: width + 2 };\n    });\n\n    // Format Column Widths for Web Display\n    columnMaxLength = [];\n    displaySheetData.forEach((arr) => {\n      arr.forEach((value, key) => {\n        columnMaxLength[key] = Math.max(columnMaxLength[key] ?? 0, value.length);\n      });\n    });\n    workBook.Sheets['Web Display']['!cols'] = columnMaxLength.map((width) => {\n      return { width: width + 2 };\n    });\n\n    // Format Column Widths for Raw Display\n    columnMaxLength = [];\n    rawSheetData.forEach((arr) => {\n      arr.forEach((value, key) => {\n        let len = 0;\n        switch (typeof value) {\n          case 'number':\n            len = 10;\n            break;\n          case 'string':\n            len = value.length;\n            break;\n          default:\n            len = 10;\n            break;\n        }\n        columnMaxLength[key] = Math.max(columnMaxLength[key] ?? 0, len);\n      });\n    });\n    workBook.Sheets['Raw Data Display']['!cols'] = columnMaxLength.map((width) => {\n      return { width: width + 2 };\n    });\n    downloadFile(\n      'application/octet-stream',\n      'Export.xlsx',\n      new Blob([XLSX.write(workBook, { type: 'array', bookType: 'xlsx' })]),\n    );\n  },\n};\n","// Remove extension of Navigator (and code below that uses msSaveBlob) when we're really, truly done with IE11 support\ndeclare global {\n  interface Navigator {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    msSaveBlob: (blob: any, defaultName?: string) => boolean;\n  }\n}\n\nexport function downloadFile(contentType: string, fileName: string, fileData: Blob | null): boolean {\n  let success = false;\n  if (fileData) {\n    const blob = new Blob([fileData], { type: contentType });\n    if (typeof window.navigator.msSaveBlob !== 'undefined') {\n      window.navigator.msSaveBlob(blob, fileName);\n    } else {\n      const URL = window.URL || window.webkitURL;\n      const downloadUrl: string = URL.createObjectURL(blob);\n\n      if (fileName) {\n        const a = document.createElement('a');\n        a.setAttribute('id', 'download-design-link');\n        if (typeof a.download === 'undefined') {\n          window.location.href = downloadUrl;\n        } else {\n          a.href = downloadUrl;\n          a.download = fileName;\n          a.click();\n        }\n      } else {\n        window.location.href = downloadUrl;\n      }\n      URL.revokeObjectURL(downloadUrl);\n    }\n    success = true;\n  }\n\n  return success;\n}\n","/**!\n * Sortable 1.15.3\n * @author\tRubaXa   <trash@rubaxa.org>\n * @author\towenm    <owen23355@gmail.com>\n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    if (enumerableOnly) {\n      symbols = symbols.filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n      });\n    }\n    keys.push.apply(keys, symbols);\n  }\n  return keys;\n}\nfunction _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n    if (i % 2) {\n      ownKeys(Object(source), true).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n  return target;\n}\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n  return _typeof(obj);\n}\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n  return obj;\n}\nfunction _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n  return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n  return target;\n}\nfunction _objectWithoutProperties(source, excluded) {\n  if (source == null) return {};\n  var target = _objectWithoutPropertiesLoose(source, excluded);\n  var key, i;\n  if (Object.getOwnPropertySymbols) {\n    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n    for (i = 0; i < sourceSymbolKeys.length; i++) {\n      key = sourceSymbolKeys[i];\n      if (excluded.indexOf(key) >= 0) continue;\n      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n      target[key] = source[key];\n    }\n  }\n  return target;\n}\nfunction _toConsumableArray(arr) {\n  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n  return arr2;\n}\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar version = \"1.15.3\";\n\nfunction userAgent(pattern) {\n  if (typeof window !== 'undefined' && window.navigator) {\n    return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n  }\n}\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n  capture: false,\n  passive: false\n};\nfunction on(el, event, fn) {\n  el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction off(el, event, fn) {\n  el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction matches( /**HTMLElement*/el, /**String*/selector) {\n  if (!selector) return;\n  selector[0] === '>' && (selector = selector.substring(1));\n  if (el) {\n    try {\n      if (el.matches) {\n        return el.matches(selector);\n      } else if (el.msMatchesSelector) {\n        return el.msMatchesSelector(selector);\n      } else if (el.webkitMatchesSelector) {\n        return el.webkitMatchesSelector(selector);\n      }\n    } catch (_) {\n      return false;\n    }\n  }\n  return false;\n}\nfunction getParentOrHost(el) {\n  return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\nfunction closest( /**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx, includeCTX) {\n  if (el) {\n    ctx = ctx || document;\n    do {\n      if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n        return el;\n      }\n      if (el === ctx) break;\n      /* jshint boss:true */\n    } while (el = getParentOrHost(el));\n  }\n  return null;\n}\nvar R_SPACE = /\\s+/g;\nfunction toggleClass(el, name, state) {\n  if (el && name) {\n    if (el.classList) {\n      el.classList[state ? 'add' : 'remove'](name);\n    } else {\n      var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n      el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n    }\n  }\n}\nfunction css(el, prop, val) {\n  var style = el && el.style;\n  if (style) {\n    if (val === void 0) {\n      if (document.defaultView && document.defaultView.getComputedStyle) {\n        val = document.defaultView.getComputedStyle(el, '');\n      } else if (el.currentStyle) {\n        val = el.currentStyle;\n      }\n      return prop === void 0 ? val : val[prop];\n    } else {\n      if (!(prop in style) && prop.indexOf('webkit') === -1) {\n        prop = '-webkit-' + prop;\n      }\n      style[prop] = val + (typeof val === 'string' ? '' : 'px');\n    }\n  }\n}\nfunction matrix(el, selfOnly) {\n  var appliedTransforms = '';\n  if (typeof el === 'string') {\n    appliedTransforms = el;\n  } else {\n    do {\n      var transform = css(el, 'transform');\n      if (transform && transform !== 'none') {\n        appliedTransforms = transform + ' ' + appliedTransforms;\n      }\n      /* jshint boss:true */\n    } while (!selfOnly && (el = el.parentNode));\n  }\n  var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n  /*jshint -W056 */\n  return matrixFn && new matrixFn(appliedTransforms);\n}\nfunction find(ctx, tagName, iterator) {\n  if (ctx) {\n    var list = ctx.getElementsByTagName(tagName),\n      i = 0,\n      n = list.length;\n    if (iterator) {\n      for (; i < n; i++) {\n        iterator(list[i], i);\n      }\n    }\n    return list;\n  }\n  return [];\n}\nfunction getWindowScrollingElement() {\n  var scrollingElement = document.scrollingElement;\n  if (scrollingElement) {\n    return scrollingElement;\n  } else {\n    return document.documentElement;\n  }\n}\n\n/**\r\n * Returns the \"bounding client rect\" of given element\r\n * @param  {HTMLElement} el                       The element whose boundingClientRect is wanted\r\n * @param  {[Boolean]} relativeToContainingBlock  Whether the rect should be relative to the containing block of (including) the container\r\n * @param  {[Boolean]} relativeToNonStaticParent  Whether the rect should be relative to the relative parent of (including) the contaienr\r\n * @param  {[Boolean]} undoScale                  Whether the container's scale() should be undone\r\n * @param  {[HTMLElement]} container              The parent the element will be placed in\r\n * @return {Object}                               The boundingClientRect of el, with specified adjustments\r\n */\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n  if (!el.getBoundingClientRect && el !== window) return;\n  var elRect, top, left, bottom, right, height, width;\n  if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n    elRect = el.getBoundingClientRect();\n    top = elRect.top;\n    left = elRect.left;\n    bottom = elRect.bottom;\n    right = elRect.right;\n    height = elRect.height;\n    width = elRect.width;\n  } else {\n    top = 0;\n    left = 0;\n    bottom = window.innerHeight;\n    right = window.innerWidth;\n    height = window.innerHeight;\n    width = window.innerWidth;\n  }\n  if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n    // Adjust for translate()\n    container = container || el.parentNode;\n\n    // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n    // Not needed on <= IE11\n    if (!IE11OrLess) {\n      do {\n        if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n          var containerRect = container.getBoundingClientRect();\n\n          // Set relative to edges of padding box of container\n          top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n          left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n          bottom = top + elRect.height;\n          right = left + elRect.width;\n          break;\n        }\n        /* jshint boss:true */\n      } while (container = container.parentNode);\n    }\n  }\n  if (undoScale && el !== window) {\n    // Adjust for scale()\n    var elMatrix = matrix(container || el),\n      scaleX = elMatrix && elMatrix.a,\n      scaleY = elMatrix && elMatrix.d;\n    if (elMatrix) {\n      top /= scaleY;\n      left /= scaleX;\n      width /= scaleX;\n      height /= scaleY;\n      bottom = top + height;\n      right = left + width;\n    }\n  }\n  return {\n    top: top,\n    left: left,\n    bottom: bottom,\n    right: right,\n    width: width,\n    height: height\n  };\n}\n\n/**\r\n * Checks if a side of an element is scrolled past a side of its parents\r\n * @param  {HTMLElement}  el           The element who's side being scrolled out of view is in question\r\n * @param  {String}       elSide       Side of the element in question ('top', 'left', 'right', 'bottom')\r\n * @param  {String}       parentSide   Side of the parent in question ('top', 'left', 'right', 'bottom')\r\n * @return {HTMLElement}               The parent scroll element that the el's side is scrolled past, or null if there is no such element\r\n */\nfunction isScrolledPast(el, elSide, parentSide) {\n  var parent = getParentAutoScrollElement(el, true),\n    elSideVal = getRect(el)[elSide];\n\n  /* jshint boss:true */\n  while (parent) {\n    var parentSideVal = getRect(parent)[parentSide],\n      visible = void 0;\n    if (parentSide === 'top' || parentSide === 'left') {\n      visible = elSideVal >= parentSideVal;\n    } else {\n      visible = elSideVal <= parentSideVal;\n    }\n    if (!visible) return parent;\n    if (parent === getWindowScrollingElement()) break;\n    parent = getParentAutoScrollElement(parent, false);\n  }\n  return false;\n}\n\n/**\r\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\r\n * and non-draggable elements\r\n * @param  {HTMLElement} el       The parent element\r\n * @param  {Number} childNum      The index of the child\r\n * @param  {Object} options       Parent Sortable's options\r\n * @return {HTMLElement}          The child at index childNum, or null if not found\r\n */\nfunction getChild(el, childNum, options, includeDragEl) {\n  var currentChild = 0,\n    i = 0,\n    children = el.children;\n  while (i < children.length) {\n    if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n      if (currentChild === childNum) {\n        return children[i];\n      }\n      currentChild++;\n    }\n    i++;\n  }\n  return null;\n}\n\n/**\r\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\r\n * @param  {HTMLElement} el       Parent element\r\n * @param  {selector} selector    Any other elements that should be ignored\r\n * @return {HTMLElement}          The last child, ignoring ghostEl\r\n */\nfunction lastChild(el, selector) {\n  var last = el.lastElementChild;\n  while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n    last = last.previousElementSibling;\n  }\n  return last || null;\n}\n\n/**\r\n * Returns the index of an element within its parent for a selected set of\r\n * elements\r\n * @param  {HTMLElement} el\r\n * @param  {selector} selector\r\n * @return {number}\r\n */\nfunction index(el, selector) {\n  var index = 0;\n  if (!el || !el.parentNode) {\n    return -1;\n  }\n\n  /* jshint boss:true */\n  while (el = el.previousElementSibling) {\n    if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n      index++;\n    }\n  }\n  return index;\n}\n\n/**\r\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\r\n * The value is returned in real pixels.\r\n * @param  {HTMLElement} el\r\n * @return {Array}             Offsets in the format of [left, top]\r\n */\nfunction getRelativeScrollOffset(el) {\n  var offsetLeft = 0,\n    offsetTop = 0,\n    winScroller = getWindowScrollingElement();\n  if (el) {\n    do {\n      var elMatrix = matrix(el),\n        scaleX = elMatrix.a,\n        scaleY = elMatrix.d;\n      offsetLeft += el.scrollLeft * scaleX;\n      offsetTop += el.scrollTop * scaleY;\n    } while (el !== winScroller && (el = el.parentNode));\n  }\n  return [offsetLeft, offsetTop];\n}\n\n/**\r\n * Returns the index of the object within the given array\r\n * @param  {Array} arr   Array that may or may not hold the object\r\n * @param  {Object} obj  An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\r\n * @return {Number}      The index of the object in the array, or -1\r\n */\nfunction indexOfObject(arr, obj) {\n  for (var i in arr) {\n    if (!arr.hasOwnProperty(i)) continue;\n    for (var key in obj) {\n      if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n    }\n  }\n  return -1;\n}\nfunction getParentAutoScrollElement(el, includeSelf) {\n  // skip to window\n  if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n  var elem = el;\n  var gotSelf = false;\n  do {\n    // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n    if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n      var elemCSS = css(elem);\n      if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n        if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n        if (gotSelf || includeSelf) return elem;\n        gotSelf = true;\n      }\n    }\n    /* jshint boss:true */\n  } while (elem = elem.parentNode);\n  return getWindowScrollingElement();\n}\nfunction extend(dst, src) {\n  if (dst && src) {\n    for (var key in src) {\n      if (src.hasOwnProperty(key)) {\n        dst[key] = src[key];\n      }\n    }\n  }\n  return dst;\n}\nfunction isRectEqual(rect1, rect2) {\n  return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\nvar _throttleTimeout;\nfunction throttle(callback, ms) {\n  return function () {\n    if (!_throttleTimeout) {\n      var args = arguments,\n        _this = this;\n      if (args.length === 1) {\n        callback.call(_this, args[0]);\n      } else {\n        callback.apply(_this, args);\n      }\n      _throttleTimeout = setTimeout(function () {\n        _throttleTimeout = void 0;\n      }, ms);\n    }\n  };\n}\nfunction cancelThrottle() {\n  clearTimeout(_throttleTimeout);\n  _throttleTimeout = void 0;\n}\nfunction scrollBy(el, x, y) {\n  el.scrollLeft += x;\n  el.scrollTop += y;\n}\nfunction clone(el) {\n  var Polymer = window.Polymer;\n  var $ = window.jQuery || window.Zepto;\n  if (Polymer && Polymer.dom) {\n    return Polymer.dom(el).cloneNode(true);\n  } else if ($) {\n    return $(el).clone(true)[0];\n  } else {\n    return el.cloneNode(true);\n  }\n}\nfunction setRect(el, rect) {\n  css(el, 'position', 'absolute');\n  css(el, 'top', rect.top);\n  css(el, 'left', rect.left);\n  css(el, 'width', rect.width);\n  css(el, 'height', rect.height);\n}\nfunction unsetRect(el) {\n  css(el, 'position', '');\n  css(el, 'top', '');\n  css(el, 'left', '');\n  css(el, 'width', '');\n  css(el, 'height', '');\n}\nfunction getChildContainingRectFromElement(container, options, ghostEl) {\n  var rect = {};\n  Array.from(container.children).forEach(function (child) {\n    var _rect$left, _rect$top, _rect$right, _rect$bottom;\n    if (!closest(child, options.draggable, container, false) || child.animated || child === ghostEl) return;\n    var childRect = getRect(child);\n    rect.left = Math.min((_rect$left = rect.left) !== null && _rect$left !== void 0 ? _rect$left : Infinity, childRect.left);\n    rect.top = Math.min((_rect$top = rect.top) !== null && _rect$top !== void 0 ? _rect$top : Infinity, childRect.top);\n    rect.right = Math.max((_rect$right = rect.right) !== null && _rect$right !== void 0 ? _rect$right : -Infinity, childRect.right);\n    rect.bottom = Math.max((_rect$bottom = rect.bottom) !== null && _rect$bottom !== void 0 ? _rect$bottom : -Infinity, childRect.bottom);\n  });\n  rect.width = rect.right - rect.left;\n  rect.height = rect.bottom - rect.top;\n  rect.x = rect.left;\n  rect.y = rect.top;\n  return rect;\n}\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n  var animationStates = [],\n    animationCallbackId;\n  return {\n    captureAnimationState: function captureAnimationState() {\n      animationStates = [];\n      if (!this.options.animation) return;\n      var children = [].slice.call(this.el.children);\n      children.forEach(function (child) {\n        if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n        animationStates.push({\n          target: child,\n          rect: getRect(child)\n        });\n        var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect);\n\n        // If animating: compensate for current animation\n        if (child.thisAnimationDuration) {\n          var childMatrix = matrix(child, true);\n          if (childMatrix) {\n            fromRect.top -= childMatrix.f;\n            fromRect.left -= childMatrix.e;\n          }\n        }\n        child.fromRect = fromRect;\n      });\n    },\n    addAnimationState: function addAnimationState(state) {\n      animationStates.push(state);\n    },\n    removeAnimationState: function removeAnimationState(target) {\n      animationStates.splice(indexOfObject(animationStates, {\n        target: target\n      }), 1);\n    },\n    animateAll: function animateAll(callback) {\n      var _this = this;\n      if (!this.options.animation) {\n        clearTimeout(animationCallbackId);\n        if (typeof callback === 'function') callback();\n        return;\n      }\n      var animating = false,\n        animationTime = 0;\n      animationStates.forEach(function (state) {\n        var time = 0,\n          target = state.target,\n          fromRect = target.fromRect,\n          toRect = getRect(target),\n          prevFromRect = target.prevFromRect,\n          prevToRect = target.prevToRect,\n          animatingRect = state.rect,\n          targetMatrix = matrix(target, true);\n        if (targetMatrix) {\n          // Compensate for current animation\n          toRect.top -= targetMatrix.f;\n          toRect.left -= targetMatrix.e;\n        }\n        target.toRect = toRect;\n        if (target.thisAnimationDuration) {\n          // Could also check if animatingRect is between fromRect and toRect\n          if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) &&\n          // Make sure animatingRect is on line between toRect & fromRect\n          (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n            // If returning to same place as started from animation and on same axis\n            time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n          }\n        }\n\n        // if fromRect != toRect: animate\n        if (!isRectEqual(toRect, fromRect)) {\n          target.prevFromRect = fromRect;\n          target.prevToRect = toRect;\n          if (!time) {\n            time = _this.options.animation;\n          }\n          _this.animate(target, animatingRect, toRect, time);\n        }\n        if (time) {\n          animating = true;\n          animationTime = Math.max(animationTime, time);\n          clearTimeout(target.animationResetTimer);\n          target.animationResetTimer = setTimeout(function () {\n            target.animationTime = 0;\n            target.prevFromRect = null;\n            target.fromRect = null;\n            target.prevToRect = null;\n            target.thisAnimationDuration = null;\n          }, time);\n          target.thisAnimationDuration = time;\n        }\n      });\n      clearTimeout(animationCallbackId);\n      if (!animating) {\n        if (typeof callback === 'function') callback();\n      } else {\n        animationCallbackId = setTimeout(function () {\n          if (typeof callback === 'function') callback();\n        }, animationTime);\n      }\n      animationStates = [];\n    },\n    animate: function animate(target, currentRect, toRect, duration) {\n      if (duration) {\n        css(target, 'transition', '');\n        css(target, 'transform', '');\n        var elMatrix = matrix(this.el),\n          scaleX = elMatrix && elMatrix.a,\n          scaleY = elMatrix && elMatrix.d,\n          translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n          translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n        target.animatingX = !!translateX;\n        target.animatingY = !!translateY;\n        css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n        this.forRepaintDummy = repaint(target); // repaint\n\n        css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n        css(target, 'transform', 'translate3d(0,0,0)');\n        typeof target.animated === 'number' && clearTimeout(target.animated);\n        target.animated = setTimeout(function () {\n          css(target, 'transition', '');\n          css(target, 'transform', '');\n          target.animated = false;\n          target.animatingX = false;\n          target.animatingY = false;\n        }, duration);\n      }\n    }\n  };\n}\nfunction repaint(target) {\n  return target.offsetWidth;\n}\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n  return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n  initializeByDefault: true\n};\nvar PluginManager = {\n  mount: function mount(plugin) {\n    // Set default static properties\n    for (var option in defaults) {\n      if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n        plugin[option] = defaults[option];\n      }\n    }\n    plugins.forEach(function (p) {\n      if (p.pluginName === plugin.pluginName) {\n        throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n      }\n    });\n    plugins.push(plugin);\n  },\n  pluginEvent: function pluginEvent(eventName, sortable, evt) {\n    var _this = this;\n    this.eventCanceled = false;\n    evt.cancel = function () {\n      _this.eventCanceled = true;\n    };\n    var eventNameGlobal = eventName + 'Global';\n    plugins.forEach(function (plugin) {\n      if (!sortable[plugin.pluginName]) return;\n      // Fire global events if it exists in this sortable\n      if (sortable[plugin.pluginName][eventNameGlobal]) {\n        sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n          sortable: sortable\n        }, evt));\n      }\n\n      // Only fire plugin event if plugin is enabled in this sortable,\n      // and plugin has event defined\n      if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n        sortable[plugin.pluginName][eventName](_objectSpread2({\n          sortable: sortable\n        }, evt));\n      }\n    });\n  },\n  initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n    plugins.forEach(function (plugin) {\n      var pluginName = plugin.pluginName;\n      if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n      var initialized = new plugin(sortable, el, sortable.options);\n      initialized.sortable = sortable;\n      initialized.options = sortable.options;\n      sortable[pluginName] = initialized;\n\n      // Add default options from plugin\n      _extends(defaults, initialized.defaults);\n    });\n    for (var option in sortable.options) {\n      if (!sortable.options.hasOwnProperty(option)) continue;\n      var modified = this.modifyOption(sortable, option, sortable.options[option]);\n      if (typeof modified !== 'undefined') {\n        sortable.options[option] = modified;\n      }\n    }\n  },\n  getEventProperties: function getEventProperties(name, sortable) {\n    var eventProperties = {};\n    plugins.forEach(function (plugin) {\n      if (typeof plugin.eventProperties !== 'function') return;\n      _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n    });\n    return eventProperties;\n  },\n  modifyOption: function modifyOption(sortable, name, value) {\n    var modifiedValue;\n    plugins.forEach(function (plugin) {\n      // Plugin must exist on the Sortable\n      if (!sortable[plugin.pluginName]) return;\n\n      // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n      if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n        modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n      }\n    });\n    return modifiedValue;\n  }\n};\n\nfunction dispatchEvent(_ref) {\n  var sortable = _ref.sortable,\n    rootEl = _ref.rootEl,\n    name = _ref.name,\n    targetEl = _ref.targetEl,\n    cloneEl = _ref.cloneEl,\n    toEl = _ref.toEl,\n    fromEl = _ref.fromEl,\n    oldIndex = _ref.oldIndex,\n    newIndex = _ref.newIndex,\n    oldDraggableIndex = _ref.oldDraggableIndex,\n    newDraggableIndex = _ref.newDraggableIndex,\n    originalEvent = _ref.originalEvent,\n    putSortable = _ref.putSortable,\n    extraEventProperties = _ref.extraEventProperties;\n  sortable = sortable || rootEl && rootEl[expando];\n  if (!sortable) return;\n  var evt,\n    options = sortable.options,\n    onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);\n  // Support for new CustomEvent feature\n  if (window.CustomEvent && !IE11OrLess && !Edge) {\n    evt = new CustomEvent(name, {\n      bubbles: true,\n      cancelable: true\n    });\n  } else {\n    evt = document.createEvent('Event');\n    evt.initEvent(name, true, true);\n  }\n  evt.to = toEl || rootEl;\n  evt.from = fromEl || rootEl;\n  evt.item = targetEl || rootEl;\n  evt.clone = cloneEl;\n  evt.oldIndex = oldIndex;\n  evt.newIndex = newIndex;\n  evt.oldDraggableIndex = oldDraggableIndex;\n  evt.newDraggableIndex = newDraggableIndex;\n  evt.originalEvent = originalEvent;\n  evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n  var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n  for (var option in allEventProperties) {\n    evt[option] = allEventProperties[option];\n  }\n  if (rootEl) {\n    rootEl.dispatchEvent(evt);\n  }\n  if (options[onName]) {\n    options[onName].call(sortable, evt);\n  }\n}\n\nvar _excluded = [\"evt\"];\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n  var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n    originalEvent = _ref.evt,\n    data = _objectWithoutProperties(_ref, _excluded);\n  PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n    dragEl: dragEl,\n    parentEl: parentEl,\n    ghostEl: ghostEl,\n    rootEl: rootEl,\n    nextEl: nextEl,\n    lastDownEl: lastDownEl,\n    cloneEl: cloneEl,\n    cloneHidden: cloneHidden,\n    dragStarted: moved,\n    putSortable: putSortable,\n    activeSortable: Sortable.active,\n    originalEvent: originalEvent,\n    oldIndex: oldIndex,\n    oldDraggableIndex: oldDraggableIndex,\n    newIndex: newIndex,\n    newDraggableIndex: newDraggableIndex,\n    hideGhostForTarget: _hideGhostForTarget,\n    unhideGhostForTarget: _unhideGhostForTarget,\n    cloneNowHidden: function cloneNowHidden() {\n      cloneHidden = true;\n    },\n    cloneNowShown: function cloneNowShown() {\n      cloneHidden = false;\n    },\n    dispatchSortableEvent: function dispatchSortableEvent(name) {\n      _dispatchEvent({\n        sortable: sortable,\n        name: name,\n        originalEvent: originalEvent\n      });\n    }\n  }, data));\n};\nfunction _dispatchEvent(info) {\n  dispatchEvent(_objectSpread2({\n    putSortable: putSortable,\n    cloneEl: cloneEl,\n    targetEl: dragEl,\n    rootEl: rootEl,\n    oldIndex: oldIndex,\n    oldDraggableIndex: oldDraggableIndex,\n    newIndex: newIndex,\n    newDraggableIndex: newDraggableIndex\n  }, info));\n}\nvar dragEl,\n  parentEl,\n  ghostEl,\n  rootEl,\n  nextEl,\n  lastDownEl,\n  cloneEl,\n  cloneHidden,\n  oldIndex,\n  newIndex,\n  oldDraggableIndex,\n  newDraggableIndex,\n  activeGroup,\n  putSortable,\n  awaitingDragStarted = false,\n  ignoreNextClick = false,\n  sortables = [],\n  tapEvt,\n  touchEvt,\n  lastDx,\n  lastDy,\n  tapDistanceLeft,\n  tapDistanceTop,\n  moved,\n  lastTarget,\n  lastDirection,\n  pastFirstInvertThresh = false,\n  isCircumstantialInvert = false,\n  targetMoveDistance,\n  // For positioning ghost absolutely\n  ghostRelativeParent,\n  ghostRelativeParentInitialScroll = [],\n  // (left, top)\n\n  _silent = false,\n  savedInputChecked = [];\n\n/** @const */\nvar documentExists = typeof document !== 'undefined',\n  PositionGhostAbsolutely = IOS,\n  CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n  // This will not pass for IE9, because IE9 DnD only works on anchors\n  supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n  supportCssPointerEvents = function () {\n    if (!documentExists) return;\n    // false when <= IE11\n    if (IE11OrLess) {\n      return false;\n    }\n    var el = document.createElement('x');\n    el.style.cssText = 'pointer-events:auto';\n    return el.style.pointerEvents === 'auto';\n  }(),\n  _detectDirection = function _detectDirection(el, options) {\n    var elCSS = css(el),\n      elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n      child1 = getChild(el, 0, options),\n      child2 = getChild(el, 1, options),\n      firstChildCSS = child1 && css(child1),\n      secondChildCSS = child2 && css(child2),\n      firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n      secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n    if (elCSS.display === 'flex') {\n      return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n    }\n    if (elCSS.display === 'grid') {\n      return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n    }\n    if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n      var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n      return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n    }\n    return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n  },\n  _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n    var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n      dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n      dragElOppLength = vertical ? dragRect.width : dragRect.height,\n      targetS1Opp = vertical ? targetRect.left : targetRect.top,\n      targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n      targetOppLength = vertical ? targetRect.width : targetRect.height;\n    return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n  },\n  /**\r\n   * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n   * @param  {Number} x      X position\r\n   * @param  {Number} y      Y position\r\n   * @return {HTMLElement}   Element of the first found nearest Sortable\r\n   */\n  _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n    var ret;\n    sortables.some(function (sortable) {\n      var threshold = sortable[expando].options.emptyInsertThreshold;\n      if (!threshold || lastChild(sortable)) return;\n      var rect = getRect(sortable),\n        insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n        insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n      if (insideHorizontally && insideVertically) {\n        return ret = sortable;\n      }\n    });\n    return ret;\n  },\n  _prepareGroup = function _prepareGroup(options) {\n    function toFn(value, pull) {\n      return function (to, from, dragEl, evt) {\n        var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n        if (value == null && (pull || sameGroup)) {\n          // Default pull value\n          // Default pull and put value if same group\n          return true;\n        } else if (value == null || value === false) {\n          return false;\n        } else if (pull && value === 'clone') {\n          return value;\n        } else if (typeof value === 'function') {\n          return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n        } else {\n          var otherGroup = (pull ? to : from).options.group.name;\n          return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n        }\n      };\n    }\n    var group = {};\n    var originalGroup = options.group;\n    if (!originalGroup || _typeof(originalGroup) != 'object') {\n      originalGroup = {\n        name: originalGroup\n      };\n    }\n    group.name = originalGroup.name;\n    group.checkPull = toFn(originalGroup.pull, true);\n    group.checkPut = toFn(originalGroup.put);\n    group.revertClone = originalGroup.revertClone;\n    options.group = group;\n  },\n  _hideGhostForTarget = function _hideGhostForTarget() {\n    if (!supportCssPointerEvents && ghostEl) {\n      css(ghostEl, 'display', 'none');\n    }\n  },\n  _unhideGhostForTarget = function _unhideGhostForTarget() {\n    if (!supportCssPointerEvents && ghostEl) {\n      css(ghostEl, 'display', '');\n    }\n  };\n\n// #1184 fix - Prevent click event on fallback if dragged but item not changed position\nif (documentExists && !ChromeForAndroid) {\n  document.addEventListener('click', function (evt) {\n    if (ignoreNextClick) {\n      evt.preventDefault();\n      evt.stopPropagation && evt.stopPropagation();\n      evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n      ignoreNextClick = false;\n      return false;\n    }\n  }, true);\n}\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n  if (dragEl) {\n    evt = evt.touches ? evt.touches[0] : evt;\n    var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n    if (nearest) {\n      // Create imitation event\n      var event = {};\n      for (var i in evt) {\n        if (evt.hasOwnProperty(i)) {\n          event[i] = evt[i];\n        }\n      }\n      event.target = event.rootEl = nearest;\n      event.preventDefault = void 0;\n      event.stopPropagation = void 0;\n      nearest[expando]._onDragOver(event);\n    }\n  }\n};\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n  if (dragEl) {\n    dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n  }\n};\n\n/**\r\n * @class  Sortable\r\n * @param  {HTMLElement}  el\r\n * @param  {Object}       [options]\r\n */\nfunction Sortable(el, options) {\n  if (!(el && el.nodeType && el.nodeType === 1)) {\n    throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n  }\n  this.el = el; // root element\n  this.options = options = _extends({}, options);\n\n  // Export instance\n  el[expando] = this;\n  var defaults = {\n    group: null,\n    sort: true,\n    disabled: false,\n    store: null,\n    handle: null,\n    draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n    swapThreshold: 1,\n    // percentage; 0 <= x <= 1\n    invertSwap: false,\n    // invert always\n    invertedSwapThreshold: null,\n    // will be set to same as swapThreshold if default\n    removeCloneOnHide: true,\n    direction: function direction() {\n      return _detectDirection(el, this.options);\n    },\n    ghostClass: 'sortable-ghost',\n    chosenClass: 'sortable-chosen',\n    dragClass: 'sortable-drag',\n    ignore: 'a, img',\n    filter: null,\n    preventOnFilter: true,\n    animation: 0,\n    easing: null,\n    setData: function setData(dataTransfer, dragEl) {\n      dataTransfer.setData('Text', dragEl.textContent);\n    },\n    dropBubble: false,\n    dragoverBubble: false,\n    dataIdAttr: 'data-id',\n    delay: 0,\n    delayOnTouchOnly: false,\n    touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n    forceFallback: false,\n    fallbackClass: 'sortable-fallback',\n    fallbackOnBody: false,\n    fallbackTolerance: 0,\n    fallbackOffset: {\n      x: 0,\n      y: 0\n    },\n    supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && !Safari,\n    emptyInsertThreshold: 5\n  };\n  PluginManager.initializePlugins(this, el, defaults);\n\n  // Set default options\n  for (var name in defaults) {\n    !(name in options) && (options[name] = defaults[name]);\n  }\n  _prepareGroup(options);\n\n  // Bind all private methods\n  for (var fn in this) {\n    if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n      this[fn] = this[fn].bind(this);\n    }\n  }\n\n  // Setup drag mode\n  this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n  if (this.nativeDraggable) {\n    // Touch start threshold cannot be greater than the native dragstart threshold\n    this.options.touchStartThreshold = 1;\n  }\n\n  // Bind events\n  if (options.supportPointer) {\n    on(el, 'pointerdown', this._onTapStart);\n  } else {\n    on(el, 'mousedown', this._onTapStart);\n    on(el, 'touchstart', this._onTapStart);\n  }\n  if (this.nativeDraggable) {\n    on(el, 'dragover', this);\n    on(el, 'dragenter', this);\n  }\n  sortables.push(this.el);\n\n  // Restore sorting\n  options.store && options.store.get && this.sort(options.store.get(this) || []);\n\n  // Add animation state manager\n  _extends(this, AnimationStateManager());\n}\nSortable.prototype = /** @lends Sortable.prototype */{\n  constructor: Sortable,\n  _isOutsideThisEl: function _isOutsideThisEl(target) {\n    if (!this.el.contains(target) && target !== this.el) {\n      lastTarget = null;\n    }\n  },\n  _getDirection: function _getDirection(evt, target) {\n    return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n  },\n  _onTapStart: function _onTapStart( /** Event|TouchEvent */evt) {\n    if (!evt.cancelable) return;\n    var _this = this,\n      el = this.el,\n      options = this.options,\n      preventOnFilter = options.preventOnFilter,\n      type = evt.type,\n      touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n      target = (touch || evt).target,\n      originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n      filter = options.filter;\n    _saveInputCheckedState(el);\n\n    // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n    if (dragEl) {\n      return;\n    }\n    if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n      return; // only left button and enabled\n    }\n\n    // cancel dnd if original target is content editable\n    if (originalTarget.isContentEditable) {\n      return;\n    }\n\n    // Safari ignores further event handling after mousedown\n    if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n      return;\n    }\n    target = closest(target, options.draggable, el, false);\n    if (target && target.animated) {\n      return;\n    }\n    if (lastDownEl === target) {\n      // Ignoring duplicate `down`\n      return;\n    }\n\n    // Get the index of the dragged element within its parent\n    oldIndex = index(target);\n    oldDraggableIndex = index(target, options.draggable);\n\n    // Check filter\n    if (typeof filter === 'function') {\n      if (filter.call(this, evt, target, this)) {\n        _dispatchEvent({\n          sortable: _this,\n          rootEl: originalTarget,\n          name: 'filter',\n          targetEl: target,\n          toEl: el,\n          fromEl: el\n        });\n        pluginEvent('filter', _this, {\n          evt: evt\n        });\n        preventOnFilter && evt.cancelable && evt.preventDefault();\n        return; // cancel dnd\n      }\n    } else if (filter) {\n      filter = filter.split(',').some(function (criteria) {\n        criteria = closest(originalTarget, criteria.trim(), el, false);\n        if (criteria) {\n          _dispatchEvent({\n            sortable: _this,\n            rootEl: criteria,\n            name: 'filter',\n            targetEl: target,\n            fromEl: el,\n            toEl: el\n          });\n          pluginEvent('filter', _this, {\n            evt: evt\n          });\n          return true;\n        }\n      });\n      if (filter) {\n        preventOnFilter && evt.cancelable && evt.preventDefault();\n        return; // cancel dnd\n      }\n    }\n    if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n      return;\n    }\n\n    // Prepare `dragstart`\n    this._prepareDragStart(evt, touch, target);\n  },\n  _prepareDragStart: function _prepareDragStart( /** Event */evt, /** Touch */touch, /** HTMLElement */target) {\n    var _this = this,\n      el = _this.el,\n      options = _this.options,\n      ownerDocument = el.ownerDocument,\n      dragStartFn;\n    if (target && !dragEl && target.parentNode === el) {\n      var dragRect = getRect(target);\n      rootEl = el;\n      dragEl = target;\n      parentEl = dragEl.parentNode;\n      nextEl = dragEl.nextSibling;\n      lastDownEl = target;\n      activeGroup = options.group;\n      Sortable.dragged = dragEl;\n      tapEvt = {\n        target: dragEl,\n        clientX: (touch || evt).clientX,\n        clientY: (touch || evt).clientY\n      };\n      tapDistanceLeft = tapEvt.clientX - dragRect.left;\n      tapDistanceTop = tapEvt.clientY - dragRect.top;\n      this._lastX = (touch || evt).clientX;\n      this._lastY = (touch || evt).clientY;\n      dragEl.style['will-change'] = 'all';\n      dragStartFn = function dragStartFn() {\n        pluginEvent('delayEnded', _this, {\n          evt: evt\n        });\n        if (Sortable.eventCanceled) {\n          _this._onDrop();\n          return;\n        }\n        // Delayed drag has been triggered\n        // we can re-enable the events: touchmove/mousemove\n        _this._disableDelayedDragEvents();\n        if (!FireFox && _this.nativeDraggable) {\n          dragEl.draggable = true;\n        }\n\n        // Bind the events: dragstart/dragend\n        _this._triggerDragStart(evt, touch);\n\n        // Drag start event\n        _dispatchEvent({\n          sortable: _this,\n          name: 'choose',\n          originalEvent: evt\n        });\n\n        // Chosen item\n        toggleClass(dragEl, options.chosenClass, true);\n      };\n\n      // Disable \"draggable\"\n      options.ignore.split(',').forEach(function (criteria) {\n        find(dragEl, criteria.trim(), _disableDraggable);\n      });\n      on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n      on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n      on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n      on(ownerDocument, 'mouseup', _this._onDrop);\n      on(ownerDocument, 'touchend', _this._onDrop);\n      on(ownerDocument, 'touchcancel', _this._onDrop);\n\n      // Make dragEl draggable (must be before delay for FireFox)\n      if (FireFox && this.nativeDraggable) {\n        this.options.touchStartThreshold = 4;\n        dragEl.draggable = true;\n      }\n      pluginEvent('delayStart', this, {\n        evt: evt\n      });\n\n      // Delay is impossible for native DnD in Edge or IE\n      if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n        if (Sortable.eventCanceled) {\n          this._onDrop();\n          return;\n        }\n        // If the user moves the pointer or let go the click or touch\n        // before the delay has been reached:\n        // disable the delayed drag\n        on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n        on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n        on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n        on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n        on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n        options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n        _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n      } else {\n        dragStartFn();\n      }\n    }\n  },\n  _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( /** TouchEvent|PointerEvent **/e) {\n    var touch = e.touches ? e.touches[0] : e;\n    if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n      this._disableDelayedDrag();\n    }\n  },\n  _disableDelayedDrag: function _disableDelayedDrag() {\n    dragEl && _disableDraggable(dragEl);\n    clearTimeout(this._dragStartTimer);\n    this._disableDelayedDragEvents();\n  },\n  _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n    var ownerDocument = this.el.ownerDocument;\n    off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n    off(ownerDocument, 'touchend', this._disableDelayedDrag);\n    off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n    off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n    off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n    off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n  },\n  _triggerDragStart: function _triggerDragStart( /** Event */evt, /** Touch */touch) {\n    touch = touch || evt.pointerType == 'touch' && evt;\n    if (!this.nativeDraggable || touch) {\n      if (this.options.supportPointer) {\n        on(document, 'pointermove', this._onTouchMove);\n      } else if (touch) {\n        on(document, 'touchmove', this._onTouchMove);\n      } else {\n        on(document, 'mousemove', this._onTouchMove);\n      }\n    } else {\n      on(dragEl, 'dragend', this);\n      on(rootEl, 'dragstart', this._onDragStart);\n    }\n    try {\n      if (document.selection) {\n        // Timeout neccessary for IE9\n        _nextTick(function () {\n          document.selection.empty();\n        });\n      } else {\n        window.getSelection().removeAllRanges();\n      }\n    } catch (err) {}\n  },\n  _dragStarted: function _dragStarted(fallback, evt) {\n    awaitingDragStarted = false;\n    if (rootEl && dragEl) {\n      pluginEvent('dragStarted', this, {\n        evt: evt\n      });\n      if (this.nativeDraggable) {\n        on(document, 'dragover', _checkOutsideTargetEl);\n      }\n      var options = this.options;\n\n      // Apply effect\n      !fallback && toggleClass(dragEl, options.dragClass, false);\n      toggleClass(dragEl, options.ghostClass, true);\n      Sortable.active = this;\n      fallback && this._appendGhost();\n\n      // Drag start event\n      _dispatchEvent({\n        sortable: this,\n        name: 'start',\n        originalEvent: evt\n      });\n    } else {\n      this._nulling();\n    }\n  },\n  _emulateDragOver: function _emulateDragOver() {\n    if (touchEvt) {\n      this._lastX = touchEvt.clientX;\n      this._lastY = touchEvt.clientY;\n      _hideGhostForTarget();\n      var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n      var parent = target;\n      while (target && target.shadowRoot) {\n        target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n        if (target === parent) break;\n        parent = target;\n      }\n      dragEl.parentNode[expando]._isOutsideThisEl(target);\n      if (parent) {\n        do {\n          if (parent[expando]) {\n            var inserted = void 0;\n            inserted = parent[expando]._onDragOver({\n              clientX: touchEvt.clientX,\n              clientY: touchEvt.clientY,\n              target: target,\n              rootEl: parent\n            });\n            if (inserted && !this.options.dragoverBubble) {\n              break;\n            }\n          }\n          target = parent; // store last element\n        }\n        /* jshint boss:true */ while (parent = getParentOrHost(parent));\n      }\n      _unhideGhostForTarget();\n    }\n  },\n  _onTouchMove: function _onTouchMove( /**TouchEvent*/evt) {\n    if (tapEvt) {\n      var options = this.options,\n        fallbackTolerance = options.fallbackTolerance,\n        fallbackOffset = options.fallbackOffset,\n        touch = evt.touches ? evt.touches[0] : evt,\n        ghostMatrix = ghostEl && matrix(ghostEl, true),\n        scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n        scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n        relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n        dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n        dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1);\n\n      // only set the status to dragging, when we are actually dragging\n      if (!Sortable.active && !awaitingDragStarted) {\n        if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n          return;\n        }\n        this._onDragStart(evt, true);\n      }\n      if (ghostEl) {\n        if (ghostMatrix) {\n          ghostMatrix.e += dx - (lastDx || 0);\n          ghostMatrix.f += dy - (lastDy || 0);\n        } else {\n          ghostMatrix = {\n            a: 1,\n            b: 0,\n            c: 0,\n            d: 1,\n            e: dx,\n            f: dy\n          };\n        }\n        var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n        css(ghostEl, 'webkitTransform', cssMatrix);\n        css(ghostEl, 'mozTransform', cssMatrix);\n        css(ghostEl, 'msTransform', cssMatrix);\n        css(ghostEl, 'transform', cssMatrix);\n        lastDx = dx;\n        lastDy = dy;\n        touchEvt = touch;\n      }\n      evt.cancelable && evt.preventDefault();\n    }\n  },\n  _appendGhost: function _appendGhost() {\n    // Bug if using scale(): https://stackoverflow.com/questions/2637058\n    // Not being adjusted for\n    if (!ghostEl) {\n      var container = this.options.fallbackOnBody ? document.body : rootEl,\n        rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n        options = this.options;\n\n      // Position absolutely\n      if (PositionGhostAbsolutely) {\n        // Get relatively positioned parent\n        ghostRelativeParent = container;\n        while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n          ghostRelativeParent = ghostRelativeParent.parentNode;\n        }\n        if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n          if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n          rect.top += ghostRelativeParent.scrollTop;\n          rect.left += ghostRelativeParent.scrollLeft;\n        } else {\n          ghostRelativeParent = getWindowScrollingElement();\n        }\n        ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n      }\n      ghostEl = dragEl.cloneNode(true);\n      toggleClass(ghostEl, options.ghostClass, false);\n      toggleClass(ghostEl, options.fallbackClass, true);\n      toggleClass(ghostEl, options.dragClass, true);\n      css(ghostEl, 'transition', '');\n      css(ghostEl, 'transform', '');\n      css(ghostEl, 'box-sizing', 'border-box');\n      css(ghostEl, 'margin', 0);\n      css(ghostEl, 'top', rect.top);\n      css(ghostEl, 'left', rect.left);\n      css(ghostEl, 'width', rect.width);\n      css(ghostEl, 'height', rect.height);\n      css(ghostEl, 'opacity', '0.8');\n      css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n      css(ghostEl, 'zIndex', '100000');\n      css(ghostEl, 'pointerEvents', 'none');\n      Sortable.ghost = ghostEl;\n      container.appendChild(ghostEl);\n\n      // Set transform-origin\n      css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n    }\n  },\n  _onDragStart: function _onDragStart( /**Event*/evt, /**boolean*/fallback) {\n    var _this = this;\n    var dataTransfer = evt.dataTransfer;\n    var options = _this.options;\n    pluginEvent('dragStart', this, {\n      evt: evt\n    });\n    if (Sortable.eventCanceled) {\n      this._onDrop();\n      return;\n    }\n    pluginEvent('setupClone', this);\n    if (!Sortable.eventCanceled) {\n      cloneEl = clone(dragEl);\n      cloneEl.removeAttribute(\"id\");\n      cloneEl.draggable = false;\n      cloneEl.style['will-change'] = '';\n      this._hideClone();\n      toggleClass(cloneEl, this.options.chosenClass, false);\n      Sortable.clone = cloneEl;\n    }\n\n    // #1143: IFrame support workaround\n    _this.cloneId = _nextTick(function () {\n      pluginEvent('clone', _this);\n      if (Sortable.eventCanceled) return;\n      if (!_this.options.removeCloneOnHide) {\n        rootEl.insertBefore(cloneEl, dragEl);\n      }\n      _this._hideClone();\n      _dispatchEvent({\n        sortable: _this,\n        name: 'clone'\n      });\n    });\n    !fallback && toggleClass(dragEl, options.dragClass, true);\n\n    // Set proper drop events\n    if (fallback) {\n      ignoreNextClick = true;\n      _this._loopId = setInterval(_this._emulateDragOver, 50);\n    } else {\n      // Undo what was set in _prepareDragStart before drag started\n      off(document, 'mouseup', _this._onDrop);\n      off(document, 'touchend', _this._onDrop);\n      off(document, 'touchcancel', _this._onDrop);\n      if (dataTransfer) {\n        dataTransfer.effectAllowed = 'move';\n        options.setData && options.setData.call(_this, dataTransfer, dragEl);\n      }\n      on(document, 'drop', _this);\n\n      // #1276 fix:\n      css(dragEl, 'transform', 'translateZ(0)');\n    }\n    awaitingDragStarted = true;\n    _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n    on(document, 'selectstart', _this);\n    moved = true;\n    if (Safari) {\n      css(document.body, 'user-select', 'none');\n    }\n  },\n  // Returns true - if no further action is needed (either inserted or another condition)\n  _onDragOver: function _onDragOver( /**Event*/evt) {\n    var el = this.el,\n      target = evt.target,\n      dragRect,\n      targetRect,\n      revert,\n      options = this.options,\n      group = options.group,\n      activeSortable = Sortable.active,\n      isOwner = activeGroup === group,\n      canSort = options.sort,\n      fromSortable = putSortable || activeSortable,\n      vertical,\n      _this = this,\n      completedFired = false;\n    if (_silent) return;\n    function dragOverEvent(name, extra) {\n      pluginEvent(name, _this, _objectSpread2({\n        evt: evt,\n        isOwner: isOwner,\n        axis: vertical ? 'vertical' : 'horizontal',\n        revert: revert,\n        dragRect: dragRect,\n        targetRect: targetRect,\n        canSort: canSort,\n        fromSortable: fromSortable,\n        target: target,\n        completed: completed,\n        onMove: function onMove(target, after) {\n          return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n        },\n        changed: changed\n      }, extra));\n    }\n\n    // Capture animation state\n    function capture() {\n      dragOverEvent('dragOverAnimationCapture');\n      _this.captureAnimationState();\n      if (_this !== fromSortable) {\n        fromSortable.captureAnimationState();\n      }\n    }\n\n    // Return invocation when dragEl is inserted (or completed)\n    function completed(insertion) {\n      dragOverEvent('dragOverCompleted', {\n        insertion: insertion\n      });\n      if (insertion) {\n        // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n        if (isOwner) {\n          activeSortable._hideClone();\n        } else {\n          activeSortable._showClone(_this);\n        }\n        if (_this !== fromSortable) {\n          // Set ghost class to new sortable's ghost class\n          toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n          toggleClass(dragEl, options.ghostClass, true);\n        }\n        if (putSortable !== _this && _this !== Sortable.active) {\n          putSortable = _this;\n        } else if (_this === Sortable.active && putSortable) {\n          putSortable = null;\n        }\n\n        // Animation\n        if (fromSortable === _this) {\n          _this._ignoreWhileAnimating = target;\n        }\n        _this.animateAll(function () {\n          dragOverEvent('dragOverAnimationComplete');\n          _this._ignoreWhileAnimating = null;\n        });\n        if (_this !== fromSortable) {\n          fromSortable.animateAll();\n          fromSortable._ignoreWhileAnimating = null;\n        }\n      }\n\n      // Null lastTarget if it is not inside a previously swapped element\n      if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n        lastTarget = null;\n      }\n\n      // no bubbling and not fallback\n      if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n        dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n\n        // Do not detect for empty insert if already inserted\n        !insertion && nearestEmptyInsertDetectEvent(evt);\n      }\n      !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n      return completedFired = true;\n    }\n\n    // Call when dragEl has been inserted\n    function changed() {\n      newIndex = index(dragEl);\n      newDraggableIndex = index(dragEl, options.draggable);\n      _dispatchEvent({\n        sortable: _this,\n        name: 'change',\n        toEl: el,\n        newIndex: newIndex,\n        newDraggableIndex: newDraggableIndex,\n        originalEvent: evt\n      });\n    }\n    if (evt.preventDefault !== void 0) {\n      evt.cancelable && evt.preventDefault();\n    }\n    target = closest(target, options.draggable, el, true);\n    dragOverEvent('dragOver');\n    if (Sortable.eventCanceled) return completedFired;\n    if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n      return completed(false);\n    }\n    ignoreNextClick = false;\n    if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n    : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n      vertical = this._getDirection(evt, target) === 'vertical';\n      dragRect = getRect(dragEl);\n      dragOverEvent('dragOverValid');\n      if (Sortable.eventCanceled) return completedFired;\n      if (revert) {\n        parentEl = rootEl; // actualization\n        capture();\n        this._hideClone();\n        dragOverEvent('revert');\n        if (!Sortable.eventCanceled) {\n          if (nextEl) {\n            rootEl.insertBefore(dragEl, nextEl);\n          } else {\n            rootEl.appendChild(dragEl);\n          }\n        }\n        return completed(true);\n      }\n      var elLastChild = lastChild(el, options.draggable);\n      if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n        // Insert to end of list\n\n        // If already at end of list: Do not insert\n        if (elLastChild === dragEl) {\n          return completed(false);\n        }\n\n        // if there is a last element, it is the target\n        if (elLastChild && el === evt.target) {\n          target = elLastChild;\n        }\n        if (target) {\n          targetRect = getRect(target);\n        }\n        if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n          capture();\n          if (elLastChild && elLastChild.nextSibling) {\n            // the last draggable element is not the last node\n            el.insertBefore(dragEl, elLastChild.nextSibling);\n          } else {\n            el.appendChild(dragEl);\n          }\n          parentEl = el; // actualization\n\n          changed();\n          return completed(true);\n        }\n      } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n        // Insert to start of list\n        var firstChild = getChild(el, 0, options, true);\n        if (firstChild === dragEl) {\n          return completed(false);\n        }\n        target = firstChild;\n        targetRect = getRect(target);\n        if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n          capture();\n          el.insertBefore(dragEl, firstChild);\n          parentEl = el; // actualization\n\n          changed();\n          return completed(true);\n        }\n      } else if (target.parentNode === el) {\n        targetRect = getRect(target);\n        var direction = 0,\n          targetBeforeFirstSwap,\n          differentLevel = dragEl.parentNode !== el,\n          differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n          side1 = vertical ? 'top' : 'left',\n          scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n          scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n        if (lastTarget !== target) {\n          targetBeforeFirstSwap = targetRect[side1];\n          pastFirstInvertThresh = false;\n          isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n        }\n        direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n        var sibling;\n        if (direction !== 0) {\n          // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n          var dragIndex = index(dragEl);\n          do {\n            dragIndex -= direction;\n            sibling = parentEl.children[dragIndex];\n          } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n        }\n        // If dragEl is already beside target: Do not insert\n        if (direction === 0 || sibling === target) {\n          return completed(false);\n        }\n        lastTarget = target;\n        lastDirection = direction;\n        var nextSibling = target.nextElementSibling,\n          after = false;\n        after = direction === 1;\n        var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n        if (moveVector !== false) {\n          if (moveVector === 1 || moveVector === -1) {\n            after = moveVector === 1;\n          }\n          _silent = true;\n          setTimeout(_unsilent, 30);\n          capture();\n          if (after && !nextSibling) {\n            el.appendChild(dragEl);\n          } else {\n            target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n          }\n\n          // Undo chrome's scroll adjustment (has no effect on other browsers)\n          if (scrolledPastTop) {\n            scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n          }\n          parentEl = dragEl.parentNode; // actualization\n\n          // must be done before animation\n          if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n            targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n          }\n          changed();\n          return completed(true);\n        }\n      }\n      if (el.contains(dragEl)) {\n        return completed(false);\n      }\n    }\n    return false;\n  },\n  _ignoreWhileAnimating: null,\n  _offMoveEvents: function _offMoveEvents() {\n    off(document, 'mousemove', this._onTouchMove);\n    off(document, 'touchmove', this._onTouchMove);\n    off(document, 'pointermove', this._onTouchMove);\n    off(document, 'dragover', nearestEmptyInsertDetectEvent);\n    off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n    off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n  },\n  _offUpEvents: function _offUpEvents() {\n    var ownerDocument = this.el.ownerDocument;\n    off(ownerDocument, 'mouseup', this._onDrop);\n    off(ownerDocument, 'touchend', this._onDrop);\n    off(ownerDocument, 'pointerup', this._onDrop);\n    off(ownerDocument, 'touchcancel', this._onDrop);\n    off(document, 'selectstart', this);\n  },\n  _onDrop: function _onDrop( /**Event*/evt) {\n    var el = this.el,\n      options = this.options;\n\n    // Get the index of the dragged element within its parent\n    newIndex = index(dragEl);\n    newDraggableIndex = index(dragEl, options.draggable);\n    pluginEvent('drop', this, {\n      evt: evt\n    });\n    parentEl = dragEl && dragEl.parentNode;\n\n    // Get again after plugin event\n    newIndex = index(dragEl);\n    newDraggableIndex = index(dragEl, options.draggable);\n    if (Sortable.eventCanceled) {\n      this._nulling();\n      return;\n    }\n    awaitingDragStarted = false;\n    isCircumstantialInvert = false;\n    pastFirstInvertThresh = false;\n    clearInterval(this._loopId);\n    clearTimeout(this._dragStartTimer);\n    _cancelNextTick(this.cloneId);\n    _cancelNextTick(this._dragStartId);\n\n    // Unbind events\n    if (this.nativeDraggable) {\n      off(document, 'drop', this);\n      off(el, 'dragstart', this._onDragStart);\n    }\n    this._offMoveEvents();\n    this._offUpEvents();\n    if (Safari) {\n      css(document.body, 'user-select', '');\n    }\n    css(dragEl, 'transform', '');\n    if (evt) {\n      if (moved) {\n        evt.cancelable && evt.preventDefault();\n        !options.dropBubble && evt.stopPropagation();\n      }\n      ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n      if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n        // Remove clone(s)\n        cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n      }\n      if (dragEl) {\n        if (this.nativeDraggable) {\n          off(dragEl, 'dragend', this);\n        }\n        _disableDraggable(dragEl);\n        dragEl.style['will-change'] = '';\n\n        // Remove classes\n        // ghostClass is added in dragStarted\n        if (moved && !awaitingDragStarted) {\n          toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n        }\n        toggleClass(dragEl, this.options.chosenClass, false);\n\n        // Drag stop event\n        _dispatchEvent({\n          sortable: this,\n          name: 'unchoose',\n          toEl: parentEl,\n          newIndex: null,\n          newDraggableIndex: null,\n          originalEvent: evt\n        });\n        if (rootEl !== parentEl) {\n          if (newIndex >= 0) {\n            // Add event\n            _dispatchEvent({\n              rootEl: parentEl,\n              name: 'add',\n              toEl: parentEl,\n              fromEl: rootEl,\n              originalEvent: evt\n            });\n\n            // Remove event\n            _dispatchEvent({\n              sortable: this,\n              name: 'remove',\n              toEl: parentEl,\n              originalEvent: evt\n            });\n\n            // drag from one list and drop into another\n            _dispatchEvent({\n              rootEl: parentEl,\n              name: 'sort',\n              toEl: parentEl,\n              fromEl: rootEl,\n              originalEvent: evt\n            });\n            _dispatchEvent({\n              sortable: this,\n              name: 'sort',\n              toEl: parentEl,\n              originalEvent: evt\n            });\n          }\n          putSortable && putSortable.save();\n        } else {\n          if (newIndex !== oldIndex) {\n            if (newIndex >= 0) {\n              // drag & drop within the same list\n              _dispatchEvent({\n                sortable: this,\n                name: 'update',\n                toEl: parentEl,\n                originalEvent: evt\n              });\n              _dispatchEvent({\n                sortable: this,\n                name: 'sort',\n                toEl: parentEl,\n                originalEvent: evt\n              });\n            }\n          }\n        }\n        if (Sortable.active) {\n          /* jshint eqnull:true */\n          if (newIndex == null || newIndex === -1) {\n            newIndex = oldIndex;\n            newDraggableIndex = oldDraggableIndex;\n          }\n          _dispatchEvent({\n            sortable: this,\n            name: 'end',\n            toEl: parentEl,\n            originalEvent: evt\n          });\n\n          // Save sorting\n          this.save();\n        }\n      }\n    }\n    this._nulling();\n  },\n  _nulling: function _nulling() {\n    pluginEvent('nulling', this);\n    rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n    savedInputChecked.forEach(function (el) {\n      el.checked = true;\n    });\n    savedInputChecked.length = lastDx = lastDy = 0;\n  },\n  handleEvent: function handleEvent( /**Event*/evt) {\n    switch (evt.type) {\n      case 'drop':\n      case 'dragend':\n        this._onDrop(evt);\n        break;\n      case 'dragenter':\n      case 'dragover':\n        if (dragEl) {\n          this._onDragOver(evt);\n          _globalDragOver(evt);\n        }\n        break;\n      case 'selectstart':\n        evt.preventDefault();\n        break;\n    }\n  },\n  /**\r\n   * Serializes the item into an array of string.\r\n   * @returns {String[]}\r\n   */\n  toArray: function toArray() {\n    var order = [],\n      el,\n      children = this.el.children,\n      i = 0,\n      n = children.length,\n      options = this.options;\n    for (; i < n; i++) {\n      el = children[i];\n      if (closest(el, options.draggable, this.el, false)) {\n        order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n      }\n    }\n    return order;\n  },\n  /**\r\n   * Sorts the elements according to the array.\r\n   * @param  {String[]}  order  order of the items\r\n   */\n  sort: function sort(order, useAnimation) {\n    var items = {},\n      rootEl = this.el;\n    this.toArray().forEach(function (id, i) {\n      var el = rootEl.children[i];\n      if (closest(el, this.options.draggable, rootEl, false)) {\n        items[id] = el;\n      }\n    }, this);\n    useAnimation && this.captureAnimationState();\n    order.forEach(function (id) {\n      if (items[id]) {\n        rootEl.removeChild(items[id]);\n        rootEl.appendChild(items[id]);\n      }\n    });\n    useAnimation && this.animateAll();\n  },\n  /**\r\n   * Save the current sorting\r\n   */\n  save: function save() {\n    var store = this.options.store;\n    store && store.set && store.set(this);\n  },\n  /**\r\n   * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\r\n   * @param   {HTMLElement}  el\r\n   * @param   {String}       [selector]  default: `options.draggable`\r\n   * @returns {HTMLElement|null}\r\n   */\n  closest: function closest$1(el, selector) {\n    return closest(el, selector || this.options.draggable, this.el, false);\n  },\n  /**\r\n   * Set/get option\r\n   * @param   {string} name\r\n   * @param   {*}      [value]\r\n   * @returns {*}\r\n   */\n  option: function option(name, value) {\n    var options = this.options;\n    if (value === void 0) {\n      return options[name];\n    } else {\n      var modifiedValue = PluginManager.modifyOption(this, name, value);\n      if (typeof modifiedValue !== 'undefined') {\n        options[name] = modifiedValue;\n      } else {\n        options[name] = value;\n      }\n      if (name === 'group') {\n        _prepareGroup(options);\n      }\n    }\n  },\n  /**\r\n   * Destroy\r\n   */\n  destroy: function destroy() {\n    pluginEvent('destroy', this);\n    var el = this.el;\n    el[expando] = null;\n    off(el, 'mousedown', this._onTapStart);\n    off(el, 'touchstart', this._onTapStart);\n    off(el, 'pointerdown', this._onTapStart);\n    if (this.nativeDraggable) {\n      off(el, 'dragover', this);\n      off(el, 'dragenter', this);\n    }\n    // Remove draggable attributes\n    Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n      el.removeAttribute('draggable');\n    });\n    this._onDrop();\n    this._disableDelayedDragEvents();\n    sortables.splice(sortables.indexOf(this.el), 1);\n    this.el = el = null;\n  },\n  _hideClone: function _hideClone() {\n    if (!cloneHidden) {\n      pluginEvent('hideClone', this);\n      if (Sortable.eventCanceled) return;\n      css(cloneEl, 'display', 'none');\n      if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n        cloneEl.parentNode.removeChild(cloneEl);\n      }\n      cloneHidden = true;\n    }\n  },\n  _showClone: function _showClone(putSortable) {\n    if (putSortable.lastPutMode !== 'clone') {\n      this._hideClone();\n      return;\n    }\n    if (cloneHidden) {\n      pluginEvent('showClone', this);\n      if (Sortable.eventCanceled) return;\n\n      // show clone at dragEl or original position\n      if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n        rootEl.insertBefore(cloneEl, dragEl);\n      } else if (nextEl) {\n        rootEl.insertBefore(cloneEl, nextEl);\n      } else {\n        rootEl.appendChild(cloneEl);\n      }\n      if (this.options.group.revertClone) {\n        this.animate(dragEl, cloneEl);\n      }\n      css(cloneEl, 'display', '');\n      cloneHidden = false;\n    }\n  }\n};\nfunction _globalDragOver( /**Event*/evt) {\n  if (evt.dataTransfer) {\n    evt.dataTransfer.dropEffect = 'move';\n  }\n  evt.cancelable && evt.preventDefault();\n}\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n  var evt,\n    sortable = fromEl[expando],\n    onMoveFn = sortable.options.onMove,\n    retVal;\n  // Support for new CustomEvent feature\n  if (window.CustomEvent && !IE11OrLess && !Edge) {\n    evt = new CustomEvent('move', {\n      bubbles: true,\n      cancelable: true\n    });\n  } else {\n    evt = document.createEvent('Event');\n    evt.initEvent('move', true, true);\n  }\n  evt.to = toEl;\n  evt.from = fromEl;\n  evt.dragged = dragEl;\n  evt.draggedRect = dragRect;\n  evt.related = targetEl || toEl;\n  evt.relatedRect = targetRect || getRect(toEl);\n  evt.willInsertAfter = willInsertAfter;\n  evt.originalEvent = originalEvent;\n  fromEl.dispatchEvent(evt);\n  if (onMoveFn) {\n    retVal = onMoveFn.call(sortable, evt, originalEvent);\n  }\n  return retVal;\n}\nfunction _disableDraggable(el) {\n  el.draggable = false;\n}\nfunction _unsilent() {\n  _silent = false;\n}\nfunction _ghostIsFirst(evt, vertical, sortable) {\n  var firstElRect = getRect(getChild(sortable.el, 0, sortable.options, true));\n  var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n  var spacer = 10;\n  return vertical ? evt.clientX < childContainingRect.left - spacer || evt.clientY < firstElRect.top && evt.clientX < firstElRect.right : evt.clientY < childContainingRect.top - spacer || evt.clientY < firstElRect.bottom && evt.clientX < firstElRect.left;\n}\nfunction _ghostIsLast(evt, vertical, sortable) {\n  var lastElRect = getRect(lastChild(sortable.el, sortable.options.draggable));\n  var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n  var spacer = 10;\n  return vertical ? evt.clientX > childContainingRect.right + spacer || evt.clientY > lastElRect.bottom && evt.clientX > lastElRect.left : evt.clientY > childContainingRect.bottom + spacer || evt.clientX > lastElRect.right && evt.clientY > lastElRect.top;\n}\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n  var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n    targetLength = vertical ? targetRect.height : targetRect.width,\n    targetS1 = vertical ? targetRect.top : targetRect.left,\n    targetS2 = vertical ? targetRect.bottom : targetRect.right,\n    invert = false;\n  if (!invertSwap) {\n    // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n    if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n      // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n      // check if past first invert threshold on side opposite of lastDirection\n      if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n        // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n        pastFirstInvertThresh = true;\n      }\n      if (!pastFirstInvertThresh) {\n        // dragEl shadow (target move distance shadow)\n        if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n        : mouseOnAxis > targetS2 - targetMoveDistance) {\n          return -lastDirection;\n        }\n      } else {\n        invert = true;\n      }\n    } else {\n      // Regular\n      if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n        return _getInsertDirection(target);\n      }\n    }\n  }\n  invert = invert || invertSwap;\n  if (invert) {\n    // Invert of regular\n    if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n      return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n    }\n  }\n  return 0;\n}\n\n/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param  {HTMLElement} target       The target whose position dragEl is being inserted at\r\n * @return {Number}                   Direction dragEl must be swapped\r\n */\nfunction _getInsertDirection(target) {\n  if (index(dragEl) < index(target)) {\n    return 1;\n  } else {\n    return -1;\n  }\n}\n\n/**\r\n * Generate id\r\n * @param   {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\n */\nfunction _generateId(el) {\n  var str = el.tagName + el.className + el.src + el.href + el.textContent,\n    i = str.length,\n    sum = 0;\n  while (i--) {\n    sum += str.charCodeAt(i);\n  }\n  return sum.toString(36);\n}\nfunction _saveInputCheckedState(root) {\n  savedInputChecked.length = 0;\n  var inputs = root.getElementsByTagName('input');\n  var idx = inputs.length;\n  while (idx--) {\n    var el = inputs[idx];\n    el.checked && savedInputChecked.push(el);\n  }\n}\nfunction _nextTick(fn) {\n  return setTimeout(fn, 0);\n}\nfunction _cancelNextTick(id) {\n  return clearTimeout(id);\n}\n\n// Fixed #973:\nif (documentExists) {\n  on(document, 'touchmove', function (evt) {\n    if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n      evt.preventDefault();\n    }\n  });\n}\n\n// Export utils\nSortable.utils = {\n  on: on,\n  off: off,\n  css: css,\n  find: find,\n  is: function is(el, selector) {\n    return !!closest(el, selector, el, false);\n  },\n  extend: extend,\n  throttle: throttle,\n  closest: closest,\n  toggleClass: toggleClass,\n  clone: clone,\n  index: index,\n  nextTick: _nextTick,\n  cancelNextTick: _cancelNextTick,\n  detectDirection: _detectDirection,\n  getChild: getChild,\n  expando: expando\n};\n\n/**\r\n * Get the Sortable instance of an element\r\n * @param  {HTMLElement} element The element\r\n * @return {Sortable|undefined}         The instance of Sortable\r\n */\nSortable.get = function (element) {\n  return element[expando];\n};\n\n/**\r\n * Mount a plugin to Sortable\r\n * @param  {...SortablePlugin|SortablePlugin[]} plugins       Plugins being mounted\r\n */\nSortable.mount = function () {\n  for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n    plugins[_key] = arguments[_key];\n  }\n  if (plugins[0].constructor === Array) plugins = plugins[0];\n  plugins.forEach(function (plugin) {\n    if (!plugin.prototype || !plugin.prototype.constructor) {\n      throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n    }\n    if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n    PluginManager.mount(plugin);\n  });\n};\n\n/**\r\n * Create sortable instance\r\n * @param {HTMLElement}  el\r\n * @param {Object}      [options]\r\n */\nSortable.create = function (el, options) {\n  return new Sortable(el, options);\n};\n\n// Export\nSortable.version = version;\n\nvar autoScrolls = [],\n  scrollEl,\n  scrollRootEl,\n  scrolling = false,\n  lastAutoScrollX,\n  lastAutoScrollY,\n  touchEvt$1,\n  pointerElemChangedInterval;\nfunction AutoScrollPlugin() {\n  function AutoScroll() {\n    this.defaults = {\n      scroll: true,\n      forceAutoScrollFallback: false,\n      scrollSensitivity: 30,\n      scrollSpeed: 10,\n      bubbleScroll: true\n    };\n\n    // Bind all private methods\n    for (var fn in this) {\n      if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n        this[fn] = this[fn].bind(this);\n      }\n    }\n  }\n  AutoScroll.prototype = {\n    dragStarted: function dragStarted(_ref) {\n      var originalEvent = _ref.originalEvent;\n      if (this.sortable.nativeDraggable) {\n        on(document, 'dragover', this._handleAutoScroll);\n      } else {\n        if (this.options.supportPointer) {\n          on(document, 'pointermove', this._handleFallbackAutoScroll);\n        } else if (originalEvent.touches) {\n          on(document, 'touchmove', this._handleFallbackAutoScroll);\n        } else {\n          on(document, 'mousemove', this._handleFallbackAutoScroll);\n        }\n      }\n    },\n    dragOverCompleted: function dragOverCompleted(_ref2) {\n      var originalEvent = _ref2.originalEvent;\n      // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n      if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n        this._handleAutoScroll(originalEvent);\n      }\n    },\n    drop: function drop() {\n      if (this.sortable.nativeDraggable) {\n        off(document, 'dragover', this._handleAutoScroll);\n      } else {\n        off(document, 'pointermove', this._handleFallbackAutoScroll);\n        off(document, 'touchmove', this._handleFallbackAutoScroll);\n        off(document, 'mousemove', this._handleFallbackAutoScroll);\n      }\n      clearPointerElemChangedInterval();\n      clearAutoScrolls();\n      cancelThrottle();\n    },\n    nulling: function nulling() {\n      touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n      autoScrolls.length = 0;\n    },\n    _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n      this._handleAutoScroll(evt, true);\n    },\n    _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n      var _this = this;\n      var x = (evt.touches ? evt.touches[0] : evt).clientX,\n        y = (evt.touches ? evt.touches[0] : evt).clientY,\n        elem = document.elementFromPoint(x, y);\n      touchEvt$1 = evt;\n\n      // IE does not seem to have native autoscroll,\n      // Edge's autoscroll seems too conditional,\n      // MACOS Safari does not have autoscroll,\n      // Firefox and Chrome are good\n      if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n        autoScroll(evt, this.options, elem, fallback);\n\n        // Listener for pointer element change\n        var ogElemScroller = getParentAutoScrollElement(elem, true);\n        if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n          pointerElemChangedInterval && clearPointerElemChangedInterval();\n          // Detect for pointer elem change, emulating native DnD behaviour\n          pointerElemChangedInterval = setInterval(function () {\n            var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n            if (newElem !== ogElemScroller) {\n              ogElemScroller = newElem;\n              clearAutoScrolls();\n            }\n            autoScroll(evt, _this.options, newElem, fallback);\n          }, 10);\n          lastAutoScrollX = x;\n          lastAutoScrollY = y;\n        }\n      } else {\n        // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n        if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n          clearAutoScrolls();\n          return;\n        }\n        autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n      }\n    }\n  };\n  return _extends(AutoScroll, {\n    pluginName: 'scroll',\n    initializeByDefault: true\n  });\n}\nfunction clearAutoScrolls() {\n  autoScrolls.forEach(function (autoScroll) {\n    clearInterval(autoScroll.pid);\n  });\n  autoScrolls = [];\n}\nfunction clearPointerElemChangedInterval() {\n  clearInterval(pointerElemChangedInterval);\n}\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n  // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n  if (!options.scroll) return;\n  var x = (evt.touches ? evt.touches[0] : evt).clientX,\n    y = (evt.touches ? evt.touches[0] : evt).clientY,\n    sens = options.scrollSensitivity,\n    speed = options.scrollSpeed,\n    winScroller = getWindowScrollingElement();\n  var scrollThisInstance = false,\n    scrollCustomFn;\n\n  // New scroll root, set scrollEl\n  if (scrollRootEl !== rootEl) {\n    scrollRootEl = rootEl;\n    clearAutoScrolls();\n    scrollEl = options.scroll;\n    scrollCustomFn = options.scrollFn;\n    if (scrollEl === true) {\n      scrollEl = getParentAutoScrollElement(rootEl, true);\n    }\n  }\n  var layersOut = 0;\n  var currentParent = scrollEl;\n  do {\n    var el = currentParent,\n      rect = getRect(el),\n      top = rect.top,\n      bottom = rect.bottom,\n      left = rect.left,\n      right = rect.right,\n      width = rect.width,\n      height = rect.height,\n      canScrollX = void 0,\n      canScrollY = void 0,\n      scrollWidth = el.scrollWidth,\n      scrollHeight = el.scrollHeight,\n      elCSS = css(el),\n      scrollPosX = el.scrollLeft,\n      scrollPosY = el.scrollTop;\n    if (el === winScroller) {\n      canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n      canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n    } else {\n      canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n      canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n    }\n    var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n    var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n    if (!autoScrolls[layersOut]) {\n      for (var i = 0; i <= layersOut; i++) {\n        if (!autoScrolls[i]) {\n          autoScrolls[i] = {};\n        }\n      }\n    }\n    if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n      autoScrolls[layersOut].el = el;\n      autoScrolls[layersOut].vx = vx;\n      autoScrolls[layersOut].vy = vy;\n      clearInterval(autoScrolls[layersOut].pid);\n      if (vx != 0 || vy != 0) {\n        scrollThisInstance = true;\n        /* jshint loopfunc:true */\n        autoScrolls[layersOut].pid = setInterval(function () {\n          // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n          if (isFallback && this.layer === 0) {\n            Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n          }\n          var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n          var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n          if (typeof scrollCustomFn === 'function') {\n            if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n              return;\n            }\n          }\n          scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n        }.bind({\n          layer: layersOut\n        }), 24);\n      }\n    }\n    layersOut++;\n  } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n  scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n  var originalEvent = _ref.originalEvent,\n    putSortable = _ref.putSortable,\n    dragEl = _ref.dragEl,\n    activeSortable = _ref.activeSortable,\n    dispatchSortableEvent = _ref.dispatchSortableEvent,\n    hideGhostForTarget = _ref.hideGhostForTarget,\n    unhideGhostForTarget = _ref.unhideGhostForTarget;\n  if (!originalEvent) return;\n  var toSortable = putSortable || activeSortable;\n  hideGhostForTarget();\n  var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n  var target = document.elementFromPoint(touch.clientX, touch.clientY);\n  unhideGhostForTarget();\n  if (toSortable && !toSortable.el.contains(target)) {\n    dispatchSortableEvent('spill');\n    this.onSpill({\n      dragEl: dragEl,\n      putSortable: putSortable\n    });\n  }\n};\nfunction Revert() {}\nRevert.prototype = {\n  startIndex: null,\n  dragStart: function dragStart(_ref2) {\n    var oldDraggableIndex = _ref2.oldDraggableIndex;\n    this.startIndex = oldDraggableIndex;\n  },\n  onSpill: function onSpill(_ref3) {\n    var dragEl = _ref3.dragEl,\n      putSortable = _ref3.putSortable;\n    this.sortable.captureAnimationState();\n    if (putSortable) {\n      putSortable.captureAnimationState();\n    }\n    var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n    if (nextSibling) {\n      this.sortable.el.insertBefore(dragEl, nextSibling);\n    } else {\n      this.sortable.el.appendChild(dragEl);\n    }\n    this.sortable.animateAll();\n    if (putSortable) {\n      putSortable.animateAll();\n    }\n  },\n  drop: drop\n};\n_extends(Revert, {\n  pluginName: 'revertOnSpill'\n});\nfunction Remove() {}\nRemove.prototype = {\n  onSpill: function onSpill(_ref4) {\n    var dragEl = _ref4.dragEl,\n      putSortable = _ref4.putSortable;\n    var parentSortable = putSortable || this.sortable;\n    parentSortable.captureAnimationState();\n    dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n    parentSortable.animateAll();\n  },\n  drop: drop\n};\n_extends(Remove, {\n  pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\nfunction SwapPlugin() {\n  function Swap() {\n    this.defaults = {\n      swapClass: 'sortable-swap-highlight'\n    };\n  }\n  Swap.prototype = {\n    dragStart: function dragStart(_ref) {\n      var dragEl = _ref.dragEl;\n      lastSwapEl = dragEl;\n    },\n    dragOverValid: function dragOverValid(_ref2) {\n      var completed = _ref2.completed,\n        target = _ref2.target,\n        onMove = _ref2.onMove,\n        activeSortable = _ref2.activeSortable,\n        changed = _ref2.changed,\n        cancel = _ref2.cancel;\n      if (!activeSortable.options.swap) return;\n      var el = this.sortable.el,\n        options = this.options;\n      if (target && target !== el) {\n        var prevSwapEl = lastSwapEl;\n        if (onMove(target) !== false) {\n          toggleClass(target, options.swapClass, true);\n          lastSwapEl = target;\n        } else {\n          lastSwapEl = null;\n        }\n        if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n          toggleClass(prevSwapEl, options.swapClass, false);\n        }\n      }\n      changed();\n      completed(true);\n      cancel();\n    },\n    drop: function drop(_ref3) {\n      var activeSortable = _ref3.activeSortable,\n        putSortable = _ref3.putSortable,\n        dragEl = _ref3.dragEl;\n      var toSortable = putSortable || this.sortable;\n      var options = this.options;\n      lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n      if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n        if (dragEl !== lastSwapEl) {\n          toSortable.captureAnimationState();\n          if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n          swapNodes(dragEl, lastSwapEl);\n          toSortable.animateAll();\n          if (toSortable !== activeSortable) activeSortable.animateAll();\n        }\n      }\n    },\n    nulling: function nulling() {\n      lastSwapEl = null;\n    }\n  };\n  return _extends(Swap, {\n    pluginName: 'swap',\n    eventProperties: function eventProperties() {\n      return {\n        swapItem: lastSwapEl\n      };\n    }\n  });\n}\nfunction swapNodes(n1, n2) {\n  var p1 = n1.parentNode,\n    p2 = n2.parentNode,\n    i1,\n    i2;\n  if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n  i1 = index(n1);\n  i2 = index(n2);\n  if (p1.isEqualNode(p2) && i1 < i2) {\n    i2++;\n  }\n  p1.insertBefore(n2, p1.children[i1]);\n  p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n  multiDragClones = [],\n  lastMultiDragSelect,\n  // for selection with modifier key down (SHIFT)\n  multiDragSortable,\n  initialFolding = false,\n  // Initial multi-drag fold when drag started\n  folding = false,\n  // Folding any other time\n  dragStarted = false,\n  dragEl$1,\n  clonesFromRect,\n  clonesHidden;\nfunction MultiDragPlugin() {\n  function MultiDrag(sortable) {\n    // Bind all private methods\n    for (var fn in this) {\n      if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n        this[fn] = this[fn].bind(this);\n      }\n    }\n    if (!sortable.options.avoidImplicitDeselect) {\n      if (sortable.options.supportPointer) {\n        on(document, 'pointerup', this._deselectMultiDrag);\n      } else {\n        on(document, 'mouseup', this._deselectMultiDrag);\n        on(document, 'touchend', this._deselectMultiDrag);\n      }\n    }\n    on(document, 'keydown', this._checkKeyDown);\n    on(document, 'keyup', this._checkKeyUp);\n    this.defaults = {\n      selectedClass: 'sortable-selected',\n      multiDragKey: null,\n      avoidImplicitDeselect: false,\n      setData: function setData(dataTransfer, dragEl) {\n        var data = '';\n        if (multiDragElements.length && multiDragSortable === sortable) {\n          multiDragElements.forEach(function (multiDragElement, i) {\n            data += (!i ? '' : ', ') + multiDragElement.textContent;\n          });\n        } else {\n          data = dragEl.textContent;\n        }\n        dataTransfer.setData('Text', data);\n      }\n    };\n  }\n  MultiDrag.prototype = {\n    multiDragKeyDown: false,\n    isMultiDrag: false,\n    delayStartGlobal: function delayStartGlobal(_ref) {\n      var dragged = _ref.dragEl;\n      dragEl$1 = dragged;\n    },\n    delayEnded: function delayEnded() {\n      this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n    },\n    setupClone: function setupClone(_ref2) {\n      var sortable = _ref2.sortable,\n        cancel = _ref2.cancel;\n      if (!this.isMultiDrag) return;\n      for (var i = 0; i < multiDragElements.length; i++) {\n        multiDragClones.push(clone(multiDragElements[i]));\n        multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n        multiDragClones[i].draggable = false;\n        multiDragClones[i].style['will-change'] = '';\n        toggleClass(multiDragClones[i], this.options.selectedClass, false);\n        multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n      }\n      sortable._hideClone();\n      cancel();\n    },\n    clone: function clone(_ref3) {\n      var sortable = _ref3.sortable,\n        rootEl = _ref3.rootEl,\n        dispatchSortableEvent = _ref3.dispatchSortableEvent,\n        cancel = _ref3.cancel;\n      if (!this.isMultiDrag) return;\n      if (!this.options.removeCloneOnHide) {\n        if (multiDragElements.length && multiDragSortable === sortable) {\n          insertMultiDragClones(true, rootEl);\n          dispatchSortableEvent('clone');\n          cancel();\n        }\n      }\n    },\n    showClone: function showClone(_ref4) {\n      var cloneNowShown = _ref4.cloneNowShown,\n        rootEl = _ref4.rootEl,\n        cancel = _ref4.cancel;\n      if (!this.isMultiDrag) return;\n      insertMultiDragClones(false, rootEl);\n      multiDragClones.forEach(function (clone) {\n        css(clone, 'display', '');\n      });\n      cloneNowShown();\n      clonesHidden = false;\n      cancel();\n    },\n    hideClone: function hideClone(_ref5) {\n      var _this = this;\n      var sortable = _ref5.sortable,\n        cloneNowHidden = _ref5.cloneNowHidden,\n        cancel = _ref5.cancel;\n      if (!this.isMultiDrag) return;\n      multiDragClones.forEach(function (clone) {\n        css(clone, 'display', 'none');\n        if (_this.options.removeCloneOnHide && clone.parentNode) {\n          clone.parentNode.removeChild(clone);\n        }\n      });\n      cloneNowHidden();\n      clonesHidden = true;\n      cancel();\n    },\n    dragStartGlobal: function dragStartGlobal(_ref6) {\n      var sortable = _ref6.sortable;\n      if (!this.isMultiDrag && multiDragSortable) {\n        multiDragSortable.multiDrag._deselectMultiDrag();\n      }\n      multiDragElements.forEach(function (multiDragElement) {\n        multiDragElement.sortableIndex = index(multiDragElement);\n      });\n\n      // Sort multi-drag elements\n      multiDragElements = multiDragElements.sort(function (a, b) {\n        return a.sortableIndex - b.sortableIndex;\n      });\n      dragStarted = true;\n    },\n    dragStarted: function dragStarted(_ref7) {\n      var _this2 = this;\n      var sortable = _ref7.sortable;\n      if (!this.isMultiDrag) return;\n      if (this.options.sort) {\n        // Capture rects,\n        // hide multi drag elements (by positioning them absolute),\n        // set multi drag elements rects to dragRect,\n        // show multi drag elements,\n        // animate to rects,\n        // unset rects & remove from DOM\n\n        sortable.captureAnimationState();\n        if (this.options.animation) {\n          multiDragElements.forEach(function (multiDragElement) {\n            if (multiDragElement === dragEl$1) return;\n            css(multiDragElement, 'position', 'absolute');\n          });\n          var dragRect = getRect(dragEl$1, false, true, true);\n          multiDragElements.forEach(function (multiDragElement) {\n            if (multiDragElement === dragEl$1) return;\n            setRect(multiDragElement, dragRect);\n          });\n          folding = true;\n          initialFolding = true;\n        }\n      }\n      sortable.animateAll(function () {\n        folding = false;\n        initialFolding = false;\n        if (_this2.options.animation) {\n          multiDragElements.forEach(function (multiDragElement) {\n            unsetRect(multiDragElement);\n          });\n        }\n\n        // Remove all auxiliary multidrag items from el, if sorting enabled\n        if (_this2.options.sort) {\n          removeMultiDragElements();\n        }\n      });\n    },\n    dragOver: function dragOver(_ref8) {\n      var target = _ref8.target,\n        completed = _ref8.completed,\n        cancel = _ref8.cancel;\n      if (folding && ~multiDragElements.indexOf(target)) {\n        completed(false);\n        cancel();\n      }\n    },\n    revert: function revert(_ref9) {\n      var fromSortable = _ref9.fromSortable,\n        rootEl = _ref9.rootEl,\n        sortable = _ref9.sortable,\n        dragRect = _ref9.dragRect;\n      if (multiDragElements.length > 1) {\n        // Setup unfold animation\n        multiDragElements.forEach(function (multiDragElement) {\n          sortable.addAnimationState({\n            target: multiDragElement,\n            rect: folding ? getRect(multiDragElement) : dragRect\n          });\n          unsetRect(multiDragElement);\n          multiDragElement.fromRect = dragRect;\n          fromSortable.removeAnimationState(multiDragElement);\n        });\n        folding = false;\n        insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n      }\n    },\n    dragOverCompleted: function dragOverCompleted(_ref10) {\n      var sortable = _ref10.sortable,\n        isOwner = _ref10.isOwner,\n        insertion = _ref10.insertion,\n        activeSortable = _ref10.activeSortable,\n        parentEl = _ref10.parentEl,\n        putSortable = _ref10.putSortable;\n      var options = this.options;\n      if (insertion) {\n        // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n        if (isOwner) {\n          activeSortable._hideClone();\n        }\n        initialFolding = false;\n        // If leaving sort:false root, or already folding - Fold to new location\n        if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n          // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n          var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n          multiDragElements.forEach(function (multiDragElement) {\n            if (multiDragElement === dragEl$1) return;\n            setRect(multiDragElement, dragRectAbsolute);\n\n            // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n            // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n            parentEl.appendChild(multiDragElement);\n          });\n          folding = true;\n        }\n\n        // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n        if (!isOwner) {\n          // Only remove if not folding (folding will remove them anyways)\n          if (!folding) {\n            removeMultiDragElements();\n          }\n          if (multiDragElements.length > 1) {\n            var clonesHiddenBefore = clonesHidden;\n            activeSortable._showClone(sortable);\n\n            // Unfold animation for clones if showing from hidden\n            if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n              multiDragClones.forEach(function (clone) {\n                activeSortable.addAnimationState({\n                  target: clone,\n                  rect: clonesFromRect\n                });\n                clone.fromRect = clonesFromRect;\n                clone.thisAnimationDuration = null;\n              });\n            }\n          } else {\n            activeSortable._showClone(sortable);\n          }\n        }\n      }\n    },\n    dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n      var dragRect = _ref11.dragRect,\n        isOwner = _ref11.isOwner,\n        activeSortable = _ref11.activeSortable;\n      multiDragElements.forEach(function (multiDragElement) {\n        multiDragElement.thisAnimationDuration = null;\n      });\n      if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n        clonesFromRect = _extends({}, dragRect);\n        var dragMatrix = matrix(dragEl$1, true);\n        clonesFromRect.top -= dragMatrix.f;\n        clonesFromRect.left -= dragMatrix.e;\n      }\n    },\n    dragOverAnimationComplete: function dragOverAnimationComplete() {\n      if (folding) {\n        folding = false;\n        removeMultiDragElements();\n      }\n    },\n    drop: function drop(_ref12) {\n      var evt = _ref12.originalEvent,\n        rootEl = _ref12.rootEl,\n        parentEl = _ref12.parentEl,\n        sortable = _ref12.sortable,\n        dispatchSortableEvent = _ref12.dispatchSortableEvent,\n        oldIndex = _ref12.oldIndex,\n        putSortable = _ref12.putSortable;\n      var toSortable = putSortable || this.sortable;\n      if (!evt) return;\n      var options = this.options,\n        children = parentEl.children;\n\n      // Multi-drag selection\n      if (!dragStarted) {\n        if (options.multiDragKey && !this.multiDragKeyDown) {\n          this._deselectMultiDrag();\n        }\n        toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n        if (!~multiDragElements.indexOf(dragEl$1)) {\n          multiDragElements.push(dragEl$1);\n          dispatchEvent({\n            sortable: sortable,\n            rootEl: rootEl,\n            name: 'select',\n            targetEl: dragEl$1,\n            originalEvent: evt\n          });\n\n          // Modifier activated, select from last to dragEl\n          if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n            var lastIndex = index(lastMultiDragSelect),\n              currentIndex = index(dragEl$1);\n            if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n              // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n              // (but previous selection existed)\n              var n, i;\n              if (currentIndex > lastIndex) {\n                i = lastIndex;\n                n = currentIndex;\n              } else {\n                i = currentIndex;\n                n = lastIndex + 1;\n              }\n              for (; i < n; i++) {\n                if (~multiDragElements.indexOf(children[i])) continue;\n                toggleClass(children[i], options.selectedClass, true);\n                multiDragElements.push(children[i]);\n                dispatchEvent({\n                  sortable: sortable,\n                  rootEl: rootEl,\n                  name: 'select',\n                  targetEl: children[i],\n                  originalEvent: evt\n                });\n              }\n            }\n          } else {\n            lastMultiDragSelect = dragEl$1;\n          }\n          multiDragSortable = toSortable;\n        } else {\n          multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n          lastMultiDragSelect = null;\n          dispatchEvent({\n            sortable: sortable,\n            rootEl: rootEl,\n            name: 'deselect',\n            targetEl: dragEl$1,\n            originalEvent: evt\n          });\n        }\n      }\n\n      // Multi-drag drop\n      if (dragStarted && this.isMultiDrag) {\n        folding = false;\n        // Do not \"unfold\" after around dragEl if reverted\n        if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n          var dragRect = getRect(dragEl$1),\n            multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n          if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n          toSortable.captureAnimationState();\n          if (!initialFolding) {\n            if (options.animation) {\n              dragEl$1.fromRect = dragRect;\n              multiDragElements.forEach(function (multiDragElement) {\n                multiDragElement.thisAnimationDuration = null;\n                if (multiDragElement !== dragEl$1) {\n                  var rect = folding ? getRect(multiDragElement) : dragRect;\n                  multiDragElement.fromRect = rect;\n\n                  // Prepare unfold animation\n                  toSortable.addAnimationState({\n                    target: multiDragElement,\n                    rect: rect\n                  });\n                }\n              });\n            }\n\n            // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n            // properly they must all be removed\n            removeMultiDragElements();\n            multiDragElements.forEach(function (multiDragElement) {\n              if (children[multiDragIndex]) {\n                parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n              } else {\n                parentEl.appendChild(multiDragElement);\n              }\n              multiDragIndex++;\n            });\n\n            // If initial folding is done, the elements may have changed position because they are now\n            // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n            // must be fired here as Sortable will not.\n            if (oldIndex === index(dragEl$1)) {\n              var update = false;\n              multiDragElements.forEach(function (multiDragElement) {\n                if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n                  update = true;\n                  return;\n                }\n              });\n              if (update) {\n                dispatchSortableEvent('update');\n                dispatchSortableEvent('sort');\n              }\n            }\n          }\n\n          // Must be done after capturing individual rects (scroll bar)\n          multiDragElements.forEach(function (multiDragElement) {\n            unsetRect(multiDragElement);\n          });\n          toSortable.animateAll();\n        }\n        multiDragSortable = toSortable;\n      }\n\n      // Remove clones if necessary\n      if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n        multiDragClones.forEach(function (clone) {\n          clone.parentNode && clone.parentNode.removeChild(clone);\n        });\n      }\n    },\n    nullingGlobal: function nullingGlobal() {\n      this.isMultiDrag = dragStarted = false;\n      multiDragClones.length = 0;\n    },\n    destroyGlobal: function destroyGlobal() {\n      this._deselectMultiDrag();\n      off(document, 'pointerup', this._deselectMultiDrag);\n      off(document, 'mouseup', this._deselectMultiDrag);\n      off(document, 'touchend', this._deselectMultiDrag);\n      off(document, 'keydown', this._checkKeyDown);\n      off(document, 'keyup', this._checkKeyUp);\n    },\n    _deselectMultiDrag: function _deselectMultiDrag(evt) {\n      if (typeof dragStarted !== \"undefined\" && dragStarted) return;\n\n      // Only deselect if selection is in this sortable\n      if (multiDragSortable !== this.sortable) return;\n\n      // Only deselect if target is not item in this sortable\n      if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return;\n\n      // Only deselect if left click\n      if (evt && evt.button !== 0) return;\n      while (multiDragElements.length) {\n        var el = multiDragElements[0];\n        toggleClass(el, this.options.selectedClass, false);\n        multiDragElements.shift();\n        dispatchEvent({\n          sortable: this.sortable,\n          rootEl: this.sortable.el,\n          name: 'deselect',\n          targetEl: el,\n          originalEvent: evt\n        });\n      }\n    },\n    _checkKeyDown: function _checkKeyDown(evt) {\n      if (evt.key === this.options.multiDragKey) {\n        this.multiDragKeyDown = true;\n      }\n    },\n    _checkKeyUp: function _checkKeyUp(evt) {\n      if (evt.key === this.options.multiDragKey) {\n        this.multiDragKeyDown = false;\n      }\n    }\n  };\n  return _extends(MultiDrag, {\n    // Static methods & properties\n    pluginName: 'multiDrag',\n    utils: {\n      /**\r\n       * Selects the provided multi-drag item\r\n       * @param  {HTMLElement} el    The element to be selected\r\n       */\n      select: function select(el) {\n        var sortable = el.parentNode[expando];\n        if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n        if (multiDragSortable && multiDragSortable !== sortable) {\n          multiDragSortable.multiDrag._deselectMultiDrag();\n          multiDragSortable = sortable;\n        }\n        toggleClass(el, sortable.options.selectedClass, true);\n        multiDragElements.push(el);\n      },\n      /**\r\n       * Deselects the provided multi-drag item\r\n       * @param  {HTMLElement} el    The element to be deselected\r\n       */\n      deselect: function deselect(el) {\n        var sortable = el.parentNode[expando],\n          index = multiDragElements.indexOf(el);\n        if (!sortable || !sortable.options.multiDrag || !~index) return;\n        toggleClass(el, sortable.options.selectedClass, false);\n        multiDragElements.splice(index, 1);\n      }\n    },\n    eventProperties: function eventProperties() {\n      var _this3 = this;\n      var oldIndicies = [],\n        newIndicies = [];\n      multiDragElements.forEach(function (multiDragElement) {\n        oldIndicies.push({\n          multiDragElement: multiDragElement,\n          index: multiDragElement.sortableIndex\n        });\n\n        // multiDragElements will already be sorted if folding\n        var newIndex;\n        if (folding && multiDragElement !== dragEl$1) {\n          newIndex = -1;\n        } else if (folding) {\n          newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n        } else {\n          newIndex = index(multiDragElement);\n        }\n        newIndicies.push({\n          multiDragElement: multiDragElement,\n          index: newIndex\n        });\n      });\n      return {\n        items: _toConsumableArray(multiDragElements),\n        clones: [].concat(multiDragClones),\n        oldIndicies: oldIndicies,\n        newIndicies: newIndicies\n      };\n    },\n    optionListeners: {\n      multiDragKey: function multiDragKey(key) {\n        key = key.toLowerCase();\n        if (key === 'ctrl') {\n          key = 'Control';\n        } else if (key.length > 1) {\n          key = key.charAt(0).toUpperCase() + key.substr(1);\n        }\n        return key;\n      }\n    }\n  });\n}\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n  multiDragElements.forEach(function (multiDragElement, i) {\n    var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n    if (target) {\n      rootEl.insertBefore(multiDragElement, target);\n    } else {\n      rootEl.appendChild(multiDragElement);\n    }\n  });\n}\n\n/**\r\n * Insert multi-drag clones\r\n * @param  {[Boolean]} elementsInserted  Whether the multi-drag elements are inserted\r\n * @param  {HTMLElement} rootEl\r\n */\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n  multiDragClones.forEach(function (clone, i) {\n    var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n    if (target) {\n      rootEl.insertBefore(clone, target);\n    } else {\n      rootEl.appendChild(clone);\n    }\n  });\n}\nfunction removeMultiDragElements() {\n  multiDragElements.forEach(function (multiDragElement) {\n    if (multiDragElement === dragEl$1) return;\n    multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n  });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n","/**\r\n * Contains core SlickGrid classes.\r\n * @module Core\r\n * @namespace Slick\r\n */\r\n\r\nimport type {\r\n  AnyFunction,\r\n  CSSStyleDeclarationWritable,\r\n  EditController,\r\n  ElementEventListener,\r\n  Handler,\r\n  InferDOMType,\r\n  MergeTypes\r\n} from './models/index';\r\n\r\nexport interface BasePubSub {\r\n  publish<ArgType = any>(_eventName: string | any, _data?: ArgType): any;\r\n  subscribe<ArgType = any>(_eventName: string | Function, _callback: (data: ArgType) => void): any;\r\n}\r\n\r\n/**\r\n * An event object for passing data to event handlers and letting them control propagation.\r\n * <p>This is pretty much identical to how W3C and jQuery implement events.</p>\r\n * @class EventData\r\n * @constructor\r\n */\r\nexport class SlickEventData<ArgType = any> {\r\n  protected _isPropagationStopped = false;\r\n  protected _isImmediatePropagationStopped = false;\r\n  protected _isDefaultPrevented = false;\r\n  protected returnValues: string[] = [];\r\n  protected returnValue: any = undefined;\r\n  protected _eventTarget?: EventTarget | null;\r\n  protected nativeEvent?: Event | null;\r\n  protected arguments_?: ArgType;\r\n\r\n  // public props that can be optionally pulled from the provided Event in constructor\r\n  // they are all optional props because it really depends on the type of Event provided (KeyboardEvent, MouseEvent, ...)\r\n  readonly altKey?: boolean;\r\n  readonly ctrlKey?: boolean;\r\n  readonly metaKey?: boolean;\r\n  readonly shiftKey?: boolean;\r\n  readonly key?: string;\r\n  readonly keyCode?: number;\r\n  readonly clientX?: number;\r\n  readonly clientY?: number;\r\n  readonly offsetX?: number;\r\n  readonly offsetY?: number;\r\n  readonly pageX?: number;\r\n  readonly pageY?: number;\r\n  readonly bubbles?: boolean;\r\n  readonly target?: HTMLElement;\r\n  readonly type?: string;\r\n  readonly which?: number;\r\n  readonly x?: number;\r\n  readonly y?: number;\r\n\r\n  get defaultPrevented() {\r\n    return this._isDefaultPrevented;\r\n  }\r\n\r\n  constructor(protected event?: Event | null, protected args?: ArgType) {\r\n    this.nativeEvent = event;\r\n    this.arguments_ = args;\r\n\r\n    // when we already have an event, we want to keep some of the event properties\r\n    // looping through some props is the only way to keep and sync these properties to the returned EventData\r\n    if (event) {\r\n      [\r\n        'altKey', 'ctrlKey', 'metaKey', 'shiftKey', 'key', 'keyCode',\r\n        'clientX', 'clientY', 'offsetX', 'offsetY', 'pageX', 'pageY',\r\n        'bubbles', 'target', 'type', 'which', 'x', 'y'\r\n      ].forEach(key => (this as any)[key] = event[key as keyof Event]);\r\n    }\r\n    this._eventTarget = this.nativeEvent ? this.nativeEvent.target : undefined;\r\n  }\r\n\r\n  /**\r\n   * Stops event from propagating up the DOM tree.\r\n   * @method stopPropagation\r\n   */\r\n  stopPropagation() {\r\n    this._isPropagationStopped = true;\r\n    this.nativeEvent?.stopPropagation();\r\n  }\r\n\r\n  /**\r\n   * Returns whether stopPropagation was called on this event object.\r\n   * @method isPropagationStopped\r\n   * @return {Boolean}\r\n   */\r\n  isPropagationStopped() {\r\n    return this._isPropagationStopped;\r\n  }\r\n\r\n  /**\r\n   * Prevents the rest of the handlers from being executed.\r\n   * @method stopImmediatePropagation\r\n   */\r\n  stopImmediatePropagation() {\r\n    this._isImmediatePropagationStopped = true;\r\n    if (this.nativeEvent) {\r\n      this.nativeEvent.stopImmediatePropagation();\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Returns whether stopImmediatePropagation was called on this event object.\\\r\n   * @method isImmediatePropagationStopped\r\n   * @return {Boolean}\r\n   */\r\n  isImmediatePropagationStopped() {\r\n    return this._isImmediatePropagationStopped;\r\n  };\r\n\r\n  getNativeEvent<E extends Event>() {\r\n    return this.nativeEvent as E;\r\n  }\r\n\r\n  preventDefault() {\r\n    if (this.nativeEvent) {\r\n      this.nativeEvent.preventDefault();\r\n    }\r\n    this._isDefaultPrevented = true;\r\n  }\r\n\r\n  isDefaultPrevented() {\r\n    if (this.nativeEvent) {\r\n      return this.nativeEvent.defaultPrevented;\r\n    }\r\n    return this._isDefaultPrevented;\r\n  }\r\n\r\n  addReturnValue(value: any) {\r\n    this.returnValues.push(value);\r\n    if (this.returnValue === undefined && value !== undefined) {\r\n      this.returnValue = value;\r\n    }\r\n  }\r\n\r\n  getReturnValue() {\r\n    return this.returnValue;\r\n  }\r\n\r\n  getArguments() {\r\n    return this.arguments_;\r\n  }\r\n}\r\n\r\n/**\r\n * A simple publisher-subscriber implementation.\r\n * @class Event\r\n * @constructor\r\n */\r\nexport class SlickEvent<ArgType = any> {\r\n  protected _handlers: Handler<ArgType>[] = [];\r\n  protected _pubSubService?: BasePubSub;\r\n\r\n  get subscriberCount() {\r\n    return this._handlers.length;\r\n  }\r\n\r\n  /**\r\n   * Constructor\r\n   * @param {String} [eventName] - event name that could be used for dispatching CustomEvent (when enabled)\r\n   * @param {BasePubSub} [pubSubService] - event name that could be used for dispatching CustomEvent (when enabled)\r\n   */\r\n  constructor(protected readonly eventName?: string, protected readonly pubSub?: BasePubSub) {\r\n    this._pubSubService = pubSub;\r\n  }\r\n\r\n  /**\r\n   * Adds an event handler to be called when the event is fired.\r\n   * <p>Event handler will receive two arguments - an <code>EventData</code> and the <code>data</code>\r\n   * object the event was fired with.<p>\r\n   * @method subscribe\r\n   * @param {Function} fn - Event handler.\r\n   */\r\n  subscribe(fn: Handler<ArgType>) {\r\n    this._handlers.push(fn);\r\n  }\r\n\r\n  /**\r\n   * Removes an event handler added with <code>subscribe(fn)</code>.\r\n   * @method unsubscribe\r\n   * @param {Function} [fn] - Event handler to be removed.\r\n   */\r\n  unsubscribe(fn?: Handler<ArgType>) {\r\n    for (let i = this._handlers.length - 1; i >= 0; i--) {\r\n      if (this._handlers[i] === fn) {\r\n        this._handlers.splice(i, 1);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Fires an event notifying all subscribers.\r\n   * @method notify\r\n   * @param {Object} args Additional data object to be passed to all handlers.\r\n   * @param {EventData} [event] - An <code>EventData</code> object to be passed to all handlers.\r\n   *      For DOM events, an existing W3C event object can be passed in.\r\n   * @param {Object} [scope] - The scope (\"this\") within which the handler will be executed.\r\n   *      If not specified, the scope will be set to the <code>Event</code> instance.\r\n   */\r\n  notify(args: ArgType, evt?: SlickEventData<ArgType> | Event | MergeTypes<SlickEventData<ArgType>, Event> | null, scope?: any) {\r\n    const sed: SlickEventData = evt instanceof SlickEventData\r\n      ? evt\r\n      : new SlickEventData(evt, args);\r\n    scope = scope || this;\r\n\r\n    for (let i = 0; i < this._handlers.length && !(sed.isPropagationStopped() || sed.isImmediatePropagationStopped()); i++) {\r\n      const returnValue = this._handlers[i].call(scope, sed, args);\r\n      sed.addReturnValue(returnValue);\r\n    }\r\n\r\n    // user can optionally add a global PubSub Service which makes it easy to publish/subscribe to events\r\n    if (typeof this._pubSubService?.publish === 'function' && this.eventName) {\r\n      const ret = this._pubSubService.publish<{ args: ArgType; eventData?: SlickEventData<ArgType>; nativeEvent?: Event; }>(this.eventName, { args, eventData: sed });\r\n      sed.addReturnValue(ret);\r\n    }\r\n    return sed;\r\n  }\r\n\r\n  setPubSubService(pubSub: BasePubSub) {\r\n    this._pubSubService = pubSub;\r\n  }\r\n}\r\n\r\nexport class SlickEventHandler {\r\n  protected handlers: Array<{ event: SlickEvent; handler: Handler<any>; }> = [];\r\n\r\n  subscribe<T = any>(event: SlickEvent<T>, handler: Handler<T>) {\r\n    this.handlers.push({ event, handler });\r\n    event.subscribe(handler);\r\n\r\n    return this as SlickEventHandler;  // allow chaining\r\n  }\r\n\r\n  unsubscribe<T = any>(event: SlickEvent<T>, handler: Handler<T>) {\r\n    let i = this.handlers.length;\r\n    while (i--) {\r\n      if (this.handlers[i].event === event &&\r\n        this.handlers[i].handler === handler) {\r\n        this.handlers.splice(i, 1);\r\n        event.unsubscribe(handler);\r\n        return;\r\n      }\r\n    }\r\n\r\n    return this as SlickEventHandler;  // allow chaining\r\n  }\r\n\r\n  unsubscribeAll() {\r\n    let i = this.handlers.length;\r\n    while (i--) {\r\n      this.handlers[i].event.unsubscribe(this.handlers[i].handler);\r\n    }\r\n    this.handlers = [];\r\n\r\n    return this as SlickEventHandler;  // allow chaining\r\n  }\r\n}\r\n\r\n/**\r\n * A structure containing a range of cells.\r\n * @class Range\r\n * @constructor\r\n * @param fromRow {Integer} Starting row.\r\n * @param fromCell {Integer} Starting cell.\r\n * @param toRow {Integer} Optional. Ending row. Defaults to <code>fromRow</code>.\r\n * @param toCell {Integer} Optional. Ending cell. Defaults to <code>fromCell</code>.\r\n */\r\nexport class SlickRange {\r\n  fromRow: number;\r\n  fromCell: number;\r\n  toCell: number;\r\n  toRow: number;\r\n\r\n  constructor(fromRow: number, fromCell: number, toRow?: number, toCell?: number) {\r\n    if (toRow === undefined && toCell === undefined) {\r\n      toRow = fromRow;\r\n      toCell = fromCell;\r\n    }\r\n\r\n    /**\r\n     * @property fromRow\r\n     * @type {Integer}\r\n     */\r\n    this.fromRow = Math.min(fromRow, toRow as number);\r\n\r\n    /**\r\n     * @property fromCell\r\n     * @type {Integer}\r\n     */\r\n    this.fromCell = Math.min(fromCell, toCell as number);\r\n\r\n    /**\r\n     * @property toCell\r\n     * @type {Integer}\r\n     */\r\n    this.toCell = Math.max(fromCell, toCell as number);\r\n\r\n    /**\r\n     * @property toRow\r\n     * @type {Integer}\r\n     */\r\n    this.toRow = Math.max(fromRow, toRow as number);\r\n  }\r\n\r\n\r\n  /**\r\n   * Returns whether a range represents a single row.\r\n   * @method isSingleRow\r\n   * @return {Boolean}\r\n   */\r\n  isSingleRow() {\r\n    return this.fromRow === this.toRow;\r\n  }\r\n\r\n  /**\r\n   * Returns whether a range represents a single cell.\r\n   * @method isSingleCell\r\n   * @return {Boolean}\r\n   */\r\n  isSingleCell() {\r\n    return this.fromRow === this.toRow && this.fromCell === this.toCell;\r\n  }\r\n\r\n  /**\r\n   * Returns whether a range contains a given cell.\r\n   * @method contains\r\n   * @param row {Integer}\r\n   * @param cell {Integer}\r\n   * @return {Boolean}\r\n   */\r\n  contains(row: number, cell: number) {\r\n    return row >= this.fromRow && row <= this.toRow &&\r\n      cell >= this.fromCell && cell <= this.toCell;\r\n  }\r\n\r\n  /**\r\n   * Returns a readable representation of a range.\r\n   * @method toString\r\n   * @return {String}\r\n   */\r\n  toString() {\r\n    if (this.isSingleCell()) {\r\n      return `(${this.fromRow}:${this.fromCell})`;\r\n    }\r\n    else {\r\n      return `(${this.fromRow}:${this.fromCell} - ${this.toRow}:${this.toCell})`;\r\n    }\r\n  };\r\n}\r\n\r\n\r\n/**\r\n * A base class that all special / non-data rows (like Group and GroupTotals) derive from.\r\n * @class NonDataItem\r\n * @constructor\r\n */\r\nexport class SlickNonDataItem {\r\n  __nonDataRow = true;\r\n}\r\n\r\n\r\n/**\r\n * Information about a group of rows.\r\n * @class Group\r\n * @extends Slick.NonDataItem\r\n * @constructor\r\n */\r\nexport class SlickGroup extends SlickNonDataItem {\r\n  __group = true;\r\n\r\n  /**\r\n   * Grouping level, starting with 0.\r\n   * @property level\r\n   * @type {Number}\r\n   */\r\n  level = 0;\r\n\r\n  /**\r\n   * Number of rows in the group.\r\n   * @property count\r\n   * @type {Integer}\r\n   */\r\n  count = 0;\r\n\r\n  /**\r\n   * Grouping value.\r\n   * @property value\r\n   * @type {Object}\r\n   */\r\n  value = null;\r\n\r\n  /**\r\n   * Formatted display value of the group.\r\n   * @property title\r\n   * @type {String}\r\n   */\r\n  title: string | null = null;\r\n\r\n  /**\r\n   * Whether a group is collapsed.\r\n   * @property collapsed\r\n   * @type {Boolean}\r\n   */\r\n  collapsed: boolean | number = false;\r\n\r\n  /**\r\n   * Whether a group selection checkbox is checked.\r\n   * @property selectChecked\r\n   * @type {Boolean}\r\n   */\r\n  selectChecked = false;\r\n\r\n  /**\r\n   * GroupTotals, if any.\r\n   * @property totals\r\n   * @type {GroupTotals}\r\n   */\r\n  totals: SlickGroupTotals = null as any;\r\n\r\n  /**\r\n   * Rows that are part of the group.\r\n   * @property rows\r\n   * @type {Array}\r\n   */\r\n  rows: number[] = [];\r\n\r\n  /**\r\n   * Sub-groups that are part of the group.\r\n   * @property groups\r\n   * @type {Array}\r\n   */\r\n  groups: any[] = null as any;\r\n\r\n  /**\r\n   * A unique key used to identify the group.  This key can be used in calls to DataView\r\n   * collapseGroup() or expandGroup().\r\n   * @property groupingKey\r\n   * @type {Object}\r\n   */\r\n  groupingKey: any = null;\r\n\r\n  constructor() {\r\n    super();\r\n  }\r\n  /**\r\n   * Compares two Group instances.\r\n   * @method equals\r\n   * @return {Boolean}\r\n   * @param group {Group} Group instance to compare to.\r\n   */\r\n  equals(group: SlickGroup): boolean {\r\n    return this.value === group.value &&\r\n      this.count === group.count &&\r\n      this.collapsed === group.collapsed &&\r\n      this.title === group.title;\r\n  };\r\n}\r\n\r\n/**\r\n * Information about group totals.\r\n * An instance of GroupTotals will be created for each totals row and passed to the aggregators\r\n * so that they can store arbitrary data in it.  That data can later be accessed by group totals\r\n * formatters during the display.\r\n * @class GroupTotals\r\n * @extends Slick.NonDataItem\r\n * @constructor\r\n */\r\nexport class SlickGroupTotals extends SlickNonDataItem {\r\n  __groupTotals = true;\r\n\r\n  /**\r\n   * Parent Group.\r\n   * @param group\r\n   * @type {Group}\r\n   */\r\n  group: SlickGroup = null as any;\r\n\r\n  /**\r\n   * Whether the totals have been fully initialized / calculated.\r\n   * Will be set to false for lazy-calculated group totals.\r\n   * @param initialized\r\n   * @type {Boolean}\r\n   */\r\n  initialized = false;\r\n\r\n  constructor() {\r\n    super();\r\n  }\r\n}\r\n\r\n/**\r\n * A locking helper to track the active edit controller and ensure that only a single controller\r\n * can be active at a time.  This prevents a whole class of state and validation synchronization\r\n * issues.  An edit controller (such as SlickGrid) can query if an active edit is in progress\r\n * and attempt a commit or cancel before proceeding.\r\n * @class EditorLock\r\n * @constructor\r\n */\r\nexport class SlickEditorLock {\r\n  activeEditController: any = null;\r\n\r\n  /**\r\n   * Returns true if a specified edit controller is active (has the edit lock).\r\n   * If the parameter is not specified, returns true if any edit controller is active.\r\n   * @method isActive\r\n   * @param editController {EditController}\r\n   * @return {Boolean}\r\n   */\r\n  isActive(editController?: EditController): boolean {\r\n    return (editController ? this.activeEditController === editController : this.activeEditController !== null);\r\n  };\r\n\r\n  /**\r\n   * Sets the specified edit controller as the active edit controller (acquire edit lock).\r\n   * If another edit controller is already active, and exception will be throw new Error(.\r\n   * @method activate\r\n   * @param editController {EditController} edit controller acquiring the lock\r\n   */\r\n  activate(editController: EditController) {\r\n    if (editController === this.activeEditController) { // already activated?\r\n      return;\r\n    }\r\n    if (this.activeEditController !== null) {\r\n      throw new Error(`Slick.EditorLock.activate: an editController is still active, can't activate another editController`);\r\n    }\r\n    if (!editController.commitCurrentEdit) {\r\n      throw new Error('Slick.EditorLock.activate: editController must implement .commitCurrentEdit()');\r\n    }\r\n    if (!editController.cancelCurrentEdit) {\r\n      throw new Error('Slick.EditorLock.activate: editController must implement .cancelCurrentEdit()');\r\n    }\r\n    this.activeEditController = editController;\r\n  };\r\n\r\n  /**\r\n   * Unsets the specified edit controller as the active edit controller (release edit lock).\r\n   * If the specified edit controller is not the active one, an exception will be throw new Error(.\r\n   * @method deactivate\r\n   * @param editController {EditController} edit controller releasing the lock\r\n   */\r\n  deactivate(editController: EditController) {\r\n    if (!this.activeEditController) {\r\n      return;\r\n    }\r\n    if (this.activeEditController !== editController) {\r\n      throw new Error('Slick.EditorLock.deactivate: specified editController is not the currently active one');\r\n    }\r\n    this.activeEditController = null;\r\n  };\r\n\r\n  /**\r\n   * Attempts to commit the current edit by calling \"commitCurrentEdit\" method on the active edit\r\n   * controller and returns whether the commit attempt was successful (commit may fail due to validation\r\n   * errors, etc.).  Edit controller's \"commitCurrentEdit\" must return true if the commit has succeeded\r\n   * and false otherwise.  If no edit controller is active, returns true.\r\n   * @method commitCurrentEdit\r\n   * @return {Boolean}\r\n   */\r\n  commitCurrentEdit(): boolean {\r\n    return (this.activeEditController ? this.activeEditController.commitCurrentEdit() : true);\r\n  };\r\n\r\n  /**\r\n   * Attempts to cancel the current edit by calling \"cancelCurrentEdit\" method on the active edit\r\n   * controller and returns whether the edit was successfully cancelled.  If no edit controller is\r\n   * active, returns true.\r\n   * @method cancelCurrentEdit\r\n   * @return {Boolean}\r\n   */\r\n  cancelCurrentEdit(): boolean {\r\n    return (this.activeEditController ? this.activeEditController.cancelCurrentEdit() : true);\r\n  };\r\n}\r\n\r\nfunction regexSanitizer(dirtyHtml: string) {\r\n  return dirtyHtml.replace(/(\\b)(on[a-z]+)(\\s*)=|javascript:([^>]*)[^>]*|(<\\s*)(\\/*)script([<>]*).*(<\\s*)(\\/*)script(>*)|(&lt;)(\\/*)(script|script defer)(.*)(&gt;|&gt;\">)/gi, '');\r\n}\r\n\r\n/**\r\n * A simple binding event service to keep track of all JavaScript events with callback listeners,\r\n * it allows us to unbind event(s) and their listener(s) by calling a simple unbind method call.\r\n * Unbinding is a necessary step to make sure that all event listeners are removed to avoid memory leaks when destroing the grid\r\n */\r\nexport class BindingEventService {\r\n  protected _boundedEvents: ElementEventListener[] = [];\r\n\r\n  getBoundedEvents() {\r\n    return this._boundedEvents;\r\n  }\r\n\r\n  destroy() {\r\n    this.unbindAll();\r\n  }\r\n\r\n  /** Bind an event listener to any element */\r\n  bind(element: Element | Window, eventName: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions, groupName = '') {\r\n    if (element) {\r\n      element.addEventListener(eventName, listener, options);\r\n      this._boundedEvents.push({ element, eventName, listener, groupName });\r\n    }\r\n  }\r\n\r\n  /** Unbind all will remove every every event handlers that were bounded earlier */\r\n  unbind(element: Element | Window, eventName: string, listener: EventListenerOrEventListenerObject) {\r\n    if (element?.removeEventListener) {\r\n      element.removeEventListener(eventName, listener);\r\n    }\r\n  }\r\n\r\n  unbindByEventName(element: Element | Window, eventName: string) {\r\n    const boundedEvent = this._boundedEvents.find(e => e.element === element && e.eventName === eventName);\r\n    if (boundedEvent) {\r\n      this.unbind(boundedEvent.element, boundedEvent.eventName, boundedEvent.listener);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Unbind all event listeners that were bounded, optionally provide a group name to unbind all listeners assigned to that specific group only.\r\n   */\r\n  unbindAll(groupName?: string | string[]) {\r\n    if (groupName) {\r\n      const groupNames = Array.isArray(groupName) ? groupName : [groupName];\r\n\r\n      // unbind only the bounded event with a specific group\r\n      // Note: we need to loop in reverse order to avoid array reindexing (causing index offset) after a splice is called\r\n      for (let i = this._boundedEvents.length - 1; i >= 0; --i) {\r\n        const boundedEvent = this._boundedEvents[i];\r\n        if (groupNames.some(g => g === boundedEvent.groupName)) {\r\n          const { element, eventName, listener } = boundedEvent;\r\n          this.unbind(element, eventName, listener);\r\n          this._boundedEvents.splice(i, 1);\r\n        }\r\n      }\r\n    } else {\r\n      // unbind everything\r\n      while (this._boundedEvents.length > 0) {\r\n        const boundedEvent = this._boundedEvents.pop() as ElementEventListener;\r\n        const { element, eventName, listener } = boundedEvent;\r\n        this.unbind(element, eventName, listener);\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nexport class Utils {\r\n  // jQuery's extend\r\n  private static getProto = Object.getPrototypeOf;\r\n  private static class2type: any = {};\r\n  private static toString = Utils.class2type.toString;\r\n  private static hasOwn = Utils.class2type.hasOwnProperty;\r\n  private static fnToString = Utils.hasOwn.toString;\r\n  private static ObjectFunctionString = Utils.fnToString.call(Object);\r\n  public static storage = {\r\n    // https://stackoverflow.com/questions/29222027/vanilla-alternative-to-jquery-data-function-any-native-javascript-alternati\r\n    _storage: new WeakMap(),\r\n    // eslint-disable-next-line object-shorthand\r\n    put: function (element: any, key: string, obj: any) {\r\n      if (!this._storage.has(element)) {\r\n        this._storage.set(element, new Map());\r\n      }\r\n      this._storage.get(element).set(key, obj);\r\n    },\r\n    // eslint-disable-next-line object-shorthand\r\n    get: function (element: any, key: string) {\r\n      const el = this._storage.get(element);\r\n      if (el) {\r\n        return el.get(key);\r\n      }\r\n      return null;\r\n    },\r\n    // eslint-disable-next-line object-shorthand\r\n    remove: function (element: any, key: string) {\r\n      const ret = this._storage.get(element).delete(key);\r\n      if (!(this._storage.get(element).size === 0)) {\r\n        this._storage.delete(element);\r\n      }\r\n      return ret;\r\n    }\r\n  };\r\n\r\n  public static isFunction(obj: any) {\r\n    return typeof obj === 'function' && typeof obj.nodeType !== 'number' && typeof obj.item !== 'function';\r\n  }\r\n\r\n  public static isPlainObject(obj: any) {\r\n    if (!obj || Utils.toString.call(obj) !== '[object Object]') {\r\n      return false;\r\n    }\r\n\r\n    const proto = Utils.getProto(obj);\r\n    if (!proto) {\r\n      return true;\r\n    }\r\n    const Ctor = Utils.hasOwn.call(proto, 'constructor') && proto.constructor;\r\n    return typeof Ctor === 'function' && Utils.fnToString.call(Ctor) === Utils.ObjectFunctionString;\r\n  }\r\n\r\n  public static calculateAvailableSpace(element: HTMLElement) {\r\n    let bottom = 0, top = 0, left = 0, right = 0;\r\n\r\n    const windowHeight = window.innerHeight || 0;\r\n    const windowWidth = window.innerWidth || 0;\r\n    const scrollPosition = Utils.windowScrollPosition();\r\n    const pageScrollTop = scrollPosition.top;\r\n    const pageScrollLeft = scrollPosition.left;\r\n    const elmOffset = Utils.offset(element);\r\n\r\n    if (elmOffset) {\r\n      const elementOffsetTop = elmOffset.top || 0;\r\n      const elementOffsetLeft = elmOffset.left || 0;\r\n      top = elementOffsetTop - pageScrollTop;\r\n      bottom = windowHeight - (elementOffsetTop - pageScrollTop);\r\n      left = elementOffsetLeft - pageScrollLeft;\r\n      right = windowWidth - (elementOffsetLeft - pageScrollLeft);\r\n    }\r\n\r\n    return { top, bottom, left, right };\r\n  }\r\n\r\n  public static extend<T = any>(...args: any[]): T {\r\n    let options, name, src, copy, copyIsArray, clone,\r\n      target = args[0],\r\n      i = 1,\r\n      deep = false;\r\n    const length = args.length;\r\n\r\n    if (typeof target === 'boolean') {\r\n      deep = target;\r\n      target = args[i] || {};\r\n      i++;\r\n    } else {\r\n      target = target || {};\r\n    }\r\n    if (typeof target !== 'object' && !Utils.isFunction(target)) {\r\n      target = {};\r\n    }\r\n    if (i === length) {\r\n      // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n      target = this;\r\n      i--;\r\n    }\r\n    for (; i < length; i++) {\r\n      if (Utils.isDefined(options = args[i])) {\r\n        for (name in options) {\r\n          copy = options[name];\r\n          if (name === '__proto__' || target === copy) {\r\n            continue;\r\n          }\r\n          if (deep && copy && (Utils.isPlainObject(copy) ||\r\n            (copyIsArray = Array.isArray(copy)))) {\r\n            src = target[name];\r\n            if (copyIsArray && !Array.isArray(src)) {\r\n              clone = [];\r\n            } else if (!copyIsArray && !Utils.isPlainObject(src)) {\r\n              clone = {};\r\n            } else {\r\n              clone = src;\r\n            }\r\n            copyIsArray = false;\r\n            target[name] = Utils.extend(deep, clone, copy);\r\n          } else if (copy !== undefined) {\r\n            target[name] = copy;\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return target as T;\r\n  }\r\n\r\n  /**\r\n   * Create a DOM Element with any optional attributes or properties.\r\n   * It will only accept valid DOM element properties that `createElement` would accept.\r\n   * For example: `createDomElement('div', { className: 'my-css-class' })`,\r\n   * for style or dataset you need to use nested object `{ style: { display: 'none' }}\r\n   * The last argument is to optionally append the created element to a parent container element.\r\n   * @param {String} tagName - html tag\r\n   * @param {Object} options - element properties\r\n   * @param {[HTMLElement]} appendToParent - parent element to append to\r\n   */\r\n  public static createDomElement<T extends keyof HTMLElementTagNameMap, K extends keyof HTMLElementTagNameMap[T]>(\r\n    tagName: T,\r\n    elementOptions?: null | { [P in K]: InferDOMType<HTMLElementTagNameMap[T][P]> },\r\n    appendToParent?: Element\r\n  ): HTMLElementTagNameMap[T] {\r\n    const elm = document.createElement<T>(tagName);\r\n\r\n    if (elementOptions) {\r\n      Object.keys(elementOptions).forEach((elmOptionKey) => {\r\n        if (elmOptionKey === 'innerHTML') {\r\n          console.warn(`[SlickGrid] For better CSP (Content Security Policy) support, do not use \"innerHTML\" directly in \"createDomElement('${tagName}', { innerHTML: 'some html'})\"` +\r\n            `, it is better as separate assignment: \"const elm = createDomElement('span'); elm.innerHTML = 'some html';\"`);\r\n        }\r\n\r\n        const elmValue = elementOptions[elmOptionKey as keyof typeof elementOptions];\r\n        if (typeof elmValue === 'object') {\r\n          Object.assign(elm[elmOptionKey as K] as object, elmValue);\r\n        } else {\r\n          elm[elmOptionKey as K] = (elementOptions as any)[elmOptionKey as keyof typeof elementOptions];\r\n        }\r\n      });\r\n    }\r\n    if (appendToParent?.appendChild) {\r\n      appendToParent.appendChild(elm);\r\n    }\r\n    return elm;\r\n  }\r\n\r\n  /**\r\n   * From any input provided, return the HTML string (when a string is provided, it will be returned \"as is\" but when it's a number it will be converted to string)\r\n   * When detecting HTMLElement/DocumentFragment, we can also specify which HTML type to retrieve innerHTML or outerHTML.\r\n   * We can get the HTML by looping through all fragment `childNodes`\r\n   * @param {DocumentFragment | HTMLElement | string | number} input\r\n   * @param {'innerHTML' | 'outerHTML'} [type] - when the input is a DocumentFragment or HTMLElement, which type of HTML do you want to return? 'innerHTML' or 'outerHTML'\r\n   * @returns {String}\r\n   */\r\n  public static getHtmlStringOutput(input: DocumentFragment | HTMLElement | string | number, type: 'innerHTML' | 'outerHTML' = 'innerHTML'): string {\r\n    if (input instanceof DocumentFragment) {\r\n      // a DocumentFragment doesn't have innerHTML/outerHTML, but we can loop through all children and concatenate them all to an HTML string\r\n      return [].map.call(input.childNodes, (x: HTMLElement) => x[type]).join('') || input.textContent || '';\r\n    } else if (input instanceof HTMLElement) {\r\n      return input[type];\r\n    }\r\n    return String(input); // reaching this line means it's already a string (or number) so just return it as string\r\n  }\r\n\r\n  public static emptyElement<T extends Element = Element>(element?: T | null): T | undefined | null {\r\n    while (element?.firstChild) {\r\n      element.removeChild(element.firstChild);\r\n    }\r\n    return element;\r\n  }\r\n\r\n  /**\r\n   * Accepts string containing the class or space-separated list of classes, and\r\n   * returns list of individual classes.\r\n   * Method properly takes into account extra whitespaces in the `className`\r\n   * e.g.: \" class1    class2   \" => will result in `['class1', 'class2']`.\r\n   * @param {String} className - space separated list of class names\r\n   */\r\n  public static classNameToList(className = ''): string[] {\r\n    return className.split(' ').filter(cls => cls);\r\n  }\r\n\r\n  public static innerSize(elm: HTMLElement, type: 'height' | 'width') {\r\n    let size = 0;\r\n\r\n    if (elm) {\r\n      const clientSize = type === 'height' ? 'clientHeight' : 'clientWidth';\r\n      const sides = type === 'height' ? ['top', 'bottom'] : ['left', 'right'];\r\n      size = elm[clientSize];\r\n      for (const side of sides) {\r\n        const sideSize = (parseFloat(Utils.getElementProp(elm, `padding-${side}`) || '') || 0);\r\n        size -= sideSize;\r\n      }\r\n    }\r\n    return size;\r\n  }\r\n\r\n  public static isDefined<T>(value: T | undefined | null): value is T {\r\n    return <T>value !== undefined && <T>value !== null && <T>value !== '';\r\n  }\r\n\r\n  public static getElementProp(elm: HTMLElement & { getComputedStyle?: () => CSSStyleDeclaration }, property: string) {\r\n    if (elm?.getComputedStyle) {\r\n      return window.getComputedStyle(elm, null).getPropertyValue(property);\r\n    }\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * Get the function details (param & body) of a function.\r\n   * It supports regular function and also ES6 arrow functions\r\n   * @param {Function} fn - function to analyze\r\n   * @param {Boolean} [addReturn] - when using ES6 function as single liner, we could add the missing `return ...`\r\n   * @returns\r\n   */\r\n  public static getFunctionDetails(fn: AnyFunction, addReturn = true) {\r\n    let isAsyncFn = false;\r\n\r\n    const getFunctionBody = (func: AnyFunction) => {\r\n      const fnStr = func.toString();\r\n      isAsyncFn = fnStr.includes('async ');\r\n\r\n      // when fn is one liner arrow fn returning an object in brackets e.g. `() => ({ hello: 'world' })`\r\n      if ((fnStr.replaceAll(' ', '').includes('=>({'))) {\r\n        const matches = fnStr.match(/(({.*}))/g) || [];\r\n        return matches.length >= 1 ? `return ${matches[0]!.trimStart()}` : fnStr;\r\n      }\r\n      const isOneLinerArrowFn = (!fnStr.includes('{') && fnStr.includes('=>'));\r\n      const body = fnStr.substring(\r\n        (fnStr.indexOf('{') + 1) || (fnStr.indexOf('=>') + 2),\r\n        fnStr.includes('}') ? fnStr.lastIndexOf('}') : fnStr.length\r\n      );\r\n      if (addReturn && isOneLinerArrowFn && !body.startsWith('return')) {\r\n        return 'return ' + body.trimStart(); // add the `return ...` to the body for ES6 arrow fn\r\n      }\r\n      return body;\r\n    };\r\n\r\n    const getFunctionParams = (func: AnyFunction): string[] => {\r\n      const STRIP_COMMENTS = /(\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/)|(\\s*=[^,)]*(('(?:\\\\'|[^'\\r\\n])*')|(\"(?:\\\\\"|[^\"\\r\\n])*\"))|(\\s*=[^,)]*))/mg;\r\n      const ARG_NAMES = /([^\\s,]+)/g;\r\n      const fnStr = func.toString().replace(STRIP_COMMENTS, '');\r\n      return fnStr.slice(fnStr.indexOf('(') + 1, fnStr.indexOf(')')).match(ARG_NAMES) ?? [];\r\n    };\r\n\r\n    return {\r\n      params: getFunctionParams(fn),\r\n      body: getFunctionBody(fn),\r\n      isAsync: isAsyncFn,\r\n    };\r\n  }\r\n\r\n  public static insertAfterElement(referenceNode: HTMLElement, newNode: HTMLElement) {\r\n    referenceNode.parentNode?.insertBefore(newNode, referenceNode.nextSibling);\r\n  }\r\n\r\n  public static isEmptyObject(obj: any) {\r\n    if (obj === null || obj === undefined) {\r\n      return true;\r\n    }\r\n    return Object.entries(obj).length === 0;\r\n  }\r\n\r\n  public static noop() { }\r\n\r\n  public static offset(el: HTMLElement | null) {\r\n    if (!el || !el.getBoundingClientRect) {\r\n      return undefined;\r\n    }\r\n    const box = el.getBoundingClientRect();\r\n    const docElem = document.documentElement;\r\n\r\n    return {\r\n      top: box.top + window.pageYOffset - docElem.clientTop,\r\n      left: box.left + window.pageXOffset - docElem.clientLeft\r\n    };\r\n  }\r\n\r\n  public static windowScrollPosition() {\r\n    return {\r\n      left: window.pageXOffset || document.documentElement.scrollLeft || 0,\r\n      top: window.pageYOffset || document.documentElement.scrollTop || 0,\r\n    };\r\n  }\r\n\r\n  public static width(el: HTMLElement, value?: number | string): number | void {\r\n    if (!el || !el.getBoundingClientRect) { return; }\r\n    if (value === undefined) {\r\n      return el.getBoundingClientRect().width;\r\n    }\r\n    Utils.setStyleSize(el, 'width', value);\r\n  }\r\n\r\n  public static height(el: HTMLElement, value?: number | string): number | void {\r\n    if (!el) { return; }\r\n    if (value === undefined) {\r\n      return el.getBoundingClientRect().height;\r\n    }\r\n    Utils.setStyleSize(el, 'height', value);\r\n  }\r\n\r\n  public static setStyleSize(el: HTMLElement, style: string, val?: number | string | Function) {\r\n    if (typeof val === 'function') {\r\n      val = val();\r\n    } else if (typeof val === 'string') {\r\n      el.style[style as CSSStyleDeclarationWritable] = val;\r\n    } else {\r\n      el.style[style as CSSStyleDeclarationWritable] = val + 'px';\r\n    }\r\n  }\r\n\r\n  public static contains(parent: HTMLElement, child: HTMLElement) {\r\n    if (!parent || !child) {\r\n      return false;\r\n    }\r\n\r\n    const parentList = Utils.parents(child);\r\n    return !parentList.every((p) => {\r\n      if (parent === p) {\r\n        return false;\r\n      }\r\n      return true;\r\n    });\r\n  }\r\n\r\n  public static isHidden(el: HTMLElement) {\r\n    return el.offsetWidth === 0 && el.offsetHeight === 0;\r\n  }\r\n\r\n  public static parents(el: HTMLElement | ParentNode, selector?: string) {\r\n    const parents: Array<HTMLElement | ParentNode> = [];\r\n    const visible = selector === ':visible';\r\n    const hidden = selector === ':hidden';\r\n\r\n    while ((el = el.parentNode as ParentNode) && el !== document) {\r\n      if (!el || !el.parentNode) {\r\n        break;\r\n      }\r\n      if (hidden) {\r\n        if (Utils.isHidden(el as HTMLElement)) {\r\n          parents.push(el);\r\n        }\r\n      } else if (visible) {\r\n        if (!Utils.isHidden(el as HTMLElement)) {\r\n          parents.push(el);\r\n        }\r\n      } else if (!selector || (el as any).matches(selector)) {\r\n        parents.push(el);\r\n      }\r\n    }\r\n    return parents;\r\n  }\r\n\r\n  public static toFloat(value: string | number) {\r\n    const x = parseFloat(value as string);\r\n    if (isNaN(x)) {\r\n      return 0;\r\n    }\r\n    return x;\r\n  }\r\n\r\n  public static show(el: HTMLElement | HTMLElement[], type = '') {\r\n    if (Array.isArray(el)) {\r\n      el.forEach((e) => e.style.display = type);\r\n    } else {\r\n      el.style.display = type;\r\n    }\r\n  }\r\n\r\n  public static hide(el: HTMLElement | HTMLElement[]) {\r\n    if (Array.isArray(el)) {\r\n      el.forEach((e) => e.style.display = 'none');\r\n    } else {\r\n      el.style.display = 'none';\r\n    }\r\n  }\r\n\r\n  public static slideUp(el: HTMLElement | HTMLElement[], callback: Function) {\r\n    return Utils.slideAnimation(el, 'slideUp', callback);\r\n  }\r\n\r\n  public static slideDown(el: HTMLElement | HTMLElement[], callback: Function) {\r\n    return Utils.slideAnimation(el, 'slideDown', callback);\r\n  }\r\n\r\n  public static slideAnimation(el: HTMLElement | HTMLElement[], slideDirection: 'slideDown' | 'slideUp', callback: Function) {\r\n    if ((window as any).jQuery !== undefined) {\r\n      (window as any).jQuery(el)[slideDirection]('fast', callback);\r\n      return;\r\n    }\r\n    (slideDirection === 'slideUp') ? Utils.hide(el) : Utils.show(el);\r\n    callback();\r\n  }\r\n\r\n  public static applyDefaults(targetObj: any, srcObj: any) {\r\n    if (typeof srcObj === 'object') {\r\n      Object.keys(srcObj).forEach(key => {\r\n        if (srcObj.hasOwnProperty(key) && !targetObj.hasOwnProperty(key)) {\r\n          targetObj[key] = srcObj[key];\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * User could optionally add PubSub Service to SlickEvent\r\n   * When it is defined then a SlickEvent `notify()` call will also dispatch it by using the PubSub publish() method\r\n   * @param {BasePubSub} [pubSubService]\r\n   * @param {*} scope\r\n   */\r\n  public static addSlickEventPubSubWhenDefined<T = any>(pubSub?: BasePubSub, scope?: T) {\r\n    if (pubSub) {\r\n      for (const prop in scope) {\r\n        if (scope[prop] instanceof SlickEvent && typeof (scope[prop] as SlickEvent).setPubSubService === 'function') {\r\n          (scope[prop] as SlickEvent).setPubSubService(pubSub);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nexport const SlickGlobalEditorLock = new SlickEditorLock();\r\n\r\n// export Slick namespace on both global & window objects\r\nconst SlickCore = {\r\n  Event: SlickEvent,\r\n  EventData: SlickEventData,\r\n  EventHandler: SlickEventHandler,\r\n  Range: SlickRange,\r\n  NonDataRow: SlickNonDataItem,\r\n  Group: SlickGroup,\r\n  GroupTotals: SlickGroupTotals,\r\n  EditorLock: SlickEditorLock,\r\n  RegexSanitizer: regexSanitizer,\r\n\r\n  /**\r\n   * A global singleton editor lock.\r\n   * @class GlobalEditorLock\r\n   * @static\r\n   * @constructor\r\n   */\r\n  GlobalEditorLock: SlickGlobalEditorLock,\r\n\r\n  keyCode: {\r\n    SPACE: 8,\r\n    BACKSPACE: 8,\r\n    DELETE: 46,\r\n    DOWN: 40,\r\n    END: 35,\r\n    ENTER: 13,\r\n    ESCAPE: 27,\r\n    HOME: 36,\r\n    INSERT: 45,\r\n    LEFT: 37,\r\n    PAGE_DOWN: 34,\r\n    PAGE_UP: 33,\r\n    RIGHT: 39,\r\n    TAB: 9,\r\n    UP: 38,\r\n    A: 65\r\n  },\r\n  preClickClassName: 'slick-edit-preclick',\r\n\r\n  GridAutosizeColsMode: {\r\n    None: 'NOA',\r\n    LegacyOff: 'LOF',\r\n    LegacyForceFit: 'LFF',\r\n    IgnoreViewport: 'IGV',\r\n    FitColsToViewport: 'FCV',\r\n    FitViewportToCols: 'FVC'\r\n  },\r\n\r\n  'ColAutosizeMode': {\r\n    Locked: 'LCK',\r\n    Guide: 'GUI',\r\n    Content: 'CON',\r\n    ContentExpandOnly: 'CXO',\r\n    ContentIntelligent: 'CTI'\r\n  },\r\n\r\n  'RowSelectionMode': {\r\n    FirstRow: 'FS1',\r\n    FirstNRows: 'FSN',\r\n    AllRows: 'ALL',\r\n    LastRow: 'LS1'\r\n  },\r\n\r\n  'ValueFilterMode': {\r\n    None: 'NONE',\r\n    DeDuplicate: 'DEDP',\r\n    GetGreatestAndSub: 'GR8T',\r\n    GetLongestTextAndSub: 'LNSB',\r\n    GetLongestText: 'LNSC'\r\n  },\r\n\r\n  WidthEvalMode: {\r\n    Auto: 'AUTO',\r\n    TextOnly: 'CANV',\r\n    HTML: 'HTML'\r\n  }\r\n};\r\n\r\nexport const {\r\n  EditorLock, Event, EventData, EventHandler, Group, GroupTotals, NonDataRow, Range,\r\n  RegexSanitizer, GlobalEditorLock, keyCode, preClickClassName, GridAutosizeColsMode, ColAutosizeMode,\r\n  RowSelectionMode, ValueFilterMode, WidthEvalMode\r\n} = SlickCore;\r\n\r\n// also add to global object when exist\r\nif (IIFE_ONLY && typeof global !== 'undefined' && window.Slick) {\r\n  global.Slick = window.Slick;\r\n}\r\n","import type { CSSStyleDeclarationWritable, CellRangeDecoratorOption, SlickPlugin } from '../models/index';\nimport { Utils as Utils_, type SlickRange } from '../slick.core';\nimport type { SlickGrid } from '../slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\n/***\n   * Displays an overlay on top of a given cell range.\n   *\n   * TODO:\n   * Currently, it blocks mouse events to DOM nodes behind it.\n   * Use FF and WebKit-specific \"pointer-events\" CSS style, or some kind of event forwarding.\n   * Could also construct the borders separately using 4 individual DIVs.\n   *\n   * @param {Grid} grid\n   * @param {Object} options\n   */\nexport class SlickCellRangeDecorator implements SlickPlugin {\n  // --\n  // public API\n  pluginName = 'CellRangeDecorator' as const;\n\n  // --\n  // protected props\n  protected _options: CellRangeDecoratorOption;\n  protected _elem?: HTMLDivElement | null;\n  protected _defaults = {\n    selectionCssClass: 'slick-range-decorator',\n    selectionCss: {\n      zIndex: '9999',\n      border: '2px dashed red'\n    },\n    offset: { top: -1, left: -1, height: -2, width: -2 }\n  } as CellRangeDecoratorOption;\n\n  constructor(protected readonly grid: SlickGrid, options?: Partial<CellRangeDecoratorOption>) {\n    this._options = Utils.extend(true, {}, this._defaults, options);\n  }\n\n  destroy() {\n    this.hide();\n  }\n\n  init() { }\n\n  hide() {\n    this._elem?.remove();\n    this._elem = null;\n  }\n\n  show(range: SlickRange) {\n    if (!this._elem) {\n      this._elem = document.createElement('div');\n      this._elem.className = this._options.selectionCssClass;\n      Object.keys(this._options.selectionCss as CSSStyleDeclaration).forEach((cssStyleKey) => {\n        this._elem!.style[cssStyleKey as CSSStyleDeclarationWritable] = this._options.selectionCss[cssStyleKey as CSSStyleDeclarationWritable];\n      });\n      this._elem.style.position = 'absolute';\n      const canvasNode = this.grid.getActiveCanvasNode();\n      if (canvasNode) {\n        canvasNode.appendChild(this._elem);\n      }\n    }\n\n    const from = this.grid.getCellNodeBox(range.fromRow, range.fromCell);\n    const to = this.grid.getCellNodeBox(range.toRow, range.toCell);\n\n    if (from && to && this._options?.offset) {\n      this._elem.style.top = `${from.top + this._options.offset.top}px`;\n      this._elem.style.left = `${from.left + this._options.offset.left}px`;\n      this._elem.style.height = `${to.bottom - from.top + this._options.offset.height}px`;\n      this._elem.style.width = `${to.right - from.left + this._options.offset.width}px`;\n    }\n\n    return this._elem;\n  }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  Utils.extend(true, window, {\n    Slick: {\n      CellRangeDecorator: SlickCellRangeDecorator\n    }\n  });\n}\n","import type { DragItem, DragPosition, DraggableOption, MouseWheelOption, ResizableOption } from './models/index';\r\nimport { Utils as Utils_ } from './slick.core';\r\n\r\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\r\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\r\n\r\n/***\r\n * Interactions, add basic behaviors to any element.\r\n * All the packages are written in pure vanilla JS and supports both mouse & touch events.\r\n * @module Interactions\r\n * @namespace Slick\r\n */\r\n\r\n/**\r\n * Draggable Class, enables dragging functionality for any element for example cell & row selections.\r\n * Note that mouse/touch start is on the specified container element but all other events are on the document body.\r\n * code refs:\r\n *   https://betterprogramming.pub/perfecting-drag-and-drop-in-pure-vanilla-javascript-a761184b797a\r\n * available optional options:\r\n *   - containerElement: container DOM element, defaults to \"document\"\r\n *   - allowDragFrom: when defined, only allow dragging from an element that matches a specific query selector\r\n *   - allowDragFromClosest: when defined, only allow dragging from an element or its parent matching a specific .closest() query selector\r\n *   - onDragInit: drag initialized callback\r\n *   - onDragStart: drag started callback\r\n *   - onDrag: drag callback\r\n *   - onDragEnd: drag ended callback\r\n * @param {Object} options\r\n * @returns - Draggable instance which includes destroy method\r\n * @class Draggable\r\n */\r\nexport function Draggable(options: DraggableOption) {\r\n  let { containerElement } = options;\r\n  const { onDragInit, onDragStart, onDrag, onDragEnd, preventDragFromKeys } = options;\r\n  let element: HTMLElement | null;\r\n  let startX: number;\r\n  let startY: number;\r\n  let deltaX: number;\r\n  let deltaY: number;\r\n  let dragStarted: boolean;\r\n\r\n  if (!containerElement) {\r\n    containerElement = document.body;\r\n  }\r\n\r\n  let originaldd: Partial<DragItem> = {\r\n    dragSource: containerElement,\r\n    dragHandle: null,\r\n  };\r\n\r\n  function init() {\r\n    if (containerElement) {\r\n      containerElement.addEventListener('mousedown', userPressed as EventListener);\r\n      containerElement.addEventListener('touchstart', userPressed as EventListener);\r\n    }\r\n  }\r\n\r\n  function executeDragCallbackWhenDefined(callback?: (e: DragEvent, dd: DragItem) => boolean | void, evt?: MouseEvent | Touch | TouchEvent | KeyboardEvent, dd?: DragItem) {\r\n    if (typeof callback === 'function') {\r\n      return callback(evt as DragEvent, dd as DragItem);\r\n    }\r\n  }\r\n\r\n  function destroy() {\r\n    if (containerElement) {\r\n      containerElement.removeEventListener('mousedown', userPressed as EventListener);\r\n      containerElement.removeEventListener('touchstart', userPressed as EventListener);\r\n    }\r\n  }\r\n\r\n  /** Do we want to prevent Drag events from happening (for example prevent onDrag when Ctrl key is pressed while dragging) */\r\n  function preventDrag(event: MouseEvent | TouchEvent | KeyboardEvent) {\r\n    let eventPrevented = false;\r\n    if (preventDragFromKeys) {\r\n      preventDragFromKeys.forEach(key => {\r\n        if ((event as KeyboardEvent)[key]) {\r\n          eventPrevented = true;\r\n        }\r\n      });\r\n    }\r\n    return eventPrevented;\r\n  }\r\n\r\n  function userPressed(event: MouseEvent | TouchEvent | KeyboardEvent) {\r\n    if (!preventDrag(event)) {\r\n      element = event.target as HTMLElement;\r\n      const targetEvent: MouseEvent | Touch = (event as TouchEvent)?.touches?.[0] ?? event;\r\n      const { target } = targetEvent;\r\n\r\n      if (!options.allowDragFrom || (options.allowDragFrom && (element.matches(options.allowDragFrom)) || (options.allowDragFromClosest && element.closest(options.allowDragFromClosest)))) {\r\n        originaldd.dragHandle = element as HTMLElement;\r\n        const winScrollPos = Utils.windowScrollPosition();\r\n        startX = winScrollPos.left + targetEvent.clientX;\r\n        startY = winScrollPos.top + targetEvent.clientY;\r\n        deltaX = targetEvent.clientX - targetEvent.clientX;\r\n        deltaY = targetEvent.clientY - targetEvent.clientY;\r\n        originaldd = Object.assign(originaldd, { deltaX, deltaY, startX, startY, target });\r\n        const result = executeDragCallbackWhenDefined(onDragInit as (e: DragEvent, dd: DragPosition) => boolean | void, event, originaldd as DragItem);\r\n\r\n        if (result !== false) {\r\n          document.body.addEventListener('mousemove', userMoved);\r\n          document.body.addEventListener('touchmove', userMoved);\r\n          document.body.addEventListener('mouseup', userReleased);\r\n          document.body.addEventListener('touchend', userReleased);\r\n          document.body.addEventListener('touchcancel', userReleased);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  function userMoved(event: MouseEvent | TouchEvent | KeyboardEvent) {\r\n    if (!preventDrag(event)) {\r\n      const targetEvent: MouseEvent | Touch = (event as TouchEvent)?.touches?.[0] ?? event;\r\n      deltaX = targetEvent.clientX - startX;\r\n      deltaY = targetEvent.clientY - startY;\r\n      const { target } = targetEvent;\r\n\r\n      if (!dragStarted) {\r\n        originaldd = Object.assign(originaldd, { deltaX, deltaY, startX, startY, target });\r\n        executeDragCallbackWhenDefined(onDragStart, event, originaldd as DragItem);\r\n        dragStarted = true;\r\n      }\r\n\r\n      originaldd = Object.assign(originaldd, { deltaX, deltaY, startX, startY, target });\r\n      executeDragCallbackWhenDefined(onDrag, event, originaldd as DragItem);\r\n    }\r\n  }\r\n\r\n  function userReleased(event: MouseEvent | TouchEvent) {\r\n    document.body.removeEventListener('mousemove', userMoved);\r\n    document.body.removeEventListener('touchmove', userMoved);\r\n    document.body.removeEventListener('mouseup', userReleased);\r\n    document.body.removeEventListener('touchend', userReleased);\r\n    document.body.removeEventListener('touchcancel', userReleased);\r\n\r\n    // trigger a dragEnd event only after dragging started and stopped\r\n    if (dragStarted) {\r\n      const { target } = event;\r\n      originaldd = Object.assign(originaldd, { target });\r\n      executeDragCallbackWhenDefined(onDragEnd, event, originaldd as DragItem);\r\n      dragStarted = false;\r\n    }\r\n  }\r\n\r\n  // initialize Slick.MouseWheel by attaching mousewheel event\r\n  init();\r\n\r\n  // public API\r\n  return { destroy };\r\n}\r\n\r\n/**\r\n * MouseWheel Class, add mousewheel listeners and calculate delta values and return them in the callback function.\r\n * available optional options:\r\n *   - element: optional DOM element to attach mousewheel values, if undefined we'll attach it to the \"window\" object\r\n *   - onMouseWheel: mousewheel callback\r\n * @param {Object} options\r\n * @returns - MouseWheel instance which includes destroy method\r\n * @class MouseWheel\r\n */\r\nexport function MouseWheel(options: MouseWheelOption) {\r\n  const { element, onMouseWheel } = options;\r\n\r\n  function destroy() {\r\n    element.removeEventListener('wheel', wheelHandler as EventListener);\r\n    element.removeEventListener('mousewheel', wheelHandler as EventListener);\r\n  }\r\n\r\n  function init() {\r\n    element.addEventListener('wheel', wheelHandler as EventListener);\r\n    element.addEventListener('mousewheel', wheelHandler as EventListener);\r\n  }\r\n\r\n  // copy over the same event handler code used in jquery.mousewheel\r\n  function wheelHandler(event: WheelEvent & { axis: number; wheelDelta: number; wheelDeltaX: number; wheelDeltaY: number; HORIZONTAL_AXIS: number; }) {\r\n    const orgEvent = event || window.event;\r\n    let delta = 0;\r\n    let deltaX = 0;\r\n    let deltaY = 0;\r\n\r\n    // Old school scrollwheel delta\r\n    if (orgEvent.wheelDelta) {\r\n      delta = orgEvent.wheelDelta / 120;\r\n    }\r\n    if (orgEvent.detail) {\r\n      delta = -orgEvent.detail / 3;\r\n    }\r\n\r\n    // New school multidimensional scroll (touchpads) deltas\r\n    deltaY = delta;\r\n\r\n    // Gecko\r\n    if (orgEvent.axis !== undefined && orgEvent.axis === orgEvent.HORIZONTAL_AXIS) {\r\n      deltaY = 0;\r\n      deltaX = -1 * delta;\r\n    }\r\n\r\n    // WebKit\r\n    if (orgEvent.wheelDeltaY !== undefined) {\r\n      deltaY = orgEvent.wheelDeltaY / 120;\r\n    }\r\n    if (orgEvent.wheelDeltaX !== undefined) {\r\n      deltaX = -1 * orgEvent.wheelDeltaX / 120;\r\n    }\r\n\r\n    if (typeof onMouseWheel === 'function') {\r\n      onMouseWheel(event, delta, deltaX, deltaY);\r\n    }\r\n  }\r\n\r\n  // initialize Slick.MouseWheel by attaching mousewheel event\r\n  init();\r\n\r\n  // public API\r\n  return { destroy };\r\n}\r\n\r\n/**\r\n * Resizable Class, enables resize functionality for any element\r\n * Code mostly comes from these 2 resources:\r\n *   https://spin.atomicobject.com/2019/11/21/creating-a-resizable-html-element/\r\n *   https://htmldom.dev/make-a-resizable-element/\r\n * available optional options:\r\n *   - resizeableElement: resizable DOM element\r\n *   - resizeableHandleElement: resizable DOM element\r\n *   - onResizeStart: resize start callback\r\n *   - onResize: resizing callback\r\n *   - onResizeEnd: resize ended callback\r\n * @param {Object} options\r\n * @returns - Resizable instance which includes destroy method\r\n * @class Resizable\r\n */\r\nexport function Resizable(options: ResizableOption) {\r\n  const { resizeableElement, resizeableHandleElement, onResizeStart, onResize, onResizeEnd } = options;\r\n  if (!resizeableHandleElement || typeof resizeableHandleElement.addEventListener !== 'function') {\r\n    throw new Error('[Slick.Resizable] You did not provide a valid html element that will be used for the handle to resize.');\r\n  }\r\n\r\n  function init() {\r\n    // add event listeners on the draggable element\r\n    resizeableHandleElement.addEventListener('mousedown', resizeStartHandler);\r\n    resizeableHandleElement.addEventListener('touchstart', resizeStartHandler);\r\n  }\r\n\r\n  function destroy() {\r\n    if (typeof resizeableHandleElement?.removeEventListener === 'function') {\r\n      resizeableHandleElement.removeEventListener('mousedown', resizeStartHandler);\r\n      resizeableHandleElement.removeEventListener('touchstart', resizeStartHandler);\r\n    }\r\n  }\r\n\r\n  function executeResizeCallbackWhenDefined(callback?: Function, e?: MouseEvent | TouchEvent | Touch) {\r\n    if (typeof callback === 'function') {\r\n      return callback(e, { resizeableElement, resizeableHandleElement });\r\n    }\r\n  }\r\n\r\n  function resizeStartHandler(e: MouseEvent | TouchEvent) {\r\n    e.preventDefault();\r\n    const event = (e as TouchEvent).touches ? (e as TouchEvent).changedTouches[0] : e;\r\n    const result = executeResizeCallbackWhenDefined(onResizeStart, event);\r\n    if (result !== false) {\r\n      document.body.addEventListener('mousemove', resizingHandler);\r\n      document.body.addEventListener('mouseup', resizeEndHandler);\r\n      document.body.addEventListener('touchmove', resizingHandler);\r\n      document.body.addEventListener('touchend', resizeEndHandler);\r\n    }\r\n  }\r\n\r\n  function resizingHandler(e: MouseEvent | TouchEvent) {\r\n    if (e.preventDefault && e.type !== 'touchmove') {\r\n      e.preventDefault();\r\n    }\r\n    const event = (e as TouchEvent).touches ? (e as TouchEvent).changedTouches[0] : e;\r\n    if (typeof onResize === 'function') {\r\n      onResize(event, { resizeableElement, resizeableHandleElement });\r\n    }\r\n  }\r\n\r\n  /** Remove all mouse/touch handlers */\r\n  function resizeEndHandler(e: MouseEvent | TouchEvent) {\r\n    const event = (e as TouchEvent).touches ? (e as TouchEvent).changedTouches[0] : e;\r\n    executeResizeCallbackWhenDefined(onResizeEnd, event);\r\n    document.body.removeEventListener('mousemove', resizingHandler);\r\n    document.body.removeEventListener('mouseup', resizeEndHandler);\r\n    document.body.removeEventListener('touchmove', resizingHandler);\r\n    document.body.removeEventListener('touchend', resizeEndHandler);\r\n  }\r\n\r\n  init();\r\n\r\n  // public API\r\n  return { destroy };\r\n}\r\n\r\n// extend Slick namespace on window object when building as iife\r\nif (IIFE_ONLY && window.Slick) {\r\n  Utils.extend(Slick, {\r\n    Draggable,\r\n    MouseWheel,\r\n    Resizable,\r\n  });\r\n}\r\n","import { SlickEvent as SlickEvent_, type SlickEventData, SlickEventHandler as SlickEventHandler_, SlickRange as SlickRange_, Utils as Utils_ } from '../slick.core';\nimport { Draggable as Draggable_ } from '../slick.interactions';\nimport { SlickCellRangeDecorator as SlickCellRangeDecorator_ } from './slick.cellrangedecorator';\nimport type { CellRangeSelectorOption, DragPosition, DragRange, DragRowMove, GridOption, MouseOffsetViewport, OnScrollEventArgs, SlickPlugin } from '../models/index';\nimport type { SlickGrid } from '../slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst SlickEvent = IIFE_ONLY ? Slick.Event : SlickEvent_;\nconst SlickEventHandler = IIFE_ONLY ? Slick.EventHandler : SlickEventHandler_;\nconst SlickRange = IIFE_ONLY ? Slick.Range : SlickRange_;\nconst Draggable = IIFE_ONLY ? Slick.Draggable : Draggable_;\nconst SlickCellRangeDecorator = IIFE_ONLY ? Slick.CellRangeDecorator : SlickCellRangeDecorator_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\nexport class SlickCellRangeSelector implements SlickPlugin {\n  // --\n  // public API\n  pluginName = 'CellRangeSelector' as const;\n  onBeforeCellRangeSelected = new SlickEvent<{ row: number; cell: number; }>('onBeforeCellRangeSelected');\n  onCellRangeSelected = new SlickEvent<{ range: SlickRange_; }>('onCellRangeSelected');\n  onCellRangeSelecting = new SlickEvent<{ range: SlickRange_; }>('onCellRangeSelecting');\n\n  // --\n  // protected props\n  protected _grid!: SlickGrid;\n  protected _currentlySelectedRange: DragRange | null = null;\n  protected _canvas: HTMLElement | null = null;\n  protected _decorator!: SlickCellRangeDecorator_;\n  protected _gridOptions!: GridOption;\n  protected _activeCanvas!: HTMLElement;\n  protected _dragging = false;\n  protected _handler = new SlickEventHandler();\n  protected _options: CellRangeSelectorOption;\n  protected _defaults = {\n    autoScroll: true,\n    minIntervalToShowNextCell: 30,\n    maxIntervalToShowNextCell: 600, // better to a multiple of minIntervalToShowNextCell\n    accelerateInterval: 5,          // increase 5ms when cursor 1px outside the viewport.\n    selectionCss: {\n      border: '2px dashed blue'\n    }\n  } as CellRangeSelectorOption;\n\n  // Frozen row & column variables\n  protected _rowOffset = 0;\n  protected _columnOffset = 0;\n  protected _isRightCanvas = false;\n  protected _isBottomCanvas = false;\n\n  // autoScroll related constiables\n  protected _activeViewport!: HTMLElement;\n  protected _autoScrollTimerId?: NodeJS.Timeout;\n  protected _draggingMouseOffset!: MouseOffsetViewport;\n  protected _moveDistanceForOneCell!: { x: number; y: number; };\n  protected _xDelayForNextCell = 0;\n  protected _yDelayForNextCell = 0;\n  protected _viewportHeight = 0;\n  protected _viewportWidth = 0;\n  protected _isRowMoveRegistered = false;\n\n  // Scrollings\n  protected _scrollLeft = 0;\n  protected _scrollTop = 0;\n\n  constructor(options?: Partial<CellRangeSelectorOption>) {\n    this._options = Utils.extend(true, {}, this._defaults, options);\n  }\n\n  init(grid: SlickGrid) {\n    if (Draggable === undefined) {\n      throw new Error('Slick.Draggable is undefined, make sure to import \"slick.interactions.js\"');\n    }\n\n    this._decorator = this._options.cellDecorator || new SlickCellRangeDecorator(grid, this._options);\n    this._grid = grid;\n    Utils.addSlickEventPubSubWhenDefined(grid.getPubSubService(), this);\n    this._canvas = this._grid.getCanvasNode();\n    this._gridOptions = this._grid.getOptions();\n    this._handler\n      .subscribe(this._grid.onScroll, this.handleScroll.bind(this))\n      .subscribe(this._grid.onDragInit, this.handleDragInit.bind(this))\n      .subscribe(this._grid.onDragStart, this.handleDragStart.bind(this))\n      .subscribe(this._grid.onDrag, this.handleDrag.bind(this))\n      .subscribe(this._grid.onDragEnd, this.handleDragEnd.bind(this));\n  }\n\n  destroy() {\n    this._handler.unsubscribeAll();\n    this._activeCanvas = null as any;\n    this._activeViewport = null as any;\n    this._canvas = null;\n    this._decorator?.destroy();\n  }\n\n  getCellDecorator() {\n    return this._decorator;\n  }\n\n  protected handleScroll(_e: SlickEventData, args: OnScrollEventArgs) {\n    this._scrollTop = args.scrollTop;\n    this._scrollLeft = args.scrollLeft;\n  }\n\n  protected handleDragInit(e: SlickEventData) {\n    // Set the active canvas node because the decorator needs to append its\n    // box to the correct canvas\n    this._activeCanvas = this._grid.getActiveCanvasNode(e);\n    this._activeViewport = this._grid.getActiveViewportNode(e);\n\n    const scrollbarDimensions = this._grid.getDisplayedScrollbarDimensions();\n    this._viewportWidth = this._activeViewport.offsetWidth - scrollbarDimensions.width;\n    this._viewportHeight = this._activeViewport.offsetHeight - scrollbarDimensions.height;\n\n    this._moveDistanceForOneCell = {\n      x: this._grid.getAbsoluteColumnMinWidth() / 2,\n      y: this._grid.getOptions().rowHeight! / 2\n    };\n    this._isRowMoveRegistered = this.hasRowMoveManager();\n\n    this._rowOffset = 0;\n    this._columnOffset = 0;\n    this._isBottomCanvas = this._activeCanvas.classList.contains('grid-canvas-bottom');\n\n    if (this._gridOptions.frozenRow! > -1 && this._isBottomCanvas) {\n      const canvasSelector = `.${this._grid.getUID()} .grid-canvas-${this._gridOptions.frozenBottom ? 'bottom' : 'top'}`;\n      const canvasElm = document.querySelector(canvasSelector);\n      if (canvasElm) {\n        this._rowOffset = canvasElm.clientHeight || 0;\n      }\n    }\n\n    this._isRightCanvas = this._activeCanvas.classList.contains('grid-canvas-right');\n\n    if (this._gridOptions.frozenColumn! > -1 && this._isRightCanvas) {\n      const canvasLeftElm = document.querySelector(`.${this._grid.getUID()} .grid-canvas-left`);\n      if (canvasLeftElm) {\n        this._columnOffset = canvasLeftElm.clientWidth || 0;\n      }\n    }\n\n    // prevent the grid from cancelling drag'n'drop by default\n    e.stopImmediatePropagation();\n    e.preventDefault();\n  }\n\n  protected handleDragStart(e: SlickEventData, dd: DragRowMove) {\n    const cell = this._grid.getCellFromEvent(e);\n    if (cell && this.onBeforeCellRangeSelected.notify(cell).getReturnValue() !== false && this._grid.canCellBeSelected(cell.row, cell.cell)) {\n      this._dragging = true;\n      e.stopImmediatePropagation();\n    }\n    if (!this._dragging) {\n      return;\n    }\n\n    this._grid.focus();\n\n    const canvasOffset = Utils.offset(this._canvas);\n\n    let startX = dd.startX - (canvasOffset?.left ?? 0);\n    if (this._gridOptions.frozenColumn! >= 0 && this._isRightCanvas) {\n      startX += this._scrollLeft;\n    }\n\n    let startY = dd.startY - (canvasOffset?.top ?? 0);\n    if (this._gridOptions.frozenRow! >= 0 && this._isBottomCanvas) {\n      startY += this._scrollTop;\n    }\n\n    const start = this._grid.getCellFromPoint(startX, startY);\n\n    dd.range = { start, end: {} };\n    this._currentlySelectedRange = dd.range;\n    return this._decorator.show(new SlickRange(start.row, start.cell));\n  }\n\n  protected handleDrag(evt: SlickEventData, dd: DragRowMove) {\n    if (!this._dragging && !this._isRowMoveRegistered) {\n      return;\n    }\n    if (!this._isRowMoveRegistered) {\n      evt.stopImmediatePropagation();\n    }\n\n    const e = evt.getNativeEvent<MouseEvent>();\n    if (this._options.autoScroll) {\n      this._draggingMouseOffset = this.getMouseOffsetViewport(e, dd);\n      if (this._draggingMouseOffset.isOutsideViewport) {\n        return this.handleDragOutsideViewport();\n      }\n    }\n    this.stopIntervalTimer();\n    this.handleDragTo(e, dd);\n  }\n\n  protected getMouseOffsetViewport(e: MouseEvent | TouchEvent, dd: DragRowMove): MouseOffsetViewport {\n    const targetEvent: MouseEvent | Touch = (e as TouchEvent)?.touches?.[0] ?? e;\n    const viewportLeft = this._activeViewport.scrollLeft;\n    const viewportTop = this._activeViewport.scrollTop;\n    const viewportRight = viewportLeft + this._viewportWidth;\n    const viewportBottom = viewportTop + this._viewportHeight;\n\n    const viewportOffset = Utils.offset(this._activeViewport);\n    const viewportOffsetLeft = viewportOffset?.left ?? 0;\n    const viewportOffsetTop = viewportOffset?.top ?? 0;\n    const viewportOffsetRight = viewportOffsetLeft + this._viewportWidth;\n    const viewportOffsetBottom = viewportOffsetTop + this._viewportHeight;\n\n    const result = {\n      e,\n      dd,\n      viewport: {\n        left: viewportLeft,\n        top: viewportTop,\n        right: viewportRight,\n        bottom: viewportBottom,\n        offset: {\n          left: viewportOffsetLeft,\n          top: viewportOffsetTop,\n          right: viewportOffsetRight,\n          bottom: viewportOffsetBottom\n        }\n      },\n      // Consider the viewport as the origin, the `offset` is based on the coordinate system:\n      // the cursor is on the viewport's left/bottom when it is less than 0, and on the right/top when greater than 0.\n      offset: {\n        x: 0,\n        y: 0\n      },\n      isOutsideViewport: false\n    };\n    // ... horizontal\n    if (targetEvent.pageX < viewportOffsetLeft) {\n      result.offset.x = targetEvent.pageX - viewportOffsetLeft;\n    } else if (targetEvent.pageX > viewportOffsetRight) {\n      result.offset.x = targetEvent.pageX - viewportOffsetRight;\n    }\n    // ... vertical\n    if (targetEvent.pageY < viewportOffsetTop) {\n      result.offset.y = viewportOffsetTop - targetEvent.pageY;\n    } else if (targetEvent.pageY > viewportOffsetBottom) {\n      result.offset.y = viewportOffsetBottom - targetEvent.pageY;\n    }\n    result.isOutsideViewport = !!result.offset.x || !!result.offset.y;\n    return result;\n  }\n\n  protected handleDragOutsideViewport() {\n    this._xDelayForNextCell = this._options.maxIntervalToShowNextCell - Math.abs(this._draggingMouseOffset.offset.x) * this._options.accelerateInterval;\n    this._yDelayForNextCell = this._options.maxIntervalToShowNextCell - Math.abs(this._draggingMouseOffset.offset.y) * this._options.accelerateInterval;\n    // only one timer is created to handle the case that cursor outside the viewport\n    if (!this._autoScrollTimerId) {\n      let xTotalDelay = 0;\n      let yTotalDelay = 0;\n      this._autoScrollTimerId = setInterval(() => {\n        let xNeedUpdate = false;\n        let yNeedUpdate = false;\n        // ... horizontal\n        if (this._draggingMouseOffset.offset.x) {\n          xTotalDelay += this._options.minIntervalToShowNextCell;\n          xNeedUpdate = xTotalDelay >= this._xDelayForNextCell;\n        } else {\n          xTotalDelay = 0;\n        }\n        // ... vertical\n        if (this._draggingMouseOffset.offset.y) {\n          yTotalDelay += this._options.minIntervalToShowNextCell;\n          yNeedUpdate = yTotalDelay >= this._yDelayForNextCell;\n        } else {\n          yTotalDelay = 0;\n        }\n        if (xNeedUpdate || yNeedUpdate) {\n          if (xNeedUpdate) {\n            xTotalDelay = 0;\n          }\n          if (yNeedUpdate) {\n            yTotalDelay = 0;\n          }\n          this.handleDragToNewPosition(xNeedUpdate, yNeedUpdate);\n        }\n      }, this._options.minIntervalToShowNextCell);\n    }\n  }\n\n  protected handleDragToNewPosition(xNeedUpdate: boolean, yNeedUpdate: boolean) {\n    let pageX = this._draggingMouseOffset.e.pageX;\n    let pageY = this._draggingMouseOffset.e.pageY;\n    const mouseOffsetX = this._draggingMouseOffset.offset.x;\n    const mouseOffsetY = this._draggingMouseOffset.offset.y;\n    const viewportOffset = this._draggingMouseOffset.viewport.offset;\n    // ... horizontal\n    if (xNeedUpdate && mouseOffsetX) {\n      if (mouseOffsetX > 0) {\n        pageX = viewportOffset.right + this._moveDistanceForOneCell.x;\n      } else {\n        pageX = viewportOffset.left - this._moveDistanceForOneCell.x;\n      }\n    }\n    // ... vertical\n    if (yNeedUpdate && mouseOffsetY) {\n      if (mouseOffsetY > 0) {\n        pageY = viewportOffset.top - this._moveDistanceForOneCell.y;\n      } else {\n        pageY = viewportOffset.bottom + this._moveDistanceForOneCell.y;\n      }\n    }\n    this.handleDragTo({ pageX, pageY }, this._draggingMouseOffset.dd);\n  }\n\n  protected stopIntervalTimer() {\n    if (this._autoScrollTimerId) {\n      clearInterval(this._autoScrollTimerId);\n      this._autoScrollTimerId = undefined;\n    }\n  }\n\n  protected handleDragTo(e: { pageX: number; pageY: number; }, dd: DragPosition) {\n    const targetEvent: MouseEvent | Touch = (e as unknown as TouchEvent)?.touches?.[0] ?? e;\n    const canvasOffset = Utils.offset(this._activeCanvas);\n    const end = this._grid.getCellFromPoint(\n      targetEvent.pageX - (canvasOffset?.left ?? 0) + this._columnOffset,\n      targetEvent.pageY - (canvasOffset?.top ?? 0) + this._rowOffset\n    );\n\n    // ... frozen column(s),\n    if (this._gridOptions.frozenColumn! >= 0 && (!this._isRightCanvas && (end.cell > this._gridOptions.frozenColumn!)) || (this._isRightCanvas && (end.cell <= this._gridOptions.frozenColumn!))) {\n      return;\n    }\n\n    // ... or frozen row(s)\n    if (this._gridOptions.frozenRow! >= 0 && (!this._isBottomCanvas && (end.row >= this._gridOptions.frozenRow!)) || (this._isBottomCanvas && (end.row < this._gridOptions.frozenRow!))) {\n      return;\n    }\n\n    // scrolling the viewport to display the target `end` cell if it is not fully displayed\n    if (this._options.autoScroll && this._draggingMouseOffset) {\n      const endCellBox = this._grid.getCellNodeBox(end.row, end.cell);\n      if (!endCellBox) {\n        return;\n      }\n      const viewport = this._draggingMouseOffset.viewport;\n      if (endCellBox.left < viewport.left || endCellBox.right > viewport.right\n        || endCellBox.top < viewport.top || endCellBox.bottom > viewport.bottom) {\n        this._grid.scrollCellIntoView(end.row, end.cell);\n      }\n    }\n\n    // ... or regular grid (without any frozen options)\n    if (!this._grid.canCellBeSelected(end.row, end.cell)) {\n      return;\n    }\n\n    if (dd?.range) {\n      dd.range.end = end;\n\n      const range = new SlickRange(dd.range.start.row ?? 0, dd.range.start.cell ?? 0, end.row, end.cell);\n      this._decorator.show(range);\n      this.onCellRangeSelecting.notify({\n        range\n      });\n    }\n  }\n\n  protected hasRowMoveManager() {\n    return !!(this._grid.getPluginByName('RowMoveManager') || this._grid.getPluginByName('CrossGridRowMoveManager'));\n  }\n\n  protected handleDragEnd(e: SlickEventData, dd: DragPosition) {\n    this._decorator.hide();\n    if (!this._dragging) {\n      return;\n    }\n\n    this._dragging = false;\n    e.stopImmediatePropagation();\n\n    this.stopIntervalTimer();\n    this.onCellRangeSelected.notify({\n      range: new SlickRange(\n        dd.range.start.row ?? 0,\n        dd.range.start.cell ?? 0,\n        dd.range.end.row,\n        dd.range.end.cell\n      )\n    });\n  }\n\n  getCurrentRange() {\n    return this._currentlySelectedRange;\n  }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  Utils.extend(Slick, {\n    CellRangeSelector: SlickCellRangeSelector\n  });\n}\n","import { keyCode as keyCode_, SlickEvent as SlickEvent_, SlickEventData as SlickEventData_, SlickEventHandler as SlickEventHandler_, SlickRange as SlickRange_, Utils as Utils_ } from '../slick.core';\nimport { Draggable as Draggable_ } from '../slick.interactions';\nimport { SlickCellRangeDecorator as SlickCellRangeDecorator_ } from './slick.cellrangedecorator';\nimport { SlickCellRangeSelector as SlickCellRangeSelector_ } from './slick.cellrangeselector';\nimport type { SlickCrossGridRowMoveManager as SlickCrossGridRowMoveManager_ } from './slick.crossgridrowmovemanager';\nimport type { SlickRowMoveManager as SlickRowMoveManager_ } from './slick.rowmovemanager';\nimport type { OnActiveCellChangedEventArgs, RowSelectionModelOption } from '../models/index';\nimport type { SlickGrid } from '../slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst Draggable = IIFE_ONLY ? Slick.Draggable : Draggable_;\nconst keyCode = IIFE_ONLY ? Slick.keyCode : keyCode_;\nconst SlickCellRangeDecorator = IIFE_ONLY ? Slick.CellRangeDecorator : SlickCellRangeDecorator_;\nconst SlickCellRangeSelector = IIFE_ONLY ? Slick.CellRangeSelector : SlickCellRangeSelector_;\nconst SlickEvent = IIFE_ONLY ? Slick.Event : SlickEvent_;\nconst SlickEventData = IIFE_ONLY ? Slick.EventData : SlickEventData_;\nconst SlickEventHandler = IIFE_ONLY ? Slick.EventHandler : SlickEventHandler_;\nconst SlickRange = IIFE_ONLY ? Slick.Range : SlickRange_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\nexport class SlickRowSelectionModel {\n  // --\n  // public API\n  pluginName = 'RowSelectionModel' as const;\n  onSelectedRangesChanged = new SlickEvent<SlickRange_[]>('onSelectedRangesChanged');\n  // _handler, _inHandler, _isRowMoveManagerHandler, _options, wrapHandler\n  // --\n  // protected props\n  protected _grid!: SlickGrid;\n  protected _ranges: SlickRange_[] = [];\n  protected _eventHandler = new SlickEventHandler();\n  protected _inHandler = false;\n  protected _selector?: SlickCellRangeSelector_;\n  protected _isRowMoveManagerHandler: any;\n  protected _options: RowSelectionModelOption;\n  protected _defaults: RowSelectionModelOption = {\n    selectActiveRow: true,\n    dragToSelect: false,\n    autoScrollWhenDrag: true,\n    cellRangeSelector: undefined\n  };\n\n  constructor(options?: Partial<RowSelectionModelOption>) {\n    this._options = Utils.extend(true, {}, this._defaults, options);\n  }\n\n  init(grid: SlickGrid) {\n    if (Draggable === undefined) {\n      throw new Error('Slick.Draggable is undefined, make sure to import \"slick.interactions.js\"');\n    }\n\n    this._selector = this._options.cellRangeSelector;\n    this._grid = grid;\n    Utils.addSlickEventPubSubWhenDefined(grid.getPubSubService(), this);\n\n    if (!this._selector && this._options.dragToSelect) {\n      if (!SlickCellRangeDecorator) {\n        throw new Error('Slick.CellRangeDecorator is required when option dragToSelect set to true');\n      }\n      this._selector = new SlickCellRangeSelector({\n        selectionCss: { border: 'none' } as CSSStyleDeclaration,\n        autoScroll: this._options.autoScrollWhenDrag\n      });\n    }\n\n    this._eventHandler.subscribe(this._grid.onActiveCellChanged, this.wrapHandler(this.handleActiveCellChange).bind(this));\n    this._eventHandler.subscribe(this._grid.onKeyDown, this.wrapHandler(this.handleKeyDown).bind(this));\n    this._eventHandler.subscribe(this._grid.onClick, this.wrapHandler(this.handleClick).bind(this));\n    if (this._selector) {\n      grid.registerPlugin(this._selector);\n      this._selector.onCellRangeSelecting.subscribe(this.handleCellRangeSelected.bind(this));\n      this._selector.onCellRangeSelected.subscribe(this.handleCellRangeSelected.bind(this));\n      this._selector.onBeforeCellRangeSelected.subscribe(this.handleBeforeCellRangeSelected.bind(this));\n    }\n  }\n\n  destroy() {\n    this._eventHandler.unsubscribeAll();\n    if (this._selector) {\n      this._selector.onCellRangeSelecting.unsubscribe(this.handleCellRangeSelected.bind(this));\n      this._selector.onCellRangeSelected.unsubscribe(this.handleCellRangeSelected.bind(this));\n      this._selector.onBeforeCellRangeSelected.unsubscribe(this.handleBeforeCellRangeSelected.bind(this));\n      this._grid.unregisterPlugin(this._selector);\n      if (this._selector.destroy) {\n        this._selector.destroy();\n      }\n    }\n  }\n\n  protected wrapHandler(handler: (...args: any) => void) {\n    return (...args: any) => {\n      if (!this._inHandler) {\n        this._inHandler = true;\n        handler.apply(this, args);\n        this._inHandler = false;\n      }\n    };\n  }\n\n  protected rangesToRows(ranges: SlickRange_[]): number[] {\n    const rows: number[] = [];\n    for (let i = 0; i < ranges.length; i++) {\n      for (let j = ranges[i].fromRow; j <= ranges[i].toRow; j++) {\n        rows.push(j);\n      }\n    }\n    return rows;\n  }\n\n  protected rowsToRanges(rows: number[]) {\n    const ranges: SlickRange_[] = [];\n    const lastCell = this._grid.getColumns().length - 1;\n    rows.forEach(row => ranges.push(new SlickRange(row, 0, row, lastCell)));\n    return ranges;\n  }\n\n  protected getRowsRange(from: number, to: number) {\n    let i;\n    const rows: number[] = [];\n    for (i = from; i <= to; i++) {\n      rows.push(i);\n    }\n    for (i = to; i < from; i++) {\n      rows.push(i);\n    }\n    return rows;\n  }\n\n  getSelectedRows() {\n    return this.rangesToRows(this._ranges);\n  }\n\n  setSelectedRows(rows: number[]) {\n    this.setSelectedRanges(this.rowsToRanges(rows), 'SlickRowSelectionModel.setSelectedRows');\n  }\n\n  setSelectedRanges(ranges: SlickRange_[], caller = 'SlickRowSelectionModel.setSelectedRanges') {\n    // simple check for: empty selection didn't change, prevent firing onSelectedRangesChanged\n    if ((!this._ranges || this._ranges.length === 0) && (!ranges || ranges.length === 0)) {\n      return;\n    }\n    this._ranges = ranges;\n\n    // provide extra \"caller\" argument through SlickEventData event to avoid breaking the previous pubsub event structure\n    // that only accepts an array of selected range `SlickRange[]`, the SlickEventData args will be merged and used later by `onSelectedRowsChanged`\n    const eventData = new SlickEventData(new CustomEvent('click', { detail: { caller } }), this._ranges);\n    this.onSelectedRangesChanged.notify(this._ranges, eventData);\n  }\n\n  getSelectedRanges() {\n    return this._ranges;\n  }\n\n  refreshSelections() {\n    this.setSelectedRows(this.getSelectedRows());\n  }\n\n  protected handleActiveCellChange(_e: SlickEventData_, args: OnActiveCellChangedEventArgs) {\n    if (this._options.selectActiveRow && Utils.isDefined(args.row)) {\n      this.setSelectedRanges([new SlickRange(args.row, 0, args.row, this._grid.getColumns().length - 1)]);\n    }\n  }\n\n  protected handleKeyDown(e: KeyboardEvent) {\n    const activeRow = this._grid.getActiveCell();\n    if (this._grid.getOptions().multiSelect && activeRow\n      && e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey\n      && (e.which === keyCode.UP || e.which === keyCode.DOWN)) {\n      let selectedRows = this.getSelectedRows();\n      selectedRows.sort(function (x, y) {\n        return x - y;\n      });\n\n      if (!selectedRows.length) {\n        selectedRows = [activeRow.row];\n      }\n\n      let top = selectedRows[0];\n      let bottom = selectedRows[selectedRows.length - 1];\n      let active: number;\n\n      if (e.which === keyCode.DOWN) {\n        active = activeRow.row < bottom || top === bottom ? ++bottom : ++top;\n      } else {\n        active = activeRow.row < bottom ? --bottom : --top;\n      }\n\n      if (active >= 0 && active < this._grid.getDataLength()) {\n        this._grid.scrollRowIntoView(active);\n        const tempRanges = this.rowsToRanges(this.getRowsRange(top, bottom));\n        this.setSelectedRanges(tempRanges);\n      }\n\n      e.preventDefault();\n      e.stopPropagation();\n    }\n  }\n\n  protected handleClick(e: MouseEvent): boolean | void {\n    const cell = this._grid.getCellFromEvent(e);\n    if (!cell || !this._grid.canCellBeActive(cell.row, cell.cell)) {\n      return false;\n    }\n\n    if (!this._grid.getOptions().multiSelect || (\n      !e.ctrlKey && !e.shiftKey && !e.metaKey)) {\n      return false;\n    }\n\n    let selection = this.rangesToRows(this._ranges);\n    const idx = selection.indexOf(cell.row);\n\n    if (idx === -1 && (e.ctrlKey || e.metaKey)) {\n      selection.push(cell.row);\n      this._grid.setActiveCell(cell.row, cell.cell);\n    } else if (idx !== -1 && (e.ctrlKey || e.metaKey)) {\n      selection = selection.filter((o) => o !== cell.row);\n      this._grid.setActiveCell(cell.row, cell.cell);\n    } else if (selection.length && e.shiftKey) {\n      const last = selection.pop() as number;\n      const from = Math.min(cell.row, last);\n      const to = Math.max(cell.row, last);\n      selection = [];\n      for (let i = from; i <= to; i++) {\n        if (i !== last) {\n          selection.push(i);\n        }\n      }\n      selection.push(last);\n      this._grid.setActiveCell(cell.row, cell.cell);\n    }\n\n    const tempRanges = this.rowsToRanges(selection);\n    this.setSelectedRanges(tempRanges);\n    e.stopImmediatePropagation();\n\n    return true;\n  }\n\n  protected handleBeforeCellRangeSelected(e: SlickEventData_, cell: { row: number; cell: number; }): boolean | void {\n    if (!this._isRowMoveManagerHandler) {\n      const rowMoveManager = this._grid.getPluginByName<SlickRowMoveManager_>('RowMoveManager') || this._grid.getPluginByName<SlickCrossGridRowMoveManager_>('CrossGridRowMoveManager');\n      this._isRowMoveManagerHandler = rowMoveManager ? rowMoveManager.isHandlerColumn : Utils.noop;\n    }\n    if (this._grid.getEditorLock().isActive() || this._isRowMoveManagerHandler(cell.cell)) {\n      e.stopPropagation();\n      return false;\n    }\n    this._grid.setActiveCell(cell.row, cell.cell);\n  }\n\n  protected handleCellRangeSelected(_e: SlickEventData_, args: { range: SlickRange_; }): boolean | void {\n    if (!this._grid.getOptions().multiSelect || !this._options.selectActiveRow) {\n      return false;\n    }\n    this.setSelectedRanges([new SlickRange(args.range.fromRow, 0, args.range.toRow, this._grid.getColumns().length - 1)]);\n  }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  Utils.extend(true, window, {\n    Slick: {\n      RowSelectionModel: SlickRowSelectionModel\n    }\n  });\n}\n\n","import { type SlickEventData, SlickGroup as SlickGroup_, keyCode as keyCode_, Utils as Utils_ } from './slick.core';\nimport type { Column, GroupItemMetadataProviderOption, GroupingFormatterItem, ItemMetadata, SlickPlugin } from './models/index';\nimport type { SlickGrid } from './slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst keyCode = IIFE_ONLY ? Slick.keyCode : keyCode_;\nconst SlickGroup = IIFE_ONLY ? Slick.Group : SlickGroup_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\n/**\n * Provides item metadata for group (Slick.Group) and totals (Slick.Totals) rows produced by the DataView.\n * This metadata overrides the default behavior and formatting of those rows so that they appear and function\n * correctly when processed by the grid.\n *\n * This class also acts as a grid plugin providing event handlers to expand & collapse groups.\n * If \"grid.registerPlugin(...)\" is not called, expand & collapse will not work.\n *\n * @class GroupItemMetadataProvider\n * @module Data\n * @namespace Slick.Data\n * @constructor\n * @param inputOptions\n */\nexport class SlickGroupItemMetadataProvider implements SlickPlugin {\n  pluginName = 'GroupItemMetadataProvider' as const;\n\n  protected _grid!: SlickGrid;\n  protected _options: GroupItemMetadataProviderOption;\n  protected _defaults: GroupItemMetadataProviderOption = {\n    checkboxSelect: false,\n    checkboxSelectCssClass: 'slick-group-select-checkbox',\n    checkboxSelectPlugin: null,\n    groupCssClass: 'slick-group',\n    groupTitleCssClass: 'slick-group-title',\n    totalsCssClass: 'slick-group-totals',\n    groupFocusable: true,\n    totalsFocusable: false,\n    toggleCssClass: 'slick-group-toggle',\n    toggleExpandedCssClass: 'expanded',\n    toggleCollapsedCssClass: 'collapsed',\n    enableExpandCollapse: true,\n    groupFormatter: this.defaultGroupCellFormatter.bind(this),\n    totalsFormatter: this.defaultTotalsCellFormatter.bind(this),\n    includeHeaderTotals: false\n  };\n\n  constructor(inputOptions?: GroupItemMetadataProviderOption) {\n    this._options = Utils.extend<GroupItemMetadataProviderOption>(true, {}, this._defaults, inputOptions);\n  }\n\n  /** Getter of SlickGrid DataView object */\n  protected get dataView(): any {\n    return this._grid?.getData?.() ?? {} as any;\n  }\n\n  getOptions() {\n    return this._options;\n  }\n\n  setOptions(inputOptions: GroupItemMetadataProviderOption) {\n    Utils.extend(true, this._options, inputOptions);\n  }\n\n  protected defaultGroupCellFormatter(_row: number, _cell: number, _value: any, _columnDef: Column, item: any) {\n    if (!this._options.enableExpandCollapse) {\n      return item.title;\n    }\n\n    const indentation = `${item.level * 15}px`;\n    const toggleClass = item.collapsed ? this._options.toggleCollapsedCssClass : this._options.toggleExpandedCssClass;\n\n    // use a DocumentFragment to avoid creating an extra div container\n    const containerElm = document.createDocumentFragment();\n\n    // 1. optional row checkbox span to select the entire group rows\n    if (this._options.checkboxSelect) {\n      containerElm.appendChild(Utils.createDomElement('span', { className: `${this._options.checkboxSelectCssClass} ${item.selectChecked ? 'checked' : 'unchecked'}` }));\n    }\n\n    // 2. group toggle span\n    containerElm.appendChild(Utils.createDomElement('span', {\n      className: `${this._options.toggleCssClass} ${toggleClass}`,\n      ariaExpanded: String(!item.collapsed),\n      style: { marginLeft: indentation }\n    }));\n\n    // 3. group title span\n    const groupTitleElm = Utils.createDomElement('span', { className: this._options.groupTitleCssClass || '' });\n    groupTitleElm.setAttribute('level', item.level);\n    (item.title instanceof HTMLElement)\n      ? groupTitleElm.appendChild(item.title)\n      : this._grid.applyHtmlCode(groupTitleElm, item.title ?? '');\n    containerElm.appendChild(groupTitleElm);\n\n    return containerElm;\n  }\n\n  protected defaultTotalsCellFormatter(_row: number, _cell: number, _value: any, columnDef: Column, item: any, grid: SlickGrid) {\n    return (columnDef?.groupTotalsFormatter?.(item, columnDef, grid)) ?? '';\n  }\n\n\n  init(grid: SlickGrid) {\n    this._grid = grid;\n    this._grid.onClick.subscribe(this.handleGridClick.bind(this));\n    this._grid.onKeyDown.subscribe(this.handleGridKeyDown.bind(this));\n  }\n\n  destroy() {\n    if (this._grid) {\n      this._grid.onClick.unsubscribe(this.handleGridClick.bind(this));\n      this._grid.onKeyDown.unsubscribe(this.handleGridKeyDown.bind(this));\n    }\n  }\n\n  protected handleGridClick(e: SlickEventData, args: { row: number; cell: number; grid: SlickGrid; }) {\n    const target = e.target as HTMLElement;\n    const item = this._grid.getDataItem(args.row);\n    if (item && item instanceof SlickGroup && target.classList.contains(this._options.toggleCssClass || '')) {\n      this.handleDataViewExpandOrCollapse(item);\n      e.stopImmediatePropagation();\n      e.preventDefault();\n    }\n    if (item && item instanceof SlickGroup && target.classList.contains(this._options.checkboxSelectCssClass || '')) {\n      item.selectChecked = !item.selectChecked;\n      target.classList.remove((item.selectChecked ? 'unchecked' : 'checked'));\n      target.classList.add((item.selectChecked ? 'checked' : 'unchecked'));\n      // get rowIndexes array\n      const rowIndexes = this.dataView.mapItemsToRows(item.rows);\n      if (item.selectChecked) { \n        this._options.checkboxSelectPlugin.selectRows(rowIndexes); \n      } else {\n        this._options.checkboxSelectPlugin.deSelectRows(rowIndexes);\n      }\n    }\n  }\n\n  // TODO:  add -/+ handling\n  protected handleGridKeyDown(e: SlickEventData) {\n    if (this._options.enableExpandCollapse && (e.which === keyCode.SPACE)) {\n      const activeCell = this._grid.getActiveCell();\n      if (activeCell) {\n        const item = this._grid.getDataItem(activeCell.row);\n        if (item && item instanceof SlickGroup) {\n          this.handleDataViewExpandOrCollapse(item);\n          e.stopImmediatePropagation();\n          e.preventDefault();\n        }\n      }\n    }\n  }\n\n  protected handleDataViewExpandOrCollapse(item: any) {\n    const range = this._grid.getRenderedRange();\n    this.dataView.setRefreshHints({\n      ignoreDiffsBefore: range.top,\n      ignoreDiffsAfter: range.bottom + 1\n    });\n\n    if (item.collapsed) {\n      this.dataView.expandGroup(item.groupingKey);\n    } else {\n      this.dataView.collapseGroup(item.groupingKey);\n    }\n  }\n\n  getGroupRowMetadata(item: GroupingFormatterItem): ItemMetadata {\n    const groupLevel = item?.level;\n    return {\n      selectable: false,\n      focusable: this._options.groupFocusable,\n      cssClasses: `${this._options.groupCssClass} slick-group-level-${groupLevel}`,\n      formatter: (this._options.includeHeaderTotals && this._options.totalsFormatter) || undefined,\n      columns: {\n        0: {\n          colspan: this._options.includeHeaderTotals ? '1' : '*',\n          formatter: this._options.groupFormatter,\n          editor: null\n        }\n      }\n    };\n  }\n\n  getTotalsRowMetadata(item: { group: GroupingFormatterItem }): ItemMetadata | null {\n    const groupLevel = item?.group?.level;\n    return {\n      selectable: false,\n      focusable: this._options.totalsFocusable,\n      cssClasses: `${this._options.totalsCssClass} slick-group-level-${groupLevel}`,\n      formatter: this._options.totalsFormatter,\n      editor: null\n    };\n  }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  window.Slick.Data = window.Slick.Data || {};\n  window.Slick.Data.GroupItemMetadataProvider = SlickGroupItemMetadataProvider;\n}\n","import type {\r\n  Aggregator,\r\n  AnyFunction,\r\n  CssStyleHash,\r\n  CustomDataView,\r\n  DataViewHints,\r\n  Grouping,\r\n  GroupingFormatterItem,\r\n  ItemMetadata,\r\n  OnGroupCollapsedEventArgs,\r\n  OnGroupExpandedEventArgs,\r\n  OnRowCountChangedEventArgs,\r\n  OnRowsChangedEventArgs,\r\n  OnRowsOrCountChangedEventArgs,\r\n  OnSelectedRowIdsChangedEventArgs,\r\n  OnSetItemsCalledEventArgs,\r\n  PagingInfo,\r\n  SlickGridModel,\r\n} from './models/index';\r\nimport {\r\n  type BasePubSub,\r\n  SlickEvent as SlickEvent_,\r\n  SlickEventData as SlickEventData_,\r\n  SlickGroup as SlickGroup_,\r\n  SlickGroupTotals as SlickGroupTotals_,\r\n  Utils as Utils_,\r\n  type SlickNonDataItem,\r\n} from './slick.core';\r\nimport { SlickGroupItemMetadataProvider as SlickGroupItemMetadataProvider_ } from './slick.groupitemmetadataprovider';\r\n\r\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\r\nconst SlickEvent = IIFE_ONLY ? Slick.Event : SlickEvent_;\r\nconst SlickEventData = IIFE_ONLY ? Slick.EventData : SlickEventData_;\r\nconst SlickGroup = IIFE_ONLY ? Slick.Group : SlickGroup_;\r\nconst SlickGroupTotals = IIFE_ONLY ? Slick.GroupTotals : SlickGroupTotals_;\r\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\r\nconst SlickGroupItemMetadataProvider = IIFE_ONLY ? Slick.Data?.GroupItemMetadataProvider ?? {} : SlickGroupItemMetadataProvider_;\r\n\r\nexport interface DataViewOption {\r\n  /** Optionally provide a GroupItemMetadataProvider in order to use Grouping/DraggableGrouping features */\r\n  groupItemMetadataProvider: SlickGroupItemMetadataProvider_ | null;\r\n\r\n  /** defaults to false, are we using inline filters? */\r\n  inlineFilters: boolean;\r\n\r\n  /**\r\n   * defaults to false, option to use CSP Safe approach,\r\n   * Note: it is an opt-in option because it is slightly slower (perf impact) when compared to the non-CSP safe approach.\r\n   */\r\n  useCSPSafeFilter: boolean;\r\n}\r\nexport type FilterFn<T> = (item: T, args: any) => boolean;\r\nexport type FilterCspFn<T> = (item: T[], args: any) => T[];\r\nexport type FilterWithCspCachingFn<T> = (item: T[], args: any, filterCache: any[]) => T[];\r\nexport type DataIdType = number | string;\r\nexport type SlickDataItem = SlickNonDataItem | SlickGroup_ | SlickGroupTotals_ | any;\r\nexport type GroupGetterFn = (val: any) => string | number;\r\n\r\n/**\r\n  * A simple Model implementation.\r\n  * Provides a filtered view of the underlying data.\r\n  * Relies on the data item having an \"id\" property uniquely identifying it.\r\n  */\r\nexport class SlickDataView<TData extends SlickDataItem = any> implements CustomDataView {\r\n  protected defaults: DataViewOption = {\r\n    groupItemMetadataProvider: null,\r\n    inlineFilters: false,\r\n    useCSPSafeFilter: false,\r\n  };\r\n\r\n  // private\r\n  protected idProperty = 'id';          // property holding a unique row id\r\n  protected items: TData[] = [];            // data by index\r\n  protected rows: TData[] = [];             // data by row\r\n  protected idxById = new Map<DataIdType, number>();   // indexes by id\r\n  protected rowsById: { [id: DataIdType]: number } | undefined = undefined;       // rows by id; lazy-calculated\r\n  protected filter: FilterFn<TData> | null = null;         // filter function\r\n  protected filterCSPSafe: FilterFn<TData> | null = null;         // filter function\r\n  protected updated: ({ [id: DataIdType]: boolean }) | null = null;        // updated item ids\r\n  protected suspend = false;            // suspends the recalculation\r\n  protected isBulkSuspend = false;      // delays protectedious operations like the\r\n  // index update and delete to efficient\r\n  // versions at endUpdate\r\n  protected bulkDeleteIds = new Map<DataIdType, boolean>();\r\n  protected sortAsc: boolean | undefined = true;\r\n  protected fastSortField?: string | null | (() => string);\r\n  protected sortComparer!: ((a: TData, b: TData) => number);\r\n  protected refreshHints: DataViewHints = {};\r\n  protected prevRefreshHints: DataViewHints = {};\r\n  protected filterArgs: any;\r\n  protected filteredItems: TData[] = [];\r\n  protected compiledFilter?: FilterFn<TData> | null;\r\n  protected compiledFilterCSPSafe?: FilterCspFn<TData> | null;\r\n  protected compiledFilterWithCaching?: FilterFn<TData> | null;\r\n  protected compiledFilterWithCachingCSPSafe?: FilterWithCspCachingFn<TData> | null;\r\n  protected filterCache: any[] = [];\r\n  protected _grid?: SlickGridModel; // grid object will be defined only after using \"syncGridSelection()\" method\"\r\n\r\n  // grouping\r\n  protected groupingInfoDefaults: Grouping = {\r\n    getter: undefined,\r\n    formatter: undefined,\r\n    comparer: (a: { value: any; }, b: { value: any; }) => (a.value === b.value ? 0 : (a.value > b.value ? 1 : -1)),\r\n    predefinedValues: [],\r\n    aggregators: [],\r\n    aggregateEmpty: false,\r\n    aggregateCollapsed: false,\r\n    aggregateChildGroups: false,\r\n    collapsed: false,\r\n    displayTotalsRow: true,\r\n    lazyTotalsCalculation: false\r\n  };\r\n  protected groupingInfos: Array<Grouping & { aggregators: Aggregator[]; getterIsAFn?: boolean; compiledAccumulators: any[]; getter: GroupGetterFn | string }> = [];\r\n  protected groups: SlickGroup_[] = [];\r\n  protected toggledGroupsByLevel: any[] = [];\r\n  protected groupingDelimiter = ':|:';\r\n  protected selectedRowIds: DataIdType[] = [];\r\n  protected preSelectedRowIdsChangeFn?: (args?: any) => void;\r\n\r\n  protected pagesize = 0;\r\n  protected pagenum = 0;\r\n  protected totalRows = 0;\r\n  protected _options: DataViewOption;\r\n  protected _container?: HTMLElement;\r\n\r\n  // public events\r\n  onBeforePagingInfoChanged: SlickEvent_<PagingInfo>;\r\n  onGroupExpanded: SlickEvent_<OnGroupExpandedEventArgs>;\r\n  onGroupCollapsed: SlickEvent_<OnGroupCollapsedEventArgs>;\r\n  onPagingInfoChanged: SlickEvent_<PagingInfo>;\r\n  onRowCountChanged: SlickEvent_<OnRowCountChangedEventArgs>;\r\n  onRowsChanged: SlickEvent_<OnRowsChangedEventArgs>;\r\n  onRowsOrCountChanged: SlickEvent_<OnRowsOrCountChangedEventArgs>;\r\n  onSelectedRowIdsChanged: SlickEvent_<OnSelectedRowIdsChangedEventArgs>;\r\n  onSetItemsCalled: SlickEvent_<OnSetItemsCalledEventArgs>;\r\n\r\n  constructor(options?: Partial<DataViewOption>, protected externalPubSub?: BasePubSub) {\r\n    this.onBeforePagingInfoChanged = new SlickEvent<PagingInfo>('onBeforePagingInfoChanged', externalPubSub);\r\n    this.onGroupExpanded = new SlickEvent<OnGroupExpandedEventArgs>('onGroupExpanded', externalPubSub);\r\n    this.onGroupCollapsed = new SlickEvent<OnGroupCollapsedEventArgs>('onGroupCollapsed', externalPubSub);\r\n    this.onPagingInfoChanged = new SlickEvent<PagingInfo>('onPagingInfoChanged', externalPubSub);\r\n    this.onRowCountChanged = new SlickEvent<OnRowCountChangedEventArgs>('onRowCountChanged', externalPubSub);\r\n    this.onRowsChanged = new SlickEvent<OnRowsChangedEventArgs>('onRowsChanged', externalPubSub);\r\n    this.onRowsOrCountChanged = new SlickEvent<OnRowsOrCountChangedEventArgs>('onRowsOrCountChanged', externalPubSub);\r\n    this.onSelectedRowIdsChanged = new SlickEvent<OnSelectedRowIdsChangedEventArgs>('onSelectedRowIdsChanged', externalPubSub);\r\n    this.onSetItemsCalled = new SlickEvent<OnSetItemsCalledEventArgs>('onSetItemsCalled', externalPubSub);\r\n\r\n    this._options = Utils.extend(true, {}, this.defaults, options);\r\n  }\r\n\r\n  /**\r\n   * Begins a bached update of the items in the data view.\r\n   * including deletes and the related events are postponed to the endUpdate call.\r\n   * As certain operations are postponed during this update, some methods might not\r\n   * deliver fully consistent information.\r\n   * @param {Boolean} [bulkUpdate] - if set to true, most data view modifications\r\n   */\r\n  beginUpdate(bulkUpdate?: boolean) {\r\n    this.suspend = true;\r\n    this.isBulkSuspend = bulkUpdate === true;\r\n  }\r\n\r\n  endUpdate() {\r\n    const wasBulkSuspend = this.isBulkSuspend;\r\n    this.isBulkSuspend = false;\r\n    this.suspend = false;\r\n    if (wasBulkSuspend) {\r\n      this.processBulkDelete();\r\n      this.ensureIdUniqueness();\r\n    }\r\n    this.refresh();\r\n  }\r\n\r\n  destroy() {\r\n    this.items = [];\r\n    this.idxById = null as any;\r\n    this.rowsById = null as any;\r\n    this.filter = null as any;\r\n    this.filterCSPSafe = null as any;\r\n    this.updated = null as any;\r\n    this.sortComparer = null as any;\r\n    this.filterCache = [];\r\n    this.filteredItems = [];\r\n    this.compiledFilter = null;\r\n    this.compiledFilterCSPSafe = null;\r\n    this.compiledFilterWithCaching = null;\r\n    this.compiledFilterWithCachingCSPSafe = null;\r\n\r\n    if (this._grid && this._grid.onSelectedRowsChanged && this._grid.onCellCssStylesChanged) {\r\n      this._grid.onSelectedRowsChanged.unsubscribe();\r\n      this._grid.onCellCssStylesChanged.unsubscribe();\r\n    }\r\n    if (this.onRowsOrCountChanged) {\r\n      this.onRowsOrCountChanged.unsubscribe();\r\n    }\r\n  }\r\n\r\n  /** provide some refresh hints as to what to rows needs refresh */\r\n  setRefreshHints(hints: DataViewHints) {\r\n    this.refreshHints = hints;\r\n  }\r\n\r\n  /** get extra filter arguments of the filter method */\r\n  getFilterArgs() {\r\n    return this.filterArgs;\r\n  }\r\n\r\n  /** add extra filter arguments to the filter method */\r\n  setFilterArgs(args: any) {\r\n    this.filterArgs = args;\r\n  }\r\n\r\n  /**\r\n   * Processes all delete requests placed during bulk update\r\n   * by recomputing the items and idxById members.\r\n   */\r\n  protected processBulkDelete() {\r\n    if (!this.idxById) { return; }\r\n\r\n    // the bulk update is processed by\r\n    // recomputing the whole items array and the index lookup in one go.\r\n    // this is done by placing the not-deleted items\r\n    // from left to right into the array and shrink the array the the new\r\n    // size afterwards.\r\n    // see https://github.com/6pac/SlickGrid/issues/571 for further details.\r\n\r\n    let id: DataIdType, item, newIdx = 0;\r\n    for (let i = 0, l = this.items.length; i < l; i++) {\r\n      item = this.items[i];\r\n      id = item[this.idProperty as keyof TData] as DataIdType;\r\n      if (id === undefined) {\r\n        throw new Error(`[SlickGrid DataView] Each data element must implement a unique 'id' property`);\r\n      }\r\n\r\n      // if items have been marked as deleted we skip them for the new final items array\r\n      // and we remove them from the lookup table.\r\n      if (this.bulkDeleteIds.has(id)) {\r\n        this.idxById.delete(id);\r\n      } else {\r\n        // for items which are not deleted, we add them to the\r\n        // next free position in the array and register the index in the lookup.\r\n        this.items[newIdx] = item;\r\n        this.idxById.set(id, newIdx);\r\n        ++newIdx;\r\n      }\r\n    }\r\n\r\n    // here we shrink down the full item array to the ones actually\r\n    // inserted in the cleanup loop above.\r\n    this.items.length = newIdx;\r\n    // and finally cleanup the deleted ids to start cleanly on the next update.\r\n    this.bulkDeleteIds = new Map();\r\n  }\r\n\r\n  protected updateIdxById(startingIndex?: number) {\r\n    if (this.isBulkSuspend || !this.idxById) { // during bulk update we do not reorganize\r\n      return;\r\n    }\r\n    startingIndex = startingIndex || 0;\r\n    let id: DataIdType;\r\n    for (let i = startingIndex, l = this.items.length; i < l; i++) {\r\n      id = this.items[i][this.idProperty as keyof TData] as DataIdType;\r\n      if (id === undefined) {\r\n        throw new Error(`[SlickGrid DataView] Each data element must implement a unique 'id' property`);\r\n      }\r\n      this.idxById.set(id, i);\r\n    }\r\n  }\r\n\r\n  protected ensureIdUniqueness() {\r\n    if (this.isBulkSuspend || !this.idxById) { // during bulk update we do not reorganize\r\n      return;\r\n    }\r\n    let id: DataIdType;\r\n    for (let i = 0, l = this.items.length; i < l; i++) {\r\n      id = this.items[i][this.idProperty as keyof TData] as DataIdType;\r\n      if (id === undefined || this.idxById.get(id) !== i) {\r\n        throw new Error(`[SlickGrid DataView] Each data element must implement a unique 'id' property`);\r\n      }\r\n    }\r\n  }\r\n\r\n  /** Get all DataView Items */\r\n  getItems() {\r\n    return this.items;\r\n  }\r\n\r\n  /** Get the DataView Id property name to use (defaults to \"Id\" but could be customized to something else when instantiating the DataView) */\r\n  getIdPropertyName() {\r\n    return this.idProperty;\r\n  }\r\n\r\n  /**\r\n   * Set the Items with a new Dataset and optionally pass a different Id property name\r\n   * @param {Array<*>} data - array of data\r\n   * @param {String} [objectIdProperty] - optional id property to use as primary id\r\n   */\r\n  setItems(data: TData[], objectIdProperty?: string) {\r\n    if (objectIdProperty !== undefined) {\r\n      this.idProperty = objectIdProperty;\r\n    }\r\n    this.items = this.filteredItems = data;\r\n    this.onSetItemsCalled.notify({ idProperty: this.idProperty, itemCount: this.items.length }, null, this);\r\n    this.idxById = new Map();\r\n    this.updateIdxById();\r\n    this.ensureIdUniqueness();\r\n    this.refresh();\r\n  }\r\n\r\n  /** Set Paging Options */\r\n  setPagingOptions(args: Partial<PagingInfo>) {\r\n    if (this.onBeforePagingInfoChanged.notify(this.getPagingInfo(), null, this).getReturnValue() !== false) {\r\n      if (Utils.isDefined(args.pageSize)) {\r\n        this.pagesize = args.pageSize;\r\n        this.pagenum = this.pagesize ? Math.min(this.pagenum, Math.max(0, Math.ceil(this.totalRows / this.pagesize) - 1)) : 0;\r\n      }\r\n\r\n      if (Utils.isDefined(args.pageNum)) {\r\n        this.pagenum = Math.min(args.pageNum, Math.max(0, Math.ceil(this.totalRows / this.pagesize) - 1));\r\n      }\r\n\r\n      this.onPagingInfoChanged.notify(this.getPagingInfo(), null, this);\r\n\r\n      this.refresh();\r\n    }\r\n  }\r\n\r\n  /** Get Paging Options */\r\n  getPagingInfo(): PagingInfo {\r\n    const totalPages = this.pagesize ? Math.max(1, Math.ceil(this.totalRows / this.pagesize)) : 1;\r\n    return { pageSize: this.pagesize, pageNum: this.pagenum, totalRows: this.totalRows, totalPages, dataView: this as SlickDataView };\r\n  }\r\n\r\n  /** Sort Method to use by the DataView */\r\n  sort(comparer: (a: TData, b: TData) => number, ascending?: boolean) {\r\n    this.sortAsc = ascending;\r\n    this.sortComparer = comparer;\r\n    this.fastSortField = null;\r\n    if (ascending === false) {\r\n      this.items.reverse();\r\n    }\r\n    this.items.sort(comparer);\r\n    if (ascending === false) {\r\n      this.items.reverse();\r\n    }\r\n    this.idxById = new Map();\r\n    this.updateIdxById();\r\n    this.refresh();\r\n  }\r\n\r\n  /**\r\n   * Provides a workaround for the extremely slow sorting in IE.\r\n   * Does a [lexicographic] sort on a give column by temporarily overriding Object.prototype.toString\r\n   * to return the value of that field and then doing a native Array.sort().\r\n   */\r\n  fastSort(field: string | (() => string), ascending?: boolean) {\r\n    this.sortAsc = ascending;\r\n    this.fastSortField = field;\r\n    this.sortComparer = null as any;\r\n    const oldToString = Object.prototype.toString;\r\n    Object.prototype.toString = (typeof field === 'function') ? field : function () {\r\n      // @ts-ignore\r\n      return this[field];\r\n    };\r\n    // an extra reversal for descending sort keeps the sort stable\r\n    // (assuming a stable native sort implementation, which isn't true in some cases)\r\n    if (ascending === false) {\r\n      this.items.reverse();\r\n    }\r\n    this.items.sort();\r\n    Object.prototype.toString = oldToString;\r\n    if (ascending === false) {\r\n      this.items.reverse();\r\n    }\r\n    this.idxById = new Map();\r\n    this.updateIdxById();\r\n    this.refresh();\r\n  }\r\n\r\n  /** Re-Sort the dataset */\r\n  reSort() {\r\n    if (this.sortComparer) {\r\n      this.sort(this.sortComparer, this.sortAsc);\r\n    } else if (this.fastSortField) {\r\n      this.fastSort(this.fastSortField, this.sortAsc);\r\n    }\r\n  }\r\n\r\n  /** Get only the DataView filtered items */\r\n  getFilteredItems<T extends TData>() {\r\n    return this.filteredItems as T[];\r\n  }\r\n\r\n  /** Get the array length (count) of only the DataView filtered items */\r\n  getFilteredItemCount() {\r\n    return this.filteredItems.length;\r\n  }\r\n\r\n  /** Get current Filter used by the DataView */\r\n  getFilter() {\r\n    return this._options.useCSPSafeFilter ? this.filterCSPSafe : this.filter;\r\n  }\r\n\r\n  /**\r\n   * Set a Filter that will be used by the DataView\r\n   * @param {Function} fn - filter callback function\r\n   */\r\n  setFilter(filterFn: FilterFn<TData>) {\r\n    this.filterCSPSafe = filterFn;\r\n    this.filter = filterFn;\r\n    if (this._options.inlineFilters) {\r\n      this.compiledFilterCSPSafe = this.compileFilterCSPSafe;\r\n      this.compiledFilterWithCachingCSPSafe = this.compileFilterWithCachingCSPSafe;\r\n      this.compiledFilter = this.compileFilter(this._options.useCSPSafeFilter);\r\n      this.compiledFilterWithCaching = this.compileFilterWithCaching(this._options.useCSPSafeFilter);\r\n    }\r\n    this.refresh();\r\n  }\r\n\r\n  /** Get current Grouping info */\r\n  getGrouping(): Grouping[] {\r\n    return this.groupingInfos;\r\n  }\r\n\r\n  /** Set some Grouping */\r\n  setGrouping(groupingInfo: Grouping | Grouping[]) {\r\n    if (!this._options.groupItemMetadataProvider) {\r\n      this._options.groupItemMetadataProvider = new SlickGroupItemMetadataProvider();\r\n    }\r\n\r\n    this.groups = [];\r\n    this.toggledGroupsByLevel = [];\r\n    groupingInfo = groupingInfo || [];\r\n    this.groupingInfos = ((groupingInfo instanceof Array) ? groupingInfo : [groupingInfo]) as any;\r\n\r\n    for (let i = 0; i < this.groupingInfos.length; i++) {\r\n      const gi = this.groupingInfos[i] = Utils.extend(true, {}, this.groupingInfoDefaults, this.groupingInfos[i]);\r\n      gi.getterIsAFn = typeof gi.getter === 'function';\r\n\r\n      // pre-compile accumulator loops\r\n      gi.compiledAccumulators = [];\r\n      let idx = gi.aggregators.length;\r\n      while (idx--) {\r\n        gi.compiledAccumulators[idx] = this.compileAccumulatorLoopCSPSafe(gi.aggregators[idx]);\r\n      }\r\n\r\n      this.toggledGroupsByLevel[i] = {};\r\n    }\r\n\r\n    this.refresh();\r\n  }\r\n\r\n  /** Get an item in the DataView by its row index */\r\n  getItemByIdx<T extends TData>(i: number) {\r\n    return this.items[i] as T;\r\n  }\r\n\r\n  /** Get row index in the DataView by its Id */\r\n  getIdxById(id: DataIdType) {\r\n    return this.idxById?.get(id);\r\n  }\r\n\r\n  protected ensureRowsByIdCache() {\r\n    if (!this.rowsById) {\r\n      this.rowsById = {};\r\n      for (let i = 0, l = this.rows.length; i < l; i++) {\r\n        this.rowsById[this.rows[i][this.idProperty as keyof TData] as DataIdType] = i;\r\n      }\r\n    }\r\n  }\r\n\r\n  /** Get row number in the grid by its item object */\r\n  getRowByItem(item: TData) {\r\n    this.ensureRowsByIdCache();\r\n    return this.rowsById?.[item[this.idProperty as keyof TData] as DataIdType];\r\n  }\r\n\r\n  /** Get row number in the grid by its Id */\r\n  getRowById(id: DataIdType) {\r\n    this.ensureRowsByIdCache();\r\n    return this.rowsById?.[id];\r\n  }\r\n\r\n  /** Get an item in the DataView by its Id */\r\n  getItemById<T extends TData>(id: DataIdType) {\r\n    return this.items[(this.idxById.get(id) as number)] as T;\r\n  }\r\n\r\n  /** From the items array provided, return the mapped rows */\r\n  mapItemsToRows(itemArray: TData[]) {\r\n    const rows: number[] = [];\r\n    this.ensureRowsByIdCache();\r\n    for (let i = 0, l = itemArray.length; i < l; i++) {\r\n      const row = this.rowsById?.[itemArray[i][this.idProperty as keyof TData] as DataIdType];\r\n      if (Utils.isDefined(row)) {\r\n        rows[rows.length] = row as number;\r\n      }\r\n    }\r\n    return rows;\r\n  }\r\n\r\n  /** From the Ids array provided, return the mapped rows */\r\n  mapIdsToRows(idArray: DataIdType[]) {\r\n    const rows: number[] = [];\r\n    this.ensureRowsByIdCache();\r\n    for (let i = 0, l = idArray.length; i < l; i++) {\r\n      const row = this.rowsById?.[idArray[i]];\r\n      if (Utils.isDefined(row)) {\r\n        rows[rows.length] = row as number;\r\n      }\r\n    }\r\n    return rows;\r\n  }\r\n\r\n  /** From the rows array provided, return the mapped Ids */\r\n  mapRowsToIds(rowArray: number[]) {\r\n    const ids: DataIdType[] = [];\r\n    for (let i = 0, l = rowArray.length; i < l; i++) {\r\n      if (rowArray[i] < this.rows.length) {\r\n        const rowItem = this.rows[rowArray[i]];\r\n        ids[ids.length] = rowItem![this.idProperty as keyof TData] as DataIdType;\r\n      }\r\n    }\r\n    return ids;\r\n  }\r\n\r\n  /**\r\n   * Performs the update operations of a single item by id without\r\n   * triggering any events or refresh operations.\r\n   * @param id The new id of the item.\r\n   * @param item The item which should be the new value for the given id.\r\n   */\r\n  updateSingleItem(id: DataIdType, item: TData) {\r\n    if (!this.idxById) { return; }\r\n\r\n    // see also https://github.com/mleibman/SlickGrid/issues/1082\r\n    if (!this.idxById.has(id)) {\r\n      throw new Error('[SlickGrid DataView] Invalid id');\r\n    }\r\n\r\n    // What if the specified item also has an updated idProperty?\r\n    // Then we'll have to update the index as well, and possibly the `updated` cache too.\r\n    if (id !== item[this.idProperty as keyof TData]) {\r\n      // make sure the new id is unique:\r\n      const newId = item[this.idProperty as keyof TData] as DataIdType;\r\n      if (!Utils.isDefined(newId)) {\r\n        throw new Error('[SlickGrid DataView] Cannot update item to associate with a null id');\r\n      }\r\n      if (this.idxById.has(newId)) {\r\n        throw new Error('[SlickGrid DataView] Cannot update item to associate with a non-unique id');\r\n      }\r\n      this.idxById.set(newId, this.idxById.get(id) as number);\r\n      this.idxById.delete(id);\r\n\r\n      // Also update the `updated` hashtable/markercache? Yes, `recalc()` inside `refresh()` needs that one!\r\n      if (this.updated?.[id]) {\r\n        delete this.updated[id];\r\n      }\r\n\r\n      // Also update the row indexes? no need since the `refresh()`, further down, blows away the `rowsById[]` cache!\r\n\r\n      id = newId;\r\n    }\r\n    this.items[this.idxById.get(id) as number] = item;\r\n\r\n    // Also update the rows? no need since the `refresh()`, further down, blows away the `rows[]` cache and recalculates it via `recalc()`!\r\n\r\n    if (!this.updated) {\r\n      this.updated = {};\r\n    }\r\n    this.updated[id] = true;\r\n  }\r\n\r\n  /**\r\n   * Updates a single item in the data view given the id and new value.\r\n   * @param id The new id of the item.\r\n   * @param item The item which should be the new value for the given id.\r\n   */\r\n  updateItem<T extends TData>(id: DataIdType, item: T) {\r\n    this.updateSingleItem(id, item);\r\n    this.refresh();\r\n  }\r\n\r\n  /**\r\n   * Updates multiple items in the data view given the new ids and new values.\r\n   * @param id {Array} The array of new ids which is in the same order as the items.\r\n   * @param newItems {Array} The new items that should be set in the data view for the given ids.\r\n   */\r\n  updateItems<T extends TData>(ids: DataIdType[], newItems: T[]) {\r\n    if (ids.length !== newItems.length) {\r\n      throw new Error('[SlickGrid DataView] Mismatch on the length of ids and items provided to update');\r\n    }\r\n    for (let i = 0, l = newItems.length; i < l; i++) {\r\n      this.updateSingleItem(ids[i], newItems[i]);\r\n    }\r\n    this.refresh();\r\n  }\r\n\r\n  /**\r\n   * Inserts a single item into the data view at the given position.\r\n   * @param insertBefore {Number} The 0-based index before which the item should be inserted.\r\n   * @param item The item to insert.\r\n   */\r\n  insertItem(insertBefore: number, item: TData) {\r\n    this.items.splice(insertBefore, 0, item);\r\n    this.updateIdxById(insertBefore);\r\n    this.refresh();\r\n  }\r\n\r\n  /**\r\n   * Inserts multiple items into the data view at the given position.\r\n   * @param insertBefore {Number} The 0-based index before which the items should be inserted.\r\n   * @param newItems {Array}  The items to insert.\r\n   */\r\n  insertItems(insertBefore: number, newItems: TData[]) {\r\n    // @ts-ignore\r\n    Array.prototype.splice.apply(this.items, [insertBefore, 0].concat(newItems));\r\n    this.updateIdxById(insertBefore);\r\n    this.refresh();\r\n  }\r\n\r\n  /**\r\n   * Adds a single item at the end of the data view.\r\n   * @param item The item to add at the end.\r\n   */\r\n  addItem(item: TData) {\r\n    this.items.push(item);\r\n    this.updateIdxById(this.items.length - 1);\r\n    this.refresh();\r\n  }\r\n\r\n  /**\r\n   * Adds multiple items at the end of the data view.\r\n   * @param {Array} newItems The items to add at the end.\r\n   */\r\n  addItems(newItems: TData[]) {\r\n    this.items = this.items.concat(newItems);\r\n    this.updateIdxById(this.items.length - newItems.length);\r\n    this.refresh();\r\n  }\r\n\r\n  /**\r\n   * Deletes a single item identified by the given id from the data view.\r\n   * @param {String|Number} id The id identifying the object to delete.\r\n   */\r\n  deleteItem(id: DataIdType) {\r\n    if (!this.idxById) { return; }\r\n    if (this.isBulkSuspend) {\r\n      this.bulkDeleteIds.set(id, true);\r\n    } else {\r\n      const idx = this.idxById.get(id);\r\n      if (idx === undefined) {\r\n        throw new Error('[SlickGrid DataView] Invalid id');\r\n      }\r\n      this.idxById.delete(id);\r\n      this.items.splice(idx, 1);\r\n      this.updateIdxById(idx);\r\n      this.refresh();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Deletes multiple item identified by the given ids from the data view.\r\n   * @param {Array} ids The ids of the items to delete.\r\n   */\r\n  deleteItems(ids: DataIdType[]) {\r\n    if (ids.length === 0 || !this.idxById) {\r\n      return;\r\n    }\r\n\r\n    if (this.isBulkSuspend) {\r\n      for (let i = 0, l = ids.length; i < l; i++) {\r\n        const id = ids[i];\r\n        const idx = this.idxById.get(id);\r\n        if (idx === undefined) {\r\n          throw new Error('[SlickGrid DataView] Invalid id');\r\n        }\r\n        this.bulkDeleteIds.set(id, true);\r\n      }\r\n    } else {\r\n      // collect all indexes\r\n      const indexesToDelete: number[] = [];\r\n      for (let i = 0, l = ids.length; i < l; i++) {\r\n        const id = ids[i];\r\n        const idx = this.idxById.get(id);\r\n        if (idx === undefined) {\r\n          throw new Error('[SlickGrid DataView] Invalid id');\r\n        }\r\n        this.idxById.delete(id);\r\n        indexesToDelete.push(idx);\r\n      }\r\n\r\n      // Remove from back to front\r\n      indexesToDelete.sort();\r\n      for (let i = indexesToDelete.length - 1; i >= 0; --i) {\r\n        this.items.splice(indexesToDelete[i], 1);\r\n      }\r\n\r\n      // update lookup from front to back\r\n      this.updateIdxById(indexesToDelete[0]);\r\n      this.refresh();\r\n    }\r\n  }\r\n\r\n  /** Add an item in a sorted dataset (a Sort function must be defined) */\r\n  sortedAddItem(item: TData) {\r\n    if (!this.sortComparer) {\r\n      throw new Error('[SlickGrid DataView] sortedAddItem() requires a sort comparer, use sort()');\r\n    }\r\n    this.insertItem(this.sortedIndex(item), item);\r\n  }\r\n\r\n  /** Update an item in a sorted dataset (a Sort function must be defined) */\r\n  sortedUpdateItem(id: string | number, item: TData) {\r\n    if (!this.idxById) { return; }\r\n    if (!this.idxById.has(id) || id !== item[this.idProperty as keyof TData]) {\r\n      throw new Error('[SlickGrid DataView] Invalid or non-matching id ' + this.idxById.get(id));\r\n    }\r\n    if (!this.sortComparer) {\r\n      throw new Error('[SlickGrid DataView] sortedUpdateItem() requires a sort comparer, use sort()');\r\n    }\r\n    const oldItem = this.getItemById(id);\r\n    if (this.sortComparer(oldItem, item) !== 0) {\r\n      // item affects sorting -> must use sorted add\r\n      this.deleteItem(id);\r\n      this.sortedAddItem(item);\r\n    } else { // update does not affect sorting -> regular update works fine\r\n      this.updateItem(id, item);\r\n    }\r\n  }\r\n\r\n  protected sortedIndex(searchItem: TData) {\r\n    let low = 0;\r\n    let high = this.items.length;\r\n\r\n    while (low < high) {\r\n      const mid = low + high >>> 1;\r\n      if (this.sortComparer(this.items[mid], searchItem) === -1) {\r\n        low = mid + 1;\r\n      } else {\r\n        high = mid;\r\n      }\r\n    }\r\n    return low;\r\n  }\r\n\r\n  /** Get item count, that is the full dataset lenght of the DataView */\r\n  getItemCount() {\r\n    return this.items.length;\r\n  }\r\n\r\n  /** Get row count (rows displayed in current page) */\r\n  getLength() {\r\n    return this.rows.length;\r\n  }\r\n\r\n  /** Retrieve an item from the DataView at specific index */\r\n  getItem<T extends TData>(i: number) {\r\n    const item = this.rows[i] as T;\r\n\r\n    // if this is a group row, make sure totals are calculated and update the title\r\n    if ((item as SlickGroup_)?.__group && (item as SlickGroup_).totals && !(item as SlickGroup_).totals?.initialized) {\r\n      const gi = this.groupingInfos[(item as SlickGroup_).level];\r\n      if (!gi.displayTotalsRow) {\r\n        this.calculateTotals((item as SlickGroup_).totals);\r\n        (item as SlickGroup_).title = gi.formatter ? gi.formatter((item as SlickGroup_)) : (item as SlickGroup_).value;\r\n      }\r\n    }\r\n    // if this is a totals row, make sure it's calculated\r\n    else if ((item as SlickGroupTotals_)?.__groupTotals && !(item as SlickGroupTotals_).initialized) {\r\n      this.calculateTotals(item as SlickGroupTotals_);\r\n    }\r\n\r\n    return item;\r\n  }\r\n\r\n  getItemMetadata(i: number): ItemMetadata | null {\r\n    const item = this.rows[i];\r\n    if (item === undefined) {\r\n      return null;\r\n    }\r\n\r\n    // overrides for grouping rows\r\n    if ((item as SlickGroup_).__group) {\r\n      return this._options.groupItemMetadataProvider!.getGroupRowMetadata(item as GroupingFormatterItem);\r\n    }\r\n\r\n    // overrides for totals rows\r\n    if ((item as SlickGroupTotals_).__groupTotals) {\r\n      return this._options.groupItemMetadataProvider!.getTotalsRowMetadata(item as { group: GroupingFormatterItem });\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  protected expandCollapseAllGroups(level?: number, collapse?: boolean) {\r\n    if (!Utils.isDefined(level)) {\r\n      for (let i = 0; i < this.groupingInfos.length; i++) {\r\n        this.toggledGroupsByLevel[i] = {};\r\n        this.groupingInfos[i].collapsed = collapse;\r\n\r\n        if (collapse === true) {\r\n          this.onGroupCollapsed.notify({ level: i, groupingKey: null });\r\n        } else {\r\n          this.onGroupExpanded.notify({ level: i, groupingKey: null });\r\n        }\r\n      }\r\n    } else {\r\n      this.toggledGroupsByLevel[level] = {};\r\n      this.groupingInfos[level].collapsed = collapse;\r\n\r\n      if (collapse === true) {\r\n        this.onGroupCollapsed.notify({ level, groupingKey: null });\r\n      } else {\r\n        this.onGroupExpanded.notify({ level, groupingKey: null });\r\n      }\r\n    }\r\n    this.refresh();\r\n  }\r\n\r\n  /**\r\n   * @param {Number} [level] Optional level to collapse.  If not specified, applies to all levels.\r\n   */\r\n  collapseAllGroups(level?: number) {\r\n    this.expandCollapseAllGroups(level, true);\r\n  }\r\n\r\n  /**\r\n   * @param {Number} [level] Optional level to expand.  If not specified, applies to all levels.\r\n   */\r\n  expandAllGroups(level?: number) {\r\n    this.expandCollapseAllGroups(level, false);\r\n  }\r\n\r\n  expandCollapseGroup(level: number, groupingKey: string, collapse?: boolean) {\r\n    // @ts-ignore\r\n    this.toggledGroupsByLevel[level][groupingKey] = this.groupingInfos[level].collapsed ^ collapse;\r\n    this.refresh();\r\n  }\r\n\r\n  /**\r\n   * @param varArgs Either a Slick.Group's \"groupingKey\" property, or a\r\n   *     variable argument list of grouping values denoting a unique path to the row.  For\r\n   *     example, calling collapseGroup('high', '10%') will collapse the '10%' subgroup of\r\n   *     the 'high' group.\r\n   */\r\n  collapseGroup(...args: any) {\r\n    const calledArgs = Array.prototype.slice.call(args);\r\n    const arg0 = calledArgs[0];\r\n    let groupingKey: string;\r\n    let level: number;\r\n\r\n    if (args.length === 1 && arg0.indexOf(this.groupingDelimiter) !== -1) {\r\n      groupingKey = arg0;\r\n      level = arg0.split(this.groupingDelimiter).length - 1;\r\n    } else {\r\n      groupingKey = args.join(this.groupingDelimiter);\r\n      level = args.length - 1;\r\n    }\r\n\r\n    this.expandCollapseGroup(level, groupingKey, true);\r\n    this.onGroupCollapsed.notify({ level, groupingKey });\r\n  }\r\n\r\n  /**\r\n   * @param varArgs Either a Slick.Group's \"groupingKey\" property, or a\r\n   *     variable argument list of grouping values denoting a unique path to the row.  For\r\n   *     example, calling expandGroup('high', '10%') will expand the '10%' subgroup of\r\n   *     the 'high' group.\r\n   */\r\n  expandGroup(...args: any) {\r\n    const calledArgs = Array.prototype.slice.call(args);\r\n    const arg0 = calledArgs[0];\r\n    let groupingKey: string;\r\n    let level: number;\r\n\r\n    if (args.length === 1 && arg0.indexOf(this.groupingDelimiter) !== -1) {\r\n      level = arg0.split(this.groupingDelimiter).length - 1;\r\n      groupingKey = arg0;\r\n    } else {\r\n      level = args.length - 1;\r\n      groupingKey = args.join(this.groupingDelimiter);\r\n    }\r\n\r\n    this.expandCollapseGroup(level, groupingKey, false);\r\n    this.onGroupExpanded.notify({ level, groupingKey });\r\n  }\r\n\r\n  getGroups() {\r\n    return this.groups;\r\n  }\r\n\r\n  protected extractGroups(rows: any[], parentGroup?: SlickGroup_) {\r\n    let group: SlickGroup_;\r\n    let val: any;\r\n    const groups: SlickGroup_[] = [];\r\n    const groupsByVal: any = {};\r\n    let r;\r\n    const level = parentGroup ? parentGroup.level + 1 : 0;\r\n    const gi = this.groupingInfos[level];\r\n\r\n    for (let i = 0, l = gi.predefinedValues?.length ?? 0; i < l; i++) {\r\n      val = gi.predefinedValues?.[i];\r\n      group = groupsByVal[val];\r\n      if (!group) {\r\n        group = new SlickGroup();\r\n        group.value = val;\r\n        group.level = level;\r\n        group.groupingKey = (parentGroup ? parentGroup.groupingKey + this.groupingDelimiter : '') + val;\r\n        groups[groups.length] = group;\r\n        groupsByVal[val] = group;\r\n      }\r\n    }\r\n\r\n    for (let i = 0, l = rows.length; i < l; i++) {\r\n      r = rows[i];\r\n      val = gi.getterIsAFn ? (gi.getter as GroupGetterFn)(r) : r[gi.getter as keyof TData];\r\n      group = groupsByVal[val];\r\n      if (!group) {\r\n        group = new SlickGroup();\r\n        group.value = val;\r\n        group.level = level;\r\n        group.groupingKey = (parentGroup ? parentGroup.groupingKey + this.groupingDelimiter : '') + val;\r\n        groups[groups.length] = group;\r\n        groupsByVal[val] = group;\r\n      }\r\n\r\n      group.rows[group.count++] = r;\r\n    }\r\n\r\n    if (level < this.groupingInfos.length - 1) {\r\n      for (let i = 0; i < groups.length; i++) {\r\n        group = groups[i];\r\n        group.groups = this.extractGroups(group.rows, group);\r\n      }\r\n    }\r\n\r\n    if (groups.length) {\r\n      this.addTotals(groups, level);\r\n    }\r\n\r\n    groups.sort(this.groupingInfos[level].comparer);\r\n\r\n    return groups;\r\n  }\r\n\r\n  /** claculate Group Totals */\r\n  protected calculateTotals(totals: SlickGroupTotals_) {\r\n    const group = totals.group;\r\n    const gi = this.groupingInfos[group.level ?? 0];\r\n    const isLeafLevel = (group.level === this.groupingInfos.length);\r\n    let agg: Aggregator;\r\n    let idx = gi.aggregators.length;\r\n\r\n    if (!isLeafLevel && gi.aggregateChildGroups) {\r\n      // make sure all the subgroups are calculated\r\n      let i = group.groups?.length ?? 0;\r\n      while (i--) {\r\n        if (!group.groups[i].totals.initialized) {\r\n          this.calculateTotals(group.groups[i].totals);\r\n        }\r\n      }\r\n    }\r\n\r\n    while (idx--) {\r\n      agg = gi.aggregators[idx];\r\n      agg.init();\r\n      if (!isLeafLevel && gi.aggregateChildGroups) {\r\n        gi.compiledAccumulators[idx].call(agg, group.groups);\r\n      } else {\r\n        gi.compiledAccumulators[idx].call(agg, group.rows);\r\n      }\r\n      agg.storeResult(totals);\r\n    }\r\n    totals.initialized = true;\r\n  }\r\n\r\n  protected addGroupTotals(group: SlickGroup_) {\r\n    const gi = this.groupingInfos[group.level];\r\n    const totals = new SlickGroupTotals();\r\n    totals.group = group;\r\n    group.totals = totals;\r\n    if (!gi.lazyTotalsCalculation) {\r\n      this.calculateTotals(totals);\r\n    }\r\n  }\r\n\r\n  protected addTotals(groups: SlickGroup_[], level?: number) {\r\n    level = level || 0;\r\n    const gi = this.groupingInfos[level];\r\n    const groupCollapsed = gi.collapsed;\r\n    const toggledGroups = this.toggledGroupsByLevel[level];\r\n    let idx = groups.length, g;\r\n    while (idx--) {\r\n      g = groups[idx];\r\n\r\n      if (g.collapsed && !gi.aggregateCollapsed) {\r\n        continue;\r\n      }\r\n\r\n      // Do a depth-first aggregation so that parent group aggregators can access subgroup totals.\r\n      if (g.groups) {\r\n        this.addTotals(g.groups, level + 1);\r\n      }\r\n\r\n      if (gi.aggregators?.length && (\r\n        gi.aggregateEmpty || g.rows.length || g.groups?.length)) {\r\n        this.addGroupTotals(g);\r\n      }\r\n\r\n      g.collapsed = (groupCollapsed as any) ^ toggledGroups[g.groupingKey];\r\n      g.title = gi.formatter ? gi.formatter(g) : g.value;\r\n    }\r\n  }\r\n\r\n  protected flattenGroupedRows(groups: SlickGroup_[], level?: number) {\r\n    level = level || 0;\r\n    const gi = this.groupingInfos[level];\r\n    const groupedRows: any[] = [];\r\n    let rows: any[];\r\n    let gl = 0;\r\n    let g;\r\n    for (let i = 0, l = groups.length; i < l; i++) {\r\n      g = groups[i];\r\n      groupedRows[gl++] = g;\r\n\r\n      if (!g.collapsed) {\r\n        rows = g.groups ? this.flattenGroupedRows(g.groups, level + 1) : g.rows;\r\n        for (let j = 0, jj = rows.length; j < jj; j++) {\r\n          groupedRows[gl++] = rows[j];\r\n        }\r\n      }\r\n\r\n      if (g.totals && gi.displayTotalsRow && (!g.collapsed || gi.aggregateCollapsed)) {\r\n        groupedRows[gl++] = g.totals;\r\n      }\r\n    }\r\n    return groupedRows;\r\n  }\r\n\r\n  protected compileAccumulatorLoopCSPSafe(aggregator: Aggregator) {\r\n    if (aggregator.accumulate) {\r\n      return function (items: any[]) {\r\n        let result;\r\n        for (let i = 0; i < items.length; i++) {\r\n          const item = items[i];\r\n          result = aggregator.accumulate!.call(aggregator, item);\r\n        }\r\n        return result;\r\n      };\r\n    } else {\r\n      return function noAccumulator() { };\r\n    }\r\n  }\r\n\r\n  protected compileFilterCSPSafe(items: TData[], args: any): TData[] {\r\n    if (typeof this.filterCSPSafe !== 'function') {\r\n      return [];\r\n    }\r\n    const _retval: TData[] = [];\r\n    const _il = items.length;\r\n\r\n    for (let _i = 0; _i < _il; _i++) {\r\n      if (this.filterCSPSafe(items[_i], args)) {\r\n        _retval.push(items[_i]);\r\n      }\r\n    }\r\n\r\n    return _retval;\r\n  }\r\n\r\n  protected compileFilter(stopRunningIfCSPSafeIsActive = false): FilterFn<TData> | null {\r\n    if (stopRunningIfCSPSafeIsActive) {\r\n      return null as any;\r\n    }\r\n    const filterInfo = Utils.getFunctionDetails(this.filter as FilterFn<TData>);\r\n\r\n    const filterPath1 = '{ continue _coreloop; }$1';\r\n    const filterPath2 = '{ _retval[_idx++] = $item$; continue _coreloop; }$1';\r\n    // make some allowances for minification - there's only so far we can go with RegEx\r\n    const filterBody = filterInfo.body\r\n      .replace(/return false\\s*([;}]|\\}|$)/gi, filterPath1)\r\n      .replace(/return!1([;}]|\\}|$)/gi, filterPath1)\r\n      .replace(/return true\\s*([;}]|\\}|$)/gi, filterPath2)\r\n      .replace(/return!0([;}]|\\}|$)/gi, filterPath2)\r\n      .replace(/return ([^;}]+?)\\s*([;}]|$)/gi,\r\n        '{ if ($1) { _retval[_idx++] = $item$; }; continue _coreloop; }$2');\r\n\r\n    // This preserves the function template code after JS compression,\r\n    // so that replace() commands still work as expected.\r\n    let tpl = [\r\n      // 'function(_items, _args) { ',\r\n      'var _retval = [], _idx = 0; ',\r\n      'var $item$, $args$ = _args; ',\r\n      '_coreloop: ',\r\n      'for (var _i = 0, _il = _items.length; _i < _il; _i++) { ',\r\n      '$item$ = _items[_i]; ',\r\n      '$filter$; ',\r\n      '} ',\r\n      'return _retval; '\r\n      // '}'\r\n    ].join('');\r\n    tpl = tpl.replace(/\\$filter\\$/gi, filterBody);\r\n    tpl = tpl.replace(/\\$item\\$/gi, filterInfo.params[0]);\r\n    tpl = tpl.replace(/\\$args\\$/gi, filterInfo.params[1]);\r\n    const fn: any = new Function('_items,_args', tpl);\r\n    const fnName = 'compiledFilter';\r\n    fn.displayName = fnName;\r\n    fn.name = this.setFunctionName(fn, fnName);\r\n    return fn;\r\n  }\r\n\r\n  protected compileFilterWithCaching(stopRunningIfCSPSafeIsActive = false) {\r\n    if (stopRunningIfCSPSafeIsActive) {\r\n      return null as any;\r\n    }\r\n\r\n    const filterInfo = Utils.getFunctionDetails(this.filter as FilterFn<TData>);\r\n\r\n    const filterPath1 = '{ continue _coreloop; }$1';\r\n    const filterPath2 = '{ _cache[_i] = true;_retval[_idx++] = $item$; continue _coreloop; }$1';\r\n    // make some allowances for minification - there's only so far we can go with RegEx\r\n    const filterBody = filterInfo.body\r\n      .replace(/return false\\s*([;}]|\\}|$)/gi, filterPath1)\r\n      .replace(/return!1([;}]|\\}|$)/gi, filterPath1)\r\n      .replace(/return true\\s*([;}]|\\}|$)/gi, filterPath2)\r\n      .replace(/return!0([;}]|\\}|$)/gi, filterPath2)\r\n      .replace(/return ([^;}]+?)\\s*([;}]|$)/gi,\r\n        '{ if ((_cache[_i] = $1)) { _retval[_idx++] = $item$; }; continue _coreloop; }$2');\r\n\r\n    // This preserves the function template code after JS compression,\r\n    // so that replace() commands still work as expected.\r\n    let tpl = [\r\n      // 'function(_items, _args, _cache) { ',\r\n      'var _retval = [], _idx = 0; ',\r\n      'var $item$, $args$ = _args; ',\r\n      '_coreloop: ',\r\n      'for (var _i = 0, _il = _items.length; _i < _il; _i++) { ',\r\n      '$item$ = _items[_i]; ',\r\n      'if (_cache[_i]) { ',\r\n      '_retval[_idx++] = $item$; ',\r\n      'continue _coreloop; ',\r\n      '} ',\r\n      '$filter$; ',\r\n      '} ',\r\n      'return _retval; '\r\n      // '}'\r\n    ].join('');\r\n    tpl = tpl.replace(/\\$filter\\$/gi, filterBody);\r\n    tpl = tpl.replace(/\\$item\\$/gi, filterInfo.params[0]);\r\n    tpl = tpl.replace(/\\$args\\$/gi, filterInfo.params[1]);\r\n\r\n    const fn: any = new Function('_items,_args,_cache', tpl);\r\n    const fnName = 'compiledFilterWithCaching';\r\n    fn.displayName = fnName;\r\n    fn.name = this.setFunctionName(fn, fnName);\r\n    return fn;\r\n  }\r\n\r\n  protected compileFilterWithCachingCSPSafe(items: TData[], args: any, filterCache: any[]): TData[] {\r\n    if (typeof this.filterCSPSafe !== 'function') {\r\n      return [];\r\n    }\r\n\r\n    const retval: TData[] = [];\r\n    const il = items.length;\r\n\r\n    for (let _i = 0; _i < il; _i++) {\r\n      if (filterCache[_i] || this.filterCSPSafe(items[_i], args)) {\r\n        retval.push(items[_i]);\r\n      }\r\n    }\r\n\r\n    return retval;\r\n  }\r\n\r\n  /**\r\n   * In ES5 we could set the function name on the fly but in ES6 this is forbidden and we need to set it through differently\r\n   * We can use Object.defineProperty and set it the property to writable, see MDN for reference\r\n   * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty\r\n   * @param {*} fn\r\n   * @param {string} fnName\r\n   */\r\n  protected setFunctionName(fn: any, fnName: string) {\r\n    try {\r\n      Object.defineProperty(fn, 'name', { writable: true, value: fnName });\r\n    } catch (err) {\r\n      fn.name = fnName;\r\n    }\r\n  }\r\n\r\n  protected uncompiledFilter(items: TData[], args: any) {\r\n    const retval: any[] = [];\r\n    let idx = 0;\r\n\r\n    for (let i = 0, ii = items.length; i < ii; i++) {\r\n      if (this.filter?.(items[i], args)) {\r\n        retval[idx++] = items[i];\r\n      }\r\n    }\r\n\r\n    return retval;\r\n  }\r\n\r\n  protected uncompiledFilterWithCaching(items: TData[], args: any, cache: any) {\r\n    const retval: any[] = [];\r\n    let idx = 0,\r\n      item: TData;\r\n\r\n    for (let i = 0, ii = items.length; i < ii; i++) {\r\n      item = items[i];\r\n      if (cache[i]) {\r\n        retval[idx++] = item;\r\n      } else if (this.filter?.(item, args)) {\r\n        retval[idx++] = item;\r\n        cache[i] = true;\r\n      }\r\n    }\r\n\r\n    return retval;\r\n  }\r\n\r\n  protected getFilteredAndPagedItems(items: TData[]) {\r\n    if (this._options.useCSPSafeFilter ? this.filterCSPSafe : this.filter) {\r\n      let batchFilter: AnyFunction;\r\n      let batchFilterWithCaching: AnyFunction;\r\n      if (this._options.useCSPSafeFilter) {\r\n        batchFilter = (this._options.inlineFilters ? this.compiledFilterCSPSafe : this.uncompiledFilter) as AnyFunction;\r\n        batchFilterWithCaching = (this._options.inlineFilters ? this.compiledFilterWithCachingCSPSafe : this.uncompiledFilterWithCaching) as AnyFunction;\r\n      } else {\r\n        batchFilter = (this._options.inlineFilters ? this.compiledFilter : this.uncompiledFilter) as AnyFunction;\r\n        batchFilterWithCaching = (this._options.inlineFilters ? this.compiledFilterWithCaching : this.uncompiledFilterWithCaching) as AnyFunction;\r\n      }\r\n      if (this.refreshHints.isFilterNarrowing) {\r\n        this.filteredItems = batchFilter.call(this, this.filteredItems, this.filterArgs);\r\n      } else if (this.refreshHints.isFilterExpanding) {\r\n        this.filteredItems = batchFilterWithCaching.call(this, items, this.filterArgs, this.filterCache);\r\n      } else if (!this.refreshHints.isFilterUnchanged) {\r\n        this.filteredItems = batchFilter.call(this, items, this.filterArgs);\r\n      }\r\n    } else {\r\n      // special case:  if not filtering and not paging, the resulting\r\n      // rows collection needs to be a copy so that changes due to sort\r\n      // can be caught\r\n      this.filteredItems = this.pagesize ? items : items.concat();\r\n    }\r\n\r\n    // get the current page\r\n    let paged: TData[];\r\n    if (this.pagesize) {\r\n      if (this.filteredItems.length <= this.pagenum * this.pagesize) {\r\n        if (this.filteredItems.length === 0) {\r\n          this.pagenum = 0;\r\n        } else {\r\n          this.pagenum = Math.floor((this.filteredItems.length - 1) / this.pagesize);\r\n        }\r\n      }\r\n      paged = this.filteredItems.slice(this.pagesize * this.pagenum, this.pagesize * this.pagenum + this.pagesize);\r\n    } else {\r\n      paged = this.filteredItems;\r\n    }\r\n    return { totalRows: this.filteredItems.length, rows: paged };\r\n  }\r\n\r\n  protected getRowDiffs(rows: TData[], newRows: TData[]) {\r\n    let item: TData | SlickNonDataItem | SlickDataItem | SlickGroup_;\r\n    let r;\r\n    let eitherIsNonData;\r\n    const diff: number[] = [];\r\n    let from = 0;\r\n    let to = Math.max(newRows.length, rows.length);\r\n\r\n    if (this.refreshHints?.ignoreDiffsBefore) {\r\n      from = Math.max(0,\r\n        Math.min(newRows.length, this.refreshHints.ignoreDiffsBefore));\r\n    }\r\n\r\n    if (this.refreshHints?.ignoreDiffsAfter) {\r\n      to = Math.min(newRows.length,\r\n        Math.max(0, this.refreshHints.ignoreDiffsAfter));\r\n    }\r\n\r\n    for (let i = from, rl = rows.length; i < to; i++) {\r\n      if (i >= rl) {\r\n        diff[diff.length] = i;\r\n      } else {\r\n        item = newRows[i];\r\n        r = rows[i];\r\n\r\n        if (!item || (this.groupingInfos.length && (eitherIsNonData = ((item as SlickNonDataItem).__nonDataRow) || ((r as SlickNonDataItem).__nonDataRow)) &&\r\n          (item as SlickGroup_).__group !== (r as SlickGroup_).__group ||\r\n          (item as SlickGroup_).__group && !(item as SlickGroup_).equals(r as SlickGroup_))\r\n          || (eitherIsNonData &&\r\n            // no good way to compare totals since they are arbitrary DTOs\r\n            // deep object comparison is pretty expensive\r\n            // always considering them 'dirty' seems easier for the time being\r\n            ((item as SlickGroupTotals_).__groupTotals || (r as SlickGroupTotals_).__groupTotals))\r\n          || item[this.idProperty as keyof TData] !== r[this.idProperty as keyof TData]\r\n          || (this.updated?.[item[this.idProperty as keyof TData]])\r\n        ) {\r\n          diff[diff.length] = i;\r\n        }\r\n      }\r\n    }\r\n    return diff;\r\n  }\r\n\r\n  protected recalc(_items: TData[]) {\r\n    this.rowsById = undefined;\r\n\r\n    if (this.refreshHints.isFilterNarrowing !== this.prevRefreshHints.isFilterNarrowing ||\r\n      this.refreshHints.isFilterExpanding !== this.prevRefreshHints.isFilterExpanding) {\r\n      this.filterCache = [];\r\n    }\r\n\r\n    const filteredItems = this.getFilteredAndPagedItems(_items);\r\n    this.totalRows = filteredItems.totalRows;\r\n    let newRows: TData[] = filteredItems.rows;\r\n\r\n    this.groups = [];\r\n    if (this.groupingInfos.length) {\r\n      this.groups = this.extractGroups(newRows);\r\n      if (this.groups.length) {\r\n        newRows = this.flattenGroupedRows(this.groups);\r\n      }\r\n    }\r\n\r\n    const diff = this.getRowDiffs(this.rows, newRows as TData[]);\r\n\r\n    this.rows = newRows as TData[];\r\n\r\n    return diff;\r\n  }\r\n\r\n  refresh() {\r\n    if (this.suspend) {\r\n      return;\r\n    }\r\n\r\n    const previousPagingInfo = Utils.extend(true, {}, this.getPagingInfo());\r\n\r\n    const countBefore = this.rows.length;\r\n    const totalRowsBefore = this.totalRows;\r\n\r\n    let diff = this.recalc(this.items); // pass as direct refs to avoid closure perf hit\r\n\r\n    // if the current page is no longer valid, go to last page and recalc\r\n    // we suffer a performance penalty here, but the main loop (recalc) remains highly optimized\r\n    if (this.pagesize && this.totalRows < this.pagenum * this.pagesize) {\r\n      this.pagenum = Math.max(0, Math.ceil(this.totalRows / this.pagesize) - 1);\r\n      diff = this.recalc(this.items);\r\n    }\r\n\r\n    this.updated = null;\r\n    this.prevRefreshHints = this.refreshHints;\r\n    this.refreshHints = {};\r\n\r\n    if (totalRowsBefore !== this.totalRows) {\r\n      // use the previously saved paging info\r\n      if (this.onBeforePagingInfoChanged.notify(previousPagingInfo, null, this).getReturnValue() !== false) {\r\n        this.onPagingInfoChanged.notify(this.getPagingInfo(), null, this);\r\n      }\r\n    }\r\n    if (countBefore !== this.rows.length) {\r\n      this.onRowCountChanged.notify({ previous: countBefore, current: this.rows.length, itemCount: this.items.length, dataView: this, callingOnRowsChanged: (diff.length > 0) }, null, this);\r\n    }\r\n    if (diff.length > 0) {\r\n      this.onRowsChanged.notify({ rows: diff, itemCount: this.items.length, dataView: this, calledOnRowCountChanged: (countBefore !== this.rows.length) }, null, this);\r\n    }\r\n    if (countBefore !== this.rows.length || diff.length > 0) {\r\n      this.onRowsOrCountChanged.notify({\r\n        rowsDiff: diff, previousRowCount: countBefore, currentRowCount: this.rows.length, itemCount: this.items.length,\r\n        rowCountChanged: countBefore !== this.rows.length, rowsChanged: diff.length > 0, dataView: this\r\n      }, null, this);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Wires the grid and the DataView together to keep row selection tied to item ids.\r\n   * This is useful since, without it, the grid only knows about rows, so if the items\r\n   * move around, the same rows stay selected instead of the selection moving along\r\n   * with the items.\r\n   *\r\n   * NOTE:  This doesn't work with cell selection model.\r\n   *\r\n   * @param {SlickGrid} grid - The grid to sync selection with.\r\n   * @param {Boolean} preserveHidden - Whether to keep selected items that go out of the\r\n   *     view due to them getting filtered out.\r\n   * @param {Boolean} [preserveHiddenOnSelectionChange] - Whether to keep selected items\r\n   *     that are currently out of the view (see preserveHidden) as selected when selection\r\n   *     changes.\r\n   * @return {Event} An event that notifies when an internal list of selected row ids\r\n   *     changes.  This is useful since, in combination with the above two options, it allows\r\n   *     access to the full list selected row ids, and not just the ones visible to the grid.\r\n   * @method syncGridSelection\r\n   */\r\n  syncGridSelection(grid: SlickGridModel, preserveHidden: boolean, preserveHiddenOnSelectionChange?: boolean) {\r\n    this._grid = grid;\r\n    let inHandler: boolean;\r\n    this.selectedRowIds = this.mapRowsToIds(grid.getSelectedRows());\r\n\r\n    /** @param {Array} rowIds */\r\n    const setSelectedRowIds = (rowIds: DataIdType[] | false) => {\r\n      if (rowIds === false) {\r\n        this.selectedRowIds = [];\r\n      } else {\r\n        if (this.selectedRowIds!.sort().join(',') !== rowIds.sort().join(',')) {\r\n          this.selectedRowIds = rowIds;\r\n        }\r\n      }\r\n    };\r\n\r\n    const update = () => {\r\n      if ((this.selectedRowIds || []).length > 0 && !inHandler) {\r\n        inHandler = true;\r\n        const selectedRows = this.mapIdsToRows(this.selectedRowIds || []);\r\n        if (!preserveHidden) {\r\n          const selectedRowsChangedArgs = {\r\n            grid: this._grid,\r\n            ids: this.mapRowsToIds(selectedRows),\r\n            rows: selectedRows,\r\n            dataView: this\r\n          };\r\n          this.preSelectedRowIdsChangeFn!(selectedRowsChangedArgs);\r\n          this.onSelectedRowIdsChanged.notify(Object.assign(selectedRowsChangedArgs, {\r\n            selectedRowIds: this.selectedRowIds,\r\n            filteredIds: this.getAllSelectedFilteredIds() as DataIdType[],\r\n          }), new SlickEventData(), this);\r\n        }\r\n        grid.setSelectedRows(selectedRows);\r\n        inHandler = false;\r\n      }\r\n    };\r\n\r\n    grid.onSelectedRowsChanged.subscribe((_e: SlickEventData_, args: { rows: number[]; }) => {\r\n      if (!inHandler) {\r\n        const newSelectedRowIds = this.mapRowsToIds(args.rows);\r\n        const selectedRowsChangedArgs = {\r\n          grid: this._grid,\r\n          ids: newSelectedRowIds,\r\n          rows: args.rows,\r\n          added: true,\r\n          dataView: this\r\n        };\r\n        this.preSelectedRowIdsChangeFn!(selectedRowsChangedArgs);\r\n        this.onSelectedRowIdsChanged.notify(Object.assign(selectedRowsChangedArgs, {\r\n          selectedRowIds: this.selectedRowIds,\r\n          filteredIds: this.getAllSelectedFilteredIds() as DataIdType[],\r\n        }), new SlickEventData(), this);\r\n      }\r\n    });\r\n\r\n    this.preSelectedRowIdsChangeFn = (args: { ids: DataIdType[]; added?: boolean; }) => {\r\n      if (!inHandler) {\r\n        inHandler = true;\r\n        const overwrite = (typeof args.added === typeof undefined);\r\n\r\n        if (overwrite) {\r\n          setSelectedRowIds(args.ids);\r\n        } else {\r\n          let rowIds: DataIdType[];\r\n          if (args.added) {\r\n            if (preserveHiddenOnSelectionChange && grid.getOptions().multiSelect) {\r\n              // find the ones that are hidden\r\n              const hiddenSelectedRowIds = this.selectedRowIds?.filter((id) => this.getRowById(id) === undefined);\r\n              // add the newly selected ones\r\n              rowIds = hiddenSelectedRowIds!.concat(args.ids);\r\n            } else {\r\n              rowIds = args.ids;\r\n            }\r\n          } else {\r\n            if (preserveHiddenOnSelectionChange && grid.getOptions().multiSelect) {\r\n              // remove rows whose id is on the list\r\n              rowIds = this.selectedRowIds!.filter((id) => args.ids.indexOf(id) === -1);\r\n            } else {\r\n              rowIds = [];\r\n            }\r\n          }\r\n          setSelectedRowIds(rowIds);\r\n        }\r\n        inHandler = false;\r\n      }\r\n    };\r\n\r\n    this.onRowsOrCountChanged.subscribe(update.bind(this));\r\n\r\n    return this.onSelectedRowIdsChanged;\r\n  }\r\n\r\n  /**\r\n   * Get all selected IDs\r\n   * Note: when using Pagination it will also include hidden selections assuming `preserveHiddenOnSelectionChange` is set to true.\r\n   */\r\n  getAllSelectedIds() {\r\n    return this.selectedRowIds;\r\n  }\r\n\r\n  /**\r\n   * Get all selected filtered IDs (similar to \"getAllSelectedIds\" but only return filtered data)\r\n   * Note: when using Pagination it will also include hidden selections assuming `preserveHiddenOnSelectionChange` is set to true.\r\n   */\r\n  getAllSelectedFilteredIds() {\r\n    return this.getAllSelectedFilteredItems().map((item) => item[this.idProperty as keyof TData]);\r\n  }\r\n\r\n  /**\r\n   * Set current row selected IDs array (regardless of Pagination)\r\n   * NOTE: This will NOT change the selection in the grid, if you need to do that then you still need to call\r\n   * \"grid.setSelectedRows(rows)\"\r\n   * @param {Array} selectedIds - list of IDs which have been selected for this action\r\n   * @param {Object} options\r\n   *  - `isRowBeingAdded`: defaults to true, are the new selected IDs being added (or removed) as new row selections\r\n   *  - `shouldTriggerEvent`: defaults to true, should we trigger `onSelectedRowIdsChanged` event\r\n   *  - `applyRowSelectionToGrid`: defaults to true, should we apply the row selections to the grid in the UI\r\n   */\r\n  setSelectedIds(selectedIds: Array<number | string>, options?: Partial<{ isRowBeingAdded: boolean; shouldTriggerEvent: boolean; applyRowSelectionToGrid: boolean; }>) {\r\n    let isRowBeingAdded = options?.isRowBeingAdded;\r\n    const shouldTriggerEvent = options?.shouldTriggerEvent;\r\n    const applyRowSelectionToGrid = options?.applyRowSelectionToGrid;\r\n\r\n    if (isRowBeingAdded !== false) {\r\n      isRowBeingAdded = true;\r\n    }\r\n    const selectedRows = this.mapIdsToRows(selectedIds);\r\n    const selectedRowsChangedArgs = {\r\n      grid: this._grid,\r\n      ids: selectedIds,\r\n      rows: selectedRows,\r\n      added: isRowBeingAdded,\r\n      dataView: this\r\n    };\r\n    this.preSelectedRowIdsChangeFn?.(selectedRowsChangedArgs);\r\n\r\n    if (shouldTriggerEvent !== false) {\r\n      this.onSelectedRowIdsChanged.notify(Object.assign(selectedRowsChangedArgs, {\r\n        selectedRowIds: this.selectedRowIds,\r\n        filteredIds: this.getAllSelectedFilteredIds() as DataIdType[],\r\n      }), new SlickEventData(), this);\r\n    }\r\n\r\n    // should we also apply the row selection in to the grid (UI) as well?\r\n    if (applyRowSelectionToGrid !== false && this._grid) {\r\n      this._grid.setSelectedRows(selectedRows);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get all selected dataContext items\r\n   * Note: when using Pagination it will also include hidden selections assuming `preserveHiddenOnSelectionChange` is set to true.\r\n   */\r\n  getAllSelectedItems<T extends TData>() {\r\n    const selectedData: TData[] = [];\r\n    const selectedIds = this.getAllSelectedIds();\r\n    selectedIds!.forEach((id) => {\r\n      selectedData.push(this.getItemById(id));\r\n    });\r\n    return selectedData as T[];\r\n  }\r\n\r\n  /**\r\n  * Get all selected filtered dataContext items (similar to \"getAllSelectedItems\" but only return filtered data)\r\n  * Note: when using Pagination it will also include hidden selections assuming `preserveHiddenOnSelectionChange` is set to true.\r\n  */\r\n  getAllSelectedFilteredItems<T extends TData>() {\r\n    if (!Array.isArray(this.selectedRowIds)) {\r\n      return [];\r\n    }\r\n\r\n    const intersection = this.filteredItems.filter((a) => this.selectedRowIds!.some((b) => a[this.idProperty as keyof TData] === b));\r\n    return (intersection || []) as T[];\r\n  }\r\n\r\n  syncGridCellCssStyles(grid: SlickGridModel, key: string) {\r\n    let hashById: any;\r\n    let inHandler: boolean;\r\n\r\n    const storeCellCssStyles = (hash: CssStyleHash) => {\r\n      hashById = {};\r\n      if (typeof hash === 'object') {\r\n        Object.keys(hash).forEach(row => {\r\n          if (hash) {\r\n            const id = this.rows[row as any][this.idProperty as keyof TData];\r\n            hashById[id] = hash[row];\r\n          }\r\n        });\r\n      }\r\n    };\r\n\r\n    // since this method can be called after the cell styles have been set,\r\n    // get the existing ones right away\r\n    storeCellCssStyles(grid.getCellCssStyles(key));\r\n\r\n    const update = () => {\r\n      if (typeof hashById === 'object') {\r\n        inHandler = true;\r\n        this.ensureRowsByIdCache();\r\n        const newHash: CssStyleHash = {};\r\n        Object.keys(hashById).forEach(id => {\r\n          const row = this.rowsById?.[id];\r\n          if (Utils.isDefined(row)) {\r\n            newHash[row as number] = hashById[id];\r\n          }\r\n        });\r\n        grid.setCellCssStyles(key, newHash);\r\n        inHandler = false;\r\n      }\r\n    };\r\n\r\n    grid.onCellCssStylesChanged.subscribe((_e: SlickEventData_, args: any) => {\r\n      if (inHandler) { return; }\r\n      if (key !== args.key) { return; }\r\n      if (args.hash) {\r\n        storeCellCssStyles(args.hash);\r\n      } else {\r\n        grid.onCellCssStylesChanged.unsubscribe();\r\n        this.onRowsOrCountChanged.unsubscribe(update);\r\n      }\r\n    });\r\n\r\n    this.onRowsOrCountChanged.subscribe(update.bind(this));\r\n  }\r\n}\r\n\r\nexport class AvgAggregator<T = any> implements Aggregator {\r\n  private _nonNullCount = 0;\r\n  private _sum = 0;\r\n  private _field: number | string;\r\n  private _type = 'avg' as const;\r\n\r\n  constructor(field: number | string) {\r\n    this._field = field;\r\n  }\r\n\r\n  get field(): number | string {\r\n    return this._field;\r\n  }\r\n\r\n  get type(): string {\r\n    return this._type;\r\n  }\r\n\r\n  init(): void {\r\n    this._nonNullCount = 0;\r\n    this._sum = 0;\r\n  }\r\n\r\n  accumulate(item: T) {\r\n    const val: any = (item?.hasOwnProperty(this._field)) ? item[this._field as keyof T] : null;\r\n    if (val !== null && val !== '' && !isNaN(val)) {\r\n      this._nonNullCount++;\r\n      this._sum += parseFloat(val);\r\n    }\r\n  }\r\n\r\n  storeResult(groupTotals: SlickGroupTotals_ & { avg: Record<number | string, number>; }) {\r\n    if (!groupTotals || groupTotals[this._type] === undefined) {\r\n      (groupTotals as any)[this._type] = {};\r\n    }\r\n    if (this._nonNullCount !== 0) {\r\n      groupTotals[this._type][this._field] = this._sum / this._nonNullCount;\r\n    }\r\n  }\r\n}\r\n\r\nexport class MinAggregator<T = any> implements Aggregator {\r\n  private _min: number | null = null;\r\n  private _field: number | string;\r\n  private _type = 'min' as const;\r\n\r\n  constructor(field: number | string) {\r\n    this._field = field;\r\n  }\r\n\r\n  get field(): number | string {\r\n    return this._field;\r\n  }\r\n\r\n  get type(): string {\r\n    return this._type;\r\n  }\r\n\r\n  init() {\r\n    this._min = null;\r\n  }\r\n\r\n  accumulate(item: T) {\r\n    const val: any = (item?.hasOwnProperty(this._field)) ? item[this._field as keyof T] : null;\r\n    if (val !== null && val !== '' && !isNaN(val)) {\r\n      if (this._min === null || val < this._min) {\r\n        this._min = parseFloat(val);\r\n      }\r\n    }\r\n  }\r\n\r\n  storeResult(groupTotals: SlickGroupTotals_ & { min: Record<number | string, number | null>; }) {\r\n    if (!groupTotals || groupTotals[this._type] === undefined) {\r\n      groupTotals[this._type] = {};\r\n    }\r\n    groupTotals[this._type][this._field] = this._min;\r\n  }\r\n}\r\n\r\nexport class MaxAggregator<T = any> implements Aggregator {\r\n  private _max: number | null = null;\r\n  private _field: number | string;\r\n  private _type = 'max' as const;\r\n\r\n  constructor(field: number | string) {\r\n    this._field = field;\r\n  }\r\n\r\n  get field(): number | string {\r\n    return this._field;\r\n  }\r\n\r\n  get type(): string {\r\n    return this._type;\r\n  }\r\n\r\n  init(): void {\r\n    this._max = null;\r\n  }\r\n\r\n  accumulate(item: T) {\r\n    const val: any = (item?.hasOwnProperty(this._field)) ? item[this._field as keyof T] : null;\r\n    if (val !== null && val !== '' && !isNaN(val)) {\r\n      if (this._max === null || val > this._max) {\r\n        this._max = parseFloat(val);\r\n      }\r\n    }\r\n  }\r\n\r\n  storeResult(groupTotals: SlickGroupTotals_ & { max: Record<number | string, number | null>; }) {\r\n    if (!groupTotals || groupTotals[this._type] === undefined) {\r\n      groupTotals[this._type] = {};\r\n    }\r\n    groupTotals[this._type][this._field] = this._max;\r\n  }\r\n}\r\n\r\nexport class SumAggregator<T = any> implements Aggregator {\r\n  private _sum = 0;\r\n  private _field: number | string;\r\n  private _type = 'sum' as const;\r\n\r\n  constructor(field: number | string) {\r\n    this._field = field;\r\n  }\r\n\r\n  get field(): number | string {\r\n    return this._field;\r\n  }\r\n\r\n  get type(): string {\r\n    return this._type;\r\n  }\r\n\r\n  init() {\r\n    this._sum = 0;\r\n  }\r\n\r\n  accumulate(item: T) {\r\n    const val: any = (item?.hasOwnProperty(this._field)) ? item[this._field as keyof T] : null;\r\n    if (val !== null && val !== '' && !isNaN(val)) {\r\n      this._sum += parseFloat(val);\r\n    }\r\n  }\r\n\r\n  storeResult(groupTotals: SlickGroupTotals_ & { sum: Record<number | string, number>; }) {\r\n    if (!groupTotals || groupTotals[this._type] === undefined) {\r\n      groupTotals[this._type] = {};\r\n    }\r\n    groupTotals[this._type][this._field] = this._sum;\r\n  }\r\n}\r\n\r\nexport class CountAggregator implements Aggregator {\r\n  private _field: number | string;\r\n  private _type = 'count' as const;\r\n\r\n  constructor(field: number | string) {\r\n    this._field = field;\r\n  }\r\n\r\n  get field(): number | string {\r\n    return this._field;\r\n  }\r\n\r\n  get type(): string {\r\n    return this._type;\r\n  }\r\n\r\n  init(): void {\r\n  }\r\n\r\n  storeResult(groupTotals: SlickGroupTotals_ & { count: Record<number | string, number>; }) {\r\n    if (!groupTotals || groupTotals[this._type] === undefined) {\r\n      groupTotals[this._type] = {};\r\n    }\r\n    groupTotals[this._type][this._field] = groupTotals.group.rows.length;\r\n  }\r\n}\r\n\r\n// TODO:  add more built-in aggregators\r\n// TODO:  merge common aggregators in one to prevent needless iterating\r\n\r\nexport const Aggregators = {\r\n  Avg: AvgAggregator,\r\n  Min: MinAggregator,\r\n  Max: MaxAggregator,\r\n  Sum: SumAggregator,\r\n  Count: CountAggregator\r\n};\r\n\r\n// extend Slick namespace on window object when building as iife\r\nif (IIFE_ONLY && window.Slick) {\r\n  window.Slick.Data = window.Slick.Data || {};\r\n  window.Slick.Data.DataView = SlickDataView;\r\n  window.Slick.Data.Aggregators = Aggregators;\r\n}","import type { Column, Editor, EditorArguments, EditorValidationResult, ElementPosition, GridOption, OnCompositeEditorChangeEventArgs } from './models/index';\r\nimport { keyCode as keyCode_, Utils as Utils_ } from './slick.core';\r\n\r\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\r\nconst keyCode = IIFE_ONLY ? Slick.keyCode : keyCode_;\r\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\r\n\r\n/***\r\n * Contains basic SlickGrid editors.\r\n * @module Editors\r\n * @namespace Slick\r\n */\r\n\r\nexport class TextEditor<TData = any, C extends Column<TData> = Column<TData>, O extends GridOption<C> = GridOption<C>> implements Editor {\r\n  protected input!: HTMLInputElement;\r\n  protected defaultValue?: number | string;\r\n  protected navOnLR?: boolean;\r\n\r\n  constructor(protected readonly args: EditorArguments<TData, C, O>) {\r\n    this.init();\r\n  }\r\n\r\n  init() {\r\n    this.navOnLR = this.args.grid.getOptions().editorCellNavOnLRKeys;\r\n    this.input = Utils.createDomElement('input', { type: 'text', className: 'editor-text' }, this.args.container);\r\n    this.input.addEventListener('keydown', (this.navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav) as EventListener);\r\n    this.input.focus();\r\n    this.input.select();\r\n\r\n    // don't show Save/Cancel when it's a Composite Editor and also trigger a onCompositeEditorChange event when input changes\r\n    if (this.args.compositeEditorOptions) {\r\n      this.input.addEventListener('change', this.onChange.bind(this));\r\n    }\r\n  }\r\n\r\n  onChange() {\r\n    const activeCell = this.args.grid.getActiveCell();\r\n\r\n    // when valid, we'll also apply the new value to the dataContext item object\r\n    if (this.validate().valid) {\r\n      this.applyValue(this.args.item, this.serializeValue());\r\n    }\r\n    this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\r\n    this.args.grid.onCompositeEditorChange.notify({\r\n      row: activeCell?.row ?? 0,\r\n      cell: activeCell?.cell ?? 0,\r\n      item: this.args.item,\r\n      column: this.args.column,\r\n      formValues: this.args.compositeEditorOptions.formValues,\r\n      grid: this.args.grid,\r\n      editors: this.args.compositeEditorOptions.editors\r\n    } as unknown as OnCompositeEditorChangeEventArgs);\r\n  }\r\n\r\n  destroy() {\r\n    this.input.removeEventListener('keydown', (this.navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav) as EventListener);\r\n    this.input.removeEventListener('change', this.onChange.bind(this));\r\n    this.input.remove();\r\n  }\r\n\r\n  focus() {\r\n    this.input.focus();\r\n  }\r\n\r\n  getValue() {\r\n    return this.input.value;\r\n  }\r\n\r\n  setValue(val: string) {\r\n    this.input.value = val;\r\n  }\r\n\r\n  loadValue(item: any) {\r\n    this.defaultValue = item[this.args.column.field] || '';\r\n    this.input.value = String(this.defaultValue ?? '');\r\n    this.input.defaultValue = String(this.defaultValue ?? '');\r\n    this.input.select();\r\n  }\r\n\r\n  serializeValue() {\r\n    return this.input.value;\r\n  }\r\n\r\n  applyValue(item: any, state: any) {\r\n    item[this.args.column.field] = state;\r\n  }\r\n\r\n  isValueChanged() {\r\n    return (!(this.input.value === '' && !Utils.isDefined(this.defaultValue))) && (this.input.value !== this.defaultValue);\r\n  }\r\n\r\n  validate() {\r\n    if (this.args.column.validator) {\r\n      const validationResults = this.args.column.validator(this.input.value, this.args);\r\n      if (!validationResults.valid) {\r\n        return validationResults;\r\n      }\r\n    }\r\n\r\n    return {\r\n      valid: true,\r\n      msg: null\r\n    };\r\n  }\r\n}\r\n\r\nexport class IntegerEditor<TData = any, C extends Column<TData> = Column<TData>, O extends GridOption<C> = GridOption<C>> implements Editor {\r\n  protected input!: HTMLInputElement;\r\n  protected defaultValue?: string | number;\r\n  protected navOnLR?: boolean;\r\n\r\n  constructor(protected readonly args: EditorArguments<TData, C, O>) {\r\n    this.init();\r\n  }\r\n\r\n  init() {\r\n    this.navOnLR = this.args.grid.getOptions().editorCellNavOnLRKeys;\r\n    this.input = Utils.createDomElement('input', { type: 'text', className: 'editor-text' }, this.args.container);\r\n    this.input.addEventListener('keydown', (this.navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav) as EventListener);\r\n    this.input.focus();\r\n    this.input.select();\r\n\r\n    // trigger onCompositeEditorChange event when input changes and it's a Composite Editor\r\n    if (this.args.compositeEditorOptions) {\r\n      this.input.addEventListener('change', this.onChange.bind(this));\r\n    }\r\n  }\r\n\r\n  onChange() {\r\n    const activeCell = this.args.grid.getActiveCell();\r\n\r\n    // when valid, we'll also apply the new value to the dataContext item object\r\n    if (this.validate().valid) {\r\n      this.applyValue(this.args.item, this.serializeValue());\r\n    }\r\n    this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\r\n    this.args.grid.onCompositeEditorChange.notify({\r\n      row: activeCell?.row ?? 0,\r\n      cell: activeCell?.cell ?? 0,\r\n      item: this.args.item,\r\n      column: this.args.column,\r\n      formValues: this.args.compositeEditorOptions.formValues,\r\n      grid: this.args.grid,\r\n      editors: this.args.compositeEditorOptions.editors\r\n    } as unknown as OnCompositeEditorChangeEventArgs);\r\n  }\r\n\r\n  destroy() {\r\n    this.input.removeEventListener('keydown', (this.navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav) as EventListener);\r\n    this.input.removeEventListener('change', this.onChange.bind(this));\r\n    this.input.remove();\r\n  }\r\n\r\n  focus() {\r\n    this.input.focus();\r\n  }\r\n\r\n  loadValue(item: any) {\r\n    this.defaultValue = item[this.args.column.field];\r\n    this.input.value = String(this.defaultValue ?? '');\r\n    this.input.defaultValue = String(this.defaultValue ?? '');\r\n    this.input.select();\r\n  }\r\n\r\n  serializeValue() {\r\n    return parseInt(this.input.value, 10) || 0;\r\n  }\r\n\r\n  applyValue(item: any, state: any) {\r\n    item[this.args.column.field] = state;\r\n  }\r\n\r\n  isValueChanged() {\r\n    return (!(this.input.value === '' && !Utils.isDefined(this.defaultValue))) && (this.input.value !== this.defaultValue);\r\n  }\r\n\r\n  validate() {\r\n    if (isNaN(this.input.value as unknown as number)) {\r\n      return {\r\n        valid: false,\r\n        msg: 'Please enter a valid integer'\r\n      };\r\n    }\r\n\r\n    if (this.args.column.validator) {\r\n      const validationResults = this.args.column.validator(this.input.value, this.args);\r\n      if (!validationResults.valid) {\r\n        return validationResults;\r\n      }\r\n    }\r\n\r\n    return {\r\n      valid: true,\r\n      msg: null\r\n    };\r\n  }\r\n}\r\n\r\nexport class FloatEditor<TData = any, C extends Column<TData> = Column<TData>, O extends GridOption<C> = GridOption<C>> implements Editor {\r\n  protected input!: HTMLInputElement;\r\n  protected defaultValue?: string | number;\r\n  protected navOnLR?: boolean;\r\n\r\n  /** Default number of decimal places to use with FloatEditor */\r\n  static DefaultDecimalPlaces?: number = undefined;\r\n\r\n  /** Should we allow empty value when using FloatEditor */\r\n  static AllowEmptyValue = false;\r\n\r\n  constructor(protected readonly args: EditorArguments<TData, C, O>) {\r\n    this.init();\r\n  }\r\n\r\n  init() {\r\n    this.navOnLR = this.args.grid.getOptions().editorCellNavOnLRKeys;\r\n    this.input = Utils.createDomElement('input', { type: 'text', className: 'editor-text' }, this.args.container);\r\n    this.input.addEventListener('keydown', (this.navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav) as EventListener);\r\n    this.input.focus();\r\n    this.input.select();\r\n\r\n    // trigger onCompositeEditorChange event when input changes and it's a Composite Editor\r\n    if (this.args.compositeEditorOptions) {\r\n      this.input.addEventListener('change', this.onChange.bind(this));\r\n    }\r\n  };\r\n\r\n  onChange() {\r\n    const activeCell = this.args.grid.getActiveCell();\r\n\r\n    // when valid, we'll also apply the new value to the dataContext item object\r\n    if (this.validate().valid) {\r\n      this.applyValue(this.args.item, this.serializeValue());\r\n    }\r\n    this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\r\n    this.args.grid.onCompositeEditorChange.notify({\r\n      row: activeCell?.row ?? 0,\r\n      cell: activeCell?.cell ?? 0,\r\n      item: this.args.item,\r\n      column: this.args.column,\r\n      formValues: this.args.compositeEditorOptions.formValues,\r\n      grid: this.args.grid,\r\n      editors: this.args.compositeEditorOptions.editors\r\n    } as unknown as OnCompositeEditorChangeEventArgs);\r\n  };\r\n\r\n  destroy() {\r\n    this.input.removeEventListener('keydown', (this.navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav) as EventListener);\r\n    this.input.removeEventListener('change', this.onChange.bind(this));\r\n    this.input.remove();\r\n  };\r\n\r\n  focus() {\r\n    this.input.focus();\r\n  }\r\n\r\n  getDecimalPlaces() {\r\n    // returns the number of fixed decimal places or null\r\n    let rtn: number | undefined = this.args.column.editorFixedDecimalPlaces;\r\n    if (!Utils.isDefined(rtn)) {\r\n      rtn = FloatEditor.DefaultDecimalPlaces;\r\n    }\r\n    return (!rtn && rtn !== 0 ? null : rtn);\r\n  }\r\n\r\n  loadValue(item: any) {\r\n    this.defaultValue = item[this.args.column.field];\r\n\r\n    const decPlaces = this.getDecimalPlaces();\r\n    if (decPlaces !== null\r\n      && (this.defaultValue || this.defaultValue === 0)\r\n      && (this.defaultValue as number)?.toFixed) {\r\n      this.defaultValue = (this.defaultValue as number).toFixed(decPlaces);\r\n    }\r\n\r\n    this.input.value = String(this.defaultValue ?? '');\r\n    this.input.defaultValue = String(this.defaultValue ?? '');\r\n    this.input.select();\r\n  }\r\n\r\n  serializeValue() {\r\n    let rtn: number | undefined = parseFloat(this.input.value);\r\n    if (FloatEditor.AllowEmptyValue) {\r\n      if (!rtn && rtn !== 0) {\r\n        rtn = undefined;\r\n      }\r\n    } else {\r\n      rtn = rtn || 0;\r\n    }\r\n\r\n    const decPlaces = this.getDecimalPlaces();\r\n    if (decPlaces !== null\r\n      && (rtn || rtn === 0)\r\n      && rtn.toFixed) {\r\n      rtn = parseFloat(rtn.toFixed(decPlaces));\r\n    }\r\n\r\n    return rtn as number;\r\n  }\r\n\r\n  applyValue(item: any, state: number | string) {\r\n    item[this.args.column.field] = state;\r\n  }\r\n\r\n  isValueChanged() {\r\n    return (!(this.input.value === '' && !Utils.isDefined(this.defaultValue))) && (this.input.value !== this.defaultValue);\r\n  }\r\n\r\n  validate() {\r\n    if (isNaN(this.input.value as unknown as number)) {\r\n      return {\r\n        valid: false,\r\n        msg: 'Please enter a valid number'\r\n      };\r\n    }\r\n\r\n    if (this.args.column.validator) {\r\n      const validationResults = this.args.column.validator(this.input.value, this.args);\r\n      if (!validationResults.valid) {\r\n        return validationResults;\r\n      }\r\n    }\r\n\r\n    return {\r\n      valid: true,\r\n      msg: null\r\n    };\r\n  }\r\n}\r\n\r\nexport class FlatpickrEditor<TData = any, C extends Column<TData> = Column<TData>, O extends GridOption<C> = GridOption<C>> implements Editor {\r\n  protected input!: HTMLInputElement;\r\n  protected defaultValue?: string | number;\r\n  protected flatpickrInstance: any;\r\n\r\n  constructor(protected readonly args: EditorArguments<TData, C, O>) {\r\n    this.init();\r\n    if (typeof flatpickr === 'undefined') {\r\n      throw new Error('Flatpickr not loaded but required in SlickGrid.Editors, refer to Flatpickr documentation: https://flatpickr.js.org/getting-started/');\r\n    }\r\n  }\r\n\r\n  init() {\r\n    this.input = Utils.createDomElement('input', { type: 'text', className: 'editor-text' }, this.args.container);\r\n    this.input.focus();\r\n    this.input.select();\r\n    const editorOptions = this.args.column.params?.editorOptions; // i.e.: { id: 'start', params: { editorOptions: {altFormat: 'd/m/Y', dateFormat: 'd/m/Y'}} }\r\n    this.flatpickrInstance = flatpickr(this.input, {\r\n      closeOnSelect: true,\r\n      allowInput: true,\r\n      altInput: true,\r\n      altFormat: editorOptions?.altFormat ?? 'm/d/Y',\r\n      dateFormat: editorOptions?.dateFormat ?? 'm/d/Y',\r\n      onChange: () => {\r\n        // trigger onCompositeEditorChange event when input changes and it's a Composite Editor\r\n        if (this.args.compositeEditorOptions) {\r\n          const activeCell = this.args.grid.getActiveCell();\r\n\r\n          // when valid, we'll also apply the new value to the dataContext item object\r\n          if (this.validate().valid) {\r\n            this.applyValue(this.args.item, this.serializeValue());\r\n          }\r\n          this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\r\n          this.args.grid.onCompositeEditorChange.notify({\r\n            row: activeCell?.row ?? 0,\r\n            cell: activeCell?.cell ?? 0,\r\n            item: this.args.item,\r\n            column: this.args.column,\r\n            formValues: this.args.compositeEditorOptions.formValues,\r\n            grid: this.args.grid,\r\n            editors: this.args.compositeEditorOptions.editors\r\n          } as unknown as OnCompositeEditorChangeEventArgs);\r\n        }\r\n      },\r\n    });\r\n\r\n    if (!this.args.compositeEditorOptions) {\r\n      setTimeout(() => {\r\n        this.show();\r\n        this.focus();\r\n      }, 50);\r\n    }\r\n\r\n    Utils.width(this.input, (Utils.width(this.input) as number) - (!this.args.compositeEditorOptions ? 18 : 28));\r\n  }\r\n\r\n  destroy() {\r\n    this.hide();\r\n    if (this.flatpickrInstance) {\r\n      this.flatpickrInstance.destroy();\r\n    }\r\n    this.input.remove();\r\n  }\r\n\r\n  show() {\r\n    if (!this.args.compositeEditorOptions && this.flatpickrInstance) {\r\n      this.flatpickrInstance.open();\r\n    }\r\n  }\r\n\r\n  hide() {\r\n    if (!this.args.compositeEditorOptions && this.flatpickrInstance) {\r\n      this.flatpickrInstance.close();\r\n    }\r\n  }\r\n\r\n  focus() {\r\n    this.input.focus();\r\n  }\r\n\r\n  loadValue(item: any) {\r\n    this.defaultValue = item[this.args.column.field];\r\n    this.input.value = String(this.defaultValue ?? '');\r\n    this.input.defaultValue = String(this.defaultValue ?? '');\r\n    this.input.select();\r\n    if (this.flatpickrInstance) {\r\n      this.flatpickrInstance.setDate(this.defaultValue);\r\n    }\r\n  }\r\n\r\n  serializeValue() {\r\n    return this.input.value;\r\n  }\r\n\r\n  applyValue(item: any, state: any) {\r\n    item[this.args.column.field] = state;\r\n  }\r\n\r\n  isValueChanged() {\r\n    return (!(this.input.value === '' && !Utils.isDefined(this.defaultValue))) && (this.input.value !== this.defaultValue);\r\n  }\r\n\r\n  validate() {\r\n    if (this.args.column.validator) {\r\n      const validationResults = this.args.column.validator(this.input.value, this.args);\r\n      if (!validationResults.valid) {\r\n        return validationResults;\r\n      }\r\n    }\r\n\r\n    return {\r\n      valid: true,\r\n      msg: null\r\n    };\r\n  }\r\n}\r\n\r\nexport class YesNoSelectEditor<TData = any, C extends Column<TData> = Column<TData>, O extends GridOption<C> = GridOption<C>> implements Editor {\r\n  protected select!: HTMLSelectElement;\r\n  protected defaultValue?: string | number;\r\n\r\n  constructor(protected readonly args: EditorArguments<TData, C, O>) {\r\n    this.init();\r\n  }\r\n\r\n  init() {\r\n    this.select = Utils.createDomElement('select', { tabIndex: 0, className: 'editor-yesno' }, this.args.container);\r\n    Utils.createDomElement('option', { value: 'yes', textContent: 'Yes' }, this.select);\r\n    Utils.createDomElement('option', { value: 'no', textContent: 'No' }, this.select);\r\n\r\n    this.select.focus();\r\n\r\n    // trigger onCompositeEditorChange event when input changes and it's a Composite Editor\r\n    if (this.args.compositeEditorOptions) {\r\n      this.select.addEventListener('change', this.onChange.bind(this));\r\n    }\r\n  }\r\n\r\n  onChange() {\r\n    const activeCell = this.args.grid.getActiveCell();\r\n\r\n    // when valid, we'll also apply the new value to the dataContext item object\r\n    if (this.validate().valid) {\r\n      this.applyValue(this.args.item, this.serializeValue());\r\n    }\r\n    this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\r\n    this.args.grid.onCompositeEditorChange.notify({\r\n      row: activeCell?.row ?? 0,\r\n      cell: activeCell?.cell ?? 0,\r\n      item: this.args.item,\r\n      column: this.args.column,\r\n      formValues: this.args.compositeEditorOptions.formValues,\r\n      grid: this.args.grid,\r\n      editors: this.args.compositeEditorOptions.editors\r\n    } as unknown as OnCompositeEditorChangeEventArgs);\r\n  }\r\n\r\n  destroy() {\r\n    this.select.removeEventListener('change', this.onChange.bind(this));\r\n    this.select.remove();\r\n  }\r\n\r\n  focus() {\r\n    this.select.focus();\r\n  }\r\n\r\n  loadValue(item: any) {\r\n    this.select.value = ((this.defaultValue = item[this.args.column.field]) ? 'yes' : 'no');\r\n  }\r\n\r\n  serializeValue() {\r\n    return this.select.value === 'yes';\r\n  }\r\n\r\n  applyValue(item: any, state: any) {\r\n    item[this.args.column.field] = state;\r\n  }\r\n\r\n  isValueChanged() {\r\n    return this.select.value !== this.defaultValue;\r\n  }\r\n\r\n  validate() {\r\n    return {\r\n      valid: true,\r\n      msg: null\r\n    };\r\n  }\r\n}\r\n\r\nexport class CheckboxEditor<TData = any, C extends Column<TData> = Column<TData>, O extends GridOption<C> = GridOption<C>> implements Editor {\r\n  protected input!: HTMLInputElement;\r\n  protected defaultValue?: boolean;\r\n\r\n  constructor(protected readonly args: EditorArguments<TData, C, O>) {\r\n    this.init();\r\n  }\r\n\r\n  init() {\r\n    this.input = Utils.createDomElement('input', { className: 'editor-checkbox', type: 'checkbox', value: 'true' }, this.args.container);\r\n    this.input.focus();\r\n\r\n    // trigger onCompositeEditorChange event when input checkbox changes and it's a Composite Editor\r\n    if (this.args.compositeEditorOptions) {\r\n      this.input.addEventListener('change', this.onChange.bind(this));\r\n    }\r\n  };\r\n\r\n  onChange() {\r\n    const activeCell = this.args.grid.getActiveCell();\r\n\r\n    // when valid, we'll also apply the new value to the dataContext item object\r\n    if (this.validate().valid) {\r\n      this.applyValue(this.args.item, this.serializeValue());\r\n    }\r\n    this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\r\n    this.args.grid.onCompositeEditorChange.notify({\r\n      row: activeCell?.row ?? 0,\r\n      cell: activeCell?.cell ?? 0,\r\n      item: this.args.item,\r\n      column: this.args.column,\r\n      formValues: this.args.compositeEditorOptions.formValues,\r\n      grid: this.args.grid,\r\n      editors: this.args.compositeEditorOptions.editors\r\n    } as unknown as OnCompositeEditorChangeEventArgs);\r\n  };\r\n\r\n  destroy() {\r\n    this.input.removeEventListener('change', this.onChange.bind(this));\r\n    this.input.remove();\r\n  };\r\n\r\n  focus() {\r\n    this.input.focus();\r\n  };\r\n\r\n  loadValue(item: any) {\r\n    this.defaultValue = !!(item[this.args.column.field]);\r\n    if (this.defaultValue) {\r\n      this.input.checked = true;\r\n    } else {\r\n      this.input.checked = false;\r\n    }\r\n  };\r\n\r\n  serializeValue() {\r\n    return this.input.checked;\r\n  };\r\n\r\n  applyValue(item: any, state: any) {\r\n    item[this.args.column.field] = state;\r\n  }\r\n\r\n  isValueChanged() {\r\n    return (this.serializeValue() !== this.defaultValue);\r\n  }\r\n\r\n  validate(): EditorValidationResult {\r\n    return {\r\n      valid: true,\r\n      msg: null\r\n    };\r\n  }\r\n}\r\n\r\nexport class PercentCompleteEditor<TData = any, C extends Column<TData> = Column<TData>, O extends GridOption<C> = GridOption<C>> implements Editor {\r\n  protected input!: HTMLInputElement;\r\n  protected defaultValue?: number;\r\n  protected picker!: HTMLDivElement;\r\n  protected slider!: HTMLInputElement | null;\r\n\r\n  constructor(protected readonly args: EditorArguments<TData, C, O>) {\r\n    this.init();\r\n  }\r\n\r\n  sliderInputHandler(e: MouseEvent & { target: HTMLButtonElement }) {\r\n    this.input.value = e.target.value;\r\n  }\r\n\r\n  sliderChangeHandler() {\r\n    // trigger onCompositeEditorChange event when slider stops and it's a Composite Editor\r\n    if (this.args.compositeEditorOptions) {\r\n      const activeCell = this.args.grid.getActiveCell();\r\n\r\n      // when valid, we'll also apply the new value to the dataContext item object\r\n      if (this.validate().valid) {\r\n        this.applyValue(this.args.item, this.serializeValue());\r\n      }\r\n      this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\r\n      this.args.grid.onCompositeEditorChange.notify({\r\n        row: activeCell?.row ?? 0,\r\n        cell: activeCell?.cell ?? 0,\r\n        item: this.args.item,\r\n        column: this.args.column,\r\n        formValues: this.args.compositeEditorOptions.formValues,\r\n        grid: this.args.grid,\r\n        editors: this.args.compositeEditorOptions.editors\r\n      } as unknown as OnCompositeEditorChangeEventArgs);\r\n    }\r\n  }\r\n\r\n  init() {\r\n    this.input = Utils.createDomElement('input', { className: 'editor-percentcomplete', type: 'text' }, this.args.container);\r\n    Utils.width(this.input, this.args.container.clientWidth - 25);\r\n\r\n    this.picker = Utils.createDomElement('div', { className: 'editor-percentcomplete-picker' }, this.args.container);\r\n    Utils.createDomElement('span', { className: 'editor-percentcomplete-picker-icon' }, this.picker);\r\n    const containerHelper = Utils.createDomElement('div', { className: 'editor-percentcomplete-helper' }, this.picker);\r\n    const containerWrapper = Utils.createDomElement('div', { className: 'editor-percentcomplete-wrapper' }, containerHelper);\r\n    Utils.createDomElement('div', { className: 'editor-percentcomplete-slider' }, containerWrapper);\r\n    this.slider = Utils.createDomElement('input', { className: 'editor-percentcomplete-slider', type: 'range', value: String(this.defaultValue ?? '') }, containerWrapper);\r\n    const containerButtons = Utils.createDomElement('div', { className: 'editor-percentcomplete-buttons' }, containerWrapper);\r\n    Utils.createDomElement('button', { value: '0', className: 'slick-btn slick-btn-default', textContent: 'Not started' }, containerButtons);\r\n    containerButtons.appendChild(document.createElement('br'));\r\n    Utils.createDomElement('button', { value: '50', className: 'slick-btn slick-btn-default', textContent: 'In Progress' }, containerButtons);\r\n    containerButtons.appendChild(document.createElement('br'));\r\n    Utils.createDomElement('button', { value: '100', className: 'slick-btn slick-btn-default', textContent: 'Complete' }, containerButtons);\r\n\r\n    this.input.focus();\r\n    this.input.select();\r\n\r\n    this.slider.addEventListener('input', this.sliderInputHandler.bind(this) as EventListener);\r\n    this.slider.addEventListener('change', this.sliderChangeHandler.bind(this));\r\n\r\n    const buttons = this.picker.querySelectorAll('.editor-percentcomplete-buttons button');\r\n    [].forEach.call(buttons, (button: HTMLButtonElement) => {\r\n      button.addEventListener('click', this.onClick.bind(this) as EventListener);\r\n    });\r\n  };\r\n\r\n  onClick(e: MouseEvent & { target: HTMLButtonElement }) {\r\n    this.input.value = String(e.target.value ?? '');\r\n    this.slider!.value = String(e.target.value ?? '');\r\n  };\r\n\r\n  destroy() {\r\n    this.slider?.removeEventListener('input', this.sliderInputHandler.bind(this) as EventListener);\r\n    this.slider?.removeEventListener('change', this.sliderChangeHandler.bind(this));\r\n    this.picker.querySelectorAll('.editor-percentcomplete-buttons button')\r\n      .forEach(button => button.removeEventListener('click', this.onClick.bind(this) as EventListener));\r\n    this.input.remove();\r\n    this.picker.remove();\r\n  };\r\n\r\n  focus() {\r\n    this.input.focus();\r\n  };\r\n\r\n  loadValue(item: any) {\r\n    this.defaultValue = item[this.args.column.field];\r\n    this.slider!.value = String(this.defaultValue ?? '');\r\n    this.input.value = String(this.defaultValue);\r\n    this.input.select();\r\n  };\r\n\r\n  serializeValue() {\r\n    return parseInt(this.input.value, 10) || 0;\r\n  };\r\n\r\n  applyValue(item: any, state: any) {\r\n    item[this.args.column.field] = state;\r\n  };\r\n\r\n  isValueChanged() {\r\n    return (!(this.input.value === '' && !Utils.isDefined(this.defaultValue))) && ((parseInt(this.input.value as any, 10) || 0) !== this.defaultValue);\r\n  };\r\n\r\n  validate(): EditorValidationResult {\r\n    if (isNaN(parseInt(this.input.value, 10))) {\r\n      return {\r\n        valid: false,\r\n        msg: 'Please enter a valid positive number'\r\n      };\r\n    }\r\n\r\n    return {\r\n      valid: true,\r\n      msg: null\r\n    };\r\n  };\r\n}\r\n\r\n/*\r\n * An example of a 'detached' editor.\r\n * The UI is added onto document BODY and .position(), .show() and .hide() are implemented.\r\n * KeyDown events are also handled to provide handling for Tab, Shift-Tab, Esc and Ctrl-Enter.\r\n */\r\nexport class LongTextEditor<TData = any, C extends Column<TData> = Column<TData>, O extends GridOption<C> = GridOption<C>> implements Editor {\r\n  protected input!: HTMLTextAreaElement;\r\n  protected wrapper!: HTMLDivElement;\r\n  protected defaultValue?: string;\r\n  protected selectionStart = 0;\r\n\r\n  constructor(protected readonly args: EditorArguments<TData, C, O>) {\r\n    this.init();\r\n  }\r\n\r\n  init() {\r\n    const compositeEditorOptions = this.args.compositeEditorOptions;\r\n    this.args.grid.getOptions().editorCellNavOnLRKeys;\r\n    const container = compositeEditorOptions ? this.args.container : document.body;\r\n\r\n    this.wrapper = Utils.createDomElement('div', { className: 'slick-large-editor-text' }, container);\r\n    if (compositeEditorOptions) {\r\n      this.wrapper.style.position = 'relative';\r\n      Utils.setStyleSize(this.wrapper, 'padding', 0);\r\n      Utils.setStyleSize(this.wrapper, 'border', 0);\r\n    } else {\r\n      this.wrapper.style.position = 'absolute';\r\n    }\r\n\r\n    this.input = Utils.createDomElement('textarea', { rows: 5, style: { background: 'white', width: '250px', height: '80px', border: '0', outline: '0' } }, this.wrapper);\r\n\r\n    // trigger onCompositeEditorChange event when input changes and it's a Composite Editor\r\n    if (compositeEditorOptions) {\r\n      this.input.addEventListener('change', this.onChange.bind(this));\r\n    } else {\r\n      const btnContainer = Utils.createDomElement('div', { style: 'text-align:right' }, this.wrapper);\r\n      Utils.createDomElement('button', { id: 'save', className: 'slick-btn slick-btn-primary', textContent: 'Save' }, btnContainer);\r\n      Utils.createDomElement('button', { id: 'cancel', className: 'slick-btn slick-btn-default', textContent: 'Cancel' }, btnContainer);\r\n\r\n      this.wrapper.querySelector('#save')!.addEventListener('click', this.save.bind(this));\r\n      this.wrapper.querySelector('#cancel')!.addEventListener('click', this.cancel.bind(this));\r\n      this.input.addEventListener('keydown', this.handleKeyDown.bind(this) as EventListener);\r\n      this.position(this.args.position as ElementPosition);\r\n    }\r\n\r\n    this.input.focus();\r\n    this.input.select();\r\n  };\r\n\r\n  onChange() {\r\n    const activeCell = this.args.grid.getActiveCell();\r\n\r\n    // when valid, we'll also apply the new value to the dataContext item object\r\n    if (this.validate().valid) {\r\n      this.applyValue(this.args.item, this.serializeValue());\r\n    }\r\n    this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\r\n    this.args.grid.onCompositeEditorChange.notify({\r\n      row: activeCell?.row ?? 0,\r\n      cell: activeCell?.cell ?? 0,\r\n      item: this.args.item,\r\n      column: this.args.column,\r\n      formValues: this.args.compositeEditorOptions.formValues,\r\n      grid: this.args.grid,\r\n      editors: this.args.compositeEditorOptions.editors\r\n    } as unknown as OnCompositeEditorChangeEventArgs);\r\n  };\r\n\r\n  handleKeyDown(e: KeyboardEvent & { target: HTMLInputElement }) {\r\n    if (e.which === keyCode.ENTER && e.ctrlKey) {\r\n      this.save();\r\n    } else if (e.which === keyCode.ESCAPE) {\r\n      e.preventDefault();\r\n      this.cancel();\r\n    } else if (e.which === keyCode.TAB && e.shiftKey) {\r\n      e.preventDefault();\r\n      this.args.grid.navigatePrev();\r\n    } else if (e.which === keyCode.TAB) {\r\n      e.preventDefault();\r\n      this.args.grid.navigateNext();\r\n    } else if (e.which === keyCode.LEFT || e.which === keyCode.RIGHT) {\r\n      if (this.args.grid.getOptions().editorCellNavOnLRKeys) {\r\n        const cursorPosition = this.selectionStart;\r\n        const textLength = e.target.value.length;\r\n        if (e.keyCode === keyCode.LEFT && cursorPosition === 0) {\r\n          this.args.grid.navigatePrev();\r\n        }\r\n        if (e.keyCode === keyCode.RIGHT && cursorPosition >= textLength - 1) {\r\n          this.args.grid.navigateNext();\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  save() {\r\n    const gridOptions = this.args.grid.getOptions() || {};\r\n    if (gridOptions.autoCommitEdit) {\r\n      this.args.grid.getEditorLock().commitCurrentEdit();\r\n    } else {\r\n      this.args.commitChanges();\r\n    }\r\n  };\r\n\r\n  cancel() {\r\n    this.input.value = String(this.defaultValue ?? '');\r\n    this.args.cancelChanges();\r\n  };\r\n\r\n  hide() {\r\n    Utils.hide(this.wrapper);\r\n  };\r\n\r\n  show() {\r\n    Utils.show(this.wrapper);\r\n  };\r\n\r\n  position(position: ElementPosition) {\r\n    Utils.setStyleSize(this.wrapper, 'top', (position.top || 0) - 5);\r\n    Utils.setStyleSize(this.wrapper, 'left', (position.left || 0) - 2);\r\n  };\r\n\r\n  destroy() {\r\n    if (this.args.compositeEditorOptions) {\r\n      this.input.removeEventListener('change', this.onChange.bind(this));\r\n    } else {\r\n      this.wrapper.querySelector('#save')!.removeEventListener('click', this.save.bind(this));\r\n      this.wrapper.querySelector('#cancel')!.removeEventListener('click', this.cancel.bind(this));\r\n      this.input.removeEventListener('keydown', this.handleKeyDown.bind(this) as EventListener);\r\n    }\r\n    this.wrapper.remove();\r\n  };\r\n\r\n  focus() {\r\n    this.input.focus();\r\n  };\r\n\r\n  loadValue(item: any) {\r\n    this.input.value = this.defaultValue = item[this.args.column.field];\r\n    this.input.select();\r\n  };\r\n\r\n  serializeValue() {\r\n    return this.input.value;\r\n  };\r\n\r\n  applyValue(item: any, state: any) {\r\n    item[this.args.column.field] = state;\r\n  };\r\n\r\n  isValueChanged() {\r\n    return (!(this.input.value === '' && !Utils.isDefined(this.defaultValue))) && (this.input.value !== this.defaultValue);\r\n  };\r\n\r\n  validate() {\r\n    if (this.args.column.validator) {\r\n      const validationResults = this.args.column.validator(this.input.value, this.args);\r\n      if (!validationResults.valid) {\r\n        return validationResults;\r\n      }\r\n    }\r\n\r\n    return {\r\n      valid: true,\r\n      msg: null\r\n    };\r\n  };\r\n}\r\n\r\n/*\r\n * Depending on the value of Grid option 'editorCellNavOnLRKeys', us\r\n * Navigate to the cell on the left if the cursor is at the beginning of the input string\r\n * and to the right cell if it's at the end. Otherwise, move the cursor within the text\r\n */\r\nfunction handleKeydownLRNav(e: KeyboardEvent & { target: HTMLInputElement; selectionStart: number; }) {\r\n  const cursorPosition = e.selectionStart;\r\n  const textLength = e.target.value.length;\r\n  if ((e.keyCode === keyCode.LEFT && cursorPosition > 0) ||\r\n    e.keyCode === keyCode.RIGHT && cursorPosition < textLength - 1) {\r\n    e.stopImmediatePropagation();\r\n  }\r\n}\r\n\r\nfunction handleKeydownLRNoNav(e: KeyboardEvent) {\r\n  if (e.keyCode === keyCode.LEFT || e.keyCode === keyCode.RIGHT) {\r\n    e.stopImmediatePropagation();\r\n  }\r\n}\r\n\r\nexport const Editors = {\r\n  Text: TextEditor,\r\n  Integer: IntegerEditor,\r\n  Float: FloatEditor,\r\n  Flatpickr: FlatpickrEditor,\r\n  YesNoSelect: YesNoSelectEditor,\r\n  Checkbox: CheckboxEditor,\r\n  PercentComplete: PercentCompleteEditor,\r\n  LongText: LongTextEditor\r\n};\r\n\r\n// extend Slick namespace on window object when building as iife\r\nif (IIFE_ONLY && window.Slick) {\r\n  Utils.extend(Slick, {\r\n    Editors\r\n  });\r\n}\r\n\r\n","// @ts-ignore\r\nimport type SortableInstance from 'sortablejs';\r\n\r\nimport type {\r\n  AutoSize,\r\n  CellViewportRange,\r\n  Column,\r\n  ColumnSort,\r\n  CssStyleHash,\r\n  CSSStyleDeclarationWritable,\r\n  CustomDataView,\r\n  DOMEvent,\r\n  DragPosition,\r\n  DragRowMove,\r\n  Editor,\r\n  EditorArguments,\r\n  EditorConstructor,\r\n  EditController,\r\n  Formatter,\r\n  FormatterOverrideCallback,\r\n  FormatterResultObject,\r\n  FormatterResultWithHtml,\r\n  FormatterResultWithText,\r\n  GridOption as BaseGridOption,\r\n  InteractionBase,\r\n  ItemMetadata,\r\n  MenuCommandItemCallbackArgs,\r\n  MultiColumnSort,\r\n  OnActivateChangedOptionsEventArgs,\r\n  OnActiveCellChangedEventArgs,\r\n  OnAddNewRowEventArgs,\r\n  OnAutosizeColumnsEventArgs,\r\n  OnBeforeUpdateColumnsEventArgs,\r\n  OnBeforeAppendCellEventArgs,\r\n  OnBeforeCellEditorDestroyEventArgs,\r\n  OnBeforeColumnsResizeEventArgs,\r\n  OnBeforeEditCellEventArgs,\r\n  OnBeforeHeaderCellDestroyEventArgs,\r\n  OnBeforeHeaderRowCellDestroyEventArgs,\r\n  OnBeforeFooterRowCellDestroyEventArgs,\r\n  OnBeforeSetColumnsEventArgs,\r\n  OnCellChangeEventArgs,\r\n  OnCellCssStylesChangedEventArgs,\r\n  OnClickEventArgs,\r\n  OnColumnsDragEventArgs,\r\n  OnColumnsReorderedEventArgs,\r\n  OnColumnsResizedEventArgs,\r\n  OnColumnsResizeDblClickEventArgs,\r\n  OnCompositeEditorChangeEventArgs,\r\n  OnDblClickEventArgs,\r\n  OnFooterContextMenuEventArgs,\r\n  OnFooterRowCellRenderedEventArgs,\r\n  OnHeaderCellRenderedEventArgs,\r\n  OnFooterClickEventArgs,\r\n  OnHeaderClickEventArgs,\r\n  OnHeaderContextMenuEventArgs,\r\n  OnHeaderMouseEventArgs,\r\n  OnHeaderRowCellRenderedEventArgs,\r\n  OnKeyDownEventArgs,\r\n  OnPreHeaderContextMenuEventArgs,\r\n  OnPreHeaderClickEventArgs,\r\n  OnRenderedEventArgs,\r\n  OnSelectedRowsChangedEventArgs,\r\n  OnSetOptionsEventArgs,\r\n  OnScrollEventArgs,\r\n  OnValidationErrorEventArgs,\r\n  PagingInfo,\r\n  RowInfo,\r\n  SelectionModel,\r\n  SingleColumnSort,\r\n  SlickGridModel,\r\n  SlickPlugin,\r\n} from './models/index';\r\nimport {\r\n  type BasePubSub,\r\n  BindingEventService as BindingEventService_,\r\n  ColAutosizeMode as ColAutosizeMode_,\r\n  GlobalEditorLock as GlobalEditorLock_,\r\n  GridAutosizeColsMode as GridAutosizeColsMode_,\r\n  keyCode as keyCode_,\r\n  preClickClassName as preClickClassName_,\r\n  RowSelectionMode as RowSelectionMode_,\r\n  type SlickEditorLock,\r\n  SlickEvent as SlickEvent_,\r\n  SlickEventData as SlickEventData_,\r\n  SlickRange as SlickRange_,\r\n  Utils as Utils_,\r\n  ValueFilterMode as ValueFilterMode_,\r\n  WidthEvalMode as WidthEvalMode_,\r\n} from './slick.core';\r\nimport { Draggable as Draggable_, MouseWheel as MouseWheel_, Resizable as Resizable_ } from './slick.interactions';\r\n\r\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\r\nconst BindingEventService = IIFE_ONLY ? Slick.BindingEventService : BindingEventService_;\r\nconst ColAutosizeMode = IIFE_ONLY ? Slick.ColAutosizeMode : ColAutosizeMode_;\r\nconst SlickEvent = IIFE_ONLY ? Slick.Event : SlickEvent_;\r\nconst SlickEventData = IIFE_ONLY ? Slick.EventData : SlickEventData_;\r\nconst GlobalEditorLock = IIFE_ONLY ? Slick.GlobalEditorLock : GlobalEditorLock_;\r\nconst GridAutosizeColsMode = IIFE_ONLY ? Slick.GridAutosizeColsMode : GridAutosizeColsMode_;\r\nconst keyCode = IIFE_ONLY ? Slick.keyCode : keyCode_;\r\nconst preClickClassName = IIFE_ONLY ? Slick.preClickClassName : preClickClassName_;\r\nconst SlickRange = IIFE_ONLY ? Slick.Range : SlickRange_;\r\nconst RowSelectionMode = IIFE_ONLY ? Slick.RowSelectionMode : RowSelectionMode_;\r\nconst ValueFilterMode = IIFE_ONLY ? Slick.ValueFilterMode : ValueFilterMode_;\r\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\r\nconst WidthEvalMode = IIFE_ONLY ? Slick.WidthEvalMode : WidthEvalMode_;\r\nconst Draggable = IIFE_ONLY ? Slick.Draggable : Draggable_;\r\nconst MouseWheel = IIFE_ONLY ? Slick.MouseWheel : MouseWheel_;\r\nconst Resizable = IIFE_ONLY ? Slick.Resizable : Resizable_;\r\n\r\n/**\r\n * @license\r\n * (c) 2009-present Michael Leibman\r\n * michael{dot}leibman{at}gmail{dot}com\r\n * http://github.com/mleibman/slickgrid\r\n *\r\n * Distributed under MIT license.\r\n * All rights reserved.\r\n *\r\n * SlickGrid v5.12.0\r\n *\r\n * NOTES:\r\n *     Cell/row DOM manipulations are done directly bypassing JS DOM manipulation methods.\r\n *     This increases the speed dramatically, but can only be done safely because there are no event handlers\r\n *     or data associated with any cell/row DOM nodes.  Cell editors must make sure they implement .destroy()\r\n *     and do proper cleanup.\r\n */\r\n\r\n//////////////////////////////////////////////////////////////////////////////////////////////\r\n// SlickGrid class implementation (available as SlickGrid)\r\n\r\ninterface RowCaching {\r\n  rowNode: HTMLElement[] | null,\r\n  cellColSpans: Array<number | '*'>;\r\n  cellNodesByColumnIdx: HTMLElement[];\r\n  cellRenderQueue: any[];\r\n}\r\n\r\nexport class SlickGrid<TData = any, C extends Column<TData> = Column<TData>, O extends BaseGridOption<C> = BaseGridOption<C>> {\r\n  //////////////////////////////////////////////////////////////////////////////////////////////\r\n  // Public API\r\n  slickGridVersion = '5.12.0';\r\n\r\n  /** optional grid state clientId */\r\n  cid = '';\r\n\r\n  // Events\r\n  onActiveCellChanged: SlickEvent_<OnActiveCellChangedEventArgs>;\r\n  onActiveCellPositionChanged: SlickEvent_<{ grid: SlickGrid; }>;\r\n  onAddNewRow: SlickEvent_<OnAddNewRowEventArgs>;\r\n  onAutosizeColumns: SlickEvent_<OnAutosizeColumnsEventArgs>;\r\n  onBeforeAppendCell: SlickEvent_<OnBeforeAppendCellEventArgs>;\r\n  onBeforeCellEditorDestroy: SlickEvent_<OnBeforeCellEditorDestroyEventArgs>;\r\n  onBeforeColumnsResize: SlickEvent_<OnBeforeColumnsResizeEventArgs>;\r\n  onBeforeDestroy: SlickEvent_<{ grid: SlickGrid; }>;\r\n  onBeforeEditCell: SlickEvent_<OnBeforeEditCellEventArgs>;\r\n  onBeforeFooterRowCellDestroy: SlickEvent_<OnBeforeFooterRowCellDestroyEventArgs>;\r\n  onBeforeHeaderCellDestroy: SlickEvent_<OnBeforeHeaderCellDestroyEventArgs>;\r\n  onBeforeHeaderRowCellDestroy: SlickEvent_<OnBeforeHeaderRowCellDestroyEventArgs>;\r\n  onBeforeSetColumns: SlickEvent_<OnBeforeSetColumnsEventArgs>;\r\n  onBeforeSort: SlickEvent_<SingleColumnSort | MultiColumnSort>;\r\n  onBeforeUpdateColumns: SlickEvent_<OnBeforeUpdateColumnsEventArgs>;\r\n  onCellChange: SlickEvent_<OnCellChangeEventArgs>;\r\n  onCellCssStylesChanged: SlickEvent_<OnCellCssStylesChangedEventArgs>;\r\n  onClick: SlickEvent_<OnClickEventArgs>;\r\n  onColumnsReordered: SlickEvent_<OnColumnsReorderedEventArgs>;\r\n  onColumnsDrag: SlickEvent_<OnColumnsDragEventArgs>;\r\n  onColumnsResized: SlickEvent_<OnColumnsResizedEventArgs>;\r\n  onColumnsResizeDblClick: SlickEvent_<OnColumnsResizeDblClickEventArgs>;\r\n  onCompositeEditorChange: SlickEvent_<OnCompositeEditorChangeEventArgs>;\r\n  onContextMenu: SlickEvent_<MenuCommandItemCallbackArgs>;\r\n  onDrag: SlickEvent_<DragRowMove>;\r\n  onDblClick: SlickEvent_<OnDblClickEventArgs>;\r\n  onDragInit: SlickEvent_<DragRowMove>;\r\n  onDragStart: SlickEvent_<DragRowMove>;\r\n  onDragEnd: SlickEvent_<DragRowMove>;\r\n  onFooterClick: SlickEvent_<OnFooterClickEventArgs>;\r\n  onFooterContextMenu: SlickEvent_<OnFooterContextMenuEventArgs>;\r\n  onFooterRowCellRendered: SlickEvent_<OnFooterRowCellRenderedEventArgs>;\r\n  onHeaderCellRendered: SlickEvent_<OnHeaderCellRenderedEventArgs>;\r\n  onHeaderClick: SlickEvent_<OnHeaderClickEventArgs>;\r\n  onHeaderContextMenu: SlickEvent_<OnHeaderContextMenuEventArgs>;\r\n  onHeaderMouseEnter: SlickEvent_<OnHeaderMouseEventArgs>;\r\n  onHeaderMouseLeave: SlickEvent_<OnHeaderMouseEventArgs>;\r\n  onHeaderRowCellRendered: SlickEvent_<OnHeaderRowCellRenderedEventArgs>;\r\n  onHeaderRowMouseEnter: SlickEvent_<OnHeaderMouseEventArgs>;\r\n  onHeaderRowMouseLeave: SlickEvent_<OnHeaderMouseEventArgs>;\r\n  onPreHeaderContextMenu: SlickEvent_<OnPreHeaderContextMenuEventArgs>;\r\n  onPreHeaderClick: SlickEvent_<OnPreHeaderClickEventArgs>;\r\n  onKeyDown: SlickEvent_<OnKeyDownEventArgs>;\r\n  onMouseEnter: SlickEvent_<OnHeaderMouseEventArgs>;\r\n  onMouseLeave: SlickEvent_<OnHeaderMouseEventArgs>;\r\n  onRendered: SlickEvent_<OnRenderedEventArgs>;\r\n  onScroll: SlickEvent_<OnScrollEventArgs>;\r\n  onSelectedRowsChanged: SlickEvent_<OnSelectedRowsChangedEventArgs>;\r\n  onSetOptions: SlickEvent_<OnSetOptionsEventArgs>;\r\n  onActivateChangedOptions: SlickEvent_<OnActivateChangedOptionsEventArgs>;\r\n  onSort: SlickEvent_<SingleColumnSort | MultiColumnSort>;\r\n  onValidationError: SlickEvent_<OnValidationErrorEventArgs>;\r\n  onViewportChanged: SlickEvent_<{ grid: SlickGrid; }>;\r\n\r\n  // ---\r\n  // protected variables\r\n\r\n  // shared across all grids on the page\r\n  protected scrollbarDimensions?: { height: number; width: number; };\r\n  protected maxSupportedCssHeight!: number;  // browser's breaking point\r\n\r\n  protected canvas: HTMLCanvasElement | null = null;\r\n  protected canvas_context: CanvasRenderingContext2D | null = null;\r\n\r\n  // settings\r\n  protected _options!: O;\r\n  protected _defaults: BaseGridOption = {\r\n    alwaysShowVerticalScroll: false,\r\n    alwaysAllowHorizontalScroll: false,\r\n    explicitInitialization: false,\r\n    rowHeight: 25,\r\n    defaultColumnWidth: 80,\r\n    enableHtmlRendering: true,\r\n    enableAddRow: false,\r\n    leaveSpaceForNewRows: false,\r\n    editable: false,\r\n    autoEdit: true,\r\n    autoEditNewRow: true,\r\n    autoCommitEdit: false,\r\n    suppressActiveCellChangeOnEdit: false,\r\n    enableCellNavigation: true,\r\n    enableColumnReorder: true,\r\n    unorderableColumnCssClass: 'unorderable',\r\n    asyncEditorLoading: false,\r\n    asyncEditorLoadDelay: 100,\r\n    forceFitColumns: false,\r\n    enableAsyncPostRender: false,\r\n    asyncPostRenderDelay: 50,\r\n    enableAsyncPostRenderCleanup: false,\r\n    asyncPostRenderCleanupDelay: 40,\r\n    auto: false,\r\n    nonce: '',\r\n    editorLock: GlobalEditorLock,\r\n    showColumnHeader: true,\r\n    showHeaderRow: false,\r\n    headerRowHeight: 25,\r\n    createFooterRow: false,\r\n    showFooterRow: false,\r\n    footerRowHeight: 25,\r\n    createPreHeaderPanel: false,\r\n    createTopHeaderPanel: false,\r\n    showPreHeaderPanel: false,\r\n    showTopHeaderPanel: false,\r\n    preHeaderPanelHeight: 25,\r\n    showTopPanel: false,\r\n    topPanelHeight: 25,\r\n    preHeaderPanelWidth: 'auto', // mostly useful for Draggable Grouping dropzone to take full width\r\n    topHeaderPanelHeight: 25,\r\n    topHeaderPanelWidth: 'auto', // mostly useful for Draggable Grouping dropzone to take full width\r\n    formatterFactory: null,\r\n    editorFactory: null,\r\n    cellFlashingCssClass: 'flashing',\r\n    rowHighlightCssClass: 'highlight-animate',\r\n    rowHighlightDuration: 400,\r\n    selectedCellCssClass: 'selected',\r\n    multiSelect: true,\r\n    enableTextSelectionOnCells: false,\r\n    dataItemColumnValueExtractor: null,\r\n    frozenBottom: false,\r\n    frozenColumn: -1,\r\n    frozenRow: -1,\r\n    frozenRightViewportMinWidth: 100,\r\n    throwWhenFrozenNotAllViewable: false,\r\n    fullWidthRows: false,\r\n    multiColumnSort: false,\r\n    numberedMultiColumnSort: false,\r\n    tristateMultiColumnSort: false,\r\n    sortColNumberInSeparateSpan: false,\r\n    defaultFormatter: this.defaultFormatter,\r\n    forceSyncScrolling: false,\r\n    addNewRowCssClass: 'new-row',\r\n    preserveCopiedSelectionOnPaste: false,\r\n    preventDragFromKeys: ['ctrlKey', 'metaKey'],\r\n    showCellSelection: true,\r\n    viewportClass: undefined,\r\n    minRowBuffer: 3,\r\n    emulatePagingWhenScrolling: true, // when scrolling off bottom of viewport, place new row at top of viewport\r\n    editorCellNavOnLRKeys: false,\r\n    enableMouseWheelScrollHandler: true,\r\n    doPaging: true,\r\n    autosizeColsMode: GridAutosizeColsMode.LegacyOff,\r\n    autosizeColPaddingPx: 4,\r\n    rowTopOffsetRenderType: 'top',\r\n    scrollRenderThrottling: 10,\r\n    autosizeTextAvgToMWidthRatio: 0.75,\r\n    viewportSwitchToScrollModeWidthPercent: undefined,\r\n    viewportMinWidthPx: undefined,\r\n    viewportMaxWidthPx: undefined,\r\n    suppressCssChangesOnHiddenInit: false,\r\n    ffMaxSupportedCssHeight: 6000000,\r\n    maxSupportedCssHeight: 1000000000,\r\n    sanitizer: undefined,  // sanitize function, built in basic sanitizer is: Slick.RegexSanitizer(dirtyHtml)\r\n    logSanitizedHtml: false, // log to console when sanitised - recommend true for testing of dev and production\r\n    mixinDefaults: true,\r\n    shadowRoot: undefined\r\n  };\r\n\r\n  protected _columnDefaults = {\r\n    name: '',\r\n    headerCssClass: null,\r\n    defaultSortAsc: true,\r\n    focusable: true,\r\n    hidden: false,\r\n    minWidth: 30,\r\n    maxWidth: undefined,\r\n    rerenderOnResize: false,\r\n    reorderable: true,\r\n    resizable: true,\r\n    sortable: false,\r\n    selectable: true,\r\n  } as Partial<C>;\r\n\r\n  protected _columnAutosizeDefaults: AutoSize = {\r\n    ignoreHeaderText: false,\r\n    colValueArray: undefined,\r\n    allowAddlPercent: undefined,\r\n    formatterOverride: undefined,\r\n    autosizeMode: ColAutosizeMode.ContentIntelligent,\r\n    rowSelectionModeOnInit: undefined,\r\n    rowSelectionMode: RowSelectionMode.FirstNRows,\r\n    rowSelectionCount: 100,\r\n    valueFilterMode: ValueFilterMode.None,\r\n    widthEvalMode: WidthEvalMode.Auto,\r\n    sizeToRemaining: undefined,\r\n    widthPx: undefined,\r\n    contentSizePx: 0,\r\n    headerWidthPx: 0,\r\n    colDataTypeOf: undefined\r\n  };\r\n\r\n  protected _columnResizeTimer?: any;\r\n  protected _executionBlockTimer?: any;\r\n  protected _flashCellTimer?: any;\r\n  protected _highlightRowTimer?: any;\r\n\r\n  // scroller\r\n  protected th!: number;   // virtual height\r\n  protected h!: number;    // real scrollable height\r\n  protected ph!: number;   // page height\r\n  protected n!: number;    // number of pages\r\n  protected cj!: number;   // \"jumpiness\" coefficient\r\n\r\n  protected page = 0;       // current page\r\n  protected offset = 0;     // current page offset\r\n  protected vScrollDir = 1;\r\n  protected _bindingEventService = new BindingEventService();\r\n  protected initialized = false;\r\n  protected _container!: HTMLElement;\r\n  protected uid = `slickgrid_${Math.round(1000000 * Math.random())}`;\r\n  protected _focusSink!: HTMLDivElement;\r\n  protected _focusSink2!: HTMLDivElement;\r\n  protected _groupHeaders: HTMLDivElement[] = [];\r\n  protected _headerScroller: HTMLDivElement[] = [];\r\n  protected _headers: HTMLDivElement[] = [];\r\n  protected _headerRows!: HTMLDivElement[];\r\n  protected _headerRowScroller!: HTMLDivElement[];\r\n  protected _headerRowSpacerL!: HTMLDivElement;\r\n  protected _headerRowSpacerR!: HTMLDivElement;\r\n  protected _footerRow!: HTMLDivElement[];\r\n  protected _footerRowScroller!: HTMLDivElement[];\r\n  protected _footerRowSpacerL!: HTMLDivElement;\r\n  protected _footerRowSpacerR!: HTMLDivElement;\r\n  protected _preHeaderPanel!: HTMLDivElement;\r\n  protected _preHeaderPanelScroller!: HTMLDivElement;\r\n  protected _preHeaderPanelSpacer!: HTMLDivElement;\r\n  protected _preHeaderPanelR!: HTMLDivElement;\r\n  protected _preHeaderPanelScrollerR!: HTMLDivElement;\r\n  protected _preHeaderPanelSpacerR!: HTMLDivElement;\r\n  protected _topHeaderPanel!: HTMLDivElement;\r\n  protected _topHeaderPanelScroller!: HTMLDivElement;\r\n  protected _topHeaderPanelSpacer!: HTMLDivElement;\r\n  protected _topPanelScrollers!: HTMLDivElement[];\r\n  protected _topPanels!: HTMLDivElement[];\r\n  protected _viewport!: HTMLDivElement[];\r\n  protected _canvas!: HTMLDivElement[];\r\n  protected _style?: HTMLStyleElement;\r\n  protected _boundAncestors: HTMLElement[] = [];\r\n  protected stylesheet?: { cssRules: Array<{ selectorText: string; }>; rules: Array<{ selectorText: string; }>; } | null;\r\n  protected columnCssRulesL?: Array<{ selectorText: string; }>;\r\n  protected columnCssRulesR?: Array<{ selectorText: string; }>;\r\n  protected viewportH = 0;\r\n  protected viewportW = 0;\r\n  protected canvasWidth = 0;\r\n  protected canvasWidthL = 0;\r\n  protected canvasWidthR = 0;\r\n  protected headersWidth = 0;\r\n  protected headersWidthL = 0;\r\n  protected headersWidthR = 0;\r\n  protected viewportHasHScroll = false;\r\n  protected viewportHasVScroll = false;\r\n  protected headerColumnWidthDiff = 0;\r\n  protected headerColumnHeightDiff = 0; // border+padding\r\n  protected cellWidthDiff = 0;\r\n  protected cellHeightDiff = 0;\r\n  protected absoluteColumnMinWidth!: number;\r\n  protected hasFrozenRows = false;\r\n  protected frozenRowsHeight = 0;\r\n  protected actualFrozenRow = -1;\r\n  protected paneTopH = 0;\r\n  protected paneBottomH = 0;\r\n  protected viewportTopH = 0;\r\n  protected viewportBottomH = 0;\r\n  protected topPanelH = 0;\r\n  protected headerRowH = 0;\r\n  protected footerRowH = 0;\r\n\r\n  protected tabbingDirection = 1;\r\n  protected _activeCanvasNode!: HTMLDivElement;\r\n  protected _activeViewportNode!: HTMLDivElement;\r\n  protected activePosX!: number;\r\n  protected activeRow!: number;\r\n  protected activeCell!: number;\r\n  protected activeCellNode: HTMLDivElement | null = null;\r\n  protected currentEditor: Editor | null = null;\r\n  protected serializedEditorValue: any;\r\n  protected editController?: EditController;\r\n\r\n  protected rowsCache: Array<RowCaching> = {} as any;\r\n  protected renderedRows = 0;\r\n  protected numVisibleRows = 0;\r\n  protected prevScrollTop = 0;\r\n  protected scrollHeight = 0;\r\n  protected scrollTop = 0;\r\n  protected lastRenderedScrollTop = 0;\r\n  protected lastRenderedScrollLeft = 0;\r\n  protected prevScrollLeft = 0;\r\n  protected scrollLeft = 0;\r\n\r\n  protected selectionModel?: SelectionModel;\r\n  protected selectedRows: number[] = [];\r\n\r\n  protected plugins: SlickPlugin[] = [];\r\n  protected cellCssClasses: CssStyleHash = {};\r\n\r\n  protected columnsById: Record<string, number> = {};\r\n  protected sortColumns: ColumnSort[] = [];\r\n  protected columnPosLeft: number[] = [];\r\n  protected columnPosRight: number[] = [];\r\n\r\n  protected pagingActive = false;\r\n  protected pagingIsLastPage = false;\r\n\r\n  protected scrollThrottle!: { enqueue: () => void; dequeue: () => void; };\r\n\r\n  // async call handles\r\n  protected h_editorLoader: any = null;\r\n  protected h_render = null;\r\n  protected h_postrender: any = null;\r\n  protected h_postrenderCleanup: any = null;\r\n  protected postProcessedRows: any = {};\r\n  protected postProcessToRow: number = null as any;\r\n  protected postProcessFromRow: number = null as any;\r\n  protected postProcessedCleanupQueue: Array<{\r\n    actionType: string;\r\n    groupId: number;\r\n    node: HTMLElement | HTMLElement[];\r\n    columnIdx?: number;\r\n    rowIdx?: number;\r\n  }> = [];\r\n  protected postProcessgroupId = 0;\r\n\r\n  // perf counters\r\n  protected counter_rows_rendered = 0;\r\n  protected counter_rows_removed = 0;\r\n\r\n  protected _paneHeaderL!: HTMLDivElement;\r\n  protected _paneHeaderR!: HTMLDivElement;\r\n  protected _paneTopL!: HTMLDivElement;\r\n  protected _paneTopR!: HTMLDivElement;\r\n  protected _paneBottomL!: HTMLDivElement;\r\n  protected _paneBottomR!: HTMLDivElement;\r\n  protected _headerScrollerL!: HTMLDivElement;\r\n  protected _headerScrollerR!: HTMLDivElement;\r\n  protected _headerL!: HTMLDivElement;\r\n  protected _headerR!: HTMLDivElement;\r\n  protected _groupHeadersL!: HTMLDivElement;\r\n  protected _groupHeadersR!: HTMLDivElement;\r\n  protected _headerRowScrollerL!: HTMLDivElement;\r\n  protected _headerRowScrollerR!: HTMLDivElement;\r\n  protected _footerRowScrollerL!: HTMLDivElement;\r\n  protected _footerRowScrollerR!: HTMLDivElement;\r\n  protected _headerRowL!: HTMLDivElement;\r\n  protected _headerRowR!: HTMLDivElement;\r\n  protected _footerRowL!: HTMLDivElement;\r\n  protected _footerRowR!: HTMLDivElement;\r\n  protected _topPanelScrollerL!: HTMLDivElement;\r\n  protected _topPanelScrollerR!: HTMLDivElement;\r\n  protected _topPanelL!: HTMLDivElement;\r\n  protected _topPanelR!: HTMLDivElement;\r\n  protected _viewportTopL!: HTMLDivElement;\r\n  protected _viewportTopR!: HTMLDivElement;\r\n  protected _viewportBottomL!: HTMLDivElement;\r\n  protected _viewportBottomR!: HTMLDivElement;\r\n  protected _canvasTopL!: HTMLDivElement;\r\n  protected _canvasTopR!: HTMLDivElement;\r\n  protected _canvasBottomL!: HTMLDivElement;\r\n  protected _canvasBottomR!: HTMLDivElement;\r\n  protected _viewportScrollContainerX!: HTMLDivElement;\r\n  protected _viewportScrollContainerY!: HTMLDivElement;\r\n  protected _headerScrollContainer!: HTMLDivElement;\r\n  protected _headerRowScrollContainer!: HTMLDivElement;\r\n  protected _footerRowScrollContainer!: HTMLDivElement;\r\n\r\n  // store css attributes if display:none is active in container or parent\r\n  protected cssShow = { position: 'absolute', visibility: 'hidden', display: 'block' };\r\n  protected _hiddenParents: HTMLElement[] = [];\r\n  protected oldProps: Array<Partial<CSSStyleDeclaration>> = [];\r\n  protected enforceFrozenRowHeightRecalc = false;\r\n  protected columnResizeDragging = false;\r\n  protected slickDraggableInstance: InteractionBase | null = null;\r\n  protected slickMouseWheelInstances: Array<InteractionBase> = [];\r\n  protected slickResizableInstances: Array<InteractionBase> = [];\r\n  protected sortableSideLeftInstance?: SortableInstance;\r\n  protected sortableSideRightInstance?: SortableInstance;\r\n  protected logMessageCount = 0;\r\n  protected logMessageMaxCount = 30;\r\n  protected _pubSubService?: BasePubSub;\r\n\r\n  /**\r\n   * Creates a new instance of the grid.\r\n   * @class SlickGrid\r\n   * @constructor\r\n   * @param {Node} container - Container node to create the grid in.\r\n   * @param {Array|Object} data - An array of objects for databinding or an external DataView.\r\n   * @param {Array<C>} columns - An array of column definitions.\r\n   * @param {Object} [options] - Grid Options\r\n   * @param {Object} [externalPubSub] - optional External PubSub Service to use by SlickEvent\r\n   **/\r\n  constructor(protected readonly container: HTMLElement | string, protected data: CustomDataView<TData> | TData[], protected columns: C[], options: Partial<O>, protected readonly externalPubSub?: BasePubSub) {\r\n    this._container = typeof this.container === 'string'\r\n      ? document.querySelector(this.container) as HTMLDivElement\r\n      : this.container;\r\n\r\n    if (!this._container) {\r\n      throw new Error(`SlickGrid requires a valid container, ${this.container} does not exist in the DOM.`);\r\n    }\r\n\r\n    this._pubSubService = externalPubSub;\r\n    this.onActiveCellChanged = new SlickEvent<OnActiveCellChangedEventArgs>('onActiveCellChanged', externalPubSub);\r\n    this.onActiveCellPositionChanged = new SlickEvent<{ grid: SlickGrid; }>('onActiveCellPositionChanged', externalPubSub);\r\n    this.onAddNewRow = new SlickEvent<OnAddNewRowEventArgs>('onAddNewRow', externalPubSub);\r\n    this.onAutosizeColumns = new SlickEvent<OnAutosizeColumnsEventArgs>('onAutosizeColumns', externalPubSub);\r\n    this.onBeforeAppendCell = new SlickEvent<OnBeforeAppendCellEventArgs>('onBeforeAppendCell', externalPubSub);\r\n    this.onBeforeCellEditorDestroy = new SlickEvent<OnBeforeCellEditorDestroyEventArgs>('onBeforeCellEditorDestroy', externalPubSub);\r\n    this.onBeforeColumnsResize = new SlickEvent<OnBeforeColumnsResizeEventArgs>('onBeforeColumnsResize', externalPubSub);\r\n    this.onBeforeDestroy = new SlickEvent<{ grid: SlickGrid; }>('onBeforeDestroy', externalPubSub);\r\n    this.onBeforeEditCell = new SlickEvent<OnBeforeEditCellEventArgs>('onBeforeEditCell', externalPubSub);\r\n    this.onBeforeFooterRowCellDestroy = new SlickEvent<OnBeforeFooterRowCellDestroyEventArgs>('onBeforeFooterRowCellDestroy', externalPubSub);\r\n    this.onBeforeHeaderCellDestroy = new SlickEvent<OnBeforeHeaderCellDestroyEventArgs>('onBeforeHeaderCellDestroy', externalPubSub);\r\n    this.onBeforeHeaderRowCellDestroy = new SlickEvent<OnBeforeHeaderRowCellDestroyEventArgs>('onBeforeHeaderRowCellDestroy', externalPubSub);\r\n    this.onBeforeSetColumns = new SlickEvent<OnBeforeSetColumnsEventArgs>('onBeforeSetColumns', externalPubSub);\r\n    this.onBeforeSort = new SlickEvent<SingleColumnSort | MultiColumnSort>('onBeforeSort', externalPubSub);\r\n    this.onBeforeUpdateColumns = new SlickEvent<OnBeforeUpdateColumnsEventArgs>('onBeforeUpdateColumns', externalPubSub);\r\n    this.onCellChange = new SlickEvent<OnCellChangeEventArgs>('onCellChange', externalPubSub);\r\n    this.onCellCssStylesChanged = new SlickEvent<OnCellCssStylesChangedEventArgs>('onCellCssStylesChanged', externalPubSub);\r\n    this.onClick = new SlickEvent<OnClickEventArgs>('onClick', externalPubSub);\r\n    this.onColumnsReordered = new SlickEvent<OnColumnsReorderedEventArgs>('onColumnsReordered', externalPubSub);\r\n    this.onColumnsDrag = new SlickEvent<OnColumnsDragEventArgs>('onColumnsDrag', externalPubSub);\r\n    this.onColumnsResized = new SlickEvent<OnColumnsResizedEventArgs>('onColumnsResized', externalPubSub);\r\n    this.onColumnsResizeDblClick = new SlickEvent<OnColumnsResizeDblClickEventArgs>('onColumnsResizeDblClick', externalPubSub);\r\n    this.onCompositeEditorChange = new SlickEvent<OnCompositeEditorChangeEventArgs>('onCompositeEditorChange', externalPubSub);\r\n    this.onContextMenu = new SlickEvent<MenuCommandItemCallbackArgs>('onContextMenu', externalPubSub);\r\n    this.onDrag = new SlickEvent<DragRowMove>('onDrag', externalPubSub);\r\n    this.onDblClick = new SlickEvent<OnDblClickEventArgs>('onDblClick', externalPubSub);\r\n    this.onDragInit = new SlickEvent<DragRowMove>('onDragInit', externalPubSub);\r\n    this.onDragStart = new SlickEvent<DragRowMove>('onDragStart', externalPubSub);\r\n    this.onDragEnd = new SlickEvent<DragRowMove>('onDragEnd', externalPubSub);\r\n    this.onFooterClick = new SlickEvent<OnFooterClickEventArgs>('onFooterClick', externalPubSub);\r\n    this.onFooterContextMenu = new SlickEvent<OnFooterContextMenuEventArgs>('onFooterContextMenu', externalPubSub);\r\n    this.onFooterRowCellRendered = new SlickEvent<OnFooterRowCellRenderedEventArgs>('onFooterRowCellRendered', externalPubSub);\r\n    this.onHeaderCellRendered = new SlickEvent<OnHeaderCellRenderedEventArgs>('onHeaderCellRendered', externalPubSub);\r\n    this.onHeaderClick = new SlickEvent<OnHeaderClickEventArgs>('onHeaderClick', externalPubSub);\r\n    this.onHeaderContextMenu = new SlickEvent<OnHeaderContextMenuEventArgs>('onHeaderContextMenu', externalPubSub);\r\n    this.onHeaderMouseEnter = new SlickEvent<OnHeaderMouseEventArgs>('onHeaderMouseEnter', externalPubSub);\r\n    this.onHeaderMouseLeave = new SlickEvent<OnHeaderMouseEventArgs>('onHeaderMouseLeave', externalPubSub);\r\n    this.onHeaderRowCellRendered = new SlickEvent<OnHeaderRowCellRenderedEventArgs>('onHeaderRowCellRendered', externalPubSub);\r\n    this.onHeaderRowMouseEnter = new SlickEvent<OnHeaderMouseEventArgs>('onHeaderRowMouseEnter', externalPubSub);\r\n    this.onHeaderRowMouseLeave = new SlickEvent<OnHeaderMouseEventArgs>('onHeaderRowMouseLeave', externalPubSub);\r\n    this.onPreHeaderClick = new SlickEvent<OnPreHeaderClickEventArgs>('onPreHeaderClick', externalPubSub);\r\n    this.onPreHeaderContextMenu = new SlickEvent<OnPreHeaderContextMenuEventArgs>('onPreHeaderContextMenu', externalPubSub);\r\n    this.onKeyDown = new SlickEvent<OnKeyDownEventArgs>('onKeyDown', externalPubSub);\r\n    this.onMouseEnter = new SlickEvent<OnHeaderMouseEventArgs>('onMouseEnter', externalPubSub);\r\n    this.onMouseLeave = new SlickEvent<OnHeaderMouseEventArgs>('onMouseLeave', externalPubSub);\r\n    this.onRendered = new SlickEvent<OnRenderedEventArgs>('onRendered', externalPubSub);\r\n    this.onScroll = new SlickEvent<OnScrollEventArgs>('onScroll', externalPubSub);\r\n    this.onSelectedRowsChanged = new SlickEvent<OnSelectedRowsChangedEventArgs>('onSelectedRowsChanged', externalPubSub);\r\n    this.onSetOptions = new SlickEvent<OnSetOptionsEventArgs>('onSetOptions', externalPubSub);\r\n    this.onActivateChangedOptions = new SlickEvent<OnActivateChangedOptionsEventArgs>('onActivateChangedOptions', externalPubSub);\r\n    this.onSort = new SlickEvent<SingleColumnSort | MultiColumnSort>('onSort', externalPubSub);\r\n    this.onValidationError = new SlickEvent<OnValidationErrorEventArgs>('onValidationError', externalPubSub);\r\n    this.onViewportChanged = new SlickEvent<{ grid: SlickGrid; }>('onViewportChanged', externalPubSub);\r\n\r\n    this.initialize(options);\r\n  }\r\n\r\n  //////////////////////////////////////////////////////////////////////////////////////////////\r\n  // Initialization\r\n\r\n  /** Initializes the grid. */\r\n  init() {\r\n    this.finishInitialization();\r\n  }\r\n\r\n  /**\r\n   * Apply HTML code by 3 different ways depending on what is provided as input and what options are enabled.\r\n   * 1. value is an HTMLElement or DocumentFragment, then first empty the target and simply append the HTML to the target element.\r\n   * 2. value is string and `enableHtmlRendering` is enabled, then use `target.innerHTML = value;`\r\n   * 3. value is string and `enableHtmlRendering` is disabled, then use `target.textContent = value;`\r\n   * @param target - target element to apply to\r\n   * @param val - input value can be either a string or an HTMLElement\r\n   * @param options -\r\n   *   `emptyTarget`, defaults to true, will empty the target.\r\n   *   `skipEmptyReassignment`, defaults to true, when enabled it will not try to reapply an empty value when the target is already empty\r\n   */\r\n  applyHtmlCode(target: HTMLElement, val: string | HTMLElement | DocumentFragment, options?: { emptyTarget?: boolean; skipEmptyReassignment?: boolean; }) {\r\n    if (target) {\r\n      if (val instanceof HTMLElement || val instanceof DocumentFragment) {\r\n        // first empty target and then append new HTML element\r\n        const emptyTarget = options?.emptyTarget !== false;\r\n        if (emptyTarget) {\r\n          Utils.emptyElement(target);\r\n        }\r\n        target.appendChild(val);\r\n      } else {\r\n        // when it's already empty and we try to reassign empty, it's probably ok to skip the assignment\r\n        const skipEmptyReassignment = options?.skipEmptyReassignment !== false;\r\n        if (skipEmptyReassignment && !Utils.isDefined(val) && !target.innerHTML) {\r\n          return;\r\n        }\r\n\r\n        let sanitizedText = val;\r\n        if (typeof sanitizedText === 'number' || typeof sanitizedText === 'boolean') {\r\n          target.textContent = sanitizedText;\r\n        } else {\r\n          sanitizedText = this.sanitizeHtmlString(val as string);\r\n\r\n          // apply HTML when enableHtmlRendering is enabled but make sure we do have a value (without a value, it will simply use `textContent` to clear text content)\r\n          if (this._options.enableHtmlRendering && sanitizedText) {\r\n            target.innerHTML = sanitizedText;\r\n          } else {\r\n            target.textContent = sanitizedText;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  protected initialize(options: Partial<O>) {\r\n    // calculate these only once and share between grid instances\r\n    if (options?.mixinDefaults) {\r\n      // use provided options and then assign defaults\r\n      if (!this._options) { this._options = options as O; }\r\n      Utils.applyDefaults(this._options, this._defaults);\r\n    } else {\r\n      this._options = Utils.extend<O>(true, {}, this._defaults, options);\r\n    }\r\n    this.scrollThrottle = this.actionThrottle(this.render.bind(this), this._options.scrollRenderThrottling as number);\r\n    this.maxSupportedCssHeight = this.maxSupportedCssHeight || this.getMaxSupportedCssHeight();\r\n    this.validateAndEnforceOptions();\r\n    this._columnDefaults.width = this._options.defaultColumnWidth;\r\n\r\n    if (!this._options.suppressCssChangesOnHiddenInit) {\r\n      this.cacheCssForHiddenInit();\r\n    }\r\n\r\n    this.updateColumnProps();\r\n\r\n    // validate loaded JavaScript modules against requested options\r\n    if (this._options.enableColumnReorder && (!Sortable || !Sortable.create)) {\r\n      throw new Error('SlickGrid requires Sortable.js module to be loaded');\r\n    }\r\n\r\n    this.editController = {\r\n      commitCurrentEdit: this.commitCurrentEdit.bind(this),\r\n      cancelCurrentEdit: this.cancelCurrentEdit.bind(this),\r\n    };\r\n\r\n    Utils.emptyElement(this._container);\r\n    this._container.style.outline = String(0);\r\n    this._container.classList.add(this.uid);\r\n    this._container.classList.add('ui-widget');\r\n    this._container.setAttribute('role', 'grid');\r\n\r\n    const containerStyles = window.getComputedStyle(this._container);\r\n    if (!(/relative|absolute|fixed/).test(containerStyles.position)) {\r\n      this._container.style.position = 'relative';\r\n    }\r\n\r\n    this._focusSink = Utils.createDomElement('div', { tabIndex: 0, style: { position: 'fixed', width: '0px', height: '0px', top: '0px', left: '0px', outline: '0px' } }, this._container);\r\n\r\n    if (this._options.createTopHeaderPanel) {\r\n      this._topHeaderPanelScroller = Utils.createDomElement('div', { className: 'slick-topheader-panel slick-state-default', style: { overflow: 'hidden', position: 'relative' } }, this._container);\r\n      this._topHeaderPanelScroller.appendChild(document.createElement('div'));\r\n      this._topHeaderPanel = Utils.createDomElement('div', null, this._topHeaderPanelScroller);\r\n      this._topHeaderPanelSpacer = Utils.createDomElement('div', { style: { display: 'block', height: '1px', position: 'absolute', top: '0px', left: '0px' } }, this._topHeaderPanelScroller);\r\n\r\n      if (!this._options.showTopHeaderPanel) {\r\n        Utils.hide(this._topHeaderPanelScroller);\r\n      }\r\n    }\r\n\r\n    // Containers used for scrolling frozen columns and rows\r\n    this._paneHeaderL = Utils.createDomElement('div', { className: 'slick-pane slick-pane-header slick-pane-left', tabIndex: 0 }, this._container);\r\n    this._paneHeaderR = Utils.createDomElement('div', { className: 'slick-pane slick-pane-header slick-pane-right', tabIndex: 0 }, this._container);\r\n    this._paneTopL = Utils.createDomElement('div', { className: 'slick-pane slick-pane-top slick-pane-left', tabIndex: 0 }, this._container);\r\n    this._paneTopR = Utils.createDomElement('div', { className: 'slick-pane slick-pane-top slick-pane-right', tabIndex: 0 }, this._container);\r\n    this._paneBottomL = Utils.createDomElement('div', { className: 'slick-pane slick-pane-bottom slick-pane-left', tabIndex: 0 }, this._container);\r\n    this._paneBottomR = Utils.createDomElement('div', { className: 'slick-pane slick-pane-bottom slick-pane-right', tabIndex: 0 }, this._container);\r\n\r\n    if (this._options.createPreHeaderPanel) {\r\n      this._preHeaderPanelScroller = Utils.createDomElement('div', { className: 'slick-preheader-panel ui-state-default slick-state-default', style: { overflow: 'hidden', position: 'relative' } }, this._paneHeaderL);\r\n      this._preHeaderPanelScroller.appendChild(document.createElement('div'));\r\n      this._preHeaderPanel = Utils.createDomElement('div', null, this._preHeaderPanelScroller);\r\n      this._preHeaderPanelSpacer = Utils.createDomElement('div', { style: { display: 'block', height: '1px', position: 'absolute', top: '0px', left: '0px' } }, this._preHeaderPanelScroller);\r\n\r\n      this._preHeaderPanelScrollerR = Utils.createDomElement('div', { className: 'slick-preheader-panel ui-state-default slick-state-default', style: { overflow: 'hidden', position: 'relative' } }, this._paneHeaderR);\r\n      this._preHeaderPanelR = Utils.createDomElement('div', null, this._preHeaderPanelScrollerR);\r\n      this._preHeaderPanelSpacerR = Utils.createDomElement('div', { style: { display: 'block', height: '1px', position: 'absolute', top: '0px', left: '0px' } }, this._preHeaderPanelScrollerR);\r\n\r\n      if (!this._options.showPreHeaderPanel) {\r\n        Utils.hide(this._preHeaderPanelScroller);\r\n        Utils.hide(this._preHeaderPanelScrollerR);\r\n      }\r\n    }\r\n\r\n    // Append the header scroller containers\r\n    this._headerScrollerL = Utils.createDomElement('div', { className: 'slick-header ui-state-default slick-state-default slick-header-left' }, this._paneHeaderL);\r\n    this._headerScrollerR = Utils.createDomElement('div', { className: 'slick-header ui-state-default slick-state-default slick-header-right' }, this._paneHeaderR);\r\n\r\n    // Cache the header scroller containers\r\n    this._headerScroller.push(this._headerScrollerL);\r\n    this._headerScroller.push(this._headerScrollerR);\r\n\r\n    // Append the columnn containers to the headers\r\n    this._headerL = Utils.createDomElement('div', { className: 'slick-header-columns slick-header-columns-left', role: 'row', style: { left: '-1000px' } }, this._headerScrollerL);\r\n    this._headerR = Utils.createDomElement('div', { className: 'slick-header-columns slick-header-columns-right', role: 'row', style: { left: '-1000px' } }, this._headerScrollerR);\r\n\r\n    // Cache the header columns\r\n    this._headers = [this._headerL, this._headerR];\r\n\r\n    this._headerRowScrollerL = Utils.createDomElement('div', { className: 'slick-headerrow ui-state-default slick-state-default' }, this._paneTopL);\r\n    this._headerRowScrollerR = Utils.createDomElement('div', { className: 'slick-headerrow ui-state-default slick-state-default' }, this._paneTopR);\r\n\r\n    this._headerRowScroller = [this._headerRowScrollerL, this._headerRowScrollerR];\r\n\r\n    this._headerRowSpacerL = Utils.createDomElement('div', { style: { display: 'block', height: '1px', position: 'absolute', top: '0px', left: '0px' } }, this._headerRowScrollerL);\r\n    this._headerRowSpacerR = Utils.createDomElement('div', { style: { display: 'block', height: '1px', position: 'absolute', top: '0px', left: '0px' } }, this._headerRowScrollerR);\r\n\r\n    this._headerRowL = Utils.createDomElement('div', { className: 'slick-headerrow-columns slick-headerrow-columns-left' }, this._headerRowScrollerL);\r\n    this._headerRowR = Utils.createDomElement('div', { className: 'slick-headerrow-columns slick-headerrow-columns-right' }, this._headerRowScrollerR);\r\n\r\n    this._headerRows = [this._headerRowL, this._headerRowR];\r\n\r\n    // Append the top panel scroller\r\n    this._topPanelScrollerL = Utils.createDomElement('div', { className: 'slick-top-panel-scroller ui-state-default slick-state-default' }, this._paneTopL);\r\n    this._topPanelScrollerR = Utils.createDomElement('div', { className: 'slick-top-panel-scroller ui-state-default slick-state-default' }, this._paneTopR);\r\n\r\n    this._topPanelScrollers = [this._topPanelScrollerL, this._topPanelScrollerR];\r\n\r\n    // Append the top panel\r\n    this._topPanelL = Utils.createDomElement('div', { className: 'slick-top-panel', style: { width: '10000px' } }, this._topPanelScrollerL);\r\n    this._topPanelR = Utils.createDomElement('div', { className: 'slick-top-panel', style: { width: '10000px' } }, this._topPanelScrollerR);\r\n\r\n    this._topPanels = [this._topPanelL, this._topPanelR];\r\n\r\n    if (!this._options.showColumnHeader) {\r\n      this._headerScroller.forEach((el) => {\r\n        Utils.hide(el);\r\n      });\r\n    }\r\n\r\n    if (!this._options.showTopPanel) {\r\n      this._topPanelScrollers.forEach((scroller) => {\r\n        Utils.hide(scroller);\r\n      });\r\n    }\r\n\r\n    if (!this._options.showHeaderRow) {\r\n      this._headerRowScroller.forEach((scroller) => {\r\n        Utils.hide(scroller);\r\n      });\r\n    }\r\n\r\n    // Append the viewport containers\r\n    this._viewportTopL = Utils.createDomElement('div', { className: 'slick-viewport slick-viewport-top slick-viewport-left', tabIndex: 0 }, this._paneTopL);\r\n    this._viewportTopR = Utils.createDomElement('div', { className: 'slick-viewport slick-viewport-top slick-viewport-right', tabIndex: 0 }, this._paneTopR);\r\n    this._viewportBottomL = Utils.createDomElement('div', { className: 'slick-viewport slick-viewport-bottom slick-viewport-left', tabIndex: 0 }, this._paneBottomL);\r\n    this._viewportBottomR = Utils.createDomElement('div', { className: 'slick-viewport slick-viewport-bottom slick-viewport-right', tabIndex: 0 }, this._paneBottomR);\r\n\r\n    // Cache the viewports\r\n    this._viewport = [this._viewportTopL, this._viewportTopR, this._viewportBottomL, this._viewportBottomR];\r\n    if (this._options.viewportClass) {\r\n      this._viewport.forEach((view) => {\r\n        view.classList.add(...Utils.classNameToList((this._options.viewportClass)));\r\n      });\r\n    }\r\n\r\n    // Default the active viewport to the top left\r\n    this._activeViewportNode = this._viewportTopL;\r\n\r\n    // Append the canvas containers\r\n    this._canvasTopL = Utils.createDomElement('div', { className: 'grid-canvas grid-canvas-top grid-canvas-left', tabIndex: 0 }, this._viewportTopL);\r\n    this._canvasTopR = Utils.createDomElement('div', { className: 'grid-canvas grid-canvas-top grid-canvas-right', tabIndex: 0 }, this._viewportTopR);\r\n    this._canvasBottomL = Utils.createDomElement('div', { className: 'grid-canvas grid-canvas-bottom grid-canvas-left', tabIndex: 0 }, this._viewportBottomL);\r\n    this._canvasBottomR = Utils.createDomElement('div', { className: 'grid-canvas grid-canvas-bottom grid-canvas-right', tabIndex: 0 }, this._viewportBottomR);\r\n\r\n    // Cache the canvases\r\n    this._canvas = [this._canvasTopL, this._canvasTopR, this._canvasBottomL, this._canvasBottomR];\r\n\r\n    this.scrollbarDimensions = this.scrollbarDimensions || this.measureScrollbar();\r\n\r\n    // Default the active canvas to the top left\r\n    this._activeCanvasNode = this._canvasTopL;\r\n\r\n    // top-header\r\n    if (this._topHeaderPanelSpacer) {\r\n      Utils.width(this._topHeaderPanelSpacer, this.getCanvasWidth() + this.scrollbarDimensions.width);\r\n    }\r\n\r\n    // pre-header\r\n    if (this._preHeaderPanelSpacer) {\r\n      Utils.width(this._preHeaderPanelSpacer, this.getCanvasWidth() + this.scrollbarDimensions.width);\r\n    }\r\n\r\n    this._headers.forEach((el) => {\r\n      Utils.width(el, this.getHeadersWidth());\r\n    });\r\n\r\n    Utils.width(this._headerRowSpacerL, this.getCanvasWidth() + this.scrollbarDimensions.width);\r\n    Utils.width(this._headerRowSpacerR, this.getCanvasWidth() + this.scrollbarDimensions.width);\r\n\r\n    // footer Row\r\n    if (this._options.createFooterRow) {\r\n      this._footerRowScrollerR = Utils.createDomElement('div', { className: 'slick-footerrow ui-state-default slick-state-default' }, this._paneTopR);\r\n      this._footerRowScrollerL = Utils.createDomElement('div', { className: 'slick-footerrow ui-state-default slick-state-default' }, this._paneTopL);\r\n\r\n      this._footerRowScroller = [this._footerRowScrollerL, this._footerRowScrollerR];\r\n\r\n      this._footerRowSpacerL = Utils.createDomElement('div', { style: { display: 'block', height: '1px', position: 'absolute', top: '0px', left: '0px' } }, this._footerRowScrollerL);\r\n      Utils.width(this._footerRowSpacerL, this.getCanvasWidth() + this.scrollbarDimensions.width);\r\n      this._footerRowSpacerR = Utils.createDomElement('div', { style: { display: 'block', height: '1px', position: 'absolute', top: '0px', left: '0px' } }, this._footerRowScrollerR);\r\n      Utils.width(this._footerRowSpacerR, this.getCanvasWidth() + this.scrollbarDimensions.width);\r\n\r\n      this._footerRowL = Utils.createDomElement('div', { className: 'slick-footerrow-columns slick-footerrow-columns-left' }, this._footerRowScrollerL);\r\n      this._footerRowR = Utils.createDomElement('div', { className: 'slick-footerrow-columns slick-footerrow-columns-right' }, this._footerRowScrollerR);\r\n\r\n      this._footerRow = [this._footerRowL, this._footerRowR];\r\n\r\n      if (!this._options.showFooterRow) {\r\n        this._footerRowScroller.forEach((scroller) => {\r\n          Utils.hide(scroller);\r\n        });\r\n      }\r\n    }\r\n\r\n    this._focusSink2 = this._focusSink.cloneNode(true) as HTMLDivElement;\r\n    this._container.appendChild(this._focusSink2);\r\n\r\n    if (!this._options.explicitInitialization) {\r\n      this.finishInitialization();\r\n    }\r\n  }\r\n\r\n  protected finishInitialization() {\r\n    if (!this.initialized) {\r\n      this.initialized = true;\r\n\r\n      this.getViewportWidth();\r\n      this.getViewportHeight();\r\n\r\n      // header columns and cells may have different padding/border skewing width calculations (box-sizing, hello?)\r\n      // calculate the diff so we can set consistent sizes\r\n      this.measureCellPaddingAndBorder();\r\n\r\n      // for usability reasons, all text selection in SlickGrid is disabled\r\n      // with the exception of input and textarea elements (selection must\r\n      // be enabled there so that editors work as expected); note that\r\n      // selection in grid cells (grid body) is already unavailable in\r\n      // all browsers except IE\r\n      this.disableSelection(this._headers); // disable all text selection in header (including input and textarea)\r\n\r\n      if (!this._options.enableTextSelectionOnCells) {\r\n        // disable text selection in grid cells except in input and textarea elements\r\n        // (this is IE-specific, because selectstart event will only fire in IE)\r\n        this._viewport.forEach((view) => {\r\n          this._bindingEventService.bind(view, 'selectstart', (event) => {\r\n            if (event.target instanceof HTMLInputElement || event.target instanceof HTMLTextAreaElement) {\r\n              return;\r\n            }\r\n          });\r\n        });\r\n      }\r\n\r\n      this.setFrozenOptions();\r\n      this.setPaneVisibility();\r\n      this.setScroller();\r\n      this.setOverflow();\r\n\r\n      this.updateColumnCaches();\r\n      this.createColumnHeaders();\r\n      this.createColumnFooter();\r\n      this.setupColumnSort();\r\n      this.createCssRules();\r\n      this.resizeCanvas();\r\n      this.bindAncestorScrollEvents();\r\n\r\n      this._bindingEventService.bind(this._container, 'resize', this.resizeCanvas.bind(this));\r\n      this._viewport.forEach((view) => {\r\n        this._bindingEventService.bind(view, 'scroll', this.handleScroll.bind(this));\r\n      });\r\n\r\n      if (this._options.enableMouseWheelScrollHandler) {\r\n        this._viewport.forEach((view) => {\r\n          this.slickMouseWheelInstances.push(MouseWheel({\r\n            element: view,\r\n            onMouseWheel: this.handleMouseWheel.bind(this)\r\n          }));\r\n        });\r\n      }\r\n\r\n      this._headerScroller.forEach((el) => {\r\n        this._bindingEventService.bind(el, 'contextmenu', this.handleHeaderContextMenu.bind(this) as EventListener);\r\n        this._bindingEventService.bind(el, 'click', this.handleHeaderClick.bind(this) as EventListener);\r\n      });\r\n\r\n      this._headerRowScroller.forEach((scroller) => {\r\n        this._bindingEventService.bind(scroller, 'scroll', this.handleHeaderRowScroll.bind(this) as EventListener);\r\n      });\r\n\r\n      if (this._options.createFooterRow) {\r\n        this._footerRow.forEach((footer) => {\r\n          this._bindingEventService.bind(footer, 'contextmenu', this.handleFooterContextMenu.bind(this) as EventListener);\r\n          this._bindingEventService.bind(footer, 'click', this.handleFooterClick.bind(this) as EventListener);\r\n        });\r\n\r\n        this._footerRowScroller.forEach((scroller) => {\r\n          this._bindingEventService.bind(scroller, 'scroll', this.handleFooterRowScroll.bind(this) as EventListener);\r\n        });\r\n      }\r\n\r\n      if (this._options.createTopHeaderPanel) {\r\n        this._bindingEventService.bind(this._topHeaderPanelScroller, 'scroll', this.handleTopHeaderPanelScroll.bind(this) as EventListener);\r\n      }\r\n\r\n      if (this._options.createPreHeaderPanel) {\r\n        this._bindingEventService.bind(this._preHeaderPanelScroller, 'scroll', this.handlePreHeaderPanelScroll.bind(this) as EventListener);\r\n        this._bindingEventService.bind(this._preHeaderPanelScroller, 'contextmenu', this.handlePreHeaderContextMenu.bind(this) as EventListener);\r\n        this._bindingEventService.bind(this._preHeaderPanelScrollerR, 'contextmenu', this.handlePreHeaderContextMenu.bind(this) as EventListener);\r\n        this._bindingEventService.bind(this._preHeaderPanelScroller, 'click', this.handlePreHeaderClick.bind(this) as EventListener);\r\n        this._bindingEventService.bind(this._preHeaderPanelScrollerR, 'click', this.handlePreHeaderClick.bind(this) as EventListener);\r\n      }\r\n\r\n      this._bindingEventService.bind(this._focusSink, 'keydown', this.handleKeyDown.bind(this) as EventListener);\r\n      this._bindingEventService.bind(this._focusSink2, 'keydown', this.handleKeyDown.bind(this) as EventListener);\r\n\r\n      this._canvas.forEach((element) => {\r\n        this._bindingEventService.bind(element, 'keydown', this.handleKeyDown.bind(this) as EventListener);\r\n        this._bindingEventService.bind(element, 'click', this.handleClick.bind(this) as EventListener);\r\n        this._bindingEventService.bind(element, 'dblclick', this.handleDblClick.bind(this) as EventListener);\r\n        this._bindingEventService.bind(element, 'contextmenu', this.handleContextMenu.bind(this) as EventListener);\r\n        this._bindingEventService.bind(element, 'mouseover', this.handleCellMouseOver.bind(this) as EventListener);\r\n        this._bindingEventService.bind(element, 'mouseout', this.handleCellMouseOut.bind(this) as EventListener);\r\n      });\r\n\r\n      if (Draggable) {\r\n        this.slickDraggableInstance = Draggable({\r\n          containerElement: this._container,\r\n          allowDragFrom: 'div.slick-cell',\r\n          // the slick cell parent must always contain `.dnd` and/or `.cell-reorder` class to be identified as draggable\r\n          allowDragFromClosest: 'div.slick-cell.dnd, div.slick-cell.cell-reorder',\r\n          preventDragFromKeys: this._options.preventDragFromKeys,\r\n          onDragInit: this.handleDragInit.bind(this),\r\n          onDragStart: this.handleDragStart.bind(this),\r\n          onDrag: this.handleDrag.bind(this),\r\n          onDragEnd: this.handleDragEnd.bind(this)\r\n        });\r\n      }\r\n\r\n      if (!this._options.suppressCssChangesOnHiddenInit) {\r\n        this.restoreCssFromHiddenInit();\r\n      }\r\n    }\r\n  }\r\n\r\n  /** handles \"display:none\" on container or container parents, related to issue: https://github.com/6pac/SlickGrid/issues/568 */\r\n  cacheCssForHiddenInit() {\r\n    this._hiddenParents = Utils.parents(this._container, ':hidden') as HTMLElement[];\r\n    this._hiddenParents.forEach(el => {\r\n      const old: Partial<CSSStyleDeclaration> = {};\r\n      Object.keys(this.cssShow).forEach(name => {\r\n        if (this.cssShow) {\r\n          old[name as any] = el.style[name as 'position' | 'visibility' | 'display'];\r\n          el.style[name as any] = this.cssShow[name as 'position' | 'visibility' | 'display'];\r\n        }\r\n      });\r\n      this.oldProps.push(old);\r\n    });\r\n  }\r\n\r\n  restoreCssFromHiddenInit() {\r\n    // finish handle display:none on container or container parents\r\n    // - put values back the way they were\r\n    let i = 0;\r\n    if (this._hiddenParents) {\r\n      this._hiddenParents.forEach(el => {\r\n        const old = this.oldProps[i++];\r\n        Object.keys(this.cssShow).forEach(name => {\r\n          if (this.cssShow) {\r\n            el.style[name as CSSStyleDeclarationWritable] = (old as any)[name];\r\n          }\r\n        });\r\n      });\r\n    }\r\n  }\r\n\r\n  protected hasFrozenColumns() {\r\n    return this._options.frozenColumn! > -1;\r\n  }\r\n\r\n  /** Register an external Plugin */\r\n  registerPlugin<T extends SlickPlugin>(plugin: T) {\r\n    this.plugins.unshift(plugin);\r\n    plugin.init(this as unknown as SlickGridModel);\r\n  }\r\n\r\n  /** Unregister (destroy) an external Plugin */\r\n  unregisterPlugin(plugin: SlickPlugin) {\r\n    for (let i = this.plugins.length; i >= 0; i--) {\r\n      if (this.plugins[i] === plugin) {\r\n        this.plugins[i]?.destroy();\r\n        this.plugins.splice(i, 1);\r\n        break;\r\n      }\r\n    }\r\n  }\r\n\r\n  /** Get a Plugin (addon) by its name */\r\n  getPluginByName<P extends SlickPlugin | undefined = undefined>(name: string) {\r\n    for (let i = this.plugins.length - 1; i >= 0; i--) {\r\n      if (this.plugins[i]?.pluginName === name) {\r\n        return this.plugins[i] as P;\r\n      }\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Unregisters a current selection model and registers a new one. See the definition of SelectionModel for more information.\r\n   * @param {Object} selectionModel A SelectionModel.\r\n   */\r\n  setSelectionModel(model: SelectionModel) {\r\n    if (this.selectionModel) {\r\n      this.selectionModel.onSelectedRangesChanged.unsubscribe(this.handleSelectedRangesChanged.bind(this));\r\n      if (this.selectionModel.destroy) {\r\n        this.selectionModel.destroy();\r\n      }\r\n    }\r\n\r\n    this.selectionModel = model;\r\n    if (this.selectionModel) {\r\n      this.selectionModel.init(this as unknown as SlickGridModel);\r\n      this.selectionModel.onSelectedRangesChanged.subscribe(this.handleSelectedRangesChanged.bind(this));\r\n    }\r\n  }\r\n\r\n  /** Returns the current SelectionModel. See here for more information about SelectionModels. */\r\n  getSelectionModel() {\r\n    return this.selectionModel;\r\n  }\r\n\r\n  /** Get Grid Canvas Node DOM Element */\r\n  getCanvasNode(columnIdOrIdx?: number | string, rowIndex?: number) {\r\n    return this._getContainerElement(this.getCanvases(), columnIdOrIdx, rowIndex) as HTMLDivElement;\r\n  }\r\n\r\n  /** Get the canvas DOM element */\r\n  getActiveCanvasNode(e?: Event | SlickEventData_) {\r\n    if (e === undefined) {\r\n      return this._activeCanvasNode;\r\n    }\r\n\r\n    if (e instanceof SlickEventData) {\r\n      e = e.getNativeEvent<Event>();\r\n    }\r\n\r\n    this._activeCanvasNode = (e as any)?.target.closest('.grid-canvas');\r\n    return this._activeCanvasNode;\r\n  }\r\n\r\n  /** Get the canvas DOM element */\r\n  getCanvases() {\r\n    return this._canvas;\r\n  }\r\n\r\n  /** Get the Viewport DOM node element */\r\n  getViewportNode(columnIdOrIdx?: number | string, rowIndex?: number) {\r\n    return this._getContainerElement(this.getViewports(), columnIdOrIdx, rowIndex);\r\n  }\r\n\r\n  /** Get all the Viewport node elements */\r\n  getViewports() {\r\n    return this._viewport;\r\n  }\r\n\r\n  getActiveViewportNode(e: Event | SlickEventData_) {\r\n    this.setActiveViewportNode(e);\r\n\r\n    return this._activeViewportNode;\r\n  }\r\n\r\n  /** Sets an active viewport node */\r\n  setActiveViewportNode(e: Event | SlickEventData_) {\r\n    if (e instanceof SlickEventData) {\r\n      e = e.getNativeEvent<Event>();\r\n    }\r\n    this._activeViewportNode = (e as any)?.target.closest('.slick-viewport');\r\n    return this._activeViewportNode;\r\n  }\r\n\r\n  protected _getContainerElement(targetContainers: HTMLElement[], columnIdOrIdx?: number | string, rowIndex?: number) {\r\n    if (!targetContainers) { return; }\r\n    if (!columnIdOrIdx) { columnIdOrIdx = 0; }\r\n    if (!rowIndex) { rowIndex = 0; }\r\n\r\n    const idx = (typeof columnIdOrIdx === 'number' ? columnIdOrIdx : this.getColumnIndex(columnIdOrIdx));\r\n\r\n    const isBottomSide = this.hasFrozenRows && rowIndex >= this.actualFrozenRow + (this._options.frozenBottom ? 0 : 1);\r\n    const isRightSide = this.hasFrozenColumns() && idx > this._options.frozenColumn!;\r\n\r\n    return targetContainers[(isBottomSide ? 2 : 0) + (isRightSide ? 1 : 0)];\r\n  }\r\n\r\n  protected measureScrollbar() {\r\n    let className = '';\r\n    this._viewport.forEach(v => className += v.className);\r\n    const outerdiv = Utils.createDomElement('div', { className, style: { position: 'absolute', top: '-10000px', left: '-10000px', overflow: 'auto', width: '100px', height: '100px' } }, document.body);\r\n    const innerdiv = Utils.createDomElement('div', { style: { width: '200px', height: '200px', overflow: 'auto' } }, outerdiv);\r\n    const dim = {\r\n      width: outerdiv.offsetWidth - outerdiv.clientWidth,\r\n      height: outerdiv.offsetHeight - outerdiv.clientHeight\r\n    };\r\n    innerdiv.remove();\r\n    outerdiv.remove();\r\n    return dim;\r\n  }\r\n\r\n  /** Get the headers width in pixel */\r\n  getHeadersWidth() {\r\n    this.headersWidth = this.headersWidthL = this.headersWidthR = 0;\r\n    const includeScrollbar = !this._options.autoHeight;\r\n\r\n    let i = 0;\r\n    const ii = this.columns.length;\r\n    for (i = 0; i < ii; i++) {\r\n      if (!this.columns[i] || this.columns[i].hidden) { continue; }\r\n\r\n      const width = this.columns[i].width;\r\n\r\n      if ((this._options.frozenColumn!) > -1 && (i > this._options.frozenColumn!)) {\r\n        this.headersWidthR += width || 0;\r\n      } else {\r\n        this.headersWidthL += width || 0;\r\n      }\r\n    }\r\n\r\n    if (includeScrollbar) {\r\n      if ((this._options.frozenColumn!) > -1 && (i > this._options.frozenColumn!)) {\r\n        this.headersWidthR += this.scrollbarDimensions?.width ?? 0;\r\n      } else {\r\n        this.headersWidthL += this.scrollbarDimensions?.width ?? 0;\r\n      }\r\n    }\r\n\r\n    if (this.hasFrozenColumns()) {\r\n      this.headersWidthL = this.headersWidthL + 1000;\r\n\r\n      this.headersWidthR = Math.max(this.headersWidthR, this.viewportW) + this.headersWidthL;\r\n      this.headersWidthR += this.scrollbarDimensions?.width ?? 0;\r\n    } else {\r\n      this.headersWidthL += this.scrollbarDimensions?.width ?? 0;\r\n      this.headersWidthL = Math.max(this.headersWidthL, this.viewportW) + 1000;\r\n    }\r\n\r\n    this.headersWidth = this.headersWidthL + this.headersWidthR;\r\n    return Math.max(this.headersWidth, this.viewportW) + 1000;\r\n  }\r\n\r\n  /** Get the grid canvas width */\r\n  getCanvasWidth(): number {\r\n    const availableWidth = this.viewportHasVScroll ? this.viewportW - (this.scrollbarDimensions?.width ?? 0) : this.viewportW;\r\n    let i = this.columns.length;\r\n\r\n    this.canvasWidthL = this.canvasWidthR = 0;\r\n\r\n    while (i--) {\r\n      if (!this.columns[i] || this.columns[i].hidden) { continue; }\r\n\r\n      if (this.hasFrozenColumns() && (i > this._options.frozenColumn!)) {\r\n        this.canvasWidthR += this.columns[i].width || 0;\r\n      } else {\r\n        this.canvasWidthL += this.columns[i].width || 0;\r\n      }\r\n    }\r\n    let totalRowWidth = this.canvasWidthL + this.canvasWidthR;\r\n    if (this._options.fullWidthRows) {\r\n      const extraWidth = Math.max(totalRowWidth, availableWidth) - totalRowWidth;\r\n      if (extraWidth > 0) {\r\n        totalRowWidth += extraWidth;\r\n        if (this.hasFrozenColumns()) {\r\n          this.canvasWidthR += extraWidth;\r\n        } else {\r\n          this.canvasWidthL += extraWidth;\r\n        }\r\n      }\r\n    }\r\n    return totalRowWidth;\r\n  }\r\n\r\n  protected updateCanvasWidth(forceColumnWidthsUpdate?: boolean) {\r\n    const oldCanvasWidth = this.canvasWidth;\r\n    const oldCanvasWidthL = this.canvasWidthL;\r\n    const oldCanvasWidthR = this.canvasWidthR;\r\n    this.canvasWidth = this.getCanvasWidth();\r\n\r\n    if (this._options.createTopHeaderPanel) {\r\n      Utils.width(this._topHeaderPanel, this._options.topHeaderPanelWidth ?? this.canvasWidth);\r\n    }\r\n\r\n    const widthChanged = this.canvasWidth !== oldCanvasWidth || this.canvasWidthL !== oldCanvasWidthL || this.canvasWidthR !== oldCanvasWidthR;\r\n\r\n    if (widthChanged || this.hasFrozenColumns() || this.hasFrozenRows) {\r\n      Utils.width(this._canvasTopL, this.canvasWidthL);\r\n\r\n      this.getHeadersWidth();\r\n\r\n      Utils.width(this._headerL, this.headersWidthL);\r\n      Utils.width(this._headerR, this.headersWidthR);\r\n\r\n      if (this.hasFrozenColumns()) {\r\n        const cWidth = Utils.width(this._container) || 0;\r\n        if (cWidth > 0 && this.canvasWidthL > cWidth && this._options.throwWhenFrozenNotAllViewable) {\r\n          throw new Error('[SlickGrid] Frozen columns cannot be wider than the actual grid container width. '\r\n            + 'Make sure to have less columns freezed or make your grid container wider');\r\n        }\r\n        Utils.width(this._canvasTopR, this.canvasWidthR);\r\n\r\n        Utils.width(this._paneHeaderL, this.canvasWidthL);\r\n        Utils.setStyleSize(this._paneHeaderR, 'left', this.canvasWidthL);\r\n        Utils.setStyleSize(this._paneHeaderR, 'width', this.viewportW - this.canvasWidthL);\r\n\r\n        Utils.width(this._paneTopL, this.canvasWidthL);\r\n        Utils.setStyleSize(this._paneTopR, 'left', this.canvasWidthL);\r\n        Utils.width(this._paneTopR, this.viewportW - this.canvasWidthL);\r\n\r\n        Utils.width(this._headerRowScrollerL, this.canvasWidthL);\r\n        Utils.width(this._headerRowScrollerR, this.viewportW - this.canvasWidthL);\r\n\r\n        Utils.width(this._headerRowL, this.canvasWidthL);\r\n        Utils.width(this._headerRowR, this.canvasWidthR);\r\n\r\n        if (this._options.createFooterRow) {\r\n          Utils.width(this._footerRowScrollerL, this.canvasWidthL);\r\n          Utils.width(this._footerRowScrollerR, this.viewportW - this.canvasWidthL);\r\n\r\n          Utils.width(this._footerRowL, this.canvasWidthL);\r\n          Utils.width(this._footerRowR, this.canvasWidthR);\r\n        }\r\n        if (this._options.createPreHeaderPanel) {\r\n          Utils.width(this._preHeaderPanel, this._options.preHeaderPanelWidth ?? this.canvasWidth);\r\n        }\r\n        Utils.width(this._viewportTopL, this.canvasWidthL);\r\n        Utils.width(this._viewportTopR, this.viewportW - this.canvasWidthL);\r\n\r\n        if (this.hasFrozenRows) {\r\n          Utils.width(this._paneBottomL, this.canvasWidthL);\r\n          Utils.setStyleSize(this._paneBottomR, 'left', this.canvasWidthL);\r\n\r\n          Utils.width(this._viewportBottomL, this.canvasWidthL);\r\n          Utils.width(this._viewportBottomR, this.viewportW - this.canvasWidthL);\r\n\r\n          Utils.width(this._canvasBottomL, this.canvasWidthL);\r\n          Utils.width(this._canvasBottomR, this.canvasWidthR);\r\n        }\r\n      } else {\r\n        Utils.width(this._paneHeaderL, '100%');\r\n        Utils.width(this._paneTopL, '100%');\r\n        Utils.width(this._headerRowScrollerL, '100%');\r\n        Utils.width(this._headerRowL, this.canvasWidth);\r\n\r\n        if (this._options.createFooterRow) {\r\n          Utils.width(this._footerRowScrollerL, '100%');\r\n          Utils.width(this._footerRowL, this.canvasWidth);\r\n        }\r\n\r\n        if (this._options.createPreHeaderPanel) {\r\n          Utils.width(this._preHeaderPanel, this._options.preHeaderPanelWidth ?? this.canvasWidth);\r\n        }\r\n        Utils.width(this._viewportTopL, '100%');\r\n\r\n        if (this.hasFrozenRows) {\r\n          Utils.width(this._viewportBottomL, '100%');\r\n          Utils.width(this._canvasBottomL, this.canvasWidthL);\r\n        }\r\n      }\r\n    }\r\n\r\n    this.viewportHasHScroll = (this.canvasWidth >= this.viewportW - (this.scrollbarDimensions?.width ?? 0));\r\n\r\n    Utils.width(this._headerRowSpacerL, this.canvasWidth + (this.viewportHasVScroll ? (this.scrollbarDimensions?.width ?? 0) : 0));\r\n    Utils.width(this._headerRowSpacerR, this.canvasWidth + (this.viewportHasVScroll ? (this.scrollbarDimensions?.width ?? 0) : 0));\r\n\r\n    if (this._options.createFooterRow) {\r\n      Utils.width(this._footerRowSpacerL, this.canvasWidth + (this.viewportHasVScroll ? (this.scrollbarDimensions?.width ?? 0) : 0));\r\n      Utils.width(this._footerRowSpacerR, this.canvasWidth + (this.viewportHasVScroll ? (this.scrollbarDimensions?.width ?? 0) : 0));\r\n    }\r\n\r\n    if (widthChanged || forceColumnWidthsUpdate) {\r\n      this.applyColumnWidths();\r\n    }\r\n  }\r\n\r\n  protected disableSelection(target: HTMLElement[]) {\r\n    target.forEach((el) => {\r\n      el.setAttribute('unselectable', 'on');\r\n      (el.style as any).mozUserSelect = 'none';\r\n      this._bindingEventService.bind(el, 'selectstart', () => false);\r\n    });\r\n  }\r\n\r\n  protected getMaxSupportedCssHeight() {\r\n    let supportedHeight = 1000000;\r\n    // FF reports the height back but still renders blank after ~6M px\r\n    // let testUpTo = navigator.userAgent.toLowerCase().match(/firefox/) ? 6000000 : 1000000000;\r\n    const testUpTo = navigator.userAgent.toLowerCase().match(/firefox/) ? this._options.ffMaxSupportedCssHeight : this._options.maxSupportedCssHeight;\r\n    const div = Utils.createDomElement('div', { style: { display: 'hidden' } }, document.body);\r\n\r\n    while (true) {\r\n      const test = supportedHeight * 2;\r\n      Utils.height(div, test);\r\n      const height = Utils.height(div);\r\n\r\n      if (test > testUpTo! || height !== test) {\r\n        break;\r\n      } else {\r\n        supportedHeight = test;\r\n      }\r\n    }\r\n\r\n    div.remove();\r\n    return supportedHeight;\r\n  }\r\n\r\n  /** Get grid unique identifier */\r\n  getUID() {\r\n    return this.uid;\r\n  }\r\n\r\n  /** Get Header Column Width Difference in pixel */\r\n  getHeaderColumnWidthDiff() {\r\n    return this.headerColumnWidthDiff;\r\n  }\r\n\r\n  /** Get scrollbar dimensions */\r\n  getScrollbarDimensions() {\r\n    return this.scrollbarDimensions;\r\n  }\r\n\r\n  /** Get the displayed scrollbar dimensions */\r\n  getDisplayedScrollbarDimensions() {\r\n    return {\r\n      width: this.viewportHasVScroll ? (this.scrollbarDimensions?.width ?? 0) : 0,\r\n      height: this.viewportHasHScroll ? (this.scrollbarDimensions?.height ?? 0) : 0\r\n    };\r\n  }\r\n\r\n  /** Get the absolute column minimum width */\r\n  getAbsoluteColumnMinWidth(): number {\r\n    return this.absoluteColumnMinWidth;\r\n  }\r\n\r\n  getPubSubService(): BasePubSub | undefined {\r\n    return this._pubSubService;\r\n  }\r\n\r\n  // TODO:  this is static.  need to handle page mutation.\r\n  protected bindAncestorScrollEvents() {\r\n    let elem: HTMLElement | null = (this.hasFrozenRows && !this._options.frozenBottom) ? this._canvasBottomL : this._canvasTopL;\r\n    while ((elem = elem!.parentNode as HTMLElement) !== document.body && elem) {\r\n      // bind to scroll containers only\r\n      if (elem === this._viewportTopL || elem.scrollWidth !== elem.clientWidth || elem.scrollHeight !== elem.clientHeight) {\r\n        this._boundAncestors.push(elem);\r\n        this._bindingEventService.bind(elem, 'scroll', this.handleActiveCellPositionChange.bind(this));\r\n      }\r\n    }\r\n  }\r\n\r\n  protected unbindAncestorScrollEvents() {\r\n    this._boundAncestors.forEach((ancestor) => {\r\n      this._bindingEventService.unbindByEventName(ancestor, 'scroll');\r\n    });\r\n    this._boundAncestors = [];\r\n  }\r\n\r\n  /**\r\n   * Updates an existing column definition and a corresponding header DOM element with the new title and tooltip.\r\n   * @param {Number|String} columnId Column id.\r\n   * @param {string | HTMLElement | DocumentFragment} [title] New column name.\r\n   * @param {String} [toolTip] New column tooltip.\r\n   */\r\n  updateColumnHeader(columnId: number | string, title?: string | HTMLElement | DocumentFragment, toolTip?: string) {\r\n    if (this.initialized) {\r\n      const idx = this.getColumnIndex(columnId);\r\n      if (!Utils.isDefined(idx)) {\r\n        return;\r\n      }\r\n\r\n      const columnDef = this.columns[idx];\r\n      const header: HTMLElement | undefined = this.getColumnByIndex(idx);\r\n      if (header) {\r\n        if (title !== undefined) {\r\n          this.columns[idx].name = title;\r\n        }\r\n        if (toolTip !== undefined) {\r\n          this.columns[idx].toolTip = toolTip;\r\n        }\r\n\r\n        this.trigger(this.onBeforeHeaderCellDestroy, {\r\n          node: header,\r\n          column: columnDef,\r\n          grid: this\r\n        });\r\n\r\n        header.setAttribute('title', toolTip || '');\r\n        if (title !== undefined) {\r\n          this.applyHtmlCode(header.children[0] as HTMLElement, title);\r\n        }\r\n\r\n        this.trigger(this.onHeaderCellRendered, {\r\n          node: header,\r\n          column: columnDef,\r\n          grid: this\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get the Header DOM element\r\n   * @param {C} columnDef - column definition\r\n   */\r\n  getHeader(columnDef: C) {\r\n    if (!columnDef) {\r\n      return this.hasFrozenColumns() ? this._headers : this._headerL;\r\n    }\r\n    const idx = this.getColumnIndex(columnDef.id);\r\n    return this.hasFrozenColumns() ? ((idx <= this._options.frozenColumn!) ? this._headerL : this._headerR) : this._headerL;\r\n  }\r\n\r\n  /**\r\n   * Get a specific Header Column DOM element by its column Id or index\r\n   * @param {Number|String} columnIdOrIdx - column Id or index\r\n   */\r\n  getHeaderColumn(columnIdOrIdx: number | string) {\r\n    const idx = (typeof columnIdOrIdx === 'number' ? columnIdOrIdx : this.getColumnIndex(columnIdOrIdx));\r\n    const targetHeader = this.hasFrozenColumns() ? ((idx <= this._options.frozenColumn!) ? this._headerL : this._headerR) : this._headerL;\r\n    const targetIndex = this.hasFrozenColumns() ? ((idx <= this._options.frozenColumn!) ? idx : idx - this._options.frozenColumn! - 1) : idx;\r\n\r\n    return targetHeader.children[targetIndex] as HTMLDivElement;\r\n  }\r\n\r\n  /** Get the Header Row DOM element */\r\n  getHeaderRow() {\r\n    return this.hasFrozenColumns() ? this._headerRows : this._headerRows[0];\r\n  }\r\n\r\n  /** Get the Footer DOM element */\r\n  getFooterRow() {\r\n    return this.hasFrozenColumns() ? this._footerRow : this._footerRow[0];\r\n  }\r\n\r\n  /** @alias `getPreHeaderPanelLeft` */\r\n  getPreHeaderPanel() {\r\n    return this._preHeaderPanel;\r\n  }\r\n\r\n  /** Get the Pre-Header Panel Left DOM node element */\r\n  getPreHeaderPanelLeft() {\r\n    return this._preHeaderPanel;\r\n  }\r\n\r\n  /** Get the Pre-Header Panel Right DOM node element */\r\n  getPreHeaderPanelRight() {\r\n    return this._preHeaderPanelR;\r\n  }\r\n\r\n  /** Get the Top-Header Panel DOM node element */\r\n  getTopHeaderPanel() {\r\n    return this._topHeaderPanel;\r\n  }\r\n\r\n  /**\r\n   * Get Header Row Column DOM element by its column Id or index\r\n   * @param {Number|String} columnIdOrIdx - column Id or index\r\n   */\r\n  getHeaderRowColumn(columnIdOrIdx: number | string) {\r\n    let idx = (typeof columnIdOrIdx === 'number' ? columnIdOrIdx : this.getColumnIndex(columnIdOrIdx));\r\n    let headerRowTarget: HTMLDivElement;\r\n\r\n    if (this.hasFrozenColumns()) {\r\n      if (idx <= this._options.frozenColumn!) {\r\n        headerRowTarget = this._headerRowL;\r\n      } else {\r\n        headerRowTarget = this._headerRowR;\r\n        idx -= this._options.frozenColumn! + 1;\r\n      }\r\n    } else {\r\n      headerRowTarget = this._headerRowL;\r\n    }\r\n\r\n    return headerRowTarget.children[idx] as HTMLDivElement;\r\n  }\r\n\r\n  /**\r\n   * Get the Footer Row Column DOM element by its column Id or index\r\n   * @param {Number|String} columnIdOrIdx - column Id or index\r\n   */\r\n  getFooterRowColumn(columnIdOrIdx: number | string) {\r\n    let idx = (typeof columnIdOrIdx === 'number' ? columnIdOrIdx : this.getColumnIndex(columnIdOrIdx));\r\n    let footerRowTarget: HTMLDivElement;\r\n\r\n    if (this.hasFrozenColumns()) {\r\n      if (idx <= this._options.frozenColumn!) {\r\n        footerRowTarget = this._footerRowL;\r\n      } else {\r\n        footerRowTarget = this._footerRowR;\r\n\r\n        idx -= this._options.frozenColumn! + 1;\r\n      }\r\n    } else {\r\n      footerRowTarget = this._footerRowL;\r\n    }\r\n\r\n    return footerRowTarget.children[idx] as HTMLDivElement;\r\n  }\r\n\r\n  protected createColumnFooter() {\r\n    if (this._options.createFooterRow) {\r\n      this._footerRow.forEach((footer) => {\r\n        const columnElements = footer.querySelectorAll('.slick-footerrow-column');\r\n        columnElements.forEach((column) => {\r\n          const columnDef = Utils.storage.get(column, 'column');\r\n          this.trigger(this.onBeforeFooterRowCellDestroy, {\r\n            node: column,\r\n            column: columnDef,\r\n            grid: this\r\n          });\r\n        });\r\n      });\r\n\r\n      Utils.emptyElement(this._footerRowL);\r\n      Utils.emptyElement(this._footerRowR);\r\n\r\n      for (let i = 0; i < this.columns.length; i++) {\r\n        const m = this.columns[i];\r\n        if (!m || m.hidden) { continue; }\r\n\r\n        const footerRowCell = Utils.createDomElement('div', { className: `ui-state-default slick-state-default slick-footerrow-column l${i} r${i}` }, this.hasFrozenColumns() && (i > this._options.frozenColumn!) ? this._footerRowR : this._footerRowL);\r\n        const className = this.hasFrozenColumns() && i <= this._options.frozenColumn! ? 'frozen' : null;\r\n        if (className) {\r\n          footerRowCell.classList.add(className);\r\n        }\r\n\r\n        Utils.storage.put(footerRowCell, 'column', m);\r\n\r\n        this.trigger(this.onFooterRowCellRendered, {\r\n          node: footerRowCell,\r\n          column: m,\r\n          grid: this\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  protected handleHeaderMouseHoverOn(e: Event | SlickEventData_) {\r\n    (e as any)?.target.classList.add('ui-state-hover', 'slick-state-hover');\r\n  }\r\n\r\n  protected handleHeaderMouseHoverOff(e: Event | SlickEventData_) {\r\n    (e as any)?.target.classList.remove('ui-state-hover', 'slick-state-hover');\r\n  }\r\n\r\n  protected createColumnHeaders() {\r\n    this._headers.forEach((header) => {\r\n      const columnElements = header.querySelectorAll('.slick-header-column');\r\n      columnElements.forEach((column) => {\r\n        const columnDef = Utils.storage.get(column, 'column');\r\n        if (columnDef) {\r\n          this.trigger(this.onBeforeHeaderCellDestroy, {\r\n            node: column,\r\n            column: columnDef,\r\n            grid: this\r\n          });\r\n        }\r\n      });\r\n    });\r\n\r\n    Utils.emptyElement(this._headerL);\r\n    Utils.emptyElement(this._headerR);\r\n\r\n    this.getHeadersWidth();\r\n\r\n    Utils.width(this._headerL, this.headersWidthL);\r\n    Utils.width(this._headerR, this.headersWidthR);\r\n\r\n    this._headerRows.forEach((row) => {\r\n      const columnElements = row.querySelectorAll('.slick-headerrow-column');\r\n      columnElements.forEach((column) => {\r\n        const columnDef = Utils.storage.get(column, 'column');\r\n        if (columnDef) {\r\n          this.trigger(this.onBeforeHeaderRowCellDestroy, {\r\n            node: this,\r\n            column: columnDef,\r\n            grid: this\r\n          });\r\n        }\r\n      });\r\n    });\r\n\r\n    Utils.emptyElement(this._headerRowL);\r\n    Utils.emptyElement(this._headerRowR);\r\n\r\n    if (this._options.createFooterRow) {\r\n      const footerRowLColumnElements = this._footerRowL.querySelectorAll('.slick-footerrow-column');\r\n      footerRowLColumnElements.forEach((column) => {\r\n        const columnDef = Utils.storage.get(column, 'column');\r\n        if (columnDef) {\r\n          this.trigger(this.onBeforeFooterRowCellDestroy, {\r\n            node: this,\r\n            column: columnDef,\r\n            grid: this\r\n          });\r\n        }\r\n      });\r\n      Utils.emptyElement(this._footerRowL);\r\n\r\n      if (this.hasFrozenColumns()) {\r\n        const footerRowRColumnElements = this._footerRowR.querySelectorAll('.slick-footerrow-column');\r\n        footerRowRColumnElements.forEach((column) => {\r\n          const columnDef = Utils.storage.get(column, 'column');\r\n          if (columnDef) {\r\n            this.trigger(this.onBeforeFooterRowCellDestroy, {\r\n              node: this,\r\n              column: columnDef,\r\n              grid: this\r\n            });\r\n          }\r\n        });\r\n        Utils.emptyElement(this._footerRowR);\r\n      }\r\n    }\r\n\r\n    for (let i = 0; i < this.columns.length; i++) {\r\n      const m: C = this.columns[i];\r\n      if (m.hidden) { continue; }\r\n\r\n      const headerTarget = this.hasFrozenColumns() ? ((i <= this._options.frozenColumn!) ? this._headerL : this._headerR) : this._headerL;\r\n      const headerRowTarget = this.hasFrozenColumns() ? ((i <= this._options.frozenColumn!) ? this._headerRowL : this._headerRowR) : this._headerRowL;\r\n\r\n      const header = Utils.createDomElement('div', { id: `${this.uid + m.id}`, dataset: { id: String(m.id) }, role: 'columnheader', className: 'ui-state-default slick-state-default slick-header-column' }, headerTarget);\r\n      if (m.toolTip) {\r\n        header.title = m.toolTip;\r\n      }\r\n      if (!m.reorderable) {\r\n        header.classList.add(this._options.unorderableColumnCssClass!);\r\n      }\r\n      const colNameElm = Utils.createDomElement('span', { className: 'slick-column-name' }, header);\r\n      this.applyHtmlCode(colNameElm, m.name as string);\r\n\r\n      Utils.width(header, m.width! - this.headerColumnWidthDiff);\r\n\r\n      let classname = m.headerCssClass || null;\r\n      if (classname) {\r\n        header.classList.add(...Utils.classNameToList(classname));\r\n      }\r\n      classname = this.hasFrozenColumns() && i <= this._options.frozenColumn! ? 'frozen' : null;\r\n      if (classname) {\r\n        header.classList.add(classname);\r\n      }\r\n\r\n      this._bindingEventService.bind(header, 'mouseenter', this.handleHeaderMouseEnter.bind(this) as EventListener);\r\n      this._bindingEventService.bind(header, 'mouseleave', this.handleHeaderMouseLeave.bind(this) as EventListener);\r\n\r\n      Utils.storage.put(header, 'column', m);\r\n\r\n      if (this._options.enableColumnReorder || m.sortable) {\r\n        this._bindingEventService.bind(header, 'mouseenter', this.handleHeaderMouseHoverOn.bind(this) as EventListener);\r\n        this._bindingEventService.bind(header, 'mouseleave', this.handleHeaderMouseHoverOff.bind(this) as EventListener);\r\n      }\r\n\r\n      if (m.hasOwnProperty('headerCellAttrs') && m.headerCellAttrs instanceof Object) {\r\n        Object.keys(m.headerCellAttrs).forEach(key => {\r\n          if (m.headerCellAttrs.hasOwnProperty(key)) {\r\n            header.setAttribute(key, m.headerCellAttrs[key]);\r\n          }\r\n        });\r\n      }\r\n\r\n      if (m.sortable) {\r\n        header.classList.add('slick-header-sortable');\r\n        Utils.createDomElement('div', { className: `slick-sort-indicator ${this._options.numberedMultiColumnSort && !this._options.sortColNumberInSeparateSpan ? ' slick-sort-indicator-numbered' : ''}` }, header);\r\n        if (this._options.numberedMultiColumnSort && this._options.sortColNumberInSeparateSpan) {\r\n          Utils.createDomElement('div', { className: 'slick-sort-indicator-numbered' }, header);\r\n        }\r\n      }\r\n\r\n      this.trigger(this.onHeaderCellRendered, {\r\n        node: header,\r\n        column: m,\r\n        grid: this\r\n      });\r\n\r\n      if (this._options.showHeaderRow) {\r\n        const headerRowCell = Utils.createDomElement('div', { className: `ui-state-default slick-state-default slick-headerrow-column l${i} r${i}` }, headerRowTarget);\r\n        const frozenClasses = this.hasFrozenColumns() && i <= this._options.frozenColumn! ? 'frozen' : null;\r\n        if (frozenClasses) {\r\n          headerRowCell.classList.add(frozenClasses);\r\n        }\r\n\r\n        this._bindingEventService.bind(headerRowCell, 'mouseenter', this.handleHeaderRowMouseEnter.bind(this) as EventListener);\r\n        this._bindingEventService.bind(headerRowCell, 'mouseleave', this.handleHeaderRowMouseLeave.bind(this) as EventListener);\r\n\r\n        Utils.storage.put(headerRowCell, 'column', m);\r\n\r\n        this.trigger(this.onHeaderRowCellRendered, {\r\n          node: headerRowCell,\r\n          column: m,\r\n          grid: this\r\n        });\r\n      }\r\n      if (this._options.createFooterRow && this._options.showFooterRow) {\r\n        const footerRowTarget = this.hasFrozenColumns() ? ((i <= this._options.frozenColumn!) ? this._footerRow[0] : this._footerRow[1]) : this._footerRow[0];\r\n        const footerRowCell = Utils.createDomElement('div', { className: `ui-state-default slick-state-default slick-footerrow-column l${i} r${i}` }, footerRowTarget);\r\n        Utils.storage.put(footerRowCell, 'column', m);\r\n\r\n        this.trigger(this.onFooterRowCellRendered, {\r\n          node: footerRowCell,\r\n          column: m,\r\n          grid: this\r\n        });\r\n      }\r\n    }\r\n\r\n    this.setSortColumns(this.sortColumns);\r\n    this.setupColumnResize();\r\n    if (this._options.enableColumnReorder) {\r\n      if (typeof this._options.enableColumnReorder === 'function') {\r\n        this._options.enableColumnReorder(this as unknown as SlickGridModel, this._headers, this.headerColumnWidthDiff, this.setColumns as any, this.setupColumnResize, this.columns, this.getColumnIndex, this.uid, this.trigger);\r\n      } else {\r\n        this.setupColumnReorder();\r\n      }\r\n    }\r\n  }\r\n\r\n  protected setupColumnSort() {\r\n    this._headers.forEach((header) => {\r\n      this._bindingEventService.bind(header, 'click', (e: any) => {\r\n        if (this.columnResizeDragging) {\r\n          return;\r\n        }\r\n\r\n        if (e.target.classList.contains('slick-resizable-handle')) {\r\n          return;\r\n        }\r\n\r\n        const coll = e.target.closest('.slick-header-column');\r\n        if (!coll) {\r\n          return;\r\n        }\r\n\r\n        const column = Utils.storage.get(coll, 'column');\r\n        if (column.sortable) {\r\n          if (!this.getEditorLock()?.commitCurrentEdit()) {\r\n            return;\r\n          }\r\n\r\n          const previousSortColumns = this.sortColumns.slice();\r\n          let sortColumn: ColumnSort | null = null;\r\n          let i = 0;\r\n          for (; i < this.sortColumns.length; i++) {\r\n            if (this.sortColumns[i].columnId === column.id) {\r\n              sortColumn = this.sortColumns[i];\r\n              sortColumn.sortAsc = !sortColumn.sortAsc;\r\n              break;\r\n            }\r\n          }\r\n          const hadSortCol = !!sortColumn;\r\n\r\n          if (this._options.tristateMultiColumnSort) {\r\n            if (!sortColumn) {\r\n              sortColumn = { columnId: column.id, sortAsc: column.defaultSortAsc, sortCol: column };\r\n            }\r\n            if (hadSortCol && sortColumn.sortAsc) {\r\n              // three state: remove sort rather than go back to ASC\r\n              this.sortColumns.splice(i, 1);\r\n              sortColumn = null;\r\n            }\r\n            if (!this._options.multiColumnSort) {\r\n              this.sortColumns = [];\r\n            }\r\n            if (sortColumn && (!hadSortCol || !this._options.multiColumnSort)) {\r\n              this.sortColumns.push(sortColumn);\r\n            }\r\n          } else {\r\n            // legacy behaviour\r\n            if (e.metaKey && this._options.multiColumnSort) {\r\n              if (sortColumn) {\r\n                this.sortColumns.splice(i, 1);\r\n              }\r\n            } else {\r\n              if ((!e.shiftKey && !e.metaKey) || !this._options.multiColumnSort) {\r\n                this.sortColumns = [];\r\n              }\r\n\r\n              if (!sortColumn) {\r\n                sortColumn = { columnId: column.id, sortAsc: column.defaultSortAsc, sortCol: column };\r\n                this.sortColumns.push(sortColumn);\r\n              } else if (this.sortColumns.length === 0) {\r\n                this.sortColumns.push(sortColumn);\r\n              }\r\n            }\r\n          }\r\n\r\n          let onSortArgs;\r\n          if (!this._options.multiColumnSort) {\r\n            onSortArgs = {\r\n              multiColumnSort: false,\r\n              previousSortColumns,\r\n              columnId: (this.sortColumns.length > 0 ? column.id : null),\r\n              sortCol: (this.sortColumns.length > 0 ? column : null),\r\n              sortAsc: (this.sortColumns.length > 0 ? this.sortColumns[0].sortAsc : true)\r\n            };\r\n          } else {\r\n            onSortArgs = {\r\n              multiColumnSort: true,\r\n              previousSortColumns,\r\n              sortCols: this.sortColumns.map((col) => {\r\n                const tempCol = this.columns[this.getColumnIndex(col.columnId)];\r\n                return !tempCol || tempCol.hidden ? null : { columnId: tempCol.id, sortCol: tempCol, sortAsc: col.sortAsc };\r\n              }).filter((el) => el)\r\n            };\r\n          }\r\n\r\n          if (this.trigger(this.onBeforeSort, onSortArgs, e).getReturnValue() !== false) {\r\n            this.setSortColumns(this.sortColumns);\r\n            this.trigger(this.onSort, onSortArgs, e);\r\n          }\r\n        }\r\n      });\r\n    });\r\n  }\r\n\r\n  protected setupColumnReorder() {\r\n    this.sortableSideLeftInstance?.destroy();\r\n    this.sortableSideRightInstance?.destroy();\r\n\r\n    let columnScrollTimer: any = null;\r\n\r\n    const scrollColumnsRight = () => this._viewportScrollContainerX.scrollLeft = this._viewportScrollContainerX.scrollLeft + 10;\r\n    const scrollColumnsLeft = () => this._viewportScrollContainerX.scrollLeft = this._viewportScrollContainerX.scrollLeft - 10;\r\n\r\n    let canDragScroll = false;\r\n    const sortableOptions = {\r\n      animation: 50,\r\n      direction: 'horizontal',\r\n      chosenClass: 'slick-header-column-active',\r\n      ghostClass: 'slick-sortable-placeholder',\r\n      draggable: '.slick-header-column',\r\n      dragoverBubble: false,\r\n      revertClone: true,\r\n      scroll: !this.hasFrozenColumns(), // enable auto-scroll\r\n      // lock unorderable columns by using a combo of filter + onMove\r\n      filter: `.${this._options.unorderableColumnCssClass}`,\r\n      onMove: (event: MouseEvent & { related: HTMLElement; }) => {\r\n        return !event.related.classList.contains(this._options.unorderableColumnCssClass as string);\r\n      },\r\n      onStart: (e: { item: any; originalEvent: MouseEvent; }) => {\r\n        canDragScroll = !this.hasFrozenColumns() ||\r\n          Utils.offset(e.item)!.left > Utils.offset(this._viewportScrollContainerX)!.left;\r\n\r\n        if (canDragScroll && e.originalEvent.pageX > this._container.clientWidth) {\r\n          if (!(columnScrollTimer)) {\r\n            columnScrollTimer = setInterval(scrollColumnsRight, 100);\r\n          }\r\n        } else if (canDragScroll && e.originalEvent.pageX < Utils.offset(this._viewportScrollContainerX)!.left) {\r\n          if (!(columnScrollTimer)) {\r\n            columnScrollTimer = setInterval(scrollColumnsLeft, 100);\r\n          }\r\n        } else {\r\n          clearInterval(columnScrollTimer);\r\n          columnScrollTimer = null;\r\n        }\r\n      },\r\n      onEnd: (e: MouseEvent & { item: any; originalEvent: MouseEvent; }) => {\r\n        clearInterval(columnScrollTimer);\r\n        columnScrollTimer = null;\r\n\r\n        if (!this.getEditorLock()?.commitCurrentEdit()) {\r\n          return;\r\n        }\r\n\r\n        let reorderedIds = this.sortableSideLeftInstance?.toArray() ?? [];\r\n        reorderedIds = reorderedIds.concat(this.sortableSideRightInstance?.toArray() ?? []);\r\n\r\n        const reorderedColumns: C[] = [];\r\n        for (let i = 0; i < reorderedIds.length; i++) {\r\n          reorderedColumns.push(this.columns[this.getColumnIndex(reorderedIds[i])]);\r\n        }\r\n        this.setColumns(reorderedColumns);\r\n\r\n        this.trigger(this.onColumnsReordered, { impactedColumns: this.columns });\r\n        e.stopPropagation();\r\n        this.setupColumnResize();\r\n        if (this.activeCellNode) {\r\n          this.setFocus(); // refocus on active cell\r\n        }\r\n      }\r\n    };\r\n\r\n    this.sortableSideLeftInstance = Sortable.create(this._headerL, sortableOptions);\r\n    this.sortableSideRightInstance = Sortable.create(this._headerR, sortableOptions);\r\n  }\r\n\r\n  protected getHeaderChildren() {\r\n    const a = Array.from(this._headers[0].children);\r\n    const b = Array.from(this._headers[1].children);\r\n    return a.concat(b) as HTMLElement[];\r\n  }\r\n\r\n  protected handleResizeableDoubleClick(evt: MouseEvent & { target: HTMLDivElement; }) {\r\n    const triggeredByColumn = evt.target.parentElement!.id.replace(this.uid, '');\r\n    this.trigger(this.onColumnsResizeDblClick, { triggeredByColumn });\r\n  }\r\n\r\n  protected setupColumnResize() {\r\n    if (typeof Resizable === 'undefined') {\r\n      throw new Error(`Slick.Resizable is undefined, make sure to import \"slick.interactions.js\"`);\r\n    }\r\n\r\n    let j: number;\r\n    let k: number;\r\n    let c: C;\r\n    let pageX: number;\r\n    let minPageX: number;\r\n    let maxPageX: number;\r\n    let firstResizable: number | undefined;\r\n    let lastResizable = -1;\r\n    let frozenLeftColMaxWidth = 0;\r\n\r\n    const children: HTMLElement[] = this.getHeaderChildren();\r\n    const vc = this.getVisibleColumns();\r\n    for (let i = 0; i < children.length; i++) {\r\n      const child = children[i];\r\n      const handles = child.querySelectorAll('.slick-resizable-handle');\r\n      handles.forEach((handle) => handle.remove());\r\n\r\n      if (i >= vc.length || !vc[i]) {\r\n        continue;\r\n      }\r\n\r\n      if (vc[i].resizable) {\r\n        if (firstResizable === undefined) {\r\n          firstResizable = i;\r\n        }\r\n        lastResizable = i;\r\n      }\r\n    }\r\n\r\n    if (firstResizable === undefined) {\r\n      return;\r\n    }\r\n\r\n    for (let i = 0; i < children.length; i++) {\r\n      const colElm = children[i];\r\n\r\n      if (i >= vc.length || !vc[i]) {\r\n        continue;\r\n      }\r\n      if (i < firstResizable || (this._options.forceFitColumns && i >= lastResizable)) {\r\n        continue;\r\n      }\r\n\r\n      const resizeableHandle = Utils.createDomElement('div', { className: 'slick-resizable-handle', role: 'separator', ariaOrientation: 'horizontal' }, colElm);\r\n      this._bindingEventService.bind(resizeableHandle, 'dblclick', this.handleResizeableDoubleClick.bind(this) as EventListener);\r\n\r\n      this.slickResizableInstances.push(\r\n        Resizable({\r\n          resizeableElement: colElm as HTMLElement,\r\n          resizeableHandleElement: resizeableHandle,\r\n          onResizeStart: (e, resizeElms): boolean | void => {\r\n            const targetEvent = (e as TouchEvent).touches ? (e as TouchEvent).changedTouches[0] : e;\r\n            if (!this.getEditorLock()?.commitCurrentEdit()) {\r\n              return false;\r\n            }\r\n            pageX = (targetEvent as MouseEvent).pageX;\r\n            frozenLeftColMaxWidth = 0;\r\n            resizeElms.resizeableElement.classList.add('slick-header-column-active');\r\n            let shrinkLeewayOnRight: number | null = null;\r\n            let stretchLeewayOnRight: number | null = null;\r\n            // lock each column's width option to current width\r\n            for (let pw = 0; pw < children.length; pw++) {\r\n              if (pw >= vc.length || !vc[pw]) {\r\n                continue;\r\n              }\r\n              vc[pw].previousWidth = children[pw].offsetWidth;\r\n            }\r\n            if (this._options.forceFitColumns) {\r\n              shrinkLeewayOnRight = 0;\r\n              stretchLeewayOnRight = 0;\r\n              // colums on right affect maxPageX/minPageX\r\n              for (j = i + 1; j < vc.length; j++) {\r\n                c = vc[j];\r\n                if (c?.resizable) {\r\n                  if (stretchLeewayOnRight !== null) {\r\n                    if (c.maxWidth) {\r\n                      stretchLeewayOnRight += c.maxWidth - (c.previousWidth || 0);\r\n                    } else {\r\n                      stretchLeewayOnRight = null;\r\n                    }\r\n                  }\r\n                  shrinkLeewayOnRight += (c.previousWidth || 0) - Math.max(c.minWidth || 0, this.absoluteColumnMinWidth);\r\n                }\r\n              }\r\n            }\r\n            let shrinkLeewayOnLeft = 0;\r\n            let stretchLeewayOnLeft: number | null = 0;\r\n            for (j = 0; j <= i; j++) {\r\n              // columns on left only affect minPageX\r\n              c = vc[j];\r\n              if (c?.resizable) {\r\n                if (stretchLeewayOnLeft !== null) {\r\n                  if (c.maxWidth) {\r\n                    stretchLeewayOnLeft += c.maxWidth - (c.previousWidth || 0);\r\n                  } else {\r\n                    stretchLeewayOnLeft = null;\r\n                  }\r\n                }\r\n                shrinkLeewayOnLeft += (c.previousWidth || 0) - Math.max(c.minWidth || 0, this.absoluteColumnMinWidth);\r\n              }\r\n            }\r\n            if (shrinkLeewayOnRight === null) {\r\n              shrinkLeewayOnRight = 100000;\r\n            }\r\n            if (shrinkLeewayOnLeft === null) {\r\n              shrinkLeewayOnLeft = 100000;\r\n            }\r\n            if (stretchLeewayOnRight === null) {\r\n              stretchLeewayOnRight = 100000;\r\n            }\r\n            if (stretchLeewayOnLeft === null) {\r\n              stretchLeewayOnLeft = 100000;\r\n            }\r\n            maxPageX = pageX + Math.min(shrinkLeewayOnRight, stretchLeewayOnLeft);\r\n            minPageX = pageX - Math.min(shrinkLeewayOnLeft, stretchLeewayOnRight);\r\n          },\r\n          onResize: (e, resizeElms) => {\r\n            const targetEvent = (e as TouchEvent).touches ? (e as TouchEvent).changedTouches[0] : e;\r\n            this.columnResizeDragging = true;\r\n            let actualMinWidth;\r\n            const d = Math.min(maxPageX, Math.max(minPageX, (targetEvent as MouseEvent).pageX)) - pageX;\r\n            let x;\r\n            let newCanvasWidthL = 0;\r\n            let newCanvasWidthR = 0;\r\n            const viewportWidth = this.viewportHasVScroll ? this.viewportW - (this.scrollbarDimensions?.width ?? 0) : this.viewportW;\r\n\r\n            if (d < 0) { // shrink column\r\n              x = d;\r\n\r\n              for (j = i; j >= 0; j--) {\r\n                c = vc[j];\r\n                if (c?.resizable && !c.hidden) {\r\n                  actualMinWidth = Math.max(c.minWidth || 0, this.absoluteColumnMinWidth);\r\n                  if (x && (c.previousWidth || 0) + x < actualMinWidth) {\r\n                    x += (c.previousWidth || 0) - actualMinWidth;\r\n                    c.width = actualMinWidth;\r\n                  } else {\r\n                    c.width = (c.previousWidth || 0) + x;\r\n                    x = 0;\r\n                  }\r\n                }\r\n              }\r\n\r\n              for (k = 0; k <= i; k++) {\r\n                c = vc[k];\r\n                if (!c || c.hidden) { continue; }\r\n\r\n                if (this.hasFrozenColumns() && (k > this._options.frozenColumn!)) {\r\n                  newCanvasWidthR += c.width || 0;\r\n                } else {\r\n                  newCanvasWidthL += c.width || 0;\r\n                }\r\n              }\r\n\r\n              if (this._options.forceFitColumns) {\r\n                x = -d;\r\n                for (j = i + 1; j < vc.length; j++) {\r\n                  c = vc[j];\r\n                  if (!c || c.hidden) { continue; }\r\n                  if (c.resizable) {\r\n                    if (x && c.maxWidth && (c.maxWidth - (c.previousWidth || 0) < x)) {\r\n                      x -= c.maxWidth - (c.previousWidth || 0);\r\n                      c.width = c.maxWidth;\r\n                    } else {\r\n                      c.width = (c.previousWidth || 0) + x;\r\n                      x = 0;\r\n                    }\r\n\r\n                    if (this.hasFrozenColumns() && (j > this._options.frozenColumn!)) {\r\n                      newCanvasWidthR += c.width || 0;\r\n                    } else {\r\n                      newCanvasWidthL += c.width || 0;\r\n                    }\r\n                  }\r\n                }\r\n              } else {\r\n                for (j = i + 1; j < vc.length; j++) {\r\n                  c = vc[j];\r\n                  if (!c || c.hidden) { continue; }\r\n\r\n                  if (this.hasFrozenColumns() && (j > this._options.frozenColumn!)) {\r\n                    newCanvasWidthR += c.width || 0;\r\n                  } else {\r\n                    newCanvasWidthL += c.width || 0;\r\n                  }\r\n                }\r\n              }\r\n\r\n              if (this._options.forceFitColumns) {\r\n                x = -d;\r\n                for (j = i + 1; j < vc.length; j++) {\r\n                  c = vc[j];\r\n                  if (!c || c.hidden) { continue; }\r\n                  if (c.resizable) {\r\n                    if (x && c.maxWidth && (c.maxWidth - (c.previousWidth || 0) < x)) {\r\n                      x -= c.maxWidth - (c.previousWidth || 0);\r\n                      c.width = c.maxWidth;\r\n                    } else {\r\n                      c.width = (c.previousWidth || 0) + x;\r\n                      x = 0;\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            } else { // stretch column\r\n              x = d;\r\n\r\n              newCanvasWidthL = 0;\r\n              newCanvasWidthR = 0;\r\n\r\n              for (j = i; j >= 0; j--) {\r\n                c = vc[j];\r\n                if (!c || c.hidden) { continue; }\r\n                if (c.resizable) {\r\n                  if (x && c.maxWidth && (c.maxWidth - (c.previousWidth || 0) < x)) {\r\n                    x -= c.maxWidth - (c.previousWidth || 0);\r\n                    c.width = c.maxWidth;\r\n                  } else {\r\n                    const newWidth = (c.previousWidth || 0) + x;\r\n                    const resizedCanvasWidthL = this.canvasWidthL + x;\r\n\r\n                    if (this.hasFrozenColumns() && (j <= this._options.frozenColumn!)) {\r\n                      // if we're on the left frozen side, we need to make sure that our left section width never goes over the total viewport width\r\n                      if (newWidth > frozenLeftColMaxWidth && resizedCanvasWidthL < (viewportWidth - this._options.frozenRightViewportMinWidth!)) {\r\n                        frozenLeftColMaxWidth = newWidth; // keep max column width ref, if we go over the limit this number will stop increasing\r\n                      }\r\n                      c.width = ((resizedCanvasWidthL + this._options.frozenRightViewportMinWidth!) > viewportWidth) ? frozenLeftColMaxWidth : newWidth;\r\n                    } else {\r\n                      c.width = newWidth;\r\n                    }\r\n                    x = 0;\r\n                  }\r\n                }\r\n              }\r\n\r\n              for (k = 0; k <= i; k++) {\r\n                c = vc[k];\r\n                if (!c || c.hidden) { continue; }\r\n\r\n                if (this.hasFrozenColumns() && (k > this._options.frozenColumn!)) {\r\n                  newCanvasWidthR += c.width || 0;\r\n                } else {\r\n                  newCanvasWidthL += c.width || 0;\r\n                }\r\n              }\r\n\r\n              if (this._options.forceFitColumns) {\r\n                x = -d;\r\n                for (j = i + 1; j < vc.length; j++) {\r\n                  c = vc[j];\r\n                  if (!c || c.hidden) { continue; }\r\n                  if (c.resizable) {\r\n                    actualMinWidth = Math.max(c.minWidth || 0, this.absoluteColumnMinWidth);\r\n                    if (x && (c.previousWidth || 0) + x < actualMinWidth) {\r\n                      x += (c.previousWidth || 0) - actualMinWidth;\r\n                      c.width = actualMinWidth;\r\n                    } else {\r\n                      c.width = (c.previousWidth || 0) + x;\r\n                      x = 0;\r\n                    }\r\n\r\n                    if (this.hasFrozenColumns() && (j > this._options.frozenColumn!)) {\r\n                      newCanvasWidthR += c.width || 0;\r\n                    } else {\r\n                      newCanvasWidthL += c.width || 0;\r\n                    }\r\n                  }\r\n                }\r\n              } else {\r\n                for (j = i + 1; j < vc.length; j++) {\r\n                  c = vc[j];\r\n                  if (!c || c.hidden) { continue; }\r\n\r\n                  if (this.hasFrozenColumns() && (j > this._options.frozenColumn!)) {\r\n                    // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n                    newCanvasWidthR += c.width || 0;\r\n                  } else {\r\n                    newCanvasWidthL += c.width || 0;\r\n                  }\r\n                }\r\n              }\r\n            }\r\n\r\n            if (this.hasFrozenColumns() && newCanvasWidthL !== this.canvasWidthL) {\r\n              Utils.width(this._headerL, newCanvasWidthL + 1000);\r\n              Utils.setStyleSize(this._paneHeaderR, 'left', newCanvasWidthL);\r\n            }\r\n\r\n            this.applyColumnHeaderWidths();\r\n            if (this._options.syncColumnCellResize) {\r\n              this.applyColumnWidths();\r\n            }\r\n            this.trigger(this.onColumnsDrag, {\r\n              triggeredByColumn: resizeElms.resizeableElement,\r\n              resizeHandle: resizeElms.resizeableHandleElement\r\n            });\r\n          },\r\n          onResizeEnd: (_e, resizeElms) => {\r\n            resizeElms.resizeableElement.classList.remove('slick-header-column-active');\r\n\r\n            const triggeredByColumn = resizeElms.resizeableElement.id.replace(this.uid, '');\r\n            if (this.trigger(this.onBeforeColumnsResize, { triggeredByColumn }).getReturnValue() === true) {\r\n              this.applyColumnHeaderWidths();\r\n            }\r\n            let newWidth;\r\n            for (j = 0; j < vc.length; j++) {\r\n              c = vc[j];\r\n              if (!c || c.hidden) { continue; }\r\n              newWidth = children[j].offsetWidth;\r\n\r\n              if (c.previousWidth !== newWidth && c.rerenderOnResize) {\r\n                this.invalidateAllRows();\r\n              }\r\n            }\r\n            this.updateCanvasWidth(true);\r\n            this.render();\r\n            this.trigger(this.onColumnsResized, { triggeredByColumn });\r\n            clearTimeout(this._columnResizeTimer);\r\n            this._columnResizeTimer = setTimeout(() => { this.columnResizeDragging = false; }, 300);\r\n          }\r\n        })\r\n      );\r\n    }\r\n  }\r\n\r\n  protected getVBoxDelta(el: HTMLElement) {\r\n    const p = ['borderTopWidth', 'borderBottomWidth', 'paddingTop', 'paddingBottom'];\r\n    const styles = getComputedStyle(el);\r\n    let delta = 0;\r\n    p.forEach((val) => delta += Utils.toFloat(styles[val as any]));\r\n    return delta;\r\n  }\r\n\r\n  protected setFrozenOptions() {\r\n    this._options.frozenColumn = (this._options.frozenColumn! >= 0 && this._options.frozenColumn! < this.columns.length)\r\n      ? parseInt(this._options.frozenColumn as unknown as string, 10)\r\n      : -1;\r\n\r\n    if (this._options.frozenRow! > -1) {\r\n      this.hasFrozenRows = true;\r\n      this.frozenRowsHeight = (this._options.frozenRow!) * this._options.rowHeight!;\r\n      const dataLength = this.getDataLength();\r\n\r\n      this.actualFrozenRow = (this._options.frozenBottom)\r\n        ? (dataLength - this._options.frozenRow!)\r\n        : this._options.frozenRow!;\r\n    } else {\r\n      this.hasFrozenRows = false;\r\n    }\r\n  }\r\n\r\n  protected setPaneVisibility() {\r\n    if (this.hasFrozenColumns()) {\r\n      Utils.show(this._paneHeaderR);\r\n      Utils.show(this._paneTopR);\r\n\r\n      if (this.hasFrozenRows) {\r\n        Utils.show(this._paneBottomL);\r\n        Utils.show(this._paneBottomR);\r\n      } else {\r\n        Utils.hide(this._paneBottomR);\r\n        Utils.hide(this._paneBottomL);\r\n      }\r\n    } else {\r\n      Utils.hide(this._paneHeaderR);\r\n      Utils.hide(this._paneTopR);\r\n      Utils.hide(this._paneBottomR);\r\n\r\n      if (this.hasFrozenRows) {\r\n        Utils.show(this._paneBottomL);\r\n      } else {\r\n        Utils.hide(this._paneBottomR);\r\n        Utils.hide(this._paneBottomL);\r\n      }\r\n    }\r\n  }\r\n\r\n  protected setOverflow() {\r\n    this._viewportTopL.style.overflowX = (this.hasFrozenColumns()) ? (this.hasFrozenRows && !this._options.alwaysAllowHorizontalScroll ? 'hidden' : 'scroll') : (this.hasFrozenRows && !this._options.alwaysAllowHorizontalScroll ? 'hidden' : 'auto');\r\n    this._viewportTopL.style.overflowY = (!this.hasFrozenColumns() && this._options.alwaysShowVerticalScroll) ? 'scroll' : ((this.hasFrozenColumns()) ? (this.hasFrozenRows ? 'hidden' : 'hidden') : (this.hasFrozenRows ? 'scroll' : 'auto'));\r\n\r\n    this._viewportTopR.style.overflowX = (this.hasFrozenColumns()) ? (this.hasFrozenRows && !this._options.alwaysAllowHorizontalScroll ? 'hidden' : 'scroll') : (this.hasFrozenRows && !this._options.alwaysAllowHorizontalScroll ? 'hidden' : 'auto');\r\n    this._viewportTopR.style.overflowY = this._options.alwaysShowVerticalScroll ? 'scroll' : ((this.hasFrozenColumns()) ? (this.hasFrozenRows ? 'scroll' : 'auto') : (this.hasFrozenRows ? 'scroll' : 'auto'));\r\n\r\n    this._viewportBottomL.style.overflowX = (this.hasFrozenColumns()) ? (this.hasFrozenRows && !this._options.alwaysAllowHorizontalScroll ? 'scroll' : 'auto') : (this.hasFrozenRows && !this._options.alwaysAllowHorizontalScroll ? 'auto' : 'auto');\r\n    this._viewportBottomL.style.overflowY = (!this.hasFrozenColumns() && this._options.alwaysShowVerticalScroll) ? 'scroll' : ((this.hasFrozenColumns()) ? (this.hasFrozenRows ? 'hidden' : 'hidden') : (this.hasFrozenRows ? 'scroll' : 'auto'));\r\n\r\n    this._viewportBottomR.style.overflowX = (this.hasFrozenColumns()) ? (this.hasFrozenRows && !this._options.alwaysAllowHorizontalScroll ? 'scroll' : 'auto') : (this.hasFrozenRows && !this._options.alwaysAllowHorizontalScroll ? 'auto' : 'auto');\r\n    this._viewportBottomR.style.overflowY = this._options.alwaysShowVerticalScroll ? 'scroll' : ((this.hasFrozenColumns()) ? (this.hasFrozenRows ? 'auto' : 'auto') : (this.hasFrozenRows ? 'auto' : 'auto'));\r\n\r\n    if (this._options.viewportClass) {\r\n      const viewportClassList = Utils.classNameToList(this._options.viewportClass);\r\n      this._viewportTopL.classList.add(...viewportClassList);\r\n      this._viewportTopR.classList.add(...viewportClassList);\r\n      this._viewportBottomL.classList.add(...viewportClassList);\r\n      this._viewportBottomR.classList.add(...viewportClassList);\r\n    }\r\n  }\r\n\r\n  protected setScroller() {\r\n    if (this.hasFrozenColumns()) {\r\n      this._headerScrollContainer = this._headerScrollerR;\r\n      this._headerRowScrollContainer = this._headerRowScrollerR;\r\n      this._footerRowScrollContainer = this._footerRowScrollerR;\r\n\r\n      if (this.hasFrozenRows) {\r\n        if (this._options.frozenBottom) {\r\n          this._viewportScrollContainerX = this._viewportBottomR;\r\n          this._viewportScrollContainerY = this._viewportTopR;\r\n        } else {\r\n          this._viewportScrollContainerX = this._viewportScrollContainerY = this._viewportBottomR;\r\n        }\r\n      } else {\r\n        this._viewportScrollContainerX = this._viewportScrollContainerY = this._viewportTopR;\r\n      }\r\n    } else {\r\n      this._headerScrollContainer = this._headerScrollerL;\r\n      this._headerRowScrollContainer = this._headerRowScrollerL;\r\n      this._footerRowScrollContainer = this._footerRowScrollerL;\r\n\r\n      if (this.hasFrozenRows) {\r\n        if (this._options.frozenBottom) {\r\n          this._viewportScrollContainerX = this._viewportBottomL;\r\n          this._viewportScrollContainerY = this._viewportTopL;\r\n        } else {\r\n          this._viewportScrollContainerX = this._viewportScrollContainerY = this._viewportBottomL;\r\n        }\r\n      } else {\r\n        this._viewportScrollContainerX = this._viewportScrollContainerY = this._viewportTopL;\r\n      }\r\n    }\r\n  }\r\n\r\n  protected measureCellPaddingAndBorder() {\r\n    const h = ['borderLeftWidth', 'borderRightWidth', 'paddingLeft', 'paddingRight'];\r\n    const v = ['borderTopWidth', 'borderBottomWidth', 'paddingTop', 'paddingBottom'];\r\n    const header = this._headers[0];\r\n\r\n    this.headerColumnWidthDiff = this.headerColumnHeightDiff = 0;\r\n    this.cellWidthDiff = this.cellHeightDiff = 0;\r\n\r\n    let el = Utils.createDomElement('div', { className: 'ui-state-default slick-state-default slick-header-column', style: { visibility: 'hidden' }, textContent: '-' }, header);\r\n    let style = getComputedStyle(el);\r\n    if (style.boxSizing !== 'border-box') {\r\n      h.forEach((val) => this.headerColumnWidthDiff += Utils.toFloat(style[val as any]));\r\n      v.forEach((val) => this.headerColumnHeightDiff += Utils.toFloat(style[val as any]));\r\n    }\r\n    el.remove();\r\n\r\n    const r = Utils.createDomElement('div', { className: 'slick-row' }, this._canvas[0]);\r\n    el = Utils.createDomElement('div', { className: 'slick-cell', id: '', style: { visibility: 'hidden' }, textContent: '-' }, r);\r\n    style = getComputedStyle(el);\r\n    if (style.boxSizing !== 'border-box') {\r\n      h.forEach((val) => this.cellWidthDiff += Utils.toFloat(style[val as any]));\r\n      v.forEach((val) => this.cellHeightDiff += Utils.toFloat(style[val as any]));\r\n    }\r\n    r.remove();\r\n\r\n    this.absoluteColumnMinWidth = Math.max(this.headerColumnWidthDiff, this.cellWidthDiff);\r\n  }\r\n\r\n  protected createCssRules() {\r\n    this._style = document.createElement('style');\r\n    this._style.nonce = this._options.nonce || '';\r\n    (this._options.shadowRoot || document.head).appendChild(this._style);\r\n\r\n    const rowHeight = (this._options.rowHeight! - this.cellHeightDiff);\r\n    const rules = [\r\n      `.${this.uid} .slick-group-header-column { left: 1000px; }`,\r\n      `.${this.uid} .slick-header-column { left: 1000px; }`,\r\n      `.${this.uid} .slick-top-panel { height: ${this._options.topPanelHeight}px; }`,\r\n      `.${this.uid} .slick-preheader-panel { height: ${this._options.preHeaderPanelHeight}px; }`,\r\n      `.${this.uid} .slick-topheader-panel { height: ${this._options.topHeaderPanelHeight}px; }`,\r\n      `.${this.uid} .slick-headerrow-columns { height: ${this._options.headerRowHeight}px; }`,\r\n      `.${this.uid} .slick-footerrow-columns { height: ${this._options.footerRowHeight}px; }`,\r\n      `.${this.uid} .slick-cell { height: ${rowHeight}px; }`,\r\n      `.${this.uid} .slick-row { height: ${this._options.rowHeight}px; }`,\r\n    ];\r\n\r\n    const sheet = this._style.sheet;\r\n    if (sheet) {\r\n      rules.forEach(rule => {\r\n        sheet.insertRule(rule);\r\n      });\r\n\r\n      for (let i = 0; i < this.columns.length; i++) {\r\n        if (!this.columns[i] || this.columns[i].hidden) { continue; }\r\n\r\n        sheet.insertRule(`.${this.uid} .l${i} { }`);\r\n        sheet.insertRule(`.${this.uid} .r${i} { }`);\r\n      }\r\n    } else {\r\n      // fallback in case the 1st approach doesn't work, let's use our previous way of creating the css rules which is what works in Salesforce :(\r\n      this.createCssRulesAlternative(rules);\r\n    }\r\n  }\r\n\r\n  /** Create CSS rules via template in case the first approach with createElement('style') doesn't work */\r\n  protected createCssRulesAlternative(rules: string[]) {\r\n    const template = document.createElement('template');\r\n    template.innerHTML = '<style type=\"text/css\" rel=\"stylesheet\" />';\r\n    this._style = template.content.firstChild as HTMLStyleElement;\r\n    (this._options.shadowRoot || document.head).appendChild(this._style);\r\n\r\n    for (let i = 0; i < this.columns.length; i++) {\r\n      if (!this.columns[i] || this.columns[i].hidden) { continue; }\r\n\r\n      rules.push(`.${this.uid} .l${i} { }`);\r\n      rules.push(`.${this.uid} .r${i} { }`);\r\n    }\r\n\r\n    if ((this._style as any).styleSheet) { // IE\r\n      (this._style as any).styleSheet.cssText = rules.join(' ');\r\n    } else {\r\n      this._style.appendChild(document.createTextNode(rules.join(' ')));\r\n    }\r\n  }\r\n\r\n  protected getColumnCssRules(idx: number) {\r\n    let i: number;\r\n    if (!this.stylesheet) {\r\n      const sheets: any = (this._options.shadowRoot || document).styleSheets;\r\n\r\n      if (this._options.devMode && typeof this._options.devMode?.ownerNodeIndex === 'number' && this._options.devMode.ownerNodeIndex >= 0) {\r\n        sheets[this._options.devMode.ownerNodeIndex].ownerNode = this._style;\r\n      }\r\n\r\n      for (i = 0; i < sheets.length; i++) {\r\n        if ((sheets[i].ownerNode || sheets[i].owningElement) === this._style) {\r\n          this.stylesheet = sheets[i];\r\n          break;\r\n        }\r\n      }\r\n\r\n      if (!this.stylesheet) {\r\n        throw new Error('SlickGrid Cannot find stylesheet.');\r\n      }\r\n\r\n      // find and cache column CSS rules\r\n      this.columnCssRulesL = [];\r\n      this.columnCssRulesR = [];\r\n      const cssRules = (this.stylesheet.cssRules || this.stylesheet.rules);\r\n      let matches;\r\n      let columnIdx;\r\n      for (i = 0; i < cssRules.length; i++) {\r\n        const selector = cssRules[i].selectorText;\r\n        if (matches = /\\.l\\d+/.exec(selector)) {\r\n          columnIdx = parseInt(matches[0].substr(2, matches[0].length - 2), 10);\r\n          this.columnCssRulesL[columnIdx] = cssRules[i];\r\n        } else if (matches = /\\.r\\d+/.exec(selector)) {\r\n          columnIdx = parseInt(matches[0].substr(2, matches[0].length - 2), 10);\r\n          this.columnCssRulesR[columnIdx] = cssRules[i];\r\n        }\r\n      }\r\n    }\r\n\r\n    return {\r\n      left: this.columnCssRulesL![idx],\r\n      right: this.columnCssRulesR![idx]\r\n    };\r\n  }\r\n\r\n  protected removeCssRules() {\r\n    this._style?.remove();\r\n    this.stylesheet = null;\r\n  }\r\n\r\n  /** Clear all highlight timers that might have been left opened */\r\n  protected clearAllTimers() {\r\n    clearTimeout(this._columnResizeTimer);\r\n    clearTimeout(this._executionBlockTimer);\r\n    clearTimeout(this._flashCellTimer);\r\n    clearTimeout(this._highlightRowTimer);\r\n    clearTimeout(this.h_editorLoader);\r\n  }\r\n\r\n  /**\r\n   * Destroy (dispose) of SlickGrid\r\n   * @param {boolean} shouldDestroyAllElements - do we want to destroy (nullify) all DOM elements as well? This help in avoiding mem leaks\r\n   */\r\n  destroy(shouldDestroyAllElements?: boolean) {\r\n    this._bindingEventService.unbindAll();\r\n    this.slickDraggableInstance = this.destroyAllInstances(this.slickDraggableInstance) as null;\r\n    this.slickMouseWheelInstances = this.destroyAllInstances(this.slickMouseWheelInstances) as InteractionBase[];\r\n    this.slickResizableInstances = this.destroyAllInstances(this.slickResizableInstances) as InteractionBase[];\r\n    this.getEditorLock()?.cancelCurrentEdit();\r\n\r\n    this.trigger(this.onBeforeDestroy, {});\r\n\r\n    let i = this.plugins.length;\r\n    while (i--) {\r\n      this.unregisterPlugin(this.plugins[i]);\r\n    }\r\n\r\n    if (this._options.enableColumnReorder && typeof this.sortableSideLeftInstance?.destroy === 'function') {\r\n      this.sortableSideLeftInstance?.destroy();\r\n      this.sortableSideRightInstance?.destroy();\r\n    }\r\n\r\n    this.unbindAncestorScrollEvents();\r\n    this._bindingEventService.unbindByEventName(this._container, 'resize');\r\n    this.removeCssRules();\r\n\r\n    this._canvas.forEach((element) => {\r\n      this._bindingEventService.unbindByEventName(element, 'keydown');\r\n      this._bindingEventService.unbindByEventName(element, 'click');\r\n      this._bindingEventService.unbindByEventName(element, 'dblclick');\r\n      this._bindingEventService.unbindByEventName(element, 'contextmenu');\r\n      this._bindingEventService.unbindByEventName(element, 'mouseover');\r\n      this._bindingEventService.unbindByEventName(element, 'mouseout');\r\n    });\r\n    this._viewport.forEach((view) => {\r\n      this._bindingEventService.unbindByEventName(view, 'scroll');\r\n    });\r\n\r\n    this._headerScroller.forEach((el) => {\r\n      this._bindingEventService.unbindByEventName(el, 'contextmenu');\r\n      this._bindingEventService.unbindByEventName(el, 'click');\r\n    });\r\n\r\n    this._headerRowScroller.forEach((scroller) => {\r\n      this._bindingEventService.unbindByEventName(scroller, 'scroll');\r\n    });\r\n\r\n    if (this._footerRow) {\r\n      this._footerRow.forEach((footer) => {\r\n        this._bindingEventService.unbindByEventName(footer, 'contextmenu');\r\n        this._bindingEventService.unbindByEventName(footer, 'click');\r\n      });\r\n    }\r\n\r\n    if (this._footerRowScroller) {\r\n      this._footerRowScroller.forEach((scroller) => {\r\n        this._bindingEventService.unbindByEventName(scroller, 'scroll');\r\n      });\r\n    }\r\n\r\n    if (this._preHeaderPanelScroller) {\r\n      this._bindingEventService.unbindByEventName(this._preHeaderPanelScroller, 'scroll');\r\n    }\r\n\r\n    if (this._topHeaderPanelScroller) {\r\n      this._bindingEventService.unbindByEventName(this._topHeaderPanelScroller, 'scroll');\r\n    }\r\n\r\n    this._bindingEventService.unbindByEventName(this._focusSink, 'keydown');\r\n    this._bindingEventService.unbindByEventName(this._focusSink2, 'keydown');\r\n\r\n    const resizeHandles = this._container.querySelectorAll('.slick-resizable-handle');\r\n    [].forEach.call(resizeHandles, (handle) => {\r\n      this._bindingEventService.unbindByEventName(handle, 'dblclick');\r\n    });\r\n\r\n    const headerColumns = this._container.querySelectorAll('.slick-header-column');\r\n    [].forEach.call(headerColumns, (column) => {\r\n      this._bindingEventService.unbindByEventName(column, 'mouseenter');\r\n      this._bindingEventService.unbindByEventName(column, 'mouseleave');\r\n\r\n      this._bindingEventService.unbindByEventName(column, 'mouseenter');\r\n      this._bindingEventService.unbindByEventName(column, 'mouseleave');\r\n    });\r\n\r\n    Utils.emptyElement(this._container);\r\n    this._container.classList.remove(this.uid);\r\n    this.clearAllTimers();\r\n\r\n    if (shouldDestroyAllElements) {\r\n      this.destroyAllElements();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * call destroy method, when exists, on all the instance(s) it found\r\n   * @params instances - can be a single instance or a an array of instances\r\n   */\r\n  protected destroyAllInstances(inputInstances: null | InteractionBase | Array<InteractionBase>) {\r\n    if (inputInstances) {\r\n      const instances = Array.isArray(inputInstances) ? inputInstances : [inputInstances];\r\n      let instance: InteractionBase | undefined;\r\n      while (Utils.isDefined(instance = instances.pop())) {\r\n        if (instance && typeof instance.destroy === 'function') {\r\n          instance.destroy();\r\n        }\r\n      }\r\n    }\r\n    // reset instance(s)\r\n    inputInstances = (Array.isArray(inputInstances) ? [] : null);\r\n    return inputInstances;\r\n  }\r\n\r\n  protected destroyAllElements() {\r\n    this._activeCanvasNode = null as any;\r\n    this._activeViewportNode = null as any;\r\n    this._boundAncestors = null as any;\r\n    this._canvas = null as any;\r\n    this._canvasTopL = null as any;\r\n    this._canvasTopR = null as any;\r\n    this._canvasBottomL = null as any;\r\n    this._canvasBottomR = null as any;\r\n    this._container = null as any;\r\n    this._focusSink = null as any;\r\n    this._focusSink2 = null as any;\r\n    this._groupHeaders = null as any;\r\n    this._groupHeadersL = null as any;\r\n    this._groupHeadersR = null as any;\r\n    this._headerL = null as any;\r\n    this._headerR = null as any;\r\n    this._headers = null as any;\r\n    this._headerRows = null as any;\r\n    this._headerRowL = null as any;\r\n    this._headerRowR = null as any;\r\n    this._headerRowSpacerL = null as any;\r\n    this._headerRowSpacerR = null as any;\r\n    this._headerRowScrollContainer = null as any;\r\n    this._headerRowScroller = null as any;\r\n    this._headerRowScrollerL = null as any;\r\n    this._headerRowScrollerR = null as any;\r\n    this._headerScrollContainer = null as any;\r\n    this._headerScroller = null as any;\r\n    this._headerScrollerL = null as any;\r\n    this._headerScrollerR = null as any;\r\n    this._hiddenParents = null as any;\r\n    this._footerRow = null as any;\r\n    this._footerRowL = null as any;\r\n    this._footerRowR = null as any;\r\n    this._footerRowSpacerL = null as any;\r\n    this._footerRowSpacerR = null as any;\r\n    this._footerRowScroller = null as any;\r\n    this._footerRowScrollerL = null as any;\r\n    this._footerRowScrollerR = null as any;\r\n    this._footerRowScrollContainer = null as any;\r\n    this._preHeaderPanel = null as any;\r\n    this._preHeaderPanelR = null as any;\r\n    this._preHeaderPanelScroller = null as any;\r\n    this._preHeaderPanelScrollerR = null as any;\r\n    this._preHeaderPanelSpacer = null as any;\r\n    this._preHeaderPanelSpacerR = null as any;\r\n    this._topPanels = null as any;\r\n    this._topPanelScrollers = null as any;\r\n    this._style = null as any;\r\n    this._topPanelScrollerL = null as any;\r\n    this._topPanelScrollerR = null as any;\r\n    this._topPanelL = null as any;\r\n    this._topPanelR = null as any;\r\n    this._paneHeaderL = null as any;\r\n    this._paneHeaderR = null as any;\r\n    this._paneTopL = null as any;\r\n    this._paneTopR = null as any;\r\n    this._paneBottomL = null as any;\r\n    this._paneBottomR = null as any;\r\n    this._viewport = null as any;\r\n    this._viewportTopL = null as any;\r\n    this._viewportTopR = null as any;\r\n    this._viewportBottomL = null as any;\r\n    this._viewportBottomR = null as any;\r\n    this._viewportScrollContainerX = null as any;\r\n    this._viewportScrollContainerY = null as any;\r\n  }\r\n\r\n  //////////////////////////////////////////////////////////////////////////////////////////////\r\n  // Column Autosizing\r\n  //////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n  /** Proportionally resize a specific column by its name, index or Id */\r\n  autosizeColumn(columnOrIndexOrId: number | string, isInit?: boolean) {\r\n    let colDef: C | null = null;\r\n    let colIndex = -1;\r\n    if (typeof columnOrIndexOrId === 'number') {\r\n      colDef = this.columns[columnOrIndexOrId];\r\n      colIndex = columnOrIndexOrId;\r\n    } else if (typeof columnOrIndexOrId === 'string') {\r\n      for (let i = 0; i < this.columns.length; i++) {\r\n        if (this.columns[i].id === columnOrIndexOrId) { colDef = this.columns[i]; colIndex = i; }\r\n      }\r\n    }\r\n    if (!colDef) {\r\n      return;\r\n    }\r\n    const gridCanvas = this.getCanvasNode(0, 0) as HTMLElement;\r\n    this.getColAutosizeWidth(colDef, colIndex, gridCanvas, isInit || false, colIndex);\r\n  }\r\n\r\n  protected treatAsLocked(autoSize: AutoSize = {}) {\r\n    // treat as locked (don't resize) if small and header is the widest part\r\n    return !autoSize.ignoreHeaderText\r\n      && !autoSize.sizeToRemaining\r\n      && (autoSize.contentSizePx === autoSize.headerWidthPx)\r\n      && ((autoSize.widthPx ?? 0) < 100);\r\n  }\r\n\r\n  /** Proportionately resizes all columns to fill available horizontal space. This does not take the cell contents into consideration. */\r\n  autosizeColumns(autosizeMode?: string, isInit?: boolean) {\r\n    this.cacheCssForHiddenInit();\r\n    this.internalAutosizeColumns(autosizeMode, isInit);\r\n    this.restoreCssFromHiddenInit();\r\n  }\r\n\r\n  protected internalAutosizeColumns(autosizeMode?: string, isInit?: boolean) {\r\n    // LogColWidths();\r\n    autosizeMode = autosizeMode || this._options.autosizeColsMode;\r\n    if (autosizeMode === GridAutosizeColsMode.LegacyForceFit || autosizeMode === GridAutosizeColsMode.LegacyOff) {\r\n      this.legacyAutosizeColumns();\r\n      return;\r\n    }\r\n\r\n    if (autosizeMode === GridAutosizeColsMode.None) {\r\n      return;\r\n    }\r\n\r\n    // test for brower canvas support, canvas_context!=null if supported\r\n    this.canvas = document.createElement('canvas');\r\n    if (this.canvas?.getContext) { this.canvas_context = this.canvas.getContext('2d'); }\r\n\r\n    // pass in the grid canvas\r\n    const gridCanvas = this.getCanvasNode(0, 0) as HTMLElement;\r\n    const viewportWidth = this.viewportHasVScroll ? this.viewportW - (this.scrollbarDimensions?.width ?? 0) : this.viewportW;\r\n\r\n    // iterate columns to get autosizes\r\n    let i: number;\r\n    let c: C;\r\n    let colWidth: number;\r\n    let reRender = false;\r\n    let totalWidth = 0;\r\n    let totalWidthLessSTR = 0;\r\n    let strColsMinWidth = 0;\r\n    let totalMinWidth = 0;\r\n    let totalLockedColWidth = 0;\r\n    for (i = 0; i < this.columns.length; i++) {\r\n      c = this.columns[i];\r\n      this.getColAutosizeWidth(c, i, gridCanvas, isInit || false, i);\r\n      totalLockedColWidth += (c.autoSize?.autosizeMode === ColAutosizeMode.Locked ? (c.width || 0) : (this.treatAsLocked(c.autoSize) ? c.autoSize?.widthPx || 0 : 0));\r\n      totalMinWidth += (c.autoSize?.autosizeMode === ColAutosizeMode.Locked ? (c.width || 0) : (this.treatAsLocked(c.autoSize) ? c.autoSize?.widthPx || 0 : c.minWidth || 0));\r\n      totalWidth += (c.autoSize?.widthPx || 0);\r\n      totalWidthLessSTR += (c.autoSize?.sizeToRemaining ? 0 : c.autoSize?.widthPx || 0);\r\n      strColsMinWidth += (c.autoSize?.sizeToRemaining ? c.minWidth || 0 : 0);\r\n    }\r\n    const strColTotalGuideWidth = totalWidth - totalWidthLessSTR;\r\n\r\n    if (autosizeMode === GridAutosizeColsMode.FitViewportToCols) {\r\n      // - if viewport with is outside MinViewportWidthPx and MaxViewportWidthPx, then the viewport is set to\r\n      //   MinViewportWidthPx or MaxViewportWidthPx and the FitColsToViewport algorithm is used\r\n      // - viewport is resized to fit columns\r\n      let setWidth = totalWidth + (this.scrollbarDimensions?.width ?? 0);\r\n      autosizeMode = GridAutosizeColsMode.IgnoreViewport;\r\n\r\n      if (this._options.viewportMaxWidthPx && setWidth > this._options.viewportMaxWidthPx) {\r\n        setWidth = this._options.viewportMaxWidthPx;\r\n        autosizeMode = GridAutosizeColsMode.FitColsToViewport;\r\n      } else if (this._options.viewportMinWidthPx && setWidth < this._options.viewportMinWidthPx) {\r\n        setWidth = this._options.viewportMinWidthPx;\r\n        autosizeMode = GridAutosizeColsMode.FitColsToViewport;\r\n      } else {\r\n        // falling back to IgnoreViewport will size the columns as-is, with render checking\r\n        // for (i = 0; i < columns.length; i++) { columns[i].width = columns[i].autoSize.widthPx; }\r\n      }\r\n      Utils.width(this._container, setWidth);\r\n    }\r\n\r\n    if (autosizeMode === GridAutosizeColsMode.FitColsToViewport) {\r\n      if (strColTotalGuideWidth > 0 && totalWidthLessSTR < viewportWidth - strColsMinWidth) {\r\n        // if addl space remains in the viewport and there are SizeToRemaining cols, just the SizeToRemaining cols expand proportionally to fill viewport\r\n        for (i = 0; i < this.columns.length; i++) {\r\n          c = this.columns[i];\r\n          if (!c || c.hidden) { continue; }\r\n\r\n          const totalSTRViewportWidth = viewportWidth - totalWidthLessSTR;\r\n          if (c.autoSize?.sizeToRemaining) {\r\n            colWidth = totalSTRViewportWidth * (c.autoSize?.widthPx || 0) / strColTotalGuideWidth;\r\n          } else {\r\n            colWidth = (c.autoSize?.widthPx || 0);\r\n          }\r\n          if (c.rerenderOnResize && (c.width || 0) !== colWidth) {\r\n            reRender = true;\r\n          }\r\n          c.width = colWidth;\r\n        }\r\n      } else if ((this._options.viewportSwitchToScrollModeWidthPercent && totalWidthLessSTR + strColsMinWidth > viewportWidth * this._options.viewportSwitchToScrollModeWidthPercent / 100)\r\n        || (totalMinWidth > viewportWidth)) {\r\n        // if the total columns width is wider than the viewport by switchToScrollModeWidthPercent, switch to IgnoreViewport mode\r\n        autosizeMode = GridAutosizeColsMode.IgnoreViewport;\r\n      } else {\r\n        // otherwise (ie. no SizeToRemaining cols or viewport smaller than columns) all cols other than 'Locked' scale in proportion to fill viewport\r\n        // and SizeToRemaining get minWidth\r\n        let unallocatedColWidth = totalWidthLessSTR - totalLockedColWidth;\r\n        let unallocatedViewportWidth = viewportWidth - totalLockedColWidth - strColsMinWidth;\r\n        for (i = 0; i < this.columns.length; i++) {\r\n          c = this.columns[i];\r\n          if (!c || c.hidden) { continue; }\r\n\r\n          colWidth = c.width || 0;\r\n          if (c.autoSize?.autosizeMode !== ColAutosizeMode.Locked && !this.treatAsLocked(c.autoSize)) {\r\n            if (c.autoSize?.sizeToRemaining) {\r\n              colWidth = c.minWidth || 0;\r\n            } else {\r\n              // size width proportionally to free space (we know we have enough room due to the earlier calculations)\r\n              colWidth = unallocatedViewportWidth / unallocatedColWidth * (c.autoSize?.widthPx || 0) - 1;\r\n              if (colWidth < (c.minWidth || 0)) {\r\n                colWidth = c.minWidth || 0;\r\n              }\r\n\r\n              // remove the just allocated widths from the allocation pool\r\n              unallocatedColWidth -= (c.autoSize?.widthPx || 0);\r\n              unallocatedViewportWidth -= colWidth;\r\n            }\r\n          }\r\n          if (this.treatAsLocked(c.autoSize)) {\r\n            colWidth = (c.autoSize?.widthPx || 0);\r\n            if (colWidth < (c.minWidth || 0)) {\r\n              colWidth = c.minWidth || 0;\r\n            }\r\n          }\r\n          if (c.rerenderOnResize && c.width !== colWidth) {\r\n            reRender = true;\r\n          }\r\n          c.width = colWidth;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (autosizeMode === GridAutosizeColsMode.IgnoreViewport) {\r\n      // just size columns as-is\r\n      for (i = 0; i < this.columns.length; i++) {\r\n        if (!this.columns[i] || this.columns[i].hidden) { continue; }\r\n\r\n        colWidth = this.columns[i].autoSize?.widthPx || 0;\r\n        if (this.columns[i].rerenderOnResize && this.columns[i].width !== colWidth) {\r\n          reRender = true;\r\n        }\r\n        this.columns[i].width = colWidth;\r\n      }\r\n    }\r\n\r\n    this.reRenderColumns(reRender);\r\n  }\r\n\r\n  protected LogColWidths() {\r\n    let s = 'Col Widths:';\r\n    for (let i = 0; i < this.columns.length; i++) { s += ' ' + (this.columns[i].hidden ? 'H' : this.columns[i].width); }\r\n    console.log(s);\r\n  }\r\n\r\n  protected getColAutosizeWidth(columnDef: C, colIndex: number, gridCanvas: HTMLElement, isInit: boolean, colArrayIndex: number) {\r\n    const autoSize = columnDef.autoSize as AutoSize;\r\n\r\n    // set to width as default\r\n    autoSize.widthPx = columnDef.width;\r\n    if (autoSize.autosizeMode === ColAutosizeMode.Locked\r\n      || autoSize.autosizeMode === ColAutosizeMode.Guide) {\r\n      return;\r\n    }\r\n\r\n    const dl = this.getDataLength(); // getDataItem();\r\n    const isoDateRegExp = new RegExp(/\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?Z/);\r\n\r\n    // ContentIntelligent takes settings from column data type\r\n    if (autoSize.autosizeMode === ColAutosizeMode.ContentIntelligent) {\r\n      // default to column colDataTypeOf (can be used if initially there are no data rows)\r\n      let colDataTypeOf = autoSize.colDataTypeOf;\r\n      let colDataItem: any;\r\n      if (dl > 0) {\r\n        const tempRow = this.getDataItem(0);\r\n        if (tempRow) {\r\n          colDataItem = tempRow[columnDef.field as keyof TData];\r\n\r\n          // check for dates in hiding\r\n          if (isoDateRegExp.test(colDataItem)) { colDataItem = Date.parse(colDataItem); }\r\n\r\n          colDataTypeOf = typeof colDataItem;\r\n          if (colDataTypeOf === 'object') {\r\n            if (colDataItem instanceof Date) { colDataTypeOf = 'date'; }\r\n            if (typeof moment !== 'undefined' && colDataItem instanceof moment) { colDataTypeOf = 'moment'; }\r\n          }\r\n        }\r\n      }\r\n      if (colDataTypeOf === 'boolean') {\r\n        autoSize.colValueArray = [true, false];\r\n      }\r\n      if (colDataTypeOf === 'number') {\r\n        autoSize.valueFilterMode = ValueFilterMode.GetGreatestAndSub;\r\n        autoSize.rowSelectionMode = RowSelectionMode.AllRows;\r\n      }\r\n      if (colDataTypeOf === 'string') {\r\n        autoSize.valueFilterMode = ValueFilterMode.GetLongestText;\r\n        autoSize.rowSelectionMode = RowSelectionMode.AllRows;\r\n        autoSize.allowAddlPercent = 5;\r\n      }\r\n      if (colDataTypeOf === 'date') {\r\n        autoSize.colValueArray = [new Date(2009, 8, 30, 12, 20, 20)]; // Sep 30th 2009, 12:20:20 AM\r\n      }\r\n      if (colDataTypeOf === 'moment' && typeof moment !== 'undefined') {\r\n        autoSize.colValueArray = [moment([2009, 8, 30, 12, 20, 20])]; // Sep 30th 2009, 12:20:20 AM\r\n      }\r\n    }\r\n\r\n    // at this point, the autosizeMode is effectively 'Content', so proceed to get size\r\n    let colWidth = autoSize.contentSizePx = this.getColContentSize(columnDef, colIndex, gridCanvas, isInit, colArrayIndex);\r\n\r\n    if (colWidth === 0) {\r\n      colWidth = autoSize.widthPx || 0;\r\n    }\r\n\r\n    const addlPercentMultiplier = (autoSize.allowAddlPercent ? (1 + autoSize.allowAddlPercent / 100) : 1);\r\n    colWidth = colWidth * addlPercentMultiplier + (this._options.autosizeColPaddingPx || 0);\r\n    if (columnDef.minWidth && colWidth < columnDef.minWidth) { colWidth = columnDef.minWidth; }\r\n    if (columnDef.maxWidth && colWidth > columnDef.maxWidth) { colWidth = columnDef.maxWidth; }\r\n\r\n    if (autoSize.autosizeMode === ColAutosizeMode.ContentExpandOnly || ((columnDef?.editor as any)?.ControlFillsColumn)) {\r\n      // only use content width if it's wider than the default column width (this is used for dropdowns and other fixed width controls)\r\n      if (colWidth < (columnDef.width || 0)) {\r\n        colWidth = columnDef.width || 0;\r\n      }\r\n    }\r\n    autoSize.widthPx = colWidth;\r\n  }\r\n\r\n  protected getColContentSize(columnDef: C, colIndex: number, gridCanvas: HTMLElement, isInit: boolean, colArrayIndex: number) {\r\n    const autoSize = columnDef.autoSize as AutoSize;\r\n    let widthAdjustRatio = 1;\r\n\r\n    // at this point, the autosizeMode is effectively 'Content', so proceed to get size\r\n\r\n    // get header width, if we are taking notice of it\r\n    let i: number;\r\n    let tempVal: any;\r\n    let maxLen = 0;\r\n    let maxColWidth = 0;\r\n    autoSize.headerWidthPx = 0;\r\n    if (!autoSize.ignoreHeaderText) {\r\n      autoSize.headerWidthPx = this.getColHeaderWidth(columnDef);\r\n    }\r\n    if (autoSize.headerWidthPx === 0) {\r\n      autoSize.headerWidthPx = (columnDef.width ? columnDef.width\r\n        : (columnDef.maxWidth ? columnDef.maxWidth\r\n          : (columnDef.minWidth ? columnDef.minWidth : 20)\r\n        )\r\n      );\r\n    }\r\n\r\n    if (autoSize.colValueArray) {\r\n      // if an array of values are specified, just pass them in instead of data\r\n      maxColWidth = this.getColWidth(columnDef, gridCanvas, autoSize.colValueArray as any);\r\n      return Math.max(autoSize.headerWidthPx, maxColWidth);\r\n    }\r\n\r\n    // select rows to evaluate using rowSelectionMode and rowSelectionCount\r\n    const rowInfo = {} as RowInfo;\r\n    rowInfo.colIndex = colIndex;\r\n    rowInfo.rowCount = this.getDataLength();\r\n    rowInfo.startIndex = 0;\r\n    rowInfo.endIndex = rowInfo.rowCount - 1;\r\n    rowInfo.valueArr = null;\r\n    rowInfo.getRowVal = (j: number) => this.getDataItem(j)[columnDef.field as keyof TData];\r\n\r\n    const rowSelectionMode = (isInit ? autoSize.rowSelectionModeOnInit : undefined) || autoSize.rowSelectionMode;\r\n\r\n    if (rowSelectionMode === RowSelectionMode.FirstRow) { rowInfo.endIndex = 0; }\r\n    if (rowSelectionMode === RowSelectionMode.LastRow) { rowInfo.endIndex = rowInfo.startIndex = rowInfo.rowCount - 1; }\r\n    if (rowSelectionMode === RowSelectionMode.FirstNRows) { rowInfo.endIndex = Math.min(autoSize.rowSelectionCount || 0, rowInfo.rowCount) - 1; }\r\n\r\n    // now use valueFilterMode to further filter selected rows\r\n    if (autoSize.valueFilterMode === ValueFilterMode.DeDuplicate) {\r\n      const rowsDict: any = {};\r\n      for (i = rowInfo.startIndex; i <= rowInfo.endIndex; i++) {\r\n        rowsDict[rowInfo.getRowVal(i)] = true;\r\n      }\r\n      if (Object.keys) {\r\n        rowInfo.valueArr = Object.keys(rowsDict);\r\n      } else {\r\n        rowInfo.valueArr = [];\r\n        for (const v in rowsDict) {\r\n          if (rowsDict) {\r\n            rowInfo.valueArr.push(v);\r\n          }\r\n        }\r\n      }\r\n      rowInfo.startIndex = 0;\r\n      rowInfo.endIndex = rowInfo.length - 1;\r\n    }\r\n\r\n    if (autoSize.valueFilterMode === ValueFilterMode.GetGreatestAndSub) {\r\n      // get greatest abs value in data\r\n      let maxVal;\r\n      let maxAbsVal = 0;\r\n      for (i = rowInfo.startIndex; i <= rowInfo.endIndex; i++) {\r\n        tempVal = rowInfo.getRowVal(i);\r\n        if (Math.abs(tempVal) > maxAbsVal) {\r\n          maxVal = tempVal; maxAbsVal = Math.abs(tempVal);\r\n        }\r\n      }\r\n      // now substitute a '9' for all characters (to get widest width) and convert back to a number\r\n      maxVal = '' + maxVal;\r\n      maxVal = Array(maxVal.length + 1).join('9');\r\n      maxVal = +maxVal;\r\n\r\n      rowInfo.valueArr = [maxVal];\r\n      rowInfo.startIndex = rowInfo.endIndex = 0;\r\n    }\r\n\r\n    if (autoSize.valueFilterMode === ValueFilterMode.GetLongestTextAndSub) {\r\n      // get greatest abs value in data\r\n      for (i = rowInfo.startIndex; i <= rowInfo.endIndex; i++) {\r\n        tempVal = rowInfo.getRowVal(i);\r\n        if ((tempVal || '').length > maxLen) { maxLen = tempVal.length; }\r\n      }\r\n      // now substitute a 'm' for all characters\r\n      tempVal = Array(maxLen + 1).join('m');\r\n      widthAdjustRatio = this._options.autosizeTextAvgToMWidthRatio || 0;\r\n\r\n      rowInfo.maxLen = maxLen;\r\n      rowInfo.valueArr = [tempVal];\r\n      rowInfo.startIndex = rowInfo.endIndex = 0;\r\n    }\r\n\r\n    if (autoSize.valueFilterMode === ValueFilterMode.GetLongestText) {\r\n      // get greatest abs value in data\r\n      maxLen = 0; let maxIndex = 0;\r\n      for (i = rowInfo.startIndex; i <= rowInfo.endIndex; i++) {\r\n        tempVal = rowInfo.getRowVal(i);\r\n        if ((tempVal || '').length > maxLen) { maxLen = tempVal.length; maxIndex = i; }\r\n      }\r\n      // now substitute a 'c' for all characters\r\n      tempVal = rowInfo.getRowVal(maxIndex);\r\n      rowInfo.maxLen = maxLen;\r\n      rowInfo.valueArr = [tempVal];\r\n      rowInfo.startIndex = rowInfo.endIndex = 0;\r\n    }\r\n\r\n    // !!! HACK !!!!\r\n    if (rowInfo.maxLen && rowInfo.maxLen > 30 && colArrayIndex > 1) { autoSize.sizeToRemaining = true; }\r\n    maxColWidth = this.getColWidth(columnDef, gridCanvas, rowInfo) * widthAdjustRatio;\r\n    return Math.max(autoSize.headerWidthPx, maxColWidth);\r\n  }\r\n\r\n  protected getColWidth(columnDef: C, gridCanvas: HTMLElement, rowInfo: RowInfo) {\r\n    const rowEl = Utils.createDomElement('div', { className: 'slick-row ui-widget-content' }, gridCanvas);\r\n    const cellEl = Utils.createDomElement('div', { className: 'slick-cell' }, rowEl);\r\n\r\n    cellEl.style.position = 'absolute';\r\n    cellEl.style.visibility = 'hidden';\r\n    cellEl.style.textOverflow = 'initial';\r\n    cellEl.style.whiteSpace = 'nowrap';\r\n\r\n    let i: number;\r\n    let len: number;\r\n    let max = 0;\r\n    let maxText = '';\r\n    let formatterResult: string | FormatterResultWithHtml | FormatterResultWithText | HTMLElement | DocumentFragment;\r\n    let val: any;\r\n\r\n    // get mode - if text only display, use canvas otherwise html element\r\n    let useCanvas = (columnDef.autoSize!.widthEvalMode === WidthEvalMode.TextOnly);\r\n\r\n    if (columnDef.autoSize?.widthEvalMode === WidthEvalMode.Auto) {\r\n      const noFormatter = !columnDef.formatterOverride && !columnDef.formatter;\r\n      const formatterIsText = ((columnDef?.formatterOverride as { ReturnsTextOnly: boolean })?.ReturnsTextOnly)\r\n        || (!columnDef.formatterOverride && (columnDef.formatter as any)?.ReturnsTextOnly);\r\n      useCanvas = noFormatter || formatterIsText;\r\n    }\r\n\r\n    // use canvas - very fast, but text-only\r\n    if (this.canvas_context && useCanvas) {\r\n      const style = getComputedStyle(cellEl);\r\n      this.canvas_context.font = style.fontSize + ' ' + style.fontFamily;\r\n      for (i = rowInfo.startIndex; i <= rowInfo.endIndex; i++) {\r\n        // row is either an array or values or a single value\r\n        val = (rowInfo.valueArr ? rowInfo.valueArr[i] : rowInfo.getRowVal(i));\r\n        if (columnDef.formatterOverride) {\r\n          // use formatterOverride as first preference\r\n          formatterResult = (columnDef.formatterOverride as FormatterOverrideCallback)(i, rowInfo.colIndex, val, columnDef, this.getDataItem(i), this as unknown as SlickGridModel);\r\n        } else if (columnDef.formatter) {\r\n          // otherwise, use formatter\r\n          formatterResult = columnDef.formatter(i, rowInfo.colIndex, val, columnDef, this.getDataItem(i), this as unknown as SlickGridModel);\r\n        } else {\r\n          // otherwise, use plain text\r\n          formatterResult = '' + val;\r\n        }\r\n        len = formatterResult ? this.canvas_context.measureText(formatterResult as string).width : 0;\r\n        if (len > max) {\r\n          max = len;\r\n          maxText = formatterResult as string;\r\n        }\r\n      }\r\n\r\n      cellEl.textContent = maxText;\r\n      len = cellEl.offsetWidth;\r\n\r\n      rowEl.remove();\r\n      return len;\r\n    }\r\n\r\n    for (i = rowInfo.startIndex; i <= rowInfo.endIndex; i++) {\r\n      val = (rowInfo.valueArr ? rowInfo.valueArr[i] : rowInfo.getRowVal(i));\r\n      if (columnDef.formatterOverride) {\r\n        // use formatterOverride as first preference\r\n        formatterResult = (columnDef.formatterOverride as FormatterOverrideCallback)(i, rowInfo.colIndex, val, columnDef, this.getDataItem(i), this as unknown as SlickGridModel);\r\n      } else if (columnDef.formatter) {\r\n        // otherwise, use formatter\r\n        formatterResult = columnDef.formatter(i, rowInfo.colIndex, val, columnDef, this.getDataItem(i), this as unknown as SlickGridModel);\r\n      } else {\r\n        // otherwise, use plain text\r\n        formatterResult = '' + val;\r\n      }\r\n      this.applyFormatResultToCellNode(formatterResult, cellEl);\r\n      len = cellEl.offsetWidth;\r\n      if (len > max) { max = len; }\r\n    }\r\n\r\n    rowEl.remove();\r\n    return max;\r\n  }\r\n\r\n  protected getColHeaderWidth(columnDef: C) {\r\n    let width = 0;\r\n    // if (columnDef && (!columnDef.resizable || columnDef._autoCalcWidth === true)) { return; }\r\n    const headerColElId = this.getUID() + columnDef.id;\r\n    let headerColEl = document.getElementById(headerColElId) as HTMLElement;\r\n    const dummyHeaderColElId = `${headerColElId}_`;\r\n    const clone = headerColEl.cloneNode(true) as HTMLElement;\r\n    if (headerColEl) {\r\n      // headers have been created, use clone technique\r\n      clone.id = dummyHeaderColElId;\r\n      clone.style.cssText = 'position: absolute; visibility: hidden;right: auto;text-overflow: initial;white-space: nowrap;';\r\n      headerColEl.parentNode!.insertBefore(clone, headerColEl);\r\n      width = clone.offsetWidth;\r\n      clone.parentNode!.removeChild(clone);\r\n    } else {\r\n      // headers have not yet been created, create a new node\r\n      const header = this.getHeader(columnDef) as HTMLElement;\r\n      headerColEl = Utils.createDomElement('div', { id: dummyHeaderColElId, className: 'ui-state-default slick-state-default slick-header-column' }, header);\r\n      const colNameElm = Utils.createDomElement('span', { className: 'slick-column-name' }, headerColEl);\r\n      this.applyHtmlCode(colNameElm, columnDef.name!);\r\n      clone.style.cssText = 'position: absolute; visibility: hidden;right: auto;text-overflow: initial;white-space: nowrap;';\r\n      if (columnDef.headerCssClass) {\r\n        headerColEl.classList.add(...Utils.classNameToList(columnDef.headerCssClass));\r\n      }\r\n      width = headerColEl.offsetWidth;\r\n      header.removeChild(headerColEl);\r\n    }\r\n    return width;\r\n  }\r\n\r\n  protected legacyAutosizeColumns() {\r\n    let i;\r\n    let c: C | undefined;\r\n    let shrinkLeeway = 0;\r\n    let total = 0;\r\n    let prevTotal = 0;\r\n    const widths: number[] = [];\r\n    const availWidth = this.viewportHasVScroll ? this.viewportW - (this.scrollbarDimensions?.width ?? 0) : this.viewportW;\r\n\r\n    for (i = 0; i < this.columns.length; i++) {\r\n      c = this.columns[i];\r\n      if (!c || c.hidden) {\r\n        widths.push(0);\r\n        continue;\r\n      }\r\n      widths.push(c.width || 0);\r\n      total += c.width || 0;\r\n      if (c.resizable) {\r\n        shrinkLeeway += (c.width || 0) - Math.max((c.minWidth || 0), this.absoluteColumnMinWidth);\r\n      }\r\n    }\r\n\r\n    // shrink\r\n    prevTotal = total;\r\n    while (total > availWidth && shrinkLeeway) {\r\n      const shrinkProportion = (total - availWidth) / shrinkLeeway;\r\n      for (i = 0; i < this.columns.length && total > availWidth; i++) {\r\n        c = this.columns[i];\r\n        if (!c || c.hidden) { continue; }\r\n        const width = widths[i];\r\n        if (!c.resizable || width <= c.minWidth! || width <= this.absoluteColumnMinWidth) {\r\n          continue;\r\n        }\r\n        const absMinWidth = Math.max(c.minWidth!, this.absoluteColumnMinWidth);\r\n        let shrinkSize = Math.floor(shrinkProportion * (width - absMinWidth)) || 1;\r\n        shrinkSize = Math.min(shrinkSize, width - absMinWidth);\r\n        total -= shrinkSize;\r\n        shrinkLeeway -= shrinkSize;\r\n        widths[i] -= shrinkSize;\r\n      }\r\n      if (prevTotal <= total) {  // avoid infinite loop\r\n        break;\r\n      }\r\n      prevTotal = total;\r\n    }\r\n\r\n    // grow\r\n    prevTotal = total;\r\n    while (total < availWidth) {\r\n      const growProportion = availWidth / total;\r\n      for (i = 0; i < this.columns.length && total < availWidth; i++) {\r\n        c = this.columns[i];\r\n        if (!c || c.hidden) { continue; }\r\n        const currentWidth = widths[i];\r\n        let growSize;\r\n\r\n        if (!c.resizable || c.maxWidth! <= currentWidth) {\r\n          growSize = 0;\r\n        } else {\r\n          growSize = Math.min(Math.floor(growProportion * currentWidth) - currentWidth, (c.maxWidth! - currentWidth) || 1000000) || 1;\r\n        }\r\n        total += growSize;\r\n        widths[i] += (total <= availWidth ? growSize : 0);\r\n      }\r\n      if (prevTotal >= total) {  // avoid infinite loop\r\n        break;\r\n      }\r\n      prevTotal = total;\r\n    }\r\n\r\n    let reRender = false;\r\n    for (i = 0; i < this.columns.length; i++) {\r\n      if (!c || c.hidden) { continue; }\r\n\r\n      if (this.columns[i].rerenderOnResize && this.columns[i].width !== widths[i]) {\r\n        reRender = true;\r\n      }\r\n      this.columns[i].width = widths[i];\r\n    }\r\n\r\n    this.reRenderColumns(reRender);\r\n  }\r\n\r\n  /**\r\n   * Apply Columns Widths in the UI and optionally invalidate & re-render the columns when specified\r\n   * @param {Boolean} shouldReRender - should we invalidate and re-render the grid?\r\n   */\r\n  reRenderColumns(reRender?: boolean) {\r\n    this.applyColumnHeaderWidths();\r\n    this.updateCanvasWidth(true);\r\n\r\n    this.trigger(this.onAutosizeColumns, { columns: this.columns });\r\n\r\n    if (reRender) {\r\n      this.invalidateAllRows();\r\n      this.render();\r\n    }\r\n  }\r\n\r\n  getVisibleColumns() {\r\n    return this.columns.filter(c => !c.hidden);\r\n  }\r\n\r\n  //////////////////////////////////////////////////////////////////////////////////////////////\r\n  // General\r\n  //////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n  protected trigger<ArgType = any>(evt: SlickEvent_, args?: ArgType, e?: Event | SlickEventData_) {\r\n    const event: SlickEventData_ = (e || new SlickEventData(e, args)) as SlickEventData_;\r\n    const eventArgs = (args || {}) as ArgType & { grid: SlickGrid<TData, C, O>; };\r\n    eventArgs.grid = this;\r\n    return evt.notify(eventArgs, event, this);\r\n  }\r\n\r\n  /** Get Editor lock */\r\n  getEditorLock() {\r\n    return this._options.editorLock as SlickEditorLock;\r\n  }\r\n\r\n  /** Get Editor Controller */\r\n  getEditController() {\r\n    return this.editController;\r\n  }\r\n\r\n  /**\r\n   * Returns the index of a column with a given id. Since columns can be reordered by the user, this can be used to get the column definition independent of the order:\r\n   * @param {String | Number} id A column id.\r\n   */\r\n  getColumnIndex(id: number | string): number {\r\n    return this.columnsById[id];\r\n  }\r\n\r\n  protected applyColumnHeaderWidths() {\r\n    if (!this.initialized) {\r\n      return;\r\n    }\r\n\r\n    let columnIndex = 0;\r\n    const vc = this.getVisibleColumns();\r\n    this._headers.forEach((header) => {\r\n      for (let i = 0; i < header.children.length; i++, columnIndex++) {\r\n        const h = header.children[i] as HTMLElement;\r\n        const col = vc[columnIndex] || {};\r\n        const width = (col.width || 0) - this.headerColumnWidthDiff;\r\n        if (Utils.width(h) !== width) {\r\n          Utils.width(h, width);\r\n        }\r\n      }\r\n    });\r\n\r\n    this.updateColumnCaches();\r\n  }\r\n\r\n  protected applyColumnWidths() {\r\n    let x = 0;\r\n    let w = 0;\r\n    let rule: any;\r\n    for (let i = 0; i < this.columns.length; i++) {\r\n      if (!this.columns[i]?.hidden) {\r\n        w = this.columns[i].width || 0;\r\n\r\n        rule = this.getColumnCssRules(i);\r\n        rule.left.style.left = `${x}px`;\r\n        rule.right.style.right = (((this._options.frozenColumn !== -1 && i > this._options.frozenColumn!) ? this.canvasWidthR : this.canvasWidthL) - x - w) + 'px';\r\n\r\n        // If this column is frozen, reset the css left value since the\r\n        // column starts in a new viewport.\r\n        if (this._options.frozenColumn !== i) {\r\n          x += this.columns[i].width!;\r\n        }\r\n      }\r\n      if (this._options.frozenColumn === i) {\r\n        x = 0;\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Accepts a columnId string and an ascending boolean. Applies a sort glyph in either ascending or descending form to the header of the column. Note that this does not actually sort the column. It only adds the sort glyph to the header.\r\n   * @param {String | Number} columnId\r\n   * @param {Boolean} ascending\r\n   */\r\n  setSortColumn(columnId: number | string, ascending: boolean) {\r\n    this.setSortColumns([{ columnId, sortAsc: ascending }]);\r\n  }\r\n\r\n  /**\r\n   * Get column by index\r\n   * @param {Number} id - column index\r\n   * @returns\r\n   */\r\n  getColumnByIndex(id: number) {\r\n    let result: HTMLElement | undefined;\r\n    this._headers.every((header) => {\r\n      const length = header.children.length;\r\n      if (id < length) {\r\n        result = header.children[id] as HTMLElement;\r\n        return false;\r\n      }\r\n      id -= length;\r\n      return true;\r\n    });\r\n\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Accepts an array of objects in the form [ { columnId: [string], sortAsc: [boolean] }, ... ]. When called, this will apply a sort glyph in either ascending or descending form to the header of each column specified in the array. Note that this does not actually sort the column. It only adds the sort glyph to the header\r\n   * @param {ColumnSort[]} cols - column sort\r\n   */\r\n  setSortColumns(cols: ColumnSort[]) {\r\n    this.sortColumns = cols;\r\n\r\n    const numberCols = this._options.numberedMultiColumnSort && this.sortColumns.length > 1;\r\n    this._headers.forEach((header) => {\r\n      let indicators = header.querySelectorAll('.slick-header-column-sorted');\r\n      indicators.forEach((indicator) => {\r\n        indicator.classList.remove('slick-header-column-sorted');\r\n      });\r\n\r\n      indicators = header.querySelectorAll('.slick-sort-indicator');\r\n      indicators.forEach((indicator) => {\r\n        indicator.classList.remove('slick-sort-indicator-asc');\r\n        indicator.classList.remove('slick-sort-indicator-desc');\r\n      });\r\n      indicators = header.querySelectorAll('.slick-sort-indicator-numbered');\r\n      indicators.forEach((el) => {\r\n        el.textContent = '';\r\n      });\r\n    });\r\n\r\n    let i = 1;\r\n    this.sortColumns.forEach((col) => {\r\n      if (!Utils.isDefined(col.sortAsc)) {\r\n        col.sortAsc = true;\r\n      }\r\n\r\n      const columnIndex = this.getColumnIndex(col.columnId);\r\n      if (Utils.isDefined(columnIndex)) {\r\n        const column = this.getColumnByIndex(columnIndex);\r\n        if (column) {\r\n          column.classList.add('slick-header-column-sorted');\r\n          let indicator = column.querySelector('.slick-sort-indicator');\r\n          indicator?.classList.add(col.sortAsc ? 'slick-sort-indicator-asc' : 'slick-sort-indicator-desc');\r\n\r\n          if (numberCols) {\r\n            indicator = column.querySelector('.slick-sort-indicator-numbered');\r\n            if (indicator) {\r\n              indicator.textContent = String(i);\r\n            }\r\n          }\r\n        }\r\n      }\r\n      i++;\r\n    });\r\n  }\r\n\r\n  /** Get sorted columns **/\r\n  getSortColumns(): ColumnSort[] {\r\n    return this.sortColumns;\r\n  }\r\n\r\n  protected handleSelectedRangesChanged(e: SlickEventData_, ranges: SlickRange_[]) {\r\n    const ne = e.getNativeEvent<CustomEvent>();\r\n    const previousSelectedRows = this.selectedRows.slice(0); // shallow copy previously selected rows for later comparison\r\n    this.selectedRows = [];\r\n    const hash: CssStyleHash = {};\r\n    for (let i = 0; i < ranges.length; i++) {\r\n      for (let j = ranges[i].fromRow; j <= ranges[i].toRow; j++) {\r\n        if (!hash[j]) {  // prevent duplicates\r\n          this.selectedRows.push(j);\r\n          hash[j] = {};\r\n        }\r\n        for (let k = ranges[i].fromCell; k <= ranges[i].toCell; k++) {\r\n          if (this.canCellBeSelected(j, k)) {\r\n            hash[j][this.columns[k].id] = this._options.selectedCellCssClass;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    this.setCellCssStyles(this._options.selectedCellCssClass || '', hash);\r\n\r\n    if (this.simpleArrayEquals(previousSelectedRows, this.selectedRows)) {\r\n      const caller = ne?.detail?.caller ?? 'click';\r\n      const newSelectedAdditions = this.getSelectedRows().filter((i) => previousSelectedRows.indexOf(i) < 0);\r\n      const newSelectedDeletions = previousSelectedRows.filter((i) => this.getSelectedRows().indexOf(i) < 0);\r\n\r\n      this.trigger(this.onSelectedRowsChanged, {\r\n        rows: this.getSelectedRows(),\r\n        previousSelectedRows,\r\n        caller,\r\n        changedSelectedRows: newSelectedAdditions,\r\n        changedUnselectedRows: newSelectedDeletions\r\n      }, e);\r\n    }\r\n  }\r\n\r\n  // compare 2 simple arrays (integers or strings only, do not use to compare object arrays)\r\n  simpleArrayEquals(arr1: any[], arr2: any[]) {\r\n    return Array.isArray(arr1) && Array.isArray(arr2) && arr2.sort().toString() !== arr1.sort().toString();\r\n  }\r\n\r\n  /** Returns an array of column definitions. */\r\n  getColumns() {\r\n    return this.columns;\r\n  }\r\n\r\n  protected updateColumnCaches() {\r\n    // Pre-calculate cell boundaries.\r\n    this.columnPosLeft = [];\r\n    this.columnPosRight = [];\r\n    let x = 0;\r\n    for (let i = 0, ii = this.columns.length; i < ii; i++) {\r\n      if (!this.columns[i] || this.columns[i].hidden) { continue; }\r\n\r\n      this.columnPosLeft[i] = x;\r\n      this.columnPosRight[i] = x + (this.columns[i].width || 0);\r\n\r\n      if (this._options.frozenColumn === i) {\r\n        x = 0;\r\n      } else {\r\n        x += this.columns[i].width || 0;\r\n      }\r\n    }\r\n  }\r\n\r\n  protected updateColumnProps() {\r\n    this.columnsById = {};\r\n    for (let i = 0; i < this.columns.length; i++) {\r\n      let m: C = this.columns[i];\r\n      if (m.width) {\r\n        m.widthRequest = m.width;\r\n      }\r\n\r\n      if (this._options.mixinDefaults) {\r\n        Utils.applyDefaults(m, this._columnDefaults);\r\n        if (!m.autoSize) { m.autoSize = {}; }\r\n        Utils.applyDefaults(m.autoSize, this._columnAutosizeDefaults);\r\n      } else {\r\n        m = this.columns[i] = Utils.extend({}, this._columnDefaults, m);\r\n        m.autoSize = Utils.extend({}, this._columnAutosizeDefaults, m.autoSize);\r\n      }\r\n\r\n      this.columnsById[m.id] = i;\r\n      if (m.minWidth && ((m.width || 0) < m.minWidth)) {\r\n        m.width = m.minWidth;\r\n      }\r\n      if (m.maxWidth && ((m.width || 0) > m.maxWidth)) {\r\n        m.width = m.maxWidth;\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Sets grid columns. Column headers will be recreated and all rendered rows will be removed. To rerender the grid (if necessary), call render().\r\n   * @param {Column[]} columnDefinitions An array of column definitions.\r\n   */\r\n  setColumns(columnDefinitions: C[]) {\r\n    this.trigger(this.onBeforeSetColumns, { previousColumns: this.columns, newColumns: columnDefinitions, grid: this });\r\n    this.columns = columnDefinitions;\r\n    this.updateColumnsInternal();\r\n  }\r\n\r\n  /** Update columns for when a hidden property has changed but the column list itself has not changed. */\r\n  updateColumns() {\r\n    this.trigger(this.onBeforeUpdateColumns, { columns: this.columns, grid: this });\r\n    this.updateColumnsInternal();\r\n  }\r\n\r\n  protected updateColumnsInternal() {\r\n    this.updateColumnProps();\r\n    this.updateColumnCaches();\r\n\r\n    if (this.initialized) {\r\n      this.setPaneVisibility();\r\n      this.setOverflow();\r\n\r\n      this.invalidateAllRows();\r\n      this.createColumnHeaders();\r\n      this.createColumnFooter();\r\n      this.removeCssRules();\r\n      this.createCssRules();\r\n      this.resizeCanvas();\r\n      this.updateCanvasWidth();\r\n      this.applyColumnHeaderWidths();\r\n      this.applyColumnWidths();\r\n      this.handleScroll();\r\n      this.getSelectionModel()?.refreshSelections();\r\n    }\r\n  }\r\n\r\n  /** Returns an object containing all of the Grid options set on the grid. See a list of Grid Options here.  */\r\n  getOptions() {\r\n    return this._options;\r\n  }\r\n\r\n  /**\r\n   * Extends grid options with a given hash. If an there is an active edit, the grid will attempt to commit the changes and only continue if the attempt succeeds.\r\n   * @param {Object} options - an object with configuration options.\r\n   * @param {Boolean} [suppressRender] - do we want to supress the grid re-rendering? (defaults to false)\r\n   * @param {Boolean} [suppressColumnSet] - do we want to supress the columns set, via \"setColumns()\" method? (defaults to false)\r\n   * @param {Boolean} [suppressSetOverflow] - do we want to suppress the call to `setOverflow`\r\n   */\r\n  setOptions(newOptions: Partial<O>, suppressRender?: boolean, suppressColumnSet?: boolean, suppressSetOverflow?: boolean): void {\r\n    this.prepareForOptionsChange();\r\n\r\n    if (this._options.enableAddRow !== newOptions.enableAddRow) {\r\n      this.invalidateRow(this.getDataLength());\r\n    }\r\n\r\n    // before applying column freeze, we need our viewports to be scrolled back to left to avoid misaligned column headers\r\n    if (newOptions.frozenColumn !== undefined && newOptions.frozenColumn >= 0) {\r\n      this.getViewports().forEach(vp => vp.scrollLeft = 0);\r\n      this.handleScroll(); // trigger scroll to realign column headers as well\r\n    }\r\n\r\n    const originalOptions = Utils.extend(true, {}, this._options);\r\n    this._options = Utils.extend(this._options, newOptions);\r\n    this.trigger(this.onSetOptions, { optionsBefore: originalOptions, optionsAfter: this._options });\r\n\r\n    this.internal_setOptions(suppressRender, suppressColumnSet, suppressSetOverflow);\r\n  }\r\n\r\n  /**\r\n   * If option.mixinDefaults is true then external code maintains a reference to the options object. In this case there is no need\r\n   * to call setOptions() - changes can be made directly to the object. However setOptions() also performs some recalibration of the\r\n   * grid in reaction to changed options. activateChangedOptions call the same recalibration routines as setOptions() would have.\r\n   * @param {Boolean} [suppressRender] - do we want to supress the grid re-rendering? (defaults to false)\r\n   * @param {Boolean} [suppressColumnSet] - do we want to supress the columns set, via \"setColumns()\" method? (defaults to false)\r\n   * @param {Boolean} [suppressSetOverflow] - do we want to suppress the call to `setOverflow`\r\n   */\r\n  activateChangedOptions(suppressRender?: boolean, suppressColumnSet?: boolean, suppressSetOverflow?: boolean): void {\r\n    this.prepareForOptionsChange();\r\n    this.invalidateRow(this.getDataLength());\r\n\r\n    this.trigger(this.onActivateChangedOptions, { options: this._options });\r\n\r\n    this.internal_setOptions(suppressRender, suppressColumnSet, suppressSetOverflow);\r\n  }\r\n\r\n  protected prepareForOptionsChange() {\r\n    if (!this.getEditorLock().commitCurrentEdit()) {\r\n      return;\r\n    }\r\n\r\n    this.makeActiveCellNormal();\r\n  }\r\n\r\n  protected internal_setOptions(suppressRender?: boolean, suppressColumnSet?: boolean, suppressSetOverflow?: boolean): void {\r\n    if (this._options.showColumnHeader !== undefined) {\r\n      this.setColumnHeaderVisibility(this._options.showColumnHeader);\r\n    }\r\n    this.validateAndEnforceOptions();\r\n    this.setFrozenOptions();\r\n\r\n    // when user changed frozen row option, we need to force a recalculation of each viewport heights\r\n    if (this._options.frozenBottom !== undefined) {\r\n      this.enforceFrozenRowHeightRecalc = true;\r\n    }\r\n\r\n    this._viewport.forEach((view) => {\r\n      view.style.overflowY = this._options.autoHeight ? 'hidden' : 'auto';\r\n    });\r\n    if (!suppressRender) {\r\n      this.render();\r\n    }\r\n\r\n    this.setScroller();\r\n    if (!suppressSetOverflow) {\r\n      this.setOverflow();\r\n    }\r\n\r\n    if (!suppressColumnSet) {\r\n      this.setColumns(this.columns);\r\n    }\r\n\r\n    if (this._options.enableMouseWheelScrollHandler && this._viewport && (!this.slickMouseWheelInstances || this.slickMouseWheelInstances.length === 0)) {\r\n      this._viewport.forEach((view) => {\r\n        this.slickMouseWheelInstances.push(MouseWheel({\r\n          element: view,\r\n          onMouseWheel: this.handleMouseWheel.bind(this)\r\n        }));\r\n      });\r\n    } else if (this._options.enableMouseWheelScrollHandler === false) {\r\n      this.destroyAllInstances(this.slickMouseWheelInstances); // remove scroll handler when option is disable\r\n    }\r\n  }\r\n\r\n  validateAndEnforceOptions(): void {\r\n    if (this._options.autoHeight) {\r\n      this._options.leaveSpaceForNewRows = false;\r\n    }\r\n    if (this._options.forceFitColumns) {\r\n      this._options.autosizeColsMode = GridAutosizeColsMode.LegacyForceFit;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Sets a new source for databinding and removes all rendered rows. Note that this doesn't render the new rows - you can follow it with a call to render() to do that.\r\n   * @param {CustomDataView|Array<*>} newData New databinding source using a regular JavaScript array.. or a custom object exposing getItem(index) and getLength() functions.\r\n   * @param {Number} [scrollToTop] If true, the grid will reset the vertical scroll position to the top of the grid.\r\n   */\r\n  setData(newData: CustomDataView<TData> | TData[], scrollToTop?: boolean) {\r\n    this.data = newData;\r\n    this.invalidateAllRows();\r\n    this.updateRowCount();\r\n    if (scrollToTop) {\r\n      this.scrollTo(0);\r\n    }\r\n  }\r\n\r\n  /** Returns an array of every data object, unless you're using DataView in which case it returns a DataView object. */\r\n  getData<U extends CustomDataView<TData> | U[]>(): U {\r\n    return this.data as U;\r\n  }\r\n\r\n  /** Returns the size of the databinding source. */\r\n  getDataLength() {\r\n    if ((this.data as CustomDataView<TData>).getLength) {\r\n      return (this.data as CustomDataView<TData>).getLength();\r\n    } else {\r\n      return (this.data as TData[])?.length ?? 0;\r\n    }\r\n  }\r\n\r\n  protected getDataLengthIncludingAddNew() {\r\n    return this.getDataLength() + (!this._options.enableAddRow ? 0\r\n      : (!this.pagingActive || this.pagingIsLastPage ? 1 : 0)\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Returns the databinding item at a given position.\r\n   * @param {Number} index Item row index.\r\n   */\r\n  getDataItem(i: number): TData {\r\n    if ((this.data as CustomDataView).getItem) {\r\n      return (this.data as CustomDataView<TData>).getItem(i) as TData;\r\n    } else {\r\n      return (this.data as TData[])[i] as TData;\r\n    }\r\n  }\r\n\r\n  /** Get Top Panel DOM element */\r\n  getTopPanel() {\r\n    return this._topPanels[0];\r\n  }\r\n\r\n  /** Get Top Panels (left/right) DOM element */\r\n  getTopPanels() {\r\n    return this._topPanels;\r\n  }\r\n\r\n  /** Are we using a DataView? */\r\n  hasDataView() {\r\n    return !Array.isArray(this.data);\r\n  }\r\n\r\n  protected togglePanelVisibility(option: 'showTopPanel' | 'showHeaderRow' | 'showColumnHeader' | 'showFooterRow' | 'showPreHeaderPanel' | 'showTopHeaderPanel', container: HTMLElement | HTMLElement[], visible?: boolean, animate?: boolean) {\r\n    const animated = (animate === false) ? false : true;\r\n\r\n    if (this._options[option] !== visible) {\r\n      this._options[option] = visible as boolean;\r\n      if (visible) {\r\n        if (animated) {\r\n          Utils.slideDown(container, this.resizeCanvas.bind(this));\r\n          return;\r\n        }\r\n        Utils.show(container);\r\n        this.resizeCanvas();\r\n      } else {\r\n        if (animated) {\r\n          Utils.slideUp(container, this.resizeCanvas.bind(this));\r\n          return;\r\n        }\r\n        Utils.hide(container);\r\n        this.resizeCanvas();\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Set the Top Panel Visibility and optionally enable/disable animation (enabled by default)\r\n   * @param {Boolean} [visible] - optionally set if top panel is visible or not\r\n   * @param {Boolean} [animate] - optionally enable an animation while toggling the panel\r\n   */\r\n  setTopPanelVisibility(visible?: boolean, animate?: boolean) {\r\n    this.togglePanelVisibility('showTopPanel', this._topPanelScrollers, visible, animate);\r\n  }\r\n\r\n  /**\r\n   * Set the Header Row Visibility and optionally enable/disable animation (enabled by default)\r\n   * @param {Boolean} [visible] - optionally set if header row panel is visible or not\r\n   * @param {Boolean} [animate] - optionally enable an animation while toggling the panel\r\n   */\r\n  setHeaderRowVisibility(visible?: boolean, animate?: boolean) {\r\n    this.togglePanelVisibility('showHeaderRow', this._headerRowScroller, visible, animate);\r\n  }\r\n\r\n  /**\r\n   * Set the Column Header Visibility and optionally enable/disable animation (enabled by default)\r\n   * @param {Boolean} [visible] - optionally set if column header is visible or not\r\n   * @param {Boolean} [animate] - optionally enable an animation while toggling the panel\r\n   */\r\n  setColumnHeaderVisibility(visible?: boolean, animate?: boolean) {\r\n    this.togglePanelVisibility('showColumnHeader', this._headerScroller, visible, animate);\r\n  }\r\n\r\n  /**\r\n   * Set the Footer Visibility and optionally enable/disable animation (enabled by default)\r\n   * @param {Boolean} [visible] - optionally set if footer row panel is visible or not\r\n   * @param {Boolean} [animate] - optionally enable an animation while toggling the panel\r\n   */\r\n  setFooterRowVisibility(visible?: boolean, animate?: boolean) {\r\n    this.togglePanelVisibility('showFooterRow', this._footerRowScroller, visible, animate);\r\n  }\r\n\r\n  /**\r\n   * Set the Pre-Header Visibility and optionally enable/disable animation (enabled by default)\r\n   * @param {Boolean} [visible] - optionally set if pre-header panel is visible or not\r\n   * @param {Boolean} [animate] - optionally enable an animation while toggling the panel\r\n   */\r\n  setPreHeaderPanelVisibility(visible?: boolean, animate?: boolean) {\r\n    this.togglePanelVisibility('showPreHeaderPanel', [this._preHeaderPanelScroller, this._preHeaderPanelScrollerR], visible, animate);\r\n  }\r\n\r\n  /**\r\n   * Set the Top-Header Visibility\r\n   * @param {Boolean} [visible] - optionally set if top-header panel is visible or not\r\n   */\r\n  setTopHeaderPanelVisibility(visible?: boolean) {\r\n    this.togglePanelVisibility('showTopHeaderPanel', this._topHeaderPanelScroller, visible);\r\n  }\r\n\r\n  /** Get Grid Canvas Node DOM Element */\r\n  getContainerNode() {\r\n    return this._container;\r\n  }\r\n\r\n  //////////////////////////////////////////////////////////////////////////////////////////////\r\n  // Rendering / Scrolling\r\n\r\n  protected getRowTop(row: number) {\r\n    return Math.round(this._options.rowHeight! * row - this.offset);\r\n  }\r\n\r\n  protected getRowFromPosition(y: number) {\r\n    return Math.floor((y + this.offset) / this._options.rowHeight!);\r\n  }\r\n\r\n  /**\r\n   * Scroll to an Y position in the grid\r\n   * @param {Number} y\r\n   */\r\n  scrollTo(y: number) {\r\n    y = Math.max(y, 0);\r\n    y = Math.min(y, (this.th || 0) - (Utils.height(this._viewportScrollContainerY) as number) + ((this.viewportHasHScroll || this.hasFrozenColumns()) ? (this.scrollbarDimensions?.height ?? 0) : 0));\r\n\r\n    const oldOffset = this.offset;\r\n    this.offset = Math.round(this.page * (this.cj || 0));\r\n    this.page = Math.min((this.n || 0) - 1, Math.floor(y / (this.ph || 0)));\r\n    const newScrollTop = (y - this.offset) as number;\r\n\r\n    if (this.offset !== oldOffset) {\r\n      const range = this.getVisibleRange(newScrollTop);\r\n      this.cleanupRows(range);\r\n      this.updateRowPositions();\r\n    }\r\n\r\n    if (this.prevScrollTop !== newScrollTop) {\r\n      this.vScrollDir = (this.prevScrollTop + oldOffset < newScrollTop + this.offset) ? 1 : -1;\r\n      this.lastRenderedScrollTop = (this.scrollTop = this.prevScrollTop = newScrollTop);\r\n\r\n      if (this.hasFrozenColumns()) {\r\n        this._viewportTopL.scrollTop = newScrollTop;\r\n      }\r\n\r\n      if (this.hasFrozenRows) {\r\n        this._viewportBottomL.scrollTop = this._viewportBottomR.scrollTop = newScrollTop;\r\n      }\r\n\r\n      if (this._viewportScrollContainerY) {\r\n        this._viewportScrollContainerY.scrollTop = newScrollTop;\r\n      }\r\n\r\n      this.trigger(this.onViewportChanged, {});\r\n    }\r\n  }\r\n\r\n  protected defaultFormatter(_row: number, _cell: number, value: any) {\r\n    if (!Utils.isDefined(value)) {\r\n      return '';\r\n    } else {\r\n      return (value + '').replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\r\n    }\r\n  }\r\n\r\n  protected getFormatter(row: number, column: C): Formatter {\r\n    const rowMetadata = (this.data as CustomDataView<TData>)?.getItemMetadata?.(row);\r\n\r\n    // look up by id, then index\r\n    const columnOverrides = rowMetadata?.columns &&\r\n      (rowMetadata.columns[column.id] || rowMetadata.columns[this.getColumnIndex(column.id)]);\r\n\r\n    return ((columnOverrides?.formatter) ||\r\n      (rowMetadata?.formatter) ||\r\n      column.formatter ||\r\n      (this._options.formatterFactory?.getFormatter(column)) ||\r\n      this._options.defaultFormatter) as Formatter;\r\n  }\r\n\r\n  protected getEditor(row: number, cell: number): Editor | EditorConstructor | null | undefined {\r\n    const column = this.columns[cell];\r\n    const rowMetadata = (this.data as CustomDataView<TData>)?.getItemMetadata?.(row);\r\n    const columnMetadata = rowMetadata?.columns;\r\n\r\n    if (columnMetadata?.[column.id]?.editor !== undefined) {\r\n      return columnMetadata[column.id].editor;\r\n    }\r\n    if (columnMetadata?.[cell]?.editor !== undefined) {\r\n      return columnMetadata[cell].editor;\r\n    }\r\n\r\n    return (column.editor || (this._options?.editorFactory?.getEditor(column)));\r\n  }\r\n\r\n  protected getDataItemValueForColumn(item: TData, columnDef: C) {\r\n    if (this._options.dataItemColumnValueExtractor) {\r\n      return this._options.dataItemColumnValueExtractor(item, columnDef) as TData;\r\n    }\r\n    return item[columnDef.field as keyof TData];\r\n  }\r\n\r\n  protected appendRowHtml(divArrayL: HTMLElement[], divArrayR: HTMLElement[], row: number, range: CellViewportRange, dataLength: number) {\r\n    const d = this.getDataItem(row);\r\n    const dataLoading = row < dataLength && !d;\r\n    let rowCss = 'slick-row' +\r\n      (this.hasFrozenRows && row <= this._options.frozenRow! ? ' frozen' : '') +\r\n      (dataLoading ? ' loading' : '') +\r\n      (row === this.activeRow && this._options.showCellSelection ? ' active' : '') +\r\n      (row % 2 === 1 ? ' odd' : ' even');\r\n\r\n    if (!d) {\r\n      rowCss += ' ' + this._options.addNewRowCssClass;\r\n    }\r\n\r\n    const metadata = (this.data as CustomDataView<TData>)?.getItemMetadata?.(row);\r\n\r\n    if (metadata?.cssClasses) {\r\n      rowCss += ' ' + metadata.cssClasses;\r\n    }\r\n\r\n    const rowDiv = Utils.createDomElement('div', { className: `ui-widget-content ${rowCss}`, role: 'row' });\r\n    const frozenRowOffset = this.getFrozenRowOffset(row);\r\n    const topOffset = this.getRowTop(row) - frozenRowOffset;\r\n    if (this._options.rowTopOffsetRenderType === 'transform') {\r\n      rowDiv.style.transform = `translateY(${topOffset}px)`;\r\n    } else {\r\n      rowDiv.style.top = `${topOffset}px`; // default to `top: {offset}px`\r\n    }\r\n\r\n    let rowDivR: HTMLElement | undefined;\r\n    divArrayL.push(rowDiv);\r\n    if (this.hasFrozenColumns()) {\r\n      // it has to be a deep copy otherwise we will have issues with pass by reference in js since\r\n      // attempting to add the same element to 2 different arrays will just move 1 item to the other array\r\n      rowDivR = rowDiv.cloneNode(true) as HTMLElement;\r\n      divArrayR.push(rowDivR);\r\n    }\r\n\r\n    let colspan: number | string;\r\n    let m: C;\r\n    for (let i = 0, ii = this.columns.length; i < ii; i++) {\r\n      m = this.columns[i];\r\n      if (!m || m.hidden) { continue; }\r\n\r\n      colspan = 1;\r\n      if (metadata?.columns) {\r\n        const columnData = metadata.columns[m.id] || metadata.columns[i];\r\n        colspan = columnData?.colspan || 1;\r\n        if (colspan === '*') {\r\n          colspan = ii - i;\r\n        }\r\n      }\r\n\r\n      // Do not render cells outside of the viewport.\r\n      if (this.columnPosRight[Math.min(ii - 1, i + (colspan as number) - 1)] > range.leftPx) {\r\n        if (!m.alwaysRenderColumn && this.columnPosLeft[i] > range.rightPx) {\r\n          // All columns to the right are outside the range.\r\n          break;\r\n        }\r\n\r\n        if (this.hasFrozenColumns() && (i > this._options.frozenColumn!)) {\r\n          this.appendCellHtml(rowDivR!, row, i, (colspan as number), d);\r\n        } else {\r\n          this.appendCellHtml(rowDiv, row, i, (colspan as number), d);\r\n        }\r\n      } else if (m.alwaysRenderColumn || (this.hasFrozenColumns() && i <= this._options.frozenColumn!)) {\r\n        this.appendCellHtml(rowDiv, row, i, (colspan as number), d);\r\n      }\r\n\r\n      if ((colspan as number) > 1) {\r\n        i += ((colspan as number) - 1);\r\n      }\r\n    }\r\n  }\r\n\r\n  protected appendCellHtml(divRow: HTMLElement, row: number, cell: number, colspan: number, item: TData) {\r\n    // divRow: the html element to append items too\r\n    // row, cell: row and column index\r\n    // colspan: HTML colspan\r\n    // item: grid data for row\r\n\r\n    const m = this.columns[cell];\r\n    let cellCss = 'slick-cell l' + cell + ' r' + Math.min(this.columns.length - 1, cell + colspan - 1) + (m.cssClass ? ' ' + m.cssClass : '');\r\n\r\n    if (this.hasFrozenColumns() && cell <= this._options.frozenColumn!) {\r\n      cellCss += (' frozen');\r\n    }\r\n\r\n    if (row === this.activeRow && cell === this.activeCell && this._options.showCellSelection) {\r\n      cellCss += (' active');\r\n    }\r\n\r\n    // TODO: merge them together in the setter\r\n    Object.keys(this.cellCssClasses).forEach(key => {\r\n      if (this.cellCssClasses[key][row]?.[m.id]) {\r\n        cellCss += (' ' + this.cellCssClasses[key][row][m.id]);\r\n      }\r\n    });\r\n\r\n    let value: any = null;\r\n    let formatterResult: FormatterResultWithHtml | FormatterResultWithText | HTMLElement | DocumentFragment | string = '';\r\n    if (item) {\r\n      value = this.getDataItemValueForColumn(item, m);\r\n      formatterResult = this.getFormatter(row, m)(row, cell, value, m, item, this as unknown as SlickGridModel);\r\n      if (formatterResult === null || formatterResult === undefined) {\r\n        formatterResult = '';\r\n      }\r\n    }\r\n\r\n    // get addl css class names from object type formatter return and from string type return of onBeforeAppendCell\r\n    // we will only use the event result as CSS classes when it is a string type (undefined event always return a true boolean which is not a valid css class)\r\n    const evt = this.trigger(this.onBeforeAppendCell, { row, cell, value, dataContext: item });\r\n    const appendCellResult = evt.getReturnValue();\r\n    let addlCssClasses = typeof appendCellResult === 'string' ? appendCellResult : '';\r\n    if ((formatterResult as FormatterResultObject)?.addClasses) {\r\n      addlCssClasses += Utils.classNameToList((addlCssClasses ? ' ' : '') + (formatterResult as FormatterResultObject).addClasses).join(' ');\r\n    }\r\n\r\n    const toolTipText = (formatterResult as FormatterResultObject)?.toolTip ? `${(formatterResult as FormatterResultObject).toolTip}` : '';\r\n    const cellDiv = Utils.createDomElement('div', {\r\n      className: Utils.classNameToList(`${cellCss} ${addlCssClasses || ''}`).join(' '),\r\n      role: 'gridcell',\r\n      tabIndex: -1\r\n    });\r\n    cellDiv.setAttribute('aria-describedby', this.uid + m.id);\r\n    if (toolTipText) {\r\n      cellDiv.setAttribute('title', toolTipText);\r\n    }\r\n\r\n    if (m.hasOwnProperty('cellAttrs') && m.cellAttrs instanceof Object) {\r\n      Object.keys(m.cellAttrs).forEach(key => {\r\n        if (m.cellAttrs.hasOwnProperty(key)) {\r\n          cellDiv.setAttribute(key, m.cellAttrs[key]);\r\n        }\r\n      });\r\n    }\r\n\r\n    // if there is a corresponding row (if not, this is the Add New row or this data hasn't been loaded yet)\r\n    if (item) {\r\n      const cellResult = (Object.prototype.toString.call(formatterResult) !== '[object Object]' ? formatterResult : (formatterResult as FormatterResultWithHtml).html || (formatterResult as FormatterResultWithText).text);\r\n      this.applyHtmlCode(cellDiv, cellResult as string | HTMLElement);\r\n    }\r\n    divRow.appendChild(cellDiv);\r\n\r\n    // Formatter can optional add an \"insertElementAfterTarget\" option but it must be inserted only after the `.slick-row` div exists\r\n    if ((formatterResult as FormatterResultObject).insertElementAfterTarget) {\r\n      Utils.insertAfterElement(cellDiv, (formatterResult as FormatterResultObject).insertElementAfterTarget as HTMLElement);\r\n    }\r\n\r\n    this.rowsCache[row].cellRenderQueue.push(cell);\r\n    this.rowsCache[row].cellColSpans[cell] = colspan;\r\n  }\r\n\r\n  protected cleanupRows(rangeToKeep: { bottom: number; top: number; }) {\r\n    Object.keys(this.rowsCache).forEach(rowId => {\r\n      if (this.rowsCache) {\r\n        let i = +rowId;\r\n        let removeFrozenRow = true;\r\n\r\n        if (this.hasFrozenRows\r\n          && ((this._options.frozenBottom && (i as unknown as number) >= this.actualFrozenRow) // Frozen bottom rows\r\n            || (!this._options.frozenBottom && (i as unknown as number) <= this.actualFrozenRow) // Frozen top rows\r\n          )\r\n        ) {\r\n          removeFrozenRow = false;\r\n        }\r\n\r\n        if (((i = parseInt(rowId, 10)) !== this.activeRow)\r\n          && (i < rangeToKeep.top || i > rangeToKeep.bottom)\r\n          && (removeFrozenRow)\r\n        ) {\r\n          this.removeRowFromCache(i);\r\n        }\r\n      }\r\n    });\r\n    if (this._options.enableAsyncPostRenderCleanup) {\r\n      this.startPostProcessingCleanup();\r\n    }\r\n  }\r\n\r\n  /** Invalidate all grid rows and re-render the grid rows */\r\n  invalidate() {\r\n    this.updateRowCount();\r\n    this.invalidateAllRows();\r\n    this.render();\r\n  }\r\n\r\n  /** Invalidate all grid rows */\r\n  invalidateAllRows() {\r\n    if (this.currentEditor) {\r\n      this.makeActiveCellNormal();\r\n    }\r\n\r\n    if (typeof this.rowsCache === 'object') {\r\n      Object.keys(this.rowsCache).forEach(row => {\r\n        if (this.rowsCache) {\r\n          this.removeRowFromCache(+row);\r\n        }\r\n      });\r\n    }\r\n\r\n    if (this._options.enableAsyncPostRenderCleanup) {\r\n      this.startPostProcessingCleanup();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Invalidate a specific set of row numbers\r\n   * @param {Number[]} rows\r\n   */\r\n  invalidateRows(rows: number[]) {\r\n    if (!rows || !rows.length) {\r\n      return;\r\n    }\r\n    this.vScrollDir = 0;\r\n    const rl = rows.length;\r\n    for (let i = 0; i < rl; i++) {\r\n      if (this.currentEditor && this.activeRow === rows[i]) {\r\n        this.makeActiveCellNormal();\r\n      }\r\n      if (this.rowsCache[rows[i]]) {\r\n        this.removeRowFromCache(rows[i]);\r\n      }\r\n    }\r\n    if (this._options.enableAsyncPostRenderCleanup) { this.startPostProcessingCleanup(); }\r\n  }\r\n\r\n  /**\r\n   * Invalidate a specific row number\r\n   * @param {Number} row\r\n   */\r\n  invalidateRow(row: number) {\r\n    if (!row && row !== 0) { return; }\r\n    this.invalidateRows([row]);\r\n  }\r\n\r\n  protected queuePostProcessedRowForCleanup(cacheEntry: RowCaching, postProcessedRow: any, rowIdx: number) {\r\n    this.postProcessgroupId++;\r\n\r\n    // store and detach node for later async cleanup\r\n    if (typeof postProcessedRow === 'object') {\r\n      Object.keys(postProcessedRow).forEach(columnIdx => {\r\n        if (postProcessedRow.hasOwnProperty(columnIdx)) {\r\n          this.postProcessedCleanupQueue.push({\r\n            actionType: 'C',\r\n            groupId: this.postProcessgroupId,\r\n            node: cacheEntry.cellNodesByColumnIdx[+columnIdx],\r\n            columnIdx: +columnIdx,\r\n            rowIdx\r\n          });\r\n        }\r\n      });\r\n    }\r\n\r\n    if (!cacheEntry.rowNode) {\r\n      cacheEntry.rowNode = [];\r\n    }\r\n    this.postProcessedCleanupQueue.push({\r\n      actionType: 'R',\r\n      groupId: this.postProcessgroupId,\r\n      node: cacheEntry.rowNode as HTMLElement[]\r\n    });\r\n    cacheEntry.rowNode?.forEach((node) => node.remove());\r\n  }\r\n\r\n  protected queuePostProcessedCellForCleanup(cellnode: HTMLElement, columnIdx: number, rowIdx: number) {\r\n    this.postProcessedCleanupQueue.push({\r\n      actionType: 'C',\r\n      groupId: this.postProcessgroupId,\r\n      node: cellnode,\r\n      columnIdx,\r\n      rowIdx\r\n    });\r\n    cellnode.remove();\r\n  }\r\n\r\n  protected removeRowFromCache(row: number) {\r\n    const cacheEntry = this.rowsCache[row];\r\n    if (!cacheEntry || !cacheEntry.rowNode) {\r\n      return;\r\n    }\r\n\r\n    if (this._options.enableAsyncPostRenderCleanup && this.postProcessedRows[row]) {\r\n      this.queuePostProcessedRowForCleanup(cacheEntry, this.postProcessedRows[row], row);\r\n    } else {\r\n      cacheEntry.rowNode?.forEach((node: HTMLElement) => node.parentElement?.removeChild(node));\r\n    }\r\n\r\n    delete this.rowsCache[row];\r\n    delete this.postProcessedRows[row];\r\n    this.renderedRows--;\r\n    this.counter_rows_removed++;\r\n  }\r\n\r\n  /** Apply a Formatter Result to a Cell DOM Node */\r\n  applyFormatResultToCellNode(formatterResult: FormatterResultWithHtml | FormatterResultWithText | string | HTMLElement | DocumentFragment, cellNode: HTMLDivElement, suppressRemove?: boolean) {\r\n    if (formatterResult === null || formatterResult === undefined) { formatterResult = ''; }\r\n    if (Object.prototype.toString.call(formatterResult) !== '[object Object]') {\r\n      this.applyHtmlCode(cellNode, formatterResult as string | HTMLElement);\r\n      return;\r\n    }\r\n\r\n    const formatterVal: HTMLElement | string = (formatterResult as FormatterResultWithHtml).html || (formatterResult as FormatterResultWithText).text;\r\n    this.applyHtmlCode(cellNode, formatterVal);\r\n\r\n    if ((formatterResult as FormatterResultObject).removeClasses && !suppressRemove) {\r\n      cellNode.classList.remove(...Utils.classNameToList((formatterResult as FormatterResultObject).removeClasses));\r\n    }\r\n    if ((formatterResult as FormatterResultObject).addClasses) {\r\n      cellNode.classList.add(...Utils.classNameToList((formatterResult as FormatterResultObject).addClasses));\r\n    }\r\n    if ((formatterResult as FormatterResultObject).toolTip) {\r\n      cellNode.setAttribute('title', (formatterResult as FormatterResultObject).toolTip!);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Update a specific cell by its row and column index\r\n   * @param {Number} row - grid row number\r\n   * @param {Number} cell - grid cell column number\r\n   */\r\n  updateCell(row: number, cell: number) {\r\n    const cellNode = this.getCellNode(row, cell);\r\n    if (!cellNode) {\r\n      return;\r\n    }\r\n\r\n    const m = this.columns[cell];\r\n    const d = this.getDataItem(row);\r\n    if (this.currentEditor && this.activeRow === row && this.activeCell === cell) {\r\n      this.currentEditor.loadValue(d);\r\n    } else {\r\n      const formatterResult = d ? this.getFormatter(row, m)(row, cell, this.getDataItemValueForColumn(d, m), m, d, this as unknown as SlickGridModel) : '';\r\n      this.applyFormatResultToCellNode(formatterResult, cellNode);\r\n      this.invalidatePostProcessingResults(row);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Update a specific row by its row index\r\n   * @param {Number} row - grid row number\r\n   */\r\n  updateRow(row: number) {\r\n    const cacheEntry = this.rowsCache[row];\r\n    if (!cacheEntry) {\r\n      return;\r\n    }\r\n\r\n    this.ensureCellNodesInRowsCache(row);\r\n\r\n    let formatterResult;\r\n    const d = this.getDataItem(row);\r\n\r\n    Object.keys(cacheEntry.cellNodesByColumnIdx).forEach(colIdx => {\r\n      if (!cacheEntry.cellNodesByColumnIdx.hasOwnProperty(colIdx)) {\r\n        return;\r\n      }\r\n\r\n      const columnIdx = +colIdx;\r\n      const m = this.columns[columnIdx];\r\n      const node = cacheEntry.cellNodesByColumnIdx[columnIdx];\r\n\r\n      if (row === this.activeRow && columnIdx === this.activeCell && this.currentEditor) {\r\n        this.currentEditor.loadValue(d);\r\n      } else if (d) {\r\n        formatterResult = this.getFormatter(row, m)(row, columnIdx, this.getDataItemValueForColumn(d, m), m, d, this as unknown as SlickGridModel);\r\n        this.applyFormatResultToCellNode(formatterResult, node as HTMLDivElement);\r\n      } else {\r\n        Utils.emptyElement(node);\r\n      }\r\n    });\r\n\r\n    this.invalidatePostProcessingResults(row);\r\n  }\r\n\r\n  /**\r\n   * Get the number of rows displayed in the viewport\r\n   * Note that the row count is an approximation because it is a calculated value using this formula (viewport / rowHeight = rowCount),\r\n   * the viewport must also be displayed for this calculation to work.\r\n   * @return {Number} rowCount\r\n   */\r\n  getViewportRowCount() {\r\n    const vh = this.getViewportHeight();\r\n    const scrollbarHeight = this.getScrollbarDimensions()?.height ?? 0;\r\n    return Math.floor((vh - scrollbarHeight) / this._options.rowHeight!);\r\n  }\r\n\r\n  getViewportHeight() {\r\n    if (!this._options.autoHeight || this._options.frozenColumn !== -1) {\r\n      this.topPanelH = (this._options.showTopPanel) ? this._options.topPanelHeight! + this.getVBoxDelta(this._topPanelScrollers[0]) : 0;\r\n      this.headerRowH = (this._options.showHeaderRow) ? this._options.headerRowHeight! + this.getVBoxDelta(this._headerRowScroller[0]) : 0;\r\n      this.footerRowH = (this._options.showFooterRow) ? this._options.footerRowHeight! + this.getVBoxDelta(this._footerRowScroller[0]) : 0;\r\n    }\r\n\r\n    if (this._options.autoHeight) {\r\n      let fullHeight = this._paneHeaderL.offsetHeight;\r\n      fullHeight += (this._options.showHeaderRow) ? this._options.headerRowHeight! + this.getVBoxDelta(this._headerRowScroller[0]) : 0;\r\n      fullHeight += (this._options.showFooterRow) ? this._options.footerRowHeight! + this.getVBoxDelta(this._footerRowScroller[0]) : 0;\r\n      fullHeight += (this.getCanvasWidth() > this.viewportW) ? (this.scrollbarDimensions?.height ?? 0) : 0;\r\n\r\n      this.viewportH = this._options.rowHeight!\r\n        * this.getDataLengthIncludingAddNew()\r\n        + ((this._options.frozenColumn === -1) ? fullHeight : 0);\r\n    } else {\r\n      const columnNamesH = (this._options.showColumnHeader) ? Utils.toFloat(Utils.height(this._headerScroller[0]) as number) + this.getVBoxDelta(this._headerScroller[0]) : 0;\r\n      const preHeaderH = (this._options.createPreHeaderPanel && this._options.showPreHeaderPanel) ? this._options.preHeaderPanelHeight! + this.getVBoxDelta(this._preHeaderPanelScroller) : 0;\r\n      const topHeaderH = (this._options.createTopHeaderPanel && this._options.showTopHeaderPanel) ? this._options.topHeaderPanelHeight! + this.getVBoxDelta(this._topHeaderPanelScroller) : 0;\r\n\r\n      const style = getComputedStyle(this._container);\r\n      this.viewportH = Utils.toFloat(style.height)\r\n        - Utils.toFloat(style.paddingTop)\r\n        - Utils.toFloat(style.paddingBottom)\r\n        - columnNamesH\r\n        - this.topPanelH\r\n        - this.headerRowH\r\n        - this.footerRowH\r\n        - preHeaderH\r\n        - topHeaderH;\r\n    }\r\n\r\n    this.numVisibleRows = Math.ceil(this.viewportH / this._options.rowHeight!);\r\n    return this.viewportH;\r\n  }\r\n\r\n  getViewportWidth() {\r\n    this.viewportW = parseFloat(Utils.innerSize(this._container, 'width') as unknown as string) || (this._options.devMode && this._options.devMode.containerClientWidth) || 0;\r\n    return this.viewportW;\r\n  }\r\n\r\n  /** Execute a Resize of the Grid Canvas */\r\n  resizeCanvas() {\r\n    if (!this.initialized) { return; }\r\n    this.paneTopH = 0;\r\n    this.paneBottomH = 0;\r\n    this.viewportTopH = 0;\r\n    this.viewportBottomH = 0;\r\n\r\n    this.getViewportWidth();\r\n    this.getViewportHeight();\r\n\r\n    // Account for Frozen Rows\r\n    if (this.hasFrozenRows) {\r\n      if (this._options.frozenBottom) {\r\n        this.paneTopH = this.viewportH - this.frozenRowsHeight - (this.scrollbarDimensions?.height ?? 0);\r\n        this.paneBottomH = this.frozenRowsHeight + (this.scrollbarDimensions?.height ?? 0);\r\n      } else {\r\n        this.paneTopH = this.frozenRowsHeight;\r\n        this.paneBottomH = this.viewportH - this.frozenRowsHeight;\r\n      }\r\n    } else {\r\n      this.paneTopH = this.viewportH;\r\n    }\r\n\r\n    // The top pane includes the top panel and the header row\r\n    this.paneTopH += this.topPanelH + this.headerRowH + this.footerRowH;\r\n\r\n    if (this.hasFrozenColumns() && this._options.autoHeight) {\r\n      this.paneTopH += (this.scrollbarDimensions?.height ?? 0);\r\n    }\r\n\r\n    // The top viewport does not contain the top panel or header row\r\n    this.viewportTopH = this.paneTopH - this.topPanelH - this.headerRowH - this.footerRowH;\r\n\r\n    if (this._options.autoHeight) {\r\n      if (this.hasFrozenColumns()) {\r\n        const style = getComputedStyle(this._headerScrollerL);\r\n        Utils.height(this._container, this.paneTopH + Utils.toFloat(style.height));\r\n      }\r\n\r\n      this._paneTopL.style.position = 'relative';\r\n    }\r\n\r\n    let topHeightOffset = Utils.height(this._paneHeaderL);\r\n    if (topHeightOffset) {\r\n      topHeightOffset += (this._options.showTopHeaderPanel ? this._options.topHeaderPanelHeight! : 0);\r\n    } else {\r\n      topHeightOffset = (this._options.showHeaderRow ? this._options.headerRowHeight! : 0) + (this._options.showPreHeaderPanel ? this._options.preHeaderPanelHeight! : 0);\r\n    }\r\n    Utils.setStyleSize(this._paneTopL, 'top', topHeightOffset || topHeightOffset);\r\n    Utils.height(this._paneTopL, this.paneTopH);\r\n\r\n    const paneBottomTop = this._paneTopL.offsetTop + this.paneTopH;\r\n\r\n    if (!this._options.autoHeight) {\r\n      Utils.height(this._viewportTopL, this.viewportTopH);\r\n    }\r\n\r\n    if (this.hasFrozenColumns()) {\r\n      let topHeightOffset = Utils.height(this._paneHeaderL);\r\n      if (topHeightOffset) {\r\n        topHeightOffset += (this._options.showTopHeaderPanel ? this._options.topHeaderPanelHeight! : 0);\r\n      }\r\n      Utils.setStyleSize(this._paneTopR, 'top', topHeightOffset as number);\r\n      Utils.height(this._paneTopR, this.paneTopH);\r\n      Utils.height(this._viewportTopR, this.viewportTopH);\r\n\r\n      if (this.hasFrozenRows) {\r\n        Utils.setStyleSize(this._paneBottomL, 'top', paneBottomTop);\r\n        Utils.height(this._paneBottomL, this.paneBottomH);\r\n        Utils.setStyleSize(this._paneBottomR, 'top', paneBottomTop);\r\n        Utils.height(this._paneBottomR, this.paneBottomH);\r\n        Utils.height(this._viewportBottomR, this.paneBottomH);\r\n      }\r\n    } else {\r\n      if (this.hasFrozenRows) {\r\n        Utils.width(this._paneBottomL, '100%');\r\n        Utils.height(this._paneBottomL, this.paneBottomH);\r\n        Utils.setStyleSize(this._paneBottomL, 'top', paneBottomTop);\r\n      }\r\n    }\r\n\r\n    if (this.hasFrozenRows) {\r\n      Utils.height(this._viewportBottomL, this.paneBottomH);\r\n\r\n      if (this._options.frozenBottom) {\r\n        Utils.height(this._canvasBottomL, this.frozenRowsHeight);\r\n\r\n        if (this.hasFrozenColumns()) {\r\n          Utils.height(this._canvasBottomR, this.frozenRowsHeight);\r\n        }\r\n      } else {\r\n        Utils.height(this._canvasTopL, this.frozenRowsHeight);\r\n\r\n        if (this.hasFrozenColumns()) {\r\n          Utils.height(this._canvasTopR, this.frozenRowsHeight);\r\n        }\r\n      }\r\n    } else {\r\n      Utils.height(this._viewportTopR, this.viewportTopH);\r\n    }\r\n\r\n    if (!this.scrollbarDimensions || !this.scrollbarDimensions.width) {\r\n      this.scrollbarDimensions = this.measureScrollbar();\r\n    }\r\n\r\n    if (this._options.autosizeColsMode === GridAutosizeColsMode.LegacyForceFit) {\r\n      this.autosizeColumns();\r\n    }\r\n\r\n    this.updateRowCount();\r\n    this.handleScroll();\r\n    // Since the width has changed, force the render() to reevaluate virtually rendered cells.\r\n    this.lastRenderedScrollLeft = -1;\r\n    this.render();\r\n  }\r\n\r\n  /**\r\n   * Update paging information status from the View\r\n   * @param {PagingInfo} pagingInfo\r\n   */\r\n  updatePagingStatusFromView(pagingInfo: Pick<PagingInfo, 'pageSize' | 'pageNum' | 'totalPages'>) {\r\n    this.pagingActive = (pagingInfo.pageSize !== 0);\r\n    this.pagingIsLastPage = (pagingInfo.pageNum === pagingInfo.totalPages - 1);\r\n  }\r\n\r\n  /** Update the dataset row count */\r\n  updateRowCount() {\r\n    if (!this.initialized) { return; }\r\n\r\n    const dataLength = this.getDataLength();\r\n    const dataLengthIncludingAddNew = this.getDataLengthIncludingAddNew();\r\n    let numberOfRows = 0;\r\n    let oldH = ((this.hasFrozenRows && !this._options.frozenBottom) ? Utils.height(this._canvasBottomL) : Utils.height(this._canvasTopL)) as number;\r\n\r\n    if (this.hasFrozenRows) {\r\n      numberOfRows = this.getDataLength() - this._options.frozenRow!;\r\n    } else {\r\n      numberOfRows = dataLengthIncludingAddNew + (this._options.leaveSpaceForNewRows ? this.numVisibleRows - 1 : 0);\r\n    }\r\n\r\n    const tempViewportH = Utils.height(this._viewportScrollContainerY) as number;\r\n    const oldViewportHasVScroll = this.viewportHasVScroll;\r\n    // with autoHeight, we do not need to accommodate the vertical scroll bar\r\n    this.viewportHasVScroll = this._options.alwaysShowVerticalScroll || !this._options.autoHeight && (numberOfRows * this._options.rowHeight! > tempViewportH);\r\n\r\n    this.makeActiveCellNormal();\r\n\r\n    // remove the rows that are now outside of the data range\r\n    // this helps avoid redundant calls to .removeRow() when the size of the data decreased by thousands of rows\r\n    const r1 = dataLength - 1;\r\n    if (typeof this.rowsCache === 'object') {\r\n      Object.keys(this.rowsCache).forEach(row => {\r\n        const cachedRow = +row;\r\n        if (cachedRow > r1) {\r\n          this.removeRowFromCache(cachedRow);\r\n        }\r\n      });\r\n    }\r\n\r\n    if (this._options.enableAsyncPostRenderCleanup) {\r\n      this.startPostProcessingCleanup();\r\n    }\r\n\r\n    if (this.activeCellNode && this.activeRow > r1) {\r\n      this.resetActiveCell();\r\n    }\r\n\r\n    oldH = this.h;\r\n    if (this._options.autoHeight) {\r\n      this.h = this._options.rowHeight! * numberOfRows;\r\n    } else {\r\n      this.th = Math.max(this._options.rowHeight! * numberOfRows, tempViewportH - (this.scrollbarDimensions?.height ?? 0));\r\n      if (this.th < this.maxSupportedCssHeight) {\r\n        // just one page\r\n        this.h = this.ph = this.th;\r\n        this.n = 1;\r\n        this.cj = 0;\r\n      } else {\r\n        // break into pages\r\n        this.h = this.maxSupportedCssHeight;\r\n        this.ph = this.h / 100;\r\n        this.n = Math.floor(this.th / this.ph);\r\n        this.cj = (this.th - this.h) / (this.n - 1);\r\n      }\r\n    }\r\n\r\n    if (this.h !== oldH || this.enforceFrozenRowHeightRecalc) {\r\n      if (this.hasFrozenRows && !this._options.frozenBottom) {\r\n        Utils.height(this._canvasBottomL, this.h);\r\n\r\n        if (this.hasFrozenColumns()) {\r\n          Utils.height(this._canvasBottomR, this.h);\r\n        }\r\n      } else {\r\n        Utils.height(this._canvasTopL, this.h);\r\n        Utils.height(this._canvasTopR, this.h);\r\n      }\r\n\r\n      this.scrollTop = this._viewportScrollContainerY.scrollTop;\r\n      this.scrollHeight = this._viewportScrollContainerY.scrollHeight;\r\n      this.enforceFrozenRowHeightRecalc = false; // reset enforce flag\r\n    }\r\n\r\n    const oldScrollTopInRange = (this.scrollTop + this.offset <= this.th - tempViewportH);\r\n\r\n    if (this.th === 0 || this.scrollTop === 0) {\r\n      this.page = this.offset = 0;\r\n    } else if (oldScrollTopInRange) {\r\n      // maintain virtual position\r\n      this.scrollTo(this.scrollTop + this.offset);\r\n    } else {\r\n      // scroll to bottom\r\n      this.scrollTo(this.th - tempViewportH + (this.scrollbarDimensions?.height ?? 0));\r\n    }\r\n\r\n    if (this.h !== oldH && this._options.autoHeight) {\r\n      this.resizeCanvas();\r\n    }\r\n\r\n    if (this._options.autosizeColsMode === GridAutosizeColsMode.LegacyForceFit && oldViewportHasVScroll !== this.viewportHasVScroll) {\r\n      this.autosizeColumns();\r\n    }\r\n    this.updateCanvasWidth(false);\r\n  }\r\n\r\n  /** @alias `getVisibleRange` */\r\n  getViewport(viewportTop?: number, viewportLeft?: number) {\r\n    return this.getVisibleRange(viewportTop, viewportLeft);\r\n  }\r\n\r\n  getVisibleRange(viewportTop?: number, viewportLeft?: number) {\r\n    viewportTop ??= this.scrollTop;\r\n    viewportLeft ??= this.scrollLeft;\r\n\r\n    return {\r\n      top: this.getRowFromPosition(viewportTop),\r\n      bottom: this.getRowFromPosition(viewportTop + this.viewportH) + 1,\r\n      leftPx: viewportLeft,\r\n      rightPx: viewportLeft + this.viewportW\r\n    };\r\n  }\r\n\r\n  /** Get rendered range */\r\n  getRenderedRange(viewportTop?: number, viewportLeft?: number) {\r\n    const range = this.getVisibleRange(viewportTop, viewportLeft);\r\n    const buffer = Math.round(this.viewportH / this._options.rowHeight!);\r\n    const minBuffer = this._options.minRowBuffer as number;\r\n\r\n    if (this.vScrollDir === -1) {\r\n      range.top -= buffer;\r\n      range.bottom += minBuffer;\r\n    } else if (this.vScrollDir === 1) {\r\n      range.top -= minBuffer;\r\n      range.bottom += buffer;\r\n    } else {\r\n      range.top -= minBuffer;\r\n      range.bottom += minBuffer;\r\n    }\r\n\r\n    range.top = Math.max(0, range.top);\r\n    range.bottom = Math.min(this.getDataLengthIncludingAddNew() - 1, range.bottom);\r\n\r\n    range.leftPx -= this.viewportW;\r\n    range.rightPx += this.viewportW;\r\n\r\n    range.leftPx = Math.max(0, range.leftPx);\r\n    range.rightPx = Math.min(this.canvasWidth, range.rightPx);\r\n\r\n    return range;\r\n  }\r\n\r\n  protected ensureCellNodesInRowsCache(row: number) {\r\n    const cacheEntry = this.rowsCache[row];\r\n    if (cacheEntry?.cellRenderQueue.length && cacheEntry.rowNode?.length) {\r\n      const rowNode = cacheEntry.rowNode as HTMLElement[];\r\n      let children = Array.from(rowNode[0].children) as HTMLElement[];\r\n      if (rowNode.length > 1) {\r\n        children = children.concat(Array.from(rowNode[1].children) as HTMLElement[]);\r\n      }\r\n\r\n      let i = children.length - 1;\r\n      while (cacheEntry.cellRenderQueue.length) {\r\n        const columnIdx = cacheEntry.cellRenderQueue.pop();\r\n        (cacheEntry.cellNodesByColumnIdx as HTMLElement[])[columnIdx] = children[i--];\r\n      }\r\n    }\r\n  }\r\n\r\n  protected cleanUpCells(range: CellViewportRange, row: number) {\r\n    // Ignore frozen rows\r\n    if (this.hasFrozenRows\r\n      && ((this._options.frozenBottom && row > this.actualFrozenRow) // Frozen bottom rows\r\n        || (row <= this.actualFrozenRow)                     // Frozen top rows\r\n      )\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    let totalCellsRemoved = 0;\r\n    const cacheEntry = this.rowsCache[row];\r\n\r\n    // Remove cells outside the range.\r\n    const cellsToRemove: number[] = [];\r\n    Object.keys(cacheEntry.cellNodesByColumnIdx).forEach(cellNodeIdx => {\r\n      // I really hate it when people mess with Array.prototype.\r\n      if (!cacheEntry.cellNodesByColumnIdx.hasOwnProperty(cellNodeIdx)) {\r\n        return;\r\n      }\r\n\r\n      // This is a string, so it needs to be cast back to a number.\r\n      const i = +cellNodeIdx;\r\n\r\n      // Ignore frozen columns\r\n      if (i <= this._options.frozenColumn!) {\r\n        return;\r\n      }\r\n\r\n      // Ignore alwaysRenderedColumns\r\n      if (Array.isArray(this.columns) && this.columns[i] && this.columns[i].alwaysRenderColumn) {\r\n        return;\r\n      }\r\n\r\n      const colspan = cacheEntry.cellColSpans[i];\r\n      if (this.columnPosLeft[i] > range.rightPx ||\r\n        this.columnPosRight[Math.min(this.columns.length - 1, (i || 0) + (colspan as number) - 1)] < range.leftPx) {\r\n        if (!(row === this.activeRow && Number(i) === this.activeCell)) {\r\n          cellsToRemove.push((i as unknown as number));\r\n        }\r\n      }\r\n    });\r\n\r\n    let cellToRemove;\r\n    let cellNode;\r\n    while (Utils.isDefined(cellToRemove = cellsToRemove.pop())) {\r\n      cellNode = cacheEntry.cellNodesByColumnIdx[cellToRemove];\r\n\r\n      if (this._options.enableAsyncPostRenderCleanup && this.postProcessedRows[row]?.[cellToRemove]) {\r\n        this.queuePostProcessedCellForCleanup(cellNode, cellToRemove, row);\r\n      } else {\r\n        cellNode.parentElement?.removeChild(cellNode);\r\n      }\r\n\r\n      delete cacheEntry.cellColSpans[cellToRemove];\r\n      delete cacheEntry.cellNodesByColumnIdx[cellToRemove];\r\n      if (this.postProcessedRows[row]) {\r\n        delete this.postProcessedRows[row][cellToRemove];\r\n      }\r\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n      totalCellsRemoved++;\r\n    }\r\n  }\r\n\r\n  protected cleanUpAndRenderCells(range: CellViewportRange) {\r\n    let cacheEntry;\r\n    const divRow: HTMLElement = document.createElement('div');\r\n    const processedRows: number[] = [];\r\n    let cellsAdded: number;\r\n    let totalCellsAdded = 0;\r\n    let colspan: number | string;\r\n\r\n    for (let row = range.top as number, btm = range.bottom as number; row <= btm; row++) {\r\n      cacheEntry = this.rowsCache[row];\r\n      if (!cacheEntry) {\r\n        continue;\r\n      }\r\n\r\n      // cellRenderQueue populated in renderRows() needs to be cleared first\r\n      this.ensureCellNodesInRowsCache(row);\r\n\r\n      this.cleanUpCells(range, row);\r\n      // Render missing cells.\r\n      cellsAdded = 0;\r\n\r\n      let metadata = (this.data as CustomDataView<TData>)?.getItemMetadata?.(row) ?? {} as ItemMetadata;\r\n      metadata = metadata?.columns as ItemMetadata;\r\n\r\n      const d = this.getDataItem(row);\r\n\r\n      // TODO:  shorten this loop (index? heuristics? binary search?)\r\n      for (let i = 0, ii = this.columns.length; i < ii; i++) {\r\n        if (!this.columns[i] || this.columns[i].hidden) { continue; }\r\n\r\n        // Cells to the right are outside the range.\r\n        if (this.columnPosLeft[i] > range.rightPx) {\r\n          break;\r\n        }\r\n\r\n        // Already rendered.\r\n        if (Utils.isDefined(colspan = cacheEntry.cellColSpans[i] as number)) {\r\n          i += (colspan > 1 ? colspan - 1 : 0);\r\n          continue;\r\n        }\r\n\r\n        colspan = 1;\r\n        if (metadata) {\r\n          const columnData = metadata[this.columns[i].id as keyof ItemMetadata] || (metadata as any)[i];\r\n          colspan = columnData?.colspan ?? 1;\r\n          if (colspan === '*') {\r\n            colspan = ii - i;\r\n          }\r\n        }\r\n\r\n        const colspanNb = colspan as number; // at this point colspan is for sure a number\r\n        if (this.columnPosRight[Math.min(ii - 1, i + colspanNb - 1)] > range.leftPx) {\r\n          this.appendCellHtml(divRow, row, i, colspanNb, d);\r\n          cellsAdded++;\r\n        }\r\n\r\n        i += (colspanNb > 1 ? colspanNb - 1 : 0);\r\n      }\r\n\r\n      if (cellsAdded) {\r\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n        totalCellsAdded += cellsAdded;\r\n        processedRows.push(row);\r\n      }\r\n    }\r\n    if (!divRow.children.length) {\r\n      return;\r\n    }\r\n\r\n    let processedRow: number | null | undefined;\r\n    let node: HTMLElement;\r\n    while (Utils.isDefined(processedRow = processedRows.pop())) {\r\n      cacheEntry = this.rowsCache[processedRow];\r\n      let columnIdx;\r\n      while (Utils.isDefined(columnIdx = cacheEntry.cellRenderQueue.pop())) {\r\n        node = divRow.lastChild as HTMLElement;\r\n\r\n        //no idea why node would be null here but apparently it is..\r\n        if (!node) {\r\n          continue;\r\n        }\r\n        if (this.hasFrozenColumns() && (columnIdx > this._options.frozenColumn!)) {\r\n          cacheEntry.rowNode![1].appendChild(node);\r\n        } else {\r\n          cacheEntry.rowNode![0].appendChild(node);\r\n        }\r\n        cacheEntry.cellNodesByColumnIdx![columnIdx] = node;\r\n      }\r\n    }\r\n  }\r\n\r\n  protected renderRows(range: { top: number; bottom: number; leftPx: number; rightPx: number; }) {\r\n    const divArrayL: HTMLElement[] = [];\r\n    const divArrayR: HTMLElement[] = [];\r\n    const rows: number[] = [];\r\n    let needToReselectCell = false;\r\n    const dataLength = this.getDataLength();\r\n\r\n    for (let i = range.top as number, ii = range.bottom as number; i <= ii; i++) {\r\n      if (this.rowsCache[i] || (this.hasFrozenRows && this._options.frozenBottom && i === this.getDataLength())) {\r\n        continue;\r\n      }\r\n      this.renderedRows++;\r\n      rows.push(i);\r\n\r\n      // Create an entry right away so that appendRowHtml() can\r\n      // start populating it.\r\n      this.rowsCache[i] = {\r\n        rowNode: null,\r\n\r\n        // ColSpans of rendered cells (by column idx).\r\n        // Can also be used for checking whether a cell has been rendered.\r\n        cellColSpans: [],\r\n\r\n        // Cell nodes (by column idx).  Lazy-populated by ensureCellNodesInRowsCache().\r\n        cellNodesByColumnIdx: [],\r\n\r\n        // Column indices of cell nodes that have been rendered, but not yet indexed in\r\n        // cellNodesByColumnIdx.  These are in the same order as cell nodes added at the\r\n        // end of the row.\r\n        cellRenderQueue: []\r\n      };\r\n\r\n      this.appendRowHtml(divArrayL, divArrayR, i, range, dataLength);\r\n      if (this.activeCellNode && this.activeRow === i) {\r\n        needToReselectCell = true;\r\n      }\r\n      this.counter_rows_rendered++;\r\n    }\r\n\r\n    if (!rows.length) { return; }\r\n\r\n    const x = document.createElement('div');\r\n    const xRight = document.createElement('div');\r\n\r\n    divArrayL.forEach(elm => x.appendChild(elm as HTMLElement));\r\n    divArrayR.forEach(elm => xRight.appendChild(elm as HTMLElement));\r\n\r\n    for (let i = 0, ii = rows.length; i < ii; i++) {\r\n      if ((this.hasFrozenRows) && (rows[i] >= this.actualFrozenRow)) {\r\n        if (this.hasFrozenColumns()) {\r\n          if (this.rowsCache?.hasOwnProperty(rows[i]) && x.firstChild && xRight.firstChild) {\r\n            this.rowsCache[rows[i]].rowNode = [x.firstChild as HTMLElement, xRight.firstChild as HTMLElement];\r\n            this._canvasBottomL.appendChild(x.firstChild as ChildNode);\r\n            this._canvasBottomR.appendChild(xRight.firstChild as ChildNode);\r\n          }\r\n        } else {\r\n          if (this.rowsCache?.hasOwnProperty(rows[i]) && x.firstChild) {\r\n            this.rowsCache[rows[i]].rowNode = [x.firstChild as HTMLElement];\r\n            this._canvasBottomL.appendChild(x.firstChild as ChildNode);\r\n          }\r\n        }\r\n      } else if (this.hasFrozenColumns()) {\r\n        if (this.rowsCache?.hasOwnProperty(rows[i]) && x.firstChild && xRight.firstChild) {\r\n          this.rowsCache[rows[i]].rowNode = [x.firstChild as HTMLElement, xRight.firstChild as HTMLElement];\r\n          this._canvasTopL.appendChild(x.firstChild as ChildNode);\r\n          this._canvasTopR.appendChild(xRight.firstChild as ChildNode);\r\n        }\r\n      } else {\r\n        if (this.rowsCache?.hasOwnProperty(rows[i]) && x.firstChild) {\r\n          this.rowsCache[rows[i]].rowNode = [x.firstChild as HTMLElement];\r\n          this._canvasTopL.appendChild(x.firstChild as ChildNode);\r\n        }\r\n      }\r\n    }\r\n\r\n    if (needToReselectCell) {\r\n      this.activeCellNode = this.getCellNode(this.activeRow, this.activeCell);\r\n    }\r\n  }\r\n\r\n  protected startPostProcessing() {\r\n    if (!this._options.enableAsyncPostRender) {\r\n      return;\r\n    }\r\n    clearTimeout(this.h_postrender);\r\n    this.h_postrender = setTimeout(this.asyncPostProcessRows.bind(this), this._options.asyncPostRenderDelay);\r\n  }\r\n\r\n  protected startPostProcessingCleanup() {\r\n    if (!this._options.enableAsyncPostRenderCleanup) {\r\n      return;\r\n    }\r\n    clearTimeout(this.h_postrenderCleanup);\r\n    this.h_postrenderCleanup = setTimeout(this.asyncPostProcessCleanupRows.bind(this), this._options.asyncPostRenderCleanupDelay);\r\n  }\r\n\r\n  protected invalidatePostProcessingResults(row: number) {\r\n    // change status of columns to be re-rendered\r\n    if (typeof this.postProcessedRows[row] === 'object') {\r\n      Object.keys(this.postProcessedRows[row]).forEach(columnIdx => {\r\n        if (this.postProcessedRows[row].hasOwnProperty(columnIdx)) {\r\n          this.postProcessedRows[row][columnIdx] = 'C';\r\n        }\r\n      });\r\n    }\r\n    this.postProcessFromRow = Math.min(this.postProcessFromRow as number, row);\r\n    this.postProcessToRow = Math.max(this.postProcessToRow as number, row);\r\n    this.startPostProcessing();\r\n  }\r\n\r\n  protected updateRowPositions() {\r\n    for (const row in this.rowsCache) {\r\n      if (this.rowsCache) {\r\n        const rowNumber = row ? parseInt(row, 10) : 0;\r\n        const rowNode = this.rowsCache[rowNumber].rowNode![0];\r\n        if (this._options.rowTopOffsetRenderType === 'transform') {\r\n          rowNode.style.transform = `translateY(${this.getRowTop(rowNumber)}px)`;\r\n        } else {\r\n          rowNode.style.top = `${this.getRowTop(rowNumber)}px`; // default to `top: {offset}px`\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /** (re)Render the grid */\r\n  render() {\r\n    if (!this.initialized) { return; }\r\n\r\n    this.scrollThrottle.dequeue();\r\n\r\n    const visible = this.getVisibleRange();\r\n    const rendered = this.getRenderedRange();\r\n\r\n    // remove rows no longer in the viewport\r\n    this.cleanupRows(rendered);\r\n\r\n    // add new rows & missing cells in existing rows\r\n    if (this.lastRenderedScrollLeft !== this.scrollLeft) {\r\n      if (this.hasFrozenRows) {\r\n        const renderedFrozenRows = Utils.extend(true, {}, rendered);\r\n\r\n        if (this._options.frozenBottom) {\r\n          renderedFrozenRows.top = this.actualFrozenRow;\r\n          renderedFrozenRows.bottom = this.getDataLength();\r\n        } else {\r\n          renderedFrozenRows.top = 0;\r\n          renderedFrozenRows.bottom = this._options.frozenRow;\r\n        }\r\n        this.cleanUpAndRenderCells(renderedFrozenRows);\r\n      }\r\n      this.cleanUpAndRenderCells(rendered);\r\n    }\r\n\r\n    // render missing rows\r\n    this.renderRows(rendered);\r\n\r\n    // Render frozen rows\r\n    if (this.hasFrozenRows) {\r\n      if (this._options.frozenBottom) {\r\n        this.renderRows({\r\n          top: this.actualFrozenRow, bottom: this.getDataLength() - 1, leftPx: rendered.leftPx, rightPx: rendered.rightPx\r\n        });\r\n      } else {\r\n        this.renderRows({\r\n          top: 0, bottom: this._options.frozenRow! - 1, leftPx: rendered.leftPx, rightPx: rendered.rightPx\r\n        });\r\n      }\r\n    }\r\n\r\n    this.postProcessFromRow = visible.top;\r\n    this.postProcessToRow = Math.min(this.getDataLengthIncludingAddNew() - 1, visible.bottom);\r\n    this.startPostProcessing();\r\n\r\n    this.lastRenderedScrollTop = this.scrollTop;\r\n    this.lastRenderedScrollLeft = this.scrollLeft;\r\n    this.h_render = null;\r\n    this.trigger(this.onRendered, { startRow: visible.top, endRow: visible.bottom, grid: this });\r\n  }\r\n\r\n  protected handleHeaderRowScroll() {\r\n    const scrollLeft = this._headerRowScrollContainer.scrollLeft;\r\n    if (scrollLeft !== this._viewportScrollContainerX.scrollLeft) {\r\n      this._viewportScrollContainerX.scrollLeft = scrollLeft;\r\n    }\r\n  }\r\n\r\n  protected handleFooterRowScroll() {\r\n    const scrollLeft = this._footerRowScrollContainer.scrollLeft;\r\n    if (scrollLeft !== this._viewportScrollContainerX.scrollLeft) {\r\n      this._viewportScrollContainerX.scrollLeft = scrollLeft;\r\n    }\r\n  }\r\n\r\n  protected handlePreHeaderPanelScroll() {\r\n    this.handleElementScroll(this._preHeaderPanelScroller);\r\n  }\r\n\r\n  protected handleTopHeaderPanelScroll() {\r\n    this.handleElementScroll(this._topHeaderPanelScroller);\r\n  }\r\n\r\n  protected handleElementScroll(element: HTMLElement) {\r\n    const scrollLeft = element.scrollLeft;\r\n    if (scrollLeft !== this._viewportScrollContainerX.scrollLeft) {\r\n      this._viewportScrollContainerX.scrollLeft = scrollLeft;\r\n    }\r\n  }\r\n\r\n  protected handleScroll(e?: Event) {\r\n    this.scrollHeight = this._viewportScrollContainerY.scrollHeight;\r\n    this.scrollTop = this._viewportScrollContainerY.scrollTop;\r\n    this.scrollLeft = this._viewportScrollContainerX.scrollLeft;\r\n    return this._handleScroll(e ? 'scroll' : 'system');\r\n  }\r\n\r\n  protected _handleScroll(eventType: 'mousewheel' | 'scroll' | 'system' = 'system') {\r\n    let maxScrollDistanceY = this._viewportScrollContainerY.scrollHeight - this._viewportScrollContainerY.clientHeight;\r\n    let maxScrollDistanceX = this._viewportScrollContainerY.scrollWidth - this._viewportScrollContainerY.clientWidth;\r\n\r\n    // Protect against erroneous clientHeight/Width greater than scrollHeight/Width.\r\n    // Sometimes seen in Chrome.\r\n    maxScrollDistanceY = Math.max(0, maxScrollDistanceY);\r\n    maxScrollDistanceX = Math.max(0, maxScrollDistanceX);\r\n\r\n    // Ceiling the max scroll values\r\n    if (this.scrollTop > maxScrollDistanceY) {\r\n      this.scrollTop = maxScrollDistanceY;\r\n      this.scrollHeight = maxScrollDistanceY;\r\n    }\r\n    if (this.scrollLeft > maxScrollDistanceX) {\r\n      this.scrollLeft = maxScrollDistanceX;\r\n    }\r\n\r\n    const vScrollDist = Math.abs(this.scrollTop - this.prevScrollTop);\r\n    const hScrollDist = Math.abs(this.scrollLeft - this.prevScrollLeft);\r\n\r\n    if (hScrollDist) {\r\n      this.prevScrollLeft = this.scrollLeft;\r\n\r\n      // adjust scroll position of all div containers when scrolling the grid\r\n      this._viewportScrollContainerX.scrollLeft = this.scrollLeft;\r\n      this._headerScrollContainer.scrollLeft = this.scrollLeft;\r\n      this._topPanelScrollers[0].scrollLeft = this.scrollLeft;\r\n      if (this._options.createFooterRow) {\r\n        this._footerRowScrollContainer.scrollLeft = this.scrollLeft;\r\n      }\r\n      if (this._options.createPreHeaderPanel) {\r\n        if (this.hasFrozenColumns()) {\r\n          this._preHeaderPanelScrollerR.scrollLeft = this.scrollLeft;\r\n        } else {\r\n          this._preHeaderPanelScroller.scrollLeft = this.scrollLeft;\r\n        }\r\n      }\r\n      if (this._options.createTopHeaderPanel) {\r\n        this._topHeaderPanelScroller.scrollLeft = this.scrollLeft;\r\n      }\r\n\r\n      if (this.hasFrozenColumns()) {\r\n        if (this.hasFrozenRows) {\r\n          this._viewportTopR.scrollLeft = this.scrollLeft;\r\n        }\r\n        this._headerRowScrollerR.scrollLeft = this.scrollLeft; // right header row scrolling with frozen grid\r\n      } else {\r\n        if (this.hasFrozenRows) {\r\n          this._viewportTopL.scrollLeft = this.scrollLeft;\r\n        }\r\n        this._headerRowScrollerL.scrollLeft = this.scrollLeft; // left header row scrolling with regular grid\r\n      }\r\n    }\r\n\r\n    // autoheight suppresses vertical scrolling, but editors can create a div larger than\r\n    // the row vertical size, which can lead to a vertical scroll bar appearing temporarily\r\n    // while the editor is displayed. this is not part of the grid scrolling, so we should ignore it\r\n    if (vScrollDist && !this._options.autoHeight) {\r\n      this.vScrollDir = this.prevScrollTop < this.scrollTop ? 1 : -1;\r\n      this.prevScrollTop = this.scrollTop;\r\n\r\n      if (eventType === 'mousewheel') {\r\n        this._viewportScrollContainerY.scrollTop = this.scrollTop;\r\n      }\r\n\r\n      if (this.hasFrozenColumns()) {\r\n        if (this.hasFrozenRows && !this._options.frozenBottom) {\r\n          this._viewportBottomL.scrollTop = this.scrollTop;\r\n        } else {\r\n          this._viewportTopL.scrollTop = this.scrollTop;\r\n        }\r\n      }\r\n\r\n      // switch virtual pages if needed\r\n      if (vScrollDist < this.viewportH) {\r\n        this.scrollTo(this.scrollTop + this.offset);\r\n      } else {\r\n        const oldOffset = this.offset;\r\n        if (this.h === this.viewportH) {\r\n          this.page = 0;\r\n        } else {\r\n          this.page = Math.min(this.n - 1, Math.floor(this.scrollTop * ((this.th - this.viewportH) / (this.h - this.viewportH)) * (1 / this.ph)));\r\n        }\r\n        this.offset = Math.round(this.page * this.cj);\r\n        if (oldOffset !== this.offset) {\r\n          this.invalidateAllRows();\r\n        }\r\n      }\r\n    }\r\n\r\n    if (hScrollDist || vScrollDist) {\r\n      const dx = Math.abs(this.lastRenderedScrollLeft - this.scrollLeft);\r\n      const dy = Math.abs(this.lastRenderedScrollTop - this.scrollTop);\r\n      if (dx > 20 || dy > 20) {\r\n        // if rendering is forced or scrolling is small enough to be \"easy\", just render\r\n        if (this._options.forceSyncScrolling || (dy < this.viewportH && dx < this.viewportW)) {\r\n          this.render();\r\n        } else {\r\n          // otherwise, perform \"difficult\" renders at a capped frequency\r\n          this.scrollThrottle.enqueue();\r\n        }\r\n\r\n        this.trigger(this.onViewportChanged, {});\r\n      }\r\n    }\r\n\r\n    this.trigger(this.onScroll, {\r\n      triggeredBy: eventType,\r\n      scrollHeight: this.scrollHeight,\r\n      scrollLeft: this.scrollLeft,\r\n      scrollTop: this.scrollTop,\r\n    });\r\n\r\n    if (hScrollDist || vScrollDist) { return true; }\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * limits the frequency at which the provided action is executed.\r\n   * call enqueue to execute the action - it will execute either immediately or, if it was executed less than minPeriod_ms in the past, as soon as minPeriod_ms has expired.\r\n   * call dequeue to cancel any pending action.\r\n   */\r\n  protected actionThrottle(action: () => void, minPeriod_ms: number) {\r\n    let blocked = false;\r\n    let queued = false;\r\n\r\n    const enqueue = () => {\r\n      if (!blocked) {\r\n        blockAndExecute();\r\n      } else {\r\n        queued = true;\r\n      }\r\n    };\r\n\r\n    const dequeue = () => {\r\n      queued = false;\r\n    };\r\n\r\n    const blockAndExecute = () => {\r\n      blocked = true;\r\n      clearTimeout(this._executionBlockTimer);\r\n      this._executionBlockTimer = setTimeout(unblock, minPeriod_ms);\r\n      action.call(this);\r\n    };\r\n\r\n    const unblock = () => {\r\n      if (queued) {\r\n        dequeue();\r\n        blockAndExecute();\r\n      } else {\r\n        blocked = false;\r\n      }\r\n    };\r\n\r\n    return {\r\n      enqueue: enqueue.bind(this),\r\n      dequeue: dequeue.bind(this)\r\n    };\r\n  }\r\n\r\n  protected asyncPostProcessRows() {\r\n    const dataLength = this.getDataLength();\r\n    while (this.postProcessFromRow <= this.postProcessToRow) {\r\n      const row = (this.vScrollDir >= 0) ? this.postProcessFromRow++ : this.postProcessToRow--;\r\n      const cacheEntry = this.rowsCache[row];\r\n      if (!cacheEntry || row >= dataLength) {\r\n        continue;\r\n      }\r\n\r\n      if (!this.postProcessedRows[row]) {\r\n        this.postProcessedRows[row] = {};\r\n      }\r\n\r\n      this.ensureCellNodesInRowsCache(row);\r\n      Object.keys(cacheEntry.cellNodesByColumnIdx).forEach(colIdx => {\r\n        if (cacheEntry.cellNodesByColumnIdx.hasOwnProperty(colIdx)) {\r\n          const columnIdx = +colIdx;\r\n          const m = this.columns[columnIdx];\r\n          const processedStatus = this.postProcessedRows[row][columnIdx]; // C=cleanup and re-render, R=rendered\r\n          if (m.asyncPostRender && processedStatus !== 'R') {\r\n            const node = cacheEntry.cellNodesByColumnIdx[columnIdx];\r\n            if (node) {\r\n              m.asyncPostRender(node, row, this.getDataItem(row), m, (processedStatus === 'C'));\r\n            }\r\n            this.postProcessedRows[row][columnIdx] = 'R';\r\n          }\r\n        }\r\n      });\r\n\r\n      this.h_postrender = setTimeout(this.asyncPostProcessRows.bind(this), this._options.asyncPostRenderDelay);\r\n      return;\r\n    }\r\n  }\r\n\r\n  protected asyncPostProcessCleanupRows() {\r\n    if (this.postProcessedCleanupQueue.length > 0) {\r\n      const groupId = this.postProcessedCleanupQueue[0].groupId;\r\n\r\n      // loop through all queue members with this groupID\r\n      while (this.postProcessedCleanupQueue.length > 0 && this.postProcessedCleanupQueue[0].groupId === groupId) {\r\n        const entry = this.postProcessedCleanupQueue.shift();\r\n        if (entry?.actionType === 'R') {\r\n          (entry.node as HTMLElement[]).forEach((node) => {\r\n            node.remove();\r\n          });\r\n        }\r\n        if (entry?.actionType === 'C') {\r\n          const column = this.columns[entry.columnIdx as number];\r\n          if (column.asyncPostRenderCleanup && entry.node) {\r\n            // cleanup must also remove element\r\n            column.asyncPostRenderCleanup(entry.node as HTMLDivElement, entry.rowIdx as number, column);\r\n          }\r\n        }\r\n      }\r\n\r\n      // call this function again after the specified delay\r\n      this.h_postrenderCleanup = setTimeout(this.asyncPostProcessCleanupRows.bind(this), this._options.asyncPostRenderCleanupDelay);\r\n    }\r\n  }\r\n\r\n  protected updateCellCssStylesOnRenderedRows(addedHash?: CssStyleHash | null, removedHash?: CssStyleHash | null) {\r\n    let node: HTMLElement | null;\r\n    let addedRowHash: any;\r\n    let removedRowHash: any;\r\n    if (typeof this.rowsCache === 'object') {\r\n      Object.keys(this.rowsCache).forEach(row => {\r\n        if (this.rowsCache) {\r\n          removedRowHash = removedHash?.[row];\r\n          addedRowHash = addedHash?.[row];\r\n\r\n          if (removedRowHash) {\r\n            Object.keys(removedRowHash).forEach(columnId => {\r\n              if (!addedRowHash || removedRowHash[columnId] !== addedRowHash[columnId]) {\r\n                node = this.getCellNode(+row, this.getColumnIndex(columnId));\r\n                if (node) {\r\n                  node.classList.remove(removedRowHash[columnId]);\r\n                }\r\n              }\r\n            });\r\n          }\r\n\r\n          if (addedRowHash) {\r\n            Object.keys(addedRowHash).forEach(columnId => {\r\n              if (!removedRowHash || removedRowHash[columnId] !== addedRowHash[columnId]) {\r\n                node = this.getCellNode(+row, this.getColumnIndex(columnId));\r\n                if (node) {\r\n                  node.classList.add(addedRowHash[columnId]);\r\n                }\r\n              }\r\n            });\r\n          }\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Adds an \"overlay\" of CSS classes to cell DOM elements. SlickGrid can have many such overlays associated with different keys and they are frequently used by plugins. For example, SlickGrid uses this method internally to decorate selected cells with selectedCellCssClass (see options).\r\n   * @param {String} key A unique key you can use in calls to setCellCssStyles and removeCellCssStyles. If a hash with that key has already been set, an exception will be thrown.\r\n   * @param {CssStyleHash} hash A hash of additional cell CSS classes keyed by row number and then by column id. Multiple CSS classes can be specified and separated by space.\r\n   * @example\r\n   * `{\r\n   * \t 0: { number_column: SlickEvent; title_column: SlickEvent;\t},\r\n   * \t 4: { percent_column: SlickEvent; }\r\n   * }`\r\n   */\r\n  addCellCssStyles(key: string, hash: CssStyleHash) {\r\n    if (this.cellCssClasses[key]) {\r\n      throw new Error(`SlickGrid addCellCssStyles: cell CSS hash with key \"${key}\" already exists.`);\r\n    }\r\n\r\n    this.cellCssClasses[key] = hash;\r\n    this.updateCellCssStylesOnRenderedRows(hash, null);\r\n    this.trigger(this.onCellCssStylesChanged, { key, hash, grid: this });\r\n  }\r\n\r\n  /**\r\n   * Removes an \"overlay\" of CSS classes from cell DOM elements. See setCellCssStyles for more.\r\n   * @param {String} key A string key.\r\n   */\r\n  removeCellCssStyles(key: string) {\r\n    if (!this.cellCssClasses[key]) {\r\n      return;\r\n    }\r\n\r\n    this.updateCellCssStylesOnRenderedRows(null, this.cellCssClasses[key]);\r\n    delete this.cellCssClasses[key];\r\n    this.trigger(this.onCellCssStylesChanged, { key, hash: null, grid: this });\r\n  }\r\n\r\n  /**\r\n   * Sets CSS classes to specific grid cells by calling removeCellCssStyles(key) followed by addCellCssStyles(key, hash). key is name for this set of styles so you can reference it later - to modify it or remove it, for example. hash is a per-row-index, per-column-name nested hash of CSS classes to apply.\r\n   * Suppose you have a grid with columns:\r\n   * [\"login\", \"name\", \"birthday\", \"age\", \"likes_icecream\", \"favorite_cake\"]\r\n   * ...and you'd like to highlight the \"birthday\" and \"age\" columns for people whose birthday is today, in this case, rows at index 0 and 9. (The first and tenth row in the grid).\r\n   * @param {String} key A string key. Will overwrite any data already associated with this key.\r\n   * @param {Object} hash A hash of additional cell CSS classes keyed by row number and then by column id. Multiple CSS classes can be specified and separated by space.\r\n   */\r\n  setCellCssStyles(key: string, hash: CssStyleHash) {\r\n    const prevHash = this.cellCssClasses[key];\r\n\r\n    this.cellCssClasses[key] = hash;\r\n    this.updateCellCssStylesOnRenderedRows(hash, prevHash);\r\n    this.trigger(this.onCellCssStylesChanged, { key, hash, grid: this });\r\n  }\r\n\r\n  /**\r\n   * Accepts a key name, returns the group of CSS styles defined under that name. See setCellCssStyles for more info.\r\n   * @param {String} key A string.\r\n   */\r\n  getCellCssStyles(key: string): CssStyleHash {\r\n    return this.cellCssClasses[key];\r\n  }\r\n\r\n  /**\r\n   * Flashes the cell twice by toggling the CSS class 4 times.\r\n   * @param {Number} row A row index.\r\n   * @param {Number} cell A column index.\r\n   * @param {Number} [speed] (optional) - The milliseconds delay between the toggling calls. Defaults to 250 ms.\r\n   */\r\n  flashCell(row: number, cell: number, speed = 250) {\r\n    const toggleCellClass = (cellNode: HTMLElement, times: number) => {\r\n      if (times < 1) {\r\n        return;\r\n      }\r\n\r\n      clearTimeout(this._flashCellTimer);\r\n      this._flashCellTimer = setTimeout(() => {\r\n        if (times % 2 === 0) {\r\n          cellNode.classList.add(this._options.cellFlashingCssClass || '');\r\n        } else {\r\n          cellNode.classList.remove(this._options.cellFlashingCssClass || '');\r\n        }\r\n        toggleCellClass(cellNode, times - 1);\r\n      }, speed);\r\n    };\r\n\r\n    if (this.rowsCache[row]) {\r\n      const cellNode = this.getCellNode(row, cell);\r\n      if (cellNode) {\r\n        toggleCellClass(cellNode, 5);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Highlight a row for a certain duration (ms) of time.\r\n   * @param {Number} row - grid row number\r\n   * @param {Number} [duration] - duration (ms), defaults to 400ms\r\n   */\r\n  highlightRow(row: number, duration?: number) {\r\n    const rowCache = this.rowsCache[row];\r\n    duration ||= this._options.rowHighlightDuration;\r\n\r\n    if (Array.isArray(rowCache?.rowNode) && this._options.rowHighlightCssClass) {\r\n      rowCache.rowNode.forEach(node => node.classList.add(...Utils.classNameToList(this._options.rowHighlightCssClass)));\r\n      clearTimeout(this._highlightRowTimer);\r\n      this._highlightRowTimer = setTimeout(() => {\r\n        rowCache.rowNode?.forEach(node => node.classList.remove(...Utils.classNameToList(this._options.rowHighlightCssClass)));\r\n      }, duration);\r\n    }\r\n  }\r\n\r\n  //////////////////////////////////////////////////////////////////////////////////////////////\r\n  // Interactivity\r\n\r\n  protected handleMouseWheel(e: MouseEvent, _delta: number, deltaX: number, deltaY: number) {\r\n    this.scrollHeight = this._viewportScrollContainerY.scrollHeight;\r\n    this.scrollTop = Math.max(0, this._viewportScrollContainerY.scrollTop - (deltaY * this._options.rowHeight!));\r\n    this.scrollLeft = this._viewportScrollContainerX.scrollLeft + (deltaX * 10);\r\n    const handled = this._handleScroll('mousewheel');\r\n    if (handled) {\r\n      e.preventDefault();\r\n    }\r\n  }\r\n\r\n  protected handleDragInit(e: DragEvent, dd: DragPosition) {\r\n    const cell = this.getCellFromEvent(e);\r\n    if (!cell || !this.cellExists(cell.row, cell.cell)) {\r\n      return false;\r\n    }\r\n\r\n    const retval = this.trigger(this.onDragInit, dd, e);\r\n    if (retval.isImmediatePropagationStopped()) {\r\n      return retval.getReturnValue();\r\n    }\r\n\r\n    // if nobody claims to be handling drag'n'drop by stopping immediate propagation,\r\n    // cancel out of it\r\n    return false;\r\n  }\r\n\r\n  protected handleDragStart(e: DragEvent, dd: DragPosition) {\r\n    const cell = this.getCellFromEvent(e);\r\n    if (!cell || !this.cellExists(cell.row, cell.cell)) {\r\n      return false;\r\n    }\r\n\r\n    const retval = this.trigger(this.onDragStart, dd, e);\r\n    if (retval.isImmediatePropagationStopped()) {\r\n      return retval.getReturnValue();\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  protected handleDrag(e: DragEvent, dd: DragPosition) {\r\n    return this.trigger(this.onDrag, dd, e).getReturnValue();\r\n  }\r\n\r\n  protected handleDragEnd(e: DragEvent, dd: DragPosition) {\r\n    this.trigger(this.onDragEnd, dd, e);\r\n  }\r\n\r\n  protected handleKeyDown(e: KeyboardEvent & { originalEvent: Event; }) {\r\n    const retval = this.trigger(this.onKeyDown, { row: this.activeRow, cell: this.activeCell }, e);\r\n    let handled: boolean | undefined | void = retval.isImmediatePropagationStopped();\r\n\r\n    if (!handled) {\r\n      if (!e.shiftKey && !e.altKey) {\r\n        if (this._options.editable && this.currentEditor?.keyCaptureList) {\r\n          if (this.currentEditor.keyCaptureList.indexOf(e.which) > -1) {\r\n            return;\r\n          }\r\n        }\r\n        if (e.which === keyCode.HOME) {\r\n          handled = (e.ctrlKey) ? this.navigateTop() : this.navigateRowStart();\r\n        } else if (e.which === keyCode.END) {\r\n          handled = (e.ctrlKey) ? this.navigateBottom() : this.navigateRowEnd();\r\n        }\r\n      }\r\n    }\r\n    if (!handled) {\r\n      if (!e.shiftKey && !e.altKey && !e.ctrlKey) {\r\n        // editor may specify an array of keys to bubble\r\n        if (this._options.editable && this.currentEditor?.keyCaptureList) {\r\n          if (this.currentEditor.keyCaptureList.indexOf(e.which) > -1) {\r\n            return;\r\n          }\r\n        }\r\n        if (e.which === keyCode.ESCAPE) {\r\n          if (!this.getEditorLock()?.isActive()) {\r\n            return; // no editing mode to cancel, allow bubbling and default processing (exit without cancelling the event)\r\n          }\r\n          this.cancelEditAndSetFocus();\r\n        } else if (e.which === keyCode.PAGE_DOWN) {\r\n          this.navigatePageDown();\r\n          handled = true;\r\n        } else if (e.which === keyCode.PAGE_UP) {\r\n          this.navigatePageUp();\r\n          handled = true;\r\n        } else if (e.which === keyCode.LEFT) {\r\n          handled = this.navigateLeft();\r\n        } else if (e.which === keyCode.RIGHT) {\r\n          handled = this.navigateRight();\r\n        } else if (e.which === keyCode.UP) {\r\n          handled = this.navigateUp();\r\n        } else if (e.which === keyCode.DOWN) {\r\n          handled = this.navigateDown();\r\n        } else if (e.which === keyCode.TAB) {\r\n          handled = this.navigateNext();\r\n        } else if (e.which === keyCode.ENTER) {\r\n          if (this._options.editable) {\r\n            if (this.currentEditor) {\r\n              // adding new row\r\n              if (this.activeRow === this.getDataLength()) {\r\n                this.navigateDown();\r\n              } else {\r\n                this.commitEditAndSetFocus();\r\n              }\r\n            } else {\r\n              if (this.getEditorLock()?.commitCurrentEdit()) {\r\n                this.makeActiveCellEditable(undefined, undefined, e);\r\n              }\r\n            }\r\n          }\r\n          handled = true;\r\n        }\r\n      } else if (e.which === keyCode.TAB && e.shiftKey && !e.ctrlKey && !e.altKey) {\r\n        handled = this.navigatePrev();\r\n      }\r\n    }\r\n\r\n    if (handled) {\r\n      // the event has been handled so don't let parent element (bubbling/propagation) or browser (default) handle it\r\n      e.stopPropagation();\r\n      e.preventDefault();\r\n      try {\r\n        (e as any).originalEvent.keyCode = 0; // prevent default behaviour for special keys in IE browsers (F3, F5, etc.)\r\n      }\r\n      // ignore exceptions - setting the original event's keycode throws access denied exception for \"Ctrl\"\r\n      // (hitting control key only, nothing else), \"Shift\" (maybe others)\r\n      // eslint-disable-next-line no-empty\r\n      catch (error) { }\r\n    }\r\n  }\r\n\r\n  protected handleClick(evt: DOMEvent<HTMLDivElement> | SlickEventData_) {\r\n    const e = evt instanceof SlickEventData ? evt.getNativeEvent() : evt;\r\n\r\n    if (!this.currentEditor) {\r\n      // if this click resulted in some cell child node getting focus,\r\n      // don't steal it back - keyboard events will still bubble up\r\n      // IE9+ seems to default DIVs to tabIndex=0 instead of -1, so check for cell clicks directly.\r\n      if ((e as DOMEvent<HTMLDivElement>).target !== document.activeElement || (e as DOMEvent<HTMLDivElement>).target.classList.contains('slick-cell')) {\r\n        const selection = this.getTextSelection(); // store text-selection and restore it after\r\n        this.setFocus();\r\n        this.setTextSelection(selection as Range);\r\n      }\r\n    }\r\n\r\n    const cell = this.getCellFromEvent(e);\r\n    if (!cell || (this.currentEditor !== null && this.activeRow === cell.row && this.activeCell === cell.cell)) {\r\n      return;\r\n    }\r\n\r\n    evt = this.trigger(this.onClick, { row: cell.row, cell: cell.cell }, evt || e);\r\n    if ((evt as any).isImmediatePropagationStopped()) {\r\n      return;\r\n    }\r\n\r\n    // this optimisation causes trouble - MLeibman #329\r\n    // if ((activeCell !== cell.cell || activeRow !== cell.row) && canCellBeActive(cell.row, cell.cell)) {\r\n    if (this.canCellBeActive(cell.row, cell.cell)) {\r\n      if (!this.getEditorLock()?.isActive() || this.getEditorLock()?.commitCurrentEdit()) {\r\n        this.scrollRowIntoView(cell.row, false);\r\n\r\n        const preClickModeOn = ((e as DOMEvent<HTMLDivElement>).target?.className === preClickClassName);\r\n        const column = this.columns[cell.cell];\r\n        const suppressActiveCellChangedEvent = !!(this._options.editable && column?.editor && this._options.suppressActiveCellChangeOnEdit);\r\n        this.setActiveCellInternal(this.getCellNode(cell.row, cell.cell), null, preClickModeOn, suppressActiveCellChangedEvent, (e as DOMEvent<HTMLDivElement>));\r\n      }\r\n    }\r\n  }\r\n\r\n  protected handleContextMenu(e: Event & { target: HTMLElement; }) {\r\n    const cell = e.target.closest('.slick-cell');\r\n    if (!cell) {\r\n      return;\r\n    }\r\n\r\n    // are we editing this cell?\r\n    if (this.activeCellNode === cell && this.currentEditor !== null) {\r\n      return;\r\n    }\r\n\r\n    this.trigger(this.onContextMenu, {}, e);\r\n  }\r\n\r\n  protected handleDblClick(e: MouseEvent) {\r\n    const cell = this.getCellFromEvent(e);\r\n    if (!cell || (this.currentEditor !== null && this.activeRow === cell.row && this.activeCell === cell.cell)) {\r\n      return;\r\n    }\r\n\r\n    this.trigger(this.onDblClick, { row: cell.row, cell: cell.cell }, e);\r\n    if (e.defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    if (this._options.editable) {\r\n      this.gotoCell(cell.row, cell.cell, true, e);\r\n    }\r\n  }\r\n\r\n  protected handleHeaderMouseEnter(e: MouseEvent & { target: HTMLElement; }) {\r\n    const c = Utils.storage.get(e.target.closest('.slick-header-column'), 'column');\r\n    if (!c) {\r\n      return;\r\n    }\r\n    this.trigger(this.onHeaderMouseEnter, {\r\n      column: c,\r\n      grid: this\r\n    }, e);\r\n  }\r\n\r\n  protected handleHeaderMouseLeave(e: MouseEvent & { target: HTMLElement; }) {\r\n    const c = Utils.storage.get(e.target.closest('.slick-header-column'), 'column');\r\n    if (!c) {\r\n      return;\r\n    }\r\n    this.trigger(this.onHeaderMouseLeave, {\r\n      column: c,\r\n      grid: this\r\n    }, e);\r\n  }\r\n\r\n  protected handleHeaderRowMouseEnter(e: MouseEvent & { target: HTMLElement; }) {\r\n    const c = Utils.storage.get(e.target.closest('.slick-headerrow-column'), 'column');\r\n    if (!c) {\r\n      return;\r\n    }\r\n    this.trigger(this.onHeaderRowMouseEnter, {\r\n      column: c,\r\n      grid: this\r\n    }, e);\r\n  }\r\n\r\n  protected handleHeaderRowMouseLeave(e: MouseEvent & { target: HTMLElement; }) {\r\n    const c = Utils.storage.get(e.target.closest('.slick-headerrow-column'), 'column');\r\n    if (!c) {\r\n      return;\r\n    }\r\n    this.trigger(this.onHeaderRowMouseLeave, {\r\n      column: c,\r\n      grid: this\r\n    }, e);\r\n  }\r\n\r\n  protected handleHeaderContextMenu(e: MouseEvent & { target: HTMLElement; }) {\r\n    const header = e.target.closest('.slick-header-column');\r\n    const column = header && Utils.storage.get(header, 'column');\r\n    this.trigger(this.onHeaderContextMenu, { column }, e);\r\n  }\r\n\r\n  protected handleHeaderClick(e: MouseEvent & { target: HTMLElement; }) {\r\n    if (!this.columnResizeDragging) {\r\n      const header = e.target.closest('.slick-header-column');\r\n      const column = header && Utils.storage.get(header, 'column');\r\n      if (column) {\r\n        this.trigger(this.onHeaderClick, { column }, e);\r\n      }\r\n    }\r\n  }\r\n\r\n  protected handlePreHeaderContextMenu(e: MouseEvent & { target: HTMLElement; }) {\r\n    this.trigger(this.onPreHeaderContextMenu, { node: e.target }, e);\r\n  }\r\n\r\n  protected handlePreHeaderClick(e: MouseEvent & { target: HTMLElement; }) {\r\n    if (!this.columnResizeDragging) {\r\n      this.trigger(this.onPreHeaderClick, { node: e.target }, e);\r\n    }\r\n  }\r\n\r\n  protected handleFooterContextMenu(e: MouseEvent & { target: HTMLElement; }) {\r\n    const footer = e.target.closest('.slick-footerrow-column');\r\n    const column = footer && Utils.storage.get(footer, 'column');\r\n    this.trigger(this.onFooterContextMenu, { column }, e);\r\n  }\r\n\r\n  protected handleFooterClick(e: MouseEvent & { target: HTMLElement; }) {\r\n    const footer = e.target.closest('.slick-footerrow-column');\r\n    const column = footer && Utils.storage.get(footer, 'column');\r\n    this.trigger(this.onFooterClick, { column }, e);\r\n  }\r\n\r\n  protected handleCellMouseOver(e: MouseEvent & { target: HTMLElement; }) {\r\n    this.trigger(this.onMouseEnter, {}, e);\r\n  }\r\n\r\n  protected handleCellMouseOut(e: MouseEvent & { target: HTMLElement; }) {\r\n    this.trigger(this.onMouseLeave, {}, e);\r\n  }\r\n\r\n  protected cellExists(row: number, cell: number) {\r\n    return !(row < 0 || row >= this.getDataLength() || cell < 0 || cell >= this.columns.length);\r\n  }\r\n\r\n  /**\r\n   * Returns row and cell indexes by providing x,y coordinates.\r\n   * Coordinates are relative to the top left corner of the grid beginning with the first row (not including the column headers).\r\n   * @param x An x coordinate.\r\n   * @param y A y coordinate.\r\n   */\r\n  getCellFromPoint(x: number, y: number) {\r\n    let row = this.getRowFromPosition(y);\r\n    let cell = 0;\r\n\r\n    let w = 0;\r\n    for (let i = 0; i < this.columns.length && w <= x; i++) {\r\n      if (!this.columns[i] || this.columns[i].hidden) {\r\n        continue;\r\n      }\r\n      w += this.columns[i].width as number;\r\n      cell++;\r\n    }\r\n    cell -= 1;\r\n\r\n    // we'll return -1 when coordinate falls outside the grid canvas\r\n    if (row < -1) {\r\n      row = -1;\r\n    }\r\n\r\n    return { row, cell };\r\n  }\r\n\r\n  protected getCellFromNode(cellNode: HTMLElement) {\r\n    // read column number from .l<columnNumber> CSS class\r\n    const cls = /l\\d+/.exec(cellNode.className);\r\n    if (!cls) {\r\n      throw new Error(`SlickGrid getCellFromNode: cannot get cell - ${cellNode.className}`);\r\n    }\r\n    return parseInt(cls[0].substr(1, cls[0].length - 1), 10);\r\n  }\r\n\r\n  protected getRowFromNode(rowNode: HTMLElement): number | null {\r\n    for (const row in this.rowsCache) {\r\n      if (this.rowsCache) {\r\n        for (const i in this.rowsCache[row].rowNode) {\r\n          if (this.rowsCache[row].rowNode?.[+i] === rowNode) {\r\n            return (row ? parseInt(row, 10) : 0);\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * Get frozen (pinned) row offset\r\n   * @param {Number} row - grid row number\r\n   */\r\n  getFrozenRowOffset(row: number) {\r\n    // let offset = ( hasFrozenRows ) ? ( this._options.frozenBottom ) ? ( row >= actualFrozenRow ) ? ( h < viewportTopH ) ? ( actualFrozenRow * this._options.rowHeight ) : h : 0 : ( row >= actualFrozenRow ) ? frozenRowsHeight : 0 : 0; // WTF?\r\n    let offset = 0;\r\n    if (this.hasFrozenRows) {\r\n      if (this._options.frozenBottom) {\r\n        if (row >= this.actualFrozenRow) {\r\n          if (this.h < this.viewportTopH) {\r\n            offset = (this.actualFrozenRow * this._options.rowHeight!);\r\n          } else {\r\n            offset = this.h;\r\n          }\r\n        } else {\r\n          offset = 0;\r\n        }\r\n      }\r\n      else {\r\n        if (row >= this.actualFrozenRow) {\r\n          offset = this.frozenRowsHeight;\r\n        } else {\r\n          offset = 0;\r\n        }\r\n      }\r\n    } else {\r\n      offset = 0;\r\n    }\r\n\r\n    return offset;\r\n  }\r\n\r\n  /**\r\n   * Returns a hash containing row and cell indexes from a standard W3C event.\r\n   * @param {*} event A standard W3C event.\r\n   */\r\n  getCellFromEvent(evt: Event | SlickEventData_) {\r\n    const e = evt instanceof SlickEventData ? evt.getNativeEvent() : evt;\r\n    const targetEvent: any = (e as TouchEvent).touches ? (e as TouchEvent).touches[0] : e;\r\n\r\n    const cellNode = (e as Event & { target: HTMLElement }).target.closest('.slick-cell');\r\n    if (!cellNode) {\r\n      return null;\r\n    }\r\n\r\n    let row = this.getRowFromNode(cellNode.parentNode as HTMLElement);\r\n\r\n    if (this.hasFrozenRows) {\r\n      let rowOffset = 0;\r\n      const c = Utils.offset(Utils.parents(cellNode, '.grid-canvas')[0] as HTMLElement);\r\n      const isBottom = Utils.parents(cellNode, '.grid-canvas-bottom').length;\r\n\r\n      if (isBottom) {\r\n        rowOffset = (this._options.frozenBottom) ? Utils.height(this._canvasTopL) as number : this.frozenRowsHeight;\r\n      }\r\n\r\n      row = this.getCellFromPoint(targetEvent.clientX - c!.left, targetEvent.clientY - c!.top + rowOffset + document.documentElement.scrollTop).row;\r\n    }\r\n\r\n    const cell = this.getCellFromNode(cellNode as HTMLElement);\r\n\r\n    if (!Utils.isDefined(row) || !Utils.isDefined(cell)) {\r\n      return null;\r\n    } else {\r\n      return { row, cell };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Returns an object representing information about a cell's position. All coordinates are absolute and take into consideration the visibility and scrolling position of all ancestors.\r\n   * @param {Number} row - A row number.\r\n   * @param {Number} cell - A column number.\r\n   */\r\n  getCellNodeBox(row: number, cell: number) {\r\n    if (!this.cellExists(row, cell)) {\r\n      return null;\r\n    }\r\n\r\n    const frozenRowOffset = this.getFrozenRowOffset(row);\r\n\r\n    const y1 = this.getRowTop(row) - frozenRowOffset;\r\n    const y2 = y1 + this._options.rowHeight! - 1;\r\n    let x1 = 0;\r\n    for (let i = 0; i < cell; i++) {\r\n      if (!this.columns[i] || this.columns[i].hidden) { continue; }\r\n\r\n      x1 += (this.columns[i].width || 0);\r\n\r\n      if (this._options.frozenColumn === i) {\r\n        x1 = 0;\r\n      }\r\n    }\r\n    const x2 = x1 + (this.columns[cell]?.width || 0);\r\n\r\n    return {\r\n      top: y1,\r\n      left: x1,\r\n      bottom: y2,\r\n      right: x2\r\n    };\r\n  }\r\n\r\n  //////////////////////////////////////////////////////////////////////////////////////////////\r\n  // Cell switching\r\n\r\n  /**  Resets active cell. */\r\n  resetActiveCell() {\r\n    this.setActiveCellInternal(null, false);\r\n  }\r\n\r\n  /** @alias `setFocus` */\r\n  focus() {\r\n    this.setFocus();\r\n  }\r\n\r\n  protected setFocus() {\r\n    if (this.tabbingDirection === -1) {\r\n      this._focusSink.focus();\r\n    } else {\r\n      this._focusSink2.focus();\r\n    }\r\n  }\r\n\r\n  /** Scroll to a specific cell and make it into the view */\r\n  scrollCellIntoView(row: number, cell: number, doPaging?: boolean) {\r\n    this.scrollRowIntoView(row, doPaging);\r\n\r\n    if (cell <= this._options.frozenColumn!) {\r\n      return;\r\n    }\r\n\r\n    const colspan = this.getColspan(row, cell);\r\n    this.internalScrollColumnIntoView(this.columnPosLeft[cell], this.columnPosRight[cell + (colspan > 1 ? colspan - 1 : 0)]);\r\n  }\r\n\r\n  protected internalScrollColumnIntoView(left: number, right: number) {\r\n    const scrollRight = this.scrollLeft + (Utils.width(this._viewportScrollContainerX) as number) - (this.viewportHasVScroll ? (this.scrollbarDimensions?.width ?? 0) : 0);\r\n\r\n    if (left < this.scrollLeft) {\r\n      this._viewportScrollContainerX.scrollLeft = left;\r\n      this.handleScroll();\r\n      this.render();\r\n    } else if (right > scrollRight) {\r\n      this._viewportScrollContainerX.scrollLeft = Math.min(left, right - this._viewportScrollContainerX.clientWidth);\r\n      this.handleScroll();\r\n      this.render();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Scroll to a specific column and show it into the viewport\r\n   * @param {Number} cell - cell column number\r\n   */\r\n  scrollColumnIntoView(cell: number) {\r\n    this.internalScrollColumnIntoView(this.columnPosLeft[cell], this.columnPosRight[cell]);\r\n  }\r\n\r\n  protected setActiveCellInternal(newCell: HTMLDivElement | null, opt_editMode?: boolean | null, preClickModeOn?: boolean | null, suppressActiveCellChangedEvent?: boolean, e?: Event | SlickEvent_) {\r\n    if (Utils.isDefined(this.activeCellNode)) {\r\n      this.makeActiveCellNormal();\r\n      this.activeCellNode.classList.remove('active');\r\n      this.rowsCache[this.activeRow]?.rowNode?.forEach((node) => node.classList.remove('active'));\r\n    }\r\n\r\n    // let activeCellChanged = (this.activeCellNode !== newCell);\r\n    this.activeCellNode = newCell;\r\n\r\n    if (Utils.isDefined(this.activeCellNode)) {\r\n      const activeCellOffset = Utils.offset(this.activeCellNode);\r\n      let rowOffset = Math.floor(Utils.offset(Utils.parents(this.activeCellNode, '.grid-canvas')[0] as HTMLElement)!.top);\r\n      const isBottom = Utils.parents(this.activeCellNode, '.grid-canvas-bottom').length;\r\n\r\n      if (this.hasFrozenRows && isBottom) {\r\n        rowOffset -= (this._options.frozenBottom)\r\n          ? Utils.height(this._canvasTopL) as number\r\n          : this.frozenRowsHeight;\r\n      }\r\n\r\n      const cell = this.getCellFromPoint(activeCellOffset!.left, Math.ceil(activeCellOffset!.top) - rowOffset);\r\n      this.activeRow = cell.row;\r\n      this.activeCell = this.activePosX = this.activeCell = this.activePosX = this.getCellFromNode(this.activeCellNode);\r\n\r\n      if (!Utils.isDefined(opt_editMode) && this._options.autoEditNewRow) {\r\n        opt_editMode = (this.activeRow === this.getDataLength()) || this._options.autoEdit;\r\n      }\r\n\r\n      if (this._options.showCellSelection) {\r\n        this.activeCellNode.classList.add('active');\r\n        this.rowsCache[this.activeRow]?.rowNode?.forEach((node) => node.classList.add('active'));\r\n      }\r\n\r\n      if (this._options.editable && opt_editMode && this.isCellPotentiallyEditable(this.activeRow, this.activeCell)) {\r\n        clearTimeout(this.h_editorLoader);\r\n\r\n        if (this._options.asyncEditorLoading) {\r\n          this.h_editorLoader = setTimeout(() => {\r\n            this.makeActiveCellEditable(undefined, preClickModeOn, e);\r\n          }, this._options.asyncEditorLoadDelay);\r\n        } else {\r\n          this.makeActiveCellEditable(undefined, preClickModeOn, e);\r\n        }\r\n      }\r\n    } else {\r\n      this.activeRow = this.activeCell = null as any;\r\n    }\r\n\r\n    // this optimisation causes trouble - MLeibman #329\r\n    // if (activeCellChanged) {\r\n    if (!suppressActiveCellChangedEvent) {\r\n      this.trigger<OnActiveCellChangedEventArgs | null>(this.onActiveCellChanged, this.getActiveCell() as OnActiveCellChangedEventArgs);\r\n    }\r\n    // }\r\n  }\r\n\r\n  protected clearTextSelection() {\r\n    if ((document as any).selection?.empty) {\r\n      try {\r\n        // IE fails here if selected element is not in dom\r\n        (document as any).selection.empty();\r\n        // eslint-disable-next-line no-empty\r\n      } catch (e) { }\r\n    } else if (window.getSelection) {\r\n      const sel = window.getSelection();\r\n      if (sel?.removeAllRanges) {\r\n        sel.removeAllRanges();\r\n      }\r\n    }\r\n  }\r\n\r\n  protected isCellPotentiallyEditable(row: number, cell: number) {\r\n    const dataLength = this.getDataLength();\r\n    // is the data for this row loaded?\r\n    if (row < dataLength && !this.getDataItem(row)) {\r\n      return false;\r\n    }\r\n\r\n    // are we in the Add New row? Can we create new from this cell?\r\n    if (this.columns[cell].cannotTriggerInsert && row >= dataLength) {\r\n      return false;\r\n    }\r\n\r\n    // does this cell have an editor?\r\n    if (!this.columns[cell] || this.columns[cell].hidden || !this.getEditor(row, cell)) {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Make the cell normal again (for example after destroying cell editor),\r\n   * we can also optionally refocus on the current active cell (again possibly after closing cell editor)\r\n   * @param {Boolean} [refocusActiveCell]\r\n   */\r\n  protected makeActiveCellNormal(refocusActiveCell = false) {\r\n    if (!this.currentEditor) {\r\n      return;\r\n    }\r\n    this.trigger(this.onBeforeCellEditorDestroy, { editor: this.currentEditor });\r\n    this.currentEditor.destroy();\r\n    this.currentEditor = null;\r\n\r\n    if (this.activeCellNode) {\r\n      const d = this.getDataItem(this.activeRow);\r\n      this.activeCellNode.classList.remove('editable');\r\n      this.activeCellNode.classList.remove('invalid');\r\n      if (d) {\r\n        const column = this.columns[this.activeCell];\r\n        const formatter = this.getFormatter(this.activeRow, column);\r\n        const formatterResult = formatter(this.activeRow, this.activeCell, this.getDataItemValueForColumn(d, column), column, d, this as unknown as SlickGridModel);\r\n        this.applyFormatResultToCellNode(formatterResult, this.activeCellNode);\r\n        this.invalidatePostProcessingResults(this.activeRow);\r\n      }\r\n      if (refocusActiveCell) {\r\n        this.setFocus();\r\n      }\r\n    }\r\n\r\n    // if there previously was text selected on a page (such as selected text in the edit cell just removed),\r\n    // IE can't set focus to anything else correctly\r\n    if (navigator.userAgent.toLowerCase().match(/msie/)) {\r\n      this.clearTextSelection();\r\n    }\r\n\r\n    this.getEditorLock()?.deactivate(this.editController as EditController);\r\n  }\r\n\r\n\r\n  editActiveCell(editor: EditorConstructor, preClickModeOn?: boolean | null, e?: Event) {\r\n    this.makeActiveCellEditable(editor, preClickModeOn, e);\r\n  }\r\n\r\n  protected makeActiveCellEditable(editor?: EditorConstructor, preClickModeOn?: boolean | null, e?: Event | SlickEvent_) {\r\n    if (!this.activeCellNode) {\r\n      return;\r\n    }\r\n    if (!this._options.editable) {\r\n      throw new Error('SlickGrid makeActiveCellEditable : should never get called when this._options.editable is false');\r\n    }\r\n\r\n    // cancel pending async call if there is one\r\n    clearTimeout(this.h_editorLoader);\r\n\r\n    if (!this.isCellPotentiallyEditable(this.activeRow, this.activeCell)) {\r\n      return;\r\n    }\r\n\r\n    const columnDef = this.columns[this.activeCell];\r\n    const item = this.getDataItem(this.activeRow);\r\n\r\n    if (this.trigger(this.onBeforeEditCell, { row: this.activeRow, cell: this.activeCell, item, column: columnDef, target: 'grid' }).getReturnValue() === false) {\r\n      this.setFocus();\r\n      return;\r\n    }\r\n\r\n    this.getEditorLock()?.activate(this.editController as EditController);\r\n    this.activeCellNode.classList.add('editable');\r\n\r\n    const useEditor = editor || this.getEditor(this.activeRow, this.activeCell);\r\n    // editor was null and columnMetadata and editorFactory returned null or undefined\r\n    // the editor must be constructable. Also makes sure that useEditor is of type EditorConstructor\r\n    if (!useEditor || typeof useEditor !== 'function') {\r\n      return;\r\n    }\r\n\r\n    // don't clear the cell if a custom editor is passed through\r\n    if (!editor && !useEditor.suppressClearOnEdit) {\r\n      Utils.emptyElement(this.activeCellNode);\r\n    }\r\n\r\n    let metadata = (this.data as CustomDataView<TData>)?.getItemMetadata?.(this.activeRow);\r\n    metadata = metadata?.columns as any;\r\n    const columnMetaData = metadata && (metadata[columnDef.id as keyof ItemMetadata] || (metadata as any)[this.activeCell]);\r\n\r\n\r\n    const editorArgs: EditorArguments<TData, C, O> = {\r\n      grid: this,\r\n      gridPosition: this.absBox(this._container),\r\n      position: this.absBox(this.activeCellNode),\r\n      container: this.activeCellNode,\r\n      column: columnDef,\r\n      columnMetaData,\r\n      item: item || {},\r\n      event: e as Event,\r\n      commitChanges: this.commitEditAndSetFocus.bind(this),\r\n      cancelChanges: this.cancelEditAndSetFocus.bind(this)\r\n    };\r\n\r\n    this.currentEditor = new useEditor(editorArgs);\r\n\r\n    if (item && this.currentEditor) {\r\n      this.currentEditor.loadValue(item);\r\n      if (preClickModeOn && this.currentEditor?.preClick) {\r\n        this.currentEditor.preClick();\r\n      }\r\n    }\r\n\r\n    this.serializedEditorValue = this.currentEditor?.serializeValue();\r\n\r\n    if (this.currentEditor?.position) {\r\n      this.handleActiveCellPositionChange();\r\n    }\r\n  }\r\n\r\n  protected commitEditAndSetFocus() {\r\n    // if the commit fails, it would do so due to a validation error\r\n    // if so, do not steal the focus from the editor\r\n    if (this.getEditorLock()?.commitCurrentEdit()) {\r\n      this.setFocus();\r\n      if (this._options.autoEdit && !this._options.autoCommitEdit) {\r\n        this.navigateDown();\r\n      }\r\n    }\r\n  }\r\n\r\n  protected cancelEditAndSetFocus() {\r\n    if (this.getEditorLock()?.cancelCurrentEdit()) {\r\n      this.setFocus();\r\n    }\r\n  }\r\n\r\n  protected absBox(elem: HTMLElement) {\r\n    const box = {\r\n      top: elem.offsetTop,\r\n      left: elem.offsetLeft,\r\n      bottom: 0,\r\n      right: 0,\r\n      width: elem.offsetWidth,\r\n      height: elem.offsetWidth,\r\n      visible: true\r\n    };\r\n    box.bottom = box.top + box.height;\r\n    box.right = box.left + box.width;\r\n\r\n    // walk up the tree\r\n    let offsetParent = elem.offsetParent;\r\n    while ((elem = elem.parentNode as HTMLElement) !== document.body) {\r\n      if (!elem || !elem.parentNode) {\r\n        break;\r\n      }\r\n\r\n      const styles = getComputedStyle(elem);\r\n      if (box.visible && elem.scrollHeight !== elem.offsetHeight && styles['overflowY'] !== 'visible') {\r\n        box.visible = box.bottom > elem.scrollTop && box.top < elem.scrollTop + elem.clientHeight;\r\n      }\r\n\r\n      if (box.visible && elem.scrollWidth !== elem.offsetWidth && styles['overflowX'] !== 'visible') {\r\n        box.visible = box.right > elem.scrollLeft && box.left < elem.scrollLeft + elem.clientWidth;\r\n      }\r\n\r\n      box.left -= elem.scrollLeft;\r\n      box.top -= elem.scrollTop;\r\n\r\n      if (elem === offsetParent) {\r\n        box.left += elem.offsetLeft;\r\n        box.top += elem.offsetTop;\r\n        offsetParent = elem.offsetParent;\r\n      }\r\n\r\n      box.bottom = box.top + box.height;\r\n      box.right = box.left + box.width;\r\n    }\r\n\r\n    return box;\r\n  }\r\n\r\n  /** Returns an object representing information about the active cell's position. All coordinates are absolute and take into consideration the visibility and scrolling position of all ancestors. */\r\n  getActiveCellPosition() {\r\n    return this.absBox(this.activeCellNode as HTMLElement);\r\n  }\r\n\r\n  /** Get the Grid Position */\r\n  getGridPosition() {\r\n    return this.absBox(this._container);\r\n  }\r\n\r\n  protected handleActiveCellPositionChange() {\r\n    if (!this.activeCellNode) {\r\n      return;\r\n    }\r\n\r\n    this.trigger(this.onActiveCellPositionChanged, {});\r\n\r\n    if (this.currentEditor) {\r\n      const cellBox = this.getActiveCellPosition();\r\n      if (this.currentEditor.show && this.currentEditor.hide) {\r\n        if (!cellBox.visible) {\r\n          this.currentEditor.hide();\r\n        } else {\r\n          this.currentEditor.show();\r\n        }\r\n      }\r\n\r\n      if (this.currentEditor.position) {\r\n        this.currentEditor.position(cellBox);\r\n      }\r\n    }\r\n  }\r\n\r\n  /** Returns the active cell editor. If there is no actively edited cell, null is returned.   */\r\n  getCellEditor() {\r\n    return this.currentEditor;\r\n  }\r\n\r\n  /**\r\n   * Returns an object representing the coordinates of the currently active cell:\r\n   * @example\t`{ row: activeRow, cell: activeCell }`\r\n   */\r\n  getActiveCell() {\r\n    if (!this.activeCellNode) {\r\n      return null;\r\n    }\r\n    return { row: this.activeRow, cell: this.activeCell };\r\n  }\r\n\r\n  /** Returns the DOM element containing the currently active cell. If no cell is active, null is returned. */\r\n  getActiveCellNode() {\r\n    return this.activeCellNode;\r\n  }\r\n\r\n  // This get/set methods are used for keeping text-selection. These don't consider IE because they don't loose text-selection.\r\n  // Fix for firefox selection. See https://github.com/mleibman/SlickGrid/pull/746/files\r\n  protected getTextSelection() {\r\n    let textSelection: Range | null = null;\r\n    if (window.getSelection) {\r\n      const selection = window.getSelection();\r\n      if ((selection?.rangeCount ?? 0) > 0) {\r\n        textSelection = selection!.getRangeAt(0);\r\n      }\r\n    }\r\n    return textSelection;\r\n  }\r\n\r\n  protected setTextSelection(selection: Range) {\r\n    if (window.getSelection && selection) {\r\n      const target = window.getSelection();\r\n      if (target) {\r\n        target.removeAllRanges();\r\n        target.addRange(selection);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Scroll to a specific row and make it into the view\r\n   * @param {Number} row - grid row number\r\n   * @param {Boolean} doPaging - scroll when pagination is enabled\r\n   */\r\n  scrollRowIntoView(row: number, doPaging?: boolean) {\r\n    if (!this.hasFrozenRows ||\r\n      (!this._options.frozenBottom && row > this.actualFrozenRow - 1) ||\r\n      (this._options.frozenBottom && row < this.actualFrozenRow - 1)) {\r\n\r\n      const viewportScrollH = Utils.height(this._viewportScrollContainerY) as number;\r\n\r\n      // if frozen row on top\r\n      // subtract number of frozen row\r\n      const rowNumber = (this.hasFrozenRows && !this._options.frozenBottom ? row - this._options.frozenRow! : row);\r\n\r\n      const rowAtTop = rowNumber * this._options.rowHeight!;\r\n      const rowAtBottom = (rowNumber + 1) * this._options.rowHeight!\r\n        - viewportScrollH\r\n        + (this.viewportHasHScroll ? (this.scrollbarDimensions?.height ?? 0) : 0);\r\n\r\n      // need to page down?\r\n      if ((rowNumber + 1) * this._options.rowHeight! > this.scrollTop + viewportScrollH + this.offset) {\r\n        this.scrollTo(doPaging ? rowAtTop : rowAtBottom);\r\n        this.render();\r\n      }\r\n      // or page up?\r\n      else if (rowNumber * this._options.rowHeight! < this.scrollTop + this.offset) {\r\n        this.scrollTo(doPaging ? rowAtBottom : rowAtTop);\r\n        this.render();\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Scroll to the top row and make it into the view\r\n   * @param {Number} row - grid row number\r\n   */\r\n  scrollRowToTop(row: number) {\r\n    this.scrollTo(row * this._options.rowHeight!);\r\n    this.render();\r\n  }\r\n\r\n  protected scrollPage(dir: number) {\r\n    const deltaRows = dir * this.numVisibleRows;\r\n    /// First fully visible row crosses the line with\r\n    /// y === bottomOfTopmostFullyVisibleRow\r\n    const bottomOfTopmostFullyVisibleRow = this.scrollTop + this._options.rowHeight! - 1;\r\n    this.scrollTo((this.getRowFromPosition(bottomOfTopmostFullyVisibleRow) + deltaRows) * this._options.rowHeight!);\r\n    this.render();\r\n\r\n    if (this._options.enableCellNavigation && Utils.isDefined(this.activeRow)) {\r\n      let row = this.activeRow + deltaRows;\r\n      const dataLengthIncludingAddNew = this.getDataLengthIncludingAddNew();\r\n      if (row >= dataLengthIncludingAddNew) {\r\n        row = dataLengthIncludingAddNew - 1;\r\n      }\r\n      if (row < 0) {\r\n        row = 0;\r\n      }\r\n\r\n      let cell = 0;\r\n      let prevCell: number | null = null;\r\n      const prevActivePosX = this.activePosX;\r\n      while (cell <= this.activePosX) {\r\n        if (this.canCellBeActive(row, cell)) {\r\n          prevCell = cell;\r\n        }\r\n        cell += this.getColspan(row, cell);\r\n      }\r\n\r\n      if (prevCell !== null) {\r\n        this.setActiveCellInternal(this.getCellNode(row, prevCell));\r\n        this.activePosX = prevActivePosX;\r\n      } else {\r\n        this.resetActiveCell();\r\n      }\r\n    }\r\n  }\r\n\r\n  /** Navigate (scroll) by a page down */\r\n  navigatePageDown() {\r\n    this.scrollPage(1);\r\n  }\r\n\r\n  /** Navigate (scroll) by a page up */\r\n  navigatePageUp() {\r\n    this.scrollPage(-1);\r\n  }\r\n\r\n  /** Navigate to the top of the grid */\r\n  navigateTop() {\r\n    this.navigateToRow(0);\r\n  }\r\n\r\n  /** Navigate to the bottom of the grid */\r\n  navigateBottom() {\r\n    this.navigateToRow(this.getDataLength() - 1);\r\n  }\r\n\r\n  protected navigateToRow(row: number) {\r\n    const num_rows = this.getDataLength();\r\n    if (!num_rows) { return true; }\r\n\r\n    if (row < 0) {\r\n      row = 0;\r\n    } else if (row >= num_rows) {\r\n      row = num_rows - 1;\r\n    }\r\n\r\n    this.scrollCellIntoView(row, 0, true);\r\n    if (this._options.enableCellNavigation && Utils.isDefined(this.activeRow)) {\r\n      let cell = 0;\r\n      let prevCell: number | null = null;\r\n      const prevActivePosX = this.activePosX;\r\n      while (cell <= this.activePosX) {\r\n        if (this.canCellBeActive(row, cell)) {\r\n          prevCell = cell;\r\n        }\r\n        cell += this.getColspan(row, cell);\r\n      }\r\n\r\n      if (prevCell !== null) {\r\n        this.setActiveCellInternal(this.getCellNode(row, prevCell));\r\n        this.activePosX = prevActivePosX;\r\n      } else {\r\n        this.resetActiveCell();\r\n      }\r\n    }\r\n    return true;\r\n  }\r\n\r\n  protected getColspan(row: number, cell: number): number {\r\n    const metadata = (this.data as CustomDataView<TData>)?.getItemMetadata?.(row);\r\n    if (!metadata || !metadata.columns) {\r\n      return 1;\r\n    }\r\n\r\n    const columnData = metadata.columns[this.columns[cell].id] || metadata.columns[cell];\r\n    let colspan = columnData?.colspan;\r\n    if (colspan === '*') {\r\n      colspan = this.columns.length - cell;\r\n    } else {\r\n      colspan = colspan || 1;\r\n    }\r\n\r\n    return colspan as number;\r\n  }\r\n\r\n  protected findFirstFocusableCell(row: number) {\r\n    let cell = 0;\r\n    while (cell < this.columns.length) {\r\n      if (this.canCellBeActive(row, cell)) {\r\n        return cell;\r\n      }\r\n      cell += this.getColspan(row, cell);\r\n    }\r\n    return null;\r\n  }\r\n\r\n  protected findLastFocusableCell(row: number) {\r\n    let cell = 0;\r\n    let lastFocusableCell: number | null = null;\r\n    while (cell < this.columns.length) {\r\n      if (this.canCellBeActive(row, cell)) {\r\n        lastFocusableCell = cell;\r\n      }\r\n      cell += this.getColspan(row, cell);\r\n    }\r\n    return lastFocusableCell;\r\n  }\r\n\r\n  protected gotoRight(row: number, cell: number, _posX?: number) {\r\n    if (cell >= this.columns.length) {\r\n      return null;\r\n    }\r\n\r\n    do {\r\n      cell += this.getColspan(row, cell);\r\n    }\r\n    while (cell < this.columns.length && !this.canCellBeActive(row, cell));\r\n\r\n    if (cell < this.columns.length) {\r\n      return {\r\n        row,\r\n        cell,\r\n        posX: cell\r\n      };\r\n    }\r\n    return null;\r\n  }\r\n\r\n  protected gotoLeft(row: number, cell: number, _posX?: number) {\r\n    if (cell <= 0) {\r\n      return null;\r\n    }\r\n\r\n    const firstFocusableCell = this.findFirstFocusableCell(row);\r\n    if (firstFocusableCell === null || firstFocusableCell >= cell) {\r\n      return null;\r\n    }\r\n\r\n    let prev = {\r\n      row,\r\n      cell: firstFocusableCell,\r\n      posX: firstFocusableCell\r\n    };\r\n    let pos;\r\n    while (true) {\r\n      pos = this.gotoRight(prev.row, prev.cell, prev.posX);\r\n      if (!pos) {\r\n        return null;\r\n      }\r\n      if (pos.cell >= cell) {\r\n        return prev;\r\n      }\r\n      prev = pos;\r\n    }\r\n  }\r\n\r\n  protected gotoDown(row: number, cell: number, posX: number) {\r\n    let prevCell;\r\n    const dataLengthIncludingAddNew = this.getDataLengthIncludingAddNew();\r\n    while (true) {\r\n      if (++row >= dataLengthIncludingAddNew) {\r\n        return null;\r\n      }\r\n\r\n      prevCell = cell = 0;\r\n      while (cell <= posX) {\r\n        prevCell = cell;\r\n        cell += this.getColspan(row, cell);\r\n      }\r\n\r\n      if (this.canCellBeActive(row, prevCell)) {\r\n        return {\r\n          row,\r\n          cell: prevCell,\r\n          posX\r\n        };\r\n      }\r\n    }\r\n  }\r\n\r\n  protected gotoUp(row: number, cell: number, posX: number) {\r\n    let prevCell;\r\n    while (true) {\r\n      if (--row < 0) {\r\n        return null;\r\n      }\r\n\r\n      prevCell = cell = 0;\r\n      while (cell <= posX) {\r\n        prevCell = cell;\r\n        cell += this.getColspan(row, cell);\r\n      }\r\n\r\n      if (this.canCellBeActive(row, prevCell)) {\r\n        return {\r\n          row,\r\n          cell: prevCell,\r\n          posX\r\n        };\r\n      }\r\n    }\r\n  }\r\n\r\n  protected gotoNext(row: number, cell: number, posX?: number) {\r\n    if (!Utils.isDefined(row) && !Utils.isDefined(cell)) {\r\n      row = cell = posX = 0;\r\n      if (this.canCellBeActive(row, cell)) {\r\n        return {\r\n          row,\r\n          cell,\r\n          posX: cell\r\n        };\r\n      }\r\n    }\r\n\r\n    const pos = this.gotoRight(row, cell, posX);\r\n    if (pos) {\r\n      return pos;\r\n    }\r\n\r\n    let firstFocusableCell: number | null = null;\r\n    const dataLengthIncludingAddNew = this.getDataLengthIncludingAddNew();\r\n\r\n    // if at last row, cycle through columns rather than get stuck in the last one\r\n    if (row === dataLengthIncludingAddNew - 1) { row--; }\r\n\r\n    while (++row < dataLengthIncludingAddNew) {\r\n      firstFocusableCell = this.findFirstFocusableCell(row);\r\n      if (firstFocusableCell !== null) {\r\n        return {\r\n          row,\r\n          cell: firstFocusableCell,\r\n          posX: firstFocusableCell\r\n        };\r\n      }\r\n    }\r\n    return null;\r\n  }\r\n\r\n  protected gotoPrev(row: number, cell: number, posX?: number) {\r\n    if (!Utils.isDefined(row) && !Utils.isDefined(cell)) {\r\n      row = this.getDataLengthIncludingAddNew() - 1;\r\n      cell = posX = this.columns.length - 1;\r\n      if (this.canCellBeActive(row, cell)) {\r\n        return {\r\n          row,\r\n          cell,\r\n          posX: cell\r\n        };\r\n      }\r\n    }\r\n\r\n    let pos;\r\n    let lastSelectableCell;\r\n    while (!pos) {\r\n      pos = this.gotoLeft(row, cell, posX);\r\n      if (pos) {\r\n        break;\r\n      }\r\n      if (--row < 0) {\r\n        return null;\r\n      }\r\n\r\n      cell = 0;\r\n      lastSelectableCell = this.findLastFocusableCell(row);\r\n      if (lastSelectableCell !== null) {\r\n        pos = {\r\n          row,\r\n          cell: lastSelectableCell,\r\n          posX: lastSelectableCell\r\n        };\r\n      }\r\n    }\r\n    return pos;\r\n  }\r\n\r\n  protected gotoRowStart(row: number, _cell: number, _posX?: number) {\r\n    const newCell = this.findFirstFocusableCell(row);\r\n    if (newCell === null) { return null; }\r\n\r\n    return {\r\n      row,\r\n      cell: newCell,\r\n      posX: newCell\r\n    };\r\n  }\r\n\r\n  protected gotoRowEnd(row: number, _cell: number, _posX?: number) {\r\n    const newCell = this.findLastFocusableCell(row);\r\n    if (newCell === null) { return null; }\r\n\r\n    return {\r\n      row,\r\n      cell: newCell,\r\n      posX: newCell\r\n    };\r\n  }\r\n\r\n  /** Switches the active cell one cell right skipping unselectable cells. Unline navigateNext, navigateRight stops at the last cell of the row. Returns a boolean saying whether it was able to complete or not. */\r\n  navigateRight() {\r\n    return this.navigate('right');\r\n  }\r\n\r\n  /** Switches the active cell one cell left skipping unselectable cells. Unline navigatePrev, navigateLeft stops at the first cell of the row. Returns a boolean saying whether it was able to complete or not. */\r\n  navigateLeft() {\r\n    return this.navigate('left');\r\n  }\r\n\r\n  /** Switches the active cell one row down skipping unselectable cells. Returns a boolean saying whether it was able to complete or not. */\r\n  navigateDown() {\r\n    return this.navigate('down');\r\n  }\r\n\r\n  /** Switches the active cell one row up skipping unselectable cells. Returns a boolean saying whether it was able to complete or not. */\r\n  navigateUp() {\r\n    return this.navigate('up');\r\n  }\r\n\r\n  /** Tabs over active cell to the next selectable cell. Returns a boolean saying whether it was able to complete or not. */\r\n  navigateNext() {\r\n    return this.navigate('next');\r\n  }\r\n\r\n  /** Tabs over active cell to the previous selectable cell. Returns a boolean saying whether it was able to complete or not. */\r\n  navigatePrev() {\r\n    return this.navigate('prev');\r\n  }\r\n\r\n  /** Navigate to the start row in the grid */\r\n  navigateRowStart() {\r\n    return this.navigate('home');\r\n  }\r\n\r\n  /** Navigate to the end row in the grid */\r\n  navigateRowEnd() {\r\n    return this.navigate('end');\r\n  }\r\n\r\n  /**\r\n   * @param {string} dir Navigation direction.\r\n   * @return {boolean} Whether navigation resulted in a change of active cell.\r\n   */\r\n  protected navigate(dir: 'up' | 'down' | 'left' | 'right' | 'prev' | 'next' | 'home' | 'end') {\r\n    if (!this._options.enableCellNavigation) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.activeCellNode && dir !== 'prev' && dir !== 'next') {\r\n      return false;\r\n    }\r\n\r\n    if (!this.getEditorLock()?.commitCurrentEdit()) {\r\n      return true;\r\n    }\r\n    this.setFocus();\r\n\r\n    const tabbingDirections = {\r\n      'up': -1,\r\n      'down': 1,\r\n      'left': -1,\r\n      'right': 1,\r\n      'prev': -1,\r\n      'next': 1,\r\n      'home': -1,\r\n      'end': 1\r\n    };\r\n    this.tabbingDirection = tabbingDirections[dir];\r\n\r\n    const stepFunctions = {\r\n      'up': this.gotoUp,\r\n      'down': this.gotoDown,\r\n      'left': this.gotoLeft,\r\n      'right': this.gotoRight,\r\n      'prev': this.gotoPrev,\r\n      'next': this.gotoNext,\r\n      'home': this.gotoRowStart,\r\n      'end': this.gotoRowEnd\r\n    };\r\n    const stepFn = stepFunctions[dir];\r\n    const pos = stepFn.call(this, this.activeRow, this.activeCell, this.activePosX);\r\n    if (pos) {\r\n      if (this.hasFrozenRows && this._options.frozenBottom && pos.row === this.getDataLength()) {\r\n        return;\r\n      }\r\n\r\n      const isAddNewRow = (pos.row === this.getDataLength());\r\n\r\n      if ((!this._options.frozenBottom && pos.row >= this.actualFrozenRow)\r\n        || (this._options.frozenBottom && pos.row < this.actualFrozenRow)\r\n      ) {\r\n        this.scrollCellIntoView(pos.row, pos.cell, !isAddNewRow && this._options.emulatePagingWhenScrolling);\r\n      }\r\n      this.setActiveCellInternal(this.getCellNode(pos.row, pos.cell));\r\n      this.activePosX = pos.posX;\r\n      return true;\r\n    } else {\r\n      this.setActiveCellInternal(this.getCellNode(this.activeRow, this.activeCell));\r\n      return false;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Returns a DOM element containing a cell at a given row and cell.\r\n   * @param row A row index.\r\n   * @param cell A column index.\r\n   */\r\n  getCellNode(row: number, cell: number): HTMLDivElement | null {\r\n    if (this.rowsCache[row]) {\r\n      this.ensureCellNodesInRowsCache(row);\r\n      try {\r\n        if (this.rowsCache[row].cellNodesByColumnIdx.length > cell) {\r\n          return this.rowsCache[row].cellNodesByColumnIdx[cell] as HTMLDivElement | null;\r\n        }\r\n        else {\r\n          return null;\r\n        }\r\n      } catch (e) {\r\n        return this.rowsCache[row].cellNodesByColumnIdx[cell] as HTMLDivElement | null;\r\n      }\r\n    }\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * Sets an active cell.\r\n   * @param {number} row - A row index.\r\n   * @param {number} cell - A column index.\r\n   * @param {boolean} [optionEditMode] Option Edit Mode is Auto-Edit?\r\n   * @param {boolean} [preClickModeOn] Pre-Click Mode is Enabled?\r\n   * @param {boolean} [suppressActiveCellChangedEvent] Are we suppressing Active Cell Changed Event (defaults to false)\r\n   */\r\n  setActiveCell(row: number, cell: number, opt_editMode?: boolean, preClickModeOn?: boolean, suppressActiveCellChangedEvent?: boolean) {\r\n    if (!this.initialized) { return; }\r\n    if (row > this.getDataLength() || row < 0 || cell >= this.columns.length || cell < 0) {\r\n      return;\r\n    }\r\n\r\n    if (!this._options.enableCellNavigation) {\r\n      return;\r\n    }\r\n\r\n    this.scrollCellIntoView(row, cell, false);\r\n    this.setActiveCellInternal(this.getCellNode(row, cell), opt_editMode, preClickModeOn, suppressActiveCellChangedEvent);\r\n  }\r\n\r\n  /**\r\n   * Sets an active cell.\r\n   * @param {number} row - A row index.\r\n   * @param {number} cell - A column index.\r\n   * @param {boolean} [suppressScrollIntoView] - optionally suppress the ScrollIntoView that happens by default (defaults to false)\r\n   */\r\n  setActiveRow(row: number, cell?: number, suppressScrollIntoView?: boolean) {\r\n    if (!this.initialized) { return; }\r\n    if (row > this.getDataLength() || row < 0 || (cell ?? 0) >= this.columns.length || (cell ?? 0) < 0) {\r\n      return;\r\n    }\r\n\r\n    this.activeRow = row;\r\n    if (!suppressScrollIntoView) {\r\n      this.scrollCellIntoView(row, cell || 0, false);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Returns true if you can click on a given cell and make it the active focus.\r\n   * @param {number} row A row index.\r\n   * @param {number} col A column index.\r\n   */\r\n  canCellBeActive(row: number, cell: number) {\r\n    if (!this._options.enableCellNavigation || row >= this.getDataLengthIncludingAddNew() ||\r\n      row < 0 || cell >= this.columns.length || cell < 0) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.columns[cell] || this.columns[cell].hidden) {\r\n      return false;\r\n    }\r\n\r\n    const rowMetadata = (this.data as CustomDataView<TData>)?.getItemMetadata?.(row);\r\n    if (rowMetadata?.focusable !== undefined) {\r\n      return !!rowMetadata.focusable;\r\n    }\r\n\r\n    const columnMetadata = rowMetadata?.columns;\r\n    if (columnMetadata?.[this.columns[cell].id]?.focusable !== undefined) {\r\n      return !!columnMetadata[this.columns[cell].id].focusable;\r\n    }\r\n    if (columnMetadata?.[cell]?.focusable !== undefined) {\r\n      return !!columnMetadata[cell].focusable;\r\n    }\r\n\r\n    return !!(this.columns[cell].focusable);\r\n  }\r\n\r\n  /**\r\n   * Returns true if selecting the row causes this particular cell to have the selectedCellCssClass applied to it. A cell can be selected if it exists and if it isn't on an empty / \"Add New\" row and if it is not marked as \"unselectable\" in the column definition.\r\n   * @param {number} row A row index.\r\n   * @param {number} col A column index.\r\n   */\r\n  canCellBeSelected(row: number, cell: number) {\r\n    if (row >= this.getDataLength() || row < 0 || cell >= this.columns.length || cell < 0) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.columns[cell] || this.columns[cell].hidden) {\r\n      return false;\r\n    }\r\n\r\n    const rowMetadata = (this.data as CustomDataView<TData>)?.getItemMetadata?.(row);\r\n    if (rowMetadata?.selectable !== undefined) {\r\n      return !!rowMetadata.selectable;\r\n    }\r\n\r\n    const columnMetadata = rowMetadata?.columns && (rowMetadata.columns[this.columns[cell].id] || rowMetadata.columns[cell]);\r\n    if (columnMetadata?.selectable !== undefined) {\r\n      return !!columnMetadata.selectable;\r\n    }\r\n\r\n    return !!this.columns[cell].selectable;\r\n  }\r\n\r\n  /**\r\n   * Accepts a row integer and a cell integer, scrolling the view to the row where row is its row index, and cell is its cell index. Optionally accepts a forceEdit boolean which, if true, will attempt to initiate the edit dialogue for the field in the specified cell.\r\n   * Unlike setActiveCell, this scrolls the row into the viewport and sets the keyboard focus.\r\n   * @param {Number} row A row index.\r\n   * @param {Number} cell A column index.\r\n   * @param {Boolean} [forceEdit] If true, will attempt to initiate the edit dialogue for the field in the specified cell.\r\n   */\r\n  gotoCell(row: number, cell: number, forceEdit?: boolean, e?: Event | SlickEvent_) {\r\n    if (!this.initialized) { return; }\r\n    if (!this.canCellBeActive(row, cell)) {\r\n      return;\r\n    }\r\n\r\n    if (!this.getEditorLock()?.commitCurrentEdit()) {\r\n      return;\r\n    }\r\n\r\n    this.scrollCellIntoView(row, cell, false);\r\n\r\n    const newCell = this.getCellNode(row, cell);\r\n\r\n    // if selecting the 'add new' row, start editing right away\r\n    const column = this.columns[cell];\r\n    const suppressActiveCellChangedEvent = !!(this._options.editable && column?.editor && this._options.suppressActiveCellChangeOnEdit);\r\n    this.setActiveCellInternal(newCell, (forceEdit || (row === this.getDataLength()) || this._options.autoEdit), null, suppressActiveCellChangedEvent, e);\r\n\r\n    // if no editor was created, set the focus back on the grid\r\n    if (!this.currentEditor) {\r\n      this.setFocus();\r\n    }\r\n  }\r\n\r\n\r\n  //////////////////////////////////////////////////////////////////////////////////////////////\r\n  // IEditor implementation for the editor lock\r\n\r\n  protected commitCurrentEdit() {\r\n    const self = this as SlickGrid<TData, C, O>;\r\n    const item = self.getDataItem(self.activeRow);\r\n    const column = self.columns[self.activeCell];\r\n\r\n    if (self.currentEditor) {\r\n      if (self.currentEditor.isValueChanged()) {\r\n        const validationResults = self.currentEditor.validate();\r\n\r\n        if (validationResults.valid) {\r\n          const row = self.activeRow;\r\n          const cell = self.activeCell;\r\n          const editor = self.currentEditor;\r\n          const serializedValue = self.currentEditor.serializeValue();\r\n          const prevSerializedValue = self.serializedEditorValue;\r\n\r\n          if (self.activeRow < self.getDataLength()) {\r\n            const editCommand = {\r\n              row,\r\n              cell,\r\n              editor,\r\n              serializedValue,\r\n              prevSerializedValue,\r\n              execute: () => {\r\n                editor.applyValue(item, serializedValue);\r\n                self.updateRow(row);\r\n                self.trigger(self.onCellChange, { command: 'execute', row, cell, item, column });\r\n              },\r\n              undo: () => {\r\n                editor.applyValue(item, prevSerializedValue);\r\n                self.updateRow(row);\r\n                self.trigger(self.onCellChange, { command: 'undo', row, cell, item, column, });\r\n              }\r\n            };\r\n\r\n            if (self._options.editCommandHandler) {\r\n              self.makeActiveCellNormal(true);\r\n              self._options.editCommandHandler(item, column, editCommand);\r\n            } else {\r\n              editCommand.execute();\r\n              self.makeActiveCellNormal(true);\r\n            }\r\n\r\n          } else {\r\n            const newItem = {};\r\n            self.currentEditor.applyValue(newItem, self.currentEditor.serializeValue());\r\n            self.makeActiveCellNormal(true);\r\n            self.trigger(self.onAddNewRow, { item: newItem, column });\r\n          }\r\n\r\n          // check whether the lock has been re-acquired by event handlers\r\n          return !self.getEditorLock()?.isActive();\r\n        } else {\r\n          // Re-add the CSS class to trigger transitions, if any.\r\n          if (self.activeCellNode) {\r\n            self.activeCellNode.classList.remove('invalid');\r\n            Utils.width(self.activeCellNode);// force layout\r\n            self.activeCellNode.classList.add('invalid');\r\n          }\r\n\r\n          self.trigger(self.onValidationError, {\r\n            editor: self.currentEditor,\r\n            cellNode: self.activeCellNode,\r\n            validationResults,\r\n            row: self.activeRow,\r\n            cell: self.activeCell,\r\n            column\r\n          });\r\n\r\n          self.currentEditor.focus();\r\n          return false;\r\n        }\r\n      }\r\n\r\n      self.makeActiveCellNormal(true);\r\n    }\r\n    return true;\r\n  }\r\n\r\n  protected cancelCurrentEdit() {\r\n    this.makeActiveCellNormal();\r\n    return true;\r\n  }\r\n\r\n  protected rowsToRanges(rows: number[]) {\r\n    const ranges: SlickRange_[] = [];\r\n    const lastCell = this.columns.length - 1;\r\n    for (let i = 0; i < rows.length; i++) {\r\n      ranges.push(new SlickRange(rows[i], 0, rows[i], lastCell));\r\n    }\r\n    return ranges;\r\n  }\r\n\r\n  /** Returns an array of row indices corresponding to the currently selected rows. */\r\n  getSelectedRows() {\r\n    if (!this.selectionModel) {\r\n      throw new Error('SlickGrid Selection model is not set');\r\n    }\r\n    return this.selectedRows.slice(0);\r\n  }\r\n\r\n  /**\r\n   * Accepts an array of row indices and applies the current selectedCellCssClass to the cells in the row, respecting whether cells have been flagged as selectable.\r\n   * @param {Array<number>} rowsArray - an array of row numbers.\r\n   * @param {String} [caller] - an optional string to identify who called the method\r\n   */\r\n  setSelectedRows(rows: number[], caller?: string) {\r\n    if (!this.selectionModel) {\r\n      throw new Error('SlickGrid Selection model is not set');\r\n    }\r\n    if (this && this.getEditorLock && !this.getEditorLock()?.isActive()) {\r\n      this.selectionModel.setSelectedRanges(this.rowsToRanges(rows), caller || 'SlickGrid.setSelectedRows');\r\n    }\r\n  }\r\n\r\n  /** html sanitizer to avoid scripting attack */\r\n  sanitizeHtmlString(dirtyHtml: string, suppressLogging?: boolean) {\r\n    if (!this._options.sanitizer || typeof dirtyHtml !== 'string') {\r\n      return dirtyHtml;\r\n    }\r\n\r\n    const cleanHtml = this._options.sanitizer(dirtyHtml);\r\n\r\n    if (!suppressLogging && this._options.logSanitizedHtml && this.logMessageCount <= this.logMessageMaxCount && cleanHtml !== dirtyHtml) {\r\n      console.log(`sanitizer altered html: ${dirtyHtml} --> ${cleanHtml}`);\r\n      if (this.logMessageCount === this.logMessageMaxCount) {\r\n        console.log(`sanitizer: silencing messages after first ${this.logMessageMaxCount}`);\r\n      }\r\n      this.logMessageCount++;\r\n    }\r\n    return cleanHtml;\r\n  }\r\n}\r\n\r\n// extend Slick namespace on window object when building as iife\r\nif (IIFE_ONLY && window.Slick) {\r\n  Utils.extend(Slick, {\r\n    Grid: SlickGrid,\r\n  });\r\n}","import $ from 'jquery';\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport AditoolsRenderer from '../modifiers/aditools-renderer.ts';\nimport Comparator from '../utils/comparator.ts';\nimport MessageFormat from '@messageformat/core';\nimport exportToExcel from '../utils/export-to-excel.ts';\nimport 'slickgrid/dist/styles/css/slick-icons.css';\nimport 'slickgrid/dist/styles/css/slick-alpine-theme.css';\nimport Sortable from 'sortablejs';\n\ndeclare global {\n  // eslint-disable-next-line @typescript-eslint/no-namespace\n  namespace globalThis {\n    // eslint-disable-next-line no-var\n    var Sortable: unknown;\n  }\n}\nimport { SlickDataView, SlickGrid, SlickRowSelectionModel } from 'slickgrid';\n\nimport type {\n  GridOption,\n  Column,\n  ColumnSort,\n  SlickEventData,\n  OnRowsChangedEventArgs,\n  OnHeaderCellRenderedEventArgs,\n  OnHeaderRowCellRenderedEventArgs,\n  OnHeaderMouseEventArgs,\n  OnRowCountChangedEventArgs,\n  SingleColumnSort,\n  MultiColumnSort,\n} from 'slickgrid';\n\nglobalThis.Sortable = Sortable;\n\nconst TRANSLATIONS = {\n  en: {\n    choose: 'Choose Parameters',\n    all: 'All',\n    table: 'Reset Table',\n    sort: 'Sort By Newest',\n    export: 'Download To Excel',\n  },\n  cn: {\n    choose: '选择参数',\n    all: '全部选择',\n    table: '重置表格',\n    sort: '按最新排序',\n    export: '下载到 Excel',\n  },\n  jp: {\n    choose: 'パラメータを選ぶ',\n    all: 'すべて選択',\n    table: 'リストを元に戻す',\n    sort: '新着順にソート',\n    export: 'エクセルにダウンロード',\n  },\n  ru: {\n    choose: 'Choose Parameters',\n    all: 'All',\n    table: 'Reset Table',\n    sort: 'Sort By Newest',\n    export: 'Download To Excel',\n  },\n  /*\n  ru: {\n    choose: 'Выбрать Параметры',\n    all: 'Все',\n    table: 'Восстановить таблицу',\n    sort: 'Сортировать по Новейшим',\n    export: 'Загрузить в Excel',\n  },\n  */\n};\n\n// Our interfaces\nexport type DeviceData = Record<string, unknown>;\n\nexport type DeviceComparator<T> = (first: T, second: T) => 1 | 0 | -1;\n\nexport interface ColumnFilter<T> {\n  populate(column: Column<T>): HTMLElement;\n  update(control: HTMLElement): void;\n  filter(value: unknown): boolean;\n  unpack(value: string): void;\n  pack(): string;\n  reset(): void;\n  hasValue(): boolean;\n}\nexport interface FieldValues {\n  value: string;\n  display: string;\n  match?: string;\n}\nexport interface DeviceTableSort {\n  field: string;\n  sortAsc: boolean;\n  comparator?: DeviceComparator<string>;\n}\nexport interface SortColumnRef {\n  columnId: string;\n  sortAsc: boolean;\n}\nexport interface PackedFilterValue {\n  columnId: string;\n  filter: string;\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface DeviceColumn<T = any> extends Column {\n  filter?: ColumnFilter<T>;\n  columnValues?: FieldValues[];\n  comparator?: DeviceComparator<string>;\n  classification?: string;\n  isDefault?: boolean;\n  unit?: string | null;\n  fieldContext?: string | null;\n  minMaxTyp?: string | null;\n}\nexport interface DeviceOptions<C extends Column> extends GridOption<C> {\n  preSort?: DeviceTableSort[];\n  parametersPanel?: boolean;\n}\n\ninterface AditoolsDeviceTableArgs {\n  data?: DeviceData[];\n  columns?: DeviceColumn[];\n  options?: DeviceOptions<DeviceColumn>;\n  selectedPart?: string;\n  rowSelected?: (part: string) => void;\n  rowCountChanged?: (newCount: number) => void;\n  summaryRowText?: string;\n  onChooseParameters?: () => void;\n  onAllParameters?: () => void;\n  onResetParameters?: () => void;\n  locale: string;\n  sortColumns?: SortColumnRef[];\n  sortChanged?: (sortColumns: SortColumnRef[]) => void;\n  filters?: PackedFilterValue[];\n  filterChanged?: (filters: PackedFilterValue[]) => void;\n  dataSourceName?: string;\n}\n\ninterface AditoolsDeviceTableSignature {\n  Args: AditoolsDeviceTableArgs;\n  Element: HTMLDivElement;\n  Blocks: { default: [] };\n}\nexport default class AditoolsDeviceTable extends Component<AditoolsDeviceTableSignature> {\n  // Component properties\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  grid!: SlickGrid<any, DeviceColumn, DeviceOptions<DeviceColumn>> | undefined;\n  dataView!: SlickDataView;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  columnFilters: Record<string, ColumnFilter<any>[]> = {};\n  @tracked totalRows = 0;\n  @tracked workingRows = 0;\n  @tracked hasParametersPanel = false;\n  renderer = AditoolsRenderer;\n\n  headerColumnRows = 1;\n\n  get _data(): DeviceData[] {\n    return this.args.data || [];\n  }\n\n  get _columns(): DeviceColumn[] {\n    return this.args.columns || [];\n  }\n\n  get _rowCountStatus(): string | undefined {\n    let result = undefined;\n    if (this.args.summaryRowText) {\n      const mf = new MessageFormat('*');\n      const msg = mf.compile(this.args.summaryRowText);\n      result = msg({ count: this.workingRows.toString(), total: this.totalRows.toString() });\n    }\n    return result;\n  }\n\n  get _translations(): Record<string, string> {\n    let locale: 'en' | 'cn' | 'jp' | 'ru' = 'en';\n    if (\n      this.args.locale === 'en' ||\n      this.args.locale === 'cn' ||\n      this.args.locale === 'jp' ||\n      this.args.locale === 'ru'\n    ) {\n      locale = this.args.locale;\n    }\n    return TRANSLATIONS[locale as 'en' | 'cn' | 'jp' | 'ru'];\n  }\n\n  scrollSelectedPartToTop(\n    selectedPart: string,\n    dataView: SlickDataView,\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    grid: SlickGrid<any, DeviceColumn, DeviceOptions<DeviceColumn>>,\n  ): void {\n    if (selectedPart) {\n      let selectedRow = -1;\n      const columns = grid.getColumns();\n      const nameColumn = columns[0] as Column;\n      if (columns.length > 1 && typeof nameColumn['field'] === 'string') {\n        const fieldval = nameColumn.field;\n        for (let i = 0; i < dataView.getLength(); i++) {\n          if (dataView.getItem(i)[fieldval] === selectedPart) {\n            selectedRow = i;\n          }\n        }\n      }\n      if (selectedRow !== -1) {\n        grid.setSelectedRows([selectedRow]);\n        setTimeout(() => {\n          grid.scrollRowToTop(selectedRow - 1.75);\n        }, 0);\n      }\n    }\n  }\n\n  sortRows(columns: ColumnSort[]): void {\n    // Build the Columns to Sort (includes the pre-sort, if it is available)\n    const preSort = this.args.options && this.args.options['preSort'];\n    const colsToSort: DeviceTableSort[] = [];\n    if (preSort && preSort.length > 0) {\n      for (const presortItem of preSort) {\n        colsToSort.push({ field: presortItem.field, sortAsc: presortItem.sortAsc, comparator: presortItem.comparator });\n      }\n    }\n    if (columns.length === 0) {\n      // Sort by Vintage when there are no columns selected for sort (both vintage and display_s1 refer to the same thing)\n      // Legacy data may use 'vintage' but data from PST will use display_s1\n      colsToSort.push({ field: 'vintage', sortAsc: false, comparator: Comparator.integerComparator });\n      colsToSort.push({ field: 'display_s1', sortAsc: false, comparator: Comparator.integerComparator });\n    } else {\n      // Sorted Columns\n      for (const sortColumn of columns) {\n        const column = this.args.columns?.find((col) => col.id == sortColumn.columnId) as DeviceColumn;\n        if (column.field) {\n          colsToSort.push({\n            field: column.field,\n            sortAsc: sortColumn.sortAsc,\n            comparator: column.comparator,\n          });\n        }\n      }\n    }\n\n    // Sort the Data View\n    this.dataView.sort((dataRow1: DeviceData, dataRow2: DeviceData) => {\n      let result = 0;\n      for (const column of colsToSort) {\n        const field = column.field;\n        let comparator: DeviceComparator<string> = Comparator.textComparator;\n        const specificComparator = column.comparator;\n        if (specificComparator) {\n          comparator = specificComparator;\n        }\n        const sign = column.sortAsc ? 1 : -1;\n        const value1 = dataRow1[field],\n          value2 = dataRow2[field];\n        result = comparator(value1 as string, value2 as string) * sign;\n        if (result !== 0) {\n          return result;\n        }\n      }\n      return result;\n    }, true);\n  }\n\n  findVisibleColumn(e: Event | SlickEventData, gridObj: SlickGrid): number {\n    const cell = gridObj.getCellFromEvent(e);\n    const columns = gridObj.getColumns();\n    let index = 0; //set to zero at default, for the case where there is no column in the right side of the table.\n    if (cell) {\n      for (let i = 0; i < columns.length; i++) {\n        if (gridObj.getCellNode(cell.row, i + 1)) {\n          index = i + 1;\n          break;\n        }\n      }\n    }\n    return index;\n  }\n\n  getDesiredRowObject(e: Event | SlickEventData, gridObj: SlickGrid): HTMLElement | null {\n    const cell = gridObj.getCellFromEvent(e);\n    let result;\n    if (cell) {\n      if (cell.cell === 0) {\n        //left table row is hovered, gets right table row object\n        const columnIndex = this.findVisibleColumn(e, gridObj);\n        result = gridObj.getCellNode(cell.row, columnIndex)?.parentElement;\n      } else {\n        result = gridObj.getCellNode(cell.row, 0)?.parentElement;\n      }\n    }\n    return result || null;\n  }\n\n  getSortColumnRef(sortCols: ColumnSort[]): SortColumnRef[] {\n    const sortColumnRefs: SortColumnRef[] = [];\n    for (const column of sortCols) {\n      const sortCol = column.sortCol;\n      if (sortCol && sortCol.id) {\n        sortColumnRefs.push({\n          columnId: sortCol.id.toString(),\n          sortAsc: column.sortAsc,\n        });\n      }\n    }\n    return sortColumnRefs;\n  }\n\n  getSortColumns(sortColRefs: SortColumnRef[], columns: Column[]): ColumnSort[] {\n    const sortColumns: ColumnSort[] = [];\n    for (const columnRef of sortColRefs) {\n      const column = columns?.find((column) => column.id === columnRef.columnId);\n      if (column) {\n        sortColumns.push({\n          columnId: column.id,\n          sortAsc: columnRef.sortAsc,\n        });\n      }\n    }\n    return sortColumns;\n  }\n\n  getPackedFilters(columns: Column[]): PackedFilterValue[] {\n    const packedFilters: PackedFilterValue[] = [];\n\n    if (this.grid) {\n      for (let i = 0; i < columns.length; i++) {\n        const column = columns[i] as DeviceColumn;\n        if (column.id && column.filter) {\n          packedFilters.push({ columnId: column.id.toString(), filter: column.filter.pack() });\n        }\n      }\n    }\n\n    return packedFilters;\n  }\n\n  generateTitleFromColumn(column: DeviceColumn): string {\n    let numberedMultiColumnSortElem = '';\n    const cssRoot = document.querySelector(':root') as HTMLElement;\n    if (column.sortable) {\n      const options = this.grid?.getOptions();\n      numberedMultiColumnSortElem =\n        options && options.numberedMultiColumnSort ? '<span class=\"slick-sort-indicator-numbered\"></span>' : '';\n    }\n    let fieldContextRow = '';\n    if (typeof column.fieldContext !== 'undefined') {\n      fieldContextRow = `<span class=\"slick-column-context\">${column.fieldContext}</span>`;\n      if (this.headerColumnRows < 2) {\n        this.headerColumnRows = 2;\n      }\n    }\n    if (typeof column.unit != 'undefined' && column.unit !== null) {\n      this.headerColumnRows =\n        this.headerColumnRows === 3 || (this.headerColumnRows === 2 && typeof column.fieldContext !== 'undefined')\n          ? 3\n          : 2;\n      const unitText = column.unit && column.unit != 'n/a' ? column.unit : '';\n      const minMaxText = column.minMaxTyp ?? '';\n      let contextText = '&nbsp;';\n      if (unitText !== '' && minMaxText !== '') {\n        contextText = `${minMaxText} | ${unitText}`;\n      } else if (unitText !== '') {\n        contextText = unitText;\n      }\n      cssRoot.style.setProperty('--alpine-header-name-row-count', this.headerColumnRows.toString());\n      return (\n        // Avoid newlines in the generated HTML\n        '<div class=\"slick-header-column-group\"><div class=\"slick-column-first-row\">' +\n        `<span class=\"slick-column-name\">${column.name}</span>` +\n        `<span class=\"slick-sort-indicator multi-row\"></span>${numberedMultiColumnSortElem}</div>` +\n        fieldContextRow +\n        `<span class=\"slick-column-unit\">${contextText}</span></div>`\n      );\n    } else {\n      cssRoot.style.setProperty('--alpine-header-name-row-count', this.headerColumnRows.toString());\n      if (column.sortable) {\n        return (\n          `<div class=\"slick-header-column-group\"><div class=\"slick-column-first-row\">` +\n          `<span class=\"slick-column-name\">${column.name}</span><span class=\"slick-sort-indicator\"></span>${numberedMultiColumnSortElem}</div>${fieldContextRow}</div>\n        `\n        );\n      } else {\n        return `<div class=\"slick-header-column-group\"><span class=\"slick-column-name\">${column.name}</span>${fieldContextRow}</div>\n        `;\n      }\n    }\n  }\n\n  updateCheckboxContainerEvents(column: DeviceColumn): void {\n    const filterClass = column.filter;\n    // add class to checkbox-container to overlay, then hide\n    $('#checkbox-container' + column.id).addClass('overlay-checkbox-container');\n    $('#checkbox-container' + column.id).hide();\n\n    // handler for checkbox events\n    const handleCheckbox = (e: Event) => {\n      if (filterClass && this.grid) {\n        filterClass.update(e.target as HTMLInputElement);\n        // Set args.filters when the filter on a column is changed\n        if (column.id) {\n          if (this.args.filterChanged) {\n            const columns = this.grid.getColumns();\n            if (columns) {\n              this.args.filterChanged(this.getPackedFilters(columns));\n            }\n          }\n        }\n        this.dataView.refresh();\n      }\n    };\n    // attach event to checkbox\n    document.getElementById('cbSelectAll_' + column.id)?.addEventListener('click', handleCheckbox);\n    document.querySelectorAll('.cbfilter_' + column.id)?.forEach((cb) => {\n      cb.addEventListener('click', handleCheckbox);\n    });\n\n    const filterToggle = $('#checkbox-filter-toggle' + column.id);\n    if (filterToggle[0]) {\n      const deviceTable = $('#device-table');\n      const header = $('.slick-header-columns');\n\n      filterToggle.off('mouseover');\n      filterToggle.on('mouseover', function () {\n        const newLeft = (filterToggle?.offset()?.left as number) - (deviceTable?.offset()?.left as number) + 11,\n          newTop =\n            (deviceTable?.position().top as number) +\n            (header?.outerHeight() as number) +\n            (filterToggle?.outerHeight() as number) +\n            4;\n\n        $('#checkbox-container' + column.id).css({\n          position: 'absolute',\n          left: `${newLeft}px`,\n          top: `${newTop}px`,\n        });\n\n        $('#checkbox-container' + column.id).show();\n      });\n\n      $('#checkbox-filter-toggle' + column.id).off('mouseleave');\n      $('#checkbox-filter-toggle' + column.id).on('mouseleave', function () {\n        $('#checkbox-container' + column.id).hide();\n      });\n\n      $('#checkbox-container' + column.id).off('mouseover');\n      $('#checkbox-container' + column.id).on('mouseover', function () {\n        $('#checkbox-container' + column.id).show();\n      });\n\n      $('#checkbox-container' + column.id).off('mouseleave');\n      $('#checkbox-container' + column.id).on('mouseleave', function () {\n        $('#checkbox-container' + column.id).hide();\n      });\n    }\n  }\n\n  forceUpdateRowCountIfNeeded(): Promise<void> {\n    return Promise.resolve()\n      .then(() => {\n        return this.dataView;\n      })\n      .then((dataView) => {\n        const dataViewLength = dataView.getLength();\n        if (this.workingRows !== dataViewLength) {\n          const onRowsChangedArgs: OnRowCountChangedEventArgs = {\n            previous: this.workingRows,\n            current: dataViewLength,\n            itemCount: dataViewLength,\n            dataView: dataView,\n            callingOnRowsChanged: true,\n          };\n          dataView.onRowCountChanged.notify(onRowsChangedArgs);\n        }\n        return;\n      });\n  }\n\n  @action inserted(): void {\n    const self = this; //eslint-disable-line @typescript-eslint/no-this-alias\n    // Create element-scope objects\n\n    console.log('Sortable: ' + JSON.stringify(Sortable));\n\n    // Initialize CSS Variable for Header\n    const cssRoot = document.querySelector(':root') as HTMLElement;\n    this.headerColumnRows = 1;\n    cssRoot.style.setProperty('--alpine-header-name-row-count', this.headerColumnRows.toString());\n\n    const slickGridOptions = Object.assign({}, this.args.options);\n    if (slickGridOptions['preSort']) {\n      delete slickGridOptions['preSort'];\n    }\n    if (slickGridOptions['parametersPanel']) {\n      delete slickGridOptions['parametersPanel'];\n    }\n\n    if (slickGridOptions.multiColumnSort === true) {\n      slickGridOptions.numberedMultiColumnSort = true;\n    }\n    slickGridOptions.tristateMultiColumnSort = true;\n\n    this._columns.forEach((c) => c.filter?.reset());\n    this.hasParametersPanel = !!(this.args.options ? this.args.options['parametersPanel'] : false);\n    this.dataView = new SlickDataView({ inlineFilters: false });\n    this.grid = new SlickGrid('#device-table', this.dataView, this._columns, slickGridOptions);\n\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    /// @ts-ignore We don't know how to explicitly invoke node_modules/@types/slickgrid/slick.rowselectionmodel.d.ts\n    this.grid.setSelectionModel(new SlickRowSelectionModel({ selectActiveRow: true }));\n\n    this.dataView.onRowCountChanged.subscribe((/*_e: any, args: any*/) => {\n      if (this.grid) {\n        if (this.args.rowCountChanged) {\n          this.args.rowCountChanged(this.dataView.getLength());\n        }\n        this.workingRows = this.dataView.getLength();\n        this.grid.updateRowCount();\n        this.grid.render();\n      }\n    });\n    this.dataView.onRowsChanged.subscribe((_e: SlickEventData, data: OnRowsChangedEventArgs) => {\n      if (this.grid) {\n        this.grid.invalidateRows(data.rows);\n        this.grid.render();\n        if (this.args.selectedPart) {\n          this.scrollSelectedPartToTop(this.args.selectedPart, this.dataView, this.grid);\n        }\n      }\n    });\n\n    // Selection handling\n\n    this.grid.onSelectedRowsChanged.subscribe(\n      (\n        _e: SlickEventData,\n        data: {\n          rows: number[];\n          grid: { getColumns: () => { field?: string }[] };\n        },\n      ) => {\n        const row = this.dataView.getItem(data.rows[0] as number);\n        if (row) {\n          const column = data.grid.getColumns()[0] as { field: string };\n          const newSelection = row[column.field] as string;\n          if (this.args.rowSelected) {\n            this.args.rowSelected(newSelection);\n          } else {\n            if ($('.slick-cell.selected').hasClass('selected')) {\n              $('.slick-cell.selected').removeClass('selected');\n            }\n          }\n        }\n      },\n    );\n\n    // Custom Row Classes, Disabling\n\n    {\n      this.dataView.getItemMetadata = function (rowIndex: number) {\n        let result = {\n          selectable: true,\n          focusable: true,\n          cssClasses: '',\n        };\n        if (self.grid) {\n          // Get the row object.\n          const rowObj = self.grid.getData<SlickDataView>().getItem(rowIndex);\n\n          // Check if the row object is populated.\n          if (rowObj) {\n            // Disable the row if it's 'not allowed'.\n            if (rowObj['disallowed']) {\n              result = {\n                selectable: rowObj['selectable'] ? (rowObj['selectable'] as boolean) : false,\n                focusable: rowObj['focusable'] ? (rowObj['focusable'] as boolean) : false,\n                cssClasses: 'disabled ' + (rowObj['cssClasses'] ? rowObj['cssClasses'] : ''),\n              };\n            } else {\n              result = {\n                selectable: rowObj['selectable'] ? (rowObj['selectable'] as boolean) : true,\n                focusable: rowObj['focusable'] ? (rowObj['focusable'] as boolean) : true,\n                cssClasses: rowObj['cssClasses'] ? (rowObj['cssClasses'] as string) : '',\n              };\n            }\n          }\n        }\n        return result;\n      };\n    }\n\n    // Filtering\n    $(this.grid.getHeaderRow()).on('input', ':input', this, function () {\n      if (self.grid) {\n        const column = self.grid.getColumns()[\n          self.grid.getColumnIndex(this.getAttribute('data-column-id'))\n        ] as DeviceColumn;\n        if (column.filter) {\n          column.filter.update(this);\n        }\n        self.dataView.refresh();\n      }\n    });\n\n    $(this.grid.getHeaderRow()).on('change', ':input', this, function () {\n      if (self.grid) {\n        const column = self.grid.getColumns()[\n          self.grid.getColumnIndex(this.getAttribute('data-column-id'))\n        ] as DeviceColumn;\n        if (column.filter) {\n          column.filter.update(this);\n\n          // Set args.filters when the filter on a column is changed\n          if (column.id) {\n            if (self.args.filterChanged) {\n              self.args.filterChanged(self.getPackedFilters(self.grid.getColumns()));\n            }\n          }\n        }\n        self.dataView.refresh();\n      }\n    });\n\n    this.grid.onHeaderCellRendered.subscribe((_e: SlickEventData, data: OnHeaderCellRenderedEventArgs) => {\n      $(data.node).empty();\n      $(self.generateTitleFromColumn(data.column as DeviceColumn)).appendTo(data.node);\n      self.forceUpdateRowCountIfNeeded();\n    });\n\n    // remove checkbox container first in the device-table-overlays\n    $('#device-table-overlays').empty();\n    this.grid.onHeaderRowCellRendered.subscribe((_e: SlickEventData, data: OnHeaderRowCellRenderedEventArgs) => {\n      $(data.node).empty();\n      const column = data.column as DeviceColumn;\n      const filterClass = column.filter;\n      const filters = this.args.filters;\n\n      if (filters && filters.length > 0) {\n        const packedFilter = filters?.find((filter) => filter.columnId === column.id);\n        if (filterClass) {\n          if (!filterClass.hasValue()) {\n            if (packedFilter) {\n              filterClass.unpack(packedFilter.filter);\n            } else {\n              filterClass.reset();\n            }\n          }\n        }\n      } else if (filters === undefined) {\n        if (filterClass) {\n          if (!filterClass.hasValue()) {\n            filterClass.reset();\n          }\n        }\n      }\n\n      const selection = filterClass ? filterClass.populate(column) : $();\n      if (typeof column.id === 'string') {\n        $(selection).data('columnId', column.id).appendTo(data.node);\n      }\n\n      // update checkbox and events after appending to column row header\n      this.updateCheckboxContainerEvents(column);\n    });\n\n    // Hovering\n    this.grid.onMouseEnter.subscribe((_e: SlickEventData, args: OnHeaderMouseEventArgs) => {\n      const rowObj = this.getDesiredRowObject(_e, args.grid);\n      if (rowObj) {\n        $(rowObj).addClass('row-hover');\n        if (!$(rowObj).hasClass('even')) {\n          $(rowObj).removeClass('odd');\n        }\n      }\n    });\n    this.grid.onMouseLeave.subscribe((_e: SlickEventData, args: OnHeaderMouseEventArgs) => {\n      const rowObj = this.getDesiredRowObject(_e, args.grid);\n      if (rowObj) {\n        $(rowObj).removeClass('row-hover');\n        if (!$(rowObj).hasClass('even')) {\n          $(rowObj).addClass('odd');\n        }\n      }\n    });\n\n    // Sorting\n\n    this.grid.onSort.subscribe((_e: SlickEventData, data: SingleColumnSort | MultiColumnSort) => {\n      const sortCols = data.multiColumnSort\n        ? data.sortCols\n        : [{ columnId: data.columnId, sortAsc: data.sortAsc, sortCol: data.sortCol }]; // Array of one ColumnSort\n      if (this.grid && sortCols) {\n        this.sortRows(sortCols);\n\n        // Set sortColumns via callback\n        if (this.args.sortChanged) {\n          this.args.sortChanged(this.getSortColumnRef(sortCols));\n        }\n\n        this.grid.invalidate();\n        this.grid.render();\n      }\n    });\n\n    // Turn on the lights!\n    this.grid.init();\n\n    // All of the code so far in the modifier has been happening _during_ rendering.\n    // We're set up, but we don't want to perform a DataView update while we're still rendering, so punt it a micro-cycle.\n    Promise.resolve().then(() => {\n      this.dataView.beginUpdate();\n      this.dataView.setItems(this._data);\n      this.sortRows([]);\n      this.totalRows = this._data.length;\n\n      // NOTE: The callback for setFilter is actually compiled by SlickGrid, not by Babel.\n      // Implications - it needs to be pure vanilla ES5, without accessing a closure.\n      // We use setFilterArgs so we can get at the rest of everything\n      this.dataView.setFilterArgs({\n        selfRef: this,\n      });\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      this.dataView.setFilter((item: any, args: any) => {\n        const actualArgs = args as { selfRef: AditoolsDeviceTable };\n        const actualItem = item as DeviceData;\n        if (actualArgs.selfRef.grid) {\n          const columns = actualArgs.selfRef.grid.getColumns() as DeviceColumn[];\n          return columns.every((column) => {\n            return !column.filter || !column.field || column.filter.filter(actualItem[column.field]); // True if either filter or field doesn't exist or it passes\n          });\n        } else {\n          return true;\n        }\n      });\n\n      const sortColRefs = this.args.sortColumns;\n      if (sortColRefs && sortColRefs.length > 0) {\n        if (this.grid) {\n          this.grid.setSortColumns(sortColRefs);\n          this.sortRows(this.getSortColumns(sortColRefs, this.grid.getColumns()));\n        }\n      }\n\n      this.dataView.endUpdate();\n      if (this.grid) {\n        this.dataView.syncGridSelection(this.grid as SlickGrid, true);\n      }\n      window.addEventListener('resize', this.screenResized);\n      // Delay needed on resize so that Firefox gets benefit - the need for it is a hack, anyway\n      setTimeout(() => {\n        this.screenResized();\n      }, 0);\n    });\n  }\n\n  @action destroying(): void {\n    window.removeEventListener('resize', this.screenResized);\n    if (this.grid) {\n      $(this.grid.getHeaderRow()).off('change keyup', ':input');\n      this.grid.destroy();\n      this.grid = undefined;\n    }\n  }\n\n  @action screenResized(): void {\n    if (this.grid) {\n      this.grid.resizeCanvas();\n    }\n  }\n\n  @action resetSort(): void {\n    if (this.grid) {\n      this.sortRows([]);\n      this.grid.setSortColumns([]);\n      if (this.args.sortChanged) {\n        this.args.sortChanged([]);\n      }\n    }\n  }\n\n  @action tableRowUpdated(event: Event): void {\n    const custEvent = event as CustomEvent<{ id: string }>;\n    if (custEvent.detail && custEvent.detail.id) {\n      const row = this.dataView.getItemById(custEvent.detail.id);\n      this.dataView.updateItem(custEvent.detail.id, row);\n    }\n  }\n\n  // The following invoke callbacks that change the columns array used by the table\n\n  @action chooseParameters(): void {\n    if (this.args.onChooseParameters) {\n      this.args.onChooseParameters();\n    }\n  }\n\n  @action allParameters(): void {\n    if (this.args.onAllParameters) {\n      this.args.onAllParameters();\n    }\n  }\n\n  @action resetParameters(): void {\n    if (this.args.onResetParameters) {\n      this.args.onResetParameters();\n    }\n  }\n\n  @action exportTable(): void {\n    if (this.grid) {\n      const rows = this.grid.getData<SlickDataView>();\n      exportToExcel.exportTable(\n        this.grid.getColumns(),\n        rows.getFilteredItems(),\n        this.args.locale,\n        this.args.dataSourceName,\n      );\n    }\n  }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n  export default interface Registry {\n    AditoolsDeviceTable: typeof AditoolsDeviceTable;\n  }\n}\n","import { userEntryToNumber } from '@ebiz/pretty-num/';\n\nconst hasAnnotation = function (value: string): boolean {\n  if (value.trim().split(' ').length > 1) {\n    return true;\n  }\n  return false;\n};\n\nconst engineeringComparatorCore = function (value1: string, value2: string, isLow = true): 1 | 0 | -1 {\n  /**\n   * currencyRegExp\n   * matches the character with currency symbol for (us,ru,cn,jp) only\n   * followed by digits (equivalent to [0-9]\n   *\n   * areaRegExp\n   * matches float numbers\n   * followed by the characters mm literally (case sensitive)\n   */\n\n  // eslint-disable-next-line no-useless-escape\n  const currencyRegExp = /[\\$¥₽]\\d/;\n  const areaRegExp = /[-+]?[0-9]*\\.?[0-9]+mm/;\n  // checking value 1\n  if (typeof value1 === 'string' && value1.length > 1) {\n    if (hasAnnotation(value1)) {\n      const fieldValue1 = value1.trim().split(' ')[0] ?? '';\n      if (currencyRegExp.test(fieldValue1)) {\n        value1 = fieldValue1.slice(1);\n      }\n      if (areaRegExp.test(fieldValue1)) {\n        value1 = fieldValue1.replace(/[^\\d.-]/g, '');\n      }\n    }\n  }\n  // checking value 2\n  if (typeof value2 === 'string' && value2.length > 1) {\n    if (hasAnnotation(value2)) {\n      const fieldValue2 = value2.trim().split(' ')[0] ?? '';\n      if (currencyRegExp.test(fieldValue2)) {\n        value2 = fieldValue2.slice(1);\n      }\n      if (areaRegExp.test(fieldValue2)) {\n        value2 = fieldValue2.replace(/[^\\d.-]/g, '');\n      }\n    }\n  }\n\n  const comparisonValueForNonNumeric = isLow ? Infinity : -Infinity;\n  const isValue1Blank: boolean = value1 === '' || value1 === '-';\n  const isValue2Blank: boolean = value2 === '' || value2 === '-';\n  value1 = isValue1Blank ? '0' : value1;\n  value2 = isValue2Blank ? '0' : value2;\n  let _obj1 = userEntryToNumber(value1 ? value1.toString() : value1, comparisonValueForNonNumeric);\n  let _obj2 = userEntryToNumber(value2 ? value2.toString() : value2, comparisonValueForNonNumeric);\n  if (isNaN(_obj1)) {\n    _obj1 = comparisonValueForNonNumeric;\n  }\n  if (isNaN(_obj2)) {\n    _obj2 = comparisonValueForNonNumeric;\n  }\n  return _obj1 < _obj2\n    ? -1\n    : _obj1 > _obj2\n      ? 1\n      : isValue1Blank && !isValue2Blank\n        ? -1\n        : !isValue1Blank && isValue2Blank\n          ? 1\n          : 0;\n};\n\nexport default {\n  partComparator: function (value1: string, value2: string): 1 | 0 | -1 {\n    const _obj1 = /([A-Za-z]+)([0-9]+)(.*)/.exec(value1);\n    const _obj2 = /([A-Za-z]+)([0-9]+)(.*)/.exec(value2);\n    let result: 1 | 0 | -1 = 0;\n    if (_obj1 != null && _obj2 != null && _obj1[1] != null && _obj2[1] != null) {\n      result = _obj1[1] < _obj2[1] ? -1 : _obj1[1] > _obj2[1] ? 1 : 0;\n      if (result === 0 && _obj1[2] != null && _obj2[2] != null) {\n        const _num1 = parseInt(_obj1[2]);\n        const _num2 = parseInt(_obj2[2]);\n        result = _num1 < _num2 ? -1 : _num1 > _num2 ? 1 : 0;\n      }\n      if (result === 0 && _obj1[3] != null && _obj2[3] != null) {\n        result = _obj1[3] < _obj2[3] ? -1 : _obj1[3] > _obj2[3] ? 1 : 0;\n      }\n    }\n    return result;\n  },\n\n  engineeringComparator: function (value1: string, value2: string): 1 | 0 | -1 {\n    return engineeringComparatorCore(value1, value2);\n  },\n\n  engineeringComparatorNonNumbersHigh: function (value1: string, value2: string): 1 | 0 | -1 {\n    return engineeringComparatorCore(value1, value2, false);\n  },\n\n  engineeringComparatorNonNumbersLow: function (value1: string, value2: string): 1 | 0 | -1 {\n    return engineeringComparatorCore(value1, value2, true);\n  },\n\n  priceComparator: function (value1: string, value2: string): 1 | 0 | -1 {\n    const isValue1Blank: boolean = value1 === '' || value1 === '-';\n    const isValue2Blank: boolean = value2 === '' || value2 === '-';\n    let _obj1 = isValue1Blank ? 0 : -Infinity;\n    let _obj2 = isValue2Blank ? 0 : -Infinity;\n    if (typeof value1 === 'string' && value1.length > 1) {\n      _obj1 = parseFloat(value1.slice(1));\n    }\n    if (typeof value2 === 'string' && value2.length > 1) {\n      _obj2 = parseFloat(value2.slice(1));\n    }\n    if (isNaN(_obj1)) {\n      _obj1 = -Infinity;\n    }\n    if (isNaN(_obj2)) {\n      _obj2 = -Infinity;\n    }\n    return _obj1 < _obj2\n      ? -1\n      : _obj1 > _obj2\n        ? 1\n        : isValue1Blank && !isValue2Blank\n          ? -1\n          : !isValue1Blank && isValue2Blank\n            ? 1\n            : 0;\n  },\n\n  rangeComparator: function (value1: string, value2: string): 1 | 0 | -1 {\n    let _obj1 = -Infinity;\n    let _obj2 = -Infinity;\n    if (typeof value1 === 'string' && value1.length > 3 && /.+ ~ /.test(value1)) {\n      _obj1 = userEntryToNumber(value1.split(' ~ ')[0] ?? ''); //We know the ?? clause won't happen due to the guard RE test\n    }\n    if (typeof value2 === 'string' && value2.length > 3 && /.+ ~ /.test(value2)) {\n      _obj2 = userEntryToNumber(value2.split(' ~ ')[0] ?? ''); //We know the ?? clause won't happen due to the guard RE test\n    }\n    if (isNaN(_obj1)) {\n      _obj1 = -Infinity;\n    }\n    if (isNaN(_obj2)) {\n      _obj2 = -Infinity;\n    }\n    return _obj1 < _obj2 ? -1 : _obj1 > _obj2 ? 1 : 0;\n  },\n\n  integerComparator: function (value1: string, value2: string): 1 | 0 | -1 {\n    const isValue1Blank: boolean = value1 === '' || value1 === '-';\n    const isValue2Blank: boolean = value2 === '' || value2 === '-';\n    let _obj1 = isValue1Blank ? 0 : parseInt(value1);\n    let _obj2 = isValue2Blank ? 0 : parseInt(value2);\n    if (isNaN(_obj1)) {\n      _obj1 = -Infinity;\n    }\n    if (isNaN(_obj2)) {\n      _obj2 = -Infinity;\n    }\n    return _obj1 < _obj2\n      ? -1\n      : _obj1 > _obj2\n        ? 1\n        : isValue1Blank && !isValue2Blank\n          ? -1\n          : !isValue1Blank && isValue2Blank\n            ? 1\n            : 0;\n  },\n\n  textComparator: function (value1: string, value2: string): 1 | 0 | -1 {\n    return value1 < value2 ? -1 : value1 > value2 ? 1 : 0;\n  },\n\n  booleanComparator: function (value1: boolean, value2: boolean): 1 | 0 | -1 {\n    return value1 === value2 ? 0 : value1 ? -1 : 1;\n  },\n};\n","import { userEntryToNumber } from '@ebiz/pretty-num';\nimport { assert } from '@ember/debug';\nimport type { Column } from 'slickgrid';\nimport Validation from './validation.ts';\nimport type { ColumnFilter, DeviceData } from '../components/aditools-device-table.ts';\n\nconst _stripTrailingDecimal = function (item: string) {\n  const dotted = item.split('.');\n  return dotted.length === 2 && dotted[1] && dotted[1].length === 0 ? item.slice(0, -1) : item;\n};\n\nexport default class EngineeringRangeValueFilter implements ColumnFilter<DeviceData> {\n  defaultMinimum: string;\n  defaultMaximum: string;\n  minimumValue: string;\n  maximumValue: string;\n  qaName?: string;\n  constructor(defaultMinimum?: string, defaultMaximum?: string, qaName?: string) {\n    this.defaultMinimum = defaultMinimum ?? '';\n    this.defaultMaximum = defaultMaximum ?? '';\n    this.minimumValue = this.defaultMinimum;\n    this.maximumValue = this.defaultMaximum;\n    this.qaName = qaName;\n  }\n\n  populate(column: Column<DeviceData>): HTMLElement {\n    if (!column) {\n      throw 'column passed to populate is invalid';\n    }\n    const selection = $(this.generateDOMElement(column));\n    selection.find('input:first-child').val(this.minimumValue);\n    selection.find('input:nth-child(3)').val(this.maximumValue);\n    assert('At least one element is always generated', selection[0]);\n    return selection[0];\n  }\n\n  generateDOMElement(column: Column<DeviceData>): string {\n    const inputQaElement = this.qaName ? `data-qa-element=\"device_table_${this.qaName}_input\"` : '';\n    return `<div class=\"slickgrid-filter-engineering\">\n      <input id=\"filter-${column.id}-val-min\" class=\"slickgrid-filter-range-value\" type=\"text\" autocomplete=\"off\" aria-label=\"${column.name} minimum value\" ${inputQaElement} data-column-id=\"${column.id}\" />\n      <span class='slickgrid-filter-range-hyphen'>&#x2012;</span>\n      <input id=\"filter-${column.id}-val-max\" class=\"slickgrid-filter-range-value\" type=\"text\" autocomplete=\"off\" aria-label=\"${column.name} maximium value\" ${inputQaElement} data-column-id=\"${column.id}\" />\n    </div>`;\n  }\n\n  update(element: HTMLInputElement): void {\n    const children = element.parentElement?.children;\n    if (children) {\n      this.minimumValue = (<HTMLInputElement>children[0]).value;\n      this.maximumValue = (<HTMLInputElement>children[2]).value;\n    }\n  }\n\n  unpack(packedValues: string): void {\n    if (packedValues) {\n      const initialValues = JSON.parse(packedValues);\n      if (\n        Object.prototype.hasOwnProperty.call(initialValues, 'minimumValue') &&\n        Object.prototype.hasOwnProperty.call(initialValues, 'maximumValue')\n      ) {\n        this.minimumValue = initialValues.minimumValue;\n        this.maximumValue = initialValues.maximumValue;\n      }\n    }\n  }\n\n  reset(): void {\n    this.minimumValue = this.defaultMinimum;\n    this.maximumValue = this.defaultMaximum;\n  }\n\n  hasValue(): boolean {\n    return this.minimumValue !== '' || this.maximumValue !== '';\n  }\n\n  pack(): string {\n    return JSON.stringify({ minimumValue: this.minimumValue, maximumValue: this.maximumValue });\n  }\n\n  filter(field: string): boolean {\n    // Temporary workaround for Package Area\n    const cleanedField = field ? (field.includes('mm') ? (field.split('mm')[0] ?? field) : field) : field;\n    let fieldValue = cleanedField === '' || cleanedField === '-' ? 0 : userEntryToNumber(cleanedField, Infinity);\n    fieldValue = isNaN(fieldValue) ? Infinity : fieldValue;\n    const filterMinimumString = _stripTrailingDecimal(this.minimumValue);\n    const filterMaximumString = _stripTrailingDecimal(this.maximumValue);\n    if (\n      Validation.validateFieldInput(filterMinimumString, 'ENGINEERING') ||\n      Validation.validateFieldInput(filterMaximumString, 'ENGINEERING')\n    ) {\n      let filterMinValue = userEntryToNumber(filterMinimumString, Infinity);\n      filterMinValue = isNaN(filterMinValue) ? Infinity : filterMinValue;\n      let filterMaxValue = userEntryToNumber(filterMaximumString, Infinity);\n      filterMaxValue = isNaN(filterMaxValue) ? Infinity : filterMaxValue;\n      if (fieldValue || fieldValue === 0) {\n        if (filterMinValue !== Infinity && filterMaxValue !== Infinity) {\n          return fieldValue >= filterMinValue && fieldValue <= filterMaxValue;\n        } else if (filterMinValue === Infinity && filterMaxValue !== Infinity) {\n          return fieldValue <= filterMaxValue;\n        } else if (filterMinValue !== Infinity && filterMaxValue === Infinity) {\n          return fieldValue >= filterMinValue;\n        }\n      }\n    }\n    return true;\n  }\n}\n","import { assert } from '@ember/debug';\nimport type { Column } from 'slickgrid';\nimport type { ColumnFilter, DeviceData } from '../components/aditools-device-table.ts';\n\nexport default class PartialTextFilter implements ColumnFilter<DeviceData> {\n  value: string;\n  qaName?: string;\n\n  constructor(initialValue?: string, qaName?: string) {\n    this.value = initialValue ? initialValue : '';\n    this.qaName = qaName;\n  }\n\n  populate(column: Column<DeviceData>): HTMLElement {\n    if (!column) {\n      throw 'column passed to populate is invalid';\n    }\n    const selection = $(this.generateDOMElement(column));\n    selection.val(this.value);\n    assert('At least one element is always generated', selection[0]);\n    return selection[0];\n  }\n\n  generateDOMElement(column: Column<DeviceData>): string {\n    const inputQaElement = this.qaName ? `data-qa-element=\"device_table_${this.qaName}_input\"` : '';\n    return `<input id=\"filter-${column.id}\" type=\"text\" autocomplete=\"off\" class=\"slickgrid-filter-text\" aria-label=\"${column.name} partial text\" ${inputQaElement} data-column-id=\"${column.id}\" />`;\n  }\n\n  update(element: HTMLInputElement): void {\n    this.value = element.value;\n  }\n\n  unpack(packedValues: string): void {\n    if (packedValues) {\n      const initialValues = JSON.parse(packedValues);\n      if (Object.prototype.hasOwnProperty.call(initialValues, 'value')) {\n        this.value = initialValues.value;\n      }\n    }\n  }\n\n  reset(): void {\n    this.value = '';\n  }\n\n  pack(): string {\n    return JSON.stringify({ value: this.value });\n  }\n\n  hasValue(): boolean {\n    return this.value !== '';\n  }\n\n  filter(field: string): boolean {\n    const effectiveField = field ?? '';\n    return effectiveField.toUpperCase().indexOf(this.value.toUpperCase()) > -1;\n  }\n}\n","import { isUserEntryNumeric } from '@ebiz/pretty-num/';\n\n////////////////////////////////////////////////////////////////////////////////////\n// validation - Class containing function for character and field validation      //\n////////////////////////////////////////////////////////////////////////////////////\n\nexport default {\n  ////////////////////////////////////////////////////////////////////////////////\n  // Functions                                                                  //\n  ////////////////////////////////////////////////////////////////////////////////\n\n  // Function for Character Validation\n  // Inputs: value - value to be validated\n  //         type - value field type\n  //         scope - used for custom validation, usually contains a Regular Expression, otherwise null\n  // Returns: result - true when valid\n  validateCharacterInput: function (value: string, type: string, scope?: RegExp): boolean {\n    return this.validateFieldInput(value, type, scope);\n  },\n\n  // Function for Field Validation\n  // Inputs: value - value to be validated\n  //         type - value field type\n  //         scope - used for custom validation, usually contains a Regular Expression, otherwise null\n  // Returns: result - true when valid\n  validateFieldInput: function (value: string, type: string, scope?: RegExp): boolean {\n    let result = true;\n    let pattern = /^/;\n    switch (type) {\n      case 'ALPHANUMERIC':\n        pattern = /^[0-9a-zA-Z]+$/;\n        result = pattern.test(value.toString());\n        break;\n      case 'ALPHABET':\n        pattern = /^[a-zA-Z]+$/;\n        result = pattern.test(value.toString());\n        break;\n      case 'NUMERIC':\n      case 'NUMERICDECIMAL':\n      case 'ENGINEERING': {\n        result = isUserEntryNumeric(value.toString());\n        break;\n      }\n      case 'CUSTOM':\n        if (scope) {\n          pattern = scope;\n          result = pattern.test(value.toString());\n        }\n        break;\n      case 'ALLCHARS':\n      default:\n        break;\n    }\n    return result;\n  },\n};\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{! Args \\n  @main if it\\'s a main section\\n  @title section title\\n  @icon icon for section header if applicable\\n  @clickAction action to take when icon clicked\\n  @bodyClass class to apply to the body\\n}}\\n<div class=\\\"aditools-card {{if @main \\\"card--main\\\"}}\\\" ...attributes>\\n  <div class=\\\"aditools-card_header\\\">\\n    <span class=\\\"aditools-card_header-title\\\">{{@title}}</span>\\n    {{#if (has-block \\\"header\\\")}}\\n      {{ yield to=\\\"header\\\" }}\\n    {{/if}}\\n    {{#if @icon}}\\n      {{#if (eq @icon \\\"checkbox\\\") }}\\n        <input type=\\\"checkbox\\\" class=\\\"aditools-card_header-action action--checkbox\\\" title={{this._tooltip}} aria-label={{this._tooltip}} data-qa-element=\\\"checkbox_{{this.qaName}}\\\" {{on \\'click\\' this.checkboxClicked}}>\\n      {{else}}\\n        <button type=\\\"button\\\" class=\\\"aditools-card_header-action action--{{@icon}}\\\" title={{this._tooltip}} aria-label={{this._tooltip}} data-qa-element=\\\"tooltip_{{this.qaName}}\\\" {{on \\'click\\' this.tooltipClicked}}></button>\\n        {{#if (and this.tooltipEnabled (has-block \\\"tooltip\\\")) }}\\n          {{yield this.tooltipClosed to=\\'tooltip\\' }}\\n        {{/if}}\\n      {{/if}}\\n    {{/if}}\\n  </div>\\n  {{#if (has-block)}}\\n    <div class=\\\"aditools-card_body {{@bodyClass}}\\\">\\n      {{yield}}\\n    </div>\\n  {{/if}}\\n</div>\\n\")","import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\n\ninterface AditoolsCardArgs {\n  Element: HTMLDivElement;\n  Args: {\n    title: string;\n    icon?: string;\n    qaName?: string;\n    bodyClass?: string;\n    main?: boolean;\n    tooltip?: string;\n    clickAction?: (event: MouseEvent) => void;\n  };\n  Blocks: {\n    header: [];\n    tooltip: [() => void];\n    default: [];\n  };\n}\nexport default class AditoolsCard extends Component<AditoolsCardArgs> {\n  @tracked tooltipEnabled = false;\n\n  get qaName() {\n    return this.args.qaName ?? 'unnamed';\n  }\n\n  get _tooltip() {\n    return this.args.tooltip ?? '';\n  }\n\n  @action checkboxClicked(event: MouseEvent) {\n    if (this.args.clickAction) {\n      this.args.clickAction(event);\n    }\n  }\n  @action tooltipClicked(event: MouseEvent) {\n    this.tooltipEnabled = true;\n    if (this.args.clickAction) {\n      this.args.clickAction(event);\n    }\n  }\n  @action tooltipClosed() {\n    this.tooltipEnabled = false;\n  }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<div {{aditools-renderer this.inserted this.destroying}} >\\n  <dialog class=\\\"aditools-dialog_modal\\\" ...attributes {{on \\\"close\\\" this.dialogClosed}} {{on \\\"cancel\\\" this.guardCancel}}>\\n    <aside class=\\\"aditools-dialog {{@dialogClass}}\\\">\\n      {{#unless this._hideTitlebar}}\\n        <div class=\\\"aditools-dialog_header\\\">\\n          <span data-qa-element=\\\"dialog_title\\\" class=\\\"aditools-dialog_title\\\">{{@title}}</span>\\n          {{#unless this._hideCloseX}}\\n            <button  \\n              class=\\\"aditools-dialog_close dialog--closer\\\" \\n              type=\\\"button\\\" \\n              data-qa-element=\\\"dialog_top_close\\\"\\n              aria-label={{t \\\"ember-aditools-page.common.close\\\"}} \\n              {{on \\\"click\\\" this.closeDialog}}\\n            ></button>\\n          {{/unless}}\\n        </div>\\n      {{/unless}}\\n      <div class=\\\"aditools-dialog_body content\\\" data-qa-element=\\\"dialog_content\\\">\\n        {{yield this.closeDialog}}\\n      </div>\\n      {{#if (has-block \\\"footer\\\")}} \\n        <div class=\\\"aditools-dialog_footer\\\">\\n          {{yield this.closeDialog to=\\\"footer\\\" }}\\n        </div>\\n      {{/if}}\\n    </aside>      \\n  </dialog>\\n</div>\")","import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { assert } from '@ember/debug';\nimport { isNone } from '@ember/utils';\nimport type { htmlSafe } from '@ember/template';\nimport AditoolsRenderer from '../modifiers/aditools-renderer.ts';\ntype SafeString = ReturnType<typeof htmlSafe>;\n\nexport interface AditoolsDialogSignature {\n  Element: HTMLDialogElement;\n  Args: {\n    title: string | SafeString;\n    close: () => void;\n    dialogClass?: string;\n    suppressFocusTrap?: boolean;\n    hideCloseX?: boolean;\n    hideTitlebar?: boolean;\n  };\n  Blocks: {\n    default: [closeDialog: () => void];\n    footer: [closeDialog: () => void];\n  };\n}\ntype AditoolsDialogArgs = AditoolsDialogSignature['Args'];\nexport default class AditoolsDialog extends Component<AditoolsDialogSignature> {\n  renderer = AditoolsRenderer;\n  @tracked lastFocus?: HTMLElement | null;\n  dialogElement?: HTMLDialogElement;\n\n  constructor(owner: unknown, args: AditoolsDialogArgs) {\n    super(owner, args);\n    assert('`title` is required', !isNone(this.args.title));\n    assert('`close` is required', !isNone(this.args.close));\n  }\n\n  get _suppressFocusTrap() {\n    // Return suppressFocusTrap value if explicitly supplied.\n    // Otherwise, return true if hideCloseX explicitly supplied as true or false otherwise.\n    return this.args.suppressFocusTrap ?? this.args.hideCloseX ?? false;\n  }\n\n  get _enableFocusTrap() {\n    return !this._suppressFocusTrap;\n  }\n\n  get _hideCloseX() {\n    return this.args.hideCloseX ?? false;\n  }\n\n  get _hideTitlebar() {\n    return this.args.hideTitlebar ?? false;\n  }\n\n  @action closeDialog() {\n    if (this.dialogElement) {\n      this.dialogElement.close();\n    }\n  }\n\n  @action guardCancel(event: Event) {\n    if (this._hideCloseX) {\n      event.preventDefault();\n    }\n  }\n\n  @action dialogClosed() {\n    this.args.close();\n  }\n\n  @action inserted(element: HTMLElement) {\n    //N.B. document may be null or not have activeElement if we're in FastBoot\n    this.lastFocus = document.activeElement as HTMLElement;\n    this.dialogElement = element.querySelector('dialog') as HTMLDialogElement;\n    this.dialogElement.showModal();\n    (document.querySelector('body') as HTMLElement).style.overflow = 'hidden';\n  }\n\n  @action destroying() {\n    //N.B. document may be null or not have activeElement if we're in FastBoot\n    if (this.lastFocus && this.lastFocus.focus) {\n      //SVG focusable elements don't have a focus() method in IE & Edge\n      this.lastFocus.focus();\n    }\n    (document.querySelector('body') as HTMLElement).style.overflow = 'auto';\n    this.dialogElement = undefined;\n  }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<AditoolsDialog @title={{@title}} @dialogClass={{@dialogClass}} @close={{this.close}} @suppressFocusTrap={{this._suppressFocusTrap}} ...attributes>\\n  <:default>\\n    <div class=\\\"help-dialog\\\" tabindex=\\\"0\\\">\\n      {{this._message}}\\n      {{yield}}\\n    </div>\\n  </:default>\\n  <:footer as | closeDialog | >\\n    <button class=\\\"aditools-button button--primary dialog--closer\\\" type=\\\"button\\\" data-qa-element=\\\"dialog_close\\\" {{on \\\"click\\\" closeDialog}}>\\n      {{this._closeButtonText}}\\n    </button>\\n  </:footer>\\n</AditoolsDialog>\\n\")","import Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { assert } from '@ember/debug';\nimport { isNone } from '@ember/utils';\nimport type IntlService from 'ember-intl/services/intl';\nimport type { htmlSafe } from '@ember/template';\ntype SafeString = ReturnType<typeof htmlSafe>;\n\nexport interface AditoolsHelpDialogSignature {\n  Element: HTMLDialogElement;\n  Args: {\n    title: string | SafeString;\n    close?: () => void;\n    closeButtonText?: string;\n    dialogClass?: string;\n    message?: string | SafeString;\n    suppressFocusTrap?: boolean;\n  };\n  Blocks: {\n    default: [];\n  };\n}\ntype AditoolsHelpDialogArgs = AditoolsHelpDialogSignature['Args'];\n\nexport default class AditoolsHelpDialog extends Component<AditoolsHelpDialogSignature> {\n  @service declare intl: IntlService;\n\n  constructor(owner: unknown, args: AditoolsHelpDialogArgs) {\n    super(owner, args);\n    assert('`title` is required', !isNone(this.args.title));\n  }\n\n  // Optional parameters with defaults applied\n  get _message() {\n    return this.args.message ?? '';\n  }\n\n  get _closeButtonText() {\n    return this.args.closeButtonText ?? this.intl.t('ember-aditools-page.common.close');\n  }\n\n  get _suppressFocusTrap() {\n    return this.args.suppressFocusTrap ?? false;\n  }\n  @action close() {\n    if (this.args.close) {\n      this.args.close();\n    }\n  }\n}\n","const SHOEBOX_DATA_NAME = 'siteconfig';\r\nconst SITECONFIG_URL = undefined;\r\n\r\nexport interface Logger {\r\n  log(...args: unknown[]): void;\r\n  info(...args: unknown[]): void;\r\n  warn(...args: unknown[]): void;\r\n  error(...args: unknown[]): void;\r\n  time(label?: string): void;\r\n  timeEnd(label?: string): void;\r\n}\r\n\r\nexport interface FastbootRequest {\r\n  /** The cookies for the current request. */\r\n  cookies: Record<string, unknown>;\r\n\r\n  /** The headers for the current request. */\r\n  headers: Pick<Headers, 'has' | 'get'>;\r\n\r\n  /**\r\n   * The host of the request that the current FastBoot server is responding to\r\n   * (`example.com` or `localhost:3000`).\r\n   * Retrieving host will error on 2 conditions:\r\n   * 1. you do not have a hostWhitelist defined\r\n   * 2. the Host header does not match an entry in your hostWhitelist\r\n   */\r\n  host: string;\r\n\r\n  /** The query parameters for the current request, as a key-value pair. */\r\n  queryParams: Record<string, unknown>;\r\n\r\n  /**\r\n   * The path (`/` or `/some-path`) of the request that the current FastBoot\r\n   * server is responding to.\r\n   */\r\n  path: string;\r\n\r\n  /**\r\n   * The protocol (`http:` or `https:`) of the request that the current\r\n   * FastBoot server is responding to.\r\n   */\r\n  protocol: string;\r\n\r\n  /**\r\n   * The request type of the request that the current\r\n   * FastBoot server is responding to.\r\n   */\r\n  method: string;\r\n\r\n  /** Contains key-value pairs of data submitted in the request body. */\r\n  body: Record<string, unknown>;\r\n}\r\n\r\nexport interface Shoebox {\r\n  put(key: string, value: unknown): void;\r\n  retrieve(key: string): unknown;\r\n}\r\n\r\nexport interface FastBoot {\r\n  /** Allows you to check if you are running within FastBoot. */\r\n  isFastBoot: boolean;\r\n\r\n  /**\r\n   * A request object which exposes details about the current request being\r\n   * handled by FastBoot.\r\n   */\r\n  request: FastbootRequest;\r\n\r\n  /**\r\n   * You can pass application state from the FastBoot rendered application to\r\n   * the browser rendered application using a feature called the \"Shoebox\".\r\n   * This allows you to leverage server API calls made by the FastBoot rendered\r\n   * application on the browser rendered application. Thus preventing you from\r\n   * duplicating work that the FastBoot application is performing. This should\r\n   * result in a performance benefit for your browser application, as it does\r\n   * not need to issue server API calls whose results are available from the\r\n   * Shoebox.\r\n   */\r\n  shoebox: Shoebox;\r\n\r\n  /**\r\n   * By default, FastBoot waits for the `beforeModel`, `model`, and\r\n   * `afterModel` hooks to resolve before sending the response back to the\r\n   * client. If you have asynchrony that runs outside of those contexts, your\r\n   * response may not reflect the state that you want.\r\n   * To solve this, the `fastboot` service has `deferRendering` method that\r\n   * accepts a promise. It will chain all promises passed to it, and the\r\n   * FastBoot server will wait until all of these promises resolve before\r\n   * sending the response to the client. These promises must be chained before\r\n   * the rendering is complete after the model hooks. For example, if a\r\n   * component that is rendered into the page makes an async call for data,\r\n   * registering a promise to be resolved in its `init` hook would allow the\r\n   * component to defer the rendering of the page.\r\n   */\r\n  deferRendering(promise: Promise<unknown>): void;\r\n}\r\n\r\nconst _getURLLocale = function (defaultLocale: string, fastboot?: FastBoot): string {\r\n  let path;\r\n  if (fastboot && fastboot.isFastBoot) {\r\n    // You're on the server - no default host\r\n    path = fastboot.request.path;\r\n  } else {\r\n    path = window.location.pathname;\r\n  }\r\n\r\n  const pos = path.indexOf('/designtools/');\r\n  if (pos !== -1) {\r\n    const start = pos + '/designtools/'.length;\r\n    return path.substring(start, start + 2);\r\n  } else {\r\n    return defaultLocale;\r\n  }\r\n};\r\n\r\ninterface LocaleSet {\r\n  full: string;\r\n  adi: string;\r\n  iso: string;\r\n  cdp: string;\r\n}\r\n\r\ninterface SiteLocales {\r\n  AdiLocale: string;\r\n  IsoLocale: string;\r\n  CdpLocale: string;\r\n  FullLocale: string;\r\n}\r\n\r\nconst locales: Record<string, LocaleSet> = {\r\n  en: { full: 'en-us', adi: 'en', iso: 'en', cdp: 'en' },\r\n  zh: { full: 'zh-cn', adi: 'cn', iso: 'zh', cdp: 'zh' },\r\n  cn: { full: 'zh-cn', adi: 'cn', iso: 'zh', cdp: 'zh' },\r\n  ja: { full: 'ja-jp', adi: 'jp', iso: 'ja', cdp: 'jp' },\r\n  jp: { full: 'ja-jp', adi: 'jp', iso: 'ja', cdp: 'jp' },\r\n  ru: { full: 'ru-ru', adi: 'ru', iso: 'ru', cdp: 'ru' },\r\n};\r\n\r\nconst _getLocales = function (defaultLocale: string, supportedLocales: string[], fastboot?: FastBoot): SiteLocales {\r\n  const urlLocale = _getURLLocale(defaultLocale, fastboot);\r\n  const localeSet: LocaleSet | undefined = locales[urlLocale];\r\n  const useDefault =\r\n    !localeSet || (!supportedLocales.includes(localeSet.full) && !supportedLocales.includes(localeSet.iso));\r\n  const foundLocale = locales[useDefault ? 'en' : urlLocale] as LocaleSet; // cannot be undefined\r\n  return {\r\n    AdiLocale: foundLocale.adi,\r\n    IsoLocale: foundLocale.iso,\r\n    CdpLocale: foundLocale.cdp,\r\n    FullLocale: foundLocale.full,\r\n  };\r\n};\r\n\r\nconst _getURL = function (url: string, fastboot: FastBoot | undefined, logger: Logger) {\r\n  if (fastboot && fastboot.isFastBoot) {\r\n    // You're on the server - no default host\r\n    if (url[0] === '/') {\r\n      let protocol = fastboot.request.protocol;\r\n      if (!protocol) {\r\n        protocol = 'http:';\r\n      }\r\n      let host = '---';\r\n      try {\r\n        host = fastboot.request.host;\r\n      } catch (e) {\r\n        logger.error(`Error getting FastBoot host: ${e}`);\r\n        throw e;\r\n      }\r\n      return `${protocol}//${host}${url}`;\r\n    } else {\r\n      return url;\r\n    }\r\n  } else {\r\n    // in browser\r\n    return url;\r\n  }\r\n};\r\n\r\nconst _fixLocalUrl = function (url: string, rootUrl: string) {\r\n  const idx = url.indexOf('{root}');\r\n  if (idx >= 0) {\r\n    const prefix = url.substring(0, idx);\r\n    const suffix = url.substring(idx + '{root}'.length);\r\n    if (rootUrl.endsWith('/')) {\r\n      return prefix + rootUrl + (suffix.startsWith('/') ? suffix.slice(1) : suffix);\r\n    } else {\r\n      return prefix + rootUrl + (suffix.startsWith('/') ? suffix : '/' + suffix);\r\n    }\r\n  }\r\n  return url;\r\n};\r\n\r\nconst _replaceLocale = function (text: string, locales: SiteLocales) {\r\n  if (locales.AdiLocale) {\r\n    return text\r\n      .replace('{0}', locales.AdiLocale)\r\n      .replace('{adi}', locales.AdiLocale)\r\n      .replace('{iso}', locales.IsoLocale)\r\n      .replace('{cdp}', locales.CdpLocale)\r\n      .replace('{full}', locales.FullLocale);\r\n  } else {\r\n    return text;\r\n  }\r\n};\r\n\r\nconst _loadConfigFromJson = function (\r\n  url: string,\r\n  locales: SiteLocales,\r\n  rootUrl: string,\r\n  logger: Logger,\r\n  fastboot?: FastBoot,\r\n) {\r\n  let request;\r\n\r\n  const _logger = logger\r\n    ? logger\r\n    : {\r\n        info(...args: unknown[]) {\r\n          console.info(...args);\r\n        }, // eslint-disable-line no-console\r\n        error(...args: unknown[]) {\r\n          console.error(...args);\r\n        }, // eslint-disable-line no-console\r\n      };\r\n\r\n  const _url =\r\n    typeof SITECONFIG_URL !== 'undefined' && SITECONFIG_URL ? SITECONFIG_URL : _getURL(url, fastboot, logger); //eslint-disable-line no-undef\r\n  const shoebox = fastboot ? fastboot.shoebox : null;\r\n\r\n  if (fastboot && fastboot.isFastBoot) {\r\n    _logger.info(`Loading site configuration from ${_url} in fastboot`);\r\n    request = fetch(_url)\r\n      .then((response) => {\r\n        return response.json();\r\n      })\r\n      .then((config) => {\r\n        Object.keys(config).forEach((item) => {\r\n          config[item] = _fixLocalUrl(_replaceLocale(config[item], locales), rootUrl);\r\n        });\r\n        shoebox && shoebox.put(SHOEBOX_DATA_NAME, config);\r\n        return config;\r\n      })\r\n      .catch((error) => {\r\n        _logger.error(`Load of site configuration at ${_url} failed: ${error}`);\r\n        throw error;\r\n      });\r\n  } else {\r\n    const cache = shoebox && shoebox.retrieve(SHOEBOX_DATA_NAME);\r\n    if (cache) {\r\n      _logger.info(`Loading site configuration from shoebox in browser`);\r\n      request = Promise.resolve(cache);\r\n    } else {\r\n      _logger.info(`Loading site configuration from ${_url} in browser`);\r\n      request = fetch(_url)\r\n        .then((response) => {\r\n          return response.json();\r\n        })\r\n        .then((config) => {\r\n          Object.keys(config).forEach((item) => {\r\n            config[item] = _fixLocalUrl(_replaceLocale(config[item], locales), rootUrl);\r\n          });\r\n          return config;\r\n        })\r\n        .catch((error) => {\r\n          _logger.error(`Load of site configuration at ${_url} failed: ${error}`);\r\n          throw error;\r\n        });\r\n    }\r\n  }\r\n\r\n  return request;\r\n};\r\n\r\nexport function start(\r\n  target: unknown,\r\n  url: string,\r\n  rootUrl: string,\r\n  defaultLocale: string,\r\n  supportedlocales: string[],\r\n  logger: Logger,\r\n  fastboot?: FastBoot,\r\n): Promise<Record<string, string> & SiteLocales> {\r\n  const locales = _getLocales(defaultLocale, supportedlocales, fastboot);\r\n  return _loadConfigFromJson(url, locales, rootUrl, logger, fastboot).then((data) => {\r\n    data.AdiLocale = locales.AdiLocale;\r\n    data.FullLocale = locales.FullLocale;\r\n    data.IsoLocale = locales.IsoLocale;\r\n    data.CdpLocale = locales.CdpLocale;\r\n    Object.keys(data).forEach((item) => {\r\n      Object.defineProperty(target, item, {\r\n        get: function () {\r\n          return data[item];\r\n        },\r\n      });\r\n    });\r\n    return data;\r\n  });\r\n}\r\n","import Service from '@ember/service';\r\nimport { start as utils_start } from '../utils/aditools-site.ts';\r\nimport type { Logger, FastBoot } from '../utils/aditools-site';\r\nexport type { Logger };\r\n\r\n// Site Configuration Service - Delivers server-side site-based configuration data to the client\r\nexport default class AditoolsSite extends Service {\r\n  start(\r\n    url: string,\r\n    rootUrl: string,\r\n    defaultLocale: string,\r\n    supportedlocales: string[],\r\n    logger: Logger,\r\n    fastboot?: FastBoot,\r\n  ): Promise<Record<string, string>> {\r\n    return utils_start(this, url, rootUrl, defaultLocale, supportedlocales, logger, fastboot);\r\n  }\r\n  declare AdiLocale: string;\r\n  declare CdpLocale: string;\r\n  declare FullLocale: string;\r\n  declare IsoLocale: string;\r\n  [name: string]: unknown;\r\n}\r\n","'use strict';\n// UMD Module boilerplate\n(function (root, factory) {\n  /*global define */\n\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define([], factory);\n  } else if (typeof module === 'object' && module.exports) {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory();\n  } else {\n    // Browser globals (root is window)\n    root.PrettyNum = factory();\n  }\n  /* eslint-disable-next-line no-restricted-globals, no-undef*/\n})(typeof self !== 'undefined' ? self : this, function () {\n  // Welcome to the factory function for PrettyNum\n\n  var INPUT_EXCEPTION_TEXT = 'User Entry failed to parse as number';\n  var micro = { 'u': 'u', 'micro': '\\u{00B5}', 'mu': '\\u{03BC}' };\n\n  /**\n    Raises a number to a power of 10 without needing to use the decimal value of the number if possible.\n    Example where this function helps; previously the following could happen:  1.1*Math.pow(10,2) = 110.00000000000001\n    This function turns the above into 11*Math.pow(10,1)\n    */\n\n  var processEngTextNoDecimal = function (value, powToRaiseTo) {\n    if (isNaN(value)) {\n      return ' ';\n    }\n    var decrementer = 0;\n    var powValue = powToRaiseTo;\n    var modifiedValue = value;\n    var valuePieces = value.split('.');\n    if (valuePieces.length > 1) {\n      decrementer = valuePieces[1].length;\n      modifiedValue = value.replace('.', '');\n    }\n    powValue = powToRaiseTo - decrementer;\n    if (powValue < 0) {\n      modifiedValue = value;\n      powValue = powToRaiseTo;\n    }\n    return modifiedValue * Math.pow(10, powValue);\n  };\n\n  //Checks if the number is in a range that matches an engineering metricPrefix\n  //For example if metricPrefix is 'k', this function checks if the number is between 1000 and 1e6\n  //Returns null if number not in range, otherwise returns formatted number\n  //\n  //metricPrefix: engineering metricPrefix of the band we want to check\n  //bigMetricPrefix:  next biggest metricPrefix, in case of numbers like 999.9999 which get rounded up\n  //smallestNumber: lowest number in the range.  For example if small metricPrefix is k, then this is 1000\n  //numberToCheck: the number we actually want to check\n  //significantDigits:  how many significant digits the returned number should have\n  var numberInMetricPrefixRange = function (data) {\n    var engineeringText;\n    var metricPrefixToUse;\n    //We need to use the precision-adjusted number, in case rounding brings it across a 1000x tier, like 999999 to 1000000.\n    var numberToUse = data.isFixedDigits\n      ? data.numberToCheck\n      : Number.parseFloat(data.numberToCheck.toPrecision(data.significantDigits));\n    // Clean up rounding on multipliers\n    var sNum = data.smallestNumber * 1000;\n    sNum =\n      sNum >= 1\n        ? sNum.toFixed(0)\n        : sNum * 1000 >= 1\n        ? (sNum * 1000).toFixed(0) / 1000\n        : sNum * 1000000 >= 1\n        ? (sNum * 1000000).toFixed(0) / 1000000\n        : sNum;\n    // Now we have numbers we can safely use\n    if (numberToUse < sNum) {\n      var engineeringValue;\n      if (data.isFixedDigits) engineeringValue = (numberToUse / data.smallestNumber).toFixed(data.significantDigits);\n      else {\n        engineeringValue = (numberToUse / data.smallestNumber).toPrecision(data.significantDigits);\n        // toPrecision will render (0.001599999).toPrecision(2) as 0.0016 rather than 0.0\n        if (engineeringValue.includes('.') && engineeringValue.length > data.significantDigits + 1) {\n          engineeringValue = Number.parseFloat(engineeringValue).toFixed(\n            data.significantDigits - engineeringValue.split('.')[0].length\n          );\n        }\n      }\n\n      if (Number.parseFloat(engineeringValue) === 0) engineeringText = '0';\n      else engineeringText = engineeringValue + data.metricPrefix;\n\n      //if the orginal number was 100,000, after the multiplication it will be 100 which the toPrecision will convert to something like 1.02e+2\n      //To avoid showing the customer something like 1.0e+2k, we have the code below\n      var eMatch = engineeringText.match(/e/i);\n      if (eMatch) {\n        var significand = engineeringText.slice(0, eMatch.index);\n        var exponent = engineeringText.slice(eMatch.index + 2, eMatch.index + 3);\n\n        if (exponent === '3') {\n          metricPrefixToUse = data.bigMetricPrefix;\n          exponent = '0';\n        } else {\n          metricPrefixToUse = data.metricPrefix;\n        }\n        engineeringText = processEngTextNoDecimal(significand, exponent) + metricPrefixToUse;\n      }\n      if (data.isSpice) {\n        if (engineeringText.match(/.*M$/g)) {\n          engineeringText = engineeringText.slice(0, -1) + 'Meg';\n        }\n        else if (engineeringText.match(/.*[\\xB5\\u03BC]$/g)) {\n          engineeringText = engineeringText.slice(0, -1) + 'u';\n        }\n      }\n      return engineeringText;\n    } else {\n      return null;\n    }\n  };\n\n  //Remove extra zeroes.  Assumes numberString starts with number\n  var removeZeroes = function (numberString) {\n    //Must have numbers followed by a period followed by more numbers for this function to do anything\n    var matchReturn = numberString.match(/^[+-]?[0-9]+\\.[0-9]+/);\n    if (matchReturn) {\n      var numberWithZeroes = numberString.slice(0, matchReturn[0].length);\n      var restOfString = numberString.slice(matchReturn[0].length);\n      var numberWithoutZeroes = numberWithZeroes.replace(/0*$/, '');\n      var remDot = numberWithoutZeroes.replace(/\\.$/, ''); // removing the trailing dot\n      return remDot + restOfString;\n    } else {\n      return numberString;\n    }\n  };\n\n  var isValidNumericMetricString = function (textFromUser, regEx) {\n    if (!textFromUser.match(regEx)) {\n      return false;\n    }\n    var text = textFromUser.replace(regEx, '').toString();\n    return text.match(/[0-9]$/g) || text.match(/\\W+/g);\n  };\n\n  // The following delivers numbers without exponential notation.\n  // It was taken from stackoverflow response by Jenny O'Reilly (based on solution by outis) to following post:\n  //  https://stackoverflow.com/questions/1685680/how-to-avoid-scientific-notation-for-large-numbers-in-javascript\n  var stringAtPrecision = function (num, digits) {\n    var numStr = num.toPrecision(digits);\n    if (numStr.indexOf('e') === -1) {\n      return numStr;\n    }\n\n    var e;\n    var negative;\n    if (Math.abs(num) < 1.0) {\n      e = parseInt(numStr.split('e-')[1]);\n      if (e) {\n        negative = num < 0;\n        if (negative) num *= -1;\n        num *= Math.pow(10, e - 1);\n        numStr = '0.' + new Array(e).join('0') + num.toPrecision(digits).substring(2);\n        if (negative) numStr = '-' + numStr;\n      }\n    } else {\n      e = parseInt(numStr.split('e+')[1]);\n      if (e > 20) {\n        e -= 20;\n        num /= Math.pow(10, e);\n        numStr = num.toString() + new Array(e + 1).join('0');\n      } else {\n        negative = num < 0;\n        if (negative) num *= -1;\n        num /= Math.pow(10, e + 1);\n        numStr = num.toPrecision(digits).slice(2);\n        numStr = numStr + new Array(e - numStr.length + 2).join('0');\n        if (negative) numStr = '-' + numStr;\n      }\n    }\n\n    return numStr;\n  };\n\n  //This function takes a string with a metric metricPrefix and returns a number\n  var metricStringToNumber = function (textFromUser, regEx, exponent, errorValue) {\n    var number, pattern;\n    //remove the metricPrefix\n    var text = textFromUser.replace(regEx, '').toString();\n    //check if rest of the part has digits and decimal\n    if (text.match(/[0-9]$/g) || text.match(/\\W+/g)) {\n      //turn the number into numeric format\n      pattern = parseFloat(text);\n      //multiply by exponent\n      var expo = Math.pow(10, exponent);\n      number = expo * pattern;\n      //Limit to 12 significant digits to avoid floating point errors\n      //Otherwise you can get stuff like 30 * 1e-9 = 3.0000000000000004e-8\n      var chopSomeDigitsOff = number.toPrecision(12);\n      number = parseFloat(chopSomeDigitsOff);\n    } else if (typeof errorValue === 'number') {\n      return errorValue;\n    } else {\n      throw INPUT_EXCEPTION_TEXT;\n    }\n    return number;\n  };\n\n  // The following builds and returns the PrettyNum implementation\n  return (function () {\n    var PrettyNum = {}; // PrettyNum is an object, not a class. It doesn't need to be instantiated. Its members are functions\n\n    PrettyNum.INFINITY = 1 * Math.pow(10, 60); //1e60\n    PrettyNum.NEGINFINITY = -1 * Math.pow(10, 60); //-1e60\n\n    /**\n     * Converts user entry into a javascript number. All of the following convert into the JavaScript Number 3.4e7:\n     *   '34000000', '3.4e7', '3.4E7', '34e6', '34E6','34M','0.034G','.034G','34Meg','34MEG'\n     * @param text - string - User-supplied text\n     * @param errorValue - number - Value to supply if the string cannot be interpreted as a number - Default: throw exception\n     * @return number - The numeric value of the text string supplied\n     */\n    PrettyNum.userEntryToNumber = function (text, errorValue) {\n      if (text !== null && text !== undefined && text !== '') {\n        //var invalidUserEntry;\n        //invalidUserEntry = false; // boolean value setting to false.\n        var number;\n        var patterninf = /^inf/i; // i is search with ignore case character and ^ is to search the start of a string, $ matches the end of the string\n        var patternNeginf = /^-inf/i; // pattern for negative infinity\n\n        var textToUse = text.replace(/\\s+/g, '').replace(/\\u2212/g,'-'); //clear whitespace, use hyphen-minus, not Unicode minus\n\n        if (textToUse.match(patterninf)) {\n          number = PrettyNum.INFINITY;\n        } else if (textToUse.match(patternNeginf)) {\n          number = PrettyNum.NEGINFINITY;\n        } else if (textToUse === 'NaN') {\n          number = Number.NaN;\n        } else if (textToUse.match(/Meg$/gi)) {\n          // checks if the last character is Meg\n          number = metricStringToNumber(textToUse, /Meg$/gi, 6, errorValue);\n        } else if (textToUse.match(/T$/g)) {\n          number = metricStringToNumber(textToUse, /T$/g, 12, errorValue);\n        } else if (textToUse.match(/G$/g)) {\n          // checks if the last character is G\n          number = metricStringToNumber(textToUse, /G$/g, 9, errorValue);\n        } else if (textToUse.match(/M$/g)) {\n          // checks if the last character is M\n          number = metricStringToNumber(textToUse, /M$/g, 6, errorValue);\n        } else if (textToUse.match(/k$/g)) {\n          // checks if the last character is k\n          number = metricStringToNumber(textToUse, /k$/g, 3, errorValue);\n        } else if (textToUse.match(/m$/g)) {\n          number = metricStringToNumber(textToUse, /m$/g, -3, errorValue);\n        } else if (textToUse.match(/u$/g)) {\n          number = metricStringToNumber(textToUse, /u$/g, -6, errorValue);\n        } else if (textToUse.match(/μ$/g)) {\n          number = metricStringToNumber(textToUse, /\\u03BC$/g, -6, errorValue); // 03BC is the Greek μ symbol\n        } else if (textToUse.match(/\\xB5$/g)) {\n          number = metricStringToNumber(textToUse, /\\xB5$/g, -6, errorValue); // B5 is the Micro Symbol\n        } else if (textToUse.match(/n$/g)) {\n          number = metricStringToNumber(textToUse, /n$/g, -9, errorValue);\n        } else if (textToUse.match(/p$/g)) {\n          number = metricStringToNumber(textToUse, /p$/g, -12, errorValue);\n        } else if (textToUse.match(/f$/g)) {\n          number = metricStringToNumber(textToUse, /f$/g, -15, errorValue);\n        } else if (textToUse.match(/a$/g)) {\n          number = metricStringToNumber(textToUse, /a$/g, -18, errorValue);\n        } else if (textToUse.match(/^[+-]?\\d+(?:\\.\\d*)?(?:[eE][+-]?\\d+)?$/g)) {\n          number = Number(parseFloat(textToUse));\n        } else if (textToUse.match(/^[-+]?(?:\\d*\\.\\d{0,20}|\\d+)$/) || textToUse.match(/^[-+]?[0-9]*$/g)) {\n          textToUse = parseFloat(textToUse);\n          number = Number(textToUse);\n        } else if (textToUse.match(/s$/g)) {\n          number = textToUse;\n        } else if (typeof errorValue === 'number') {\n          number = errorValue;\n        } else {\n          throw INPUT_EXCEPTION_TEXT;\n        } //end of else if chain\n      } else if (typeof errorValue === 'number') {\n        number = errorValue;\n      } else {\n        throw INPUT_EXCEPTION_TEXT;\n      } //end of first if.. input validation if\n      return number;\n    };\n\n    /**\n     * Verifies that the supplied string can be interpreted as a number, i.e. that userEntryToNumber will not throw an exception.\n     * @param text\n     * @return boolean - True if the supplied string is numeric and false if it is not.\n     */\n    PrettyNum.isUserEntryNumeric = function (text) {\n      if (typeof text === 'undefined' || text === null || text === '') return false;\n\n      var patterninf = /^inf/i; // i is search with ignore case character and ^ is to search the start of a string, $ matches the end of the string\n      var patternNeginf = /^-inf/i; // pattern for negative infinity\n      var textToUse = text.replace(/\\s+/g, '').replace(/\\u2212/g,'-'); //clear whitespace, use hyphen-minus, not Unicode minus\n      return !!(\n        textToUse.match(patterninf) ||\n        textToUse.match(patternNeginf) ||\n        textToUse === 'NaN' ||\n        isValidNumericMetricString(textToUse, /Meg$/gi) ||\n        isValidNumericMetricString(textToUse, /[TGMkmu\\u03BC\\xB5npfa]$/g) || // 03BC is Greek μ and B5 is the Micro Symbol\n        textToUse.match(/^[+-]?\\d+(?:\\.\\d*)?(?:[eE][+-]?\\d+)?$/g) ||\n        textToUse.match(/^[-+]?(?:\\d*\\.\\d{0,20}|\\d+)$/) ||\n        textToUse.match(/^[-+]?[0-9]*$/g)\n      );\n    };\n\n    /**\n     * Converts a numeric value into a display string.\n     * @param number - number - The number to display\n     * @param format - string - \"Standard\", \"Scientific\", \"Engineering\", \"Spice\", or \"Fractional\"\n     *   Standard - converts number into standard format: 34000000\n     *   Scientific - converts number into scientific format: 3.4e7\n     *   Engineering - converts number into engineering format: 34M\n     *   Spice - converts number into SPICE format, identical to engineering format except that a million is represented by Meg rather than M and micro is always 'u'\n     *   Fractional - converts number into percent, ppm, or ppb: 3.4%, 34ppm\n     * @param digits - number - The number of digits to display\n     * @param options - hash -\n     *   showZeroes - boolean - if true, show trailing zeroes to the requisite number of digits\n     *   supplySpace - boolean - if true, supply a space between number and multiplier for Engineering, suitable for appending units to resulting string\n     *   fixedDigits - (default: false) - If false, the digits parameter sets the significant digits to display.  If true, the digits parameter sets the number of digits after the decimal\n     *   minMetricPrefix - (default: \"\") - In some cases we will have a very small number that we would prefer to represent as zero, rather than as a small nonzero number.\n     *      Example 1: instead of converting a number to 314f, if we pass in a mix metric prefix of 'm', this would convert to 0.\n     *      Example 2: instead of converting a number to 314f, a min metric prefix of 'p' would convert this to 0.314p.\n     * @returns A display string for the supplied number.\n     */\n    PrettyNum.numberToUserDisplay = function (number, format, digits, options) {\n      var textToDisplay, absNumber, sign, engineeringText, scientificText, fractionalText, floatingText, smallestNumber, metricPrefix, unitText;\n      var metricPrefixList = ['a', 'f', 'p', 'n', micro['micro'], 'm', '', 'k', 'M', 'G', 'T', 'P'];\n      var minMetricPrefixIndex = 0;\n      var suppressZeroes = !options || !options.showZeroes || options.showZeroes === false;\n      var isFixedDigits = options && options.fixedDigits ? true : false;\n      var supplySpace = options && options.supplySpace ? true : false;\n      var zeroBoundary = options && options.zeroBoundary ? options.zeroBoundary : 0;\n      if (options && options.micro) {\n        metricPrefixList[4] = micro[options.micro] ? micro[options.micro] : micro['micro'];\n      }\n\n      if (\n        options &&\n        options.minMetricPrefix &&\n        (metricPrefixList.includes(options.minMetricPrefix) || options.minMetricPrefix === 'Meg')\n      ) {\n        minMetricPrefixIndex = metricPrefixList.indexOf(\n          options.minMetricPrefix === 'Meg' ? 'M' : options.minMetricPrefix\n        );\n      } else if (format === 'Spice') {\n        minMetricPrefixIndex = metricPrefixList.indexOf('f');\n      }\n\n      //check for special numeric values and our \"large number for infinity\" hack.\n      if (isNaN(number)) return 'NaN';\n      if (number === Infinity || number >= PrettyNum.INFINITY) return 'Inf';\n      else if (number === -Infinity || number <= PrettyNum.NEGINFINITY) return '-Inf';\n      else if (number === '-0') {\n        return '-0';\n      }\n\n      let numberToUse = ( zeroBoundary > 0 && Math.abs(number) < zeroBoundary) ? 0 : number;\n\n      //Engineering notation\n      if (format === 'Engineering' || format === 'Spice') {\n        absNumber = Math.abs(numberToUse);\n        sign = numberToUse / absNumber;\n        smallestNumber = 1e-18;\n\n        var loopFinished = true;\n        for (var i = 0; i < metricPrefixList.length - 1; i++) {\n          metricPrefix = metricPrefixList[i];\n\n          //Check if numberToUse is a number that would normally have metricPrefixList[i] after it.  If so, return formatted number.\n          if (i >= minMetricPrefixIndex) {\n            engineeringText = numberInMetricPrefixRange({\n              metricPrefix: metricPrefix,\n              bigMetricPrefix: metricPrefixList[i + 1],\n              smallestNumber: smallestNumber,\n              numberToCheck: absNumber,\n              significantDigits: digits,\n              isSpice: format === 'Spice',\n              isFixedDigits: isFixedDigits,\n            });\n          }\n\n          if (engineeringText) {\n            loopFinished = false;\n            break;\n          } else {\n            smallestNumber *= 1000;\n          }\n        }\n        if (loopFinished) {\n          // Too large for engineering notation\n          return PrettyNum.numberToUserDisplay(numberToUse, 'Scientific', digits, options);\n        }\n        if (suppressZeroes) {\n          engineeringText = removeZeroes(engineeringText);\n        }\n        if (sign < 0 && engineeringText !== '0') {\n          engineeringText = '-' + engineeringText;\n        }\n        textToDisplay = engineeringText;\n      }\n      //Scientific notation\n      else if (format === 'Scientific') {\n        scientificText = numberToUse\n          .toExponential(digits - 1)\n          .replace('e+', 'e')\n          .replace('e0', '');\n\n        if (suppressZeroes) {\n          scientificText = removeZeroes(scientificText);\n        } else if (isFixedDigits) {\n          var indexOfE = scientificText.indexOf('e');\n          if (indexOfE >= 0)\n            scientificText =\n              Number.parseFloat(scientificText.slice(0, indexOfE)).toFixed(digits) + scientificText.slice(indexOfE);\n          else scientificText = Number.parseFloat(scientificText).toFixed(digits);\n        }\n        textToDisplay = scientificText;\n      }\n      //Fractional notation\n      else if (format === 'Fractional') {\n        absNumber = Math.abs(numberToUse);\n\n        if (absNumber < 1e-6) {\n          // if it's < 1ppm, use parts per billion (ppb)\n          numberToUse *= 1e9;\n          unitText = 'ppb';\n          // guard against very small numbers\n          if (parseFloat((absNumber * 1e9).toFixed(digits)) === 0) numberToUse = 0;\n        } else if (absNumber < 1e-3) {\n          // if it's < 0.1%, use parts per million (ppm)\n          numberToUse *= 1e6;\n          unitText = 'ppm';\n        } else {\n          // otherwise, use percent\n          numberToUse *= 100;\n          unitText = '%';\n        }\n        if (isFixedDigits) fractionalText = numberToUse.toFixed(digits);\n        else fractionalText = stringAtPrecision(numberToUse, digits);\n\n        if (suppressZeroes) fractionalText = removeZeroes(fractionalText);\n        //add space and units if the display value is non-zero\n        textToDisplay = parseFloat(fractionalText) === 0 ? '0' : fractionalText + (supplySpace ? ' ' : '') + unitText;\n      }\n      //Floating point notation\n      else {\n        if (isFixedDigits) floatingText = numberToUse.toFixed(digits);\n        else floatingText = stringAtPrecision(numberToUse, digits);\n\n        if (suppressZeroes) floatingText = removeZeroes(floatingText);\n\n        textToDisplay = floatingText;\n      }\n\n      if (supplySpace && metricPrefix && textToDisplay.includes(metricPrefix))\n        textToDisplay =\n          textToDisplay.slice(0, textToDisplay.indexOf(metricPrefix)) +\n          ' ' +\n          textToDisplay.slice(textToDisplay.indexOf(metricPrefix));\n      else if (supplySpace && !unitText) textToDisplay += ' ';\n\n      return textToDisplay;\n    };\n\n    /**\n     * Convert a numeric value into an engineering display string with 3 significant digits and without trailing zeroes\n     * @param number - number - The number to display\n     * @returns A display string for the supplied number.\n     */\n    PrettyNum.eng3 = function (number) {\n      return PrettyNum.numberToUserDisplay(number, 'Engineering', 3);\n    };\n    /**\n     * Convert a numeric value into an engineering display string with 3 significant digits and without trailing zeroes\n     * @param number - number - The number to display\n     * @returns A display string for the supplied number.\n     */\n    PrettyNum.eng4 = function (number) {\n      return PrettyNum.numberToUserDisplay(number, 'Engineering', 4);\n    };\n\n    return PrettyNum;\n  })();\n});\n","export default function esCompat(m) {\n  return m?.__esModule ? m : { default: m, ...m };\n}\n","(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.MessageFormat = factory());\n})(this, (function () { 'use strict';\n\n    /******************************************************************************\r\n    Copyright (c) Microsoft Corporation.\r\n\r\n    Permission to use, copy, modify, and/or distribute this software for any\r\n    purpose with or without fee is hereby granted.\r\n\r\n    THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\n    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\n    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\n    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\n    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\n    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\n    PERFORMANCE OF THIS SOFTWARE.\r\n    ***************************************************************************** */\n    /* global Reflect, Promise, SuppressedError, Symbol */\n\n    var __assign = function () {\n      __assign = Object.assign || function __assign(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n        }\n        return t;\n      };\n      return __assign.apply(this, arguments);\n    };\n    function __values(o) {\n      var s = typeof Symbol === \"function\" && Symbol.iterator,\n        m = s && o[s],\n        i = 0;\n      if (m) return m.call(o);\n      if (o && typeof o.length === \"number\") return {\n        next: function () {\n          if (o && i >= o.length) o = void 0;\n          return {\n            value: o && o[i++],\n            done: !o\n          };\n        }\n      };\n      throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n    }\n    function __read(o, n) {\n      var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n      if (!m) return o;\n      var i = m.call(o),\n        r,\n        ar = [],\n        e;\n      try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n      } catch (error) {\n        e = {\n          error: error\n        };\n      } finally {\n        try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        } finally {\n          if (e) throw e.error;\n        }\n      }\n      return ar;\n    }\n    function __spreadArray(to, from, pack) {\n      if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n        if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n        }\n      }\n      return to.concat(ar || Array.prototype.slice.call(from));\n    }\n    typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n      var e = new Error(message);\n      return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n    };\n\n    /**\n     * Parent class for errors.\n     *\n     * @remarks\n     * Errors with `type: \"warning\"` do not necessarily indicate that the parser\n     * encountered an error. In addition to a human-friendly `message`, may also\n     * includes the `token` at which the error was encountered.\n     *\n     * @public\n     */\n    class DateFormatError extends Error {\n      /** @internal */\n      constructor(msg, token, type) {\n        super(msg);\n        this.token = token;\n        this.type = type || 'error';\n      }\n    }\n    const alpha = width => width < 4 ? 'short' : width === 4 ? 'long' : 'narrow';\n    const numeric = width => width % 2 === 0 ? '2-digit' : 'numeric';\n    function yearOptions(token, onError) {\n      switch (token.char) {\n        case 'y':\n          return {\n            year: numeric(token.width)\n          };\n        case 'r':\n          return {\n            calendar: 'gregory',\n            year: 'numeric'\n          };\n        case 'u':\n        case 'U':\n        case 'Y':\n        default:\n          onError(`${token.desc} is not supported; falling back to year:numeric`, DateFormatError.WARNING);\n          return {\n            year: 'numeric'\n          };\n      }\n    }\n    function monthStyle(token, onError) {\n      switch (token.width) {\n        case 1:\n          return 'numeric';\n        case 2:\n          return '2-digit';\n        case 3:\n          return 'short';\n        case 4:\n          return 'long';\n        case 5:\n          return 'narrow';\n        default:\n          onError(`${token.desc} is not supported with width ${token.width}`);\n          return undefined;\n      }\n    }\n    function dayStyle(token, onError) {\n      const {\n        char,\n        desc,\n        width\n      } = token;\n      if (char === 'd') return numeric(width);else {\n        onError(`${desc} is not supported`);\n        return undefined;\n      }\n    }\n    function weekdayStyle(token, onError) {\n      const {\n        char,\n        desc,\n        width\n      } = token;\n      if ((char === 'c' || char === 'e') && width < 3) {\n        // ignoring stand-alone-ness\n        const msg = `Numeric value is not supported for ${desc}; falling back to weekday:short`;\n        onError(msg, DateFormatError.WARNING);\n      }\n      // merging narrow styles\n      return alpha(width);\n    }\n    function hourOptions(token) {\n      const hour = numeric(token.width);\n      let hourCycle;\n      switch (token.char) {\n        case 'h':\n          hourCycle = 'h12';\n          break;\n        case 'H':\n          hourCycle = 'h23';\n          break;\n        case 'k':\n          hourCycle = 'h24';\n          break;\n        case 'K':\n          hourCycle = 'h11';\n          break;\n      }\n      return hourCycle ? {\n        hour,\n        hourCycle\n      } : {\n        hour\n      };\n    }\n    function timeZoneNameStyle(token, onError) {\n      // so much fallback behaviour here\n      const {\n        char,\n        desc,\n        width\n      } = token;\n      switch (char) {\n        case 'v':\n        case 'z':\n          return width === 4 ? 'long' : 'short';\n        case 'V':\n          if (width === 4) return 'long';\n          onError(`${desc} is not supported with width ${width}`);\n          return undefined;\n        case 'X':\n          onError(`${desc} is not supported`);\n          return undefined;\n      }\n      return 'short';\n    }\n    function compileOptions(token, onError) {\n      switch (token.field) {\n        case 'era':\n          return {\n            era: alpha(token.width)\n          };\n        case 'year':\n          return yearOptions(token, onError);\n        case 'month':\n          return {\n            month: monthStyle(token, onError)\n          };\n        case 'day':\n          return {\n            day: dayStyle(token, onError)\n          };\n        case 'weekday':\n          return {\n            weekday: weekdayStyle(token, onError)\n          };\n        case 'period':\n          return undefined;\n        case 'hour':\n          return hourOptions(token);\n        case 'min':\n          return {\n            minute: numeric(token.width)\n          };\n        case 'sec':\n          return {\n            second: numeric(token.width)\n          };\n        case 'tz':\n          return {\n            timeZoneName: timeZoneNameStyle(token, onError)\n          };\n        case 'quarter':\n        case 'week':\n        case 'sec-frac':\n        case 'ms':\n          onError(`${token.desc} is not supported`);\n      }\n      return undefined;\n    }\n    function getDateFormatOptions(tokens) {\n      let onError = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : error => {\n        throw error;\n      };\n      const options = {};\n      const fields = [];\n      for (const token of tokens) {\n        const {\n          error,\n          field,\n          str\n        } = token;\n        if (error) {\n          const dte = new DateFormatError(error.message, token);\n          dte.stack = error.stack;\n          onError(dte);\n        }\n        if (str) {\n          const msg = `Ignoring string part: ${str}`;\n          onError(new DateFormatError(msg, token, DateFormatError.WARNING));\n        }\n        if (field) {\n          if (fields.indexOf(field) === -1) fields.push(field);else onError(new DateFormatError(`Duplicate ${field} token`, token));\n        }\n        const opt = compileOptions(token, (msg, isWarning) => onError(new DateFormatError(msg, token, isWarning)));\n        if (opt) Object.assign(options, opt);\n      }\n      return options;\n    }\n\n    const fields = {\n      G: {\n        field: 'era',\n        desc: 'Era'\n      },\n      y: {\n        field: 'year',\n        desc: 'Year'\n      },\n      Y: {\n        field: 'year',\n        desc: 'Year of \"Week of Year\"'\n      },\n      u: {\n        field: 'year',\n        desc: 'Extended year'\n      },\n      U: {\n        field: 'year',\n        desc: 'Cyclic year name'\n      },\n      r: {\n        field: 'year',\n        desc: 'Related Gregorian year'\n      },\n      Q: {\n        field: 'quarter',\n        desc: 'Quarter'\n      },\n      q: {\n        field: 'quarter',\n        desc: 'Stand-alone quarter'\n      },\n      M: {\n        field: 'month',\n        desc: 'Month in year'\n      },\n      L: {\n        field: 'month',\n        desc: 'Stand-alone month in year'\n      },\n      w: {\n        field: 'week',\n        desc: 'Week of year'\n      },\n      W: {\n        field: 'week',\n        desc: 'Week of month'\n      },\n      d: {\n        field: 'day',\n        desc: 'Day in month'\n      },\n      D: {\n        field: 'day',\n        desc: 'Day of year'\n      },\n      F: {\n        field: 'day',\n        desc: 'Day of week in month'\n      },\n      g: {\n        field: 'day',\n        desc: 'Modified julian day'\n      },\n      E: {\n        field: 'weekday',\n        desc: 'Day of week'\n      },\n      e: {\n        field: 'weekday',\n        desc: 'Local day of week'\n      },\n      c: {\n        field: 'weekday',\n        desc: 'Stand-alone local day of week'\n      },\n      a: {\n        field: 'period',\n        desc: 'AM/PM marker'\n      },\n      b: {\n        field: 'period',\n        desc: 'AM/PM/noon/midnight marker'\n      },\n      B: {\n        field: 'period',\n        desc: 'Flexible day period'\n      },\n      h: {\n        field: 'hour',\n        desc: 'Hour in AM/PM (1~12)'\n      },\n      H: {\n        field: 'hour',\n        desc: 'Hour in day (0~23)'\n      },\n      k: {\n        field: 'hour',\n        desc: 'Hour in day (1~24)'\n      },\n      K: {\n        field: 'hour',\n        desc: 'Hour in AM/PM (0~11)'\n      },\n      j: {\n        field: 'hour',\n        desc: 'Hour in preferred cycle'\n      },\n      J: {\n        field: 'hour',\n        desc: 'Hour in preferred cycle without marker'\n      },\n      C: {\n        field: 'hour',\n        desc: 'Hour in preferred cycle with flexible marker'\n      },\n      m: {\n        field: 'min',\n        desc: 'Minute in hour'\n      },\n      s: {\n        field: 'sec',\n        desc: 'Second in minute'\n      },\n      S: {\n        field: 'sec-frac',\n        desc: 'Fractional second'\n      },\n      A: {\n        field: 'ms',\n        desc: 'Milliseconds in day'\n      },\n      z: {\n        field: 'tz',\n        desc: 'Time Zone: specific non-location'\n      },\n      Z: {\n        field: 'tz',\n        desc: 'Time Zone'\n      },\n      O: {\n        field: 'tz',\n        desc: 'Time Zone: localized'\n      },\n      v: {\n        field: 'tz',\n        desc: 'Time Zone: generic non-location'\n      },\n      V: {\n        field: 'tz',\n        desc: 'Time Zone: ID'\n      },\n      X: {\n        field: 'tz',\n        desc: 'Time Zone: ISO8601 with Z'\n      },\n      x: {\n        field: 'tz',\n        desc: 'Time Zone: ISO8601'\n      }\n    };\n    const isLetter = char => char >= 'A' && char <= 'Z' || char >= 'a' && char <= 'z';\n    function readFieldToken(src, pos) {\n      const char = src[pos];\n      let width = 1;\n      while (src[++pos] === char) ++width;\n      const field = fields[char];\n      if (!field) {\n        const msg = `The letter ${char} is not a valid field identifier`;\n        return {\n          char,\n          error: new Error(msg),\n          width\n        };\n      }\n      return {\n        char,\n        field: field.field,\n        desc: field.desc,\n        width\n      };\n    }\n    function readQuotedToken(src, pos) {\n      let str = src[++pos];\n      let width = 2;\n      if (str === \"'\") return {\n        char: \"'\",\n        str,\n        width\n      };\n      while (true) {\n        const next = src[++pos];\n        ++width;\n        if (next === undefined) {\n          const msg = `Unterminated quoted literal in pattern: ${str || src}`;\n          return {\n            char: \"'\",\n            error: new Error(msg),\n            str,\n            width\n          };\n        } else if (next === \"'\") {\n          if (src[++pos] !== \"'\") return {\n            char: \"'\",\n            str,\n            width\n          };else ++width;\n        }\n        str += next;\n      }\n    }\n    function readToken(src, pos) {\n      const char = src[pos];\n      if (!char) return null;\n      if (isLetter(char)) return readFieldToken(src, pos);\n      if (char === \"'\") return readQuotedToken(src, pos);\n      let str = char;\n      let width = 1;\n      while (true) {\n        const next = src[++pos];\n        if (!next || isLetter(next) || next === \"'\") return {\n          char,\n          str,\n          width\n        };\n        str += next;\n        width += 1;\n      }\n    }\n    /**\n     * Parse an {@link http://userguide.icu-project.org/formatparse/datetime | ICU\n     * DateFormat skeleton} string into a {@link DateToken} array.\n     *\n     * @remarks\n     * Errors will not be thrown, but if encountered are included as the relevant\n     * token's `error` value.\n     *\n     * @public\n     * @param src - The skeleton string\n     *\n     * @example\n     * ```js\n     * import { parseDateTokens } from '@messageformat/date-skeleton'\n     *\n     * parseDateTokens('GrMMMdd', console.error)\n     * // [\n     * //   { char: 'G', field: 'era', desc: 'Era', width: 1 },\n     * //   { char: 'r', field: 'year', desc: 'Related Gregorian year', width: 1 },\n     * //   { char: 'M', field: 'month', desc: 'Month in year', width: 3 },\n     * //   { char: 'd', field: 'day', desc: 'Day in month', width: 2 }\n     * // ]\n     * ```\n     */\n    function parseDateTokens(src) {\n      const tokens = [];\n      let pos = 0;\n      while (true) {\n        const token = readToken(src, pos);\n        if (!token) return tokens;\n        tokens.push(token);\n        pos += token.width;\n      }\n    }\n\n    /**\n     * Returns a date formatter function for the given locales and date skeleton\n     *\n     * @remarks\n     * Uses `Intl.DateTimeFormat` internally.\n     *\n     * @public\n     * @param locales - One or more valid BCP 47 language tags, e.g. `fr` or `en-CA`\n     * @param tokens - An ICU DateFormat skeleton string, or an array or parsed\n     *   `DateToken` tokens\n     * @param onError - If defined, will be called separately for each encountered\n     *   parsing error and unsupported feature.\n     * @example\n     * ```js\n     * import { getDateFormatter } from '@messageformat/date-skeleton'\n     *\n     * // 2006 Jan 2, 15:04:05.789 in local time\n     * const date = new Date(2006, 0, 2, 15, 4, 5, 789)\n     *\n     * let fmt = getDateFormatter('en-CA', 'GrMMMdd', console.error)\n     * fmt(date) // 'Jan. 02, 2006 AD'\n     *\n     * fmt = getDateFormatter('en-CA', 'hamszzzz', console.error)\n     * fmt(date) // '3:04:05 p.m. Newfoundland Daylight Time'\n     * ```\n     */\n    function getDateFormatter(locales, tokens, onError) {\n      if (typeof tokens === 'string') tokens = parseDateTokens(tokens);\n      const opt = getDateFormatOptions(tokens, onError);\n      const dtf = new Intl.DateTimeFormat(locales, opt);\n      return date => dtf.format(date);\n    }\n    /**\n     * Returns a string of JavaScript source that evaluates to a date formatter\n     * function with the same `(date: Date | number) => string` signature as the\n     * function returned by {@link getDateFormatter}.\n     *\n     * @remarks\n     * The returned function will memoize an `Intl.DateTimeFormat` instance.\n     *\n     * @public\n     * @param locales - One or more valid BCP 47 language tags, e.g. `fr` or `en-CA`\n     * @param tokens - An ICU DateFormat skeleton string, or an array or parsed\n     *   `DateToken` tokens\n     * @param onError - If defined, will be called separately for each encountered\n     *   parsing error and unsupported feature.\n     * @example\n     * ```js\n     * import { getDateFormatterSource } from '@messageformat/date-skeleton'\n     *\n     * getDateFormatterSource('en-CA', 'GrMMMdd', console.error)\n     * // '(function() {\\n' +\n     * // '  var opt = {\"era\":\"short\",\"calendar\":\"gregory\",\"year\":\"numeric\",' +\n     * //      '\"month\":\"short\",\"day\":\"2-digit\"};\\n' +\n     * // '  var dtf = new Intl.DateTimeFormat(\"en-CA\", opt);\\n' +\n     * // '  return function(value) { return dtf.format(value); }\\n' +\n     * // '})()'\n     *\n     * const src = getDateFormatterSource('en-CA', 'hamszzzz', console.error)\n     * // '(function() {\\n' +\n     * // '  var opt = {\"hour\":\"numeric\",\"hourCycle\":\"h12\",\"minute\":\"numeric\",' +\n     * //      '\"second\":\"numeric\",\"timeZoneName\":\"long\"};\\n' +\n     * // '  var dtf = new Intl.DateTimeFormat(\"en-CA\", opt);\\n' +\n     * // '  return function(value) { return dtf.format(value); }\\n' +\n     * // '})()'\n     *\n     * const fmt = new Function(`return ${src}`)()\n     * const date = new Date(2006, 0, 2, 15, 4, 5, 789)\n     * fmt(date) // '3:04:05 p.m. Newfoundland Daylight Time'\n     * ```\n     */\n    function getDateFormatterSource(locales, tokens, onError) {\n      if (typeof tokens === 'string') tokens = parseDateTokens(tokens);\n      const opt = getDateFormatOptions(tokens, onError);\n      const lines = [`(function() {`, `var opt = ${JSON.stringify(opt)};`, `var dtf = new Intl.DateTimeFormat(${JSON.stringify(locales)}, opt);`, `return function(value) { return dtf.format(value); }`];\n      return lines.join('\\n  ') + '\\n})()';\n    }\n\n    /**\n     * Base class for errors. In addition to a `code` and a human-friendly\n     * `message`, may also includes the token `stem` as well as other fields.\n     *\n     * @public\n     */\n    class NumberFormatError extends Error {\n      /** @internal */\n      constructor(code, msg) {\n        super(msg);\n        this.code = code;\n      }\n    }\n    /** @internal */\n    class BadOptionError extends NumberFormatError {\n      constructor(stem, opt) {\n        super('BAD_OPTION', `Unknown ${stem} option: ${opt}`);\n        this.stem = stem;\n        this.option = opt;\n      }\n    }\n    /** @internal */\n    class BadStemError extends NumberFormatError {\n      constructor(stem) {\n        super('BAD_STEM', `Unknown stem: ${stem}`);\n        this.stem = stem;\n      }\n    }\n    /** @internal */\n    class MaskedValueError extends NumberFormatError {\n      constructor(type, prev) {\n        super('MASKED_VALUE', `Value for ${type} is set multiple times`);\n        this.type = type;\n        this.prev = prev;\n      }\n    }\n    /** @internal */\n    class MissingOptionError extends NumberFormatError {\n      constructor(stem) {\n        super('MISSING_OPTION', `Required option missing for ${stem}`);\n        this.stem = stem;\n      }\n    }\n    /** @internal */\n    class PatternError extends NumberFormatError {\n      constructor(char, msg) {\n        super('BAD_PATTERN', msg);\n        this.char = char;\n      }\n    }\n    /** @internal */\n    class TooManyOptionsError extends NumberFormatError {\n      constructor(stem, options, maxOpt) {\n        const maxOptStr = maxOpt > 1 ? `${maxOpt} options` : 'one option';\n        super('TOO_MANY_OPTIONS', `Token ${stem} only supports ${maxOptStr} (got ${options.length})`);\n        this.stem = stem;\n        this.options = options;\n      }\n    }\n    /** @internal */\n    class UnsupportedError extends NumberFormatError {\n      constructor(stem, source) {\n        super('UNSUPPORTED', `The stem ${stem} is not supported`);\n        this.stem = stem;\n        if (source) {\n          this.message += ` with value ${source}`;\n          this.source = source;\n        }\n      }\n    }\n\n    /**\n     * Add\n     * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_identification_and_negotiation | numbering-system tags}\n     * to locale identifiers\n     *\n     * @internal\n     */\n    function getNumberFormatLocales(locales, _ref) {\n      let {\n        numberingSystem\n      } = _ref;\n      if (!Array.isArray(locales)) locales = [locales];\n      return numberingSystem ? locales.map(lc => {\n        const ext = lc.indexOf('-u-') === -1 ? 'u-nu' : 'nu';\n        return `${lc}-${ext}-${numberingSystem}`;\n      }).concat(locales) : locales;\n    }\n\n    // from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round\n    function round(x, precision) {\n      const y = +x + precision / 2;\n      return y - y % +precision;\n    }\n    function getNumberFormatMultiplier(_ref) {\n      let {\n        scale,\n        unit\n      } = _ref;\n      let mult = typeof scale === 'number' && scale >= 0 ? scale : 1;\n      if (unit && unit.style === 'percent') mult *= 0.01;\n      return mult;\n    }\n    /**\n     * Determine a modifier for the input value to account for any `scale`,\n     * `percent`, and `precision-increment` tokens in the skeleton.\n     *\n     * @internal\n     * @remarks\n     * With ICU NumberFormatter, the `percent` skeleton would style `25` as \"25%\".\n     * To achieve the same with `Intl.NumberFormat`, the input value must be `0.25`.\n     */\n    function getNumberFormatModifier(skeleton) {\n      const mult = getNumberFormatMultiplier(skeleton);\n      const {\n        precision\n      } = skeleton;\n      if (precision && precision.style === 'precision-increment') {\n        return n => round(n, precision.increment) * mult;\n      } else {\n        return n => n * mult;\n      }\n    }\n    /**\n     * Returns a string of JavaScript source that evaluates to a modifier for the\n     * input value to account for any `scale`, `percent`, and `precision-increment`\n     * tokens in the skeleton.\n     *\n     * @internal\n     * @remarks\n     * With ICU NumberFormatter, the `percent` skeleton would style `25` as \"25%\".\n     * To achieve the same with `Intl.NumberFormat`, the input value must be `0.25`.\n     */\n    function getNumberFormatModifierSource(skeleton) {\n      const mult = getNumberFormatMultiplier(skeleton);\n      const {\n        precision\n      } = skeleton;\n      if (precision && precision.style === 'precision-increment') {\n        // see round() above for source\n        const setX = `+n + ${precision.increment / 2}`;\n        let res = `x - (x % +${precision.increment})`;\n        if (mult !== 1) res = `(${res}) * ${mult}`;\n        return `function(n) { var x = ${setX}; return ${res}; }`;\n      }\n      return mult !== 1 ? `function(n) { return n * ${mult}; }` : null;\n    }\n\n    /**\n     * Given an input ICU NumberFormatter skeleton, does its best to construct a\n     * corresponding `Intl.NumberFormat` options structure.\n     *\n     * @remarks\n     * Some features depend on `Intl.NumberFormat` features defined in ES2020.\n     *\n     * @internal\n     * @param onUnsupported - If defined, called when encountering unsupported (but\n     *   valid) tokens, such as `decimal-always` or `permille`. The error `source`\n     *   may specify the source of an unsupported option.\n     *\n     * @example\n     * ```js\n     * import {\n     *   getNumberFormatOptions,\n     *   parseNumberSkeleton\n     * } from '@messageformat/number-skeleton'\n     *\n     * const src = 'currency/CAD unit-width-narrow'\n     * const skeleton = parseNumberSkeleton(src, console.error)\n     * // {\n     * //   unit: { style: 'currency', currency: 'CAD' },\n     * //   unitWidth: 'unit-width-narrow'\n     * // }\n     *\n     * getNumberFormatOptions(skeleton, console.error)\n     * // {\n     * //   style: 'currency',\n     * //   currency: 'CAD',\n     * //   currencyDisplay: 'narrowSymbol',\n     * //   unitDisplay: 'narrow'\n     * // }\n     *\n     * const sk2 = parseNumberSkeleton('group-min2')\n     * // { group: 'group-min2' }\n     *\n     * getNumberFormatOptions(sk2, console.error)\n     * // Error: The stem group-min2 is not supported\n     * //   at UnsupportedError.NumberFormatError ... {\n     * //     code: 'UNSUPPORTED',\n     * //     stem: 'group-min2'\n     * //   }\n     * // {}\n     * ```\n     */\n    function getNumberFormatOptions(skeleton, onUnsupported) {\n      const {\n        decimal,\n        group,\n        integerWidth,\n        notation,\n        precision,\n        roundingMode,\n        sign,\n        unit,\n        unitPer,\n        unitWidth\n      } = skeleton;\n      const fail = (stem, source) => {\n        if (onUnsupported) onUnsupported(new UnsupportedError(stem, source));\n      };\n      const opt = {};\n      if (unit) {\n        switch (unit.style) {\n          case 'base-unit':\n            opt.style = 'decimal';\n            break;\n          case 'currency':\n            opt.style = 'currency';\n            opt.currency = unit.currency;\n            break;\n          case 'measure-unit':\n            opt.style = 'unit';\n            opt.unit = unit.unit.replace(/.*-/, '');\n            if (unitPer) opt.unit += '-per-' + unitPer.replace(/.*-/, '');\n            break;\n          case 'percent':\n            opt.style = 'percent';\n            break;\n          case 'permille':\n            fail('permille');\n            break;\n        }\n      }\n      switch (unitWidth) {\n        case 'unit-width-full-name':\n          opt.currencyDisplay = 'name';\n          opt.unitDisplay = 'long';\n          break;\n        case 'unit-width-hidden':\n          fail(unitWidth);\n          break;\n        case 'unit-width-iso-code':\n          opt.currencyDisplay = 'code';\n          break;\n        case 'unit-width-narrow':\n          opt.currencyDisplay = 'narrowSymbol';\n          opt.unitDisplay = 'narrow';\n          break;\n        case 'unit-width-short':\n          opt.currencyDisplay = 'symbol';\n          opt.unitDisplay = 'short';\n          break;\n      }\n      switch (group) {\n        case 'group-off':\n          opt.useGrouping = false;\n          break;\n        case 'group-auto':\n          opt.useGrouping = true;\n          break;\n        case 'group-min2':\n        case 'group-on-aligned':\n        case 'group-thousands':\n          fail(group);\n          opt.useGrouping = true;\n          break;\n      }\n      if (precision) {\n        switch (precision.style) {\n          case 'precision-fraction':\n            {\n              const {\n                minFraction: minF,\n                maxFraction: maxF,\n                minSignificant: minS,\n                maxSignificant: maxS,\n                source\n              } = precision;\n              if (typeof minF === 'number') {\n                opt.minimumFractionDigits = minF;\n                if (typeof minS === 'number') fail('precision-fraction', source);\n              }\n              if (typeof maxF === 'number') opt.maximumFractionDigits = maxF;\n              if (typeof minS === 'number') opt.minimumSignificantDigits = minS;\n              if (typeof maxS === 'number') opt.maximumSignificantDigits = maxS;\n              break;\n            }\n          case 'precision-integer':\n            opt.maximumFractionDigits = 0;\n            break;\n          case 'precision-unlimited':\n            opt.maximumFractionDigits = 20;\n            break;\n          case 'precision-increment':\n            break;\n          case 'precision-currency-standard':\n            opt.trailingZeroDisplay = precision.trailingZero;\n            break;\n          case 'precision-currency-cash':\n            fail(precision.style);\n            break;\n        }\n      }\n      if (notation) {\n        switch (notation.style) {\n          case 'compact-short':\n            opt.notation = 'compact';\n            opt.compactDisplay = 'short';\n            break;\n          case 'compact-long':\n            opt.notation = 'compact';\n            opt.compactDisplay = 'long';\n            break;\n          case 'notation-simple':\n            opt.notation = 'standard';\n            break;\n          case 'scientific':\n          case 'engineering':\n            {\n              const {\n                expDigits,\n                expSign,\n                source,\n                style\n              } = notation;\n              opt.notation = style;\n              if (expDigits && expDigits > 1 || expSign && expSign !== 'sign-auto') fail(style, source);\n              break;\n            }\n        }\n      }\n      if (integerWidth) {\n        const {\n          min,\n          max,\n          source\n        } = integerWidth;\n        if (min > 0) opt.minimumIntegerDigits = min;\n        if (Number(max) > 0) {\n          const hasExp = opt.notation === 'engineering' || opt.notation === 'scientific';\n          if (max === 3 && hasExp) opt.notation = 'engineering';else fail('integer-width', source);\n        }\n      }\n      switch (sign) {\n        case 'sign-auto':\n          opt.signDisplay = 'auto';\n          break;\n        case 'sign-always':\n          opt.signDisplay = 'always';\n          break;\n        case 'sign-except-zero':\n          // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n          // @ts-ignore https://github.com/microsoft/TypeScript/issues/46712\n          opt.signDisplay = 'exceptZero';\n          break;\n        case 'sign-never':\n          opt.signDisplay = 'never';\n          break;\n        case 'sign-accounting':\n          opt.currencySign = 'accounting';\n          break;\n        case 'sign-accounting-always':\n          opt.currencySign = 'accounting';\n          opt.signDisplay = 'always';\n          break;\n        case 'sign-accounting-except-zero':\n          opt.currencySign = 'accounting';\n          // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n          // @ts-ignore https://github.com/microsoft/TypeScript/issues/46712\n          opt.signDisplay = 'exceptZero';\n          break;\n      }\n      if (decimal === 'decimal-always') fail(decimal);\n      if (roundingMode) fail(roundingMode);\n      return opt;\n    }\n\n    function parseAffixToken(src, pos, onError) {\n      const char = src[pos];\n      switch (char) {\n        case '%':\n          return {\n            char: '%',\n            style: 'percent',\n            width: 1\n          };\n        case '‰':\n          return {\n            char: '%',\n            style: 'permille',\n            width: 1\n          };\n        case '¤':\n          {\n            let width = 1;\n            while (src[++pos] === '¤') ++width;\n            switch (width) {\n              case 1:\n                return {\n                  char,\n                  currency: 'default',\n                  width\n                };\n              case 2:\n                return {\n                  char,\n                  currency: 'iso-code',\n                  width\n                };\n              case 3:\n                return {\n                  char,\n                  currency: 'full-name',\n                  width\n                };\n              case 5:\n                return {\n                  char,\n                  currency: 'narrow',\n                  width\n                };\n              default:\n                {\n                  const msg = `Invalid number (${width}) of ¤ chars in pattern`;\n                  onError(new PatternError('¤', msg));\n                  return null;\n                }\n            }\n          }\n        case '*':\n          {\n            const pad = src[pos + 1];\n            if (pad) return {\n              char,\n              pad,\n              width: 2\n            };\n            break;\n          }\n        case '+':\n        case '-':\n          return {\n            char,\n            width: 1\n          };\n        case \"'\":\n          {\n            let str = src[++pos];\n            let width = 2;\n            if (str === \"'\") return {\n              char,\n              str,\n              width\n            };\n            while (true) {\n              const next = src[++pos];\n              ++width;\n              if (next === undefined) {\n                const msg = `Unterminated quoted literal in pattern: ${str}`;\n                onError(new PatternError(\"'\", msg));\n                return {\n                  char,\n                  str,\n                  width\n                };\n              } else if (next === \"'\") {\n                if (src[++pos] !== \"'\") return {\n                  char,\n                  str,\n                  width\n                };else ++width;\n              }\n              str += next;\n            }\n          }\n      }\n      return null;\n    }\n\n    const isDigit = char => char >= '0' && char <= '9';\n    function parseNumberToken(src, pos) {\n      const char = src[pos];\n      if (isDigit(char)) {\n        let digits = char;\n        while (true) {\n          const next = src[++pos];\n          if (isDigit(next)) digits += next;else return {\n            char: '0',\n            digits,\n            width: digits.length\n          };\n        }\n      }\n      switch (char) {\n        case '#':\n          {\n            let width = 1;\n            while (src[++pos] === '#') ++width;\n            return {\n              char,\n              width\n            };\n          }\n        case '@':\n          {\n            let min = 1;\n            while (src[++pos] === '@') ++min;\n            let width = min;\n            pos -= 1;\n            while (src[++pos] === '#') ++width;\n            return {\n              char,\n              min,\n              width\n            };\n          }\n        case 'E':\n          {\n            const plus = src[pos + 1] === '+';\n            if (plus) ++pos;\n            let expDigits = 0;\n            while (src[++pos] === '0') ++expDigits;\n            const width = (plus ? 2 : 1) + expDigits;\n            if (expDigits) return {\n              char,\n              expDigits,\n              plus,\n              width\n            };else break;\n          }\n        case '.':\n        case ',':\n          return {\n            char,\n            width: 1\n          };\n      }\n      return null;\n    }\n\n    function parseSubpattern(src, pos, onError) {\n      let State;\n      (function (State) {\n        State[State[\"Prefix\"] = 0] = \"Prefix\";\n        State[State[\"Number\"] = 1] = \"Number\";\n        State[State[\"Suffix\"] = 2] = \"Suffix\";\n      })(State || (State = {}));\n      const prefix = [];\n      const number = [];\n      const suffix = [];\n      let state = State.Prefix;\n      let str = '';\n      while (pos < src.length) {\n        const char = src[pos];\n        if (char === ';') {\n          pos += 1;\n          break;\n        }\n        switch (state) {\n          case State.Prefix:\n            {\n              const token = parseAffixToken(src, pos, onError);\n              if (token) {\n                if (str) {\n                  prefix.push({\n                    char: \"'\",\n                    str,\n                    width: str.length\n                  });\n                  str = '';\n                }\n                prefix.push(token);\n                pos += token.width;\n              } else {\n                const token = parseNumberToken(src, pos);\n                if (token) {\n                  if (str) {\n                    prefix.push({\n                      char: \"'\",\n                      str,\n                      width: str.length\n                    });\n                    str = '';\n                  }\n                  state = State.Number;\n                  number.push(token);\n                  pos += token.width;\n                } else {\n                  str += char;\n                  pos += 1;\n                }\n              }\n              break;\n            }\n          case State.Number:\n            {\n              const token = parseNumberToken(src, pos);\n              if (token) {\n                number.push(token);\n                pos += token.width;\n              } else {\n                state = State.Suffix;\n              }\n              break;\n            }\n          case State.Suffix:\n            {\n              const token = parseAffixToken(src, pos, onError);\n              if (token) {\n                if (str) {\n                  suffix.push({\n                    char: \"'\",\n                    str,\n                    width: str.length\n                  });\n                  str = '';\n                }\n                suffix.push(token);\n                pos += token.width;\n              } else {\n                str += char;\n                pos += 1;\n              }\n              break;\n            }\n        }\n      }\n      if (str) suffix.push({\n        char: \"'\",\n        str,\n        width: str.length\n      });\n      return {\n        pattern: {\n          prefix,\n          number,\n          suffix\n        },\n        pos\n      };\n    }\n    function parseTokens(src, onError) {\n      const {\n        pattern,\n        pos\n      } = parseSubpattern(src, 0, onError);\n      if (pos < src.length) {\n        const {\n          pattern: negative\n        } = parseSubpattern(src, pos, onError);\n        return {\n          tokens: pattern,\n          negative\n        };\n      }\n      return {\n        tokens: pattern\n      };\n    }\n\n    function parseNumberAsSkeleton(tokens, onError) {\n      const res = {};\n      let hasGroups = false;\n      let hasExponent = false;\n      let intOptional = 0;\n      let intDigits = '';\n      let decimalPos = -1;\n      let fracDigits = '';\n      let fracOptional = 0;\n      for (let pos = 0; pos < tokens.length; ++pos) {\n        const token = tokens[pos];\n        switch (token.char) {\n          case '#':\n            {\n              if (decimalPos === -1) {\n                if (intDigits) {\n                  const msg = 'Pattern has # after integer digits';\n                  onError(new PatternError('#', msg));\n                }\n                intOptional += token.width;\n              } else {\n                fracOptional += token.width;\n              }\n              break;\n            }\n          case '0':\n            {\n              if (decimalPos === -1) {\n                intDigits += token.digits;\n              } else {\n                if (fracOptional) {\n                  const msg = 'Pattern has digits after # in fraction';\n                  onError(new PatternError('0', msg));\n                }\n                fracDigits += token.digits;\n              }\n              break;\n            }\n          case '@':\n            {\n              if (res.precision) onError(new MaskedValueError('precision', res.precision));\n              res.precision = {\n                style: 'precision-fraction',\n                minSignificant: token.min,\n                maxSignificant: token.width\n              };\n              break;\n            }\n          case ',':\n            hasGroups = true;\n            break;\n          case '.':\n            if (decimalPos === 1) {\n              const msg = 'Pattern has more than one decimal separator';\n              onError(new PatternError('.', msg));\n            }\n            decimalPos = pos;\n            break;\n          case 'E':\n            {\n              if (hasExponent) onError(new MaskedValueError('exponent', res.notation));\n              if (hasGroups) {\n                const msg = 'Exponential patterns may not contain grouping separators';\n                onError(new PatternError('E', msg));\n              }\n              res.notation = {\n                style: 'scientific'\n              };\n              if (token.expDigits > 1) res.notation.expDigits = token.expDigits;\n              if (token.plus) res.notation.expSign = 'sign-always';\n              hasExponent = true;\n            }\n        }\n      }\n      // imprecise mapping due to paradigm differences\n      if (hasGroups) res.group = 'group-auto';else if (intOptional + intDigits.length > 3) res.group = 'group-off';\n      const increment = Number(`${intDigits || '0'}.${fracDigits}`);\n      if (increment) res.precision = {\n        style: 'precision-increment',\n        increment\n      };\n      if (!hasExponent) {\n        if (intDigits.length > 1) res.integerWidth = {\n          min: intDigits.length\n        };\n        if (!res.precision && (fracDigits.length || fracOptional)) {\n          res.precision = {\n            style: 'precision-fraction',\n            minFraction: fracDigits.length,\n            maxFraction: fracDigits.length + fracOptional\n          };\n        }\n      } else {\n        if (!res.precision || increment) {\n          res.integerWidth = intOptional ? {\n            min: 1,\n            max: intOptional + intDigits.length\n          } : {\n            min: Math.max(1, intDigits.length)\n          };\n        }\n        if (res.precision) {\n          if (!increment) res.integerWidth = {\n            min: 1,\n            max: 1\n          };\n        } else {\n          const dc = intDigits.length + fracDigits.length;\n          if (decimalPos === -1) {\n            if (dc > 0) res.precision = {\n              style: 'precision-fraction',\n              maxSignificant: dc\n            };\n          } else {\n            res.precision = {\n              style: 'precision-fraction',\n              maxSignificant: Math.max(1, dc) + fracOptional\n            };\n            if (dc > 1) res.precision.minSignificant = dc;\n          }\n        }\n      }\n      return res;\n    }\n\n    function handleAffix(affixTokens, res, currency, onError, isPrefix) {\n      let inFmt = false;\n      let str = '';\n      for (const token of affixTokens) {\n        switch (token.char) {\n          case '%':\n            res.unit = {\n              style: token.style\n            };\n            if (isPrefix) inFmt = true;else str = '';\n            break;\n          case '¤':\n            if (!currency) {\n              const msg = `The ¤ pattern requires a currency`;\n              onError(new PatternError('¤', msg));\n              break;\n            }\n            res.unit = {\n              style: 'currency',\n              currency\n            };\n            switch (token.currency) {\n              case 'iso-code':\n                res.unitWidth = 'unit-width-iso-code';\n                break;\n              case 'full-name':\n                res.unitWidth = 'unit-width-full-name';\n                break;\n              case 'narrow':\n                res.unitWidth = 'unit-width-narrow';\n                break;\n            }\n            if (isPrefix) inFmt = true;else str = '';\n            break;\n          case '*':\n            // TODO\n            break;\n          case '+':\n            if (!inFmt) str += '+';\n            break;\n          case \"'\":\n            if (!inFmt) str += token.str;\n            break;\n        }\n      }\n      return str;\n    }\n    function getNegativeAffix(affixTokens, isPrefix) {\n      let inFmt = false;\n      let str = '';\n      for (const token of affixTokens) {\n        switch (token.char) {\n          case '%':\n          case '¤':\n            if (isPrefix) inFmt = true;else str = '';\n            break;\n          case '-':\n            if (!inFmt) str += '-';\n            break;\n          case \"'\":\n            if (!inFmt) str += token.str;\n            break;\n        }\n      }\n      return str;\n    }\n    /**\n     * Parse an {@link\n     * http://unicode.org/reports/tr35/tr35-numbers.html#Number_Format_Patterns |\n     * ICU NumberFormatter pattern} string into a {@link Skeleton} structure.\n     *\n     * @public\n     * @param src - The pattern string\n     * @param currency - If the pattern includes ¤ tokens, their skeleton\n     *   representation requires a three-letter currency code.\n     * @param onError - Called when the parser encounters a syntax error. The\n     *   function will still return a {@link Skeleton}, but it will be incomplete\n     *   and/or inaccurate. If not defined, the error will be thrown instead.\n     *\n     * @remarks\n     * Unlike the skeleton parser, the pattern parser is not able to return partial\n     * results on error, and will instead throw. Output padding is not supported.\n     *\n     * @example\n     * ```js\n     * import { parseNumberPattern } from '@messageformat/number-skeleton'\n     *\n     * parseNumberPattern('#,##0.00 ¤', 'EUR', console.error)\n     * // {\n     * //   group: 'group-auto',\n     * //   precision: {\n     * //     style: 'precision-fraction',\n     * //     minFraction: 2,\n     * //     maxFraction: 2\n     * //   },\n     * //   unit: { style: 'currency', currency: 'EUR' }\n     * // }\n     * ```\n     */\n    function parseNumberPattern(src, currency) {\n      let onError = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : error => {\n        throw error;\n      };\n      const {\n        tokens,\n        negative\n      } = parseTokens(src, onError);\n      const res = parseNumberAsSkeleton(tokens.number, onError);\n      const prefix = handleAffix(tokens.prefix, res, currency, onError, true);\n      const suffix = handleAffix(tokens.suffix, res, currency, onError, false);\n      if (negative) {\n        const negPrefix = getNegativeAffix(negative.prefix, true);\n        const negSuffix = getNegativeAffix(negative.suffix, false);\n        res.affix = {\n          pos: [prefix, suffix],\n          neg: [negPrefix, negSuffix]\n        };\n        res.sign = 'sign-never';\n      } else if (prefix || suffix) {\n        res.affix = {\n          pos: [prefix, suffix]\n        };\n      }\n      return res;\n    }\n\n    /** @internal */\n    function isNumberingSystem(ns) {\n      const systems = ['arab', 'arabext', 'bali', 'beng', 'deva', 'fullwide', 'gujr', 'guru', 'hanidec', 'khmr', 'knda', 'laoo', 'latn', 'limb', 'mlym', 'mong', 'mymr', 'orya', 'tamldec', 'telu', 'thai', 'tibt'];\n      return systems.indexOf(ns) !== -1;\n    }\n\n    // FIXME: subtype is not checked\n    /** @internal */\n    function isUnit(unit) {\n      const types = ['acceleration', 'angle', 'area', 'concentr', 'consumption', 'digital', 'duration', 'electric', 'energy', 'force', 'frequency', 'graphics', 'length', 'light', 'mass', 'power', 'pressure', 'speed', 'temperature', 'torque', 'volume'];\n      const [type] = unit.split('-', 1);\n      return types.indexOf(type) !== -1;\n    }\n\n    const maxOptions = {\n      'compact-short': 0,\n      'compact-long': 0,\n      'notation-simple': 0,\n      scientific: 2,\n      engineering: 2,\n      percent: 0,\n      permille: 0,\n      'base-unit': 0,\n      currency: 1,\n      'measure-unit': 1,\n      'per-measure-unit': 1,\n      'unit-width-narrow': 0,\n      'unit-width-short': 0,\n      'unit-width-full-name': 0,\n      'unit-width-iso-code': 0,\n      'unit-width-hidden': 0,\n      'precision-integer': 0,\n      'precision-unlimited': 0,\n      'precision-currency-standard': 1,\n      'precision-currency-cash': 0,\n      'precision-increment': 1,\n      'rounding-mode-ceiling': 0,\n      'rounding-mode-floor': 0,\n      'rounding-mode-down': 0,\n      'rounding-mode-up': 0,\n      'rounding-mode-half-even': 0,\n      'rounding-mode-half-down': 0,\n      'rounding-mode-half-up': 0,\n      'rounding-mode-unnecessary': 0,\n      'integer-width': 1,\n      scale: 1,\n      'group-off': 0,\n      'group-min2': 0,\n      'group-auto': 0,\n      'group-on-aligned': 0,\n      'group-thousands': 0,\n      latin: 0,\n      'numbering-system': 1,\n      'sign-auto': 0,\n      'sign-always': 0,\n      'sign-never': 0,\n      'sign-accounting': 0,\n      'sign-accounting-always': 0,\n      'sign-except-zero': 0,\n      'sign-accounting-except-zero': 0,\n      'decimal-auto': 0,\n      'decimal-always': 0\n    };\n    const minOptions = {\n      currency: 1,\n      'integer-width': 1,\n      'measure-unit': 1,\n      'numbering-system': 1,\n      'per-measure-unit': 1,\n      'precision-increment': 1,\n      scale: 1\n    };\n    function hasMaxOption(stem) {\n      return stem in maxOptions;\n    }\n    function hasMinOption(stem) {\n      return stem in minOptions;\n    }\n    /** @internal */\n    function validOptions(stem, options, onError) {\n      if (hasMaxOption(stem)) {\n        const maxOpt = maxOptions[stem];\n        if (options.length > maxOpt) {\n          if (maxOpt === 0) {\n            for (const opt of options) onError(new BadOptionError(stem, opt));\n          } else {\n            onError(new TooManyOptionsError(stem, options, maxOpt));\n          }\n          return false;\n        } else if (hasMinOption(stem) && options.length < minOptions[stem]) {\n          onError(new MissingOptionError(stem));\n          return false;\n        }\n      }\n      return true;\n    }\n\n    function parseBlueprintDigits(src, style) {\n      const re = style === 'fraction' ? /^\\.(0*)(\\+|#*)$/ : /^(@+)(\\+|#*)$/;\n      const match = src && src.match(re);\n      if (match) {\n        const min = match[1].length;\n        switch (match[2].charAt(0)) {\n          case '':\n            return {\n              min,\n              max: min\n            };\n          case '+':\n            return {\n              min,\n              max: null\n            };\n          case '#':\n            {\n              return {\n                min,\n                max: min + match[2].length\n              };\n            }\n        }\n      }\n      return null;\n    }\n    function parsePrecisionBlueprint(stem, options, onError) {\n      const fd = parseBlueprintDigits(stem, 'fraction');\n      if (fd) {\n        if (options.length > 1) onError(new TooManyOptionsError(stem, options, 1));\n        const res = {\n          style: 'precision-fraction',\n          source: stem,\n          minFraction: fd.min\n        };\n        if (fd.max != null) res.maxFraction = fd.max;\n        const option = options[0];\n        const sd = parseBlueprintDigits(option, 'significant');\n        if (sd) {\n          res.source = `${stem}/${option}`;\n          res.minSignificant = sd.min;\n          if (sd.max != null) res.maxSignificant = sd.max;\n        } else if (option) onError(new BadOptionError(stem, option));\n        return res;\n      }\n      const sd = parseBlueprintDigits(stem, 'significant');\n      if (sd) {\n        for (const opt of options) onError(new BadOptionError(stem, opt));\n        const res = {\n          style: 'precision-fraction',\n          source: stem,\n          minSignificant: sd.min\n        };\n        if (sd.max != null) res.maxSignificant = sd.max;\n        return res;\n      }\n      return null;\n    }\n\n    /** @internal */\n    class TokenParser {\n      constructor(onError) {\n        this.skeleton = {};\n        this.onError = onError;\n      }\n      badOption(stem, opt) {\n        this.onError(new BadOptionError(stem, opt));\n      }\n      assertEmpty(key) {\n        const prev = this.skeleton[key];\n        if (prev) this.onError(new MaskedValueError(key, prev));\n      }\n      parseToken(stem, options) {\n        if (!validOptions(stem, options, this.onError)) return;\n        const option = options[0];\n        const res = this.skeleton;\n        switch (stem) {\n          // notation\n          case 'compact-short':\n          case 'compact-long':\n          case 'notation-simple':\n            this.assertEmpty('notation');\n            res.notation = {\n              style: stem\n            };\n            break;\n          case 'scientific':\n          case 'engineering':\n            {\n              let expDigits = null;\n              let expSign = undefined;\n              for (const opt of options) {\n                switch (opt) {\n                  case 'sign-auto':\n                  case 'sign-always':\n                  case 'sign-never':\n                  case 'sign-accounting':\n                  case 'sign-accounting-always':\n                  case 'sign-except-zero':\n                  case 'sign-accounting-except-zero':\n                    expSign = opt;\n                    break;\n                  default:\n                    if (/^\\+e+$/.test(opt)) expDigits = opt.length - 1;else {\n                      this.badOption(stem, opt);\n                    }\n                }\n              }\n              this.assertEmpty('notation');\n              const source = options.join('/');\n              res.notation = expDigits && expSign ? {\n                style: stem,\n                source,\n                expDigits,\n                expSign\n              } : expDigits ? {\n                style: stem,\n                source,\n                expDigits\n              } : expSign ? {\n                style: stem,\n                source,\n                expSign\n              } : {\n                style: stem,\n                source\n              };\n              break;\n            }\n          // unit\n          case 'percent':\n          case 'permille':\n          case 'base-unit':\n            this.assertEmpty('unit');\n            res.unit = {\n              style: stem\n            };\n            break;\n          case 'currency':\n            if (/^[A-Z]{3}$/.test(option)) {\n              this.assertEmpty('unit');\n              res.unit = {\n                style: stem,\n                currency: option\n              };\n            } else this.badOption(stem, option);\n            break;\n          case 'measure-unit':\n            {\n              if (isUnit(option)) {\n                this.assertEmpty('unit');\n                res.unit = {\n                  style: stem,\n                  unit: option\n                };\n              } else this.badOption(stem, option);\n              break;\n            }\n          // unitPer\n          case 'per-measure-unit':\n            {\n              if (isUnit(option)) {\n                this.assertEmpty('unitPer');\n                res.unitPer = option;\n              } else this.badOption(stem, option);\n              break;\n            }\n          // unitWidth\n          case 'unit-width-narrow':\n          case 'unit-width-short':\n          case 'unit-width-full-name':\n          case 'unit-width-iso-code':\n          case 'unit-width-hidden':\n            this.assertEmpty('unitWidth');\n            res.unitWidth = stem;\n            break;\n          // precision\n          case 'precision-integer':\n          case 'precision-unlimited':\n          case 'precision-currency-cash':\n            this.assertEmpty('precision');\n            res.precision = {\n              style: stem\n            };\n            break;\n          case 'precision-currency-standard':\n            this.assertEmpty('precision');\n            if (option === 'w') {\n              res.precision = {\n                style: stem,\n                trailingZero: 'stripIfInteger'\n              };\n            } else {\n              res.precision = {\n                style: stem\n              };\n            }\n            break;\n          case 'precision-increment':\n            {\n              const increment = Number(option);\n              if (increment > 0) {\n                this.assertEmpty('precision');\n                res.precision = {\n                  style: stem,\n                  increment\n                };\n              } else this.badOption(stem, option);\n              break;\n            }\n          // roundingMode\n          case 'rounding-mode-ceiling':\n          case 'rounding-mode-floor':\n          case 'rounding-mode-down':\n          case 'rounding-mode-up':\n          case 'rounding-mode-half-even':\n          case 'rounding-mode-half-odd':\n          case 'rounding-mode-half-ceiling':\n          case 'rounding-mode-half-floor':\n          case 'rounding-mode-half-down':\n          case 'rounding-mode-half-up':\n          case 'rounding-mode-unnecessary':\n            this.assertEmpty('roundingMode');\n            res.roundingMode = stem;\n            break;\n          // integerWidth\n          case 'integer-width':\n            {\n              if (/^\\+0*$/.test(option)) {\n                this.assertEmpty('integerWidth');\n                res.integerWidth = {\n                  source: option,\n                  min: option.length - 1\n                };\n              } else {\n                const m = option.match(/^#*(0*)$/);\n                if (m) {\n                  this.assertEmpty('integerWidth');\n                  res.integerWidth = {\n                    source: option,\n                    min: m[1].length,\n                    max: m[0].length\n                  };\n                } else this.badOption(stem, option);\n              }\n              break;\n            }\n          // scale\n          case 'scale':\n            {\n              const scale = Number(option);\n              if (scale > 0) {\n                this.assertEmpty('scale');\n                res.scale = scale;\n              } else this.badOption(stem, option);\n              break;\n            }\n          // group\n          case 'group-off':\n          case 'group-min2':\n          case 'group-auto':\n          case 'group-on-aligned':\n          case 'group-thousands':\n            this.assertEmpty('group');\n            res.group = stem;\n            break;\n          // numberingSystem\n          case 'latin':\n            this.assertEmpty('numberingSystem');\n            res.numberingSystem = 'latn';\n            break;\n          case 'numbering-system':\n            {\n              if (isNumberingSystem(option)) {\n                this.assertEmpty('numberingSystem');\n                res.numberingSystem = option;\n              } else this.badOption(stem, option);\n              break;\n            }\n          // sign\n          case 'sign-auto':\n          case 'sign-always':\n          case 'sign-never':\n          case 'sign-accounting':\n          case 'sign-accounting-always':\n          case 'sign-except-zero':\n          case 'sign-accounting-except-zero':\n            this.assertEmpty('sign');\n            res.sign = stem;\n            break;\n          // decimal\n          case 'decimal-auto':\n          case 'decimal-always':\n            this.assertEmpty('decimal');\n            res.decimal = stem;\n            break;\n          // precision blueprint\n          default:\n            {\n              const precision = parsePrecisionBlueprint(stem, options, this.onError);\n              if (precision) {\n                this.assertEmpty('precision');\n                res.precision = precision;\n              } else {\n                this.onError(new BadStemError(stem));\n              }\n            }\n        }\n      }\n    }\n\n    /**\n     * Parse an {@link\n     * https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md\n     * | ICU NumberFormatter skeleton} string into a {@link Skeleton} structure.\n     *\n     * @public\n     * @param src - The skeleton string\n     * @param onError - Called when the parser encounters a syntax error. The\n     *   function will still return a {@link Skeleton}, but it may not contain\n     *   information for all tokens. If not defined, the error will be thrown\n     *   instead.\n     *\n     * @example\n     * ```js\n     * import { parseNumberSkeleton } from '@messageformat/number-skeleton'\n     *\n     * parseNumberSkeleton('compact-short currency/GBP', console.error)\n     * // {\n     * //   notation: { style: 'compact-short' },\n     * //   unit: { style: 'currency', currency: 'GBP' }\n     * // }\n     * ```\n     */\n    function parseNumberSkeleton(src) {\n      let onError = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : error => {\n        throw error;\n      };\n      const tokens = [];\n      for (const part of src.split(' ')) {\n        if (part) {\n          const options = part.split('/');\n          const stem = options.shift() || '';\n          tokens.push({\n            stem,\n            options\n          });\n        }\n      }\n      const parser = new TokenParser(onError);\n      for (const {\n        stem,\n        options\n      } of tokens) {\n        parser.parseToken(stem, options);\n      }\n      return parser.skeleton;\n    }\n\n    /**\n     * Returns a number formatter function for the given locales and number skeleton\n     *\n     * @remarks\n     * Uses `Intl.NumberFormat` (ES2020) internally.\n     *\n     * @public\n     * @param locales - One or more valid BCP 47 language tags, e.g. `fr` or `en-CA`\n     * @param skeleton - An ICU NumberFormatter pattern or `::`-prefixed skeleton\n     *   string, or a parsed `Skeleton` structure\n     * @param currency - If `skeleton` is a pattern string that includes ¤ tokens,\n     *   their skeleton representation requires a three-letter currency code.\n     * @param onError - If defined, will be called separately for each encountered\n     *   parsing error and unsupported feature.\n     * @example\n     * ```js\n     * import { getNumberFormatter } from '@messageformat/number-skeleton'\n     *\n     * let src = ':: currency/CAD unit-width-narrow'\n     * let fmt = getNumberFormatter('en-CA', src, console.error)\n     * fmt(42) // '$42.00'\n     *\n     * src = '::percent scale/100'\n     * fmt = getNumberFormatter('en', src, console.error)\n     * fmt(0.3) // '30%'\n     * ```\n     */\n    function getNumberFormatter(locales, skeleton, currency, onError) {\n      if (typeof skeleton === 'string') {\n        skeleton = skeleton.indexOf('::') === 0 ? parseNumberSkeleton(skeleton.slice(2), onError) : parseNumberPattern(skeleton, currency, onError);\n      }\n      const lc = getNumberFormatLocales(locales, skeleton);\n      const opt = getNumberFormatOptions(skeleton, onError);\n      const mod = getNumberFormatModifier(skeleton);\n      const nf = new Intl.NumberFormat(lc, opt);\n      if (skeleton.affix) {\n        const [p0, p1] = skeleton.affix.pos;\n        const [n0, n1] = skeleton.affix.neg || ['', ''];\n        return value => {\n          const n = nf.format(mod(value));\n          return value < 0 ? `${n0}${n}${n1}` : `${p0}${n}${p1}`;\n        };\n      }\n      return value => nf.format(mod(value));\n    }\n    /**\n     * Returns a string of JavaScript source that evaluates to a number formatter\n     * function with the same `(value: number) => string` signature as the function\n     * returned by {@link getNumberFormatter}.\n     *\n     * @remarks\n     * The returned function will memoize an `Intl.NumberFormat` instance.\n     *\n     * @public\n     * @param locales - One or more valid BCP 47 language tags, e.g. `fr` or `en-CA`\n     * @param skeleton - An ICU NumberFormatter pattern or `::`-prefixed skeleton\n     *   string, or a parsed `Skeleton` structure\n     * @param currency - If `skeleton` is a pattern string that includes ¤ tokens,\n     *   their skeleton representation requires a three-letter currency code.\n     * @param onError - If defined, will be called separately for each encountered\n     *   parsing error and unsupported feature.\n     * @example\n     * ```js\n     * import { getNumberFormatterSource } from '@messageformat/number-skeleton'\n     *\n     * getNumberFormatterSource('en', '::percent', console.error)\n     * // '(function() {\\n' +\n     * // '  var opt = {\"style\":\"percent\"};\\n' +\n     * // '  var nf = new Intl.NumberFormat([\"en\"], opt);\\n' +\n     * // '  var mod = function(n) { return n * 0.01; };\\n' +\n     * // '  return function(value) { return nf.format(mod(value)); }\\n' +\n     * // '})()'\n     *\n     * const src = getNumberFormatterSource('en-CA', ':: currency/CAD unit-width-narrow', console.error)\n     * // '(function() {\\n' +\n     * // '  var opt = {\"style\":\"currency\",\"currency\":\"CAD\",\"currencyDisplay\":\"narrowSymbol\",\"unitDisplay\":\"narrow\"};\\n' +\n     * // '  var nf = new Intl.NumberFormat([\"en-CA\"], opt);\\n'\n     * // '  return function(value) { return nf.format(value); }\\n' +\n     * // '})()'\n     * const fmt = new Function(`return ${src}`)()\n     * fmt(42) // '$42.00'\n     * ```\n     */\n    function getNumberFormatterSource(locales, skeleton, currency, onError) {\n      if (typeof skeleton === 'string') {\n        skeleton = skeleton.indexOf('::') === 0 ? parseNumberSkeleton(skeleton.slice(2), onError) : parseNumberPattern(skeleton, currency, onError);\n      }\n      const lc = getNumberFormatLocales(locales, skeleton);\n      const opt = getNumberFormatOptions(skeleton, onError);\n      const modSrc = getNumberFormatModifierSource(skeleton);\n      const lines = [`(function() {`, `var opt = ${JSON.stringify(opt)};`, `var nf = new Intl.NumberFormat(${JSON.stringify(lc)}, opt);`];\n      let res = 'nf.format(value)';\n      if (modSrc) {\n        lines.push(`var mod = ${modSrc};`);\n        res = 'nf.format(mod(value))';\n      }\n      if (skeleton.affix) {\n        const [p0, p1] = skeleton.affix.pos.map(s => JSON.stringify(s));\n        if (skeleton.affix.neg) {\n          const [n0, n1] = skeleton.affix.neg.map(s => JSON.stringify(s));\n          res = `value < 0 ? ${n0} + ${res} + ${n1} : ${p0} + ${res} + ${p1}`;\n        } else {\n          res = `${p0} + ${res} + ${p1}`;\n        }\n      }\n      lines.push(`return function(value) { return ${res}; }`);\n      return lines.join('\\n  ') + '\\n})()';\n    }\n\n    var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n    function getDefaultExportFromCjs (x) {\n    \treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n    }\n\n    var parser = {};\n\n    var lexer = {};\n\n    var moo = {exports: {}};\n\n    (function (module) {\n      (function (root, factory) {\n        if (module.exports) {\n          module.exports = factory();\n        } else {\n          root.moo = factory();\n        }\n      })(commonjsGlobal, function () {\n\n        var hasOwnProperty = Object.prototype.hasOwnProperty;\n        var toString = Object.prototype.toString;\n        var hasSticky = typeof new RegExp().sticky === 'boolean';\n\n        /***************************************************************************/\n\n        function isRegExp(o) {\n          return o && toString.call(o) === '[object RegExp]';\n        }\n        function isObject(o) {\n          return o && typeof o === 'object' && !isRegExp(o) && !Array.isArray(o);\n        }\n        function reEscape(s) {\n          return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n        }\n        function reGroups(s) {\n          var re = new RegExp('|' + s);\n          return re.exec('').length - 1;\n        }\n        function reCapture(s) {\n          return '(' + s + ')';\n        }\n        function reUnion(regexps) {\n          if (!regexps.length) return '(?!)';\n          var source = regexps.map(function (s) {\n            return \"(?:\" + s + \")\";\n          }).join('|');\n          return \"(?:\" + source + \")\";\n        }\n        function regexpOrLiteral(obj) {\n          if (typeof obj === 'string') {\n            return '(?:' + reEscape(obj) + ')';\n          } else if (isRegExp(obj)) {\n            // TODO: consider /u support\n            if (obj.ignoreCase) throw new Error('RegExp /i flag not allowed');\n            if (obj.global) throw new Error('RegExp /g flag is implied');\n            if (obj.sticky) throw new Error('RegExp /y flag is implied');\n            if (obj.multiline) throw new Error('RegExp /m flag is implied');\n            return obj.source;\n          } else {\n            throw new Error('Not a pattern: ' + obj);\n          }\n        }\n        function pad(s, length) {\n          if (s.length > length) {\n            return s;\n          }\n          return Array(length - s.length + 1).join(\" \") + s;\n        }\n        function lastNLines(string, numLines) {\n          var position = string.length;\n          var lineBreaks = 0;\n          while (true) {\n            var idx = string.lastIndexOf(\"\\n\", position - 1);\n            if (idx === -1) {\n              break;\n            } else {\n              lineBreaks++;\n            }\n            position = idx;\n            if (lineBreaks === numLines) {\n              break;\n            }\n            if (position === 0) {\n              break;\n            }\n          }\n          var startPosition = lineBreaks < numLines ? 0 : position + 1;\n          return string.substring(startPosition).split(\"\\n\");\n        }\n        function objectToRules(object) {\n          var keys = Object.getOwnPropertyNames(object);\n          var result = [];\n          for (var i = 0; i < keys.length; i++) {\n            var key = keys[i];\n            var thing = object[key];\n            var rules = [].concat(thing);\n            if (key === 'include') {\n              for (var j = 0; j < rules.length; j++) {\n                result.push({\n                  include: rules[j]\n                });\n              }\n              continue;\n            }\n            var match = [];\n            rules.forEach(function (rule) {\n              if (isObject(rule)) {\n                if (match.length) result.push(ruleOptions(key, match));\n                result.push(ruleOptions(key, rule));\n                match = [];\n              } else {\n                match.push(rule);\n              }\n            });\n            if (match.length) result.push(ruleOptions(key, match));\n          }\n          return result;\n        }\n        function arrayToRules(array) {\n          var result = [];\n          for (var i = 0; i < array.length; i++) {\n            var obj = array[i];\n            if (obj.include) {\n              var include = [].concat(obj.include);\n              for (var j = 0; j < include.length; j++) {\n                result.push({\n                  include: include[j]\n                });\n              }\n              continue;\n            }\n            if (!obj.type) {\n              throw new Error('Rule has no type: ' + JSON.stringify(obj));\n            }\n            result.push(ruleOptions(obj.type, obj));\n          }\n          return result;\n        }\n        function ruleOptions(type, obj) {\n          if (!isObject(obj)) {\n            obj = {\n              match: obj\n            };\n          }\n          if (obj.include) {\n            throw new Error('Matching rules cannot also include states');\n          }\n\n          // nb. error and fallback imply lineBreaks\n          var options = {\n            defaultType: type,\n            lineBreaks: !!obj.error || !!obj.fallback,\n            pop: false,\n            next: null,\n            push: null,\n            error: false,\n            fallback: false,\n            value: null,\n            type: null,\n            shouldThrow: false\n          };\n\n          // Avoid Object.assign(), so we support IE9+\n          for (var key in obj) {\n            if (hasOwnProperty.call(obj, key)) {\n              options[key] = obj[key];\n            }\n          }\n\n          // type transform cannot be a string\n          if (typeof options.type === 'string' && type !== options.type) {\n            throw new Error(\"Type transform cannot be a string (type '\" + options.type + \"' for token '\" + type + \"')\");\n          }\n\n          // convert to array\n          var match = options.match;\n          options.match = Array.isArray(match) ? match : match ? [match] : [];\n          options.match.sort(function (a, b) {\n            return isRegExp(a) && isRegExp(b) ? 0 : isRegExp(b) ? -1 : isRegExp(a) ? +1 : b.length - a.length;\n          });\n          return options;\n        }\n        function toRules(spec) {\n          return Array.isArray(spec) ? arrayToRules(spec) : objectToRules(spec);\n        }\n        var defaultErrorRule = ruleOptions('error', {\n          lineBreaks: true,\n          shouldThrow: true\n        });\n        function compileRules(rules, hasStates) {\n          var errorRule = null;\n          var fast = Object.create(null);\n          var fastAllowed = true;\n          var unicodeFlag = null;\n          var groups = [];\n          var parts = [];\n\n          // If there is a fallback rule, then disable fast matching\n          for (var i = 0; i < rules.length; i++) {\n            if (rules[i].fallback) {\n              fastAllowed = false;\n            }\n          }\n          for (var i = 0; i < rules.length; i++) {\n            var options = rules[i];\n            if (options.include) {\n              // all valid inclusions are removed by states() preprocessor\n              throw new Error('Inheritance is not allowed in stateless lexers');\n            }\n            if (options.error || options.fallback) {\n              // errorRule can only be set once\n              if (errorRule) {\n                if (!options.fallback === !errorRule.fallback) {\n                  throw new Error(\"Multiple \" + (options.fallback ? \"fallback\" : \"error\") + \" rules not allowed (for token '\" + options.defaultType + \"')\");\n                } else {\n                  throw new Error(\"fallback and error are mutually exclusive (for token '\" + options.defaultType + \"')\");\n                }\n              }\n              errorRule = options;\n            }\n            var match = options.match.slice();\n            if (fastAllowed) {\n              while (match.length && typeof match[0] === 'string' && match[0].length === 1) {\n                var word = match.shift();\n                fast[word.charCodeAt(0)] = options;\n              }\n            }\n\n            // Warn about inappropriate state-switching options\n            if (options.pop || options.push || options.next) {\n              if (!hasStates) {\n                throw new Error(\"State-switching options are not allowed in stateless lexers (for token '\" + options.defaultType + \"')\");\n              }\n              if (options.fallback) {\n                throw new Error(\"State-switching options are not allowed on fallback tokens (for token '\" + options.defaultType + \"')\");\n              }\n            }\n\n            // Only rules with a .match are included in the RegExp\n            if (match.length === 0) {\n              continue;\n            }\n            fastAllowed = false;\n            groups.push(options);\n\n            // Check unicode flag is used everywhere or nowhere\n            for (var j = 0; j < match.length; j++) {\n              var obj = match[j];\n              if (!isRegExp(obj)) {\n                continue;\n              }\n              if (unicodeFlag === null) {\n                unicodeFlag = obj.unicode;\n              } else if (unicodeFlag !== obj.unicode && options.fallback === false) {\n                throw new Error('If one rule is /u then all must be');\n              }\n            }\n\n            // convert to RegExp\n            var pat = reUnion(match.map(regexpOrLiteral));\n\n            // validate\n            var regexp = new RegExp(pat);\n            if (regexp.test(\"\")) {\n              throw new Error(\"RegExp matches empty string: \" + regexp);\n            }\n            var groupCount = reGroups(pat);\n            if (groupCount > 0) {\n              throw new Error(\"RegExp has capture groups: \" + regexp + \"\\nUse (?: … ) instead\");\n            }\n\n            // try and detect rules matching newlines\n            if (!options.lineBreaks && regexp.test('\\n')) {\n              throw new Error('Rule should declare lineBreaks: ' + regexp);\n            }\n\n            // store regex\n            parts.push(reCapture(pat));\n          }\n\n          // If there's no fallback rule, use the sticky flag so we only look for\n          // matches at the current index.\n          //\n          // If we don't support the sticky flag, then fake it using an irrefutable\n          // match (i.e. an empty pattern).\n          var fallbackRule = errorRule && errorRule.fallback;\n          var flags = hasSticky && !fallbackRule ? 'ym' : 'gm';\n          var suffix = hasSticky || fallbackRule ? '' : '|';\n          if (unicodeFlag === true) flags += \"u\";\n          var combined = new RegExp(reUnion(parts) + suffix, flags);\n          return {\n            regexp: combined,\n            groups: groups,\n            fast: fast,\n            error: errorRule || defaultErrorRule\n          };\n        }\n        function compile(rules) {\n          var result = compileRules(toRules(rules));\n          return new Lexer({\n            start: result\n          }, 'start');\n        }\n        function checkStateGroup(g, name, map) {\n          var state = g && (g.push || g.next);\n          if (state && !map[state]) {\n            throw new Error(\"Missing state '\" + state + \"' (in token '\" + g.defaultType + \"' of state '\" + name + \"')\");\n          }\n          if (g && g.pop && +g.pop !== 1) {\n            throw new Error(\"pop must be 1 (in token '\" + g.defaultType + \"' of state '\" + name + \"')\");\n          }\n        }\n        function compileStates(states, start) {\n          var all = states.$all ? toRules(states.$all) : [];\n          delete states.$all;\n          var keys = Object.getOwnPropertyNames(states);\n          if (!start) start = keys[0];\n          var ruleMap = Object.create(null);\n          for (var i = 0; i < keys.length; i++) {\n            var key = keys[i];\n            ruleMap[key] = toRules(states[key]).concat(all);\n          }\n          for (var i = 0; i < keys.length; i++) {\n            var key = keys[i];\n            var rules = ruleMap[key];\n            var included = Object.create(null);\n            for (var j = 0; j < rules.length; j++) {\n              var rule = rules[j];\n              if (!rule.include) continue;\n              var splice = [j, 1];\n              if (rule.include !== key && !included[rule.include]) {\n                included[rule.include] = true;\n                var newRules = ruleMap[rule.include];\n                if (!newRules) {\n                  throw new Error(\"Cannot include nonexistent state '\" + rule.include + \"' (in state '\" + key + \"')\");\n                }\n                for (var k = 0; k < newRules.length; k++) {\n                  var newRule = newRules[k];\n                  if (rules.indexOf(newRule) !== -1) continue;\n                  splice.push(newRule);\n                }\n              }\n              rules.splice.apply(rules, splice);\n              j--;\n            }\n          }\n          var map = Object.create(null);\n          for (var i = 0; i < keys.length; i++) {\n            var key = keys[i];\n            map[key] = compileRules(ruleMap[key], true);\n          }\n          for (var i = 0; i < keys.length; i++) {\n            var name = keys[i];\n            var state = map[name];\n            var groups = state.groups;\n            for (var j = 0; j < groups.length; j++) {\n              checkStateGroup(groups[j], name, map);\n            }\n            var fastKeys = Object.getOwnPropertyNames(state.fast);\n            for (var j = 0; j < fastKeys.length; j++) {\n              checkStateGroup(state.fast[fastKeys[j]], name, map);\n            }\n          }\n          return new Lexer(map, start);\n        }\n        function keywordTransform(map) {\n          // Use a JavaScript Map to map keywords to their corresponding token type\n          // unless Map is unsupported, then fall back to using an Object:\n          var isMap = typeof Map !== 'undefined';\n          var reverseMap = isMap ? new Map() : Object.create(null);\n          var types = Object.getOwnPropertyNames(map);\n          for (var i = 0; i < types.length; i++) {\n            var tokenType = types[i];\n            var item = map[tokenType];\n            var keywordList = Array.isArray(item) ? item : [item];\n            keywordList.forEach(function (keyword) {\n              if (typeof keyword !== 'string') {\n                throw new Error(\"keyword must be string (in keyword '\" + tokenType + \"')\");\n              }\n              if (isMap) {\n                reverseMap.set(keyword, tokenType);\n              } else {\n                reverseMap[keyword] = tokenType;\n              }\n            });\n          }\n          return function (k) {\n            return isMap ? reverseMap.get(k) : reverseMap[k];\n          };\n        }\n\n        /***************************************************************************/\n\n        var Lexer = function (states, state) {\n          this.startState = state;\n          this.states = states;\n          this.buffer = '';\n          this.stack = [];\n          this.reset();\n        };\n        Lexer.prototype.reset = function (data, info) {\n          this.buffer = data || '';\n          this.index = 0;\n          this.line = info ? info.line : 1;\n          this.col = info ? info.col : 1;\n          this.queuedToken = info ? info.queuedToken : null;\n          this.queuedText = info ? info.queuedText : \"\";\n          this.queuedThrow = info ? info.queuedThrow : null;\n          this.setState(info ? info.state : this.startState);\n          this.stack = info && info.stack ? info.stack.slice() : [];\n          return this;\n        };\n        Lexer.prototype.save = function () {\n          return {\n            line: this.line,\n            col: this.col,\n            state: this.state,\n            stack: this.stack.slice(),\n            queuedToken: this.queuedToken,\n            queuedText: this.queuedText,\n            queuedThrow: this.queuedThrow\n          };\n        };\n        Lexer.prototype.setState = function (state) {\n          if (!state || this.state === state) return;\n          this.state = state;\n          var info = this.states[state];\n          this.groups = info.groups;\n          this.error = info.error;\n          this.re = info.regexp;\n          this.fast = info.fast;\n        };\n        Lexer.prototype.popState = function () {\n          this.setState(this.stack.pop());\n        };\n        Lexer.prototype.pushState = function (state) {\n          this.stack.push(this.state);\n          this.setState(state);\n        };\n        var eat = hasSticky ? function (re, buffer) {\n          // assume re is /y\n          return re.exec(buffer);\n        } : function (re, buffer) {\n          // assume re is /g\n          var match = re.exec(buffer);\n          // will always match, since we used the |(?:) trick\n          if (match[0].length === 0) {\n            return null;\n          }\n          return match;\n        };\n        Lexer.prototype._getGroup = function (match) {\n          var groupCount = this.groups.length;\n          for (var i = 0; i < groupCount; i++) {\n            if (match[i + 1] !== undefined) {\n              return this.groups[i];\n            }\n          }\n          throw new Error('Cannot find token type for matched text');\n        };\n        function tokenToString() {\n          return this.value;\n        }\n        Lexer.prototype.next = function () {\n          var index = this.index;\n\n          // If a fallback token matched, we don't need to re-run the RegExp\n          if (this.queuedGroup) {\n            var token = this._token(this.queuedGroup, this.queuedText, index);\n            this.queuedGroup = null;\n            this.queuedText = \"\";\n            return token;\n          }\n          var buffer = this.buffer;\n          if (index === buffer.length) {\n            return; // EOF\n          }\n\n          // Fast matching for single characters\n          var group = this.fast[buffer.charCodeAt(index)];\n          if (group) {\n            return this._token(group, buffer.charAt(index), index);\n          }\n\n          // Execute RegExp\n          var re = this.re;\n          re.lastIndex = index;\n          var match = eat(re, buffer);\n\n          // Error tokens match the remaining buffer\n          var error = this.error;\n          if (match == null) {\n            return this._token(error, buffer.slice(index, buffer.length), index);\n          }\n          var group = this._getGroup(match);\n          var text = match[0];\n          if (error.fallback && match.index !== index) {\n            this.queuedGroup = group;\n            this.queuedText = text;\n\n            // Fallback tokens contain the unmatched portion of the buffer\n            return this._token(error, buffer.slice(index, match.index), index);\n          }\n          return this._token(group, text, index);\n        };\n        Lexer.prototype._token = function (group, text, offset) {\n          // count line breaks\n          var lineBreaks = 0;\n          if (group.lineBreaks) {\n            var matchNL = /\\n/g;\n            var nl = 1;\n            if (text === '\\n') {\n              lineBreaks = 1;\n            } else {\n              while (matchNL.exec(text)) {\n                lineBreaks++;\n                nl = matchNL.lastIndex;\n              }\n            }\n          }\n          var token = {\n            type: typeof group.type === 'function' && group.type(text) || group.defaultType,\n            value: typeof group.value === 'function' ? group.value(text) : text,\n            text: text,\n            toString: tokenToString,\n            offset: offset,\n            lineBreaks: lineBreaks,\n            line: this.line,\n            col: this.col\n          };\n          // nb. adding more props to token object will make V8 sad!\n\n          var size = text.length;\n          this.index += size;\n          this.line += lineBreaks;\n          if (lineBreaks !== 0) {\n            this.col = size - nl + 1;\n          } else {\n            this.col += size;\n          }\n\n          // throw, if no rule with {error: true}\n          if (group.shouldThrow) {\n            var err = new Error(this.formatError(token, \"invalid syntax\"));\n            throw err;\n          }\n          if (group.pop) this.popState();else if (group.push) this.pushState(group.push);else if (group.next) this.setState(group.next);\n          return token;\n        };\n        if (typeof Symbol !== 'undefined' && Symbol.iterator) {\n          var LexerIterator = function (lexer) {\n            this.lexer = lexer;\n          };\n          LexerIterator.prototype.next = function () {\n            var token = this.lexer.next();\n            return {\n              value: token,\n              done: !token\n            };\n          };\n          LexerIterator.prototype[Symbol.iterator] = function () {\n            return this;\n          };\n          Lexer.prototype[Symbol.iterator] = function () {\n            return new LexerIterator(this);\n          };\n        }\n        Lexer.prototype.formatError = function (token, message) {\n          if (token == null) {\n            // An undefined token indicates EOF\n            var text = this.buffer.slice(this.index);\n            var token = {\n              text: text,\n              offset: this.index,\n              lineBreaks: text.indexOf('\\n') === -1 ? 0 : 1,\n              line: this.line,\n              col: this.col\n            };\n          }\n          var numLinesAround = 2;\n          var firstDisplayedLine = Math.max(token.line - numLinesAround, 1);\n          var lastDisplayedLine = token.line + numLinesAround;\n          var lastLineDigits = String(lastDisplayedLine).length;\n          var displayedLines = lastNLines(this.buffer, this.line - token.line + numLinesAround + 1).slice(0, 5);\n          var errorLines = [];\n          errorLines.push(message + \" at line \" + token.line + \" col \" + token.col + \":\");\n          errorLines.push(\"\");\n          for (var i = 0; i < displayedLines.length; i++) {\n            var line = displayedLines[i];\n            var lineNo = firstDisplayedLine + i;\n            errorLines.push(pad(String(lineNo), lastLineDigits) + \"  \" + line);\n            if (lineNo === token.line) {\n              errorLines.push(pad(\"\", lastLineDigits + token.col + 1) + \"^\");\n            }\n          }\n          return errorLines.join(\"\\n\");\n        };\n        Lexer.prototype.clone = function () {\n          return new Lexer(this.states, this.state);\n        };\n        Lexer.prototype.has = function (tokenType) {\n          return true;\n        };\n        return {\n          compile: compile,\n          states: compileStates,\n          error: Object.freeze({\n            error: true\n          }),\n          fallback: Object.freeze({\n            fallback: true\n          }),\n          keywords: keywordTransform\n        };\n      });\n    })(moo);\n    var mooExports = moo.exports;\n\n    (function (exports) {\n\n      var __importDefault = commonjsGlobal && commonjsGlobal.__importDefault || function (mod) {\n        return mod && mod.__esModule ? mod : {\n          \"default\": mod\n        };\n      };\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n      exports.lexer = exports.states = void 0;\n      const moo_1 = __importDefault(mooExports);\n      exports.states = {\n        body: {\n          doubleapos: {\n            match: \"''\",\n            value: () => \"'\"\n          },\n          quoted: {\n            lineBreaks: true,\n            match: /'[{}#](?:[^]*?[^'])?'(?!')/u,\n            value: src => src.slice(1, -1).replace(/''/g, \"'\")\n          },\n          argument: {\n            lineBreaks: true,\n            match: /\\{\\s*[^\\p{Pat_Syn}\\p{Pat_WS}]+\\s*/u,\n            push: 'arg',\n            value: src => src.substring(1).trim()\n          },\n          octothorpe: '#',\n          end: {\n            match: '}',\n            pop: 1\n          },\n          content: {\n            lineBreaks: true,\n            match: /[^][^{}#']*/u\n          }\n        },\n        arg: {\n          select: {\n            lineBreaks: true,\n            match: /,\\s*(?:plural|select|selectordinal)\\s*,\\s*/u,\n            next: 'select',\n            value: src => src.split(',')[1].trim()\n          },\n          'func-args': {\n            lineBreaks: true,\n            match: /,\\s*[^\\p{Pat_Syn}\\p{Pat_WS}]+\\s*,/u,\n            next: 'body',\n            value: src => src.split(',')[1].trim()\n          },\n          'func-simple': {\n            lineBreaks: true,\n            match: /,\\s*[^\\p{Pat_Syn}\\p{Pat_WS}]+\\s*/u,\n            value: src => src.substring(1).trim()\n          },\n          end: {\n            match: '}',\n            pop: 1\n          }\n        },\n        select: {\n          offset: {\n            lineBreaks: true,\n            match: /\\s*offset\\s*:\\s*\\d+\\s*/u,\n            value: src => src.split(':')[1].trim()\n          },\n          case: {\n            lineBreaks: true,\n            match: /\\s*(?:=\\d+|[^\\p{Pat_Syn}\\p{Pat_WS}]+)\\s*\\{/u,\n            push: 'body',\n            value: src => src.substring(0, src.indexOf('{')).trim()\n          },\n          end: {\n            match: /\\s*\\}/u,\n            pop: 1\n          }\n        }\n      };\n      exports.lexer = moo_1.default.states(exports.states);\n    })(lexer);\n\n    /**\n     * An AST parser for ICU MessageFormat strings\n     *\n     * @packageDocumentation\n     * @example\n     * ```\n     * import { parse } from '@messageformat/parser\n     *\n     * parse('So {wow}.')\n     * [ { type: 'content', value: 'So ' },\n     *   { type: 'argument', arg: 'wow' },\n     *   { type: 'content', value: '.' } ]\n     *\n     *\n     * parse('Such { thing }. { count, selectordinal, one {First} two {Second}' +\n     *       '                  few {Third} other {#th} } word.')\n     * [ { type: 'content', value: 'Such ' },\n     *   { type: 'argument', arg: 'thing' },\n     *   { type: 'content', value: '. ' },\n     *   { type: 'selectordinal',\n     *     arg: 'count',\n     *     cases: [\n     *       { key: 'one', tokens: [ { type: 'content', value: 'First' } ] },\n     *       { key: 'two', tokens: [ { type: 'content', value: 'Second' } ] },\n     *       { key: 'few', tokens: [ { type: 'content', value: 'Third' } ] },\n     *       { key: 'other',\n     *         tokens: [ { type: 'octothorpe' }, { type: 'content', value: 'th' } ] }\n     *     ] },\n     *   { type: 'content', value: ' word.' } ]\n     *\n     *\n     * parse('Many{type,select,plural{ numbers}selectordinal{ counting}' +\n     *                          'select{ choices}other{ some {type}}}.')\n     * [ { type: 'content', value: 'Many' },\n     *   { type: 'select',\n     *     arg: 'type',\n     *     cases: [\n     *       { key: 'plural', tokens: [ { type: 'content', value: 'numbers' } ] },\n     *       { key: 'selectordinal', tokens: [ { type: 'content', value: 'counting' } ] },\n     *       { key: 'select', tokens: [ { type: 'content', value: 'choices' } ] },\n     *       { key: 'other',\n     *         tokens: [ { type: 'content', value: 'some ' }, { type: 'argument', arg: 'type' } ] }\n     *     ] },\n     *   { type: 'content', value: '.' } ]\n     *\n     *\n     * parse('{Such compliance')\n     * // ParseError: invalid syntax at line 1 col 7:\n     * //\n     * //  {Such compliance\n     * //        ^\n     *\n     *\n     * const msg = '{words, plural, zero{No words} one{One word} other{# words}}'\n     * parse(msg)\n     * [ { type: 'plural',\n     *     arg: 'words',\n     *     cases: [\n     *       { key: 'zero', tokens: [ { type: 'content', value: 'No words' } ] },\n     *       { key: 'one', tokens: [ { type: 'content', value: 'One word' } ] },\n     *       { key: 'other',\n     *         tokens: [ { type: 'octothorpe' }, { type: 'content', value: ' words' } ] }\n     *     ] } ]\n     *\n     *\n     * parse(msg, { cardinal: [ 'one', 'other' ], ordinal: [ 'one', 'two', 'few', 'other' ] })\n     * // ParseError: The plural case zero is not valid in this locale at line 1 col 17:\n     * //\n     * //   {words, plural, zero{\n     * //                   ^\n     * ```\n     */\n    Object.defineProperty(parser, \"__esModule\", {\n      value: true\n    });\n    var parse_1 = parser.parse = parser.ParseError = void 0;\n    const lexer_js_1 = lexer;\n    const getContext = lt => ({\n      offset: lt.offset,\n      line: lt.line,\n      col: lt.col,\n      text: lt.text,\n      lineBreaks: lt.lineBreaks\n    });\n    const isSelectType = type => type === 'plural' || type === 'select' || type === 'selectordinal';\n    function strictArgStyleParam(lt, param) {\n      let value = '';\n      let text = '';\n      for (const p of param) {\n        const pText = p.ctx.text;\n        text += pText;\n        switch (p.type) {\n          case 'content':\n            value += p.value;\n            break;\n          case 'argument':\n          case 'function':\n          case 'octothorpe':\n            value += pText;\n            break;\n          default:\n            throw new ParseError(lt, `Unsupported part in strict mode function arg style: ${pText}`);\n        }\n      }\n      const c = {\n        type: 'content',\n        value: value.trim(),\n        ctx: Object.assign({}, param[0].ctx, {\n          text\n        })\n      };\n      return [c];\n    }\n    const strictArgTypes = ['number', 'date', 'time', 'spellout', 'ordinal', 'duration'];\n    const defaultPluralKeys = ['zero', 'one', 'two', 'few', 'many', 'other'];\n    /**\n     * Thrown by {@link parse} on error\n     *\n     * @public\n     */\n    class ParseError extends Error {\n      /** @internal */\n      constructor(lt, msg) {\n        super(lexer_js_1.lexer.formatError(lt, msg));\n      }\n    }\n    parser.ParseError = ParseError;\n    class Parser {\n      constructor(src, opt) {\n        var _a, _b, _c, _d;\n        this.lexer = lexer_js_1.lexer.reset(src);\n        this.cardinalKeys = (_a = opt === null || opt === void 0 ? void 0 : opt.cardinal) !== null && _a !== void 0 ? _a : defaultPluralKeys;\n        this.ordinalKeys = (_b = opt === null || opt === void 0 ? void 0 : opt.ordinal) !== null && _b !== void 0 ? _b : defaultPluralKeys;\n        this.strict = (_c = opt === null || opt === void 0 ? void 0 : opt.strict) !== null && _c !== void 0 ? _c : false;\n        this.strictPluralKeys = (_d = opt === null || opt === void 0 ? void 0 : opt.strictPluralKeys) !== null && _d !== void 0 ? _d : true;\n      }\n      parse() {\n        return this.parseBody(false, true);\n      }\n      checkSelectKey(lt, type, key) {\n        if (key[0] === '=') {\n          if (type === 'select') throw new ParseError(lt, `The case ${key} is not valid with select`);\n        } else if (type !== 'select') {\n          const keys = type === 'plural' ? this.cardinalKeys : this.ordinalKeys;\n          if (this.strictPluralKeys && keys.length > 0 && !keys.includes(key)) {\n            const msg = `The ${type} case ${key} is not valid in this locale`;\n            throw new ParseError(lt, msg);\n          }\n        }\n      }\n      parseSelect(_ref, inPlural, ctx, type) {\n        let {\n          value: arg\n        } = _ref;\n        const sel = {\n          type,\n          arg,\n          cases: [],\n          ctx\n        };\n        if (type === 'plural' || type === 'selectordinal') inPlural = true;else if (this.strict) inPlural = false;\n        for (const lt of this.lexer) {\n          switch (lt.type) {\n            case 'offset':\n              if (type === 'select') throw new ParseError(lt, 'Unexpected plural offset for select');\n              if (sel.cases.length > 0) throw new ParseError(lt, 'Plural offset must be set before cases');\n              sel.pluralOffset = Number(lt.value);\n              ctx.text += lt.text;\n              ctx.lineBreaks += lt.lineBreaks;\n              break;\n            case 'case':\n              {\n                this.checkSelectKey(lt, type, lt.value);\n                sel.cases.push({\n                  key: lt.value,\n                  tokens: this.parseBody(inPlural),\n                  ctx: getContext(lt)\n                });\n                break;\n              }\n            case 'end':\n              return sel;\n            /* istanbul ignore next: never happens */\n            default:\n              throw new ParseError(lt, `Unexpected lexer token: ${lt.type}`);\n          }\n        }\n        throw new ParseError(null, 'Unexpected message end');\n      }\n      parseArgToken(lt, inPlural) {\n        const ctx = getContext(lt);\n        const argType = this.lexer.next();\n        if (!argType) throw new ParseError(null, 'Unexpected message end');\n        ctx.text += argType.text;\n        ctx.lineBreaks += argType.lineBreaks;\n        if (this.strict && (argType.type === 'func-simple' || argType.type === 'func-args') && !strictArgTypes.includes(argType.value)) {\n          const msg = `Invalid strict mode function arg type: ${argType.value}`;\n          throw new ParseError(lt, msg);\n        }\n        switch (argType.type) {\n          case 'end':\n            return {\n              type: 'argument',\n              arg: lt.value,\n              ctx\n            };\n          case 'func-simple':\n            {\n              const end = this.lexer.next();\n              if (!end) throw new ParseError(null, 'Unexpected message end');\n              /* istanbul ignore if: never happens */\n              if (end.type !== 'end') throw new ParseError(end, `Unexpected lexer token: ${end.type}`);\n              ctx.text += end.text;\n              if (isSelectType(argType.value.toLowerCase())) throw new ParseError(argType, `Invalid type identifier: ${argType.value}`);\n              return {\n                type: 'function',\n                arg: lt.value,\n                key: argType.value,\n                ctx\n              };\n            }\n          case 'func-args':\n            {\n              if (isSelectType(argType.value.toLowerCase())) {\n                const msg = `Invalid type identifier: ${argType.value}`;\n                throw new ParseError(argType, msg);\n              }\n              let param = this.parseBody(this.strict ? false : inPlural);\n              if (this.strict && param.length > 0) param = strictArgStyleParam(lt, param);\n              return {\n                type: 'function',\n                arg: lt.value,\n                key: argType.value,\n                param,\n                ctx\n              };\n            }\n          case 'select':\n            /* istanbul ignore else: never happens */\n            if (isSelectType(argType.value)) return this.parseSelect(lt, inPlural, ctx, argType.value);else throw new ParseError(argType, `Unexpected select type ${argType.value}`);\n          /* istanbul ignore next: never happens */\n          default:\n            throw new ParseError(argType, `Unexpected lexer token: ${argType.type}`);\n        }\n      }\n      parseBody(inPlural, atRoot) {\n        const tokens = [];\n        let content = null;\n        for (const lt of this.lexer) {\n          if (lt.type === 'argument') {\n            if (content) content = null;\n            tokens.push(this.parseArgToken(lt, inPlural));\n          } else if (lt.type === 'octothorpe' && inPlural) {\n            if (content) content = null;\n            tokens.push({\n              type: 'octothorpe',\n              ctx: getContext(lt)\n            });\n          } else if (lt.type === 'end' && !atRoot) {\n            return tokens;\n          } else {\n            let value = lt.value;\n            if (!inPlural && lt.type === 'quoted' && value[0] === '#') {\n              if (value.includes('{')) {\n                const errMsg = `Unsupported escape pattern: ${value}`;\n                throw new ParseError(lt, errMsg);\n              }\n              value = lt.text;\n            }\n            if (content) {\n              content.value += value;\n              content.ctx.text += lt.text;\n              content.ctx.lineBreaks += lt.lineBreaks;\n            } else {\n              content = {\n                type: 'content',\n                value,\n                ctx: getContext(lt)\n              };\n              tokens.push(content);\n            }\n          }\n        }\n        if (atRoot) return tokens;\n        throw new ParseError(null, 'Unexpected message end');\n      }\n    }\n    /**\n     * Parse an input string into an array of tokens\n     *\n     * @public\n     * @remarks\n     * The parser only supports the default `DOUBLE_OPTIONAL`\n     * {@link http://www.icu-project.org/apiref/icu4c/messagepattern_8h.html#af6e0757e0eb81c980b01ee5d68a9978b | apostrophe mode}.\n     */\n    function parse(src) {\n      let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const parser = new Parser(src, options);\n      return parser.parse();\n    }\n    parse_1 = parser.parse = parse;\n\n    /**\n     * A set of utility functions that are called by the compiled Javascript\n     * functions, these are included locally in the output of {@link MessageFormat.compile compile()}.\n     */\n    /** @private */\n    function _nf$1(lc) {\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore\n      return _nf$1[lc] || (_nf$1[lc] = new Intl.NumberFormat(lc));\n    }\n    /**\n     * Utility function for `#` in plural rules\n     *\n     * @param lc The current locale\n     * @param value The value to operate on\n     * @param offset An offset, set by the surrounding context\n     * @returns The result of applying the offset to the input value\n     */\n    function number(lc, value, offset) {\n      return _nf$1(lc).format(value - offset);\n    }\n    /**\n     * Strict utility function for `#` in plural rules\n     *\n     * Will throw an Error if `value` or `offset` are non-numeric.\n     *\n     * @param lc The current locale\n     * @param value The value to operate on\n     * @param offset An offset, set by the surrounding context\n     * @param name The name of the argument, used for error reporting\n     * @returns The result of applying the offset to the input value\n     */\n    function strictNumber(lc, value, offset, name) {\n      var n = value - offset;\n      if (isNaN(n)) throw new Error('`' + name + '` or its offset is not a number');\n      return _nf$1(lc).format(n);\n    }\n    /**\n     * Utility function for `{N, plural|selectordinal, ...}`\n     *\n     * @param value The key to use to find a pluralization rule\n     * @param offset An offset to apply to `value`\n     * @param lcfunc A locale function from `pluralFuncs`\n     * @param data The object from which results are looked up\n     * @param isOrdinal If true, use ordinal rather than cardinal rules\n     * @returns The result of the pluralization\n     */\n    function plural(value, offset, lcfunc, data, isOrdinal) {\n      if ({}.hasOwnProperty.call(data, value)) return data[value];\n      if (offset) value -= offset;\n      var key = lcfunc(value, isOrdinal);\n      return key in data ? data[key] : data.other;\n    }\n    /**\n     * Utility function for `{N, select, ...}`\n     *\n     * @param value The key to use to find a selection\n     * @param data The object from which results are looked up\n     * @returns The result of the select statement\n     */\n    function select(value, data) {\n      return {}.hasOwnProperty.call(data, value) ? data[value] : data.other;\n    }\n    /**\n     * Checks that all required arguments are set to defined values\n     *\n     * Throws on failure; otherwise returns undefined\n     *\n     * @param keys The required keys\n     * @param data The data object being checked\n     */\n    function reqArgs(keys, data) {\n      for (var i = 0; i < keys.length; ++i) if (!data || data[keys[i]] === undefined) throw new Error(\"Message requires argument '\".concat(keys[i], \"'\"));\n    }\n\n    var Runtime = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        _nf: _nf$1,\n        number: number,\n        plural: plural,\n        reqArgs: reqArgs,\n        select: select,\n        strictNumber: strictNumber\n    });\n\n    /**\n     * Represent a date as a short/default/long/full string\n     *\n     * @param value Either a Unix epoch time in milliseconds, or a string value\n     *   representing a date. Parsed with `new Date(value)`\n     *\n     * @example\n     * ```js\n     * var mf = new MessageFormat(['en', 'fi']);\n     *\n     * mf.compile('Today is {T, date}')({ T: Date.now() })\n     * // 'Today is Feb 21, 2016'\n     *\n     * mf.compile('Tänään on {T, date}', 'fi')({ T: Date.now() })\n     * // 'Tänään on 21. helmikuuta 2016'\n     *\n     * mf.compile('Unix time started on {T, date, full}')({ T: 0 })\n     * // 'Unix time started on Thursday, January 1, 1970'\n     *\n     * var cf = mf.compile('{sys} became operational on {d0, date, short}');\n     * cf({ sys: 'HAL 9000', d0: '12 January 1999' })\n     * // 'HAL 9000 became operational on 1/12/1999'\n     * ```\n     */\n    function date(value, lc, size) {\n      var o = {\n        day: 'numeric',\n        month: 'short',\n        year: 'numeric'\n      };\n      /* eslint-disable no-fallthrough */\n      switch (size) {\n        case 'full':\n          o.weekday = 'long';\n        case 'long':\n          o.month = 'long';\n          break;\n        case 'short':\n          o.month = 'numeric';\n      }\n      return new Date(value).toLocaleDateString(lc, o);\n    }\n\n    /**\n     * Represent a duration in seconds as a string\n     *\n     * @param value A finite number, or its string representation\n     * @return Includes one or two `:` separators, and matches the pattern\n     *   `hhhh:mm:ss`, possibly with a leading `-` for negative values and a\n     *   trailing `.sss` part for non-integer input\n     *\n     * @example\n     * ```js\n     * var mf = new MessageFormat();\n     *\n     * mf.compile('It has been {D, duration}')({ D: 123 })\n     * // 'It has been 2:03'\n     *\n     * mf.compile('Countdown: {D, duration}')({ D: -151200.42 })\n     * // 'Countdown: -42:00:00.420'\n     * ```\n     */\n    function duration(value) {\n      if (typeof value !== 'number') value = Number(value);\n      if (!isFinite(value)) return String(value);\n      var sign = '';\n      if (value < 0) {\n        sign = '-';\n        value = Math.abs(value);\n      } else {\n        value = Number(value);\n      }\n      var sec = value % 60;\n      var parts = [Math.round(sec) === sec ? sec : sec.toFixed(3)];\n      if (value < 60) {\n        parts.unshift(0); // at least one : is required\n      } else {\n        value = Math.round((value - Number(parts[0])) / 60);\n        parts.unshift(value % 60); // minutes\n        if (value >= 60) {\n          value = Math.round((value - Number(parts[0])) / 60);\n          parts.unshift(value); // hours\n        }\n      }\n\n      var first = parts.shift();\n      return sign + first + ':' + parts.map(function (n) {\n        return Number(n) < 10 ? '0' + String(n) : String(n);\n      }).join(':');\n    }\n\n    /**\n     * Represent a number as an integer, percent or currency value\n     *\n     * Available in MessageFormat strings as `{VAR, number, integer|percent|currency}`.\n     * Internally, calls Intl.NumberFormat with appropriate parameters. `currency` will\n     * default to USD; to change, set `MessageFormat#currency` to the appropriate\n     * three-letter currency code, or use the `currency:EUR` form of the argument.\n     *\n     * @example\n     * ```js\n     * var mf = new MessageFormat('en', { currency: 'EUR'});\n     *\n     * mf.compile('{N} is almost {N, number, integer}')({ N: 3.14 })\n     * // '3.14 is almost 3'\n     *\n     * mf.compile('{P, number, percent} complete')({ P: 0.99 })\n     * // '99% complete'\n     *\n     * mf.compile('The total is {V, number, currency}.')({ V: 5.5 })\n     * // 'The total is €5.50.'\n     *\n     * mf.compile('The total is {V, number, currency:GBP}.')({ V: 5.5 })\n     * // 'The total is £5.50.'\n     * ```\n     */\n    var _nf = {};\n    function nf(lc, opt) {\n      var key = String(lc) + JSON.stringify(opt);\n      if (!_nf[key]) _nf[key] = new Intl.NumberFormat(lc, opt);\n      return _nf[key];\n    }\n    function numberFmt(value, lc, arg, defaultCurrency) {\n      var _a = arg && arg.split(':') || [],\n        type = _a[0],\n        currency = _a[1];\n      var opt = {\n        integer: {\n          maximumFractionDigits: 0\n        },\n        percent: {\n          style: 'percent'\n        },\n        currency: {\n          style: 'currency',\n          currency: currency && currency.trim() || defaultCurrency,\n          minimumFractionDigits: 2,\n          maximumFractionDigits: 2\n        }\n      };\n      return nf(lc, opt[type] || {}).format(value);\n    }\n    var numberCurrency = function (value, lc, arg) {\n      return nf(lc, {\n        style: 'currency',\n        currency: arg,\n        minimumFractionDigits: 2,\n        maximumFractionDigits: 2\n      }).format(value);\n    };\n    var numberInteger = function (value, lc) {\n      return nf(lc, {\n        maximumFractionDigits: 0\n      }).format(value);\n    };\n    var numberPercent = function (value, lc) {\n      return nf(lc, {\n        style: 'percent'\n      }).format(value);\n    };\n\n    /**\n     * Represent a time as a short/default/long string\n     *\n     * @param value Either a Unix epoch time in milliseconds, or a string value\n     *   representing a date. Parsed with `new Date(value)`\n     *\n     * @example\n     * ```js\n     * var mf = new MessageFormat(['en', 'fi']);\n     *\n     * mf.compile('The time is now {T, time}')({ T: Date.now() })\n     * // 'The time is now 11:26:35 PM'\n     *\n     * mf.compile('Kello on nyt {T, time}', 'fi')({ T: Date.now() })\n     * // 'Kello on nyt 23.26.35'\n     *\n     * var cf = mf.compile('The Eagle landed at {T, time, full} on {T, date, full}');\n     * cf({ T: '1969-07-20 20:17:40 UTC' })\n     * // 'The Eagle landed at 10:17:40 PM GMT+2 on Sunday, July 20, 1969'\n     * ```\n     */\n    function time(value, lc, size) {\n      var o = {\n        second: 'numeric',\n        minute: 'numeric',\n        hour: 'numeric'\n      };\n      /* eslint-disable no-fallthrough */\n      switch (size) {\n        case 'full':\n        case 'long':\n          o.timeZoneName = 'short';\n          break;\n        case 'short':\n          delete o.second;\n      }\n      return new Date(value).toLocaleTimeString(lc, o);\n    }\n\n    var Formatters = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        date: date,\n        duration: duration,\n        numberCurrency: numberCurrency,\n        numberFmt: numberFmt,\n        numberInteger: numberInteger,\n        numberPercent: numberPercent,\n        time: time\n    });\n\n    const ES3 = {\n      break: true,\n      continue: true,\n      delete: true,\n      else: true,\n      for: true,\n      function: true,\n      if: true,\n      in: true,\n      new: true,\n      return: true,\n      this: true,\n      typeof: true,\n      var: true,\n      void: true,\n      while: true,\n      with: true,\n      case: true,\n      catch: true,\n      default: true,\n      do: true,\n      finally: true,\n      instanceof: true,\n      switch: true,\n      throw: true,\n      try: true\n    };\n    const ESnext = {\n      // in addition to reservedES3\n      await: true,\n      debugger: true,\n      class: true,\n      enum: true,\n      extends: true,\n      super: true,\n      const: true,\n      export: true,\n      import: true,\n      null: true,\n      true: true,\n      false: true,\n      implements: true,\n      let: true,\n      private: true,\n      public: true,\n      yield: true,\n      interface: true,\n      package: true,\n      protected: true,\n      static: true\n    };\n    var reserved = {\n      ES3,\n      ESnext\n    };\n    var reserved$1 = /*@__PURE__*/getDefaultExportFromCjs(reserved);\n\n    // from https://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/\n    function hashCode(str) {\n      let hash = 0;\n      for (let i = 0; i < str.length; ++i) {\n        const char = str.charCodeAt(i);\n        hash = (hash << 5) - hash + char;\n        hash |= 0; // Convert to 32bit integer\n      }\n\n      return hash;\n    }\n    function identifier(key, unique) {\n      if (unique) key += ' ' + hashCode(key).toString(36);\n      const id = key.trim().replace(/\\W+/g, '_');\n      return reserved$1.ES3[id] || reserved$1.ESnext[id] || /^\\d/.test(id) ? '_' + id : id;\n    }\n    function property(obj, key) {\n      if (/^[A-Z_$][0-9A-Z_$]*$/i.test(key) && !reserved$1.ES3[key]) {\n        return obj ? obj + '.' + key : key;\n      } else {\n        const jkey = JSON.stringify(key);\n        return obj ? obj + '[' + jkey + ']' : jkey;\n      }\n    }\n\n    var rtlLanguages = [\n        'ar',\n        'ckb',\n        'fa',\n        'he',\n        'ks($|[^bfh])',\n        'lrc',\n        'mzn',\n        'pa-Arab',\n        'ps',\n        'ug',\n        'ur',\n        'uz-Arab',\n        'yi'\n    ];\n    var rtlRegExp = new RegExp('^' + rtlLanguages.join('|^'));\n    function biDiMarkText(text, locale) {\n        var isLocaleRTL = rtlRegExp.test(locale);\n        var mark = JSON.stringify(isLocaleRTL ? '\\u200F' : '\\u200E');\n        return \"\".concat(mark, \" + \").concat(text, \" + \").concat(mark);\n    }\n\n    var RUNTIME_MODULE = '@messageformat/runtime';\n    var CARDINAL_MODULE = '@messageformat/runtime/lib/cardinals';\n    var PLURAL_MODULE = '@messageformat/runtime/lib/plurals';\n    var FORMATTER_MODULE = '@messageformat/runtime/lib/formatters';\n    var Compiler = (function () {\n        function Compiler(options) {\n            this.arguments = [];\n            this.runtime = {};\n            this.options = options;\n        }\n        Compiler.prototype.compile = function (src, plural, plurals) {\n            var e_1, _a;\n            var _this = this;\n            var _b = this.options, localeCodeFromKey = _b.localeCodeFromKey, requireAllArguments = _b.requireAllArguments, strict = _b.strict, strictPluralKeys = _b.strictPluralKeys;\n            if (typeof src === 'object') {\n                var result = {};\n                try {\n                    for (var _c = __values(Object.keys(src)), _d = _c.next(); !_d.done; _d = _c.next()) {\n                        var key = _d.value;\n                        var lc = localeCodeFromKey ? localeCodeFromKey(key) : key;\n                        var pl = (plurals && lc && plurals[lc]) || plural;\n                        result[key] = this.compile(src[key], pl, plurals);\n                    }\n                }\n                catch (e_1_1) { e_1 = { error: e_1_1 }; }\n                finally {\n                    try {\n                        if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n                    }\n                    finally { if (e_1) throw e_1.error; }\n                }\n                return result;\n            }\n            this.plural = plural;\n            var parserOptions = {\n                cardinal: plural.cardinals,\n                ordinal: plural.ordinals,\n                strict: strict,\n                strictPluralKeys: strictPluralKeys\n            };\n            this.arguments = [];\n            var r = parse_1(src, parserOptions).map(function (token) { return _this.token(token, null); });\n            var hasArgs = this.arguments.length > 0;\n            var res = this.concatenate(r, true);\n            if (requireAllArguments && hasArgs) {\n                this.setRuntimeFn('reqArgs');\n                var reqArgs = JSON.stringify(this.arguments);\n                return \"(d) => { reqArgs(\".concat(reqArgs, \", d); return \").concat(res, \"; }\");\n            }\n            return \"(\".concat(hasArgs ? 'd' : '', \") => \").concat(res);\n        };\n        Compiler.prototype.cases = function (token, pluralToken) {\n            var _this = this;\n            var needOther = true;\n            var r = token.cases.map(function (_a) {\n                var key = _a.key, tokens = _a.tokens;\n                if (key === 'other')\n                    needOther = false;\n                var s = tokens.map(function (tok) { return _this.token(tok, pluralToken); });\n                return \"\".concat(property(null, key.replace(/^=/, '')), \": \").concat(_this.concatenate(s, false));\n            });\n            if (needOther) {\n                var type = token.type;\n                var _a = this.plural, cardinals = _a.cardinals, ordinals = _a.ordinals;\n                if (type === 'select' ||\n                    (type === 'plural' && cardinals.includes('other')) ||\n                    (type === 'selectordinal' && ordinals.includes('other')))\n                    throw new Error(\"No 'other' form found in \".concat(JSON.stringify(token)));\n            }\n            return \"{ \".concat(r.join(', '), \" }\");\n        };\n        Compiler.prototype.concatenate = function (tokens, root) {\n            var asValues = this.options.returnType === 'values';\n            return asValues && (root || tokens.length > 1)\n                ? '[' + tokens.join(', ') + ']'\n                : tokens.join(' + ') || '\"\"';\n        };\n        Compiler.prototype.token = function (token, pluralToken) {\n            if (token.type === 'content')\n                return JSON.stringify(token.value);\n            var _a = this.plural, id = _a.id, lc = _a.lc;\n            var args, fn;\n            if ('arg' in token) {\n                this.arguments.push(token.arg);\n                args = [property('d', token.arg)];\n            }\n            else\n                args = [];\n            switch (token.type) {\n                case 'argument':\n                    return this.options.biDiSupport\n                        ? biDiMarkText(String(args[0]), lc)\n                        : String(args[0]);\n                case 'select':\n                    fn = 'select';\n                    if (pluralToken && this.options.strict)\n                        pluralToken = null;\n                    args.push(this.cases(token, pluralToken));\n                    this.setRuntimeFn('select');\n                    break;\n                case 'selectordinal':\n                    fn = 'plural';\n                    args.push(token.pluralOffset || 0, id, this.cases(token, token), 1);\n                    this.setLocale(id, true);\n                    this.setRuntimeFn('plural');\n                    break;\n                case 'plural':\n                    fn = 'plural';\n                    args.push(token.pluralOffset || 0, id, this.cases(token, token));\n                    this.setLocale(id, false);\n                    this.setRuntimeFn('plural');\n                    break;\n                case 'function': {\n                    var formatter = this.options.customFormatters[token.key];\n                    var isModuleFn = formatter &&\n                        'module' in formatter &&\n                        typeof formatter.module === 'function';\n                    if (!formatter) {\n                        if (token.key === 'date') {\n                            fn = this.setDateFormatter(token, args, pluralToken);\n                            break;\n                        }\n                        else if (token.key === 'number') {\n                            fn = this.setNumberFormatter(token, args, pluralToken);\n                            break;\n                        }\n                    }\n                    args.push(JSON.stringify(this.plural.locale));\n                    if (token.param) {\n                        if (pluralToken && this.options.strict)\n                            pluralToken = null;\n                        var arg = this.getFormatterArg(token, pluralToken);\n                        if (arg)\n                            args.push(arg);\n                    }\n                    fn = isModuleFn\n                        ? identifier(\"\".concat(token.key, \"__\").concat(this.plural.locale))\n                        : token.key;\n                    this.setFormatter(fn, token.key);\n                    break;\n                }\n                case 'octothorpe':\n                    if (!pluralToken)\n                        return '\"#\"';\n                    args = [\n                        JSON.stringify(this.plural.locale),\n                        property('d', pluralToken.arg),\n                        pluralToken.pluralOffset || 0\n                    ];\n                    if (this.options.strict) {\n                        fn = 'strictNumber';\n                        args.push(JSON.stringify(pluralToken.arg));\n                        this.setRuntimeFn('strictNumber');\n                    }\n                    else {\n                        fn = 'number';\n                        this.setRuntimeFn('number');\n                    }\n                    break;\n            }\n            if (!fn)\n                throw new Error('Parser error for token ' + JSON.stringify(token));\n            return \"\".concat(fn, \"(\").concat(args.join(', '), \")\");\n        };\n        Compiler.prototype.runtimeIncludes = function (key, type) {\n            if (identifier(key) !== key)\n                throw new SyntaxError(\"Reserved word used as \".concat(type, \" identifier: \").concat(key));\n            var prev = this.runtime[key];\n            if (!prev || prev.type === type)\n                return prev;\n            throw new TypeError(\"Cannot override \".concat(prev.type, \" runtime function as \").concat(type, \": \").concat(key));\n        };\n        Compiler.prototype.setLocale = function (key, ord) {\n            var prev = this.runtimeIncludes(key, 'locale');\n            var _a = this.plural, getCardinal = _a.getCardinal, getPlural = _a.getPlural, isDefault = _a.isDefault;\n            var pf, module, toString;\n            if (!ord && isDefault && getCardinal) {\n                if (prev)\n                    return;\n                pf = function (n) { return getCardinal(n); };\n                module = CARDINAL_MODULE;\n                toString = function () { return String(getCardinal); };\n            }\n            else {\n                if (prev && (!isDefault || prev.module === PLURAL_MODULE))\n                    return;\n                pf = function (n, ord) { return getPlural(n, ord); };\n                module = isDefault ? PLURAL_MODULE : getPlural.module || null;\n                toString = function () { return String(getPlural); };\n            }\n            this.runtime[key] = Object.assign(pf, {\n                id: key,\n                module: module,\n                toString: toString,\n                type: 'locale'\n            });\n        };\n        Compiler.prototype.setRuntimeFn = function (key) {\n            if (this.runtimeIncludes(key, 'runtime'))\n                return;\n            this.runtime[key] = Object.assign(Runtime[key], {\n                id: key,\n                module: RUNTIME_MODULE,\n                type: 'runtime'\n            });\n        };\n        Compiler.prototype.getFormatterArg = function (_a, pluralToken) {\n            var e_2, _b, e_3, _c;\n            var _this = this;\n            var key = _a.key, param = _a.param;\n            var fmt = this.options.customFormatters[key] ||\n                (isFormatterKey(key) && Formatters[key]);\n            if (!fmt || !param)\n                return null;\n            var argShape = ('arg' in fmt && fmt.arg) || 'string';\n            if (argShape === 'options') {\n                var value = '';\n                try {\n                    for (var param_1 = __values(param), param_1_1 = param_1.next(); !param_1_1.done; param_1_1 = param_1.next()) {\n                        var tok = param_1_1.value;\n                        if (tok.type === 'content')\n                            value += tok.value;\n                        else\n                            throw new SyntaxError(\"Expected literal options for \".concat(key, \" formatter\"));\n                    }\n                }\n                catch (e_2_1) { e_2 = { error: e_2_1 }; }\n                finally {\n                    try {\n                        if (param_1_1 && !param_1_1.done && (_b = param_1.return)) _b.call(param_1);\n                    }\n                    finally { if (e_2) throw e_2.error; }\n                }\n                var options = {};\n                try {\n                    for (var _d = __values(value.split(',')), _e = _d.next(); !_e.done; _e = _d.next()) {\n                        var pair = _e.value;\n                        var keyEnd = pair.indexOf(':');\n                        if (keyEnd === -1)\n                            options[pair.trim()] = null;\n                        else {\n                            var k = pair.substring(0, keyEnd).trim();\n                            var v = pair.substring(keyEnd + 1).trim();\n                            if (v === 'true')\n                                options[k] = true;\n                            else if (v === 'false')\n                                options[k] = false;\n                            else if (v === 'null')\n                                options[k] = null;\n                            else {\n                                var n = Number(v);\n                                options[k] = Number.isFinite(n) ? n : v;\n                            }\n                        }\n                    }\n                }\n                catch (e_3_1) { e_3 = { error: e_3_1 }; }\n                finally {\n                    try {\n                        if (_e && !_e.done && (_c = _d.return)) _c.call(_d);\n                    }\n                    finally { if (e_3) throw e_3.error; }\n                }\n                return JSON.stringify(options);\n            }\n            else {\n                var parts = param.map(function (tok) { return _this.token(tok, pluralToken); });\n                if (argShape === 'raw')\n                    return \"[\".concat(parts.join(', '), \"]\");\n                var s = parts.join(' + ');\n                return s ? \"(\".concat(s, \").trim()\") : '\"\"';\n            }\n        };\n        Compiler.prototype.setFormatter = function (key, parentKey) {\n            if (this.runtimeIncludes(key, 'formatter'))\n                return;\n            var cf = this.options.customFormatters[parentKey || key];\n            if (cf) {\n                var cfo_1 = typeof cf === 'function' ? { formatter: cf } : cf;\n                this.runtime[key] = Object.assign(cfo_1.formatter.bind({}), __assign(__assign({}, cfo_1.formatter.prototype), { toString: function () { return String(cfo_1.formatter); } }), { type: 'formatter' }, 'module' in cf && cf.module && cf.id\n                    ? {\n                        id: identifier(cf.id),\n                        module: typeof cf.module === 'function'\n                            ? cf.module(this.plural.locale)\n                            : cf.module\n                    }\n                    : { id: null, module: null });\n            }\n            else if (isFormatterKey(key)) {\n                this.runtime[key] = Object.assign(Formatters[key], { type: 'formatter' }, { id: key, module: FORMATTER_MODULE });\n            }\n            else {\n                throw new Error(\"Formatting function not found: \".concat(key));\n            }\n        };\n        Compiler.prototype.setDateFormatter = function (_a, args, plural) {\n            var _this = this;\n            var param = _a.param;\n            var locale = this.plural.locale;\n            var argStyle = param && param.length === 1 && param[0];\n            if (argStyle &&\n                argStyle.type === 'content' &&\n                /^\\s*::/.test(argStyle.value)) {\n                var argSkeletonText_1 = argStyle.value.trim().substr(2);\n                var key = identifier(\"date_\".concat(locale, \"_\").concat(argSkeletonText_1), true);\n                if (!this.runtimeIncludes(key, 'formatter')) {\n                    var fmt = getDateFormatter(locale, argSkeletonText_1);\n                    this.runtime[key] = Object.assign(fmt, {\n                        id: key,\n                        module: null,\n                        toString: function () { return getDateFormatterSource(locale, argSkeletonText_1); },\n                        type: 'formatter'\n                    });\n                }\n                return key;\n            }\n            args.push(JSON.stringify(locale));\n            if (param && param.length > 0) {\n                if (plural && this.options.strict)\n                    plural = null;\n                var s = param.map(function (tok) { return _this.token(tok, plural); });\n                args.push('(' + (s.join(' + ') || '\"\"') + ').trim()');\n            }\n            this.setFormatter('date');\n            return 'date';\n        };\n        Compiler.prototype.setNumberFormatter = function (_a, args, plural) {\n            var _this = this;\n            var param = _a.param;\n            var locale = this.plural.locale;\n            if (!param || param.length === 0) {\n                args.unshift(JSON.stringify(locale));\n                args.push('0');\n                this.setRuntimeFn('number');\n                return 'number';\n            }\n            args.push(JSON.stringify(locale));\n            if (param.length === 1 && param[0].type === 'content') {\n                var fmtArg_1 = param[0].value.trim();\n                switch (fmtArg_1) {\n                    case 'currency':\n                        args.push(JSON.stringify(this.options.currency));\n                        this.setFormatter('numberCurrency');\n                        return 'numberCurrency';\n                    case 'integer':\n                        this.setFormatter('numberInteger');\n                        return 'numberInteger';\n                    case 'percent':\n                        this.setFormatter('numberPercent');\n                        return 'numberPercent';\n                }\n                var cm = fmtArg_1.match(/^currency:([A-Z]+)$/);\n                if (cm) {\n                    args.push(JSON.stringify(cm[1]));\n                    this.setFormatter('numberCurrency');\n                    return 'numberCurrency';\n                }\n                var key = identifier(\"number_\".concat(locale, \"_\").concat(fmtArg_1), true);\n                if (!this.runtimeIncludes(key, 'formatter')) {\n                    var currency_1 = this.options.currency;\n                    var fmt = getNumberFormatter(locale, fmtArg_1, currency_1);\n                    this.runtime[key] = Object.assign(fmt, {\n                        id: null,\n                        module: null,\n                        toString: function () { return getNumberFormatterSource(locale, fmtArg_1, currency_1); },\n                        type: 'formatter'\n                    });\n                }\n                return key;\n            }\n            if (plural && this.options.strict)\n                plural = null;\n            var s = param.map(function (tok) { return _this.token(tok, plural); });\n            args.push('(' + (s.join(' + ') || '\"\"') + ').trim()');\n            args.push(JSON.stringify(this.options.currency));\n            this.setFormatter('numberFmt');\n            return 'numberFmt';\n        };\n        return Compiler;\n    }());\n    function isFormatterKey(key) {\n        return key in Formatters;\n    }\n\n    const a$2 = n => n == 1 ? 'one' : 'other';\n    const b$2 = n => n == 0 || n == 1 ? 'one' : 'other';\n    const c$2 = n => n >= 0 && n <= 1 ? 'one' : 'other';\n    const d$2 = n => {\n      const s = String(n).split('.'),\n        v0 = !s[1];\n      return n == 1 && v0 ? 'one' : 'other';\n    };\n    const e$1 = n => 'other';\n    const f$2 = n => n == 1 ? 'one' : n == 2 ? 'two' : 'other';\n    const af$2 = a$2;\n    const ak$2 = b$2;\n    const am$2 = c$2;\n    const an$2 = a$2;\n    const ar$2 = n => {\n      const s = String(n).split('.'),\n        t0 = Number(s[0]) == n,\n        n100 = t0 && s[0].slice(-2);\n      return n == 0 ? 'zero' : n == 1 ? 'one' : n == 2 ? 'two' : n100 >= 3 && n100 <= 10 ? 'few' : n100 >= 11 && n100 <= 99 ? 'many' : 'other';\n    };\n    const ars$2 = n => {\n      const s = String(n).split('.'),\n        t0 = Number(s[0]) == n,\n        n100 = t0 && s[0].slice(-2);\n      return n == 0 ? 'zero' : n == 1 ? 'one' : n == 2 ? 'two' : n100 >= 3 && n100 <= 10 ? 'few' : n100 >= 11 && n100 <= 99 ? 'many' : 'other';\n    };\n    const as$2 = c$2;\n    const asa$2 = a$2;\n    const ast$2 = d$2;\n    const az$2 = a$2;\n    const bal$2 = a$2;\n    const be$2 = n => {\n      const s = String(n).split('.'),\n        t0 = Number(s[0]) == n,\n        n10 = t0 && s[0].slice(-1),\n        n100 = t0 && s[0].slice(-2);\n      return n10 == 1 && n100 != 11 ? 'one' : n10 >= 2 && n10 <= 4 && (n100 < 12 || n100 > 14) ? 'few' : t0 && n10 == 0 || n10 >= 5 && n10 <= 9 || n100 >= 11 && n100 <= 14 ? 'many' : 'other';\n    };\n    const bem$2 = a$2;\n    const bez$2 = a$2;\n    const bg$2 = a$2;\n    const bho$2 = b$2;\n    const bm$2 = e$1;\n    const bn$2 = c$2;\n    const bo$2 = e$1;\n    const br$2 = n => {\n      const s = String(n).split('.'),\n        t0 = Number(s[0]) == n,\n        n10 = t0 && s[0].slice(-1),\n        n100 = t0 && s[0].slice(-2),\n        n1000000 = t0 && s[0].slice(-6);\n      return n10 == 1 && n100 != 11 && n100 != 71 && n100 != 91 ? 'one' : n10 == 2 && n100 != 12 && n100 != 72 && n100 != 92 ? 'two' : (n10 == 3 || n10 == 4 || n10 == 9) && (n100 < 10 || n100 > 19) && (n100 < 70 || n100 > 79) && (n100 < 90 || n100 > 99) ? 'few' : n != 0 && t0 && n1000000 == 0 ? 'many' : 'other';\n    };\n    const brx$2 = a$2;\n    const bs$2 = n => {\n      const s = String(n).split('.'),\n        i = s[0],\n        f = s[1] || '',\n        v0 = !s[1],\n        i10 = i.slice(-1),\n        i100 = i.slice(-2),\n        f10 = f.slice(-1),\n        f100 = f.slice(-2);\n      return v0 && i10 == 1 && i100 != 11 || f10 == 1 && f100 != 11 ? 'one' : v0 && i10 >= 2 && i10 <= 4 && (i100 < 12 || i100 > 14) || f10 >= 2 && f10 <= 4 && (f100 < 12 || f100 > 14) ? 'few' : 'other';\n    };\n    const ca$2 = n => {\n      const s = String(n).split('.'),\n        i = s[0],\n        v0 = !s[1],\n        i1000000 = i.slice(-6);\n      return n == 1 && v0 ? 'one' : i != 0 && i1000000 == 0 && v0 ? 'many' : 'other';\n    };\n    const ce$2 = a$2;\n    const ceb$2 = n => {\n      const s = String(n).split('.'),\n        i = s[0],\n        f = s[1] || '',\n        v0 = !s[1],\n        i10 = i.slice(-1),\n        f10 = f.slice(-1);\n      return v0 && (i == 1 || i == 2 || i == 3) || v0 && i10 != 4 && i10 != 6 && i10 != 9 || !v0 && f10 != 4 && f10 != 6 && f10 != 9 ? 'one' : 'other';\n    };\n    const cgg$2 = a$2;\n    const chr$2 = a$2;\n    const ckb$2 = a$2;\n    const cs$2 = n => {\n      const s = String(n).split('.'),\n        i = s[0],\n        v0 = !s[1];\n      return n == 1 && v0 ? 'one' : i >= 2 && i <= 4 && v0 ? 'few' : !v0 ? 'many' : 'other';\n    };\n    const cy$2 = n => n == 0 ? 'zero' : n == 1 ? 'one' : n == 2 ? 'two' : n == 3 ? 'few' : n == 6 ? 'many' : 'other';\n    const da$2 = n => {\n      const s = String(n).split('.'),\n        i = s[0],\n        t0 = Number(s[0]) == n;\n      return n == 1 || !t0 && (i == 0 || i == 1) ? 'one' : 'other';\n    };\n    const de$2 = d$2;\n    const doi$2 = c$2;\n    const dsb$2 = n => {\n      const s = String(n).split('.'),\n        i = s[0],\n        f = s[1] || '',\n        v0 = !s[1],\n        i100 = i.slice(-2),\n        f100 = f.slice(-2);\n      return v0 && i100 == 1 || f100 == 1 ? 'one' : v0 && i100 == 2 || f100 == 2 ? 'two' : v0 && (i100 == 3 || i100 == 4) || f100 == 3 || f100 == 4 ? 'few' : 'other';\n    };\n    const dv$2 = a$2;\n    const dz$2 = e$1;\n    const ee$2 = a$2;\n    const el$2 = a$2;\n    const en$2 = d$2;\n    const eo$2 = a$2;\n    const es$2 = n => {\n      const s = String(n).split('.'),\n        i = s[0],\n        v0 = !s[1],\n        i1000000 = i.slice(-6);\n      return n == 1 ? 'one' : i != 0 && i1000000 == 0 && v0 ? 'many' : 'other';\n    };\n    const et$2 = d$2;\n    const eu$2 = a$2;\n    const fa$2 = c$2;\n    const ff$2 = n => n >= 0 && n < 2 ? 'one' : 'other';\n    const fi$2 = d$2;\n    const fil$2 = n => {\n      const s = String(n).split('.'),\n        i = s[0],\n        f = s[1] || '',\n        v0 = !s[1],\n        i10 = i.slice(-1),\n        f10 = f.slice(-1);\n      return v0 && (i == 1 || i == 2 || i == 3) || v0 && i10 != 4 && i10 != 6 && i10 != 9 || !v0 && f10 != 4 && f10 != 6 && f10 != 9 ? 'one' : 'other';\n    };\n    const fo$2 = a$2;\n    const fr$2 = n => {\n      const s = String(n).split('.'),\n        i = s[0],\n        v0 = !s[1],\n        i1000000 = i.slice(-6);\n      return n >= 0 && n < 2 ? 'one' : i != 0 && i1000000 == 0 && v0 ? 'many' : 'other';\n    };\n    const fur$2 = a$2;\n    const fy$2 = d$2;\n    const ga$2 = n => {\n      const s = String(n).split('.'),\n        t0 = Number(s[0]) == n;\n      return n == 1 ? 'one' : n == 2 ? 'two' : t0 && n >= 3 && n <= 6 ? 'few' : t0 && n >= 7 && n <= 10 ? 'many' : 'other';\n    };\n    const gd$2 = n => {\n      const s = String(n).split('.'),\n        t0 = Number(s[0]) == n;\n      return n == 1 || n == 11 ? 'one' : n == 2 || n == 12 ? 'two' : t0 && n >= 3 && n <= 10 || t0 && n >= 13 && n <= 19 ? 'few' : 'other';\n    };\n    const gl$2 = d$2;\n    const gsw$2 = a$2;\n    const gu$2 = c$2;\n    const guw$2 = b$2;\n    const gv$2 = n => {\n      const s = String(n).split('.'),\n        i = s[0],\n        v0 = !s[1],\n        i10 = i.slice(-1),\n        i100 = i.slice(-2);\n      return v0 && i10 == 1 ? 'one' : v0 && i10 == 2 ? 'two' : v0 && (i100 == 0 || i100 == 20 || i100 == 40 || i100 == 60 || i100 == 80) ? 'few' : !v0 ? 'many' : 'other';\n    };\n    const ha$2 = a$2;\n    const haw$2 = a$2;\n    const he$2 = n => {\n      const s = String(n).split('.'),\n        i = s[0],\n        v0 = !s[1];\n      return i == 1 && v0 || i == 0 && !v0 ? 'one' : i == 2 && v0 ? 'two' : 'other';\n    };\n    const hi$2 = c$2;\n    const hnj$2 = e$1;\n    const hr$2 = n => {\n      const s = String(n).split('.'),\n        i = s[0],\n        f = s[1] || '',\n        v0 = !s[1],\n        i10 = i.slice(-1),\n        i100 = i.slice(-2),\n        f10 = f.slice(-1),\n        f100 = f.slice(-2);\n      return v0 && i10 == 1 && i100 != 11 || f10 == 1 && f100 != 11 ? 'one' : v0 && i10 >= 2 && i10 <= 4 && (i100 < 12 || i100 > 14) || f10 >= 2 && f10 <= 4 && (f100 < 12 || f100 > 14) ? 'few' : 'other';\n    };\n    const hsb$2 = n => {\n      const s = String(n).split('.'),\n        i = s[0],\n        f = s[1] || '',\n        v0 = !s[1],\n        i100 = i.slice(-2),\n        f100 = f.slice(-2);\n      return v0 && i100 == 1 || f100 == 1 ? 'one' : v0 && i100 == 2 || f100 == 2 ? 'two' : v0 && (i100 == 3 || i100 == 4) || f100 == 3 || f100 == 4 ? 'few' : 'other';\n    };\n    const hu$2 = a$2;\n    const hy$2 = n => n >= 0 && n < 2 ? 'one' : 'other';\n    const ia$2 = d$2;\n    const id$2 = e$1;\n    const ig$2 = e$1;\n    const ii$2 = e$1;\n    const io$2 = d$2;\n    const is$2 = n => {\n      const s = String(n).split('.'),\n        i = s[0],\n        t = (s[1] || '').replace(/0+$/, ''),\n        t0 = Number(s[0]) == n,\n        i10 = i.slice(-1),\n        i100 = i.slice(-2);\n      return t0 && i10 == 1 && i100 != 11 || t % 10 == 1 && t % 100 != 11 ? 'one' : 'other';\n    };\n    const it$2 = n => {\n      const s = String(n).split('.'),\n        i = s[0],\n        v0 = !s[1],\n        i1000000 = i.slice(-6);\n      return n == 1 && v0 ? 'one' : i != 0 && i1000000 == 0 && v0 ? 'many' : 'other';\n    };\n    const iu$2 = f$2;\n    const ja$2 = e$1;\n    const jbo$2 = e$1;\n    const jgo$2 = a$2;\n    const jmc$2 = a$2;\n    const jv$2 = e$1;\n    const jw$2 = e$1;\n    const ka$2 = a$2;\n    const kab$2 = n => n >= 0 && n < 2 ? 'one' : 'other';\n    const kaj$2 = a$2;\n    const kcg$2 = a$2;\n    const kde$2 = e$1;\n    const kea$2 = e$1;\n    const kk$2 = a$2;\n    const kkj$2 = a$2;\n    const kl$2 = a$2;\n    const km$2 = e$1;\n    const kn$2 = c$2;\n    const ko$2 = e$1;\n    const ks$2 = a$2;\n    const ksb$2 = a$2;\n    const ksh$2 = n => n == 0 ? 'zero' : n == 1 ? 'one' : 'other';\n    const ku$2 = a$2;\n    const kw$2 = n => {\n      const s = String(n).split('.'),\n        t0 = Number(s[0]) == n,\n        n100 = t0 && s[0].slice(-2),\n        n1000 = t0 && s[0].slice(-3),\n        n100000 = t0 && s[0].slice(-5),\n        n1000000 = t0 && s[0].slice(-6);\n      return n == 0 ? 'zero' : n == 1 ? 'one' : n100 == 2 || n100 == 22 || n100 == 42 || n100 == 62 || n100 == 82 || t0 && n1000 == 0 && (n100000 >= 1000 && n100000 <= 20000 || n100000 == 40000 || n100000 == 60000 || n100000 == 80000) || n != 0 && n1000000 == 100000 ? 'two' : n100 == 3 || n100 == 23 || n100 == 43 || n100 == 63 || n100 == 83 ? 'few' : n != 1 && (n100 == 1 || n100 == 21 || n100 == 41 || n100 == 61 || n100 == 81) ? 'many' : 'other';\n    };\n    const ky$2 = a$2;\n    const lag$2 = n => {\n      const s = String(n).split('.'),\n        i = s[0];\n      return n == 0 ? 'zero' : (i == 0 || i == 1) && n != 0 ? 'one' : 'other';\n    };\n    const lb$2 = a$2;\n    const lg$2 = a$2;\n    const lij$2 = d$2;\n    const lkt$2 = e$1;\n    const ln$2 = b$2;\n    const lo$2 = e$1;\n    const lt$2 = n => {\n      const s = String(n).split('.'),\n        f = s[1] || '',\n        t0 = Number(s[0]) == n,\n        n10 = t0 && s[0].slice(-1),\n        n100 = t0 && s[0].slice(-2);\n      return n10 == 1 && (n100 < 11 || n100 > 19) ? 'one' : n10 >= 2 && n10 <= 9 && (n100 < 11 || n100 > 19) ? 'few' : f != 0 ? 'many' : 'other';\n    };\n    const lv$2 = n => {\n      const s = String(n).split('.'),\n        f = s[1] || '',\n        v = f.length,\n        t0 = Number(s[0]) == n,\n        n10 = t0 && s[0].slice(-1),\n        n100 = t0 && s[0].slice(-2),\n        f100 = f.slice(-2),\n        f10 = f.slice(-1);\n      return t0 && n10 == 0 || n100 >= 11 && n100 <= 19 || v == 2 && f100 >= 11 && f100 <= 19 ? 'zero' : n10 == 1 && n100 != 11 || v == 2 && f10 == 1 && f100 != 11 || v != 2 && f10 == 1 ? 'one' : 'other';\n    };\n    const mas$2 = a$2;\n    const mg$2 = b$2;\n    const mgo$2 = a$2;\n    const mk$2 = n => {\n      const s = String(n).split('.'),\n        i = s[0],\n        f = s[1] || '',\n        v0 = !s[1],\n        i10 = i.slice(-1),\n        i100 = i.slice(-2),\n        f10 = f.slice(-1),\n        f100 = f.slice(-2);\n      return v0 && i10 == 1 && i100 != 11 || f10 == 1 && f100 != 11 ? 'one' : 'other';\n    };\n    const ml$2 = a$2;\n    const mn$2 = a$2;\n    const mo$2 = n => {\n      const s = String(n).split('.'),\n        v0 = !s[1],\n        t0 = Number(s[0]) == n,\n        n100 = t0 && s[0].slice(-2);\n      return n == 1 && v0 ? 'one' : !v0 || n == 0 || n != 1 && n100 >= 1 && n100 <= 19 ? 'few' : 'other';\n    };\n    const mr$2 = a$2;\n    const ms$2 = e$1;\n    const mt$2 = n => {\n      const s = String(n).split('.'),\n        t0 = Number(s[0]) == n,\n        n100 = t0 && s[0].slice(-2);\n      return n == 1 ? 'one' : n == 2 ? 'two' : n == 0 || n100 >= 3 && n100 <= 10 ? 'few' : n100 >= 11 && n100 <= 19 ? 'many' : 'other';\n    };\n    const my$2 = e$1;\n    const nah$2 = a$2;\n    const naq$2 = f$2;\n    const nb$2 = a$2;\n    const nd$2 = a$2;\n    const ne$2 = a$2;\n    const nl$2 = d$2;\n    const nn$2 = a$2;\n    const nnh$2 = a$2;\n    const no$2 = a$2;\n    const nqo$2 = e$1;\n    const nr$2 = a$2;\n    const nso$2 = b$2;\n    const ny$2 = a$2;\n    const nyn$2 = a$2;\n    const om$2 = a$2;\n    const or$2 = a$2;\n    const os$2 = a$2;\n    const osa$2 = e$1;\n    const pa$2 = b$2;\n    const pap$2 = a$2;\n    const pcm$2 = c$2;\n    const pl$2 = n => {\n      const s = String(n).split('.'),\n        i = s[0],\n        v0 = !s[1],\n        i10 = i.slice(-1),\n        i100 = i.slice(-2);\n      return n == 1 && v0 ? 'one' : v0 && i10 >= 2 && i10 <= 4 && (i100 < 12 || i100 > 14) ? 'few' : v0 && i != 1 && (i10 == 0 || i10 == 1) || v0 && i10 >= 5 && i10 <= 9 || v0 && i100 >= 12 && i100 <= 14 ? 'many' : 'other';\n    };\n    const prg$2 = n => {\n      const s = String(n).split('.'),\n        f = s[1] || '',\n        v = f.length,\n        t0 = Number(s[0]) == n,\n        n10 = t0 && s[0].slice(-1),\n        n100 = t0 && s[0].slice(-2),\n        f100 = f.slice(-2),\n        f10 = f.slice(-1);\n      return t0 && n10 == 0 || n100 >= 11 && n100 <= 19 || v == 2 && f100 >= 11 && f100 <= 19 ? 'zero' : n10 == 1 && n100 != 11 || v == 2 && f10 == 1 && f100 != 11 || v != 2 && f10 == 1 ? 'one' : 'other';\n    };\n    const ps$2 = a$2;\n    const pt$2 = n => {\n      const s = String(n).split('.'),\n        i = s[0],\n        v0 = !s[1],\n        i1000000 = i.slice(-6);\n      return i == 0 || i == 1 ? 'one' : i != 0 && i1000000 == 0 && v0 ? 'many' : 'other';\n    };\n    const pt_PT$2 = n => {\n      const s = String(n).split('.'),\n        i = s[0],\n        v0 = !s[1],\n        i1000000 = i.slice(-6);\n      return n == 1 && v0 ? 'one' : i != 0 && i1000000 == 0 && v0 ? 'many' : 'other';\n    };\n    const rm$2 = a$2;\n    const ro$2 = n => {\n      const s = String(n).split('.'),\n        v0 = !s[1],\n        t0 = Number(s[0]) == n,\n        n100 = t0 && s[0].slice(-2);\n      return n == 1 && v0 ? 'one' : !v0 || n == 0 || n != 1 && n100 >= 1 && n100 <= 19 ? 'few' : 'other';\n    };\n    const rof$2 = a$2;\n    const ru$2 = n => {\n      const s = String(n).split('.'),\n        i = s[0],\n        v0 = !s[1],\n        i10 = i.slice(-1),\n        i100 = i.slice(-2);\n      return v0 && i10 == 1 && i100 != 11 ? 'one' : v0 && i10 >= 2 && i10 <= 4 && (i100 < 12 || i100 > 14) ? 'few' : v0 && i10 == 0 || v0 && i10 >= 5 && i10 <= 9 || v0 && i100 >= 11 && i100 <= 14 ? 'many' : 'other';\n    };\n    const rwk$2 = a$2;\n    const sah$2 = e$1;\n    const saq$2 = a$2;\n    const sat$2 = f$2;\n    const sc$2 = d$2;\n    const scn$2 = d$2;\n    const sd$2 = a$2;\n    const sdh$2 = a$2;\n    const se$2 = f$2;\n    const seh$2 = a$2;\n    const ses$2 = e$1;\n    const sg$2 = e$1;\n    const sh$2 = n => {\n      const s = String(n).split('.'),\n        i = s[0],\n        f = s[1] || '',\n        v0 = !s[1],\n        i10 = i.slice(-1),\n        i100 = i.slice(-2),\n        f10 = f.slice(-1),\n        f100 = f.slice(-2);\n      return v0 && i10 == 1 && i100 != 11 || f10 == 1 && f100 != 11 ? 'one' : v0 && i10 >= 2 && i10 <= 4 && (i100 < 12 || i100 > 14) || f10 >= 2 && f10 <= 4 && (f100 < 12 || f100 > 14) ? 'few' : 'other';\n    };\n    const shi$2 = n => {\n      const s = String(n).split('.'),\n        t0 = Number(s[0]) == n;\n      return n >= 0 && n <= 1 ? 'one' : t0 && n >= 2 && n <= 10 ? 'few' : 'other';\n    };\n    const si$2 = n => {\n      const s = String(n).split('.'),\n        i = s[0],\n        f = s[1] || '';\n      return n == 0 || n == 1 || i == 0 && f == 1 ? 'one' : 'other';\n    };\n    const sk$2 = n => {\n      const s = String(n).split('.'),\n        i = s[0],\n        v0 = !s[1];\n      return n == 1 && v0 ? 'one' : i >= 2 && i <= 4 && v0 ? 'few' : !v0 ? 'many' : 'other';\n    };\n    const sl$2 = n => {\n      const s = String(n).split('.'),\n        i = s[0],\n        v0 = !s[1],\n        i100 = i.slice(-2);\n      return v0 && i100 == 1 ? 'one' : v0 && i100 == 2 ? 'two' : v0 && (i100 == 3 || i100 == 4) || !v0 ? 'few' : 'other';\n    };\n    const sma$2 = f$2;\n    const smi$2 = f$2;\n    const smj$2 = f$2;\n    const smn$2 = f$2;\n    const sms$2 = f$2;\n    const sn$2 = a$2;\n    const so$2 = a$2;\n    const sq$2 = a$2;\n    const sr$2 = n => {\n      const s = String(n).split('.'),\n        i = s[0],\n        f = s[1] || '',\n        v0 = !s[1],\n        i10 = i.slice(-1),\n        i100 = i.slice(-2),\n        f10 = f.slice(-1),\n        f100 = f.slice(-2);\n      return v0 && i10 == 1 && i100 != 11 || f10 == 1 && f100 != 11 ? 'one' : v0 && i10 >= 2 && i10 <= 4 && (i100 < 12 || i100 > 14) || f10 >= 2 && f10 <= 4 && (f100 < 12 || f100 > 14) ? 'few' : 'other';\n    };\n    const ss$2 = a$2;\n    const ssy$2 = a$2;\n    const st$2 = a$2;\n    const su$2 = e$1;\n    const sv$2 = d$2;\n    const sw$2 = d$2;\n    const syr$2 = a$2;\n    const ta$2 = a$2;\n    const te$2 = a$2;\n    const teo$2 = a$2;\n    const th$2 = e$1;\n    const ti$2 = b$2;\n    const tig$2 = a$2;\n    const tk$2 = a$2;\n    const tl$2 = n => {\n      const s = String(n).split('.'),\n        i = s[0],\n        f = s[1] || '',\n        v0 = !s[1],\n        i10 = i.slice(-1),\n        f10 = f.slice(-1);\n      return v0 && (i == 1 || i == 2 || i == 3) || v0 && i10 != 4 && i10 != 6 && i10 != 9 || !v0 && f10 != 4 && f10 != 6 && f10 != 9 ? 'one' : 'other';\n    };\n    const tn$2 = a$2;\n    const to$2 = e$1;\n    const tpi$2 = e$1;\n    const tr$2 = a$2;\n    const ts$2 = a$2;\n    const tzm$2 = n => {\n      const s = String(n).split('.'),\n        t0 = Number(s[0]) == n;\n      return n == 0 || n == 1 || t0 && n >= 11 && n <= 99 ? 'one' : 'other';\n    };\n    const ug$2 = a$2;\n    const uk$2 = n => {\n      const s = String(n).split('.'),\n        i = s[0],\n        v0 = !s[1],\n        i10 = i.slice(-1),\n        i100 = i.slice(-2);\n      return v0 && i10 == 1 && i100 != 11 ? 'one' : v0 && i10 >= 2 && i10 <= 4 && (i100 < 12 || i100 > 14) ? 'few' : v0 && i10 == 0 || v0 && i10 >= 5 && i10 <= 9 || v0 && i100 >= 11 && i100 <= 14 ? 'many' : 'other';\n    };\n    const und$2 = e$1;\n    const ur$2 = d$2;\n    const uz$2 = a$2;\n    const ve$2 = a$2;\n    const vec$2 = n => {\n      const s = String(n).split('.'),\n        i = s[0],\n        v0 = !s[1],\n        i1000000 = i.slice(-6);\n      return n == 1 && v0 ? 'one' : i != 0 && i1000000 == 0 && v0 ? 'many' : 'other';\n    };\n    const vi$2 = e$1;\n    const vo$2 = a$2;\n    const vun$2 = a$2;\n    const wa$2 = b$2;\n    const wae$2 = a$2;\n    const wo$2 = e$1;\n    const xh$2 = a$2;\n    const xog$2 = a$2;\n    const yi$2 = d$2;\n    const yo$2 = e$1;\n    const yue$2 = e$1;\n    const zh$2 = e$1;\n    const zu$2 = c$2;\n\n    var Cardinals = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        af: af$2,\n        ak: ak$2,\n        am: am$2,\n        an: an$2,\n        ar: ar$2,\n        ars: ars$2,\n        as: as$2,\n        asa: asa$2,\n        ast: ast$2,\n        az: az$2,\n        bal: bal$2,\n        be: be$2,\n        bem: bem$2,\n        bez: bez$2,\n        bg: bg$2,\n        bho: bho$2,\n        bm: bm$2,\n        bn: bn$2,\n        bo: bo$2,\n        br: br$2,\n        brx: brx$2,\n        bs: bs$2,\n        ca: ca$2,\n        ce: ce$2,\n        ceb: ceb$2,\n        cgg: cgg$2,\n        chr: chr$2,\n        ckb: ckb$2,\n        cs: cs$2,\n        cy: cy$2,\n        da: da$2,\n        de: de$2,\n        doi: doi$2,\n        dsb: dsb$2,\n        dv: dv$2,\n        dz: dz$2,\n        ee: ee$2,\n        el: el$2,\n        en: en$2,\n        eo: eo$2,\n        es: es$2,\n        et: et$2,\n        eu: eu$2,\n        fa: fa$2,\n        ff: ff$2,\n        fi: fi$2,\n        fil: fil$2,\n        fo: fo$2,\n        fr: fr$2,\n        fur: fur$2,\n        fy: fy$2,\n        ga: ga$2,\n        gd: gd$2,\n        gl: gl$2,\n        gsw: gsw$2,\n        gu: gu$2,\n        guw: guw$2,\n        gv: gv$2,\n        ha: ha$2,\n        haw: haw$2,\n        he: he$2,\n        hi: hi$2,\n        hnj: hnj$2,\n        hr: hr$2,\n        hsb: hsb$2,\n        hu: hu$2,\n        hy: hy$2,\n        ia: ia$2,\n        id: id$2,\n        ig: ig$2,\n        ii: ii$2,\n        io: io$2,\n        is: is$2,\n        it: it$2,\n        iu: iu$2,\n        ja: ja$2,\n        jbo: jbo$2,\n        jgo: jgo$2,\n        jmc: jmc$2,\n        jv: jv$2,\n        jw: jw$2,\n        ka: ka$2,\n        kab: kab$2,\n        kaj: kaj$2,\n        kcg: kcg$2,\n        kde: kde$2,\n        kea: kea$2,\n        kk: kk$2,\n        kkj: kkj$2,\n        kl: kl$2,\n        km: km$2,\n        kn: kn$2,\n        ko: ko$2,\n        ks: ks$2,\n        ksb: ksb$2,\n        ksh: ksh$2,\n        ku: ku$2,\n        kw: kw$2,\n        ky: ky$2,\n        lag: lag$2,\n        lb: lb$2,\n        lg: lg$2,\n        lij: lij$2,\n        lkt: lkt$2,\n        ln: ln$2,\n        lo: lo$2,\n        lt: lt$2,\n        lv: lv$2,\n        mas: mas$2,\n        mg: mg$2,\n        mgo: mgo$2,\n        mk: mk$2,\n        ml: ml$2,\n        mn: mn$2,\n        mo: mo$2,\n        mr: mr$2,\n        ms: ms$2,\n        mt: mt$2,\n        my: my$2,\n        nah: nah$2,\n        naq: naq$2,\n        nb: nb$2,\n        nd: nd$2,\n        ne: ne$2,\n        nl: nl$2,\n        nn: nn$2,\n        nnh: nnh$2,\n        no: no$2,\n        nqo: nqo$2,\n        nr: nr$2,\n        nso: nso$2,\n        ny: ny$2,\n        nyn: nyn$2,\n        om: om$2,\n        or: or$2,\n        os: os$2,\n        osa: osa$2,\n        pa: pa$2,\n        pap: pap$2,\n        pcm: pcm$2,\n        pl: pl$2,\n        prg: prg$2,\n        ps: ps$2,\n        pt: pt$2,\n        pt_PT: pt_PT$2,\n        rm: rm$2,\n        ro: ro$2,\n        rof: rof$2,\n        ru: ru$2,\n        rwk: rwk$2,\n        sah: sah$2,\n        saq: saq$2,\n        sat: sat$2,\n        sc: sc$2,\n        scn: scn$2,\n        sd: sd$2,\n        sdh: sdh$2,\n        se: se$2,\n        seh: seh$2,\n        ses: ses$2,\n        sg: sg$2,\n        sh: sh$2,\n        shi: shi$2,\n        si: si$2,\n        sk: sk$2,\n        sl: sl$2,\n        sma: sma$2,\n        smi: smi$2,\n        smj: smj$2,\n        smn: smn$2,\n        sms: sms$2,\n        sn: sn$2,\n        so: so$2,\n        sq: sq$2,\n        sr: sr$2,\n        ss: ss$2,\n        ssy: ssy$2,\n        st: st$2,\n        su: su$2,\n        sv: sv$2,\n        sw: sw$2,\n        syr: syr$2,\n        ta: ta$2,\n        te: te$2,\n        teo: teo$2,\n        th: th$2,\n        ti: ti$2,\n        tig: tig$2,\n        tk: tk$2,\n        tl: tl$2,\n        tn: tn$2,\n        to: to$2,\n        tpi: tpi$2,\n        tr: tr$2,\n        ts: ts$2,\n        tzm: tzm$2,\n        ug: ug$2,\n        uk: uk$2,\n        und: und$2,\n        ur: ur$2,\n        uz: uz$2,\n        ve: ve$2,\n        vec: vec$2,\n        vi: vi$2,\n        vo: vo$2,\n        vun: vun$2,\n        wa: wa$2,\n        wae: wae$2,\n        wo: wo$2,\n        xh: xh$2,\n        xog: xog$2,\n        yi: yi$2,\n        yo: yo$2,\n        yue: yue$2,\n        zh: zh$2,\n        zu: zu$2\n    });\n\n    const z = \"zero\",\n      o = \"one\",\n      t = \"two\",\n      f$1 = \"few\",\n      m = \"many\",\n      x = \"other\";\n    const a$1 = {\n      cardinal: [o, x],\n      ordinal: [x]\n    };\n    const b$1 = {\n      cardinal: [o, x],\n      ordinal: [o, x]\n    };\n    const c$1 = {\n      cardinal: [x],\n      ordinal: [x]\n    };\n    const d$1 = {\n      cardinal: [o, t, x],\n      ordinal: [x]\n    };\n    const af$1 = a$1;\n    const ak$1 = a$1;\n    const am$1 = a$1;\n    const an$1 = a$1;\n    const ar$1 = {\n      cardinal: [z, o, t, f$1, m, x],\n      ordinal: [x]\n    };\n    const ars$1 = {\n      cardinal: [z, o, t, f$1, m, x],\n      ordinal: [x]\n    };\n    const as$1 = {\n      cardinal: [o, x],\n      ordinal: [o, t, f$1, m, x]\n    };\n    const asa$1 = a$1;\n    const ast$1 = a$1;\n    const az$1 = {\n      cardinal: [o, x],\n      ordinal: [o, f$1, m, x]\n    };\n    const bal$1 = b$1;\n    const be$1 = {\n      cardinal: [o, f$1, m, x],\n      ordinal: [f$1, x]\n    };\n    const bem$1 = a$1;\n    const bez$1 = a$1;\n    const bg$1 = a$1;\n    const bho$1 = a$1;\n    const bm$1 = c$1;\n    const bn$1 = {\n      cardinal: [o, x],\n      ordinal: [o, t, f$1, m, x]\n    };\n    const bo$1 = c$1;\n    const br$1 = {\n      cardinal: [o, t, f$1, m, x],\n      ordinal: [x]\n    };\n    const brx$1 = a$1;\n    const bs$1 = {\n      cardinal: [o, f$1, x],\n      ordinal: [x]\n    };\n    const ca$1 = {\n      cardinal: [o, m, x],\n      ordinal: [o, t, f$1, x]\n    };\n    const ce$1 = a$1;\n    const ceb$1 = a$1;\n    const cgg$1 = a$1;\n    const chr$1 = a$1;\n    const ckb$1 = a$1;\n    const cs$1 = {\n      cardinal: [o, f$1, m, x],\n      ordinal: [x]\n    };\n    const cy$1 = {\n      cardinal: [z, o, t, f$1, m, x],\n      ordinal: [z, o, t, f$1, m, x]\n    };\n    const da$1 = a$1;\n    const de$1 = a$1;\n    const doi$1 = a$1;\n    const dsb$1 = {\n      cardinal: [o, t, f$1, x],\n      ordinal: [x]\n    };\n    const dv$1 = a$1;\n    const dz$1 = c$1;\n    const ee$1 = a$1;\n    const el$1 = a$1;\n    const en$1 = {\n      cardinal: [o, x],\n      ordinal: [o, t, f$1, x]\n    };\n    const eo$1 = a$1;\n    const es$1 = {\n      cardinal: [o, m, x],\n      ordinal: [x]\n    };\n    const et$1 = a$1;\n    const eu$1 = a$1;\n    const fa$1 = a$1;\n    const ff$1 = a$1;\n    const fi$1 = a$1;\n    const fil$1 = b$1;\n    const fo$1 = a$1;\n    const fr$1 = {\n      cardinal: [o, m, x],\n      ordinal: [o, x]\n    };\n    const fur$1 = a$1;\n    const fy$1 = a$1;\n    const ga$1 = {\n      cardinal: [o, t, f$1, m, x],\n      ordinal: [o, x]\n    };\n    const gd$1 = {\n      cardinal: [o, t, f$1, x],\n      ordinal: [o, t, f$1, x]\n    };\n    const gl$1 = a$1;\n    const gsw$1 = a$1;\n    const gu$1 = {\n      cardinal: [o, x],\n      ordinal: [o, t, f$1, m, x]\n    };\n    const guw$1 = a$1;\n    const gv$1 = {\n      cardinal: [o, t, f$1, m, x],\n      ordinal: [x]\n    };\n    const ha$1 = a$1;\n    const haw$1 = a$1;\n    const he$1 = d$1;\n    const hi$1 = {\n      cardinal: [o, x],\n      ordinal: [o, t, f$1, m, x]\n    };\n    const hnj$1 = c$1;\n    const hr$1 = {\n      cardinal: [o, f$1, x],\n      ordinal: [x]\n    };\n    const hsb$1 = {\n      cardinal: [o, t, f$1, x],\n      ordinal: [x]\n    };\n    const hu$1 = b$1;\n    const hy$1 = b$1;\n    const ia$1 = a$1;\n    const id$1 = c$1;\n    const ig$1 = c$1;\n    const ii$1 = c$1;\n    const io$1 = a$1;\n    const is$1 = a$1;\n    const it$1 = {\n      cardinal: [o, m, x],\n      ordinal: [m, x]\n    };\n    const iu$1 = d$1;\n    const ja$1 = c$1;\n    const jbo$1 = c$1;\n    const jgo$1 = a$1;\n    const jmc$1 = a$1;\n    const jv$1 = c$1;\n    const jw$1 = c$1;\n    const ka$1 = {\n      cardinal: [o, x],\n      ordinal: [o, m, x]\n    };\n    const kab$1 = a$1;\n    const kaj$1 = a$1;\n    const kcg$1 = a$1;\n    const kde$1 = c$1;\n    const kea$1 = c$1;\n    const kk$1 = {\n      cardinal: [o, x],\n      ordinal: [m, x]\n    };\n    const kkj$1 = a$1;\n    const kl$1 = a$1;\n    const km$1 = c$1;\n    const kn$1 = a$1;\n    const ko$1 = c$1;\n    const ks$1 = a$1;\n    const ksb$1 = a$1;\n    const ksh$1 = {\n      cardinal: [z, o, x],\n      ordinal: [x]\n    };\n    const ku$1 = a$1;\n    const kw$1 = {\n      cardinal: [z, o, t, f$1, m, x],\n      ordinal: [o, m, x]\n    };\n    const ky$1 = a$1;\n    const lag$1 = {\n      cardinal: [z, o, x],\n      ordinal: [x]\n    };\n    const lb$1 = a$1;\n    const lg$1 = a$1;\n    const lij$1 = {\n      cardinal: [o, x],\n      ordinal: [m, x]\n    };\n    const lkt$1 = c$1;\n    const ln$1 = a$1;\n    const lo$1 = {\n      cardinal: [x],\n      ordinal: [o, x]\n    };\n    const lt$1 = {\n      cardinal: [o, f$1, m, x],\n      ordinal: [x]\n    };\n    const lv$1 = {\n      cardinal: [z, o, x],\n      ordinal: [x]\n    };\n    const mas$1 = a$1;\n    const mg$1 = a$1;\n    const mgo$1 = a$1;\n    const mk$1 = {\n      cardinal: [o, x],\n      ordinal: [o, t, m, x]\n    };\n    const ml$1 = a$1;\n    const mn$1 = a$1;\n    const mo$1 = {\n      cardinal: [o, f$1, x],\n      ordinal: [o, x]\n    };\n    const mr$1 = {\n      cardinal: [o, x],\n      ordinal: [o, t, f$1, x]\n    };\n    const ms$1 = {\n      cardinal: [x],\n      ordinal: [o, x]\n    };\n    const mt$1 = {\n      cardinal: [o, t, f$1, m, x],\n      ordinal: [x]\n    };\n    const my$1 = c$1;\n    const nah$1 = a$1;\n    const naq$1 = d$1;\n    const nb$1 = a$1;\n    const nd$1 = a$1;\n    const ne$1 = b$1;\n    const nl$1 = a$1;\n    const nn$1 = a$1;\n    const nnh$1 = a$1;\n    const no$1 = a$1;\n    const nqo$1 = c$1;\n    const nr$1 = a$1;\n    const nso$1 = a$1;\n    const ny$1 = a$1;\n    const nyn$1 = a$1;\n    const om$1 = a$1;\n    const or$1 = {\n      cardinal: [o, x],\n      ordinal: [o, t, f$1, m, x]\n    };\n    const os$1 = a$1;\n    const osa$1 = c$1;\n    const pa$1 = a$1;\n    const pap$1 = a$1;\n    const pcm$1 = a$1;\n    const pl$1 = {\n      cardinal: [o, f$1, m, x],\n      ordinal: [x]\n    };\n    const prg$1 = {\n      cardinal: [z, o, x],\n      ordinal: [x]\n    };\n    const ps$1 = a$1;\n    const pt$1 = {\n      cardinal: [o, m, x],\n      ordinal: [x]\n    };\n    const pt_PT$1 = {\n      cardinal: [o, m, x],\n      ordinal: [x]\n    };\n    const rm$1 = a$1;\n    const ro$1 = {\n      cardinal: [o, f$1, x],\n      ordinal: [o, x]\n    };\n    const rof$1 = a$1;\n    const ru$1 = {\n      cardinal: [o, f$1, m, x],\n      ordinal: [x]\n    };\n    const rwk$1 = a$1;\n    const sah$1 = c$1;\n    const saq$1 = a$1;\n    const sat$1 = d$1;\n    const sc$1 = {\n      cardinal: [o, x],\n      ordinal: [m, x]\n    };\n    const scn$1 = {\n      cardinal: [o, x],\n      ordinal: [m, x]\n    };\n    const sd$1 = a$1;\n    const sdh$1 = a$1;\n    const se$1 = d$1;\n    const seh$1 = a$1;\n    const ses$1 = c$1;\n    const sg$1 = c$1;\n    const sh$1 = {\n      cardinal: [o, f$1, x],\n      ordinal: [x]\n    };\n    const shi$1 = {\n      cardinal: [o, f$1, x],\n      ordinal: [x]\n    };\n    const si$1 = a$1;\n    const sk$1 = {\n      cardinal: [o, f$1, m, x],\n      ordinal: [x]\n    };\n    const sl$1 = {\n      cardinal: [o, t, f$1, x],\n      ordinal: [x]\n    };\n    const sma$1 = d$1;\n    const smi$1 = d$1;\n    const smj$1 = d$1;\n    const smn$1 = d$1;\n    const sms$1 = d$1;\n    const sn$1 = a$1;\n    const so$1 = a$1;\n    const sq$1 = {\n      cardinal: [o, x],\n      ordinal: [o, m, x]\n    };\n    const sr$1 = {\n      cardinal: [o, f$1, x],\n      ordinal: [x]\n    };\n    const ss$1 = a$1;\n    const ssy$1 = a$1;\n    const st$1 = a$1;\n    const su$1 = c$1;\n    const sv$1 = b$1;\n    const sw$1 = a$1;\n    const syr$1 = a$1;\n    const ta$1 = a$1;\n    const te$1 = a$1;\n    const teo$1 = a$1;\n    const th$1 = c$1;\n    const ti$1 = a$1;\n    const tig$1 = a$1;\n    const tk$1 = {\n      cardinal: [o, x],\n      ordinal: [f$1, x]\n    };\n    const tl$1 = b$1;\n    const tn$1 = a$1;\n    const to$1 = c$1;\n    const tpi$1 = c$1;\n    const tr$1 = a$1;\n    const ts$1 = a$1;\n    const tzm$1 = a$1;\n    const ug$1 = a$1;\n    const uk$1 = {\n      cardinal: [o, f$1, m, x],\n      ordinal: [f$1, x]\n    };\n    const und$1 = c$1;\n    const ur$1 = a$1;\n    const uz$1 = a$1;\n    const ve$1 = a$1;\n    const vec$1 = {\n      cardinal: [o, m, x],\n      ordinal: [m, x]\n    };\n    const vi$1 = {\n      cardinal: [x],\n      ordinal: [o, x]\n    };\n    const vo$1 = a$1;\n    const vun$1 = a$1;\n    const wa$1 = a$1;\n    const wae$1 = a$1;\n    const wo$1 = c$1;\n    const xh$1 = a$1;\n    const xog$1 = a$1;\n    const yi$1 = a$1;\n    const yo$1 = c$1;\n    const yue$1 = c$1;\n    const zh$1 = c$1;\n    const zu$1 = a$1;\n\n    var PluralCategories = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        af: af$1,\n        ak: ak$1,\n        am: am$1,\n        an: an$1,\n        ar: ar$1,\n        ars: ars$1,\n        as: as$1,\n        asa: asa$1,\n        ast: ast$1,\n        az: az$1,\n        bal: bal$1,\n        be: be$1,\n        bem: bem$1,\n        bez: bez$1,\n        bg: bg$1,\n        bho: bho$1,\n        bm: bm$1,\n        bn: bn$1,\n        bo: bo$1,\n        br: br$1,\n        brx: brx$1,\n        bs: bs$1,\n        ca: ca$1,\n        ce: ce$1,\n        ceb: ceb$1,\n        cgg: cgg$1,\n        chr: chr$1,\n        ckb: ckb$1,\n        cs: cs$1,\n        cy: cy$1,\n        da: da$1,\n        de: de$1,\n        doi: doi$1,\n        dsb: dsb$1,\n        dv: dv$1,\n        dz: dz$1,\n        ee: ee$1,\n        el: el$1,\n        en: en$1,\n        eo: eo$1,\n        es: es$1,\n        et: et$1,\n        eu: eu$1,\n        fa: fa$1,\n        ff: ff$1,\n        fi: fi$1,\n        fil: fil$1,\n        fo: fo$1,\n        fr: fr$1,\n        fur: fur$1,\n        fy: fy$1,\n        ga: ga$1,\n        gd: gd$1,\n        gl: gl$1,\n        gsw: gsw$1,\n        gu: gu$1,\n        guw: guw$1,\n        gv: gv$1,\n        ha: ha$1,\n        haw: haw$1,\n        he: he$1,\n        hi: hi$1,\n        hnj: hnj$1,\n        hr: hr$1,\n        hsb: hsb$1,\n        hu: hu$1,\n        hy: hy$1,\n        ia: ia$1,\n        id: id$1,\n        ig: ig$1,\n        ii: ii$1,\n        io: io$1,\n        is: is$1,\n        it: it$1,\n        iu: iu$1,\n        ja: ja$1,\n        jbo: jbo$1,\n        jgo: jgo$1,\n        jmc: jmc$1,\n        jv: jv$1,\n        jw: jw$1,\n        ka: ka$1,\n        kab: kab$1,\n        kaj: kaj$1,\n        kcg: kcg$1,\n        kde: kde$1,\n        kea: kea$1,\n        kk: kk$1,\n        kkj: kkj$1,\n        kl: kl$1,\n        km: km$1,\n        kn: kn$1,\n        ko: ko$1,\n        ks: ks$1,\n        ksb: ksb$1,\n        ksh: ksh$1,\n        ku: ku$1,\n        kw: kw$1,\n        ky: ky$1,\n        lag: lag$1,\n        lb: lb$1,\n        lg: lg$1,\n        lij: lij$1,\n        lkt: lkt$1,\n        ln: ln$1,\n        lo: lo$1,\n        lt: lt$1,\n        lv: lv$1,\n        mas: mas$1,\n        mg: mg$1,\n        mgo: mgo$1,\n        mk: mk$1,\n        ml: ml$1,\n        mn: mn$1,\n        mo: mo$1,\n        mr: mr$1,\n        ms: ms$1,\n        mt: mt$1,\n        my: my$1,\n        nah: nah$1,\n        naq: naq$1,\n        nb: nb$1,\n        nd: nd$1,\n        ne: ne$1,\n        nl: nl$1,\n        nn: nn$1,\n        nnh: nnh$1,\n        no: no$1,\n        nqo: nqo$1,\n        nr: nr$1,\n        nso: nso$1,\n        ny: ny$1,\n        nyn: nyn$1,\n        om: om$1,\n        or: or$1,\n        os: os$1,\n        osa: osa$1,\n        pa: pa$1,\n        pap: pap$1,\n        pcm: pcm$1,\n        pl: pl$1,\n        prg: prg$1,\n        ps: ps$1,\n        pt: pt$1,\n        pt_PT: pt_PT$1,\n        rm: rm$1,\n        ro: ro$1,\n        rof: rof$1,\n        ru: ru$1,\n        rwk: rwk$1,\n        sah: sah$1,\n        saq: saq$1,\n        sat: sat$1,\n        sc: sc$1,\n        scn: scn$1,\n        sd: sd$1,\n        sdh: sdh$1,\n        se: se$1,\n        seh: seh$1,\n        ses: ses$1,\n        sg: sg$1,\n        sh: sh$1,\n        shi: shi$1,\n        si: si$1,\n        sk: sk$1,\n        sl: sl$1,\n        sma: sma$1,\n        smi: smi$1,\n        smj: smj$1,\n        smn: smn$1,\n        sms: sms$1,\n        sn: sn$1,\n        so: so$1,\n        sq: sq$1,\n        sr: sr$1,\n        ss: ss$1,\n        ssy: ssy$1,\n        st: st$1,\n        su: su$1,\n        sv: sv$1,\n        sw: sw$1,\n        syr: syr$1,\n        ta: ta$1,\n        te: te$1,\n        teo: teo$1,\n        th: th$1,\n        ti: ti$1,\n        tig: tig$1,\n        tk: tk$1,\n        tl: tl$1,\n        tn: tn$1,\n        to: to$1,\n        tpi: tpi$1,\n        tr: tr$1,\n        ts: ts$1,\n        tzm: tzm$1,\n        ug: ug$1,\n        uk: uk$1,\n        und: und$1,\n        ur: ur$1,\n        uz: uz$1,\n        ve: ve$1,\n        vec: vec$1,\n        vi: vi$1,\n        vo: vo$1,\n        vun: vun$1,\n        wa: wa$1,\n        wae: wae$1,\n        wo: wo$1,\n        xh: xh$1,\n        xog: xog$1,\n        yi: yi$1,\n        yo: yo$1,\n        yue: yue$1,\n        zh: zh$1,\n        zu: zu$1\n    });\n\n    const a = (n, ord) => {\n      if (ord) return 'other';\n      return n == 1 ? 'one' : 'other';\n    };\n    const b = (n, ord) => {\n      if (ord) return 'other';\n      return n == 0 || n == 1 ? 'one' : 'other';\n    };\n    const c = (n, ord) => {\n      if (ord) return 'other';\n      return n >= 0 && n <= 1 ? 'one' : 'other';\n    };\n    const d = (n, ord) => {\n      const s = String(n).split('.'),\n        v0 = !s[1];\n      if (ord) return 'other';\n      return n == 1 && v0 ? 'one' : 'other';\n    };\n    const e = (n, ord) => 'other';\n    const f = (n, ord) => {\n      if (ord) return 'other';\n      return n == 1 ? 'one' : n == 2 ? 'two' : 'other';\n    };\n    const af = a;\n    const ak = b;\n    const am = c;\n    const an = a;\n    const ar = (n, ord) => {\n      const s = String(n).split('.'),\n        t0 = Number(s[0]) == n,\n        n100 = t0 && s[0].slice(-2);\n      if (ord) return 'other';\n      return n == 0 ? 'zero' : n == 1 ? 'one' : n == 2 ? 'two' : n100 >= 3 && n100 <= 10 ? 'few' : n100 >= 11 && n100 <= 99 ? 'many' : 'other';\n    };\n    const ars = (n, ord) => {\n      const s = String(n).split('.'),\n        t0 = Number(s[0]) == n,\n        n100 = t0 && s[0].slice(-2);\n      if (ord) return 'other';\n      return n == 0 ? 'zero' : n == 1 ? 'one' : n == 2 ? 'two' : n100 >= 3 && n100 <= 10 ? 'few' : n100 >= 11 && n100 <= 99 ? 'many' : 'other';\n    };\n    const as = (n, ord) => {\n      if (ord) return n == 1 || n == 5 || n == 7 || n == 8 || n == 9 || n == 10 ? 'one' : n == 2 || n == 3 ? 'two' : n == 4 ? 'few' : n == 6 ? 'many' : 'other';\n      return n >= 0 && n <= 1 ? 'one' : 'other';\n    };\n    const asa = a;\n    const ast = d;\n    const az = (n, ord) => {\n      const s = String(n).split('.'),\n        i = s[0],\n        i10 = i.slice(-1),\n        i100 = i.slice(-2),\n        i1000 = i.slice(-3);\n      if (ord) return i10 == 1 || i10 == 2 || i10 == 5 || i10 == 7 || i10 == 8 || i100 == 20 || i100 == 50 || i100 == 70 || i100 == 80 ? 'one' : i10 == 3 || i10 == 4 || i1000 == 100 || i1000 == 200 || i1000 == 300 || i1000 == 400 || i1000 == 500 || i1000 == 600 || i1000 == 700 || i1000 == 800 || i1000 == 900 ? 'few' : i == 0 || i10 == 6 || i100 == 40 || i100 == 60 || i100 == 90 ? 'many' : 'other';\n      return n == 1 ? 'one' : 'other';\n    };\n    const bal = (n, ord) => n == 1 ? 'one' : 'other';\n    const be = (n, ord) => {\n      const s = String(n).split('.'),\n        t0 = Number(s[0]) == n,\n        n10 = t0 && s[0].slice(-1),\n        n100 = t0 && s[0].slice(-2);\n      if (ord) return (n10 == 2 || n10 == 3) && n100 != 12 && n100 != 13 ? 'few' : 'other';\n      return n10 == 1 && n100 != 11 ? 'one' : n10 >= 2 && n10 <= 4 && (n100 < 12 || n100 > 14) ? 'few' : t0 && n10 == 0 || n10 >= 5 && n10 <= 9 || n100 >= 11 && n100 <= 14 ? 'many' : 'other';\n    };\n    const bem = a;\n    const bez = a;\n    const bg = a;\n    const bho = b;\n    const bm = e;\n    const bn = (n, ord) => {\n      if (ord) return n == 1 || n == 5 || n == 7 || n == 8 || n == 9 || n == 10 ? 'one' : n == 2 || n == 3 ? 'two' : n == 4 ? 'few' : n == 6 ? 'many' : 'other';\n      return n >= 0 && n <= 1 ? 'one' : 'other';\n    };\n    const bo = e;\n    const br = (n, ord) => {\n      const s = String(n).split('.'),\n        t0 = Number(s[0]) == n,\n        n10 = t0 && s[0].slice(-1),\n        n100 = t0 && s[0].slice(-2),\n        n1000000 = t0 && s[0].slice(-6);\n      if (ord) return 'other';\n      return n10 == 1 && n100 != 11 && n100 != 71 && n100 != 91 ? 'one' : n10 == 2 && n100 != 12 && n100 != 72 && n100 != 92 ? 'two' : (n10 == 3 || n10 == 4 || n10 == 9) && (n100 < 10 || n100 > 19) && (n100 < 70 || n100 > 79) && (n100 < 90 || n100 > 99) ? 'few' : n != 0 && t0 && n1000000 == 0 ? 'many' : 'other';\n    };\n    const brx = a;\n    const bs = (n, ord) => {\n      const s = String(n).split('.'),\n        i = s[0],\n        f = s[1] || '',\n        v0 = !s[1],\n        i10 = i.slice(-1),\n        i100 = i.slice(-2),\n        f10 = f.slice(-1),\n        f100 = f.slice(-2);\n      if (ord) return 'other';\n      return v0 && i10 == 1 && i100 != 11 || f10 == 1 && f100 != 11 ? 'one' : v0 && i10 >= 2 && i10 <= 4 && (i100 < 12 || i100 > 14) || f10 >= 2 && f10 <= 4 && (f100 < 12 || f100 > 14) ? 'few' : 'other';\n    };\n    const ca = (n, ord) => {\n      const s = String(n).split('.'),\n        i = s[0],\n        v0 = !s[1],\n        i1000000 = i.slice(-6);\n      if (ord) return n == 1 || n == 3 ? 'one' : n == 2 ? 'two' : n == 4 ? 'few' : 'other';\n      return n == 1 && v0 ? 'one' : i != 0 && i1000000 == 0 && v0 ? 'many' : 'other';\n    };\n    const ce = a;\n    const ceb = (n, ord) => {\n      const s = String(n).split('.'),\n        i = s[0],\n        f = s[1] || '',\n        v0 = !s[1],\n        i10 = i.slice(-1),\n        f10 = f.slice(-1);\n      if (ord) return 'other';\n      return v0 && (i == 1 || i == 2 || i == 3) || v0 && i10 != 4 && i10 != 6 && i10 != 9 || !v0 && f10 != 4 && f10 != 6 && f10 != 9 ? 'one' : 'other';\n    };\n    const cgg = a;\n    const chr = a;\n    const ckb = a;\n    const cs = (n, ord) => {\n      const s = String(n).split('.'),\n        i = s[0],\n        v0 = !s[1];\n      if (ord) return 'other';\n      return n == 1 && v0 ? 'one' : i >= 2 && i <= 4 && v0 ? 'few' : !v0 ? 'many' : 'other';\n    };\n    const cy = (n, ord) => {\n      if (ord) return n == 0 || n == 7 || n == 8 || n == 9 ? 'zero' : n == 1 ? 'one' : n == 2 ? 'two' : n == 3 || n == 4 ? 'few' : n == 5 || n == 6 ? 'many' : 'other';\n      return n == 0 ? 'zero' : n == 1 ? 'one' : n == 2 ? 'two' : n == 3 ? 'few' : n == 6 ? 'many' : 'other';\n    };\n    const da = (n, ord) => {\n      const s = String(n).split('.'),\n        i = s[0],\n        t0 = Number(s[0]) == n;\n      if (ord) return 'other';\n      return n == 1 || !t0 && (i == 0 || i == 1) ? 'one' : 'other';\n    };\n    const de = d;\n    const doi = c;\n    const dsb = (n, ord) => {\n      const s = String(n).split('.'),\n        i = s[0],\n        f = s[1] || '',\n        v0 = !s[1],\n        i100 = i.slice(-2),\n        f100 = f.slice(-2);\n      if (ord) return 'other';\n      return v0 && i100 == 1 || f100 == 1 ? 'one' : v0 && i100 == 2 || f100 == 2 ? 'two' : v0 && (i100 == 3 || i100 == 4) || f100 == 3 || f100 == 4 ? 'few' : 'other';\n    };\n    const dv = a;\n    const dz = e;\n    const ee = a;\n    const el = a;\n    const en = (n, ord) => {\n      const s = String(n).split('.'),\n        v0 = !s[1],\n        t0 = Number(s[0]) == n,\n        n10 = t0 && s[0].slice(-1),\n        n100 = t0 && s[0].slice(-2);\n      if (ord) return n10 == 1 && n100 != 11 ? 'one' : n10 == 2 && n100 != 12 ? 'two' : n10 == 3 && n100 != 13 ? 'few' : 'other';\n      return n == 1 && v0 ? 'one' : 'other';\n    };\n    const eo = a;\n    const es = (n, ord) => {\n      const s = String(n).split('.'),\n        i = s[0],\n        v0 = !s[1],\n        i1000000 = i.slice(-6);\n      if (ord) return 'other';\n      return n == 1 ? 'one' : i != 0 && i1000000 == 0 && v0 ? 'many' : 'other';\n    };\n    const et = d;\n    const eu = a;\n    const fa = c;\n    const ff = (n, ord) => {\n      if (ord) return 'other';\n      return n >= 0 && n < 2 ? 'one' : 'other';\n    };\n    const fi = d;\n    const fil = (n, ord) => {\n      const s = String(n).split('.'),\n        i = s[0],\n        f = s[1] || '',\n        v0 = !s[1],\n        i10 = i.slice(-1),\n        f10 = f.slice(-1);\n      if (ord) return n == 1 ? 'one' : 'other';\n      return v0 && (i == 1 || i == 2 || i == 3) || v0 && i10 != 4 && i10 != 6 && i10 != 9 || !v0 && f10 != 4 && f10 != 6 && f10 != 9 ? 'one' : 'other';\n    };\n    const fo = a;\n    const fr = (n, ord) => {\n      const s = String(n).split('.'),\n        i = s[0],\n        v0 = !s[1],\n        i1000000 = i.slice(-6);\n      if (ord) return n == 1 ? 'one' : 'other';\n      return n >= 0 && n < 2 ? 'one' : i != 0 && i1000000 == 0 && v0 ? 'many' : 'other';\n    };\n    const fur = a;\n    const fy = d;\n    const ga = (n, ord) => {\n      const s = String(n).split('.'),\n        t0 = Number(s[0]) == n;\n      if (ord) return n == 1 ? 'one' : 'other';\n      return n == 1 ? 'one' : n == 2 ? 'two' : t0 && n >= 3 && n <= 6 ? 'few' : t0 && n >= 7 && n <= 10 ? 'many' : 'other';\n    };\n    const gd = (n, ord) => {\n      const s = String(n).split('.'),\n        t0 = Number(s[0]) == n;\n      if (ord) return n == 1 || n == 11 ? 'one' : n == 2 || n == 12 ? 'two' : n == 3 || n == 13 ? 'few' : 'other';\n      return n == 1 || n == 11 ? 'one' : n == 2 || n == 12 ? 'two' : t0 && n >= 3 && n <= 10 || t0 && n >= 13 && n <= 19 ? 'few' : 'other';\n    };\n    const gl = d;\n    const gsw = a;\n    const gu = (n, ord) => {\n      if (ord) return n == 1 ? 'one' : n == 2 || n == 3 ? 'two' : n == 4 ? 'few' : n == 6 ? 'many' : 'other';\n      return n >= 0 && n <= 1 ? 'one' : 'other';\n    };\n    const guw = b;\n    const gv = (n, ord) => {\n      const s = String(n).split('.'),\n        i = s[0],\n        v0 = !s[1],\n        i10 = i.slice(-1),\n        i100 = i.slice(-2);\n      if (ord) return 'other';\n      return v0 && i10 == 1 ? 'one' : v0 && i10 == 2 ? 'two' : v0 && (i100 == 0 || i100 == 20 || i100 == 40 || i100 == 60 || i100 == 80) ? 'few' : !v0 ? 'many' : 'other';\n    };\n    const ha = a;\n    const haw = a;\n    const he = (n, ord) => {\n      const s = String(n).split('.'),\n        i = s[0],\n        v0 = !s[1];\n      if (ord) return 'other';\n      return i == 1 && v0 || i == 0 && !v0 ? 'one' : i == 2 && v0 ? 'two' : 'other';\n    };\n    const hi = (n, ord) => {\n      if (ord) return n == 1 ? 'one' : n == 2 || n == 3 ? 'two' : n == 4 ? 'few' : n == 6 ? 'many' : 'other';\n      return n >= 0 && n <= 1 ? 'one' : 'other';\n    };\n    const hnj = e;\n    const hr = (n, ord) => {\n      const s = String(n).split('.'),\n        i = s[0],\n        f = s[1] || '',\n        v0 = !s[1],\n        i10 = i.slice(-1),\n        i100 = i.slice(-2),\n        f10 = f.slice(-1),\n        f100 = f.slice(-2);\n      if (ord) return 'other';\n      return v0 && i10 == 1 && i100 != 11 || f10 == 1 && f100 != 11 ? 'one' : v0 && i10 >= 2 && i10 <= 4 && (i100 < 12 || i100 > 14) || f10 >= 2 && f10 <= 4 && (f100 < 12 || f100 > 14) ? 'few' : 'other';\n    };\n    const hsb = (n, ord) => {\n      const s = String(n).split('.'),\n        i = s[0],\n        f = s[1] || '',\n        v0 = !s[1],\n        i100 = i.slice(-2),\n        f100 = f.slice(-2);\n      if (ord) return 'other';\n      return v0 && i100 == 1 || f100 == 1 ? 'one' : v0 && i100 == 2 || f100 == 2 ? 'two' : v0 && (i100 == 3 || i100 == 4) || f100 == 3 || f100 == 4 ? 'few' : 'other';\n    };\n    const hu = (n, ord) => {\n      if (ord) return n == 1 || n == 5 ? 'one' : 'other';\n      return n == 1 ? 'one' : 'other';\n    };\n    const hy = (n, ord) => {\n      if (ord) return n == 1 ? 'one' : 'other';\n      return n >= 0 && n < 2 ? 'one' : 'other';\n    };\n    const ia = d;\n    const id = e;\n    const ig = e;\n    const ii = e;\n    const io = d;\n    const is = (n, ord) => {\n      const s = String(n).split('.'),\n        i = s[0],\n        t = (s[1] || '').replace(/0+$/, ''),\n        t0 = Number(s[0]) == n,\n        i10 = i.slice(-1),\n        i100 = i.slice(-2);\n      if (ord) return 'other';\n      return t0 && i10 == 1 && i100 != 11 || t % 10 == 1 && t % 100 != 11 ? 'one' : 'other';\n    };\n    const it = (n, ord) => {\n      const s = String(n).split('.'),\n        i = s[0],\n        v0 = !s[1],\n        i1000000 = i.slice(-6);\n      if (ord) return n == 11 || n == 8 || n == 80 || n == 800 ? 'many' : 'other';\n      return n == 1 && v0 ? 'one' : i != 0 && i1000000 == 0 && v0 ? 'many' : 'other';\n    };\n    const iu = f;\n    const ja = e;\n    const jbo = e;\n    const jgo = a;\n    const jmc = a;\n    const jv = e;\n    const jw = e;\n    const ka = (n, ord) => {\n      const s = String(n).split('.'),\n        i = s[0],\n        i100 = i.slice(-2);\n      if (ord) return i == 1 ? 'one' : i == 0 || i100 >= 2 && i100 <= 20 || i100 == 40 || i100 == 60 || i100 == 80 ? 'many' : 'other';\n      return n == 1 ? 'one' : 'other';\n    };\n    const kab = (n, ord) => {\n      if (ord) return 'other';\n      return n >= 0 && n < 2 ? 'one' : 'other';\n    };\n    const kaj = a;\n    const kcg = a;\n    const kde = e;\n    const kea = e;\n    const kk = (n, ord) => {\n      const s = String(n).split('.'),\n        t0 = Number(s[0]) == n,\n        n10 = t0 && s[0].slice(-1);\n      if (ord) return n10 == 6 || n10 == 9 || t0 && n10 == 0 && n != 0 ? 'many' : 'other';\n      return n == 1 ? 'one' : 'other';\n    };\n    const kkj = a;\n    const kl = a;\n    const km = e;\n    const kn = c;\n    const ko = e;\n    const ks = a;\n    const ksb = a;\n    const ksh = (n, ord) => {\n      if (ord) return 'other';\n      return n == 0 ? 'zero' : n == 1 ? 'one' : 'other';\n    };\n    const ku = a;\n    const kw = (n, ord) => {\n      const s = String(n).split('.'),\n        t0 = Number(s[0]) == n,\n        n100 = t0 && s[0].slice(-2),\n        n1000 = t0 && s[0].slice(-3),\n        n100000 = t0 && s[0].slice(-5),\n        n1000000 = t0 && s[0].slice(-6);\n      if (ord) return t0 && n >= 1 && n <= 4 || n100 >= 1 && n100 <= 4 || n100 >= 21 && n100 <= 24 || n100 >= 41 && n100 <= 44 || n100 >= 61 && n100 <= 64 || n100 >= 81 && n100 <= 84 ? 'one' : n == 5 || n100 == 5 ? 'many' : 'other';\n      return n == 0 ? 'zero' : n == 1 ? 'one' : n100 == 2 || n100 == 22 || n100 == 42 || n100 == 62 || n100 == 82 || t0 && n1000 == 0 && (n100000 >= 1000 && n100000 <= 20000 || n100000 == 40000 || n100000 == 60000 || n100000 == 80000) || n != 0 && n1000000 == 100000 ? 'two' : n100 == 3 || n100 == 23 || n100 == 43 || n100 == 63 || n100 == 83 ? 'few' : n != 1 && (n100 == 1 || n100 == 21 || n100 == 41 || n100 == 61 || n100 == 81) ? 'many' : 'other';\n    };\n    const ky = a;\n    const lag = (n, ord) => {\n      const s = String(n).split('.'),\n        i = s[0];\n      if (ord) return 'other';\n      return n == 0 ? 'zero' : (i == 0 || i == 1) && n != 0 ? 'one' : 'other';\n    };\n    const lb = a;\n    const lg = a;\n    const lij = (n, ord) => {\n      const s = String(n).split('.'),\n        v0 = !s[1],\n        t0 = Number(s[0]) == n;\n      if (ord) return n == 11 || n == 8 || t0 && n >= 80 && n <= 89 || t0 && n >= 800 && n <= 899 ? 'many' : 'other';\n      return n == 1 && v0 ? 'one' : 'other';\n    };\n    const lkt = e;\n    const ln = b;\n    const lo = (n, ord) => {\n      if (ord) return n == 1 ? 'one' : 'other';\n      return 'other';\n    };\n    const lt = (n, ord) => {\n      const s = String(n).split('.'),\n        f = s[1] || '',\n        t0 = Number(s[0]) == n,\n        n10 = t0 && s[0].slice(-1),\n        n100 = t0 && s[0].slice(-2);\n      if (ord) return 'other';\n      return n10 == 1 && (n100 < 11 || n100 > 19) ? 'one' : n10 >= 2 && n10 <= 9 && (n100 < 11 || n100 > 19) ? 'few' : f != 0 ? 'many' : 'other';\n    };\n    const lv = (n, ord) => {\n      const s = String(n).split('.'),\n        f = s[1] || '',\n        v = f.length,\n        t0 = Number(s[0]) == n,\n        n10 = t0 && s[0].slice(-1),\n        n100 = t0 && s[0].slice(-2),\n        f100 = f.slice(-2),\n        f10 = f.slice(-1);\n      if (ord) return 'other';\n      return t0 && n10 == 0 || n100 >= 11 && n100 <= 19 || v == 2 && f100 >= 11 && f100 <= 19 ? 'zero' : n10 == 1 && n100 != 11 || v == 2 && f10 == 1 && f100 != 11 || v != 2 && f10 == 1 ? 'one' : 'other';\n    };\n    const mas = a;\n    const mg = b;\n    const mgo = a;\n    const mk = (n, ord) => {\n      const s = String(n).split('.'),\n        i = s[0],\n        f = s[1] || '',\n        v0 = !s[1],\n        i10 = i.slice(-1),\n        i100 = i.slice(-2),\n        f10 = f.slice(-1),\n        f100 = f.slice(-2);\n      if (ord) return i10 == 1 && i100 != 11 ? 'one' : i10 == 2 && i100 != 12 ? 'two' : (i10 == 7 || i10 == 8) && i100 != 17 && i100 != 18 ? 'many' : 'other';\n      return v0 && i10 == 1 && i100 != 11 || f10 == 1 && f100 != 11 ? 'one' : 'other';\n    };\n    const ml = a;\n    const mn = a;\n    const mo = (n, ord) => {\n      const s = String(n).split('.'),\n        v0 = !s[1],\n        t0 = Number(s[0]) == n,\n        n100 = t0 && s[0].slice(-2);\n      if (ord) return n == 1 ? 'one' : 'other';\n      return n == 1 && v0 ? 'one' : !v0 || n == 0 || n != 1 && n100 >= 1 && n100 <= 19 ? 'few' : 'other';\n    };\n    const mr = (n, ord) => {\n      if (ord) return n == 1 ? 'one' : n == 2 || n == 3 ? 'two' : n == 4 ? 'few' : 'other';\n      return n == 1 ? 'one' : 'other';\n    };\n    const ms = (n, ord) => {\n      if (ord) return n == 1 ? 'one' : 'other';\n      return 'other';\n    };\n    const mt = (n, ord) => {\n      const s = String(n).split('.'),\n        t0 = Number(s[0]) == n,\n        n100 = t0 && s[0].slice(-2);\n      if (ord) return 'other';\n      return n == 1 ? 'one' : n == 2 ? 'two' : n == 0 || n100 >= 3 && n100 <= 10 ? 'few' : n100 >= 11 && n100 <= 19 ? 'many' : 'other';\n    };\n    const my = e;\n    const nah = a;\n    const naq = f;\n    const nb = a;\n    const nd = a;\n    const ne = (n, ord) => {\n      const s = String(n).split('.'),\n        t0 = Number(s[0]) == n;\n      if (ord) return t0 && n >= 1 && n <= 4 ? 'one' : 'other';\n      return n == 1 ? 'one' : 'other';\n    };\n    const nl = d;\n    const nn = a;\n    const nnh = a;\n    const no = a;\n    const nqo = e;\n    const nr = a;\n    const nso = b;\n    const ny = a;\n    const nyn = a;\n    const om = a;\n    const or = (n, ord) => {\n      const s = String(n).split('.'),\n        t0 = Number(s[0]) == n;\n      if (ord) return n == 1 || n == 5 || t0 && n >= 7 && n <= 9 ? 'one' : n == 2 || n == 3 ? 'two' : n == 4 ? 'few' : n == 6 ? 'many' : 'other';\n      return n == 1 ? 'one' : 'other';\n    };\n    const os = a;\n    const osa = e;\n    const pa = b;\n    const pap = a;\n    const pcm = c;\n    const pl = (n, ord) => {\n      const s = String(n).split('.'),\n        i = s[0],\n        v0 = !s[1],\n        i10 = i.slice(-1),\n        i100 = i.slice(-2);\n      if (ord) return 'other';\n      return n == 1 && v0 ? 'one' : v0 && i10 >= 2 && i10 <= 4 && (i100 < 12 || i100 > 14) ? 'few' : v0 && i != 1 && (i10 == 0 || i10 == 1) || v0 && i10 >= 5 && i10 <= 9 || v0 && i100 >= 12 && i100 <= 14 ? 'many' : 'other';\n    };\n    const prg = (n, ord) => {\n      const s = String(n).split('.'),\n        f = s[1] || '',\n        v = f.length,\n        t0 = Number(s[0]) == n,\n        n10 = t0 && s[0].slice(-1),\n        n100 = t0 && s[0].slice(-2),\n        f100 = f.slice(-2),\n        f10 = f.slice(-1);\n      if (ord) return 'other';\n      return t0 && n10 == 0 || n100 >= 11 && n100 <= 19 || v == 2 && f100 >= 11 && f100 <= 19 ? 'zero' : n10 == 1 && n100 != 11 || v == 2 && f10 == 1 && f100 != 11 || v != 2 && f10 == 1 ? 'one' : 'other';\n    };\n    const ps = a;\n    const pt = (n, ord) => {\n      const s = String(n).split('.'),\n        i = s[0],\n        v0 = !s[1],\n        i1000000 = i.slice(-6);\n      if (ord) return 'other';\n      return i == 0 || i == 1 ? 'one' : i != 0 && i1000000 == 0 && v0 ? 'many' : 'other';\n    };\n    const pt_PT = (n, ord) => {\n      const s = String(n).split('.'),\n        i = s[0],\n        v0 = !s[1],\n        i1000000 = i.slice(-6);\n      if (ord) return 'other';\n      return n == 1 && v0 ? 'one' : i != 0 && i1000000 == 0 && v0 ? 'many' : 'other';\n    };\n    const rm = a;\n    const ro = (n, ord) => {\n      const s = String(n).split('.'),\n        v0 = !s[1],\n        t0 = Number(s[0]) == n,\n        n100 = t0 && s[0].slice(-2);\n      if (ord) return n == 1 ? 'one' : 'other';\n      return n == 1 && v0 ? 'one' : !v0 || n == 0 || n != 1 && n100 >= 1 && n100 <= 19 ? 'few' : 'other';\n    };\n    const rof = a;\n    const ru = (n, ord) => {\n      const s = String(n).split('.'),\n        i = s[0],\n        v0 = !s[1],\n        i10 = i.slice(-1),\n        i100 = i.slice(-2);\n      if (ord) return 'other';\n      return v0 && i10 == 1 && i100 != 11 ? 'one' : v0 && i10 >= 2 && i10 <= 4 && (i100 < 12 || i100 > 14) ? 'few' : v0 && i10 == 0 || v0 && i10 >= 5 && i10 <= 9 || v0 && i100 >= 11 && i100 <= 14 ? 'many' : 'other';\n    };\n    const rwk = a;\n    const sah = e;\n    const saq = a;\n    const sat = f;\n    const sc = (n, ord) => {\n      const s = String(n).split('.'),\n        v0 = !s[1];\n      if (ord) return n == 11 || n == 8 || n == 80 || n == 800 ? 'many' : 'other';\n      return n == 1 && v0 ? 'one' : 'other';\n    };\n    const scn = (n, ord) => {\n      const s = String(n).split('.'),\n        v0 = !s[1];\n      if (ord) return n == 11 || n == 8 || n == 80 || n == 800 ? 'many' : 'other';\n      return n == 1 && v0 ? 'one' : 'other';\n    };\n    const sd = a;\n    const sdh = a;\n    const se = f;\n    const seh = a;\n    const ses = e;\n    const sg = e;\n    const sh = (n, ord) => {\n      const s = String(n).split('.'),\n        i = s[0],\n        f = s[1] || '',\n        v0 = !s[1],\n        i10 = i.slice(-1),\n        i100 = i.slice(-2),\n        f10 = f.slice(-1),\n        f100 = f.slice(-2);\n      if (ord) return 'other';\n      return v0 && i10 == 1 && i100 != 11 || f10 == 1 && f100 != 11 ? 'one' : v0 && i10 >= 2 && i10 <= 4 && (i100 < 12 || i100 > 14) || f10 >= 2 && f10 <= 4 && (f100 < 12 || f100 > 14) ? 'few' : 'other';\n    };\n    const shi = (n, ord) => {\n      const s = String(n).split('.'),\n        t0 = Number(s[0]) == n;\n      if (ord) return 'other';\n      return n >= 0 && n <= 1 ? 'one' : t0 && n >= 2 && n <= 10 ? 'few' : 'other';\n    };\n    const si = (n, ord) => {\n      const s = String(n).split('.'),\n        i = s[0],\n        f = s[1] || '';\n      if (ord) return 'other';\n      return n == 0 || n == 1 || i == 0 && f == 1 ? 'one' : 'other';\n    };\n    const sk = (n, ord) => {\n      const s = String(n).split('.'),\n        i = s[0],\n        v0 = !s[1];\n      if (ord) return 'other';\n      return n == 1 && v0 ? 'one' : i >= 2 && i <= 4 && v0 ? 'few' : !v0 ? 'many' : 'other';\n    };\n    const sl = (n, ord) => {\n      const s = String(n).split('.'),\n        i = s[0],\n        v0 = !s[1],\n        i100 = i.slice(-2);\n      if (ord) return 'other';\n      return v0 && i100 == 1 ? 'one' : v0 && i100 == 2 ? 'two' : v0 && (i100 == 3 || i100 == 4) || !v0 ? 'few' : 'other';\n    };\n    const sma = f;\n    const smi = f;\n    const smj = f;\n    const smn = f;\n    const sms = f;\n    const sn = a;\n    const so = a;\n    const sq = (n, ord) => {\n      const s = String(n).split('.'),\n        t0 = Number(s[0]) == n,\n        n10 = t0 && s[0].slice(-1),\n        n100 = t0 && s[0].slice(-2);\n      if (ord) return n == 1 ? 'one' : n10 == 4 && n100 != 14 ? 'many' : 'other';\n      return n == 1 ? 'one' : 'other';\n    };\n    const sr = (n, ord) => {\n      const s = String(n).split('.'),\n        i = s[0],\n        f = s[1] || '',\n        v0 = !s[1],\n        i10 = i.slice(-1),\n        i100 = i.slice(-2),\n        f10 = f.slice(-1),\n        f100 = f.slice(-2);\n      if (ord) return 'other';\n      return v0 && i10 == 1 && i100 != 11 || f10 == 1 && f100 != 11 ? 'one' : v0 && i10 >= 2 && i10 <= 4 && (i100 < 12 || i100 > 14) || f10 >= 2 && f10 <= 4 && (f100 < 12 || f100 > 14) ? 'few' : 'other';\n    };\n    const ss = a;\n    const ssy = a;\n    const st = a;\n    const su = e;\n    const sv = (n, ord) => {\n      const s = String(n).split('.'),\n        v0 = !s[1],\n        t0 = Number(s[0]) == n,\n        n10 = t0 && s[0].slice(-1),\n        n100 = t0 && s[0].slice(-2);\n      if (ord) return (n10 == 1 || n10 == 2) && n100 != 11 && n100 != 12 ? 'one' : 'other';\n      return n == 1 && v0 ? 'one' : 'other';\n    };\n    const sw = d;\n    const syr = a;\n    const ta = a;\n    const te = a;\n    const teo = a;\n    const th = e;\n    const ti = b;\n    const tig = a;\n    const tk = (n, ord) => {\n      const s = String(n).split('.'),\n        t0 = Number(s[0]) == n,\n        n10 = t0 && s[0].slice(-1);\n      if (ord) return n10 == 6 || n10 == 9 || n == 10 ? 'few' : 'other';\n      return n == 1 ? 'one' : 'other';\n    };\n    const tl = (n, ord) => {\n      const s = String(n).split('.'),\n        i = s[0],\n        f = s[1] || '',\n        v0 = !s[1],\n        i10 = i.slice(-1),\n        f10 = f.slice(-1);\n      if (ord) return n == 1 ? 'one' : 'other';\n      return v0 && (i == 1 || i == 2 || i == 3) || v0 && i10 != 4 && i10 != 6 && i10 != 9 || !v0 && f10 != 4 && f10 != 6 && f10 != 9 ? 'one' : 'other';\n    };\n    const tn = a;\n    const to = e;\n    const tpi = e;\n    const tr = a;\n    const ts = a;\n    const tzm = (n, ord) => {\n      const s = String(n).split('.'),\n        t0 = Number(s[0]) == n;\n      if (ord) return 'other';\n      return n == 0 || n == 1 || t0 && n >= 11 && n <= 99 ? 'one' : 'other';\n    };\n    const ug = a;\n    const uk = (n, ord) => {\n      const s = String(n).split('.'),\n        i = s[0],\n        v0 = !s[1],\n        t0 = Number(s[0]) == n,\n        n10 = t0 && s[0].slice(-1),\n        n100 = t0 && s[0].slice(-2),\n        i10 = i.slice(-1),\n        i100 = i.slice(-2);\n      if (ord) return n10 == 3 && n100 != 13 ? 'few' : 'other';\n      return v0 && i10 == 1 && i100 != 11 ? 'one' : v0 && i10 >= 2 && i10 <= 4 && (i100 < 12 || i100 > 14) ? 'few' : v0 && i10 == 0 || v0 && i10 >= 5 && i10 <= 9 || v0 && i100 >= 11 && i100 <= 14 ? 'many' : 'other';\n    };\n    const und = e;\n    const ur = d;\n    const uz = a;\n    const ve = a;\n    const vec = (n, ord) => {\n      const s = String(n).split('.'),\n        i = s[0],\n        v0 = !s[1],\n        i1000000 = i.slice(-6);\n      if (ord) return n == 11 || n == 8 || n == 80 || n == 800 ? 'many' : 'other';\n      return n == 1 && v0 ? 'one' : i != 0 && i1000000 == 0 && v0 ? 'many' : 'other';\n    };\n    const vi = (n, ord) => {\n      if (ord) return n == 1 ? 'one' : 'other';\n      return 'other';\n    };\n    const vo = a;\n    const vun = a;\n    const wa = b;\n    const wae = a;\n    const wo = e;\n    const xh = a;\n    const xog = a;\n    const yi = d;\n    const yo = e;\n    const yue = e;\n    const zh = e;\n    const zu = c;\n\n    var Plurals = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        af: af,\n        ak: ak,\n        am: am,\n        an: an,\n        ar: ar,\n        ars: ars,\n        as: as,\n        asa: asa,\n        ast: ast,\n        az: az,\n        bal: bal,\n        be: be,\n        bem: bem,\n        bez: bez,\n        bg: bg,\n        bho: bho,\n        bm: bm,\n        bn: bn,\n        bo: bo,\n        br: br,\n        brx: brx,\n        bs: bs,\n        ca: ca,\n        ce: ce,\n        ceb: ceb,\n        cgg: cgg,\n        chr: chr,\n        ckb: ckb,\n        cs: cs,\n        cy: cy,\n        da: da,\n        de: de,\n        doi: doi,\n        dsb: dsb,\n        dv: dv,\n        dz: dz,\n        ee: ee,\n        el: el,\n        en: en,\n        eo: eo,\n        es: es,\n        et: et,\n        eu: eu,\n        fa: fa,\n        ff: ff,\n        fi: fi,\n        fil: fil,\n        fo: fo,\n        fr: fr,\n        fur: fur,\n        fy: fy,\n        ga: ga,\n        gd: gd,\n        gl: gl,\n        gsw: gsw,\n        gu: gu,\n        guw: guw,\n        gv: gv,\n        ha: ha,\n        haw: haw,\n        he: he,\n        hi: hi,\n        hnj: hnj,\n        hr: hr,\n        hsb: hsb,\n        hu: hu,\n        hy: hy,\n        ia: ia,\n        id: id,\n        ig: ig,\n        ii: ii,\n        io: io,\n        is: is,\n        it: it,\n        iu: iu,\n        ja: ja,\n        jbo: jbo,\n        jgo: jgo,\n        jmc: jmc,\n        jv: jv,\n        jw: jw,\n        ka: ka,\n        kab: kab,\n        kaj: kaj,\n        kcg: kcg,\n        kde: kde,\n        kea: kea,\n        kk: kk,\n        kkj: kkj,\n        kl: kl,\n        km: km,\n        kn: kn,\n        ko: ko,\n        ks: ks,\n        ksb: ksb,\n        ksh: ksh,\n        ku: ku,\n        kw: kw,\n        ky: ky,\n        lag: lag,\n        lb: lb,\n        lg: lg,\n        lij: lij,\n        lkt: lkt,\n        ln: ln,\n        lo: lo,\n        lt: lt,\n        lv: lv,\n        mas: mas,\n        mg: mg,\n        mgo: mgo,\n        mk: mk,\n        ml: ml,\n        mn: mn,\n        mo: mo,\n        mr: mr,\n        ms: ms,\n        mt: mt,\n        my: my,\n        nah: nah,\n        naq: naq,\n        nb: nb,\n        nd: nd,\n        ne: ne,\n        nl: nl,\n        nn: nn,\n        nnh: nnh,\n        no: no,\n        nqo: nqo,\n        nr: nr,\n        nso: nso,\n        ny: ny,\n        nyn: nyn,\n        om: om,\n        or: or,\n        os: os,\n        osa: osa,\n        pa: pa,\n        pap: pap,\n        pcm: pcm,\n        pl: pl,\n        prg: prg,\n        ps: ps,\n        pt: pt,\n        pt_PT: pt_PT,\n        rm: rm,\n        ro: ro,\n        rof: rof,\n        ru: ru,\n        rwk: rwk,\n        sah: sah,\n        saq: saq,\n        sat: sat,\n        sc: sc,\n        scn: scn,\n        sd: sd,\n        sdh: sdh,\n        se: se,\n        seh: seh,\n        ses: ses,\n        sg: sg,\n        sh: sh,\n        shi: shi,\n        si: si,\n        sk: sk,\n        sl: sl,\n        sma: sma,\n        smi: smi,\n        smj: smj,\n        smn: smn,\n        sms: sms,\n        sn: sn,\n        so: so,\n        sq: sq,\n        sr: sr,\n        ss: ss,\n        ssy: ssy,\n        st: st,\n        su: su,\n        sv: sv,\n        sw: sw,\n        syr: syr,\n        ta: ta,\n        te: te,\n        teo: teo,\n        th: th,\n        ti: ti,\n        tig: tig,\n        tk: tk,\n        tl: tl,\n        tn: tn,\n        to: to,\n        tpi: tpi,\n        tr: tr,\n        ts: ts,\n        tzm: tzm,\n        ug: ug,\n        uk: uk,\n        und: und,\n        ur: ur,\n        uz: uz,\n        ve: ve,\n        vec: vec,\n        vi: vi,\n        vo: vo,\n        vun: vun,\n        wa: wa,\n        wae: wae,\n        wo: wo,\n        xh: xh,\n        xog: xog,\n        yi: yi,\n        yo: yo,\n        yue: yue,\n        zh: zh,\n        zu: zu\n    });\n\n    function normalize(locale) {\n        if (typeof locale !== 'string' || locale.length < 2)\n            throw new RangeError(\"Invalid language tag: \".concat(locale));\n        if (locale.startsWith('pt-PT'))\n            return 'pt-PT';\n        var m = locale.match(/.+?(?=[-_])/);\n        return m ? m[0] : locale;\n    }\n    function getPlural(locale) {\n        if (typeof locale === 'function') {\n            var lc_1 = normalize(locale.name);\n            return {\n                isDefault: false,\n                id: identifier(lc_1),\n                lc: lc_1,\n                locale: locale.name,\n                getPlural: locale,\n                cardinals: locale.cardinals || [],\n                ordinals: locale.ordinals || []\n            };\n        }\n        var lc = normalize(locale);\n        var id = identifier(lc);\n        if (isPluralId(id)) {\n            return {\n                isDefault: true,\n                id: id,\n                lc: lc,\n                locale: locale,\n                getCardinal: Cardinals[id],\n                getPlural: Plurals[id],\n                cardinals: PluralCategories[id].cardinal,\n                ordinals: PluralCategories[id].ordinal\n            };\n        }\n        return null;\n    }\n    function getAllPlurals(firstLocale) {\n        var keys = Object.keys(Plurals).filter(function (key) { return key !== firstLocale; });\n        keys.unshift(firstLocale);\n        return keys.map(getPlural);\n    }\n    function hasPlural(locale) {\n        var lc = normalize(locale);\n        return identifier(lc) in Plurals;\n    }\n    function isPluralId(id) {\n        return id in Plurals;\n    }\n\n    var MessageFormat = (function () {\n        function MessageFormat(locale, options) {\n            this.plurals = [];\n            this.options = Object.assign({\n                biDiSupport: false,\n                currency: 'USD',\n                customFormatters: {},\n                localeCodeFromKey: null,\n                requireAllArguments: false,\n                returnType: 'string',\n                strict: (options && options.strictNumberSign) || false,\n                strictPluralKeys: true\n            }, options);\n            if (locale === '*') {\n                this.plurals = getAllPlurals(MessageFormat.defaultLocale);\n            }\n            else if (Array.isArray(locale)) {\n                this.plurals = locale.map(getPlural).filter(Boolean);\n            }\n            else if (locale) {\n                var pl = getPlural(locale);\n                if (pl)\n                    this.plurals = [pl];\n            }\n            if (this.plurals.length === 0) {\n                var pl = getPlural(MessageFormat.defaultLocale);\n                this.plurals = [pl];\n            }\n        }\n        MessageFormat.escape = function (str, octothorpe) {\n            var esc = octothorpe ? /[#{}]/g : /[{}]/g;\n            return String(str).replace(esc, \"'$&'\");\n        };\n        MessageFormat.supportedLocalesOf = function (locales) {\n            var la = Array.isArray(locales) ? locales : [locales];\n            return la.filter(hasPlural);\n        };\n        MessageFormat.prototype.resolvedOptions = function () {\n            return __assign(__assign({}, this.options), { locale: this.plurals[0].locale, plurals: this.plurals });\n        };\n        MessageFormat.prototype.compile = function (message) {\n            var e_1, _a;\n            var compiler = new Compiler(this.options);\n            var fnBody = 'return ' + compiler.compile(message, this.plurals[0]);\n            var nfArgs = [];\n            var fnArgs = [];\n            try {\n                for (var _b = __values(Object.entries(compiler.runtime)), _c = _b.next(); !_c.done; _c = _b.next()) {\n                    var _d = __read(_c.value, 2), key = _d[0], fmt = _d[1];\n                    nfArgs.push(key);\n                    fnArgs.push(fmt);\n                }\n            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n                }\n                finally { if (e_1) throw e_1.error; }\n            }\n            var fn = new (Function.bind.apply(Function, __spreadArray(__spreadArray([void 0], __read(nfArgs), false), [fnBody], false)))();\n            return fn.apply(void 0, __spreadArray([], __read(fnArgs), false));\n        };\n        MessageFormat.defaultLocale = 'en';\n        return MessageFormat;\n    }());\n\n    return MessageFormat;\n\n}));\n","'use strict'\n\n/**\n * Ponyfill for `Array.prototype.find` which is only available in ES6 runtimes.\n *\n * Works with anything that has a `length` property and index access properties, including NodeList.\n *\n * @template {unknown} T\n * @param {Array<T> | ({length:number, [number]: T})} list\n * @param {function (item: T, index: number, list:Array<T> | ({length:number, [number]: T})):boolean} predicate\n * @param {Partial<Pick<ArrayConstructor['prototype'], 'find'>>?} ac `Array.prototype` by default,\n * \t\t\t\tallows injecting a custom implementation in tests\n * @returns {T | undefined}\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find\n * @see https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.find\n */\nfunction find(list, predicate, ac) {\n\tif (ac === undefined) {\n\t\tac = Array.prototype;\n\t}\n\tif (list && typeof ac.find === 'function') {\n\t\treturn ac.find.call(list, predicate);\n\t}\n\tfor (var i = 0; i < list.length; i++) {\n\t\tif (Object.prototype.hasOwnProperty.call(list, i)) {\n\t\t\tvar item = list[i];\n\t\t\tif (predicate.call(undefined, item, i, list)) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * \"Shallow freezes\" an object to render it immutable.\n * Uses `Object.freeze` if available,\n * otherwise the immutability is only in the type.\n *\n * Is used to create \"enum like\" objects.\n *\n * @template T\n * @param {T} object the object to freeze\n * @param {Pick<ObjectConstructor, 'freeze'> = Object} oc `Object` by default,\n * \t\t\t\tallows to inject custom object constructor for tests\n * @returns {Readonly<T>}\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze\n */\nfunction freeze(object, oc) {\n\tif (oc === undefined) {\n\t\toc = Object\n\t}\n\treturn oc && typeof oc.freeze === 'function' ? oc.freeze(object) : object\n}\n\n/**\n * Since we can not rely on `Object.assign` we provide a simplified version\n * that is sufficient for our needs.\n *\n * @param {Object} target\n * @param {Object | null | undefined} source\n *\n * @returns {Object} target\n * @throws TypeError if target is not an object\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n * @see https://tc39.es/ecma262/multipage/fundamental-objects.html#sec-object.assign\n */\nfunction assign(target, source) {\n\tif (target === null || typeof target !== 'object') {\n\t\tthrow new TypeError('target is not an object')\n\t}\n\tfor (var key in source) {\n\t\tif (Object.prototype.hasOwnProperty.call(source, key)) {\n\t\t\ttarget[key] = source[key]\n\t\t}\n\t}\n\treturn target\n}\n\n/**\n * All mime types that are allowed as input to `DOMParser.parseFromString`\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#Argument02 MDN\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#domparsersupportedtype WHATWG HTML Spec\n * @see DOMParser.prototype.parseFromString\n */\nvar MIME_TYPE = freeze({\n\t/**\n\t * `text/html`, the only mime type that triggers treating an XML document as HTML.\n\t *\n\t * @see DOMParser.SupportedType.isHTML\n\t * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/HTML Wikipedia\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN\n\t * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring WHATWG HTML Spec\n\t */\n\tHTML: 'text/html',\n\n\t/**\n\t * Helper method to check a mime type if it indicates an HTML document\n\t *\n\t * @param {string} [value]\n\t * @returns {boolean}\n\t *\n\t * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/HTML Wikipedia\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN\n\t * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring \t */\n\tisHTML: function (value) {\n\t\treturn value === MIME_TYPE.HTML\n\t},\n\n\t/**\n\t * `application/xml`, the standard mime type for XML documents.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xml IANA MimeType registration\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.1 RFC 7303\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_APPLICATION: 'application/xml',\n\n\t/**\n\t * `text/html`, an alias for `application/xml`.\n\t *\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.2 RFC 7303\n\t * @see https://www.iana.org/assignments/media-types/text/xml IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_TEXT: 'text/xml',\n\n\t/**\n\t * `application/xhtml+xml`, indicates an XML document that has the default HTML namespace,\n\t * but is parsed as an XML document.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xhtml+xml IANA MimeType registration\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument WHATWG DOM Spec\n\t * @see https://en.wikipedia.org/wiki/XHTML Wikipedia\n\t */\n\tXML_XHTML_APPLICATION: 'application/xhtml+xml',\n\n\t/**\n\t * `image/svg+xml`,\n\t *\n\t * @see https://www.iana.org/assignments/media-types/image/svg+xml IANA MimeType registration\n\t * @see https://www.w3.org/TR/SVG11/ W3C SVG 1.1\n\t * @see https://en.wikipedia.org/wiki/Scalable_Vector_Graphics Wikipedia\n\t */\n\tXML_SVG_IMAGE: 'image/svg+xml',\n})\n\n/**\n * Namespaces that are used in this code base.\n *\n * @see http://www.w3.org/TR/REC-xml-names\n */\nvar NAMESPACE = freeze({\n\t/**\n\t * The XHTML namespace.\n\t *\n\t * @see http://www.w3.org/1999/xhtml\n\t */\n\tHTML: 'http://www.w3.org/1999/xhtml',\n\n\t/**\n\t * Checks if `uri` equals `NAMESPACE.HTML`.\n\t *\n\t * @param {string} [uri]\n\t *\n\t * @see NAMESPACE.HTML\n\t */\n\tisHTML: function (uri) {\n\t\treturn uri === NAMESPACE.HTML\n\t},\n\n\t/**\n\t * The SVG namespace.\n\t *\n\t * @see http://www.w3.org/2000/svg\n\t */\n\tSVG: 'http://www.w3.org/2000/svg',\n\n\t/**\n\t * The `xml:` namespace.\n\t *\n\t * @see http://www.w3.org/XML/1998/namespace\n\t */\n\tXML: 'http://www.w3.org/XML/1998/namespace',\n\n\t/**\n\t * The `xmlns:` namespace\n\t *\n\t * @see https://www.w3.org/2000/xmlns/\n\t */\n\tXMLNS: 'http://www.w3.org/2000/xmlns/',\n})\n\nexports.assign = assign;\nexports.find = find;\nexports.freeze = freeze;\nexports.MIME_TYPE = MIME_TYPE;\nexports.NAMESPACE = NAMESPACE;\n","var conventions = require(\"./conventions\");\nvar dom = require('./dom')\nvar entities = require('./entities');\nvar sax = require('./sax');\n\nvar DOMImplementation = dom.DOMImplementation;\n\nvar NAMESPACE = conventions.NAMESPACE;\n\nvar ParseError = sax.ParseError;\nvar XMLReader = sax.XMLReader;\n\n/**\n * Normalizes line ending according to https://www.w3.org/TR/xml11/#sec-line-ends:\n *\n * > XML parsed entities are often stored in computer files which,\n * > for editing convenience, are organized into lines.\n * > These lines are typically separated by some combination\n * > of the characters CARRIAGE RETURN (#xD) and LINE FEED (#xA).\n * >\n * > To simplify the tasks of applications, the XML processor must behave\n * > as if it normalized all line breaks in external parsed entities (including the document entity)\n * > on input, before parsing, by translating all of the following to a single #xA character:\n * >\n * > 1. the two-character sequence #xD #xA\n * > 2. the two-character sequence #xD #x85\n * > 3. the single character #x85\n * > 4. the single character #x2028\n * > 5. any #xD character that is not immediately followed by #xA or #x85.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction normalizeLineEndings(input) {\n\treturn input\n\t\t.replace(/\\r[\\n\\u0085]/g, '\\n')\n\t\t.replace(/[\\r\\u0085\\u2028]/g, '\\n')\n}\n\n/**\n * @typedef Locator\n * @property {number} [columnNumber]\n * @property {number} [lineNumber]\n */\n\n/**\n * @typedef DOMParserOptions\n * @property {DOMHandler} [domBuilder]\n * @property {Function} [errorHandler]\n * @property {(string) => string} [normalizeLineEndings] used to replace line endings before parsing\n * \t\t\t\t\t\tdefaults to `normalizeLineEndings`\n * @property {Locator} [locator]\n * @property {Record<string, string>} [xmlns]\n *\n * @see normalizeLineEndings\n */\n\n/**\n * The DOMParser interface provides the ability to parse XML or HTML source code\n * from a string into a DOM `Document`.\n *\n * _xmldom is different from the spec in that it allows an `options` parameter,\n * to override the default behavior._\n *\n * @param {DOMParserOptions} [options]\n * @constructor\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-parsing-and-serialization\n */\nfunction DOMParser(options){\n\tthis.options = options ||{locator:{}};\n}\n\nDOMParser.prototype.parseFromString = function(source,mimeType){\n\tvar options = this.options;\n\tvar sax =  new XMLReader();\n\tvar domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler\n\tvar errorHandler = options.errorHandler;\n\tvar locator = options.locator;\n\tvar defaultNSMap = options.xmlns||{};\n\tvar isHTML = /\\/x?html?$/.test(mimeType);//mimeType.toLowerCase().indexOf('html') > -1;\n  \tvar entityMap = isHTML ? entities.HTML_ENTITIES : entities.XML_ENTITIES;\n\tif(locator){\n\t\tdomBuilder.setDocumentLocator(locator)\n\t}\n\n\tsax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator);\n\tsax.domBuilder = options.domBuilder || domBuilder;\n\tif(isHTML){\n\t\tdefaultNSMap[''] = NAMESPACE.HTML;\n\t}\n\tdefaultNSMap.xml = defaultNSMap.xml || NAMESPACE.XML;\n\tvar normalize = options.normalizeLineEndings || normalizeLineEndings;\n\tif (source && typeof source === 'string') {\n\t\tsax.parse(\n\t\t\tnormalize(source),\n\t\t\tdefaultNSMap,\n\t\t\tentityMap\n\t\t)\n\t} else {\n\t\tsax.errorHandler.error('invalid doc source')\n\t}\n\treturn domBuilder.doc;\n}\nfunction buildErrorHandler(errorImpl,domBuilder,locator){\n\tif(!errorImpl){\n\t\tif(domBuilder instanceof DOMHandler){\n\t\t\treturn domBuilder;\n\t\t}\n\t\terrorImpl = domBuilder ;\n\t}\n\tvar errorHandler = {}\n\tvar isCallback = errorImpl instanceof Function;\n\tlocator = locator||{}\n\tfunction build(key){\n\t\tvar fn = errorImpl[key];\n\t\tif(!fn && isCallback){\n\t\t\tfn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl;\n\t\t}\n\t\terrorHandler[key] = fn && function(msg){\n\t\t\tfn('[xmldom '+key+']\\t'+msg+_locator(locator));\n\t\t}||function(){};\n\t}\n\tbuild('warning');\n\tbuild('error');\n\tbuild('fatalError');\n\treturn errorHandler;\n}\n\n//console.log('#\\n\\n\\n\\n\\n\\n\\n####')\n/**\n * +ContentHandler+ErrorHandler\n * +LexicalHandler+EntityResolver2\n * -DeclHandler-DTDHandler\n *\n * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler\n * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2\n * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html\n */\nfunction DOMHandler() {\n    this.cdata = false;\n}\nfunction position(locator,node){\n\tnode.lineNumber = locator.lineNumber;\n\tnode.columnNumber = locator.columnNumber;\n}\n/**\n * @see org.xml.sax.ContentHandler#startDocument\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html\n */\nDOMHandler.prototype = {\n\tstartDocument : function() {\n    \tthis.doc = new DOMImplementation().createDocument(null, null, null);\n    \tif (this.locator) {\n        \tthis.doc.documentURI = this.locator.systemId;\n    \t}\n\t},\n\tstartElement:function(namespaceURI, localName, qName, attrs) {\n\t\tvar doc = this.doc;\n\t    var el = doc.createElementNS(namespaceURI, qName||localName);\n\t    var len = attrs.length;\n\t    appendElement(this, el);\n\t    this.currentElement = el;\n\n\t\tthis.locator && position(this.locator,el)\n\t    for (var i = 0 ; i < len; i++) {\n\t        var namespaceURI = attrs.getURI(i);\n\t        var value = attrs.getValue(i);\n\t        var qName = attrs.getQName(i);\n\t\t\tvar attr = doc.createAttributeNS(namespaceURI, qName);\n\t\t\tthis.locator &&position(attrs.getLocator(i),attr);\n\t\t\tattr.value = attr.nodeValue = value;\n\t\t\tel.setAttributeNode(attr)\n\t    }\n\t},\n\tendElement:function(namespaceURI, localName, qName) {\n\t\tvar current = this.currentElement\n\t\tvar tagName = current.tagName;\n\t\tthis.currentElement = current.parentNode;\n\t},\n\tstartPrefixMapping:function(prefix, uri) {\n\t},\n\tendPrefixMapping:function(prefix) {\n\t},\n\tprocessingInstruction:function(target, data) {\n\t    var ins = this.doc.createProcessingInstruction(target, data);\n\t    this.locator && position(this.locator,ins)\n\t    appendElement(this, ins);\n\t},\n\tignorableWhitespace:function(ch, start, length) {\n\t},\n\tcharacters:function(chars, start, length) {\n\t\tchars = _toString.apply(this,arguments)\n\t\t//console.log(chars)\n\t\tif(chars){\n\t\t\tif (this.cdata) {\n\t\t\t\tvar charNode = this.doc.createCDATASection(chars);\n\t\t\t} else {\n\t\t\t\tvar charNode = this.doc.createTextNode(chars);\n\t\t\t}\n\t\t\tif(this.currentElement){\n\t\t\t\tthis.currentElement.appendChild(charNode);\n\t\t\t}else if(/^\\s*$/.test(chars)){\n\t\t\t\tthis.doc.appendChild(charNode);\n\t\t\t\t//process xml\n\t\t\t}\n\t\t\tthis.locator && position(this.locator,charNode)\n\t\t}\n\t},\n\tskippedEntity:function(name) {\n\t},\n\tendDocument:function() {\n\t\tthis.doc.normalize();\n\t},\n\tsetDocumentLocator:function (locator) {\n\t    if(this.locator = locator){// && !('lineNumber' in locator)){\n\t    \tlocator.lineNumber = 0;\n\t    }\n\t},\n\t//LexicalHandler\n\tcomment:function(chars, start, length) {\n\t\tchars = _toString.apply(this,arguments)\n\t    var comm = this.doc.createComment(chars);\n\t    this.locator && position(this.locator,comm)\n\t    appendElement(this, comm);\n\t},\n\n\tstartCDATA:function() {\n\t    //used in characters() methods\n\t    this.cdata = true;\n\t},\n\tendCDATA:function() {\n\t    this.cdata = false;\n\t},\n\n\tstartDTD:function(name, publicId, systemId) {\n\t\tvar impl = this.doc.implementation;\n\t    if (impl && impl.createDocumentType) {\n\t        var dt = impl.createDocumentType(name, publicId, systemId);\n\t        this.locator && position(this.locator,dt)\n\t        appendElement(this, dt);\n\t\t\t\t\tthis.doc.doctype = dt;\n\t    }\n\t},\n\t/**\n\t * @see org.xml.sax.ErrorHandler\n\t * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html\n\t */\n\twarning:function(error) {\n\t\tconsole.warn('[xmldom warning]\\t'+error,_locator(this.locator));\n\t},\n\terror:function(error) {\n\t\tconsole.error('[xmldom error]\\t'+error,_locator(this.locator));\n\t},\n\tfatalError:function(error) {\n\t\tthrow new ParseError(error, this.locator);\n\t}\n}\nfunction _locator(l){\n\tif(l){\n\t\treturn '\\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']'\n\t}\n}\nfunction _toString(chars,start,length){\n\tif(typeof chars == 'string'){\n\t\treturn chars.substr(start,length)\n\t}else{//java sax connect width xmldom on rhino(what about: \"? && !(chars instanceof String)\")\n\t\tif(chars.length >= start+length || start){\n\t\t\treturn new java.lang.String(chars,start,length)+'';\n\t\t}\n\t\treturn chars;\n\t}\n}\n\n/*\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html\n * used method of org.xml.sax.ext.LexicalHandler:\n *  #comment(chars, start, length)\n *  #startCDATA()\n *  #endCDATA()\n *  #startDTD(name, publicId, systemId)\n *\n *\n * IGNORED method of org.xml.sax.ext.LexicalHandler:\n *  #endDTD()\n *  #startEntity(name)\n *  #endEntity(name)\n *\n *\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html\n * IGNORED method of org.xml.sax.ext.DeclHandler\n * \t#attributeDecl(eName, aName, type, mode, value)\n *  #elementDecl(name, model)\n *  #externalEntityDecl(name, publicId, systemId)\n *  #internalEntityDecl(name, value)\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html\n * IGNORED method of org.xml.sax.EntityResolver2\n *  #resolveEntity(String name,String publicId,String baseURI,String systemId)\n *  #resolveEntity(publicId, systemId)\n *  #getExternalSubset(name, baseURI)\n * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html\n * IGNORED method of org.xml.sax.DTDHandler\n *  #notationDecl(name, publicId, systemId) {};\n *  #unparsedEntityDecl(name, publicId, systemId, notationName) {};\n */\n\"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl\".replace(/\\w+/g,function(key){\n\tDOMHandler.prototype[key] = function(){return null}\n})\n\n/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */\nfunction appendElement (hander,node) {\n    if (!hander.currentElement) {\n        hander.doc.appendChild(node);\n    } else {\n        hander.currentElement.appendChild(node);\n    }\n}//appendChild and setAttributeNS are preformance key\n\nexports.__DOMHandler = DOMHandler;\nexports.normalizeLineEndings = normalizeLineEndings;\nexports.DOMParser = DOMParser;\n","var conventions = require(\"./conventions\");\n\nvar find = conventions.find;\nvar NAMESPACE = conventions.NAMESPACE;\n\n/**\n * A prerequisite for `[].filter`, to drop elements that are empty\n * @param {string} input\n * @returns {boolean}\n */\nfunction notEmptyString (input) {\n\treturn input !== ''\n}\n/**\n * @see https://infra.spec.whatwg.org/#split-on-ascii-whitespace\n * @see https://infra.spec.whatwg.org/#ascii-whitespace\n *\n * @param {string} input\n * @returns {string[]} (can be empty)\n */\nfunction splitOnASCIIWhitespace(input) {\n\t// U+0009 TAB, U+000A LF, U+000C FF, U+000D CR, U+0020 SPACE\n\treturn input ? input.split(/[\\t\\n\\f\\r ]+/).filter(notEmptyString) : []\n}\n\n/**\n * Adds element as a key to current if it is not already present.\n *\n * @param {Record<string, boolean | undefined>} current\n * @param {string} element\n * @returns {Record<string, boolean | undefined>}\n */\nfunction orderedSetReducer (current, element) {\n\tif (!current.hasOwnProperty(element)) {\n\t\tcurrent[element] = true;\n\t}\n\treturn current;\n}\n\n/**\n * @see https://infra.spec.whatwg.org/#ordered-set\n * @param {string} input\n * @returns {string[]}\n */\nfunction toOrderedSet(input) {\n\tif (!input) return [];\n\tvar list = splitOnASCIIWhitespace(input);\n\treturn Object.keys(list.reduce(orderedSetReducer, {}))\n}\n\n/**\n * Uses `list.indexOf` to implement something like `Array.prototype.includes`,\n * which we can not rely on being available.\n *\n * @param {any[]} list\n * @returns {function(any): boolean}\n */\nfunction arrayIncludes (list) {\n\treturn function(element) {\n\t\treturn list && list.indexOf(element) !== -1;\n\t}\n}\n\nfunction copy(src,dest){\n\tfor(var p in src){\n\t\tif (Object.prototype.hasOwnProperty.call(src, p)) {\n\t\t\tdest[p] = src[p];\n\t\t}\n\t}\n}\n\n/**\n^\\w+\\.prototype\\.([_\\w]+)\\s*=\\s*((?:.*\\{\\s*?[\\r\\n][\\s\\S]*?^})|\\S.*?(?=[;\\r\\n]));?\n^\\w+\\.prototype\\.([_\\w]+)\\s*=\\s*(\\S.*?(?=[;\\r\\n]));?\n */\nfunction _extends(Class,Super){\n\tvar pt = Class.prototype;\n\tif(!(pt instanceof Super)){\n\t\tfunction t(){};\n\t\tt.prototype = Super.prototype;\n\t\tt = new t();\n\t\tcopy(pt,t);\n\t\tClass.prototype = pt = t;\n\t}\n\tif(pt.constructor != Class){\n\t\tif(typeof Class != 'function'){\n\t\t\tconsole.error(\"unknown Class:\"+Class)\n\t\t}\n\t\tpt.constructor = Class\n\t}\n}\n\n// Node Types\nvar NodeType = {}\nvar ELEMENT_NODE                = NodeType.ELEMENT_NODE                = 1;\nvar ATTRIBUTE_NODE              = NodeType.ATTRIBUTE_NODE              = 2;\nvar TEXT_NODE                   = NodeType.TEXT_NODE                   = 3;\nvar CDATA_SECTION_NODE          = NodeType.CDATA_SECTION_NODE          = 4;\nvar ENTITY_REFERENCE_NODE       = NodeType.ENTITY_REFERENCE_NODE       = 5;\nvar ENTITY_NODE                 = NodeType.ENTITY_NODE                 = 6;\nvar PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7;\nvar COMMENT_NODE                = NodeType.COMMENT_NODE                = 8;\nvar DOCUMENT_NODE               = NodeType.DOCUMENT_NODE               = 9;\nvar DOCUMENT_TYPE_NODE          = NodeType.DOCUMENT_TYPE_NODE          = 10;\nvar DOCUMENT_FRAGMENT_NODE      = NodeType.DOCUMENT_FRAGMENT_NODE      = 11;\nvar NOTATION_NODE               = NodeType.NOTATION_NODE               = 12;\n\n// ExceptionCode\nvar ExceptionCode = {}\nvar ExceptionMessage = {};\nvar INDEX_SIZE_ERR              = ExceptionCode.INDEX_SIZE_ERR              = ((ExceptionMessage[1]=\"Index size error\"),1);\nvar DOMSTRING_SIZE_ERR          = ExceptionCode.DOMSTRING_SIZE_ERR          = ((ExceptionMessage[2]=\"DOMString size error\"),2);\nvar HIERARCHY_REQUEST_ERR       = ExceptionCode.HIERARCHY_REQUEST_ERR       = ((ExceptionMessage[3]=\"Hierarchy request error\"),3);\nvar WRONG_DOCUMENT_ERR          = ExceptionCode.WRONG_DOCUMENT_ERR          = ((ExceptionMessage[4]=\"Wrong document\"),4);\nvar INVALID_CHARACTER_ERR       = ExceptionCode.INVALID_CHARACTER_ERR       = ((ExceptionMessage[5]=\"Invalid character\"),5);\nvar NO_DATA_ALLOWED_ERR         = ExceptionCode.NO_DATA_ALLOWED_ERR         = ((ExceptionMessage[6]=\"No data allowed\"),6);\nvar NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]=\"No modification allowed\"),7);\nvar NOT_FOUND_ERR               = ExceptionCode.NOT_FOUND_ERR               = ((ExceptionMessage[8]=\"Not found\"),8);\nvar NOT_SUPPORTED_ERR           = ExceptionCode.NOT_SUPPORTED_ERR           = ((ExceptionMessage[9]=\"Not supported\"),9);\nvar INUSE_ATTRIBUTE_ERR         = ExceptionCode.INUSE_ATTRIBUTE_ERR         = ((ExceptionMessage[10]=\"Attribute in use\"),10);\n//level2\nvar INVALID_STATE_ERR        \t= ExceptionCode.INVALID_STATE_ERR        \t= ((ExceptionMessage[11]=\"Invalid state\"),11);\nvar SYNTAX_ERR               \t= ExceptionCode.SYNTAX_ERR               \t= ((ExceptionMessage[12]=\"Syntax error\"),12);\nvar INVALID_MODIFICATION_ERR \t= ExceptionCode.INVALID_MODIFICATION_ERR \t= ((ExceptionMessage[13]=\"Invalid modification\"),13);\nvar NAMESPACE_ERR            \t= ExceptionCode.NAMESPACE_ERR           \t= ((ExceptionMessage[14]=\"Invalid namespace\"),14);\nvar INVALID_ACCESS_ERR       \t= ExceptionCode.INVALID_ACCESS_ERR      \t= ((ExceptionMessage[15]=\"Invalid access\"),15);\n\n/**\n * DOM Level 2\n * Object DOMException\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html\n * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n */\nfunction DOMException(code, message) {\n\tif(message instanceof Error){\n\t\tvar error = message;\n\t}else{\n\t\terror = this;\n\t\tError.call(this, ExceptionMessage[code]);\n\t\tthis.message = ExceptionMessage[code];\n\t\tif(Error.captureStackTrace) Error.captureStackTrace(this, DOMException);\n\t}\n\terror.code = code;\n\tif(message) this.message = this.message + \": \" + message;\n\treturn error;\n};\nDOMException.prototype = Error.prototype;\ncopy(ExceptionCode,DOMException)\n\n/**\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177\n * The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live.\n * The items in the NodeList are accessible via an integral index, starting from 0.\n */\nfunction NodeList() {\n};\nNodeList.prototype = {\n\t/**\n\t * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive.\n\t * @standard level1\n\t */\n\tlength:0,\n\t/**\n\t * Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null.\n\t * @standard level1\n\t * @param index  unsigned long\n\t *   Index into the collection.\n\t * @return Node\n\t * \tThe node at the indexth position in the NodeList, or null if that is not a valid index.\n\t */\n\titem: function(index) {\n\t\treturn index >= 0 && index < this.length ? this[index] : null;\n\t},\n\ttoString:function(isHTML,nodeFilter){\n\t\tfor(var buf = [], i = 0;i<this.length;i++){\n\t\t\tserializeToString(this[i],buf,isHTML,nodeFilter);\n\t\t}\n\t\treturn buf.join('');\n\t},\n\t/**\n\t * @private\n\t * @param {function (Node):boolean} predicate\n\t * @returns {Node[]}\n\t */\n\tfilter: function (predicate) {\n\t\treturn Array.prototype.filter.call(this, predicate);\n\t},\n\t/**\n\t * @private\n\t * @param {Node} item\n\t * @returns {number}\n\t */\n\tindexOf: function (item) {\n\t\treturn Array.prototype.indexOf.call(this, item);\n\t},\n};\n\nfunction LiveNodeList(node,refresh){\n\tthis._node = node;\n\tthis._refresh = refresh\n\t_updateLiveList(this);\n}\nfunction _updateLiveList(list){\n\tvar inc = list._node._inc || list._node.ownerDocument._inc;\n\tif (list._inc !== inc) {\n\t\tvar ls = list._refresh(list._node);\n\t\t__set__(list,'length',ls.length);\n\t\tif (!list.$$length || ls.length < list.$$length) {\n\t\t\tfor (var i = ls.length; i in list; i++) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(list, i)) {\n\t\t\t\t\tdelete list[i];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcopy(ls,list);\n\t\tlist._inc = inc;\n\t}\n}\nLiveNodeList.prototype.item = function(i){\n\t_updateLiveList(this);\n\treturn this[i] || null;\n}\n\n_extends(LiveNodeList,NodeList);\n\n/**\n * Objects implementing the NamedNodeMap interface are used\n * to represent collections of nodes that can be accessed by name.\n * Note that NamedNodeMap does not inherit from NodeList;\n * NamedNodeMaps are not maintained in any particular order.\n * Objects contained in an object implementing NamedNodeMap may also be accessed by an ordinal index,\n * but this is simply to allow convenient enumeration of the contents of a NamedNodeMap,\n * and does not imply that the DOM specifies an order to these Nodes.\n * NamedNodeMap objects in the DOM are live.\n * used for attributes or DocumentType entities\n */\nfunction NamedNodeMap() {\n};\n\nfunction _findNodeIndex(list,node){\n\tvar i = list.length;\n\twhile(i--){\n\t\tif(list[i] === node){return i}\n\t}\n}\n\nfunction _addNamedNode(el,list,newAttr,oldAttr){\n\tif(oldAttr){\n\t\tlist[_findNodeIndex(list,oldAttr)] = newAttr;\n\t}else{\n\t\tlist[list.length++] = newAttr;\n\t}\n\tif(el){\n\t\tnewAttr.ownerElement = el;\n\t\tvar doc = el.ownerDocument;\n\t\tif(doc){\n\t\t\toldAttr && _onRemoveAttribute(doc,el,oldAttr);\n\t\t\t_onAddAttribute(doc,el,newAttr);\n\t\t}\n\t}\n}\nfunction _removeNamedNode(el,list,attr){\n\t//console.log('remove attr:'+attr)\n\tvar i = _findNodeIndex(list,attr);\n\tif(i>=0){\n\t\tvar lastIndex = list.length-1\n\t\twhile(i<lastIndex){\n\t\t\tlist[i] = list[++i]\n\t\t}\n\t\tlist.length = lastIndex;\n\t\tif(el){\n\t\t\tvar doc = el.ownerDocument;\n\t\t\tif(doc){\n\t\t\t\t_onRemoveAttribute(doc,el,attr);\n\t\t\t\tattr.ownerElement = null;\n\t\t\t}\n\t\t}\n\t}else{\n\t\tthrow new DOMException(NOT_FOUND_ERR,new Error(el.tagName+'@'+attr))\n\t}\n}\nNamedNodeMap.prototype = {\n\tlength:0,\n\titem:NodeList.prototype.item,\n\tgetNamedItem: function(key) {\n//\t\tif(key.indexOf(':')>0 || key == 'xmlns'){\n//\t\t\treturn null;\n//\t\t}\n\t\t//console.log()\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar attr = this[i];\n\t\t\t//console.log(attr.nodeName,key)\n\t\t\tif(attr.nodeName == key){\n\t\t\t\treturn attr;\n\t\t\t}\n\t\t}\n\t},\n\tsetNamedItem: function(attr) {\n\t\tvar el = attr.ownerElement;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\tvar oldAttr = this.getNamedItem(attr.nodeName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\t/* returns Node */\n\tsetNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR\n\t\tvar el = attr.ownerElement, oldAttr;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\toldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\n\t/* returns Node */\n\tremoveNamedItem: function(key) {\n\t\tvar attr = this.getNamedItem(key);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\n\n\t},// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR\n\n\t//for level2\n\tremoveNamedItemNS:function(namespaceURI,localName){\n\t\tvar attr = this.getNamedItemNS(namespaceURI,localName);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\t},\n\tgetNamedItemNS: function(namespaceURI, localName) {\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar node = this[i];\n\t\t\tif(node.localName == localName && node.namespaceURI == namespaceURI){\n\t\t\t\treturn node;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n};\n\n/**\n * The DOMImplementation interface represents an object providing methods\n * which are not dependent on any particular document.\n * Such an object is returned by the `Document.implementation` property.\n *\n * __The individual methods describe the differences compared to the specs.__\n *\n * @constructor\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation MDN\n * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490 DOM Level 1 Core (Initial)\n * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-102161490 DOM Level 2 Core\n * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-102161490 DOM Level 3 Core\n * @see https://dom.spec.whatwg.org/#domimplementation DOM Living Standard\n */\nfunction DOMImplementation() {\n}\n\nDOMImplementation.prototype = {\n\t/**\n\t * The DOMImplementation.hasFeature() method returns a Boolean flag indicating if a given feature is supported.\n\t * The different implementations fairly diverged in what kind of features were reported.\n\t * The latest version of the spec settled to force this method to always return true, where the functionality was accurate and in use.\n\t *\n\t * @deprecated It is deprecated and modern browsers return true in all cases.\n\t *\n\t * @param {string} feature\n\t * @param {string} [version]\n\t * @returns {boolean} always true\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/hasFeature MDN\n\t * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-5CED94D7 DOM Level 1 Core\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-hasfeature DOM Living Standard\n\t */\n\thasFeature: function(feature, version) {\n\t\t\treturn true;\n\t},\n\t/**\n\t * Creates an XML Document object of the specified type with its document element.\n\t *\n\t * __It behaves slightly different from the description in the living standard__:\n\t * - There is no interface/class `XMLDocument`, it returns a `Document` instance.\n\t * - `contentType`, `encoding`, `mode`, `origin`, `url` fields are currently not declared.\n\t * - this implementation is not validating names or qualified names\n\t *   (when parsing XML strings, the SAX parser takes care of that)\n\t *\n\t * @param {string|null} namespaceURI\n\t * @param {string} qualifiedName\n\t * @param {DocumentType=null} doctype\n\t * @returns {Document}\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocument MDN\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocument DOM Level 2 Core (initial)\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument  DOM Level 2 Core\n\t *\n\t * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract\n\t * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names\n\t * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names\n\t */\n\tcreateDocument: function(namespaceURI,  qualifiedName, doctype){\n\t\tvar doc = new Document();\n\t\tdoc.implementation = this;\n\t\tdoc.childNodes = new NodeList();\n\t\tdoc.doctype = doctype || null;\n\t\tif (doctype){\n\t\t\tdoc.appendChild(doctype);\n\t\t}\n\t\tif (qualifiedName){\n\t\t\tvar root = doc.createElementNS(namespaceURI, qualifiedName);\n\t\t\tdoc.appendChild(root);\n\t\t}\n\t\treturn doc;\n\t},\n\t/**\n\t * Returns a doctype, with the given `qualifiedName`, `publicId`, and `systemId`.\n\t *\n\t * __This behavior is slightly different from the in the specs__:\n\t * - this implementation is not validating names or qualified names\n\t *   (when parsing XML strings, the SAX parser takes care of that)\n\t *\n\t * @param {string} qualifiedName\n\t * @param {string} [publicId]\n\t * @param {string} [systemId]\n\t * @returns {DocumentType} which can either be used with `DOMImplementation.createDocument` upon document creation\n\t * \t\t\t\t  or can be put into the document via methods like `Node.insertBefore()` or `Node.replaceChild()`\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocumentType MDN\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocType DOM Level 2 Core\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype DOM Living Standard\n\t *\n\t * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract\n\t * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names\n\t * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names\n\t */\n\tcreateDocumentType: function(qualifiedName, publicId, systemId){\n\t\tvar node = new DocumentType();\n\t\tnode.name = qualifiedName;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.publicId = publicId || '';\n\t\tnode.systemId = systemId || '';\n\n\t\treturn node;\n\t}\n};\n\n\n/**\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247\n */\n\nfunction Node() {\n};\n\nNode.prototype = {\n\tfirstChild : null,\n\tlastChild : null,\n\tpreviousSibling : null,\n\tnextSibling : null,\n\tattributes : null,\n\tparentNode : null,\n\tchildNodes : null,\n\townerDocument : null,\n\tnodeValue : null,\n\tnamespaceURI : null,\n\tprefix : null,\n\tlocalName : null,\n\t// Modified in DOM Level 2:\n\tinsertBefore:function(newChild, refChild){//raises\n\t\treturn _insertBefore(this,newChild,refChild);\n\t},\n\treplaceChild:function(newChild, oldChild){//raises\n\t\t_insertBefore(this, newChild,oldChild, assertPreReplacementValidityInDocument);\n\t\tif(oldChild){\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t},\n\tremoveChild:function(oldChild){\n\t\treturn _removeChild(this,oldChild);\n\t},\n\tappendChild:function(newChild){\n\t\treturn this.insertBefore(newChild,null);\n\t},\n\thasChildNodes:function(){\n\t\treturn this.firstChild != null;\n\t},\n\tcloneNode:function(deep){\n\t\treturn cloneNode(this.ownerDocument||this,this,deep);\n\t},\n\t// Modified in DOM Level 2:\n\tnormalize:function(){\n\t\tvar child = this.firstChild;\n\t\twhile(child){\n\t\t\tvar next = child.nextSibling;\n\t\t\tif(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){\n\t\t\t\tthis.removeChild(next);\n\t\t\t\tchild.appendData(next.data);\n\t\t\t}else{\n\t\t\t\tchild.normalize();\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t}\n\t},\n  \t// Introduced in DOM Level 2:\n\tisSupported:function(feature, version){\n\t\treturn this.ownerDocument.implementation.hasFeature(feature,version);\n\t},\n    // Introduced in DOM Level 2:\n    hasAttributes:function(){\n    \treturn this.attributes.length>0;\n    },\n\t/**\n\t * Look up the prefix associated to the given namespace URI, starting from this node.\n\t * **The default namespace declarations are ignored by this method.**\n\t * See Namespace Prefix Lookup for details on the algorithm used by this method.\n\t *\n\t * _Note: The implementation seems to be incomplete when compared to the algorithm described in the specs._\n\t *\n\t * @param {string | null} namespaceURI\n\t * @returns {string | null}\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespacePrefix\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/namespaces-algorithms.html#lookupNamespacePrefixAlgo\n\t * @see https://dom.spec.whatwg.org/#dom-node-lookupprefix\n\t * @see https://github.com/xmldom/xmldom/issues/322\n\t */\n    lookupPrefix:function(namespaceURI){\n    \tvar el = this;\n    \twhile(el){\n    \t\tvar map = el._nsMap;\n    \t\t//console.dir(map)\n    \t\tif(map){\n    \t\t\tfor(var n in map){\n\t\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(map, n) && map[n] === namespaceURI) {\n\t\t\t\t\t\t\treturn n;\n\t\t\t\t\t\t}\n    \t\t\t}\n    \t\t}\n    \t\tel = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;\n    \t}\n    \treturn null;\n    },\n    // Introduced in DOM Level 3:\n    lookupNamespaceURI:function(prefix){\n    \tvar el = this;\n    \twhile(el){\n    \t\tvar map = el._nsMap;\n    \t\t//console.dir(map)\n    \t\tif(map){\n    \t\t\tif(Object.prototype.hasOwnProperty.call(map, prefix)){\n    \t\t\t\treturn map[prefix] ;\n    \t\t\t}\n    \t\t}\n    \t\tel = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;\n    \t}\n    \treturn null;\n    },\n    // Introduced in DOM Level 3:\n    isDefaultNamespace:function(namespaceURI){\n    \tvar prefix = this.lookupPrefix(namespaceURI);\n    \treturn prefix == null;\n    }\n};\n\n\nfunction _xmlEncoder(c){\n\treturn c == '<' && '&lt;' ||\n         c == '>' && '&gt;' ||\n         c == '&' && '&amp;' ||\n         c == '\"' && '&quot;' ||\n         '&#'+c.charCodeAt()+';'\n}\n\n\ncopy(NodeType,Node);\ncopy(NodeType,Node.prototype);\n\n/**\n * @param callback return true for continue,false for break\n * @return boolean true: break visit;\n */\nfunction _visitNode(node,callback){\n\tif(callback(node)){\n\t\treturn true;\n\t}\n\tif(node = node.firstChild){\n\t\tdo{\n\t\t\tif(_visitNode(node,callback)){return true}\n        }while(node=node.nextSibling)\n    }\n}\n\n\n\nfunction Document(){\n\tthis.ownerDocument = this;\n}\n\nfunction _onAddAttribute(doc,el,newAttr){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns === NAMESPACE.XMLNS){\n\t\t//update namespace\n\t\tel._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value\n\t}\n}\n\nfunction _onRemoveAttribute(doc,el,newAttr,remove){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns === NAMESPACE.XMLNS){\n\t\t//update namespace\n\t\tdelete el._nsMap[newAttr.prefix?newAttr.localName:'']\n\t}\n}\n\n/**\n * Updates `el.childNodes`, updating the indexed items and it's `length`.\n * Passing `newChild` means it will be appended.\n * Otherwise it's assumed that an item has been removed,\n * and `el.firstNode` and it's `.nextSibling` are used\n * to walk the current list of child nodes.\n *\n * @param {Document} doc\n * @param {Node} el\n * @param {Node} [newChild]\n * @private\n */\nfunction _onUpdateChild (doc, el, newChild) {\n\tif(doc && doc._inc){\n\t\tdoc._inc++;\n\t\t//update childNodes\n\t\tvar cs = el.childNodes;\n\t\tif (newChild) {\n\t\t\tcs[cs.length++] = newChild;\n\t\t} else {\n\t\t\tvar child = el.firstChild;\n\t\t\tvar i = 0;\n\t\t\twhile (child) {\n\t\t\t\tcs[i++] = child;\n\t\t\t\tchild = child.nextSibling;\n\t\t\t}\n\t\t\tcs.length = i;\n\t\t\tdelete cs[cs.length];\n\t\t}\n\t}\n}\n\n/**\n * Removes the connections between `parentNode` and `child`\n * and any existing `child.previousSibling` or `child.nextSibling`.\n *\n * @see https://github.com/xmldom/xmldom/issues/135\n * @see https://github.com/xmldom/xmldom/issues/145\n *\n * @param {Node} parentNode\n * @param {Node} child\n * @returns {Node} the child that was removed.\n * @private\n */\nfunction _removeChild (parentNode, child) {\n\tvar previous = child.previousSibling;\n\tvar next = child.nextSibling;\n\tif (previous) {\n\t\tprevious.nextSibling = next;\n\t} else {\n\t\tparentNode.firstChild = next;\n\t}\n\tif (next) {\n\t\tnext.previousSibling = previous;\n\t} else {\n\t\tparentNode.lastChild = previous;\n\t}\n\tchild.parentNode = null;\n\tchild.previousSibling = null;\n\tchild.nextSibling = null;\n\t_onUpdateChild(parentNode.ownerDocument, parentNode);\n\treturn child;\n}\n\n/**\n * Returns `true` if `node` can be a parent for insertion.\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasValidParentNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(node.nodeType === Node.DOCUMENT_NODE || node.nodeType === Node.DOCUMENT_FRAGMENT_NODE || node.nodeType === Node.ELEMENT_NODE)\n\t);\n}\n\n/**\n * Returns `true` if `node` can be inserted according to it's `nodeType`.\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasInsertableNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(isElementNode(node) ||\n\t\t\tisTextNode(node) ||\n\t\t\tisDocTypeNode(node) ||\n\t\t\tnode.nodeType === Node.DOCUMENT_FRAGMENT_NODE ||\n\t\t\tnode.nodeType === Node.COMMENT_NODE ||\n\t\t\tnode.nodeType === Node.PROCESSING_INSTRUCTION_NODE)\n\t);\n}\n\n/**\n * Returns true if `node` is a DOCTYPE node\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isDocTypeNode(node) {\n\treturn node && node.nodeType === Node.DOCUMENT_TYPE_NODE;\n}\n\n/**\n * Returns true if the node is an element\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isElementNode(node) {\n\treturn node && node.nodeType === Node.ELEMENT_NODE;\n}\n/**\n * Returns true if `node` is a text node\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isTextNode(node) {\n\treturn node && node.nodeType === Node.TEXT_NODE;\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Document} doc The document node\n * @param {Node} child the node that would become the nextSibling if the element would be inserted\n * @returns {boolean} `true` if an element can be inserted before child\n * @private\n * https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction isElementInsertionPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\tif (find(parentChildNodes, isElementNode) || isDocTypeNode(child)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Node} doc The document node\n * @param {Node} child the node that would become the nextSibling if the element would be inserted\n * @returns {boolean} `true` if an element can be inserted before child\n * @private\n * https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction isElementReplacementPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\n\tfunction hasElementChildThatIsNotChild(node) {\n\t\treturn isElementNode(node) && node !== child;\n\t}\n\n\tif (find(parentChildNodes, hasElementChildThatIsNotChild)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * @private\n * Steps 1-5 of the checks before inserting and before replacing a child are the same.\n *\n * @param {Node} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node=} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidity1to5(parent, node, child) {\n\t// 1. If `parent` is not a Document, DocumentFragment, or Element node, then throw a \"HierarchyRequestError\" DOMException.\n\tif (!hasValidParentNodeType(parent)) {\n\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Unexpected parent node type ' + parent.nodeType);\n\t}\n\t// 2. If `node` is a host-including inclusive ancestor of `parent`, then throw a \"HierarchyRequestError\" DOMException.\n\t// not implemented!\n\t// 3. If `child` is non-null and its parent is not `parent`, then throw a \"NotFoundError\" DOMException.\n\tif (child && child.parentNode !== parent) {\n\t\tthrow new DOMException(NOT_FOUND_ERR, 'child not in parent');\n\t}\n\tif (\n\t\t// 4. If `node` is not a DocumentFragment, DocumentType, Element, or CharacterData node, then throw a \"HierarchyRequestError\" DOMException.\n\t\t!hasInsertableNodeType(node) ||\n\t\t// 5. If either `node` is a Text node and `parent` is a document,\n\t\t// the sax parser currently adds top level text nodes, this will be fixed in 0.9.0\n\t\t// || (node.nodeType === Node.TEXT_NODE && parent.nodeType === Node.DOCUMENT_NODE)\n\t\t// or `node` is a doctype and `parent` is not a document, then throw a \"HierarchyRequestError\" DOMException.\n\t\t(isDocTypeNode(node) && parent.nodeType !== Node.DOCUMENT_NODE)\n\t) {\n\t\tthrow new DOMException(\n\t\t\tHIERARCHY_REQUEST_ERR,\n\t\t\t'Unexpected node type ' + node.nodeType + ' for parent node type ' + parent.nodeType\n\t\t);\n\t}\n}\n\n/**\n * @private\n * Step 6 of the checks before inserting and before replacing a child are different.\n *\n * @param {Document} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node | undefined} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If node has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child,\n\t\t// `child` is a doctype, or `child` is non-null and a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child, `child` is a doctype,\n\t\t// or `child` is non-null and a doctype is following `child`.\n\t\tif (!isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\t// `parent` has a doctype child,\n\t\tif (find(parentChildNodes, isDocTypeNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// `child` is non-null and an element is preceding `child`,\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t\t// or `child` is null and `parent` has an element child.\n\t\tif (!child && parentElementChild) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can not be appended since element is present');\n\t\t}\n\t}\n}\n\n/**\n * @private\n * Step 6 of the checks before inserting and before replacing a child are different.\n *\n * @param {Document} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node | undefined} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreReplacementValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If `node` has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (!isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\tfunction hasDoctypeChildThatIsNotChild(node) {\n\t\t\treturn isDocTypeNode(node) && node !== child;\n\t\t}\n\n\t\t// `parent` has a doctype child that is not `child`,\n\t\tif (find(parentChildNodes, hasDoctypeChildThatIsNotChild)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// or an element is preceding `child`.\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t}\n}\n\n/**\n * @private\n * @param {Node} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node=} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction _insertBefore(parent, node, child, _inDocumentAssertion) {\n\t// To ensure pre-insertion validity of a node into a parent before a child, run these steps:\n\tassertPreInsertionValidity1to5(parent, node, child);\n\n\t// If parent is a document, and any of the statements below, switched on the interface node implements,\n\t// are true, then throw a \"HierarchyRequestError\" DOMException.\n\tif (parent.nodeType === Node.DOCUMENT_NODE) {\n\t\t(_inDocumentAssertion || assertPreInsertionValidityInDocument)(parent, node, child);\n\t}\n\n\tvar cp = node.parentNode;\n\tif(cp){\n\t\tcp.removeChild(node);//remove and update\n\t}\n\tif(node.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\tvar newFirst = node.firstChild;\n\t\tif (newFirst == null) {\n\t\t\treturn node;\n\t\t}\n\t\tvar newLast = node.lastChild;\n\t}else{\n\t\tnewFirst = newLast = node;\n\t}\n\tvar pre = child ? child.previousSibling : parent.lastChild;\n\n\tnewFirst.previousSibling = pre;\n\tnewLast.nextSibling = child;\n\n\n\tif(pre){\n\t\tpre.nextSibling = newFirst;\n\t}else{\n\t\tparent.firstChild = newFirst;\n\t}\n\tif(child == null){\n\t\tparent.lastChild = newLast;\n\t}else{\n\t\tchild.previousSibling = newLast;\n\t}\n\tdo{\n\t\tnewFirst.parentNode = parent;\n\t}while(newFirst !== newLast && (newFirst= newFirst.nextSibling))\n\t_onUpdateChild(parent.ownerDocument||parent, parent);\n\t//console.log(parent.lastChild.nextSibling == null)\n\tif (node.nodeType == DOCUMENT_FRAGMENT_NODE) {\n\t\tnode.firstChild = node.lastChild = null;\n\t}\n\treturn node;\n}\n\n/**\n * Appends `newChild` to `parentNode`.\n * If `newChild` is already connected to a `parentNode` it is first removed from it.\n *\n * @see https://github.com/xmldom/xmldom/issues/135\n * @see https://github.com/xmldom/xmldom/issues/145\n * @param {Node} parentNode\n * @param {Node} newChild\n * @returns {Node}\n * @private\n */\nfunction _appendSingleChild (parentNode, newChild) {\n\tif (newChild.parentNode) {\n\t\tnewChild.parentNode.removeChild(newChild);\n\t}\n\tnewChild.parentNode = parentNode;\n\tnewChild.previousSibling = parentNode.lastChild;\n\tnewChild.nextSibling = null;\n\tif (newChild.previousSibling) {\n\t\tnewChild.previousSibling.nextSibling = newChild;\n\t} else {\n\t\tparentNode.firstChild = newChild;\n\t}\n\tparentNode.lastChild = newChild;\n\t_onUpdateChild(parentNode.ownerDocument, parentNode, newChild);\n\treturn newChild;\n}\n\nDocument.prototype = {\n\t//implementation : null,\n\tnodeName :  '#document',\n\tnodeType :  DOCUMENT_NODE,\n\t/**\n\t * The DocumentType node of the document.\n\t *\n\t * @readonly\n\t * @type DocumentType\n\t */\n\tdoctype :  null,\n\tdocumentElement :  null,\n\t_inc : 1,\n\n\tinsertBefore :  function(newChild, refChild){//raises\n\t\tif(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){\n\t\t\tvar child = newChild.firstChild;\n\t\t\twhile(child){\n\t\t\t\tvar next = child.nextSibling;\n\t\t\t\tthis.insertBefore(child,refChild);\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t\treturn newChild;\n\t\t}\n\t\t_insertBefore(this, newChild, refChild);\n\t\tnewChild.ownerDocument = this;\n\t\tif (this.documentElement === null && newChild.nodeType === ELEMENT_NODE) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\n\t\treturn newChild;\n\t},\n\tremoveChild :  function(oldChild){\n\t\tif(this.documentElement == oldChild){\n\t\t\tthis.documentElement = null;\n\t\t}\n\t\treturn _removeChild(this,oldChild);\n\t},\n\treplaceChild: function (newChild, oldChild) {\n\t\t//raises\n\t\t_insertBefore(this, newChild, oldChild, assertPreReplacementValidityInDocument);\n\t\tnewChild.ownerDocument = this;\n\t\tif (oldChild) {\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t\tif (isElementNode(newChild)) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\t},\n\t// Introduced in DOM Level 2:\n\timportNode : function(importedNode,deep){\n\t\treturn importNode(this,importedNode,deep);\n\t},\n\t// Introduced in DOM Level 2:\n\tgetElementById :\tfunction(id){\n\t\tvar rtv = null;\n\t\t_visitNode(this.documentElement,function(node){\n\t\t\tif(node.nodeType == ELEMENT_NODE){\n\t\t\t\tif(node.getAttribute('id') == id){\n\t\t\t\t\trtv = node;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\treturn rtv;\n\t},\n\n\t/**\n\t * The `getElementsByClassName` method of `Document` interface returns an array-like object\n\t * of all child elements which have **all** of the given class name(s).\n\t *\n\t * Returns an empty list if `classeNames` is an empty string or only contains HTML white space characters.\n\t *\n\t *\n\t * Warning: This is a live LiveNodeList.\n\t * Changes in the DOM will reflect in the array as the changes occur.\n\t * If an element selected by this array no longer qualifies for the selector,\n\t * it will automatically be removed. Be aware of this for iteration purposes.\n\t *\n\t * @param {string} classNames is a string representing the class name(s) to match; multiple class names are separated by (ASCII-)whitespace\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName\n\t * @see https://dom.spec.whatwg.org/#concept-getelementsbyclassname\n\t */\n\tgetElementsByClassName: function(classNames) {\n\t\tvar classNamesSet = toOrderedSet(classNames)\n\t\treturn new LiveNodeList(this, function(base) {\n\t\t\tvar ls = [];\n\t\t\tif (classNamesSet.length > 0) {\n\t\t\t\t_visitNode(base.documentElement, function(node) {\n\t\t\t\t\tif(node !== base && node.nodeType === ELEMENT_NODE) {\n\t\t\t\t\t\tvar nodeClassNames = node.getAttribute('class')\n\t\t\t\t\t\t// can be null if the attribute does not exist\n\t\t\t\t\t\tif (nodeClassNames) {\n\t\t\t\t\t\t\t// before splitting and iterating just compare them for the most common case\n\t\t\t\t\t\t\tvar matches = classNames === nodeClassNames;\n\t\t\t\t\t\t\tif (!matches) {\n\t\t\t\t\t\t\t\tvar nodeClassNamesSet = toOrderedSet(nodeClassNames)\n\t\t\t\t\t\t\t\tmatches = classNamesSet.every(arrayIncludes(nodeClassNamesSet))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(matches) {\n\t\t\t\t\t\t\t\tls.push(node);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn ls;\n\t\t});\n\t},\n\n\t//document factory method:\n\tcreateElement :\tfunction(tagName){\n\t\tvar node = new Element();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = tagName;\n\t\tnode.tagName = tagName;\n\t\tnode.localName = tagName;\n\t\tnode.childNodes = new NodeList();\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\tcreateDocumentFragment :\tfunction(){\n\t\tvar node = new DocumentFragment();\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\treturn node;\n\t},\n\tcreateTextNode :\tfunction(data){\n\t\tvar node = new Text();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateComment :\tfunction(data){\n\t\tvar node = new Comment();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateCDATASection :\tfunction(data){\n\t\tvar node = new CDATASection();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateProcessingInstruction :\tfunction(target,data){\n\t\tvar node = new ProcessingInstruction();\n\t\tnode.ownerDocument = this;\n\t\tnode.tagName = node.nodeName = node.target = target;\n\t\tnode.nodeValue = node.data = data;\n\t\treturn node;\n\t},\n\tcreateAttribute :\tfunction(name){\n\t\tvar node = new Attr();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.name = name;\n\t\tnode.nodeName\t= name;\n\t\tnode.localName = name;\n\t\tnode.specified = true;\n\t\treturn node;\n\t},\n\tcreateEntityReference :\tfunction(name){\n\t\tvar node = new EntityReference();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.nodeName\t= name;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateElementNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Element();\n\t\tvar pl = qualifiedName.split(':');\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tnode.childNodes = new NodeList();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.tagName = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\t//el.prefix = null;\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateAttributeNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Attr();\n\t\tvar pl = qualifiedName.split(':');\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.name = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tnode.specified = true;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\t//el.prefix = null;\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\treturn node;\n\t}\n};\n_extends(Document,Node);\n\n\nfunction Element() {\n\tthis._nsMap = {};\n};\nElement.prototype = {\n\tnodeType : ELEMENT_NODE,\n\thasAttribute : function(name){\n\t\treturn this.getAttributeNode(name)!=null;\n\t},\n\tgetAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name);\n\t\treturn attr && attr.value || '';\n\t},\n\tgetAttributeNode : function(name){\n\t\treturn this.attributes.getNamedItem(name);\n\t},\n\tsetAttribute : function(name, value){\n\t\tvar attr = this.ownerDocument.createAttribute(name);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr)\n\t},\n\tremoveAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name)\n\t\tattr && this.removeAttributeNode(attr);\n\t},\n\n\t//four real opeartion method\n\tappendChild:function(newChild){\n\t\tif(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\t\treturn this.insertBefore(newChild,null);\n\t\t}else{\n\t\t\treturn _appendSingleChild(this,newChild);\n\t\t}\n\t},\n\tsetAttributeNode : function(newAttr){\n\t\treturn this.attributes.setNamedItem(newAttr);\n\t},\n\tsetAttributeNodeNS : function(newAttr){\n\t\treturn this.attributes.setNamedItemNS(newAttr);\n\t},\n\tremoveAttributeNode : function(oldAttr){\n\t\t//console.log(this == oldAttr.ownerElement)\n\t\treturn this.attributes.removeNamedItem(oldAttr.nodeName);\n\t},\n\t//get real attribute name,and remove it by removeAttributeNode\n\tremoveAttributeNS : function(namespaceURI, localName){\n\t\tvar old = this.getAttributeNodeNS(namespaceURI, localName);\n\t\told && this.removeAttributeNode(old);\n\t},\n\n\thasAttributeNS : function(namespaceURI, localName){\n\t\treturn this.getAttributeNodeNS(namespaceURI, localName)!=null;\n\t},\n\tgetAttributeNS : function(namespaceURI, localName){\n\t\tvar attr = this.getAttributeNodeNS(namespaceURI, localName);\n\t\treturn attr && attr.value || '';\n\t},\n\tsetAttributeNS : function(namespaceURI, qualifiedName, value){\n\t\tvar attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr)\n\t},\n\tgetAttributeNodeNS : function(namespaceURI, localName){\n\t\treturn this.attributes.getNamedItemNS(namespaceURI, localName);\n\t},\n\n\tgetElementsByTagName : function(tagName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t});\n\t},\n\tgetElementsByTagNameNS : function(namespaceURI, localName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\n\t\t});\n\t}\n};\nDocument.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;\nDocument.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;\n\n\n_extends(Element,Node);\nfunction Attr() {\n};\nAttr.prototype.nodeType = ATTRIBUTE_NODE;\n_extends(Attr,Node);\n\n\nfunction CharacterData() {\n};\nCharacterData.prototype = {\n\tdata : '',\n\tsubstringData : function(offset, count) {\n\t\treturn this.data.substring(offset, offset+count);\n\t},\n\tappendData: function(text) {\n\t\ttext = this.data+text;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t},\n\tinsertData: function(offset,text) {\n\t\tthis.replaceData(offset,0,text);\n\n\t},\n\tappendChild:function(newChild){\n\t\tthrow new Error(ExceptionMessage[HIERARCHY_REQUEST_ERR])\n\t},\n\tdeleteData: function(offset, count) {\n\t\tthis.replaceData(offset,count,\"\");\n\t},\n\treplaceData: function(offset, count, text) {\n\t\tvar start = this.data.substring(0,offset);\n\t\tvar end = this.data.substring(offset+count);\n\t\ttext = start + text + end;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t}\n}\n_extends(CharacterData,Node);\nfunction Text() {\n};\nText.prototype = {\n\tnodeName : \"#text\",\n\tnodeType : TEXT_NODE,\n\tsplitText : function(offset) {\n\t\tvar text = this.data;\n\t\tvar newText = text.substring(offset);\n\t\ttext = text.substring(0, offset);\n\t\tthis.data = this.nodeValue = text;\n\t\tthis.length = text.length;\n\t\tvar newNode = this.ownerDocument.createTextNode(newText);\n\t\tif(this.parentNode){\n\t\t\tthis.parentNode.insertBefore(newNode, this.nextSibling);\n\t\t}\n\t\treturn newNode;\n\t}\n}\n_extends(Text,CharacterData);\nfunction Comment() {\n};\nComment.prototype = {\n\tnodeName : \"#comment\",\n\tnodeType : COMMENT_NODE\n}\n_extends(Comment,CharacterData);\n\nfunction CDATASection() {\n};\nCDATASection.prototype = {\n\tnodeName : \"#cdata-section\",\n\tnodeType : CDATA_SECTION_NODE\n}\n_extends(CDATASection,CharacterData);\n\n\nfunction DocumentType() {\n};\nDocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;\n_extends(DocumentType,Node);\n\nfunction Notation() {\n};\nNotation.prototype.nodeType = NOTATION_NODE;\n_extends(Notation,Node);\n\nfunction Entity() {\n};\nEntity.prototype.nodeType = ENTITY_NODE;\n_extends(Entity,Node);\n\nfunction EntityReference() {\n};\nEntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;\n_extends(EntityReference,Node);\n\nfunction DocumentFragment() {\n};\nDocumentFragment.prototype.nodeName =\t\"#document-fragment\";\nDocumentFragment.prototype.nodeType =\tDOCUMENT_FRAGMENT_NODE;\n_extends(DocumentFragment,Node);\n\n\nfunction ProcessingInstruction() {\n}\nProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;\n_extends(ProcessingInstruction,Node);\nfunction XMLSerializer(){}\nXMLSerializer.prototype.serializeToString = function(node,isHtml,nodeFilter){\n\treturn nodeSerializeToString.call(node,isHtml,nodeFilter);\n}\nNode.prototype.toString = nodeSerializeToString;\nfunction nodeSerializeToString(isHtml,nodeFilter){\n\tvar buf = [];\n\tvar refNode = this.nodeType == 9 && this.documentElement || this;\n\tvar prefix = refNode.prefix;\n\tvar uri = refNode.namespaceURI;\n\n\tif(uri && prefix == null){\n\t\t//console.log(prefix)\n\t\tvar prefix = refNode.lookupPrefix(uri);\n\t\tif(prefix == null){\n\t\t\t//isHTML = true;\n\t\t\tvar visibleNamespaces=[\n\t\t\t{namespace:uri,prefix:null}\n\t\t\t//{namespace:uri,prefix:''}\n\t\t\t]\n\t\t}\n\t}\n\tserializeToString(this,buf,isHtml,nodeFilter,visibleNamespaces);\n\t//console.log('###',this.nodeType,uri,prefix,buf.join(''))\n\treturn buf.join('');\n}\n\nfunction needNamespaceDefine(node, isHTML, visibleNamespaces) {\n\tvar prefix = node.prefix || '';\n\tvar uri = node.namespaceURI;\n\t// According to [Namespaces in XML 1.0](https://www.w3.org/TR/REC-xml-names/#ns-using) ,\n\t// and more specifically https://www.w3.org/TR/REC-xml-names/#nsc-NoPrefixUndecl :\n\t// > In a namespace declaration for a prefix [...], the attribute value MUST NOT be empty.\n\t// in a similar manner [Namespaces in XML 1.1](https://www.w3.org/TR/xml-names11/#ns-using)\n\t// and more specifically https://www.w3.org/TR/xml-names11/#nsc-NSDeclared :\n\t// > [...] Furthermore, the attribute value [...] must not be an empty string.\n\t// so serializing empty namespace value like xmlns:ds=\"\" would produce an invalid XML document.\n\tif (!uri) {\n\t\treturn false;\n\t}\n\tif (prefix === \"xml\" && uri === NAMESPACE.XML || uri === NAMESPACE.XMLNS) {\n\t\treturn false;\n\t}\n\n\tvar i = visibleNamespaces.length\n\twhile (i--) {\n\t\tvar ns = visibleNamespaces[i];\n\t\t// get namespace prefix\n\t\tif (ns.prefix === prefix) {\n\t\t\treturn ns.namespace !== uri;\n\t\t}\n\t}\n\treturn true;\n}\n/**\n * Well-formed constraint: No < in Attribute Values\n * > The replacement text of any entity referred to directly or indirectly\n * > in an attribute value must not contain a <.\n * @see https://www.w3.org/TR/xml11/#CleanAttrVals\n * @see https://www.w3.org/TR/xml11/#NT-AttValue\n *\n * Literal whitespace other than space that appear in attribute values\n * are serialized as their entity references, so they will be preserved.\n * (In contrast to whitespace literals in the input which are normalized to spaces)\n * @see https://www.w3.org/TR/xml11/#AVNormalize\n * @see https://w3c.github.io/DOM-Parsing/#serializing-an-element-s-attributes\n */\nfunction addSerializedAttribute(buf, qualifiedName, value) {\n\tbuf.push(' ', qualifiedName, '=\"', value.replace(/[<>&\"\\t\\n\\r]/g, _xmlEncoder), '\"')\n}\n\nfunction serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){\n\tif (!visibleNamespaces) {\n\t\tvisibleNamespaces = [];\n\t}\n\n\tif(nodeFilter){\n\t\tnode = nodeFilter(node);\n\t\tif(node){\n\t\t\tif(typeof node == 'string'){\n\t\t\t\tbuf.push(node);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}else{\n\t\t\treturn;\n\t\t}\n\t\t//buf.sort.apply(attrs, attributeSorter);\n\t}\n\n\tswitch(node.nodeType){\n\tcase ELEMENT_NODE:\n\t\tvar attrs = node.attributes;\n\t\tvar len = attrs.length;\n\t\tvar child = node.firstChild;\n\t\tvar nodeName = node.tagName;\n\n\t\tisHTML = NAMESPACE.isHTML(node.namespaceURI) || isHTML\n\n\t\tvar prefixedNodeName = nodeName\n\t\tif (!isHTML && !node.prefix && node.namespaceURI) {\n\t\t\tvar defaultNS\n\t\t\t// lookup current default ns from `xmlns` attribute\n\t\t\tfor (var ai = 0; ai < attrs.length; ai++) {\n\t\t\t\tif (attrs.item(ai).name === 'xmlns') {\n\t\t\t\t\tdefaultNS = attrs.item(ai).value\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!defaultNS) {\n\t\t\t\t// lookup current default ns in visibleNamespaces\n\t\t\t\tfor (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\tvar namespace = visibleNamespaces[nsi]\n\t\t\t\t\tif (namespace.prefix === '' && namespace.namespace === node.namespaceURI) {\n\t\t\t\t\t\tdefaultNS = namespace.namespace\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (defaultNS !== node.namespaceURI) {\n\t\t\t\tfor (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\tvar namespace = visibleNamespaces[nsi]\n\t\t\t\t\tif (namespace.namespace === node.namespaceURI) {\n\t\t\t\t\t\tif (namespace.prefix) {\n\t\t\t\t\t\t\tprefixedNodeName = namespace.prefix + ':' + nodeName\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tbuf.push('<', prefixedNodeName);\n\n\t\tfor(var i=0;i<len;i++){\n\t\t\t// add namespaces for attributes\n\t\t\tvar attr = attrs.item(i);\n\t\t\tif (attr.prefix == 'xmlns') {\n\t\t\t\tvisibleNamespaces.push({ prefix: attr.localName, namespace: attr.value });\n\t\t\t}else if(attr.nodeName == 'xmlns'){\n\t\t\t\tvisibleNamespaces.push({ prefix: '', namespace: attr.value });\n\t\t\t}\n\t\t}\n\n\t\tfor(var i=0;i<len;i++){\n\t\t\tvar attr = attrs.item(i);\n\t\t\tif (needNamespaceDefine(attr,isHTML, visibleNamespaces)) {\n\t\t\t\tvar prefix = attr.prefix||'';\n\t\t\t\tvar uri = attr.namespaceURI;\n\t\t\t\taddSerializedAttribute(buf, prefix ? 'xmlns:' + prefix : \"xmlns\", uri);\n\t\t\t\tvisibleNamespaces.push({ prefix: prefix, namespace:uri });\n\t\t\t}\n\t\t\tserializeToString(attr,buf,isHTML,nodeFilter,visibleNamespaces);\n\t\t}\n\n\t\t// add namespace for current node\n\t\tif (nodeName === prefixedNodeName && needNamespaceDefine(node, isHTML, visibleNamespaces)) {\n\t\t\tvar prefix = node.prefix||'';\n\t\t\tvar uri = node.namespaceURI;\n\t\t\taddSerializedAttribute(buf, prefix ? 'xmlns:' + prefix : \"xmlns\", uri);\n\t\t\tvisibleNamespaces.push({ prefix: prefix, namespace:uri });\n\t\t}\n\n\t\tif(child || isHTML && !/^(?:meta|link|img|br|hr|input)$/i.test(nodeName)){\n\t\t\tbuf.push('>');\n\t\t\t//if is cdata child node\n\t\t\tif(isHTML && /^script$/i.test(nodeName)){\n\t\t\t\twhile(child){\n\t\t\t\t\tif(child.data){\n\t\t\t\t\t\tbuf.push(child.data);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tserializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());\n\t\t\t\t\t}\n\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t}\n\t\t\t}else\n\t\t\t{\n\t\t\t\twhile(child){\n\t\t\t\t\tserializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());\n\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbuf.push('</',prefixedNodeName,'>');\n\t\t}else{\n\t\t\tbuf.push('/>');\n\t\t}\n\t\t// remove added visible namespaces\n\t\t//visibleNamespaces.length = startVisibleNamespaces;\n\t\treturn;\n\tcase DOCUMENT_NODE:\n\tcase DOCUMENT_FRAGMENT_NODE:\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tserializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t\treturn;\n\tcase ATTRIBUTE_NODE:\n\t\treturn addSerializedAttribute(buf, node.name, node.value);\n\tcase TEXT_NODE:\n\t\t/**\n\t\t * The ampersand character (&) and the left angle bracket (<) must not appear in their literal form,\n\t\t * except when used as markup delimiters, or within a comment, a processing instruction, or a CDATA section.\n\t\t * If they are needed elsewhere, they must be escaped using either numeric character references or the strings\n\t\t * `&amp;` and `&lt;` respectively.\n\t\t * The right angle bracket (>) may be represented using the string \" &gt; \", and must, for compatibility,\n\t\t * be escaped using either `&gt;` or a character reference when it appears in the string `]]>` in content,\n\t\t * when that string is not marking the end of a CDATA section.\n\t\t *\n\t\t * In the content of elements, character data is any string of characters\n\t\t * which does not contain the start-delimiter of any markup\n\t\t * and does not include the CDATA-section-close delimiter, `]]>`.\n\t\t *\n\t\t * @see https://www.w3.org/TR/xml/#NT-CharData\n\t\t * @see https://w3c.github.io/DOM-Parsing/#xml-serializing-a-text-node\n\t\t */\n\t\treturn buf.push(node.data\n\t\t\t.replace(/[<&>]/g,_xmlEncoder)\n\t\t);\n\tcase CDATA_SECTION_NODE:\n\t\treturn buf.push( '<![CDATA[',node.data,']]>');\n\tcase COMMENT_NODE:\n\t\treturn buf.push( \"<!--\",node.data,\"-->\");\n\tcase DOCUMENT_TYPE_NODE:\n\t\tvar pubid = node.publicId;\n\t\tvar sysid = node.systemId;\n\t\tbuf.push('<!DOCTYPE ',node.name);\n\t\tif(pubid){\n\t\t\tbuf.push(' PUBLIC ', pubid);\n\t\t\tif (sysid && sysid!='.') {\n\t\t\t\tbuf.push(' ', sysid);\n\t\t\t}\n\t\t\tbuf.push('>');\n\t\t}else if(sysid && sysid!='.'){\n\t\t\tbuf.push(' SYSTEM ', sysid, '>');\n\t\t}else{\n\t\t\tvar sub = node.internalSubset;\n\t\t\tif(sub){\n\t\t\t\tbuf.push(\" [\",sub,\"]\");\n\t\t\t}\n\t\t\tbuf.push(\">\");\n\t\t}\n\t\treturn;\n\tcase PROCESSING_INSTRUCTION_NODE:\n\t\treturn buf.push( \"<?\",node.target,\" \",node.data,\"?>\");\n\tcase ENTITY_REFERENCE_NODE:\n\t\treturn buf.push( '&',node.nodeName,';');\n\t//case ENTITY_NODE:\n\t//case NOTATION_NODE:\n\tdefault:\n\t\tbuf.push('??',node.nodeName);\n\t}\n}\nfunction importNode(doc,node,deep){\n\tvar node2;\n\tswitch (node.nodeType) {\n\tcase ELEMENT_NODE:\n\t\tnode2 = node.cloneNode(false);\n\t\tnode2.ownerDocument = doc;\n\t\t//var attrs = node2.attributes;\n\t\t//var len = attrs.length;\n\t\t//for(var i=0;i<len;i++){\n\t\t\t//node2.setAttributeNodeNS(importNode(doc,attrs.item(i),deep));\n\t\t//}\n\tcase DOCUMENT_FRAGMENT_NODE:\n\t\tbreak;\n\tcase ATTRIBUTE_NODE:\n\t\tdeep = true;\n\t\tbreak;\n\t//case ENTITY_REFERENCE_NODE:\n\t//case PROCESSING_INSTRUCTION_NODE:\n\t////case TEXT_NODE:\n\t//case CDATA_SECTION_NODE:\n\t//case COMMENT_NODE:\n\t//\tdeep = false;\n\t//\tbreak;\n\t//case DOCUMENT_NODE:\n\t//case DOCUMENT_TYPE_NODE:\n\t//cannot be imported.\n\t//case ENTITY_NODE:\n\t//case NOTATION_NODE:\n\t//can not hit in level3\n\t//default:throw e;\n\t}\n\tif(!node2){\n\t\tnode2 = node.cloneNode(false);//false\n\t}\n\tnode2.ownerDocument = doc;\n\tnode2.parentNode = null;\n\tif(deep){\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tnode2.appendChild(importNode(doc,child,deep));\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t}\n\treturn node2;\n}\n//\n//var _relationMap = {firstChild:1,lastChild:1,previousSibling:1,nextSibling:1,\n//\t\t\t\t\tattributes:1,childNodes:1,parentNode:1,documentElement:1,doctype,};\nfunction cloneNode(doc,node,deep){\n\tvar node2 = new node.constructor();\n\tfor (var n in node) {\n\t\tif (Object.prototype.hasOwnProperty.call(node, n)) {\n\t\t\tvar v = node[n];\n\t\t\tif (typeof v != \"object\") {\n\t\t\t\tif (v != node2[n]) {\n\t\t\t\t\tnode2[n] = v;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tif(node.childNodes){\n\t\tnode2.childNodes = new NodeList();\n\t}\n\tnode2.ownerDocument = doc;\n\tswitch (node2.nodeType) {\n\tcase ELEMENT_NODE:\n\t\tvar attrs\t= node.attributes;\n\t\tvar attrs2\t= node2.attributes = new NamedNodeMap();\n\t\tvar len = attrs.length\n\t\tattrs2._ownerElement = node2;\n\t\tfor(var i=0;i<len;i++){\n\t\t\tnode2.setAttributeNode(cloneNode(doc,attrs.item(i),true));\n\t\t}\n\t\tbreak;;\n\tcase ATTRIBUTE_NODE:\n\t\tdeep = true;\n\t}\n\tif(deep){\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tnode2.appendChild(cloneNode(doc,child,deep));\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t}\n\treturn node2;\n}\n\nfunction __set__(object,key,value){\n\tobject[key] = value\n}\n//do dynamic\ntry{\n\tif(Object.defineProperty){\n\t\tObject.defineProperty(LiveNodeList.prototype,'length',{\n\t\t\tget:function(){\n\t\t\t\t_updateLiveList(this);\n\t\t\t\treturn this.$$length;\n\t\t\t}\n\t\t});\n\n\t\tObject.defineProperty(Node.prototype,'textContent',{\n\t\t\tget:function(){\n\t\t\t\treturn getTextContent(this);\n\t\t\t},\n\n\t\t\tset:function(data){\n\t\t\t\tswitch(this.nodeType){\n\t\t\t\tcase ELEMENT_NODE:\n\t\t\t\tcase DOCUMENT_FRAGMENT_NODE:\n\t\t\t\t\twhile(this.firstChild){\n\t\t\t\t\t\tthis.removeChild(this.firstChild);\n\t\t\t\t\t}\n\t\t\t\t\tif(data || String(data)){\n\t\t\t\t\t\tthis.appendChild(this.ownerDocument.createTextNode(data));\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthis.data = data;\n\t\t\t\t\tthis.value = data;\n\t\t\t\t\tthis.nodeValue = data;\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tfunction getTextContent(node){\n\t\t\tswitch(node.nodeType){\n\t\t\tcase ELEMENT_NODE:\n\t\t\tcase DOCUMENT_FRAGMENT_NODE:\n\t\t\t\tvar buf = [];\n\t\t\t\tnode = node.firstChild;\n\t\t\t\twhile(node){\n\t\t\t\t\tif(node.nodeType!==7 && node.nodeType !==8){\n\t\t\t\t\t\tbuf.push(getTextContent(node));\n\t\t\t\t\t}\n\t\t\t\t\tnode = node.nextSibling;\n\t\t\t\t}\n\t\t\t\treturn buf.join('');\n\t\t\tdefault:\n\t\t\t\treturn node.nodeValue;\n\t\t\t}\n\t\t}\n\n\t\t__set__ = function(object,key,value){\n\t\t\t//console.log(value)\n\t\t\tobject['$$'+key] = value\n\t\t}\n\t}\n}catch(e){//ie8\n}\n\n//if(typeof require == 'function'){\n\texports.DocumentType = DocumentType;\n\texports.DOMException = DOMException;\n\texports.DOMImplementation = DOMImplementation;\n\texports.Element = Element;\n\texports.Node = Node;\n\texports.NodeList = NodeList;\n\texports.XMLSerializer = XMLSerializer;\n//}\n","'use strict';\n\nvar freeze = require('./conventions').freeze;\n\n/**\n * The entities that are predefined in every XML document.\n *\n * @see https://www.w3.org/TR/2006/REC-xml11-20060816/#sec-predefined-ent W3C XML 1.1\n * @see https://www.w3.org/TR/2008/REC-xml-20081126/#sec-predefined-ent W3C XML 1.0\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Predefined_entities_in_XML Wikipedia\n */\nexports.XML_ENTITIES = freeze({\n\tamp: '&',\n\tapos: \"'\",\n\tgt: '>',\n\tlt: '<',\n\tquot: '\"',\n});\n\n/**\n * A map of all entities that are detected in an HTML document.\n * They contain all entries from `XML_ENTITIES`.\n *\n * @see XML_ENTITIES\n * @see DOMParser.parseFromString\n * @see DOMImplementation.prototype.createHTMLDocument\n * @see https://html.spec.whatwg.org/#named-character-references WHATWG HTML(5) Spec\n * @see https://html.spec.whatwg.org/entities.json JSON\n * @see https://www.w3.org/TR/xml-entity-names/ W3C XML Entity Names\n * @see https://www.w3.org/TR/html4/sgml/entities.html W3C HTML4/SGML\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Character_entity_references_in_HTML Wikipedia (HTML)\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Entities_representing_special_characters_in_XHTML Wikpedia (XHTML)\n */\nexports.HTML_ENTITIES = freeze({\n\tAacute: '\\u00C1',\n\taacute: '\\u00E1',\n\tAbreve: '\\u0102',\n\tabreve: '\\u0103',\n\tac: '\\u223E',\n\tacd: '\\u223F',\n\tacE: '\\u223E\\u0333',\n\tAcirc: '\\u00C2',\n\tacirc: '\\u00E2',\n\tacute: '\\u00B4',\n\tAcy: '\\u0410',\n\tacy: '\\u0430',\n\tAElig: '\\u00C6',\n\taelig: '\\u00E6',\n\taf: '\\u2061',\n\tAfr: '\\uD835\\uDD04',\n\tafr: '\\uD835\\uDD1E',\n\tAgrave: '\\u00C0',\n\tagrave: '\\u00E0',\n\talefsym: '\\u2135',\n\taleph: '\\u2135',\n\tAlpha: '\\u0391',\n\talpha: '\\u03B1',\n\tAmacr: '\\u0100',\n\tamacr: '\\u0101',\n\tamalg: '\\u2A3F',\n\tAMP: '\\u0026',\n\tamp: '\\u0026',\n\tAnd: '\\u2A53',\n\tand: '\\u2227',\n\tandand: '\\u2A55',\n\tandd: '\\u2A5C',\n\tandslope: '\\u2A58',\n\tandv: '\\u2A5A',\n\tang: '\\u2220',\n\tange: '\\u29A4',\n\tangle: '\\u2220',\n\tangmsd: '\\u2221',\n\tangmsdaa: '\\u29A8',\n\tangmsdab: '\\u29A9',\n\tangmsdac: '\\u29AA',\n\tangmsdad: '\\u29AB',\n\tangmsdae: '\\u29AC',\n\tangmsdaf: '\\u29AD',\n\tangmsdag: '\\u29AE',\n\tangmsdah: '\\u29AF',\n\tangrt: '\\u221F',\n\tangrtvb: '\\u22BE',\n\tangrtvbd: '\\u299D',\n\tangsph: '\\u2222',\n\tangst: '\\u00C5',\n\tangzarr: '\\u237C',\n\tAogon: '\\u0104',\n\taogon: '\\u0105',\n\tAopf: '\\uD835\\uDD38',\n\taopf: '\\uD835\\uDD52',\n\tap: '\\u2248',\n\tapacir: '\\u2A6F',\n\tapE: '\\u2A70',\n\tape: '\\u224A',\n\tapid: '\\u224B',\n\tapos: '\\u0027',\n\tApplyFunction: '\\u2061',\n\tapprox: '\\u2248',\n\tapproxeq: '\\u224A',\n\tAring: '\\u00C5',\n\taring: '\\u00E5',\n\tAscr: '\\uD835\\uDC9C',\n\tascr: '\\uD835\\uDCB6',\n\tAssign: '\\u2254',\n\tast: '\\u002A',\n\tasymp: '\\u2248',\n\tasympeq: '\\u224D',\n\tAtilde: '\\u00C3',\n\tatilde: '\\u00E3',\n\tAuml: '\\u00C4',\n\tauml: '\\u00E4',\n\tawconint: '\\u2233',\n\tawint: '\\u2A11',\n\tbackcong: '\\u224C',\n\tbackepsilon: '\\u03F6',\n\tbackprime: '\\u2035',\n\tbacksim: '\\u223D',\n\tbacksimeq: '\\u22CD',\n\tBackslash: '\\u2216',\n\tBarv: '\\u2AE7',\n\tbarvee: '\\u22BD',\n\tBarwed: '\\u2306',\n\tbarwed: '\\u2305',\n\tbarwedge: '\\u2305',\n\tbbrk: '\\u23B5',\n\tbbrktbrk: '\\u23B6',\n\tbcong: '\\u224C',\n\tBcy: '\\u0411',\n\tbcy: '\\u0431',\n\tbdquo: '\\u201E',\n\tbecaus: '\\u2235',\n\tBecause: '\\u2235',\n\tbecause: '\\u2235',\n\tbemptyv: '\\u29B0',\n\tbepsi: '\\u03F6',\n\tbernou: '\\u212C',\n\tBernoullis: '\\u212C',\n\tBeta: '\\u0392',\n\tbeta: '\\u03B2',\n\tbeth: '\\u2136',\n\tbetween: '\\u226C',\n\tBfr: '\\uD835\\uDD05',\n\tbfr: '\\uD835\\uDD1F',\n\tbigcap: '\\u22C2',\n\tbigcirc: '\\u25EF',\n\tbigcup: '\\u22C3',\n\tbigodot: '\\u2A00',\n\tbigoplus: '\\u2A01',\n\tbigotimes: '\\u2A02',\n\tbigsqcup: '\\u2A06',\n\tbigstar: '\\u2605',\n\tbigtriangledown: '\\u25BD',\n\tbigtriangleup: '\\u25B3',\n\tbiguplus: '\\u2A04',\n\tbigvee: '\\u22C1',\n\tbigwedge: '\\u22C0',\n\tbkarow: '\\u290D',\n\tblacklozenge: '\\u29EB',\n\tblacksquare: '\\u25AA',\n\tblacktriangle: '\\u25B4',\n\tblacktriangledown: '\\u25BE',\n\tblacktriangleleft: '\\u25C2',\n\tblacktriangleright: '\\u25B8',\n\tblank: '\\u2423',\n\tblk12: '\\u2592',\n\tblk14: '\\u2591',\n\tblk34: '\\u2593',\n\tblock: '\\u2588',\n\tbne: '\\u003D\\u20E5',\n\tbnequiv: '\\u2261\\u20E5',\n\tbNot: '\\u2AED',\n\tbnot: '\\u2310',\n\tBopf: '\\uD835\\uDD39',\n\tbopf: '\\uD835\\uDD53',\n\tbot: '\\u22A5',\n\tbottom: '\\u22A5',\n\tbowtie: '\\u22C8',\n\tboxbox: '\\u29C9',\n\tboxDL: '\\u2557',\n\tboxDl: '\\u2556',\n\tboxdL: '\\u2555',\n\tboxdl: '\\u2510',\n\tboxDR: '\\u2554',\n\tboxDr: '\\u2553',\n\tboxdR: '\\u2552',\n\tboxdr: '\\u250C',\n\tboxH: '\\u2550',\n\tboxh: '\\u2500',\n\tboxHD: '\\u2566',\n\tboxHd: '\\u2564',\n\tboxhD: '\\u2565',\n\tboxhd: '\\u252C',\n\tboxHU: '\\u2569',\n\tboxHu: '\\u2567',\n\tboxhU: '\\u2568',\n\tboxhu: '\\u2534',\n\tboxminus: '\\u229F',\n\tboxplus: '\\u229E',\n\tboxtimes: '\\u22A0',\n\tboxUL: '\\u255D',\n\tboxUl: '\\u255C',\n\tboxuL: '\\u255B',\n\tboxul: '\\u2518',\n\tboxUR: '\\u255A',\n\tboxUr: '\\u2559',\n\tboxuR: '\\u2558',\n\tboxur: '\\u2514',\n\tboxV: '\\u2551',\n\tboxv: '\\u2502',\n\tboxVH: '\\u256C',\n\tboxVh: '\\u256B',\n\tboxvH: '\\u256A',\n\tboxvh: '\\u253C',\n\tboxVL: '\\u2563',\n\tboxVl: '\\u2562',\n\tboxvL: '\\u2561',\n\tboxvl: '\\u2524',\n\tboxVR: '\\u2560',\n\tboxVr: '\\u255F',\n\tboxvR: '\\u255E',\n\tboxvr: '\\u251C',\n\tbprime: '\\u2035',\n\tBreve: '\\u02D8',\n\tbreve: '\\u02D8',\n\tbrvbar: '\\u00A6',\n\tBscr: '\\u212C',\n\tbscr: '\\uD835\\uDCB7',\n\tbsemi: '\\u204F',\n\tbsim: '\\u223D',\n\tbsime: '\\u22CD',\n\tbsol: '\\u005C',\n\tbsolb: '\\u29C5',\n\tbsolhsub: '\\u27C8',\n\tbull: '\\u2022',\n\tbullet: '\\u2022',\n\tbump: '\\u224E',\n\tbumpE: '\\u2AAE',\n\tbumpe: '\\u224F',\n\tBumpeq: '\\u224E',\n\tbumpeq: '\\u224F',\n\tCacute: '\\u0106',\n\tcacute: '\\u0107',\n\tCap: '\\u22D2',\n\tcap: '\\u2229',\n\tcapand: '\\u2A44',\n\tcapbrcup: '\\u2A49',\n\tcapcap: '\\u2A4B',\n\tcapcup: '\\u2A47',\n\tcapdot: '\\u2A40',\n\tCapitalDifferentialD: '\\u2145',\n\tcaps: '\\u2229\\uFE00',\n\tcaret: '\\u2041',\n\tcaron: '\\u02C7',\n\tCayleys: '\\u212D',\n\tccaps: '\\u2A4D',\n\tCcaron: '\\u010C',\n\tccaron: '\\u010D',\n\tCcedil: '\\u00C7',\n\tccedil: '\\u00E7',\n\tCcirc: '\\u0108',\n\tccirc: '\\u0109',\n\tCconint: '\\u2230',\n\tccups: '\\u2A4C',\n\tccupssm: '\\u2A50',\n\tCdot: '\\u010A',\n\tcdot: '\\u010B',\n\tcedil: '\\u00B8',\n\tCedilla: '\\u00B8',\n\tcemptyv: '\\u29B2',\n\tcent: '\\u00A2',\n\tCenterDot: '\\u00B7',\n\tcenterdot: '\\u00B7',\n\tCfr: '\\u212D',\n\tcfr: '\\uD835\\uDD20',\n\tCHcy: '\\u0427',\n\tchcy: '\\u0447',\n\tcheck: '\\u2713',\n\tcheckmark: '\\u2713',\n\tChi: '\\u03A7',\n\tchi: '\\u03C7',\n\tcir: '\\u25CB',\n\tcirc: '\\u02C6',\n\tcirceq: '\\u2257',\n\tcirclearrowleft: '\\u21BA',\n\tcirclearrowright: '\\u21BB',\n\tcircledast: '\\u229B',\n\tcircledcirc: '\\u229A',\n\tcircleddash: '\\u229D',\n\tCircleDot: '\\u2299',\n\tcircledR: '\\u00AE',\n\tcircledS: '\\u24C8',\n\tCircleMinus: '\\u2296',\n\tCirclePlus: '\\u2295',\n\tCircleTimes: '\\u2297',\n\tcirE: '\\u29C3',\n\tcire: '\\u2257',\n\tcirfnint: '\\u2A10',\n\tcirmid: '\\u2AEF',\n\tcirscir: '\\u29C2',\n\tClockwiseContourIntegral: '\\u2232',\n\tCloseCurlyDoubleQuote: '\\u201D',\n\tCloseCurlyQuote: '\\u2019',\n\tclubs: '\\u2663',\n\tclubsuit: '\\u2663',\n\tColon: '\\u2237',\n\tcolon: '\\u003A',\n\tColone: '\\u2A74',\n\tcolone: '\\u2254',\n\tcoloneq: '\\u2254',\n\tcomma: '\\u002C',\n\tcommat: '\\u0040',\n\tcomp: '\\u2201',\n\tcompfn: '\\u2218',\n\tcomplement: '\\u2201',\n\tcomplexes: '\\u2102',\n\tcong: '\\u2245',\n\tcongdot: '\\u2A6D',\n\tCongruent: '\\u2261',\n\tConint: '\\u222F',\n\tconint: '\\u222E',\n\tContourIntegral: '\\u222E',\n\tCopf: '\\u2102',\n\tcopf: '\\uD835\\uDD54',\n\tcoprod: '\\u2210',\n\tCoproduct: '\\u2210',\n\tCOPY: '\\u00A9',\n\tcopy: '\\u00A9',\n\tcopysr: '\\u2117',\n\tCounterClockwiseContourIntegral: '\\u2233',\n\tcrarr: '\\u21B5',\n\tCross: '\\u2A2F',\n\tcross: '\\u2717',\n\tCscr: '\\uD835\\uDC9E',\n\tcscr: '\\uD835\\uDCB8',\n\tcsub: '\\u2ACF',\n\tcsube: '\\u2AD1',\n\tcsup: '\\u2AD0',\n\tcsupe: '\\u2AD2',\n\tctdot: '\\u22EF',\n\tcudarrl: '\\u2938',\n\tcudarrr: '\\u2935',\n\tcuepr: '\\u22DE',\n\tcuesc: '\\u22DF',\n\tcularr: '\\u21B6',\n\tcularrp: '\\u293D',\n\tCup: '\\u22D3',\n\tcup: '\\u222A',\n\tcupbrcap: '\\u2A48',\n\tCupCap: '\\u224D',\n\tcupcap: '\\u2A46',\n\tcupcup: '\\u2A4A',\n\tcupdot: '\\u228D',\n\tcupor: '\\u2A45',\n\tcups: '\\u222A\\uFE00',\n\tcurarr: '\\u21B7',\n\tcurarrm: '\\u293C',\n\tcurlyeqprec: '\\u22DE',\n\tcurlyeqsucc: '\\u22DF',\n\tcurlyvee: '\\u22CE',\n\tcurlywedge: '\\u22CF',\n\tcurren: '\\u00A4',\n\tcurvearrowleft: '\\u21B6',\n\tcurvearrowright: '\\u21B7',\n\tcuvee: '\\u22CE',\n\tcuwed: '\\u22CF',\n\tcwconint: '\\u2232',\n\tcwint: '\\u2231',\n\tcylcty: '\\u232D',\n\tDagger: '\\u2021',\n\tdagger: '\\u2020',\n\tdaleth: '\\u2138',\n\tDarr: '\\u21A1',\n\tdArr: '\\u21D3',\n\tdarr: '\\u2193',\n\tdash: '\\u2010',\n\tDashv: '\\u2AE4',\n\tdashv: '\\u22A3',\n\tdbkarow: '\\u290F',\n\tdblac: '\\u02DD',\n\tDcaron: '\\u010E',\n\tdcaron: '\\u010F',\n\tDcy: '\\u0414',\n\tdcy: '\\u0434',\n\tDD: '\\u2145',\n\tdd: '\\u2146',\n\tddagger: '\\u2021',\n\tddarr: '\\u21CA',\n\tDDotrahd: '\\u2911',\n\tddotseq: '\\u2A77',\n\tdeg: '\\u00B0',\n\tDel: '\\u2207',\n\tDelta: '\\u0394',\n\tdelta: '\\u03B4',\n\tdemptyv: '\\u29B1',\n\tdfisht: '\\u297F',\n\tDfr: '\\uD835\\uDD07',\n\tdfr: '\\uD835\\uDD21',\n\tdHar: '\\u2965',\n\tdharl: '\\u21C3',\n\tdharr: '\\u21C2',\n\tDiacriticalAcute: '\\u00B4',\n\tDiacriticalDot: '\\u02D9',\n\tDiacriticalDoubleAcute: '\\u02DD',\n\tDiacriticalGrave: '\\u0060',\n\tDiacriticalTilde: '\\u02DC',\n\tdiam: '\\u22C4',\n\tDiamond: '\\u22C4',\n\tdiamond: '\\u22C4',\n\tdiamondsuit: '\\u2666',\n\tdiams: '\\u2666',\n\tdie: '\\u00A8',\n\tDifferentialD: '\\u2146',\n\tdigamma: '\\u03DD',\n\tdisin: '\\u22F2',\n\tdiv: '\\u00F7',\n\tdivide: '\\u00F7',\n\tdivideontimes: '\\u22C7',\n\tdivonx: '\\u22C7',\n\tDJcy: '\\u0402',\n\tdjcy: '\\u0452',\n\tdlcorn: '\\u231E',\n\tdlcrop: '\\u230D',\n\tdollar: '\\u0024',\n\tDopf: '\\uD835\\uDD3B',\n\tdopf: '\\uD835\\uDD55',\n\tDot: '\\u00A8',\n\tdot: '\\u02D9',\n\tDotDot: '\\u20DC',\n\tdoteq: '\\u2250',\n\tdoteqdot: '\\u2251',\n\tDotEqual: '\\u2250',\n\tdotminus: '\\u2238',\n\tdotplus: '\\u2214',\n\tdotsquare: '\\u22A1',\n\tdoublebarwedge: '\\u2306',\n\tDoubleContourIntegral: '\\u222F',\n\tDoubleDot: '\\u00A8',\n\tDoubleDownArrow: '\\u21D3',\n\tDoubleLeftArrow: '\\u21D0',\n\tDoubleLeftRightArrow: '\\u21D4',\n\tDoubleLeftTee: '\\u2AE4',\n\tDoubleLongLeftArrow: '\\u27F8',\n\tDoubleLongLeftRightArrow: '\\u27FA',\n\tDoubleLongRightArrow: '\\u27F9',\n\tDoubleRightArrow: '\\u21D2',\n\tDoubleRightTee: '\\u22A8',\n\tDoubleUpArrow: '\\u21D1',\n\tDoubleUpDownArrow: '\\u21D5',\n\tDoubleVerticalBar: '\\u2225',\n\tDownArrow: '\\u2193',\n\tDownarrow: '\\u21D3',\n\tdownarrow: '\\u2193',\n\tDownArrowBar: '\\u2913',\n\tDownArrowUpArrow: '\\u21F5',\n\tDownBreve: '\\u0311',\n\tdowndownarrows: '\\u21CA',\n\tdownharpoonleft: '\\u21C3',\n\tdownharpoonright: '\\u21C2',\n\tDownLeftRightVector: '\\u2950',\n\tDownLeftTeeVector: '\\u295E',\n\tDownLeftVector: '\\u21BD',\n\tDownLeftVectorBar: '\\u2956',\n\tDownRightTeeVector: '\\u295F',\n\tDownRightVector: '\\u21C1',\n\tDownRightVectorBar: '\\u2957',\n\tDownTee: '\\u22A4',\n\tDownTeeArrow: '\\u21A7',\n\tdrbkarow: '\\u2910',\n\tdrcorn: '\\u231F',\n\tdrcrop: '\\u230C',\n\tDscr: '\\uD835\\uDC9F',\n\tdscr: '\\uD835\\uDCB9',\n\tDScy: '\\u0405',\n\tdscy: '\\u0455',\n\tdsol: '\\u29F6',\n\tDstrok: '\\u0110',\n\tdstrok: '\\u0111',\n\tdtdot: '\\u22F1',\n\tdtri: '\\u25BF',\n\tdtrif: '\\u25BE',\n\tduarr: '\\u21F5',\n\tduhar: '\\u296F',\n\tdwangle: '\\u29A6',\n\tDZcy: '\\u040F',\n\tdzcy: '\\u045F',\n\tdzigrarr: '\\u27FF',\n\tEacute: '\\u00C9',\n\teacute: '\\u00E9',\n\teaster: '\\u2A6E',\n\tEcaron: '\\u011A',\n\tecaron: '\\u011B',\n\tecir: '\\u2256',\n\tEcirc: '\\u00CA',\n\tecirc: '\\u00EA',\n\tecolon: '\\u2255',\n\tEcy: '\\u042D',\n\tecy: '\\u044D',\n\teDDot: '\\u2A77',\n\tEdot: '\\u0116',\n\teDot: '\\u2251',\n\tedot: '\\u0117',\n\tee: '\\u2147',\n\tefDot: '\\u2252',\n\tEfr: '\\uD835\\uDD08',\n\tefr: '\\uD835\\uDD22',\n\teg: '\\u2A9A',\n\tEgrave: '\\u00C8',\n\tegrave: '\\u00E8',\n\tegs: '\\u2A96',\n\tegsdot: '\\u2A98',\n\tel: '\\u2A99',\n\tElement: '\\u2208',\n\telinters: '\\u23E7',\n\tell: '\\u2113',\n\tels: '\\u2A95',\n\telsdot: '\\u2A97',\n\tEmacr: '\\u0112',\n\temacr: '\\u0113',\n\tempty: '\\u2205',\n\temptyset: '\\u2205',\n\tEmptySmallSquare: '\\u25FB',\n\temptyv: '\\u2205',\n\tEmptyVerySmallSquare: '\\u25AB',\n\temsp: '\\u2003',\n\temsp13: '\\u2004',\n\temsp14: '\\u2005',\n\tENG: '\\u014A',\n\teng: '\\u014B',\n\tensp: '\\u2002',\n\tEogon: '\\u0118',\n\teogon: '\\u0119',\n\tEopf: '\\uD835\\uDD3C',\n\teopf: '\\uD835\\uDD56',\n\tepar: '\\u22D5',\n\teparsl: '\\u29E3',\n\teplus: '\\u2A71',\n\tepsi: '\\u03B5',\n\tEpsilon: '\\u0395',\n\tepsilon: '\\u03B5',\n\tepsiv: '\\u03F5',\n\teqcirc: '\\u2256',\n\teqcolon: '\\u2255',\n\teqsim: '\\u2242',\n\teqslantgtr: '\\u2A96',\n\teqslantless: '\\u2A95',\n\tEqual: '\\u2A75',\n\tequals: '\\u003D',\n\tEqualTilde: '\\u2242',\n\tequest: '\\u225F',\n\tEquilibrium: '\\u21CC',\n\tequiv: '\\u2261',\n\tequivDD: '\\u2A78',\n\teqvparsl: '\\u29E5',\n\terarr: '\\u2971',\n\terDot: '\\u2253',\n\tEscr: '\\u2130',\n\tescr: '\\u212F',\n\tesdot: '\\u2250',\n\tEsim: '\\u2A73',\n\tesim: '\\u2242',\n\tEta: '\\u0397',\n\teta: '\\u03B7',\n\tETH: '\\u00D0',\n\teth: '\\u00F0',\n\tEuml: '\\u00CB',\n\teuml: '\\u00EB',\n\teuro: '\\u20AC',\n\texcl: '\\u0021',\n\texist: '\\u2203',\n\tExists: '\\u2203',\n\texpectation: '\\u2130',\n\tExponentialE: '\\u2147',\n\texponentiale: '\\u2147',\n\tfallingdotseq: '\\u2252',\n\tFcy: '\\u0424',\n\tfcy: '\\u0444',\n\tfemale: '\\u2640',\n\tffilig: '\\uFB03',\n\tfflig: '\\uFB00',\n\tffllig: '\\uFB04',\n\tFfr: '\\uD835\\uDD09',\n\tffr: '\\uD835\\uDD23',\n\tfilig: '\\uFB01',\n\tFilledSmallSquare: '\\u25FC',\n\tFilledVerySmallSquare: '\\u25AA',\n\tfjlig: '\\u0066\\u006A',\n\tflat: '\\u266D',\n\tfllig: '\\uFB02',\n\tfltns: '\\u25B1',\n\tfnof: '\\u0192',\n\tFopf: '\\uD835\\uDD3D',\n\tfopf: '\\uD835\\uDD57',\n\tForAll: '\\u2200',\n\tforall: '\\u2200',\n\tfork: '\\u22D4',\n\tforkv: '\\u2AD9',\n\tFouriertrf: '\\u2131',\n\tfpartint: '\\u2A0D',\n\tfrac12: '\\u00BD',\n\tfrac13: '\\u2153',\n\tfrac14: '\\u00BC',\n\tfrac15: '\\u2155',\n\tfrac16: '\\u2159',\n\tfrac18: '\\u215B',\n\tfrac23: '\\u2154',\n\tfrac25: '\\u2156',\n\tfrac34: '\\u00BE',\n\tfrac35: '\\u2157',\n\tfrac38: '\\u215C',\n\tfrac45: '\\u2158',\n\tfrac56: '\\u215A',\n\tfrac58: '\\u215D',\n\tfrac78: '\\u215E',\n\tfrasl: '\\u2044',\n\tfrown: '\\u2322',\n\tFscr: '\\u2131',\n\tfscr: '\\uD835\\uDCBB',\n\tgacute: '\\u01F5',\n\tGamma: '\\u0393',\n\tgamma: '\\u03B3',\n\tGammad: '\\u03DC',\n\tgammad: '\\u03DD',\n\tgap: '\\u2A86',\n\tGbreve: '\\u011E',\n\tgbreve: '\\u011F',\n\tGcedil: '\\u0122',\n\tGcirc: '\\u011C',\n\tgcirc: '\\u011D',\n\tGcy: '\\u0413',\n\tgcy: '\\u0433',\n\tGdot: '\\u0120',\n\tgdot: '\\u0121',\n\tgE: '\\u2267',\n\tge: '\\u2265',\n\tgEl: '\\u2A8C',\n\tgel: '\\u22DB',\n\tgeq: '\\u2265',\n\tgeqq: '\\u2267',\n\tgeqslant: '\\u2A7E',\n\tges: '\\u2A7E',\n\tgescc: '\\u2AA9',\n\tgesdot: '\\u2A80',\n\tgesdoto: '\\u2A82',\n\tgesdotol: '\\u2A84',\n\tgesl: '\\u22DB\\uFE00',\n\tgesles: '\\u2A94',\n\tGfr: '\\uD835\\uDD0A',\n\tgfr: '\\uD835\\uDD24',\n\tGg: '\\u22D9',\n\tgg: '\\u226B',\n\tggg: '\\u22D9',\n\tgimel: '\\u2137',\n\tGJcy: '\\u0403',\n\tgjcy: '\\u0453',\n\tgl: '\\u2277',\n\tgla: '\\u2AA5',\n\tglE: '\\u2A92',\n\tglj: '\\u2AA4',\n\tgnap: '\\u2A8A',\n\tgnapprox: '\\u2A8A',\n\tgnE: '\\u2269',\n\tgne: '\\u2A88',\n\tgneq: '\\u2A88',\n\tgneqq: '\\u2269',\n\tgnsim: '\\u22E7',\n\tGopf: '\\uD835\\uDD3E',\n\tgopf: '\\uD835\\uDD58',\n\tgrave: '\\u0060',\n\tGreaterEqual: '\\u2265',\n\tGreaterEqualLess: '\\u22DB',\n\tGreaterFullEqual: '\\u2267',\n\tGreaterGreater: '\\u2AA2',\n\tGreaterLess: '\\u2277',\n\tGreaterSlantEqual: '\\u2A7E',\n\tGreaterTilde: '\\u2273',\n\tGscr: '\\uD835\\uDCA2',\n\tgscr: '\\u210A',\n\tgsim: '\\u2273',\n\tgsime: '\\u2A8E',\n\tgsiml: '\\u2A90',\n\tGt: '\\u226B',\n\tGT: '\\u003E',\n\tgt: '\\u003E',\n\tgtcc: '\\u2AA7',\n\tgtcir: '\\u2A7A',\n\tgtdot: '\\u22D7',\n\tgtlPar: '\\u2995',\n\tgtquest: '\\u2A7C',\n\tgtrapprox: '\\u2A86',\n\tgtrarr: '\\u2978',\n\tgtrdot: '\\u22D7',\n\tgtreqless: '\\u22DB',\n\tgtreqqless: '\\u2A8C',\n\tgtrless: '\\u2277',\n\tgtrsim: '\\u2273',\n\tgvertneqq: '\\u2269\\uFE00',\n\tgvnE: '\\u2269\\uFE00',\n\tHacek: '\\u02C7',\n\thairsp: '\\u200A',\n\thalf: '\\u00BD',\n\thamilt: '\\u210B',\n\tHARDcy: '\\u042A',\n\thardcy: '\\u044A',\n\thArr: '\\u21D4',\n\tharr: '\\u2194',\n\tharrcir: '\\u2948',\n\tharrw: '\\u21AD',\n\tHat: '\\u005E',\n\thbar: '\\u210F',\n\tHcirc: '\\u0124',\n\thcirc: '\\u0125',\n\thearts: '\\u2665',\n\theartsuit: '\\u2665',\n\thellip: '\\u2026',\n\thercon: '\\u22B9',\n\tHfr: '\\u210C',\n\thfr: '\\uD835\\uDD25',\n\tHilbertSpace: '\\u210B',\n\thksearow: '\\u2925',\n\thkswarow: '\\u2926',\n\thoarr: '\\u21FF',\n\thomtht: '\\u223B',\n\thookleftarrow: '\\u21A9',\n\thookrightarrow: '\\u21AA',\n\tHopf: '\\u210D',\n\thopf: '\\uD835\\uDD59',\n\thorbar: '\\u2015',\n\tHorizontalLine: '\\u2500',\n\tHscr: '\\u210B',\n\thscr: '\\uD835\\uDCBD',\n\thslash: '\\u210F',\n\tHstrok: '\\u0126',\n\thstrok: '\\u0127',\n\tHumpDownHump: '\\u224E',\n\tHumpEqual: '\\u224F',\n\thybull: '\\u2043',\n\thyphen: '\\u2010',\n\tIacute: '\\u00CD',\n\tiacute: '\\u00ED',\n\tic: '\\u2063',\n\tIcirc: '\\u00CE',\n\ticirc: '\\u00EE',\n\tIcy: '\\u0418',\n\ticy: '\\u0438',\n\tIdot: '\\u0130',\n\tIEcy: '\\u0415',\n\tiecy: '\\u0435',\n\tiexcl: '\\u00A1',\n\tiff: '\\u21D4',\n\tIfr: '\\u2111',\n\tifr: '\\uD835\\uDD26',\n\tIgrave: '\\u00CC',\n\tigrave: '\\u00EC',\n\tii: '\\u2148',\n\tiiiint: '\\u2A0C',\n\tiiint: '\\u222D',\n\tiinfin: '\\u29DC',\n\tiiota: '\\u2129',\n\tIJlig: '\\u0132',\n\tijlig: '\\u0133',\n\tIm: '\\u2111',\n\tImacr: '\\u012A',\n\timacr: '\\u012B',\n\timage: '\\u2111',\n\tImaginaryI: '\\u2148',\n\timagline: '\\u2110',\n\timagpart: '\\u2111',\n\timath: '\\u0131',\n\timof: '\\u22B7',\n\timped: '\\u01B5',\n\tImplies: '\\u21D2',\n\tin: '\\u2208',\n\tincare: '\\u2105',\n\tinfin: '\\u221E',\n\tinfintie: '\\u29DD',\n\tinodot: '\\u0131',\n\tInt: '\\u222C',\n\tint: '\\u222B',\n\tintcal: '\\u22BA',\n\tintegers: '\\u2124',\n\tIntegral: '\\u222B',\n\tintercal: '\\u22BA',\n\tIntersection: '\\u22C2',\n\tintlarhk: '\\u2A17',\n\tintprod: '\\u2A3C',\n\tInvisibleComma: '\\u2063',\n\tInvisibleTimes: '\\u2062',\n\tIOcy: '\\u0401',\n\tiocy: '\\u0451',\n\tIogon: '\\u012E',\n\tiogon: '\\u012F',\n\tIopf: '\\uD835\\uDD40',\n\tiopf: '\\uD835\\uDD5A',\n\tIota: '\\u0399',\n\tiota: '\\u03B9',\n\tiprod: '\\u2A3C',\n\tiquest: '\\u00BF',\n\tIscr: '\\u2110',\n\tiscr: '\\uD835\\uDCBE',\n\tisin: '\\u2208',\n\tisindot: '\\u22F5',\n\tisinE: '\\u22F9',\n\tisins: '\\u22F4',\n\tisinsv: '\\u22F3',\n\tisinv: '\\u2208',\n\tit: '\\u2062',\n\tItilde: '\\u0128',\n\titilde: '\\u0129',\n\tIukcy: '\\u0406',\n\tiukcy: '\\u0456',\n\tIuml: '\\u00CF',\n\tiuml: '\\u00EF',\n\tJcirc: '\\u0134',\n\tjcirc: '\\u0135',\n\tJcy: '\\u0419',\n\tjcy: '\\u0439',\n\tJfr: '\\uD835\\uDD0D',\n\tjfr: '\\uD835\\uDD27',\n\tjmath: '\\u0237',\n\tJopf: '\\uD835\\uDD41',\n\tjopf: '\\uD835\\uDD5B',\n\tJscr: '\\uD835\\uDCA5',\n\tjscr: '\\uD835\\uDCBF',\n\tJsercy: '\\u0408',\n\tjsercy: '\\u0458',\n\tJukcy: '\\u0404',\n\tjukcy: '\\u0454',\n\tKappa: '\\u039A',\n\tkappa: '\\u03BA',\n\tkappav: '\\u03F0',\n\tKcedil: '\\u0136',\n\tkcedil: '\\u0137',\n\tKcy: '\\u041A',\n\tkcy: '\\u043A',\n\tKfr: '\\uD835\\uDD0E',\n\tkfr: '\\uD835\\uDD28',\n\tkgreen: '\\u0138',\n\tKHcy: '\\u0425',\n\tkhcy: '\\u0445',\n\tKJcy: '\\u040C',\n\tkjcy: '\\u045C',\n\tKopf: '\\uD835\\uDD42',\n\tkopf: '\\uD835\\uDD5C',\n\tKscr: '\\uD835\\uDCA6',\n\tkscr: '\\uD835\\uDCC0',\n\tlAarr: '\\u21DA',\n\tLacute: '\\u0139',\n\tlacute: '\\u013A',\n\tlaemptyv: '\\u29B4',\n\tlagran: '\\u2112',\n\tLambda: '\\u039B',\n\tlambda: '\\u03BB',\n\tLang: '\\u27EA',\n\tlang: '\\u27E8',\n\tlangd: '\\u2991',\n\tlangle: '\\u27E8',\n\tlap: '\\u2A85',\n\tLaplacetrf: '\\u2112',\n\tlaquo: '\\u00AB',\n\tLarr: '\\u219E',\n\tlArr: '\\u21D0',\n\tlarr: '\\u2190',\n\tlarrb: '\\u21E4',\n\tlarrbfs: '\\u291F',\n\tlarrfs: '\\u291D',\n\tlarrhk: '\\u21A9',\n\tlarrlp: '\\u21AB',\n\tlarrpl: '\\u2939',\n\tlarrsim: '\\u2973',\n\tlarrtl: '\\u21A2',\n\tlat: '\\u2AAB',\n\tlAtail: '\\u291B',\n\tlatail: '\\u2919',\n\tlate: '\\u2AAD',\n\tlates: '\\u2AAD\\uFE00',\n\tlBarr: '\\u290E',\n\tlbarr: '\\u290C',\n\tlbbrk: '\\u2772',\n\tlbrace: '\\u007B',\n\tlbrack: '\\u005B',\n\tlbrke: '\\u298B',\n\tlbrksld: '\\u298F',\n\tlbrkslu: '\\u298D',\n\tLcaron: '\\u013D',\n\tlcaron: '\\u013E',\n\tLcedil: '\\u013B',\n\tlcedil: '\\u013C',\n\tlceil: '\\u2308',\n\tlcub: '\\u007B',\n\tLcy: '\\u041B',\n\tlcy: '\\u043B',\n\tldca: '\\u2936',\n\tldquo: '\\u201C',\n\tldquor: '\\u201E',\n\tldrdhar: '\\u2967',\n\tldrushar: '\\u294B',\n\tldsh: '\\u21B2',\n\tlE: '\\u2266',\n\tle: '\\u2264',\n\tLeftAngleBracket: '\\u27E8',\n\tLeftArrow: '\\u2190',\n\tLeftarrow: '\\u21D0',\n\tleftarrow: '\\u2190',\n\tLeftArrowBar: '\\u21E4',\n\tLeftArrowRightArrow: '\\u21C6',\n\tleftarrowtail: '\\u21A2',\n\tLeftCeiling: '\\u2308',\n\tLeftDoubleBracket: '\\u27E6',\n\tLeftDownTeeVector: '\\u2961',\n\tLeftDownVector: '\\u21C3',\n\tLeftDownVectorBar: '\\u2959',\n\tLeftFloor: '\\u230A',\n\tleftharpoondown: '\\u21BD',\n\tleftharpoonup: '\\u21BC',\n\tleftleftarrows: '\\u21C7',\n\tLeftRightArrow: '\\u2194',\n\tLeftrightarrow: '\\u21D4',\n\tleftrightarrow: '\\u2194',\n\tleftrightarrows: '\\u21C6',\n\tleftrightharpoons: '\\u21CB',\n\tleftrightsquigarrow: '\\u21AD',\n\tLeftRightVector: '\\u294E',\n\tLeftTee: '\\u22A3',\n\tLeftTeeArrow: '\\u21A4',\n\tLeftTeeVector: '\\u295A',\n\tleftthreetimes: '\\u22CB',\n\tLeftTriangle: '\\u22B2',\n\tLeftTriangleBar: '\\u29CF',\n\tLeftTriangleEqual: '\\u22B4',\n\tLeftUpDownVector: '\\u2951',\n\tLeftUpTeeVector: '\\u2960',\n\tLeftUpVector: '\\u21BF',\n\tLeftUpVectorBar: '\\u2958',\n\tLeftVector: '\\u21BC',\n\tLeftVectorBar: '\\u2952',\n\tlEg: '\\u2A8B',\n\tleg: '\\u22DA',\n\tleq: '\\u2264',\n\tleqq: '\\u2266',\n\tleqslant: '\\u2A7D',\n\tles: '\\u2A7D',\n\tlescc: '\\u2AA8',\n\tlesdot: '\\u2A7F',\n\tlesdoto: '\\u2A81',\n\tlesdotor: '\\u2A83',\n\tlesg: '\\u22DA\\uFE00',\n\tlesges: '\\u2A93',\n\tlessapprox: '\\u2A85',\n\tlessdot: '\\u22D6',\n\tlesseqgtr: '\\u22DA',\n\tlesseqqgtr: '\\u2A8B',\n\tLessEqualGreater: '\\u22DA',\n\tLessFullEqual: '\\u2266',\n\tLessGreater: '\\u2276',\n\tlessgtr: '\\u2276',\n\tLessLess: '\\u2AA1',\n\tlesssim: '\\u2272',\n\tLessSlantEqual: '\\u2A7D',\n\tLessTilde: '\\u2272',\n\tlfisht: '\\u297C',\n\tlfloor: '\\u230A',\n\tLfr: '\\uD835\\uDD0F',\n\tlfr: '\\uD835\\uDD29',\n\tlg: '\\u2276',\n\tlgE: '\\u2A91',\n\tlHar: '\\u2962',\n\tlhard: '\\u21BD',\n\tlharu: '\\u21BC',\n\tlharul: '\\u296A',\n\tlhblk: '\\u2584',\n\tLJcy: '\\u0409',\n\tljcy: '\\u0459',\n\tLl: '\\u22D8',\n\tll: '\\u226A',\n\tllarr: '\\u21C7',\n\tllcorner: '\\u231E',\n\tLleftarrow: '\\u21DA',\n\tllhard: '\\u296B',\n\tlltri: '\\u25FA',\n\tLmidot: '\\u013F',\n\tlmidot: '\\u0140',\n\tlmoust: '\\u23B0',\n\tlmoustache: '\\u23B0',\n\tlnap: '\\u2A89',\n\tlnapprox: '\\u2A89',\n\tlnE: '\\u2268',\n\tlne: '\\u2A87',\n\tlneq: '\\u2A87',\n\tlneqq: '\\u2268',\n\tlnsim: '\\u22E6',\n\tloang: '\\u27EC',\n\tloarr: '\\u21FD',\n\tlobrk: '\\u27E6',\n\tLongLeftArrow: '\\u27F5',\n\tLongleftarrow: '\\u27F8',\n\tlongleftarrow: '\\u27F5',\n\tLongLeftRightArrow: '\\u27F7',\n\tLongleftrightarrow: '\\u27FA',\n\tlongleftrightarrow: '\\u27F7',\n\tlongmapsto: '\\u27FC',\n\tLongRightArrow: '\\u27F6',\n\tLongrightarrow: '\\u27F9',\n\tlongrightarrow: '\\u27F6',\n\tlooparrowleft: '\\u21AB',\n\tlooparrowright: '\\u21AC',\n\tlopar: '\\u2985',\n\tLopf: '\\uD835\\uDD43',\n\tlopf: '\\uD835\\uDD5D',\n\tloplus: '\\u2A2D',\n\tlotimes: '\\u2A34',\n\tlowast: '\\u2217',\n\tlowbar: '\\u005F',\n\tLowerLeftArrow: '\\u2199',\n\tLowerRightArrow: '\\u2198',\n\tloz: '\\u25CA',\n\tlozenge: '\\u25CA',\n\tlozf: '\\u29EB',\n\tlpar: '\\u0028',\n\tlparlt: '\\u2993',\n\tlrarr: '\\u21C6',\n\tlrcorner: '\\u231F',\n\tlrhar: '\\u21CB',\n\tlrhard: '\\u296D',\n\tlrm: '\\u200E',\n\tlrtri: '\\u22BF',\n\tlsaquo: '\\u2039',\n\tLscr: '\\u2112',\n\tlscr: '\\uD835\\uDCC1',\n\tLsh: '\\u21B0',\n\tlsh: '\\u21B0',\n\tlsim: '\\u2272',\n\tlsime: '\\u2A8D',\n\tlsimg: '\\u2A8F',\n\tlsqb: '\\u005B',\n\tlsquo: '\\u2018',\n\tlsquor: '\\u201A',\n\tLstrok: '\\u0141',\n\tlstrok: '\\u0142',\n\tLt: '\\u226A',\n\tLT: '\\u003C',\n\tlt: '\\u003C',\n\tltcc: '\\u2AA6',\n\tltcir: '\\u2A79',\n\tltdot: '\\u22D6',\n\tlthree: '\\u22CB',\n\tltimes: '\\u22C9',\n\tltlarr: '\\u2976',\n\tltquest: '\\u2A7B',\n\tltri: '\\u25C3',\n\tltrie: '\\u22B4',\n\tltrif: '\\u25C2',\n\tltrPar: '\\u2996',\n\tlurdshar: '\\u294A',\n\tluruhar: '\\u2966',\n\tlvertneqq: '\\u2268\\uFE00',\n\tlvnE: '\\u2268\\uFE00',\n\tmacr: '\\u00AF',\n\tmale: '\\u2642',\n\tmalt: '\\u2720',\n\tmaltese: '\\u2720',\n\tMap: '\\u2905',\n\tmap: '\\u21A6',\n\tmapsto: '\\u21A6',\n\tmapstodown: '\\u21A7',\n\tmapstoleft: '\\u21A4',\n\tmapstoup: '\\u21A5',\n\tmarker: '\\u25AE',\n\tmcomma: '\\u2A29',\n\tMcy: '\\u041C',\n\tmcy: '\\u043C',\n\tmdash: '\\u2014',\n\tmDDot: '\\u223A',\n\tmeasuredangle: '\\u2221',\n\tMediumSpace: '\\u205F',\n\tMellintrf: '\\u2133',\n\tMfr: '\\uD835\\uDD10',\n\tmfr: '\\uD835\\uDD2A',\n\tmho: '\\u2127',\n\tmicro: '\\u00B5',\n\tmid: '\\u2223',\n\tmidast: '\\u002A',\n\tmidcir: '\\u2AF0',\n\tmiddot: '\\u00B7',\n\tminus: '\\u2212',\n\tminusb: '\\u229F',\n\tminusd: '\\u2238',\n\tminusdu: '\\u2A2A',\n\tMinusPlus: '\\u2213',\n\tmlcp: '\\u2ADB',\n\tmldr: '\\u2026',\n\tmnplus: '\\u2213',\n\tmodels: '\\u22A7',\n\tMopf: '\\uD835\\uDD44',\n\tmopf: '\\uD835\\uDD5E',\n\tmp: '\\u2213',\n\tMscr: '\\u2133',\n\tmscr: '\\uD835\\uDCC2',\n\tmstpos: '\\u223E',\n\tMu: '\\u039C',\n\tmu: '\\u03BC',\n\tmultimap: '\\u22B8',\n\tmumap: '\\u22B8',\n\tnabla: '\\u2207',\n\tNacute: '\\u0143',\n\tnacute: '\\u0144',\n\tnang: '\\u2220\\u20D2',\n\tnap: '\\u2249',\n\tnapE: '\\u2A70\\u0338',\n\tnapid: '\\u224B\\u0338',\n\tnapos: '\\u0149',\n\tnapprox: '\\u2249',\n\tnatur: '\\u266E',\n\tnatural: '\\u266E',\n\tnaturals: '\\u2115',\n\tnbsp: '\\u00A0',\n\tnbump: '\\u224E\\u0338',\n\tnbumpe: '\\u224F\\u0338',\n\tncap: '\\u2A43',\n\tNcaron: '\\u0147',\n\tncaron: '\\u0148',\n\tNcedil: '\\u0145',\n\tncedil: '\\u0146',\n\tncong: '\\u2247',\n\tncongdot: '\\u2A6D\\u0338',\n\tncup: '\\u2A42',\n\tNcy: '\\u041D',\n\tncy: '\\u043D',\n\tndash: '\\u2013',\n\tne: '\\u2260',\n\tnearhk: '\\u2924',\n\tneArr: '\\u21D7',\n\tnearr: '\\u2197',\n\tnearrow: '\\u2197',\n\tnedot: '\\u2250\\u0338',\n\tNegativeMediumSpace: '\\u200B',\n\tNegativeThickSpace: '\\u200B',\n\tNegativeThinSpace: '\\u200B',\n\tNegativeVeryThinSpace: '\\u200B',\n\tnequiv: '\\u2262',\n\tnesear: '\\u2928',\n\tnesim: '\\u2242\\u0338',\n\tNestedGreaterGreater: '\\u226B',\n\tNestedLessLess: '\\u226A',\n\tNewLine: '\\u000A',\n\tnexist: '\\u2204',\n\tnexists: '\\u2204',\n\tNfr: '\\uD835\\uDD11',\n\tnfr: '\\uD835\\uDD2B',\n\tngE: '\\u2267\\u0338',\n\tnge: '\\u2271',\n\tngeq: '\\u2271',\n\tngeqq: '\\u2267\\u0338',\n\tngeqslant: '\\u2A7E\\u0338',\n\tnges: '\\u2A7E\\u0338',\n\tnGg: '\\u22D9\\u0338',\n\tngsim: '\\u2275',\n\tnGt: '\\u226B\\u20D2',\n\tngt: '\\u226F',\n\tngtr: '\\u226F',\n\tnGtv: '\\u226B\\u0338',\n\tnhArr: '\\u21CE',\n\tnharr: '\\u21AE',\n\tnhpar: '\\u2AF2',\n\tni: '\\u220B',\n\tnis: '\\u22FC',\n\tnisd: '\\u22FA',\n\tniv: '\\u220B',\n\tNJcy: '\\u040A',\n\tnjcy: '\\u045A',\n\tnlArr: '\\u21CD',\n\tnlarr: '\\u219A',\n\tnldr: '\\u2025',\n\tnlE: '\\u2266\\u0338',\n\tnle: '\\u2270',\n\tnLeftarrow: '\\u21CD',\n\tnleftarrow: '\\u219A',\n\tnLeftrightarrow: '\\u21CE',\n\tnleftrightarrow: '\\u21AE',\n\tnleq: '\\u2270',\n\tnleqq: '\\u2266\\u0338',\n\tnleqslant: '\\u2A7D\\u0338',\n\tnles: '\\u2A7D\\u0338',\n\tnless: '\\u226E',\n\tnLl: '\\u22D8\\u0338',\n\tnlsim: '\\u2274',\n\tnLt: '\\u226A\\u20D2',\n\tnlt: '\\u226E',\n\tnltri: '\\u22EA',\n\tnltrie: '\\u22EC',\n\tnLtv: '\\u226A\\u0338',\n\tnmid: '\\u2224',\n\tNoBreak: '\\u2060',\n\tNonBreakingSpace: '\\u00A0',\n\tNopf: '\\u2115',\n\tnopf: '\\uD835\\uDD5F',\n\tNot: '\\u2AEC',\n\tnot: '\\u00AC',\n\tNotCongruent: '\\u2262',\n\tNotCupCap: '\\u226D',\n\tNotDoubleVerticalBar: '\\u2226',\n\tNotElement: '\\u2209',\n\tNotEqual: '\\u2260',\n\tNotEqualTilde: '\\u2242\\u0338',\n\tNotExists: '\\u2204',\n\tNotGreater: '\\u226F',\n\tNotGreaterEqual: '\\u2271',\n\tNotGreaterFullEqual: '\\u2267\\u0338',\n\tNotGreaterGreater: '\\u226B\\u0338',\n\tNotGreaterLess: '\\u2279',\n\tNotGreaterSlantEqual: '\\u2A7E\\u0338',\n\tNotGreaterTilde: '\\u2275',\n\tNotHumpDownHump: '\\u224E\\u0338',\n\tNotHumpEqual: '\\u224F\\u0338',\n\tnotin: '\\u2209',\n\tnotindot: '\\u22F5\\u0338',\n\tnotinE: '\\u22F9\\u0338',\n\tnotinva: '\\u2209',\n\tnotinvb: '\\u22F7',\n\tnotinvc: '\\u22F6',\n\tNotLeftTriangle: '\\u22EA',\n\tNotLeftTriangleBar: '\\u29CF\\u0338',\n\tNotLeftTriangleEqual: '\\u22EC',\n\tNotLess: '\\u226E',\n\tNotLessEqual: '\\u2270',\n\tNotLessGreater: '\\u2278',\n\tNotLessLess: '\\u226A\\u0338',\n\tNotLessSlantEqual: '\\u2A7D\\u0338',\n\tNotLessTilde: '\\u2274',\n\tNotNestedGreaterGreater: '\\u2AA2\\u0338',\n\tNotNestedLessLess: '\\u2AA1\\u0338',\n\tnotni: '\\u220C',\n\tnotniva: '\\u220C',\n\tnotnivb: '\\u22FE',\n\tnotnivc: '\\u22FD',\n\tNotPrecedes: '\\u2280',\n\tNotPrecedesEqual: '\\u2AAF\\u0338',\n\tNotPrecedesSlantEqual: '\\u22E0',\n\tNotReverseElement: '\\u220C',\n\tNotRightTriangle: '\\u22EB',\n\tNotRightTriangleBar: '\\u29D0\\u0338',\n\tNotRightTriangleEqual: '\\u22ED',\n\tNotSquareSubset: '\\u228F\\u0338',\n\tNotSquareSubsetEqual: '\\u22E2',\n\tNotSquareSuperset: '\\u2290\\u0338',\n\tNotSquareSupersetEqual: '\\u22E3',\n\tNotSubset: '\\u2282\\u20D2',\n\tNotSubsetEqual: '\\u2288',\n\tNotSucceeds: '\\u2281',\n\tNotSucceedsEqual: '\\u2AB0\\u0338',\n\tNotSucceedsSlantEqual: '\\u22E1',\n\tNotSucceedsTilde: '\\u227F\\u0338',\n\tNotSuperset: '\\u2283\\u20D2',\n\tNotSupersetEqual: '\\u2289',\n\tNotTilde: '\\u2241',\n\tNotTildeEqual: '\\u2244',\n\tNotTildeFullEqual: '\\u2247',\n\tNotTildeTilde: '\\u2249',\n\tNotVerticalBar: '\\u2224',\n\tnpar: '\\u2226',\n\tnparallel: '\\u2226',\n\tnparsl: '\\u2AFD\\u20E5',\n\tnpart: '\\u2202\\u0338',\n\tnpolint: '\\u2A14',\n\tnpr: '\\u2280',\n\tnprcue: '\\u22E0',\n\tnpre: '\\u2AAF\\u0338',\n\tnprec: '\\u2280',\n\tnpreceq: '\\u2AAF\\u0338',\n\tnrArr: '\\u21CF',\n\tnrarr: '\\u219B',\n\tnrarrc: '\\u2933\\u0338',\n\tnrarrw: '\\u219D\\u0338',\n\tnRightarrow: '\\u21CF',\n\tnrightarrow: '\\u219B',\n\tnrtri: '\\u22EB',\n\tnrtrie: '\\u22ED',\n\tnsc: '\\u2281',\n\tnsccue: '\\u22E1',\n\tnsce: '\\u2AB0\\u0338',\n\tNscr: '\\uD835\\uDCA9',\n\tnscr: '\\uD835\\uDCC3',\n\tnshortmid: '\\u2224',\n\tnshortparallel: '\\u2226',\n\tnsim: '\\u2241',\n\tnsime: '\\u2244',\n\tnsimeq: '\\u2244',\n\tnsmid: '\\u2224',\n\tnspar: '\\u2226',\n\tnsqsube: '\\u22E2',\n\tnsqsupe: '\\u22E3',\n\tnsub: '\\u2284',\n\tnsubE: '\\u2AC5\\u0338',\n\tnsube: '\\u2288',\n\tnsubset: '\\u2282\\u20D2',\n\tnsubseteq: '\\u2288',\n\tnsubseteqq: '\\u2AC5\\u0338',\n\tnsucc: '\\u2281',\n\tnsucceq: '\\u2AB0\\u0338',\n\tnsup: '\\u2285',\n\tnsupE: '\\u2AC6\\u0338',\n\tnsupe: '\\u2289',\n\tnsupset: '\\u2283\\u20D2',\n\tnsupseteq: '\\u2289',\n\tnsupseteqq: '\\u2AC6\\u0338',\n\tntgl: '\\u2279',\n\tNtilde: '\\u00D1',\n\tntilde: '\\u00F1',\n\tntlg: '\\u2278',\n\tntriangleleft: '\\u22EA',\n\tntrianglelefteq: '\\u22EC',\n\tntriangleright: '\\u22EB',\n\tntrianglerighteq: '\\u22ED',\n\tNu: '\\u039D',\n\tnu: '\\u03BD',\n\tnum: '\\u0023',\n\tnumero: '\\u2116',\n\tnumsp: '\\u2007',\n\tnvap: '\\u224D\\u20D2',\n\tnVDash: '\\u22AF',\n\tnVdash: '\\u22AE',\n\tnvDash: '\\u22AD',\n\tnvdash: '\\u22AC',\n\tnvge: '\\u2265\\u20D2',\n\tnvgt: '\\u003E\\u20D2',\n\tnvHarr: '\\u2904',\n\tnvinfin: '\\u29DE',\n\tnvlArr: '\\u2902',\n\tnvle: '\\u2264\\u20D2',\n\tnvlt: '\\u003C\\u20D2',\n\tnvltrie: '\\u22B4\\u20D2',\n\tnvrArr: '\\u2903',\n\tnvrtrie: '\\u22B5\\u20D2',\n\tnvsim: '\\u223C\\u20D2',\n\tnwarhk: '\\u2923',\n\tnwArr: '\\u21D6',\n\tnwarr: '\\u2196',\n\tnwarrow: '\\u2196',\n\tnwnear: '\\u2927',\n\tOacute: '\\u00D3',\n\toacute: '\\u00F3',\n\toast: '\\u229B',\n\tocir: '\\u229A',\n\tOcirc: '\\u00D4',\n\tocirc: '\\u00F4',\n\tOcy: '\\u041E',\n\tocy: '\\u043E',\n\todash: '\\u229D',\n\tOdblac: '\\u0150',\n\todblac: '\\u0151',\n\todiv: '\\u2A38',\n\todot: '\\u2299',\n\todsold: '\\u29BC',\n\tOElig: '\\u0152',\n\toelig: '\\u0153',\n\tofcir: '\\u29BF',\n\tOfr: '\\uD835\\uDD12',\n\tofr: '\\uD835\\uDD2C',\n\togon: '\\u02DB',\n\tOgrave: '\\u00D2',\n\tograve: '\\u00F2',\n\togt: '\\u29C1',\n\tohbar: '\\u29B5',\n\tohm: '\\u03A9',\n\toint: '\\u222E',\n\tolarr: '\\u21BA',\n\tolcir: '\\u29BE',\n\tolcross: '\\u29BB',\n\toline: '\\u203E',\n\tolt: '\\u29C0',\n\tOmacr: '\\u014C',\n\tomacr: '\\u014D',\n\tOmega: '\\u03A9',\n\tomega: '\\u03C9',\n\tOmicron: '\\u039F',\n\tomicron: '\\u03BF',\n\tomid: '\\u29B6',\n\tominus: '\\u2296',\n\tOopf: '\\uD835\\uDD46',\n\toopf: '\\uD835\\uDD60',\n\topar: '\\u29B7',\n\tOpenCurlyDoubleQuote: '\\u201C',\n\tOpenCurlyQuote: '\\u2018',\n\toperp: '\\u29B9',\n\toplus: '\\u2295',\n\tOr: '\\u2A54',\n\tor: '\\u2228',\n\torarr: '\\u21BB',\n\tord: '\\u2A5D',\n\torder: '\\u2134',\n\torderof: '\\u2134',\n\tordf: '\\u00AA',\n\tordm: '\\u00BA',\n\torigof: '\\u22B6',\n\toror: '\\u2A56',\n\torslope: '\\u2A57',\n\torv: '\\u2A5B',\n\toS: '\\u24C8',\n\tOscr: '\\uD835\\uDCAA',\n\toscr: '\\u2134',\n\tOslash: '\\u00D8',\n\toslash: '\\u00F8',\n\tosol: '\\u2298',\n\tOtilde: '\\u00D5',\n\totilde: '\\u00F5',\n\tOtimes: '\\u2A37',\n\totimes: '\\u2297',\n\totimesas: '\\u2A36',\n\tOuml: '\\u00D6',\n\touml: '\\u00F6',\n\tovbar: '\\u233D',\n\tOverBar: '\\u203E',\n\tOverBrace: '\\u23DE',\n\tOverBracket: '\\u23B4',\n\tOverParenthesis: '\\u23DC',\n\tpar: '\\u2225',\n\tpara: '\\u00B6',\n\tparallel: '\\u2225',\n\tparsim: '\\u2AF3',\n\tparsl: '\\u2AFD',\n\tpart: '\\u2202',\n\tPartialD: '\\u2202',\n\tPcy: '\\u041F',\n\tpcy: '\\u043F',\n\tpercnt: '\\u0025',\n\tperiod: '\\u002E',\n\tpermil: '\\u2030',\n\tperp: '\\u22A5',\n\tpertenk: '\\u2031',\n\tPfr: '\\uD835\\uDD13',\n\tpfr: '\\uD835\\uDD2D',\n\tPhi: '\\u03A6',\n\tphi: '\\u03C6',\n\tphiv: '\\u03D5',\n\tphmmat: '\\u2133',\n\tphone: '\\u260E',\n\tPi: '\\u03A0',\n\tpi: '\\u03C0',\n\tpitchfork: '\\u22D4',\n\tpiv: '\\u03D6',\n\tplanck: '\\u210F',\n\tplanckh: '\\u210E',\n\tplankv: '\\u210F',\n\tplus: '\\u002B',\n\tplusacir: '\\u2A23',\n\tplusb: '\\u229E',\n\tpluscir: '\\u2A22',\n\tplusdo: '\\u2214',\n\tplusdu: '\\u2A25',\n\tpluse: '\\u2A72',\n\tPlusMinus: '\\u00B1',\n\tplusmn: '\\u00B1',\n\tplussim: '\\u2A26',\n\tplustwo: '\\u2A27',\n\tpm: '\\u00B1',\n\tPoincareplane: '\\u210C',\n\tpointint: '\\u2A15',\n\tPopf: '\\u2119',\n\tpopf: '\\uD835\\uDD61',\n\tpound: '\\u00A3',\n\tPr: '\\u2ABB',\n\tpr: '\\u227A',\n\tprap: '\\u2AB7',\n\tprcue: '\\u227C',\n\tprE: '\\u2AB3',\n\tpre: '\\u2AAF',\n\tprec: '\\u227A',\n\tprecapprox: '\\u2AB7',\n\tpreccurlyeq: '\\u227C',\n\tPrecedes: '\\u227A',\n\tPrecedesEqual: '\\u2AAF',\n\tPrecedesSlantEqual: '\\u227C',\n\tPrecedesTilde: '\\u227E',\n\tpreceq: '\\u2AAF',\n\tprecnapprox: '\\u2AB9',\n\tprecneqq: '\\u2AB5',\n\tprecnsim: '\\u22E8',\n\tprecsim: '\\u227E',\n\tPrime: '\\u2033',\n\tprime: '\\u2032',\n\tprimes: '\\u2119',\n\tprnap: '\\u2AB9',\n\tprnE: '\\u2AB5',\n\tprnsim: '\\u22E8',\n\tprod: '\\u220F',\n\tProduct: '\\u220F',\n\tprofalar: '\\u232E',\n\tprofline: '\\u2312',\n\tprofsurf: '\\u2313',\n\tprop: '\\u221D',\n\tProportion: '\\u2237',\n\tProportional: '\\u221D',\n\tpropto: '\\u221D',\n\tprsim: '\\u227E',\n\tprurel: '\\u22B0',\n\tPscr: '\\uD835\\uDCAB',\n\tpscr: '\\uD835\\uDCC5',\n\tPsi: '\\u03A8',\n\tpsi: '\\u03C8',\n\tpuncsp: '\\u2008',\n\tQfr: '\\uD835\\uDD14',\n\tqfr: '\\uD835\\uDD2E',\n\tqint: '\\u2A0C',\n\tQopf: '\\u211A',\n\tqopf: '\\uD835\\uDD62',\n\tqprime: '\\u2057',\n\tQscr: '\\uD835\\uDCAC',\n\tqscr: '\\uD835\\uDCC6',\n\tquaternions: '\\u210D',\n\tquatint: '\\u2A16',\n\tquest: '\\u003F',\n\tquesteq: '\\u225F',\n\tQUOT: '\\u0022',\n\tquot: '\\u0022',\n\trAarr: '\\u21DB',\n\trace: '\\u223D\\u0331',\n\tRacute: '\\u0154',\n\tracute: '\\u0155',\n\tradic: '\\u221A',\n\traemptyv: '\\u29B3',\n\tRang: '\\u27EB',\n\trang: '\\u27E9',\n\trangd: '\\u2992',\n\trange: '\\u29A5',\n\trangle: '\\u27E9',\n\traquo: '\\u00BB',\n\tRarr: '\\u21A0',\n\trArr: '\\u21D2',\n\trarr: '\\u2192',\n\trarrap: '\\u2975',\n\trarrb: '\\u21E5',\n\trarrbfs: '\\u2920',\n\trarrc: '\\u2933',\n\trarrfs: '\\u291E',\n\trarrhk: '\\u21AA',\n\trarrlp: '\\u21AC',\n\trarrpl: '\\u2945',\n\trarrsim: '\\u2974',\n\tRarrtl: '\\u2916',\n\trarrtl: '\\u21A3',\n\trarrw: '\\u219D',\n\trAtail: '\\u291C',\n\tratail: '\\u291A',\n\tratio: '\\u2236',\n\trationals: '\\u211A',\n\tRBarr: '\\u2910',\n\trBarr: '\\u290F',\n\trbarr: '\\u290D',\n\trbbrk: '\\u2773',\n\trbrace: '\\u007D',\n\trbrack: '\\u005D',\n\trbrke: '\\u298C',\n\trbrksld: '\\u298E',\n\trbrkslu: '\\u2990',\n\tRcaron: '\\u0158',\n\trcaron: '\\u0159',\n\tRcedil: '\\u0156',\n\trcedil: '\\u0157',\n\trceil: '\\u2309',\n\trcub: '\\u007D',\n\tRcy: '\\u0420',\n\trcy: '\\u0440',\n\trdca: '\\u2937',\n\trdldhar: '\\u2969',\n\trdquo: '\\u201D',\n\trdquor: '\\u201D',\n\trdsh: '\\u21B3',\n\tRe: '\\u211C',\n\treal: '\\u211C',\n\trealine: '\\u211B',\n\trealpart: '\\u211C',\n\treals: '\\u211D',\n\trect: '\\u25AD',\n\tREG: '\\u00AE',\n\treg: '\\u00AE',\n\tReverseElement: '\\u220B',\n\tReverseEquilibrium: '\\u21CB',\n\tReverseUpEquilibrium: '\\u296F',\n\trfisht: '\\u297D',\n\trfloor: '\\u230B',\n\tRfr: '\\u211C',\n\trfr: '\\uD835\\uDD2F',\n\trHar: '\\u2964',\n\trhard: '\\u21C1',\n\trharu: '\\u21C0',\n\trharul: '\\u296C',\n\tRho: '\\u03A1',\n\trho: '\\u03C1',\n\trhov: '\\u03F1',\n\tRightAngleBracket: '\\u27E9',\n\tRightArrow: '\\u2192',\n\tRightarrow: '\\u21D2',\n\trightarrow: '\\u2192',\n\tRightArrowBar: '\\u21E5',\n\tRightArrowLeftArrow: '\\u21C4',\n\trightarrowtail: '\\u21A3',\n\tRightCeiling: '\\u2309',\n\tRightDoubleBracket: '\\u27E7',\n\tRightDownTeeVector: '\\u295D',\n\tRightDownVector: '\\u21C2',\n\tRightDownVectorBar: '\\u2955',\n\tRightFloor: '\\u230B',\n\trightharpoondown: '\\u21C1',\n\trightharpoonup: '\\u21C0',\n\trightleftarrows: '\\u21C4',\n\trightleftharpoons: '\\u21CC',\n\trightrightarrows: '\\u21C9',\n\trightsquigarrow: '\\u219D',\n\tRightTee: '\\u22A2',\n\tRightTeeArrow: '\\u21A6',\n\tRightTeeVector: '\\u295B',\n\trightthreetimes: '\\u22CC',\n\tRightTriangle: '\\u22B3',\n\tRightTriangleBar: '\\u29D0',\n\tRightTriangleEqual: '\\u22B5',\n\tRightUpDownVector: '\\u294F',\n\tRightUpTeeVector: '\\u295C',\n\tRightUpVector: '\\u21BE',\n\tRightUpVectorBar: '\\u2954',\n\tRightVector: '\\u21C0',\n\tRightVectorBar: '\\u2953',\n\tring: '\\u02DA',\n\trisingdotseq: '\\u2253',\n\trlarr: '\\u21C4',\n\trlhar: '\\u21CC',\n\trlm: '\\u200F',\n\trmoust: '\\u23B1',\n\trmoustache: '\\u23B1',\n\trnmid: '\\u2AEE',\n\troang: '\\u27ED',\n\troarr: '\\u21FE',\n\trobrk: '\\u27E7',\n\tropar: '\\u2986',\n\tRopf: '\\u211D',\n\tropf: '\\uD835\\uDD63',\n\troplus: '\\u2A2E',\n\trotimes: '\\u2A35',\n\tRoundImplies: '\\u2970',\n\trpar: '\\u0029',\n\trpargt: '\\u2994',\n\trppolint: '\\u2A12',\n\trrarr: '\\u21C9',\n\tRrightarrow: '\\u21DB',\n\trsaquo: '\\u203A',\n\tRscr: '\\u211B',\n\trscr: '\\uD835\\uDCC7',\n\tRsh: '\\u21B1',\n\trsh: '\\u21B1',\n\trsqb: '\\u005D',\n\trsquo: '\\u2019',\n\trsquor: '\\u2019',\n\trthree: '\\u22CC',\n\trtimes: '\\u22CA',\n\trtri: '\\u25B9',\n\trtrie: '\\u22B5',\n\trtrif: '\\u25B8',\n\trtriltri: '\\u29CE',\n\tRuleDelayed: '\\u29F4',\n\truluhar: '\\u2968',\n\trx: '\\u211E',\n\tSacute: '\\u015A',\n\tsacute: '\\u015B',\n\tsbquo: '\\u201A',\n\tSc: '\\u2ABC',\n\tsc: '\\u227B',\n\tscap: '\\u2AB8',\n\tScaron: '\\u0160',\n\tscaron: '\\u0161',\n\tsccue: '\\u227D',\n\tscE: '\\u2AB4',\n\tsce: '\\u2AB0',\n\tScedil: '\\u015E',\n\tscedil: '\\u015F',\n\tScirc: '\\u015C',\n\tscirc: '\\u015D',\n\tscnap: '\\u2ABA',\n\tscnE: '\\u2AB6',\n\tscnsim: '\\u22E9',\n\tscpolint: '\\u2A13',\n\tscsim: '\\u227F',\n\tScy: '\\u0421',\n\tscy: '\\u0441',\n\tsdot: '\\u22C5',\n\tsdotb: '\\u22A1',\n\tsdote: '\\u2A66',\n\tsearhk: '\\u2925',\n\tseArr: '\\u21D8',\n\tsearr: '\\u2198',\n\tsearrow: '\\u2198',\n\tsect: '\\u00A7',\n\tsemi: '\\u003B',\n\tseswar: '\\u2929',\n\tsetminus: '\\u2216',\n\tsetmn: '\\u2216',\n\tsext: '\\u2736',\n\tSfr: '\\uD835\\uDD16',\n\tsfr: '\\uD835\\uDD30',\n\tsfrown: '\\u2322',\n\tsharp: '\\u266F',\n\tSHCHcy: '\\u0429',\n\tshchcy: '\\u0449',\n\tSHcy: '\\u0428',\n\tshcy: '\\u0448',\n\tShortDownArrow: '\\u2193',\n\tShortLeftArrow: '\\u2190',\n\tshortmid: '\\u2223',\n\tshortparallel: '\\u2225',\n\tShortRightArrow: '\\u2192',\n\tShortUpArrow: '\\u2191',\n\tshy: '\\u00AD',\n\tSigma: '\\u03A3',\n\tsigma: '\\u03C3',\n\tsigmaf: '\\u03C2',\n\tsigmav: '\\u03C2',\n\tsim: '\\u223C',\n\tsimdot: '\\u2A6A',\n\tsime: '\\u2243',\n\tsimeq: '\\u2243',\n\tsimg: '\\u2A9E',\n\tsimgE: '\\u2AA0',\n\tsiml: '\\u2A9D',\n\tsimlE: '\\u2A9F',\n\tsimne: '\\u2246',\n\tsimplus: '\\u2A24',\n\tsimrarr: '\\u2972',\n\tslarr: '\\u2190',\n\tSmallCircle: '\\u2218',\n\tsmallsetminus: '\\u2216',\n\tsmashp: '\\u2A33',\n\tsmeparsl: '\\u29E4',\n\tsmid: '\\u2223',\n\tsmile: '\\u2323',\n\tsmt: '\\u2AAA',\n\tsmte: '\\u2AAC',\n\tsmtes: '\\u2AAC\\uFE00',\n\tSOFTcy: '\\u042C',\n\tsoftcy: '\\u044C',\n\tsol: '\\u002F',\n\tsolb: '\\u29C4',\n\tsolbar: '\\u233F',\n\tSopf: '\\uD835\\uDD4A',\n\tsopf: '\\uD835\\uDD64',\n\tspades: '\\u2660',\n\tspadesuit: '\\u2660',\n\tspar: '\\u2225',\n\tsqcap: '\\u2293',\n\tsqcaps: '\\u2293\\uFE00',\n\tsqcup: '\\u2294',\n\tsqcups: '\\u2294\\uFE00',\n\tSqrt: '\\u221A',\n\tsqsub: '\\u228F',\n\tsqsube: '\\u2291',\n\tsqsubset: '\\u228F',\n\tsqsubseteq: '\\u2291',\n\tsqsup: '\\u2290',\n\tsqsupe: '\\u2292',\n\tsqsupset: '\\u2290',\n\tsqsupseteq: '\\u2292',\n\tsqu: '\\u25A1',\n\tSquare: '\\u25A1',\n\tsquare: '\\u25A1',\n\tSquareIntersection: '\\u2293',\n\tSquareSubset: '\\u228F',\n\tSquareSubsetEqual: '\\u2291',\n\tSquareSuperset: '\\u2290',\n\tSquareSupersetEqual: '\\u2292',\n\tSquareUnion: '\\u2294',\n\tsquarf: '\\u25AA',\n\tsquf: '\\u25AA',\n\tsrarr: '\\u2192',\n\tSscr: '\\uD835\\uDCAE',\n\tsscr: '\\uD835\\uDCC8',\n\tssetmn: '\\u2216',\n\tssmile: '\\u2323',\n\tsstarf: '\\u22C6',\n\tStar: '\\u22C6',\n\tstar: '\\u2606',\n\tstarf: '\\u2605',\n\tstraightepsilon: '\\u03F5',\n\tstraightphi: '\\u03D5',\n\tstrns: '\\u00AF',\n\tSub: '\\u22D0',\n\tsub: '\\u2282',\n\tsubdot: '\\u2ABD',\n\tsubE: '\\u2AC5',\n\tsube: '\\u2286',\n\tsubedot: '\\u2AC3',\n\tsubmult: '\\u2AC1',\n\tsubnE: '\\u2ACB',\n\tsubne: '\\u228A',\n\tsubplus: '\\u2ABF',\n\tsubrarr: '\\u2979',\n\tSubset: '\\u22D0',\n\tsubset: '\\u2282',\n\tsubseteq: '\\u2286',\n\tsubseteqq: '\\u2AC5',\n\tSubsetEqual: '\\u2286',\n\tsubsetneq: '\\u228A',\n\tsubsetneqq: '\\u2ACB',\n\tsubsim: '\\u2AC7',\n\tsubsub: '\\u2AD5',\n\tsubsup: '\\u2AD3',\n\tsucc: '\\u227B',\n\tsuccapprox: '\\u2AB8',\n\tsucccurlyeq: '\\u227D',\n\tSucceeds: '\\u227B',\n\tSucceedsEqual: '\\u2AB0',\n\tSucceedsSlantEqual: '\\u227D',\n\tSucceedsTilde: '\\u227F',\n\tsucceq: '\\u2AB0',\n\tsuccnapprox: '\\u2ABA',\n\tsuccneqq: '\\u2AB6',\n\tsuccnsim: '\\u22E9',\n\tsuccsim: '\\u227F',\n\tSuchThat: '\\u220B',\n\tSum: '\\u2211',\n\tsum: '\\u2211',\n\tsung: '\\u266A',\n\tSup: '\\u22D1',\n\tsup: '\\u2283',\n\tsup1: '\\u00B9',\n\tsup2: '\\u00B2',\n\tsup3: '\\u00B3',\n\tsupdot: '\\u2ABE',\n\tsupdsub: '\\u2AD8',\n\tsupE: '\\u2AC6',\n\tsupe: '\\u2287',\n\tsupedot: '\\u2AC4',\n\tSuperset: '\\u2283',\n\tSupersetEqual: '\\u2287',\n\tsuphsol: '\\u27C9',\n\tsuphsub: '\\u2AD7',\n\tsuplarr: '\\u297B',\n\tsupmult: '\\u2AC2',\n\tsupnE: '\\u2ACC',\n\tsupne: '\\u228B',\n\tsupplus: '\\u2AC0',\n\tSupset: '\\u22D1',\n\tsupset: '\\u2283',\n\tsupseteq: '\\u2287',\n\tsupseteqq: '\\u2AC6',\n\tsupsetneq: '\\u228B',\n\tsupsetneqq: '\\u2ACC',\n\tsupsim: '\\u2AC8',\n\tsupsub: '\\u2AD4',\n\tsupsup: '\\u2AD6',\n\tswarhk: '\\u2926',\n\tswArr: '\\u21D9',\n\tswarr: '\\u2199',\n\tswarrow: '\\u2199',\n\tswnwar: '\\u292A',\n\tszlig: '\\u00DF',\n\tTab: '\\u0009',\n\ttarget: '\\u2316',\n\tTau: '\\u03A4',\n\ttau: '\\u03C4',\n\ttbrk: '\\u23B4',\n\tTcaron: '\\u0164',\n\ttcaron: '\\u0165',\n\tTcedil: '\\u0162',\n\ttcedil: '\\u0163',\n\tTcy: '\\u0422',\n\ttcy: '\\u0442',\n\ttdot: '\\u20DB',\n\ttelrec: '\\u2315',\n\tTfr: '\\uD835\\uDD17',\n\ttfr: '\\uD835\\uDD31',\n\tthere4: '\\u2234',\n\tTherefore: '\\u2234',\n\ttherefore: '\\u2234',\n\tTheta: '\\u0398',\n\ttheta: '\\u03B8',\n\tthetasym: '\\u03D1',\n\tthetav: '\\u03D1',\n\tthickapprox: '\\u2248',\n\tthicksim: '\\u223C',\n\tThickSpace: '\\u205F\\u200A',\n\tthinsp: '\\u2009',\n\tThinSpace: '\\u2009',\n\tthkap: '\\u2248',\n\tthksim: '\\u223C',\n\tTHORN: '\\u00DE',\n\tthorn: '\\u00FE',\n\tTilde: '\\u223C',\n\ttilde: '\\u02DC',\n\tTildeEqual: '\\u2243',\n\tTildeFullEqual: '\\u2245',\n\tTildeTilde: '\\u2248',\n\ttimes: '\\u00D7',\n\ttimesb: '\\u22A0',\n\ttimesbar: '\\u2A31',\n\ttimesd: '\\u2A30',\n\ttint: '\\u222D',\n\ttoea: '\\u2928',\n\ttop: '\\u22A4',\n\ttopbot: '\\u2336',\n\ttopcir: '\\u2AF1',\n\tTopf: '\\uD835\\uDD4B',\n\ttopf: '\\uD835\\uDD65',\n\ttopfork: '\\u2ADA',\n\ttosa: '\\u2929',\n\ttprime: '\\u2034',\n\tTRADE: '\\u2122',\n\ttrade: '\\u2122',\n\ttriangle: '\\u25B5',\n\ttriangledown: '\\u25BF',\n\ttriangleleft: '\\u25C3',\n\ttrianglelefteq: '\\u22B4',\n\ttriangleq: '\\u225C',\n\ttriangleright: '\\u25B9',\n\ttrianglerighteq: '\\u22B5',\n\ttridot: '\\u25EC',\n\ttrie: '\\u225C',\n\ttriminus: '\\u2A3A',\n\tTripleDot: '\\u20DB',\n\ttriplus: '\\u2A39',\n\ttrisb: '\\u29CD',\n\ttritime: '\\u2A3B',\n\ttrpezium: '\\u23E2',\n\tTscr: '\\uD835\\uDCAF',\n\ttscr: '\\uD835\\uDCC9',\n\tTScy: '\\u0426',\n\ttscy: '\\u0446',\n\tTSHcy: '\\u040B',\n\ttshcy: '\\u045B',\n\tTstrok: '\\u0166',\n\ttstrok: '\\u0167',\n\ttwixt: '\\u226C',\n\ttwoheadleftarrow: '\\u219E',\n\ttwoheadrightarrow: '\\u21A0',\n\tUacute: '\\u00DA',\n\tuacute: '\\u00FA',\n\tUarr: '\\u219F',\n\tuArr: '\\u21D1',\n\tuarr: '\\u2191',\n\tUarrocir: '\\u2949',\n\tUbrcy: '\\u040E',\n\tubrcy: '\\u045E',\n\tUbreve: '\\u016C',\n\tubreve: '\\u016D',\n\tUcirc: '\\u00DB',\n\tucirc: '\\u00FB',\n\tUcy: '\\u0423',\n\tucy: '\\u0443',\n\tudarr: '\\u21C5',\n\tUdblac: '\\u0170',\n\tudblac: '\\u0171',\n\tudhar: '\\u296E',\n\tufisht: '\\u297E',\n\tUfr: '\\uD835\\uDD18',\n\tufr: '\\uD835\\uDD32',\n\tUgrave: '\\u00D9',\n\tugrave: '\\u00F9',\n\tuHar: '\\u2963',\n\tuharl: '\\u21BF',\n\tuharr: '\\u21BE',\n\tuhblk: '\\u2580',\n\tulcorn: '\\u231C',\n\tulcorner: '\\u231C',\n\tulcrop: '\\u230F',\n\tultri: '\\u25F8',\n\tUmacr: '\\u016A',\n\tumacr: '\\u016B',\n\tuml: '\\u00A8',\n\tUnderBar: '\\u005F',\n\tUnderBrace: '\\u23DF',\n\tUnderBracket: '\\u23B5',\n\tUnderParenthesis: '\\u23DD',\n\tUnion: '\\u22C3',\n\tUnionPlus: '\\u228E',\n\tUogon: '\\u0172',\n\tuogon: '\\u0173',\n\tUopf: '\\uD835\\uDD4C',\n\tuopf: '\\uD835\\uDD66',\n\tUpArrow: '\\u2191',\n\tUparrow: '\\u21D1',\n\tuparrow: '\\u2191',\n\tUpArrowBar: '\\u2912',\n\tUpArrowDownArrow: '\\u21C5',\n\tUpDownArrow: '\\u2195',\n\tUpdownarrow: '\\u21D5',\n\tupdownarrow: '\\u2195',\n\tUpEquilibrium: '\\u296E',\n\tupharpoonleft: '\\u21BF',\n\tupharpoonright: '\\u21BE',\n\tuplus: '\\u228E',\n\tUpperLeftArrow: '\\u2196',\n\tUpperRightArrow: '\\u2197',\n\tUpsi: '\\u03D2',\n\tupsi: '\\u03C5',\n\tupsih: '\\u03D2',\n\tUpsilon: '\\u03A5',\n\tupsilon: '\\u03C5',\n\tUpTee: '\\u22A5',\n\tUpTeeArrow: '\\u21A5',\n\tupuparrows: '\\u21C8',\n\turcorn: '\\u231D',\n\turcorner: '\\u231D',\n\turcrop: '\\u230E',\n\tUring: '\\u016E',\n\turing: '\\u016F',\n\turtri: '\\u25F9',\n\tUscr: '\\uD835\\uDCB0',\n\tuscr: '\\uD835\\uDCCA',\n\tutdot: '\\u22F0',\n\tUtilde: '\\u0168',\n\tutilde: '\\u0169',\n\tutri: '\\u25B5',\n\tutrif: '\\u25B4',\n\tuuarr: '\\u21C8',\n\tUuml: '\\u00DC',\n\tuuml: '\\u00FC',\n\tuwangle: '\\u29A7',\n\tvangrt: '\\u299C',\n\tvarepsilon: '\\u03F5',\n\tvarkappa: '\\u03F0',\n\tvarnothing: '\\u2205',\n\tvarphi: '\\u03D5',\n\tvarpi: '\\u03D6',\n\tvarpropto: '\\u221D',\n\tvArr: '\\u21D5',\n\tvarr: '\\u2195',\n\tvarrho: '\\u03F1',\n\tvarsigma: '\\u03C2',\n\tvarsubsetneq: '\\u228A\\uFE00',\n\tvarsubsetneqq: '\\u2ACB\\uFE00',\n\tvarsupsetneq: '\\u228B\\uFE00',\n\tvarsupsetneqq: '\\u2ACC\\uFE00',\n\tvartheta: '\\u03D1',\n\tvartriangleleft: '\\u22B2',\n\tvartriangleright: '\\u22B3',\n\tVbar: '\\u2AEB',\n\tvBar: '\\u2AE8',\n\tvBarv: '\\u2AE9',\n\tVcy: '\\u0412',\n\tvcy: '\\u0432',\n\tVDash: '\\u22AB',\n\tVdash: '\\u22A9',\n\tvDash: '\\u22A8',\n\tvdash: '\\u22A2',\n\tVdashl: '\\u2AE6',\n\tVee: '\\u22C1',\n\tvee: '\\u2228',\n\tveebar: '\\u22BB',\n\tveeeq: '\\u225A',\n\tvellip: '\\u22EE',\n\tVerbar: '\\u2016',\n\tverbar: '\\u007C',\n\tVert: '\\u2016',\n\tvert: '\\u007C',\n\tVerticalBar: '\\u2223',\n\tVerticalLine: '\\u007C',\n\tVerticalSeparator: '\\u2758',\n\tVerticalTilde: '\\u2240',\n\tVeryThinSpace: '\\u200A',\n\tVfr: '\\uD835\\uDD19',\n\tvfr: '\\uD835\\uDD33',\n\tvltri: '\\u22B2',\n\tvnsub: '\\u2282\\u20D2',\n\tvnsup: '\\u2283\\u20D2',\n\tVopf: '\\uD835\\uDD4D',\n\tvopf: '\\uD835\\uDD67',\n\tvprop: '\\u221D',\n\tvrtri: '\\u22B3',\n\tVscr: '\\uD835\\uDCB1',\n\tvscr: '\\uD835\\uDCCB',\n\tvsubnE: '\\u2ACB\\uFE00',\n\tvsubne: '\\u228A\\uFE00',\n\tvsupnE: '\\u2ACC\\uFE00',\n\tvsupne: '\\u228B\\uFE00',\n\tVvdash: '\\u22AA',\n\tvzigzag: '\\u299A',\n\tWcirc: '\\u0174',\n\twcirc: '\\u0175',\n\twedbar: '\\u2A5F',\n\tWedge: '\\u22C0',\n\twedge: '\\u2227',\n\twedgeq: '\\u2259',\n\tweierp: '\\u2118',\n\tWfr: '\\uD835\\uDD1A',\n\twfr: '\\uD835\\uDD34',\n\tWopf: '\\uD835\\uDD4E',\n\twopf: '\\uD835\\uDD68',\n\twp: '\\u2118',\n\twr: '\\u2240',\n\twreath: '\\u2240',\n\tWscr: '\\uD835\\uDCB2',\n\twscr: '\\uD835\\uDCCC',\n\txcap: '\\u22C2',\n\txcirc: '\\u25EF',\n\txcup: '\\u22C3',\n\txdtri: '\\u25BD',\n\tXfr: '\\uD835\\uDD1B',\n\txfr: '\\uD835\\uDD35',\n\txhArr: '\\u27FA',\n\txharr: '\\u27F7',\n\tXi: '\\u039E',\n\txi: '\\u03BE',\n\txlArr: '\\u27F8',\n\txlarr: '\\u27F5',\n\txmap: '\\u27FC',\n\txnis: '\\u22FB',\n\txodot: '\\u2A00',\n\tXopf: '\\uD835\\uDD4F',\n\txopf: '\\uD835\\uDD69',\n\txoplus: '\\u2A01',\n\txotime: '\\u2A02',\n\txrArr: '\\u27F9',\n\txrarr: '\\u27F6',\n\tXscr: '\\uD835\\uDCB3',\n\txscr: '\\uD835\\uDCCD',\n\txsqcup: '\\u2A06',\n\txuplus: '\\u2A04',\n\txutri: '\\u25B3',\n\txvee: '\\u22C1',\n\txwedge: '\\u22C0',\n\tYacute: '\\u00DD',\n\tyacute: '\\u00FD',\n\tYAcy: '\\u042F',\n\tyacy: '\\u044F',\n\tYcirc: '\\u0176',\n\tycirc: '\\u0177',\n\tYcy: '\\u042B',\n\tycy: '\\u044B',\n\tyen: '\\u00A5',\n\tYfr: '\\uD835\\uDD1C',\n\tyfr: '\\uD835\\uDD36',\n\tYIcy: '\\u0407',\n\tyicy: '\\u0457',\n\tYopf: '\\uD835\\uDD50',\n\tyopf: '\\uD835\\uDD6A',\n\tYscr: '\\uD835\\uDCB4',\n\tyscr: '\\uD835\\uDCCE',\n\tYUcy: '\\u042E',\n\tyucy: '\\u044E',\n\tYuml: '\\u0178',\n\tyuml: '\\u00FF',\n\tZacute: '\\u0179',\n\tzacute: '\\u017A',\n\tZcaron: '\\u017D',\n\tzcaron: '\\u017E',\n\tZcy: '\\u0417',\n\tzcy: '\\u0437',\n\tZdot: '\\u017B',\n\tzdot: '\\u017C',\n\tzeetrf: '\\u2128',\n\tZeroWidthSpace: '\\u200B',\n\tZeta: '\\u0396',\n\tzeta: '\\u03B6',\n\tZfr: '\\u2128',\n\tzfr: '\\uD835\\uDD37',\n\tZHcy: '\\u0416',\n\tzhcy: '\\u0436',\n\tzigrarr: '\\u21DD',\n\tZopf: '\\u2124',\n\tzopf: '\\uD835\\uDD6B',\n\tZscr: '\\uD835\\uDCB5',\n\tzscr: '\\uD835\\uDCCF',\n\tzwj: '\\u200D',\n\tzwnj: '\\u200C',\n});\n\n/**\n * @deprecated use `HTML_ENTITIES` instead\n * @see HTML_ENTITIES\n */\nexports.entityMap = exports.HTML_ENTITIES;\n","var dom = require('./dom')\nexports.DOMImplementation = dom.DOMImplementation\nexports.XMLSerializer = dom.XMLSerializer\nexports.DOMParser = require('./dom-parser').DOMParser\n","var NAMESPACE = require(\"./conventions\").NAMESPACE;\n\n//[4]   \tNameStartChar\t   ::=   \t\":\" | [A-Z] | \"_\" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\n//[4a]   \tNameChar\t   ::=   \tNameStartChar | \"-\" | \".\" | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]\n//[5]   \tName\t   ::=   \tNameStartChar (NameChar)*\nvar nameStartChar = /[A-Z_a-z\\xC0-\\xD6\\xD8-\\xF6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]///\\u10000-\\uEFFFF\nvar nameChar = new RegExp(\"[\\\\-\\\\.0-9\"+nameStartChar.source.slice(1,-1)+\"\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]\");\nvar tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\\:'+nameStartChar.source+nameChar.source+'*)?$');\n//var tagNamePattern = /^[a-zA-Z_][\\w\\-\\.]*(?:\\:[a-zA-Z_][\\w\\-\\.]*)?$/\n//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')\n\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\nvar S_TAG = 0;//tag name offerring\nvar S_ATTR = 1;//attr name offerring\nvar S_ATTR_SPACE=2;//attr name end and space offer\nvar S_EQ = 3;//=space?\nvar S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only)\nvar S_ATTR_END = 5;//attr value end and no space(quot end)\nvar S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer)\nvar S_TAG_CLOSE = 7;//closed el<el />\n\n/**\n * Creates an error that will not be caught by XMLReader aka the SAX parser.\n *\n * @param {string} message\n * @param {any?} locator Optional, can provide details about the location in the source\n * @constructor\n */\nfunction ParseError(message, locator) {\n\tthis.message = message\n\tthis.locator = locator\n\tif(Error.captureStackTrace) Error.captureStackTrace(this, ParseError);\n}\nParseError.prototype = new Error();\nParseError.prototype.name = ParseError.name\n\nfunction XMLReader(){\n\n}\n\nXMLReader.prototype = {\n\tparse:function(source,defaultNSMap,entityMap){\n\t\tvar domBuilder = this.domBuilder;\n\t\tdomBuilder.startDocument();\n\t\t_copy(defaultNSMap ,defaultNSMap = {})\n\t\tparse(source,defaultNSMap,entityMap,\n\t\t\t\tdomBuilder,this.errorHandler);\n\t\tdomBuilder.endDocument();\n\t}\n}\nfunction parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){\n\tfunction fixedFromCharCode(code) {\n\t\t// String.prototype.fromCharCode does not supports\n\t\t// > 2 bytes unicode chars directly\n\t\tif (code > 0xffff) {\n\t\t\tcode -= 0x10000;\n\t\t\tvar surrogate1 = 0xd800 + (code >> 10)\n\t\t\t\t, surrogate2 = 0xdc00 + (code & 0x3ff);\n\n\t\t\treturn String.fromCharCode(surrogate1, surrogate2);\n\t\t} else {\n\t\t\treturn String.fromCharCode(code);\n\t\t}\n\t}\n\tfunction entityReplacer(a){\n\t\tvar k = a.slice(1,-1);\n\t\tif (Object.hasOwnProperty.call(entityMap, k)) {\n\t\t\treturn entityMap[k];\n\t\t}else if(k.charAt(0) === '#'){\n\t\t\treturn fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))\n\t\t}else{\n\t\t\terrorHandler.error('entity not found:'+a);\n\t\t\treturn a;\n\t\t}\n\t}\n\tfunction appendText(end){//has some bugs\n\t\tif(end>start){\n\t\t\tvar xt = source.substring(start,end).replace(/&#?\\w+;/g,entityReplacer);\n\t\t\tlocator&&position(start);\n\t\t\tdomBuilder.characters(xt,0,end-start);\n\t\t\tstart = end\n\t\t}\n\t}\n\tfunction position(p,m){\n\t\twhile(p>=lineEnd && (m = linePattern.exec(source))){\n\t\t\tlineStart = m.index;\n\t\t\tlineEnd = lineStart + m[0].length;\n\t\t\tlocator.lineNumber++;\n\t\t\t//console.log('line++:',locator,startPos,endPos)\n\t\t}\n\t\tlocator.columnNumber = p-lineStart+1;\n\t}\n\tvar lineStart = 0;\n\tvar lineEnd = 0;\n\tvar linePattern = /.*(?:\\r\\n?|\\n)|.*$/g\n\tvar locator = domBuilder.locator;\n\n\tvar parseStack = [{currentNSMap:defaultNSMapCopy}]\n\tvar closeMap = {};\n\tvar start = 0;\n\twhile(true){\n\t\ttry{\n\t\t\tvar tagStart = source.indexOf('<',start);\n\t\t\tif(tagStart<0){\n\t\t\t\tif(!source.substr(start).match(/^\\s*$/)){\n\t\t\t\t\tvar doc = domBuilder.doc;\n\t    \t\t\tvar text = doc.createTextNode(source.substr(start));\n\t    \t\t\tdoc.appendChild(text);\n\t    \t\t\tdomBuilder.currentElement = text;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(tagStart>start){\n\t\t\t\tappendText(tagStart);\n\t\t\t}\n\t\t\tswitch(source.charAt(tagStart+1)){\n\t\t\tcase '/':\n\t\t\t\tvar end = source.indexOf('>',tagStart+3);\n\t\t\t\tvar tagName = source.substring(tagStart + 2, end).replace(/[ \\t\\n\\r]+$/g, '');\n\t\t\t\tvar config = parseStack.pop();\n\t\t\t\tif(end<0){\n\n\t        \t\ttagName = source.substring(tagStart+2).replace(/[\\s<].*/,'');\n\t        \t\terrorHandler.error(\"end tag name: \"+tagName+' is not complete:'+config.tagName);\n\t        \t\tend = tagStart+1+tagName.length;\n\t        \t}else if(tagName.match(/\\s</)){\n\t        \t\ttagName = tagName.replace(/[\\s<].*/,'');\n\t        \t\terrorHandler.error(\"end tag name: \"+tagName+' maybe not complete');\n\t        \t\tend = tagStart+1+tagName.length;\n\t\t\t\t}\n\t\t\t\tvar localNSMap = config.localNSMap;\n\t\t\t\tvar endMatch = config.tagName == tagName;\n\t\t\t\tvar endIgnoreCaseMach = endMatch || config.tagName&&config.tagName.toLowerCase() == tagName.toLowerCase()\n\t\t        if(endIgnoreCaseMach){\n\t\t        \tdomBuilder.endElement(config.uri,config.localName,tagName);\n\t\t\t\t\tif(localNSMap){\n\t\t\t\t\t\tfor (var prefix in localNSMap) {\n\t\t\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(localNSMap, prefix)) {\n\t\t\t\t\t\t\t\tdomBuilder.endPrefixMapping(prefix);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(!endMatch){\n\t\t            \terrorHandler.fatalError(\"end tag name: \"+tagName+' is not match the current start tagName:'+config.tagName ); // No known test case\n\t\t\t\t\t}\n\t\t        }else{\n\t\t        \tparseStack.push(config)\n\t\t        }\n\n\t\t\t\tend++;\n\t\t\t\tbreak;\n\t\t\t\t// end elment\n\t\t\tcase '?':// <?...?>\n\t\t\t\tlocator&&position(tagStart);\n\t\t\t\tend = parseInstruction(source,tagStart,domBuilder);\n\t\t\t\tbreak;\n\t\t\tcase '!':// <!doctype,<![CDATA,<!--\n\t\t\t\tlocator&&position(tagStart);\n\t\t\t\tend = parseDCC(source,tagStart,domBuilder,errorHandler);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tlocator&&position(tagStart);\n\t\t\t\tvar el = new ElementAttributes();\n\t\t\t\tvar currentNSMap = parseStack[parseStack.length-1].currentNSMap;\n\t\t\t\t//elStartEnd\n\t\t\t\tvar end = parseElementStartPart(source,tagStart,el,currentNSMap,entityReplacer,errorHandler);\n\t\t\t\tvar len = el.length;\n\n\n\t\t\t\tif(!el.closed && fixSelfClosed(source,end,el.tagName,closeMap)){\n\t\t\t\t\tel.closed = true;\n\t\t\t\t\tif(!entityMap.nbsp){\n\t\t\t\t\t\terrorHandler.warning('unclosed xml attribute');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(locator && len){\n\t\t\t\t\tvar locator2 = copyLocator(locator,{});\n\t\t\t\t\t//try{//attribute position fixed\n\t\t\t\t\tfor(var i = 0;i<len;i++){\n\t\t\t\t\t\tvar a = el[i];\n\t\t\t\t\t\tposition(a.offset);\n\t\t\t\t\t\ta.locator = copyLocator(locator,{});\n\t\t\t\t\t}\n\t\t\t\t\tdomBuilder.locator = locator2\n\t\t\t\t\tif(appendElement(el,domBuilder,currentNSMap)){\n\t\t\t\t\t\tparseStack.push(el)\n\t\t\t\t\t}\n\t\t\t\t\tdomBuilder.locator = locator;\n\t\t\t\t}else{\n\t\t\t\t\tif(appendElement(el,domBuilder,currentNSMap)){\n\t\t\t\t\t\tparseStack.push(el)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (NAMESPACE.isHTML(el.uri) && !el.closed) {\n\t\t\t\t\tend = parseHtmlSpecialContent(source,end,el.tagName,entityReplacer,domBuilder)\n\t\t\t\t} else {\n\t\t\t\t\tend++;\n\t\t\t\t}\n\t\t\t}\n\t\t}catch(e){\n\t\t\tif (e instanceof ParseError) {\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t\terrorHandler.error('element parse error: '+e)\n\t\t\tend = -1;\n\t\t}\n\t\tif(end>start){\n\t\t\tstart = end;\n\t\t}else{\n\t\t\t//TODO: 这里有可能sax回退,有位置错误风险\n\t\t\tappendText(Math.max(tagStart,start)+1);\n\t\t}\n\t}\n}\nfunction copyLocator(f,t){\n\tt.lineNumber = f.lineNumber;\n\tt.columnNumber = f.columnNumber;\n\treturn t;\n}\n\n/**\n * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack);\n * @return end of the elementStartPart(end of elementEndPart for selfClosed el)\n */\nfunction parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){\n\n\t/**\n\t * @param {string} qname\n\t * @param {string} value\n\t * @param {number} startIndex\n\t */\n\tfunction addAttribute(qname, value, startIndex) {\n\t\tif (el.attributeNames.hasOwnProperty(qname)) {\n\t\t\terrorHandler.fatalError('Attribute ' + qname + ' redefined')\n\t\t}\n\t\tel.addValue(\n\t\t\tqname,\n\t\t\t// @see https://www.w3.org/TR/xml/#AVNormalize\n\t\t\t// since the xmldom sax parser does not \"interpret\" DTD the following is not implemented:\n\t\t\t// - recursive replacement of (DTD) entity references\n\t\t\t// - trimming and collapsing multiple spaces into a single one for attributes that are not of type CDATA\n\t\t\tvalue.replace(/[\\t\\n\\r]/g, ' ').replace(/&#?\\w+;/g, entityReplacer),\n\t\t\tstartIndex\n\t\t)\n\t}\n\tvar attrName;\n\tvar value;\n\tvar p = ++start;\n\tvar s = S_TAG;//status\n\twhile(true){\n\t\tvar c = source.charAt(p);\n\t\tswitch(c){\n\t\tcase '=':\n\t\t\tif(s === S_ATTR){//attrName\n\t\t\t\tattrName = source.slice(start,p);\n\t\t\t\ts = S_EQ;\n\t\t\t}else if(s === S_ATTR_SPACE){\n\t\t\t\ts = S_EQ;\n\t\t\t}else{\n\t\t\t\t//fatalError: equal must after attrName or space after attrName\n\t\t\t\tthrow new Error('attribute equal must after attrName'); // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '\\'':\n\t\tcase '\"':\n\t\t\tif(s === S_EQ || s === S_ATTR //|| s == S_ATTR_SPACE\n\t\t\t\t){//equal\n\t\t\t\tif(s === S_ATTR){\n\t\t\t\t\terrorHandler.warning('attribute value must after \"=\"')\n\t\t\t\t\tattrName = source.slice(start,p)\n\t\t\t\t}\n\t\t\t\tstart = p+1;\n\t\t\t\tp = source.indexOf(c,start)\n\t\t\t\tif(p>0){\n\t\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\t\taddAttribute(attrName, value, start-1);\n\t\t\t\t\ts = S_ATTR_END;\n\t\t\t\t}else{\n\t\t\t\t\t//fatalError: no end quot match\n\t\t\t\t\tthrow new Error('attribute value no end \\''+c+'\\' match');\n\t\t\t\t}\n\t\t\t}else if(s == S_ATTR_NOQUOT_VALUE){\n\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\taddAttribute(attrName, value, start);\n\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed start quot('+c+')!!');\n\t\t\t\tstart = p+1;\n\t\t\t\ts = S_ATTR_END\n\t\t\t}else{\n\t\t\t\t//fatalError: no equal before\n\t\t\t\tthrow new Error('attribute value must after \"=\"'); // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '/':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_ATTR_END:\n\t\t\tcase S_TAG_SPACE:\n\t\t\tcase S_TAG_CLOSE:\n\t\t\t\ts =S_TAG_CLOSE;\n\t\t\t\tel.closed = true;\n\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\tcase S_ATTR:\n\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\tel.closed = true;\n\t\t\t\tbreak;\n\t\t\t//case S_EQ:\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"attribute invalid close char('/')\") // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase ''://end document\n\t\t\terrorHandler.error('unexpected end of input');\n\t\t\tif(s == S_TAG){\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\t}\n\t\t\treturn p;\n\t\tcase '>':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_ATTR_END:\n\t\t\tcase S_TAG_SPACE:\n\t\t\tcase S_TAG_CLOSE:\n\t\t\t\tbreak;//normal\n\t\t\tcase S_ATTR_NOQUOT_VALUE://Compatible state\n\t\t\tcase S_ATTR:\n\t\t\t\tvalue = source.slice(start,p);\n\t\t\t\tif(value.slice(-1) === '/'){\n\t\t\t\t\tel.closed  = true;\n\t\t\t\t\tvalue = value.slice(0,-1)\n\t\t\t\t}\n\t\t\tcase S_ATTR_SPACE:\n\t\t\t\tif(s === S_ATTR_SPACE){\n\t\t\t\t\tvalue = attrName;\n\t\t\t\t}\n\t\t\t\tif(s == S_ATTR_NOQUOT_VALUE){\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!');\n\t\t\t\t\taddAttribute(attrName, value, start)\n\t\t\t\t}else{\n\t\t\t\t\tif(!NAMESPACE.isHTML(currentNSMap['']) || !value.match(/^(?:disabled|checked|selected)$/i)){\n\t\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed value!! \"'+value+'\" instead!!')\n\t\t\t\t\t}\n\t\t\t\t\taddAttribute(value, value, start)\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase S_EQ:\n\t\t\t\tthrow new Error('attribute value missed!!');\n\t\t\t}\n//\t\t\tconsole.log(tagName,tagNamePattern,tagNamePattern.test(tagName))\n\t\t\treturn p;\n\t\t/*xml space '\\x20' | #x9 | #xD | #xA; */\n\t\tcase '\\u0080':\n\t\t\tc = ' ';\n\t\tdefault:\n\t\t\tif(c<= ' '){//space\n\t\t\t\tswitch(s){\n\t\t\t\tcase S_TAG:\n\t\t\t\t\tel.setTagName(source.slice(start,p));//tagName\n\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR:\n\t\t\t\t\tattrName = source.slice(start,p)\n\t\t\t\t\ts = S_ATTR_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\t\t\tvar value = source.slice(start, p);\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!!');\n\t\t\t\t\taddAttribute(attrName, value, start)\n\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\t//case S_TAG_SPACE:\n\t\t\t\t//case S_EQ:\n\t\t\t\t//case S_ATTR_SPACE:\n\t\t\t\t//\tvoid();break;\n\t\t\t\t//case S_TAG_CLOSE:\n\t\t\t\t\t//ignore warning\n\t\t\t\t}\n\t\t\t}else{//not space\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\n\t\t\t\tswitch(s){\n\t\t\t\t//case S_TAG:void();break;\n\t\t\t\t//case S_ATTR:void();break;\n\t\t\t\t//case S_ATTR_NOQUOT_VALUE:void();break;\n\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\tvar tagName =  el.tagName;\n\t\t\t\t\tif (!NAMESPACE.isHTML(currentNSMap['']) || !attrName.match(/^(?:disabled|checked|selected)$/i)) {\n\t\t\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed value!! \"'+attrName+'\" instead2!!')\n\t\t\t\t\t}\n\t\t\t\t\taddAttribute(attrName, attrName, start);\n\t\t\t\t\tstart = p;\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\terrorHandler.warning('attribute space is required\"'+attrName+'\"!!')\n\t\t\t\tcase S_TAG_SPACE:\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_EQ:\n\t\t\t\t\ts = S_ATTR_NOQUOT_VALUE;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_TAG_CLOSE:\n\t\t\t\t\tthrow new Error(\"elements closed character '/' and '>' must be connected to\");\n\t\t\t\t}\n\t\t\t}\n\t\t}//end outer switch\n\t\t//console.log('p++',p)\n\t\tp++;\n\t}\n}\n/**\n * @return true if has new namespace define\n */\nfunction appendElement(el,domBuilder,currentNSMap){\n\tvar tagName = el.tagName;\n\tvar localNSMap = null;\n\t//var currentNSMap = parseStack[parseStack.length-1].currentNSMap;\n\tvar i = el.length;\n\twhile(i--){\n\t\tvar a = el[i];\n\t\tvar qName = a.qName;\n\t\tvar value = a.value;\n\t\tvar nsp = qName.indexOf(':');\n\t\tif(nsp>0){\n\t\t\tvar prefix = a.prefix = qName.slice(0,nsp);\n\t\t\tvar localName = qName.slice(nsp+1);\n\t\t\tvar nsPrefix = prefix === 'xmlns' && localName\n\t\t}else{\n\t\t\tlocalName = qName;\n\t\t\tprefix = null\n\t\t\tnsPrefix = qName === 'xmlns' && ''\n\t\t}\n\t\t//can not set prefix,because prefix !== ''\n\t\ta.localName = localName ;\n\t\t//prefix == null for no ns prefix attribute\n\t\tif(nsPrefix !== false){//hack!!\n\t\t\tif(localNSMap == null){\n\t\t\t\tlocalNSMap = {}\n\t\t\t\t//console.log(currentNSMap,0)\n\t\t\t\t_copy(currentNSMap,currentNSMap={})\n\t\t\t\t//console.log(currentNSMap,1)\n\t\t\t}\n\t\t\tcurrentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;\n\t\t\ta.uri = NAMESPACE.XMLNS\n\t\t\tdomBuilder.startPrefixMapping(nsPrefix, value)\n\t\t}\n\t}\n\tvar i = el.length;\n\twhile(i--){\n\t\ta = el[i];\n\t\tvar prefix = a.prefix;\n\t\tif(prefix){//no prefix attribute has no namespace\n\t\t\tif(prefix === 'xml'){\n\t\t\t\ta.uri = NAMESPACE.XML;\n\t\t\t}if(prefix !== 'xmlns'){\n\t\t\t\ta.uri = currentNSMap[prefix || '']\n\n\t\t\t\t//{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)}\n\t\t\t}\n\t\t}\n\t}\n\tvar nsp = tagName.indexOf(':');\n\tif(nsp>0){\n\t\tprefix = el.prefix = tagName.slice(0,nsp);\n\t\tlocalName = el.localName = tagName.slice(nsp+1);\n\t}else{\n\t\tprefix = null;//important!!\n\t\tlocalName = el.localName = tagName;\n\t}\n\t//no prefix element has default namespace\n\tvar ns = el.uri = currentNSMap[prefix || ''];\n\tdomBuilder.startElement(ns,localName,tagName,el);\n\t//endPrefixMapping and startPrefixMapping have not any help for dom builder\n\t//localNSMap = null\n\tif(el.closed){\n\t\tdomBuilder.endElement(ns,localName,tagName);\n\t\tif(localNSMap){\n\t\t\tfor (prefix in localNSMap) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(localNSMap, prefix)) {\n\t\t\t\t\tdomBuilder.endPrefixMapping(prefix);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}else{\n\t\tel.currentNSMap = currentNSMap;\n\t\tel.localNSMap = localNSMap;\n\t\t//parseStack.push(el);\n\t\treturn true;\n\t}\n}\nfunction parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){\n\tif(/^(?:script|textarea)$/i.test(tagName)){\n\t\tvar elEndStart =  source.indexOf('</'+tagName+'>',elStartEnd);\n\t\tvar text = source.substring(elStartEnd+1,elEndStart);\n\t\tif(/[&<]/.test(text)){\n\t\t\tif(/^script$/i.test(tagName)){\n\t\t\t\t//if(!/\\]\\]>/.test(text)){\n\t\t\t\t\t//lexHandler.startCDATA();\n\t\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\t\t//lexHandler.endCDATA();\n\t\t\t\t\treturn elEndStart;\n\t\t\t\t//}\n\t\t\t}//}else{//text area\n\t\t\t\ttext = text.replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\treturn elEndStart;\n\t\t\t//}\n\n\t\t}\n\t}\n\treturn elStartEnd+1;\n}\nfunction fixSelfClosed(source,elStartEnd,tagName,closeMap){\n\t//if(tagName in closeMap){\n\tvar pos = closeMap[tagName];\n\tif(pos == null){\n\t\t//console.log(tagName)\n\t\tpos =  source.lastIndexOf('</'+tagName+'>')\n\t\tif(pos<elStartEnd){//忘记闭合\n\t\t\tpos = source.lastIndexOf('</'+tagName)\n\t\t}\n\t\tcloseMap[tagName] =pos\n\t}\n\treturn pos<elStartEnd;\n\t//}\n}\n\nfunction _copy (source, target) {\n\tfor (var n in source) {\n\t\tif (Object.prototype.hasOwnProperty.call(source, n)) {\n\t\t\ttarget[n] = source[n];\n\t\t}\n\t}\n}\n\nfunction parseDCC(source,start,domBuilder,errorHandler){//sure start with '<!'\n\tvar next= source.charAt(start+2)\n\tswitch(next){\n\tcase '-':\n\t\tif(source.charAt(start + 3) === '-'){\n\t\t\tvar end = source.indexOf('-->',start+4);\n\t\t\t//append comment source.substring(4,end)//<!--\n\t\t\tif(end>start){\n\t\t\t\tdomBuilder.comment(source,start+4,end-start-4);\n\t\t\t\treturn end+3;\n\t\t\t}else{\n\t\t\t\terrorHandler.error(\"Unclosed comment\");\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}else{\n\t\t\t//error\n\t\t\treturn -1;\n\t\t}\n\tdefault:\n\t\tif(source.substr(start+3,6) == 'CDATA['){\n\t\t\tvar end = source.indexOf(']]>',start+9);\n\t\t\tdomBuilder.startCDATA();\n\t\t\tdomBuilder.characters(source,start+9,end-start-9);\n\t\t\tdomBuilder.endCDATA()\n\t\t\treturn end+3;\n\t\t}\n\t\t//<!DOCTYPE\n\t\t//startDTD(java.lang.String name, java.lang.String publicId, java.lang.String systemId)\n\t\tvar matchs = split(source,start);\n\t\tvar len = matchs.length;\n\t\tif(len>1 && /!doctype/i.test(matchs[0][0])){\n\t\t\tvar name = matchs[1][0];\n\t\t\tvar pubid = false;\n\t\t\tvar sysid = false;\n\t\t\tif(len>3){\n\t\t\t\tif(/^public$/i.test(matchs[2][0])){\n\t\t\t\t\tpubid = matchs[3][0];\n\t\t\t\t\tsysid = len>4 && matchs[4][0];\n\t\t\t\t}else if(/^system$/i.test(matchs[2][0])){\n\t\t\t\t\tsysid = matchs[3][0];\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar lastMatch = matchs[len-1]\n\t\t\tdomBuilder.startDTD(name, pubid, sysid);\n\t\t\tdomBuilder.endDTD();\n\n\t\t\treturn lastMatch.index+lastMatch[0].length\n\t\t}\n\t}\n\treturn -1;\n}\n\n\n\nfunction parseInstruction(source,start,domBuilder){\n\tvar end = source.indexOf('?>',start);\n\tif(end){\n\t\tvar match = source.substring(start,end).match(/^<\\?(\\S*)\\s*([\\s\\S]*?)\\s*$/);\n\t\tif(match){\n\t\t\tvar len = match[0].length;\n\t\t\tdomBuilder.processingInstruction(match[1], match[2]) ;\n\t\t\treturn end+2;\n\t\t}else{//error\n\t\t\treturn -1;\n\t\t}\n\t}\n\treturn -1;\n}\n\nfunction ElementAttributes(){\n\tthis.attributeNames = {}\n}\nElementAttributes.prototype = {\n\tsetTagName:function(tagName){\n\t\tif(!tagNamePattern.test(tagName)){\n\t\t\tthrow new Error('invalid tagName:'+tagName)\n\t\t}\n\t\tthis.tagName = tagName\n\t},\n\taddValue:function(qName, value, offset) {\n\t\tif(!tagNamePattern.test(qName)){\n\t\t\tthrow new Error('invalid attribute:'+qName)\n\t\t}\n\t\tthis.attributeNames[qName] = this.length;\n\t\tthis[this.length++] = {qName:qName,value:value,offset:offset}\n\t},\n\tlength:0,\n\tgetLocalName:function(i){return this[i].localName},\n\tgetLocator:function(i){return this[i].locator},\n\tgetQName:function(i){return this[i].qName},\n\tgetURI:function(i){return this[i].uri},\n\tgetValue:function(i){return this[i].value}\n//\t,getIndex:function(uri, localName)){\n//\t\tif(localName){\n//\n//\t\t}else{\n//\t\t\tvar qName = uri\n//\t\t}\n//\t},\n//\tgetValue:function(){return this.getValue(this.getIndex.apply(this,arguments))},\n//\tgetType:function(uri,localName){}\n//\tgetType:function(i){},\n}\n\n\n\nfunction split(source,start){\n\tvar match;\n\tvar buf = [];\n\tvar reg = /'[^']+'|\"[^\"]+\"|[^\\s<>\\/=]+=?|(\\/?\\s*>|<)/g;\n\treg.lastIndex = start;\n\treg.exec(source);//skip <\n\twhile(match = reg.exec(source)){\n\t\tbuf.push(match);\n\t\tif(match[1])return buf;\n\t}\n}\n\nexports.XMLReader = XMLReader;\nexports.ParseError = ParseError;\n","import { capabilities } from '@ember/modifier';\nimport { destroy } from '@ember/destroyable';\nimport type Owner from '@ember/owner';\n\nimport type ClassBasedModifier from './modifier';\nimport type { ArgsFor, ElementFor } from '../signature';\n\n/**\n * The state bucket used throughout the life-cycle of the modifier. Basically a\n * state *machine*, where the framework calls us with the version we hand back\n * to it at each phase. The two states are the two `extends` versions of this\n * below.\n *\n * @internal\n */\ninterface State<S> {\n  instance: ClassBasedModifier<S>;\n}\n\n/**\n * The `State` after calling `createModifier`, and therefore the state available\n * at the start of `InstallModifier`.\n * @internal\n */\ninterface CreatedState<S> extends State<S> {\n  element: null;\n}\n\n/**\n * The `State` after calling `installModifier`, and therefore the state\n * available in all `updateModifier` calls and in `destroyModifier`.\n * @internal\n */\ninterface InstalledState<S> extends State<S> {\n  element: ElementFor<S>;\n}\n\n// Wraps the unsafe (b/c it mutates, rather than creating new state) code that\n// TS does not yet understand.\nfunction installElement<S>(\n  state: CreatedState<S>,\n  element: ElementFor<S>,\n): InstalledState<S> {\n  // SAFETY: this cast represents how we are actually handling the state machine\n  // transition: from this point forward in the lifecycle of the modifier, it\n  // always behaves as `InstalledState<S>`. It is safe because, and *only*\n  // because, we immediately initialize `element`. (We cannot create a new state\n  // from the old one because the modifier manager API expects mutation of a\n  // single state bucket rather than updating it at hook calls.)\n  const installedState = state as State<S> as InstalledState<S>;\n  installedState.element = element;\n  return installedState;\n}\n\nexport default class ClassBasedModifierManager<S> {\n  capabilities = capabilities('3.22');\n\n  constructor(private owner: Owner) {}\n\n  createModifier(\n    modifierClass: typeof ClassBasedModifier,\n    args: ArgsFor<S>,\n  ): CreatedState<S> {\n    const instance = new modifierClass(this.owner, args);\n    return { instance, element: null };\n  }\n\n  installModifier(\n    createdState: CreatedState<S>,\n    element: ElementFor<S>,\n    args: ArgsFor<S>,\n  ): void {\n    const state = installElement(createdState, element);\n    state.instance.modify(element, args.positional, args.named);\n  }\n\n  updateModifier(state: InstalledState<S>, args: ArgsFor<S>): void {\n    state.instance.modify(state.element, args.positional, args.named);\n  }\n\n  destroyModifier({ instance }: InstalledState<S>): void {\n    destroy(instance);\n  }\n}\n","import { setOwner } from '@ember/application';\nimport { setModifierManager } from '@ember/modifier';\nimport type Owner from '@ember/owner';\nimport Manager from './modifier-manager.ts';\nimport type {\n  ElementFor,\n  ArgsFor,\n  DefaultSignature,\n  PositionalArgs,\n  NamedArgs,\n} from '../signature';\nimport type Opaque from '../opaque';\n\n// Preserve the signature on a class-based modifier, so it can be plucked off\n// later (by e.g. Glint), using interface merging with an opaque item to\n// preserve it in the type system. The fact that it's an empty interface is\n// actually the point: it *only* hooks the type parameter into the opaque\n// (nominal) type. Note that this is distinct from the function-based modifier\n// type intentionally, because it is actually the static class side of a\n// class-based modifier which corresponds to the result of calling `modifier()`\n// with a callback defining a function-based modifier.\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport default interface ClassBasedModifier<S = DefaultSignature>\n  extends Opaque<S> {}\n\n/**\n * A base class for modifiers which need more capabilities than function-based\n * modifiers. Useful if, for example:\n *\n * 1. You need to inject services and access them\n * 2. You need fine-grained control of updates, either for performance or\n *    convenience reasons, and don't want to teardown the state of your modifier\n *    every time only to set it up again.\n * 3. You need to store some local state within your modifier.\n *\n * The lifecycle hooks of class modifiers are tracked. When they run, they any\n * values they access will be added to the modifier, and the modifier will\n * update if any of those values change.\n */\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport default class ClassBasedModifier<S = DefaultSignature> {\n  // `args` is passed here for the sake of subclasses to have access to args in\n  // their constructors while having constructors which are properly asssignable\n  // for the superclass.\n  /**\n   *\n   * @param owner An instance of an Owner (for service injection etc.).\n   * @param args The positional and named arguments passed to the modifier.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  constructor(owner: Owner, args: ArgsFor<S>) {\n    setOwner(this, owner);\n  }\n\n  /**\n   * Called when the modifier is installed and any time any tracked state used\n   * in the modifier changes.\n   *\n   * If you need to do first-time-only setup, create a class field representing\n   * the initialization state and check it when running the hook. That is also\n   * where and when you should use `registerDestructor` for any teardown you\n   * need to do. For example:\n   *\n   * ```js\n   * function disconnect(instance) {\n   *  instance.observer?.disconnect();\n   * }\n   *\n   * class IntersectionObserver extends Modifier {\n   *   observer;\n   *\n   *   constructor(owner, args) {\n   *     super(owner, args);\n   *     registerDestructor(this, disconnect);\n   *   }\n   *\n   *   modify(element, callback, options) {\n   *     disconnect(this);\n   *\n   *     this.observer = new IntersectionObserver(callback, options);\n   *     this.observer.observe(element);\n   *   }\n   * }\n   * ```\n   *\n   * @param element The element to which the modifier is applied.\n   * @param positional The positional arguments to the modifier.\n   * @param named The named arguments to the modifier.\n   */\n  modify(\n    /* eslint-disable @typescript-eslint/no-unused-vars */\n    element: ElementFor<S>,\n    positional: PositionalArgs<S>,\n    named: NamedArgs<S>,\n    /* eslint-enable @typescript-eslint/no-unused-vars */\n  ): void {\n    /* no op, for subclassing */\n  }\n}\n\nsetModifierManager((owner) => new Manager(owner), ClassBasedModifier);\n","import { setModifierManager } from '@ember/modifier';\nimport type {\n  ElementFor,\n  EmptyObject,\n  NamedArgs,\n  PositionalArgs,\n} from '../signature';\nimport type Modifier from '../class-based/modifier';\nimport FunctionBasedModifierManager from './modifier-manager.ts';\n\n// Provide a singleton manager.\nconst MANAGER = new FunctionBasedModifierManager();\n\n// This type exists to provide a non-user-constructible, non-subclassable\n// type representing the conceptual \"instance type\" of a function modifier.\n// The abstract field of type `never` prevents subclassing in userspace of\n// the value returned from `modifier()`. By extending `Modifier<S>`, any\n// augmentations of the `Modifier` type performed by tools like Glint will\n// also apply to function-based modifiers as well.\nexport declare abstract class FunctionBasedModifierInstance<\n  S,\n> extends Modifier<S> {\n  protected abstract __concrete__: never;\n}\n\n// This provides a type whose only purpose here is to represent the runtime\n// type of a function-based modifier: a virtually opaque item. The fact that it's\n// a bare constructor type allows `modifier()` to preserve type parameters from\n// a generic function it's passed, and by making it abstract and impossible to\n// subclass (see above) we prevent users from attempting to instantiate the return\n// value from a `modifier()` call.\nexport type FunctionBasedModifier<S> =\n  abstract new () => FunctionBasedModifierInstance<S>;\n\n/**\n * The (optional) return type for a modifier which needs to perform some kind of\n * cleanup or teardown -- for example, removing an event listener from an\n * element besides the one passed into the modifier.\n */\nexport type Teardown = () => unknown;\n\n/**\n * An API for writing simple modifiers.\n *\n * This function runs the first time when the element the modifier was applied\n * to is inserted into the DOM, and it *autotracks* while running. Any values\n * that it accesses will be tracked, including any of its arguments that it\n * accesses, and if any of them changes, the function will run again.\n *\n * **Note:** this will *not* automatically rerun because an argument changes. It\n * will only rerun if it is *using* that argument (the same as with auto-tracked\n * state in general).\n *\n * The modifier can also optionally return a *destructor*. The destructor\n * function will be run just before the next update, and when the element is\n * being removed entirely. It should generally clean up the changes that the\n * modifier made in the first place.\n *\n * @param fn The function which defines the modifier.\n */\n// This overload allows users to write types directly on the callback passed to\n// the `modifier` function and infer the resulting type correctly.\nexport default function modifier<\n  E extends Element,\n  P extends unknown[],\n  N = EmptyObject,\n>(\n  fn: (element: E, positional: P, named: N) => void | Teardown,\n): FunctionBasedModifier<{\n  Args: {\n    Positional: P;\n    Named: N;\n  };\n  Element: E;\n}>;\n\n/**\n * An API for writing simple modifiers.\n *\n * This function runs the first time when the element the modifier was applied\n * to is inserted into the DOM, and it *autotracks* while running. Any values\n * that it accesses will be tracked, including any of its arguments that it\n * accesses, and if any of them changes, the function will run again.\n *\n * **Note:** this will *not* automatically rerun because an argument changes. It\n * will only rerun if it is *using* that argument (the same as with auto-tracked\n * state in general).\n *\n * The modifier can also optionally return a *destructor*. The destructor\n * function will be run just before the next update, and when the element is\n * being removed entirely. It should generally clean up the changes that the\n * modifier made in the first place.\n *\n * @param fn The function which defines the modifier.\n */\n// This overload allows users to provide a `Signature` type explicitly at the\n// modifier definition site, e.g. `modifier<Sig>((el, pos, named) => {...})`.\n// **Note:** this overload must appear second, since TS' inference engine will\n// not correctly infer the type of `S` here from the types on the supplied\n// callback.\nexport default function modifier<S>(\n  fn: (\n    element: ElementFor<S>,\n    positional: PositionalArgs<S>,\n    named: NamedArgs<S>,\n  ) => void | Teardown,\n): FunctionBasedModifier<{\n  Element: ElementFor<S>;\n  Args: {\n    Named: NamedArgs<S>;\n    Positional: PositionalArgs<S>;\n  };\n}>;\n\n// This is the runtime signature; it performs no inference whatsover and just\n// uses the simplest version of the invocation possible since, for the case of\n// setting it on the modifier manager, we don't *need* any of that info, and\n// the two previous overloads capture all invocations from a type perspective.\nexport default function modifier(\n  fn: (\n    element: Element,\n    positional: unknown[],\n    named: object,\n  ) => void | Teardown,\n  options?: {\n    name: string;\n  },\n): FunctionBasedModifier<{\n  Element: Element;\n  Args: {\n    Named: object;\n    Positional: unknown[];\n  };\n}> {\n  fn.toString = () => options?.name || fn.name;\n  // SAFETY: the cast here is a *lie*, but it is a useful one. The actual return\n  // type of `setModifierManager` today is `void`; we pretend it actually\n  // returns an opaque `Modifier` type so that we can provide a result from this\n  // type which is useful to TS-aware tooling (e.g. Glint).\n  return setModifierManager(\n    () => MANAGER,\n    fn,\n  ) as unknown as FunctionBasedModifier<{\n    Element: Element;\n    Args: {\n      Named: object;\n      Positional: unknown[];\n    };\n  }>;\n}\n\n/**\n * @internal\n */\nexport type FunctionBasedModifierDefinition<S> = (\n  element: ElementFor<S>,\n  positional: PositionalArgs<S>,\n  named: NamedArgs<S>,\n) => void | Teardown;\n","import { capabilities } from '@ember/modifier';\nimport type { FunctionBasedModifierDefinition, Teardown } from './modifier';\nimport type { ArgsFor, ElementFor } from '../signature';\n\ninterface State<S> {\n  instance: FunctionBasedModifierDefinition<S>;\n}\n\ninterface CreatedState<S> extends State<S> {\n  element: null;\n}\n\ninterface InstalledState<S> extends State<S> {\n  element: ElementFor<S>;\n  teardown?: Teardown;\n}\n\n// Wraps the unsafe (b/c it mutates, rather than creating new state) code that\n// TS does not yet understand.\nfunction installElement<S>(\n  state: CreatedState<S>,\n  element: ElementFor<S>,\n): InstalledState<S> {\n  // SAFETY: this cast represents how we are actually handling the state machine\n  // transition: from this point forward in the lifecycle of the modifier, it\n  // always behaves as `InstalledState<S>`. It is safe because, and *only*\n  // because, we immediately initialize `element`. (We cannot create a new state\n  // from the old one because the modifier manager API expects mutation of a\n  // single state bucket rather than updating it at hook calls.)\n  const installedState = state as State<S> as InstalledState<S>;\n  installedState.element = element;\n  return installedState;\n}\n\nexport default class FunctionBasedModifierManager<S> {\n  capabilities = capabilities('3.22');\n\n  createModifier(\n    instance: FunctionBasedModifierDefinition<S>,\n  ): CreatedState<S> {\n    return { element: null, instance };\n  }\n\n  installModifier(\n    createdState: CreatedState<S>,\n    element: ElementFor<S>,\n    args: ArgsFor<S>,\n  ): void {\n    const state = installElement(createdState, element);\n\n    const { positional, named } = args;\n    const teardown = createdState.instance(element, positional, named);\n    if (typeof teardown === 'function') {\n      state.teardown = teardown;\n    }\n  }\n\n  updateModifier(state: InstalledState<S>, args: ArgsFor<S>): void {\n    if (typeof state.teardown === 'function') {\n      state.teardown();\n    }\n\n    const teardown = state.instance(state.element, args.positional, args.named);\n    if (typeof teardown === 'function') {\n      state.teardown = teardown;\n    }\n  }\n\n  destroyModifier(state: InstalledState<S>): void {\n    if (typeof state.teardown === 'function') {\n      state.teardown();\n    }\n  }\n\n  getDebugName(state: InstalledState<S>): string {\n    return state.instance.toString();\n  }\n\n  getDebugInstance(state: InstalledState<S>): InstalledState<S> {\n    return state;\n  }\n}\n","import { scheduleOnce } from '@ember/runloop';\nimport Service, { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { assert } from '@ember/debug';\nimport type ApplicationInstance from '@ember/application/instance';\nimport type RouterService from '@ember/routing/router-service';\nimport type Owner from '@ember/owner';\n\nimport type {\n  FastBootDocument,\n  PageTitleToken,\n  PageTitleConfig,\n} from '../private-types.ts';\n\nconst isFastBoot = typeof FastBoot !== 'undefined';\n\nconst RouterEvent = {\n  ROUTE_DID_CHANGE: 'routeDidChange',\n} as const;\n\nfunction hasResolveRegistration(owner: Owner): owner is ApplicationInstance {\n  return `resolveRegistration` in owner;\n}\n\nfunction hasPageTitleConfig(\n  fromEnv: unknown,\n): fromEnv is { pageTitle: PageTitleConfig } {\n  if (typeof fromEnv !== 'object') return false;\n  if (fromEnv === null) return false;\n\n  // all properties on the pageTitle config are optional,\n  // so we can't check for more\n  return 'pageTitle' in fromEnv;\n}\n\nconst configKeys = ['separator', 'prepend', 'replace'] as const;\n\n/**\n  @class page-title\n  @extends Ember.Service\n */\nexport default class PageTitleService extends Service {\n  @service('router') declare router: RouterService;\n\n  // in fastboot context \"document\" is instance of\n  // ember-fastboot/simple-dom document\n  @service('-document') private declare document: FastBootDocument;\n\n  tokens: PageTitleToken[] = [];\n\n  _defaultConfig: PageTitleConfig = {\n    // The default separator to use between tokens.\n    separator: ' | ',\n\n    // The default prepend value to use.\n    prepend: true,\n\n    // The default replace value to use.\n    replace: null,\n  };\n\n  constructor(owner: Owner) {\n    super(owner);\n    this._validateExistingTitleElement();\n\n    if (hasResolveRegistration(owner)) {\n      const config = owner.resolveRegistration('config:environment');\n\n      if (hasPageTitleConfig(config)) {\n        configKeys.forEach((key) => {\n          if (!isEmpty(config.pageTitle[key])) {\n            const configValue = config.pageTitle[key];\n\n            // SAFETY: how is one supposed to iterate over keys for an object and have it\n            //         known to the compiler that both objects, having the same shape,\n            //         will have the same type per-value?\n            //         as-is, the `configValue` is a union of all value-types from the object.\n            (this._defaultConfig[key] as PageTitleConfig[typeof key]) =\n              configValue;\n          }\n        });\n      }\n    }\n    this.router.on(RouterEvent.ROUTE_DID_CHANGE, this.scheduleTitleUpdate);\n  }\n\n  applyTokenDefaults(token: PageTitleToken) {\n    const defaultSeparator = this._defaultConfig.separator;\n    const defaultPrepend = this._defaultConfig.prepend;\n    const defaultReplace = this._defaultConfig.replace;\n\n    token.previous ??= null;\n    token.next ??= null;\n\n    if (token.separator == null) {\n      token.separator = defaultSeparator;\n    }\n\n    if (token.prepend == null && defaultPrepend != null) {\n      token.prepend = defaultPrepend;\n    }\n\n    if (token.replace == null && defaultReplace != null) {\n      token.replace = defaultReplace;\n    }\n  }\n\n  inheritFromPrevious(token: PageTitleToken) {\n    const previous = token.previous;\n    if (previous) {\n      if (token.separator == null) {\n        token.separator = previous.separator;\n      }\n\n      if (token.prepend == null) {\n        token.prepend = previous.prepend;\n      }\n    }\n  }\n\n  push(token: PageTitleToken) {\n    const tokenForId = this._findTokenById(token.id);\n    if (tokenForId) {\n      const index = this.tokens.indexOf(tokenForId);\n      const tokens = [...this.tokens];\n      const previous = tokenForId.previous;\n      token.previous = previous;\n      token.next = tokenForId.next;\n      this.inheritFromPrevious(token);\n      this.applyTokenDefaults(token);\n\n      tokens.splice(index, 1, token);\n      this.tokens = tokens;\n      return;\n    }\n\n    const previous = this.tokens.slice(-1)[0];\n    if (previous) {\n      token.previous = previous ?? null;\n      previous.next = token;\n      this.inheritFromPrevious(token);\n    }\n\n    this.applyTokenDefaults(token);\n    this.tokens = [...this.tokens, token];\n  }\n\n  remove(id: PageTitleToken['id']) {\n    const token = this._findTokenById(id);\n\n    if (!token) return;\n\n    const { next, previous } = token;\n    if (next) {\n      next.previous = previous;\n    }\n\n    if (previous) {\n      previous.next = next;\n    }\n\n    token.previous = token.next = null;\n\n    const tokens = [...this.tokens];\n    tokens.splice(tokens.indexOf(token), 1);\n    this.tokens = tokens;\n  }\n\n  get visibleTokens(): PageTitleToken[] {\n    const tokens = this.tokens;\n    let i = tokens ? tokens.length : 0;\n    const visible = [];\n    while (i--) {\n      const token = tokens[i];\n\n      if (!token) continue;\n\n      if (token.replace) {\n        visible.unshift(token);\n        break;\n      } else {\n        visible.unshift(token);\n      }\n    }\n    return visible;\n  }\n\n  get sortedTokens(): PageTitleToken[] {\n    const visible = this.visibleTokens;\n    if (!visible) return [];\n\n    let appending = true;\n    let group: PageTitleToken[] = [];\n    const groups = [group];\n    const frontGroups: PageTitleToken[] = [];\n\n    visible.forEach((token) => {\n      if (token.front) {\n        frontGroups.unshift(token);\n      } else if (token.prepend) {\n        if (appending) {\n          appending = false;\n          group = [];\n          groups.push(group);\n        }\n        const lastToken = group[0];\n        if (lastToken) {\n          token = { ...token };\n          token.separator = lastToken.separator;\n        }\n        group.unshift(token);\n      } else {\n        if (!appending) {\n          appending = true;\n          group = [];\n          groups.push(group);\n        }\n        group.push(token);\n      }\n    });\n\n    return frontGroups.concat(groups.reduce((E, group) => E.concat(group), []));\n  }\n\n  scheduleTitleUpdate = () => {\n    scheduleOnce('afterRender', this, this._updateTitle);\n  };\n\n  toString(): string {\n    const tokens = this.sortedTokens;\n    const title = [];\n\n    for (let i = 0, len = tokens.length; i < len; i++) {\n      const token = tokens[i];\n      if (!token) continue;\n\n      if (token.title) {\n        title.push(token.title);\n        if (i + 1 < len) {\n          title.push(token.separator);\n        }\n      }\n    }\n\n    return title.join('');\n  }\n\n  willDestroy() {\n    super.willDestroy();\n    this.router.off(RouterEvent.ROUTE_DID_CHANGE, this.scheduleTitleUpdate);\n  }\n\n  private _updateTitle() {\n    const toBeTitle = this.toString();\n\n    if (isFastBoot) {\n      this.updateFastbootTitle(toBeTitle);\n    } else {\n      /**\n       * When rendering app with \"?fastboot=false\" (http://ember-fastboot.com/docs/user-guide#disabling-fastboot)\n       * We will not have <title> element present in DOM.\n       *\n       * But this is fine as by HTML spec,\n       * one is created upon assigning \"document.title\" value;\n       *\n       * https://html.spec.whatwg.org/multipage/dom.html#dom-tree-accessors\n       */\n      this.document.title = toBeTitle;\n    }\n\n    this.titleDidUpdate(toBeTitle);\n  }\n\n  /**\n   * Validate if there's more than one title element present.\n   *\n   * Example: ember-cli-head can cause conflicting updates.\n   * @private\n   */\n  private _validateExistingTitleElement() {\n    if (isFastBoot) {\n      return;\n    }\n    assert(\n      '[ember-page-title]: Multiple title elements found. Check for other addons like ember-cli-head updating <title> as well.',\n      document.head.querySelectorAll('title').length <= 1,\n    );\n  }\n\n  /**\n   * Find token by id\n   *\n   * @param {String} id\n   * @private\n   */\n  private _findTokenById(id: PageTitleToken['id']) {\n    return this.tokens.find((token) => token.id === id);\n  }\n\n  updateFastbootTitle(toBeTitle: string) {\n    if (!isFastBoot) {\n      return;\n    }\n    const headElement = this.document.head;\n    const headChildNodes = headElement.childNodes;\n\n    // Remove existing title elements from previous render cycle\n    for (let i = 0; i < headChildNodes.length; i++) {\n      const node = headChildNodes[i];\n      if (!node) continue;\n\n      if (node.nodeName.toLowerCase() === 'title') {\n        headElement.removeChild(node);\n      }\n    }\n\n    // Add title element with latest value\n    const titleEl = this.document.createElement('title');\n    const titleContents = this.document.createTextNode(toBeTitle);\n    titleEl.appendChild(titleContents);\n    headElement.appendChild(titleEl);\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  titleDidUpdate(_title: string) {\n    // default is empty, meant to be overriden by user if desired\n  }\n}\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n  , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n  Events.prototype = Object.create(null);\n\n  //\n  // This hack is needed because the `__proto__` property is still inherited in\n  // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n  //\n  if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n  this.fn = fn;\n  this.context = context;\n  this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('The listener must be a function');\n  }\n\n  var listener = new EE(fn, context || emitter, once)\n    , evt = prefix ? prefix + event : event;\n\n  if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n  else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n  else emitter._events[evt] = [emitter._events[evt], listener];\n\n  return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n  if (--emitter._eventsCount === 0) emitter._events = new Events();\n  else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n  this._events = new Events();\n  this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n  var names = []\n    , events\n    , name;\n\n  if (this._eventsCount === 0) return names;\n\n  for (name in (events = this._events)) {\n    if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n  }\n\n  if (Object.getOwnPropertySymbols) {\n    return names.concat(Object.getOwnPropertySymbols(events));\n  }\n\n  return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n  var evt = prefix ? prefix + event : event\n    , handlers = this._events[evt];\n\n  if (!handlers) return [];\n  if (handlers.fn) return [handlers.fn];\n\n  for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n    ee[i] = handlers[i].fn;\n  }\n\n  return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n  var evt = prefix ? prefix + event : event\n    , listeners = this._events[evt];\n\n  if (!listeners) return 0;\n  if (listeners.fn) return 1;\n  return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return false;\n\n  var listeners = this._events[evt]\n    , len = arguments.length\n    , args\n    , i;\n\n  if (listeners.fn) {\n    if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n    switch (len) {\n      case 1: return listeners.fn.call(listeners.context), true;\n      case 2: return listeners.fn.call(listeners.context, a1), true;\n      case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n      case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n      case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n      case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n    }\n\n    for (i = 1, args = new Array(len -1); i < len; i++) {\n      args[i - 1] = arguments[i];\n    }\n\n    listeners.fn.apply(listeners.context, args);\n  } else {\n    var length = listeners.length\n      , j;\n\n    for (i = 0; i < length; i++) {\n      if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n      switch (len) {\n        case 1: listeners[i].fn.call(listeners[i].context); break;\n        case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n        case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n        case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n        default:\n          if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n            args[j - 1] = arguments[j];\n          }\n\n          listeners[i].fn.apply(listeners[i].context, args);\n      }\n    }\n  }\n\n  return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n  return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n  return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return this;\n  if (!fn) {\n    clearEvent(this, evt);\n    return this;\n  }\n\n  var listeners = this._events[evt];\n\n  if (listeners.fn) {\n    if (\n      listeners.fn === fn &&\n      (!once || listeners.once) &&\n      (!context || listeners.context === context)\n    ) {\n      clearEvent(this, evt);\n    }\n  } else {\n    for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n      if (\n        listeners[i].fn !== fn ||\n        (once && !listeners[i].once) ||\n        (context && listeners[i].context !== context)\n      ) {\n        events.push(listeners[i]);\n      }\n    }\n\n    //\n    // Reset the array, or remove it completely if we have no more listeners.\n    //\n    if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n    else clearEvent(this, evt);\n  }\n\n  return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n  var evt;\n\n  if (event) {\n    evt = prefix ? prefix + event : event;\n    if (this._events[evt]) clearEvent(this, evt);\n  } else {\n    this._events = new Events();\n    this._eventsCount = 0;\n  }\n\n  return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n  module.exports = EventEmitter;\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || from);\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","export const toCodePoints = (str: string): number[] => {\n    const codePoints = [];\n    let i = 0;\n    const length = str.length;\n    while (i < length) {\n        const value = str.charCodeAt(i++);\n        if (value >= 0xd800 && value <= 0xdbff && i < length) {\n            const extra = str.charCodeAt(i++);\n            if ((extra & 0xfc00) === 0xdc00) {\n                codePoints.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000);\n            } else {\n                codePoints.push(value);\n                i--;\n            }\n        } else {\n            codePoints.push(value);\n        }\n    }\n    return codePoints;\n};\n\nexport const fromCodePoint = (...codePoints: number[]): string => {\n    if (String.fromCodePoint) {\n        return String.fromCodePoint(...codePoints);\n    }\n\n    const length = codePoints.length;\n    if (!length) {\n        return '';\n    }\n\n    const codeUnits = [];\n\n    let index = -1;\n    let result = '';\n    while (++index < length) {\n        let codePoint = codePoints[index];\n        if (codePoint <= 0xffff) {\n            codeUnits.push(codePoint);\n        } else {\n            codePoint -= 0x10000;\n            codeUnits.push((codePoint >> 10) + 0xd800, (codePoint % 0x400) + 0xdc00);\n        }\n        if (index + 1 === length || codeUnits.length > 0x4000) {\n            result += String.fromCharCode(...codeUnits);\n            codeUnits.length = 0;\n        }\n    }\n    return result;\n};\n\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n    lookup[chars.charCodeAt(i)] = i;\n}\n\nexport const decode = (base64: string): ArrayBuffer | number[] => {\n    let bufferLength = base64.length * 0.75,\n        len = base64.length,\n        i,\n        p = 0,\n        encoded1,\n        encoded2,\n        encoded3,\n        encoded4;\n\n    if (base64[base64.length - 1] === '=') {\n        bufferLength--;\n        if (base64[base64.length - 2] === '=') {\n            bufferLength--;\n        }\n    }\n\n    const buffer =\n        typeof ArrayBuffer !== 'undefined' &&\n        typeof Uint8Array !== 'undefined' &&\n        typeof Uint8Array.prototype.slice !== 'undefined'\n            ? new ArrayBuffer(bufferLength)\n            : new Array(bufferLength);\n    const bytes = Array.isArray(buffer) ? buffer : new Uint8Array(buffer);\n\n    for (i = 0; i < len; i += 4) {\n        encoded1 = lookup[base64.charCodeAt(i)];\n        encoded2 = lookup[base64.charCodeAt(i + 1)];\n        encoded3 = lookup[base64.charCodeAt(i + 2)];\n        encoded4 = lookup[base64.charCodeAt(i + 3)];\n\n        bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n        bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n        bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n    }\n\n    return buffer;\n};\n\nexport const polyUint16Array = (buffer: number[]): number[] => {\n    const length = buffer.length;\n    const bytes = [];\n    for (let i = 0; i < length; i += 2) {\n        bytes.push((buffer[i + 1] << 8) | buffer[i]);\n    }\n    return bytes;\n};\n\nexport const polyUint32Array = (buffer: number[]): number[] => {\n    const length = buffer.length;\n    const bytes = [];\n    for (let i = 0; i < length; i += 4) {\n        bytes.push((buffer[i + 3] << 24) | (buffer[i + 2] << 16) | (buffer[i + 1] << 8) | buffer[i]);\n    }\n    return bytes;\n};\n","import {Context} from '../../core/context';\n\nexport class Bounds {\n    constructor(readonly left: number, readonly top: number, readonly width: number, readonly height: number) {}\n\n    add(x: number, y: number, w: number, h: number): Bounds {\n        return new Bounds(this.left + x, this.top + y, this.width + w, this.height + h);\n    }\n\n    static fromClientRect(context: Context, clientRect: ClientRect): Bounds {\n        return new Bounds(\n            clientRect.left + context.windowBounds.left,\n            clientRect.top + context.windowBounds.top,\n            clientRect.width,\n            clientRect.height\n        );\n    }\n\n    static fromDOMRectList(context: Context, domRectList: DOMRectList): Bounds {\n        const domRect = Array.from(domRectList).find((rect) => rect.width !== 0);\n        return domRect\n            ? new Bounds(\n                  domRect.left + context.windowBounds.left,\n                  domRect.top + context.windowBounds.top,\n                  domRect.width,\n                  domRect.height\n              )\n            : Bounds.EMPTY;\n    }\n\n    static EMPTY = new Bounds(0, 0, 0, 0);\n}\n\nexport const parseBounds = (context: Context, node: Element): Bounds => {\n    return Bounds.fromClientRect(context, node.getBoundingClientRect());\n};\n\nexport const parseDocumentSize = (document: Document): Bounds => {\n    const body = document.body;\n    const documentElement = document.documentElement;\n\n    if (!body || !documentElement) {\n        throw new Error(`Unable to get document size`);\n    }\n    const width = Math.max(\n        Math.max(body.scrollWidth, documentElement.scrollWidth),\n        Math.max(body.offsetWidth, documentElement.offsetWidth),\n        Math.max(body.clientWidth, documentElement.clientWidth)\n    );\n\n    const height = Math.max(\n        Math.max(body.scrollHeight, documentElement.scrollHeight),\n        Math.max(body.offsetHeight, documentElement.offsetHeight),\n        Math.max(body.clientHeight, documentElement.clientHeight)\n    );\n\n    return new Bounds(0, 0, width, height);\n};\n","const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n    lookup[chars.charCodeAt(i)] = i;\n}\n\nexport const decode = (base64: string): ArrayBuffer | number[] => {\n    let bufferLength = base64.length * 0.75,\n        len = base64.length,\n        i,\n        p = 0,\n        encoded1,\n        encoded2,\n        encoded3,\n        encoded4;\n\n    if (base64[base64.length - 1] === '=') {\n        bufferLength--;\n        if (base64[base64.length - 2] === '=') {\n            bufferLength--;\n        }\n    }\n\n    const buffer =\n        typeof ArrayBuffer !== 'undefined' &&\n        typeof Uint8Array !== 'undefined' &&\n        typeof Uint8Array.prototype.slice !== 'undefined'\n            ? new ArrayBuffer(bufferLength)\n            : new Array(bufferLength);\n    const bytes = Array.isArray(buffer) ? buffer : new Uint8Array(buffer);\n\n    for (i = 0; i < len; i += 4) {\n        encoded1 = lookup[base64.charCodeAt(i)];\n        encoded2 = lookup[base64.charCodeAt(i + 1)];\n        encoded3 = lookup[base64.charCodeAt(i + 2)];\n        encoded4 = lookup[base64.charCodeAt(i + 3)];\n\n        bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n        bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n        bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n    }\n\n    return buffer;\n};\n\nexport const polyUint16Array = (buffer: number[]): number[] => {\n    const length = buffer.length;\n    const bytes = [];\n    for (let i = 0; i < length; i += 2) {\n        bytes.push((buffer[i + 1] << 8) | buffer[i]);\n    }\n    return bytes;\n};\n\nexport const polyUint32Array = (buffer: number[]): number[] => {\n    const length = buffer.length;\n    const bytes = [];\n    for (let i = 0; i < length; i += 4) {\n        bytes.push((buffer[i + 3] << 24) | (buffer[i + 2] << 16) | (buffer[i + 1] << 8) | buffer[i]);\n    }\n    return bytes;\n};\n","const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n    lookup[chars.charCodeAt(i)] = i;\n}\n\nexport const encode = (arraybuffer: ArrayBuffer): string => {\n    let bytes = new Uint8Array(arraybuffer),\n        i,\n        len = bytes.length,\n        base64 = '';\n\n    for (i = 0; i < len; i += 3) {\n        base64 += chars[bytes[i] >> 2];\n        base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n        base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n        base64 += chars[bytes[i + 2] & 63];\n    }\n\n    if (len % 3 === 2) {\n        base64 = base64.substring(0, base64.length - 1) + '=';\n    } else if (len % 3 === 1) {\n        base64 = base64.substring(0, base64.length - 2) + '==';\n    }\n\n    return base64;\n};\n\nexport const decode = (base64: string): ArrayBuffer => {\n    let bufferLength = base64.length * 0.75,\n        len = base64.length,\n        i,\n        p = 0,\n        encoded1,\n        encoded2,\n        encoded3,\n        encoded4;\n\n    if (base64[base64.length - 1] === '=') {\n        bufferLength--;\n        if (base64[base64.length - 2] === '=') {\n            bufferLength--;\n        }\n    }\n\n    const arraybuffer = new ArrayBuffer(bufferLength),\n        bytes = new Uint8Array(arraybuffer);\n\n    for (i = 0; i < len; i += 4) {\n        encoded1 = lookup[base64.charCodeAt(i)];\n        encoded2 = lookup[base64.charCodeAt(i + 1)];\n        encoded3 = lookup[base64.charCodeAt(i + 2)];\n        encoded4 = lookup[base64.charCodeAt(i + 3)];\n\n        bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n        bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n        bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n    }\n\n    return arraybuffer;\n};\n","import {decode, polyUint16Array, polyUint32Array} from './Util';\n\nexport type int = number;\n\n/** Shift size for getting the index-2 table offset. */\nexport const UTRIE2_SHIFT_2 = 5;\n\n/** Shift size for getting the index-1 table offset. */\nexport const UTRIE2_SHIFT_1 = 6 + 5;\n\n/**\n * Shift size for shifting left the index array values.\n * Increases possible data size with 16-bit index values at the cost\n * of compactability.\n * This requires data blocks to be aligned by UTRIE2_DATA_GRANULARITY.\n */\nexport const UTRIE2_INDEX_SHIFT = 2;\n\n/**\n * Difference between the two shift sizes,\n * for getting an index-1 offset from an index-2 offset. 6=11-5\n */\nexport const UTRIE2_SHIFT_1_2 = UTRIE2_SHIFT_1 - UTRIE2_SHIFT_2;\n\n/**\n * The part of the index-2 table for U+D800..U+DBFF stores values for\n * lead surrogate code _units_ not code _points_.\n * Values for lead surrogate code _points_ are indexed with this portion of the table.\n * Length=32=0x20=0x400>>UTRIE2_SHIFT_2. (There are 1024=0x400 lead surrogates.)\n */\nexport const UTRIE2_LSCP_INDEX_2_OFFSET = 0x10000 >> UTRIE2_SHIFT_2;\n\n/** Number of entries in a data block. 32=0x20 */\nexport const UTRIE2_DATA_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_2;\n/** Mask for getting the lower bits for the in-data-block offset. */\nexport const UTRIE2_DATA_MASK = UTRIE2_DATA_BLOCK_LENGTH - 1;\n\nexport const UTRIE2_LSCP_INDEX_2_LENGTH = 0x400 >> UTRIE2_SHIFT_2;\n/** Count the lengths of both BMP pieces. 2080=0x820 */\nexport const UTRIE2_INDEX_2_BMP_LENGTH = UTRIE2_LSCP_INDEX_2_OFFSET + UTRIE2_LSCP_INDEX_2_LENGTH;\n/**\n * The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820.\n * Length 32=0x20 for lead bytes C0..DF, regardless of UTRIE2_SHIFT_2.\n */\nexport const UTRIE2_UTF8_2B_INDEX_2_OFFSET = UTRIE2_INDEX_2_BMP_LENGTH;\nexport const UTRIE2_UTF8_2B_INDEX_2_LENGTH = 0x800 >> 6; /* U+0800 is the first code point after 2-byte UTF-8 */\n/**\n * The index-1 table, only used for supplementary code points, at offset 2112=0x840.\n * Variable length, for code points up to highStart, where the last single-value range starts.\n * Maximum length 512=0x200=0x100000>>UTRIE2_SHIFT_1.\n * (For 0x100000 supplementary code points U+10000..U+10ffff.)\n *\n * The part of the index-2 table for supplementary code points starts\n * after this index-1 table.\n *\n * Both the index-1 table and the following part of the index-2 table\n * are omitted completely if there is only BMP data.\n */\nexport const UTRIE2_INDEX_1_OFFSET = UTRIE2_UTF8_2B_INDEX_2_OFFSET + UTRIE2_UTF8_2B_INDEX_2_LENGTH;\n\n/**\n * Number of index-1 entries for the BMP. 32=0x20\n * This part of the index-1 table is omitted from the serialized form.\n */\nexport const UTRIE2_OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> UTRIE2_SHIFT_1;\n\n/** Number of entries in an index-2 block. 64=0x40 */\nexport const UTRIE2_INDEX_2_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_1_2;\n/** Mask for getting the lower bits for the in-index-2-block offset. */\nexport const UTRIE2_INDEX_2_MASK = UTRIE2_INDEX_2_BLOCK_LENGTH - 1;\n\nconst slice16 = (view: number[] | Uint16Array, start: number, end?: number) => {\n    if (view.slice) {\n        return view.slice(start, end);\n    }\n\n    return new Uint16Array(Array.prototype.slice.call(view, start, end));\n};\n\nconst slice32 = (view: number[] | Uint32Array, start: number, end?: number) => {\n    if (view.slice) {\n        return view.slice(start, end);\n    }\n\n    return new Uint32Array(Array.prototype.slice.call(view, start, end));\n};\n\nexport const createTrieFromBase64 = (base64: string, _byteLength: number): Trie => {\n    const buffer = decode(base64);\n    const view32 = Array.isArray(buffer) ? polyUint32Array(buffer) : new Uint32Array(buffer);\n    const view16 = Array.isArray(buffer) ? polyUint16Array(buffer) : new Uint16Array(buffer);\n    const headerLength = 24;\n\n    const index = slice16(view16, headerLength / 2, view32[4] / 2);\n    const data =\n        view32[5] === 2\n            ? slice16(view16, (headerLength + view32[4]) / 2)\n            : slice32(view32, Math.ceil((headerLength + view32[4]) / 4));\n\n    return new Trie(view32[0], view32[1], view32[2], view32[3], index, data);\n};\n\nexport class Trie {\n    initialValue: int;\n    errorValue: int;\n    highStart: int;\n    highValueIndex: int;\n    index: Uint16Array | number[];\n    data: Uint32Array | Uint16Array | number[];\n\n    constructor(\n        initialValue: int,\n        errorValue: int,\n        highStart: int,\n        highValueIndex: int,\n        index: Uint16Array | number[],\n        data: Uint32Array | Uint16Array | number[]\n    ) {\n        this.initialValue = initialValue;\n        this.errorValue = errorValue;\n        this.highStart = highStart;\n        this.highValueIndex = highValueIndex;\n        this.index = index;\n        this.data = data;\n    }\n\n    /**\n     * Get the value for a code point as stored in the Trie.\n     *\n     * @param codePoint the code point\n     * @return the value\n     */\n    get(codePoint: number): number {\n        let ix;\n        if (codePoint >= 0) {\n            if (codePoint < 0x0d800 || (codePoint > 0x0dbff && codePoint <= 0x0ffff)) {\n                // Ordinary BMP code point, excluding leading surrogates.\n                // BMP uses a single level lookup.  BMP index starts at offset 0 in the Trie2 index.\n                // 16 bit data is stored in the index array itself.\n                ix = this.index[codePoint >> UTRIE2_SHIFT_2];\n                ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);\n                return this.data[ix];\n            }\n\n            if (codePoint <= 0xffff) {\n                // Lead Surrogate Code Point.  A Separate index section is stored for\n                // lead surrogate code units and code points.\n                //   The main index has the code unit data.\n                //   For this function, we need the code point data.\n                // Note: this expression could be refactored for slightly improved efficiency, but\n                //       surrogate code points will be so rare in practice that it's not worth it.\n                ix = this.index[UTRIE2_LSCP_INDEX_2_OFFSET + ((codePoint - 0xd800) >> UTRIE2_SHIFT_2)];\n                ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);\n                return this.data[ix];\n            }\n\n            if (codePoint < this.highStart) {\n                // Supplemental code point, use two-level lookup.\n                ix = UTRIE2_INDEX_1_OFFSET - UTRIE2_OMITTED_BMP_INDEX_1_LENGTH + (codePoint >> UTRIE2_SHIFT_1);\n                ix = this.index[ix];\n                ix += (codePoint >> UTRIE2_SHIFT_2) & UTRIE2_INDEX_2_MASK;\n                ix = this.index[ix];\n                ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);\n                return this.data[ix];\n            }\n            if (codePoint <= 0x10ffff) {\n                return this.data[this.highValueIndex];\n            }\n        }\n\n        // Fall through.  The code point is outside of the legal range of 0..0x10ffff.\n        return this.errorValue;\n    }\n}\n","export const base64 =\n    'KwAAAAAAAAAACA4AUD0AADAgAAACAAAAAAAIABAAGABAAEgAUABYAGAAaABgAGgAYgBqAF8AZwBgAGgAcQB5AHUAfQCFAI0AlQCdAKIAqgCyALoAYABoAGAAaABgAGgAwgDKAGAAaADGAM4A0wDbAOEA6QDxAPkAAQEJAQ8BFwF1AH0AHAEkASwBNAE6AUIBQQFJAVEBWQFhAWgBcAF4ATAAgAGGAY4BlQGXAZ8BpwGvAbUBvQHFAc0B0wHbAeMB6wHxAfkBAQIJAvEBEQIZAiECKQIxAjgCQAJGAk4CVgJeAmQCbAJ0AnwCgQKJApECmQKgAqgCsAK4ArwCxAIwAMwC0wLbAjAA4wLrAvMC+AIAAwcDDwMwABcDHQMlAy0DNQN1AD0DQQNJA0kDSQNRA1EDVwNZA1kDdQB1AGEDdQBpA20DdQN1AHsDdQCBA4kDkQN1AHUAmQOhA3UAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AKYDrgN1AHUAtgO+A8YDzgPWAxcD3gPjA+sD8wN1AHUA+wMDBAkEdQANBBUEHQQlBCoEFwMyBDgEYABABBcDSARQBFgEYARoBDAAcAQzAXgEgASIBJAEdQCXBHUAnwSnBK4EtgS6BMIEyAR1AHUAdQB1AHUAdQCVANAEYABgAGAAYABgAGAAYABgANgEYADcBOQEYADsBPQE/AQEBQwFFAUcBSQFLAU0BWQEPAVEBUsFUwVbBWAAYgVgAGoFcgV6BYIFigWRBWAAmQWfBaYFYABgAGAAYABgAKoFYACxBbAFuQW6BcEFwQXHBcEFwQXPBdMF2wXjBeoF8gX6BQIGCgYSBhoGIgYqBjIGOgZgAD4GRgZMBmAAUwZaBmAAYABgAGAAYABgAGAAYABgAGAAYABgAGIGYABpBnAGYABgAGAAYABgAGAAYABgAGAAYAB4Bn8GhQZgAGAAYAB1AHcDFQSLBmAAYABgAJMGdQA9A3UAmwajBqsGqwaVALMGuwbDBjAAywbSBtIG1QbSBtIG0gbSBtIG0gbdBuMG6wbzBvsGAwcLBxMHAwcbByMHJwcsBywHMQcsB9IGOAdAB0gHTgfSBkgHVgfSBtIG0gbSBtIG0gbSBtIG0gbSBiwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdgAGAALAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdbB2MHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB2kH0gZwB64EdQB1AHUAdQB1AHUAdQB1AHUHfQdgAIUHjQd1AHUAlQedB2AAYAClB6sHYACzB7YHvgfGB3UAzgfWBzMB3gfmB1EB7gf1B/0HlQENAQUIDQh1ABUIHQglCBcDLQg1CD0IRQhNCEEDUwh1AHUAdQBbCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIcAh3CHoIMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIgggwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAALAcsBywHLAcsBywHLAcsBywHLAcsB4oILAcsB44I0gaWCJ4Ipgh1AHUAqgiyCHUAdQB1AHUAdQB1AHUAdQB1AHUAtwh8AXUAvwh1AMUIyQjRCNkI4AjoCHUAdQB1AO4I9gj+CAYJDgkTCS0HGwkjCYIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiAAIAAAAFAAYABgAGIAXwBgAHEAdQBFAJUAogCyAKAAYABgAEIA4ABGANMA4QDxAMEBDwE1AFwBLAE6AQEBUQF4QkhCmEKoQrhCgAHIQsAB0MLAAcABwAHAAeDC6ABoAHDCwMMAAcABwAHAAdDDGMMAAcAB6MM4wwjDWMNow3jDaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAEjDqABWw6bDqABpg6gAaABoAHcDvwOPA+gAaABfA/8DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DpcPAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcAB9cPKwkyCToJMAB1AHUAdQBCCUoJTQl1AFUJXAljCWcJawkwADAAMAAwAHMJdQB2CX4JdQCECYoJjgmWCXUAngkwAGAAYABxAHUApgn3A64JtAl1ALkJdQDACTAAMAAwADAAdQB1AHUAdQB1AHUAdQB1AHUAowYNBMUIMAAwADAAMADICcsJ0wnZCRUE4QkwAOkJ8An4CTAAMAB1AAAKvwh1AAgKDwoXCh8KdQAwACcKLgp1ADYKqAmICT4KRgowADAAdQB1AE4KMAB1AFYKdQBeCnUAZQowADAAMAAwADAAMAAwADAAMAAVBHUAbQowADAAdQC5CXUKMAAwAHwBxAijBogEMgF9CoQKiASMCpQKmgqIBKIKqgquCogEDQG2Cr4KxgrLCjAAMADTCtsKCgHjCusK8Qr5CgELMAAwADAAMAB1AIsECQsRC3UANAEZCzAAMAAwADAAMAB1ACELKQswAHUANAExCzkLdQBBC0kLMABRC1kLMAAwADAAMAAwADAAdQBhCzAAMAAwAGAAYABpC3ELdwt/CzAAMACHC4sLkwubC58Lpwt1AK4Ltgt1APsDMAAwADAAMAAwADAAMAAwAL4LwwvLC9IL1wvdCzAAMADlC+kL8Qv5C/8LSQswADAAMAAwADAAMAAwADAAMAAHDDAAMAAwADAAMAAODBYMHgx1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1ACYMMAAwADAAdQB1AHUALgx1AHUAdQB1AHUAdQA2DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AD4MdQBGDHUAdQB1AHUAdQB1AEkMdQB1AHUAdQB1AFAMMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQBYDHUAdQB1AF8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUA+wMVBGcMMAAwAHwBbwx1AHcMfwyHDI8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAYABgAJcMMAAwADAAdQB1AJ8MlQClDDAAMACtDCwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB7UMLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AA0EMAC9DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAsBywHLAcsBywHLAcsBywHLQcwAMEMyAwsBywHLAcsBywHLAcsBywHLAcsBywHzAwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1ANQM2QzhDDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMABgAGAAYABgAGAAYABgAOkMYADxDGAA+AwADQYNYABhCWAAYAAODTAAMAAwADAAFg1gAGAAHg37AzAAMAAwADAAYABgACYNYAAsDTQNPA1gAEMNPg1LDWAAYABgAGAAYABgAGAAYABgAGAAUg1aDYsGVglhDV0NcQBnDW0NdQ15DWAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAlQCBDZUAiA2PDZcNMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAnw2nDTAAMAAwADAAMAAwAHUArw23DTAAMAAwADAAMAAwADAAMAAwADAAMAB1AL8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQDHDTAAYABgAM8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA1w11ANwNMAAwAD0B5A0wADAAMAAwADAAMADsDfQN/A0EDgwOFA4wABsOMAAwADAAMAAwADAAMAAwANIG0gbSBtIG0gbSBtIG0gYjDigOwQUuDsEFMw7SBjoO0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGQg5KDlIOVg7SBtIGXg5lDm0OdQ7SBtIGfQ6EDooOjQ6UDtIGmg6hDtIG0gaoDqwO0ga0DrwO0gZgAGAAYADEDmAAYAAkBtIGzA5gANIOYADaDokO0gbSBt8O5w7SBu8O0gb1DvwO0gZgAGAAxA7SBtIG0gbSBtIGYABgAGAAYAAED2AAsAUMD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHJA8sBywHLAcsBywHLAccDywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywPLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAc0D9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHPA/SBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gYUD0QPlQCVAJUAMAAwADAAMACVAJUAlQCVAJUAlQCVAEwPMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA//8EAAQABAAEAAQABAAEAAQABAANAAMAAQABAAIABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQACgATABcAHgAbABoAHgAXABYAEgAeABsAGAAPABgAHABLAEsASwBLAEsASwBLAEsASwBLABgAGAAeAB4AHgATAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYAGwASAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAWAA0AEQAeAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAFAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJABYAGgAbABsAGwAeAB0AHQAeAE8AFwAeAA0AHgAeABoAGwBPAE8ADgBQAB0AHQAdAE8ATwAXAE8ATwBPABYAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAFAATwBAAE8ATwBPAEAATwBQAFAATwBQAB4AHgAeAB4AHgAeAB0AHQAdAB0AHgAdAB4ADgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgBQAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkACQAJAAkACQAJAAkABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAFAAHgAeAB4AKwArAFAAUABQAFAAGABQACsAKwArACsAHgAeAFAAHgBQAFAAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUAAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAYAA0AKwArAB4AHgAbACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAB4ABAAEAB4ABAAEABMABAArACsAKwArACsAKwArACsAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAKwArACsAKwBWAFYAVgBWAB4AHgArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AGgAaABoAGAAYAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQAEwAEACsAEwATAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABLAEsASwBLAEsASwBLAEsASwBLABoAGQAZAB4AUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABMAUAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABABQAFAABAAEAB4ABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUAAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAFAABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQAUABQAB4AHgAYABMAUAArACsABAAbABsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAFAABAAEAAQABAAEAFAABAAEAAQAUAAEAAQABAAEAAQAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArACsAHgArAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAUAAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEAA0ADQBLAEsASwBLAEsASwBLAEsASwBLAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUAArACsAKwBQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABABQACsAKwArACsAKwArACsAKwAEACsAKwArACsAUABQACsAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUAAaABoAUABQAFAAUABQAEwAHgAbAFAAHgAEACsAKwAEAAQABAArAFAAUABQAFAAUABQACsAKwArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQACsAUABQACsAKwAEACsABAAEAAQABAAEACsAKwArACsABAAEACsAKwAEAAQABAArACsAKwAEACsAKwArACsAKwArACsAUABQAFAAUAArAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLAAQABABQAFAAUAAEAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAArACsAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAB4AGwArACsAKwArACsAKwArAFAABAAEAAQABAAEAAQAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAKwArACsAKwArAAQABAAEACsAKwArACsAUABQACsAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAB4AUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAAQAUAArAFAAUABQAFAAUABQACsAKwArAFAAUABQACsAUABQAFAAUAArACsAKwBQAFAAKwBQACsAUABQACsAKwArAFAAUAArACsAKwBQAFAAUAArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAAQABAAEAAQABAArACsAKwAEAAQABAArAAQABAAEAAQAKwArAFAAKwArACsAKwArACsABAArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAHgAeAB4AHgAeAB4AGwAeACsAKwArACsAKwAEAAQABAAEAAQAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAUAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAAEACsAKwArACsAKwArACsABAAEACsAUABQAFAAKwArACsAKwArAFAAUAAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwAOAFAAUABQAFAAUABQAFAAHgBQAAQABAAEAA4AUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAKwArAAQAUAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAAEACsAKwArACsAKwArACsABAAEACsAKwArACsAKwArACsAUAArAFAAUAAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwBQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABABQAB4AKwArACsAKwBQAFAAUAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQABoAUABQAFAAUABQAFAAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQACsAUAArACsAUABQAFAAUABQAFAAUAArACsAKwAEACsAKwArACsABAAEAAQABAAEAAQAKwAEACsABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgAqACsAKwArACsAGwBcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAeAEsASwBLAEsASwBLAEsASwBLAEsADQANACsAKwArACsAKwBcAFwAKwBcACsAXABcAFwAXABcACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAXAArAFwAXABcAFwAXABcAFwAXABcAFwAKgBcAFwAKgAqACoAKgAqACoAKgAqACoAXAArACsAXABcAFwAXABcACsAXAArACoAKgAqACoAKgAqACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwBcAFwAXABcAFAADgAOAA4ADgAeAA4ADgAJAA4ADgANAAkAEwATABMAEwATAAkAHgATAB4AHgAeAAQABAAeAB4AHgAeAB4AHgBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQAFAADQAEAB4ABAAeAAQAFgARABYAEQAEAAQAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAAQABAAEAAQADQAEAAQAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAA0ADQAeAB4AHgAeAB4AHgAEAB4AHgAeAB4AHgAeACsAHgAeAA4ADgANAA4AHgAeAB4AHgAeAAkACQArACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgBcAEsASwBLAEsASwBLAEsASwBLAEsADQANAB4AHgAeAB4AXABcAFwAXABcAFwAKgAqACoAKgBcAFwAXABcACoAKgAqAFwAKgAqACoAXABcACoAKgAqACoAKgAqACoAXABcAFwAKgAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKgAqAFwAKgBLAEsASwBLAEsASwBLAEsASwBLACoAKgAqACoAKgAqAFAAUABQAFAAUABQACsAUAArACsAKwArACsAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgBQAFAAUABQAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAKwBQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsABAAEAAQAHgANAB4AHgAeAB4AHgAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUAArACsADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAWABEAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAA0ADQANAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAANAA0AKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUAArAAQABAArACsAKwArACsAKwArACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqAA0ADQAVAFwADQAeAA0AGwBcACoAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwAeAB4AEwATAA0ADQAOAB4AEwATAB4ABAAEAAQACQArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUAAEAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAHgArACsAKwATABMASwBLAEsASwBLAEsASwBLAEsASwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAXABcAFwAXABcACsAKwArACsAKwArACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAXAArACsAKwAqACoAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsAHgAeAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKwAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKwArAAQASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACoAKgAqACoAKgAqACoAXAAqACoAKgAqACoAKgArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABABQAFAAUABQAFAAUABQACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwANAA0AHgANAA0ADQANAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AKwArACsABAAEAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwAeAB4AHgAeAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArAA0ADQANAA0ADQBLAEsASwBLAEsASwBLAEsASwBLACsAKwArAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAA0ADQBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUAAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArAAQABAAEAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAAQAUABQAFAAUABQAFAABABQAFAABAAEAAQAUAArACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAKwBQACsAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQACsAKwAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQACsAHgAeAB4AHgAeAB4AHgAOAB4AKwANAA0ADQANAA0ADQANAAkADQANAA0ACAAEAAsABAAEAA0ACQANAA0ADAAdAB0AHgAXABcAFgAXABcAFwAWABcAHQAdAB4AHgAUABQAFAANAAEAAQAEAAQABAAEAAQACQAaABoAGgAaABoAGgAaABoAHgAXABcAHQAVABUAHgAeAB4AHgAeAB4AGAAWABEAFQAVABUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ADQAeAA0ADQANAA0AHgANAA0ADQAHAB4AHgAeAB4AKwAEAAQABAAEAAQABAAEAAQABAAEAFAAUAArACsATwBQAFAAUABQAFAAHgAeAB4AFgARAE8AUABPAE8ATwBPAFAAUABQAFAAUAAeAB4AHgAWABEAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArABsAGwAbABsAGwAbABsAGgAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGgAbABsAGwAbABoAGwAbABoAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAHgAeAFAAGgAeAB0AHgBQAB4AGgAeAB4AHgAeAB4AHgAeAB4AHgBPAB4AUAAbAB4AHgBQAFAAUABQAFAAHgAeAB4AHQAdAB4AUAAeAFAAHgBQAB4AUABPAFAAUAAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAHgBQAFAAUABQAE8ATwBQAFAAUABQAFAATwBQAFAATwBQAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAFAAUABQAFAATwBPAE8ATwBPAE8ATwBPAE8ATwBQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABPAB4AHgArACsAKwArAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHQAdAB4AHgAeAB0AHQAeAB4AHQAeAB4AHgAdAB4AHQAbABsAHgAdAB4AHgAeAB4AHQAeAB4AHQAdAB0AHQAeAB4AHQAeAB0AHgAdAB0AHQAdAB0AHQAeAB0AHgAeAB4AHgAeAB0AHQAdAB0AHgAeAB4AHgAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB0AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAdAB0AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAWABEAHgAeAB4AHgAeAB4AHQAeAB4AHgAeAB4AHgAeACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAFAAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeAB4AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AHQAdAB0AHgAeAB0AHgAeAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlAB4AHQAdAB4AHgAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AJQAlAB0AHQAlAB4AJQAlACUAIAAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAeAB4AHgAeAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAdAB0AHQAeAB0AJQAdAB0AHgAdAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAdAB0AHQAdACUAHgAlACUAJQAdACUAJQAdAB0AHQAlACUAHQAdACUAHQAdACUAJQAlAB4AHQAeAB4AHgAeAB0AHQAlAB0AHQAdAB0AHQAdACUAJQAlACUAJQAdACUAJQAgACUAHQAdACUAJQAlACUAJQAlACUAJQAeAB4AHgAlACUAIAAgACAAIAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AFwAXABcAFwAXABcAHgATABMAJQAeAB4AHgAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARABYAEQAWABEAFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAeAB4AKwArACsAKwArABMADQANAA0AUAATAA0AUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUAANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAA0ADQANAA0ADQANAA0ADQAeAA0AFgANAB4AHgAXABcAHgAeABcAFwAWABEAFgARABYAEQAWABEADQANAA0ADQATAFAADQANAB4ADQANAB4AHgAeAB4AHgAMAAwADQANAA0AHgANAA0AFgANAA0ADQANAA0ADQANAA0AHgANAB4ADQANAB4AHgAeACsAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArAA0AEQARACUAJQBHAFcAVwAWABEAFgARABYAEQAWABEAFgARACUAJQAWABEAFgARABYAEQAWABEAFQAWABEAEQAlAFcAVwBXAFcAVwBXAFcAVwBXAAQABAAEAAQABAAEACUAVwBXAFcAVwA2ACUAJQBXAFcAVwBHAEcAJQAlACUAKwBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBRAFcAUQBXAFEAVwBXAFcAVwBXAFcAUQBXAFcAVwBXAFcAVwBRAFEAKwArAAQABAAVABUARwBHAFcAFQBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBRAFcAVwBXAFcAVwBXAFEAUQBXAFcAVwBXABUAUQBHAEcAVwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwAlACUAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACsAKwArACsAKwArACsAKwArACsAKwArAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBPAE8ATwBPAE8ATwBPAE8AJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADQATAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQAHgBQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAeAA0ADQANAA0ADQArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAAQAUABQAFAABABQAFAAUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAeAB4AHgAeAAQAKwArACsAUABQAFAAUABQAFAAHgAeABoAHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADgAOABMAEwArACsAKwArACsAKwArACsABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUAAeAB4AHgBQAA4AUABQAAQAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAB4AWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYACsAKwArAAQAHgAeAB4AHgAeAB4ADQANAA0AHgAeAB4AHgArAFAASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArAB4AHgBcAFwAXABcAFwAKgBcAFwAXABcAFwAXABcAFwAXABcAEsASwBLAEsASwBLAEsASwBLAEsAXABcAFwAXABcACsAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAFAAUABQAAQAUABQAFAAUABQAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAHgANAA0ADQBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAKgAqACoAXABcACoAKgBcAFwAXABcAFwAKgAqAFwAKgBcACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAA0ADQBQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQADQAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAVABVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBUAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVACsAKwArACsAKwArACsAKwArACsAKwArAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAKwArACsAKwBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAKwArACsAKwAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArACsAKwArAFYABABWAFYAVgBWAFYAVgBWAFYAVgBWAB4AVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgArAFYAVgBWAFYAVgArAFYAKwBWAFYAKwBWAFYAKwBWAFYAVgBWAFYAVgBWAFYAVgBWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAEQAWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAaAB4AKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAARABEAGAAYABMAEwAWABEAFAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACUAJQAlACUAJQAWABEAFgARABYAEQAWABEAFgARABYAEQAlACUAFgARACUAJQAlACUAJQAlACUAEQAlABEAKwAVABUAEwATACUAFgARABYAEQAWABEAJQAlACUAJQAlACUAJQAlACsAJQAbABoAJQArACsAKwArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAcAKwATACUAJQAbABoAJQAlABYAEQAlACUAEQAlABEAJQBXAFcAVwBXAFcAVwBXAFcAVwBXABUAFQAlACUAJQATACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXABYAJQARACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAWACUAEQAlABYAEQARABYAEQARABUAVwBRAFEAUQBRAFEAUQBRAFEAUQBRAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcARwArACsAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXACsAKwBXAFcAVwBXAFcAVwArACsAVwBXAFcAKwArACsAGgAbACUAJQAlABsAGwArAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAAQAB0AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsADQANAA0AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAQAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAA0AUABQAFAAUAArACsAKwArAFAAUABQAFAAUABQAFAAUAANAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAKwArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArACsAKwBQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAUABQAFAAUABQAAQABAAEACsABAAEACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAKwBQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAA0ADQANAA0ADQANAA0ADQAeACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAArACsAKwArAFAAUABQAFAAUAANAA0ADQANAA0ADQAUACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsADQANAA0ADQANAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAAQABAAEAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArAAQABAANACsAKwBQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAB4AHgAeAB4AHgArACsAKwArACsAKwAEAAQABAAEAAQABAAEAA0ADQAeAB4AHgAeAB4AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwAeACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsASwBLAEsASwBLAEsASwBLAEsASwANAA0ADQANAFAABAAEAFAAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAeAA4AUAArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAADQANAB4ADQAEAAQABAAEAB4ABAAEAEsASwBLAEsASwBLAEsASwBLAEsAUAAOAFAADQANAA0AKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAA0AHgANAA0AHgAEACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAA0AKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQACsABAAEAFAABAAEAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAUAArACsAKwArACsAKwAEACsAKwArACsAKwBQAFAAUABQAFAABAAEACsAKwAEAAQABAAEAAQABAAEACsAKwArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABABQAFAAUABQAA0ADQANAA0AHgBLAEsASwBLAEsASwBLAEsASwBLAA0ADQArAB4ABABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAFAAUAAeAFAAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABAAEAAQADgANAA0AEwATAB4AHgAeAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAFAAUABQAFAABAAEACsAKwAEAA0ADQAeAFAAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKwArACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBcAFwADQANAA0AKgBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQAKwAEAAQAKwArAAQABAAEAAQAUAAEAFAABAAEAA0ADQANACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABABQAA4AUAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAOAB4ADQANAA0ADQAOAB4ABAArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAA0ADQANAFAADgAOAA4ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAFAADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAOABMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAArACsAKwAEACsABAAEACsABAAEAAQABAAEAAQABABQAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwAEAAQAKwAEAAQABAAEAAQAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAaABoAGgAaAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABIAEgAQwBDAEMAUABQAFAAUABDAFAAUABQAEgAQwBIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABDAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAJAAkACQAJAAkACQAJABYAEQArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwANAA0AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAANACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQANAB4AHgAeAB4AHgAeAFAAUABQAFAADQAeACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAA0AHgAeACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAARwBHABUARwAJACsAKwArACsAKwArACsAKwArACsAKwAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUQBRAFEAKwArACsAKwArACsAKwArACsAKwArACsAKwBRAFEAUQBRACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArACsAHgAEAAQADQAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAQABAAEAAQABAAeAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQAHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQAFAAKwArAFAAKwArAFAAUAArACsAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUAArAFAAUABQAFAAUABQAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAHgAeAFAAUABQAFAAUAArAFAAKwArACsAUABQAFAAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeACsAKwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4ABAAeAB4AHgAeAB4AHgAeAB4AHgAeAAQAHgAeAA0ADQANAA0AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAAQAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArAAQABAAEAAQABAAEAAQAKwAEAAQAKwAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwBQAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArABsAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAB4AHgAeAB4ABAAEAAQABAAEAAQABABQACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArABYAFgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAGgBQAFAAUAAaAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQACsAKwBQACsAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwBQACsAUAArACsAKwArACsAKwBQACsAKwArACsAUAArAFAAKwBQACsAUABQAFAAKwBQAFAAKwBQACsAKwBQACsAUAArAFAAKwBQACsAUAArAFAAUAArAFAAKwArAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUAArAFAAUABQAFAAKwBQACsAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAKwBQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AJQAlACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeACUAJQAlAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAlACUAJQAlACUAHgAlACUAJQAlACUAIAAgACAAJQAlACAAJQAlACAAIAAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACEAIQAhACEAIQAlACUAIAAgACUAJQAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAIAAlACUAJQAlACAAIAAgACUAIAAgACAAJQAlACUAJQAlACUAJQAgACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAlAB4AJQAeACUAJQAlACUAJQAgACUAJQAlACUAHgAlAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACAAIAAgACUAJQAlACAAIAAgACAAIAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABcAFwAXABUAFQAVAB4AHgAeAB4AJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAgACUAJQAgACUAJQAlACUAJQAlACUAJQAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAgACAAIAAgACAAIAAgACAAIAAgACUAJQAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAlACAAIAAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAgACAAIAAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAA==';\nexport const byteLength = 39664;\n","'use strict';\n\nimport {createTrieFromBase64} from 'utrie';\nimport {base64, byteLength} from './linebreak-trie';\nimport {fromCodePoint, toCodePoints} from './Util';\n\nexport const LETTER_NUMBER_MODIFIER = 50;\n\n// Non-tailorable Line Breaking Classes\nconst BK = 1; //  Cause a line break (after)\nconst CR = 2; //  Cause a line break (after), except between CR and LF\nconst LF = 3; //  Cause a line break (after)\nconst CM = 4; //  Prohibit a line break between the character and the preceding character\nconst NL = 5; //  Cause a line break (after)\nconst SG = 6; //  Do not occur in well-formed text\nconst WJ = 7; //  Prohibit line breaks before and after\nconst ZW = 8; //  Provide a break opportunity\nconst GL = 9; //  Prohibit line breaks before and after\nconst SP = 10; // Enable indirect line breaks\nconst ZWJ = 11; // Prohibit line breaks within joiner sequences\n// Break Opportunities\nconst B2 = 12; //  Provide a line break opportunity before and after the character\nconst BA = 13; //  Generally provide a line break opportunity after the character\nconst BB = 14; //  Generally provide a line break opportunity before the character\nconst HY = 15; //  Provide a line break opportunity after the character, except in numeric context\nconst CB = 16; //   Provide a line break opportunity contingent on additional information\n// Characters Prohibiting Certain Breaks\nconst CL = 17; //  Prohibit line breaks before\nconst CP = 18; //  Prohibit line breaks before\nconst EX = 19; //  Prohibit line breaks before\nconst IN = 20; //  Allow only indirect line breaks between pairs\nconst NS = 21; //  Allow only indirect line breaks before\nconst OP = 22; //  Prohibit line breaks after\nconst QU = 23; //  Act like they are both opening and closing\n// Numeric Context\nconst IS = 24; //  Prevent breaks after any and before numeric\nconst NU = 25; //  Form numeric expressions for line breaking purposes\nconst PO = 26; //  Do not break following a numeric expression\nconst PR = 27; //  Do not break in front of a numeric expression\nconst SY = 28; //  Prevent a break before; and allow a break after\n// Other Characters\nconst AI = 29; //  Act like AL when the resolvedEAW is N; otherwise; act as ID\nconst AL = 30; //  Are alphabetic characters or symbols that are used with alphabetic characters\nconst CJ = 31; //  Treat as NS or ID for strict or normal breaking.\nconst EB = 32; //  Do not break from following Emoji Modifier\nconst EM = 33; //  Do not break from preceding Emoji Base\nconst H2 = 34; //  Form Korean syllable blocks\nconst H3 = 35; //  Form Korean syllable blocks\nconst HL = 36; //  Do not break around a following hyphen; otherwise act as Alphabetic\nconst ID = 37; //  Break before or after; except in some numeric context\nconst JL = 38; //  Form Korean syllable blocks\nconst JV = 39; //  Form Korean syllable blocks\nconst JT = 40; //  Form Korean syllable blocks\nconst RI = 41; //  Keep pairs together. For pairs; break before and after other classes\nconst SA = 42; //  Provide a line break opportunity contingent on additional, language-specific context analysis\nconst XX = 43; //  Have as yet unknown line breaking behavior or unassigned code positions\n\nconst ea_OP = [0x2329, 0xff08];\n\nexport const classes: {[key: string]: number} = {\n    BK,\n    CR,\n    LF,\n    CM,\n    NL,\n    SG,\n    WJ,\n    ZW,\n    GL,\n    SP,\n    ZWJ,\n    B2,\n    BA,\n    BB,\n    HY,\n    CB,\n    CL,\n    CP,\n    EX,\n    IN,\n    NS,\n    OP,\n    QU,\n    IS,\n    NU,\n    PO,\n    PR,\n    SY,\n    AI,\n    AL,\n    CJ,\n    EB,\n    EM,\n    H2,\n    H3,\n    HL,\n    ID,\n    JL,\n    JV,\n    JT,\n    RI,\n    SA,\n    XX,\n};\n\nexport const BREAK_MANDATORY = '!';\nexport const BREAK_NOT_ALLOWED = '×';\nexport const BREAK_ALLOWED = '÷';\nexport const UnicodeTrie = createTrieFromBase64(base64, byteLength);\n\nconst ALPHABETICS = [AL, HL];\nconst HARD_LINE_BREAKS = [BK, CR, LF, NL];\nconst SPACE = [SP, ZW];\nconst PREFIX_POSTFIX = [PR, PO];\nconst LINE_BREAKS = HARD_LINE_BREAKS.concat(SPACE);\nconst KOREAN_SYLLABLE_BLOCK = [JL, JV, JT, H2, H3];\nconst HYPHEN = [HY, BA];\n\nexport const codePointsToCharacterClasses = (\n    codePoints: number[],\n    lineBreak: string = 'strict'\n): [number[], number[], boolean[]] => {\n    const types: number[] = [];\n    const indices: number[] = [];\n    const categories: boolean[] = [];\n    codePoints.forEach((codePoint, index) => {\n        let classType = UnicodeTrie.get(codePoint);\n        if (classType > LETTER_NUMBER_MODIFIER) {\n            categories.push(true);\n            classType -= LETTER_NUMBER_MODIFIER;\n        } else {\n            categories.push(false);\n        }\n\n        if (['normal', 'auto', 'loose'].indexOf(lineBreak) !== -1) {\n            // U+2010, – U+2013, 〜 U+301C, ゠ U+30A0\n            if ([0x2010, 0x2013, 0x301c, 0x30a0].indexOf(codePoint) !== -1) {\n                indices.push(index);\n                return types.push(CB);\n            }\n        }\n\n        if (classType === CM || classType === ZWJ) {\n            // LB10 Treat any remaining combining mark or ZWJ as AL.\n            if (index === 0) {\n                indices.push(index);\n                return types.push(AL);\n            }\n\n            // LB9 Do not break a combining character sequence; treat it as if it has the line breaking class of\n            // the base character in all of the following rules. Treat ZWJ as if it were CM.\n            const prev = types[index - 1];\n            if (LINE_BREAKS.indexOf(prev) === -1) {\n                indices.push(indices[index - 1]);\n                return types.push(prev);\n            }\n            indices.push(index);\n            return types.push(AL);\n        }\n\n        indices.push(index);\n\n        if (classType === CJ) {\n            return types.push(lineBreak === 'strict' ? NS : ID);\n        }\n\n        if (classType === SA) {\n            return types.push(AL);\n        }\n\n        if (classType === AI) {\n            return types.push(AL);\n        }\n\n        // For supplementary characters, a useful default is to treat characters in the range 10000..1FFFD as AL\n        // and characters in the ranges 20000..2FFFD and 30000..3FFFD as ID, until the implementation can be revised\n        // to take into account the actual line breaking properties for these characters.\n        if (classType === XX) {\n            if ((codePoint >= 0x20000 && codePoint <= 0x2fffd) || (codePoint >= 0x30000 && codePoint <= 0x3fffd)) {\n                return types.push(ID);\n            } else {\n                return types.push(AL);\n            }\n        }\n\n        types.push(classType);\n    });\n\n    return [indices, types, categories];\n};\n\nconst isAdjacentWithSpaceIgnored = (\n    a: number[] | number,\n    b: number,\n    currentIndex: number,\n    classTypes: number[]\n): boolean => {\n    const current = classTypes[currentIndex];\n    if (Array.isArray(a) ? a.indexOf(current) !== -1 : a === current) {\n        let i = currentIndex;\n        while (i <= classTypes.length) {\n            i++;\n            let next = classTypes[i];\n\n            if (next === b) {\n                return true;\n            }\n\n            if (next !== SP) {\n                break;\n            }\n        }\n    }\n\n    if (current === SP) {\n        let i = currentIndex;\n\n        while (i > 0) {\n            i--;\n            const prev = classTypes[i];\n\n            if (Array.isArray(a) ? a.indexOf(prev) !== -1 : a === prev) {\n                let n = currentIndex;\n                while (n <= classTypes.length) {\n                    n++;\n                    let next = classTypes[n];\n\n                    if (next === b) {\n                        return true;\n                    }\n\n                    if (next !== SP) {\n                        break;\n                    }\n                }\n            }\n\n            if (prev !== SP) {\n                break;\n            }\n        }\n    }\n    return false;\n};\n\nconst previousNonSpaceClassType = (currentIndex: number, classTypes: number[]): number => {\n    let i = currentIndex;\n    while (i >= 0) {\n        let type = classTypes[i];\n        if (type === SP) {\n            i--;\n        } else {\n            return type;\n        }\n    }\n    return 0;\n};\n\nexport type BREAK_OPPORTUNITIES = typeof BREAK_NOT_ALLOWED | typeof BREAK_ALLOWED | typeof BREAK_MANDATORY;\n\nconst _lineBreakAtIndex = (\n    codePoints: number[],\n    classTypes: number[],\n    indicies: number[],\n    index: number,\n    forbiddenBreaks?: boolean[]\n): BREAK_OPPORTUNITIES => {\n    if (indicies[index] === 0) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    let currentIndex = index - 1;\n    if (Array.isArray(forbiddenBreaks) && forbiddenBreaks[currentIndex] === true) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    let beforeIndex = currentIndex - 1;\n    let afterIndex = currentIndex + 1;\n    let current = classTypes[currentIndex];\n\n    // LB4 Always break after hard line breaks.\n    // LB5 Treat CR followed by LF, as well as CR, LF, and NL as hard line breaks.\n    let before = beforeIndex >= 0 ? classTypes[beforeIndex] : 0;\n    let next = classTypes[afterIndex];\n\n    if (current === CR && next === LF) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    if (HARD_LINE_BREAKS.indexOf(current) !== -1) {\n        return BREAK_MANDATORY;\n    }\n\n    // LB6 Do not break before hard line breaks.\n    if (HARD_LINE_BREAKS.indexOf(next) !== -1) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB7 Do not break before spaces or zero width space.\n    if (SPACE.indexOf(next) !== -1) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB8 Break before any character following a zero-width space, even if one or more spaces intervene.\n    if (previousNonSpaceClassType(currentIndex, classTypes) === ZW) {\n        return BREAK_ALLOWED;\n    }\n\n    // LB8a Do not break after a zero width joiner.\n    if (UnicodeTrie.get(codePoints[currentIndex]) === ZWJ) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // zwj emojis\n    if ((current === EB || current === EM) && UnicodeTrie.get(codePoints[afterIndex]) === ZWJ) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB11 Do not break before or after Word joiner and related characters.\n    if (current === WJ || next === WJ) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB12 Do not break after NBSP and related characters.\n    if (current === GL) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB12a Do not break before NBSP and related characters, except after spaces and hyphens.\n    if ([SP, BA, HY].indexOf(current) === -1 && next === GL) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB13 Do not break before ‘]’ or ‘!’ or ‘;’ or ‘/’, even after spaces.\n    if ([CL, CP, EX, IS, SY].indexOf(next) !== -1) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB14 Do not break after ‘[’, even after spaces.\n    if (previousNonSpaceClassType(currentIndex, classTypes) === OP) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB15 Do not break within ‘”[’, even with intervening spaces.\n    if (isAdjacentWithSpaceIgnored(QU, OP, currentIndex, classTypes)) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB16 Do not break between closing punctuation and a nonstarter (lb=NS), even with intervening spaces.\n    if (isAdjacentWithSpaceIgnored([CL, CP], NS, currentIndex, classTypes)) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB17 Do not break within ‘——’, even with intervening spaces.\n    if (isAdjacentWithSpaceIgnored(B2, B2, currentIndex, classTypes)) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB18 Break after spaces.\n    if (current === SP) {\n        return BREAK_ALLOWED;\n    }\n\n    // LB19 Do not break before or after quotation marks, such as ‘ ” ’.\n    if (current === QU || next === QU) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB20 Break before and after unresolved CB.\n    if (next === CB || current === CB) {\n        return BREAK_ALLOWED;\n    }\n\n    // LB21 Do not break before hyphen-minus, other hyphens, fixed-width spaces, small kana, and other non-starters, or after acute accents.\n    if ([BA, HY, NS].indexOf(next) !== -1 || current === BB) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB21a Don't break after Hebrew + Hyphen.\n    if (before === HL && HYPHEN.indexOf(current) !== -1) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB21b Don’t break between Solidus and Hebrew letters.\n    if (current === SY && next === HL) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB22 Do not break before ellipsis.\n    if (next === IN) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB23 Do not break between digits and letters.\n    if ((ALPHABETICS.indexOf(next) !== -1 && current === NU) || (ALPHABETICS.indexOf(current) !== -1 && next === NU)) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB23a Do not break between numeric prefixes and ideographs, or between ideographs and numeric postfixes.\n    if (\n        (current === PR && [ID, EB, EM].indexOf(next) !== -1) ||\n        ([ID, EB, EM].indexOf(current) !== -1 && next === PO)\n    ) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB24 Do not break between numeric prefix/postfix and letters, or between letters and prefix/postfix.\n    if (\n        (ALPHABETICS.indexOf(current) !== -1 && PREFIX_POSTFIX.indexOf(next) !== -1) ||\n        (PREFIX_POSTFIX.indexOf(current) !== -1 && ALPHABETICS.indexOf(next) !== -1)\n    ) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB25 Do not break between the following pairs of classes relevant to numbers:\n    if (\n        // (PR | PO) × ( OP | HY )? NU\n        ([PR, PO].indexOf(current) !== -1 &&\n            (next === NU || ([OP, HY].indexOf(next) !== -1 && classTypes[afterIndex + 1] === NU))) ||\n        // ( OP | HY ) × NU\n        ([OP, HY].indexOf(current) !== -1 && next === NU) ||\n        // NU ×\t(NU | SY | IS)\n        (current === NU && [NU, SY, IS].indexOf(next) !== -1)\n    ) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // NU (NU | SY | IS)* × (NU | SY | IS | CL | CP)\n    if ([NU, SY, IS, CL, CP].indexOf(next) !== -1) {\n        let prevIndex = currentIndex;\n        while (prevIndex >= 0) {\n            let type = classTypes[prevIndex];\n            if (type === NU) {\n                return BREAK_NOT_ALLOWED;\n            } else if ([SY, IS].indexOf(type) !== -1) {\n                prevIndex--;\n            } else {\n                break;\n            }\n        }\n    }\n\n    // NU (NU | SY | IS)* (CL | CP)? × (PO | PR))\n    if ([PR, PO].indexOf(next) !== -1) {\n        let prevIndex = [CL, CP].indexOf(current) !== -1 ? beforeIndex : currentIndex;\n        while (prevIndex >= 0) {\n            let type = classTypes[prevIndex];\n            if (type === NU) {\n                return BREAK_NOT_ALLOWED;\n            } else if ([SY, IS].indexOf(type) !== -1) {\n                prevIndex--;\n            } else {\n                break;\n            }\n        }\n    }\n\n    // LB26 Do not break a Korean syllable.\n    if (\n        (JL === current && [JL, JV, H2, H3].indexOf(next) !== -1) ||\n        ([JV, H2].indexOf(current) !== -1 && [JV, JT].indexOf(next) !== -1) ||\n        ([JT, H3].indexOf(current) !== -1 && next === JT)\n    ) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB27 Treat a Korean Syllable Block the same as ID.\n    if (\n        (KOREAN_SYLLABLE_BLOCK.indexOf(current) !== -1 && [IN, PO].indexOf(next) !== -1) ||\n        (KOREAN_SYLLABLE_BLOCK.indexOf(next) !== -1 && current === PR)\n    ) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB28 Do not break between alphabetics (“at”).\n    if (ALPHABETICS.indexOf(current) !== -1 && ALPHABETICS.indexOf(next) !== -1) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB29 Do not break between numeric punctuation and alphabetics (“e.g.”).\n    if (current === IS && ALPHABETICS.indexOf(next) !== -1) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB30 Do not break between letters, numbers, or ordinary symbols and opening or closing parentheses.\n    if (\n        (ALPHABETICS.concat(NU).indexOf(current) !== -1 &&\n            next === OP &&\n            ea_OP.indexOf(codePoints[afterIndex]) === -1) ||\n        (ALPHABETICS.concat(NU).indexOf(next) !== -1 && current === CP)\n    ) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB30a Break between two regional indicator symbols if and only if there are an even number of regional\n    // indicators preceding the position of the break.\n    if (current === RI && next === RI) {\n        let i = indicies[currentIndex];\n        let count = 1;\n        while (i > 0) {\n            i--;\n            if (classTypes[i] === RI) {\n                count++;\n            } else {\n                break;\n            }\n        }\n        if (count % 2 !== 0) {\n            return BREAK_NOT_ALLOWED;\n        }\n    }\n\n    // LB30b Do not break between an emoji base and an emoji modifier.\n    if (current === EB && next === EM) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    return BREAK_ALLOWED;\n};\n\nexport const lineBreakAtIndex = (codePoints: number[], index: number): BREAK_OPPORTUNITIES => {\n    // LB2 Never break at the start of text.\n    if (index === 0) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // LB3 Always break at the end of text.\n    if (index >= codePoints.length) {\n        return BREAK_MANDATORY;\n    }\n\n    const [indices, classTypes] = codePointsToCharacterClasses(codePoints);\n\n    return _lineBreakAtIndex(codePoints, classTypes, indices, index);\n};\n\nexport type LINE_BREAK = 'auto' | 'normal' | 'strict';\nexport type WORD_BREAK = 'normal' | 'break-all' | 'break-word' | 'keep-all';\n\ninterface IOptions {\n    lineBreak?: LINE_BREAK;\n    wordBreak?: WORD_BREAK;\n}\n\nconst cssFormattedClasses = (codePoints: number[], options?: IOptions): [number[], number[], boolean[] | undefined] => {\n    if (!options) {\n        options = {lineBreak: 'normal', wordBreak: 'normal'};\n    }\n    let [indicies, classTypes, isLetterNumber] = codePointsToCharacterClasses(codePoints, options.lineBreak);\n\n    if (options.wordBreak === 'break-all' || options.wordBreak === 'break-word') {\n        classTypes = classTypes.map((type) => ([NU, AL, SA].indexOf(type) !== -1 ? ID : type));\n    }\n\n    const forbiddenBreakpoints =\n        options.wordBreak === 'keep-all'\n            ? isLetterNumber.map((letterNumber, i) => {\n                  return letterNumber && codePoints[i] >= 0x4e00 && codePoints[i] <= 0x9fff;\n              })\n            : undefined;\n\n    return [indicies, classTypes, forbiddenBreakpoints];\n};\n\nexport const inlineBreakOpportunities = (str: string, options?: IOptions): string => {\n    const codePoints = toCodePoints(str);\n    let output = BREAK_NOT_ALLOWED;\n    const [indicies, classTypes, forbiddenBreakpoints] = cssFormattedClasses(codePoints, options);\n\n    codePoints.forEach((codePoint, i) => {\n        output +=\n            fromCodePoint(codePoint) +\n            (i >= codePoints.length - 1\n                ? BREAK_MANDATORY\n                : _lineBreakAtIndex(codePoints, classTypes, indicies, i + 1, forbiddenBreakpoints));\n    });\n\n    return output;\n};\n\nclass Break {\n    private readonly codePoints: number[];\n    readonly required: boolean;\n    readonly start: number;\n    readonly end: number;\n\n    constructor(codePoints: number[], lineBreak: string, start: number, end: number) {\n        this.codePoints = codePoints;\n        this.required = lineBreak === BREAK_MANDATORY;\n        this.start = start;\n        this.end = end;\n    }\n\n    slice(): string {\n        return fromCodePoint(...this.codePoints.slice(this.start, this.end));\n    }\n}\n\nexport type LineBreak =\n    | {\n          done: true;\n          value: null;\n      }\n    | {\n          done: false;\n          value: Break;\n      };\n\ninterface ILineBreakIterator {\n    next: () => LineBreak;\n}\n\nexport const LineBreaker = (str: string, options?: IOptions): ILineBreakIterator => {\n    const codePoints = toCodePoints(str);\n    const [indicies, classTypes, forbiddenBreakpoints] = cssFormattedClasses(codePoints, options);\n    const length = codePoints.length;\n    let lastEnd = 0;\n    let nextIndex = 0;\n\n    return {\n        next: () => {\n            if (nextIndex >= length) {\n                return {done: true, value: null};\n            }\n            let lineBreak = BREAK_NOT_ALLOWED;\n            while (\n                nextIndex < length &&\n                (lineBreak = _lineBreakAtIndex(codePoints, classTypes, indicies, ++nextIndex, forbiddenBreakpoints)) ===\n                    BREAK_NOT_ALLOWED\n            ) {}\n\n            if (lineBreak !== BREAK_NOT_ALLOWED || nextIndex === length) {\n                const value = new Break(codePoints, lineBreak, lastEnd, nextIndex);\n                lastEnd = nextIndex;\n                return {value, done: false};\n            }\n\n            return {done: true, value: null};\n        },\n    };\n};\n","// https://www.w3.org/TR/css-syntax-3\n\nimport {fromCodePoint, toCodePoints} from 'css-line-break';\n\nexport const enum TokenType {\n    STRING_TOKEN,\n    BAD_STRING_TOKEN,\n    LEFT_PARENTHESIS_TOKEN,\n    RIGHT_PARENTHESIS_TOKEN,\n    COMMA_TOKEN,\n    HASH_TOKEN,\n    DELIM_TOKEN,\n    AT_KEYWORD_TOKEN,\n    PREFIX_MATCH_TOKEN,\n    DASH_MATCH_TOKEN,\n    INCLUDE_MATCH_TOKEN,\n    LEFT_CURLY_BRACKET_TOKEN,\n    RIGHT_CURLY_BRACKET_TOKEN,\n    SUFFIX_MATCH_TOKEN,\n    SUBSTRING_MATCH_TOKEN,\n    DIMENSION_TOKEN,\n    PERCENTAGE_TOKEN,\n    NUMBER_TOKEN,\n    FUNCTION,\n    FUNCTION_TOKEN,\n    IDENT_TOKEN,\n    COLUMN_TOKEN,\n    URL_TOKEN,\n    BAD_URL_TOKEN,\n    CDC_TOKEN,\n    CDO_TOKEN,\n    COLON_TOKEN,\n    SEMICOLON_TOKEN,\n    LEFT_SQUARE_BRACKET_TOKEN,\n    RIGHT_SQUARE_BRACKET_TOKEN,\n    UNICODE_RANGE_TOKEN,\n    WHITESPACE_TOKEN,\n    EOF_TOKEN\n}\n\ninterface IToken {\n    type: TokenType;\n}\n\nexport interface Token extends IToken {\n    type:\n        | TokenType.BAD_URL_TOKEN\n        | TokenType.BAD_STRING_TOKEN\n        | TokenType.LEFT_PARENTHESIS_TOKEN\n        | TokenType.RIGHT_PARENTHESIS_TOKEN\n        | TokenType.COMMA_TOKEN\n        | TokenType.SUBSTRING_MATCH_TOKEN\n        | TokenType.PREFIX_MATCH_TOKEN\n        | TokenType.SUFFIX_MATCH_TOKEN\n        | TokenType.COLON_TOKEN\n        | TokenType.SEMICOLON_TOKEN\n        | TokenType.LEFT_SQUARE_BRACKET_TOKEN\n        | TokenType.RIGHT_SQUARE_BRACKET_TOKEN\n        | TokenType.LEFT_CURLY_BRACKET_TOKEN\n        | TokenType.RIGHT_CURLY_BRACKET_TOKEN\n        | TokenType.DASH_MATCH_TOKEN\n        | TokenType.INCLUDE_MATCH_TOKEN\n        | TokenType.COLUMN_TOKEN\n        | TokenType.WHITESPACE_TOKEN\n        | TokenType.CDC_TOKEN\n        | TokenType.CDO_TOKEN\n        | TokenType.EOF_TOKEN;\n}\n\nexport interface StringValueToken extends IToken {\n    type:\n        | TokenType.STRING_TOKEN\n        | TokenType.DELIM_TOKEN\n        | TokenType.FUNCTION_TOKEN\n        | TokenType.IDENT_TOKEN\n        | TokenType.URL_TOKEN\n        | TokenType.AT_KEYWORD_TOKEN;\n    value: string;\n}\n\nexport interface HashToken extends IToken {\n    type: TokenType.HASH_TOKEN;\n    flags: number;\n    value: string;\n}\n\nexport interface NumberValueToken extends IToken {\n    type: TokenType.PERCENTAGE_TOKEN | TokenType.NUMBER_TOKEN;\n    flags: number;\n    number: number;\n}\n\nexport interface DimensionToken extends IToken {\n    type: TokenType.DIMENSION_TOKEN;\n    flags: number;\n    unit: string;\n    number: number;\n}\n\nexport interface UnicodeRangeToken extends IToken {\n    type: TokenType.UNICODE_RANGE_TOKEN;\n    start: number;\n    end: number;\n}\n\nexport type CSSToken = Token | StringValueToken | NumberValueToken | DimensionToken | UnicodeRangeToken | HashToken;\n\nexport const FLAG_UNRESTRICTED = 1 << 0;\nexport const FLAG_ID = 1 << 1;\nexport const FLAG_INTEGER = 1 << 2;\nexport const FLAG_NUMBER = 1 << 3;\n\nconst LINE_FEED = 0x000a;\nconst SOLIDUS = 0x002f;\nconst REVERSE_SOLIDUS = 0x005c;\nconst CHARACTER_TABULATION = 0x0009;\nconst SPACE = 0x0020;\nconst QUOTATION_MARK = 0x0022;\nconst EQUALS_SIGN = 0x003d;\nconst NUMBER_SIGN = 0x0023;\nconst DOLLAR_SIGN = 0x0024;\nconst PERCENTAGE_SIGN = 0x0025;\nconst APOSTROPHE = 0x0027;\nconst LEFT_PARENTHESIS = 0x0028;\nconst RIGHT_PARENTHESIS = 0x0029;\nconst LOW_LINE = 0x005f;\nconst HYPHEN_MINUS = 0x002d;\nconst EXCLAMATION_MARK = 0x0021;\nconst LESS_THAN_SIGN = 0x003c;\nconst GREATER_THAN_SIGN = 0x003e;\nconst COMMERCIAL_AT = 0x0040;\nconst LEFT_SQUARE_BRACKET = 0x005b;\nconst RIGHT_SQUARE_BRACKET = 0x005d;\nconst CIRCUMFLEX_ACCENT = 0x003d;\nconst LEFT_CURLY_BRACKET = 0x007b;\nconst QUESTION_MARK = 0x003f;\nconst RIGHT_CURLY_BRACKET = 0x007d;\nconst VERTICAL_LINE = 0x007c;\nconst TILDE = 0x007e;\nconst CONTROL = 0x0080;\nconst REPLACEMENT_CHARACTER = 0xfffd;\nconst ASTERISK = 0x002a;\nconst PLUS_SIGN = 0x002b;\nconst COMMA = 0x002c;\nconst COLON = 0x003a;\nconst SEMICOLON = 0x003b;\nconst FULL_STOP = 0x002e;\nconst NULL = 0x0000;\nconst BACKSPACE = 0x0008;\nconst LINE_TABULATION = 0x000b;\nconst SHIFT_OUT = 0x000e;\nconst INFORMATION_SEPARATOR_ONE = 0x001f;\nconst DELETE = 0x007f;\nconst EOF = -1;\nconst ZERO = 0x0030;\nconst a = 0x0061;\nconst e = 0x0065;\nconst f = 0x0066;\nconst u = 0x0075;\nconst z = 0x007a;\nconst A = 0x0041;\nconst E = 0x0045;\nconst F = 0x0046;\nconst U = 0x0055;\nconst Z = 0x005a;\n\nconst isDigit = (codePoint: number) => codePoint >= ZERO && codePoint <= 0x0039;\nconst isSurrogateCodePoint = (codePoint: number) => codePoint >= 0xd800 && codePoint <= 0xdfff;\nconst isHex = (codePoint: number) =>\n    isDigit(codePoint) || (codePoint >= A && codePoint <= F) || (codePoint >= a && codePoint <= f);\nconst isLowerCaseLetter = (codePoint: number) => codePoint >= a && codePoint <= z;\nconst isUpperCaseLetter = (codePoint: number) => codePoint >= A && codePoint <= Z;\nconst isLetter = (codePoint: number) => isLowerCaseLetter(codePoint) || isUpperCaseLetter(codePoint);\nconst isNonASCIICodePoint = (codePoint: number) => codePoint >= CONTROL;\nconst isWhiteSpace = (codePoint: number): boolean =>\n    codePoint === LINE_FEED || codePoint === CHARACTER_TABULATION || codePoint === SPACE;\nconst isNameStartCodePoint = (codePoint: number): boolean =>\n    isLetter(codePoint) || isNonASCIICodePoint(codePoint) || codePoint === LOW_LINE;\nconst isNameCodePoint = (codePoint: number): boolean =>\n    isNameStartCodePoint(codePoint) || isDigit(codePoint) || codePoint === HYPHEN_MINUS;\nconst isNonPrintableCodePoint = (codePoint: number): boolean => {\n    return (\n        (codePoint >= NULL && codePoint <= BACKSPACE) ||\n        codePoint === LINE_TABULATION ||\n        (codePoint >= SHIFT_OUT && codePoint <= INFORMATION_SEPARATOR_ONE) ||\n        codePoint === DELETE\n    );\n};\nconst isValidEscape = (c1: number, c2: number): boolean => {\n    if (c1 !== REVERSE_SOLIDUS) {\n        return false;\n    }\n\n    return c2 !== LINE_FEED;\n};\nconst isIdentifierStart = (c1: number, c2: number, c3: number): boolean => {\n    if (c1 === HYPHEN_MINUS) {\n        return isNameStartCodePoint(c2) || isValidEscape(c2, c3);\n    } else if (isNameStartCodePoint(c1)) {\n        return true;\n    } else if (c1 === REVERSE_SOLIDUS && isValidEscape(c1, c2)) {\n        return true;\n    }\n    return false;\n};\n\nconst isNumberStart = (c1: number, c2: number, c3: number): boolean => {\n    if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) {\n        if (isDigit(c2)) {\n            return true;\n        }\n\n        return c2 === FULL_STOP && isDigit(c3);\n    }\n\n    if (c1 === FULL_STOP) {\n        return isDigit(c2);\n    }\n\n    return isDigit(c1);\n};\n\nconst stringToNumber = (codePoints: number[]): number => {\n    let c = 0;\n    let sign = 1;\n    if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) {\n        if (codePoints[c] === HYPHEN_MINUS) {\n            sign = -1;\n        }\n        c++;\n    }\n\n    const integers = [];\n\n    while (isDigit(codePoints[c])) {\n        integers.push(codePoints[c++]);\n    }\n\n    const int = integers.length ? parseInt(fromCodePoint(...integers), 10) : 0;\n\n    if (codePoints[c] === FULL_STOP) {\n        c++;\n    }\n\n    const fraction = [];\n    while (isDigit(codePoints[c])) {\n        fraction.push(codePoints[c++]);\n    }\n\n    const fracd = fraction.length;\n    const frac = fracd ? parseInt(fromCodePoint(...fraction), 10) : 0;\n\n    if (codePoints[c] === E || codePoints[c] === e) {\n        c++;\n    }\n\n    let expsign = 1;\n\n    if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) {\n        if (codePoints[c] === HYPHEN_MINUS) {\n            expsign = -1;\n        }\n        c++;\n    }\n\n    const exponent = [];\n\n    while (isDigit(codePoints[c])) {\n        exponent.push(codePoints[c++]);\n    }\n\n    const exp = exponent.length ? parseInt(fromCodePoint(...exponent), 10) : 0;\n\n    return sign * (int + frac * Math.pow(10, -fracd)) * Math.pow(10, expsign * exp);\n};\n\nconst LEFT_PARENTHESIS_TOKEN: Token = {\n    type: TokenType.LEFT_PARENTHESIS_TOKEN\n};\nconst RIGHT_PARENTHESIS_TOKEN: Token = {\n    type: TokenType.RIGHT_PARENTHESIS_TOKEN\n};\nconst COMMA_TOKEN: Token = {type: TokenType.COMMA_TOKEN};\nconst SUFFIX_MATCH_TOKEN: Token = {type: TokenType.SUFFIX_MATCH_TOKEN};\nconst PREFIX_MATCH_TOKEN: Token = {type: TokenType.PREFIX_MATCH_TOKEN};\nconst COLUMN_TOKEN: Token = {type: TokenType.COLUMN_TOKEN};\nconst DASH_MATCH_TOKEN: Token = {type: TokenType.DASH_MATCH_TOKEN};\nconst INCLUDE_MATCH_TOKEN: Token = {type: TokenType.INCLUDE_MATCH_TOKEN};\nconst LEFT_CURLY_BRACKET_TOKEN: Token = {\n    type: TokenType.LEFT_CURLY_BRACKET_TOKEN\n};\nconst RIGHT_CURLY_BRACKET_TOKEN: Token = {\n    type: TokenType.RIGHT_CURLY_BRACKET_TOKEN\n};\nconst SUBSTRING_MATCH_TOKEN: Token = {type: TokenType.SUBSTRING_MATCH_TOKEN};\nconst BAD_URL_TOKEN: Token = {type: TokenType.BAD_URL_TOKEN};\nconst BAD_STRING_TOKEN: Token = {type: TokenType.BAD_STRING_TOKEN};\nconst CDO_TOKEN: Token = {type: TokenType.CDO_TOKEN};\nconst CDC_TOKEN: Token = {type: TokenType.CDC_TOKEN};\nconst COLON_TOKEN: Token = {type: TokenType.COLON_TOKEN};\nconst SEMICOLON_TOKEN: Token = {type: TokenType.SEMICOLON_TOKEN};\nconst LEFT_SQUARE_BRACKET_TOKEN: Token = {\n    type: TokenType.LEFT_SQUARE_BRACKET_TOKEN\n};\nconst RIGHT_SQUARE_BRACKET_TOKEN: Token = {\n    type: TokenType.RIGHT_SQUARE_BRACKET_TOKEN\n};\nconst WHITESPACE_TOKEN: Token = {type: TokenType.WHITESPACE_TOKEN};\nexport const EOF_TOKEN: Token = {type: TokenType.EOF_TOKEN};\n\nexport class Tokenizer {\n    private _value: number[];\n\n    constructor() {\n        this._value = [];\n    }\n\n    write(chunk: string): void {\n        this._value = this._value.concat(toCodePoints(chunk));\n    }\n\n    read(): CSSToken[] {\n        const tokens = [];\n        let token = this.consumeToken();\n        while (token !== EOF_TOKEN) {\n            tokens.push(token);\n            token = this.consumeToken();\n        }\n        return tokens;\n    }\n\n    private consumeToken(): CSSToken {\n        const codePoint = this.consumeCodePoint();\n\n        switch (codePoint) {\n            case QUOTATION_MARK:\n                return this.consumeStringToken(QUOTATION_MARK);\n            case NUMBER_SIGN:\n                const c1 = this.peekCodePoint(0);\n                const c2 = this.peekCodePoint(1);\n                const c3 = this.peekCodePoint(2);\n                if (isNameCodePoint(c1) || isValidEscape(c2, c3)) {\n                    const flags = isIdentifierStart(c1, c2, c3) ? FLAG_ID : FLAG_UNRESTRICTED;\n                    const value = this.consumeName();\n\n                    return {type: TokenType.HASH_TOKEN, value, flags};\n                }\n                break;\n            case DOLLAR_SIGN:\n                if (this.peekCodePoint(0) === EQUALS_SIGN) {\n                    this.consumeCodePoint();\n                    return SUFFIX_MATCH_TOKEN;\n                }\n                break;\n            case APOSTROPHE:\n                return this.consumeStringToken(APOSTROPHE);\n            case LEFT_PARENTHESIS:\n                return LEFT_PARENTHESIS_TOKEN;\n            case RIGHT_PARENTHESIS:\n                return RIGHT_PARENTHESIS_TOKEN;\n            case ASTERISK:\n                if (this.peekCodePoint(0) === EQUALS_SIGN) {\n                    this.consumeCodePoint();\n                    return SUBSTRING_MATCH_TOKEN;\n                }\n                break;\n            case PLUS_SIGN:\n                if (isNumberStart(codePoint, this.peekCodePoint(0), this.peekCodePoint(1))) {\n                    this.reconsumeCodePoint(codePoint);\n                    return this.consumeNumericToken();\n                }\n                break;\n            case COMMA:\n                return COMMA_TOKEN;\n            case HYPHEN_MINUS:\n                const e1 = codePoint;\n                const e2 = this.peekCodePoint(0);\n                const e3 = this.peekCodePoint(1);\n\n                if (isNumberStart(e1, e2, e3)) {\n                    this.reconsumeCodePoint(codePoint);\n                    return this.consumeNumericToken();\n                }\n\n                if (isIdentifierStart(e1, e2, e3)) {\n                    this.reconsumeCodePoint(codePoint);\n                    return this.consumeIdentLikeToken();\n                }\n\n                if (e2 === HYPHEN_MINUS && e3 === GREATER_THAN_SIGN) {\n                    this.consumeCodePoint();\n                    this.consumeCodePoint();\n                    return CDC_TOKEN;\n                }\n                break;\n\n            case FULL_STOP:\n                if (isNumberStart(codePoint, this.peekCodePoint(0), this.peekCodePoint(1))) {\n                    this.reconsumeCodePoint(codePoint);\n                    return this.consumeNumericToken();\n                }\n                break;\n            case SOLIDUS:\n                if (this.peekCodePoint(0) === ASTERISK) {\n                    this.consumeCodePoint();\n                    while (true) {\n                        let c = this.consumeCodePoint();\n                        if (c === ASTERISK) {\n                            c = this.consumeCodePoint();\n                            if (c === SOLIDUS) {\n                                return this.consumeToken();\n                            }\n                        }\n                        if (c === EOF) {\n                            return this.consumeToken();\n                        }\n                    }\n                }\n                break;\n            case COLON:\n                return COLON_TOKEN;\n            case SEMICOLON:\n                return SEMICOLON_TOKEN;\n            case LESS_THAN_SIGN:\n                if (\n                    this.peekCodePoint(0) === EXCLAMATION_MARK &&\n                    this.peekCodePoint(1) === HYPHEN_MINUS &&\n                    this.peekCodePoint(2) === HYPHEN_MINUS\n                ) {\n                    this.consumeCodePoint();\n                    this.consumeCodePoint();\n                    return CDO_TOKEN;\n                }\n                break;\n            case COMMERCIAL_AT:\n                const a1 = this.peekCodePoint(0);\n                const a2 = this.peekCodePoint(1);\n                const a3 = this.peekCodePoint(2);\n                if (isIdentifierStart(a1, a2, a3)) {\n                    const value = this.consumeName();\n                    return {type: TokenType.AT_KEYWORD_TOKEN, value};\n                }\n                break;\n            case LEFT_SQUARE_BRACKET:\n                return LEFT_SQUARE_BRACKET_TOKEN;\n            case REVERSE_SOLIDUS:\n                if (isValidEscape(codePoint, this.peekCodePoint(0))) {\n                    this.reconsumeCodePoint(codePoint);\n                    return this.consumeIdentLikeToken();\n                }\n                break;\n            case RIGHT_SQUARE_BRACKET:\n                return RIGHT_SQUARE_BRACKET_TOKEN;\n            case CIRCUMFLEX_ACCENT:\n                if (this.peekCodePoint(0) === EQUALS_SIGN) {\n                    this.consumeCodePoint();\n                    return PREFIX_MATCH_TOKEN;\n                }\n                break;\n            case LEFT_CURLY_BRACKET:\n                return LEFT_CURLY_BRACKET_TOKEN;\n            case RIGHT_CURLY_BRACKET:\n                return RIGHT_CURLY_BRACKET_TOKEN;\n            case u:\n            case U:\n                const u1 = this.peekCodePoint(0);\n                const u2 = this.peekCodePoint(1);\n                if (u1 === PLUS_SIGN && (isHex(u2) || u2 === QUESTION_MARK)) {\n                    this.consumeCodePoint();\n                    this.consumeUnicodeRangeToken();\n                }\n                this.reconsumeCodePoint(codePoint);\n                return this.consumeIdentLikeToken();\n            case VERTICAL_LINE:\n                if (this.peekCodePoint(0) === EQUALS_SIGN) {\n                    this.consumeCodePoint();\n                    return DASH_MATCH_TOKEN;\n                }\n                if (this.peekCodePoint(0) === VERTICAL_LINE) {\n                    this.consumeCodePoint();\n                    return COLUMN_TOKEN;\n                }\n                break;\n            case TILDE:\n                if (this.peekCodePoint(0) === EQUALS_SIGN) {\n                    this.consumeCodePoint();\n                    return INCLUDE_MATCH_TOKEN;\n                }\n                break;\n            case EOF:\n                return EOF_TOKEN;\n        }\n\n        if (isWhiteSpace(codePoint)) {\n            this.consumeWhiteSpace();\n            return WHITESPACE_TOKEN;\n        }\n\n        if (isDigit(codePoint)) {\n            this.reconsumeCodePoint(codePoint);\n            return this.consumeNumericToken();\n        }\n\n        if (isNameStartCodePoint(codePoint)) {\n            this.reconsumeCodePoint(codePoint);\n            return this.consumeIdentLikeToken();\n        }\n\n        return {type: TokenType.DELIM_TOKEN, value: fromCodePoint(codePoint)};\n    }\n\n    private consumeCodePoint(): number {\n        const value = this._value.shift();\n\n        return typeof value === 'undefined' ? -1 : value;\n    }\n\n    private reconsumeCodePoint(codePoint: number) {\n        this._value.unshift(codePoint);\n    }\n\n    private peekCodePoint(delta: number): number {\n        if (delta >= this._value.length) {\n            return -1;\n        }\n\n        return this._value[delta];\n    }\n\n    private consumeUnicodeRangeToken(): UnicodeRangeToken {\n        const digits = [];\n        let codePoint = this.consumeCodePoint();\n        while (isHex(codePoint) && digits.length < 6) {\n            digits.push(codePoint);\n            codePoint = this.consumeCodePoint();\n        }\n        let questionMarks = false;\n        while (codePoint === QUESTION_MARK && digits.length < 6) {\n            digits.push(codePoint);\n            codePoint = this.consumeCodePoint();\n            questionMarks = true;\n        }\n\n        if (questionMarks) {\n            const start = parseInt(\n                fromCodePoint(...digits.map((digit) => (digit === QUESTION_MARK ? ZERO : digit))),\n                16\n            );\n            const end = parseInt(fromCodePoint(...digits.map((digit) => (digit === QUESTION_MARK ? F : digit))), 16);\n            return {type: TokenType.UNICODE_RANGE_TOKEN, start, end};\n        }\n\n        const start = parseInt(fromCodePoint(...digits), 16);\n        if (this.peekCodePoint(0) === HYPHEN_MINUS && isHex(this.peekCodePoint(1))) {\n            this.consumeCodePoint();\n            codePoint = this.consumeCodePoint();\n            const endDigits = [];\n            while (isHex(codePoint) && endDigits.length < 6) {\n                endDigits.push(codePoint);\n                codePoint = this.consumeCodePoint();\n            }\n            const end = parseInt(fromCodePoint(...endDigits), 16);\n\n            return {type: TokenType.UNICODE_RANGE_TOKEN, start, end};\n        } else {\n            return {type: TokenType.UNICODE_RANGE_TOKEN, start, end: start};\n        }\n    }\n\n    private consumeIdentLikeToken(): StringValueToken | Token {\n        const value = this.consumeName();\n        if (value.toLowerCase() === 'url' && this.peekCodePoint(0) === LEFT_PARENTHESIS) {\n            this.consumeCodePoint();\n            return this.consumeUrlToken();\n        } else if (this.peekCodePoint(0) === LEFT_PARENTHESIS) {\n            this.consumeCodePoint();\n            return {type: TokenType.FUNCTION_TOKEN, value};\n        }\n\n        return {type: TokenType.IDENT_TOKEN, value};\n    }\n\n    private consumeUrlToken(): StringValueToken | Token {\n        const value = [];\n        this.consumeWhiteSpace();\n\n        if (this.peekCodePoint(0) === EOF) {\n            return {type: TokenType.URL_TOKEN, value: ''};\n        }\n\n        const next = this.peekCodePoint(0);\n        if (next === APOSTROPHE || next === QUOTATION_MARK) {\n            const stringToken = this.consumeStringToken(this.consumeCodePoint());\n            if (stringToken.type === TokenType.STRING_TOKEN) {\n                this.consumeWhiteSpace();\n\n                if (this.peekCodePoint(0) === EOF || this.peekCodePoint(0) === RIGHT_PARENTHESIS) {\n                    this.consumeCodePoint();\n                    return {type: TokenType.URL_TOKEN, value: stringToken.value};\n                }\n            }\n\n            this.consumeBadUrlRemnants();\n            return BAD_URL_TOKEN;\n        }\n\n        while (true) {\n            const codePoint = this.consumeCodePoint();\n            if (codePoint === EOF || codePoint === RIGHT_PARENTHESIS) {\n                return {type: TokenType.URL_TOKEN, value: fromCodePoint(...value)};\n            } else if (isWhiteSpace(codePoint)) {\n                this.consumeWhiteSpace();\n                if (this.peekCodePoint(0) === EOF || this.peekCodePoint(0) === RIGHT_PARENTHESIS) {\n                    this.consumeCodePoint();\n                    return {type: TokenType.URL_TOKEN, value: fromCodePoint(...value)};\n                }\n                this.consumeBadUrlRemnants();\n                return BAD_URL_TOKEN;\n            } else if (\n                codePoint === QUOTATION_MARK ||\n                codePoint === APOSTROPHE ||\n                codePoint === LEFT_PARENTHESIS ||\n                isNonPrintableCodePoint(codePoint)\n            ) {\n                this.consumeBadUrlRemnants();\n                return BAD_URL_TOKEN;\n            } else if (codePoint === REVERSE_SOLIDUS) {\n                if (isValidEscape(codePoint, this.peekCodePoint(0))) {\n                    value.push(this.consumeEscapedCodePoint());\n                } else {\n                    this.consumeBadUrlRemnants();\n                    return BAD_URL_TOKEN;\n                }\n            } else {\n                value.push(codePoint);\n            }\n        }\n    }\n\n    private consumeWhiteSpace(): void {\n        while (isWhiteSpace(this.peekCodePoint(0))) {\n            this.consumeCodePoint();\n        }\n    }\n\n    private consumeBadUrlRemnants(): void {\n        while (true) {\n            const codePoint = this.consumeCodePoint();\n            if (codePoint === RIGHT_PARENTHESIS || codePoint === EOF) {\n                return;\n            }\n\n            if (isValidEscape(codePoint, this.peekCodePoint(0))) {\n                this.consumeEscapedCodePoint();\n            }\n        }\n    }\n\n    private consumeStringSlice(count: number): string {\n        const SLICE_STACK_SIZE = 50000;\n        let value = '';\n        while (count > 0) {\n            const amount = Math.min(SLICE_STACK_SIZE, count);\n            value += fromCodePoint(...this._value.splice(0, amount));\n            count -= amount;\n        }\n        this._value.shift();\n\n        return value;\n    }\n\n    private consumeStringToken(endingCodePoint: number): StringValueToken | Token {\n        let value = '';\n        let i = 0;\n\n        do {\n            const codePoint = this._value[i];\n            if (codePoint === EOF || codePoint === undefined || codePoint === endingCodePoint) {\n                value += this.consumeStringSlice(i);\n                return {type: TokenType.STRING_TOKEN, value};\n            }\n\n            if (codePoint === LINE_FEED) {\n                this._value.splice(0, i);\n                return BAD_STRING_TOKEN;\n            }\n\n            if (codePoint === REVERSE_SOLIDUS) {\n                const next = this._value[i + 1];\n                if (next !== EOF && next !== undefined) {\n                    if (next === LINE_FEED) {\n                        value += this.consumeStringSlice(i);\n                        i = -1;\n                        this._value.shift();\n                    } else if (isValidEscape(codePoint, next)) {\n                        value += this.consumeStringSlice(i);\n                        value += fromCodePoint(this.consumeEscapedCodePoint());\n                        i = -1;\n                    }\n                }\n            }\n\n            i++;\n        } while (true);\n    }\n\n    private consumeNumber() {\n        const repr = [];\n        let type = FLAG_INTEGER;\n        let c1 = this.peekCodePoint(0);\n        if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) {\n            repr.push(this.consumeCodePoint());\n        }\n\n        while (isDigit(this.peekCodePoint(0))) {\n            repr.push(this.consumeCodePoint());\n        }\n        c1 = this.peekCodePoint(0);\n        let c2 = this.peekCodePoint(1);\n        if (c1 === FULL_STOP && isDigit(c2)) {\n            repr.push(this.consumeCodePoint(), this.consumeCodePoint());\n            type = FLAG_NUMBER;\n            while (isDigit(this.peekCodePoint(0))) {\n                repr.push(this.consumeCodePoint());\n            }\n        }\n\n        c1 = this.peekCodePoint(0);\n        c2 = this.peekCodePoint(1);\n        const c3 = this.peekCodePoint(2);\n        if ((c1 === E || c1 === e) && (((c2 === PLUS_SIGN || c2 === HYPHEN_MINUS) && isDigit(c3)) || isDigit(c2))) {\n            repr.push(this.consumeCodePoint(), this.consumeCodePoint());\n            type = FLAG_NUMBER;\n            while (isDigit(this.peekCodePoint(0))) {\n                repr.push(this.consumeCodePoint());\n            }\n        }\n\n        return [stringToNumber(repr), type];\n    }\n\n    private consumeNumericToken(): NumberValueToken | DimensionToken {\n        const [number, flags] = this.consumeNumber();\n        const c1 = this.peekCodePoint(0);\n        const c2 = this.peekCodePoint(1);\n        const c3 = this.peekCodePoint(2);\n\n        if (isIdentifierStart(c1, c2, c3)) {\n            const unit = this.consumeName();\n            return {type: TokenType.DIMENSION_TOKEN, number, flags, unit};\n        }\n\n        if (c1 === PERCENTAGE_SIGN) {\n            this.consumeCodePoint();\n            return {type: TokenType.PERCENTAGE_TOKEN, number, flags};\n        }\n\n        return {type: TokenType.NUMBER_TOKEN, number, flags};\n    }\n\n    private consumeEscapedCodePoint(): number {\n        const codePoint = this.consumeCodePoint();\n\n        if (isHex(codePoint)) {\n            let hex = fromCodePoint(codePoint);\n            while (isHex(this.peekCodePoint(0)) && hex.length < 6) {\n                hex += fromCodePoint(this.consumeCodePoint());\n            }\n\n            if (isWhiteSpace(this.peekCodePoint(0))) {\n                this.consumeCodePoint();\n            }\n\n            const hexCodePoint = parseInt(hex, 16);\n\n            if (hexCodePoint === 0 || isSurrogateCodePoint(hexCodePoint) || hexCodePoint > 0x10ffff) {\n                return REPLACEMENT_CHARACTER;\n            }\n\n            return hexCodePoint;\n        }\n\n        if (codePoint === EOF) {\n            return REPLACEMENT_CHARACTER;\n        }\n\n        return codePoint;\n    }\n\n    private consumeName(): string {\n        let result = '';\n        while (true) {\n            const codePoint = this.consumeCodePoint();\n            if (isNameCodePoint(codePoint)) {\n                result += fromCodePoint(codePoint);\n            } else if (isValidEscape(codePoint, this.peekCodePoint(0))) {\n                result += fromCodePoint(this.consumeEscapedCodePoint());\n            } else {\n                this.reconsumeCodePoint(codePoint);\n                return result;\n            }\n        }\n    }\n}\n","import {\n    CSSToken,\n    DimensionToken,\n    EOF_TOKEN,\n    NumberValueToken,\n    StringValueToken,\n    Tokenizer,\n    TokenType\n} from './tokenizer';\n\nexport type CSSBlockType =\n    | TokenType.LEFT_PARENTHESIS_TOKEN\n    | TokenType.LEFT_SQUARE_BRACKET_TOKEN\n    | TokenType.LEFT_CURLY_BRACKET_TOKEN;\n\nexport interface CSSBlock {\n    type: CSSBlockType;\n    values: CSSValue[];\n}\n\nexport interface CSSFunction {\n    type: TokenType.FUNCTION;\n    name: string;\n    values: CSSValue[];\n}\n\nexport type CSSValue = CSSFunction | CSSToken | CSSBlock;\n\nexport class Parser {\n    private _tokens: CSSToken[];\n\n    constructor(tokens: CSSToken[]) {\n        this._tokens = tokens;\n    }\n\n    static create(value: string): Parser {\n        const tokenizer = new Tokenizer();\n        tokenizer.write(value);\n        return new Parser(tokenizer.read());\n    }\n\n    static parseValue(value: string): CSSValue {\n        return Parser.create(value).parseComponentValue();\n    }\n\n    static parseValues(value: string): CSSValue[] {\n        return Parser.create(value).parseComponentValues();\n    }\n\n    parseComponentValue(): CSSValue {\n        let token = this.consumeToken();\n        while (token.type === TokenType.WHITESPACE_TOKEN) {\n            token = this.consumeToken();\n        }\n\n        if (token.type === TokenType.EOF_TOKEN) {\n            throw new SyntaxError(`Error parsing CSS component value, unexpected EOF`);\n        }\n\n        this.reconsumeToken(token);\n        const value = this.consumeComponentValue();\n\n        do {\n            token = this.consumeToken();\n        } while (token.type === TokenType.WHITESPACE_TOKEN);\n\n        if (token.type === TokenType.EOF_TOKEN) {\n            return value;\n        }\n\n        throw new SyntaxError(`Error parsing CSS component value, multiple values found when expecting only one`);\n    }\n\n    parseComponentValues(): CSSValue[] {\n        const values = [];\n        while (true) {\n            const value = this.consumeComponentValue();\n            if (value.type === TokenType.EOF_TOKEN) {\n                return values;\n            }\n            values.push(value);\n            values.push();\n        }\n    }\n\n    private consumeComponentValue(): CSSValue {\n        const token = this.consumeToken();\n\n        switch (token.type) {\n            case TokenType.LEFT_CURLY_BRACKET_TOKEN:\n            case TokenType.LEFT_SQUARE_BRACKET_TOKEN:\n            case TokenType.LEFT_PARENTHESIS_TOKEN:\n                return this.consumeSimpleBlock(token.type);\n            case TokenType.FUNCTION_TOKEN:\n                return this.consumeFunction(token);\n        }\n\n        return token;\n    }\n\n    private consumeSimpleBlock(type: CSSBlockType): CSSBlock {\n        const block: CSSBlock = {type, values: []};\n\n        let token = this.consumeToken();\n        while (true) {\n            if (token.type === TokenType.EOF_TOKEN || isEndingTokenFor(token, type)) {\n                return block;\n            }\n\n            this.reconsumeToken(token);\n            block.values.push(this.consumeComponentValue());\n            token = this.consumeToken();\n        }\n    }\n\n    private consumeFunction(functionToken: StringValueToken): CSSFunction {\n        const cssFunction: CSSFunction = {\n            name: functionToken.value,\n            values: [],\n            type: TokenType.FUNCTION\n        };\n\n        while (true) {\n            const token = this.consumeToken();\n            if (token.type === TokenType.EOF_TOKEN || token.type === TokenType.RIGHT_PARENTHESIS_TOKEN) {\n                return cssFunction;\n            }\n\n            this.reconsumeToken(token);\n            cssFunction.values.push(this.consumeComponentValue());\n        }\n    }\n\n    private consumeToken(): CSSToken {\n        const token = this._tokens.shift();\n        return typeof token === 'undefined' ? EOF_TOKEN : token;\n    }\n\n    private reconsumeToken(token: CSSToken): void {\n        this._tokens.unshift(token);\n    }\n}\n\nexport const isDimensionToken = (token: CSSValue): token is DimensionToken => token.type === TokenType.DIMENSION_TOKEN;\nexport const isNumberToken = (token: CSSValue): token is NumberValueToken => token.type === TokenType.NUMBER_TOKEN;\nexport const isIdentToken = (token: CSSValue): token is StringValueToken => token.type === TokenType.IDENT_TOKEN;\nexport const isStringToken = (token: CSSValue): token is StringValueToken => token.type === TokenType.STRING_TOKEN;\nexport const isIdentWithValue = (token: CSSValue, value: string): boolean =>\n    isIdentToken(token) && token.value === value;\n\nexport const nonWhiteSpace = (token: CSSValue): boolean => token.type !== TokenType.WHITESPACE_TOKEN;\nexport const nonFunctionArgSeparator = (token: CSSValue): boolean =>\n    token.type !== TokenType.WHITESPACE_TOKEN && token.type !== TokenType.COMMA_TOKEN;\n\nexport const parseFunctionArgs = (tokens: CSSValue[]): CSSValue[][] => {\n    const args: CSSValue[][] = [];\n    let arg: CSSValue[] = [];\n    tokens.forEach((token) => {\n        if (token.type === TokenType.COMMA_TOKEN) {\n            if (arg.length === 0) {\n                throw new Error(`Error parsing function args, zero tokens for arg`);\n            }\n            args.push(arg);\n            arg = [];\n            return;\n        }\n\n        if (token.type !== TokenType.WHITESPACE_TOKEN) {\n            arg.push(token);\n        }\n    });\n    if (arg.length) {\n        args.push(arg);\n    }\n\n    return args;\n};\n\nconst isEndingTokenFor = (token: CSSToken, type: CSSBlockType): boolean => {\n    if (type === TokenType.LEFT_CURLY_BRACKET_TOKEN && token.type === TokenType.RIGHT_CURLY_BRACKET_TOKEN) {\n        return true;\n    }\n    if (type === TokenType.LEFT_SQUARE_BRACKET_TOKEN && token.type === TokenType.RIGHT_SQUARE_BRACKET_TOKEN) {\n        return true;\n    }\n\n    return type === TokenType.LEFT_PARENTHESIS_TOKEN && token.type === TokenType.RIGHT_PARENTHESIS_TOKEN;\n};\n","import {CSSValue} from '../syntax/parser';\nimport {DimensionToken, NumberValueToken, TokenType} from '../syntax/tokenizer';\n\nexport type Length = DimensionToken | NumberValueToken;\n\nexport const isLength = (token: CSSValue): token is Length =>\n    token.type === TokenType.NUMBER_TOKEN || token.type === TokenType.DIMENSION_TOKEN;\n","import {DimensionToken, FLAG_INTEGER, NumberValueToken, TokenType} from '../syntax/tokenizer';\nimport {CSSValue, isDimensionToken} from '../syntax/parser';\nimport {isLength} from './length';\nexport type LengthPercentage = DimensionToken | NumberValueToken;\nexport type LengthPercentageTuple = [LengthPercentage] | [LengthPercentage, LengthPercentage];\n\nexport const isLengthPercentage = (token: CSSValue): token is LengthPercentage =>\n    token.type === TokenType.PERCENTAGE_TOKEN || isLength(token);\nexport const parseLengthPercentageTuple = (tokens: LengthPercentage[]): LengthPercentageTuple =>\n    tokens.length > 1 ? [tokens[0], tokens[1]] : [tokens[0]];\nexport const ZERO_LENGTH: NumberValueToken = {\n    type: TokenType.NUMBER_TOKEN,\n    number: 0,\n    flags: FLAG_INTEGER\n};\n\nexport const FIFTY_PERCENT: NumberValueToken = {\n    type: TokenType.PERCENTAGE_TOKEN,\n    number: 50,\n    flags: FLAG_INTEGER\n};\n\nexport const HUNDRED_PERCENT: NumberValueToken = {\n    type: TokenType.PERCENTAGE_TOKEN,\n    number: 100,\n    flags: FLAG_INTEGER\n};\n\nexport const getAbsoluteValueForTuple = (\n    tuple: LengthPercentageTuple,\n    width: number,\n    height: number\n): [number, number] => {\n    const [x, y] = tuple;\n    return [getAbsoluteValue(x, width), getAbsoluteValue(typeof y !== 'undefined' ? y : x, height)];\n};\nexport const getAbsoluteValue = (token: LengthPercentage, parent: number): number => {\n    if (token.type === TokenType.PERCENTAGE_TOKEN) {\n        return (token.number / 100) * parent;\n    }\n\n    if (isDimensionToken(token)) {\n        switch (token.unit) {\n            case 'rem':\n            case 'em':\n                return 16 * token.number; // TODO use correct font-size\n            case 'px':\n            default:\n                return token.number;\n        }\n    }\n\n    return token.number;\n};\n","import {CSSValue, isIdentToken} from '../syntax/parser';\nimport {TokenType} from '../syntax/tokenizer';\nimport {ITypeDescriptor} from '../ITypeDescriptor';\nimport {HUNDRED_PERCENT, ZERO_LENGTH} from './length-percentage';\nimport {GradientCorner} from './image';\nimport {Context} from '../../core/context';\n\nconst DEG = 'deg';\nconst GRAD = 'grad';\nconst RAD = 'rad';\nconst TURN = 'turn';\n\nexport const angle: ITypeDescriptor<number> = {\n    name: 'angle',\n    parse: (_context: Context, value: CSSValue): number => {\n        if (value.type === TokenType.DIMENSION_TOKEN) {\n            switch (value.unit) {\n                case DEG:\n                    return (Math.PI * value.number) / 180;\n                case GRAD:\n                    return (Math.PI / 200) * value.number;\n                case RAD:\n                    return value.number;\n                case TURN:\n                    return Math.PI * 2 * value.number;\n            }\n        }\n\n        throw new Error(`Unsupported angle type`);\n    }\n};\n\nexport const isAngle = (value: CSSValue): boolean => {\n    if (value.type === TokenType.DIMENSION_TOKEN) {\n        if (value.unit === DEG || value.unit === GRAD || value.unit === RAD || value.unit === TURN) {\n            return true;\n        }\n    }\n    return false;\n};\n\nexport const parseNamedSide = (tokens: CSSValue[]): number | GradientCorner => {\n    const sideOrCorner = tokens\n        .filter(isIdentToken)\n        .map((ident) => ident.value)\n        .join(' ');\n\n    switch (sideOrCorner) {\n        case 'to bottom right':\n        case 'to right bottom':\n        case 'left top':\n        case 'top left':\n            return [ZERO_LENGTH, ZERO_LENGTH];\n        case 'to top':\n        case 'bottom':\n            return deg(0);\n        case 'to bottom left':\n        case 'to left bottom':\n        case 'right top':\n        case 'top right':\n            return [ZERO_LENGTH, HUNDRED_PERCENT];\n        case 'to right':\n        case 'left':\n            return deg(90);\n        case 'to top left':\n        case 'to left top':\n        case 'right bottom':\n        case 'bottom right':\n            return [HUNDRED_PERCENT, HUNDRED_PERCENT];\n        case 'to bottom':\n        case 'top':\n            return deg(180);\n        case 'to top right':\n        case 'to right top':\n        case 'left bottom':\n        case 'bottom left':\n            return [HUNDRED_PERCENT, ZERO_LENGTH];\n        case 'to left':\n        case 'right':\n            return deg(270);\n    }\n\n    return 0;\n};\n\nexport const deg = (deg: number): number => (Math.PI * deg) / 180;\n","import {CSSValue, nonFunctionArgSeparator, Parser} from '../syntax/parser';\nimport {TokenType} from '../syntax/tokenizer';\nimport {ITypeDescriptor} from '../ITypeDescriptor';\nimport {angle, deg} from './angle';\nimport {getAbsoluteValue, isLengthPercentage} from './length-percentage';\nimport {Context} from '../../core/context';\nexport type Color = number;\n\nexport const color: ITypeDescriptor<Color> = {\n    name: 'color',\n    parse: (context: Context, value: CSSValue): Color => {\n        if (value.type === TokenType.FUNCTION) {\n            const colorFunction = SUPPORTED_COLOR_FUNCTIONS[value.name];\n            if (typeof colorFunction === 'undefined') {\n                throw new Error(`Attempting to parse an unsupported color function \"${value.name}\"`);\n            }\n            return colorFunction(context, value.values);\n        }\n\n        if (value.type === TokenType.HASH_TOKEN) {\n            if (value.value.length === 3) {\n                const r = value.value.substring(0, 1);\n                const g = value.value.substring(1, 2);\n                const b = value.value.substring(2, 3);\n                return pack(parseInt(r + r, 16), parseInt(g + g, 16), parseInt(b + b, 16), 1);\n            }\n\n            if (value.value.length === 4) {\n                const r = value.value.substring(0, 1);\n                const g = value.value.substring(1, 2);\n                const b = value.value.substring(2, 3);\n                const a = value.value.substring(3, 4);\n                return pack(parseInt(r + r, 16), parseInt(g + g, 16), parseInt(b + b, 16), parseInt(a + a, 16) / 255);\n            }\n\n            if (value.value.length === 6) {\n                const r = value.value.substring(0, 2);\n                const g = value.value.substring(2, 4);\n                const b = value.value.substring(4, 6);\n                return pack(parseInt(r, 16), parseInt(g, 16), parseInt(b, 16), 1);\n            }\n\n            if (value.value.length === 8) {\n                const r = value.value.substring(0, 2);\n                const g = value.value.substring(2, 4);\n                const b = value.value.substring(4, 6);\n                const a = value.value.substring(6, 8);\n                return pack(parseInt(r, 16), parseInt(g, 16), parseInt(b, 16), parseInt(a, 16) / 255);\n            }\n        }\n\n        if (value.type === TokenType.IDENT_TOKEN) {\n            const namedColor = COLORS[value.value.toUpperCase()];\n            if (typeof namedColor !== 'undefined') {\n                return namedColor;\n            }\n        }\n\n        return COLORS.TRANSPARENT;\n    }\n};\n\nexport const isTransparent = (color: Color): boolean => (0xff & color) === 0;\n\nexport const asString = (color: Color): string => {\n    const alpha = 0xff & color;\n    const blue = 0xff & (color >> 8);\n    const green = 0xff & (color >> 16);\n    const red = 0xff & (color >> 24);\n    return alpha < 255 ? `rgba(${red},${green},${blue},${alpha / 255})` : `rgb(${red},${green},${blue})`;\n};\n\nexport const pack = (r: number, g: number, b: number, a: number): Color =>\n    ((r << 24) | (g << 16) | (b << 8) | (Math.round(a * 255) << 0)) >>> 0;\n\nconst getTokenColorValue = (token: CSSValue, i: number): number => {\n    if (token.type === TokenType.NUMBER_TOKEN) {\n        return token.number;\n    }\n\n    if (token.type === TokenType.PERCENTAGE_TOKEN) {\n        const max = i === 3 ? 1 : 255;\n        return i === 3 ? (token.number / 100) * max : Math.round((token.number / 100) * max);\n    }\n\n    return 0;\n};\n\nconst rgb = (_context: Context, args: CSSValue[]): number => {\n    const tokens = args.filter(nonFunctionArgSeparator);\n\n    if (tokens.length === 3) {\n        const [r, g, b] = tokens.map(getTokenColorValue);\n        return pack(r, g, b, 1);\n    }\n\n    if (tokens.length === 4) {\n        const [r, g, b, a] = tokens.map(getTokenColorValue);\n        return pack(r, g, b, a);\n    }\n\n    return 0;\n};\n\nfunction hue2rgb(t1: number, t2: number, hue: number): number {\n    if (hue < 0) {\n        hue += 1;\n    }\n    if (hue >= 1) {\n        hue -= 1;\n    }\n\n    if (hue < 1 / 6) {\n        return (t2 - t1) * hue * 6 + t1;\n    } else if (hue < 1 / 2) {\n        return t2;\n    } else if (hue < 2 / 3) {\n        return (t2 - t1) * 6 * (2 / 3 - hue) + t1;\n    } else {\n        return t1;\n    }\n}\n\nconst hsl = (context: Context, args: CSSValue[]): number => {\n    const tokens = args.filter(nonFunctionArgSeparator);\n    const [hue, saturation, lightness, alpha] = tokens;\n\n    const h = (hue.type === TokenType.NUMBER_TOKEN ? deg(hue.number) : angle.parse(context, hue)) / (Math.PI * 2);\n    const s = isLengthPercentage(saturation) ? saturation.number / 100 : 0;\n    const l = isLengthPercentage(lightness) ? lightness.number / 100 : 0;\n    const a = typeof alpha !== 'undefined' && isLengthPercentage(alpha) ? getAbsoluteValue(alpha, 1) : 1;\n\n    if (s === 0) {\n        return pack(l * 255, l * 255, l * 255, 1);\n    }\n\n    const t2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n\n    const t1 = l * 2 - t2;\n    const r = hue2rgb(t1, t2, h + 1 / 3);\n    const g = hue2rgb(t1, t2, h);\n    const b = hue2rgb(t1, t2, h - 1 / 3);\n    return pack(r * 255, g * 255, b * 255, a);\n};\n\nconst SUPPORTED_COLOR_FUNCTIONS: {\n    [key: string]: (context: Context, args: CSSValue[]) => number;\n} = {\n    hsl: hsl,\n    hsla: hsl,\n    rgb: rgb,\n    rgba: rgb\n};\n\nexport const parseColor = (context: Context, value: string): Color =>\n    color.parse(context, Parser.create(value).parseComponentValue());\n\nexport const COLORS: {[key: string]: Color} = {\n    ALICEBLUE: 0xf0f8ffff,\n    ANTIQUEWHITE: 0xfaebd7ff,\n    AQUA: 0x00ffffff,\n    AQUAMARINE: 0x7fffd4ff,\n    AZURE: 0xf0ffffff,\n    BEIGE: 0xf5f5dcff,\n    BISQUE: 0xffe4c4ff,\n    BLACK: 0x000000ff,\n    BLANCHEDALMOND: 0xffebcdff,\n    BLUE: 0x0000ffff,\n    BLUEVIOLET: 0x8a2be2ff,\n    BROWN: 0xa52a2aff,\n    BURLYWOOD: 0xdeb887ff,\n    CADETBLUE: 0x5f9ea0ff,\n    CHARTREUSE: 0x7fff00ff,\n    CHOCOLATE: 0xd2691eff,\n    CORAL: 0xff7f50ff,\n    CORNFLOWERBLUE: 0x6495edff,\n    CORNSILK: 0xfff8dcff,\n    CRIMSON: 0xdc143cff,\n    CYAN: 0x00ffffff,\n    DARKBLUE: 0x00008bff,\n    DARKCYAN: 0x008b8bff,\n    DARKGOLDENROD: 0xb886bbff,\n    DARKGRAY: 0xa9a9a9ff,\n    DARKGREEN: 0x006400ff,\n    DARKGREY: 0xa9a9a9ff,\n    DARKKHAKI: 0xbdb76bff,\n    DARKMAGENTA: 0x8b008bff,\n    DARKOLIVEGREEN: 0x556b2fff,\n    DARKORANGE: 0xff8c00ff,\n    DARKORCHID: 0x9932ccff,\n    DARKRED: 0x8b0000ff,\n    DARKSALMON: 0xe9967aff,\n    DARKSEAGREEN: 0x8fbc8fff,\n    DARKSLATEBLUE: 0x483d8bff,\n    DARKSLATEGRAY: 0x2f4f4fff,\n    DARKSLATEGREY: 0x2f4f4fff,\n    DARKTURQUOISE: 0x00ced1ff,\n    DARKVIOLET: 0x9400d3ff,\n    DEEPPINK: 0xff1493ff,\n    DEEPSKYBLUE: 0x00bfffff,\n    DIMGRAY: 0x696969ff,\n    DIMGREY: 0x696969ff,\n    DODGERBLUE: 0x1e90ffff,\n    FIREBRICK: 0xb22222ff,\n    FLORALWHITE: 0xfffaf0ff,\n    FORESTGREEN: 0x228b22ff,\n    FUCHSIA: 0xff00ffff,\n    GAINSBORO: 0xdcdcdcff,\n    GHOSTWHITE: 0xf8f8ffff,\n    GOLD: 0xffd700ff,\n    GOLDENROD: 0xdaa520ff,\n    GRAY: 0x808080ff,\n    GREEN: 0x008000ff,\n    GREENYELLOW: 0xadff2fff,\n    GREY: 0x808080ff,\n    HONEYDEW: 0xf0fff0ff,\n    HOTPINK: 0xff69b4ff,\n    INDIANRED: 0xcd5c5cff,\n    INDIGO: 0x4b0082ff,\n    IVORY: 0xfffff0ff,\n    KHAKI: 0xf0e68cff,\n    LAVENDER: 0xe6e6faff,\n    LAVENDERBLUSH: 0xfff0f5ff,\n    LAWNGREEN: 0x7cfc00ff,\n    LEMONCHIFFON: 0xfffacdff,\n    LIGHTBLUE: 0xadd8e6ff,\n    LIGHTCORAL: 0xf08080ff,\n    LIGHTCYAN: 0xe0ffffff,\n    LIGHTGOLDENRODYELLOW: 0xfafad2ff,\n    LIGHTGRAY: 0xd3d3d3ff,\n    LIGHTGREEN: 0x90ee90ff,\n    LIGHTGREY: 0xd3d3d3ff,\n    LIGHTPINK: 0xffb6c1ff,\n    LIGHTSALMON: 0xffa07aff,\n    LIGHTSEAGREEN: 0x20b2aaff,\n    LIGHTSKYBLUE: 0x87cefaff,\n    LIGHTSLATEGRAY: 0x778899ff,\n    LIGHTSLATEGREY: 0x778899ff,\n    LIGHTSTEELBLUE: 0xb0c4deff,\n    LIGHTYELLOW: 0xffffe0ff,\n    LIME: 0x00ff00ff,\n    LIMEGREEN: 0x32cd32ff,\n    LINEN: 0xfaf0e6ff,\n    MAGENTA: 0xff00ffff,\n    MAROON: 0x800000ff,\n    MEDIUMAQUAMARINE: 0x66cdaaff,\n    MEDIUMBLUE: 0x0000cdff,\n    MEDIUMORCHID: 0xba55d3ff,\n    MEDIUMPURPLE: 0x9370dbff,\n    MEDIUMSEAGREEN: 0x3cb371ff,\n    MEDIUMSLATEBLUE: 0x7b68eeff,\n    MEDIUMSPRINGGREEN: 0x00fa9aff,\n    MEDIUMTURQUOISE: 0x48d1ccff,\n    MEDIUMVIOLETRED: 0xc71585ff,\n    MIDNIGHTBLUE: 0x191970ff,\n    MINTCREAM: 0xf5fffaff,\n    MISTYROSE: 0xffe4e1ff,\n    MOCCASIN: 0xffe4b5ff,\n    NAVAJOWHITE: 0xffdeadff,\n    NAVY: 0x000080ff,\n    OLDLACE: 0xfdf5e6ff,\n    OLIVE: 0x808000ff,\n    OLIVEDRAB: 0x6b8e23ff,\n    ORANGE: 0xffa500ff,\n    ORANGERED: 0xff4500ff,\n    ORCHID: 0xda70d6ff,\n    PALEGOLDENROD: 0xeee8aaff,\n    PALEGREEN: 0x98fb98ff,\n    PALETURQUOISE: 0xafeeeeff,\n    PALEVIOLETRED: 0xdb7093ff,\n    PAPAYAWHIP: 0xffefd5ff,\n    PEACHPUFF: 0xffdab9ff,\n    PERU: 0xcd853fff,\n    PINK: 0xffc0cbff,\n    PLUM: 0xdda0ddff,\n    POWDERBLUE: 0xb0e0e6ff,\n    PURPLE: 0x800080ff,\n    REBECCAPURPLE: 0x663399ff,\n    RED: 0xff0000ff,\n    ROSYBROWN: 0xbc8f8fff,\n    ROYALBLUE: 0x4169e1ff,\n    SADDLEBROWN: 0x8b4513ff,\n    SALMON: 0xfa8072ff,\n    SANDYBROWN: 0xf4a460ff,\n    SEAGREEN: 0x2e8b57ff,\n    SEASHELL: 0xfff5eeff,\n    SIENNA: 0xa0522dff,\n    SILVER: 0xc0c0c0ff,\n    SKYBLUE: 0x87ceebff,\n    SLATEBLUE: 0x6a5acdff,\n    SLATEGRAY: 0x708090ff,\n    SLATEGREY: 0x708090ff,\n    SNOW: 0xfffafaff,\n    SPRINGGREEN: 0x00ff7fff,\n    STEELBLUE: 0x4682b4ff,\n    TAN: 0xd2b48cff,\n    TEAL: 0x008080ff,\n    THISTLE: 0xd8bfd8ff,\n    TOMATO: 0xff6347ff,\n    TRANSPARENT: 0x00000000,\n    TURQUOISE: 0x40e0d0ff,\n    VIOLET: 0xee82eeff,\n    WHEAT: 0xf5deb3ff,\n    WHITE: 0xffffffff,\n    WHITESMOKE: 0xf5f5f5ff,\n    YELLOW: 0xffff00ff,\n    YELLOWGREEN: 0x9acd32ff\n};\n","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isIdentToken} from '../syntax/parser';\nimport {Context} from '../../core/context';\nexport const enum BACKGROUND_CLIP {\n    BORDER_BOX = 0,\n    PADDING_BOX = 1,\n    CONTENT_BOX = 2\n}\n\nexport type BackgroundClip = BACKGROUND_CLIP[];\n\nexport const backgroundClip: IPropertyListDescriptor<BackgroundClip> = {\n    name: 'background-clip',\n    initialValue: 'border-box',\n    prefix: false,\n    type: PropertyDescriptorParsingType.LIST,\n    parse: (_context: Context, tokens: CSSValue[]): BackgroundClip => {\n        return tokens.map((token) => {\n            if (isIdentToken(token)) {\n                switch (token.value) {\n                    case 'padding-box':\n                        return BACKGROUND_CLIP.PADDING_BOX;\n                    case 'content-box':\n                        return BACKGROUND_CLIP.CONTENT_BOX;\n                }\n            }\n            return BACKGROUND_CLIP.BORDER_BOX;\n        });\n    }\n};\n","import {IPropertyTypeValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\n\nexport const backgroundColor: IPropertyTypeValueDescriptor = {\n    name: `background-color`,\n    initialValue: 'transparent',\n    prefix: false,\n    type: PropertyDescriptorParsingType.TYPE_VALUE,\n    format: 'color'\n};\n","import {CSSValue} from '../../syntax/parser';\nimport {\n    CSSRadialExtent,\n    CSSRadialGradientImage,\n    CSSRadialShape,\n    GradientColorStop,\n    GradientCorner,\n    UnprocessedGradientColorStop\n} from '../image';\nimport {color as colorType} from '../color';\nimport {getAbsoluteValue, HUNDRED_PERCENT, isLengthPercentage, ZERO_LENGTH} from '../length-percentage';\nimport {Context} from '../../../core/context';\n\nexport const parseColorStop = (context: Context, args: CSSValue[]): UnprocessedGradientColorStop => {\n    const color = colorType.parse(context, args[0]);\n    const stop = args[1];\n    return stop && isLengthPercentage(stop) ? {color, stop} : {color, stop: null};\n};\n\nexport const processColorStops = (stops: UnprocessedGradientColorStop[], lineLength: number): GradientColorStop[] => {\n    const first = stops[0];\n    const last = stops[stops.length - 1];\n    if (first.stop === null) {\n        first.stop = ZERO_LENGTH;\n    }\n\n    if (last.stop === null) {\n        last.stop = HUNDRED_PERCENT;\n    }\n\n    const processStops: (number | null)[] = [];\n    let previous = 0;\n    for (let i = 0; i < stops.length; i++) {\n        const stop = stops[i].stop;\n        if (stop !== null) {\n            const absoluteValue = getAbsoluteValue(stop, lineLength);\n            if (absoluteValue > previous) {\n                processStops.push(absoluteValue);\n            } else {\n                processStops.push(previous);\n            }\n            previous = absoluteValue;\n        } else {\n            processStops.push(null);\n        }\n    }\n\n    let gapBegin = null;\n    for (let i = 0; i < processStops.length; i++) {\n        const stop = processStops[i];\n        if (stop === null) {\n            if (gapBegin === null) {\n                gapBegin = i;\n            }\n        } else if (gapBegin !== null) {\n            const gapLength = i - gapBegin;\n            const beforeGap = processStops[gapBegin - 1] as number;\n            const gapValue = (stop - beforeGap) / (gapLength + 1);\n            for (let g = 1; g <= gapLength; g++) {\n                processStops[gapBegin + g - 1] = gapValue * g;\n            }\n            gapBegin = null;\n        }\n    }\n\n    return stops.map(({color}, i) => {\n        return {color, stop: Math.max(Math.min(1, (processStops[i] as number) / lineLength), 0)};\n    });\n};\n\nconst getAngleFromCorner = (corner: GradientCorner, width: number, height: number): number => {\n    const centerX = width / 2;\n    const centerY = height / 2;\n    const x = getAbsoluteValue(corner[0], width) - centerX;\n    const y = centerY - getAbsoluteValue(corner[1], height);\n\n    return (Math.atan2(y, x) + Math.PI * 2) % (Math.PI * 2);\n};\n\nexport const calculateGradientDirection = (\n    angle: number | GradientCorner,\n    width: number,\n    height: number\n): [number, number, number, number, number] => {\n    const radian = typeof angle === 'number' ? angle : getAngleFromCorner(angle, width, height);\n\n    const lineLength = Math.abs(width * Math.sin(radian)) + Math.abs(height * Math.cos(radian));\n\n    const halfWidth = width / 2;\n    const halfHeight = height / 2;\n    const halfLineLength = lineLength / 2;\n\n    const yDiff = Math.sin(radian - Math.PI / 2) * halfLineLength;\n    const xDiff = Math.cos(radian - Math.PI / 2) * halfLineLength;\n\n    return [lineLength, halfWidth - xDiff, halfWidth + xDiff, halfHeight - yDiff, halfHeight + yDiff];\n};\n\nconst distance = (a: number, b: number): number => Math.sqrt(a * a + b * b);\n\nconst findCorner = (width: number, height: number, x: number, y: number, closest: boolean): [number, number] => {\n    const corners = [\n        [0, 0],\n        [0, height],\n        [width, 0],\n        [width, height]\n    ];\n\n    return corners.reduce(\n        (stat, corner) => {\n            const [cx, cy] = corner;\n            const d = distance(x - cx, y - cy);\n            if (closest ? d < stat.optimumDistance : d > stat.optimumDistance) {\n                return {\n                    optimumCorner: corner,\n                    optimumDistance: d\n                };\n            }\n\n            return stat;\n        },\n        {\n            optimumDistance: closest ? Infinity : -Infinity,\n            optimumCorner: null\n        }\n    ).optimumCorner as [number, number];\n};\n\nexport const calculateRadius = (\n    gradient: CSSRadialGradientImage,\n    x: number,\n    y: number,\n    width: number,\n    height: number\n): [number, number] => {\n    let rx = 0;\n    let ry = 0;\n\n    switch (gradient.size) {\n        case CSSRadialExtent.CLOSEST_SIDE:\n            // The ending shape is sized so that that it exactly meets the side of the gradient box closest to the gradient’s center.\n            // If the shape is an ellipse, it exactly meets the closest side in each dimension.\n            if (gradient.shape === CSSRadialShape.CIRCLE) {\n                rx = ry = Math.min(Math.abs(x), Math.abs(x - width), Math.abs(y), Math.abs(y - height));\n            } else if (gradient.shape === CSSRadialShape.ELLIPSE) {\n                rx = Math.min(Math.abs(x), Math.abs(x - width));\n                ry = Math.min(Math.abs(y), Math.abs(y - height));\n            }\n            break;\n\n        case CSSRadialExtent.CLOSEST_CORNER:\n            // The ending shape is sized so that that it passes through the corner of the gradient box closest to the gradient’s center.\n            // If the shape is an ellipse, the ending shape is given the same aspect-ratio it would have if closest-side were specified.\n            if (gradient.shape === CSSRadialShape.CIRCLE) {\n                rx = ry = Math.min(\n                    distance(x, y),\n                    distance(x, y - height),\n                    distance(x - width, y),\n                    distance(x - width, y - height)\n                );\n            } else if (gradient.shape === CSSRadialShape.ELLIPSE) {\n                // Compute the ratio ry/rx (which is to be the same as for \"closest-side\")\n                const c = Math.min(Math.abs(y), Math.abs(y - height)) / Math.min(Math.abs(x), Math.abs(x - width));\n                const [cx, cy] = findCorner(width, height, x, y, true);\n                rx = distance(cx - x, (cy - y) / c);\n                ry = c * rx;\n            }\n            break;\n\n        case CSSRadialExtent.FARTHEST_SIDE:\n            // Same as closest-side, except the ending shape is sized based on the farthest side(s)\n            if (gradient.shape === CSSRadialShape.CIRCLE) {\n                rx = ry = Math.max(Math.abs(x), Math.abs(x - width), Math.abs(y), Math.abs(y - height));\n            } else if (gradient.shape === CSSRadialShape.ELLIPSE) {\n                rx = Math.max(Math.abs(x), Math.abs(x - width));\n                ry = Math.max(Math.abs(y), Math.abs(y - height));\n            }\n            break;\n\n        case CSSRadialExtent.FARTHEST_CORNER:\n            // Same as closest-corner, except the ending shape is sized based on the farthest corner.\n            // If the shape is an ellipse, the ending shape is given the same aspect ratio it would have if farthest-side were specified.\n            if (gradient.shape === CSSRadialShape.CIRCLE) {\n                rx = ry = Math.max(\n                    distance(x, y),\n                    distance(x, y - height),\n                    distance(x - width, y),\n                    distance(x - width, y - height)\n                );\n            } else if (gradient.shape === CSSRadialShape.ELLIPSE) {\n                // Compute the ratio ry/rx (which is to be the same as for \"farthest-side\")\n                const c = Math.max(Math.abs(y), Math.abs(y - height)) / Math.max(Math.abs(x), Math.abs(x - width));\n                const [cx, cy] = findCorner(width, height, x, y, false);\n                rx = distance(cx - x, (cy - y) / c);\n                ry = c * rx;\n            }\n            break;\n    }\n\n    if (Array.isArray(gradient.size)) {\n        rx = getAbsoluteValue(gradient.size[0], width);\n        ry = gradient.size.length === 2 ? getAbsoluteValue(gradient.size[1], height) : rx;\n    }\n\n    return [rx, ry];\n};\n","import {CSSValue, parseFunctionArgs} from '../../syntax/parser';\nimport {CSSImageType, CSSLinearGradientImage, GradientCorner, UnprocessedGradientColorStop} from '../image';\nimport {TokenType} from '../../syntax/tokenizer';\nimport {isAngle, angle as angleType, parseNamedSide, deg} from '../angle';\nimport {parseColorStop} from './gradient';\nimport {Context} from '../../../core/context';\n\nexport const prefixLinearGradient = (context: Context, tokens: CSSValue[]): CSSLinearGradientImage => {\n    let angle: number | GradientCorner = deg(180);\n    const stops: UnprocessedGradientColorStop[] = [];\n\n    parseFunctionArgs(tokens).forEach((arg, i) => {\n        if (i === 0) {\n            const firstToken = arg[0];\n            if (\n                firstToken.type === TokenType.IDENT_TOKEN &&\n                ['top', 'left', 'right', 'bottom'].indexOf(firstToken.value) !== -1\n            ) {\n                angle = parseNamedSide(arg);\n                return;\n            } else if (isAngle(firstToken)) {\n                angle = (angleType.parse(context, firstToken) + deg(270)) % deg(360);\n                return;\n            }\n        }\n        const colorStop = parseColorStop(context, arg);\n        stops.push(colorStop);\n    });\n\n    return {\n        angle,\n        stops,\n        type: CSSImageType.LINEAR_GRADIENT\n    };\n};\n","import {CSSValue, isIdentToken, parseFunctionArgs} from '../../syntax/parser';\nimport {\n    CSSImageType,\n    CSSRadialExtent,\n    CSSRadialGradientImage,\n    CSSRadialShape,\n    CSSRadialSize,\n    UnprocessedGradientColorStop\n} from '../image';\nimport {parseColorStop} from './gradient';\nimport {FIFTY_PERCENT, HUNDRED_PERCENT, isLengthPercentage, LengthPercentage, ZERO_LENGTH} from '../length-percentage';\nimport {isLength} from '../length';\nimport {Context} from '../../../core/context';\nexport const CLOSEST_SIDE = 'closest-side';\nexport const FARTHEST_SIDE = 'farthest-side';\nexport const CLOSEST_CORNER = 'closest-corner';\nexport const FARTHEST_CORNER = 'farthest-corner';\nexport const CIRCLE = 'circle';\nexport const ELLIPSE = 'ellipse';\nexport const COVER = 'cover';\nexport const CONTAIN = 'contain';\n\nexport const radialGradient = (context: Context, tokens: CSSValue[]): CSSRadialGradientImage => {\n    let shape: CSSRadialShape = CSSRadialShape.CIRCLE;\n    let size: CSSRadialSize = CSSRadialExtent.FARTHEST_CORNER;\n    const stops: UnprocessedGradientColorStop[] = [];\n    const position: LengthPercentage[] = [];\n    parseFunctionArgs(tokens).forEach((arg, i) => {\n        let isColorStop = true;\n        if (i === 0) {\n            let isAtPosition = false;\n            isColorStop = arg.reduce((acc, token) => {\n                if (isAtPosition) {\n                    if (isIdentToken(token)) {\n                        switch (token.value) {\n                            case 'center':\n                                position.push(FIFTY_PERCENT);\n                                return acc;\n                            case 'top':\n                            case 'left':\n                                position.push(ZERO_LENGTH);\n                                return acc;\n                            case 'right':\n                            case 'bottom':\n                                position.push(HUNDRED_PERCENT);\n                                return acc;\n                        }\n                    } else if (isLengthPercentage(token) || isLength(token)) {\n                        position.push(token);\n                    }\n                } else if (isIdentToken(token)) {\n                    switch (token.value) {\n                        case CIRCLE:\n                            shape = CSSRadialShape.CIRCLE;\n                            return false;\n                        case ELLIPSE:\n                            shape = CSSRadialShape.ELLIPSE;\n                            return false;\n                        case 'at':\n                            isAtPosition = true;\n                            return false;\n                        case CLOSEST_SIDE:\n                            size = CSSRadialExtent.CLOSEST_SIDE;\n                            return false;\n                        case COVER:\n                        case FARTHEST_SIDE:\n                            size = CSSRadialExtent.FARTHEST_SIDE;\n                            return false;\n                        case CONTAIN:\n                        case CLOSEST_CORNER:\n                            size = CSSRadialExtent.CLOSEST_CORNER;\n                            return false;\n                        case FARTHEST_CORNER:\n                            size = CSSRadialExtent.FARTHEST_CORNER;\n                            return false;\n                    }\n                } else if (isLength(token) || isLengthPercentage(token)) {\n                    if (!Array.isArray(size)) {\n                        size = [];\n                    }\n                    size.push(token);\n                    return false;\n                }\n                return acc;\n            }, isColorStop);\n        }\n\n        if (isColorStop) {\n            const colorStop = parseColorStop(context, arg);\n            stops.push(colorStop);\n        }\n    });\n\n    return {size, shape, stops, position, type: CSSImageType.RADIAL_GRADIENT};\n};\n","import {CSSValue, isIdentToken, parseFunctionArgs} from '../../syntax/parser';\nimport {\n    CSSImageType,\n    CSSRadialExtent,\n    CSSRadialGradientImage,\n    CSSRadialShape,\n    CSSRadialSize,\n    UnprocessedGradientColorStop\n} from '../image';\nimport {parseColorStop} from './gradient';\nimport {FIFTY_PERCENT, HUNDRED_PERCENT, isLengthPercentage, LengthPercentage, ZERO_LENGTH} from '../length-percentage';\nimport {isLength} from '../length';\nimport {\n    CIRCLE,\n    CLOSEST_CORNER,\n    CLOSEST_SIDE,\n    CONTAIN,\n    COVER,\n    ELLIPSE,\n    FARTHEST_CORNER,\n    FARTHEST_SIDE\n} from './radial-gradient';\nimport {Context} from '../../../core/context';\n\nexport const prefixRadialGradient = (context: Context, tokens: CSSValue[]): CSSRadialGradientImage => {\n    let shape: CSSRadialShape = CSSRadialShape.CIRCLE;\n    let size: CSSRadialSize = CSSRadialExtent.FARTHEST_CORNER;\n    const stops: UnprocessedGradientColorStop[] = [];\n    const position: LengthPercentage[] = [];\n\n    parseFunctionArgs(tokens).forEach((arg, i) => {\n        let isColorStop = true;\n        if (i === 0) {\n            isColorStop = arg.reduce((acc, token) => {\n                if (isIdentToken(token)) {\n                    switch (token.value) {\n                        case 'center':\n                            position.push(FIFTY_PERCENT);\n                            return false;\n                        case 'top':\n                        case 'left':\n                            position.push(ZERO_LENGTH);\n                            return false;\n                        case 'right':\n                        case 'bottom':\n                            position.push(HUNDRED_PERCENT);\n                            return false;\n                    }\n                } else if (isLengthPercentage(token) || isLength(token)) {\n                    position.push(token);\n                    return false;\n                }\n\n                return acc;\n            }, isColorStop);\n        } else if (i === 1) {\n            isColorStop = arg.reduce((acc, token) => {\n                if (isIdentToken(token)) {\n                    switch (token.value) {\n                        case CIRCLE:\n                            shape = CSSRadialShape.CIRCLE;\n                            return false;\n                        case ELLIPSE:\n                            shape = CSSRadialShape.ELLIPSE;\n                            return false;\n                        case CONTAIN:\n                        case CLOSEST_SIDE:\n                            size = CSSRadialExtent.CLOSEST_SIDE;\n                            return false;\n                        case FARTHEST_SIDE:\n                            size = CSSRadialExtent.FARTHEST_SIDE;\n                            return false;\n                        case CLOSEST_CORNER:\n                            size = CSSRadialExtent.CLOSEST_CORNER;\n                            return false;\n                        case COVER:\n                        case FARTHEST_CORNER:\n                            size = CSSRadialExtent.FARTHEST_CORNER;\n                            return false;\n                    }\n                } else if (isLength(token) || isLengthPercentage(token)) {\n                    if (!Array.isArray(size)) {\n                        size = [];\n                    }\n                    size.push(token);\n                    return false;\n                }\n\n                return acc;\n            }, isColorStop);\n        }\n\n        if (isColorStop) {\n            const colorStop = parseColorStop(context, arg);\n            stops.push(colorStop);\n        }\n    });\n\n    return {size, shape, stops, position, type: CSSImageType.RADIAL_GRADIENT};\n};\n","import {CSSValue} from '../syntax/parser';\nimport {TokenType} from '../syntax/tokenizer';\nimport {Color} from './color';\nimport {linearGradient} from './functions/linear-gradient';\nimport {prefixLinearGradient} from './functions/-prefix-linear-gradient';\nimport {ITypeDescriptor} from '../ITypeDescriptor';\nimport {LengthPercentage} from './length-percentage';\nimport {webkitGradient} from './functions/-webkit-gradient';\nimport {radialGradient} from './functions/radial-gradient';\nimport {prefixRadialGradient} from './functions/-prefix-radial-gradient';\nimport {Context} from '../../core/context';\n\nexport const enum CSSImageType {\n    URL,\n    LINEAR_GRADIENT,\n    RADIAL_GRADIENT\n}\n\nexport const isLinearGradient = (background: ICSSImage): background is CSSLinearGradientImage => {\n    return background.type === CSSImageType.LINEAR_GRADIENT;\n};\n\nexport const isRadialGradient = (background: ICSSImage): background is CSSRadialGradientImage => {\n    return background.type === CSSImageType.RADIAL_GRADIENT;\n};\n\nexport interface UnprocessedGradientColorStop {\n    color: Color;\n    stop: LengthPercentage | null;\n}\n\nexport interface GradientColorStop {\n    color: Color;\n    stop: number;\n}\n\nexport interface ICSSImage {\n    type: CSSImageType;\n}\n\nexport interface CSSURLImage extends ICSSImage {\n    url: string;\n    type: CSSImageType.URL;\n}\n\n// interface ICSSGeneratedImage extends ICSSImage {}\n\nexport type GradientCorner = [LengthPercentage, LengthPercentage];\n\ninterface ICSSGradientImage extends ICSSImage {\n    stops: UnprocessedGradientColorStop[];\n}\n\nexport interface CSSLinearGradientImage extends ICSSGradientImage {\n    angle: number | GradientCorner;\n    type: CSSImageType.LINEAR_GRADIENT;\n}\n\nexport const enum CSSRadialShape {\n    CIRCLE,\n    ELLIPSE\n}\n\nexport const enum CSSRadialExtent {\n    CLOSEST_SIDE,\n    FARTHEST_SIDE,\n    CLOSEST_CORNER,\n    FARTHEST_CORNER\n}\n\nexport type CSSRadialSize = CSSRadialExtent | LengthPercentage[];\n\nexport interface CSSRadialGradientImage extends ICSSGradientImage {\n    type: CSSImageType.RADIAL_GRADIENT;\n    shape: CSSRadialShape;\n    size: CSSRadialSize;\n    position: LengthPercentage[];\n}\n\nexport const image: ITypeDescriptor<ICSSImage> = {\n    name: 'image',\n    parse: (context: Context, value: CSSValue): ICSSImage => {\n        if (value.type === TokenType.URL_TOKEN) {\n            const image: CSSURLImage = {url: value.value, type: CSSImageType.URL};\n            context.cache.addImage(value.value);\n            return image;\n        }\n\n        if (value.type === TokenType.FUNCTION) {\n            const imageFunction = SUPPORTED_IMAGE_FUNCTIONS[value.name];\n            if (typeof imageFunction === 'undefined') {\n                throw new Error(`Attempting to parse an unsupported image function \"${value.name}\"`);\n            }\n            return imageFunction(context, value.values);\n        }\n\n        throw new Error(`Unsupported image type ${value.type}`);\n    }\n};\n\nexport function isSupportedImage(value: CSSValue): boolean {\n    return (\n        !(value.type === TokenType.IDENT_TOKEN && value.value === 'none') &&\n        (value.type !== TokenType.FUNCTION || !!SUPPORTED_IMAGE_FUNCTIONS[value.name])\n    );\n}\n\nconst SUPPORTED_IMAGE_FUNCTIONS: Record<string, (context: Context, args: CSSValue[]) => ICSSImage> = {\n    'linear-gradient': linearGradient,\n    '-moz-linear-gradient': prefixLinearGradient,\n    '-ms-linear-gradient': prefixLinearGradient,\n    '-o-linear-gradient': prefixLinearGradient,\n    '-webkit-linear-gradient': prefixLinearGradient,\n    'radial-gradient': radialGradient,\n    '-moz-radial-gradient': prefixRadialGradient,\n    '-ms-radial-gradient': prefixRadialGradient,\n    '-o-radial-gradient': prefixRadialGradient,\n    '-webkit-radial-gradient': prefixRadialGradient,\n    '-webkit-gradient': webkitGradient\n};\n","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isIdentToken, parseFunctionArgs} from '../syntax/parser';\nimport {isLengthPercentage, LengthPercentage} from '../types/length-percentage';\nimport {StringValueToken} from '../syntax/tokenizer';\nimport {Context} from '../../core/context';\n\nexport enum BACKGROUND_SIZE {\n    AUTO = 'auto',\n    CONTAIN = 'contain',\n    COVER = 'cover'\n}\n\nexport type BackgroundSizeInfo = LengthPercentage | StringValueToken;\nexport type BackgroundSize = BackgroundSizeInfo[][];\n\nexport const backgroundSize: IPropertyListDescriptor<BackgroundSize> = {\n    name: 'background-size',\n    initialValue: '0',\n    prefix: false,\n    type: PropertyDescriptorParsingType.LIST,\n    parse: (_context: Context, tokens: CSSValue[]): BackgroundSize => {\n        return parseFunctionArgs(tokens).map((values) => values.filter(isBackgroundSizeInfoToken));\n    }\n};\n\nconst isBackgroundSizeInfoToken = (value: CSSValue): value is BackgroundSizeInfo =>\n    isIdentToken(value) || isLengthPercentage(value);\n","import {CSSValue, parseFunctionArgs} from '../../syntax/parser';\nimport {TokenType} from '../../syntax/tokenizer';\nimport {isAngle, angle as angleType, parseNamedSide, deg} from '../angle';\nimport {CSSImageType, CSSLinearGradientImage, GradientCorner, UnprocessedGradientColorStop} from '../image';\nimport {parseColorStop} from './gradient';\nimport {Context} from '../../../core/context';\n\nexport const linearGradient = (context: Context, tokens: CSSValue[]): CSSLinearGradientImage => {\n    let angle: number | GradientCorner = deg(180);\n    const stops: UnprocessedGradientColorStop[] = [];\n\n    parseFunctionArgs(tokens).forEach((arg, i) => {\n        if (i === 0) {\n            const firstToken = arg[0];\n            if (firstToken.type === TokenType.IDENT_TOKEN && firstToken.value === 'to') {\n                angle = parseNamedSide(arg);\n                return;\n            } else if (isAngle(firstToken)) {\n                angle = angleType.parse(context, firstToken);\n                return;\n            }\n        }\n        const colorStop = parseColorStop(context, arg);\n        stops.push(colorStop);\n    });\n\n    return {angle, stops, type: CSSImageType.LINEAR_GRADIENT};\n};\n","import {CSSValue, isIdentToken, isNumberToken, nonFunctionArgSeparator, parseFunctionArgs} from '../../syntax/parser';\nimport {\n    CSSImageType,\n    CSSLinearGradientImage,\n    CSSRadialExtent,\n    CSSRadialGradientImage,\n    CSSRadialShape,\n    CSSRadialSize,\n    UnprocessedGradientColorStop\n} from '../image';\nimport {deg} from '../angle';\nimport {TokenType} from '../../syntax/tokenizer';\nimport {color as colorType} from '../color';\nimport {HUNDRED_PERCENT, LengthPercentage, ZERO_LENGTH} from '../length-percentage';\nimport {Context} from '../../../core/context';\n\nexport const webkitGradient = (\n    context: Context,\n    tokens: CSSValue[]\n): CSSLinearGradientImage | CSSRadialGradientImage => {\n    const angle = deg(180);\n    const stops: UnprocessedGradientColorStop[] = [];\n    let type = CSSImageType.LINEAR_GRADIENT;\n    const shape: CSSRadialShape = CSSRadialShape.CIRCLE;\n    const size: CSSRadialSize = CSSRadialExtent.FARTHEST_CORNER;\n    const position: LengthPercentage[] = [];\n    parseFunctionArgs(tokens).forEach((arg, i) => {\n        const firstToken = arg[0];\n        if (i === 0) {\n            if (isIdentToken(firstToken) && firstToken.value === 'linear') {\n                type = CSSImageType.LINEAR_GRADIENT;\n                return;\n            } else if (isIdentToken(firstToken) && firstToken.value === 'radial') {\n                type = CSSImageType.RADIAL_GRADIENT;\n                return;\n            }\n        }\n\n        if (firstToken.type === TokenType.FUNCTION) {\n            if (firstToken.name === 'from') {\n                const color = colorType.parse(context, firstToken.values[0]);\n                stops.push({stop: ZERO_LENGTH, color});\n            } else if (firstToken.name === 'to') {\n                const color = colorType.parse(context, firstToken.values[0]);\n                stops.push({stop: HUNDRED_PERCENT, color});\n            } else if (firstToken.name === 'color-stop') {\n                const values = firstToken.values.filter(nonFunctionArgSeparator);\n                if (values.length === 2) {\n                    const color = colorType.parse(context, values[1]);\n                    const stop = values[0];\n                    if (isNumberToken(stop)) {\n                        stops.push({\n                            stop: {type: TokenType.PERCENTAGE_TOKEN, number: stop.number * 100, flags: stop.flags},\n                            color\n                        });\n                    }\n                }\n            }\n        }\n    });\n\n    return type === CSSImageType.LINEAR_GRADIENT\n        ? {\n              angle: (angle + deg(180)) % deg(360),\n              stops,\n              type\n          }\n        : {size, shape, stops, position, type};\n};\n","import {TokenType} from '../syntax/tokenizer';\nimport {ICSSImage, image, isSupportedImage} from '../types/image';\nimport {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, nonFunctionArgSeparator} from '../syntax/parser';\nimport {Context} from '../../core/context';\n\nexport const backgroundImage: IPropertyListDescriptor<ICSSImage[]> = {\n    name: 'background-image',\n    initialValue: 'none',\n    type: PropertyDescriptorParsingType.LIST,\n    prefix: false,\n    parse: (context: Context, tokens: CSSValue[]) => {\n        if (tokens.length === 0) {\n            return [];\n        }\n\n        const first = tokens[0];\n\n        if (first.type === TokenType.IDENT_TOKEN && first.value === 'none') {\n            return [];\n        }\n\n        return tokens\n            .filter((value) => nonFunctionArgSeparator(value) && isSupportedImage(value))\n            .map((value) => image.parse(context, value));\n    }\n};\n","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isIdentToken} from '../syntax/parser';\nimport {Context} from '../../core/context';\n\nexport const enum BACKGROUND_ORIGIN {\n    BORDER_BOX = 0,\n    PADDING_BOX = 1,\n    CONTENT_BOX = 2\n}\n\nexport type BackgroundOrigin = BACKGROUND_ORIGIN[];\n\nexport const backgroundOrigin: IPropertyListDescriptor<BackgroundOrigin> = {\n    name: 'background-origin',\n    initialValue: 'border-box',\n    prefix: false,\n    type: PropertyDescriptorParsingType.LIST,\n    parse: (_context: Context, tokens: CSSValue[]): BackgroundOrigin => {\n        return tokens.map((token) => {\n            if (isIdentToken(token)) {\n                switch (token.value) {\n                    case 'padding-box':\n                        return BACKGROUND_ORIGIN.PADDING_BOX;\n                    case 'content-box':\n                        return BACKGROUND_ORIGIN.CONTENT_BOX;\n                }\n            }\n            return BACKGROUND_ORIGIN.BORDER_BOX;\n        });\n    }\n};\n","import {PropertyDescriptorParsingType, IPropertyListDescriptor} from '../IPropertyDescriptor';\nimport {CSSValue, parseFunctionArgs} from '../syntax/parser';\nimport {isLengthPercentage, LengthPercentageTuple, parseLengthPercentageTuple} from '../types/length-percentage';\nimport {Context} from '../../core/context';\nexport type BackgroundPosition = BackgroundImagePosition[];\n\nexport type BackgroundImagePosition = LengthPercentageTuple;\n\nexport const backgroundPosition: IPropertyListDescriptor<BackgroundPosition> = {\n    name: 'background-position',\n    initialValue: '0% 0%',\n    type: PropertyDescriptorParsingType.LIST,\n    prefix: false,\n    parse: (_context: Context, tokens: CSSValue[]): BackgroundPosition => {\n        return parseFunctionArgs(tokens)\n            .map((values: CSSValue[]) => values.filter(isLengthPercentage))\n            .map(parseLengthPercentageTuple);\n    }\n};\n","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isIdentToken, parseFunctionArgs} from '../syntax/parser';\nimport {Context} from '../../core/context';\nexport type BackgroundRepeat = BACKGROUND_REPEAT[];\n\nexport const enum BACKGROUND_REPEAT {\n    REPEAT = 0,\n    NO_REPEAT = 1,\n    REPEAT_X = 2,\n    REPEAT_Y = 3\n}\n\nexport const backgroundRepeat: IPropertyListDescriptor<BackgroundRepeat> = {\n    name: 'background-repeat',\n    initialValue: 'repeat',\n    prefix: false,\n    type: PropertyDescriptorParsingType.LIST,\n    parse: (_context: Context, tokens: CSSValue[]): BackgroundRepeat => {\n        return parseFunctionArgs(tokens)\n            .map((values) =>\n                values\n                    .filter(isIdentToken)\n                    .map((token) => token.value)\n                    .join(' ')\n            )\n            .map(parseBackgroundRepeat);\n    }\n};\n\nconst parseBackgroundRepeat = (value: string): BACKGROUND_REPEAT => {\n    switch (value) {\n        case 'no-repeat':\n            return BACKGROUND_REPEAT.NO_REPEAT;\n        case 'repeat-x':\n        case 'repeat no-repeat':\n            return BACKGROUND_REPEAT.REPEAT_X;\n        case 'repeat-y':\n        case 'no-repeat repeat':\n            return BACKGROUND_REPEAT.REPEAT_Y;\n        case 'repeat':\n        default:\n            return BACKGROUND_REPEAT.REPEAT;\n    }\n};\n","import {IPropertyIdentValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {Context} from '../../core/context';\nexport enum LINE_BREAK {\n    NORMAL = 'normal',\n    STRICT = 'strict'\n}\n\nexport const lineBreak: IPropertyIdentValueDescriptor<LINE_BREAK> = {\n    name: 'line-break',\n    initialValue: 'normal',\n    prefix: false,\n    type: PropertyDescriptorParsingType.IDENT_VALUE,\n    parse: (_context: Context, lineBreak: string): LINE_BREAK => {\n        switch (lineBreak) {\n            case 'strict':\n                return LINE_BREAK.STRICT;\n            case 'normal':\n            default:\n                return LINE_BREAK.NORMAL;\n        }\n    }\n};\n","import {IPropertyTypeValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nconst borderColorForSide = (side: string): IPropertyTypeValueDescriptor => ({\n    name: `border-${side}-color`,\n    initialValue: 'transparent',\n    prefix: false,\n    type: PropertyDescriptorParsingType.TYPE_VALUE,\n    format: 'color'\n});\n\nexport const borderTopColor: IPropertyTypeValueDescriptor = borderColorForSide('top');\nexport const borderRightColor: IPropertyTypeValueDescriptor = borderColorForSide('right');\nexport const borderBottomColor: IPropertyTypeValueDescriptor = borderColorForSide('bottom');\nexport const borderLeftColor: IPropertyTypeValueDescriptor = borderColorForSide('left');\n","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue} from '../syntax/parser';\nimport {isLengthPercentage, LengthPercentageTuple, parseLengthPercentageTuple} from '../types/length-percentage';\nimport {Context} from '../../core/context';\nexport type BorderRadius = LengthPercentageTuple;\n\nconst borderRadiusForSide = (side: string): IPropertyListDescriptor<BorderRadius> => ({\n    name: `border-radius-${side}`,\n    initialValue: '0 0',\n    prefix: false,\n    type: PropertyDescriptorParsingType.LIST,\n    parse: (_context: Context, tokens: CSSValue[]): BorderRadius =>\n        parseLengthPercentageTuple(tokens.filter(isLengthPercentage))\n});\n\nexport const borderTopLeftRadius: IPropertyListDescriptor<BorderRadius> = borderRadiusForSide('top-left');\nexport const borderTopRightRadius: IPropertyListDescriptor<BorderRadius> = borderRadiusForSide('top-right');\nexport const borderBottomRightRadius: IPropertyListDescriptor<BorderRadius> = borderRadiusForSide('bottom-right');\nexport const borderBottomLeftRadius: IPropertyListDescriptor<BorderRadius> = borderRadiusForSide('bottom-left');\n","import {IPropertyIdentValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {Context} from '../../core/context';\nexport const enum BORDER_STYLE {\n    NONE = 0,\n    SOLID = 1,\n    DASHED = 2,\n    DOTTED = 3,\n    DOUBLE = 4\n}\n\nconst borderStyleForSide = (side: string): IPropertyIdentValueDescriptor<BORDER_STYLE> => ({\n    name: `border-${side}-style`,\n    initialValue: 'solid',\n    prefix: false,\n    type: PropertyDescriptorParsingType.IDENT_VALUE,\n    parse: (_context: Context, style: string): BORDER_STYLE => {\n        switch (style) {\n            case 'none':\n                return BORDER_STYLE.NONE;\n            case 'dashed':\n                return BORDER_STYLE.DASHED;\n            case 'dotted':\n                return BORDER_STYLE.DOTTED;\n            case 'double':\n                return BORDER_STYLE.DOUBLE;\n        }\n        return BORDER_STYLE.SOLID;\n    }\n});\n\nexport const borderTopStyle: IPropertyIdentValueDescriptor<BORDER_STYLE> = borderStyleForSide('top');\nexport const borderRightStyle: IPropertyIdentValueDescriptor<BORDER_STYLE> = borderStyleForSide('right');\nexport const borderBottomStyle: IPropertyIdentValueDescriptor<BORDER_STYLE> = borderStyleForSide('bottom');\nexport const borderLeftStyle: IPropertyIdentValueDescriptor<BORDER_STYLE> = borderStyleForSide('left');\n","import {IPropertyValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isDimensionToken} from '../syntax/parser';\nimport {Context} from '../../core/context';\nconst borderWidthForSide = (side: string): IPropertyValueDescriptor<number> => ({\n    name: `border-${side}-width`,\n    initialValue: '0',\n    type: PropertyDescriptorParsingType.VALUE,\n    prefix: false,\n    parse: (_context: Context, token: CSSValue): number => {\n        if (isDimensionToken(token)) {\n            return token.number;\n        }\n        return 0;\n    }\n});\n\nexport const borderTopWidth: IPropertyValueDescriptor<number> = borderWidthForSide('top');\nexport const borderRightWidth: IPropertyValueDescriptor<number> = borderWidthForSide('right');\nexport const borderBottomWidth: IPropertyValueDescriptor<number> = borderWidthForSide('bottom');\nexport const borderLeftWidth: IPropertyValueDescriptor<number> = borderWidthForSide('left');\n","import {IPropertyTypeValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\n\nexport const color: IPropertyTypeValueDescriptor = {\n    name: `color`,\n    initialValue: 'transparent',\n    prefix: false,\n    type: PropertyDescriptorParsingType.TYPE_VALUE,\n    format: 'color'\n};\n","import {IPropertyIdentValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {Context} from '../../core/context';\n\nexport const enum DIRECTION {\n    LTR = 0,\n    RTL = 1\n}\n\nexport const direction: IPropertyIdentValueDescriptor<DIRECTION> = {\n    name: 'direction',\n    initialValue: 'ltr',\n    prefix: false,\n    type: PropertyDescriptorParsingType.IDENT_VALUE,\n    parse: (_context: Context, direction: string) => {\n        switch (direction) {\n            case 'rtl':\n                return DIRECTION.RTL;\n            case 'ltr':\n            default:\n                return DIRECTION.LTR;\n        }\n    }\n};\n","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isIdentToken} from '../syntax/parser';\nimport {Context} from '../../core/context';\nexport const enum DISPLAY {\n    NONE = 0,\n    BLOCK = 1 << 1,\n    INLINE = 1 << 2,\n    RUN_IN = 1 << 3,\n    FLOW = 1 << 4,\n    FLOW_ROOT = 1 << 5,\n    TABLE = 1 << 6,\n    FLEX = 1 << 7,\n    GRID = 1 << 8,\n    RUBY = 1 << 9,\n    SUBGRID = 1 << 10,\n    LIST_ITEM = 1 << 11,\n    TABLE_ROW_GROUP = 1 << 12,\n    TABLE_HEADER_GROUP = 1 << 13,\n    TABLE_FOOTER_GROUP = 1 << 14,\n    TABLE_ROW = 1 << 15,\n    TABLE_CELL = 1 << 16,\n    TABLE_COLUMN_GROUP = 1 << 17,\n    TABLE_COLUMN = 1 << 18,\n    TABLE_CAPTION = 1 << 19,\n    RUBY_BASE = 1 << 20,\n    RUBY_TEXT = 1 << 21,\n    RUBY_BASE_CONTAINER = 1 << 22,\n    RUBY_TEXT_CONTAINER = 1 << 23,\n    CONTENTS = 1 << 24,\n    INLINE_BLOCK = 1 << 25,\n    INLINE_LIST_ITEM = 1 << 26,\n    INLINE_TABLE = 1 << 27,\n    INLINE_FLEX = 1 << 28,\n    INLINE_GRID = 1 << 29\n}\n\nexport type Display = number;\n\nexport const display: IPropertyListDescriptor<Display> = {\n    name: 'display',\n    initialValue: 'inline-block',\n    prefix: false,\n    type: PropertyDescriptorParsingType.LIST,\n    parse: (_context: Context, tokens: CSSValue[]): Display => {\n        return tokens.filter(isIdentToken).reduce((bit, token) => {\n            return bit | parseDisplayValue(token.value);\n        }, DISPLAY.NONE);\n    }\n};\n\nconst parseDisplayValue = (display: string): Display => {\n    switch (display) {\n        case 'block':\n        case '-webkit-box':\n            return DISPLAY.BLOCK;\n        case 'inline':\n            return DISPLAY.INLINE;\n        case 'run-in':\n            return DISPLAY.RUN_IN;\n        case 'flow':\n            return DISPLAY.FLOW;\n        case 'flow-root':\n            return DISPLAY.FLOW_ROOT;\n        case 'table':\n            return DISPLAY.TABLE;\n        case 'flex':\n        case '-webkit-flex':\n            return DISPLAY.FLEX;\n        case 'grid':\n        case '-ms-grid':\n            return DISPLAY.GRID;\n        case 'ruby':\n            return DISPLAY.RUBY;\n        case 'subgrid':\n            return DISPLAY.SUBGRID;\n        case 'list-item':\n            return DISPLAY.LIST_ITEM;\n        case 'table-row-group':\n            return DISPLAY.TABLE_ROW_GROUP;\n        case 'table-header-group':\n            return DISPLAY.TABLE_HEADER_GROUP;\n        case 'table-footer-group':\n            return DISPLAY.TABLE_FOOTER_GROUP;\n        case 'table-row':\n            return DISPLAY.TABLE_ROW;\n        case 'table-cell':\n            return DISPLAY.TABLE_CELL;\n        case 'table-column-group':\n            return DISPLAY.TABLE_COLUMN_GROUP;\n        case 'table-column':\n            return DISPLAY.TABLE_COLUMN;\n        case 'table-caption':\n            return DISPLAY.TABLE_CAPTION;\n        case 'ruby-base':\n            return DISPLAY.RUBY_BASE;\n        case 'ruby-text':\n            return DISPLAY.RUBY_TEXT;\n        case 'ruby-base-container':\n            return DISPLAY.RUBY_BASE_CONTAINER;\n        case 'ruby-text-container':\n            return DISPLAY.RUBY_TEXT_CONTAINER;\n        case 'contents':\n            return DISPLAY.CONTENTS;\n        case 'inline-block':\n            return DISPLAY.INLINE_BLOCK;\n        case 'inline-list-item':\n            return DISPLAY.INLINE_LIST_ITEM;\n        case 'inline-table':\n            return DISPLAY.INLINE_TABLE;\n        case 'inline-flex':\n            return DISPLAY.INLINE_FLEX;\n        case 'inline-grid':\n            return DISPLAY.INLINE_GRID;\n    }\n\n    return DISPLAY.NONE;\n};\n","import {IPropertyIdentValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {Context} from '../../core/context';\nexport const enum FLOAT {\n    NONE = 0,\n    LEFT = 1,\n    RIGHT = 2,\n    INLINE_START = 3,\n    INLINE_END = 4\n}\n\nexport const float: IPropertyIdentValueDescriptor<FLOAT> = {\n    name: 'float',\n    initialValue: 'none',\n    prefix: false,\n    type: PropertyDescriptorParsingType.IDENT_VALUE,\n    parse: (_context: Context, float: string) => {\n        switch (float) {\n            case 'left':\n                return FLOAT.LEFT;\n            case 'right':\n                return FLOAT.RIGHT;\n            case 'inline-start':\n                return FLOAT.INLINE_START;\n            case 'inline-end':\n                return FLOAT.INLINE_END;\n        }\n        return FLOAT.NONE;\n    }\n};\n","import {IPropertyValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue} from '../syntax/parser';\nimport {TokenType} from '../syntax/tokenizer';\nimport {Context} from '../../core/context';\nexport const letterSpacing: IPropertyValueDescriptor<number> = {\n    name: 'letter-spacing',\n    initialValue: '0',\n    prefix: false,\n    type: PropertyDescriptorParsingType.VALUE,\n    parse: (_context: Context, token: CSSValue) => {\n        if (token.type === TokenType.IDENT_TOKEN && token.value === 'normal') {\n            return 0;\n        }\n\n        if (token.type === TokenType.NUMBER_TOKEN) {\n            return token.number;\n        }\n\n        if (token.type === TokenType.DIMENSION_TOKEN) {\n            return token.number;\n        }\n\n        return 0;\n    }\n};\n","import {IPropertyIdentValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {Context} from '../../core/context';\nexport enum WORD_BREAK {\n    NORMAL = 'normal',\n    BREAK_ALL = 'break-all',\n    KEEP_ALL = 'keep-all'\n}\n\nexport const wordBreak: IPropertyIdentValueDescriptor<WORD_BREAK> = {\n    name: 'word-break',\n    initialValue: 'normal',\n    prefix: false,\n    type: PropertyDescriptorParsingType.IDENT_VALUE,\n    parse: (_context: Context, wordBreak: string): WORD_BREAK => {\n        switch (wordBreak) {\n            case 'break-all':\n                return WORD_BREAK.BREAK_ALL;\n            case 'keep-all':\n                return WORD_BREAK.KEEP_ALL;\n            case 'normal':\n            default:\n                return WORD_BREAK.NORMAL;\n        }\n    }\n};\n","import {IPropertyTokenValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isIdentToken} from '../syntax/parser';\nimport {TokenType} from '../syntax/tokenizer';\nimport {getAbsoluteValue, isLengthPercentage} from '../types/length-percentage';\nexport const lineHeight: IPropertyTokenValueDescriptor = {\n    name: 'line-height',\n    initialValue: 'normal',\n    prefix: false,\n    type: PropertyDescriptorParsingType.TOKEN_VALUE\n};\n\nexport const computeLineHeight = (token: CSSValue, fontSize: number): number => {\n    if (isIdentToken(token) && token.value === 'normal') {\n        return 1.2 * fontSize;\n    } else if (token.type === TokenType.NUMBER_TOKEN) {\n        return fontSize * token.number;\n    } else if (isLengthPercentage(token)) {\n        return getAbsoluteValue(token, fontSize);\n    }\n\n    return fontSize;\n};\n","import {TokenType} from '../syntax/tokenizer';\nimport {ICSSImage, image} from '../types/image';\nimport {IPropertyValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue} from '../syntax/parser';\nimport {Context} from '../../core/context';\n\nexport const listStyleImage: IPropertyValueDescriptor<ICSSImage | null> = {\n    name: 'list-style-image',\n    initialValue: 'none',\n    type: PropertyDescriptorParsingType.VALUE,\n    prefix: false,\n    parse: (context: Context, token: CSSValue) => {\n        if (token.type === TokenType.IDENT_TOKEN && token.value === 'none') {\n            return null;\n        }\n\n        return image.parse(context, token);\n    }\n};\n","import {IPropertyIdentValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {Context} from '../../core/context';\nexport const enum LIST_STYLE_POSITION {\n    INSIDE = 0,\n    OUTSIDE = 1\n}\n\nexport const listStylePosition: IPropertyIdentValueDescriptor<LIST_STYLE_POSITION> = {\n    name: 'list-style-position',\n    initialValue: 'outside',\n    prefix: false,\n    type: PropertyDescriptorParsingType.IDENT_VALUE,\n    parse: (_context: Context, position: string) => {\n        switch (position) {\n            case 'inside':\n                return LIST_STYLE_POSITION.INSIDE;\n            case 'outside':\n            default:\n                return LIST_STYLE_POSITION.OUTSIDE;\n        }\n    }\n};\n","import {IPropertyIdentValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {Context} from '../../core/context';\nexport const enum LIST_STYLE_TYPE {\n    NONE = -1,\n    DISC = 0,\n    CIRCLE = 1,\n    SQUARE = 2,\n    DECIMAL = 3,\n    CJK_DECIMAL = 4,\n    DECIMAL_LEADING_ZERO = 5,\n    LOWER_ROMAN = 6,\n    UPPER_ROMAN = 7,\n    LOWER_GREEK = 8,\n    LOWER_ALPHA = 9,\n    UPPER_ALPHA = 10,\n    ARABIC_INDIC = 11,\n    ARMENIAN = 12,\n    BENGALI = 13,\n    CAMBODIAN = 14,\n    CJK_EARTHLY_BRANCH = 15,\n    CJK_HEAVENLY_STEM = 16,\n    CJK_IDEOGRAPHIC = 17,\n    DEVANAGARI = 18,\n    ETHIOPIC_NUMERIC = 19,\n    GEORGIAN = 20,\n    GUJARATI = 21,\n    GURMUKHI = 22,\n    HEBREW = 22,\n    HIRAGANA = 23,\n    HIRAGANA_IROHA = 24,\n    JAPANESE_FORMAL = 25,\n    JAPANESE_INFORMAL = 26,\n    KANNADA = 27,\n    KATAKANA = 28,\n    KATAKANA_IROHA = 29,\n    KHMER = 30,\n    KOREAN_HANGUL_FORMAL = 31,\n    KOREAN_HANJA_FORMAL = 32,\n    KOREAN_HANJA_INFORMAL = 33,\n    LAO = 34,\n    LOWER_ARMENIAN = 35,\n    MALAYALAM = 36,\n    MONGOLIAN = 37,\n    MYANMAR = 38,\n    ORIYA = 39,\n    PERSIAN = 40,\n    SIMP_CHINESE_FORMAL = 41,\n    SIMP_CHINESE_INFORMAL = 42,\n    TAMIL = 43,\n    TELUGU = 44,\n    THAI = 45,\n    TIBETAN = 46,\n    TRAD_CHINESE_FORMAL = 47,\n    TRAD_CHINESE_INFORMAL = 48,\n    UPPER_ARMENIAN = 49,\n    DISCLOSURE_OPEN = 50,\n    DISCLOSURE_CLOSED = 51\n}\n\nexport const listStyleType: IPropertyIdentValueDescriptor<LIST_STYLE_TYPE> = {\n    name: 'list-style-type',\n    initialValue: 'none',\n    prefix: false,\n    type: PropertyDescriptorParsingType.IDENT_VALUE,\n    parse: (_context: Context, type: string) => {\n        switch (type) {\n            case 'disc':\n                return LIST_STYLE_TYPE.DISC;\n            case 'circle':\n                return LIST_STYLE_TYPE.CIRCLE;\n            case 'square':\n                return LIST_STYLE_TYPE.SQUARE;\n            case 'decimal':\n                return LIST_STYLE_TYPE.DECIMAL;\n            case 'cjk-decimal':\n                return LIST_STYLE_TYPE.CJK_DECIMAL;\n            case 'decimal-leading-zero':\n                return LIST_STYLE_TYPE.DECIMAL_LEADING_ZERO;\n            case 'lower-roman':\n                return LIST_STYLE_TYPE.LOWER_ROMAN;\n            case 'upper-roman':\n                return LIST_STYLE_TYPE.UPPER_ROMAN;\n            case 'lower-greek':\n                return LIST_STYLE_TYPE.LOWER_GREEK;\n            case 'lower-alpha':\n                return LIST_STYLE_TYPE.LOWER_ALPHA;\n            case 'upper-alpha':\n                return LIST_STYLE_TYPE.UPPER_ALPHA;\n            case 'arabic-indic':\n                return LIST_STYLE_TYPE.ARABIC_INDIC;\n            case 'armenian':\n                return LIST_STYLE_TYPE.ARMENIAN;\n            case 'bengali':\n                return LIST_STYLE_TYPE.BENGALI;\n            case 'cambodian':\n                return LIST_STYLE_TYPE.CAMBODIAN;\n            case 'cjk-earthly-branch':\n                return LIST_STYLE_TYPE.CJK_EARTHLY_BRANCH;\n            case 'cjk-heavenly-stem':\n                return LIST_STYLE_TYPE.CJK_HEAVENLY_STEM;\n            case 'cjk-ideographic':\n                return LIST_STYLE_TYPE.CJK_IDEOGRAPHIC;\n            case 'devanagari':\n                return LIST_STYLE_TYPE.DEVANAGARI;\n            case 'ethiopic-numeric':\n                return LIST_STYLE_TYPE.ETHIOPIC_NUMERIC;\n            case 'georgian':\n                return LIST_STYLE_TYPE.GEORGIAN;\n            case 'gujarati':\n                return LIST_STYLE_TYPE.GUJARATI;\n            case 'gurmukhi':\n                return LIST_STYLE_TYPE.GURMUKHI;\n            case 'hebrew':\n                return LIST_STYLE_TYPE.HEBREW;\n            case 'hiragana':\n                return LIST_STYLE_TYPE.HIRAGANA;\n            case 'hiragana-iroha':\n                return LIST_STYLE_TYPE.HIRAGANA_IROHA;\n            case 'japanese-formal':\n                return LIST_STYLE_TYPE.JAPANESE_FORMAL;\n            case 'japanese-informal':\n                return LIST_STYLE_TYPE.JAPANESE_INFORMAL;\n            case 'kannada':\n                return LIST_STYLE_TYPE.KANNADA;\n            case 'katakana':\n                return LIST_STYLE_TYPE.KATAKANA;\n            case 'katakana-iroha':\n                return LIST_STYLE_TYPE.KATAKANA_IROHA;\n            case 'khmer':\n                return LIST_STYLE_TYPE.KHMER;\n            case 'korean-hangul-formal':\n                return LIST_STYLE_TYPE.KOREAN_HANGUL_FORMAL;\n            case 'korean-hanja-formal':\n                return LIST_STYLE_TYPE.KOREAN_HANJA_FORMAL;\n            case 'korean-hanja-informal':\n                return LIST_STYLE_TYPE.KOREAN_HANJA_INFORMAL;\n            case 'lao':\n                return LIST_STYLE_TYPE.LAO;\n            case 'lower-armenian':\n                return LIST_STYLE_TYPE.LOWER_ARMENIAN;\n            case 'malayalam':\n                return LIST_STYLE_TYPE.MALAYALAM;\n            case 'mongolian':\n                return LIST_STYLE_TYPE.MONGOLIAN;\n            case 'myanmar':\n                return LIST_STYLE_TYPE.MYANMAR;\n            case 'oriya':\n                return LIST_STYLE_TYPE.ORIYA;\n            case 'persian':\n                return LIST_STYLE_TYPE.PERSIAN;\n            case 'simp-chinese-formal':\n                return LIST_STYLE_TYPE.SIMP_CHINESE_FORMAL;\n            case 'simp-chinese-informal':\n                return LIST_STYLE_TYPE.SIMP_CHINESE_INFORMAL;\n            case 'tamil':\n                return LIST_STYLE_TYPE.TAMIL;\n            case 'telugu':\n                return LIST_STYLE_TYPE.TELUGU;\n            case 'thai':\n                return LIST_STYLE_TYPE.THAI;\n            case 'tibetan':\n                return LIST_STYLE_TYPE.TIBETAN;\n            case 'trad-chinese-formal':\n                return LIST_STYLE_TYPE.TRAD_CHINESE_FORMAL;\n            case 'trad-chinese-informal':\n                return LIST_STYLE_TYPE.TRAD_CHINESE_INFORMAL;\n            case 'upper-armenian':\n                return LIST_STYLE_TYPE.UPPER_ARMENIAN;\n            case 'disclosure-open':\n                return LIST_STYLE_TYPE.DISCLOSURE_OPEN;\n            case 'disclosure-closed':\n                return LIST_STYLE_TYPE.DISCLOSURE_CLOSED;\n            case 'none':\n            default:\n                return LIST_STYLE_TYPE.NONE;\n        }\n    }\n};\n","import {IPropertyTokenValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\n\nconst marginForSide = (side: string): IPropertyTokenValueDescriptor => ({\n    name: `margin-${side}`,\n    initialValue: '0',\n    prefix: false,\n    type: PropertyDescriptorParsingType.TOKEN_VALUE\n});\n\nexport const marginTop: IPropertyTokenValueDescriptor = marginForSide('top');\nexport const marginRight: IPropertyTokenValueDescriptor = marginForSide('right');\nexport const marginBottom: IPropertyTokenValueDescriptor = marginForSide('bottom');\nexport const marginLeft: IPropertyTokenValueDescriptor = marginForSide('left');\n","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isIdentToken} from '../syntax/parser';\nimport {Context} from '../../core/context';\nexport const enum OVERFLOW {\n    VISIBLE = 0,\n    HIDDEN = 1,\n    SCROLL = 2,\n    CLIP = 3,\n    AUTO = 4\n}\n\nexport const overflow: IPropertyListDescriptor<OVERFLOW[]> = {\n    name: 'overflow',\n    initialValue: 'visible',\n    prefix: false,\n    type: PropertyDescriptorParsingType.LIST,\n    parse: (_context: Context, tokens: CSSValue[]): OVERFLOW[] => {\n        return tokens.filter(isIdentToken).map((overflow) => {\n            switch (overflow.value) {\n                case 'hidden':\n                    return OVERFLOW.HIDDEN;\n                case 'scroll':\n                    return OVERFLOW.SCROLL;\n                case 'clip':\n                    return OVERFLOW.CLIP;\n                case 'auto':\n                    return OVERFLOW.AUTO;\n                case 'visible':\n                default:\n                    return OVERFLOW.VISIBLE;\n            }\n        });\n    }\n};\n","import {IPropertyIdentValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {Context} from '../../core/context';\nexport const enum OVERFLOW_WRAP {\n    NORMAL = 'normal',\n    BREAK_WORD = 'break-word'\n}\n\nexport const overflowWrap: IPropertyIdentValueDescriptor<OVERFLOW_WRAP> = {\n    name: 'overflow-wrap',\n    initialValue: 'normal',\n    prefix: false,\n    type: PropertyDescriptorParsingType.IDENT_VALUE,\n    parse: (_context: Context, overflow: string) => {\n        switch (overflow) {\n            case 'break-word':\n                return OVERFLOW_WRAP.BREAK_WORD;\n            case 'normal':\n            default:\n                return OVERFLOW_WRAP.NORMAL;\n        }\n    }\n};\n","import {IPropertyTypeValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\n\nconst paddingForSide = (side: string): IPropertyTypeValueDescriptor => ({\n    name: `padding-${side}`,\n    initialValue: '0',\n    prefix: false,\n    type: PropertyDescriptorParsingType.TYPE_VALUE,\n    format: 'length-percentage'\n});\n\nexport const paddingTop: IPropertyTypeValueDescriptor = paddingForSide('top');\nexport const paddingRight: IPropertyTypeValueDescriptor = paddingForSide('right');\nexport const paddingBottom: IPropertyTypeValueDescriptor = paddingForSide('bottom');\nexport const paddingLeft: IPropertyTypeValueDescriptor = paddingForSide('left');\n","import {IPropertyIdentValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {Context} from '../../core/context';\nexport const enum TEXT_ALIGN {\n    LEFT = 0,\n    CENTER = 1,\n    RIGHT = 2\n}\n\nexport const textAlign: IPropertyIdentValueDescriptor<TEXT_ALIGN> = {\n    name: 'text-align',\n    initialValue: 'left',\n    prefix: false,\n    type: PropertyDescriptorParsingType.IDENT_VALUE,\n    parse: (_context: Context, textAlign: string) => {\n        switch (textAlign) {\n            case 'right':\n                return TEXT_ALIGN.RIGHT;\n            case 'center':\n            case 'justify':\n                return TEXT_ALIGN.CENTER;\n            case 'left':\n            default:\n                return TEXT_ALIGN.LEFT;\n        }\n    }\n};\n","import {IPropertyIdentValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {Context} from '../../core/context';\nexport const enum POSITION {\n    STATIC = 0,\n    RELATIVE = 1,\n    ABSOLUTE = 2,\n    FIXED = 3,\n    STICKY = 4\n}\n\nexport const position: IPropertyIdentValueDescriptor<POSITION> = {\n    name: 'position',\n    initialValue: 'static',\n    prefix: false,\n    type: PropertyDescriptorParsingType.IDENT_VALUE,\n    parse: (_context: Context, position: string) => {\n        switch (position) {\n            case 'relative':\n                return POSITION.RELATIVE;\n            case 'absolute':\n                return POSITION.ABSOLUTE;\n            case 'fixed':\n                return POSITION.FIXED;\n            case 'sticky':\n                return POSITION.STICKY;\n        }\n\n        return POSITION.STATIC;\n    }\n};\n","import {PropertyDescriptorParsingType, IPropertyListDescriptor} from '../IPropertyDescriptor';\nimport {CSSValue, isIdentWithValue, parseFunctionArgs} from '../syntax/parser';\nimport {ZERO_LENGTH} from '../types/length-percentage';\nimport {color, Color, COLORS} from '../types/color';\nimport {isLength, Length} from '../types/length';\nimport {Context} from '../../core/context';\n\nexport type TextShadow = TextShadowItem[];\ninterface TextShadowItem {\n    color: Color;\n    offsetX: Length;\n    offsetY: Length;\n    blur: Length;\n}\n\nexport const textShadow: IPropertyListDescriptor<TextShadow> = {\n    name: 'text-shadow',\n    initialValue: 'none',\n    type: PropertyDescriptorParsingType.LIST,\n    prefix: false,\n    parse: (context: Context, tokens: CSSValue[]): TextShadow => {\n        if (tokens.length === 1 && isIdentWithValue(tokens[0], 'none')) {\n            return [];\n        }\n\n        return parseFunctionArgs(tokens).map((values: CSSValue[]) => {\n            const shadow: TextShadowItem = {\n                color: COLORS.TRANSPARENT,\n                offsetX: ZERO_LENGTH,\n                offsetY: ZERO_LENGTH,\n                blur: ZERO_LENGTH\n            };\n            let c = 0;\n            for (let i = 0; i < values.length; i++) {\n                const token = values[i];\n                if (isLength(token)) {\n                    if (c === 0) {\n                        shadow.offsetX = token;\n                    } else if (c === 1) {\n                        shadow.offsetY = token;\n                    } else {\n                        shadow.blur = token;\n                    }\n                    c++;\n                } else {\n                    shadow.color = color.parse(context, token);\n                }\n            }\n            return shadow;\n        });\n    }\n};\n","import {IPropertyIdentValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {Context} from '../../core/context';\nexport const enum TEXT_TRANSFORM {\n    NONE = 0,\n    LOWERCASE = 1,\n    UPPERCASE = 2,\n    CAPITALIZE = 3\n}\n\nexport const textTransform: IPropertyIdentValueDescriptor<TEXT_TRANSFORM> = {\n    name: 'text-transform',\n    initialValue: 'none',\n    prefix: false,\n    type: PropertyDescriptorParsingType.IDENT_VALUE,\n    parse: (_context: Context, textTransform: string) => {\n        switch (textTransform) {\n            case 'uppercase':\n                return TEXT_TRANSFORM.UPPERCASE;\n            case 'lowercase':\n                return TEXT_TRANSFORM.LOWERCASE;\n            case 'capitalize':\n                return TEXT_TRANSFORM.CAPITALIZE;\n        }\n\n        return TEXT_TRANSFORM.NONE;\n    }\n};\n","import {IPropertyValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue} from '../syntax/parser';\nimport {NumberValueToken, TokenType} from '../syntax/tokenizer';\nimport {Context} from '../../core/context';\nexport type Matrix = [number, number, number, number, number, number];\nexport type Transform = Matrix | null;\n\nexport const transform: IPropertyValueDescriptor<Transform> = {\n    name: 'transform',\n    initialValue: 'none',\n    prefix: true,\n    type: PropertyDescriptorParsingType.VALUE,\n    parse: (_context: Context, token: CSSValue) => {\n        if (token.type === TokenType.IDENT_TOKEN && token.value === 'none') {\n            return null;\n        }\n\n        if (token.type === TokenType.FUNCTION) {\n            const transformFunction = SUPPORTED_TRANSFORM_FUNCTIONS[token.name];\n            if (typeof transformFunction === 'undefined') {\n                throw new Error(`Attempting to parse an unsupported transform function \"${token.name}\"`);\n            }\n            return transformFunction(token.values);\n        }\n\n        return null;\n    }\n};\n\nconst matrix = (args: CSSValue[]): Transform => {\n    const values = args.filter((arg) => arg.type === TokenType.NUMBER_TOKEN).map((arg: NumberValueToken) => arg.number);\n\n    return values.length === 6 ? (values as Matrix) : null;\n};\n\n// doesn't support 3D transforms at the moment\nconst matrix3d = (args: CSSValue[]): Transform => {\n    const values = args.filter((arg) => arg.type === TokenType.NUMBER_TOKEN).map((arg: NumberValueToken) => arg.number);\n\n    const [a1, b1, {}, {}, a2, b2, {}, {}, {}, {}, {}, {}, a4, b4, {}, {}] = values;\n\n    return values.length === 16 ? [a1, b1, a2, b2, a4, b4] : null;\n};\n\nconst SUPPORTED_TRANSFORM_FUNCTIONS: {\n    [key: string]: (args: CSSValue[]) => Transform;\n} = {\n    matrix: matrix,\n    matrix3d: matrix3d\n};\n","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue} from '../syntax/parser';\nimport {isLengthPercentage, LengthPercentage} from '../types/length-percentage';\nimport {FLAG_INTEGER, TokenType} from '../syntax/tokenizer';\nimport {Context} from '../../core/context';\nexport type TransformOrigin = [LengthPercentage, LengthPercentage];\n\nconst DEFAULT_VALUE: LengthPercentage = {\n    type: TokenType.PERCENTAGE_TOKEN,\n    number: 50,\n    flags: FLAG_INTEGER\n};\nconst DEFAULT: TransformOrigin = [DEFAULT_VALUE, DEFAULT_VALUE];\n\nexport const transformOrigin: IPropertyListDescriptor<TransformOrigin> = {\n    name: 'transform-origin',\n    initialValue: '50% 50%',\n    prefix: true,\n    type: PropertyDescriptorParsingType.LIST,\n    parse: (_context: Context, tokens: CSSValue[]) => {\n        const origins: LengthPercentage[] = tokens.filter(isLengthPercentage);\n\n        if (origins.length !== 2) {\n            return DEFAULT;\n        }\n\n        return [origins[0], origins[1]];\n    }\n};\n","import {IPropertyIdentValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {Context} from '../../core/context';\nexport const enum VISIBILITY {\n    VISIBLE = 0,\n    HIDDEN = 1,\n    COLLAPSE = 2\n}\n\nexport const visibility: IPropertyIdentValueDescriptor<VISIBILITY> = {\n    name: 'visible',\n    initialValue: 'none',\n    prefix: false,\n    type: PropertyDescriptorParsingType.IDENT_VALUE,\n    parse: (_context: Context, visibility: string) => {\n        switch (visibility) {\n            case 'hidden':\n                return VISIBILITY.HIDDEN;\n            case 'collapse':\n                return VISIBILITY.COLLAPSE;\n            case 'visible':\n            default:\n                return VISIBILITY.VISIBLE;\n        }\n    }\n};\n","const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n    lookup[chars.charCodeAt(i)] = i;\n}\n\nexport const decode = (base64: string): ArrayBuffer | number[] => {\n    let bufferLength = base64.length * 0.75,\n        len = base64.length,\n        i,\n        p = 0,\n        encoded1,\n        encoded2,\n        encoded3,\n        encoded4;\n\n    if (base64[base64.length - 1] === '=') {\n        bufferLength--;\n        if (base64[base64.length - 2] === '=') {\n            bufferLength--;\n        }\n    }\n\n    const buffer =\n        typeof ArrayBuffer !== 'undefined' &&\n        typeof Uint8Array !== 'undefined' &&\n        typeof Uint8Array.prototype.slice !== 'undefined'\n            ? new ArrayBuffer(bufferLength)\n            : new Array(bufferLength);\n    const bytes = Array.isArray(buffer) ? buffer : new Uint8Array(buffer);\n\n    for (i = 0; i < len; i += 4) {\n        encoded1 = lookup[base64.charCodeAt(i)];\n        encoded2 = lookup[base64.charCodeAt(i + 1)];\n        encoded3 = lookup[base64.charCodeAt(i + 2)];\n        encoded4 = lookup[base64.charCodeAt(i + 3)];\n\n        bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n        bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n        bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n    }\n\n    return buffer;\n};\n\nexport const polyUint16Array = (buffer: number[]): number[] => {\n    const length = buffer.length;\n    const bytes = [];\n    for (let i = 0; i < length; i += 2) {\n        bytes.push((buffer[i + 1] << 8) | buffer[i]);\n    }\n    return bytes;\n};\n\nexport const polyUint32Array = (buffer: number[]): number[] => {\n    const length = buffer.length;\n    const bytes = [];\n    for (let i = 0; i < length; i += 4) {\n        bytes.push((buffer[i + 3] << 24) | (buffer[i + 2] << 16) | (buffer[i + 1] << 8) | buffer[i]);\n    }\n    return bytes;\n};\n","import {IPropertyValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isNumberToken} from '../syntax/parser';\nimport {TokenType} from '../syntax/tokenizer';\nimport {Context} from '../../core/context';\n\ninterface zIndex {\n    order: number;\n    auto: boolean;\n}\n\nexport const zIndex: IPropertyValueDescriptor<zIndex> = {\n    name: 'z-index',\n    initialValue: 'auto',\n    prefix: false,\n    type: PropertyDescriptorParsingType.VALUE,\n    parse: (_context: Context, token: CSSValue): zIndex => {\n        if (token.type === TokenType.IDENT_TOKEN) {\n            return {auto: true, order: 0};\n        }\n\n        if (isNumberToken(token)) {\n            return {auto: false, order: token.number};\n        }\n\n        throw new Error(`Invalid z-index number parsed`);\n    }\n};\n","import {CSSValue} from '../syntax/parser';\nimport {TokenType} from '../syntax/tokenizer';\nimport {ITypeDescriptor} from '../ITypeDescriptor';\nimport {Context} from '../../core/context';\n\nexport const time: ITypeDescriptor<number> = {\n    name: 'time',\n    parse: (_context: Context, value: CSSValue): number => {\n        if (value.type === TokenType.DIMENSION_TOKEN) {\n            switch (value.unit.toLowerCase()) {\n                case 's':\n                    return 1000 * value.number;\n                case 'ms':\n                    return value.number;\n            }\n        }\n\n        throw new Error(`Unsupported time type`);\n    }\n};\n","import {IPropertyValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isNumberToken} from '../syntax/parser';\nimport {Context} from '../../core/context';\nexport const opacity: IPropertyValueDescriptor<number> = {\n    name: 'opacity',\n    initialValue: '1',\n    type: PropertyDescriptorParsingType.VALUE,\n    prefix: false,\n    parse: (_context: Context, token: CSSValue): number => {\n        if (isNumberToken(token)) {\n            return token.number;\n        }\n        return 1;\n    }\n};\n","import {IPropertyTypeValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\n\nexport const textDecorationColor: IPropertyTypeValueDescriptor = {\n    name: `text-decoration-color`,\n    initialValue: 'transparent',\n    prefix: false,\n    type: PropertyDescriptorParsingType.TYPE_VALUE,\n    format: 'color'\n};\n","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isIdentToken} from '../syntax/parser';\nimport {Context} from '../../core/context';\n\nexport const enum TEXT_DECORATION_LINE {\n    NONE = 0,\n    UNDERLINE = 1,\n    OVERLINE = 2,\n    LINE_THROUGH = 3,\n    BLINK = 4\n}\n\nexport type TextDecorationLine = TEXT_DECORATION_LINE[];\n\nexport const textDecorationLine: IPropertyListDescriptor<TextDecorationLine> = {\n    name: 'text-decoration-line',\n    initialValue: 'none',\n    prefix: false,\n    type: PropertyDescriptorParsingType.LIST,\n    parse: (_context: Context, tokens: CSSValue[]): TextDecorationLine => {\n        return tokens\n            .filter(isIdentToken)\n            .map((token) => {\n                switch (token.value) {\n                    case 'underline':\n                        return TEXT_DECORATION_LINE.UNDERLINE;\n                    case 'overline':\n                        return TEXT_DECORATION_LINE.OVERLINE;\n                    case 'line-through':\n                        return TEXT_DECORATION_LINE.LINE_THROUGH;\n                    case 'none':\n                        return TEXT_DECORATION_LINE.BLINK;\n                }\n                return TEXT_DECORATION_LINE.NONE;\n            })\n            .filter((line) => line !== TEXT_DECORATION_LINE.NONE);\n    }\n};\n","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue} from '../syntax/parser';\nimport {TokenType} from '../syntax/tokenizer';\nimport {Context} from '../../core/context';\n\nexport type FONT_FAMILY = string;\n\nexport type FontFamily = FONT_FAMILY[];\n\nexport const fontFamily: IPropertyListDescriptor<FontFamily> = {\n    name: `font-family`,\n    initialValue: '',\n    prefix: false,\n    type: PropertyDescriptorParsingType.LIST,\n    parse: (_context: Context, tokens: CSSValue[]) => {\n        const accumulator: string[] = [];\n        const results: string[] = [];\n        tokens.forEach((token) => {\n            switch (token.type) {\n                case TokenType.IDENT_TOKEN:\n                case TokenType.STRING_TOKEN:\n                    accumulator.push(token.value);\n                    break;\n                case TokenType.NUMBER_TOKEN:\n                    accumulator.push(token.number.toString());\n                    break;\n                case TokenType.COMMA_TOKEN:\n                    results.push(accumulator.join(' '));\n                    accumulator.length = 0;\n                    break;\n            }\n        });\n        if (accumulator.length) {\n            results.push(accumulator.join(' '));\n        }\n        return results.map((result) => (result.indexOf(' ') === -1 ? result : `'${result}'`));\n    }\n};\n","import {IPropertyTypeValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\n\nexport const fontSize: IPropertyTypeValueDescriptor = {\n    name: `font-size`,\n    initialValue: '0',\n    prefix: false,\n    type: PropertyDescriptorParsingType.TYPE_VALUE,\n    format: 'length'\n};\n","import {IPropertyValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isIdentToken, isNumberToken} from '../syntax/parser';\nimport {Context} from '../../core/context';\nexport const fontWeight: IPropertyValueDescriptor<number> = {\n    name: 'font-weight',\n    initialValue: 'normal',\n    type: PropertyDescriptorParsingType.VALUE,\n    prefix: false,\n    parse: (_context: Context, token: CSSValue): number => {\n        if (isNumberToken(token)) {\n            return token.number;\n        }\n\n        if (isIdentToken(token)) {\n            switch (token.value) {\n                case 'bold':\n                    return 700;\n                case 'normal':\n                default:\n                    return 400;\n            }\n        }\n\n        return 400;\n    }\n};\n","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isIdentToken} from '../syntax/parser';\nimport {Context} from '../../core/context';\nexport const fontVariant: IPropertyListDescriptor<string[]> = {\n    name: 'font-variant',\n    initialValue: 'none',\n    type: PropertyDescriptorParsingType.LIST,\n    prefix: false,\n    parse: (_context: Context, tokens: CSSValue[]): string[] => {\n        return tokens.filter(isIdentToken).map((token) => token.value);\n    }\n};\n","import {IPropertyIdentValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {Context} from '../../core/context';\nexport const enum FONT_STYLE {\n    NORMAL = 'normal',\n    ITALIC = 'italic',\n    OBLIQUE = 'oblique'\n}\n\nexport const fontStyle: IPropertyIdentValueDescriptor<FONT_STYLE> = {\n    name: 'font-style',\n    initialValue: 'normal',\n    prefix: false,\n    type: PropertyDescriptorParsingType.IDENT_VALUE,\n    parse: (_context: Context, overflow: string) => {\n        switch (overflow) {\n            case 'oblique':\n                return FONT_STYLE.OBLIQUE;\n            case 'italic':\n                return FONT_STYLE.ITALIC;\n            case 'normal':\n            default:\n                return FONT_STYLE.NORMAL;\n        }\n    }\n};\n","export const contains = (bit: number, value: number): boolean => (bit & value) !== 0;\n","import {TokenType} from '../syntax/tokenizer';\nimport {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue} from '../syntax/parser';\nimport {Context} from '../../core/context';\n\nexport type Content = CSSValue[];\n\nexport const content: IPropertyListDescriptor<Content> = {\n    name: 'content',\n    initialValue: 'none',\n    type: PropertyDescriptorParsingType.LIST,\n    prefix: false,\n    parse: (_context: Context, tokens: CSSValue[]) => {\n        if (tokens.length === 0) {\n            return [];\n        }\n\n        const first = tokens[0];\n\n        if (first.type === TokenType.IDENT_TOKEN && first.value === 'none') {\n            return [];\n        }\n\n        return tokens;\n    }\n};\n","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isNumberToken, nonWhiteSpace} from '../syntax/parser';\nimport {TokenType} from '../syntax/tokenizer';\nimport {Context} from '../../core/context';\n\nexport interface COUNTER_INCREMENT {\n    counter: string;\n    increment: number;\n}\n\nexport type CounterIncrement = COUNTER_INCREMENT[] | null;\n\nexport const counterIncrement: IPropertyListDescriptor<CounterIncrement> = {\n    name: 'counter-increment',\n    initialValue: 'none',\n    prefix: true,\n    type: PropertyDescriptorParsingType.LIST,\n    parse: (_context: Context, tokens: CSSValue[]) => {\n        if (tokens.length === 0) {\n            return null;\n        }\n\n        const first = tokens[0];\n\n        if (first.type === TokenType.IDENT_TOKEN && first.value === 'none') {\n            return null;\n        }\n\n        const increments = [];\n        const filtered = tokens.filter(nonWhiteSpace);\n\n        for (let i = 0; i < filtered.length; i++) {\n            const counter = filtered[i];\n            const next = filtered[i + 1];\n            if (counter.type === TokenType.IDENT_TOKEN) {\n                const increment = next && isNumberToken(next) ? next.number : 1;\n                increments.push({counter: counter.value, increment});\n            }\n        }\n\n        return increments;\n    }\n};\n","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isIdentToken, isNumberToken, nonWhiteSpace} from '../syntax/parser';\nimport {Context} from '../../core/context';\n\nexport interface COUNTER_RESET {\n    counter: string;\n    reset: number;\n}\n\nexport type CounterReset = COUNTER_RESET[];\n\nexport const counterReset: IPropertyListDescriptor<CounterReset> = {\n    name: 'counter-reset',\n    initialValue: 'none',\n    prefix: true,\n    type: PropertyDescriptorParsingType.LIST,\n    parse: (_context: Context, tokens: CSSValue[]) => {\n        if (tokens.length === 0) {\n            return [];\n        }\n\n        const resets = [];\n        const filtered = tokens.filter(nonWhiteSpace);\n\n        for (let i = 0; i < filtered.length; i++) {\n            const counter = filtered[i];\n            const next = filtered[i + 1];\n            if (isIdentToken(counter) && counter.value !== 'none') {\n                const reset = next && isNumberToken(next) ? next.number : 0;\n                resets.push({counter: counter.value, reset});\n            }\n        }\n\n        return resets;\n    }\n};\n","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {Context} from '../../core/context';\nimport {CSSValue, isDimensionToken} from '../syntax/parser';\nimport {time} from '../types/time';\n\nexport const duration: IPropertyListDescriptor<number[]> = {\n    name: 'duration',\n    initialValue: '0s',\n    prefix: false,\n    type: PropertyDescriptorParsingType.LIST,\n    parse: (context: Context, tokens: CSSValue[]) => {\n        return tokens.filter(isDimensionToken).map((token) => time.parse(context, token));\n    }\n};\n","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isStringToken} from '../syntax/parser';\nimport {TokenType} from '../syntax/tokenizer';\nimport {Context} from '../../core/context';\n\nexport interface QUOTE {\n    open: string;\n    close: string;\n}\n\nexport type Quotes = QUOTE[] | null;\n\nexport const quotes: IPropertyListDescriptor<Quotes> = {\n    name: 'quotes',\n    initialValue: 'none',\n    prefix: true,\n    type: PropertyDescriptorParsingType.LIST,\n    parse: (_context: Context, tokens: CSSValue[]) => {\n        if (tokens.length === 0) {\n            return null;\n        }\n\n        const first = tokens[0];\n\n        if (first.type === TokenType.IDENT_TOKEN && first.value === 'none') {\n            return null;\n        }\n\n        const quotes = [];\n        const filtered = tokens.filter(isStringToken);\n\n        if (filtered.length % 2 !== 0) {\n            return null;\n        }\n\n        for (let i = 0; i < filtered.length; i += 2) {\n            const open = filtered[i].value;\n            const close = filtered[i + 1].value;\n            quotes.push({open, close});\n        }\n\n        return quotes;\n    }\n};\n\nexport const getQuote = (quotes: Quotes, depth: number, open: boolean): string => {\n    if (!quotes) {\n        return '';\n    }\n\n    const quote = quotes[Math.min(depth, quotes.length - 1)];\n    if (!quote) {\n        return '';\n    }\n\n    return open ? quote.open : quote.close;\n};\n","import {PropertyDescriptorParsingType, IPropertyListDescriptor} from '../IPropertyDescriptor';\nimport {CSSValue, isIdentWithValue, parseFunctionArgs} from '../syntax/parser';\nimport {ZERO_LENGTH} from '../types/length-percentage';\nimport {color, Color} from '../types/color';\nimport {isLength, Length} from '../types/length';\nimport {Context} from '../../core/context';\n\nexport type BoxShadow = BoxShadowItem[];\ninterface BoxShadowItem {\n    inset: boolean;\n    color: Color;\n    offsetX: Length;\n    offsetY: Length;\n    blur: Length;\n    spread: Length;\n}\n\nexport const boxShadow: IPropertyListDescriptor<BoxShadow> = {\n    name: 'box-shadow',\n    initialValue: 'none',\n    type: PropertyDescriptorParsingType.LIST,\n    prefix: false,\n    parse: (context: Context, tokens: CSSValue[]): BoxShadow => {\n        if (tokens.length === 1 && isIdentWithValue(tokens[0], 'none')) {\n            return [];\n        }\n\n        return parseFunctionArgs(tokens).map((values: CSSValue[]) => {\n            const shadow: BoxShadowItem = {\n                color: 0x000000ff,\n                offsetX: ZERO_LENGTH,\n                offsetY: ZERO_LENGTH,\n                blur: ZERO_LENGTH,\n                spread: ZERO_LENGTH,\n                inset: false\n            };\n            let c = 0;\n            for (let i = 0; i < values.length; i++) {\n                const token = values[i];\n                if (isIdentWithValue(token, 'inset')) {\n                    shadow.inset = true;\n                } else if (isLength(token)) {\n                    if (c === 0) {\n                        shadow.offsetX = token;\n                    } else if (c === 1) {\n                        shadow.offsetY = token;\n                    } else if (c === 2) {\n                        shadow.blur = token;\n                    } else {\n                        shadow.spread = token;\n                    }\n                    c++;\n                } else {\n                    shadow.color = color.parse(context, token);\n                }\n            }\n            return shadow;\n        });\n    }\n};\n","import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {CSSValue, isIdentToken} from '../syntax/parser';\nimport {Context} from '../../core/context';\nexport const enum PAINT_ORDER_LAYER {\n    FILL,\n    STROKE,\n    MARKERS\n}\n\nexport type PaintOrder = PAINT_ORDER_LAYER[];\n\nexport const paintOrder: IPropertyListDescriptor<PaintOrder> = {\n    name: 'paint-order',\n    initialValue: 'normal',\n    prefix: false,\n    type: PropertyDescriptorParsingType.LIST,\n    parse: (_context: Context, tokens: CSSValue[]): PaintOrder => {\n        const DEFAULT_VALUE = [PAINT_ORDER_LAYER.FILL, PAINT_ORDER_LAYER.STROKE, PAINT_ORDER_LAYER.MARKERS];\n        const layers: PaintOrder = [];\n\n        tokens.filter(isIdentToken).forEach((token) => {\n            switch (token.value) {\n                case 'stroke':\n                    layers.push(PAINT_ORDER_LAYER.STROKE);\n                    break;\n                case 'fill':\n                    layers.push(PAINT_ORDER_LAYER.FILL);\n                    break;\n                case 'markers':\n                    layers.push(PAINT_ORDER_LAYER.MARKERS);\n                    break;\n            }\n        });\n        DEFAULT_VALUE.forEach((value) => {\n            if (layers.indexOf(value) === -1) {\n                layers.push(value);\n            }\n        });\n\n        return layers;\n    }\n};\n","import {IPropertyTypeValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nexport const webkitTextStrokeColor: IPropertyTypeValueDescriptor = {\n    name: `-webkit-text-stroke-color`,\n    initialValue: 'currentcolor',\n    prefix: false,\n    type: PropertyDescriptorParsingType.TYPE_VALUE,\n    format: 'color'\n};\n","import {CSSValue, isDimensionToken} from '../syntax/parser';\nimport {IPropertyValueDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';\nimport {Context} from '../../core/context';\nexport const webkitTextStrokeWidth: IPropertyValueDescriptor<number> = {\n    name: `-webkit-text-stroke-width`,\n    initialValue: '0',\n    type: PropertyDescriptorParsingType.VALUE,\n    prefix: false,\n    parse: (_context: Context, token: CSSValue): number => {\n        if (isDimensionToken(token)) {\n            return token.number;\n        }\n        return 0;\n    }\n};\n","import {CSSPropertyDescriptor, PropertyDescriptorParsingType} from './IPropertyDescriptor';\nimport {backgroundClip} from './property-descriptors/background-clip';\nimport {backgroundColor} from './property-descriptors/background-color';\nimport {backgroundImage} from './property-descriptors/background-image';\nimport {backgroundOrigin} from './property-descriptors/background-origin';\nimport {backgroundPosition} from './property-descriptors/background-position';\nimport {backgroundRepeat} from './property-descriptors/background-repeat';\nimport {backgroundSize} from './property-descriptors/background-size';\nimport {\n    borderBottomColor,\n    borderLeftColor,\n    borderRightColor,\n    borderTopColor\n} from './property-descriptors/border-color';\nimport {\n    borderBottomLeftRadius,\n    borderBottomRightRadius,\n    borderTopLeftRadius,\n    borderTopRightRadius\n} from './property-descriptors/border-radius';\nimport {\n    borderBottomStyle,\n    borderLeftStyle,\n    borderRightStyle,\n    borderTopStyle\n} from './property-descriptors/border-style';\nimport {\n    borderBottomWidth,\n    borderLeftWidth,\n    borderRightWidth,\n    borderTopWidth\n} from './property-descriptors/border-width';\nimport {color} from './property-descriptors/color';\nimport {direction} from './property-descriptors/direction';\nimport {display, DISPLAY} from './property-descriptors/display';\nimport {float, FLOAT} from './property-descriptors/float';\nimport {letterSpacing} from './property-descriptors/letter-spacing';\nimport {lineBreak} from './property-descriptors/line-break';\nimport {lineHeight} from './property-descriptors/line-height';\nimport {listStyleImage} from './property-descriptors/list-style-image';\nimport {listStylePosition} from './property-descriptors/list-style-position';\nimport {listStyleType} from './property-descriptors/list-style-type';\nimport {marginBottom, marginLeft, marginRight, marginTop} from './property-descriptors/margin';\nimport {overflow, OVERFLOW} from './property-descriptors/overflow';\nimport {overflowWrap} from './property-descriptors/overflow-wrap';\nimport {paddingBottom, paddingLeft, paddingRight, paddingTop} from './property-descriptors/padding';\nimport {textAlign} from './property-descriptors/text-align';\nimport {position, POSITION} from './property-descriptors/position';\nimport {textShadow} from './property-descriptors/text-shadow';\nimport {textTransform} from './property-descriptors/text-transform';\nimport {transform} from './property-descriptors/transform';\nimport {transformOrigin} from './property-descriptors/transform-origin';\nimport {visibility, VISIBILITY} from './property-descriptors/visibility';\nimport {wordBreak} from './property-descriptors/word-break';\nimport {zIndex} from './property-descriptors/z-index';\nimport {CSSValue, isIdentToken, Parser} from './syntax/parser';\nimport {Tokenizer} from './syntax/tokenizer';\nimport {Color, color as colorType, isTransparent} from './types/color';\nimport {angle} from './types/angle';\nimport {image} from './types/image';\nimport {time} from './types/time';\nimport {opacity} from './property-descriptors/opacity';\nimport {textDecorationColor} from './property-descriptors/text-decoration-color';\nimport {textDecorationLine} from './property-descriptors/text-decoration-line';\nimport {isLengthPercentage, LengthPercentage, ZERO_LENGTH} from './types/length-percentage';\nimport {fontFamily} from './property-descriptors/font-family';\nimport {fontSize} from './property-descriptors/font-size';\nimport {isLength} from './types/length';\nimport {fontWeight} from './property-descriptors/font-weight';\nimport {fontVariant} from './property-descriptors/font-variant';\nimport {fontStyle} from './property-descriptors/font-style';\nimport {contains} from '../core/bitwise';\nimport {content} from './property-descriptors/content';\nimport {counterIncrement} from './property-descriptors/counter-increment';\nimport {counterReset} from './property-descriptors/counter-reset';\nimport {duration} from './property-descriptors/duration';\nimport {quotes} from './property-descriptors/quotes';\nimport {boxShadow} from './property-descriptors/box-shadow';\nimport {paintOrder} from './property-descriptors/paint-order';\nimport {webkitTextStrokeColor} from './property-descriptors/webkit-text-stroke-color';\nimport {webkitTextStrokeWidth} from './property-descriptors/webkit-text-stroke-width';\nimport {Context} from '../core/context';\n\nexport class CSSParsedDeclaration {\n    animationDuration: ReturnType<typeof duration.parse>;\n    backgroundClip: ReturnType<typeof backgroundClip.parse>;\n    backgroundColor: Color;\n    backgroundImage: ReturnType<typeof backgroundImage.parse>;\n    backgroundOrigin: ReturnType<typeof backgroundOrigin.parse>;\n    backgroundPosition: ReturnType<typeof backgroundPosition.parse>;\n    backgroundRepeat: ReturnType<typeof backgroundRepeat.parse>;\n    backgroundSize: ReturnType<typeof backgroundSize.parse>;\n    borderTopColor: Color;\n    borderRightColor: Color;\n    borderBottomColor: Color;\n    borderLeftColor: Color;\n    borderTopLeftRadius: ReturnType<typeof borderTopLeftRadius.parse>;\n    borderTopRightRadius: ReturnType<typeof borderTopRightRadius.parse>;\n    borderBottomRightRadius: ReturnType<typeof borderBottomRightRadius.parse>;\n    borderBottomLeftRadius: ReturnType<typeof borderBottomLeftRadius.parse>;\n    borderTopStyle: ReturnType<typeof borderTopStyle.parse>;\n    borderRightStyle: ReturnType<typeof borderRightStyle.parse>;\n    borderBottomStyle: ReturnType<typeof borderBottomStyle.parse>;\n    borderLeftStyle: ReturnType<typeof borderLeftStyle.parse>;\n    borderTopWidth: ReturnType<typeof borderTopWidth.parse>;\n    borderRightWidth: ReturnType<typeof borderRightWidth.parse>;\n    borderBottomWidth: ReturnType<typeof borderBottomWidth.parse>;\n    borderLeftWidth: ReturnType<typeof borderLeftWidth.parse>;\n    boxShadow: ReturnType<typeof boxShadow.parse>;\n    color: Color;\n    direction: ReturnType<typeof direction.parse>;\n    display: ReturnType<typeof display.parse>;\n    float: ReturnType<typeof float.parse>;\n    fontFamily: ReturnType<typeof fontFamily.parse>;\n    fontSize: LengthPercentage;\n    fontStyle: ReturnType<typeof fontStyle.parse>;\n    fontVariant: ReturnType<typeof fontVariant.parse>;\n    fontWeight: ReturnType<typeof fontWeight.parse>;\n    letterSpacing: ReturnType<typeof letterSpacing.parse>;\n    lineBreak: ReturnType<typeof lineBreak.parse>;\n    lineHeight: CSSValue;\n    listStyleImage: ReturnType<typeof listStyleImage.parse>;\n    listStylePosition: ReturnType<typeof listStylePosition.parse>;\n    listStyleType: ReturnType<typeof listStyleType.parse>;\n    marginTop: CSSValue;\n    marginRight: CSSValue;\n    marginBottom: CSSValue;\n    marginLeft: CSSValue;\n    opacity: ReturnType<typeof opacity.parse>;\n    overflowX: OVERFLOW;\n    overflowY: OVERFLOW;\n    overflowWrap: ReturnType<typeof overflowWrap.parse>;\n    paddingTop: LengthPercentage;\n    paddingRight: LengthPercentage;\n    paddingBottom: LengthPercentage;\n    paddingLeft: LengthPercentage;\n    paintOrder: ReturnType<typeof paintOrder.parse>;\n    position: ReturnType<typeof position.parse>;\n    textAlign: ReturnType<typeof textAlign.parse>;\n    textDecorationColor: Color;\n    textDecorationLine: ReturnType<typeof textDecorationLine.parse>;\n    textShadow: ReturnType<typeof textShadow.parse>;\n    textTransform: ReturnType<typeof textTransform.parse>;\n    transform: ReturnType<typeof transform.parse>;\n    transformOrigin: ReturnType<typeof transformOrigin.parse>;\n    visibility: ReturnType<typeof visibility.parse>;\n    webkitTextStrokeColor: Color;\n    webkitTextStrokeWidth: ReturnType<typeof webkitTextStrokeWidth.parse>;\n    wordBreak: ReturnType<typeof wordBreak.parse>;\n    zIndex: ReturnType<typeof zIndex.parse>;\n\n    constructor(context: Context, declaration: CSSStyleDeclaration) {\n        this.animationDuration = parse(context, duration, declaration.animationDuration);\n        this.backgroundClip = parse(context, backgroundClip, declaration.backgroundClip);\n        this.backgroundColor = parse(context, backgroundColor, declaration.backgroundColor);\n        this.backgroundImage = parse(context, backgroundImage, declaration.backgroundImage);\n        this.backgroundOrigin = parse(context, backgroundOrigin, declaration.backgroundOrigin);\n        this.backgroundPosition = parse(context, backgroundPosition, declaration.backgroundPosition);\n        this.backgroundRepeat = parse(context, backgroundRepeat, declaration.backgroundRepeat);\n        this.backgroundSize = parse(context, backgroundSize, declaration.backgroundSize);\n        this.borderTopColor = parse(context, borderTopColor, declaration.borderTopColor);\n        this.borderRightColor = parse(context, borderRightColor, declaration.borderRightColor);\n        this.borderBottomColor = parse(context, borderBottomColor, declaration.borderBottomColor);\n        this.borderLeftColor = parse(context, borderLeftColor, declaration.borderLeftColor);\n        this.borderTopLeftRadius = parse(context, borderTopLeftRadius, declaration.borderTopLeftRadius);\n        this.borderTopRightRadius = parse(context, borderTopRightRadius, declaration.borderTopRightRadius);\n        this.borderBottomRightRadius = parse(context, borderBottomRightRadius, declaration.borderBottomRightRadius);\n        this.borderBottomLeftRadius = parse(context, borderBottomLeftRadius, declaration.borderBottomLeftRadius);\n        this.borderTopStyle = parse(context, borderTopStyle, declaration.borderTopStyle);\n        this.borderRightStyle = parse(context, borderRightStyle, declaration.borderRightStyle);\n        this.borderBottomStyle = parse(context, borderBottomStyle, declaration.borderBottomStyle);\n        this.borderLeftStyle = parse(context, borderLeftStyle, declaration.borderLeftStyle);\n        this.borderTopWidth = parse(context, borderTopWidth, declaration.borderTopWidth);\n        this.borderRightWidth = parse(context, borderRightWidth, declaration.borderRightWidth);\n        this.borderBottomWidth = parse(context, borderBottomWidth, declaration.borderBottomWidth);\n        this.borderLeftWidth = parse(context, borderLeftWidth, declaration.borderLeftWidth);\n        this.boxShadow = parse(context, boxShadow, declaration.boxShadow);\n        this.color = parse(context, color, declaration.color);\n        this.direction = parse(context, direction, declaration.direction);\n        this.display = parse(context, display, declaration.display);\n        this.float = parse(context, float, declaration.cssFloat);\n        this.fontFamily = parse(context, fontFamily, declaration.fontFamily);\n        this.fontSize = parse(context, fontSize, declaration.fontSize);\n        this.fontStyle = parse(context, fontStyle, declaration.fontStyle);\n        this.fontVariant = parse(context, fontVariant, declaration.fontVariant);\n        this.fontWeight = parse(context, fontWeight, declaration.fontWeight);\n        this.letterSpacing = parse(context, letterSpacing, declaration.letterSpacing);\n        this.lineBreak = parse(context, lineBreak, declaration.lineBreak);\n        this.lineHeight = parse(context, lineHeight, declaration.lineHeight);\n        this.listStyleImage = parse(context, listStyleImage, declaration.listStyleImage);\n        this.listStylePosition = parse(context, listStylePosition, declaration.listStylePosition);\n        this.listStyleType = parse(context, listStyleType, declaration.listStyleType);\n        this.marginTop = parse(context, marginTop, declaration.marginTop);\n        this.marginRight = parse(context, marginRight, declaration.marginRight);\n        this.marginBottom = parse(context, marginBottom, declaration.marginBottom);\n        this.marginLeft = parse(context, marginLeft, declaration.marginLeft);\n        this.opacity = parse(context, opacity, declaration.opacity);\n        const overflowTuple = parse(context, overflow, declaration.overflow);\n        this.overflowX = overflowTuple[0];\n        this.overflowY = overflowTuple[overflowTuple.length > 1 ? 1 : 0];\n        this.overflowWrap = parse(context, overflowWrap, declaration.overflowWrap);\n        this.paddingTop = parse(context, paddingTop, declaration.paddingTop);\n        this.paddingRight = parse(context, paddingRight, declaration.paddingRight);\n        this.paddingBottom = parse(context, paddingBottom, declaration.paddingBottom);\n        this.paddingLeft = parse(context, paddingLeft, declaration.paddingLeft);\n        this.paintOrder = parse(context, paintOrder, declaration.paintOrder);\n        this.position = parse(context, position, declaration.position);\n        this.textAlign = parse(context, textAlign, declaration.textAlign);\n        this.textDecorationColor = parse(\n            context,\n            textDecorationColor,\n            declaration.textDecorationColor ?? declaration.color\n        );\n        this.textDecorationLine = parse(\n            context,\n            textDecorationLine,\n            declaration.textDecorationLine ?? declaration.textDecoration\n        );\n        this.textShadow = parse(context, textShadow, declaration.textShadow);\n        this.textTransform = parse(context, textTransform, declaration.textTransform);\n        this.transform = parse(context, transform, declaration.transform);\n        this.transformOrigin = parse(context, transformOrigin, declaration.transformOrigin);\n        this.visibility = parse(context, visibility, declaration.visibility);\n        this.webkitTextStrokeColor = parse(context, webkitTextStrokeColor, declaration.webkitTextStrokeColor);\n        this.webkitTextStrokeWidth = parse(context, webkitTextStrokeWidth, declaration.webkitTextStrokeWidth);\n        this.wordBreak = parse(context, wordBreak, declaration.wordBreak);\n        this.zIndex = parse(context, zIndex, declaration.zIndex);\n    }\n\n    isVisible(): boolean {\n        return this.display > 0 && this.opacity > 0 && this.visibility === VISIBILITY.VISIBLE;\n    }\n\n    isTransparent(): boolean {\n        return isTransparent(this.backgroundColor);\n    }\n\n    isTransformed(): boolean {\n        return this.transform !== null;\n    }\n\n    isPositioned(): boolean {\n        return this.position !== POSITION.STATIC;\n    }\n\n    isPositionedWithZIndex(): boolean {\n        return this.isPositioned() && !this.zIndex.auto;\n    }\n\n    isFloating(): boolean {\n        return this.float !== FLOAT.NONE;\n    }\n\n    isInlineLevel(): boolean {\n        return (\n            contains(this.display, DISPLAY.INLINE) ||\n            contains(this.display, DISPLAY.INLINE_BLOCK) ||\n            contains(this.display, DISPLAY.INLINE_FLEX) ||\n            contains(this.display, DISPLAY.INLINE_GRID) ||\n            contains(this.display, DISPLAY.INLINE_LIST_ITEM) ||\n            contains(this.display, DISPLAY.INLINE_TABLE)\n        );\n    }\n}\n\nexport class CSSParsedPseudoDeclaration {\n    content: ReturnType<typeof content.parse>;\n    quotes: ReturnType<typeof quotes.parse>;\n\n    constructor(context: Context, declaration: CSSStyleDeclaration) {\n        this.content = parse(context, content, declaration.content);\n        this.quotes = parse(context, quotes, declaration.quotes);\n    }\n}\n\nexport class CSSParsedCounterDeclaration {\n    counterIncrement: ReturnType<typeof counterIncrement.parse>;\n    counterReset: ReturnType<typeof counterReset.parse>;\n\n    constructor(context: Context, declaration: CSSStyleDeclaration) {\n        this.counterIncrement = parse(context, counterIncrement, declaration.counterIncrement);\n        this.counterReset = parse(context, counterReset, declaration.counterReset);\n    }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst parse = (context: Context, descriptor: CSSPropertyDescriptor<any>, style?: string | null) => {\n    const tokenizer = new Tokenizer();\n    const value = style !== null && typeof style !== 'undefined' ? style.toString() : descriptor.initialValue;\n    tokenizer.write(value);\n    const parser = new Parser(tokenizer.read());\n    switch (descriptor.type) {\n        case PropertyDescriptorParsingType.IDENT_VALUE:\n            const token = parser.parseComponentValue();\n            return descriptor.parse(context, isIdentToken(token) ? token.value : descriptor.initialValue);\n        case PropertyDescriptorParsingType.VALUE:\n            return descriptor.parse(context, parser.parseComponentValue());\n        case PropertyDescriptorParsingType.LIST:\n            return descriptor.parse(context, parser.parseComponentValues());\n        case PropertyDescriptorParsingType.TOKEN_VALUE:\n            return parser.parseComponentValue();\n        case PropertyDescriptorParsingType.TYPE_VALUE:\n            switch (descriptor.format) {\n                case 'angle':\n                    return angle.parse(context, parser.parseComponentValue());\n                case 'color':\n                    return colorType.parse(context, parser.parseComponentValue());\n                case 'image':\n                    return image.parse(context, parser.parseComponentValue());\n                case 'length':\n                    const length = parser.parseComponentValue();\n                    return isLength(length) ? length : ZERO_LENGTH;\n                case 'length-percentage':\n                    const value = parser.parseComponentValue();\n                    return isLengthPercentage(value) ? value : ZERO_LENGTH;\n                case 'time':\n                    return time.parse(context, parser.parseComponentValue());\n            }\n            break;\n    }\n};\n","const elementDebuggerAttribute = 'data-html2canvas-debug';\nexport const enum DebuggerType {\n    NONE,\n    ALL,\n    CLONE,\n    PARSE,\n    RENDER\n}\n\nconst getElementDebugType = (element: Element): DebuggerType => {\n    const attribute = element.getAttribute(elementDebuggerAttribute);\n    switch (attribute) {\n        case 'all':\n            return DebuggerType.ALL;\n        case 'clone':\n            return DebuggerType.CLONE;\n        case 'parse':\n            return DebuggerType.PARSE;\n        case 'render':\n            return DebuggerType.RENDER;\n        default:\n            return DebuggerType.NONE;\n    }\n};\n\nexport const isDebugging = (element: Element, type: Omit<DebuggerType, DebuggerType.NONE>): boolean => {\n    const elementType = getElementDebugType(element);\n    return elementType === DebuggerType.ALL || type === elementType;\n};\n","import {CSSParsedDeclaration} from '../css/index';\nimport {TextContainer} from './text-container';\nimport {Bounds, parseBounds} from '../css/layout/bounds';\nimport {isHTMLElementNode} from './node-parser';\nimport {Context} from '../core/context';\nimport {DebuggerType, isDebugging} from '../core/debugger';\n\nexport const enum FLAGS {\n    CREATES_STACKING_CONTEXT = 1 << 1,\n    CREATES_REAL_STACKING_CONTEXT = 1 << 2,\n    IS_LIST_OWNER = 1 << 3,\n    DEBUG_RENDER = 1 << 4\n}\n\nexport class ElementContainer {\n    readonly styles: CSSParsedDeclaration;\n    readonly textNodes: TextContainer[] = [];\n    readonly elements: ElementContainer[] = [];\n    bounds: Bounds;\n    flags = 0;\n\n    constructor(protected readonly context: Context, element: Element) {\n        if (isDebugging(element, DebuggerType.PARSE)) {\n            debugger;\n        }\n\n        this.styles = new CSSParsedDeclaration(context, window.getComputedStyle(element, null));\n\n        if (isHTMLElementNode(element)) {\n            if (this.styles.animationDuration.some((duration) => duration > 0)) {\n                element.style.animationDuration = '0s';\n            }\n\n            if (this.styles.transform !== null) {\n                // getBoundingClientRect takes transforms into account\n                element.style.transform = 'none';\n            }\n        }\n\n        this.bounds = parseBounds(this.context, element);\n\n        if (isDebugging(element, DebuggerType.RENDER)) {\n            this.flags |= FLAGS.DEBUG_RENDER;\n        }\n    }\n}\n","const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n    lookup[chars.charCodeAt(i)] = i;\n}\n\nexport const encode = (arraybuffer: ArrayBuffer): string => {\n    let bytes = new Uint8Array(arraybuffer),\n        i,\n        len = bytes.length,\n        base64 = '';\n\n    for (i = 0; i < len; i += 3) {\n        base64 += chars[bytes[i] >> 2];\n        base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n        base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n        base64 += chars[bytes[i + 2] & 63];\n    }\n\n    if (len % 3 === 2) {\n        base64 = base64.substring(0, base64.length - 1) + '=';\n    } else if (len % 3 === 1) {\n        base64 = base64.substring(0, base64.length - 2) + '==';\n    }\n\n    return base64;\n};\n\nexport const decode = (base64: string): ArrayBuffer => {\n    let bufferLength = base64.length * 0.75,\n        len = base64.length,\n        i,\n        p = 0,\n        encoded1,\n        encoded2,\n        encoded3,\n        encoded4;\n\n    if (base64[base64.length - 1] === '=') {\n        bufferLength--;\n        if (base64[base64.length - 2] === '=') {\n            bufferLength--;\n        }\n    }\n\n    const arraybuffer = new ArrayBuffer(bufferLength),\n        bytes = new Uint8Array(arraybuffer);\n\n    for (i = 0; i < len; i += 4) {\n        encoded1 = lookup[base64.charCodeAt(i)];\n        encoded2 = lookup[base64.charCodeAt(i + 1)];\n        encoded3 = lookup[base64.charCodeAt(i + 2)];\n        encoded4 = lookup[base64.charCodeAt(i + 3)];\n\n        bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n        bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n        bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n    }\n\n    return arraybuffer;\n};\n","import {decode, polyUint16Array, polyUint32Array} from './Util';\n\nexport type int = number;\n\n/** Shift size for getting the index-2 table offset. */\nexport const UTRIE2_SHIFT_2 = 5;\n\n/** Shift size for getting the index-1 table offset. */\nexport const UTRIE2_SHIFT_1 = 6 + 5;\n\n/**\n * Shift size for shifting left the index array values.\n * Increases possible data size with 16-bit index values at the cost\n * of compactability.\n * This requires data blocks to be aligned by UTRIE2_DATA_GRANULARITY.\n */\nexport const UTRIE2_INDEX_SHIFT = 2;\n\n/**\n * Difference between the two shift sizes,\n * for getting an index-1 offset from an index-2 offset. 6=11-5\n */\nexport const UTRIE2_SHIFT_1_2 = UTRIE2_SHIFT_1 - UTRIE2_SHIFT_2;\n\n/**\n * The part of the index-2 table for U+D800..U+DBFF stores values for\n * lead surrogate code _units_ not code _points_.\n * Values for lead surrogate code _points_ are indexed with this portion of the table.\n * Length=32=0x20=0x400>>UTRIE2_SHIFT_2. (There are 1024=0x400 lead surrogates.)\n */\nexport const UTRIE2_LSCP_INDEX_2_OFFSET = 0x10000 >> UTRIE2_SHIFT_2;\n\n/** Number of entries in a data block. 32=0x20 */\nexport const UTRIE2_DATA_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_2;\n/** Mask for getting the lower bits for the in-data-block offset. */\nexport const UTRIE2_DATA_MASK = UTRIE2_DATA_BLOCK_LENGTH - 1;\n\nexport const UTRIE2_LSCP_INDEX_2_LENGTH = 0x400 >> UTRIE2_SHIFT_2;\n/** Count the lengths of both BMP pieces. 2080=0x820 */\nexport const UTRIE2_INDEX_2_BMP_LENGTH = UTRIE2_LSCP_INDEX_2_OFFSET + UTRIE2_LSCP_INDEX_2_LENGTH;\n/**\n * The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820.\n * Length 32=0x20 for lead bytes C0..DF, regardless of UTRIE2_SHIFT_2.\n */\nexport const UTRIE2_UTF8_2B_INDEX_2_OFFSET = UTRIE2_INDEX_2_BMP_LENGTH;\nexport const UTRIE2_UTF8_2B_INDEX_2_LENGTH = 0x800 >> 6; /* U+0800 is the first code point after 2-byte UTF-8 */\n/**\n * The index-1 table, only used for supplementary code points, at offset 2112=0x840.\n * Variable length, for code points up to highStart, where the last single-value range starts.\n * Maximum length 512=0x200=0x100000>>UTRIE2_SHIFT_1.\n * (For 0x100000 supplementary code points U+10000..U+10ffff.)\n *\n * The part of the index-2 table for supplementary code points starts\n * after this index-1 table.\n *\n * Both the index-1 table and the following part of the index-2 table\n * are omitted completely if there is only BMP data.\n */\nexport const UTRIE2_INDEX_1_OFFSET = UTRIE2_UTF8_2B_INDEX_2_OFFSET + UTRIE2_UTF8_2B_INDEX_2_LENGTH;\n\n/**\n * Number of index-1 entries for the BMP. 32=0x20\n * This part of the index-1 table is omitted from the serialized form.\n */\nexport const UTRIE2_OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> UTRIE2_SHIFT_1;\n\n/** Number of entries in an index-2 block. 64=0x40 */\nexport const UTRIE2_INDEX_2_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_1_2;\n/** Mask for getting the lower bits for the in-index-2-block offset. */\nexport const UTRIE2_INDEX_2_MASK = UTRIE2_INDEX_2_BLOCK_LENGTH - 1;\n\nconst slice16 = (view: number[] | Uint16Array, start: number, end?: number) => {\n    if (view.slice) {\n        return view.slice(start, end);\n    }\n\n    return new Uint16Array(Array.prototype.slice.call(view, start, end));\n};\n\nconst slice32 = (view: number[] | Uint32Array, start: number, end?: number) => {\n    if (view.slice) {\n        return view.slice(start, end);\n    }\n\n    return new Uint32Array(Array.prototype.slice.call(view, start, end));\n};\n\nexport const createTrieFromBase64 = (base64: string, _byteLength: number): Trie => {\n    const buffer = decode(base64);\n    const view32 = Array.isArray(buffer) ? polyUint32Array(buffer) : new Uint32Array(buffer);\n    const view16 = Array.isArray(buffer) ? polyUint16Array(buffer) : new Uint16Array(buffer);\n    const headerLength = 24;\n\n    const index = slice16(view16, headerLength / 2, view32[4] / 2);\n    const data =\n        view32[5] === 2\n            ? slice16(view16, (headerLength + view32[4]) / 2)\n            : slice32(view32, Math.ceil((headerLength + view32[4]) / 4));\n\n    return new Trie(view32[0], view32[1], view32[2], view32[3], index, data);\n};\n\nexport class Trie {\n    initialValue: int;\n    errorValue: int;\n    highStart: int;\n    highValueIndex: int;\n    index: Uint16Array | number[];\n    data: Uint32Array | Uint16Array | number[];\n\n    constructor(\n        initialValue: int,\n        errorValue: int,\n        highStart: int,\n        highValueIndex: int,\n        index: Uint16Array | number[],\n        data: Uint32Array | Uint16Array | number[]\n    ) {\n        this.initialValue = initialValue;\n        this.errorValue = errorValue;\n        this.highStart = highStart;\n        this.highValueIndex = highValueIndex;\n        this.index = index;\n        this.data = data;\n    }\n\n    /**\n     * Get the value for a code point as stored in the Trie.\n     *\n     * @param codePoint the code point\n     * @return the value\n     */\n    get(codePoint: number): number {\n        let ix;\n        if (codePoint >= 0) {\n            if (codePoint < 0x0d800 || (codePoint > 0x0dbff && codePoint <= 0x0ffff)) {\n                // Ordinary BMP code point, excluding leading surrogates.\n                // BMP uses a single level lookup.  BMP index starts at offset 0 in the Trie2 index.\n                // 16 bit data is stored in the index array itself.\n                ix = this.index[codePoint >> UTRIE2_SHIFT_2];\n                ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);\n                return this.data[ix];\n            }\n\n            if (codePoint <= 0xffff) {\n                // Lead Surrogate Code Point.  A Separate index section is stored for\n                // lead surrogate code units and code points.\n                //   The main index has the code unit data.\n                //   For this function, we need the code point data.\n                // Note: this expression could be refactored for slightly improved efficiency, but\n                //       surrogate code points will be so rare in practice that it's not worth it.\n                ix = this.index[UTRIE2_LSCP_INDEX_2_OFFSET + ((codePoint - 0xd800) >> UTRIE2_SHIFT_2)];\n                ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);\n                return this.data[ix];\n            }\n\n            if (codePoint < this.highStart) {\n                // Supplemental code point, use two-level lookup.\n                ix = UTRIE2_INDEX_1_OFFSET - UTRIE2_OMITTED_BMP_INDEX_1_LENGTH + (codePoint >> UTRIE2_SHIFT_1);\n                ix = this.index[ix];\n                ix += (codePoint >> UTRIE2_SHIFT_2) & UTRIE2_INDEX_2_MASK;\n                ix = this.index[ix];\n                ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);\n                return this.data[ix];\n            }\n            if (codePoint <= 0x10ffff) {\n                return this.data[this.highValueIndex];\n            }\n        }\n\n        // Fall through.  The code point is outside of the legal range of 0..0x10ffff.\n        return this.errorValue;\n    }\n}\n","import {base64, byteLength} from './grapheme-break-trie';\nimport {createTrieFromBase64} from 'utrie';\n\nconst Other = 0;\nconst Prepend = 1;\nconst CR = 2;\nconst LF = 3;\nconst Control = 4;\nconst Extend = 5;\nconst Regional_Indicator = 6;\nconst SpacingMark = 7;\nconst L = 8;\nconst V = 9;\nconst T = 10;\nconst LV = 11;\nconst LVT = 12;\nconst ZWJ = 13;\nconst Extended_Pictographic = 14;\nconst RI = 15;\n\nexport const classes: {[key: string]: number} = {\n    Other,\n    Prepend,\n    CR,\n    LF,\n    Control,\n    Extend,\n    Regional_Indicator,\n    SpacingMark,\n    L,\n    V,\n    T,\n    LV,\n    LVT,\n    ZWJ,\n    Extended_Pictographic,\n    RI,\n};\n\nexport const toCodePoints = (str: string): number[] => {\n    const codePoints = [];\n    let i = 0;\n    const length = str.length;\n    while (i < length) {\n        const value = str.charCodeAt(i++);\n        if (value >= 0xd800 && value <= 0xdbff && i < length) {\n            const extra = str.charCodeAt(i++);\n            if ((extra & 0xfc00) === 0xdc00) {\n                codePoints.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000);\n            } else {\n                codePoints.push(value);\n                i--;\n            }\n        } else {\n            codePoints.push(value);\n        }\n    }\n    return codePoints;\n};\n\nexport const fromCodePoint = (...codePoints: number[]): string => {\n    if (String.fromCodePoint) {\n        return String.fromCodePoint(...codePoints);\n    }\n\n    const length = codePoints.length;\n    if (!length) {\n        return '';\n    }\n\n    const codeUnits = [];\n\n    let index = -1;\n    let result = '';\n    while (++index < length) {\n        let codePoint = codePoints[index];\n        if (codePoint <= 0xffff) {\n            codeUnits.push(codePoint);\n        } else {\n            codePoint -= 0x10000;\n            codeUnits.push((codePoint >> 10) + 0xd800, (codePoint % 0x400) + 0xdc00);\n        }\n        if (index + 1 === length || codeUnits.length > 0x4000) {\n            result += String.fromCharCode(...codeUnits);\n            codeUnits.length = 0;\n        }\n    }\n    return result;\n};\n\nexport const UnicodeTrie = createTrieFromBase64(base64, byteLength);\n\nexport const BREAK_NOT_ALLOWED = '×';\nexport const BREAK_ALLOWED = '÷';\n\nexport type BREAK_OPPORTUNITIES = typeof BREAK_NOT_ALLOWED | typeof BREAK_ALLOWED;\n\nexport const codePointToClass = (codePoint: number): number => UnicodeTrie.get(codePoint);\n\nconst _graphemeBreakAtIndex = (_codePoints: number[], classTypes: number[], index: number): BREAK_OPPORTUNITIES => {\n    let prevIndex = index - 2;\n    let prev = classTypes[prevIndex];\n    const current = classTypes[index - 1];\n    const next = classTypes[index];\n    // GB3 Do not break between a CR and LF\n    if (current === CR && next === LF) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // GB4 Otherwise, break before and after controls.\n    if (current === CR || current === LF || current === Control) {\n        return BREAK_ALLOWED;\n    }\n\n    // GB5\n    if (next === CR || next === LF || next === Control) {\n        return BREAK_ALLOWED;\n    }\n\n    // Do not break Hangul syllable sequences.\n    // GB6\n    if (current === L && [L, V, LV, LVT].indexOf(next) !== -1) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // GB7\n    if ((current === LV || current === V) && (next === V || next === T)) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // GB8\n    if ((current === LVT || current === T) && next === T) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // GB9 Do not break before extending characters or ZWJ.\n    if (next === ZWJ || next === Extend) {\n        return BREAK_NOT_ALLOWED;\n    }\n    // Do not break before SpacingMarks, or after Prepend characters.\n    // GB9a\n    if (next === SpacingMark) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // GB9a\n    if (current === Prepend) {\n        return BREAK_NOT_ALLOWED;\n    }\n\n    // GB11 Do not break within emoji modifier sequences or emoji zwj sequences.\n    if (current === ZWJ && next === Extended_Pictographic) {\n        while (prev === Extend) {\n            prev = classTypes[--prevIndex];\n        }\n        if (prev === Extended_Pictographic) {\n            return BREAK_NOT_ALLOWED;\n        }\n    }\n\n    // GB12 Do not break within emoji flag sequences.\n    // That is, do not break between regional indicator (RI) symbols\n    // if there is an odd number of RI characters before the break point.\n    if (current === RI && next === RI) {\n        let countRI = 0;\n        while (prev === RI) {\n            countRI++;\n            prev = classTypes[--prevIndex];\n        }\n        if (countRI % 2 === 0) {\n            return BREAK_NOT_ALLOWED;\n        }\n    }\n\n    return BREAK_ALLOWED;\n};\n\nexport const graphemeBreakAtIndex = (codePoints: number[], index: number): BREAK_OPPORTUNITIES => {\n    // GB1 Break at the start and end of text, unless the text is empty.\n    if (index === 0) {\n        return BREAK_ALLOWED;\n    }\n\n    // GB2\n    if (index >= codePoints.length) {\n        return BREAK_ALLOWED;\n    }\n\n    const classTypes = codePoints.map(codePointToClass);\n    return _graphemeBreakAtIndex(codePoints, classTypes, index);\n};\n\nexport const GraphemeBreaker = (str: string) => {\n    const codePoints = toCodePoints(str);\n    const length = codePoints.length;\n    let index = 0;\n    let lastEnd = 0;\n    const classTypes = codePoints.map(codePointToClass);\n\n    return {\n        next: () => {\n            if (index >= length) {\n                return {done: true, value: null};\n            }\n\n            let graphemeBreak = BREAK_NOT_ALLOWED;\n            while (\n                index < length &&\n                (graphemeBreak = _graphemeBreakAtIndex(codePoints, classTypes, ++index)) === BREAK_NOT_ALLOWED\n            ) {}\n\n            if (graphemeBreak !== BREAK_NOT_ALLOWED || index === length) {\n                const value = fromCodePoint.apply(null, codePoints.slice(lastEnd, index));\n                lastEnd = index;\n                return {value, done: false};\n            }\n\n            return {done: true, value: null};\n            while (index < length) {}\n\n            return {done: true, value: null};\n        },\n    };\n};\n\nexport const splitGraphemes = (str: string): string[] => {\n    const breaker = GraphemeBreaker(str);\n\n    const graphemes = [];\n    let bk;\n\n    while (!(bk = breaker.next()).done) {\n        if (bk.value) {\n            graphemes.push(bk.value.slice());\n        }\n    }\n\n    return graphemes;\n};\n","import {Bounds} from '../css/layout/bounds';\nimport {\n    isBodyElement,\n    isCanvasElement,\n    isCustomElement,\n    isElementNode,\n    isHTMLElementNode,\n    isIFrameElement,\n    isImageElement,\n    isScriptElement,\n    isSelectElement,\n    isSlotElement,\n    isStyleElement,\n    isSVGElementNode,\n    isTextareaElement,\n    isTextNode,\n    isVideoElement\n} from './node-parser';\nimport {isIdentToken, nonFunctionArgSeparator} from '../css/syntax/parser';\nimport {TokenType} from '../css/syntax/tokenizer';\nimport {CounterState, createCounterText} from '../css/types/functions/counter';\nimport {LIST_STYLE_TYPE, listStyleType} from '../css/property-descriptors/list-style-type';\nimport {CSSParsedCounterDeclaration, CSSParsedPseudoDeclaration} from '../css/index';\nimport {getQuote} from '../css/property-descriptors/quotes';\nimport {Context} from '../core/context';\nimport {DebuggerType, isDebugging} from '../core/debugger';\n\nexport interface CloneOptions {\n    ignoreElements?: (element: Element) => boolean;\n    onclone?: (document: Document, element: HTMLElement) => void;\n    allowTaint?: boolean;\n}\n\nexport interface WindowOptions {\n    scrollX: number;\n    scrollY: number;\n    windowWidth: number;\n    windowHeight: number;\n}\n\nexport type CloneConfigurations = CloneOptions & {\n    inlineImages: boolean;\n    copyStyles: boolean;\n};\n\nconst IGNORE_ATTRIBUTE = 'data-html2canvas-ignore';\n\nexport class DocumentCloner {\n    private readonly scrolledElements: [Element, number, number][];\n    private readonly referenceElement: HTMLElement;\n    clonedReferenceElement?: HTMLElement;\n    private readonly documentElement: HTMLElement;\n    private readonly counters: CounterState;\n    private quoteDepth: number;\n\n    constructor(\n        private readonly context: Context,\n        element: HTMLElement,\n        private readonly options: CloneConfigurations\n    ) {\n        this.scrolledElements = [];\n        this.referenceElement = element;\n        this.counters = new CounterState();\n        this.quoteDepth = 0;\n        if (!element.ownerDocument) {\n            throw new Error('Cloned element does not have an owner document');\n        }\n\n        this.documentElement = this.cloneNode(element.ownerDocument.documentElement, false) as HTMLElement;\n    }\n\n    toIFrame(ownerDocument: Document, windowSize: Bounds): Promise<HTMLIFrameElement> {\n        const iframe: HTMLIFrameElement = createIFrameContainer(ownerDocument, windowSize);\n\n        if (!iframe.contentWindow) {\n            return Promise.reject(`Unable to find iframe window`);\n        }\n\n        const scrollX = (ownerDocument.defaultView as Window).pageXOffset;\n        const scrollY = (ownerDocument.defaultView as Window).pageYOffset;\n\n        const cloneWindow = iframe.contentWindow;\n        const documentClone: Document = cloneWindow.document;\n\n        /* Chrome doesn't detect relative background-images assigned in inline <style> sheets when fetched through getComputedStyle\n         if window url is about:blank, we can assign the url to current by writing onto the document\n         */\n\n        const iframeLoad = iframeLoader(iframe).then(async () => {\n            this.scrolledElements.forEach(restoreNodeScroll);\n            if (cloneWindow) {\n                cloneWindow.scrollTo(windowSize.left, windowSize.top);\n                if (\n                    /(iPad|iPhone|iPod)/g.test(navigator.userAgent) &&\n                    (cloneWindow.scrollY !== windowSize.top || cloneWindow.scrollX !== windowSize.left)\n                ) {\n                    this.context.logger.warn('Unable to restore scroll position for cloned document');\n                    this.context.windowBounds = this.context.windowBounds.add(\n                        cloneWindow.scrollX - windowSize.left,\n                        cloneWindow.scrollY - windowSize.top,\n                        0,\n                        0\n                    );\n                }\n            }\n\n            const onclone = this.options.onclone;\n\n            const referenceElement = this.clonedReferenceElement;\n\n            if (typeof referenceElement === 'undefined') {\n                return Promise.reject(`Error finding the ${this.referenceElement.nodeName} in the cloned document`);\n            }\n\n            if (documentClone.fonts && documentClone.fonts.ready) {\n                await documentClone.fonts.ready;\n            }\n\n            if (/(AppleWebKit)/g.test(navigator.userAgent)) {\n                await imagesReady(documentClone);\n            }\n\n            if (typeof onclone === 'function') {\n                return Promise.resolve()\n                    .then(() => onclone(documentClone, referenceElement))\n                    .then(() => iframe);\n            }\n\n            return iframe;\n        });\n\n        documentClone.open();\n        documentClone.write(`${serializeDoctype(document.doctype)}<html></html>`);\n        // Chrome scrolls the parent document for some reason after the write to the cloned window???\n        restoreOwnerScroll(this.referenceElement.ownerDocument, scrollX, scrollY);\n        documentClone.replaceChild(documentClone.adoptNode(this.documentElement), documentClone.documentElement);\n        documentClone.close();\n\n        return iframeLoad;\n    }\n\n    createElementClone<T extends HTMLElement | SVGElement>(node: T): HTMLElement | SVGElement {\n        if (isDebugging(node, DebuggerType.CLONE)) {\n            debugger;\n        }\n        if (isCanvasElement(node)) {\n            return this.createCanvasClone(node);\n        }\n        if (isVideoElement(node)) {\n            return this.createVideoClone(node);\n        }\n        if (isStyleElement(node)) {\n            return this.createStyleClone(node);\n        }\n\n        const clone = node.cloneNode(false) as T;\n        if (isImageElement(clone)) {\n            if (isImageElement(node) && node.currentSrc && node.currentSrc !== node.src) {\n                clone.src = node.currentSrc;\n                clone.srcset = '';\n            }\n\n            if (clone.loading === 'lazy') {\n                clone.loading = 'eager';\n            }\n        }\n\n        if (isCustomElement(clone)) {\n            return this.createCustomElementClone(clone);\n        }\n\n        return clone;\n    }\n\n    createCustomElementClone(node: HTMLElement): HTMLElement {\n        const clone = document.createElement('html2canvascustomelement');\n        copyCSSStyles(node.style, clone);\n\n        return clone;\n    }\n\n    createStyleClone(node: HTMLStyleElement): HTMLStyleElement {\n        try {\n            const sheet = node.sheet as CSSStyleSheet | undefined;\n            if (sheet && sheet.cssRules) {\n                const css: string = [].slice.call(sheet.cssRules, 0).reduce((css: string, rule: CSSRule) => {\n                    if (rule && typeof rule.cssText === 'string') {\n                        return css + rule.cssText;\n                    }\n                    return css;\n                }, '');\n                const style = node.cloneNode(false) as HTMLStyleElement;\n                style.textContent = css;\n                return style;\n            }\n        } catch (e) {\n            // accessing node.sheet.cssRules throws a DOMException\n            this.context.logger.error('Unable to access cssRules property', e);\n            if (e.name !== 'SecurityError') {\n                throw e;\n            }\n        }\n        return node.cloneNode(false) as HTMLStyleElement;\n    }\n\n    createCanvasClone(canvas: HTMLCanvasElement): HTMLImageElement | HTMLCanvasElement {\n        if (this.options.inlineImages && canvas.ownerDocument) {\n            const img = canvas.ownerDocument.createElement('img');\n            try {\n                img.src = canvas.toDataURL();\n                return img;\n            } catch (e) {\n                this.context.logger.info(`Unable to inline canvas contents, canvas is tainted`, canvas);\n            }\n        }\n\n        const clonedCanvas = canvas.cloneNode(false) as HTMLCanvasElement;\n\n        try {\n            clonedCanvas.width = canvas.width;\n            clonedCanvas.height = canvas.height;\n            const ctx = canvas.getContext('2d');\n            const clonedCtx = clonedCanvas.getContext('2d');\n            if (clonedCtx) {\n                if (!this.options.allowTaint && ctx) {\n                    clonedCtx.putImageData(ctx.getImageData(0, 0, canvas.width, canvas.height), 0, 0);\n                } else {\n                    const gl = canvas.getContext('webgl2') ?? canvas.getContext('webgl');\n                    if (gl) {\n                        const attribs = gl.getContextAttributes();\n                        if (attribs?.preserveDrawingBuffer === false) {\n                            this.context.logger.warn(\n                                'Unable to clone WebGL context as it has preserveDrawingBuffer=false',\n                                canvas\n                            );\n                        }\n                    }\n\n                    clonedCtx.drawImage(canvas, 0, 0);\n                }\n            }\n            return clonedCanvas;\n        } catch (e) {\n            this.context.logger.info(`Unable to clone canvas as it is tainted`, canvas);\n        }\n\n        return clonedCanvas;\n    }\n\n    createVideoClone(video: HTMLVideoElement): HTMLCanvasElement {\n        const canvas = video.ownerDocument.createElement('canvas');\n\n        canvas.width = video.offsetWidth;\n        canvas.height = video.offsetHeight;\n        const ctx = canvas.getContext('2d');\n\n        try {\n            if (ctx) {\n                ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n                if (!this.options.allowTaint) {\n                    ctx.getImageData(0, 0, canvas.width, canvas.height);\n                }\n            }\n            return canvas;\n        } catch (e) {\n            this.context.logger.info(`Unable to clone video as it is tainted`, video);\n        }\n\n        const blankCanvas = video.ownerDocument.createElement('canvas');\n\n        blankCanvas.width = video.offsetWidth;\n        blankCanvas.height = video.offsetHeight;\n        return blankCanvas;\n    }\n\n    appendChildNode(clone: HTMLElement | SVGElement, child: Node, copyStyles: boolean): void {\n        if (\n            !isElementNode(child) ||\n            (!isScriptElement(child) &&\n                !child.hasAttribute(IGNORE_ATTRIBUTE) &&\n                (typeof this.options.ignoreElements !== 'function' || !this.options.ignoreElements(child)))\n        ) {\n            if (!this.options.copyStyles || !isElementNode(child) || !isStyleElement(child)) {\n                clone.appendChild(this.cloneNode(child, copyStyles));\n            }\n        }\n    }\n\n    cloneChildNodes(node: Element, clone: HTMLElement | SVGElement, copyStyles: boolean): void {\n        for (\n            let child = node.shadowRoot ? node.shadowRoot.firstChild : node.firstChild;\n            child;\n            child = child.nextSibling\n        ) {\n            if (isElementNode(child) && isSlotElement(child) && typeof child.assignedNodes === 'function') {\n                const assignedNodes = child.assignedNodes() as ChildNode[];\n                if (assignedNodes.length) {\n                    assignedNodes.forEach((assignedNode) => this.appendChildNode(clone, assignedNode, copyStyles));\n                }\n            } else {\n                this.appendChildNode(clone, child, copyStyles);\n            }\n        }\n    }\n\n    cloneNode(node: Node, copyStyles: boolean): Node {\n        if (isTextNode(node)) {\n            return document.createTextNode(node.data);\n        }\n\n        if (!node.ownerDocument) {\n            return node.cloneNode(false);\n        }\n\n        const window = node.ownerDocument.defaultView;\n\n        if (window && isElementNode(node) && (isHTMLElementNode(node) || isSVGElementNode(node))) {\n            const clone = this.createElementClone(node);\n            clone.style.transitionProperty = 'none';\n\n            const style = window.getComputedStyle(node);\n            const styleBefore = window.getComputedStyle(node, ':before');\n            const styleAfter = window.getComputedStyle(node, ':after');\n\n            if (this.referenceElement === node && isHTMLElementNode(clone)) {\n                this.clonedReferenceElement = clone;\n            }\n            if (isBodyElement(clone)) {\n                createPseudoHideStyles(clone);\n            }\n\n            const counters = this.counters.parse(new CSSParsedCounterDeclaration(this.context, style));\n            const before = this.resolvePseudoContent(node, clone, styleBefore, PseudoElementType.BEFORE);\n\n            if (isCustomElement(node)) {\n                copyStyles = true;\n            }\n\n            if (!isVideoElement(node)) {\n                this.cloneChildNodes(node, clone, copyStyles);\n            }\n\n            if (before) {\n                clone.insertBefore(before, clone.firstChild);\n            }\n\n            const after = this.resolvePseudoContent(node, clone, styleAfter, PseudoElementType.AFTER);\n            if (after) {\n                clone.appendChild(after);\n            }\n\n            this.counters.pop(counters);\n\n            if (\n                (style && (this.options.copyStyles || isSVGElementNode(node)) && !isIFrameElement(node)) ||\n                copyStyles\n            ) {\n                copyCSSStyles(style, clone);\n            }\n\n            if (node.scrollTop !== 0 || node.scrollLeft !== 0) {\n                this.scrolledElements.push([clone, node.scrollLeft, node.scrollTop]);\n            }\n\n            if (\n                (isTextareaElement(node) || isSelectElement(node)) &&\n                (isTextareaElement(clone) || isSelectElement(clone))\n            ) {\n                clone.value = node.value;\n            }\n\n            return clone;\n        }\n\n        return node.cloneNode(false);\n    }\n\n    resolvePseudoContent(\n        node: Element,\n        clone: Element,\n        style: CSSStyleDeclaration,\n        pseudoElt: PseudoElementType\n    ): HTMLElement | void {\n        if (!style) {\n            return;\n        }\n\n        const value = style.content;\n        const document = clone.ownerDocument;\n        if (!document || !value || value === 'none' || value === '-moz-alt-content' || style.display === 'none') {\n            return;\n        }\n\n        this.counters.parse(new CSSParsedCounterDeclaration(this.context, style));\n        const declaration = new CSSParsedPseudoDeclaration(this.context, style);\n\n        const anonymousReplacedElement = document.createElement('html2canvaspseudoelement');\n        copyCSSStyles(style, anonymousReplacedElement);\n\n        declaration.content.forEach((token) => {\n            if (token.type === TokenType.STRING_TOKEN) {\n                anonymousReplacedElement.appendChild(document.createTextNode(token.value));\n            } else if (token.type === TokenType.URL_TOKEN) {\n                const img = document.createElement('img');\n                img.src = token.value;\n                img.style.opacity = '1';\n                anonymousReplacedElement.appendChild(img);\n            } else if (token.type === TokenType.FUNCTION) {\n                if (token.name === 'attr') {\n                    const attr = token.values.filter(isIdentToken);\n                    if (attr.length) {\n                        anonymousReplacedElement.appendChild(\n                            document.createTextNode(node.getAttribute(attr[0].value) || '')\n                        );\n                    }\n                } else if (token.name === 'counter') {\n                    const [counter, counterStyle] = token.values.filter(nonFunctionArgSeparator);\n                    if (counter && isIdentToken(counter)) {\n                        const counterState = this.counters.getCounterValue(counter.value);\n                        const counterType =\n                            counterStyle && isIdentToken(counterStyle)\n                                ? listStyleType.parse(this.context, counterStyle.value)\n                                : LIST_STYLE_TYPE.DECIMAL;\n\n                        anonymousReplacedElement.appendChild(\n                            document.createTextNode(createCounterText(counterState, counterType, false))\n                        );\n                    }\n                } else if (token.name === 'counters') {\n                    const [counter, delim, counterStyle] = token.values.filter(nonFunctionArgSeparator);\n                    if (counter && isIdentToken(counter)) {\n                        const counterStates = this.counters.getCounterValues(counter.value);\n                        const counterType =\n                            counterStyle && isIdentToken(counterStyle)\n                                ? listStyleType.parse(this.context, counterStyle.value)\n                                : LIST_STYLE_TYPE.DECIMAL;\n                        const separator = delim && delim.type === TokenType.STRING_TOKEN ? delim.value : '';\n                        const text = counterStates\n                            .map((value) => createCounterText(value, counterType, false))\n                            .join(separator);\n\n                        anonymousReplacedElement.appendChild(document.createTextNode(text));\n                    }\n                } else {\n                    //   console.log('FUNCTION_TOKEN', token);\n                }\n            } else if (token.type === TokenType.IDENT_TOKEN) {\n                switch (token.value) {\n                    case 'open-quote':\n                        anonymousReplacedElement.appendChild(\n                            document.createTextNode(getQuote(declaration.quotes, this.quoteDepth++, true))\n                        );\n                        break;\n                    case 'close-quote':\n                        anonymousReplacedElement.appendChild(\n                            document.createTextNode(getQuote(declaration.quotes, --this.quoteDepth, false))\n                        );\n                        break;\n                    default:\n                        // safari doesn't parse string tokens correctly because of lack of quotes\n                        anonymousReplacedElement.appendChild(document.createTextNode(token.value));\n                }\n            }\n        });\n\n        anonymousReplacedElement.className = `${PSEUDO_HIDE_ELEMENT_CLASS_BEFORE} ${PSEUDO_HIDE_ELEMENT_CLASS_AFTER}`;\n        const newClassName =\n            pseudoElt === PseudoElementType.BEFORE\n                ? ` ${PSEUDO_HIDE_ELEMENT_CLASS_BEFORE}`\n                : ` ${PSEUDO_HIDE_ELEMENT_CLASS_AFTER}`;\n\n        if (isSVGElementNode(clone)) {\n            clone.className.baseValue += newClassName;\n        } else {\n            clone.className += newClassName;\n        }\n\n        return anonymousReplacedElement;\n    }\n\n    static destroy(container: HTMLIFrameElement): boolean {\n        if (container.parentNode) {\n            container.parentNode.removeChild(container);\n            return true;\n        }\n        return false;\n    }\n}\n\nenum PseudoElementType {\n    BEFORE,\n    AFTER\n}\n\nconst createIFrameContainer = (ownerDocument: Document, bounds: Bounds): HTMLIFrameElement => {\n    const cloneIframeContainer = ownerDocument.createElement('iframe');\n\n    cloneIframeContainer.className = 'html2canvas-container';\n    cloneIframeContainer.style.visibility = 'hidden';\n    cloneIframeContainer.style.position = 'fixed';\n    cloneIframeContainer.style.left = '-10000px';\n    cloneIframeContainer.style.top = '0px';\n    cloneIframeContainer.style.border = '0';\n    cloneIframeContainer.width = bounds.width.toString();\n    cloneIframeContainer.height = bounds.height.toString();\n    cloneIframeContainer.scrolling = 'no'; // ios won't scroll without it\n    cloneIframeContainer.setAttribute(IGNORE_ATTRIBUTE, 'true');\n    ownerDocument.body.appendChild(cloneIframeContainer);\n\n    return cloneIframeContainer;\n};\n\nconst imageReady = (img: HTMLImageElement): Promise<Event | void | string> => {\n    return new Promise((resolve) => {\n        if (img.complete) {\n            resolve();\n            return;\n        }\n        if (!img.src) {\n            resolve();\n            return;\n        }\n        img.onload = resolve;\n        img.onerror = resolve;\n    });\n};\n\nconst imagesReady = (document: HTMLDocument): Promise<unknown[]> => {\n    return Promise.all([].slice.call(document.images, 0).map(imageReady));\n};\n\nconst iframeLoader = (iframe: HTMLIFrameElement): Promise<HTMLIFrameElement> => {\n    return new Promise((resolve, reject) => {\n        const cloneWindow = iframe.contentWindow;\n\n        if (!cloneWindow) {\n            return reject(`No window assigned for iframe`);\n        }\n\n        const documentClone = cloneWindow.document;\n\n        cloneWindow.onload = iframe.onload = () => {\n            cloneWindow.onload = iframe.onload = null;\n            const interval = setInterval(() => {\n                if (documentClone.body.childNodes.length > 0 && documentClone.readyState === 'complete') {\n                    clearInterval(interval);\n                    resolve(iframe);\n                }\n            }, 50);\n        };\n    });\n};\n\nconst ignoredStyleProperties = [\n    'all', // #2476\n    'd', // #2483\n    'content' // Safari shows pseudoelements if content is set\n];\n\nexport const copyCSSStyles = <T extends HTMLElement | SVGElement>(style: CSSStyleDeclaration, target: T): T => {\n    // Edge does not provide value for cssText\n    for (let i = style.length - 1; i >= 0; i--) {\n        const property = style.item(i);\n        if (ignoredStyleProperties.indexOf(property) === -1) {\n            target.style.setProperty(property, style.getPropertyValue(property));\n        }\n    }\n    return target;\n};\n\nconst serializeDoctype = (doctype?: DocumentType | null): string => {\n    let str = '';\n    if (doctype) {\n        str += '<!DOCTYPE ';\n        if (doctype.name) {\n            str += doctype.name;\n        }\n\n        if (doctype.internalSubset) {\n            str += doctype.internalSubset;\n        }\n\n        if (doctype.publicId) {\n            str += `\"${doctype.publicId}\"`;\n        }\n\n        if (doctype.systemId) {\n            str += `\"${doctype.systemId}\"`;\n        }\n\n        str += '>';\n    }\n\n    return str;\n};\n\nconst restoreOwnerScroll = (ownerDocument: Document | null, x: number, y: number) => {\n    if (\n        ownerDocument &&\n        ownerDocument.defaultView &&\n        (x !== ownerDocument.defaultView.pageXOffset || y !== ownerDocument.defaultView.pageYOffset)\n    ) {\n        ownerDocument.defaultView.scrollTo(x, y);\n    }\n};\n\nconst restoreNodeScroll = ([element, x, y]: [HTMLElement, number, number]) => {\n    element.scrollLeft = x;\n    element.scrollTop = y;\n};\n\nconst PSEUDO_BEFORE = ':before';\nconst PSEUDO_AFTER = ':after';\nconst PSEUDO_HIDE_ELEMENT_CLASS_BEFORE = '___html2canvas___pseudoelement_before';\nconst PSEUDO_HIDE_ELEMENT_CLASS_AFTER = '___html2canvas___pseudoelement_after';\n\nconst PSEUDO_HIDE_ELEMENT_STYLE = `{\n    content: \"\" !important;\n    display: none !important;\n}`;\n\nconst createPseudoHideStyles = (body: HTMLElement) => {\n    createStyles(\n        body,\n        `.${PSEUDO_HIDE_ELEMENT_CLASS_BEFORE}${PSEUDO_BEFORE}${PSEUDO_HIDE_ELEMENT_STYLE}\n         .${PSEUDO_HIDE_ELEMENT_CLASS_AFTER}${PSEUDO_AFTER}${PSEUDO_HIDE_ELEMENT_STYLE}`\n    );\n};\n\nconst createStyles = (body: HTMLElement, styles: string) => {\n    const document = body.ownerDocument;\n    if (document) {\n        const style = document.createElement('style');\n        style.textContent = styles;\n        body.appendChild(style);\n    }\n};\n","export const base64 =\n    'AAAAAAAAAAAAEA4AGBkAAFAaAAACAAAAAAAIABAAGAAwADgACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAAQABIAEQATAAIABAACAAQAAgAEAAIABAAVABcAAgAEAAIABAACAAQAGAAaABwAHgAgACIAI4AlgAIABAAmwCjAKgAsAC2AL4AvQDFAMoA0gBPAVYBWgEIAAgACACMANoAYgFkAWwBdAF8AX0BhQGNAZUBlgGeAaMBlQGWAasBswF8AbsBwwF0AcsBYwHTAQgA2wG/AOMBdAF8AekB8QF0AfkB+wHiAHQBfAEIAAMC5gQIAAsCEgIIAAgAFgIeAggAIgIpAggAMQI5AkACygEIAAgASAJQAlgCYAIIAAgACAAKBQoFCgUTBRMFGQUrBSsFCAAIAAgACAAIAAgACAAIAAgACABdAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABoAmgCrwGvAQgAbgJ2AggAHgEIAAgACADnAXsCCAAIAAgAgwIIAAgACAAIAAgACACKAggAkQKZAggAPADJAAgAoQKkAqwCsgK6AsICCADJAggA0AIIAAgACAAIANYC3gIIAAgACAAIAAgACABAAOYCCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAkASoB+QIEAAgACAA8AEMCCABCBQgACABJBVAFCAAIAAgACAAIAAgACAAIAAgACABTBVoFCAAIAFoFCABfBWUFCAAIAAgACAAIAAgAbQUIAAgACAAIAAgACABzBXsFfQWFBYoFigWKBZEFigWKBYoFmAWfBaYFrgWxBbkFCAAIAAgACAAIAAgACAAIAAgACAAIAMEFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAMgFCADQBQgACAAIAAgACAAIAAgACAAIAAgACAAIAO4CCAAIAAgAiQAIAAgACABAAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAD0AggACAD8AggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIANYFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAMDvwAIAAgAJAIIAAgACAAIAAgACAAIAAgACwMTAwgACAB9BOsEGwMjAwgAKwMyAwsFYgE3A/MEPwMIAEUDTQNRAwgAWQOsAGEDCAAIAAgACAAIAAgACABpAzQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFIQUoBSwFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABtAwgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABMAEwACAAIAAgACAAIABgACAAIAAgACAC/AAgACAAyAQgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACAAIAAwAAgACAAIAAgACAAIAAgACAAIAAAARABIAAgACAAIABQASAAIAAgAIABwAEAAjgCIABsAqAC2AL0AigDQAtwC+IJIQqVAZUBWQqVAZUBlQGVAZUBlQGrC5UBlQGVAZUBlQGVAZUBlQGVAXsKlQGVAbAK6wsrDGUMpQzlDJUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAfAKAAuZA64AtwCJALoC6ADwAAgAuACgA/oEpgO6AqsD+AAIAAgAswMIAAgACAAIAIkAuwP5AfsBwwPLAwgACAAIAAgACADRA9kDCAAIAOED6QMIAAgACAAIAAgACADuA/YDCAAIAP4DyQAIAAgABgQIAAgAXQAOBAgACAAIAAgACAAIABMECAAIAAgACAAIAAgACAD8AAQBCAAIAAgAGgQiBCoECAExBAgAEAEIAAgACAAIAAgACAAIAAgACAAIAAgACAA4BAgACABABEYECAAIAAgATAQYAQgAVAQIAAgACAAIAAgACAAIAAgACAAIAFoECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAOQEIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAB+BAcACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEABhgSMBAgACAAIAAgAlAQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAwAEAAQABAADAAMAAwADAAQABAAEAAQABAAEAAQABHATAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAdQMIAAgACAAIAAgACAAIAMkACAAIAAgAfQMIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACFA4kDCAAIAAgACAAIAOcBCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAIcDCAAIAAgACAAIAAgACAAIAAgACAAIAJEDCAAIAAgACADFAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABgBAgAZgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAbAQCBXIECAAIAHkECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABAAJwEQACjBKoEsgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAC6BMIECAAIAAgACAAIAAgACABmBAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAxwQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAGYECAAIAAgAzgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBd0FXwUIAOIF6gXxBYoF3gT5BQAGCAaKBYoFigWKBYoFigWKBYoFigWKBYoFigXWBIoFigWKBYoFigWKBYoFigWKBYsFEAaKBYoFigWKBYoFigWKBRQGCACKBYoFigWKBQgACAAIANEECAAIABgGigUgBggAJgYIAC4GMwaKBYoF0wQ3Bj4GigWKBYoFigWKBYoFigWKBYoFigWKBYoFigUIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWLBf///////wQABAAEAAQABAAEAAQABAAEAAQAAwAEAAQAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAQADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUAAAAFAAUAAAAFAAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAQAAAAUABQAFAAUABQAFAAAAAAAFAAUAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAFAAUAAQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAAABwAHAAcAAAAHAAcABwAFAAEAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAcABwAFAAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAQABAAAAAAAAAAAAAAAFAAUABQAFAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAHAAcAAAAHAAcAAAAAAAUABQAHAAUAAQAHAAEABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwABAAUABQAFAAUAAAAAAAAAAAAAAAEAAQABAAEAAQABAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABQANAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAABQAHAAUABQAFAAAAAAAAAAcABQAFAAUABQAFAAQABAAEAAQABAAEAAQABAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUAAAAFAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAUAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAcABwAFAAcABwAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUABwAHAAUABQAFAAUAAAAAAAcABwAAAAAABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAAAAAAAAAAABQAFAAAAAAAFAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAFAAUABQAFAAUAAAAFAAUABwAAAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABwAFAAUABQAFAAAAAAAHAAcAAAAAAAcABwAFAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAAAAAAAAAHAAcABwAAAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAUABQAFAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAHAAcABQAHAAcAAAAFAAcABwAAAAcABwAFAAUAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAcABwAFAAUABQAAAAUAAAAHAAcABwAHAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAHAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUAAAAFAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAUAAAAFAAUAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABwAFAAUABQAFAAUABQAAAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABQAFAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAFAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAHAAUABQAFAAUABQAFAAUABwAHAAcABwAHAAcABwAHAAUABwAHAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABwAHAAcABwAFAAUABwAHAAcAAAAAAAAAAAAHAAcABQAHAAcABwAHAAcABwAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAUABQAFAAUABQAFAAUAAAAFAAAABQAAAAAABQAFAAUABQAFAAUABQAFAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAUABQAFAAUABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABwAFAAcABwAHAAcABwAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAUABQAFAAUABwAHAAUABQAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABQAFAAcABwAHAAUABwAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAcABQAFAAUABQAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAAAAAABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAUABQAHAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAFAAUABQAFAAcABwAFAAUABwAHAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAcABwAFAAUABwAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABQAAAAAABQAFAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAcABwAAAAAAAAAAAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAcABwAFAAcABwAAAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAFAAUABQAAAAUABQAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABwAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAHAAcABQAHAAUABQAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAAABwAHAAAAAAAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAFAAUABwAFAAcABwAFAAcABQAFAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAAAAAABwAHAAcABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAFAAcABwAFAAUABQAFAAUABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAUABQAFAAcABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABQAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAAAAAAFAAUABwAHAAcABwAFAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAHAAUABQAFAAUABQAFAAUABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAABQAAAAUABQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAHAAcAAAAFAAUAAAAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABQAFAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAABQAFAAUABQAFAAUABQAAAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAFAAUABQAFAAUADgAOAA4ADgAOAA4ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAMAAwADAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAAAAAAAAAAAAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAAAAAAAAAAAAsADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwACwAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAADgAOAA4AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAAAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4AAAAOAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAAAAAAAAAAAA4AAAAOAAAAAAAAAAAADgAOAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAA=';\nexport const byteLength = 19616;\n","import {fromCodePoint, toCodePoints} from 'css-line-break';\n\nconst testRangeBounds = (document: Document) => {\n    const TEST_HEIGHT = 123;\n\n    if (document.createRange) {\n        const range = document.createRange();\n        if (range.getBoundingClientRect) {\n            const testElement = document.createElement('boundtest');\n            testElement.style.height = `${TEST_HEIGHT}px`;\n            testElement.style.display = 'block';\n            document.body.appendChild(testElement);\n\n            range.selectNode(testElement);\n            const rangeBounds = range.getBoundingClientRect();\n            const rangeHeight = Math.round(rangeBounds.height);\n            document.body.removeChild(testElement);\n            if (rangeHeight === TEST_HEIGHT) {\n                return true;\n            }\n        }\n    }\n\n    return false;\n};\n\nconst testIOSLineBreak = (document: Document) => {\n    const testElement = document.createElement('boundtest');\n    testElement.style.width = '50px';\n    testElement.style.display = 'block';\n    testElement.style.fontSize = '12px';\n    testElement.style.letterSpacing = '0px';\n    testElement.style.wordSpacing = '0px';\n    document.body.appendChild(testElement);\n    const range = document.createRange();\n\n    testElement.innerHTML = typeof ''.repeat === 'function' ? '&#128104;'.repeat(10) : '';\n\n    const node = testElement.firstChild as Text;\n\n    const textList = toCodePoints(node.data).map((i) => fromCodePoint(i));\n    let offset = 0;\n    let prev: DOMRect = {} as DOMRect;\n\n    // ios 13 does not handle range getBoundingClientRect line changes correctly #2177\n    const supports = textList.every((text, i) => {\n        range.setStart(node, offset);\n        range.setEnd(node, offset + text.length);\n        const rect = range.getBoundingClientRect();\n\n        offset += text.length;\n        const boundAhead = rect.x > prev.x || rect.y > prev.y;\n\n        prev = rect;\n        if (i === 0) {\n            return true;\n        }\n\n        return boundAhead;\n    });\n\n    document.body.removeChild(testElement);\n    return supports;\n};\n\nconst testCORS = (): boolean => typeof new Image().crossOrigin !== 'undefined';\n\nconst testResponseType = (): boolean => typeof new XMLHttpRequest().responseType === 'string';\n\nconst testSVG = (document: Document): boolean => {\n    const img = new Image();\n    const canvas = document.createElement('canvas');\n    const ctx = canvas.getContext('2d');\n    if (!ctx) {\n        return false;\n    }\n\n    img.src = `data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'></svg>`;\n\n    try {\n        ctx.drawImage(img, 0, 0);\n        canvas.toDataURL();\n    } catch (e) {\n        return false;\n    }\n    return true;\n};\n\nconst isGreenPixel = (data: Uint8ClampedArray): boolean =>\n    data[0] === 0 && data[1] === 255 && data[2] === 0 && data[3] === 255;\n\nconst testForeignObject = (document: Document): Promise<boolean> => {\n    const canvas = document.createElement('canvas');\n    const size = 100;\n    canvas.width = size;\n    canvas.height = size;\n    const ctx = canvas.getContext('2d');\n    if (!ctx) {\n        return Promise.reject(false);\n    }\n    ctx.fillStyle = 'rgb(0, 255, 0)';\n    ctx.fillRect(0, 0, size, size);\n\n    const img = new Image();\n    const greenImageSrc = canvas.toDataURL();\n    img.src = greenImageSrc;\n    const svg = createForeignObjectSVG(size, size, 0, 0, img);\n    ctx.fillStyle = 'red';\n    ctx.fillRect(0, 0, size, size);\n\n    return loadSerializedSVG(svg)\n        .then((img: HTMLImageElement) => {\n            ctx.drawImage(img, 0, 0);\n            const data = ctx.getImageData(0, 0, size, size).data;\n            ctx.fillStyle = 'red';\n            ctx.fillRect(0, 0, size, size);\n\n            const node = document.createElement('div');\n            node.style.backgroundImage = `url(${greenImageSrc})`;\n            node.style.height = `${size}px`;\n            // Firefox 55 does not render inline <img /> tags\n            return isGreenPixel(data)\n                ? loadSerializedSVG(createForeignObjectSVG(size, size, 0, 0, node))\n                : Promise.reject(false);\n        })\n        .then((img: HTMLImageElement) => {\n            ctx.drawImage(img, 0, 0);\n            // Edge does not render background-images\n            return isGreenPixel(ctx.getImageData(0, 0, size, size).data);\n        })\n        .catch(() => false);\n};\n\nexport const createForeignObjectSVG = (\n    width: number,\n    height: number,\n    x: number,\n    y: number,\n    node: Node\n): SVGForeignObjectElement => {\n    const xmlns = 'http://www.w3.org/2000/svg';\n    const svg = document.createElementNS(xmlns, 'svg');\n    const foreignObject = document.createElementNS(xmlns, 'foreignObject');\n    svg.setAttributeNS(null, 'width', width.toString());\n    svg.setAttributeNS(null, 'height', height.toString());\n\n    foreignObject.setAttributeNS(null, 'width', '100%');\n    foreignObject.setAttributeNS(null, 'height', '100%');\n    foreignObject.setAttributeNS(null, 'x', x.toString());\n    foreignObject.setAttributeNS(null, 'y', y.toString());\n    foreignObject.setAttributeNS(null, 'externalResourcesRequired', 'true');\n    svg.appendChild(foreignObject);\n\n    foreignObject.appendChild(node);\n\n    return svg;\n};\n\nexport const loadSerializedSVG = (svg: Node): Promise<HTMLImageElement> => {\n    return new Promise((resolve, reject) => {\n        const img = new Image();\n        img.onload = () => resolve(img);\n        img.onerror = reject;\n\n        img.src = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(new XMLSerializer().serializeToString(svg))}`;\n    });\n};\n\nexport const FEATURES = {\n    get SUPPORT_RANGE_BOUNDS(): boolean {\n        'use strict';\n        const value = testRangeBounds(document);\n        Object.defineProperty(FEATURES, 'SUPPORT_RANGE_BOUNDS', {value});\n        return value;\n    },\n    get SUPPORT_WORD_BREAKING(): boolean {\n        'use strict';\n        const value = FEATURES.SUPPORT_RANGE_BOUNDS && testIOSLineBreak(document);\n        Object.defineProperty(FEATURES, 'SUPPORT_WORD_BREAKING', {value});\n        return value;\n    },\n    get SUPPORT_SVG_DRAWING(): boolean {\n        'use strict';\n        const value = testSVG(document);\n        Object.defineProperty(FEATURES, 'SUPPORT_SVG_DRAWING', {value});\n        return value;\n    },\n    get SUPPORT_FOREIGNOBJECT_DRAWING(): Promise<boolean> {\n        'use strict';\n        const value =\n            typeof Array.from === 'function' && typeof window.fetch === 'function'\n                ? testForeignObject(document)\n                : Promise.resolve(false);\n        Object.defineProperty(FEATURES, 'SUPPORT_FOREIGNOBJECT_DRAWING', {value});\n        return value;\n    },\n    get SUPPORT_CORS_IMAGES(): boolean {\n        'use strict';\n        const value = testCORS();\n        Object.defineProperty(FEATURES, 'SUPPORT_CORS_IMAGES', {value});\n        return value;\n    },\n    get SUPPORT_RESPONSE_TYPE(): boolean {\n        'use strict';\n        const value = testResponseType();\n        Object.defineProperty(FEATURES, 'SUPPORT_RESPONSE_TYPE', {value});\n        return value;\n    },\n    get SUPPORT_CORS_XHR(): boolean {\n        'use strict';\n        const value = 'withCredentials' in new XMLHttpRequest();\n        Object.defineProperty(FEATURES, 'SUPPORT_CORS_XHR', {value});\n        return value;\n    },\n    get SUPPORT_NATIVE_TEXT_SEGMENTATION(): boolean {\n        'use strict';\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        const value = !!(typeof Intl !== 'undefined' && (Intl as any).Segmenter);\n        Object.defineProperty(FEATURES, 'SUPPORT_NATIVE_TEXT_SEGMENTATION', {value});\n        return value;\n    }\n};\n","import {OVERFLOW_WRAP} from '../property-descriptors/overflow-wrap';\nimport {CSSParsedDeclaration} from '../index';\nimport {fromCodePoint, LineBreaker, toCodePoints} from 'css-line-break';\nimport {splitGraphemes} from 'text-segmentation';\nimport {Bounds, parseBounds} from './bounds';\nimport {FEATURES} from '../../core/features';\nimport {Context} from '../../core/context';\n\nexport class TextBounds {\n    readonly text: string;\n    readonly bounds: Bounds;\n\n    constructor(text: string, bounds: Bounds) {\n        this.text = text;\n        this.bounds = bounds;\n    }\n}\n\nexport const parseTextBounds = (\n    context: Context,\n    value: string,\n    styles: CSSParsedDeclaration,\n    node: Text\n): TextBounds[] => {\n    const textList = breakText(value, styles);\n    const textBounds: TextBounds[] = [];\n    let offset = 0;\n    textList.forEach((text) => {\n        if (styles.textDecorationLine.length || text.trim().length > 0) {\n            if (FEATURES.SUPPORT_RANGE_BOUNDS) {\n                const clientRects = createRange(node, offset, text.length).getClientRects();\n                if (clientRects.length > 1) {\n                    const subSegments = segmentGraphemes(text);\n                    let subOffset = 0;\n                    subSegments.forEach((subSegment) => {\n                        textBounds.push(\n                            new TextBounds(\n                                subSegment,\n                                Bounds.fromDOMRectList(\n                                    context,\n                                    createRange(node, subOffset + offset, subSegment.length).getClientRects()\n                                )\n                            )\n                        );\n                        subOffset += subSegment.length;\n                    });\n                } else {\n                    textBounds.push(new TextBounds(text, Bounds.fromDOMRectList(context, clientRects)));\n                }\n            } else {\n                const replacementNode = node.splitText(text.length);\n                textBounds.push(new TextBounds(text, getWrapperBounds(context, node)));\n                node = replacementNode;\n            }\n        } else if (!FEATURES.SUPPORT_RANGE_BOUNDS) {\n            node = node.splitText(text.length);\n        }\n        offset += text.length;\n    });\n\n    return textBounds;\n};\n\nconst getWrapperBounds = (context: Context, node: Text): Bounds => {\n    const ownerDocument = node.ownerDocument;\n    if (ownerDocument) {\n        const wrapper = ownerDocument.createElement('html2canvaswrapper');\n        wrapper.appendChild(node.cloneNode(true));\n        const parentNode = node.parentNode;\n        if (parentNode) {\n            parentNode.replaceChild(wrapper, node);\n            const bounds = parseBounds(context, wrapper);\n            if (wrapper.firstChild) {\n                parentNode.replaceChild(wrapper.firstChild, wrapper);\n            }\n            return bounds;\n        }\n    }\n\n    return Bounds.EMPTY;\n};\n\nconst createRange = (node: Text, offset: number, length: number): Range => {\n    const ownerDocument = node.ownerDocument;\n    if (!ownerDocument) {\n        throw new Error('Node has no owner document');\n    }\n    const range = ownerDocument.createRange();\n    range.setStart(node, offset);\n    range.setEnd(node, offset + length);\n    return range;\n};\n\nexport const segmentGraphemes = (value: string): string[] => {\n    if (FEATURES.SUPPORT_NATIVE_TEXT_SEGMENTATION) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        const segmenter = new (Intl as any).Segmenter(void 0, {granularity: 'grapheme'});\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        return Array.from(segmenter.segment(value)).map((segment: any) => segment.segment);\n    }\n\n    return splitGraphemes(value);\n};\n\nconst segmentWords = (value: string, styles: CSSParsedDeclaration): string[] => {\n    if (FEATURES.SUPPORT_NATIVE_TEXT_SEGMENTATION) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        const segmenter = new (Intl as any).Segmenter(void 0, {\n            granularity: 'word'\n        });\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        return Array.from(segmenter.segment(value)).map((segment: any) => segment.segment);\n    }\n\n    return breakWords(value, styles);\n};\n\nconst breakText = (value: string, styles: CSSParsedDeclaration): string[] => {\n    return styles.letterSpacing !== 0 ? segmentGraphemes(value) : segmentWords(value, styles);\n};\n\n// https://drafts.csswg.org/css-text/#word-separator\nconst wordSeparators = [0x0020, 0x00a0, 0x1361, 0x10100, 0x10101, 0x1039, 0x1091];\n\nconst breakWords = (str: string, styles: CSSParsedDeclaration): string[] => {\n    const breaker = LineBreaker(str, {\n        lineBreak: styles.lineBreak,\n        wordBreak: styles.overflowWrap === OVERFLOW_WRAP.BREAK_WORD ? 'break-word' : styles.wordBreak\n    });\n\n    const words = [];\n    let bk;\n\n    while (!(bk = breaker.next()).done) {\n        if (bk.value) {\n            const value = bk.value.slice();\n            const codePoints = toCodePoints(value);\n            let word = '';\n            codePoints.forEach((codePoint) => {\n                if (wordSeparators.indexOf(codePoint) === -1) {\n                    word += fromCodePoint(codePoint);\n                } else {\n                    if (word.length) {\n                        words.push(word);\n                    }\n                    words.push(fromCodePoint(codePoint));\n                    word = '';\n                }\n            });\n\n            if (word.length) {\n                words.push(word);\n            }\n        }\n    }\n\n    return words;\n};\n","import {CSSParsedDeclaration} from '../css/index';\nimport {TEXT_TRANSFORM} from '../css/property-descriptors/text-transform';\nimport {parseTextBounds, TextBounds} from '../css/layout/text';\nimport {Context} from '../core/context';\n\nexport class TextContainer {\n    text: string;\n    textBounds: TextBounds[];\n\n    constructor(context: Context, node: Text, styles: CSSParsedDeclaration) {\n        this.text = transform(node.data, styles.textTransform);\n        this.textBounds = parseTextBounds(context, this.text, styles, node);\n    }\n}\n\nconst transform = (text: string, transform: TEXT_TRANSFORM) => {\n    switch (transform) {\n        case TEXT_TRANSFORM.LOWERCASE:\n            return text.toLowerCase();\n        case TEXT_TRANSFORM.CAPITALIZE:\n            return text.replace(CAPITALIZE, capitalize);\n        case TEXT_TRANSFORM.UPPERCASE:\n            return text.toUpperCase();\n        default:\n            return text;\n    }\n};\n\nconst CAPITALIZE = /(^|\\s|:|-|\\(|\\))([a-z])/g;\n\nconst capitalize = (m: string, p1: string, p2: string) => {\n    if (m.length > 0) {\n        return p1 + p2.toUpperCase();\n    }\n\n    return m;\n};\n","import {ElementContainer} from '../element-container';\nimport {Context} from '../../core/context';\n\nexport class ImageElementContainer extends ElementContainer {\n    src: string;\n    intrinsicWidth: number;\n    intrinsicHeight: number;\n\n    constructor(context: Context, img: HTMLImageElement) {\n        super(context, img);\n        this.src = img.currentSrc || img.src;\n        this.intrinsicWidth = img.naturalWidth;\n        this.intrinsicHeight = img.naturalHeight;\n        this.context.cache.addImage(this.src);\n    }\n}\n","import {ElementContainer} from '../element-container';\nimport {Context} from '../../core/context';\n\nexport class CanvasElementContainer extends ElementContainer {\n    canvas: HTMLCanvasElement;\n    intrinsicWidth: number;\n    intrinsicHeight: number;\n\n    constructor(context: Context, canvas: HTMLCanvasElement) {\n        super(context, canvas);\n        this.canvas = canvas;\n        this.intrinsicWidth = canvas.width;\n        this.intrinsicHeight = canvas.height;\n    }\n}\n","import {ElementContainer} from '../element-container';\nimport {parseBounds} from '../../css/layout/bounds';\nimport {Context} from '../../core/context';\n\nexport class SVGElementContainer extends ElementContainer {\n    svg: string;\n    intrinsicWidth: number;\n    intrinsicHeight: number;\n\n    constructor(context: Context, img: SVGSVGElement) {\n        super(context, img);\n        const s = new XMLSerializer();\n        const bounds = parseBounds(context, img);\n        img.setAttribute('width', `${bounds.width}px`);\n        img.setAttribute('height', `${bounds.height}px`);\n\n        this.svg = `data:image/svg+xml,${encodeURIComponent(s.serializeToString(img))}`;\n        this.intrinsicWidth = img.width.baseVal.value;\n        this.intrinsicHeight = img.height.baseVal.value;\n\n        this.context.cache.addImage(this.svg);\n    }\n}\n","import {ElementContainer} from '../element-container';\nimport {Context} from '../../core/context';\nexport class LIElementContainer extends ElementContainer {\n    readonly value: number;\n\n    constructor(context: Context, element: HTMLLIElement) {\n        super(context, element);\n        this.value = element.value;\n    }\n}\n","import {ElementContainer} from '../element-container';\nimport {Context} from '../../core/context';\nexport class OLElementContainer extends ElementContainer {\n    readonly start: number;\n    readonly reversed: boolean;\n\n    constructor(context: Context, element: HTMLOListElement) {\n        super(context, element);\n        this.start = element.start;\n        this.reversed = typeof element.reversed === 'boolean' && element.reversed === true;\n    }\n}\n","import {ElementContainer} from '../element-container';\nimport {BORDER_STYLE} from '../../css/property-descriptors/border-style';\nimport {BACKGROUND_CLIP} from '../../css/property-descriptors/background-clip';\nimport {BACKGROUND_ORIGIN} from '../../css/property-descriptors/background-origin';\nimport {TokenType} from '../../css/syntax/tokenizer';\nimport {LengthPercentageTuple} from '../../css/types/length-percentage';\nimport {Bounds} from '../../css/layout/bounds';\nimport {Context} from '../../core/context';\n\nconst CHECKBOX_BORDER_RADIUS: LengthPercentageTuple = [\n    {\n        type: TokenType.DIMENSION_TOKEN,\n        flags: 0,\n        unit: 'px',\n        number: 3\n    }\n];\n\nconst RADIO_BORDER_RADIUS: LengthPercentageTuple = [\n    {\n        type: TokenType.PERCENTAGE_TOKEN,\n        flags: 0,\n        number: 50\n    }\n];\n\nconst reformatInputBounds = (bounds: Bounds): Bounds => {\n    if (bounds.width > bounds.height) {\n        return new Bounds(bounds.left + (bounds.width - bounds.height) / 2, bounds.top, bounds.height, bounds.height);\n    } else if (bounds.width < bounds.height) {\n        return new Bounds(bounds.left, bounds.top + (bounds.height - bounds.width) / 2, bounds.width, bounds.width);\n    }\n    return bounds;\n};\n\nconst getInputValue = (node: HTMLInputElement): string => {\n    const value = node.type === PASSWORD ? new Array(node.value.length + 1).join('\\u2022') : node.value;\n\n    return value.length === 0 ? node.placeholder || '' : value;\n};\n\nexport const CHECKBOX = 'checkbox';\nexport const RADIO = 'radio';\nexport const PASSWORD = 'password';\nexport const INPUT_COLOR = 0x2a2a2aff;\n\nexport class InputElementContainer extends ElementContainer {\n    readonly type: string;\n    readonly checked: boolean;\n    readonly value: string;\n\n    constructor(context: Context, input: HTMLInputElement) {\n        super(context, input);\n        this.type = input.type.toLowerCase();\n        this.checked = input.checked;\n        this.value = getInputValue(input);\n\n        if (this.type === CHECKBOX || this.type === RADIO) {\n            this.styles.backgroundColor = 0xdededeff;\n            this.styles.borderTopColor =\n                this.styles.borderRightColor =\n                this.styles.borderBottomColor =\n                this.styles.borderLeftColor =\n                    0xa5a5a5ff;\n            this.styles.borderTopWidth =\n                this.styles.borderRightWidth =\n                this.styles.borderBottomWidth =\n                this.styles.borderLeftWidth =\n                    1;\n            this.styles.borderTopStyle =\n                this.styles.borderRightStyle =\n                this.styles.borderBottomStyle =\n                this.styles.borderLeftStyle =\n                    BORDER_STYLE.SOLID;\n            this.styles.backgroundClip = [BACKGROUND_CLIP.BORDER_BOX];\n            this.styles.backgroundOrigin = [BACKGROUND_ORIGIN.BORDER_BOX];\n            this.bounds = reformatInputBounds(this.bounds);\n        }\n\n        switch (this.type) {\n            case CHECKBOX:\n                this.styles.borderTopRightRadius =\n                    this.styles.borderTopLeftRadius =\n                    this.styles.borderBottomRightRadius =\n                    this.styles.borderBottomLeftRadius =\n                        CHECKBOX_BORDER_RADIUS;\n                break;\n            case RADIO:\n                this.styles.borderTopRightRadius =\n                    this.styles.borderTopLeftRadius =\n                    this.styles.borderBottomRightRadius =\n                    this.styles.borderBottomLeftRadius =\n                        RADIO_BORDER_RADIUS;\n                break;\n        }\n    }\n}\n","import {ElementContainer} from '../element-container';\nimport {Context} from '../../core/context';\nexport class SelectElementContainer extends ElementContainer {\n    readonly value: string;\n    constructor(context: Context, element: HTMLSelectElement) {\n        super(context, element);\n        const option = element.options[element.selectedIndex || 0];\n        this.value = option ? option.text || '' : '';\n    }\n}\n","import {ElementContainer} from '../element-container';\nimport {Context} from '../../core/context';\nexport class TextareaElementContainer extends ElementContainer {\n    readonly value: string;\n    constructor(context: Context, element: HTMLTextAreaElement) {\n        super(context, element);\n        this.value = element.value;\n    }\n}\n","import {ElementContainer} from '../element-container';\nimport {parseTree} from '../node-parser';\nimport {Color, parseColor, COLORS, isTransparent} from '../../css/types/color';\nimport {Context} from '../../core/context';\n\nexport class IFrameElementContainer extends ElementContainer {\n    src: string;\n    width: number;\n    height: number;\n    tree?: ElementContainer;\n    backgroundColor: Color;\n\n    constructor(context: Context, iframe: HTMLIFrameElement) {\n        super(context, iframe);\n        this.src = iframe.src;\n        this.width = parseInt(iframe.width, 10) || 0;\n        this.height = parseInt(iframe.height, 10) || 0;\n        this.backgroundColor = this.styles.backgroundColor;\n        try {\n            if (\n                iframe.contentWindow &&\n                iframe.contentWindow.document &&\n                iframe.contentWindow.document.documentElement\n            ) {\n                this.tree = parseTree(context, iframe.contentWindow.document.documentElement);\n\n                // http://www.w3.org/TR/css3-background/#special-backgrounds\n                const documentBackgroundColor = iframe.contentWindow.document.documentElement\n                    ? parseColor(\n                          context,\n                          getComputedStyle(iframe.contentWindow.document.documentElement).backgroundColor as string\n                      )\n                    : COLORS.TRANSPARENT;\n                const bodyBackgroundColor = iframe.contentWindow.document.body\n                    ? parseColor(\n                          context,\n                          getComputedStyle(iframe.contentWindow.document.body).backgroundColor as string\n                      )\n                    : COLORS.TRANSPARENT;\n\n                this.backgroundColor = isTransparent(documentBackgroundColor)\n                    ? isTransparent(bodyBackgroundColor)\n                        ? this.styles.backgroundColor\n                        : bodyBackgroundColor\n                    : documentBackgroundColor;\n            }\n        } catch (e) {}\n    }\n}\n","import {CSSParsedDeclaration} from '../css';\nimport {ElementContainer, FLAGS} from './element-container';\nimport {TextContainer} from './text-container';\nimport {ImageElementContainer} from './replaced-elements/image-element-container';\nimport {CanvasElementContainer} from './replaced-elements/canvas-element-container';\nimport {SVGElementContainer} from './replaced-elements/svg-element-container';\nimport {LIElementContainer} from './elements/li-element-container';\nimport {OLElementContainer} from './elements/ol-element-container';\nimport {InputElementContainer} from './replaced-elements/input-element-container';\nimport {SelectElementContainer} from './elements/select-element-container';\nimport {TextareaElementContainer} from './elements/textarea-element-container';\nimport {IFrameElementContainer} from './replaced-elements/iframe-element-container';\nimport {Context} from '../core/context';\n\nconst LIST_OWNERS = ['OL', 'UL', 'MENU'];\n\nconst parseNodeTree = (context: Context, node: Node, parent: ElementContainer, root: ElementContainer) => {\n    for (let childNode = node.firstChild, nextNode; childNode; childNode = nextNode) {\n        nextNode = childNode.nextSibling;\n\n        if (isTextNode(childNode) && childNode.data.trim().length > 0) {\n            parent.textNodes.push(new TextContainer(context, childNode, parent.styles));\n        } else if (isElementNode(childNode)) {\n            if (isSlotElement(childNode) && childNode.assignedNodes) {\n                childNode.assignedNodes().forEach((childNode) => parseNodeTree(context, childNode, parent, root));\n            } else {\n                const container = createContainer(context, childNode);\n                if (container.styles.isVisible()) {\n                    if (createsRealStackingContext(childNode, container, root)) {\n                        container.flags |= FLAGS.CREATES_REAL_STACKING_CONTEXT;\n                    } else if (createsStackingContext(container.styles)) {\n                        container.flags |= FLAGS.CREATES_STACKING_CONTEXT;\n                    }\n\n                    if (LIST_OWNERS.indexOf(childNode.tagName) !== -1) {\n                        container.flags |= FLAGS.IS_LIST_OWNER;\n                    }\n\n                    parent.elements.push(container);\n                    childNode.slot;\n                    if (childNode.shadowRoot) {\n                        parseNodeTree(context, childNode.shadowRoot, container, root);\n                    } else if (\n                        !isTextareaElement(childNode) &&\n                        !isSVGElement(childNode) &&\n                        !isSelectElement(childNode)\n                    ) {\n                        parseNodeTree(context, childNode, container, root);\n                    }\n                }\n            }\n        }\n    }\n};\n\nconst createContainer = (context: Context, element: Element): ElementContainer => {\n    if (isImageElement(element)) {\n        return new ImageElementContainer(context, element);\n    }\n\n    if (isCanvasElement(element)) {\n        return new CanvasElementContainer(context, element);\n    }\n\n    if (isSVGElement(element)) {\n        return new SVGElementContainer(context, element);\n    }\n\n    if (isLIElement(element)) {\n        return new LIElementContainer(context, element);\n    }\n\n    if (isOLElement(element)) {\n        return new OLElementContainer(context, element);\n    }\n\n    if (isInputElement(element)) {\n        return new InputElementContainer(context, element);\n    }\n\n    if (isSelectElement(element)) {\n        return new SelectElementContainer(context, element);\n    }\n\n    if (isTextareaElement(element)) {\n        return new TextareaElementContainer(context, element);\n    }\n\n    if (isIFrameElement(element)) {\n        return new IFrameElementContainer(context, element);\n    }\n\n    return new ElementContainer(context, element);\n};\n\nexport const parseTree = (context: Context, element: HTMLElement): ElementContainer => {\n    const container = createContainer(context, element);\n    container.flags |= FLAGS.CREATES_REAL_STACKING_CONTEXT;\n    parseNodeTree(context, element, container, container);\n    return container;\n};\n\nconst createsRealStackingContext = (node: Element, container: ElementContainer, root: ElementContainer): boolean => {\n    return (\n        container.styles.isPositionedWithZIndex() ||\n        container.styles.opacity < 1 ||\n        container.styles.isTransformed() ||\n        (isBodyElement(node) && root.styles.isTransparent())\n    );\n};\n\nconst createsStackingContext = (styles: CSSParsedDeclaration): boolean => styles.isPositioned() || styles.isFloating();\n\nexport const isTextNode = (node: Node): node is Text => node.nodeType === Node.TEXT_NODE;\nexport const isElementNode = (node: Node): node is Element => node.nodeType === Node.ELEMENT_NODE;\nexport const isHTMLElementNode = (node: Node): node is HTMLElement =>\n    isElementNode(node) && typeof (node as HTMLElement).style !== 'undefined' && !isSVGElementNode(node);\nexport const isSVGElementNode = (element: Element): element is SVGElement =>\n    typeof (element as SVGElement).className === 'object';\nexport const isLIElement = (node: Element): node is HTMLLIElement => node.tagName === 'LI';\nexport const isOLElement = (node: Element): node is HTMLOListElement => node.tagName === 'OL';\nexport const isInputElement = (node: Element): node is HTMLInputElement => node.tagName === 'INPUT';\nexport const isHTMLElement = (node: Element): node is HTMLHtmlElement => node.tagName === 'HTML';\nexport const isSVGElement = (node: Element): node is SVGSVGElement => node.tagName === 'svg';\nexport const isBodyElement = (node: Element): node is HTMLBodyElement => node.tagName === 'BODY';\nexport const isCanvasElement = (node: Element): node is HTMLCanvasElement => node.tagName === 'CANVAS';\nexport const isVideoElement = (node: Element): node is HTMLVideoElement => node.tagName === 'VIDEO';\nexport const isImageElement = (node: Element): node is HTMLImageElement => node.tagName === 'IMG';\nexport const isIFrameElement = (node: Element): node is HTMLIFrameElement => node.tagName === 'IFRAME';\nexport const isStyleElement = (node: Element): node is HTMLStyleElement => node.tagName === 'STYLE';\nexport const isScriptElement = (node: Element): node is HTMLScriptElement => node.tagName === 'SCRIPT';\nexport const isTextareaElement = (node: Element): node is HTMLTextAreaElement => node.tagName === 'TEXTAREA';\nexport const isSelectElement = (node: Element): node is HTMLSelectElement => node.tagName === 'SELECT';\nexport const isSlotElement = (node: Element): node is HTMLSlotElement => node.tagName === 'SLOT';\n// https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name\nexport const isCustomElement = (node: Element): node is HTMLElement => node.tagName.indexOf('-') > 0;\n","import {LIST_STYLE_TYPE} from '../../property-descriptors/list-style-type';\nimport {fromCodePoint} from 'css-line-break';\nimport {contains} from '../../../core/bitwise';\nimport {CSSParsedCounterDeclaration} from '../../index';\n\nexport class CounterState {\n    private readonly counters: {[key: string]: number[]} = {};\n\n    getCounterValue(name: string): number {\n        const counter = this.counters[name];\n\n        if (counter && counter.length) {\n            return counter[counter.length - 1];\n        }\n        return 1;\n    }\n\n    getCounterValues(name: string): readonly number[] {\n        const counter = this.counters[name];\n        return counter ? counter : [];\n    }\n\n    pop(counters: string[]): void {\n        counters.forEach((counter) => this.counters[counter].pop());\n    }\n\n    parse(style: CSSParsedCounterDeclaration): string[] {\n        const counterIncrement = style.counterIncrement;\n        const counterReset = style.counterReset;\n        let canReset = true;\n\n        if (counterIncrement !== null) {\n            counterIncrement.forEach((entry) => {\n                const counter = this.counters[entry.counter];\n                if (counter && entry.increment !== 0) {\n                    canReset = false;\n                    if (!counter.length) {\n                        counter.push(1);\n                    }\n                    counter[Math.max(0, counter.length - 1)] += entry.increment;\n                }\n            });\n        }\n\n        const counterNames: string[] = [];\n        if (canReset) {\n            counterReset.forEach((entry) => {\n                let counter = this.counters[entry.counter];\n                counterNames.push(entry.counter);\n                if (!counter) {\n                    counter = this.counters[entry.counter] = [];\n                }\n                counter.push(entry.reset);\n            });\n        }\n\n        return counterNames;\n    }\n}\n\ninterface CounterSymbols {\n    integers: number[];\n    values: string[];\n}\n\nconst ROMAN_UPPER: CounterSymbols = {\n    integers: [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1],\n    values: ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I']\n};\n\nconst ARMENIAN: CounterSymbols = {\n    integers: [\n        9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 900, 800, 700, 600, 500, 400, 300, 200, 100, 90, 80, 70,\n        60, 50, 40, 30, 20, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1\n    ],\n    values: [\n        'Ք',\n        'Փ',\n        'Ւ',\n        'Ց',\n        'Ր',\n        'Տ',\n        'Վ',\n        'Ս',\n        'Ռ',\n        'Ջ',\n        'Պ',\n        'Չ',\n        'Ո',\n        'Շ',\n        'Ն',\n        'Յ',\n        'Մ',\n        'Ճ',\n        'Ղ',\n        'Ձ',\n        'Հ',\n        'Կ',\n        'Ծ',\n        'Խ',\n        'Լ',\n        'Ի',\n        'Ժ',\n        'Թ',\n        'Ը',\n        'Է',\n        'Զ',\n        'Ե',\n        'Դ',\n        'Գ',\n        'Բ',\n        'Ա'\n    ]\n};\n\nconst HEBREW: CounterSymbols = {\n    integers: [\n        10000, 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 400, 300, 200, 100, 90, 80, 70, 60, 50, 40, 30, 20,\n        19, 18, 17, 16, 15, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1\n    ],\n    values: [\n        'י׳',\n        'ט׳',\n        'ח׳',\n        'ז׳',\n        'ו׳',\n        'ה׳',\n        'ד׳',\n        'ג׳',\n        'ב׳',\n        'א׳',\n        'ת',\n        'ש',\n        'ר',\n        'ק',\n        'צ',\n        'פ',\n        'ע',\n        'ס',\n        'נ',\n        'מ',\n        'ל',\n        'כ',\n        'יט',\n        'יח',\n        'יז',\n        'טז',\n        'טו',\n        'י',\n        'ט',\n        'ח',\n        'ז',\n        'ו',\n        'ה',\n        'ד',\n        'ג',\n        'ב',\n        'א'\n    ]\n};\n\nconst GEORGIAN: CounterSymbols = {\n    integers: [\n        10000, 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 900, 800, 700, 600, 500, 400, 300, 200, 100, 90,\n        80, 70, 60, 50, 40, 30, 20, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1\n    ],\n    values: [\n        'ჵ',\n        'ჰ',\n        'ჯ',\n        'ჴ',\n        'ხ',\n        'ჭ',\n        'წ',\n        'ძ',\n        'ც',\n        'ჩ',\n        'შ',\n        'ყ',\n        'ღ',\n        'ქ',\n        'ფ',\n        'ჳ',\n        'ტ',\n        'ს',\n        'რ',\n        'ჟ',\n        'პ',\n        'ო',\n        'ჲ',\n        'ნ',\n        'მ',\n        'ლ',\n        'კ',\n        'ი',\n        'თ',\n        'ჱ',\n        'ზ',\n        'ვ',\n        'ე',\n        'დ',\n        'გ',\n        'ბ',\n        'ა'\n    ]\n};\n\nconst createAdditiveCounter = (\n    value: number,\n    min: number,\n    max: number,\n    symbols: CounterSymbols,\n    fallback: LIST_STYLE_TYPE,\n    suffix: string\n) => {\n    if (value < min || value > max) {\n        return createCounterText(value, fallback, suffix.length > 0);\n    }\n\n    return (\n        symbols.integers.reduce((string, integer, index) => {\n            while (value >= integer) {\n                value -= integer;\n                string += symbols.values[index];\n            }\n            return string;\n        }, '') + suffix\n    );\n};\n\nconst createCounterStyleWithSymbolResolver = (\n    value: number,\n    codePointRangeLength: number,\n    isNumeric: boolean,\n    resolver: (codePoint: number) => string\n): string => {\n    let string = '';\n\n    do {\n        if (!isNumeric) {\n            value--;\n        }\n        string = resolver(value) + string;\n        value /= codePointRangeLength;\n    } while (value * codePointRangeLength >= codePointRangeLength);\n\n    return string;\n};\n\nconst createCounterStyleFromRange = (\n    value: number,\n    codePointRangeStart: number,\n    codePointRangeEnd: number,\n    isNumeric: boolean,\n    suffix: string\n): string => {\n    const codePointRangeLength = codePointRangeEnd - codePointRangeStart + 1;\n\n    return (\n        (value < 0 ? '-' : '') +\n        (createCounterStyleWithSymbolResolver(Math.abs(value), codePointRangeLength, isNumeric, (codePoint) =>\n            fromCodePoint(Math.floor(codePoint % codePointRangeLength) + codePointRangeStart)\n        ) +\n            suffix)\n    );\n};\n\nconst createCounterStyleFromSymbols = (value: number, symbols: string, suffix = '. '): string => {\n    const codePointRangeLength = symbols.length;\n    return (\n        createCounterStyleWithSymbolResolver(\n            Math.abs(value),\n            codePointRangeLength,\n            false,\n            (codePoint) => symbols[Math.floor(codePoint % codePointRangeLength)]\n        ) + suffix\n    );\n};\n\nconst CJK_ZEROS = 1 << 0;\nconst CJK_TEN_COEFFICIENTS = 1 << 1;\nconst CJK_TEN_HIGH_COEFFICIENTS = 1 << 2;\nconst CJK_HUNDRED_COEFFICIENTS = 1 << 3;\n\nconst createCJKCounter = (\n    value: number,\n    numbers: string,\n    multipliers: string,\n    negativeSign: string,\n    suffix: string,\n    flags: number\n): string => {\n    if (value < -9999 || value > 9999) {\n        return createCounterText(value, LIST_STYLE_TYPE.CJK_DECIMAL, suffix.length > 0);\n    }\n    let tmp = Math.abs(value);\n    let string = suffix;\n\n    if (tmp === 0) {\n        return numbers[0] + string;\n    }\n\n    for (let digit = 0; tmp > 0 && digit <= 4; digit++) {\n        const coefficient = tmp % 10;\n\n        if (coefficient === 0 && contains(flags, CJK_ZEROS) && string !== '') {\n            string = numbers[coefficient] + string;\n        } else if (\n            coefficient > 1 ||\n            (coefficient === 1 && digit === 0) ||\n            (coefficient === 1 && digit === 1 && contains(flags, CJK_TEN_COEFFICIENTS)) ||\n            (coefficient === 1 && digit === 1 && contains(flags, CJK_TEN_HIGH_COEFFICIENTS) && value > 100) ||\n            (coefficient === 1 && digit > 1 && contains(flags, CJK_HUNDRED_COEFFICIENTS))\n        ) {\n            string = numbers[coefficient] + (digit > 0 ? multipliers[digit - 1] : '') + string;\n        } else if (coefficient === 1 && digit > 0) {\n            string = multipliers[digit - 1] + string;\n        }\n        tmp = Math.floor(tmp / 10);\n    }\n\n    return (value < 0 ? negativeSign : '') + string;\n};\n\nconst CHINESE_INFORMAL_MULTIPLIERS = '十百千萬';\nconst CHINESE_FORMAL_MULTIPLIERS = '拾佰仟萬';\nconst JAPANESE_NEGATIVE = 'マイナス';\nconst KOREAN_NEGATIVE = '마이너스';\n\nexport const createCounterText = (value: number, type: LIST_STYLE_TYPE, appendSuffix: boolean): string => {\n    const defaultSuffix = appendSuffix ? '. ' : '';\n    const cjkSuffix = appendSuffix ? '、' : '';\n    const koreanSuffix = appendSuffix ? ', ' : '';\n    const spaceSuffix = appendSuffix ? ' ' : '';\n    switch (type) {\n        case LIST_STYLE_TYPE.DISC:\n            return '•' + spaceSuffix;\n        case LIST_STYLE_TYPE.CIRCLE:\n            return '◦' + spaceSuffix;\n        case LIST_STYLE_TYPE.SQUARE:\n            return '◾' + spaceSuffix;\n        case LIST_STYLE_TYPE.DECIMAL_LEADING_ZERO:\n            const string = createCounterStyleFromRange(value, 48, 57, true, defaultSuffix);\n            return string.length < 4 ? `0${string}` : string;\n        case LIST_STYLE_TYPE.CJK_DECIMAL:\n            return createCounterStyleFromSymbols(value, '〇一二三四五六七八九', cjkSuffix);\n        case LIST_STYLE_TYPE.LOWER_ROMAN:\n            return createAdditiveCounter(\n                value,\n                1,\n                3999,\n                ROMAN_UPPER,\n                LIST_STYLE_TYPE.DECIMAL,\n                defaultSuffix\n            ).toLowerCase();\n        case LIST_STYLE_TYPE.UPPER_ROMAN:\n            return createAdditiveCounter(value, 1, 3999, ROMAN_UPPER, LIST_STYLE_TYPE.DECIMAL, defaultSuffix);\n        case LIST_STYLE_TYPE.LOWER_GREEK:\n            return createCounterStyleFromRange(value, 945, 969, false, defaultSuffix);\n        case LIST_STYLE_TYPE.LOWER_ALPHA:\n            return createCounterStyleFromRange(value, 97, 122, false, defaultSuffix);\n        case LIST_STYLE_TYPE.UPPER_ALPHA:\n            return createCounterStyleFromRange(value, 65, 90, false, defaultSuffix);\n        case LIST_STYLE_TYPE.ARABIC_INDIC:\n            return createCounterStyleFromRange(value, 1632, 1641, true, defaultSuffix);\n        case LIST_STYLE_TYPE.ARMENIAN:\n        case LIST_STYLE_TYPE.UPPER_ARMENIAN:\n            return createAdditiveCounter(value, 1, 9999, ARMENIAN, LIST_STYLE_TYPE.DECIMAL, defaultSuffix);\n        case LIST_STYLE_TYPE.LOWER_ARMENIAN:\n            return createAdditiveCounter(\n                value,\n                1,\n                9999,\n                ARMENIAN,\n                LIST_STYLE_TYPE.DECIMAL,\n                defaultSuffix\n            ).toLowerCase();\n        case LIST_STYLE_TYPE.BENGALI:\n            return createCounterStyleFromRange(value, 2534, 2543, true, defaultSuffix);\n        case LIST_STYLE_TYPE.CAMBODIAN:\n        case LIST_STYLE_TYPE.KHMER:\n            return createCounterStyleFromRange(value, 6112, 6121, true, defaultSuffix);\n        case LIST_STYLE_TYPE.CJK_EARTHLY_BRANCH:\n            return createCounterStyleFromSymbols(value, '子丑寅卯辰巳午未申酉戌亥', cjkSuffix);\n        case LIST_STYLE_TYPE.CJK_HEAVENLY_STEM:\n            return createCounterStyleFromSymbols(value, '甲乙丙丁戊己庚辛壬癸', cjkSuffix);\n        case LIST_STYLE_TYPE.CJK_IDEOGRAPHIC:\n        case LIST_STYLE_TYPE.TRAD_CHINESE_INFORMAL:\n            return createCJKCounter(\n                value,\n                '零一二三四五六七八九',\n                CHINESE_INFORMAL_MULTIPLIERS,\n                '負',\n                cjkSuffix,\n                CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS\n            );\n        case LIST_STYLE_TYPE.TRAD_CHINESE_FORMAL:\n            return createCJKCounter(\n                value,\n                '零壹貳參肆伍陸柒捌玖',\n                CHINESE_FORMAL_MULTIPLIERS,\n                '負',\n                cjkSuffix,\n                CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS\n            );\n        case LIST_STYLE_TYPE.SIMP_CHINESE_INFORMAL:\n            return createCJKCounter(\n                value,\n                '零一二三四五六七八九',\n                CHINESE_INFORMAL_MULTIPLIERS,\n                '负',\n                cjkSuffix,\n                CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS\n            );\n        case LIST_STYLE_TYPE.SIMP_CHINESE_FORMAL:\n            return createCJKCounter(\n                value,\n                '零壹贰叁肆伍陆柒捌玖',\n                CHINESE_FORMAL_MULTIPLIERS,\n                '负',\n                cjkSuffix,\n                CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS\n            );\n        case LIST_STYLE_TYPE.JAPANESE_INFORMAL:\n            return createCJKCounter(value, '〇一二三四五六七八九', '十百千万', JAPANESE_NEGATIVE, cjkSuffix, 0);\n        case LIST_STYLE_TYPE.JAPANESE_FORMAL:\n            return createCJKCounter(\n                value,\n                '零壱弐参四伍六七八九',\n                '拾百千万',\n                JAPANESE_NEGATIVE,\n                cjkSuffix,\n                CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS\n            );\n        case LIST_STYLE_TYPE.KOREAN_HANGUL_FORMAL:\n            return createCJKCounter(\n                value,\n                '영일이삼사오육칠팔구',\n                '십백천만',\n                KOREAN_NEGATIVE,\n                koreanSuffix,\n                CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS\n            );\n        case LIST_STYLE_TYPE.KOREAN_HANJA_INFORMAL:\n            return createCJKCounter(value, '零一二三四五六七八九', '十百千萬', KOREAN_NEGATIVE, koreanSuffix, 0);\n        case LIST_STYLE_TYPE.KOREAN_HANJA_FORMAL:\n            return createCJKCounter(\n                value,\n                '零壹貳參四五六七八九',\n                '拾百千',\n                KOREAN_NEGATIVE,\n                koreanSuffix,\n                CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS\n            );\n        case LIST_STYLE_TYPE.DEVANAGARI:\n            return createCounterStyleFromRange(value, 0x966, 0x96f, true, defaultSuffix);\n        case LIST_STYLE_TYPE.GEORGIAN:\n            return createAdditiveCounter(value, 1, 19999, GEORGIAN, LIST_STYLE_TYPE.DECIMAL, defaultSuffix);\n        case LIST_STYLE_TYPE.GUJARATI:\n            return createCounterStyleFromRange(value, 0xae6, 0xaef, true, defaultSuffix);\n        case LIST_STYLE_TYPE.GURMUKHI:\n            return createCounterStyleFromRange(value, 0xa66, 0xa6f, true, defaultSuffix);\n        case LIST_STYLE_TYPE.HEBREW:\n            return createAdditiveCounter(value, 1, 10999, HEBREW, LIST_STYLE_TYPE.DECIMAL, defaultSuffix);\n        case LIST_STYLE_TYPE.HIRAGANA:\n            return createCounterStyleFromSymbols(\n                value,\n                'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん'\n            );\n        case LIST_STYLE_TYPE.HIRAGANA_IROHA:\n            return createCounterStyleFromSymbols(\n                value,\n                'いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす'\n            );\n        case LIST_STYLE_TYPE.KANNADA:\n            return createCounterStyleFromRange(value, 0xce6, 0xcef, true, defaultSuffix);\n        case LIST_STYLE_TYPE.KATAKANA:\n            return createCounterStyleFromSymbols(\n                value,\n                'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン',\n                cjkSuffix\n            );\n        case LIST_STYLE_TYPE.KATAKANA_IROHA:\n            return createCounterStyleFromSymbols(\n                value,\n                'イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス',\n                cjkSuffix\n            );\n        case LIST_STYLE_TYPE.LAO:\n            return createCounterStyleFromRange(value, 0xed0, 0xed9, true, defaultSuffix);\n        case LIST_STYLE_TYPE.MONGOLIAN:\n            return createCounterStyleFromRange(value, 0x1810, 0x1819, true, defaultSuffix);\n        case LIST_STYLE_TYPE.MYANMAR:\n            return createCounterStyleFromRange(value, 0x1040, 0x1049, true, defaultSuffix);\n        case LIST_STYLE_TYPE.ORIYA:\n            return createCounterStyleFromRange(value, 0xb66, 0xb6f, true, defaultSuffix);\n        case LIST_STYLE_TYPE.PERSIAN:\n            return createCounterStyleFromRange(value, 0x6f0, 0x6f9, true, defaultSuffix);\n        case LIST_STYLE_TYPE.TAMIL:\n            return createCounterStyleFromRange(value, 0xbe6, 0xbef, true, defaultSuffix);\n        case LIST_STYLE_TYPE.TELUGU:\n            return createCounterStyleFromRange(value, 0xc66, 0xc6f, true, defaultSuffix);\n        case LIST_STYLE_TYPE.THAI:\n            return createCounterStyleFromRange(value, 0xe50, 0xe59, true, defaultSuffix);\n        case LIST_STYLE_TYPE.TIBETAN:\n            return createCounterStyleFromRange(value, 0xf20, 0xf29, true, defaultSuffix);\n        case LIST_STYLE_TYPE.DECIMAL:\n        default:\n            return createCounterStyleFromRange(value, 48, 57, true, defaultSuffix);\n    }\n};\n","import {ElementContainer} from '../dom/element-container';\nimport {getAbsoluteValue, getAbsoluteValueForTuple} from '../css/types/length-percentage';\nimport {Vector} from './vector';\nimport {BezierCurve} from './bezier-curve';\nimport {Path} from './path';\n\nexport class BoundCurves {\n    readonly topLeftBorderDoubleOuterBox: Path;\n    readonly topRightBorderDoubleOuterBox: Path;\n    readonly bottomRightBorderDoubleOuterBox: Path;\n    readonly bottomLeftBorderDoubleOuterBox: Path;\n    readonly topLeftBorderDoubleInnerBox: Path;\n    readonly topRightBorderDoubleInnerBox: Path;\n    readonly bottomRightBorderDoubleInnerBox: Path;\n    readonly bottomLeftBorderDoubleInnerBox: Path;\n    readonly topLeftBorderStroke: Path;\n    readonly topRightBorderStroke: Path;\n    readonly bottomRightBorderStroke: Path;\n    readonly bottomLeftBorderStroke: Path;\n    readonly topLeftBorderBox: Path;\n    readonly topRightBorderBox: Path;\n    readonly bottomRightBorderBox: Path;\n    readonly bottomLeftBorderBox: Path;\n    readonly topLeftPaddingBox: Path;\n    readonly topRightPaddingBox: Path;\n    readonly bottomRightPaddingBox: Path;\n    readonly bottomLeftPaddingBox: Path;\n    readonly topLeftContentBox: Path;\n    readonly topRightContentBox: Path;\n    readonly bottomRightContentBox: Path;\n    readonly bottomLeftContentBox: Path;\n\n    constructor(element: ElementContainer) {\n        const styles = element.styles;\n        const bounds = element.bounds;\n\n        let [tlh, tlv] = getAbsoluteValueForTuple(styles.borderTopLeftRadius, bounds.width, bounds.height);\n        let [trh, trv] = getAbsoluteValueForTuple(styles.borderTopRightRadius, bounds.width, bounds.height);\n        let [brh, brv] = getAbsoluteValueForTuple(styles.borderBottomRightRadius, bounds.width, bounds.height);\n        let [blh, blv] = getAbsoluteValueForTuple(styles.borderBottomLeftRadius, bounds.width, bounds.height);\n\n        const factors = [];\n        factors.push((tlh + trh) / bounds.width);\n        factors.push((blh + brh) / bounds.width);\n        factors.push((tlv + blv) / bounds.height);\n        factors.push((trv + brv) / bounds.height);\n        const maxFactor = Math.max(...factors);\n\n        if (maxFactor > 1) {\n            tlh /= maxFactor;\n            tlv /= maxFactor;\n            trh /= maxFactor;\n            trv /= maxFactor;\n            brh /= maxFactor;\n            brv /= maxFactor;\n            blh /= maxFactor;\n            blv /= maxFactor;\n        }\n\n        const topWidth = bounds.width - trh;\n        const rightHeight = bounds.height - brv;\n        const bottomWidth = bounds.width - brh;\n        const leftHeight = bounds.height - blv;\n\n        const borderTopWidth = styles.borderTopWidth;\n        const borderRightWidth = styles.borderRightWidth;\n        const borderBottomWidth = styles.borderBottomWidth;\n        const borderLeftWidth = styles.borderLeftWidth;\n\n        const paddingTop = getAbsoluteValue(styles.paddingTop, element.bounds.width);\n        const paddingRight = getAbsoluteValue(styles.paddingRight, element.bounds.width);\n        const paddingBottom = getAbsoluteValue(styles.paddingBottom, element.bounds.width);\n        const paddingLeft = getAbsoluteValue(styles.paddingLeft, element.bounds.width);\n\n        this.topLeftBorderDoubleOuterBox =\n            tlh > 0 || tlv > 0\n                ? getCurvePoints(\n                      bounds.left + borderLeftWidth / 3,\n                      bounds.top + borderTopWidth / 3,\n                      tlh - borderLeftWidth / 3,\n                      tlv - borderTopWidth / 3,\n                      CORNER.TOP_LEFT\n                  )\n                : new Vector(bounds.left + borderLeftWidth / 3, bounds.top + borderTopWidth / 3);\n        this.topRightBorderDoubleOuterBox =\n            tlh > 0 || tlv > 0\n                ? getCurvePoints(\n                      bounds.left + topWidth,\n                      bounds.top + borderTopWidth / 3,\n                      trh - borderRightWidth / 3,\n                      trv - borderTopWidth / 3,\n                      CORNER.TOP_RIGHT\n                  )\n                : new Vector(bounds.left + bounds.width - borderRightWidth / 3, bounds.top + borderTopWidth / 3);\n        this.bottomRightBorderDoubleOuterBox =\n            brh > 0 || brv > 0\n                ? getCurvePoints(\n                      bounds.left + bottomWidth,\n                      bounds.top + rightHeight,\n                      brh - borderRightWidth / 3,\n                      brv - borderBottomWidth / 3,\n                      CORNER.BOTTOM_RIGHT\n                  )\n                : new Vector(\n                      bounds.left + bounds.width - borderRightWidth / 3,\n                      bounds.top + bounds.height - borderBottomWidth / 3\n                  );\n        this.bottomLeftBorderDoubleOuterBox =\n            blh > 0 || blv > 0\n                ? getCurvePoints(\n                      bounds.left + borderLeftWidth / 3,\n                      bounds.top + leftHeight,\n                      blh - borderLeftWidth / 3,\n                      blv - borderBottomWidth / 3,\n                      CORNER.BOTTOM_LEFT\n                  )\n                : new Vector(bounds.left + borderLeftWidth / 3, bounds.top + bounds.height - borderBottomWidth / 3);\n        this.topLeftBorderDoubleInnerBox =\n            tlh > 0 || tlv > 0\n                ? getCurvePoints(\n                      bounds.left + (borderLeftWidth * 2) / 3,\n                      bounds.top + (borderTopWidth * 2) / 3,\n                      tlh - (borderLeftWidth * 2) / 3,\n                      tlv - (borderTopWidth * 2) / 3,\n                      CORNER.TOP_LEFT\n                  )\n                : new Vector(bounds.left + (borderLeftWidth * 2) / 3, bounds.top + (borderTopWidth * 2) / 3);\n        this.topRightBorderDoubleInnerBox =\n            tlh > 0 || tlv > 0\n                ? getCurvePoints(\n                      bounds.left + topWidth,\n                      bounds.top + (borderTopWidth * 2) / 3,\n                      trh - (borderRightWidth * 2) / 3,\n                      trv - (borderTopWidth * 2) / 3,\n                      CORNER.TOP_RIGHT\n                  )\n                : new Vector(\n                      bounds.left + bounds.width - (borderRightWidth * 2) / 3,\n                      bounds.top + (borderTopWidth * 2) / 3\n                  );\n        this.bottomRightBorderDoubleInnerBox =\n            brh > 0 || brv > 0\n                ? getCurvePoints(\n                      bounds.left + bottomWidth,\n                      bounds.top + rightHeight,\n                      brh - (borderRightWidth * 2) / 3,\n                      brv - (borderBottomWidth * 2) / 3,\n                      CORNER.BOTTOM_RIGHT\n                  )\n                : new Vector(\n                      bounds.left + bounds.width - (borderRightWidth * 2) / 3,\n                      bounds.top + bounds.height - (borderBottomWidth * 2) / 3\n                  );\n        this.bottomLeftBorderDoubleInnerBox =\n            blh > 0 || blv > 0\n                ? getCurvePoints(\n                      bounds.left + (borderLeftWidth * 2) / 3,\n                      bounds.top + leftHeight,\n                      blh - (borderLeftWidth * 2) / 3,\n                      blv - (borderBottomWidth * 2) / 3,\n                      CORNER.BOTTOM_LEFT\n                  )\n                : new Vector(\n                      bounds.left + (borderLeftWidth * 2) / 3,\n                      bounds.top + bounds.height - (borderBottomWidth * 2) / 3\n                  );\n        this.topLeftBorderStroke =\n            tlh > 0 || tlv > 0\n                ? getCurvePoints(\n                      bounds.left + borderLeftWidth / 2,\n                      bounds.top + borderTopWidth / 2,\n                      tlh - borderLeftWidth / 2,\n                      tlv - borderTopWidth / 2,\n                      CORNER.TOP_LEFT\n                  )\n                : new Vector(bounds.left + borderLeftWidth / 2, bounds.top + borderTopWidth / 2);\n        this.topRightBorderStroke =\n            tlh > 0 || tlv > 0\n                ? getCurvePoints(\n                      bounds.left + topWidth,\n                      bounds.top + borderTopWidth / 2,\n                      trh - borderRightWidth / 2,\n                      trv - borderTopWidth / 2,\n                      CORNER.TOP_RIGHT\n                  )\n                : new Vector(bounds.left + bounds.width - borderRightWidth / 2, bounds.top + borderTopWidth / 2);\n        this.bottomRightBorderStroke =\n            brh > 0 || brv > 0\n                ? getCurvePoints(\n                      bounds.left + bottomWidth,\n                      bounds.top + rightHeight,\n                      brh - borderRightWidth / 2,\n                      brv - borderBottomWidth / 2,\n                      CORNER.BOTTOM_RIGHT\n                  )\n                : new Vector(\n                      bounds.left + bounds.width - borderRightWidth / 2,\n                      bounds.top + bounds.height - borderBottomWidth / 2\n                  );\n        this.bottomLeftBorderStroke =\n            blh > 0 || blv > 0\n                ? getCurvePoints(\n                      bounds.left + borderLeftWidth / 2,\n                      bounds.top + leftHeight,\n                      blh - borderLeftWidth / 2,\n                      blv - borderBottomWidth / 2,\n                      CORNER.BOTTOM_LEFT\n                  )\n                : new Vector(bounds.left + borderLeftWidth / 2, bounds.top + bounds.height - borderBottomWidth / 2);\n        this.topLeftBorderBox =\n            tlh > 0 || tlv > 0\n                ? getCurvePoints(bounds.left, bounds.top, tlh, tlv, CORNER.TOP_LEFT)\n                : new Vector(bounds.left, bounds.top);\n        this.topRightBorderBox =\n            trh > 0 || trv > 0\n                ? getCurvePoints(bounds.left + topWidth, bounds.top, trh, trv, CORNER.TOP_RIGHT)\n                : new Vector(bounds.left + bounds.width, bounds.top);\n        this.bottomRightBorderBox =\n            brh > 0 || brv > 0\n                ? getCurvePoints(bounds.left + bottomWidth, bounds.top + rightHeight, brh, brv, CORNER.BOTTOM_RIGHT)\n                : new Vector(bounds.left + bounds.width, bounds.top + bounds.height);\n        this.bottomLeftBorderBox =\n            blh > 0 || blv > 0\n                ? getCurvePoints(bounds.left, bounds.top + leftHeight, blh, blv, CORNER.BOTTOM_LEFT)\n                : new Vector(bounds.left, bounds.top + bounds.height);\n        this.topLeftPaddingBox =\n            tlh > 0 || tlv > 0\n                ? getCurvePoints(\n                      bounds.left + borderLeftWidth,\n                      bounds.top + borderTopWidth,\n                      Math.max(0, tlh - borderLeftWidth),\n                      Math.max(0, tlv - borderTopWidth),\n                      CORNER.TOP_LEFT\n                  )\n                : new Vector(bounds.left + borderLeftWidth, bounds.top + borderTopWidth);\n        this.topRightPaddingBox =\n            trh > 0 || trv > 0\n                ? getCurvePoints(\n                      bounds.left + Math.min(topWidth, bounds.width - borderRightWidth),\n                      bounds.top + borderTopWidth,\n                      topWidth > bounds.width + borderRightWidth ? 0 : Math.max(0, trh - borderRightWidth),\n                      Math.max(0, trv - borderTopWidth),\n                      CORNER.TOP_RIGHT\n                  )\n                : new Vector(bounds.left + bounds.width - borderRightWidth, bounds.top + borderTopWidth);\n        this.bottomRightPaddingBox =\n            brh > 0 || brv > 0\n                ? getCurvePoints(\n                      bounds.left + Math.min(bottomWidth, bounds.width - borderLeftWidth),\n                      bounds.top + Math.min(rightHeight, bounds.height - borderBottomWidth),\n                      Math.max(0, brh - borderRightWidth),\n                      Math.max(0, brv - borderBottomWidth),\n                      CORNER.BOTTOM_RIGHT\n                  )\n                : new Vector(\n                      bounds.left + bounds.width - borderRightWidth,\n                      bounds.top + bounds.height - borderBottomWidth\n                  );\n        this.bottomLeftPaddingBox =\n            blh > 0 || blv > 0\n                ? getCurvePoints(\n                      bounds.left + borderLeftWidth,\n                      bounds.top + Math.min(leftHeight, bounds.height - borderBottomWidth),\n                      Math.max(0, blh - borderLeftWidth),\n                      Math.max(0, blv - borderBottomWidth),\n                      CORNER.BOTTOM_LEFT\n                  )\n                : new Vector(bounds.left + borderLeftWidth, bounds.top + bounds.height - borderBottomWidth);\n        this.topLeftContentBox =\n            tlh > 0 || tlv > 0\n                ? getCurvePoints(\n                      bounds.left + borderLeftWidth + paddingLeft,\n                      bounds.top + borderTopWidth + paddingTop,\n                      Math.max(0, tlh - (borderLeftWidth + paddingLeft)),\n                      Math.max(0, tlv - (borderTopWidth + paddingTop)),\n                      CORNER.TOP_LEFT\n                  )\n                : new Vector(bounds.left + borderLeftWidth + paddingLeft, bounds.top + borderTopWidth + paddingTop);\n        this.topRightContentBox =\n            trh > 0 || trv > 0\n                ? getCurvePoints(\n                      bounds.left + Math.min(topWidth, bounds.width + borderLeftWidth + paddingLeft),\n                      bounds.top + borderTopWidth + paddingTop,\n                      topWidth > bounds.width + borderLeftWidth + paddingLeft ? 0 : trh - borderLeftWidth + paddingLeft,\n                      trv - (borderTopWidth + paddingTop),\n                      CORNER.TOP_RIGHT\n                  )\n                : new Vector(\n                      bounds.left + bounds.width - (borderRightWidth + paddingRight),\n                      bounds.top + borderTopWidth + paddingTop\n                  );\n        this.bottomRightContentBox =\n            brh > 0 || brv > 0\n                ? getCurvePoints(\n                      bounds.left + Math.min(bottomWidth, bounds.width - (borderLeftWidth + paddingLeft)),\n                      bounds.top + Math.min(rightHeight, bounds.height + borderTopWidth + paddingTop),\n                      Math.max(0, brh - (borderRightWidth + paddingRight)),\n                      brv - (borderBottomWidth + paddingBottom),\n                      CORNER.BOTTOM_RIGHT\n                  )\n                : new Vector(\n                      bounds.left + bounds.width - (borderRightWidth + paddingRight),\n                      bounds.top + bounds.height - (borderBottomWidth + paddingBottom)\n                  );\n        this.bottomLeftContentBox =\n            blh > 0 || blv > 0\n                ? getCurvePoints(\n                      bounds.left + borderLeftWidth + paddingLeft,\n                      bounds.top + leftHeight,\n                      Math.max(0, blh - (borderLeftWidth + paddingLeft)),\n                      blv - (borderBottomWidth + paddingBottom),\n                      CORNER.BOTTOM_LEFT\n                  )\n                : new Vector(\n                      bounds.left + borderLeftWidth + paddingLeft,\n                      bounds.top + bounds.height - (borderBottomWidth + paddingBottom)\n                  );\n    }\n}\n\nenum CORNER {\n    TOP_LEFT = 0,\n    TOP_RIGHT = 1,\n    BOTTOM_RIGHT = 2,\n    BOTTOM_LEFT = 3\n}\n\nconst getCurvePoints = (x: number, y: number, r1: number, r2: number, position: CORNER): BezierCurve => {\n    const kappa = 4 * ((Math.sqrt(2) - 1) / 3);\n    const ox = r1 * kappa; // control point offset horizontal\n    const oy = r2 * kappa; // control point offset vertical\n    const xm = x + r1; // x-middle\n    const ym = y + r2; // y-middle\n\n    switch (position) {\n        case CORNER.TOP_LEFT:\n            return new BezierCurve(\n                new Vector(x, ym),\n                new Vector(x, ym - oy),\n                new Vector(xm - ox, y),\n                new Vector(xm, y)\n            );\n        case CORNER.TOP_RIGHT:\n            return new BezierCurve(\n                new Vector(x, y),\n                new Vector(x + ox, y),\n                new Vector(xm, ym - oy),\n                new Vector(xm, ym)\n            );\n        case CORNER.BOTTOM_RIGHT:\n            return new BezierCurve(\n                new Vector(xm, y),\n                new Vector(xm, y + oy),\n                new Vector(x + ox, ym),\n                new Vector(x, ym)\n            );\n        case CORNER.BOTTOM_LEFT:\n        default:\n            return new BezierCurve(\n                new Vector(xm, ym),\n                new Vector(xm - ox, ym),\n                new Vector(x, y + oy),\n                new Vector(x, y)\n            );\n    }\n};\n\nexport const calculateBorderBoxPath = (curves: BoundCurves): Path[] => {\n    return [curves.topLeftBorderBox, curves.topRightBorderBox, curves.bottomRightBorderBox, curves.bottomLeftBorderBox];\n};\n\nexport const calculateContentBoxPath = (curves: BoundCurves): Path[] => {\n    return [\n        curves.topLeftContentBox,\n        curves.topRightContentBox,\n        curves.bottomRightContentBox,\n        curves.bottomLeftContentBox\n    ];\n};\n\nexport const calculatePaddingBoxPath = (curves: BoundCurves): Path[] => {\n    return [\n        curves.topLeftPaddingBox,\n        curves.topRightPaddingBox,\n        curves.bottomRightPaddingBox,\n        curves.bottomLeftPaddingBox\n    ];\n};\n","import {FEATURES} from './features';\nimport {Context} from './context';\n\nexport class CacheStorage {\n    private static _link?: HTMLAnchorElement;\n    private static _origin = 'about:blank';\n\n    static getOrigin(url: string): string {\n        const link = CacheStorage._link;\n        if (!link) {\n            return 'about:blank';\n        }\n\n        link.href = url;\n        link.href = link.href; // IE9, LOL! - http://jsfiddle.net/niklasvh/2e48b/\n        return link.protocol + link.hostname + link.port;\n    }\n\n    static isSameOrigin(src: string): boolean {\n        return CacheStorage.getOrigin(src) === CacheStorage._origin;\n    }\n\n    static setContext(window: Window): void {\n        CacheStorage._link = window.document.createElement('a');\n        CacheStorage._origin = CacheStorage.getOrigin(window.location.href);\n    }\n}\n\nexport interface ResourceOptions {\n    imageTimeout: number;\n    useCORS: boolean;\n    allowTaint: boolean;\n    proxy?: string;\n}\n\nexport class Cache {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    private readonly _cache: {[key: string]: Promise<any>} = {};\n\n    constructor(private readonly context: Context, private readonly _options: ResourceOptions) {}\n\n    addImage(src: string): Promise<void> {\n        const result = Promise.resolve();\n        if (this.has(src)) {\n            return result;\n        }\n\n        if (isBlobImage(src) || isRenderable(src)) {\n            (this._cache[src] = this.loadImage(src)).catch(() => {\n                // prevent unhandled rejection\n            });\n            return result;\n        }\n\n        return result;\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    match(src: string): Promise<any> {\n        return this._cache[src];\n    }\n\n    private async loadImage(key: string) {\n        const isSameOrigin = CacheStorage.isSameOrigin(key);\n        const useCORS =\n            !isInlineImage(key) && this._options.useCORS === true && FEATURES.SUPPORT_CORS_IMAGES && !isSameOrigin;\n        const useProxy =\n            !isInlineImage(key) &&\n            !isSameOrigin &&\n            !isBlobImage(key) &&\n            typeof this._options.proxy === 'string' &&\n            FEATURES.SUPPORT_CORS_XHR &&\n            !useCORS;\n        if (\n            !isSameOrigin &&\n            this._options.allowTaint === false &&\n            !isInlineImage(key) &&\n            !isBlobImage(key) &&\n            !useProxy &&\n            !useCORS\n        ) {\n            return;\n        }\n\n        let src = key;\n        if (useProxy) {\n            src = await this.proxy(src);\n        }\n\n        this.context.logger.debug(`Added image ${key.substring(0, 256)}`);\n\n        return await new Promise((resolve, reject) => {\n            const img = new Image();\n            img.onload = () => resolve(img);\n            img.onerror = reject;\n            //ios safari 10.3 taints canvas with data urls unless crossOrigin is set to anonymous\n            if (isInlineBase64Image(src) || useCORS) {\n                img.crossOrigin = 'anonymous';\n            }\n            img.src = src;\n            if (img.complete === true) {\n                // Inline XML images may fail to parse, throwing an Error later on\n                setTimeout(() => resolve(img), 500);\n            }\n            if (this._options.imageTimeout > 0) {\n                setTimeout(\n                    () => reject(`Timed out (${this._options.imageTimeout}ms) loading image`),\n                    this._options.imageTimeout\n                );\n            }\n        });\n    }\n\n    private has(key: string): boolean {\n        return typeof this._cache[key] !== 'undefined';\n    }\n\n    keys(): Promise<string[]> {\n        return Promise.resolve(Object.keys(this._cache));\n    }\n\n    private proxy(src: string): Promise<string> {\n        const proxy = this._options.proxy;\n\n        if (!proxy) {\n            throw new Error('No proxy defined');\n        }\n\n        const key = src.substring(0, 256);\n\n        return new Promise((resolve, reject) => {\n            const responseType = FEATURES.SUPPORT_RESPONSE_TYPE ? 'blob' : 'text';\n            const xhr = new XMLHttpRequest();\n            xhr.onload = () => {\n                if (xhr.status === 200) {\n                    if (responseType === 'text') {\n                        resolve(xhr.response);\n                    } else {\n                        const reader = new FileReader();\n                        reader.addEventListener('load', () => resolve(reader.result as string), false);\n                        reader.addEventListener('error', (e) => reject(e), false);\n                        reader.readAsDataURL(xhr.response);\n                    }\n                } else {\n                    reject(`Failed to proxy resource ${key} with status code ${xhr.status}`);\n                }\n            };\n\n            xhr.onerror = reject;\n            const queryString = proxy.indexOf('?') > -1 ? '&' : '?';\n            xhr.open('GET', `${proxy}${queryString}url=${encodeURIComponent(src)}&responseType=${responseType}`);\n\n            if (responseType !== 'text' && xhr instanceof XMLHttpRequest) {\n                xhr.responseType = responseType;\n            }\n\n            if (this._options.imageTimeout) {\n                const timeout = this._options.imageTimeout;\n                xhr.timeout = timeout;\n                xhr.ontimeout = () => reject(`Timed out (${timeout}ms) proxying ${key}`);\n            }\n\n            xhr.send();\n        });\n    }\n}\n\nconst INLINE_SVG = /^data:image\\/svg\\+xml/i;\nconst INLINE_BASE64 = /^data:image\\/.*;base64,/i;\nconst INLINE_IMG = /^data:image\\/.*/i;\n\nconst isRenderable = (src: string): boolean => FEATURES.SUPPORT_SVG_DRAWING || !isSVG(src);\nconst isInlineImage = (src: string): boolean => INLINE_IMG.test(src);\nconst isInlineBase64Image = (src: string): boolean => INLINE_BASE64.test(src);\nconst isBlobImage = (src: string): boolean => src.substr(0, 4) === 'blob';\n\nconst isSVG = (src: string): boolean => src.substr(-3).toLowerCase() === 'svg' || INLINE_SVG.test(src);\n","import {IPath, Path, PathType} from './path';\n\nexport class Vector implements IPath {\n    type: PathType;\n    x: number;\n    y: number;\n\n    constructor(x: number, y: number) {\n        this.type = PathType.VECTOR;\n        this.x = x;\n        this.y = y;\n    }\n\n    add(deltaX: number, deltaY: number): Vector {\n        return new Vector(this.x + deltaX, this.y + deltaY);\n    }\n}\n\nexport const isVector = (path: Path): path is Vector => path.type === PathType.VECTOR;\n","import {Vector} from './vector';\nimport {IPath, PathType, Path} from './path';\n\nconst lerp = (a: Vector, b: Vector, t: number): Vector => {\n    return new Vector(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t);\n};\n\nexport class BezierCurve implements IPath {\n    type: PathType;\n    start: Vector;\n    startControl: Vector;\n    endControl: Vector;\n    end: Vector;\n\n    constructor(start: Vector, startControl: Vector, endControl: Vector, end: Vector) {\n        this.type = PathType.BEZIER_CURVE;\n        this.start = start;\n        this.startControl = startControl;\n        this.endControl = endControl;\n        this.end = end;\n    }\n\n    subdivide(t: number, firstHalf: boolean): BezierCurve {\n        const ab = lerp(this.start, this.startControl, t);\n        const bc = lerp(this.startControl, this.endControl, t);\n        const cd = lerp(this.endControl, this.end, t);\n        const abbc = lerp(ab, bc, t);\n        const bccd = lerp(bc, cd, t);\n        const dest = lerp(abbc, bccd, t);\n        return firstHalf ? new BezierCurve(this.start, ab, abbc, dest) : new BezierCurve(dest, bccd, cd, this.end);\n    }\n\n    add(deltaX: number, deltaY: number): BezierCurve {\n        return new BezierCurve(\n            this.start.add(deltaX, deltaY),\n            this.startControl.add(deltaX, deltaY),\n            this.endControl.add(deltaX, deltaY),\n            this.end.add(deltaX, deltaY)\n        );\n    }\n\n    reverse(): BezierCurve {\n        return new BezierCurve(this.end, this.endControl, this.startControl, this.start);\n    }\n}\n\nexport const isBezierCurve = (path: Path): path is BezierCurve => path.type === PathType.BEZIER_CURVE;\n","import {Matrix} from '../css/property-descriptors/transform';\nimport {Path} from './path';\n\nexport const enum EffectType {\n    TRANSFORM = 0,\n    CLIP = 1,\n    OPACITY = 2\n}\n\nexport const enum EffectTarget {\n    BACKGROUND_BORDERS = 1 << 1,\n    CONTENT = 1 << 2\n}\n\nexport interface IElementEffect {\n    readonly type: EffectType;\n    readonly target: number;\n}\n\nexport class TransformEffect implements IElementEffect {\n    readonly type: EffectType = EffectType.TRANSFORM;\n    readonly target: number = EffectTarget.BACKGROUND_BORDERS | EffectTarget.CONTENT;\n\n    constructor(readonly offsetX: number, readonly offsetY: number, readonly matrix: Matrix) {}\n}\n\nexport class ClipEffect implements IElementEffect {\n    readonly type: EffectType = EffectType.CLIP;\n\n    constructor(readonly path: Path[], readonly target: EffectTarget) {}\n}\n\nexport class OpacityEffect implements IElementEffect {\n    readonly type: EffectType = EffectType.OPACITY;\n    readonly target: number = EffectTarget.BACKGROUND_BORDERS | EffectTarget.CONTENT;\n\n    constructor(readonly opacity: number) {}\n}\n\nexport const isTransformEffect = (effect: IElementEffect): effect is TransformEffect =>\n    effect.type === EffectType.TRANSFORM;\nexport const isClipEffect = (effect: IElementEffect): effect is ClipEffect => effect.type === EffectType.CLIP;\nexport const isOpacityEffect = (effect: IElementEffect): effect is OpacityEffect => effect.type === EffectType.OPACITY;\n","import {BezierCurve} from './bezier-curve';\nimport {Vector} from './vector';\nexport const enum PathType {\n    VECTOR = 0,\n    BEZIER_CURVE = 1\n}\n\nexport interface IPath {\n    type: PathType;\n    add(deltaX: number, deltaY: number): IPath;\n}\n\nexport const equalPath = (a: Path[], b: Path[]): boolean => {\n    if (a.length === b.length) {\n        return a.some((v, i) => v === b[i]);\n    }\n\n    return false;\n};\n\nexport const transformPath = (path: Path[], deltaX: number, deltaY: number, deltaW: number, deltaH: number): Path[] => {\n    return path.map((point, index) => {\n        switch (index) {\n            case 0:\n                return point.add(deltaX, deltaY);\n            case 1:\n                return point.add(deltaX + deltaW, deltaY);\n            case 2:\n                return point.add(deltaX + deltaW, deltaY + deltaH);\n            case 3:\n                return point.add(deltaX, deltaY + deltaH);\n        }\n        return point;\n    });\n};\n\nexport type Path = Vector | BezierCurve;\n","import {ElementContainer, FLAGS} from '../dom/element-container';\nimport {contains} from '../core/bitwise';\nimport {BoundCurves, calculateBorderBoxPath, calculatePaddingBoxPath} from './bound-curves';\nimport {ClipEffect, EffectTarget, IElementEffect, isClipEffect, OpacityEffect, TransformEffect} from './effects';\nimport {OVERFLOW} from '../css/property-descriptors/overflow';\nimport {equalPath} from './path';\nimport {DISPLAY} from '../css/property-descriptors/display';\nimport {OLElementContainer} from '../dom/elements/ol-element-container';\nimport {LIElementContainer} from '../dom/elements/li-element-container';\nimport {createCounterText} from '../css/types/functions/counter';\nimport {POSITION} from '../css/property-descriptors/position';\n\nexport class StackingContext {\n    element: ElementPaint;\n    negativeZIndex: StackingContext[];\n    zeroOrAutoZIndexOrTransformedOrOpacity: StackingContext[];\n    positiveZIndex: StackingContext[];\n    nonPositionedFloats: StackingContext[];\n    nonPositionedInlineLevel: StackingContext[];\n    inlineLevel: ElementPaint[];\n    nonInlineLevel: ElementPaint[];\n\n    constructor(container: ElementPaint) {\n        this.element = container;\n        this.inlineLevel = [];\n        this.nonInlineLevel = [];\n        this.negativeZIndex = [];\n        this.zeroOrAutoZIndexOrTransformedOrOpacity = [];\n        this.positiveZIndex = [];\n        this.nonPositionedFloats = [];\n        this.nonPositionedInlineLevel = [];\n    }\n}\n\nexport class ElementPaint {\n    readonly effects: IElementEffect[] = [];\n    readonly curves: BoundCurves;\n    listValue?: string;\n\n    constructor(readonly container: ElementContainer, readonly parent: ElementPaint | null) {\n        this.curves = new BoundCurves(this.container);\n        if (this.container.styles.opacity < 1) {\n            this.effects.push(new OpacityEffect(this.container.styles.opacity));\n        }\n\n        if (this.container.styles.transform !== null) {\n            const offsetX = this.container.bounds.left + this.container.styles.transformOrigin[0].number;\n            const offsetY = this.container.bounds.top + this.container.styles.transformOrigin[1].number;\n            const matrix = this.container.styles.transform;\n            this.effects.push(new TransformEffect(offsetX, offsetY, matrix));\n        }\n\n        if (this.container.styles.overflowX !== OVERFLOW.VISIBLE) {\n            const borderBox = calculateBorderBoxPath(this.curves);\n            const paddingBox = calculatePaddingBoxPath(this.curves);\n\n            if (equalPath(borderBox, paddingBox)) {\n                this.effects.push(new ClipEffect(borderBox, EffectTarget.BACKGROUND_BORDERS | EffectTarget.CONTENT));\n            } else {\n                this.effects.push(new ClipEffect(borderBox, EffectTarget.BACKGROUND_BORDERS));\n                this.effects.push(new ClipEffect(paddingBox, EffectTarget.CONTENT));\n            }\n        }\n    }\n\n    getEffects(target: EffectTarget): IElementEffect[] {\n        let inFlow = [POSITION.ABSOLUTE, POSITION.FIXED].indexOf(this.container.styles.position) === -1;\n        let parent = this.parent;\n        const effects = this.effects.slice(0);\n        while (parent) {\n            const croplessEffects = parent.effects.filter((effect) => !isClipEffect(effect));\n            if (inFlow || parent.container.styles.position !== POSITION.STATIC || !parent.parent) {\n                effects.unshift(...croplessEffects);\n                inFlow = [POSITION.ABSOLUTE, POSITION.FIXED].indexOf(parent.container.styles.position) === -1;\n                if (parent.container.styles.overflowX !== OVERFLOW.VISIBLE) {\n                    const borderBox = calculateBorderBoxPath(parent.curves);\n                    const paddingBox = calculatePaddingBoxPath(parent.curves);\n                    if (!equalPath(borderBox, paddingBox)) {\n                        effects.unshift(\n                            new ClipEffect(paddingBox, EffectTarget.BACKGROUND_BORDERS | EffectTarget.CONTENT)\n                        );\n                    }\n                }\n            } else {\n                effects.unshift(...croplessEffects);\n            }\n\n            parent = parent.parent;\n        }\n\n        return effects.filter((effect) => contains(effect.target, target));\n    }\n}\n\nconst parseStackTree = (\n    parent: ElementPaint,\n    stackingContext: StackingContext,\n    realStackingContext: StackingContext,\n    listItems: ElementPaint[]\n) => {\n    parent.container.elements.forEach((child) => {\n        const treatAsRealStackingContext = contains(child.flags, FLAGS.CREATES_REAL_STACKING_CONTEXT);\n        const createsStackingContext = contains(child.flags, FLAGS.CREATES_STACKING_CONTEXT);\n        const paintContainer = new ElementPaint(child, parent);\n        if (contains(child.styles.display, DISPLAY.LIST_ITEM)) {\n            listItems.push(paintContainer);\n        }\n\n        const listOwnerItems = contains(child.flags, FLAGS.IS_LIST_OWNER) ? [] : listItems;\n\n        if (treatAsRealStackingContext || createsStackingContext) {\n            const parentStack =\n                treatAsRealStackingContext || child.styles.isPositioned() ? realStackingContext : stackingContext;\n\n            const stack = new StackingContext(paintContainer);\n\n            if (child.styles.isPositioned() || child.styles.opacity < 1 || child.styles.isTransformed()) {\n                const order = child.styles.zIndex.order;\n                if (order < 0) {\n                    let index = 0;\n\n                    parentStack.negativeZIndex.some((current, i) => {\n                        if (order > current.element.container.styles.zIndex.order) {\n                            index = i;\n                            return false;\n                        } else if (index > 0) {\n                            return true;\n                        }\n\n                        return false;\n                    });\n                    parentStack.negativeZIndex.splice(index, 0, stack);\n                } else if (order > 0) {\n                    let index = 0;\n                    parentStack.positiveZIndex.some((current, i) => {\n                        if (order >= current.element.container.styles.zIndex.order) {\n                            index = i + 1;\n                            return false;\n                        } else if (index > 0) {\n                            return true;\n                        }\n\n                        return false;\n                    });\n                    parentStack.positiveZIndex.splice(index, 0, stack);\n                } else {\n                    parentStack.zeroOrAutoZIndexOrTransformedOrOpacity.push(stack);\n                }\n            } else {\n                if (child.styles.isFloating()) {\n                    parentStack.nonPositionedFloats.push(stack);\n                } else {\n                    parentStack.nonPositionedInlineLevel.push(stack);\n                }\n            }\n\n            parseStackTree(\n                paintContainer,\n                stack,\n                treatAsRealStackingContext ? stack : realStackingContext,\n                listOwnerItems\n            );\n        } else {\n            if (child.styles.isInlineLevel()) {\n                stackingContext.inlineLevel.push(paintContainer);\n            } else {\n                stackingContext.nonInlineLevel.push(paintContainer);\n            }\n\n            parseStackTree(paintContainer, stackingContext, realStackingContext, listOwnerItems);\n        }\n\n        if (contains(child.flags, FLAGS.IS_LIST_OWNER)) {\n            processListItems(child, listOwnerItems);\n        }\n    });\n};\n\nconst processListItems = (owner: ElementContainer, elements: ElementPaint[]) => {\n    let numbering = owner instanceof OLElementContainer ? owner.start : 1;\n    const reversed = owner instanceof OLElementContainer ? owner.reversed : false;\n    for (let i = 0; i < elements.length; i++) {\n        const item = elements[i];\n        if (\n            item.container instanceof LIElementContainer &&\n            typeof item.container.value === 'number' &&\n            item.container.value !== 0\n        ) {\n            numbering = item.container.value;\n        }\n\n        item.listValue = createCounterText(numbering, item.container.styles.listStyleType, true);\n\n        numbering += reversed ? -1 : 1;\n    }\n};\n\nexport const parseStackingContexts = (container: ElementContainer): StackingContext => {\n    const paintContainer = new ElementPaint(container, null);\n    const root = new StackingContext(paintContainer);\n    const listItems: ElementPaint[] = [];\n    parseStackTree(paintContainer, root, root, listItems);\n    processListItems(paintContainer.container, listItems);\n    return root;\n};\n","import {Path} from './path';\nimport {BoundCurves} from './bound-curves';\nimport {isBezierCurve} from './bezier-curve';\n\nexport const parsePathForBorder = (curves: BoundCurves, borderSide: number): Path[] => {\n    switch (borderSide) {\n        case 0:\n            return createPathFromCurves(\n                curves.topLeftBorderBox,\n                curves.topLeftPaddingBox,\n                curves.topRightBorderBox,\n                curves.topRightPaddingBox\n            );\n        case 1:\n            return createPathFromCurves(\n                curves.topRightBorderBox,\n                curves.topRightPaddingBox,\n                curves.bottomRightBorderBox,\n                curves.bottomRightPaddingBox\n            );\n        case 2:\n            return createPathFromCurves(\n                curves.bottomRightBorderBox,\n                curves.bottomRightPaddingBox,\n                curves.bottomLeftBorderBox,\n                curves.bottomLeftPaddingBox\n            );\n        case 3:\n        default:\n            return createPathFromCurves(\n                curves.bottomLeftBorderBox,\n                curves.bottomLeftPaddingBox,\n                curves.topLeftBorderBox,\n                curves.topLeftPaddingBox\n            );\n    }\n};\n\nexport const parsePathForBorderDoubleOuter = (curves: BoundCurves, borderSide: number): Path[] => {\n    switch (borderSide) {\n        case 0:\n            return createPathFromCurves(\n                curves.topLeftBorderBox,\n                curves.topLeftBorderDoubleOuterBox,\n                curves.topRightBorderBox,\n                curves.topRightBorderDoubleOuterBox\n            );\n        case 1:\n            return createPathFromCurves(\n                curves.topRightBorderBox,\n                curves.topRightBorderDoubleOuterBox,\n                curves.bottomRightBorderBox,\n                curves.bottomRightBorderDoubleOuterBox\n            );\n        case 2:\n            return createPathFromCurves(\n                curves.bottomRightBorderBox,\n                curves.bottomRightBorderDoubleOuterBox,\n                curves.bottomLeftBorderBox,\n                curves.bottomLeftBorderDoubleOuterBox\n            );\n        case 3:\n        default:\n            return createPathFromCurves(\n                curves.bottomLeftBorderBox,\n                curves.bottomLeftBorderDoubleOuterBox,\n                curves.topLeftBorderBox,\n                curves.topLeftBorderDoubleOuterBox\n            );\n    }\n};\n\nexport const parsePathForBorderDoubleInner = (curves: BoundCurves, borderSide: number): Path[] => {\n    switch (borderSide) {\n        case 0:\n            return createPathFromCurves(\n                curves.topLeftBorderDoubleInnerBox,\n                curves.topLeftPaddingBox,\n                curves.topRightBorderDoubleInnerBox,\n                curves.topRightPaddingBox\n            );\n        case 1:\n            return createPathFromCurves(\n                curves.topRightBorderDoubleInnerBox,\n                curves.topRightPaddingBox,\n                curves.bottomRightBorderDoubleInnerBox,\n                curves.bottomRightPaddingBox\n            );\n        case 2:\n            return createPathFromCurves(\n                curves.bottomRightBorderDoubleInnerBox,\n                curves.bottomRightPaddingBox,\n                curves.bottomLeftBorderDoubleInnerBox,\n                curves.bottomLeftPaddingBox\n            );\n        case 3:\n        default:\n            return createPathFromCurves(\n                curves.bottomLeftBorderDoubleInnerBox,\n                curves.bottomLeftPaddingBox,\n                curves.topLeftBorderDoubleInnerBox,\n                curves.topLeftPaddingBox\n            );\n    }\n};\n\nexport const parsePathForBorderStroke = (curves: BoundCurves, borderSide: number): Path[] => {\n    switch (borderSide) {\n        case 0:\n            return createStrokePathFromCurves(curves.topLeftBorderStroke, curves.topRightBorderStroke);\n        case 1:\n            return createStrokePathFromCurves(curves.topRightBorderStroke, curves.bottomRightBorderStroke);\n        case 2:\n            return createStrokePathFromCurves(curves.bottomRightBorderStroke, curves.bottomLeftBorderStroke);\n        case 3:\n        default:\n            return createStrokePathFromCurves(curves.bottomLeftBorderStroke, curves.topLeftBorderStroke);\n    }\n};\n\nconst createStrokePathFromCurves = (outer1: Path, outer2: Path): Path[] => {\n    const path = [];\n    if (isBezierCurve(outer1)) {\n        path.push(outer1.subdivide(0.5, false));\n    } else {\n        path.push(outer1);\n    }\n\n    if (isBezierCurve(outer2)) {\n        path.push(outer2.subdivide(0.5, true));\n    } else {\n        path.push(outer2);\n    }\n\n    return path;\n};\n\nconst createPathFromCurves = (outer1: Path, inner1: Path, outer2: Path, inner2: Path): Path[] => {\n    const path = [];\n    if (isBezierCurve(outer1)) {\n        path.push(outer1.subdivide(0.5, false));\n    } else {\n        path.push(outer1);\n    }\n\n    if (isBezierCurve(outer2)) {\n        path.push(outer2.subdivide(0.5, true));\n    } else {\n        path.push(outer2);\n    }\n\n    if (isBezierCurve(inner2)) {\n        path.push(inner2.subdivide(0.5, true).reverse());\n    } else {\n        path.push(inner2);\n    }\n\n    if (isBezierCurve(inner1)) {\n        path.push(inner1.subdivide(0.5, false).reverse());\n    } else {\n        path.push(inner1);\n    }\n\n    return path;\n};\n","import {getAbsoluteValue} from '../css/types/length-percentage';\nimport {Bounds} from '../css/layout/bounds';\nimport {ElementContainer} from '../dom/element-container';\n\nexport const paddingBox = (element: ElementContainer): Bounds => {\n    const bounds = element.bounds;\n    const styles = element.styles;\n    return bounds.add(\n        styles.borderLeftWidth,\n        styles.borderTopWidth,\n        -(styles.borderRightWidth + styles.borderLeftWidth),\n        -(styles.borderTopWidth + styles.borderBottomWidth)\n    );\n};\n\nexport const contentBox = (element: ElementContainer): Bounds => {\n    const styles = element.styles;\n    const bounds = element.bounds;\n\n    const paddingLeft = getAbsoluteValue(styles.paddingLeft, bounds.width);\n    const paddingRight = getAbsoluteValue(styles.paddingRight, bounds.width);\n    const paddingTop = getAbsoluteValue(styles.paddingTop, bounds.width);\n    const paddingBottom = getAbsoluteValue(styles.paddingBottom, bounds.width);\n\n    return bounds.add(\n        paddingLeft + styles.borderLeftWidth,\n        paddingTop + styles.borderTopWidth,\n        -(styles.borderRightWidth + styles.borderLeftWidth + paddingLeft + paddingRight),\n        -(styles.borderTopWidth + styles.borderBottomWidth + paddingTop + paddingBottom)\n    );\n};\n","import {Bounds} from '../css/layout/bounds';\nimport {BACKGROUND_ORIGIN} from '../css/property-descriptors/background-origin';\nimport {ElementContainer} from '../dom/element-container';\nimport {BACKGROUND_SIZE, BackgroundSizeInfo} from '../css/property-descriptors/background-size';\nimport {Vector} from './vector';\nimport {BACKGROUND_REPEAT} from '../css/property-descriptors/background-repeat';\nimport {getAbsoluteValue, getAbsoluteValueForTuple, isLengthPercentage} from '../css/types/length-percentage';\nimport {CSSValue, isIdentToken} from '../css/syntax/parser';\nimport {contentBox, paddingBox} from './box-sizing';\nimport {Path} from './path';\nimport {BACKGROUND_CLIP} from '../css/property-descriptors/background-clip';\n\nexport const calculateBackgroundPositioningArea = (\n    backgroundOrigin: BACKGROUND_ORIGIN,\n    element: ElementContainer\n): Bounds => {\n    if (backgroundOrigin === BACKGROUND_ORIGIN.BORDER_BOX) {\n        return element.bounds;\n    }\n\n    if (backgroundOrigin === BACKGROUND_ORIGIN.CONTENT_BOX) {\n        return contentBox(element);\n    }\n\n    return paddingBox(element);\n};\n\nexport const calculateBackgroundPaintingArea = (backgroundClip: BACKGROUND_CLIP, element: ElementContainer): Bounds => {\n    if (backgroundClip === BACKGROUND_CLIP.BORDER_BOX) {\n        return element.bounds;\n    }\n\n    if (backgroundClip === BACKGROUND_CLIP.CONTENT_BOX) {\n        return contentBox(element);\n    }\n\n    return paddingBox(element);\n};\n\nexport const calculateBackgroundRendering = (\n    container: ElementContainer,\n    index: number,\n    intrinsicSize: [number | null, number | null, number | null]\n): [Path[], number, number, number, number] => {\n    const backgroundPositioningArea = calculateBackgroundPositioningArea(\n        getBackgroundValueForIndex(container.styles.backgroundOrigin, index),\n        container\n    );\n\n    const backgroundPaintingArea = calculateBackgroundPaintingArea(\n        getBackgroundValueForIndex(container.styles.backgroundClip, index),\n        container\n    );\n\n    const backgroundImageSize = calculateBackgroundSize(\n        getBackgroundValueForIndex(container.styles.backgroundSize, index),\n        intrinsicSize,\n        backgroundPositioningArea\n    );\n\n    const [sizeWidth, sizeHeight] = backgroundImageSize;\n\n    const position = getAbsoluteValueForTuple(\n        getBackgroundValueForIndex(container.styles.backgroundPosition, index),\n        backgroundPositioningArea.width - sizeWidth,\n        backgroundPositioningArea.height - sizeHeight\n    );\n\n    const path = calculateBackgroundRepeatPath(\n        getBackgroundValueForIndex(container.styles.backgroundRepeat, index),\n        position,\n        backgroundImageSize,\n        backgroundPositioningArea,\n        backgroundPaintingArea\n    );\n\n    const offsetX = Math.round(backgroundPositioningArea.left + position[0]);\n    const offsetY = Math.round(backgroundPositioningArea.top + position[1]);\n\n    return [path, offsetX, offsetY, sizeWidth, sizeHeight];\n};\n\nexport const isAuto = (token: CSSValue): boolean => isIdentToken(token) && token.value === BACKGROUND_SIZE.AUTO;\n\nconst hasIntrinsicValue = (value: number | null): value is number => typeof value === 'number';\n\nexport const calculateBackgroundSize = (\n    size: BackgroundSizeInfo[],\n    [intrinsicWidth, intrinsicHeight, intrinsicProportion]: [number | null, number | null, number | null],\n    bounds: Bounds\n): [number, number] => {\n    const [first, second] = size;\n\n    if (!first) {\n        return [0, 0];\n    }\n\n    if (isLengthPercentage(first) && second && isLengthPercentage(second)) {\n        return [getAbsoluteValue(first, bounds.width), getAbsoluteValue(second, bounds.height)];\n    }\n\n    const hasIntrinsicProportion = hasIntrinsicValue(intrinsicProportion);\n\n    if (isIdentToken(first) && (first.value === BACKGROUND_SIZE.CONTAIN || first.value === BACKGROUND_SIZE.COVER)) {\n        if (hasIntrinsicValue(intrinsicProportion)) {\n            const targetRatio = bounds.width / bounds.height;\n\n            return targetRatio < intrinsicProportion !== (first.value === BACKGROUND_SIZE.COVER)\n                ? [bounds.width, bounds.width / intrinsicProportion]\n                : [bounds.height * intrinsicProportion, bounds.height];\n        }\n\n        return [bounds.width, bounds.height];\n    }\n\n    const hasIntrinsicWidth = hasIntrinsicValue(intrinsicWidth);\n    const hasIntrinsicHeight = hasIntrinsicValue(intrinsicHeight);\n    const hasIntrinsicDimensions = hasIntrinsicWidth || hasIntrinsicHeight;\n\n    // If the background-size is auto or auto auto:\n    if (isAuto(first) && (!second || isAuto(second))) {\n        // If the image has both horizontal and vertical intrinsic dimensions, it's rendered at that size.\n        if (hasIntrinsicWidth && hasIntrinsicHeight) {\n            return [intrinsicWidth as number, intrinsicHeight as number];\n        }\n\n        // If the image has no intrinsic dimensions and has no intrinsic proportions,\n        // it's rendered at the size of the background positioning area.\n\n        if (!hasIntrinsicProportion && !hasIntrinsicDimensions) {\n            return [bounds.width, bounds.height];\n        }\n\n        // TODO If the image has no intrinsic dimensions but has intrinsic proportions, it's rendered as if contain had been specified instead.\n\n        // If the image has only one intrinsic dimension and has intrinsic proportions, it's rendered at the size corresponding to that one dimension.\n        // The other dimension is computed using the specified dimension and the intrinsic proportions.\n        if (hasIntrinsicDimensions && hasIntrinsicProportion) {\n            const width = hasIntrinsicWidth\n                ? (intrinsicWidth as number)\n                : (intrinsicHeight as number) * (intrinsicProportion as number);\n            const height = hasIntrinsicHeight\n                ? (intrinsicHeight as number)\n                : (intrinsicWidth as number) / (intrinsicProportion as number);\n            return [width, height];\n        }\n\n        // If the image has only one intrinsic dimension but has no intrinsic proportions,\n        // it's rendered using the specified dimension and the other dimension of the background positioning area.\n        const width = hasIntrinsicWidth ? (intrinsicWidth as number) : bounds.width;\n        const height = hasIntrinsicHeight ? (intrinsicHeight as number) : bounds.height;\n        return [width, height];\n    }\n\n    // If the image has intrinsic proportions, it's stretched to the specified dimension.\n    // The unspecified dimension is computed using the specified dimension and the intrinsic proportions.\n    if (hasIntrinsicProportion) {\n        let width = 0;\n        let height = 0;\n        if (isLengthPercentage(first)) {\n            width = getAbsoluteValue(first, bounds.width);\n        } else if (isLengthPercentage(second)) {\n            height = getAbsoluteValue(second, bounds.height);\n        }\n\n        if (isAuto(first)) {\n            width = height * (intrinsicProportion as number);\n        } else if (!second || isAuto(second)) {\n            height = width / (intrinsicProportion as number);\n        }\n\n        return [width, height];\n    }\n\n    // If the image has no intrinsic proportions, it's stretched to the specified dimension.\n    // The unspecified dimension is computed using the image's corresponding intrinsic dimension,\n    // if there is one. If there is no such intrinsic dimension,\n    // it becomes the corresponding dimension of the background positioning area.\n\n    let width = null;\n    let height = null;\n\n    if (isLengthPercentage(first)) {\n        width = getAbsoluteValue(first, bounds.width);\n    } else if (second && isLengthPercentage(second)) {\n        height = getAbsoluteValue(second, bounds.height);\n    }\n\n    if (width !== null && (!second || isAuto(second))) {\n        height =\n            hasIntrinsicWidth && hasIntrinsicHeight\n                ? (width / (intrinsicWidth as number)) * (intrinsicHeight as number)\n                : bounds.height;\n    }\n\n    if (height !== null && isAuto(first)) {\n        width =\n            hasIntrinsicWidth && hasIntrinsicHeight\n                ? (height / (intrinsicHeight as number)) * (intrinsicWidth as number)\n                : bounds.width;\n    }\n\n    if (width !== null && height !== null) {\n        return [width, height];\n    }\n\n    throw new Error(`Unable to calculate background-size for element`);\n};\n\nexport const getBackgroundValueForIndex = <T>(values: T[], index: number): T => {\n    const value = values[index];\n    if (typeof value === 'undefined') {\n        return values[0];\n    }\n\n    return value;\n};\n\nexport const calculateBackgroundRepeatPath = (\n    repeat: BACKGROUND_REPEAT,\n    [x, y]: [number, number],\n    [width, height]: [number, number],\n    backgroundPositioningArea: Bounds,\n    backgroundPaintingArea: Bounds\n): [Vector, Vector, Vector, Vector] => {\n    switch (repeat) {\n        case BACKGROUND_REPEAT.REPEAT_X:\n            return [\n                new Vector(Math.round(backgroundPositioningArea.left), Math.round(backgroundPositioningArea.top + y)),\n                new Vector(\n                    Math.round(backgroundPositioningArea.left + backgroundPositioningArea.width),\n                    Math.round(backgroundPositioningArea.top + y)\n                ),\n                new Vector(\n                    Math.round(backgroundPositioningArea.left + backgroundPositioningArea.width),\n                    Math.round(height + backgroundPositioningArea.top + y)\n                ),\n                new Vector(\n                    Math.round(backgroundPositioningArea.left),\n                    Math.round(height + backgroundPositioningArea.top + y)\n                )\n            ];\n        case BACKGROUND_REPEAT.REPEAT_Y:\n            return [\n                new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.top)),\n                new Vector(\n                    Math.round(backgroundPositioningArea.left + x + width),\n                    Math.round(backgroundPositioningArea.top)\n                ),\n                new Vector(\n                    Math.round(backgroundPositioningArea.left + x + width),\n                    Math.round(backgroundPositioningArea.height + backgroundPositioningArea.top)\n                ),\n                new Vector(\n                    Math.round(backgroundPositioningArea.left + x),\n                    Math.round(backgroundPositioningArea.height + backgroundPositioningArea.top)\n                )\n            ];\n        case BACKGROUND_REPEAT.NO_REPEAT:\n            return [\n                new Vector(\n                    Math.round(backgroundPositioningArea.left + x),\n                    Math.round(backgroundPositioningArea.top + y)\n                ),\n                new Vector(\n                    Math.round(backgroundPositioningArea.left + x + width),\n                    Math.round(backgroundPositioningArea.top + y)\n                ),\n                new Vector(\n                    Math.round(backgroundPositioningArea.left + x + width),\n                    Math.round(backgroundPositioningArea.top + y + height)\n                ),\n                new Vector(\n                    Math.round(backgroundPositioningArea.left + x),\n                    Math.round(backgroundPositioningArea.top + y + height)\n                )\n            ];\n        default:\n            return [\n                new Vector(Math.round(backgroundPaintingArea.left), Math.round(backgroundPaintingArea.top)),\n                new Vector(\n                    Math.round(backgroundPaintingArea.left + backgroundPaintingArea.width),\n                    Math.round(backgroundPaintingArea.top)\n                ),\n                new Vector(\n                    Math.round(backgroundPaintingArea.left + backgroundPaintingArea.width),\n                    Math.round(backgroundPaintingArea.height + backgroundPaintingArea.top)\n                ),\n                new Vector(\n                    Math.round(backgroundPaintingArea.left),\n                    Math.round(backgroundPaintingArea.height + backgroundPaintingArea.top)\n                )\n            ];\n    }\n};\n","import {SMALL_IMAGE} from '../core/util';\nexport interface FontMetric {\n    baseline: number;\n    middle: number;\n}\n\nconst SAMPLE_TEXT = 'Hidden Text';\n\nexport class FontMetrics {\n    private readonly _data: {[key: string]: FontMetric};\n    private readonly _document: Document;\n\n    constructor(document: Document) {\n        this._data = {};\n        this._document = document;\n    }\n\n    private parseMetrics(fontFamily: string, fontSize: string): FontMetric {\n        const container = this._document.createElement('div');\n        const img = this._document.createElement('img');\n        const span = this._document.createElement('span');\n\n        const body = this._document.body as HTMLBodyElement;\n\n        container.style.visibility = 'hidden';\n        container.style.fontFamily = fontFamily;\n        container.style.fontSize = fontSize;\n        container.style.margin = '0';\n        container.style.padding = '0';\n        container.style.whiteSpace = 'nowrap';\n\n        body.appendChild(container);\n\n        img.src = SMALL_IMAGE;\n        img.width = 1;\n        img.height = 1;\n\n        img.style.margin = '0';\n        img.style.padding = '0';\n        img.style.verticalAlign = 'baseline';\n\n        span.style.fontFamily = fontFamily;\n        span.style.fontSize = fontSize;\n        span.style.margin = '0';\n        span.style.padding = '0';\n\n        span.appendChild(this._document.createTextNode(SAMPLE_TEXT));\n        container.appendChild(span);\n        container.appendChild(img);\n        const baseline = img.offsetTop - span.offsetTop + 2;\n\n        container.removeChild(span);\n        container.appendChild(this._document.createTextNode(SAMPLE_TEXT));\n\n        container.style.lineHeight = 'normal';\n        img.style.verticalAlign = 'super';\n\n        const middle = img.offsetTop - container.offsetTop + 2;\n\n        body.removeChild(container);\n\n        return {baseline, middle};\n    }\n    getMetrics(fontFamily: string, fontSize: string): FontMetric {\n        const key = `${fontFamily} ${fontSize}`;\n        if (typeof this._data[key] === 'undefined') {\n            this._data[key] = this.parseMetrics(fontFamily, fontSize);\n        }\n\n        return this._data[key];\n    }\n}\n","export const SMALL_IMAGE = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n","import {Context} from '../core/context';\nimport {RenderConfigurations} from './canvas/canvas-renderer';\n\nexport class Renderer {\n    constructor(protected readonly context: Context, protected readonly options: RenderConfigurations) {}\n}\n","import {ElementPaint, parseStackingContexts, StackingContext} from '../stacking-context';\nimport {asString, Color, isTransparent} from '../../css/types/color';\nimport {ElementContainer, FLAGS} from '../../dom/element-container';\nimport {BORDER_STYLE} from '../../css/property-descriptors/border-style';\nimport {CSSParsedDeclaration} from '../../css';\nimport {TextContainer} from '../../dom/text-container';\nimport {Path, transformPath} from '../path';\nimport {BACKGROUND_CLIP} from '../../css/property-descriptors/background-clip';\nimport {BoundCurves, calculateBorderBoxPath, calculateContentBoxPath, calculatePaddingBoxPath} from '../bound-curves';\nimport {BezierCurve, isBezierCurve} from '../bezier-curve';\nimport {Vector} from '../vector';\nimport {CSSImageType, CSSURLImage, isLinearGradient, isRadialGradient} from '../../css/types/image';\nimport {\n    parsePathForBorder,\n    parsePathForBorderDoubleInner,\n    parsePathForBorderDoubleOuter,\n    parsePathForBorderStroke\n} from '../border';\nimport {calculateBackgroundRendering, getBackgroundValueForIndex} from '../background';\nimport {isDimensionToken} from '../../css/syntax/parser';\nimport {segmentGraphemes, TextBounds} from '../../css/layout/text';\nimport {ImageElementContainer} from '../../dom/replaced-elements/image-element-container';\nimport {contentBox} from '../box-sizing';\nimport {CanvasElementContainer} from '../../dom/replaced-elements/canvas-element-container';\nimport {SVGElementContainer} from '../../dom/replaced-elements/svg-element-container';\nimport {ReplacedElementContainer} from '../../dom/replaced-elements';\nimport {EffectTarget, IElementEffect, isClipEffect, isOpacityEffect, isTransformEffect} from '../effects';\nimport {contains} from '../../core/bitwise';\nimport {calculateGradientDirection, calculateRadius, processColorStops} from '../../css/types/functions/gradient';\nimport {FIFTY_PERCENT, getAbsoluteValue} from '../../css/types/length-percentage';\nimport {TEXT_DECORATION_LINE} from '../../css/property-descriptors/text-decoration-line';\nimport {FontMetrics} from '../font-metrics';\nimport {DISPLAY} from '../../css/property-descriptors/display';\nimport {Bounds} from '../../css/layout/bounds';\nimport {LIST_STYLE_TYPE} from '../../css/property-descriptors/list-style-type';\nimport {computeLineHeight} from '../../css/property-descriptors/line-height';\nimport {CHECKBOX, INPUT_COLOR, InputElementContainer, RADIO} from '../../dom/replaced-elements/input-element-container';\nimport {TEXT_ALIGN} from '../../css/property-descriptors/text-align';\nimport {TextareaElementContainer} from '../../dom/elements/textarea-element-container';\nimport {SelectElementContainer} from '../../dom/elements/select-element-container';\nimport {IFrameElementContainer} from '../../dom/replaced-elements/iframe-element-container';\nimport {TextShadow} from '../../css/property-descriptors/text-shadow';\nimport {PAINT_ORDER_LAYER} from '../../css/property-descriptors/paint-order';\nimport {Renderer} from '../renderer';\nimport {Context} from '../../core/context';\nimport {DIRECTION} from '../../css/property-descriptors/direction';\n\nexport type RenderConfigurations = RenderOptions & {\n    backgroundColor: Color | null;\n};\n\nexport interface RenderOptions {\n    scale: number;\n    canvas?: HTMLCanvasElement;\n    x: number;\n    y: number;\n    width: number;\n    height: number;\n}\n\nconst MASK_OFFSET = 10000;\n\nexport class CanvasRenderer extends Renderer {\n    canvas: HTMLCanvasElement;\n    ctx: CanvasRenderingContext2D;\n    private readonly _activeEffects: IElementEffect[] = [];\n    private readonly fontMetrics: FontMetrics;\n\n    constructor(context: Context, options: RenderConfigurations) {\n        super(context, options);\n        this.canvas = options.canvas ? options.canvas : document.createElement('canvas');\n        this.ctx = this.canvas.getContext('2d') as CanvasRenderingContext2D;\n        if (!options.canvas) {\n            this.canvas.width = Math.floor(options.width * options.scale);\n            this.canvas.height = Math.floor(options.height * options.scale);\n            this.canvas.style.width = `${options.width}px`;\n            this.canvas.style.height = `${options.height}px`;\n        }\n        this.fontMetrics = new FontMetrics(document);\n        this.ctx.scale(this.options.scale, this.options.scale);\n        this.ctx.translate(-options.x, -options.y);\n        this.ctx.textBaseline = 'bottom';\n        this._activeEffects = [];\n        this.context.logger.debug(\n            `Canvas renderer initialized (${options.width}x${options.height}) with scale ${options.scale}`\n        );\n    }\n\n    applyEffects(effects: IElementEffect[]): void {\n        while (this._activeEffects.length) {\n            this.popEffect();\n        }\n\n        effects.forEach((effect) => this.applyEffect(effect));\n    }\n\n    applyEffect(effect: IElementEffect): void {\n        this.ctx.save();\n        if (isOpacityEffect(effect)) {\n            this.ctx.globalAlpha = effect.opacity;\n        }\n\n        if (isTransformEffect(effect)) {\n            this.ctx.translate(effect.offsetX, effect.offsetY);\n            this.ctx.transform(\n                effect.matrix[0],\n                effect.matrix[1],\n                effect.matrix[2],\n                effect.matrix[3],\n                effect.matrix[4],\n                effect.matrix[5]\n            );\n            this.ctx.translate(-effect.offsetX, -effect.offsetY);\n        }\n\n        if (isClipEffect(effect)) {\n            this.path(effect.path);\n            this.ctx.clip();\n        }\n\n        this._activeEffects.push(effect);\n    }\n\n    popEffect(): void {\n        this._activeEffects.pop();\n        this.ctx.restore();\n    }\n\n    async renderStack(stack: StackingContext): Promise<void> {\n        const styles = stack.element.container.styles;\n        if (styles.isVisible()) {\n            await this.renderStackContent(stack);\n        }\n    }\n\n    async renderNode(paint: ElementPaint): Promise<void> {\n        if (contains(paint.container.flags, FLAGS.DEBUG_RENDER)) {\n            debugger;\n        }\n\n        if (paint.container.styles.isVisible()) {\n            await this.renderNodeBackgroundAndBorders(paint);\n            await this.renderNodeContent(paint);\n        }\n    }\n\n    renderTextWithLetterSpacing(text: TextBounds, letterSpacing: number, baseline: number): void {\n        if (letterSpacing === 0) {\n            this.ctx.fillText(text.text, text.bounds.left, text.bounds.top + baseline);\n        } else {\n            const letters = segmentGraphemes(text.text);\n            letters.reduce((left, letter) => {\n                this.ctx.fillText(letter, left, text.bounds.top + baseline);\n\n                return left + this.ctx.measureText(letter).width;\n            }, text.bounds.left);\n        }\n    }\n\n    private createFontStyle(styles: CSSParsedDeclaration): string[] {\n        const fontVariant = styles.fontVariant\n            .filter((variant) => variant === 'normal' || variant === 'small-caps')\n            .join('');\n        const fontFamily = fixIOSSystemFonts(styles.fontFamily).join(', ');\n        const fontSize = isDimensionToken(styles.fontSize)\n            ? `${styles.fontSize.number}${styles.fontSize.unit}`\n            : `${styles.fontSize.number}px`;\n\n        return [\n            [styles.fontStyle, fontVariant, styles.fontWeight, fontSize, fontFamily].join(' '),\n            fontFamily,\n            fontSize\n        ];\n    }\n\n    async renderTextNode(text: TextContainer, styles: CSSParsedDeclaration): Promise<void> {\n        const [font, fontFamily, fontSize] = this.createFontStyle(styles);\n\n        this.ctx.font = font;\n\n        this.ctx.direction = styles.direction === DIRECTION.RTL ? 'rtl' : 'ltr';\n        this.ctx.textAlign = 'left';\n        this.ctx.textBaseline = 'alphabetic';\n        const {baseline, middle} = this.fontMetrics.getMetrics(fontFamily, fontSize);\n        const paintOrder = styles.paintOrder;\n\n        text.textBounds.forEach((text) => {\n            paintOrder.forEach((paintOrderLayer) => {\n                switch (paintOrderLayer) {\n                    case PAINT_ORDER_LAYER.FILL:\n                        this.ctx.fillStyle = asString(styles.color);\n                        this.renderTextWithLetterSpacing(text, styles.letterSpacing, baseline);\n                        const textShadows: TextShadow = styles.textShadow;\n\n                        if (textShadows.length && text.text.trim().length) {\n                            textShadows\n                                .slice(0)\n                                .reverse()\n                                .forEach((textShadow) => {\n                                    this.ctx.shadowColor = asString(textShadow.color);\n                                    this.ctx.shadowOffsetX = textShadow.offsetX.number * this.options.scale;\n                                    this.ctx.shadowOffsetY = textShadow.offsetY.number * this.options.scale;\n                                    this.ctx.shadowBlur = textShadow.blur.number;\n\n                                    this.renderTextWithLetterSpacing(text, styles.letterSpacing, baseline);\n                                });\n\n                            this.ctx.shadowColor = '';\n                            this.ctx.shadowOffsetX = 0;\n                            this.ctx.shadowOffsetY = 0;\n                            this.ctx.shadowBlur = 0;\n                        }\n\n                        if (styles.textDecorationLine.length) {\n                            this.ctx.fillStyle = asString(styles.textDecorationColor || styles.color);\n                            styles.textDecorationLine.forEach((textDecorationLine) => {\n                                switch (textDecorationLine) {\n                                    case TEXT_DECORATION_LINE.UNDERLINE:\n                                        // Draws a line at the baseline of the font\n                                        // TODO As some browsers display the line as more than 1px if the font-size is big,\n                                        // need to take that into account both in position and size\n                                        this.ctx.fillRect(\n                                            text.bounds.left,\n                                            Math.round(text.bounds.top + baseline),\n                                            text.bounds.width,\n                                            1\n                                        );\n\n                                        break;\n                                    case TEXT_DECORATION_LINE.OVERLINE:\n                                        this.ctx.fillRect(\n                                            text.bounds.left,\n                                            Math.round(text.bounds.top),\n                                            text.bounds.width,\n                                            1\n                                        );\n                                        break;\n                                    case TEXT_DECORATION_LINE.LINE_THROUGH:\n                                        // TODO try and find exact position for line-through\n                                        this.ctx.fillRect(\n                                            text.bounds.left,\n                                            Math.ceil(text.bounds.top + middle),\n                                            text.bounds.width,\n                                            1\n                                        );\n                                        break;\n                                }\n                            });\n                        }\n                        break;\n                    case PAINT_ORDER_LAYER.STROKE:\n                        if (styles.webkitTextStrokeWidth && text.text.trim().length) {\n                            this.ctx.strokeStyle = asString(styles.webkitTextStrokeColor);\n                            this.ctx.lineWidth = styles.webkitTextStrokeWidth;\n                            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                            this.ctx.lineJoin = !!(window as any).chrome ? 'miter' : 'round';\n                            this.ctx.strokeText(text.text, text.bounds.left, text.bounds.top + baseline);\n                        }\n                        this.ctx.strokeStyle = '';\n                        this.ctx.lineWidth = 0;\n                        this.ctx.lineJoin = 'miter';\n                        break;\n                }\n            });\n        });\n    }\n\n    renderReplacedElement(\n        container: ReplacedElementContainer,\n        curves: BoundCurves,\n        image: HTMLImageElement | HTMLCanvasElement\n    ): void {\n        if (image && container.intrinsicWidth > 0 && container.intrinsicHeight > 0) {\n            const box = contentBox(container);\n            const path = calculatePaddingBoxPath(curves);\n            this.path(path);\n            this.ctx.save();\n            this.ctx.clip();\n            this.ctx.drawImage(\n                image,\n                0,\n                0,\n                container.intrinsicWidth,\n                container.intrinsicHeight,\n                box.left,\n                box.top,\n                box.width,\n                box.height\n            );\n            this.ctx.restore();\n        }\n    }\n\n    async renderNodeContent(paint: ElementPaint): Promise<void> {\n        this.applyEffects(paint.getEffects(EffectTarget.CONTENT));\n        const container = paint.container;\n        const curves = paint.curves;\n        const styles = container.styles;\n        for (const child of container.textNodes) {\n            await this.renderTextNode(child, styles);\n        }\n\n        if (container instanceof ImageElementContainer) {\n            try {\n                const image = await this.context.cache.match(container.src);\n                this.renderReplacedElement(container, curves, image);\n            } catch (e) {\n                this.context.logger.error(`Error loading image ${container.src}`);\n            }\n        }\n\n        if (container instanceof CanvasElementContainer) {\n            this.renderReplacedElement(container, curves, container.canvas);\n        }\n\n        if (container instanceof SVGElementContainer) {\n            try {\n                const image = await this.context.cache.match(container.svg);\n                this.renderReplacedElement(container, curves, image);\n            } catch (e) {\n                this.context.logger.error(`Error loading svg ${container.svg.substring(0, 255)}`);\n            }\n        }\n\n        if (container instanceof IFrameElementContainer && container.tree) {\n            const iframeRenderer = new CanvasRenderer(this.context, {\n                scale: this.options.scale,\n                backgroundColor: container.backgroundColor,\n                x: 0,\n                y: 0,\n                width: container.width,\n                height: container.height\n            });\n\n            const canvas = await iframeRenderer.render(container.tree);\n            if (container.width && container.height) {\n                this.ctx.drawImage(\n                    canvas,\n                    0,\n                    0,\n                    container.width,\n                    container.height,\n                    container.bounds.left,\n                    container.bounds.top,\n                    container.bounds.width,\n                    container.bounds.height\n                );\n            }\n        }\n\n        if (container instanceof InputElementContainer) {\n            const size = Math.min(container.bounds.width, container.bounds.height);\n\n            if (container.type === CHECKBOX) {\n                if (container.checked) {\n                    this.ctx.save();\n                    this.path([\n                        new Vector(container.bounds.left + size * 0.39363, container.bounds.top + size * 0.79),\n                        new Vector(container.bounds.left + size * 0.16, container.bounds.top + size * 0.5549),\n                        new Vector(container.bounds.left + size * 0.27347, container.bounds.top + size * 0.44071),\n                        new Vector(container.bounds.left + size * 0.39694, container.bounds.top + size * 0.5649),\n                        new Vector(container.bounds.left + size * 0.72983, container.bounds.top + size * 0.23),\n                        new Vector(container.bounds.left + size * 0.84, container.bounds.top + size * 0.34085),\n                        new Vector(container.bounds.left + size * 0.39363, container.bounds.top + size * 0.79)\n                    ]);\n\n                    this.ctx.fillStyle = asString(INPUT_COLOR);\n                    this.ctx.fill();\n                    this.ctx.restore();\n                }\n            } else if (container.type === RADIO) {\n                if (container.checked) {\n                    this.ctx.save();\n                    this.ctx.beginPath();\n                    this.ctx.arc(\n                        container.bounds.left + size / 2,\n                        container.bounds.top + size / 2,\n                        size / 4,\n                        0,\n                        Math.PI * 2,\n                        true\n                    );\n                    this.ctx.fillStyle = asString(INPUT_COLOR);\n                    this.ctx.fill();\n                    this.ctx.restore();\n                }\n            }\n        }\n\n        if (isTextInputElement(container) && container.value.length) {\n            const [fontFamily, fontSize] = this.createFontStyle(styles);\n            const {baseline} = this.fontMetrics.getMetrics(fontFamily, fontSize);\n\n            this.ctx.font = fontFamily;\n            this.ctx.fillStyle = asString(styles.color);\n\n            this.ctx.textBaseline = 'alphabetic';\n            this.ctx.textAlign = canvasTextAlign(container.styles.textAlign);\n\n            const bounds = contentBox(container);\n\n            let x = 0;\n\n            switch (container.styles.textAlign) {\n                case TEXT_ALIGN.CENTER:\n                    x += bounds.width / 2;\n                    break;\n                case TEXT_ALIGN.RIGHT:\n                    x += bounds.width;\n                    break;\n            }\n\n            const textBounds = bounds.add(x, 0, 0, -bounds.height / 2 + 1);\n\n            this.ctx.save();\n            this.path([\n                new Vector(bounds.left, bounds.top),\n                new Vector(bounds.left + bounds.width, bounds.top),\n                new Vector(bounds.left + bounds.width, bounds.top + bounds.height),\n                new Vector(bounds.left, bounds.top + bounds.height)\n            ]);\n\n            this.ctx.clip();\n            this.renderTextWithLetterSpacing(\n                new TextBounds(container.value, textBounds),\n                styles.letterSpacing,\n                baseline\n            );\n            this.ctx.restore();\n            this.ctx.textBaseline = 'alphabetic';\n            this.ctx.textAlign = 'left';\n        }\n\n        if (contains(container.styles.display, DISPLAY.LIST_ITEM)) {\n            if (container.styles.listStyleImage !== null) {\n                const img = container.styles.listStyleImage;\n                if (img.type === CSSImageType.URL) {\n                    let image;\n                    const url = (img as CSSURLImage).url;\n                    try {\n                        image = await this.context.cache.match(url);\n                        this.ctx.drawImage(image, container.bounds.left - (image.width + 10), container.bounds.top);\n                    } catch (e) {\n                        this.context.logger.error(`Error loading list-style-image ${url}`);\n                    }\n                }\n            } else if (paint.listValue && container.styles.listStyleType !== LIST_STYLE_TYPE.NONE) {\n                const [fontFamily] = this.createFontStyle(styles);\n\n                this.ctx.font = fontFamily;\n                this.ctx.fillStyle = asString(styles.color);\n\n                this.ctx.textBaseline = 'middle';\n                this.ctx.textAlign = 'right';\n                const bounds = new Bounds(\n                    container.bounds.left,\n                    container.bounds.top + getAbsoluteValue(container.styles.paddingTop, container.bounds.width),\n                    container.bounds.width,\n                    computeLineHeight(styles.lineHeight, styles.fontSize.number) / 2 + 1\n                );\n\n                this.renderTextWithLetterSpacing(\n                    new TextBounds(paint.listValue, bounds),\n                    styles.letterSpacing,\n                    computeLineHeight(styles.lineHeight, styles.fontSize.number) / 2 + 2\n                );\n                this.ctx.textBaseline = 'bottom';\n                this.ctx.textAlign = 'left';\n            }\n        }\n    }\n\n    async renderStackContent(stack: StackingContext): Promise<void> {\n        if (contains(stack.element.container.flags, FLAGS.DEBUG_RENDER)) {\n            debugger;\n        }\n        // https://www.w3.org/TR/css-position-3/#painting-order\n        // 1. the background and borders of the element forming the stacking context.\n        await this.renderNodeBackgroundAndBorders(stack.element);\n        // 2. the child stacking contexts with negative stack levels (most negative first).\n        for (const child of stack.negativeZIndex) {\n            await this.renderStack(child);\n        }\n        // 3. For all its in-flow, non-positioned, block-level descendants in tree order:\n        await this.renderNodeContent(stack.element);\n\n        for (const child of stack.nonInlineLevel) {\n            await this.renderNode(child);\n        }\n        // 4. All non-positioned floating descendants, in tree order. For each one of these,\n        // treat the element as if it created a new stacking context, but any positioned descendants and descendants\n        // which actually create a new stacking context should be considered part of the parent stacking context,\n        // not this new one.\n        for (const child of stack.nonPositionedFloats) {\n            await this.renderStack(child);\n        }\n        // 5. the in-flow, inline-level, non-positioned descendants, including inline tables and inline blocks.\n        for (const child of stack.nonPositionedInlineLevel) {\n            await this.renderStack(child);\n        }\n        for (const child of stack.inlineLevel) {\n            await this.renderNode(child);\n        }\n        // 6. All positioned, opacity or transform descendants, in tree order that fall into the following categories:\n        //  All positioned descendants with 'z-index: auto' or 'z-index: 0', in tree order.\n        //  For those with 'z-index: auto', treat the element as if it created a new stacking context,\n        //  but any positioned descendants and descendants which actually create a new stacking context should be\n        //  considered part of the parent stacking context, not this new one. For those with 'z-index: 0',\n        //  treat the stacking context generated atomically.\n        //\n        //  All opacity descendants with opacity less than 1\n        //\n        //  All transform descendants with transform other than none\n        for (const child of stack.zeroOrAutoZIndexOrTransformedOrOpacity) {\n            await this.renderStack(child);\n        }\n        // 7. Stacking contexts formed by positioned descendants with z-indices greater than or equal to 1 in z-index\n        // order (smallest first) then tree order.\n        for (const child of stack.positiveZIndex) {\n            await this.renderStack(child);\n        }\n    }\n\n    mask(paths: Path[]): void {\n        this.ctx.beginPath();\n        this.ctx.moveTo(0, 0);\n        this.ctx.lineTo(this.canvas.width, 0);\n        this.ctx.lineTo(this.canvas.width, this.canvas.height);\n        this.ctx.lineTo(0, this.canvas.height);\n        this.ctx.lineTo(0, 0);\n        this.formatPath(paths.slice(0).reverse());\n        this.ctx.closePath();\n    }\n\n    path(paths: Path[]): void {\n        this.ctx.beginPath();\n        this.formatPath(paths);\n        this.ctx.closePath();\n    }\n\n    formatPath(paths: Path[]): void {\n        paths.forEach((point, index) => {\n            const start: Vector = isBezierCurve(point) ? point.start : point;\n            if (index === 0) {\n                this.ctx.moveTo(start.x, start.y);\n            } else {\n                this.ctx.lineTo(start.x, start.y);\n            }\n\n            if (isBezierCurve(point)) {\n                this.ctx.bezierCurveTo(\n                    point.startControl.x,\n                    point.startControl.y,\n                    point.endControl.x,\n                    point.endControl.y,\n                    point.end.x,\n                    point.end.y\n                );\n            }\n        });\n    }\n\n    renderRepeat(path: Path[], pattern: CanvasPattern | CanvasGradient, offsetX: number, offsetY: number): void {\n        this.path(path);\n        this.ctx.fillStyle = pattern;\n        this.ctx.translate(offsetX, offsetY);\n        this.ctx.fill();\n        this.ctx.translate(-offsetX, -offsetY);\n    }\n\n    resizeImage(image: HTMLImageElement, width: number, height: number): HTMLCanvasElement | HTMLImageElement {\n        if (image.width === width && image.height === height) {\n            return image;\n        }\n\n        const ownerDocument = this.canvas.ownerDocument ?? document;\n        const canvas = ownerDocument.createElement('canvas');\n        canvas.width = Math.max(1, width);\n        canvas.height = Math.max(1, height);\n        const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n        ctx.drawImage(image, 0, 0, image.width, image.height, 0, 0, width, height);\n        return canvas;\n    }\n\n    async renderBackgroundImage(container: ElementContainer): Promise<void> {\n        let index = container.styles.backgroundImage.length - 1;\n        for (const backgroundImage of container.styles.backgroundImage.slice(0).reverse()) {\n            if (backgroundImage.type === CSSImageType.URL) {\n                let image;\n                const url = (backgroundImage as CSSURLImage).url;\n                try {\n                    image = await this.context.cache.match(url);\n                } catch (e) {\n                    this.context.logger.error(`Error loading background-image ${url}`);\n                }\n\n                if (image) {\n                    const [path, x, y, width, height] = calculateBackgroundRendering(container, index, [\n                        image.width,\n                        image.height,\n                        image.width / image.height\n                    ]);\n                    const pattern = this.ctx.createPattern(\n                        this.resizeImage(image, width, height),\n                        'repeat'\n                    ) as CanvasPattern;\n                    this.renderRepeat(path, pattern, x, y);\n                }\n            } else if (isLinearGradient(backgroundImage)) {\n                const [path, x, y, width, height] = calculateBackgroundRendering(container, index, [null, null, null]);\n                const [lineLength, x0, x1, y0, y1] = calculateGradientDirection(backgroundImage.angle, width, height);\n\n                const canvas = document.createElement('canvas');\n                canvas.width = width;\n                canvas.height = height;\n                const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n                const gradient = ctx.createLinearGradient(x0, y0, x1, y1);\n\n                processColorStops(backgroundImage.stops, lineLength).forEach((colorStop) =>\n                    gradient.addColorStop(colorStop.stop, asString(colorStop.color))\n                );\n\n                ctx.fillStyle = gradient;\n                ctx.fillRect(0, 0, width, height);\n                if (width > 0 && height > 0) {\n                    const pattern = this.ctx.createPattern(canvas, 'repeat') as CanvasPattern;\n                    this.renderRepeat(path, pattern, x, y);\n                }\n            } else if (isRadialGradient(backgroundImage)) {\n                const [path, left, top, width, height] = calculateBackgroundRendering(container, index, [\n                    null,\n                    null,\n                    null\n                ]);\n                const position = backgroundImage.position.length === 0 ? [FIFTY_PERCENT] : backgroundImage.position;\n                const x = getAbsoluteValue(position[0], width);\n                const y = getAbsoluteValue(position[position.length - 1], height);\n\n                const [rx, ry] = calculateRadius(backgroundImage, x, y, width, height);\n                if (rx > 0 && ry > 0) {\n                    const radialGradient = this.ctx.createRadialGradient(left + x, top + y, 0, left + x, top + y, rx);\n\n                    processColorStops(backgroundImage.stops, rx * 2).forEach((colorStop) =>\n                        radialGradient.addColorStop(colorStop.stop, asString(colorStop.color))\n                    );\n\n                    this.path(path);\n                    this.ctx.fillStyle = radialGradient;\n                    if (rx !== ry) {\n                        // transforms for elliptical radial gradient\n                        const midX = container.bounds.left + 0.5 * container.bounds.width;\n                        const midY = container.bounds.top + 0.5 * container.bounds.height;\n                        const f = ry / rx;\n                        const invF = 1 / f;\n\n                        this.ctx.save();\n                        this.ctx.translate(midX, midY);\n                        this.ctx.transform(1, 0, 0, f, 0, 0);\n                        this.ctx.translate(-midX, -midY);\n\n                        this.ctx.fillRect(left, invF * (top - midY) + midY, width, height * invF);\n                        this.ctx.restore();\n                    } else {\n                        this.ctx.fill();\n                    }\n                }\n            }\n            index--;\n        }\n    }\n\n    async renderSolidBorder(color: Color, side: number, curvePoints: BoundCurves): Promise<void> {\n        this.path(parsePathForBorder(curvePoints, side));\n        this.ctx.fillStyle = asString(color);\n        this.ctx.fill();\n    }\n\n    async renderDoubleBorder(color: Color, width: number, side: number, curvePoints: BoundCurves): Promise<void> {\n        if (width < 3) {\n            await this.renderSolidBorder(color, side, curvePoints);\n            return;\n        }\n\n        const outerPaths = parsePathForBorderDoubleOuter(curvePoints, side);\n        this.path(outerPaths);\n        this.ctx.fillStyle = asString(color);\n        this.ctx.fill();\n        const innerPaths = parsePathForBorderDoubleInner(curvePoints, side);\n        this.path(innerPaths);\n        this.ctx.fill();\n    }\n\n    async renderNodeBackgroundAndBorders(paint: ElementPaint): Promise<void> {\n        this.applyEffects(paint.getEffects(EffectTarget.BACKGROUND_BORDERS));\n        const styles = paint.container.styles;\n        const hasBackground = !isTransparent(styles.backgroundColor) || styles.backgroundImage.length;\n\n        const borders = [\n            {style: styles.borderTopStyle, color: styles.borderTopColor, width: styles.borderTopWidth},\n            {style: styles.borderRightStyle, color: styles.borderRightColor, width: styles.borderRightWidth},\n            {style: styles.borderBottomStyle, color: styles.borderBottomColor, width: styles.borderBottomWidth},\n            {style: styles.borderLeftStyle, color: styles.borderLeftColor, width: styles.borderLeftWidth}\n        ];\n\n        const backgroundPaintingArea = calculateBackgroundCurvedPaintingArea(\n            getBackgroundValueForIndex(styles.backgroundClip, 0),\n            paint.curves\n        );\n\n        if (hasBackground || styles.boxShadow.length) {\n            this.ctx.save();\n            this.path(backgroundPaintingArea);\n            this.ctx.clip();\n\n            if (!isTransparent(styles.backgroundColor)) {\n                this.ctx.fillStyle = asString(styles.backgroundColor);\n                this.ctx.fill();\n            }\n\n            await this.renderBackgroundImage(paint.container);\n\n            this.ctx.restore();\n\n            styles.boxShadow\n                .slice(0)\n                .reverse()\n                .forEach((shadow) => {\n                    this.ctx.save();\n                    const borderBoxArea = calculateBorderBoxPath(paint.curves);\n                    const maskOffset = shadow.inset ? 0 : MASK_OFFSET;\n                    const shadowPaintingArea = transformPath(\n                        borderBoxArea,\n                        -maskOffset + (shadow.inset ? 1 : -1) * shadow.spread.number,\n                        (shadow.inset ? 1 : -1) * shadow.spread.number,\n                        shadow.spread.number * (shadow.inset ? -2 : 2),\n                        shadow.spread.number * (shadow.inset ? -2 : 2)\n                    );\n\n                    if (shadow.inset) {\n                        this.path(borderBoxArea);\n                        this.ctx.clip();\n                        this.mask(shadowPaintingArea);\n                    } else {\n                        this.mask(borderBoxArea);\n                        this.ctx.clip();\n                        this.path(shadowPaintingArea);\n                    }\n\n                    this.ctx.shadowOffsetX = shadow.offsetX.number + maskOffset;\n                    this.ctx.shadowOffsetY = shadow.offsetY.number;\n                    this.ctx.shadowColor = asString(shadow.color);\n                    this.ctx.shadowBlur = shadow.blur.number;\n                    this.ctx.fillStyle = shadow.inset ? asString(shadow.color) : 'rgba(0,0,0,1)';\n\n                    this.ctx.fill();\n                    this.ctx.restore();\n                });\n        }\n\n        let side = 0;\n        for (const border of borders) {\n            if (border.style !== BORDER_STYLE.NONE && !isTransparent(border.color) && border.width > 0) {\n                if (border.style === BORDER_STYLE.DASHED) {\n                    await this.renderDashedDottedBorder(\n                        border.color,\n                        border.width,\n                        side,\n                        paint.curves,\n                        BORDER_STYLE.DASHED\n                    );\n                } else if (border.style === BORDER_STYLE.DOTTED) {\n                    await this.renderDashedDottedBorder(\n                        border.color,\n                        border.width,\n                        side,\n                        paint.curves,\n                        BORDER_STYLE.DOTTED\n                    );\n                } else if (border.style === BORDER_STYLE.DOUBLE) {\n                    await this.renderDoubleBorder(border.color, border.width, side, paint.curves);\n                } else {\n                    await this.renderSolidBorder(border.color, side, paint.curves);\n                }\n            }\n            side++;\n        }\n    }\n\n    async renderDashedDottedBorder(\n        color: Color,\n        width: number,\n        side: number,\n        curvePoints: BoundCurves,\n        style: BORDER_STYLE\n    ): Promise<void> {\n        this.ctx.save();\n\n        const strokePaths = parsePathForBorderStroke(curvePoints, side);\n        const boxPaths = parsePathForBorder(curvePoints, side);\n\n        if (style === BORDER_STYLE.DASHED) {\n            this.path(boxPaths);\n            this.ctx.clip();\n        }\n\n        let startX, startY, endX, endY;\n        if (isBezierCurve(boxPaths[0])) {\n            startX = (boxPaths[0] as BezierCurve).start.x;\n            startY = (boxPaths[0] as BezierCurve).start.y;\n        } else {\n            startX = (boxPaths[0] as Vector).x;\n            startY = (boxPaths[0] as Vector).y;\n        }\n        if (isBezierCurve(boxPaths[1])) {\n            endX = (boxPaths[1] as BezierCurve).end.x;\n            endY = (boxPaths[1] as BezierCurve).end.y;\n        } else {\n            endX = (boxPaths[1] as Vector).x;\n            endY = (boxPaths[1] as Vector).y;\n        }\n\n        let length;\n        if (side === 0 || side === 2) {\n            length = Math.abs(startX - endX);\n        } else {\n            length = Math.abs(startY - endY);\n        }\n\n        this.ctx.beginPath();\n        if (style === BORDER_STYLE.DOTTED) {\n            this.formatPath(strokePaths);\n        } else {\n            this.formatPath(boxPaths.slice(0, 2));\n        }\n\n        let dashLength = width < 3 ? width * 3 : width * 2;\n        let spaceLength = width < 3 ? width * 2 : width;\n        if (style === BORDER_STYLE.DOTTED) {\n            dashLength = width;\n            spaceLength = width;\n        }\n\n        let useLineDash = true;\n        if (length <= dashLength * 2) {\n            useLineDash = false;\n        } else if (length <= dashLength * 2 + spaceLength) {\n            const multiplier = length / (2 * dashLength + spaceLength);\n            dashLength *= multiplier;\n            spaceLength *= multiplier;\n        } else {\n            const numberOfDashes = Math.floor((length + spaceLength) / (dashLength + spaceLength));\n            const minSpace = (length - numberOfDashes * dashLength) / (numberOfDashes - 1);\n            const maxSpace = (length - (numberOfDashes + 1) * dashLength) / numberOfDashes;\n            spaceLength =\n                maxSpace <= 0 || Math.abs(spaceLength - minSpace) < Math.abs(spaceLength - maxSpace)\n                    ? minSpace\n                    : maxSpace;\n        }\n\n        if (useLineDash) {\n            if (style === BORDER_STYLE.DOTTED) {\n                this.ctx.setLineDash([0, dashLength + spaceLength]);\n            } else {\n                this.ctx.setLineDash([dashLength, spaceLength]);\n            }\n        }\n\n        if (style === BORDER_STYLE.DOTTED) {\n            this.ctx.lineCap = 'round';\n            this.ctx.lineWidth = width;\n        } else {\n            this.ctx.lineWidth = width * 2 + 1.1;\n        }\n        this.ctx.strokeStyle = asString(color);\n        this.ctx.stroke();\n        this.ctx.setLineDash([]);\n\n        // dashed round edge gap\n        if (style === BORDER_STYLE.DASHED) {\n            if (isBezierCurve(boxPaths[0])) {\n                const path1 = boxPaths[3] as BezierCurve;\n                const path2 = boxPaths[0] as BezierCurve;\n                this.ctx.beginPath();\n                this.formatPath([new Vector(path1.end.x, path1.end.y), new Vector(path2.start.x, path2.start.y)]);\n                this.ctx.stroke();\n            }\n            if (isBezierCurve(boxPaths[1])) {\n                const path1 = boxPaths[1] as BezierCurve;\n                const path2 = boxPaths[2] as BezierCurve;\n                this.ctx.beginPath();\n                this.formatPath([new Vector(path1.end.x, path1.end.y), new Vector(path2.start.x, path2.start.y)]);\n                this.ctx.stroke();\n            }\n        }\n\n        this.ctx.restore();\n    }\n\n    async render(element: ElementContainer): Promise<HTMLCanvasElement> {\n        if (this.options.backgroundColor) {\n            this.ctx.fillStyle = asString(this.options.backgroundColor);\n            this.ctx.fillRect(this.options.x, this.options.y, this.options.width, this.options.height);\n        }\n\n        const stack = parseStackingContexts(element);\n\n        await this.renderStack(stack);\n        this.applyEffects([]);\n        return this.canvas;\n    }\n}\n\nconst isTextInputElement = (\n    container: ElementContainer\n): container is InputElementContainer | TextareaElementContainer | SelectElementContainer => {\n    if (container instanceof TextareaElementContainer) {\n        return true;\n    } else if (container instanceof SelectElementContainer) {\n        return true;\n    } else if (container instanceof InputElementContainer && container.type !== RADIO && container.type !== CHECKBOX) {\n        return true;\n    }\n    return false;\n};\n\nconst calculateBackgroundCurvedPaintingArea = (clip: BACKGROUND_CLIP, curves: BoundCurves): Path[] => {\n    switch (clip) {\n        case BACKGROUND_CLIP.BORDER_BOX:\n            return calculateBorderBoxPath(curves);\n        case BACKGROUND_CLIP.CONTENT_BOX:\n            return calculateContentBoxPath(curves);\n        case BACKGROUND_CLIP.PADDING_BOX:\n        default:\n            return calculatePaddingBoxPath(curves);\n    }\n};\n\nconst canvasTextAlign = (textAlign: TEXT_ALIGN): CanvasTextAlign => {\n    switch (textAlign) {\n        case TEXT_ALIGN.CENTER:\n            return 'center';\n        case TEXT_ALIGN.RIGHT:\n            return 'right';\n        case TEXT_ALIGN.LEFT:\n        default:\n            return 'left';\n    }\n};\n\n// see https://github.com/niklasvh/html2canvas/pull/2645\nconst iOSBrokenFonts = ['-apple-system', 'system-ui'];\n\nconst fixIOSSystemFonts = (fontFamilies: string[]): string[] => {\n    return /iPhone OS 15_(0|1)/.test(window.navigator.userAgent)\n        ? fontFamilies.filter((fontFamily) => iOSBrokenFonts.indexOf(fontFamily) === -1)\n        : fontFamilies;\n};\n","import {RenderConfigurations} from './canvas-renderer';\nimport {createForeignObjectSVG} from '../../core/features';\nimport {asString} from '../../css/types/color';\nimport {Renderer} from '../renderer';\nimport {Context} from '../../core/context';\n\nexport class ForeignObjectRenderer extends Renderer {\n    canvas: HTMLCanvasElement;\n    ctx: CanvasRenderingContext2D;\n    options: RenderConfigurations;\n\n    constructor(context: Context, options: RenderConfigurations) {\n        super(context, options);\n        this.canvas = options.canvas ? options.canvas : document.createElement('canvas');\n        this.ctx = this.canvas.getContext('2d') as CanvasRenderingContext2D;\n        this.options = options;\n        this.canvas.width = Math.floor(options.width * options.scale);\n        this.canvas.height = Math.floor(options.height * options.scale);\n        this.canvas.style.width = `${options.width}px`;\n        this.canvas.style.height = `${options.height}px`;\n\n        this.ctx.scale(this.options.scale, this.options.scale);\n        this.ctx.translate(-options.x, -options.y);\n        this.context.logger.debug(\n            `EXPERIMENTAL ForeignObject renderer initialized (${options.width}x${options.height} at ${options.x},${options.y}) with scale ${options.scale}`\n        );\n    }\n\n    async render(element: HTMLElement): Promise<HTMLCanvasElement> {\n        const svg = createForeignObjectSVG(\n            this.options.width * this.options.scale,\n            this.options.height * this.options.scale,\n            this.options.scale,\n            this.options.scale,\n            element\n        );\n\n        const img = await loadSerializedSVG(svg);\n\n        if (this.options.backgroundColor) {\n            this.ctx.fillStyle = asString(this.options.backgroundColor);\n            this.ctx.fillRect(0, 0, this.options.width * this.options.scale, this.options.height * this.options.scale);\n        }\n\n        this.ctx.drawImage(img, -this.options.x * this.options.scale, -this.options.y * this.options.scale);\n\n        return this.canvas;\n    }\n}\n\nexport const loadSerializedSVG = (svg: Node): Promise<HTMLImageElement> =>\n    new Promise((resolve, reject) => {\n        const img = new Image();\n        img.onload = () => {\n            resolve(img);\n        };\n        img.onerror = reject;\n\n        img.src = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(new XMLSerializer().serializeToString(svg))}`;\n    });\n","export interface LoggerOptions {\n    id: string;\n    enabled: boolean;\n}\n\nexport class Logger {\n    static instances: {[key: string]: Logger} = {};\n\n    private readonly id: string;\n    private readonly enabled: boolean;\n    private readonly start: number;\n\n    constructor({id, enabled}: LoggerOptions) {\n        this.id = id;\n        this.enabled = enabled;\n        this.start = Date.now();\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    debug(...args: unknown[]): void {\n        if (this.enabled) {\n            // eslint-disable-next-line no-console\n            if (typeof window !== 'undefined' && window.console && typeof console.debug === 'function') {\n                // eslint-disable-next-line no-console\n                console.debug(this.id, `${this.getTime()}ms`, ...args);\n            } else {\n                this.info(...args);\n            }\n        }\n    }\n\n    getTime(): number {\n        return Date.now() - this.start;\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    info(...args: unknown[]): void {\n        if (this.enabled) {\n            // eslint-disable-next-line no-console\n            if (typeof window !== 'undefined' && window.console && typeof console.info === 'function') {\n                // eslint-disable-next-line no-console\n                console.info(this.id, `${this.getTime()}ms`, ...args);\n            }\n        }\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    warn(...args: unknown[]): void {\n        if (this.enabled) {\n            // eslint-disable-next-line no-console\n            if (typeof window !== 'undefined' && window.console && typeof console.warn === 'function') {\n                // eslint-disable-next-line no-console\n                console.warn(this.id, `${this.getTime()}ms`, ...args);\n            } else {\n                this.info(...args);\n            }\n        }\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    error(...args: unknown[]): void {\n        if (this.enabled) {\n            // eslint-disable-next-line no-console\n            if (typeof window !== 'undefined' && window.console && typeof console.error === 'function') {\n                // eslint-disable-next-line no-console\n                console.error(this.id, `${this.getTime()}ms`, ...args);\n            } else {\n                this.info(...args);\n            }\n        }\n    }\n}\n","import {Logger} from './logger';\nimport {Cache, ResourceOptions} from './cache-storage';\nimport {Bounds} from '../css/layout/bounds';\n\nexport type ContextOptions = {\n    logging: boolean;\n    cache?: Cache;\n} & ResourceOptions;\n\nexport class Context {\n    private readonly instanceName = `#${Context.instanceCount++}`;\n    readonly logger: Logger;\n    readonly cache: Cache;\n\n    private static instanceCount = 1;\n\n    constructor(options: ContextOptions, public windowBounds: Bounds) {\n        this.logger = new Logger({id: this.instanceName, enabled: options.logging});\n        this.cache = options.cache ?? new Cache(this, options);\n    }\n}\n","import {Bounds, parseBounds, parseDocumentSize} from './css/layout/bounds';\nimport {COLORS, isTransparent, parseColor} from './css/types/color';\nimport {CloneConfigurations, CloneOptions, DocumentCloner, WindowOptions} from './dom/document-cloner';\nimport {isBodyElement, isHTMLElement, parseTree} from './dom/node-parser';\nimport {CacheStorage} from './core/cache-storage';\nimport {CanvasRenderer, RenderConfigurations, RenderOptions} from './render/canvas/canvas-renderer';\nimport {ForeignObjectRenderer} from './render/canvas/foreignobject-renderer';\nimport {Context, ContextOptions} from './core/context';\n\nexport type Options = CloneOptions &\n    WindowOptions &\n    RenderOptions &\n    ContextOptions & {\n        backgroundColor: string | null;\n        foreignObjectRendering: boolean;\n        removeContainer?: boolean;\n    };\n\nconst html2canvas = (element: HTMLElement, options: Partial<Options> = {}): Promise<HTMLCanvasElement> => {\n    return renderElement(element, options);\n};\n\nexport default html2canvas;\n\nif (typeof window !== 'undefined') {\n    CacheStorage.setContext(window);\n}\n\nconst renderElement = async (element: HTMLElement, opts: Partial<Options>): Promise<HTMLCanvasElement> => {\n    if (!element || typeof element !== 'object') {\n        return Promise.reject('Invalid element provided as first argument');\n    }\n    const ownerDocument = element.ownerDocument;\n\n    if (!ownerDocument) {\n        throw new Error(`Element is not attached to a Document`);\n    }\n\n    const defaultView = ownerDocument.defaultView;\n\n    if (!defaultView) {\n        throw new Error(`Document is not attached to a Window`);\n    }\n\n    const resourceOptions = {\n        allowTaint: opts.allowTaint ?? false,\n        imageTimeout: opts.imageTimeout ?? 15000,\n        proxy: opts.proxy,\n        useCORS: opts.useCORS ?? false\n    };\n\n    const contextOptions = {\n        logging: opts.logging ?? true,\n        cache: opts.cache,\n        ...resourceOptions\n    };\n\n    const windowOptions = {\n        windowWidth: opts.windowWidth ?? defaultView.innerWidth,\n        windowHeight: opts.windowHeight ?? defaultView.innerHeight,\n        scrollX: opts.scrollX ?? defaultView.pageXOffset,\n        scrollY: opts.scrollY ?? defaultView.pageYOffset\n    };\n\n    const windowBounds = new Bounds(\n        windowOptions.scrollX,\n        windowOptions.scrollY,\n        windowOptions.windowWidth,\n        windowOptions.windowHeight\n    );\n\n    const context = new Context(contextOptions, windowBounds);\n\n    const foreignObjectRendering = opts.foreignObjectRendering ?? false;\n\n    const cloneOptions: CloneConfigurations = {\n        allowTaint: opts.allowTaint ?? false,\n        onclone: opts.onclone,\n        ignoreElements: opts.ignoreElements,\n        inlineImages: foreignObjectRendering,\n        copyStyles: foreignObjectRendering\n    };\n\n    context.logger.debug(\n        `Starting document clone with size ${windowBounds.width}x${\n            windowBounds.height\n        } scrolled to ${-windowBounds.left},${-windowBounds.top}`\n    );\n\n    const documentCloner = new DocumentCloner(context, element, cloneOptions);\n    const clonedElement = documentCloner.clonedReferenceElement;\n    if (!clonedElement) {\n        return Promise.reject(`Unable to find element in cloned iframe`);\n    }\n\n    const container = await documentCloner.toIFrame(ownerDocument, windowBounds);\n\n    const {width, height, left, top} =\n        isBodyElement(clonedElement) || isHTMLElement(clonedElement)\n            ? parseDocumentSize(clonedElement.ownerDocument)\n            : parseBounds(context, clonedElement);\n\n    const backgroundColor = parseBackgroundColor(context, clonedElement, opts.backgroundColor);\n\n    const renderOptions: RenderConfigurations = {\n        canvas: opts.canvas,\n        backgroundColor,\n        scale: opts.scale ?? defaultView.devicePixelRatio ?? 1,\n        x: (opts.x ?? 0) + left,\n        y: (opts.y ?? 0) + top,\n        width: opts.width ?? Math.ceil(width),\n        height: opts.height ?? Math.ceil(height)\n    };\n\n    let canvas;\n\n    if (foreignObjectRendering) {\n        context.logger.debug(`Document cloned, using foreign object rendering`);\n        const renderer = new ForeignObjectRenderer(context, renderOptions);\n        canvas = await renderer.render(clonedElement);\n    } else {\n        context.logger.debug(\n            `Document cloned, element located at ${left},${top} with size ${width}x${height} using computed rendering`\n        );\n\n        context.logger.debug(`Starting DOM parsing`);\n        const root = parseTree(context, clonedElement);\n\n        if (backgroundColor === root.styles.backgroundColor) {\n            root.styles.backgroundColor = COLORS.TRANSPARENT;\n        }\n\n        context.logger.debug(\n            `Starting renderer for element at ${renderOptions.x},${renderOptions.y} with size ${renderOptions.width}x${renderOptions.height}`\n        );\n\n        const renderer = new CanvasRenderer(context, renderOptions);\n        canvas = await renderer.render(root);\n    }\n\n    if (opts.removeContainer ?? true) {\n        if (!DocumentCloner.destroy(container)) {\n            context.logger.error(`Cannot detach cloned iframe as it is not in the DOM anymore`);\n        }\n    }\n\n    context.logger.debug(`Finished rendering`);\n    return canvas;\n};\n\nconst parseBackgroundColor = (context: Context, element: HTMLElement, backgroundColorOverride?: string | null) => {\n    const ownerDocument = element.ownerDocument;\n    // http://www.w3.org/TR/css3-background/#special-backgrounds\n    const documentBackgroundColor = ownerDocument.documentElement\n        ? parseColor(context, getComputedStyle(ownerDocument.documentElement).backgroundColor as string)\n        : COLORS.TRANSPARENT;\n    const bodyBackgroundColor = ownerDocument.body\n        ? parseColor(context, getComputedStyle(ownerDocument.body).backgroundColor as string)\n        : COLORS.TRANSPARENT;\n\n    const defaultBackgroundColor =\n        typeof backgroundColorOverride === 'string'\n            ? parseColor(context, backgroundColorOverride)\n            : backgroundColorOverride === null\n            ? COLORS.TRANSPARENT\n            : 0xffffffff;\n\n    return element === ownerDocument.documentElement\n        ? isTransparent(documentBackgroundColor)\n            ? isTransparent(bodyBackgroundColor)\n                ? defaultBackgroundColor\n                : bodyBackgroundColor\n            : documentBackgroundColor\n        : defaultBackgroundColor;\n};\n","// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n// https://tools.ietf.org/html/rfc1951\n// You may also wish to take a look at the guide I made about this program:\n// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad\n// Much of the following code is similar to that of UZIP.js:\n// https://github.com/photopea/UZIP.js\n// Many optimizations have been made, so the bundle size is ultimately smaller but performance is similar.\n// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint\n// is better for memory in most engines (I *think*).\nvar ch2 = {};\nvar wk = (function (c, id, msg, transfer, cb) {\n    var u = ch2[id] || (ch2[id] = URL.createObjectURL(new Blob([c], { type: 'text/javascript' })));\n    var w = new Worker(u);\n    w.onerror = function (e) { return cb(e.error, null); };\n    w.onmessage = function (e) { return cb(null, e.data); };\n    w.postMessage(msg, transfer);\n    return w;\n});\n\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, u32 = Uint32Array;\n// fixed length extra bits\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\n// see fleb note\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n    var b = new u16(31);\n    for (var i = 0; i < 31; ++i) {\n        b[i] = start += 1 << eb[i - 1];\n    }\n    // numbers here are at max 18 bits\n    var r = new u32(b[30]);\n    for (var i = 1; i < 30; ++i) {\n        for (var j = b[i]; j < b[i + 1]; ++j) {\n            r[j] = ((j - b[i]) << 5) | i;\n        }\n    }\n    return [b, r];\n};\nvar _a = freb(fleb, 2), fl = _a[0], revfl = _a[1];\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b[0], revfd = _b[1];\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n    // reverse table algorithm from SO\n    var x = ((i & 0xAAAA) >>> 1) | ((i & 0x5555) << 1);\n    x = ((x & 0xCCCC) >>> 2) | ((x & 0x3333) << 2);\n    x = ((x & 0xF0F0) >>> 4) | ((x & 0x0F0F) << 4);\n    rev[i] = (((x & 0xFF00) >>> 8) | ((x & 0x00FF) << 8)) >>> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n    var s = cd.length;\n    // index\n    var i = 0;\n    // u16 \"map\": index -> # of codes with bit length = index\n    var l = new u16(mb);\n    // length of cd must be 288 (total # of codes)\n    for (; i < s; ++i)\n        ++l[cd[i] - 1];\n    // u16 \"map\": index -> minimum code for bit length = index\n    var le = new u16(mb);\n    for (i = 0; i < mb; ++i) {\n        le[i] = (le[i - 1] + l[i - 1]) << 1;\n    }\n    var co;\n    if (r) {\n        // u16 \"map\": index -> number of actual bits, symbol for code\n        co = new u16(1 << mb);\n        // bits to remove for reverser\n        var rvb = 15 - mb;\n        for (i = 0; i < s; ++i) {\n            // ignore 0 lengths\n            if (cd[i]) {\n                // num encoding both symbol and bits read\n                var sv = (i << 4) | cd[i];\n                // free bits\n                var r_1 = mb - cd[i];\n                // start value\n                var v = le[cd[i] - 1]++ << r_1;\n                // m is end value\n                for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n                    // every 16 bit value starting with the code yields the same result\n                    co[rev[v] >>> rvb] = sv;\n                }\n            }\n        }\n    }\n    else {\n        co = new u16(s);\n        for (i = 0; i < s; ++i)\n            co[i] = rev[le[cd[i] - 1]++] >>> (15 - cd[i]);\n    }\n    return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n    flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n    flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n    flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n    flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n    fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max = function (a) {\n    var m = a[0];\n    for (var i = 1; i < a.length; ++i) {\n        if (a[i] > m)\n            m = a[i];\n    }\n    return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n    var o = (p / 8) >> 0;\n    return ((d[o] | (d[o + 1] << 8)) >>> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n    var o = (p / 8) >> 0;\n    return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >>> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p / 8) >> 0) + (p & 7 && 1); };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n    if (s == null || s < 0)\n        s = 0;\n    if (e == null || e > v.length)\n        e = v.length;\n    // can't use .constructor in case user-supplied\n    var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n    n.set(v.subarray(s, e));\n    return n;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, buf, st) {\n    // source length\n    var sl = dat.length;\n    // have to estimate size\n    var noBuf = !buf || st;\n    // no state\n    var noSt = !st || st.i;\n    if (!st)\n        st = {};\n    // Assumes roughly 33% compression ratio average\n    if (!buf)\n        buf = new u8(sl * 3);\n    // ensure buffer can fit at least l elements\n    var cbuf = function (l) {\n        var bl = buf.length;\n        // need to increase size to fit\n        if (l > bl) {\n            // Double or set to necessary, whichever is greater\n            var nbuf = new u8(Math.max(bl * 2, l));\n            nbuf.set(buf);\n            buf = nbuf;\n        }\n    };\n    //  last chunk         bitpos           bytes\n    var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n    // total bits\n    var tbts = sl * 8;\n    do {\n        if (!lm) {\n            // BFINAL - this is only 1 when last chunk is next\n            st.f = final = bits(dat, pos, 1);\n            // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n            var type = bits(dat, pos + 1, 3);\n            pos += 3;\n            if (!type) {\n                // go to end of byte boundary\n                var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;\n                if (t > sl) {\n                    if (noSt)\n                        throw 'unexpected EOF';\n                    break;\n                }\n                // ensure size\n                if (noBuf)\n                    cbuf(bt + l);\n                // Copy over uncompressed data\n                buf.set(dat.subarray(s, t), bt);\n                // Get new bitpos, update byte count\n                st.b = bt += l, st.p = pos = t * 8;\n                continue;\n            }\n            else if (type == 1)\n                lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n            else if (type == 2) {\n                //  literal                            lengths\n                var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n                var tl = hLit + bits(dat, pos + 5, 31) + 1;\n                pos += 14;\n                // length+distance tree\n                var ldt = new u8(tl);\n                // code length tree\n                var clt = new u8(19);\n                for (var i = 0; i < hcLen; ++i) {\n                    // use index map to get real code\n                    clt[clim[i]] = bits(dat, pos + i * 3, 7);\n                }\n                pos += hcLen * 3;\n                // code lengths bits\n                var clb = max(clt), clbmsk = (1 << clb) - 1;\n                if (!noSt && pos + tl * (clb + 7) > tbts)\n                    break;\n                // code lengths map\n                var clm = hMap(clt, clb, 1);\n                for (var i = 0; i < tl;) {\n                    var r = clm[bits(dat, pos, clbmsk)];\n                    // bits read\n                    pos += r & 15;\n                    // symbol\n                    var s = r >>> 4;\n                    // code length to copy\n                    if (s < 16) {\n                        ldt[i++] = s;\n                    }\n                    else {\n                        //  copy   count\n                        var c = 0, n = 0;\n                        if (s == 16)\n                            n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n                        else if (s == 17)\n                            n = 3 + bits(dat, pos, 7), pos += 3;\n                        else if (s == 18)\n                            n = 11 + bits(dat, pos, 127), pos += 7;\n                        while (n--)\n                            ldt[i++] = c;\n                    }\n                }\n                //    length tree                 distance tree\n                var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n                // max length bits\n                lbt = max(lt);\n                // max dist bits\n                dbt = max(dt);\n                lm = hMap(lt, lbt, 1);\n                dm = hMap(dt, dbt, 1);\n            }\n            else\n                throw 'invalid block type';\n            if (pos > tbts)\n                throw 'unexpected EOF';\n        }\n        // Make sure the buffer can hold this + the largest possible addition\n        // Maximum chunk size (practically, theoretically infinite) is 2^17;\n        if (noBuf)\n            cbuf(bt + 131072);\n        var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n        var mxa = lbt + dbt + 18;\n        while (noSt || pos + mxa < tbts) {\n            // bits read, code\n            var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n            pos += c & 15;\n            if (pos > tbts)\n                throw 'unexpected EOF';\n            if (!c)\n                throw 'invalid length/literal';\n            if (sym < 256)\n                buf[bt++] = sym;\n            else if (sym == 256) {\n                lm = null;\n                break;\n            }\n            else {\n                var add = sym - 254;\n                // no extra bits needed if less\n                if (sym > 264) {\n                    // index\n                    var i = sym - 257, b = fleb[i];\n                    add = bits(dat, pos, (1 << b) - 1) + fl[i];\n                    pos += b;\n                }\n                // dist\n                var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n                if (!d)\n                    throw 'invalid distance';\n                pos += d & 15;\n                var dt = fd[dsym];\n                if (dsym > 3) {\n                    var b = fdeb[dsym];\n                    dt += bits16(dat, pos) & ((1 << b) - 1), pos += b;\n                }\n                if (pos > tbts)\n                    throw 'unexpected EOF';\n                if (noBuf)\n                    cbuf(bt + 131072);\n                var end = bt + add;\n                for (; bt < end; bt += 4) {\n                    buf[bt] = buf[bt - dt];\n                    buf[bt + 1] = buf[bt + 1 - dt];\n                    buf[bt + 2] = buf[bt + 2 - dt];\n                    buf[bt + 3] = buf[bt + 3 - dt];\n                }\n                bt = end;\n            }\n        }\n        st.l = lm, st.p = pos, st.b = bt;\n        if (lm)\n            final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n    } while (!final);\n    return bt == buf.length ? buf : slc(buf, 0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n    v <<= p & 7;\n    var o = (p / 8) >> 0;\n    d[o] |= v;\n    d[o + 1] |= v >>> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n    v <<= p & 7;\n    var o = (p / 8) >> 0;\n    d[o] |= v;\n    d[o + 1] |= v >>> 8;\n    d[o + 2] |= v >>> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n    // Need extra info to make a tree\n    var t = [];\n    for (var i = 0; i < d.length; ++i) {\n        if (d[i])\n            t.push({ s: i, f: d[i] });\n    }\n    var s = t.length;\n    var t2 = t.slice();\n    if (!s)\n        return [new u8(0), 0];\n    if (s == 1) {\n        var v = new u8(t[0].s + 1);\n        v[t[0].s] = 1;\n        return [v, 1];\n    }\n    t.sort(function (a, b) { return a.f - b.f; });\n    // after i2 reaches last ind, will be stopped\n    // freq must be greater than largest possible number of symbols\n    t.push({ s: -1, f: 25001 });\n    var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n    t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n    // efficient algorithm from UZIP.js\n    // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n    // symbols that combined have high freq, will start processing i2 (high-freq,\n    // non-composite) symbols instead\n    // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n    while (i1 != s - 1) {\n        l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n        r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n        t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n    }\n    var maxSym = t2[0].s;\n    for (var i = 1; i < s; ++i) {\n        if (t2[i].s > maxSym)\n            maxSym = t2[i].s;\n    }\n    // code lengths\n    var tr = new u16(maxSym + 1);\n    // max bits in tree\n    var mbt = ln(t[i1 - 1], tr, 0);\n    if (mbt > mb) {\n        // more algorithms from UZIP.js\n        // TODO: find out how this code works (debt)\n        //  ind    debt\n        var i = 0, dt = 0;\n        //    left            cost\n        var lft = mbt - mb, cst = 1 << lft;\n        t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n        for (; i < s; ++i) {\n            var i2_1 = t2[i].s;\n            if (tr[i2_1] > mb) {\n                dt += cst - (1 << (mbt - tr[i2_1]));\n                tr[i2_1] = mb;\n            }\n            else\n                break;\n        }\n        dt >>>= lft;\n        while (dt > 0) {\n            var i2_2 = t2[i].s;\n            if (tr[i2_2] < mb)\n                dt -= 1 << (mb - tr[i2_2]++ - 1);\n            else\n                ++i;\n        }\n        for (; i >= 0 && dt; --i) {\n            var i2_3 = t2[i].s;\n            if (tr[i2_3] == mb) {\n                --tr[i2_3];\n                ++dt;\n            }\n        }\n        mbt = mb;\n    }\n    return [new u8(tr), mbt];\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n    return n.s == -1\n        ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n        : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n    var s = c.length;\n    // Note that the semicolon was intentional\n    while (s && !c[--s])\n        ;\n    var cl = new u16(++s);\n    //  ind      num         streak\n    var cli = 0, cln = c[0], cls = 1;\n    var w = function (v) { cl[cli++] = v; };\n    for (var i = 1; i <= s; ++i) {\n        if (c[i] == cln && i != s)\n            ++cls;\n        else {\n            if (!cln && cls > 2) {\n                for (; cls > 138; cls -= 138)\n                    w(32754);\n                if (cls > 2) {\n                    w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n                    cls = 0;\n                }\n            }\n            else if (cls > 3) {\n                w(cln), --cls;\n                for (; cls > 6; cls -= 6)\n                    w(8304);\n                if (cls > 2)\n                    w(((cls - 3) << 5) | 8208), cls = 0;\n            }\n            while (cls--)\n                w(cln);\n            cls = 1;\n            cln = c[i];\n        }\n    }\n    return [cl.subarray(0, cli), s];\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n    var l = 0;\n    for (var i = 0; i < cl.length; ++i)\n        l += cf[i] * cl[i];\n    return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n    // no need to write 00 as type: TypedArray defaults to 0\n    var s = dat.length;\n    var o = shft(pos + 2);\n    out[o] = s & 255;\n    out[o + 1] = s >>> 8;\n    out[o + 2] = out[o] ^ 255;\n    out[o + 3] = out[o + 1] ^ 255;\n    for (var i = 0; i < s; ++i)\n        out[o + i + 4] = dat[i];\n    return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n    wbits(out, p++, final);\n    ++lf[256];\n    var _a = hTree(lf, 15), dlt = _a[0], mlb = _a[1];\n    var _b = hTree(df, 15), ddt = _b[0], mdb = _b[1];\n    var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n    var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n    var lcfreq = new u16(19);\n    for (var i = 0; i < lclt.length; ++i)\n        lcfreq[lclt[i] & 31]++;\n    for (var i = 0; i < lcdt.length; ++i)\n        lcfreq[lcdt[i] & 31]++;\n    var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n    var nlcc = 19;\n    for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n        ;\n    var flen = (bl + 5) << 3;\n    var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n    var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n    if (flen <= ftlen && flen <= dtlen)\n        return wfblk(out, p, dat.subarray(bs, bs + bl));\n    var lm, ll, dm, dl;\n    wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n    if (dtlen < ftlen) {\n        lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n        var llm = hMap(lct, mlcb, 0);\n        wbits(out, p, nlc - 257);\n        wbits(out, p + 5, ndc - 1);\n        wbits(out, p + 10, nlcc - 4);\n        p += 14;\n        for (var i = 0; i < nlcc; ++i)\n            wbits(out, p + 3 * i, lct[clim[i]]);\n        p += 3 * nlcc;\n        var lcts = [lclt, lcdt];\n        for (var it = 0; it < 2; ++it) {\n            var clct = lcts[it];\n            for (var i = 0; i < clct.length; ++i) {\n                var len = clct[i] & 31;\n                wbits(out, p, llm[len]), p += lct[len];\n                if (len > 15)\n                    wbits(out, p, (clct[i] >>> 5) & 127), p += clct[i] >>> 12;\n            }\n        }\n    }\n    else {\n        lm = flm, ll = flt, dm = fdm, dl = fdt;\n    }\n    for (var i = 0; i < li; ++i) {\n        if (syms[i] > 255) {\n            var len = (syms[i] >>> 18) & 31;\n            wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n            if (len > 7)\n                wbits(out, p, (syms[i] >>> 23) & 31), p += fleb[len];\n            var dst = syms[i] & 31;\n            wbits16(out, p, dm[dst]), p += dl[dst];\n            if (dst > 3)\n                wbits16(out, p, (syms[i] >>> 5) & 8191), p += fdeb[dst];\n        }\n        else {\n            wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n        }\n    }\n    wbits16(out, p, lm[256]);\n    return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n    var s = dat.length;\n    var o = new u8(pre + s + 5 * (1 + Math.floor(s / 7000)) + post);\n    // writing to this writes to the output buffer\n    var w = o.subarray(pre, o.length - post);\n    var pos = 0;\n    if (!lvl || s < 8) {\n        for (var i = 0; i <= s; i += 65535) {\n            // end\n            var e = i + 65535;\n            if (e < s) {\n                // write full block\n                pos = wfblk(w, pos, dat.subarray(i, e));\n            }\n            else {\n                // write final block\n                w[i] = lst;\n                pos = wfblk(w, pos, dat.subarray(i, s));\n            }\n        }\n    }\n    else {\n        var opt = deo[lvl - 1];\n        var n = opt >>> 13, c = opt & 8191;\n        var msk_1 = (1 << plvl) - 1;\n        //    prev 2-byte val map    curr 2-byte val map\n        var prev = new u16(32768), head = new u16(msk_1 + 1);\n        var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n        var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n        // 24576 is an arbitrary number of maximum symbols per block\n        // 424 buffer for last block\n        var syms = new u32(25000);\n        // length/literal freq   distance freq\n        var lf = new u16(288), df = new u16(32);\n        //  l/lcnt  exbits  index  l/lind  waitdx  bitpos\n        var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n        for (; i < s; ++i) {\n            // hash value\n            var hv = hsh(i);\n            // index mod 32768\n            var imod = i & 32767;\n            // previous index with this value\n            var pimod = head[hv];\n            prev[imod] = pimod;\n            head[hv] = imod;\n            // We always should modify head and prev, but only add symbols if\n            // this data is not yet processed (\"wait\" for wait index)\n            if (wi <= i) {\n                // bytes remaining\n                var rem = s - i;\n                if ((lc_1 > 7000 || li > 24576) && rem > 423) {\n                    pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n                    li = lc_1 = eb = 0, bs = i;\n                    for (var j = 0; j < 286; ++j)\n                        lf[j] = 0;\n                    for (var j = 0; j < 30; ++j)\n                        df[j] = 0;\n                }\n                //  len    dist   chain\n                var l = 2, d = 0, ch_1 = c, dif = (imod - pimod) & 32767;\n                if (rem > 2 && hv == hsh(i - dif)) {\n                    var maxn = Math.min(n, rem) - 1;\n                    var maxd = Math.min(32767, i);\n                    // max possible length\n                    // not capped at dif because decompressors implement \"rolling\" index population\n                    var ml = Math.min(258, rem);\n                    while (dif <= maxd && --ch_1 && imod != pimod) {\n                        if (dat[i + l] == dat[i + l - dif]) {\n                            var nl = 0;\n                            for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n                                ;\n                            if (nl > l) {\n                                l = nl, d = dif;\n                                // break out early when we reach \"nice\" (we are satisfied enough)\n                                if (nl > maxn)\n                                    break;\n                                // now, find the rarest 2-byte sequence within this\n                                // length of literals and search for that instead.\n                                // Much faster than just using the start\n                                var mmd = Math.min(dif, nl - 2);\n                                var md = 0;\n                                for (var j = 0; j < mmd; ++j) {\n                                    var ti = (i - dif + j + 32768) & 32767;\n                                    var pti = prev[ti];\n                                    var cd = (ti - pti + 32768) & 32767;\n                                    if (cd > md)\n                                        md = cd, pimod = ti;\n                                }\n                            }\n                        }\n                        // check the previous match\n                        imod = pimod, pimod = prev[imod];\n                        dif += (imod - pimod + 32768) & 32767;\n                    }\n                }\n                // d will be nonzero only when a match was found\n                if (d) {\n                    // store both dist and len data in one Uint32\n                    // Make sure this is recognized as a len/dist with 28th bit (2^28)\n                    syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n                    var lin = revfl[l] & 31, din = revfd[d] & 31;\n                    eb += fleb[lin] + fdeb[din];\n                    ++lf[257 + lin];\n                    ++df[din];\n                    wi = i + l;\n                    ++lc_1;\n                }\n                else {\n                    syms[li++] = dat[i];\n                    ++lf[dat[i]];\n                }\n            }\n        }\n        pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n        // this is the easiest way to avoid needing to maintain state\n        if (!lst)\n            pos = wfblk(w, pos, et);\n    }\n    return slc(o, 0, pre + shft(pos) + post);\n};\n// CRC32 table\nvar crct = /*#__PURE__*/ (function () {\n    var t = new u32(256);\n    for (var i = 0; i < 256; ++i) {\n        var c = i, k = 9;\n        while (--k)\n            c = ((c & 1) && 0xEDB88320) ^ (c >>> 1);\n        t[i] = c;\n    }\n    return t;\n})();\n// CRC32\nvar crc = function () {\n    var c = 0xFFFFFFFF;\n    return {\n        p: function (d) {\n            // closures have awful performance\n            var cr = c;\n            for (var i = 0; i < d.length; ++i)\n                cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);\n            c = cr;\n        },\n        d: function () { return c ^ 0xFFFFFFFF; }\n    };\n};\n// Alder32\nvar adler = function () {\n    var a = 1, b = 0;\n    return {\n        p: function (d) {\n            // closures have awful performance\n            var n = a, m = b;\n            var l = d.length;\n            for (var i = 0; i != l;) {\n                var e = Math.min(i + 5552, l);\n                for (; i < e; ++i)\n                    n += d[i], m += n;\n                n %= 65521, m %= 65521;\n            }\n            a = n, b = m;\n        },\n        d: function () { return ((a >>> 8) << 16 | (b & 255) << 8 | (b >>> 8)) + ((a & 255) << 23) * 2; }\n    };\n};\n;\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n    return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : (12 + opt.mem), pre, post, !st);\n};\n// Walmart object spread\nvar mrg = function (a, b) {\n    var o = {};\n    for (var k in a)\n        o[k] = a[k];\n    for (var k in b)\n        o[k] = b[k];\n    return o;\n};\n// worker clone\n// This is possibly the craziest part of the entire codebase, despite how simple it may seem.\n// The only parameter to this function is a closure that returns an array of variables outside of the function scope.\n// We're going to try to figure out the variable names used in the closure as strings because that is crucial for workerization.\n// We will return an object mapping of true variable name to value (basically, the current scope as a JS object).\n// The reason we can't just use the original variable names is minifiers mangling the toplevel scope.\n// This took me three weeks to figure out how to do.\nvar wcln = function (fn, fnStr, td) {\n    var dt = fn();\n    var st = fn.toString();\n    var ks = st.slice(st.indexOf('[') + 1, st.lastIndexOf(']')).replace(/ /g, '').split(',');\n    for (var i = 0; i < dt.length; ++i) {\n        var v = dt[i], k = ks[i];\n        if (typeof v == 'function') {\n            fnStr += ';' + k + '=';\n            var st_1 = v.toString();\n            if (v.prototype) {\n                // for global objects\n                if (st_1.indexOf('[native code]') != -1) {\n                    var spInd = st_1.indexOf(' ', 8) + 1;\n                    fnStr += st_1.slice(spInd, st_1.indexOf('(', spInd));\n                }\n                else {\n                    fnStr += st_1;\n                    for (var t in v.prototype)\n                        fnStr += ';' + k + '.prototype.' + t + '=' + v.prototype[t].toString();\n                }\n            }\n            else\n                fnStr += st_1;\n        }\n        else\n            td[k] = v;\n    }\n    return [fnStr, td];\n};\nvar ch = [];\n// clone bufs\nvar cbfs = function (v) {\n    var tl = [];\n    for (var k in v) {\n        if (v[k] instanceof u8 || v[k] instanceof u16 || v[k] instanceof u32)\n            tl.push((v[k] = new v[k].constructor(v[k])).buffer);\n    }\n    return tl;\n};\n// use a worker to execute code\nvar wrkr = function (fns, init, id, cb) {\n    var _a;\n    if (!ch[id]) {\n        var fnStr = '', td_1 = {}, m = fns.length - 1;\n        for (var i = 0; i < m; ++i)\n            _a = wcln(fns[i], fnStr, td_1), fnStr = _a[0], td_1 = _a[1];\n        ch[id] = wcln(fns[m], fnStr, td_1);\n    }\n    var td = mrg({}, ch[id][1]);\n    return wk(ch[id][0] + ';onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=' + init.toString() + '}', id, td, cbfs(td), cb);\n};\n// base async inflate fn\nvar bInflt = function () { return [u8, u16, u32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, hMap, max, bits, bits16, shft, slc, inflt, inflateSync, pbf, gu8]; };\nvar bDflt = function () { return [u8, u16, u32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; };\n// gzip extra\nvar gze = function () { return [gzh, gzhl, wbytes, crc, crct]; };\n// gunzip extra\nvar guze = function () { return [gzs, gzl]; };\n// zlib extra\nvar zle = function () { return [zlh, wbytes, adler]; };\n// unzlib extra\nvar zule = function () { return [zlv]; };\n// post buf\nvar pbf = function (msg) { return postMessage(msg, [msg.buffer]); };\n// get u8\nvar gu8 = function (o) { return o && o.size && new u8(o.size); };\n// async helper\nvar cbify = function (dat, opts, fns, init, id, cb) {\n    var w = wrkr(fns, init, id, function (err, dat) {\n        w.terminate();\n        cb(err, dat);\n    });\n    if (!opts.consume)\n        dat = new u8(dat);\n    w.postMessage([dat, opts], [dat.buffer]);\n    return function () { w.terminate(); };\n};\n// auto stream\nvar astrm = function (strm) {\n    strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };\n    return function (ev) { return strm.push(ev.data[0], ev.data[1]); };\n};\n// async stream attach\nvar astrmify = function (fns, strm, opts, init, id) {\n    var t;\n    var w = wrkr(fns, init, id, function (err, dat) {\n        if (err)\n            w.terminate(), strm.ondata.call(strm, err);\n        else {\n            if (dat[1])\n                w.terminate();\n            strm.ondata.call(strm, err, dat[0], dat[1]);\n        }\n    });\n    w.postMessage(opts);\n    strm.push = function (d, f) {\n        if (t)\n            throw 'stream finished';\n        if (!strm.ondata)\n            throw 'no stream handler';\n        w.postMessage([d, t = f], [d.buffer]);\n    };\n    strm.terminate = function () { w.terminate(); };\n};\n// read 2 bytes\nvar b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };\n// read 4 bytes\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16)) + (d[b + 3] << 23) * 2; };\n// write bytes\nvar wbytes = function (d, b, v) {\n    for (; v; ++b)\n        d[b] = v, v >>>= 8;\n};\n// gzip header\nvar gzh = function (c, o) {\n    var fn = o.filename;\n    c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; // assume Unix\n    if (o.mtime != 0)\n        wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1000));\n    if (fn) {\n        c[3] = 8;\n        for (var i = 0; i <= fn.length; ++i)\n            c[i + 10] = fn.charCodeAt(i);\n    }\n};\n// gzip footer: -8 to -4 = CRC, -4 to -0 is length\n// gzip start\nvar gzs = function (d) {\n    if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n        throw 'invalid gzip data';\n    var flg = d[3];\n    var st = 10;\n    if (flg & 4)\n        st += d[10] | (d[11] << 8) + 2;\n    for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n        ;\n    return st + (flg & 2);\n};\n// gzip length\nvar gzl = function (d) {\n    var l = d.length;\n    return (d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16) + (2 * (d[l - 1] << 23));\n};\n// gzip header length\nvar gzhl = function (o) { return 10 + ((o.filename && (o.filename.length + 1)) || 0); };\n// zlib header\nvar zlh = function (c, o) {\n    var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n    c[0] = 120, c[1] = (fl << 6) | (fl ? (32 - 2 * fl) : 1);\n};\n// zlib valid\nvar zlv = function (d) {\n    if ((d[0] & 15) != 8 || (d[0] >>> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n        throw 'invalid zlib data';\n    if (d[1] & 32)\n        throw 'invalid zlib data: preset dictionaries not supported';\n};\nfunction AsyncCmpStrm(opts, cb) {\n    if (!cb && typeof opts == 'function')\n        cb = opts, opts = {};\n    this.ondata = cb;\n    return opts;\n}\n// zlib footer: -4 to -0 is Adler32\n/**\n * Streaming DEFLATE compression\n */\nvar Deflate = /*#__PURE__*/ (function () {\n    function Deflate(opts, cb) {\n        if (!cb && typeof opts == 'function')\n            cb = opts, opts = {};\n        this.ondata = cb;\n        this.o = opts || {};\n    }\n    Deflate.prototype.p = function (c, f) {\n        this.ondata(dopt(c, this.o, 0, 0, !f), f);\n    };\n    /**\n     * Pushes a chunk to be deflated\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Deflate.prototype.push = function (chunk, final) {\n        if (this.d)\n            throw 'stream finished';\n        if (!this.ondata)\n            throw 'no stream handler';\n        this.d = final;\n        this.p(chunk, final || false);\n    };\n    return Deflate;\n}());\nexport { Deflate };\n/**\n * Asynchronous streaming DEFLATE compression\n */\nvar AsyncDeflate = /*#__PURE__*/ (function () {\n    function AsyncDeflate(opts, cb) {\n        astrmify([\n            bDflt,\n            function () { return [astrm, Deflate]; }\n        ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n            var strm = new Deflate(ev.data);\n            onmessage = astrm(strm);\n        }, 6);\n    }\n    return AsyncDeflate;\n}());\nexport { AsyncDeflate };\nexport function deflate(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        throw 'no callback';\n    return cbify(data, opts, [\n        bDflt,\n    ], function (ev) { return pbf(deflateSync(ev.data[0], ev.data[1])); }, 0, cb);\n}\n/**\n * Compresses data with DEFLATE without any wrapper\n * @param data The data to compress\n * @param opts The compression options\n * @returns The deflated version of the data\n */\nexport function deflateSync(data, opts) {\n    if (opts === void 0) { opts = {}; }\n    return dopt(data, opts, 0, 0);\n}\n/**\n * Streaming DEFLATE decompression\n */\nvar Inflate = /*#__PURE__*/ (function () {\n    /**\n     * Creates an inflation stream\n     * @param cb The callback to call whenever data is inflated\n     */\n    function Inflate(cb) {\n        this.s = {};\n        this.p = new u8(0);\n        this.ondata = cb;\n    }\n    Inflate.prototype.e = function (c) {\n        if (this.d)\n            throw 'stream finished';\n        if (!this.ondata)\n            throw 'no stream handler';\n        var l = this.p.length;\n        var n = new u8(l + c.length);\n        n.set(this.p), n.set(c, l), this.p = n;\n    };\n    Inflate.prototype.c = function (final) {\n        this.d = this.s.i = final || false;\n        var bts = this.s.b;\n        var dt = inflt(this.p, this.o, this.s);\n        this.ondata(slc(dt, bts, this.s.b), this.d);\n        this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n        this.p = slc(this.p, (this.s.p / 8) >> 0), this.s.p &= 7;\n    };\n    /**\n     * Pushes a chunk to be inflated\n     * @param chunk The chunk to push\n     * @param final Whether this is the final chunk\n     */\n    Inflate.prototype.push = function (chunk, final) {\n        this.e(chunk), this.c(final);\n    };\n    return Inflate;\n}());\nexport { Inflate };\n/**\n * Asynchronous streaming DEFLATE decompression\n */\nvar AsyncInflate = /*#__PURE__*/ (function () {\n    /**\n     * Creates an asynchronous inflation stream\n     * @param cb The callback to call whenever data is deflated\n     */\n    function AsyncInflate(cb) {\n        this.ondata = cb;\n        astrmify([\n            bInflt,\n            function () { return [astrm, Inflate]; }\n        ], this, 0, function () {\n            var strm = new Inflate();\n            onmessage = astrm(strm);\n        }, 7);\n    }\n    return AsyncInflate;\n}());\nexport { AsyncInflate };\nexport function inflate(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        throw 'no callback';\n    return cbify(data, opts, [\n        bInflt\n    ], function (ev) { return pbf(inflateSync(ev.data[0], gu8(ev.data[1]))); }, 1, cb);\n}\n/**\n * Expands DEFLATE data with no wrapper\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nexport function inflateSync(data, out) {\n    return inflt(data, out);\n}\n// before you yell at me for not just using extends, my reason is that TS inheritance is hard to workerize.\n/**\n * Streaming GZIP compression\n */\nvar Gzip = /*#__PURE__*/ (function () {\n    function Gzip(opts, cb) {\n        this.c = crc();\n        this.l = 0;\n        this.v = 1;\n        Deflate.call(this, opts, cb);\n    }\n    /**\n     * Pushes a chunk to be GZIPped\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Gzip.prototype.push = function (chunk, final) {\n        Deflate.prototype.push.call(this, chunk, final);\n    };\n    Gzip.prototype.p = function (c, f) {\n        this.c.p(c);\n        this.l += c.length;\n        var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, !f);\n        if (this.v)\n            gzh(raw, this.o), this.v = 0;\n        if (f)\n            wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l);\n        this.ondata(raw, f);\n    };\n    return Gzip;\n}());\nexport { Gzip };\n/**\n * Asynchronous streaming GZIP compression\n */\nvar AsyncGzip = /*#__PURE__*/ (function () {\n    function AsyncGzip(opts, cb) {\n        astrmify([\n            bDflt,\n            gze,\n            function () { return [astrm, Deflate, Gzip]; }\n        ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n            var strm = new Gzip(ev.data);\n            onmessage = astrm(strm);\n        }, 8);\n    }\n    return AsyncGzip;\n}());\nexport { AsyncGzip };\nexport function gzip(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        throw 'no callback';\n    return cbify(data, opts, [\n        bDflt,\n        gze,\n        function () { return [gzipSync]; }\n    ], function (ev) { return pbf(gzipSync(ev.data[0], ev.data[1])); }, 2, cb);\n}\n/**\n * Compresses data with GZIP\n * @param data The data to compress\n * @param opts The compression options\n * @returns The gzipped version of the data\n */\nexport function gzipSync(data, opts) {\n    if (opts === void 0) { opts = {}; }\n    var c = crc(), l = data.length;\n    c.p(data);\n    var d = dopt(data, opts, gzhl(opts), 8), s = d.length;\n    return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;\n}\n/**\n * Streaming GZIP decompression\n */\nvar Gunzip = /*#__PURE__*/ (function () {\n    /**\n     * Creates a GUNZIP stream\n     * @param cb The callback to call whenever data is inflated\n     */\n    function Gunzip(cb) {\n        this.v = 1;\n        Inflate.call(this, cb);\n    }\n    /**\n     * Pushes a chunk to be GUNZIPped\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Gunzip.prototype.push = function (chunk, final) {\n        Inflate.prototype.e.call(this, chunk);\n        if (this.v) {\n            var s = gzs(this.p);\n            if (s >= this.p.length && !final)\n                return;\n            this.p = this.p.subarray(s), this.v = 0;\n        }\n        if (final) {\n            if (this.p.length < 8)\n                throw 'invalid gzip stream';\n            this.p = this.p.subarray(0, -8);\n        }\n        // necessary to prevent TS from using the closure value\n        // This allows for workerization to function correctly\n        Inflate.prototype.c.call(this, final);\n    };\n    return Gunzip;\n}());\nexport { Gunzip };\n/**\n * Asynchronous streaming GZIP decompression\n */\nvar AsyncGunzip = /*#__PURE__*/ (function () {\n    /**\n     * Creates an asynchronous GUNZIP stream\n     * @param cb The callback to call whenever data is deflated\n     */\n    function AsyncGunzip(cb) {\n        this.ondata = cb;\n        astrmify([\n            bInflt,\n            guze,\n            function () { return [astrm, Inflate, Gunzip]; }\n        ], this, 0, function () {\n            var strm = new Gunzip();\n            onmessage = astrm(strm);\n        }, 9);\n    }\n    return AsyncGunzip;\n}());\nexport { AsyncGunzip };\nexport function gunzip(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        throw 'no callback';\n    return cbify(data, opts, [\n        bInflt,\n        guze,\n        function () { return [gunzipSync]; }\n    ], function (ev) { return pbf(gunzipSync(ev.data[0])); }, 3, cb);\n}\n/**\n * Expands GZIP data\n * @param data The data to decompress\n * @param out Where to write the data. GZIP already encodes the output size, so providing this doesn't save memory.\n * @returns The decompressed version of the data\n */\nexport function gunzipSync(data, out) {\n    return inflt(data.subarray(gzs(data), -8), out || new u8(gzl(data)));\n}\n/**\n * Streaming Zlib compression\n */\nvar Zlib = /*#__PURE__*/ (function () {\n    function Zlib(opts, cb) {\n        this.c = adler();\n        this.v = 1;\n        Deflate.call(this, opts, cb);\n    }\n    /**\n     * Pushes a chunk to be zlibbed\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Zlib.prototype.push = function (chunk, final) {\n        Deflate.prototype.push.call(this, chunk, final);\n    };\n    Zlib.prototype.p = function (c, f) {\n        this.c.p(c);\n        var raw = dopt(c, this.o, this.v && 2, f && 4, !f);\n        if (this.v)\n            zlh(raw, this.o), this.v = 0;\n        if (f)\n            wbytes(raw, raw.length - 4, this.c.d());\n        this.ondata(raw, f);\n    };\n    return Zlib;\n}());\nexport { Zlib };\n/**\n * Asynchronous streaming Zlib compression\n */\nvar AsyncZlib = /*#__PURE__*/ (function () {\n    function AsyncZlib(opts, cb) {\n        astrmify([\n            bDflt,\n            zle,\n            function () { return [astrm, Deflate, Zlib]; }\n        ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n            var strm = new Zlib(ev.data);\n            onmessage = astrm(strm);\n        }, 10);\n    }\n    return AsyncZlib;\n}());\nexport { AsyncZlib };\nexport function zlib(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        throw 'no callback';\n    return cbify(data, opts, [\n        bDflt,\n        zle,\n        function () { return [zlibSync]; }\n    ], function (ev) { return pbf(zlibSync(ev.data[0], ev.data[1])); }, 4, cb);\n}\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nexport function zlibSync(data, opts) {\n    if (opts === void 0) { opts = {}; }\n    var a = adler();\n    a.p(data);\n    var d = dopt(data, opts, 2, 4);\n    return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\n/**\n * Streaming Zlib decompression\n */\nvar Unzlib = /*#__PURE__*/ (function () {\n    /**\n     * Creates a Zlib decompression stream\n     * @param cb The callback to call whenever data is inflated\n     */\n    function Unzlib(cb) {\n        this.v = 1;\n        Inflate.call(this, cb);\n    }\n    /**\n     * Pushes a chunk to be unzlibbed\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Unzlib.prototype.push = function (chunk, final) {\n        Inflate.prototype.e.call(this, chunk);\n        if (this.v) {\n            if (this.p.length < 2 && !final)\n                return;\n            this.p = this.p.subarray(2), this.v = 0;\n        }\n        if (final) {\n            if (this.p.length < 4)\n                throw 'invalid zlib stream';\n            this.p = this.p.subarray(0, -4);\n        }\n        // necessary to prevent TS from using the closure value\n        // This allows for workerization to function correctly\n        Inflate.prototype.c.call(this, final);\n    };\n    return Unzlib;\n}());\nexport { Unzlib };\n/**\n * Asynchronous streaming Zlib decompression\n */\nvar AsyncUnzlib = /*#__PURE__*/ (function () {\n    /**\n     * Creates an asynchronous Zlib decompression stream\n     * @param cb The callback to call whenever data is deflated\n     */\n    function AsyncUnzlib(cb) {\n        this.ondata = cb;\n        astrmify([\n            bInflt,\n            zule,\n            function () { return [astrm, Inflate, Unzlib]; }\n        ], this, 0, function () {\n            var strm = new Unzlib();\n            onmessage = astrm(strm);\n        }, 11);\n    }\n    return AsyncUnzlib;\n}());\nexport { AsyncUnzlib };\nexport function unzlib(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        throw 'no callback';\n    return cbify(data, opts, [\n        bInflt,\n        zule,\n        function () { return [unzlibSync]; }\n    ], function (ev) { return pbf(unzlibSync(ev.data[0], gu8(ev.data[1]))); }, 5, cb);\n}\n/**\n * Expands Zlib data\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nexport function unzlibSync(data, out) {\n    return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzip as compress, AsyncGzip as AsyncCompress };\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzipSync as compressSync, Gzip as Compress };\n/**\n * Streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar Decompress = /*#__PURE__*/ (function () {\n    /**\n     * Creates a decompression stream\n     * @param cb The callback to call whenever data is decompressed\n     */\n    function Decompress(cb) {\n        this.G = Gunzip;\n        this.I = Inflate;\n        this.Z = Unzlib;\n        this.ondata = cb;\n    }\n    /**\n     * Pushes a chunk to be decompressed\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Decompress.prototype.push = function (chunk, final) {\n        if (!this.ondata)\n            throw 'no stream handler';\n        if (!this.s) {\n            if (this.p && this.p.length) {\n                var n = new u8(this.p.length + chunk.length);\n                n.set(this.p), n.set(chunk, this.p.length);\n            }\n            else\n                this.p = chunk;\n            if (this.p.length > 2) {\n                var _this_1 = this;\n                var cb = function () { _this_1.ondata.apply(_this_1, arguments); };\n                this.s = (this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8)\n                    ? new this.G(cb)\n                    : ((this.p[0] & 15) != 8 || (this.p[0] >> 4) > 7 || ((this.p[0] << 8 | this.p[1]) % 31))\n                        ? new this.I(cb)\n                        : new this.Z(cb);\n                this.s.push(this.p, final);\n                this.p = null;\n            }\n        }\n        else\n            this.s.push(chunk, final);\n    };\n    return Decompress;\n}());\nexport { Decompress };\n/**\n * Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar AsyncDecompress = /*#__PURE__*/ (function () {\n    /**\n   * Creates an asynchronous decompression stream\n   * @param cb The callback to call whenever data is decompressed\n   */\n    function AsyncDecompress(cb) {\n        this.G = AsyncGunzip;\n        this.I = AsyncInflate;\n        this.Z = AsyncUnzlib;\n        this.ondata = cb;\n    }\n    /**\n     * Pushes a chunk to be decompressed\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    AsyncDecompress.prototype.push = function (chunk, final) {\n        Decompress.prototype.push.call(this, chunk, final);\n    };\n    return AsyncDecompress;\n}());\nexport { AsyncDecompress };\nexport function decompress(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        throw 'no callback';\n    return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n        ? gunzip(data, opts, cb)\n        : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n            ? inflate(data, opts, cb)\n            : unzlib(data, opts, cb);\n}\n/**\n * Expands compressed GZIP, Zlib, or raw DEFLATE data, automatically detecting the format\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nexport function decompressSync(data, out) {\n    return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n        ? gunzipSync(data, out)\n        : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n            ? inflateSync(data, out)\n            : unzlibSync(data, out);\n}\n// flatten a directory structure\nvar fltn = function (d, p, t, o) {\n    for (var k in d) {\n        var val = d[k], n = p + k;\n        if (val instanceof u8)\n            t[n] = [val, o];\n        else if (Array.isArray(val))\n            t[n] = [val[0], mrg(o, val[1])];\n        else\n            fltn(val, n + '/', t, o);\n    }\n};\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n *               not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nexport function strToU8(str, latin1) {\n    var l = str.length;\n    if (!latin1 && typeof TextEncoder != 'undefined')\n        return new TextEncoder().encode(str);\n    var ar = new u8(str.length + (str.length >>> 1));\n    var ai = 0;\n    var w = function (v) { ar[ai++] = v; };\n    for (var i = 0; i < l; ++i) {\n        if (ai + 5 > ar.length) {\n            var n = new u8(ai + 8 + ((l - i) << 1));\n            n.set(ar);\n            ar = n;\n        }\n        var c = str.charCodeAt(i);\n        if (c < 128 || latin1)\n            w(c);\n        else if (c < 2048)\n            w(192 | (c >>> 6)), w(128 | (c & 63));\n        else if (c > 55295 && c < 57344)\n            c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n                w(240 | (c >>> 18)), w(128 | ((c >>> 12) & 63)), w(128 | ((c >>> 6) & 63)), w(128 | (c & 63));\n        else\n            w(224 | (c >>> 12)), w(128 | ((c >>> 6) & 63)), w(128 | (c & 63));\n    }\n    return slc(ar, 0, ai);\n}\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n *               not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nexport function strFromU8(dat, latin1) {\n    var r = '';\n    if (!latin1 && typeof TextDecoder != 'undefined')\n        return new TextDecoder().decode(dat);\n    for (var i = 0; i < dat.length;) {\n        var c = dat[i++];\n        if (c < 128 || latin1)\n            r += String.fromCharCode(c);\n        else if (c < 224)\n            r += String.fromCharCode((c & 31) << 6 | (dat[i++] & 63));\n        else if (c < 240)\n            r += String.fromCharCode((c & 15) << 12 | (dat[i++] & 63) << 6 | (dat[i++] & 63));\n        else\n            c = ((c & 15) << 18 | (dat[i++] & 63) << 12 | (dat[i++] & 63) << 6 | (dat[i++] & 63)) - 65536,\n                r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n    }\n    return r;\n}\n;\n// skip local zip header\nvar slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };\n// read zip header\nvar zh = function (d, b, z) {\n    var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl;\n    var _a = z ? z64e(d, es) : [b4(d, b + 20), b4(d, b + 24), b4(d, b + 42)], sc = _a[0], su = _a[1], off = _a[2];\n    return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];\n};\n// read zip64 extra field\nvar z64e = function (d, b) {\n    for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))\n        ;\n    return [b4(d, b + 12), b4(d, b + 4), b4(d, b + 20)];\n};\n// write zip header\nvar wzh = function (d, b, c, cmp, su, fn, u, o, ce, t) {\n    var fl = fn.length, l = cmp.length;\n    wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;\n    if (ce != null)\n        d[b] = 20, b += 2;\n    d[b] = 20, b += 2; // spec compliance? what's that?\n    d[b++] = (t == 8 && (o.level == 1 ? 6 : o.level < 6 ? 4 : o.level == 9 ? 2 : 0)), d[b++] = u && 8;\n    d[b] = t, b += 2;\n    var dt = new Date(o.mtime || Date.now()), y = dt.getFullYear() - 1980;\n    if (y < 0 || y > 119)\n        throw 'date not in range 1980-2099';\n    wbytes(d, b, ((y << 24) * 2) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >>> 1));\n    b += 4;\n    wbytes(d, b, c);\n    wbytes(d, b + 4, l);\n    wbytes(d, b + 8, su);\n    wbytes(d, b + 12, fl), b += 16; // skip extra field, comment\n    if (ce != null)\n        wbytes(d, b += 10, ce), b += 4;\n    d.set(fn, b);\n    b += fl;\n    if (ce == null)\n        d.set(cmp, b);\n};\n// write zip footer (end of central directory)\nvar wzf = function (o, b, c, d, e) {\n    wbytes(o, b, 0x6054B50); // skip disk\n    wbytes(o, b + 8, c);\n    wbytes(o, b + 10, c);\n    wbytes(o, b + 12, d);\n    wbytes(o, b + 16, e);\n};\nexport function zip(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        throw 'no callback';\n    var r = {};\n    fltn(data, '', r, opts);\n    var k = Object.keys(r);\n    var lft = k.length, o = 0, tot = 0;\n    var slft = lft, files = new Array(lft);\n    var term = [];\n    var tAll = function () {\n        for (var i = 0; i < term.length; ++i)\n            term[i]();\n    };\n    var cbf = function () {\n        var out = new u8(tot + 22), oe = o, cdl = tot - o;\n        tot = 0;\n        for (var i = 0; i < slft; ++i) {\n            var f = files[i];\n            try {\n                wzh(out, tot, f.c, f.d, f.m, f.n, f.u, f.p, null, f.t);\n                wzh(out, o, f.c, f.d, f.m, f.n, f.u, f.p, tot, f.t), o += 46 + f.n.length, tot += 30 + f.n.length + f.d.length;\n            }\n            catch (e) {\n                return cb(e, null);\n            }\n        }\n        wzf(out, o, files.length, cdl, oe);\n        cb(null, out);\n    };\n    if (!lft)\n        cbf();\n    var _loop_1 = function (i) {\n        var fn = k[i];\n        var _a = r[fn], file = _a[0], p = _a[1];\n        var c = crc(), m = file.length;\n        c.p(file);\n        var n = strToU8(fn), s = n.length;\n        var t = p.level == 0 ? 0 : 8;\n        var cbl = function (e, d) {\n            if (e) {\n                tAll();\n                cb(e, null);\n            }\n            else {\n                var l = d.length;\n                files[i] = {\n                    t: t,\n                    d: d,\n                    m: m,\n                    c: c.d(),\n                    u: fn.length != l,\n                    n: n,\n                    p: p\n                };\n                o += 30 + s + l;\n                tot += 76 + 2 * s + l;\n                if (!--lft)\n                    cbf();\n            }\n        };\n        if (n.length > 65535)\n            cbl('filename too long', null);\n        if (!t)\n            cbl(null, file);\n        else if (m < 160000) {\n            try {\n                cbl(null, deflateSync(file, p));\n            }\n            catch (e) {\n                cbl(e, null);\n            }\n        }\n        else\n            term.push(deflate(file, p, cbl));\n    };\n    // Cannot use lft because it can decrease\n    for (var i = 0; i < slft; ++i) {\n        _loop_1(i);\n    }\n    return tAll;\n}\n/**\n * Synchronously creates a ZIP file. Prefer using `zip` for better performance\n * with more than one file.\n * @param data The directory structure for the ZIP archive\n * @param opts The main options, merged with per-file options\n * @returns The generated ZIP archive\n */\nexport function zipSync(data, opts) {\n    if (opts === void 0) { opts = {}; }\n    var r = {};\n    var files = [];\n    fltn(data, '', r, opts);\n    var o = 0;\n    var tot = 0;\n    for (var fn in r) {\n        var _a = r[fn], file = _a[0], p = _a[1];\n        var t = p.level == 0 ? 0 : 8;\n        var n = strToU8(fn), s = n.length;\n        if (n.length > 65535)\n            throw 'filename too long';\n        var d = t ? deflateSync(file, p) : file, l = d.length;\n        var c = crc();\n        c.p(file);\n        files.push({\n            t: t,\n            d: d,\n            m: file.length,\n            c: c.d(),\n            u: fn.length != s,\n            n: n,\n            o: o,\n            p: p\n        });\n        o += 30 + s + l;\n        tot += 76 + 2 * s + l;\n    }\n    var out = new u8(tot + 22), oe = o, cdl = tot - o;\n    for (var i = 0; i < files.length; ++i) {\n        var f = files[i];\n        wzh(out, f.o, f.c, f.d, f.m, f.n, f.u, f.p, null, f.t);\n        wzh(out, o, f.c, f.d, f.m, f.n, f.u, f.p, f.o, f.t), o += 46 + f.n.length;\n    }\n    wzf(out, o, files.length, cdl, oe);\n    return out;\n}\n/**\n * Asynchronously decompresses a ZIP archive\n * @param data The raw compressed ZIP file\n * @param cb The callback to call with the decompressed files\n * @returns A function that can be used to immediately terminate the unzipping\n */\nexport function unzip(data, cb) {\n    if (typeof cb != 'function')\n        throw 'no callback';\n    var term = [];\n    var tAll = function () {\n        for (var i = 0; i < term.length; ++i)\n            term[i]();\n    };\n    var files = {};\n    var e = data.length - 22;\n    for (; b4(data, e) != 0x6054B50; --e) {\n        if (!e || data.length - e > 65558) {\n            cb('invalid zip file', null);\n            return;\n        }\n    }\n    ;\n    var lft = b2(data, e + 8);\n    if (!lft)\n        cb(null, {});\n    var c = lft;\n    var o = b4(data, e + 16);\n    var z = o == 4294967295;\n    if (z) {\n        e = b4(data, e - 12);\n        if (b4(data, e) != 0x6064B50)\n            throw 'invalid zip file';\n        c = lft = b4(data, e + 32);\n        o = b4(data, e + 48);\n    }\n    var _loop_2 = function (i) {\n        var _a = zh(data, o, z), c_1 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n        o = no;\n        var cbl = function (e, d) {\n            if (e) {\n                tAll();\n                cb(e, null);\n            }\n            else {\n                files[fn] = d;\n                if (!--lft)\n                    cb(null, files);\n            }\n        };\n        if (!c_1)\n            cbl(null, slc(data, b, b + sc));\n        else if (c_1 == 8) {\n            var infl = data.subarray(b, b + sc);\n            if (sc < 320000) {\n                try {\n                    cbl(null, inflateSync(infl, new u8(su)));\n                }\n                catch (e) {\n                    cbl(e, null);\n                }\n            }\n            else\n                term.push(inflate(infl, { size: su }, cbl));\n        }\n        else\n            cbl('unknown compression type ' + c_1, null);\n    };\n    for (var i = 0; i < c; ++i) {\n        _loop_2(i);\n    }\n    return tAll;\n}\n/**\n * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better\n * performance with more than one file.\n * @param data The raw compressed ZIP file\n * @returns The decompressed files\n */\nexport function unzipSync(data) {\n    var files = {};\n    var e = data.length - 22;\n    for (; b4(data, e) != 0x6054B50; --e) {\n        if (!e || data.length - e > 65558)\n            throw 'invalid zip file';\n    }\n    ;\n    var c = b2(data, e + 8);\n    if (!c)\n        return {};\n    var o = b4(data, e + 16);\n    var z = o == 4294967295;\n    if (z) {\n        e = b4(data, e - 12);\n        if (b4(data, e) != 0x6064B50)\n            throw 'invalid zip file';\n        c = b4(data, e + 32);\n        o = b4(data, e + 48);\n    }\n    for (var i = 0; i < c; ++i) {\n        var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n        o = no;\n        if (!c_2)\n            files[fn] = slc(data, b, b + sc);\n        else if (c_2 == 8)\n            files[fn] = inflateSync(data.subarray(b, b + sc), new u8(su));\n        else\n            throw 'unknown compression type ' + c_2;\n    }\n    return files;\n}\n","export var globalObject = (function() {\n  return \"undefined\" !== typeof window\n    ? window\n    : \"undefined\" !== typeof global\n    ? global\n    : \"undefined\" !== typeof self\n    ? self\n    : this;\n})();\n","import { globalObject } from \"./globalObject.js\";\n\nfunction consoleLog() {\n  if (globalObject.console && typeof globalObject.console.log === \"function\") {\n    globalObject.console.log.apply(globalObject.console, arguments);\n  }\n}\n\nfunction consoleWarn(str) {\n  if (globalObject.console) {\n    if (typeof globalObject.console.warn === \"function\") {\n      globalObject.console.warn.apply(globalObject.console, arguments);\n    } else {\n      consoleLog.call(null, arguments);\n    }\n  }\n}\n\nfunction consoleError(str) {\n  if (globalObject.console) {\n    if (typeof globalObject.console.error === \"function\") {\n      globalObject.console.error.apply(globalObject.console, arguments);\n    } else {\n      consoleLog(str);\n    }\n  }\n}\nexport var console = {\n  log: consoleLog,\n  warn: consoleWarn,\n  error: consoleError\n};\n","/**\n * @license\n * FileSaver.js\n * A saveAs() FileSaver implementation.\n *\n * By Eli Grey, http://eligrey.com\n *\n * License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT)\n * source  : http://purl.eligrey.com/github/FileSaver.js\n */\n\nimport { globalObject as _global } from \"./globalObject.js\";\nimport { console } from \"./console.js\";\n\nfunction bom(blob, opts) {\n  if (typeof opts === \"undefined\") opts = { autoBom: false };\n  else if (typeof opts !== \"object\") {\n    console.warn(\"Deprecated: Expected third argument to be a object\");\n    opts = { autoBom: !opts };\n  }\n\n  // prepend BOM for UTF-8 XML and text/* types (including HTML)\n  // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n  if (\n    opts.autoBom &&\n    /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(\n      blob.type\n    )\n  ) {\n    return new Blob([String.fromCharCode(0xfeff), blob], { type: blob.type });\n  }\n  return blob;\n}\n\nfunction download(url, name, opts) {\n  var xhr = new XMLHttpRequest();\n  xhr.open(\"GET\", url);\n  xhr.responseType = \"blob\";\n  xhr.onload = function() {\n    saveAs(xhr.response, name, opts);\n  };\n  xhr.onerror = function() {\n    console.error(\"could not download file\");\n  };\n  xhr.send();\n}\n\nfunction corsEnabled(url) {\n  var xhr = new XMLHttpRequest();\n  // use sync to avoid popup blocker\n  xhr.open(\"HEAD\", url, false);\n  try {\n    xhr.send();\n  } catch (e) {}\n  return xhr.status >= 200 && xhr.status <= 299;\n}\n\n// `a.click()` doesn't work for all browsers (#465)\nfunction click(node) {\n  try {\n    node.dispatchEvent(new MouseEvent(\"click\"));\n  } catch (e) {\n    var evt = document.createEvent(\"MouseEvents\");\n    evt.initMouseEvent(\n      \"click\",\n      true,\n      true,\n      window,\n      0,\n      0,\n      0,\n      80,\n      20,\n      false,\n      false,\n      false,\n      false,\n      0,\n      null\n    );\n    node.dispatchEvent(evt);\n  }\n}\n\nvar saveAs =\n  _global.saveAs ||\n  // probably in some web worker\n  (typeof window !== \"object\" || window !== _global\n    ? function saveAs() {\n        /* noop */\n      }\n    : // Use download attribute first if possible (#193 Lumia mobile) unless this is a native app\n    typeof HTMLAnchorElement !== \"undefined\" &&\n      \"download\" in HTMLAnchorElement.prototype\n    ? function saveAs(blob, name, opts) {\n        var URL = _global.URL || _global.webkitURL;\n        var a = document.createElement(\"a\");\n        name = name || blob.name || \"download\";\n\n        a.download = name;\n        a.rel = \"noopener\"; // tabnabbing\n\n        // TODO: detect chrome extensions & packaged apps\n        // a.target = '_blank'\n\n        if (typeof blob === \"string\") {\n          // Support regular links\n          a.href = blob;\n          if (a.origin !== location.origin) {\n            corsEnabled(a.href)\n              ? download(blob, name, opts)\n              : click(a, (a.target = \"_blank\"));\n          } else {\n            click(a);\n          }\n        } else {\n          // Support blobs\n          a.href = URL.createObjectURL(blob);\n          setTimeout(function() {\n            URL.revokeObjectURL(a.href);\n          }, 4e4); // 40s\n          setTimeout(function() {\n            click(a);\n          }, 0);\n        }\n      }\n    : // Use msSaveOrOpenBlob as a second approach\n    \"msSaveOrOpenBlob\" in navigator\n    ? function saveAs(blob, name, opts) {\n        name = name || blob.name || \"download\";\n\n        if (typeof blob === \"string\") {\n          if (corsEnabled(blob)) {\n            download(blob, name, opts);\n          } else {\n            var a = document.createElement(\"a\");\n            a.href = blob;\n            a.target = \"_blank\";\n            setTimeout(function() {\n              click(a);\n            });\n          }\n        } else {\n          navigator.msSaveOrOpenBlob(bom(blob, opts), name);\n        }\n      }\n    : // Fallback to using FileReader and a popup\n      function saveAs(blob, name, opts, popup) {\n        // Open a popup immediately do go around popup blocker\n        // Mostly only available on user interaction and the fileReader is async so...\n        popup = popup || open(\"\", \"_blank\");\n        if (popup) {\n          popup.document.title = popup.document.body.innerText =\n            \"downloading...\";\n        }\n\n        if (typeof blob === \"string\") return download(blob, name, opts);\n\n        var force = blob.type === \"application/octet-stream\";\n        var isSafari =\n          /constructor/i.test(_global.HTMLElement) || _global.safari;\n        var isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent);\n\n        if (\n          (isChromeIOS || (force && isSafari)) &&\n          typeof FileReader === \"object\"\n        ) {\n          // Safari doesn't allow downloading of blob URLs\n          var reader = new FileReader();\n          reader.onloadend = function() {\n            var url = reader.result;\n            url = isChromeIOS\n              ? url\n              : url.replace(/^data:[^;]*;/, \"data:attachment/file;\");\n            if (popup) popup.location.href = url;\n            else location = url;\n            popup = null; // reverse-tabnabbing #460\n          };\n          reader.readAsDataURL(blob);\n        } else {\n          var URL = _global.URL || _global.webkitURL;\n          var url = URL.createObjectURL(blob);\n          if (popup) popup.location = url;\n          else location.href = url;\n          popup = null; // reverse-tabnabbing #460\n          setTimeout(function() {\n            URL.revokeObjectURL(url);\n          }, 4e4); // 40s\n        }\n      });\n\nexport { saveAs };\n","import { globalObject } from \"./globalObject.js\";\n\nvar atob, btoa;\n\n(function() {\n  atob = globalObject.atob.bind(globalObject);\n  btoa = globalObject.btoa.bind(globalObject);\n  return;\n\n})();\n\nexport { atob, btoa };\n","/**\n * A class to parse color values\n * @author Stoyan Stefanov <sstoo@gmail.com>\n * {@link   http://www.phpied.com/rgb-color-parser-in-javascript/}\n * @license Use it if you like it\n */\n\nfunction RGBColor(color_string) {\n  color_string = color_string || \"\";\n  this.ok = false;\n\n  // strip any leading #\n  if (color_string.charAt(0) == \"#\") {\n    // remove # if any\n    color_string = color_string.substr(1, 6);\n  }\n\n  color_string = color_string.replace(/ /g, \"\");\n  color_string = color_string.toLowerCase();\n\n  var channels;\n\n  // before getting into regexps, try simple matches\n  // and overwrite the input\n  var simple_colors = {\n    aliceblue: \"f0f8ff\",\n    antiquewhite: \"faebd7\",\n    aqua: \"00ffff\",\n    aquamarine: \"7fffd4\",\n    azure: \"f0ffff\",\n    beige: \"f5f5dc\",\n    bisque: \"ffe4c4\",\n    black: \"000000\",\n    blanchedalmond: \"ffebcd\",\n    blue: \"0000ff\",\n    blueviolet: \"8a2be2\",\n    brown: \"a52a2a\",\n    burlywood: \"deb887\",\n    cadetblue: \"5f9ea0\",\n    chartreuse: \"7fff00\",\n    chocolate: \"d2691e\",\n    coral: \"ff7f50\",\n    cornflowerblue: \"6495ed\",\n    cornsilk: \"fff8dc\",\n    crimson: \"dc143c\",\n    cyan: \"00ffff\",\n    darkblue: \"00008b\",\n    darkcyan: \"008b8b\",\n    darkgoldenrod: \"b8860b\",\n    darkgray: \"a9a9a9\",\n    darkgreen: \"006400\",\n    darkkhaki: \"bdb76b\",\n    darkmagenta: \"8b008b\",\n    darkolivegreen: \"556b2f\",\n    darkorange: \"ff8c00\",\n    darkorchid: \"9932cc\",\n    darkred: \"8b0000\",\n    darksalmon: \"e9967a\",\n    darkseagreen: \"8fbc8f\",\n    darkslateblue: \"483d8b\",\n    darkslategray: \"2f4f4f\",\n    darkturquoise: \"00ced1\",\n    darkviolet: \"9400d3\",\n    deeppink: \"ff1493\",\n    deepskyblue: \"00bfff\",\n    dimgray: \"696969\",\n    dodgerblue: \"1e90ff\",\n    feldspar: \"d19275\",\n    firebrick: \"b22222\",\n    floralwhite: \"fffaf0\",\n    forestgreen: \"228b22\",\n    fuchsia: \"ff00ff\",\n    gainsboro: \"dcdcdc\",\n    ghostwhite: \"f8f8ff\",\n    gold: \"ffd700\",\n    goldenrod: \"daa520\",\n    gray: \"808080\",\n    green: \"008000\",\n    greenyellow: \"adff2f\",\n    honeydew: \"f0fff0\",\n    hotpink: \"ff69b4\",\n    indianred: \"cd5c5c\",\n    indigo: \"4b0082\",\n    ivory: \"fffff0\",\n    khaki: \"f0e68c\",\n    lavender: \"e6e6fa\",\n    lavenderblush: \"fff0f5\",\n    lawngreen: \"7cfc00\",\n    lemonchiffon: \"fffacd\",\n    lightblue: \"add8e6\",\n    lightcoral: \"f08080\",\n    lightcyan: \"e0ffff\",\n    lightgoldenrodyellow: \"fafad2\",\n    lightgrey: \"d3d3d3\",\n    lightgreen: \"90ee90\",\n    lightpink: \"ffb6c1\",\n    lightsalmon: \"ffa07a\",\n    lightseagreen: \"20b2aa\",\n    lightskyblue: \"87cefa\",\n    lightslateblue: \"8470ff\",\n    lightslategray: \"778899\",\n    lightsteelblue: \"b0c4de\",\n    lightyellow: \"ffffe0\",\n    lime: \"00ff00\",\n    limegreen: \"32cd32\",\n    linen: \"faf0e6\",\n    magenta: \"ff00ff\",\n    maroon: \"800000\",\n    mediumaquamarine: \"66cdaa\",\n    mediumblue: \"0000cd\",\n    mediumorchid: \"ba55d3\",\n    mediumpurple: \"9370d8\",\n    mediumseagreen: \"3cb371\",\n    mediumslateblue: \"7b68ee\",\n    mediumspringgreen: \"00fa9a\",\n    mediumturquoise: \"48d1cc\",\n    mediumvioletred: \"c71585\",\n    midnightblue: \"191970\",\n    mintcream: \"f5fffa\",\n    mistyrose: \"ffe4e1\",\n    moccasin: \"ffe4b5\",\n    navajowhite: \"ffdead\",\n    navy: \"000080\",\n    oldlace: \"fdf5e6\",\n    olive: \"808000\",\n    olivedrab: \"6b8e23\",\n    orange: \"ffa500\",\n    orangered: \"ff4500\",\n    orchid: \"da70d6\",\n    palegoldenrod: \"eee8aa\",\n    palegreen: \"98fb98\",\n    paleturquoise: \"afeeee\",\n    palevioletred: \"d87093\",\n    papayawhip: \"ffefd5\",\n    peachpuff: \"ffdab9\",\n    peru: \"cd853f\",\n    pink: \"ffc0cb\",\n    plum: \"dda0dd\",\n    powderblue: \"b0e0e6\",\n    purple: \"800080\",\n    red: \"ff0000\",\n    rosybrown: \"bc8f8f\",\n    royalblue: \"4169e1\",\n    saddlebrown: \"8b4513\",\n    salmon: \"fa8072\",\n    sandybrown: \"f4a460\",\n    seagreen: \"2e8b57\",\n    seashell: \"fff5ee\",\n    sienna: \"a0522d\",\n    silver: \"c0c0c0\",\n    skyblue: \"87ceeb\",\n    slateblue: \"6a5acd\",\n    slategray: \"708090\",\n    snow: \"fffafa\",\n    springgreen: \"00ff7f\",\n    steelblue: \"4682b4\",\n    tan: \"d2b48c\",\n    teal: \"008080\",\n    thistle: \"d8bfd8\",\n    tomato: \"ff6347\",\n    turquoise: \"40e0d0\",\n    violet: \"ee82ee\",\n    violetred: \"d02090\",\n    wheat: \"f5deb3\",\n    white: \"ffffff\",\n    whitesmoke: \"f5f5f5\",\n    yellow: \"ffff00\",\n    yellowgreen: \"9acd32\"\n  };\n  color_string = simple_colors[color_string] || color_string;\n\n  // array of color definition objects\n  var color_defs = [\n    {\n      re: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\n      example: [\"rgb(123, 234, 45)\", \"rgb(255,234,245)\"],\n      process: function(bits) {\n        return [parseInt(bits[1]), parseInt(bits[2]), parseInt(bits[3])];\n      }\n    },\n    {\n      re: /^(\\w{2})(\\w{2})(\\w{2})$/,\n      example: [\"#00ff00\", \"336699\"],\n      process: function(bits) {\n        return [\n          parseInt(bits[1], 16),\n          parseInt(bits[2], 16),\n          parseInt(bits[3], 16)\n        ];\n      }\n    },\n    {\n      re: /^(\\w{1})(\\w{1})(\\w{1})$/,\n      example: [\"#fb0\", \"f0f\"],\n      process: function(bits) {\n        return [\n          parseInt(bits[1] + bits[1], 16),\n          parseInt(bits[2] + bits[2], 16),\n          parseInt(bits[3] + bits[3], 16)\n        ];\n      }\n    }\n  ];\n\n  // search through the definitions to find a match\n  for (var i = 0; i < color_defs.length; i++) {\n    var re = color_defs[i].re;\n    var processor = color_defs[i].process;\n    var bits = re.exec(color_string);\n    if (bits) {\n      channels = processor(bits);\n      this.r = channels[0];\n      this.g = channels[1];\n      this.b = channels[2];\n      this.ok = true;\n    }\n  }\n\n  // validate/cleanup values\n  this.r = this.r < 0 || isNaN(this.r) ? 0 : this.r > 255 ? 255 : this.r;\n  this.g = this.g < 0 || isNaN(this.g) ? 0 : this.g > 255 ? 255 : this.g;\n  this.b = this.b < 0 || isNaN(this.b) ? 0 : this.b > 255 ? 255 : this.b;\n\n  // some getters\n  this.toRGB = function() {\n    return \"rgb(\" + this.r + \", \" + this.g + \", \" + this.b + \")\";\n  };\n  this.toHex = function() {\n    var r = this.r.toString(16);\n    var g = this.g.toString(16);\n    var b = this.b.toString(16);\n    if (r.length == 1) r = \"0\" + r;\n    if (g.length == 1) g = \"0\" + g;\n    if (b.length == 1) b = \"0\" + b;\n    return \"#\" + r + g + b;\n  };\n}\n\nexport { RGBColor };\n","/**\n * @license\n * Joseph Myers does not specify a particular license for his work.\n *\n * Author: Joseph Myers\n * Accessed from: http://www.myersdaily.org/joseph/javascript/md5.js\n *\n * Modified by: Owen Leong\n */\n\nfunction md5cycle(x, k) {\n  var a = x[0],\n    b = x[1],\n    c = x[2],\n    d = x[3];\n\n  a = ff(a, b, c, d, k[0], 7, -680876936);\n  d = ff(d, a, b, c, k[1], 12, -389564586);\n  c = ff(c, d, a, b, k[2], 17, 606105819);\n  b = ff(b, c, d, a, k[3], 22, -1044525330);\n  a = ff(a, b, c, d, k[4], 7, -176418897);\n  d = ff(d, a, b, c, k[5], 12, 1200080426);\n  c = ff(c, d, a, b, k[6], 17, -1473231341);\n  b = ff(b, c, d, a, k[7], 22, -45705983);\n  a = ff(a, b, c, d, k[8], 7, 1770035416);\n  d = ff(d, a, b, c, k[9], 12, -1958414417);\n  c = ff(c, d, a, b, k[10], 17, -42063);\n  b = ff(b, c, d, a, k[11], 22, -1990404162);\n  a = ff(a, b, c, d, k[12], 7, 1804603682);\n  d = ff(d, a, b, c, k[13], 12, -40341101);\n  c = ff(c, d, a, b, k[14], 17, -1502002290);\n  b = ff(b, c, d, a, k[15], 22, 1236535329);\n\n  a = gg(a, b, c, d, k[1], 5, -165796510);\n  d = gg(d, a, b, c, k[6], 9, -1069501632);\n  c = gg(c, d, a, b, k[11], 14, 643717713);\n  b = gg(b, c, d, a, k[0], 20, -373897302);\n  a = gg(a, b, c, d, k[5], 5, -701558691);\n  d = gg(d, a, b, c, k[10], 9, 38016083);\n  c = gg(c, d, a, b, k[15], 14, -660478335);\n  b = gg(b, c, d, a, k[4], 20, -405537848);\n  a = gg(a, b, c, d, k[9], 5, 568446438);\n  d = gg(d, a, b, c, k[14], 9, -1019803690);\n  c = gg(c, d, a, b, k[3], 14, -187363961);\n  b = gg(b, c, d, a, k[8], 20, 1163531501);\n  a = gg(a, b, c, d, k[13], 5, -1444681467);\n  d = gg(d, a, b, c, k[2], 9, -51403784);\n  c = gg(c, d, a, b, k[7], 14, 1735328473);\n  b = gg(b, c, d, a, k[12], 20, -1926607734);\n\n  a = hh(a, b, c, d, k[5], 4, -378558);\n  d = hh(d, a, b, c, k[8], 11, -2022574463);\n  c = hh(c, d, a, b, k[11], 16, 1839030562);\n  b = hh(b, c, d, a, k[14], 23, -35309556);\n  a = hh(a, b, c, d, k[1], 4, -1530992060);\n  d = hh(d, a, b, c, k[4], 11, 1272893353);\n  c = hh(c, d, a, b, k[7], 16, -155497632);\n  b = hh(b, c, d, a, k[10], 23, -1094730640);\n  a = hh(a, b, c, d, k[13], 4, 681279174);\n  d = hh(d, a, b, c, k[0], 11, -358537222);\n  c = hh(c, d, a, b, k[3], 16, -722521979);\n  b = hh(b, c, d, a, k[6], 23, 76029189);\n  a = hh(a, b, c, d, k[9], 4, -640364487);\n  d = hh(d, a, b, c, k[12], 11, -421815835);\n  c = hh(c, d, a, b, k[15], 16, 530742520);\n  b = hh(b, c, d, a, k[2], 23, -995338651);\n\n  a = ii(a, b, c, d, k[0], 6, -198630844);\n  d = ii(d, a, b, c, k[7], 10, 1126891415);\n  c = ii(c, d, a, b, k[14], 15, -1416354905);\n  b = ii(b, c, d, a, k[5], 21, -57434055);\n  a = ii(a, b, c, d, k[12], 6, 1700485571);\n  d = ii(d, a, b, c, k[3], 10, -1894986606);\n  c = ii(c, d, a, b, k[10], 15, -1051523);\n  b = ii(b, c, d, a, k[1], 21, -2054922799);\n  a = ii(a, b, c, d, k[8], 6, 1873313359);\n  d = ii(d, a, b, c, k[15], 10, -30611744);\n  c = ii(c, d, a, b, k[6], 15, -1560198380);\n  b = ii(b, c, d, a, k[13], 21, 1309151649);\n  a = ii(a, b, c, d, k[4], 6, -145523070);\n  d = ii(d, a, b, c, k[11], 10, -1120210379);\n  c = ii(c, d, a, b, k[2], 15, 718787259);\n  b = ii(b, c, d, a, k[9], 21, -343485551);\n\n  x[0] = add32(a, x[0]);\n  x[1] = add32(b, x[1]);\n  x[2] = add32(c, x[2]);\n  x[3] = add32(d, x[3]);\n}\n\nfunction cmn(q, a, b, x, s, t) {\n  a = add32(add32(a, q), add32(x, t));\n  return add32((a << s) | (a >>> (32 - s)), b);\n}\n\nfunction ff(a, b, c, d, x, s, t) {\n  return cmn((b & c) | (~b & d), a, b, x, s, t);\n}\n\nfunction gg(a, b, c, d, x, s, t) {\n  return cmn((b & d) | (c & ~d), a, b, x, s, t);\n}\n\nfunction hh(a, b, c, d, x, s, t) {\n  return cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction ii(a, b, c, d, x, s, t) {\n  return cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nfunction md51(s) {\n  // txt = '';\n  var n = s.length,\n    state = [1732584193, -271733879, -1732584194, 271733878],\n    i;\n  for (i = 64; i <= s.length; i += 64) {\n    md5cycle(state, md5blk(s.substring(i - 64, i)));\n  }\n  s = s.substring(i - 64);\n  var tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n  for (i = 0; i < s.length; i++)\n    tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n  tail[i >> 2] |= 0x80 << (i % 4 << 3);\n  if (i > 55) {\n    md5cycle(state, tail);\n    for (i = 0; i < 16; i++) tail[i] = 0;\n  }\n  tail[14] = n * 8;\n  md5cycle(state, tail);\n  return state;\n}\n\n/* there needs to be support for Unicode here,\n * unless we pretend that we can redefine the MD-5\n * algorithm for multi-byte characters (perhaps\n * by adding every four 16-bit characters and\n * shortening the sum to 32 bits). Otherwise\n * I suggest performing MD-5 as if every character\n * was two bytes--e.g., 0040 0025 = @%--but then\n * how will an ordinary MD-5 sum be matched?\n * There is no way to standardize text to something\n * like UTF-8 before transformation; speed cost is\n * utterly prohibitive. The JavaScript standard\n * itself needs to look at this: it should start\n * providing access to strings as preformed UTF-8\n * 8-bit unsigned value arrays.\n */\nfunction md5blk(s) {\n  /* I figured global was faster.   */\n  var md5blks = [],\n    i; /* Andy King said do it this way. */\n  for (i = 0; i < 64; i += 4) {\n    md5blks[i >> 2] =\n      s.charCodeAt(i) +\n      (s.charCodeAt(i + 1) << 8) +\n      (s.charCodeAt(i + 2) << 16) +\n      (s.charCodeAt(i + 3) << 24);\n  }\n  return md5blks;\n}\n\nvar hex_chr = \"0123456789abcdef\".split(\"\");\n\nfunction rhex(n) {\n  var s = \"\",\n    j = 0;\n  for (; j < 4; j++)\n    s += hex_chr[(n >> (j * 8 + 4)) & 0x0f] + hex_chr[(n >> (j * 8)) & 0x0f];\n  return s;\n}\n\nfunction hex(x) {\n  for (var i = 0; i < x.length; i++) x[i] = rhex(x[i]);\n  return x.join(\"\");\n}\n\n// Converts a 4-byte number to byte string\nfunction singleToByteString(n) {\n  return String.fromCharCode(\n    (n & 0xff) >> 0,\n    (n & 0xff00) >> 8,\n    (n & 0xff0000) >> 16,\n    (n & 0xff000000) >> 24\n  );\n}\n\n// Converts an array of numbers to a byte string\nfunction toByteString(x) {\n  return x.map(singleToByteString).join(\"\");\n}\n\n// Returns the MD5 hash as a byte string\nfunction md5Bin(s) {\n  return toByteString(md51(s));\n}\n\n// Returns MD5 hash as a hex string\nfunction md5(s) {\n  return hex(md51(s));\n}\n\nvar md5Check = md5(\"hello\") != \"5d41402abc4b2a76b9719d911017c592\";\n\nfunction add32(a, b) {\n  if (md5Check) {\n    /* if the md5Check does not match\n     the expected value, we're dealing\n     with an old browser and need\n     this function. */\n    var lsw = (a & 0xffff) + (b & 0xffff),\n      msw = (a >> 16) + (b >> 16) + (lsw >> 16);\n    return (msw << 16) | (lsw & 0xffff);\n  } else {\n    /* this function is much faster,\n    so if possible we use it. Some IEs\n    are the only ones I know of that\n    need the idiotic second function,\n    generated by an if clause.  */\n    return (a + b) & 0xffffffff;\n  }\n}\n\nexport { md5, md5Bin };\n","/**\r\n * @license\r\n * FPDF is released under a permissive license: there is no usage restriction.\r\n * You may embed it freely in your application (commercial or not), with or\r\n * without modifications.\r\n *\r\n * Reference: http://www.fpdf.org/en/script/script37.php\r\n */\r\n\r\nfunction repeat(str, num) {\r\n  return new Array(num + 1).join(str);\r\n}\r\n\r\n/**\r\n * Converts a byte string to a hex string\r\n *\r\n * @name rc4\r\n * @function\r\n * @param {string} key Byte string of encryption key\r\n * @param {string} data Byte string of data to be encrypted\r\n * @returns {string} Encrypted string\r\n */\r\nfunction rc4(key, data) {\r\n  var lastKey, lastState;\r\n  if (key !== lastKey) {\r\n    var k = repeat(key, ((256 / key.length) >> 0) + 1);\r\n    var state = [];\r\n    for (var i = 0; i < 256; i++) {\r\n      state[i] = i;\r\n    }\r\n    var j = 0;\r\n    for (var i = 0; i < 256; i++) {\r\n      var t = state[i];\r\n      j = (j + t + k.charCodeAt(i)) % 256;\r\n      state[i] = state[j];\r\n      state[j] = t;\r\n    }\r\n    lastKey = key;\r\n    lastState = state;\r\n  } else {\r\n    state = lastState;\r\n  }\r\n  var length = data.length;\r\n  var a = 0;\r\n  var b = 0;\r\n  var out = \"\";\r\n  for (var i = 0; i < length; i++) {\r\n    a = (a + 1) % 256;\r\n    t = state[a];\r\n    b = (b + t) % 256;\r\n    state[a] = state[b];\r\n    state[b] = t;\r\n    k = state[(state[a] + state[b]) % 256];\r\n    out += String.fromCharCode(data.charCodeAt(i) ^ k);\r\n  }\r\n  return out;\r\n}\r\n\r\nexport { rc4 };\r\n","/**\r\n * @license\r\n * Licensed under the MIT License.\r\n * http://opensource.org/licenses/mit-license\r\n * Author: Owen Leong (@owenl131)\r\n * Date: 15 Oct 2020\r\n * References:\r\n * https://www.cs.cmu.edu/~dst/Adobe/Gallery/anon21jul01-pdf-encryption.txt\r\n * https://github.com/foliojs/pdfkit/blob/master/lib/security.js\r\n * http://www.fpdf.org/en/script/script37.php\r\n */\r\n\r\nimport { md5Bin } from \"./md5.js\";\r\nimport { rc4 } from \"./rc4.js\";\r\n\r\nvar permissionOptions = {\r\n  print: 4,\r\n  modify: 8,\r\n  copy: 16,\r\n  \"annot-forms\": 32\r\n};\r\n\r\n/**\r\n * Initializes encryption settings\r\n *\r\n * @name constructor\r\n * @function\r\n * @param {Array} permissions Permissions allowed for user, \"print\", \"modify\", \"copy\" and \"annot-forms\".\r\n * @param {String} userPassword Permissions apply to this user. Leaving this empty means the document\r\n *                              is not password protected but viewer has the above permissions.\r\n * @param {String} ownerPassword Owner has full functionalities to the file.\r\n * @param {String} fileId As hex string, should be same as the file ID in the trailer.\r\n * @example\r\n * var security = new PDFSecurity([\"print\"])\r\n */\r\nfunction PDFSecurity(permissions, userPassword, ownerPassword, fileId) {\r\n  this.v = 1; // algorithm 1, future work can add in more recent encryption schemes\r\n  this.r = 2; // revision 2\r\n\r\n  // set flags for what functionalities the user can access\r\n  let protection = 192;\r\n  permissions.forEach(function(perm) {\r\n    if (typeof permissionOptions.perm !== \"undefined\") {\r\n      throw new Error(\"Invalid permission: \" + perm);\r\n    }\r\n    protection += permissionOptions[perm];\r\n  });\r\n\r\n  // padding is used to pad the passwords to 32 bytes, also is hashed and stored in the final PDF\r\n  this.padding =\r\n    \"\\x28\\xBF\\x4E\\x5E\\x4E\\x75\\x8A\\x41\\x64\\x00\\x4E\\x56\\xFF\\xFA\\x01\\x08\" +\r\n    \"\\x2E\\x2E\\x00\\xB6\\xD0\\x68\\x3E\\x80\\x2F\\x0C\\xA9\\xFE\\x64\\x53\\x69\\x7A\";\r\n  let paddedUserPassword = (userPassword + this.padding).substr(0, 32);\r\n  let paddedOwnerPassword = (ownerPassword + this.padding).substr(0, 32);\r\n\r\n  this.O = this.processOwnerPassword(paddedUserPassword, paddedOwnerPassword);\r\n  this.P = -((protection ^ 255) + 1);\r\n  this.encryptionKey = md5Bin(\r\n    paddedUserPassword +\r\n      this.O +\r\n      this.lsbFirstWord(this.P) +\r\n      this.hexToBytes(fileId)\r\n  ).substr(0, 5);\r\n  this.U = rc4(this.encryptionKey, this.padding);\r\n}\r\n\r\n/**\r\n * Breaks down a 4-byte number into its individual bytes, with the least significant bit first\r\n *\r\n * @name lsbFirstWord\r\n * @function\r\n * @param {number} data 32-bit number\r\n * @returns {Array}\r\n */\r\nPDFSecurity.prototype.lsbFirstWord = function(data) {\r\n  return String.fromCharCode(\r\n    (data >> 0) & 0xff,\r\n    (data >> 8) & 0xff,\r\n    (data >> 16) & 0xff,\r\n    (data >> 24) & 0xff\r\n  );\r\n};\r\n\r\n/**\r\n * Converts a byte string to a hex string\r\n *\r\n * @name toHexString\r\n * @function\r\n * @param {String} byteString Byte string\r\n * @returns {String}\r\n */\r\nPDFSecurity.prototype.toHexString = function(byteString) {\r\n  return byteString\r\n    .split(\"\")\r\n    .map(function(byte) {\r\n      return (\"0\" + (byte.charCodeAt(0) & 0xff).toString(16)).slice(-2);\r\n    })\r\n    .join(\"\");\r\n};\r\n\r\n/**\r\n * Converts a hex string to a byte string\r\n *\r\n * @name hexToBytes\r\n * @function\r\n * @param {String} hex Hex string\r\n * @returns {String}\r\n */\r\nPDFSecurity.prototype.hexToBytes = function(hex) {\r\n  for (var bytes = [], c = 0; c < hex.length; c += 2)\r\n    bytes.push(String.fromCharCode(parseInt(hex.substr(c, 2), 16)));\r\n  return bytes.join(\"\");\r\n};\r\n\r\n/**\r\n * Computes the 'O' field in the encryption dictionary\r\n *\r\n * @name processOwnerPassword\r\n * @function\r\n * @param {String} paddedUserPassword Byte string of padded user password\r\n * @param {String} paddedOwnerPassword Byte string of padded owner password\r\n * @returns {String}\r\n */\r\nPDFSecurity.prototype.processOwnerPassword = function(\r\n  paddedUserPassword,\r\n  paddedOwnerPassword\r\n) {\r\n  let key = md5Bin(paddedOwnerPassword).substr(0, 5);\r\n  return rc4(key, paddedUserPassword);\r\n};\r\n\r\n/**\r\n * Returns an encryptor function which can take in a byte string and returns the encrypted version\r\n *\r\n * @name encryptor\r\n * @function\r\n * @param {number} objectId\r\n * @param {number} generation Not sure what this is for, you can set it to 0\r\n * @returns {Function}\r\n * @example\r\n * out(\"stream\");\r\n * encryptor = security.encryptor(object.id, 0);\r\n * out(encryptor(data));\r\n * out(\"endstream\");\r\n */\r\nPDFSecurity.prototype.encryptor = function(objectId, generation) {\r\n  let key = md5Bin(\r\n    this.encryptionKey +\r\n      String.fromCharCode(\r\n        objectId & 0xff,\r\n        (objectId >> 8) & 0xff,\r\n        (objectId >> 16) & 0xff,\r\n        generation & 0xff,\r\n        (generation >> 8) & 0xff\r\n      )\r\n  ).substr(0, 10);\r\n  return function(data) {\r\n    return rc4(key, data);\r\n  };\r\n};\r\n\r\nexport { PDFSecurity };\r\n","/**\n * Convert string to `PDF Name Object`.\n * Detail: PDF Reference 1.3 - Chapter 3.2.4 Name Object\n * @param str\n */\nfunction toPDFName(str) {\n  // eslint-disable-next-line no-control-regex\n  if (/[^\\u0000-\\u00ff]/.test(str)) {\n    // non ascii string\n    throw new Error(\n      \"Invalid PDF Name Object: \" + str + \", Only accept ASCII characters.\"\n    );\n  }\n  var result = \"\",\n    strLength = str.length;\n  for (var i = 0; i < strLength; i++) {\n    var charCode = str.charCodeAt(i);\n    if (\n      charCode < 0x21 ||\n      charCode === 0x23 /* # */ ||\n      charCode === 0x25 /* % */ ||\n      charCode === 0x28 /* ( */ ||\n      charCode === 0x29 /* ) */ ||\n      charCode === 0x2f /* / */ ||\n      charCode === 0x3c /* < */ ||\n      charCode === 0x3e /* > */ ||\n      charCode === 0x5b /* [ */ ||\n      charCode === 0x5d /* ] */ ||\n      charCode === 0x7b /* { */ ||\n      charCode === 0x7d /* } */ ||\n      charCode > 0x7e\n    ) {\n      // Char    CharCode    hexStr   paddingHexStr    Result\n      // \"\\t\"    9           9        09               #09\n      // \" \"     32          20       20               #20\n      // \"©\"     169         a9       a9               #a9\n      var hexStr = charCode.toString(16),\n        paddingHexStr = (\"0\" + hexStr).slice(-2);\n\n      result += \"#\" + paddingHexStr;\n    } else {\n      // Other ASCII printable characters between 0x21 <= X <= 0x7e\n      result += str[i];\n    }\n  }\n  return result;\n}\n\nexport { toPDFName };\n","/* eslint-disable no-console */\r\n\r\nimport { saveAs } from \"./libs/FileSaver.js\";\r\nimport { globalObject } from \"./libs/globalObject.js\";\r\nimport { RGBColor } from \"./libs/rgbcolor.js\";\r\nimport { btoa } from \"./libs/AtobBtoa.js\";\r\nimport { console } from \"./libs/console.js\";\r\nimport { PDFSecurity } from \"./libs/pdfsecurity.js\";\r\nimport { toPDFName } from \"./libs/pdfname.js\";\r\n/**\r\n * jsPDF's Internal PubSub Implementation.\r\n * Backward compatible rewritten on 2014 by\r\n * Diego Casorran, https://github.com/diegocr\r\n *\r\n * @class\r\n * @name PubSub\r\n * @ignore\r\n */\r\nfunction PubSub(context) {\r\n  if (typeof context !== \"object\") {\r\n    throw new Error(\r\n      \"Invalid Context passed to initialize PubSub (jsPDF-module)\"\r\n    );\r\n  }\r\n  var topics = {};\r\n\r\n  this.subscribe = function(topic, callback, once) {\r\n    once = once || false;\r\n    if (\r\n      typeof topic !== \"string\" ||\r\n      typeof callback !== \"function\" ||\r\n      typeof once !== \"boolean\"\r\n    ) {\r\n      throw new Error(\r\n        \"Invalid arguments passed to PubSub.subscribe (jsPDF-module)\"\r\n      );\r\n    }\r\n\r\n    if (!topics.hasOwnProperty(topic)) {\r\n      topics[topic] = {};\r\n    }\r\n\r\n    var token = Math.random().toString(35);\r\n    topics[topic][token] = [callback, !!once];\r\n\r\n    return token;\r\n  };\r\n\r\n  this.unsubscribe = function(token) {\r\n    for (var topic in topics) {\r\n      if (topics[topic][token]) {\r\n        delete topics[topic][token];\r\n        if (Object.keys(topics[topic]).length === 0) {\r\n          delete topics[topic];\r\n        }\r\n        return true;\r\n      }\r\n    }\r\n    return false;\r\n  };\r\n\r\n  this.publish = function(topic) {\r\n    if (topics.hasOwnProperty(topic)) {\r\n      var args = Array.prototype.slice.call(arguments, 1),\r\n        tokens = [];\r\n\r\n      for (var token in topics[topic]) {\r\n        var sub = topics[topic][token];\r\n        try {\r\n          sub[0].apply(context, args);\r\n        } catch (ex) {\r\n          if (globalObject.console) {\r\n            console.error(\"jsPDF PubSub Error\", ex.message, ex);\r\n          }\r\n        }\r\n        if (sub[1]) tokens.push(token);\r\n      }\r\n      if (tokens.length) tokens.forEach(this.unsubscribe);\r\n    }\r\n  };\r\n\r\n  this.getTopics = function() {\r\n    return topics;\r\n  };\r\n}\r\n\r\nfunction GState(parameters) {\r\n  if (!(this instanceof GState)) {\r\n    return new GState(parameters);\r\n  }\r\n\r\n  /**\r\n   * @name GState#opacity\r\n   * @type {any}\r\n   */\r\n  /**\r\n   * @name GState#stroke-opacity\r\n   * @type {any}\r\n   */\r\n  var supported = \"opacity,stroke-opacity\".split(\",\");\r\n  for (var p in parameters) {\r\n    if (parameters.hasOwnProperty(p) && supported.indexOf(p) >= 0) {\r\n      this[p] = parameters[p];\r\n    }\r\n  }\r\n  /**\r\n   * @name GState#id\r\n   * @type {string}\r\n   */\r\n  this.id = \"\"; // set by addGState()\r\n  /**\r\n   * @name GState#objectNumber\r\n   * @type {number}\r\n   */\r\n  this.objectNumber = -1; // will be set by putGState()\r\n}\r\n\r\nGState.prototype.equals = function equals(other) {\r\n  var ignore = \"id,objectNumber,equals\";\r\n  var p;\r\n  if (!other || typeof other !== typeof this) return false;\r\n  var count = 0;\r\n  for (p in this) {\r\n    if (ignore.indexOf(p) >= 0) continue;\r\n    if (this.hasOwnProperty(p) && !other.hasOwnProperty(p)) return false;\r\n    if (this[p] !== other[p]) return false;\r\n    count++;\r\n  }\r\n  for (p in other) {\r\n    if (other.hasOwnProperty(p) && ignore.indexOf(p) < 0) count--;\r\n  }\r\n  return count === 0;\r\n};\r\n\r\nfunction Pattern(gState, matrix) {\r\n  this.gState = gState;\r\n  this.matrix = matrix;\r\n\r\n  this.id = \"\"; // set by addPattern()\r\n  this.objectNumber = -1; // will be set by putPattern()\r\n}\r\n\r\nfunction ShadingPattern(type, coords, colors, gState, matrix) {\r\n  if (!(this instanceof ShadingPattern)) {\r\n    return new ShadingPattern(type, coords, colors, gState, matrix);\r\n  }\r\n\r\n  // see putPattern() for information how they are realized\r\n  this.type = type === \"axial\" ? 2 : 3;\r\n  this.coords = coords;\r\n  this.colors = colors;\r\n\r\n  Pattern.call(this, gState, matrix);\r\n}\r\n\r\nfunction TilingPattern(boundingBox, xStep, yStep, gState, matrix) {\r\n  if (!(this instanceof TilingPattern)) {\r\n    return new TilingPattern(boundingBox, xStep, yStep, gState, matrix);\r\n  }\r\n\r\n  this.boundingBox = boundingBox;\r\n  this.xStep = xStep;\r\n  this.yStep = yStep;\r\n\r\n  this.stream = \"\"; // set by endTilingPattern();\r\n\r\n  this.cloneIndex = 0;\r\n\r\n  Pattern.call(this, gState, matrix);\r\n}\r\n\r\n/**\r\n * Creates new jsPDF document object instance.\r\n * @name jsPDF\r\n * @class\r\n * @param {Object} [options] - Collection of settings initializing the jsPDF-instance\r\n * @param {string} [options.orientation=portrait] - Orientation of the first page. Possible values are \"portrait\" or \"landscape\" (or shortcuts \"p\" or \"l\").<br />\r\n * @param {string} [options.unit=mm] Measurement unit (base unit) to be used when coordinates are specified.<br />\r\n * Possible values are \"pt\" (points), \"mm\", \"cm\", \"in\", \"px\", \"pc\", \"em\" or \"ex\". Note that in order to get the correct scaling for \"px\"\r\n * units, you need to enable the hotfix \"px_scaling\" by setting options.hotfixes = [\"px_scaling\"].\r\n * @param {string/Array} [options.format=a4] The format of the first page. Can be:<ul><li>a0 - a10</li><li>b0 - b10</li><li>c0 - c10</li><li>dl</li><li>letter</li><li>government-letter</li><li>legal</li><li>junior-legal</li><li>ledger</li><li>tabloid</li><li>credit-card</li></ul><br />\r\n * Default is \"a4\". If you want to use your own format just pass instead of one of the above predefined formats the size as an number-array, e.g. [595.28, 841.89]\r\n * @param {boolean} [options.putOnlyUsedFonts=false] Only put fonts into the PDF, which were used.\r\n * @param {boolean} [options.compress=false] Compress the generated PDF.\r\n * @param {number} [options.precision=16] Precision of the element-positions.\r\n * @param {number} [options.userUnit=1.0] Not to be confused with the base unit. Please inform yourself before you use it.\r\n * @param {string[]} [options.hotfixes] An array of strings to enable hotfixes such as correct pixel scaling.\r\n * @param {Object} [options.encryption]\r\n * @param {string} [options.encryption.userPassword] Password for the user bound by the given permissions list.\r\n * @param {string} [options.encryption.ownerPassword] Both userPassword and ownerPassword should be set for proper authentication.\r\n * @param {string[]} [options.encryption.userPermissions] Array of permissions \"print\", \"modify\", \"copy\", \"annot-forms\", accessible by the user.\r\n * @param {number|\"smart\"} [options.floatPrecision=16]\r\n * @returns {jsPDF} jsPDF-instance\r\n * @description\r\n * ```\r\n * {\r\n *  orientation: 'p',\r\n *  unit: 'mm',\r\n *  format: 'a4',\r\n *  putOnlyUsedFonts:true,\r\n *  floatPrecision: 16 // or \"smart\", default is 16\r\n * }\r\n * ```\r\n *\r\n * @constructor\r\n */\r\nfunction jsPDF(options) {\r\n  var orientation = typeof arguments[0] === \"string\" ? arguments[0] : \"p\";\r\n  var unit = arguments[1];\r\n  var format = arguments[2];\r\n  var compressPdf = arguments[3];\r\n  var filters = [];\r\n  var userUnit = 1.0;\r\n  var precision;\r\n  var floatPrecision = 16;\r\n  var defaultPathOperation = \"S\";\r\n  var encryptionOptions = null;\r\n\r\n  options = options || {};\r\n\r\n  if (typeof options === \"object\") {\r\n    orientation = options.orientation;\r\n    unit = options.unit || unit;\r\n    format = options.format || format;\r\n    compressPdf = options.compress || options.compressPdf || compressPdf;\r\n    encryptionOptions = options.encryption || null;\r\n    if (encryptionOptions !== null) {\r\n      encryptionOptions.userPassword = encryptionOptions.userPassword || \"\";\r\n      encryptionOptions.ownerPassword = encryptionOptions.ownerPassword || \"\";\r\n      encryptionOptions.userPermissions =\r\n        encryptionOptions.userPermissions || [];\r\n    }\r\n    userUnit =\r\n      typeof options.userUnit === \"number\" ? Math.abs(options.userUnit) : 1.0;\r\n    if (typeof options.precision !== \"undefined\") {\r\n      precision = options.precision;\r\n    }\r\n    if (typeof options.floatPrecision !== \"undefined\") {\r\n      floatPrecision = options.floatPrecision;\r\n    }\r\n    defaultPathOperation = options.defaultPathOperation || \"S\";\r\n  }\r\n\r\n  filters =\r\n    options.filters || (compressPdf === true ? [\"FlateEncode\"] : filters);\r\n\r\n  unit = unit || \"mm\";\r\n  orientation = (\"\" + (orientation || \"P\")).toLowerCase();\r\n  var putOnlyUsedFonts = options.putOnlyUsedFonts || false;\r\n  var usedFonts = {};\r\n\r\n  var API = {\r\n    internal: {},\r\n    __private__: {}\r\n  };\r\n\r\n  API.__private__.PubSub = PubSub;\r\n\r\n  var pdfVersion = \"1.3\";\r\n  var getPdfVersion = (API.__private__.getPdfVersion = function() {\r\n    return pdfVersion;\r\n  });\r\n\r\n  API.__private__.setPdfVersion = function(value) {\r\n    pdfVersion = value;\r\n  };\r\n\r\n  // Size in pt of various paper formats\r\n  var pageFormats = {\r\n    a0: [2383.94, 3370.39],\r\n    a1: [1683.78, 2383.94],\r\n    a2: [1190.55, 1683.78],\r\n    a3: [841.89, 1190.55],\r\n    a4: [595.28, 841.89],\r\n    a5: [419.53, 595.28],\r\n    a6: [297.64, 419.53],\r\n    a7: [209.76, 297.64],\r\n    a8: [147.4, 209.76],\r\n    a9: [104.88, 147.4],\r\n    a10: [73.7, 104.88],\r\n    b0: [2834.65, 4008.19],\r\n    b1: [2004.09, 2834.65],\r\n    b2: [1417.32, 2004.09],\r\n    b3: [1000.63, 1417.32],\r\n    b4: [708.66, 1000.63],\r\n    b5: [498.9, 708.66],\r\n    b6: [354.33, 498.9],\r\n    b7: [249.45, 354.33],\r\n    b8: [175.75, 249.45],\r\n    b9: [124.72, 175.75],\r\n    b10: [87.87, 124.72],\r\n    c0: [2599.37, 3676.54],\r\n    c1: [1836.85, 2599.37],\r\n    c2: [1298.27, 1836.85],\r\n    c3: [918.43, 1298.27],\r\n    c4: [649.13, 918.43],\r\n    c5: [459.21, 649.13],\r\n    c6: [323.15, 459.21],\r\n    c7: [229.61, 323.15],\r\n    c8: [161.57, 229.61],\r\n    c9: [113.39, 161.57],\r\n    c10: [79.37, 113.39],\r\n    dl: [311.81, 623.62],\r\n    letter: [612, 792],\r\n    \"government-letter\": [576, 756],\r\n    legal: [612, 1008],\r\n    \"junior-legal\": [576, 360],\r\n    ledger: [1224, 792],\r\n    tabloid: [792, 1224],\r\n    \"credit-card\": [153, 243]\r\n  };\r\n\r\n  API.__private__.getPageFormats = function() {\r\n    return pageFormats;\r\n  };\r\n\r\n  var getPageFormat = (API.__private__.getPageFormat = function(value) {\r\n    return pageFormats[value];\r\n  });\r\n\r\n  format = format || \"a4\";\r\n\r\n  var ApiMode = {\r\n    COMPAT: \"compat\",\r\n    ADVANCED: \"advanced\"\r\n  };\r\n  var apiMode = ApiMode.COMPAT;\r\n\r\n  function advancedAPI() {\r\n    // prepend global change of basis matrix\r\n    // (Now, instead of converting every coordinate to the pdf coordinate system, we apply a matrix\r\n    // that does this job for us (however, texts, images and similar objects must be drawn bottom up))\r\n    this.saveGraphicsState();\r\n    out(\r\n      new Matrix(\r\n        scaleFactor,\r\n        0,\r\n        0,\r\n        -scaleFactor,\r\n        0,\r\n        getPageHeight() * scaleFactor\r\n      ).toString() + \" cm\"\r\n    );\r\n    this.setFontSize(this.getFontSize() / scaleFactor);\r\n\r\n    // The default in MrRio's implementation is \"S\" (stroke), whereas the default in the yWorks implementation\r\n    // was \"n\" (none). Although this has nothing to do with transforms, we should use the API switch here.\r\n    defaultPathOperation = \"n\";\r\n\r\n    apiMode = ApiMode.ADVANCED;\r\n  }\r\n\r\n  function compatAPI() {\r\n    this.restoreGraphicsState();\r\n    defaultPathOperation = \"S\";\r\n    apiMode = ApiMode.COMPAT;\r\n  }\r\n\r\n  /**\r\n   * @function combineFontStyleAndFontWeight\r\n   * @param {string} fontStyle Fontstyle or variant. Example: \"italic\".\r\n   * @param {number | string} fontWeight Weight of the Font. Example: \"normal\" | 400\r\n   * @returns {string}\r\n   * @private\r\n   */\r\n  var combineFontStyleAndFontWeight = (API.__private__.combineFontStyleAndFontWeight = function(\r\n    fontStyle,\r\n    fontWeight\r\n  ) {\r\n    if (\r\n      (fontStyle == \"bold\" && fontWeight == \"normal\") ||\r\n      (fontStyle == \"bold\" && fontWeight == 400) ||\r\n      (fontStyle == \"normal\" && fontWeight == \"italic\") ||\r\n      (fontStyle == \"bold\" && fontWeight == \"italic\")\r\n    ) {\r\n      throw new Error(\"Invalid Combination of fontweight and fontstyle\");\r\n    }\r\n    if (fontWeight) {\r\n      fontStyle =\r\n        fontWeight == 400 || fontWeight === \"normal\"\r\n          ? fontStyle === \"italic\"\r\n            ? \"italic\"\r\n            : \"normal\"\r\n          : (fontWeight == 700 || fontWeight === \"bold\") &&\r\n            fontStyle === \"normal\"\r\n          ? \"bold\"\r\n          : (fontWeight == 700 ? \"bold\" : fontWeight) + \"\" + fontStyle;\r\n    }\r\n    return fontStyle;\r\n  });\r\n\r\n  /**\r\n   * @callback ApiSwitchBody\r\n   * @param {jsPDF} pdf\r\n   */\r\n\r\n  /**\r\n   * For compatibility reasons jsPDF offers two API modes which differ in the way they convert between the the usual\r\n   * screen coordinates and the PDF coordinate system.\r\n   *   - \"compat\": Offers full compatibility across all plugins but does not allow arbitrary transforms\r\n   *   - \"advanced\": Allows arbitrary transforms and more advanced features like pattern fills. Some plugins might\r\n   *     not support this mode, though.\r\n   * Initial mode is \"compat\".\r\n   *\r\n   * You can either provide a callback to the body argument, which means that jsPDF will automatically switch back to\r\n   * the original API mode afterwards; or you can omit the callback and switch back manually using {@link compatAPI}.\r\n   *\r\n   * Note, that the calls to {@link saveGraphicsState} and {@link restoreGraphicsState} need to be balanced within the\r\n   * callback or between calls of this method and its counterpart {@link compatAPI}. Calls to {@link beginFormObject}\r\n   * or {@link beginTilingPattern} need to be closed by their counterparts before switching back to \"compat\" API mode.\r\n   *\r\n   * @param {ApiSwitchBody=} body When provided, this callback will be called after the API mode has been switched.\r\n   * The API mode will be switched back automatically afterwards.\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name advancedAPI\r\n   */\r\n  API.advancedAPI = function(body) {\r\n    var doSwitch = apiMode === ApiMode.COMPAT;\r\n\r\n    if (doSwitch) {\r\n      advancedAPI.call(this);\r\n    }\r\n\r\n    if (typeof body !== \"function\") {\r\n      return this;\r\n    }\r\n\r\n    body(this);\r\n\r\n    if (doSwitch) {\r\n      compatAPI.call(this);\r\n    }\r\n\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Switches to \"compat\" API mode. See {@link advancedAPI} for more details.\r\n   *\r\n   * @param {ApiSwitchBody=} body When provided, this callback will be called after the API mode has been switched.\r\n   * The API mode will be switched back automatically afterwards.\r\n   * @return {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name compatApi\r\n   */\r\n  API.compatAPI = function(body) {\r\n    var doSwitch = apiMode === ApiMode.ADVANCED;\r\n\r\n    if (doSwitch) {\r\n      compatAPI.call(this);\r\n    }\r\n\r\n    if (typeof body !== \"function\") {\r\n      return this;\r\n    }\r\n\r\n    body(this);\r\n\r\n    if (doSwitch) {\r\n      advancedAPI.call(this);\r\n    }\r\n\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * @return {boolean} True iff the current API mode is \"advanced\". See {@link advancedAPI}.\r\n   * @memberof jsPDF#\r\n   * @name isAdvancedAPI\r\n   */\r\n  API.isAdvancedAPI = function() {\r\n    return apiMode === ApiMode.ADVANCED;\r\n  };\r\n\r\n  var advancedApiModeTrap = function(methodName) {\r\n    if (apiMode !== ApiMode.ADVANCED) {\r\n      throw new Error(\r\n        methodName +\r\n          \" is only available in 'advanced' API mode. \" +\r\n          \"You need to call advancedAPI() first.\"\r\n      );\r\n    }\r\n  };\r\n\r\n  var roundToPrecision = (API.roundToPrecision = API.__private__.roundToPrecision = function(\r\n    number,\r\n    parmPrecision\r\n  ) {\r\n    var tmpPrecision = precision || parmPrecision;\r\n    if (isNaN(number) || isNaN(tmpPrecision)) {\r\n      throw new Error(\"Invalid argument passed to jsPDF.roundToPrecision\");\r\n    }\r\n    return number.toFixed(tmpPrecision).replace(/0+$/, \"\");\r\n  });\r\n\r\n  // high precision float\r\n  var hpf;\r\n  if (typeof floatPrecision === \"number\") {\r\n    hpf = API.hpf = API.__private__.hpf = function(number) {\r\n      if (isNaN(number)) {\r\n        throw new Error(\"Invalid argument passed to jsPDF.hpf\");\r\n      }\r\n      return roundToPrecision(number, floatPrecision);\r\n    };\r\n  } else if (floatPrecision === \"smart\") {\r\n    hpf = API.hpf = API.__private__.hpf = function(number) {\r\n      if (isNaN(number)) {\r\n        throw new Error(\"Invalid argument passed to jsPDF.hpf\");\r\n      }\r\n      if (number > -1 && number < 1) {\r\n        return roundToPrecision(number, 16);\r\n      } else {\r\n        return roundToPrecision(number, 5);\r\n      }\r\n    };\r\n  } else {\r\n    hpf = API.hpf = API.__private__.hpf = function(number) {\r\n      if (isNaN(number)) {\r\n        throw new Error(\"Invalid argument passed to jsPDF.hpf\");\r\n      }\r\n      return roundToPrecision(number, 16);\r\n    };\r\n  }\r\n  var f2 = (API.f2 = API.__private__.f2 = function(number) {\r\n    if (isNaN(number)) {\r\n      throw new Error(\"Invalid argument passed to jsPDF.f2\");\r\n    }\r\n    return roundToPrecision(number, 2);\r\n  });\r\n\r\n  var f3 = (API.__private__.f3 = function(number) {\r\n    if (isNaN(number)) {\r\n      throw new Error(\"Invalid argument passed to jsPDF.f3\");\r\n    }\r\n    return roundToPrecision(number, 3);\r\n  });\r\n\r\n  var scale = (API.scale = API.__private__.scale = function(number) {\r\n    if (isNaN(number)) {\r\n      throw new Error(\"Invalid argument passed to jsPDF.scale\");\r\n    }\r\n    if (apiMode === ApiMode.COMPAT) {\r\n      return number * scaleFactor;\r\n    } else if (apiMode === ApiMode.ADVANCED) {\r\n      return number;\r\n    }\r\n  });\r\n\r\n  var transformY = function(y) {\r\n    if (apiMode === ApiMode.COMPAT) {\r\n      return getPageHeight() - y;\r\n    } else if (apiMode === ApiMode.ADVANCED) {\r\n      return y;\r\n    }\r\n  };\r\n\r\n  var transformScaleY = function(y) {\r\n    return scale(transformY(y));\r\n  };\r\n\r\n  /**\r\n   * @name setPrecision\r\n   * @memberof jsPDF#\r\n   * @function\r\n   * @instance\r\n   * @param {string} precision\r\n   * @returns {jsPDF}\r\n   */\r\n  API.__private__.setPrecision = API.setPrecision = function(value) {\r\n    if (typeof parseInt(value, 10) === \"number\") {\r\n      precision = parseInt(value, 10);\r\n    }\r\n  };\r\n\r\n  var fileId = \"00000000000000000000000000000000\";\r\n\r\n  var getFileId = (API.__private__.getFileId = function() {\r\n    return fileId;\r\n  });\r\n\r\n  var setFileId = (API.__private__.setFileId = function(value) {\r\n    if (typeof value !== \"undefined\" && /^[a-fA-F0-9]{32}$/.test(value)) {\r\n      fileId = value.toUpperCase();\r\n    } else {\r\n      fileId = fileId\r\n        .split(\"\")\r\n        .map(function() {\r\n          return \"ABCDEF0123456789\".charAt(Math.floor(Math.random() * 16));\r\n        })\r\n        .join(\"\");\r\n    }\r\n\r\n    if (encryptionOptions !== null) {\r\n      encryption = new PDFSecurity(\r\n        encryptionOptions.userPermissions,\r\n        encryptionOptions.userPassword,\r\n        encryptionOptions.ownerPassword,\r\n        fileId\r\n      );\r\n    }\r\n    return fileId;\r\n  });\r\n\r\n  /**\r\n   * @name setFileId\r\n   * @memberof jsPDF#\r\n   * @function\r\n   * @instance\r\n   * @param {string} value GUID.\r\n   * @returns {jsPDF}\r\n   */\r\n  API.setFileId = function(value) {\r\n    setFileId(value);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * @name getFileId\r\n   * @memberof jsPDF#\r\n   * @function\r\n   * @instance\r\n   *\r\n   * @returns {string} GUID.\r\n   */\r\n  API.getFileId = function() {\r\n    return getFileId();\r\n  };\r\n\r\n  var creationDate;\r\n\r\n  var convertDateToPDFDate = (API.__private__.convertDateToPDFDate = function(\r\n    parmDate\r\n  ) {\r\n    var result = \"\";\r\n    var tzoffset = parmDate.getTimezoneOffset(),\r\n      tzsign = tzoffset < 0 ? \"+\" : \"-\",\r\n      tzhour = Math.floor(Math.abs(tzoffset / 60)),\r\n      tzmin = Math.abs(tzoffset % 60),\r\n      timeZoneString = [tzsign, padd2(tzhour), \"'\", padd2(tzmin), \"'\"].join(\"\");\r\n\r\n    result = [\r\n      \"D:\",\r\n      parmDate.getFullYear(),\r\n      padd2(parmDate.getMonth() + 1),\r\n      padd2(parmDate.getDate()),\r\n      padd2(parmDate.getHours()),\r\n      padd2(parmDate.getMinutes()),\r\n      padd2(parmDate.getSeconds()),\r\n      timeZoneString\r\n    ].join(\"\");\r\n    return result;\r\n  });\r\n\r\n  var convertPDFDateToDate = (API.__private__.convertPDFDateToDate = function(\r\n    parmPDFDate\r\n  ) {\r\n    var year = parseInt(parmPDFDate.substr(2, 4), 10);\r\n    var month = parseInt(parmPDFDate.substr(6, 2), 10) - 1;\r\n    var date = parseInt(parmPDFDate.substr(8, 2), 10);\r\n    var hour = parseInt(parmPDFDate.substr(10, 2), 10);\r\n    var minutes = parseInt(parmPDFDate.substr(12, 2), 10);\r\n    var seconds = parseInt(parmPDFDate.substr(14, 2), 10);\r\n    // var timeZoneHour = parseInt(parmPDFDate.substr(16, 2), 10);\r\n    // var timeZoneMinutes = parseInt(parmPDFDate.substr(20, 2), 10);\r\n\r\n    var resultingDate = new Date(year, month, date, hour, minutes, seconds, 0);\r\n    return resultingDate;\r\n  });\r\n\r\n  var setCreationDate = (API.__private__.setCreationDate = function(date) {\r\n    var tmpCreationDateString;\r\n    var regexPDFCreationDate = /^D:(20[0-2][0-9]|203[0-7]|19[7-9][0-9])(0[0-9]|1[0-2])([0-2][0-9]|3[0-1])(0[0-9]|1[0-9]|2[0-3])(0[0-9]|[1-5][0-9])(0[0-9]|[1-5][0-9])(\\+0[0-9]|\\+1[0-4]|-0[0-9]|-1[0-1])'(0[0-9]|[1-5][0-9])'?$/;\r\n    if (typeof date === \"undefined\") {\r\n      date = new Date();\r\n    }\r\n\r\n    if (date instanceof Date) {\r\n      tmpCreationDateString = convertDateToPDFDate(date);\r\n    } else if (regexPDFCreationDate.test(date)) {\r\n      tmpCreationDateString = date;\r\n    } else {\r\n      throw new Error(\"Invalid argument passed to jsPDF.setCreationDate\");\r\n    }\r\n    creationDate = tmpCreationDateString;\r\n    return creationDate;\r\n  });\r\n\r\n  var getCreationDate = (API.__private__.getCreationDate = function(type) {\r\n    var result = creationDate;\r\n    if (type === \"jsDate\") {\r\n      result = convertPDFDateToDate(creationDate);\r\n    }\r\n    return result;\r\n  });\r\n\r\n  /**\r\n   * @name setCreationDate\r\n   * @memberof jsPDF#\r\n   * @function\r\n   * @instance\r\n   * @param {Object} date\r\n   * @returns {jsPDF}\r\n   */\r\n  API.setCreationDate = function(date) {\r\n    setCreationDate(date);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * @name getCreationDate\r\n   * @memberof jsPDF#\r\n   * @function\r\n   * @instance\r\n   * @param {Object} type\r\n   * @returns {Object}\r\n   */\r\n  API.getCreationDate = function(type) {\r\n    return getCreationDate(type);\r\n  };\r\n\r\n  var padd2 = (API.__private__.padd2 = function(number) {\r\n    return (\"0\" + parseInt(number)).slice(-2);\r\n  });\r\n\r\n  var padd2Hex = (API.__private__.padd2Hex = function(hexString) {\r\n    hexString = hexString.toString();\r\n    return (\"00\" + hexString).substr(hexString.length);\r\n  });\r\n\r\n  var objectNumber = 0; // 'n' Current object number\r\n  var offsets = []; // List of offsets. Activated and reset by buildDocument(). Pupulated by various calls buildDocument makes.\r\n  var content = [];\r\n  var contentLength = 0;\r\n  var additionalObjects = [];\r\n\r\n  var pages = [];\r\n  var currentPage;\r\n  var hasCustomDestination = false;\r\n  var outputDestination = content;\r\n\r\n  var resetDocument = function() {\r\n    //reset fields relevant for objectNumber generation and xref.\r\n    objectNumber = 0;\r\n    contentLength = 0;\r\n    content = [];\r\n    offsets = [];\r\n    additionalObjects = [];\r\n\r\n    rootDictionaryObjId = newObjectDeferred();\r\n    resourceDictionaryObjId = newObjectDeferred();\r\n  };\r\n\r\n  API.__private__.setCustomOutputDestination = function(destination) {\r\n    hasCustomDestination = true;\r\n    outputDestination = destination;\r\n  };\r\n  var setOutputDestination = function(destination) {\r\n    if (!hasCustomDestination) {\r\n      outputDestination = destination;\r\n    }\r\n  };\r\n\r\n  API.__private__.resetCustomOutputDestination = function() {\r\n    hasCustomDestination = false;\r\n    outputDestination = content;\r\n  };\r\n\r\n  var out = (API.__private__.out = function(string) {\r\n    string = string.toString();\r\n    contentLength += string.length + 1;\r\n    outputDestination.push(string);\r\n\r\n    return outputDestination;\r\n  });\r\n\r\n  var write = (API.__private__.write = function(value) {\r\n    return out(\r\n      arguments.length === 1\r\n        ? value.toString()\r\n        : Array.prototype.join.call(arguments, \" \")\r\n    );\r\n  });\r\n\r\n  var getArrayBuffer = (API.__private__.getArrayBuffer = function(data) {\r\n    var len = data.length,\r\n      ab = new ArrayBuffer(len),\r\n      u8 = new Uint8Array(ab);\r\n\r\n    while (len--) u8[len] = data.charCodeAt(len);\r\n    return ab;\r\n  });\r\n\r\n  var standardFonts = [\r\n    [\"Helvetica\", \"helvetica\", \"normal\", \"WinAnsiEncoding\"],\r\n    [\"Helvetica-Bold\", \"helvetica\", \"bold\", \"WinAnsiEncoding\"],\r\n    [\"Helvetica-Oblique\", \"helvetica\", \"italic\", \"WinAnsiEncoding\"],\r\n    [\"Helvetica-BoldOblique\", \"helvetica\", \"bolditalic\", \"WinAnsiEncoding\"],\r\n    [\"Courier\", \"courier\", \"normal\", \"WinAnsiEncoding\"],\r\n    [\"Courier-Bold\", \"courier\", \"bold\", \"WinAnsiEncoding\"],\r\n    [\"Courier-Oblique\", \"courier\", \"italic\", \"WinAnsiEncoding\"],\r\n    [\"Courier-BoldOblique\", \"courier\", \"bolditalic\", \"WinAnsiEncoding\"],\r\n    [\"Times-Roman\", \"times\", \"normal\", \"WinAnsiEncoding\"],\r\n    [\"Times-Bold\", \"times\", \"bold\", \"WinAnsiEncoding\"],\r\n    [\"Times-Italic\", \"times\", \"italic\", \"WinAnsiEncoding\"],\r\n    [\"Times-BoldItalic\", \"times\", \"bolditalic\", \"WinAnsiEncoding\"],\r\n    [\"ZapfDingbats\", \"zapfdingbats\", \"normal\", null],\r\n    [\"Symbol\", \"symbol\", \"normal\", null]\r\n  ];\r\n\r\n  API.__private__.getStandardFonts = function() {\r\n    return standardFonts;\r\n  };\r\n\r\n  var activeFontSize = options.fontSize || 16;\r\n\r\n  /**\r\n   * Sets font size for upcoming text elements.\r\n   *\r\n   * @param {number} size Font size in points.\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name setFontSize\r\n   */\r\n  API.__private__.setFontSize = API.setFontSize = function(size) {\r\n    if (apiMode === ApiMode.ADVANCED) {\r\n      activeFontSize = size / scaleFactor;\r\n    } else {\r\n      activeFontSize = size;\r\n    }\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Gets the fontsize for upcoming text elements.\r\n   *\r\n   * @function\r\n   * @instance\r\n   * @returns {number}\r\n   * @memberof jsPDF#\r\n   * @name getFontSize\r\n   */\r\n  var getFontSize = (API.__private__.getFontSize = API.getFontSize = function() {\r\n    if (apiMode === ApiMode.COMPAT) {\r\n      return activeFontSize;\r\n    } else {\r\n      return activeFontSize * scaleFactor;\r\n    }\r\n  });\r\n\r\n  var R2L = options.R2L || false;\r\n\r\n  /**\r\n   * Set value of R2L functionality.\r\n   *\r\n   * @param {boolean} value\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF} jsPDF-instance\r\n   * @memberof jsPDF#\r\n   * @name setR2L\r\n   */\r\n  API.__private__.setR2L = API.setR2L = function(value) {\r\n    R2L = value;\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Get value of R2L functionality.\r\n   *\r\n   * @function\r\n   * @instance\r\n   * @returns {boolean} jsPDF-instance\r\n   * @memberof jsPDF#\r\n   * @name getR2L\r\n   */\r\n  API.__private__.getR2L = API.getR2L = function() {\r\n    return R2L;\r\n  };\r\n\r\n  var zoomMode; // default: 1;\r\n\r\n  var setZoomMode = (API.__private__.setZoomMode = function(zoom) {\r\n    var validZoomModes = [\r\n      undefined,\r\n      null,\r\n      \"fullwidth\",\r\n      \"fullheight\",\r\n      \"fullpage\",\r\n      \"original\"\r\n    ];\r\n\r\n    if (/^(?:\\d+\\.\\d*|\\d*\\.\\d+|\\d+)%$/.test(zoom)) {\r\n      zoomMode = zoom;\r\n    } else if (!isNaN(zoom)) {\r\n      zoomMode = parseInt(zoom, 10);\r\n    } else if (validZoomModes.indexOf(zoom) !== -1) {\r\n      zoomMode = zoom;\r\n    } else {\r\n      throw new Error(\r\n        'zoom must be Integer (e.g. 2), a percentage Value (e.g. 300%) or fullwidth, fullheight, fullpage, original. \"' +\r\n          zoom +\r\n          '\" is not recognized.'\r\n      );\r\n    }\r\n  });\r\n\r\n  API.__private__.getZoomMode = function() {\r\n    return zoomMode;\r\n  };\r\n\r\n  var pageMode; // default: 'UseOutlines';\r\n  var setPageMode = (API.__private__.setPageMode = function(pmode) {\r\n    var validPageModes = [\r\n      undefined,\r\n      null,\r\n      \"UseNone\",\r\n      \"UseOutlines\",\r\n      \"UseThumbs\",\r\n      \"FullScreen\"\r\n    ];\r\n\r\n    if (validPageModes.indexOf(pmode) == -1) {\r\n      throw new Error(\r\n        'Page mode must be one of UseNone, UseOutlines, UseThumbs, or FullScreen. \"' +\r\n          pmode +\r\n          '\" is not recognized.'\r\n      );\r\n    }\r\n    pageMode = pmode;\r\n  });\r\n\r\n  API.__private__.getPageMode = function() {\r\n    return pageMode;\r\n  };\r\n\r\n  var layoutMode; // default: 'continuous';\r\n  var setLayoutMode = (API.__private__.setLayoutMode = function(layout) {\r\n    var validLayoutModes = [\r\n      undefined,\r\n      null,\r\n      \"continuous\",\r\n      \"single\",\r\n      \"twoleft\",\r\n      \"tworight\",\r\n      \"two\"\r\n    ];\r\n\r\n    if (validLayoutModes.indexOf(layout) == -1) {\r\n      throw new Error(\r\n        'Layout mode must be one of continuous, single, twoleft, tworight. \"' +\r\n          layout +\r\n          '\" is not recognized.'\r\n      );\r\n    }\r\n    layoutMode = layout;\r\n  });\r\n\r\n  API.__private__.getLayoutMode = function() {\r\n    return layoutMode;\r\n  };\r\n\r\n  /**\r\n   * Set the display mode options of the page like zoom and layout.\r\n   *\r\n   * @name setDisplayMode\r\n   * @memberof jsPDF#\r\n   * @function\r\n   * @instance\r\n   * @param {integer|String} zoom   You can pass an integer or percentage as\r\n   * a string. 2 will scale the document up 2x, '200%' will scale up by the\r\n   * same amount. You can also set it to 'fullwidth', 'fullheight',\r\n   * 'fullpage', or 'original'.\r\n   *\r\n   * Only certain PDF readers support this, such as Adobe Acrobat.\r\n   *\r\n   * @param {string} layout Layout mode can be: 'continuous' - this is the\r\n   * default continuous scroll. 'single' - the single page mode only shows one\r\n   * page at a time. 'twoleft' - two column left mode, first page starts on\r\n   * the left, and 'tworight' - pages are laid out in two columns, with the\r\n   * first page on the right. This would be used for books.\r\n   * @param {string} pmode 'UseOutlines' - it shows the\r\n   * outline of the document on the left. 'UseThumbs' - shows thumbnails along\r\n   * the left. 'FullScreen' - prompts the user to enter fullscreen mode.\r\n   *\r\n   * @returns {jsPDF}\r\n   */\r\n  API.__private__.setDisplayMode = API.setDisplayMode = function(\r\n    zoom,\r\n    layout,\r\n    pmode\r\n  ) {\r\n    setZoomMode(zoom);\r\n    setLayoutMode(layout);\r\n    setPageMode(pmode);\r\n    return this;\r\n  };\r\n\r\n  var documentProperties = {\r\n    title: \"\",\r\n    subject: \"\",\r\n    author: \"\",\r\n    keywords: \"\",\r\n    creator: \"\"\r\n  };\r\n\r\n  API.__private__.getDocumentProperty = function(key) {\r\n    if (Object.keys(documentProperties).indexOf(key) === -1) {\r\n      throw new Error(\"Invalid argument passed to jsPDF.getDocumentProperty\");\r\n    }\r\n    return documentProperties[key];\r\n  };\r\n\r\n  API.__private__.getDocumentProperties = function() {\r\n    return documentProperties;\r\n  };\r\n\r\n  /**\r\n   * Adds a properties to the PDF document.\r\n   *\r\n   * @param {Object} A property_name-to-property_value object structure.\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name setDocumentProperties\r\n   */\r\n  API.__private__.setDocumentProperties = API.setProperties = API.setDocumentProperties = function(\r\n    properties\r\n  ) {\r\n    // copying only those properties we can render.\r\n    for (var property in documentProperties) {\r\n      if (documentProperties.hasOwnProperty(property) && properties[property]) {\r\n        documentProperties[property] = properties[property];\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  API.__private__.setDocumentProperty = function(key, value) {\r\n    if (Object.keys(documentProperties).indexOf(key) === -1) {\r\n      throw new Error(\"Invalid arguments passed to jsPDF.setDocumentProperty\");\r\n    }\r\n    return (documentProperties[key] = value);\r\n  };\r\n\r\n  var fonts = {}; // collection of font objects, where key is fontKey - a dynamically created label for a given font.\r\n  var fontmap = {}; // mapping structure fontName > fontStyle > font key - performance layer. See addFont()\r\n  var activeFontKey; // will be string representing the KEY of the font as combination of fontName + fontStyle\r\n  var fontStateStack = []; //\r\n  var patterns = {}; // collection of pattern objects\r\n  var patternMap = {}; // see fonts\r\n  var gStates = {}; // collection of graphic state objects\r\n  var gStatesMap = {}; // see fonts\r\n  var activeGState = null;\r\n  var scaleFactor; // Scale factor\r\n  var page = 0;\r\n  var pagesContext = [];\r\n  var events = new PubSub(API);\r\n  var hotfixes = options.hotfixes || [];\r\n\r\n  var renderTargets = {};\r\n  var renderTargetMap = {};\r\n  var renderTargetStack = [];\r\n  var pageX;\r\n  var pageY;\r\n  var pageMatrix; // only used for FormObjects\r\n\r\n  /**\r\n   * A matrix object for 2D homogenous transformations: <br>\r\n   * | a b 0 | <br>\r\n   * | c d 0 | <br>\r\n   * | e f 1 | <br>\r\n   * pdf multiplies matrices righthand: v' = v x m1 x m2 x ...\r\n   *\r\n   * @class\r\n   * @name Matrix\r\n   * @param {number} sx\r\n   * @param {number} shy\r\n   * @param {number} shx\r\n   * @param {number} sy\r\n   * @param {number} tx\r\n   * @param {number} ty\r\n   * @constructor\r\n   */\r\n  var Matrix = function(sx, shy, shx, sy, tx, ty) {\r\n    if (!(this instanceof Matrix)) {\r\n      return new Matrix(sx, shy, shx, sy, tx, ty);\r\n    }\r\n\r\n    if (isNaN(sx)) sx = 1;\r\n    if (isNaN(shy)) shy = 0;\r\n    if (isNaN(shx)) shx = 0;\r\n    if (isNaN(sy)) sy = 1;\r\n    if (isNaN(tx)) tx = 0;\r\n    if (isNaN(ty)) ty = 0;\r\n\r\n    this._matrix = [sx, shy, shx, sy, tx, ty];\r\n  };\r\n\r\n  /**\r\n   * @name sx\r\n   * @memberof Matrix#\r\n   */\r\n  Object.defineProperty(Matrix.prototype, \"sx\", {\r\n    get: function() {\r\n      return this._matrix[0];\r\n    },\r\n    set: function(value) {\r\n      this._matrix[0] = value;\r\n    }\r\n  });\r\n\r\n  /**\r\n   * @name shy\r\n   * @memberof Matrix#\r\n   */\r\n  Object.defineProperty(Matrix.prototype, \"shy\", {\r\n    get: function() {\r\n      return this._matrix[1];\r\n    },\r\n    set: function(value) {\r\n      this._matrix[1] = value;\r\n    }\r\n  });\r\n\r\n  /**\r\n   * @name shx\r\n   * @memberof Matrix#\r\n   */\r\n  Object.defineProperty(Matrix.prototype, \"shx\", {\r\n    get: function() {\r\n      return this._matrix[2];\r\n    },\r\n    set: function(value) {\r\n      this._matrix[2] = value;\r\n    }\r\n  });\r\n\r\n  /**\r\n   * @name sy\r\n   * @memberof Matrix#\r\n   */\r\n  Object.defineProperty(Matrix.prototype, \"sy\", {\r\n    get: function() {\r\n      return this._matrix[3];\r\n    },\r\n    set: function(value) {\r\n      this._matrix[3] = value;\r\n    }\r\n  });\r\n\r\n  /**\r\n   * @name tx\r\n   * @memberof Matrix#\r\n   */\r\n  Object.defineProperty(Matrix.prototype, \"tx\", {\r\n    get: function() {\r\n      return this._matrix[4];\r\n    },\r\n    set: function(value) {\r\n      this._matrix[4] = value;\r\n    }\r\n  });\r\n\r\n  /**\r\n   * @name ty\r\n   * @memberof Matrix#\r\n   */\r\n  Object.defineProperty(Matrix.prototype, \"ty\", {\r\n    get: function() {\r\n      return this._matrix[5];\r\n    },\r\n    set: function(value) {\r\n      this._matrix[5] = value;\r\n    }\r\n  });\r\n\r\n  Object.defineProperty(Matrix.prototype, \"a\", {\r\n    get: function() {\r\n      return this._matrix[0];\r\n    },\r\n    set: function(value) {\r\n      this._matrix[0] = value;\r\n    }\r\n  });\r\n\r\n  Object.defineProperty(Matrix.prototype, \"b\", {\r\n    get: function() {\r\n      return this._matrix[1];\r\n    },\r\n    set: function(value) {\r\n      this._matrix[1] = value;\r\n    }\r\n  });\r\n\r\n  Object.defineProperty(Matrix.prototype, \"c\", {\r\n    get: function() {\r\n      return this._matrix[2];\r\n    },\r\n    set: function(value) {\r\n      this._matrix[2] = value;\r\n    }\r\n  });\r\n\r\n  Object.defineProperty(Matrix.prototype, \"d\", {\r\n    get: function() {\r\n      return this._matrix[3];\r\n    },\r\n    set: function(value) {\r\n      this._matrix[3] = value;\r\n    }\r\n  });\r\n\r\n  Object.defineProperty(Matrix.prototype, \"e\", {\r\n    get: function() {\r\n      return this._matrix[4];\r\n    },\r\n    set: function(value) {\r\n      this._matrix[4] = value;\r\n    }\r\n  });\r\n\r\n  Object.defineProperty(Matrix.prototype, \"f\", {\r\n    get: function() {\r\n      return this._matrix[5];\r\n    },\r\n    set: function(value) {\r\n      this._matrix[5] = value;\r\n    }\r\n  });\r\n\r\n  /**\r\n   * @name rotation\r\n   * @memberof Matrix#\r\n   */\r\n  Object.defineProperty(Matrix.prototype, \"rotation\", {\r\n    get: function() {\r\n      return Math.atan2(this.shx, this.sx);\r\n    }\r\n  });\r\n\r\n  /**\r\n   * @name scaleX\r\n   * @memberof Matrix#\r\n   */\r\n  Object.defineProperty(Matrix.prototype, \"scaleX\", {\r\n    get: function() {\r\n      return this.decompose().scale.sx;\r\n    }\r\n  });\r\n\r\n  /**\r\n   * @name scaleY\r\n   * @memberof Matrix#\r\n   */\r\n  Object.defineProperty(Matrix.prototype, \"scaleY\", {\r\n    get: function() {\r\n      return this.decompose().scale.sy;\r\n    }\r\n  });\r\n\r\n  /**\r\n   * @name isIdentity\r\n   * @memberof Matrix#\r\n   */\r\n  Object.defineProperty(Matrix.prototype, \"isIdentity\", {\r\n    get: function() {\r\n      if (this.sx !== 1) {\r\n        return false;\r\n      }\r\n      if (this.shy !== 0) {\r\n        return false;\r\n      }\r\n      if (this.shx !== 0) {\r\n        return false;\r\n      }\r\n      if (this.sy !== 1) {\r\n        return false;\r\n      }\r\n      if (this.tx !== 0) {\r\n        return false;\r\n      }\r\n      if (this.ty !== 0) {\r\n        return false;\r\n      }\r\n      return true;\r\n    }\r\n  });\r\n\r\n  /**\r\n   * Join the Matrix Values to a String\r\n   *\r\n   * @function join\r\n   * @param {string} separator Specifies a string to separate each pair of adjacent elements of the array. The separator is converted to a string if necessary. If omitted, the array elements are separated with a comma (\",\"). If separator is an empty string, all elements are joined without any characters in between them.\r\n   * @returns {string} A string with all array elements joined.\r\n   * @memberof Matrix#\r\n   */\r\n  Matrix.prototype.join = function(separator) {\r\n    return [this.sx, this.shy, this.shx, this.sy, this.tx, this.ty]\r\n      .map(hpf)\r\n      .join(separator);\r\n  };\r\n\r\n  /**\r\n   * Multiply the matrix with given Matrix\r\n   *\r\n   * @function multiply\r\n   * @param matrix\r\n   * @returns {Matrix}\r\n   * @memberof Matrix#\r\n   */\r\n  Matrix.prototype.multiply = function(matrix) {\r\n    var sx = matrix.sx * this.sx + matrix.shy * this.shx;\r\n    var shy = matrix.sx * this.shy + matrix.shy * this.sy;\r\n    var shx = matrix.shx * this.sx + matrix.sy * this.shx;\r\n    var sy = matrix.shx * this.shy + matrix.sy * this.sy;\r\n    var tx = matrix.tx * this.sx + matrix.ty * this.shx + this.tx;\r\n    var ty = matrix.tx * this.shy + matrix.ty * this.sy + this.ty;\r\n\r\n    return new Matrix(sx, shy, shx, sy, tx, ty);\r\n  };\r\n\r\n  /**\r\n   * @function decompose\r\n   * @memberof Matrix#\r\n   */\r\n  Matrix.prototype.decompose = function() {\r\n    var a = this.sx;\r\n    var b = this.shy;\r\n    var c = this.shx;\r\n    var d = this.sy;\r\n    var e = this.tx;\r\n    var f = this.ty;\r\n\r\n    var scaleX = Math.sqrt(a * a + b * b);\r\n    a /= scaleX;\r\n    b /= scaleX;\r\n\r\n    var shear = a * c + b * d;\r\n    c -= a * shear;\r\n    d -= b * shear;\r\n\r\n    var scaleY = Math.sqrt(c * c + d * d);\r\n    c /= scaleY;\r\n    d /= scaleY;\r\n    shear /= scaleY;\r\n\r\n    if (a * d < b * c) {\r\n      a = -a;\r\n      b = -b;\r\n      shear = -shear;\r\n      scaleX = -scaleX;\r\n    }\r\n\r\n    return {\r\n      scale: new Matrix(scaleX, 0, 0, scaleY, 0, 0),\r\n      translate: new Matrix(1, 0, 0, 1, e, f),\r\n      rotate: new Matrix(a, b, -b, a, 0, 0),\r\n      skew: new Matrix(1, 0, shear, 1, 0, 0)\r\n    };\r\n  };\r\n\r\n  /**\r\n   * @function toString\r\n   * @memberof Matrix#\r\n   */\r\n  Matrix.prototype.toString = function(parmPrecision) {\r\n    return this.join(\" \");\r\n  };\r\n\r\n  /**\r\n   * @function inversed\r\n   * @memberof Matrix#\r\n   */\r\n  Matrix.prototype.inversed = function() {\r\n    var a = this.sx,\r\n      b = this.shy,\r\n      c = this.shx,\r\n      d = this.sy,\r\n      e = this.tx,\r\n      f = this.ty;\r\n\r\n    var quot = 1 / (a * d - b * c);\r\n\r\n    var aInv = d * quot;\r\n    var bInv = -b * quot;\r\n    var cInv = -c * quot;\r\n    var dInv = a * quot;\r\n    var eInv = -aInv * e - cInv * f;\r\n    var fInv = -bInv * e - dInv * f;\r\n\r\n    return new Matrix(aInv, bInv, cInv, dInv, eInv, fInv);\r\n  };\r\n\r\n  /**\r\n   * @function applyToPoint\r\n   * @memberof Matrix#\r\n   */\r\n  Matrix.prototype.applyToPoint = function(pt) {\r\n    var x = pt.x * this.sx + pt.y * this.shx + this.tx;\r\n    var y = pt.x * this.shy + pt.y * this.sy + this.ty;\r\n    return new Point(x, y);\r\n  };\r\n\r\n  /**\r\n   * @function applyToRectangle\r\n   * @memberof Matrix#\r\n   */\r\n  Matrix.prototype.applyToRectangle = function(rect) {\r\n    var pt1 = this.applyToPoint(rect);\r\n    var pt2 = this.applyToPoint(new Point(rect.x + rect.w, rect.y + rect.h));\r\n    return new Rectangle(pt1.x, pt1.y, pt2.x - pt1.x, pt2.y - pt1.y);\r\n  };\r\n\r\n  /**\r\n   * Clone the Matrix\r\n   *\r\n   * @function clone\r\n   * @memberof Matrix#\r\n   * @name clone\r\n   * @instance\r\n   */\r\n  Matrix.prototype.clone = function() {\r\n    var sx = this.sx;\r\n    var shy = this.shy;\r\n    var shx = this.shx;\r\n    var sy = this.sy;\r\n    var tx = this.tx;\r\n    var ty = this.ty;\r\n\r\n    return new Matrix(sx, shy, shx, sy, tx, ty);\r\n  };\r\n\r\n  API.Matrix = Matrix;\r\n\r\n  /**\r\n   * Multiplies two matrices. (see {@link Matrix})\r\n   * @param {Matrix} m1\r\n   * @param {Matrix} m2\r\n   * @memberof jsPDF#\r\n   * @name matrixMult\r\n   */\r\n  var matrixMult = (API.matrixMult = function(m1, m2) {\r\n    return m2.multiply(m1);\r\n  });\r\n\r\n  /**\r\n   * The identity matrix (equivalent to new Matrix(1, 0, 0, 1, 0, 0)).\r\n   * @type {Matrix}\r\n   * @memberof! jsPDF#\r\n   * @name identityMatrix\r\n   */\r\n  var identityMatrix = new Matrix(1, 0, 0, 1, 0, 0);\r\n  API.unitMatrix = API.identityMatrix = identityMatrix;\r\n\r\n  /**\r\n   * Adds a new pattern for later use.\r\n   * @param {String} key The key by it can be referenced later. The keys must be unique!\r\n   * @param {API.Pattern} pattern The pattern\r\n   */\r\n  var addPattern = function(key, pattern) {\r\n    // only add it if it is not already present (the keys provided by the user must be unique!)\r\n    if (patternMap[key]) return;\r\n\r\n    var prefix = pattern instanceof ShadingPattern ? \"Sh\" : \"P\";\r\n    var patternKey = prefix + (Object.keys(patterns).length + 1).toString(10);\r\n    pattern.id = patternKey;\r\n\r\n    patternMap[key] = patternKey;\r\n    patterns[patternKey] = pattern;\r\n\r\n    events.publish(\"addPattern\", pattern);\r\n  };\r\n\r\n  /**\r\n   * A pattern describing a shading pattern.\r\n   *\r\n   * Only available in \"advanced\" API mode.\r\n   *\r\n   * @param {String} type One of \"axial\" or \"radial\"\r\n   * @param {Array<Number>} coords Either [x1, y1, x2, y2] for \"axial\" type describing the two interpolation points\r\n   * or [x1, y1, r, x2, y2, r2] for \"radial\" describing inner and the outer circle.\r\n   * @param {Array<Object>} colors An array of objects with the fields \"offset\" and \"color\". \"offset\" describes\r\n   * the offset in parameter space [0, 1]. \"color\" is an array of length 3 describing RGB values in [0, 255].\r\n   * @param {GState=} gState An additional graphics state that gets applied to the pattern (optional).\r\n   * @param {Matrix=} matrix A matrix that describes the transformation between the pattern coordinate system\r\n   * and the use coordinate system (optional).\r\n   * @constructor\r\n   * @extends API.Pattern\r\n   */\r\n  API.ShadingPattern = ShadingPattern;\r\n\r\n  /**\r\n   * A PDF Tiling pattern.\r\n   *\r\n   * Only available in \"advanced\" API mode.\r\n   *\r\n   * @param {Array.<Number>} boundingBox The bounding box at which one pattern cell gets clipped.\r\n   * @param {Number} xStep Horizontal spacing between pattern cells.\r\n   * @param {Number} yStep Vertical spacing between pattern cells.\r\n   * @param {API.GState=} gState An additional graphics state that gets applied to the pattern (optional).\r\n   * @param {Matrix=} matrix A matrix that describes the transformation between the pattern coordinate system\r\n   * and the use coordinate system (optional).\r\n   * @constructor\r\n   * @extends API.Pattern\r\n   */\r\n  API.TilingPattern = TilingPattern;\r\n\r\n  /**\r\n   * Adds a new {@link API.ShadingPattern} for later use. Only available in \"advanced\" API mode.\r\n   * @param {String} key\r\n   * @param {Pattern} pattern\r\n   * @function\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name addPattern\r\n   */\r\n  API.addShadingPattern = function(key, pattern) {\r\n    advancedApiModeTrap(\"addShadingPattern()\");\r\n\r\n    addPattern(key, pattern);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Begins a new tiling pattern. All subsequent render calls are drawn to this pattern until {@link API.endTilingPattern}\r\n   * gets called. Only available in \"advanced\" API mode.\r\n   * @param {API.Pattern} pattern\r\n   * @memberof jsPDF#\r\n   * @name beginTilingPattern\r\n   */\r\n  API.beginTilingPattern = function(pattern) {\r\n    advancedApiModeTrap(\"beginTilingPattern()\");\r\n\r\n    beginNewRenderTarget(\r\n      pattern.boundingBox[0],\r\n      pattern.boundingBox[1],\r\n      pattern.boundingBox[2] - pattern.boundingBox[0],\r\n      pattern.boundingBox[3] - pattern.boundingBox[1],\r\n      pattern.matrix\r\n    );\r\n  };\r\n\r\n  /**\r\n   * Ends a tiling pattern and sets the render target to the one active before {@link API.beginTilingPattern} has been called.\r\n   *\r\n   * Only available in \"advanced\" API mode.\r\n   *\r\n   * @param {string} key A unique key that is used to reference this pattern at later use.\r\n   * @param {API.Pattern} pattern The pattern to end.\r\n   * @memberof jsPDF#\r\n   * @name endTilingPattern\r\n   */\r\n  API.endTilingPattern = function(key, pattern) {\r\n    advancedApiModeTrap(\"endTilingPattern()\");\r\n\r\n    // retrieve the stream\r\n    pattern.stream = pages[currentPage].join(\"\\n\");\r\n\r\n    addPattern(key, pattern);\r\n\r\n    events.publish(\"endTilingPattern\", pattern);\r\n\r\n    // restore state from stack\r\n    renderTargetStack.pop().restore();\r\n  };\r\n\r\n  var newObject = (API.__private__.newObject = function() {\r\n    var oid = newObjectDeferred();\r\n    newObjectDeferredBegin(oid, true);\r\n    return oid;\r\n  });\r\n\r\n  // Does not output the object.  The caller must call newObjectDeferredBegin(oid) before outputing any data\r\n  var newObjectDeferred = (API.__private__.newObjectDeferred = function() {\r\n    objectNumber++;\r\n    offsets[objectNumber] = function() {\r\n      return contentLength;\r\n    };\r\n    return objectNumber;\r\n  });\r\n\r\n  var newObjectDeferredBegin = function(oid, doOutput) {\r\n    doOutput = typeof doOutput === \"boolean\" ? doOutput : false;\r\n    offsets[oid] = contentLength;\r\n    if (doOutput) {\r\n      out(oid + \" 0 obj\");\r\n    }\r\n    return oid;\r\n  };\r\n  // Does not output the object until after the pages have been output.\r\n  // Returns an object containing the objectId and content.\r\n  // All pages have been added so the object ID can be estimated to start right after.\r\n  // This does not modify the current objectNumber;  It must be updated after the newObjects are output.\r\n  var newAdditionalObject = (API.__private__.newAdditionalObject = function() {\r\n    var objId = newObjectDeferred();\r\n    var obj = {\r\n      objId: objId,\r\n      content: \"\"\r\n    };\r\n    additionalObjects.push(obj);\r\n    return obj;\r\n  });\r\n\r\n  var rootDictionaryObjId = newObjectDeferred();\r\n  var resourceDictionaryObjId = newObjectDeferred();\r\n\r\n  /////////////////////\r\n  // Private functions\r\n  /////////////////////\r\n\r\n  var decodeColorString = (API.__private__.decodeColorString = function(color) {\r\n    var colorEncoded = color.split(\" \");\r\n    if (\r\n      colorEncoded.length === 2 &&\r\n      (colorEncoded[1] === \"g\" || colorEncoded[1] === \"G\")\r\n    ) {\r\n      // convert grayscale value to rgb so that it can be converted to hex for consistency\r\n      var floatVal = parseFloat(colorEncoded[0]);\r\n      colorEncoded = [floatVal, floatVal, floatVal, \"r\"];\r\n    } else if (\r\n      colorEncoded.length === 5 &&\r\n      (colorEncoded[4] === \"k\" || colorEncoded[4] === \"K\")\r\n    ) {\r\n      // convert CMYK values to rbg so that it can be converted to hex for consistency\r\n      var red = (1.0 - colorEncoded[0]) * (1.0 - colorEncoded[3]);\r\n      var green = (1.0 - colorEncoded[1]) * (1.0 - colorEncoded[3]);\r\n      var blue = (1.0 - colorEncoded[2]) * (1.0 - colorEncoded[3]);\r\n\r\n      colorEncoded = [red, green, blue, \"r\"];\r\n    }\r\n    var colorAsRGB = \"#\";\r\n    for (var i = 0; i < 3; i++) {\r\n      colorAsRGB += (\r\n        \"0\" + Math.floor(parseFloat(colorEncoded[i]) * 255).toString(16)\r\n      ).slice(-2);\r\n    }\r\n    return colorAsRGB;\r\n  });\r\n\r\n  var encodeColorString = (API.__private__.encodeColorString = function(\r\n    options\r\n  ) {\r\n    var color;\r\n\r\n    if (typeof options === \"string\") {\r\n      options = {\r\n        ch1: options\r\n      };\r\n    }\r\n    var ch1 = options.ch1;\r\n    var ch2 = options.ch2;\r\n    var ch3 = options.ch3;\r\n    var ch4 = options.ch4;\r\n    var letterArray =\r\n      options.pdfColorType === \"draw\" ? [\"G\", \"RG\", \"K\"] : [\"g\", \"rg\", \"k\"];\r\n\r\n    if (typeof ch1 === \"string\" && ch1.charAt(0) !== \"#\") {\r\n      var rgbColor = new RGBColor(ch1);\r\n      if (rgbColor.ok) {\r\n        ch1 = rgbColor.toHex();\r\n      } else if (!/^\\d*\\.?\\d*$/.test(ch1)) {\r\n        throw new Error(\r\n          'Invalid color \"' + ch1 + '\" passed to jsPDF.encodeColorString.'\r\n        );\r\n      }\r\n    }\r\n    //convert short rgb to long form\r\n    if (typeof ch1 === \"string\" && /^#[0-9A-Fa-f]{3}$/.test(ch1)) {\r\n      ch1 = \"#\" + ch1[1] + ch1[1] + ch1[2] + ch1[2] + ch1[3] + ch1[3];\r\n    }\r\n\r\n    if (typeof ch1 === \"string\" && /^#[0-9A-Fa-f]{6}$/.test(ch1)) {\r\n      var hex = parseInt(ch1.substr(1), 16);\r\n      ch1 = (hex >> 16) & 255;\r\n      ch2 = (hex >> 8) & 255;\r\n      ch3 = hex & 255;\r\n    }\r\n\r\n    if (\r\n      typeof ch2 === \"undefined\" ||\r\n      (typeof ch4 === \"undefined\" && ch1 === ch2 && ch2 === ch3)\r\n    ) {\r\n      // Gray color space.\r\n      if (typeof ch1 === \"string\") {\r\n        color = ch1 + \" \" + letterArray[0];\r\n      } else {\r\n        switch (options.precision) {\r\n          case 2:\r\n            color = f2(ch1 / 255) + \" \" + letterArray[0];\r\n            break;\r\n          case 3:\r\n          default:\r\n            color = f3(ch1 / 255) + \" \" + letterArray[0];\r\n        }\r\n      }\r\n    } else if (typeof ch4 === \"undefined\" || typeof ch4 === \"object\") {\r\n      // assume RGBA\r\n      if (ch4 && !isNaN(ch4.a)) {\r\n        //TODO Implement transparency.\r\n        //WORKAROUND use white for now, if transparent, otherwise handle as rgb\r\n        if (ch4.a === 0) {\r\n          color = [\"1.\", \"1.\", \"1.\", letterArray[1]].join(\" \");\r\n          return color;\r\n        }\r\n      }\r\n      // assume RGB\r\n      if (typeof ch1 === \"string\") {\r\n        color = [ch1, ch2, ch3, letterArray[1]].join(\" \");\r\n      } else {\r\n        switch (options.precision) {\r\n          case 2:\r\n            color = [\r\n              f2(ch1 / 255),\r\n              f2(ch2 / 255),\r\n              f2(ch3 / 255),\r\n              letterArray[1]\r\n            ].join(\" \");\r\n            break;\r\n          default:\r\n          case 3:\r\n            color = [\r\n              f3(ch1 / 255),\r\n              f3(ch2 / 255),\r\n              f3(ch3 / 255),\r\n              letterArray[1]\r\n            ].join(\" \");\r\n        }\r\n      }\r\n    } else {\r\n      // assume CMYK\r\n      if (typeof ch1 === \"string\") {\r\n        color = [ch1, ch2, ch3, ch4, letterArray[2]].join(\" \");\r\n      } else {\r\n        switch (options.precision) {\r\n          case 2:\r\n            color = [f2(ch1), f2(ch2), f2(ch3), f2(ch4), letterArray[2]].join(\r\n              \" \"\r\n            );\r\n            break;\r\n          case 3:\r\n          default:\r\n            color = [f3(ch1), f3(ch2), f3(ch3), f3(ch4), letterArray[2]].join(\r\n              \" \"\r\n            );\r\n        }\r\n      }\r\n    }\r\n    return color;\r\n  });\r\n\r\n  var getFilters = (API.__private__.getFilters = function() {\r\n    return filters;\r\n  });\r\n\r\n  var putStream = (API.__private__.putStream = function(options) {\r\n    options = options || {};\r\n    var data = options.data || \"\";\r\n    var filters = options.filters || getFilters();\r\n    var alreadyAppliedFilters = options.alreadyAppliedFilters || [];\r\n    var addLength1 = options.addLength1 || false;\r\n    var valueOfLength1 = data.length;\r\n    var objectId = options.objectId;\r\n    var encryptor = function(data) {\r\n      return data;\r\n    };\r\n    if (encryptionOptions !== null && typeof objectId == \"undefined\") {\r\n      throw new Error(\r\n        \"ObjectId must be passed to putStream for file encryption\"\r\n      );\r\n    }\r\n    if (encryptionOptions !== null) {\r\n      encryptor = encryption.encryptor(objectId, 0);\r\n    }\r\n\r\n    var processedData = {};\r\n    if (filters === true) {\r\n      filters = [\"FlateEncode\"];\r\n    }\r\n    var keyValues = options.additionalKeyValues || [];\r\n    if (typeof jsPDF.API.processDataByFilters !== \"undefined\") {\r\n      processedData = jsPDF.API.processDataByFilters(data, filters);\r\n    } else {\r\n      processedData = { data: data, reverseChain: [] };\r\n    }\r\n    var filterAsString =\r\n      processedData.reverseChain +\r\n      (Array.isArray(alreadyAppliedFilters)\r\n        ? alreadyAppliedFilters.join(\" \")\r\n        : alreadyAppliedFilters.toString());\r\n\r\n    if (processedData.data.length !== 0) {\r\n      keyValues.push({\r\n        key: \"Length\",\r\n        value: processedData.data.length\r\n      });\r\n      if (addLength1 === true) {\r\n        keyValues.push({\r\n          key: \"Length1\",\r\n          value: valueOfLength1\r\n        });\r\n      }\r\n    }\r\n\r\n    if (filterAsString.length != 0) {\r\n      if (filterAsString.split(\"/\").length - 1 === 1) {\r\n        keyValues.push({\r\n          key: \"Filter\",\r\n          value: filterAsString\r\n        });\r\n      } else {\r\n        keyValues.push({\r\n          key: \"Filter\",\r\n          value: \"[\" + filterAsString + \"]\"\r\n        });\r\n\r\n        for (var j = 0; j < keyValues.length; j += 1) {\r\n          if (keyValues[j].key === \"DecodeParms\") {\r\n            var decodeParmsArray = [];\r\n\r\n            for (\r\n              var i = 0;\r\n              i < processedData.reverseChain.split(\"/\").length - 1;\r\n              i += 1\r\n            ) {\r\n              decodeParmsArray.push(\"null\");\r\n            }\r\n\r\n            decodeParmsArray.push(keyValues[j].value);\r\n            keyValues[j].value = \"[\" + decodeParmsArray.join(\" \") + \"]\";\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    out(\"<<\");\r\n    for (var k = 0; k < keyValues.length; k++) {\r\n      out(\"/\" + keyValues[k].key + \" \" + keyValues[k].value);\r\n    }\r\n    out(\">>\");\r\n    if (processedData.data.length !== 0) {\r\n      out(\"stream\");\r\n      out(encryptor(processedData.data));\r\n      out(\"endstream\");\r\n    }\r\n  });\r\n\r\n  var putPage = (API.__private__.putPage = function(page) {\r\n    var pageNumber = page.number;\r\n    var data = page.data;\r\n    var pageObjectNumber = page.objId;\r\n    var pageContentsObjId = page.contentsObjId;\r\n\r\n    newObjectDeferredBegin(pageObjectNumber, true);\r\n    out(\"<</Type /Page\");\r\n    out(\"/Parent \" + page.rootDictionaryObjId + \" 0 R\");\r\n    out(\"/Resources \" + page.resourceDictionaryObjId + \" 0 R\");\r\n    out(\r\n      \"/MediaBox [\" +\r\n        parseFloat(hpf(page.mediaBox.bottomLeftX)) +\r\n        \" \" +\r\n        parseFloat(hpf(page.mediaBox.bottomLeftY)) +\r\n        \" \" +\r\n        hpf(page.mediaBox.topRightX) +\r\n        \" \" +\r\n        hpf(page.mediaBox.topRightY) +\r\n        \"]\"\r\n    );\r\n    if (page.cropBox !== null) {\r\n      out(\r\n        \"/CropBox [\" +\r\n          hpf(page.cropBox.bottomLeftX) +\r\n          \" \" +\r\n          hpf(page.cropBox.bottomLeftY) +\r\n          \" \" +\r\n          hpf(page.cropBox.topRightX) +\r\n          \" \" +\r\n          hpf(page.cropBox.topRightY) +\r\n          \"]\"\r\n      );\r\n    }\r\n\r\n    if (page.bleedBox !== null) {\r\n      out(\r\n        \"/BleedBox [\" +\r\n          hpf(page.bleedBox.bottomLeftX) +\r\n          \" \" +\r\n          hpf(page.bleedBox.bottomLeftY) +\r\n          \" \" +\r\n          hpf(page.bleedBox.topRightX) +\r\n          \" \" +\r\n          hpf(page.bleedBox.topRightY) +\r\n          \"]\"\r\n      );\r\n    }\r\n\r\n    if (page.trimBox !== null) {\r\n      out(\r\n        \"/TrimBox [\" +\r\n          hpf(page.trimBox.bottomLeftX) +\r\n          \" \" +\r\n          hpf(page.trimBox.bottomLeftY) +\r\n          \" \" +\r\n          hpf(page.trimBox.topRightX) +\r\n          \" \" +\r\n          hpf(page.trimBox.topRightY) +\r\n          \"]\"\r\n      );\r\n    }\r\n\r\n    if (page.artBox !== null) {\r\n      out(\r\n        \"/ArtBox [\" +\r\n          hpf(page.artBox.bottomLeftX) +\r\n          \" \" +\r\n          hpf(page.artBox.bottomLeftY) +\r\n          \" \" +\r\n          hpf(page.artBox.topRightX) +\r\n          \" \" +\r\n          hpf(page.artBox.topRightY) +\r\n          \"]\"\r\n      );\r\n    }\r\n\r\n    if (typeof page.userUnit === \"number\" && page.userUnit !== 1.0) {\r\n      out(\"/UserUnit \" + page.userUnit);\r\n    }\r\n\r\n    events.publish(\"putPage\", {\r\n      objId: pageObjectNumber,\r\n      pageContext: pagesContext[pageNumber],\r\n      pageNumber: pageNumber,\r\n      page: data\r\n    });\r\n    out(\"/Contents \" + pageContentsObjId + \" 0 R\");\r\n    out(\">>\");\r\n    out(\"endobj\");\r\n    // Page content\r\n    var pageContent = data.join(\"\\n\");\r\n\r\n    if (apiMode === ApiMode.ADVANCED) {\r\n      // if the user forgot to switch back to COMPAT mode, we must balance the graphics stack again\r\n      pageContent += \"\\nQ\";\r\n    }\r\n\r\n    newObjectDeferredBegin(pageContentsObjId, true);\r\n    putStream({\r\n      data: pageContent,\r\n      filters: getFilters(),\r\n      objectId: pageContentsObjId\r\n    });\r\n    out(\"endobj\");\r\n    return pageObjectNumber;\r\n  });\r\n\r\n  var putPages = (API.__private__.putPages = function() {\r\n    var n,\r\n      i,\r\n      pageObjectNumbers = [];\r\n\r\n    for (n = 1; n <= page; n++) {\r\n      pagesContext[n].objId = newObjectDeferred();\r\n      pagesContext[n].contentsObjId = newObjectDeferred();\r\n    }\r\n\r\n    for (n = 1; n <= page; n++) {\r\n      pageObjectNumbers.push(\r\n        putPage({\r\n          number: n,\r\n          data: pages[n],\r\n          objId: pagesContext[n].objId,\r\n          contentsObjId: pagesContext[n].contentsObjId,\r\n          mediaBox: pagesContext[n].mediaBox,\r\n          cropBox: pagesContext[n].cropBox,\r\n          bleedBox: pagesContext[n].bleedBox,\r\n          trimBox: pagesContext[n].trimBox,\r\n          artBox: pagesContext[n].artBox,\r\n          userUnit: pagesContext[n].userUnit,\r\n          rootDictionaryObjId: rootDictionaryObjId,\r\n          resourceDictionaryObjId: resourceDictionaryObjId\r\n        })\r\n      );\r\n    }\r\n    newObjectDeferredBegin(rootDictionaryObjId, true);\r\n    out(\"<</Type /Pages\");\r\n    var kids = \"/Kids [\";\r\n    for (i = 0; i < page; i++) {\r\n      kids += pageObjectNumbers[i] + \" 0 R \";\r\n    }\r\n    out(kids + \"]\");\r\n    out(\"/Count \" + page);\r\n    out(\">>\");\r\n    out(\"endobj\");\r\n    events.publish(\"postPutPages\");\r\n  });\r\n\r\n  var putFont = function(font) {\r\n    events.publish(\"putFont\", {\r\n      font: font,\r\n      out: out,\r\n      newObject: newObject,\r\n      putStream: putStream\r\n    });\r\n\r\n    if (font.isAlreadyPutted !== true) {\r\n      font.objectNumber = newObject();\r\n      out(\"<<\");\r\n      out(\"/Type /Font\");\r\n      out(\"/BaseFont /\" + toPDFName(font.postScriptName));\r\n      out(\"/Subtype /Type1\");\r\n      if (typeof font.encoding === \"string\") {\r\n        out(\"/Encoding /\" + font.encoding);\r\n      }\r\n      out(\"/FirstChar 32\");\r\n      out(\"/LastChar 255\");\r\n      out(\">>\");\r\n      out(\"endobj\");\r\n    }\r\n  };\r\n\r\n  var putFonts = function() {\r\n    for (var fontKey in fonts) {\r\n      if (fonts.hasOwnProperty(fontKey)) {\r\n        if (\r\n          putOnlyUsedFonts === false ||\r\n          (putOnlyUsedFonts === true && usedFonts.hasOwnProperty(fontKey))\r\n        ) {\r\n          putFont(fonts[fontKey]);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  var putXObject = function(xObject) {\r\n    xObject.objectNumber = newObject();\r\n\r\n    var options = [];\r\n    options.push({ key: \"Type\", value: \"/XObject\" });\r\n    options.push({ key: \"Subtype\", value: \"/Form\" });\r\n    options.push({\r\n      key: \"BBox\",\r\n      value:\r\n        \"[\" +\r\n        [\r\n          hpf(xObject.x),\r\n          hpf(xObject.y),\r\n          hpf(xObject.x + xObject.width),\r\n          hpf(xObject.y + xObject.height)\r\n        ].join(\" \") +\r\n        \"]\"\r\n    });\r\n    options.push({\r\n      key: \"Matrix\",\r\n      value: \"[\" + xObject.matrix.toString() + \"]\"\r\n    });\r\n    // TODO: /Resources\r\n\r\n    var stream = xObject.pages[1].join(\"\\n\");\r\n    putStream({\r\n      data: stream,\r\n      additionalKeyValues: options,\r\n      objectId: xObject.objectNumber\r\n    });\r\n    out(\"endobj\");\r\n  };\r\n\r\n  var putXObjects = function() {\r\n    for (var xObjectKey in renderTargets) {\r\n      if (renderTargets.hasOwnProperty(xObjectKey)) {\r\n        putXObject(renderTargets[xObjectKey]);\r\n      }\r\n    }\r\n  };\r\n\r\n  var interpolateAndEncodeRGBStream = function(colors, numberSamples) {\r\n    var tValues = [];\r\n    var t;\r\n    var dT = 1.0 / (numberSamples - 1);\r\n    for (t = 0.0; t < 1.0; t += dT) {\r\n      tValues.push(t);\r\n    }\r\n    tValues.push(1.0);\r\n    // add first and last control point if not present\r\n    if (colors[0].offset != 0.0) {\r\n      var c0 = {\r\n        offset: 0.0,\r\n        color: colors[0].color\r\n      };\r\n      colors.unshift(c0);\r\n    }\r\n    if (colors[colors.length - 1].offset != 1.0) {\r\n      var c1 = {\r\n        offset: 1.0,\r\n        color: colors[colors.length - 1].color\r\n      };\r\n      colors.push(c1);\r\n    }\r\n    var out = \"\";\r\n    var index = 0;\r\n\r\n    for (var i = 0; i < tValues.length; i++) {\r\n      t = tValues[i];\r\n      while (t > colors[index + 1].offset) index++;\r\n      var a = colors[index].offset;\r\n      var b = colors[index + 1].offset;\r\n      var d = (t - a) / (b - a);\r\n\r\n      var aColor = colors[index].color;\r\n      var bColor = colors[index + 1].color;\r\n\r\n      out +=\r\n        padd2Hex(Math.round((1 - d) * aColor[0] + d * bColor[0]).toString(16)) +\r\n        padd2Hex(Math.round((1 - d) * aColor[1] + d * bColor[1]).toString(16)) +\r\n        padd2Hex(Math.round((1 - d) * aColor[2] + d * bColor[2]).toString(16));\r\n    }\r\n    return out.trim();\r\n  };\r\n\r\n  var putShadingPattern = function(pattern, numberSamples) {\r\n    /*\r\n       Axial patterns shade between the two points specified in coords, radial patterns between the inner\r\n       and outer circle.\r\n       The user can specify an array (colors) that maps t-Values in [0, 1] to RGB colors. These are now\r\n       interpolated to equidistant samples and written to pdf as a sample (type 0) function.\r\n       */\r\n    // The number of color samples that should be used to describe the shading.\r\n    // The higher, the more accurate the gradient will be.\r\n    numberSamples || (numberSamples = 21);\r\n    var funcObjectNumber = newObject();\r\n    var stream = interpolateAndEncodeRGBStream(pattern.colors, numberSamples);\r\n\r\n    var options = [];\r\n    options.push({ key: \"FunctionType\", value: \"0\" });\r\n    options.push({ key: \"Domain\", value: \"[0.0 1.0]\" });\r\n    options.push({ key: \"Size\", value: \"[\" + numberSamples + \"]\" });\r\n    options.push({ key: \"BitsPerSample\", value: \"8\" });\r\n    options.push({ key: \"Range\", value: \"[0.0 1.0 0.0 1.0 0.0 1.0]\" });\r\n    options.push({ key: \"Decode\", value: \"[0.0 1.0 0.0 1.0 0.0 1.0]\" });\r\n\r\n    putStream({\r\n      data: stream,\r\n      additionalKeyValues: options,\r\n      alreadyAppliedFilters: [\"/ASCIIHexDecode\"],\r\n      objectId: funcObjectNumber\r\n    });\r\n    out(\"endobj\");\r\n\r\n    pattern.objectNumber = newObject();\r\n    out(\"<< /ShadingType \" + pattern.type);\r\n    out(\"/ColorSpace /DeviceRGB\");\r\n    var coords =\r\n      \"/Coords [\" +\r\n      hpf(parseFloat(pattern.coords[0])) +\r\n      \" \" + // x1\r\n      hpf(parseFloat(pattern.coords[1])) +\r\n      \" \"; // y1\r\n    if (pattern.type === 2) {\r\n      // axial\r\n      coords +=\r\n        hpf(parseFloat(pattern.coords[2])) +\r\n        \" \" + // x2\r\n        hpf(parseFloat(pattern.coords[3])); // y2\r\n    } else {\r\n      // radial\r\n      coords +=\r\n        hpf(parseFloat(pattern.coords[2])) +\r\n        \" \" + // r1\r\n        hpf(parseFloat(pattern.coords[3])) +\r\n        \" \" + // x2\r\n        hpf(parseFloat(pattern.coords[4])) +\r\n        \" \" + // y2\r\n        hpf(parseFloat(pattern.coords[5])); // r2\r\n    }\r\n    coords += \"]\";\r\n    out(coords);\r\n\r\n    if (pattern.matrix) {\r\n      out(\"/Matrix [\" + pattern.matrix.toString() + \"]\");\r\n    }\r\n    out(\"/Function \" + funcObjectNumber + \" 0 R\");\r\n    out(\"/Extend [true true]\");\r\n    out(\">>\");\r\n    out(\"endobj\");\r\n  };\r\n\r\n  var putTilingPattern = function(pattern, deferredResourceDictionaryIds) {\r\n    var resourcesObjectId = newObjectDeferred();\r\n    var patternObjectId = newObject();\r\n\r\n    deferredResourceDictionaryIds.push({\r\n      resourcesOid: resourcesObjectId,\r\n      objectOid: patternObjectId\r\n    });\r\n\r\n    pattern.objectNumber = patternObjectId;\r\n    var options = [];\r\n    options.push({ key: \"Type\", value: \"/Pattern\" });\r\n    options.push({ key: \"PatternType\", value: \"1\" }); // tiling pattern\r\n    options.push({ key: \"PaintType\", value: \"1\" }); // colored tiling pattern\r\n    options.push({ key: \"TilingType\", value: \"1\" }); // constant spacing\r\n    options.push({\r\n      key: \"BBox\",\r\n      value: \"[\" + pattern.boundingBox.map(hpf).join(\" \") + \"]\"\r\n    });\r\n    options.push({ key: \"XStep\", value: hpf(pattern.xStep) });\r\n    options.push({ key: \"YStep\", value: hpf(pattern.yStep) });\r\n    options.push({ key: \"Resources\", value: resourcesObjectId + \" 0 R\" });\r\n    if (pattern.matrix) {\r\n      options.push({\r\n        key: \"Matrix\",\r\n        value: \"[\" + pattern.matrix.toString() + \"]\"\r\n      });\r\n    }\r\n\r\n    putStream({\r\n      data: pattern.stream,\r\n      additionalKeyValues: options,\r\n      objectId: pattern.objectNumber\r\n    });\r\n    out(\"endobj\");\r\n  };\r\n\r\n  var putPatterns = function(deferredResourceDictionaryIds) {\r\n    var patternKey;\r\n    for (patternKey in patterns) {\r\n      if (patterns.hasOwnProperty(patternKey)) {\r\n        if (patterns[patternKey] instanceof ShadingPattern) {\r\n          putShadingPattern(patterns[patternKey]);\r\n        } else if (patterns[patternKey] instanceof TilingPattern) {\r\n          putTilingPattern(patterns[patternKey], deferredResourceDictionaryIds);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  var putGState = function(gState) {\r\n    gState.objectNumber = newObject();\r\n    out(\"<<\");\r\n    for (var p in gState) {\r\n      switch (p) {\r\n        case \"opacity\":\r\n          out(\"/ca \" + f2(gState[p]));\r\n          break;\r\n        case \"stroke-opacity\":\r\n          out(\"/CA \" + f2(gState[p]));\r\n          break;\r\n      }\r\n    }\r\n    out(\">>\");\r\n    out(\"endobj\");\r\n  };\r\n\r\n  var putGStates = function() {\r\n    var gStateKey;\r\n    for (gStateKey in gStates) {\r\n      if (gStates.hasOwnProperty(gStateKey)) {\r\n        putGState(gStates[gStateKey]);\r\n      }\r\n    }\r\n  };\r\n\r\n  var putXobjectDict = function() {\r\n    out(\"/XObject <<\");\r\n    for (var xObjectKey in renderTargets) {\r\n      if (\r\n        renderTargets.hasOwnProperty(xObjectKey) &&\r\n        renderTargets[xObjectKey].objectNumber >= 0\r\n      ) {\r\n        out(\r\n          \"/\" +\r\n            xObjectKey +\r\n            \" \" +\r\n            renderTargets[xObjectKey].objectNumber +\r\n            \" 0 R\"\r\n        );\r\n      }\r\n    }\r\n\r\n    // Loop through images, or other data objects\r\n    events.publish(\"putXobjectDict\");\r\n    out(\">>\");\r\n  };\r\n\r\n  var putEncryptionDict = function() {\r\n    encryption.oid = newObject();\r\n    out(\"<<\");\r\n    out(\"/Filter /Standard\");\r\n    out(\"/V \" + encryption.v);\r\n    out(\"/R \" + encryption.r);\r\n    out(\"/U <\" + encryption.toHexString(encryption.U) + \">\");\r\n    out(\"/O <\" + encryption.toHexString(encryption.O) + \">\");\r\n    out(\"/P \" + encryption.P);\r\n    out(\">>\");\r\n    out(\"endobj\");\r\n  };\r\n\r\n  var putFontDict = function() {\r\n    out(\"/Font <<\");\r\n\r\n    for (var fontKey in fonts) {\r\n      if (fonts.hasOwnProperty(fontKey)) {\r\n        if (\r\n          putOnlyUsedFonts === false ||\r\n          (putOnlyUsedFonts === true && usedFonts.hasOwnProperty(fontKey))\r\n        ) {\r\n          out(\"/\" + fontKey + \" \" + fonts[fontKey].objectNumber + \" 0 R\");\r\n        }\r\n      }\r\n    }\r\n    out(\">>\");\r\n  };\r\n\r\n  var putShadingPatternDict = function() {\r\n    if (Object.keys(patterns).length > 0) {\r\n      out(\"/Shading <<\");\r\n      for (var patternKey in patterns) {\r\n        if (\r\n          patterns.hasOwnProperty(patternKey) &&\r\n          patterns[patternKey] instanceof ShadingPattern &&\r\n          patterns[patternKey].objectNumber >= 0\r\n        ) {\r\n          out(\r\n            \"/\" + patternKey + \" \" + patterns[patternKey].objectNumber + \" 0 R\"\r\n          );\r\n        }\r\n      }\r\n\r\n      events.publish(\"putShadingPatternDict\");\r\n      out(\">>\");\r\n    }\r\n  };\r\n\r\n  var putTilingPatternDict = function(objectOid) {\r\n    if (Object.keys(patterns).length > 0) {\r\n      out(\"/Pattern <<\");\r\n      for (var patternKey in patterns) {\r\n        if (\r\n          patterns.hasOwnProperty(patternKey) &&\r\n          patterns[patternKey] instanceof API.TilingPattern &&\r\n          patterns[patternKey].objectNumber >= 0 &&\r\n          patterns[patternKey].objectNumber < objectOid // prevent cyclic dependencies\r\n        ) {\r\n          out(\r\n            \"/\" + patternKey + \" \" + patterns[patternKey].objectNumber + \" 0 R\"\r\n          );\r\n        }\r\n      }\r\n      events.publish(\"putTilingPatternDict\");\r\n      out(\">>\");\r\n    }\r\n  };\r\n\r\n  var putGStatesDict = function() {\r\n    if (Object.keys(gStates).length > 0) {\r\n      var gStateKey;\r\n      out(\"/ExtGState <<\");\r\n      for (gStateKey in gStates) {\r\n        if (\r\n          gStates.hasOwnProperty(gStateKey) &&\r\n          gStates[gStateKey].objectNumber >= 0\r\n        ) {\r\n          out(\"/\" + gStateKey + \" \" + gStates[gStateKey].objectNumber + \" 0 R\");\r\n        }\r\n      }\r\n\r\n      events.publish(\"putGStateDict\");\r\n      out(\">>\");\r\n    }\r\n  };\r\n\r\n  var putResourceDictionary = function(objectIds) {\r\n    newObjectDeferredBegin(objectIds.resourcesOid, true);\r\n    out(\"<<\");\r\n    out(\"/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]\");\r\n    putFontDict();\r\n    putShadingPatternDict();\r\n    putTilingPatternDict(objectIds.objectOid);\r\n    putGStatesDict();\r\n    putXobjectDict();\r\n    out(\">>\");\r\n    out(\"endobj\");\r\n  };\r\n\r\n  var putResources = function() {\r\n    // FormObjects, Patterns etc. might use other FormObjects/Patterns/Images\r\n    // which means their resource dictionaries must contain the already resolved\r\n    // object ids. For this reason we defer the serialization of the resource\r\n    // dicts until all objects have been serialized and have object ids.\r\n    //\r\n    // In order to prevent cyclic dependencies (which Adobe Reader doesn't like),\r\n    // we only put all oids that are smaller than the oid of the object the\r\n    // resource dict belongs to. This is correct behavior, since the streams\r\n    // may only use other objects that have already been defined and thus appear\r\n    // earlier in their respective collection.\r\n    // Currently, this only affects tiling patterns, but a (more) correct\r\n    // implementation of FormObjects would also define their own resource dicts.\r\n    var deferredResourceDictionaryIds = [];\r\n\r\n    putFonts();\r\n    putGStates();\r\n    putXObjects();\r\n    putPatterns(deferredResourceDictionaryIds);\r\n\r\n    events.publish(\"putResources\");\r\n    deferredResourceDictionaryIds.forEach(putResourceDictionary);\r\n    putResourceDictionary({\r\n      resourcesOid: resourceDictionaryObjId,\r\n      objectOid: Number.MAX_SAFE_INTEGER // output all objects\r\n    });\r\n    events.publish(\"postPutResources\");\r\n  };\r\n\r\n  var putAdditionalObjects = function() {\r\n    events.publish(\"putAdditionalObjects\");\r\n    for (var i = 0; i < additionalObjects.length; i++) {\r\n      var obj = additionalObjects[i];\r\n      newObjectDeferredBegin(obj.objId, true);\r\n      out(obj.content);\r\n      out(\"endobj\");\r\n    }\r\n    events.publish(\"postPutAdditionalObjects\");\r\n  };\r\n\r\n  var addFontToFontDictionary = function(font) {\r\n    fontmap[font.fontName] = fontmap[font.fontName] || {};\r\n    fontmap[font.fontName][font.fontStyle] = font.id;\r\n  };\r\n\r\n  var addFont = function(\r\n    postScriptName,\r\n    fontName,\r\n    fontStyle,\r\n    encoding,\r\n    isStandardFont\r\n  ) {\r\n    var font = {\r\n      id: \"F\" + (Object.keys(fonts).length + 1).toString(10),\r\n      postScriptName: postScriptName,\r\n      fontName: fontName,\r\n      fontStyle: fontStyle,\r\n      encoding: encoding,\r\n      isStandardFont: isStandardFont || false,\r\n      metadata: {}\r\n    };\r\n\r\n    events.publish(\"addFont\", {\r\n      font: font,\r\n      instance: this\r\n    });\r\n\r\n    fonts[font.id] = font;\r\n    addFontToFontDictionary(font);\r\n    return font.id;\r\n  };\r\n\r\n  var addFonts = function(arrayOfFonts) {\r\n    for (var i = 0, l = standardFonts.length; i < l; i++) {\r\n      var fontKey = addFont.call(\r\n        this,\r\n        arrayOfFonts[i][0],\r\n        arrayOfFonts[i][1],\r\n        arrayOfFonts[i][2],\r\n        standardFonts[i][3],\r\n        true\r\n      );\r\n\r\n      if (putOnlyUsedFonts === false) {\r\n        usedFonts[fontKey] = true;\r\n      }\r\n      // adding aliases for standard fonts, this time matching the capitalization\r\n      var parts = arrayOfFonts[i][0].split(\"-\");\r\n      addFontToFontDictionary({\r\n        id: fontKey,\r\n        fontName: parts[0],\r\n        fontStyle: parts[1] || \"\"\r\n      });\r\n    }\r\n    events.publish(\"addFonts\", {\r\n      fonts: fonts,\r\n      dictionary: fontmap\r\n    });\r\n  };\r\n\r\n  var SAFE = function __safeCall(fn) {\r\n    fn.foo = function __safeCallWrapper() {\r\n      try {\r\n        return fn.apply(this, arguments);\r\n      } catch (e) {\r\n        var stack = e.stack || \"\";\r\n        if (~stack.indexOf(\" at \")) stack = stack.split(\" at \")[1];\r\n        var m =\r\n          \"Error in function \" +\r\n          stack.split(\"\\n\")[0].split(\"<\")[0] +\r\n          \": \" +\r\n          e.message;\r\n        if (globalObject.console) {\r\n          globalObject.console.error(m, e);\r\n          if (globalObject.alert) alert(m);\r\n        } else {\r\n          throw new Error(m);\r\n        }\r\n      }\r\n    };\r\n    fn.foo.bar = fn;\r\n    return fn.foo;\r\n  };\r\n\r\n  var to8bitStream = function(text, flags) {\r\n    /**\r\n     * PDF 1.3 spec:\r\n     * \"For text strings encoded in Unicode, the first two bytes must be 254 followed by\r\n     * 255, representing the Unicode byte order marker, U+FEFF. (This sequence conflicts\r\n     * with the PDFDocEncoding character sequence thorn ydieresis, which is unlikely\r\n     * to be a meaningful beginning of a word or phrase.) The remainder of the\r\n     * string consists of Unicode character codes, according to the UTF-16 encoding\r\n     * specified in the Unicode standard, version 2.0. Commonly used Unicode values\r\n     * are represented as 2 bytes per character, with the high-order byte appearing first\r\n     * in the string.\"\r\n     *\r\n     * In other words, if there are chars in a string with char code above 255, we\r\n     * recode the string to UCS2 BE - string doubles in length and BOM is prepended.\r\n     *\r\n     * HOWEVER!\r\n     * Actual *content* (body) text (as opposed to strings used in document properties etc)\r\n     * does NOT expect BOM. There, it is treated as a literal GID (Glyph ID)\r\n     *\r\n     * Because of Adobe's focus on \"you subset your fonts!\" you are not supposed to have\r\n     * a font that maps directly Unicode (UCS2 / UTF16BE) code to font GID, but you could\r\n     * fudge it with \"Identity-H\" encoding and custom CIDtoGID map that mimics Unicode\r\n     * code page. There, however, all characters in the stream are treated as GIDs,\r\n     * including BOM, which is the reason we need to skip BOM in content text (i.e. that\r\n     * that is tied to a font).\r\n     *\r\n     * To signal this \"special\" PDFEscape / to8bitStream handling mode,\r\n     * API.text() function sets (unless you overwrite it with manual values\r\n     * given to API.text(.., flags) )\r\n     * flags.autoencode = true\r\n     * flags.noBOM = true\r\n     *\r\n     * ===================================================================================\r\n     * `flags` properties relied upon:\r\n     *   .sourceEncoding = string with encoding label.\r\n     *                     \"Unicode\" by default. = encoding of the incoming text.\r\n     *                     pass some non-existing encoding name\r\n     *                     (ex: 'Do not touch my strings! I know what I am doing.')\r\n     *                     to make encoding code skip the encoding step.\r\n     *   .outputEncoding = Either valid PDF encoding name\r\n     *                     (must be supported by jsPDF font metrics, otherwise no encoding)\r\n     *                     or a JS object, where key = sourceCharCode, value = outputCharCode\r\n     *                     missing keys will be treated as: sourceCharCode === outputCharCode\r\n     *   .noBOM\r\n     *       See comment higher above for explanation for why this is important\r\n     *   .autoencode\r\n     *       See comment higher above for explanation for why this is important\r\n     */\r\n\r\n    var i,\r\n      l,\r\n      sourceEncoding,\r\n      encodingBlock,\r\n      outputEncoding,\r\n      newtext,\r\n      isUnicode,\r\n      ch,\r\n      bch;\r\n\r\n    flags = flags || {};\r\n    sourceEncoding = flags.sourceEncoding || \"Unicode\";\r\n    outputEncoding = flags.outputEncoding;\r\n\r\n    // This 'encoding' section relies on font metrics format\r\n    // attached to font objects by, among others,\r\n    // \"Willow Systems' standard_font_metrics plugin\"\r\n    // see jspdf.plugin.standard_font_metrics.js for format\r\n    // of the font.metadata.encoding Object.\r\n    // It should be something like\r\n    //   .encoding = {'codePages':['WinANSI....'], 'WinANSI...':{code:code, ...}}\r\n    //   .widths = {0:width, code:width, ..., 'fof':divisor}\r\n    //   .kerning = {code:{previous_char_code:shift, ..., 'fof':-divisor},...}\r\n    if (\r\n      (flags.autoencode || outputEncoding) &&\r\n      fonts[activeFontKey].metadata &&\r\n      fonts[activeFontKey].metadata[sourceEncoding] &&\r\n      fonts[activeFontKey].metadata[sourceEncoding].encoding\r\n    ) {\r\n      encodingBlock = fonts[activeFontKey].metadata[sourceEncoding].encoding;\r\n\r\n      // each font has default encoding. Some have it clearly defined.\r\n      if (!outputEncoding && fonts[activeFontKey].encoding) {\r\n        outputEncoding = fonts[activeFontKey].encoding;\r\n      }\r\n\r\n      // Hmmm, the above did not work? Let's try again, in different place.\r\n      if (!outputEncoding && encodingBlock.codePages) {\r\n        outputEncoding = encodingBlock.codePages[0]; // let's say, first one is the default\r\n      }\r\n\r\n      if (typeof outputEncoding === \"string\") {\r\n        outputEncoding = encodingBlock[outputEncoding];\r\n      }\r\n      // we want output encoding to be a JS Object, where\r\n      // key = sourceEncoding's character code and\r\n      // value = outputEncoding's character code.\r\n      if (outputEncoding) {\r\n        isUnicode = false;\r\n        newtext = [];\r\n        for (i = 0, l = text.length; i < l; i++) {\r\n          ch = outputEncoding[text.charCodeAt(i)];\r\n          if (ch) {\r\n            newtext.push(String.fromCharCode(ch));\r\n          } else {\r\n            newtext.push(text[i]);\r\n          }\r\n\r\n          // since we are looping over chars anyway, might as well\r\n          // check for residual unicodeness\r\n          if (newtext[i].charCodeAt(0) >> 8) {\r\n            /* more than 255 */\r\n            isUnicode = true;\r\n          }\r\n        }\r\n        text = newtext.join(\"\");\r\n      }\r\n    }\r\n\r\n    i = text.length;\r\n    // isUnicode may be set to false above. Hence the triple-equal to undefined\r\n    while (isUnicode === undefined && i !== 0) {\r\n      if (text.charCodeAt(i - 1) >> 8) {\r\n        /* more than 255 */\r\n        isUnicode = true;\r\n      }\r\n      i--;\r\n    }\r\n    if (!isUnicode) {\r\n      return text;\r\n    }\r\n\r\n    newtext = flags.noBOM ? [] : [254, 255];\r\n    for (i = 0, l = text.length; i < l; i++) {\r\n      ch = text.charCodeAt(i);\r\n      bch = ch >> 8; // divide by 256\r\n      if (bch >> 8) {\r\n        /* something left after dividing by 256 second time */\r\n        throw new Error(\r\n          \"Character at position \" +\r\n            i +\r\n            \" of string '\" +\r\n            text +\r\n            \"' exceeds 16bits. Cannot be encoded into UCS-2 BE\"\r\n        );\r\n      }\r\n      newtext.push(bch);\r\n      newtext.push(ch - (bch << 8));\r\n    }\r\n    return String.fromCharCode.apply(undefined, newtext);\r\n  };\r\n\r\n  var pdfEscape = (API.__private__.pdfEscape = API.pdfEscape = function(\r\n    text,\r\n    flags\r\n  ) {\r\n    /**\r\n     * Replace '/', '(', and ')' with pdf-safe versions\r\n     *\r\n     * Doing to8bitStream does NOT make this PDF display unicode text. For that\r\n     * we also need to reference a unicode font and embed it - royal pain in the rear.\r\n     *\r\n     * There is still a benefit to to8bitStream - PDF simply cannot handle 16bit chars,\r\n     * which JavaScript Strings are happy to provide. So, while we still cannot display\r\n     * 2-byte characters property, at least CONDITIONALLY converting (entire string containing)\r\n     * 16bit chars to (USC-2-BE) 2-bytes per char + BOM streams we ensure that entire PDF\r\n     * is still parseable.\r\n     * This will allow immediate support for unicode in document properties strings.\r\n     */\r\n    return to8bitStream(text, flags)\r\n      .replace(/\\\\/g, \"\\\\\\\\\")\r\n      .replace(/\\(/g, \"\\\\(\")\r\n      .replace(/\\)/g, \"\\\\)\");\r\n  });\r\n\r\n  var beginPage = (API.__private__.beginPage = function(format) {\r\n    pages[++page] = [];\r\n    pagesContext[page] = {\r\n      objId: 0,\r\n      contentsObjId: 0,\r\n      userUnit: Number(userUnit),\r\n      artBox: null,\r\n      bleedBox: null,\r\n      cropBox: null,\r\n      trimBox: null,\r\n      mediaBox: {\r\n        bottomLeftX: 0,\r\n        bottomLeftY: 0,\r\n        topRightX: Number(format[0]),\r\n        topRightY: Number(format[1])\r\n      }\r\n    };\r\n    _setPage(page);\r\n    setOutputDestination(pages[currentPage]);\r\n  });\r\n\r\n  var _addPage = function(parmFormat, parmOrientation) {\r\n    var dimensions, width, height;\r\n\r\n    orientation = parmOrientation || orientation;\r\n\r\n    if (typeof parmFormat === \"string\") {\r\n      dimensions = getPageFormat(parmFormat.toLowerCase());\r\n      if (Array.isArray(dimensions)) {\r\n        width = dimensions[0];\r\n        height = dimensions[1];\r\n      }\r\n    }\r\n\r\n    if (Array.isArray(parmFormat)) {\r\n      width = parmFormat[0] * scaleFactor;\r\n      height = parmFormat[1] * scaleFactor;\r\n    }\r\n\r\n    if (isNaN(width)) {\r\n      width = format[0];\r\n      height = format[1];\r\n    }\r\n\r\n    if (width > 14400 || height > 14400) {\r\n      console.warn(\r\n        \"A page in a PDF can not be wider or taller than 14400 userUnit. jsPDF limits the width/height to 14400\"\r\n      );\r\n      width = Math.min(14400, width);\r\n      height = Math.min(14400, height);\r\n    }\r\n\r\n    format = [width, height];\r\n\r\n    switch (orientation.substr(0, 1)) {\r\n      case \"l\":\r\n        if (height > width) {\r\n          format = [height, width];\r\n        }\r\n        break;\r\n      case \"p\":\r\n        if (width > height) {\r\n          format = [height, width];\r\n        }\r\n        break;\r\n    }\r\n\r\n    beginPage(format);\r\n\r\n    // Set line width\r\n    setLineWidth(lineWidth);\r\n    // Set draw color\r\n    out(strokeColor);\r\n    // resurrecting non-default line caps, joins\r\n    if (lineCapID !== 0) {\r\n      out(lineCapID + \" J\");\r\n    }\r\n    if (lineJoinID !== 0) {\r\n      out(lineJoinID + \" j\");\r\n    }\r\n    events.publish(\"addPage\", {\r\n      pageNumber: page\r\n    });\r\n  };\r\n\r\n  var _deletePage = function(n) {\r\n    if (n > 0 && n <= page) {\r\n      pages.splice(n, 1);\r\n      pagesContext.splice(n, 1);\r\n      page--;\r\n      if (currentPage > page) {\r\n        currentPage = page;\r\n      }\r\n      this.setPage(currentPage);\r\n    }\r\n  };\r\n\r\n  var _setPage = function(n) {\r\n    if (n > 0 && n <= page) {\r\n      currentPage = n;\r\n    }\r\n  };\r\n\r\n  var getNumberOfPages = (API.__private__.getNumberOfPages = API.getNumberOfPages = function() {\r\n    return pages.length - 1;\r\n  });\r\n\r\n  /**\r\n   * Returns a document-specific font key - a label assigned to a\r\n   * font name + font type combination at the time the font was added\r\n   * to the font inventory.\r\n   *\r\n   * Font key is used as label for the desired font for a block of text\r\n   * to be added to the PDF document stream.\r\n   * @private\r\n   * @function\r\n   * @param fontName {string} can be undefined on \"falthy\" to indicate \"use current\"\r\n   * @param fontStyle {string} can be undefined on \"falthy\" to indicate \"use current\"\r\n   * @returns {string} Font key.\r\n   * @ignore\r\n   */\r\n  var getFont = function(fontName, fontStyle, options) {\r\n    var key = undefined,\r\n      fontNameLowerCase;\r\n    options = options || {};\r\n\r\n    fontName =\r\n      fontName !== undefined ? fontName : fonts[activeFontKey].fontName;\r\n    fontStyle =\r\n      fontStyle !== undefined ? fontStyle : fonts[activeFontKey].fontStyle;\r\n    fontNameLowerCase = fontName.toLowerCase();\r\n\r\n    if (\r\n      fontmap[fontNameLowerCase] !== undefined &&\r\n      fontmap[fontNameLowerCase][fontStyle] !== undefined\r\n    ) {\r\n      key = fontmap[fontNameLowerCase][fontStyle];\r\n    } else if (\r\n      fontmap[fontName] !== undefined &&\r\n      fontmap[fontName][fontStyle] !== undefined\r\n    ) {\r\n      key = fontmap[fontName][fontStyle];\r\n    } else {\r\n      if (options.disableWarning === false) {\r\n        console.warn(\r\n          \"Unable to look up font label for font '\" +\r\n            fontName +\r\n            \"', '\" +\r\n            fontStyle +\r\n            \"'. Refer to getFontList() for available fonts.\"\r\n        );\r\n      }\r\n    }\r\n\r\n    if (!key && !options.noFallback) {\r\n      key = fontmap[\"times\"][fontStyle];\r\n      if (key == null) {\r\n        key = fontmap[\"times\"][\"normal\"];\r\n      }\r\n    }\r\n    return key;\r\n  };\r\n\r\n  var putInfo = (API.__private__.putInfo = function() {\r\n    var objectId = newObject();\r\n    var encryptor = function(data) {\r\n      return data;\r\n    };\r\n    if (encryptionOptions !== null) {\r\n      encryptor = encryption.encryptor(objectId, 0);\r\n    }\r\n    out(\"<<\");\r\n    out(\"/Producer (\" + pdfEscape(encryptor(\"jsPDF \" + jsPDF.version)) + \")\");\r\n    for (var key in documentProperties) {\r\n      if (documentProperties.hasOwnProperty(key) && documentProperties[key]) {\r\n        out(\r\n          \"/\" +\r\n            key.substr(0, 1).toUpperCase() +\r\n            key.substr(1) +\r\n            \" (\" +\r\n            pdfEscape(encryptor(documentProperties[key])) +\r\n            \")\"\r\n        );\r\n      }\r\n    }\r\n    out(\"/CreationDate (\" + pdfEscape(encryptor(creationDate)) + \")\");\r\n    out(\">>\");\r\n    out(\"endobj\");\r\n  });\r\n\r\n  var putCatalog = (API.__private__.putCatalog = function(options) {\r\n    options = options || {};\r\n    var tmpRootDictionaryObjId =\r\n      options.rootDictionaryObjId || rootDictionaryObjId;\r\n    newObject();\r\n    out(\"<<\");\r\n    out(\"/Type /Catalog\");\r\n    out(\"/Pages \" + tmpRootDictionaryObjId + \" 0 R\");\r\n    // PDF13ref Section 7.2.1\r\n    if (!zoomMode) zoomMode = \"fullwidth\";\r\n    switch (zoomMode) {\r\n      case \"fullwidth\":\r\n        out(\"/OpenAction [3 0 R /FitH null]\");\r\n        break;\r\n      case \"fullheight\":\r\n        out(\"/OpenAction [3 0 R /FitV null]\");\r\n        break;\r\n      case \"fullpage\":\r\n        out(\"/OpenAction [3 0 R /Fit]\");\r\n        break;\r\n      case \"original\":\r\n        out(\"/OpenAction [3 0 R /XYZ null null 1]\");\r\n        break;\r\n      default:\r\n        var pcn = \"\" + zoomMode;\r\n        if (pcn.substr(pcn.length - 1) === \"%\")\r\n          zoomMode = parseInt(zoomMode) / 100;\r\n        if (typeof zoomMode === \"number\") {\r\n          out(\"/OpenAction [3 0 R /XYZ null null \" + f2(zoomMode) + \"]\");\r\n        }\r\n    }\r\n    if (!layoutMode) layoutMode = \"continuous\";\r\n    switch (layoutMode) {\r\n      case \"continuous\":\r\n        out(\"/PageLayout /OneColumn\");\r\n        break;\r\n      case \"single\":\r\n        out(\"/PageLayout /SinglePage\");\r\n        break;\r\n      case \"two\":\r\n      case \"twoleft\":\r\n        out(\"/PageLayout /TwoColumnLeft\");\r\n        break;\r\n      case \"tworight\":\r\n        out(\"/PageLayout /TwoColumnRight\");\r\n        break;\r\n    }\r\n    if (pageMode) {\r\n      /**\r\n       * A name object specifying how the document should be displayed when opened:\r\n       * UseNone      : Neither document outline nor thumbnail images visible -- DEFAULT\r\n       * UseOutlines  : Document outline visible\r\n       * UseThumbs    : Thumbnail images visible\r\n       * FullScreen   : Full-screen mode, with no menu bar, window controls, or any other window visible\r\n       */\r\n      out(\"/PageMode /\" + pageMode);\r\n    }\r\n    events.publish(\"putCatalog\");\r\n    out(\">>\");\r\n    out(\"endobj\");\r\n  });\r\n\r\n  var putTrailer = (API.__private__.putTrailer = function() {\r\n    out(\"trailer\");\r\n    out(\"<<\");\r\n    out(\"/Size \" + (objectNumber + 1));\r\n    // Root and Info must be the last and second last objects written respectively\r\n    out(\"/Root \" + objectNumber + \" 0 R\");\r\n    out(\"/Info \" + (objectNumber - 1) + \" 0 R\");\r\n    if (encryptionOptions !== null) {\r\n      out(\"/Encrypt \" + encryption.oid + \" 0 R\");\r\n    }\r\n    out(\"/ID [ <\" + fileId + \"> <\" + fileId + \"> ]\");\r\n    out(\">>\");\r\n  });\r\n\r\n  var putHeader = (API.__private__.putHeader = function() {\r\n    out(\"%PDF-\" + pdfVersion);\r\n    out(\"%\\xBA\\xDF\\xAC\\xE0\");\r\n  });\r\n\r\n  var putXRef = (API.__private__.putXRef = function() {\r\n    var p = \"0000000000\";\r\n\r\n    out(\"xref\");\r\n    out(\"0 \" + (objectNumber + 1));\r\n    out(\"0000000000 65535 f \");\r\n    for (var i = 1; i <= objectNumber; i++) {\r\n      var offset = offsets[i];\r\n      if (typeof offset === \"function\") {\r\n        out((p + offsets[i]()).slice(-10) + \" 00000 n \");\r\n      } else {\r\n        if (typeof offsets[i] !== \"undefined\") {\r\n          out((p + offsets[i]).slice(-10) + \" 00000 n \");\r\n        } else {\r\n          out(\"0000000000 00000 n \");\r\n        }\r\n      }\r\n    }\r\n  });\r\n\r\n  var buildDocument = (API.__private__.buildDocument = function() {\r\n    resetDocument();\r\n    setOutputDestination(content);\r\n\r\n    events.publish(\"buildDocument\");\r\n\r\n    putHeader();\r\n    putPages();\r\n    putAdditionalObjects();\r\n    putResources();\r\n    if (encryptionOptions !== null) putEncryptionDict();\r\n    putInfo();\r\n    putCatalog();\r\n\r\n    var offsetOfXRef = contentLength;\r\n    putXRef();\r\n    putTrailer();\r\n    out(\"startxref\");\r\n    out(\"\" + offsetOfXRef);\r\n    out(\"%%EOF\");\r\n\r\n    setOutputDestination(pages[currentPage]);\r\n\r\n    return content.join(\"\\n\");\r\n  });\r\n\r\n  var getBlob = (API.__private__.getBlob = function(data) {\r\n    return new Blob([getArrayBuffer(data)], {\r\n      type: \"application/pdf\"\r\n    });\r\n  });\r\n\r\n  /**\r\n   * Generates the PDF document.\r\n   *\r\n   * If `type` argument is undefined, output is raw body of resulting PDF returned as a string.\r\n   *\r\n   * @param {string} type A string identifying one of the possible output types.<br/>\r\n   *                      Possible values are: <br/>\r\n   *                          'arraybuffer' -> (ArrayBuffer)<br/>\r\n   *                          'blob' -> (Blob)<br/>\r\n   *                          'bloburi'/'bloburl' -> (string)<br/>\r\n   *                          'datauristring'/'dataurlstring' -> (string)<br/>\r\n   *                          'datauri'/'dataurl' -> (undefined) -> change location to generated datauristring/dataurlstring<br/>\r\n   *                          'dataurlnewwindow' -> (window | null | undefined) throws error if global isn't a window object(node)<br/>\r\n   *                          'pdfobjectnewwindow' -> (window | null) throws error if global isn't a window object(node)<br/>\r\n   *                          'pdfjsnewwindow' -> (wind | null)\r\n   * @param {Object|string} options An object providing some additional signalling to PDF generator.<br/>\r\n   *                                Possible options are 'filename'.<br/>\r\n   *                                A string can be passed instead of {filename:string} and defaults to 'generated.pdf'\r\n   * @function\r\n   * @instance\r\n   * @returns {string|window|ArrayBuffer|Blob|jsPDF|null|undefined}\r\n   * @memberof jsPDF#\r\n   * @name output\r\n   */\r\n  var output = (API.output = API.__private__.output = SAFE(function output(\r\n    type,\r\n    options\r\n  ) {\r\n    options = options || {};\r\n\r\n    if (typeof options === \"string\") {\r\n      options = {\r\n        filename: options\r\n      };\r\n    } else {\r\n      options.filename = options.filename || \"generated.pdf\";\r\n    }\r\n\r\n    switch (type) {\r\n      case undefined:\r\n        return buildDocument();\r\n      case \"save\":\r\n        API.save(options.filename);\r\n        break;\r\n      case \"arraybuffer\":\r\n        return getArrayBuffer(buildDocument());\r\n      case \"blob\":\r\n        return getBlob(buildDocument());\r\n      case \"bloburi\":\r\n      case \"bloburl\":\r\n        // Developer is responsible of calling revokeObjectURL\r\n        if (\r\n          typeof globalObject.URL !== \"undefined\" &&\r\n          typeof globalObject.URL.createObjectURL === \"function\"\r\n        ) {\r\n          return (\r\n            (globalObject.URL &&\r\n              globalObject.URL.createObjectURL(getBlob(buildDocument()))) ||\r\n            void 0\r\n          );\r\n        } else {\r\n          console.warn(\r\n            \"bloburl is not supported by your system, because URL.createObjectURL is not supported by your browser.\"\r\n          );\r\n        }\r\n        break;\r\n      case \"datauristring\":\r\n      case \"dataurlstring\":\r\n        var dataURI = \"\";\r\n        var pdfDocument = buildDocument();\r\n        try {\r\n          dataURI = btoa(pdfDocument);\r\n        } catch (e) {\r\n          dataURI = btoa(unescape(encodeURIComponent(pdfDocument)));\r\n        }\r\n        return (\r\n          \"data:application/pdf;filename=\" +\r\n          options.filename +\r\n          \";base64,\" +\r\n          dataURI\r\n        );\r\n      case \"pdfobjectnewwindow\":\r\n        if (\r\n          Object.prototype.toString.call(globalObject) === \"[object Window]\"\r\n        ) {\r\n          var pdfObjectUrl =\r\n            \"https://cdnjs.cloudflare.com/ajax/libs/pdfobject/2.1.1/pdfobject.min.js\";\r\n          var integrity =\r\n            ' integrity=\"sha512-4ze/a9/4jqu+tX9dfOqJYSvyYd5M6qum/3HpCLr+/Jqf0whc37VUbkpNGHR7/8pSnCFw47T1fmIpwBV7UySh3g==\" crossorigin=\"anonymous\"';\r\n\r\n          if (options.pdfObjectUrl) {\r\n            pdfObjectUrl = options.pdfObjectUrl;\r\n            integrity = \"\";\r\n          }\r\n\r\n          var htmlForNewWindow =\r\n            \"<html>\" +\r\n            '<style>html, body { padding: 0; margin: 0; } iframe { width: 100%; height: 100%; border: 0;}  </style><body><script src=\"' +\r\n            pdfObjectUrl +\r\n            '\"' +\r\n            integrity +\r\n            '></script><script >PDFObject.embed(\"' +\r\n            this.output(\"dataurlstring\") +\r\n            '\", ' +\r\n            JSON.stringify(options) +\r\n            \");</script></body></html>\";\r\n          var nW = globalObject.open();\r\n\r\n          if (nW !== null) {\r\n            nW.document.write(htmlForNewWindow);\r\n          }\r\n          return nW;\r\n        } else {\r\n          throw new Error(\r\n            \"The option pdfobjectnewwindow just works in a browser-environment.\"\r\n          );\r\n        }\r\n      case \"pdfjsnewwindow\":\r\n        if (\r\n          Object.prototype.toString.call(globalObject) === \"[object Window]\"\r\n        ) {\r\n          var pdfJsUrl = options.pdfJsUrl || \"examples/PDF.js/web/viewer.html\";\r\n          var htmlForPDFjsNewWindow =\r\n            \"<html>\" +\r\n            \"<style>html, body { padding: 0; margin: 0; } iframe { width: 100%; height: 100%; border: 0;}  </style>\" +\r\n            '<body><iframe id=\"pdfViewer\" src=\"' +\r\n            pdfJsUrl +\r\n            \"?file=&downloadName=\" +\r\n            options.filename +\r\n            '\" width=\"500px\" height=\"400px\" />' +\r\n            \"</body></html>\";\r\n          var PDFjsNewWindow = globalObject.open();\r\n\r\n          if (PDFjsNewWindow !== null) {\r\n            PDFjsNewWindow.document.write(htmlForPDFjsNewWindow);\r\n            var scope = this;\r\n            PDFjsNewWindow.document.documentElement.querySelector(\r\n              \"#pdfViewer\"\r\n            ).onload = function() {\r\n              PDFjsNewWindow.document.title = options.filename;\r\n              PDFjsNewWindow.document.documentElement\r\n                .querySelector(\"#pdfViewer\")\r\n                .contentWindow.PDFViewerApplication.open(\r\n                  scope.output(\"bloburl\")\r\n                );\r\n            };\r\n          }\r\n          return PDFjsNewWindow;\r\n        } else {\r\n          throw new Error(\r\n            \"The option pdfjsnewwindow just works in a browser-environment.\"\r\n          );\r\n        }\r\n      case \"dataurlnewwindow\":\r\n        if (\r\n          Object.prototype.toString.call(globalObject) === \"[object Window]\"\r\n        ) {\r\n          var htmlForDataURLNewWindow =\r\n            \"<html>\" +\r\n            \"<style>html, body { padding: 0; margin: 0; } iframe { width: 100%; height: 100%; border: 0;}  </style>\" +\r\n            \"<body>\" +\r\n            '<iframe src=\"' +\r\n            this.output(\"datauristring\", options) +\r\n            '\"></iframe>' +\r\n            \"</body></html>\";\r\n          var dataURLNewWindow = globalObject.open();\r\n          if (dataURLNewWindow !== null) {\r\n            dataURLNewWindow.document.write(htmlForDataURLNewWindow);\r\n            dataURLNewWindow.document.title = options.filename;\r\n          }\r\n          if (dataURLNewWindow || typeof safari === \"undefined\")\r\n            return dataURLNewWindow;\r\n        } else {\r\n          throw new Error(\r\n            \"The option dataurlnewwindow just works in a browser-environment.\"\r\n          );\r\n        }\r\n        break;\r\n      case \"datauri\":\r\n      case \"dataurl\":\r\n        return (globalObject.document.location.href = this.output(\r\n          \"datauristring\",\r\n          options\r\n        ));\r\n      default:\r\n        return null;\r\n    }\r\n  }));\r\n\r\n  /**\r\n   * Used to see if a supplied hotfix was requested when the pdf instance was created.\r\n   * @param {string} hotfixName - The name of the hotfix to check.\r\n   * @returns {boolean}\r\n   */\r\n  var hasHotfix = function(hotfixName) {\r\n    return (\r\n      Array.isArray(hotfixes) === true && hotfixes.indexOf(hotfixName) > -1\r\n    );\r\n  };\r\n\r\n  switch (unit) {\r\n    case \"pt\":\r\n      scaleFactor = 1;\r\n      break;\r\n    case \"mm\":\r\n      scaleFactor = 72 / 25.4;\r\n      break;\r\n    case \"cm\":\r\n      scaleFactor = 72 / 2.54;\r\n      break;\r\n    case \"in\":\r\n      scaleFactor = 72;\r\n      break;\r\n    case \"px\":\r\n      if (hasHotfix(\"px_scaling\") == true) {\r\n        scaleFactor = 72 / 96;\r\n      } else {\r\n        scaleFactor = 96 / 72;\r\n      }\r\n      break;\r\n    case \"pc\":\r\n      scaleFactor = 12;\r\n      break;\r\n    case \"em\":\r\n      scaleFactor = 12;\r\n      break;\r\n    case \"ex\":\r\n      scaleFactor = 6;\r\n      break;\r\n    default:\r\n      if (typeof unit === \"number\") {\r\n        scaleFactor = unit;\r\n      } else {\r\n        throw new Error(\"Invalid unit: \" + unit);\r\n      }\r\n  }\r\n\r\n  var encryption = null;\r\n  setCreationDate();\r\n  setFileId();\r\n\r\n  var getEncryptor = function(objectId) {\r\n    if (encryptionOptions !== null) {\r\n      return encryption.encryptor(objectId, 0);\r\n    }\r\n    return function(data) {\r\n      return data;\r\n    };\r\n  };\r\n\r\n  //---------------------------------------\r\n  // Public API\r\n\r\n  var getPageInfo = (API.__private__.getPageInfo = API.getPageInfo = function(\r\n    pageNumberOneBased\r\n  ) {\r\n    if (isNaN(pageNumberOneBased) || pageNumberOneBased % 1 !== 0) {\r\n      throw new Error(\"Invalid argument passed to jsPDF.getPageInfo\");\r\n    }\r\n    var objId = pagesContext[pageNumberOneBased].objId;\r\n    return {\r\n      objId: objId,\r\n      pageNumber: pageNumberOneBased,\r\n      pageContext: pagesContext[pageNumberOneBased]\r\n    };\r\n  });\r\n\r\n  var getPageInfoByObjId = (API.__private__.getPageInfoByObjId = function(\r\n    objId\r\n  ) {\r\n    if (isNaN(objId) || objId % 1 !== 0) {\r\n      throw new Error(\"Invalid argument passed to jsPDF.getPageInfoByObjId\");\r\n    }\r\n    for (var pageNumber in pagesContext) {\r\n      if (pagesContext[pageNumber].objId === objId) {\r\n        break;\r\n      }\r\n    }\r\n    return getPageInfo(pageNumber);\r\n  });\r\n\r\n  var getCurrentPageInfo = (API.__private__.getCurrentPageInfo = API.getCurrentPageInfo = function() {\r\n    return {\r\n      objId: pagesContext[currentPage].objId,\r\n      pageNumber: currentPage,\r\n      pageContext: pagesContext[currentPage]\r\n    };\r\n  });\r\n\r\n  /**\r\n   * Adds (and transfers the focus to) new page to the PDF document.\r\n   * @param format {String/Array} The format of the new page. Can be: <ul><li>a0 - a10</li><li>b0 - b10</li><li>c0 - c10</li><li>dl</li><li>letter</li><li>government-letter</li><li>legal</li><li>junior-legal</li><li>ledger</li><li>tabloid</li><li>credit-card</li></ul><br />\r\n   * Default is \"a4\". If you want to use your own format just pass instead of one of the above predefined formats the size as an number-array, e.g. [595.28, 841.89]\r\n   * @param orientation {string} Orientation of the new page. Possible values are \"portrait\" or \"landscape\" (or shortcuts \"p\" (Default), \"l\").\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   *\r\n   * @memberof jsPDF#\r\n   * @name addPage\r\n   */\r\n  API.addPage = function() {\r\n    _addPage.apply(this, arguments);\r\n    return this;\r\n  };\r\n  /**\r\n   * Adds (and transfers the focus to) new page to the PDF document.\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   *\r\n   * @memberof jsPDF#\r\n   * @name setPage\r\n   * @param {number} page Switch the active page to the page number specified (indexed starting at 1).\r\n   * @example\r\n   * doc = jsPDF()\r\n   * doc.addPage()\r\n   * doc.addPage()\r\n   * doc.text('I am on page 3', 10, 10)\r\n   * doc.setPage(1)\r\n   * doc.text('I am on page 1', 10, 10)\r\n   */\r\n  API.setPage = function() {\r\n    _setPage.apply(this, arguments);\r\n    setOutputDestination.call(this, pages[currentPage]);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * @name insertPage\r\n   * @memberof jsPDF#\r\n   *\r\n   * @function\r\n   * @instance\r\n   * @param {Object} beforePage\r\n   * @returns {jsPDF}\r\n   */\r\n  API.insertPage = function(beforePage) {\r\n    this.addPage();\r\n    this.movePage(currentPage, beforePage);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * @name movePage\r\n   * @memberof jsPDF#\r\n   * @function\r\n   * @instance\r\n   * @param {number} targetPage\r\n   * @param {number} beforePage\r\n   * @returns {jsPDF}\r\n   */\r\n  API.movePage = function(targetPage, beforePage) {\r\n    var tmpPages, tmpPagesContext;\r\n    if (targetPage > beforePage) {\r\n      tmpPages = pages[targetPage];\r\n      tmpPagesContext = pagesContext[targetPage];\r\n      for (var i = targetPage; i > beforePage; i--) {\r\n        pages[i] = pages[i - 1];\r\n        pagesContext[i] = pagesContext[i - 1];\r\n      }\r\n      pages[beforePage] = tmpPages;\r\n      pagesContext[beforePage] = tmpPagesContext;\r\n      this.setPage(beforePage);\r\n    } else if (targetPage < beforePage) {\r\n      tmpPages = pages[targetPage];\r\n      tmpPagesContext = pagesContext[targetPage];\r\n      for (var j = targetPage; j < beforePage; j++) {\r\n        pages[j] = pages[j + 1];\r\n        pagesContext[j] = pagesContext[j + 1];\r\n      }\r\n      pages[beforePage] = tmpPages;\r\n      pagesContext[beforePage] = tmpPagesContext;\r\n      this.setPage(beforePage);\r\n    }\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Deletes a page from the PDF.\r\n   * @name deletePage\r\n   * @memberof jsPDF#\r\n   * @function\r\n   * @param {number} targetPage\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   */\r\n  API.deletePage = function() {\r\n    _deletePage.apply(this, arguments);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Adds text to page. Supports adding multiline text when 'text' argument is an Array of Strings.\r\n   *\r\n   * @function\r\n   * @instance\r\n   * @param {String|Array} text String or array of strings to be added to the page. Each line is shifted one line down per font, spacing settings declared before this call.\r\n   * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page.\r\n   * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page.\r\n   * @param {Object} [options] - Collection of settings signaling how the text must be encoded.\r\n   * @param {string} [options.align=left] - The alignment of the text, possible values: left, center, right, justify.\r\n   * @param {string} [options.baseline=alphabetic] - Sets text baseline used when drawing the text, possible values: alphabetic, ideographic, bottom, top, middle, hanging\r\n   * @param {number|Matrix} [options.angle=0] - Rotate the text clockwise or counterclockwise. Expects the angle in degree.\r\n   * @param {number} [options.rotationDirection=1] - Direction of the rotation. 0 = clockwise, 1 = counterclockwise.\r\n   * @param {number} [options.charSpace=0] - The space between each letter.\r\n   * @param {number} [options.horizontalScale=1] - Horizontal scale of the text as a factor of the regular size.\r\n   * @param {number} [options.lineHeightFactor=1.15] - The lineheight of each line.\r\n   * @param {Object} [options.flags] - Flags for to8bitStream.\r\n   * @param {boolean} [options.flags.noBOM=true] - Don't add BOM to Unicode-text.\r\n   * @param {boolean} [options.flags.autoencode=true] - Autoencode the Text.\r\n   * @param {number} [options.maxWidth=0] - Split the text by given width, 0 = no split.\r\n   * @param {string} [options.renderingMode=fill] - Set how the text should be rendered, possible values: fill, stroke, fillThenStroke, invisible, fillAndAddForClipping, strokeAndAddPathForClipping, fillThenStrokeAndAddToPathForClipping, addToPathForClipping.\r\n   * @param {boolean} [options.isInputVisual] - Option for the BidiEngine\r\n   * @param {boolean} [options.isOutputVisual] - Option for the BidiEngine\r\n   * @param {boolean} [options.isInputRtl] - Option for the BidiEngine\r\n   * @param {boolean} [options.isOutputRtl] - Option for the BidiEngine\r\n   * @param {boolean} [options.isSymmetricSwapping] - Option for the BidiEngine\r\n   * @param {number|Matrix} transform If transform is a number the text will be rotated by this value around the anchor set by x and y.\r\n   *\r\n   * If it is a Matrix, this matrix gets directly applied to the text, which allows shearing\r\n   * effects etc.; the x and y offsets are then applied AFTER the coordinate system has been established by this\r\n   * matrix. This means passing a rotation matrix that is equivalent to some rotation angle will in general yield a\r\n   * DIFFERENT result. A matrix is only allowed in \"advanced\" API mode.\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name text\r\n   */\r\n  API.__private__.text = API.text = function(text, x, y, options, transform) {\r\n    /*\r\n     * Inserts something like this into PDF\r\n     *   BT\r\n     *    /F1 16 Tf  % Font name + size\r\n     *    16 TL % How many units down for next line in multiline text\r\n     *    0 g % color\r\n     *    28.35 813.54 Td % position\r\n     *    (line one) Tj\r\n     *    T* (line two) Tj\r\n     *    T* (line three) Tj\r\n     *   ET\r\n     */\r\n    options = options || {};\r\n    var scope = options.scope || this;\r\n    var payload, da, angle, align, charSpace, maxWidth, flags, horizontalScale;\r\n\r\n    // Pre-August-2012 the order of arguments was function(x, y, text, flags)\r\n    // in effort to make all calls have similar signature like\r\n    //   function(data, coordinates... , miscellaneous)\r\n    // this method had its args flipped.\r\n    // code below allows backward compatibility with old arg order.\r\n    if (\r\n      typeof text === \"number\" &&\r\n      typeof x === \"number\" &&\r\n      (typeof y === \"string\" || Array.isArray(y))\r\n    ) {\r\n      var tmp = y;\r\n      y = x;\r\n      x = text;\r\n      text = tmp;\r\n    }\r\n\r\n    var transformationMatrix;\r\n\r\n    if (arguments[3] instanceof Matrix === false) {\r\n      flags = arguments[3];\r\n      angle = arguments[4];\r\n      align = arguments[5];\r\n\r\n      if (typeof flags !== \"object\" || flags === null) {\r\n        if (typeof angle === \"string\") {\r\n          align = angle;\r\n          angle = null;\r\n        }\r\n        if (typeof flags === \"string\") {\r\n          align = flags;\r\n          flags = null;\r\n        }\r\n        if (typeof flags === \"number\") {\r\n          angle = flags;\r\n          flags = null;\r\n        }\r\n        options = {\r\n          flags: flags,\r\n          angle: angle,\r\n          align: align\r\n        };\r\n      }\r\n    } else {\r\n      advancedApiModeTrap(\r\n        \"The transform parameter of text() with a Matrix value\"\r\n      );\r\n      transformationMatrix = transform;\r\n    }\r\n\r\n    if (isNaN(x) || isNaN(y) || typeof text === \"undefined\" || text === null) {\r\n      throw new Error(\"Invalid arguments passed to jsPDF.text\");\r\n    }\r\n\r\n    if (text.length === 0) {\r\n      return scope;\r\n    }\r\n\r\n    var xtra = \"\";\r\n    var isHex = false;\r\n    var lineHeight =\r\n      typeof options.lineHeightFactor === \"number\"\r\n        ? options.lineHeightFactor\r\n        : lineHeightFactor;\r\n    var scaleFactor = scope.internal.scaleFactor;\r\n\r\n    function ESC(s) {\r\n      s = s.split(\"\\t\").join(Array(options.TabLen || 9).join(\" \"));\r\n      return pdfEscape(s, flags);\r\n    }\r\n\r\n    function transformTextToSpecialArray(text) {\r\n      //we don't want to destroy original text array, so cloning it\r\n      var sa = text.concat();\r\n      var da = [];\r\n      var len = sa.length;\r\n      var curDa;\r\n      //we do array.join('text that must not be PDFescaped\")\r\n      //thus, pdfEscape each component separately\r\n      while (len--) {\r\n        curDa = sa.shift();\r\n        if (typeof curDa === \"string\") {\r\n          da.push(curDa);\r\n        } else {\r\n          if (\r\n            Array.isArray(text) &&\r\n            (curDa.length === 1 ||\r\n              (curDa[1] === undefined && curDa[2] === undefined))\r\n          ) {\r\n            da.push(curDa[0]);\r\n          } else {\r\n            da.push([curDa[0], curDa[1], curDa[2]]);\r\n          }\r\n        }\r\n      }\r\n      return da;\r\n    }\r\n\r\n    function processTextByFunction(text, processingFunction) {\r\n      var result;\r\n      if (typeof text === \"string\") {\r\n        result = processingFunction(text)[0];\r\n      } else if (Array.isArray(text)) {\r\n        //we don't want to destroy original text array, so cloning it\r\n        var sa = text.concat();\r\n        var da = [];\r\n        var len = sa.length;\r\n        var curDa;\r\n        var tmpResult;\r\n        //we do array.join('text that must not be PDFescaped\")\r\n        //thus, pdfEscape each component separately\r\n        while (len--) {\r\n          curDa = sa.shift();\r\n          if (typeof curDa === \"string\") {\r\n            da.push(processingFunction(curDa)[0]);\r\n          } else if (Array.isArray(curDa) && typeof curDa[0] === \"string\") {\r\n            tmpResult = processingFunction(curDa[0], curDa[1], curDa[2]);\r\n            da.push([tmpResult[0], tmpResult[1], tmpResult[2]]);\r\n          }\r\n        }\r\n        result = da;\r\n      }\r\n      return result;\r\n    }\r\n\r\n    //Check if text is of type String\r\n    var textIsOfTypeString = false;\r\n    var tmpTextIsOfTypeString = true;\r\n\r\n    if (typeof text === \"string\") {\r\n      textIsOfTypeString = true;\r\n    } else if (Array.isArray(text)) {\r\n      //we don't want to destroy original text array, so cloning it\r\n      var sa = text.concat();\r\n      da = [];\r\n      var len = sa.length;\r\n      var curDa;\r\n      //we do array.join('text that must not be PDFescaped\")\r\n      //thus, pdfEscape each component separately\r\n      while (len--) {\r\n        curDa = sa.shift();\r\n        if (\r\n          typeof curDa !== \"string\" ||\r\n          (Array.isArray(curDa) && typeof curDa[0] !== \"string\")\r\n        ) {\r\n          tmpTextIsOfTypeString = false;\r\n        }\r\n      }\r\n      textIsOfTypeString = tmpTextIsOfTypeString;\r\n    }\r\n    if (textIsOfTypeString === false) {\r\n      throw new Error(\r\n        'Type of text must be string or Array. \"' +\r\n          text +\r\n          '\" is not recognized.'\r\n      );\r\n    }\r\n\r\n    //If there are any newlines in text, we assume\r\n    //the user wanted to print multiple lines, so break the\r\n    //text up into an array. If the text is already an array,\r\n    //we assume the user knows what they are doing.\r\n    //Convert text into an array anyway to simplify\r\n    //later code.\r\n\r\n    if (typeof text === \"string\") {\r\n      if (text.match(/[\\r?\\n]/)) {\r\n        text = text.split(/\\r\\n|\\r|\\n/g);\r\n      } else {\r\n        text = [text];\r\n      }\r\n    }\r\n\r\n    //baseline\r\n    var height = activeFontSize / scope.internal.scaleFactor;\r\n    var descent = height * (lineHeight - 1);\r\n\r\n    switch (options.baseline) {\r\n      case \"bottom\":\r\n        y -= descent;\r\n        break;\r\n      case \"top\":\r\n        y += height - descent;\r\n        break;\r\n      case \"hanging\":\r\n        y += height - 2 * descent;\r\n        break;\r\n      case \"middle\":\r\n        y += height / 2 - descent;\r\n        break;\r\n      case \"ideographic\":\r\n      case \"alphabetic\":\r\n      default:\r\n        // do nothing, everything is fine\r\n        break;\r\n    }\r\n\r\n    //multiline\r\n    maxWidth = options.maxWidth || 0;\r\n\r\n    if (maxWidth > 0) {\r\n      if (typeof text === \"string\") {\r\n        text = scope.splitTextToSize(text, maxWidth);\r\n      } else if (Object.prototype.toString.call(text) === \"[object Array]\") {\r\n        text = text.reduce(function(acc, textLine) {\r\n          return acc.concat(scope.splitTextToSize(textLine, maxWidth));\r\n        }, []);\r\n      }\r\n    }\r\n\r\n    //creating Payload-Object to make text byRef\r\n    payload = {\r\n      text: text,\r\n      x: x,\r\n      y: y,\r\n      options: options,\r\n      mutex: {\r\n        pdfEscape: pdfEscape,\r\n        activeFontKey: activeFontKey,\r\n        fonts: fonts,\r\n        activeFontSize: activeFontSize\r\n      }\r\n    };\r\n    events.publish(\"preProcessText\", payload);\r\n\r\n    text = payload.text;\r\n    options = payload.options;\r\n\r\n    //angle\r\n    angle = options.angle;\r\n\r\n    if (\r\n      transformationMatrix instanceof Matrix === false &&\r\n      angle &&\r\n      typeof angle === \"number\"\r\n    ) {\r\n      angle *= Math.PI / 180;\r\n\r\n      if (options.rotationDirection === 0) {\r\n        angle = -angle;\r\n      }\r\n\r\n      if (apiMode === ApiMode.ADVANCED) {\r\n        angle = -angle;\r\n      }\r\n\r\n      var c = Math.cos(angle);\r\n      var s = Math.sin(angle);\r\n      transformationMatrix = new Matrix(c, s, -s, c, 0, 0);\r\n    } else if (angle && angle instanceof Matrix) {\r\n      transformationMatrix = angle;\r\n    }\r\n\r\n    if (apiMode === ApiMode.ADVANCED && !transformationMatrix) {\r\n      transformationMatrix = identityMatrix;\r\n    }\r\n\r\n    //charSpace\r\n\r\n    charSpace = options.charSpace || activeCharSpace;\r\n\r\n    if (typeof charSpace !== \"undefined\") {\r\n      xtra += hpf(scale(charSpace)) + \" Tc\\n\";\r\n      this.setCharSpace(this.getCharSpace() || 0);\r\n    }\r\n\r\n    horizontalScale = options.horizontalScale;\r\n    if (typeof horizontalScale !== \"undefined\") {\r\n      xtra += hpf(horizontalScale * 100) + \" Tz\\n\";\r\n    }\r\n\r\n    //lang\r\n\r\n    var lang = options.lang;\r\n\r\n    if (lang) {\r\n      //    xtra += \"/Lang (\" + lang +\")\\n\";\r\n    }\r\n\r\n    //renderingMode\r\n    var renderingMode = -1;\r\n    var parmRenderingMode =\r\n      typeof options.renderingMode !== \"undefined\"\r\n        ? options.renderingMode\r\n        : options.stroke;\r\n    var pageContext = scope.internal.getCurrentPageInfo().pageContext;\r\n\r\n    switch (parmRenderingMode) {\r\n      case 0:\r\n      case false:\r\n      case \"fill\":\r\n        renderingMode = 0;\r\n        break;\r\n      case 1:\r\n      case true:\r\n      case \"stroke\":\r\n        renderingMode = 1;\r\n        break;\r\n      case 2:\r\n      case \"fillThenStroke\":\r\n        renderingMode = 2;\r\n        break;\r\n      case 3:\r\n      case \"invisible\":\r\n        renderingMode = 3;\r\n        break;\r\n      case 4:\r\n      case \"fillAndAddForClipping\":\r\n        renderingMode = 4;\r\n        break;\r\n      case 5:\r\n      case \"strokeAndAddPathForClipping\":\r\n        renderingMode = 5;\r\n        break;\r\n      case 6:\r\n      case \"fillThenStrokeAndAddToPathForClipping\":\r\n        renderingMode = 6;\r\n        break;\r\n      case 7:\r\n      case \"addToPathForClipping\":\r\n        renderingMode = 7;\r\n        break;\r\n    }\r\n\r\n    var usedRenderingMode =\r\n      typeof pageContext.usedRenderingMode !== \"undefined\"\r\n        ? pageContext.usedRenderingMode\r\n        : -1;\r\n\r\n    //if the coder wrote it explicitly to use a specific\r\n    //renderingMode, then use it\r\n    if (renderingMode !== -1) {\r\n      xtra += renderingMode + \" Tr\\n\";\r\n      //otherwise check if we used the rendering Mode already\r\n      //if so then set the rendering Mode...\r\n    } else if (usedRenderingMode !== -1) {\r\n      xtra += \"0 Tr\\n\";\r\n    }\r\n\r\n    if (renderingMode !== -1) {\r\n      pageContext.usedRenderingMode = renderingMode;\r\n    }\r\n\r\n    //align\r\n    align = options.align || \"left\";\r\n    var leading = activeFontSize * lineHeight;\r\n    var pageWidth = scope.internal.pageSize.getWidth();\r\n    var activeFont = fonts[activeFontKey];\r\n    charSpace = options.charSpace || activeCharSpace;\r\n    maxWidth = options.maxWidth || 0;\r\n\r\n    var lineWidths;\r\n    flags = Object.assign({ autoencode: true, noBOM: true }, options.flags);\r\n\r\n    var wordSpacingPerLine = [];\r\n\r\n    if (Object.prototype.toString.call(text) === \"[object Array]\") {\r\n      da = transformTextToSpecialArray(text);\r\n      var newY;\r\n      if (align !== \"left\") {\r\n        lineWidths = da.map(function(v) {\r\n          return (\r\n            (scope.getStringUnitWidth(v, {\r\n              font: activeFont,\r\n              charSpace: charSpace,\r\n              fontSize: activeFontSize,\r\n              doKerning: false\r\n            }) *\r\n              activeFontSize) /\r\n            scaleFactor\r\n          );\r\n        });\r\n      }\r\n      //The first line uses the \"main\" Td setting,\r\n      //and the subsequent lines are offset by the\r\n      //previous line's x coordinate.\r\n      var prevWidth = 0;\r\n      var newX;\r\n      if (align === \"right\") {\r\n        //The passed in x coordinate defines the\r\n        //rightmost point of the text.\r\n        x -= lineWidths[0];\r\n        text = [];\r\n        len = da.length;\r\n        for (var i = 0; i < len; i++) {\r\n          if (i === 0) {\r\n            newX = getHorizontalCoordinate(x);\r\n            newY = getVerticalCoordinate(y);\r\n          } else {\r\n            newX = scale(prevWidth - lineWidths[i]);\r\n            newY = -leading;\r\n          }\r\n          text.push([da[i], newX, newY]);\r\n          prevWidth = lineWidths[i];\r\n        }\r\n      } else if (align === \"center\") {\r\n        //The passed in x coordinate defines\r\n        //the center point.\r\n        x -= lineWidths[0] / 2;\r\n        text = [];\r\n        len = da.length;\r\n        for (var j = 0; j < len; j++) {\r\n          if (j === 0) {\r\n            newX = getHorizontalCoordinate(x);\r\n            newY = getVerticalCoordinate(y);\r\n          } else {\r\n            newX = scale((prevWidth - lineWidths[j]) / 2);\r\n            newY = -leading;\r\n          }\r\n          text.push([da[j], newX, newY]);\r\n          prevWidth = lineWidths[j];\r\n        }\r\n      } else if (align === \"left\") {\r\n        text = [];\r\n        len = da.length;\r\n        for (var h = 0; h < len; h++) {\r\n          text.push(da[h]);\r\n        }\r\n      } else if (align === \"justify\") {\r\n        text = [];\r\n        len = da.length;\r\n        maxWidth = maxWidth !== 0 ? maxWidth : pageWidth;\r\n\r\n        for (var l = 0; l < len; l++) {\r\n          newY = l === 0 ? getVerticalCoordinate(y) : -leading;\r\n          newX = l === 0 ? getHorizontalCoordinate(x) : 0;\r\n          if (l < len - 1) {\r\n            wordSpacingPerLine.push(\r\n              hpf(\r\n                scale(\r\n                  (maxWidth - lineWidths[l]) / (da[l].split(\" \").length - 1)\r\n                )\r\n              )\r\n            );\r\n          } else {\r\n            wordSpacingPerLine.push(0);\r\n          }\r\n          text.push([da[l], newX, newY]);\r\n        }\r\n      } else {\r\n        throw new Error(\r\n          'Unrecognized alignment option, use \"left\", \"center\", \"right\" or \"justify\".'\r\n        );\r\n      }\r\n    }\r\n\r\n    //R2L\r\n    var doReversing = typeof options.R2L === \"boolean\" ? options.R2L : R2L;\r\n    if (doReversing === true) {\r\n      text = processTextByFunction(text, function(text, posX, posY) {\r\n        return [\r\n          text\r\n            .split(\"\")\r\n            .reverse()\r\n            .join(\"\"),\r\n          posX,\r\n          posY\r\n        ];\r\n      });\r\n    }\r\n\r\n    //creating Payload-Object to make text byRef\r\n    payload = {\r\n      text: text,\r\n      x: x,\r\n      y: y,\r\n      options: options,\r\n      mutex: {\r\n        pdfEscape: pdfEscape,\r\n        activeFontKey: activeFontKey,\r\n        fonts: fonts,\r\n        activeFontSize: activeFontSize\r\n      }\r\n    };\r\n    events.publish(\"postProcessText\", payload);\r\n\r\n    text = payload.text;\r\n    isHex = payload.mutex.isHex || false;\r\n\r\n    //Escaping\r\n    var activeFontEncoding = fonts[activeFontKey].encoding;\r\n\r\n    if (\r\n      activeFontEncoding === \"WinAnsiEncoding\" ||\r\n      activeFontEncoding === \"StandardEncoding\"\r\n    ) {\r\n      text = processTextByFunction(text, function(text, posX, posY) {\r\n        return [ESC(text), posX, posY];\r\n      });\r\n    }\r\n\r\n    da = transformTextToSpecialArray(text);\r\n\r\n    text = [];\r\n    var STRING = 0;\r\n    var ARRAY = 1;\r\n    var variant = Array.isArray(da[0]) ? ARRAY : STRING;\r\n    var posX;\r\n    var posY;\r\n    var content;\r\n    var wordSpacing = \"\";\r\n\r\n    var generatePosition = function(\r\n      parmPosX,\r\n      parmPosY,\r\n      parmTransformationMatrix\r\n    ) {\r\n      var position = \"\";\r\n      if (parmTransformationMatrix instanceof Matrix) {\r\n        // It is kind of more intuitive to apply a plain rotation around the text anchor set by x and y\r\n        // but when the user supplies an arbitrary transformation matrix, the x and y offsets should be applied\r\n        // in the coordinate system established by this matrix\r\n        if (typeof options.angle === \"number\") {\r\n          parmTransformationMatrix = matrixMult(\r\n            parmTransformationMatrix,\r\n            new Matrix(1, 0, 0, 1, parmPosX, parmPosY)\r\n          );\r\n        } else {\r\n          parmTransformationMatrix = matrixMult(\r\n            new Matrix(1, 0, 0, 1, parmPosX, parmPosY),\r\n            parmTransformationMatrix\r\n          );\r\n        }\r\n\r\n        if (apiMode === ApiMode.ADVANCED) {\r\n          parmTransformationMatrix = matrixMult(\r\n            new Matrix(1, 0, 0, -1, 0, 0),\r\n            parmTransformationMatrix\r\n          );\r\n        }\r\n\r\n        position = parmTransformationMatrix.join(\" \") + \" Tm\\n\";\r\n      } else {\r\n        position = hpf(parmPosX) + \" \" + hpf(parmPosY) + \" Td\\n\";\r\n      }\r\n      return position;\r\n    };\r\n\r\n    for (var lineIndex = 0; lineIndex < da.length; lineIndex++) {\r\n      wordSpacing = \"\";\r\n\r\n      switch (variant) {\r\n        case ARRAY:\r\n          content =\r\n            (isHex ? \"<\" : \"(\") + da[lineIndex][0] + (isHex ? \">\" : \")\");\r\n          posX = parseFloat(da[lineIndex][1]);\r\n          posY = parseFloat(da[lineIndex][2]);\r\n          break;\r\n        case STRING:\r\n          content = (isHex ? \"<\" : \"(\") + da[lineIndex] + (isHex ? \">\" : \")\");\r\n          posX = getHorizontalCoordinate(x);\r\n          posY = getVerticalCoordinate(y);\r\n          break;\r\n      }\r\n\r\n      if (\r\n        typeof wordSpacingPerLine !== \"undefined\" &&\r\n        typeof wordSpacingPerLine[lineIndex] !== \"undefined\"\r\n      ) {\r\n        wordSpacing = wordSpacingPerLine[lineIndex] + \" Tw\\n\";\r\n      }\r\n\r\n      if (lineIndex === 0) {\r\n        text.push(\r\n          wordSpacing +\r\n            generatePosition(posX, posY, transformationMatrix) +\r\n            content\r\n        );\r\n      } else if (variant === STRING) {\r\n        text.push(wordSpacing + content);\r\n      } else if (variant === ARRAY) {\r\n        text.push(\r\n          wordSpacing +\r\n            generatePosition(posX, posY, transformationMatrix) +\r\n            content\r\n        );\r\n      }\r\n    }\r\n\r\n    text = variant === STRING ? text.join(\" Tj\\nT* \") : text.join(\" Tj\\n\");\r\n    text += \" Tj\\n\";\r\n\r\n    var result = \"BT\\n/\";\r\n    result += activeFontKey + \" \" + activeFontSize + \" Tf\\n\"; // font face, style, size\r\n    result += hpf(activeFontSize * lineHeight) + \" TL\\n\"; // line spacing\r\n    result += textColor + \"\\n\";\r\n    result += xtra;\r\n    result += text;\r\n    result += \"ET\";\r\n\r\n    out(result);\r\n    usedFonts[activeFontKey] = true;\r\n    return scope;\r\n  };\r\n\r\n  // PDF supports these path painting and clip path operators:\r\n  //\r\n  // S - stroke\r\n  // s - close/stroke\r\n  // f (F) - fill non-zero\r\n  // f* - fill evenodd\r\n  // B - fill stroke nonzero\r\n  // B* - fill stroke evenodd\r\n  // b - close fill stroke nonzero\r\n  // b* - close fill stroke evenodd\r\n  // n - nothing (consume path)\r\n  // W - clip nonzero\r\n  // W* - clip evenodd\r\n  //\r\n  // In order to keep the API small, we omit the close-and-fill/stroke operators and provide a separate close()\r\n  // method.\r\n  /**\r\n   *\r\n   * @name clip\r\n   * @function\r\n   * @instance\r\n   * @param {string} rule Only possible value is 'evenodd'\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @description All .clip() after calling drawing ops with a style argument of null.\r\n   */\r\n  var clip = (API.__private__.clip = API.clip = function(rule) {\r\n    // Call .clip() after calling drawing ops with a style argument of null\r\n    // W is the PDF clipping op\r\n    if (\"evenodd\" === rule) {\r\n      out(\"W*\");\r\n    } else {\r\n      out(\"W\");\r\n    }\r\n    return this;\r\n  });\r\n\r\n  /**\r\n   * @name clipEvenOdd\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @description Modify the current clip path by intersecting it with the current path using the even-odd rule. Note\r\n   * that this will NOT consume the current path. In order to only use this path for clipping call\r\n   * {@link API.discardPath} afterwards.\r\n   */\r\n  API.clipEvenOdd = function() {\r\n    return clip(\"evenodd\");\r\n  };\r\n\r\n  /**\r\n   * Consumes the current path without any effect. Mainly used in combination with {@link clip} or\r\n   * {@link clipEvenOdd}. The PDF \"n\" operator.\r\n   * @name discardPath\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   */\r\n  API.__private__.discardPath = API.discardPath = function() {\r\n    out(\"n\");\r\n    return this;\r\n  };\r\n\r\n  var isValidStyle = (API.__private__.isValidStyle = function(style) {\r\n    var validStyleVariants = [\r\n      undefined,\r\n      null,\r\n      \"S\",\r\n      \"D\",\r\n      \"F\",\r\n      \"DF\",\r\n      \"FD\",\r\n      \"f\",\r\n      \"f*\",\r\n      \"B\",\r\n      \"B*\",\r\n      \"n\"\r\n    ];\r\n    var result = false;\r\n    if (validStyleVariants.indexOf(style) !== -1) {\r\n      result = true;\r\n    }\r\n    return result;\r\n  });\r\n\r\n  API.__private__.setDefaultPathOperation = API.setDefaultPathOperation = function(\r\n    operator\r\n  ) {\r\n    if (isValidStyle(operator)) {\r\n      defaultPathOperation = operator;\r\n    }\r\n    return this;\r\n  };\r\n\r\n  var getStyle = (API.__private__.getStyle = API.getStyle = function(style) {\r\n    // see path-painting operators in PDF spec\r\n    var op = defaultPathOperation; // stroke\r\n\r\n    switch (style) {\r\n      case \"D\":\r\n      case \"S\":\r\n        op = \"S\"; // stroke\r\n        break;\r\n      case \"F\":\r\n        op = \"f\"; // fill\r\n        break;\r\n      case \"FD\":\r\n      case \"DF\":\r\n        op = \"B\";\r\n        break;\r\n      case \"f\":\r\n      case \"f*\":\r\n      case \"B\":\r\n      case \"B*\":\r\n        /*\r\n               Allow direct use of these PDF path-painting operators:\r\n               - f    fill using nonzero winding number rule\r\n               - f*    fill using even-odd rule\r\n               - B    fill then stroke with fill using non-zero winding number rule\r\n               - B*    fill then stroke with fill using even-odd rule\r\n               */\r\n        op = style;\r\n        break;\r\n    }\r\n    return op;\r\n  });\r\n\r\n  /**\r\n   * Close the current path. The PDF \"h\" operator.\r\n   * @name close\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   */\r\n  var close = (API.close = function() {\r\n    out(\"h\");\r\n    return this;\r\n  });\r\n\r\n  /**\r\n   * Stroke the path. The PDF \"S\" operator.\r\n   * @name stroke\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   */\r\n  API.stroke = function() {\r\n    out(\"S\");\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Fill the current path using the nonzero winding number rule. If a pattern is provided, the path will be filled\r\n   * with this pattern, otherwise with the current fill color. Equivalent to the PDF \"f\" operator.\r\n   * @name fill\r\n   * @function\r\n   * @instance\r\n   * @param {PatternData=} pattern If provided the path will be filled with this pattern\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   */\r\n  API.fill = function(pattern) {\r\n    fillWithOptionalPattern(\"f\", pattern);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Fill the current path using the even-odd rule. The PDF f* operator.\r\n   * @see API.fill\r\n   * @name fillEvenOdd\r\n   * @function\r\n   * @instance\r\n   * @param {PatternData=} pattern If provided the path will be filled with this pattern\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   */\r\n  API.fillEvenOdd = function(pattern) {\r\n    fillWithOptionalPattern(\"f*\", pattern);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Fill using the nonzero winding number rule and then stroke the current Path. The PDF \"B\" operator.\r\n   * @see API.fill\r\n   * @name fillStroke\r\n   * @function\r\n   * @instance\r\n   * @param {PatternData=} pattern If provided the path will be stroked with this pattern\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   */\r\n  API.fillStroke = function(pattern) {\r\n    fillWithOptionalPattern(\"B\", pattern);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Fill using the even-odd rule and then stroke the current Path. The PDF \"B\" operator.\r\n   * @see API.fill\r\n   * @name fillStrokeEvenOdd\r\n   * @function\r\n   * @instance\r\n   * @param {PatternData=} pattern If provided the path will be fill-stroked with this pattern\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   */\r\n  API.fillStrokeEvenOdd = function(pattern) {\r\n    fillWithOptionalPattern(\"B*\", pattern);\r\n    return this;\r\n  };\r\n\r\n  var fillWithOptionalPattern = function(style, pattern) {\r\n    if (typeof pattern === \"object\") {\r\n      fillWithPattern(pattern, style);\r\n    } else {\r\n      out(style);\r\n    }\r\n  };\r\n\r\n  var putStyle = function(style) {\r\n    if (\r\n      style === null ||\r\n      (apiMode === ApiMode.ADVANCED && style === undefined)\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    style = getStyle(style);\r\n\r\n    // stroking / filling / both the path\r\n    out(style);\r\n  };\r\n\r\n  function cloneTilingPattern(patternKey, boundingBox, xStep, yStep, matrix) {\r\n    var clone = new TilingPattern(\r\n      boundingBox || this.boundingBox,\r\n      xStep || this.xStep,\r\n      yStep || this.yStep,\r\n      this.gState,\r\n      matrix || this.matrix\r\n    );\r\n    clone.stream = this.stream;\r\n    var key = patternKey + \"$$\" + this.cloneIndex++ + \"$$\";\r\n    addPattern(key, clone);\r\n    return clone;\r\n  }\r\n\r\n  var fillWithPattern = function(patternData, style) {\r\n    var patternId = patternMap[patternData.key];\r\n    var pattern = patterns[patternId];\r\n\r\n    if (pattern instanceof ShadingPattern) {\r\n      out(\"q\");\r\n\r\n      out(clipRuleFromStyle(style));\r\n\r\n      if (pattern.gState) {\r\n        API.setGState(pattern.gState);\r\n      }\r\n      out(patternData.matrix.toString() + \" cm\");\r\n      out(\"/\" + patternId + \" sh\");\r\n      out(\"Q\");\r\n    } else if (pattern instanceof TilingPattern) {\r\n      // pdf draws patterns starting at the bottom left corner and they are not affected by the global transformation,\r\n      // so we must flip them\r\n      var matrix = new Matrix(1, 0, 0, -1, 0, getPageHeight());\r\n\r\n      if (patternData.matrix) {\r\n        matrix = matrix.multiply(patternData.matrix || identityMatrix);\r\n        // we cannot apply a matrix to the pattern on use so we must abuse the pattern matrix and create new instances\r\n        // for each use\r\n        patternId = cloneTilingPattern.call(\r\n          pattern,\r\n          patternData.key,\r\n          patternData.boundingBox,\r\n          patternData.xStep,\r\n          patternData.yStep,\r\n          matrix\r\n        ).id;\r\n      }\r\n\r\n      out(\"q\");\r\n      out(\"/Pattern cs\");\r\n      out(\"/\" + patternId + \" scn\");\r\n\r\n      if (pattern.gState) {\r\n        API.setGState(pattern.gState);\r\n      }\r\n\r\n      out(style);\r\n      out(\"Q\");\r\n    }\r\n  };\r\n\r\n  var clipRuleFromStyle = function(style) {\r\n    switch (style) {\r\n      case \"f\":\r\n      case \"F\":\r\n        return \"W n\";\r\n      case \"f*\":\r\n        return \"W* n\";\r\n      case \"B\":\r\n        return \"W S\";\r\n      case \"B*\":\r\n        return \"W* S\";\r\n\r\n      // these two are for compatibility reasons (in the past, calling any primitive method with a shading pattern\r\n      // and \"n\"/\"S\" as style would still fill/fill and stroke the path)\r\n      case \"S\":\r\n        return \"W S\";\r\n      case \"n\":\r\n        return \"W n\";\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Begin a new subpath by moving the current point to coordinates (x, y). The PDF \"m\" operator.\r\n   * @param {number} x\r\n   * @param {number} y\r\n   * @name moveTo\r\n   * @function\r\n   * @instance\r\n   * @memberof jsPDF#\r\n   * @returns {jsPDF}\r\n   */\r\n  var moveTo = (API.moveTo = function(x, y) {\r\n    out(hpf(scale(x)) + \" \" + hpf(transformScaleY(y)) + \" m\");\r\n    return this;\r\n  });\r\n\r\n  /**\r\n   * Append a straight line segment from the current point to the point (x, y). The PDF \"l\" operator.\r\n   * @param {number} x\r\n   * @param {number} y\r\n   * @memberof jsPDF#\r\n   * @name lineTo\r\n   * @function\r\n   * @instance\r\n   * @memberof jsPDF#\r\n   * @returns {jsPDF}\r\n   */\r\n  var lineTo = (API.lineTo = function(x, y) {\r\n    out(hpf(scale(x)) + \" \" + hpf(transformScaleY(y)) + \" l\");\r\n    return this;\r\n  });\r\n\r\n  /**\r\n   * Append a cubic Bézier curve to the current path. The curve shall extend from the current point to the point\r\n   * (x3, y3), using (x1, y1) and (x2, y2) as Bézier control points. The new current point shall be (x3, x3).\r\n   * @param {number} x1\r\n   * @param {number} y1\r\n   * @param {number} x2\r\n   * @param {number} y2\r\n   * @param {number} x3\r\n   * @param {number} y3\r\n   * @memberof jsPDF#\r\n   * @name curveTo\r\n   * @function\r\n   * @instance\r\n   * @memberof jsPDF#\r\n   * @returns {jsPDF}\r\n   */\r\n  var curveTo = (API.curveTo = function(x1, y1, x2, y2, x3, y3) {\r\n    out(\r\n      [\r\n        hpf(scale(x1)),\r\n        hpf(transformScaleY(y1)),\r\n        hpf(scale(x2)),\r\n        hpf(transformScaleY(y2)),\r\n        hpf(scale(x3)),\r\n        hpf(transformScaleY(y3)),\r\n        \"c\"\r\n      ].join(\" \")\r\n    );\r\n    return this;\r\n  });\r\n\r\n  /**\r\n   * Draw a line on the current page.\r\n   *\r\n   * @name line\r\n   * @function\r\n   * @instance\r\n   * @param {number} x1\r\n   * @param {number} y1\r\n   * @param {number} x2\r\n   * @param {number} y2\r\n   * @param {string} style A string specifying the painting style or null.  Valid styles include: 'S' [default] - stroke, 'F' - fill,  and 'DF' (or 'FD') -  fill then stroke. A null value postpones setting the style so that a shape may be composed using multiple method calls. The last drawing method call used to define the shape should not have a null style argument. default: 'S'\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   */\r\n  API.__private__.line = API.line = function(x1, y1, x2, y2, style) {\r\n    if (\r\n      isNaN(x1) ||\r\n      isNaN(y1) ||\r\n      isNaN(x2) ||\r\n      isNaN(y2) ||\r\n      !isValidStyle(style)\r\n    ) {\r\n      throw new Error(\"Invalid arguments passed to jsPDF.line\");\r\n    }\r\n    if (apiMode === ApiMode.COMPAT) {\r\n      return this.lines([[x2 - x1, y2 - y1]], x1, y1, [1, 1], style || \"S\");\r\n    } else {\r\n      return this.lines([[x2 - x1, y2 - y1]], x1, y1, [1, 1]).stroke();\r\n    }\r\n  };\r\n\r\n  /**\r\n   * @typedef {Object} PatternData\r\n   * {Matrix|undefined} matrix\r\n   * {Number|undefined} xStep\r\n   * {Number|undefined} yStep\r\n   * {Array.<Number>|undefined} boundingBox\r\n   */\r\n\r\n  /**\r\n   * Adds series of curves (straight lines or cubic bezier curves) to canvas, starting at `x`, `y` coordinates.\r\n   * All data points in `lines` are relative to last line origin.\r\n   * `x`, `y` become x1,y1 for first line / curve in the set.\r\n   * For lines you only need to specify [x2, y2] - (ending point) vector against x1, y1 starting point.\r\n   * For bezier curves you need to specify [x2,y2,x3,y3,x4,y4] - vectors to control points 1, 2, ending point. All vectors are against the start of the curve - x1,y1.\r\n   *\r\n   * @example .lines([[2,2],[-2,2],[1,1,2,2,3,3],[2,1]], 212,110, [1,1], 'F', false) // line, line, bezier curve, line\r\n   * @param {Array} lines Array of *vector* shifts as pairs (lines) or sextets (cubic bezier curves).\r\n   * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n   * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n   * @param {number} scale (Defaults to [1.0,1.0]) x,y Scaling factor for all vectors. Elements can be any floating number Sub-one makes drawing smaller. Over-one grows the drawing. Negative flips the direction.\r\n   * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n   * 'S' [default] - stroke,\r\n   * 'F' - fill,\r\n   * and 'DF' (or 'FD') -  fill then stroke.\r\n   * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n   * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n   *\r\n   * In \"advanced\" API mode this parameter is deprecated.\r\n   * @param {Boolean=} closed If true, the path is closed with a straight line from the end of the last curve to the starting point.\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name lines\r\n   */\r\n  API.__private__.lines = API.lines = function(\r\n    lines,\r\n    x,\r\n    y,\r\n    scale,\r\n    style,\r\n    closed\r\n  ) {\r\n    var scalex, scaley, i, l, leg, x2, y2, x3, y3, x4, y4, tmp;\r\n\r\n    // Pre-August-2012 the order of arguments was function(x, y, lines, scale, style)\r\n    // in effort to make all calls have similar signature like\r\n    //   function(content, coordinateX, coordinateY , miscellaneous)\r\n    // this method had its args flipped.\r\n    // code below allows backward compatibility with old arg order.\r\n    if (typeof lines === \"number\") {\r\n      tmp = y;\r\n      y = x;\r\n      x = lines;\r\n      lines = tmp;\r\n    }\r\n\r\n    scale = scale || [1, 1];\r\n    closed = closed || false;\r\n\r\n    if (\r\n      isNaN(x) ||\r\n      isNaN(y) ||\r\n      !Array.isArray(lines) ||\r\n      !Array.isArray(scale) ||\r\n      !isValidStyle(style) ||\r\n      typeof closed !== \"boolean\"\r\n    ) {\r\n      throw new Error(\"Invalid arguments passed to jsPDF.lines\");\r\n    }\r\n\r\n    // starting point\r\n    moveTo(x, y);\r\n\r\n    scalex = scale[0];\r\n    scaley = scale[1];\r\n    l = lines.length;\r\n    //, x2, y2 // bezier only. In page default measurement \"units\", *after* scaling\r\n    //, x3, y3 // bezier only. In page default measurement \"units\", *after* scaling\r\n    // ending point for all, lines and bezier. . In page default measurement \"units\", *after* scaling\r\n    x4 = x; // last / ending point = starting point for first item.\r\n    y4 = y; // last / ending point = starting point for first item.\r\n\r\n    for (i = 0; i < l; i++) {\r\n      leg = lines[i];\r\n      if (leg.length === 2) {\r\n        // simple line\r\n        x4 = leg[0] * scalex + x4; // here last x4 was prior ending point\r\n        y4 = leg[1] * scaley + y4; // here last y4 was prior ending point\r\n        lineTo(x4, y4);\r\n      } else {\r\n        // bezier curve\r\n        x2 = leg[0] * scalex + x4; // here last x4 is prior ending point\r\n        y2 = leg[1] * scaley + y4; // here last y4 is prior ending point\r\n        x3 = leg[2] * scalex + x4; // here last x4 is prior ending point\r\n        y3 = leg[3] * scaley + y4; // here last y4 is prior ending point\r\n        x4 = leg[4] * scalex + x4; // here last x4 was prior ending point\r\n        y4 = leg[5] * scaley + y4; // here last y4 was prior ending point\r\n        curveTo(x2, y2, x3, y3, x4, y4);\r\n      }\r\n    }\r\n\r\n    if (closed) {\r\n      close();\r\n    }\r\n\r\n    putStyle(style);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Similar to {@link API.lines} but all coordinates are interpreted as absolute coordinates instead of relative.\r\n   * @param {Array<Object>} lines An array of {op: operator, c: coordinates} object, where op is one of \"m\" (move to), \"l\" (line to)\r\n   * \"c\" (cubic bezier curve) and \"h\" (close (sub)path)). c is an array of coordinates. \"m\" and \"l\" expect two, \"c\"\r\n   * six and \"h\" an empty array (or undefined).\r\n   * @function\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name path\r\n   */\r\n  API.path = function(lines) {\r\n    for (var i = 0; i < lines.length; i++) {\r\n      var leg = lines[i];\r\n      var coords = leg.c;\r\n      switch (leg.op) {\r\n        case \"m\":\r\n          moveTo(coords[0], coords[1]);\r\n          break;\r\n        case \"l\":\r\n          lineTo(coords[0], coords[1]);\r\n          break;\r\n        case \"c\":\r\n          curveTo.apply(this, coords);\r\n          break;\r\n        case \"h\":\r\n          close();\r\n          break;\r\n      }\r\n    }\r\n\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Adds a rectangle to PDF.\r\n   *\r\n   * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n   * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n   * @param {number} w Width (in units declared at inception of PDF document)\r\n   * @param {number} h Height (in units declared at inception of PDF document)\r\n   * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n   * 'S' [default] - stroke,\r\n   * 'F' - fill,\r\n   * and 'DF' (or 'FD') -  fill then stroke.\r\n   * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n   * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n   *\r\n   * In \"advanced\" API mode this parameter is deprecated.\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name rect\r\n   */\r\n  API.__private__.rect = API.rect = function(x, y, w, h, style) {\r\n    if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h) || !isValidStyle(style)) {\r\n      throw new Error(\"Invalid arguments passed to jsPDF.rect\");\r\n    }\r\n    if (apiMode === ApiMode.COMPAT) {\r\n      h = -h;\r\n    }\r\n\r\n    out(\r\n      [\r\n        hpf(scale(x)),\r\n        hpf(transformScaleY(y)),\r\n        hpf(scale(w)),\r\n        hpf(scale(h)),\r\n        \"re\"\r\n      ].join(\" \")\r\n    );\r\n\r\n    putStyle(style);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Adds a triangle to PDF.\r\n   *\r\n   * @param {number} x1 Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n   * @param {number} y1 Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n   * @param {number} x2 Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n   * @param {number} y2 Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n   * @param {number} x3 Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n   * @param {number} y3 Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n   * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n   * 'S' [default] - stroke,\r\n   * 'F' - fill,\r\n   * and 'DF' (or 'FD') -  fill then stroke.\r\n   * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n   * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n   *\r\n   * In \"advanced\" API mode this parameter is deprecated.\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name triangle\r\n   */\r\n  API.__private__.triangle = API.triangle = function(\r\n    x1,\r\n    y1,\r\n    x2,\r\n    y2,\r\n    x3,\r\n    y3,\r\n    style\r\n  ) {\r\n    if (\r\n      isNaN(x1) ||\r\n      isNaN(y1) ||\r\n      isNaN(x2) ||\r\n      isNaN(y2) ||\r\n      isNaN(x3) ||\r\n      isNaN(y3) ||\r\n      !isValidStyle(style)\r\n    ) {\r\n      throw new Error(\"Invalid arguments passed to jsPDF.triangle\");\r\n    }\r\n    this.lines(\r\n      [\r\n        [x2 - x1, y2 - y1], // vector to point 2\r\n        [x3 - x2, y3 - y2], // vector to point 3\r\n        [x1 - x3, y1 - y3] // closing vector back to point 1\r\n      ],\r\n      x1,\r\n      y1, // start of path\r\n      [1, 1],\r\n      style,\r\n      true\r\n    );\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Adds a rectangle with rounded corners to PDF.\r\n   *\r\n   * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n   * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n   * @param {number} w Width (in units declared at inception of PDF document)\r\n   * @param {number} h Height (in units declared at inception of PDF document)\r\n   * @param {number} rx Radius along x axis (in units declared at inception of PDF document)\r\n   * @param {number} ry Radius along y axis (in units declared at inception of PDF document)\r\n   * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n   * 'S' [default] - stroke,\r\n   * 'F' - fill,\r\n   * and 'DF' (or 'FD') -  fill then stroke.\r\n   * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n   * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n   *\r\n   * In \"advanced\" API mode this parameter is deprecated.\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name roundedRect\r\n   */\r\n  API.__private__.roundedRect = API.roundedRect = function(\r\n    x,\r\n    y,\r\n    w,\r\n    h,\r\n    rx,\r\n    ry,\r\n    style\r\n  ) {\r\n    if (\r\n      isNaN(x) ||\r\n      isNaN(y) ||\r\n      isNaN(w) ||\r\n      isNaN(h) ||\r\n      isNaN(rx) ||\r\n      isNaN(ry) ||\r\n      !isValidStyle(style)\r\n    ) {\r\n      throw new Error(\"Invalid arguments passed to jsPDF.roundedRect\");\r\n    }\r\n    var MyArc = (4 / 3) * (Math.SQRT2 - 1);\r\n\r\n    rx = Math.min(rx, w * 0.5);\r\n    ry = Math.min(ry, h * 0.5);\r\n\r\n    this.lines(\r\n      [\r\n        [w - 2 * rx, 0],\r\n        [rx * MyArc, 0, rx, ry - ry * MyArc, rx, ry],\r\n        [0, h - 2 * ry],\r\n        [0, ry * MyArc, -(rx * MyArc), ry, -rx, ry],\r\n        [-w + 2 * rx, 0],\r\n        [-(rx * MyArc), 0, -rx, -(ry * MyArc), -rx, -ry],\r\n        [0, -h + 2 * ry],\r\n        [0, -(ry * MyArc), rx * MyArc, -ry, rx, -ry]\r\n      ],\r\n      x + rx,\r\n      y, // start of path\r\n      [1, 1],\r\n      style,\r\n      true\r\n    );\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Adds an ellipse to PDF.\r\n   *\r\n   * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n   * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n   * @param {number} rx Radius along x axis (in units declared at inception of PDF document)\r\n   * @param {number} ry Radius along y axis (in units declared at inception of PDF document)\r\n   * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n   * 'S' [default] - stroke,\r\n   * 'F' - fill,\r\n   * and 'DF' (or 'FD') -  fill then stroke.\r\n   * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n   * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n   *\r\n   * In \"advanced\" API mode this parameter is deprecated.\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name ellipse\r\n   */\r\n  API.__private__.ellipse = API.ellipse = function(x, y, rx, ry, style) {\r\n    if (\r\n      isNaN(x) ||\r\n      isNaN(y) ||\r\n      isNaN(rx) ||\r\n      isNaN(ry) ||\r\n      !isValidStyle(style)\r\n    ) {\r\n      throw new Error(\"Invalid arguments passed to jsPDF.ellipse\");\r\n    }\r\n    var lx = (4 / 3) * (Math.SQRT2 - 1) * rx,\r\n      ly = (4 / 3) * (Math.SQRT2 - 1) * ry;\r\n\r\n    moveTo(x + rx, y);\r\n    curveTo(x + rx, y - ly, x + lx, y - ry, x, y - ry);\r\n    curveTo(x - lx, y - ry, x - rx, y - ly, x - rx, y);\r\n    curveTo(x - rx, y + ly, x - lx, y + ry, x, y + ry);\r\n    curveTo(x + lx, y + ry, x + rx, y + ly, x + rx, y);\r\n\r\n    putStyle(style);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Adds an circle to PDF.\r\n   *\r\n   * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n   * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n   * @param {number} r Radius (in units declared at inception of PDF document)\r\n   * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n   * 'S' [default] - stroke,\r\n   * 'F' - fill,\r\n   * and 'DF' (or 'FD') -  fill then stroke.\r\n   * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n   * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n   *\r\n   * In \"advanced\" API mode this parameter is deprecated.\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name circle\r\n   */\r\n  API.__private__.circle = API.circle = function(x, y, r, style) {\r\n    if (isNaN(x) || isNaN(y) || isNaN(r) || !isValidStyle(style)) {\r\n      throw new Error(\"Invalid arguments passed to jsPDF.circle\");\r\n    }\r\n    return this.ellipse(x, y, r, r, style);\r\n  };\r\n\r\n  /**\r\n   * Sets text font face, variant for upcoming text elements.\r\n   * See output of jsPDF.getFontList() for possible font names, styles.\r\n   *\r\n   * @param {string} fontName Font name or family. Example: \"times\".\r\n   * @param {string} fontStyle Font style or variant. Example: \"italic\".\r\n   * @param {number | string} fontWeight Weight of the Font. Example: \"normal\" | 400\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name setFont\r\n   */\r\n  API.setFont = function(fontName, fontStyle, fontWeight) {\r\n    if (fontWeight) {\r\n      fontStyle = combineFontStyleAndFontWeight(fontStyle, fontWeight);\r\n    }\r\n    activeFontKey = getFont(fontName, fontStyle, {\r\n      disableWarning: false\r\n    });\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Gets text font face, variant for upcoming text elements.\r\n   *\r\n   * @function\r\n   * @instance\r\n   * @returns {Object}\r\n   * @memberof jsPDF#\r\n   * @name getFont\r\n   */\r\n  var getFontEntry = (API.__private__.getFont = API.getFont = function() {\r\n    return fonts[getFont.apply(API, arguments)];\r\n  });\r\n\r\n  /**\r\n   * Returns an object - a tree of fontName to fontStyle relationships available to\r\n   * active PDF document.\r\n   *\r\n   * @public\r\n   * @function\r\n   * @instance\r\n   * @returns {Object} Like {'times':['normal', 'italic', ... ], 'arial':['normal', 'bold', ... ], ... }\r\n   * @memberof jsPDF#\r\n   * @name getFontList\r\n   */\r\n  API.__private__.getFontList = API.getFontList = function() {\r\n    var list = {},\r\n      fontName,\r\n      fontStyle;\r\n\r\n    for (fontName in fontmap) {\r\n      if (fontmap.hasOwnProperty(fontName)) {\r\n        list[fontName] = [];\r\n        for (fontStyle in fontmap[fontName]) {\r\n          if (fontmap[fontName].hasOwnProperty(fontStyle)) {\r\n            list[fontName].push(fontStyle);\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return list;\r\n  };\r\n\r\n  /**\r\n   * Add a custom font to the current instance.\r\n   *\r\n   * @param {string} postScriptName PDF specification full name for the font.\r\n   * @param {string} id PDF-document-instance-specific label assinged to the font.\r\n   * @param {string} fontStyle Style of the Font.\r\n   * @param {number | string} fontWeight Weight of the Font.\r\n   * @param {Object} encoding Encoding_name-to-Font_metrics_object mapping.\r\n   * @function\r\n   * @instance\r\n   * @memberof jsPDF#\r\n   * @name addFont\r\n   * @returns {string} fontId\r\n   */\r\n  API.addFont = function(\r\n    postScriptName,\r\n    fontName,\r\n    fontStyle,\r\n    fontWeight,\r\n    encoding\r\n  ) {\r\n    var encodingOptions = [\r\n      \"StandardEncoding\",\r\n      \"MacRomanEncoding\",\r\n      \"Identity-H\",\r\n      \"WinAnsiEncoding\"\r\n    ];\r\n    if (arguments[3] && encodingOptions.indexOf(arguments[3]) !== -1) {\r\n      //IE 11 fix\r\n      encoding = arguments[3];\r\n    } else if (arguments[3] && encodingOptions.indexOf(arguments[3]) == -1) {\r\n      fontStyle = combineFontStyleAndFontWeight(fontStyle, fontWeight);\r\n    }\r\n    encoding = encoding || \"Identity-H\";\r\n    return addFont.call(this, postScriptName, fontName, fontStyle, encoding);\r\n  };\r\n\r\n  var lineWidth = options.lineWidth || 0.200025; // 2mm\r\n  /**\r\n   * Gets the line width, default: 0.200025.\r\n   *\r\n   * @function\r\n   * @instance\r\n   * @returns {number} lineWidth\r\n   * @memberof jsPDF#\r\n   * @name getLineWidth\r\n   */\r\n  var getLineWidth = (API.__private__.getLineWidth = API.getLineWidth = function() {\r\n    return lineWidth;\r\n  });\r\n\r\n  /**\r\n   * Sets line width for upcoming lines.\r\n   *\r\n   * @param {number} width Line width (in units declared at inception of PDF document).\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name setLineWidth\r\n   */\r\n  var setLineWidth = (API.__private__.setLineWidth = API.setLineWidth = function(\r\n    width\r\n  ) {\r\n    lineWidth = width;\r\n    out(hpf(scale(width)) + \" w\");\r\n    return this;\r\n  });\r\n\r\n  /**\r\n   * Sets the dash pattern for upcoming lines.\r\n   *\r\n   * To reset the settings simply call the method without any parameters.\r\n   * @param {Array<number>} dashArray An array containing 0-2 numbers. The first number sets the length of the\r\n   * dashes, the second number the length of the gaps. If the second number is missing, the gaps are considered\r\n   * to be as long as the dashes. An empty array means solid, unbroken lines.\r\n   * @param {number} dashPhase The phase lines start with.\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name setLineDashPattern\r\n   */\r\n  API.__private__.setLineDash = jsPDF.API.setLineDash = jsPDF.API.setLineDashPattern = function(\r\n    dashArray,\r\n    dashPhase\r\n  ) {\r\n    dashArray = dashArray || [];\r\n    dashPhase = dashPhase || 0;\r\n\r\n    if (isNaN(dashPhase) || !Array.isArray(dashArray)) {\r\n      throw new Error(\"Invalid arguments passed to jsPDF.setLineDash\");\r\n    }\r\n\r\n    dashArray = dashArray\r\n      .map(function(x) {\r\n        return hpf(scale(x));\r\n      })\r\n      .join(\" \");\r\n    dashPhase = hpf(scale(dashPhase));\r\n\r\n    out(\"[\" + dashArray + \"] \" + dashPhase + \" d\");\r\n    return this;\r\n  };\r\n\r\n  var lineHeightFactor;\r\n\r\n  var getLineHeight = (API.__private__.getLineHeight = API.getLineHeight = function() {\r\n    return activeFontSize * lineHeightFactor;\r\n  });\r\n\r\n  API.__private__.getLineHeight = API.getLineHeight = function() {\r\n    return activeFontSize * lineHeightFactor;\r\n  };\r\n\r\n  /**\r\n   * Sets the LineHeightFactor of proportion.\r\n   *\r\n   * @param {number} value LineHeightFactor value. Default: 1.15.\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name setLineHeightFactor\r\n   */\r\n  var setLineHeightFactor = (API.__private__.setLineHeightFactor = API.setLineHeightFactor = function(\r\n    value\r\n  ) {\r\n    value = value || 1.15;\r\n    if (typeof value === \"number\") {\r\n      lineHeightFactor = value;\r\n    }\r\n    return this;\r\n  });\r\n\r\n  /**\r\n   * Gets the LineHeightFactor, default: 1.15.\r\n   *\r\n   * @function\r\n   * @instance\r\n   * @returns {number} lineHeightFactor\r\n   * @memberof jsPDF#\r\n   * @name getLineHeightFactor\r\n   */\r\n  var getLineHeightFactor = (API.__private__.getLineHeightFactor = API.getLineHeightFactor = function() {\r\n    return lineHeightFactor;\r\n  });\r\n\r\n  setLineHeightFactor(options.lineHeight);\r\n\r\n  var getHorizontalCoordinate = (API.__private__.getHorizontalCoordinate = function(\r\n    value\r\n  ) {\r\n    return scale(value);\r\n  });\r\n\r\n  var getVerticalCoordinate = (API.__private__.getVerticalCoordinate = function(\r\n    value\r\n  ) {\r\n    if (apiMode === ApiMode.ADVANCED) {\r\n      return value;\r\n    } else {\r\n      var pageHeight =\r\n        pagesContext[currentPage].mediaBox.topRightY -\r\n        pagesContext[currentPage].mediaBox.bottomLeftY;\r\n      return pageHeight - scale(value);\r\n    }\r\n  });\r\n\r\n  var getHorizontalCoordinateString = (API.__private__.getHorizontalCoordinateString = API.getHorizontalCoordinateString = function(\r\n    value\r\n  ) {\r\n    return hpf(getHorizontalCoordinate(value));\r\n  });\r\n\r\n  var getVerticalCoordinateString = (API.__private__.getVerticalCoordinateString = API.getVerticalCoordinateString = function(\r\n    value\r\n  ) {\r\n    return hpf(getVerticalCoordinate(value));\r\n  });\r\n\r\n  var strokeColor = options.strokeColor || \"0 G\";\r\n\r\n  /**\r\n   *  Gets the stroke color for upcoming elements.\r\n   *\r\n   * @function\r\n   * @instance\r\n   * @returns {string} colorAsHex\r\n   * @memberof jsPDF#\r\n   * @name getDrawColor\r\n   */\r\n  API.__private__.getStrokeColor = API.getDrawColor = function() {\r\n    return decodeColorString(strokeColor);\r\n  };\r\n\r\n  /**\r\n   * Sets the stroke color for upcoming elements.\r\n   *\r\n   * Depending on the number of arguments given, Gray, RGB, or CMYK\r\n   * color space is implied.\r\n   *\r\n   * When only ch1 is given, \"Gray\" color space is implied and it\r\n   * must be a value in the range from 0.00 (solid black) to to 1.00 (white)\r\n   * if values are communicated as String types, or in range from 0 (black)\r\n   * to 255 (white) if communicated as Number type.\r\n   * The RGB-like 0-255 range is provided for backward compatibility.\r\n   *\r\n   * When only ch1,ch2,ch3 are given, \"RGB\" color space is implied and each\r\n   * value must be in the range from 0.00 (minimum intensity) to to 1.00\r\n   * (max intensity) if values are communicated as String types, or\r\n   * from 0 (min intensity) to to 255 (max intensity) if values are communicated\r\n   * as Number types.\r\n   * The RGB-like 0-255 range is provided for backward compatibility.\r\n   *\r\n   * When ch1,ch2,ch3,ch4 are given, \"CMYK\" color space is implied and each\r\n   * value must be a in the range from 0.00 (0% concentration) to to\r\n   * 1.00 (100% concentration)\r\n   *\r\n   * Because JavaScript treats fixed point numbers badly (rounds to\r\n   * floating point nearest to binary representation) it is highly advised to\r\n   * communicate the fractional numbers as String types, not JavaScript Number type.\r\n   *\r\n   * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'.\r\n   * @param {Number} ch2 Color channel value.\r\n   * @param {Number} ch3 Color channel value.\r\n   * @param {Number} ch4 Color channel value.\r\n   *\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name setDrawColor\r\n   */\r\n  API.__private__.setStrokeColor = API.setDrawColor = function(\r\n    ch1,\r\n    ch2,\r\n    ch3,\r\n    ch4\r\n  ) {\r\n    var options = {\r\n      ch1: ch1,\r\n      ch2: ch2,\r\n      ch3: ch3,\r\n      ch4: ch4,\r\n      pdfColorType: \"draw\",\r\n      precision: 2\r\n    };\r\n\r\n    strokeColor = encodeColorString(options);\r\n    out(strokeColor);\r\n    return this;\r\n  };\r\n\r\n  var fillColor = options.fillColor || \"0 g\";\r\n\r\n  /**\r\n   * Gets the fill color for upcoming elements.\r\n   *\r\n   * @function\r\n   * @instance\r\n   * @returns {string} colorAsHex\r\n   * @memberof jsPDF#\r\n   * @name getFillColor\r\n   */\r\n  API.__private__.getFillColor = API.getFillColor = function() {\r\n    return decodeColorString(fillColor);\r\n  };\r\n\r\n  /**\r\n   * Sets the fill color for upcoming elements.\r\n   *\r\n   * Depending on the number of arguments given, Gray, RGB, or CMYK\r\n   * color space is implied.\r\n   *\r\n   * When only ch1 is given, \"Gray\" color space is implied and it\r\n   * must be a value in the range from 0.00 (solid black) to to 1.00 (white)\r\n   * if values are communicated as String types, or in range from 0 (black)\r\n   * to 255 (white) if communicated as Number type.\r\n   * The RGB-like 0-255 range is provided for backward compatibility.\r\n   *\r\n   * When only ch1,ch2,ch3 are given, \"RGB\" color space is implied and each\r\n   * value must be in the range from 0.00 (minimum intensity) to to 1.00\r\n   * (max intensity) if values are communicated as String types, or\r\n   * from 0 (min intensity) to to 255 (max intensity) if values are communicated\r\n   * as Number types.\r\n   * The RGB-like 0-255 range is provided for backward compatibility.\r\n   *\r\n   * When ch1,ch2,ch3,ch4 are given, \"CMYK\" color space is implied and each\r\n   * value must be a in the range from 0.00 (0% concentration) to to\r\n   * 1.00 (100% concentration)\r\n   *\r\n   * Because JavaScript treats fixed point numbers badly (rounds to\r\n   * floating point nearest to binary representation) it is highly advised to\r\n   * communicate the fractional numbers as String types, not JavaScript Number type.\r\n   *\r\n   * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'.\r\n   * @param {Number} ch2 Color channel value.\r\n   * @param {Number} ch3 Color channel value.\r\n   * @param {Number} ch4 Color channel value.\r\n   *\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name setFillColor\r\n   */\r\n  API.__private__.setFillColor = API.setFillColor = function(\r\n    ch1,\r\n    ch2,\r\n    ch3,\r\n    ch4\r\n  ) {\r\n    var options = {\r\n      ch1: ch1,\r\n      ch2: ch2,\r\n      ch3: ch3,\r\n      ch4: ch4,\r\n      pdfColorType: \"fill\",\r\n      precision: 2\r\n    };\r\n\r\n    fillColor = encodeColorString(options);\r\n    out(fillColor);\r\n    return this;\r\n  };\r\n\r\n  var textColor = options.textColor || \"0 g\";\r\n  /**\r\n   * Gets the text color for upcoming elements.\r\n   *\r\n   * @function\r\n   * @instance\r\n   * @returns {string} colorAsHex\r\n   * @memberof jsPDF#\r\n   * @name getTextColor\r\n   */\r\n  var getTextColor = (API.__private__.getTextColor = API.getTextColor = function() {\r\n    return decodeColorString(textColor);\r\n  });\r\n  /**\r\n   * Sets the text color for upcoming elements.\r\n   *\r\n   * Depending on the number of arguments given, Gray, RGB, or CMYK\r\n   * color space is implied.\r\n   *\r\n   * When only ch1 is given, \"Gray\" color space is implied and it\r\n   * must be a value in the range from 0.00 (solid black) to to 1.00 (white)\r\n   * if values are communicated as String types, or in range from 0 (black)\r\n   * to 255 (white) if communicated as Number type.\r\n   * The RGB-like 0-255 range is provided for backward compatibility.\r\n   *\r\n   * When only ch1,ch2,ch3 are given, \"RGB\" color space is implied and each\r\n   * value must be in the range from 0.00 (minimum intensity) to to 1.00\r\n   * (max intensity) if values are communicated as String types, or\r\n   * from 0 (min intensity) to to 255 (max intensity) if values are communicated\r\n   * as Number types.\r\n   * The RGB-like 0-255 range is provided for backward compatibility.\r\n   *\r\n   * When ch1,ch2,ch3,ch4 are given, \"CMYK\" color space is implied and each\r\n   * value must be a in the range from 0.00 (0% concentration) to to\r\n   * 1.00 (100% concentration)\r\n   *\r\n   * Because JavaScript treats fixed point numbers badly (rounds to\r\n   * floating point nearest to binary representation) it is highly advised to\r\n   * communicate the fractional numbers as String types, not JavaScript Number type.\r\n   *\r\n   * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'.\r\n   * @param {Number} ch2 Color channel value.\r\n   * @param {Number} ch3 Color channel value.\r\n   * @param {Number} ch4 Color channel value.\r\n   *\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name setTextColor\r\n   */\r\n  API.__private__.setTextColor = API.setTextColor = function(\r\n    ch1,\r\n    ch2,\r\n    ch3,\r\n    ch4\r\n  ) {\r\n    var options = {\r\n      ch1: ch1,\r\n      ch2: ch2,\r\n      ch3: ch3,\r\n      ch4: ch4,\r\n      pdfColorType: \"text\",\r\n      precision: 3\r\n    };\r\n    textColor = encodeColorString(options);\r\n\r\n    return this;\r\n  };\r\n\r\n  var activeCharSpace = options.charSpace;\r\n\r\n  /**\r\n   * Get global value of CharSpace.\r\n   *\r\n   * @function\r\n   * @instance\r\n   * @returns {number} charSpace\r\n   * @memberof jsPDF#\r\n   * @name getCharSpace\r\n   */\r\n  var getCharSpace = (API.__private__.getCharSpace = API.getCharSpace = function() {\r\n    return parseFloat(activeCharSpace || 0);\r\n  });\r\n\r\n  /**\r\n   * Set global value of CharSpace.\r\n   *\r\n   * @param {number} charSpace\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF} jsPDF-instance\r\n   * @memberof jsPDF#\r\n   * @name setCharSpace\r\n   */\r\n  API.__private__.setCharSpace = API.setCharSpace = function(charSpace) {\r\n    if (isNaN(charSpace)) {\r\n      throw new Error(\"Invalid argument passed to jsPDF.setCharSpace\");\r\n    }\r\n    activeCharSpace = charSpace;\r\n    return this;\r\n  };\r\n\r\n  var lineCapID = 0;\r\n  /**\r\n   * Is an Object providing a mapping from human-readable to\r\n   * integer flag values designating the varieties of line cap\r\n   * and join styles.\r\n   *\r\n   * @memberof jsPDF#\r\n   * @name CapJoinStyles\r\n   */\r\n  API.CapJoinStyles = {\r\n    0: 0,\r\n    butt: 0,\r\n    but: 0,\r\n    miter: 0,\r\n    1: 1,\r\n    round: 1,\r\n    rounded: 1,\r\n    circle: 1,\r\n    2: 2,\r\n    projecting: 2,\r\n    project: 2,\r\n    square: 2,\r\n    bevel: 2\r\n  };\r\n\r\n  /**\r\n   * Sets the line cap styles.\r\n   * See {jsPDF.CapJoinStyles} for variants.\r\n   *\r\n   * @param {String|Number} style A string or number identifying the type of line cap.\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name setLineCap\r\n   */\r\n  API.__private__.setLineCap = API.setLineCap = function(style) {\r\n    var id = API.CapJoinStyles[style];\r\n    if (id === undefined) {\r\n      throw new Error(\r\n        \"Line cap style of '\" +\r\n          style +\r\n          \"' is not recognized. See or extend .CapJoinStyles property for valid styles\"\r\n      );\r\n    }\r\n    lineCapID = id;\r\n    out(id + \" J\");\r\n\r\n    return this;\r\n  };\r\n\r\n  var lineJoinID = 0;\r\n  /**\r\n   * Sets the line join styles.\r\n   * See {jsPDF.CapJoinStyles} for variants.\r\n   *\r\n   * @param {String|Number} style A string or number identifying the type of line join.\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name setLineJoin\r\n   */\r\n  API.__private__.setLineJoin = API.setLineJoin = function(style) {\r\n    var id = API.CapJoinStyles[style];\r\n    if (id === undefined) {\r\n      throw new Error(\r\n        \"Line join style of '\" +\r\n          style +\r\n          \"' is not recognized. See or extend .CapJoinStyles property for valid styles\"\r\n      );\r\n    }\r\n    lineJoinID = id;\r\n    out(id + \" j\");\r\n\r\n    return this;\r\n  };\r\n\r\n  var miterLimit;\r\n  /**\r\n   * Sets the miterLimit property, which effects the maximum miter length.\r\n   *\r\n   * @param {number} length The length of the miter\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name setLineMiterLimit\r\n   */\r\n  API.__private__.setLineMiterLimit = API.__private__.setMiterLimit = API.setLineMiterLimit = API.setMiterLimit = function(\r\n    length\r\n  ) {\r\n    length = length || 0;\r\n    if (isNaN(length)) {\r\n      throw new Error(\"Invalid argument passed to jsPDF.setLineMiterLimit\");\r\n    }\r\n    out(hpf(scale(length)) + \" M\");\r\n\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * An object representing a pdf graphics state.\r\n   * @class GState\r\n   */\r\n\r\n  /**\r\n   *\r\n   * @param parameters A parameter object that contains all properties this graphics state wants to set.\r\n   * Supported are: opacity, stroke-opacity\r\n   * @constructor\r\n   */\r\n  API.GState = GState;\r\n\r\n  /**\r\n   * Sets a either previously added {@link GState} (via {@link addGState}) or a new {@link GState}.\r\n   * @param {String|GState} gState If type is string, a previously added GState is used, if type is GState\r\n   * it will be added before use.\r\n   * @function\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name setGState\r\n   */\r\n  API.setGState = function(gState) {\r\n    if (typeof gState === \"string\") {\r\n      gState = gStates[gStatesMap[gState]];\r\n    } else {\r\n      gState = addGState(null, gState);\r\n    }\r\n\r\n    if (!gState.equals(activeGState)) {\r\n      out(\"/\" + gState.id + \" gs\");\r\n      activeGState = gState;\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Adds a new Graphics State. Duplicates are automatically eliminated.\r\n   * @param {String} key Might also be null, if no later reference to this gState is needed\r\n   * @param {Object} gState The gState object\r\n   */\r\n  var addGState = function(key, gState) {\r\n    // only add it if it is not already present (the keys provided by the user must be unique!)\r\n    if (key && gStatesMap[key]) return;\r\n    var duplicate = false;\r\n    for (var s in gStates) {\r\n      if (gStates.hasOwnProperty(s)) {\r\n        if (gStates[s].equals(gState)) {\r\n          duplicate = true;\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (duplicate) {\r\n      gState = gStates[s];\r\n    } else {\r\n      var gStateKey = \"GS\" + (Object.keys(gStates).length + 1).toString(10);\r\n      gStates[gStateKey] = gState;\r\n      gState.id = gStateKey;\r\n    }\r\n\r\n    // several user keys may point to the same GState object\r\n    key && (gStatesMap[key] = gState.id);\r\n\r\n    events.publish(\"addGState\", gState);\r\n\r\n    return gState;\r\n  };\r\n\r\n  /**\r\n   * Adds a new {@link GState} for later use. See {@link setGState}.\r\n   * @param {String} key\r\n   * @param {GState} gState\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   *\r\n   * @memberof jsPDF#\r\n   * @name addGState\r\n   */\r\n  API.addGState = function(key, gState) {\r\n    addGState(key, gState);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Saves the current graphics state (\"pushes it on the stack\"). It can be restored by {@link restoreGraphicsState}\r\n   * later. Here, the general pdf graphics state is meant, also including the current transformation matrix,\r\n   * fill and stroke colors etc.\r\n   * @function\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name saveGraphicsState\r\n   */\r\n  API.saveGraphicsState = function() {\r\n    out(\"q\");\r\n    // as we cannot set font key and size independently we must keep track of both\r\n    fontStateStack.push({\r\n      key: activeFontKey,\r\n      size: activeFontSize,\r\n      color: textColor\r\n    });\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Restores a previously saved graphics state saved by {@link saveGraphicsState} (\"pops the stack\").\r\n   * @function\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name restoreGraphicsState\r\n   */\r\n  API.restoreGraphicsState = function() {\r\n    out(\"Q\");\r\n\r\n    // restore previous font state\r\n    var fontState = fontStateStack.pop();\r\n    activeFontKey = fontState.key;\r\n    activeFontSize = fontState.size;\r\n    textColor = fontState.color;\r\n\r\n    activeGState = null;\r\n\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Appends this matrix to the left of all previously applied matrices.\r\n   *\r\n   * @param {Matrix} matrix\r\n   * @function\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name setCurrentTransformationMatrix\r\n   */\r\n  API.setCurrentTransformationMatrix = function(matrix) {\r\n    out(matrix.toString() + \" cm\");\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Inserts a debug comment into the generated pdf.\r\n   * @function\r\n   * @instance\r\n   * @param {String} text\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name comment\r\n   */\r\n  API.comment = function(text) {\r\n    out(\"#\" + text);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Point\r\n   */\r\n  var Point = function(x, y) {\r\n    var _x = x || 0;\r\n    Object.defineProperty(this, \"x\", {\r\n      enumerable: true,\r\n      get: function() {\r\n        return _x;\r\n      },\r\n      set: function(value) {\r\n        if (!isNaN(value)) {\r\n          _x = parseFloat(value);\r\n        }\r\n      }\r\n    });\r\n\r\n    var _y = y || 0;\r\n    Object.defineProperty(this, \"y\", {\r\n      enumerable: true,\r\n      get: function() {\r\n        return _y;\r\n      },\r\n      set: function(value) {\r\n        if (!isNaN(value)) {\r\n          _y = parseFloat(value);\r\n        }\r\n      }\r\n    });\r\n\r\n    var _type = \"pt\";\r\n    Object.defineProperty(this, \"type\", {\r\n      enumerable: true,\r\n      get: function() {\r\n        return _type;\r\n      },\r\n      set: function(value) {\r\n        _type = value.toString();\r\n      }\r\n    });\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Rectangle\r\n   */\r\n  var Rectangle = function(x, y, w, h) {\r\n    Point.call(this, x, y);\r\n    this.type = \"rect\";\r\n\r\n    var _w = w || 0;\r\n    Object.defineProperty(this, \"w\", {\r\n      enumerable: true,\r\n      get: function() {\r\n        return _w;\r\n      },\r\n      set: function(value) {\r\n        if (!isNaN(value)) {\r\n          _w = parseFloat(value);\r\n        }\r\n      }\r\n    });\r\n\r\n    var _h = h || 0;\r\n    Object.defineProperty(this, \"h\", {\r\n      enumerable: true,\r\n      get: function() {\r\n        return _h;\r\n      },\r\n      set: function(value) {\r\n        if (!isNaN(value)) {\r\n          _h = parseFloat(value);\r\n        }\r\n      }\r\n    });\r\n\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * FormObject/RenderTarget\r\n   */\r\n\r\n  var RenderTarget = function() {\r\n    this.page = page;\r\n    this.currentPage = currentPage;\r\n    this.pages = pages.slice(0);\r\n    this.pagesContext = pagesContext.slice(0);\r\n    this.x = pageX;\r\n    this.y = pageY;\r\n    this.matrix = pageMatrix;\r\n    this.width = getPageWidth(currentPage);\r\n    this.height = getPageHeight(currentPage);\r\n    this.outputDestination = outputDestination;\r\n\r\n    this.id = \"\"; // set by endFormObject()\r\n    this.objectNumber = -1; // will be set by putXObject()\r\n  };\r\n\r\n  RenderTarget.prototype.restore = function() {\r\n    page = this.page;\r\n    currentPage = this.currentPage;\r\n    pagesContext = this.pagesContext;\r\n    pages = this.pages;\r\n    pageX = this.x;\r\n    pageY = this.y;\r\n    pageMatrix = this.matrix;\r\n    setPageWidth(currentPage, this.width);\r\n    setPageHeight(currentPage, this.height);\r\n    outputDestination = this.outputDestination;\r\n  };\r\n\r\n  var beginNewRenderTarget = function(x, y, width, height, matrix) {\r\n    // save current state\r\n    renderTargetStack.push(new RenderTarget());\r\n\r\n    // clear pages\r\n    page = currentPage = 0;\r\n    pages = [];\r\n    pageX = x;\r\n    pageY = y;\r\n\r\n    pageMatrix = matrix;\r\n\r\n    beginPage([width, height]);\r\n  };\r\n\r\n  var endFormObject = function(key) {\r\n    // only add it if it is not already present (the keys provided by the user must be unique!)\r\n    if (renderTargetMap[key]) {\r\n      renderTargetStack.pop().restore();\r\n      return;\r\n    }\r\n\r\n    // save the created xObject\r\n    var newXObject = new RenderTarget();\r\n\r\n    var xObjectId = \"Xo\" + (Object.keys(renderTargets).length + 1).toString(10);\r\n    newXObject.id = xObjectId;\r\n\r\n    renderTargetMap[key] = xObjectId;\r\n    renderTargets[xObjectId] = newXObject;\r\n\r\n    events.publish(\"addFormObject\", newXObject);\r\n\r\n    // restore state from stack\r\n    renderTargetStack.pop().restore();\r\n  };\r\n\r\n  /**\r\n   * Starts a new pdf form object, which means that all consequent draw calls target a new independent object\r\n   * until {@link endFormObject} is called. The created object can be referenced and drawn later using\r\n   * {@link doFormObject}. Nested form objects are possible.\r\n   * x, y, width, height set the bounding box that is used to clip the content.\r\n   *\r\n   * @param {number} x\r\n   * @param {number} y\r\n   * @param {number} width\r\n   * @param {number} height\r\n   * @param {Matrix} matrix The matrix that will be applied to convert the form objects coordinate system to\r\n   * the parent's.\r\n   * @function\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name beginFormObject\r\n   */\r\n  API.beginFormObject = function(x, y, width, height, matrix) {\r\n    // The user can set the output target to a new form object. Nested form objects are possible.\r\n    // Currently, they use the resource dictionary of the surrounding stream. This should be changed, as\r\n    // the PDF-Spec states:\r\n    // \"In PDF 1.2 and later versions, form XObjects may be independent of the content streams in which\r\n    // they appear, and this is strongly recommended although not requiredIn PDF 1.2 and later versions,\r\n    // form XObjects may be independent of the content streams in which they appear, and this is strongly\r\n    // recommended although not required\"\r\n    beginNewRenderTarget(x, y, width, height, matrix);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Completes and saves the form object.\r\n   * @param {String} key The key by which this form object can be referenced.\r\n   * @function\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name endFormObject\r\n   */\r\n  API.endFormObject = function(key) {\r\n    endFormObject(key);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Draws the specified form object by referencing to the respective pdf XObject created with\r\n   * {@link API.beginFormObject} and {@link endFormObject}.\r\n   * The location is determined by matrix.\r\n   *\r\n   * @param {String} key The key to the form object.\r\n   * @param {Matrix} matrix The matrix applied before drawing the form object.\r\n   * @function\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name doFormObject\r\n   */\r\n  API.doFormObject = function(key, matrix) {\r\n    var xObject = renderTargets[renderTargetMap[key]];\r\n    out(\"q\");\r\n    out(matrix.toString() + \" cm\");\r\n    out(\"/\" + xObject.id + \" Do\");\r\n    out(\"Q\");\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Returns the form object specified by key.\r\n   * @param key {String}\r\n   * @returns {{x: number, y: number, width: number, height: number, matrix: Matrix}}\r\n   * @function\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name getFormObject\r\n   */\r\n  API.getFormObject = function(key) {\r\n    var xObject = renderTargets[renderTargetMap[key]];\r\n    return {\r\n      x: xObject.x,\r\n      y: xObject.y,\r\n      width: xObject.width,\r\n      height: xObject.height,\r\n      matrix: xObject.matrix\r\n    };\r\n  };\r\n\r\n  /**\r\n   * Saves as PDF document. An alias of jsPDF.output('save', 'filename.pdf').\r\n   * Uses FileSaver.js-method saveAs.\r\n   *\r\n   * @memberof jsPDF#\r\n   * @name save\r\n   * @function\r\n   * @instance\r\n   * @param  {string} filename The filename including extension.\r\n   * @param  {Object} options An Object with additional options, possible options: 'returnPromise'.\r\n   * @returns {jsPDF|Promise} jsPDF-instance     */\r\n  API.save = function(filename, options) {\r\n    filename = filename || \"generated.pdf\";\r\n\r\n    options = options || {};\r\n    options.returnPromise = options.returnPromise || false;\r\n\r\n    if (options.returnPromise === false) {\r\n      saveAs(getBlob(buildDocument()), filename);\r\n      if (typeof saveAs.unload === \"function\") {\r\n        if (globalObject.setTimeout) {\r\n          setTimeout(saveAs.unload, 911);\r\n        }\r\n      }\r\n      return this;\r\n    } else {\r\n      return new Promise(function(resolve, reject) {\r\n        try {\r\n          var result = saveAs(getBlob(buildDocument()), filename);\r\n          if (typeof saveAs.unload === \"function\") {\r\n            if (globalObject.setTimeout) {\r\n              setTimeout(saveAs.unload, 911);\r\n            }\r\n          }\r\n          resolve(result);\r\n        } catch (e) {\r\n          reject(e.message);\r\n        }\r\n      });\r\n    }\r\n\r\n  };\r\n\r\n  // applying plugins (more methods) ON TOP of built-in API.\r\n  // this is intentional as we allow plugins to override\r\n  // built-ins\r\n  for (var plugin in jsPDF.API) {\r\n    if (jsPDF.API.hasOwnProperty(plugin)) {\r\n      if (plugin === \"events\" && jsPDF.API.events.length) {\r\n        (function(events, newEvents) {\r\n          // jsPDF.API.events is a JS Array of Arrays\r\n          // where each Array is a pair of event name, handler\r\n          // Events were added by plugins to the jsPDF instantiator.\r\n          // These are always added to the new instance and some ran\r\n          // during instantiation.\r\n          var eventname, handler_and_args, i;\r\n\r\n          for (i = newEvents.length - 1; i !== -1; i--) {\r\n            // subscribe takes 3 args: 'topic', function, runonce_flag\r\n            // if undefined, runonce is false.\r\n            // users can attach callback directly,\r\n            // or they can attach an array with [callback, runonce_flag]\r\n            // that's what the \"apply\" magic is for below.\r\n            eventname = newEvents[i][0];\r\n            handler_and_args = newEvents[i][1];\r\n            events.subscribe.apply(\r\n              events,\r\n              [eventname].concat(\r\n                typeof handler_and_args === \"function\"\r\n                  ? [handler_and_args]\r\n                  : handler_and_args\r\n              )\r\n            );\r\n          }\r\n        })(events, jsPDF.API.events);\r\n      } else {\r\n        API[plugin] = jsPDF.API[plugin];\r\n      }\r\n    }\r\n  }\r\n\r\n  var getPageWidth = (API.getPageWidth = function(pageNumber) {\r\n    pageNumber = pageNumber || currentPage;\r\n    return (\r\n      (pagesContext[pageNumber].mediaBox.topRightX -\r\n        pagesContext[pageNumber].mediaBox.bottomLeftX) /\r\n      scaleFactor\r\n    );\r\n  });\r\n\r\n  var setPageWidth = (API.setPageWidth = function(pageNumber, value) {\r\n    pagesContext[pageNumber].mediaBox.topRightX =\r\n      value * scaleFactor + pagesContext[pageNumber].mediaBox.bottomLeftX;\r\n  });\r\n\r\n  var getPageHeight = (API.getPageHeight = function(pageNumber) {\r\n    pageNumber = pageNumber || currentPage;\r\n    return (\r\n      (pagesContext[pageNumber].mediaBox.topRightY -\r\n        pagesContext[pageNumber].mediaBox.bottomLeftY) /\r\n      scaleFactor\r\n    );\r\n  });\r\n\r\n  var setPageHeight = (API.setPageHeight = function(pageNumber, value) {\r\n    pagesContext[pageNumber].mediaBox.topRightY =\r\n      value * scaleFactor + pagesContext[pageNumber].mediaBox.bottomLeftY;\r\n  });\r\n\r\n  /**\r\n   * Object exposing internal API to plugins\r\n   * @public\r\n   * @ignore\r\n   */\r\n  API.internal = {\r\n    pdfEscape: pdfEscape,\r\n    getStyle: getStyle,\r\n    getFont: getFontEntry,\r\n    getFontSize: getFontSize,\r\n    getCharSpace: getCharSpace,\r\n    getTextColor: getTextColor,\r\n    getLineHeight: getLineHeight,\r\n    getLineHeightFactor: getLineHeightFactor,\r\n    getLineWidth: getLineWidth,\r\n    write: write,\r\n    getHorizontalCoordinate: getHorizontalCoordinate,\r\n    getVerticalCoordinate: getVerticalCoordinate,\r\n    getCoordinateString: getHorizontalCoordinateString,\r\n    getVerticalCoordinateString: getVerticalCoordinateString,\r\n    collections: {},\r\n    newObject: newObject,\r\n    newAdditionalObject: newAdditionalObject,\r\n    newObjectDeferred: newObjectDeferred,\r\n    newObjectDeferredBegin: newObjectDeferredBegin,\r\n    getFilters: getFilters,\r\n    putStream: putStream,\r\n    events: events,\r\n    scaleFactor: scaleFactor,\r\n    pageSize: {\r\n      getWidth: function() {\r\n        return getPageWidth(currentPage);\r\n      },\r\n      setWidth: function(value) {\r\n        setPageWidth(currentPage, value);\r\n      },\r\n      getHeight: function() {\r\n        return getPageHeight(currentPage);\r\n      },\r\n      setHeight: function(value) {\r\n        setPageHeight(currentPage, value);\r\n      }\r\n    },\r\n    encryptionOptions: encryptionOptions,\r\n    encryption: encryption,\r\n    getEncryptor: getEncryptor,\r\n    output: output,\r\n    getNumberOfPages: getNumberOfPages,\r\n    pages: pages,\r\n    out: out,\r\n    f2: f2,\r\n    f3: f3,\r\n    getPageInfo: getPageInfo,\r\n    getPageInfoByObjId: getPageInfoByObjId,\r\n    getCurrentPageInfo: getCurrentPageInfo,\r\n    getPDFVersion: getPdfVersion,\r\n    Point: Point,\r\n    Rectangle: Rectangle,\r\n    Matrix: Matrix,\r\n    hasHotfix: hasHotfix //Expose the hasHotfix check so plugins can also check them.\r\n  };\r\n\r\n  Object.defineProperty(API.internal.pageSize, \"width\", {\r\n    get: function() {\r\n      return getPageWidth(currentPage);\r\n    },\r\n    set: function(value) {\r\n      setPageWidth(currentPage, value);\r\n    },\r\n    enumerable: true,\r\n    configurable: true\r\n  });\r\n  Object.defineProperty(API.internal.pageSize, \"height\", {\r\n    get: function() {\r\n      return getPageHeight(currentPage);\r\n    },\r\n    set: function(value) {\r\n      setPageHeight(currentPage, value);\r\n    },\r\n    enumerable: true,\r\n    configurable: true\r\n  });\r\n\r\n  //////////////////////////////////////////////////////\r\n  // continuing initialization of jsPDF Document object\r\n  //////////////////////////////////////////////////////\r\n  // Add the first page automatically\r\n  addFonts.call(API, standardFonts);\r\n  activeFontKey = \"F1\";\r\n  _addPage(format, orientation);\r\n\r\n  events.publish(\"initialized\");\r\n  return API;\r\n}\r\n\r\n/**\r\n * jsPDF.API is a STATIC property of jsPDF class.\r\n * jsPDF.API is an object you can add methods and properties to.\r\n * The methods / properties you add will show up in new jsPDF objects.\r\n *\r\n * One property is prepopulated. It is the 'events' Object. Plugin authors can add topics,\r\n * callbacks to this object. These will be reassigned to all new instances of jsPDF.\r\n *\r\n * @static\r\n * @public\r\n * @memberof jsPDF#\r\n * @name API\r\n *\r\n * @example\r\n * jsPDF.API.mymethod = function(){\r\n *   // 'this' will be ref to internal API object. see jsPDF source\r\n *   // , so you can refer to built-in methods like so:\r\n *   //     this.line(....)\r\n *   //     this.text(....)\r\n * }\r\n * var pdfdoc = new jsPDF()\r\n * pdfdoc.mymethod() // <- !!!!!!\r\n */\r\njsPDF.API = {\r\n  events: []\r\n};\r\n/**\r\n * The version of jsPDF.\r\n * @name version\r\n * @type {string}\r\n * @memberof jsPDF#\r\n */\r\njsPDF.version = \"0.0.0\";\r\n\r\nexport { jsPDF, ShadingPattern, TilingPattern, GState };\r\nexport default jsPDF;\r\n","/* global jsPDF */\n/**\n * @license\n * Copyright (c) 2016 Alexander Weidt,\n * https://github.com/BiggA94\n *\n * Licensed under the MIT License. http://opensource.org/licenses/mit-license\n */\n\n/**\n * jsPDF AcroForm Plugin\n * @module AcroForm\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\nvar jsPDFAPI = jsPDF.API;\nvar scaleFactor = 1;\n\nvar pdfEscape = function(value) {\n  return value\n    .replace(/\\\\/g, \"\\\\\\\\\")\n    .replace(/\\(/g, \"\\\\(\")\n    .replace(/\\)/g, \"\\\\)\");\n};\nvar pdfUnescape = function(value) {\n  return value\n    .replace(/\\\\\\\\/g, \"\\\\\")\n    .replace(/\\\\\\(/g, \"(\")\n    .replace(/\\\\\\)/g, \")\");\n};\n\nvar f2 = function(number) {\n  return number.toFixed(2); // Ie, %.2f\n};\n\nvar f5 = function(number) {\n  return number.toFixed(5); // Ie, %.2f\n};\n\njsPDFAPI.__acroform__ = {};\nvar inherit = function(child, parent) {\n  child.prototype = Object.create(parent.prototype);\n  child.prototype.constructor = child;\n};\n\nvar scale = function(x) {\n  return x * scaleFactor;\n};\n\nvar createFormXObject = function(formObject) {\n  var xobj = new AcroFormXObject();\n  var height = AcroFormAppearance.internal.getHeight(formObject) || 0;\n  var width = AcroFormAppearance.internal.getWidth(formObject) || 0;\n  xobj.BBox = [0, 0, Number(f2(width)), Number(f2(height))];\n  return xobj;\n};\n\n/**\n * Bit-Operations\n */\nvar setBit = (jsPDFAPI.__acroform__.setBit = function(number, bitPosition) {\n  number = number || 0;\n  bitPosition = bitPosition || 0;\n\n  if (isNaN(number) || isNaN(bitPosition)) {\n    throw new Error(\n      \"Invalid arguments passed to jsPDF.API.__acroform__.setBit\"\n    );\n  }\n  var bitMask = 1 << bitPosition;\n\n  number |= bitMask;\n\n  return number;\n});\n\nvar clearBit = (jsPDFAPI.__acroform__.clearBit = function(number, bitPosition) {\n  number = number || 0;\n  bitPosition = bitPosition || 0;\n\n  if (isNaN(number) || isNaN(bitPosition)) {\n    throw new Error(\n      \"Invalid arguments passed to jsPDF.API.__acroform__.clearBit\"\n    );\n  }\n  var bitMask = 1 << bitPosition;\n\n  number &= ~bitMask;\n\n  return number;\n});\n\nvar getBit = (jsPDFAPI.__acroform__.getBit = function(number, bitPosition) {\n  if (isNaN(number) || isNaN(bitPosition)) {\n    throw new Error(\n      \"Invalid arguments passed to jsPDF.API.__acroform__.getBit\"\n    );\n  }\n  return (number & (1 << bitPosition)) === 0 ? 0 : 1;\n});\n\n/*\n * Ff starts counting the bit position at 1 and not like javascript at 0\n */\nvar getBitForPdf = (jsPDFAPI.__acroform__.getBitForPdf = function(\n  number,\n  bitPosition\n) {\n  if (isNaN(number) || isNaN(bitPosition)) {\n    throw new Error(\n      \"Invalid arguments passed to jsPDF.API.__acroform__.getBitForPdf\"\n    );\n  }\n  return getBit(number, bitPosition - 1);\n});\n\nvar setBitForPdf = (jsPDFAPI.__acroform__.setBitForPdf = function(\n  number,\n  bitPosition\n) {\n  if (isNaN(number) || isNaN(bitPosition)) {\n    throw new Error(\n      \"Invalid arguments passed to jsPDF.API.__acroform__.setBitForPdf\"\n    );\n  }\n  return setBit(number, bitPosition - 1);\n});\n\nvar clearBitForPdf = (jsPDFAPI.__acroform__.clearBitForPdf = function(\n  number,\n  bitPosition\n) {\n  if (isNaN(number) || isNaN(bitPosition)) {\n    throw new Error(\n      \"Invalid arguments passed to jsPDF.API.__acroform__.clearBitForPdf\"\n    );\n  }\n  return clearBit(number, bitPosition - 1);\n});\n\nvar calculateCoordinates = (jsPDFAPI.__acroform__.calculateCoordinates = function(\n  args,\n  scope\n) {\n  var getHorizontalCoordinate = scope.internal.getHorizontalCoordinate;\n  var getVerticalCoordinate = scope.internal.getVerticalCoordinate;\n  var x = args[0];\n  var y = args[1];\n  var w = args[2];\n  var h = args[3];\n\n  var coordinates = {};\n\n  coordinates.lowerLeft_X = getHorizontalCoordinate(x) || 0;\n  coordinates.lowerLeft_Y = getVerticalCoordinate(y + h) || 0;\n  coordinates.upperRight_X = getHorizontalCoordinate(x + w) || 0;\n  coordinates.upperRight_Y = getVerticalCoordinate(y) || 0;\n\n  return [\n    Number(f2(coordinates.lowerLeft_X)),\n    Number(f2(coordinates.lowerLeft_Y)),\n    Number(f2(coordinates.upperRight_X)),\n    Number(f2(coordinates.upperRight_Y))\n  ];\n});\n\nvar calculateAppearanceStream = function(formObject) {\n  if (formObject.appearanceStreamContent) {\n    return formObject.appearanceStreamContent;\n  }\n\n  if (!formObject.V && !formObject.DV) {\n    return;\n  }\n\n  // else calculate it\n\n  var stream = [];\n  var text = formObject._V || formObject.DV;\n  var calcRes = calculateX(formObject, text);\n  var fontKey = formObject.scope.internal.getFont(\n    formObject.fontName,\n    formObject.fontStyle\n  ).id;\n\n  //PDF 32000-1:2008, page 444\n  stream.push(\"/Tx BMC\");\n  stream.push(\"q\");\n  stream.push(\"BT\"); // Begin Text\n  stream.push(formObject.scope.__private__.encodeColorString(formObject.color));\n  stream.push(\"/\" + fontKey + \" \" + f2(calcRes.fontSize) + \" Tf\");\n  stream.push(\"1 0 0 1 0 0 Tm\"); // Transformation Matrix\n  stream.push(calcRes.text);\n  stream.push(\"ET\"); // End Text\n  stream.push(\"Q\");\n  stream.push(\"EMC\");\n\n  var appearanceStreamContent = createFormXObject(formObject);\n  appearanceStreamContent.scope = formObject.scope;\n  appearanceStreamContent.stream = stream.join(\"\\n\");\n  return appearanceStreamContent;\n};\n\nvar calculateX = function(formObject, text) {\n  var maxFontSize =\n    formObject.fontSize === 0 ? formObject.maxFontSize : formObject.fontSize;\n  var returnValue = {\n    text: \"\",\n    fontSize: \"\"\n  };\n  // Remove Brackets\n  text = text.substr(0, 1) == \"(\" ? text.substr(1) : text;\n  text =\n    text.substr(text.length - 1) == \")\"\n      ? text.substr(0, text.length - 1)\n      : text;\n  // split into array of words\n  var textSplit = text.split(\" \");\n  if (formObject.multiline) {\n    textSplit = textSplit.map(word => word.split(\"\\n\"));\n  } else {\n    textSplit = textSplit.map(word => [word]);\n  }\n\n  var fontSize = maxFontSize; // The Starting fontSize (The Maximum)\n  var lineSpacing = 2;\n  var borderPadding = 2;\n\n  var height = AcroFormAppearance.internal.getHeight(formObject) || 0;\n  height = height < 0 ? -height : height;\n  var width = AcroFormAppearance.internal.getWidth(formObject) || 0;\n  width = width < 0 ? -width : width;\n\n  var isSmallerThanWidth = function(i, lastLine, fontSize) {\n    if (i + 1 < textSplit.length) {\n      var tmp = lastLine + \" \" + textSplit[i + 1][0];\n      var TextWidth = calculateFontSpace(tmp, formObject, fontSize).width;\n      var FieldWidth = width - 2 * borderPadding;\n      return TextWidth <= FieldWidth;\n    } else {\n      return false;\n    }\n  };\n\n  fontSize++;\n  FontSize: while (fontSize > 0) {\n    text = \"\";\n    fontSize--;\n    var textHeight = calculateFontSpace(\"3\", formObject, fontSize).height;\n    var startY = formObject.multiline\n      ? height - fontSize\n      : (height - textHeight) / 2;\n    startY += lineSpacing;\n    var startX;\n\n    var lastY = startY;\n    var firstWordInLine = 0,\n      lastWordInLine = 0;\n    var lastLength;\n    var currWord = 0;\n\n    if (fontSize <= 0) {\n      // In case, the Text doesn't fit at all\n      fontSize = 12;\n      text = \"(...) Tj\\n\";\n      text +=\n        \"% Width of Text: \" +\n        calculateFontSpace(text, formObject, fontSize).width +\n        \", FieldWidth:\" +\n        width +\n        \"\\n\";\n      break;\n    }\n\n    var lastLine = \"\";\n    var lineCount = 0;\n    Line: for (var i = 0; i < textSplit.length; i++) {\n      if (textSplit.hasOwnProperty(i)) {\n        let isWithNewLine = false;\n        if (textSplit[i].length !== 1 && currWord !== textSplit[i].length - 1) {\n          if (\n            (textHeight + lineSpacing) * (lineCount + 2) + lineSpacing >\n            height\n          ) {\n            continue FontSize;\n          }\n\n          lastLine += textSplit[i][currWord];\n          isWithNewLine = true;\n          lastWordInLine = i;\n          i--;\n        } else {\n          lastLine += textSplit[i][currWord] + \" \";\n          lastLine =\n            lastLine.substr(lastLine.length - 1) == \" \"\n              ? lastLine.substr(0, lastLine.length - 1)\n              : lastLine;\n          var key = parseInt(i);\n          var nextLineIsSmaller = isSmallerThanWidth(key, lastLine, fontSize);\n          var isLastWord = i >= textSplit.length - 1;\n\n          if (nextLineIsSmaller && !isLastWord) {\n            lastLine += \" \";\n            currWord = 0;\n            continue; // Line\n          } else if (!nextLineIsSmaller && !isLastWord) {\n            if (!formObject.multiline) {\n              continue FontSize;\n            } else {\n              if (\n                (textHeight + lineSpacing) * (lineCount + 2) + lineSpacing >\n                height\n              ) {\n                // If the Text is higher than the\n                // FieldObject\n                continue FontSize;\n              }\n              lastWordInLine = key;\n              // go on\n            }\n          } else if (isLastWord) {\n            lastWordInLine = key;\n          } else {\n            if (\n              formObject.multiline &&\n              (textHeight + lineSpacing) * (lineCount + 2) + lineSpacing >\n                height\n            ) {\n              // If the Text is higher than the FieldObject\n              continue FontSize;\n            }\n          }\n        }\n        // Remove last blank\n\n        var line = \"\";\n\n        for (var x = firstWordInLine; x <= lastWordInLine; x++) {\n          var currLine = textSplit[x];\n          if (formObject.multiline) {\n            if (x === lastWordInLine) {\n              line += currLine[currWord] + \" \";\n              currWord = (currWord + 1) % currLine.length;\n              continue;\n            }\n            if (x === firstWordInLine) {\n              line += currLine[currLine.length - 1] + \" \";\n              continue;\n            }\n          }\n          line += currLine[0] + \" \";\n        }\n\n        // Remove last blank\n        line =\n          line.substr(line.length - 1) == \" \"\n            ? line.substr(0, line.length - 1)\n            : line;\n        // lastLength -= blankSpace.width;\n        lastLength = calculateFontSpace(line, formObject, fontSize).width;\n\n        // Calculate startX\n        switch (formObject.textAlign) {\n          case \"right\":\n            startX = width - lastLength - borderPadding;\n            break;\n          case \"center\":\n            startX = (width - lastLength) / 2;\n            break;\n          case \"left\":\n          default:\n            startX = borderPadding;\n            break;\n        }\n        text += f2(startX) + \" \" + f2(lastY) + \" Td\\n\";\n        text += \"(\" + pdfEscape(line) + \") Tj\\n\";\n        // reset X in PDF\n        text += -f2(startX) + \" 0 Td\\n\";\n\n        // After a Line, adjust y position\n        lastY = -(fontSize + lineSpacing);\n\n        // Reset for next iteration step\n        lastLength = 0;\n        firstWordInLine = isWithNewLine ? lastWordInLine : lastWordInLine + 1;\n        lineCount++;\n\n        lastLine = \"\";\n        continue Line;\n      }\n    }\n    break;\n  }\n\n  returnValue.text = text;\n  returnValue.fontSize = fontSize;\n\n  return returnValue;\n};\n\n/**\n * Small workaround for calculating the TextMetric approximately.\n *\n * @param text\n * @param fontsize\n * @returns {TextMetrics} (Has Height and Width)\n */\nvar calculateFontSpace = function(text, formObject, fontSize) {\n  var font = formObject.scope.internal.getFont(\n    formObject.fontName,\n    formObject.fontStyle\n  );\n  var width =\n    formObject.scope.getStringUnitWidth(text, {\n      font: font,\n      fontSize: parseFloat(fontSize),\n      charSpace: 0\n    }) * parseFloat(fontSize);\n  var height =\n    formObject.scope.getStringUnitWidth(\"3\", {\n      font: font,\n      fontSize: parseFloat(fontSize),\n      charSpace: 0\n    }) *\n    parseFloat(fontSize) *\n    1.5;\n  return { height: height, width: width };\n};\n\nvar acroformPluginTemplate = {\n  fields: [],\n  xForms: [],\n  /**\n   * acroFormDictionaryRoot contains information about the AcroForm\n   * Dictionary 0: The Event-Token, the AcroFormDictionaryCallback has\n   * 1: The Object ID of the Root\n   */\n  acroFormDictionaryRoot: null,\n  /**\n   * After the PDF gets evaluated, the reference to the root has to be\n   * reset, this indicates, whether the root has already been printed\n   * out\n   */\n  printedOut: false,\n  internal: null,\n  isInitialized: false\n};\n\nvar annotReferenceCallback = function(scope) {\n  //set objId to undefined and force it to get a new objId on buildDocument\n  scope.internal.acroformPlugin.acroFormDictionaryRoot.objId = undefined;\n  var fields = scope.internal.acroformPlugin.acroFormDictionaryRoot.Fields;\n  for (var i in fields) {\n    if (fields.hasOwnProperty(i)) {\n      var formObject = fields[i];\n      //set objId to undefined and force it to get a new objId on buildDocument\n      formObject.objId = undefined;\n      // add Annot Reference!\n      if (formObject.hasAnnotation) {\n        // If theres an Annotation Widget in the Form Object, put the\n        // Reference in the /Annot array\n        createAnnotationReference(formObject, scope);\n      }\n    }\n  }\n};\n\nvar putForm = function(formObject) {\n  if (formObject.scope.internal.acroformPlugin.printedOut) {\n    formObject.scope.internal.acroformPlugin.printedOut = false;\n    formObject.scope.internal.acroformPlugin.acroFormDictionaryRoot = null;\n  }\n  formObject.scope.internal.acroformPlugin.acroFormDictionaryRoot.Fields.push(\n    formObject\n  );\n};\n/**\n * Create the Reference to the widgetAnnotation, so that it gets referenced\n * in the Annot[] int the+ (Requires the Annotation Plugin)\n */\nvar createAnnotationReference = function(object, scope) {\n  var options = {\n    type: \"reference\",\n    object: object\n  };\n  var findEntry = function(entry) {\n    return entry.type === options.type && entry.object === options.object;\n  };\n  if (\n    scope.internal\n      .getPageInfo(object.page)\n      .pageContext.annotations.find(findEntry) === undefined\n  ) {\n    scope.internal\n      .getPageInfo(object.page)\n      .pageContext.annotations.push(options);\n  }\n};\n\n// Callbacks\n\nvar putCatalogCallback = function(scope) {\n  // Put reference to AcroForm to DocumentCatalog\n  if (\n    typeof scope.internal.acroformPlugin.acroFormDictionaryRoot !== \"undefined\"\n  ) {\n    // for safety, shouldn't normally be the case\n    scope.internal.write(\n      \"/AcroForm \" +\n        scope.internal.acroformPlugin.acroFormDictionaryRoot.objId +\n        \" \" +\n        0 +\n        \" R\"\n    );\n  } else {\n    throw new Error(\"putCatalogCallback: Root missing.\");\n  }\n};\n\n/**\n * Adds /Acroform X 0 R to Document Catalog, and creates the AcroForm\n * Dictionary\n */\nvar AcroFormDictionaryCallback = function(scope) {\n  // Remove event\n  scope.internal.events.unsubscribe(\n    scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID\n  );\n  delete scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID;\n  scope.internal.acroformPlugin.printedOut = true;\n};\n\n/**\n * Creates the single Fields and writes them into the Document\n *\n * If fieldArray is set, use the fields that are inside it instead of the\n * fields from the AcroRoot (for the FormXObjects...)\n */\nvar createFieldCallback = function(fieldArray, scope) {\n  var standardFields = !fieldArray;\n\n  if (!fieldArray) {\n    // in case there is no fieldArray specified, we want to print out\n    // the Fields of the AcroForm\n    // Print out Root\n    scope.internal.newObjectDeferredBegin(\n      scope.internal.acroformPlugin.acroFormDictionaryRoot.objId,\n      true\n    );\n    scope.internal.acroformPlugin.acroFormDictionaryRoot.putStream();\n  }\n\n  fieldArray =\n    fieldArray || scope.internal.acroformPlugin.acroFormDictionaryRoot.Kids;\n\n  for (var i in fieldArray) {\n    if (fieldArray.hasOwnProperty(i)) {\n      var fieldObject = fieldArray[i];\n      var keyValueList = [];\n      var oldRect = fieldObject.Rect;\n\n      if (fieldObject.Rect) {\n        fieldObject.Rect = calculateCoordinates(fieldObject.Rect, scope);\n      }\n\n      // Start Writing the Object\n      scope.internal.newObjectDeferredBegin(fieldObject.objId, true);\n\n      fieldObject.DA = AcroFormAppearance.createDefaultAppearanceStream(\n        fieldObject\n      );\n\n      if (\n        typeof fieldObject === \"object\" &&\n        typeof fieldObject.getKeyValueListForStream === \"function\"\n      ) {\n        keyValueList = fieldObject.getKeyValueListForStream();\n      }\n\n      fieldObject.Rect = oldRect;\n\n      if (\n        fieldObject.hasAppearanceStream &&\n        !fieldObject.appearanceStreamContent\n      ) {\n        // Calculate Appearance\n        var appearance = calculateAppearanceStream(fieldObject);\n        keyValueList.push({ key: \"AP\", value: \"<</N \" + appearance + \">>\" });\n\n        scope.internal.acroformPlugin.xForms.push(appearance);\n      }\n\n      // Assume AppearanceStreamContent is a Array with N,R,D (at least\n      // one of them!)\n      if (fieldObject.appearanceStreamContent) {\n        var appearanceStreamString = \"\";\n        // Iterate over N,R and D\n        for (var k in fieldObject.appearanceStreamContent) {\n          if (fieldObject.appearanceStreamContent.hasOwnProperty(k)) {\n            var value = fieldObject.appearanceStreamContent[k];\n            appearanceStreamString += \"/\" + k + \" \";\n            appearanceStreamString += \"<<\";\n            if (Object.keys(value).length >= 1 || Array.isArray(value)) {\n              // appearanceStream is an Array or Object!\n              for (var i in value) {\n                if (value.hasOwnProperty(i)) {\n                  var obj = value[i];\n                  if (typeof obj === \"function\") {\n                    // if Function is referenced, call it in order\n                    // to get the FormXObject\n                    obj = obj.call(scope, fieldObject);\n                  }\n                  appearanceStreamString += \"/\" + i + \" \" + obj + \" \";\n\n                  // In case the XForm is already used, e.g. OffState\n                  // of CheckBoxes, don't add it\n                  if (!(scope.internal.acroformPlugin.xForms.indexOf(obj) >= 0))\n                    scope.internal.acroformPlugin.xForms.push(obj);\n                }\n              }\n            } else {\n              obj = value;\n              if (typeof obj === \"function\") {\n                // if Function is referenced, call it in order to\n                // get the FormXObject\n                obj = obj.call(scope, fieldObject);\n              }\n              appearanceStreamString += \"/\" + i + \" \" + obj;\n              if (!(scope.internal.acroformPlugin.xForms.indexOf(obj) >= 0))\n                scope.internal.acroformPlugin.xForms.push(obj);\n            }\n            appearanceStreamString += \">>\";\n          }\n        }\n\n        // appearance stream is a normal Object..\n        keyValueList.push({\n          key: \"AP\",\n          value: \"<<\\n\" + appearanceStreamString + \">>\"\n        });\n      }\n\n      scope.internal.putStream({\n        additionalKeyValues: keyValueList,\n        objectId: fieldObject.objId\n      });\n\n      scope.internal.out(\"endobj\");\n    }\n  }\n  if (standardFields) {\n    createXFormObjectCallback(scope.internal.acroformPlugin.xForms, scope);\n  }\n};\n\nvar createXFormObjectCallback = function(fieldArray, scope) {\n  for (var i in fieldArray) {\n    if (fieldArray.hasOwnProperty(i)) {\n      var key = i;\n      var fieldObject = fieldArray[i];\n      // Start Writing the Object\n      scope.internal.newObjectDeferredBegin(fieldObject.objId, true);\n\n      if (\n        typeof fieldObject === \"object\" &&\n        typeof fieldObject.putStream === \"function\"\n      ) {\n        fieldObject.putStream();\n      }\n      delete fieldArray[key];\n    }\n  }\n};\n\nvar initializeAcroForm = function(scope, formObject) {\n  formObject.scope = scope;\n  if (\n    scope.internal !== undefined &&\n    (scope.internal.acroformPlugin === undefined ||\n      scope.internal.acroformPlugin.isInitialized === false)\n  ) {\n    AcroFormField.FieldNum = 0;\n    scope.internal.acroformPlugin = JSON.parse(\n      JSON.stringify(acroformPluginTemplate)\n    );\n    if (scope.internal.acroformPlugin.acroFormDictionaryRoot) {\n      throw new Error(\"Exception while creating AcroformDictionary\");\n    }\n    scaleFactor = scope.internal.scaleFactor;\n    // The Object Number of the AcroForm Dictionary\n    scope.internal.acroformPlugin.acroFormDictionaryRoot = new AcroFormDictionary();\n    scope.internal.acroformPlugin.acroFormDictionaryRoot.scope = scope;\n\n    // add Callback for creating the AcroForm Dictionary\n    scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID = scope.internal.events.subscribe(\n      \"postPutResources\",\n      function() {\n        AcroFormDictionaryCallback(scope);\n      }\n    );\n\n    scope.internal.events.subscribe(\"buildDocument\", function() {\n      annotReferenceCallback(scope);\n    }); // buildDocument\n\n    // Register event, that is triggered when the DocumentCatalog is\n    // written, in order to add /AcroForm\n\n    scope.internal.events.subscribe(\"putCatalog\", function() {\n      putCatalogCallback(scope);\n    });\n\n    // Register event, that creates all Fields\n    scope.internal.events.subscribe(\"postPutPages\", function(fieldArray) {\n      createFieldCallback(fieldArray, scope);\n    });\n\n    scope.internal.acroformPlugin.isInitialized = true;\n  }\n};\n\n//PDF 32000-1:2008, page 26, 7.3.6\nvar arrayToPdfArray = (jsPDFAPI.__acroform__.arrayToPdfArray = function(\n  array,\n  objId,\n  scope\n) {\n  var encryptor = function(data) {\n    return data;\n  };\n  if (Array.isArray(array)) {\n    var content = \"[\";\n    for (var i = 0; i < array.length; i++) {\n      if (i !== 0) {\n        content += \" \";\n      }\n      switch (typeof array[i]) {\n        case \"boolean\":\n        case \"number\":\n        case \"object\":\n          content += array[i].toString();\n          break;\n        case \"string\":\n          if (array[i].substr(0, 1) !== \"/\") {\n            if (typeof objId !== \"undefined\" && scope)\n              encryptor = scope.internal.getEncryptor(objId);\n            content += \"(\" + pdfEscape(encryptor(array[i].toString())) + \")\";\n          } else {\n            content += array[i].toString();\n          }\n          break;\n      }\n    }\n    content += \"]\";\n    return content;\n  }\n  throw new Error(\n    \"Invalid argument passed to jsPDF.__acroform__.arrayToPdfArray\"\n  );\n});\nfunction getMatches(string, regex, index) {\n  index || (index = 1); // default to the first capturing group\n  var matches = [];\n  var match;\n  while ((match = regex.exec(string))) {\n    matches.push(match[index]);\n  }\n  return matches;\n}\nvar pdfArrayToStringArray = function(array) {\n  var result = [];\n  if (typeof array === \"string\") {\n    result = getMatches(array, /\\((.*?)\\)/g);\n  }\n  return result;\n};\n\nvar toPdfString = function(string, objId, scope) {\n  var encryptor = function(data) {\n    return data;\n  };\n  if (typeof objId !== \"undefined\" && scope)\n    encryptor = scope.internal.getEncryptor(objId);\n  string = string || \"\";\n  string.toString();\n  string = \"(\" + pdfEscape(encryptor(string)) + \")\";\n  return string;\n};\n\n// ##########################\n// Classes\n// ##########################\n\n/**\n * @class AcroFormPDFObject\n * @classdesc A AcroFormPDFObject\n */\nvar AcroFormPDFObject = function() {\n  this._objId = undefined;\n  this._scope = undefined;\n\n  /**\n   * @name AcroFormPDFObject#objId\n   * @type {any}\n   */\n  Object.defineProperty(this, \"objId\", {\n    get: function() {\n      if (typeof this._objId === \"undefined\") {\n        if (typeof this.scope === \"undefined\") {\n          return undefined;\n        }\n        this._objId = this.scope.internal.newObjectDeferred();\n      }\n      return this._objId;\n    },\n    set: function(value) {\n      this._objId = value;\n    }\n  });\n  Object.defineProperty(this, \"scope\", {\n    value: this._scope,\n    writable: true\n  });\n};\n\n/**\n * @function AcroFormPDFObject.toString\n */\nAcroFormPDFObject.prototype.toString = function() {\n  return this.objId + \" 0 R\";\n};\n\nAcroFormPDFObject.prototype.putStream = function() {\n  var keyValueList = this.getKeyValueListForStream();\n  this.scope.internal.putStream({\n    data: this.stream,\n    additionalKeyValues: keyValueList,\n    objectId: this.objId\n  });\n  this.scope.internal.out(\"endobj\");\n};\n\n/**\n * Returns an key-value-List of all non-configurable Variables from the Object\n *\n * @name getKeyValueListForStream\n * @returns {string}\n */\nAcroFormPDFObject.prototype.getKeyValueListForStream = function() {\n  var keyValueList = [];\n  var keys = Object.getOwnPropertyNames(this).filter(function(key) {\n    return (\n      key != \"content\" &&\n      key != \"appearanceStreamContent\" &&\n      key != \"scope\" &&\n      key != \"objId\" &&\n      key.substring(0, 1) != \"_\"\n    );\n  });\n\n  for (var i in keys) {\n    if (Object.getOwnPropertyDescriptor(this, keys[i]).configurable === false) {\n      var key = keys[i];\n      var value = this[key];\n\n      if (value) {\n        if (Array.isArray(value)) {\n          keyValueList.push({\n            key: key,\n            value: arrayToPdfArray(value, this.objId, this.scope)\n          });\n        } else if (value instanceof AcroFormPDFObject) {\n          // In case it is a reference to another PDFObject,\n          // take the reference number\n          value.scope = this.scope;\n          keyValueList.push({ key: key, value: value.objId + \" 0 R\" });\n        } else if (typeof value !== \"function\") {\n          keyValueList.push({ key: key, value: value });\n        }\n      }\n    }\n  }\n  return keyValueList;\n};\n\nvar AcroFormXObject = function() {\n  AcroFormPDFObject.call(this);\n\n  Object.defineProperty(this, \"Type\", {\n    value: \"/XObject\",\n    configurable: false,\n    writable: true\n  });\n\n  Object.defineProperty(this, \"Subtype\", {\n    value: \"/Form\",\n    configurable: false,\n    writable: true\n  });\n\n  Object.defineProperty(this, \"FormType\", {\n    value: 1,\n    configurable: false,\n    writable: true\n  });\n\n  var _BBox = [];\n  Object.defineProperty(this, \"BBox\", {\n    configurable: false,\n    get: function() {\n      return _BBox;\n    },\n    set: function(value) {\n      _BBox = value;\n    }\n  });\n\n  Object.defineProperty(this, \"Resources\", {\n    value: \"2 0 R\",\n    configurable: false,\n    writable: true\n  });\n\n  var _stream;\n  Object.defineProperty(this, \"stream\", {\n    enumerable: false,\n    configurable: true,\n    set: function(value) {\n      _stream = value.trim();\n    },\n    get: function() {\n      if (_stream) {\n        return _stream;\n      } else {\n        return null;\n      }\n    }\n  });\n};\n\ninherit(AcroFormXObject, AcroFormPDFObject);\n\nvar AcroFormDictionary = function() {\n  AcroFormPDFObject.call(this);\n\n  var _Kids = [];\n\n  Object.defineProperty(this, \"Kids\", {\n    enumerable: false,\n    configurable: true,\n    get: function() {\n      if (_Kids.length > 0) {\n        return _Kids;\n      } else {\n        return undefined;\n      }\n    }\n  });\n  Object.defineProperty(this, \"Fields\", {\n    enumerable: false,\n    configurable: false,\n    get: function() {\n      return _Kids;\n    }\n  });\n\n  // Default Appearance\n  var _DA;\n  Object.defineProperty(this, \"DA\", {\n    enumerable: false,\n    configurable: false,\n    get: function() {\n      if (!_DA) {\n        return undefined;\n      }\n      var encryptor = function(data) {\n        return data;\n      };\n      if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n      return \"(\" + pdfEscape(encryptor(_DA)) + \")\";\n    },\n    set: function(value) {\n      _DA = value;\n    }\n  });\n};\n\ninherit(AcroFormDictionary, AcroFormPDFObject);\n\n/**\n * The Field Object contains the Variables, that every Field needs\n *\n * @class AcroFormField\n * @classdesc An AcroForm FieldObject\n */\nvar AcroFormField = function() {\n  AcroFormPDFObject.call(this);\n\n  //Annotation-Flag See Table 165\n  var _F = 4;\n  Object.defineProperty(this, \"F\", {\n    enumerable: false,\n    configurable: false,\n    get: function() {\n      return _F;\n    },\n    set: function(value) {\n      if (!isNaN(value)) {\n        _F = value;\n      } else {\n        throw new Error(\n          'Invalid value \"' + value + '\" for attribute F supplied.'\n        );\n      }\n    }\n  });\n\n  /**\n   * (PDF 1.2) If set, print the annotation when the page is printed. If clear, never print the annotation, regardless of wether is is displayed on the screen.\n   * NOTE 2 This can be useful for annotations representing interactive pushbuttons, which would serve no meaningful purpose on the printed page.\n   *\n   * @name AcroFormField#showWhenPrinted\n   * @default true\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"showWhenPrinted\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(_F, 3));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.F = setBitForPdf(_F, 3);\n      } else {\n        this.F = clearBitForPdf(_F, 3);\n      }\n    }\n  });\n\n  var _Ff = 0;\n  Object.defineProperty(this, \"Ff\", {\n    enumerable: false,\n    configurable: false,\n    get: function() {\n      return _Ff;\n    },\n    set: function(value) {\n      if (!isNaN(value)) {\n        _Ff = value;\n      } else {\n        throw new Error(\n          'Invalid value \"' + value + '\" for attribute Ff supplied.'\n        );\n      }\n    }\n  });\n\n  var _Rect = [];\n  Object.defineProperty(this, \"Rect\", {\n    enumerable: false,\n    configurable: false,\n    get: function() {\n      if (_Rect.length === 0) {\n        return undefined;\n      }\n      return _Rect;\n    },\n    set: function(value) {\n      if (typeof value !== \"undefined\") {\n        _Rect = value;\n      } else {\n        _Rect = [];\n      }\n    }\n  });\n\n  /**\n   * The x-position of the field.\n   *\n   * @name AcroFormField#x\n   * @default null\n   * @type {number}\n   */\n  Object.defineProperty(this, \"x\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      if (!_Rect || isNaN(_Rect[0])) {\n        return 0;\n      }\n      return _Rect[0];\n    },\n    set: function(value) {\n      _Rect[0] = value;\n    }\n  });\n\n  /**\n   * The y-position of the field.\n   *\n   * @name AcroFormField#y\n   * @default null\n   * @type {number}\n   */\n  Object.defineProperty(this, \"y\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      if (!_Rect || isNaN(_Rect[1])) {\n        return 0;\n      }\n      return _Rect[1];\n    },\n    set: function(value) {\n      _Rect[1] = value;\n    }\n  });\n\n  /**\n   * The width of the field.\n   *\n   * @name AcroFormField#width\n   * @default null\n   * @type {number}\n   */\n  Object.defineProperty(this, \"width\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      if (!_Rect || isNaN(_Rect[2])) {\n        return 0;\n      }\n      return _Rect[2];\n    },\n    set: function(value) {\n      _Rect[2] = value;\n    }\n  });\n\n  /**\n   * The height of the field.\n   *\n   * @name AcroFormField#height\n   * @default null\n   * @type {number}\n   */\n  Object.defineProperty(this, \"height\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      if (!_Rect || isNaN(_Rect[3])) {\n        return 0;\n      }\n      return _Rect[3];\n    },\n    set: function(value) {\n      _Rect[3] = value;\n    }\n  });\n\n  var _FT = \"\";\n  Object.defineProperty(this, \"FT\", {\n    enumerable: true,\n    configurable: false,\n    get: function() {\n      return _FT;\n    },\n    set: function(value) {\n      switch (value) {\n        case \"/Btn\":\n        case \"/Tx\":\n        case \"/Ch\":\n        case \"/Sig\":\n          _FT = value;\n          break;\n        default:\n          throw new Error(\n            'Invalid value \"' + value + '\" for attribute FT supplied.'\n          );\n      }\n    }\n  });\n\n  var _T = null;\n\n  Object.defineProperty(this, \"T\", {\n    enumerable: true,\n    configurable: false,\n    get: function() {\n      if (!_T || _T.length < 1) {\n        // In case of a Child from a Radio´Group, you don't need a FieldName\n        if (this instanceof AcroFormChildClass) {\n          return undefined;\n        }\n        _T = \"FieldObject\" + AcroFormField.FieldNum++;\n      }\n      var encryptor = function(data) {\n        return data;\n      };\n      if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n      return \"(\" + pdfEscape(encryptor(_T)) + \")\";\n    },\n    set: function(value) {\n      _T = value.toString();\n    }\n  });\n\n  /**\n   * (Optional) The partial field name (see 12.7.3.2, “Field Names”).\n   *\n   * @name AcroFormField#fieldName\n   * @default null\n   * @type {string}\n   */\n  Object.defineProperty(this, \"fieldName\", {\n    configurable: true,\n    enumerable: true,\n    get: function() {\n      return _T;\n    },\n    set: function(value) {\n      _T = value;\n    }\n  });\n\n  var _fontName = \"helvetica\";\n  /**\n   * The fontName of the font to be used.\n   *\n   * @name AcroFormField#fontName\n   * @default 'helvetica'\n   * @type {string}\n   */\n  Object.defineProperty(this, \"fontName\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return _fontName;\n    },\n    set: function(value) {\n      _fontName = value;\n    }\n  });\n\n  var _fontStyle = \"normal\";\n  /**\n   * The fontStyle of the font to be used.\n   *\n   * @name AcroFormField#fontStyle\n   * @default 'normal'\n   * @type {string}\n   */\n  Object.defineProperty(this, \"fontStyle\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return _fontStyle;\n    },\n    set: function(value) {\n      _fontStyle = value;\n    }\n  });\n\n  var _fontSize = 0;\n  /**\n   * The fontSize of the font to be used.\n   *\n   * @name AcroFormField#fontSize\n   * @default 0 (for auto)\n   * @type {number}\n   */\n  Object.defineProperty(this, \"fontSize\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return _fontSize;\n    },\n    set: function(value) {\n      _fontSize = value;\n    }\n  });\n\n  var _maxFontSize = undefined;\n  /**\n   * The maximum fontSize of the font to be used.\n   *\n   * @name AcroFormField#maxFontSize\n   * @default 0 (for auto)\n   * @type {number}\n   */\n  Object.defineProperty(this, \"maxFontSize\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      if (_maxFontSize === undefined) {\n        // use the old default value here - the value is some kind of random as it depends on the scaleFactor (user unit)\n        // (\"50\" is transformed to the \"user space\" but then used in \"pdf space\")\n        return 50 / scaleFactor;\n      } else {\n        return _maxFontSize;\n      }\n    },\n    set: function(value) {\n      _maxFontSize = value;\n    }\n  });\n\n  var _color = \"black\";\n  /**\n   * The color of the text\n   *\n   * @name AcroFormField#color\n   * @default 'black'\n   * @type {string|rgba}\n   */\n  Object.defineProperty(this, \"color\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return _color;\n    },\n    set: function(value) {\n      _color = value;\n    }\n  });\n\n  var _DA = \"/F1 0 Tf 0 g\";\n  // Defines the default appearance (Needed for variable Text)\n  Object.defineProperty(this, \"DA\", {\n    enumerable: true,\n    configurable: false,\n    get: function() {\n      if (\n        !_DA ||\n        this instanceof AcroFormChildClass ||\n        this instanceof AcroFormTextField\n      ) {\n        return undefined;\n      }\n      return toPdfString(_DA, this.objId, this.scope);\n    },\n    set: function(value) {\n      value = value.toString();\n      _DA = value;\n    }\n  });\n\n  var _DV = null;\n  Object.defineProperty(this, \"DV\", {\n    enumerable: false,\n    configurable: false,\n    get: function() {\n      if (!_DV) {\n        return undefined;\n      }\n      if (this instanceof AcroFormButton === false) {\n        return toPdfString(_DV, this.objId, this.scope);\n      }\n      return _DV;\n    },\n    set: function(value) {\n      value = value.toString();\n      if (this instanceof AcroFormButton === false) {\n        if (value.substr(0, 1) === \"(\") {\n          _DV = pdfUnescape(value.substr(1, value.length - 2));\n        } else {\n          _DV = pdfUnescape(value);\n        }\n      } else {\n        _DV = value;\n      }\n    }\n  });\n\n  /**\n   * (Optional; inheritable) The default value to which the field reverts when a reset-form action is executed (see 12.7.5.3, “Reset-Form Action”). The format of this value is the same as that of value.\n   *\n   * @name AcroFormField#defaultValue\n   * @default null\n   * @type {any}\n   */\n  Object.defineProperty(this, \"defaultValue\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      if (this instanceof AcroFormButton === true) {\n        return pdfUnescape(_DV.substr(1, _DV.length - 1));\n      } else {\n        return _DV;\n      }\n    },\n    set: function(value) {\n      value = value.toString();\n      if (this instanceof AcroFormButton === true) {\n        _DV = \"/\" + value;\n      } else {\n        _DV = value;\n      }\n    }\n  });\n\n  var _V = null;\n  Object.defineProperty(this, \"_V\", {\n    enumerable: false,\n    configurable: false,\n    get: function() {\n      if (!_V) {\n        return undefined;\n      }\n      return _V;\n    },\n    set: function(value) {\n      this.V = value;\n    }\n  });\n  Object.defineProperty(this, \"V\", {\n    enumerable: false,\n    configurable: false,\n    get: function() {\n      if (!_V) {\n        return undefined;\n      }\n      if (this instanceof AcroFormButton === false) {\n        return toPdfString(_V, this.objId, this.scope);\n      }\n      return _V;\n    },\n    set: function(value) {\n      value = value.toString();\n      if (this instanceof AcroFormButton === false) {\n        if (value.substr(0, 1) === \"(\") {\n          _V = pdfUnescape(value.substr(1, value.length - 2));\n        } else {\n          _V = pdfUnescape(value);\n        }\n      } else {\n        _V = value;\n      }\n    }\n  });\n\n  /**\n   * (Optional; inheritable) The field’s value, whose format varies depending on the field type. See the descriptions of individual field types for further information.\n   *\n   * @name AcroFormField#value\n   * @default null\n   * @type {any}\n   */\n  Object.defineProperty(this, \"value\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      if (this instanceof AcroFormButton === true) {\n        return pdfUnescape(_V.substr(1, _V.length - 1));\n      } else {\n        return _V;\n      }\n    },\n    set: function(value) {\n      value = value.toString();\n      if (this instanceof AcroFormButton === true) {\n        _V = \"/\" + value;\n      } else {\n        _V = value;\n      }\n    }\n  });\n\n  /**\n   * Check if field has annotations\n   *\n   * @name AcroFormField#hasAnnotation\n   * @readonly\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"hasAnnotation\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return this.Rect;\n    }\n  });\n\n  Object.defineProperty(this, \"Type\", {\n    enumerable: true,\n    configurable: false,\n    get: function() {\n      return this.hasAnnotation ? \"/Annot\" : null;\n    }\n  });\n\n  Object.defineProperty(this, \"Subtype\", {\n    enumerable: true,\n    configurable: false,\n    get: function() {\n      return this.hasAnnotation ? \"/Widget\" : null;\n    }\n  });\n\n  var _hasAppearanceStream = false;\n  /**\n   * true if field has an appearanceStream\n   *\n   * @name AcroFormField#hasAppearanceStream\n   * @readonly\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"hasAppearanceStream\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return _hasAppearanceStream;\n    },\n    set: function(value) {\n      value = Boolean(value);\n      _hasAppearanceStream = value;\n    }\n  });\n\n  /**\n   * The page on which the AcroFormField is placed\n   *\n   * @name AcroFormField#page\n   * @type {number}\n   */\n  var _page;\n  Object.defineProperty(this, \"page\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      if (!_page) {\n        return undefined;\n      }\n      return _page;\n    },\n    set: function(value) {\n      _page = value;\n    }\n  });\n\n  /**\n   * If set, the user may not change the value of the field. Any associated widget annotations will not interact with the user; that is, they will not respond to mouse clicks or change their appearance in response to mouse motions. This flag is useful for fields whose values are computed or imported from a database.\n   *\n   * @name AcroFormField#readOnly\n   * @default false\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"readOnly\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 1));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 1);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 1);\n      }\n    }\n  });\n\n  /**\n   * If set, the field shall have a value at the time it is exported by a submitform action (see 12.7.5.2, “Submit-Form Action”).\n   *\n   * @name AcroFormField#required\n   * @default false\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"required\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 2));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 2);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 2);\n      }\n    }\n  });\n\n  /**\n   * If set, the field shall not be exported by a submit-form action (see 12.7.5.2, “Submit-Form Action”)\n   *\n   * @name AcroFormField#noExport\n   * @default false\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"noExport\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 3));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 3);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 3);\n      }\n    }\n  });\n\n  var _Q = null;\n  Object.defineProperty(this, \"Q\", {\n    enumerable: true,\n    configurable: false,\n    get: function() {\n      if (_Q === null) {\n        return undefined;\n      }\n      return _Q;\n    },\n    set: function(value) {\n      if ([0, 1, 2].indexOf(value) !== -1) {\n        _Q = value;\n      } else {\n        throw new Error(\n          'Invalid value \"' + value + '\" for attribute Q supplied.'\n        );\n      }\n    }\n  });\n\n  /**\n   * (Optional; inheritable) A code specifying the form of quadding (justification) that shall be used in displaying the text:\n   * 'left', 'center', 'right'\n   *\n   * @name AcroFormField#textAlign\n   * @default 'left'\n   * @type {string}\n   */\n  Object.defineProperty(this, \"textAlign\", {\n    get: function() {\n      var result;\n      switch (_Q) {\n        case 0:\n        default:\n          result = \"left\";\n          break;\n        case 1:\n          result = \"center\";\n          break;\n        case 2:\n          result = \"right\";\n          break;\n      }\n      return result;\n    },\n    configurable: true,\n    enumerable: true,\n    set: function(value) {\n      switch (value) {\n        case \"right\":\n        case 2:\n          _Q = 2;\n          break;\n        case \"center\":\n        case 1:\n          _Q = 1;\n          break;\n        case \"left\":\n        case 0:\n        default:\n          _Q = 0;\n      }\n    }\n  });\n};\n\ninherit(AcroFormField, AcroFormPDFObject);\n\n/**\n * @class AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormChoiceField = function() {\n  AcroFormField.call(this);\n  // Field Type = Choice Field\n  this.FT = \"/Ch\";\n  // options\n  this.V = \"()\";\n\n  this.fontName = \"zapfdingbats\";\n  // Top Index\n  var _TI = 0;\n\n  Object.defineProperty(this, \"TI\", {\n    enumerable: true,\n    configurable: false,\n    get: function() {\n      return _TI;\n    },\n    set: function(value) {\n      _TI = value;\n    }\n  });\n\n  /**\n   * (Optional) For scrollable list boxes, the top index (the index in the Opt array of the first option visible in the list). Default value: 0.\n   *\n   * @name AcroFormChoiceField#topIndex\n   * @default 0\n   * @type {number}\n   */\n  Object.defineProperty(this, \"topIndex\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return _TI;\n    },\n    set: function(value) {\n      _TI = value;\n    }\n  });\n\n  var _Opt = [];\n  Object.defineProperty(this, \"Opt\", {\n    enumerable: true,\n    configurable: false,\n    get: function() {\n      return arrayToPdfArray(_Opt, this.objId, this.scope);\n    },\n    set: function(value) {\n      _Opt = pdfArrayToStringArray(value);\n    }\n  });\n\n  /**\n   * @memberof AcroFormChoiceField\n   * @name getOptions\n   * @function\n   * @instance\n   * @returns {array} array of Options\n   */\n  this.getOptions = function() {\n    return _Opt;\n  };\n\n  /**\n   * @memberof AcroFormChoiceField\n   * @name setOptions\n   * @function\n   * @instance\n   * @param {array} value\n   */\n  this.setOptions = function(value) {\n    _Opt = value;\n    if (this.sort) {\n      _Opt.sort();\n    }\n  };\n\n  /**\n   * @memberof AcroFormChoiceField\n   * @name addOption\n   * @function\n   * @instance\n   * @param {string} value\n   */\n  this.addOption = function(value) {\n    value = value || \"\";\n    value = value.toString();\n    _Opt.push(value);\n    if (this.sort) {\n      _Opt.sort();\n    }\n  };\n\n  /**\n   * @memberof AcroFormChoiceField\n   * @name removeOption\n   * @function\n   * @instance\n   * @param {string} value\n   * @param {boolean} allEntries (default: false)\n   */\n  this.removeOption = function(value, allEntries) {\n    allEntries = allEntries || false;\n    value = value || \"\";\n    value = value.toString();\n\n    while (_Opt.indexOf(value) !== -1) {\n      _Opt.splice(_Opt.indexOf(value), 1);\n      if (allEntries === false) {\n        break;\n      }\n    }\n  };\n\n  /**\n   * If set, the field is a combo box; if clear, the field is a list box.\n   *\n   * @name AcroFormChoiceField#combo\n   * @default false\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"combo\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 18));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 18);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 18);\n      }\n    }\n  });\n\n  /**\n   * If set, the combo box shall include an editable text box as well as a drop-down list; if clear, it shall include only a drop-down list. This flag shall be used only if the Combo flag is set.\n   *\n   * @name AcroFormChoiceField#edit\n   * @default false\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"edit\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 19));\n    },\n    set: function(value) {\n      //PDF 32000-1:2008, page 444\n      if (this.combo === true) {\n        if (Boolean(value) === true) {\n          this.Ff = setBitForPdf(this.Ff, 19);\n        } else {\n          this.Ff = clearBitForPdf(this.Ff, 19);\n        }\n      }\n    }\n  });\n\n  /**\n   * If set, the field’s option items shall be sorted alphabetically. This flag is intended for use by writers, not by readers. Conforming readers shall display the options in the order in which they occur in the Opt array (see Table 231).\n   *\n   * @name AcroFormChoiceField#sort\n   * @default false\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"sort\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 20));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 20);\n        _Opt.sort();\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 20);\n      }\n    }\n  });\n\n  /**\n   * (PDF 1.4) If set, more than one of the field’s option items may be selected simultaneously; if clear, at most one item shall be selected\n   *\n   * @name AcroFormChoiceField#multiSelect\n   * @default false\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"multiSelect\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 22));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 22);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 22);\n      }\n    }\n  });\n\n  /**\n   * (PDF 1.4) If set, text entered in the field shall not be spellchecked. This flag shall not be used unless the Combo and Edit flags are both set.\n   *\n   * @name AcroFormChoiceField#doNotSpellCheck\n   * @default false\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"doNotSpellCheck\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 23));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 23);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 23);\n      }\n    }\n  });\n\n  /**\n   * (PDF 1.5) If set, the new value shall be committed as soon as a selection is made (commonly with the pointing device). In this case, supplying a value for a field involves three actions: selecting the field for fill-in, selecting a choice for the fill-in value, and leaving that field, which finalizes or “commits” the data choice and triggers any actions associated with the entry or changing of this data. If this flag is on, then processing does not wait for leaving the field action to occur, but immediately proceeds to the third step.\n   * This option enables applications to perform an action once a selection is made, without requiring the user to exit the field. If clear, the new value is not committed until the user exits the field.\n   *\n   * @name AcroFormChoiceField#commitOnSelChange\n   * @default false\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"commitOnSelChange\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 27));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 27);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 27);\n      }\n    }\n  });\n\n  this.hasAppearanceStream = false;\n};\ninherit(AcroFormChoiceField, AcroFormField);\n\n/**\n * @class AcroFormListBox\n * @extends AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormListBox = function() {\n  AcroFormChoiceField.call(this);\n  this.fontName = \"helvetica\";\n\n  //PDF 32000-1:2008, page 444\n  this.combo = false;\n};\ninherit(AcroFormListBox, AcroFormChoiceField);\n\n/**\n * @class AcroFormComboBox\n * @extends AcroFormListBox\n * @extends AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormComboBox = function() {\n  AcroFormListBox.call(this);\n  this.combo = true;\n};\ninherit(AcroFormComboBox, AcroFormListBox);\n\n/**\n * @class AcroFormEditBox\n * @extends AcroFormComboBox\n * @extends AcroFormListBox\n * @extends AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormEditBox = function() {\n  AcroFormComboBox.call(this);\n  this.edit = true;\n};\ninherit(AcroFormEditBox, AcroFormComboBox);\n\n/**\n * @class AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormButton = function() {\n  AcroFormField.call(this);\n  this.FT = \"/Btn\";\n\n  /**\n   * (Radio buttons only) If set, exactly one radio button shall be selected at all times; selecting the currently selected button has no effect. If clear, clicking the selected button deselects it, leaving no button selected.\n   *\n   * @name AcroFormButton#noToggleToOff\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"noToggleToOff\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 15));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 15);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 15);\n      }\n    }\n  });\n\n  /**\n   * If set, the field is a set of radio buttons; if clear, the field is a checkbox. This flag may be set only if the Pushbutton flag is clear.\n   *\n   * @name AcroFormButton#radio\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"radio\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 16));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 16);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 16);\n      }\n    }\n  });\n\n  /**\n   * If set, the field is a pushbutton that does not retain a permanent value.\n   *\n   * @name AcroFormButton#pushButton\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"pushButton\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 17));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 17);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 17);\n      }\n    }\n  });\n\n  /**\n   * (PDF 1.5) If set, a group of radio buttons within a radio button field that use the same value for the on state will turn on and off in unison; that is if one is checked, they are all checked. If clear, the buttons are mutually exclusive (the same behavior as HTML radio buttons).\n   *\n   * @name AcroFormButton#radioIsUnison\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"radioIsUnison\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 26));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 26);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 26);\n      }\n    }\n  });\n\n  var _MK = {};\n  Object.defineProperty(this, \"MK\", {\n    enumerable: false,\n    configurable: false,\n    get: function() {\n      var encryptor = function(data) {\n        return data;\n      };\n      if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n      if (Object.keys(_MK).length !== 0) {\n        var result = [];\n        result.push(\"<<\");\n        var key;\n        for (key in _MK) {\n          result.push(\"/\" + key + \" (\" + pdfEscape(encryptor(_MK[key])) + \")\");\n        }\n        result.push(\">>\");\n        return result.join(\"\\n\");\n      }\n      return undefined;\n    },\n    set: function(value) {\n      if (typeof value === \"object\") {\n        _MK = value;\n      }\n    }\n  });\n\n  /**\n   * From the PDF reference:\n   * (Optional, button fields only) The widget annotation's normal caption which shall be displayed when it is not interacting with the user.\n   * Unlike the remaining entries listed in this Table which apply only to widget annotations associated with pushbutton fields (see Pushbuttons in 12.7.4.2, \"Button Fields\"), the CA entry may be used with any type of button field, including check boxes (see Check Boxes in 12.7.4.2, \"Button Fields\") and radio buttons (Radio Buttons in 12.7.4.2, \"Button Fields\").\n   *\n   * - '8' = Cross,\n   * - 'l' =  Circle,\n   * - '' = nothing\n   * @name AcroFormButton#caption\n   * @type {string}\n   */\n  Object.defineProperty(this, \"caption\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return _MK.CA || \"\";\n    },\n    set: function(value) {\n      if (typeof value === \"string\") {\n        _MK.CA = value;\n      }\n    }\n  });\n\n  var _AS;\n  Object.defineProperty(this, \"AS\", {\n    enumerable: false,\n    configurable: false,\n    get: function() {\n      return _AS;\n    },\n    set: function(value) {\n      _AS = value;\n    }\n  });\n\n  /**\n   * (Required if the appearance dictionary AP contains one or more subdictionaries; PDF 1.2) The annotation's appearance state, which selects the applicable appearance stream from an appearance subdictionary (see Section 12.5.5, \"Appearance Streams\")\n   *\n   * @name AcroFormButton#appearanceState\n   * @type {any}\n   */\n  Object.defineProperty(this, \"appearanceState\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return _AS.substr(1, _AS.length - 1);\n    },\n    set: function(value) {\n      _AS = \"/\" + value;\n    }\n  });\n};\ninherit(AcroFormButton, AcroFormField);\n\n/**\n * @class AcroFormPushButton\n * @extends AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormPushButton = function() {\n  AcroFormButton.call(this);\n  this.pushButton = true;\n};\ninherit(AcroFormPushButton, AcroFormButton);\n\n/**\n * @class AcroFormRadioButton\n * @extends AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormRadioButton = function() {\n  AcroFormButton.call(this);\n  this.radio = true;\n  this.pushButton = false;\n\n  var _Kids = [];\n  Object.defineProperty(this, \"Kids\", {\n    enumerable: true,\n    configurable: false,\n    get: function() {\n      return _Kids;\n    },\n    set: function(value) {\n      if (typeof value !== \"undefined\") {\n        _Kids = value;\n      } else {\n        _Kids = [];\n      }\n    }\n  });\n};\ninherit(AcroFormRadioButton, AcroFormButton);\n\n/**\n * The Child class of a RadioButton (the radioGroup) -> The single Buttons\n *\n * @class AcroFormChildClass\n * @extends AcroFormField\n * @ignore\n */\nvar AcroFormChildClass = function() {\n  AcroFormField.call(this);\n\n  var _parent;\n  Object.defineProperty(this, \"Parent\", {\n    enumerable: false,\n    configurable: false,\n    get: function() {\n      return _parent;\n    },\n    set: function(value) {\n      _parent = value;\n    }\n  });\n\n  var _optionName;\n  Object.defineProperty(this, \"optionName\", {\n    enumerable: false,\n    configurable: true,\n    get: function() {\n      return _optionName;\n    },\n    set: function(value) {\n      _optionName = value;\n    }\n  });\n\n  var _MK = {};\n  Object.defineProperty(this, \"MK\", {\n    enumerable: false,\n    configurable: false,\n    get: function() {\n      var encryptor = function(data) {\n        return data;\n      };\n      if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n      var result = [];\n      result.push(\"<<\");\n      var key;\n      for (key in _MK) {\n        result.push(\"/\" + key + \" (\" + pdfEscape(encryptor(_MK[key])) + \")\");\n      }\n      result.push(\">>\");\n      return result.join(\"\\n\");\n    },\n    set: function(value) {\n      if (typeof value === \"object\") {\n        _MK = value;\n      }\n    }\n  });\n\n  /**\n   * From the PDF reference:\n   * (Optional, button fields only) The widget annotation's normal caption which shall be displayed when it is not interacting with the user.\n   * Unlike the remaining entries listed in this Table which apply only to widget annotations associated with pushbutton fields (see Pushbuttons in 12.7.4.2, \"Button Fields\"), the CA entry may be used with any type of button field, including check boxes (see Check Boxes in 12.7.4.2, \"Button Fields\") and radio buttons (Radio Buttons in 12.7.4.2, \"Button Fields\").\n   *\n   * - '8' = Cross,\n   * - 'l' =  Circle,\n   * - '' = nothing\n   * @name AcroFormButton#caption\n   * @type {string}\n   */\n  Object.defineProperty(this, \"caption\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return _MK.CA || \"\";\n    },\n    set: function(value) {\n      if (typeof value === \"string\") {\n        _MK.CA = value;\n      }\n    }\n  });\n\n  var _AS;\n  Object.defineProperty(this, \"AS\", {\n    enumerable: false,\n    configurable: false,\n    get: function() {\n      return _AS;\n    },\n    set: function(value) {\n      _AS = value;\n    }\n  });\n\n  /**\n   * (Required if the appearance dictionary AP contains one or more subdictionaries; PDF 1.2) The annotation's appearance state, which selects the applicable appearance stream from an appearance subdictionary (see Section 12.5.5, \"Appearance Streams\")\n   *\n   * @name AcroFormButton#appearanceState\n   * @type {any}\n   */\n  Object.defineProperty(this, \"appearanceState\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return _AS.substr(1, _AS.length - 1);\n    },\n    set: function(value) {\n      _AS = \"/\" + value;\n    }\n  });\n  this.caption = \"l\";\n  this.appearanceState = \"Off\";\n  // todo: set AppearanceType as variable that can be set from the\n  // outside...\n  this._AppearanceType = AcroFormAppearance.RadioButton.Circle;\n  // The Default appearanceType is the Circle\n  this.appearanceStreamContent = this._AppearanceType.createAppearanceStream(\n    this.optionName\n  );\n};\ninherit(AcroFormChildClass, AcroFormField);\n\nAcroFormRadioButton.prototype.setAppearance = function(appearance) {\n  if (!(\"createAppearanceStream\" in appearance && \"getCA\" in appearance)) {\n    throw new Error(\n      \"Couldn't assign Appearance to RadioButton. Appearance was Invalid!\"\n    );\n  }\n  for (var objId in this.Kids) {\n    if (this.Kids.hasOwnProperty(objId)) {\n      var child = this.Kids[objId];\n      child.appearanceStreamContent = appearance.createAppearanceStream(\n        child.optionName\n      );\n      child.caption = appearance.getCA();\n    }\n  }\n};\n\nAcroFormRadioButton.prototype.createOption = function(name) {\n  // Create new Child for RadioGroup\n  var child = new AcroFormChildClass();\n  child.Parent = this;\n  child.optionName = name;\n  // Add to Parent\n  this.Kids.push(child);\n\n  addField.call(this.scope, child);\n\n  return child;\n};\n\n/**\n * @class AcroFormCheckBox\n * @extends AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormCheckBox = function() {\n  AcroFormButton.call(this);\n\n  this.fontName = \"zapfdingbats\";\n  this.caption = \"3\";\n  this.appearanceState = \"On\";\n  this.value = \"On\";\n  this.textAlign = \"center\";\n  this.appearanceStreamContent = AcroFormAppearance.CheckBox.createAppearanceStream();\n};\ninherit(AcroFormCheckBox, AcroFormButton);\n\n/**\n * @class AcroFormTextField\n * @extends AcroFormField\n */\nvar AcroFormTextField = function() {\n  AcroFormField.call(this);\n  this.FT = \"/Tx\";\n\n  /**\n   * If set, the field may contain multiple lines of text; if clear, the field’s text shall be restricted to a single line.\n   *\n   * @name AcroFormTextField#multiline\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"multiline\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 13));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 13);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 13);\n      }\n    }\n  });\n\n  /**\n   * (PDF 1.4) If set, the text entered in the field represents the pathname of a file whose contents shall be submitted as the value of the field.\n   *\n   * @name AcroFormTextField#fileSelect\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"fileSelect\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 21));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 21);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 21);\n      }\n    }\n  });\n\n  /**\n   * (PDF 1.4) If set, text entered in the field shall not be spell-checked.\n   *\n   * @name AcroFormTextField#doNotSpellCheck\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"doNotSpellCheck\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 23));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 23);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 23);\n      }\n    }\n  });\n\n  /**\n   * (PDF 1.4) If set, the field shall not scroll (horizontally for single-line fields, vertically for multiple-line fields) to accommodate more text than fits within its annotation rectangle. Once the field is full, no further text shall be accepted for interactive form filling; for noninteractive form filling, the filler should take care not to add more character than will visibly fit in the defined area.\n   *\n   * @name AcroFormTextField#doNotScroll\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"doNotScroll\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 24));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 24);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 24);\n      }\n    }\n  });\n\n  /**\n   * (PDF 1.5) May be set only if the MaxLen entry is present in the text field dictionary (see Table 229) and if the Multiline, Password, and FileSelect flags are clear. If set, the field shall be automatically divided into as many equally spaced positions, or combs, as the value of MaxLen, and the text is laid out into those combs.\n   *\n   * @name AcroFormTextField#comb\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"comb\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 25));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 25);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 25);\n      }\n    }\n  });\n\n  /**\n   * (PDF 1.5) If set, the value of this field shall be a rich text string (see 12.7.3.4, “Rich Text Strings”). If the field has a value, the RV entry of the field dictionary (Table 222) shall specify the rich text string.\n   *\n   * @name AcroFormTextField#richText\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"richText\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 26));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 26);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 26);\n      }\n    }\n  });\n\n  var _MaxLen = null;\n  Object.defineProperty(this, \"MaxLen\", {\n    enumerable: true,\n    configurable: false,\n    get: function() {\n      return _MaxLen;\n    },\n    set: function(value) {\n      _MaxLen = value;\n    }\n  });\n\n  /**\n   * (Optional; inheritable) The maximum length of the field’s text, in characters.\n   *\n   * @name AcroFormTextField#maxLength\n   * @type {number}\n   */\n  Object.defineProperty(this, \"maxLength\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return _MaxLen;\n    },\n    set: function(value) {\n      if (Number.isInteger(value)) {\n        _MaxLen = value;\n      }\n    }\n  });\n\n  Object.defineProperty(this, \"hasAppearanceStream\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return this.V || this.DV;\n    }\n  });\n};\ninherit(AcroFormTextField, AcroFormField);\n\n/**\n * @class AcroFormPasswordField\n * @extends AcroFormTextField\n * @extends AcroFormField\n */\nvar AcroFormPasswordField = function() {\n  AcroFormTextField.call(this);\n\n  /**\n   * If set, the field is intended for entering a secure password that should not be echoed visibly to the screen. Characters typed from the keyboard shall instead be echoed in some unreadable form, such as asterisks or bullet characters.\n   * NOTE To protect password confidentiality, readers should never store the value of the text field in the PDF file if this flag is set.\n   *\n   * @name AcroFormTextField#password\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"password\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 14));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 14);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 14);\n      }\n    }\n  });\n  this.password = true;\n};\ninherit(AcroFormPasswordField, AcroFormTextField);\n\n// Contains Methods for creating standard appearances\nvar AcroFormAppearance = {\n  CheckBox: {\n    createAppearanceStream: function() {\n      var appearance = {\n        N: {\n          On: AcroFormAppearance.CheckBox.YesNormal\n        },\n        D: {\n          On: AcroFormAppearance.CheckBox.YesPushDown,\n          Off: AcroFormAppearance.CheckBox.OffPushDown\n        }\n      };\n\n      return appearance;\n    },\n    /**\n     * Returns the standard On Appearance for a CheckBox\n     *\n     * @returns {AcroFormXObject}\n     */\n    YesPushDown: function(formObject) {\n      var xobj = createFormXObject(formObject);\n      xobj.scope = formObject.scope;\n      var stream = [];\n      var fontKey = formObject.scope.internal.getFont(\n        formObject.fontName,\n        formObject.fontStyle\n      ).id;\n      var encodedColor = formObject.scope.__private__.encodeColorString(\n        formObject.color\n      );\n      var calcRes = calculateX(formObject, formObject.caption);\n      stream.push(\"0.749023 g\");\n      stream.push(\n        \"0 0 \" +\n          f2(AcroFormAppearance.internal.getWidth(formObject)) +\n          \" \" +\n          f2(AcroFormAppearance.internal.getHeight(formObject)) +\n          \" re\"\n      );\n      stream.push(\"f\");\n      stream.push(\"BMC\");\n      stream.push(\"q\");\n      stream.push(\"0 0 1 rg\");\n      stream.push(\n        \"/\" + fontKey + \" \" + f2(calcRes.fontSize) + \" Tf \" + encodedColor\n      );\n      stream.push(\"BT\");\n      stream.push(calcRes.text);\n      stream.push(\"ET\");\n      stream.push(\"Q\");\n      stream.push(\"EMC\");\n      xobj.stream = stream.join(\"\\n\");\n      return xobj;\n    },\n\n    YesNormal: function(formObject) {\n      var xobj = createFormXObject(formObject);\n      xobj.scope = formObject.scope;\n      var fontKey = formObject.scope.internal.getFont(\n        formObject.fontName,\n        formObject.fontStyle\n      ).id;\n      var encodedColor = formObject.scope.__private__.encodeColorString(\n        formObject.color\n      );\n      var stream = [];\n      var height = AcroFormAppearance.internal.getHeight(formObject);\n      var width = AcroFormAppearance.internal.getWidth(formObject);\n      var calcRes = calculateX(formObject, formObject.caption);\n      stream.push(\"1 g\");\n      stream.push(\"0 0 \" + f2(width) + \" \" + f2(height) + \" re\");\n      stream.push(\"f\");\n      stream.push(\"q\");\n      stream.push(\"0 0 1 rg\");\n      stream.push(\"0 0 \" + f2(width - 1) + \" \" + f2(height - 1) + \" re\");\n      stream.push(\"W\");\n      stream.push(\"n\");\n      stream.push(\"0 g\");\n      stream.push(\"BT\");\n      stream.push(\n        \"/\" + fontKey + \" \" + f2(calcRes.fontSize) + \" Tf \" + encodedColor\n      );\n      stream.push(calcRes.text);\n      stream.push(\"ET\");\n      stream.push(\"Q\");\n      xobj.stream = stream.join(\"\\n\");\n      return xobj;\n    },\n\n    /**\n     * Returns the standard Off Appearance for a CheckBox\n     *\n     * @returns {AcroFormXObject}\n     */\n    OffPushDown: function(formObject) {\n      var xobj = createFormXObject(formObject);\n      xobj.scope = formObject.scope;\n      var stream = [];\n      stream.push(\"0.749023 g\");\n      stream.push(\n        \"0 0 \" +\n          f2(AcroFormAppearance.internal.getWidth(formObject)) +\n          \" \" +\n          f2(AcroFormAppearance.internal.getHeight(formObject)) +\n          \" re\"\n      );\n      stream.push(\"f\");\n      xobj.stream = stream.join(\"\\n\");\n      return xobj;\n    }\n  },\n\n  RadioButton: {\n    Circle: {\n      createAppearanceStream: function(name) {\n        var appearanceStreamContent = {\n          D: {\n            Off: AcroFormAppearance.RadioButton.Circle.OffPushDown\n          },\n          N: {}\n        };\n        appearanceStreamContent.N[name] =\n          AcroFormAppearance.RadioButton.Circle.YesNormal;\n        appearanceStreamContent.D[name] =\n          AcroFormAppearance.RadioButton.Circle.YesPushDown;\n        return appearanceStreamContent;\n      },\n      getCA: function() {\n        return \"l\";\n      },\n\n      YesNormal: function(formObject) {\n        var xobj = createFormXObject(formObject);\n        xobj.scope = formObject.scope;\n        var stream = [];\n        // Make the Radius of the Circle relative to min(height, width) of formObject\n        var DotRadius =\n          AcroFormAppearance.internal.getWidth(formObject) <=\n          AcroFormAppearance.internal.getHeight(formObject)\n            ? AcroFormAppearance.internal.getWidth(formObject) / 4\n            : AcroFormAppearance.internal.getHeight(formObject) / 4;\n        // The Borderpadding...\n        DotRadius = Number((DotRadius * 0.9).toFixed(5));\n        var c = AcroFormAppearance.internal.Bezier_C;\n        var DotRadiusBezier = Number((DotRadius * c).toFixed(5));\n        /*\n         * The Following is a Circle created with Bezier-Curves.\n         */\n        stream.push(\"q\");\n        stream.push(\n          \"1 0 0 1 \" +\n            f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n            \" \" +\n            f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n            \" cm\"\n        );\n        stream.push(DotRadius + \" 0 m\");\n        stream.push(\n          DotRadius +\n            \" \" +\n            DotRadiusBezier +\n            \" \" +\n            DotRadiusBezier +\n            \" \" +\n            DotRadius +\n            \" 0 \" +\n            DotRadius +\n            \" c\"\n        );\n        stream.push(\n          \"-\" +\n            DotRadiusBezier +\n            \" \" +\n            DotRadius +\n            \" -\" +\n            DotRadius +\n            \" \" +\n            DotRadiusBezier +\n            \" -\" +\n            DotRadius +\n            \" 0 c\"\n        );\n        stream.push(\n          \"-\" +\n            DotRadius +\n            \" -\" +\n            DotRadiusBezier +\n            \" -\" +\n            DotRadiusBezier +\n            \" -\" +\n            DotRadius +\n            \" 0 -\" +\n            DotRadius +\n            \" c\"\n        );\n        stream.push(\n          DotRadiusBezier +\n            \" -\" +\n            DotRadius +\n            \" \" +\n            DotRadius +\n            \" -\" +\n            DotRadiusBezier +\n            \" \" +\n            DotRadius +\n            \" 0 c\"\n        );\n        stream.push(\"f\");\n        stream.push(\"Q\");\n        xobj.stream = stream.join(\"\\n\");\n        return xobj;\n      },\n      YesPushDown: function(formObject) {\n        var xobj = createFormXObject(formObject);\n        xobj.scope = formObject.scope;\n        var stream = [];\n        var DotRadius =\n          AcroFormAppearance.internal.getWidth(formObject) <=\n          AcroFormAppearance.internal.getHeight(formObject)\n            ? AcroFormAppearance.internal.getWidth(formObject) / 4\n            : AcroFormAppearance.internal.getHeight(formObject) / 4;\n        // The Borderpadding...\n        DotRadius = Number((DotRadius * 0.9).toFixed(5));\n        // Save results for later use; no need to waste\n        // processor ticks on doing math\n        var k = Number((DotRadius * 2).toFixed(5));\n        var kc = Number((k * AcroFormAppearance.internal.Bezier_C).toFixed(5));\n        var dc = Number(\n          (DotRadius * AcroFormAppearance.internal.Bezier_C).toFixed(5)\n        );\n\n        stream.push(\"0.749023 g\");\n        stream.push(\"q\");\n        stream.push(\n          \"1 0 0 1 \" +\n            f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n            \" \" +\n            f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n            \" cm\"\n        );\n        stream.push(k + \" 0 m\");\n        stream.push(k + \" \" + kc + \" \" + kc + \" \" + k + \" 0 \" + k + \" c\");\n        stream.push(\n          \"-\" + kc + \" \" + k + \" -\" + k + \" \" + kc + \" -\" + k + \" 0 c\"\n        );\n        stream.push(\n          \"-\" + k + \" -\" + kc + \" -\" + kc + \" -\" + k + \" 0 -\" + k + \" c\"\n        );\n        stream.push(kc + \" -\" + k + \" \" + k + \" -\" + kc + \" \" + k + \" 0 c\");\n        stream.push(\"f\");\n        stream.push(\"Q\");\n        stream.push(\"0 g\");\n        stream.push(\"q\");\n        stream.push(\n          \"1 0 0 1 \" +\n            f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n            \" \" +\n            f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n            \" cm\"\n        );\n        stream.push(DotRadius + \" 0 m\");\n        stream.push(\n          \"\" +\n            DotRadius +\n            \" \" +\n            dc +\n            \" \" +\n            dc +\n            \" \" +\n            DotRadius +\n            \" 0 \" +\n            DotRadius +\n            \" c\"\n        );\n        stream.push(\n          \"-\" +\n            dc +\n            \" \" +\n            DotRadius +\n            \" -\" +\n            DotRadius +\n            \" \" +\n            dc +\n            \" -\" +\n            DotRadius +\n            \" 0 c\"\n        );\n        stream.push(\n          \"-\" +\n            DotRadius +\n            \" -\" +\n            dc +\n            \" -\" +\n            dc +\n            \" -\" +\n            DotRadius +\n            \" 0 -\" +\n            DotRadius +\n            \" c\"\n        );\n        stream.push(\n          dc +\n            \" -\" +\n            DotRadius +\n            \" \" +\n            DotRadius +\n            \" -\" +\n            dc +\n            \" \" +\n            DotRadius +\n            \" 0 c\"\n        );\n        stream.push(\"f\");\n        stream.push(\"Q\");\n        xobj.stream = stream.join(\"\\n\");\n        return xobj;\n      },\n      OffPushDown: function(formObject) {\n        var xobj = createFormXObject(formObject);\n        xobj.scope = formObject.scope;\n        var stream = [];\n        var DotRadius =\n          AcroFormAppearance.internal.getWidth(formObject) <=\n          AcroFormAppearance.internal.getHeight(formObject)\n            ? AcroFormAppearance.internal.getWidth(formObject) / 4\n            : AcroFormAppearance.internal.getHeight(formObject) / 4;\n        // The Borderpadding...\n        DotRadius = Number((DotRadius * 0.9).toFixed(5));\n        // Save results for later use; no need to waste\n        // processor ticks on doing math\n        var k = Number((DotRadius * 2).toFixed(5));\n        var kc = Number((k * AcroFormAppearance.internal.Bezier_C).toFixed(5));\n\n        stream.push(\"0.749023 g\");\n        stream.push(\"q\");\n        stream.push(\n          \"1 0 0 1 \" +\n            f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n            \" \" +\n            f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n            \" cm\"\n        );\n        stream.push(k + \" 0 m\");\n        stream.push(k + \" \" + kc + \" \" + kc + \" \" + k + \" 0 \" + k + \" c\");\n        stream.push(\n          \"-\" + kc + \" \" + k + \" -\" + k + \" \" + kc + \" -\" + k + \" 0 c\"\n        );\n        stream.push(\n          \"-\" + k + \" -\" + kc + \" -\" + kc + \" -\" + k + \" 0 -\" + k + \" c\"\n        );\n        stream.push(kc + \" -\" + k + \" \" + k + \" -\" + kc + \" \" + k + \" 0 c\");\n        stream.push(\"f\");\n        stream.push(\"Q\");\n        xobj.stream = stream.join(\"\\n\");\n        return xobj;\n      }\n    },\n\n    Cross: {\n      /**\n       * Creates the Actual AppearanceDictionary-References\n       *\n       * @param {string} name\n       * @returns {Object}\n       * @ignore\n       */\n      createAppearanceStream: function(name) {\n        var appearanceStreamContent = {\n          D: {\n            Off: AcroFormAppearance.RadioButton.Cross.OffPushDown\n          },\n          N: {}\n        };\n        appearanceStreamContent.N[name] =\n          AcroFormAppearance.RadioButton.Cross.YesNormal;\n        appearanceStreamContent.D[name] =\n          AcroFormAppearance.RadioButton.Cross.YesPushDown;\n        return appearanceStreamContent;\n      },\n      getCA: function() {\n        return \"8\";\n      },\n\n      YesNormal: function(formObject) {\n        var xobj = createFormXObject(formObject);\n        xobj.scope = formObject.scope;\n        var stream = [];\n        var cross = AcroFormAppearance.internal.calculateCross(formObject);\n        stream.push(\"q\");\n        stream.push(\n          \"1 1 \" +\n            f2(AcroFormAppearance.internal.getWidth(formObject) - 2) +\n            \" \" +\n            f2(AcroFormAppearance.internal.getHeight(formObject) - 2) +\n            \" re\"\n        );\n        stream.push(\"W\");\n        stream.push(\"n\");\n        stream.push(f2(cross.x1.x) + \" \" + f2(cross.x1.y) + \" m\");\n        stream.push(f2(cross.x2.x) + \" \" + f2(cross.x2.y) + \" l\");\n        stream.push(f2(cross.x4.x) + \" \" + f2(cross.x4.y) + \" m\");\n        stream.push(f2(cross.x3.x) + \" \" + f2(cross.x3.y) + \" l\");\n        stream.push(\"s\");\n        stream.push(\"Q\");\n        xobj.stream = stream.join(\"\\n\");\n        return xobj;\n      },\n      YesPushDown: function(formObject) {\n        var xobj = createFormXObject(formObject);\n        xobj.scope = formObject.scope;\n        var cross = AcroFormAppearance.internal.calculateCross(formObject);\n        var stream = [];\n        stream.push(\"0.749023 g\");\n        stream.push(\n          \"0 0 \" +\n            f2(AcroFormAppearance.internal.getWidth(formObject)) +\n            \" \" +\n            f2(AcroFormAppearance.internal.getHeight(formObject)) +\n            \" re\"\n        );\n        stream.push(\"f\");\n        stream.push(\"q\");\n        stream.push(\n          \"1 1 \" +\n            f2(AcroFormAppearance.internal.getWidth(formObject) - 2) +\n            \" \" +\n            f2(AcroFormAppearance.internal.getHeight(formObject) - 2) +\n            \" re\"\n        );\n        stream.push(\"W\");\n        stream.push(\"n\");\n        stream.push(f2(cross.x1.x) + \" \" + f2(cross.x1.y) + \" m\");\n        stream.push(f2(cross.x2.x) + \" \" + f2(cross.x2.y) + \" l\");\n        stream.push(f2(cross.x4.x) + \" \" + f2(cross.x4.y) + \" m\");\n        stream.push(f2(cross.x3.x) + \" \" + f2(cross.x3.y) + \" l\");\n        stream.push(\"s\");\n        stream.push(\"Q\");\n        xobj.stream = stream.join(\"\\n\");\n        return xobj;\n      },\n      OffPushDown: function(formObject) {\n        var xobj = createFormXObject(formObject);\n        xobj.scope = formObject.scope;\n        var stream = [];\n        stream.push(\"0.749023 g\");\n        stream.push(\n          \"0 0 \" +\n            f2(AcroFormAppearance.internal.getWidth(formObject)) +\n            \" \" +\n            f2(AcroFormAppearance.internal.getHeight(formObject)) +\n            \" re\"\n        );\n        stream.push(\"f\");\n        xobj.stream = stream.join(\"\\n\");\n        return xobj;\n      }\n    }\n  },\n\n  /**\n   * Returns the standard Appearance\n   *\n   * @returns {AcroFormXObject}\n   */\n  createDefaultAppearanceStream: function(formObject) {\n    // Set Helvetica to Standard Font (size: auto)\n    // Color: Black\n    var fontKey = formObject.scope.internal.getFont(\n      formObject.fontName,\n      formObject.fontStyle\n    ).id;\n    var encodedColor = formObject.scope.__private__.encodeColorString(\n      formObject.color\n    );\n    var fontSize = formObject.fontSize;\n    var result = \"/\" + fontKey + \" \" + fontSize + \" Tf \" + encodedColor;\n    return result;\n  }\n};\n\nAcroFormAppearance.internal = {\n  Bezier_C: 0.551915024494,\n\n  calculateCross: function(formObject) {\n    var width = AcroFormAppearance.internal.getWidth(formObject);\n    var height = AcroFormAppearance.internal.getHeight(formObject);\n    var a = Math.min(width, height);\n\n    var cross = {\n      x1: {\n        // upperLeft\n        x: (width - a) / 2,\n        y: (height - a) / 2 + a // height - borderPadding\n      },\n      x2: {\n        // lowerRight\n        x: (width - a) / 2 + a,\n        y: (height - a) / 2 // borderPadding\n      },\n      x3: {\n        // lowerLeft\n        x: (width - a) / 2,\n        y: (height - a) / 2 // borderPadding\n      },\n      x4: {\n        // upperRight\n        x: (width - a) / 2 + a,\n        y: (height - a) / 2 + a // height - borderPadding\n      }\n    };\n\n    return cross;\n  }\n};\nAcroFormAppearance.internal.getWidth = function(formObject) {\n  var result = 0;\n  if (typeof formObject === \"object\") {\n    result = scale(formObject.Rect[2]);\n  }\n  return result;\n};\nAcroFormAppearance.internal.getHeight = function(formObject) {\n  var result = 0;\n  if (typeof formObject === \"object\") {\n    result = scale(formObject.Rect[3]);\n  }\n  return result;\n};\n\n// Public:\n\n/**\n * Add an AcroForm-Field to the jsPDF-instance\n *\n * @name addField\n * @function\n * @instance\n * @param {Object} fieldObject\n * @returns {jsPDF}\n */\nvar addField = (jsPDFAPI.addField = function(fieldObject) {\n  initializeAcroForm(this, fieldObject);\n\n  if (fieldObject instanceof AcroFormField) {\n    putForm(fieldObject);\n  } else {\n    throw new Error(\"Invalid argument passed to jsPDF.addField.\");\n  }\n  fieldObject.page = fieldObject.scope.internal.getCurrentPageInfo().pageNumber;\n  return this;\n});\n\njsPDFAPI.AcroFormChoiceField = AcroFormChoiceField;\njsPDFAPI.AcroFormListBox = AcroFormListBox;\njsPDFAPI.AcroFormComboBox = AcroFormComboBox;\njsPDFAPI.AcroFormEditBox = AcroFormEditBox;\njsPDFAPI.AcroFormButton = AcroFormButton;\njsPDFAPI.AcroFormPushButton = AcroFormPushButton;\njsPDFAPI.AcroFormRadioButton = AcroFormRadioButton;\njsPDFAPI.AcroFormCheckBox = AcroFormCheckBox;\njsPDFAPI.AcroFormTextField = AcroFormTextField;\njsPDFAPI.AcroFormPasswordField = AcroFormPasswordField;\njsPDFAPI.AcroFormAppearance = AcroFormAppearance;\n\njsPDFAPI.AcroForm = {\n  ChoiceField: AcroFormChoiceField,\n  ListBox: AcroFormListBox,\n  ComboBox: AcroFormComboBox,\n  EditBox: AcroFormEditBox,\n  Button: AcroFormButton,\n  PushButton: AcroFormPushButton,\n  RadioButton: AcroFormRadioButton,\n  CheckBox: AcroFormCheckBox,\n  TextField: AcroFormTextField,\n  PasswordField: AcroFormPasswordField,\n  Appearance: AcroFormAppearance\n};\n\njsPDF.AcroForm = {\n  ChoiceField: AcroFormChoiceField,\n  ListBox: AcroFormListBox,\n  ComboBox: AcroFormComboBox,\n  EditBox: AcroFormEditBox,\n  Button: AcroFormButton,\n  PushButton: AcroFormPushButton,\n  RadioButton: AcroFormRadioButton,\n  CheckBox: AcroFormCheckBox,\n  TextField: AcroFormTextField,\n  PasswordField: AcroFormPasswordField,\n  Appearance: AcroFormAppearance\n};\n\nvar AcroForm = jsPDF.AcroForm;\n\nexport {\n  AcroForm,\n  AcroFormChoiceField,\n  AcroFormListBox,\n  AcroFormComboBox,\n  AcroFormEditBox,\n  AcroFormButton,\n  AcroFormPushButton,\n  AcroFormRadioButton,\n  AcroFormCheckBox,\n  AcroFormTextField,\n  AcroFormPasswordField,\n  AcroFormAppearance\n};\n","/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC)  steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\n/**\n * jsPDF Annotations PlugIn\n *\n * There are many types of annotations in a PDF document. Annotations are placed\n * on a page at a particular location. They are not 'attached' to an object.\n * <br />\n * This plugin current supports <br />\n * <li> Goto Page (set pageNumber and top in options)\n * <li> Goto Name (set name and top in options)\n * <li> Goto URL (set url in options)\n * <p>\n * \tThe destination magnification factor can also be specified when goto is a page number or a named destination. (see documentation below)\n *  (set magFactor in options).  XYZ is the default.\n * </p>\n * <p>\n *  Links, Text, Popup, and FreeText are supported.\n * </p>\n * <p>\n * Options In PDF spec Not Implemented Yet\n * <li> link border\n * <li> named target\n * <li> page coordinates\n * <li> destination page scaling and layout\n * <li> actions other than URL and GotoPage\n * <li> background / hover actions\n * </p>\n * @name annotations\n * @module\n */\n\n/*\n    Destination Magnification Factors\n    See PDF 1.3 Page 386 for meanings and options\n\n    [supported]\n\tXYZ (options; left top zoom)\n\tFit (no options)\n\tFitH (options: top)\n\tFitV (options: left)\n\n\t[not supported]\n\tFitR\n\tFitB\n\tFitBH\n\tFitBV\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  var notEmpty = function(obj) {\n    if (typeof obj != \"undefined\") {\n      if (obj != \"\") {\n        return true;\n      }\n    }\n  };\n\n  jsPDF.API.events.push([\n    \"addPage\",\n    function(addPageData) {\n      var pageInfo = this.internal.getPageInfo(addPageData.pageNumber);\n      pageInfo.pageContext.annotations = [];\n    }\n  ]);\n\n  jsPDFAPI.events.push([\n    \"putPage\",\n    function(putPageData) {\n      var getHorizontalCoordinateString = this.internal.getCoordinateString;\n      var getVerticalCoordinateString = this.internal\n        .getVerticalCoordinateString;\n      var pageInfo = this.internal.getPageInfoByObjId(putPageData.objId);\n      var pageAnnos = putPageData.pageContext.annotations;\n\n      var anno, rect, line;\n      var found = false;\n      for (var a = 0; a < pageAnnos.length && !found; a++) {\n        anno = pageAnnos[a];\n        switch (anno.type) {\n          case \"link\":\n            if (\n              notEmpty(anno.options.url) ||\n              notEmpty(anno.options.pageNumber)\n            ) {\n              found = true;\n            }\n            break;\n          case \"reference\":\n          case \"text\":\n          case \"freetext\":\n            found = true;\n            break;\n        }\n      }\n      if (found == false) {\n        return;\n      }\n\n      this.internal.write(\"/Annots [\");\n      for (var i = 0; i < pageAnnos.length; i++) {\n        anno = pageAnnos[i];\n        var escape = this.internal.pdfEscape;\n        var encryptor = this.internal.getEncryptor(putPageData.objId);\n\n        switch (anno.type) {\n          case \"reference\":\n            // References to Widget Annotations (for AcroForm Fields)\n            this.internal.write(\" \" + anno.object.objId + \" 0 R \");\n            break;\n          case \"text\":\n            // Create a an object for both the text and the popup\n            var objText = this.internal.newAdditionalObject();\n            var objPopup = this.internal.newAdditionalObject();\n            var encryptorText = this.internal.getEncryptor(objText.objId);\n\n            var title = anno.title || \"Note\";\n            rect =\n              \"/Rect [\" +\n              getHorizontalCoordinateString(anno.bounds.x) +\n              \" \" +\n              getVerticalCoordinateString(anno.bounds.y + anno.bounds.h) +\n              \" \" +\n              getHorizontalCoordinateString(anno.bounds.x + anno.bounds.w) +\n              \" \" +\n              getVerticalCoordinateString(anno.bounds.y) +\n              \"] \";\n\n            line =\n              \"<</Type /Annot /Subtype /\" +\n              \"Text\" +\n              \" \" +\n              rect +\n              \"/Contents (\" +\n              escape(encryptorText(anno.contents)) +\n              \")\";\n            line += \" /Popup \" + objPopup.objId + \" 0 R\";\n            line += \" /P \" + pageInfo.objId + \" 0 R\";\n            line += \" /T (\" + escape(encryptorText(title)) + \") >>\";\n            objText.content = line;\n\n            var parent = objText.objId + \" 0 R\";\n            var popoff = 30;\n            rect =\n              \"/Rect [\" +\n              getHorizontalCoordinateString(anno.bounds.x + popoff) +\n              \" \" +\n              getVerticalCoordinateString(anno.bounds.y + anno.bounds.h) +\n              \" \" +\n              getHorizontalCoordinateString(\n                anno.bounds.x + anno.bounds.w + popoff\n              ) +\n              \" \" +\n              getVerticalCoordinateString(anno.bounds.y) +\n              \"] \";\n            line =\n              \"<</Type /Annot /Subtype /\" +\n              \"Popup\" +\n              \" \" +\n              rect +\n              \" /Parent \" +\n              parent;\n            if (anno.open) {\n              line += \" /Open true\";\n            }\n            line += \" >>\";\n            objPopup.content = line;\n\n            this.internal.write(objText.objId, \"0 R\", objPopup.objId, \"0 R\");\n\n            break;\n          case \"freetext\":\n            rect =\n              \"/Rect [\" +\n              getHorizontalCoordinateString(anno.bounds.x) +\n              \" \" +\n              getVerticalCoordinateString(anno.bounds.y) +\n              \" \" +\n              getHorizontalCoordinateString(anno.bounds.x + anno.bounds.w) +\n              \" \" +\n              getVerticalCoordinateString(anno.bounds.y + anno.bounds.h) +\n              \"] \";\n            var color = anno.color || \"#000000\";\n            line =\n              \"<</Type /Annot /Subtype /\" +\n              \"FreeText\" +\n              \" \" +\n              rect +\n              \"/Contents (\" +\n              escape(encryptor(anno.contents)) +\n              \")\";\n            line +=\n              \" /DS(font: Helvetica,sans-serif 12.0pt; text-align:left; color:#\" +\n              color +\n              \")\";\n            line += \" /Border [0 0 0]\";\n            line += \" >>\";\n            this.internal.write(line);\n            break;\n          case \"link\":\n            if (anno.options.name) {\n              var loc = this.annotations._nameMap[anno.options.name];\n              anno.options.pageNumber = loc.page;\n              anno.options.top = loc.y;\n            } else {\n              if (!anno.options.top) {\n                anno.options.top = 0;\n              }\n            }\n\n            rect =\n              \"/Rect [\" +\n              anno.finalBounds.x +\n              \" \" +\n              anno.finalBounds.y +\n              \" \" +\n              anno.finalBounds.w +\n              \" \" +\n              anno.finalBounds.h +\n              \"] \";\n\n            line = \"\";\n            if (anno.options.url) {\n              line =\n                \"<</Type /Annot /Subtype /Link \" +\n                rect +\n                \"/Border [0 0 0] /A <</S /URI /URI (\" +\n                escape(encryptor(anno.options.url)) +\n                \") >>\";\n            } else if (anno.options.pageNumber) {\n              // first page is 0\n              var info = this.internal.getPageInfo(anno.options.pageNumber);\n              line =\n                \"<</Type /Annot /Subtype /Link \" +\n                rect +\n                \"/Border [0 0 0] /Dest [\" +\n                info.objId +\n                \" 0 R\";\n              anno.options.magFactor = anno.options.magFactor || \"XYZ\";\n              switch (anno.options.magFactor) {\n                case \"Fit\":\n                  line += \" /Fit]\";\n                  break;\n                case \"FitH\":\n                  line += \" /FitH \" + anno.options.top + \"]\";\n                  break;\n                case \"FitV\":\n                  anno.options.left = anno.options.left || 0;\n                  line += \" /FitV \" + anno.options.left + \"]\";\n                  break;\n                case \"XYZ\":\n                default:\n                  var top = getVerticalCoordinateString(anno.options.top);\n                  anno.options.left = anno.options.left || 0;\n                  // 0 or null zoom will not change zoom factor\n                  if (typeof anno.options.zoom === \"undefined\") {\n                    anno.options.zoom = 0;\n                  }\n                  line +=\n                    \" /XYZ \" +\n                    anno.options.left +\n                    \" \" +\n                    top +\n                    \" \" +\n                    anno.options.zoom +\n                    \"]\";\n                  break;\n              }\n            }\n\n            if (line != \"\") {\n              line += \" >>\";\n              this.internal.write(line);\n            }\n            break;\n        }\n      }\n      this.internal.write(\"]\");\n    }\n  ]);\n\n  /**\n   * @name createAnnotation\n   * @function\n   * @param {Object} options\n   */\n  jsPDFAPI.createAnnotation = function(options) {\n    var pageInfo = this.internal.getCurrentPageInfo();\n    switch (options.type) {\n      case \"link\":\n        this.link(\n          options.bounds.x,\n          options.bounds.y,\n          options.bounds.w,\n          options.bounds.h,\n          options\n        );\n        break;\n      case \"text\":\n      case \"freetext\":\n        pageInfo.pageContext.annotations.push(options);\n        break;\n    }\n  };\n\n  /**\n   * Create a link\n   *\n   * valid options\n   * <li> pageNumber or url [required]\n   * <p>If pageNumber is specified, top and zoom may also be specified</p>\n   * @name link\n   * @function\n   * @param {number} x\n   * @param {number} y\n   * @param {number} w\n   * @param {number} h\n   * @param {Object} options\n   */\n  jsPDFAPI.link = function(x, y, w, h, options) {\n    var pageInfo = this.internal.getCurrentPageInfo();\n    var getHorizontalCoordinateString = this.internal.getCoordinateString;\n    var getVerticalCoordinateString = this.internal.getVerticalCoordinateString;\n\n    pageInfo.pageContext.annotations.push({\n      finalBounds: {\n        x: getHorizontalCoordinateString(x),\n        y: getVerticalCoordinateString(y),\n        w: getHorizontalCoordinateString(x + w),\n        h: getVerticalCoordinateString(y + h)\n      },\n      options: options,\n      type: \"link\"\n    });\n  };\n\n  /**\n   * Currently only supports single line text.\n   * Returns the width of the text/link\n   *\n   * @name textWithLink\n   * @function\n   * @param {string} text\n   * @param {number} x\n   * @param {number} y\n   * @param {Object} options\n   * @returns {number} width the width of the text/link\n   */\n  jsPDFAPI.textWithLink = function(text, x, y, options) {\n    var totalLineWidth = this.getTextWidth(text);\n    var lineHeight = this.internal.getLineHeight() / this.internal.scaleFactor;\n    var linkHeight, linkWidth;\n\n    // Checking if maxWidth option is passed to determine lineWidth and number of lines for each line\n    if (options.maxWidth !== undefined) {\n      var { maxWidth } = options;\n      linkWidth = maxWidth;\n      var numOfLines = this.splitTextToSize(text, linkWidth).length;\n      linkHeight = Math.ceil(lineHeight * numOfLines);\n    } else {\n      linkWidth = totalLineWidth;\n      linkHeight = lineHeight;\n    }\n\n    this.text(text, x, y, options);\n\n    //TODO We really need the text baseline height to do this correctly.\n    // Or ability to draw text on top, bottom, center, or baseline.\n    y += lineHeight * 0.2;\n    //handle x position based on the align option\n    if (options.align === \"center\") {\n      x = x - totalLineWidth / 2; //since starting from center move the x position by half of text width\n    }\n    if (options.align === \"right\") {\n      x = x - totalLineWidth;\n    }\n    this.link(x, y - lineHeight, linkWidth, linkHeight, options);\n    return totalLineWidth;\n  };\n\n  //TODO move into external library\n  /**\n   * @name getTextWidth\n   * @function\n   * @param {string} text\n   * @returns {number} txtWidth\n   */\n  jsPDFAPI.getTextWidth = function(text) {\n    var fontSize = this.internal.getFontSize();\n    var txtWidth =\n      (this.getStringUnitWidth(text) * fontSize) / this.internal.scaleFactor;\n    return txtWidth;\n  };\n\n  return this;\n})(jsPDF.API);\n","function toLookup(arr) {\n  return arr.reduce(function(lookup, name, index) {\n    lookup[name] = index;\n\n    return lookup;\n  }, {});\n}\n\nvar fontStyleOrder = {\n  italic: [\"italic\", \"oblique\", \"normal\"],\n  oblique: [\"oblique\", \"italic\", \"normal\"],\n  normal: [\"normal\", \"oblique\", \"italic\"]\n};\n\nvar fontStretchOrder = [\n  \"ultra-condensed\",\n  \"extra-condensed\",\n  \"condensed\",\n  \"semi-condensed\",\n  \"normal\",\n  \"semi-expanded\",\n  \"expanded\",\n  \"extra-expanded\",\n  \"ultra-expanded\"\n];\n\n// For a given font-stretch value, we need to know where to start our search\n// from in the fontStretchOrder list.\nvar fontStretchLookup = toLookup(fontStretchOrder);\n\nvar fontWeights = [100, 200, 300, 400, 500, 600, 700, 800, 900];\nvar fontWeightsLookup = toLookup(fontWeights);\n\nfunction normalizeFontStretch(stretch) {\n  stretch = stretch || \"normal\";\n\n  return typeof fontStretchLookup[stretch] === \"number\" ? stretch : \"normal\";\n}\n\nfunction normalizeFontStyle(style) {\n  style = style || \"normal\";\n\n  return fontStyleOrder[style] ? style : \"normal\";\n}\n\nfunction normalizeFontWeight(weight) {\n  if (!weight) {\n    return 400;\n  }\n\n  if (typeof weight === \"number\") {\n    // Ignore values which aren't valid font-weights.\n    return weight >= 100 && weight <= 900 && weight % 100 === 0 ? weight : 400;\n  }\n\n  if (/^\\d00$/.test(weight)) {\n    return parseInt(weight);\n  }\n\n  switch (weight) {\n    case \"bold\":\n      return 700;\n\n    case \"normal\":\n    default:\n      return 400;\n  }\n}\n\nexport function normalizeFontFace(fontFace) {\n  var family = fontFace.family.replace(/\"|'/g, \"\").toLowerCase();\n\n  var style = normalizeFontStyle(fontFace.style);\n  var weight = normalizeFontWeight(fontFace.weight);\n  var stretch = normalizeFontStretch(fontFace.stretch);\n\n  return {\n    family: family,\n    style: style,\n    weight: weight,\n    stretch: stretch,\n    src: fontFace.src || [],\n\n    // The ref property maps this font-face to the font\n    // added by the .addFont() method.\n    ref: fontFace.ref || {\n      name: family,\n      style: [stretch, style, weight].join(\" \")\n    }\n  };\n}\n\n/**\n * Turns a list of font-faces into a map, for easier lookup when resolving\n * fonts.\n * @private\n */\nexport function buildFontFaceMap(fontFaces) {\n  var map = {};\n\n  for (var i = 0; i < fontFaces.length; ++i) {\n    var normalized = normalizeFontFace(fontFaces[i]);\n\n    var name = normalized.family;\n    var stretch = normalized.stretch;\n    var style = normalized.style;\n    var weight = normalized.weight;\n\n    map[name] = map[name] || {};\n\n    map[name][stretch] = map[name][stretch] || {};\n    map[name][stretch][style] = map[name][stretch][style] || {};\n    map[name][stretch][style][weight] = normalized;\n  }\n\n  return map;\n}\n\n/**\n * Searches a map of stretches, weights, etc. in the given direction and\n * then, if no match has been found, in the opposite directions.\n *\n * @param {Object.<string, any>} matchingSet A map of the various font variations.\n * @param {any[]} order The order of the different variations\n * @param {number} pivot The starting point of the search in the order list.\n * @param {number} dir The initial direction of the search (desc = -1, asc = 1)\n * @private\n */\n\nfunction searchFromPivot(matchingSet, order, pivot, dir) {\n  var i;\n\n  for (i = pivot; i >= 0 && i < order.length; i += dir) {\n    if (matchingSet[order[i]]) {\n      return matchingSet[order[i]];\n    }\n  }\n\n  for (i = pivot; i >= 0 && i < order.length; i -= dir) {\n    if (matchingSet[order[i]]) {\n      return matchingSet[order[i]];\n    }\n  }\n}\n\nfunction resolveFontStretch(stretch, matchingSet) {\n  if (matchingSet[stretch]) {\n    return matchingSet[stretch];\n  }\n\n  var pivot = fontStretchLookup[stretch];\n\n  // If the font-stretch value is normal or more condensed, we want to\n  // start with a descending search, otherwise we should do ascending.\n  var dir = pivot <= fontStretchLookup[\"normal\"] ? -1 : 1;\n  var match = searchFromPivot(matchingSet, fontStretchOrder, pivot, dir);\n\n  if (!match) {\n    // Since a font-family cannot exist without having at least one stretch value\n    // we should never reach this point.\n    throw new Error(\n      \"Could not find a matching font-stretch value for \" + stretch\n    );\n  }\n\n  return match;\n}\n\nfunction resolveFontStyle(fontStyle, matchingSet) {\n  if (matchingSet[fontStyle]) {\n    return matchingSet[fontStyle];\n  }\n\n  var ordering = fontStyleOrder[fontStyle];\n\n  for (var i = 0; i < ordering.length; ++i) {\n    if (matchingSet[ordering[i]]) {\n      return matchingSet[ordering[i]];\n    }\n  }\n\n  // Since a font-family cannot exist without having at least one style value\n  // we should never reach this point.\n  throw new Error(\"Could not find a matching font-style for \" + fontStyle);\n}\n\nfunction resolveFontWeight(weight, matchingSet) {\n  if (matchingSet[weight]) {\n    return matchingSet[weight];\n  }\n\n  if (weight === 400 && matchingSet[500]) {\n    return matchingSet[500];\n  }\n\n  if (weight === 500 && matchingSet[400]) {\n    return matchingSet[400];\n  }\n\n  var pivot = fontWeightsLookup[weight];\n\n  // If the font-stretch value is normal or more condensed, we want to\n  // start with a descending search, otherwise we should do ascending.\n  var dir = weight < 400 ? -1 : 1;\n  var match = searchFromPivot(matchingSet, fontWeights, pivot, dir);\n\n  if (!match) {\n    // Since a font-family cannot exist without having at least one stretch value\n    // we should never reach this point.\n    throw new Error(\n      \"Could not find a matching font-weight for value \" + weight\n    );\n  }\n\n  return match;\n}\n\nvar defaultGenericFontFamilies = {\n  \"sans-serif\": \"helvetica\",\n  fixed: \"courier\",\n  monospace: \"courier\",\n  terminal: \"courier\",\n  cursive: \"times\",\n  fantasy: \"times\",\n  serif: \"times\"\n};\n\nvar systemFonts = {\n  caption: \"times\",\n  icon: \"times\",\n  menu: \"times\",\n  \"message-box\": \"times\",\n  \"small-caption\": \"times\",\n  \"status-bar\": \"times\"\n};\n\nfunction ruleToString(rule) {\n  return [rule.stretch, rule.style, rule.weight, rule.family].join(\" \");\n}\n\nexport function resolveFontFace(fontFaceMap, rules, opts) {\n  opts = opts || {};\n\n  var defaultFontFamily = opts.defaultFontFamily || \"times\";\n  var genericFontFamilies = Object.assign(\n    {},\n    defaultGenericFontFamilies,\n    opts.genericFontFamilies || {}\n  );\n\n  var rule = null;\n  var matches = null;\n\n  for (var i = 0; i < rules.length; ++i) {\n    rule = normalizeFontFace(rules[i]);\n\n    if (genericFontFamilies[rule.family]) {\n      rule.family = genericFontFamilies[rule.family];\n    }\n\n    if (fontFaceMap.hasOwnProperty(rule.family)) {\n      matches = fontFaceMap[rule.family];\n\n      break;\n    }\n  }\n\n  // Always fallback to a known font family.\n  matches = matches || fontFaceMap[defaultFontFamily];\n\n  if (!matches) {\n    // At this point we should definitiely have a font family, but if we\n    // don't there is something wrong with our configuration\n    throw new Error(\n      \"Could not find a font-family for the rule '\" +\n        ruleToString(rule) +\n        \"' and default family '\" +\n        defaultFontFamily +\n        \"'.\"\n    );\n  }\n\n  matches = resolveFontStretch(rule.stretch, matches);\n  matches = resolveFontStyle(rule.style, matches);\n  matches = resolveFontWeight(rule.weight, matches);\n\n  if (!matches) {\n    // We should've fount\n    throw new Error(\n      \"Failed to resolve a font for the rule '\" + ruleToString(rule) + \"'.\"\n    );\n  }\n\n  return matches;\n}\n\n/**\n * Builds a style id for use with the addFont() method.\n * @param {FontFace} font\n * @private\n */\nexport function toStyleName(font) {\n  return [font.weight, font.style, font.stretch].join(\" \");\n}\n\nfunction eatWhiteSpace(input) {\n  return input.trimLeft();\n}\n\nfunction parseQuotedFontFamily(input, quote) {\n  var index = 0;\n\n  while (index < input.length) {\n    var current = input.charAt(index);\n\n    if (current === quote) {\n      return [input.substring(0, index), input.substring(index + 1)];\n    }\n\n    index += 1;\n  }\n\n  // Unexpected end of input\n  return null;\n}\n\nfunction parseNonQuotedFontFamily(input) {\n  // It implements part of the identifier parser here: https://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n  //\n  // NOTE: This parser pretty much ignores escaped identifiers and that there is a thing called unicode.\n  //\n  // Breakdown of regexp:\n  // -[a-z_]     - when identifier starts with a hyphen, you're not allowed to have another hyphen or a digit\n  // [a-z_]      - allow a-z and underscore at beginning of input\n  // [a-z0-9_-]* - after that, anything goes\n  var match = input.match(/^(-[a-z_]|[a-z_])[a-z0-9_-]*/i);\n\n  // non quoted value contains illegal characters\n  if (match === null) {\n    return null;\n  }\n\n  return [match[0], input.substring(match[0].length)];\n}\n\nvar defaultFont = [\"times\"];\n\nexport function parseFontFamily(input) {\n  var result = [];\n  var ch, parsed;\n  var remaining = input.trim();\n\n  if (remaining === \"\") {\n    return defaultFont;\n  }\n\n  if (remaining in systemFonts) {\n    return [systemFonts[remaining]];\n  }\n\n  while (remaining !== \"\") {\n    parsed = null;\n    remaining = eatWhiteSpace(remaining);\n    ch = remaining.charAt(0);\n\n    switch (ch) {\n      case '\"':\n      case \"'\":\n        parsed = parseQuotedFontFamily(remaining.substring(1), ch);\n        break;\n\n      default:\n        parsed = parseNonQuotedFontFamily(remaining);\n        break;\n    }\n\n    if (parsed === null) {\n      return defaultFont;\n    }\n\n    result.push(parsed[0]);\n\n    remaining = eatWhiteSpace(parsed[1]);\n\n    // We expect end of input or a comma separator here\n    if (remaining !== \"\" && remaining.charAt(0) !== \",\") {\n      return defaultFont;\n    }\n\n    remaining = remaining.replace(/^,/, \"\");\n  }\n\n  return result;\n}\n","/** @license\n * jsPDF addImage plugin\n * Copyright (c) 2012 Jason Siefken, https://github.com/siefkenj/\n *               2013 Chris Dowling, https://github.com/gingerchris\n *               2013 Trinh Ho, https://github.com/ineedfat\n *               2013 Edwin Alejandro Perez, https://github.com/eaparango\n *               2013 Norah Smith, https://github.com/burnburnrocket\n *               2014 Diego Casorran, https://github.com/diegocr\n *               2014 James Robb, https://github.com/jamesbrobb\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n/**\n * @name addImage\n * @module\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { atob, btoa } from \"../libs/AtobBtoa.js\";\n\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  var namespace = \"addImage_\";\n  jsPDFAPI.__addimage__ = {};\n\n  var UNKNOWN = \"UNKNOWN\";\n\n  // Heuristic selection of a good batch for large array .apply. Not limiting make the call overflow.\n  // With too small batch iteration will be slow as more calls are made,\n  // higher values cause larger and slower garbage collection.\n  var ARRAY_APPLY_BATCH = 8192;\n\n  var imageFileTypeHeaders = {\n    PNG: [[0x89, 0x50, 0x4e, 0x47]],\n    TIFF: [\n      [0x4d, 0x4d, 0x00, 0x2a], //Motorola\n      [0x49, 0x49, 0x2a, 0x00] //Intel\n    ],\n    JPEG: [\n      [\n        0xff,\n        0xd8,\n        0xff,\n        0xe0,\n        undefined,\n        undefined,\n        0x4a,\n        0x46,\n        0x49,\n        0x46,\n        0x00\n      ], //JFIF\n      [\n        0xff,\n        0xd8,\n        0xff,\n        0xe1,\n        undefined,\n        undefined,\n        0x45,\n        0x78,\n        0x69,\n        0x66,\n        0x00,\n        0x00\n      ], //Exif\n      [0xff, 0xd8, 0xff, 0xdb], //JPEG RAW\n      [0xff, 0xd8, 0xff, 0xee] //EXIF RAW\n    ],\n    JPEG2000: [[0x00, 0x00, 0x00, 0x0c, 0x6a, 0x50, 0x20, 0x20]],\n    GIF87a: [[0x47, 0x49, 0x46, 0x38, 0x37, 0x61]],\n    GIF89a: [[0x47, 0x49, 0x46, 0x38, 0x39, 0x61]],\n    WEBP: [\n      [\n        0x52,\n        0x49,\n        0x46,\n        0x46,\n        undefined,\n        undefined,\n        undefined,\n        undefined,\n        0x57,\n        0x45,\n        0x42,\n        0x50\n      ]\n    ],\n    BMP: [\n      [0x42, 0x4d], //BM - Windows 3.1x, 95, NT, ... etc.\n      [0x42, 0x41], //BA - OS/2 struct bitmap array\n      [0x43, 0x49], //CI - OS/2 struct color icon\n      [0x43, 0x50], //CP - OS/2 const color pointer\n      [0x49, 0x43], //IC - OS/2 struct icon\n      [0x50, 0x54] //PT - OS/2 pointer\n    ]\n  };\n\n  /**\n   * Recognize filetype of Image by magic-bytes\n   *\n   * https://en.wikipedia.org/wiki/List_of_file_signatures\n   *\n   * @name getImageFileTypeByImageData\n   * @public\n   * @function\n   * @param {string|arraybuffer} imageData imageData as binary String or arraybuffer\n   * @param {string} format format of file if filetype-recognition fails, e.g. 'JPEG'\n   *\n   * @returns {string} filetype of Image\n   */\n  var getImageFileTypeByImageData = (jsPDFAPI.__addimage__.getImageFileTypeByImageData = function(\n    imageData,\n    fallbackFormat\n  ) {\n    fallbackFormat = fallbackFormat || UNKNOWN;\n    var i;\n    var j;\n    var result = UNKNOWN;\n    var headerSchemata;\n    var compareResult;\n    var fileType;\n\n    if (\n      fallbackFormat === \"RGBA\" ||\n      (imageData.data !== undefined &&\n        imageData.data instanceof Uint8ClampedArray &&\n        \"height\" in imageData &&\n        \"width\" in imageData)\n    ) {\n      return \"RGBA\";\n    }\n\n    if (isArrayBufferView(imageData)) {\n      for (fileType in imageFileTypeHeaders) {\n        headerSchemata = imageFileTypeHeaders[fileType];\n        for (i = 0; i < headerSchemata.length; i += 1) {\n          compareResult = true;\n          for (j = 0; j < headerSchemata[i].length; j += 1) {\n            if (headerSchemata[i][j] === undefined) {\n              continue;\n            }\n            if (headerSchemata[i][j] !== imageData[j]) {\n              compareResult = false;\n              break;\n            }\n          }\n          if (compareResult === true) {\n            result = fileType;\n            break;\n          }\n        }\n      }\n    } else {\n      for (fileType in imageFileTypeHeaders) {\n        headerSchemata = imageFileTypeHeaders[fileType];\n        for (i = 0; i < headerSchemata.length; i += 1) {\n          compareResult = true;\n          for (j = 0; j < headerSchemata[i].length; j += 1) {\n            if (headerSchemata[i][j] === undefined) {\n              continue;\n            }\n            if (headerSchemata[i][j] !== imageData.charCodeAt(j)) {\n              compareResult = false;\n              break;\n            }\n          }\n          if (compareResult === true) {\n            result = fileType;\n            break;\n          }\n        }\n      }\n    }\n\n    if (result === UNKNOWN && fallbackFormat !== UNKNOWN) {\n      result = fallbackFormat;\n    }\n    return result;\n  });\n\n  // Image functionality ported from pdf.js\n  var putImage = function(image) {\n    var out = this.internal.write;\n    var putStream = this.internal.putStream;\n    var getFilters = this.internal.getFilters;\n\n    var filter = getFilters();\n    while (filter.indexOf(\"FlateEncode\") !== -1) {\n      filter.splice(filter.indexOf(\"FlateEncode\"), 1);\n    }\n\n    image.objectId = this.internal.newObject();\n\n    var additionalKeyValues = [];\n    additionalKeyValues.push({ key: \"Type\", value: \"/XObject\" });\n    additionalKeyValues.push({ key: \"Subtype\", value: \"/Image\" });\n    additionalKeyValues.push({ key: \"Width\", value: image.width });\n    additionalKeyValues.push({ key: \"Height\", value: image.height });\n\n    if (image.colorSpace === color_spaces.INDEXED) {\n      additionalKeyValues.push({\n        key: \"ColorSpace\",\n        value:\n          \"[/Indexed /DeviceRGB \" +\n          // if an indexed png defines more than one colour with transparency, we've created a sMask\n          (image.palette.length / 3 - 1) +\n          \" \" +\n          (\"sMask\" in image && typeof image.sMask !== \"undefined\"\n            ? image.objectId + 2\n            : image.objectId + 1) +\n          \" 0 R]\"\n      });\n    } else {\n      additionalKeyValues.push({\n        key: \"ColorSpace\",\n        value: \"/\" + image.colorSpace\n      });\n      if (image.colorSpace === color_spaces.DEVICE_CMYK) {\n        additionalKeyValues.push({ key: \"Decode\", value: \"[1 0 1 0 1 0 1 0]\" });\n      }\n    }\n    additionalKeyValues.push({\n      key: \"BitsPerComponent\",\n      value: image.bitsPerComponent\n    });\n    if (\n      \"decodeParameters\" in image &&\n      typeof image.decodeParameters !== \"undefined\"\n    ) {\n      additionalKeyValues.push({\n        key: \"DecodeParms\",\n        value: \"<<\" + image.decodeParameters + \">>\"\n      });\n    }\n    if (\"transparency\" in image && Array.isArray(image.transparency)) {\n      var transparency = \"\",\n        i = 0,\n        len = image.transparency.length;\n      for (; i < len; i++)\n        transparency +=\n          image.transparency[i] + \" \" + image.transparency[i] + \" \";\n\n      additionalKeyValues.push({\n        key: \"Mask\",\n        value: \"[\" + transparency + \"]\"\n      });\n    }\n    if (typeof image.sMask !== \"undefined\") {\n      additionalKeyValues.push({\n        key: \"SMask\",\n        value: image.objectId + 1 + \" 0 R\"\n      });\n    }\n\n    var alreadyAppliedFilters =\n      typeof image.filter !== \"undefined\" ? [\"/\" + image.filter] : undefined;\n\n    putStream({\n      data: image.data,\n      additionalKeyValues: additionalKeyValues,\n      alreadyAppliedFilters: alreadyAppliedFilters,\n      objectId: image.objectId\n    });\n\n    out(\"endobj\");\n\n    // Soft mask\n    if (\"sMask\" in image && typeof image.sMask !== \"undefined\") {\n      var decodeParameters =\n        \"/Predictor \" +\n        image.predictor +\n        \" /Colors 1 /BitsPerComponent \" +\n        image.bitsPerComponent +\n        \" /Columns \" +\n        image.width;\n      var sMask = {\n        width: image.width,\n        height: image.height,\n        colorSpace: \"DeviceGray\",\n        bitsPerComponent: image.bitsPerComponent,\n        decodeParameters: decodeParameters,\n        data: image.sMask\n      };\n      if (\"filter\" in image) {\n        sMask.filter = image.filter;\n      }\n      putImage.call(this, sMask);\n    }\n\n    //Palette\n    if (image.colorSpace === color_spaces.INDEXED) {\n      var objId = this.internal.newObject();\n      //out('<< /Filter / ' + img['f'] +' /Length ' + img['pal'].length + '>>');\n      //putStream(zlib.compress(img['pal']));\n      putStream({\n        data: arrayBufferToBinaryString(new Uint8Array(image.palette)),\n        objectId: objId\n      });\n      out(\"endobj\");\n    }\n  };\n  var putResourcesCallback = function() {\n    var images = this.internal.collections[namespace + \"images\"];\n    for (var i in images) {\n      putImage.call(this, images[i]);\n    }\n  };\n  var putXObjectsDictCallback = function() {\n    var images = this.internal.collections[namespace + \"images\"],\n      out = this.internal.write,\n      image;\n    for (var i in images) {\n      image = images[i];\n      out(\"/I\" + image.index, image.objectId, \"0\", \"R\");\n    }\n  };\n\n  var checkCompressValue = function(value) {\n    if (value && typeof value === \"string\") value = value.toUpperCase();\n    return value in jsPDFAPI.image_compression ? value : image_compression.NONE;\n  };\n\n  var initialize = function() {\n    if (!this.internal.collections[namespace + \"images\"]) {\n      this.internal.collections[namespace + \"images\"] = {};\n      this.internal.events.subscribe(\"putResources\", putResourcesCallback);\n      this.internal.events.subscribe(\"putXobjectDict\", putXObjectsDictCallback);\n    }\n  };\n\n  var getImages = function() {\n    var images = this.internal.collections[namespace + \"images\"];\n    initialize.call(this);\n    return images;\n  };\n  var getImageIndex = function() {\n    return Object.keys(this.internal.collections[namespace + \"images\"]).length;\n  };\n  var notDefined = function(value) {\n    return typeof value === \"undefined\" || value === null || value.length === 0;\n  };\n  var generateAliasFromImageData = function(imageData) {\n    if (typeof imageData === \"string\" || isArrayBufferView(imageData)) {\n      return sHashCode(imageData);\n    } else if (isArrayBufferView(imageData.data)) {\n      return sHashCode(imageData.data);\n    }\n\n    return null;\n  };\n\n  var isImageTypeSupported = function(type) {\n    return typeof jsPDFAPI[\"process\" + type.toUpperCase()] === \"function\";\n  };\n\n  var isDOMElement = function(object) {\n    return typeof object === \"object\" && object.nodeType === 1;\n  };\n\n  var getImageDataFromElement = function(element, format) {\n    //if element is an image which uses data url definition, just return the dataurl\n    if (element.nodeName === \"IMG\" && element.hasAttribute(\"src\")) {\n      var src = \"\" + element.getAttribute(\"src\");\n\n      //is base64 encoded dataUrl, directly process it\n      if (src.indexOf(\"data:image/\") === 0) {\n        return atob(\n          unescape(src)\n            .split(\"base64,\")\n            .pop()\n        );\n      }\n\n      //it is probably an url, try to load it\n      var tmpImageData = jsPDFAPI.loadFile(src, true);\n      if (tmpImageData !== undefined) {\n        return tmpImageData;\n      }\n    }\n\n    if (element.nodeName === \"CANVAS\") {\n      if (element.width === 0 || element.height === 0) {\n        throw new Error(\n          \"Given canvas must have data. Canvas width: \" +\n            element.width +\n            \", height: \" +\n            element.height\n        );\n      }\n      var mimeType;\n      switch (format) {\n        case \"PNG\":\n          mimeType = \"image/png\";\n          break;\n        case \"WEBP\":\n          mimeType = \"image/webp\";\n          break;\n        case \"JPEG\":\n        case \"JPG\":\n        default:\n          mimeType = \"image/jpeg\";\n          break;\n      }\n      return atob(\n        element\n          .toDataURL(mimeType, 1.0)\n          .split(\"base64,\")\n          .pop()\n      );\n    }\n  };\n\n  var checkImagesForAlias = function(alias) {\n    var images = this.internal.collections[namespace + \"images\"];\n    if (images) {\n      for (var e in images) {\n        if (alias === images[e].alias) {\n          return images[e];\n        }\n      }\n    }\n  };\n\n  var determineWidthAndHeight = function(width, height, image) {\n    if (!width && !height) {\n      width = -96;\n      height = -96;\n    }\n    if (width < 0) {\n      width = (-1 * image.width * 72) / width / this.internal.scaleFactor;\n    }\n    if (height < 0) {\n      height = (-1 * image.height * 72) / height / this.internal.scaleFactor;\n    }\n    if (width === 0) {\n      width = (height * image.width) / image.height;\n    }\n    if (height === 0) {\n      height = (width * image.height) / image.width;\n    }\n\n    return [width, height];\n  };\n\n  var writeImageToPDF = function(x, y, width, height, image, rotation) {\n    var dims = determineWidthAndHeight.call(this, width, height, image),\n      coord = this.internal.getCoordinateString,\n      vcoord = this.internal.getVerticalCoordinateString;\n\n    var images = getImages.call(this);\n\n    width = dims[0];\n    height = dims[1];\n    images[image.index] = image;\n\n    if (rotation) {\n      rotation *= Math.PI / 180;\n      var c = Math.cos(rotation);\n      var s = Math.sin(rotation);\n      //like in pdf Reference do it 4 digits instead of 2\n      var f4 = function(number) {\n        return number.toFixed(4);\n      };\n      var rotationTransformationMatrix = [\n        f4(c),\n        f4(s),\n        f4(s * -1),\n        f4(c),\n        0,\n        0,\n        \"cm\"\n      ];\n    }\n    this.internal.write(\"q\"); //Save graphics state\n    if (rotation) {\n      this.internal.write(\n        [1, \"0\", \"0\", 1, coord(x), vcoord(y + height), \"cm\"].join(\" \")\n      ); //Translate\n      this.internal.write(rotationTransformationMatrix.join(\" \")); //Rotate\n      this.internal.write(\n        [coord(width), \"0\", \"0\", coord(height), \"0\", \"0\", \"cm\"].join(\" \")\n      ); //Scale\n    } else {\n      this.internal.write(\n        [\n          coord(width),\n          \"0\",\n          \"0\",\n          coord(height),\n          coord(x),\n          vcoord(y + height),\n          \"cm\"\n        ].join(\" \")\n      ); //Translate and Scale\n    }\n\n    if (this.isAdvancedAPI()) {\n      // draw image bottom up when in \"advanced\" API mode\n      this.internal.write([1, 0, 0, -1, 0, 0, \"cm\"].join(\" \"));\n    }\n\n    this.internal.write(\"/I\" + image.index + \" Do\"); //Paint Image\n    this.internal.write(\"Q\"); //Restore graphics state\n  };\n\n  /**\n   * COLOR SPACES\n   */\n  var color_spaces = (jsPDFAPI.color_spaces = {\n    DEVICE_RGB: \"DeviceRGB\",\n    DEVICE_GRAY: \"DeviceGray\",\n    DEVICE_CMYK: \"DeviceCMYK\",\n    CAL_GREY: \"CalGray\",\n    CAL_RGB: \"CalRGB\",\n    LAB: \"Lab\",\n    ICC_BASED: \"ICCBased\",\n    INDEXED: \"Indexed\",\n    PATTERN: \"Pattern\",\n    SEPARATION: \"Separation\",\n    DEVICE_N: \"DeviceN\"\n  });\n\n  /**\n   * DECODE METHODS\n   */\n  jsPDFAPI.decode = {\n    DCT_DECODE: \"DCTDecode\",\n    FLATE_DECODE: \"FlateDecode\",\n    LZW_DECODE: \"LZWDecode\",\n    JPX_DECODE: \"JPXDecode\",\n    JBIG2_DECODE: \"JBIG2Decode\",\n    ASCII85_DECODE: \"ASCII85Decode\",\n    ASCII_HEX_DECODE: \"ASCIIHexDecode\",\n    RUN_LENGTH_DECODE: \"RunLengthDecode\",\n    CCITT_FAX_DECODE: \"CCITTFaxDecode\"\n  };\n\n  /**\n   * IMAGE COMPRESSION TYPES\n   */\n  var image_compression = (jsPDFAPI.image_compression = {\n    NONE: \"NONE\",\n    FAST: \"FAST\",\n    MEDIUM: \"MEDIUM\",\n    SLOW: \"SLOW\"\n  });\n\n  /**\n   * @name sHashCode\n   * @function\n   * @param {string} data\n   * @returns {string}\n   */\n  var sHashCode = (jsPDFAPI.__addimage__.sHashCode = function(data) {\n    var hash = 0,\n      i,\n      len;\n\n    if (typeof data === \"string\") {\n      len = data.length;\n      for (i = 0; i < len; i++) {\n        hash = (hash << 5) - hash + data.charCodeAt(i);\n        hash |= 0; // Convert to 32bit integer\n      }\n    } else if (isArrayBufferView(data)) {\n      len = data.byteLength / 2;\n      for (i = 0; i < len; i++) {\n        hash = (hash << 5) - hash + data[i];\n        hash |= 0; // Convert to 32bit integer\n      }\n    }\n    return hash;\n  });\n\n  /**\n   * Validates if given String is a valid Base64-String\n   *\n   * @name validateStringAsBase64\n   * @public\n   * @function\n   * @param {String} possible Base64-String\n   *\n   * @returns {boolean}\n   */\n  var validateStringAsBase64 = (jsPDFAPI.__addimage__.validateStringAsBase64 = function(\n    possibleBase64String\n  ) {\n    possibleBase64String = possibleBase64String || \"\";\n    possibleBase64String.toString().trim();\n\n    var result = true;\n\n    if (possibleBase64String.length === 0) {\n      result = false;\n    }\n\n    if (possibleBase64String.length % 4 !== 0) {\n      result = false;\n    }\n\n    if (\n      /^[A-Za-z0-9+/]+$/.test(\n        possibleBase64String.substr(0, possibleBase64String.length - 2)\n      ) === false\n    ) {\n      result = false;\n    }\n\n    if (\n      /^[A-Za-z0-9/][A-Za-z0-9+/]|[A-Za-z0-9+/]=|==$/.test(\n        possibleBase64String.substr(-2)\n      ) === false\n    ) {\n      result = false;\n    }\n    return result;\n  });\n\n  /**\n   * Strips out and returns info from a valid base64 data URI\n   *\n   * @name extractImageFromDataUrl\n   * @function\n   * @param {string} dataUrl a valid data URI of format 'data:[<MIME-type>][;base64],<data>'\n   * @returns {Array}an Array containing the following\n   * [0] the complete data URI\n   * [1] <MIME-type>\n   * [2] format - the second part of the mime-type i.e 'png' in 'image/png'\n   * [4] <data>\n   */\n  var extractImageFromDataUrl = (jsPDFAPI.__addimage__.extractImageFromDataUrl = function(\n    dataUrl\n  ) {\n    dataUrl = dataUrl || \"\";\n    var dataUrlParts = dataUrl.split(\"base64,\");\n    var result = null;\n\n    if (dataUrlParts.length === 2) {\n      var extractedInfo = /^data:(\\w*\\/\\w*);*(charset=(?!charset=)[\\w=-]*)*;*$/.exec(\n        dataUrlParts[0]\n      );\n      if (Array.isArray(extractedInfo)) {\n        result = {\n          mimeType: extractedInfo[1],\n          charset: extractedInfo[2],\n          data: dataUrlParts[1]\n        };\n      }\n    }\n    return result;\n  });\n\n  /**\n   * Check to see if ArrayBuffer is supported\n   *\n   * @name supportsArrayBuffer\n   * @function\n   * @returns {boolean}\n   */\n  var supportsArrayBuffer = (jsPDFAPI.__addimage__.supportsArrayBuffer = function() {\n    return (\n      typeof ArrayBuffer !== \"undefined\" && typeof Uint8Array !== \"undefined\"\n    );\n  });\n\n  /**\n   * Tests supplied object to determine if ArrayBuffer\n   *\n   * @name isArrayBuffer\n   * @function\n   * @param {Object} object an Object\n   *\n   * @returns {boolean}\n   */\n  jsPDFAPI.__addimage__.isArrayBuffer = function(object) {\n    return supportsArrayBuffer() && object instanceof ArrayBuffer;\n  };\n\n  /**\n   * Tests supplied object to determine if it implements the ArrayBufferView (TypedArray) interface\n   *\n   * @name isArrayBufferView\n   * @function\n   * @param {Object} object an Object\n   * @returns {boolean}\n   */\n  var isArrayBufferView = (jsPDFAPI.__addimage__.isArrayBufferView = function(\n    object\n  ) {\n    return (\n      supportsArrayBuffer() &&\n      typeof Uint32Array !== \"undefined\" &&\n      (object instanceof Int8Array ||\n        object instanceof Uint8Array ||\n        (typeof Uint8ClampedArray !== \"undefined\" &&\n          object instanceof Uint8ClampedArray) ||\n        object instanceof Int16Array ||\n        object instanceof Uint16Array ||\n        object instanceof Int32Array ||\n        object instanceof Uint32Array ||\n        object instanceof Float32Array ||\n        object instanceof Float64Array)\n    );\n  });\n\n  /**\n   * Convert Binary String to ArrayBuffer\n   *\n   * @name binaryStringToUint8Array\n   * @public\n   * @function\n   * @param {string} BinaryString with ImageData\n   * @returns {Uint8Array}\n   */\n  var binaryStringToUint8Array = (jsPDFAPI.__addimage__.binaryStringToUint8Array = function(\n    binary_string\n  ) {\n    var len = binary_string.length;\n    var bytes = new Uint8Array(len);\n    for (var i = 0; i < len; i++) {\n      bytes[i] = binary_string.charCodeAt(i);\n    }\n    return bytes;\n  });\n\n  /**\n   * Convert the Buffer to a Binary String\n   *\n   * @name arrayBufferToBinaryString\n   * @public\n   * @function\n   * @param {ArrayBuffer|ArrayBufferView} ArrayBuffer buffer or bufferView with ImageData\n   *\n   * @returns {String}\n   */\n  var arrayBufferToBinaryString = (jsPDFAPI.__addimage__.arrayBufferToBinaryString = function(\n    buffer\n  ) {\n    var out = \"\";\n    // There are calls with both ArrayBuffer and already converted Uint8Array or other BufferView.\n    // Do not copy the array if input is already an array.\n    var buf = isArrayBufferView(buffer) ? buffer : new Uint8Array(buffer);\n    for (var i = 0; i < buf.length; i += ARRAY_APPLY_BATCH) {\n      // Limit the amount of characters being parsed to prevent overflow.\n      // Note that while TextDecoder would be faster, it does not have the same\n      // functionality as fromCharCode with any provided encodings as of 3/2021.\n      out += String.fromCharCode.apply(\n        null,\n        buf.subarray(i, i + ARRAY_APPLY_BATCH)\n      );\n    }\n    return out;\n  });\n\n  /**\n   * Possible parameter for addImage, an RGBA buffer with size.\n   *\n   * @typedef {Object} RGBAData\n   * @property {Uint8ClampedArray} data - Single dimensional array of RGBA values. For example from canvas getImageData.\n   * @property {number} width - Image width as the data does not carry this information in itself.\n   * @property {number} height - Image height as the data does not carry this information in itself.\n   */\n\n  /**\n   * Adds an Image to the PDF.\n   *\n   * @name addImage\n   * @public\n   * @function\n   * @param {string|HTMLImageElement|HTMLCanvasElement|Uint8Array|RGBAData} imageData imageData as base64 encoded DataUrl or Image-HTMLElement or Canvas-HTMLElement or object containing RGBA array (like output from canvas.getImageData).\n   * @param {string} format format of file if filetype-recognition fails or in case of a Canvas-Element needs to be specified (default for Canvas is JPEG), e.g. 'JPEG', 'PNG', 'WEBP'\n   * @param {number} x x Coordinate (in units declared at inception of PDF document) against left edge of the page\n   * @param {number} y y Coordinate (in units declared at inception of PDF document) against upper edge of the page\n   * @param {number} width width of the image (in units declared at inception of PDF document)\n   * @param {number} height height of the Image (in units declared at inception of PDF document)\n   * @param {string} alias alias of the image (if used multiple times)\n   * @param {string} compression compression of the generated JPEG, can have the values 'NONE', 'FAST', 'MEDIUM' and 'SLOW'\n   * @param {number} rotation rotation of the image in degrees (0-359)\n   *\n   * @returns jsPDF\n   */\n  jsPDFAPI.addImage = function() {\n    var imageData, format, x, y, w, h, alias, compression, rotation;\n\n    imageData = arguments[0];\n    if (typeof arguments[1] === \"number\") {\n      format = UNKNOWN;\n      x = arguments[1];\n      y = arguments[2];\n      w = arguments[3];\n      h = arguments[4];\n      alias = arguments[5];\n      compression = arguments[6];\n      rotation = arguments[7];\n    } else {\n      format = arguments[1];\n      x = arguments[2];\n      y = arguments[3];\n      w = arguments[4];\n      h = arguments[5];\n      alias = arguments[6];\n      compression = arguments[7];\n      rotation = arguments[8];\n    }\n\n    if (\n      typeof imageData === \"object\" &&\n      !isDOMElement(imageData) &&\n      \"imageData\" in imageData\n    ) {\n      var options = imageData;\n\n      imageData = options.imageData;\n      format = options.format || format || UNKNOWN;\n      x = options.x || x || 0;\n      y = options.y || y || 0;\n      w = options.w || options.width || w;\n      h = options.h || options.height || h;\n      alias = options.alias || alias;\n      compression = options.compression || compression;\n      rotation = options.rotation || options.angle || rotation;\n    }\n\n    //If compression is not explicitly set, determine if we should use compression\n    var filter = this.internal.getFilters();\n    if (compression === undefined && filter.indexOf(\"FlateEncode\") !== -1) {\n      compression = \"SLOW\";\n    }\n\n    if (isNaN(x) || isNaN(y)) {\n      throw new Error(\"Invalid coordinates passed to jsPDF.addImage\");\n    }\n\n    initialize.call(this);\n\n    var image = processImageData.call(\n      this,\n      imageData,\n      format,\n      alias,\n      compression\n    );\n\n    writeImageToPDF.call(this, x, y, w, h, image, rotation);\n\n    return this;\n  };\n\n  var processImageData = function(imageData, format, alias, compression) {\n    var result, dataAsBinaryString;\n\n    if (\n      typeof imageData === \"string\" &&\n      getImageFileTypeByImageData(imageData) === UNKNOWN\n    ) {\n      imageData = unescape(imageData);\n      var tmpImageData = convertBase64ToBinaryString(imageData, false);\n\n      if (tmpImageData !== \"\") {\n        imageData = tmpImageData;\n      } else {\n        tmpImageData = jsPDFAPI.loadFile(imageData, true);\n        if (tmpImageData !== undefined) {\n          imageData = tmpImageData;\n        }\n      }\n    }\n\n    if (isDOMElement(imageData)) {\n      imageData = getImageDataFromElement(imageData, format);\n    }\n\n    format = getImageFileTypeByImageData(imageData, format);\n    if (!isImageTypeSupported(format)) {\n      throw new Error(\n        \"addImage does not support files of type '\" +\n          format +\n          \"', please ensure that a plugin for '\" +\n          format +\n          \"' support is added.\"\n      );\n    }\n\n    // now do the heavy lifting\n\n    if (notDefined(alias)) {\n      alias = generateAliasFromImageData(imageData);\n    }\n    result = checkImagesForAlias.call(this, alias);\n\n    if (!result) {\n      if (supportsArrayBuffer()) {\n        // no need to convert if imageData is already uint8array\n        if (!(imageData instanceof Uint8Array) && format !== \"RGBA\") {\n          dataAsBinaryString = imageData;\n          imageData = binaryStringToUint8Array(imageData);\n        }\n      }\n\n      result = this[\"process\" + format.toUpperCase()](\n        imageData,\n        getImageIndex.call(this),\n        alias,\n        checkCompressValue(compression),\n        dataAsBinaryString\n      );\n    }\n\n    if (!result) {\n      throw new Error(\"An unknown error occurred whilst processing the image.\");\n    }\n    return result;\n  };\n\n  /**\n   * @name convertBase64ToBinaryString\n   * @function\n   * @param {string} stringData\n   * @returns {string} binary string\n   */\n  var convertBase64ToBinaryString = (jsPDFAPI.__addimage__.convertBase64ToBinaryString = function(\n    stringData,\n    throwError\n  ) {\n    throwError = typeof throwError === \"boolean\" ? throwError : true;\n    var base64Info;\n    var imageData = \"\";\n    var rawData;\n\n    if (typeof stringData === \"string\") {\n      base64Info = extractImageFromDataUrl(stringData);\n      rawData = base64Info !== null ? base64Info.data : stringData;\n\n      try {\n        imageData = atob(rawData);\n      } catch (e) {\n        if (throwError) {\n          if (!validateStringAsBase64(rawData)) {\n            throw new Error(\n              \"Supplied Data is not a valid base64-String jsPDF.convertBase64ToBinaryString \"\n            );\n          } else {\n            throw new Error(\n              \"atob-Error in jsPDF.convertBase64ToBinaryString \" + e.message\n            );\n          }\n        }\n      }\n    }\n    return imageData;\n  });\n\n  /**\n   * @name getImageProperties\n   * @function\n   * @param {Object} imageData\n   * @returns {Object}\n   */\n  jsPDFAPI.getImageProperties = function(imageData) {\n    var image;\n    var tmpImageData = \"\";\n    var format;\n\n    if (isDOMElement(imageData)) {\n      imageData = getImageDataFromElement(imageData);\n    }\n\n    if (\n      typeof imageData === \"string\" &&\n      getImageFileTypeByImageData(imageData) === UNKNOWN\n    ) {\n      tmpImageData = convertBase64ToBinaryString(imageData, false);\n\n      if (tmpImageData === \"\") {\n        tmpImageData = jsPDFAPI.loadFile(imageData) || \"\";\n      }\n      imageData = tmpImageData;\n    }\n\n    format = getImageFileTypeByImageData(imageData);\n    if (!isImageTypeSupported(format)) {\n      throw new Error(\n        \"addImage does not support files of type '\" +\n          format +\n          \"', please ensure that a plugin for '\" +\n          format +\n          \"' support is added.\"\n      );\n    }\n\n    if (supportsArrayBuffer() && !(imageData instanceof Uint8Array)) {\n      imageData = binaryStringToUint8Array(imageData);\n    }\n\n    image = this[\"process\" + format.toUpperCase()](imageData);\n\n    if (!image) {\n      throw new Error(\"An unknown error occurred whilst processing the image\");\n    }\n\n    image.fileType = format;\n\n    return image;\n  };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2017 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF arabic parser PlugIn\n *\n * @name arabic\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  /**\n   * Arabic shape substitutions: char code => (isolated, final, initial, medial).\n   * Arabic Substition A\n   */\n  var arabicSubstitionA = {\n    0x0621: [0xfe80], // ARABIC LETTER HAMZA\n    0x0622: [0xfe81, 0xfe82], // ARABIC LETTER ALEF WITH MADDA ABOVE\n    0x0623: [0xfe83, 0xfe84], // ARABIC LETTER ALEF WITH HAMZA ABOVE\n    0x0624: [0xfe85, 0xfe86], // ARABIC LETTER WAW WITH HAMZA ABOVE\n    0x0625: [0xfe87, 0xfe88], // ARABIC LETTER ALEF WITH HAMZA BELOW\n    0x0626: [0xfe89, 0xfe8a, 0xfe8b, 0xfe8c], // ARABIC LETTER YEH WITH HAMZA ABOVE\n    0x0627: [0xfe8d, 0xfe8e], // ARABIC LETTER ALEF\n    0x0628: [0xfe8f, 0xfe90, 0xfe91, 0xfe92], // ARABIC LETTER BEH\n    0x0629: [0xfe93, 0xfe94], // ARABIC LETTER TEH MARBUTA\n    0x062a: [0xfe95, 0xfe96, 0xfe97, 0xfe98], // ARABIC LETTER TEH\n    0x062b: [0xfe99, 0xfe9a, 0xfe9b, 0xfe9c], // ARABIC LETTER THEH\n    0x062c: [0xfe9d, 0xfe9e, 0xfe9f, 0xfea0], // ARABIC LETTER JEEM\n    0x062d: [0xfea1, 0xfea2, 0xfea3, 0xfea4], // ARABIC LETTER HAH\n    0x062e: [0xfea5, 0xfea6, 0xfea7, 0xfea8], // ARABIC LETTER KHAH\n    0x062f: [0xfea9, 0xfeaa], // ARABIC LETTER DAL\n    0x0630: [0xfeab, 0xfeac], // ARABIC LETTER THAL\n    0x0631: [0xfead, 0xfeae], // ARABIC LETTER REH\n    0x0632: [0xfeaf, 0xfeb0], // ARABIC LETTER ZAIN\n    0x0633: [0xfeb1, 0xfeb2, 0xfeb3, 0xfeb4], // ARABIC LETTER SEEN\n    0x0634: [0xfeb5, 0xfeb6, 0xfeb7, 0xfeb8], // ARABIC LETTER SHEEN\n    0x0635: [0xfeb9, 0xfeba, 0xfebb, 0xfebc], // ARABIC LETTER SAD\n    0x0636: [0xfebd, 0xfebe, 0xfebf, 0xfec0], // ARABIC LETTER DAD\n    0x0637: [0xfec1, 0xfec2, 0xfec3, 0xfec4], // ARABIC LETTER TAH\n    0x0638: [0xfec5, 0xfec6, 0xfec7, 0xfec8], // ARABIC LETTER ZAH\n    0x0639: [0xfec9, 0xfeca, 0xfecb, 0xfecc], // ARABIC LETTER AIN\n    0x063a: [0xfecd, 0xfece, 0xfecf, 0xfed0], // ARABIC LETTER GHAIN\n    0x0641: [0xfed1, 0xfed2, 0xfed3, 0xfed4], // ARABIC LETTER FEH\n    0x0642: [0xfed5, 0xfed6, 0xfed7, 0xfed8], // ARABIC LETTER QAF\n    0x0643: [0xfed9, 0xfeda, 0xfedb, 0xfedc], // ARABIC LETTER KAF\n    0x0644: [0xfedd, 0xfede, 0xfedf, 0xfee0], // ARABIC LETTER LAM\n    0x0645: [0xfee1, 0xfee2, 0xfee3, 0xfee4], // ARABIC LETTER MEEM\n    0x0646: [0xfee5, 0xfee6, 0xfee7, 0xfee8], // ARABIC LETTER NOON\n    0x0647: [0xfee9, 0xfeea, 0xfeeb, 0xfeec], // ARABIC LETTER HEH\n    0x0648: [0xfeed, 0xfeee], // ARABIC LETTER WAW\n    0x0649: [0xfeef, 0xfef0, 64488, 64489], // ARABIC LETTER ALEF MAKSURA\n    0x064a: [0xfef1, 0xfef2, 0xfef3, 0xfef4], // ARABIC LETTER YEH\n    0x0671: [0xfb50, 0xfb51], // ARABIC LETTER ALEF WASLA\n    0x0677: [0xfbdd], // ARABIC LETTER U WITH HAMZA ABOVE\n    0x0679: [0xfb66, 0xfb67, 0xfb68, 0xfb69], // ARABIC LETTER TTEH\n    0x067a: [0xfb5e, 0xfb5f, 0xfb60, 0xfb61], // ARABIC LETTER TTEHEH\n    0x067b: [0xfb52, 0xfb53, 0xfb54, 0xfb55], // ARABIC LETTER BEEH\n    0x067e: [0xfb56, 0xfb57, 0xfb58, 0xfb59], // ARABIC LETTER PEH\n    0x067f: [0xfb62, 0xfb63, 0xfb64, 0xfb65], // ARABIC LETTER TEHEH\n    0x0680: [0xfb5a, 0xfb5b, 0xfb5c, 0xfb5d], // ARABIC LETTER BEHEH\n    0x0683: [0xfb76, 0xfb77, 0xfb78, 0xfb79], // ARABIC LETTER NYEH\n    0x0684: [0xfb72, 0xfb73, 0xfb74, 0xfb75], // ARABIC LETTER DYEH\n    0x0686: [0xfb7a, 0xfb7b, 0xfb7c, 0xfb7d], // ARABIC LETTER TCHEH\n    0x0687: [0xfb7e, 0xfb7f, 0xfb80, 0xfb81], // ARABIC LETTER TCHEHEH\n    0x0688: [0xfb88, 0xfb89], // ARABIC LETTER DDAL\n    0x068c: [0xfb84, 0xfb85], // ARABIC LETTER DAHAL\n    0x068d: [0xfb82, 0xfb83], // ARABIC LETTER DDAHAL\n    0x068e: [0xfb86, 0xfb87], // ARABIC LETTER DUL\n    0x0691: [0xfb8c, 0xfb8d], // ARABIC LETTER RREH\n    0x0698: [0xfb8a, 0xfb8b], // ARABIC LETTER JEH\n    0x06a4: [0xfb6a, 0xfb6b, 0xfb6c, 0xfb6d], // ARABIC LETTER VEH\n    0x06a6: [0xfb6e, 0xfb6f, 0xfb70, 0xfb71], // ARABIC LETTER PEHEH\n    0x06a9: [0xfb8e, 0xfb8f, 0xfb90, 0xfb91], // ARABIC LETTER KEHEH\n    0x06ad: [0xfbd3, 0xfbd4, 0xfbd5, 0xfbd6], // ARABIC LETTER NG\n    0x06af: [0xfb92, 0xfb93, 0xfb94, 0xfb95], // ARABIC LETTER GAF\n    0x06b1: [0xfb9a, 0xfb9b, 0xfb9c, 0xfb9d], // ARABIC LETTER NGOEH\n    0x06b3: [0xfb96, 0xfb97, 0xfb98, 0xfb99], // ARABIC LETTER GUEH\n    0x06ba: [0xfb9e, 0xfb9f], // ARABIC LETTER NOON GHUNNA\n    0x06bb: [0xfba0, 0xfba1, 0xfba2, 0xfba3], // ARABIC LETTER RNOON\n    0x06be: [0xfbaa, 0xfbab, 0xfbac, 0xfbad], // ARABIC LETTER HEH DOACHASHMEE\n    0x06c0: [0xfba4, 0xfba5], // ARABIC LETTER HEH WITH YEH ABOVE\n    0x06c1: [0xfba6, 0xfba7, 0xfba8, 0xfba9], // ARABIC LETTER HEH GOAL\n    0x06c5: [0xfbe0, 0xfbe1], // ARABIC LETTER KIRGHIZ OE\n    0x06c6: [0xfbd9, 0xfbda], // ARABIC LETTER OE\n    0x06c7: [0xfbd7, 0xfbd8], // ARABIC LETTER U\n    0x06c8: [0xfbdb, 0xfbdc], // ARABIC LETTER YU\n    0x06c9: [0xfbe2, 0xfbe3], // ARABIC LETTER KIRGHIZ YU\n    0x06cb: [0xfbde, 0xfbdf], // ARABIC LETTER VE\n    0x06cc: [0xfbfc, 0xfbfd, 0xfbfe, 0xfbff], // ARABIC LETTER FARSI YEH\n    0x06d0: [0xfbe4, 0xfbe5, 0xfbe6, 0xfbe7], //ARABIC LETTER E\n    0x06d2: [0xfbae, 0xfbaf], // ARABIC LETTER YEH BARREE\n    0x06d3: [0xfbb0, 0xfbb1] // ARABIC LETTER YEH BARREE WITH HAMZA ABOVE\n  };\n\n  /*\n    var ligaturesSubstitutionA = {\n        0xFBEA: []// ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM\n    };\n    */\n\n  var ligatures = {\n    0xfedf: {\n      0xfe82: 0xfef5, // ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM\n      0xfe84: 0xfef7, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM\n      0xfe88: 0xfef9, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM\n      0xfe8e: 0xfefb // ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM\n    },\n    0xfee0: {\n      0xfe82: 0xfef6, // ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM\n      0xfe84: 0xfef8, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM\n      0xfe88: 0xfefa, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM\n      0xfe8e: 0xfefc // ARABIC LIGATURE LAM WITH ALEF FINAL FORM\n    },\n    0xfe8d: { 0xfedf: { 0xfee0: { 0xfeea: 0xfdf2 } } }, // ALLAH\n    0x0651: {\n      0x064c: 0xfc5e, // Shadda + Dammatan\n      0x064d: 0xfc5f, // Shadda + Kasratan\n      0x064e: 0xfc60, // Shadda + Fatha\n      0x064f: 0xfc61, // Shadda + Damma\n      0x0650: 0xfc62 // Shadda + Kasra\n    }\n  };\n\n  var arabic_diacritics = {\n    1612: 64606, // Shadda + Dammatan\n    1613: 64607, // Shadda + Kasratan\n    1614: 64608, // Shadda + Fatha\n    1615: 64609, // Shadda + Damma\n    1616: 64610 // Shadda + Kasra\n  };\n\n  var alfletter = [1570, 1571, 1573, 1575];\n\n  var noChangeInForm = -1;\n  var isolatedForm = 0;\n  var finalForm = 1;\n  var initialForm = 2;\n  var medialForm = 3;\n\n  jsPDFAPI.__arabicParser__ = {};\n\n  //private\n  var isInArabicSubstitutionA = (jsPDFAPI.__arabicParser__.isInArabicSubstitutionA = function(\n    letter\n  ) {\n    return typeof arabicSubstitionA[letter.charCodeAt(0)] !== \"undefined\";\n  });\n\n  var isArabicLetter = (jsPDFAPI.__arabicParser__.isArabicLetter = function(\n    letter\n  ) {\n    return (\n      typeof letter === \"string\" &&\n      /^[\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\uFB50-\\uFDFF\\uFE70-\\uFEFF]+$/.test(\n        letter\n      )\n    );\n  });\n\n  var isArabicEndLetter = (jsPDFAPI.__arabicParser__.isArabicEndLetter = function(\n    letter\n  ) {\n    return (\n      isArabicLetter(letter) &&\n      isInArabicSubstitutionA(letter) &&\n      arabicSubstitionA[letter.charCodeAt(0)].length <= 2\n    );\n  });\n\n  var isArabicAlfLetter = (jsPDFAPI.__arabicParser__.isArabicAlfLetter = function(\n    letter\n  ) {\n    return (\n      isArabicLetter(letter) && alfletter.indexOf(letter.charCodeAt(0)) >= 0\n    );\n  });\n\n  jsPDFAPI.__arabicParser__.arabicLetterHasIsolatedForm = function(letter) {\n    return (\n      isArabicLetter(letter) &&\n      isInArabicSubstitutionA(letter) &&\n      arabicSubstitionA[letter.charCodeAt(0)].length >= 1\n    );\n  };\n\n  var arabicLetterHasFinalForm = (jsPDFAPI.__arabicParser__.arabicLetterHasFinalForm = function(\n    letter\n  ) {\n    return (\n      isArabicLetter(letter) &&\n      isInArabicSubstitutionA(letter) &&\n      arabicSubstitionA[letter.charCodeAt(0)].length >= 2\n    );\n  });\n\n  jsPDFAPI.__arabicParser__.arabicLetterHasInitialForm = function(letter) {\n    return (\n      isArabicLetter(letter) &&\n      isInArabicSubstitutionA(letter) &&\n      arabicSubstitionA[letter.charCodeAt(0)].length >= 3\n    );\n  };\n\n  var arabicLetterHasMedialForm = (jsPDFAPI.__arabicParser__.arabicLetterHasMedialForm = function(\n    letter\n  ) {\n    return (\n      isArabicLetter(letter) &&\n      isInArabicSubstitutionA(letter) &&\n      arabicSubstitionA[letter.charCodeAt(0)].length == 4\n    );\n  });\n\n  var resolveLigatures = (jsPDFAPI.__arabicParser__.resolveLigatures = function(\n    letters\n  ) {\n    var i = 0;\n    var tmpLigatures = ligatures;\n    var result = \"\";\n    var effectedLetters = 0;\n\n    for (i = 0; i < letters.length; i += 1) {\n      if (typeof tmpLigatures[letters.charCodeAt(i)] !== \"undefined\") {\n        effectedLetters++;\n        tmpLigatures = tmpLigatures[letters.charCodeAt(i)];\n\n        if (typeof tmpLigatures === \"number\") {\n          result += String.fromCharCode(tmpLigatures);\n          tmpLigatures = ligatures;\n          effectedLetters = 0;\n        }\n        if (i === letters.length - 1) {\n          tmpLigatures = ligatures;\n          result += letters.charAt(i - (effectedLetters - 1));\n          i = i - (effectedLetters - 1);\n          effectedLetters = 0;\n        }\n      } else {\n        tmpLigatures = ligatures;\n        result += letters.charAt(i - effectedLetters);\n        i = i - effectedLetters;\n        effectedLetters = 0;\n      }\n    }\n\n    return result;\n  });\n\n  jsPDFAPI.__arabicParser__.isArabicDiacritic = function(letter) {\n    return (\n      letter !== undefined &&\n      arabic_diacritics[letter.charCodeAt(0)] !== undefined\n    );\n  };\n\n  var getCorrectForm = (jsPDFAPI.__arabicParser__.getCorrectForm = function(\n    currentChar,\n    beforeChar,\n    nextChar\n  ) {\n    if (!isArabicLetter(currentChar)) {\n      return -1;\n    }\n\n    if (isInArabicSubstitutionA(currentChar) === false) {\n      return noChangeInForm;\n    }\n    if (\n      !arabicLetterHasFinalForm(currentChar) ||\n      (!isArabicLetter(beforeChar) && !isArabicLetter(nextChar)) ||\n      (!isArabicLetter(nextChar) && isArabicEndLetter(beforeChar)) ||\n      (isArabicEndLetter(currentChar) && !isArabicLetter(beforeChar)) ||\n      (isArabicEndLetter(currentChar) && isArabicAlfLetter(beforeChar)) ||\n      (isArabicEndLetter(currentChar) && isArabicEndLetter(beforeChar))\n    ) {\n      return isolatedForm;\n    }\n\n    if (\n      arabicLetterHasMedialForm(currentChar) &&\n      isArabicLetter(beforeChar) &&\n      !isArabicEndLetter(beforeChar) &&\n      isArabicLetter(nextChar) &&\n      arabicLetterHasFinalForm(nextChar)\n    ) {\n      return medialForm;\n    }\n\n    if (isArabicEndLetter(currentChar) || !isArabicLetter(nextChar)) {\n      return finalForm;\n    }\n    return initialForm;\n  });\n\n  /**\n   * @name processArabic\n   * @function\n   * @param {string} text\n   * @returns {string}\n   */\n  var parseArabic = function(text) {\n    text = text || \"\";\n\n    var result = \"\";\n    var i = 0;\n    var j = 0;\n    var position = 0;\n    var currentLetter = \"\";\n    var prevLetter = \"\";\n    var nextLetter = \"\";\n\n    var words = text.split(\"\\\\s+\");\n    var newWords = [];\n    for (i = 0; i < words.length; i += 1) {\n      newWords.push(\"\");\n      for (j = 0; j < words[i].length; j += 1) {\n        currentLetter = words[i][j];\n        prevLetter = words[i][j - 1];\n        nextLetter = words[i][j + 1];\n        if (isArabicLetter(currentLetter)) {\n          position = getCorrectForm(currentLetter, prevLetter, nextLetter);\n          if (position !== -1) {\n            newWords[i] += String.fromCharCode(\n              arabicSubstitionA[currentLetter.charCodeAt(0)][position]\n            );\n          } else {\n            newWords[i] += currentLetter;\n          }\n        } else {\n          newWords[i] += currentLetter;\n        }\n      }\n\n      newWords[i] = resolveLigatures(newWords[i]);\n    }\n    result = newWords.join(\" \");\n\n    return result;\n  };\n\n  var processArabic = (jsPDFAPI.__arabicParser__.processArabic = jsPDFAPI.processArabic = function() {\n    var text =\n      typeof arguments[0] === \"string\" ? arguments[0] : arguments[0].text;\n    var tmpText = [];\n    var result;\n\n    if (Array.isArray(text)) {\n      var i = 0;\n      tmpText = [];\n      for (i = 0; i < text.length; i += 1) {\n        if (Array.isArray(text[i])) {\n          tmpText.push([parseArabic(text[i][0]), text[i][1], text[i][2]]);\n        } else {\n          tmpText.push([parseArabic(text[i])]);\n        }\n      }\n      result = tmpText;\n    } else {\n      result = parseArabic(text);\n    }\n    if (typeof arguments[0] === \"string\") {\n      return result;\n    } else {\n      arguments[0].text = result;\n      return arguments[0];\n    }\n  });\n\n  jsPDFAPI.events.push([\"preProcessText\", processArabic]);\n})(jsPDF.API);\n","/** @license\n * jsPDF Autoprint Plugin\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name autoprint\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  /**\n   * Makes the PDF automatically open the print-Dialog when opened in a PDF-viewer.\n   *\n   * @name autoPrint\n   * @function\n   * @param {Object} options (optional) Set the attribute variant to 'non-conform' (default) or 'javascript' to activate different methods of automatic printing when opening in a PDF-viewer .\n   * @returns {jsPDF}\n   * @example\n   * var doc = new jsPDF();\n   * doc.text(10, 10, 'This is a test');\n   * doc.autoPrint({variant: 'non-conform'});\n   * doc.save('autoprint.pdf');\n   */\n  jsPDFAPI.autoPrint = function(options) {\n    \"use strict\";\n    var refAutoPrintTag;\n    options = options || {};\n    options.variant = options.variant || \"non-conform\";\n\n    switch (options.variant) {\n      case \"javascript\":\n        //https://github.com/Rob--W/pdf.js/commit/c676ecb5a0f54677b9f3340c3ef2cf42225453bb\n        this.addJS(\"print({});\");\n        break;\n      case \"non-conform\":\n      default:\n        this.internal.events.subscribe(\"postPutResources\", function() {\n          refAutoPrintTag = this.internal.newObject();\n          this.internal.out(\"<<\");\n          this.internal.out(\"/S /Named\");\n          this.internal.out(\"/Type /Action\");\n          this.internal.out(\"/N /Print\");\n          this.internal.out(\">>\");\n          this.internal.out(\"endobj\");\n        });\n\n        this.internal.events.subscribe(\"putCatalog\", function() {\n          this.internal.out(\"/OpenAction \" + refAutoPrintTag + \" 0 R\");\n        });\n        break;\n    }\n    return this;\n  };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC)  steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF Canvas PlugIn\n * This plugin mimics the HTML5 Canvas\n *\n * The goal is to provide a way for current canvas users to print directly to a PDF.\n * @name canvas\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  /**\n   * @class Canvas\n   * @classdesc A Canvas Wrapper for jsPDF\n   */\n  var Canvas = function() {\n    var jsPdfInstance = undefined;\n    Object.defineProperty(this, \"pdf\", {\n      get: function() {\n        return jsPdfInstance;\n      },\n      set: function(value) {\n        jsPdfInstance = value;\n      }\n    });\n\n    var _width = 150;\n    /**\n     * The height property is a positive integer reflecting the height HTML attribute of the <canvas> element interpreted in CSS pixels. When the attribute is not specified, or if it is set to an invalid value, like a negative, the default value of 150 is used.\n     * This is one of the two properties, the other being width, that controls the size of the canvas.\n     *\n     * @name width\n     */\n    Object.defineProperty(this, \"width\", {\n      get: function() {\n        return _width;\n      },\n      set: function(value) {\n        if (isNaN(value) || Number.isInteger(value) === false || value < 0) {\n          _width = 150;\n        } else {\n          _width = value;\n        }\n        if (this.getContext(\"2d\").pageWrapXEnabled) {\n          this.getContext(\"2d\").pageWrapX = _width + 1;\n        }\n      }\n    });\n\n    var _height = 300;\n    /**\n     * The width property is a positive integer reflecting the width HTML attribute of the <canvas> element interpreted in CSS pixels. When the attribute is not specified, or if it is set to an invalid value, like a negative, the default value of 300 is used.\n     * This is one of the two properties, the other being height, that controls the size of the canvas.\n     *\n     * @name height\n     */\n    Object.defineProperty(this, \"height\", {\n      get: function() {\n        return _height;\n      },\n      set: function(value) {\n        if (isNaN(value) || Number.isInteger(value) === false || value < 0) {\n          _height = 300;\n        } else {\n          _height = value;\n        }\n        if (this.getContext(\"2d\").pageWrapYEnabled) {\n          this.getContext(\"2d\").pageWrapY = _height + 1;\n        }\n      }\n    });\n\n    var _childNodes = [];\n    Object.defineProperty(this, \"childNodes\", {\n      get: function() {\n        return _childNodes;\n      },\n      set: function(value) {\n        _childNodes = value;\n      }\n    });\n\n    var _style = {};\n    Object.defineProperty(this, \"style\", {\n      get: function() {\n        return _style;\n      },\n      set: function(value) {\n        _style = value;\n      }\n    });\n\n    Object.defineProperty(this, \"parentNode\", {});\n  };\n\n  /**\n   * The getContext() method returns a drawing context on the canvas, or null if the context identifier is not supported.\n   *\n   * @name getContext\n   * @function\n   * @param {string} contextType Is a String containing the context identifier defining the drawing context associated to the canvas. Possible value is \"2d\", leading to the creation of a Context2D object representing a two-dimensional rendering context.\n   * @param {object} contextAttributes\n   */\n  Canvas.prototype.getContext = function(contextType, contextAttributes) {\n    contextType = contextType || \"2d\";\n    var key;\n\n    if (contextType !== \"2d\") {\n      return null;\n    }\n    for (key in contextAttributes) {\n      if (this.pdf.context2d.hasOwnProperty(key)) {\n        this.pdf.context2d[key] = contextAttributes[key];\n      }\n    }\n    this.pdf.context2d._canvas = this;\n    return this.pdf.context2d;\n  };\n\n  /**\n   * The toDataURL() method is just a stub to throw an error if accidently called.\n   *\n   * @name toDataURL\n   * @function\n   */\n  Canvas.prototype.toDataURL = function() {\n    throw new Error(\"toDataURL is not implemented.\");\n  };\n\n  jsPDFAPI.events.push([\n    \"initialized\",\n    function() {\n      this.canvas = new Canvas();\n      this.canvas.pdf = this;\n    }\n  ]);\n\n  return this;\n})(jsPDF.API);\n","/**\n * @license\n * ====================================================================\n * Copyright (c) 2013 Youssef Beddad, youssef.beddad@gmail.com\n *               2013 Eduardo Menezes de Morais, eduardo.morais@usp.br\n *               2013 Lee Driscoll, https://github.com/lsdriscoll\n *               2014 Juan Pablo Gaviria, https://github.com/juanpgaviria\n *               2014 James Hall, james@parall.ax\n *               2014 Diego Casorran, https://github.com/diegocr\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name cell\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  var NO_MARGINS = { left: 0, top: 0, bottom: 0, right: 0 };\n\n  var px2pt = (0.264583 * 72) / 25.4;\n  var printingHeaderRow = false;\n\n  var _initialize = function() {\n    if (typeof this.internal.__cell__ === \"undefined\") {\n      this.internal.__cell__ = {};\n      this.internal.__cell__.padding = 3;\n      this.internal.__cell__.headerFunction = undefined;\n      this.internal.__cell__.margins = Object.assign({}, NO_MARGINS);\n      this.internal.__cell__.margins.width = this.getPageWidth();\n      _reset.call(this);\n    }\n  };\n\n  var _reset = function() {\n    this.internal.__cell__.lastCell = new Cell();\n    this.internal.__cell__.pages = 1;\n  };\n\n  var Cell = function() {\n    var _x = arguments[0];\n    Object.defineProperty(this, \"x\", {\n      enumerable: true,\n      get: function() {\n        return _x;\n      },\n      set: function(value) {\n        _x = value;\n      }\n    });\n    var _y = arguments[1];\n    Object.defineProperty(this, \"y\", {\n      enumerable: true,\n      get: function() {\n        return _y;\n      },\n      set: function(value) {\n        _y = value;\n      }\n    });\n    var _width = arguments[2];\n    Object.defineProperty(this, \"width\", {\n      enumerable: true,\n      get: function() {\n        return _width;\n      },\n      set: function(value) {\n        _width = value;\n      }\n    });\n    var _height = arguments[3];\n    Object.defineProperty(this, \"height\", {\n      enumerable: true,\n      get: function() {\n        return _height;\n      },\n      set: function(value) {\n        _height = value;\n      }\n    });\n    var _text = arguments[4];\n    Object.defineProperty(this, \"text\", {\n      enumerable: true,\n      get: function() {\n        return _text;\n      },\n      set: function(value) {\n        _text = value;\n      }\n    });\n    var _lineNumber = arguments[5];\n    Object.defineProperty(this, \"lineNumber\", {\n      enumerable: true,\n      get: function() {\n        return _lineNumber;\n      },\n      set: function(value) {\n        _lineNumber = value;\n      }\n    });\n    var _align = arguments[6];\n    Object.defineProperty(this, \"align\", {\n      enumerable: true,\n      get: function() {\n        return _align;\n      },\n      set: function(value) {\n        _align = value;\n      }\n    });\n\n    return this;\n  };\n\n  Cell.prototype.clone = function() {\n    return new Cell(\n      this.x,\n      this.y,\n      this.width,\n      this.height,\n      this.text,\n      this.lineNumber,\n      this.align\n    );\n  };\n\n  Cell.prototype.toArray = function() {\n    return [\n      this.x,\n      this.y,\n      this.width,\n      this.height,\n      this.text,\n      this.lineNumber,\n      this.align\n    ];\n  };\n\n  /**\n   * @name setHeaderFunction\n   * @function\n   * @param {function} func\n   */\n  jsPDFAPI.setHeaderFunction = function(func) {\n    _initialize.call(this);\n    this.internal.__cell__.headerFunction =\n      typeof func === \"function\" ? func : undefined;\n    return this;\n  };\n\n  /**\n   * @name getTextDimensions\n   * @function\n   * @param {string} txt\n   * @returns {Object} dimensions\n   */\n  jsPDFAPI.getTextDimensions = function(text, options) {\n    _initialize.call(this);\n    options = options || {};\n    var fontSize = options.fontSize || this.getFontSize();\n    var font = options.font || this.getFont();\n    var scaleFactor = options.scaleFactor || this.internal.scaleFactor;\n    var width = 0;\n    var amountOfLines = 0;\n    var height = 0;\n    var tempWidth = 0;\n    var scope = this;\n\n    if (!Array.isArray(text) && typeof text !== \"string\") {\n      if (typeof text === \"number\") {\n        text = String(text);\n      } else {\n        throw new Error(\n          \"getTextDimensions expects text-parameter to be of type String or type Number or an Array of Strings.\"\n        );\n      }\n    }\n\n    const maxWidth = options.maxWidth;\n    if (maxWidth > 0) {\n      if (typeof text === \"string\") {\n        text = this.splitTextToSize(text, maxWidth);\n      } else if (Object.prototype.toString.call(text) === \"[object Array]\") {\n        text = text.reduce(function(acc, textLine) {\n          return acc.concat(scope.splitTextToSize(textLine, maxWidth));\n        }, []);\n      }\n    } else {\n      // Without the else clause, it will not work if you do not pass along maxWidth\n      text = Array.isArray(text) ? text : [text];\n    }\n\n    for (var i = 0; i < text.length; i++) {\n      tempWidth = this.getStringUnitWidth(text[i], { font: font }) * fontSize;\n      if (width < tempWidth) {\n        width = tempWidth;\n      }\n    }\n\n    if (width !== 0) {\n      amountOfLines = text.length;\n    }\n\n    width = width / scaleFactor;\n    height = Math.max(\n      (amountOfLines * fontSize * this.getLineHeightFactor() -\n        fontSize * (this.getLineHeightFactor() - 1)) /\n        scaleFactor,\n      0\n    );\n    return { w: width, h: height };\n  };\n\n  /**\n   * @name cellAddPage\n   * @function\n   */\n  jsPDFAPI.cellAddPage = function() {\n    _initialize.call(this);\n\n    this.addPage();\n\n    var margins = this.internal.__cell__.margins || NO_MARGINS;\n    this.internal.__cell__.lastCell = new Cell(\n      margins.left,\n      margins.top,\n      undefined,\n      undefined\n    );\n    this.internal.__cell__.pages += 1;\n\n    return this;\n  };\n\n  /**\n   * @name cell\n   * @function\n   * @param {number} x\n   * @param {number} y\n   * @param {number} width\n   * @param {number} height\n   * @param {string} text\n   * @param {number} lineNumber lineNumber\n   * @param {string} align\n   * @return {jsPDF} jsPDF-instance\n   */\n  var cell = (jsPDFAPI.cell = function() {\n    var currentCell;\n\n    if (arguments[0] instanceof Cell) {\n      currentCell = arguments[0];\n    } else {\n      currentCell = new Cell(\n        arguments[0],\n        arguments[1],\n        arguments[2],\n        arguments[3],\n        arguments[4],\n        arguments[5]\n      );\n    }\n    _initialize.call(this);\n    var lastCell = this.internal.__cell__.lastCell;\n    var padding = this.internal.__cell__.padding;\n    var margins = this.internal.__cell__.margins || NO_MARGINS;\n    var tableHeaderRow = this.internal.__cell__.tableHeaderRow;\n    var printHeaders = this.internal.__cell__.printHeaders;\n    // If this is not the first cell, we must change its position\n    if (typeof lastCell.lineNumber !== \"undefined\") {\n      if (lastCell.lineNumber === currentCell.lineNumber) {\n        //Same line\n        currentCell.x = (lastCell.x || 0) + (lastCell.width || 0);\n        currentCell.y = lastCell.y || 0;\n      } else {\n        //New line\n        if (\n          lastCell.y + lastCell.height + currentCell.height + margins.bottom >\n          this.getPageHeight()\n        ) {\n          this.cellAddPage();\n          currentCell.y = margins.top;\n          if (printHeaders && tableHeaderRow) {\n            this.printHeaderRow(currentCell.lineNumber, true);\n            currentCell.y += tableHeaderRow[0].height;\n          }\n        } else {\n          currentCell.y = lastCell.y + lastCell.height || currentCell.y;\n        }\n      }\n    }\n\n    if (typeof currentCell.text[0] !== \"undefined\") {\n      this.rect(\n        currentCell.x,\n        currentCell.y,\n        currentCell.width,\n        currentCell.height,\n        printingHeaderRow === true ? \"FD\" : undefined\n      );\n      if (currentCell.align === \"right\") {\n        this.text(\n          currentCell.text,\n          currentCell.x + currentCell.width - padding,\n          currentCell.y + padding,\n          { align: \"right\", baseline: \"top\" }\n        );\n      } else if (currentCell.align === \"center\") {\n        this.text(\n          currentCell.text,\n          currentCell.x + currentCell.width / 2,\n          currentCell.y + padding,\n          {\n            align: \"center\",\n            baseline: \"top\",\n            maxWidth: currentCell.width - padding - padding\n          }\n        );\n      } else {\n        this.text(\n          currentCell.text,\n          currentCell.x + padding,\n          currentCell.y + padding,\n          {\n            align: \"left\",\n            baseline: \"top\",\n            maxWidth: currentCell.width - padding - padding\n          }\n        );\n      }\n    }\n    this.internal.__cell__.lastCell = currentCell;\n    return this;\n  });\n\n  /**\n     * Create a table from a set of data.\n     * @name table\n     * @function\n     * @param {Integer} [x] : left-position for top-left corner of table\n     * @param {Integer} [y] top-position for top-left corner of table\n     * @param {Object[]} [data] An array of objects containing key-value pairs corresponding to a row of data.\n     * @param {String[]} [headers] Omit or null to auto-generate headers at a performance cost\n\n     * @param {Object} [config.printHeaders] True to print column headers at the top of every page\n     * @param {Object} [config.autoSize] True to dynamically set the column widths to match the widest cell value\n     * @param {Object} [config.margins] margin values for left, top, bottom, and width\n     * @param {Object} [config.fontSize] Integer fontSize to use (optional)\n     * @param {Object} [config.padding] cell-padding in pt to use (optional)\n     * @param {Object} [config.headerBackgroundColor] default is #c8c8c8 (optional)\n     * @param {Object} [config.headerTextColor] default is #000 (optional)\n     * @param {Object} [config.rowStart] callback to handle before print each row (optional)\n     * @param {Object} [config.cellStart] callback to handle before print each cell (optional)\n     * @returns {jsPDF} jsPDF-instance\n     */\n\n  jsPDFAPI.table = function(x, y, data, headers, config) {\n    _initialize.call(this);\n    if (!data) {\n      throw new Error(\"No data for PDF table.\");\n    }\n\n    config = config || {};\n\n    var headerNames = [],\n      headerLabels = [],\n      headerAligns = [],\n      i,\n      columnMatrix = {},\n      columnWidths = {},\n      column,\n      columnMinWidths = [],\n      j,\n      tableHeaderConfigs = [],\n      //set up defaults. If a value is provided in config, defaults will be overwritten:\n      autoSize = config.autoSize || false,\n      printHeaders = config.printHeaders === false ? false : true,\n      fontSize =\n        config.css && typeof config.css[\"font-size\"] !== \"undefined\"\n          ? config.css[\"font-size\"] * 16\n          : config.fontSize || 12,\n      margins =\n        config.margins ||\n        Object.assign({ width: this.getPageWidth() }, NO_MARGINS),\n      padding = typeof config.padding === \"number\" ? config.padding : 3,\n      headerBackgroundColor = config.headerBackgroundColor || \"#c8c8c8\",\n      headerTextColor = config.headerTextColor || \"#000\";\n\n    _reset.call(this);\n\n    this.internal.__cell__.printHeaders = printHeaders;\n    this.internal.__cell__.margins = margins;\n    this.internal.__cell__.table_font_size = fontSize;\n    this.internal.__cell__.padding = padding;\n    this.internal.__cell__.headerBackgroundColor = headerBackgroundColor;\n    this.internal.__cell__.headerTextColor = headerTextColor;\n    this.setFontSize(fontSize);\n\n    // Set header values\n    if (headers === undefined || headers === null) {\n      // No headers defined so we derive from data\n      headerNames = Object.keys(data[0]);\n      headerLabels = headerNames;\n      headerAligns = headerNames.map(function() {\n        return \"left\";\n      });\n    } else if (Array.isArray(headers) && typeof headers[0] === \"object\") {\n      headerNames = headers.map(function(header) {\n        return header.name;\n      });\n      headerLabels = headers.map(function(header) {\n        return header.prompt || header.name || \"\";\n      });\n      headerAligns = headers.map(function(header) {\n        return header.align || \"left\";\n      });\n      // Split header configs into names and prompts\n      for (i = 0; i < headers.length; i += 1) {\n        columnWidths[headers[i].name] = headers[i].width * px2pt;\n      }\n    } else if (Array.isArray(headers) && typeof headers[0] === \"string\") {\n      headerNames = headers;\n      headerLabels = headerNames;\n      headerAligns = headerNames.map(function() {\n        return \"left\";\n      });\n    }\n\n    if (\n      autoSize ||\n      (Array.isArray(headers) && typeof headers[0] === \"string\")\n    ) {\n      var headerName;\n      for (i = 0; i < headerNames.length; i += 1) {\n        headerName = headerNames[i];\n\n        // Create a matrix of columns e.g., {column_title: [row1_Record, row2_Record]}\n\n        columnMatrix[headerName] = data.map(function(rec) {\n          return rec[headerName];\n        });\n\n        // get header width\n        this.setFont(undefined, \"bold\");\n        columnMinWidths.push(\n          this.getTextDimensions(headerLabels[i], {\n            fontSize: this.internal.__cell__.table_font_size,\n            scaleFactor: this.internal.scaleFactor\n          }).w\n        );\n        column = columnMatrix[headerName];\n\n        // get cell widths\n        this.setFont(undefined, \"normal\");\n        for (j = 0; j < column.length; j += 1) {\n          columnMinWidths.push(\n            this.getTextDimensions(column[j], {\n              fontSize: this.internal.__cell__.table_font_size,\n              scaleFactor: this.internal.scaleFactor\n            }).w\n          );\n        }\n\n        // get final column width\n        columnWidths[headerName] =\n          Math.max.apply(null, columnMinWidths) + padding + padding;\n\n        //have to reset\n        columnMinWidths = [];\n      }\n    }\n\n    // -- Construct the table\n\n    if (printHeaders) {\n      var row = {};\n      for (i = 0; i < headerNames.length; i += 1) {\n        row[headerNames[i]] = {};\n        row[headerNames[i]].text = headerLabels[i];\n        row[headerNames[i]].align = headerAligns[i];\n      }\n\n      var rowHeight = calculateLineHeight.call(this, row, columnWidths);\n\n      // Construct the header row\n      tableHeaderConfigs = headerNames.map(function(value) {\n        return new Cell(\n          x,\n          y,\n          columnWidths[value],\n          rowHeight,\n          row[value].text,\n          undefined,\n          row[value].align\n        );\n      });\n\n      // Store the table header config\n      this.setTableHeaderRow(tableHeaderConfigs);\n\n      // Print the header for the start of the table\n      this.printHeaderRow(1, false);\n    }\n\n    // Construct the data rows\n\n    var align = headers.reduce(function(pv, cv) {\n      pv[cv.name] = cv.align;\n      return pv;\n    }, {});\n    for (i = 0; i < data.length; i += 1) {\n      if (\"rowStart\" in config && config.rowStart instanceof Function) {\n        config.rowStart(\n          {\n            row: i,\n            data: data[i]\n          },\n          this\n        );\n      }\n      var lineHeight = calculateLineHeight.call(this, data[i], columnWidths);\n\n      for (j = 0; j < headerNames.length; j += 1) {\n        var cellData = data[i][headerNames[j]];\n        if (\"cellStart\" in config && config.cellStart instanceof Function) {\n          config.cellStart(\n            {\n              row: i,\n              col: j,\n              data: cellData\n            },\n            this\n          );\n        }\n        cell.call(\n          this,\n          new Cell(\n            x,\n            y,\n            columnWidths[headerNames[j]],\n            lineHeight,\n            cellData,\n            i + 2,\n            align[headerNames[j]]\n          )\n        );\n      }\n    }\n    this.internal.__cell__.table_x = x;\n    this.internal.__cell__.table_y = y;\n    return this;\n  };\n\n  /**\n   * Calculate the height for containing the highest column\n   *\n   * @name calculateLineHeight\n   * @function\n   * @param {Object[]} model is the line of data we want to calculate the height of\n   * @param {Integer[]} columnWidths is size of each column\n   * @returns {number} lineHeight\n   * @private\n   */\n  var calculateLineHeight = function calculateLineHeight(model, columnWidths) {\n    var padding = this.internal.__cell__.padding;\n    var fontSize = this.internal.__cell__.table_font_size;\n    var scaleFactor = this.internal.scaleFactor;\n\n    return Object.keys(model)\n      .map(function(key) {\n        var value = model[key];\n        return this.splitTextToSize(\n          value.hasOwnProperty(\"text\") ? value.text : value,\n          columnWidths[key] - padding - padding\n        );\n      }, this)\n      .map(function(value) {\n        return (\n          (this.getLineHeightFactor() * value.length * fontSize) / scaleFactor +\n          padding +\n          padding\n        );\n      }, this)\n      .reduce(function(pv, cv) {\n        return Math.max(pv, cv);\n      }, 0);\n  };\n\n  /**\n   * Store the config for outputting a table header\n   *\n   * @name setTableHeaderRow\n   * @function\n   * @param {Object[]} config\n   * An array of cell configs that would define a header row: Each config matches the config used by jsPDFAPI.cell\n   * except the lineNumber parameter is excluded\n   */\n  jsPDFAPI.setTableHeaderRow = function(config) {\n    _initialize.call(this);\n    this.internal.__cell__.tableHeaderRow = config;\n  };\n\n  /**\n   * Output the store header row\n   *\n   * @name printHeaderRow\n   * @function\n   * @param {number} lineNumber The line number to output the header at\n   * @param {boolean} new_page\n   */\n  jsPDFAPI.printHeaderRow = function(lineNumber, new_page) {\n    _initialize.call(this);\n    if (!this.internal.__cell__.tableHeaderRow) {\n      throw new Error(\"Property tableHeaderRow does not exist.\");\n    }\n\n    var tableHeaderCell;\n\n    printingHeaderRow = true;\n    if (typeof this.internal.__cell__.headerFunction === \"function\") {\n      var position = this.internal.__cell__.headerFunction(\n        this,\n        this.internal.__cell__.pages\n      );\n      this.internal.__cell__.lastCell = new Cell(\n        position[0],\n        position[1],\n        position[2],\n        position[3],\n        undefined,\n        -1\n      );\n    }\n    this.setFont(undefined, \"bold\");\n\n    var tempHeaderConf = [];\n    for (var i = 0; i < this.internal.__cell__.tableHeaderRow.length; i += 1) {\n      tableHeaderCell = this.internal.__cell__.tableHeaderRow[i].clone();\n      if (new_page) {\n        tableHeaderCell.y = this.internal.__cell__.margins.top || 0;\n        tempHeaderConf.push(tableHeaderCell);\n      }\n      tableHeaderCell.lineNumber = lineNumber;\n      var currentTextColor = this.getTextColor();\n      this.setTextColor(this.internal.__cell__.headerTextColor);\n      this.setFillColor(this.internal.__cell__.headerBackgroundColor);\n      cell.call(this, tableHeaderCell);\n      this.setTextColor(currentTextColor);\n    }\n    if (tempHeaderConf.length > 0) {\n      this.setTableHeaderRow(tempHeaderConf);\n    }\n    this.setFont(undefined, \"normal\");\n    printingHeaderRow = false;\n  };\n})(jsPDF.API);\n","/**\n * @license\n * ====================================================================\n * Copyright (c) 2013 Youssef Beddad, youssef.beddad@gmail.com\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF JavaScript plugin\n *\n * @name javascript\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n  var jsNamesObj, jsJsObj, text;\n  /**\n   * @name addJS\n   * @function\n   * @param {string} javascript The javascript to be embedded into the PDF-file.\n   * @returns {jsPDF}\n   */\n  jsPDFAPI.addJS = function(javascript) {\n    text = javascript;\n    this.internal.events.subscribe(\"postPutResources\", function() {\n      jsNamesObj = this.internal.newObject();\n      this.internal.out(\"<<\");\n      this.internal.out(\"/Names [(EmbeddedJS) \" + (jsNamesObj + 1) + \" 0 R]\");\n      this.internal.out(\">>\");\n      this.internal.out(\"endobj\");\n\n      jsJsObj = this.internal.newObject();\n      this.internal.out(\"<<\");\n      this.internal.out(\"/S /JavaScript\");\n      this.internal.out(\"/JS (\" + text + \")\");\n      this.internal.out(\">>\");\n      this.internal.out(\"endobj\");\n    });\n    this.internal.events.subscribe(\"putCatalog\", function() {\n      if (jsNamesObj !== undefined && jsJsObj !== undefined) {\n        this.internal.out(\"/Names <</JavaScript \" + jsNamesObj + \" 0 R>>\");\n      }\n    });\n    return this;\n  };\n})(jsPDF.API);\n","/* eslint-disable no-fallthrough */\r\n/* eslint-disable no-console */\r\n/**\r\n * @license\r\n * jsPDF Context2D PlugIn Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\r\n *\r\n * Licensed under the MIT License. http://opensource.org/licenses/mit-license\r\n */\r\n\r\nimport { jsPDF } from \"../jspdf.js\";\r\nimport { RGBColor } from \"../libs/rgbcolor.js\";\r\nimport { console } from \"../libs/console.js\";\r\nimport {\r\n  buildFontFaceMap,\r\n  parseFontFamily,\r\n  resolveFontFace\r\n} from \"../libs/fontFace.js\";\r\n\r\n/**\r\n * This plugin mimics the HTML5 CanvasRenderingContext2D.\r\n *\r\n * The goal is to provide a way for current canvas implementations to print directly to a PDF.\r\n *\r\n * @name context2d\r\n * @module\r\n */\r\n(function(jsPDFAPI) {\r\n  \"use strict\";\r\n  var ContextLayer = function(ctx) {\r\n    ctx = ctx || {};\r\n    this.isStrokeTransparent = ctx.isStrokeTransparent || false;\r\n    this.strokeOpacity = ctx.strokeOpacity || 1;\r\n    this.strokeStyle = ctx.strokeStyle || \"#000000\";\r\n    this.fillStyle = ctx.fillStyle || \"#000000\";\r\n    this.isFillTransparent = ctx.isFillTransparent || false;\r\n    this.fillOpacity = ctx.fillOpacity || 1;\r\n    this.font = ctx.font || \"10px sans-serif\";\r\n    this.textBaseline = ctx.textBaseline || \"alphabetic\";\r\n    this.textAlign = ctx.textAlign || \"left\";\r\n    this.lineWidth = ctx.lineWidth || 1;\r\n    this.lineJoin = ctx.lineJoin || \"miter\";\r\n    this.lineCap = ctx.lineCap || \"butt\";\r\n    this.path = ctx.path || [];\r\n    this.transform =\r\n      typeof ctx.transform !== \"undefined\"\r\n        ? ctx.transform.clone()\r\n        : new Matrix();\r\n    this.globalCompositeOperation = ctx.globalCompositeOperation || \"normal\";\r\n    this.globalAlpha = ctx.globalAlpha || 1.0;\r\n    this.clip_path = ctx.clip_path || [];\r\n    this.currentPoint = ctx.currentPoint || new Point();\r\n    this.miterLimit = ctx.miterLimit || 10.0;\r\n    this.lastPoint = ctx.lastPoint || new Point();\r\n    this.lineDashOffset = ctx.lineDashOffset || 0.0;\r\n    this.lineDash = ctx.lineDash || [];\r\n    this.margin = ctx.margin || [0, 0, 0, 0];\r\n    this.prevPageLastElemOffset = ctx.prevPageLastElemOffset || 0;\r\n\r\n    this.ignoreClearRect =\r\n      typeof ctx.ignoreClearRect === \"boolean\" ? ctx.ignoreClearRect : true;\r\n    return this;\r\n  };\r\n\r\n  //stub\r\n  var f2,\r\n    getHorizontalCoordinateString,\r\n    getVerticalCoordinateString,\r\n    getHorizontalCoordinate,\r\n    getVerticalCoordinate,\r\n    Point,\r\n    Rectangle,\r\n    Matrix,\r\n    _ctx;\r\n  jsPDFAPI.events.push([\r\n    \"initialized\",\r\n    function() {\r\n      this.context2d = new Context2D(this);\r\n\r\n      f2 = this.internal.f2;\r\n      getHorizontalCoordinateString = this.internal.getCoordinateString;\r\n      getVerticalCoordinateString = this.internal.getVerticalCoordinateString;\r\n      getHorizontalCoordinate = this.internal.getHorizontalCoordinate;\r\n      getVerticalCoordinate = this.internal.getVerticalCoordinate;\r\n      Point = this.internal.Point;\r\n      Rectangle = this.internal.Rectangle;\r\n      Matrix = this.internal.Matrix;\r\n      _ctx = new ContextLayer();\r\n    }\r\n  ]);\r\n\r\n  var Context2D = function(pdf) {\r\n    Object.defineProperty(this, \"canvas\", {\r\n      get: function() {\r\n        return { parentNode: false, style: false };\r\n      }\r\n    });\r\n\r\n    var _pdf = pdf;\r\n    Object.defineProperty(this, \"pdf\", {\r\n      get: function() {\r\n        return _pdf;\r\n      }\r\n    });\r\n\r\n    var _pageWrapXEnabled = false;\r\n    /**\r\n     * @name pageWrapXEnabled\r\n     * @type {boolean}\r\n     * @default false\r\n     */\r\n    Object.defineProperty(this, \"pageWrapXEnabled\", {\r\n      get: function() {\r\n        return _pageWrapXEnabled;\r\n      },\r\n      set: function(value) {\r\n        _pageWrapXEnabled = Boolean(value);\r\n      }\r\n    });\r\n\r\n    var _pageWrapYEnabled = false;\r\n    /**\r\n     * @name pageWrapYEnabled\r\n     * @type {boolean}\r\n     * @default true\r\n     */\r\n    Object.defineProperty(this, \"pageWrapYEnabled\", {\r\n      get: function() {\r\n        return _pageWrapYEnabled;\r\n      },\r\n      set: function(value) {\r\n        _pageWrapYEnabled = Boolean(value);\r\n      }\r\n    });\r\n\r\n    var _posX = 0;\r\n    /**\r\n     * @name posX\r\n     * @type {number}\r\n     * @default 0\r\n     */\r\n    Object.defineProperty(this, \"posX\", {\r\n      get: function() {\r\n        return _posX;\r\n      },\r\n      set: function(value) {\r\n        if (!isNaN(value)) {\r\n          _posX = value;\r\n        }\r\n      }\r\n    });\r\n\r\n    var _posY = 0;\r\n    /**\r\n     * @name posY\r\n     * @type {number}\r\n     * @default 0\r\n     */\r\n    Object.defineProperty(this, \"posY\", {\r\n      get: function() {\r\n        return _posY;\r\n      },\r\n      set: function(value) {\r\n        if (!isNaN(value)) {\r\n          _posY = value;\r\n        }\r\n      }\r\n    });\r\n\r\n    /**\r\n     * Gets or sets the page margin when using auto paging. Has no effect when {@link autoPaging} is off.\r\n     * @name margin\r\n     * @type {number|number[]}\r\n     * @default [0, 0, 0, 0]\r\n     */\r\n    Object.defineProperty(this, \"margin\", {\r\n      get: function() {\r\n        return _ctx.margin;\r\n      },\r\n      set: function(value) {\r\n        var margin;\r\n        if (typeof value === \"number\") {\r\n          margin = [value, value, value, value];\r\n        } else {\r\n          margin = new Array(4);\r\n          margin[0] = value[0];\r\n          margin[1] = value.length >= 2 ? value[1] : margin[0];\r\n          margin[2] = value.length >= 3 ? value[2] : margin[0];\r\n          margin[3] = value.length >= 4 ? value[3] : margin[1];\r\n        }\r\n        _ctx.margin = margin;\r\n      }\r\n    });\r\n\r\n    var _autoPaging = false;\r\n    /**\r\n     * Gets or sets the auto paging mode. When auto paging is enabled, the context2d will automatically draw on the\r\n     * next page if a shape or text chunk doesn't fit entirely on the current page. The context2d will create new\r\n     * pages if required.\r\n     *\r\n     * Context2d supports different modes:\r\n     * <ul>\r\n     * <li>\r\n     *   <code>false</code>: Auto paging is disabled.\r\n     * </li>\r\n     * <li>\r\n     *   <code>true</code> or <code>'slice'</code>: Will cut shapes or text chunks across page breaks. Will possibly\r\n     *   slice text in half, making it difficult to read.\r\n     * </li>\r\n     * <li>\r\n     *   <code>'text'</code>: Trys not to cut text in half across page breaks. Works best for documents consisting\r\n     *   mostly of a single column of text.\r\n     * </li>\r\n     * </ul>\r\n     * @name Context2D#autoPaging\r\n     * @type {boolean|\"slice\"|\"text\"}\r\n     * @default false\r\n     */\r\n    Object.defineProperty(this, \"autoPaging\", {\r\n      get: function() {\r\n        return _autoPaging;\r\n      },\r\n      set: function(value) {\r\n        _autoPaging = value;\r\n      }\r\n    });\r\n\r\n    var lastBreak = 0;\r\n    /**\r\n     * @name lastBreak\r\n     * @type {number}\r\n     * @default 0\r\n     */\r\n    Object.defineProperty(this, \"lastBreak\", {\r\n      get: function() {\r\n        return lastBreak;\r\n      },\r\n      set: function(value) {\r\n        lastBreak = value;\r\n      }\r\n    });\r\n\r\n    var pageBreaks = [];\r\n    /**\r\n     * Y Position of page breaks.\r\n     * @name pageBreaks\r\n     * @type {number}\r\n     * @default 0\r\n     */\r\n    Object.defineProperty(this, \"pageBreaks\", {\r\n      get: function() {\r\n        return pageBreaks;\r\n      },\r\n      set: function(value) {\r\n        pageBreaks = value;\r\n      }\r\n    });\r\n\r\n    /**\r\n     * @name ctx\r\n     * @type {object}\r\n     * @default {}\r\n     */\r\n    Object.defineProperty(this, \"ctx\", {\r\n      get: function() {\r\n        return _ctx;\r\n      },\r\n      set: function(value) {\r\n        if (value instanceof ContextLayer) {\r\n          _ctx = value;\r\n        }\r\n      }\r\n    });\r\n\r\n    /**\r\n     * @name path\r\n     * @type {array}\r\n     * @default []\r\n     */\r\n    Object.defineProperty(this, \"path\", {\r\n      get: function() {\r\n        return _ctx.path;\r\n      },\r\n      set: function(value) {\r\n        _ctx.path = value;\r\n      }\r\n    });\r\n\r\n    /**\r\n     * @name ctxStack\r\n     * @type {array}\r\n     * @default []\r\n     */\r\n    var _ctxStack = [];\r\n    Object.defineProperty(this, \"ctxStack\", {\r\n      get: function() {\r\n        return _ctxStack;\r\n      },\r\n      set: function(value) {\r\n        _ctxStack = value;\r\n      }\r\n    });\r\n\r\n    /**\r\n     * Sets or returns the color, gradient, or pattern used to fill the drawing\r\n     *\r\n     * @name fillStyle\r\n     * @default #000000\r\n     * @property {(color|gradient|pattern)} value The color of the drawing. Default value is #000000<br />\r\n     * A gradient object (linear or radial) used to fill the drawing (not supported by context2d)<br />\r\n     * A pattern object to use to fill the drawing (not supported by context2d)\r\n     */\r\n    Object.defineProperty(this, \"fillStyle\", {\r\n      get: function() {\r\n        return this.ctx.fillStyle;\r\n      },\r\n      set: function(value) {\r\n        var rgba;\r\n        rgba = getRGBA(value);\r\n\r\n        this.ctx.fillStyle = rgba.style;\r\n        this.ctx.isFillTransparent = rgba.a === 0;\r\n        this.ctx.fillOpacity = rgba.a;\r\n\r\n        this.pdf.setFillColor(rgba.r, rgba.g, rgba.b, { a: rgba.a });\r\n        this.pdf.setTextColor(rgba.r, rgba.g, rgba.b, { a: rgba.a });\r\n      }\r\n    });\r\n\r\n    /**\r\n     * Sets or returns the color, gradient, or pattern used for strokes\r\n     *\r\n     * @name strokeStyle\r\n     * @default #000000\r\n     * @property {color} color A CSS color value that indicates the stroke color of the drawing. Default value is #000000 (not supported by context2d)\r\n     * @property {gradient} gradient A gradient object (linear or radial) used to create a gradient stroke (not supported by context2d)\r\n     * @property {pattern} pattern A pattern object used to create a pattern stroke (not supported by context2d)\r\n     */\r\n    Object.defineProperty(this, \"strokeStyle\", {\r\n      get: function() {\r\n        return this.ctx.strokeStyle;\r\n      },\r\n      set: function(value) {\r\n        var rgba = getRGBA(value);\r\n\r\n        this.ctx.strokeStyle = rgba.style;\r\n        this.ctx.isStrokeTransparent = rgba.a === 0;\r\n        this.ctx.strokeOpacity = rgba.a;\r\n\r\n        if (rgba.a === 0) {\r\n          this.pdf.setDrawColor(255, 255, 255);\r\n        } else if (rgba.a === 1) {\r\n          this.pdf.setDrawColor(rgba.r, rgba.g, rgba.b);\r\n        } else {\r\n          this.pdf.setDrawColor(rgba.r, rgba.g, rgba.b);\r\n        }\r\n      }\r\n    });\r\n\r\n    /**\r\n     * Sets or returns the style of the end caps for a line\r\n     *\r\n     * @name lineCap\r\n     * @default butt\r\n     * @property {(butt|round|square)} lineCap butt A flat edge is added to each end of the line <br/>\r\n     * round A rounded end cap is added to each end of the line<br/>\r\n     * square A square end cap is added to each end of the line<br/>\r\n     */\r\n    Object.defineProperty(this, \"lineCap\", {\r\n      get: function() {\r\n        return this.ctx.lineCap;\r\n      },\r\n      set: function(value) {\r\n        if ([\"butt\", \"round\", \"square\"].indexOf(value) !== -1) {\r\n          this.ctx.lineCap = value;\r\n          this.pdf.setLineCap(value);\r\n        }\r\n      }\r\n    });\r\n\r\n    /**\r\n     * Sets or returns the current line width\r\n     *\r\n     * @name lineWidth\r\n     * @default 1\r\n     * @property {number} lineWidth The current line width, in pixels\r\n     */\r\n    Object.defineProperty(this, \"lineWidth\", {\r\n      get: function() {\r\n        return this.ctx.lineWidth;\r\n      },\r\n      set: function(value) {\r\n        if (!isNaN(value)) {\r\n          this.ctx.lineWidth = value;\r\n          this.pdf.setLineWidth(value);\r\n        }\r\n      }\r\n    });\r\n\r\n    /**\r\n     * Sets or returns the type of corner created, when two lines meet\r\n     */\r\n    Object.defineProperty(this, \"lineJoin\", {\r\n      get: function() {\r\n        return this.ctx.lineJoin;\r\n      },\r\n      set: function(value) {\r\n        if ([\"bevel\", \"round\", \"miter\"].indexOf(value) !== -1) {\r\n          this.ctx.lineJoin = value;\r\n          this.pdf.setLineJoin(value);\r\n        }\r\n      }\r\n    });\r\n\r\n    /**\r\n     * A number specifying the miter limit ratio in coordinate space units. Zero, negative, Infinity, and NaN values are ignored. The default value is 10.0.\r\n     *\r\n     * @name miterLimit\r\n     * @default 10\r\n     */\r\n    Object.defineProperty(this, \"miterLimit\", {\r\n      get: function() {\r\n        return this.ctx.miterLimit;\r\n      },\r\n      set: function(value) {\r\n        if (!isNaN(value)) {\r\n          this.ctx.miterLimit = value;\r\n          this.pdf.setMiterLimit(value);\r\n        }\r\n      }\r\n    });\r\n\r\n    Object.defineProperty(this, \"textBaseline\", {\r\n      get: function() {\r\n        return this.ctx.textBaseline;\r\n      },\r\n      set: function(value) {\r\n        this.ctx.textBaseline = value;\r\n      }\r\n    });\r\n\r\n    Object.defineProperty(this, \"textAlign\", {\r\n      get: function() {\r\n        return this.ctx.textAlign;\r\n      },\r\n      set: function(value) {\r\n        if ([\"right\", \"end\", \"center\", \"left\", \"start\"].indexOf(value) !== -1) {\r\n          this.ctx.textAlign = value;\r\n        }\r\n      }\r\n    });\r\n\r\n    var _fontFaceMap = null;\r\n\r\n    function getFontFaceMap(pdf, fontFaces) {\r\n      if (_fontFaceMap === null) {\r\n        var fontMap = pdf.getFontList();\r\n\r\n        var convertedFontFaces = convertToFontFaces(fontMap);\r\n\r\n        _fontFaceMap = buildFontFaceMap(convertedFontFaces.concat(fontFaces));\r\n      }\r\n\r\n      return _fontFaceMap;\r\n    }\r\n\r\n    function convertToFontFaces(fontMap) {\r\n      var fontFaces = [];\r\n\r\n      Object.keys(fontMap).forEach(function(family) {\r\n        var styles = fontMap[family];\r\n\r\n        styles.forEach(function(style) {\r\n          var fontFace = null;\r\n\r\n          switch (style) {\r\n            case \"bold\":\r\n              fontFace = {\r\n                family: family,\r\n                weight: \"bold\"\r\n              };\r\n              break;\r\n\r\n            case \"italic\":\r\n              fontFace = {\r\n                family: family,\r\n                style: \"italic\"\r\n              };\r\n              break;\r\n\r\n            case \"bolditalic\":\r\n              fontFace = {\r\n                family: family,\r\n                weight: \"bold\",\r\n                style: \"italic\"\r\n              };\r\n              break;\r\n\r\n            case \"\":\r\n            case \"normal\":\r\n              fontFace = {\r\n                family: family\r\n              };\r\n              break;\r\n          }\r\n\r\n          // If font-face is still null here, it is a font with some styling we don't recognize and\r\n          // cannot map or it is a font added via the fontFaces option of .html().\r\n          if (fontFace !== null) {\r\n            fontFace.ref = {\r\n              name: family,\r\n              style: style\r\n            };\r\n\r\n            fontFaces.push(fontFace);\r\n          }\r\n        });\r\n      });\r\n\r\n      return fontFaces;\r\n    }\r\n\r\n    var _fontFaces = null;\r\n    /**\r\n     * A map of available font-faces, as passed in the options of\r\n     * .html(). If set a limited implementation of the font style matching\r\n     * algorithm defined by https://www.w3.org/TR/css-fonts-3/#font-matching-algorithm\r\n     * will be used. If not set it will fallback to previous behavior.\r\n     */\r\n\r\n    Object.defineProperty(this, \"fontFaces\", {\r\n      get: function() {\r\n        return _fontFaces;\r\n      },\r\n      set: function(value) {\r\n        _fontFaceMap = null;\r\n        _fontFaces = value;\r\n      }\r\n    });\r\n\r\n    Object.defineProperty(this, \"font\", {\r\n      get: function() {\r\n        return this.ctx.font;\r\n      },\r\n      set: function(value) {\r\n        this.ctx.font = value;\r\n        var rx, matches;\r\n\r\n        //source: https://stackoverflow.com/a/10136041\r\n        // eslint-disable-next-line no-useless-escape\r\n        rx = /^\\s*(?=(?:(?:[-a-z]+\\s*){0,2}(italic|oblique))?)(?=(?:(?:[-a-z]+\\s*){0,2}(small-caps))?)(?=(?:(?:[-a-z]+\\s*){0,2}(bold(?:er)?|lighter|[1-9]00))?)(?:(?:normal|\\1|\\2|\\3)\\s*){0,3}((?:xx?-)?(?:small|large)|medium|smaller|larger|[.\\d]+(?:\\%|in|[cem]m|ex|p[ctx]))(?:\\s*\\/\\s*(normal|[.\\d]+(?:\\%|in|[cem]m|ex|p[ctx])))?\\s*([-_,\\\"\\'\\sa-z]+?)\\s*$/i;\r\n        matches = rx.exec(value);\r\n        if (matches !== null) {\r\n          var fontStyle = matches[1];\r\n          var fontVariant = matches[2];\r\n          var fontWeight = matches[3];\r\n          var fontSize = matches[4];\r\n          var lineHeight = matches[5];\r\n          var fontFamily = matches[6];\r\n        } else {\r\n          return;\r\n        }\r\n        var rxFontSize = /^([.\\d]+)((?:%|in|[cem]m|ex|p[ctx]))$/i;\r\n        var fontSizeUnit = rxFontSize.exec(fontSize)[2];\r\n\r\n        if (\"px\" === fontSizeUnit) {\r\n          fontSize = Math.floor(\r\n            parseFloat(fontSize) * this.pdf.internal.scaleFactor\r\n          );\r\n        } else if (\"em\" === fontSizeUnit) {\r\n          fontSize = Math.floor(parseFloat(fontSize) * this.pdf.getFontSize());\r\n        } else {\r\n          fontSize = Math.floor(\r\n            parseFloat(fontSize) * this.pdf.internal.scaleFactor\r\n          );\r\n        }\r\n\r\n        this.pdf.setFontSize(fontSize);\r\n        var parts = parseFontFamily(fontFamily);\r\n\r\n        if (this.fontFaces) {\r\n          var fontFaceMap = getFontFaceMap(this.pdf, this.fontFaces);\r\n\r\n          var rules = parts.map(function(ff) {\r\n            return {\r\n              family: ff,\r\n              stretch: \"normal\", // TODO: Extract font-stretch from font rule (perhaps write proper parser for it?)\r\n              weight: fontWeight,\r\n              style: fontStyle\r\n            };\r\n          });\r\n\r\n          var font = resolveFontFace(fontFaceMap, rules);\r\n          this.pdf.setFont(font.ref.name, font.ref.style);\r\n          return;\r\n        }\r\n\r\n        var style = \"\";\r\n        if (\r\n          fontWeight === \"bold\" ||\r\n          parseInt(fontWeight, 10) >= 700 ||\r\n          fontStyle === \"bold\"\r\n        ) {\r\n          style = \"bold\";\r\n        }\r\n\r\n        if (fontStyle === \"italic\") {\r\n          style += \"italic\";\r\n        }\r\n\r\n        if (style.length === 0) {\r\n          style = \"normal\";\r\n        }\r\n        var jsPdfFontName = \"\";\r\n\r\n        var fallbackFonts = {\r\n          arial: \"Helvetica\",\r\n          Arial: \"Helvetica\",\r\n          verdana: \"Helvetica\",\r\n          Verdana: \"Helvetica\",\r\n          helvetica: \"Helvetica\",\r\n          Helvetica: \"Helvetica\",\r\n          \"sans-serif\": \"Helvetica\",\r\n          fixed: \"Courier\",\r\n          monospace: \"Courier\",\r\n          terminal: \"Courier\",\r\n          cursive: \"Times\",\r\n          fantasy: \"Times\",\r\n          serif: \"Times\"\r\n        };\r\n\r\n        for (var i = 0; i < parts.length; i++) {\r\n          if (\r\n            this.pdf.internal.getFont(parts[i], style, {\r\n              noFallback: true,\r\n              disableWarning: true\r\n            }) !== undefined\r\n          ) {\r\n            jsPdfFontName = parts[i];\r\n            break;\r\n          } else if (\r\n            style === \"bolditalic\" &&\r\n            this.pdf.internal.getFont(parts[i], \"bold\", {\r\n              noFallback: true,\r\n              disableWarning: true\r\n            }) !== undefined\r\n          ) {\r\n            jsPdfFontName = parts[i];\r\n            style = \"bold\";\r\n          } else if (\r\n            this.pdf.internal.getFont(parts[i], \"normal\", {\r\n              noFallback: true,\r\n              disableWarning: true\r\n            }) !== undefined\r\n          ) {\r\n            jsPdfFontName = parts[i];\r\n            style = \"normal\";\r\n            break;\r\n          }\r\n        }\r\n        if (jsPdfFontName === \"\") {\r\n          for (var j = 0; j < parts.length; j++) {\r\n            if (fallbackFonts[parts[j]]) {\r\n              jsPdfFontName = fallbackFonts[parts[j]];\r\n              break;\r\n            }\r\n          }\r\n        }\r\n        jsPdfFontName = jsPdfFontName === \"\" ? \"Times\" : jsPdfFontName;\r\n        this.pdf.setFont(jsPdfFontName, style);\r\n      }\r\n    });\r\n\r\n    Object.defineProperty(this, \"globalCompositeOperation\", {\r\n      get: function() {\r\n        return this.ctx.globalCompositeOperation;\r\n      },\r\n      set: function(value) {\r\n        this.ctx.globalCompositeOperation = value;\r\n      }\r\n    });\r\n\r\n    Object.defineProperty(this, \"globalAlpha\", {\r\n      get: function() {\r\n        return this.ctx.globalAlpha;\r\n      },\r\n      set: function(value) {\r\n        this.ctx.globalAlpha = value;\r\n      }\r\n    });\r\n\r\n    /**\r\n     * A float specifying the amount of the line dash offset. The default value is 0.0.\r\n     *\r\n     * @name lineDashOffset\r\n     * @default 0.0\r\n     */\r\n    Object.defineProperty(this, \"lineDashOffset\", {\r\n      get: function() {\r\n        return this.ctx.lineDashOffset;\r\n      },\r\n      set: function(value) {\r\n        this.ctx.lineDashOffset = value;\r\n        setLineDash.call(this);\r\n      }\r\n    });\r\n\r\n    // Not HTML API\r\n    Object.defineProperty(this, \"lineDash\", {\r\n      get: function() {\r\n        return this.ctx.lineDash;\r\n      },\r\n      set: function(value) {\r\n        this.ctx.lineDash = value;\r\n        setLineDash.call(this);\r\n      }\r\n    });\r\n\r\n    // Not HTML API\r\n    Object.defineProperty(this, \"ignoreClearRect\", {\r\n      get: function() {\r\n        return this.ctx.ignoreClearRect;\r\n      },\r\n      set: function(value) {\r\n        this.ctx.ignoreClearRect = Boolean(value);\r\n      }\r\n    });\r\n  };\r\n\r\n  /**\r\n   * Sets the line dash pattern used when stroking lines.\r\n   * @name setLineDash\r\n   * @function\r\n   * @description It uses an array of values that specify alternating lengths of lines and gaps which describe the pattern.\r\n   */\r\n  Context2D.prototype.setLineDash = function(dashArray) {\r\n    this.lineDash = dashArray;\r\n  };\r\n\r\n  /**\r\n   * gets the current line dash pattern.\r\n   * @name getLineDash\r\n   * @function\r\n   * @returns {Array} An Array of numbers that specify distances to alternately draw a line and a gap (in coordinate space units). If the number, when setting the elements, is odd, the elements of the array get copied and concatenated. For example, setting the line dash to [5, 15, 25] will result in getting back [5, 15, 25, 5, 15, 25].\r\n   */\r\n  Context2D.prototype.getLineDash = function() {\r\n    if (this.lineDash.length % 2) {\r\n      // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/getLineDash#return_value\r\n      return this.lineDash.concat(this.lineDash);\r\n    } else {\r\n      // The copied value is returned to prevent contamination from outside.\r\n      return this.lineDash.slice();\r\n    }\r\n  };\r\n\r\n  Context2D.prototype.fill = function() {\r\n    pathPreProcess.call(this, \"fill\", false);\r\n  };\r\n\r\n  /**\r\n   * Actually draws the path you have defined\r\n   *\r\n   * @name stroke\r\n   * @function\r\n   * @description The stroke() method actually draws the path you have defined with all those moveTo() and lineTo() methods. The default color is black.\r\n   */\r\n  Context2D.prototype.stroke = function() {\r\n    pathPreProcess.call(this, \"stroke\", false);\r\n  };\r\n\r\n  /**\r\n   * Begins a path, or resets the current\r\n   *\r\n   * @name beginPath\r\n   * @function\r\n   * @description The beginPath() method begins a path, or resets the current path.\r\n   */\r\n  Context2D.prototype.beginPath = function() {\r\n    this.path = [\r\n      {\r\n        type: \"begin\"\r\n      }\r\n    ];\r\n  };\r\n\r\n  /**\r\n   * Moves the path to the specified point in the canvas, without creating a line\r\n   *\r\n   * @name moveTo\r\n   * @function\r\n   * @param x {Number} The x-coordinate of where to move the path to\r\n   * @param y {Number} The y-coordinate of where to move the path to\r\n   */\r\n  Context2D.prototype.moveTo = function(x, y) {\r\n    if (isNaN(x) || isNaN(y)) {\r\n      console.error(\"jsPDF.context2d.moveTo: Invalid arguments\", arguments);\r\n      throw new Error(\"Invalid arguments passed to jsPDF.context2d.moveTo\");\r\n    }\r\n\r\n    var pt = this.ctx.transform.applyToPoint(new Point(x, y));\r\n\r\n    this.path.push({\r\n      type: \"mt\",\r\n      x: pt.x,\r\n      y: pt.y\r\n    });\r\n    this.ctx.lastPoint = new Point(x, y);\r\n  };\r\n\r\n  /**\r\n   * Creates a path from the current point back to the starting point\r\n   *\r\n   * @name closePath\r\n   * @function\r\n   * @description The closePath() method creates a path from the current point back to the starting point.\r\n   */\r\n  Context2D.prototype.closePath = function() {\r\n    var pathBegin = new Point(0, 0);\r\n    var i = 0;\r\n    for (i = this.path.length - 1; i !== -1; i--) {\r\n      if (this.path[i].type === \"begin\") {\r\n        if (\r\n          typeof this.path[i + 1] === \"object\" &&\r\n          typeof this.path[i + 1].x === \"number\"\r\n        ) {\r\n          pathBegin = new Point(this.path[i + 1].x, this.path[i + 1].y);\r\n          break;\r\n        }\r\n      }\r\n    }\r\n    this.path.push({\r\n      type: \"close\"\r\n    });\r\n    this.ctx.lastPoint = new Point(pathBegin.x, pathBegin.y);\r\n  };\r\n\r\n  /**\r\n   * Adds a new point and creates a line to that point from the last specified point in the canvas\r\n   *\r\n   * @name lineTo\r\n   * @function\r\n   * @param x The x-coordinate of where to create the line to\r\n   * @param y The y-coordinate of where to create the line to\r\n   * @description The lineTo() method adds a new point and creates a line TO that point FROM the last specified point in the canvas (this method does not draw the line).\r\n   */\r\n  Context2D.prototype.lineTo = function(x, y) {\r\n    if (isNaN(x) || isNaN(y)) {\r\n      console.error(\"jsPDF.context2d.lineTo: Invalid arguments\", arguments);\r\n      throw new Error(\"Invalid arguments passed to jsPDF.context2d.lineTo\");\r\n    }\r\n\r\n    var pt = this.ctx.transform.applyToPoint(new Point(x, y));\r\n\r\n    this.path.push({\r\n      type: \"lt\",\r\n      x: pt.x,\r\n      y: pt.y\r\n    });\r\n    this.ctx.lastPoint = new Point(pt.x, pt.y);\r\n  };\r\n\r\n  /**\r\n   * Clips a region of any shape and size from the original canvas\r\n   *\r\n   * @name clip\r\n   * @function\r\n   * @description The clip() method clips a region of any shape and size from the original canvas.\r\n   */\r\n  Context2D.prototype.clip = function() {\r\n    this.ctx.clip_path = JSON.parse(JSON.stringify(this.path));\r\n    pathPreProcess.call(this, null, true);\r\n  };\r\n\r\n  /**\r\n   * Creates a cubic Bézier curve\r\n   *\r\n   * @name quadraticCurveTo\r\n   * @function\r\n   * @param cpx {Number} The x-coordinate of the Bézier control point\r\n   * @param cpy {Number} The y-coordinate of the Bézier control point\r\n   * @param x {Number} The x-coordinate of the ending point\r\n   * @param y {Number} The y-coordinate of the ending point\r\n   * @description The quadraticCurveTo() method adds a point to the current path by using the specified control points that represent a quadratic Bézier curve.<br /><br /> A quadratic Bézier curve requires two points. The first point is a control point that is used in the quadratic Bézier calculation and the second point is the ending point for the curve. The starting point for the curve is the last point in the current path. If a path does not exist, use the beginPath() and moveTo() methods to define a starting point.\r\n   */\r\n  Context2D.prototype.quadraticCurveTo = function(cpx, cpy, x, y) {\r\n    if (isNaN(x) || isNaN(y) || isNaN(cpx) || isNaN(cpy)) {\r\n      console.error(\r\n        \"jsPDF.context2d.quadraticCurveTo: Invalid arguments\",\r\n        arguments\r\n      );\r\n      throw new Error(\r\n        \"Invalid arguments passed to jsPDF.context2d.quadraticCurveTo\"\r\n      );\r\n    }\r\n\r\n    var pt0 = this.ctx.transform.applyToPoint(new Point(x, y));\r\n    var pt1 = this.ctx.transform.applyToPoint(new Point(cpx, cpy));\r\n\r\n    this.path.push({\r\n      type: \"qct\",\r\n      x1: pt1.x,\r\n      y1: pt1.y,\r\n      x: pt0.x,\r\n      y: pt0.y\r\n    });\r\n    this.ctx.lastPoint = new Point(pt0.x, pt0.y);\r\n  };\r\n\r\n  /**\r\n   * Creates a cubic Bézier curve\r\n   *\r\n   * @name bezierCurveTo\r\n   * @function\r\n   * @param cp1x {Number} The x-coordinate of the first Bézier control point\r\n   * @param cp1y {Number} The y-coordinate of the first Bézier control point\r\n   * @param cp2x {Number} The x-coordinate of the second Bézier control point\r\n   * @param cp2y {Number} The y-coordinate of the second Bézier control point\r\n   * @param x {Number} The x-coordinate of the ending point\r\n   * @param y {Number} The y-coordinate of the ending point\r\n   * @description The bezierCurveTo() method adds a point to the current path by using the specified control points that represent a cubic Bézier curve. <br /><br />A cubic bezier curve requires three points. The first two points are control points that are used in the cubic Bézier calculation and the last point is the ending point for the curve.  The starting point for the curve is the last point in the current path. If a path does not exist, use the beginPath() and moveTo() methods to define a starting point.\r\n   */\r\n  Context2D.prototype.bezierCurveTo = function(cp1x, cp1y, cp2x, cp2y, x, y) {\r\n    if (\r\n      isNaN(x) ||\r\n      isNaN(y) ||\r\n      isNaN(cp1x) ||\r\n      isNaN(cp1y) ||\r\n      isNaN(cp2x) ||\r\n      isNaN(cp2y)\r\n    ) {\r\n      console.error(\r\n        \"jsPDF.context2d.bezierCurveTo: Invalid arguments\",\r\n        arguments\r\n      );\r\n      throw new Error(\r\n        \"Invalid arguments passed to jsPDF.context2d.bezierCurveTo\"\r\n      );\r\n    }\r\n    var pt0 = this.ctx.transform.applyToPoint(new Point(x, y));\r\n    var pt1 = this.ctx.transform.applyToPoint(new Point(cp1x, cp1y));\r\n    var pt2 = this.ctx.transform.applyToPoint(new Point(cp2x, cp2y));\r\n\r\n    this.path.push({\r\n      type: \"bct\",\r\n      x1: pt1.x,\r\n      y1: pt1.y,\r\n      x2: pt2.x,\r\n      y2: pt2.y,\r\n      x: pt0.x,\r\n      y: pt0.y\r\n    });\r\n    this.ctx.lastPoint = new Point(pt0.x, pt0.y);\r\n  };\r\n\r\n  /**\r\n   * Creates an arc/curve (used to create circles, or parts of circles)\r\n   *\r\n   * @name arc\r\n   * @function\r\n   * @param x {Number} The x-coordinate of the center of the circle\r\n   * @param y {Number} The y-coordinate of the center of the circle\r\n   * @param radius {Number} The radius of the circle\r\n   * @param startAngle {Number} The starting angle, in radians (0 is at the 3 o'clock position of the arc's circle)\r\n   * @param endAngle {Number} The ending angle, in radians\r\n   * @param counterclockwise {Boolean} Optional. Specifies whether the drawing should be counterclockwise or clockwise. False is default, and indicates clockwise, while true indicates counter-clockwise.\r\n   * @description The arc() method creates an arc/curve (used to create circles, or parts of circles).\r\n   */\r\n  Context2D.prototype.arc = function(\r\n    x,\r\n    y,\r\n    radius,\r\n    startAngle,\r\n    endAngle,\r\n    counterclockwise\r\n  ) {\r\n    if (\r\n      isNaN(x) ||\r\n      isNaN(y) ||\r\n      isNaN(radius) ||\r\n      isNaN(startAngle) ||\r\n      isNaN(endAngle)\r\n    ) {\r\n      console.error(\"jsPDF.context2d.arc: Invalid arguments\", arguments);\r\n      throw new Error(\"Invalid arguments passed to jsPDF.context2d.arc\");\r\n    }\r\n    counterclockwise = Boolean(counterclockwise);\r\n\r\n    if (!this.ctx.transform.isIdentity) {\r\n      var xpt = this.ctx.transform.applyToPoint(new Point(x, y));\r\n      x = xpt.x;\r\n      y = xpt.y;\r\n\r\n      var x_radPt = this.ctx.transform.applyToPoint(new Point(0, radius));\r\n      var x_radPt0 = this.ctx.transform.applyToPoint(new Point(0, 0));\r\n      radius = Math.sqrt(\r\n        Math.pow(x_radPt.x - x_radPt0.x, 2) +\r\n          Math.pow(x_radPt.y - x_radPt0.y, 2)\r\n      );\r\n    }\r\n    if (Math.abs(endAngle - startAngle) >= 2 * Math.PI) {\r\n      startAngle = 0;\r\n      endAngle = 2 * Math.PI;\r\n    }\r\n\r\n    this.path.push({\r\n      type: \"arc\",\r\n      x: x,\r\n      y: y,\r\n      radius: radius,\r\n      startAngle: startAngle,\r\n      endAngle: endAngle,\r\n      counterclockwise: counterclockwise\r\n    });\r\n    // this.ctx.lastPoint(new Point(pt.x,pt.y));\r\n  };\r\n\r\n  /**\r\n   * Creates an arc/curve between two tangents\r\n   *\r\n   * @name arcTo\r\n   * @function\r\n   * @param x1 {Number} The x-coordinate of the first tangent\r\n   * @param y1 {Number} The y-coordinate of the first tangent\r\n   * @param x2 {Number} The x-coordinate of the second tangent\r\n   * @param y2 {Number} The y-coordinate of the second tangent\r\n   * @param radius The radius of the arc\r\n   * @description The arcTo() method creates an arc/curve between two tangents on the canvas.\r\n   */\r\n  // eslint-disable-next-line no-unused-vars\r\n  Context2D.prototype.arcTo = function(x1, y1, x2, y2, radius) {\r\n    throw new Error(\"arcTo not implemented.\");\r\n  };\r\n\r\n  /**\r\n   * Creates a rectangle\r\n   *\r\n   * @name rect\r\n   * @function\r\n   * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n   * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n   * @param w {Number} The width of the rectangle, in pixels\r\n   * @param h {Number} The height of the rectangle, in pixels\r\n   * @description The rect() method creates a rectangle.\r\n   */\r\n  Context2D.prototype.rect = function(x, y, w, h) {\r\n    if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n      console.error(\"jsPDF.context2d.rect: Invalid arguments\", arguments);\r\n      throw new Error(\"Invalid arguments passed to jsPDF.context2d.rect\");\r\n    }\r\n    this.moveTo(x, y);\r\n    this.lineTo(x + w, y);\r\n    this.lineTo(x + w, y + h);\r\n    this.lineTo(x, y + h);\r\n    this.lineTo(x, y);\r\n    this.lineTo(x + w, y);\r\n    this.lineTo(x, y);\r\n  };\r\n\r\n  /**\r\n   * Draws a \"filled\" rectangle\r\n   *\r\n   * @name fillRect\r\n   * @function\r\n   * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n   * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n   * @param w {Number} The width of the rectangle, in pixels\r\n   * @param h {Number} The height of the rectangle, in pixels\r\n   * @description The fillRect() method draws a \"filled\" rectangle. The default color of the fill is black.\r\n   */\r\n  Context2D.prototype.fillRect = function(x, y, w, h) {\r\n    if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n      console.error(\"jsPDF.context2d.fillRect: Invalid arguments\", arguments);\r\n      throw new Error(\"Invalid arguments passed to jsPDF.context2d.fillRect\");\r\n    }\r\n    if (isFillTransparent.call(this)) {\r\n      return;\r\n    }\r\n    var tmp = {};\r\n    if (this.lineCap !== \"butt\") {\r\n      tmp.lineCap = this.lineCap;\r\n      this.lineCap = \"butt\";\r\n    }\r\n    if (this.lineJoin !== \"miter\") {\r\n      tmp.lineJoin = this.lineJoin;\r\n      this.lineJoin = \"miter\";\r\n    }\r\n\r\n    this.beginPath();\r\n    this.rect(x, y, w, h);\r\n    this.fill();\r\n\r\n    if (tmp.hasOwnProperty(\"lineCap\")) {\r\n      this.lineCap = tmp.lineCap;\r\n    }\r\n    if (tmp.hasOwnProperty(\"lineJoin\")) {\r\n      this.lineJoin = tmp.lineJoin;\r\n    }\r\n  };\r\n\r\n  /**\r\n   *     Draws a rectangle (no fill)\r\n   *\r\n   * @name strokeRect\r\n   * @function\r\n   * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n   * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n   * @param w {Number} The width of the rectangle, in pixels\r\n   * @param h {Number} The height of the rectangle, in pixels\r\n   * @description The strokeRect() method draws a rectangle (no fill). The default color of the stroke is black.\r\n   */\r\n  Context2D.prototype.strokeRect = function strokeRect(x, y, w, h) {\r\n    if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n      console.error(\"jsPDF.context2d.strokeRect: Invalid arguments\", arguments);\r\n      throw new Error(\"Invalid arguments passed to jsPDF.context2d.strokeRect\");\r\n    }\r\n    if (isStrokeTransparent.call(this)) {\r\n      return;\r\n    }\r\n    this.beginPath();\r\n    this.rect(x, y, w, h);\r\n    this.stroke();\r\n  };\r\n\r\n  /**\r\n   * Clears the specified pixels within a given rectangle\r\n   *\r\n   * @name clearRect\r\n   * @function\r\n   * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n   * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n   * @param w {Number} The width of the rectangle to clear, in pixels\r\n   * @param h {Number} The height of the rectangle to clear, in pixels\r\n   * @description We cannot clear PDF commands that were already written to PDF, so we use white instead. <br />\r\n   * As a special case, read a special flag (ignoreClearRect) and do nothing if it is set.\r\n   * This results in all calls to clearRect() to do nothing, and keep the canvas transparent.\r\n   * This flag is stored in the save/restore context and is managed the same way as other drawing states.\r\n   *\r\n   */\r\n  Context2D.prototype.clearRect = function(x, y, w, h) {\r\n    if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n      console.error(\"jsPDF.context2d.clearRect: Invalid arguments\", arguments);\r\n      throw new Error(\"Invalid arguments passed to jsPDF.context2d.clearRect\");\r\n    }\r\n    if (this.ignoreClearRect) {\r\n      return;\r\n    }\r\n\r\n    this.fillStyle = \"#ffffff\";\r\n    this.fillRect(x, y, w, h);\r\n  };\r\n\r\n  /**\r\n   * Saves the state of the current context\r\n   *\r\n   * @name save\r\n   * @function\r\n   */\r\n  Context2D.prototype.save = function(doStackPush) {\r\n    doStackPush = typeof doStackPush === \"boolean\" ? doStackPush : true;\r\n    var tmpPageNumber = this.pdf.internal.getCurrentPageInfo().pageNumber;\r\n    for (var i = 0; i < this.pdf.internal.getNumberOfPages(); i++) {\r\n      this.pdf.setPage(i + 1);\r\n      this.pdf.internal.out(\"q\");\r\n    }\r\n    this.pdf.setPage(tmpPageNumber);\r\n\r\n    if (doStackPush) {\r\n      this.ctx.fontSize = this.pdf.internal.getFontSize();\r\n      var ctx = new ContextLayer(this.ctx);\r\n      this.ctxStack.push(this.ctx);\r\n      this.ctx = ctx;\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Returns previously saved path state and attributes\r\n   *\r\n   * @name restore\r\n   * @function\r\n   */\r\n  Context2D.prototype.restore = function(doStackPop) {\r\n    doStackPop = typeof doStackPop === \"boolean\" ? doStackPop : true;\r\n    var tmpPageNumber = this.pdf.internal.getCurrentPageInfo().pageNumber;\r\n    for (var i = 0; i < this.pdf.internal.getNumberOfPages(); i++) {\r\n      this.pdf.setPage(i + 1);\r\n      this.pdf.internal.out(\"Q\");\r\n    }\r\n    this.pdf.setPage(tmpPageNumber);\r\n\r\n    if (doStackPop && this.ctxStack.length !== 0) {\r\n      this.ctx = this.ctxStack.pop();\r\n      this.fillStyle = this.ctx.fillStyle;\r\n      this.strokeStyle = this.ctx.strokeStyle;\r\n      this.font = this.ctx.font;\r\n      this.lineCap = this.ctx.lineCap;\r\n      this.lineWidth = this.ctx.lineWidth;\r\n      this.lineJoin = this.ctx.lineJoin;\r\n      this.lineDash = this.ctx.lineDash;\r\n      this.lineDashOffset = this.ctx.lineDashOffset;\r\n    }\r\n  };\r\n\r\n  /**\r\n   * @name toDataURL\r\n   * @function\r\n   */\r\n  Context2D.prototype.toDataURL = function() {\r\n    throw new Error(\"toDataUrl not implemented.\");\r\n  };\r\n\r\n  //helper functions\r\n\r\n  /**\r\n   * Get the decimal values of r, g, b and a\r\n   *\r\n   * @name getRGBA\r\n   * @function\r\n   * @private\r\n   * @ignore\r\n   */\r\n  var getRGBA = function(style) {\r\n    var rxRgb = /rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)/;\r\n    var rxRgba = /rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*([\\d.]+)\\s*\\)/;\r\n    var rxTransparent = /transparent|rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*0+\\s*\\)/;\r\n\r\n    var r, g, b, a;\r\n\r\n    if (style.isCanvasGradient === true) {\r\n      style = style.getColor();\r\n    }\r\n\r\n    if (!style) {\r\n      return { r: 0, g: 0, b: 0, a: 0, style: style };\r\n    }\r\n\r\n    if (rxTransparent.test(style)) {\r\n      r = 0;\r\n      g = 0;\r\n      b = 0;\r\n      a = 0;\r\n    } else {\r\n      var matches = rxRgb.exec(style);\r\n      if (matches !== null) {\r\n        r = parseInt(matches[1]);\r\n        g = parseInt(matches[2]);\r\n        b = parseInt(matches[3]);\r\n        a = 1;\r\n      } else {\r\n        matches = rxRgba.exec(style);\r\n        if (matches !== null) {\r\n          r = parseInt(matches[1]);\r\n          g = parseInt(matches[2]);\r\n          b = parseInt(matches[3]);\r\n          a = parseFloat(matches[4]);\r\n        } else {\r\n          a = 1;\r\n\r\n          if (typeof style === \"string\" && style.charAt(0) !== \"#\") {\r\n            var rgbColor = new RGBColor(style);\r\n            if (rgbColor.ok) {\r\n              style = rgbColor.toHex();\r\n            } else {\r\n              style = \"#000000\";\r\n            }\r\n          }\r\n\r\n          if (style.length === 4) {\r\n            r = style.substring(1, 2);\r\n            r += r;\r\n            g = style.substring(2, 3);\r\n            g += g;\r\n            b = style.substring(3, 4);\r\n            b += b;\r\n          } else {\r\n            r = style.substring(1, 3);\r\n            g = style.substring(3, 5);\r\n            b = style.substring(5, 7);\r\n          }\r\n          r = parseInt(r, 16);\r\n          g = parseInt(g, 16);\r\n          b = parseInt(b, 16);\r\n        }\r\n      }\r\n    }\r\n    return { r: r, g: g, b: b, a: a, style: style };\r\n  };\r\n\r\n  /**\r\n   * @name isFillTransparent\r\n   * @function\r\n   * @private\r\n   * @ignore\r\n   * @returns {Boolean}\r\n   */\r\n  var isFillTransparent = function() {\r\n    return this.ctx.isFillTransparent || this.globalAlpha == 0;\r\n  };\r\n\r\n  /**\r\n   * @name isStrokeTransparent\r\n   * @function\r\n   * @private\r\n   * @ignore\r\n   * @returns {Boolean}\r\n   */\r\n  var isStrokeTransparent = function() {\r\n    return Boolean(this.ctx.isStrokeTransparent || this.globalAlpha == 0);\r\n  };\r\n\r\n  /**\r\n   * Draws \"filled\" text on the canvas\r\n   *\r\n   * @name fillText\r\n   * @function\r\n   * @param text {String} Specifies the text that will be written on the canvas\r\n   * @param x {Number} The x coordinate where to start painting the text (relative to the canvas)\r\n   * @param y {Number} The y coordinate where to start painting the text (relative to the canvas)\r\n   * @param maxWidth {Number} Optional. The maximum allowed width of the text, in pixels\r\n   * @description The fillText() method draws filled text on the canvas. The default color of the text is black.\r\n   */\r\n  Context2D.prototype.fillText = function(text, x, y, maxWidth) {\r\n    if (isNaN(x) || isNaN(y) || typeof text !== \"string\") {\r\n      console.error(\"jsPDF.context2d.fillText: Invalid arguments\", arguments);\r\n      throw new Error(\"Invalid arguments passed to jsPDF.context2d.fillText\");\r\n    }\r\n    maxWidth = isNaN(maxWidth) ? undefined : maxWidth;\r\n    if (isFillTransparent.call(this)) {\r\n      return;\r\n    }\r\n\r\n    var degs = rad2deg(this.ctx.transform.rotation);\r\n\r\n    // We only use X axis as scale hint\r\n    var scale = this.ctx.transform.scaleX;\r\n\r\n    putText.call(this, {\r\n      text: text,\r\n      x: x,\r\n      y: y,\r\n      scale: scale,\r\n      angle: degs,\r\n      align: this.textAlign,\r\n      maxWidth: maxWidth\r\n    });\r\n  };\r\n\r\n  /**\r\n   * Draws text on the canvas (no fill)\r\n   *\r\n   * @name strokeText\r\n   * @function\r\n   * @param text {String} Specifies the text that will be written on the canvas\r\n   * @param x {Number} The x coordinate where to start painting the text (relative to the canvas)\r\n   * @param y {Number} The y coordinate where to start painting the text (relative to the canvas)\r\n   * @param maxWidth {Number} Optional. The maximum allowed width of the text, in pixels\r\n   * @description The strokeText() method draws text (with no fill) on the canvas. The default color of the text is black.\r\n   */\r\n  Context2D.prototype.strokeText = function(text, x, y, maxWidth) {\r\n    if (isNaN(x) || isNaN(y) || typeof text !== \"string\") {\r\n      console.error(\"jsPDF.context2d.strokeText: Invalid arguments\", arguments);\r\n      throw new Error(\"Invalid arguments passed to jsPDF.context2d.strokeText\");\r\n    }\r\n    if (isStrokeTransparent.call(this)) {\r\n      return;\r\n    }\r\n\r\n    maxWidth = isNaN(maxWidth) ? undefined : maxWidth;\r\n\r\n    var degs = rad2deg(this.ctx.transform.rotation);\r\n    var scale = this.ctx.transform.scaleX;\r\n\r\n    putText.call(this, {\r\n      text: text,\r\n      x: x,\r\n      y: y,\r\n      scale: scale,\r\n      renderingMode: \"stroke\",\r\n      angle: degs,\r\n      align: this.textAlign,\r\n      maxWidth: maxWidth\r\n    });\r\n  };\r\n\r\n  /**\r\n   * Returns an object that contains the width of the specified text\r\n   *\r\n   * @name measureText\r\n   * @function\r\n   * @param text {String} The text to be measured\r\n   * @description The measureText() method returns an object that contains the width of the specified text, in pixels.\r\n   * @returns {Number}\r\n   */\r\n  Context2D.prototype.measureText = function(text) {\r\n    if (typeof text !== \"string\") {\r\n      console.error(\r\n        \"jsPDF.context2d.measureText: Invalid arguments\",\r\n        arguments\r\n      );\r\n      throw new Error(\r\n        \"Invalid arguments passed to jsPDF.context2d.measureText\"\r\n      );\r\n    }\r\n    var pdf = this.pdf;\r\n    var k = this.pdf.internal.scaleFactor;\r\n\r\n    var fontSize = pdf.internal.getFontSize();\r\n    var txtWidth =\r\n      (pdf.getStringUnitWidth(text) * fontSize) / pdf.internal.scaleFactor;\r\n    txtWidth *= Math.round(((k * 96) / 72) * 10000) / 10000;\r\n\r\n    var TextMetrics = function(options) {\r\n      options = options || {};\r\n      var _width = options.width || 0;\r\n      Object.defineProperty(this, \"width\", {\r\n        get: function() {\r\n          return _width;\r\n        }\r\n      });\r\n      return this;\r\n    };\r\n    return new TextMetrics({ width: txtWidth });\r\n  };\r\n\r\n  //Transformations\r\n\r\n  /**\r\n   * Scales the current drawing bigger or smaller\r\n   *\r\n   * @name scale\r\n   * @function\r\n   * @param scalewidth {Number} Scales the width of the current drawing (1=100%, 0.5=50%, 2=200%, etc.)\r\n   * @param scaleheight {Number} Scales the height of the current drawing (1=100%, 0.5=50%, 2=200%, etc.)\r\n   * @description The scale() method scales the current drawing, bigger or smaller.\r\n   */\r\n  Context2D.prototype.scale = function(scalewidth, scaleheight) {\r\n    if (isNaN(scalewidth) || isNaN(scaleheight)) {\r\n      console.error(\"jsPDF.context2d.scale: Invalid arguments\", arguments);\r\n      throw new Error(\"Invalid arguments passed to jsPDF.context2d.scale\");\r\n    }\r\n    var matrix = new Matrix(scalewidth, 0.0, 0.0, scaleheight, 0.0, 0.0);\r\n    this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n  };\r\n\r\n  /**\r\n   * Rotates the current drawing\r\n   *\r\n   * @name rotate\r\n   * @function\r\n   * @param angle {Number} The rotation angle, in radians.\r\n   * @description To calculate from degrees to radians: degrees*Math.PI/180. <br />\r\n   * Example: to rotate 5 degrees, specify the following: 5*Math.PI/180\r\n   */\r\n  Context2D.prototype.rotate = function(angle) {\r\n    if (isNaN(angle)) {\r\n      console.error(\"jsPDF.context2d.rotate: Invalid arguments\", arguments);\r\n      throw new Error(\"Invalid arguments passed to jsPDF.context2d.rotate\");\r\n    }\r\n    var matrix = new Matrix(\r\n      Math.cos(angle),\r\n      Math.sin(angle),\r\n      -Math.sin(angle),\r\n      Math.cos(angle),\r\n      0.0,\r\n      0.0\r\n    );\r\n    this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n  };\r\n\r\n  /**\r\n   * Remaps the (0,0) position on the canvas\r\n   *\r\n   * @name translate\r\n   * @function\r\n   * @param x {Number} The value to add to horizontal (x) coordinates\r\n   * @param y {Number} The value to add to vertical (y) coordinates\r\n   * @description The translate() method remaps the (0,0) position on the canvas.\r\n   */\r\n  Context2D.prototype.translate = function(x, y) {\r\n    if (isNaN(x) || isNaN(y)) {\r\n      console.error(\"jsPDF.context2d.translate: Invalid arguments\", arguments);\r\n      throw new Error(\"Invalid arguments passed to jsPDF.context2d.translate\");\r\n    }\r\n    var matrix = new Matrix(1.0, 0.0, 0.0, 1.0, x, y);\r\n    this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n  };\r\n\r\n  /**\r\n   * Replaces the current transformation matrix for the drawing\r\n   *\r\n   * @name transform\r\n   * @function\r\n   * @param a {Number} Horizontal scaling\r\n   * @param b {Number} Horizontal skewing\r\n   * @param c {Number} Vertical skewing\r\n   * @param d {Number} Vertical scaling\r\n   * @param e {Number} Horizontal moving\r\n   * @param f {Number} Vertical moving\r\n   * @description Each object on the canvas has a current transformation matrix.<br /><br />The transform() method replaces the current transformation matrix. It multiplies the current transformation matrix with the matrix described by:<br /><br /><br /><br />a    c    e<br /><br />b    d    f<br /><br />0    0    1<br /><br />In other words, the transform() method lets you scale, rotate, move, and skew the current context.\r\n   */\r\n  Context2D.prototype.transform = function(a, b, c, d, e, f) {\r\n    if (isNaN(a) || isNaN(b) || isNaN(c) || isNaN(d) || isNaN(e) || isNaN(f)) {\r\n      console.error(\"jsPDF.context2d.transform: Invalid arguments\", arguments);\r\n      throw new Error(\"Invalid arguments passed to jsPDF.context2d.transform\");\r\n    }\r\n    var matrix = new Matrix(a, b, c, d, e, f);\r\n    this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n  };\r\n\r\n  /**\r\n   * Resets the current transform to the identity matrix. Then runs transform()\r\n   *\r\n   * @name setTransform\r\n   * @function\r\n   * @param a {Number} Horizontal scaling\r\n   * @param b {Number} Horizontal skewing\r\n   * @param c {Number} Vertical skewing\r\n   * @param d {Number} Vertical scaling\r\n   * @param e {Number} Horizontal moving\r\n   * @param f {Number} Vertical moving\r\n   * @description Each object on the canvas has a current transformation matrix. <br /><br />The setTransform() method resets the current transform to the identity matrix, and then runs transform() with the same arguments.<br /><br />In other words, the setTransform() method lets you scale, rotate, move, and skew the current context.\r\n   */\r\n  Context2D.prototype.setTransform = function(a, b, c, d, e, f) {\r\n    a = isNaN(a) ? 1 : a;\r\n    b = isNaN(b) ? 0 : b;\r\n    c = isNaN(c) ? 0 : c;\r\n    d = isNaN(d) ? 1 : d;\r\n    e = isNaN(e) ? 0 : e;\r\n    f = isNaN(f) ? 0 : f;\r\n    this.ctx.transform = new Matrix(a, b, c, d, e, f);\r\n  };\r\n\r\n  /**\r\n   * Should only be used if pageWrapYEnabled is true\r\n   *\r\n   * @name setPageByYPosition\r\n   * @function\r\n   * @private\r\n   * @ignore\r\n   * @returns One-based Page Number\r\n   */\r\n  var setPageByYPosition = function(y) {\r\n    if (this.pageWrapYEnabled) {\r\n      this.lastBreak = 0;\r\n      var manualBreaks = 0;\r\n      var autoBreaks = 0;\r\n      for (var i = 0; i < this.pageBreaks.length; i++) {\r\n        if (y >= this.pageBreaks[i]) {\r\n          manualBreaks++;\r\n          if (this.lastBreak === 0) {\r\n            autoBreaks++;\r\n          }\r\n          var spaceBetweenLastBreak = this.pageBreaks[i] - this.lastBreak;\r\n          this.lastBreak = this.pageBreaks[i];\r\n          var pagesSinceLastBreak = Math.floor(\r\n            spaceBetweenLastBreak / this.pageWrapY\r\n          );\r\n          autoBreaks += pagesSinceLastBreak;\r\n        }\r\n      }\r\n      if (this.lastBreak === 0) {\r\n        var pagesSinceLastBreak = Math.floor(y / this.pageWrapY) + 1;\r\n        autoBreaks += pagesSinceLastBreak;\r\n      }\r\n      return autoBreaks + manualBreaks;\r\n    } else {\r\n      return this.pdf.internal.getCurrentPageInfo().pageNumber;\r\n    }\r\n  };\r\n\r\n  var hasMargins = function() {\r\n    return (\r\n      this.margin[0] > 0 ||\r\n      this.margin[1] > 0 ||\r\n      this.margin[2] > 0 ||\r\n      this.margin[3] > 0\r\n    );\r\n  };\r\n\r\n  /**\r\n   * Draws an image, canvas, or video onto the canvas\r\n   *\r\n   * @function\r\n   * @param img {} Specifies the image, canvas, or video element to use\r\n   * @param sx {Number} Optional. The x coordinate where to start clipping\r\n   * @param sy {Number} Optional. The y coordinate where to start clipping\r\n   * @param swidth {Number} Optional. The width of the clipped image\r\n   * @param sheight {Number} Optional. The height of the clipped image\r\n   * @param x {Number} The x coordinate where to place the image on the canvas\r\n   * @param y {Number} The y coordinate where to place the image on the canvas\r\n   * @param width {Number} Optional. The width of the image to use (stretch or reduce the image)\r\n   * @param height {Number} Optional. The height of the image to use (stretch or reduce the image)\r\n   */\r\n  Context2D.prototype.drawImage = function(\r\n    img,\r\n    sx,\r\n    sy,\r\n    swidth,\r\n    sheight,\r\n    x,\r\n    y,\r\n    width,\r\n    height\r\n  ) {\r\n    var imageProperties = this.pdf.getImageProperties(img);\r\n    var factorX = 1;\r\n    var factorY = 1;\r\n    var isClip;\r\n\r\n    var clipFactorX = 1;\r\n    var clipFactorY = 1;\r\n\r\n    if (typeof swidth !== \"undefined\" && typeof width !== \"undefined\") {\r\n      isClip = true;\r\n      clipFactorX = width / swidth;\r\n      clipFactorY = height / sheight;\r\n      factorX = ((imageProperties.width / swidth) * width) / swidth;\r\n      factorY = ((imageProperties.height / sheight) * height) / sheight;\r\n    }\r\n\r\n    //is sx and sy are set and x and y not, set x and y with values of sx and sy\r\n    if (typeof x === \"undefined\") {\r\n      x = sx;\r\n      y = sy;\r\n      sx = 0;\r\n      sy = 0;\r\n    }\r\n\r\n    if (typeof swidth !== \"undefined\" && typeof width === \"undefined\") {\r\n      width = swidth;\r\n      height = sheight;\r\n    }\r\n    if (typeof swidth === \"undefined\" && typeof width === \"undefined\") {\r\n      width = imageProperties.width;\r\n      height = imageProperties.height;\r\n    }\r\n\r\n    var decomposedTransformationMatrix = this.ctx.transform.decompose();\r\n    var angle = rad2deg(decomposedTransformationMatrix.rotate.shx);\r\n    var matrix = new Matrix();\r\n    matrix = matrix.multiply(decomposedTransformationMatrix.translate);\r\n    matrix = matrix.multiply(decomposedTransformationMatrix.skew);\r\n    matrix = matrix.multiply(decomposedTransformationMatrix.scale);\r\n    var xRect = matrix.applyToRectangle(\r\n      new Rectangle(\r\n        x - sx * clipFactorX,\r\n        y - sy * clipFactorY,\r\n        swidth * factorX,\r\n        sheight * factorY\r\n      )\r\n    );\r\n    var pageArray = getPagesByPath.call(this, xRect);\r\n    var pages = [];\r\n    for (var ii = 0; ii < pageArray.length; ii += 1) {\r\n      if (pages.indexOf(pageArray[ii]) === -1) {\r\n        pages.push(pageArray[ii]);\r\n      }\r\n    }\r\n\r\n    sortPages(pages);\r\n\r\n    var clipPath;\r\n    if (this.autoPaging) {\r\n      var min = pages[0];\r\n      var max = pages[pages.length - 1];\r\n      for (var i = min; i < max + 1; i++) {\r\n        this.pdf.setPage(i);\r\n\r\n        var pageWidthMinusMargins =\r\n          this.pdf.internal.pageSize.width - this.margin[3] - this.margin[1];\r\n        var topMargin = i === 1 ? this.posY + this.margin[0] : this.margin[0];\r\n        var firstPageHeight =\r\n          this.pdf.internal.pageSize.height -\r\n          this.posY -\r\n          this.margin[0] -\r\n          this.margin[2];\r\n        var pageHeightMinusMargins =\r\n          this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2];\r\n        var previousPageHeightSum =\r\n          i === 1 ? 0 : firstPageHeight + (i - 2) * pageHeightMinusMargins;\r\n\r\n        if (this.ctx.clip_path.length !== 0) {\r\n          var tmpPaths = this.path;\r\n          clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path));\r\n          this.path = pathPositionRedo(\r\n            clipPath,\r\n            this.posX + this.margin[3],\r\n            -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n          );\r\n          drawPaths.call(this, \"fill\", true);\r\n          this.path = tmpPaths;\r\n        }\r\n        var tmpRect = JSON.parse(JSON.stringify(xRect));\r\n        tmpRect = pathPositionRedo(\r\n          [tmpRect],\r\n          this.posX + this.margin[3],\r\n          -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n        )[0];\r\n\r\n        const needsClipping = (i > min || i < max) && hasMargins.call(this);\r\n\r\n        if (needsClipping) {\r\n          this.pdf.saveGraphicsState();\r\n          this.pdf\r\n            .rect(\r\n              this.margin[3],\r\n              this.margin[0],\r\n              pageWidthMinusMargins,\r\n              pageHeightMinusMargins,\r\n              null\r\n            )\r\n            .clip()\r\n            .discardPath();\r\n        }\r\n        this.pdf.addImage(\r\n          img,\r\n          \"JPEG\",\r\n          tmpRect.x,\r\n          tmpRect.y,\r\n          tmpRect.w,\r\n          tmpRect.h,\r\n          null,\r\n          null,\r\n          angle\r\n        );\r\n        if (needsClipping) {\r\n          this.pdf.restoreGraphicsState();\r\n        }\r\n      }\r\n    } else {\r\n      this.pdf.addImage(\r\n        img,\r\n        \"JPEG\",\r\n        xRect.x,\r\n        xRect.y,\r\n        xRect.w,\r\n        xRect.h,\r\n        null,\r\n        null,\r\n        angle\r\n      );\r\n    }\r\n  };\r\n\r\n  var getPagesByPath = function(path, pageWrapX, pageWrapY) {\r\n    var result = [];\r\n    pageWrapX = pageWrapX || this.pdf.internal.pageSize.width;\r\n    pageWrapY =\r\n      pageWrapY ||\r\n      this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2];\r\n    var yOffset = this.posY + this.ctx.prevPageLastElemOffset;\r\n\r\n    switch (path.type) {\r\n      default:\r\n      case \"mt\":\r\n      case \"lt\":\r\n        result.push(Math.floor((path.y + yOffset) / pageWrapY) + 1);\r\n        break;\r\n      case \"arc\":\r\n        result.push(\r\n          Math.floor((path.y + yOffset - path.radius) / pageWrapY) + 1\r\n        );\r\n        result.push(\r\n          Math.floor((path.y + yOffset + path.radius) / pageWrapY) + 1\r\n        );\r\n        break;\r\n      case \"qct\":\r\n        var rectOfQuadraticCurve = getQuadraticCurveBoundary(\r\n          this.ctx.lastPoint.x,\r\n          this.ctx.lastPoint.y,\r\n          path.x1,\r\n          path.y1,\r\n          path.x,\r\n          path.y\r\n        );\r\n        result.push(\r\n          Math.floor((rectOfQuadraticCurve.y + yOffset) / pageWrapY) + 1\r\n        );\r\n        result.push(\r\n          Math.floor(\r\n            (rectOfQuadraticCurve.y + rectOfQuadraticCurve.h + yOffset) /\r\n              pageWrapY\r\n          ) + 1\r\n        );\r\n        break;\r\n      case \"bct\":\r\n        var rectOfBezierCurve = getBezierCurveBoundary(\r\n          this.ctx.lastPoint.x,\r\n          this.ctx.lastPoint.y,\r\n          path.x1,\r\n          path.y1,\r\n          path.x2,\r\n          path.y2,\r\n          path.x,\r\n          path.y\r\n        );\r\n        result.push(\r\n          Math.floor((rectOfBezierCurve.y + yOffset) / pageWrapY) + 1\r\n        );\r\n        result.push(\r\n          Math.floor(\r\n            (rectOfBezierCurve.y + rectOfBezierCurve.h + yOffset) / pageWrapY\r\n          ) + 1\r\n        );\r\n        break;\r\n      case \"rect\":\r\n        result.push(Math.floor((path.y + yOffset) / pageWrapY) + 1);\r\n        result.push(Math.floor((path.y + path.h + yOffset) / pageWrapY) + 1);\r\n    }\r\n\r\n    for (var i = 0; i < result.length; i += 1) {\r\n      while (this.pdf.internal.getNumberOfPages() < result[i]) {\r\n        addPage.call(this);\r\n      }\r\n    }\r\n    return result;\r\n  };\r\n\r\n  var addPage = function() {\r\n    var fillStyle = this.fillStyle;\r\n    var strokeStyle = this.strokeStyle;\r\n    var font = this.font;\r\n    var lineCap = this.lineCap;\r\n    var lineWidth = this.lineWidth;\r\n    var lineJoin = this.lineJoin;\r\n    this.pdf.addPage();\r\n    this.fillStyle = fillStyle;\r\n    this.strokeStyle = strokeStyle;\r\n    this.font = font;\r\n    this.lineCap = lineCap;\r\n    this.lineWidth = lineWidth;\r\n    this.lineJoin = lineJoin;\r\n  };\r\n\r\n  var pathPositionRedo = function(paths, x, y) {\r\n    for (var i = 0; i < paths.length; i++) {\r\n      switch (paths[i].type) {\r\n        case \"bct\":\r\n          paths[i].x2 += x;\r\n          paths[i].y2 += y;\r\n        case \"qct\":\r\n          paths[i].x1 += x;\r\n          paths[i].y1 += y;\r\n        case \"mt\":\r\n        case \"lt\":\r\n        case \"arc\":\r\n        default:\r\n          paths[i].x += x;\r\n          paths[i].y += y;\r\n      }\r\n    }\r\n    return paths;\r\n  };\r\n\r\n  var sortPages = function(pages) {\r\n    return pages.sort(function(a, b) {\r\n      return a - b;\r\n    });\r\n  };\r\n\r\n  var pathPreProcess = function(rule, isClip) {\r\n    var fillStyle = this.fillStyle;\r\n    var strokeStyle = this.strokeStyle;\r\n    var lineCap = this.lineCap;\r\n    var oldLineWidth = this.lineWidth;\r\n    var lineWidth = Math.abs(oldLineWidth * this.ctx.transform.scaleX);\r\n    var lineJoin = this.lineJoin;\r\n\r\n    var origPath = JSON.parse(JSON.stringify(this.path));\r\n    var xPath = JSON.parse(JSON.stringify(this.path));\r\n    var clipPath;\r\n    var tmpPath;\r\n    var pages = [];\r\n\r\n    for (var i = 0; i < xPath.length; i++) {\r\n      if (typeof xPath[i].x !== \"undefined\") {\r\n        var page = getPagesByPath.call(this, xPath[i]);\r\n\r\n        for (var ii = 0; ii < page.length; ii += 1) {\r\n          if (pages.indexOf(page[ii]) === -1) {\r\n            pages.push(page[ii]);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (var j = 0; j < pages.length; j++) {\r\n      while (this.pdf.internal.getNumberOfPages() < pages[j]) {\r\n        addPage.call(this);\r\n      }\r\n    }\r\n    sortPages(pages);\r\n\r\n    if (this.autoPaging) {\r\n      var min = pages[0];\r\n      var max = pages[pages.length - 1];\r\n      for (var k = min; k < max + 1; k++) {\r\n        this.pdf.setPage(k);\r\n\r\n        this.fillStyle = fillStyle;\r\n        this.strokeStyle = strokeStyle;\r\n        this.lineCap = lineCap;\r\n        this.lineWidth = lineWidth;\r\n        this.lineJoin = lineJoin;\r\n\r\n        var pageWidthMinusMargins =\r\n          this.pdf.internal.pageSize.width - this.margin[3] - this.margin[1];\r\n        var topMargin = k === 1 ? this.posY + this.margin[0] : this.margin[0];\r\n        var firstPageHeight =\r\n          this.pdf.internal.pageSize.height -\r\n          this.posY -\r\n          this.margin[0] -\r\n          this.margin[2];\r\n        var pageHeightMinusMargins =\r\n          this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2];\r\n        var previousPageHeightSum =\r\n          k === 1 ? 0 : firstPageHeight + (k - 2) * pageHeightMinusMargins;\r\n\r\n        if (this.ctx.clip_path.length !== 0) {\r\n          var tmpPaths = this.path;\r\n          clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path));\r\n          this.path = pathPositionRedo(\r\n            clipPath,\r\n            this.posX + this.margin[3],\r\n            -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n          );\r\n          drawPaths.call(this, rule, true);\r\n          this.path = tmpPaths;\r\n        }\r\n        tmpPath = JSON.parse(JSON.stringify(origPath));\r\n        this.path = pathPositionRedo(\r\n          tmpPath,\r\n          this.posX + this.margin[3],\r\n          -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n        );\r\n        if (isClip === false || k === 0) {\r\n          const needsClipping = (k > min || k < max) && hasMargins.call(this);\r\n          if (needsClipping) {\r\n            this.pdf.saveGraphicsState();\r\n            this.pdf\r\n              .rect(\r\n                this.margin[3],\r\n                this.margin[0],\r\n                pageWidthMinusMargins,\r\n                pageHeightMinusMargins,\r\n                null\r\n              )\r\n              .clip()\r\n              .discardPath();\r\n          }\r\n          drawPaths.call(this, rule, isClip);\r\n          if (needsClipping) {\r\n            this.pdf.restoreGraphicsState();\r\n          }\r\n        }\r\n        this.lineWidth = oldLineWidth;\r\n      }\r\n    } else {\r\n      this.lineWidth = lineWidth;\r\n      drawPaths.call(this, rule, isClip);\r\n      this.lineWidth = oldLineWidth;\r\n    }\r\n    this.path = origPath;\r\n  };\r\n\r\n  /**\r\n   * Processes the paths\r\n   *\r\n   * @function\r\n   * @param rule {String}\r\n   * @param isClip {Boolean}\r\n   * @private\r\n   * @ignore\r\n   */\r\n  var drawPaths = function(rule, isClip) {\r\n    if (rule === \"stroke\" && !isClip && isStrokeTransparent.call(this)) {\r\n      return;\r\n    }\r\n\r\n    if (rule !== \"stroke\" && !isClip && isFillTransparent.call(this)) {\r\n      return;\r\n    }\r\n\r\n    var moves = [];\r\n\r\n    //var alpha = (this.ctx.fillOpacity < 1) ? this.ctx.fillOpacity : this.ctx.globalAlpha;\r\n    var delta;\r\n    var xPath = this.path;\r\n    for (var i = 0; i < xPath.length; i++) {\r\n      var pt = xPath[i];\r\n\r\n      switch (pt.type) {\r\n        case \"begin\":\r\n          moves.push({\r\n            begin: true\r\n          });\r\n          break;\r\n\r\n        case \"close\":\r\n          moves.push({\r\n            close: true\r\n          });\r\n          break;\r\n\r\n        case \"mt\":\r\n          moves.push({\r\n            start: pt,\r\n            deltas: [],\r\n            abs: []\r\n          });\r\n          break;\r\n\r\n        case \"lt\":\r\n          var iii = moves.length;\r\n          if (xPath[i - 1] && !isNaN(xPath[i - 1].x)) {\r\n            delta = [pt.x - xPath[i - 1].x, pt.y - xPath[i - 1].y];\r\n            if (iii > 0) {\r\n              for (iii; iii >= 0; iii--) {\r\n                if (\r\n                  moves[iii - 1].close !== true &&\r\n                  moves[iii - 1].begin !== true\r\n                ) {\r\n                  moves[iii - 1].deltas.push(delta);\r\n                  moves[iii - 1].abs.push(pt);\r\n                  break;\r\n                }\r\n              }\r\n            }\r\n          }\r\n          break;\r\n\r\n        case \"bct\":\r\n          delta = [\r\n            pt.x1 - xPath[i - 1].x,\r\n            pt.y1 - xPath[i - 1].y,\r\n            pt.x2 - xPath[i - 1].x,\r\n            pt.y2 - xPath[i - 1].y,\r\n            pt.x - xPath[i - 1].x,\r\n            pt.y - xPath[i - 1].y\r\n          ];\r\n          moves[moves.length - 1].deltas.push(delta);\r\n          break;\r\n\r\n        case \"qct\":\r\n          var x1 = xPath[i - 1].x + (2.0 / 3.0) * (pt.x1 - xPath[i - 1].x);\r\n          var y1 = xPath[i - 1].y + (2.0 / 3.0) * (pt.y1 - xPath[i - 1].y);\r\n          var x2 = pt.x + (2.0 / 3.0) * (pt.x1 - pt.x);\r\n          var y2 = pt.y + (2.0 / 3.0) * (pt.y1 - pt.y);\r\n          var x3 = pt.x;\r\n          var y3 = pt.y;\r\n          delta = [\r\n            x1 - xPath[i - 1].x,\r\n            y1 - xPath[i - 1].y,\r\n            x2 - xPath[i - 1].x,\r\n            y2 - xPath[i - 1].y,\r\n            x3 - xPath[i - 1].x,\r\n            y3 - xPath[i - 1].y\r\n          ];\r\n          moves[moves.length - 1].deltas.push(delta);\r\n          break;\r\n\r\n        case \"arc\":\r\n          moves.push({\r\n            deltas: [],\r\n            abs: [],\r\n            arc: true\r\n          });\r\n\r\n          if (Array.isArray(moves[moves.length - 1].abs)) {\r\n            moves[moves.length - 1].abs.push(pt);\r\n          }\r\n          break;\r\n      }\r\n    }\r\n    var style;\r\n    if (!isClip) {\r\n      if (rule === \"stroke\") {\r\n        style = \"stroke\";\r\n      } else {\r\n        style = \"fill\";\r\n      }\r\n    } else {\r\n      style = null;\r\n    }\r\n\r\n    var began = false;\r\n    for (var k = 0; k < moves.length; k++) {\r\n      if (moves[k].arc) {\r\n        var arcs = moves[k].abs;\r\n\r\n        for (var ii = 0; ii < arcs.length; ii++) {\r\n          var arc = arcs[ii];\r\n\r\n          if (arc.type === \"arc\") {\r\n            drawArc.call(\r\n              this,\r\n              arc.x,\r\n              arc.y,\r\n              arc.radius,\r\n              arc.startAngle,\r\n              arc.endAngle,\r\n              arc.counterclockwise,\r\n              undefined,\r\n              isClip,\r\n              !began\r\n            );\r\n          } else {\r\n            drawLine.call(this, arc.x, arc.y);\r\n          }\r\n          began = true;\r\n        }\r\n      } else if (moves[k].close === true) {\r\n        this.pdf.internal.out(\"h\");\r\n        began = false;\r\n      } else if (moves[k].begin !== true) {\r\n        var x = moves[k].start.x;\r\n        var y = moves[k].start.y;\r\n        drawLines.call(this, moves[k].deltas, x, y);\r\n        began = true;\r\n      }\r\n    }\r\n\r\n    if (style) {\r\n      putStyle.call(this, style);\r\n    }\r\n    if (isClip) {\r\n      doClip.call(this);\r\n    }\r\n  };\r\n\r\n  var getBaseline = function(y) {\r\n    var height =\r\n      this.pdf.internal.getFontSize() / this.pdf.internal.scaleFactor;\r\n    var descent = height * (this.pdf.internal.getLineHeightFactor() - 1);\r\n    switch (this.ctx.textBaseline) {\r\n      case \"bottom\":\r\n        return y - descent;\r\n      case \"top\":\r\n        return y + height - descent;\r\n      case \"hanging\":\r\n        return y + height - 2 * descent;\r\n      case \"middle\":\r\n        return y + height / 2 - descent;\r\n      case \"ideographic\":\r\n        // TODO not implemented\r\n        return y;\r\n      case \"alphabetic\":\r\n      default:\r\n        return y;\r\n    }\r\n  };\r\n\r\n  var getTextBottom = function(yBaseLine) {\r\n    var height =\r\n      this.pdf.internal.getFontSize() / this.pdf.internal.scaleFactor;\r\n    var descent = height * (this.pdf.internal.getLineHeightFactor() - 1);\r\n    return yBaseLine + descent;\r\n  };\r\n\r\n  Context2D.prototype.createLinearGradient = function createLinearGradient() {\r\n    var canvasGradient = function canvasGradient() {};\r\n\r\n    canvasGradient.colorStops = [];\r\n    canvasGradient.addColorStop = function(offset, color) {\r\n      this.colorStops.push([offset, color]);\r\n    };\r\n\r\n    canvasGradient.getColor = function() {\r\n      if (this.colorStops.length === 0) {\r\n        return \"#000000\";\r\n      }\r\n\r\n      return this.colorStops[0][1];\r\n    };\r\n\r\n    canvasGradient.isCanvasGradient = true;\r\n    return canvasGradient;\r\n  };\r\n  Context2D.prototype.createPattern = function createPattern() {\r\n    return this.createLinearGradient();\r\n  };\r\n  Context2D.prototype.createRadialGradient = function createRadialGradient() {\r\n    return this.createLinearGradient();\r\n  };\r\n\r\n  /**\r\n   *\r\n   * @param x Edge point X\r\n   * @param y Edge point Y\r\n   * @param r Radius\r\n   * @param a1 start angle\r\n   * @param a2 end angle\r\n   * @param counterclockwise\r\n   * @param style\r\n   * @param isClip\r\n   */\r\n  var drawArc = function(\r\n    x,\r\n    y,\r\n    r,\r\n    a1,\r\n    a2,\r\n    counterclockwise,\r\n    style,\r\n    isClip,\r\n    includeMove\r\n  ) {\r\n    // http://hansmuller-flex.blogspot.com/2011/10/more-about-approximating-circular-arcs.html\r\n    var curves = createArc.call(this, r, a1, a2, counterclockwise);\r\n\r\n    for (var i = 0; i < curves.length; i++) {\r\n      var curve = curves[i];\r\n      if (i === 0) {\r\n        if (includeMove) {\r\n          doMove.call(this, curve.x1 + x, curve.y1 + y);\r\n        } else {\r\n          drawLine.call(this, curve.x1 + x, curve.y1 + y);\r\n        }\r\n      }\r\n      drawCurve.call(\r\n        this,\r\n        x,\r\n        y,\r\n        curve.x2,\r\n        curve.y2,\r\n        curve.x3,\r\n        curve.y3,\r\n        curve.x4,\r\n        curve.y4\r\n      );\r\n    }\r\n\r\n    if (!isClip) {\r\n      putStyle.call(this, style);\r\n    } else {\r\n      doClip.call(this);\r\n    }\r\n  };\r\n\r\n  var putStyle = function(style) {\r\n    switch (style) {\r\n      case \"stroke\":\r\n        this.pdf.internal.out(\"S\");\r\n        break;\r\n      case \"fill\":\r\n        this.pdf.internal.out(\"f\");\r\n        break;\r\n    }\r\n  };\r\n\r\n  var doClip = function() {\r\n    this.pdf.clip();\r\n    this.pdf.discardPath();\r\n  };\r\n\r\n  var doMove = function(x, y) {\r\n    this.pdf.internal.out(\r\n      getHorizontalCoordinateString(x) +\r\n        \" \" +\r\n        getVerticalCoordinateString(y) +\r\n        \" m\"\r\n    );\r\n  };\r\n\r\n  var putText = function(options) {\r\n    var textAlign;\r\n    switch (options.align) {\r\n      case \"right\":\r\n      case \"end\":\r\n        textAlign = \"right\";\r\n        break;\r\n      case \"center\":\r\n        textAlign = \"center\";\r\n        break;\r\n      case \"left\":\r\n      case \"start\":\r\n      default:\r\n        textAlign = \"left\";\r\n        break;\r\n    }\r\n\r\n    var textDimensions = this.pdf.getTextDimensions(options.text);\r\n    var yBaseLine = getBaseline.call(this, options.y);\r\n    var yBottom = getTextBottom.call(this, yBaseLine);\r\n    var yTop = yBottom - textDimensions.h;\r\n\r\n    var pt = this.ctx.transform.applyToPoint(new Point(options.x, yBaseLine));\r\n    var decomposedTransformationMatrix = this.ctx.transform.decompose();\r\n    var matrix = new Matrix();\r\n    matrix = matrix.multiply(decomposedTransformationMatrix.translate);\r\n    matrix = matrix.multiply(decomposedTransformationMatrix.skew);\r\n    matrix = matrix.multiply(decomposedTransformationMatrix.scale);\r\n\r\n    var baselineRect = this.ctx.transform.applyToRectangle(\r\n      new Rectangle(options.x, yBaseLine, textDimensions.w, textDimensions.h)\r\n    );\r\n    var textBounds = matrix.applyToRectangle(\r\n      new Rectangle(options.x, yTop, textDimensions.w, textDimensions.h)\r\n    );\r\n    var pageArray = getPagesByPath.call(this, textBounds);\r\n    var pages = [];\r\n    for (var ii = 0; ii < pageArray.length; ii += 1) {\r\n      if (pages.indexOf(pageArray[ii]) === -1) {\r\n        pages.push(pageArray[ii]);\r\n      }\r\n    }\r\n\r\n    sortPages(pages);\r\n\r\n    var clipPath, oldSize, oldLineWidth;\r\n    if (this.autoPaging) {\r\n      var min = pages[0];\r\n      var max = pages[pages.length - 1];\r\n      for (var i = min; i < max + 1; i++) {\r\n        this.pdf.setPage(i);\r\n\r\n        var topMargin = i === 1 ? this.posY + this.margin[0] : this.margin[0];\r\n        var firstPageHeight =\r\n          this.pdf.internal.pageSize.height -\r\n          this.posY -\r\n          this.margin[0] -\r\n          this.margin[2];\r\n        var pageHeightMinusBottomMargin =\r\n          this.pdf.internal.pageSize.height - this.margin[2];\r\n        var pageHeightMinusMargins =\r\n          pageHeightMinusBottomMargin - this.margin[0];\r\n        var pageWidthMinusRightMargin =\r\n          this.pdf.internal.pageSize.width - this.margin[1];\r\n        var pageWidthMinusMargins = pageWidthMinusRightMargin - this.margin[3];\r\n        var previousPageHeightSum =\r\n          i === 1 ? 0 : firstPageHeight + (i - 2) * pageHeightMinusMargins;\r\n\r\n        if (this.ctx.clip_path.length !== 0) {\r\n          var tmpPaths = this.path;\r\n          clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path));\r\n          this.path = pathPositionRedo(\r\n            clipPath,\r\n            this.posX + this.margin[3],\r\n            -1 * previousPageHeightSum + topMargin\r\n          );\r\n          drawPaths.call(this, \"fill\", true);\r\n          this.path = tmpPaths;\r\n        }\r\n        var textBoundsOnPage = pathPositionRedo(\r\n          [JSON.parse(JSON.stringify(textBounds))],\r\n          this.posX + this.margin[3],\r\n          -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n        )[0];\r\n\r\n        if (options.scale >= 0.01) {\r\n          oldSize = this.pdf.internal.getFontSize();\r\n          this.pdf.setFontSize(oldSize * options.scale);\r\n          oldLineWidth = this.lineWidth;\r\n          this.lineWidth = oldLineWidth * options.scale;\r\n        }\r\n\r\n        var doSlice = this.autoPaging !== \"text\";\r\n\r\n        if (\r\n          doSlice ||\r\n          textBoundsOnPage.y + textBoundsOnPage.h <= pageHeightMinusBottomMargin\r\n        ) {\r\n          if (\r\n            doSlice ||\r\n            (textBoundsOnPage.y >= topMargin &&\r\n              textBoundsOnPage.x <= pageWidthMinusRightMargin)\r\n          ) {\r\n            var croppedText = doSlice\r\n              ? options.text\r\n              : this.pdf.splitTextToSize(\r\n                  options.text,\r\n                  options.maxWidth ||\r\n                    pageWidthMinusRightMargin - textBoundsOnPage.x\r\n                )[0];\r\n            var baseLineRectOnPage = pathPositionRedo(\r\n              [JSON.parse(JSON.stringify(baselineRect))],\r\n              this.posX + this.margin[3],\r\n              -previousPageHeightSum +\r\n                topMargin +\r\n                this.ctx.prevPageLastElemOffset\r\n            )[0];\r\n\r\n            const needsClipping =\r\n              doSlice && (i > min || i < max) && hasMargins.call(this);\r\n\r\n            if (needsClipping) {\r\n              this.pdf.saveGraphicsState();\r\n              this.pdf\r\n                .rect(\r\n                  this.margin[3],\r\n                  this.margin[0],\r\n                  pageWidthMinusMargins,\r\n                  pageHeightMinusMargins,\r\n                  null\r\n                )\r\n                .clip()\r\n                .discardPath();\r\n            }\r\n\r\n            this.pdf.text(\r\n              croppedText,\r\n              baseLineRectOnPage.x,\r\n              baseLineRectOnPage.y,\r\n              {\r\n                angle: options.angle,\r\n                align: textAlign,\r\n                renderingMode: options.renderingMode\r\n              }\r\n            );\r\n\r\n            if (needsClipping) {\r\n              this.pdf.restoreGraphicsState();\r\n            }\r\n          }\r\n        } else {\r\n          // This text is the last element of the page, but it got cut off due to the margin\r\n          // so we render it in the next page\r\n\r\n          if (textBoundsOnPage.y < pageHeightMinusBottomMargin) {\r\n            // As a result, all other elements have their y offset increased\r\n            this.ctx.prevPageLastElemOffset +=\r\n              pageHeightMinusBottomMargin - textBoundsOnPage.y;\r\n          }\r\n        }\r\n\r\n        if (options.scale >= 0.01) {\r\n          this.pdf.setFontSize(oldSize);\r\n          this.lineWidth = oldLineWidth;\r\n        }\r\n      }\r\n    } else {\r\n      if (options.scale >= 0.01) {\r\n        oldSize = this.pdf.internal.getFontSize();\r\n        this.pdf.setFontSize(oldSize * options.scale);\r\n        oldLineWidth = this.lineWidth;\r\n        this.lineWidth = oldLineWidth * options.scale;\r\n      }\r\n      this.pdf.text(options.text, pt.x + this.posX, pt.y + this.posY, {\r\n        angle: options.angle,\r\n        align: textAlign,\r\n        renderingMode: options.renderingMode,\r\n        maxWidth: options.maxWidth\r\n      });\r\n\r\n      if (options.scale >= 0.01) {\r\n        this.pdf.setFontSize(oldSize);\r\n        this.lineWidth = oldLineWidth;\r\n      }\r\n    }\r\n  };\r\n\r\n  var drawLine = function(x, y, prevX, prevY) {\r\n    prevX = prevX || 0;\r\n    prevY = prevY || 0;\r\n\r\n    this.pdf.internal.out(\r\n      getHorizontalCoordinateString(x + prevX) +\r\n        \" \" +\r\n        getVerticalCoordinateString(y + prevY) +\r\n        \" l\"\r\n    );\r\n  };\r\n\r\n  var drawLines = function(lines, x, y) {\r\n    return this.pdf.lines(lines, x, y, null, null);\r\n  };\r\n\r\n  var drawCurve = function(x, y, x1, y1, x2, y2, x3, y3) {\r\n    this.pdf.internal.out(\r\n      [\r\n        f2(getHorizontalCoordinate(x1 + x)),\r\n        f2(getVerticalCoordinate(y1 + y)),\r\n        f2(getHorizontalCoordinate(x2 + x)),\r\n        f2(getVerticalCoordinate(y2 + y)),\r\n        f2(getHorizontalCoordinate(x3 + x)),\r\n        f2(getVerticalCoordinate(y3 + y)),\r\n        \"c\"\r\n      ].join(\" \")\r\n    );\r\n  };\r\n\r\n  /**\r\n   * Return a array of objects that represent bezier curves which approximate the circular arc centered at the origin, from startAngle to endAngle (radians) with the specified radius.\r\n   *\r\n   * Each bezier curve is an object with four points, where x1,y1 and x4,y4 are the arc's end points and x2,y2 and x3,y3 are the cubic bezier's control points.\r\n   * @function createArc\r\n   */\r\n  var createArc = function(radius, startAngle, endAngle, anticlockwise) {\r\n    var EPSILON = 0.00001; // Roughly 1/1000th of a degree, see below\r\n    var twoPi = Math.PI * 2;\r\n    var halfPi = Math.PI / 2.0;\r\n\r\n    while (startAngle > endAngle) {\r\n      startAngle = startAngle - twoPi;\r\n    }\r\n    var totalAngle = Math.abs(endAngle - startAngle);\r\n    if (totalAngle < twoPi) {\r\n      if (anticlockwise) {\r\n        totalAngle = twoPi - totalAngle;\r\n      }\r\n    }\r\n\r\n    // Compute the sequence of arc curves, up to PI/2 at a time.\r\n    var curves = [];\r\n\r\n    // clockwise or counterclockwise\r\n    var sgn = anticlockwise ? -1 : +1;\r\n\r\n    var a1 = startAngle;\r\n    for (; totalAngle > EPSILON; ) {\r\n      var remain = sgn * Math.min(totalAngle, halfPi);\r\n      var a2 = a1 + remain;\r\n      curves.push(createSmallArc.call(this, radius, a1, a2));\r\n      totalAngle -= Math.abs(a2 - a1);\r\n      a1 = a2;\r\n    }\r\n\r\n    return curves;\r\n  };\r\n\r\n  /**\r\n   * Cubic bezier approximation of a circular arc centered at the origin, from (radians) a1 to a2, where a2-a1 < pi/2. The arc's radius is r.\r\n   *\r\n   * Returns an object with four points, where x1,y1 and x4,y4 are the arc's end points and x2,y2 and x3,y3 are the cubic bezier's control points.\r\n   *\r\n   * This algorithm is based on the approach described in: A. Riškus, \"Approximation of a Cubic Bezier Curve by Circular Arcs and Vice Versa,\" Information Technology and Control, 35(4), 2006 pp. 371-378.\r\n   */\r\n  var createSmallArc = function(r, a1, a2) {\r\n    var a = (a2 - a1) / 2.0;\r\n\r\n    var x4 = r * Math.cos(a);\r\n    var y4 = r * Math.sin(a);\r\n    var x1 = x4;\r\n    var y1 = -y4;\r\n\r\n    var q1 = x1 * x1 + y1 * y1;\r\n    var q2 = q1 + x1 * x4 + y1 * y4;\r\n    var k2 = ((4 / 3) * (Math.sqrt(2 * q1 * q2) - q2)) / (x1 * y4 - y1 * x4);\r\n\r\n    var x2 = x1 - k2 * y1;\r\n    var y2 = y1 + k2 * x1;\r\n    var x3 = x2;\r\n    var y3 = -y2;\r\n\r\n    var ar = a + a1;\r\n    var cos_ar = Math.cos(ar);\r\n    var sin_ar = Math.sin(ar);\r\n\r\n    return {\r\n      x1: r * Math.cos(a1),\r\n      y1: r * Math.sin(a1),\r\n      x2: x2 * cos_ar - y2 * sin_ar,\r\n      y2: x2 * sin_ar + y2 * cos_ar,\r\n      x3: x3 * cos_ar - y3 * sin_ar,\r\n      y3: x3 * sin_ar + y3 * cos_ar,\r\n      x4: r * Math.cos(a2),\r\n      y4: r * Math.sin(a2)\r\n    };\r\n  };\r\n\r\n  var rad2deg = function(value) {\r\n    return (value * 180) / Math.PI;\r\n  };\r\n\r\n  var getQuadraticCurveBoundary = function(sx, sy, cpx, cpy, ex, ey) {\r\n    var midX1 = sx + (cpx - sx) * 0.5;\r\n    var midY1 = sy + (cpy - sy) * 0.5;\r\n    var midX2 = ex + (cpx - ex) * 0.5;\r\n    var midY2 = ey + (cpy - ey) * 0.5;\r\n    var resultX1 = Math.min(sx, ex, midX1, midX2);\r\n    var resultX2 = Math.max(sx, ex, midX1, midX2);\r\n    var resultY1 = Math.min(sy, ey, midY1, midY2);\r\n    var resultY2 = Math.max(sy, ey, midY1, midY2);\r\n    return new Rectangle(\r\n      resultX1,\r\n      resultY1,\r\n      resultX2 - resultX1,\r\n      resultY2 - resultY1\r\n    );\r\n  };\r\n\r\n  //De Casteljau algorithm\r\n  var getBezierCurveBoundary = function(ax, ay, bx, by, cx, cy, dx, dy) {\r\n    var tobx = bx - ax;\r\n    var toby = by - ay;\r\n    var tocx = cx - bx;\r\n    var tocy = cy - by;\r\n    var todx = dx - cx;\r\n    var tody = dy - cy;\r\n    var precision = 40;\r\n    var d,\r\n      i,\r\n      px,\r\n      py,\r\n      qx,\r\n      qy,\r\n      rx,\r\n      ry,\r\n      tx,\r\n      ty,\r\n      sx,\r\n      sy,\r\n      x,\r\n      y,\r\n      minx,\r\n      miny,\r\n      maxx,\r\n      maxy,\r\n      toqx,\r\n      toqy,\r\n      torx,\r\n      tory,\r\n      totx,\r\n      toty;\r\n    for (i = 0; i < precision + 1; i++) {\r\n      d = i / precision;\r\n      px = ax + d * tobx;\r\n      py = ay + d * toby;\r\n      qx = bx + d * tocx;\r\n      qy = by + d * tocy;\r\n      rx = cx + d * todx;\r\n      ry = cy + d * tody;\r\n      toqx = qx - px;\r\n      toqy = qy - py;\r\n      torx = rx - qx;\r\n      tory = ry - qy;\r\n\r\n      sx = px + d * toqx;\r\n      sy = py + d * toqy;\r\n      tx = qx + d * torx;\r\n      ty = qy + d * tory;\r\n      totx = tx - sx;\r\n      toty = ty - sy;\r\n\r\n      x = sx + d * totx;\r\n      y = sy + d * toty;\r\n      if (i == 0) {\r\n        minx = x;\r\n        miny = y;\r\n        maxx = x;\r\n        maxy = y;\r\n      } else {\r\n        minx = Math.min(minx, x);\r\n        miny = Math.min(miny, y);\r\n        maxx = Math.max(maxx, x);\r\n        maxy = Math.max(maxy, y);\r\n      }\r\n    }\r\n    return new Rectangle(\r\n      Math.round(minx),\r\n      Math.round(miny),\r\n      Math.round(maxx - minx),\r\n      Math.round(maxy - miny)\r\n    );\r\n  };\r\n\r\n  var getPrevLineDashValue = function(lineDash, lineDashOffset) {\r\n    return JSON.stringify({\r\n      lineDash: lineDash,\r\n      lineDashOffset: lineDashOffset\r\n    });\r\n  };\r\n\r\n  var setLineDash = function() {\r\n    // Avoid unnecessary line dash declarations.\r\n    if (\r\n      !this.prevLineDash &&\r\n      !this.ctx.lineDash.length &&\r\n      !this.ctx.lineDashOffset\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    // Avoid unnecessary line dash declarations.\r\n    const nextLineDash = getPrevLineDashValue(\r\n      this.ctx.lineDash,\r\n      this.ctx.lineDashOffset\r\n    );\r\n    if (this.prevLineDash !== nextLineDash) {\r\n      this.pdf.setLineDash(this.ctx.lineDash, this.ctx.lineDashOffset);\r\n      this.prevLineDash = nextLineDash;\r\n    }\r\n  };\r\n})(jsPDF.API);\r\n","/**\n * @license\n * jsPDF filters PlugIn\n * Copyright (c) 2014 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { zlibSync } from \"../libs/fflate.js\";\n\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  var ASCII85Encode = function(a) {\n    var b, c, d, e, f, g, h, i, j, k;\n    // eslint-disable-next-line no-control-regex\n    for (\n      !/[^\\x00-\\xFF]/.test(a),\n        b = \"\\x00\\x00\\x00\\x00\".slice(a.length % 4 || 4),\n        a += b,\n        c = [],\n        d = 0,\n        e = a.length;\n      e > d;\n      d += 4\n    )\n      (f =\n        (a.charCodeAt(d) << 24) +\n        (a.charCodeAt(d + 1) << 16) +\n        (a.charCodeAt(d + 2) << 8) +\n        a.charCodeAt(d + 3)),\n        0 !== f\n          ? ((k = f % 85),\n            (f = (f - k) / 85),\n            (j = f % 85),\n            (f = (f - j) / 85),\n            (i = f % 85),\n            (f = (f - i) / 85),\n            (h = f % 85),\n            (f = (f - h) / 85),\n            (g = f % 85),\n            c.push(g + 33, h + 33, i + 33, j + 33, k + 33))\n          : c.push(122);\n    return (\n      (function(a, b) {\n        for (var c = b; c > 0; c--) a.pop();\n      })(c, b.length),\n      String.fromCharCode.apply(String, c) + \"~>\"\n    );\n  };\n\n  var ASCII85Decode = function(a) {\n    var c,\n      d,\n      e,\n      f,\n      g,\n      h = String,\n      l = \"length\",\n      w = 255,\n      x = \"charCodeAt\",\n      y = \"slice\",\n      z = \"replace\";\n    for (\n      \"~>\" === a[y](-2),\n        a = a[y](0, -2)\n          [z](/\\s/g, \"\")\n          [z](\"z\", \"!!!!!\"),\n        c = \"uuuuu\"[y](a[l] % 5 || 5),\n        a += c,\n        e = [],\n        f = 0,\n        g = a[l];\n      g > f;\n      f += 5\n    )\n      (d =\n        52200625 * (a[x](f) - 33) +\n        614125 * (a[x](f + 1) - 33) +\n        7225 * (a[x](f + 2) - 33) +\n        85 * (a[x](f + 3) - 33) +\n        (a[x](f + 4) - 33)),\n        e.push(w & (d >> 24), w & (d >> 16), w & (d >> 8), w & d);\n    return (\n      (function(a, b) {\n        for (var c = b; c > 0; c--) a.pop();\n      })(e, c[l]),\n      h.fromCharCode.apply(h, e)\n    );\n  };\n\n  var ASCIIHexEncode = function(value) {\n    return (\n      value\n        .split(\"\")\n        .map(function(value) {\n          return (\"0\" + value.charCodeAt().toString(16)).slice(-2);\n        })\n        .join(\"\") + \">\"\n    );\n  };\n\n  var ASCIIHexDecode = function(value) {\n    var regexCheckIfHex = new RegExp(/^([0-9A-Fa-f]{2})+$/);\n    value = value.replace(/\\s/g, \"\");\n    if (value.indexOf(\">\") !== -1) {\n      value = value.substr(0, value.indexOf(\">\"));\n    }\n    if (value.length % 2) {\n      value += \"0\";\n    }\n    if (regexCheckIfHex.test(value) === false) {\n      return \"\";\n    }\n    var result = \"\";\n    for (var i = 0; i < value.length; i += 2) {\n      result += String.fromCharCode(\"0x\" + (value[i] + value[i + 1]));\n    }\n    return result;\n  };\n  /*\n  var FlatePredictors = {\n      None: 1,\n      TIFF: 2,\n      PNG_None: 10,\n      PNG_Sub: 11,\n      PNG_Up: 12,\n      PNG_Average: 13,\n      PNG_Paeth: 14,\n      PNG_Optimum: 15\n  };\n  */\n\n  var FlateEncode = function(data) {\n    var arr = new Uint8Array(data.length);\n    var i = data.length;\n    while (i--) {\n      arr[i] = data.charCodeAt(i);\n    }\n    arr = zlibSync(arr);\n    data = arr.reduce(function(data, byte) {\n      return data + String.fromCharCode(byte);\n    }, \"\");\n    return data;\n  };\n\n  jsPDFAPI.processDataByFilters = function(origData, filterChain) {\n    \"use strict\";\n    var i = 0;\n    var data = origData || \"\";\n    var reverseChain = [];\n    filterChain = filterChain || [];\n\n    if (typeof filterChain === \"string\") {\n      filterChain = [filterChain];\n    }\n\n    for (i = 0; i < filterChain.length; i += 1) {\n      switch (filterChain[i]) {\n        case \"ASCII85Decode\":\n        case \"/ASCII85Decode\":\n          data = ASCII85Decode(data);\n          reverseChain.push(\"/ASCII85Encode\");\n          break;\n        case \"ASCII85Encode\":\n        case \"/ASCII85Encode\":\n          data = ASCII85Encode(data);\n          reverseChain.push(\"/ASCII85Decode\");\n          break;\n        case \"ASCIIHexDecode\":\n        case \"/ASCIIHexDecode\":\n          data = ASCIIHexDecode(data);\n          reverseChain.push(\"/ASCIIHexEncode\");\n          break;\n        case \"ASCIIHexEncode\":\n        case \"/ASCIIHexEncode\":\n          data = ASCIIHexEncode(data);\n          reverseChain.push(\"/ASCIIHexDecode\");\n          break;\n        case \"FlateEncode\":\n        case \"/FlateEncode\":\n          data = FlateEncode(data);\n          reverseChain.push(\"/FlateDecode\");\n          break;\n        default:\n          throw new Error(\n            'The filter: \"' + filterChain[i] + '\" is not implemented'\n          );\n      }\n    }\n\n    return { data: data, reverseChain: reverseChain.reverse().join(\" \") };\n  };\n})(jsPDF.API);\n","/**\n * @license\n * jsPDF fileloading PlugIn\n * Copyright (c) 2018 Aras Abbasi (aras.abbasi@gmail.com)\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name fileloading\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  /**\n   * @name loadFile\n   * @function\n   * @param {string} url\n   * @param {boolean} sync\n   * @param {function} callback\n   * @returns {string|undefined} result\n   */\n  jsPDFAPI.loadFile = function(url, sync, callback) {\n    return browserRequest(url, sync, callback);\n\n  };\n\n  /**\n   * @name loadImageFile\n   * @function\n   * @param {string} path\n   * @param {boolean} sync\n   * @param {function} callback\n   */\n  jsPDFAPI.loadImageFile = jsPDFAPI.loadFile;\n\n  function browserRequest(url, sync, callback) {\n    sync = sync === false ? false : true;\n    callback = typeof callback === \"function\" ? callback : function() {};\n    var result = undefined;\n\n    var xhr = function(url, sync, callback) {\n      var request = new XMLHttpRequest();\n      var i = 0;\n\n      var sanitizeUnicode = function(data) {\n        var dataLength = data.length;\n        var charArray = [];\n        var StringFromCharCode = String.fromCharCode;\n\n        //Transform Unicode to ASCII\n        for (i = 0; i < dataLength; i += 1) {\n          charArray.push(StringFromCharCode(data.charCodeAt(i) & 0xff));\n        }\n        return charArray.join(\"\");\n      };\n\n      request.open(\"GET\", url, !sync);\n      // XHR binary charset opt by Marcus Granado 2006 [http://mgran.blogspot.com]\n      request.overrideMimeType(\"text/plain; charset=x-user-defined\");\n\n      if (sync === false) {\n        request.onload = function() {\n          if (request.status === 200) {\n            callback(sanitizeUnicode(this.responseText));\n          } else {\n            callback(undefined);\n          }\n        };\n      }\n      request.send(null);\n\n      if (sync && request.status === 200) {\n        return sanitizeUnicode(request.responseText);\n      }\n    };\n    try {\n      result = xhr(url, sync, callback);\n      // eslint-disable-next-line no-empty\n    } catch (e) {}\n    return result;\n  }\n\n  function nodeReadFile(url, sync, callback) {\n    sync = sync === false ? false : true;\n    var result = undefined;\n\n    var fs = require(\"fs\");\n    var path = require(\"path\");\n\n    url = path.resolve(url);\n    if (sync) {\n      try {\n        result = fs.readFileSync(url, { encoding: \"latin1\" });\n      } catch (e) {\n        return undefined;\n      }\n    } else {\n      fs.readFile(url, { encoding: \"latin1\" }, function(err, data) {\n        if (!callback) {\n          return;\n        }\n        if (err) {\n          callback(undefined);\n        }\n        callback(data);\n      });\n    }\n\n    return result;\n  }\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2018 Erik Koopmans\n * Released under the MIT License.\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { normalizeFontFace } from \"../libs/fontFace.js\";\nimport { globalObject } from \"../libs/globalObject.js\";\n\n/**\n * jsPDF html PlugIn\n *\n * @name html\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  function loadHtml2Canvas() {\n    return (function() {\n      if (globalObject[\"html2canvas\"]) {\n        return Promise.resolve(globalObject[\"html2canvas\"]);\n      }\n\n      return import(\"html2canvas\");\n\n    })()\n      .catch(function(e) {\n        return Promise.reject(new Error(\"Could not load html2canvas: \" + e));\n      })\n      .then(function(html2canvas) {\n        return html2canvas.default ? html2canvas.default : html2canvas;\n      });\n  }\n\n  function loadDomPurify() {\n    return (function() {\n      if (globalObject[\"DOMPurify\"]) {\n        return Promise.resolve(globalObject[\"DOMPurify\"]);\n      }\n\n      return import(\"dompurify\");\n\n    })()\n      .catch(function(e) {\n        return Promise.reject(new Error(\"Could not load dompurify: \" + e));\n      })\n      .then(function(dompurify) {\n        return dompurify.default ? dompurify.default : dompurify;\n      });\n  }\n\n  /**\n   * Determine the type of a variable/object.\n   *\n   * @private\n   * @ignore\n   */\n  var objType = function(obj) {\n    var type = typeof obj;\n    if (type === \"undefined\") return \"undefined\";\n    else if (type === \"string\" || obj instanceof String) return \"string\";\n    else if (type === \"number\" || obj instanceof Number) return \"number\";\n    else if (type === \"function\" || obj instanceof Function) return \"function\";\n    else if (!!obj && obj.constructor === Array) return \"array\";\n    else if (obj && obj.nodeType === 1) return \"element\";\n    else if (type === \"object\") return \"object\";\n    else return \"unknown\";\n  };\n\n  /**\n   * Create an HTML element with optional className, innerHTML, and style.\n   *\n   * @private\n   * @ignore\n   */\n  var createElement = function(tagName, opt) {\n    var el = document.createElement(tagName);\n    if (opt.className) el.className = opt.className;\n    if (opt.innerHTML && opt.dompurify) {\n      el.innerHTML = opt.dompurify.sanitize(opt.innerHTML);\n    }\n    for (var key in opt.style) {\n      el.style[key] = opt.style[key];\n    }\n    return el;\n  };\n\n  /**\n   * Deep-clone a node and preserve contents/properties.\n   *\n   * @private\n   * @ignore\n   */\n  var cloneNode = function(node, javascriptEnabled) {\n    // Recursively clone the node.\n    var clone =\n      node.nodeType === 3\n        ? document.createTextNode(node.nodeValue)\n        : node.cloneNode(false);\n    for (var child = node.firstChild; child; child = child.nextSibling) {\n      if (\n        javascriptEnabled === true ||\n        child.nodeType !== 1 ||\n        child.nodeName !== \"SCRIPT\"\n      ) {\n        clone.appendChild(cloneNode(child, javascriptEnabled));\n      }\n    }\n\n    if (node.nodeType === 1) {\n      // Preserve contents/properties of special nodes.\n      if (node.nodeName === \"CANVAS\") {\n        clone.width = node.width;\n        clone.height = node.height;\n        clone.getContext(\"2d\").drawImage(node, 0, 0);\n      } else if (node.nodeName === \"TEXTAREA\" || node.nodeName === \"SELECT\") {\n        clone.value = node.value;\n      }\n\n      // Preserve the node's scroll position when it loads.\n      clone.addEventListener(\n        \"load\",\n        function() {\n          clone.scrollTop = node.scrollTop;\n          clone.scrollLeft = node.scrollLeft;\n        },\n        true\n      );\n    }\n\n    // Return the cloned node.\n    return clone;\n  };\n\n  /* ----- CONSTRUCTOR ----- */\n\n  var Worker = function Worker(opt) {\n    // Create the root parent for the proto chain, and the starting Worker.\n    var root = Object.assign(\n      Worker.convert(Promise.resolve()),\n      JSON.parse(JSON.stringify(Worker.template))\n    );\n    var self = Worker.convert(Promise.resolve(), root);\n\n    // Set progress, optional settings, and return.\n    self = self.setProgress(1, Worker, 1, [Worker]);\n    self = self.set(opt);\n    return self;\n  };\n\n  // Boilerplate for subclassing Promise.\n  Worker.prototype = Object.create(Promise.prototype);\n  Worker.prototype.constructor = Worker;\n\n  // Converts/casts promises into Workers.\n  Worker.convert = function convert(promise, inherit) {\n    // Uses prototypal inheritance to receive changes made to ancestors' properties.\n    promise.__proto__ = inherit || Worker.prototype;\n    return promise;\n  };\n\n  Worker.template = {\n    prop: {\n      src: null,\n      container: null,\n      overlay: null,\n      canvas: null,\n      img: null,\n      pdf: null,\n      pageSize: null,\n      callback: function() {}\n    },\n    progress: {\n      val: 0,\n      state: null,\n      n: 0,\n      stack: []\n    },\n    opt: {\n      filename: \"file.pdf\",\n      margin: [0, 0, 0, 0],\n      enableLinks: true,\n      x: 0,\n      y: 0,\n      html2canvas: {},\n      jsPDF: {},\n      backgroundColor: \"transparent\"\n    }\n  };\n\n  /* ----- FROM / TO ----- */\n\n  Worker.prototype.from = function from(src, type) {\n    function getType(src) {\n      switch (objType(src)) {\n        case \"string\":\n          return \"string\";\n        case \"element\":\n          return src.nodeName.toLowerCase() === \"canvas\" ? \"canvas\" : \"element\";\n        default:\n          return \"unknown\";\n      }\n    }\n\n    return this.then(function from_main() {\n      type = type || getType(src);\n      switch (type) {\n        case \"string\":\n          return this.then(loadDomPurify).then(function(dompurify) {\n            return this.set({\n              src: createElement(\"div\", {\n                innerHTML: src,\n                dompurify: dompurify\n              })\n            });\n          });\n        case \"element\":\n          return this.set({ src: src });\n        case \"canvas\":\n          return this.set({ canvas: src });\n        case \"img\":\n          return this.set({ img: src });\n        default:\n          return this.error(\"Unknown source type.\");\n      }\n    });\n  };\n\n  Worker.prototype.to = function to(target) {\n    // Route the 'to' request to the appropriate method.\n    switch (target) {\n      case \"container\":\n        return this.toContainer();\n      case \"canvas\":\n        return this.toCanvas();\n      case \"img\":\n        return this.toImg();\n      case \"pdf\":\n        return this.toPdf();\n      default:\n        return this.error(\"Invalid target.\");\n    }\n  };\n\n  Worker.prototype.toContainer = function toContainer() {\n    // Set up function prerequisites.\n    var prereqs = [\n      function checkSrc() {\n        return (\n          this.prop.src || this.error(\"Cannot duplicate - no source HTML.\")\n        );\n      },\n      function checkPageSize() {\n        return this.prop.pageSize || this.setPageSize();\n      }\n    ];\n    return this.thenList(prereqs).then(function toContainer_main() {\n      // Define the CSS styles for the container and its overlay parent.\n      var overlayCSS = {\n        position: \"fixed\",\n        overflow: \"hidden\",\n        zIndex: 1000,\n        left: \"-100000px\",\n        right: 0,\n        bottom: 0,\n        top: 0\n      };\n      var containerCSS = {\n        position: \"relative\",\n        display: \"inline-block\",\n        width:\n          (typeof this.opt.width === \"number\" &&\n          !isNaN(this.opt.width) &&\n          typeof this.opt.windowWidth === \"number\" &&\n          !isNaN(this.opt.windowWidth)\n            ? this.opt.windowWidth\n            : Math.max(\n                this.prop.src.clientWidth,\n                this.prop.src.scrollWidth,\n                this.prop.src.offsetWidth\n              )) + \"px\",\n        left: 0,\n        right: 0,\n        top: 0,\n        margin: \"auto\",\n        backgroundColor: this.opt.backgroundColor\n      }; // Set the overlay to hidden (could be changed in the future to provide a print preview).\n\n      var source = cloneNode(\n        this.prop.src,\n        this.opt.html2canvas.javascriptEnabled\n      );\n\n      if (source.tagName === \"BODY\") {\n        containerCSS.height =\n          Math.max(\n            document.body.scrollHeight,\n            document.body.offsetHeight,\n            document.documentElement.clientHeight,\n            document.documentElement.scrollHeight,\n            document.documentElement.offsetHeight\n          ) + \"px\";\n      }\n\n      this.prop.overlay = createElement(\"div\", {\n        className: \"html2pdf__overlay\",\n        style: overlayCSS\n      });\n      this.prop.container = createElement(\"div\", {\n        className: \"html2pdf__container\",\n        style: containerCSS\n      });\n      this.prop.container.appendChild(source);\n      this.prop.container.firstChild.appendChild(\n        createElement(\"div\", {\n          style: {\n            clear: \"both\",\n            border: \"0 none transparent\",\n            margin: 0,\n            padding: 0,\n            height: 0\n          }\n        })\n      );\n      this.prop.container.style.float = \"none\";\n      this.prop.overlay.appendChild(this.prop.container);\n      document.body.appendChild(this.prop.overlay);\n      this.prop.container.firstChild.style.position = \"relative\";\n      this.prop.container.height =\n        Math.max(\n          this.prop.container.firstChild.clientHeight,\n          this.prop.container.firstChild.scrollHeight,\n          this.prop.container.firstChild.offsetHeight\n        ) + \"px\";\n    });\n  };\n\n  Worker.prototype.toCanvas = function toCanvas() {\n    // Set up function prerequisites.\n    var prereqs = [\n      function checkContainer() {\n        return (\n          document.body.contains(this.prop.container) || this.toContainer()\n        );\n      }\n    ];\n\n    // Fulfill prereqs then create the canvas.\n    return this.thenList(prereqs)\n      .then(loadHtml2Canvas)\n      .then(function toCanvas_main(html2canvas) {\n        // Handle old-fashioned 'onrendered' argument.\n        var options = Object.assign({}, this.opt.html2canvas);\n        delete options.onrendered;\n\n        return html2canvas(this.prop.container, options);\n      })\n      .then(function toCanvas_post(canvas) {\n        // Handle old-fashioned 'onrendered' argument.\n        var onRendered = this.opt.html2canvas.onrendered || function() {};\n        onRendered(canvas);\n\n        this.prop.canvas = canvas;\n        document.body.removeChild(this.prop.overlay);\n      });\n  };\n\n  Worker.prototype.toContext2d = function toContext2d() {\n    // Set up function prerequisites.\n    var prereqs = [\n      function checkContainer() {\n        return (\n          document.body.contains(this.prop.container) || this.toContainer()\n        );\n      }\n    ];\n\n    // Fulfill prereqs then create the canvas.\n    return this.thenList(prereqs)\n      .then(loadHtml2Canvas)\n      .then(function toContext2d_main(html2canvas) {\n        // Handle old-fashioned 'onrendered' argument.\n\n        var pdf = this.opt.jsPDF;\n        var fontFaces = this.opt.fontFaces;\n\n        var scale =\n          typeof this.opt.width === \"number\" &&\n          !isNaN(this.opt.width) &&\n          typeof this.opt.windowWidth === \"number\" &&\n          !isNaN(this.opt.windowWidth)\n            ? this.opt.width / this.opt.windowWidth\n            : 1;\n\n        var options = Object.assign(\n          {\n            async: true,\n            allowTaint: true,\n            scale: scale,\n            scrollX: this.opt.scrollX || 0,\n            scrollY: this.opt.scrollY || 0,\n            backgroundColor: \"#ffffff\",\n            imageTimeout: 15000,\n            logging: true,\n            proxy: null,\n            removeContainer: true,\n            foreignObjectRendering: false,\n            useCORS: false\n          },\n          this.opt.html2canvas\n        );\n        delete options.onrendered;\n\n        pdf.context2d.autoPaging =\n          typeof this.opt.autoPaging === \"undefined\"\n            ? true\n            : this.opt.autoPaging;\n        pdf.context2d.posX = this.opt.x;\n        pdf.context2d.posY = this.opt.y;\n        pdf.context2d.margin = this.opt.margin;\n        pdf.context2d.fontFaces = fontFaces;\n\n        if (fontFaces) {\n          for (var i = 0; i < fontFaces.length; ++i) {\n            var font = fontFaces[i];\n            var src = font.src.find(function(src) {\n              return src.format === \"truetype\";\n            });\n\n            if (src) {\n              pdf.addFont(src.url, font.ref.name, font.ref.style);\n            }\n          }\n        }\n\n        options.windowHeight = options.windowHeight || 0;\n        options.windowHeight =\n          options.windowHeight == 0\n            ? Math.max(\n                this.prop.container.clientHeight,\n                this.prop.container.scrollHeight,\n                this.prop.container.offsetHeight\n              )\n            : options.windowHeight;\n\n        pdf.context2d.save(true);\n        return html2canvas(this.prop.container, options);\n      })\n      .then(function toContext2d_post(canvas) {\n        this.opt.jsPDF.context2d.restore(true);\n\n        // Handle old-fashioned 'onrendered' argument.\n        var onRendered = this.opt.html2canvas.onrendered || function() {};\n        onRendered(canvas);\n\n        this.prop.canvas = canvas;\n        document.body.removeChild(this.prop.overlay);\n      });\n  };\n\n  Worker.prototype.toImg = function toImg() {\n    // Set up function prerequisites.\n    var prereqs = [\n      function checkCanvas() {\n        return this.prop.canvas || this.toCanvas();\n      }\n    ];\n\n    // Fulfill prereqs then create the image.\n    return this.thenList(prereqs).then(function toImg_main() {\n      var imgData = this.prop.canvas.toDataURL(\n        \"image/\" + this.opt.image.type,\n        this.opt.image.quality\n      );\n      this.prop.img = document.createElement(\"img\");\n      this.prop.img.src = imgData;\n    });\n  };\n\n  Worker.prototype.toPdf = function toPdf() {\n    // Set up function prerequisites.\n    var prereqs = [\n      function checkContext2d() {\n        return this.toContext2d();\n      }\n      //function checkCanvas() { return this.prop.canvas || this.toCanvas(); }\n    ];\n\n    // Fulfill prereqs then create the image.\n    return this.thenList(prereqs).then(function toPdf_main() {\n      // Create local copies of frequently used properties.\n      this.prop.pdf = this.prop.pdf || this.opt.jsPDF;\n    });\n  };\n\n  /* ----- OUTPUT / SAVE ----- */\n\n  Worker.prototype.output = function output(type, options, src) {\n    // Redirect requests to the correct function (outputPdf / outputImg).\n    src = src || \"pdf\";\n    if (src.toLowerCase() === \"img\" || src.toLowerCase() === \"image\") {\n      return this.outputImg(type, options);\n    } else {\n      return this.outputPdf(type, options);\n    }\n  };\n\n  Worker.prototype.outputPdf = function outputPdf(type, options) {\n    // Set up function prerequisites.\n    var prereqs = [\n      function checkPdf() {\n        return this.prop.pdf || this.toPdf();\n      }\n    ];\n\n    // Fulfill prereqs then perform the appropriate output.\n    return this.thenList(prereqs).then(function outputPdf_main() {\n      /* Currently implemented output types:\n       *    https://rawgit.com/MrRio/jsPDF/master/docs/jspdf.js.html#line992\n       *  save(options), arraybuffer, blob, bloburi/bloburl,\n       *  datauristring/dataurlstring, dataurlnewwindow, datauri/dataurl\n       */\n      return this.prop.pdf.output(type, options);\n    });\n  };\n\n  Worker.prototype.outputImg = function outputImg(type) {\n    // Set up function prerequisites.\n    var prereqs = [\n      function checkImg() {\n        return this.prop.img || this.toImg();\n      }\n    ];\n\n    // Fulfill prereqs then perform the appropriate output.\n    return this.thenList(prereqs).then(function outputImg_main() {\n      switch (type) {\n        case undefined:\n        case \"img\":\n          return this.prop.img;\n        case \"datauristring\":\n        case \"dataurlstring\":\n          return this.prop.img.src;\n        case \"datauri\":\n        case \"dataurl\":\n          return (document.location.href = this.prop.img.src);\n        default:\n          throw 'Image output type \"' + type + '\" is not supported.';\n      }\n    });\n  };\n\n  Worker.prototype.save = function save(filename) {\n    // Set up function prerequisites.\n    var prereqs = [\n      function checkPdf() {\n        return this.prop.pdf || this.toPdf();\n      }\n    ];\n\n    // Fulfill prereqs, update the filename (if provided), and save the PDF.\n    return this.thenList(prereqs)\n      .set(filename ? { filename: filename } : null)\n      .then(function save_main() {\n        this.prop.pdf.save(this.opt.filename);\n      });\n  };\n\n  Worker.prototype.doCallback = function doCallback() {\n    // Set up function prerequisites.\n    var prereqs = [\n      function checkPdf() {\n        return this.prop.pdf || this.toPdf();\n      }\n    ];\n\n    // Fulfill prereqs, update the filename (if provided), and save the PDF.\n    return this.thenList(prereqs).then(function doCallback_main() {\n      this.prop.callback(this.prop.pdf);\n    });\n  };\n\n  /* ----- SET / GET ----- */\n\n  Worker.prototype.set = function set(opt) {\n    // TODO: Implement ordered pairs?\n\n    // Silently ignore invalid or empty input.\n    if (objType(opt) !== \"object\") {\n      return this;\n    }\n\n    // Build an array of setter functions to queue.\n    var fns = Object.keys(opt || {}).map(function(key) {\n      if (key in Worker.template.prop) {\n        // Set pre-defined properties.\n        return function set_prop() {\n          this.prop[key] = opt[key];\n        };\n      } else {\n        switch (key) {\n          case \"margin\":\n            return this.setMargin.bind(this, opt.margin);\n          case \"jsPDF\":\n            return function set_jsPDF() {\n              this.opt.jsPDF = opt.jsPDF;\n              return this.setPageSize();\n            };\n          case \"pageSize\":\n            return this.setPageSize.bind(this, opt.pageSize);\n          default:\n            // Set any other properties in opt.\n            return function set_opt() {\n              this.opt[key] = opt[key];\n            };\n        }\n      }\n    }, this);\n\n    // Set properties within the promise chain.\n    return this.then(function set_main() {\n      return this.thenList(fns);\n    });\n  };\n\n  Worker.prototype.get = function get(key, cbk) {\n    return this.then(function get_main() {\n      // Fetch the requested property, either as a predefined prop or in opt.\n      var val = key in Worker.template.prop ? this.prop[key] : this.opt[key];\n      return cbk ? cbk(val) : val;\n    });\n  };\n\n  Worker.prototype.setMargin = function setMargin(margin) {\n    return this.then(function setMargin_main() {\n      // Parse the margin property.\n      switch (objType(margin)) {\n        case \"number\":\n          margin = [margin, margin, margin, margin];\n        // eslint-disable-next-line no-fallthrough\n        case \"array\":\n          if (margin.length === 2) {\n            margin = [margin[0], margin[1], margin[0], margin[1]];\n          }\n          if (margin.length === 4) {\n            break;\n          }\n        // eslint-disable-next-line no-fallthrough\n        default:\n          return this.error(\"Invalid margin array.\");\n      }\n\n      // Set the margin property, then update pageSize.\n      this.opt.margin = margin;\n    }).then(this.setPageSize);\n  };\n\n  Worker.prototype.setPageSize = function setPageSize(pageSize) {\n    function toPx(val, k) {\n      return Math.floor(((val * k) / 72) * 96);\n    }\n\n    return this.then(function setPageSize_main() {\n      // Retrieve page-size based on jsPDF settings, if not explicitly provided.\n      pageSize = pageSize || jsPDF.getPageSize(this.opt.jsPDF);\n\n      // Add 'inner' field if not present.\n      if (!pageSize.hasOwnProperty(\"inner\")) {\n        pageSize.inner = {\n          width: pageSize.width - this.opt.margin[1] - this.opt.margin[3],\n          height: pageSize.height - this.opt.margin[0] - this.opt.margin[2]\n        };\n        pageSize.inner.px = {\n          width: toPx(pageSize.inner.width, pageSize.k),\n          height: toPx(pageSize.inner.height, pageSize.k)\n        };\n        pageSize.inner.ratio = pageSize.inner.height / pageSize.inner.width;\n      }\n\n      // Attach pageSize to this.\n      this.prop.pageSize = pageSize;\n    });\n  };\n\n  Worker.prototype.setProgress = function setProgress(val, state, n, stack) {\n    // Immediately update all progress values.\n    if (val != null) this.progress.val = val;\n    if (state != null) this.progress.state = state;\n    if (n != null) this.progress.n = n;\n    if (stack != null) this.progress.stack = stack;\n    this.progress.ratio = this.progress.val / this.progress.state;\n\n    // Return this for command chaining.\n    return this;\n  };\n\n  Worker.prototype.updateProgress = function updateProgress(\n    val,\n    state,\n    n,\n    stack\n  ) {\n    // Immediately update all progress values, using setProgress.\n    return this.setProgress(\n      val ? this.progress.val + val : null,\n      state ? state : null,\n      n ? this.progress.n + n : null,\n      stack ? this.progress.stack.concat(stack) : null\n    );\n  };\n\n  /* ----- PROMISE MAPPING ----- */\n\n  Worker.prototype.then = function then(onFulfilled, onRejected) {\n    // Wrap `this` for encapsulation.\n    var self = this;\n\n    return this.thenCore(onFulfilled, onRejected, function then_main(\n      onFulfilled,\n      onRejected\n    ) {\n      // Update progress while queuing, calling, and resolving `then`.\n      self.updateProgress(null, null, 1, [onFulfilled]);\n      return Promise.prototype.then\n        .call(this, function then_pre(val) {\n          self.updateProgress(null, onFulfilled);\n          return val;\n        })\n        .then(onFulfilled, onRejected)\n        .then(function then_post(val) {\n          self.updateProgress(1);\n          return val;\n        });\n    });\n  };\n\n  Worker.prototype.thenCore = function thenCore(\n    onFulfilled,\n    onRejected,\n    thenBase\n  ) {\n    // Handle optional thenBase parameter.\n    thenBase = thenBase || Promise.prototype.then;\n\n    // Wrap `this` for encapsulation and bind it to the promise handlers.\n    var self = this;\n    if (onFulfilled) {\n      onFulfilled = onFulfilled.bind(self);\n    }\n    if (onRejected) {\n      onRejected = onRejected.bind(self);\n    }\n\n    // Cast self into a Promise to avoid polyfills recursively defining `then`.\n    var isNative =\n      Promise.toString().indexOf(\"[native code]\") !== -1 &&\n      Promise.name === \"Promise\";\n    var selfPromise = isNative\n      ? self\n      : Worker.convert(Object.assign({}, self), Promise.prototype);\n\n    // Return the promise, after casting it into a Worker and preserving props.\n    var returnVal = thenBase.call(selfPromise, onFulfilled, onRejected);\n    return Worker.convert(returnVal, self.__proto__);\n  };\n\n  Worker.prototype.thenExternal = function thenExternal(\n    onFulfilled,\n    onRejected\n  ) {\n    // Call `then` and return a standard promise (exits the Worker chain).\n    return Promise.prototype.then.call(this, onFulfilled, onRejected);\n  };\n\n  Worker.prototype.thenList = function thenList(fns) {\n    // Queue a series of promise 'factories' into the promise chain.\n    var self = this;\n    fns.forEach(function thenList_forEach(fn) {\n      self = self.thenCore(fn);\n    });\n    return self;\n  };\n\n  Worker.prototype[\"catch\"] = function(onRejected) {\n    // Bind `this` to the promise handler, call `catch`, and return a Worker.\n    if (onRejected) {\n      onRejected = onRejected.bind(this);\n    }\n    var returnVal = Promise.prototype[\"catch\"].call(this, onRejected);\n    return Worker.convert(returnVal, this);\n  };\n\n  Worker.prototype.catchExternal = function catchExternal(onRejected) {\n    // Call `catch` and return a standard promise (exits the Worker chain).\n    return Promise.prototype[\"catch\"].call(this, onRejected);\n  };\n\n  Worker.prototype.error = function error(msg) {\n    // Throw the error in the Promise chain.\n    return this.then(function error_main() {\n      throw new Error(msg);\n    });\n  };\n\n  /* ----- ALIASES ----- */\n\n  Worker.prototype.using = Worker.prototype.set;\n  Worker.prototype.saveAs = Worker.prototype.save;\n  Worker.prototype.export = Worker.prototype.output;\n  Worker.prototype.run = Worker.prototype.then;\n\n  // Get dimensions of a PDF page, as determined by jsPDF.\n  jsPDF.getPageSize = function(orientation, unit, format) {\n    // Decode options object\n    if (typeof orientation === \"object\") {\n      var options = orientation;\n      orientation = options.orientation;\n      unit = options.unit || unit;\n      format = options.format || format;\n    }\n\n    // Default options\n    unit = unit || \"mm\";\n    format = format || \"a4\";\n    orientation = (\"\" + (orientation || \"P\")).toLowerCase();\n    var format_as_string = (\"\" + format).toLowerCase();\n\n    // Size in pt of various paper formats\n    var pageFormats = {\n      a0: [2383.94, 3370.39],\n      a1: [1683.78, 2383.94],\n      a2: [1190.55, 1683.78],\n      a3: [841.89, 1190.55],\n      a4: [595.28, 841.89],\n      a5: [419.53, 595.28],\n      a6: [297.64, 419.53],\n      a7: [209.76, 297.64],\n      a8: [147.4, 209.76],\n      a9: [104.88, 147.4],\n      a10: [73.7, 104.88],\n      b0: [2834.65, 4008.19],\n      b1: [2004.09, 2834.65],\n      b2: [1417.32, 2004.09],\n      b3: [1000.63, 1417.32],\n      b4: [708.66, 1000.63],\n      b5: [498.9, 708.66],\n      b6: [354.33, 498.9],\n      b7: [249.45, 354.33],\n      b8: [175.75, 249.45],\n      b9: [124.72, 175.75],\n      b10: [87.87, 124.72],\n      c0: [2599.37, 3676.54],\n      c1: [1836.85, 2599.37],\n      c2: [1298.27, 1836.85],\n      c3: [918.43, 1298.27],\n      c4: [649.13, 918.43],\n      c5: [459.21, 649.13],\n      c6: [323.15, 459.21],\n      c7: [229.61, 323.15],\n      c8: [161.57, 229.61],\n      c9: [113.39, 161.57],\n      c10: [79.37, 113.39],\n      dl: [311.81, 623.62],\n      letter: [612, 792],\n      \"government-letter\": [576, 756],\n      legal: [612, 1008],\n      \"junior-legal\": [576, 360],\n      ledger: [1224, 792],\n      tabloid: [792, 1224],\n      \"credit-card\": [153, 243]\n    };\n\n    var k;\n    // Unit conversion\n    switch (unit) {\n      case \"pt\":\n        k = 1;\n        break;\n      case \"mm\":\n        k = 72 / 25.4;\n        break;\n      case \"cm\":\n        k = 72 / 2.54;\n        break;\n      case \"in\":\n        k = 72;\n        break;\n      case \"px\":\n        k = 72 / 96;\n        break;\n      case \"pc\":\n        k = 12;\n        break;\n      case \"em\":\n        k = 12;\n        break;\n      case \"ex\":\n        k = 6;\n        break;\n      default:\n        throw \"Invalid unit: \" + unit;\n    }\n    var pageHeight = 0;\n    var pageWidth = 0;\n\n    // Dimensions are stored as user units and converted to points on output\n    if (pageFormats.hasOwnProperty(format_as_string)) {\n      pageHeight = pageFormats[format_as_string][1] / k;\n      pageWidth = pageFormats[format_as_string][0] / k;\n    } else {\n      try {\n        pageHeight = format[1];\n        pageWidth = format[0];\n      } catch (err) {\n        throw new Error(\"Invalid format: \" + format);\n      }\n    }\n\n    var tmp;\n    // Handle page orientation\n    if (orientation === \"p\" || orientation === \"portrait\") {\n      orientation = \"p\";\n      if (pageWidth > pageHeight) {\n        tmp = pageWidth;\n        pageWidth = pageHeight;\n        pageHeight = tmp;\n      }\n    } else if (orientation === \"l\" || orientation === \"landscape\") {\n      orientation = \"l\";\n      if (pageHeight > pageWidth) {\n        tmp = pageWidth;\n        pageWidth = pageHeight;\n        pageHeight = tmp;\n      }\n    } else {\n      throw \"Invalid orientation: \" + orientation;\n    }\n\n    // Return information (k is the unit conversion ratio from pts)\n    var info = {\n      width: pageWidth,\n      height: pageHeight,\n      unit: unit,\n      k: k,\n      orientation: orientation\n    };\n    return info;\n  };\n\n  /**\n   * @typedef FontFace\n   *\n   * The font-face type implements an interface similar to that of the font-face CSS rule,\n   * and is used by jsPDF to match fonts when the font property of CanvasRenderingContext2D\n   * is updated.\n   *\n   * All properties expect values similar to those in the font-face CSS rule. A difference\n   * is the font-family, which do not need to be enclosed in double-quotes when containing\n   * spaces like in CSS.\n   *\n   * @property {string} family The name of the font-family.\n   * @property {string|undefined} style The style that this font-face defines, e.g. 'italic'.\n   * @property {string|number|undefined} weight The weight of the font, either as a string or a number (400, 500, 600, e.g.)\n   * @property {string|undefined} stretch The stretch of the font, e.g. condensed, normal, expanded.\n   * @property {Object[]} src A list of URLs from where fonts of various formats can be fetched.\n   * @property {string} [src] url A URL to a font of a specific format.\n   * @property {string} [src] format Format of the font referenced by the URL.\n   */\n\n  /**\n   * Generate a PDF from an HTML element or string using.\n   *\n   * @name html\n   * @function\n   * @param {HTMLElement|string} source The source HTMLElement or a string containing HTML.\n   * @param {Object} [options] Collection of settings\n   * @param {function} [options.callback] The mandatory callback-function gets as first parameter the current jsPDF instance\n   * @param {(number|number[])=} [options.margin] Page margins [top, right, bottom, left]. Default is 0.\n   * @param {(boolean|'slice'|'text')=} [options.autoPaging] The auto paging mode.\n   * <ul>\n   * <li>\n   *   <code>false</code>: Auto paging is disabled.\n   * </li>\n   * <li>\n   *   <code>true</code> or <code>'slice'</code>: Will cut shapes or text chunks across page breaks. Will possibly\n   *   slice text in half, making it difficult to read.\n   * </li>\n   * <li>\n   *   <code>'text'</code>: Trys not to cut text in half across page breaks. Works best for documents consisting\n   *   mostly of a single column of text.\n   * </li>\n   * </ul>\n   * Default is <code>true</code>.\n   * @param {string} [options.filename] name of the file\n   * @param {HTMLOptionImage} [options.image] image settings when converting HTML to image\n   * @param {Html2CanvasOptions} [options.html2canvas] html2canvas options\n   * @param {FontFace[]} [options.fontFaces] A list of font-faces to match when resolving fonts. Fonts will be added to the PDF based on the specified URL. If omitted, the font match algorithm falls back to old algorithm.\n   * @param {jsPDF} [options.jsPDF] jsPDF instance\n   * @param {number=} [options.x] x position on the PDF document in jsPDF units.\n   * @param {number=} [options.y] y position on the PDF document in jsPDF units.\n   * @param {number=} [options.width] The target width in the PDF document in jsPDF units. The rendered element will be\n   * scaled such that it fits into the specified width. Has no effect if either the <code>html2canvas.scale<code> is\n   * specified or the <code>windowWidth</code> option is NOT specified.\n   * @param {number=} [options.windowWidth] The window width in CSS pixels. In contrast to the\n   * <code>html2canvas.windowWidth</code> option, this option affects the actual container size while rendering and\n   * does NOT affect CSS media queries. This option only has an effect, if the <code>width<code> option is also specified.\n   *\n   * @example\n   * var doc = new jsPDF();\n   *\n   * doc.html(document.body, {\n   *    callback: function (doc) {\n   *      doc.save();\n   *    },\n   *    x: 10,\n   *    y: 10\n   * });\n   */\n  jsPDFAPI.html = function(src, options) {\n    \"use strict\";\n\n    options = options || {};\n    options.callback = options.callback || function() {};\n    options.html2canvas = options.html2canvas || {};\n    options.html2canvas.canvas = options.html2canvas.canvas || this.canvas;\n    options.jsPDF = options.jsPDF || this;\n    options.fontFaces = options.fontFaces\n      ? options.fontFaces.map(normalizeFontFace)\n      : null;\n\n    // Create a new worker with the given options.\n    var worker = new Worker(options);\n\n    if (!options.worker) {\n      // If worker is not set to true, perform the traditional 'simple' operation.\n      return worker.from(src).doCallback();\n    } else {\n      // Otherwise, return the worker for new Promise-based operation.\n      return worker;\n    }\n  };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC)  steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF Outline PlugIn\n *\n * Generates a PDF Outline\n * @name outline\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  var namesOid;\n  //var destsGoto = [];\n\n  jsPDFAPI.events.push([\n    \"postPutResources\",\n    function() {\n      var pdf = this;\n      var rx = /^(\\d+) 0 obj$/;\n\n      // Write action goto objects for each page\n      // this.outline.destsGoto = [];\n      // for (var i = 0; i < totalPages; i++) {\n      // var id = pdf.internal.newObject();\n      // this.outline.destsGoto.push(id);\n      // pdf.internal.write(\"<</D[\" + (i * 2 + 3) + \" 0 R /XYZ null\n      // null null]/S/GoTo>> endobj\");\n      // }\n      //\n      // for (var i = 0; i < dests.length; i++) {\n      // pdf.internal.write(\"(page_\" + (i + 1) + \")\" + dests[i] + \" 0\n      // R\");\n      // }\n      //\n      if (this.outline.root.children.length > 0) {\n        var lines = pdf.outline.render().split(/\\r\\n/);\n        for (var i = 0; i < lines.length; i++) {\n          var line = lines[i];\n          var m = rx.exec(line);\n          if (m != null) {\n            var oid = m[1];\n            pdf.internal.newObjectDeferredBegin(oid, false);\n          }\n          pdf.internal.write(line);\n        }\n      }\n\n      // This code will write named destination for each page reference\n      // (page_1, etc)\n      if (this.outline.createNamedDestinations) {\n        var totalPages = this.internal.pages.length;\n        // WARNING: this assumes jsPDF starts on page 3 and pageIDs\n        // follow 5, 7, 9, etc\n        // Write destination objects for each page\n        var dests = [];\n        for (var i = 0; i < totalPages; i++) {\n          var id = pdf.internal.newObject();\n          dests.push(id);\n          var info = pdf.internal.getPageInfo(i + 1);\n          pdf.internal.write(\n            \"<< /D[\" + info.objId + \" 0 R /XYZ null null null]>> endobj\"\n          );\n        }\n\n        // assign a name for each destination\n        var names2Oid = pdf.internal.newObject();\n        pdf.internal.write(\"<< /Names [ \");\n        for (var i = 0; i < dests.length; i++) {\n          pdf.internal.write(\"(page_\" + (i + 1) + \")\" + dests[i] + \" 0 R\");\n        }\n        pdf.internal.write(\" ] >>\", \"endobj\");\n\n        // var kids = pdf.internal.newObject();\n        // pdf.internal.write('<< /Kids [ ' + names2Oid + ' 0 R');\n        // pdf.internal.write(' ] >>', 'endobj');\n\n        namesOid = pdf.internal.newObject();\n        pdf.internal.write(\"<< /Dests \" + names2Oid + \" 0 R\");\n        pdf.internal.write(\">>\", \"endobj\");\n      }\n    }\n  ]);\n\n  jsPDFAPI.events.push([\n    \"putCatalog\",\n    function() {\n      var pdf = this;\n      if (pdf.outline.root.children.length > 0) {\n        pdf.internal.write(\n          \"/Outlines\",\n          this.outline.makeRef(this.outline.root)\n        );\n        if (this.outline.createNamedDestinations) {\n          pdf.internal.write(\"/Names \" + namesOid + \" 0 R\");\n        }\n        // Open with Bookmarks showing\n        // pdf.internal.write(\"/PageMode /UseOutlines\");\n      }\n    }\n  ]);\n\n  jsPDFAPI.events.push([\n    \"initialized\",\n    function() {\n      var pdf = this;\n\n      pdf.outline = {\n        createNamedDestinations: false,\n        root: {\n          children: []\n        }\n      };\n\n      /**\n       * Options: pageNumber\n       */\n      pdf.outline.add = function(parent, title, options) {\n        var item = {\n          title: title,\n          options: options,\n          children: []\n        };\n        if (parent == null) {\n          parent = this.root;\n        }\n        parent.children.push(item);\n        return item;\n      };\n\n      pdf.outline.render = function() {\n        this.ctx = {};\n        this.ctx.val = \"\";\n        this.ctx.pdf = pdf;\n\n        this.genIds_r(this.root);\n        this.renderRoot(this.root);\n        this.renderItems(this.root);\n\n        return this.ctx.val;\n      };\n\n      pdf.outline.genIds_r = function(node) {\n        node.id = pdf.internal.newObjectDeferred();\n        for (var i = 0; i < node.children.length; i++) {\n          this.genIds_r(node.children[i]);\n        }\n      };\n\n      pdf.outline.renderRoot = function(node) {\n        this.objStart(node);\n        this.line(\"/Type /Outlines\");\n        if (node.children.length > 0) {\n          this.line(\"/First \" + this.makeRef(node.children[0]));\n          this.line(\n            \"/Last \" + this.makeRef(node.children[node.children.length - 1])\n          );\n        }\n        this.line(\n          \"/Count \" +\n            this.count_r(\n              {\n                count: 0\n              },\n              node\n            )\n        );\n        this.objEnd();\n      };\n\n      pdf.outline.renderItems = function(node) {\n        var getVerticalCoordinateString = this.ctx.pdf.internal\n          .getVerticalCoordinateString;\n        for (var i = 0; i < node.children.length; i++) {\n          var item = node.children[i];\n          this.objStart(item);\n\n          this.line(\"/Title \" + this.makeString(item.title));\n\n          this.line(\"/Parent \" + this.makeRef(node));\n          if (i > 0) {\n            this.line(\"/Prev \" + this.makeRef(node.children[i - 1]));\n          }\n          if (i < node.children.length - 1) {\n            this.line(\"/Next \" + this.makeRef(node.children[i + 1]));\n          }\n          if (item.children.length > 0) {\n            this.line(\"/First \" + this.makeRef(item.children[0]));\n            this.line(\n              \"/Last \" + this.makeRef(item.children[item.children.length - 1])\n            );\n          }\n\n          var count = (this.count = this.count_r(\n            {\n              count: 0\n            },\n            item\n          ));\n          if (count > 0) {\n            this.line(\"/Count \" + count);\n          }\n\n          if (item.options) {\n            if (item.options.pageNumber) {\n              // Explicit Destination\n              //WARNING this assumes page ids are 3,5,7, etc.\n              var info = pdf.internal.getPageInfo(item.options.pageNumber);\n              this.line(\n                \"/Dest \" +\n                  \"[\" +\n                  info.objId +\n                  \" 0 R /XYZ 0 \" +\n                  getVerticalCoordinateString(0) +\n                  \" 0]\"\n              );\n              // this line does not work on all clients (pageNumber instead of page ref)\n              //this.line('/Dest ' + '[' + (item.options.pageNumber - 1) + ' /XYZ 0 ' + this.ctx.pdf.internal.pageSize.getHeight() + ' 0]');\n\n              // Named Destination\n              // this.line('/Dest (page_' + (item.options.pageNumber) + ')');\n\n              // Action Destination\n              // var id = pdf.internal.newObject();\n              // pdf.internal.write('<</D[' + (item.options.pageNumber - 1) + ' /XYZ null null null]/S/GoTo>> endobj');\n              // this.line('/A ' + id + ' 0 R' );\n            }\n          }\n          this.objEnd();\n        }\n        for (var z = 0; z < node.children.length; z++) {\n          this.renderItems(node.children[z]);\n        }\n      };\n\n      pdf.outline.line = function(text) {\n        this.ctx.val += text + \"\\r\\n\";\n      };\n\n      pdf.outline.makeRef = function(node) {\n        return node.id + \" 0 R\";\n      };\n\n      pdf.outline.makeString = function(val) {\n        return \"(\" + pdf.internal.pdfEscape(val) + \")\";\n      };\n\n      pdf.outline.objStart = function(node) {\n        this.ctx.val += \"\\r\\n\" + node.id + \" 0 obj\" + \"\\r\\n<<\\r\\n\";\n      };\n\n      pdf.outline.objEnd = function() {\n        this.ctx.val += \">> \\r\\n\" + \"endobj\" + \"\\r\\n\";\n      };\n\n      pdf.outline.count_r = function(ctx, node) {\n        for (var i = 0; i < node.children.length; i++) {\n          ctx.count++;\n          this.count_r(ctx, node.children[i]);\n        }\n        return ctx.count;\n      };\n    }\n  ]);\n\n  return this;\n})(jsPDF.API);\n","/**\n * @license\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF jpeg Support PlugIn\n *\n * @name jpeg_support\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  /**\n   * 0xc0 (SOF) Huffman  - Baseline DCT\n   * 0xc1 (SOF) Huffman  - Extended sequential DCT\n   * 0xc2 Progressive DCT (SOF2)\n   * 0xc3 Spatial (sequential) lossless (SOF3)\n   * 0xc4 Differential sequential DCT (SOF5)\n   * 0xc5 Differential progressive DCT (SOF6)\n   * 0xc6 Differential spatial (SOF7)\n   * 0xc7\n   */\n  var markers = [0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7];\n\n  //takes a string imgData containing the raw bytes of\n  //a jpeg image and returns [width, height]\n  //Algorithm from: http://www.64lines.com/jpeg-width-height\n  var getJpegInfo = function(imgData) {\n    var width, height, numcomponents;\n    var blockLength = imgData.charCodeAt(4) * 256 + imgData.charCodeAt(5);\n    var len = imgData.length;\n    var result = { width: 0, height: 0, numcomponents: 1 };\n    for (var i = 4; i < len; i += 2) {\n      i += blockLength;\n      if (markers.indexOf(imgData.charCodeAt(i + 1)) !== -1) {\n        height = imgData.charCodeAt(i + 5) * 256 + imgData.charCodeAt(i + 6);\n        width = imgData.charCodeAt(i + 7) * 256 + imgData.charCodeAt(i + 8);\n        numcomponents = imgData.charCodeAt(i + 9);\n        result = { width: width, height: height, numcomponents: numcomponents };\n        break;\n      } else {\n        blockLength =\n          imgData.charCodeAt(i + 2) * 256 + imgData.charCodeAt(i + 3);\n      }\n    }\n    return result;\n  };\n\n  /**\n   * @ignore\n   */\n  jsPDFAPI.processJPEG = function(\n    data,\n    index,\n    alias,\n    compression,\n    dataAsBinaryString,\n    colorSpace\n  ) {\n    var filter = this.decode.DCT_DECODE,\n      bpc = 8,\n      dims,\n      result = null;\n\n    if (\n      typeof data === \"string\" ||\n      this.__addimage__.isArrayBuffer(data) ||\n      this.__addimage__.isArrayBufferView(data)\n    ) {\n      // if we already have a stored binary string rep use that\n      data = dataAsBinaryString || data;\n      data = this.__addimage__.isArrayBuffer(data)\n        ? new Uint8Array(data)\n        : data;\n      data = this.__addimage__.isArrayBufferView(data)\n        ? this.__addimage__.arrayBufferToBinaryString(data)\n        : data;\n\n      dims = getJpegInfo(data);\n      switch (dims.numcomponents) {\n        case 1:\n          colorSpace = this.color_spaces.DEVICE_GRAY;\n          break;\n        case 4:\n          colorSpace = this.color_spaces.DEVICE_CMYK;\n          break;\n        case 3:\n          colorSpace = this.color_spaces.DEVICE_RGB;\n          break;\n      }\n\n      result = {\n        data: data,\n        width: dims.width,\n        height: dims.height,\n        colorSpace: colorSpace,\n        bitsPerComponent: bpc,\n        filter: filter,\n        index: index,\n        alias: alias\n      };\n    }\n    return result;\n  };\n})(jsPDF.API);\n","// Generated by CoffeeScript 1.4.0\n\n/**\n * @license\n * PNG.js\n * Copyright (c) 2011 Devon Govett\n * MIT LICENSE\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this\n * software and associated documentation files (the \"Software\"), to deal in the Software\n * without restriction, including without limitation the rights to use, copy, modify, merge,\n * publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons\n * to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING\n * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport { unzlibSync } from \"./fflate.js\";\nimport { globalObject } from \"./globalObject.js\";\n\nvar PNG = (function() {\n  var APNG_BLEND_OP_OVER,\n    APNG_BLEND_OP_SOURCE,\n    APNG_DISPOSE_OP_BACKGROUND,\n    APNG_DISPOSE_OP_NONE,\n    APNG_DISPOSE_OP_PREVIOUS,\n    makeImage,\n    scratchCanvas,\n    scratchCtx;\n\n  APNG_DISPOSE_OP_NONE = 0;\n\n  APNG_DISPOSE_OP_BACKGROUND = 1;\n\n  APNG_DISPOSE_OP_PREVIOUS = 2;\n\n  APNG_BLEND_OP_SOURCE = 0;\n\n  APNG_BLEND_OP_OVER = 1;\n\n  function PNG(data) {\n    var chunkSize,\n      colors,\n      palLen,\n      delayDen,\n      delayNum,\n      frame,\n      i,\n      index,\n      key,\n      section,\n      palShort,\n      text,\n      _i,\n      _j,\n      _ref;\n    this.data = data;\n    this.pos = 8;\n    this.palette = [];\n    this.imgData = [];\n    this.transparency = {};\n    this.animation = null;\n    this.text = {};\n    frame = null;\n    while (true) {\n      chunkSize = this.readUInt32();\n      section = function() {\n        var _i, _results;\n        _results = [];\n        for (i = _i = 0; _i < 4; i = ++_i) {\n          _results.push(String.fromCharCode(this.data[this.pos++]));\n        }\n        return _results;\n      }\n        .call(this)\n        .join(\"\");\n      switch (section) {\n        case \"IHDR\":\n          this.width = this.readUInt32();\n          this.height = this.readUInt32();\n          this.bits = this.data[this.pos++];\n          this.colorType = this.data[this.pos++];\n          this.compressionMethod = this.data[this.pos++];\n          this.filterMethod = this.data[this.pos++];\n          this.interlaceMethod = this.data[this.pos++];\n          break;\n        case \"acTL\":\n          this.animation = {\n            numFrames: this.readUInt32(),\n            numPlays: this.readUInt32() || Infinity,\n            frames: []\n          };\n          break;\n        case \"PLTE\":\n          this.palette = this.read(chunkSize);\n          break;\n        case \"fcTL\":\n          if (frame) {\n            this.animation.frames.push(frame);\n          }\n          this.pos += 4;\n          frame = {\n            width: this.readUInt32(),\n            height: this.readUInt32(),\n            xOffset: this.readUInt32(),\n            yOffset: this.readUInt32()\n          };\n          delayNum = this.readUInt16();\n          delayDen = this.readUInt16() || 100;\n          frame.delay = (1000 * delayNum) / delayDen;\n          frame.disposeOp = this.data[this.pos++];\n          frame.blendOp = this.data[this.pos++];\n          frame.data = [];\n          break;\n        case \"IDAT\":\n        case \"fdAT\":\n          if (section === \"fdAT\") {\n            this.pos += 4;\n            chunkSize -= 4;\n          }\n          data = (frame != null ? frame.data : void 0) || this.imgData;\n          for (\n            i = _i = 0;\n            0 <= chunkSize ? _i < chunkSize : _i > chunkSize;\n            i = 0 <= chunkSize ? ++_i : --_i\n          ) {\n            data.push(this.data[this.pos++]);\n          }\n          break;\n        case \"tRNS\":\n          this.transparency = {};\n          switch (this.colorType) {\n            case 3:\n              palLen = this.palette.length / 3;\n              this.transparency.indexed = this.read(chunkSize);\n              if (this.transparency.indexed.length > palLen)\n                throw new Error(\"More transparent colors than palette size\");\n              /*\n               * According to the PNG spec trns should be increased to the same size as palette if shorter\n               */\n              //palShort = 255 - this.transparency.indexed.length;\n              palShort = palLen - this.transparency.indexed.length;\n              if (palShort > 0) {\n                for (\n                  i = _j = 0;\n                  0 <= palShort ? _j < palShort : _j > palShort;\n                  i = 0 <= palShort ? ++_j : --_j\n                ) {\n                  this.transparency.indexed.push(255);\n                }\n              }\n              break;\n            case 0:\n              this.transparency.grayscale = this.read(chunkSize)[0];\n              break;\n            case 2:\n              this.transparency.rgb = this.read(chunkSize);\n          }\n          break;\n        case \"tEXt\":\n          text = this.read(chunkSize);\n          index = text.indexOf(0);\n          key = String.fromCharCode.apply(String, text.slice(0, index));\n          this.text[key] = String.fromCharCode.apply(\n            String,\n            text.slice(index + 1)\n          );\n          break;\n        case \"IEND\":\n          if (frame) {\n            this.animation.frames.push(frame);\n          }\n          this.colors = function() {\n            switch (this.colorType) {\n              case 0:\n              case 3:\n              case 4:\n                return 1;\n              case 2:\n              case 6:\n                return 3;\n            }\n          }.call(this);\n          this.hasAlphaChannel = (_ref = this.colorType) === 4 || _ref === 6;\n          colors = this.colors + (this.hasAlphaChannel ? 1 : 0);\n          this.pixelBitlength = this.bits * colors;\n          this.colorSpace = function() {\n            switch (this.colors) {\n              case 1:\n                return \"DeviceGray\";\n              case 3:\n                return \"DeviceRGB\";\n            }\n          }.call(this);\n          this.imgData = new Uint8Array(this.imgData);\n          return;\n        default:\n          this.pos += chunkSize;\n      }\n      this.pos += 4;\n      if (this.pos > this.data.length) {\n        throw new Error(\"Incomplete or corrupt PNG file\");\n      }\n    }\n  }\n\n  PNG.prototype.read = function(bytes) {\n    var i, _i, _results;\n    _results = [];\n    for (\n      i = _i = 0;\n      0 <= bytes ? _i < bytes : _i > bytes;\n      i = 0 <= bytes ? ++_i : --_i\n    ) {\n      _results.push(this.data[this.pos++]);\n    }\n    return _results;\n  };\n\n  PNG.prototype.readUInt32 = function() {\n    var b1, b2, b3, b4;\n    b1 = this.data[this.pos++] << 24;\n    b2 = this.data[this.pos++] << 16;\n    b3 = this.data[this.pos++] << 8;\n    b4 = this.data[this.pos++];\n    return b1 | b2 | b3 | b4;\n  };\n\n  PNG.prototype.readUInt16 = function() {\n    var b1, b2;\n    b1 = this.data[this.pos++] << 8;\n    b2 = this.data[this.pos++];\n    return b1 | b2;\n  };\n\n  PNG.prototype.decodePixels = function(data) {\n    var pixelBytes = this.pixelBitlength / 8;\n    var fullPixels = new Uint8Array(this.width * this.height * pixelBytes);\n    var pos = 0;\n    var _this = this;\n\n    if (data == null) {\n      data = this.imgData;\n    }\n    if (data.length === 0) {\n      return new Uint8Array(0);\n    }\n\n    data = unzlibSync(data);\n    function pass(x0, y0, dx, dy) {\n      var abyte,\n        c,\n        col,\n        i,\n        left,\n        length,\n        p,\n        pa,\n        paeth,\n        pb,\n        pc,\n        pixels,\n        row,\n        scanlineLength,\n        upper,\n        upperLeft,\n        _i,\n        _j,\n        _k,\n        _l,\n        _m;\n      var w = Math.ceil((_this.width - x0) / dx),\n        h = Math.ceil((_this.height - y0) / dy);\n      var isFull = _this.width == w && _this.height == h;\n      scanlineLength = pixelBytes * w;\n      pixels = isFull ? fullPixels : new Uint8Array(scanlineLength * h);\n      length = data.length;\n      row = 0;\n      c = 0;\n      while (row < h && pos < length) {\n        switch (data[pos++]) {\n          case 0:\n            for (i = _i = 0; _i < scanlineLength; i = _i += 1) {\n              pixels[c++] = data[pos++];\n            }\n            break;\n          case 1:\n            for (i = _j = 0; _j < scanlineLength; i = _j += 1) {\n              abyte = data[pos++];\n              left = i < pixelBytes ? 0 : pixels[c - pixelBytes];\n              pixels[c++] = (abyte + left) % 256;\n            }\n            break;\n          case 2:\n            for (i = _k = 0; _k < scanlineLength; i = _k += 1) {\n              abyte = data[pos++];\n              col = (i - (i % pixelBytes)) / pixelBytes;\n              upper =\n                row &&\n                pixels[\n                  (row - 1) * scanlineLength +\n                    col * pixelBytes +\n                    (i % pixelBytes)\n                ];\n              pixels[c++] = (upper + abyte) % 256;\n            }\n            break;\n          case 3:\n            for (i = _l = 0; _l < scanlineLength; i = _l += 1) {\n              abyte = data[pos++];\n              col = (i - (i % pixelBytes)) / pixelBytes;\n              left = i < pixelBytes ? 0 : pixels[c - pixelBytes];\n              upper =\n                row &&\n                pixels[\n                  (row - 1) * scanlineLength +\n                    col * pixelBytes +\n                    (i % pixelBytes)\n                ];\n              pixels[c++] = (abyte + Math.floor((left + upper) / 2)) % 256;\n            }\n            break;\n          case 4:\n            for (i = _m = 0; _m < scanlineLength; i = _m += 1) {\n              abyte = data[pos++];\n              col = (i - (i % pixelBytes)) / pixelBytes;\n              left = i < pixelBytes ? 0 : pixels[c - pixelBytes];\n              if (row === 0) {\n                upper = upperLeft = 0;\n              } else {\n                upper =\n                  pixels[\n                    (row - 1) * scanlineLength +\n                      col * pixelBytes +\n                      (i % pixelBytes)\n                  ];\n                upperLeft =\n                  col &&\n                  pixels[\n                    (row - 1) * scanlineLength +\n                      (col - 1) * pixelBytes +\n                      (i % pixelBytes)\n                  ];\n              }\n              p = left + upper - upperLeft;\n              pa = Math.abs(p - left);\n              pb = Math.abs(p - upper);\n              pc = Math.abs(p - upperLeft);\n              if (pa <= pb && pa <= pc) {\n                paeth = left;\n              } else if (pb <= pc) {\n                paeth = upper;\n              } else {\n                paeth = upperLeft;\n              }\n              pixels[c++] = (abyte + paeth) % 256;\n            }\n            break;\n          default:\n            throw new Error(\"Invalid filter algorithm: \" + data[pos - 1]);\n        }\n        if (!isFull) {\n          var fullPos = ((y0 + row * dy) * _this.width + x0) * pixelBytes;\n          var partPos = row * scanlineLength;\n          for (i = 0; i < w; i += 1) {\n            for (var j = 0; j < pixelBytes; j += 1)\n              fullPixels[fullPos++] = pixels[partPos++];\n            fullPos += (dx - 1) * pixelBytes;\n          }\n        }\n        row++;\n      }\n    }\n    if (_this.interlaceMethod == 1) {\n      /*\n          1 6 4 6 2 6 4 6\n          7 7 7 7 7 7 7 7\n          5 6 5 6 5 6 5 6\n          7 7 7 7 7 7 7 7\n          3 6 4 6 3 6 4 6\n          7 7 7 7 7 7 7 7\n          5 6 5 6 5 6 5 6\n          7 7 7 7 7 7 7 7\n        */\n      pass(0, 0, 8, 8); // 1\n      /* NOTE these seem to follow the pattern:\n       * pass(x, 0, 2*x, 2*x);\n       * pass(0, x,   x, 2*x);\n       * with x being 4, 2, 1.\n       */\n      pass(4, 0, 8, 8); // 2\n      pass(0, 4, 4, 8); // 3\n\n      pass(2, 0, 4, 4); // 4\n      pass(0, 2, 2, 4); // 5\n\n      pass(1, 0, 2, 2); // 6\n      pass(0, 1, 1, 2); // 7\n    } else {\n      pass(0, 0, 1, 1);\n    }\n    return fullPixels;\n  };\n\n  PNG.prototype.decodePalette = function() {\n    var c, i, length, palette, pos, ret, transparency, _i, _ref, _ref1;\n    palette = this.palette;\n    transparency = this.transparency.indexed || [];\n    ret = new Uint8Array((transparency.length || 0) + palette.length);\n    pos = 0;\n    length = palette.length;\n    c = 0;\n    for (i = _i = 0, _ref = length; _i < _ref; i = _i += 3) {\n      ret[pos++] = palette[i];\n      ret[pos++] = palette[i + 1];\n      ret[pos++] = palette[i + 2];\n      ret[pos++] = (_ref1 = transparency[c++]) != null ? _ref1 : 255;\n    }\n    return ret;\n  };\n\n  PNG.prototype.copyToImageData = function(imageData, pixels) {\n    var alpha, colors, data, i, input, j, k, length, palette, v, _ref;\n    colors = this.colors;\n    palette = null;\n    alpha = this.hasAlphaChannel;\n    if (this.palette.length) {\n      palette =\n        (_ref = this._decodedPalette) != null\n          ? _ref\n          : (this._decodedPalette = this.decodePalette());\n      colors = 4;\n      alpha = true;\n    }\n    data = imageData.data || imageData;\n    length = data.length;\n    input = palette || pixels;\n    i = j = 0;\n    if (colors === 1) {\n      while (i < length) {\n        k = palette ? pixels[i / 4] * 4 : j;\n        v = input[k++];\n        data[i++] = v;\n        data[i++] = v;\n        data[i++] = v;\n        data[i++] = alpha ? input[k++] : 255;\n        j = k;\n      }\n    } else {\n      while (i < length) {\n        k = palette ? pixels[i / 4] * 4 : j;\n        data[i++] = input[k++];\n        data[i++] = input[k++];\n        data[i++] = input[k++];\n        data[i++] = alpha ? input[k++] : 255;\n        j = k;\n      }\n    }\n  };\n\n  PNG.prototype.decode = function() {\n    var ret;\n    ret = new Uint8Array(this.width * this.height * 4);\n    this.copyToImageData(ret, this.decodePixels());\n    return ret;\n  };\n\n  var hasBrowserCanvas = function() {\n    if (Object.prototype.toString.call(globalObject) === \"[object Window]\") {\n      try {\n        scratchCanvas = globalObject.document.createElement(\"canvas\");\n        scratchCtx = scratchCanvas.getContext(\"2d\");\n      } catch (e) {\n        return false;\n      }\n      return true;\n    }\n    return false;\n  };\n\n  hasBrowserCanvas();\n\n  makeImage = function(imageData) {\n    if (hasBrowserCanvas() === true) {\n      var img;\n      scratchCtx.width = imageData.width;\n      scratchCtx.height = imageData.height;\n      scratchCtx.clearRect(0, 0, imageData.width, imageData.height);\n      scratchCtx.putImageData(imageData, 0, 0);\n      img = new Image();\n      img.src = scratchCanvas.toDataURL();\n      return img;\n    }\n    throw new Error(\"This method requires a Browser with Canvas-capability.\");\n  };\n\n  PNG.prototype.decodeFrames = function(ctx) {\n    var frame, i, imageData, pixels, _i, _len, _ref, _results;\n    if (!this.animation) {\n      return;\n    }\n    _ref = this.animation.frames;\n    _results = [];\n    for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {\n      frame = _ref[i];\n      imageData = ctx.createImageData(frame.width, frame.height);\n      pixels = this.decodePixels(new Uint8Array(frame.data));\n      this.copyToImageData(imageData, pixels);\n      frame.imageData = imageData;\n      _results.push((frame.image = makeImage(imageData)));\n    }\n    return _results;\n  };\n\n  PNG.prototype.renderFrame = function(ctx, number) {\n    var frame, frames, prev;\n    frames = this.animation.frames;\n    frame = frames[number];\n    prev = frames[number - 1];\n    if (number === 0) {\n      ctx.clearRect(0, 0, this.width, this.height);\n    }\n    if (\n      (prev != null ? prev.disposeOp : void 0) === APNG_DISPOSE_OP_BACKGROUND\n    ) {\n      ctx.clearRect(prev.xOffset, prev.yOffset, prev.width, prev.height);\n    } else if (\n      (prev != null ? prev.disposeOp : void 0) === APNG_DISPOSE_OP_PREVIOUS\n    ) {\n      ctx.putImageData(prev.imageData, prev.xOffset, prev.yOffset);\n    }\n    if (frame.blendOp === APNG_BLEND_OP_SOURCE) {\n      ctx.clearRect(frame.xOffset, frame.yOffset, frame.width, frame.height);\n    }\n    return ctx.drawImage(frame.image, frame.xOffset, frame.yOffset);\n  };\n\n  PNG.prototype.animate = function(ctx) {\n    var doFrame,\n      frameNumber,\n      frames,\n      numFrames,\n      numPlays,\n      _ref,\n      _this = this;\n    frameNumber = 0;\n    (_ref = this.animation),\n      (numFrames = _ref.numFrames),\n      (frames = _ref.frames),\n      (numPlays = _ref.numPlays);\n    return (doFrame = function() {\n      var f, frame;\n      f = frameNumber++ % numFrames;\n      frame = frames[f];\n      _this.renderFrame(ctx, f);\n      if (numFrames > 1 && frameNumber / numFrames < numPlays) {\n        return (_this.animation._timeout = setTimeout(doFrame, frame.delay));\n      }\n    })();\n  };\n\n  PNG.prototype.stopAnimation = function() {\n    var _ref;\n    return clearTimeout(\n      (_ref = this.animation) != null ? _ref._timeout : void 0\n    );\n  };\n\n  PNG.prototype.render = function(canvas) {\n    var ctx, data;\n    if (canvas._png) {\n      canvas._png.stopAnimation();\n    }\n    canvas._png = this;\n    canvas.width = this.width;\n    canvas.height = this.height;\n    ctx = canvas.getContext(\"2d\");\n    if (this.animation) {\n      this.decodeFrames(ctx);\n      return this.animate(ctx);\n    } else {\n      data = ctx.createImageData(this.width, this.height);\n      this.copyToImageData(data, this.decodePixels());\n      return ctx.putImageData(data, 0, 0);\n    }\n  };\n\n  return PNG;\n})();\n\nexport { PNG };\n","/** @license\n * MIT license.\n * Copyright (c) 2012 Willow Systems Corporation, https://github.com/willowsystems\n *               2014 Diego Casorran, https://github.com/diegocr\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF split_text_to_size plugin\n *\n * @name split_text_to_size\n * @module\n */\n(function(API) {\n  \"use strict\";\n  /**\n   * Returns an array of length matching length of the 'word' string, with each\n   * cell occupied by the width of the char in that position.\n   *\n   * @name getCharWidthsArray\n   * @function\n   * @param {string} text\n   * @param {Object} options\n   * @returns {Array}\n   */\n  var getCharWidthsArray = (API.getCharWidthsArray = function(text, options) {\n    options = options || {};\n\n    var activeFont = options.font || this.internal.getFont();\n    var fontSize = options.fontSize || this.internal.getFontSize();\n    var charSpace = options.charSpace || this.internal.getCharSpace();\n\n    var widths = options.widths\n      ? options.widths\n      : activeFont.metadata.Unicode.widths;\n    var widthsFractionOf = widths.fof ? widths.fof : 1;\n    var kerning = options.kerning\n      ? options.kerning\n      : activeFont.metadata.Unicode.kerning;\n    var kerningFractionOf = kerning.fof ? kerning.fof : 1;\n    var doKerning = options.doKerning === false ? false : true;\n    var kerningValue = 0;\n\n    var i;\n    var length = text.length;\n    var char_code;\n    var prior_char_code = 0; //for kerning\n    var default_char_width = widths[0] || widthsFractionOf;\n    var output = [];\n\n    for (i = 0; i < length; i++) {\n      char_code = text.charCodeAt(i);\n\n      if (typeof activeFont.metadata.widthOfString === \"function\") {\n        output.push(\n          (activeFont.metadata.widthOfGlyph(\n            activeFont.metadata.characterToGlyph(char_code)\n          ) +\n            charSpace * (1000 / fontSize) || 0) / 1000\n        );\n      } else {\n        if (\n          doKerning &&\n          typeof kerning[char_code] === \"object\" &&\n          !isNaN(parseInt(kerning[char_code][prior_char_code], 10))\n        ) {\n          kerningValue =\n            kerning[char_code][prior_char_code] / kerningFractionOf;\n        } else {\n          kerningValue = 0;\n        }\n        output.push(\n          (widths[char_code] || default_char_width) / widthsFractionOf +\n            kerningValue\n        );\n      }\n      prior_char_code = char_code;\n    }\n\n    return output;\n  });\n\n  /**\n   * Returns a widths of string in a given font, if the font size is set as 1 point.\n   *\n   * In other words, this is \"proportional\" value. For 1 unit of font size, the length\n   * of the string will be that much.\n   *\n   * Multiply by font size to get actual width in *points*\n   * Then divide by 72 to get inches or divide by (72/25.6) to get 'mm' etc.\n   *\n   * @name getStringUnitWidth\n   * @public\n   * @function\n   * @param {string} text\n   * @param {string} options\n   * @returns {number} result\n   */\n  var getStringUnitWidth = (API.getStringUnitWidth = function(text, options) {\n    options = options || {};\n\n    var fontSize = options.fontSize || this.internal.getFontSize();\n    var font = options.font || this.internal.getFont();\n    var charSpace = options.charSpace || this.internal.getCharSpace();\n    var result = 0;\n\n    if (API.processArabic) {\n      text = API.processArabic(text);\n    }\n\n    if (typeof font.metadata.widthOfString === \"function\") {\n      result =\n        font.metadata.widthOfString(text, fontSize, charSpace) / fontSize;\n    } else {\n      result = getCharWidthsArray\n        .apply(this, arguments)\n        .reduce(function(pv, cv) {\n          return pv + cv;\n        }, 0);\n    }\n    return result;\n  });\n\n  /**\n  returns array of lines\n  */\n  var splitLongWord = function(word, widths_array, firstLineMaxLen, maxLen) {\n    var answer = [];\n\n    // 1st, chop off the piece that can fit on the hanging line.\n    var i = 0,\n      l = word.length,\n      workingLen = 0;\n    while (i !== l && workingLen + widths_array[i] < firstLineMaxLen) {\n      workingLen += widths_array[i];\n      i++;\n    }\n    // this is first line.\n    answer.push(word.slice(0, i));\n\n    // 2nd. Split the rest into maxLen pieces.\n    var startOfLine = i;\n    workingLen = 0;\n    while (i !== l) {\n      if (workingLen + widths_array[i] > maxLen) {\n        answer.push(word.slice(startOfLine, i));\n        workingLen = 0;\n        startOfLine = i;\n      }\n      workingLen += widths_array[i];\n      i++;\n    }\n    if (startOfLine !== i) {\n      answer.push(word.slice(startOfLine, i));\n    }\n\n    return answer;\n  };\n\n  // Note, all sizing inputs for this function must be in \"font measurement units\"\n  // By default, for PDF, it's \"point\".\n  var splitParagraphIntoLines = function(text, maxlen, options) {\n    // at this time works only on Western scripts, ones with space char\n    // separating the words. Feel free to expand.\n\n    if (!options) {\n      options = {};\n    }\n\n    var line = [],\n      lines = [line],\n      line_length = options.textIndent || 0,\n      separator_length = 0,\n      current_word_length = 0,\n      word,\n      widths_array,\n      words = text.split(\" \"),\n      spaceCharWidth = getCharWidthsArray.apply(this, [\" \", options])[0],\n      i,\n      l,\n      tmp,\n      lineIndent;\n\n    if (options.lineIndent === -1) {\n      lineIndent = words[0].length + 2;\n    } else {\n      lineIndent = options.lineIndent || 0;\n    }\n    if (lineIndent) {\n      var pad = Array(lineIndent).join(\" \"),\n        wrds = [];\n      words.map(function(wrd) {\n        wrd = wrd.split(/\\s*\\n/);\n        if (wrd.length > 1) {\n          wrds = wrds.concat(\n            wrd.map(function(wrd, idx) {\n              return (idx && wrd.length ? \"\\n\" : \"\") + wrd;\n            })\n          );\n        } else {\n          wrds.push(wrd[0]);\n        }\n      });\n      words = wrds;\n      lineIndent = getStringUnitWidth.apply(this, [pad, options]);\n    }\n\n    for (i = 0, l = words.length; i < l; i++) {\n      var force = 0;\n\n      word = words[i];\n      if (lineIndent && word[0] == \"\\n\") {\n        word = word.substr(1);\n        force = 1;\n      }\n      widths_array = getCharWidthsArray.apply(this, [word, options]);\n      current_word_length = widths_array.reduce(function(pv, cv) {\n        return pv + cv;\n      }, 0);\n\n      if (\n        line_length + separator_length + current_word_length > maxlen ||\n        force\n      ) {\n        if (current_word_length > maxlen) {\n          // this happens when you have space-less long URLs for example.\n          // we just chop these to size. We do NOT insert hiphens\n          tmp = splitLongWord.apply(this, [\n            word,\n            widths_array,\n            maxlen - (line_length + separator_length),\n            maxlen\n          ]);\n          // first line we add to existing line object\n          line.push(tmp.shift()); // it's ok to have extra space indicator there\n          // last line we make into new line object\n          line = [tmp.pop()];\n          // lines in the middle we apped to lines object as whole lines\n          while (tmp.length) {\n            lines.push([tmp.shift()]); // single fragment occupies whole line\n          }\n          current_word_length = widths_array\n            .slice(word.length - (line[0] ? line[0].length : 0))\n            .reduce(function(pv, cv) {\n              return pv + cv;\n            }, 0);\n        } else {\n          // just put it on a new line\n          line = [word];\n        }\n\n        // now we attach new line to lines\n        lines.push(line);\n        line_length = current_word_length + lineIndent;\n        separator_length = spaceCharWidth;\n      } else {\n        line.push(word);\n\n        line_length += separator_length + current_word_length;\n        separator_length = spaceCharWidth;\n      }\n    }\n\n    var postProcess;\n    if (lineIndent) {\n      postProcess = function(ln, idx) {\n        return (idx ? pad : \"\") + ln.join(\" \");\n      };\n    } else {\n      postProcess = function(ln) {\n        return ln.join(\" \");\n      };\n    }\n\n    return lines.map(postProcess);\n  };\n\n  /**\n   * Splits a given string into an array of strings. Uses 'size' value\n   * (in measurement units declared as default for the jsPDF instance)\n   * and the font's \"widths\" and \"Kerning\" tables, where available, to\n   * determine display length of a given string for a given font.\n   *\n   * We use character's 100% of unit size (height) as width when Width\n   * table or other default width is not available.\n   *\n   * @name splitTextToSize\n   * @public\n   * @function\n   * @param {string} text Unencoded, regular JavaScript (Unicode, UTF-16 / UCS-2) string.\n   * @param {number} size Nominal number, measured in units default to this instance of jsPDF.\n   * @param {Object} options Optional flags needed for chopper to do the right thing.\n   * @returns {Array} array Array with strings chopped to size.\n   */\n  API.splitTextToSize = function(text, maxlen, options) {\n    \"use strict\";\n\n    options = options || {};\n\n    var fsize = options.fontSize || this.internal.getFontSize(),\n      newOptions = function(options) {\n        var widths = {\n            0: 1\n          },\n          kerning = {};\n\n        if (!options.widths || !options.kerning) {\n          var f = this.internal.getFont(options.fontName, options.fontStyle),\n            encoding = \"Unicode\";\n          // NOT UTF8, NOT UTF16BE/LE, NOT UCS2BE/LE\n          // Actual JavaScript-native String's 16bit char codes used.\n          // no multi-byte logic here\n\n          if (f.metadata[encoding]) {\n            return {\n              widths: f.metadata[encoding].widths || widths,\n              kerning: f.metadata[encoding].kerning || kerning\n            };\n          } else {\n            return {\n              font: f.metadata,\n              fontSize: this.internal.getFontSize(),\n              charSpace: this.internal.getCharSpace()\n            };\n          }\n        } else {\n          return {\n            widths: options.widths,\n            kerning: options.kerning\n          };\n        }\n      }.call(this, options);\n\n    // first we split on end-of-line chars\n    var paragraphs;\n    if (Array.isArray(text)) {\n      paragraphs = text;\n    } else {\n      paragraphs = String(text).split(/\\r?\\n/);\n    }\n\n    // now we convert size (max length of line) into \"font size units\"\n    // at present time, the \"font size unit\" is always 'point'\n    // 'proportional' means, \"in proportion to font size\"\n    var fontUnit_maxLen = (1.0 * this.internal.scaleFactor * maxlen) / fsize;\n    // at this time, fsize is always in \"points\" regardless of the default measurement unit of the doc.\n    // this may change in the future?\n    // until then, proportional_maxlen is likely to be in 'points'\n\n    // If first line is to be indented (shorter or longer) than maxLen\n    // we indicate that by using CSS-style \"text-indent\" option.\n    // here it's in font units too (which is likely 'points')\n    // it can be negative (which makes the first line longer than maxLen)\n    newOptions.textIndent = options.textIndent\n      ? (options.textIndent * 1.0 * this.internal.scaleFactor) / fsize\n      : 0;\n    newOptions.lineIndent = options.lineIndent;\n\n    var i,\n      l,\n      output = [];\n    for (i = 0, l = paragraphs.length; i < l; i++) {\n      output = output.concat(\n        splitParagraphIntoLines.apply(this, [\n          paragraphs[i],\n          fontUnit_maxLen,\n          newOptions\n        ])\n      );\n    }\n\n    return output;\n  };\n})(jsPDF.API);\n","/**\n * @license\n * (c) Dean McNamee <dean@gmail.com>, 2013.\n *\n * https://github.com/deanm/omggif\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n *\n * omggif is a JavaScript implementation of a GIF 89a encoder and decoder,\n * including animation and compression.  It does not rely on any specific\n * underlying system, so should run in the browser, Node, or Plask.\n */\n\n\"use strict\";\n\nimport { console } from \"./console.js\";\n\nfunction GifWriter(buf, width, height, gopts) {\n  var p = 0;\n\n  var gopts = gopts === undefined ? {} : gopts;\n  var loop_count = gopts.loop === undefined ? null : gopts.loop;\n  var global_palette = gopts.palette === undefined ? null : gopts.palette;\n\n  if (width <= 0 || height <= 0 || width > 65535 || height > 65535)\n    throw new Error(\"Width/Height invalid.\");\n\n  function check_palette_and_num_colors(palette) {\n    var num_colors = palette.length;\n    if (num_colors < 2 || num_colors > 256 || num_colors & (num_colors - 1)) {\n      throw new Error(\n        \"Invalid code/color length, must be power of 2 and 2 .. 256.\"\n      );\n    }\n    return num_colors;\n  }\n\n  // - Header.\n  buf[p++] = 0x47;\n  buf[p++] = 0x49;\n  buf[p++] = 0x46; // GIF\n  buf[p++] = 0x38;\n  buf[p++] = 0x39;\n  buf[p++] = 0x61; // 89a\n\n  // Handling of Global Color Table (palette) and background index.\n  var gp_num_colors_pow2 = 0;\n  var background = 0;\n  if (global_palette !== null) {\n    var gp_num_colors = check_palette_and_num_colors(global_palette);\n    while ((gp_num_colors >>= 1)) ++gp_num_colors_pow2;\n    gp_num_colors = 1 << gp_num_colors_pow2;\n    --gp_num_colors_pow2;\n    if (gopts.background !== undefined) {\n      background = gopts.background;\n      if (background >= gp_num_colors)\n        throw new Error(\"Background index out of range.\");\n      // The GIF spec states that a background index of 0 should be ignored, so\n      // this is probably a mistake and you really want to set it to another\n      // slot in the palette.  But actually in the end most browsers, etc end\n      // up ignoring this almost completely (including for dispose background).\n      if (background === 0)\n        throw new Error(\"Background index explicitly passed as 0.\");\n    }\n  }\n\n  // - Logical Screen Descriptor.\n  // NOTE(deanm): w/h apparently ignored by implementations, but set anyway.\n  buf[p++] = width & 0xff;\n  buf[p++] = (width >> 8) & 0xff;\n  buf[p++] = height & 0xff;\n  buf[p++] = (height >> 8) & 0xff;\n  // NOTE: Indicates 0-bpp original color resolution (unused?).\n  buf[p++] = (global_palette !== null ? 0x80 : 0) | gp_num_colors_pow2; // Global Color Table Flag. // NOTE: No sort flag (unused?).\n  buf[p++] = background; // Background Color Index.\n  buf[p++] = 0; // Pixel aspect ratio (unused?).\n\n  // - Global Color Table\n  if (global_palette !== null) {\n    for (var i = 0, il = global_palette.length; i < il; ++i) {\n      var rgb = global_palette[i];\n      buf[p++] = (rgb >> 16) & 0xff;\n      buf[p++] = (rgb >> 8) & 0xff;\n      buf[p++] = rgb & 0xff;\n    }\n  }\n\n  if (loop_count !== null) {\n    // Netscape block for looping.\n    if (loop_count < 0 || loop_count > 65535)\n      throw new Error(\"Loop count invalid.\");\n    // Extension code, label, and length.\n    buf[p++] = 0x21;\n    buf[p++] = 0xff;\n    buf[p++] = 0x0b;\n    // NETSCAPE2.0\n    buf[p++] = 0x4e;\n    buf[p++] = 0x45;\n    buf[p++] = 0x54;\n    buf[p++] = 0x53;\n    buf[p++] = 0x43;\n    buf[p++] = 0x41;\n    buf[p++] = 0x50;\n    buf[p++] = 0x45;\n    buf[p++] = 0x32;\n    buf[p++] = 0x2e;\n    buf[p++] = 0x30;\n    // Sub-block\n    buf[p++] = 0x03;\n    buf[p++] = 0x01;\n    buf[p++] = loop_count & 0xff;\n    buf[p++] = (loop_count >> 8) & 0xff;\n    buf[p++] = 0x00; // Terminator.\n  }\n\n  var ended = false;\n\n  this.addFrame = function(x, y, w, h, indexed_pixels, opts) {\n    if (ended === true) {\n      --p;\n      ended = false;\n    } // Un-end.\n\n    opts = opts === undefined ? {} : opts;\n\n    // TODO(deanm): Bounds check x, y.  Do they need to be within the virtual\n    // canvas width/height, I imagine?\n    if (x < 0 || y < 0 || x > 65535 || y > 65535)\n      throw new Error(\"x/y invalid.\");\n\n    if (w <= 0 || h <= 0 || w > 65535 || h > 65535)\n      throw new Error(\"Width/Height invalid.\");\n\n    if (indexed_pixels.length < w * h)\n      throw new Error(\"Not enough pixels for the frame size.\");\n\n    var using_local_palette = true;\n    var palette = opts.palette;\n    if (palette === undefined || palette === null) {\n      using_local_palette = false;\n      palette = global_palette;\n    }\n\n    if (palette === undefined || palette === null)\n      throw new Error(\"Must supply either a local or global palette.\");\n\n    var num_colors = check_palette_and_num_colors(palette);\n\n    // Compute the min_code_size (power of 2), destroying num_colors.\n    var min_code_size = 0;\n    while ((num_colors >>= 1)) ++min_code_size;\n    num_colors = 1 << min_code_size; // Now we can easily get it back.\n\n    var delay = opts.delay === undefined ? 0 : opts.delay;\n\n    // From the spec:\n    //     0 -   No disposal specified. The decoder is\n    //           not required to take any action.\n    //     1 -   Do not dispose. The graphic is to be left\n    //           in place.\n    //     2 -   Restore to background color. The area used by the\n    //           graphic must be restored to the background color.\n    //     3 -   Restore to previous. The decoder is required to\n    //           restore the area overwritten by the graphic with\n    //           what was there prior to rendering the graphic.\n    //  4-7 -    To be defined.\n    // NOTE(deanm): Dispose background doesn't really work, apparently most\n    // browsers ignore the background palette index and clear to transparency.\n    var disposal = opts.disposal === undefined ? 0 : opts.disposal;\n    if (disposal < 0 || disposal > 3)\n      // 4-7 is reserved.\n      throw new Error(\"Disposal out of range.\");\n\n    var use_transparency = false;\n    var transparent_index = 0;\n    if (opts.transparent !== undefined && opts.transparent !== null) {\n      use_transparency = true;\n      transparent_index = opts.transparent;\n      if (transparent_index < 0 || transparent_index >= num_colors)\n        throw new Error(\"Transparent color index.\");\n    }\n\n    if (disposal !== 0 || use_transparency || delay !== 0) {\n      // - Graphics Control Extension\n      buf[p++] = 0x21;\n      buf[p++] = 0xf9; // Extension / Label.\n      buf[p++] = 4; // Byte size.\n\n      buf[p++] = (disposal << 2) | (use_transparency === true ? 1 : 0);\n      buf[p++] = delay & 0xff;\n      buf[p++] = (delay >> 8) & 0xff;\n      buf[p++] = transparent_index; // Transparent color index.\n      buf[p++] = 0; // Block Terminator.\n    }\n\n    // - Image Descriptor\n    buf[p++] = 0x2c; // Image Seperator.\n    buf[p++] = x & 0xff;\n    buf[p++] = (x >> 8) & 0xff; // Left.\n    buf[p++] = y & 0xff;\n    buf[p++] = (y >> 8) & 0xff; // Top.\n    buf[p++] = w & 0xff;\n    buf[p++] = (w >> 8) & 0xff;\n    buf[p++] = h & 0xff;\n    buf[p++] = (h >> 8) & 0xff;\n    // NOTE: No sort flag (unused?).\n    // TODO(deanm): Support interlace.\n    buf[p++] = using_local_palette === true ? 0x80 | (min_code_size - 1) : 0;\n\n    // - Local Color Table\n    if (using_local_palette === true) {\n      for (var i = 0, il = palette.length; i < il; ++i) {\n        var rgb = palette[i];\n        buf[p++] = (rgb >> 16) & 0xff;\n        buf[p++] = (rgb >> 8) & 0xff;\n        buf[p++] = rgb & 0xff;\n      }\n    }\n\n    p = GifWriterOutputLZWCodeStream(\n      buf,\n      p,\n      min_code_size < 2 ? 2 : min_code_size,\n      indexed_pixels\n    );\n\n    return p;\n  };\n\n  this.end = function() {\n    if (ended === false) {\n      buf[p++] = 0x3b; // Trailer.\n      ended = true;\n    }\n    return p;\n  };\n\n  this.getOutputBuffer = function() {\n    return buf;\n  };\n  this.setOutputBuffer = function(v) {\n    buf = v;\n  };\n  this.getOutputBufferPosition = function() {\n    return p;\n  };\n  this.setOutputBufferPosition = function(v) {\n    p = v;\n  };\n}\n\n// Main compression routine, palette indexes -> LZW code stream.\n// |index_stream| must have at least one entry.\nfunction GifWriterOutputLZWCodeStream(buf, p, min_code_size, index_stream) {\n  buf[p++] = min_code_size;\n  var cur_subblock = p++; // Pointing at the length field.\n\n  var clear_code = 1 << min_code_size;\n  var code_mask = clear_code - 1;\n  var eoi_code = clear_code + 1;\n  var next_code = eoi_code + 1;\n\n  var cur_code_size = min_code_size + 1; // Number of bits per code.\n  var cur_shift = 0;\n  // We have at most 12-bit codes, so we should have to hold a max of 19\n  // bits here (and then we would write out).\n  var cur = 0;\n\n  function emit_bytes_to_buffer(bit_block_size) {\n    while (cur_shift >= bit_block_size) {\n      buf[p++] = cur & 0xff;\n      cur >>= 8;\n      cur_shift -= 8;\n      if (p === cur_subblock + 256) {\n        // Finished a subblock.\n        buf[cur_subblock] = 255;\n        cur_subblock = p++;\n      }\n    }\n  }\n\n  function emit_code(c) {\n    cur |= c << cur_shift;\n    cur_shift += cur_code_size;\n    emit_bytes_to_buffer(8);\n  }\n\n  // I am not an expert on the topic, and I don't want to write a thesis.\n  // However, it is good to outline here the basic algorithm and the few data\n  // structures and optimizations here that make this implementation fast.\n  // The basic idea behind LZW is to build a table of previously seen runs\n  // addressed by a short id (herein called output code).  All data is\n  // referenced by a code, which represents one or more values from the\n  // original input stream.  All input bytes can be referenced as the same\n  // value as an output code.  So if you didn't want any compression, you\n  // could more or less just output the original bytes as codes (there are\n  // some details to this, but it is the idea).  In order to achieve\n  // compression, values greater then the input range (codes can be up to\n  // 12-bit while input only 8-bit) represent a sequence of previously seen\n  // inputs.  The decompressor is able to build the same mapping while\n  // decoding, so there is always a shared common knowledge between the\n  // encoding and decoder, which is also important for \"timing\" aspects like\n  // how to handle variable bit width code encoding.\n  //\n  // One obvious but very important consequence of the table system is there\n  // is always a unique id (at most 12-bits) to map the runs.  'A' might be\n  // 4, then 'AA' might be 10, 'AAA' 11, 'AAAA' 12, etc.  This relationship\n  // can be used for an effecient lookup strategy for the code mapping.  We\n  // need to know if a run has been seen before, and be able to map that run\n  // to the output code.  Since we start with known unique ids (input bytes),\n  // and then from those build more unique ids (table entries), we can\n  // continue this chain (almost like a linked list) to always have small\n  // integer values that represent the current byte chains in the encoder.\n  // This means instead of tracking the input bytes (AAAABCD) to know our\n  // current state, we can track the table entry for AAAABC (it is guaranteed\n  // to exist by the nature of the algorithm) and the next character D.\n  // Therefor the tuple of (table_entry, byte) is guaranteed to also be\n  // unique.  This allows us to create a simple lookup key for mapping input\n  // sequences to codes (table indices) without having to store or search\n  // any of the code sequences.  So if 'AAAA' has a table entry of 12, the\n  // tuple of ('AAAA', K) for any input byte K will be unique, and can be our\n  // key.  This leads to a integer value at most 20-bits, which can always\n  // fit in an SMI value and be used as a fast sparse array / object key.\n\n  // Output code for the current contents of the index buffer.\n  var ib_code = index_stream[0] & code_mask; // Load first input index.\n  var code_table = {}; // Key'd on our 20-bit \"tuple\".\n\n  emit_code(clear_code); // Spec says first code should be a clear code.\n\n  // First index already loaded, process the rest of the stream.\n  for (var i = 1, il = index_stream.length; i < il; ++i) {\n    var k = index_stream[i] & code_mask;\n    var cur_key = (ib_code << 8) | k; // (prev, k) unique tuple.\n    var cur_code = code_table[cur_key]; // buffer + k.\n\n    // Check if we have to create a new code table entry.\n    if (cur_code === undefined) {\n      // We don't have buffer + k.\n      // Emit index buffer (without k).\n      // This is an inline version of emit_code, because this is the core\n      // writing routine of the compressor (and V8 cannot inline emit_code\n      // because it is a closure here in a different context).  Additionally\n      // we can call emit_byte_to_buffer less often, because we can have\n      // 30-bits (from our 31-bit signed SMI), and we know our codes will only\n      // be 12-bits, so can safely have 18-bits there without overflow.\n      // emit_code(ib_code);\n      cur |= ib_code << cur_shift;\n      cur_shift += cur_code_size;\n      while (cur_shift >= 8) {\n        buf[p++] = cur & 0xff;\n        cur >>= 8;\n        cur_shift -= 8;\n        if (p === cur_subblock + 256) {\n          // Finished a subblock.\n          buf[cur_subblock] = 255;\n          cur_subblock = p++;\n        }\n      }\n\n      if (next_code === 4096) {\n        // Table full, need a clear.\n        emit_code(clear_code);\n        next_code = eoi_code + 1;\n        cur_code_size = min_code_size + 1;\n        code_table = {};\n      } else {\n        // Table not full, insert a new entry.\n        // Increase our variable bit code sizes if necessary.  This is a bit\n        // tricky as it is based on \"timing\" between the encoding and\n        // decoder.  From the encoders perspective this should happen after\n        // we've already emitted the index buffer and are about to create the\n        // first table entry that would overflow our current code bit size.\n        if (next_code >= 1 << cur_code_size) ++cur_code_size;\n        code_table[cur_key] = next_code++; // Insert into code table.\n      }\n\n      ib_code = k; // Index buffer to single input k.\n    } else {\n      ib_code = cur_code; // Index buffer to sequence in code table.\n    }\n  }\n\n  emit_code(ib_code); // There will still be something in the index buffer.\n  emit_code(eoi_code); // End Of Information.\n\n  // Flush / finalize the sub-blocks stream to the buffer.\n  emit_bytes_to_buffer(1);\n\n  // Finish the sub-blocks, writing out any unfinished lengths and\n  // terminating with a sub-block of length 0.  If we have already started\n  // but not yet used a sub-block it can just become the terminator.\n  if (cur_subblock + 1 === p) {\n    // Started but unused.\n    buf[cur_subblock] = 0;\n  } else {\n    // Started and used, write length and additional terminator block.\n    buf[cur_subblock] = p - cur_subblock - 1;\n    buf[p++] = 0;\n  }\n  return p;\n}\n\nfunction GifReader(buf) {\n  var p = 0;\n\n  // - Header (GIF87a or GIF89a).\n  if (\n    buf[p++] !== 0x47 ||\n    buf[p++] !== 0x49 ||\n    buf[p++] !== 0x46 ||\n    buf[p++] !== 0x38 ||\n    ((buf[p++] + 1) & 0xfd) !== 0x38 ||\n    buf[p++] !== 0x61\n  ) {\n    throw new Error(\"Invalid GIF 87a/89a header.\");\n  }\n\n  // - Logical Screen Descriptor.\n  var width = buf[p++] | (buf[p++] << 8);\n  var height = buf[p++] | (buf[p++] << 8);\n  var pf0 = buf[p++]; // <Packed Fields>.\n  var global_palette_flag = pf0 >> 7;\n  var num_global_colors_pow2 = pf0 & 0x7;\n  var num_global_colors = 1 << (num_global_colors_pow2 + 1);\n  var background = buf[p++];\n  buf[p++]; // Pixel aspect ratio (unused?).\n\n  var global_palette_offset = null;\n  var global_palette_size = null;\n\n  if (global_palette_flag) {\n    global_palette_offset = p;\n    global_palette_size = num_global_colors;\n    p += num_global_colors * 3; // Seek past palette.\n  }\n\n  var no_eof = true;\n\n  var frames = [];\n\n  var delay = 0;\n  var transparent_index = null;\n  var disposal = 0; // 0 - No disposal specified.\n  var loop_count = null;\n\n  this.width = width;\n  this.height = height;\n\n  while (no_eof && p < buf.length) {\n    switch (buf[p++]) {\n      case 0x21: // Graphics Control Extension Block\n        switch (buf[p++]) {\n          case 0xff: // Application specific block\n            // Try if it's a Netscape block (with animation loop counter).\n            if (\n              buf[p] !== 0x0b || // 21 FF already read, check block size.\n              // NETSCAPE2.0\n              (buf[p + 1] == 0x4e &&\n                buf[p + 2] == 0x45 &&\n                buf[p + 3] == 0x54 &&\n                buf[p + 4] == 0x53 &&\n                buf[p + 5] == 0x43 &&\n                buf[p + 6] == 0x41 &&\n                buf[p + 7] == 0x50 &&\n                buf[p + 8] == 0x45 &&\n                buf[p + 9] == 0x32 &&\n                buf[p + 10] == 0x2e &&\n                buf[p + 11] == 0x30 &&\n                // Sub-block\n                buf[p + 12] == 0x03 &&\n                buf[p + 13] == 0x01 &&\n                buf[p + 16] == 0)\n            ) {\n              p += 14;\n              loop_count = buf[p++] | (buf[p++] << 8);\n              p++; // Skip terminator.\n            } else {\n              // We don't know what it is, just try to get past it.\n              p += 12;\n              while (true) {\n                // Seek through subblocks.\n                var block_size = buf[p++];\n                // Bad block size (ex: undefined from an out of bounds read).\n                if (!(block_size >= 0)) throw Error(\"Invalid block size\");\n                if (block_size === 0) break; // 0 size is terminator\n                p += block_size;\n              }\n            }\n            break;\n\n          case 0xf9: // Graphics Control Extension\n            if (buf[p++] !== 0x4 || buf[p + 4] !== 0)\n              throw new Error(\"Invalid graphics extension block.\");\n            var pf1 = buf[p++];\n            delay = buf[p++] | (buf[p++] << 8);\n            transparent_index = buf[p++];\n            if ((pf1 & 1) === 0) transparent_index = null;\n            disposal = (pf1 >> 2) & 0x7;\n            p++; // Skip terminator.\n            break;\n\n          case 0xfe: // Comment Extension.\n            while (true) {\n              // Seek through subblocks.\n              var block_size = buf[p++];\n              // Bad block size (ex: undefined from an out of bounds read).\n              if (!(block_size >= 0)) throw Error(\"Invalid block size\");\n              if (block_size === 0) break; // 0 size is terminator\n              // console.log(buf.slice(p, p+block_size).toString('ascii'));\n              p += block_size;\n            }\n            break;\n\n          default:\n            throw new Error(\n              \"Unknown graphic control label: 0x\" + buf[p - 1].toString(16)\n            );\n        }\n        break;\n\n      case 0x2c: // Image Descriptor.\n        var x = buf[p++] | (buf[p++] << 8);\n        var y = buf[p++] | (buf[p++] << 8);\n        var w = buf[p++] | (buf[p++] << 8);\n        var h = buf[p++] | (buf[p++] << 8);\n        var pf2 = buf[p++];\n        var local_palette_flag = pf2 >> 7;\n        var interlace_flag = (pf2 >> 6) & 1;\n        var num_local_colors_pow2 = pf2 & 0x7;\n        var num_local_colors = 1 << (num_local_colors_pow2 + 1);\n        var palette_offset = global_palette_offset;\n        var palette_size = global_palette_size;\n        var has_local_palette = false;\n        if (local_palette_flag) {\n          var has_local_palette = true;\n          palette_offset = p; // Override with local palette.\n          palette_size = num_local_colors;\n          p += num_local_colors * 3; // Seek past palette.\n        }\n\n        var data_offset = p;\n\n        p++; // codesize\n        while (true) {\n          var block_size = buf[p++];\n          // Bad block size (ex: undefined from an out of bounds read).\n          if (!(block_size >= 0)) throw Error(\"Invalid block size\");\n          if (block_size === 0) break; // 0 size is terminator\n          p += block_size;\n        }\n\n        frames.push({\n          x: x,\n          y: y,\n          width: w,\n          height: h,\n          has_local_palette: has_local_palette,\n          palette_offset: palette_offset,\n          palette_size: palette_size,\n          data_offset: data_offset,\n          data_length: p - data_offset,\n          transparent_index: transparent_index,\n          interlaced: !!interlace_flag,\n          delay: delay,\n          disposal: disposal\n        });\n        break;\n\n      case 0x3b: // Trailer Marker (end of file).\n        no_eof = false;\n        break;\n\n      default:\n        throw new Error(\"Unknown gif block: 0x\" + buf[p - 1].toString(16));\n        break;\n    }\n  }\n\n  this.numFrames = function() {\n    return frames.length;\n  };\n\n  this.loopCount = function() {\n    return loop_count;\n  };\n\n  this.frameInfo = function(frame_num) {\n    if (frame_num < 0 || frame_num >= frames.length)\n      throw new Error(\"Frame index out of range.\");\n    return frames[frame_num];\n  };\n\n  this.decodeAndBlitFrameBGRA = function(frame_num, pixels) {\n    var frame = this.frameInfo(frame_num);\n    var num_pixels = frame.width * frame.height;\n    var index_stream = new Uint8Array(num_pixels); // At most 8-bit indices.\n    GifReaderLZWOutputIndexStream(\n      buf,\n      frame.data_offset,\n      index_stream,\n      num_pixels\n    );\n    var palette_offset = frame.palette_offset;\n\n    // NOTE(deanm): It seems to be much faster to compare index to 256 than\n    // to === null.  Not sure why, but CompareStub_EQ_STRICT shows up high in\n    // the profile, not sure if it's related to using a Uint8Array.\n    var trans = frame.transparent_index;\n    if (trans === null) trans = 256;\n\n    // We are possibly just blitting to a portion of the entire frame.\n    // That is a subrect within the framerect, so the additional pixels\n    // must be skipped over after we finished a scanline.\n    var framewidth = frame.width;\n    var framestride = width - framewidth;\n    var xleft = framewidth; // Number of subrect pixels left in scanline.\n\n    // Output indices of the top left and bottom right corners of the subrect.\n    var opbeg = (frame.y * width + frame.x) * 4;\n    var opend = ((frame.y + frame.height) * width + frame.x) * 4;\n    var op = opbeg;\n\n    var scanstride = framestride * 4;\n\n    // Use scanstride to skip past the rows when interlacing.  This is skipping\n    // 7 rows for the first two passes, then 3 then 1.\n    if (frame.interlaced === true) {\n      scanstride += width * 4 * 7; // Pass 1.\n    }\n\n    var interlaceskip = 8; // Tracking the row interval in the current pass.\n\n    for (var i = 0, il = index_stream.length; i < il; ++i) {\n      var index = index_stream[i];\n\n      if (xleft === 0) {\n        // Beginning of new scan line\n        op += scanstride;\n        xleft = framewidth;\n        if (op >= opend) {\n          // Catch the wrap to switch passes when interlacing.\n          scanstride = framestride * 4 + width * 4 * (interlaceskip - 1);\n          // interlaceskip / 2 * 4 is interlaceskip << 1.\n          op = opbeg + (framewidth + framestride) * (interlaceskip << 1);\n          interlaceskip >>= 1;\n        }\n      }\n\n      if (index === trans) {\n        op += 4;\n      } else {\n        var r = buf[palette_offset + index * 3];\n        var g = buf[palette_offset + index * 3 + 1];\n        var b = buf[palette_offset + index * 3 + 2];\n        pixels[op++] = b;\n        pixels[op++] = g;\n        pixels[op++] = r;\n        pixels[op++] = 255;\n      }\n      --xleft;\n    }\n  };\n\n  // I will go to copy and paste hell one day...\n  this.decodeAndBlitFrameRGBA = function(frame_num, pixels) {\n    var frame = this.frameInfo(frame_num);\n    var num_pixels = frame.width * frame.height;\n    var index_stream = new Uint8Array(num_pixels); // At most 8-bit indices.\n    GifReaderLZWOutputIndexStream(\n      buf,\n      frame.data_offset,\n      index_stream,\n      num_pixels\n    );\n    var palette_offset = frame.palette_offset;\n\n    // NOTE(deanm): It seems to be much faster to compare index to 256 than\n    // to === null.  Not sure why, but CompareStub_EQ_STRICT shows up high in\n    // the profile, not sure if it's related to using a Uint8Array.\n    var trans = frame.transparent_index;\n    if (trans === null) trans = 256;\n\n    // We are possibly just blitting to a portion of the entire frame.\n    // That is a subrect within the framerect, so the additional pixels\n    // must be skipped over after we finished a scanline.\n    var framewidth = frame.width;\n    var framestride = width - framewidth;\n    var xleft = framewidth; // Number of subrect pixels left in scanline.\n\n    // Output indices of the top left and bottom right corners of the subrect.\n    var opbeg = (frame.y * width + frame.x) * 4;\n    var opend = ((frame.y + frame.height) * width + frame.x) * 4;\n    var op = opbeg;\n\n    var scanstride = framestride * 4;\n\n    // Use scanstride to skip past the rows when interlacing.  This is skipping\n    // 7 rows for the first two passes, then 3 then 1.\n    if (frame.interlaced === true) {\n      scanstride += width * 4 * 7; // Pass 1.\n    }\n\n    var interlaceskip = 8; // Tracking the row interval in the current pass.\n\n    for (var i = 0, il = index_stream.length; i < il; ++i) {\n      var index = index_stream[i];\n\n      if (xleft === 0) {\n        // Beginning of new scan line\n        op += scanstride;\n        xleft = framewidth;\n        if (op >= opend) {\n          // Catch the wrap to switch passes when interlacing.\n          scanstride = framestride * 4 + width * 4 * (interlaceskip - 1);\n          // interlaceskip / 2 * 4 is interlaceskip << 1.\n          op = opbeg + (framewidth + framestride) * (interlaceskip << 1);\n          interlaceskip >>= 1;\n        }\n      }\n\n      if (index === trans) {\n        op += 4;\n      } else {\n        var r = buf[palette_offset + index * 3];\n        var g = buf[palette_offset + index * 3 + 1];\n        var b = buf[palette_offset + index * 3 + 2];\n        pixels[op++] = r;\n        pixels[op++] = g;\n        pixels[op++] = b;\n        pixels[op++] = 255;\n      }\n      --xleft;\n    }\n  };\n}\n\nfunction GifReaderLZWOutputIndexStream(code_stream, p, output, output_length) {\n  var min_code_size = code_stream[p++];\n\n  var clear_code = 1 << min_code_size;\n  var eoi_code = clear_code + 1;\n  var next_code = eoi_code + 1;\n\n  var cur_code_size = min_code_size + 1; // Number of bits per code.\n  // NOTE: This shares the same name as the encoder, but has a different\n  // meaning here.  Here this masks each code coming from the code stream.\n  var code_mask = (1 << cur_code_size) - 1;\n  var cur_shift = 0;\n  var cur = 0;\n\n  var op = 0; // Output pointer.\n\n  var subblock_size = code_stream[p++];\n\n  // TODO(deanm): Would using a TypedArray be any faster?  At least it would\n  // solve the fast mode / backing store uncertainty.\n  // var code_table = Array(4096);\n  var code_table = new Int32Array(4096); // Can be signed, we only use 20 bits.\n\n  var prev_code = null; // Track code-1.\n\n  while (true) {\n    // Read up to two bytes, making sure we always 12-bits for max sized code.\n    while (cur_shift < 16) {\n      if (subblock_size === 0) break; // No more data to be read.\n\n      cur |= code_stream[p++] << cur_shift;\n      cur_shift += 8;\n\n      if (subblock_size === 1) {\n        // Never let it get to 0 to hold logic above.\n        subblock_size = code_stream[p++]; // Next subblock.\n      } else {\n        --subblock_size;\n      }\n    }\n\n    // TODO(deanm): We should never really get here, we should have received\n    // and EOI.\n    if (cur_shift < cur_code_size) break;\n\n    var code = cur & code_mask;\n    cur >>= cur_code_size;\n    cur_shift -= cur_code_size;\n\n    // TODO(deanm): Maybe should check that the first code was a clear code,\n    // at least this is what you're supposed to do.  But actually our encoder\n    // now doesn't emit a clear code first anyway.\n    if (code === clear_code) {\n      // We don't actually have to clear the table.  This could be a good idea\n      // for greater error checking, but we don't really do any anyway.  We\n      // will just track it with next_code and overwrite old entries.\n\n      next_code = eoi_code + 1;\n      cur_code_size = min_code_size + 1;\n      code_mask = (1 << cur_code_size) - 1;\n\n      // Don't update prev_code ?\n      prev_code = null;\n      continue;\n    } else if (code === eoi_code) {\n      break;\n    }\n\n    // We have a similar situation as the decoder, where we want to store\n    // variable length entries (code table entries), but we want to do in a\n    // faster manner than an array of arrays.  The code below stores sort of a\n    // linked list within the code table, and then \"chases\" through it to\n    // construct the dictionary entries.  When a new entry is created, just the\n    // last byte is stored, and the rest (prefix) of the entry is only\n    // referenced by its table entry.  Then the code chases through the\n    // prefixes until it reaches a single byte code.  We have to chase twice,\n    // first to compute the length, and then to actually copy the data to the\n    // output (backwards, since we know the length).  The alternative would be\n    // storing something in an intermediate stack, but that doesn't make any\n    // more sense.  I implemented an approach where it also stored the length\n    // in the code table, although it's a bit tricky because you run out of\n    // bits (12 + 12 + 8), but I didn't measure much improvements (the table\n    // entries are generally not the long).  Even when I created benchmarks for\n    // very long table entries the complexity did not seem worth it.\n    // The code table stores the prefix entry in 12 bits and then the suffix\n    // byte in 8 bits, so each entry is 20 bits.\n\n    var chase_code = code < next_code ? code : prev_code;\n\n    // Chase what we will output, either {CODE} or {CODE-1}.\n    var chase_length = 0;\n    var chase = chase_code;\n    while (chase > clear_code) {\n      chase = code_table[chase] >> 8;\n      ++chase_length;\n    }\n\n    var k = chase;\n\n    var op_end = op + chase_length + (chase_code !== code ? 1 : 0);\n    if (op_end > output_length) {\n      console.log(\"Warning, gif stream longer than expected.\");\n      return;\n    }\n\n    // Already have the first byte from the chase, might as well write it fast.\n    output[op++] = k;\n\n    op += chase_length;\n    var b = op; // Track pointer, writing backwards.\n\n    if (chase_code !== code)\n      // The case of emitting {CODE-1} + k.\n      output[op++] = k;\n\n    chase = chase_code;\n    while (chase_length--) {\n      chase = code_table[chase];\n      output[--b] = chase & 0xff; // Write backwards.\n      chase >>= 8; // Pull down to the prefix code.\n    }\n\n    if (prev_code !== null && next_code < 4096) {\n      code_table[next_code++] = (prev_code << 8) | k;\n      // TODO(deanm): Figure out this clearing vs code growth logic better.  I\n      // have an feeling that it should just happen somewhere else, for now it\n      // is awkward between when we grow past the max and then hit a clear code.\n      // For now just check if we hit the max 12-bits (then a clear code should\n      // follow, also of course encoded in 12-bits).\n      if (next_code >= code_mask + 1 && cur_code_size < 12) {\n        ++cur_code_size;\n        code_mask = (code_mask << 1) | 1;\n      }\n    }\n\n    prev_code = code;\n  }\n\n  if (op !== output_length) {\n    console.log(\"Warning, gif stream shorter than expected.\");\n  }\n\n  return output;\n}\n\nexport { GifReader, GifWriter };\n","/**\n * @license\n  Copyright (c) 2008, Adobe Systems Incorporated\n  All rights reserved.\n\n  Redistribution and use in source and binary forms, with or without \n  modification, are permitted provided that the following conditions are\n  met:\n\n  * Redistributions of source code must retain the above copyright notice, \n    this list of conditions and the following disclaimer.\n  \n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in the \n    documentation and/or other materials provided with the distribution.\n  \n  * Neither the name of Adobe Systems Incorporated nor the names of its \n    contributors may be used to endorse or promote products derived from \n    this software without specific prior written permission.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\n  IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR \n  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n/*\nJPEG encoder ported to JavaScript and optimized by Andreas Ritter, www.bytestrom.eu, 11/2009\n\nBasic GUI blocking jpeg encoder\n*/\n\nfunction JPEGEncoder(quality) {\n  var ffloor = Math.floor;\n  var YTable = new Array(64);\n  var UVTable = new Array(64);\n  var fdtbl_Y = new Array(64);\n  var fdtbl_UV = new Array(64);\n  var YDC_HT;\n  var UVDC_HT;\n  var YAC_HT;\n  var UVAC_HT;\n\n  var bitcode = new Array(65535);\n  var category = new Array(65535);\n  var outputfDCTQuant = new Array(64);\n  var DU = new Array(64);\n  var byteout = [];\n  var bytenew = 0;\n  var bytepos = 7;\n\n  var YDU = new Array(64);\n  var UDU = new Array(64);\n  var VDU = new Array(64);\n  var clt = new Array(256);\n  var RGB_YUV_TABLE = new Array(2048);\n  var currentQuality;\n\n  var ZigZag = [\n    0,\n    1,\n    5,\n    6,\n    14,\n    15,\n    27,\n    28,\n    2,\n    4,\n    7,\n    13,\n    16,\n    26,\n    29,\n    42,\n    3,\n    8,\n    12,\n    17,\n    25,\n    30,\n    41,\n    43,\n    9,\n    11,\n    18,\n    24,\n    31,\n    40,\n    44,\n    53,\n    10,\n    19,\n    23,\n    32,\n    39,\n    45,\n    52,\n    54,\n    20,\n    22,\n    33,\n    38,\n    46,\n    51,\n    55,\n    60,\n    21,\n    34,\n    37,\n    47,\n    50,\n    56,\n    59,\n    61,\n    35,\n    36,\n    48,\n    49,\n    57,\n    58,\n    62,\n    63\n  ];\n\n  var std_dc_luminance_nrcodes = [\n    0,\n    0,\n    1,\n    5,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0\n  ];\n  var std_dc_luminance_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\n  var std_ac_luminance_nrcodes = [\n    0,\n    0,\n    2,\n    1,\n    3,\n    3,\n    2,\n    4,\n    3,\n    5,\n    5,\n    4,\n    4,\n    0,\n    0,\n    1,\n    0x7d\n  ];\n  var std_ac_luminance_values = [\n    0x01,\n    0x02,\n    0x03,\n    0x00,\n    0x04,\n    0x11,\n    0x05,\n    0x12,\n    0x21,\n    0x31,\n    0x41,\n    0x06,\n    0x13,\n    0x51,\n    0x61,\n    0x07,\n    0x22,\n    0x71,\n    0x14,\n    0x32,\n    0x81,\n    0x91,\n    0xa1,\n    0x08,\n    0x23,\n    0x42,\n    0xb1,\n    0xc1,\n    0x15,\n    0x52,\n    0xd1,\n    0xf0,\n    0x24,\n    0x33,\n    0x62,\n    0x72,\n    0x82,\n    0x09,\n    0x0a,\n    0x16,\n    0x17,\n    0x18,\n    0x19,\n    0x1a,\n    0x25,\n    0x26,\n    0x27,\n    0x28,\n    0x29,\n    0x2a,\n    0x34,\n    0x35,\n    0x36,\n    0x37,\n    0x38,\n    0x39,\n    0x3a,\n    0x43,\n    0x44,\n    0x45,\n    0x46,\n    0x47,\n    0x48,\n    0x49,\n    0x4a,\n    0x53,\n    0x54,\n    0x55,\n    0x56,\n    0x57,\n    0x58,\n    0x59,\n    0x5a,\n    0x63,\n    0x64,\n    0x65,\n    0x66,\n    0x67,\n    0x68,\n    0x69,\n    0x6a,\n    0x73,\n    0x74,\n    0x75,\n    0x76,\n    0x77,\n    0x78,\n    0x79,\n    0x7a,\n    0x83,\n    0x84,\n    0x85,\n    0x86,\n    0x87,\n    0x88,\n    0x89,\n    0x8a,\n    0x92,\n    0x93,\n    0x94,\n    0x95,\n    0x96,\n    0x97,\n    0x98,\n    0x99,\n    0x9a,\n    0xa2,\n    0xa3,\n    0xa4,\n    0xa5,\n    0xa6,\n    0xa7,\n    0xa8,\n    0xa9,\n    0xaa,\n    0xb2,\n    0xb3,\n    0xb4,\n    0xb5,\n    0xb6,\n    0xb7,\n    0xb8,\n    0xb9,\n    0xba,\n    0xc2,\n    0xc3,\n    0xc4,\n    0xc5,\n    0xc6,\n    0xc7,\n    0xc8,\n    0xc9,\n    0xca,\n    0xd2,\n    0xd3,\n    0xd4,\n    0xd5,\n    0xd6,\n    0xd7,\n    0xd8,\n    0xd9,\n    0xda,\n    0xe1,\n    0xe2,\n    0xe3,\n    0xe4,\n    0xe5,\n    0xe6,\n    0xe7,\n    0xe8,\n    0xe9,\n    0xea,\n    0xf1,\n    0xf2,\n    0xf3,\n    0xf4,\n    0xf5,\n    0xf6,\n    0xf7,\n    0xf8,\n    0xf9,\n    0xfa\n  ];\n\n  var std_dc_chrominance_nrcodes = [\n    0,\n    0,\n    3,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    0,\n    0,\n    0,\n    0,\n    0\n  ];\n  var std_dc_chrominance_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\n  var std_ac_chrominance_nrcodes = [\n    0,\n    0,\n    2,\n    1,\n    2,\n    4,\n    4,\n    3,\n    4,\n    7,\n    5,\n    4,\n    4,\n    0,\n    1,\n    2,\n    0x77\n  ];\n  var std_ac_chrominance_values = [\n    0x00,\n    0x01,\n    0x02,\n    0x03,\n    0x11,\n    0x04,\n    0x05,\n    0x21,\n    0x31,\n    0x06,\n    0x12,\n    0x41,\n    0x51,\n    0x07,\n    0x61,\n    0x71,\n    0x13,\n    0x22,\n    0x32,\n    0x81,\n    0x08,\n    0x14,\n    0x42,\n    0x91,\n    0xa1,\n    0xb1,\n    0xc1,\n    0x09,\n    0x23,\n    0x33,\n    0x52,\n    0xf0,\n    0x15,\n    0x62,\n    0x72,\n    0xd1,\n    0x0a,\n    0x16,\n    0x24,\n    0x34,\n    0xe1,\n    0x25,\n    0xf1,\n    0x17,\n    0x18,\n    0x19,\n    0x1a,\n    0x26,\n    0x27,\n    0x28,\n    0x29,\n    0x2a,\n    0x35,\n    0x36,\n    0x37,\n    0x38,\n    0x39,\n    0x3a,\n    0x43,\n    0x44,\n    0x45,\n    0x46,\n    0x47,\n    0x48,\n    0x49,\n    0x4a,\n    0x53,\n    0x54,\n    0x55,\n    0x56,\n    0x57,\n    0x58,\n    0x59,\n    0x5a,\n    0x63,\n    0x64,\n    0x65,\n    0x66,\n    0x67,\n    0x68,\n    0x69,\n    0x6a,\n    0x73,\n    0x74,\n    0x75,\n    0x76,\n    0x77,\n    0x78,\n    0x79,\n    0x7a,\n    0x82,\n    0x83,\n    0x84,\n    0x85,\n    0x86,\n    0x87,\n    0x88,\n    0x89,\n    0x8a,\n    0x92,\n    0x93,\n    0x94,\n    0x95,\n    0x96,\n    0x97,\n    0x98,\n    0x99,\n    0x9a,\n    0xa2,\n    0xa3,\n    0xa4,\n    0xa5,\n    0xa6,\n    0xa7,\n    0xa8,\n    0xa9,\n    0xaa,\n    0xb2,\n    0xb3,\n    0xb4,\n    0xb5,\n    0xb6,\n    0xb7,\n    0xb8,\n    0xb9,\n    0xba,\n    0xc2,\n    0xc3,\n    0xc4,\n    0xc5,\n    0xc6,\n    0xc7,\n    0xc8,\n    0xc9,\n    0xca,\n    0xd2,\n    0xd3,\n    0xd4,\n    0xd5,\n    0xd6,\n    0xd7,\n    0xd8,\n    0xd9,\n    0xda,\n    0xe2,\n    0xe3,\n    0xe4,\n    0xe5,\n    0xe6,\n    0xe7,\n    0xe8,\n    0xe9,\n    0xea,\n    0xf2,\n    0xf3,\n    0xf4,\n    0xf5,\n    0xf6,\n    0xf7,\n    0xf8,\n    0xf9,\n    0xfa\n  ];\n\n  function initQuantTables(sf) {\n    var YQT = [\n      16,\n      11,\n      10,\n      16,\n      24,\n      40,\n      51,\n      61,\n      12,\n      12,\n      14,\n      19,\n      26,\n      58,\n      60,\n      55,\n      14,\n      13,\n      16,\n      24,\n      40,\n      57,\n      69,\n      56,\n      14,\n      17,\n      22,\n      29,\n      51,\n      87,\n      80,\n      62,\n      18,\n      22,\n      37,\n      56,\n      68,\n      109,\n      103,\n      77,\n      24,\n      35,\n      55,\n      64,\n      81,\n      104,\n      113,\n      92,\n      49,\n      64,\n      78,\n      87,\n      103,\n      121,\n      120,\n      101,\n      72,\n      92,\n      95,\n      98,\n      112,\n      100,\n      103,\n      99\n    ];\n\n    for (var i = 0; i < 64; i++) {\n      var t = ffloor((YQT[i] * sf + 50) / 100);\n      t = Math.min(Math.max(t, 1), 255);\n      YTable[ZigZag[i]] = t;\n    }\n    var UVQT = [\n      17,\n      18,\n      24,\n      47,\n      99,\n      99,\n      99,\n      99,\n      18,\n      21,\n      26,\n      66,\n      99,\n      99,\n      99,\n      99,\n      24,\n      26,\n      56,\n      99,\n      99,\n      99,\n      99,\n      99,\n      47,\n      66,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99\n    ];\n    for (var j = 0; j < 64; j++) {\n      var u = ffloor((UVQT[j] * sf + 50) / 100);\n      u = Math.min(Math.max(u, 1), 255);\n      UVTable[ZigZag[j]] = u;\n    }\n    var aasf = [\n      1.0,\n      1.387039845,\n      1.306562965,\n      1.175875602,\n      1.0,\n      0.785694958,\n      0.5411961,\n      0.275899379\n    ];\n    var k = 0;\n    for (var row = 0; row < 8; row++) {\n      for (var col = 0; col < 8; col++) {\n        fdtbl_Y[k] = 1.0 / (YTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0);\n        fdtbl_UV[k] = 1.0 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0);\n        k++;\n      }\n    }\n  }\n\n  function computeHuffmanTbl(nrcodes, std_table) {\n    var codevalue = 0;\n    var pos_in_table = 0;\n    var HT = new Array();\n    for (var k = 1; k <= 16; k++) {\n      for (var j = 1; j <= nrcodes[k]; j++) {\n        HT[std_table[pos_in_table]] = [];\n        HT[std_table[pos_in_table]][0] = codevalue;\n        HT[std_table[pos_in_table]][1] = k;\n        pos_in_table++;\n        codevalue++;\n      }\n      codevalue *= 2;\n    }\n    return HT;\n  }\n\n  function initHuffmanTbl() {\n    YDC_HT = computeHuffmanTbl(\n      std_dc_luminance_nrcodes,\n      std_dc_luminance_values\n    );\n    UVDC_HT = computeHuffmanTbl(\n      std_dc_chrominance_nrcodes,\n      std_dc_chrominance_values\n    );\n    YAC_HT = computeHuffmanTbl(\n      std_ac_luminance_nrcodes,\n      std_ac_luminance_values\n    );\n    UVAC_HT = computeHuffmanTbl(\n      std_ac_chrominance_nrcodes,\n      std_ac_chrominance_values\n    );\n  }\n\n  function initCategoryNumber() {\n    var nrlower = 1;\n    var nrupper = 2;\n    for (var cat = 1; cat <= 15; cat++) {\n      //Positive numbers\n      for (var nr = nrlower; nr < nrupper; nr++) {\n        category[32767 + nr] = cat;\n        bitcode[32767 + nr] = [];\n        bitcode[32767 + nr][1] = cat;\n        bitcode[32767 + nr][0] = nr;\n      }\n      //Negative numbers\n      for (var nrneg = -(nrupper - 1); nrneg <= -nrlower; nrneg++) {\n        category[32767 + nrneg] = cat;\n        bitcode[32767 + nrneg] = [];\n        bitcode[32767 + nrneg][1] = cat;\n        bitcode[32767 + nrneg][0] = nrupper - 1 + nrneg;\n      }\n      nrlower <<= 1;\n      nrupper <<= 1;\n    }\n  }\n\n  function initRGBYUVTable() {\n    for (var i = 0; i < 256; i++) {\n      RGB_YUV_TABLE[i] = 19595 * i;\n      RGB_YUV_TABLE[(i + 256) >> 0] = 38470 * i;\n      RGB_YUV_TABLE[(i + 512) >> 0] = 7471 * i + 0x8000;\n      RGB_YUV_TABLE[(i + 768) >> 0] = -11059 * i;\n      RGB_YUV_TABLE[(i + 1024) >> 0] = -21709 * i;\n      RGB_YUV_TABLE[(i + 1280) >> 0] = 32768 * i + 0x807fff;\n      RGB_YUV_TABLE[(i + 1536) >> 0] = -27439 * i;\n      RGB_YUV_TABLE[(i + 1792) >> 0] = -5329 * i;\n    }\n  }\n\n  // IO functions\n  function writeBits(bs) {\n    var value = bs[0];\n    var posval = bs[1] - 1;\n    while (posval >= 0) {\n      if (value & (1 << posval)) {\n        bytenew |= 1 << bytepos;\n      }\n      posval--;\n      bytepos--;\n      if (bytepos < 0) {\n        if (bytenew == 0xff) {\n          writeByte(0xff);\n          writeByte(0);\n        } else {\n          writeByte(bytenew);\n        }\n        bytepos = 7;\n        bytenew = 0;\n      }\n    }\n  }\n\n  function writeByte(value) {\n    //byteout.push(clt[value]); // write char directly instead of converting later\n    byteout.push(value);\n  }\n\n  function writeWord(value) {\n    writeByte((value >> 8) & 0xff);\n    writeByte(value & 0xff);\n  }\n\n  // DCT & quantization core\n  function fDCTQuant(data, fdtbl) {\n    var d0, d1, d2, d3, d4, d5, d6, d7;\n    /* Pass 1: process rows. */\n    var dataOff = 0;\n    var i;\n    var I8 = 8;\n    var I64 = 64;\n    for (i = 0; i < I8; ++i) {\n      d0 = data[dataOff];\n      d1 = data[dataOff + 1];\n      d2 = data[dataOff + 2];\n      d3 = data[dataOff + 3];\n      d4 = data[dataOff + 4];\n      d5 = data[dataOff + 5];\n      d6 = data[dataOff + 6];\n      d7 = data[dataOff + 7];\n\n      var tmp0 = d0 + d7;\n      var tmp7 = d0 - d7;\n      var tmp1 = d1 + d6;\n      var tmp6 = d1 - d6;\n      var tmp2 = d2 + d5;\n      var tmp5 = d2 - d5;\n      var tmp3 = d3 + d4;\n      var tmp4 = d3 - d4;\n\n      /* Even part */\n      var tmp10 = tmp0 + tmp3; /* phase 2 */\n      var tmp13 = tmp0 - tmp3;\n      var tmp11 = tmp1 + tmp2;\n      var tmp12 = tmp1 - tmp2;\n\n      data[dataOff] = tmp10 + tmp11; /* phase 3 */\n      data[dataOff + 4] = tmp10 - tmp11;\n\n      var z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */\n      data[dataOff + 2] = tmp13 + z1; /* phase 5 */\n      data[dataOff + 6] = tmp13 - z1;\n\n      /* Odd part */\n      tmp10 = tmp4 + tmp5; /* phase 2 */\n      tmp11 = tmp5 + tmp6;\n      tmp12 = tmp6 + tmp7;\n\n      /* The rotator is modified from fig 4-8 to avoid extra negations. */\n      var z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */\n      var z2 = 0.5411961 * tmp10 + z5; /* c2-c6 */\n      var z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */\n      var z3 = tmp11 * 0.707106781; /* c4 */\n\n      var z11 = tmp7 + z3; /* phase 5 */\n      var z13 = tmp7 - z3;\n\n      data[dataOff + 5] = z13 + z2; /* phase 6 */\n      data[dataOff + 3] = z13 - z2;\n      data[dataOff + 1] = z11 + z4;\n      data[dataOff + 7] = z11 - z4;\n\n      dataOff += 8; /* advance pointer to next row */\n    }\n\n    /* Pass 2: process columns. */\n    dataOff = 0;\n    for (i = 0; i < I8; ++i) {\n      d0 = data[dataOff];\n      d1 = data[dataOff + 8];\n      d2 = data[dataOff + 16];\n      d3 = data[dataOff + 24];\n      d4 = data[dataOff + 32];\n      d5 = data[dataOff + 40];\n      d6 = data[dataOff + 48];\n      d7 = data[dataOff + 56];\n\n      var tmp0p2 = d0 + d7;\n      var tmp7p2 = d0 - d7;\n      var tmp1p2 = d1 + d6;\n      var tmp6p2 = d1 - d6;\n      var tmp2p2 = d2 + d5;\n      var tmp5p2 = d2 - d5;\n      var tmp3p2 = d3 + d4;\n      var tmp4p2 = d3 - d4;\n\n      /* Even part */\n      var tmp10p2 = tmp0p2 + tmp3p2; /* phase 2 */\n      var tmp13p2 = tmp0p2 - tmp3p2;\n      var tmp11p2 = tmp1p2 + tmp2p2;\n      var tmp12p2 = tmp1p2 - tmp2p2;\n\n      data[dataOff] = tmp10p2 + tmp11p2; /* phase 3 */\n      data[dataOff + 32] = tmp10p2 - tmp11p2;\n\n      var z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; /* c4 */\n      data[dataOff + 16] = tmp13p2 + z1p2; /* phase 5 */\n      data[dataOff + 48] = tmp13p2 - z1p2;\n\n      /* Odd part */\n      tmp10p2 = tmp4p2 + tmp5p2; /* phase 2 */\n      tmp11p2 = tmp5p2 + tmp6p2;\n      tmp12p2 = tmp6p2 + tmp7p2;\n\n      /* The rotator is modified from fig 4-8 to avoid extra negations. */\n      var z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; /* c6 */\n      var z2p2 = 0.5411961 * tmp10p2 + z5p2; /* c2-c6 */\n      var z4p2 = 1.306562965 * tmp12p2 + z5p2; /* c2+c6 */\n      var z3p2 = tmp11p2 * 0.707106781; /* c4 */\n\n      var z11p2 = tmp7p2 + z3p2; /* phase 5 */\n      var z13p2 = tmp7p2 - z3p2;\n\n      data[dataOff + 40] = z13p2 + z2p2; /* phase 6 */\n      data[dataOff + 24] = z13p2 - z2p2;\n      data[dataOff + 8] = z11p2 + z4p2;\n      data[dataOff + 56] = z11p2 - z4p2;\n\n      dataOff++; /* advance pointer to next column */\n    }\n\n    // Quantize/descale the coefficients\n    var fDCTQuant;\n    for (i = 0; i < I64; ++i) {\n      // Apply the quantization and scaling factor & Round to nearest integer\n      fDCTQuant = data[i] * fdtbl[i];\n      outputfDCTQuant[i] =\n        fDCTQuant > 0.0 ? (fDCTQuant + 0.5) | 0 : (fDCTQuant - 0.5) | 0;\n      //outputfDCTQuant[i] = fround(fDCTQuant);\n    }\n    return outputfDCTQuant;\n  }\n\n  function writeAPP0() {\n    writeWord(0xffe0); // marker\n    writeWord(16); // length\n    writeByte(0x4a); // J\n    writeByte(0x46); // F\n    writeByte(0x49); // I\n    writeByte(0x46); // F\n    writeByte(0); // = \"JFIF\",'\\0'\n    writeByte(1); // versionhi\n    writeByte(1); // versionlo\n    writeByte(0); // xyunits\n    writeWord(1); // xdensity\n    writeWord(1); // ydensity\n    writeByte(0); // thumbnwidth\n    writeByte(0); // thumbnheight\n  }\n\n  function writeSOF0(width, height) {\n    writeWord(0xffc0); // marker\n    writeWord(17); // length, truecolor YUV JPG\n    writeByte(8); // precision\n    writeWord(height);\n    writeWord(width);\n    writeByte(3); // nrofcomponents\n    writeByte(1); // IdY\n    writeByte(0x11); // HVY\n    writeByte(0); // QTY\n    writeByte(2); // IdU\n    writeByte(0x11); // HVU\n    writeByte(1); // QTU\n    writeByte(3); // IdV\n    writeByte(0x11); // HVV\n    writeByte(1); // QTV\n  }\n\n  function writeDQT() {\n    writeWord(0xffdb); // marker\n    writeWord(132); // length\n    writeByte(0);\n    for (var i = 0; i < 64; i++) {\n      writeByte(YTable[i]);\n    }\n    writeByte(1);\n    for (var j = 0; j < 64; j++) {\n      writeByte(UVTable[j]);\n    }\n  }\n\n  function writeDHT() {\n    writeWord(0xffc4); // marker\n    writeWord(0x01a2); // length\n\n    writeByte(0); // HTYDCinfo\n    for (var i = 0; i < 16; i++) {\n      writeByte(std_dc_luminance_nrcodes[i + 1]);\n    }\n    for (var j = 0; j <= 11; j++) {\n      writeByte(std_dc_luminance_values[j]);\n    }\n\n    writeByte(0x10); // HTYACinfo\n    for (var k = 0; k < 16; k++) {\n      writeByte(std_ac_luminance_nrcodes[k + 1]);\n    }\n    for (var l = 0; l <= 161; l++) {\n      writeByte(std_ac_luminance_values[l]);\n    }\n\n    writeByte(1); // HTUDCinfo\n    for (var m = 0; m < 16; m++) {\n      writeByte(std_dc_chrominance_nrcodes[m + 1]);\n    }\n    for (var n = 0; n <= 11; n++) {\n      writeByte(std_dc_chrominance_values[n]);\n    }\n\n    writeByte(0x11); // HTUACinfo\n    for (var o = 0; o < 16; o++) {\n      writeByte(std_ac_chrominance_nrcodes[o + 1]);\n    }\n    for (var p = 0; p <= 161; p++) {\n      writeByte(std_ac_chrominance_values[p]);\n    }\n  }\n\n  function writeSOS() {\n    writeWord(0xffda); // marker\n    writeWord(12); // length\n    writeByte(3); // nrofcomponents\n    writeByte(1); // IdY\n    writeByte(0); // HTY\n    writeByte(2); // IdU\n    writeByte(0x11); // HTU\n    writeByte(3); // IdV\n    writeByte(0x11); // HTV\n    writeByte(0); // Ss\n    writeByte(0x3f); // Se\n    writeByte(0); // Bf\n  }\n\n  function processDU(CDU, fdtbl, DC, HTDC, HTAC) {\n    var EOB = HTAC[0x00];\n    var M16zeroes = HTAC[0xf0];\n    var pos;\n    var I16 = 16;\n    var I63 = 63;\n    var I64 = 64;\n    var DU_DCT = fDCTQuant(CDU, fdtbl);\n    //ZigZag reorder\n    for (var j = 0; j < I64; ++j) {\n      DU[ZigZag[j]] = DU_DCT[j];\n    }\n    var Diff = DU[0] - DC;\n    DC = DU[0];\n    //Encode DC\n    if (Diff == 0) {\n      writeBits(HTDC[0]); // Diff might be 0\n    } else {\n      pos = 32767 + Diff;\n      writeBits(HTDC[category[pos]]);\n      writeBits(bitcode[pos]);\n    }\n    //Encode ACs\n    var end0pos = 63; // was const... which is crazy\n    while (end0pos > 0 && DU[end0pos] == 0) {\n      end0pos--;\n    }\n    //end0pos = first element in reverse order !=0\n    if (end0pos == 0) {\n      writeBits(EOB);\n      return DC;\n    }\n    var i = 1;\n    var lng;\n    while (i <= end0pos) {\n      var startpos = i;\n      while (DU[i] == 0 && i <= end0pos) {\n        ++i;\n      }\n      var nrzeroes = i - startpos;\n      if (nrzeroes >= I16) {\n        lng = nrzeroes >> 4;\n        for (var nrmarker = 1; nrmarker <= lng; ++nrmarker)\n          writeBits(M16zeroes);\n        nrzeroes = nrzeroes & 0xf;\n      }\n      pos = 32767 + DU[i];\n      writeBits(HTAC[(nrzeroes << 4) + category[pos]]);\n      writeBits(bitcode[pos]);\n      i++;\n    }\n    if (end0pos != I63) {\n      writeBits(EOB);\n    }\n    return DC;\n  }\n\n  function initCharLookupTable() {\n    var sfcc = String.fromCharCode;\n    for (var i = 0; i < 256; i++) {\n      ///// ACHTUNG // 255\n      clt[i] = sfcc(i);\n    }\n  }\n\n  this.encode = function(\n    image,\n    quality // image data object\n  ) {\n    if (quality) setQuality(quality);\n\n    // Initialize bit writer\n    byteout = new Array();\n    bytenew = 0;\n    bytepos = 7;\n\n    // Add JPEG headers\n    writeWord(0xffd8); // SOI\n    writeAPP0();\n    writeDQT();\n    writeSOF0(image.width, image.height);\n    writeDHT();\n    writeSOS();\n\n    // Encode 8x8 macroblocks\n    var DCY = 0;\n    var DCU = 0;\n    var DCV = 0;\n\n    bytenew = 0;\n    bytepos = 7;\n\n    this.encode.displayName = \"_encode_\";\n\n    var imageData = image.data;\n    var width = image.width;\n    var height = image.height;\n\n    var quadWidth = width * 4;\n\n    var x,\n      y = 0;\n    var r, g, b;\n    var start, p, col, row, pos;\n    while (y < height) {\n      x = 0;\n      while (x < quadWidth) {\n        start = quadWidth * y + x;\n        col = -1;\n        row = 0;\n\n        for (pos = 0; pos < 64; pos++) {\n          row = pos >> 3; // /8\n          col = (pos & 7) * 4; // %8\n          p = start + row * quadWidth + col;\n\n          if (y + row >= height) {\n            // padding bottom\n            p -= quadWidth * (y + 1 + row - height);\n          }\n\n          if (x + col >= quadWidth) {\n            // padding right\n            p -= x + col - quadWidth + 4;\n          }\n\n          r = imageData[p++];\n          g = imageData[p++];\n          b = imageData[p++];\n\n          /* // calculate YUV values dynamically\n\t\t\t\t\tYDU[pos]=((( 0.29900)*r+( 0.58700)*g+( 0.11400)*b))-128; //-0x80\n\t\t\t\t\tUDU[pos]=(((-0.16874)*r+(-0.33126)*g+( 0.50000)*b));\n\t\t\t\t\tVDU[pos]=((( 0.50000)*r+(-0.41869)*g+(-0.08131)*b));\n\t\t\t\t\t*/\n\n          // use lookup table (slightly faster)\n          YDU[pos] =\n            ((RGB_YUV_TABLE[r] +\n              RGB_YUV_TABLE[(g + 256) >> 0] +\n              RGB_YUV_TABLE[(b + 512) >> 0]) >>\n              16) -\n            128;\n          UDU[pos] =\n            ((RGB_YUV_TABLE[(r + 768) >> 0] +\n              RGB_YUV_TABLE[(g + 1024) >> 0] +\n              RGB_YUV_TABLE[(b + 1280) >> 0]) >>\n              16) -\n            128;\n          VDU[pos] =\n            ((RGB_YUV_TABLE[(r + 1280) >> 0] +\n              RGB_YUV_TABLE[(g + 1536) >> 0] +\n              RGB_YUV_TABLE[(b + 1792) >> 0]) >>\n              16) -\n            128;\n        }\n\n        DCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT);\n        DCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT);\n        DCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT);\n        x += 32;\n      }\n      y += 8;\n    }\n\n    ////////////////////////////////////////////////////////////////\n\n    // Do the bit alignment of the EOI marker\n    if (bytepos >= 0) {\n      var fillbits = [];\n      fillbits[1] = bytepos + 1;\n      fillbits[0] = (1 << (bytepos + 1)) - 1;\n      writeBits(fillbits);\n    }\n\n    writeWord(0xffd9); //EOI\n\n    return new Uint8Array(byteout);\n  };\n\n  function setQuality(quality) {\n    quality = Math.min(Math.max(quality, 1), 100);\n\n    if (currentQuality == quality) return; // don't recalc if unchanged\n\n    var sf =\n      quality < 50 ? Math.floor(5000 / quality) : Math.floor(200 - quality * 2);\n\n    initQuantTables(sf);\n    currentQuality = quality;\n    //console.log('Quality set to: '+quality +'%');\n  }\n\n  function init() {\n    quality = quality || 50;\n    // Create tables\n    initCharLookupTable();\n    initHuffmanTbl();\n    initCategoryNumber();\n    initRGBYUVTable();\n\n    setQuality(quality);\n  }\n  init();\n}\n\nexport { JPEGEncoder };\n","/**\n * @author shaozilee\n *\n * Bmp format decoder,support 1bit 4bit 8bit 24bit bmp\n *\n */\n\nimport { console } from \"./console.js\";\n\nfunction BmpDecoder(buffer, is_with_alpha) {\n  this.pos = 0;\n  this.buffer = buffer;\n  this.datav = new DataView(buffer.buffer);\n  this.is_with_alpha = !!is_with_alpha;\n  this.bottom_up = true;\n  this.flag =\n    String.fromCharCode(this.buffer[0]) + String.fromCharCode(this.buffer[1]);\n  this.pos += 2;\n  if ([\"BM\", \"BA\", \"CI\", \"CP\", \"IC\", \"PT\"].indexOf(this.flag) === -1)\n    throw new Error(\"Invalid BMP File\");\n  this.parseHeader();\n  this.parseBGR();\n}\n\nBmpDecoder.prototype.parseHeader = function() {\n  this.fileSize = this.datav.getUint32(this.pos, true);\n  this.pos += 4;\n  this.reserved = this.datav.getUint32(this.pos, true);\n  this.pos += 4;\n  this.offset = this.datav.getUint32(this.pos, true);\n  this.pos += 4;\n  this.headerSize = this.datav.getUint32(this.pos, true);\n  this.pos += 4;\n  this.width = this.datav.getUint32(this.pos, true);\n  this.pos += 4;\n  this.height = this.datav.getInt32(this.pos, true);\n  this.pos += 4;\n  this.planes = this.datav.getUint16(this.pos, true);\n  this.pos += 2;\n  this.bitPP = this.datav.getUint16(this.pos, true);\n  this.pos += 2;\n  this.compress = this.datav.getUint32(this.pos, true);\n  this.pos += 4;\n  this.rawSize = this.datav.getUint32(this.pos, true);\n  this.pos += 4;\n  this.hr = this.datav.getUint32(this.pos, true);\n  this.pos += 4;\n  this.vr = this.datav.getUint32(this.pos, true);\n  this.pos += 4;\n  this.colors = this.datav.getUint32(this.pos, true);\n  this.pos += 4;\n  this.importantColors = this.datav.getUint32(this.pos, true);\n  this.pos += 4;\n\n  if (this.bitPP === 16 && this.is_with_alpha) {\n    this.bitPP = 15;\n  }\n  if (this.bitPP < 15) {\n    var len = this.colors === 0 ? 1 << this.bitPP : this.colors;\n    this.palette = new Array(len);\n    for (var i = 0; i < len; i++) {\n      var blue = this.datav.getUint8(this.pos++, true);\n      var green = this.datav.getUint8(this.pos++, true);\n      var red = this.datav.getUint8(this.pos++, true);\n      var quad = this.datav.getUint8(this.pos++, true);\n      this.palette[i] = {\n        red: red,\n        green: green,\n        blue: blue,\n        quad: quad\n      };\n    }\n  }\n  if (this.height < 0) {\n    this.height *= -1;\n    this.bottom_up = false;\n  }\n};\n\nBmpDecoder.prototype.parseBGR = function() {\n  this.pos = this.offset;\n  try {\n    var bitn = \"bit\" + this.bitPP;\n    var len = this.width * this.height * 4;\n    this.data = new Uint8Array(len);\n\n    this[bitn]();\n  } catch (e) {\n    console.log(\"bit decode error:\" + e);\n  }\n};\n\nBmpDecoder.prototype.bit1 = function() {\n  var xlen = Math.ceil(this.width / 8);\n  var mode = xlen % 4;\n  var y;\n  for (y = this.height - 1; y >= 0; y--) {\n    var line = this.bottom_up ? y : this.height - 1 - y;\n    for (var x = 0; x < xlen; x++) {\n      var b = this.datav.getUint8(this.pos++, true);\n      var location = line * this.width * 4 + x * 8 * 4;\n      for (var i = 0; i < 8; i++) {\n        if (x * 8 + i < this.width) {\n          var rgb = this.palette[(b >> (7 - i)) & 0x1];\n          this.data[location + i * 4] = rgb.blue;\n          this.data[location + i * 4 + 1] = rgb.green;\n          this.data[location + i * 4 + 2] = rgb.red;\n          this.data[location + i * 4 + 3] = 0xff;\n        } else {\n          break;\n        }\n      }\n    }\n\n    if (mode !== 0) {\n      this.pos += 4 - mode;\n    }\n  }\n};\n\nBmpDecoder.prototype.bit4 = function() {\n  var xlen = Math.ceil(this.width / 2);\n  var mode = xlen % 4;\n  for (var y = this.height - 1; y >= 0; y--) {\n    var line = this.bottom_up ? y : this.height - 1 - y;\n    for (var x = 0; x < xlen; x++) {\n      var b = this.datav.getUint8(this.pos++, true);\n      var location = line * this.width * 4 + x * 2 * 4;\n\n      var before = b >> 4;\n      var after = b & 0x0f;\n\n      var rgb = this.palette[before];\n      this.data[location] = rgb.blue;\n      this.data[location + 1] = rgb.green;\n      this.data[location + 2] = rgb.red;\n      this.data[location + 3] = 0xff;\n\n      if (x * 2 + 1 >= this.width) break;\n\n      rgb = this.palette[after];\n      this.data[location + 4] = rgb.blue;\n      this.data[location + 4 + 1] = rgb.green;\n      this.data[location + 4 + 2] = rgb.red;\n      this.data[location + 4 + 3] = 0xff;\n    }\n\n    if (mode !== 0) {\n      this.pos += 4 - mode;\n    }\n  }\n};\n\nBmpDecoder.prototype.bit8 = function() {\n  var mode = this.width % 4;\n  for (var y = this.height - 1; y >= 0; y--) {\n    var line = this.bottom_up ? y : this.height - 1 - y;\n    for (var x = 0; x < this.width; x++) {\n      var b = this.datav.getUint8(this.pos++, true);\n      var location = line * this.width * 4 + x * 4;\n      if (b < this.palette.length) {\n        var rgb = this.palette[b];\n        this.data[location] = rgb.red;\n        this.data[location + 1] = rgb.green;\n        this.data[location + 2] = rgb.blue;\n        this.data[location + 3] = 0xff;\n      } else {\n        this.data[location] = 0xff;\n        this.data[location + 1] = 0xff;\n        this.data[location + 2] = 0xff;\n        this.data[location + 3] = 0xff;\n      }\n    }\n    if (mode !== 0) {\n      this.pos += 4 - mode;\n    }\n  }\n};\n\nBmpDecoder.prototype.bit15 = function() {\n  var dif_w = this.width % 3;\n  var _11111 = parseInt(\"11111\", 2),\n    _1_5 = _11111;\n  for (var y = this.height - 1; y >= 0; y--) {\n    var line = this.bottom_up ? y : this.height - 1 - y;\n    for (var x = 0; x < this.width; x++) {\n      var B = this.datav.getUint16(this.pos, true);\n      this.pos += 2;\n      var blue = (((B & _1_5) / _1_5) * 255) | 0;\n      var green = ((((B >> 5) & _1_5) / _1_5) * 255) | 0;\n      var red = ((((B >> 10) & _1_5) / _1_5) * 255) | 0;\n      var alpha = B >> 15 ? 0xff : 0x00;\n\n      var location = line * this.width * 4 + x * 4;\n      this.data[location] = red;\n      this.data[location + 1] = green;\n      this.data[location + 2] = blue;\n      this.data[location + 3] = alpha;\n    }\n    //skip extra bytes\n    this.pos += dif_w;\n  }\n};\n\nBmpDecoder.prototype.bit16 = function() {\n  var dif_w = this.width % 3;\n  var _11111 = parseInt(\"11111\", 2),\n    _1_5 = _11111;\n  var _111111 = parseInt(\"111111\", 2),\n    _1_6 = _111111;\n  for (var y = this.height - 1; y >= 0; y--) {\n    var line = this.bottom_up ? y : this.height - 1 - y;\n    for (var x = 0; x < this.width; x++) {\n      var B = this.datav.getUint16(this.pos, true);\n      this.pos += 2;\n      var alpha = 0xff;\n      var blue = (((B & _1_5) / _1_5) * 255) | 0;\n      var green = ((((B >> 5) & _1_6) / _1_6) * 255) | 0;\n      var red = (((B >> 11) / _1_5) * 255) | 0;\n\n      var location = line * this.width * 4 + x * 4;\n      this.data[location] = red;\n      this.data[location + 1] = green;\n      this.data[location + 2] = blue;\n      this.data[location + 3] = alpha;\n    }\n    //skip extra bytes\n    this.pos += dif_w;\n  }\n};\n\nBmpDecoder.prototype.bit24 = function() {\n  //when height > 0\n  for (var y = this.height - 1; y >= 0; y--) {\n    var line = this.bottom_up ? y : this.height - 1 - y;\n    for (var x = 0; x < this.width; x++) {\n      var blue = this.datav.getUint8(this.pos++, true);\n      var green = this.datav.getUint8(this.pos++, true);\n      var red = this.datav.getUint8(this.pos++, true);\n      var location = line * this.width * 4 + x * 4;\n      this.data[location] = red;\n      this.data[location + 1] = green;\n      this.data[location + 2] = blue;\n      this.data[location + 3] = 0xff;\n    }\n    //skip extra bytes\n    this.pos += this.width % 4;\n  }\n};\n\n/**\n * add 32bit decode func\n * @author soubok\n */\nBmpDecoder.prototype.bit32 = function() {\n  //when height > 0\n  for (var y = this.height - 1; y >= 0; y--) {\n    var line = this.bottom_up ? y : this.height - 1 - y;\n    for (var x = 0; x < this.width; x++) {\n      var blue = this.datav.getUint8(this.pos++, true);\n      var green = this.datav.getUint8(this.pos++, true);\n      var red = this.datav.getUint8(this.pos++, true);\n      var alpha = this.datav.getUint8(this.pos++, true);\n      var location = line * this.width * 4 + x * 4;\n      this.data[location] = red;\n      this.data[location + 1] = green;\n      this.data[location + 2] = blue;\n      this.data[location + 3] = alpha;\n    }\n    //skip extra bytes\n    //this.pos += (this.width % 4);\n  }\n};\n\nBmpDecoder.prototype.getData = function() {\n  return this.data;\n};\n\nexport { BmpDecoder };\n","function WebPDecoder(imageData) {\n  /** @license\n   * Copyright 2011 Google Inc.\n   *\n   * This code is licensed under the same terms as WebM:\n   *  Software License Agreement:  http://www.webmproject.org/license/software/\n   *  Additional IP Rights Grant:  http://www.webmproject.org/license/additional/\n   * -----------------------------------------------------------------------------\n   *\n   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n   * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n   * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n   * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n   * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n   * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n   * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n   * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n   * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n   *\n   * -----------------------------------------------------------------------------\n   *\n   * Copyright 2011-2017 Dominik Homberger\n   * Libwebp Javascript / libwebpjs - the libwebp implementation in javascript (v0.6.0)\n   *\n   * Author: Dominik Homberger (dominik.homberger@gmail.com)\n   */\n\n  var self = this;\n  var UpsampleRgbLinePair,\n    UpsampleBgrLinePair,\n    UpsampleRgbaLinePair,\n    UpsampleBgraLinePair,\n    UpsampleArgbLinePair,\n    UpsampleArgbLinePair,\n    UpsampleRgba4444LinePair,\n    UpsampleRgb565LinePair;\n\n  function x(F) {\n    if (!F) throw Error(\"assert :P\");\n  }\n  function fa(F, L, J) {\n    for (var H = 0; 4 > H; H++) if (F[L + H] != J.charCodeAt(H)) return !0;\n    return !1;\n  }\n  function I(F, L, J, H, Z) {\n    for (var O = 0; O < Z; O++) F[L + O] = J[H + O];\n  }\n  function M(F, L, J, H) {\n    for (var Z = 0; Z < H; Z++) F[L + Z] = J;\n  }\n  function V(F) {\n    return new Int32Array(F);\n  }\n  function wa(F, L) {\n    for (var J = [], H = 0; H < F; H++) J.push(new L());\n    return J;\n  }\n  function wb() {\n    function F(J, H, Z) {\n      for (var O = Z[H], L = 0; L < O; L++) {\n        J.push(Z.length > H + 1 ? [] : 0);\n        if (Z.length < H + 1) break;\n        F(J[L], H + 1, Z);\n      }\n    }\n    var L = [];\n    F(L, 0, [3, 11]);\n    return L;\n  }\n  function Ed(F, L) {\n    function J(H, O, F) {\n      for (var Z = F[O], ma = 0; ma < Z; ma++) {\n        H.push(F.length > O + 1 ? [] : new L());\n        if (F.length < O + 1) break;\n        J(H[ma], O + 1, F);\n      }\n    }\n    var H = [];\n    J(H, 0, F);\n    return H;\n  }\n  var _WebPDecoder = function() {\n    var self = this;\n    function F() {\n      V(55);\n    }\n    function L(a, b) {\n      for (var c = (1 << (b - 1)) >>> 0; a & c; ) c >>>= 1;\n      return c ? (a & (c - 1)) + c : a;\n    }\n    function J(a, b, c, d, e) {\n      x(!(d % c));\n      do (d -= c), (a[b + d] = e);\n      while (0 < d);\n    }\n    function H(a, b, c, d, e, f) {\n      var g = b,\n        h = 1 << c,\n        k,\n        l,\n        m = V(16),\n        n = V(16);\n      x(0 != e);\n      x(null != d);\n      x(null != a);\n      x(0 < c);\n      for (l = 0; l < e; ++l) {\n        if (15 < d[l]) return 0;\n        ++m[d[l]];\n      }\n      if (m[0] == e) return 0;\n      n[1] = 0;\n      for (k = 1; 15 > k; ++k) {\n        if (m[k] > 1 << k) return 0;\n        n[k + 1] = n[k] + m[k];\n      }\n      for (l = 0; l < e; ++l) (k = d[l]), 0 < d[l] && (f[n[k]++] = l);\n      if (1 == n[15])\n        return (d = new O()), (d.g = 0), (d.value = f[0]), J(a, g, 1, h, d), h;\n      var r = -1,\n        q = h - 1,\n        t = 0,\n        v = 1,\n        p = 1,\n        u,\n        w = 1 << c;\n      l = 0;\n      k = 1;\n      for (e = 2; k <= c; ++k, e <<= 1) {\n        p <<= 1;\n        v += p;\n        p -= m[k];\n        if (0 > p) return 0;\n        for (; 0 < m[k]; --m[k])\n          (d = new O()),\n            (d.g = k),\n            (d.value = f[l++]),\n            J(a, g + t, e, w, d),\n            (t = L(t, k));\n      }\n      k = c + 1;\n      for (e = 2; 15 >= k; ++k, e <<= 1) {\n        p <<= 1;\n        v += p;\n        p -= m[k];\n        if (0 > p) return 0;\n        for (; 0 < m[k]; --m[k]) {\n          d = new O();\n          if ((t & q) != r) {\n            g += w;\n            r = k;\n            for (u = 1 << (r - c); 15 > r; ) {\n              u -= m[r];\n              if (0 >= u) break;\n              ++r;\n              u <<= 1;\n            }\n            u = r - c;\n            w = 1 << u;\n            h += w;\n            r = t & q;\n            a[b + r].g = u + c;\n            a[b + r].value = g - b - r;\n          }\n          d.g = k - c;\n          d.value = f[l++];\n          J(a, g + (t >> c), e, w, d);\n          t = L(t, k);\n        }\n      }\n      return v != 2 * n[15] - 1 ? 0 : h;\n    }\n    function Z(a, b, c, d, e) {\n      x(2328 >= e);\n      if (512 >= e) var f = V(512);\n      else if (((f = V(e)), null == f)) return 0;\n      return H(a, b, c, d, e, f);\n    }\n    function O() {\n      this.value = this.g = 0;\n    }\n    function Fd() {\n      this.value = this.g = 0;\n    }\n    function Ub() {\n      this.G = wa(5, O);\n      this.H = V(5);\n      this.jc = this.Qb = this.qb = this.nd = 0;\n      this.pd = wa(xb, Fd);\n    }\n    function ma(a, b, c, d) {\n      x(null != a);\n      x(null != b);\n      x(2147483648 > d);\n      a.Ca = 254;\n      a.I = 0;\n      a.b = -8;\n      a.Ka = 0;\n      a.oa = b;\n      a.pa = c;\n      a.Jd = b;\n      a.Yc = c + d;\n      a.Zc = 4 <= d ? c + d - 4 + 1 : c;\n      Qa(a);\n    }\n    function na(a, b) {\n      for (var c = 0; 0 < b--; ) c |= K(a, 128) << b;\n      return c;\n    }\n    function ca(a, b) {\n      var c = na(a, b);\n      return G(a) ? -c : c;\n    }\n    function cb(a, b, c, d) {\n      var e,\n        f = 0;\n      x(null != a);\n      x(null != b);\n      x(4294967288 > d);\n      a.Sb = d;\n      a.Ra = 0;\n      a.u = 0;\n      a.h = 0;\n      4 < d && (d = 4);\n      for (e = 0; e < d; ++e) f += b[c + e] << (8 * e);\n      a.Ra = f;\n      a.bb = d;\n      a.oa = b;\n      a.pa = c;\n    }\n    function Vb(a) {\n      for (; 8 <= a.u && a.bb < a.Sb; )\n        (a.Ra >>>= 8),\n          (a.Ra += (a.oa[a.pa + a.bb] << (ob - 8)) >>> 0),\n          ++a.bb,\n          (a.u -= 8);\n      db(a) && ((a.h = 1), (a.u = 0));\n    }\n    function D(a, b) {\n      x(0 <= b);\n      if (!a.h && b <= Gd) {\n        var c = pb(a) & Hd[b];\n        a.u += b;\n        Vb(a);\n        return c;\n      }\n      a.h = 1;\n      return (a.u = 0);\n    }\n    function Wb() {\n      this.b = this.Ca = this.I = 0;\n      this.oa = [];\n      this.pa = 0;\n      this.Jd = [];\n      this.Yc = 0;\n      this.Zc = [];\n      this.Ka = 0;\n    }\n    function Ra() {\n      this.Ra = 0;\n      this.oa = [];\n      this.h = this.u = this.bb = this.Sb = this.pa = 0;\n    }\n    function pb(a) {\n      return (a.Ra >>> (a.u & (ob - 1))) >>> 0;\n    }\n    function db(a) {\n      x(a.bb <= a.Sb);\n      return a.h || (a.bb == a.Sb && a.u > ob);\n    }\n    function qb(a, b) {\n      a.u = b;\n      a.h = db(a);\n    }\n    function Sa(a) {\n      a.u >= Xb && (x(a.u >= Xb), Vb(a));\n    }\n    function Qa(a) {\n      x(null != a && null != a.oa);\n      a.pa < a.Zc\n        ? ((a.I = (a.oa[a.pa++] | (a.I << 8)) >>> 0), (a.b += 8))\n        : (x(null != a && null != a.oa),\n          a.pa < a.Yc\n            ? ((a.b += 8), (a.I = a.oa[a.pa++] | (a.I << 8)))\n            : a.Ka\n            ? (a.b = 0)\n            : ((a.I <<= 8), (a.b += 8), (a.Ka = 1)));\n    }\n    function G(a) {\n      return na(a, 1);\n    }\n    function K(a, b) {\n      var c = a.Ca;\n      0 > a.b && Qa(a);\n      var d = a.b,\n        e = (c * b) >>> 8,\n        f = (a.I >>> d > e) + 0;\n      f ? ((c -= e), (a.I -= ((e + 1) << d) >>> 0)) : (c = e + 1);\n      d = c;\n      for (e = 0; 256 <= d; ) (e += 8), (d >>= 8);\n      d = 7 ^ (e + Id[d]);\n      a.b -= d;\n      a.Ca = (c << d) - 1;\n      return f;\n    }\n    function ra(a, b, c) {\n      a[b + 0] = (c >> 24) & 255;\n      a[b + 1] = (c >> 16) & 255;\n      a[b + 2] = (c >> 8) & 255;\n      a[b + 3] = (c >> 0) & 255;\n    }\n    function Ta(a, b) {\n      return (a[b + 0] << 0) | (a[b + 1] << 8);\n    }\n    function Yb(a, b) {\n      return Ta(a, b) | (a[b + 2] << 16);\n    }\n    function Ha(a, b) {\n      return Ta(a, b) | (Ta(a, b + 2) << 16);\n    }\n    function Zb(a, b) {\n      var c = 1 << b;\n      x(null != a);\n      x(0 < b);\n      a.X = V(c);\n      if (null == a.X) return 0;\n      a.Mb = 32 - b;\n      a.Xa = b;\n      return 1;\n    }\n    function $b(a, b) {\n      x(null != a);\n      x(null != b);\n      x(a.Xa == b.Xa);\n      I(b.X, 0, a.X, 0, 1 << b.Xa);\n    }\n    function ac() {\n      this.X = [];\n      this.Xa = this.Mb = 0;\n    }\n    function bc(a, b, c, d) {\n      x(null != c);\n      x(null != d);\n      var e = c[0],\n        f = d[0];\n      0 == e && (e = (a * f + b / 2) / b);\n      0 == f && (f = (b * e + a / 2) / a);\n      if (0 >= e || 0 >= f) return 0;\n      c[0] = e;\n      d[0] = f;\n      return 1;\n    }\n    function xa(a, b) {\n      return (a + (1 << b) - 1) >>> b;\n    }\n    function yb(a, b) {\n      return (\n        (((((a & 4278255360) + (b & 4278255360)) >>> 0) & 4278255360) +\n          ((((a & 16711935) + (b & 16711935)) >>> 0) & 16711935)) >>>\n        0\n      );\n    }\n    function X(a, b) {\n      self[b] = function(b, d, e, f, g, h, k) {\n        var c;\n        for (c = 0; c < g; ++c) {\n          var m = self[a](h[k + c - 1], e, f + c);\n          h[k + c] = yb(b[d + c], m);\n        }\n      };\n    }\n    function Jd() {\n      this.ud = this.hd = this.jd = 0;\n    }\n    function aa(a, b) {\n      return ((((a ^ b) & 4278124286) >>> 1) + (a & b)) >>> 0;\n    }\n    function sa(a) {\n      if (0 <= a && 256 > a) return a;\n      if (0 > a) return 0;\n      if (255 < a) return 255;\n    }\n    function eb(a, b) {\n      return sa(a + ((a - b + 0.5) >> 1));\n    }\n    function Ia(a, b, c) {\n      return Math.abs(b - c) - Math.abs(a - c);\n    }\n    function cc(a, b, c, d, e, f, g) {\n      d = f[g - 1];\n      for (c = 0; c < e; ++c) f[g + c] = d = yb(a[b + c], d);\n    }\n    function Kd(a, b, c, d, e) {\n      var f;\n      for (f = 0; f < c; ++f) {\n        var g = a[b + f],\n          h = (g >> 8) & 255,\n          k = g & 16711935,\n          k = k + ((h << 16) + h),\n          k = k & 16711935;\n        d[e + f] = ((g & 4278255360) + k) >>> 0;\n      }\n    }\n    function dc(a, b) {\n      b.jd = (a >> 0) & 255;\n      b.hd = (a >> 8) & 255;\n      b.ud = (a >> 16) & 255;\n    }\n    function Ld(a, b, c, d, e, f) {\n      var g;\n      for (g = 0; g < d; ++g) {\n        var h = b[c + g],\n          k = h >>> 8,\n          l = h >>> 16,\n          m = h,\n          l = l + ((((a.jd << 24) >> 24) * ((k << 24) >> 24)) >>> 5),\n          l = l & 255,\n          m = m + ((((a.hd << 24) >> 24) * ((k << 24) >> 24)) >>> 5),\n          m = m + ((((a.ud << 24) >> 24) * ((l << 24) >> 24)) >>> 5),\n          m = m & 255;\n        e[f + g] = (h & 4278255360) + (l << 16) + m;\n      }\n    }\n    function ec(a, b, c, d, e) {\n      self[b] = function(a, b, c, k, l, m, n, r, q) {\n        for (k = n; k < r; ++k)\n          for (n = 0; n < q; ++n) l[m++] = e(c[d(a[b++])]);\n      };\n      self[a] = function(a, b, h, k, l, m, n) {\n        var f = 8 >> a.b,\n          g = a.Ea,\n          t = a.K[0],\n          v = a.w;\n        if (8 > f)\n          for (a = (1 << a.b) - 1, v = (1 << f) - 1; b < h; ++b) {\n            var p = 0,\n              u;\n            for (u = 0; u < g; ++u)\n              u & a || (p = d(k[l++])), (m[n++] = e(t[p & v])), (p >>= f);\n          }\n        else self[\"VP8LMapColor\" + c](k, l, t, v, m, n, b, h, g);\n      };\n    }\n    function Md(a, b, c, d, e) {\n      for (c = b + c; b < c; ) {\n        var f = a[b++];\n        d[e++] = (f >> 16) & 255;\n        d[e++] = (f >> 8) & 255;\n        d[e++] = (f >> 0) & 255;\n      }\n    }\n    function Nd(a, b, c, d, e) {\n      for (c = b + c; b < c; ) {\n        var f = a[b++];\n        d[e++] = (f >> 16) & 255;\n        d[e++] = (f >> 8) & 255;\n        d[e++] = (f >> 0) & 255;\n        d[e++] = (f >> 24) & 255;\n      }\n    }\n    function Od(a, b, c, d, e) {\n      for (c = b + c; b < c; ) {\n        var f = a[b++],\n          g = ((f >> 16) & 240) | ((f >> 12) & 15),\n          f = ((f >> 0) & 240) | ((f >> 28) & 15);\n        d[e++] = g;\n        d[e++] = f;\n      }\n    }\n    function Pd(a, b, c, d, e) {\n      for (c = b + c; b < c; ) {\n        var f = a[b++],\n          g = ((f >> 16) & 248) | ((f >> 13) & 7),\n          f = ((f >> 5) & 224) | ((f >> 3) & 31);\n        d[e++] = g;\n        d[e++] = f;\n      }\n    }\n    function Qd(a, b, c, d, e) {\n      for (c = b + c; b < c; ) {\n        var f = a[b++];\n        d[e++] = (f >> 0) & 255;\n        d[e++] = (f >> 8) & 255;\n        d[e++] = (f >> 16) & 255;\n      }\n    }\n    function fb(a, b, c, d, e, f) {\n      if (0 == f)\n        for (c = b + c; b < c; )\n          (f = a[b++]),\n            ra(\n              d,\n              ((f[0] >> 24) |\n                ((f[1] >> 8) & 65280) |\n                ((f[2] << 8) & 16711680) |\n                (f[3] << 24)) >>>\n                0\n            ),\n            (e += 32);\n      else I(d, e, a, b, c);\n    }\n    function gb(a, b) {\n      self[b][0] = self[a + \"0\"];\n      self[b][1] = self[a + \"1\"];\n      self[b][2] = self[a + \"2\"];\n      self[b][3] = self[a + \"3\"];\n      self[b][4] = self[a + \"4\"];\n      self[b][5] = self[a + \"5\"];\n      self[b][6] = self[a + \"6\"];\n      self[b][7] = self[a + \"7\"];\n      self[b][8] = self[a + \"8\"];\n      self[b][9] = self[a + \"9\"];\n      self[b][10] = self[a + \"10\"];\n      self[b][11] = self[a + \"11\"];\n      self[b][12] = self[a + \"12\"];\n      self[b][13] = self[a + \"13\"];\n      self[b][14] = self[a + \"0\"];\n      self[b][15] = self[a + \"0\"];\n    }\n    function hb(a) {\n      return a == zb || a == Ab || a == Ja || a == Bb;\n    }\n    function Rd() {\n      this.eb = [];\n      this.size = this.A = this.fb = 0;\n    }\n    function Sd() {\n      this.y = [];\n      this.f = [];\n      this.ea = [];\n      this.F = [];\n      this.Tc = this.Ed = this.Cd = this.Fd = this.lb = this.Db = this.Ab = this.fa = this.J = this.W = this.N = this.O = 0;\n    }\n    function Cb() {\n      this.Rd = this.height = this.width = this.S = 0;\n      this.f = {};\n      this.f.RGBA = new Rd();\n      this.f.kb = new Sd();\n      this.sd = null;\n    }\n    function Td() {\n      this.width = [0];\n      this.height = [0];\n      this.Pd = [0];\n      this.Qd = [0];\n      this.format = [0];\n    }\n    function Ud() {\n      this.Id = this.fd = this.Md = this.hb = this.ib = this.da = this.bd = this.cd = this.j = this.v = this.Da = this.Sd = this.ob = 0;\n    }\n    function Vd(a) {\n      alert(\"todo:WebPSamplerProcessPlane\");\n      return a.T;\n    }\n    function Wd(a, b) {\n      var c = a.T,\n        d = b.ba.f.RGBA,\n        e = d.eb,\n        f = d.fb + a.ka * d.A,\n        g = P[b.ba.S],\n        h = a.y,\n        k = a.O,\n        l = a.f,\n        m = a.N,\n        n = a.ea,\n        r = a.W,\n        q = b.cc,\n        t = b.dc,\n        v = b.Mc,\n        p = b.Nc,\n        u = a.ka,\n        w = a.ka + a.T,\n        y = a.U,\n        A = (y + 1) >> 1;\n      0 == u\n        ? g(h, k, null, null, l, m, n, r, l, m, n, r, e, f, null, null, y)\n        : (g(b.ec, b.fc, h, k, q, t, v, p, l, m, n, r, e, f - d.A, e, f, y),\n          ++c);\n      for (; u + 2 < w; u += 2)\n        (q = l),\n          (t = m),\n          (v = n),\n          (p = r),\n          (m += a.Rc),\n          (r += a.Rc),\n          (f += 2 * d.A),\n          (k += 2 * a.fa),\n          g(h, k - a.fa, h, k, q, t, v, p, l, m, n, r, e, f - d.A, e, f, y);\n      k += a.fa;\n      a.j + w < a.o\n        ? (I(b.ec, b.fc, h, k, y),\n          I(b.cc, b.dc, l, m, A),\n          I(b.Mc, b.Nc, n, r, A),\n          c--)\n        : w & 1 ||\n          g(\n            h,\n            k,\n            null,\n            null,\n            l,\n            m,\n            n,\n            r,\n            l,\n            m,\n            n,\n            r,\n            e,\n            f + d.A,\n            null,\n            null,\n            y\n          );\n      return c;\n    }\n    function Xd(a, b, c) {\n      var d = a.F,\n        e = [a.J];\n      if (null != d) {\n        var f = a.U,\n          g = b.ba.S,\n          h = g == ya || g == Ja;\n        b = b.ba.f.RGBA;\n        var k = [0],\n          l = a.ka;\n        k[0] = a.T;\n        a.Kb &&\n          (0 == l ? --k[0] : (--l, (e[0] -= a.width)),\n          a.j + a.ka + a.T == a.o && (k[0] = a.o - a.j - l));\n        var m = b.eb,\n          l = b.fb + l * b.A;\n        a = fc(d, e[0], a.width, f, k, m, l + (h ? 0 : 3), b.A);\n        x(c == k);\n        a && hb(g) && za(m, l, h, f, k, b.A);\n      }\n      return 0;\n    }\n    function gc(a) {\n      var b = a.ma,\n        c = b.ba.S,\n        d = 11 > c,\n        e = c == Ua || c == Va || c == ya || c == Db || 12 == c || hb(c);\n      b.memory = null;\n      b.Ib = null;\n      b.Jb = null;\n      b.Nd = null;\n      if (!hc(b.Oa, a, e ? 11 : 12)) return 0;\n      e && hb(c) && ic();\n      if (a.da) alert(\"todo:use_scaling\");\n      else {\n        if (d) {\n          if (((b.Ib = Vd), a.Kb)) {\n            c = (a.U + 1) >> 1;\n            b.memory = V(a.U + 2 * c);\n            if (null == b.memory) return 0;\n            b.ec = b.memory;\n            b.fc = 0;\n            b.cc = b.ec;\n            b.dc = b.fc + a.U;\n            b.Mc = b.cc;\n            b.Nc = b.dc + c;\n            b.Ib = Wd;\n            ic();\n          }\n        } else alert(\"todo:EmitYUV\");\n        e && ((b.Jb = Xd), d && Aa());\n      }\n      if (d && !jc) {\n        for (a = 0; 256 > a; ++a)\n          (Yd[a] = (89858 * (a - 128) + Ba) >> Wa),\n            (Zd[a] = -22014 * (a - 128) + Ba),\n            ($d[a] = -45773 * (a - 128)),\n            (ae[a] = (113618 * (a - 128) + Ba) >> Wa);\n        for (a = ta; a < Eb; ++a)\n          (b = (76283 * (a - 16) + Ba) >> Wa),\n            (be[a - ta] = ga(b, 255)),\n            (ce[a - ta] = ga((b + 8) >> 4, 15));\n        jc = 1;\n      }\n      return 1;\n    }\n    function kc(a) {\n      var b = a.ma,\n        c = a.U,\n        d = a.T;\n      x(!(a.ka & 1));\n      if (0 >= c || 0 >= d) return 0;\n      c = b.Ib(a, b);\n      null != b.Jb && b.Jb(a, b, c);\n      b.Dc += c;\n      return 1;\n    }\n    function lc(a) {\n      a.ma.memory = null;\n    }\n    function mc(a, b, c, d) {\n      if (47 != D(a, 8)) return 0;\n      b[0] = D(a, 14) + 1;\n      c[0] = D(a, 14) + 1;\n      d[0] = D(a, 1);\n      return 0 != D(a, 3) ? 0 : !a.h;\n    }\n    function ib(a, b) {\n      if (4 > a) return a + 1;\n      var c = (a - 2) >> 1;\n      return ((2 + (a & 1)) << c) + D(b, c) + 1;\n    }\n    function nc(a, b) {\n      if (120 < b) return b - 120;\n      var c = de[b - 1],\n        c = (c >> 4) * a + (8 - (c & 15));\n      return 1 <= c ? c : 1;\n    }\n    function ua(a, b, c) {\n      var d = pb(c);\n      b += d & 255;\n      var e = a[b].g - 8;\n      0 < e &&\n        (qb(c, c.u + 8),\n        (d = pb(c)),\n        (b += a[b].value),\n        (b += d & ((1 << e) - 1)));\n      qb(c, c.u + a[b].g);\n      return a[b].value;\n    }\n    function ub(a, b, c) {\n      c.g += a.g;\n      c.value += (a.value << b) >>> 0;\n      x(8 >= c.g);\n      return a.g;\n    }\n    function ha(a, b, c) {\n      var d = a.xc;\n      b = 0 == d ? 0 : a.vc[a.md * (c >> d) + (b >> d)];\n      x(b < a.Wb);\n      return a.Ya[b];\n    }\n    function oc(a, b, c, d) {\n      var e = a.ab,\n        f = a.c * b,\n        g = a.C;\n      b = g + b;\n      var h = c,\n        k = d;\n      d = a.Ta;\n      for (c = a.Ua; 0 < e--; ) {\n        var l = a.gc[e],\n          m = g,\n          n = b,\n          r = h,\n          q = k,\n          k = d,\n          h = c,\n          t = l.Ea;\n        x(m < n);\n        x(n <= l.nc);\n        switch (l.hc) {\n          case 2:\n            pc(r, q, (n - m) * t, k, h);\n            break;\n          case 0:\n            var v = l,\n              p = m,\n              u = n,\n              w = k,\n              y = h,\n              A = v.Ea;\n            0 == p &&\n              (ee(r, q, null, null, 1, w, y),\n              cc(r, q + 1, 0, 0, A - 1, w, y + 1),\n              (q += A),\n              (y += A),\n              ++p);\n            for (\n              var E = 1 << v.b,\n                B = E - 1,\n                C = xa(A, v.b),\n                N = v.K,\n                v = v.w + (p >> v.b) * C;\n              p < u;\n\n            ) {\n              var z = N,\n                Q = v,\n                S = 1;\n              for (fe(r, q, w, y - A, 1, w, y); S < A; ) {\n                var K = qc[(z[Q++] >> 8) & 15],\n                  D = (S & ~B) + E;\n                D > A && (D = A);\n                K(r, q + +S, w, y + S - A, D - S, w, y + S);\n                S = D;\n              }\n              q += A;\n              y += A;\n              ++p;\n              p & B || (v += C);\n            }\n            n != l.nc && I(k, h - t, k, h + (n - m - 1) * t, t);\n            break;\n          case 1:\n            t = r;\n            u = q;\n            r = l.Ea;\n            q = 1 << l.b;\n            w = q - 1;\n            y = r & ~w;\n            A = r - y;\n            p = xa(r, l.b);\n            E = l.K;\n            for (l = l.w + (m >> l.b) * p; m < n; ) {\n              B = E;\n              C = l;\n              N = new Jd();\n              v = u + y;\n              for (z = u + r; u < v; )\n                dc(B[C++], N), Fb(N, t, u, q, k, h), (u += q), (h += q);\n              u < z &&\n                (dc(B[C++], N), Fb(N, t, u, A, k, h), (u += A), (h += A));\n              ++m;\n              m & w || (l += p);\n            }\n            break;\n          case 3:\n            if (r == k && q == h && 0 < l.b) {\n              y = (n - m) * xa(l.Ea, l.b);\n              t = h + (n - m) * t - y;\n              u = k;\n              r = t;\n              q = k;\n              w = h;\n              A = y;\n              p = [];\n              for (y = A - 1; 0 <= y; --y) p[y] = q[w + y];\n              for (y = A - 1; 0 <= y; --y) u[r + y] = p[y];\n              rc(l, m, n, k, t, k, h);\n            } else rc(l, m, n, r, q, k, h);\n        }\n        h = d;\n        k = c;\n      }\n      k != c && I(d, c, h, k, f);\n    }\n    function ge(a, b) {\n      var c = a.V,\n        d = a.Ba + a.c * a.C,\n        e = b - a.C;\n      x(b <= a.l.o);\n      x(16 >= e);\n      if (0 < e) {\n        var f = a.l,\n          g = a.Ta,\n          h = a.Ua,\n          k = f.width;\n        oc(a, e, c, d);\n        h = [h];\n        c = a.C;\n        d = b;\n        e = h;\n        x(c < d);\n        x(f.v < f.va);\n        d > f.o && (d = f.o);\n        if (c < f.j) {\n          var l = f.j - c,\n            c = f.j;\n          e[0] += l * k;\n        }\n        c >= d\n          ? (c = 0)\n          : ((e[0] += 4 * f.v),\n            (f.ka = c - f.j),\n            (f.U = f.va - f.v),\n            (f.T = d - c),\n            (c = 1));\n        if (c) {\n          h = h[0];\n          c = a.ca;\n          if (11 > c.S) {\n            for (\n              var m = c.f.RGBA,\n                d = c.S,\n                e = f.U,\n                f = f.T,\n                l = m.eb,\n                n = m.A,\n                r = f,\n                m = m.fb + a.Ma * m.A;\n              0 < r--;\n\n            ) {\n              var q = g,\n                t = h,\n                v = e,\n                p = l,\n                u = m;\n              switch (d) {\n                case Ca:\n                  sc(q, t, v, p, u);\n                  break;\n                case Ua:\n                  Gb(q, t, v, p, u);\n                  break;\n                case zb:\n                  Gb(q, t, v, p, u);\n                  za(p, u, 0, v, 1, 0);\n                  break;\n                case tc:\n                  uc(q, t, v, p, u);\n                  break;\n                case Va:\n                  fb(q, t, v, p, u, 1);\n                  break;\n                case Ab:\n                  fb(q, t, v, p, u, 1);\n                  za(p, u, 0, v, 1, 0);\n                  break;\n                case ya:\n                  fb(q, t, v, p, u, 0);\n                  break;\n                case Ja:\n                  fb(q, t, v, p, u, 0);\n                  za(p, u, 1, v, 1, 0);\n                  break;\n                case Db:\n                  Hb(q, t, v, p, u);\n                  break;\n                case Bb:\n                  Hb(q, t, v, p, u);\n                  vc(p, u, v, 1, 0);\n                  break;\n                case wc:\n                  xc(q, t, v, p, u);\n                  break;\n                default:\n                  x(0);\n              }\n              h += k;\n              m += n;\n            }\n            a.Ma += f;\n          } else alert(\"todo:EmitRescaledRowsYUVA\");\n          x(a.Ma <= c.height);\n        }\n      }\n      a.C = b;\n      x(a.C <= a.i);\n    }\n    function yc(a) {\n      var b;\n      if (0 < a.ua) return 0;\n      for (b = 0; b < a.Wb; ++b) {\n        var c = a.Ya[b].G,\n          d = a.Ya[b].H;\n        if (\n          0 < c[1][d[1] + 0].g ||\n          0 < c[2][d[2] + 0].g ||\n          0 < c[3][d[3] + 0].g\n        )\n          return 0;\n      }\n      return 1;\n    }\n    function zc(a, b, c, d, e, f) {\n      if (0 != a.Z) {\n        var g = a.qd,\n          h = a.rd;\n        for (x(null != ia[a.Z]); b < c; ++b)\n          ia[a.Z](g, h, d, e, d, e, f), (g = d), (h = e), (e += f);\n        a.qd = g;\n        a.rd = h;\n      }\n    }\n    function Ib(a, b) {\n      var c = a.l.ma,\n        d = 0 == c.Z || 1 == c.Z ? a.l.j : a.C,\n        d = a.C < d ? d : a.C;\n      x(b <= a.l.o);\n      if (b > d) {\n        var e = a.l.width,\n          f = c.ca,\n          g = c.tb + e * d,\n          h = a.V,\n          k = a.Ba + a.c * d,\n          l = a.gc;\n        x(1 == a.ab);\n        x(3 == l[0].hc);\n        he(l[0], d, b, h, k, f, g);\n        zc(c, d, b, f, g, e);\n      }\n      a.C = a.Ma = b;\n    }\n    function Jb(a, b, c, d, e, f, g) {\n      var h = a.$ / d,\n        k = a.$ % d,\n        l = a.m,\n        m = a.s,\n        n = c + a.$,\n        r = n;\n      e = c + d * e;\n      var q = c + d * f,\n        t = 280 + m.ua,\n        v = a.Pb ? h : 16777216,\n        p = 0 < m.ua ? m.Wa : null,\n        u = m.wc,\n        w = n < q ? ha(m, k, h) : null;\n      x(a.C < f);\n      x(q <= e);\n      var y = !1;\n      a: for (;;) {\n        for (; y || n < q; ) {\n          var A = 0;\n          if (h >= v) {\n            var v = a,\n              E = n - c;\n            x(v.Pb);\n            v.wd = v.m;\n            v.xd = E;\n            0 < v.s.ua && $b(v.s.Wa, v.s.vb);\n            v = h + ie;\n          }\n          k & u || (w = ha(m, k, h));\n          x(null != w);\n          w.Qb && ((b[n] = w.qb), (y = !0));\n          if (!y)\n            if ((Sa(l), w.jc)) {\n              var A = l,\n                E = b,\n                B = n,\n                C = w.pd[pb(A) & (xb - 1)];\n              x(w.jc);\n              256 > C.g\n                ? (qb(A, A.u + C.g), (E[B] = C.value), (A = 0))\n                : (qb(A, A.u + C.g - 256), x(256 <= C.value), (A = C.value));\n              0 == A && (y = !0);\n            } else A = ua(w.G[0], w.H[0], l);\n          if (l.h) break;\n          if (y || 256 > A) {\n            if (!y)\n              if (w.nd) b[n] = (w.qb | (A << 8)) >>> 0;\n              else {\n                Sa(l);\n                y = ua(w.G[1], w.H[1], l);\n                Sa(l);\n                E = ua(w.G[2], w.H[2], l);\n                B = ua(w.G[3], w.H[3], l);\n                if (l.h) break;\n                b[n] = ((B << 24) | (y << 16) | (A << 8) | E) >>> 0;\n              }\n            y = !1;\n            ++n;\n            ++k;\n            if (\n              k >= d &&\n              ((k = 0),\n              ++h,\n              null != g && h <= f && !(h % 16) && g(a, h),\n              null != p)\n            )\n              for (; r < n; )\n                (A = b[r++]),\n                  (p.X[((506832829 * A) & 4294967295) >>> p.Mb] = A);\n          } else if (280 > A) {\n            A = ib(A - 256, l);\n            E = ua(w.G[4], w.H[4], l);\n            Sa(l);\n            E = ib(E, l);\n            E = nc(d, E);\n            if (l.h) break;\n            if (n - c < E || e - n < A) break a;\n            else for (B = 0; B < A; ++B) b[n + B] = b[n + B - E];\n            n += A;\n            for (k += A; k >= d; )\n              (k -= d), ++h, null != g && h <= f && !(h % 16) && g(a, h);\n            x(n <= e);\n            k & u && (w = ha(m, k, h));\n            if (null != p)\n              for (; r < n; )\n                (A = b[r++]),\n                  (p.X[((506832829 * A) & 4294967295) >>> p.Mb] = A);\n          } else if (A < t) {\n            y = A - 280;\n            for (x(null != p); r < n; )\n              (A = b[r++]), (p.X[((506832829 * A) & 4294967295) >>> p.Mb] = A);\n            A = n;\n            E = p;\n            x(!(y >>> E.Xa));\n            b[A] = E.X[y];\n            y = !0;\n          } else break a;\n          y || x(l.h == db(l));\n        }\n        if (a.Pb && l.h && n < e)\n          x(a.m.h),\n            (a.a = 5),\n            (a.m = a.wd),\n            (a.$ = a.xd),\n            0 < a.s.ua && $b(a.s.vb, a.s.Wa);\n        else if (l.h) break a;\n        else null != g && g(a, h > f ? f : h), (a.a = 0), (a.$ = n - c);\n        return 1;\n      }\n      a.a = 3;\n      return 0;\n    }\n    function Ac(a) {\n      x(null != a);\n      a.vc = null;\n      a.yc = null;\n      a.Ya = null;\n      var b = a.Wa;\n      null != b && (b.X = null);\n      a.vb = null;\n      x(null != a);\n    }\n    function Bc() {\n      var a = new je();\n      if (null == a) return null;\n      a.a = 0;\n      a.xb = Cc;\n      gb(\"Predictor\", \"VP8LPredictors\");\n      gb(\"Predictor\", \"VP8LPredictors_C\");\n      gb(\"PredictorAdd\", \"VP8LPredictorsAdd\");\n      gb(\"PredictorAdd\", \"VP8LPredictorsAdd_C\");\n      pc = Kd;\n      Fb = Ld;\n      sc = Md;\n      Gb = Nd;\n      Hb = Od;\n      xc = Pd;\n      uc = Qd;\n      self.VP8LMapColor32b = ke;\n      self.VP8LMapColor8b = le;\n      return a;\n    }\n    function rb(a, b, c, d, e) {\n      var f = 1,\n        g = [a],\n        h = [b],\n        k = d.m,\n        l = d.s,\n        m = null,\n        n = 0;\n      a: for (;;) {\n        if (c)\n          for (; f && D(k, 1); ) {\n            var r = g,\n              q = h,\n              t = d,\n              v = 1,\n              p = t.m,\n              u = t.gc[t.ab],\n              w = D(p, 2);\n            if (t.Oc & (1 << w)) f = 0;\n            else {\n              t.Oc |= 1 << w;\n              u.hc = w;\n              u.Ea = r[0];\n              u.nc = q[0];\n              u.K = [null];\n              ++t.ab;\n              x(4 >= t.ab);\n              switch (w) {\n                case 0:\n                case 1:\n                  u.b = D(p, 3) + 2;\n                  v = rb(xa(u.Ea, u.b), xa(u.nc, u.b), 0, t, u.K);\n                  u.K = u.K[0];\n                  break;\n                case 3:\n                  var y = D(p, 8) + 1,\n                    A = 16 < y ? 0 : 4 < y ? 1 : 2 < y ? 2 : 3;\n                  r[0] = xa(u.Ea, A);\n                  u.b = A;\n                  var v = rb(y, 1, 0, t, u.K),\n                    E;\n                  if ((E = v)) {\n                    var B,\n                      C = y,\n                      N = u,\n                      z = 1 << (8 >> N.b),\n                      Q = V(z);\n                    if (null == Q) E = 0;\n                    else {\n                      var S = N.K[0],\n                        K = N.w;\n                      Q[0] = N.K[0][0];\n                      for (B = 1; B < 1 * C; ++B) Q[B] = yb(S[K + B], Q[B - 1]);\n                      for (; B < 4 * z; ++B) Q[B] = 0;\n                      N.K[0] = null;\n                      N.K[0] = Q;\n                      E = 1;\n                    }\n                  }\n                  v = E;\n                  break;\n                case 2:\n                  break;\n                default:\n                  x(0);\n              }\n              f = v;\n            }\n          }\n        g = g[0];\n        h = h[0];\n        if (f && D(k, 1) && ((n = D(k, 4)), (f = 1 <= n && 11 >= n), !f)) {\n          d.a = 3;\n          break a;\n        }\n        var H;\n        if ((H = f))\n          b: {\n            var F = d,\n              G = g,\n              L = h,\n              J = n,\n              T = c,\n              Da,\n              ba,\n              X = F.m,\n              R = F.s,\n              P = [null],\n              U,\n              W = 1,\n              aa = 0,\n              na = me[J];\n            c: for (;;) {\n              if (T && D(X, 1)) {\n                var ca = D(X, 3) + 2,\n                  ga = xa(G, ca),\n                  ka = xa(L, ca),\n                  qa = ga * ka;\n                if (!rb(ga, ka, 0, F, P)) break c;\n                P = P[0];\n                R.xc = ca;\n                for (Da = 0; Da < qa; ++Da) {\n                  var ia = (P[Da] >> 8) & 65535;\n                  P[Da] = ia;\n                  ia >= W && (W = ia + 1);\n                }\n              }\n              if (X.h) break c;\n              for (ba = 0; 5 > ba; ++ba) {\n                var Y = Dc[ba];\n                !ba && 0 < J && (Y += 1 << J);\n                aa < Y && (aa = Y);\n              }\n              var ma = wa(W * na, O);\n              var ua = W,\n                va = wa(ua, Ub);\n              if (null == va) var la = null;\n              else x(65536 >= ua), (la = va);\n              var ha = V(aa);\n              if (null == la || null == ha || null == ma) {\n                F.a = 1;\n                break c;\n              }\n              var pa = ma;\n              for (Da = U = 0; Da < W; ++Da) {\n                var ja = la[Da],\n                  da = ja.G,\n                  ea = ja.H,\n                  Fa = 0,\n                  ra = 1,\n                  Ha = 0;\n                for (ba = 0; 5 > ba; ++ba) {\n                  Y = Dc[ba];\n                  da[ba] = pa;\n                  ea[ba] = U;\n                  !ba && 0 < J && (Y += 1 << J);\n                  d: {\n                    var sa,\n                      za = Y,\n                      ta = F,\n                      oa = ha,\n                      db = pa,\n                      eb = U,\n                      Ia = 0,\n                      Ka = ta.m,\n                      fb = D(Ka, 1);\n                    M(oa, 0, 0, za);\n                    if (fb) {\n                      var gb = D(Ka, 1) + 1,\n                        hb = D(Ka, 1),\n                        Ja = D(Ka, 0 == hb ? 1 : 8);\n                      oa[Ja] = 1;\n                      2 == gb && ((Ja = D(Ka, 8)), (oa[Ja] = 1));\n                      var ya = 1;\n                    } else {\n                      var Ua = V(19),\n                        Va = D(Ka, 4) + 4;\n                      if (19 < Va) {\n                        ta.a = 3;\n                        var Aa = 0;\n                        break d;\n                      }\n                      for (sa = 0; sa < Va; ++sa) Ua[ne[sa]] = D(Ka, 3);\n                      var Ba = void 0,\n                        sb = void 0,\n                        Wa = ta,\n                        ib = Ua,\n                        Ca = za,\n                        Xa = oa,\n                        Oa = 0,\n                        La = Wa.m,\n                        Ya = 8,\n                        Za = wa(128, O);\n                      e: for (;;) {\n                        if (!Z(Za, 0, 7, ib, 19)) break e;\n                        if (D(La, 1)) {\n                          var kb = 2 + 2 * D(La, 3),\n                            Ba = 2 + D(La, kb);\n                          if (Ba > Ca) break e;\n                        } else Ba = Ca;\n                        for (sb = 0; sb < Ca && Ba--; ) {\n                          Sa(La);\n                          var $a = Za[0 + (pb(La) & 127)];\n                          qb(La, La.u + $a.g);\n                          var jb = $a.value;\n                          if (16 > jb) (Xa[sb++] = jb), 0 != jb && (Ya = jb);\n                          else {\n                            var lb = 16 == jb,\n                              ab = jb - 16,\n                              mb = oe[ab],\n                              bb = D(La, pe[ab]) + mb;\n                            if (sb + bb > Ca) break e;\n                            else\n                              for (var nb = lb ? Ya : 0; 0 < bb--; )\n                                Xa[sb++] = nb;\n                          }\n                        }\n                        Oa = 1;\n                        break e;\n                      }\n                      Oa || (Wa.a = 3);\n                      ya = Oa;\n                    }\n                    (ya = ya && !Ka.h) && (Ia = Z(db, eb, 8, oa, za));\n                    ya && 0 != Ia ? (Aa = Ia) : ((ta.a = 3), (Aa = 0));\n                  }\n                  if (0 == Aa) break c;\n                  ra && 1 == qe[ba] && (ra = 0 == pa[U].g);\n                  Fa += pa[U].g;\n                  U += Aa;\n                  if (3 >= ba) {\n                    var Pa = ha[0],\n                      tb;\n                    for (tb = 1; tb < Y; ++tb) ha[tb] > Pa && (Pa = ha[tb]);\n                    Ha += Pa;\n                  }\n                }\n                ja.nd = ra;\n                ja.Qb = 0;\n                ra &&\n                  ((ja.qb =\n                    ((da[3][ea[3] + 0].value << 24) |\n                      (da[1][ea[1] + 0].value << 16) |\n                      da[2][ea[2] + 0].value) >>>\n                    0),\n                  0 == Fa &&\n                    256 > da[0][ea[0] + 0].value &&\n                    ((ja.Qb = 1), (ja.qb += da[0][ea[0] + 0].value << 8)));\n                ja.jc = !ja.Qb && 6 > Ha;\n                if (ja.jc) {\n                  var Ga,\n                    Ea = ja;\n                  for (Ga = 0; Ga < xb; ++Ga) {\n                    var Ma = Ga,\n                      Na = Ea.pd[Ma],\n                      vb = Ea.G[0][Ea.H[0] + Ma];\n                    256 <= vb.value\n                      ? ((Na.g = vb.g + 256), (Na.value = vb.value))\n                      : ((Na.g = 0),\n                        (Na.value = 0),\n                        (Ma >>= ub(vb, 8, Na)),\n                        (Ma >>= ub(Ea.G[1][Ea.H[1] + Ma], 16, Na)),\n                        (Ma >>= ub(Ea.G[2][Ea.H[2] + Ma], 0, Na)),\n                        ub(Ea.G[3][Ea.H[3] + Ma], 24, Na));\n                  }\n                }\n              }\n              R.vc = P;\n              R.Wb = W;\n              R.Ya = la;\n              R.yc = ma;\n              H = 1;\n              break b;\n            }\n            H = 0;\n          }\n        f = H;\n        if (!f) {\n          d.a = 3;\n          break a;\n        }\n        if (0 < n) {\n          if (((l.ua = 1 << n), !Zb(l.Wa, n))) {\n            d.a = 1;\n            f = 0;\n            break a;\n          }\n        } else l.ua = 0;\n        var Qa = d,\n          cb = g,\n          ob = h,\n          Ra = Qa.s,\n          Ta = Ra.xc;\n        Qa.c = cb;\n        Qa.i = ob;\n        Ra.md = xa(cb, Ta);\n        Ra.wc = 0 == Ta ? -1 : (1 << Ta) - 1;\n        if (c) {\n          d.xb = re;\n          break a;\n        }\n        m = V(g * h);\n        if (null == m) {\n          d.a = 1;\n          f = 0;\n          break a;\n        }\n        f = (f = Jb(d, m, 0, g, h, h, null)) && !k.h;\n        break a;\n      }\n      f\n        ? (null != e ? (e[0] = m) : (x(null == m), x(c)), (d.$ = 0), c || Ac(l))\n        : Ac(l);\n      return f;\n    }\n    function Ec(a, b) {\n      var c = a.c * a.i,\n        d = c + b + 16 * b;\n      x(a.c <= b);\n      a.V = V(d);\n      if (null == a.V) return (a.Ta = null), (a.Ua = 0), (a.a = 1), 0;\n      a.Ta = a.V;\n      a.Ua = a.Ba + c + b;\n      return 1;\n    }\n    function se(a, b) {\n      var c = a.C,\n        d = b - c,\n        e = a.V,\n        f = a.Ba + a.c * c;\n      for (x(b <= a.l.o); 0 < d; ) {\n        var g = 16 < d ? 16 : d,\n          h = a.l.ma,\n          k = a.l.width,\n          l = k * g,\n          m = h.ca,\n          n = h.tb + k * c,\n          r = a.Ta,\n          q = a.Ua;\n        oc(a, g, e, f);\n        Fc(r, q, m, n, l);\n        zc(h, c, c + g, m, n, k);\n        d -= g;\n        e += g * a.c;\n        c += g;\n      }\n      x(c == b);\n      a.C = a.Ma = b;\n    }\n    function te(a, b) {\n      var c = [0],\n        d = [0],\n        e = [0];\n      a: for (;;) {\n        if (null == a) return 0;\n        if (null == b) return (a.a = 2), 0;\n        a.l = b;\n        a.a = 0;\n        cb(a.m, b.data, b.w, b.ha);\n        if (!mc(a.m, c, d, e)) {\n          a.a = 3;\n          break a;\n        }\n        a.xb = Cc;\n        b.width = c[0];\n        b.height = d[0];\n        if (!rb(c[0], d[0], 1, a, null)) break a;\n        return 1;\n      }\n      x(0 != a.a);\n      return 0;\n    }\n    function ue() {\n      this.ub = this.yd = this.td = this.Rb = 0;\n    }\n    function ve() {\n      this.Kd = this.Ld = this.Ud = this.Td = this.i = this.c = 0;\n    }\n    function we() {\n      this.Fb = this.Bb = this.Cb = 0;\n      this.Zb = V(4);\n      this.Lb = V(4);\n    }\n    function Gc() {\n      this.Yb = wb();\n    }\n    function xe() {\n      this.jb = V(3);\n      this.Wc = Ed([4, 8], Gc);\n      this.Xc = Ed([4, 17], Gc);\n    }\n    function ye() {\n      this.Pc = this.wb = this.Tb = this.zd = 0;\n      this.vd = new V(4);\n      this.od = new V(4);\n    }\n    function Xa() {\n      this.ld = this.La = this.dd = this.tc = 0;\n    }\n    function Hc() {\n      this.Na = this.la = 0;\n    }\n    function ze() {\n      this.Sc = [0, 0];\n      this.Eb = [0, 0];\n      this.Qc = [0, 0];\n      this.ia = this.lc = 0;\n    }\n    function Kb() {\n      this.ad = V(384);\n      this.Za = 0;\n      this.Ob = V(16);\n      this.$b = this.Ad = this.ia = this.Gc = this.Hc = this.Dd = 0;\n    }\n    function Ae() {\n      this.uc = this.M = this.Nb = 0;\n      this.wa = Array(new Xa());\n      this.Y = 0;\n      this.ya = Array(new Kb());\n      this.aa = 0;\n      this.l = new Oa();\n    }\n    function Ic() {\n      this.y = V(16);\n      this.f = V(8);\n      this.ea = V(8);\n    }\n    function Be() {\n      this.cb = this.a = 0;\n      this.sc = \"\";\n      this.m = new Wb();\n      this.Od = new ue();\n      this.Kc = new ve();\n      this.ed = new ye();\n      this.Qa = new we();\n      this.Ic = this.$c = this.Aa = 0;\n      this.D = new Ae();\n      this.Xb = this.Va = this.Hb = this.zb = this.yb = this.Ub = this.za = 0;\n      this.Jc = wa(8, Wb);\n      this.ia = 0;\n      new F();\n      this.pb = wa(4, ze);\n      this.Pa = new xe();\n      this.Bd = this.kc = 0;\n      this.Ac = [];\n      this.Bc = 0;\n      this.zc = [0, 0, 0, 0];\n      this.Gd = Array(new Ic());\n      this.Hd = 0;\n      this.rb = Array(new Hc());\n      this.sb = 0;\n      this.wa = Array(new Xa());\n      this.Y = 0;\n      this.oc = [];\n      this.pc = 0;\n      this.sa = [];\n      this.ta = 0;\n      this.qa = [];\n      this.ra = 0;\n      this.Ha = [];\n      this.B = this.R = this.Ia = 0;\n      this.Ec = [];\n      this.M = this.ja = this.Vb = this.Fc = 0;\n      this.ya = Array(new Kb());\n      this.L = this.aa = 0;\n      this.gd = Ed([4, 2], Xa);\n      this.ga = null;\n      this.Fa = [];\n      this.Cc = this.qc = this.P = 0;\n      this.Gb = [];\n      this.Uc = 0;\n      this.mb = [];\n      this.nb = 0;\n      this.rc = [];\n      this.Ga = this.Vc = 0;\n    }\n    function ga(a, b) {\n      return 0 > a ? 0 : a > b ? b : a;\n    }\n    function Oa() {\n      this.T = this.U = this.ka = this.height = this.width = 0;\n      this.y = [];\n      this.f = [];\n      this.ea = [];\n      this.Rc = this.fa = this.W = this.N = this.O = 0;\n      this.ma = \"void\";\n      this.put = \"VP8IoPutHook\";\n      this.ac = \"VP8IoSetupHook\";\n      this.bc = \"VP8IoTeardownHook\";\n      this.ha = this.Kb = 0;\n      this.data = [];\n      this.hb = this.ib = this.da = this.o = this.j = this.va = this.v = this.Da = this.ob = this.w = 0;\n      this.F = [];\n      this.J = 0;\n    }\n    function Ce() {\n      var a = new Be();\n      null != a &&\n        ((a.a = 0), (a.sc = \"OK\"), (a.cb = 0), (a.Xb = 0), oa || (oa = De));\n      return a;\n    }\n    function T(a, b, c) {\n      0 == a.a && ((a.a = b), (a.sc = c), (a.cb = 0));\n      return 0;\n    }\n    function Jc(a, b, c) {\n      return 3 <= c && 157 == a[b + 0] && 1 == a[b + 1] && 42 == a[b + 2];\n    }\n    function Kc(a, b) {\n      if (null == a) return 0;\n      a.a = 0;\n      a.sc = \"OK\";\n      if (null == b) return T(a, 2, \"null VP8Io passed to VP8GetHeaders()\");\n      var c = b.data;\n      var d = b.w;\n      var e = b.ha;\n      if (4 > e) return T(a, 7, \"Truncated header.\");\n      var f = c[d + 0] | (c[d + 1] << 8) | (c[d + 2] << 16);\n      var g = a.Od;\n      g.Rb = !(f & 1);\n      g.td = (f >> 1) & 7;\n      g.yd = (f >> 4) & 1;\n      g.ub = f >> 5;\n      if (3 < g.td) return T(a, 3, \"Incorrect keyframe parameters.\");\n      if (!g.yd) return T(a, 4, \"Frame not displayable.\");\n      d += 3;\n      e -= 3;\n      var h = a.Kc;\n      if (g.Rb) {\n        if (7 > e) return T(a, 7, \"cannot parse picture header\");\n        if (!Jc(c, d, e)) return T(a, 3, \"Bad code word\");\n        h.c = ((c[d + 4] << 8) | c[d + 3]) & 16383;\n        h.Td = c[d + 4] >> 6;\n        h.i = ((c[d + 6] << 8) | c[d + 5]) & 16383;\n        h.Ud = c[d + 6] >> 6;\n        d += 7;\n        e -= 7;\n        a.za = (h.c + 15) >> 4;\n        a.Ub = (h.i + 15) >> 4;\n        b.width = h.c;\n        b.height = h.i;\n        b.Da = 0;\n        b.j = 0;\n        b.v = 0;\n        b.va = b.width;\n        b.o = b.height;\n        b.da = 0;\n        b.ib = b.width;\n        b.hb = b.height;\n        b.U = b.width;\n        b.T = b.height;\n        f = a.Pa;\n        M(f.jb, 0, 255, f.jb.length);\n        f = a.Qa;\n        x(null != f);\n        f.Cb = 0;\n        f.Bb = 0;\n        f.Fb = 1;\n        M(f.Zb, 0, 0, f.Zb.length);\n        M(f.Lb, 0, 0, f.Lb);\n      }\n      if (g.ub > e) return T(a, 7, \"bad partition length\");\n      f = a.m;\n      ma(f, c, d, g.ub);\n      d += g.ub;\n      e -= g.ub;\n      g.Rb && ((h.Ld = G(f)), (h.Kd = G(f)));\n      h = a.Qa;\n      var k = a.Pa,\n        l;\n      x(null != f);\n      x(null != h);\n      h.Cb = G(f);\n      if (h.Cb) {\n        h.Bb = G(f);\n        if (G(f)) {\n          h.Fb = G(f);\n          for (l = 0; 4 > l; ++l) h.Zb[l] = G(f) ? ca(f, 7) : 0;\n          for (l = 0; 4 > l; ++l) h.Lb[l] = G(f) ? ca(f, 6) : 0;\n        }\n        if (h.Bb) for (l = 0; 3 > l; ++l) k.jb[l] = G(f) ? na(f, 8) : 255;\n      } else h.Bb = 0;\n      if (f.Ka) return T(a, 3, \"cannot parse segment header\");\n      h = a.ed;\n      h.zd = G(f);\n      h.Tb = na(f, 6);\n      h.wb = na(f, 3);\n      h.Pc = G(f);\n      if (h.Pc && G(f)) {\n        for (k = 0; 4 > k; ++k) G(f) && (h.vd[k] = ca(f, 6));\n        for (k = 0; 4 > k; ++k) G(f) && (h.od[k] = ca(f, 6));\n      }\n      a.L = 0 == h.Tb ? 0 : h.zd ? 1 : 2;\n      if (f.Ka) return T(a, 3, \"cannot parse filter header\");\n      l = d;\n      var m = e;\n      e = l;\n      d = l + m;\n      h = m;\n      a.Xb = (1 << na(a.m, 2)) - 1;\n      k = a.Xb;\n      if (m < 3 * k) c = 7;\n      else {\n        l += 3 * k;\n        h -= 3 * k;\n        for (m = 0; m < k; ++m) {\n          var n = c[e + 0] | (c[e + 1] << 8) | (c[e + 2] << 16);\n          n > h && (n = h);\n          ma(a.Jc[+m], c, l, n);\n          l += n;\n          h -= n;\n          e += 3;\n        }\n        ma(a.Jc[+k], c, l, h);\n        c = l < d ? 0 : 5;\n      }\n      if (0 != c) return T(a, c, \"cannot parse partitions\");\n      l = a.m;\n      c = na(l, 7);\n      e = G(l) ? ca(l, 4) : 0;\n      d = G(l) ? ca(l, 4) : 0;\n      h = G(l) ? ca(l, 4) : 0;\n      k = G(l) ? ca(l, 4) : 0;\n      l = G(l) ? ca(l, 4) : 0;\n      m = a.Qa;\n      for (n = 0; 4 > n; ++n) {\n        if (m.Cb) {\n          var r = m.Zb[n];\n          m.Fb || (r += c);\n        } else if (0 < n) {\n          a.pb[n] = a.pb[0];\n          continue;\n        } else r = c;\n        var q = a.pb[n];\n        q.Sc[0] = Lb[ga(r + e, 127)];\n        q.Sc[1] = Mb[ga(r + 0, 127)];\n        q.Eb[0] = 2 * Lb[ga(r + d, 127)];\n        q.Eb[1] = (101581 * Mb[ga(r + h, 127)]) >> 16;\n        8 > q.Eb[1] && (q.Eb[1] = 8);\n        q.Qc[0] = Lb[ga(r + k, 117)];\n        q.Qc[1] = Mb[ga(r + l, 127)];\n        q.lc = r + l;\n      }\n      if (!g.Rb) return T(a, 4, \"Not a key frame.\");\n      G(f);\n      g = a.Pa;\n      for (c = 0; 4 > c; ++c) {\n        for (e = 0; 8 > e; ++e)\n          for (d = 0; 3 > d; ++d)\n            for (h = 0; 11 > h; ++h)\n              (k = K(f, Ee[c][e][d][h]) ? na(f, 8) : Fe[c][e][d][h]),\n                (g.Wc[c][e].Yb[d][h] = k);\n        for (e = 0; 17 > e; ++e) g.Xc[c][e] = g.Wc[c][Ge[e]];\n      }\n      a.kc = G(f);\n      a.kc && (a.Bd = na(f, 8));\n      return (a.cb = 1);\n    }\n    function De(a, b, c, d, e, f, g) {\n      var h = b[e].Yb[c];\n      for (c = 0; 16 > e; ++e) {\n        if (!K(a, h[c + 0])) return e;\n        for (; !K(a, h[c + 1]); )\n          if (((h = b[++e].Yb[0]), (c = 0), 16 == e)) return 16;\n        var k = b[e + 1].Yb;\n        if (K(a, h[c + 2])) {\n          var l = a,\n            m = h,\n            n = c;\n          var r = 0;\n          if (K(l, m[n + 3]))\n            if (K(l, m[n + 6])) {\n              h = 0;\n              r = K(l, m[n + 8]);\n              m = K(l, m[n + 9 + r]);\n              n = 2 * r + m;\n              r = 0;\n              for (m = He[n]; m[h]; ++h) r += r + K(l, m[h]);\n              r += 3 + (8 << n);\n            } else\n              K(l, m[n + 7])\n                ? ((r = 7 + 2 * K(l, 165)), (r += K(l, 145)))\n                : (r = 5 + K(l, 159));\n          else K(l, m[n + 4]) ? (r = 3 + K(l, m[n + 5])) : (r = 2);\n          h = k[2];\n        } else (r = 1), (h = k[1]);\n        k = g + Ie[e];\n        l = a;\n        0 > l.b && Qa(l);\n        var m = l.b,\n          n = l.Ca >> 1,\n          q = (n - (l.I >> m)) >> 31;\n        --l.b;\n        l.Ca += q;\n        l.Ca |= 1;\n        l.I -= ((n + 1) & q) << m;\n        f[k] = ((r ^ q) - q) * d[(0 < e) + 0];\n      }\n      return 16;\n    }\n    function Lc(a) {\n      var b = a.rb[a.sb - 1];\n      b.la = 0;\n      b.Na = 0;\n      M(a.zc, 0, 0, a.zc.length);\n      a.ja = 0;\n    }\n    function Je(a, b) {\n      for (a.M = 0; a.M < a.Va; ++a.M) {\n        var c = a.Jc[a.M & a.Xb],\n          d = a.m,\n          e = a,\n          f;\n        for (f = 0; f < e.za; ++f) {\n          var g = d;\n          var h = e;\n          var k = h.Ac,\n            l = h.Bc + 4 * f,\n            m = h.zc,\n            n = h.ya[h.aa + f];\n          h.Qa.Bb\n            ? (n.$b = K(g, h.Pa.jb[0])\n                ? 2 + K(g, h.Pa.jb[2])\n                : K(g, h.Pa.jb[1]))\n            : (n.$b = 0);\n          h.kc && (n.Ad = K(g, h.Bd));\n          n.Za = !K(g, 145) + 0;\n          if (n.Za) {\n            var r = n.Ob,\n              q = 0;\n            for (h = 0; 4 > h; ++h) {\n              var t = m[0 + h];\n              var v;\n              for (v = 0; 4 > v; ++v) {\n                t = Ke[k[l + v]][t];\n                for (var p = Mc[K(g, t[0])]; 0 < p; )\n                  p = Mc[2 * p + K(g, t[p])];\n                t = -p;\n                k[l + v] = t;\n              }\n              I(r, q, k, l, 4);\n              q += 4;\n              m[0 + h] = t;\n            }\n          } else\n            (t = K(g, 156) ? (K(g, 128) ? 1 : 3) : K(g, 163) ? 2 : 0),\n              (n.Ob[0] = t),\n              M(k, l, t, 4),\n              M(m, 0, t, 4);\n          n.Dd = K(g, 142) ? (K(g, 114) ? (K(g, 183) ? 1 : 3) : 2) : 0;\n        }\n        if (e.m.Ka) return T(a, 7, \"Premature end-of-partition0 encountered.\");\n        for (; a.ja < a.za; ++a.ja) {\n          d = a;\n          e = c;\n          g = d.rb[d.sb - 1];\n          k = d.rb[d.sb + d.ja];\n          f = d.ya[d.aa + d.ja];\n          if ((l = d.kc ? f.Ad : 0))\n            (g.la = k.la = 0),\n              f.Za || (g.Na = k.Na = 0),\n              (f.Hc = 0),\n              (f.Gc = 0),\n              (f.ia = 0);\n          else {\n            var u,\n              w,\n              g = k,\n              k = e,\n              l = d.Pa.Xc,\n              m = d.ya[d.aa + d.ja],\n              n = d.pb[m.$b];\n            h = m.ad;\n            r = 0;\n            q = d.rb[d.sb - 1];\n            t = v = 0;\n            M(h, r, 0, 384);\n            if (m.Za) {\n              var y = 0;\n              var A = l[3];\n            } else {\n              p = V(16);\n              var E = g.Na + q.Na;\n              E = oa(k, l[1], E, n.Eb, 0, p, 0);\n              g.Na = q.Na = (0 < E) + 0;\n              if (1 < E) Nc(p, 0, h, r);\n              else {\n                var B = (p[0] + 3) >> 3;\n                for (p = 0; 256 > p; p += 16) h[r + p] = B;\n              }\n              y = 1;\n              A = l[0];\n            }\n            var C = g.la & 15;\n            var N = q.la & 15;\n            for (p = 0; 4 > p; ++p) {\n              var z = N & 1;\n              for (B = w = 0; 4 > B; ++B)\n                (E = z + (C & 1)),\n                  (E = oa(k, A, E, n.Sc, y, h, r)),\n                  (z = E > y),\n                  (C = (C >> 1) | (z << 7)),\n                  (w = (w << 2) | (3 < E ? 3 : 1 < E ? 2 : 0 != h[r + 0])),\n                  (r += 16);\n              C >>= 4;\n              N = (N >> 1) | (z << 7);\n              v = ((v << 8) | w) >>> 0;\n            }\n            A = C;\n            y = N >> 4;\n            for (u = 0; 4 > u; u += 2) {\n              w = 0;\n              C = g.la >> (4 + u);\n              N = q.la >> (4 + u);\n              for (p = 0; 2 > p; ++p) {\n                z = N & 1;\n                for (B = 0; 2 > B; ++B)\n                  (E = z + (C & 1)),\n                    (E = oa(k, l[2], E, n.Qc, 0, h, r)),\n                    (z = 0 < E),\n                    (C = (C >> 1) | (z << 3)),\n                    (w = (w << 2) | (3 < E ? 3 : 1 < E ? 2 : 0 != h[r + 0])),\n                    (r += 16);\n                C >>= 2;\n                N = (N >> 1) | (z << 5);\n              }\n              t |= w << (4 * u);\n              A |= (C << 4) << u;\n              y |= (N & 240) << u;\n            }\n            g.la = A;\n            q.la = y;\n            m.Hc = v;\n            m.Gc = t;\n            m.ia = t & 43690 ? 0 : n.ia;\n            l = !(v | t);\n          }\n          0 < d.L &&\n            ((d.wa[d.Y + d.ja] = d.gd[f.$b][f.Za]),\n            (d.wa[d.Y + d.ja].La |= !l));\n          if (e.Ka) return T(a, 7, \"Premature end-of-file encountered.\");\n        }\n        Lc(a);\n        c = a;\n        d = b;\n        e = 1;\n        f = c.D;\n        g = 0 < c.L && c.M >= c.zb && c.M <= c.Va;\n        if (0 == c.Aa)\n          a: {\n            (f.M = c.M), (f.uc = g), Oc(c, f), (e = 1);\n            w = c.D;\n            f = w.Nb;\n            t = Ya[c.L];\n            g = t * c.R;\n            k = (t / 2) * c.B;\n            p = 16 * f * c.R;\n            B = 8 * f * c.B;\n            l = c.sa;\n            m = c.ta - g + p;\n            n = c.qa;\n            h = c.ra - k + B;\n            r = c.Ha;\n            q = c.Ia - k + B;\n            C = w.M;\n            N = 0 == C;\n            v = C >= c.Va - 1;\n            2 == c.Aa && Oc(c, w);\n            if (w.uc)\n              for (E = c, z = E.D.M, x(E.D.uc), w = E.yb; w < E.Hb; ++w) {\n                var Q = E;\n                y = w;\n                A = z;\n                var S = Q.D,\n                  D = S.Nb;\n                u = Q.R;\n                var S = S.wa[S.Y + y],\n                  F = Q.sa,\n                  H = Q.ta + 16 * D * u + 16 * y,\n                  J = S.dd,\n                  G = S.tc;\n                if (0 != G)\n                  if ((x(3 <= G), 1 == Q.L))\n                    0 < y && Pc(F, H, u, G + 4),\n                      S.La && Qc(F, H, u, G),\n                      0 < A && Rc(F, H, u, G + 4),\n                      S.La && Sc(F, H, u, G);\n                  else {\n                    var L = Q.B,\n                      O = Q.qa,\n                      P = Q.ra + 8 * D * L + 8 * y,\n                      R = Q.Ha,\n                      Q = Q.Ia + 8 * D * L + 8 * y,\n                      D = S.ld;\n                    0 < y &&\n                      (Tc(F, H, u, G + 4, J, D),\n                      Uc(O, P, R, Q, L, G + 4, J, D));\n                    S.La && (Vc(F, H, u, G, J, D), Wc(O, P, R, Q, L, G, J, D));\n                    0 < A &&\n                      (Xc(F, H, u, G + 4, J, D),\n                      Yc(O, P, R, Q, L, G + 4, J, D));\n                    S.La && (Zc(F, H, u, G, J, D), $c(O, P, R, Q, L, G, J, D));\n                  }\n              }\n            c.ia && alert(\"todo:DitherRow\");\n            if (null != d.put) {\n              w = 16 * C;\n              C = 16 * (C + 1);\n              N\n                ? ((d.y = c.sa),\n                  (d.O = c.ta + p),\n                  (d.f = c.qa),\n                  (d.N = c.ra + B),\n                  (d.ea = c.Ha),\n                  (d.W = c.Ia + B))\n                : ((w -= t),\n                  (d.y = l),\n                  (d.O = m),\n                  (d.f = n),\n                  (d.N = h),\n                  (d.ea = r),\n                  (d.W = q));\n              v || (C -= t);\n              C > d.o && (C = d.o);\n              d.F = null;\n              d.J = null;\n              if (\n                null != c.Fa &&\n                0 < c.Fa.length &&\n                w < C &&\n                ((d.J = Le(c, d, w, C - w)),\n                (d.F = c.mb),\n                null == d.F && 0 == d.F.length)\n              ) {\n                e = T(c, 3, \"Could not decode alpha data.\");\n                break a;\n              }\n              w < d.j &&\n                ((t = d.j - w),\n                (w = d.j),\n                x(!(t & 1)),\n                (d.O += c.R * t),\n                (d.N += c.B * (t >> 1)),\n                (d.W += c.B * (t >> 1)),\n                null != d.F && (d.J += d.width * t));\n              w < C &&\n                ((d.O += d.v),\n                (d.N += d.v >> 1),\n                (d.W += d.v >> 1),\n                null != d.F && (d.J += d.v),\n                (d.ka = w - d.j),\n                (d.U = d.va - d.v),\n                (d.T = C - w),\n                (e = d.put(d)));\n            }\n            f + 1 != c.Ic ||\n              v ||\n              (I(c.sa, c.ta - g, l, m + 16 * c.R, g),\n              I(c.qa, c.ra - k, n, h + 8 * c.B, k),\n              I(c.Ha, c.Ia - k, r, q + 8 * c.B, k));\n          }\n        if (!e) return T(a, 6, \"Output aborted.\");\n      }\n      return 1;\n    }\n    function Me(a, b) {\n      if (null == a) return 0;\n      if (null == b) return T(a, 2, \"NULL VP8Io parameter in VP8Decode().\");\n      if (!a.cb && !Kc(a, b)) return 0;\n      x(a.cb);\n      if (null == b.ac || b.ac(b)) {\n        b.ob && (a.L = 0);\n        var c = Ya[a.L];\n        2 == a.L\n          ? ((a.yb = 0), (a.zb = 0))\n          : ((a.yb = (b.v - c) >> 4),\n            (a.zb = (b.j - c) >> 4),\n            0 > a.yb && (a.yb = 0),\n            0 > a.zb && (a.zb = 0));\n        a.Va = (b.o + 15 + c) >> 4;\n        a.Hb = (b.va + 15 + c) >> 4;\n        a.Hb > a.za && (a.Hb = a.za);\n        a.Va > a.Ub && (a.Va = a.Ub);\n        if (0 < a.L) {\n          var d = a.ed;\n          for (c = 0; 4 > c; ++c) {\n            var e;\n            if (a.Qa.Cb) {\n              var f = a.Qa.Lb[c];\n              a.Qa.Fb || (f += d.Tb);\n            } else f = d.Tb;\n            for (e = 0; 1 >= e; ++e) {\n              var g = a.gd[c][e],\n                h = f;\n              d.Pc && ((h += d.vd[0]), e && (h += d.od[0]));\n              h = 0 > h ? 0 : 63 < h ? 63 : h;\n              if (0 < h) {\n                var k = h;\n                0 < d.wb &&\n                  ((k = 4 < d.wb ? k >> 2 : k >> 1),\n                  k > 9 - d.wb && (k = 9 - d.wb));\n                1 > k && (k = 1);\n                g.dd = k;\n                g.tc = 2 * h + k;\n                g.ld = 40 <= h ? 2 : 15 <= h ? 1 : 0;\n              } else g.tc = 0;\n              g.La = e;\n            }\n          }\n        }\n        c = 0;\n      } else T(a, 6, \"Frame setup failed\"), (c = a.a);\n      if ((c = 0 == c)) {\n        if (c) {\n          a.$c = 0;\n          0 < a.Aa || (a.Ic = Ne);\n          b: {\n            c = a.Ic;\n            var k = a.za,\n              d = 4 * k,\n              l = 32 * k,\n              m = k + 1,\n              n = 0 < a.L ? k * (0 < a.Aa ? 2 : 1) : 0,\n              r = (2 == a.Aa ? 2 : 1) * k;\n            e = ((3 * (16 * c + Ya[a.L])) / 2) * l;\n            f = null != a.Fa && 0 < a.Fa.length ? a.Kc.c * a.Kc.i : 0;\n            g = d + 832 + e + f;\n            if (g != g) c = 0;\n            else {\n              if (g > a.Vb) {\n                a.Vb = 0;\n                a.Ec = V(g);\n                a.Fc = 0;\n                if (null == a.Ec) {\n                  c = T(a, 1, \"no memory during frame initialization.\");\n                  break b;\n                }\n                a.Vb = g;\n              }\n              g = a.Ec;\n              h = a.Fc;\n              a.Ac = g;\n              a.Bc = h;\n              h += d;\n              a.Gd = wa(l, Ic);\n              a.Hd = 0;\n              a.rb = wa(m + 1, Hc);\n              a.sb = 1;\n              a.wa = n ? wa(n, Xa) : null;\n              a.Y = 0;\n              a.D.Nb = 0;\n              a.D.wa = a.wa;\n              a.D.Y = a.Y;\n              0 < a.Aa && (a.D.Y += k);\n              x(!0);\n              a.oc = g;\n              a.pc = h;\n              h += 832;\n              a.ya = wa(r, Kb);\n              a.aa = 0;\n              a.D.ya = a.ya;\n              a.D.aa = a.aa;\n              2 == a.Aa && (a.D.aa += k);\n              a.R = 16 * k;\n              a.B = 8 * k;\n              l = Ya[a.L];\n              k = l * a.R;\n              l = (l / 2) * a.B;\n              a.sa = g;\n              a.ta = h + k;\n              a.qa = a.sa;\n              a.ra = a.ta + 16 * c * a.R + l;\n              a.Ha = a.qa;\n              a.Ia = a.ra + 8 * c * a.B + l;\n              a.$c = 0;\n              h += e;\n              a.mb = f ? g : null;\n              a.nb = f ? h : null;\n              x(h + f <= a.Fc + a.Vb);\n              Lc(a);\n              M(a.Ac, a.Bc, 0, d);\n              c = 1;\n            }\n          }\n          if (c) {\n            b.ka = 0;\n            b.y = a.sa;\n            b.O = a.ta;\n            b.f = a.qa;\n            b.N = a.ra;\n            b.ea = a.Ha;\n            b.Vd = a.Ia;\n            b.fa = a.R;\n            b.Rc = a.B;\n            b.F = null;\n            b.J = 0;\n            if (!ad) {\n              for (c = -255; 255 >= c; ++c) bd[255 + c] = 0 > c ? -c : c;\n              for (c = -1020; 1020 >= c; ++c)\n                cd[1020 + c] = -128 > c ? -128 : 127 < c ? 127 : c;\n              for (c = -112; 112 >= c; ++c)\n                dd[112 + c] = -16 > c ? -16 : 15 < c ? 15 : c;\n              for (c = -255; 510 >= c; ++c)\n                ed[255 + c] = 0 > c ? 0 : 255 < c ? 255 : c;\n              ad = 1;\n            }\n            Nc = Oe;\n            Za = Pe;\n            Nb = Qe;\n            pa = Re;\n            Ob = Se;\n            fd = Te;\n            Xc = Ue;\n            Tc = Ve;\n            Yc = We;\n            Uc = Xe;\n            Zc = Ye;\n            Vc = Ze;\n            $c = $e;\n            Wc = af;\n            Rc = gd;\n            Pc = hd;\n            Sc = bf;\n            Qc = cf;\n            W[0] = df;\n            W[1] = ef;\n            W[2] = ff;\n            W[3] = gf;\n            W[4] = hf;\n            W[5] = jf;\n            W[6] = kf;\n            W[7] = lf;\n            W[8] = mf;\n            W[9] = nf;\n            Y[0] = of;\n            Y[1] = pf;\n            Y[2] = qf;\n            Y[3] = rf;\n            Y[4] = sf;\n            Y[5] = tf;\n            Y[6] = uf;\n            ka[0] = vf;\n            ka[1] = wf;\n            ka[2] = xf;\n            ka[3] = yf;\n            ka[4] = zf;\n            ka[5] = Af;\n            ka[6] = Bf;\n            c = 1;\n          } else c = 0;\n        }\n        c && (c = Je(a, b));\n        null != b.bc && b.bc(b);\n        c &= 1;\n      }\n      if (!c) return 0;\n      a.cb = 0;\n      return c;\n    }\n    function qa(a, b, c, d, e) {\n      e = a[b + c + 32 * d] + (e >> 3);\n      a[b + c + 32 * d] = e & -256 ? (0 > e ? 0 : 255) : e;\n    }\n    function kb(a, b, c, d, e, f) {\n      qa(a, b, 0, c, d + e);\n      qa(a, b, 1, c, d + f);\n      qa(a, b, 2, c, d - f);\n      qa(a, b, 3, c, d - e);\n    }\n    function da(a) {\n      return ((20091 * a) >> 16) + a;\n    }\n    function id(a, b, c, d) {\n      var e = 0,\n        f;\n      var g = V(16);\n      for (f = 0; 4 > f; ++f) {\n        var h = a[b + 0] + a[b + 8];\n        var k = a[b + 0] - a[b + 8];\n        var l = ((35468 * a[b + 4]) >> 16) - da(a[b + 12]);\n        var m = da(a[b + 4]) + ((35468 * a[b + 12]) >> 16);\n        g[e + 0] = h + m;\n        g[e + 1] = k + l;\n        g[e + 2] = k - l;\n        g[e + 3] = h - m;\n        e += 4;\n        b++;\n      }\n      for (f = e = 0; 4 > f; ++f)\n        (a = g[e + 0] + 4),\n          (h = a + g[e + 8]),\n          (k = a - g[e + 8]),\n          (l = ((35468 * g[e + 4]) >> 16) - da(g[e + 12])),\n          (m = da(g[e + 4]) + ((35468 * g[e + 12]) >> 16)),\n          qa(c, d, 0, 0, h + m),\n          qa(c, d, 1, 0, k + l),\n          qa(c, d, 2, 0, k - l),\n          qa(c, d, 3, 0, h - m),\n          e++,\n          (d += 32);\n    }\n    function Te(a, b, c, d) {\n      var e = a[b + 0] + 4,\n        f = (35468 * a[b + 4]) >> 16,\n        g = da(a[b + 4]),\n        h = (35468 * a[b + 1]) >> 16;\n      a = da(a[b + 1]);\n      kb(c, d, 0, e + g, a, h);\n      kb(c, d, 1, e + f, a, h);\n      kb(c, d, 2, e - f, a, h);\n      kb(c, d, 3, e - g, a, h);\n    }\n    function Pe(a, b, c, d, e) {\n      id(a, b, c, d);\n      e && id(a, b + 16, c, d + 4);\n    }\n    function Qe(a, b, c, d) {\n      Za(a, b + 0, c, d, 1);\n      Za(a, b + 32, c, d + 128, 1);\n    }\n    function Re(a, b, c, d) {\n      a = a[b + 0] + 4;\n      var e;\n      for (e = 0; 4 > e; ++e) for (b = 0; 4 > b; ++b) qa(c, d, b, e, a);\n    }\n    function Se(a, b, c, d) {\n      a[b + 0] && pa(a, b + 0, c, d);\n      a[b + 16] && pa(a, b + 16, c, d + 4);\n      a[b + 32] && pa(a, b + 32, c, d + 128);\n      a[b + 48] && pa(a, b + 48, c, d + 128 + 4);\n    }\n    function Oe(a, b, c, d) {\n      var e = V(16),\n        f;\n      for (f = 0; 4 > f; ++f) {\n        var g = a[b + 0 + f] + a[b + 12 + f];\n        var h = a[b + 4 + f] + a[b + 8 + f];\n        var k = a[b + 4 + f] - a[b + 8 + f];\n        var l = a[b + 0 + f] - a[b + 12 + f];\n        e[0 + f] = g + h;\n        e[8 + f] = g - h;\n        e[4 + f] = l + k;\n        e[12 + f] = l - k;\n      }\n      for (f = 0; 4 > f; ++f)\n        (a = e[0 + 4 * f] + 3),\n          (g = a + e[3 + 4 * f]),\n          (h = e[1 + 4 * f] + e[2 + 4 * f]),\n          (k = e[1 + 4 * f] - e[2 + 4 * f]),\n          (l = a - e[3 + 4 * f]),\n          (c[d + 0] = (g + h) >> 3),\n          (c[d + 16] = (l + k) >> 3),\n          (c[d + 32] = (g - h) >> 3),\n          (c[d + 48] = (l - k) >> 3),\n          (d += 64);\n    }\n    function Pb(a, b, c) {\n      var d = b - 32,\n        e = R,\n        f = 255 - a[d - 1],\n        g;\n      for (g = 0; g < c; ++g) {\n        var h = e,\n          k = f + a[b - 1],\n          l;\n        for (l = 0; l < c; ++l) a[b + l] = h[k + a[d + l]];\n        b += 32;\n      }\n    }\n    function ef(a, b) {\n      Pb(a, b, 4);\n    }\n    function wf(a, b) {\n      Pb(a, b, 8);\n    }\n    function pf(a, b) {\n      Pb(a, b, 16);\n    }\n    function qf(a, b) {\n      var c;\n      for (c = 0; 16 > c; ++c) I(a, b + 32 * c, a, b - 32, 16);\n    }\n    function rf(a, b) {\n      var c;\n      for (c = 16; 0 < c; --c) M(a, b, a[b - 1], 16), (b += 32);\n    }\n    function $a(a, b, c) {\n      var d;\n      for (d = 0; 16 > d; ++d) M(b, c + 32 * d, a, 16);\n    }\n    function of(a, b) {\n      var c = 16,\n        d;\n      for (d = 0; 16 > d; ++d) c += a[b - 1 + 32 * d] + a[b + d - 32];\n      $a(c >> 5, a, b);\n    }\n    function sf(a, b) {\n      var c = 8,\n        d;\n      for (d = 0; 16 > d; ++d) c += a[b - 1 + 32 * d];\n      $a(c >> 4, a, b);\n    }\n    function tf(a, b) {\n      var c = 8,\n        d;\n      for (d = 0; 16 > d; ++d) c += a[b + d - 32];\n      $a(c >> 4, a, b);\n    }\n    function uf(a, b) {\n      $a(128, a, b);\n    }\n    function z(a, b, c) {\n      return (a + 2 * b + c + 2) >> 2;\n    }\n    function ff(a, b) {\n      var c = b - 32,\n        c = new Uint8Array([\n          z(a[c - 1], a[c + 0], a[c + 1]),\n          z(a[c + 0], a[c + 1], a[c + 2]),\n          z(a[c + 1], a[c + 2], a[c + 3]),\n          z(a[c + 2], a[c + 3], a[c + 4])\n        ]),\n        d;\n      for (d = 0; 4 > d; ++d) I(a, b + 32 * d, c, 0, c.length);\n    }\n    function gf(a, b) {\n      var c = a[b - 1],\n        d = a[b - 1 + 32],\n        e = a[b - 1 + 64],\n        f = a[b - 1 + 96];\n      ra(a, b + 0, 16843009 * z(a[b - 1 - 32], c, d));\n      ra(a, b + 32, 16843009 * z(c, d, e));\n      ra(a, b + 64, 16843009 * z(d, e, f));\n      ra(a, b + 96, 16843009 * z(e, f, f));\n    }\n    function df(a, b) {\n      var c = 4,\n        d;\n      for (d = 0; 4 > d; ++d) c += a[b + d - 32] + a[b - 1 + 32 * d];\n      c >>= 3;\n      for (d = 0; 4 > d; ++d) M(a, b + 32 * d, c, 4);\n    }\n    function hf(a, b) {\n      var c = a[b - 1 + 0],\n        d = a[b - 1 + 32],\n        e = a[b - 1 + 64],\n        f = a[b - 1 - 32],\n        g = a[b + 0 - 32],\n        h = a[b + 1 - 32],\n        k = a[b + 2 - 32],\n        l = a[b + 3 - 32];\n      a[b + 0 + 96] = z(d, e, a[b - 1 + 96]);\n      a[b + 1 + 96] = a[b + 0 + 64] = z(c, d, e);\n      a[b + 2 + 96] = a[b + 1 + 64] = a[b + 0 + 32] = z(f, c, d);\n      a[b + 3 + 96] = a[b + 2 + 64] = a[b + 1 + 32] = a[b + 0 + 0] = z(g, f, c);\n      a[b + 3 + 64] = a[b + 2 + 32] = a[b + 1 + 0] = z(h, g, f);\n      a[b + 3 + 32] = a[b + 2 + 0] = z(k, h, g);\n      a[b + 3 + 0] = z(l, k, h);\n    }\n    function kf(a, b) {\n      var c = a[b + 1 - 32],\n        d = a[b + 2 - 32],\n        e = a[b + 3 - 32],\n        f = a[b + 4 - 32],\n        g = a[b + 5 - 32],\n        h = a[b + 6 - 32],\n        k = a[b + 7 - 32];\n      a[b + 0 + 0] = z(a[b + 0 - 32], c, d);\n      a[b + 1 + 0] = a[b + 0 + 32] = z(c, d, e);\n      a[b + 2 + 0] = a[b + 1 + 32] = a[b + 0 + 64] = z(d, e, f);\n      a[b + 3 + 0] = a[b + 2 + 32] = a[b + 1 + 64] = a[b + 0 + 96] = z(e, f, g);\n      a[b + 3 + 32] = a[b + 2 + 64] = a[b + 1 + 96] = z(f, g, h);\n      a[b + 3 + 64] = a[b + 2 + 96] = z(g, h, k);\n      a[b + 3 + 96] = z(h, k, k);\n    }\n    function jf(a, b) {\n      var c = a[b - 1 + 0],\n        d = a[b - 1 + 32],\n        e = a[b - 1 + 64],\n        f = a[b - 1 - 32],\n        g = a[b + 0 - 32],\n        h = a[b + 1 - 32],\n        k = a[b + 2 - 32],\n        l = a[b + 3 - 32];\n      a[b + 0 + 0] = a[b + 1 + 64] = (f + g + 1) >> 1;\n      a[b + 1 + 0] = a[b + 2 + 64] = (g + h + 1) >> 1;\n      a[b + 2 + 0] = a[b + 3 + 64] = (h + k + 1) >> 1;\n      a[b + 3 + 0] = (k + l + 1) >> 1;\n      a[b + 0 + 96] = z(e, d, c);\n      a[b + 0 + 64] = z(d, c, f);\n      a[b + 0 + 32] = a[b + 1 + 96] = z(c, f, g);\n      a[b + 1 + 32] = a[b + 2 + 96] = z(f, g, h);\n      a[b + 2 + 32] = a[b + 3 + 96] = z(g, h, k);\n      a[b + 3 + 32] = z(h, k, l);\n    }\n    function lf(a, b) {\n      var c = a[b + 0 - 32],\n        d = a[b + 1 - 32],\n        e = a[b + 2 - 32],\n        f = a[b + 3 - 32],\n        g = a[b + 4 - 32],\n        h = a[b + 5 - 32],\n        k = a[b + 6 - 32],\n        l = a[b + 7 - 32];\n      a[b + 0 + 0] = (c + d + 1) >> 1;\n      a[b + 1 + 0] = a[b + 0 + 64] = (d + e + 1) >> 1;\n      a[b + 2 + 0] = a[b + 1 + 64] = (e + f + 1) >> 1;\n      a[b + 3 + 0] = a[b + 2 + 64] = (f + g + 1) >> 1;\n      a[b + 0 + 32] = z(c, d, e);\n      a[b + 1 + 32] = a[b + 0 + 96] = z(d, e, f);\n      a[b + 2 + 32] = a[b + 1 + 96] = z(e, f, g);\n      a[b + 3 + 32] = a[b + 2 + 96] = z(f, g, h);\n      a[b + 3 + 64] = z(g, h, k);\n      a[b + 3 + 96] = z(h, k, l);\n    }\n    function nf(a, b) {\n      var c = a[b - 1 + 0],\n        d = a[b - 1 + 32],\n        e = a[b - 1 + 64],\n        f = a[b - 1 + 96];\n      a[b + 0 + 0] = (c + d + 1) >> 1;\n      a[b + 2 + 0] = a[b + 0 + 32] = (d + e + 1) >> 1;\n      a[b + 2 + 32] = a[b + 0 + 64] = (e + f + 1) >> 1;\n      a[b + 1 + 0] = z(c, d, e);\n      a[b + 3 + 0] = a[b + 1 + 32] = z(d, e, f);\n      a[b + 3 + 32] = a[b + 1 + 64] = z(e, f, f);\n      a[b + 3 + 64] = a[b + 2 + 64] = a[b + 0 + 96] = a[b + 1 + 96] = a[\n        b + 2 + 96\n      ] = a[b + 3 + 96] = f;\n    }\n    function mf(a, b) {\n      var c = a[b - 1 + 0],\n        d = a[b - 1 + 32],\n        e = a[b - 1 + 64],\n        f = a[b - 1 + 96],\n        g = a[b - 1 - 32],\n        h = a[b + 0 - 32],\n        k = a[b + 1 - 32],\n        l = a[b + 2 - 32];\n      a[b + 0 + 0] = a[b + 2 + 32] = (c + g + 1) >> 1;\n      a[b + 0 + 32] = a[b + 2 + 64] = (d + c + 1) >> 1;\n      a[b + 0 + 64] = a[b + 2 + 96] = (e + d + 1) >> 1;\n      a[b + 0 + 96] = (f + e + 1) >> 1;\n      a[b + 3 + 0] = z(h, k, l);\n      a[b + 2 + 0] = z(g, h, k);\n      a[b + 1 + 0] = a[b + 3 + 32] = z(c, g, h);\n      a[b + 1 + 32] = a[b + 3 + 64] = z(d, c, g);\n      a[b + 1 + 64] = a[b + 3 + 96] = z(e, d, c);\n      a[b + 1 + 96] = z(f, e, d);\n    }\n    function xf(a, b) {\n      var c;\n      for (c = 0; 8 > c; ++c) I(a, b + 32 * c, a, b - 32, 8);\n    }\n    function yf(a, b) {\n      var c;\n      for (c = 0; 8 > c; ++c) M(a, b, a[b - 1], 8), (b += 32);\n    }\n    function lb(a, b, c) {\n      var d;\n      for (d = 0; 8 > d; ++d) M(b, c + 32 * d, a, 8);\n    }\n    function vf(a, b) {\n      var c = 8,\n        d;\n      for (d = 0; 8 > d; ++d) c += a[b + d - 32] + a[b - 1 + 32 * d];\n      lb(c >> 4, a, b);\n    }\n    function Af(a, b) {\n      var c = 4,\n        d;\n      for (d = 0; 8 > d; ++d) c += a[b + d - 32];\n      lb(c >> 3, a, b);\n    }\n    function zf(a, b) {\n      var c = 4,\n        d;\n      for (d = 0; 8 > d; ++d) c += a[b - 1 + 32 * d];\n      lb(c >> 3, a, b);\n    }\n    function Bf(a, b) {\n      lb(128, a, b);\n    }\n    function ab(a, b, c) {\n      var d = a[b - c],\n        e = a[b + 0],\n        f = 3 * (e - d) + Qb[1020 + a[b - 2 * c] - a[b + c]],\n        g = mb[112 + ((f + 4) >> 3)];\n      a[b - c] = R[255 + d + mb[112 + ((f + 3) >> 3)]];\n      a[b + 0] = R[255 + e - g];\n    }\n    function jd(a, b, c, d) {\n      var e = a[b + 0],\n        f = a[b + c];\n      return U[255 + a[b - 2 * c] - a[b - c]] > d || U[255 + f - e] > d;\n    }\n    function kd(a, b, c, d) {\n      return (\n        4 * U[255 + a[b - c] - a[b + 0]] + U[255 + a[b - 2 * c] - a[b + c]] <= d\n      );\n    }\n    function ld(a, b, c, d, e) {\n      var f = a[b - 3 * c],\n        g = a[b - 2 * c],\n        h = a[b - c],\n        k = a[b + 0],\n        l = a[b + c],\n        m = a[b + 2 * c],\n        n = a[b + 3 * c];\n      return 4 * U[255 + h - k] + U[255 + g - l] > d\n        ? 0\n        : U[255 + a[b - 4 * c] - f] <= e &&\n            U[255 + f - g] <= e &&\n            U[255 + g - h] <= e &&\n            U[255 + n - m] <= e &&\n            U[255 + m - l] <= e &&\n            U[255 + l - k] <= e;\n    }\n    function gd(a, b, c, d) {\n      var e = 2 * d + 1;\n      for (d = 0; 16 > d; ++d) kd(a, b + d, c, e) && ab(a, b + d, c);\n    }\n    function hd(a, b, c, d) {\n      var e = 2 * d + 1;\n      for (d = 0; 16 > d; ++d) kd(a, b + d * c, 1, e) && ab(a, b + d * c, 1);\n    }\n    function bf(a, b, c, d) {\n      var e;\n      for (e = 3; 0 < e; --e) (b += 4 * c), gd(a, b, c, d);\n    }\n    function cf(a, b, c, d) {\n      var e;\n      for (e = 3; 0 < e; --e) (b += 4), hd(a, b, c, d);\n    }\n    function ea(a, b, c, d, e, f, g, h) {\n      for (f = 2 * f + 1; 0 < e--; ) {\n        if (ld(a, b, c, f, g))\n          if (jd(a, b, c, h)) ab(a, b, c);\n          else {\n            var k = a,\n              l = b,\n              m = c,\n              n = k[l - 2 * m],\n              r = k[l - m],\n              q = k[l + 0],\n              t = k[l + m],\n              v = k[l + 2 * m],\n              p = Qb[1020 + 3 * (q - r) + Qb[1020 + n - t]],\n              u = (27 * p + 63) >> 7,\n              w = (18 * p + 63) >> 7,\n              p = (9 * p + 63) >> 7;\n            k[l - 3 * m] = R[255 + k[l - 3 * m] + p];\n            k[l - 2 * m] = R[255 + n + w];\n            k[l - m] = R[255 + r + u];\n            k[l + 0] = R[255 + q - u];\n            k[l + m] = R[255 + t - w];\n            k[l + 2 * m] = R[255 + v - p];\n          }\n        b += d;\n      }\n    }\n    function Fa(a, b, c, d, e, f, g, h) {\n      for (f = 2 * f + 1; 0 < e--; ) {\n        if (ld(a, b, c, f, g))\n          if (jd(a, b, c, h)) ab(a, b, c);\n          else {\n            var k = a,\n              l = b,\n              m = c,\n              n = k[l - m],\n              r = k[l + 0],\n              q = k[l + m],\n              t = 3 * (r - n),\n              v = mb[112 + ((t + 4) >> 3)],\n              t = mb[112 + ((t + 3) >> 3)],\n              p = (v + 1) >> 1;\n            k[l - 2 * m] = R[255 + k[l - 2 * m] + p];\n            k[l - m] = R[255 + n + t];\n            k[l + 0] = R[255 + r - v];\n            k[l + m] = R[255 + q - p];\n          }\n        b += d;\n      }\n    }\n    function Ue(a, b, c, d, e, f) {\n      ea(a, b, c, 1, 16, d, e, f);\n    }\n    function Ve(a, b, c, d, e, f) {\n      ea(a, b, 1, c, 16, d, e, f);\n    }\n    function Ye(a, b, c, d, e, f) {\n      var g;\n      for (g = 3; 0 < g; --g) (b += 4 * c), Fa(a, b, c, 1, 16, d, e, f);\n    }\n    function Ze(a, b, c, d, e, f) {\n      var g;\n      for (g = 3; 0 < g; --g) (b += 4), Fa(a, b, 1, c, 16, d, e, f);\n    }\n    function We(a, b, c, d, e, f, g, h) {\n      ea(a, b, e, 1, 8, f, g, h);\n      ea(c, d, e, 1, 8, f, g, h);\n    }\n    function Xe(a, b, c, d, e, f, g, h) {\n      ea(a, b, 1, e, 8, f, g, h);\n      ea(c, d, 1, e, 8, f, g, h);\n    }\n    function $e(a, b, c, d, e, f, g, h) {\n      Fa(a, b + 4 * e, e, 1, 8, f, g, h);\n      Fa(c, d + 4 * e, e, 1, 8, f, g, h);\n    }\n    function af(a, b, c, d, e, f, g, h) {\n      Fa(a, b + 4, 1, e, 8, f, g, h);\n      Fa(c, d + 4, 1, e, 8, f, g, h);\n    }\n    function Cf() {\n      this.ba = new Cb();\n      this.ec = [];\n      this.cc = [];\n      this.Mc = [];\n      this.Dc = this.Nc = this.dc = this.fc = 0;\n      this.Oa = new Ud();\n      this.memory = 0;\n      this.Ib = \"OutputFunc\";\n      this.Jb = \"OutputAlphaFunc\";\n      this.Nd = \"OutputRowFunc\";\n    }\n    function md() {\n      this.data = [];\n      this.offset = this.kd = this.ha = this.w = 0;\n      this.na = [];\n      this.xa = this.gb = this.Ja = this.Sa = this.P = 0;\n    }\n    function Df() {\n      this.nc = this.Ea = this.b = this.hc = 0;\n      this.K = [];\n      this.w = 0;\n    }\n    function Ef() {\n      this.ua = 0;\n      this.Wa = new ac();\n      this.vb = new ac();\n      this.md = this.xc = this.wc = 0;\n      this.vc = [];\n      this.Wb = 0;\n      this.Ya = new Ub();\n      this.yc = new O();\n    }\n    function je() {\n      this.xb = this.a = 0;\n      this.l = new Oa();\n      this.ca = new Cb();\n      this.V = [];\n      this.Ba = 0;\n      this.Ta = [];\n      this.Ua = 0;\n      this.m = new Ra();\n      this.Pb = 0;\n      this.wd = new Ra();\n      this.Ma = this.$ = this.C = this.i = this.c = this.xd = 0;\n      this.s = new Ef();\n      this.ab = 0;\n      this.gc = wa(4, Df);\n      this.Oc = 0;\n    }\n    function Ff() {\n      this.Lc = this.Z = this.$a = this.i = this.c = 0;\n      this.l = new Oa();\n      this.ic = 0;\n      this.ca = [];\n      this.tb = 0;\n      this.qd = null;\n      this.rd = 0;\n    }\n    function Rb(a, b, c, d, e, f, g) {\n      a = null == a ? 0 : a[b + 0];\n      for (b = 0; b < g; ++b) (e[f + b] = (a + c[d + b]) & 255), (a = e[f + b]);\n    }\n    function Gf(a, b, c, d, e, f, g) {\n      if (null == a) Rb(null, null, c, d, e, f, g);\n      else {\n        var h;\n        for (h = 0; h < g; ++h) e[f + h] = (a[b + h] + c[d + h]) & 255;\n      }\n    }\n    function Hf(a, b, c, d, e, f, g) {\n      if (null == a) Rb(null, null, c, d, e, f, g);\n      else {\n        var h = a[b + 0],\n          k = h,\n          l = h,\n          m;\n        for (m = 0; m < g; ++m)\n          (h = a[b + m]),\n            (k = l + h - k),\n            (l = (c[d + m] + (k & -256 ? (0 > k ? 0 : 255) : k)) & 255),\n            (k = h),\n            (e[f + m] = l);\n      }\n    }\n    function Le(a, b, c, d) {\n      var e = b.width,\n        f = b.o;\n      x(null != a && null != b);\n      if (0 > c || 0 >= d || c + d > f) return null;\n      if (!a.Cc) {\n        if (null == a.ga) {\n          a.ga = new Ff();\n          var g;\n          (g = null == a.ga) ||\n            ((g = b.width * b.o),\n            x(0 == a.Gb.length),\n            (a.Gb = V(g)),\n            (a.Uc = 0),\n            null == a.Gb\n              ? (g = 0)\n              : ((a.mb = a.Gb), (a.nb = a.Uc), (a.rc = null), (g = 1)),\n            (g = !g));\n          if (!g) {\n            g = a.ga;\n            var h = a.Fa,\n              k = a.P,\n              l = a.qc,\n              m = a.mb,\n              n = a.nb,\n              r = k + 1,\n              q = l - 1,\n              t = g.l;\n            x(null != h && null != m && null != b);\n            ia[0] = null;\n            ia[1] = Rb;\n            ia[2] = Gf;\n            ia[3] = Hf;\n            g.ca = m;\n            g.tb = n;\n            g.c = b.width;\n            g.i = b.height;\n            x(0 < g.c && 0 < g.i);\n            if (1 >= l) b = 0;\n            else if (\n              ((g.$a = (h[k + 0] >> 0) & 3),\n              (g.Z = (h[k + 0] >> 2) & 3),\n              (g.Lc = (h[k + 0] >> 4) & 3),\n              (k = (h[k + 0] >> 6) & 3),\n              0 > g.$a || 1 < g.$a || 4 <= g.Z || 1 < g.Lc || k)\n            )\n              b = 0;\n            else if (\n              ((t.put = kc),\n              (t.ac = gc),\n              (t.bc = lc),\n              (t.ma = g),\n              (t.width = b.width),\n              (t.height = b.height),\n              (t.Da = b.Da),\n              (t.v = b.v),\n              (t.va = b.va),\n              (t.j = b.j),\n              (t.o = b.o),\n              g.$a)\n            )\n              b: {\n                x(1 == g.$a), (b = Bc());\n                c: for (;;) {\n                  if (null == b) {\n                    b = 0;\n                    break b;\n                  }\n                  x(null != g);\n                  g.mc = b;\n                  b.c = g.c;\n                  b.i = g.i;\n                  b.l = g.l;\n                  b.l.ma = g;\n                  b.l.width = g.c;\n                  b.l.height = g.i;\n                  b.a = 0;\n                  cb(b.m, h, r, q);\n                  if (!rb(g.c, g.i, 1, b, null)) break c;\n                  1 == b.ab && 3 == b.gc[0].hc && yc(b.s)\n                    ? ((g.ic = 1),\n                      (h = b.c * b.i),\n                      (b.Ta = null),\n                      (b.Ua = 0),\n                      (b.V = V(h)),\n                      (b.Ba = 0),\n                      null == b.V ? ((b.a = 1), (b = 0)) : (b = 1))\n                    : ((g.ic = 0), (b = Ec(b, g.c)));\n                  if (!b) break c;\n                  b = 1;\n                  break b;\n                }\n                g.mc = null;\n                b = 0;\n              }\n            else b = q >= g.c * g.i;\n            g = !b;\n          }\n          if (g) return null;\n          1 != a.ga.Lc ? (a.Ga = 0) : (d = f - c);\n        }\n        x(null != a.ga);\n        x(c + d <= f);\n        a: {\n          h = a.ga;\n          b = h.c;\n          f = h.l.o;\n          if (0 == h.$a) {\n            r = a.rc;\n            q = a.Vc;\n            t = a.Fa;\n            k = a.P + 1 + c * b;\n            l = a.mb;\n            m = a.nb + c * b;\n            x(k <= a.P + a.qc);\n            if (0 != h.Z)\n              for (x(null != ia[h.Z]), g = 0; g < d; ++g)\n                ia[h.Z](r, q, t, k, l, m, b),\n                  (r = l),\n                  (q = m),\n                  (m += b),\n                  (k += b);\n            else\n              for (g = 0; g < d; ++g)\n                I(l, m, t, k, b), (r = l), (q = m), (m += b), (k += b);\n            a.rc = r;\n            a.Vc = q;\n          } else {\n            x(null != h.mc);\n            b = c + d;\n            g = h.mc;\n            x(null != g);\n            x(b <= g.i);\n            if (g.C >= b) b = 1;\n            else if ((h.ic || Aa(), h.ic)) {\n              var h = g.V,\n                r = g.Ba,\n                q = g.c,\n                v = g.i,\n                t = 1,\n                k = g.$ / q,\n                l = g.$ % q,\n                m = g.m,\n                n = g.s,\n                p = g.$,\n                u = q * v,\n                w = q * b,\n                y = n.wc,\n                A = p < w ? ha(n, l, k) : null;\n              x(p <= u);\n              x(b <= v);\n              x(yc(n));\n              c: for (;;) {\n                for (; !m.h && p < w; ) {\n                  l & y || (A = ha(n, l, k));\n                  x(null != A);\n                  Sa(m);\n                  v = ua(A.G[0], A.H[0], m);\n                  if (256 > v)\n                    (h[r + p] = v),\n                      ++p,\n                      ++l,\n                      l >= q && ((l = 0), ++k, k <= b && !(k % 16) && Ib(g, k));\n                  else if (280 > v) {\n                    var v = ib(v - 256, m);\n                    var E = ua(A.G[4], A.H[4], m);\n                    Sa(m);\n                    E = ib(E, m);\n                    E = nc(q, E);\n                    if (p >= E && u - p >= v) {\n                      var B;\n                      for (B = 0; B < v; ++B) h[r + p + B] = h[r + p + B - E];\n                    } else {\n                      t = 0;\n                      break c;\n                    }\n                    p += v;\n                    for (l += v; l >= q; )\n                      (l -= q), ++k, k <= b && !(k % 16) && Ib(g, k);\n                    p < w && l & y && (A = ha(n, l, k));\n                  } else {\n                    t = 0;\n                    break c;\n                  }\n                  x(m.h == db(m));\n                }\n                Ib(g, k > b ? b : k);\n                break c;\n              }\n              !t || (m.h && p < u) ? ((t = 0), (g.a = m.h ? 5 : 3)) : (g.$ = p);\n              b = t;\n            } else b = Jb(g, g.V, g.Ba, g.c, g.i, b, se);\n            if (!b) {\n              d = 0;\n              break a;\n            }\n          }\n          c + d >= f && (a.Cc = 1);\n          d = 1;\n        }\n        if (!d) return null;\n        if (\n          a.Cc &&\n          ((d = a.ga), null != d && (d.mc = null), (a.ga = null), 0 < a.Ga)\n        )\n          return alert(\"todo:WebPDequantizeLevels\"), null;\n      }\n      return a.nb + c * e;\n    }\n    function If(a, b, c, d, e, f) {\n      for (; 0 < e--; ) {\n        var g = a,\n          h = b + (c ? 1 : 0),\n          k = a,\n          l = b + (c ? 0 : 3),\n          m;\n        for (m = 0; m < d; ++m) {\n          var n = k[l + 4 * m];\n          255 != n &&\n            ((n *= 32897),\n            (g[h + 4 * m + 0] = (g[h + 4 * m + 0] * n) >> 23),\n            (g[h + 4 * m + 1] = (g[h + 4 * m + 1] * n) >> 23),\n            (g[h + 4 * m + 2] = (g[h + 4 * m + 2] * n) >> 23));\n        }\n        b += f;\n      }\n    }\n    function Jf(a, b, c, d, e) {\n      for (; 0 < d--; ) {\n        var f;\n        for (f = 0; f < c; ++f) {\n          var g = a[b + 2 * f + 0],\n            h = a[b + 2 * f + 1],\n            k = h & 15,\n            l = 4369 * k,\n            h = (((h & 240) | (h >> 4)) * l) >> 16;\n          a[b + 2 * f + 0] =\n            (((((g & 240) | (g >> 4)) * l) >> 16) & 240) |\n            ((((((g & 15) | (g << 4)) * l) >> 16) >> 4) & 15);\n          a[b + 2 * f + 1] = (h & 240) | k;\n        }\n        b += e;\n      }\n    }\n    function Kf(a, b, c, d, e, f, g, h) {\n      var k = 255,\n        l,\n        m;\n      for (m = 0; m < e; ++m) {\n        for (l = 0; l < d; ++l) {\n          var n = a[b + l];\n          f[g + 4 * l] = n;\n          k &= n;\n        }\n        b += c;\n        g += h;\n      }\n      return 255 != k;\n    }\n    function Lf(a, b, c, d, e) {\n      var f;\n      for (f = 0; f < e; ++f) c[d + f] = a[b + f] >> 8;\n    }\n    function Aa() {\n      za = If;\n      vc = Jf;\n      fc = Kf;\n      Fc = Lf;\n    }\n    function va(a, b, c) {\n      self[a] = function(a, e, f, g, h, k, l, m, n, r, q, t, v, p, u, w, y) {\n        var d,\n          E = (y - 1) >> 1;\n        var B = h[k + 0] | (l[m + 0] << 16);\n        var C = n[r + 0] | (q[t + 0] << 16);\n        x(null != a);\n        var z = (3 * B + C + 131074) >> 2;\n        b(a[e + 0], z & 255, z >> 16, v, p);\n        null != f &&\n          ((z = (3 * C + B + 131074) >> 2),\n          b(f[g + 0], z & 255, z >> 16, u, w));\n        for (d = 1; d <= E; ++d) {\n          var D = h[k + d] | (l[m + d] << 16);\n          var G = n[r + d] | (q[t + d] << 16);\n          var F = B + D + C + G + 524296;\n          var H = (F + 2 * (D + C)) >> 3;\n          F = (F + 2 * (B + G)) >> 3;\n          z = (H + B) >> 1;\n          B = (F + D) >> 1;\n          b(a[e + 2 * d - 1], z & 255, z >> 16, v, p + (2 * d - 1) * c);\n          b(a[e + 2 * d - 0], B & 255, B >> 16, v, p + (2 * d - 0) * c);\n          null != f &&\n            ((z = (F + C) >> 1),\n            (B = (H + G) >> 1),\n            b(f[g + 2 * d - 1], z & 255, z >> 16, u, w + (2 * d - 1) * c),\n            b(f[g + 2 * d + 0], B & 255, B >> 16, u, w + (2 * d + 0) * c));\n          B = D;\n          C = G;\n        }\n        y & 1 ||\n          ((z = (3 * B + C + 131074) >> 2),\n          b(a[e + y - 1], z & 255, z >> 16, v, p + (y - 1) * c),\n          null != f &&\n            ((z = (3 * C + B + 131074) >> 2),\n            b(f[g + y - 1], z & 255, z >> 16, u, w + (y - 1) * c)));\n      };\n    }\n    function ic() {\n      P[Ca] = Mf;\n      P[Ua] = nd;\n      P[tc] = Nf;\n      P[Va] = od;\n      P[ya] = pd;\n      P[Db] = qd;\n      P[wc] = Of;\n      P[zb] = nd;\n      P[Ab] = od;\n      P[Ja] = pd;\n      P[Bb] = qd;\n    }\n    function Sb(a) {\n      return a & ~Pf ? (0 > a ? 0 : 255) : a >> rd;\n    }\n    function bb(a, b) {\n      return Sb(((19077 * a) >> 8) + ((26149 * b) >> 8) - 14234);\n    }\n    function nb(a, b, c) {\n      return Sb(\n        ((19077 * a) >> 8) - ((6419 * b) >> 8) - ((13320 * c) >> 8) + 8708\n      );\n    }\n    function Pa(a, b) {\n      return Sb(((19077 * a) >> 8) + ((33050 * b) >> 8) - 17685);\n    }\n    function Ga(a, b, c, d, e) {\n      d[e + 0] = bb(a, c);\n      d[e + 1] = nb(a, b, c);\n      d[e + 2] = Pa(a, b);\n    }\n    function Tb(a, b, c, d, e) {\n      d[e + 0] = Pa(a, b);\n      d[e + 1] = nb(a, b, c);\n      d[e + 2] = bb(a, c);\n    }\n    function sd(a, b, c, d, e) {\n      var f = nb(a, b, c);\n      b = ((f << 3) & 224) | (Pa(a, b) >> 3);\n      d[e + 0] = (bb(a, c) & 248) | (f >> 5);\n      d[e + 1] = b;\n    }\n    function td(a, b, c, d, e) {\n      var f = (Pa(a, b) & 240) | 15;\n      d[e + 0] = (bb(a, c) & 240) | (nb(a, b, c) >> 4);\n      d[e + 1] = f;\n    }\n    function ud(a, b, c, d, e) {\n      d[e + 0] = 255;\n      Ga(a, b, c, d, e + 1);\n    }\n    function vd(a, b, c, d, e) {\n      Tb(a, b, c, d, e);\n      d[e + 3] = 255;\n    }\n    function wd(a, b, c, d, e) {\n      Ga(a, b, c, d, e);\n      d[e + 3] = 255;\n    }\n    function ga(a, b) {\n      return 0 > a ? 0 : a > b ? b : a;\n    }\n    function la(a, b, c) {\n      self[a] = function(a, e, f, g, h, k, l, m, n) {\n        for (var d = m + (n & -2) * c; m != d; )\n          b(a[e + 0], f[g + 0], h[k + 0], l, m),\n            b(a[e + 1], f[g + 0], h[k + 0], l, m + c),\n            (e += 2),\n            ++g,\n            ++k,\n            (m += 2 * c);\n        n & 1 && b(a[e + 0], f[g + 0], h[k + 0], l, m);\n      };\n    }\n    function xd(a, b, c) {\n      return 0 == c ? (0 == a ? (0 == b ? 6 : 5) : 0 == b ? 4 : 0) : c;\n    }\n    function yd(a, b, c, d, e) {\n      switch (a >>> 30) {\n        case 3:\n          Za(b, c, d, e, 0);\n          break;\n        case 2:\n          fd(b, c, d, e);\n          break;\n        case 1:\n          pa(b, c, d, e);\n      }\n    }\n    function Oc(a, b) {\n      var c,\n        d,\n        e = b.M,\n        f = b.Nb,\n        g = a.oc,\n        h = a.pc + 40,\n        k = a.oc,\n        l = a.pc + 584,\n        m = a.oc,\n        n = a.pc + 600;\n      for (c = 0; 16 > c; ++c) g[h + 32 * c - 1] = 129;\n      for (c = 0; 8 > c; ++c)\n        (k[l + 32 * c - 1] = 129), (m[n + 32 * c - 1] = 129);\n      0 < e\n        ? (g[h - 1 - 32] = k[l - 1 - 32] = m[n - 1 - 32] = 129)\n        : (M(g, h - 32 - 1, 127, 21),\n          M(k, l - 32 - 1, 127, 9),\n          M(m, n - 32 - 1, 127, 9));\n      for (d = 0; d < a.za; ++d) {\n        var r = b.ya[b.aa + d];\n        if (0 < d) {\n          for (c = -1; 16 > c; ++c) I(g, h + 32 * c - 4, g, h + 32 * c + 12, 4);\n          for (c = -1; 8 > c; ++c)\n            I(k, l + 32 * c - 4, k, l + 32 * c + 4, 4),\n              I(m, n + 32 * c - 4, m, n + 32 * c + 4, 4);\n        }\n        var q = a.Gd,\n          t = a.Hd + d,\n          v = r.ad,\n          p = r.Hc;\n        0 < e &&\n          (I(g, h - 32, q[t].y, 0, 16),\n          I(k, l - 32, q[t].f, 0, 8),\n          I(m, n - 32, q[t].ea, 0, 8));\n        if (r.Za) {\n          var u = g;\n          var w = h - 32 + 16;\n          0 < e &&\n            (d >= a.za - 1\n              ? M(u, w, q[t].y[15], 4)\n              : I(u, w, q[t + 1].y, 0, 4));\n          for (c = 0; 4 > c; c++)\n            u[w + 128 + c] = u[w + 256 + c] = u[w + 384 + c] = u[w + 0 + c];\n          for (c = 0; 16 > c; ++c, p <<= 2)\n            (u = g), (w = h + zd[c]), W[r.Ob[c]](u, w), yd(p, v, 16 * +c, u, w);\n        } else if (((u = xd(d, e, r.Ob[0])), Y[u](g, h), 0 != p))\n          for (c = 0; 16 > c; ++c, p <<= 2) yd(p, v, 16 * +c, g, h + zd[c]);\n        c = r.Gc;\n        u = xd(d, e, r.Dd);\n        ka[u](k, l);\n        ka[u](m, n);\n        r = c >> 0;\n        p = v;\n        u = k;\n        w = l;\n        r & 255 && (r & 170 ? Nb(p, 256, u, w) : Ob(p, 256, u, w));\n        c >>= 8;\n        r = m;\n        p = n;\n        c & 255 && (c & 170 ? Nb(v, 320, r, p) : Ob(v, 320, r, p));\n        e < a.Ub - 1 &&\n          (I(q[t].y, 0, g, h + 480, 16),\n          I(q[t].f, 0, k, l + 224, 8),\n          I(q[t].ea, 0, m, n + 224, 8));\n        c = 8 * f * a.B;\n        q = a.sa;\n        t = a.ta + 16 * d + 16 * f * a.R;\n        v = a.qa;\n        r = a.ra + 8 * d + c;\n        p = a.Ha;\n        u = a.Ia + 8 * d + c;\n        for (c = 0; 16 > c; ++c) I(q, t + c * a.R, g, h + 32 * c, 16);\n        for (c = 0; 8 > c; ++c)\n          I(v, r + c * a.B, k, l + 32 * c, 8),\n            I(p, u + c * a.B, m, n + 32 * c, 8);\n      }\n    }\n    function Ad(a, b, c, d, e, f, g, h, k) {\n      var l = [0],\n        m = [0],\n        n = 0,\n        r = null != k ? k.kd : 0,\n        q = null != k ? k : new md();\n      if (null == a || 12 > c) return 7;\n      q.data = a;\n      q.w = b;\n      q.ha = c;\n      b = [b];\n      c = [c];\n      q.gb = [q.gb];\n      a: {\n        var t = b;\n        var v = c;\n        var p = q.gb;\n        x(null != a);\n        x(null != v);\n        x(null != p);\n        p[0] = 0;\n        if (12 <= v[0] && !fa(a, t[0], \"RIFF\")) {\n          if (fa(a, t[0] + 8, \"WEBP\")) {\n            p = 3;\n            break a;\n          }\n          var u = Ha(a, t[0] + 4);\n          if (12 > u || 4294967286 < u) {\n            p = 3;\n            break a;\n          }\n          if (r && u > v[0] - 8) {\n            p = 7;\n            break a;\n          }\n          p[0] = u;\n          t[0] += 12;\n          v[0] -= 12;\n        }\n        p = 0;\n      }\n      if (0 != p) return p;\n      u = 0 < q.gb[0];\n      for (c = c[0]; ; ) {\n        t = [0];\n        n = [n];\n        a: {\n          var w = a;\n          v = b;\n          p = c;\n          var y = n,\n            A = l,\n            z = m,\n            B = t;\n          y[0] = 0;\n          if (8 > p[0]) p = 7;\n          else {\n            if (!fa(w, v[0], \"VP8X\")) {\n              if (10 != Ha(w, v[0] + 4)) {\n                p = 3;\n                break a;\n              }\n              if (18 > p[0]) {\n                p = 7;\n                break a;\n              }\n              var C = Ha(w, v[0] + 8);\n              var D = 1 + Yb(w, v[0] + 12);\n              w = 1 + Yb(w, v[0] + 15);\n              if (2147483648 <= D * w) {\n                p = 3;\n                break a;\n              }\n              null != B && (B[0] = C);\n              null != A && (A[0] = D);\n              null != z && (z[0] = w);\n              v[0] += 18;\n              p[0] -= 18;\n              y[0] = 1;\n            }\n            p = 0;\n          }\n        }\n        n = n[0];\n        t = t[0];\n        if (0 != p) return p;\n        v = !!(t & 2);\n        if (!u && n) return 3;\n        null != f && (f[0] = !!(t & 16));\n        null != g && (g[0] = v);\n        null != h && (h[0] = 0);\n        g = l[0];\n        t = m[0];\n        if (n && v && null == k) {\n          p = 0;\n          break;\n        }\n        if (4 > c) {\n          p = 7;\n          break;\n        }\n        if ((u && n) || (!u && !n && !fa(a, b[0], \"ALPH\"))) {\n          c = [c];\n          q.na = [q.na];\n          q.P = [q.P];\n          q.Sa = [q.Sa];\n          a: {\n            C = a;\n            p = b;\n            u = c;\n            var y = q.gb,\n              A = q.na,\n              z = q.P,\n              B = q.Sa;\n            D = 22;\n            x(null != C);\n            x(null != u);\n            w = p[0];\n            var F = u[0];\n            x(null != A);\n            x(null != B);\n            A[0] = null;\n            z[0] = null;\n            for (B[0] = 0; ; ) {\n              p[0] = w;\n              u[0] = F;\n              if (8 > F) {\n                p = 7;\n                break a;\n              }\n              var G = Ha(C, w + 4);\n              if (4294967286 < G) {\n                p = 3;\n                break a;\n              }\n              var H = (8 + G + 1) & -2;\n              D += H;\n              if (0 < y && D > y) {\n                p = 3;\n                break a;\n              }\n              if (!fa(C, w, \"VP8 \") || !fa(C, w, \"VP8L\")) {\n                p = 0;\n                break a;\n              }\n              if (F[0] < H) {\n                p = 7;\n                break a;\n              }\n              fa(C, w, \"ALPH\") || ((A[0] = C), (z[0] = w + 8), (B[0] = G));\n              w += H;\n              F -= H;\n            }\n          }\n          c = c[0];\n          q.na = q.na[0];\n          q.P = q.P[0];\n          q.Sa = q.Sa[0];\n          if (0 != p) break;\n        }\n        c = [c];\n        q.Ja = [q.Ja];\n        q.xa = [q.xa];\n        a: if (\n          ((y = a),\n          (p = b),\n          (u = c),\n          (A = q.gb[0]),\n          (z = q.Ja),\n          (B = q.xa),\n          (C = p[0]),\n          (w = !fa(y, C, \"VP8 \")),\n          (D = !fa(y, C, \"VP8L\")),\n          x(null != y),\n          x(null != u),\n          x(null != z),\n          x(null != B),\n          8 > u[0])\n        )\n          p = 7;\n        else {\n          if (w || D) {\n            y = Ha(y, C + 4);\n            if (12 <= A && y > A - 12) {\n              p = 3;\n              break a;\n            }\n            if (r && y > u[0] - 8) {\n              p = 7;\n              break a;\n            }\n            z[0] = y;\n            p[0] += 8;\n            u[0] -= 8;\n            B[0] = D;\n          } else\n            (B[0] = 5 <= u[0] && 47 == y[C + 0] && !(y[C + 4] >> 5)),\n              (z[0] = u[0]);\n          p = 0;\n        }\n        c = c[0];\n        q.Ja = q.Ja[0];\n        q.xa = q.xa[0];\n        b = b[0];\n        if (0 != p) break;\n        if (4294967286 < q.Ja) return 3;\n        null == h || v || (h[0] = q.xa ? 2 : 1);\n        g = [g];\n        t = [t];\n        if (q.xa) {\n          if (5 > c) {\n            p = 7;\n            break;\n          }\n          h = g;\n          r = t;\n          v = f;\n          null == a || 5 > c\n            ? (a = 0)\n            : 5 <= c && 47 == a[b + 0] && !(a[b + 4] >> 5)\n            ? ((u = [0]),\n              (y = [0]),\n              (A = [0]),\n              (z = new Ra()),\n              cb(z, a, b, c),\n              mc(z, u, y, A)\n                ? (null != h && (h[0] = u[0]),\n                  null != r && (r[0] = y[0]),\n                  null != v && (v[0] = A[0]),\n                  (a = 1))\n                : (a = 0))\n            : (a = 0);\n        } else {\n          if (10 > c) {\n            p = 7;\n            break;\n          }\n          h = t;\n          null == a || 10 > c || !Jc(a, b + 3, c - 3)\n            ? (a = 0)\n            : ((r = a[b + 0] | (a[b + 1] << 8) | (a[b + 2] << 16)),\n              (v = ((a[b + 7] << 8) | a[b + 6]) & 16383),\n              (a = ((a[b + 9] << 8) | a[b + 8]) & 16383),\n              r & 1 ||\n              3 < ((r >> 1) & 7) ||\n              !((r >> 4) & 1) ||\n              r >> 5 >= q.Ja ||\n              !v ||\n              !a\n                ? (a = 0)\n                : (g && (g[0] = v), h && (h[0] = a), (a = 1)));\n        }\n        if (!a) return 3;\n        g = g[0];\n        t = t[0];\n        if (n && (l[0] != g || m[0] != t)) return 3;\n        null != k &&\n          ((k[0] = q),\n          (k.offset = b - k.w),\n          x(4294967286 > b - k.w),\n          x(k.offset == k.ha - c));\n        break;\n      }\n      return 0 == p || (7 == p && n && null == k)\n        ? (null != f && (f[0] |= null != q.na && 0 < q.na.length),\n          null != d && (d[0] = g),\n          null != e && (e[0] = t),\n          0)\n        : p;\n    }\n    function hc(a, b, c) {\n      var d = b.width,\n        e = b.height,\n        f = 0,\n        g = 0,\n        h = d,\n        k = e;\n      b.Da = null != a && 0 < a.Da;\n      if (\n        b.Da &&\n        ((h = a.cd),\n        (k = a.bd),\n        (f = a.v),\n        (g = a.j),\n        11 > c || ((f &= -2), (g &= -2)),\n        0 > f || 0 > g || 0 >= h || 0 >= k || f + h > d || g + k > e)\n      )\n        return 0;\n      b.v = f;\n      b.j = g;\n      b.va = f + h;\n      b.o = g + k;\n      b.U = h;\n      b.T = k;\n      b.da = null != a && 0 < a.da;\n      if (b.da) {\n        c = [a.ib];\n        f = [a.hb];\n        if (!bc(h, k, c, f)) return 0;\n        b.ib = c[0];\n        b.hb = f[0];\n      }\n      b.ob = null != a && a.ob;\n      b.Kb = null == a || !a.Sd;\n      b.da && ((b.ob = b.ib < (3 * d) / 4 && b.hb < (3 * e) / 4), (b.Kb = 0));\n      return 1;\n    }\n    function Bd(a) {\n      if (null == a) return 2;\n      if (11 > a.S) {\n        var b = a.f.RGBA;\n        b.fb += (a.height - 1) * b.A;\n        b.A = -b.A;\n      } else\n        (b = a.f.kb),\n          (a = a.height),\n          (b.O += (a - 1) * b.fa),\n          (b.fa = -b.fa),\n          (b.N += ((a - 1) >> 1) * b.Ab),\n          (b.Ab = -b.Ab),\n          (b.W += ((a - 1) >> 1) * b.Db),\n          (b.Db = -b.Db),\n          null != b.F && ((b.J += (a - 1) * b.lb), (b.lb = -b.lb));\n      return 0;\n    }\n    function Cd(a, b, c, d) {\n      if (null == d || 0 >= a || 0 >= b) return 2;\n      if (null != c) {\n        if (c.Da) {\n          var e = c.cd,\n            f = c.bd,\n            g = c.v & -2,\n            h = c.j & -2;\n          if (0 > g || 0 > h || 0 >= e || 0 >= f || g + e > a || h + f > b)\n            return 2;\n          a = e;\n          b = f;\n        }\n        if (c.da) {\n          e = [c.ib];\n          f = [c.hb];\n          if (!bc(a, b, e, f)) return 2;\n          a = e[0];\n          b = f[0];\n        }\n      }\n      d.width = a;\n      d.height = b;\n      a: {\n        var k = d.width;\n        var l = d.height;\n        a = d.S;\n        if (0 >= k || 0 >= l || !(a >= Ca && 13 > a)) a = 2;\n        else {\n          if (0 >= d.Rd && null == d.sd) {\n            var g = (f = e = b = 0),\n              h = k * Dd[a],\n              m = h * l;\n            11 > a ||\n              ((b = (k + 1) / 2),\n              (f = ((l + 1) / 2) * b),\n              12 == a && ((e = k), (g = e * l)));\n            l = V(m + 2 * f + g);\n            if (null == l) {\n              a = 1;\n              break a;\n            }\n            d.sd = l;\n            11 > a\n              ? ((k = d.f.RGBA),\n                (k.eb = l),\n                (k.fb = 0),\n                (k.A = h),\n                (k.size = m))\n              : ((k = d.f.kb),\n                (k.y = l),\n                (k.O = 0),\n                (k.fa = h),\n                (k.Fd = m),\n                (k.f = l),\n                (k.N = 0 + m),\n                (k.Ab = b),\n                (k.Cd = f),\n                (k.ea = l),\n                (k.W = 0 + m + f),\n                (k.Db = b),\n                (k.Ed = f),\n                12 == a && ((k.F = l), (k.J = 0 + m + 2 * f)),\n                (k.Tc = g),\n                (k.lb = e));\n          }\n          b = 1;\n          e = d.S;\n          f = d.width;\n          g = d.height;\n          if (e >= Ca && 13 > e)\n            if (11 > e)\n              (a = d.f.RGBA),\n                (h = Math.abs(a.A)),\n                (b &= h * (g - 1) + f <= a.size),\n                (b &= h >= f * Dd[e]),\n                (b &= null != a.eb);\n            else {\n              a = d.f.kb;\n              h = (f + 1) / 2;\n              m = (g + 1) / 2;\n              k = Math.abs(a.fa);\n              var l = Math.abs(a.Ab),\n                n = Math.abs(a.Db),\n                r = Math.abs(a.lb),\n                q = r * (g - 1) + f;\n              b &= k * (g - 1) + f <= a.Fd;\n              b &= l * (m - 1) + h <= a.Cd;\n              b &= n * (m - 1) + h <= a.Ed;\n              b = b & (k >= f) & (l >= h) & (n >= h);\n              b &= null != a.y;\n              b &= null != a.f;\n              b &= null != a.ea;\n              12 == e && ((b &= r >= f), (b &= q <= a.Tc), (b &= null != a.F));\n            }\n          else b = 0;\n          a = b ? 0 : 2;\n        }\n      }\n      if (0 != a) return a;\n      null != c && c.fd && (a = Bd(d));\n      return a;\n    }\n    var xb = 64,\n      Hd = [\n        0,\n        1,\n        3,\n        7,\n        15,\n        31,\n        63,\n        127,\n        255,\n        511,\n        1023,\n        2047,\n        4095,\n        8191,\n        16383,\n        32767,\n        65535,\n        131071,\n        262143,\n        524287,\n        1048575,\n        2097151,\n        4194303,\n        8388607,\n        16777215\n      ],\n      Gd = 24,\n      ob = 32,\n      Xb = 8,\n      Id = [\n        0,\n        0,\n        1,\n        1,\n        2,\n        2,\n        2,\n        2,\n        3,\n        3,\n        3,\n        3,\n        3,\n        3,\n        3,\n        3,\n        4,\n        4,\n        4,\n        4,\n        4,\n        4,\n        4,\n        4,\n        4,\n        4,\n        4,\n        4,\n        4,\n        4,\n        4,\n        4,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7\n      ];\n    X(\"Predictor0\", \"PredictorAdd0\");\n    self.Predictor0 = function() {\n      return 4278190080;\n    };\n    self.Predictor1 = function(a) {\n      return a;\n    };\n    self.Predictor2 = function(a, b, c) {\n      return b[c + 0];\n    };\n    self.Predictor3 = function(a, b, c) {\n      return b[c + 1];\n    };\n    self.Predictor4 = function(a, b, c) {\n      return b[c - 1];\n    };\n    self.Predictor5 = function(a, b, c) {\n      return aa(aa(a, b[c + 1]), b[c + 0]);\n    };\n    self.Predictor6 = function(a, b, c) {\n      return aa(a, b[c - 1]);\n    };\n    self.Predictor7 = function(a, b, c) {\n      return aa(a, b[c + 0]);\n    };\n    self.Predictor8 = function(a, b, c) {\n      return aa(b[c - 1], b[c + 0]);\n    };\n    self.Predictor9 = function(a, b, c) {\n      return aa(b[c + 0], b[c + 1]);\n    };\n    self.Predictor10 = function(a, b, c) {\n      return aa(aa(a, b[c - 1]), aa(b[c + 0], b[c + 1]));\n    };\n    self.Predictor11 = function(a, b, c) {\n      var d = b[c + 0];\n      b = b[c - 1];\n      return 0 >=\n        Ia((d >> 24) & 255, (a >> 24) & 255, (b >> 24) & 255) +\n          Ia((d >> 16) & 255, (a >> 16) & 255, (b >> 16) & 255) +\n          Ia((d >> 8) & 255, (a >> 8) & 255, (b >> 8) & 255) +\n          Ia(d & 255, a & 255, b & 255)\n        ? d\n        : a;\n    };\n    self.Predictor12 = function(a, b, c) {\n      var d = b[c + 0];\n      b = b[c - 1];\n      return (\n        ((sa(((a >> 24) & 255) + ((d >> 24) & 255) - ((b >> 24) & 255)) << 24) |\n          (sa(((a >> 16) & 255) + ((d >> 16) & 255) - ((b >> 16) & 255)) <<\n            16) |\n          (sa(((a >> 8) & 255) + ((d >> 8) & 255) - ((b >> 8) & 255)) << 8) |\n          sa((a & 255) + (d & 255) - (b & 255))) >>>\n        0\n      );\n    };\n    self.Predictor13 = function(a, b, c) {\n      var d = b[c - 1];\n      a = aa(a, b[c + 0]);\n      return (\n        ((eb((a >> 24) & 255, (d >> 24) & 255) << 24) |\n          (eb((a >> 16) & 255, (d >> 16) & 255) << 16) |\n          (eb((a >> 8) & 255, (d >> 8) & 255) << 8) |\n          eb((a >> 0) & 255, (d >> 0) & 255)) >>>\n        0\n      );\n    };\n    var ee = self.PredictorAdd0;\n    self.PredictorAdd1 = cc;\n    X(\"Predictor2\", \"PredictorAdd2\");\n    X(\"Predictor3\", \"PredictorAdd3\");\n    X(\"Predictor4\", \"PredictorAdd4\");\n    X(\"Predictor5\", \"PredictorAdd5\");\n    X(\"Predictor6\", \"PredictorAdd6\");\n    X(\"Predictor7\", \"PredictorAdd7\");\n    X(\"Predictor8\", \"PredictorAdd8\");\n    X(\"Predictor9\", \"PredictorAdd9\");\n    X(\"Predictor10\", \"PredictorAdd10\");\n    X(\"Predictor11\", \"PredictorAdd11\");\n    X(\"Predictor12\", \"PredictorAdd12\");\n    X(\"Predictor13\", \"PredictorAdd13\");\n    var fe = self.PredictorAdd2;\n    ec(\n      \"ColorIndexInverseTransform\",\n      \"MapARGB\",\n      \"32b\",\n      function(a) {\n        return (a >> 8) & 255;\n      },\n      function(a) {\n        return a;\n      }\n    );\n    ec(\n      \"VP8LColorIndexInverseTransformAlpha\",\n      \"MapAlpha\",\n      \"8b\",\n      function(a) {\n        return a;\n      },\n      function(a) {\n        return (a >> 8) & 255;\n      }\n    );\n    var rc = self.ColorIndexInverseTransform,\n      ke = self.MapARGB,\n      he = self.VP8LColorIndexInverseTransformAlpha,\n      le = self.MapAlpha,\n      pc,\n      qc = (self.VP8LPredictorsAdd = []);\n    qc.length = 16;\n    (self.VP8LPredictors = []).length = 16;\n    (self.VP8LPredictorsAdd_C = []).length = 16;\n    (self.VP8LPredictors_C = []).length = 16;\n    var Fb,\n      sc,\n      Gb,\n      Hb,\n      xc,\n      uc,\n      bd = V(511),\n      cd = V(2041),\n      dd = V(225),\n      ed = V(767),\n      ad = 0,\n      Qb = cd,\n      mb = dd,\n      R = ed,\n      U = bd,\n      Ca = 0,\n      Ua = 1,\n      tc = 2,\n      Va = 3,\n      ya = 4,\n      Db = 5,\n      wc = 6,\n      zb = 7,\n      Ab = 8,\n      Ja = 9,\n      Bb = 10,\n      pe = [2, 3, 7],\n      oe = [3, 3, 11],\n      Dc = [280, 256, 256, 256, 40],\n      qe = [0, 1, 1, 1, 0],\n      ne = [17, 18, 0, 1, 2, 3, 4, 5, 16, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],\n      de = [\n        24,\n        7,\n        23,\n        25,\n        40,\n        6,\n        39,\n        41,\n        22,\n        26,\n        38,\n        42,\n        56,\n        5,\n        55,\n        57,\n        21,\n        27,\n        54,\n        58,\n        37,\n        43,\n        72,\n        4,\n        71,\n        73,\n        20,\n        28,\n        53,\n        59,\n        70,\n        74,\n        36,\n        44,\n        88,\n        69,\n        75,\n        52,\n        60,\n        3,\n        87,\n        89,\n        19,\n        29,\n        86,\n        90,\n        35,\n        45,\n        68,\n        76,\n        85,\n        91,\n        51,\n        61,\n        104,\n        2,\n        103,\n        105,\n        18,\n        30,\n        102,\n        106,\n        34,\n        46,\n        84,\n        92,\n        67,\n        77,\n        101,\n        107,\n        50,\n        62,\n        120,\n        1,\n        119,\n        121,\n        83,\n        93,\n        17,\n        31,\n        100,\n        108,\n        66,\n        78,\n        118,\n        122,\n        33,\n        47,\n        117,\n        123,\n        49,\n        63,\n        99,\n        109,\n        82,\n        94,\n        0,\n        116,\n        124,\n        65,\n        79,\n        16,\n        32,\n        98,\n        110,\n        48,\n        115,\n        125,\n        81,\n        95,\n        64,\n        114,\n        126,\n        97,\n        111,\n        80,\n        113,\n        127,\n        96,\n        112\n      ],\n      me = [\n        2954,\n        2956,\n        2958,\n        2962,\n        2970,\n        2986,\n        3018,\n        3082,\n        3212,\n        3468,\n        3980,\n        5004\n      ],\n      ie = 8,\n      Lb = [\n        4,\n        5,\n        6,\n        7,\n        8,\n        9,\n        10,\n        10,\n        11,\n        12,\n        13,\n        14,\n        15,\n        16,\n        17,\n        17,\n        18,\n        19,\n        20,\n        20,\n        21,\n        21,\n        22,\n        22,\n        23,\n        23,\n        24,\n        25,\n        25,\n        26,\n        27,\n        28,\n        29,\n        30,\n        31,\n        32,\n        33,\n        34,\n        35,\n        36,\n        37,\n        37,\n        38,\n        39,\n        40,\n        41,\n        42,\n        43,\n        44,\n        45,\n        46,\n        46,\n        47,\n        48,\n        49,\n        50,\n        51,\n        52,\n        53,\n        54,\n        55,\n        56,\n        57,\n        58,\n        59,\n        60,\n        61,\n        62,\n        63,\n        64,\n        65,\n        66,\n        67,\n        68,\n        69,\n        70,\n        71,\n        72,\n        73,\n        74,\n        75,\n        76,\n        76,\n        77,\n        78,\n        79,\n        80,\n        81,\n        82,\n        83,\n        84,\n        85,\n        86,\n        87,\n        88,\n        89,\n        91,\n        93,\n        95,\n        96,\n        98,\n        100,\n        101,\n        102,\n        104,\n        106,\n        108,\n        110,\n        112,\n        114,\n        116,\n        118,\n        122,\n        124,\n        126,\n        128,\n        130,\n        132,\n        134,\n        136,\n        138,\n        140,\n        143,\n        145,\n        148,\n        151,\n        154,\n        157\n      ],\n      Mb = [\n        4,\n        5,\n        6,\n        7,\n        8,\n        9,\n        10,\n        11,\n        12,\n        13,\n        14,\n        15,\n        16,\n        17,\n        18,\n        19,\n        20,\n        21,\n        22,\n        23,\n        24,\n        25,\n        26,\n        27,\n        28,\n        29,\n        30,\n        31,\n        32,\n        33,\n        34,\n        35,\n        36,\n        37,\n        38,\n        39,\n        40,\n        41,\n        42,\n        43,\n        44,\n        45,\n        46,\n        47,\n        48,\n        49,\n        50,\n        51,\n        52,\n        53,\n        54,\n        55,\n        56,\n        57,\n        58,\n        60,\n        62,\n        64,\n        66,\n        68,\n        70,\n        72,\n        74,\n        76,\n        78,\n        80,\n        82,\n        84,\n        86,\n        88,\n        90,\n        92,\n        94,\n        96,\n        98,\n        100,\n        102,\n        104,\n        106,\n        108,\n        110,\n        112,\n        114,\n        116,\n        119,\n        122,\n        125,\n        128,\n        131,\n        134,\n        137,\n        140,\n        143,\n        146,\n        149,\n        152,\n        155,\n        158,\n        161,\n        164,\n        167,\n        170,\n        173,\n        177,\n        181,\n        185,\n        189,\n        193,\n        197,\n        201,\n        205,\n        209,\n        213,\n        217,\n        221,\n        225,\n        229,\n        234,\n        239,\n        245,\n        249,\n        254,\n        259,\n        264,\n        269,\n        274,\n        279,\n        284\n      ],\n      oa = null,\n      He = [\n        [173, 148, 140, 0],\n        [176, 155, 140, 135, 0],\n        [180, 157, 141, 134, 130, 0],\n        [254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129, 0]\n      ],\n      Ie = [0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15],\n      Mc = [-0, 1, -1, 2, -2, 3, 4, 6, -3, 5, -4, -5, -6, 7, -7, 8, -8, -9],\n      Fe = [\n        [\n          [\n            [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n            [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n            [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]\n          ],\n          [\n            [253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128],\n            [189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128],\n            [106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128]\n          ],\n          [\n            [1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128],\n            [181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128],\n            [78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128]\n          ],\n          [\n            [1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128],\n            [184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128],\n            [77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128]\n          ],\n          [\n            [1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128],\n            [170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128],\n            [37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128]\n          ],\n          [\n            [1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128],\n            [207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128],\n            [102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128]\n          ],\n          [\n            [1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128],\n            [177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128],\n            [80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128]\n          ],\n          [\n            [1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n            [246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n            [255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]\n          ]\n        ],\n        [\n          [\n            [198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62],\n            [131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1],\n            [68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128]\n          ],\n          [\n            [1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128],\n            [184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128],\n            [81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128]\n          ],\n          [\n            [1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128],\n            [99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128],\n            [23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128]\n          ],\n          [\n            [1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128],\n            [109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128],\n            [44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128]\n          ],\n          [\n            [1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128],\n            [94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128],\n            [22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128]\n          ],\n          [\n            [1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128],\n            [124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128],\n            [35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128]\n          ],\n          [\n            [1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128],\n            [121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128],\n            [45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128]\n          ],\n          [\n            [1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128],\n            [203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128],\n            [137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128]\n          ]\n        ],\n        [\n          [\n            [253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128],\n            [175, 13, 224, 243, 193, 185, 249, 198, 255, 255, 128],\n            [73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128]\n          ],\n          [\n            [1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128],\n            [239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128],\n            [155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128]\n          ],\n          [\n            [1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128],\n            [201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128],\n            [69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128]\n          ],\n          [\n            [1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128],\n            [223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128],\n            [141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128]\n          ],\n          [\n            [1, 16, 248, 255, 255, 128, 128, 128, 128, 128, 128],\n            [190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128],\n            [149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n          ],\n          [\n            [1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n            [247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n            [240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n          ],\n          [\n            [1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128],\n            [213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128],\n            [55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n          ],\n          [\n            [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n            [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n            [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]\n          ]\n        ],\n        [\n          [\n            [202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255],\n            [126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128],\n            [61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128]\n          ],\n          [\n            [1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128],\n            [166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128],\n            [39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128]\n          ],\n          [\n            [1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128],\n            [124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128],\n            [24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128]\n          ],\n          [\n            [1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128],\n            [149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128],\n            [28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128]\n          ],\n          [\n            [1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128],\n            [123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128],\n            [20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128]\n          ],\n          [\n            [1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128],\n            [168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128],\n            [47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128]\n          ],\n          [\n            [1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128],\n            [141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128],\n            [42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128]\n          ],\n          [\n            [1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n            [244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n            [238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n          ]\n        ]\n      ],\n      Ke = [\n        [\n          [231, 120, 48, 89, 115, 113, 120, 152, 112],\n          [152, 179, 64, 126, 170, 118, 46, 70, 95],\n          [175, 69, 143, 80, 85, 82, 72, 155, 103],\n          [56, 58, 10, 171, 218, 189, 17, 13, 152],\n          [114, 26, 17, 163, 44, 195, 21, 10, 173],\n          [121, 24, 80, 195, 26, 62, 44, 64, 85],\n          [144, 71, 10, 38, 171, 213, 144, 34, 26],\n          [170, 46, 55, 19, 136, 160, 33, 206, 71],\n          [63, 20, 8, 114, 114, 208, 12, 9, 226],\n          [81, 40, 11, 96, 182, 84, 29, 16, 36]\n        ],\n        [\n          [134, 183, 89, 137, 98, 101, 106, 165, 148],\n          [72, 187, 100, 130, 157, 111, 32, 75, 80],\n          [66, 102, 167, 99, 74, 62, 40, 234, 128],\n          [41, 53, 9, 178, 241, 141, 26, 8, 107],\n          [74, 43, 26, 146, 73, 166, 49, 23, 157],\n          [65, 38, 105, 160, 51, 52, 31, 115, 128],\n          [104, 79, 12, 27, 217, 255, 87, 17, 7],\n          [87, 68, 71, 44, 114, 51, 15, 186, 23],\n          [47, 41, 14, 110, 182, 183, 21, 17, 194],\n          [66, 45, 25, 102, 197, 189, 23, 18, 22]\n        ],\n        [\n          [88, 88, 147, 150, 42, 46, 45, 196, 205],\n          [43, 97, 183, 117, 85, 38, 35, 179, 61],\n          [39, 53, 200, 87, 26, 21, 43, 232, 171],\n          [56, 34, 51, 104, 114, 102, 29, 93, 77],\n          [39, 28, 85, 171, 58, 165, 90, 98, 64],\n          [34, 22, 116, 206, 23, 34, 43, 166, 73],\n          [107, 54, 32, 26, 51, 1, 81, 43, 31],\n          [68, 25, 106, 22, 64, 171, 36, 225, 114],\n          [34, 19, 21, 102, 132, 188, 16, 76, 124],\n          [62, 18, 78, 95, 85, 57, 50, 48, 51]\n        ],\n        [\n          [193, 101, 35, 159, 215, 111, 89, 46, 111],\n          [60, 148, 31, 172, 219, 228, 21, 18, 111],\n          [112, 113, 77, 85, 179, 255, 38, 120, 114],\n          [40, 42, 1, 196, 245, 209, 10, 25, 109],\n          [88, 43, 29, 140, 166, 213, 37, 43, 154],\n          [61, 63, 30, 155, 67, 45, 68, 1, 209],\n          [100, 80, 8, 43, 154, 1, 51, 26, 71],\n          [142, 78, 78, 16, 255, 128, 34, 197, 171],\n          [41, 40, 5, 102, 211, 183, 4, 1, 221],\n          [51, 50, 17, 168, 209, 192, 23, 25, 82]\n        ],\n        [\n          [138, 31, 36, 171, 27, 166, 38, 44, 229],\n          [67, 87, 58, 169, 82, 115, 26, 59, 179],\n          [63, 59, 90, 180, 59, 166, 93, 73, 154],\n          [40, 40, 21, 116, 143, 209, 34, 39, 175],\n          [47, 15, 16, 183, 34, 223, 49, 45, 183],\n          [46, 17, 33, 183, 6, 98, 15, 32, 183],\n          [57, 46, 22, 24, 128, 1, 54, 17, 37],\n          [65, 32, 73, 115, 28, 128, 23, 128, 205],\n          [40, 3, 9, 115, 51, 192, 18, 6, 223],\n          [87, 37, 9, 115, 59, 77, 64, 21, 47]\n        ],\n        [\n          [104, 55, 44, 218, 9, 54, 53, 130, 226],\n          [64, 90, 70, 205, 40, 41, 23, 26, 57],\n          [54, 57, 112, 184, 5, 41, 38, 166, 213],\n          [30, 34, 26, 133, 152, 116, 10, 32, 134],\n          [39, 19, 53, 221, 26, 114, 32, 73, 255],\n          [31, 9, 65, 234, 2, 15, 1, 118, 73],\n          [75, 32, 12, 51, 192, 255, 160, 43, 51],\n          [88, 31, 35, 67, 102, 85, 55, 186, 85],\n          [56, 21, 23, 111, 59, 205, 45, 37, 192],\n          [55, 38, 70, 124, 73, 102, 1, 34, 98]\n        ],\n        [\n          [125, 98, 42, 88, 104, 85, 117, 175, 82],\n          [95, 84, 53, 89, 128, 100, 113, 101, 45],\n          [75, 79, 123, 47, 51, 128, 81, 171, 1],\n          [57, 17, 5, 71, 102, 57, 53, 41, 49],\n          [38, 33, 13, 121, 57, 73, 26, 1, 85],\n          [41, 10, 67, 138, 77, 110, 90, 47, 114],\n          [115, 21, 2, 10, 102, 255, 166, 23, 6],\n          [101, 29, 16, 10, 85, 128, 101, 196, 26],\n          [57, 18, 10, 102, 102, 213, 34, 20, 43],\n          [117, 20, 15, 36, 163, 128, 68, 1, 26]\n        ],\n        [\n          [102, 61, 71, 37, 34, 53, 31, 243, 192],\n          [69, 60, 71, 38, 73, 119, 28, 222, 37],\n          [68, 45, 128, 34, 1, 47, 11, 245, 171],\n          [62, 17, 19, 70, 146, 85, 55, 62, 70],\n          [37, 43, 37, 154, 100, 163, 85, 160, 1],\n          [63, 9, 92, 136, 28, 64, 32, 201, 85],\n          [75, 15, 9, 9, 64, 255, 184, 119, 16],\n          [86, 6, 28, 5, 64, 255, 25, 248, 1],\n          [56, 8, 17, 132, 137, 255, 55, 116, 128],\n          [58, 15, 20, 82, 135, 57, 26, 121, 40]\n        ],\n        [\n          [164, 50, 31, 137, 154, 133, 25, 35, 218],\n          [51, 103, 44, 131, 131, 123, 31, 6, 158],\n          [86, 40, 64, 135, 148, 224, 45, 183, 128],\n          [22, 26, 17, 131, 240, 154, 14, 1, 209],\n          [45, 16, 21, 91, 64, 222, 7, 1, 197],\n          [56, 21, 39, 155, 60, 138, 23, 102, 213],\n          [83, 12, 13, 54, 192, 255, 68, 47, 28],\n          [85, 26, 85, 85, 128, 128, 32, 146, 171],\n          [18, 11, 7, 63, 144, 171, 4, 4, 246],\n          [35, 27, 10, 146, 174, 171, 12, 26, 128]\n        ],\n        [\n          [190, 80, 35, 99, 180, 80, 126, 54, 45],\n          [85, 126, 47, 87, 176, 51, 41, 20, 32],\n          [101, 75, 128, 139, 118, 146, 116, 128, 85],\n          [56, 41, 15, 176, 236, 85, 37, 9, 62],\n          [71, 30, 17, 119, 118, 255, 17, 18, 138],\n          [101, 38, 60, 138, 55, 70, 43, 26, 142],\n          [146, 36, 19, 30, 171, 255, 97, 27, 20],\n          [138, 45, 61, 62, 219, 1, 81, 188, 64],\n          [32, 41, 20, 117, 151, 142, 20, 21, 163],\n          [112, 19, 12, 61, 195, 128, 48, 4, 24]\n        ]\n      ],\n      Ee = [\n        [\n          [\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255],\n            [249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255],\n            [234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255],\n            [250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255],\n            [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ]\n        ],\n        [\n          [\n            [217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255],\n            [234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255]\n          ],\n          [\n            [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n            [250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ]\n        ],\n        [\n          [\n            [186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255],\n            [234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255],\n            [251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255]\n          ],\n          [\n            [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ]\n        ],\n        [\n          [\n            [248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255],\n            [248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n            [246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n            [252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255],\n            [248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n            [253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n            [252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n            [250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ]\n        ]\n      ],\n      Ge = [0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 0],\n      Nc,\n      Y = [],\n      W = [],\n      ka = [],\n      Za,\n      fd,\n      Nb,\n      pa,\n      Ob,\n      Xc,\n      Tc,\n      Yc,\n      Uc,\n      Zc,\n      Vc,\n      $c,\n      Wc,\n      Rc,\n      Pc,\n      Sc,\n      Qc,\n      re = 1,\n      Cc = 2,\n      ia = [],\n      za,\n      vc,\n      fc,\n      Fc,\n      P = [];\n    va(\"UpsampleRgbLinePair\", Ga, 3);\n    va(\"UpsampleBgrLinePair\", Tb, 3);\n    va(\"UpsampleRgbaLinePair\", wd, 4);\n    va(\"UpsampleBgraLinePair\", vd, 4);\n    va(\"UpsampleArgbLinePair\", ud, 4);\n    va(\"UpsampleRgba4444LinePair\", td, 2);\n    va(\"UpsampleRgb565LinePair\", sd, 2);\n    var Mf = self.UpsampleRgbLinePair,\n      Nf = self.UpsampleBgrLinePair,\n      nd = self.UpsampleRgbaLinePair,\n      od = self.UpsampleBgraLinePair,\n      pd = self.UpsampleArgbLinePair,\n      qd = self.UpsampleRgba4444LinePair,\n      Of = self.UpsampleRgb565LinePair,\n      Wa = 16,\n      Ba = 1 << (Wa - 1),\n      ta = -227,\n      Eb = 482,\n      rd = 6,\n      Pf = (256 << rd) - 1,\n      jc = 0,\n      Yd = V(256),\n      ae = V(256),\n      $d = V(256),\n      Zd = V(256),\n      be = V(Eb - ta),\n      ce = V(Eb - ta);\n    la(\"YuvToRgbRow\", Ga, 3);\n    la(\"YuvToBgrRow\", Tb, 3);\n    la(\"YuvToRgbaRow\", wd, 4);\n    la(\"YuvToBgraRow\", vd, 4);\n    la(\"YuvToArgbRow\", ud, 4);\n    la(\"YuvToRgba4444Row\", td, 2);\n    la(\"YuvToRgb565Row\", sd, 2);\n    var zd = [\n        0,\n        4,\n        8,\n        12,\n        128,\n        132,\n        136,\n        140,\n        256,\n        260,\n        264,\n        268,\n        384,\n        388,\n        392,\n        396\n      ],\n      Ya = [0, 2, 8],\n      Qf = [8, 7, 6, 4, 4, 2, 2, 2, 1, 1, 1, 1],\n      Ne = 1;\n    this.WebPDecodeRGBA = function(a, b, c, d, e) {\n      var f = Ua;\n      var g = new Cf(),\n        h = new Cb();\n      g.ba = h;\n      h.S = f;\n      h.width = [h.width];\n      h.height = [h.height];\n      var k = h.width;\n      var l = h.height,\n        m = new Td();\n      if (null == m || null == a) var n = 2;\n      else\n        x(null != m),\n          (n = Ad(a, b, c, m.width, m.height, m.Pd, m.Qd, m.format, null));\n      0 != n\n        ? (k = 0)\n        : (null != k && (k[0] = m.width[0]),\n          null != l && (l[0] = m.height[0]),\n          (k = 1));\n      if (k) {\n        h.width = h.width[0];\n        h.height = h.height[0];\n        null != d && (d[0] = h.width);\n        null != e && (e[0] = h.height);\n        b: {\n          d = new Oa();\n          e = new md();\n          e.data = a;\n          e.w = b;\n          e.ha = c;\n          e.kd = 1;\n          b = [0];\n          x(null != e);\n          a = Ad(e.data, e.w, e.ha, null, null, null, b, null, e);\n          (0 == a || 7 == a) && b[0] && (a = 4);\n          b = a;\n          if (0 == b) {\n            x(null != g);\n            d.data = e.data;\n            d.w = e.w + e.offset;\n            d.ha = e.ha - e.offset;\n            d.put = kc;\n            d.ac = gc;\n            d.bc = lc;\n            d.ma = g;\n            if (e.xa) {\n              a = Bc();\n              if (null == a) {\n                g = 1;\n                break b;\n              }\n              if (te(a, d)) {\n                b = Cd(d.width, d.height, g.Oa, g.ba);\n                if ((d = 0 == b)) {\n                  c: {\n                    d = a;\n                    d: for (;;) {\n                      if (null == d) {\n                        d = 0;\n                        break c;\n                      }\n                      x(null != d.s.yc);\n                      x(null != d.s.Ya);\n                      x(0 < d.s.Wb);\n                      c = d.l;\n                      x(null != c);\n                      e = c.ma;\n                      x(null != e);\n                      if (0 != d.xb) {\n                        d.ca = e.ba;\n                        d.tb = e.tb;\n                        x(null != d.ca);\n                        if (!hc(e.Oa, c, Va)) {\n                          d.a = 2;\n                          break d;\n                        }\n                        if (!Ec(d, c.width)) break d;\n                        if (c.da) break d;\n                        (c.da || hb(d.ca.S)) && Aa();\n                        11 > d.ca.S ||\n                          (alert(\"todo:WebPInitConvertARGBToYUV\"),\n                          null != d.ca.f.kb.F && Aa());\n                        if (\n                          d.Pb &&\n                          0 < d.s.ua &&\n                          null == d.s.vb.X &&\n                          !Zb(d.s.vb, d.s.Wa.Xa)\n                        ) {\n                          d.a = 1;\n                          break d;\n                        }\n                        d.xb = 0;\n                      }\n                      if (!Jb(d, d.V, d.Ba, d.c, d.i, c.o, ge)) break d;\n                      e.Dc = d.Ma;\n                      d = 1;\n                      break c;\n                    }\n                    x(0 != d.a);\n                    d = 0;\n                  }\n                  d = !d;\n                }\n                d && (b = a.a);\n              } else b = a.a;\n            } else {\n              a = new Ce();\n              if (null == a) {\n                g = 1;\n                break b;\n              }\n              a.Fa = e.na;\n              a.P = e.P;\n              a.qc = e.Sa;\n              if (Kc(a, d)) {\n                if (((b = Cd(d.width, d.height, g.Oa, g.ba)), 0 == b)) {\n                  a.Aa = 0;\n                  c = g.Oa;\n                  e = a;\n                  x(null != e);\n                  if (null != c) {\n                    k = c.Md;\n                    k = 0 > k ? 0 : 100 < k ? 255 : (255 * k) / 100;\n                    if (0 < k) {\n                      for (l = m = 0; 4 > l; ++l)\n                        (n = e.pb[l]),\n                          12 > n.lc &&\n                            (n.ia = (k * Qf[0 > n.lc ? 0 : n.lc]) >> 3),\n                          (m |= n.ia);\n                      m && (alert(\"todo:VP8InitRandom\"), (e.ia = 1));\n                    }\n                    e.Ga = c.Id;\n                    100 < e.Ga ? (e.Ga = 100) : 0 > e.Ga && (e.Ga = 0);\n                  }\n                  Me(a, d) || (b = a.a);\n                }\n              } else b = a.a;\n            }\n            0 == b && null != g.Oa && g.Oa.fd && (b = Bd(g.ba));\n          }\n          g = b;\n        }\n        f = 0 != g ? null : 11 > f ? h.f.RGBA.eb : h.f.kb.y;\n      } else f = null;\n      return f;\n    };\n    var Dd = [3, 4, 3, 4, 4, 2, 2, 4, 4, 4, 2, 1, 1];\n  };\n  new _WebPDecoder();\n\n  /** @license\n   * Copyright (c) 2017 Dominik Homberger\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nhttps://webpjs.appspot.com\nWebPRiffParser dominikhlbg@gmail.com\n*/\n\n  function memcmp(data, data_off, str, size) {\n    for (var i = 0; i < size; i++)\n      if (data[data_off + i] != str.charCodeAt(i)) return true;\n    return false;\n  }\n\n  function GetTag(data, data_off) {\n    var str = \"\";\n    for (var i = 0; i < 4; i++) str += String.fromCharCode(data[data_off++]);\n    return str;\n  }\n\n  function GetLE16(data, data_off) {\n    return (data[data_off + 0] << 0) | (data[data_off + 1] << 8);\n  }\n\n  function GetLE24(data, data_off) {\n    return (\n      ((data[data_off + 0] << 0) |\n        (data[data_off + 1] << 8) |\n        (data[data_off + 2] << 16)) >>>\n      0\n    );\n  }\n\n  function GetLE32(data, data_off) {\n    return (\n      ((data[data_off + 0] << 0) |\n        (data[data_off + 1] << 8) |\n        (data[data_off + 2] << 16) |\n        (data[data_off + 3] << 24)) >>>\n      0\n    );\n  }\n\n  function WebPRiffParser(src, src_off) {\n    var imagearray = {};\n    var i = 0;\n    var alpha_chunk = false;\n    var alpha_size = 0;\n    var alpha_offset = 0;\n    imagearray[\"frames\"] = [];\n    if (memcmp(src, src_off, \"RIFF\", 4)) return;\n    src_off += 4;\n    var riff_size = GetLE32(src, src_off) + 8;\n    src_off += 8;\n\n    while (src_off < src.length) {\n      var fourcc = GetTag(src, src_off);\n      src_off += 4;\n\n      var payload_size = GetLE32(src, src_off);\n      src_off += 4;\n      var payload_size_padded = payload_size + (payload_size & 1);\n\n      switch (fourcc) {\n        case \"VP8 \":\n        case \"VP8L\":\n          if (typeof imagearray[\"frames\"][i] === \"undefined\")\n            imagearray[\"frames\"][i] = {};\n          var obj = imagearray[\"frames\"][i];\n          var height = [0];\n          var width = [0];\n          obj[\"src_off\"] = alpha_chunk ? alpha_offset : src_off - 8;\n          obj[\"src_size\"] = alpha_size + payload_size + 8;\n          //var rgba = webpdecoder.WebPDecodeRGBA(src,(alpha_chunk?alpha_offset:src_off-8),alpha_size+payload_size+8,width,height);\n          //imagearray[i]={'rgba':rgba,'width':width[0],'height':height[0]};\n          i++;\n          if (alpha_chunk) {\n            alpha_chunk = false;\n            alpha_size = 0;\n            alpha_offset = 0;\n          }\n          break;\n        case \"VP8X\":\n          var obj = (imagearray[\"header\"] = {});\n          var feature_flags = (obj[\"feature_flags\"] = src[src_off]);\n          var src_off_ = src_off + 4;\n          var canvas_width = (obj[\"canvas_width\"] = 1 + GetLE24(src, src_off_));\n          src_off_ += 3;\n          var canvas_height = (obj[\"canvas_height\"] =\n            1 + GetLE24(src, src_off_));\n          src_off_ += 3;\n          break;\n        case \"ALPH\":\n          alpha_chunk = true;\n          alpha_size = payload_size_padded + 8;\n          alpha_offset = src_off - 8;\n          break;\n\n        case \"ANIM\":\n          var obj = imagearray[\"header\"];\n          var bgcolor = (obj[\"bgcolor\"] = GetLE32(src, src_off));\n          src_off_ = src_off + 4;\n\n          var loop_count = (obj[\"loop_count\"] = GetLE16(src, src_off_));\n          src_off_ += 2;\n          break;\n        case \"ANMF\":\n          var offset_x = 0,\n            offset_y = 0,\n            width = 0,\n            height = 0,\n            duration = 0,\n            blend = 0,\n            dispose = 0,\n            temp = 0;\n          var obj = (imagearray[\"frames\"][i] = {});\n          obj[\"offset_x\"] = offset_x = 2 * GetLE24(src, src_off);\n          src_off += 3;\n          obj[\"offset_y\"] = offset_y = 2 * GetLE24(src, src_off);\n          src_off += 3;\n          obj[\"width\"] = width = 1 + GetLE24(src, src_off);\n          src_off += 3;\n          obj[\"height\"] = height = 1 + GetLE24(src, src_off);\n          src_off += 3;\n          obj[\"duration\"] = duration = GetLE24(src, src_off);\n          src_off += 3;\n          temp = src[src_off++];\n          obj[\"dispose\"] = dispose = temp & 1;\n          obj[\"blend\"] = blend = (temp >> 1) & 1;\n          break;\n        default:\n      }\n      if (fourcc != \"ANMF\") src_off += payload_size_padded;\n    }\n    return imagearray;\n  }\n\n  var height = [0];\n  var width = [0];\n  var pixels = [];\n  var webpdecoder = new _WebPDecoder();\n\n  var response = imageData;\n  var imagearray = WebPRiffParser(response, 0);\n  imagearray[\"response\"] = response;\n  imagearray[\"rgbaoutput\"] = true;\n  imagearray[\"dataurl\"] = false;\n\n  var header = imagearray[\"header\"] ? imagearray[\"header\"] : null;\n  var frames = imagearray[\"frames\"] ? imagearray[\"frames\"] : null;\n\n  if (header) {\n    header[\"loop_counter\"] = header[\"loop_count\"];\n    height = [header[\"canvas_height\"]];\n    width = [header[\"canvas_width\"]];\n\n    var blend = false;\n    for (var f = 0; f < frames.length; f++)\n      if (frames[f][\"blend\"] == 0) {\n        blend = true;\n        break;\n      }\n  }\n\n  var frame = frames[0];\n  var rgba = webpdecoder.WebPDecodeRGBA(\n    response,\n    frame[\"src_off\"],\n    frame[\"src_size\"],\n    width,\n    height\n  );\n  frame[\"rgba\"] = rgba;\n  frame[\"imgwidth\"] = width[0];\n  frame[\"imgheight\"] = height[0];\n\n  for (var i = 0; i < width[0] * height[0] * 4; i++) {\n    pixels[i] = rgba[i];\n  }\n\n  this.width = width;\n  this.height = height;\n  this.data = pixels;\n  return this;\n}\n\nWebPDecoder.prototype.getData = function() {\n  return this.data;\n};\n\nexport { WebPDecoder };\n","/**\n * @license\n *\n * Copyright (c) 2014 James Robb, https://github.com/jamesbrobb\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { zlibSync } from \"../libs/fflate.js\";\nimport { PNG } from \"../libs/png.js\";\n\n/**\n * jsPDF PNG PlugIn\n * @name png_support\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  /*\n   * @see http://www.w3.org/TR/PNG-Chunks.html\n   *\n   Color    Allowed      Interpretation\n   Type     Bit Depths\n\n     0       1,2,4,8,16  Each pixel is a grayscale sample.\n\n     2       8,16        Each pixel is an R,G,B triple.\n\n     3       1,2,4,8     Each pixel is a palette index;\n                         a PLTE chunk must appear.\n\n     4       8,16        Each pixel is a grayscale sample,\n                         followed by an alpha sample.\n\n     6       8,16        Each pixel is an R,G,B triple,\n                         followed by an alpha sample.\n  */\n\n  /*\n   * PNG filter method types\n   *\n   * @see http://www.w3.org/TR/PNG-Filters.html\n   * @see http://www.libpng.org/pub/png/book/chapter09.html\n   *\n   * This is what the value 'Predictor' in decode params relates to\n   *\n   * 15 is \"optimal prediction\", which means the prediction algorithm can change from line to line.\n   * In that case, you actually have to read the first byte off each line for the prediction algorthim (which should be 0-4, corresponding to PDF 10-14) and select the appropriate unprediction algorithm based on that byte.\n   *\n     0       None\n     1       Sub\n     2       Up\n     3       Average\n     4       Paeth\n   */\n\n  var canCompress = function(value) {\n    return value !== jsPDFAPI.image_compression.NONE && hasCompressionJS();\n  };\n\n  var hasCompressionJS = function() {\n    return typeof zlibSync === \"function\";\n  };\n  var compressBytes = function(bytes, lineLength, colorsPerPixel, compression) {\n    var level = 4;\n    var filter_method = filterUp;\n\n    switch (compression) {\n      case jsPDFAPI.image_compression.FAST:\n        level = 1;\n        filter_method = filterSub;\n        break;\n\n      case jsPDFAPI.image_compression.MEDIUM:\n        level = 6;\n        filter_method = filterAverage;\n        break;\n\n      case jsPDFAPI.image_compression.SLOW:\n        level = 9;\n        filter_method = filterPaeth;\n        break;\n    }\n\n    bytes = applyPngFilterMethod(\n      bytes,\n      lineLength,\n      colorsPerPixel,\n      filter_method\n    );\n    var dat = zlibSync(bytes, { level: level });\n    return jsPDFAPI.__addimage__.arrayBufferToBinaryString(dat);\n  };\n\n  var applyPngFilterMethod = function(\n    bytes,\n    lineLength,\n    colorsPerPixel,\n    filter_method\n  ) {\n    var lines = bytes.length / lineLength,\n      result = new Uint8Array(bytes.length + lines),\n      filter_methods = getFilterMethods(),\n      line,\n      prevLine,\n      offset;\n\n    for (var i = 0; i < lines; i += 1) {\n      offset = i * lineLength;\n      line = bytes.subarray(offset, offset + lineLength);\n\n      if (filter_method) {\n        result.set(filter_method(line, colorsPerPixel, prevLine), offset + i);\n      } else {\n        var len = filter_methods.length,\n          results = [];\n\n        for (var j; j < len; j += 1) {\n          results[j] = filter_methods[j](line, colorsPerPixel, prevLine);\n        }\n\n        var ind = getIndexOfSmallestSum(results.concat());\n\n        result.set(results[ind], offset + i);\n      }\n\n      prevLine = line;\n    }\n\n    return result;\n  };\n\n  var filterNone = function(line) {\n    /*var result = new Uint8Array(line.length + 1);\n    result[0] = 0;\n    result.set(line, 1);*/\n\n    var result = Array.apply([], line);\n    result.unshift(0);\n\n    return result;\n  };\n\n  var filterSub = function(line, colorsPerPixel) {\n    var result = [],\n      len = line.length,\n      left;\n\n    result[0] = 1;\n\n    for (var i = 0; i < len; i += 1) {\n      left = line[i - colorsPerPixel] || 0;\n      result[i + 1] = (line[i] - left + 0x0100) & 0xff;\n    }\n\n    return result;\n  };\n\n  var filterUp = function(line, colorsPerPixel, prevLine) {\n    var result = [],\n      len = line.length,\n      up;\n\n    result[0] = 2;\n\n    for (var i = 0; i < len; i += 1) {\n      up = (prevLine && prevLine[i]) || 0;\n      result[i + 1] = (line[i] - up + 0x0100) & 0xff;\n    }\n\n    return result;\n  };\n\n  var filterAverage = function(line, colorsPerPixel, prevLine) {\n    var result = [],\n      len = line.length,\n      left,\n      up;\n\n    result[0] = 3;\n\n    for (var i = 0; i < len; i += 1) {\n      left = line[i - colorsPerPixel] || 0;\n      up = (prevLine && prevLine[i]) || 0;\n      result[i + 1] = (line[i] + 0x0100 - ((left + up) >>> 1)) & 0xff;\n    }\n\n    return result;\n  };\n\n  var filterPaeth = function(line, colorsPerPixel, prevLine) {\n    var result = [],\n      len = line.length,\n      left,\n      up,\n      upLeft,\n      paeth;\n\n    result[0] = 4;\n\n    for (var i = 0; i < len; i += 1) {\n      left = line[i - colorsPerPixel] || 0;\n      up = (prevLine && prevLine[i]) || 0;\n      upLeft = (prevLine && prevLine[i - colorsPerPixel]) || 0;\n      paeth = paethPredictor(left, up, upLeft);\n      result[i + 1] = (line[i] - paeth + 0x0100) & 0xff;\n    }\n\n    return result;\n  };\n\n  var paethPredictor = function(left, up, upLeft) {\n    if (left === up && up === upLeft) {\n      return left;\n    }\n    var pLeft = Math.abs(up - upLeft),\n      pUp = Math.abs(left - upLeft),\n      pUpLeft = Math.abs(left + up - upLeft - upLeft);\n    return pLeft <= pUp && pLeft <= pUpLeft\n      ? left\n      : pUp <= pUpLeft\n      ? up\n      : upLeft;\n  };\n\n  var getFilterMethods = function() {\n    return [filterNone, filterSub, filterUp, filterAverage, filterPaeth];\n  };\n\n  var getIndexOfSmallestSum = function(arrays) {\n    var sum = arrays.map(function(value) {\n      return value.reduce(function(pv, cv) {\n        return pv + Math.abs(cv);\n      }, 0);\n    });\n    return sum.indexOf(Math.min.apply(null, sum));\n  };\n\n  var getPredictorFromCompression = function(compression) {\n    var predictor;\n    switch (compression) {\n      case jsPDFAPI.image_compression.FAST:\n        predictor = 11;\n        break;\n\n      case jsPDFAPI.image_compression.MEDIUM:\n        predictor = 13;\n        break;\n\n      case jsPDFAPI.image_compression.SLOW:\n        predictor = 14;\n        break;\n\n      default:\n        predictor = 12;\n        break;\n    }\n    return predictor;\n  };\n\n  /**\n   * @name processPNG\n   * @function\n   * @ignore\n   */\n  jsPDFAPI.processPNG = function(imageData, index, alias, compression) {\n    \"use strict\";\n\n    var colorSpace,\n      filter = this.decode.FLATE_DECODE,\n      bitsPerComponent,\n      image,\n      decodeParameters = \"\",\n      trns,\n      colors,\n      pal,\n      smask,\n      pixels,\n      len,\n      alphaData,\n      imgData,\n      hasColors,\n      pixel,\n      i,\n      n;\n\n    if (this.__addimage__.isArrayBuffer(imageData))\n      imageData = new Uint8Array(imageData);\n\n    if (this.__addimage__.isArrayBufferView(imageData)) {\n      image = new PNG(imageData);\n      imageData = image.imgData;\n      bitsPerComponent = image.bits;\n      colorSpace = image.colorSpace;\n      colors = image.colors;\n\n      /*\n       * colorType 6 - Each pixel is an R,G,B triple, followed by an alpha sample.\n       *\n       * colorType 4 - Each pixel is a grayscale sample, followed by an alpha sample.\n       *\n       * Extract alpha to create two separate images, using the alpha as a sMask\n       */\n      if ([4, 6].indexOf(image.colorType) !== -1) {\n        /*\n         * processes 8 bit RGBA and grayscale + alpha images\n         */\n        if (image.bits === 8) {\n          pixels =\n            image.pixelBitlength == 32\n              ? new Uint32Array(image.decodePixels().buffer)\n              : image.pixelBitlength == 16\n              ? new Uint16Array(image.decodePixels().buffer)\n              : new Uint8Array(image.decodePixels().buffer);\n          len = pixels.length;\n          imgData = new Uint8Array(len * image.colors);\n          alphaData = new Uint8Array(len);\n          var pDiff = image.pixelBitlength - image.bits;\n          i = 0;\n          n = 0;\n          var pbl;\n\n          for (; i < len; i++) {\n            pixel = pixels[i];\n            pbl = 0;\n\n            while (pbl < pDiff) {\n              imgData[n++] = (pixel >>> pbl) & 0xff;\n              pbl = pbl + image.bits;\n            }\n\n            alphaData[i] = (pixel >>> pbl) & 0xff;\n          }\n        }\n\n        /*\n         * processes 16 bit RGBA and grayscale + alpha images\n         */\n        if (image.bits === 16) {\n          pixels = new Uint32Array(image.decodePixels().buffer);\n          len = pixels.length;\n          imgData = new Uint8Array(\n            len * (32 / image.pixelBitlength) * image.colors\n          );\n          alphaData = new Uint8Array(len * (32 / image.pixelBitlength));\n          hasColors = image.colors > 1;\n          i = 0;\n          n = 0;\n          var a = 0;\n\n          while (i < len) {\n            pixel = pixels[i++];\n\n            imgData[n++] = (pixel >>> 0) & 0xff;\n\n            if (hasColors) {\n              imgData[n++] = (pixel >>> 16) & 0xff;\n\n              pixel = pixels[i++];\n              imgData[n++] = (pixel >>> 0) & 0xff;\n            }\n\n            alphaData[a++] = (pixel >>> 16) & 0xff;\n          }\n          bitsPerComponent = 8;\n        }\n\n        if (canCompress(compression)) {\n          imageData = compressBytes(\n            imgData,\n            image.width * image.colors,\n            image.colors,\n            compression\n          );\n          smask = compressBytes(alphaData, image.width, 1, compression);\n        } else {\n          imageData = imgData;\n          smask = alphaData;\n          filter = undefined;\n        }\n      }\n\n      /*\n       * Indexed png. Each pixel is a palette index.\n       */\n      if (image.colorType === 3) {\n        colorSpace = this.color_spaces.INDEXED;\n        pal = image.palette;\n\n        if (image.transparency.indexed) {\n          var trans = image.transparency.indexed;\n          var total = 0;\n          i = 0;\n          len = trans.length;\n\n          for (; i < len; ++i) {\n            total += trans[i];\n          }\n\n          total = total / 255;\n\n          /*\n           * a single color is specified as 100% transparent (0),\n           * so we set trns to use a /Mask with that index\n           */\n          if (total === len - 1 && trans.indexOf(0) !== -1) {\n            trns = [trans.indexOf(0)];\n\n            /*\n             * there's more than one colour within the palette that specifies\n             * a transparency value less than 255, so we unroll the pixels to create an image sMask\n             */\n          } else if (total !== len) {\n            pixels = image.decodePixels();\n            alphaData = new Uint8Array(pixels.length);\n            i = 0;\n            len = pixels.length;\n\n            for (; i < len; i++) {\n              alphaData[i] = trans[pixels[i]];\n            }\n\n            smask = compressBytes(alphaData, image.width, 1);\n          }\n        }\n      }\n\n      var predictor = getPredictorFromCompression(compression);\n\n      if (filter === this.decode.FLATE_DECODE) {\n        decodeParameters = \"/Predictor \" + predictor + \" \";\n      }\n      decodeParameters +=\n        \"/Colors \" +\n        colors +\n        \" /BitsPerComponent \" +\n        bitsPerComponent +\n        \" /Columns \" +\n        image.width;\n\n      if (\n        this.__addimage__.isArrayBuffer(imageData) ||\n        this.__addimage__.isArrayBufferView(imageData)\n      ) {\n        imageData = this.__addimage__.arrayBufferToBinaryString(imageData);\n      }\n\n      if (\n        (smask && this.__addimage__.isArrayBuffer(smask)) ||\n        this.__addimage__.isArrayBufferView(smask)\n      ) {\n        smask = this.__addimage__.arrayBufferToBinaryString(smask);\n      }\n\n      return {\n        alias: alias,\n        data: imageData,\n        index: index,\n        filter: filter,\n        decodeParameters: decodeParameters,\n        transparency: trns,\n        palette: pal,\n        sMask: smask,\n        predictor: predictor,\n        width: image.width,\n        height: image.height,\n        bitsPerComponent: bitsPerComponent,\n        colorSpace: colorSpace\n      };\n    }\n  };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2017 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { GifReader } from \"../libs/omggif.js\";\nimport { JPEGEncoder } from \"../libs/JPEGEncoder.js\";\n\n/**\n * jsPDF Gif Support PlugIn\n *\n * @name gif_support\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  jsPDFAPI.processGIF89A = function(imageData, index, alias, compression) {\n    var reader = new GifReader(imageData);\n    var width = reader.width,\n      height = reader.height;\n    var qu = 100;\n    var pixels = [];\n\n    reader.decodeAndBlitFrameRGBA(0, pixels);\n    var rawImageData = {\n      data: pixels,\n      width: width,\n      height: height\n    };\n\n    var encoder = new JPEGEncoder(qu);\n    var data = encoder.encode(rawImageData, qu);\n    return jsPDFAPI.processJPEG.call(this, data, index, alias, compression);\n  };\n\n  jsPDFAPI.processGIF87A = jsPDFAPI.processGIF89A;\n})(jsPDF.API);\n","import { JPEGEncoder } from \"../libs/JPEGEncoder.js\";\nimport { BmpDecoder } from \"../libs/BMPDecoder.js\";\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @license\n * Copyright (c) 2018 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\n/**\n * jsPDF bmp Support PlugIn\n * @name bmp_support\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  jsPDFAPI.processBMP = function(imageData, index, alias, compression) {\n    var reader = new BmpDecoder(imageData, false);\n    var width = reader.width,\n      height = reader.height;\n    var qu = 100;\n    var pixels = reader.getData();\n\n    var rawImageData = {\n      data: pixels,\n      width: width,\n      height: height\n    };\n\n    var encoder = new JPEGEncoder(qu);\n    var data = encoder.encode(rawImageData, qu);\n    return jsPDFAPI.processJPEG.call(this, data, index, alias, compression);\n  };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2019 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { JPEGEncoder } from \"../libs/JPEGEncoder.js\";\nimport { WebPDecoder } from \"../libs/WebPDecoder.js\";\n\n/**\n * jsPDF webp Support PlugIn\n *\n * @name webp_support\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  jsPDFAPI.processWEBP = function(imageData, index, alias, compression) {\n    var reader = new WebPDecoder(imageData, false);\n    var width = reader.width,\n      height = reader.height;\n    var qu = 100;\n    var pixels = reader.getData();\n\n    var rawImageData = {\n      data: pixels,\n      width: width,\n      height: height\n    };\n\n    var encoder = new JPEGEncoder(qu);\n    var data = encoder.encode(rawImageData, qu);\n    return jsPDFAPI.processJPEG.call(this, data, index, alias, compression);\n  };\n})(jsPDF.API);\n","/**\n * @license\n *\n * Copyright (c) 2021 Antti Palola, https://github.com/Pantura\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF RGBA array PlugIn\n * @name rgba_support\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  /**\n   * @name processRGBA\n   * @function\n   *\n   * Process RGBA Array. This is a one-dimension array with pixel data [red, green, blue, alpha, red, green, ...].\n   * RGBA array data can be obtained from DOM canvas getImageData.\n   * @ignore\n   */\n  jsPDFAPI.processRGBA = function(imageData, index, alias) {\n    \"use strict\";\n\n    var imagePixels = imageData.data;\n    var length = imagePixels.length;\n    // jsPDF takes alpha data separately so extract that.\n    var rgbOut = new Uint8Array((length / 4) * 3);\n    var alphaOut = new Uint8Array(length / 4);\n    var outIndex = 0;\n    var alphaIndex = 0;\n\n    for (var i = 0; i < length; i += 4) {\n      var r = imagePixels[i];\n      var g = imagePixels[i + 1];\n      var b = imagePixels[i + 2];\n      var alpha = imagePixels[i + 3];\n      rgbOut[outIndex++] = r;\n      rgbOut[outIndex++] = g;\n      rgbOut[outIndex++] = b;\n      alphaOut[alphaIndex++] = alpha;\n    }\n\n    var rgbData = this.__addimage__.arrayBufferToBinaryString(rgbOut);\n    var alphaData = this.__addimage__.arrayBufferToBinaryString(alphaOut);\n\n    return {\n      alpha: alphaData,\n      data: rgbData,\n      index: index,\n      alias: alias,\n      colorSpace: \"DeviceRGB\",\n      bitsPerComponent: 8,\n      width: imageData.width,\n      height: imageData.height\n    };\n  };\n})(jsPDF.API);\n","/**\n * @license\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF setLanguage Plugin\n *\n * @name setLanguage\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  /**\n   * Add Language Tag to the generated PDF\n   *\n   * @name setLanguage\n   * @function\n   * @param {string} langCode The Language code as ISO-639-1 (e.g. 'en') or as country language code (e.g. 'en-GB').\n   * @returns {jsPDF}\n   * @example\n   * var doc = new jsPDF()\n   * doc.text(10, 10, 'This is a test')\n   * doc.setLanguage(\"en-US\")\n   * doc.save('english.pdf')\n   */\n  jsPDFAPI.setLanguage = function(langCode) {\n    \"use strict\";\n\n    var langCodes = {\n      af: \"Afrikaans\",\n      sq: \"Albanian\",\n      ar: \"Arabic (Standard)\",\n      \"ar-DZ\": \"Arabic (Algeria)\",\n      \"ar-BH\": \"Arabic (Bahrain)\",\n      \"ar-EG\": \"Arabic (Egypt)\",\n      \"ar-IQ\": \"Arabic (Iraq)\",\n      \"ar-JO\": \"Arabic (Jordan)\",\n      \"ar-KW\": \"Arabic (Kuwait)\",\n      \"ar-LB\": \"Arabic (Lebanon)\",\n      \"ar-LY\": \"Arabic (Libya)\",\n      \"ar-MA\": \"Arabic (Morocco)\",\n      \"ar-OM\": \"Arabic (Oman)\",\n      \"ar-QA\": \"Arabic (Qatar)\",\n      \"ar-SA\": \"Arabic (Saudi Arabia)\",\n      \"ar-SY\": \"Arabic (Syria)\",\n      \"ar-TN\": \"Arabic (Tunisia)\",\n      \"ar-AE\": \"Arabic (U.A.E.)\",\n      \"ar-YE\": \"Arabic (Yemen)\",\n      an: \"Aragonese\",\n      hy: \"Armenian\",\n      as: \"Assamese\",\n      ast: \"Asturian\",\n      az: \"Azerbaijani\",\n      eu: \"Basque\",\n      be: \"Belarusian\",\n      bn: \"Bengali\",\n      bs: \"Bosnian\",\n      br: \"Breton\",\n      bg: \"Bulgarian\",\n      my: \"Burmese\",\n      ca: \"Catalan\",\n      ch: \"Chamorro\",\n      ce: \"Chechen\",\n      zh: \"Chinese\",\n      \"zh-HK\": \"Chinese (Hong Kong)\",\n      \"zh-CN\": \"Chinese (PRC)\",\n      \"zh-SG\": \"Chinese (Singapore)\",\n      \"zh-TW\": \"Chinese (Taiwan)\",\n      cv: \"Chuvash\",\n      co: \"Corsican\",\n      cr: \"Cree\",\n      hr: \"Croatian\",\n      cs: \"Czech\",\n      da: \"Danish\",\n      nl: \"Dutch (Standard)\",\n      \"nl-BE\": \"Dutch (Belgian)\",\n      en: \"English\",\n      \"en-AU\": \"English (Australia)\",\n      \"en-BZ\": \"English (Belize)\",\n      \"en-CA\": \"English (Canada)\",\n      \"en-IE\": \"English (Ireland)\",\n      \"en-JM\": \"English (Jamaica)\",\n      \"en-NZ\": \"English (New Zealand)\",\n      \"en-PH\": \"English (Philippines)\",\n      \"en-ZA\": \"English (South Africa)\",\n      \"en-TT\": \"English (Trinidad & Tobago)\",\n      \"en-GB\": \"English (United Kingdom)\",\n      \"en-US\": \"English (United States)\",\n      \"en-ZW\": \"English (Zimbabwe)\",\n      eo: \"Esperanto\",\n      et: \"Estonian\",\n      fo: \"Faeroese\",\n      fj: \"Fijian\",\n      fi: \"Finnish\",\n      fr: \"French (Standard)\",\n      \"fr-BE\": \"French (Belgium)\",\n      \"fr-CA\": \"French (Canada)\",\n      \"fr-FR\": \"French (France)\",\n      \"fr-LU\": \"French (Luxembourg)\",\n      \"fr-MC\": \"French (Monaco)\",\n      \"fr-CH\": \"French (Switzerland)\",\n      fy: \"Frisian\",\n      fur: \"Friulian\",\n      gd: \"Gaelic (Scots)\",\n      \"gd-IE\": \"Gaelic (Irish)\",\n      gl: \"Galacian\",\n      ka: \"Georgian\",\n      de: \"German (Standard)\",\n      \"de-AT\": \"German (Austria)\",\n      \"de-DE\": \"German (Germany)\",\n      \"de-LI\": \"German (Liechtenstein)\",\n      \"de-LU\": \"German (Luxembourg)\",\n      \"de-CH\": \"German (Switzerland)\",\n      el: \"Greek\",\n      gu: \"Gujurati\",\n      ht: \"Haitian\",\n      he: \"Hebrew\",\n      hi: \"Hindi\",\n      hu: \"Hungarian\",\n      is: \"Icelandic\",\n      id: \"Indonesian\",\n      iu: \"Inuktitut\",\n      ga: \"Irish\",\n      it: \"Italian (Standard)\",\n      \"it-CH\": \"Italian (Switzerland)\",\n      ja: \"Japanese\",\n      kn: \"Kannada\",\n      ks: \"Kashmiri\",\n      kk: \"Kazakh\",\n      km: \"Khmer\",\n      ky: \"Kirghiz\",\n      tlh: \"Klingon\",\n      ko: \"Korean\",\n      \"ko-KP\": \"Korean (North Korea)\",\n      \"ko-KR\": \"Korean (South Korea)\",\n      la: \"Latin\",\n      lv: \"Latvian\",\n      lt: \"Lithuanian\",\n      lb: \"Luxembourgish\",\n      mk: \"North Macedonia\",\n      ms: \"Malay\",\n      ml: \"Malayalam\",\n      mt: \"Maltese\",\n      mi: \"Maori\",\n      mr: \"Marathi\",\n      mo: \"Moldavian\",\n      nv: \"Navajo\",\n      ng: \"Ndonga\",\n      ne: \"Nepali\",\n      no: \"Norwegian\",\n      nb: \"Norwegian (Bokmal)\",\n      nn: \"Norwegian (Nynorsk)\",\n      oc: \"Occitan\",\n      or: \"Oriya\",\n      om: \"Oromo\",\n      fa: \"Persian\",\n      \"fa-IR\": \"Persian/Iran\",\n      pl: \"Polish\",\n      pt: \"Portuguese\",\n      \"pt-BR\": \"Portuguese (Brazil)\",\n      pa: \"Punjabi\",\n      \"pa-IN\": \"Punjabi (India)\",\n      \"pa-PK\": \"Punjabi (Pakistan)\",\n      qu: \"Quechua\",\n      rm: \"Rhaeto-Romanic\",\n      ro: \"Romanian\",\n      \"ro-MO\": \"Romanian (Moldavia)\",\n      ru: \"Russian\",\n      \"ru-MO\": \"Russian (Moldavia)\",\n      sz: \"Sami (Lappish)\",\n      sg: \"Sango\",\n      sa: \"Sanskrit\",\n      sc: \"Sardinian\",\n      sd: \"Sindhi\",\n      si: \"Singhalese\",\n      sr: \"Serbian\",\n      sk: \"Slovak\",\n      sl: \"Slovenian\",\n      so: \"Somani\",\n      sb: \"Sorbian\",\n      es: \"Spanish\",\n      \"es-AR\": \"Spanish (Argentina)\",\n      \"es-BO\": \"Spanish (Bolivia)\",\n      \"es-CL\": \"Spanish (Chile)\",\n      \"es-CO\": \"Spanish (Colombia)\",\n      \"es-CR\": \"Spanish (Costa Rica)\",\n      \"es-DO\": \"Spanish (Dominican Republic)\",\n      \"es-EC\": \"Spanish (Ecuador)\",\n      \"es-SV\": \"Spanish (El Salvador)\",\n      \"es-GT\": \"Spanish (Guatemala)\",\n      \"es-HN\": \"Spanish (Honduras)\",\n      \"es-MX\": \"Spanish (Mexico)\",\n      \"es-NI\": \"Spanish (Nicaragua)\",\n      \"es-PA\": \"Spanish (Panama)\",\n      \"es-PY\": \"Spanish (Paraguay)\",\n      \"es-PE\": \"Spanish (Peru)\",\n      \"es-PR\": \"Spanish (Puerto Rico)\",\n      \"es-ES\": \"Spanish (Spain)\",\n      \"es-UY\": \"Spanish (Uruguay)\",\n      \"es-VE\": \"Spanish (Venezuela)\",\n      sx: \"Sutu\",\n      sw: \"Swahili\",\n      sv: \"Swedish\",\n      \"sv-FI\": \"Swedish (Finland)\",\n      \"sv-SV\": \"Swedish (Sweden)\",\n      ta: \"Tamil\",\n      tt: \"Tatar\",\n      te: \"Teluga\",\n      th: \"Thai\",\n      tig: \"Tigre\",\n      ts: \"Tsonga\",\n      tn: \"Tswana\",\n      tr: \"Turkish\",\n      tk: \"Turkmen\",\n      uk: \"Ukrainian\",\n      hsb: \"Upper Sorbian\",\n      ur: \"Urdu\",\n      ve: \"Venda\",\n      vi: \"Vietnamese\",\n      vo: \"Volapuk\",\n      wa: \"Walloon\",\n      cy: \"Welsh\",\n      xh: \"Xhosa\",\n      ji: \"Yiddish\",\n      zu: \"Zulu\"\n    };\n\n    if (this.internal.languageSettings === undefined) {\n      this.internal.languageSettings = {};\n      this.internal.languageSettings.isSubscribed = false;\n    }\n\n    if (langCodes[langCode] !== undefined) {\n      this.internal.languageSettings.languageCode = langCode;\n      if (this.internal.languageSettings.isSubscribed === false) {\n        this.internal.events.subscribe(\"putCatalog\", function() {\n          this.internal.write(\n            \"/Lang (\" + this.internal.languageSettings.languageCode + \")\"\n          );\n        });\n        this.internal.languageSettings.isSubscribed = true;\n      }\n    }\n    return this;\n  };\n})(jsPDF.API);\n","/** @license\n jsPDF standard_fonts_metrics plugin\n * Copyright (c) 2012 Willow Systems Corporation, https://github.com/willowsystems\n * MIT license.\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n * \n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * This file adds the standard font metrics to jsPDF.\n *\n * Font metrics data is reprocessed derivative of contents of\n * \"Font Metrics for PDF Core 14 Fonts\" package, which exhibits the following copyright and license:\n *\n * Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\n *\n * This file and the 14 PostScript(R) AFM files it accompanies may be used,\n * copied, and distributed for any purpose and without charge, with or without\n * modification, provided that all copyright notices are retained; that the AFM\n * files are not distributed without this file; that all modifications to this\n * file or any of the AFM files are prominently noted in the modified file(s);\n * and that this paragraph is not modified. Adobe Systems has no responsibility\n * or obligation to support the use of the AFM files.\n *\n * @name standard_fonts_metrics\n * @module\n */\n\n(function(API) {\n  \"use strict\";\n  API.__fontmetrics__ = API.__fontmetrics__ || {};\n\n  var decoded = \"0123456789abcdef\",\n    encoded = \"klmnopqrstuvwxyz\",\n    mappingUncompress = {},\n    mappingCompress = {};\n\n  for (var i = 0; i < encoded.length; i++) {\n    mappingUncompress[encoded[i]] = decoded[i];\n    mappingCompress[decoded[i]] = encoded[i];\n  }\n\n  var hex = function(value) {\n    return \"0x\" + parseInt(value, 10).toString(16);\n  };\n\n  var compress = (API.__fontmetrics__.compress = function(data) {\n    var vals = [\"{\"];\n    var value, keystring, valuestring, numberprefix;\n\n    for (var key in data) {\n      value = data[key];\n\n      if (!isNaN(parseInt(key, 10))) {\n        key = parseInt(key, 10);\n        keystring = hex(key).slice(2);\n        keystring =\n          keystring.slice(0, -1) + mappingCompress[keystring.slice(-1)];\n      } else {\n        keystring = \"'\" + key + \"'\";\n      }\n\n      if (typeof value == \"number\") {\n        if (value < 0) {\n          valuestring = hex(value).slice(3);\n          numberprefix = \"-\";\n        } else {\n          valuestring = hex(value).slice(2);\n          numberprefix = \"\";\n        }\n        valuestring =\n          numberprefix +\n          valuestring.slice(0, -1) +\n          mappingCompress[valuestring.slice(-1)];\n      } else {\n        if (typeof value === \"object\") {\n          valuestring = compress(value);\n        } else {\n          throw new Error(\n            \"Don't know what to do with value type \" + typeof value + \".\"\n          );\n        }\n      }\n      vals.push(keystring + valuestring);\n    }\n    vals.push(\"}\");\n    return vals.join(\"\");\n  });\n\n  /**\n   * Uncompresses data compressed into custom, base16-like format.\n   *\n   * @public\n   * @function\n   * @param\n   * @returns {Type}\n   */\n  var uncompress = (API.__fontmetrics__.uncompress = function(data) {\n    if (typeof data !== \"string\") {\n      throw new Error(\"Invalid argument passed to uncompress.\");\n    }\n\n    var output = {},\n      sign = 1,\n      stringparts, // undef. will be [] in string mode\n      activeobject = output,\n      parentchain = [],\n      parent_key_pair,\n      keyparts = \"\",\n      valueparts = \"\",\n      key, // undef. will be Truthy when Key is resolved.\n      datalen = data.length - 1, // stripping ending }\n      ch;\n\n    for (var i = 1; i < datalen; i += 1) {\n      // - { } ' are special.\n\n      ch = data[i];\n\n      if (ch == \"'\") {\n        if (stringparts) {\n          // end of string mode\n          key = stringparts.join(\"\");\n          stringparts = undefined;\n        } else {\n          // start of string mode\n          stringparts = [];\n        }\n      } else if (stringparts) {\n        stringparts.push(ch);\n      } else if (ch == \"{\") {\n        // start of object\n        parentchain.push([activeobject, key]);\n        activeobject = {};\n        key = undefined;\n      } else if (ch == \"}\") {\n        // end of object\n        parent_key_pair = parentchain.pop();\n        parent_key_pair[0][parent_key_pair[1]] = activeobject;\n        key = undefined;\n        activeobject = parent_key_pair[0];\n      } else if (ch == \"-\") {\n        sign = -1;\n      } else {\n        // must be number\n        if (key === undefined) {\n          if (mappingUncompress.hasOwnProperty(ch)) {\n            keyparts += mappingUncompress[ch];\n            key = parseInt(keyparts, 16) * sign;\n            sign = +1;\n            keyparts = \"\";\n          } else {\n            keyparts += ch;\n          }\n        } else {\n          if (mappingUncompress.hasOwnProperty(ch)) {\n            valueparts += mappingUncompress[ch];\n            activeobject[key] = parseInt(valueparts, 16) * sign;\n            sign = +1;\n            key = undefined;\n            valueparts = \"\";\n          } else {\n            valueparts += ch;\n          }\n        }\n      }\n    }\n    return output;\n  });\n\n  // encoding = 'Unicode'\n  // NOT UTF8, NOT UTF16BE/LE, NOT UCS2BE/LE. NO clever BOM behavior\n  // Actual 16bit char codes used.\n  // no multi-byte logic here\n\n  // Unicode characters to WinAnsiEncoding:\n  // {402: 131, 8211: 150, 8212: 151, 8216: 145, 8217: 146, 8218: 130, 8220: 147, 8221: 148, 8222: 132, 8224: 134, 8225: 135, 8226: 149, 8230: 133, 8364: 128, 8240:137, 8249: 139, 8250: 155, 710: 136, 8482: 153, 338: 140, 339: 156, 732: 152, 352: 138, 353: 154, 376: 159, 381: 142, 382: 158}\n  // as you can see, all Unicode chars are outside of 0-255 range. No char code conflicts.\n  // this means that you can give Win cp1252 encoded strings to jsPDF for rendering directly\n  // as well as give strings with some (supported by these fonts) Unicode characters and\n  // these will be mapped to win cp1252\n  // for example, you can send char code (cp1252) 0x80 or (unicode) 0x20AC, getting \"Euro\" glyph displayed in both cases.\n\n  var encodingBlock = {\n    codePages: [\"WinAnsiEncoding\"],\n    WinAnsiEncoding: uncompress(\n      \"{19m8n201n9q201o9r201s9l201t9m201u8m201w9n201x9o201y8o202k8q202l8r202m9p202q8p20aw8k203k8t203t8v203u9v2cq8s212m9t15m8w15n9w2dw9s16k8u16l9u17s9z17x8y17y9y}\"\n    )\n  };\n  var encodings = {\n    Unicode: {\n      Courier: encodingBlock,\n      \"Courier-Bold\": encodingBlock,\n      \"Courier-BoldOblique\": encodingBlock,\n      \"Courier-Oblique\": encodingBlock,\n      Helvetica: encodingBlock,\n      \"Helvetica-Bold\": encodingBlock,\n      \"Helvetica-BoldOblique\": encodingBlock,\n      \"Helvetica-Oblique\": encodingBlock,\n      \"Times-Roman\": encodingBlock,\n      \"Times-Bold\": encodingBlock,\n      \"Times-BoldItalic\": encodingBlock,\n      \"Times-Italic\": encodingBlock\n      //\t, 'Symbol'\n      //\t, 'ZapfDingbats'\n    }\n  };\n\n  var fontMetrics = {\n    Unicode: {\n      // all sizing numbers are n/fontMetricsFractionOf = one font size unit\n      // this means that if fontMetricsFractionOf = 1000, and letter A's width is 476, it's\n      // width is 476/1000 or 47.6% of its height (regardless of font size)\n      // At this time this value applies to \"widths\" and \"kerning\" numbers.\n\n      // char code 0 represents \"default\" (average) width - use it for chars missing in this table.\n      // key 'fof' represents the \"fontMetricsFractionOf\" value\n\n      \"Courier-Oblique\": uncompress(\n        \"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"\n      ),\n      \"Times-BoldItalic\": uncompress(\n        \"{'widths'{k3o2q4ycx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2r202m2n2n3m2o3m2p5n202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5n4l4m4m4m4n4m4o4s4p4m4q4m4r4s4s4y4t2r4u3m4v4m4w3x4x5t4y4s4z4s5k3x5l4s5m4m5n3r5o3x5p4s5q4m5r5t5s4m5t3x5u3x5v2l5w1w5x2l5y3t5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q2l6r3m6s3r6t1w6u1w6v3m6w1w6x4y6y3r6z3m7k3m7l3m7m2r7n2r7o1w7p3r7q2w7r4m7s3m7t2w7u2r7v2n7w1q7x2n7y3t202l3mcl4mal2ram3man3mao3map3mar3mas2lat4uau1uav3maw3way4uaz2lbk2sbl3t'fof'6obo2lbp3tbq3mbr1tbs2lbu1ybv3mbz3mck4m202k3mcm4mcn4mco4mcp4mcq5ycr4mcs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz2w203k6o212m6o2dw2l2cq2l3t3m3u2l17s3x19m3m}'kerning'{cl{4qu5kt5qt5rs17ss5ts}201s{201ss}201t{cks4lscmscnscoscpscls2wu2yu201ts}201x{2wu2yu}2k{201ts}2w{4qx5kx5ou5qx5rs17su5tu}2x{17su5tu5ou}2y{4qx5kx5ou5qx5rs17ss5ts}'fof'-6ofn{17sw5tw5ou5qw5rs}7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qs}3v{17su5tu5os5qs}7p{17su5tu}ck{4qu5kt5qt5rs17ss5ts}4l{4qu5kt5qt5rs17ss5ts}cm{4qu5kt5qt5rs17ss5ts}cn{4qu5kt5qt5rs17ss5ts}co{4qu5kt5qt5rs17ss5ts}cp{4qu5kt5qt5rs17ss5ts}6l{4qu5ou5qw5rt17su5tu}5q{ckuclucmucnucoucpu4lu}5r{ckuclucmucnucoucpu4lu}7q{cksclscmscnscoscps4ls}6p{4qu5ou5qw5rt17sw5tw}ek{4qu5ou5qw5rt17su5tu}el{4qu5ou5qw5rt17su5tu}em{4qu5ou5qw5rt17su5tu}en{4qu5ou5qw5rt17su5tu}eo{4qu5ou5qw5rt17su5tu}ep{4qu5ou5qw5rt17su5tu}es{17ss5ts5qs4qu}et{4qu5ou5qw5rt17sw5tw}eu{4qu5ou5qw5rt17ss5ts}ev{17ss5ts5qs4qu}6z{17sw5tw5ou5qw5rs}fm{17sw5tw5ou5qw5rs}7n{201ts}fo{17sw5tw5ou5qw5rs}fp{17sw5tw5ou5qw5rs}fq{17sw5tw5ou5qw5rs}7r{cksclscmscnscoscps4ls}fs{17sw5tw5ou5qw5rs}ft{17su5tu}fu{17su5tu}fv{17su5tu}fw{17su5tu}fz{cksclscmscnscoscps4ls}}}\"\n      ),\n      \"Helvetica-Bold\": uncompress(\n        \"{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}\"\n      ),\n      Courier: uncompress(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\n      \"Courier-BoldOblique\": uncompress(\n        \"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"\n      ),\n      \"Times-Bold\": uncompress(\n        \"{'widths'{k3q2q5ncx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2l202m2n2n3m2o3m2p6o202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5x4l4s4m4m4n4s4o4s4p4m4q3x4r4y4s4y4t2r4u3m4v4y4w4m4x5y4y4s4z4y5k3x5l4y5m4s5n3r5o4m5p4s5q4s5r6o5s4s5t4s5u4m5v2l5w1w5x2l5y3u5z3m6k2l6l3m6m3r6n2w6o3r6p2w6q2l6r3m6s3r6t1w6u2l6v3r6w1w6x5n6y3r6z3m7k3r7l3r7m2w7n2r7o2l7p3r7q3m7r4s7s3m7t3m7u2w7v2r7w1q7x2r7y3o202l3mcl4sal2lam3man3mao3map3mar3mas2lat4uau1yav3maw3tay4uaz2lbk2sbl3t'fof'6obo2lbp3rbr1tbs2lbu2lbv3mbz3mck4s202k3mcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3rek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3m3u2l17s4s19m3m}'kerning'{cl{4qt5ks5ot5qy5rw17sv5tv}201t{cks4lscmscnscoscpscls4wv}2k{201ts}2w{4qu5ku7mu5os5qx5ru17su5tu}2x{17su5tu5ou5qs}2y{4qv5kv7mu5ot5qz5ru17su5tu}'fof'-6o7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qu}3v{17su5tu5os5qu}fu{17su5tu5ou5qu}7p{17su5tu5ou5qu}ck{4qt5ks5ot5qy5rw17sv5tv}4l{4qt5ks5ot5qy5rw17sv5tv}cm{4qt5ks5ot5qy5rw17sv5tv}cn{4qt5ks5ot5qy5rw17sv5tv}co{4qt5ks5ot5qy5rw17sv5tv}cp{4qt5ks5ot5qy5rw17sv5tv}6l{17st5tt5ou5qu}17s{ckuclucmucnucoucpu4lu4wu}5o{ckuclucmucnucoucpu4lu4wu}5q{ckzclzcmzcnzcozcpz4lz4wu}5r{ckxclxcmxcnxcoxcpx4lx4wu}5t{ckuclucmucnucoucpu4lu4wu}7q{ckuclucmucnucoucpu4lu}6p{17sw5tw5ou5qu}ek{17st5tt5qu}el{17st5tt5ou5qu}em{17st5tt5qu}en{17st5tt5qu}eo{17st5tt5qu}ep{17st5tt5ou5qu}es{17ss5ts5qu}et{17sw5tw5ou5qu}eu{17sw5tw5ou5qu}ev{17ss5ts5qu}6z{17sw5tw5ou5qu5rs}fm{17sw5tw5ou5qu5rs}fn{17sw5tw5ou5qu5rs}fo{17sw5tw5ou5qu5rs}fp{17sw5tw5ou5qu5rs}fq{17sw5tw5ou5qu5rs}7r{cktcltcmtcntcotcpt4lt5os}fs{17sw5tw5ou5qu5rs}ft{17su5tu5ou5qu}7m{5os}fv{17su5tu5ou5qu}fw{17su5tu5ou5qu}fz{cksclscmscnscoscps4ls}}}\"\n      ),\n      Symbol: uncompress(\n        \"{'widths'{k3uaw4r19m3m2k1t2l2l202m2y2n3m2p5n202q6o3k3m2s2l2t2l2v3r2w1t3m3m2y1t2z1wbk2sbl3r'fof'6o3n3m3o3m3p3m3q3m3r3m3s3m3t3m3u1w3v1w3w3r3x3r3y3r3z2wbp3t3l3m5v2l5x2l5z3m2q4yfr3r7v3k7w1o7x3k}'kerning'{'fof'-6o}}\"\n      ),\n      Helvetica: uncompress(\n        \"{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}\"\n      ),\n      \"Helvetica-BoldOblique\": uncompress(\n        \"{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}\"\n      ),\n      ZapfDingbats: uncompress(\"{'widths'{k4u2k1w'fof'6o}'kerning'{'fof'-6o}}\"),\n      \"Courier-Bold\": uncompress(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\n      \"Times-Italic\": uncompress(\n        \"{'widths'{k3n2q4ycx2l201n3m201o5t201s2l201t2l201u2l201w3r201x3r201y3r2k1t2l2l202m2n2n3m2o3m2p5n202q5t2r1p2s2l2t2l2u3m2v4n2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w4n3x4n3y4n3z3m4k5w4l3x4m3x4n4m4o4s4p3x4q3x4r4s4s4s4t2l4u2w4v4m4w3r4x5n4y4m4z4s5k3x5l4s5m3x5n3m5o3r5p4s5q3x5r5n5s3x5t3r5u3r5v2r5w1w5x2r5y2u5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q1w6r3m6s3m6t1w6u1w6v2w6w1w6x4s6y3m6z3m7k3m7l3m7m2r7n2r7o1w7p3m7q2w7r4m7s2w7t2w7u2r7v2s7w1v7x2s7y3q202l3mcl3xal2ram3man3mao3map3mar3mas2lat4wau1vav3maw4nay4waz2lbk2sbl4n'fof'6obo2lbp3mbq3obr1tbs2lbu1zbv3mbz3mck3x202k3mcm3xcn3xco3xcp3xcq5tcr4mcs3xct3xcu3xcv3xcw2l2m2ucy2lcz2ldl4mdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr4nfs3mft3mfu3mfv3mfw3mfz2w203k6o212m6m2dw2l2cq2l3t3m3u2l17s3r19m3m}'kerning'{cl{5kt4qw}201s{201sw}201t{201tw2wy2yy6q-t}201x{2wy2yy}2k{201tw}2w{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}2x{17ss5ts5os}2y{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}'fof'-6o6t{17ss5ts5qs}7t{5os}3v{5qs}7p{17su5tu5qs}ck{5kt4qw}4l{5kt4qw}cm{5kt4qw}cn{5kt4qw}co{5kt4qw}cp{5kt4qw}6l{4qs5ks5ou5qw5ru17su5tu}17s{2ks}5q{ckvclvcmvcnvcovcpv4lv}5r{ckuclucmucnucoucpu4lu}5t{2ks}6p{4qs5ks5ou5qw5ru17su5tu}ek{4qs5ks5ou5qw5ru17su5tu}el{4qs5ks5ou5qw5ru17su5tu}em{4qs5ks5ou5qw5ru17su5tu}en{4qs5ks5ou5qw5ru17su5tu}eo{4qs5ks5ou5qw5ru17su5tu}ep{4qs5ks5ou5qw5ru17su5tu}es{5ks5qs4qs}et{4qs5ks5ou5qw5ru17su5tu}eu{4qs5ks5qw5ru17su5tu}ev{5ks5qs4qs}ex{17ss5ts5qs}6z{4qv5ks5ou5qw5ru17su5tu}fm{4qv5ks5ou5qw5ru17su5tu}fn{4qv5ks5ou5qw5ru17su5tu}fo{4qv5ks5ou5qw5ru17su5tu}fp{4qv5ks5ou5qw5ru17su5tu}fq{4qv5ks5ou5qw5ru17su5tu}7r{5os}fs{4qv5ks5ou5qw5ru17su5tu}ft{17su5tu5qs}fu{17su5tu5qs}fv{17su5tu5qs}fw{17su5tu5qs}}}\"\n      ),\n      \"Times-Roman\": uncompress(\n        \"{'widths'{k3n2q4ycx2l201n3m201o6o201s2l201t2l201u2l201w2w201x2w201y2w2k1t2l2l202m2n2n3m2o3m2p5n202q6o2r1m2s2l2t2l2u3m2v3s2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v1w3w3s3x3s3y3s3z2w4k5w4l4s4m4m4n4m4o4s4p3x4q3r4r4s4s4s4t2l4u2r4v4s4w3x4x5t4y4s4z4s5k3r5l4s5m4m5n3r5o3x5p4s5q4s5r5y5s4s5t4s5u3x5v2l5w1w5x2l5y2z5z3m6k2l6l2w6m3m6n2w6o3m6p2w6q2l6r3m6s3m6t1w6u1w6v3m6w1w6x4y6y3m6z3m7k3m7l3m7m2l7n2r7o1w7p3m7q3m7r4s7s3m7t3m7u2w7v3k7w1o7x3k7y3q202l3mcl4sal2lam3man3mao3map3mar3mas2lat4wau1vav3maw3say4waz2lbk2sbl3s'fof'6obo2lbp3mbq2xbr1tbs2lbu1zbv3mbz2wck4s202k3mcm4scn4sco4scp4scq5tcr4mcs3xct3xcu3xcv3xcw2l2m2tcy2lcz2ldl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek2wel2wem2wen2weo2wep2weq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr3sfs3mft3mfu3mfv3mfw3mfz3m203k6o212m6m2dw2l2cq2l3t3m3u1w17s4s19m3m}'kerning'{cl{4qs5ku17sw5ou5qy5rw201ss5tw201ws}201s{201ss}201t{ckw4lwcmwcnwcowcpwclw4wu201ts}2k{201ts}2w{4qs5kw5os5qx5ru17sx5tx}2x{17sw5tw5ou5qu}2y{4qs5kw5os5qx5ru17sx5tx}'fof'-6o7t{ckuclucmucnucoucpu4lu5os5rs}3u{17su5tu5qs}3v{17su5tu5qs}7p{17sw5tw5qs}ck{4qs5ku17sw5ou5qy5rw201ss5tw201ws}4l{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cm{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cn{4qs5ku17sw5ou5qy5rw201ss5tw201ws}co{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cp{4qs5ku17sw5ou5qy5rw201ss5tw201ws}6l{17su5tu5os5qw5rs}17s{2ktclvcmvcnvcovcpv4lv4wuckv}5o{ckwclwcmwcnwcowcpw4lw4wu}5q{ckyclycmycnycoycpy4ly4wu5ms}5r{cktcltcmtcntcotcpt4lt4ws}5t{2ktclvcmvcnvcovcpv4lv4wuckv}7q{cksclscmscnscoscps4ls}6p{17su5tu5qw5rs}ek{5qs5rs}el{17su5tu5os5qw5rs}em{17su5tu5os5qs5rs}en{17su5qs5rs}eo{5qs5rs}ep{17su5tu5os5qw5rs}es{5qs}et{17su5tu5qw5rs}eu{17su5tu5qs5rs}ev{5qs}6z{17sv5tv5os5qx5rs}fm{5os5qt5rs}fn{17sv5tv5os5qx5rs}fo{17sv5tv5os5qx5rs}fp{5os5qt5rs}fq{5os5qt5rs}7r{ckuclucmucnucoucpu4lu5os}fs{17sv5tv5os5qx5rs}ft{17ss5ts5qs}fu{17sw5tw5qs}fv{17sw5tw5qs}fw{17ss5ts5qs}fz{ckuclucmucnucoucpu4lu5os5rs}}}\"\n      ),\n      \"Helvetica-Oblique\": uncompress(\n        \"{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}\"\n      )\n    }\n  };\n\n  /*\n\tThis event handler is fired when a new jsPDF object is initialized\n\tThis event handler appends metrics data to standard fonts within\n\tthat jsPDF instance. The metrics are mapped over Unicode character\n\tcodes, NOT CIDs or other codes matching the StandardEncoding table of the\n\tstandard PDF fonts.\n\tFuture:\n\tAlso included is the encoding maping table, converting Unicode (UCS-2, UTF-16)\n\tchar codes to StandardEncoding character codes. The encoding table is to be used\n\tsomewhere around \"pdfEscape\" call.\n\t*/\n  API.events.push([\n    \"addFont\",\n    function(data) {\n      var font = data.font;\n\n      var metrics = fontMetrics[\"Unicode\"][font.postScriptName];\n      if (metrics) {\n        font.metadata[\"Unicode\"] = {};\n        font.metadata[\"Unicode\"].widths = metrics.widths;\n        font.metadata[\"Unicode\"].kerning = metrics.kerning;\n      }\n\n      var encodingBlock = encodings[\"Unicode\"][font.postScriptName];\n      if (encodingBlock) {\n        font.metadata[\"Unicode\"].encoding = encodingBlock;\n        font.encoding = encodingBlock.codePages[0];\n      }\n    }\n  ]); // end of adding event handler\n})(jsPDF.API);\n","/**\n * @license\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { atob } from \"../libs/AtobBtoa.js\";\n\n/**\n * @name ttfsupport\n * @module\n */\n(function(jsPDF) {\n  \"use strict\";\n\n  var binaryStringToUint8Array = function(binary_string) {\n    var len = binary_string.length;\n    var bytes = new Uint8Array(len);\n    for (var i = 0; i < len; i++) {\n      bytes[i] = binary_string.charCodeAt(i);\n    }\n    return bytes;\n  };\n\n  var addFont = function(font, file) {\n    // eslint-disable-next-line no-control-regex\n    if (/^\\x00\\x01\\x00\\x00/.test(file)) {\n      file = binaryStringToUint8Array(file);\n    } else {\n      file = binaryStringToUint8Array(atob(file));\n    }\n    font.metadata = jsPDF.API.TTFFont.open(file);\n    font.metadata.Unicode = font.metadata.Unicode || {\n      encoding: {},\n      kerning: {},\n      widths: []\n    };\n    font.metadata.glyIdsUsed = [0];\n  };\n\n  jsPDF.API.events.push([\n    \"addFont\",\n    function(data) {\n      var file = undefined;\n      var font = data.font;\n      var instance = data.instance;\n      if (font.isStandardFont) {\n        return;\n      }\n      if (typeof instance !== \"undefined\") {\n        if (instance.existsFileInVFS(font.postScriptName) === false) {\n          file = instance.loadFile(font.postScriptName);\n        } else {\n          file = instance.getFileFromVFS(font.postScriptName);\n        }\n        if (typeof file !== \"string\") {\n          throw new Error(\n            \"Font is not stored as string-data in vFS, import fonts or remove declaration doc.addFont('\" +\n              font.postScriptName +\n              \"').\"\n          );\n        }\n        addFont(font, file);\n      } else {\n        throw new Error(\n          \"Font does not exist in vFS, import fonts or remove declaration doc.addFont('\" +\n            font.postScriptName +\n            \"').\"\n        );\n      }\n    }\n  ]); // end of adding event handler\n})(jsPDF);\n","/** @license\n * Copyright (c) 2012 Willow Systems Corporation, https://github.com/willowsystems\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { console } from \"../libs/console.js\";\nimport { globalObject } from \"../libs/globalObject.js\";\n\n/**\n * jsPDF SVG plugin\n *\n * @name svg\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  function loadCanvg() {\n    return (function() {\n      if (globalObject[\"canvg\"]) {\n        return Promise.resolve(globalObject[\"canvg\"]);\n      }\n\n      return import(\"canvg\");\n\n    })()\n      .catch(function(e) {\n        return Promise.reject(new Error(\"Could not load canvg: \" + e));\n      })\n      .then(function(canvg) {\n        return canvg.default ? canvg.default : canvg;\n      });\n  }\n\n  /**\n   * Parses SVG XML and saves it as image into the PDF.\n   *\n   * Depends on canvas-element and canvg\n   *\n   * @name addSvgAsImage\n   * @public\n   * @function\n   * @param {string} SVG-Data as Text\n   * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\n   * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\n   * @param {number} width of SVG-Image (in units declared at inception of PDF document)\n   * @param {number} height of SVG-Image (in units declared at inception of PDF document)\n   * @param {string} alias of SVG-Image (if used multiple times)\n   * @param {string} compression of the generated JPEG, can have the values 'NONE', 'FAST', 'MEDIUM' and 'SLOW'\n   * @param {number} rotation of the image in degrees (0-359)\n   *\n   * @returns jsPDF jsPDF-instance\n   */\n  jsPDFAPI.addSvgAsImage = function(\n    svg,\n    x,\n    y,\n    w,\n    h,\n    alias,\n    compression,\n    rotation\n  ) {\n    if (isNaN(x) || isNaN(y)) {\n      console.error(\"jsPDF.addSvgAsImage: Invalid coordinates\", arguments);\n      throw new Error(\"Invalid coordinates passed to jsPDF.addSvgAsImage\");\n    }\n\n    if (isNaN(w) || isNaN(h)) {\n      console.error(\"jsPDF.addSvgAsImage: Invalid measurements\", arguments);\n      throw new Error(\n        \"Invalid measurements (width and/or height) passed to jsPDF.addSvgAsImage\"\n      );\n    }\n\n    var canvas = document.createElement(\"canvas\");\n    canvas.width = w;\n    canvas.height = h;\n    var ctx = canvas.getContext(\"2d\");\n    ctx.fillStyle = \"#fff\"; /// set white fill style\n    ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n    var options = {\n      ignoreMouse: true,\n      ignoreAnimation: true,\n      ignoreDimensions: true\n    };\n    var doc = this;\n    return loadCanvg()\n      .then(\n        function(canvg) {\n          return canvg.fromString(ctx, svg, options);\n        },\n        function() {\n          return Promise.reject(new Error(\"Could not load canvg.\"));\n        }\n      )\n      .then(function(instance) {\n        return instance.render(options);\n      })\n      .then(function() {\n        doc.addImage(\n          canvas.toDataURL(\"image/jpeg\", 1.0),\n          x,\n          y,\n          w,\n          h,\n          compression,\n          rotation\n        );\n      });\n  };\n})(jsPDF.API);\n","/**\n * @license\n * ====================================================================\n * Copyright (c) 2013 Eduardo Menezes de Morais, eduardo.morais@usp.br\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF total_pages plugin\n * @name total_pages\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n  /**\n   * @name putTotalPages\n   * @function\n   * @param {string} pageExpression Regular Expression\n   * @returns {jsPDF} jsPDF-instance\n   */\n\n  jsPDFAPI.putTotalPages = function(pageExpression) {\n    \"use strict\";\n\n    var replaceExpression;\n    var totalNumberOfPages = 0;\n    if (parseInt(this.internal.getFont().id.substr(1), 10) < 15) {\n      replaceExpression = new RegExp(pageExpression, \"g\");\n      totalNumberOfPages = this.internal.getNumberOfPages();\n    } else {\n      replaceExpression = new RegExp(\n        this.pdfEscape16(pageExpression, this.internal.getFont()),\n        \"g\"\n      );\n      totalNumberOfPages = this.pdfEscape16(\n        this.internal.getNumberOfPages() + \"\",\n        this.internal.getFont()\n      );\n    }\n\n    for (var n = 1; n <= this.internal.getNumberOfPages(); n++) {\n      for (var i = 0; i < this.internal.pages[n].length; i++) {\n        this.internal.pages[n][i] = this.internal.pages[n][i].replace(\n          replaceExpression,\n          totalNumberOfPages\n        );\n      }\n    }\n\n    return this;\n  };\n})(jsPDF.API);\n","/**\n * @license\n * jsPDF viewerPreferences Plugin\n * @author Aras Abbasi (github.com/arasabbasi)\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * Adds the ability to set ViewerPreferences and by thus\n * controlling the way the document is to be presented on the\n * screen or in print.\n * @name viewerpreferences\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n  /**\n   * Set the ViewerPreferences of the generated PDF\n   *\n   * @name viewerPreferences\n   * @function\n   * @public\n   * @param {Object} options Array with the ViewerPreferences<br />\n   * Example: doc.viewerPreferences({\"FitWindow\":true});<br />\n   * <br />\n   * You can set following preferences:<br />\n   * <br/>\n   * <b>HideToolbar</b> <i>(boolean)</i><br />\n   * Default value: false<br />\n   * <br />\n   * <b>HideMenubar</b> <i>(boolean)</i><br />\n   * Default value: false.<br />\n   * <br />\n   * <b>HideWindowUI</b> <i>(boolean)</i><br />\n   * Default value: false.<br />\n   * <br />\n   * <b>FitWindow</b> <i>(boolean)</i><br />\n   * Default value: false.<br />\n   * <br />\n   * <b>CenterWindow</b> <i>(boolean)</i><br />\n   * Default value: false<br />\n   * <br />\n   * <b>DisplayDocTitle</b> <i>(boolean)</i><br />\n   * Default value: false.<br />\n   * <br />\n   * <b>NonFullScreenPageMode</b> <i>(string)</i><br />\n   * Possible values: UseNone, UseOutlines, UseThumbs, UseOC<br />\n   * Default value: UseNone<br/>\n   * <br />\n   * <b>Direction</b> <i>(string)</i><br />\n   * Possible values: L2R, R2L<br />\n   * Default value: L2R.<br />\n   * <br />\n   * <b>ViewArea</b> <i>(string)</i><br />\n   * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox<br />\n   * Default value: CropBox.<br />\n   * <br />\n   * <b>ViewClip</b> <i>(string)</i><br />\n   * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox<br />\n   * Default value: CropBox<br />\n   * <br />\n   * <b>PrintArea</b> <i>(string)</i><br />\n   * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox<br />\n   * Default value: CropBox<br />\n   * <br />\n   * <b>PrintClip</b> <i>(string)</i><br />\n   * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox<br />\n   * Default value: CropBox.<br />\n   * <br />\n   * <b>PrintScaling</b> <i>(string)</i><br />\n   * Possible values: AppDefault, None<br />\n   * Default value: AppDefault.<br />\n   * <br />\n   * <b>Duplex</b> <i>(string)</i><br />\n   * Possible values: Simplex, DuplexFlipLongEdge, DuplexFlipShortEdge\n   * Default value: none<br />\n   * <br />\n   * <b>PickTrayByPDFSize</b> <i>(boolean)</i><br />\n   * Default value: false<br />\n   * <br />\n   * <b>PrintPageRange</b> <i>(Array)</i><br />\n   * Example: [[1,5], [7,9]]<br />\n   * Default value: as defined by PDF viewer application<br />\n   * <br />\n   * <b>NumCopies</b> <i>(Number)</i><br />\n   * Possible values: 1, 2, 3, 4, 5<br />\n   * Default value: 1<br />\n   * <br />\n   * For more information see the PDF Reference, sixth edition on Page 577\n   * @param {boolean} doReset True to reset the settings\n   * @function\n   * @returns jsPDF jsPDF-instance\n   * @example\n   * var doc = new jsPDF()\n   * doc.text('This is a test', 10, 10)\n   * doc.viewerPreferences({'FitWindow': true}, true)\n   * doc.save(\"viewerPreferences.pdf\")\n   *\n   * // Example printing 10 copies, using cropbox, and hiding UI.\n   * doc.viewerPreferences({\n   *   'HideWindowUI': true,\n   *   'PrintArea': 'CropBox',\n   *   'NumCopies': 10\n   * })\n   */\n  jsPDFAPI.viewerPreferences = function(options, doReset) {\n    options = options || {};\n    doReset = doReset || false;\n\n    var configuration;\n    var configurationTemplate = {\n      HideToolbar: {\n        defaultValue: false,\n        value: false,\n        type: \"boolean\",\n        explicitSet: false,\n        valueSet: [true, false],\n        pdfVersion: 1.3\n      },\n      HideMenubar: {\n        defaultValue: false,\n        value: false,\n        type: \"boolean\",\n        explicitSet: false,\n        valueSet: [true, false],\n        pdfVersion: 1.3\n      },\n      HideWindowUI: {\n        defaultValue: false,\n        value: false,\n        type: \"boolean\",\n        explicitSet: false,\n        valueSet: [true, false],\n        pdfVersion: 1.3\n      },\n      FitWindow: {\n        defaultValue: false,\n        value: false,\n        type: \"boolean\",\n        explicitSet: false,\n        valueSet: [true, false],\n        pdfVersion: 1.3\n      },\n      CenterWindow: {\n        defaultValue: false,\n        value: false,\n        type: \"boolean\",\n        explicitSet: false,\n        valueSet: [true, false],\n        pdfVersion: 1.3\n      },\n      DisplayDocTitle: {\n        defaultValue: false,\n        value: false,\n        type: \"boolean\",\n        explicitSet: false,\n        valueSet: [true, false],\n        pdfVersion: 1.4\n      },\n      NonFullScreenPageMode: {\n        defaultValue: \"UseNone\",\n        value: \"UseNone\",\n        type: \"name\",\n        explicitSet: false,\n        valueSet: [\"UseNone\", \"UseOutlines\", \"UseThumbs\", \"UseOC\"],\n        pdfVersion: 1.3\n      },\n      Direction: {\n        defaultValue: \"L2R\",\n        value: \"L2R\",\n        type: \"name\",\n        explicitSet: false,\n        valueSet: [\"L2R\", \"R2L\"],\n        pdfVersion: 1.3\n      },\n      ViewArea: {\n        defaultValue: \"CropBox\",\n        value: \"CropBox\",\n        type: \"name\",\n        explicitSet: false,\n        valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n        pdfVersion: 1.4\n      },\n      ViewClip: {\n        defaultValue: \"CropBox\",\n        value: \"CropBox\",\n        type: \"name\",\n        explicitSet: false,\n        valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n        pdfVersion: 1.4\n      },\n      PrintArea: {\n        defaultValue: \"CropBox\",\n        value: \"CropBox\",\n        type: \"name\",\n        explicitSet: false,\n        valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n        pdfVersion: 1.4\n      },\n      PrintClip: {\n        defaultValue: \"CropBox\",\n        value: \"CropBox\",\n        type: \"name\",\n        explicitSet: false,\n        valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n        pdfVersion: 1.4\n      },\n      PrintScaling: {\n        defaultValue: \"AppDefault\",\n        value: \"AppDefault\",\n        type: \"name\",\n        explicitSet: false,\n        valueSet: [\"AppDefault\", \"None\"],\n        pdfVersion: 1.6\n      },\n      Duplex: {\n        defaultValue: \"\",\n        value: \"none\",\n        type: \"name\",\n        explicitSet: false,\n        valueSet: [\n          \"Simplex\",\n          \"DuplexFlipShortEdge\",\n          \"DuplexFlipLongEdge\",\n          \"none\"\n        ],\n        pdfVersion: 1.7\n      },\n      PickTrayByPDFSize: {\n        defaultValue: false,\n        value: false,\n        type: \"boolean\",\n        explicitSet: false,\n        valueSet: [true, false],\n        pdfVersion: 1.7\n      },\n      PrintPageRange: {\n        defaultValue: \"\",\n        value: \"\",\n        type: \"array\",\n        explicitSet: false,\n        valueSet: null,\n        pdfVersion: 1.7\n      },\n      NumCopies: {\n        defaultValue: 1,\n        value: 1,\n        type: \"integer\",\n        explicitSet: false,\n        valueSet: null,\n        pdfVersion: 1.7\n      }\n    };\n\n    var configurationKeys = Object.keys(configurationTemplate);\n\n    var rangeArray = [];\n    var i = 0;\n    var j = 0;\n    var k = 0;\n    var isValid;\n\n    var method;\n    var value;\n\n    function arrayContainsElement(array, element) {\n      var iterator;\n      var result = false;\n\n      for (iterator = 0; iterator < array.length; iterator += 1) {\n        if (array[iterator] === element) {\n          result = true;\n        }\n      }\n      return result;\n    }\n\n    if (this.internal.viewerpreferences === undefined) {\n      this.internal.viewerpreferences = {};\n      this.internal.viewerpreferences.configuration = JSON.parse(\n        JSON.stringify(configurationTemplate)\n      );\n      this.internal.viewerpreferences.isSubscribed = false;\n    }\n    configuration = this.internal.viewerpreferences.configuration;\n\n    if (options === \"reset\" || doReset === true) {\n      var len = configurationKeys.length;\n\n      for (k = 0; k < len; k += 1) {\n        configuration[configurationKeys[k]].value =\n          configuration[configurationKeys[k]].defaultValue;\n        configuration[configurationKeys[k]].explicitSet = false;\n      }\n    }\n\n    if (typeof options === \"object\") {\n      for (method in options) {\n        value = options[method];\n        if (\n          arrayContainsElement(configurationKeys, method) &&\n          value !== undefined\n        ) {\n          if (\n            configuration[method].type === \"boolean\" &&\n            typeof value === \"boolean\"\n          ) {\n            configuration[method].value = value;\n          } else if (\n            configuration[method].type === \"name\" &&\n            arrayContainsElement(configuration[method].valueSet, value)\n          ) {\n            configuration[method].value = value;\n          } else if (\n            configuration[method].type === \"integer\" &&\n            Number.isInteger(value)\n          ) {\n            configuration[method].value = value;\n          } else if (configuration[method].type === \"array\") {\n            for (i = 0; i < value.length; i += 1) {\n              isValid = true;\n              if (value[i].length === 1 && typeof value[i][0] === \"number\") {\n                rangeArray.push(String(value[i] - 1));\n              } else if (value[i].length > 1) {\n                for (j = 0; j < value[i].length; j += 1) {\n                  if (typeof value[i][j] !== \"number\") {\n                    isValid = false;\n                  }\n                }\n                if (isValid === true) {\n                  rangeArray.push([value[i][0] - 1, value[i][1] - 1].join(\" \"));\n                }\n              }\n            }\n            configuration[method].value = \"[\" + rangeArray.join(\" \") + \"]\";\n          } else {\n            configuration[method].value = configuration[method].defaultValue;\n          }\n\n          configuration[method].explicitSet = true;\n        }\n      }\n    }\n\n    if (this.internal.viewerpreferences.isSubscribed === false) {\n      this.internal.events.subscribe(\"putCatalog\", function() {\n        var pdfDict = [];\n        var vPref;\n        for (vPref in configuration) {\n          if (configuration[vPref].explicitSet === true) {\n            if (configuration[vPref].type === \"name\") {\n              pdfDict.push(\"/\" + vPref + \" /\" + configuration[vPref].value);\n            } else {\n              pdfDict.push(\"/\" + vPref + \" \" + configuration[vPref].value);\n            }\n          }\n        }\n        if (pdfDict.length !== 0) {\n          this.internal.write(\n            \"/ViewerPreferences\\n<<\\n\" + pdfDict.join(\"\\n\") + \"\\n>>\"\n          );\n        }\n      });\n      this.internal.viewerpreferences.isSubscribed = true;\n    }\n\n    this.internal.viewerpreferences.configuration = configuration;\n    return this;\n  };\n})(jsPDF.API);\n","/** ====================================================================\n * @license\n * jsPDF XMP metadata plugin\n * Copyright (c) 2016 Jussi Utunen, u-jussi@suomi24.fi\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name xmp_metadata\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  var postPutResources = function() {\n    var xmpmeta_beginning = '<x:xmpmeta xmlns:x=\"adobe:ns:meta/\">';\n    var rdf_beginning =\n      '<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"><rdf:Description rdf:about=\"\" xmlns:jspdf=\"' +\n      this.internal.__metadata__.namespaceuri +\n      '\"><jspdf:metadata>';\n    var rdf_ending = \"</jspdf:metadata></rdf:Description></rdf:RDF>\";\n    var xmpmeta_ending = \"</x:xmpmeta>\";\n    var utf8_xmpmeta_beginning = unescape(\n      encodeURIComponent(xmpmeta_beginning)\n    );\n    var utf8_rdf_beginning = unescape(encodeURIComponent(rdf_beginning));\n    var utf8_metadata = unescape(\n      encodeURIComponent(this.internal.__metadata__.metadata)\n    );\n    var utf8_rdf_ending = unescape(encodeURIComponent(rdf_ending));\n    var utf8_xmpmeta_ending = unescape(encodeURIComponent(xmpmeta_ending));\n\n    var total_len =\n      utf8_rdf_beginning.length +\n      utf8_metadata.length +\n      utf8_rdf_ending.length +\n      utf8_xmpmeta_beginning.length +\n      utf8_xmpmeta_ending.length;\n\n    this.internal.__metadata__.metadata_object_number = this.internal.newObject();\n    this.internal.write(\n      \"<< /Type /Metadata /Subtype /XML /Length \" + total_len + \" >>\"\n    );\n    this.internal.write(\"stream\");\n    this.internal.write(\n      utf8_xmpmeta_beginning +\n        utf8_rdf_beginning +\n        utf8_metadata +\n        utf8_rdf_ending +\n        utf8_xmpmeta_ending\n    );\n    this.internal.write(\"endstream\");\n    this.internal.write(\"endobj\");\n  };\n\n  var putCatalog = function() {\n    if (this.internal.__metadata__.metadata_object_number) {\n      this.internal.write(\n        \"/Metadata \" +\n          this.internal.__metadata__.metadata_object_number +\n          \" 0 R\"\n      );\n    }\n  };\n\n  /**\n   * Adds XMP formatted metadata to PDF\n   *\n   * @name addMetadata\n   * @function\n   * @param {String} metadata The actual metadata to be added. The metadata shall be stored as XMP simple value. Note that if the metadata string contains XML markup characters \"<\", \">\" or \"&\", those characters should be written using XML entities.\n   * @param {String} namespaceuri Sets the namespace URI for the metadata. Last character should be slash or hash.\n   * @returns {jsPDF} jsPDF-instance\n   */\n  jsPDFAPI.addMetadata = function(metadata, namespaceuri) {\n    if (typeof this.internal.__metadata__ === \"undefined\") {\n      this.internal.__metadata__ = {\n        metadata: metadata,\n        namespaceuri: namespaceuri || \"http://jspdf.default.namespaceuri/\"\n      };\n      this.internal.events.subscribe(\"putCatalog\", putCatalog);\n\n      this.internal.events.subscribe(\"postPutResources\", postPutResources);\n    }\n    return this;\n  };\n})(jsPDF.API);\n","import { jsPDF } from \"../jspdf.js\";\nimport { toPDFName } from \"../libs/pdfname.js\";\n\n/**\n * @name utf8\n * @module\n */\n(function(jsPDF) {\n  \"use strict\";\n  var jsPDFAPI = jsPDF.API;\n\n  /***************************************************************************************************/\n  /* function : pdfEscape16                                                                          */\n  /* comment : The character id of a 2-byte string is converted to a hexadecimal number by obtaining */\n  /*   the corresponding glyph id and width, and then adding padding to the string.                  */\n  /***************************************************************************************************/\n  var pdfEscape16 = (jsPDFAPI.pdfEscape16 = function(text, font) {\n    var widths = font.metadata.Unicode.widths;\n    var padz = [\"\", \"0\", \"00\", \"000\", \"0000\"];\n    var ar = [\"\"];\n    for (var i = 0, l = text.length, t; i < l; ++i) {\n      t = font.metadata.characterToGlyph(text.charCodeAt(i));\n      font.metadata.glyIdsUsed.push(t);\n      font.metadata.toUnicode[t] = text.charCodeAt(i);\n      if (widths.indexOf(t) == -1) {\n        widths.push(t);\n        widths.push([parseInt(font.metadata.widthOfGlyph(t), 10)]);\n      }\n      if (t == \"0\") {\n        //Spaces are not allowed in cmap.\n        return ar.join(\"\");\n      } else {\n        t = t.toString(16);\n        ar.push(padz[4 - t.length], t);\n      }\n    }\n    return ar.join(\"\");\n  });\n\n  var toUnicodeCmap = function(map) {\n    var code, codes, range, unicode, unicodeMap, _i, _len;\n    unicodeMap =\n      \"/CIDInit /ProcSet findresource begin\\n12 dict begin\\nbegincmap\\n/CIDSystemInfo <<\\n  /Registry (Adobe)\\n  /Ordering (UCS)\\n  /Supplement 0\\n>> def\\n/CMapName /Adobe-Identity-UCS def\\n/CMapType 2 def\\n1 begincodespacerange\\n<0000><ffff>\\nendcodespacerange\";\n    codes = Object.keys(map).sort(function(a, b) {\n      return a - b;\n    });\n\n    range = [];\n    for (_i = 0, _len = codes.length; _i < _len; _i++) {\n      code = codes[_i];\n      if (range.length >= 100) {\n        unicodeMap +=\n          \"\\n\" +\n          range.length +\n          \" beginbfchar\\n\" +\n          range.join(\"\\n\") +\n          \"\\nendbfchar\";\n        range = [];\n      }\n\n      if (\n        map[code] !== undefined &&\n        map[code] !== null &&\n        typeof map[code].toString === \"function\"\n      ) {\n        unicode = (\"0000\" + map[code].toString(16)).slice(-4);\n        code = (\"0000\" + (+code).toString(16)).slice(-4);\n        range.push(\"<\" + code + \"><\" + unicode + \">\");\n      }\n    }\n\n    if (range.length) {\n      unicodeMap +=\n        \"\\n\" +\n        range.length +\n        \" beginbfchar\\n\" +\n        range.join(\"\\n\") +\n        \"\\nendbfchar\\n\";\n    }\n    unicodeMap +=\n      \"endcmap\\nCMapName currentdict /CMap defineresource pop\\nend\\nend\";\n    return unicodeMap;\n  };\n\n  var identityHFunction = function(options) {\n    var font = options.font;\n    var out = options.out;\n    var newObject = options.newObject;\n    var putStream = options.putStream;\n\n    if (\n      font.metadata instanceof jsPDF.API.TTFFont &&\n      font.encoding === \"Identity-H\"\n    ) {\n      //Tag with Identity-H\n      var widths = font.metadata.Unicode.widths;\n      var data = font.metadata.subset.encode(font.metadata.glyIdsUsed, 1);\n      var pdfOutput = data;\n      var pdfOutput2 = \"\";\n      for (var i = 0; i < pdfOutput.length; i++) {\n        pdfOutput2 += String.fromCharCode(pdfOutput[i]);\n      }\n      var fontTable = newObject();\n      putStream({ data: pdfOutput2, addLength1: true, objectId: fontTable });\n      out(\"endobj\");\n\n      var cmap = newObject();\n      var cmapData = toUnicodeCmap(font.metadata.toUnicode);\n      putStream({ data: cmapData, addLength1: true, objectId: cmap });\n      out(\"endobj\");\n\n      var fontDescriptor = newObject();\n      out(\"<<\");\n      out(\"/Type /FontDescriptor\");\n      out(\"/FontName /\" + toPDFName(font.fontName));\n      out(\"/FontFile2 \" + fontTable + \" 0 R\");\n      out(\"/FontBBox \" + jsPDF.API.PDFObject.convert(font.metadata.bbox));\n      out(\"/Flags \" + font.metadata.flags);\n      out(\"/StemV \" + font.metadata.stemV);\n      out(\"/ItalicAngle \" + font.metadata.italicAngle);\n      out(\"/Ascent \" + font.metadata.ascender);\n      out(\"/Descent \" + font.metadata.decender);\n      out(\"/CapHeight \" + font.metadata.capHeight);\n      out(\">>\");\n      out(\"endobj\");\n\n      var DescendantFont = newObject();\n      out(\"<<\");\n      out(\"/Type /Font\");\n      out(\"/BaseFont /\" + toPDFName(font.fontName));\n      out(\"/FontDescriptor \" + fontDescriptor + \" 0 R\");\n      out(\"/W \" + jsPDF.API.PDFObject.convert(widths));\n      out(\"/CIDToGIDMap /Identity\");\n      out(\"/DW 1000\");\n      out(\"/Subtype /CIDFontType2\");\n      out(\"/CIDSystemInfo\");\n      out(\"<<\");\n      out(\"/Supplement 0\");\n      out(\"/Registry (Adobe)\");\n      out(\"/Ordering (\" + font.encoding + \")\");\n      out(\">>\");\n      out(\">>\");\n      out(\"endobj\");\n\n      font.objectNumber = newObject();\n      out(\"<<\");\n      out(\"/Type /Font\");\n      out(\"/Subtype /Type0\");\n      out(\"/ToUnicode \" + cmap + \" 0 R\");\n      out(\"/BaseFont /\" + toPDFName(font.fontName));\n      out(\"/Encoding /\" + font.encoding);\n      out(\"/DescendantFonts [\" + DescendantFont + \" 0 R]\");\n      out(\">>\");\n      out(\"endobj\");\n\n      font.isAlreadyPutted = true;\n    }\n  };\n\n  jsPDFAPI.events.push([\n    \"putFont\",\n    function(args) {\n      identityHFunction(args);\n    }\n  ]);\n\n  var winAnsiEncodingFunction = function(options) {\n    var font = options.font;\n    var out = options.out;\n    var newObject = options.newObject;\n    var putStream = options.putStream;\n\n    if (\n      font.metadata instanceof jsPDF.API.TTFFont &&\n      font.encoding === \"WinAnsiEncoding\"\n    ) {\n      //Tag with WinAnsi encoding\n      var data = font.metadata.rawData;\n      var pdfOutput = data;\n      var pdfOutput2 = \"\";\n      for (var i = 0; i < pdfOutput.length; i++) {\n        pdfOutput2 += String.fromCharCode(pdfOutput[i]);\n      }\n      var fontTable = newObject();\n      putStream({ data: pdfOutput2, addLength1: true, objectId: fontTable });\n      out(\"endobj\");\n\n      var cmap = newObject();\n      var cmapData = toUnicodeCmap(font.metadata.toUnicode);\n      putStream({ data: cmapData, addLength1: true, objectId: cmap });\n      out(\"endobj\");\n\n      var fontDescriptor = newObject();\n      out(\"<<\");\n      out(\"/Descent \" + font.metadata.decender);\n      out(\"/CapHeight \" + font.metadata.capHeight);\n      out(\"/StemV \" + font.metadata.stemV);\n      out(\"/Type /FontDescriptor\");\n      out(\"/FontFile2 \" + fontTable + \" 0 R\");\n      out(\"/Flags 96\");\n      out(\"/FontBBox \" + jsPDF.API.PDFObject.convert(font.metadata.bbox));\n      out(\"/FontName /\" + toPDFName(font.fontName));\n      out(\"/ItalicAngle \" + font.metadata.italicAngle);\n      out(\"/Ascent \" + font.metadata.ascender);\n      out(\">>\");\n      out(\"endobj\");\n      font.objectNumber = newObject();\n      for (var j = 0; j < font.metadata.hmtx.widths.length; j++) {\n        font.metadata.hmtx.widths[j] = parseInt(\n          font.metadata.hmtx.widths[j] * (1000 / font.metadata.head.unitsPerEm)\n        ); //Change the width of Em units to Point units.\n      }\n      out(\n        \"<</Subtype/TrueType/Type/Font/ToUnicode \" +\n          cmap +\n          \" 0 R/BaseFont/\" +\n          toPDFName(font.fontName) +\n          \"/FontDescriptor \" +\n          fontDescriptor +\n          \" 0 R\" +\n          \"/Encoding/\" +\n          font.encoding +\n          \" /FirstChar 29 /LastChar 255 /Widths \" +\n          jsPDF.API.PDFObject.convert(font.metadata.hmtx.widths) +\n          \">>\"\n      );\n      out(\"endobj\");\n      font.isAlreadyPutted = true;\n    }\n  };\n\n  jsPDFAPI.events.push([\n    \"putFont\",\n    function(args) {\n      winAnsiEncodingFunction(args);\n    }\n  ]);\n\n  var utf8TextFunction = function(args) {\n    var text = args.text || \"\";\n    var x = args.x;\n    var y = args.y;\n    var options = args.options || {};\n    var mutex = args.mutex || {};\n\n    var pdfEscape = mutex.pdfEscape;\n    var activeFontKey = mutex.activeFontKey;\n    var fonts = mutex.fonts;\n    var key = activeFontKey;\n\n    var str = \"\",\n      s = 0,\n      cmapConfirm;\n    var strText = \"\";\n    var encoding = fonts[key].encoding;\n\n    if (fonts[key].encoding !== \"Identity-H\") {\n      return {\n        text: text,\n        x: x,\n        y: y,\n        options: options,\n        mutex: mutex\n      };\n    }\n    strText = text;\n\n    key = activeFontKey;\n    if (Array.isArray(text)) {\n      strText = text[0];\n    }\n    for (s = 0; s < strText.length; s += 1) {\n      if (fonts[key].metadata.hasOwnProperty(\"cmap\")) {\n        cmapConfirm =\n          fonts[key].metadata.cmap.unicode.codeMap[strText[s].charCodeAt(0)];\n        /*\n             if (Object.prototype.toString.call(text) === '[object Array]') {\n                var i = 0;\n               // for (i = 0; i < text.length; i += 1) {\n                    if (Object.prototype.toString.call(text[s]) === '[object Array]') {\n                        cmapConfirm = fonts[key].metadata.cmap.unicode.codeMap[strText[s][0].charCodeAt(0)]; //Make sure the cmap has the corresponding glyph id\n                    } else {\n\n                    }\n                //}\n\n            } else {\n                cmapConfirm = fonts[key].metadata.cmap.unicode.codeMap[strText[s].charCodeAt(0)]; //Make sure the cmap has the corresponding glyph id\n            }*/\n      }\n      if (!cmapConfirm) {\n        if (\n          strText[s].charCodeAt(0) < 256 &&\n          fonts[key].metadata.hasOwnProperty(\"Unicode\")\n        ) {\n          str += strText[s];\n        } else {\n          str += \"\";\n        }\n      } else {\n        str += strText[s];\n      }\n    }\n    var result = \"\";\n    if (parseInt(key.slice(1)) < 14 || encoding === \"WinAnsiEncoding\") {\n      //For the default 13 font\n      result = pdfEscape(str, key)\n        .split(\"\")\n        .map(function(cv) {\n          return cv.charCodeAt(0).toString(16);\n        })\n        .join(\"\");\n    } else if (encoding === \"Identity-H\") {\n      result = pdfEscape16(str, fonts[key]);\n    }\n    mutex.isHex = true;\n\n    return {\n      text: result,\n      x: x,\n      y: y,\n      options: options,\n      mutex: mutex\n    };\n  };\n\n  var utf8EscapeFunction = function(parms) {\n    var text = parms.text || \"\",\n      x = parms.x,\n      y = parms.y,\n      options = parms.options,\n      mutex = parms.mutex;\n    var tmpText = [];\n    var args = {\n      text: text,\n      x: x,\n      y: y,\n      options: options,\n      mutex: mutex\n    };\n\n    if (Array.isArray(text)) {\n      var i = 0;\n      for (i = 0; i < text.length; i += 1) {\n        if (Array.isArray(text[i])) {\n          if (text[i].length === 3) {\n            tmpText.push([\n              utf8TextFunction(Object.assign({}, args, { text: text[i][0] }))\n                .text,\n              text[i][1],\n              text[i][2]\n            ]);\n          } else {\n            tmpText.push(\n              utf8TextFunction(Object.assign({}, args, { text: text[i] })).text\n            );\n          }\n        } else {\n          tmpText.push(\n            utf8TextFunction(Object.assign({}, args, { text: text[i] })).text\n          );\n        }\n      }\n      parms.text = tmpText;\n    } else {\n      parms.text = utf8TextFunction(\n        Object.assign({}, args, { text: text })\n      ).text;\n    }\n  };\n\n  jsPDFAPI.events.push([\"postProcessText\", utf8EscapeFunction]);\n})(jsPDF);\n","/**\n * @license\n * jsPDF virtual FileSystem functionality\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * Use the vFS to handle files\n *\n * @name vFS\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  var _initializeVFS = function() {\n    if (typeof this.internal.vFS === \"undefined\") {\n      this.internal.vFS = {};\n    }\n    return true;\n  };\n\n  /**\n   * Check if the file exists in the vFS\n   *\n   * @name existsFileInVFS\n   * @function\n   * @param {string} Possible filename in the vFS.\n   * @returns {boolean}\n   * @example\n   * doc.existsFileInVFS(\"someFile.txt\");\n   */\n  jsPDFAPI.existsFileInVFS = function(filename) {\n    _initializeVFS.call(this);\n    return typeof this.internal.vFS[filename] !== \"undefined\";\n  };\n\n  /**\n   * Add a file to the vFS\n   *\n   * @name addFileToVFS\n   * @function\n   * @param {string} filename The name of the file which should be added.\n   * @param {string} filecontent The content of the file.\n   * @returns {jsPDF}\n   * @example\n   * doc.addFileToVFS(\"someFile.txt\", \"BADFACE1\");\n   */\n  jsPDFAPI.addFileToVFS = function(filename, filecontent) {\n    _initializeVFS.call(this);\n    this.internal.vFS[filename] = filecontent;\n    return this;\n  };\n\n  /**\n   * Get the file from the vFS\n   *\n   * @name getFileFromVFS\n   * @function\n   * @param {string} The name of the file which gets requested.\n   * @returns {string}\n   * @example\n   * doc.getFileFromVFS(\"someFile.txt\");\n   */\n  jsPDFAPI.getFileFromVFS = function(filename) {\n    _initializeVFS.call(this);\n\n    if (typeof this.internal.vFS[filename] !== \"undefined\") {\n      return this.internal.vFS[filename];\n    }\n    return null;\n  };\n})(jsPDF.API);\n","/**\n * @license\n * Unicode Bidi Engine based on the work of Alex Shensis (@asthensis)\n * MIT License\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n(function(jsPDF) {\n  \"use strict\";\n  /**\n   * Table of Unicode types.\n   *\n   * Generated by:\n   *\n   * var bidi = require(\"./bidi/index\");\n   * var bidi_accumulate = bidi.slice(0, 256).concat(bidi.slice(0x0500, 0x0500 + 256 * 3)).\n   * concat(bidi.slice(0x2000, 0x2000 + 256)).concat(bidi.slice(0xFB00, 0xFB00 + 256)).\n   * concat(bidi.slice(0xFE00, 0xFE00 + 2 * 256));\n   *\n   * for( var i = 0; i < bidi_accumulate.length; i++) {\n   * \tif(bidi_accumulate[i] === undefined || bidi_accumulate[i] === 'ON')\n   * \t\tbidi_accumulate[i] = 'N'; //mark as neutral to conserve space and substitute undefined\n   * }\n   * var bidiAccumulateStr = 'return [ \"' + bidi_accumulate.toString().replace(/,/g, '\", \"') + '\" ];';\n   * require(\"fs\").writeFile('unicode-types.js', bidiAccumulateStr);\n   *\n   * Based on:\n   * https://github.com/mathiasbynens/unicode-8.0.0\n   */\n  var bidiUnicodeTypes = [\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"S\",\n    \"B\",\n    \"S\",\n    \"WS\",\n    \"B\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"B\",\n    \"B\",\n    \"B\",\n    \"S\",\n    \"WS\",\n    \"N\",\n    \"N\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"ES\",\n    \"CS\",\n    \"ES\",\n    \"CS\",\n    \"CS\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"CS\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"B\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"CS\",\n    \"N\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"BN\",\n    \"N\",\n    \"N\",\n    \"ET\",\n    \"ET\",\n    \"EN\",\n    \"EN\",\n    \"N\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"EN\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"ET\",\n    \"N\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"R\",\n    \"NSM\",\n    \"R\",\n    \"NSM\",\n    \"NSM\",\n    \"R\",\n    \"NSM\",\n    \"NSM\",\n    \"R\",\n    \"NSM\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"AN\",\n    \"AN\",\n    \"AN\",\n    \"AN\",\n    \"AN\",\n    \"AN\",\n    \"N\",\n    \"N\",\n    \"AL\",\n    \"ET\",\n    \"ET\",\n    \"AL\",\n    \"CS\",\n    \"AL\",\n    \"N\",\n    \"N\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"AL\",\n    \"AL\",\n    \"N\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"AN\",\n    \"AN\",\n    \"AN\",\n    \"AN\",\n    \"AN\",\n    \"AN\",\n    \"AN\",\n    \"AN\",\n    \"AN\",\n    \"AN\",\n    \"ET\",\n    \"AN\",\n    \"AN\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"NSM\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"AN\",\n    \"N\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"AL\",\n    \"AL\",\n    \"NSM\",\n    \"NSM\",\n    \"N\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"AL\",\n    \"AL\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"N\",\n    \"AL\",\n    \"AL\",\n    \"NSM\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"N\",\n    \"N\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"AL\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"R\",\n    \"R\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"R\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"WS\",\n    \"WS\",\n    \"WS\",\n    \"WS\",\n    \"WS\",\n    \"WS\",\n    \"WS\",\n    \"WS\",\n    \"WS\",\n    \"WS\",\n    \"WS\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"L\",\n    \"R\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"WS\",\n    \"B\",\n    \"LRE\",\n    \"RLE\",\n    \"PDF\",\n    \"LRO\",\n    \"RLO\",\n    \"CS\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"CS\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"WS\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"N\",\n    \"LRI\",\n    \"RLI\",\n    \"FSI\",\n    \"PDI\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"EN\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"ES\",\n    \"ES\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"ES\",\n    \"ES\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"R\",\n    \"NSM\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"ES\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"N\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"N\",\n    \"R\",\n    \"N\",\n    \"R\",\n    \"R\",\n    \"N\",\n    \"R\",\n    \"R\",\n    \"N\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"CS\",\n    \"N\",\n    \"CS\",\n    \"N\",\n    \"N\",\n    \"CS\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"ET\",\n    \"N\",\n    \"N\",\n    \"ES\",\n    \"ES\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"ET\",\n    \"ET\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"N\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"N\",\n    \"N\",\n    \"BN\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"ES\",\n    \"CS\",\n    \"ES\",\n    \"CS\",\n    \"CS\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"CS\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"ET\",\n    \"ET\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"ET\",\n    \"ET\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\"\n  ];\n\n  /**\n   * Unicode Bidi algorithm compliant Bidi engine.\n   * For reference see http://unicode.org/reports/tr9/\n   */\n\n  /**\n   * constructor ( options )\n   *\n   * Initializes Bidi engine\n   *\n   * @param {Object} See 'setOptions' below for detailed description.\n   * options are cashed between invocation of 'doBidiReorder' method\n   *\n   * sample usage pattern of BidiEngine:\n   * var opt = {\n   * \tisInputVisual: true,\n   * \tisInputRtl: false,\n   * \tisOutputVisual: false,\n   * \tisOutputRtl: false,\n   * \tisSymmetricSwapping: true\n   * }\n   * var sourceToTarget = [], levels = [];\n   * var bidiEng = Globalize.bidiEngine(opt);\n   * var src = \"text string to be reordered\";\n   * var ret = bidiEng.doBidiReorder(src, sourceToTarget, levels);\n   */\n\n  jsPDF.__bidiEngine__ = jsPDF.prototype.__bidiEngine__ = function(options) {\n    var _UNICODE_TYPES = _bidiUnicodeTypes;\n\n    var _STATE_TABLE_LTR = [\n      [0, 3, 0, 1, 0, 0, 0],\n      [0, 3, 0, 1, 2, 2, 0],\n      [0, 3, 0, 0x11, 2, 0, 1],\n      [0, 3, 5, 5, 4, 1, 0],\n      [0, 3, 0x15, 0x15, 4, 0, 1],\n      [0, 3, 5, 5, 4, 2, 0]\n    ];\n\n    var _STATE_TABLE_RTL = [\n      [2, 0, 1, 1, 0, 1, 0],\n      [2, 0, 1, 1, 0, 2, 0],\n      [2, 0, 2, 1, 3, 2, 0],\n      [2, 0, 2, 0x21, 3, 1, 1]\n    ];\n\n    var _TYPE_NAMES_MAP = { L: 0, R: 1, EN: 2, AN: 3, N: 4, B: 5, S: 6 };\n\n    var _UNICODE_RANGES_MAP = {\n      0: 0,\n      5: 1,\n      6: 2,\n      7: 3,\n      0x20: 4,\n      0xfb: 5,\n      0xfe: 6,\n      0xff: 7\n    };\n\n    var _SWAP_TABLE = [\n      \"\\u0028\",\n      \"\\u0029\",\n      \"\\u0028\",\n      \"\\u003C\",\n      \"\\u003E\",\n      \"\\u003C\",\n      \"\\u005B\",\n      \"\\u005D\",\n      \"\\u005B\",\n      \"\\u007B\",\n      \"\\u007D\",\n      \"\\u007B\",\n      \"\\u00AB\",\n      \"\\u00BB\",\n      \"\\u00AB\",\n      \"\\u2039\",\n      \"\\u203A\",\n      \"\\u2039\",\n      \"\\u2045\",\n      \"\\u2046\",\n      \"\\u2045\",\n      \"\\u207D\",\n      \"\\u207E\",\n      \"\\u207D\",\n      \"\\u208D\",\n      \"\\u208E\",\n      \"\\u208D\",\n      \"\\u2264\",\n      \"\\u2265\",\n      \"\\u2264\",\n      \"\\u2329\",\n      \"\\u232A\",\n      \"\\u2329\",\n      \"\\uFE59\",\n      \"\\uFE5A\",\n      \"\\uFE59\",\n      \"\\uFE5B\",\n      \"\\uFE5C\",\n      \"\\uFE5B\",\n      \"\\uFE5D\",\n      \"\\uFE5E\",\n      \"\\uFE5D\",\n      \"\\uFE64\",\n      \"\\uFE65\",\n      \"\\uFE64\"\n    ];\n\n    var _LTR_RANGES_REG_EXPR = new RegExp(\n      /^([1-4|9]|1[0-9]|2[0-9]|3[0168]|4[04589]|5[012]|7[78]|159|16[0-9]|17[0-2]|21[569]|22[03489]|250)$/\n    );\n\n    var _lastArabic = false,\n      _hasUbatAl,\n      _hasUbatB,\n      _hasUbatS,\n      DIR_LTR = 0,\n      DIR_RTL = 1,\n      _isInVisual,\n      _isInRtl,\n      _isOutVisual,\n      _isOutRtl,\n      _isSymmetricSwapping,\n      _dir = DIR_LTR;\n\n    this.__bidiEngine__ = {};\n\n    var _init = function(text, sourceToTargetMap) {\n      if (sourceToTargetMap) {\n        for (var i = 0; i < text.length; i++) {\n          sourceToTargetMap[i] = i;\n        }\n      }\n      if (_isInRtl === undefined) {\n        _isInRtl = _isContextualDirRtl(text);\n      }\n      if (_isOutRtl === undefined) {\n        _isOutRtl = _isContextualDirRtl(text);\n      }\n    };\n\n    // for reference see 3.2 in http://unicode.org/reports/tr9/\n    //\n    var _getCharType = function(ch) {\n      var charCode = ch.charCodeAt(),\n        range = charCode >> 8,\n        rangeIdx = _UNICODE_RANGES_MAP[range];\n\n      if (rangeIdx !== undefined) {\n        return _UNICODE_TYPES[rangeIdx * 256 + (charCode & 0xff)];\n      } else if (range === 0xfc || range === 0xfd) {\n        return \"AL\";\n      } else if (_LTR_RANGES_REG_EXPR.test(range)) {\n        //unlikely case\n        return \"L\";\n      } else if (range === 8) {\n        // even less likely\n        return \"R\";\n      }\n      return \"N\"; //undefined type, mark as neutral\n    };\n\n    var _isContextualDirRtl = function(text) {\n      for (var i = 0, charType; i < text.length; i++) {\n        charType = _getCharType(text.charAt(i));\n        if (charType === \"L\") {\n          return false;\n        } else if (charType === \"R\") {\n          return true;\n        }\n      }\n      return false;\n    };\n\n    // for reference see 3.3.4 & 3.3.5 in http://unicode.org/reports/tr9/\n    //\n    var _resolveCharType = function(chars, types, resolvedTypes, index) {\n      var cType = types[index],\n        wType,\n        nType,\n        i,\n        len;\n      switch (cType) {\n        case \"L\":\n        case \"R\":\n          _lastArabic = false;\n          break;\n        case \"N\":\n        case \"AN\":\n          break;\n\n        case \"EN\":\n          if (_lastArabic) {\n            cType = \"AN\";\n          }\n          break;\n\n        case \"AL\":\n          _lastArabic = true;\n          _hasUbatAl = true;\n          cType = \"R\";\n          break;\n\n        case \"WS\":\n          cType = \"N\";\n          break;\n\n        case \"CS\":\n          if (\n            index < 1 ||\n            index + 1 >= types.length ||\n            ((wType = resolvedTypes[index - 1]) !== \"EN\" && wType !== \"AN\") ||\n            ((nType = types[index + 1]) !== \"EN\" && nType !== \"AN\")\n          ) {\n            cType = \"N\";\n          } else if (_lastArabic) {\n            nType = \"AN\";\n          }\n          cType = nType === wType ? nType : \"N\";\n          break;\n\n        case \"ES\":\n          wType = index > 0 ? resolvedTypes[index - 1] : \"B\";\n          cType =\n            wType === \"EN\" &&\n            index + 1 < types.length &&\n            types[index + 1] === \"EN\"\n              ? \"EN\"\n              : \"N\";\n          break;\n\n        case \"ET\":\n          if (index > 0 && resolvedTypes[index - 1] === \"EN\") {\n            cType = \"EN\";\n            break;\n          } else if (_lastArabic) {\n            cType = \"N\";\n            break;\n          }\n          i = index + 1;\n          len = types.length;\n          while (i < len && types[i] === \"ET\") {\n            i++;\n          }\n          if (i < len && types[i] === \"EN\") {\n            cType = \"EN\";\n          } else {\n            cType = \"N\";\n          }\n          break;\n\n        case \"NSM\":\n          if (_isInVisual && !_isInRtl) {\n            //V->L\n            len = types.length;\n            i = index + 1;\n            while (i < len && types[i] === \"NSM\") {\n              i++;\n            }\n            if (i < len) {\n              var c = chars[index];\n              var rtlCandidate = (c >= 0x0591 && c <= 0x08ff) || c === 0xfb1e;\n              wType = types[i];\n              if (rtlCandidate && (wType === \"R\" || wType === \"AL\")) {\n                cType = \"R\";\n                break;\n              }\n            }\n          }\n          if (index < 1 || (wType = types[index - 1]) === \"B\") {\n            cType = \"N\";\n          } else {\n            cType = resolvedTypes[index - 1];\n          }\n          break;\n\n        case \"B\":\n          _lastArabic = false;\n          _hasUbatB = true;\n          cType = _dir;\n          break;\n\n        case \"S\":\n          _hasUbatS = true;\n          cType = \"N\";\n          break;\n\n        case \"LRE\":\n        case \"RLE\":\n        case \"LRO\":\n        case \"RLO\":\n        case \"PDF\":\n          _lastArabic = false;\n          break;\n        case \"BN\":\n          cType = \"N\";\n          break;\n      }\n      return cType;\n    };\n\n    var _handleUbatS = function(types, levels, length) {\n      for (var i = 0; i < length; i++) {\n        if (types[i] === \"S\") {\n          levels[i] = _dir;\n          for (var j = i - 1; j >= 0; j--) {\n            if (types[j] === \"WS\") {\n              levels[j] = _dir;\n            } else {\n              break;\n            }\n          }\n        }\n      }\n    };\n\n    var _invertString = function(text, sourceToTargetMap, levels) {\n      var charArray = text.split(\"\");\n      if (levels) {\n        _computeLevels(charArray, levels, { hiLevel: _dir });\n      }\n      charArray.reverse();\n      sourceToTargetMap && sourceToTargetMap.reverse();\n      return charArray.join(\"\");\n    };\n\n    // For reference see 3.3 in http://unicode.org/reports/tr9/\n    //\n    var _computeLevels = function(chars, levels, params) {\n      var action,\n        condition,\n        i,\n        index,\n        newLevel,\n        prevState,\n        condPos = -1,\n        len = chars.length,\n        newState = 0,\n        resolvedTypes = [],\n        stateTable = _dir ? _STATE_TABLE_RTL : _STATE_TABLE_LTR,\n        types = [];\n\n      _lastArabic = false;\n      _hasUbatAl = false;\n      _hasUbatB = false;\n      _hasUbatS = false;\n      for (i = 0; i < len; i++) {\n        types[i] = _getCharType(chars[i]);\n      }\n      for (index = 0; index < len; index++) {\n        prevState = newState;\n        resolvedTypes[index] = _resolveCharType(\n          chars,\n          types,\n          resolvedTypes,\n          index\n        );\n        newState = stateTable[prevState][_TYPE_NAMES_MAP[resolvedTypes[index]]];\n        action = newState & 0xf0;\n        newState &= 0x0f;\n        levels[index] = newLevel = stateTable[newState][5];\n        if (action > 0) {\n          if (action === 0x10) {\n            for (i = condPos; i < index; i++) {\n              levels[i] = 1;\n            }\n            condPos = -1;\n          } else {\n            condPos = -1;\n          }\n        }\n        condition = stateTable[newState][6];\n        if (condition) {\n          if (condPos === -1) {\n            condPos = index;\n          }\n        } else {\n          if (condPos > -1) {\n            for (i = condPos; i < index; i++) {\n              levels[i] = newLevel;\n            }\n            condPos = -1;\n          }\n        }\n        if (types[index] === \"B\") {\n          levels[index] = 0;\n        }\n        params.hiLevel |= newLevel;\n      }\n      if (_hasUbatS) {\n        _handleUbatS(types, levels, len);\n      }\n    };\n\n    // for reference see 3.4 in http://unicode.org/reports/tr9/\n    //\n    var _invertByLevel = function(\n      level,\n      charArray,\n      sourceToTargetMap,\n      levels,\n      params\n    ) {\n      if (params.hiLevel < level) {\n        return;\n      }\n      if (level === 1 && _dir === DIR_RTL && !_hasUbatB) {\n        charArray.reverse();\n        sourceToTargetMap && sourceToTargetMap.reverse();\n        return;\n      }\n      var ch,\n        high,\n        end,\n        low,\n        len = charArray.length,\n        start = 0;\n\n      while (start < len) {\n        if (levels[start] >= level) {\n          end = start + 1;\n          while (end < len && levels[end] >= level) {\n            end++;\n          }\n          for (low = start, high = end - 1; low < high; low++, high--) {\n            ch = charArray[low];\n            charArray[low] = charArray[high];\n            charArray[high] = ch;\n            if (sourceToTargetMap) {\n              ch = sourceToTargetMap[low];\n              sourceToTargetMap[low] = sourceToTargetMap[high];\n              sourceToTargetMap[high] = ch;\n            }\n          }\n          start = end;\n        }\n        start++;\n      }\n    };\n\n    // for reference see 7 & BD16 in http://unicode.org/reports/tr9/\n    //\n    var _symmetricSwap = function(charArray, levels, params) {\n      if (params.hiLevel !== 0 && _isSymmetricSwapping) {\n        for (var i = 0, index; i < charArray.length; i++) {\n          if (levels[i] === 1) {\n            index = _SWAP_TABLE.indexOf(charArray[i]);\n            if (index >= 0) {\n              charArray[i] = _SWAP_TABLE[index + 1];\n            }\n          }\n        }\n      }\n    };\n\n    var _reorder = function(text, sourceToTargetMap, levels) {\n      var charArray = text.split(\"\"),\n        params = { hiLevel: _dir };\n\n      if (!levels) {\n        levels = [];\n      }\n      _computeLevels(charArray, levels, params);\n      _symmetricSwap(charArray, levels, params);\n      _invertByLevel(DIR_RTL + 1, charArray, sourceToTargetMap, levels, params);\n      _invertByLevel(DIR_RTL, charArray, sourceToTargetMap, levels, params);\n      return charArray.join(\"\");\n    };\n\n    // doBidiReorder( text, sourceToTargetMap, levels )\n    // Performs Bidi reordering by implementing Unicode Bidi algorithm.\n    // Returns reordered string\n    // @text [String]:\n    // - input string to be reordered, this is input parameter\n    // $sourceToTargetMap [Array] (optional)\n    // - resultant mapping between input and output strings, this is output parameter\n    // $levels [Array] (optional)\n    // - array of calculated Bidi levels, , this is output parameter\n    this.__bidiEngine__.doBidiReorder = function(\n      text,\n      sourceToTargetMap,\n      levels\n    ) {\n      _init(text, sourceToTargetMap);\n      if (!_isInVisual && _isOutVisual && !_isOutRtl) {\n        // LLTR->VLTR, LRTL->VLTR\n        _dir = _isInRtl ? DIR_RTL : DIR_LTR;\n        text = _reorder(text, sourceToTargetMap, levels);\n      } else if (_isInVisual && _isOutVisual && _isInRtl ^ _isOutRtl) {\n        // VRTL->VLTR, VLTR->VRTL\n        _dir = _isInRtl ? DIR_RTL : DIR_LTR;\n        text = _invertString(text, sourceToTargetMap, levels);\n      } else if (!_isInVisual && _isOutVisual && _isOutRtl) {\n        // LLTR->VRTL, LRTL->VRTL\n        _dir = _isInRtl ? DIR_RTL : DIR_LTR;\n        text = _reorder(text, sourceToTargetMap, levels);\n        text = _invertString(text, sourceToTargetMap);\n      } else if (_isInVisual && !_isInRtl && !_isOutVisual && !_isOutRtl) {\n        // VLTR->LLTR\n        _dir = DIR_LTR;\n        text = _reorder(text, sourceToTargetMap, levels);\n      } else if (_isInVisual && !_isOutVisual && _isInRtl ^ _isOutRtl) {\n        // VLTR->LRTL, VRTL->LLTR\n        text = _invertString(text, sourceToTargetMap);\n        if (_isInRtl) {\n          //LLTR -> VLTR\n          _dir = DIR_LTR;\n          text = _reorder(text, sourceToTargetMap, levels);\n        } else {\n          //LRTL -> VRTL\n          _dir = DIR_RTL;\n          text = _reorder(text, sourceToTargetMap, levels);\n          text = _invertString(text, sourceToTargetMap);\n        }\n      } else if (_isInVisual && _isInRtl && !_isOutVisual && _isOutRtl) {\n        //  VRTL->LRTL\n        _dir = DIR_RTL;\n        text = _reorder(text, sourceToTargetMap, levels);\n        text = _invertString(text, sourceToTargetMap);\n      } else if (!_isInVisual && !_isOutVisual && _isInRtl ^ _isOutRtl) {\n        // LRTL->LLTR, LLTR->LRTL\n        var isSymmetricSwappingOrig = _isSymmetricSwapping;\n        if (_isInRtl) {\n          //LRTL->LLTR\n          _dir = DIR_RTL;\n          text = _reorder(text, sourceToTargetMap, levels);\n          _dir = DIR_LTR;\n          _isSymmetricSwapping = false;\n          text = _reorder(text, sourceToTargetMap, levels);\n          _isSymmetricSwapping = isSymmetricSwappingOrig;\n        } else {\n          //LLTR->LRTL\n          _dir = DIR_LTR;\n          text = _reorder(text, sourceToTargetMap, levels);\n          text = _invertString(text, sourceToTargetMap);\n          _dir = DIR_RTL;\n          _isSymmetricSwapping = false;\n          text = _reorder(text, sourceToTargetMap, levels);\n          _isSymmetricSwapping = isSymmetricSwappingOrig;\n          text = _invertString(text, sourceToTargetMap);\n        }\n      }\n      return text;\n    };\n\n    /**\n     * @name setOptions( options )\n     * @function\n     * Sets options for Bidi conversion\n     * @param {Object}:\n     * - isInputVisual {boolean} (defaults to false): allowed values: true(Visual mode), false(Logical mode)\n     * - isInputRtl {boolean}: allowed values true(Right-to-left direction), false (Left-to-right directiion), undefined(Contectual direction, i.e.direction defined by first strong character of input string)\n     * - isOutputVisual {boolean} (defaults to false): allowed values: true(Visual mode), false(Logical mode)\n     * - isOutputRtl {boolean}: allowed values true(Right-to-left direction), false (Left-to-right directiion), undefined(Contectual direction, i.e.direction defined by first strong characterof input string)\n     * - isSymmetricSwapping {boolean} (defaults to false): allowed values true(needs symmetric swapping), false (no need in symmetric swapping),\n     */\n    this.__bidiEngine__.setOptions = function(options) {\n      if (options) {\n        _isInVisual = options.isInputVisual;\n        _isOutVisual = options.isOutputVisual;\n        _isInRtl = options.isInputRtl;\n        _isOutRtl = options.isOutputRtl;\n        _isSymmetricSwapping = options.isSymmetricSwapping;\n      }\n    };\n\n    this.__bidiEngine__.setOptions(options);\n    return this.__bidiEngine__;\n  };\n\n  var _bidiUnicodeTypes = bidiUnicodeTypes;\n\n  var bidiEngine = new jsPDF.__bidiEngine__({ isInputVisual: true });\n\n  var bidiEngineFunction = function(args) {\n    var text = args.text;\n    var x = args.x;\n    var y = args.y;\n    var options = args.options || {};\n    var mutex = args.mutex || {};\n    var lang = options.lang;\n    var tmpText = [];\n\n    options.isInputVisual =\n      typeof options.isInputVisual === \"boolean\" ? options.isInputVisual : true;\n    bidiEngine.setOptions(options);\n\n    if (Object.prototype.toString.call(text) === \"[object Array]\") {\n      var i = 0;\n      tmpText = [];\n      for (i = 0; i < text.length; i += 1) {\n        if (Object.prototype.toString.call(text[i]) === \"[object Array]\") {\n          tmpText.push([\n            bidiEngine.doBidiReorder(text[i][0]),\n            text[i][1],\n            text[i][2]\n          ]);\n        } else {\n          tmpText.push([bidiEngine.doBidiReorder(text[i])]);\n        }\n      }\n      args.text = tmpText;\n    } else {\n      args.text = bidiEngine.doBidiReorder(text);\n    }\n    bidiEngine.setOptions({ isInputVisual: true });\n  };\n\n  jsPDF.API.events.push([\"postProcessText\", bidiEngineFunction]);\n})(jsPDF);\n","/* eslint-disable no-control-regex */\n/************************************************\n * Title : custom font                          *\n * Start Data : 2017. 01. 22.                   *\n * Comment : TEXT API                           *\n ************************************************/\n\n/******************************\n * jsPDF extension API Design *\n * ****************************/\n\nimport { jsPDF } from \"../jspdf.js\";\n\njsPDF.API.TTFFont = (function() {\n  /************************************************************************/\n  /* function : open                                                       */\n  /* comment : Decode the encoded ttf content and create a TTFFont object. */\n  /************************************************************************/\n  TTFFont.open = function(file) {\n    return new TTFFont(file);\n  };\n  /***************************************************************/\n  /* function : TTFFont gernerator                               */\n  /* comment : Decode TTF contents are parsed, Data,             */\n  /* Subset object is created, and registerTTF function is called.*/\n  /***************************************************************/\n  function TTFFont(rawData) {\n    var data;\n    this.rawData = rawData;\n    data = this.contents = new Data(rawData);\n    this.contents.pos = 4;\n    if (data.readString(4) === \"ttcf\") {\n      throw new Error(\"TTCF not supported.\");\n    } else {\n      data.pos = 0;\n      this.parse();\n      this.subset = new Subset(this);\n      this.registerTTF();\n    }\n  }\n  /********************************************************/\n  /* function : parse                                     */\n  /* comment : TTF Parses the file contents by each table.*/\n  /********************************************************/\n  TTFFont.prototype.parse = function() {\n    this.directory = new Directory(this.contents);\n    this.head = new HeadTable(this);\n    this.name = new NameTable(this);\n    this.cmap = new CmapTable(this);\n    this.toUnicode = {};\n    this.hhea = new HheaTable(this);\n    this.maxp = new MaxpTable(this);\n    this.hmtx = new HmtxTable(this);\n    this.post = new PostTable(this);\n    this.os2 = new OS2Table(this);\n    this.loca = new LocaTable(this);\n    this.glyf = new GlyfTable(this);\n    this.ascender =\n      (this.os2.exists && this.os2.ascender) || this.hhea.ascender;\n    this.decender =\n      (this.os2.exists && this.os2.decender) || this.hhea.decender;\n    this.lineGap = (this.os2.exists && this.os2.lineGap) || this.hhea.lineGap;\n    return (this.bbox = [\n      this.head.xMin,\n      this.head.yMin,\n      this.head.xMax,\n      this.head.yMax\n    ]);\n  };\n  /***************************************************************/\n  /* function : registerTTF                                      */\n  /* comment : Get the value to assign pdf font descriptors.     */\n  /***************************************************************/\n  TTFFont.prototype.registerTTF = function() {\n    var e, hi, low, raw, _ref;\n    this.scaleFactor = 1000.0 / this.head.unitsPerEm;\n    this.bbox = function() {\n      var _i, _len, _ref, _results;\n      _ref = this.bbox;\n      _results = [];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        e = _ref[_i];\n        _results.push(Math.round(e * this.scaleFactor));\n      }\n      return _results;\n    }.call(this);\n    this.stemV = 0;\n    if (this.post.exists) {\n      raw = this.post.italic_angle;\n      hi = raw >> 16;\n      low = raw & 0xff;\n      if ((hi & 0x8000) !== 0) {\n        hi = -((hi ^ 0xffff) + 1);\n      }\n      this.italicAngle = +(\"\" + hi + \".\" + low);\n    } else {\n      this.italicAngle = 0;\n    }\n    this.ascender = Math.round(this.ascender * this.scaleFactor);\n    this.decender = Math.round(this.decender * this.scaleFactor);\n    this.lineGap = Math.round(this.lineGap * this.scaleFactor);\n    this.capHeight = (this.os2.exists && this.os2.capHeight) || this.ascender;\n    this.xHeight = (this.os2.exists && this.os2.xHeight) || 0;\n    this.familyClass = ((this.os2.exists && this.os2.familyClass) || 0) >> 8;\n    this.isSerif =\n      (_ref = this.familyClass) === 1 ||\n      _ref === 2 ||\n      _ref === 3 ||\n      _ref === 4 ||\n      _ref === 5 ||\n      _ref === 7;\n    this.isScript = this.familyClass === 10;\n    this.flags = 0;\n    if (this.post.isFixedPitch) {\n      this.flags |= 1 << 0;\n    }\n    if (this.isSerif) {\n      this.flags |= 1 << 1;\n    }\n    if (this.isScript) {\n      this.flags |= 1 << 3;\n    }\n    if (this.italicAngle !== 0) {\n      this.flags |= 1 << 6;\n    }\n    this.flags |= 1 << 5;\n    if (!this.cmap.unicode) {\n      throw new Error(\"No unicode cmap for font\");\n    }\n  };\n  TTFFont.prototype.characterToGlyph = function(character) {\n    var _ref;\n    return (\n      ((_ref = this.cmap.unicode) != null ? _ref.codeMap[character] : void 0) ||\n      0\n    );\n  };\n  TTFFont.prototype.widthOfGlyph = function(glyph) {\n    var scale;\n    scale = 1000.0 / this.head.unitsPerEm;\n    return this.hmtx.forGlyph(glyph).advance * scale;\n  };\n  TTFFont.prototype.widthOfString = function(string, size, charSpace) {\n    var charCode, i, scale, width, _ref;\n    string = \"\" + string;\n    width = 0;\n    for (\n      i = 0, _ref = string.length;\n      0 <= _ref ? i < _ref : i > _ref;\n      i = 0 <= _ref ? ++i : --i\n    ) {\n      charCode = string.charCodeAt(i);\n      width +=\n        this.widthOfGlyph(this.characterToGlyph(charCode)) +\n          charSpace * (1000 / size) || 0;\n    }\n    scale = size / 1000;\n    return width * scale;\n  };\n  TTFFont.prototype.lineHeight = function(size, includeGap) {\n    var gap;\n    if (includeGap == null) {\n      includeGap = false;\n    }\n    gap = includeGap ? this.lineGap : 0;\n    return ((this.ascender + gap - this.decender) / 1000) * size;\n  };\n  return TTFFont;\n})();\n\n/************************************************************************************************/\n/* function : Data                                                                              */\n/* comment : The ttf data decoded and stored in an array is read and written to the Data object.*/\n/************************************************************************************************/\nvar Data = (function() {\n  function Data(data) {\n    this.data = data != null ? data : [];\n    this.pos = 0;\n    this.length = this.data.length;\n  }\n  Data.prototype.readByte = function() {\n    return this.data[this.pos++];\n  };\n  Data.prototype.writeByte = function(byte) {\n    return (this.data[this.pos++] = byte);\n  };\n  Data.prototype.readUInt32 = function() {\n    var b1, b2, b3, b4;\n    b1 = this.readByte() * 0x1000000;\n    b2 = this.readByte() << 16;\n    b3 = this.readByte() << 8;\n    b4 = this.readByte();\n    return b1 + b2 + b3 + b4;\n  };\n  Data.prototype.writeUInt32 = function(val) {\n    this.writeByte((val >>> 24) & 0xff);\n    this.writeByte((val >> 16) & 0xff);\n    this.writeByte((val >> 8) & 0xff);\n    return this.writeByte(val & 0xff);\n  };\n  Data.prototype.readInt32 = function() {\n    var int;\n    int = this.readUInt32();\n    if (int >= 0x80000000) {\n      return int - 0x100000000;\n    } else {\n      return int;\n    }\n  };\n  Data.prototype.writeInt32 = function(val) {\n    if (val < 0) {\n      val += 0x100000000;\n    }\n    return this.writeUInt32(val);\n  };\n  Data.prototype.readUInt16 = function() {\n    var b1, b2;\n    b1 = this.readByte() << 8;\n    b2 = this.readByte();\n    return b1 | b2;\n  };\n  Data.prototype.writeUInt16 = function(val) {\n    this.writeByte((val >> 8) & 0xff);\n    return this.writeByte(val & 0xff);\n  };\n  Data.prototype.readInt16 = function() {\n    var int;\n    int = this.readUInt16();\n    if (int >= 0x8000) {\n      return int - 0x10000;\n    } else {\n      return int;\n    }\n  };\n  Data.prototype.writeInt16 = function(val) {\n    if (val < 0) {\n      val += 0x10000;\n    }\n    return this.writeUInt16(val);\n  };\n  Data.prototype.readString = function(length) {\n    var i, ret;\n    ret = [];\n    for (\n      i = 0;\n      0 <= length ? i < length : i > length;\n      i = 0 <= length ? ++i : --i\n    ) {\n      ret[i] = String.fromCharCode(this.readByte());\n    }\n    return ret.join(\"\");\n  };\n  Data.prototype.writeString = function(val) {\n    var i, _ref, _results;\n    _results = [];\n    for (\n      i = 0, _ref = val.length;\n      0 <= _ref ? i < _ref : i > _ref;\n      i = 0 <= _ref ? ++i : --i\n    ) {\n      _results.push(this.writeByte(val.charCodeAt(i)));\n    }\n    return _results;\n  };\n  /*Data.prototype.stringAt = function (pos, length) {\n            this.pos = pos;\n            return this.readString(length);\n        };*/\n  Data.prototype.readShort = function() {\n    return this.readInt16();\n  };\n  Data.prototype.writeShort = function(val) {\n    return this.writeInt16(val);\n  };\n  Data.prototype.readLongLong = function() {\n    var b1, b2, b3, b4, b5, b6, b7, b8;\n    b1 = this.readByte();\n    b2 = this.readByte();\n    b3 = this.readByte();\n    b4 = this.readByte();\n    b5 = this.readByte();\n    b6 = this.readByte();\n    b7 = this.readByte();\n    b8 = this.readByte();\n    if (b1 & 0x80) {\n      return (\n        ((b1 ^ 0xff) * 0x100000000000000 +\n          (b2 ^ 0xff) * 0x1000000000000 +\n          (b3 ^ 0xff) * 0x10000000000 +\n          (b4 ^ 0xff) * 0x100000000 +\n          (b5 ^ 0xff) * 0x1000000 +\n          (b6 ^ 0xff) * 0x10000 +\n          (b7 ^ 0xff) * 0x100 +\n          (b8 ^ 0xff) +\n          1) *\n        -1\n      );\n    }\n    return (\n      b1 * 0x100000000000000 +\n      b2 * 0x1000000000000 +\n      b3 * 0x10000000000 +\n      b4 * 0x100000000 +\n      b5 * 0x1000000 +\n      b6 * 0x10000 +\n      b7 * 0x100 +\n      b8\n    );\n  };\n  Data.prototype.writeLongLong = function(val) {\n    var high, low;\n    high = Math.floor(val / 0x100000000);\n    low = val & 0xffffffff;\n    this.writeByte((high >> 24) & 0xff);\n    this.writeByte((high >> 16) & 0xff);\n    this.writeByte((high >> 8) & 0xff);\n    this.writeByte(high & 0xff);\n    this.writeByte((low >> 24) & 0xff);\n    this.writeByte((low >> 16) & 0xff);\n    this.writeByte((low >> 8) & 0xff);\n    return this.writeByte(low & 0xff);\n  };\n  Data.prototype.readInt = function() {\n    return this.readInt32();\n  };\n  Data.prototype.writeInt = function(val) {\n    return this.writeInt32(val);\n  };\n  /*Data.prototype.slice = function (start, end) {\n            return this.data.slice(start, end);\n        };*/\n  Data.prototype.read = function(bytes) {\n    var buf, i;\n    buf = [];\n    for (\n      i = 0;\n      0 <= bytes ? i < bytes : i > bytes;\n      i = 0 <= bytes ? ++i : --i\n    ) {\n      buf.push(this.readByte());\n    }\n    return buf;\n  };\n  Data.prototype.write = function(bytes) {\n    var byte, i, _len, _results;\n    _results = [];\n    for (i = 0, _len = bytes.length; i < _len; i++) {\n      byte = bytes[i];\n      _results.push(this.writeByte(byte));\n    }\n    return _results;\n  };\n  return Data;\n})();\n\nvar Directory = (function() {\n  var checksum;\n\n  /*****************************************************************************************************/\n  /* function : Directory generator                                                                    */\n  /* comment : Initialize the offset, tag, length, and checksum for each table for the font to be used.*/\n  /*****************************************************************************************************/\n  function Directory(data) {\n    var entry, i, _ref;\n    this.scalarType = data.readInt();\n    this.tableCount = data.readShort();\n    this.searchRange = data.readShort();\n    this.entrySelector = data.readShort();\n    this.rangeShift = data.readShort();\n    this.tables = {};\n    for (\n      i = 0, _ref = this.tableCount;\n      0 <= _ref ? i < _ref : i > _ref;\n      i = 0 <= _ref ? ++i : --i\n    ) {\n      entry = {\n        tag: data.readString(4),\n        checksum: data.readInt(),\n        offset: data.readInt(),\n        length: data.readInt()\n      };\n      this.tables[entry.tag] = entry;\n    }\n  }\n  /********************************************************************************************************/\n  /* function : encode                                                                                    */\n  /* comment : It encodes and stores the font table object and information used for the directory object. */\n  /********************************************************************************************************/\n  Directory.prototype.encode = function(tables) {\n    var adjustment,\n      directory,\n      directoryLength,\n      entrySelector,\n      headOffset,\n      log2,\n      offset,\n      rangeShift,\n      searchRange,\n      sum,\n      table,\n      tableCount,\n      tableData,\n      tag;\n    tableCount = Object.keys(tables).length;\n    log2 = Math.log(2);\n    searchRange = Math.floor(Math.log(tableCount) / log2) * 16;\n    entrySelector = Math.floor(searchRange / log2);\n    rangeShift = tableCount * 16 - searchRange;\n    directory = new Data();\n    directory.writeInt(this.scalarType);\n    directory.writeShort(tableCount);\n    directory.writeShort(searchRange);\n    directory.writeShort(entrySelector);\n    directory.writeShort(rangeShift);\n    directoryLength = tableCount * 16;\n    offset = directory.pos + directoryLength;\n    headOffset = null;\n    tableData = [];\n    for (tag in tables) {\n      table = tables[tag];\n      directory.writeString(tag);\n      directory.writeInt(checksum(table));\n      directory.writeInt(offset);\n      directory.writeInt(table.length);\n      tableData = tableData.concat(table);\n      if (tag === \"head\") {\n        headOffset = offset;\n      }\n      offset += table.length;\n      while (offset % 4) {\n        tableData.push(0);\n        offset++;\n      }\n    }\n    directory.write(tableData);\n    sum = checksum(directory.data);\n    adjustment = 0xb1b0afba - sum;\n    directory.pos = headOffset + 8;\n    directory.writeUInt32(adjustment);\n    return directory.data;\n  };\n  /***************************************************************/\n  /* function : checksum                                         */\n  /* comment : Duplicate the table for the tag.                  */\n  /***************************************************************/\n  checksum = function(data) {\n    var i, sum, tmp, _ref;\n    data = __slice.call(data);\n    while (data.length % 4) {\n      data.push(0);\n    }\n    tmp = new Data(data);\n    sum = 0;\n    for (i = 0, _ref = data.length; i < _ref; i = i += 4) {\n      sum += tmp.readUInt32();\n    }\n    return sum & 0xffffffff;\n  };\n  return Directory;\n})();\n\nvar Table,\n  __hasProp = {}.hasOwnProperty,\n  __extends = function(child, parent) {\n    for (var key in parent) {\n      if (__hasProp.call(parent, key)) child[key] = parent[key];\n    }\n\n    function ctor() {\n      this.constructor = child;\n    }\n    ctor.prototype = parent.prototype;\n    child.prototype = new ctor();\n    child.__super__ = parent.prototype;\n    return child;\n  };\n\n/***************************************************************/\n/* function : Table                                            */\n/* comment : Save info for each table, and parse the table.    */\n/***************************************************************/\nTable = (function() {\n  function Table(file) {\n    var info;\n    this.file = file;\n    info = this.file.directory.tables[this.tag];\n    this.exists = !!info;\n    if (info) {\n      (this.offset = info.offset), (this.length = info.length);\n      this.parse(this.file.contents);\n    }\n  }\n  Table.prototype.parse = function() {};\n  Table.prototype.encode = function() {};\n  Table.prototype.raw = function() {\n    if (!this.exists) {\n      return null;\n    }\n    this.file.contents.pos = this.offset;\n    return this.file.contents.read(this.length);\n  };\n  return Table;\n})();\n\nvar HeadTable = (function(_super) {\n  __extends(HeadTable, _super);\n\n  function HeadTable() {\n    return HeadTable.__super__.constructor.apply(this, arguments);\n  }\n  HeadTable.prototype.tag = \"head\";\n  HeadTable.prototype.parse = function(data) {\n    data.pos = this.offset;\n    this.version = data.readInt();\n    this.revision = data.readInt();\n    this.checkSumAdjustment = data.readInt();\n    this.magicNumber = data.readInt();\n    this.flags = data.readShort();\n    this.unitsPerEm = data.readShort();\n    this.created = data.readLongLong();\n    this.modified = data.readLongLong();\n    this.xMin = data.readShort();\n    this.yMin = data.readShort();\n    this.xMax = data.readShort();\n    this.yMax = data.readShort();\n    this.macStyle = data.readShort();\n    this.lowestRecPPEM = data.readShort();\n    this.fontDirectionHint = data.readShort();\n    this.indexToLocFormat = data.readShort();\n    return (this.glyphDataFormat = data.readShort());\n  };\n  HeadTable.prototype.encode = function(indexToLocFormat) {\n    var table;\n    table = new Data();\n    table.writeInt(this.version);\n    table.writeInt(this.revision);\n    table.writeInt(this.checkSumAdjustment);\n    table.writeInt(this.magicNumber);\n    table.writeShort(this.flags);\n    table.writeShort(this.unitsPerEm);\n    table.writeLongLong(this.created);\n    table.writeLongLong(this.modified);\n    table.writeShort(this.xMin);\n    table.writeShort(this.yMin);\n    table.writeShort(this.xMax);\n    table.writeShort(this.yMax);\n    table.writeShort(this.macStyle);\n    table.writeShort(this.lowestRecPPEM);\n    table.writeShort(this.fontDirectionHint);\n    table.writeShort(indexToLocFormat);\n    table.writeShort(this.glyphDataFormat);\n    return table.data;\n  };\n  return HeadTable;\n})(Table);\n\n/************************************************************************************/\n/* function : CmapEntry                                                             */\n/* comment : Cmap Initializes and encodes object information (required by pdf spec).*/\n/************************************************************************************/\nvar CmapEntry = (function() {\n  function CmapEntry(data, offset) {\n    var code,\n      count,\n      endCode,\n      glyphId,\n      glyphIds,\n      i,\n      idDelta,\n      idRangeOffset,\n      index,\n      saveOffset,\n      segCount,\n      segCountX2,\n      start,\n      startCode,\n      tail,\n      _j,\n      _k,\n      _len;\n    this.platformID = data.readUInt16();\n    this.encodingID = data.readShort();\n    this.offset = offset + data.readInt();\n    saveOffset = data.pos;\n    data.pos = this.offset;\n    this.format = data.readUInt16();\n    this.length = data.readUInt16();\n    this.language = data.readUInt16();\n    this.isUnicode =\n      (this.platformID === 3 && this.encodingID === 1 && this.format === 4) ||\n      (this.platformID === 0 && this.format === 4);\n    this.codeMap = {};\n    switch (this.format) {\n      case 0:\n        for (i = 0; i < 256; ++i) {\n          this.codeMap[i] = data.readByte();\n        }\n        break;\n      case 4:\n        segCountX2 = data.readUInt16();\n        segCount = segCountX2 / 2;\n        data.pos += 6;\n        endCode = (function() {\n          var _j, _results;\n          _results = [];\n          for (\n            i = _j = 0;\n            0 <= segCount ? _j < segCount : _j > segCount;\n            i = 0 <= segCount ? ++_j : --_j\n          ) {\n            _results.push(data.readUInt16());\n          }\n          return _results;\n        })();\n        data.pos += 2;\n        startCode = (function() {\n          var _j, _results;\n          _results = [];\n          for (\n            i = _j = 0;\n            0 <= segCount ? _j < segCount : _j > segCount;\n            i = 0 <= segCount ? ++_j : --_j\n          ) {\n            _results.push(data.readUInt16());\n          }\n          return _results;\n        })();\n        idDelta = (function() {\n          var _j, _results;\n          _results = [];\n          for (\n            i = _j = 0;\n            0 <= segCount ? _j < segCount : _j > segCount;\n            i = 0 <= segCount ? ++_j : --_j\n          ) {\n            _results.push(data.readUInt16());\n          }\n          return _results;\n        })();\n        idRangeOffset = (function() {\n          var _j, _results;\n          _results = [];\n          for (\n            i = _j = 0;\n            0 <= segCount ? _j < segCount : _j > segCount;\n            i = 0 <= segCount ? ++_j : --_j\n          ) {\n            _results.push(data.readUInt16());\n          }\n          return _results;\n        })();\n        count = (this.length - data.pos + this.offset) / 2;\n        glyphIds = (function() {\n          var _j, _results;\n          _results = [];\n          for (\n            i = _j = 0;\n            0 <= count ? _j < count : _j > count;\n            i = 0 <= count ? ++_j : --_j\n          ) {\n            _results.push(data.readUInt16());\n          }\n          return _results;\n        })();\n        for (i = _j = 0, _len = endCode.length; _j < _len; i = ++_j) {\n          tail = endCode[i];\n          start = startCode[i];\n          for (\n            code = _k = start;\n            start <= tail ? _k <= tail : _k >= tail;\n            code = start <= tail ? ++_k : --_k\n          ) {\n            if (idRangeOffset[i] === 0) {\n              glyphId = code + idDelta[i];\n            } else {\n              index = idRangeOffset[i] / 2 + (code - start) - (segCount - i);\n              glyphId = glyphIds[index] || 0;\n              if (glyphId !== 0) {\n                glyphId += idDelta[i];\n              }\n            }\n            this.codeMap[code] = glyphId & 0xffff;\n          }\n        }\n    }\n    data.pos = saveOffset;\n  }\n  CmapEntry.encode = function(charmap, encoding) {\n    var charMap,\n      code,\n      codeMap,\n      codes,\n      delta,\n      deltas,\n      diff,\n      endCode,\n      endCodes,\n      entrySelector,\n      glyphIDs,\n      i,\n      id,\n      indexes,\n      last,\n      map,\n      nextID,\n      offset,\n      old,\n      rangeOffsets,\n      rangeShift,\n      searchRange,\n      segCount,\n      segCountX2,\n      startCode,\n      startCodes,\n      startGlyph,\n      subtable,\n      _i,\n      _j,\n      _k,\n      _l,\n      _len,\n      _len1,\n      _len2,\n      _len3,\n      _len4,\n      _len5,\n      _len6,\n      _len7,\n      _m,\n      _n,\n      _name,\n      _o,\n      _p,\n      _q;\n    subtable = new Data();\n    codes = Object.keys(charmap).sort(function(a, b) {\n      return a - b;\n    });\n    switch (encoding) {\n      case \"macroman\":\n        id = 0;\n        indexes = (function() {\n          var _results = [];\n          for (i = 0; i < 256; ++i) {\n            _results.push(0);\n          }\n          return _results;\n        })();\n        map = {\n          0: 0\n        };\n        codeMap = {};\n        for (_i = 0, _len = codes.length; _i < _len; _i++) {\n          code = codes[_i];\n          if (map[(_name = charmap[code])] == null) {\n            map[_name] = ++id;\n          }\n          codeMap[code] = {\n            old: charmap[code],\n            new: map[charmap[code]]\n          };\n          indexes[code] = map[charmap[code]];\n        }\n        subtable.writeUInt16(1);\n        subtable.writeUInt16(0);\n        subtable.writeUInt32(12);\n        subtable.writeUInt16(0);\n        subtable.writeUInt16(262);\n        subtable.writeUInt16(0);\n        subtable.write(indexes);\n        return {\n          charMap: codeMap,\n          subtable: subtable.data,\n          maxGlyphID: id + 1\n        };\n      case \"unicode\":\n        startCodes = [];\n        endCodes = [];\n        nextID = 0;\n        map = {};\n        charMap = {};\n        last = diff = null;\n        for (_j = 0, _len1 = codes.length; _j < _len1; _j++) {\n          code = codes[_j];\n          old = charmap[code];\n          if (map[old] == null) {\n            map[old] = ++nextID;\n          }\n          charMap[code] = {\n            old: old,\n            new: map[old]\n          };\n          delta = map[old] - code;\n          if (last == null || delta !== diff) {\n            if (last) {\n              endCodes.push(last);\n            }\n            startCodes.push(code);\n            diff = delta;\n          }\n          last = code;\n        }\n        if (last) {\n          endCodes.push(last);\n        }\n        endCodes.push(0xffff);\n        startCodes.push(0xffff);\n        segCount = startCodes.length;\n        segCountX2 = segCount * 2;\n        searchRange = 2 * Math.pow(Math.log(segCount) / Math.LN2, 2);\n        entrySelector = Math.log(searchRange / 2) / Math.LN2;\n        rangeShift = 2 * segCount - searchRange;\n        deltas = [];\n        rangeOffsets = [];\n        glyphIDs = [];\n        for (i = _k = 0, _len2 = startCodes.length; _k < _len2; i = ++_k) {\n          startCode = startCodes[i];\n          endCode = endCodes[i];\n          if (startCode === 0xffff) {\n            deltas.push(0);\n            rangeOffsets.push(0);\n            break;\n          }\n          startGlyph = charMap[startCode][\"new\"];\n          if (startCode - startGlyph >= 0x8000) {\n            deltas.push(0);\n            rangeOffsets.push(2 * (glyphIDs.length + segCount - i));\n            for (\n              code = _l = startCode;\n              startCode <= endCode ? _l <= endCode : _l >= endCode;\n              code = startCode <= endCode ? ++_l : --_l\n            ) {\n              glyphIDs.push(charMap[code][\"new\"]);\n            }\n          } else {\n            deltas.push(startGlyph - startCode);\n            rangeOffsets.push(0);\n          }\n        }\n        subtable.writeUInt16(3);\n        subtable.writeUInt16(1);\n        subtable.writeUInt32(12);\n        subtable.writeUInt16(4);\n        subtable.writeUInt16(16 + segCount * 8 + glyphIDs.length * 2);\n        subtable.writeUInt16(0);\n        subtable.writeUInt16(segCountX2);\n        subtable.writeUInt16(searchRange);\n        subtable.writeUInt16(entrySelector);\n        subtable.writeUInt16(rangeShift);\n        for (_m = 0, _len3 = endCodes.length; _m < _len3; _m++) {\n          code = endCodes[_m];\n          subtable.writeUInt16(code);\n        }\n        subtable.writeUInt16(0);\n        for (_n = 0, _len4 = startCodes.length; _n < _len4; _n++) {\n          code = startCodes[_n];\n          subtable.writeUInt16(code);\n        }\n        for (_o = 0, _len5 = deltas.length; _o < _len5; _o++) {\n          delta = deltas[_o];\n          subtable.writeUInt16(delta);\n        }\n        for (_p = 0, _len6 = rangeOffsets.length; _p < _len6; _p++) {\n          offset = rangeOffsets[_p];\n          subtable.writeUInt16(offset);\n        }\n        for (_q = 0, _len7 = glyphIDs.length; _q < _len7; _q++) {\n          id = glyphIDs[_q];\n          subtable.writeUInt16(id);\n        }\n        return {\n          charMap: charMap,\n          subtable: subtable.data,\n          maxGlyphID: nextID + 1\n        };\n    }\n  };\n  return CmapEntry;\n})();\n\nvar CmapTable = (function(_super) {\n  __extends(CmapTable, _super);\n\n  function CmapTable() {\n    return CmapTable.__super__.constructor.apply(this, arguments);\n  }\n  CmapTable.prototype.tag = \"cmap\";\n  CmapTable.prototype.parse = function(data) {\n    var entry, i, tableCount;\n    data.pos = this.offset;\n    this.version = data.readUInt16();\n    tableCount = data.readUInt16();\n    this.tables = [];\n    this.unicode = null;\n    for (\n      i = 0;\n      0 <= tableCount ? i < tableCount : i > tableCount;\n      i = 0 <= tableCount ? ++i : --i\n    ) {\n      entry = new CmapEntry(data, this.offset);\n      this.tables.push(entry);\n      if (entry.isUnicode) {\n        if (this.unicode == null) {\n          this.unicode = entry;\n        }\n      }\n    }\n    return true;\n  };\n  /*************************************************************************/\n  /* function : encode                                                     */\n  /* comment : Encode the cmap table corresponding to the input character. */\n  /*************************************************************************/\n  CmapTable.encode = function(charmap, encoding) {\n    var result, table;\n    if (encoding == null) {\n      encoding = \"macroman\";\n    }\n    result = CmapEntry.encode(charmap, encoding);\n    table = new Data();\n    table.writeUInt16(0);\n    table.writeUInt16(1);\n    result.table = table.data.concat(result.subtable);\n    return result;\n  };\n  return CmapTable;\n})(Table);\n\nvar HheaTable = (function(_super) {\n  __extends(HheaTable, _super);\n\n  function HheaTable() {\n    return HheaTable.__super__.constructor.apply(this, arguments);\n  }\n  HheaTable.prototype.tag = \"hhea\";\n  HheaTable.prototype.parse = function(data) {\n    data.pos = this.offset;\n    this.version = data.readInt();\n    this.ascender = data.readShort();\n    this.decender = data.readShort();\n    this.lineGap = data.readShort();\n    this.advanceWidthMax = data.readShort();\n    this.minLeftSideBearing = data.readShort();\n    this.minRightSideBearing = data.readShort();\n    this.xMaxExtent = data.readShort();\n    this.caretSlopeRise = data.readShort();\n    this.caretSlopeRun = data.readShort();\n    this.caretOffset = data.readShort();\n    data.pos += 4 * 2;\n    this.metricDataFormat = data.readShort();\n    return (this.numberOfMetrics = data.readUInt16());\n  };\n  /*HheaTable.prototype.encode = function (ids) {\n            var i, table, _i, _ref;\n            table = new Data;\n            table.writeInt(this.version);\n            table.writeShort(this.ascender);\n            table.writeShort(this.decender);\n            table.writeShort(this.lineGap);\n            table.writeShort(this.advanceWidthMax);\n            table.writeShort(this.minLeftSideBearing);\n            table.writeShort(this.minRightSideBearing);\n            table.writeShort(this.xMaxExtent);\n            table.writeShort(this.caretSlopeRise);\n            table.writeShort(this.caretSlopeRun);\n            table.writeShort(this.caretOffset);\n            for (i = _i = 0, _ref = 4 * 2; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n                table.writeByte(0);\n            }\n            table.writeShort(this.metricDataFormat);\n            table.writeUInt16(ids.length);\n            return table.data;\n        };*/\n  return HheaTable;\n})(Table);\n\nvar OS2Table = (function(_super) {\n  __extends(OS2Table, _super);\n\n  function OS2Table() {\n    return OS2Table.__super__.constructor.apply(this, arguments);\n  }\n  OS2Table.prototype.tag = \"OS/2\";\n  OS2Table.prototype.parse = function(data) {\n    data.pos = this.offset;\n    this.version = data.readUInt16();\n    this.averageCharWidth = data.readShort();\n    this.weightClass = data.readUInt16();\n    this.widthClass = data.readUInt16();\n    this.type = data.readShort();\n    this.ySubscriptXSize = data.readShort();\n    this.ySubscriptYSize = data.readShort();\n    this.ySubscriptXOffset = data.readShort();\n    this.ySubscriptYOffset = data.readShort();\n    this.ySuperscriptXSize = data.readShort();\n    this.ySuperscriptYSize = data.readShort();\n    this.ySuperscriptXOffset = data.readShort();\n    this.ySuperscriptYOffset = data.readShort();\n    this.yStrikeoutSize = data.readShort();\n    this.yStrikeoutPosition = data.readShort();\n    this.familyClass = data.readShort();\n    this.panose = (function() {\n      var i, _results;\n      _results = [];\n      for (i = 0; i < 10; ++i) {\n        _results.push(data.readByte());\n      }\n      return _results;\n    })();\n    this.charRange = (function() {\n      var i, _results;\n      _results = [];\n      for (i = 0; i < 4; ++i) {\n        _results.push(data.readInt());\n      }\n      return _results;\n    })();\n    this.vendorID = data.readString(4);\n    this.selection = data.readShort();\n    this.firstCharIndex = data.readShort();\n    this.lastCharIndex = data.readShort();\n    if (this.version > 0) {\n      this.ascent = data.readShort();\n      this.descent = data.readShort();\n      this.lineGap = data.readShort();\n      this.winAscent = data.readShort();\n      this.winDescent = data.readShort();\n      this.codePageRange = (function() {\n        var i, _results;\n        _results = [];\n        for (i = 0; i < 2; i = ++i) {\n          _results.push(data.readInt());\n        }\n        return _results;\n      })();\n      if (this.version > 1) {\n        this.xHeight = data.readShort();\n        this.capHeight = data.readShort();\n        this.defaultChar = data.readShort();\n        this.breakChar = data.readShort();\n        return (this.maxContext = data.readShort());\n      }\n    }\n  };\n  /*OS2Table.prototype.encode = function () {\n            return this.raw();\n        };*/\n  return OS2Table;\n})(Table);\n\nvar PostTable = (function(_super) {\n  var POSTSCRIPT_GLYPHS;\n  __extends(PostTable, _super);\n\n  function PostTable() {\n    return PostTable.__super__.constructor.apply(this, arguments);\n  }\n  PostTable.prototype.tag = \"post\";\n  PostTable.prototype.parse = function(data) {\n    var length, numberOfGlyphs, _results;\n    data.pos = this.offset;\n    this.format = data.readInt();\n    this.italicAngle = data.readInt();\n    this.underlinePosition = data.readShort();\n    this.underlineThickness = data.readShort();\n    this.isFixedPitch = data.readInt();\n    this.minMemType42 = data.readInt();\n    this.maxMemType42 = data.readInt();\n    this.minMemType1 = data.readInt();\n    this.maxMemType1 = data.readInt();\n    switch (this.format) {\n      case 0x00010000:\n        break;\n      case 0x00020000:\n        numberOfGlyphs = data.readUInt16();\n        this.glyphNameIndex = [];\n        var i;\n        for (\n          i = 0;\n          0 <= numberOfGlyphs ? i < numberOfGlyphs : i > numberOfGlyphs;\n          i = 0 <= numberOfGlyphs ? ++i : --i\n        ) {\n          this.glyphNameIndex.push(data.readUInt16());\n        }\n        this.names = [];\n        _results = [];\n        while (data.pos < this.offset + this.length) {\n          length = data.readByte();\n          _results.push(this.names.push(data.readString(length)));\n        }\n        return _results;\n      case 0x00025000:\n        numberOfGlyphs = data.readUInt16();\n        return (this.offsets = data.read(numberOfGlyphs));\n      case 0x00030000:\n        break;\n      case 0x00040000:\n        return (this.map = function() {\n          var _j, _ref, _results1;\n          _results1 = [];\n          for (\n            i = _j = 0, _ref = this.file.maxp.numGlyphs;\n            0 <= _ref ? _j < _ref : _j > _ref;\n            i = 0 <= _ref ? ++_j : --_j\n          ) {\n            _results1.push(data.readUInt32());\n          }\n          return _results1;\n        }.call(this));\n    }\n  };\n  /*PostTable.prototype.glyphFor = function (code) {\n            var index;\n            switch (this.format) {\n            case 0x00010000:\n                return POSTSCRIPT_GLYPHS[code] || '.notdef';\n            case 0x00020000:\n                index = this.glyphNameIndex[code];\n                if (index <= 257) {\n                    return POSTSCRIPT_GLYPHS[index];\n                }\n                else {\n                    return this.names[index - 258] || '.notdef';\n                }\n                break;\n            case 0x00025000:\n                return POSTSCRIPT_GLYPHS[code + this.offsets[code]] || '.notdef';\n            case 0x00030000:\n                return '.notdef';\n            case 0x00040000:\n                return this.map[code] || 0xFFFF;\n            }\n        };*/\n  /*PostTable.prototype.encode = function (mapping) {\n            var id, index, indexes, position, post, raw, string, strings, table, _i, _j, _k, _len, _len1, _len2;\n            if (!this.exists) {\n                return null;\n            }\n            raw = this.raw();\n            if (this.format === 0x00030000) {\n                return raw;\n            }\n            table = new Data(raw.slice(0, 32));\n            table.writeUInt32(0x00020000);\n            table.pos = 32;\n            indexes = [];\n            strings = [];\n            for (_i = 0, _len = mapping.length; _i < _len; _i++) {\n                id = mapping[_i];\n                post = this.glyphFor(id);\n                position = POSTSCRIPT_GLYPHS.indexOf(post);\n                if (position !== -1) {\n                    indexes.push(position);\n                }\n                else {\n                    indexes.push(257 + strings.length);\n                    strings.push(post);\n                }\n            }\n            table.writeUInt16(Object.keys(mapping).length);\n            for (_j = 0, _len1 = indexes.length; _j < _len1; _j++) {\n                index = indexes[_j];\n                table.writeUInt16(index);\n            }\n            for (_k = 0, _len2 = strings.length; _k < _len2; _k++) {\n                string = strings[_k];\n                table.writeByte(string.length);\n                table.writeString(string);\n            }\n            return table.data;\n        };*/\n  POSTSCRIPT_GLYPHS = \".notdef .null nonmarkingreturn space exclam quotedbl numbersign dollar percent\\nampersand quotesingle parenleft parenright asterisk plus comma hyphen period slash\\nzero one two three four five six seven eight nine colon semicolon less equal greater\\nquestion 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\\nbracketleft backslash bracketright asciicircum underscore grave\\na 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\\nbraceleft bar braceright asciitilde Adieresis Aring Ccedilla Eacute Ntilde Odieresis\\nUdieresis aacute agrave acircumflex adieresis atilde aring ccedilla eacute egrave\\necircumflex edieresis iacute igrave icircumflex idieresis ntilde oacute ograve\\nocircumflex odieresis otilde uacute ugrave ucircumflex udieresis dagger degree cent\\nsterling section bullet paragraph germandbls registered copyright trademark acute\\ndieresis notequal AE Oslash infinity plusminus lessequal greaterequal yen mu\\npartialdiff summation product pi integral ordfeminine ordmasculine Omega ae oslash\\nquestiondown exclamdown logicalnot radical florin approxequal Delta guillemotleft\\nguillemotright ellipsis nonbreakingspace Agrave Atilde Otilde OE oe endash emdash\\nquotedblleft quotedblright quoteleft quoteright divide lozenge ydieresis Ydieresis\\nfraction currency guilsinglleft guilsinglright fi fl daggerdbl periodcentered\\nquotesinglbase quotedblbase perthousand Acircumflex Ecircumflex Aacute Edieresis\\nEgrave Iacute Icircumflex Idieresis Igrave Oacute Ocircumflex apple Ograve Uacute\\nUcircumflex Ugrave dotlessi circumflex tilde macron breve dotaccent ring cedilla\\nhungarumlaut ogonek caron Lslash lslash Scaron scaron Zcaron zcaron brokenbar Eth\\neth Yacute yacute Thorn thorn minus multiply onesuperior twosuperior threesuperior\\nonehalf onequarter threequarters franc Gbreve gbreve Idotaccent Scedilla scedilla\\nCacute cacute Ccaron ccaron dcroat\".split(\n    /\\s+/g\n  );\n  return PostTable;\n})(Table);\n\n/*********************************************************************************************************/\n/* function : NameEntry                                                                                  */\n/* comment : Store copyright information, platformID, encodingID, and languageID in the NameEntry object.*/\n/*********************************************************************************************************/\nvar NameEntry = (function() {\n  function NameEntry(raw, entry) {\n    this.raw = raw;\n    this.length = raw.length;\n    this.platformID = entry.platformID;\n    this.encodingID = entry.encodingID;\n    this.languageID = entry.languageID;\n  }\n  return NameEntry;\n})();\n\nvar NameTable = (function(_super) {\n  var subsetTag;\n  __extends(NameTable, _super);\n\n  function NameTable() {\n    return NameTable.__super__.constructor.apply(this, arguments);\n  }\n  NameTable.prototype.tag = \"name\";\n  NameTable.prototype.parse = function(data) {\n    var count,\n      entries,\n      entry,\n      i,\n      name,\n      stringOffset,\n      strings,\n      text,\n      _j,\n      _len,\n      _name;\n    data.pos = this.offset;\n    data.readShort(); //format\n    count = data.readShort();\n    stringOffset = data.readShort();\n    entries = [];\n    for (\n      i = 0;\n      0 <= count ? i < count : i > count;\n      i = 0 <= count ? ++i : --i\n    ) {\n      entries.push({\n        platformID: data.readShort(),\n        encodingID: data.readShort(),\n        languageID: data.readShort(),\n        nameID: data.readShort(),\n        length: data.readShort(),\n        offset: this.offset + stringOffset + data.readShort()\n      });\n    }\n    strings = {};\n    for (i = _j = 0, _len = entries.length; _j < _len; i = ++_j) {\n      entry = entries[i];\n      data.pos = entry.offset;\n      text = data.readString(entry.length);\n      name = new NameEntry(text, entry);\n      if (strings[(_name = entry.nameID)] == null) {\n        strings[_name] = [];\n      }\n      strings[entry.nameID].push(name);\n    }\n    this.strings = strings;\n    this.copyright = strings[0];\n    this.fontFamily = strings[1];\n    this.fontSubfamily = strings[2];\n    this.uniqueSubfamily = strings[3];\n    this.fontName = strings[4];\n    this.version = strings[5];\n    try {\n      this.postscriptName = strings[6][0].raw.replace(\n        /[\\x00-\\x19\\x80-\\xff]/g,\n        \"\"\n      );\n    } catch (e) {\n      this.postscriptName = strings[4][0].raw.replace(\n        /[\\x00-\\x19\\x80-\\xff]/g,\n        \"\"\n      );\n    }\n    this.trademark = strings[7];\n    this.manufacturer = strings[8];\n    this.designer = strings[9];\n    this.description = strings[10];\n    this.vendorUrl = strings[11];\n    this.designerUrl = strings[12];\n    this.license = strings[13];\n    this.licenseUrl = strings[14];\n    this.preferredFamily = strings[15];\n    this.preferredSubfamily = strings[17];\n    this.compatibleFull = strings[18];\n    return (this.sampleText = strings[19]);\n  };\n  subsetTag = \"AAAAAA\";\n  /*NameTable.prototype.encode = function () {\n            var id, list, nameID, nameTable, postscriptName, strCount, strTable, string, strings, table, val, _i, _len, _ref;\n            strings = {};\n            _ref = this.strings;\n            for (id in _ref) {\n                val = _ref[id];\n                strings[id] = val;\n            }\n            postscriptName = new NameEntry(\"\" + subsetTag + \"+\" + this.postscriptName, {\n                platformID: 1\n                , encodingID: 0\n                , languageID: 0\n            });\n            strings[6] = [postscriptName];\n            subsetTag = successorOf(subsetTag);\n            strCount = 0;\n            for (id in strings) {\n                list = strings[id];\n                if (list != null) {\n                    strCount += list.length;\n                }\n            }\n            table = new Data;\n            strTable = new Data;\n            table.writeShort(0);\n            table.writeShort(strCount);\n            table.writeShort(6 + 12 * strCount);\n            for (nameID in strings) {\n                list = strings[nameID];\n                if (list != null) {\n                    for (_i = 0, _len = list.length; _i < _len; _i++) {\n                        string = list[_i];\n                        table.writeShort(string.platformID);\n                        table.writeShort(string.encodingID);\n                        table.writeShort(string.languageID);\n                        table.writeShort(nameID);\n                        table.writeShort(string.length);\n                        table.writeShort(strTable.pos);\n                        strTable.writeString(string.raw);\n                    }\n                }\n            }\n            return nameTable = {\n                postscriptName: postscriptName.raw\n                , table: table.data.concat(strTable.data)\n            };\n        };*/\n  return NameTable;\n})(Table);\n\nvar MaxpTable = (function(_super) {\n  __extends(MaxpTable, _super);\n\n  function MaxpTable() {\n    return MaxpTable.__super__.constructor.apply(this, arguments);\n  }\n  MaxpTable.prototype.tag = \"maxp\";\n  MaxpTable.prototype.parse = function(data) {\n    data.pos = this.offset;\n    this.version = data.readInt();\n    this.numGlyphs = data.readUInt16();\n    this.maxPoints = data.readUInt16();\n    this.maxContours = data.readUInt16();\n    this.maxCompositePoints = data.readUInt16();\n    this.maxComponentContours = data.readUInt16();\n    this.maxZones = data.readUInt16();\n    this.maxTwilightPoints = data.readUInt16();\n    this.maxStorage = data.readUInt16();\n    this.maxFunctionDefs = data.readUInt16();\n    this.maxInstructionDefs = data.readUInt16();\n    this.maxStackElements = data.readUInt16();\n    this.maxSizeOfInstructions = data.readUInt16();\n    this.maxComponentElements = data.readUInt16();\n    return (this.maxComponentDepth = data.readUInt16());\n  };\n  /*MaxpTable.prototype.encode = function (ids) {\n            var table;\n            table = new Data;\n            table.writeInt(this.version);\n            table.writeUInt16(ids.length);\n            table.writeUInt16(this.maxPoints);\n            table.writeUInt16(this.maxContours);\n            table.writeUInt16(this.maxCompositePoints);\n            table.writeUInt16(this.maxComponentContours);\n            table.writeUInt16(this.maxZones);\n            table.writeUInt16(this.maxTwilightPoints);\n            table.writeUInt16(this.maxStorage);\n            table.writeUInt16(this.maxFunctionDefs);\n            table.writeUInt16(this.maxInstructionDefs);\n            table.writeUInt16(this.maxStackElements);\n            table.writeUInt16(this.maxSizeOfInstructions);\n            table.writeUInt16(this.maxComponentElements);\n            table.writeUInt16(this.maxComponentDepth);\n            return table.data;\n        };*/\n  return MaxpTable;\n})(Table);\n\nvar HmtxTable = (function(_super) {\n  __extends(HmtxTable, _super);\n\n  function HmtxTable() {\n    return HmtxTable.__super__.constructor.apply(this, arguments);\n  }\n  HmtxTable.prototype.tag = \"hmtx\";\n  HmtxTable.prototype.parse = function(data) {\n    var i, last, lsbCount, m, _j, _ref, _results;\n    data.pos = this.offset;\n    this.metrics = [];\n    for (\n      i = 0, _ref = this.file.hhea.numberOfMetrics;\n      0 <= _ref ? i < _ref : i > _ref;\n      i = 0 <= _ref ? ++i : --i\n    ) {\n      this.metrics.push({\n        advance: data.readUInt16(),\n        lsb: data.readInt16()\n      });\n    }\n    lsbCount = this.file.maxp.numGlyphs - this.file.hhea.numberOfMetrics;\n    this.leftSideBearings = (function() {\n      var _j, _results;\n      _results = [];\n      for (\n        i = _j = 0;\n        0 <= lsbCount ? _j < lsbCount : _j > lsbCount;\n        i = 0 <= lsbCount ? ++_j : --_j\n      ) {\n        _results.push(data.readInt16());\n      }\n      return _results;\n    })();\n    this.widths = function() {\n      var _j, _len, _ref1, _results;\n      _ref1 = this.metrics;\n      _results = [];\n      for (_j = 0, _len = _ref1.length; _j < _len; _j++) {\n        m = _ref1[_j];\n        _results.push(m.advance);\n      }\n      return _results;\n    }.call(this);\n    last = this.widths[this.widths.length - 1];\n    _results = [];\n    for (\n      i = _j = 0;\n      0 <= lsbCount ? _j < lsbCount : _j > lsbCount;\n      i = 0 <= lsbCount ? ++_j : --_j\n    ) {\n      _results.push(this.widths.push(last));\n    }\n    return _results;\n  };\n  /***************************************************************/\n  /* function : forGlyph                                         */\n  /* comment : Returns the advance width and lsb for this glyph. */\n  /***************************************************************/\n  HmtxTable.prototype.forGlyph = function(id) {\n    if (id in this.metrics) {\n      return this.metrics[id];\n    }\n    return {\n      advance: this.metrics[this.metrics.length - 1].advance,\n      lsb: this.leftSideBearings[id - this.metrics.length]\n    };\n  };\n  /*HmtxTable.prototype.encode = function (mapping) {\n            var id, metric, table, _i, _len;\n            table = new Data;\n            for (_i = 0, _len = mapping.length; _i < _len; _i++) {\n                id = mapping[_i];\n                metric = this.forGlyph(id);\n                table.writeUInt16(metric.advance);\n                table.writeUInt16(metric.lsb);\n            }\n            return table.data;\n        };*/\n  return HmtxTable;\n})(Table);\n\nvar __slice = [].slice;\n\nvar GlyfTable = (function(_super) {\n  __extends(GlyfTable, _super);\n\n  function GlyfTable() {\n    return GlyfTable.__super__.constructor.apply(this, arguments);\n  }\n  GlyfTable.prototype.tag = \"glyf\";\n  GlyfTable.prototype.parse = function() {\n    return (this.cache = {});\n  };\n  GlyfTable.prototype.glyphFor = function(id) {\n    var data,\n      index,\n      length,\n      loca,\n      numberOfContours,\n      raw,\n      xMax,\n      xMin,\n      yMax,\n      yMin;\n    if (id in this.cache) {\n      return this.cache[id];\n    }\n    loca = this.file.loca;\n    data = this.file.contents;\n    index = loca.indexOf(id);\n    length = loca.lengthOf(id);\n    if (length === 0) {\n      return (this.cache[id] = null);\n    }\n    data.pos = this.offset + index;\n    raw = new Data(data.read(length));\n    numberOfContours = raw.readShort();\n    xMin = raw.readShort();\n    yMin = raw.readShort();\n    xMax = raw.readShort();\n    yMax = raw.readShort();\n    if (numberOfContours === -1) {\n      this.cache[id] = new CompoundGlyph(raw, xMin, yMin, xMax, yMax);\n    } else {\n      this.cache[id] = new SimpleGlyph(\n        raw,\n        numberOfContours,\n        xMin,\n        yMin,\n        xMax,\n        yMax\n      );\n    }\n    return this.cache[id];\n  };\n  GlyfTable.prototype.encode = function(glyphs, mapping, old2new) {\n    var glyph, id, offsets, table, _i, _len;\n    table = [];\n    offsets = [];\n    for (_i = 0, _len = mapping.length; _i < _len; _i++) {\n      id = mapping[_i];\n      glyph = glyphs[id];\n      offsets.push(table.length);\n      if (glyph) {\n        table = table.concat(glyph.encode(old2new));\n      }\n    }\n    offsets.push(table.length);\n    return {\n      table: table,\n      offsets: offsets\n    };\n  };\n  return GlyfTable;\n})(Table);\n\nvar SimpleGlyph = (function() {\n  /**************************************************************************/\n  /* function : SimpleGlyph                                                 */\n  /* comment : Stores raw, xMin, yMin, xMax, and yMax values for this glyph.*/\n  /**************************************************************************/\n  function SimpleGlyph(raw, numberOfContours, xMin, yMin, xMax, yMax) {\n    this.raw = raw;\n    this.numberOfContours = numberOfContours;\n    this.xMin = xMin;\n    this.yMin = yMin;\n    this.xMax = xMax;\n    this.yMax = yMax;\n    this.compound = false;\n  }\n  SimpleGlyph.prototype.encode = function() {\n    return this.raw.data;\n  };\n  return SimpleGlyph;\n})();\n\nvar CompoundGlyph = (function() {\n  var ARG_1_AND_2_ARE_WORDS,\n    MORE_COMPONENTS,\n    WE_HAVE_AN_X_AND_Y_SCALE,\n    WE_HAVE_A_SCALE,\n    WE_HAVE_A_TWO_BY_TWO,\n    WE_HAVE_INSTRUCTIONS;\n  ARG_1_AND_2_ARE_WORDS = 0x0001;\n  WE_HAVE_A_SCALE = 0x0008;\n  MORE_COMPONENTS = 0x0020;\n  WE_HAVE_AN_X_AND_Y_SCALE = 0x0040;\n  WE_HAVE_A_TWO_BY_TWO = 0x0080;\n  WE_HAVE_INSTRUCTIONS = 0x0100;\n\n  /********************************************************************************************************************/\n  /* function : CompoundGlypg generator                                                                               */\n  /* comment : It stores raw, xMin, yMin, xMax, yMax, glyph id, and glyph offset for the corresponding compound glyph.*/\n  /********************************************************************************************************************/\n  function CompoundGlyph(raw, xMin, yMin, xMax, yMax) {\n    var data, flags;\n    this.raw = raw;\n    this.xMin = xMin;\n    this.yMin = yMin;\n    this.xMax = xMax;\n    this.yMax = yMax;\n    this.compound = true;\n    this.glyphIDs = [];\n    this.glyphOffsets = [];\n    data = this.raw;\n    while (true) {\n      flags = data.readShort();\n      this.glyphOffsets.push(data.pos);\n      this.glyphIDs.push(data.readUInt16());\n      if (!(flags & MORE_COMPONENTS)) {\n        break;\n      }\n      if (flags & ARG_1_AND_2_ARE_WORDS) {\n        data.pos += 4;\n      } else {\n        data.pos += 2;\n      }\n      if (flags & WE_HAVE_A_TWO_BY_TWO) {\n        data.pos += 8;\n      } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {\n        data.pos += 4;\n      } else if (flags & WE_HAVE_A_SCALE) {\n        data.pos += 2;\n      }\n    }\n  }\n  /****************************************************************************************************************/\n  /* function : CompoundGlypg encode                                                                              */\n  /* comment : After creating a table for the characters you typed, you call directory.encode to encode the table.*/\n  /****************************************************************************************************************/\n  CompoundGlyph.prototype.encode = function() {\n    var i, result, _len, _ref;\n    result = new Data(__slice.call(this.raw.data));\n    _ref = this.glyphIDs;\n    for (i = 0, _len = _ref.length; i < _len; ++i) {\n      result.pos = this.glyphOffsets[i];\n    }\n    return result.data;\n  };\n  return CompoundGlyph;\n})();\n\nvar LocaTable = (function(_super) {\n  __extends(LocaTable, _super);\n\n  function LocaTable() {\n    return LocaTable.__super__.constructor.apply(this, arguments);\n  }\n  LocaTable.prototype.tag = \"loca\";\n  LocaTable.prototype.parse = function(data) {\n    var format, i;\n    data.pos = this.offset;\n    format = this.file.head.indexToLocFormat;\n    if (format === 0) {\n      return (this.offsets = function() {\n        var _ref, _results;\n        _results = [];\n        for (i = 0, _ref = this.length; i < _ref; i += 2) {\n          _results.push(data.readUInt16() * 2);\n        }\n        return _results;\n      }.call(this));\n    } else {\n      return (this.offsets = function() {\n        var _ref, _results;\n        _results = [];\n        for (i = 0, _ref = this.length; i < _ref; i += 4) {\n          _results.push(data.readUInt32());\n        }\n        return _results;\n      }.call(this));\n    }\n  };\n  LocaTable.prototype.indexOf = function(id) {\n    return this.offsets[id];\n  };\n  LocaTable.prototype.lengthOf = function(id) {\n    return this.offsets[id + 1] - this.offsets[id];\n  };\n  LocaTable.prototype.encode = function(offsets, activeGlyphs) {\n    var LocaTable = new Uint32Array(this.offsets.length);\n    var glyfPtr = 0;\n    var listGlyf = 0;\n    for (var k = 0; k < LocaTable.length; ++k) {\n      LocaTable[k] = glyfPtr;\n      if (listGlyf < activeGlyphs.length && activeGlyphs[listGlyf] == k) {\n        ++listGlyf;\n        LocaTable[k] = glyfPtr;\n        var start = this.offsets[k];\n        var len = this.offsets[k + 1] - start;\n        if (len > 0) {\n          glyfPtr += len;\n        }\n      }\n    }\n    var newLocaTable = new Array(LocaTable.length * 4);\n    for (var j = 0; j < LocaTable.length; ++j) {\n      newLocaTable[4 * j + 3] = LocaTable[j] & 0x000000ff;\n      newLocaTable[4 * j + 2] = (LocaTable[j] & 0x0000ff00) >> 8;\n      newLocaTable[4 * j + 1] = (LocaTable[j] & 0x00ff0000) >> 16;\n      newLocaTable[4 * j] = (LocaTable[j] & 0xff000000) >> 24;\n    }\n    return newLocaTable;\n  };\n  return LocaTable;\n})(Table);\n\n/************************************************************************************/\n/* function : invert                                                                */\n/* comment : Change the object's (key: value) to create an object with (value: key).*/\n/************************************************************************************/\nvar invert = function(object) {\n  var key, ret, val;\n  ret = {};\n  for (key in object) {\n    val = object[key];\n    ret[val] = key;\n  }\n  return ret;\n};\n\n/*var successorOf = function (input) {\n        var added, alphabet, carry, i, index, isUpperCase, last, length, next, result;\n        alphabet = 'abcdefghijklmnopqrstuvwxyz';\n        length = alphabet.length;\n        result = input;\n        i = input.length;\n        while (i >= 0) {\n            last = input.charAt(--i);\n            if (isNaN(last)) {\n                index = alphabet.indexOf(last.toLowerCase());\n                if (index === -1) {\n                    next = last;\n                    carry = true;\n                }\n                else {\n                    next = alphabet.charAt((index + 1) % length);\n                    isUpperCase = last === last.toUpperCase();\n                    if (isUpperCase) {\n                        next = next.toUpperCase();\n                    }\n                    carry = index + 1 >= length;\n                    if (carry && i === 0) {\n                        added = isUpperCase ? 'A' : 'a';\n                        result = added + next + result.slice(1);\n                        break;\n                    }\n                }\n            }\n            else {\n                next = +last + 1;\n                carry = next > 9;\n                if (carry) {\n                    next = 0;\n                }\n                if (carry && i === 0) {\n                    result = '1' + next + result.slice(1);\n                    break;\n                }\n            }\n            result = result.slice(0, i) + next + result.slice(i + 1);\n            if (!carry) {\n                break;\n            }\n        }\n        return result;\n    };*/\n\nvar Subset = (function() {\n  function Subset(font) {\n    this.font = font;\n    this.subset = {};\n    this.unicodes = {};\n    this.next = 33;\n  }\n  /*Subset.prototype.use = function (character) {\n            var i, _i, _ref;\n            if (typeof character === 'string') {\n                for (i = _i = 0, _ref = character.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n                    this.use(character.charCodeAt(i));\n                }\n                return;\n            }\n            if (!this.unicodes[character]) {\n                this.subset[this.next] = character;\n                return this.unicodes[character] = this.next++;\n            }\n        };*/\n  /*Subset.prototype.encodeText = function (text) {\n            var char, i, string, _i, _ref;\n            string = '';\n            for (i = _i = 0, _ref = text.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n                char = this.unicodes[text.charCodeAt(i)];\n                string += String.fromCharCode(char);\n            }\n            return string;\n        };*/\n  /***************************************************************/\n  /* function : generateCmap                                     */\n  /* comment : Returns the unicode cmap for this font.         */\n  /***************************************************************/\n  Subset.prototype.generateCmap = function() {\n    var mapping, roman, unicode, unicodeCmap, _ref;\n    unicodeCmap = this.font.cmap.tables[0].codeMap;\n    mapping = {};\n    _ref = this.subset;\n    for (roman in _ref) {\n      unicode = _ref[roman];\n      mapping[roman] = unicodeCmap[unicode];\n    }\n    return mapping;\n  };\n  /*Subset.prototype.glyphIDs = function () {\n            var ret, roman, unicode, unicodeCmap, val, _ref;\n            unicodeCmap = this.font.cmap.tables[0].codeMap;\n            ret = [0];\n            _ref = this.subset;\n            for (roman in _ref) {\n                unicode = _ref[roman];\n                val = unicodeCmap[unicode];\n                if ((val != null) && __indexOf.call(ret, val) < 0) {\n                    ret.push(val);\n                }\n            }\n            return ret.sort();\n        };*/\n  /******************************************************************/\n  /* function : glyphsFor                                           */\n  /* comment : Returns simple glyph objects for the input character.*/\n  /******************************************************************/\n  Subset.prototype.glyphsFor = function(glyphIDs) {\n    var additionalIDs, glyph, glyphs, id, _i, _len, _ref;\n    glyphs = {};\n    for (_i = 0, _len = glyphIDs.length; _i < _len; _i++) {\n      id = glyphIDs[_i];\n      glyphs[id] = this.font.glyf.glyphFor(id);\n    }\n    additionalIDs = [];\n    for (id in glyphs) {\n      glyph = glyphs[id];\n      if (glyph != null ? glyph.compound : void 0) {\n        additionalIDs.push.apply(additionalIDs, glyph.glyphIDs);\n      }\n    }\n    if (additionalIDs.length > 0) {\n      _ref = this.glyphsFor(additionalIDs);\n      for (id in _ref) {\n        glyph = _ref[id];\n        glyphs[id] = glyph;\n      }\n    }\n    return glyphs;\n  };\n  /***************************************************************/\n  /* function : encode                                           */\n  /* comment : Encode various tables for the characters you use. */\n  /***************************************************************/\n  Subset.prototype.encode = function(glyID, indexToLocFormat) {\n    var cmap,\n      code,\n      glyf,\n      glyphs,\n      id,\n      ids,\n      loca,\n      new2old,\n      newIDs,\n      nextGlyphID,\n      old2new,\n      oldID,\n      oldIDs,\n      tables,\n      _ref;\n    cmap = CmapTable.encode(this.generateCmap(), \"unicode\");\n    glyphs = this.glyphsFor(glyID);\n    old2new = {\n      0: 0\n    };\n    _ref = cmap.charMap;\n    for (code in _ref) {\n      ids = _ref[code];\n      old2new[ids.old] = ids[\"new\"];\n    }\n    nextGlyphID = cmap.maxGlyphID;\n    for (oldID in glyphs) {\n      if (!(oldID in old2new)) {\n        old2new[oldID] = nextGlyphID++;\n      }\n    }\n    new2old = invert(old2new);\n    newIDs = Object.keys(new2old).sort(function(a, b) {\n      return a - b;\n    });\n    oldIDs = (function() {\n      var _i, _len, _results;\n      _results = [];\n      for (_i = 0, _len = newIDs.length; _i < _len; _i++) {\n        id = newIDs[_i];\n        _results.push(new2old[id]);\n      }\n      return _results;\n    })();\n    glyf = this.font.glyf.encode(glyphs, oldIDs, old2new);\n    loca = this.font.loca.encode(glyf.offsets, oldIDs);\n    tables = {\n      cmap: this.font.cmap.raw(),\n      glyf: glyf.table,\n      loca: loca,\n      hmtx: this.font.hmtx.raw(),\n      hhea: this.font.hhea.raw(),\n      maxp: this.font.maxp.raw(),\n      post: this.font.post.raw(),\n      name: this.font.name.raw(),\n      head: this.font.head.encode(indexToLocFormat)\n    };\n    if (this.font.os2.exists) {\n      tables[\"OS/2\"] = this.font.os2.raw();\n    }\n    return this.font.directory.encode(tables);\n  };\n  return Subset;\n})();\n\njsPDF.API.PDFObject = (function() {\n  var pad;\n\n  function PDFObject() {}\n  pad = function(str, length) {\n    return (Array(length + 1).join(\"0\") + str).slice(-length);\n  };\n  /*****************************************************************************/\n  /* function : convert                                                        */\n  /* comment :Converts pdf tag's / FontBBox and array values in / W to strings */\n  /*****************************************************************************/\n  PDFObject.convert = function(object) {\n    var e, items, key, out, val;\n    if (Array.isArray(object)) {\n      items = (function() {\n        var _i, _len, _results;\n        _results = [];\n        for (_i = 0, _len = object.length; _i < _len; _i++) {\n          e = object[_i];\n          _results.push(PDFObject.convert(e));\n        }\n        return _results;\n      })().join(\" \");\n      return \"[\" + items + \"]\";\n    } else if (typeof object === \"string\") {\n      return \"/\" + object;\n    } else if (object != null ? object.isString : void 0) {\n      return \"(\" + object + \")\";\n    } else if (object instanceof Date) {\n      return (\n        \"(D:\" +\n        pad(object.getUTCFullYear(), 4) +\n        pad(object.getUTCMonth(), 2) +\n        pad(object.getUTCDate(), 2) +\n        pad(object.getUTCHours(), 2) +\n        pad(object.getUTCMinutes(), 2) +\n        pad(object.getUTCSeconds(), 2) +\n        \"Z)\"\n      );\n    } else if ({}.toString.call(object) === \"[object Object]\") {\n      out = [\"<<\"];\n      for (key in object) {\n        val = object[key];\n        out.push(\"/\" + key + \" \" + PDFObject.convert(val));\n      }\n      out.push(\">>\");\n      return out.join(\"\\n\");\n    } else {\n      return \"\" + object;\n    }\n  };\n  return PDFObject;\n})();\n","export const PRIMITIVE  = 0;\nexport const ARRAY      = 1;\nexport const OBJECT     = 2;\nexport const DATE       = 3;\nexport const REGEXP     = 4;\nexport const MAP        = 5;\nexport const SET        = 6;\nexport const ERROR      = 7;\nexport const BIGINT     = 8;\n// export const SYMBOL = 9;\n","import {\n  PRIMITIVE, ARRAY, OBJECT,\n  DATE, REGEXP, MAP, SET,\n  ERROR, BIGINT\n} from './types.js';\n\nconst env = typeof self === 'object' ? self : globalThis;\n\nconst deserializer = ($, _) => {\n  const as = (out, index) => {\n    $.set(index, out);\n    return out;\n  };\n\n  const unpair = index => {\n    if ($.has(index))\n      return $.get(index);\n\n    const [type, value] = _[index];\n    switch (type) {\n      case PRIMITIVE:\n        return as(value, index);\n      case ARRAY: {\n        const arr = as([], index);\n        for (const index of value)\n          arr.push(unpair(index));\n        return arr;\n      }\n      case OBJECT: {\n        const object = as({}, index);\n        for (const [key, index] of value)\n          object[unpair(key)] = unpair(index);\n        return object;\n      }\n      case DATE:\n        return as(new Date(value), index);\n      case REGEXP: {\n        const {source, flags} = value;\n        return as(new RegExp(source, flags), index);\n      }\n      case MAP: {\n        const map = as(new Map, index);\n        for (const [key, index] of value)\n          map.set(unpair(key), unpair(index));\n        return map;\n      }\n      case SET: {\n        const set = as(new Set, index);\n        for (const index of value)\n          set.add(unpair(index));\n        return set;\n      }\n      case ERROR: {\n        const {name, message} = value;\n        return as(new env[name](message), index);\n      }\n      case BIGINT:\n        return as(BigInt(value), index);\n      case 'BigInt':\n        return as(Object(BigInt(value)), index);\n    }\n    return as(new env[type](value), index);\n  };\n\n  return unpair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns a deserialized value from a serialized array of Records.\n * @param {Record[]} serialized a previously serialized value.\n * @returns {any}\n */\nexport const deserialize = serialized => deserializer(new Map, serialized)(0);\n","import {\n  PRIMITIVE, ARRAY, OBJECT,\n  DATE, REGEXP, MAP, SET,\n  ERROR, BIGINT\n} from './types.js';\n\nconst EMPTY = '';\n\nconst {toString} = {};\nconst {keys} = Object;\n\nconst typeOf = value => {\n  const type = typeof value;\n  if (type !== 'object' || !value)\n    return [PRIMITIVE, type];\n\n  const asString = toString.call(value).slice(8, -1);\n  switch (asString) {\n    case 'Array':\n      return [ARRAY, EMPTY];\n    case 'Object':\n      return [OBJECT, EMPTY];\n    case 'Date':\n      return [DATE, EMPTY];\n    case 'RegExp':\n      return [REGEXP, EMPTY];\n    case 'Map':\n      return [MAP, EMPTY];\n    case 'Set':\n      return [SET, EMPTY];\n  }\n\n  if (asString.includes('Array'))\n    return [ARRAY, asString];\n\n  if (asString.includes('Error'))\n    return [ERROR, asString];\n\n  return [OBJECT, asString];\n};\n\nconst shouldSkip = ([TYPE, type]) => (\n  TYPE === PRIMITIVE &&\n  (type === 'function' || type === 'symbol')\n);\n\nconst serializer = (strict, json, $, _) => {\n\n  const as = (out, value) => {\n    const index = _.push(out) - 1;\n    $.set(value, index);\n    return index;\n  };\n\n  const pair = value => {\n    if ($.has(value))\n      return $.get(value);\n\n    let [TYPE, type] = typeOf(value);\n    switch (TYPE) {\n      case PRIMITIVE: {\n        let entry = value;\n        switch (type) {\n          case 'bigint':\n            TYPE = BIGINT;\n            entry = value.toString();\n            break;\n          case 'function':\n          case 'symbol':\n            if (strict)\n              throw new TypeError('unable to serialize ' + type);\n            entry = null;\n            break;\n        }\n        return as([TYPE, entry], value);\n      }\n      case ARRAY: {\n        if (type)\n          return as([type, [...value]], value);\n  \n        const arr = [];\n        const index = as([TYPE, arr], value);\n        for (const entry of value)\n          arr.push(pair(entry));\n        return index;\n      }\n      case OBJECT: {\n        if (type) {\n          switch (type) {\n            case 'BigInt':\n              return as([type, value.toString()], value);\n            case 'Boolean':\n            case 'Number':\n            case 'String':\n              return as([type, value.valueOf()], value);\n          }\n        }\n\n        if (json && ('toJSON' in value))\n          return pair(value.toJSON());\n\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const key of keys(value)) {\n          if (strict || !shouldSkip(typeOf(value[key])))\n            entries.push([pair(key), pair(value[key])]);\n        }\n        return index;\n      }\n      case DATE:\n        return as([TYPE, value.toISOString()], value);\n      case REGEXP: {\n        const {source, flags} = value;\n        return as([TYPE, {source, flags}], value);\n      }\n      case MAP: {\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const [key, entry] of value) {\n          if (strict || !(shouldSkip(typeOf(key)) || shouldSkip(typeOf(entry))))\n            entries.push([pair(key), pair(entry)]);\n        }\n        return index;\n      }\n      case SET: {\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const entry of value) {\n          if (strict || !shouldSkip(typeOf(entry)))\n            entries.push(pair(entry));\n        }\n        return index;\n      }\n    }\n\n    const {message} = value;\n    return as([TYPE, {name: type, message}], value);\n  };\n\n  return pair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} value a serializable value.\n * @param {{lossy?: boolean}?} options an object with a `lossy` property that,\n *  if `true`, will not throw errors on incompatible types, and behave more\n *  like JSON stringify would behave. Symbol and Function will be discarded.\n * @returns {Record[]}\n */\n export const serialize = (value, {json, lossy} = {}) => {\n  const _ = [];\n  return serializer(!(json || lossy), !!json, new Map, _)(value), _;\n};\n","import {deserialize} from './deserialize.js';\nimport {serialize} from './serialize.js';\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} any a serializable value.\n * @param {{transfer: any[]}?} options an object with a transfoer property.\n *  This is currently not supported, all values are always cloned.\n * @returns {Record[]}\n */\nexport default typeof structuredClone === \"function\" ?\n  structuredClone :\n  (any, options) => deserialize(serialize(any, options));\n\nexport {deserialize, serialize};\n","export default function isObject<T>(val: T): boolean {\n  return (\n    val !== null &&\n    typeof val === 'object' &&\n    !(val instanceof Date || val instanceof RegExp) &&\n    !Array.isArray(val)\n  );\n}\n","/* import { IChange } from '../types'; */\nimport isObject from '../utils/is-object';\n\nexport const VALUE = Symbol('__value__');\n\nexport default class Change {\n  [VALUE]: unknown;\n\n  constructor(value: unknown) {\n    this[VALUE] = value;\n  }\n}\n\n// TODO: not sure why this function type guard isn't working\nexport const isChange = (maybeChange: unknown): maybeChange is Change =>\n  isObject(maybeChange) && VALUE in (maybeChange as any);\n\nexport function getChangeValue(maybeChange: Change | unknown): any {\n  if (isChange(maybeChange)) {\n    return maybeChange[VALUE];\n  }\n}\n","import type { IErr, ValidationErr } from '../types';\n\nexport default class Err implements IErr<any> {\n  value: any;\n  validation: ValidationErr | ValidationErr[];\n\n  constructor(value: any, validation: ValidationErr | ValidationErr[]) {\n    this.value = value;\n    this.validation = validation;\n  }\n}\n","import { getChangeValue, isChange } from '../-private/change';\nimport isObject from './is-object';\nimport Err from '../-private/err';\nimport type { PublicErrors } from '../types';\n\n/**\n * traverse through target and return leaf nodes with `value` property and key as 'person.name'\n * Only detects key paths with Changes\n *\n * @method getKeyValues\n * @return {Array} [{ 'person.name': value }]\n */\nexport function getKeyValues<T extends Record<string, any>>(\n  obj: T,\n  keysUpToValue: Array<string> = []\n): Record<string, any>[] {\n  const map = [];\n\n  for (let key in obj) {\n    if (obj[key] && isObject(obj[key])) {\n      if (isChange(obj[key])) {\n        map.push({ key: [...keysUpToValue, key].join('.'), value: getChangeValue(obj[key]) });\n      } else {\n        map.push(...getKeyValues(obj[key], [...keysUpToValue, key]));\n      }\n    }\n  }\n\n  return map;\n}\n\n/**\n * traverse through target and return leaf nodes with `value` property and key as 'person.name'\n *\n * @method getKeyErrorValues\n * @return {Array} [{ key: 'person.name', validation: '', value: '' }]\n */\nexport function getKeyErrorValues<T extends Record<string, any>>(\n  obj: T,\n  keysUpToValue: Array<string> = []\n): PublicErrors {\n  let map = [];\n\n  for (let key in obj) {\n    if (obj[key] && isObject(obj[key])) {\n      if (\n        Object.prototype.hasOwnProperty.call(obj[key], 'value') &&\n        (obj[key] as any) instanceof Err\n      ) {\n        map.push({\n          key: [...keysUpToValue, key].join('.'),\n          validation: obj[key].validation,\n          value: obj[key].value\n        });\n      } else if (key !== 'value') {\n        map.push(...getKeyErrorValues(obj[key], [...keysUpToValue, key]));\n      }\n    }\n  }\n\n  return map;\n}\n","import isObject from './is-object';\n\nfunction isPromiseLike(obj: any): boolean {\n  return (\n    !!obj &&\n    !!obj.then &&\n    !!obj.catch &&\n    !!obj.finally &&\n    typeof obj.then === 'function' &&\n    typeof obj.catch === 'function' &&\n    typeof obj.finally === 'function'\n  );\n}\n\nexport default function isPromise(obj: any): boolean {\n  return isObject(obj) && isPromiseLike(obj);\n}\n","import isPromise from './is-promise';\nimport type { ValidatorMapFunc, ValidationResult, ValidatorClass } from '../types';\n\n/**\n * Rejects `true` values from an array of validations. Returns `true` when there\n * are no errors, or the error object if there are errors.\n *\n * @private\n * @param  {Array} validations\n * @return {Promise<boolean|Any>}\n */\nasync function handleValidationsAsync(\n  validations: Array<ValidationResult | Promise<ValidationResult>>\n): Promise<any> {\n  try {\n    const result = await Promise.all(validations);\n\n    const maybeFailed = result.filter((val) => typeof val !== 'boolean' && val);\n    return maybeFailed.length === 0 || maybeFailed;\n  } catch (e) {\n    return e;\n  }\n}\n\n/**\n * Rejects `true` values from an array of validations. Returns `true` when there\n * are no errors, or the error object if there are errors.\n *\n * @private\n * @param  {Array} validations\n * @return {boolean|Any}\n */\nfunction handleValidationsSync(validations: Array<ValidationResult>): boolean | any {\n  const maybeFailed = validations.filter((val) => typeof val !== 'boolean' && val);\n  return maybeFailed.length === 0 || maybeFailed;\n}\n/**\n * Handles an array of validators and returns Promise.all if any value is a\n * Promise.\n *\n * @public\n * @param  {Array} validators Array of validator functions\n * @param  {String} options.key\n * @param  {Any} options.newValue\n * @param  {Any} options.oldValue\n * @param  {Object} options.changes\n * @param  {Object} options.content\n * @return {Promise|boolean|Any}\n */\nexport default function handleMultipleValidations(\n  validators: Array<ValidatorMapFunc | ValidatorClass>,\n  { key, newValue, oldValue, changes, content }: { [s: string]: any }\n): boolean | any {\n  let validations: Array<ValidationResult | Promise<ValidationResult>> = Array.from(\n    validators.map(\n      (\n        validator: ValidatorMapFunc | ValidatorClass\n      ): ValidationResult | Promise<ValidationResult> => {\n        const isValidatorClass = (maybeClass: unknown): maybeClass is ValidatorClass =>\n          !!(maybeClass as Record<string, any>).validate;\n        if (validator && isValidatorClass(validator)) {\n          validator = validator.validate.bind(validator);\n        }\n\n        return validator(key, newValue, oldValue, changes, content);\n      }\n    )\n  );\n\n  if (validations.some(isPromise)) {\n    return Promise.all(validations).then(handleValidationsAsync);\n  }\n\n  return handleValidationsSync(validations as Array<ValidationResult>);\n}\n","import { isChange, getChangeValue } from '../-private/change';\n\n/**\n * Handles both single key or nested string keys ('person.name')\n *\n * @method getDeep\n */\nexport default function getDeep<T extends Record<string, any>>(\n  root: T,\n  path: string | string[]\n): any {\n  let obj: T = root;\n\n  if (path.indexOf('.') === -1) {\n    return obj[path as string];\n  }\n  const parts: string[] = typeof path === 'string' ? path.split('.') : path;\n\n  for (let i = 0; i < parts.length; i++) {\n    if (obj === undefined || obj === null) {\n      return undefined;\n    }\n\n    // next iteration has next level\n    obj = obj[parts[i]];\n  }\n\n  return obj;\n}\n\n/**\n * Returns subObject while skipping `Change` instances\n *\n * @method getSubObject\n */\nexport function getSubObject<T extends Record<string, any>>(root: T, path: string | string[]): any {\n  let obj: T = root;\n\n  if (path.indexOf('.') === -1) {\n    return obj[path as string];\n  }\n\n  const parts: string[] = typeof path === 'string' ? path.split('.') : path;\n\n  for (let i = 0; i < parts.length; i++) {\n    if (obj === undefined || obj === null) {\n      return undefined;\n    }\n\n    if (isChange(obj[parts[i]])) {\n      obj = getChangeValue(obj[parts[i]]);\n    } else {\n      obj = obj[parts[i]];\n    }\n  }\n\n  return obj;\n}\n","import handleMultipleValidations from './handle-multiple-validations';\nimport isPromise from './is-promise';\nimport isObject from './is-object';\nimport type {\n  ValidatorAction,\n  ValidatorMapFunc,\n  ValidatorClass,\n  ValidationResult,\n  ValidatorMap\n} from '../types';\nimport get from './get-deep';\n\n/**\n * returns a closure to lookup and validate k/v pairs set on a changeset\n *\n * @method lookupValidator\n * @param validationMap\n */\nexport default function lookupValidator(validationMap: ValidatorMap): ValidatorAction {\n  return ({ key, newValue, oldValue, changes, content }) => {\n    const validations = validationMap || {};\n    let validator:\n      | ValidatorMapFunc\n      | ValidatorMapFunc[]\n      | ValidatorClass\n      | ValidatorClass[]\n      | Array<ValidatorMapFunc | ValidatorClass> = get(validations, key);\n    const isValidatorClass = (maybeClass: unknown): maybeClass is ValidatorClass =>\n      !!(maybeClass as Record<string, any>).validate;\n    if (validator && isValidatorClass(validator)) {\n      validator = validator.validate.bind(validator);\n    }\n\n    if (!validator || isObject(validator)) {\n      return true;\n    }\n\n    let validation: ValidationResult | Promise<ValidationResult>;\n    if (Array.isArray(validator)) {\n      validation = handleMultipleValidations(validator, {\n        key,\n        newValue,\n        oldValue,\n        changes,\n        content\n      });\n    } else {\n      validation = (validator as ValidatorMapFunc)(key, newValue, oldValue, changes, content);\n    }\n\n    return isPromise(validation)\n      ? (validation as Promise<ValidationResult>).then((result) => {\n          return result;\n        })\n      : validation;\n  };\n}\n","// this statefull class holds and notifies\n\nexport default class Notifier<T extends any[]> {\n  listeners: ((...args: T) => void)[];\n\n  constructor() {\n    this.listeners = [];\n  }\n\n  addListener(callback: (...args: T) => void) {\n    this.listeners.push(callback);\n    return () => this.removeListener(callback);\n  }\n\n  removeListener(callback: (...args: T) => void) {\n    for (let i = 0; i < this.listeners.length; i++) {\n      if (this.listeners[i] === callback) {\n        this.listeners.splice(i, 1);\n        return;\n      }\n    }\n  }\n\n  trigger(...args: T) {\n    this.listeners.forEach((callback) => callback(...args));\n  }\n}\n","import Notifier from './notifier';\n\nexport function notifierForEvent(object: any, eventName: string) {\n  if (object._eventedNotifiers === undefined) {\n    object._eventedNotifiers = {};\n  }\n\n  let notifier = object._eventedNotifiers[eventName];\n\n  if (!notifier) {\n    notifier = object._eventedNotifiers[eventName] = new Notifier();\n  }\n\n  return notifier;\n}\n","import { getChangeValue, isChange } from '../-private/change';\n\nexport function hasKey(\n  record: Record<string, any>,\n  path: string,\n  safeGet: (obj: Record<string, any>, key: string) => any\n): boolean {\n  const keys = path.split('.');\n\n  let obj = record;\n  for (const key of keys) {\n    if (!obj || !Object.prototype.hasOwnProperty.call(obj, key)) {\n      return false;\n    }\n\n    obj = safeGet(obj, key);\n    if (isChange(obj)) {\n      obj = getChangeValue(obj);\n    }\n  }\n\n  return true;\n}\n\nexport function pathInChanges(\n  record: Record<string, any>,\n  path: string,\n  safeGet: (obj: Record<string, any>, key: string) => any\n): boolean {\n  if (isChange(record)) {\n    return false;\n  }\n\n  const keys = path.split('.');\n\n  let obj = record;\n  for (const key of keys) {\n    if (!obj) {\n      return false;\n    }\n\n    if (keys[keys.length - 1] !== key && isChange(safeGet(obj, key))) {\n      return true;\n    }\n\n    obj = safeGet(obj, key);\n  }\n\n  return false;\n}\n","import { getChangeValue, isChange } from '../-private/change';\nimport isObject from './is-object';\n\n/**\n * traverse through target and unset `value` from leaf key so can access normally\n * {\n *  name: Change {\n *    value: 'Charles'\n *  }\n * }\n *\n * to\n *\n * {\n *  name: 'Charles'\n * }\n *\n * Shallow copy here is fine because we are swapping out the leaf nested object\n * rather than mutating a property in something with reference\n *\n * @method normalizeObject\n * @param {Object} target\n * @return {Object}\n */\nexport default function normalizeObject<T extends { [key: string]: any }>(\n  target: T,\n  isObj: (...args: unknown[]) => unknown = isObject\n): T {\n  if (!target || !isObj(target)) {\n    return target;\n  }\n\n  if (isChange(target)) {\n    return getChangeValue(target);\n  }\n\n  let obj = { ...target };\n\n  for (let key in obj) {\n    const next: any = obj[key];\n    if (next && isObj(next)) {\n      if (isChange(next)) {\n        obj[key] = getChangeValue(next);\n      } else {\n        try {\n          JSON.stringify(next);\n        } catch (e) {\n          break;\n        }\n        obj[key] = normalizeObject(next);\n      }\n    }\n  }\n\n  return obj;\n}\n","import isObject from './is-object';\nimport { isChange } from '../-private/change';\n\nexport function hasChanges(changes: Record<string, any>): boolean {\n  for (let key in changes) {\n    if (isChange(changes[key])) {\n      return true;\n    }\n\n    if (isObject(changes[key])) {\n      const isTruthy = hasChanges(changes[key]);\n      if (isTruthy) {\n        return isTruthy;\n      }\n    }\n  }\n\n  return false;\n}\n","let getOwnPropertyDescriptors: (obj: { [x: string]: any }) => { [x: string]: PropertyDescriptor };\n\nif (Object.getOwnPropertyDescriptors !== undefined) {\n  getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors;\n} else {\n  getOwnPropertyDescriptors = function (obj: object) {\n    let desc: Record<string, any> = {};\n\n    Object.keys(obj).forEach((key) => {\n      desc[key] = Object.getOwnPropertyDescriptor(obj, key);\n    });\n\n    return desc;\n  };\n}\n\n// keep getters and setters\nexport default function pureAssign(...objects: object[]): object {\n  return objects.reduce((acc, obj) => {\n    return Object.defineProperties(acc, getOwnPropertyDescriptors(obj));\n  }, {});\n}\n","import isObject from './is-object';\n\nfunction flatten(\n  validatorMap: Record<string, any>,\n  obj: Record<string, any>,\n  keys: string[],\n  keysUpToFunction: Array<string> = []\n): object {\n  for (let key of keys) {\n    const value: any = validatorMap[key];\n    if (typeof value.validate === 'function') {\n      // class with .validate function\n      obj[key] = value;\n    } else if (isObject(value)) {\n      flatten(value, obj, Object.keys(value), [...keysUpToFunction, key]);\n    } else if (typeof value === 'function') {\n      const dotSeparatedKeys = [...keysUpToFunction, key].join('.');\n      obj[dotSeparatedKeys] = value;\n    } else if (Array.isArray(value)) {\n      const isAllFuncs: boolean = value.every(\n        (item) => typeof item === 'function' || typeof item.validate === 'function'\n      );\n      if (isAllFuncs) {\n        const dotSeparatedKeys = [...keysUpToFunction, key].join('.');\n        obj[dotSeparatedKeys] = value;\n      }\n    }\n  }\n\n  return obj;\n}\n\n/**\n * With nested validations, we flatten to a dot separated 'user.email': validationFunc\n * Once doing so, validation will happen with a single level key or dot separated key\n *\n * @method flattenValidations\n * @return {object}\n */\nexport function flattenValidations(validatorMap: Record<string, any>): object {\n  if (!validatorMap) {\n    return {};\n  }\n\n  let obj: Record<string, any> = {};\n  return flatten(validatorMap, obj, Object.keys(validatorMap));\n}\n","export const CHANGESET = '__CHANGESET__';\n\nexport default function isChangeset(changeset: any): boolean {\n  return changeset && changeset['__changeset__'] === CHANGESET;\n}\n","export default function keyInObject(obj: any, key: string): boolean {\n  let [baseKey, ...keys] = key.split('.');\n\n  if (!baseKey || !(baseKey in obj)) {\n    return false;\n  }\n\n  if (!keys.length) {\n    return baseKey in obj;\n  }\n\n  let value = obj[baseKey];\n  if (value !== null && typeof value === 'object') {\n    return keyInObject(obj[baseKey], keys.join('.'));\n  }\n\n  return false;\n}\n","export function isArrayObject(obj: Record<string, any>) {\n  if (!obj) return false;\n\n  let maybeIndicies = Object.keys(obj);\n\n  return maybeIndicies.every((key) => Number.isInteger(parseInt(key, 10)));\n}\n\nexport function arrayToObject(array: any[]): Record<string, any> {\n  return array.reduce((obj, item, index) => {\n    obj[index] = item;\n    return obj;\n  }, {} as Record<string, any>);\n}\n\nexport function objectToArray(obj: Record<string, any>): any[] {\n  let result: any[] = [];\n\n  for (let [index, value] of Object.entries(obj)) {\n    result[parseInt(index, 10)] = value;\n  }\n\n  return result;\n}\n","import Change, { getChangeValue, isChange } from '../-private/change';\nimport isObject from './is-object';\nimport { isArrayObject } from './array-object';\n\ninterface Options {\n  safeSet?: any;\n  safeGet?: any;\n}\n\nfunction split(path: string): string[] {\n  const keys = path.split('.');\n\n  return keys;\n}\n\nfunction findSiblings(target: any, keys: string[]) {\n  const [leafKey] = keys.slice(-1);\n  const remaining = Object.keys(target)\n    .filter((k) => k !== leafKey)\n    .reduce((acc, key) => {\n      acc[key] = target[key];\n      return acc;\n    }, Object.create(null));\n\n  return { ...remaining };\n}\n\nfunction isValidKey(key: unknown) {\n  return key !== '__proto__' && key !== 'constructor' && key !== 'prototype';\n}\n\n/**\n * TODO: consider\n * https://github.com/emberjs/ember.js/blob/822452c4432620fc67a777aba3b150098fd6812d/packages/%40ember/-internals/metal/lib/property_set.ts\n *\n * Handles both single path or nested string paths ('person.name')\n *\n * @method setDeep\n */\nexport default function setDeep(\n  target: any,\n  path: string,\n  value: unknown,\n  options: Options = { safeSet: undefined, safeGet: undefined }\n): any {\n  const keys = split(path).filter(isValidKey);\n  // We will mutate target and through complex reference, we will mutate the orig\n  let orig = target;\n\n  options.safeSet =\n    options.safeSet ||\n    function (obj: any, key: string, value: unknown): any {\n      return (obj[key] = value);\n    };\n  options.safeGet =\n    options.safeGet ||\n    function (obj: any, key: string): any {\n      return obj ? obj[key] : obj;\n    };\n\n  if (keys.length === 1) {\n    options.safeSet(target, path, value);\n    return target;\n  }\n\n  for (let i = 0; i < keys.length; i++) {\n    let prop = keys[i];\n\n    if (Array.isArray(target) && parseInt(prop, 10) < 0) {\n      throw new Error(\n        'Negative indices are not allowed as arrays do not serialize values at negative indices'\n      );\n    }\n\n    const isObj = isObject(options.safeGet(target, prop));\n    const isArray = Array.isArray(options.safeGet(target, prop));\n    const isComplex = isObj || isArray;\n\n    if (!isComplex) {\n      options.safeSet(target, prop, {});\n    } else if (isComplex && isChange(options.safeGet(target, prop))) {\n      let changeValue = getChangeValue(options.safeGet(target, prop));\n\n      if (isObject(changeValue)) {\n        // if an object, we don't want to lose sibling keys\n        const siblings = findSiblings(changeValue, keys);\n\n        const resolvedValue = isChange(value) ? getChangeValue(value) : value;\n\n        const isArrayLike = Array.isArray(target) || isArrayObject(target);\n        const nestedKeys = isArrayLike\n          ? keys.slice(i + 1, keys.length).join('.') // remove first key segment as well as the index\n          : keys.slice(1, keys.length).join('.'); // remove first key segment\n\n        let newValue;\n\n        // if the resolved value was deleted (via setting to null or undefined),\n        // there is no need to setDeep. We can short-circuit that and set\n        // newValue directly because of the shallow value\n        if (isArrayLike && undefined === resolvedValue) {\n          newValue = resolvedValue;\n        } else if (i === keys.length - 1) {\n          // If last key, this is the final value\n          newValue = resolvedValue;\n        } else {\n          newValue = setDeep(siblings, nestedKeys, resolvedValue, options);\n        }\n\n        options.safeSet(target, prop, new Change(newValue));\n\n        // since we are done with the `path`, we can terminate the for loop and return control\n        break;\n      } else {\n        // we don't want to merge new changes with a Change instance higher up in the obj tree\n        // thus we nullify the current Change instance to\n        options.safeSet(target, prop, {});\n      }\n    }\n\n    // last iteration, set and return control\n    if (i === keys.length - 1) {\n      options.safeSet(target, prop, value);\n\n      break;\n    }\n\n    // assign next level of object for next loop\n    target = options.safeGet(target, prop);\n  }\n\n  return orig;\n}\n","import setDeep from './set-deep';\n\nconst { keys } = Object;\n\n/**\n * Given an array of objects, merge their keys into a new object and\n * return the new object.\n */\nexport default function mergeNested<T>(...objects: Array<{ [key: string]: T }>): {\n  [key: string]: T;\n} {\n  let finalObj = {};\n\n  objects.forEach((obj) => keys(obj).forEach((key) => setDeep(finalObj, key, obj[key])));\n\n  return finalObj;\n}\n","export function buildOldValues(\n  content: any,\n  changes: Record<string, any>[],\n  getDeep: (obj: any, key: string) => any\n): object {\n  const obj = Object.create(null);\n\n  for (let change of changes) {\n    obj[change.key] = getDeep(content, change.key);\n  }\n\n  return obj;\n}\n","import { getChangeValue, isChange } from '../-private/change';\nimport normalizeObject from './normalize-object';\nimport { isArrayObject, objectToArray, arrayToObject } from './array-object';\n\ninterface Options {\n  safeGet: any;\n  safeSet: any;\n  propertyIsUnsafe?: any;\n  getKeys?: (record: Record<string, unknown>) => string[];\n}\n\nfunction isNonNullObject(value: any): boolean {\n  return !!value && typeof value === 'object';\n}\n\nfunction isSpecial(value: any): boolean {\n  let stringValue = Object.prototype.toString.call(value);\n\n  return stringValue === '[object RegExp]' || stringValue === '[object Date]';\n}\n\nfunction isMergeableObject(value: any): boolean {\n  return isNonNullObject(value) && !isSpecial(value);\n}\n\nfunction getEnumerableOwnPropertySymbols(target: any): any {\n  return Object.getOwnPropertySymbols\n    ? Object.getOwnPropertySymbols(target).filter((symbol) => {\n        return target.propertyIsEnumerable(symbol);\n      })\n    : [];\n}\n\nfunction getKeys(target: any) {\n  return Object.keys(target).concat(getEnumerableOwnPropertySymbols(target));\n}\n\nfunction propertyIsOnObject(object: any, property: any) {\n  try {\n    return property in object;\n  } catch (_) {\n    return false;\n  }\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nexport function propertyIsUnsafe(target: any, key: string): boolean {\n  return (\n    propertyIsOnObject(target, key) && // Properties are safe to merge if they don't exist in the target yet,\n    // unsafe if they exist up the prototype chain and also unsafe if they're nonenumerable.\n    !(Object.hasOwnProperty.call(target, key) && Object.propertyIsEnumerable.call(target, key))\n  );\n}\n\n/**\n * DFS - traverse depth first until find object with `value`.  Then go back up tree and try on next key\n * Need to exhaust all possible avenues.\n *\n * @method buildPathToValue\n */\nfunction buildPathToValue(\n  source: any,\n  options: Options,\n  kv: Record<string, any>,\n  possibleKeys: string[]\n): Record<string, any> {\n  Object.keys(source).forEach((key: string): void => {\n    let possible = source[key];\n    if (possible && isChange(possible)) {\n      kv[[...possibleKeys, key].join('.')] = getChangeValue(possible);\n      return;\n    }\n\n    if (possible && typeof possible === 'object') {\n      buildPathToValue(possible, options, kv, [...possibleKeys, key]);\n    }\n  });\n\n  return kv;\n}\n\n/**\n * `source` will always have a leaf key `value` with the property we want to set\n *\n * @method mergeTargetAndSource\n */\nfunction mergeTargetAndSource(target: any, source: any, options: Required<Options>): any {\n  options.getKeys(source).forEach((key) => {\n    // proto poisoning.  So can set by nested key path 'person.name'\n    if (options.propertyIsUnsafe(target, key)) {\n      // if safeSet, we will find keys leading up to value and set\n      if (options.safeSet) {\n        const kv: Record<string, any> = buildPathToValue(source, options, {}, []);\n        // each key will be a path nested to the value `person.name.other`\n        if (Object.keys(kv).length > 0) {\n          // we found some keys!\n          for (key in kv) {\n            const val = kv[key];\n            options.safeSet(target, key, val);\n          }\n        }\n      }\n\n      return;\n    }\n\n    // else safe key on object\n    if (\n      propertyIsOnObject(target, key) &&\n      isMergeableObject(source[key]) &&\n      !isChange(source[key])\n    ) {\n      options.safeSet(\n        target,\n        key,\n        mergeDeep(options.safeGet(target, key), options.safeGet(source, key), options)\n      );\n    } else {\n      let next = source[key];\n      if (next && isChange(next)) {\n        return options.safeSet(target, key, getChangeValue(next));\n      }\n\n      return options.safeSet(target, key, normalizeObject(next));\n    }\n  });\n\n  return target;\n}\n\n/**\n * goal is to mutate target with source's properties, ensuring we dont encounter\n * pitfalls of { ..., ... } spread syntax overwriting keys on objects that we merged\n *\n * This is also adjusted for Ember peculiarities.  Specifically `options.setPath` will allows us\n * to handle properties on Proxy objects (that aren't the target's own property)\n *\n * @method mergeDeep\n */\nexport default function mergeDeep(\n  target: any,\n  source: any,\n  options: Options = {\n    safeGet: undefined,\n    safeSet: undefined,\n    propertyIsUnsafe: undefined,\n    getKeys: undefined\n  }\n): object | [any] {\n  options.getKeys = options.getKeys || getKeys;\n  options.propertyIsUnsafe = options.propertyIsUnsafe || propertyIsUnsafe;\n\n  options.safeGet =\n    options.safeGet ||\n    function (obj: Record<string, any>, key: string): Record<string, any> {\n      return obj[key];\n    };\n  options.safeSet =\n    options.safeSet ||\n    function (obj: any, key: string, value: unknown): any {\n      return (obj[key] = value);\n    };\n  let sourceIsArray = Array.isArray(source);\n  let targetIsArray = Array.isArray(target);\n  let sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n  if (!sourceAndTargetTypesMatch) {\n    let sourceIsArrayLike = isArrayObject(source);\n\n    if (targetIsArray && sourceIsArrayLike) {\n      return objectToArray(\n        mergeTargetAndSource(arrayToObject(target), source, options as Required<Options>)\n      );\n    }\n\n    return source;\n  } else if (sourceIsArray) {\n    return source;\n  } else if (target === null || target === undefined) {\n    /**\n     * If the target was set to null or undefined, we always want to return the source.\n     * There is nothing to merge.\n     *\n     * Without this explicit check, typeof null === typeof {any object-like thing}\n     * which means that mergeTargetAndSource will be called, and you can't merge with null\n     */\n    return source;\n  } else {\n    return mergeTargetAndSource(target, source, options as Required<Options>);\n  }\n}\n","import type { ProxyHandler, Content } from '../types';\nimport isObjectFn from './is-object';\nimport setDeep from './set-deep';\nimport Change, { getChangeValue, isChange } from '../-private/change';\nimport normalizeObject from './normalize-object';\nimport { objectToArray, arrayToObject } from './array-object';\nimport mergeDeep from './merge-deep';\n\nconst objectProxyHandler = {\n  /**\n   * Priority of access - changes, content, then check node\n   * @property get\n   */\n  get(node: ProxyHandler, key: string): any {\n    if (typeof key === 'symbol') {\n      return;\n    }\n\n    let childValue = node.safeGet(node.changes, key);\n\n    if (isChange(childValue)) {\n      return getChangeValue(childValue);\n    }\n\n    if (isObjectFn(childValue)) {\n      let childNode: ProxyHandler | undefined = node.children[key];\n\n      if (childNode === undefined && node.content) {\n        let childContent = node.safeGet(node.content, key);\n        // cache it\n        childNode = node.children[key] = new ObjectTreeNode(childValue, childContent, node.safeGet);\n      }\n\n      // return proxy if object so we can trap further access to changes or content\n      if (childNode) {\n        return childNode.proxy;\n      }\n    }\n\n    if (typeof childValue !== 'undefined') {\n      // primitive\n      return childValue;\n    } else if (node.content) {\n      const nodeContent = node.content;\n      if (node.safeGet(nodeContent, key) !== undefined) {\n        return node.safeGet(nodeContent, key);\n      }\n    }\n\n    if (typeof node[key] === 'function' || node.hasOwnProperty(key)) {\n      return node[key];\n    }\n  },\n\n  ownKeys(node: ProxyHandler): any {\n    return Reflect.ownKeys(node.changes);\n  },\n\n  getOwnPropertyDescriptor(node: ProxyHandler, prop: string): any {\n    return Reflect.getOwnPropertyDescriptor(node.changes, prop);\n  },\n\n  has(node: ProxyHandler, prop: string): any {\n    return Reflect.has(node.changes, prop);\n  },\n\n  set(node: ProxyHandler, key: string, value: unknown): any {\n    // dont want to set private properties on changes (usually found on outside actors)\n    if (key.startsWith('_')) {\n      return Reflect.set(node, key, value);\n    }\n    return Reflect.set(node.changes, key, new Change(value));\n  }\n};\n\nfunction defaultSafeGet(obj: Record<string, any>, key: string) {\n  return obj[key];\n}\n\nclass ObjectTreeNode implements ProxyHandler {\n  changes: Record<string, any>;\n  content: Content;\n  proxy: any;\n  children: Record<string, any>;\n\n  constructor(\n    changes: Record<string, any> = {},\n    content: Content = {},\n    public safeGet: (obj: any, key: string) => any = defaultSafeGet,\n    public isObject: (...args: unknown[]) => unknown = isObjectFn\n  ) {\n    this.changes = changes;\n    this.content = content;\n    this.proxy = new Proxy(this, objectProxyHandler);\n    this.children = Object.create(null);\n  }\n\n  get(key: string) {\n    return this.safeGet(this.changes, key);\n  }\n\n  set(key: string, value: unknown) {\n    return setDeep(this.changes, key, value);\n  }\n\n  unwrap(): Record<string, any> {\n    let changes = this.changes;\n\n    if (isObjectFn(changes)) {\n      changes = normalizeObject(changes, this.isObject);\n\n      const content = this.content;\n      if (isObjectFn(content)) {\n        changes = normalizeObject(changes, this.isObject);\n        return { ...content, ...changes };\n      } else if (Array.isArray(content)) {\n        changes = normalizeObject(changes, this.isObject);\n\n        return objectToArray(mergeDeep(arrayToObject(content), changes));\n      }\n    }\n\n    return changes;\n  }\n}\n\nexport { ObjectTreeNode };\n","/**\n * Merges all sources together, excluding keys in excludedKeys.\n *\n * @param  {string[]} excludedKeys\n * @param  {...object} sources\n * @return {object}\n */\nexport default function objectWithout(excludedKeys: string[], ...sources: any[]): any {\n  return sources.reduce((acc: Record<string, any>, source: any): object => {\n    Object.keys(source)\n      .filter((key) => excludedKeys.indexOf(key) === -1 || !source.hasOwnProperty(key))\n      .forEach((key) => (acc[key] = source[key]));\n    return acc;\n  }, {});\n}\n","import Change, { getChangeValue, isChange } from './-private/change';\nimport { getKeyValues, getKeyErrorValues } from './utils/get-key-values';\nimport { notifierForEvent } from './-private/evented';\nimport Err from './-private/err';\nimport { hasKey, pathInChanges } from './utils/has-key';\nimport normalizeObject from './utils/normalize-object';\nimport { hasChanges } from './utils/has-changes';\nimport pureAssign from './utils/assign';\nimport { CHANGESET } from './utils/is-changeset';\nimport isObject from './utils/is-object';\nimport keyInObject from './utils/key-in-object';\nimport { buildOldValues } from './utils/build-old-values';\nimport { ObjectTreeNode } from './utils/object-tree-node';\nimport mergeDeep from './utils/merge-deep';\nimport setDeep from './utils/set-deep';\nimport getDeep, { getSubObject } from './utils/get-deep';\nimport { objectToArray, arrayToObject } from './utils/array-object';\nimport structuredClone from '@ungap/structured-clone';\n\nimport type {\n  Changes,\n  Config,\n  Content,\n  Errors,\n  IErr,\n  INotifier,\n  InternalMap,\n  NewProperty,\n  Snapshot,\n  ValidationErr\n} from './types';\n\nconst { keys } = Object;\nconst CONTENT = '_content';\nconst PREVIOUS_CONTENT = '_previousContent';\nconst CHANGES = '_changes';\n// const ORIGINAL = '_original';\nconst ERRORS = '_errors';\nconst ERRORS_CACHE = '_errorsCache';\nconst OPTIONS = '_options';\nconst AFTER_ROLLBACK_EVENT = 'afterRollback';\n\nconst DEBUG = process.env.NODE_ENV !== 'production';\n\nfunction assert(msg: string, property: unknown): void {\n  if (DEBUG) {\n    if (!property) {\n      throw new Error(msg);\n    }\n  }\n}\n\nfunction maybeUnwrapProxy(content: Content): any {\n  return content;\n}\n\nexport function newFormat(\n  obj: Record<string, any>[],\n  original: any,\n  getDeep: (obj: any, key: string) => any\n): Record<string, any> {\n  let newFormat: Record<string, any> = {};\n  for (let item of obj) {\n    const { key, value } = item;\n    newFormat[key] = {\n      current: value,\n      original: getDeep(original, key)\n    };\n  }\n\n  return newFormat;\n}\n\n// This is intended to provide an alternative changeset structure compatible with `yup`\n// This slims down the set of features, including removed APIs and `validate` returns just the `validate(obj)` method call and requires users to manually add errors.\nexport class ValidatedChangeset {\n  constructor(obj: object, options: Config = {}) {\n    this[CONTENT] = obj;\n    this[PREVIOUS_CONTENT] = undefined;\n    this[CHANGES] = {};\n    this[OPTIONS] = options;\n\n    this[ERRORS] = {};\n    this[ERRORS_CACHE] = {};\n  }\n\n  /**\n   * Any property that is not one of the getter/setter/methods on the\n   * BufferedProxy instance. The value type is `unknown` in order to avoid\n   * having to predefine key/value pairs of the correct types in the target\n   * object. Setting the index signature to `[key: string]: T[K]` would allow us\n   * to typecheck the value that is set on the proxy. However, no\n   * getters/setters/methods can be added to the class. This is the tradeoff\n   * we make for this particular design pattern (class based BufferedProxy).\n   */\n  [key: string]: unknown;\n  [CONTENT]: object;\n  [PREVIOUS_CONTENT]: object | undefined;\n  // [ORIGINAL]: Changes;\n  [CHANGES]: Changes;\n  [ERRORS]: Errors<any>;\n  [ERRORS_CACHE]: Errors<any>;\n  [OPTIONS]: Config;\n\n  __changeset__ = CHANGESET;\n\n  _eventedNotifiers = {};\n\n  on(eventName: string, callback: (...args: unknown[]) => unknown): INotifier {\n    const notifier = notifierForEvent(this, eventName);\n    return notifier.addListener(callback);\n  }\n\n  off(eventName: string, callback: (...args: unknown[]) => unknown): INotifier {\n    const notifier = notifierForEvent(this, eventName);\n    return notifier.removeListener(callback);\n  }\n\n  trigger(eventName: string, ...args: any[]): void {\n    const notifier = notifierForEvent(this, eventName);\n    if (notifier) {\n      notifier.trigger(...args);\n    }\n  }\n\n  /**\n   * @property isObject\n   * @override\n   */\n  isObject = isObject;\n\n  /**\n   * @property maybeUnwrapProxy\n   * @override\n   */\n  maybeUnwrapProxy = maybeUnwrapProxy;\n\n  /**\n   * @property setDeep\n   * @override\n   */\n  setDeep = setDeep;\n\n  /**\n   * @property getDeep\n   * @override\n   */\n  getDeep = getDeep;\n\n  /**\n   * @property mergeDeep\n   * @override\n   */\n  mergeDeep = mergeDeep;\n\n  /**\n   * @property safeGet\n   * @override\n   */\n  safeGet(obj: any, key: string) {\n    return obj[key];\n  }\n\n  /**\n   * @property safeSet\n   * @override\n   */\n  safeSet(obj: any, key: string, value: unknown) {\n    return (obj[key] = value);\n  }\n\n  /**\n   * @property changes\n   * @type {Array}\n   */\n  get changes() {\n    let obj = this[CHANGES];\n    let original = this[CONTENT];\n\n    // foo: {\n    //  original: 0,\n    //  current: 1,\n    // }\n    return newFormat(getKeyValues(obj), original, this.getDeep);\n  }\n\n  /**\n   * @property errors\n   * @type {Array}\n   */\n  get errors() {\n    let obj = this[ERRORS];\n\n    return getKeyErrorValues(obj);\n  }\n\n  get change() {\n    let obj: Changes = this[CHANGES];\n    if (hasChanges(this[CHANGES])) {\n      return normalizeObject(obj);\n    }\n\n    return {};\n  }\n\n  get error() {\n    return this[ERRORS];\n  }\n\n  get data() {\n    return this[CONTENT];\n  }\n\n  /**\n   * @property isValid\n   * @type {Array}\n   */\n  get isValid() {\n    return getKeyErrorValues(this[ERRORS]).length === 0;\n  }\n  /**\n   * @property isPristine\n   * @type {Boolean}\n   */\n  get isPristine() {\n    let validationKeys = Object.keys(this[CHANGES]);\n    const userChangesetKeys: string[] | undefined = this[OPTIONS].changesetKeys;\n    if (Array.isArray(userChangesetKeys) && userChangesetKeys.length) {\n      validationKeys = validationKeys.filter((k) => userChangesetKeys.includes(k));\n    }\n\n    if (validationKeys.length === 0) {\n      return true;\n    }\n\n    return !hasChanges(this[CHANGES]);\n  }\n  /**\n   * @property isInvalid\n   * @type {Boolean}\n   */\n  get isInvalid() {\n    return !this.isValid;\n  }\n  /**\n   * @property isDirty\n   * @type {Boolean}\n   */\n  get isDirty() {\n    return !this.isPristine;\n  }\n\n  /**\n   * Stores change on the changeset.\n   * This approximately works just like the Ember API\n   *\n   * @method setUnknownProperty\n   */\n  setUnknownProperty<T>(key: string, value: T): void {\n    let config: Config = this[OPTIONS];\n    let changesetKeys = config.changesetKeys;\n    if (Array.isArray(changesetKeys) && changesetKeys.length > 0) {\n      const hasKey = changesetKeys.find((chKey) => key.match(chKey));\n      if (!hasKey) {\n        return;\n      }\n    }\n\n    let content: Content = this[CONTENT];\n    let oldValue = this.safeGet(content, key);\n\n    this._setProperty({ key, value, oldValue });\n  }\n\n  /**\n   * String representation for the changeset.\n   */\n  get [Symbol.toStringTag](): string {\n    let normalisedContent: object = pureAssign(this[CONTENT], {});\n    return `changeset:${normalisedContent.toString()}`;\n  }\n\n  /**\n   * String representation for the changeset.\n   */\n  toString(): string {\n    let normalisedContent: object = pureAssign(this[CONTENT], {});\n    return `changeset:${normalisedContent.toString()}`;\n  }\n\n  /**\n   * Executes the changeset if in a valid state.\n   *\n   * @method execute\n   */\n  execute(): this {\n    let oldContent;\n    if (this.isValid && this.isDirty) {\n      let content: Content = this[CONTENT];\n      let changes: Changes = this[CHANGES];\n\n      // keep old values in case of error and we want to rollback\n      oldContent = buildOldValues(content, getKeyValues(changes), this.getDeep);\n\n      // we want mutation on original object\n      // @tracked\n      this[CONTENT] = this.mergeDeep(content, changes, {\n        safeGet: this.safeGet,\n        safeSet: this.safeSet\n      });\n    }\n\n    // trigger any registered callbacks by same keyword as method name\n    this.trigger('execute');\n\n    this[CHANGES] = {};\n    this[PREVIOUS_CONTENT] = oldContent;\n\n    return this;\n  }\n\n  unexecute(): this {\n    if (this[PREVIOUS_CONTENT]) {\n      this[CONTENT] = this.mergeDeep(this[CONTENT], this[PREVIOUS_CONTENT], {\n        safeGet: this.safeGet,\n        safeSet: this.safeSet\n      });\n    }\n\n    return this;\n  }\n\n  /**\n   * Returns the changeset to its pristine state, and discards changes and\n   * errors.\n   *\n   * @method rollback\n   */\n  rollback(): this {\n    // Get keys before reset.\n    let keys = this._rollbackKeys();\n\n    // Reset.\n    this[CHANGES] = {};\n    this[ERRORS] = {};\n    this[ERRORS_CACHE] = {};\n    this._notifyVirtualProperties(keys);\n\n    this.trigger(AFTER_ROLLBACK_EVENT);\n    return this;\n  }\n\n  /**\n   * Discards any errors, keeping only valid changes.\n   *\n   * @public\n   * @chainable\n   * @method rollbackInvalid\n   * @param {String} key optional key to rollback invalid values\n   * @return {Changeset}\n   */\n  rollbackInvalid(key: string | void): this {\n    let errorKeys = keys(this[ERRORS]);\n\n    if (key) {\n      this._notifyVirtualProperties([key]);\n      // @tracked\n      this[ERRORS] = this._deleteKey(ERRORS, key) as Errors<any>;\n      this[ERRORS_CACHE] = this[ERRORS];\n      if (errorKeys.indexOf(key) > -1) {\n        this[CHANGES] = this._deleteKey(CHANGES, key) as Changes;\n      }\n    } else {\n      this._notifyVirtualProperties();\n      this[ERRORS] = {};\n      this[ERRORS_CACHE] = this[ERRORS];\n\n      // if on CHANGES hash, rollback those as well\n      errorKeys.forEach((errKey) => {\n        this[CHANGES] = this._deleteKey(CHANGES, errKey) as Changes;\n      });\n    }\n\n    return this;\n  }\n\n  /**\n   * @method validate\n   */\n  async validate(cb: (changes: Record<string, any>) => unknown): Promise<any> {\n    const changes = this[CHANGES];\n    const content = this[CONTENT];\n\n    // return an object that does not poison original model and provides user with full set of data + changes to validate\n    return cb(this.mergeDeep(structuredClone(content), changes));\n  }\n\n  /**\n   * Manually add an error to the changeset. If there is an existing\n   * error or change for `key`, it will be overwritten.\n   *\n   * @method addError\n   */\n  addError<T>(key: string, error: IErr<T> | ValidationErr) {\n    // Construct new `Err` instance.\n    let newError;\n\n    const isIErr = <T>(error: unknown): error is IErr<T> =>\n      this.isObject(error) && !Array.isArray(error);\n    if (isIErr(error)) {\n      assert('Error must have value.', error.hasOwnProperty('value') || error.value !== undefined);\n      assert('Error must have validation.', error.hasOwnProperty('validation'));\n      newError = new Err(error.value, error.validation);\n    } else {\n      let value = this[key];\n      newError = new Err(value, error as ValidationErr);\n    }\n\n    // Add `key` to errors map.\n    let errors: Errors<any> = this[ERRORS];\n    // @tracked\n    this[ERRORS] = this.setDeep(errors, key, newError, { safeSet: this.safeSet });\n    this[ERRORS_CACHE] = this[ERRORS];\n\n    // Return passed-in `error`.\n    return newError;\n  }\n\n  /**\n   * @method removeError\n   */\n  removeError(key: string) {\n    // Remove `key` to errors map.\n    let errors: Errors<any> = this[ERRORS];\n    // @tracked\n    this[ERRORS] = this.setDeep(errors, key, null, { safeSet: this.safeSet });\n    this[ERRORS] = this._deleteKey(ERRORS, key) as Errors<any>;\n    this[ERRORS_CACHE] = this[ERRORS];\n  }\n\n  /**\n   * @method removeError\n   */\n  removeErrors() {\n    // @tracked\n    this[ERRORS] = {};\n    this[ERRORS_CACHE] = this[ERRORS];\n  }\n\n  /**\n   * Manually push multiple errors to the changeset as an array.\n   * key maybe in form 'name.short' so need to go deep\n   *\n   * @method pushErrors\n   */\n  pushErrors(key: string, ...newErrors: string[] | ValidationErr[]): IErr<any> {\n    let errors: Errors<any> = this[ERRORS];\n    let existingError: IErr<any> | Err = this.getDeep(errors, key) || new Err(null, []);\n    let validation: ValidationErr | ValidationErr[] = existingError.validation;\n    let value: any = this[key];\n\n    if (!Array.isArray(validation) && Boolean(validation)) {\n      existingError.validation = [validation];\n    }\n\n    let v = existingError.validation;\n    validation = [...v, ...newErrors];\n    let newError = new Err(value, validation);\n    // @tracked\n    this[ERRORS] = this.setDeep(errors, key as string, newError, { safeSet: this.safeSet });\n    this[ERRORS_CACHE] = this[ERRORS];\n\n    return { value, validation };\n  }\n\n  /**\n   * Creates a snapshot of the changeset's errors and changes.\n   *\n   * @method snapshot\n   */\n  snapshot(): Snapshot {\n    let changes: Changes = this[CHANGES];\n    let errors: Errors<any> = this[ERRORS];\n\n    return {\n      changes: this.getChangesForSnapshot(changes),\n\n      errors: keys(errors).reduce((newObj: Errors<any>, key: keyof Errors<any>) => {\n        let e = errors[key];\n        newObj[key] = { value: e.value, validation: e.validation };\n        return newObj;\n      }, {})\n    };\n  }\n\n  private getChangesForSnapshot(changes: Changes) {\n    return keys(changes).reduce((newObj: Changes, key: keyof Changes) => {\n      newObj[key] = isChange(changes[key])\n        ? getChangeValue(changes[key])\n        : this.getChangesForSnapshot(changes[key]);\n      return newObj;\n    }, {});\n  }\n\n  /**\n   * Restores a snapshot of changes and errors. This overrides existing\n   * changes and errors.\n   *\n   * @method restore\n   */\n  restore({ changes, errors }: Snapshot): this {\n    let newChanges: Changes = this.getChangesFromSnapshot(changes);\n\n    let newErrors: Errors<any> = keys(errors).reduce((newObj: Errors<any>, key: keyof Changes) => {\n      let e: IErr<any> = errors[key];\n      newObj[key] = new Err(e.value, e.validation);\n      return newObj;\n    }, {});\n\n    // @tracked\n    this[CHANGES] = newChanges;\n    // @tracked\n    this[ERRORS] = newErrors;\n    this[ERRORS_CACHE] = this[ERRORS];\n\n    this._notifyVirtualProperties();\n    return this;\n  }\n\n  private getChangesFromSnapshot(changes: Changes) {\n    return keys(changes).reduce((newObj, key) => {\n      newObj[key] = this.getChangeForProp(changes[key]);\n      return newObj;\n    }, {} as Changes);\n  }\n\n  private getChangeForProp(value: any) {\n    if (!isObject(value)) {\n      return new Change(value);\n    }\n\n    return keys(value).reduce((newObj, key) => {\n      newObj[key] = this.getChangeForProp(value[key]);\n      return newObj;\n    }, {} as Changes);\n  }\n\n  /**\n   * Sets property on the changeset.\n   */\n  _setProperty<T>({ key, value, oldValue }: NewProperty<T>): void {\n    let changes: Changes = this[CHANGES];\n\n    // Happy path: update change map.\n    if (!isEqual(value, oldValue) || oldValue === undefined) {\n      // @tracked\n      let result: Changes = this.setDeep(changes, key, new Change(value), {\n        safeSet: this.safeSet\n      });\n\n      this[CHANGES] = result;\n    } else if (keyInObject(changes, key)) {\n      // @tracked\n      // remove key if setting back to original\n      this[CHANGES] = this._deleteKey(CHANGES, key) as Changes;\n    }\n  }\n\n  /**\n   * Notifies virtual properties set on the changeset of a change.\n   * You can specify which keys are notified by passing in an array.\n   *\n   * @private\n   * @param {Array} keys\n   * @return {Void}\n   */\n  _notifyVirtualProperties(keys?: string[]): string[] | undefined {\n    if (!keys) {\n      keys = this._rollbackKeys();\n    }\n\n    return keys;\n  }\n\n  /**\n   * Gets the changes and error keys.\n   */\n  _rollbackKeys(): string[] {\n    let changes: Changes = this[CHANGES];\n    let errors: Errors<any> = this[ERRORS];\n    return [...new Set([...keys(changes), ...keys(errors)])];\n  }\n\n  /**\n   * Deletes a key off an object and notifies observers.\n   */\n  _deleteKey(objName: string, key = ''): InternalMap {\n    let obj = this[objName] as InternalMap;\n    let keys = key.split('.');\n\n    if (keys.length === 1 && obj.hasOwnProperty(key)) {\n      delete obj[key];\n    } else if (obj[keys[0]]) {\n      let [base, ...remaining] = keys;\n      let previousNode: { [key: string]: any } = obj;\n      let currentNode: any = obj[base];\n      let currentKey: string | undefined = base;\n\n      // find leaf and delete from map\n      while (this.isObject(currentNode) && currentKey) {\n        let curr: { [key: string]: unknown } = currentNode;\n        if (isChange(curr) || typeof curr.value !== 'undefined' || curr.validation) {\n          delete previousNode[currentKey];\n        }\n\n        currentKey = remaining.shift();\n        previousNode = currentNode;\n        if (currentKey) {\n          currentNode = currentNode[currentKey];\n        }\n      }\n    }\n\n    return obj;\n  }\n\n  get(key: string): any {\n    // 'person'\n    // 'person.username'\n    let [baseKey, ...remaining] = key.split('.');\n    let changes: Changes = this[CHANGES];\n    let content: Content = this[CONTENT];\n    if (Object.prototype.hasOwnProperty.call(changes, baseKey)) {\n      const changesValue = this.getDeep(changes, key);\n      const isObject = this.isObject(changesValue);\n\n      if (!isObject && changesValue !== undefined) {\n        // if safeGet returns a primitive, then go ahead return\n        return changesValue;\n      }\n    }\n    // At this point, we may have a changes object, a dot separated key, or a need to access the `key`\n    // on `this` or `content`\n    if (Object.prototype.hasOwnProperty.call(changes, baseKey) && hasChanges(changes)) {\n      let baseChanges = changes[baseKey];\n\n      // 'user.name'\n      const normalizedBaseChanges = normalizeObject(baseChanges);\n      if (this.isObject(normalizedBaseChanges)) {\n        const result = this.maybeUnwrapProxy(\n          this.getDeep(normalizedBaseChanges, remaining.join('.'))\n        );\n\n        // need to do this inside of Change object\n        // basically anything inside of a Change object that is undefined means it was removed\n        if (\n          typeof result === 'undefined' &&\n          pathInChanges(changes, key, this.safeGet) &&\n          !hasKey(changes, key, this.safeGet) &&\n          this.getDeep(content, key)\n        ) {\n          return;\n        }\n\n        if (this.isObject(result)) {\n          if (isChange(result)) {\n            return getChangeValue(result);\n          }\n\n          const baseContent = this.safeGet(content, baseKey) || {};\n          const subContent = this.getDeep(baseContent, remaining.join('.'));\n          const subChanges = getSubObject(changes, key);\n          // give back an object that can further retrieve changes and/or content\n          const tree = new ObjectTreeNode(subChanges, subContent, this.getDeep, this.isObject);\n          return tree.proxy;\n        } else if (typeof result !== 'undefined') {\n          return result;\n        }\n      }\n\n      // this comes after the isObject check to ensure we don't lose remaining keys\n      if (isChange(baseChanges) && remaining.length === 0) {\n        return getChangeValue(baseChanges);\n      }\n    }\n\n    // return getters/setters/methods on BufferedProxy instance\n    if (baseKey in this || key in this) {\n      return this.getDeep(this, key);\n    }\n\n    const subContent = this.maybeUnwrapProxy(this.getDeep(content, key));\n    if (this.isObject(subContent)) {\n      let subChanges = this.getDeep(changes, key);\n      if (!subChanges) {\n        // if no changes, we need to add the path to the existing changes (mutate)\n        // so further access to nested keys works\n        subChanges = this.getDeep(this.setDeep(changes, key, {}), key);\n      }\n\n      // may still access a value on the changes or content objects\n      const tree = new ObjectTreeNode(subChanges, subContent, this.getDeep, this.isObject);\n      return tree.proxy;\n    } else if (Array.isArray(subContent)) {\n      let subChanges = this.getDeep(changes, key);\n      if (!subChanges) {\n        // return array of contents. Dont need to worry about further access sibling keys in array case\n        return subContent;\n      }\n\n      if (isObject(subChanges)) {\n        if (isObject(subContent)) {\n          subChanges = normalizeObject(subChanges, this.isObject);\n          return { ...subContent, ...subChanges };\n        } else if (Array.isArray(subContent)) {\n          subChanges = normalizeObject(subChanges, this.isObject);\n\n          return objectToArray(mergeDeep(arrayToObject(subContent), subChanges));\n        }\n      }\n\n      return subChanges;\n    }\n\n    return subContent;\n  }\n\n  set<T>(key: string, value: T): void {\n    if (this.hasOwnProperty(key) || keyInObject(this, key)) {\n      this[key] = value;\n    } else {\n      this.setUnknownProperty(key, value);\n    }\n  }\n}\n\n/**\n * Creates new changesets.\n */\nexport function changeset(obj: object, options?: Config): ValidatedChangeset {\n  return new ValidatedChangeset(obj, options);\n}\n\ntype T20 = InstanceType<typeof ValidatedChangeset>;\n\nexport function Changeset(obj: object, options?: Config): ValidatedChangeset {\n  const c: ValidatedChangeset = changeset(obj, options);\n\n  return new Proxy(c, {\n    get(targetBuffer, key /*, receiver*/) {\n      const res = targetBuffer.get(key.toString());\n      return res;\n    },\n\n    set(targetBuffer, key, value /*, receiver*/) {\n      targetBuffer.set(key.toString(), value);\n      return true;\n    }\n  }) as T20;\n}\n\n// determine if two values are equal\nfunction isEqual(v1: unknown, v2: unknown) {\n  if (v1 instanceof Date && v2 instanceof Date) {\n    return v1.getTime() === v2.getTime();\n  }\n\n  return v1 === v2;\n}\n","export default function take(\n  originalObj: { [key: string]: any } = {},\n  keysToTake: string[] = []\n): { [key: string]: any } {\n  let newObj: { [key: string]: any } = {};\n\n  for (let key in originalObj) {\n    if (keysToTake.indexOf(key) !== -1) {\n      newObj[key] = originalObj[key];\n    }\n  }\n\n  return newObj;\n}\n","function _applyDecoratedDescriptor(i, e, r, n, l) {\n  var a = {};\n  return Object.keys(n).forEach(function (i) {\n    a[i] = n[i];\n  }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) {\n    return n(i, e, r) || r;\n  }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer && (Object.defineProperty(i, e, a), a = null), a;\n}\nexport { _applyDecoratedDescriptor as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n  return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n    value: t,\n    enumerable: !0,\n    configurable: !0,\n    writable: !0\n  }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n  var i = toPrimitive(t, \"string\");\n  return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n  if (\"object\" != _typeof(t) || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r || \"default\");\n    if (\"object\" != _typeof(i)) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","function _initializerDefineProperty(e, i, r, l) {\n  r && Object.defineProperty(e, i, {\n    enumerable: r.enumerable,\n    configurable: r.configurable,\n    writable: r.writable,\n    value: r.initializer ? r.initializer.call(l) : void 0\n  });\n}\nexport { _initializerDefineProperty as default };","function _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n  }, _typeof(o);\n}\nexport { _typeof as default };","export interface Descriptor {\n  configurable?: boolean;\n  enumerable?: boolean;\n  writable?: boolean;\n  get?(): any;\n  set?(v: any): void;\n  initializer?: null | (() => any);\n  value?: any;\n}\nexport type LegacyDecorator = (\n  target: object,\n  prop: unknown,\n  desc: Descriptor\n) => Descriptor | null | undefined | void;\n\nexport type LegacyClassDecorator = (target: new (...args: any) => any) =>\n  | {\n      new (...args: any): any;\n    }\n  | null\n  | undefined\n  | void;\n\nconst deferred: WeakMap<\n  object,\n  Map<string | number | symbol, Descriptor>\n> = new WeakMap();\n\nfunction deferDecorator(\n  proto: object,\n  prop: string | number | symbol,\n  desc: Descriptor\n): void {\n  let map = deferred.get(proto);\n  if (!map) {\n    map = new Map();\n    deferred.set(proto, map);\n  }\n  map.set(prop, desc);\n}\n\nfunction findDeferredDecorator(\n  target: object,\n  prop: string | number | symbol\n): Descriptor | undefined {\n  let cursor: object = (target as any).prototype;\n  while (cursor) {\n    let desc = deferred.get(cursor)?.get(prop);\n    if (desc) {\n      return desc;\n    }\n    cursor = (cursor as any).prototype;\n  }\n}\n\nfunction decorateFieldV1(\n  target: { prototype: object },\n  prop: string | number | symbol,\n  decorators: LegacyDecorator[],\n  initializer?: () => any\n): void {\n  return decorateFieldV2(target.prototype, prop, decorators, initializer);\n}\n\nfunction decorateFieldV2(\n  prototype: object,\n  prop: string | number | symbol,\n  decorators: LegacyDecorator[],\n  initializer?: () => any\n): void {\n  let desc: Descriptor = {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null,\n  };\n  if (initializer) {\n    desc.initializer = initializer;\n  }\n  for (let decorator of decorators) {\n    desc = decorator(prototype, prop, desc) || desc;\n  }\n  if (desc.initializer === undefined) {\n    Object.defineProperty(prototype, prop, desc);\n  } else {\n    deferDecorator(prototype, prop, desc);\n  }\n}\n\nfunction decorateMethodV1(\n  { prototype }: { prototype: object },\n  prop: string | number | symbol,\n  decorators: LegacyDecorator[]\n): void {\n  return decorateMethodV2(prototype, prop, decorators);\n}\n\nfunction decorateMethodV2(\n  prototype: object,\n  prop: string | number | symbol,\n  decorators: LegacyDecorator[]\n): void {\n  const origDesc = Object.getOwnPropertyDescriptor(prototype, prop);\n  let desc: Descriptor = { ...origDesc };\n  for (let decorator of decorators) {\n    desc = decorator(prototype, prop, desc) || desc;\n  }\n  if (desc.initializer !== undefined) {\n    desc.value = desc.initializer ? desc.initializer.call(prototype) : void 0;\n    desc.initializer = undefined;\n  }\n  Object.defineProperty(prototype, prop, desc);\n}\n\nfunction initializeDeferredDecorator(\n  target: object,\n  prop: string | number | symbol\n): void {\n  let desc = findDeferredDecorator(target.constructor, prop);\n  if (desc) {\n    Object.defineProperty(target, prop, {\n      enumerable: desc.enumerable,\n      configurable: desc.configurable,\n      writable: desc.writable,\n      value: desc.initializer ? desc.initializer.call(target) : undefined,\n    });\n  }\n}\n\nfunction decorateClass(\n  target: new (...args: any) => any,\n  decorators: LegacyClassDecorator[]\n): new (...args: any) => any {\n  return decorators.reduce(\n    (accum, decorator) => decorator(accum) || accum,\n    target\n  );\n}\n\nfunction decoratePOJO(\n  pojo: object,\n  decorated: [\"field\" | \"method\", string | number | symbol, LegacyDecorator[]][]\n) {\n  for (let [type, prop, decorators] of decorated) {\n    if (type === \"field\") {\n      decoratePojoField(pojo, prop, decorators);\n    } else {\n      decorateMethodV2(pojo, prop, decorators);\n    }\n  }\n  return pojo;\n}\nfunction decoratePojoField(\n  pojo: object,\n  prop: string | number | symbol,\n  decorators: LegacyDecorator[]\n) {\n  let desc: Descriptor = {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: () => Object.getOwnPropertyDescriptor(pojo, prop)?.value,\n  };\n  for (let decorator of decorators) {\n    desc = decorator(pojo, prop, desc) || desc;\n  }\n  if (desc.initializer) {\n    desc.value = desc.initializer.call(pojo);\n    delete desc.initializer;\n  }\n  Object.defineProperty(pojo, prop, desc);\n}\n\nexport {\n  decorateFieldV1 as f,\n  decorateFieldV2 as g,\n  decorateMethodV1 as m,\n  decorateMethodV2 as n,\n  initializeDeferredDecorator as i,\n  decorateClass as c,\n  decoratePOJO as p,\n};\n"],"names":["Constants","urls","home","company","products","applications","designCenter","education","support","sitemap","legal","accessibility","privacyPolicy","privacySettings","cookieSettings","TEMPLATE","createTemplateFactory","scope","t_","t_0","AditoolsHeader","Component","constructor","owner","args","super","_defineProperty","_siteURL","this","siteURL","_locale","locale","title","logoClass","logo","companyURL","replace","productsURL","applicationsURL","designCenterURL","educationURL","supportURL","homeURL","setComponentTemplate","AditoolsStudioDropdown","arguments","AditoolsRenderer","_toolUrls","toolUrls","insertedMenu","element","precisionStudioMenu","PrecisionStudioMenu","toolurls","attach","destroyingMenu","detach","undefined","_AditoolsStudioDropdown","n","prototype","action","helper","params","i","len","length","truthConvert","min","Math","max","round","createCoords","floor","v","x","y","oppositeSideMap","left","right","bottom","top","oppositeAlignmentMap","start","end","clamp","value","evaluate","param","getSide","placement","split","getAlignment","getOppositeAxis","axis","getAxisLength","getSideAxis","includes","getAlignmentAxis","getOppositeAlignmentPlacement","alignment","getOppositePlacement","side","rectToClientRect","rect","width","height","computeCoordsFromPlacement","_ref","rtl","reference","floating","sideAxis","alignmentAxis","alignLength","isVertical","commonX","commonY","commonAlign","coords","async","detectOverflow","state","options","_await$platform$isEle","platform","rects","elements","strategy","boundary","rootBoundary","elementContext","altBoundary","padding","paddingObject","expandPaddingObject","getPaddingObject","clippingClientRect","getClippingRect","isElement","contextElement","getDocumentElement","offsetParent","getOffsetParent","offsetScale","getScale","elementClientRect","convertOffsetParentRelativeRectToViewportRelativeRect","getNodeName","node","isNode","nodeName","toLowerCase","getWindow","_node$ownerDocument","ownerDocument","defaultView","window","document","documentElement","Node","Element","isHTMLElement","HTMLElement","isShadowRoot","ShadowRoot","isOverflowElement","overflow","overflowX","overflowY","display","getComputedStyle","test","isTableElement","isTopLayer","some","selector","matches","e","isContainingBlock","elementOrCss","webkit","isWebKit","css","transform","perspective","containerType","backdropFilter","filter","willChange","contain","CSS","supports","isLastTraversableNode","getNodeScroll","scrollLeft","scrollTop","scrollX","scrollY","getParentNode","result","assignedSlot","parentNode","host","getNearestOverflowAncestor","body","getOverflowAncestors","list","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","frameElement","getFrameElement","concat","visualViewport","parent","Object","getPrototypeOf","getCssDimensions","parseFloat","hasOffset","offsetWidth","offsetHeight","shouldFallback","$","unwrapElement","domElement","getBoundingClientRect","Number","isFinite","noOffsets","getVisualOffsets","offsetLeft","offsetTop","includeScale","isFixedStrategy","clientRect","scale","visualOffsets","isFixed","floatingOffsetParent","shouldAddVisualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","clientLeft","paddingLeft","clientTop","paddingTop","getWindowScrollBarX","getClientRectFromClippingAncestor","clippingAncestor","html","clientWidth","clientHeight","visualViewportBased","getViewportRect","scroll","scrollWidth","scrollHeight","direction","getDocumentRect","getInnerBoundingClientRect","hasFixedPositionAncestor","stopNode","position","getRectRelativeToOffsetParent","isOffsetParentAnElement","offsets","offsetRect","isStaticPositioned","getTrueOffsetParent","polyfill","svgOffsetParent","currentNode","getContainingBlock","topLayer","clippingAncestors","cache","cachedResult","get","el","currentContainingBlockComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","ancestor","set","getClippingElementAncestors","_c","firstClippingAncestor","clippingRect","reduce","accRect","getElementRects","data","getOffsetParentFn","getDimensionsFn","getDimensions","floatingDimensions","getClientRects","Array","from","isRTL","ToggleEvent","Event","type","oldState","newState","init","String","popoverToggleTaskQueue","WeakMap","queuePopoverToggleEventTask","setTimeout","has","dispatchEvent","cancelable","globalThis","HTMLDialogElement","topLayerElements","autoPopoverList","visibilityState","getPopoverVisibilityState","popover","popoverInvoker","checkPopoverValidity","expectedToBeShowing","isConnected","hasAttribute","fullscreenElement","getStackPosition","indexOf","topMostAutoPopover","document2","documentPopovers","delete","getRootNode","nearestInclusiveOpenPopover","parentElement","Document","isFocusable","focusTarget","hidden","HTMLButtonElement","HTMLInputElement","HTMLSelectElement","HTMLTextAreaElement","HTMLOptGroupElement","HTMLOptionElement","HTMLFieldSetElement","disabled","HTMLAnchorElement","href","tabIndex","previouslyFocusedElements","showPopover","shouldRestoreFocus","originalType","getAttribute","hideAllPopoversUntil","newPopover","popoverPositions","Map","topMostPopoverAncestor2","candidate","candidateAncestor","candidatePosition","checkAncestor","topMostPopoverAncestor","originallyFocusedElement","activeElement","_focusDelegate","classList","add","Set","shadowRoot","delegatesFocus","whereToLook","autoFocusDelegate","querySelector","slots","querySelectorAll","slot","assignedElements","flatten","walker","createTreeWalker","NodeFilter","SHOW_ELEMENT","descendant","nextNode","focusDelegate","focus","setInvokerAriaExpanded","hidePopover","_topLayerElements$get","_autoPopoverList$get","focusPreviousElement","fireEvents","remove","previouslyFocusedElement","closeAllOpenPopovers","endpoint","lastToHide","foundEndpoint","_autoPopoverList$get2","size","popoverPointerDownTargets","lightDismissOpenPopovers","event","isTrusted","target","composedPath","clickedPopover","invokerPopover","nodePopover","popoverTargetElement","nearestInclusiveTargetPopoverForInvoker","topMostClickedPopover","sameTarget","initialAriaExpandedValue","force","setAttribute","initialValue","removeAttribute","ShadowRoot2","patchSelectorFn","object","name","mapper","original","defineProperty","call","nonEscapedPopoverSelector","styles","popoverStyleSheet","injectStyles","root","CSSStyleSheet","replaceSync","sheet","createElement","textContent","head","prepend","adoptedStyleSheets","rewriteSelector","_selector","DocumentFragment","defineProperties","enumerable","configurable","togglePopover","originalAttachShadow","attachShadow","writable","originalAttachInternals","attachInternals","internals","popoverTargetAssociatedElements","applyPopoverInvokerElementMixin","ElementClass","targetElement","TypeError","localName","form","idref","getElementById","popoverTargetAction","addEventListener","invoker","closest","visibility","popoverTargetAttributeActivationBehavior","preventDefault","key","defaultPrevented","apply","positioner","modifier","_","offset$1","flip","flip$1","positionPopover","_placement","_padding","_offset","_flip","style","middleware","push","fn","_middlewareData$offse","_middlewareData$arrow","middlewareData","diffCoords","mainAxisMulti","crossAxisMulti","rawValue","mainAxis","crossAxis","convertValueToCoords","offset","arrow","alignmentOffset","_middlewareData$flip","initialPlacement","checkMainAxis","checkCrossAxis","fallbackPlacements","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","flipAlignment","detectOverflowOptions","isBasePlacement","oppositePlacement","getExpandedPlacements","isStart","lr","rl","tb","bt","getSideList","map","getOppositeAxisPlacements","placements","overflows","overflowsData","sides","mainAlignmentSide","getAlignmentSides","every","_middlewareData$flip2","_overflowsData$filter","nextIndex","index","nextPlacement","reset","resetPlacement","d","sort","a","b","_overflowsData$map$so","acc","limiter","mainAxisCoord","crossAxisCoord","maxSide","limitedCoords","shift","computePosition","mergedOptions","platformWithCache","config","validMiddleware","Boolean","statefulPlacement","resetCount","nextX","nextY","computePosition$1","then","_ref2","assign","removeEventListener","eager","and_","not_","aditoolsPositioner_","on","hidePopoverOnClickOutside","globalClickListener","container","contains","AditoolsToolbar","hideDropdown","_currentFocus$closest","currentTarget","currentFocus","relatedTarget","_AditoolsToolbar","Cache","limit","func","store","hits","misses","purge","clear","STRING_DASHERIZE_REGEXP","STRING_CAMELIZE_REGEXP_1","decamelize","str","DECAMELIZE_CACHE","STRING_CAMELIZE_REGEXP_2","STRING_CLASSIFY_REGEXP_1","_match","_separator","chr","toUpperCase","match","STRING_CLASSIFY_REGEXP_2","STRING_CLASSIFY_REGEXP_3","STRING_UNDERSCORE_REGEXP_1","replace1","replace2","initialChar","parts","join","STRING_UNDERSCORE_REGEXP_2","UNDERSCORE_CACHE","STRING_CAPITALIZE_REGEXP","STRING_DECAMELIZE_REGEXP","underscore","eq_","AditoolsToolbarTab","qaName","tab","_isActive","AditoolsToolbarAction","_classPrivateFieldInitSpec","label","activate","isActive","onOpen","select","onSubmit","close","onClose","_AditoolsToolbarAction","g","tracked","aditoolsDialog_","_intl","_fileName","_designData","_uploadDisabled","AditoolsDialogLoad","isNone","submit","console","log","_chooseFileButtonText","chooseFileButtonText","intl","t","_loadButtonText","loadButtonText","_closeButtonText","closeButtonText","fileName","chooseFile","rootForSelection","click","getFileInfo","files","file","fileobj","fileObject","uploadDisabled","loadFile","closeDialog","selfRef","reader","FileReader","onload","designData","load","readAsText","_AditoolsDialogLoad","inject","_workingDesignName","_workingDesignDesc","_isDesignNameValid","_isDesignDescValid","AditoolsDialogSave","_designName","designName","_designDesc","designDesc","_designNameClass","designNameClass","_designDescClass","designDescClass","_saveButtonText","saveButtonText","onValueChanged","fieldName","id","toString","workingDesignName","workingDesignDesc","saveDesign","validateDesignFields","save","trim","isDesignNameValid","isDesignDescValid","_AditoolsDialogSave","_name","_email","_feedback","AditoolsFeedbackDialog","_model","model","email","feedback","isDisabled","validate","fieldProperties","hasOwnProperty","fieldPropertySafe","giveFeedback","submitFeedback","_AditoolsFeedbackDialog","aditoolsHelpDialog_","asyncAwait_","helptext_","applyExpandClick_","templateOnlyComponent","AditoolsContentWrap","aditoolsContentWrap","TabButton","enabledTabs","findIndex","item","activeTab","toTab","AditoolsFooter","sitemapURL","legalURL","accessibilityURL","privacyPolicyURL","privacySettingsURL","cookieSettingsURL","doNotAddToUrl","_AditoolsFooter","AditoolsSystemDialog","_message","message","_title","dontClose","_AditoolsSystemDialog","aditoolsHeader_","aditoolsStudioDropdown_","hash","aditoolsToolbar_","aditoolsToolbarTab_","aditoolsToolbarAction_","aditoolsDialogLoad_","aditoolsDialogSave_","aditoolsFeedbackDialog_","controlsHelpDialog_","helpitem_","aditoolsContentWrap_","tabButton_","aditoolsFooter_","aditoolsSystemDialog_","obj","validations","isChangeset","isObject","isPromise","resolved","Changeset","lookupValidator","Promise","resolve","formatter","linkFormatter","_row","_cell","_columnDef","dataContext","url","PriceFilter","defaultRelation","relation","populate","column","selection","generateDOMElement","find","val","selectQaElement","inputQaElement","update","_element$parentElemen","children","unpack","packedValues","initialValues","JSON","parse","pack","stringify","hasValue","field","fieldValue1","userEntryToNumber","fieldValue2","filterRelation","filterValueString","dotted","slice","_stripTrailingDecimal","Validation","validateFieldInput","filterValue","aditoolsDeviceTable_","asyncEditorLoading","forceFitColumns","showHeaderRow","headerRowHeight","explicitInitialization","autoHeight","multiColumnSort","multiSelect","enableColumnReorder","enableAddRow","frozenColumn","SensorSelection","_class","_initializerDefineProperty","_descriptor","_descriptor2","buildSensorSelectionData","sensorData","columns","getSensorSelectionColumns","sortable","resizable","comparator","DeviceTableComparator","textComparator","PartialTextFilter","rangeComparator","RangeFilter","engineeringComparator","EngineeringRangeValueFilter","DeviceTableFormatter","sensor","entries","part","partNumber","cost","manufacturer","packageType","spectralRange","spectralPeak","numberToUserDisplay","showZeroes","sensitivity","darkCurrent","capacitance","resistance","responseTime","reverseBreakdown","activeArea","area","viewingAngle","angle","operatingTemperature","operatingTemp","spiceFileLink","spiceFileUrl","vendorLink","partSelected","partName","selectedPart","selectEnabled","applyAndClose","selectSensor","_applyDecoratedDescriptor","service","initializer","getOwnPropertyDescriptor","engnum_","engnum_0","CurrentCalculation","_descriptor3","_descriptor4","_descriptor5","_descriptor6","_descriptor7","_descriptor8","_descriptor9","currentOfLightIntensity","intensity","selectedPartData","NaN","lightIntensityOfCurrent","current","invalidUserInput","invalidInput","invalidInputValue","invalidInputField","resetValidity","assignEnabled","invalidPeakCurrent","invalidPeakLightIntensity","enableAssignButton","lightIntensityLimits","maxValue","sensorLimits","assignPeakCurrent","peakCurrent","calculatePeakLightIntensity","peakLimits","isNaN","peakLightIntensity","eng3","calculatePeakCurrent","aditoolsCard_","controlsInput_","controlsRadioGroup_","controlsRadioItem_","dialogsSensorSelection_","dialogsCurrentCalculation_","SensorDialogsState","enableSensorSelection","sensorDialogEnabled","cancelSensorSelection","currentCalculationAccepted","currentCalcDialogEnabled","closeCurrentCalculation","acceptCurrentCalculation","Photodiode","_dec","_dec2","_class2","_descriptor10","changeset","isPositive","isNegative","invalidVr","checkValidity","invalidCd","invalidRsh","invalidIp","_this$modelService$se","modelService","sensors","rowData","forEach","validateTextField","addError","validation","canonicalize","updateVr","isInvalid","updateEnabledTabs","isCriticalError","updateBias","updateCd","updateRsh","updateIp","sensorDialogState","rollbackProperty","execute","Cd","Rsh","Ip","showCapacitanceWarning","capacitanceWarningEnabled","hideCapacitanceWarning","openSensorDialog","sensorService","systemDialogFunc","openNotification","closeSensorDialog","closeCurrentCalcDialog","didInsert_","changeset_","settingsPhotodiode_","resolveInitializer","moduleName","module","require","Error","lastIndexOf","_endsWith","suffix","App","Application","modulePrefix","podModulePrefix","Resolver","app","prefix","initializerPrefix","instanceInitializerPrefix","initializers","instanceInitializers","moduleNames","keys","requirejs","_eak_seen","registerInitializers","instanceInitializer","registerInstanceInitializers","loadInitializers","w","define","esc","_embroiderRouteBundles_","names","runningTests","default","create","controlsTooltip_","Input","hasFocusEvent","onFocusIn","onFocusOut","_tooltipModalEnabled","AditoolsHelpTooltip","_tooltip","tooltip","qaTooltipName","showTooltipClick","tooltipModalEnabled","showTooltipClose","_AditoolsHelpTooltip","aditoolsHelpTooltip_","untrack","setModifierManager","capabilities","disableAutoTracking","createModifier","installModifier","positional","named","values","updateModifier","destroyModifier","FormatMessageHelper","Helper","r","Symbol","toPrimitive","_toPrimitive","_toPropertyKey","onLocaleChanged","recompute","compute","namedOptions","positionalOptions","isEmpty","allowEmpty","formatMessage","reverse","didUpdate_","formatMessage_","stdnum_","SchematicFigure","_dec3","schematicId","isPdfFigure","page","loadSchematic","schematicName","SpiceSchematicsUtil","debug","ENV","rootURL","schematic","svgCacheService","getSVG","addSchematicLabels","capacitorsAndSpares","buildCapacitorsAndSpares","opAmp1","opAmp2","Schematic","prepare","composeCircuits","next","svgElement","whySparesText","helptext","helpText","showWhySparesDialog","insert","closeWhySparesDialog","tooltipType","tooltipText","tooltipQaName","sparesTooltipType","hasSpares","noiseGain","cf","schematicModel","stage1","warnAboutNoiseGainUnstable","opAmp","minStableGain","warnAboutLowCf","schematicValues","pdModel","pd","Vr","Bias","linkElem","siteconfig","generic","opAmp1RefText","numberChannels","opAmp1PartText","cfext","rf","stage2","rfilter","cfilter","rg","linkElem2","opAmp2RefText","opAmp2PartText","minVoltage","powerSupplyRange","maxVoltage","bom","partsToSearch","designators","ref","substituteCircuitValues","schematicsList","schematicPositions","svgWidth","capacitorSchematicList","schematicFile","Cref","C","isSecondStageUse","xCapacitorPos","BypassCapacitorText","capacitorSchematic","sparesSchematicList","OpAmp","OpAmpRef","pop","xSparePos","SparesText","WhySparesText","sparesSchematic","metaName","rawConfig","exports","decodeURIComponent","err","delay","bind","tabNames","photodiode","circuit","nextsteps","TABS","ApplicationController","Controller","_descriptor11","_descriptor12","_descriptor13","_descriptor14","_descriptor15","_descriptor16","_descriptor17","addSaveValidator","safeToSave","isSafeToSave","isTabDisabled","tabName","selectTab","how","oldTab","time","opampService","opAmps","opamps","router","transitionTo","sendTabNavigationAnalytics","analytics","loadDesign","jsonData","persistence","_result$message","status","loadDesignUnsupportedPartAnalytics","numParts","logger","updatedChangeSet","catch","error","fileDescription","sendFeedback","toolsapi","deliverFeedback","msgparams","systemDialog","enabled","adjparams","htmlSafe","notificationDialog","closeNotification","toolbarMenuClick","menuLink","toolbarLinkClickAnalytics","tablist","spliceIndex","splice","tabItem","visitedTabs","PhotodiodeController","controller","changesetObj","applicationController","validateSafeToSave","insertingPhotodiode","limits","figureClass","figures","figureTab","setupDialogFunctions","parentController","hhmmss","hour","minute","second","date","number","compact","notation","EUR","currency","minimumFractionDigits","maximumFractionDigits","USD","num","digits","supplySpace","HelpItem","topic","isFromUrl","HelpitemHelper","warn","HelptextHelper","text","keyParms","toICUMessage","fixedDigits","handleClickEvent","nextElementSibling","toggles","toggle","Router","waiter","buildWaiter","embroiderBundles","EmbroiderRouter","EmberRouter","lazyRoute","routeName","bundles","bundle","lazyEngine","engine","_engineInfoByRoute","_embroiderEngineBundles_","engineName","isEngine","_getQPMeta","handlerInfo","loaded","seenByRoute","_len","rest","_key","setupRouter","isSetup","microLib","_routerMicrolib","getRoute","isEmbroiderRouterHandler","_handlerResolver","handler","token","beginAsync","endAsync","Router$1","locationType","route","LOCALES","ApplicationRoute","Route","beforeModel","_document","lang","URLSearchParams","location","search","pdf","htmlElement","fullLanguage","defaultLanguage","configURL","endsWith","locales","FullLocale","setLocale","toolname","environment","toolsConfig","setupToolsConfig","opamp","afterModel","setupController","transition","loadTimeAnalytics","appStartDateTime","Date","getTime","cdp","getToolsConfig","IndexRoute","queryIndex","newUrl","substring","history","replaceState","PhotodiodeRoute","shoppingCartUrl","appController","controllerFor","random","uuid","CdpService","Service","AbortController","cdpSessionId","willDestroy","abortController","abort","_getFetchPromise","description","reqId","startTime","loadCDPAnalytics","sId","timeStart","pollHandler","setInterval","endTime","timeEnd","waitForPromise","fetch","signal","response","code","statusText","clearInterval","json","_applyJsonOverrides","defaultpath","forceunique","override","startsWith","_logCDPUrl","cdpUrl","getDeviceModelData","getCmsData","getPstIndex","nonRuLocale","getPstData","getPstMapping","HelpTextService","bodycache","titlestart","titleend","titlecache","bodystart","bodyend","bodyendstart","hasTitle","helpTitle","LoggingService","info","StateModel","copyState","StageCount","OpAmp1","OpAmp2","Vp","TargetSpeed","SpeedPreference","Peaking","FrequencyResponseUnit","NoiseGainUnit","RequireRecommended","FirstVisit","SelectionTableFilterOptions","filters","sortColumns","OpAmpSelectionDisplayItem","selectable","disallowed","comment","feedbackMethod","deviceStatus","ltSpice","ModelService","_descriptor18","_descriptor19","_descriptor20","_descriptor21","tryCircuitDesignResults","PhotodiodeModel","opampdbDTO","ModelError","ErrorCode","adjustSpeed","speedAltered","circuitDesignResults","opAmpSpec","getIdealOpAmp1","stagesObject","_stagesObject$stage","opAmpList","photodiodeModel","bomArr","material","prodURL","pulseResponse","graphData","ModelUtils","timeAxis","stepResponse","addMargins","riseTime","overshoot","graph","frequencyResponseVA","stages","fnAndQ","GraphCalculations","frequencyArray","frequency","magnitudeArray","magnitude","addLogMargins","fN","Q","q","frequencyResponseDb","magnitudeDbArray","spectralNoise","noiseGainVV","noiseGraphData","ymax","noiseGainDb","snr","peakSignalCurrent","peakSignalVoltage","dynamicRange","enob","minimumSignalCurrent","minPhotoCurrent","outputOffsetVoltage","outputOffset","stage1Noise","opampVoltage","noise","opAmpV","opampCurrent","opAmpI","rin","total","stage2Noise","rFilter","totalNoise","peakingLimits","availableOpAmps","biasPreference","targetSpeed","stage1OpAmpList","stage2OpAmpList","convertToOpAmpList","opampDB","opAmpItem","opAmpDbInfo","p","spice","minLimit","maxLimit","speedPreference","newValue","oldValue","newContent","content","reverseVoltage","isRangeValid","shuntResistance","peakVoltage","limitSpeed","changes","validateLoadDesign","validateModel","modelResult","_result$ErrorParamete","_result$ErrorParamete2","ErrorParameter","statusMessage","marginalStatusMessage","newLimits","newYmax","ymin","newYmin","pow","log10","limitDetails","valid","userInput","peaking","speed","cached","PST_PARAMETERS","D","t_none","c_none","optional","t_float","c_single","iBias","architecture","t_pulldown","c_multi","t_integer","s4","s1","s7","t_string","s11","s3","s14","OpampService","pstMappingPromise","cfg","pstViewPromise","cdpsource","viewsource","pst","datasource","pstData","resolvedPst","ParametricData","AdiLocale","gbw","slewRate","rOut","supplyCurrent","iNoise","vNoise","outHeadroomPlus","outHeadroomMinus","inHeadroomPlus","inHeadroomMinus","minSupplyVoltage","maxSupplyVoltage","parseInt","packageCode","vos","cCm","cDiff","vintage","price","tempRange","cfb","spiceModels","polesZeroes","cfint","PersistenceService","getDesign","normalize","getOpAmps","stage","locked","found","parsedData","Design","modelStateChangeset","frequencyResponseUnit","noiseGainUnit","errors","opAmpErrors","modelInvalid","isMarginalDesign","notRecommendedAvailable","loadDesignAnalytics","now","ticks","saveDateStamp","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","Name","Description","Tool","CreatedDate","UpdatedDate","JsonVersion","jsonStringData","blob","Blob","navigator","msSaveBlob","URL","webkitURL","downloadUrl","createObjectURL","download","revokeObjectURL","saveDesignAnalytics","SensorService","buildSensorData","modelsURL","sensorItem","packageSize","vendorDatasheetUrl","minSpecRange","maxSpecRange","minTemp","maxTemp","parameter","parameters","paramValue","basevalue","displayValue","displayvalue","mfr","generateStyleDefs","svgDomElement","styleDefs","sheets","styleSheets","csshref","origin","cssRules","selectorText","rules","j","rule","cssText","namedError","s","innerHTML","appendChild","insertBefore","firstChild","SnapShotService","convertSVGToImage","componentId","imageData","canvas","reject","svgElem","baseVal","svgString","XMLSerializer","serializeToString","ctx","getContext","DOMURL","img","Image","svg","drawImage","toDataURL","format","src","convertHTMLToImage","svgItemList","svgItem","htmlItem","Html2ToCanvas","SvgCacheService","_loadSVG","path","Circuits","ToolsAPIService","getResponse","process","headers","Accept","method","downloadDesign","processWord","encodeURIComponent","ok","contentType","contentDisposition","exec","responseBlob","feedbackData","ToolId","Email","Feedback","shareDesign","sender","recipients","design","shareData","FileName","DesignData","Version","EmailRecipients","SenderName","getElapsedInformation","currTime","endDateTime","buildAnalyticsData","payload","sliderValue","toPrecision","newTab","trigger","eventName","payloadText","setWebEvent","startDate","endDate","downloadDesignAnalytics","loadDate","designDescription","toolName","shareDesignAnalytics","senderName","emailRecipients","projectData","sendOpenCloseDialogAnalytics","control","step","substr","toISOString","ROOT_URL","COVER_IMAGE_RESOURCE","cleanImage","image","imageString","generatePDFTitlePageDescription","userNameString","pdfDate","titlePageText","isNullOrWhiteSpace","user","desc","bomForPDF","bomArray","count","package","tolerance","getFullSensorName","sensorList","sensorName","createCsvData","columnSelectors","rows","headerdata","header","rowIndex","row","columnSelector","cellValue","buildDesignFile","buildPDFData","imageList","filesToUpload","pdfData","dictionary","applicationDisplayName","userName","heading","subheading","fields","images","designInfo","dataSheetUrl","bomTableData","buildPDFBinaryData","fonts","imagesList","bomTable","bomData","columnWidths","coverImage","readAsDataURL","onloadend","coverImageData","pdfReport","PDFReport","addTitlePage","atob","addDataPage","addImagePage","addTablePage","toBlob","buildBOMData","bomDownloadData","bomItem","bomItemCopy","pkg","quantity","identifier","buildDataFiles","buildFrequencyResponseCSV","buildPulseResponseCSV","buildNoiseGainCSV","titles1","titles2","arrays1","oneStage","titles","arrays","buildSpectralNoiseCSV","downloadFile","fileData","success","interpretPartIndex","extras","logging","logOmissions","getIds","partId","convertedPart","mergedPart","potentialErrors","parminfo","datatype","datavalue","DataType","CardinalityType","parm","parmParts","outParm","invalidParms","missingParms","emptyParms","causes","convertMergedPartToFlatHash","getMergedPart","collectConfigData","adiLocale","configParms","staticParts","useStaticPartsData","addPart","useLocalPartsData","localParts","spiceParts","AditoolsSpiceParts","inParm","collectPstData","ignoreRX","ignoreRegEx","RegExp","configRequest","pstRequest","pstParameters","configParameters","PartIndex","ignoreInPDB","source","partIsLive","proptest","propId","isok","parameterWellFormed","sweepType","decade","linear","octave","orderedPulseParams","orderedSineParams","orderedSweepParams","orderedTransientParams","DefaultPorts","R","portCount","L","V","I","SpiceNetList","netListTemplate","_netList","_digits","netlist","getElementValue","lines","_makeLines","_findIndex","getElementPortCount","getSubcircuitPortCount","getSubcircuitName","getSubcircuitNetList","startLine","_findSubcircuitIndex","endLine","subcircuit","updateTitle","newTitle","line","updateSubcircuitName","oldName","newName","updateSubcircuitNetList","updateElementValue","ports","oldLine","newLine","_updateElementValue","updateElementValues","valuesList","updateACAnalysis","pieces","sweepTypes","_getMaxIndex","_getUpdatedValues","updateNoiseAnalysis","updateTransientAnalysis","updateDCVoltageSource","voltage","_updateDCSource","updateACVoltageSource","_updateACSource","updateSineVoltageSource","_updateSineSource","updatePulseVoltageSource","_updatePulseSource","updateDCCurrentSource","updateACCurrentSource","updateSineCurrentSource","updatePulseCurrentSource","linePattern","termBuffer","lastIndex","keyword","_value","_pieces","newValues","maxIndex","orderedList","isValid","analysisList","AC","NOISE","TRAN","INFINITY","getSchematicName","schematicBias","schematicStage","schematicVoltageFollower","getSpiceNetListFiles","pathURL","downloadType","modelFiles","downloadFiles","checkModelFiles","modelFile","macroModelInfo","macroModelInfoOpamp","getModelFile","AditoolsSpice","subcktName","getMacroModelInfo","x1","_buildXString","xString","x2","lastFloatIndex","getSchematicValues","responseLimits","minimumFrequency","xmin","maximumFrequency","xmax","minimumTimeAxis","maximumTimeAxis","getResponseLimits","cir","getTemplateFile","stageText","pulseParameters","lowValue","highValue","delayTime","fallTime","pulseWidth","period","itemValue","points","startFrequency","stopFrequency","stopTime","getModelFiles","fileHash","getModelFileForGeneric","hostname","_proxyIfLocal","extraPins","x1Items","orderedTransientParams2","directives","transientRegExp","symbolPattern","SpiceSchematic","partsData","schematicTemplate","templateParts","_partsData","_schematic","_templateParts","getSymbolValue","symbolRange","_findSymbolByInstanceName","attributeLine","_findSymbolAttributeByName","getSymbolAttribute","attribute","removeFlagElements","selectAnalysisType","analysisType","_isDirectiveLine","updateFlagName","replacementName","updateSymbol","genericPartNumber","deleteIfNotFound","rails","_untiePinsFromRails","_replaceSymbol","_tiePinsToRails","updateSymbolValue","attributePattern","newSymattr","updateSymbolAttribute","_updateSymbolAttribute","updateSubcircuitSymbol","symbolName","symbolPieces","newSymbol","updateTextContent","placeholderText","replacementText","textLines","segments","newTextContent","setSymbolAttribute","hasCarriageReturn","_addSymbolAttribute","phase","_findSimulationTypeCommand","orderedParams","_useSecondTransientSyntax","_checkParameters","_updateSimulationType","getComponentValue","valueAsString","setComponentValue","_getOffset","newPartValue","oldPartValue","startBlock","endBlock","schematicLines","_findSymbolAttributeInsertionPoint","terminator","SIMCMDS","schematicTerm","lineTerminator","bits","command","simulationPattern","newCommand","templateValue","_validateSymbolPath","templateSymbolPath","targetSymbolPath","templatePath","referenceDesignator","_getPartPieces","templateSpiceNum","_getTemplateSpiceNum","spicePart","pins","applicablePins","_getApplicablePins","pin","pinOffset","_determineSymbolPinAdjustment","offsetX","offsetY","pinEnd","wireEnd","_getStubWireEnd","orientation","_removeWireStubAt","_removeFlagAt","newPartNumber","sourcePart","sourcePartDetails","targetPartDetails","symbolPath","positionAdjustment","newTextLine","connection","_addWireStubAt","_addFlagAt","partDetails","railKeys","partData","partX","partY","pinX","pinY","xyRotationTable","R0","R90","R180","R270","M0","M90","M180","M270","xDiff","yDiff","adjustment","partDirection","pinDirection","xin","yin","rotation","relativeEnd","y1","y2","regex","matched","pos","separator","flagName","ascAnalysisList","getAnalysisFiles","promiseArray","asc","getAnalysisFile","getSpiceSchematicFiles","spicePartsInfo","readmeFile","noSpicePartsInfo","_opamps","_opamp","generateReadMeFile","analysisFiles","_state","WAITERS","symbol","for","global","getGlobal","waiters","self","Ember","registerWaiter","pending","waitUntil","debugInfo","getPendingWaiterState","NoopTestWaiter","promise","BaseComponent","setOwner","isDestroying","isDestroyed","setDestroyed","setDestroying","destroyables","CAPABILITIES","destructor","asyncLifecycleCallbacks","updateHook","destroy","registerDestructor","EmberGlimmerComponentManager","getOwner","attrs","createComponent","ComponentClass","component","BaseComponentManager","destroyComponent","GlimmerComponent","GlimmerComponentBase","setComponentManager","GlimmerComponentManager","metal","hashProto","VERSION","dict","tagName","layout","argument","UNINITIALIZED","onReject","reason","assert","awaited","isPending","isSettled","isResolved","isRejected","resolvedValue","rejectReason","didReceiveAttrs","_super","didReceiveArgument","setProperties","RSVP","didResolve","didReject","resolvedArgument","shouldIgnorePromise","rejectedArgument","reopenClass","positionalParams","propertyIsOnObject","property","buildPathToValue","kv","possibleKeys","possible","isChange","getChangeValue","mergeTargetAndSource","getKeys","safeGet","hasEmberDataProperty","propertyIsEnumerable","propertyIsUnsafe","safeSet","isNonNullObject","stringValue","isSpecial","normalizeObject","mergeDeep","sourceIsArray","isArray","targetIsArray","sourceIsArrayLike","isArrayObject","objectToArray","arrayToObject","l","CHANGES","CONTENT","maybeUnwrapProxy","o","ObjectProxy","ArrayProxy","isProxy","ValidationChangeset","isPristine","isDirty","pendingData","pendingChanges","notifyPropertyChange","pushErrors","newErrors","_setProperty","_notifyVirtualProperties","_deleteKey","objName","oldContent","getDeep","change","buildOldValues","getKeyValues","dependentKeyCompat","defaultValidatorFn","EmberChangeset","BufferedChangeset","c","validateFn","validationMap","Proxy","targetBuffer","version","APP","initialize","registered","libraries","register","initializerFactory","THelper","FormatterBase","FormatDate","Formatter","opts","formatDate","FormatList","formatList","escaped","needToEscape","badCharacters","FormatMessage","stringOrDesc","isHTMLSafe","escapedOptions","escapedOpts","toHTML","character","escapeExpression","escapeOptions","defaultMessage","ignoreTag","FormatNumber","formatNumber","FormatRelative","formatOptions","unit","formats","relative","formatRelativeTime","FormatTime","formatTime","extendStatics","setPrototypeOf","__proto__","__extends","__","ErrorKind","TYPE","SKELETON_TYPE","__assign","__spreadArray","to","ar","isLiteralElement","literal","isArgumentElement","isNumberElement","isDateElement","isTimeElement","isSelectElement","isPluralElement","plural","isPoundElement","pound","isTagElement","tag","isNumberSkeleton","isDateTimeSkeleton","dateTime","SuppressedError","SPACE_SEPARATOR_REGEX","DATE_TIME_REGEX","parseDateTimeSkeleton","skeleton","era","year","RangeError","month","day","weekday","hour12","hourCycle","timeZoneName","WHITE_SPACE_REGEX","FRACTION_PRECISION_REGEX","SIGNIFICANT_PRECISION_REGEX","INTEGER_WIDTH_REGEX","CONCISE_INTEGER_WIDTH_REGEX","parseSignificantPrecision","roundingPriority","g1","g2","minimumSignificantDigits","maximumSignificantDigits","parseSign","signDisplay","currencySign","parseConciseScientificAndEngineeringStem","stem","minimumIntegerDigits","parseNotationOptions","opt","parseNumberSkeleton","tokens","_i","tokens_1","useGrouping","compactDisplay","all","currencyDisplay","unitDisplay","roundingMode","g3","g4","g5","trailingZeroDisplay","signOpts","conciseScientificAndEngineeringOpts","_a","timeData","getDefaultHourSymbolFromLocale","hourCycles","regionTag","languageTag","language","maximize","region","SPACE_SEPARATOR_START_REGEX","SPACE_SEPARATOR_END_REGEX","createLocation","hasNativeStartsWith","hasNativeFromCodePoint","fromCodePoint","hasNativeFromEntries","fromEntries","hasNativeCodePointAt","codePointAt","hasTrimStart","trimStart","hasTrimEnd","trimEnd","isSafeInteger","abs","REGEX_SUPPORTS_U_AND_Y","RE","matchIdentifierAtIndex","codePoints","fromCharCode","entries_1","k","first","charCodeAt","flag","IDENTIFIER_PREFIX_RE_1","_isWhiteSpace","_isPatternSyntax","Parser","requiresOtherClause","shouldParseSkeletons","parseMessage","nestingLevel","parentArgType","expectingCloseTag","isEOF","char","parseArgument","peek","UNMATCHED_CLOSING_TAG","clonePosition","_isAlpha","parseTag","parseLiteral","bump","startPosition","parseTagName","bumpSpace","bumpIf","childrenResult","endTagStartPosition","INVALID_TAG","closingTagNameStartPosition","UNCLOSED_TAG","startOffset","parseQuoteResult","tryParseQuote","parseUnquotedResult","tryParseUnquoted","parseLeftAngleResult","tryParseLeftAngleBracket","codepoint","ch","openingBracePosition","EXPECT_ARGUMENT_CLOSING_BRACE","EMPTY_ARGUMENT","parseIdentifierIfPossible","MALFORMED_ARGUMENT","parseArgumentOptions","startingPosition","endOffset","bumpTo","typeStartPosition","argType","typeEndPosition","EXPECT_ARGUMENT_TYPE","styleAndLocation","styleStartPosition","parseSimpleArgStyleIfPossible","EXPECT_ARGUMENT_STYLE","styleLocation","argCloseResult","tryParseArgumentClose","location_1","parseNumberSkeletonFromString","EXPECT_DATE_TIME_SKELETON","dateTimePattern","skeletonCopy","patternPos","patternChar","charAt","extraLength","hourLen","dayPeriodLen","hourChar","getBestPattern","pattern","parsedOptions","typeEndPosition_1","EXPECT_SELECT_ARGUMENT_OPTIONS","identifierAndLocation","pluralOffset","EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE","tryParseDecimalInteger","INVALID_PLURAL_ARGUMENT_OFFSET_VALUE","optionsResult","tryParsePluralOrSelectOptions","location_2","pluralType","INVALID_ARGUMENT_TYPE","nestedBraces","apostrophePosition","bumpUntil","UNCLOSED_QUOTE_IN_ARGUMENT_STYLE","stringTokens_1","stemAndOptions","options_1","INVALID_NUMBER_SKELETON","expectCloseTag","parsedFirstIdentifier","hasOtherClause","parsedSelectors","selectorLocation","EXPECT_PLURAL_ARGUMENT_SELECTOR","INVALID_PLURAL_ARGUMENT_SELECTOR","DUPLICATE_SELECT_ARGUMENT_SELECTOR","DUPLICATE_PLURAL_ARGUMENT_SELECTOR","EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT","EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT","fragmentResult","EXPECT_SELECT_ARGUMENT_SELECTOR","MISSING_OTHER_CLAUSE","expectNumberError","invalidNumberError","sign","hasDigits","decimal","kind","currentOffset","targetOffset","nextCode","pruneLocation","els","SyntaxError","originalMessage","captureLocation","memoize","cacheDefault","serializer","serializerDefault","strategyDefault","monadic","arg","cacheKey","computedValue","variadic","assemble","context","serialize","ObjectWithoutPrototypeCache","strategies","PART_TYPE","FormatError","msg","_this","InvalidValueError","variableId","INVALID_VALUE","InvalidValueTypeError","MissingValueError","MISSING_VALUE","isFormatXMLElementFn","formatToParts","formatters","currentPluralValue","els_1","getNumberFormat","varName","getDateTimeFormat","medium","value_1","formatFn","chunks","other","Intl","PluralRules","MISSING_INTL_API","getPluralRules","lastPart","createFastMemoizeCache","IntlErrorCode","IntlMessageFormat","overrideFormats","defaultConfig","configs","defaultLocale","formatterCache","pluralRules","ast","resolvedOptions","resolvedLocale","NumberFormat","supportedLocalesOf","getAst","resolveLocale","__parse","parseOpts","getOwnPropertySymbols","__rest","c1","c2","DateTimeFormat","memoizedDefaultLocale","Locale","supportedLocales","integer","percent","short","long","full","IntlError","exception","stack","captureStackTrace","UnsupportedFormatterError","UNSUPPORTED_FORMATTER","InvalidConfigError","INVALID_CONFIG","MissingDataError","MISSING_DATA","IntlFormatError","FORMAT_ERROR","MessageFormatError","descriptor","MissingTranslationError","MISSING_TRANSLATION","filterProps","props","allowlist","defaults","filtered","DEFAULT_INTL_CONFIG","messages","timeZone","defaultFormats","fallbackOnEmptyString","onError","onWarn","warning","getNamedFormat","formatType","NUMBER_FORMAT_OPTIONS","getFormatter","formatNumberToParts","RELATIVE_TIME_FORMAT_OPTIONS","getRelativeTimeFormat","RelativeTimeFormat","DATE_TIME_FORMAT_OPTIONS","filteredOptions","timeStyle","dateStyle","_b","formatDateTimeRange","formatRange","formatDateToParts","formatTimeToParts","PLURAL_FORMAT_OPTIONS","formatPlural","setTimeZoneInOptions","deepMergeOptions","opts1","opts2","deepMergeFormatsAndSetTimeZone","f1","mfFormats","messageDescriptor","defaultRichTextElements","msgId","condition","Err","invariant","getMessageFormat","LIST_FORMAT_OPTIONS","getListFormat","results","formatListToParts","ListFormat","richValues_1","serializedValues","generateToken","DISPLAY_NAMES_OPTONS","formatDisplayName","getDisplayNames","DisplayNames","of","createIntl","relativeTime","displayNames","createFormatters","resolvedConfig","verifyConfigMessages","$t","onFormatjsIntlError","convertToArray","convertToString","normalizeLocale","flattenKeys","translation","IntlService","_intls","localeName","proposedLocale","locale1","locale2","cancel","_timer","_ee","emit","_updateDocumentLanguage","primaryLocale","createFormatterProxy","initialLocale","EventEmitter","_owner","_formats","resolveRegistration","getIntl","getOrCreateIntl","translations","addTranslations","lookup","localeNames","_localeWithDefault","translationsFor","resilient","existingIntl","_cache","exists","_this$getIntl","_this$getIntl2","dom","renderer","_dom","documentService","getDOM","off","_formatters","missingMessage","consumeArgs","noop","willRemove","ClassBasedModifierManager","factoryOrClass","instance","implementsModify","_implementsModify","createdState","installedState","installElement","installElementOnInstance","modify","didReceiveArguments","didInstall","Args","updateArgsOnInstance","didUpdateArguments","ClassBasedModifier","Manager","FunctionBasedModifierManager","teardown","EAGER_MANAGER","LAZY_MANAGER","getPod","ContainerDebugAdapter","_moduleRegistry","namespace","ModuleRegistry","canCatalogEntriesByType","catalogEntriesByType","types","A","addObject","STRING_DASHERIZE_CACHE","CLASSIFY_CACHE","_entries","EmberObject","podBasedModuleName","podBasedComponentsInSubdir","mainModuleName","defaultModuleName","nestedColocationComponentModuleName","pluralizedTypes","makeToString","factory","fullName","shouldWrapInClassFactory","parseName","parsedName","fullNameParts","prefixParts","nameParts","fullNameWithoutType","resolveMethodName","resolveOther","normalizedModuleName","findModuleName","defaultExport","_extractDefaultExport","klass","injections","extend","_normalizeCache","_normalize","pluralize","podBasedLookupWithPrefix","podPrefix","resolveEngine","engineModule","resolveRouteMap","engineRoutesModule","resolveTemplate","tmpPrefix","loggingDisabled","moduleNameLookupPatterns","tmpModuleName","chooseModuleName","_logLookup","underscoredModuleName","partializedModuleName","lookupDescription","_owner$resolveRegistr","env","LOG_MODULE_RESOLVER","LOG_RESOLVER","knownForType","moduleKeys","items","fullname","translateToContainerFullname","podSuffix","nonPodPrefix","truthy","_jspdf","__esModule","PAGE_MARGIN_LEFT","PX_PER_MM","units","papersize","u","pdfDoc","addFonts","deletePage","appName","addPage","internal","pageSize","getWidth","getHeight","imageWidth","imageHeight","addImage","xOffset","yOffset","setFont","normalFontName","setFontSize","setTextColor","setLineWidth","getTextDimensions","h","descriptionContents","splitTextToSize","fieldData","boldFontName","fieldItem","fieldtext","imgData","imgWidth","imgHeight","scaleWidth","scaleHeight","useScale","tableData","tableWidth","rowHeight","setFillColor","tableStart","tableEnd","output","toFile","numPages","getNumberOfPages","normalFontIndex","addFileToVFS","addFont","fontName","fontStyle","italicFontName","DROPDOWN","en","jp","cn","ru","DEFAULT_TOOL_URLS","PrecisionStudioUrl","FilterWizardUrl","AdcDriverUrl","PhotodiodeUrl","DiamondUrl","NoiseUrl","SignalChainDesignerUrl","SimDDSUrl","VirtualEvalUrl","DACErrorCalculatorUrl","DEFAULT_OPTIONS","URL_KEY_MAP","dropdown","markup","updatedMarkup","applyUrlsToMarkup","focusOutListenerBound","focusOutListener","tempwrapper","symbols","iconsNode","removeChild","IDENTITY_MATRIX","multiply3x3","result0","multiply3x1","result1","result2","matrix","z","transformCoordinates","matrices","reduceSVGToGroup","endSvgOffset","closeSvgOffset","innerSvg","wrapGroupsInSVG","groups","svgHeight","removeConnectionPoints","connections","fromCircuit","fromOutput","toCircuit","toInput","connectionPoints","groupMatch","internalCircuit","groupPattern","attrPattern","attrMatch","point","endPosition","_findConnectionPoints","newCircuit","stringToDoc","xmldom","parseFromString","docToString","doc","defaultNamespaces","namespaceMap","_nsMap","removableNodeNames","childNodes","getElementsByTagName","elementIndex","attributeIndex","attributes","namespaceURI","removeAttributeNS","_mergeClasses","existing","newClasses","clazz","_isVisibleElement","elem","nodeType","_parseTranslateAsMatrix","_parseRotateAsMatrix","PI","cos","sin","_parseScaleAsMatrix","scaleX","scaleY","_parseMatrixAsMatrix","_parseTransformAsMatrix","finalMatrix","parms","unitsAsPixels","em","ex","px","pt","pc","CSS_PIXELS_PER_INCH","cm","mm","in","_coordinateToPixels","_collectConnectionPoint","group","defaultConnectionGroup","tspans","circles","invalidTSpans","invalidCircles","connectionGroup","cx","cy","relevantTransforms","currentParent","_composeCircuitsUsingMetadata","circuits","positions","maxX","maxY","metadata","docWidth","docHeight","normalizeCore","viewBox","preserve","transformMatrix","viewboxMatrix","_ref3","ey","ew","eh","vbx","vby","vbw","vbh","align","meetOrSlice","translateX","translateY","_viewboxMatrix","connectionPointClasses","connectionPoint","getDocumentMetadata","classes","last","depth","_getTopLevelBraceGroups","existingClasses","applySubstitutionClasses","changeList","useBraces","changeKey","replValue","_composeCircuitsToFixedDimensions","stitchCircuits","stitchCircuitsWithConnectionPoints","circuitsWithMetadata","fromConnectionPoint","cp","toConnectionPoint","getConnectionOffset","circuitCount","orderedConnections","orderCount","toProcess","processing","connectionIndex","ordered","_orderConnections","connIndex","conn","newPosition","calculatePositions","origins","deliveredPoints","circuitIndex","circuitConnectionPoints","elementId","supplyDummySession","AnalyticsAL","webData","analyticsLoaded","CONSOLE_LOGGER","Analytics","analyticsUrl","isSSR","isTesting","logSuppressions","usesDummySession","_trackSessionStart","beforeEl","defer","script","scripts","lastScript","prior","_prior$parentNode","_document$getElements","AbortSignal","append","loadScript","interval","retries","checkCondition","poll","stop","queue","qlen","tool","evt","eventData","AnalyticsService","isAbandoned","isLoading","$cptable","inserted","destroying","XLSX","current_codepage","current_ansi","VALID_ANSI","CS2CP","set_ansi","set_cp","_getchar","_getansi","DENSE","Base64_map","Base64_encode","input","c3","e1","e2","e3","e4","Base64_decode","has_buf","Buffer","versions","Buffer_from","nbfs","buf","enc","buf_utf16le","new_raw_buf","alloc","Uint8Array","new_unsafe_buf","allocUnsafe","s2a","s2ab","ArrayBuffer","view","a2s","bconcat","bufs","isBuffer","maxlen","chr0","chr1","_strrev","pad0","fill","pad_","rpad_","p2_32","pad0r","pad0r1","pad0r2","SSF_isgeneral","days","months","table_fmt","SSF_default_map","SSF_default_str","SSF_frac","mixed","sgn","B","P_2","P_1","P","Q_2","Q_1","SSF_parse_date_code","b2","m","SSF_normalize_xl_unsafe","dow","dout","out","T","H","M","S","date1904","setDate","getDay","SSF_fix_hijri","SSF_strip_decimal","SSF_general","LOG10E","toFixed","toExponential","SSF_small_exp","SSF_large_exp","SSF_normalize_exp","SSF_general_num","SSF_format","datenum","SSF_write_date","fmt","ss0","ss","tt","outl","commaify","pct1","write_num_exp","idx","ee","fakee","$$","$1","$2","$3","frac1","dec1","closeparen","phone","hashq","cc","rnd","dd","dec","_frac","write_num_flt","ffmt","write_num","write_num_cm","sfmt","mul","write_num_pct","ri","ff","aval","den","rr","base","myn","myd","write_num_f1","carry","oa","lres","rres","flr","write_num_exp2","write_num_int","write_num_cm2","write_num_pct2","write_num_f2","SSF_abstime","fmt_is_date","cfregex2","chkcond","thresh","dateNF","table","f","in_str","SSF_split_fmt","lat","m1","m2","choose_fmt","flen","dt","lst","hr","ssm","_dt","jj","nstr","myv","ostr","vv","decpt","lasti","retval","eval_fmt","SSF_load","SSF_load_table","tbl","make_ssf","dateNFregex","bad_formats","_fs","CRC32","T0","Int32Array","signed_crc_table","TT","subarray","slice_by_16_tables","T1","T2","T3","T4","T5","T6","T7","T8","T9","Ta","Tb","Tc","Td","Te","Tf","bstr","seed","CFB","fs","dirname","filename","write_dos_date","hms","write_shift","ymd","parse_extra_field","prep_blob","flags","read_shift","sz","tgt","mtime","atime","ctime","mt","sz1","sz2","usz","csz","get_fs","parse_zip","di","mboundary","FileIndex","FullPaths","init_cfb","start_di","fcnt","parse_mime","parse_mad","mver","nmfs","difat_sec_cnt","dir_start","minifat_start","difat_start","ssz","fat_addrs","mv","chk","HEADER_SIGNATURE","check_get_mver","check_shifts","dir_cnt","sectors","nsectors","ceil","sectorify","sleuth_fat","sector_list","sl","chkd","buf_chain","modulus","seen","addr","__readInt32LE","nodes","__toBuffer","make_sector_list","ENDOFCHAIN","Paths","mini","minifat_store","pl","sector","namelen","__utf16le","color","clsid","ct","read_date","storage","get_sector_list","get_mfat_entry","read_directory","FI","FP","dad","build_full_paths","raw","entry","MSSZ","new_buf","cnt","__readUInt32LE","CLSID","nm","rebuild_cfb","seed_cfb","gc","_file","fullPaths","HEADER_CLSID","Z","namecmp","elt","_write","_opts","fileType","fp","fi","ca","cstr","dispcnt","csl","qp","get_content_type","write_quoted_printable","write_base64_76","write_mad","cdirs","compression","start_cd","crcs","sz_cd","namebuf","outbuf","_zlib","deflateRawSync","_deflate","write_zip","mini_size","fat_size","mfat_cnt","fat_base","fat_cnt","difat_cnt","HEADER_SIG","chainit","consts","DIFSECT","FATSECT","_nm","copy","MAXREGSECT","FREESECT","HEADER_MINOR_VERSION","MAXREGSID","NOSTREAM","EntryTypes","CLEN_ORDER","LEN_LN","DST_LN","use_typed_arrays","bitswap8","bit_swap_n","rev","read_bits_2","bl","read_bits_3","read_bits_5","read_bits_7","read_bits_n","write_bits_3","write_bits_1","write_bits_8","write_bits_16","realloc","zero_fill_array","build_tree","clens","cmap","MAX","ccode","bl_count","Uint16Array","ctree","cleni","fix_lmap","fix_dmap","dlens","_deflateRaw","DST_LN_RE","LEN_LN_RE","boff","write_stored","addrs","mlen","len_eb","dst_eb","write_huff_fixed","dyn_lmap","dyn_dmap","dyn_cmap","dyn_len_1","dyn_len_2","dyn","_HLIT","_HDIST","_HCLEN","read_bits_4","next_code","hcodes","h1","h2","_inflate","woff","OL","max_len_1","max_len_2","dst","inflate","warn_or_throw","wrn","efsz","fcsz","EF","parse_local_file","meth","setMilliseconds","setFullYear","setMonth","setHours","setMinutes","setSeconds","parse_dos_date","_csz","_usz","ef","InflRaw","InflateRaw","_processChunk","_finishFlushFlag","bytesRead","_inflateRawSync","cfb_add","unsafe","ContentTypeMap","ctype","ext","encoded","si","tmp","fdata","fname","cte","oi","parse_quoted_printable","fpath","utils","cfb_gc","UCFullPaths","UCPaths","UCPath","read","readFileSync","read_file","write","writeFileSync","writeFile","cfb_new","cfb_del","cfb_mov","old_name","new_name","ReadShift","CheckField","use_zlib","zlib","_inflateRaw","blobify","a2u","write_dl","Deno","TextEncoder","encode","utf8write","IE_SaveFile","saveAs","chrome","downloads","b64","Base64_encode_arr","File","Folder","open","encoding","ks","o2","evert_key","K","evert","evert_num","dnthresh","UTC","dnthresh1","dnthresh2","res","numdate","setTime","pdre1","pdre2","pdre3","parseDate","cc2str","arr","debomit","utf16beread","TextDecoder","decode","dup","fuzzynum","wt","FDRE1","FDRE2","FDISO","utc_append_works","valueOf","lower_months","fuzzydate","local_to_utc","lower","lnos","fuzzytime1","fuzzytime2","getYear","utc_to_local","utc","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","local","getMilliseconds","zip_add_file","zip","widx","ridx","utf8decode","zip_new","XML_HEADER","rencoding","decregex","charegex","escapexml","escapexmltag","htmlcharegex","escapehtml","utf8reada","orig","utf8readb","ww","utf8readc","utf8corpus","utf8read","htmldecode","entities","wtregex","writetag","wxt_helper","writextag","write_w3cdtf","XMLNS","CORE_PROPS","CUST_PROPS","EXT_PROPS","CT","RELS","TCMNT","XMLNS_main","XLMLNS","___toBuffer","___utf16le","__readUInt16LE","___hexlify","__hexlify","___utf8","__readUInt8","__utf8","___lpstr","__lpstr","___cpstr","__cpstr","___lpwstr","__lpwstr","___lpp4","__lpp4","___8lpp4","__8lpp4","___double","Infinity","read_double_le","__double","is_buf","readUInt32LE","readDoubleLE","__readInt16LE","__readInt32BE","oI","oR","loc","oo","lens","__writeUInt32LE","__writeInt32LE","__writeUInt16LE","WriteShift","cpp","bs","av","LN2","write_double_le","hexstr","fld","parsenoop","buf_array","blksz","newblk","curbuf","endbuf","_bufs","write_record","ba","XLSBRecordEnum","shift_cell_xls","cell","cRel","rRel","biff","shift_range_xls","range","encode_cell_xls","encode_cell","encode_range_xls","encode_row","encode_col","decode_row","rowstr","decode_col","colstr","col","decode_cell","decode_range","encode_range","cs","ce","fix_range","a1","formula_quote_sheet_name","sname","safe_decode_range","format_cell","BErr","XF","numFmtId","safe_format_cell","sheet_to_workbook","SheetNames","Sheets","sheet_add_aoa","_ws","dense","ws","_R","_C","_origin","_range","__R","__Rstr","__C","nullError","sheetStubs","cellDates","cell_ref","aoa_to_sheet","write_UInt32LE","parse_XLWideString","cchCharacters","write_XLWideString","_null","parse_StrRun","ich","ifnt","parse_RichStr","rgsStrRun","dwSizeStrRun","parse_BrtCommentText","parse_XLSBCell","iStyleRef","write_XLSBCell","parse_XLSBShortCell","write_XLSBShortCell","parse_XLSBCodeName","write_XLSBCodeName","parse_XLNullableWideString","write_XLNullableWideString","parse_XLNameWideString","parse_RelID","write_RelID","parse_RkNumber","fX100","fInt","RK","write_RkNumber","d100","parse_RfX","parse_UncheckedRfX","write_UncheckedRfX","parse_Xnum","write_Xnum","write_BrtColor","auto","theme","nTS","tint","rgb","VT_STRING","DocSummaryPIDDSI","SummaryPIDSI","rgbify","XLSIcv","RBErr","XLSLblBuiltIn","ct2type","CT_LIST","workbooks","xlsx","xlsm","xlsb","xlam","xltx","strs","comments","charts","dialogs","macros","write_ct","type2ct","evert_arr","xsd","xsi","bookType","f2","f3","WB","SHEET","HLINK","VML","XPATH","XMISS","XLINK","CXML","CXMLP","CMNT","SST","STY","THEME","CHART","CHARTEX","CS","WS","DS","MS","IMG","DRAW","XLMETA","PEOPLE","CONN","VBA","get_rels_path","write_rels","rels","rid","add_rels","rId","relobj","targetmode","Id","Type","Target","TargetMode","write_rdf_type","write_meta_ods","wb","cp_doit","write_core_props","dc","dcterms","dcmitype","Props","WTF","ModifiedDate","PseudoPropsPairs","write_ext_props","W","vt","Worksheets","baseType","write_cust_props","pid","write_vt","XLMLDocPropsMap","Title","Subject","Author","Keywords","Comments","LastAuthor","RevNumber","LastPrinted","Category","Company","AppVersion","ContentStatus","Identifier","Language","write_TypedPropertyValue","write_FILETIME","XLSPSSkip","guess_property_type","write_PropertySet","PIDSI","hdr","piao","prop","pr","pio","unshift","pinfo","write_PropertySetStream","entries2","clsid2","ps0","ps1","writebool","parseuint16","writeuint16","write_Bes","parse_ShortXLUnicodeString","cch","write_XLUnicodeRichExtendedString","xlstr","otext","write_XLUnicodeString","write_HyperlinkString","write_Hyperlink","hl","hashidx","F","Pretarget","write_XLSCell","ixfe","parse_XTI","parse_Ref8U","rwFirst","rwLast","write_Ref8U","write_BOF","write_BoundSheet8","hs","write_Format","b5","write_XF","ixfeP","write_BIFF3XF","xf","write_BIFF4XF","write_BoolErr","os","parse_BIFF5ExternSheet","write_NOTE_BIFF2","write_HLink","O","write_HLinkTooltip","Tooltip","write_BIFF2Cell","ifmt","DBF","dbf_codepage_map","dbf_reverse_map","dbf_to_sheet","ft","memo","vfp","l7","nrow","fpos","rlen","current_cp","codepage","hend","hi","lo","sheetRows","dbf_to_aoa","wch","_RLEN","to_workbook","to_sheet","from_sheet","old_cp","aoa","sheet_to_json","cols","hcnt","coltypes","colwidths","coldecimals","guess","_guess","hf","_f","hb","rout","_n","_l","_s","SYLK","sylk_escapes","AA","BA","CA","DA","HA","JA","AE","BE","CE","HE","AI","BI","CI","HI","AO","BO","CO","DO","HO","AU","BU","CU","HU","Aa","Ba","Ca","Da","Ha","Ja","Ae","Be","Ce","He","Ai","Bi","Ci","Hi","Ao","Bo","Co","Do","Ho","Au","Bu","Cu","Hu","KC","Kc","DN","Dn","Hy","sylk_char_regex","sylk_char_fn","decode_sylk_char","newcc","sylk_to_aoa_str","records","rj","next_cell_format","sht","rowinfo","colinfo","cw","Mval","Workbook","WBProps","Names","rstr","record","RT","d1904","nn","Sheet","Ref","rc_to_a1","C_seen_K","C_seen_X","C_seen_S","C_seen_E","formula","cell_t","cmnt","cellText","shrbase","shift_formula_str","F_seen","hpt","hpx","pt2px","process_col","write_ws_cell_sylk","a1_to_rc","write_ws_cmnt_sylk","aoasht","sylk_to_aoa","outwb","preamble","RS","rec","wpx","width2px","px2char","px2pt","write_ws_rows_sylk","DIF","dif_to_aoa_str","dif_to_sheet","dif_to_aoa","make_value","make_value_str","ETH","eth_to_sheet","eth_to_aoa","sep","meta","sheet_to_eth_data","coord","PRN","set_text_arr","guess_seps","guess_sep_weights","guess_sep","instr","dsv_to_sheet_str","FS","sepcc","startcc","_re","finish_cell","news","Y","datestr","timestr","dateNF_fix","cellNF","outer","prn_to_sheet","bytes","firstbyte","prn_to_aoa_str","prn_to_sheet_str","WK_","lotushopper","cb","Enum","WK1Enum","LOTUS_DATE_FMTS","lotus_to_workbook_buf","next_n","sidx","snames","realnames","sdata","refguess","lastcell","FMTS","QPWNFTable","book_append_sheet","CC","fmtidx","delta","newcell","parse_qpw_str","qpw_to_workbook_buf","vers","qpro","works","works2","tmpcell","WK3Enum","osheets","rnames","parse_cell","get_wk1_fmt","write_LABEL","write_INTEGER","write_NUMBER","wk1_parse_rc","rel","FuncTab","BinOpTab","parse_cell_3","write_LABEL_16","wsidx","parse_NUMBER_17","v1","v2","write_NUMBER_17","log2","parse_NUMBER_27","parse_SHEETNAMECS","write_XFORMAT_SHEETNAME","argc","argL","argR","wk1_fmla_to_csf","sheet_to_wk1","write_biff_rec","write_RANGE","max_R","book_to_wk3","wscnt","write_BOF_WK3","straywsregex","write_BrtSSTItem","crypto_CreatePasswordVerifier_Method1","Password","PasswordArray","Verifier","PasswordDecoded","_JS2ANSI","rgb2Hex","MDW","char2width","coll","customWidth","PPI","write_BrtFmt","rev_XLSBFillPTNames","XLSBFillPTNames","parse_BrtFill","write_BrtFill","fls","patternType","write_BrtXF","write_Blxf","parse_BrtBorder","write_sty_bin","NF","write_FMTS_bin","SSF","font","grbit","italic","strike","outline","shadow","condense","write_FontFlags","bold","sss","vertAlign","underline","family","charset","scheme","write_BrtFont","write_FONTS_bin","write_FILLS_bin","write_BORDERS_bin","fontId","fillId","borderId","write_CELLSTYLEXFS_bin","write_CELLXFS_bin","cellXfs","xfId","builtinId","write_STYLES_bin","write_DXFS_bin","write_TABLESTYLES_bin","write_theme","Themes","themeXLSX","write_vml","csize","bbox","_shapeid","_comments","joinstyle","gradientshapeok","coordsize","fillopts","fillparm","fillxml","fillcolor","strokecolor","write_vml_comment","write_comments_xml","iauthor","ID","lastauthor","ts","tcnt","write_tcmnt_xml","people","carr","rootid","tcopts","tcid","parentId","personId","write_people_xml","person","displayName","userId","providerId","parse_BrtCommentAuthor","write_BrtCommentAuthor","write_comments_bin","_ia","write_BrtBeginComment","run","write_StrRun","VBAFMTS","rcregex","rcbase","rcfunc","fstr","crefregex","$0","$4","$5","parseread1","parse_ColRelU","parse_RgceArea","parse_RgceArea_BIFF2","parse_RgceLoc","parse_RgceLoc_BIFF2","parse_RgceElfLoc","fQuoted","parse_PtgAttrBaxcel","bitSemi","parse_PtgAttrSpaceType","parse_SerAr","parsebool","parse_XLUnicodeStringNoCch","parse_XLUnicodeString","parse_XLUnicodeString2","parse_PtgExtraMem","cce","parse_PtgExtraArray","parse_PtgElfLoc","parse_PtgElfNoop","parse_PtgElfLel","PtgListRT","PtgTypes","iftab","FtabArgc","Ftab","cparams","parsetab","Cetab","nameindex","parse_RgceLocRel_BIFF2","cl","parse_RgceLocRel","parse_RgceAreaRel","ixti","parse_PtgNameX_BIFF5","PtgDupes","Ptg18","coltype","rt","Ptg19","bitIf","bitGoto","parse_RgbExtra","rgce","stringify_array","PtgBinOp","PtgAdd","PtgConcat","PtgDiv","PtgEq","PtgGe","PtgGt","PtgLe","PtgLt","PtgMul","PtgNe","PtgPower","PtgSub","get_ixti_raw","supbooks","XTI","SID","get_ixti","ixtiraw","stringify_formula","nameidx","last_sp","sp","fflen","lbl","xlfn","externbook","bookidx","itab","ixtidata","lp","rp","sharedf","parsedf","fnd","arrayf","_left","parse_XLSBParsedFormula","ptgs","parse_Rgce","parse_XLSBArrayParsedFormula","parse_XLSBCellParsedFormula","parse_XLSBNameParsedFormula","parse_XLSBSharedParsedFormula","write_XLSBFormulaNum","oint","write_XLSBNameParsedFormula","write_XLSBFormulaBool","write_XLSBFormulaErr","_str","write_XLSBFormulaRange","lastbang","write_XLSBFormulaArea3D","write_XLSBFormulaRef3D","write_XLSBFormulaRangeWS","write_XLSBFormulaRefErr3D","postamble","write_XLSBFormulaStr","csf_to_ods_3D","browser_has_Map","get_sst_id","sst","revarr","Count","Unique","col_obj_w","level","outlineLevel","default_margins","margins","mode","defs","footer","get_cell_style","revssf","ssf","applyNumberFormat","check_ws","sheetprot_deffalse","sheetprot_deftrue","write_ws_xml_cell","oldt","oldv","_vv","bookSST","Strings","revStrings","write_ws_xml","rdata","_drawing","needed","vbaraw","cname","CodeName","codeName","outlineprops","summaryBelow","summaryRight","above","write_ws_xml_sheetpr","sview","workbookViewId","Views","rightToLeft","RTL","write_ws_xml_sheetviews","sheetFormat","defaultRowHeight","baseColWidth","outlineLevelRow","write_ws_xml_cols","ht","customHeight","write_ws_xml_data","password","write_ws_xml_protection","write_ws_xml_autofilter","merges","write_ws_xml_merges","margin","relc","ignoreEC","numberStoredAsText","sqref","write_row_header","miyRw","ncolspan","lcs","caddr","write_BrtRowHdr","parse_BrtWsDim","write_BrtWsDim","write_BrtCellError","ncell","write_BrtShortError","parse_BrtMergeCell","write_BrtMergeCell","BrtMarginKeys","write_ws_bin_cell","last_seen","write_BrtShortIsst","write_BrtCellIsst","write_BrtShortSt","write_BrtCellSt","write_BrtShortRk","write_BrtCellRk","write_BrtShortReal","write_BrtCellReal","write_BrtShortBool","write_BrtCellBool","write_BrtShortBlank","write_BrtCellBlank","write_ws_bin","write_BrtWsProp","write_BrtBeginWsView","write_WSVIEWS2","write_BrtColInfo","write_COLINFOS","cap","write_CELLTABLE","write_SHEETPROTECT","write_AUTOFILTER","write_MERGECELLS","locidx","write_BrtHLink","write_HLINKS","write_IGNOREECS","write_LEGACYDRAWING","WBPropsDef","badchars","check_ws_name","safe","write_wb_bin","write_BrtFileVersion","filterPrivacy","write_BrtWbProp","vistab","Hidden","write_BOOKVIEWS","iTabID","strRelID","write_BrtBundleSh","write_BUNDLESHS","write_SELF_EXTERNS_xlsb","write_EXTERNALS_xlsb","Flags","dname","Comment","write_BrtName","write_BRTNAMES","write_name_xlml","write_ws_xlml_cell","attr","marr","mi","_v","write_ws_xlml_row","write_ws_xlml","write_ws_xlml_names","skip","write_ws_xlml_table","objects","scenarios","selectLockedCells","selectUnlockedCells","xmlns","write_ws_xlml_wsopts","write_xlml","xlml_write_docprops","Custprops","BLACKLIST","xlml_write_custprops","write_props_xlml","write_wb_xlml","write_sty_xlml","write_names_xlml","PSCLSID","SI","DSI","UDI","cellFormula","Ptg","fBold","fItalic","fUnderline","fStrikeout","fOutline","fShadow","fCondense","fExtend","parse_FontFlags","bCharSet","xColorType","bR","bG","bB","icv","parse_BrtColor","ixfeParent","cellStyles","colFirst","colLast","coldx","defaultThemeVersion","strName","autoCompressPictures","backupFile","checkCompatibility","hidePivotFieldList","promptedSolutions","publishItems","refreshAllConnections","saveExternalLinkValues","showBorderUnselectedTables","showInkAnnotation","showObjects","showPivotChartFilter","updateLinks","rfx","fAlwaysCalc","relId","write_BIFF2BERR","write_comments_biff2","write_ws_biff2_cell","_BIFF2FmtTable","write_BIFF2INT","write_BIFF2NUM","b8oid","b8ocnts","write_ws_biff8_cell","bf","o1","write_FormulaValue","o3","write_Formula","write_Number","write_LabelSst","b8","write_Label","write_ws_biff8","guts","_WB","_sheet","MAX_ROWS","write_ColInfo","write_ws_cols_biff8","write_Dimensions","_oasc","notes","baseid","ci","author","oasc","oact","txo","cont","conf","notesh","write_comments_biff8","write_Window2","write_MergeCells","HL","write_ws_biff8_hlinks","write_FEAT","write_biff8_global","_sheets","_wb","writezeroes","write_WriteAccess","write_RRTabId","parsexmlbool","safe1904","write_Font","write_FONTS_biff8","write_FMTS_biff8","write_CELLXFS_biff8","write_Country","write_MsoDrawingGroup","write_biff_continue","write_SST","blen","write_biff_buf","fix_write_opts","write_biff8_buf","_Fonts","write_ws_biff2","write_BIFF2Format","write_BIFF4Format","write_BIFF2XF","write_biff2_buf","make_html_row","rowspan","colspan","editable","HTML_BEGIN","HTML_END","sheet_to_html","make_html_preamble","sheet_add_dom","or_R","or_C","midx","is_dom_element_hidden","elts","cells","_t","Aelts","Aelti","parse_dom_table","get_computed_style","get_get_computed_style_function","getPropertyValue","write_styles_ods","master_styles","write_number_format_ods","nf","nfidx","nopts","has_time","np","write_names_ods","scoped","namei","odsref","write_content_ods","write_text_p","span","null_cell_xml","write_ws","nfs","ods","ROWS","textp","_Fref","text_p","_tgt","acreator","apayload","aprops","fods","cidx","colobj","nfi","write_automatic_styles_ods","write_ods","manifest","rdf","write_rdf","write_manifest","u8_to_dataview","array","DataView","buffer","byteOffset","byteLength","u8str","u8","stru8","u8concat","u8a","parse_varint49","ptr","varint","write_varint49","parse_packed_varints","write_packed_varints","nums","varint_to_i32","i32","parse_shallow","write_shallow","proto","mappa","parse_iwa_file","ai","fl","merge","write_iwa_file","ias","ia","midata","aipayload","mid","parse_snappy_chunk","clen","u8i","decompress_iwa_file","compress_iwa_file","frame","write_new_storage","lut","dv","setFloat64","exp","mantissa","writeDecimal128LE","irsst","rsst","setUint32","isst","s5s","replies","s5s_to_iwa_comment","write_old_storage","parse_TSP_Reference","write_TSP_Reference","numbers_add_oref","iwa","orefs","numbers_del_oref","write_TST_TileRowInfo","wide","tri","new_7","new_4","last_offset","cell_storage","_dv","_last_offset","_cell_storage","setUint16","celload","_celload","write_iwam","get_unique_msgid","dep","dependents","write_TSP_Color_RGB","Float32Array","get_author_color","numbers_iwa_doit","deps","packet","numbers_iwa_find","numbers_add_meta","mlist","newid","newloc","numbers_add_msg","numbers_meta_add_dep","parentidx","dep2","USE_WIDE_ROWS","fix_opts_func","write_zip_xlsx","wbrels","foo","wbext","vbafmt","threadedcomments","links","coreprops","extprops","custprops","themes","calcchains","vba","drawings","TODO","_sn","wsrels","need_vml","needtc","rId1","uniqueCount","sitag","write_sst_xml","write_names","workbookPr","sheetId","localSheetId","write_wb_xml","formatCode","write_numFmts","write_cellXfs","write_sty_xml","write_cfb_ctr","numbers","indices","mess","build_numbers_deps","docroot","sheetrefs","sheetref","newsheetref","remap","arch","tiaref","sheetroot","sa","drawables","tia","tmaref","tiaroot","da","dap","oldtmaref","tma","tmaroot","new_uuid","hsa","hseadata","hsea","ref2","_a2","oldref","newref","row_headers","tspref","tiles","tst","oldtileref","newtileref","oldtile","numbers_add_ws","wsname","sheetidx","rootref","tmafile","trunc","R_","LUT","ferr","fmla","nfmt","ofmt","pb","row_header_ref","rowhead","_x","base_bucket","R2","_bucket","col_header_ref","colhead","rbtree","tilestore","tstride","mlst","tileref","save_token","numbers_meta_del_dep","ntiles","tidx","newtileid","tiledata","tilerow","tilecontent","mergeid","sstref","sstroot","sstdata","rsstref","rsstroot","rsstdata","style_indices","tswpsa","tswpsaid","tswpsarefs","newhlinkid","smartfield","rtpaid","cmntref","authors","cmntroot","cmntdata","aaaid2","csaid2","aaaid","csaid","write_numbers_tma","write_numbers_ws","write_numbers_iwa","write_BrtBeginSst","write_sst_bin","write_BrtBeginEsfmd","write_BrtBeginEsmdb","mdb","write_BrtMdb","write_zip_xlsb","write_string_type","write_binary_type","writeSync","N","codes","dn","check_wb","Base64_encode_pass","write_stxt_type","sheet_to_txt","sheet_to_csv","sheet_to_rtf","wbpath","Keys","DSEntries","SEntries","CEntries","DocSummaryRE","SummaryRE","CEntries2","write_xls_props","newpath","fill_vba_xls","write_xlscfb","write_cfb_type","oopts","ftype","generate","encrypt_agile","write_zip_denouement","write_zip_type","make_json_row","defval","isempty","__rowNum__","rawNumbers","outi","counter","header_cnt","skipHidden","blankrows","qreg","make_csv_row","rs","txt","datarow","forceQuotes","strip","sheet_add_json","js","skipHeader","ROW","JS","ws_get_cell_stub","RC","roll","cell_set_hyperlink","split_cell","sheet_new","json_to_sheet","table_to_sheet","table_to_book","sheet_to_formulae","cmds","sheet_to_row_object_array","sheet_get_cell","book_new","book_set_sheet_visibility","sh","vis","wb_sheet_idx","cell_set_number_format","cell_set_internal_link","cell_add_comment","sheet_set_array_formula","dynamic","rng","rngstr","wsr","SHEET_VISIBLE","SHEET_HIDDEN","SHEET_VERY_HIDDEN","exportToExcel","getVersion","exportTable","dataSourceName","workBook","createDateStamp","coverData","displaySheetData","rawSheetData","headerNameRowLine","headerContextRowLine","headerUnitRowLine","minMaxTyp","fieldContext","hasContextRow","rawRow","displayRow","displayId","rawId","displayField","rawField","wRange","rowCount","columnMaxLength","ownKeys","enumerableOnly","sym","_objectSpread2","getOwnPropertyDescriptors","_typeof","iterator","_extends","userAgent","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","capture","passive","msMatchesSelector","webkitMatchesSelector","getParentOrHost","includeCTX","_throttleTimeout","R_SPACE","toggleClass","className","currentStyle","selfOnly","appliedTransforms","matrixFn","DOMMatrix","WebKitCSSMatrix","CSSMatrix","MSCSSMatrix","getWindowScrollingElement","scrollingElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","elRect","innerHeight","innerWidth","containerRect","elMatrix","isScrolledPast","elSide","parentSide","getParentAutoScrollElement","elSideVal","parentSideVal","getChild","childNum","includeDragEl","currentChild","Sortable","ghost","dragged","draggable","lastChild","lastElementChild","previousElementSibling","clone","getRelativeScrollOffset","winScroller","includeSelf","gotSelf","elemCSS","isRectEqual","rect1","rect2","throttle","callback","ms","scrollBy","Polymer","jQuery","Zepto","cloneNode","getChildContainingRectFromElement","ghostEl","child","_rect$left","_rect$top","_rect$right","_rect$bottom","animated","childRect","expando","plugins","initializeByDefault","PluginManager","mount","plugin","option","pluginName","pluginEvent","eventCanceled","eventNameGlobal","initializePlugins","initialized","modified","modifyOption","getEventProperties","eventProperties","modifiedValue","optionListeners","_excluded","originalEvent","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","_objectWithoutProperties","dragEl","parentEl","rootEl","nextEl","lastDownEl","cloneEl","cloneHidden","dragStarted","moved","putSortable","activeSortable","active","oldIndex","oldDraggableIndex","newIndex","newDraggableIndex","hideGhostForTarget","_hideGhostForTarget","unhideGhostForTarget","_unhideGhostForTarget","cloneNowHidden","cloneNowShown","dispatchSortableEvent","_dispatchEvent","targetEl","toEl","fromEl","extraEventProperties","onName","CustomEvent","createEvent","initEvent","bubbles","pullMode","lastPutMode","allEventProperties","activeGroup","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","targetMoveDistance","ghostRelativeParent","awaitingDragStarted","ignoreNextClick","sortables","pastFirstInvertThresh","isCircumstantialInvert","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","supportCssPointerEvents","pointerEvents","_detectDirection","elCSS","elWidth","paddingRight","borderLeftWidth","borderRightWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","marginLeft","marginRight","secondChildWidth","flexDirection","gridTemplateColumns","touchingSideChild2","_prepareGroup","toFn","pull","sameGroup","otherGroup","originalGroup","checkPull","checkPut","put","revertClone","stopPropagation","stopImmediatePropagation","nearestEmptyInsertDetectEvent","touches","nearest","clientX","clientY","threshold","emptyInsertThreshold","insideHorizontally","insideVertically","ret","_onDragOver","_checkOutsideTargetEl","_isOutsideThisEl","animationCallbackId","animationStates","handle","swapThreshold","invertSwap","invertedSwapThreshold","removeCloneOnHide","ghostClass","chosenClass","dragClass","ignore","preventOnFilter","animation","easing","setData","dataTransfer","dropBubble","dragoverBubble","dataIdAttr","delayOnTouchOnly","touchStartThreshold","devicePixelRatio","forceFallback","fallbackClass","fallbackOnBody","fallbackTolerance","fallbackOffset","supportPointer","nativeDraggable","_onTapStart","captureAnimationState","fromRect","thisAnimationDuration","childMatrix","addAnimationState","removeAnimationState","indexOfObject","animateAll","clearTimeout","animating","animationTime","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","sqrt","calculateRealTime","animate","animationResetTimer","currentRect","duration","animatingX","animatingY","forRepaintDummy","repaint","_onMove","dragRect","targetRect","willInsertAfter","retVal","onMoveFn","onMove","draggedRect","related","relatedRect","_disableDraggable","_unsilent","_generateId","sum","_nextTick","_cancelNextTick","_getDirection","touch","pointerType","originalTarget","inputs","checked","_saveInputCheckedState","button","isContentEditable","criteria","_prepareDragStart","dragStartFn","nextSibling","_lastX","_lastY","_onDrop","_disableDelayedDragEvents","_triggerDragStart","_disableDelayedDrag","_delayedDragTouchMoveHandler","_dragStartTimer","_onTouchMove","_onDragStart","empty","getSelection","removeAllRanges","_dragStarted","fallback","_appendGhost","_nulling","_emulateDragOver","elementFromPoint","ghostMatrix","relativeScrollOffset","dx","dy","cssMatrix","_hideClone","cloneId","_loopId","effectAllowed","_dragStartId","revert","vertical","isOwner","canSort","fromSortable","completedFired","dragOverEvent","_ignoreWhileAnimating","completed","elLastChild","lastElRect","childContainingRect","_ghostIsLast","changed","firstElRect","_ghostIsFirst","targetBeforeFirstSwap","sibling","differentLevel","differentRowCol","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_dragElInRowColumn","side1","scrolledPastTop","scrollBefore","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","_getSwapDirection","dragIndex","after","moveVector","extra","insertion","_showClone","_offMoveEvents","_offUpEvents","handleEvent","dropEffect","_globalDragOver","toArray","order","useAnimation","is","nextTick","cancelNextTick","detectDirection","scrollEl","scrollRootEl","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","autoScrolls","scrolling","clearAutoScrolls","autoScroll","clearPointerElemChangedInterval","isFallback","scrollCustomFn","sens","scrollSensitivity","scrollSpeed","scrollThisInstance","scrollFn","layersOut","canScrollX","canScrollY","scrollPosX","scrollPosY","vx","vy","layer","scrollOffsetY","scrollOffsetX","bubbleScroll","drop","toSortable","changedTouches","onSpill","Revert","Remove","startIndex","dragStart","_ref4","parentSortable","AutoScroll","forceAutoScrollFallback","_handleAutoScroll","_handleFallbackAutoScroll","dragOverCompleted","dragOverBubble","nulling","ogElemScroller","newElem","SlickEventData","event2","__publicField","nativeEvent","arguments_","_eventTarget","_isDefaultPrevented","_this$nativeEvent","_isPropagationStopped","isPropagationStopped","_isImmediatePropagationStopped","isImmediatePropagationStopped","getNativeEvent","isDefaultPrevented","addReturnValue","returnValues","returnValue","getReturnValue","getArguments","SlickEvent","pubSub","_pubSubService","subscriberCount","_handlers","subscribe","unsubscribe","notify","_this$_pubSubService","sed","publish","setPubSubService","SlickEventHandler","handlers","unsubscribeAll","SlickRange","fromRow","fromCell","toRow","toCell","isSingleRow","isSingleCell","SlickNonDataItem","SlickGroup","equals","collapsed","SlickGroupTotals","SlickEditorLock","editController","activeEditController","commitCurrentEdit","cancelCurrentEdit","deactivate","_Utils","isFunction","isPlainObject","getProto","Ctor","hasOwn","fnToString","ObjectFunctionString","calculateAvailableSpace","windowHeight","windowWidth","scrollPosition","windowScrollPosition","pageScrollTop","pageScrollLeft","elmOffset","elementOffsetTop","elementOffsetLeft","copyIsArray","deep","isDefined","createDomElement","elementOptions","appendToParent","elm","elmOptionKey","elmValue","getHtmlStringOutput","emptyElement","classNameToList","cls","innerSize","getElementProp","getFunctionDetails","addReturn","isAsyncFn","fnStr","replaceAll","isOneLinerArrowFn","getFunctionBody","isAsync","insertAfterElement","referenceNode","newNode","_referenceNode$parent","isEmptyObject","box","docElem","pageYOffset","pageXOffset","setStyleSize","parents","isHidden","visible","toFloat","show","hide","slideUp","slideAnimation","slideDown","slideDirection","applyDefaults","targetObj","srcObj","addSlickEventPubSubWhenDefined","class2type","_storage","Utils","SlickGlobalEditorLock","SlickCore","EventData","EventHandler","Range","NonDataRow","Group","GroupTotals","EditorLock","RegexSanitizer","dirtyHtml","GlobalEditorLock","keyCode","SPACE","BACKSPACE","DELETE","DOWN","END","ENTER","ESCAPE","HOME","INSERT","LEFT","PAGE_DOWN","PAGE_UP","RIGHT","TAB","UP","preClickClassName","GridAutosizeColsMode","None","LegacyOff","LegacyForceFit","IgnoreViewport","FitColsToViewport","FitViewportToCols","ColAutosizeMode","Locked","Guide","Content","ContentExpandOnly","ContentIntelligent","RowSelectionMode","FirstRow","FirstNRows","AllRows","LastRow","ValueFilterMode","DeDuplicate","GetGreatestAndSub","GetLongestTextAndSub","GetLongestText","WidthEvalMode","Auto","TextOnly","HTML","Utils10","SlickCellRangeDecorator","grid","selectionCssClass","selectionCss","zIndex","border","_options","_defaults","_this$_elem","_elem","_this$_options12","cssStyleKey","canvasNode","getActiveCanvasNode","getCellNodeBox","Utils11","Draggable","startX","startY","deltaX","deltaY","containerElement","onDragInit","onDragStart","onDrag","onDragEnd","preventDragFromKeys","originaldd","dragSource","dragHandle","executeDragCallbackWhenDefined","preventDrag","eventPrevented","userPressed","_event2$touches3","targetEvent","allowDragFrom","allowDragFromClosest","winScrollPos","userMoved","userReleased","_event2$touches4","SlickEvent8","SlickEventHandler2","SlickRange3","Draggable2","SlickCellRangeDecorator2","Utils12","Draggable3","keyCode3","SlickCellRangeDecorator3","SlickCellRangeSelector3","minIntervalToShowNextCell","maxIntervalToShowNextCell","accelerateInterval","_decorator","cellDecorator","_grid","getPubSubService","_canvas","getCanvasNode","_gridOptions","getOptions","_handler","onScroll","handleScroll","handleDragInit","handleDragStart","handleDrag","handleDragEnd","_this$_decorator","_activeCanvas","_activeViewport","getCellDecorator","_e","_scrollTop","_scrollLeft","getActiveViewportNode","scrollbarDimensions","getDisplayedScrollbarDimensions","_viewportWidth","_viewportHeight","_moveDistanceForOneCell","getAbsoluteColumnMinWidth","_isRowMoveRegistered","hasRowMoveManager","_rowOffset","_columnOffset","_isBottomCanvas","frozenRow","canvasSelector","getUID","frozenBottom","canvasElm","_isRightCanvas","canvasLeftElm","getCellFromEvent","onBeforeCellRangeSelected","canCellBeSelected","_dragging","canvasOffset","getCellFromPoint","_currentlySelectedRange","_draggingMouseOffset","getMouseOffsetViewport","isOutsideViewport","handleDragOutsideViewport","stopIntervalTimer","handleDragTo","_e$touches","viewportLeft","viewportTop","viewportRight","viewportBottom","viewportOffset","viewportOffsetLeft","viewportOffsetTop","viewportOffsetRight","viewportOffsetBottom","viewport","pageX","pageY","_xDelayForNextCell","_yDelayForNextCell","_autoScrollTimerId","xTotalDelay","yTotalDelay","xNeedUpdate","yNeedUpdate","handleDragToNewPosition","mouseOffsetX","mouseOffsetY","_e$touches2","endCellBox","scrollCellIntoView","onCellRangeSelecting","getPluginByName","onCellRangeSelected","getCurrentRange","SlickEvent18","SlickEventData5","SlickEventHandler10","SlickRange5","Utils24","SlickRowSelectionModel","selectActiveRow","dragToSelect","autoScrollWhenDrag","cellRangeSelector","_eventHandler","onActiveCellChanged","wrapHandler","handleActiveCellChange","onKeyDown","handleKeyDown","onClick","handleClick","registerPlugin","handleCellRangeSelected","handleBeforeCellRangeSelected","unregisterPlugin","_len2","_key2","_inHandler","rangesToRows","ranges","rowsToRanges","lastCell","getColumns","getRowsRange","getSelectedRows","_ranges","setSelectedRows","setSelectedRanges","caller","detail","onSelectedRangesChanged","getSelectedRanges","refreshSelections","activeRow","getActiveCell","shiftKey","ctrlKey","altKey","metaKey","which","selectedRows","getDataLength","scrollRowIntoView","tempRanges","canCellBeActive","setActiveCell","_isRowMoveManagerHandler","rowMoveManager","isHandlerColumn","getEditorLock","keyCode4","SlickGroup2","Utils26","SlickEvent20","SlickEventData6","SlickGroup3","SlickGroupTotals2","Utils27","SlickGroupItemMetadataProvider2","inputOptions","checkboxSelect","checkboxSelectCssClass","checkboxSelectPlugin","groupCssClass","groupTitleCssClass","totalsCssClass","groupFocusable","totalsFocusable","toggleCssClass","toggleExpandedCssClass","toggleCollapsedCssClass","enableExpandCollapse","groupFormatter","defaultGroupCellFormatter","totalsFormatter","defaultTotalsCellFormatter","includeHeaderTotals","dataView","_this$_grid2","_this$_grid2$getData","getData","setOptions","indentation","containerElm","createDocumentFragment","selectChecked","ariaExpanded","groupTitleElm","applyHtmlCode","columnDef","_columnDef$groupTotal","groupTotalsFormatter","handleGridClick","handleGridKeyDown","getDataItem","handleDataViewExpandOrCollapse","rowIndexes","mapItemsToRows","selectRows","deSelectRows","activeCell","getRenderedRange","setRefreshHints","ignoreDiffsBefore","ignoreDiffsAfter","expandGroup","groupingKey","collapseGroup","getGroupRowMetadata","groupLevel","focusable","cssClasses","editor","getTotalsRowMetadata","_item$group","SlickDataView","externalPubSub","groupItemMetadataProvider","inlineFilters","useCSPSafeFilter","getter","comparer","predefinedValues","aggregators","aggregateEmpty","aggregateCollapsed","aggregateChildGroups","displayTotalsRow","lazyTotalsCalculation","onBeforePagingInfoChanged","onGroupExpanded","onGroupCollapsed","onPagingInfoChanged","onRowCountChanged","onRowsChanged","onRowsOrCountChanged","onSelectedRowIdsChanged","onSetItemsCalled","beginUpdate","bulkUpdate","suspend","isBulkSuspend","endUpdate","wasBulkSuspend","processBulkDelete","ensureIdUniqueness","refresh","idxById","rowsById","filterCSPSafe","updated","sortComparer","filterCache","filteredItems","compiledFilter","compiledFilterCSPSafe","compiledFilterWithCaching","compiledFilterWithCachingCSPSafe","onSelectedRowsChanged","onCellCssStylesChanged","hints","refreshHints","getFilterArgs","filterArgs","setFilterArgs","newIdx","idProperty","bulkDeleteIds","updateIdxById","startingIndex","getItems","getIdPropertyName","setItems","objectIdProperty","itemCount","setPagingOptions","getPagingInfo","pagesize","pagenum","totalRows","pageNum","totalPages","ascending","sortAsc","fastSortField","fastSort","oldToString","reSort","getFilteredItems","getFilteredItemCount","getFilter","setFilter","filterFn","compileFilterCSPSafe","compileFilterWithCachingCSPSafe","compileFilter","compileFilterWithCaching","getGrouping","groupingInfos","setGrouping","groupingInfo","toggledGroupsByLevel","gi","groupingInfoDefaults","getterIsAFn","compiledAccumulators","compileAccumulatorLoopCSPSafe","getItemByIdx","getIdxById","_this$idxById","ensureRowsByIdCache","getRowByItem","_this$rowsById","getRowById","_this$rowsById2","getItemById","itemArray","_this$rowsById3","mapIdsToRows","idArray","_this$rowsById4","mapRowsToIds","rowArray","ids","rowItem","updateSingleItem","_this$updated","newId","updateItem","updateItems","newItems","insertItem","insertItems","addItem","addItems","deleteItem","deleteItems","indexesToDelete","sortedAddItem","sortedIndex","sortedUpdateItem","oldItem","searchItem","low","high","getItemCount","getLength","getItem","_item$totals","__group","totals","__groupTotals","calculateTotals","getItemMetadata","expandCollapseAllGroups","collapse","collapseAllGroups","expandAllGroups","expandCollapseGroup","_len3","_key3","arg0","groupingDelimiter","_len4","_key4","getGroups","extractGroups","parentGroup","groupsByVal","_gi$predefinedValues","_gi$predefinedValues2","addTotals","agg","isLeafLevel","_group$groups","storeResult","addGroupTotals","groupCollapsed","toggledGroups","_gi$aggregators","_g$groups","flattenGroupedRows","groupedRows","gl","aggregator","accumulate","_retval","_il","filterInfo","filterPath1","filterPath2","filterBody","tpl","Function","fnName","setFunctionName","il","uncompiledFilter","ii","_this$filter","uncompiledFilterWithCaching","_this$filter2","getFilteredAndPagedItems","batchFilter","batchFilterWithCaching","isFilterNarrowing","isFilterExpanding","isFilterUnchanged","paged","getRowDiffs","newRows","_this$refreshHints","_this$refreshHints2","eitherIsNonData","diff","_this$updated2","__nonDataRow","recalc","_items","prevRefreshHints","previousPagingInfo","countBefore","totalRowsBefore","previous","callingOnRowsChanged","calledOnRowCountChanged","rowsDiff","previousRowCount","currentRowCount","rowCountChanged","rowsChanged","syncGridSelection","preserveHidden","preserveHiddenOnSelectionChange","inHandler","selectedRowIds","setSelectedRowIds","rowIds","newSelectedRowIds","selectedRowsChangedArgs","added","preSelectedRowIdsChangeFn","filteredIds","getAllSelectedFilteredIds","_this$selectedRowIds","getAllSelectedIds","getAllSelectedFilteredItems","setSelectedIds","selectedIds","_this$preSelectedRowI","isRowBeingAdded","shouldTriggerEvent","applyRowSelectionToGrid","getAllSelectedItems","selectedData","syncGridCellCssStyles","hashById","storeCellCssStyles","getCellCssStyles","newHash","_this$rowsById5","setCellCssStyles","keyCode5","Utils28","_FloatEditor","navOnLR","editorCellNavOnLRKeys","handleKeydownLRNav","handleKeydownLRNoNav","compositeEditorOptions","onChange","applyValue","serializeValue","formValues","onCompositeEditorChange","editors","getDecimalPlaces","rtn","editorFixedDecimalPlaces","DefaultDecimalPlaces","loadValue","_this$defaultValue","defaultValue","decPlaces","AllowEmptyValue","isValueChanged","validator","validationResults","cursorPosition","selectionStart","textLength","BindingEventService13","getBoundedEvents","_boundedEvents","unbindAll","listener","groupName","unbind","unbindByEventName","boundedEvent","groupNames","ColAutosizeMode2","SlickEvent21","SlickEventData7","GlobalEditorLock2","GridAutosizeColsMode2","keyCode6","preClickClassName2","SlickRange6","RowSelectionMode2","ValueFilterMode2","Utils30","WidthEvalMode2","Draggable4","MouseWheel2","onMouseWheel","wheelHandler","orgEvent","wheelDelta","HORIZONTAL_AXIS","wheelDeltaY","wheelDeltaX","Resizable2","resizeableElement","resizeableHandleElement","onResizeStart","onResize","onResizeEnd","executeResizeCallbackWhenDefined","resizeStartHandler","resizingHandler","resizeEndHandler","SlickGrid","alwaysShowVerticalScroll","alwaysAllowHorizontalScroll","defaultColumnWidth","enableHtmlRendering","leaveSpaceForNewRows","autoEdit","autoEditNewRow","autoCommitEdit","suppressActiveCellChangeOnEdit","enableCellNavigation","unorderableColumnCssClass","asyncEditorLoadDelay","enableAsyncPostRender","asyncPostRenderDelay","enableAsyncPostRenderCleanup","asyncPostRenderCleanupDelay","nonce","editorLock","showColumnHeader","createFooterRow","showFooterRow","footerRowHeight","createPreHeaderPanel","createTopHeaderPanel","showPreHeaderPanel","showTopHeaderPanel","preHeaderPanelHeight","showTopPanel","topPanelHeight","preHeaderPanelWidth","topHeaderPanelHeight","topHeaderPanelWidth","formatterFactory","editorFactory","cellFlashingCssClass","rowHighlightCssClass","rowHighlightDuration","selectedCellCssClass","enableTextSelectionOnCells","dataItemColumnValueExtractor","frozenRightViewportMinWidth","throwWhenFrozenNotAllViewable","fullWidthRows","numberedMultiColumnSort","tristateMultiColumnSort","sortColNumberInSeparateSpan","defaultFormatter","forceSyncScrolling","addNewRowCssClass","preserveCopiedSelectionOnPaste","showCellSelection","viewportClass","minRowBuffer","emulatePagingWhenScrolling","enableMouseWheelScrollHandler","doPaging","autosizeColsMode","autosizeColPaddingPx","rowTopOffsetRenderType","scrollRenderThrottling","autosizeTextAvgToMWidthRatio","viewportSwitchToScrollModeWidthPercent","viewportMinWidthPx","viewportMaxWidthPx","suppressCssChangesOnHiddenInit","ffMaxSupportedCssHeight","maxSupportedCssHeight","sanitizer","logSanitizedHtml","mixinDefaults","headerCssClass","defaultSortAsc","minWidth","maxWidth","rerenderOnResize","reorderable","ignoreHeaderText","colValueArray","allowAddlPercent","formatterOverride","autosizeMode","rowSelectionModeOnInit","rowSelectionMode","rowSelectionCount","valueFilterMode","widthEvalMode","sizeToRemaining","widthPx","contentSizePx","headerWidthPx","colDataTypeOf","_container","onActiveCellPositionChanged","onAddNewRow","onAutosizeColumns","onBeforeAppendCell","onBeforeCellEditorDestroy","onBeforeColumnsResize","onBeforeDestroy","onBeforeEditCell","onBeforeFooterRowCellDestroy","onBeforeHeaderCellDestroy","onBeforeHeaderRowCellDestroy","onBeforeSetColumns","onBeforeSort","onBeforeUpdateColumns","onCellChange","onColumnsReordered","onColumnsDrag","onColumnsResized","onColumnsResizeDblClick","onContextMenu","onDblClick","onFooterClick","onFooterContextMenu","onFooterRowCellRendered","onHeaderCellRendered","onHeaderClick","onHeaderContextMenu","onHeaderMouseEnter","onHeaderMouseLeave","onHeaderRowCellRendered","onHeaderRowMouseEnter","onHeaderRowMouseLeave","onPreHeaderClick","onPreHeaderContextMenu","onMouseEnter","onMouseLeave","onRendered","onSetOptions","onActivateChangedOptions","onSort","onValidationError","onViewportChanged","finishInitialization","emptyTarget","skipEmptyReassignment","sanitizedText","sanitizeHtmlString","scrollThrottle","actionThrottle","render","getMaxSupportedCssHeight","validateAndEnforceOptions","_columnDefaults","cacheCssForHiddenInit","updateColumnProps","uid","containerStyles","_focusSink","_topHeaderPanelScroller","_topHeaderPanel","_topHeaderPanelSpacer","_paneHeaderL","_paneHeaderR","_paneTopL","_paneTopR","_paneBottomL","_paneBottomR","_preHeaderPanelScroller","_preHeaderPanel","_preHeaderPanelSpacer","_preHeaderPanelScrollerR","_preHeaderPanelR","_preHeaderPanelSpacerR","_headerScrollerL","_headerScrollerR","_headerScroller","_headerL","role","_headerR","_headers","_headerRowScrollerL","_headerRowScrollerR","_headerRowScroller","_headerRowSpacerL","_headerRowSpacerR","_headerRowL","_headerRowR","_headerRows","_topPanelScrollerL","_topPanelScrollerR","_topPanelScrollers","_topPanelL","_topPanelR","_topPanels","scroller","_viewportTopL","_viewportTopR","_viewportBottomL","_viewportBottomR","_viewport","_activeViewportNode","_canvasTopL","_canvasTopR","_canvasBottomL","_canvasBottomR","measureScrollbar","_activeCanvasNode","getCanvasWidth","getHeadersWidth","_footerRowScrollerR","_footerRowScrollerL","_footerRowScroller","_footerRowSpacerL","_footerRowSpacerR","_footerRowL","_footerRowR","_footerRow","_focusSink2","getViewportWidth","getViewportHeight","measureCellPaddingAndBorder","disableSelection","_bindingEventService","setFrozenOptions","setPaneVisibility","setScroller","setOverflow","updateColumnCaches","createColumnHeaders","createColumnFooter","setupColumnSort","createCssRules","resizeCanvas","bindAncestorScrollEvents","slickMouseWheelInstances","handleMouseWheel","handleHeaderContextMenu","handleHeaderClick","handleHeaderRowScroll","handleFooterContextMenu","handleFooterClick","handleFooterRowScroll","handleTopHeaderPanelScroll","handlePreHeaderPanelScroll","handlePreHeaderContextMenu","handlePreHeaderClick","handleDblClick","handleContextMenu","handleCellMouseOver","handleCellMouseOut","slickDraggableInstance","restoreCssFromHiddenInit","_hiddenParents","old","cssShow","oldProps","hasFrozenColumns","_this$plugins$i","_this$plugins$i2","setSelectionModel","selectionModel","handleSelectedRangesChanged","getSelectionModel","columnIdOrIdx","_getContainerElement","getCanvases","_e2","getViewportNode","getViewports","setActiveViewportNode","_e3","targetContainers","getColumnIndex","hasFrozenRows","actualFrozenRow","outerdiv","innerdiv","dim","_this$scrollbarDimens","_this$scrollbarDimens2","_this$scrollbarDimens3","_this$scrollbarDimens4","headersWidth","headersWidthL","headersWidthR","includeScrollbar","viewportW","_this$scrollbarDimens5","availableWidth","viewportHasVScroll","canvasWidthL","canvasWidthR","totalRowWidth","extraWidth","updateCanvasWidth","forceColumnWidthsUpdate","_this$scrollbarDimens6","_this$scrollbarDimens7","_this$scrollbarDimens8","_this$scrollbarDimens9","_this$scrollbarDimens10","oldCanvasWidth","canvasWidth","oldCanvasWidthL","oldCanvasWidthR","widthChanged","cWidth","viewportHasHScroll","applyColumnWidths","mozUserSelect","supportedHeight","testUpTo","div","getHeaderColumnWidthDiff","headerColumnWidthDiff","getScrollbarDimensions","_this$scrollbarDimens11","_this$scrollbarDimens12","absoluteColumnMinWidth","_boundAncestors","handleActiveCellPositionChange","unbindAncestorScrollEvents","updateColumnHeader","columnId","toolTip","getColumnByIndex","getHeader","getHeaderColumn","targetHeader","targetIndex","getHeaderRow","getFooterRow","getPreHeaderPanel","getPreHeaderPanelLeft","getPreHeaderPanelRight","getTopHeaderPanel","getHeaderRowColumn","headerRowTarget","getFooterRowColumn","footerRowTarget","footerRowCell","handleHeaderMouseHoverOn","handleHeaderMouseHoverOff","headerTarget","dataset","colNameElm","classname","handleHeaderMouseEnter","handleHeaderMouseLeave","headerCellAttrs","headerRowCell","frozenClasses","handleHeaderRowMouseEnter","handleHeaderRowMouseLeave","setSortColumns","setupColumnResize","setColumns","setupColumnReorder","columnResizeDragging","_this$getEditorLock","previousSortColumns","sortColumn","onSortArgs","hadSortCol","sortCol","sortCols","tempCol","_this$sortableSideLef","_this$sortableSideRig","sortableSideLeftInstance","sortableSideRightInstance","columnScrollTimer","scrollColumnsRight","_viewportScrollContainerX","scrollColumnsLeft","canDragScroll","sortableOptions","onStart","onEnd","_this$getEditorLock2","_this$sortableSideLef2","_this$sortableSideRig2","reorderedIds","reorderedColumns","impactedColumns","activeCellNode","setFocus","getHeaderChildren","handleResizeableDoubleClick","triggeredByColumn","minPageX","maxPageX","firstResizable","lastResizable","frozenLeftColMaxWidth","vc","getVisibleColumns","colElm","resizeableHandle","ariaOrientation","slickResizableInstances","resizeElms","_this$getEditorLock3","shrinkLeewayOnRight","stretchLeewayOnRight","pw","previousWidth","shrinkLeewayOnLeft","stretchLeewayOnLeft","_c2","_this$scrollbarDimens13","actualMinWidth","newCanvasWidthL","newCanvasWidthR","viewportWidth","_c3","newWidth","resizedCanvasWidthL","applyColumnHeaderWidths","syncColumnCellResize","resizeHandle","invalidateAllRows","_columnResizeTimer","getVBoxDelta","frozenRowsHeight","dataLength","viewportClassList","_headerScrollContainer","_headerRowScrollContainer","_footerRowScrollContainer","_viewportScrollContainerY","headerColumnHeightDiff","cellWidthDiff","cellHeightDiff","boxSizing","_style","insertRule","createCssRulesAlternative","template","styleSheet","createTextNode","getColumnCssRules","stylesheet","devMode","_this$_options$devMod","ownerNodeIndex","ownerNode","owningElement","columnCssRulesL","columnCssRulesR","columnIdx","removeCssRules","_this$_style","clearAllTimers","_executionBlockTimer","_flashCellTimer","_highlightRowTimer","h_editorLoader","shouldDestroyAllElements","_this$getEditorLock4","_this$sortableSideLef3","_this$sortableSideLef4","_this$sortableSideRig3","destroyAllInstances","resizeHandles","headerColumns","destroyAllElements","inputInstances","instances","_groupHeaders","_groupHeadersL","_groupHeadersR","autosizeColumn","columnOrIndexOrId","isInit","colDef","colIndex","gridCanvas","getColAutosizeWidth","treatAsLocked","autoSize","autosizeColumns","internalAutosizeColumns","_this$canvas","_this$scrollbarDimens14","legacyAutosizeColumns","canvas_context","colWidth","reRender","totalWidth","totalWidthLessSTR","strColsMinWidth","totalMinWidth","totalLockedColWidth","_c$autoSize","_c$autoSize2","_c$autoSize3","_c$autoSize4","_c$autoSize5","_c$autoSize6","_c$autoSize7","_c$autoSize8","strColTotalGuideWidth","_this$scrollbarDimens15","setWidth","_c$autoSize9","_c$autoSize10","_c$autoSize11","totalSTRViewportWidth","unallocatedColWidth","unallocatedViewportWidth","_c$autoSize12","_c$autoSize13","_c$autoSize14","_c$autoSize15","_c$autoSize16","_this$columns$i$autoS","reRenderColumns","LogColWidths","colArrayIndex","_columnDef$editor","dl","isoDateRegExp","colDataItem","tempRow","moment","getColContentSize","ControlFillsColumn","tempVal","widthAdjustRatio","maxLen","maxColWidth","getColHeaderWidth","getColWidth","rowInfo","endIndex","valueArr","getRowVal","rowsDict","maxVal","maxAbsVal","_columnDef$autoSize","rowEl","cellEl","textOverflow","whiteSpace","formatterResult","maxText","useCanvas","_columnDef$formatterO","_columnDef$formatter","noFormatter","formatterIsText","ReturnsTextOnly","fontSize","fontFamily","measureText","applyFormatResultToCellNode","headerColElId","headerColEl","dummyHeaderColElId","_this$scrollbarDimens16","shrinkLeeway","prevTotal","widths","availWidth","shrinkProportion","absMinWidth","shrinkSize","growProportion","growSize","currentWidth","eventArgs","getEditController","columnsById","columnIndex","_this$columns$i","setSortColumn","numberCols","indicators","indicator","_indicator","getSortColumns","ne","previousSelectedRows","simpleArrayEquals","_ne$detail","newSelectedAdditions","newSelectedDeletions","changedSelectedRows","changedUnselectedRows","arr1","arr2","columnPosLeft","columnPosRight","widthRequest","_columnAutosizeDefaults","columnDefinitions","previousColumns","newColumns","updateColumnsInternal","updateColumns","_this$getSelectionMod","newOptions","suppressRender","suppressColumnSet","suppressSetOverflow","prepareForOptionsChange","invalidateRow","vp","originalOptions","optionsBefore","optionsAfter","internal_setOptions","activateChangedOptions","makeActiveCellNormal","setColumnHeaderVisibility","enforceFrozenRowHeightRecalc","newData","scrollToTop","updateRowCount","scrollTo","_this$data","getDataLengthIncludingAddNew","pagingActive","pagingIsLastPage","getTopPanel","getTopPanels","hasDataView","togglePanelVisibility","setTopPanelVisibility","setHeaderRowVisibility","setFooterRowVisibility","setPreHeaderPanelVisibility","setTopHeaderPanelVisibility","getContainerNode","getRowTop","getRowFromPosition","_this$scrollbarDimens17","th","oldOffset","cj","ph","newScrollTop","getVisibleRange","cleanupRows","updateRowPositions","prevScrollTop","vScrollDir","lastRenderedScrollTop","_this$data2","_this$data2$getItemMe","_this$_options$format","rowMetadata","getEditor","_this$data3","_this$data3$getItemMe","_columnMetadata$colum","_columnMetadata$cell","_this$_options32","columnMetadata","getDataItemValueForColumn","appendRowHtml","divArrayL","divArrayR","_this$data4","_this$data4$getItemMe","dataLoading","rowCss","rowDivR","rowDiv","frozenRowOffset","getFrozenRowOffset","topOffset","leftPx","alwaysRenderColumn","rightPx","appendCellHtml","divRow","_formatterResult","_formatterResult2","cellCss","cssClass","cellCssClasses","_this$cellCssClasses$","appendCellResult","addlCssClasses","addClasses","toolTipText","cellDiv","cellAttrs","cellResult","insertElementAfterTarget","rowsCache","cellRenderQueue","cellColSpans","rangeToKeep","rowId","removeFrozenRow","removeRowFromCache","startPostProcessingCleanup","invalidate","currentEditor","invalidateRows","queuePostProcessedRowForCleanup","cacheEntry","postProcessedRow","rowIdx","_cacheEntry$rowNode","postProcessgroupId","postProcessedCleanupQueue","actionType","groupId","cellNodesByColumnIdx","rowNode","queuePostProcessedCellForCleanup","cellnode","_cacheEntry$rowNode2","postProcessedRows","_node$parentElement","renderedRows","counter_rows_removed","cellNode","suppressRemove","formatterVal","removeClasses","updateCell","getCellNode","invalidatePostProcessingResults","updateRow","ensureCellNodesInRowsCache","colIdx","getViewportRowCount","_this$getScrollbarDim","vh","scrollbarHeight","topPanelH","headerRowH","footerRowH","_this$scrollbarDimens18","fullHeight","viewportH","columnNamesH","preHeaderH","topHeaderH","paddingBottom","numVisibleRows","containerClientWidth","_this$scrollbarDimens19","_this$scrollbarDimens20","_this$scrollbarDimens21","paneTopH","paneBottomH","viewportTopH","viewportBottomH","topHeightOffset","paneBottomTop","topHeightOffset2","lastRenderedScrollLeft","updatePagingStatusFromView","pagingInfo","_this$scrollbarDimens22","_this$scrollbarDimens23","dataLengthIncludingAddNew","numberOfRows","oldH","tempViewportH","oldViewportHasVScroll","r1","cachedRow","resetActiveCell","oldScrollTopInRange","getViewport","minBuffer","_cacheEntry$rowNode3","cleanUpCells","cellToRemove","cellsToRemove","cellNodeIdx","_this$postProcessedRo","_cellNode$parentEleme","cleanUpAndRenderCells","cellsAdded","processedRow","processedRows","totalCellsAdded","btm","_this$data5","_this$data5$getItemMe","_this$data6","_metadata","colspanNb","renderRows","needToReselectCell","counter_rows_rendered","xRight","_this$rowsCache","_this$rowsCache2","_this$rowsCache3","_this$rowsCache4","startPostProcessing","h_postrender","asyncPostProcessRows","h_postrenderCleanup","asyncPostProcessCleanupRows","postProcessFromRow","postProcessToRow","rowNumber","dequeue","rendered","renderedFrozenRows","h_render","startRow","endRow","handleElementScroll","_handleScroll","eventType","maxScrollDistanceY","maxScrollDistanceX","vScrollDist","hScrollDist","prevScrollLeft","enqueue","triggeredBy","minPeriod_ms","blocked","queued","blockAndExecute","unblock","processedStatus","asyncPostRender","asyncPostRenderCleanup","updateCellCssStylesOnRenderedRows","addedHash","removedHash","addedRowHash","removedRowHash","addCellCssStyles","removeCellCssStyles","prevHash","flashCell","toggleCellClass","times","highlightRow","rowCache","_rowCache$rowNode","_delta","cellExists","handled","_this$currentEditor","keyCaptureList","navigateTop","navigateRowStart","navigateBottom","navigateRowEnd","navigatePrev","_this$currentEditor2","_this$getEditorLock6","_this$getEditorLock5","cancelEditAndSetFocus","navigatePageDown","navigatePageUp","navigateLeft","navigateRight","navigateUp","navigateDown","navigateNext","commitEditAndSetFocus","makeActiveCellEditable","_this$getEditorLock7","_this$getEditorLock8","getTextSelection","setTextSelection","_e$target2","preClickModeOn","suppressActiveCellChangedEvent","setActiveCellInternal","gotoCell","getCellFromNode","getRowFromNode","_this$rowsCache$row$r","rowOffset","_this$columns$cell","tabbingDirection","getColspan","internalScrollColumnIntoView","_this$scrollbarDimens24","scrollRight","scrollColumnIntoView","newCell","opt_editMode","_this$rowsCache$this$","_this$rowsCache$this$2","activeCellOffset","isBottom","activePosX","isCellPotentiallyEditable","clearTextSelection","_document$selection","sel","cannotTriggerInsert","refocusActiveCell","_this$getEditorLock9","editActiveCell","_this$getEditorLock10","_this$data7","_this$data7$getItemMe","_metadata2","_this$currentEditor3","_this$currentEditor4","_this$currentEditor5","useEditor","suppressClearOnEdit","columnMetaData","editorArgs","gridPosition","absBox","commitChanges","cancelChanges","preClick","serializedEditorValue","_this$getEditorLock11","_this$getEditorLock12","getActiveCellPosition","getGridPosition","cellBox","getCellEditor","getActiveCellNode","textSelection","rangeCount","getRangeAt","addRange","_this$scrollbarDimens25","viewportScrollH","rowAtTop","rowAtBottom","scrollRowToTop","scrollPage","dir","deltaRows","bottomOfTopmostFullyVisibleRow","prevCell","prevActivePosX","navigateToRow","num_rows","_this$data8","_this$data8$getItemMe","findFirstFocusableCell","findLastFocusableCell","lastFocusableCell","gotoRight","_posX","posX","gotoLeft","firstFocusableCell","prev","gotoDown","gotoUp","gotoNext","gotoPrev","lastSelectableCell","gotoRowStart","gotoRowEnd","navigate","_this$getEditorLock13","up","down","isAddNewRow","setActiveRow","suppressScrollIntoView","_this$data9","_this$data9$getItemMe","_columnMetadata$this$","_columnMetadata$cell2","_this$data10","_this$data10$getItemM","forceEdit","_this$getEditorLock14","_self$getEditorLock","serializedValue","prevSerializedValue","editCommand","undo","editCommandHandler","newItem","_this$getEditorLock15","suppressLogging","cleanHtml","logMessageCount","logMessageMaxCount","TRANSLATIONS","choose","export","_totalRows","_workingRows","_hasParametersPanel","AditoolsDeviceTable","_data","_columns","_rowCountStatus","summaryRowText","MessageFormat","compile","workingRows","_translations","scrollSelectedPartToTop","selectedRow","nameColumn","fieldval","sortRows","preSort","colsToSort","presortItem","Comparator","integerComparator","_this$args$columns","dataRow1","dataRow2","specificComparator","findVisibleColumn","gridObj","getDesiredRowObject","_gridObj$getCellNode","_gridObj$getCellNode2","getSortColumnRef","sortColumnRefs","sortColRefs","columnRef","getPackedFilters","packedFilters","generateTitleFromColumn","numberedMultiColumnSortElem","cssRoot","_this$grid","fieldContextRow","headerColumnRows","unitText","minMaxText","contextText","setProperty","updateCheckboxContainerEvents","_document$getElementB","_document$querySelect","filterClass","addClass","handleCheckbox","filterChanged","filterToggle","deviceTable","_filterToggle$offset","_deviceTable$offset","newLeft","newTop","outerHeight","forceUpdateRowCountIfNeeded","dataViewLength","onRowsChangedArgs","slickGridOptions","_c$filter","hasParametersPanel","newSelection","rowSelected","hasClass","removeClass","rowObj","appendTo","packedFilter","sortChanged","actualArgs","actualItem","screenResized","resetSort","tableRowUpdated","custEvent","chooseParameters","onChooseParameters","allParameters","onAllParameters","resetParameters","onResetParameters","_AditoolsDeviceTable","hasAnnotation","engineeringComparatorCore","value1","value2","isLow","currencyRegExp","areaRegExp","comparisonValueForNonNumeric","isValue1Blank","isValue2Blank","_obj1","_obj2","partComparator","_num1","_num2","engineeringComparatorNonNumbersHigh","engineeringComparatorNonNumbersLow","priceComparator","booleanComparator","defaultMinimum","defaultMaximum","minimumValue","maximumValue","cleanedField","fieldValue","filterMinimumString","filterMaximumString","filterMinValue","filterMaxValue","validateCharacterInput","isUserEntryNumeric","_tooltipEnabled","AditoolsCard","checkboxClicked","clickAction","tooltipClicked","tooltipEnabled","tooltipClosed","_AditoolsCard","aditoolsRenderer_","_lastFocus","AditoolsDialog","_suppressFocusTrap","suppressFocusTrap","hideCloseX","_enableFocusTrap","_hideCloseX","_hideTitlebar","hideTitlebar","dialogElement","guardCancel","dialogClosed","lastFocus","showModal","_AditoolsDialog","AditoolsHelpDialog","_AditoolsHelpDialog","SHOEBOX_DATA_NAME","adi","iso","zh","ja","_getLocales","fastboot","urlLocale","isFastBoot","request","pathname","_getURLLocale","localeSet","useDefault","foundLocale","IsoLocale","CdpLocale","_fixLocalUrl","rootUrl","_replaceLocale","AditoolsSite","supportedlocales","_logger","_url","protocol","_getURL","shoebox","retrieve","_loadConfigFromJson","PrettyNum","INPUT_EXCEPTION_TEXT","micro","numberInMetricPrefixRange","engineeringText","metricPrefixToUse","numberToUse","isFixedDigits","numberToCheck","significantDigits","sNum","smallestNumber","engineeringValue","eMatch","metricPrefix","significand","exponent","bigMetricPrefix","powToRaiseTo","decrementer","powValue","valuePieces","processEngTextNoDecimal","isSpice","removeZeroes","numberString","matchReturn","numberWithZeroes","restOfString","isValidNumericMetricString","textFromUser","regEx","stringAtPrecision","negative","numStr","metricStringToNumber","errorValue","chopSomeDigitsOff","NEGINFINITY","textToUse","textToDisplay","absNumber","scientificText","fractionalText","floatingText","metricPrefixList","minMetricPrefixIndex","suppressZeroes","zeroBoundary","minMetricPrefix","loopFinished","indexOfE","eng4","esCompat","__values","done","__read","DateFormatError","alpha","numeric","monthStyle","dayStyle","weekdayStyle","WARNING","timeZoneNameStyle","compileOptions","calendar","yearOptions","hourOptions","getDateFormatOptions","dte","isWarning","G","U","E","J","X","isLetter","readToken","readFieldToken","readQuotedToken","parseDateTokens","NumberFormatError","BadOptionError","BadStemError","MaskedValueError","MissingOptionError","PatternError","TooManyOptionsError","maxOpt","UnsupportedError","getNumberFormatLocales","numberingSystem","lc","getNumberFormatMultiplier","mult","getNumberFormatOptions","onUnsupported","integerWidth","precision","unitPer","unitWidth","fail","minFraction","minF","maxFraction","maxF","minSignificant","minS","maxSignificant","maxS","trailingZero","expDigits","expSign","hasExp","parseAffixToken","pad","isDigit","parseNumberToken","plus","parseSubpattern","State","Prefix","Suffix","handleAffix","affixTokens","isPrefix","inFmt","getNegativeAffix","parseNumberPattern","parseTokens","hasGroups","hasExponent","intOptional","intDigits","decimalPos","fracDigits","fracOptional","increment","parseNumberAsSkeleton","negPrefix","negSuffix","affix","neg","isUnit","maxOptions","scientific","engineering","permille","latin","minOptions","parseBlueprintDigits","re","TokenParser","badOption","assertEmpty","parseToken","hasMaxOption","hasMinOption","validOptions","fd","sd","parsePrecisionBlueprint","parser","commonjsGlobal","getDefaultExportFromCjs","lexer","moo","hasSticky","sticky","isRegExp","reUnion","regexps","regexpOrLiteral","ignoreCase","multiline","ruleOptions","include","defaultType","lineBreaks","shouldThrow","toRules","spec","arrayToRules","getOwnPropertyNames","thing","objectToRules","defaultErrorRule","compileRules","hasStates","errorRule","fast","fastAllowed","unicodeFlag","unicode","pat","regexp","fallbackRule","checkStateGroup","Lexer","states","startState","queuedToken","queuedText","queuedThrow","setState","popState","pushState","eat","tokenToString","_getGroup","groupCount","queuedGroup","_token","matchNL","nl","formatError","LexerIterator","firstDisplayedLine","lastDisplayedLine","lastLineDigits","displayedLines","string","numLines","lastNLines","errorLines","lineNo","tokenType","$all","ruleMap","included","newRules","newRule","fastKeys","freeze","keywords","isMap","reverseMap","mooExports","__importDefault","mod","moo_1","doubleapos","quoted","octothorpe","case","parse_1","ParseError","lexer_js_1","lt","isSelectType","strictArgTypes","defaultPluralKeys","_d","cardinalKeys","cardinal","ordinalKeys","ordinal","strict","strictPluralKeys","parseBody","checkSelectKey","parseSelect","inPlural","cases","parseArgToken","pText","strictArgStyleParam","atRoot","_nf$1","Runtime","_nf","lcfunc","isOrdinal","reqArgs","strictNumber","Formatters","toLocaleDateString","sec","numberCurrency","numberFmt","defaultCurrency","numberInteger","numberPercent","toLocaleTimeString","reserved$1","ES3","break","continue","else","function","if","new","return","typeof","var","void","while","with","do","finally","instanceof","switch","throw","try","ESnext","await","debugger","class","enum","extends","const","import","null","true","false","implements","let","private","public","yield","interface","protected","static","unique","hashCode","jkey","rtlRegExp","PLURAL_MODULE","Compiler","runtime","plurals","e_1","localeCodeFromKey","requireAllArguments","e_1_1","parserOptions","cardinals","ordinals","hasArgs","concatenate","setRuntimeFn","pluralToken","needOther","tok","returnType","isLocaleRTL","mark","biDiSupport","customFormatters","isModuleFn","setDateFormatter","setNumberFormatter","getFormatterArg","setFormatter","runtimeIncludes","ord","pf","getCardinal","getPlural","isDefault","e_2","e_3","isFormatterKey","argShape","param_1","param_1_1","e_2_1","pair","keyEnd","e_3_1","parentKey","cfo_1","argStyle","argSkeletonText_1","getDateFormatter","dtf","getDateFormatterSource","fmtArg_1","currency_1","getNumberFormatModifier","p0","p1","n0","n1","getNumberFormatter","modSrc","setX","getNumberFormatModifierSource","getNumberFormatterSource","a$2","b$2","c$2","d$2","v0","e$1","f$2","af$2","ak$2","am$2","an$2","as$2","asa$2","ast$2","az$2","bal$2","bem$2","bez$2","bg$2","bho$2","bm$2","bn$2","bo$2","brx$2","ce$2","cgg$2","chr$2","ckb$2","de$2","doi$2","dv$2","dz$2","ee$2","el$2","en$2","eo$2","et$2","eu$2","fa$2","fi$2","fo$2","fur$2","fy$2","gl$2","gsw$2","gu$2","guw$2","ha$2","haw$2","hi$2","hnj$2","hu$2","ia$2","id$2","ig$2","ii$2","io$2","iu$2","ja$2","jbo$2","jgo$2","jmc$2","jv$2","jw$2","ka$2","kaj$2","kcg$2","kde$2","kea$2","kk$2","kkj$2","kl$2","km$2","kn$2","ko$2","ks$2","ksb$2","ku$2","ky$2","lb$2","lg$2","lij$2","lkt$2","ln$2","lo$2","mas$2","mg$2","mgo$2","ml$2","mn$2","mr$2","ms$2","my$2","nah$2","naq$2","nb$2","nd$2","ne$2","nl$2","nn$2","nnh$2","no$2","nqo$2","nr$2","nso$2","ny$2","nyn$2","om$2","or$2","os$2","osa$2","pa$2","pap$2","pcm$2","ps$2","rm$2","rof$2","rwk$2","sah$2","saq$2","sat$2","sc$2","scn$2","sd$2","sdh$2","se$2","seh$2","ses$2","sg$2","sma$2","smi$2","smj$2","smn$2","sms$2","sn$2","so$2","sq$2","ss$2","ssy$2","st$2","su$2","sv$2","sw$2","syr$2","ta$2","te$2","teo$2","th$2","ti$2","tig$2","tk$2","tn$2","to$2","tpi$2","tr$2","ts$2","ug$2","und$2","ur$2","uz$2","ve$2","vi$2","vo$2","vun$2","wa$2","wae$2","wo$2","xh$2","xog$2","yi$2","yo$2","yue$2","zh$2","zu$2","Cardinals","af","ak","am","an","n100","ars","as","asa","az","bal","be","t0","n10","bem","bez","bg","bho","bm","bn","bo","br","n1000000","brx","i10","i100","f10","f100","i1000000","ceb","cgg","ckb","de","doi","dsb","dz","eo","es","et","eu","fa","fil","fo","fr","fur","fy","ga","gd","gsw","gu","guw","gv","ha","haw","he","hnj","hsb","hu","hy","ig","io","it","iu","jbo","jgo","jmc","jv","jw","ka","kab","kaj","kcg","kde","kea","kk","kkj","kl","km","kn","ko","ksb","ksh","ku","kw","n1000","n100000","ky","lag","lb","lg","lij","lkt","ln","lv","mas","mg","mgo","mk","ml","mn","mo","mr","my","nah","naq","nb","nd","nnh","no","nqo","nr","nso","ny","nyn","om","or","osa","pa","pap","pcm","prg","ps","pt_PT","rm","ro","rof","rwk","sah","saq","sat","sc","scn","sdh","se","seh","ses","sg","shi","sk","sma","smi","smj","smn","sms","sn","so","sq","sr","ssy","st","su","sv","sw","syr","ta","te","teo","ti","tig","tk","tl","tn","tpi","tr","tzm","ug","uk","und","ur","uz","ve","vec","vi","vo","vun","wa","wae","wo","xh","xog","yi","yo","yue","zu","f$1","a$1","b$1","c$1","d$1","af$1","ak$1","am$1","an$1","ar$1","ars$1","as$1","asa$1","ast$1","az$1","bal$1","be$1","bem$1","bez$1","bg$1","bho$1","bm$1","bn$1","bo$1","br$1","brx$1","bs$1","ca$1","ce$1","ceb$1","cgg$1","chr$1","ckb$1","cs$1","cy$1","da$1","de$1","doi$1","dsb$1","dv$1","dz$1","ee$1","el$1","en$1","eo$1","es$1","et$1","eu$1","fa$1","ff$1","fi$1","fil$1","fo$1","fr$1","fur$1","fy$1","ga$1","gd$1","gl$1","gsw$1","gu$1","guw$1","gv$1","ha$1","haw$1","he$1","hi$1","hnj$1","hr$1","hsb$1","hu$1","hy$1","ia$1","id$1","ig$1","ii$1","io$1","is$1","it$1","iu$1","ja$1","jbo$1","jgo$1","jmc$1","jv$1","jw$1","ka$1","kab$1","kaj$1","kcg$1","kde$1","kea$1","kk$1","kkj$1","kl$1","km$1","kn$1","ko$1","ks$1","ksb$1","ksh$1","ku$1","kw$1","ky$1","lag$1","lb$1","lg$1","lij$1","lkt$1","ln$1","lo$1","lt$1","lv$1","mas$1","mg$1","mgo$1","mk$1","ml$1","mn$1","mo$1","mr$1","ms$1","mt$1","my$1","nah$1","naq$1","nb$1","nd$1","ne$1","nl$1","nn$1","nnh$1","no$1","nqo$1","nr$1","nso$1","ny$1","nyn$1","om$1","or$1","os$1","osa$1","pa$1","pap$1","pcm$1","pl$1","prg$1","ps$1","pt$1","pt_PT$1","rm$1","ro$1","rof$1","ru$1","rwk$1","sah$1","saq$1","sat$1","sc$1","scn$1","sd$1","sdh$1","se$1","seh$1","ses$1","sg$1","sh$1","shi$1","si$1","sk$1","sl$1","sma$1","smi$1","smj$1","smn$1","sms$1","sn$1","so$1","sq$1","sr$1","ss$1","ssy$1","st$1","su$1","sv$1","sw$1","syr$1","ta$1","te$1","teo$1","th$1","ti$1","tig$1","tk$1","tl$1","tn$1","to$1","tpi$1","tr$1","ts$1","tzm$1","ug$1","uk$1","und$1","ur$1","uz$1","ve$1","vec$1","vi$1","vo$1","vun$1","wa$1","wae$1","wo$1","xh$1","xog$1","yi$1","yo$1","yue$1","zh$1","zu$1","PluralCategories","Plurals","i1000","lc_1","isPluralId","hasPlural","firstLocale","strictNumberSign","escape","compiler","fnBody","nfArgs","fnArgs","oc","MIME_TYPE","isHTML","XML_APPLICATION","XML_TEXT","XML_XHTML_APPLICATION","XML_SVG_IMAGE","NAMESPACE","uri","SVG","XML","predicate","ac","conventions","sax","DOMImplementation","XMLReader","normalizeLineEndings","DOMParser","locator","DOMHandler","cdata","lineNumber","columnNumber","_locator","systemId","_toString","chars","java","appendElement","hander","currentElement","mimeType","domBuilder","errorHandler","defaultNSMap","entityMap","HTML_ENTITIES","XML_ENTITIES","setDocumentLocator","errorImpl","isCallback","build","buildErrorHandler","xml","startDocument","createDocument","documentURI","startElement","qName","createElementNS","getURI","getValue","getQName","createAttributeNS","getLocator","nodeValue","setAttributeNode","endElement","startPrefixMapping","endPrefixMapping","processingInstruction","ins","createProcessingInstruction","ignorableWhitespace","characters","charNode","createCDATASection","skippedEntity","endDocument","comm","createComment","startCDATA","endCDATA","startDTD","publicId","impl","implementation","createDocumentType","doctype","fatalError","notEmptyString","orderedSetReducer","toOrderedSet","splitOnASCIIWhitespace","dest","Class","Super","NodeType","ELEMENT_NODE","ATTRIBUTE_NODE","TEXT_NODE","CDATA_SECTION_NODE","ENTITY_REFERENCE_NODE","ENTITY_NODE","PROCESSING_INSTRUCTION_NODE","COMMENT_NODE","DOCUMENT_NODE","DOCUMENT_TYPE_NODE","DOCUMENT_FRAGMENT_NODE","NOTATION_NODE","ExceptionCode","ExceptionMessage","HIERARCHY_REQUEST_ERR","INDEX_SIZE_ERR","DOMSTRING_SIZE_ERR","NOT_FOUND_ERR","WRONG_DOCUMENT_ERR","INVALID_CHARACTER_ERR","NO_DATA_ALLOWED_ERR","NO_MODIFICATION_ALLOWED_ERR","INUSE_ATTRIBUTE_ERR","NOT_SUPPORTED_ERR","DOMException","NodeList","LiveNodeList","_node","_refresh","_updateLiveList","inc","_inc","ls","__set__","$$length","NamedNodeMap","_findNodeIndex","_addNamedNode","newAttr","oldAttr","ownerElement","_onRemoveAttribute","_onAddAttribute","_removeNamedNode","_xmlEncoder","_visitNode","_onUpdateChild","newChild","_removeChild","previousSibling","isDocTypeNode","isElementNode","isTextNode","isElementInsertionPossible","parentChildNodes","docTypeNode","isElementReplacementPossible","assertPreInsertionValidityInDocument","nodeChildNodes","nodeChildElements","parentElementChild","assertPreReplacementValidityInDocument","_insertBefore","_inDocumentAssertion","hasValidParentNodeType","hasInsertableNodeType","assertPreInsertionValidity1to5","newFirst","newLast","pre","Attr","CharacterData","Text","CDATASection","DocumentType","Notation","Entity","EntityReference","ProcessingInstruction","nodeSerializeToString","isHtml","nodeFilter","refNode","lookupPrefix","visibleNamespaces","needNamespaceDefine","ns","addSerializedAttribute","qualifiedName","prefixedNodeName","defaultNS","nsi","pubid","sysid","sub","internalSubset","importNode","node2","attrs2","_ownerElement","INVALID_STATE_ERR","SYNTAX_ERR","INVALID_MODIFICATION_ERR","NAMESPACE_ERR","INVALID_ACCESS_ERR","getNamedItem","setNamedItem","setNamedItemNS","getNamedItemNS","removeNamedItem","removeNamedItemNS","hasFeature","feature","refChild","replaceChild","oldChild","hasChildNodes","appendData","isSupported","hasAttributes","lookupNamespaceURI","isDefaultNamespace","importedNode","rtv","getElementsByClassName","classNames","classNamesSet","nodeClassNames","nodeClassNamesSet","createAttribute","specified","createEntityReference","getAttributeNode","removeAttributeNode","_appendSingleChild","setAttributeNodeNS","getAttributeNodeNS","hasAttributeNS","getAttributeNS","setAttributeNS","getElementsByTagNameNS","substringData","insertData","replaceData","deleteData","splitText","newText","getTextContent","amp","apos","gt","quot","Aacute","aacute","Abreve","abreve","acd","acE","Acirc","acirc","acute","Acy","acy","AElig","aelig","Afr","afr","Agrave","agrave","alefsym","aleph","Alpha","Amacr","amacr","amalg","AMP","And","and","andand","andd","andslope","andv","ang","ange","angmsd","angmsdaa","angmsdab","angmsdac","angmsdad","angmsdae","angmsdaf","angmsdag","angmsdah","angrt","angrtvb","angrtvbd","angsph","angst","angzarr","Aogon","aogon","Aopf","aopf","ap","apacir","apE","ape","apid","ApplyFunction","approx","approxeq","Aring","aring","Ascr","ascr","Assign","asymp","asympeq","Atilde","atilde","Auml","auml","awconint","awint","backcong","backepsilon","backprime","backsim","backsimeq","Backslash","Barv","barvee","Barwed","barwed","barwedge","bbrk","bbrktbrk","bcong","Bcy","bcy","bdquo","becaus","Because","because","bemptyv","bepsi","bernou","Bernoullis","Beta","beta","beth","between","Bfr","bfr","bigcap","bigcirc","bigcup","bigodot","bigoplus","bigotimes","bigsqcup","bigstar","bigtriangledown","bigtriangleup","biguplus","bigvee","bigwedge","bkarow","blacklozenge","blacksquare","blacktriangle","blacktriangledown","blacktriangleleft","blacktriangleright","blank","blk12","blk14","blk34","block","bne","bnequiv","bNot","bnot","Bopf","bopf","bot","bowtie","boxbox","boxDL","boxDl","boxdL","boxdl","boxDR","boxDr","boxdR","boxdr","boxH","boxh","boxHD","boxHd","boxhD","boxhd","boxHU","boxHu","boxhU","boxhu","boxminus","boxplus","boxtimes","boxUL","boxUl","boxuL","boxul","boxUR","boxUr","boxuR","boxur","boxV","boxv","boxVH","boxVh","boxvH","boxvh","boxVL","boxVl","boxvL","boxvl","boxVR","boxVr","boxvR","boxvr","bprime","Breve","breve","brvbar","Bscr","bscr","bsemi","bsim","bsime","bsol","bsolb","bsolhsub","bull","bullet","bumpE","bumpe","Bumpeq","bumpeq","Cacute","cacute","Cap","capand","capbrcup","capcap","capcup","capdot","CapitalDifferentialD","caps","caret","caron","Cayleys","ccaps","Ccaron","ccaron","Ccedil","ccedil","Ccirc","ccirc","Cconint","ccups","ccupssm","Cdot","cdot","cedil","Cedilla","cemptyv","cent","CenterDot","centerdot","Cfr","cfr","CHcy","chcy","check","checkmark","Chi","chi","circ","circeq","circlearrowleft","circlearrowright","circledast","circledcirc","circleddash","CircleDot","circledR","circledS","CircleMinus","CirclePlus","CircleTimes","cirE","cire","cirfnint","cirmid","cirscir","ClockwiseContourIntegral","CloseCurlyDoubleQuote","CloseCurlyQuote","clubs","clubsuit","Colon","colon","Colone","colone","coloneq","comma","commat","comp","compfn","complement","complexes","cong","congdot","Congruent","Conint","conint","ContourIntegral","Copf","copf","coprod","Coproduct","COPY","copysr","CounterClockwiseContourIntegral","crarr","Cross","cross","Cscr","cscr","csub","csube","csup","csupe","ctdot","cudarrl","cudarrr","cuepr","cuesc","cularr","cularrp","Cup","cup","cupbrcap","CupCap","cupcap","cupcup","cupdot","cupor","cups","curarr","curarrm","curlyeqprec","curlyeqsucc","curlyvee","curlywedge","curren","curvearrowleft","curvearrowright","cuvee","cuwed","cwconint","cwint","cylcty","Dagger","dagger","daleth","Darr","dArr","darr","dash","Dashv","dashv","dbkarow","dblac","Dcaron","dcaron","Dcy","dcy","DD","ddagger","ddarr","DDotrahd","ddotseq","deg","Del","Delta","demptyv","dfisht","Dfr","dfr","dHar","dharl","dharr","DiacriticalAcute","DiacriticalDot","DiacriticalDoubleAcute","DiacriticalGrave","DiacriticalTilde","diam","Diamond","diamond","diamondsuit","diams","die","DifferentialD","digamma","disin","divide","divideontimes","divonx","DJcy","djcy","dlcorn","dlcrop","dollar","Dopf","dopf","Dot","dot","DotDot","doteq","doteqdot","DotEqual","dotminus","dotplus","dotsquare","doublebarwedge","DoubleContourIntegral","DoubleDot","DoubleDownArrow","DoubleLeftArrow","DoubleLeftRightArrow","DoubleLeftTee","DoubleLongLeftArrow","DoubleLongLeftRightArrow","DoubleLongRightArrow","DoubleRightArrow","DoubleRightTee","DoubleUpArrow","DoubleUpDownArrow","DoubleVerticalBar","DownArrow","Downarrow","downarrow","DownArrowBar","DownArrowUpArrow","DownBreve","downdownarrows","downharpoonleft","downharpoonright","DownLeftRightVector","DownLeftTeeVector","DownLeftVector","DownLeftVectorBar","DownRightTeeVector","DownRightVector","DownRightVectorBar","DownTee","DownTeeArrow","drbkarow","drcorn","drcrop","Dscr","dscr","DScy","dscy","dsol","Dstrok","dstrok","dtdot","dtri","dtrif","duarr","duhar","dwangle","DZcy","dzcy","dzigrarr","Eacute","eacute","easter","Ecaron","ecaron","ecir","Ecirc","ecirc","ecolon","Ecy","ecy","eDDot","Edot","eDot","edot","efDot","Efr","efr","eg","Egrave","egrave","egs","egsdot","elinters","ell","elsdot","Emacr","emacr","emptyset","EmptySmallSquare","emptyv","EmptyVerySmallSquare","emsp","emsp13","emsp14","ENG","eng","ensp","Eogon","eogon","Eopf","eopf","epar","eparsl","eplus","epsi","Epsilon","epsilon","epsiv","eqcirc","eqcolon","eqsim","eqslantgtr","eqslantless","Equal","EqualTilde","equest","Equilibrium","equiv","equivDD","eqvparsl","erarr","erDot","Escr","escr","esdot","Esim","esim","Eta","eta","eth","Euml","euml","euro","excl","exist","Exists","expectation","ExponentialE","exponentiale","fallingdotseq","Fcy","fcy","female","ffilig","fflig","ffllig","Ffr","ffr","filig","FilledSmallSquare","FilledVerySmallSquare","fjlig","flat","fllig","fltns","fnof","Fopf","fopf","ForAll","forall","fork","forkv","Fouriertrf","fpartint","frac12","frac13","frac14","frac15","frac16","frac18","frac23","frac25","frac34","frac35","frac38","frac45","frac56","frac58","frac78","frasl","frown","Fscr","fscr","gacute","Gamma","gamma","Gammad","gammad","gap","Gbreve","gbreve","Gcedil","Gcirc","gcirc","Gcy","gcy","Gdot","gdot","gE","ge","gEl","gel","geq","geqq","geqslant","ges","gescc","gesdot","gesdoto","gesdotol","gesl","gesles","Gfr","gfr","Gg","gg","ggg","gimel","GJcy","gjcy","gla","glE","glj","gnap","gnapprox","gnE","gne","gneq","gneqq","gnsim","Gopf","gopf","grave","GreaterEqual","GreaterEqualLess","GreaterFullEqual","GreaterGreater","GreaterLess","GreaterSlantEqual","GreaterTilde","Gscr","gscr","gsim","gsime","gsiml","Gt","GT","gtcc","gtcir","gtdot","gtlPar","gtquest","gtrapprox","gtrarr","gtrdot","gtreqless","gtreqqless","gtrless","gtrsim","gvertneqq","gvnE","Hacek","hairsp","half","hamilt","HARDcy","hardcy","hArr","harr","harrcir","harrw","Hat","hbar","Hcirc","hcirc","hearts","heartsuit","hellip","hercon","Hfr","hfr","HilbertSpace","hksearow","hkswarow","hoarr","homtht","hookleftarrow","hookrightarrow","Hopf","hopf","horbar","HorizontalLine","Hscr","hscr","hslash","Hstrok","hstrok","HumpDownHump","HumpEqual","hybull","hyphen","Iacute","iacute","ic","Icirc","icirc","Icy","icy","Idot","IEcy","iecy","iexcl","iff","Ifr","ifr","Igrave","igrave","iiiint","iiint","iinfin","iiota","IJlig","ijlig","Im","Imacr","imacr","ImaginaryI","imagline","imagpart","imath","imof","imped","Implies","incare","infin","infintie","inodot","Int","int","intcal","integers","Integral","intercal","Intersection","intlarhk","intprod","InvisibleComma","InvisibleTimes","IOcy","iocy","Iogon","iogon","Iopf","iopf","Iota","iota","iprod","iquest","Iscr","iscr","isin","isindot","isinE","isins","isinsv","isinv","Itilde","itilde","Iukcy","iukcy","Iuml","iuml","Jcirc","jcirc","Jcy","jcy","Jfr","jfr","jmath","Jopf","jopf","Jscr","jscr","Jsercy","jsercy","Jukcy","jukcy","Kappa","kappa","kappav","Kcedil","kcedil","Kcy","kcy","Kfr","kfr","kgreen","KHcy","khcy","KJcy","kjcy","Kopf","kopf","Kscr","kscr","lAarr","Lacute","lacute","laemptyv","lagran","Lambda","lambda","Lang","langd","langle","lap","Laplacetrf","laquo","Larr","lArr","larr","larrb","larrbfs","larrfs","larrhk","larrlp","larrpl","larrsim","larrtl","lAtail","latail","late","lates","lBarr","lbarr","lbbrk","lbrace","lbrack","lbrke","lbrksld","lbrkslu","Lcaron","lcaron","Lcedil","lcedil","lceil","lcub","Lcy","lcy","ldca","ldquo","ldquor","ldrdhar","ldrushar","ldsh","lE","le","LeftAngleBracket","LeftArrow","Leftarrow","leftarrow","LeftArrowBar","LeftArrowRightArrow","leftarrowtail","LeftCeiling","LeftDoubleBracket","LeftDownTeeVector","LeftDownVector","LeftDownVectorBar","LeftFloor","leftharpoondown","leftharpoonup","leftleftarrows","LeftRightArrow","Leftrightarrow","leftrightarrow","leftrightarrows","leftrightharpoons","leftrightsquigarrow","LeftRightVector","LeftTee","LeftTeeArrow","LeftTeeVector","leftthreetimes","LeftTriangle","LeftTriangleBar","LeftTriangleEqual","LeftUpDownVector","LeftUpTeeVector","LeftUpVector","LeftUpVectorBar","LeftVector","LeftVectorBar","lEg","leg","leq","leqq","leqslant","les","lescc","lesdot","lesdoto","lesdotor","lesg","lesges","lessapprox","lessdot","lesseqgtr","lesseqqgtr","LessEqualGreater","LessFullEqual","LessGreater","lessgtr","LessLess","lesssim","LessSlantEqual","LessTilde","lfisht","lfloor","Lfr","lfr","lgE","lHar","lhard","lharu","lharul","lhblk","LJcy","ljcy","Ll","ll","llarr","llcorner","Lleftarrow","llhard","lltri","Lmidot","lmidot","lmoust","lmoustache","lnap","lnapprox","lnE","lne","lneq","lneqq","lnsim","loang","loarr","lobrk","LongLeftArrow","Longleftarrow","longleftarrow","LongLeftRightArrow","Longleftrightarrow","longleftrightarrow","longmapsto","LongRightArrow","Longrightarrow","longrightarrow","looparrowleft","looparrowright","lopar","Lopf","lopf","loplus","lotimes","lowast","lowbar","LowerLeftArrow","LowerRightArrow","loz","lozenge","lozf","lpar","lparlt","lrarr","lrcorner","lrhar","lrhard","lrm","lrtri","lsaquo","Lscr","lscr","Lsh","lsh","lsim","lsime","lsimg","lsqb","lsquo","lsquor","Lstrok","lstrok","Lt","LT","ltcc","ltcir","ltdot","lthree","ltimes","ltlarr","ltquest","ltri","ltrie","ltrif","ltrPar","lurdshar","luruhar","lvertneqq","lvnE","macr","male","malt","maltese","mapsto","mapstodown","mapstoleft","mapstoup","marker","mcomma","Mcy","mcy","mdash","mDDot","measuredangle","MediumSpace","Mellintrf","Mfr","mho","midast","midcir","middot","minus","minusb","minusd","minusdu","MinusPlus","mlcp","mldr","mnplus","models","Mopf","mopf","mp","Mscr","mscr","mstpos","Mu","mu","multimap","mumap","nabla","Nacute","nacute","nang","nap","napE","napid","napos","napprox","natur","natural","naturals","nbsp","nbump","nbumpe","ncap","Ncaron","ncaron","Ncedil","ncedil","ncong","ncongdot","ncup","Ncy","ncy","ndash","nearhk","neArr","nearr","nearrow","nedot","NegativeMediumSpace","NegativeThickSpace","NegativeThinSpace","NegativeVeryThinSpace","nequiv","nesear","nesim","NestedGreaterGreater","NestedLessLess","NewLine","nexist","nexists","Nfr","nfr","ngE","nge","ngeq","ngeqq","ngeqslant","nges","nGg","ngsim","nGt","ngt","ngtr","nGtv","nhArr","nharr","nhpar","ni","nis","nisd","niv","NJcy","njcy","nlArr","nlarr","nldr","nlE","nle","nLeftarrow","nleftarrow","nLeftrightarrow","nleftrightarrow","nleq","nleqq","nleqslant","nles","nless","nLl","nlsim","nLt","nlt","nltri","nltrie","nLtv","nmid","NoBreak","NonBreakingSpace","Nopf","nopf","Not","not","NotCongruent","NotCupCap","NotDoubleVerticalBar","NotElement","NotEqual","NotEqualTilde","NotExists","NotGreater","NotGreaterEqual","NotGreaterFullEqual","NotGreaterGreater","NotGreaterLess","NotGreaterSlantEqual","NotGreaterTilde","NotHumpDownHump","NotHumpEqual","notin","notindot","notinE","notinva","notinvb","notinvc","NotLeftTriangle","NotLeftTriangleBar","NotLeftTriangleEqual","NotLess","NotLessEqual","NotLessGreater","NotLessLess","NotLessSlantEqual","NotLessTilde","NotNestedGreaterGreater","NotNestedLessLess","notni","notniva","notnivb","notnivc","NotPrecedes","NotPrecedesEqual","NotPrecedesSlantEqual","NotReverseElement","NotRightTriangle","NotRightTriangleBar","NotRightTriangleEqual","NotSquareSubset","NotSquareSubsetEqual","NotSquareSuperset","NotSquareSupersetEqual","NotSubset","NotSubsetEqual","NotSucceeds","NotSucceedsEqual","NotSucceedsSlantEqual","NotSucceedsTilde","NotSuperset","NotSupersetEqual","NotTilde","NotTildeEqual","NotTildeFullEqual","NotTildeTilde","NotVerticalBar","npar","nparallel","nparsl","npart","npolint","npr","nprcue","npre","nprec","npreceq","nrArr","nrarr","nrarrc","nrarrw","nRightarrow","nrightarrow","nrtri","nrtrie","nsc","nsccue","nsce","Nscr","nscr","nshortmid","nshortparallel","nsim","nsime","nsimeq","nsmid","nspar","nsqsube","nsqsupe","nsub","nsubE","nsube","nsubset","nsubseteq","nsubseteqq","nsucc","nsucceq","nsup","nsupE","nsupe","nsupset","nsupseteq","nsupseteqq","ntgl","Ntilde","ntilde","ntlg","ntriangleleft","ntrianglelefteq","ntriangleright","ntrianglerighteq","Nu","nu","numero","numsp","nvap","nVDash","nVdash","nvDash","nvdash","nvge","nvgt","nvHarr","nvinfin","nvlArr","nvle","nvlt","nvltrie","nvrArr","nvrtrie","nvsim","nwarhk","nwArr","nwarr","nwarrow","nwnear","Oacute","oacute","oast","ocir","Ocirc","ocirc","Ocy","ocy","odash","Odblac","odblac","odiv","odot","odsold","OElig","oelig","ofcir","Ofr","ofr","ogon","Ograve","ograve","ogt","ohbar","ohm","olarr","olcir","olcross","oline","olt","Omacr","omacr","Omega","omega","Omicron","omicron","omid","ominus","Oopf","oopf","opar","OpenCurlyDoubleQuote","OpenCurlyQuote","operp","oplus","Or","orarr","orderof","ordf","ordm","origof","oror","orslope","orv","oS","Oscr","oscr","Oslash","oslash","osol","Otilde","otilde","Otimes","otimes","otimesas","Ouml","ouml","ovbar","OverBar","OverBrace","OverBracket","OverParenthesis","par","para","parallel","parsim","parsl","PartialD","Pcy","pcy","percnt","permil","perp","pertenk","Pfr","pfr","Phi","phi","phiv","phmmat","Pi","pi","pitchfork","piv","planck","planckh","plankv","plusacir","plusb","pluscir","plusdo","plusdu","pluse","PlusMinus","plusmn","plussim","plustwo","pm","Poincareplane","pointint","Popf","popf","Pr","prap","prcue","prE","prec","precapprox","preccurlyeq","Precedes","PrecedesEqual","PrecedesSlantEqual","PrecedesTilde","preceq","precnapprox","precneqq","precnsim","precsim","Prime","prime","primes","prnap","prnE","prnsim","prod","Product","profalar","profline","profsurf","Proportion","Proportional","propto","prsim","prurel","Pscr","pscr","Psi","psi","puncsp","Qfr","qfr","qint","Qopf","qopf","qprime","Qscr","qscr","quaternions","quatint","quest","questeq","QUOT","rAarr","race","Racute","racute","radic","raemptyv","Rang","rang","rangd","rangle","raquo","Rarr","rArr","rarr","rarrap","rarrb","rarrbfs","rarrc","rarrfs","rarrhk","rarrlp","rarrpl","rarrsim","Rarrtl","rarrtl","rarrw","rAtail","ratail","ratio","rationals","RBarr","rBarr","rbarr","rbbrk","rbrace","rbrack","rbrke","rbrksld","rbrkslu","Rcaron","rcaron","Rcedil","rcedil","rceil","rcub","Rcy","rcy","rdca","rdldhar","rdquo","rdquor","rdsh","Re","real","realine","realpart","reals","REG","reg","ReverseElement","ReverseEquilibrium","ReverseUpEquilibrium","rfisht","rfloor","Rfr","rfr","rHar","rhard","rharu","rharul","Rho","rho","rhov","RightAngleBracket","RightArrow","Rightarrow","rightarrow","RightArrowBar","RightArrowLeftArrow","rightarrowtail","RightCeiling","RightDoubleBracket","RightDownTeeVector","RightDownVector","RightDownVectorBar","RightFloor","rightharpoondown","rightharpoonup","rightleftarrows","rightleftharpoons","rightrightarrows","rightsquigarrow","RightTee","RightTeeArrow","RightTeeVector","rightthreetimes","RightTriangle","RightTriangleBar","RightTriangleEqual","RightUpDownVector","RightUpTeeVector","RightUpVector","RightUpVectorBar","RightVector","RightVectorBar","ring","risingdotseq","rlarr","rlhar","rlm","rmoust","rmoustache","rnmid","roang","roarr","robrk","ropar","Ropf","ropf","roplus","rotimes","RoundImplies","rpar","rpargt","rppolint","rrarr","Rrightarrow","rsaquo","Rscr","rscr","rsh","rsqb","rsquo","rsquor","rthree","rtimes","rtri","rtrie","rtrif","rtriltri","RuleDelayed","ruluhar","rx","Sacute","sacute","sbquo","Sc","scap","Scaron","scaron","sccue","scE","sce","Scedil","scedil","Scirc","scirc","scnap","scnE","scnsim","scpolint","scsim","Scy","scy","sdot","sdotb","sdote","searhk","seArr","searr","searrow","sect","semi","seswar","setminus","setmn","sext","Sfr","sfr","sfrown","sharp","SHCHcy","shchcy","SHcy","shcy","ShortDownArrow","ShortLeftArrow","shortmid","shortparallel","ShortRightArrow","ShortUpArrow","shy","Sigma","sigma","sigmaf","sigmav","sim","simdot","sime","simeq","simg","simgE","siml","simlE","simne","simplus","simrarr","slarr","SmallCircle","smallsetminus","smashp","smeparsl","smid","smile","smt","smte","smtes","SOFTcy","softcy","sol","solb","solbar","Sopf","sopf","spades","spadesuit","spar","sqcap","sqcaps","sqcup","sqcups","Sqrt","sqsub","sqsube","sqsubset","sqsubseteq","sqsup","sqsupe","sqsupset","sqsupseteq","squ","Square","square","SquareIntersection","SquareSubset","SquareSubsetEqual","SquareSuperset","SquareSupersetEqual","SquareUnion","squarf","squf","srarr","Sscr","sscr","ssetmn","ssmile","sstarf","Star","star","starf","straightepsilon","straightphi","strns","Sub","subdot","subE","sube","subedot","submult","subnE","subne","subplus","subrarr","Subset","subset","subseteq","subseteqq","SubsetEqual","subsetneq","subsetneqq","subsim","subsub","subsup","succ","succapprox","succcurlyeq","Succeeds","SucceedsEqual","SucceedsSlantEqual","SucceedsTilde","succeq","succnapprox","succneqq","succnsim","succsim","SuchThat","Sum","sung","Sup","sup","sup1","sup2","sup3","supdot","supdsub","supE","supe","supedot","Superset","SupersetEqual","suphsol","suphsub","suplarr","supmult","supnE","supne","supplus","Supset","supset","supseteq","supseteqq","supsetneq","supsetneqq","supsim","supsub","supsup","swarhk","swArr","swarr","swarrow","swnwar","szlig","Tab","Tau","tau","tbrk","Tcaron","tcaron","Tcedil","tcedil","Tcy","tcy","tdot","telrec","Tfr","tfr","there4","Therefore","therefore","Theta","theta","thetasym","thetav","thickapprox","thicksim","ThickSpace","thinsp","ThinSpace","thkap","thksim","THORN","thorn","Tilde","tilde","TildeEqual","TildeFullEqual","TildeTilde","timesb","timesbar","timesd","toea","topbot","topcir","Topf","topf","topfork","tosa","tprime","TRADE","trade","triangle","triangledown","triangleleft","trianglelefteq","triangleq","triangleright","trianglerighteq","tridot","trie","triminus","TripleDot","triplus","trisb","tritime","trpezium","Tscr","tscr","TScy","tscy","TSHcy","tshcy","Tstrok","tstrok","twixt","twoheadleftarrow","twoheadrightarrow","Uacute","uacute","Uarr","uArr","uarr","Uarrocir","Ubrcy","ubrcy","Ubreve","ubreve","Ucirc","ucirc","Ucy","ucy","udarr","Udblac","udblac","udhar","ufisht","Ufr","ufr","Ugrave","ugrave","uHar","uharl","uharr","uhblk","ulcorn","ulcorner","ulcrop","ultri","Umacr","umacr","uml","UnderBar","UnderBrace","UnderBracket","UnderParenthesis","Union","UnionPlus","Uogon","uogon","Uopf","uopf","UpArrow","Uparrow","uparrow","UpArrowBar","UpArrowDownArrow","UpDownArrow","Updownarrow","updownarrow","UpEquilibrium","upharpoonleft","upharpoonright","uplus","UpperLeftArrow","UpperRightArrow","Upsi","upsi","upsih","Upsilon","upsilon","UpTee","UpTeeArrow","upuparrows","urcorn","urcorner","urcrop","Uring","uring","urtri","Uscr","uscr","utdot","Utilde","utilde","utri","utrif","uuarr","Uuml","uuml","uwangle","vangrt","varepsilon","varkappa","varnothing","varphi","varpi","varpropto","vArr","varr","varrho","varsigma","varsubsetneq","varsubsetneqq","varsupsetneq","varsupsetneqq","vartheta","vartriangleleft","vartriangleright","Vbar","vBar","vBarv","Vcy","vcy","VDash","Vdash","vDash","vdash","Vdashl","Vee","vee","veebar","veeeq","vellip","Verbar","verbar","Vert","vert","VerticalBar","VerticalLine","VerticalSeparator","VerticalTilde","VeryThinSpace","Vfr","vfr","vltri","vnsub","vnsup","Vopf","vopf","vprop","vrtri","Vscr","vscr","vsubnE","vsubne","vsupnE","vsupne","Vvdash","vzigzag","Wcirc","wcirc","wedbar","Wedge","wedge","wedgeq","weierp","Wfr","wfr","Wopf","wopf","wp","wr","wreath","Wscr","wscr","xcap","xcirc","xcup","xdtri","Xfr","xfr","xhArr","xharr","Xi","xi","xlArr","xlarr","xmap","xnis","xodot","Xopf","xopf","xoplus","xotime","xrArr","xrarr","Xscr","xscr","xsqcup","xuplus","xutri","xvee","xwedge","Yacute","yacute","YAcy","yacy","Ycirc","ycirc","Ycy","ycy","yen","Yfr","yfr","YIcy","yicy","Yopf","yopf","Yscr","yscr","YUcy","yucy","Yuml","yuml","Zacute","zacute","Zcaron","zcaron","Zcy","zcy","Zdot","zdot","zeetrf","ZeroWidthSpace","Zeta","zeta","Zfr","zfr","ZHcy","zhcy","zigrarr","Zopf","zopf","Zscr","zscr","zwj","zwnj","nameStartChar","nameChar","tagNamePattern","copyLocator","parseElementStartPart","currentNSMap","entityReplacer","addAttribute","qname","attributeNames","addValue","attrName","setTagName","closed","localNSMap","nsp","nsPrefix","_copy","parseHtmlSpecialContent","elStartEnd","elEndStart","fixSelfClosed","closeMap","parseDCC","matchs","lastMatch","endDTD","parseInstruction","ElementAttributes","defaultNSMapCopy","surrogate1","surrogate2","fixedFromCharCode","appendText","xt","lineEnd","lineStart","parseStack","tagStart","endMatch","locator2","getLocalName","modifierClass","installElement$1","MANAGER","getDebugName","getDebugInstance","FastBoot","RouterEvent","configKeys","PageTitleService","scheduleOnce","_updateTitle","_validateExistingTitleElement","hasResolveRegistration","fromEnv","pageTitle","configValue","_defaultConfig","scheduleTitleUpdate","applyTokenDefaults","defaultSeparator","defaultPrepend","defaultReplace","inheritFromPrevious","tokenForId","_findTokenById","visibleTokens","sortedTokens","appending","frontGroups","front","lastToken","toBeTitle","updateFastbootTitle","titleDidUpdate","headElement","headChildNodes","titleEl","titleContents","Events","EE","once","addListener","emitter","_events","_eventsCount","clearEvent","eventNames","events","listeners","listenerCount","a2","a3","a4","a5","removeListener","removeAllListeners","prefixed","__awaiter","thisArg","_arguments","generator","fulfilled","rejected","__generator","sent","trys","ops","verb","op","Bounds","fromClientRect","windowBounds","fromDOMRectList","domRectList","domRect","EMPTY","parseBounds","toCodePoints$1","fromCodePoint$1","codeUnits","codePoint","chars$2","lookup$2","i$2","chars$1$1","lookup$1$1","i$1$1","slice16$1","Trie","highStart","highValueIndex","ix","UTRIE2_DATA_BLOCK_LENGTH$1","UTRIE2_INDEX_1_OFFSET$1","UTRIE2_INDEX_2_BLOCK_LENGTH$1","chars$3","lookup$3","i$3","SP","HY","CL","CP","EX","IN","NS","OP","IS","NU","PO","PR","SY","AL","EB","EM","H2","H3","JL","JV","JT","SA","ea_OP","BREAK_NOT_ALLOWED$1","BREAK_ALLOWED$1","UnicodeTrie$1","base64","_byteLength","encoded1","encoded2","encoded3","encoded4","bufferLength","decode$1","view32","polyUint32Array$1","Uint32Array","view16","polyUint16Array$1","headerLength","Trie$1","createTrieFromBase64$1","ALPHABETICS","HARD_LINE_BREAKS","SPACE$1","PREFIX_POSTFIX","LINE_BREAKS","KOREAN_SYLLABLE_BLOCK","HYPHEN","isAdjacentWithSpaceIgnored","currentIndex","classTypes","previousNonSpaceClassType","_lineBreakAtIndex","indicies","forbiddenBreaks","beforeIndex","afterIndex","before","prevIndex","cssFormattedClasses","lineBreak","wordBreak","categories","classType","codePointsToCharacterClasses","isLetterNumber","forbiddenBreakpoints","letterNumber","Break","required","HYPHEN_MINUS","PLUS_SIGN","EOF","isHex","isWhiteSpace","isNameStartCodePoint","isLowerCaseLetter","isUpperCaseLetter","isNonASCIICodePoint","isNameCodePoint","isNonPrintableCodePoint","isValidEscape","isIdentifierStart","isNumberStart","stringToNumber","fraction","fracd","frac","expsign","LEFT_PARENTHESIS_TOKEN","RIGHT_PARENTHESIS_TOKEN","COMMA_TOKEN","SUFFIX_MATCH_TOKEN","PREFIX_MATCH_TOKEN","COLUMN_TOKEN","DASH_MATCH_TOKEN","INCLUDE_MATCH_TOKEN","LEFT_CURLY_BRACKET_TOKEN","RIGHT_CURLY_BRACKET_TOKEN","SUBSTRING_MATCH_TOKEN","BAD_URL_TOKEN","BAD_STRING_TOKEN","CDO_TOKEN","CDC_TOKEN","COLON_TOKEN","SEMICOLON_TOKEN","LEFT_SQUARE_BRACKET_TOKEN","RIGHT_SQUARE_BRACKET_TOKEN","WHITESPACE_TOKEN","EOF_TOKEN","Tokenizer","chunk","consumeToken","consumeCodePoint","consumeStringToken","peekCodePoint","consumeName","reconsumeCodePoint","consumeNumericToken","consumeIdentLikeToken","u1","u2","consumeUnicodeRangeToken","consumeWhiteSpace","questionMarks","digit","endDigits","consumeUrlToken","stringToken","consumeBadUrlRemnants","consumeEscapedCodePoint","consumeStringSlice","amount","endingCodePoint","consumeNumber","repr","hex","hexCodePoint","isSurrogateCodePoint","_tokens","tokenizer","parseValue","parseComponentValue","parseValues","parseComponentValues","reconsumeToken","consumeComponentValue","consumeSimpleBlock","consumeFunction","isEndingTokenFor","functionToken","cssFunction","isDimensionToken","isNumberToken","isIdentToken","isStringToken","isIdentWithValue","nonWhiteSpace","nonFunctionArgSeparator","parseFunctionArgs","isLength","isLengthPercentage","parseLengthPercentageTuple","ZERO_LENGTH","FIFTY_PERCENT","HUNDRED_PERCENT","getAbsoluteValueForTuple","tuple","getAbsoluteValue","GRAD","TURN","_context","isAngle","parseNamedSide","ident","color$1","colorFunction","SUPPORTED_COLOR_FUNCTIONS","namedColor","COLORS","TRANSPARENT","isTransparent","asString","blue","green","red","getTokenColorValue","hue2rgb","t1","t2","hue","hsl","saturation","lightness","hsla","rgba","parseColor","ALICEBLUE","ANTIQUEWHITE","AQUA","AQUAMARINE","AZURE","BEIGE","BISQUE","BLACK","BLANCHEDALMOND","BLUE","BLUEVIOLET","BROWN","BURLYWOOD","CADETBLUE","CHARTREUSE","CHOCOLATE","CORAL","CORNFLOWERBLUE","CORNSILK","CRIMSON","CYAN","DARKBLUE","DARKCYAN","DARKGOLDENROD","DARKGRAY","DARKGREEN","DARKGREY","DARKKHAKI","DARKMAGENTA","DARKOLIVEGREEN","DARKORANGE","DARKORCHID","DARKRED","DARKSALMON","DARKSEAGREEN","DARKSLATEBLUE","DARKSLATEGRAY","DARKSLATEGREY","DARKTURQUOISE","DARKVIOLET","DEEPPINK","DEEPSKYBLUE","DIMGRAY","DIMGREY","DODGERBLUE","FIREBRICK","FLORALWHITE","FORESTGREEN","FUCHSIA","GAINSBORO","GHOSTWHITE","GOLD","GOLDENROD","GRAY","GREEN","GREENYELLOW","GREY","HONEYDEW","HOTPINK","INDIANRED","INDIGO","IVORY","KHAKI","LAVENDER","LAVENDERBLUSH","LAWNGREEN","LEMONCHIFFON","LIGHTBLUE","LIGHTCORAL","LIGHTCYAN","LIGHTGOLDENRODYELLOW","LIGHTGRAY","LIGHTGREEN","LIGHTGREY","LIGHTPINK","LIGHTSALMON","LIGHTSEAGREEN","LIGHTSKYBLUE","LIGHTSLATEGRAY","LIGHTSLATEGREY","LIGHTSTEELBLUE","LIGHTYELLOW","LIME","LIMEGREEN","LINEN","MAGENTA","MAROON","MEDIUMAQUAMARINE","MEDIUMBLUE","MEDIUMORCHID","MEDIUMPURPLE","MEDIUMSEAGREEN","MEDIUMSLATEBLUE","MEDIUMSPRINGGREEN","MEDIUMTURQUOISE","MEDIUMVIOLETRED","MIDNIGHTBLUE","MINTCREAM","MISTYROSE","MOCCASIN","NAVAJOWHITE","NAVY","OLDLACE","OLIVE","OLIVEDRAB","ORANGE","ORANGERED","ORCHID","PALEGOLDENROD","PALEGREEN","PALETURQUOISE","PALEVIOLETRED","PAPAYAWHIP","PEACHPUFF","PERU","PINK","PLUM","POWDERBLUE","PURPLE","REBECCAPURPLE","RED","ROSYBROWN","ROYALBLUE","SADDLEBROWN","SALMON","SANDYBROWN","SEAGREEN","SEASHELL","SIENNA","SILVER","SKYBLUE","SLATEBLUE","SLATEGRAY","SLATEGREY","SNOW","SPRINGGREEN","STEELBLUE","TAN","TEAL","THISTLE","TOMATO","TURQUOISE","VIOLET","WHEAT","WHITE","WHITESMOKE","YELLOW","YELLOWGREEN","backgroundClip","backgroundColor","parseColorStop","processColorStops","stops","lineLength","processStops","stop_1","absoluteValue","gapBegin","stop_2","gapLength","gapValue","calculateGradientDirection","radian","corner","centerX","centerY","atan2","getAngleFromCorner","halfWidth","halfHeight","halfLineLength","distance","findCorner","stat","optimumDistance","optimumCorner","prefixLinearGradient","angle$1","firstToken","colorStop","CLOSEST_SIDE","FARTHEST_SIDE","CLOSEST_CORNER","FARTHEST_CORNER","CIRCLE","ELLIPSE","COVER","CONTAIN","prefixRadialGradient","shape","isColorStop","image_1","imageFunction","SUPPORTED_IMAGE_FUNCTIONS","BACKGROUND_SIZE","isAtPosition_1","backgroundImage","isSupportedImage","backgroundOrigin","backgroundPosition","backgroundRepeat","parseBackgroundRepeat","LINE_BREAK","backgroundSize","isBackgroundSizeInfoToken","borderColorForSide","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","borderRadiusForSide","borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius","borderStyleForSide","borderTopStyle","borderRightStyle","borderBottomStyle","borderLeftStyle","borderWidthForSide","borderTopWidth","borderBottomWidth","bit","parseDisplayValue","float","letterSpacing","WORD_BREAK","STRICT","NORMAL","lineHeight","computeLineHeight","listStyleImage","listStylePosition","listStyleType","marginForSide","marginTop","marginBottom","overflowWrap","paddingForSide","textAlign","textShadow","blur","textTransform","transform$1","transformFunction","SUPPORTED_TRANSFORM_FUNCTIONS","matrix3d","b1","b4","DEFAULT_VALUE","DEFAULT","transformOrigin","BREAK_ALL","KEEP_ALL","opacity","textDecorationColor","textDecorationLine","accumulator","fontWeight","fontVariant","counterIncrement","increments","counterReset","resets","quotes","open_1","close_1","getQuote","quote","boxShadow","spread","inset","paintOrder","layers","webkitTextStrokeColor","webkitTextStrokeWidth","CSSParsedDeclaration","declaration","animationDuration","cssFloat","overflowTuple","textDecoration","isVisible","isTransformed","isPositioned","isPositionedWithZIndex","isFloating","isInlineLevel","CSSParsedPseudoDeclaration","CSSParsedCounterDeclaration","length_1","isDebugging","elementType","getElementDebugType","ElementContainer","textNodes","isHTMLElementNode","bounds","chars$1","lookup$1","i$1","slice16","UTRIE2_DATA_BLOCK_LENGTH","UTRIE2_INDEX_1_OFFSET","UTRIE2_INDEX_2_BLOCK_LENGTH","PseudoElementType","LV","LVT","UnicodeTrie","polyUint32Array","polyUint16Array","createTrieFromBase64","BREAK_NOT_ALLOWED","codePointToClass","_graphemeBreakAtIndex","_codePoints","countRI","GraphemeBreaker","toCodePoints","lastEnd","graphemeBreak","isGreenPixel","createForeignObjectSVG","foreignObject","loadSerializedSVG$1","onerror","FEATURES","SUPPORT_RANGE_BOUNDS","createRange","testElement","TEST_HEIGHT","selectNode","rangeBounds","rangeHeight","testRangeBounds","SUPPORT_WORD_BREAKING","wordSpacing","repeat","textList","setStart","setEnd","boundAhead","testIOSLineBreak","SUPPORT_SVG_DRAWING","testSVG","SUPPORT_FOREIGNOBJECT_DRAWING","fillStyle","fillRect","greenImageSrc","getImageData","testForeignObject","SUPPORT_CORS_IMAGES","crossOrigin","SUPPORT_RESPONSE_TYPE","XMLHttpRequest","responseType","SUPPORT_CORS_XHR","SUPPORT_NATIVE_TEXT_SEGMENTATION","Segmenter","TextBounds","getWrapperBounds","wrapper","segmentGraphemes","segmenter","granularity","segment","bk","breaker","graphemes","splitGraphemes","breakText","breakWords","segmentWords","wordSeparators","LineBreaker","words","word_1","TextContainer","textBounds","clientRects","subSegments","subOffset_1","subSegment","replacementNode","parseTextBounds","CAPITALIZE","capitalize","p2","ImageElementContainer","currentSrc","intrinsicWidth","naturalWidth","intrinsicHeight","naturalHeight","CanvasElementContainer","SVGElementContainer","LIElementContainer","OLElementContainer","reversed","CHECKBOX_BORDER_RADIUS","RADIO_BORDER_RADIUS","CHECKBOX","RADIO","PASSWORD","INPUT_COLOR","InputElementContainer","placeholder","SelectElementContainer","selectedIndex","TextareaElementContainer","IFrameElementContainer","iframe","contentWindow","tree","parseTree","documentBackgroundColor","bodyBackgroundColor","LIST_OWNERS","parseNodeTree","childNode","isSlotElement","assignedNodes","createContainer","createsRealStackingContext","createsStackingContext","isTextareaElement","isSVGElement","isImageElement","isCanvasElement","isLIElement","isOLElement","isInputElement","isIFrameElement","isBodyElement","isSVGElementNode","isVideoElement","isStyleElement","isCustomElement","CounterState","counters","getCounterValue","getCounterValues","canReset","counterNames","ROMAN_UPPER","ARMENIAN","HEBREW","GEORGIAN","createAdditiveCounter","createCounterText","createCounterStyleWithSymbolResolver","codePointRangeLength","isNumeric","resolver","createCounterStyleFromRange","codePointRangeStart","codePointRangeEnd","createCounterStyleFromSymbols","createCJKCounter","multipliers","negativeSign","coefficient","CHINESE_INFORMAL_MULTIPLIERS","CHINESE_FORMAL_MULTIPLIERS","JAPANESE_NEGATIVE","KOREAN_NEGATIVE","appendSuffix","defaultSuffix","cjkSuffix","koreanSuffix","spaceSuffix","CJK_TEN_COEFFICIENTS","CJK_ZEROS","IGNORE_ATTRIBUTE","DocumentCloner","scrolledElements","referenceElement","quoteDepth","toIFrame","windowSize","createIFrameContainer","cloneWindow","documentClone","iframeLoad","iframeLoader","restoreNodeScroll","onclone","clonedReferenceElement","ready","imagesReady","serializeDoctype","restoreOwnerScroll","adoptNode","createElementClone","createCanvasClone","createVideoClone","createStyleClone","srcset","loading","createCustomElementClone","copyCSSStyles","inlineImages","clonedCanvas","clonedCtx","allowTaint","putImageData","attribs","getContextAttributes","preserveDrawingBuffer","video","blankCanvas","appendChildNode","copyStyles","ignoreElements","cloneChildNodes","assignedNode","transitionProperty","styleBefore","styleAfter","createPseudoHideStyles","resolvePseudoContent","BEFORE","AFTER","pseudoElt","anonymousReplacedElement","counterStyle","counterState","counterType","delim","counterStates","counterType_1","PSEUDO_HIDE_ELEMENT_CLASS_BEFORE","PSEUDO_HIDE_ELEMENT_CLASS_AFTER","newClassName","baseValue","CORNER","cloneIframeContainer","imageReady","complete","readyState","ignoredStyleProperties","PSEUDO_HIDE_ELEMENT_STYLE","createStyles","CacheStorage","getOrigin","link","_link","port","isSameOrigin","setContext","isBlobImage","isRenderable","loadImage","useCORS","isInlineImage","useProxy","proxy","isInlineBase64Image","imageTimeout","xhr","reader_1","queryString","timeout_1","timeout","ontimeout","send","INLINE_SVG","INLINE_BASE64","INLINE_IMG","isSVG","Vector","lerp","BezierCurve","startControl","endControl","subdivide","firstHalf","ab","bc","cd","abbc","bccd","isBezierCurve","BoundCurves","tlh","tlv","trh","trv","brh","brv","blh","blv","factors","maxFactor","topWidth","rightHeight","bottomWidth","leftHeight","topLeftBorderDoubleOuterBox","getCurvePoints","TOP_LEFT","topRightBorderDoubleOuterBox","TOP_RIGHT","bottomRightBorderDoubleOuterBox","BOTTOM_RIGHT","bottomLeftBorderDoubleOuterBox","BOTTOM_LEFT","topLeftBorderDoubleInnerBox","topRightBorderDoubleInnerBox","bottomRightBorderDoubleInnerBox","bottomLeftBorderDoubleInnerBox","topLeftBorderStroke","topRightBorderStroke","bottomRightBorderStroke","bottomLeftBorderStroke","topLeftBorderBox","topRightBorderBox","bottomRightBorderBox","bottomLeftBorderBox","topLeftPaddingBox","topRightPaddingBox","bottomRightPaddingBox","bottomLeftPaddingBox","topLeftContentBox","topRightContentBox","bottomRightContentBox","bottomLeftContentBox","r2","ox","oy","xm","ym","calculateBorderBoxPath","curves","calculatePaddingBoxPath","TransformEffect","ClipEffect","OpacityEffect","isClipEffect","effect","equalPath","StackingContext","inlineLevel","nonInlineLevel","negativeZIndex","zeroOrAutoZIndexOrTransformedOrOpacity","positiveZIndex","nonPositionedFloats","nonPositionedInlineLevel","ElementPaint","effects","borderBox","paddingBox","getEffects","inFlow","croplessEffects","parseStackTree","stackingContext","realStackingContext","listItems","treatAsRealStackingContext","paintContainer","listOwnerItems","parentStack","order_1","index_1","index_2","processListItems","numbering","listValue","parsePathForBorder","borderSide","createPathFromCurves","createStrokePathFromCurves","outer1","outer2","inner1","inner2","contentBox","calculateBackgroundRendering","intrinsicSize","backgroundPositioningArea","calculateBackgroundPositioningArea","getBackgroundValueForIndex","backgroundPaintingArea","calculateBackgroundPaintingArea","backgroundImageSize","calculateBackgroundSize","sizeWidth","sizeHeight","calculateBackgroundRepeatPath","isAuto","AUTO","hasIntrinsicValue","intrinsicProportion","hasIntrinsicProportion","hasIntrinsicWidth","hasIntrinsicHeight","hasIntrinsicDimensions","width_3","height_3","SAMPLE_TEXT","FontMetrics","parseMetrics","verticalAlign","baseline","middle","getMetrics","Renderer","CanvasRenderer","_activeEffects","fontMetrics","translate","textBaseline","applyEffects","popEffect","applyEffect","isOpacityEffect","globalAlpha","isTransformEffect","clip","restore","renderStack","renderStackContent","renderNode","paint","renderNodeBackgroundAndBorders","renderNodeContent","renderTextWithLetterSpacing","fillText","letter","createFontStyle","variant","fixIOSSystemFonts","renderTextNode","paintOrderLayer","textShadows","shadowColor","shadowOffsetX","shadowOffsetY","shadowBlur","strokeStyle","lineWidth","lineJoin","strokeText","renderReplacedElement","beginPath","arc","isTextInputElement","canvasTextAlign","_p","_g","_j","_h","_k","_o","_m","mask","paths","moveTo","lineTo","formatPath","closePath","bezierCurveTo","renderRepeat","resizeImage","renderBackgroundImage","this_1","createPattern","x0","y0","gradient_1","createLinearGradient","addColorStop","background","isRadialGradient","top_1","gradient","ry","calculateRadius","radialGradient_1","createRadialGradient","midX","midY","invF","renderSolidBorder","curvePoints","renderDoubleBorder","outerPaths","parsePathForBorderDoubleOuter","innerPaths","parsePathForBorderDoubleInner","hasBackground","borders","calculateBackgroundCurvedPaintingArea","deltaW","deltaH","borderBoxArea","maskOffset","shadowPaintingArea","borders_1","renderDashedDottedBorder","strokePaths","parsePathForBorderStroke","boxPaths","endX","endY","dashLength","spaceLength","useLineDash","multiplier","numberOfDashes","minSpace","maxSpace","setLineDash","lineCap","stroke","path1","path2","calculateContentBoxPath","iOSBrokenFonts","fontFamilies","ForeignObjectRenderer","loadSerializedSVG","Logger","Context","instanceName","instanceCount","renderElement","resourceOptions","contextOptions","windowOptions","foreignObjectRendering","cloneOptions","documentCloner","clonedElement","_u","parseDocumentSize","parseBackgroundColor","renderOptions","_q","_r","removeContainer","backgroundColorOverride","defaultBackgroundColor","u16","u32","fleb","fdeb","clim","freb","eb","revfl","revfd","hMap","mb","co","rvb","r_1","flt","fdt","flm","flrm","fdm","fdrm","bits16","shft","slc","wbits","wbits16","hTree","i0","i1","i2","maxSym","mbt","lft","cst","i2_1","i2_2","i2_3","cli","cln","wfblk","dat","wblk","final","syms","lf","df","li","dlt","mlb","ddt","lclt","nlc","lcdt","ndc","lcfreq","lct","mlcb","nlcc","lm","dm","ftlen","dtlen","llm","lcts","clct","deo","dopt","post","lvl","plvl","msk_1","bs1_1","bs2_1","hsh","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","mmd","md","lin","din","dflt","mem","zlibSync","adler","zlh","wbytes","unzlibSync","noBuf","noSt","cbuf","nbuf","lbt","dbt","tbts","hLit","hcLen","ldt","clt","clb","clbmsk","clm","lms","dms","mxa","dsym","inflt","zlv","MouseEvent","initMouseEvent","msSaveOrOpenBlob","autoBom","innerText","safari","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","feldspar","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslateblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","violetred","wheat","white","whitesmoke","yellow","yellowgreen","example","toRGB","toHex","btoa","print","perm","processOwnerPassword","encryptionKey","lsbFirstWord","hexToBytes","getTopics","objectNumber","gState","colors","boundingBox","xStep","yStep","stream","cloneIndex","compress","compressPdf","encryption","userPassword","ownerPassword","userPermissions","userUnit","floatPrecision","defaultPathOperation","putOnlyUsedFonts","__private__","PubSub","getPdfVersion","setPdfVersion","a0","a6","a7","a8","a9","a10","b0","b3","b6","b7","b9","b10","c0","c4","c5","c6","c7","c8","c9","c10","ledger","tabloid","getPageFormats","getPageFormat","saveGraphicsState","Vt","Rr","getFontSize","restoreGraphicsState","combineFontStyleAndFontWeight","advancedAPI","compatAPI","isAdvancedAPI","roundToPrecision","hpf","setPrecision","getFileId","setFileId","Ye","convertDateToPDFDate","getTimezoneOffset","convertPDFDateToDate","setCreationDate","getCreationDate","padd2","padd2Hex","nt","at","ot","setCustomOutputDestination","resetCustomOutputDestination","getArrayBuffer","getStandardFonts","R2L","setR2L","getR2L","yt","setZoomMode","getZoomMode","Nt","setPageMode","getPageMode","At","setLayoutMode","getLayoutMode","setDisplayMode","subject","creator","getDocumentProperty","getDocumentProperties","setDocumentProperties","setDocumentProperty","St","Pt","kt","It","Ft","Ct","jt","Ot","Bt","Mt","Et","qt","Dt","Rt","Tt","Ut","hotfixes","zt","Ht","Wt","_matrix","shx","sx","decompose","sy","tx","ty","multiply","rotate","skew","inversed","applyToPoint","Cr","applyToRectangle","jr","Matrix","matrixMult","Yt","unitMatrix","identityMatrix","Jt","ShadingPattern","TilingPattern","addShadingPattern","beginTilingPattern","Br","endTilingPattern","Xt","newObject","Kt","Zt","newObjectDeferred","newAdditionalObject","objId","Qt","decodeColorString","encodeColorString","ch1","ch2","ch3","ch4","pdfColorType","getFilters","ie","putStream","alreadyAppliedFilters","addLength1","objectId","encryptor","additionalKeyValues","API","processDataByFilters","reverseChain","ae","putPage","contentsObjId","rootDictionaryObjId","resourceDictionaryObjId","mediaBox","bottomLeftX","bottomLeftY","topRightX","topRightY","cropBox","bleedBox","trimBox","artBox","pageContext","pageNumber","oe","putPages","isAlreadyPutted","postScriptName","ue","pages","fe","resourcesOid","objectOid","ye","we","Ne","Le","Pe","isStandardFont","pdfEscape","sourceEncoding","outputEncoding","autoencode","codePages","noBOM","Fe","je","beginPage","Me","Oe","Lr","kr","Ir","setPage","Ee","qe","disableWarning","noFallback","normal","De","putInfo","putCatalog","putTrailer","oid","Ue","putHeader","ze","putXRef","buildDocument","Se","me","pe","MAX_SAFE_INTEGER","xe","toHexString","We","getBlob","Ve","unescape","pdfObjectUrl","pdfJsUrl","PDFViewerApplication","alert","bar","Ge","Xe","getPageInfo","Ke","getPageInfoByObjId","Ze","getCurrentPageInfo","insertPage","movePage","lineHeightFactor","scaleFactor","TabLen","mutex","activeFontKey","activeFontSize","rotationDirection","charSpace","setCharSpace","getCharSpace","horizontalScale","renderingMode","usedRenderingMode","getStringUnitWidth","doKerning","yr","ut","xr","$e","clipEvenOdd","discardPath","Qe","isValidStyle","setDefaultPathOperation","getStyle","er","fillEvenOdd","fillStroke","fillStrokeEvenOdd","ir","setGState","cr","curveTo","roundedRect","SQRT2","ellipse","circle","getFont","getFontList","dr","getLineWidth","setLineDashPattern","gr","getLineHeight","setLineHeightFactor","vr","getLineHeightFactor","getHorizontalCoordinate","getVerticalCoordinate","getHorizontalCoordinateString","Nr","getVerticalCoordinateString","strokeColor","getStrokeColor","getDrawColor","setStrokeColor","setDrawColor","Ar","fillColor","getFillColor","textColor","Sr","getTextColor","CapJoinStyles","butt","but","miter","rounded","projecting","project","bevel","setLineCap","setLineJoin","setLineMiterLimit","setMiterLimit","GState","Fr","addGState","setCurrentTransformationMatrix","currentPage","pagesContext","qr","outputDestination","Dr","Tr","Er","beginFormObject","endFormObject","Mr","doFormObject","getFormObject","returnPromise","unload","getPageWidth","setPageWidth","getPageHeight","setPageHeight","getCoordinateString","collections","newObjectDeferredBegin","setHeight","encryptionOptions","getEncryptor","getPDFVersion","Point","Rectangle","hasHotfix","__acroform__","BBox","setBit","clearBit","getBit","getBitForPdf","setBitForPdf","clearBitForPdf","calculateCoordinates","lowerLeft_X","lowerLeft_Y","upperRight_X","upperRight_Y","appearanceStreamContent","DV","_V","maxFontSize","xForms","acroFormDictionaryRoot","printedOut","isInitialized","annotations","arrayToPdfArray","_objId","_scope","getKeyValueListForStream","FieldNum","Rect","Ff","FT","addOption","removeOption","combo","hasAppearanceStream","edit","pushButton","radio","caption","appearanceState","_AppearanceType","RadioButton","Circle","createAppearanceStream","optionName","setAppearance","Kids","getCA","createOption","Parent","CheckBox","isInteger","On","YesNormal","YesPushDown","Off","OffPushDown","Bezier_C","calculateCross","x4","x3","createDefaultAppearanceStream","addField","acroformPlugin","_eventID","Fields","AcroFormChoiceField","AcroFormListBox","AcroFormComboBox","AcroFormEditBox","AcroFormButton","AcroFormPushButton","AcroFormRadioButton","AcroFormCheckBox","AcroFormTextField","AcroFormPasswordField","AcroFormAppearance","AcroForm","ChoiceField","ListBox","ComboBox","EditBox","Button","PushButton","TextField","PasswordField","Appearance","__addimage__","PNG","TIFF","JPEG","JPEG2000","GIF87a","GIF89a","WEBP","BMP","getImageFileTypeByImageData","Uint8ClampedArray","colorSpace","INDEXED","palette","sMask","DEVICE_CMYK","bitsPerComponent","decodeParameters","transparency","predictor","addImage_images","alias","color_spaces","DEVICE_RGB","DEVICE_GRAY","CAL_GREY","CAL_RGB","LAB","ICC_BASED","PATTERN","SEPARATION","DEVICE_N","DCT_DECODE","FLATE_DECODE","LZW_DECODE","JPX_DECODE","JBIG2_DECODE","ASCII85_DECODE","ASCII_HEX_DECODE","RUN_LENGTH_DECODE","CCITT_FAX_DECODE","image_compression","NONE","FAST","MEDIUM","SLOW","sHashCode","validateStringAsBase64","extractImageFromDataUrl","supportsArrayBuffer","isArrayBuffer","isArrayBufferView","Int8Array","Int16Array","Float64Array","binaryStringToUint8Array","arrayBufferToBinaryString","convertBase64ToBinaryString","getImageProperties","contents","_nameMap","finalBounds","magFactor","zoom","createAnnotation","textWithLink","getTextWidth","__arabicParser__","isInArabicSubstitutionA","isArabicLetter","isArabicEndLetter","isArabicAlfLetter","arabicLetterHasIsolatedForm","arabicLetterHasFinalForm","arabicLetterHasInitialForm","arabicLetterHasMedialForm","resolveLigatures","isArabicDiacritic","getCorrectForm","processArabic","autoPrint","addJS","pageWrapXEnabled","pageWrapX","pageWrapYEnabled","pageWrapY","context2d","__cell__","headerFunction","setHeaderFunction","cellAddPage","tableHeaderRow","printHeaders","printHeaderRow","headerBackgroundColor","headerTextColor","table_font_size","prompt","setTableHeaderRow","rowStart","cellStart","table_x","table_y","oblique","weight","stretch","fixed","monospace","terminal","cursive","fantasy","serif","icon","menu","trimLeft","isStrokeTransparent","strokeOpacity","isFillTransparent","fillOpacity","globalCompositeOperation","clip_path","currentPoint","miterLimit","lastPoint","lineDashOffset","lineDash","prevPageLastElemOffset","ignoreClearRect","fontFaces","defaultFontFamily","genericFontFamilies","arial","Arial","verdana","Verdana","helvetica","Helvetica","getLineDash","quadraticCurveTo","isIdentity","radius","startAngle","endAngle","counterclockwise","arcTo","strokeRect","clearRect","ctxStack","isCanvasGradient","getColor","setTransform","autoPaging","posY","begin","deltas","colorStops","y3","y4","prevLineDash","overrideMimeType","responseText","loadImageFile","html2canvas","DOMPurify","dompurify","sanitize","convert","setProgress","overlay","progress","enableLinks","jsPDF","toContainer","toCanvas","toImg","toPdf","thenList","setPageSize","javascriptEnabled","onrendered","toContext2d","quality","outputImg","outputPdf","doCallback","setMargin","getPageSize","inner","updateProgress","thenCore","thenExternal","catchExternal","using","worker","createNamedDestinations","makeRef","genIds_r","renderRoot","renderItems","objStart","count_r","objEnd","makeString","processJPEG","numcomponents","readUInt32","colorType","compressionMethod","filterMethod","interlaceMethod","numFrames","numPlays","frames","readUInt16","disposeOp","blendOp","indexed","grayscale","hasAlphaChannel","pixelBitlength","decodePixels","decodePalette","copyToImageData","_decodedPalette","decodeFrames","createImageData","renderFrame","_timeout","stopAnimation","_png","has_local_palette","palette_offset","palette_size","data_offset","data_length","transparent_index","interlaced","disposal","loopCount","frameInfo","decodeAndBlitFrameBGRA","decodeAndBlitFrameRGBA","datav","is_with_alpha","bottom_up","parseHeader","parseBGR","jc","Qb","qb","Ka","Jd","Yc","Zc","Sb","Ra","bb","Ur","zr","Hr","Mb","Xa","ud","hd","jd","Ea","Hn","Wn","Vn","Gn","fb","ea","Ed","Fd","Db","Ab","Rd","RGBA","kb","Pd","Qd","Md","ib","bd","Sd","ob","Mc","Nc","ec","fc","Rc","Tn","Kb","Sn","An","ma","qn","Rn","Un","memory","Ib","Jb","Nd","Oa","ji","Si","Mi","Oi","ki","Ei","qi","Dc","$n","xc","Wb","Ya","Ua","nc","hc","Gr","Wr","Zr","$r","Yr","va","Ma","En","Qr","xn","zn","rn","ua","qd","rd","Xr","Pb","Wa","wc","wd","xd","vb","yc","xb","VP8LMapColor32b","Jr","VP8LMapColor8b","Kr","Oc","Qn","Xn","Zn","Jn","Yn","Kn","ub","yd","td","Rb","Kd","Ld","Ud","Fb","Bb","Cb","Zb","Lb","Yb","jb","Wc","Xc","Pc","zd","vd","od","ld","La","tc","Na","la","Eb","Qc","ad","Za","Ob","$b","Ad","Gc","Hc","Dd","uc","Nb","ya","aa","Od","ed","Qa","Ic","$c","Xb","Va","Hb","zb","yb","Ub","za","Jc","Pa","Bd","kc","Ac","Bc","zc","Gd","Hd","rb","sb","qa","ra","Ia","Ec","Vb","Fc","Fa","Cc","qc","Gb","Uc","rc","Ga","Vc","ei","ui","Ri","Ui","Vd","Cn","Pn","In","Fn","un","hn","Je","pn","gn","vn","yn","wn","Nn","Ln","ke","Ie","Bn","jn","Mn","kd","na","xa","gb","Sa","Lc","$a","mc","bi","Ni","Li","Fi","Ii","Di","zi","Predictor0","Predictor1","Predictor2","Predictor3","Predictor4","Predictor5","Predictor6","Predictor7","Predictor8","Predictor9","Predictor10","Predictor11","Predictor12","Predictor13","PredictorAdd0","PredictorAdd1","PredictorAdd2","ColorIndexInverseTransform","MapARGB","VP8LColorIndexInverseTransformAlpha","MapAlpha","VP8LPredictorsAdd","VP8LPredictors","VP8LPredictorsAdd_C","VP8LPredictors_C","UpsampleRgbLinePair","UpsampleBgrLinePair","UpsampleRgbaLinePair","UpsampleBgraLinePair","UpsampleArgbLinePair","UpsampleRgba4444LinePair","UpsampleRgb565LinePair","Ti","WebPDecodeRGBA","src_off","src_size","feature_flags","canvas_width","canvas_height","bgcolor","loop_count","offset_x","offset_y","dispose","blend","rgbaoutput","dataurl","loop_counter","imgwidth","imgheight","processPNG","processGIF89A","processGIF87A","fileSize","getUint32","reserved","headerSize","getInt32","planes","getUint16","bitPP","rawSize","importantColors","getUint8","quad","bit1","bit4","bit8","bit15","bit16","bit24","bit32","processBMP","processWEBP","processRGBA","setLanguage","languageSettings","isSubscribed","cv","fj","nv","ng","qu","languageCode","getCharWidthsArray","Unicode","fof","kerning","widthOfString","widthOfGlyph","characterToGlyph","textIndent","lineIndent","__fontmetrics__","uncompress","WinAnsiEncoding","Courier","ZapfDingbats","existsFileInVFS","getFileFromVFS","TTFFont","glyIdsUsed","canvg","addSvgAsImage","ignoreMouse","ignoreAnimation","ignoreDimensions","fromString","putTotalPages","pdfEscape16","viewerPreferences","HideToolbar","explicitSet","valueSet","pdfVersion","HideMenubar","HideWindowUI","FitWindow","CenterWindow","DisplayDocTitle","NonFullScreenPageMode","Direction","ViewArea","ViewClip","PrintArea","PrintClip","PrintScaling","Duplex","PickTrayByPDFSize","PrintPageRange","NumCopies","viewerpreferences","configuration","__metadata__","namespaceuri","metadata_object_number","addMetadata","toUnicode","PDFObject","stemV","italicAngle","ascender","decender","capHeight","rawData","hmtx","unitsPerEm","codeMap","vFS","__bidiEngine__","EN","AN","hiLevel","doBidiReorder","isInputVisual","isOutputVisual","isInputRtl","isOutputRtl","isSymmetricSwapping","readString","registerTTF","directory","hhea","maxp","os2","loca","glyf","lineGap","xMin","yMin","xMax","yMax","italic_angle","xHeight","familyClass","isSerif","isScript","isFixedPitch","forGlyph","advance","readByte","writeByte","writeUInt32","readInt32","writeInt32","writeUInt16","readInt16","writeInt16","writeString","readShort","writeShort","readLongLong","writeLongLong","readInt","writeInt","scalarType","tableCount","searchRange","entrySelector","rangeShift","tables","checksum","__super__","revision","checkSumAdjustment","magicNumber","created","macStyle","lowestRecPPEM","fontDirectionHint","indexToLocFormat","glyphDataFormat","platformID","encodingID","isUnicode","charMap","subtable","maxGlyphID","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","caretOffset","metricDataFormat","numberOfMetrics","averageCharWidth","weightClass","widthClass","ySubscriptXSize","ySubscriptYSize","ySubscriptXOffset","ySubscriptYOffset","ySuperscriptXSize","ySuperscriptYSize","ySuperscriptXOffset","ySuperscriptYOffset","yStrikeoutSize","yStrikeoutPosition","panose","charRange","vendorID","firstCharIndex","lastCharIndex","ascent","descent","winAscent","winDescent","codePageRange","defaultChar","breakChar","maxContext","underlinePosition","underlineThickness","minMemType42","maxMemType42","minMemType1","maxMemType1","glyphNameIndex","numGlyphs","languageID","nameID","strings","copyright","fontSubfamily","uniqueSubfamily","postscriptName","trademark","designer","vendorUrl","designerUrl","license","licenseUrl","preferredFamily","preferredSubfamily","compatibleFull","sampleText","maxPoints","maxContours","maxCompositePoints","maxComponentContours","maxZones","maxTwilightPoints","maxStorage","maxFunctionDefs","maxInstructionDefs","maxStackElements","maxSizeOfInstructions","maxComponentElements","maxComponentDepth","metrics","lsb","leftSideBearings","glyphFor","lengthOf","numberOfContours","compound","glyphIDs","glyphOffsets","unicodes","generateCmap","glyphsFor","isString","typeOf","shouldSkip","structuredClone","any","deserialize","serialized","lossy","toJSON","deserializer","unpair","BigInt","VALUE","Change","maybeChange","keysUpToValue","getKeyErrorValues","isPromiseLike","handleValidationsAsync","maybeFailed","getSubObject","validators","handleValidationsSync","handleMultipleValidations","Notifier","notifierForEvent","_eventedNotifiers","notifier","hasKey","pathInChanges","isObj","hasChanges","isTruthy","pureAssign","validatorMap","keysUpToFunction","flattenValidations","CHANGESET","keyInObject","baseKey","findSiblings","leafKey","remaining","isValidKey","setDeep","isComplex","changeValue","siblings","isArrayLike","nestedKeys","mergeNested","finalObj","getEnumerableOwnPropertySymbols","objectProxyHandler","childValue","childContent","ObjectTreeNode","nodeContent","Reflect","defaultSafeGet","isObject$1","unwrap","objectWithout","excludedKeys","sources","keys$1","PREVIOUS_CONTENT","ERRORS","ERRORS_CACHE","OPTIONS","ValidatedChangeset","__changeset__","_len5","_key5","newFormat","validationKeys","userChangesetKeys","changesetKeys","setUnknownProperty","chKey","toStringTag","unexecute","rollback","_rollbackKeys","rollbackInvalid","errorKeys","errKey","newError","isIErr","removeError","removeErrors","existingError","_len6","_key6","snapshot","getChangesForSnapshot","newObj","newChanges","getChangesFromSnapshot","getChangeForProp","previousNode","currentKey","curr","changesValue","baseChanges","normalizedBaseChanges","baseContent","subContent","subChanges","keys$2","CONTENT$1","PREVIOUS_CONTENT$1","CHANGES$1","ERRORS$1","ERRORS_CACHE$1","VALIDATOR","OPTIONS$1","RUNNING_VALIDATIONS","AFTER_VALIDATION_EVENT","defaultOptions","skipValidate","maybeUnwrapProxy$1","validatorMapKeys","initValidate","_collectErrors","_len7","_key7","_bareChanges","_ref5","_handleValidation","_validateKey","prepareChangesFn","preparedChanges","savePromise","maybePromise","newChangeset","ValidatedChangeset$1","mergedErrors","mergedChanges","_ref6","_len8","_key8","_len9","_key9","_ref7","cast","allowed","casted","originalObj","keysToTake","take","isValidating","runningValidations","_validate","_setIsValidating","running","promises","resolvedValidation","_ref8","_isValidResult","validationResult","_ref9","validationError","changeset$1","toPropertyKey","__export","decorateClass","decorateFieldV1","decorateFieldV2","initializeDeferredDecorator","decorateMethodV1","decorateMethodV2","decoratePOJO","deferred","decorators","decorator","deferDecorator","cursor","_deferred$get","findDeferredDecorator","accum","pojo","decorated","decoratePojoField","_Object$getOwnPropert"],"sourceRoot":""}