{"version":3,"file":"static/js/52093.f0973a58.js","mappings":"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IAAK,gBACL,IAAK,YACL,IAAK,aACL,IAAK,UACL,IAAK,OACL,IAAK,cACL,IAAK,UACL,IAAK,YACL,IAAK,iBACL,IAAK,cACL,IAAK,oBACL,IAAK,gBACL,IAAK,eACL,IAAK,iBACL,IAAK,kBACL,IAAK,cACL,IAAK,qBACL,IAAK,SACL,IAAK,cACL,IAAK,WACL,IAAK,WACL,IAAK,eACL,IAAK,eACL,IAAK,iBACL,IAAK,eACL,IAAK,kBACL,IAAK,qBACL,IAAK,aACL,IAAK,YACL,IAAK,YACL,IAAK,gBACL,IAAK,cACL,IAAK,eACL,IAAK,kBACL,IAAK,oBACL,IAAK,kBACL,IAAK,iBACL,IAAK,UACL,IAAK,YACL,IAAK,YACL,IAAK,aACL,IAAK,cACL,IAAK,UACL,IAAK,SACL,IAAK,cACL,IAAK,UACL,IAAK,oBACL,IAAK,kBACL,IAAK,QACL,IAAK,aACL,IAAK,YACL,IAAK,cACL,IAAK,mBACL,IAAK,oBACL,IAAK,cACL,IAAK,cACL,IAAK,mBACL,IAAK,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,IAAK,qBACL,IAAK,cACL,IAAK,mBACL,IAAK,uBACL,IAAK,mBACL,IAAK,kBACL,IAAK,mBACL,IAAK,cACL,IAAK,iBACL,IAAK,kBACL,IAAK,eACL,IAAK,eACL,IAAK,oBACL,IAAK,sBACL,IAAK,sBACL,IAAK,mBACL,IAAK,qBACL,IAAK,qBACL,IAAK,gBACL,IAAK,aACL,IAAK,YACL,IAAK,cACL,IAAK,mBACL,IAAK,gBACL,IAAK,wBACL,IAAK,qBACL,IAAK,SACL,IAAK,kBACL,IAAK,gBACL,IAAK,kBACL,IAAK,gBACL,IAAK,gBACL,IAAK,mBACL,IAAK,mBACL,IAAK,oBACL,IAAK,eACL,IAAK,oBACL,IAAK,uBACL,IAAK,cACL,IAAK,WACL,IAAK,WACL,IAAK,aACL,IAAK,aACL,IAAK,eACL,IAAK,eACL,IAAK,cACL,IAAK,qBACL,IAAK,yBACL,IAAK,mBACL,IAAK,WACL,IAAK,iBACL,IAAK,iBACL,IAAK,eACL,IAAK,YACL,IAAK,mBACL,IAAK,mBACL,IAAK,iBAC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AK,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,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CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEF,EAGA,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAA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GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEF,EAGA,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,MAEE,CACAgJ,EAAG,KAKH6oD,GAAgB,CAIlB,EAEE,CAEA9qD,EAAGg5C,IAIL,GAEE,CAEAh5C,EAAGwwB,IAIL,GAEE,CAEAxwB,EAAGywB,IAKL,GAEE,CAEAzwB,EAAGywB,IAKL,GAEE,CAEAzwB,EAAG4vB,IAKL,GAEE,CAEA5vB,EAAG4vB,IAKL,GAEE,CAEA5vB,EAAG6nB,IAKL,GAEE,CAEA7nB,EAAG4vB,IAKL,GAEE,CAEA5vB,EAAG4vB,IAIL,GAEE,CAEA5vB,EAAGywB,IAIL,GAEE,CAEAzwB,EAAG+zB,IAIL,GAEE,CAEA/zB,EAAG+zB,IAIL,GAEE,CAEA/zB,EAAGu1B,IAIL,GAEE,CAEAv1B,EAAG60B,IAIL,GAEE,CAEA70B,EAAG4vB,IAIL,GAEE,CAEF,EAGA,GAEE,CAEF,EAGA,GAEE,CAEA5vB,EA3x6BJ,SAAoBwE,EAAMpS,EAAQsG,GAEhC,OAlBF,SAAsB8L,EAAMpS,EAAQsG,GAClC,KAAIA,EAAK+qB,KAAO,GAAhB,CACA,IAAIhe,EAAMjB,EAAKG,WAAW,GACtB2f,EAAM9f,EAAKG,WAAW,GACtBD,EAAQF,EAAKG,WAAW,GACxBouD,EAAQvuD,EAAKG,WAAW,GACxBquD,EAAWzhC,GAAuB/sB,EAAM,EAAG9L,GAE/C,OADIA,EAAK+qB,KAAO,GAAGjf,EAAKG,WAAW,GAC5B,CAAC,CACN3G,EAAGyH,EACHjQ,EAAG8uB,GACF0uC,EAAUD,EAAOruD,EAVK,CAW3B,CAMSuuD,CAAazuD,EAAMpS,EAAQsG,EACpC,GA4x6BE,GAEE,CAEF,EAGA,GAEE,CAEAsH,EAAG4vB,IAIL,GAEE,CAEA5vB,EAAGg0B,IAIL,GAEE,CAEAh0B,EAAG6nB,IAKL,GAEE,CAEA7nB,EAAG6nB,IAKL,GAEE,CAEA7nB,EAAG6nB,IAKL,GAEE,CAEA7nB,EAAG6nB,IAKL,GAEE,CAEA7nB,EAAG4vB,IAIL,GAEE,CAEA5vB,EAAG4vB,IAIL,GAEE,CAEA5vB,EAjwuBJ,SAAwBwE,EAAMpS,EAE5BsG,GACA,IAAIzG,EAAI,CACNy4B,KAAMhyB,EAAK+qB,MAAQ,EAAIjf,EAAKG,WAAW,GAAK,GAO9C,OADI1S,EAAEy4B,KAAMqgB,GAAqBvmC,EAAMpS,EAAS,EAAGH,GAnCrD,SAA8BuS,EAAMpS,EAAQsG,EAAMM,GAChD,IAAI/G,EAAI,CACN0zD,IAAKl1B,GAAYjsB,GACjB0uD,kBAAmBziC,GAAYjsB,IAI7B9L,EAAKoxC,WAAU73C,EAAEkhE,SAAWjqB,GAAsCxwC,EAAKoxC,WAC3E9wC,EAAIgvC,MAAQ/1C,EAAEihE,oBAAsBjhE,EAAEkhE,SAClCn6D,EAAIgvC,QAAOhvC,EAAI4xD,OAASpgB,GAAwB9xC,EAAKoxC,UAE3D,CAwB6DspB,CAAqB5uD,EAAM9L,EAAK+qB,KAAiC/qB,EAAMzG,GAC3HA,CACT,GAyvuBE,GAEE,CAEA+N,EAx57BJ,SAAoBwE,EAAMpS,EAAQsG,GAChC,IAAIzG,EAEF,CACAohE,SAAU7uD,EAAKG,WAAW,GAC1B2uD,GAAI9uD,EAAKG,WAAW,IAGtB,OAAQjM,GAAQA,EAAK+qB,MAAQ,GAC3B,KAAK,EACH,MAEF,KAAK,EACL,KAAK,EACHjf,EAAKrE,GAAK,EACV,MAEF,QACEqE,EAAKrE,GAAK,GAKd,OADAlO,EAAEsW,KAAOqoB,GAA2BpsB,EAAM,EAAG9L,GACtCzG,CACT,GAo47BE,GAEE,CAEA+N,EAAGywB,IAIL,GAEE,CAEF,EAGA,GAEE,CAEAzwB,EAl/7BJ,SAAuBwE,GAUrB,MAAO,CACL+uD,IAAK,CAVG/uD,EAAKG,WAAW,GAChBH,EAAKG,WAAW,IAUxB6uD,IAAK,CATIhvD,EAAKG,WAAW,GAChBH,EAAKG,WAAW,IASzBmjC,MARUtjC,EAAKG,WAAW,GAS1B8uD,OARYjvD,EAAKG,WAAW,GAS5B+uD,SARclvD,EAAKG,WAAW,GAS9BgvD,SARYnvD,EAAKG,WAAW,GAS5BivD,SARcpvD,EAAKG,WAAW,GAUlC,GAm+7BE,GAEE,CAEA3E,EAAG4vB,IAIL,GAEE,CAEA5vB,EAr87BJ,WAEc,GAu87BZ,GAEE,CAEAA,EAAGywB,IAIL,GAEE,CAEF,EAGA,GAEE,CAEF,EAGA,GAEE,CAEF,EAGA,GAEE,CAEF,EAGA,GAEE,CAEAzwB,EAAGywB,IAIL,GAEE,CAEF,EAGA,GAEE,CAEF,EAGA,GAEE,CAEF,EAGA,GAEE,CAEAzwB,EA5x8BJ,SAA2BwE,EAAMpS,EAAQsG,GACvC,GAAIA,EAAKhE,IAEP,OADA8P,EAAKrE,GAAK/N,EACH,GAGT,IAAI+N,EAAIqE,EAAKrE,EAET0zD,EAAWtiC,GAAuB/sB,EAAM,EAAG9L,GAE/C,OADA8L,EAAKG,WAAWvS,EAAS+N,EAAIqE,EAAKrE,GAC3B0zD,CACT,GAqx8BE,GAEE,CAEA7zD,EAz86BJ,SAAmBwE,EAAMpS,EAAQsG,GAC/B,GAAIA,GAAQA,EAAK+qB,KAAO,EAAG,OAoC7B,SAAwBjf,EAAMpS,EAAQsG,GACpC8L,EAAKrE,GAAK,EAEV,IAAI0yB,EAAKruB,EAAKG,WAAW,GACrBmuB,EAAKtuB,EAAKG,WAAW,GACrB4rD,EAAQ/rD,EAAKG,WAAW,GAC5BH,EAAKrE,GAAK,EAEVqE,EAAKrE,GAAK,EAEVqE,EAAKrE,GAAK,EAEVqE,EAAKrE,GAAK,EAEVqE,EAAKrE,GAAK,EAEVqE,EAAKrE,GAAK,EAEVqE,EAAKrE,GAAK,EAEVqE,EAAKrE,GAAK,EAEVqE,EAAKrE,GAAK,EAEVqE,EAAKrE,GAAK,EACV/N,GAAU,GACV,IAAI0hE,EAAM,GAEV,OADAA,EAAI7rD,MAAM2tB,GAAc/C,IAAOtQ,IAAW/d,EAAMpS,EAAQsG,IACjD,CACLi2D,IAAK,CAAC77B,EAAID,EAAI09B,GACd35B,GAAIk9B,EAER,CApEoCC,CAAevvD,EAAMpS,EAAQsG,GAC/D,IAAIi2D,EAAM/7B,GAAYpuB,GAElBsvD,EAz+BN,SAAuBtvD,EAAMpS,GAM3B,IAHA,IAAIyS,EAAML,EAAKrE,EAAI/N,EACf0hE,EAAM,GAEHtvD,EAAKrE,EAAI0E,GAAK,CACnB,IAAI+xB,EAAKpyB,EAAKG,WAAW,GACzBH,EAAKrE,GAAK,EAEV,IACE2zD,EAAI7rD,KAAK+qB,GAAM4D,GAAIpyB,EAAMK,EAAML,EAAKrE,GACtC,CAAE,MAAO3L,GAEP,OADAgQ,EAAKrE,EAAI0E,EACFivD,CACT,CACF,CAIA,OAFItvD,EAAKrE,GAAK0E,IAAKL,EAAKrE,EAAI0E,GAErBivD,CACT,CAo9BYE,CAAcxvD,EAAMpS,EAAS,GAAIu8D,EAAI,IAC/C,MAAO,CACLA,IAAKA,EACL/3B,GAAIk9B,EAER,GAo86BE,GAEE,CAEF,EAGA,GAEE,CAEA9zD,EAAG4vB,IAKL,GAEE,CAEF,EAGA,GAEE,CAEF,EAGA,GAEE,CAEA5vB,EAAG4vB,IAIL,IAEE,CAEA5vB,EAAG81B,IAIL,IAEE,CAEA91B,EA/x7BJ,SAAoBwE,GAClBA,EAAKrE,GAAK,EACV,IAAInH,EAAM,CAACwL,EAAKG,WAAW,GAAIH,EAAKG,WAAW,IAG/C,GAFe,IAAX3L,EAAI,IAAUA,EAAI,KACP,IAAXA,EAAI,IAAUA,EAAI,KAClBA,EAAI,GAAK,GAAKA,EAAI,GAAK,EAAG,MAAM,IAAIrD,MAAM,gBAAkBqD,EAAIvG,KAAK,MACzE,OAAOuG,CACT,GA4x7BE,IAEE,CAEAgH,EAl08BJ,SAAsBwE,EAAMpS,EAAQsG,GAClC,IAAIgM,EAAQhM,GAAqB,GAAbA,EAAK+qB,MAAuB,GAAVrxB,EAAcoS,EAAKG,WAAW,IAAMH,EAAKrE,GAAK/N,EAAQ,GAC5F,MAAO,CACLo7D,QAAiB,GAAR9oD,EACT+oD,OAAgB,GAAR/oD,EACRgpD,OAAgB,IAARhpD,EAEZ,GA+z8BE,IAEE,CAEA1E,EAAGywB,IAIL,IAEE,CAEAzwB,EAAG4vB,IAIL,IAEE,CAEA5vB,EAAG4vB,IAIL,IAEE,CAEA5vB,EAv18BJ,SAA2BwE,EAAMpS,EAAQsG,GACvC,IAAI4pB,EAAM9d,EAAKG,WAAW,GACtBo5B,EAA8B,EAArBv5B,EAAKG,WAAW,GACzBjE,EAAK8D,EAAKG,WAAW,GAEzB,OAAQjE,GACN,KAAK,EACHA,EAAK,YACL,MAEF,KAAK,EACHA,EAAK,aACL,MAEF,KAAK,EACHA,EAAK,aACL,MAEF,KAAK,EACHA,EAAK,YAIT,IAAI6H,EAAOqoB,GAA2BpsB,EAAM,EAAG9L,GAE/C,OADoB,IAAhB6P,EAAKnW,SAAcmW,EAAO,UACvB,CACL+Z,IAAKA,EACLyrC,GAAIhwB,EACJr9B,GAAIA,EACJ6H,KAAMA,EAEV,GA4z8BE,IAEE,CAEF,EAGA,IAEE,CAEAvI,EA736BJ,SAAuBwE,GAGrB,IACI/N,EADAxE,EAAI,CAAC,EAAG,GAMZ,OAJAwE,EAAI+N,EAAKG,WAAW,GACpB1S,EAAE,GAAKs2B,GAAY9xB,IAAMA,EACzBA,EAAI+N,EAAKG,WAAW,GACpB1S,EAAE,GAAKs2B,GAAY9xB,IAAMA,EAClBxE,CACT,GAu36BE,IAEE,CAEA+N,EAAGywB,IAIL,IAEE,CAEF,EAGA,IAEE,CAEAzwB,EAl36BJ,SAAuBwE,GAIrB,IAHA,IAAIyvD,EAAMzvD,EAAKG,WAAW,GACtB1S,EAAI,GAEDgiE,KAAQ,GACbhiE,EAAEgW,KAAKiqB,GAAc1tB,IAGvB,OAAOvS,CACT,GA626BE,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEA+N,EAAGywB,IAIL,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEAzwB,EAAGq2B,IAIL,IAEE,CAEAr2B,EAx36BJ,SAAqBwE,EAAMpS,GACzB,IAAIH,EAAI,CAAC,EACT,OAAIG,EAAS,KACboS,EAAKrE,GAAK,GACVlO,EAAEgV,OAAS4gB,GAAWrjB,GACtBvS,EAAEqoD,OAASzyB,GAAWrjB,GACtBA,EAAKrE,GAAK,GAJclO,CAM1B,GAo36BE,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEA+N,EAho8BJ,SAAqBwE,EAAMpS,GAMzB,IALA,IAAIqpB,EAASjX,EAAKrE,EAAI/N,EAAS,EAC3B8hE,EAAK1vD,EAAKG,WAAW,GACrB2f,EAAM9f,EAAKG,WAAW,GACtBwvD,EAAS,GAEN3vD,EAAKrE,EAAIsb,GACd04C,EAAOlsD,KAAKqqB,GAAY9tB,IAG1B,GAAIA,EAAKrE,IAAMsb,EAAQ,MAAM,IAAI9lB,MAAM,oBACvC,IAAIy+D,EAAU5vD,EAAKG,WAAW,GAC9B,GAAIwvD,EAAO/hE,QAAUgiE,EAAU9vC,EAAM,EAAG,MAAM,IAAI3uB,MAAM,yBACxD,MAAO,CACLqI,EAAGk2D,EACH1+D,EAAG8uB,EACH9gB,EAAG4wD,EACHnG,MAAOkG,EAEX,GAin8BE,IAEE,CAEAn0D,EAjn8BJ,SAAwBwE,EAAMpS,GAM5B,IALA,IAAIqpB,EAASjX,EAAKrE,EAAI/N,EAAS,EAC3B8hE,EAAK1vD,EAAKG,WAAW,GACrB2f,EAAM9f,EAAKG,WAAW,GACtB0vD,EAAQ,GAEL7vD,EAAKrE,EAAIsb,GACd44C,EAAMpsD,KAAKzD,EAAKG,WAAW,IAG7B,GAAIH,EAAKrE,IAAMsb,EAAQ,MAAM,IAAI9lB,MAAM,uBACvC,IAAIy+D,EAAU5vD,EAAKG,WAAW,GAC9B,GAAI0vD,EAAMjiE,QAAUgiE,EAAU9vC,EAAM,EAAG,MAAM,IAAI3uB,MAAM,4BACvD,MAAO,CACLqI,EAAGk2D,EACH1+D,EAAG8uB,EACH9gB,EAAG4wD,EACHhiC,KAAMiiC,EAEV,GAkm8BE,IAEE,CAEAr0D,EAAGwwB,IAIL,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEAxwB,EAAG4vB,IAIL,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEA5vB,EAAGywB,IAIL,IAEE,CAEF,EAGA,IAEE,CAEAzwB,EAAG4vB,IAIL,IAEE,CAEF,EAGA,IAEE,CAEA5vB,EAnu8BJ,SAAkBwE,EAAMpS,EAAQsG,GAC9B,IAAIzG,EAAI,CAAC,EAOT,OANAA,EAAE00B,KAAOniB,EAAKG,WAAW,GACzB1S,EAAE8yB,SAAWvgB,EAAKG,WAAW,GAC7B1S,EAAEyS,MAAQF,EAAKG,WAAW,GAC1B1S,EAAEqiE,OAASriE,EAAEyS,OAAS,EAAI,EAE1BzS,EAAED,KAlDJ,SAA2BwS,EAAMpS,EAAQg0C,EAAO1tC,GAC9C,IAAIzG,EAAI,CAAC,EACL8d,EAAIvL,EAAKG,WAAW,GACpBsK,EAAIzK,EAAKG,WAAW,GACpBnP,EAAIgP,EAAKG,WAAW,GACpBlO,EAAI+N,EAAKG,WAAW,GAExB,OADA1S,EAAE29C,YAAcpnB,GAAehzB,GAAK,IAC/BkD,EAAKq9B,YACV9jC,EAAEsiE,IAAU,EAAJxkD,EACR9d,EAAEuiE,MAAQzkD,GAAK,EAAI,EACnB9d,EAAEwiE,KAAO1kD,GAAK,EAAI,EAClB9d,EAAEyiE,UAAY3kD,GAAK,EAAI,EACvB9d,EAAE0iE,KAAO5kD,GAAK,EAAI,IAClB9d,EAAE2iE,QAAU7kD,GAAK,GAAK,GACtB9d,EAAE4iE,aAAe9kD,GAAK,GAAK,EAC3B9d,EAAE6iE,WAAa/kD,GAAK,GAAK,EACzB9d,EAAE8iE,QAAUhlD,GAAK,GAAK,EACtB9d,EAAE+iE,QAAUjlD,GAAK,GAAK,EACtB9d,EAAEgjE,QAAUllD,GAAK,GAAK,EACtB9d,EAAEijE,QAAUnlD,GAAK,GAAK,EACtB9d,EAAEkjE,QAAUplD,GAAK,GAAK,EACtB9d,EAAEmjE,SAAWrlD,GAAK,GAAK,EACvB9d,EAAEojE,OAAa,GAAJpmD,EACXhd,EAAEqjE,QAAUrmD,GAAK,EAAI,GACrBhd,EAAEsjE,MAAQtmD,GAAK,EAAI,GACnBhd,EAAEujE,SAAWvmD,GAAK,GAAK,GACvBhd,EAAEwjE,QAAUxmD,GAAK,GAAK,IACtBhd,EAAEyjE,SAAWzmD,GAAK,GAAK,IACvBhd,EAAE0jE,UAAY1mD,GAAK,GAAK,EACxBhd,EAAE2jE,OAAa,IAAJpgE,EACXvD,EAAE4jE,UAAYrgE,GAAK,EAAI,IACvBvD,EAAE6jE,QAAUtgE,GAAK,GAAK,IACtBvD,EAAE8jE,OAASvgE,GAAK,GAAK,GACrBvD,EAAEm6D,QAAc,IAAJ31D,EACZxE,EAAEo6D,QAAU51D,GAAK,EAAI,IACrBxE,EAAE+jE,UAAYv/D,GAAK,GAAK,EACjBxE,GA7BsBA,CA8B/B,CAaWgkE,CAAkBzxD,EAAMpS,EAAQH,EAAEqiE,OAAQ57D,GAC5CzG,CACT,GA8t8BE,IAEE,CAEA+N,EA/w9BJ,SAA4BwE,EAAMpS,GAChC,OAAe,IAAXA,GAEAoS,EAAKG,WAAW,GAFK,IAO3B,GA2w9BE,IAEE,CAEA3E,EAAGwwB,IAIL,IAEE,CAEF,EAGA,IAEE,CAEAxwB,EA797BJ,SAA0BwE,EAAMpS,GAQ9B,IALA,IAAI2qD,EAEF,GACEmZ,EAAO1xD,EAAKG,WAAW,GAEpBuxD,KACLnZ,EAAO90C,KAAKsqB,GAAY/tB,IAG1B,OAAOu4C,CACT,GAo97BE,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEA/8C,EA/y9BJ,SAAmBwE,EAAMpS,GAYvB,IATA,IAAIgjB,EAAM5Q,EAAKrE,EAAI/N,EACfmY,EAAM/F,EAAKG,WAAW,GACtBwxD,EAAO3xD,EAAKG,WAAW,GACvBi1C,EAEF,GAIO1nD,EAAI,EAAGA,GAAKikE,GAAQ3xD,EAAKrE,EAAIiV,IAAOljB,EAC3C0nD,EAAK3xC,KAAK8oB,GAAkCvsB,IAK9C,OAFAo1C,EAAK0J,MAAQ/4C,EACbqvC,EAAK2J,OAAS4S,EACPvc,CACT,GAgy9BE,IAEE,CAEA55C,EAnl9BJ,SAAwBwE,GACtB,IAAI8e,EAAO6O,GAAc3tB,GAEzB,OADA8e,EAAKgrC,KAAO9pD,EAAKG,WAAW,GACrB2e,CACT,GAml9BE,IAEE,CAEAtjB,EAnx9BJ,SAAsBwE,EAAMpS,GAC1B,IAAIgkE,EAAS,CAAC,EAGd,OAFAA,EAAOC,KAAO7xD,EAAKG,WAAW,GAC9BH,EAAKrE,GAAK/N,EAAS,EACZgkE,CACT,GAkx9BE,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEAp2D,EAAG0wB,IAIL,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEA1wB,EAAG4vB,IAIL,IAEE,CAEA5vB,EAAGwwB,IAIL,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEAxwB,EA/h9BJ,SAAuBwE,EAAMpS,EAAQsG,GACnC,IAAI0c,EAAM5Q,EAAKrE,EAAI/N,EACfkkE,EAAO9xD,EAAKG,WAAW,GACvBksB,EAAMrsB,EAAKG,WAAW,GAE1B,GADAjM,EAAK87B,MAAQ3D,EACF,MAAPA,GAAwB,OAAPA,EAAe,MAAO,CAACA,EAAKylC,GACjD,GAAIzlC,EAAM,GAAQA,EAAM,IAAM,MAAM,IAAIl7B,MAAM,4BAA8Bk7B,GAM5E,IALA,IAAI0lC,EAAWllC,GAA2B7sB,EAAMqsB,GAG5C2lC,EAAO,GAEJphD,EAAM5Q,EAAKrE,GAChBq2D,EAAKvuD,KAAKqpB,GAAsB9sB,IAGlC,MAAO,CAACqsB,EAAKylC,EAAMC,EAAUC,EAC/B,GAkh9BE,IAEE,CAEAx2D,EAAG4vB,IAIL,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEA5vB,EA1y8BJ,SAAmBwE,EAAMpS,EAAQsG,GAC/B,IAAIvD,EAAIqP,EAAKrE,EACTs2D,EAAQ,GAEZ,IACEjyD,EAAKrE,GAAK,EACV,IAAI0yB,GAAMn6B,EAAKk2D,SAAW,CACxBD,IAAK,CAAC,EAAG,KACRA,IAAI,IAGmC,GAAtC,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,IAAI/8D,QAAQihC,GAAWruB,EAAKrE,GAAK,EA9lD3D,SAA2BqE,GAGzB,IAAIE,EAAQF,EAAKG,WAAW,GAC5BH,EAAKrE,IACL,IAAIu2D,EAAQlyD,EAAKG,WAAW,GAE5B,OADAH,EAAKrE,GAAK,EACH,CAACuE,EAAOgyD,EACjB,CAslDgFC,CAAkBnyD,GAE9F,IAAIoyD,EAAUpyD,EAAKG,WAAW,GAG9BH,EAAKG,WAAW,GAGhB8rB,GAAYjsB,GACZ,IAAIrS,EAAMqS,EAAKG,WAAW,GAC1BH,EAAKrE,GAAKhO,EAEV,IAAK,IAAID,EAAI,EAAGA,EAAIsS,EAAKid,KAAKrvB,OAAS,IAAKF,EAAG,CAC7C,GAAIsS,EAAKrE,EAAIhL,GAAKqP,EAAKid,KAAKvvB,GAAI,MAAM,IAAIyD,MAAM,4BAChD,IAAI4xC,EAAM/iC,EAAKA,EAAKrE,GAGpB,IADAs2D,GADQplC,GAA2B7sB,EAAMA,EAAKid,KAAKvvB,EAAI,GAAKsS,EAAKid,KAAKvvB,GAAK,IAEjEE,SAAWm1C,EAAMqvB,EAAU,EAAIA,GAAU,KACrD,CAEA,GAAIH,EAAMrkE,SAAWwkE,GAAWH,EAAMrkE,SAAqB,EAAVwkE,EAC/C,MAAM,IAAIjhE,MAAM,YAAcihE,EAAU,OAASH,EAAMrkE,QAYzD,OATAoS,EAAKrE,EAAIhL,EAAI/C,EASN,CACLsE,EAAG+/D,EAEP,CAAE,MAAOjiE,GAEP,OADAgQ,EAAKrE,EAAIhL,EAAI/C,EACN,CACLsE,EAAG+/D,EAEP,CACF,GAyv8BE,IAEE,CAEAz2D,EAAG4vB,IAKL,IAEE,CAEA5vB,EAlw8BJ,SAAqBwE,EAAMpS,GACzB,IAAIsjC,EAAMnD,GAAY/tB,GACtBA,EAAKrE,GAAK,GAGV,IAAI88C,EA9iDN,SAAyBz4C,EAAMpS,GAG7B,IAAIgjB,EAAM5Q,EAAKrE,EAAI/N,EACfykE,EAAOryD,EAAKG,WAAW,GAC3B,GAAa,IAATkyD,EAAY,MAAM,IAAIlhE,MAAM,+BAAiCkhE,GACjE,IAAInyD,EAAQF,EAAKG,WAAW,GAC5BH,EAAKrE,GAAK,EACV,IAAI22D,EACAC,EACAC,EACAC,EAEA7S,EACA8S,EAFAC,EAAM,GAGE,GAARzyD,IAAgBoyD,EAAc9kC,GAAsBxtB,EAAYA,EAAKrE,IAC7D,IAARuE,IAAgBqyD,EAAkB/kC,GAAsBxtB,EAAYA,EAAKrE,IACpD,OAAZ,IAARuE,KAA4BsyD,EAAUhlC,GAAsBxtB,EAAYA,EAAKrE,IACzD,KAAZ,IAARuE,KAA4BuyD,EAAazlC,GAAuBhtB,EAAYA,EAAKrE,IAC1E,EAARuE,IAAgByyD,EAAMnlC,GAAsBxtB,EAAYA,EAAKrE,IACrD,GAARuE,IAAgB0/C,EAAO5/C,EAAKG,WAAW,KAC/B,GAARD,IAAgBwyD,EAAW7pC,GAAe7oB,IAG9CA,EAAKrE,EAAIiV,EACT,IAAIqG,EAASs7C,GAAmBC,GAAWC,GAAc,GACrDx7C,GAAU07C,IAAK17C,GAAU,IAAM07C,GAC9B17C,IAAQA,EAAS,IAAM07C,GAChB,EAARzyD,GAAsC,KAApB+W,EAAO5nB,OAAO,IAAiC,KAApB4nB,EAAO5nB,OAAO,KAAW4nB,EAAS,UAAYA,GAC/F,IAAIziB,EAAM,CACR2xB,OAAQlP,GAOV,OAHI2oC,IAAMprD,EAAIorD,KAAOA,GACjB8S,IAAUl+D,EAAIH,KAAOq+D,GACrBJ,IAAa99D,EAAIqkD,QAAUyZ,GACxB99D,CACT,CAwgDco+D,CAAgB5yD,EAAMpS,EAAS,IAC3C,MAAO,CAACsjC,EAAKunB,EACf,GA+v8BE,IAEE,CAEF,EAGA,IAEE,CAEAj9C,EAAGsxB,IAIL,IAEE,CAEF,EAGA,IAEE,CAEAtxB,EAAGywB,IAIL,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEAzwB,EAAGwwB,IAIL,IAEE,CAEAxwB,EA1m+BJ,SAAwBwE,GAEtB,OADAA,EAAKG,WAAW,GACTH,EAAKG,WAAW,EACzB,EAwm+BI3G,EAAG,GAIL,IAEE,CAEAgC,EAAGwwB,IAIL,IAEE,CAEAxwB,EAAG4zB,IAIL,IAEE,CAEA5zB,EAAGo2B,IAIL,IAEE,CAEAp2B,EAlt9BJ,SAAsBwE,EAAMpS,EAAQsG,GAC9BA,EAAKm1D,WAA0B,GAAbn1D,EAAK+qB,OAAW/qB,EAAK+qB,KAAO,GAClD,IAAIH,EAAO6O,GAAc3tB,GACrB6yD,EAAOxvC,GAAWrjB,GAEtB,OADA8e,EAAK1nB,IAAMy7D,EACJ/zC,CACT,GAgt9BE,IAEE,CAEAtjB,EA3+9BJ,SAAqBwE,EAAMpS,EAAQsG,GAC7BA,EAAKm1D,WAA0B,GAAbn1D,EAAK+qB,OAAW/qB,EAAK+qB,KAAO,GACrCjf,EAAKrE,EAAlB,IACImjB,EAAO6O,GAAc3tB,GACR,GAAb9L,EAAK+qB,MAAWjf,EAAKrE,IACzB,IAAIhD,EAAMm0B,GAAsB9sB,EAAeA,EAAKrE,EAAGzH,GAEvD,OADA4qB,EAAK1nB,IAAMuB,EACJmmB,CACT,GAu+9BE,IAEE,CAEAtjB,EAAG6zB,IAIL,IAEE,CAEA7zB,EAAGs2B,IAIL,IAEE,CAEAt2B,EA3s+BJ,SAAmBwE,GACjB,IAAI6X,EAAI,CAAC,EAGTA,EAAEre,EAAIwG,EAAKG,WAAW,GACtB0X,EAAE7mB,EAAIgP,EAAKG,WAAW,GACtB0X,EAAE9R,IAAM/F,EAAKG,WAAW,GAAK0X,EAAE7mB,EAC/B,IAAI89B,EAAQ9uB,EAAKG,WAAW,GAC5BH,EAAKrE,GAAK,EAEV,IAAIuE,EAAQF,EAAKG,WAAW,GAQ5B,OANAH,EAAKrE,GAAK,EAEE,EAARuE,IAAc2X,EAAE8Z,MAAgB,EAARzxB,GAEhB,GAARA,IAAc2X,EAAE0hB,QAAS,GACjB,GAARr5B,IAAc2X,EAAE4hB,IAAM3K,EAAQ,IAC3BjX,CACT,GA4r+BE,IAEE,CAEF,EAGA,IAEE,CAEArc,EAAGy1B,IAIL,IAEE,CAEAz1B,EAAGqzB,IAIL,IAEE,CAEF,EAGA,IAEE,CAEArzB,EA1o+BJ,SAAuBwE,EAAMpS,EAAQsG,GACnC,OAAIA,GAAQA,EAAK+qB,MAAQ,GAAK/qB,EAAK+qB,KAAO,EAAU,CAAC,EAE9C,CACL04B,IAAS,GAFH33C,EAAKG,WAAW,GAI1B,GAwo+BE,IAEE,CAEA3E,EAz99BJ,SAAkBwE,GAChB,IAAI0vD,EAAK1vD,EAAKG,WAAW,GACrB2f,EAAM9f,EAAKG,WAAW,GACtBspD,EAAQ37B,GAAY9tB,GACxB,MAAO,CACLxG,EAAGk2D,EACH1+D,EAAG8uB,EACH8N,KAAM67B,EAAM,GACZD,MAAOC,EAAM,GAEjB,GAm99BE,IAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEAjuD,EAzi+BJ,SAAsBwE,EAAMpS,EAAQsG,GAGlC,MAAO,CAFQ8L,EAAKG,WAAW,GAClB4sB,GAAuB/sB,EAAM,EAAG9L,GAE/C,GAyi+BE,KAEE,CAEF,EAGA,KAEE,CAEAsH,EAtr9BJ,SAAuBwE,EAAMpS,EAAQsG,GACnC,IAAIg9B,EAAMhD,GAAWluB,GACrBA,EAAKrE,IACL,IAAIm3D,EAAO9yD,EAAKG,WAAW,GAE3B,MAAO,CAACo0C,GAA0Bv0C,EADlCpS,GAAU,EACsCsG,GAAO4+D,EAAM5hC,EAC/D,GAor9BE,KAEE,CAEA11B,EA/78BJ,SAA4BwE,EAAMpS,GAChCoS,EAAKG,WAAW,GAChB,IAAI+wB,EAAMnD,GAAY/tB,GAClB+yD,EAAY/yD,EAAKG,YAAYvS,EAAS,IAAM,EAAG,aAEnD,MAAO,CAACsjC,EADR6hC,EAAYA,EAAUxjE,QAAQqC,EAAM,IAEtC,GA678BE,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEA4J,EAAGmzB,IAIL,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEAn1B,EAAG,IAIL,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEAgC,EAAGwwB,IAIL,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEAxwB,EAtt9BJ,SAAqBwE,GACnBA,EAAKrE,GAAK,EACV,IAAIlO,EAAI,CACNulE,KAAM,EACNC,IAAK,GAIP,OAFAxlE,EAAEulE,KAAOhzD,EAAKG,WAAW,GACzB1S,EAAEwlE,IAAMjzD,EAAKG,WAAW,GACjB1S,CACT,EA8s9BI+L,EAAG,IAIL,KAEE,CAEAgC,EAjrtBJ,SAAqBwE,EAAMpS,GACfoS,EAAKrE,EACfqE,EAAKrE,GAAK,EACV,IAAIiyB,EAAO5tB,EAAKG,WAAW,GAC3BH,EAAKrE,GAAK,EAMV,IALA,IAAIu3D,EAAQlzD,EAAKG,WAAW,GACxBqQ,EAEF,GAEK0iD,KAAU,GACf1iD,EAAI/M,KAAKmqC,GAAc5tC,EAAYA,EAAKrE,IAG1C,MAAO,CACLiyB,KAAMA,EACNpd,IAAKA,EAET,EAgqtBIhX,EAAG,IAIL,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEAgC,EAAG4vB,GACH5xB,EAAG,IAIL,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,IAIL,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEAgC,EA3r+BJ,SAAuBwE,EAAMpS,EAAQsG,GACnC,KAAIA,EAAK+qB,KAAO,GAAhB,CAKA,IAAIoS,EAAUrxB,EAAKG,WAAW,GAC1BgzD,EAAanzD,EAAKG,WAAW,GAGjC,MAAO,CAFI0sB,GAA2B7sB,EAAMqxB,EAASn9B,GACvC24B,GAA2B7sB,EAAMmzD,EAAYj/D,GAL3D,CAFE8L,EAAKrE,GAAK/N,CASd,EAir+BI4L,EAAG,IAIL,KAEE,CAEF,EAGA,KAEE,CAEAgC,EA/7tBJ,SAAqBwE,EAAMpS,EAAQsG,GACjC,IAAI0c,EAAM5Q,EAAKrE,EAAI/N,EAEnB,GAAuB,SADFoS,EAAKG,WAAW,GAGrC,GAAKjM,EAAKq9B,WAAV,CAKA,IAEItb,EAFAzoB,EAAOwS,EAAKzR,MAAMyR,EAAKrE,GAC3BqE,EAAKrE,EAAIiV,EAGT,IACEqF,EAAMa,GAAStpB,EAAM,CACnB0J,KAAM,SAEV,CAAE,MAAOlH,GACP,MACF,CAEA,IAAIojE,EAAW98C,GAAUL,EAAK,0BAA0B,GACxD,GAAKm9C,EACL,OAAOnmB,GAAgBmmB,EAAUl/D,EAhBjC,MAFE8L,EAAKrE,EAAIiV,CAmBb,EAu6tBIpX,EAAG,IAIL,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEAgC,EAtr+BJ,SAA2BwE,GAIzB,MAAO,CAHkC,IAAvBA,EAAKG,WAAW,GACe,IAAvBH,EAAKG,WAAW,GACnBH,EAAKG,WAAW,GAEzC,EAkr+BI3G,EAAG,IAIL,KAEE,CAEAgC,EAAGwwB,IAIL,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEAxwB,EAx1/BJ,SAAoCwE,GAClC,IAAIyC,EAxkBN,SAAyBzC,GACvB,IAAIwxC,EAAKxxC,EAAKG,WAAW,GACrBD,EAAQF,EAAKG,WAAW,GAG5B,OADAH,EAAKrE,GAAK,EACH,CACLzE,KAAMs6C,EACNtxC,MAAOA,EAEX,CA+jBemzD,CAAgBrzD,GAC7B,GAAmB,MAAfyC,EAAOvL,KAAgB,MAAM,IAAI/F,MAAM,yBAA2BsR,EAAOvL,MAE7E,OAAoB,IADL8I,EAAKG,WAAW,EAEjC,GAu1/BE,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEA3E,EAAGywB,IAIL,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEAzwB,EA/r+BJ,SAAwBwE,EAAMpS,EAAQsG,GACpC,IAAIuhB,EAAM,CACRw7B,MAAM,GAGR,GAAiB,GAAb/8C,EAAK+qB,KAEP,OADAjf,EAAKrE,GAAK/N,EACH6nB,EAGT,IAAIxjB,EAAI+N,EAAKG,WAAW,GAGxB,OAFAH,EAAKrE,GAAK,EACF,GAAJ1J,IAAUwjB,EAAIw7B,MAAO,GAClBx7B,CACT,GAqr+BE,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEAja,EAz2+BJ,SAA0BwE,GAIxB,IAHA,IAAIyvD,EAAMzvD,EAAKG,WAAW,GACtB1S,EAAI,GAEDgiE,KAAQ,GACbhiE,EAAEgW,KAAKiqB,GAAc1tB,IAGvB,OAAOvS,CACT,GAo2+BE,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,EAEE,CAEA+N,EAAG4zB,IAIL,EAEE,CAEF,EAGA,EAEE,CAEA5zB,EAtx+BJ,SAAwBwE,GACtB,IAAI8e,EAAO6O,GAAc3tB,KACvBA,EAAKrE,EACP,IAAIigD,EAAM57C,EAAKG,WAAW,GAG1B,OAFA2e,EAAK5sB,EAAI,IACT4sB,EAAK1nB,IAAMwkD,EACJ98B,CACT,GAmx+BE,EAEE,CAEAtjB,EAtz+BJ,SAAwBwE,GAGtB,IAAI8e,EAAO6O,GAAc3tB,KACvBA,EAAKrE,EACP,IAAIigD,EAAMv4B,GAAWrjB,GAGrB,OAFA8e,EAAK5sB,EAAI,IACT4sB,EAAK1nB,IAAMwkD,EACJ98B,CACT,GAiz+BE,EAEE,CAEAtjB,EAx0+BJ,SAAwBwE,EAAMpS,EAAQsG,GAChCA,EAAKm1D,WAA0B,GAAbn1D,EAAK+qB,OAAW/qB,EAAK+qB,KAAO,GAClD,IAAIH,EAAO6O,GAAc3tB,KACvBA,EAAKrE,EACP,IAAIhD,EAAMo0B,GAAuB/sB,EAAMpS,EAAYsG,GAGnD,OAFA4qB,EAAK5sB,EAAI,MACT4sB,EAAK1nB,IAAMuB,EACJmmB,CACT,GAo0+BE,EAEE,CAEAtjB,EAAG6zB,IAIL,EAEE,CAEA7zB,EAhy+BJ,SAA2BwE,GACzB,IAAIqsB,EAAMrsB,EAAKG,WAAW,GAE1B,OAAY,IAARksB,GACFrsB,EAAKrE,IACE,IAGFqE,EAAKG,WAAWksB,EAAK,YAC9B,GA2x+BE,EAEE,CAEF,EAGA,EAEE,CAEA7wB,EAAGmzB,IAIL,GAEE,CAEF,EAGA,GAEE,CAEAnzB,EAAGywB,IAIL,GAEE,CAEAzwB,EAAG2zB,IAIL,GAEE,CAEF,EAKA,GAEE,CAEF,EAGA,GAEE,CAEA3zB,EAAGy1B,IAIL,GAEE,CAEF,EAGA,GAEE,CAEAz1B,EAAGqzB,IAQL,GAEE,CAEArzB,EA52+BJ,SAA6BwE,EAAMpS,GACjCoS,EAAKrE,GAAK,EAEVqE,EAAKrE,GAAK,EAEVqE,EAAKrE,GAAK,EAEVqE,EAAKrE,GAAK,EAEVqE,EAAKrE,GAAK,EAEVqE,EAAKrE,GAAK/N,EAAS,EACrB,GA22+BE,GAEE,CAEF,EAgBA,GAEE,CAEF,EAGA,GAEE,CAEF,EAGA,GAEE,CAEA4N,EAAGywB,IAIL,GAEE,CAEF,EAGA,GAEE,CAEF,EAKA,IAEE,CAEF,EAKA,IAEE,CAEAzwB,EAnh/BJ,SAAsBwE,GACpB,IAAIyuB,EAAKzuB,EAAKG,WAAW,GACrBmzD,EAAMtzD,EAAKG,WAAW,GACtBozD,EAAMvzD,EAAKG,WAAW,GACtB1S,EAAI,CACN0J,IAAKs3B,EACL6kC,IAAKA,EACL3lE,IAAK4lE,EACL/lE,KAAMwS,EAAKzR,MAAMyR,EAAKrE,EAAGqE,EAAKrE,EAAI43D,IAGpC,OADAvzD,EAAKrE,GAAK43D,EACH9lE,CACT,GA2g/BE,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAOA,IAEE,CAEF,EAIA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAMA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAKA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEA+N,EAli/BJ,SAAuBwE,EAAMpS,EAAQsG,GACnC,IAAI0c,EAAM5Q,EAAKrE,EAAI/N,EACfkxB,EAAO6O,GAAc3tB,GACrBqsB,EAAMrsB,EAAKG,WAAW,GACtBxH,EAAMk0B,GAA2B7sB,EAAMqsB,EAAKn4B,GAIhD,OAHA8L,EAAKrE,EAAIiV,EACTkO,EAAK5sB,EAAI,MACT4sB,EAAK1nB,IAAMuB,EACJmmB,CACT,GA6h/BE,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,IAEE,CAEAtjB,EAAGg5C,IAIL,IAEE,CAEAh5C,EAAGmzB,IAIL,IAEE,CAEAnzB,EAAG60B,IAIL,IAEE,CAEA70B,EAAGg0B,IAIL,IAEE,CAEF,EAGA,IAEE,CAEF,EAGA,KAEE,CAEAh0B,EAAGg5C,IAIL,KAEE,CAEAh5C,EAAGmzB,IAIL,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEAn1B,EAAG,IAIL,MAEE,CAAC,GAGL,SAASmmC,GAAepM,EAEtBr8B,EAEA0O,EAAShY,GAKT,IAAIsE,EAEFgF,EACF,IAAI9H,MAAM8C,GAAV,CACA,IAAIvE,EAAMC,IAAWgY,GAAW,IAAIhY,QAAU,EAC1CH,EAAI8lC,EAAG5U,KAAK,GAChBlxB,EAAEoS,YAAY,EAAG3N,GACjBzE,EAAEoS,YAAY,EAAGlS,GAGjBA,EAAM,GAAK2uB,GAAO1W,IAAU2tB,EAAG9vB,KAAKmC,EAPhB,CAQtB,CAswBA,SAASi9C,GAAclqD,EAErB0O,GAGA,IAAInT,EAAOmT,GAAS,CAAC,EACR,MAAT1Y,GAA+B,MAAduF,EAAK+sB,QAAe/sB,EAAK+sB,MAAQtyB,GACtD,IAAIuyB,EAEFhtB,EAAK+sB,MAAQ,GAEb,CAAC,EAIC+1B,GADJr+C,EAAMA,EAAIpJ,QAAQ,cAAe,KAG3BuI,MAAM,WACZ,IAAKk/C,EAAM,MAAM,IAAI7lD,MAAM,wCAC3B,IAAIqiE,EAEF76D,EAAIb,MAAM,aACRpK,EAEFspD,EAAKnM,MACHnzC,EAEF87D,GAASA,EAAM3oB,OAASlyC,EAAI/K,OAC1B2sC,EAAOjlB,GAAY3c,EAAIpK,MAAMb,EAAGgK,GAAI,iBAAkB,QACtDgN,GAAK,EACL1F,EAAI,EACJk7B,EAAK,EACL9U,EAAK,EACLjG,EAEF,CACAxuB,EAAG,CACD6I,EAAG,IACHxI,EAAG,KAELhB,EAAG,CACDwJ,EAAG,EACHxI,EAAG,IAGHunD,EAEF,GAEF,IAAK7qD,EAAI,EAAGA,EAAI6sC,EAAK3sC,SAAUF,EAAG,CAChC,IAAIuT,EAAMs5B,EAAK7sC,GAAGujB,OACdwiD,EAAKxyD,EAAI1S,MAAM,EAAG,GAAG8N,cAEzB,GAAU,OAANo3D,GAYJ,GAAU,OAANA,GAAqB,OAANA,EAAnB,CACA,IAAI3Z,EAAQ74C,EAAIrQ,MAAM,cAEtB,IAAK8G,EAAI,EAAGA,EAAIoiD,EAAMlsD,SAAU8J,EAAG,CACjC,IAAIonB,EAAOg7B,EAAMpiD,GAAGuZ,OACpB,GAAK6N,EAAKhnB,MAAM,WAAhB,CAKA,IAJA,IAAIlD,EAAIkqB,EACJlmB,EAAK,EAGa,KAAfhE,EAAEvF,OAAO,KAAcuJ,EAAKhE,EAAExH,QAAQ,OAAS,GACpDwH,EAAIA,EAAErG,MAAMqK,EAAK,GAGnB,IAAK,IAAI86D,EAAO,EAAGA,EAAOnb,EAAO3qD,SAAU8lE,EAAM,CAC/C,IAAIlb,EAEFD,EAAOmb,GAELlb,EAAO7nD,EAAEK,GAAKgO,GAAKw5C,EAAO7nD,EAAE6I,EAAIkL,GAAKA,GAAK8zC,EAAOxoD,EAAEwJ,IACrDwF,EAAIw5C,EAAOxoD,EAAEgB,EAAI,EACjB0iE,GAAQ,EAEZ,CAEA,IAAIh8C,EAAMD,GAAYqH,EAAKvwB,MAAM,EAAGuwB,EAAK1xB,QAAQ,OACjDg4B,EAAK1N,EAAIi8C,SAAWj8C,EAAIi8C,QAAU,IAC7Bz5B,GAAMxiB,EAAIk8C,SAAW,GAAKxuC,EAAK,IAAGmzB,EAAO90C,KAAK,CACjD9S,EAAG,CACD6I,EAAGkL,EACH1T,EAAGgO,GAELhP,EAAG,CACDwJ,EAAGkL,GAAKw1B,GAAM,GAAK,EACnBlpC,EAAGgO,EAAIomB,EAAK,KAIhB,IAAIyuC,EAEFn8C,EAAIxlB,GAAKwlB,EAAI,WAAa,GAI5B,GAAK9iB,EAAEhH,OAWP,GANAgH,EAAI4kB,GAAW5kB,GACXuqB,EAAMxuB,EAAE6I,EAAIkL,IAAGya,EAAMxuB,EAAE6I,EAAIkL,GAC3Bya,EAAMnvB,EAAEwJ,EAAIkL,IAAGya,EAAMnvB,EAAEwJ,EAAIkL,GAC3Bya,EAAMxuB,EAAEK,EAAIgO,IAAGmgB,EAAMxuB,EAAEK,EAAIgO,GAC3BmgB,EAAMnvB,EAAEgB,EAAIgO,IAAGmgB,EAAMnvB,EAAEgB,EAAIgO,GAE1BpK,EAAEhH,OAAP,CAKA,IAAIH,EAEF,CACAyE,EAAG,IACHF,EAAG4C,GAGDV,EAAKwR,MAAQ9Q,EAAEqc,OAAOrjB,QAAgB,KAANimE,IAA6B,SAANj/D,EAAcnH,EAAI,CAC3EyE,EAAG,IACHF,GAAG,GACY,UAAN4C,EAAenH,EAAI,CAC5ByE,EAAG,IACHF,GAAG,GACO5C,MAAMylB,GAASjgB,IAGfxF,MAAM+lB,GAAUvgB,GAAGQ,aAC7B3H,EAAI,CACFyE,EAAG,IACHF,EAAGkiB,GAAUtf,IAIVV,EAAK0tB,YAAWn0B,EAAI,CACvByE,EAAG,IACHF,EAAGuhB,GAAQ9lB,EAAEuE,KAIfvE,EAAEoqB,EAAI3jB,EAAK6H,QAAU/I,EAAU,KAhBDvF,EAAI,CAClCyE,EAAG,IACHF,EAAG6iB,GAASjgB,KAiBVV,EAAK+sB,OACFC,EAAGxc,KAAIwc,EAAGxc,GAAK,IACpBwc,EAAGxc,GAAG1F,GAAKvR,GACNyzB,EAAG7B,GAAY,CACpB7lB,EAAGkL,EACH1T,EAAGgO,KACCvR,EAENuR,GAAKomB,CA1CL,MAFEpmB,GAAKomB,OAXLpmB,GAAKomB,CAxC6B,CAgGtC,CArGwC,MAZxC,CAGE,KAFE1gB,EAEExQ,EAAK8+B,WAAa9+B,EAAK8+B,WAAatuB,EAAG,GACvCA,EACF,KACF,CAEA1F,EAAI,CAEN,CAwGF,CAIA,OAFAkiB,EAAG,QAAUjB,GAAad,GACtBo5B,EAAO3qD,SAAQszB,EAAG,WAAaq3B,GAC5Br3B,CACT,CAEA,SAAS4yC,GAAc5yC,EAErB1nB,EAEAkL,EAEAjX,GAYA,IAPA,IAAIqH,EAEFosB,EAAG,YAAc,GACfnE,EAEF,GAEO/d,EAAIxF,EAAE7I,EAAEK,EAAGgO,GAAKxF,EAAExJ,EAAEgB,IAAKgO,EAAG,CAInC,IAHA,IAAIk7B,EAAK,EACL9U,EAAK,EAEA1tB,EAAI,EAAGA,EAAI5C,EAAElH,SAAU8J,EAC9B,KAAI5C,EAAE4C,GAAG/G,EAAE6I,EAAIkL,GAAK5P,EAAE4C,GAAG/G,EAAEK,EAAIgO,MAC3BlK,EAAE4C,GAAG1H,EAAEwJ,EAAIkL,GAAK5P,EAAE4C,GAAG1H,EAAEgB,EAAIgO,GAA/B,CAEA,GAAIlK,EAAE4C,GAAG/G,EAAE6I,EAAIkL,GAAK5P,EAAE4C,GAAG/G,EAAEK,EAAIgO,EAAG,CAChCk7B,GAAM,EACN,KACF,CAEAA,EAAKplC,EAAE4C,GAAG1H,EAAEwJ,EAAI1E,EAAE4C,GAAG/G,EAAE6I,EAAI,EAC3B4rB,EAAKtwB,EAAE4C,GAAG1H,EAAEgB,EAAI8D,EAAE4C,GAAG/G,EAAEK,EAAI,EAC3B,KAT0C,CAY5C,KAAIkpC,EAAK,GAAT,CACA,IAAIQ,EAAQrb,GAAY,CACtB7lB,EAAGkL,EACH1T,EAAGgO,IAED8f,EAAOrxB,EAAEwzB,OAASC,EAAGxc,IAAM,IAAI1F,GAAKkiB,EAAGwZ,GAGvCpkC,EAAIwoB,GAAkB,MAAVA,EAAK9sB,IAAc8sB,EAAKjU,GAAK2N,GAAWsG,EAAKxoB,IAAMkqB,GAAY1B,GAAOA,EAAKxoB,IAAM,MAAQ,GACrGi9C,EAAK,CAAC,EAGNrZ,EAAK,IAAGqZ,EAAGqgB,QAAU15B,GACrB9U,EAAK,IAAGmuB,EAAGogB,QAAUvuC,GACrB33B,EAAEsmE,SAAUz9D,EAAI,gCAAkCA,EAAI,UAAmBwoB,IAC3Ey0B,EAAG,UAAYz0B,GAAQA,EAAK5sB,GAAK,IACnB,MAAV4sB,EAAK9sB,IAAWuhD,EAAG,UAAYz0B,EAAK9sB,GAC1B,MAAV8sB,EAAKjH,IAAW07B,EAAG,UAAYz0B,EAAKjH,GACpCiH,EAAKnjB,GAAyC,MAAnCmjB,EAAKnjB,EAAEwqB,QAAU,KAAK92B,OAAO,KAAWiH,EAAI,YAAcwoB,EAAKnjB,EAAEwqB,OAAS,KAAO7vB,EAAI,SAEtGi9C,EAAGjlB,IAAM7gC,EAAE6gC,IAAM,OAAS,IAAMoM,EAChC3d,EAAGtZ,KAAK4W,GAAU,KAAM/jB,EAAGi9C,GArBP,CAsBtB,CAGA,MADe,OACGx2B,EAAG9uB,KAAK,IAAM,OAClC,CAEA,IAAI+lE,GAAa,sFACbC,GAAW,iBAiBf,SAASC,GAAmBhzC,EAE1Bxc,EAEAjX,GAQA,MADE,GACSQ,KAAK,IAAM,UAAYR,GAAKA,EAAE6gC,GAAK,QAAU7gC,EAAE6gC,GAAK,IAAM,IAAM,GAC7E,CAEA,SAAS6lC,GAAcjzC,EAErBhtB,GAOA,IAAIzG,EAAIyG,GAAQ,CAAC,EACbuO,EAAqB,MAAZhV,EAAEgV,OAAiBhV,EAAEgV,OAASuxD,GACvCle,EAAqB,MAAZroD,EAAEqoD,OAAiBroD,EAAEqoD,OAASme,GACvCz/D,EAEF,CAACiO,GACCjJ,EAAIwmB,GAAakB,EAAG,SACxBzzB,EAAEwzB,MAAQ1wB,MAAMQ,QAAQmwB,GACxB1sB,EAAIiP,KAAKywD,GAAmBhzC,EAAI1nB,EAAG/L,IAEnC,IAAK,IAAIiX,EAAIlL,EAAE7I,EAAE6I,EAAGkL,GAAKlL,EAAExJ,EAAEwJ,IAAKkL,EAChClQ,EAAIiP,KAAKqwD,GAAc5yC,EAAI1nB,EAAGkL,EAAGjX,IAInC,OADA+G,EAAIiP,KAAK,WAAaqyC,GACfthD,EAAIvG,KAAK,GAClB,CAEA,SAASmmE,GAAclzC,EAErBllB,EAEAqL,GAKA,IAAInT,EAAOmT,GAAS,CAAC,EACR,MAAT1Y,IAAeuF,EAAK+sB,MAAQtyB,GAChC,IAAI0lE,EAAO,EACPC,EAAO,EAEX,GAAmB,MAAfpgE,EAAKmtB,OACP,GAA0B,iBAAfntB,EAAKmtB,OAAoBgzC,EAAOngE,EAAKmtB,WAAY,CAC1D,IAAIC,EAEoB,iBAAfptB,EAAKmtB,OAAqBtB,GAAY7rB,EAAKmtB,QAAUntB,EAAKmtB,OAEnEgzC,EAAO/yC,EAAQ9nB,EACf86D,EAAOhzC,EAAQtwB,CACjB,CAGF,IAAIupC,EAEFv+B,EAAMu4D,qBAAqB,MACzBvhC,EAAYzgC,KAAK+H,IAAIpG,EAAK8+B,WAAa,IAAUuH,EAAK3sC,QACtDuxB,EAEF,CACAxuB,EAAG,CACD6I,EAAG,EACHxI,EAAG,GAELhB,EAAG,CACDwJ,EAAG66D,EACHrjE,EAAGsjE,IAIP,GAAIpzC,EAAG,QAAS,CACd,IAAIK,EAEFvB,GAAakB,EAAG,SAElB/B,EAAMxuB,EAAE6I,EAAIjH,KAAK+H,IAAI6kB,EAAMxuB,EAAE6I,EAAG+nB,EAAO5wB,EAAE6I,GACzC2lB,EAAMxuB,EAAEK,EAAIuB,KAAK+H,IAAI6kB,EAAMxuB,EAAEK,EAAGuwB,EAAO5wB,EAAEK,GACzCmuB,EAAMnvB,EAAEwJ,EAAIjH,KAAKgI,IAAI4kB,EAAMnvB,EAAEwJ,EAAG+nB,EAAOvxB,EAAEwJ,GACzC2lB,EAAMnvB,EAAEgB,EAAIuB,KAAKgI,IAAI4kB,EAAMnvB,EAAEgB,EAAGuwB,EAAOvxB,EAAEgB,IAC5B,GAATqjE,IAAYl1C,EAAMnvB,EAAEwJ,EAAI66D,EAAO9yC,EAAOvxB,EAAEwJ,EAAI,EAClD,CAEA,IAAI++C,EAEF,GACEmb,EAAO,EACPl7B,EAEFtX,EAAG,WAAaA,EAAG,SAAW,IAC5BC,EAAK,EACLzc,EAAI,EACJ0c,EAAK,EACLpiB,EAAI,EACJk7B,EAAK,EACL9U,EAAK,EAGT,IAFKlE,EAAG,WAAUA,EAAG,SAAW,IAEzBC,EAAKoZ,EAAK3sC,QAAU8W,EAAIsuB,IAAa7R,EAAI,CAC9C,IAAIlgB,EAEFs5B,EAAKpZ,GAEP,GAAIqzC,GAAsBvzD,GAAM,CAC9B,GAAI/M,EAAKo6D,QAAS,SAClB91B,EAAQ9zB,GAAK,CACX60B,QAAQ,EAEZ,CAEA,IAAIk7B,EAEFxzD,EAAIyzD,SAIN,IAAKtzC,EAAKpiB,EAAI,EAAGoiB,EAAKqzC,EAAK7mE,SAAUwzB,EAAI,CACvC,IAAIja,EAEFstD,EAAKrzC,GACP,IAAIltB,EAAKo6D,UAAWkG,GAAsBrtD,GAA1C,CACA,IAAInV,EAEFmV,EAAIwtD,aAAa,UAAYxtD,EAAIytD,aAAa,UAAYztD,EAAIwtD,aAAa,KAAOxtD,EAAIytD,aAAa,KAAOp7C,GAAWrS,EAAI0tD,WACvHh9C,EAEF1Q,EAAIytD,aAAa,WAAaztD,EAAIytD,aAAa,KAEjD,IAAKlB,EAAO,EAAGA,EAAOnb,EAAO3qD,SAAU8lE,EAAM,CAC3C,IAAI9+D,EAEF2jD,EAAOmb,GAEL9+D,EAAEjE,EAAEK,GAAKgO,EAAIs1D,GAAQ1/D,EAAEjE,EAAE6I,EAAIkL,EAAI2vD,GAAQ3vD,EAAI2vD,GAAQz/D,EAAE5E,EAAEwJ,IAC3DwF,EAAIpK,EAAE5E,EAAEgB,EAAI,EAAIsjE,EAChBZ,GAAQ,EAEZ,CAIAtuC,GAAMje,EAAIytD,aAAa,YAAc,IAChC16B,GAAM/yB,EAAIytD,aAAa,YAAc,GAAK,GAAKxvC,EAAK,IAAGmzB,EAAO90C,KAAK,CACtE9S,EAAG,CACD6I,EAAGkL,EAAI2vD,EACPrjE,EAAGgO,EAAIs1D,GAETtkE,EAAG,CACDwJ,EAAGkL,EAAI2vD,GAAQn6B,GAAM,GAAK,EAC1BlpC,EAAGgO,EAAIs1D,GAAQlvC,GAAM,GAAK,KAG9B,IAAI33B,EAEF,CACAyE,EAAG,IACHF,EAAGA,GAGD6hE,EAEF1sD,EAAIytD,aAAa,WAAaztD,EAAIytD,aAAa,MAAQ,GAEhD,MAAL5iE,IACc,GAAZA,EAAEpE,OAAaH,EAAEyE,EAAI2hE,GAAM,IAAa3/D,EAAKwR,KAA0B,GAAnB1T,EAAEif,OAAOrjB,QAAqB,KAANimE,IAA6B,SAAN7hE,EAAcvE,EAAI,CACvHyE,EAAG,IACHF,GAAG,GACY,UAANA,EAAevE,EAAI,CAC5ByE,EAAG,IACHF,GAAG,GACO5C,MAAMylB,GAAS7iB,IAGf5C,MAAM+lB,GAAUnjB,GAAGoD,aAC7B3H,EAAI,CACFyE,EAAG,IACHF,EAAGkiB,GAAUliB,IAIVkC,EAAK0tB,YAAWn0B,EAAI,CACvByE,EAAG,IACHF,EAAGuhB,GAAQ9lB,EAAEuE,KAIfvE,EAAEoqB,EAAI3jB,EAAK6H,QAAU/I,EAAU,KAhBDvF,EAAI,CAClCyE,EAAG,IACHF,EAAG6iB,GAAS7iB,WAkBJkL,IAARzP,EAAEoqB,GAAwB,MAALA,IAAWpqB,EAAEoqB,EAAIA,GAI1C,IAAIlc,EAAI,GACJm5D,EAAQ3tD,EAAIotD,qBAAqB,KACrC,GAAIO,GAASA,EAAMlnE,OAAQ,IAAK,IAAImnE,EAAQ,EAAGA,EAAQD,EAAMlnE,UACvDknE,EAAMC,GAAOJ,aAAa,SAET,MADnBh5D,EAAIm5D,EAAMC,GAAOH,aAAa,SACxBvlE,OAAO,MAHsD0lE,GAMnEp5D,GAAoB,KAAfA,EAAEtM,OAAO,KAAW5B,EAAEkO,EAAI,CACjCwqB,OAAQxqB,IAGNzH,EAAK+sB,OACFC,EAAGxc,EAAI2vD,KAAOnzC,EAAGxc,EAAI2vD,GAAQ,IAClCnzC,EAAGxc,EAAI2vD,GAAMr1D,EAAIs1D,GAAQ7mE,GACpByzB,EAAG7B,GAAY,CACpBruB,EAAGgO,EAAIs1D,EACP96D,EAAGkL,EAAI2vD,KACH5mE,EAEF0xB,EAAMnvB,EAAEgB,EAAIgO,EAAIs1D,IAAMn1C,EAAMnvB,EAAEgB,EAAIgO,EAAIs1D,GAC1Ct1D,GAAKomB,CA/FmD,CAgG1D,GAEE1gB,CACJ,CAOA,OALI6zC,EAAO3qD,SAAQszB,EAAG,YAAcA,EAAG,YAAc,IAAI5vB,OAAOinD,IAChEp5B,EAAMnvB,EAAEwJ,EAAIjH,KAAKgI,IAAI4kB,EAAMnvB,EAAEwJ,EAAGkL,EAAI,EAAI2vD,GACxCnzC,EAAG,QAAUjB,GAAad,GACtBza,GAAKsuB,IAAW9R,EAAG,YAAcjB,IAAcd,EAAMnvB,EAAEwJ,EAAI+gC,EAAK3sC,OAASuzB,EAAKzc,EAAI,EAAI2vD,EAAMl1C,KAEzF+B,CACT,CAEA,SAAS8zC,GAAgBh5D,EAEvBqL,GAaA,OAAO+sD,IARI/sD,GAAS,CAAC,GAGd4Z,MAAQ,GAEb,CAAC,EAGsBjlB,EAAOqL,EAClC,CAYA,SAASmtD,GAAsBS,GAK7B,IAAI3G,EAEF,GACE4G,EAUN,SAAyCD,GAMvC,OAAIA,EAAQE,cAAcC,aAA6E,oBAAvDH,EAAQE,cAAcC,YAAYC,iBAAwCJ,EAAQE,cAAcC,YAAYC,iBAE5H,oBAArBA,iBAAwCA,iBAC5C,IACT,CAlBIC,CAAgCL,GAGlC,OAFIC,IAAoB5G,EAAU4G,EAAmBD,GAASM,iBAAiB,YAC1EjH,IAASA,EAAU2G,EAAQrzB,OAASqzB,EAAQrzB,MAAM0sB,SACpC,SAAZA,CACT,CAkBA,SAASkH,GAAa/kD,GAQpB,IAAIglD,EAAQhlD,EAAKlhB,QAAQ,YAAa,KAAK0hB,OAAO1hB,QAAQ,MAAO,KAAKA,QAAQ,cAAe,KAAKA,QAAQ,8BAA8B,SAAU2I,EAAIC,GACpJ,OAAO5H,MAAMuJ,SAAS3B,EAAI,IAAM,GAAGlK,KAAK,IAC1C,IAAGsB,QAAQ,qBAAsB,MAAMA,QAAQ,uBAAwB,MAEvE,MAAO,CADC4oB,GAAYs9C,EAAMlmE,QAAQ,WAAY,KAEhD,CAEA,IAAImmE,GAAqB,CAEvBC,IAAK,CAAC,IAAK,MACXC,MAAO,CAAC,IAAK,MACbC,KAAM,CAAC,IAAK,MACZC,MAAO,CAAC,IAAK,MACbC,QAAS,CAAC,IAAK,MACfC,QAAS,CAAC,IAAK,MACf,QAAS,CAAC,MAAO,SACjB,cAAe,CAAC,MAAO,QACvBC,IAAK,CAAC,IAAK,MAGXC,QAAS,CAAC,OAAQ,oBAGpB,SAASC,GAAkBlkE,EAEzBoV,GAGA,IAAInT,EAAOmT,GAAS,CAAC,EACR,MAAT1Y,GAA+B,MAAduF,EAAK+sB,QAAe/sB,EAAK+sB,MAAQtyB,GACtD,IAIIkiB,EACA6G,EAQA0+C,EAGAC,EAYA5T,EAAIzuD,EA5BJ2E,EAAM2hB,GAAeroB,GACrB2S,EAEF,GAKE0xD,EAAQ,CACVvyD,KAAM,IAEJwyD,EAAK,GACLjT,EAAO,EAOPxiC,EAAS,CAAC,EACVD,EAEF,GACEK,EAAKhtB,EAAK+sB,MAAQ,GAEpB,CAAC,EAMCu1C,EAAO,CACT39C,MAAO,IAIL49C,EAAQ,GACRC,EAAW,EAIXC,EAAQ,GACRjyD,GAAK,EACL1F,GAAK,EACLmgB,EAAQ,CACVxuB,EAAG,CACD6I,EAAG,IACHxI,EAAG,KAELhB,EAAG,CACDwJ,EAAG,EACHxI,EAAG,IAGH4lE,EAAS,EACTC,EAAoB,CAAC,EACrBte,EAEF,GACEue,EAAS,CAAC,EAGVt+B,EAEF,GACEu+B,EAAU,EACVC,EAAU,EACV3iB,EAEF,GACEhwB,EAAK,CACP64B,MAAO,IAEL+Z,EAAO,CAAC,EAGRC,EAEF,CAAC,GAAI,IACHlpB,EAEF,GACEG,EAEF,CAAC,EAGCgpB,EAAU,GACVC,EAAa,EACbC,GAAS,EACTC,GAAU,EACV5pE,EAAI,EAIR,IAHA6sB,GAAUgtB,UAAY,EACtB5uC,EAAMA,EAAIpJ,QAAQ,sBAAuB,IAAIA,QAAQ,+BAAgC,IAE9EkzD,EAAKloC,GAAU+sB,KAAK3uC,IACzB,OAAQ8pD,EAAG,GAAKA,EAAG,GAAGlzD,QAAQ,OAAQ,KACpC,IAAK,QACL,IAAK,qBAEW,MAAVkzD,EAAG,IACDtjC,EAAMnvB,EAAEgB,GAAKmuB,EAAMxuB,EAAEK,GAAKmuB,EAAMnvB,EAAEwJ,GAAK2lB,EAAMxuB,EAAE6I,EAAG0nB,EAAG,QAAUjB,GAAad,GAAY+B,EAAG,QAAU,QAErGhtB,EAAK8+B,UAAY,GAAK9+B,EAAK8+B,WAAa7T,EAAMnvB,EAAEwJ,IAClD0nB,EAAG,YAAcA,EAAG,QACpB/B,EAAMnvB,EAAEwJ,EAAItF,EAAK8+B,UAAY,EAC7B9R,EAAG,QAAUjB,GAAad,IAGxBo5B,EAAO3qD,SAAQszB,EAAG,WAAaq3B,GAC/B/f,EAAQ5qC,SAAQszB,EAAG,SAAWsX,GAClC49B,EAAQryD,KAAOqyD,EAAQ,iBAASA,EAAQryD,KACpB,qBAAT4Q,MAAsBA,KAAKC,UAAUwhD,GAChDv1C,EAAWpd,KAAK2yD,EAAQryD,MACxB+c,EAAOs1C,EAAQryD,MAAQmd,EACvBo2C,GAAU,GACkC,MAAnC7U,EAAG,GAAGpzD,OAAOozD,EAAG,GAAG70D,OAAS,KACrCwoE,EAAU3+C,GAAYgrC,EAAG,IAAI,GAC7B/9C,EAAI1F,GAAK,EACTmgB,EAAMxuB,EAAE6I,EAAI2lB,EAAMxuB,EAAEK,EAAI,IACxBmuB,EAAMnvB,EAAEwJ,EAAI2lB,EAAMnvB,EAAEgB,EAAI,EACxBkwB,EAAKhtB,EAAK+sB,MAAQ,GAEhB,CAAC,EAGHs3B,EAAS,GACT/f,EAAU,GACV8+B,GAAU,GAGZ,MAEF,IAAK,kBAEW,MAAV7U,EAAG,KAAcmU,IAAcA,EACnC,MAEF,IAAK,YACL,IAAK,SAEH,GAAc,MAAVnU,EAAG,GAAY,CACjB/9C,GAAKqyD,EACLA,EAAU,EACV,KACF,CAOA,IALAV,EAAS5+C,GAAYgrC,EAAG,IAAI,IACjB,gBAAO/9C,EAAI2xD,EAAO,gBAAQ,GAAiB,GAAN3xD,IAASA,EAAI,IAC7DqyD,GAAWV,EAAO,yBAA2B,GAG/B,GAAI,IAAK3oE,EAAI,EAAGA,EAAIqpE,IAAWrpE,EACvCkpE,EAAS,IAAGp+B,EAAQ9zB,EAAIhX,GAAK,CAC/BikC,MAAOilC,IAGX53D,GAAK,EACL,MAEF,IAAK,qBAEW,MAAVyjD,EAAG,MAAczjD,EAEjB9K,EAAKytB,aACHztB,EAAK+sB,OACFC,EAAGxc,KAAIwc,EAAGxc,GAAK,IACpBwc,EAAGxc,GAAG1F,GAAK,CACT9M,EAAG,MAEAgvB,EAAG7B,GAAY,CACpB7lB,EAAGkL,EACH1T,EAAGgO,KACC,CACJ9M,EAAG,MAIPukE,EAAQ,GACRE,EAAQ,GACR,MAIF,IAAK,aACL,IAAK,eACH,GAAuC,MAAnClU,EAAG,GAAGpzD,OAAOozD,EAAG,GAAG70D,OAAS,KAC5BoR,EACFw3D,EAAO/+C,GAAYgrC,EAAG,IAAI,GAC1BuU,EAAUl9D,SAAS08D,EAAK,4BAA8B,IAAK,IAC3DxiE,EAAI,CACF9B,EAAG,IACHF,EAAG,MAMDwkE,EAAKt9B,SAA+B,GAApBhlC,EAAK0mD,cAAsB5mD,EAAEwH,EAAI05C,GAAmB/8B,GAAYq+C,EAAKt9B,WAE7C,WAAvCs9B,EAAK,6BAAWA,EAAK,iBACxBxiE,EAAE9B,EAAI,IACN8B,EAAEhC,EAAImmB,GAAYq+C,EAAK,iBAAmB,IAEtCtiE,EAAK+sB,OACFC,EAAGxc,KAAIwc,EAAGxc,GAAK,IACpBwc,EAAGxc,GAAG1F,GAAKhL,GAEXktB,EAAG7B,GAAY,CACb7lB,EAAGkL,EACH1T,EAAGgO,KACChL,GAIVgL,GAAKg4D,EAAU,OACV,GAAc,MAAVvU,EAAG,GAAY,CAExBgU,EAAQ,GACRC,EAAW,EACXC,EAAQ,GACRK,EAAU,EACV,IAAIO,EAAOR,EAAUryD,EAAIqyD,EAAU,EAAIryD,EAmBvC,KAxBE1F,EAMMmgB,EAAMnvB,EAAEgB,IAAGmuB,EAAMnvB,EAAEgB,EAAIgO,GAC3BA,EAAImgB,EAAMxuB,EAAEK,IAAGmuB,EAAMxuB,EAAEK,EAAIgO,GAC3B0F,EAAIya,EAAMxuB,EAAE6I,IAAG2lB,EAAMxuB,EAAE6I,EAAIkL,GAC3B6yD,EAAOp4C,EAAMnvB,EAAEwJ,IAAG2lB,EAAMnvB,EAAEwJ,EAAI+9D,GAElCvpB,EAAW,GACXG,EAAU,CAAC,EAGXn6C,EAAI,CACF9B,GANFskE,EAAO/+C,GAAYgrC,EAAG,IAAI,IAMhB,6BAAW+T,EAAK,cACxBxkE,EAAG,MAODkC,EAAK0mD,YAoBP,GAnBI4b,EAAKt9B,UAASs9B,EAAKt9B,QAAU/gB,GAAYq+C,EAAKt9B,UAE9Cs9B,EAAK,kCAAoCA,EAAK,gCAGhDM,EAAS,CACPnmE,EAAG,CACD6I,EAAGkL,EACH1T,EAAGgO,GAELhP,EAAG,CACDwJ,EAAGkL,GARF5K,SAAS08D,EAAK,8BAA+B,KAAO,GAQzC,EACZxlE,EAAGgO,GARFlF,SAAS08D,EAAK,iCAAkC,KAAO,GAQ5C,IAGhBxiE,EAAEgmC,EAAI/Z,GAAa62C,GACnBziB,EAAO5wC,KAAK,CAACqzD,EAAQ9iE,EAAEgmC,KAGrBw8B,EAAKt9B,QAASllC,EAAEwH,EAAI05C,GAAmBshB,EAAKt9B,cAAc,IAAKxrC,EAAI,EAAGA,EAAI2mD,EAAOzmD,SAAUF,EACzFgX,GAAK2vC,EAAO3mD,GAAG,GAAGiD,EAAE6I,GAAKkL,GAAK2vC,EAAO3mD,GAAG,GAAGsC,EAAEwJ,GAAOwF,GAAKq1C,EAAO3mD,GAAG,GAAGiD,EAAEK,GAAKgO,GAAKq1C,EAAO3mD,GAAG,GAAGsC,EAAEgB,IAAGgD,EAAEgmC,EAAIqa,EAAO3mD,GAAG,IAyB5H,QArBI8oE,EAAK,2BAA6BA,EAAK,0BAGzCM,EAAS,CACPnmE,EAAG,CACD6I,EAAGkL,EACH1T,EAAGgO,GAELhP,EAAG,CACDwJ,EAAGkL,GARF5K,SAAS08D,EAAK,uBAAwB,KAAO,GAQlC,EACZxlE,EAAGgO,GARFlF,SAAS08D,EAAK,0BAA2B,KAAO,GAQrC,IAGhBje,EAAO90C,KAAKqzD,IAKVN,EAAK,6BAA4BQ,EAAUl9D,SAAS08D,EAAK,2BAA4B,KAGjFxiE,EAAE9B,GACR,IAAK,UACH8B,EAAE9B,EAAI,IACN8B,EAAEhC,EAAI4mB,GAAa49C,EAAK,kBACxB,MAEF,IAAK,QAKL,IAAK,aAKL,IAAK,WACHxiE,EAAE9B,EAAI,IACN8B,EAAEhC,EAAIsJ,WAAWk7D,EAAK39C,OACtB,MAEF,IAAK,OACH7kB,EAAE9B,EAAI,IACN8B,EAAEhC,EAAIkiB,GAAUsiD,EAAK,eAEhBtiE,EAAK0tB,YACR5tB,EAAE9B,EAAI,IACN8B,EAAEhC,EAAIuhB,GAAQvf,EAAEhC,IAGlBgC,EAAE6jB,EAAI,SACN,MAEF,IAAK,OACH7jB,EAAE9B,EAAI,IACN8B,EAAEhC,EAAI6hB,GAAa2iD,EAAK,eAAiB,MAErCtiE,EAAK0tB,YACP5tB,EAAE9B,EAAI,IACN8B,EAAEhC,EAAI2hB,GAAQ3f,EAAEhC,IAGlBgC,EAAE6jB,EAAI,WACN,MAEF,IAAK,SACH7jB,EAAE9B,EAAI,IACN8B,EAAEhC,EAAIsJ,WAAWk7D,EAAK,6BACtB,MAEF,QACE,GAAY,WAARxiE,EAAE9B,GAA0B,SAAR8B,EAAE9B,GAAiB8B,EAAE9B,EAOtC,MAAM,IAAIf,MAAM,0BAA4B6C,EAAE9B,GANnD8B,EAAE9B,EAAI,IAEsB,MAAxBskE,EAAK,kBACPC,EAAQt+C,GAAYq+C,EAAK,iBACzBG,EAAQ,IAKlB,KAAO,CAuBL,GAtBAU,GAAS,EAEG,MAARrjE,EAAE9B,IACJ8B,EAAEhC,EAAIykE,GAAS,GACXE,EAAM/oE,SAAQoG,EAAE0Q,EAAIiyD,GACxBU,EAAqB,GAAZX,GAGPO,EAAK9wC,SAAQnyB,EAAE2H,EAAIs7D,GAEnBjpB,EAASpgD,OAAS,IACpBoG,EAAEhD,EAAIg9C,EACNA,EAAW,IAGTyoB,IAA2B,IAAlBviE,EAAKwoC,WAAoB1oC,EAAEsC,EAAImgE,GAExCY,IACFrjE,EAAE9B,EAAI,WACC8B,EAAEhC,KAGNqlE,GAAUnjE,EAAKytB,eACZztB,EAAK8+B,WAAa9+B,EAAK8+B,WAAatuB,GACxC,IAAK,IAAI8yD,EAAM,EAAGA,EAAMT,IAAWS,EAAK,CAGtC,GAFAR,EAAUl9D,SAAS08D,EAAK,4BAA8B,IAAK,IAEvDtiE,EAAK+sB,MAIP,IAHKC,EAAGxc,EAAI8yD,KAAMt2C,EAAGxc,EAAI8yD,GAAO,IAChCt2C,EAAGxc,EAAI8yD,GAAKx4D,GAAY,GAAPw4D,EAAWxjE,EAAI0gB,GAAI1gB,KAE3BgjE,EAAU,GACjB91C,EAAGxc,EAAI8yD,GAAKx4D,EAAIg4D,GAAWtiD,GAAI1gB,QAQjC,IALAktB,EAAG7B,GAAY,CACb7lB,EAAGkL,EAAI8yD,EACPxmE,EAAGgO,KACChL,IAEGgjE,EAAU,GACjB91C,EAAG7B,GAAY,CACb7lB,EAAGkL,EAAI8yD,EACPxmE,EAAGgO,EAAIg4D,KACHtiD,GAAI1gB,GAIVmrB,EAAMnvB,EAAEgB,GAAKgO,IAAGmgB,EAAMnvB,EAAEgB,EAAIgO,EAClC,CAKJA,IADAg4D,EAAUl9D,SAAS08D,EAAK,4BAA8B,IAAK,KAC5C,EACfQ,EAAU,EACVhjE,EAAI,CAEJ,EACAyiE,EAAQ,GACRE,EAAQ,EACV,CAEAM,EAAO,CAAC,EAGR,MAKF,IAAK,WAEL,IAAK,mBACL,IAAK,uCAEL,IAAK,cACL,IAAK,eAEL,IAAK,UAEL,IAAK,SAEL,IAAK,kBAEL,IAAK,gBAEH,GAAc,MAAVxU,EAAG,IACL,IAAK5xC,EAAMjM,EAAM8B,OAAO,KAAO+7C,EAAG,GAAI,KAAM,cAAgB5xC,MAChB,MAAnC4xC,EAAG,GAAGpzD,OAAOozD,EAAG,GAAG70D,OAAS,IAAYgX,EAAMnB,KAAK,CAACg/C,EAAG,IAAI,IAEtE,MAEF,IAAK,aAEH,GAAc,MAAVA,EAAG,GAAY,CACjB,IAAK5xC,EAAMjM,EAAM8B,OAAO,KAAO+7C,EAAG,GAAI,KAAM,cAAgB5xC,EAC5Ds9B,EAAQj8C,EAAIukE,EACRE,EAAM/oE,SAERugD,EAECzpC,EAAIiyD,GACPxoB,EAAQ5iC,EAAI4rD,EACZnpB,EAASvqC,KAAK0qC,EAChB,KAA8C,MAAnCsU,EAAG,GAAGpzD,OAAOozD,EAAG,GAAG70D,OAAS,IACrCgX,EAAMnB,KAAK,CAACg/C,EAAG,IAAI,IAGrB0U,EAAU,GACVC,EAAa,EACbX,EAAQ,GACRC,EAAW,EACXC,EAAQ,GACR,MAEF,IAAK,UAEW,MAAVlU,EAAG,GACL0U,EAAUx+D,EAAIpK,MAAM6oE,EAAY3U,EAAG5X,OAC9BusB,EAAa3U,EAAG5X,MAAQ4X,EAAG,GAAG70D,OAErC,MAIF,IAAK,OACL,IAAK,qBAEL,IAAK,WAEL,IAAK,kBAEL,IAAK,0BAEL,IAAK,wBAEL,IAAK,wBAEL,IAAK,SAEL,IAAK,QAEL,IAAK,WAEL,IAAK,QAEL,IAAK,oBAEL,IAAK,aAEL,IAAK,OAEL,IAAK,YAEL,IAAK,kBAEL,IAAK,QAEH,GAAc,MAAV60D,EAAG,IACL,IAAK5xC,EAAMjM,EAAM8B,OAAO,KAAO+7C,EAAG,GAAI,KAAM,cAAgB5xC,MAChB,MAAnC4xC,EAAG,GAAGpzD,OAAOozD,EAAG,GAAG70D,OAAS,IAAYgX,EAAMnB,KAAK,CAACg/C,EAAG,IAAI,IAEtEgU,EAAQ,GACRC,EAAW,EACXC,EAAQ,GACR,MAEF,IAAK,oBAIL,IAAK,kBAIL,IAAK,iBAuBL,IAAK,SAIL,IAAK,YAIL,IAAK,mBAIL,IAAK,gBAEL,IAAK,cAIL,IAAK,QAIL,IAAK,MAIL,IAAK,YAIL,IAAK,uBAIL,IAAK,mBAIL,IAAK,0BAIL,IAAK,uBAIL,IAAK,wBAgBL,IAAK,WAoCL,IAAK,gBAIL,IAAK,UAIL,IAAK,aA6BL,IAAK,eAIL,IAAK,kBAIL,IAAK,gBAIL,IAAK,OACL,IAAK,2BAIL,IAAK,QAIL,IAAK,eAIL,IAAK,oBAIL,IAAK,aAML,IAAK,qBAIL,IAAK,uBAIL,IAAK,gBAIL,IAAK,YAIL,IAAK,qBAIL,IAAK,uBAIL,IAAK,oBAIL,IAAK,cAIL,IAAK,eAIL,IAAK,mBAIL,IAAK,OAIL,IAAK,UAIL,IAAK,cAIL,IAAK,MAIL,IAAK,aAIL,IAAK,OAoBL,IAAK,IAmBL,IAAK,OAIL,IAAK,SAIL,IAAK,QACL,IAAK,eAIL,IAAK,OAIL,IAAK,cAML,IAAK,eAIL,IAAK,WAIL,IAAK,YAIL,IAAK,sBAIL,IAAK,qBAIL,IAAK,eAIL,IAAK,gBAIL,IAAK,kBAIL,IAAK,SAIL,IAAK,aAIL,IAAK,YAIL,IAAK,mBAIL,IAAK,0BAIL,IAAK,0BAIL,IAAK,wBAML,IAAK,mBAEL,IAAK,kBAEL,IAAK,kBAEL,IAAK,eAEL,IAAK,kBAEL,IAAK,eAEL,IAAK,uBAEL,IAAK,aAEL,IAAK,iBAEL,IAAK,oBAEL,IAAK,gBAEL,IAAK,cAEL,IAAK,qBAEL,IAAK,iBAEL,IAAK,2BAEL,IAAK,cAEL,IAAK,kBAEL,IAAK,UAEL,IAAK,YAEL,IAAK,gBAEL,IAAK,aAIL,IAAK,iBAKL,IAAK,kBACL,IAAK,gBACL,IAAK,aACL,IAAK,YACL,IAAK,qBACL,IAAK,eACL,IAAK,mBACL,IAAK,iBAKL,IAAK,cAKL,IAAK,cAIL,IAAK,aAIL,IAAK,OAML,IAAK,oBAIL,IAAK,YAIL,IAAK,YAIL,IAAK,oBAML,IAAK,mBAEL,IAAK,oBAEL,IAAK,iBAEL,IAAK,mBAEL,IAAK,mBAEL,IAAK,uBAEL,IAAK,sBAEL,IAAK,qBAEL,IAAK,oBAEL,IAAK,0BAEL,IAAK,uBAEL,IAAK,yBAEL,IAAK,6BAEL,IAAK,oBAEL,IAAK,mBAEL,IAAK,0BAML,IAAK,OAML,IAAK,uBAEL,IAAK,sBAEL,IAAK,WAEL,IAAK,aAIL,IAAK,aAIL,IAAK,WAsBL,IAAK,mBAGL,IAAK,yBAIL,IAAK,+BACH,MA7iBF,IAAK,eAEL,IAAK,mBAEL,IAAK,aAEL,IAAK,aAEH,GAAc,MAAVlU,EAAG,IAEL,GADAoU,EAAkBP,EAAMvyD,MAAQwyD,GAC3B1lD,EAAMjM,EAAM8B,OAAO,KAAO+7C,EAAG,GAAI,KAAM,cAAgB5xC,MAChB,MAAnC4xC,EAAG,GAAGpzD,OAAOozD,EAAG,GAAG70D,OAAS,KACrC2oE,EAAK,GACLD,EAAQ7+C,GAAYgrC,EAAG,IAAI,GAC3B79C,EAAMnB,KAAK,CAACg/C,EAAG,IAAI,KAGrB,MAoDF,IAAK,SAgBL,IAAK,MAEL,IAAK,QAEL,IAAK,OAEL,IAAK,MAEL,IAAK,cAEL,IAAK,eAEL,IAAK,UAEL,IAAK,QAEL,IAAK,UAEL,IAAK,UAEL,IAAK,QAEH,OAAQ79C,EAAMA,EAAMhX,OAAS,GAAG,IAC9B,IAAK,aACL,IAAK,aACH8pB,EAAMD,GAAYgrC,EAAG,IAAI,GACzB8T,GAAMb,GAAmBjT,EAAG,IAAkB,SAAd/qC,EAAIkqB,MAAmB,EAAI,GAI/D,MAcF,IAAK,OAEH,GAAwB,OAApB6gB,EAAG,GAAGl0D,OAAO,GAAa,MAAW,GAAc,MAAVk0D,EAAG,GAAY,OAAQ79C,EAAMA,EAAMhX,OAAS,GAAG,IAC1F,IAAK,eACL,IAAK,aACL,IAAK,aACH2oE,GAAM59D,EAAIpK,MAAM+0D,EAAMb,EAAG5X,YAEtByY,EAAOb,EAAG5X,MAAQ4X,EAAG,GAAG70D,OAC/B,MAEF,IAAK,cAGHspE,EAAO/hB,IADPz9B,EAAMD,GAAYgrC,EAAG,IAAI,IACA,uBACzB,IAAIgV,EAAS,CACXtnC,KAAMzY,EAAI3T,KACVq5C,IAAK8Z,EAAK,GAAK,IAAMA,EAAK,IAIxBI,IAASG,EAAOta,MAAQt8B,EAAWjzB,QACvCy2B,EAAG64B,MAAMz5C,KAAKg0D,GACd,MAqGF,IAAK,IACL,IAAK,qBAEH,GAAI,CAAC,iBAAiBrqE,QAAQwX,EAAMA,EAAMhX,OAAS,GAAG,KAAO,EAAG,MAEhE,GAAc,MAAV60D,EAAG,IAAgB+T,GAASA,EAAK,gBAIxB/+C,GAAYgrC,EAAG,IAAI,GAC9BiU,EAAWjU,EAAG5X,MAAQ4X,EAAG,GAAG70D,WALyB,CACrD,IAAI8pE,EAAMlC,GAAa78D,EAAIpK,MAAMmoE,EAAUjU,EAAG5X,QAC9C4rB,GAASA,EAAM7oE,OAAS,EAAI6oE,EAAQ,KAAO,IAAMiB,EAAI,EACvD,CAKA,MAOF,IAAK,iBAEH,GAAc,MAAVjV,EAAG,GAAY,MAEnB,IAEE3hC,GADAo2C,EAAO/hB,GAAc19B,GAAYgrC,EAAG,IAAI,0BAC5B,IAAI,eAAiB,CAC/BvxB,IAAKgmC,EAAK,GAEd,CAAE,MAAOlnE,GAET,CAEA,MAqPF,IAAK,IAEH,GAAc,MAAVyyD,EAAG,GAAY,CAEjB,KADAwU,EAAOx/C,GAAYgrC,EAAG,IAAI,IAChBkV,KAAM,MAChBV,EAAK9wC,OAAShO,GAAY8+C,EAAKU,aACxBV,EAAKU,KAEiB,KAAzBV,EAAK9wC,OAAO92B,OAAO,IAAa4nE,EAAK9wC,OAAO/4B,QAAQ,MAAQ,GAC9D8pE,EAAO/hB,GAAc8hB,EAAK9wC,OAAO53B,MAAM,IACvC0oE,EAAK9wC,OAAS,IAAM+wC,EAAK,GAAK,IAAMA,EAAK,IAChCD,EAAK9wC,OAAOruB,MAAM,iBAAgBm/D,EAAK9wC,OAAS8wC,EAAK9wC,OAAO53B,MAAM,GAC/E,CAEA,MAeF,QACE,OAAQk0D,EAAG,IACT,IAAK,MAEL,IAAK,WAEL,IAAK,SAEL,IAAK,OAEL,IAAK,YAEL,IAAK,QAEL,IAAK,SAEL,IAAK,SAEL,IAAK,QAEL,IAAK,OAEL,IAAK,UAEL,IAAK,UAEH,MAEF,QACE,GAAIvuD,EAAK+lB,IAAK,MAAM,IAAI9oB,MAAMsxD,IAMxC,IAAIjuD,EAEF,CACAssB,OAAQA,EACRD,WAAYA,EACZ2iC,SAAUn/B,GASZ,OALInwB,EAAKkxD,mBAET5wD,EAECssB,OACMtsB,CACT,CAEA,SAASojE,GAAU3hD,EAEjB/hB,GAKAA,EAAOA,GAAQ,CAAC,EAGZ8hB,GAAeC,EAAK,0BApsrC1B,SAAwBhkB,EAAGiC,GAKzB,IAJA,IACIuuD,EACAoV,EAFAl/D,EAAM2hB,GAAeroB,GAIlBwwD,EAAKloC,GAAU+sB,KAAK3uC,IACzB,OAAQ8pD,EAAG,IACT,IAAK,WACH,MAGF,IAAK,aAGH,GAAkB,MADlBoV,EAAQpgD,GAAYgrC,EAAG,IAAI,IACjBlxC,MAAesmD,EAAM3gE,OAASqvB,GAAQ,MAAM,IAAIp1B,MAAM,0CAChE,MAEF,IAAK,kBAEL,IAAK,YAEL,IAAK,uBAEL,IAAK,iBAEH,MAAM,IAAIA,MAAM,8BAElB,QACE,GAAI+C,GAAQA,EAAK+lB,IAAK,MAAMwoC,EAGpC,CAqqrCoDqV,CAAe1hD,GAAWH,EAAK,yBAA0B/hB,GAC3G,IAAIiR,EAAUmR,GAAUL,EAAK,eAC7B,IAAK9Q,EAAS,MAAM,IAAIhU,MAAM,yCAC9B,IAAI6uC,EAAKm2B,GAAkB/8C,GAASjU,GAAUjR,GAE9C,OADI8hB,GAAeC,EAAK,cAAa+pB,EAAGpX,MAAQnC,GAAiBrQ,GAAWH,EAAK,cAC1E+pB,CACT,CAEA,SAAS6kB,GAAWr3D,EAElB0G,GAKA,OAAOiiE,GAAkB3oE,EAAM0G,EACjC,CA8XA,SAAS6jE,GAAeC,GACtB,OAAO,IAAIC,SAASD,EAAME,OAAQF,EAAMG,WAAYH,EAAMI,WAC5D,CAEA,SAASC,GAAMC,GACb,MAA6B,oBAAf9jD,aAA6B,IAAIA,aAAcC,OAAO6jD,GAAMl/C,GAAStoB,EAAIwnE,GACzF,CAkBA,SAASC,GAASC,GAChB,IAAI7qE,EAAM6qE,EAAIC,QAAO,SAAUC,EAAKjqE,GAClC,OAAOiqE,EAAMjqE,EAAEb,MACjB,GAAG,GACC4G,EAAM,IAAIlE,WAAW3C,GACrBqf,EAAM,EAKV,OAJAwrD,EAAIt+C,SAAQ,SAAUo+C,GACpB9jE,EAAI/C,IAAI6mE,EAAItrD,GACZA,GAAOsrD,EAAG1qE,MACZ,IACO4G,CACT,CAEA,SAASmkE,GAAOlqE,GAGd,OAAoC,WADpCA,GAAS,WADTA,GAAKA,GAAK,EAAI,cACSA,GAAK,EAAI,aACnBA,GAAK,GAAK,aAA0B,EACnD,CA0BA,SAASmqE,GAAe3oE,EAAK4oE,GAC3B,IAAIl9D,EAAIk9D,EAAMA,EAAI,GAAK,EACnB7qD,EAAe,IAAT/d,EAAI0L,GAEdm9D,EAAQ,GAAI7oE,EAAI0L,MAAQ,IAAK,CAE3B,GADAqS,IAAiB,IAAT/d,EAAI0L,KAAa,EACrB1L,EAAI0L,KAAO,IAAK,MAAMm9D,EAE1B,GADA9qD,IAAiB,IAAT/d,EAAI0L,KAAa,GACrB1L,EAAI0L,KAAO,IAAK,MAAMm9D,EAE1B,GADA9qD,IAAiB,IAAT/d,EAAI0L,KAAa,GACrB1L,EAAI0L,KAAO,IAAK,MAAMm9D,EAG1B,GAFA9qD,IAAiB,IAAT/d,EAAI0L,IAAYpJ,KAAKC,IAAI,EAAG,MAClCmJ,EACE1L,EAAI0L,KAAO,IAAK,MAAMm9D,EAG1B,GAFA9qD,IAAiB,IAAT/d,EAAI0L,IAAYpJ,KAAKC,IAAI,EAAG,MAClCmJ,EACE1L,EAAI0L,KAAO,IAAK,MAAMm9D,EAG1B,GAFA9qD,IAAiB,IAAT/d,EAAI0L,IAAYpJ,KAAKC,IAAI,EAAG,MAClCmJ,EACE1L,EAAI0L,KAAO,IAAK,MAAMm9D,CAC5B,CAGA,OADID,IAAKA,EAAI,GAAKl9D,GACXqS,CACT,CAoCA,SAAS+qD,GAAc9oE,GACrB,IAAI0L,EAAI,EACJq9D,EAAe,IAAT/oE,EAAI0L,GAEdm9D,EAAQ,GAAI7oE,EAAI0L,MAAQ,IAAK,CAE3B,GADAq9D,IAAiB,IAAT/oE,EAAI0L,KAAa,EACrB1L,EAAI0L,KAAO,IAAK,MAAMm9D,EAE1B,GADAE,IAAiB,IAAT/oE,EAAI0L,KAAa,GACrB1L,EAAI0L,KAAO,IAAK,MAAMm9D,EAE1B,GADAE,IAAiB,IAAT/oE,EAAI0L,KAAa,GACrB1L,EAAI0L,KAAO,IAAK,MAAMm9D,EAC1BE,IAAiB,IAAT/oE,EAAI0L,KAAa,EAC3B,CAEA,OAAOq9D,CACT,CAEA,SAASC,GAAchpE,GAIrB,IAHA,IAAIuE,EAAM,GACNqkE,EAAM,CAAC,GAEJA,EAAI,GAAK5oE,EAAIrC,QAAQ,CAC1B,IAKI8oB,EALA1J,EAAM6rD,EAAI,GACVjd,EAAMgd,GAAe3oE,EAAK4oE,GAC1B3hE,EAAa,EAAN0kD,EAEPjuD,EAAM,EAEV,GAAW,IAHXiuD,EAAMrpD,KAAKwB,MAAM6nD,EAAM,IAGT,MAEd,OAAQ1kD,GACN,KAAK,EAID,IAFA,IAAIyE,EAAIk9D,EAAI,GAEL5oE,EAAI4oE,EAAI,OAAS,MAIxBniD,EAAMzmB,EAAI1B,MAAMoN,EAAGk9D,EAAI,IAEzB,MAEF,KAAK,EACHlrE,EAAM,EACN+oB,EAAMzmB,EAAI1B,MAAMsqE,EAAI,GAAIA,EAAI,GAAKlrE,GACjCkrE,EAAI,IAAMlrE,EACV,MAEF,KAAK,EACHA,EAAM,EACN+oB,EAAMzmB,EAAI1B,MAAMsqE,EAAI,GAAIA,EAAI,GAAKlrE,GACjCkrE,EAAI,IAAMlrE,EACV,MAEF,KAAK,EACHA,EAAMirE,GAAe3oE,EAAK4oE,GAC1BniD,EAAMzmB,EAAI1B,MAAMsqE,EAAI,GAAIA,EAAI,GAAKlrE,GACjCkrE,EAAI,IAAMlrE,EACV,MAIF,QACE,MAAM,IAAIwD,MAAM,WAAWG,OAAO4F,EAAM,eAAe5F,OAAOsqD,EAAK,eAAetqD,OAAO0b,IAG7F,IAAIhb,EAAI,CACNxE,KAAMkpB,EACNxf,KAAMA,GAEQ,MAAZ1C,EAAIonD,GAAcpnD,EAAIonD,GAAO,CAAC5pD,GAAQwC,EAAIonD,GAAKn4C,KAAKzR,EAC1D,CAEA,OAAOwC,CACT,CAeA,SAAS0kE,GAAM1rE,EAAMywB,GACnB,OAAgB,MAARzwB,OAAe,EAASA,EAAKqD,KAAI,SAAUoB,GACjD,OAAOgsB,EAAGhsB,EAAEzE,KACd,MAAO,EACT,CAEA,SAAS2rE,GAAelpE,GAMtB,IALA,IAAImpE,EAEA5kE,EAAM,GACNqkE,EAAM,CAAC,GAEJA,EAAI,GAAK5oE,EAAIrC,QAAQ,CAC1B,IAAID,EAAMirE,GAAe3oE,EAAK4oE,GAC1B/a,EAAKmb,GAAchpE,EAAI1B,MAAMsqE,EAAI,GAAIA,EAAI,GAAKlrE,IAClDkrE,EAAI,IAAMlrE,EACV,IAAI+oB,EAAM,CACR4X,GAAIyqC,GAAcjb,EAAG,GAAG,GAAGtwD,MAC3B6rE,SAAU,IAEZvb,EAAG,GAAG5jC,SAAQ,SAAUzP,GACtB,IAAI6uD,EAAKL,GAAcxuD,EAAEjd,MACrBshE,EAAKiK,GAAcO,EAAG,GAAG,GAAG9rE,MAChCkpB,EAAI2iD,SAAS51D,KAAK,CAChB83B,KAAM+9B,EACN9rE,KAAMyC,EAAI1B,MAAMsqE,EAAI,GAAIA,EAAI,GAAK/J,KAEnC+J,EAAI,IAAM/J,CACZ,KACoB,OAAfsK,EAAKtb,EAAG,SAAc,EAASsb,EAAG,MAAI1iD,EAAI6iD,MAAQR,GAAcjb,EAAG,GAAG,GAAGtwD,QAAU,EAAI,GAC5FgH,EAAIiP,KAAKiT,EACX,CAEA,OAAOliB,CACT,CAqCA,SAASglE,GAAmBtiE,EAAMjH,GAChC,GAAY,GAARiH,EAAW,MAAM,IAAI/F,MAAM,gCAAgCG,OAAO4F,IAKtE,IAJA,IAAI2hE,EAAM,CAAC,GACP7qD,EAAM4qD,GAAe3oE,EAAK4oE,GAC1BY,EAAS,GAENZ,EAAI,GAAK5oE,EAAIrC,QAAQ,CAC1B,IAAI8pB,EAAoB,EAAdznB,EAAI4oE,EAAI,IAElB,GAAW,GAAPnhD,EAAJ,CAgBE,IAAI1R,EAAS,EACTpY,EAAS,EAmBb,GAjBW,GAAP8pB,GACF9pB,EAAkC,GAAxBqC,EAAI4oE,EAAI,KAAO,EAAI,GAC7B7yD,GAA0B,IAAhB/V,EAAI4oE,EAAI,QAAgB,EAClC7yD,GAAU/V,EAAI4oE,EAAI,QAElBjrE,EAAgC,GAAtBqC,EAAI4oE,EAAI,OAAS,GAEhB,GAAPnhD,GACF1R,EAAS/V,EAAI4oE,EAAI,IAAM5oE,EAAI4oE,EAAI,GAAK,IAAM,EAC1CA,EAAI,IAAM,IAEV7yD,GAAU/V,EAAI4oE,EAAI,IAAM5oE,EAAI4oE,EAAI,GAAK,IAAM,EAAI5oE,EAAI4oE,EAAI,GAAK,IAAM,GAAK5oE,EAAI4oE,EAAI,GAAK,IAAM,MAAQ,EAClGA,EAAI,IAAM,IAIdY,EAAS,CAAClB,GAASkB,IACL,GAAVzzD,EAAa,MAAM,IAAI7U,MAAM,oBACjC,GAAI6U,EAASyzD,EAAO,GAAG7rE,OAAQ,MAAM,IAAIuD,MAAM,gCAE/C,GAAIvD,GAAUoY,EAIZ,IAHAyzD,EAAOh2D,KAAKg2D,EAAO,GAAGlrE,OAAOyX,IAC7BpY,GAAUoY,EAEHpY,GAAU6rE,EAAOA,EAAO7rE,OAAS,GAAGA,QACzC6rE,EAAOh2D,KAAKg2D,EAAOA,EAAO7rE,OAAS,IACnCA,GAAU6rE,EAAOA,EAAO7rE,OAAS,GAAGA,OAIxC6rE,EAAOh2D,KAAKg2D,EAAO,GAAGlrE,OAAOyX,GAASA,EAASpY,GACjD,KAlDA,CACE,IAAID,EAAMsC,EAAI4oE,EAAI,OAAS,EAC3B,GAAIlrE,EAAM,KAAMA,MAAS,CACvB,IAAIqD,EAAIrD,EAAM,GACdA,EAAMsC,EAAI4oE,EAAI,IACV7nE,EAAI,IAAGrD,GAAOsC,EAAI4oE,EAAI,GAAK,IAAM,GACjC7nE,EAAI,IAAGrD,GAAOsC,EAAI4oE,EAAI,GAAK,IAAM,IACjC7nE,EAAI,IAAGrD,GAAOsC,EAAI4oE,EAAI,GAAK,IAAM,IACrClrE,KAAS,EACTA,IACAkrE,EAAI,IAAM7nE,CACZ,CACAyoE,EAAOh2D,KAAKxT,EAAI1B,MAAMsqE,EAAI,GAAIA,EAAI,GAAKlrE,IACvCkrE,EAAI,IAAMlrE,CAqCZ,CACF,CAEA,IAAIF,EAAI8qE,GAASkB,GACjB,GAAIhsE,EAAEG,QAAUogB,EAAK,MAAM,IAAI7c,MAAM,sBAAsBG,OAAO7D,EAAEG,OAAQ,QAAQ0D,OAAO0c,IAC3F,OAAOvgB,CACT,CAEA,SAASisE,GAAoBzpE,GAI3B,IAHA,IAAIuE,EAAM,GACNmH,EAAI,EAEDA,EAAI1L,EAAIrC,QAAQ,CACrB,IAAIsE,EAAIjC,EAAI0L,KACRhO,EAAMsC,EAAI0L,GAAK1L,EAAI0L,EAAI,IAAM,EAAI1L,EAAI0L,EAAI,IAAM,GACnDA,GAAK,EACLnH,EAAIiP,KAAK+1D,GAAmBtnE,EAAGjC,EAAI1B,MAAMoN,EAAGA,EAAIhO,KAChDgO,GAAKhO,CACP,CAEA,GAAIgO,IAAM1L,EAAIrC,OAAQ,MAAM,IAAIuD,MAAM,sCACtC,OAAOonE,GAAS/jE,EAClB,CAgJA,SAASmlE,GAAkB1pE,EAAKgvD,EAAK2a,GACnC,IAkCI5vC,EAlCA6vC,EAAK9B,GAAe9nE,GACpBiQ,EAAQ25D,EAAGC,UAAU,GAAG,GACxBC,EAAc,GACdnjD,GAAQ,EACR4mB,GAAQ,EACRw8B,EAAOhlD,IACPilD,EAAOjlD,IACP9Y,EAAK,IAAIhH,KAAK,KAAM,EAAG,GA6B3B,OA3BY,EAARgL,IACF85D,EAjeJ,SAA0B/pE,EAAK+V,GAI7B,IAHA,IAAIk0D,GAA0B,IAAnBjqE,EAAI+V,EAAS,MAAc,EAAI/V,EAAI+V,EAAS,KAAO,EAC1Dm0D,EAA8B,EAAnBlqE,EAAI+V,EAAS,IAEnBtO,EAAIsO,EAAS,GAAItO,GAAKsO,IAAUtO,EACvCyiE,EAAsB,IAAXA,EAAiBlqE,EAAIyH,GAGlC,OAA2B,IAAnBzH,EAAI+V,EAAS,KAAam0D,EAAWA,GAAY5nE,KAAKC,IAAI,GAAI0nE,EAAM,KAC9E,CAwdWE,CAAiBnqE,EAAK8pE,GAC7BA,GAAe,IAGL,EAAR75D,IACF+5D,EAAOJ,EAAGQ,WAAWN,GAAa,GAClCA,GAAe,GAGL,EAAR75D,IACFhE,EAAG0X,QAAQ1X,EAAGvG,UAA+C,IAAnCkkE,EAAGQ,WAAWN,GAAa,IACrDA,GAAe,GAGL,EAAR75D,IACFs9B,EAAOq8B,EAAGC,UAAUC,GAAa,GACjCA,GAAe,GAGL,GAAR75D,IACF0W,EAAOijD,EAAGC,UAAUC,GAAa,GACjCA,GAAe,GAKT9pE,EAAI,IACV,KAAK,EACH,MAEF,KAAK,EAmDL,KAAK,GACH+5B,EAAM,CACJ93B,EAAG,IACHF,EAAGgoE,GAEL,MAjDF,KAAK,EACHhwC,EAAM,CACJ93B,EAAG,IACHF,EAAGitD,EAAIzhB,IAET,MAEF,KAAK,EACHxT,EAAM,CACJ93B,EAAG,IACHF,EAAGkK,GAEL,MAEF,KAAK,EACH8tB,EAAM,CACJ93B,EAAG,IACHF,EAAGioE,EAAO,GAEZ,MAEF,KAAK,EACHjwC,EAAM,CACJ93B,EAAG,IACHF,EAAGioE,EAAO,OAEZ,MAEF,KAAK,EACHjwC,EAAM,CACJ93B,EAAG,IACHF,EAAG,GAEL,MAEF,KAAK,EAED,KAAI4kB,GAAQ,GAGL,MAAM,IAAIzlB,MAAM,yBAAyBG,OAAOrB,EAAI,GAAI,OAAOqB,OAAe,GAAR4O,EAAY,OAAO5O,OAAOrB,EAAI1B,MAAM,EAAG,KAHrGy7B,EAAM,CACnB93B,EAAG,IACHF,EAAG4nE,EAAKhjD,IAGZ,MASF,QACE,MAAM,IAAIzlB,MAAM,yBAAyBG,OAAOrB,EAAI,GAAI,OAAOqB,OAAe,GAAR4O,EAAY,OAAO5O,OAAOrB,EAAI1B,MAAM,EAAG,KAGjH,OAAOy7B,CACT,CA8EA,SAASswC,GAAmBrqE,EAAKgvD,EAAK2a,GACpC,OAAQ3pE,EAAI,IACV,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACH,OAjSN,SAA2BA,EAAKgvD,EAAK2a,EAAM5nE,GACzC,IA8BIg4B,EA9BA6vC,EAAK9B,GAAe9nE,GACpBiQ,EAAQ25D,EAAGC,UAAU,GAAG,GACxBC,GAAe/nE,EAAI,EAAI,GAAK,GAA4C,EAAvC2mE,GAAOz4D,GAASlO,EAAI,EAAI,KAAO,MAChE4kB,GAAQ,EACR4mB,GAAQ,EACRy8B,EAAOjlD,IACP9Y,EAAK,IAAIhH,KAAK,KAAM,EAAG,GA0B3B,OAxBY,IAARgL,IACF0W,EAAOijD,EAAGC,UAAUC,GAAa,GACjCA,GAAe,GAGjBA,GAAwD,EAAzCpB,GAAOz4D,GAASlO,EAAI,EAAI,MAAQ,OAEnC,GAARkO,IACFs9B,EAAOq8B,EAAGC,UAAUC,GAAa,GACjCA,GAAe,GAGL,GAAR75D,IACF+5D,EAAOJ,EAAGQ,WAAWN,GAAa,GAClCA,GAAe,GAGL,GAAR75D,IACFhE,EAAG0X,QAAQ1X,EAAGvG,UAA+C,IAAnCkkE,EAAGQ,WAAWN,GAAa,IACrDA,GAAe,GAKT9pE,EAAI,IACV,KAAK,EACH,MAEF,KAAK,EACH+5B,EAAM,CACJ93B,EAAG,IACHF,EAAGioE,GAEL,MAEF,KAAK,EACHjwC,EAAM,CACJ93B,EAAG,IACHF,EAAGitD,EAAIzhB,IAET,MAEF,KAAK,EACHxT,EAAM,CACJ93B,EAAG,IACHF,EAAGkK,GAEL,MAEF,KAAK,EACH8tB,EAAM,CACJ93B,EAAG,IACHF,EAAGioE,EAAO,GAEZ,MAEF,KAAK,EACHjwC,EAAM,CACJ93B,EAAG,IACHF,EAAGioE,EAAO,OAEZ,MAEF,KAAK,EACHjwC,EAAM,CACJ93B,EAAG,IACHF,EAAG,GAEL,MAEF,KAAK,EAED,GAAI4kB,GAAQ,EAAGoT,EAAM,CACnB93B,EAAG,IACHF,EAAG4nE,EAAKhjD,SACH,GAAI4mB,GAAQ,EAAGxT,EAAM,CAC1B93B,EAAG,IACHF,EAAGitD,EAAIzhB,QACF,IAAKpuC,MAAM6qE,GAGX,MAAM,IAAI9oE,MAAM,yBAAyBG,OAAOrB,EAAI1B,MAAM,EAAG,KAH3Cy7B,EAAM,CAC7B93B,EAAG,IACHF,EAAGioE,EACmE,CAE1E,MAEF,QACE,MAAM,IAAI9oE,MAAM,yBAAyBG,OAAOrB,EAAI1B,MAAM,EAAG,KAGjE,OAAOy7B,CACT,CA8LauwC,CAAkBtqE,EAAKgvD,EAAK2a,EAAM3pE,EAAI,IAE/C,KAAK,EACH,OAAO0pE,GAAkB1pE,EAAKgvD,EAAK2a,GAErC,QACE,MAAM,IAAIzoE,MAAM,+BAA+BG,OAAOrB,EAAI,KAEhE,CAEA,SAASuqE,GAAoBvqE,GAE3B,OAAO2oE,GADEK,GAAchpE,GACE,GAAG,GAAGzC,KACjC,CAWA,SAASitE,GAAwB3lE,EAAGiM,GAClC,IAAI25D,EAAKzB,GAAcl4D,EAAKvT,MACxB0J,EAAO6hE,GAAc2B,EAAG,GAAG,GAAGltE,MAC9BmtE,EAAUD,EAAG,GACbltE,EAAO,GAyBX,OAxBCmtE,GAAW,IAAIzgD,SAAQ,SAAUvU,GAChC,IAAIi1D,EAAK3B,GAActzD,EAAMnY,MACzB2zD,EAAM4X,GAAc6B,EAAG,GAAG,GAAGptE,QAAU,EAE3C,OAAQ0J,GACN,KAAK,EACH1J,EAAK2zD,GAAOkX,GAAMuC,EAAG,GAAG,GAAGptE,MAC3B,MAEF,KAAK,EAED,IACIqtE,EAAM5B,GADDnkE,EAAE0lE,GAAoBI,EAAG,GAAG,GAAGptE,OAAO,GACpBA,MACvBstE,EAAShmE,EAAE0lE,GAAoBK,EAAI,GAAG,GAAGrtE,OAAO,GAChDutE,EAAQhC,GAAc+B,EAAOv/B,KAAK,GAAG,GAAG/tC,MAC5C,GAAa,MAATutE,EAAe,MAAM,IAAI5pE,MAAM,gCAAgCG,OAAOypE,IAC1E,IAAIC,EAAS/B,GAAc6B,EAAOttE,MAClCA,EAAK2zD,GAAO6Z,EAAO,GAAGnqE,KAAI,SAAUpC,GAClC,OAAO4pE,GAAM5pE,EAAEjB,KACjB,IAAGS,KAAK,IAIhB,IACOT,CACT,CA0CA,SAASytE,GAAenmE,EAAGiM,GACzB,IAAIq4D,EAEAsB,EAAKzB,GAAcl4D,EAAKvT,MACxByX,GAAiD,OAArCm0D,EAAW,MAANsB,OAAa,EAASA,EAAG,SAAc,EAAStB,EAAG,IAAML,GAAc2B,EAAG,GAAG,GAAGltE,QAAU,EAAI,EAAI,EAAI,GAAK,EAC5HiM,EAAKy/D,GAAMwB,EAAG,IAAI,SAAUpC,GAC9B,OA9CJ,SAA+BA,EAAIphE,GACjC,IAAIkiE,EAAI8B,EAAIC,EAAIhd,EAAIid,EAAIjnC,EAAIknC,EAAIC,EAAIC,EAAIxR,EAAIyR,EAAIC,EAAIC,EAAIpnC,EAMpDqnC,EAAiBC,EAJjBlB,EAAKzB,GAAcX,GACnB5zD,EAAIq0D,GAAc2B,EAAG,GAAG,GAAGltE,QAAU,EACrCuY,EAAMgzD,GAAc2B,EAAG,GAAG,GAAGltE,QAAU,EACvCquE,GAAgE,OAA/CX,EAAqB,OAAf9B,EAAKsB,EAAG,SAAc,EAAStB,EAAG,SAAc,EAAS8B,EAAG1tE,OAASurE,GAAc2B,EAAG,GAAG,GAAGltE,MAAQ,IAAK,EAGpI,IAAqD,OAA/C2wD,EAAqB,OAAfgd,EAAKT,EAAG,SAAc,EAASS,EAAG,SAAc,EAAShd,EAAG3wD,OAAiB,GAAR0J,EAC/EykE,EAAkE,OAA/CxnC,EAAqB,OAAfinC,EAAKV,EAAG,SAAc,EAASU,EAAG,SAAc,EAASjnC,EAAG3mC,KACrFouE,EAA+D,OAA/CN,EAAqB,OAAfD,EAAKX,EAAG,SAAc,EAASW,EAAG,SAAc,EAASC,EAAG9tE,SAC7E,MAAqD,OAA/Cu8D,EAAqB,OAAfwR,EAAKb,EAAG,SAAc,EAASa,EAAG,SAAc,EAASxR,EAAGv8D,OAAiB,GAAR0J,EAGjF,KAAM,wBAAwB5F,OAAO4F,EAAM,iBAFhDykE,EAAkE,OAA/CF,EAAqB,OAAfD,EAAKd,EAAG,SAAc,EAASc,EAAG,SAAc,EAASC,EAAGjuE,KACrFouE,EAA+D,OAA/CtnC,EAAqB,OAAfonC,EAAKhB,EAAG,SAAc,EAASgB,EAAG,SAAc,EAASpnC,EAAG9mC,IAClB,CAMlE,IAJA,IAAIm/B,EAAQkvC,EAAe,EAAI,EAC3BC,EAAuB/D,GAAe4D,GACtClb,EAAU,GAELzhD,EAAI,EAAGA,EAAI28D,EAAgB/tE,OAAS,IAAKoR,EAAG,CACnD,IAAIgO,EAAM8uD,EAAqBC,UAAc,EAAJ/8D,GAAO,GAC5CgO,EAAM,OAAOyzC,EAAQh9C,KAAK,CAACzE,EAAGgO,GACpC,CAEA,GAAIyzC,EAAQ7yD,QAAUmY,EAAK,KAAM,YAAYzU,OAAOyU,EAAK,kBAAkBzU,OAAOmvD,EAAQ7yD,QAC1F,IAAIksD,EAAQ,GAEZ,IAAK96C,EAAI,EAAGA,EAAIyhD,EAAQ7yD,OAAS,IAAKoR,EACpC86C,EAAM2G,EAAQzhD,GAAG,IAAM48D,EAAa/9D,SAAS4iD,EAAQzhD,GAAG,GAAK2tB,EAAO8zB,EAAQzhD,EAAI,GAAG,GAAK2tB,GAI1F,OADI8zB,EAAQ7yD,QAAU,IAAGksD,EAAM2G,EAAQA,EAAQ7yD,OAAS,GAAG,IAAMguE,EAAa/9D,SAAS4iD,EAAQA,EAAQ7yD,OAAS,GAAG,GAAK++B,IACjH,CACLjoB,EAAGA,EACHo1C,MAAOA,EAEX,CAQWkiB,CAAsB1D,EAAIrzD,EACnC,IACA,MAAO,CACLg3D,MAAOlD,GAAc2B,EAAG,GAAG,GAAGltE,QAAU,EACxCA,KAAMiM,EAAGg/D,QAAO,SAAUC,EAAKjqE,GAM7B,OALKiqE,EAAIjqE,EAAEiW,KAAIg0D,EAAIjqE,EAAEiW,GAAK,IAC1BjW,EAAEqrD,MAAM5/B,SAAQ,SAAU4E,EAAM9f,GAC9B,GAAI05D,EAAIjqE,EAAEiW,GAAG1F,GAAI,MAAM,IAAI7N,MAAM,oBAAoBG,OAAO7C,EAAEiW,EAAG,OAAOpT,OAAO0N,IAC/E05D,EAAIjqE,EAAEiW,GAAG1F,GAAK8f,CAChB,IACO45C,CACT,GAAG,IAEP,CAiDA,SAASwD,GAA2BpnE,EAAGiM,GACrC,IACIvM,EAAM,CACR,OAAQ,MAEN2nE,EAAWrnE,EAAE0lE,GAJRvB,GAAcl4D,EAAKvT,MAIY,GAAG,GAAGA,OAC1CutE,EAAQhC,GAAcoD,EAAS,GAAG5gC,KAAK,GAAG,GAAG/tC,MACjD,GAAa,MAATutE,EAAe,MAAM,IAAI5pE,MAAM,gCAAgCG,OAAOypE,IAE1E,OAxDF,SAAqCjmE,EAAGiM,EAAMmgB,GAC5C,IAAIk4C,EAEAsB,EAAKzB,GAAcl4D,EAAKvT,MACxB2xB,EAAQ,CACVxuB,EAAG,CACD6I,EAAG,EACHxI,EAAG,GAELhB,EAAG,CACDwJ,EAAG,EACHxI,EAAG,IAIP,GADAmuB,EAAMnvB,EAAEwJ,GAAKu/D,GAAc2B,EAAG,GAAG,GAAGltE,QAAU,GAAK,EAC/C2xB,EAAMnvB,EAAEwJ,EAAI,EAAG,MAAM,IAAIrI,MAAM,sBAAsBG,OAAOopE,EAAG,GAAG,GAAGltE,OAEzE,GADA2xB,EAAMnvB,EAAEgB,GAAK+nE,GAAc2B,EAAG,GAAG,GAAGltE,QAAU,GAAK,EAC/C2xB,EAAMnvB,EAAEgB,EAAI,EAAG,MAAM,IAAIG,MAAM,sBAAsBG,OAAOopE,EAAG,GAAG,GAAGltE,OACzE0zB,EAAG,QAAUjB,GAAad,GAC1B,IAAIi9C,EAAQnD,GAAcyB,EAAG,GAAG,GAAGltE,MAC/ByxD,EAAMwb,GAAwB3lE,EAAGA,EAAE0lE,GAAoB4B,EAAM,GAAG,GAAG5uE,OAAO,IAC1EosE,GAA4B,OAAnBR,EAAKgD,EAAM,UAAe,EAAShD,EAAG,IAAMqB,GAAwB3lE,EAAGA,EAAE0lE,GAAoB4B,EAAM,IAAI,GAAG5uE,OAAO,IAAM,GAChI6uE,EAAOpD,GAAcmD,EAAM,GAAG,GAAG5uE,MACjC2zB,EAAK,EACTk7C,EAAK,GAAGniD,SAAQ,SAAUhoB,GACxB,IAAIoqE,EAAKrD,GAAc/mE,EAAE1E,MACrB0jC,EAAMp8B,EAAE0lE,GAAoB8B,EAAG,GAAG,GAAG9uE,OAAO,GAC5CutE,EAAQhC,GAAc7nC,EAAIqK,KAAK,GAAG,GAAG/tC,MACzC,GAAa,MAATutE,EAAe,MAAM,IAAI5pE,MAAM,gCAAgCG,OAAOypE,IAE1E,IAAIwB,EAAQtB,GAAenmE,EAAGo8B,GAE9BqrC,EAAM/uE,KAAK0sB,SAAQ,SAAUjZ,EAAKyD,GAChCzD,EAAIiZ,SAAQ,SAAUjqB,EAAK+O,GACzB,IAAI0E,EAAO2b,GAAY,CACrB7lB,EAAG2nB,EAAKzc,EACR1T,EAAGgO,IAED0X,EAAM4jD,GAAmBrqE,EAAKgvD,EAAK2a,GACnCljD,IAAKwK,EAAGxd,GAAQgT,EACtB,GACF,IAEAyK,GAAMo7C,EAAMN,KACd,GACF,CAUEO,CAA4B1nE,EAAGqnE,EAAS,GAAI3nE,GACrCA,CACT,CAoBA,SAASioE,GAAyB3nE,EAAGiM,GACnC,IAAIvM,EA6lFG,CACLqsB,WAAY,GACZC,OAAQ,CAAC,GAhlFX,GAbgBo4C,GADPD,GAAcl4D,EAAKvT,MACH,GAAIgtE,IACnBtgD,SAAQ,SAAUlN,GAC1BlY,EAAEkY,GAAKkN,SAAQ,SAAUtlB,GAGvB,GAAa,GAFDmkE,GAAcnkE,EAAE2mC,KAAK,GAAG,GAAG/tC,MAEvB,CACd,IAAIkvE,EA3BZ,SAA+B5nE,EAAGiM,GAChC,IAAIq4D,EAEAsB,EAAKzB,GAAcl4D,EAAKvT,MACxBgH,EAAM,CACRuP,MAAuB,OAAfq1D,EAAKsB,EAAG,SAAc,EAAStB,EAAG,IAAMf,GAAMqC,EAAG,GAAG,GAAGltE,MAAQ,GACvEozB,OAAQ,IASV,OAPgBs4C,GAAMwB,EAAG,GAAIF,IACnBtgD,SAAQ,SAAUlN,GAC1BlY,EAAEkY,GAAKkN,SAAQ,SAAUtlB,GAEV,KADDmkE,GAAcnkE,EAAE2mC,KAAK,GAAG,GAAG/tC,OACrBgH,EAAIosB,OAAOnd,KAAKy4D,GAA2BpnE,EAAGF,GAClE,GACF,IACOJ,CACT,CAWoBmoE,CAAsB7nE,EAAGF,GACrC8nE,EAAM97C,OAAO1G,SAAQ,SAAUyG,EAAO9oB,GACpCirD,GAAkBtuD,EAAKmsB,EAAc,GAAP9oB,EAAW6kE,EAAM34D,KAAO24D,EAAM34D,KAAO,IAAMlM,GAAK,EAChF,GACF,CACF,GACF,IAC6B,GAAzBrD,EAAIqsB,WAAWjzB,OAAa,MAAM,IAAIuD,MAAM,sBAChD,OAAOqD,CACT,CAEA,SAASooE,GAAkB12D,GACzB,IAAIkzD,EAAI8B,EAAIC,EAAIhd,EAEZrpD,EAAI,CAAC,EACL+nE,EAAU,GA2Bd,GA1BA32D,EAAI5E,UAAU4Y,SAAQ,SAAU5a,GAC9B,GAAIA,EAAExH,MAAM,WAAY,MAAM,IAAI3G,MAAM,kCAC1C,IACA+U,EAAI7E,UAAU6Y,SAAQ,SAAUvpB,GAC9B,GAAKA,EAAEoT,KAAKjM,MAAM,UAAlB,CACA,IAAIrK,EAQAqvE,EANJ,IACErvE,EAAIisE,GAAoB/oE,EAAEwU,QAC5B,CAAE,MAAOnV,GACP,OAAO4e,QAAQzY,IAAI,MAAQxF,EAAEwU,QAAQvX,OAAS,KAAOoC,EAAE2iB,SAAW3iB,GACpE,CAIA,IACE8sE,EAAU3D,GAAe1rE,EAC3B,CAAE,MAAOuC,GACP,OAAO4e,QAAQzY,IAAI,OAASnG,EAAE2iB,SAAW3iB,GAC3C,CAEA8sE,EAAQ5iD,SAAQ,SAAU6iD,GACxBjoE,EAAEioE,EAAOzuC,IAAMyuC,EAAO1D,SACtBwD,EAAQp5D,KAAKs5D,EAAOzuC,GACtB,GApBmC,CAqBrC,KACKuuC,EAAQjvE,OAAQ,MAAM,IAAIuD,MAAM,wBACrC,IAAI6rE,GAAiJ,OAArI7e,EAA2G,OAArGgd,EAAyE,OAAnED,EAAyC,OAAnC9B,EAAU,MAALtkE,OAAY,EAASA,EAAE,SAAc,EAASskE,EAAG,SAAc,EAAS8B,EAAG3/B,WAAgB,EAAS4/B,EAAG,SAAc,EAAShd,EAAG,GAAG3wD,OAAmD,GAA1CurE,GAAcjkE,EAAE,GAAG,GAAGymC,KAAK,GAAG,GAAG/tC,OAAcsH,EAAE,GAAG,GAUxO,GATKkoE,GAASH,EAAQ3iD,SAAQ,SAAUriB,GACtC/C,EAAE+C,GAAKqiB,SAAQ,SAAU+iD,GAGvB,GAAa,GAFDlE,GAAckE,EAAK1hC,KAAK,GAAG,GAAG/tC,QAAU,EAEpC,CACd,GAAKwvE,EAA6B,MAAM,IAAI7rE,MAAM,+BAApC6rE,EAAUC,CAC1B,CACF,GACF,KACKD,EAAS,MAAM,IAAI7rE,MAAM,6BAC9B,OAAOsrE,GAAyB3nE,EAAGkoE,EACrC,CA+bA,SAASE,GAAc9gB,GAKrB,OAAO,SAAkBloD,GACvB,IAAK,IAAIxG,EAAI,EAAGA,GAAK0uD,EAASxuD,SAAUF,EAAG,CACzC,IAAIuE,EAAImqD,EAAS1uD,QACEwP,IAAfhJ,EAAKjC,EAAE,MAAmBiC,EAAKjC,EAAE,IAAMA,EAAE,IAChC,MAATA,EAAE,KAAYiC,EAAKjC,EAAE,IAAM6iB,OAAO5gB,EAAKjC,EAAE,KAC/C,CACF,CACF,CAEA,SAASuzD,GAActxD,GACrBgpE,GAAc,CAAC,CAAC,UAAU,GAE1B,CAAC,YAAY,GAEb,CAAC,eAAe,GAEhB,CAAC,cAAc,GAEf,CAAC,YAAY,GAEb,CAAC,aAAa,GAEd,CAAC,cAAc,GAEf,CAAC,YAAa,EAAG,KAEjB,CAAC,YAAY,GAEb,CAAC,cAAc,GAEf,CAAC,aAAa,GAEd,CAAC,aAAa,GAEd,CAAC,WAAW,GAEZ,CAAC,WAAY,IAEb,CAAC,OAAO,IA5BRA,CA8BGhpE,EACL,CA2CA,SAASipE,GAAiBlnD,EAAK1E,EAE7B6rD,EAEAz8C,EAAO9oB,EAEPwlE,EAAWz8C,EAAQ08C,EAEnBppE,EAAM8rC,EAAI8J,EAAQC,GAClB,IACEszB,EAAU18C,GAASmF,GAAWxP,GAAUL,EAAKmnD,GAAU,GAAO7rD,GAC9D,IAEIyP,EAFAxzB,EAAO4oB,GAAWH,EAAK1E,GAI3B,OAAQ+rD,GACN,IAAK,QACHt8C,EAAM68B,GAASrwD,EAAM+jB,EAAM1Z,EAAK3D,EAAMmpE,EAAU18C,GAAQqf,EAAI8J,EAAQC,GACpE,MAEF,IAAK,QAEH,KADA/oB,EAAMw9B,GAAShxD,EAAM+jB,EAAM1Z,EAAK3D,EAAMmpE,EAAU18C,GAAQqf,MAC3Chf,EAAI,WAAY,MAC7B,IAAIu8C,EAAQxmD,GAAaiK,EAAI,WAAWmF,OAAQ5U,GAC5CisD,EAAS33C,GAAc03C,GACvBE,EAnw3BZ,SAAuBjwE,EAAMw4B,GAG3B,IAAKx4B,EAAM,MAAO,KAalB,IAAI8gC,GAAM9gC,EAAKsK,MAAM,iCAAmC,CAAC,GAAI,KAAK,GAClE,OAAOkuB,EAAK,OAAOsI,GAAInI,MACzB,CAiv3BmBu3C,CAAcpnD,GAAUL,EAAKsnD,GAAO,GAAOz3C,GAAWxP,GAAUL,EAAKunD,GAAQ,GAAOD,IAC3FI,EAAS5mD,GAAa0mD,EAAMF,GAC5BK,EAAS/3C,GAAc83C,GAC3B38C,EAAMw6B,GAAYllC,GAAUL,EAAK0nD,GAAQ,GAAOA,EAAQzpE,EAAM4xB,GAAWxP,GAAUL,EAAK2nD,GAAQ,GAAOD,GAAS39B,EAAIhf,GACpH,MAEF,IAAK,QA30lBajd,EA40lBKwN,EAAiB8rD,EAAU18C,GAr0lBlD5c,EAAKxV,OAAO,GAq0lBVyyB,EArl2BC,CACL,QAAS,SAql2BL,MAEF,IAAK,SACHA,EAj0lBR,SAAkBxzB,EAAMuW,GAOtB,OAAIA,EAAKxV,OAAO,GAnzQT,CACL,QAAS,SAwzQb,CAozlBcsvE,CAASrwE,EAAM+jB,EAAM1Z,EAAK3D,EAAMmpE,EAAU18C,IAChD,MAEF,QACE,MAAM,IAAIxvB,MAAM,2BAA6BmsE,GAGjD18C,EAAOD,GAASK,EAGhB,IAAI88C,EAAY,GACZT,GAAaA,EAAU18C,IAAQ7N,GAAKuqD,EAAU18C,IAAQzG,SAAQ,SAAUzc,GAC1E,IAAI8/D,EAAQ,GAEZ,GAAIF,EAAU18C,GAAOljB,GAAGyoB,MAAQrL,GAAKiK,KAAM,CACzCy4C,EAAQxmD,GAAasmD,EAAU18C,GAAOljB,GAAG0oB,OAAQ5U,GACjD,IAAIy8B,EAAWoR,GAAWhpC,GAAWH,EAAKsnD,GAAO,GAAOA,EAAOrpE,GAC/D,IAAK85C,IAAaA,EAASpgD,OAAQ,OACnCmgD,GAAsB/sB,EAAKgtB,GAAU,EACvC,CAEIqvB,EAAU18C,GAAOljB,GAAGyoB,MAAQrL,GAAKC,QACnCyiD,EAAQxmD,GAAasmD,EAAU18C,GAAOljB,GAAG0oB,OAAQ5U,GACjDusD,EAAYA,EAAUxsE,OAhh3B9B,SAAyB9D,EAEvB0G,GAGA,IAAIM,EAAM,GACNisC,GAAO,EACP0N,EAAU,CAAC,EACX4vB,EAAO,EA+EX,OA9EAvwE,EAAK+B,QAAQ+nB,IAAU,SAAmB7oB,EAAGoJ,GAC3C,IAAIlD,EAEF8iB,GAAYhpB,GAEd,OAAQupB,GAASrjB,EAAE,KACjB,IAAK,QAKL,IAAK,oBAGL,IAAK,sBA0CL,IAAK,UACL,IAAK,WACL,IAAK,YACL,IAAK,YACH,MAzCF,IAAK,mBACHw5C,EAAU,CACRC,OAAQz5C,EAAEqpE,SACVpe,KAAMjrD,EAAE25B,GACR4C,IAAKv8B,EAAEu8B,IACPz8B,EAAG,GAEL,MAEF,IAAK,qBACc,MAAb05C,EAAQj8C,GAAWsC,EAAIiP,KAAK0qC,GAChC,MAEF,IAAK,SACL,IAAK,QACH4vB,EAAOlmE,EAAMpJ,EAAEb,OACf,MAEF,IAAK,UACHugD,EAAQj8C,EAAI1E,EAAKe,MAAMwvE,EAAMlmE,GAAKtI,QAAQ,QAAS,MAAMA,QAAQ,MAAO,MACxE,MAIF,IAAK,YACL,IAAK,aAoBL,IAAK,OACHkxC,GAAO,EACP,MAlBF,IAAK,cAoBL,IAAK,SACHA,GAAO,EACP,MAEF,QACE,IAAKA,GAAQvsC,EAAK+lB,IAAK,MAAM,IAAI9oB,MAAM,gBAAkBwD,EAAE,GAAK,yBAGpE,OAAOlG,CACT,IACO+F,CACT,CAw72BqCypE,CAAgB7nD,GAAWH,EAAKsnD,GAAO,GAAOrpE,IAE/E,IACI4pE,GAAaA,EAAUlwE,QAAQmgD,GAAsB/sB,EAAK88C,GAAW,EAAM5pE,EAAKg6C,QAAU,GAChG,CAAE,MAAOl+C,GACP,GAAIkE,EAAK+lB,IAAK,MAAMjqB,CACtB,CA72lBF,IAAwB+T,CA82lBxB,CAEA,SAASm6D,GAAkBzvE,GAKzB,MAAsB,KAAfA,EAAEY,OAAO,GAAYZ,EAAEF,MAAM,GAAKE,CAC3C,CAEA,SAASqS,GAAUmV,EAEjB/hB,GAUA,GALAiJ,KAEAqoD,GADAtxD,EAAOA,GAAQ,CAAC,GAIZ8hB,GAAeC,EAAK,yBAA0B,OAAO2hD,GAAU3hD,EAAK/hB,GAGxE,GAAI8hB,GAAeC,EAAK,kBAAmB,OAAO2hD,GAAU3hD,EAAK/hB,GAGjE,GAAI8hB,GAAeC,EAAK,sBAAuB,CAC7C,GAAyB,oBAAd3lB,WAA2B,MAAM,IAAIa,MAAM,oDAGpD,GAAI8kB,EAAI5U,UAAW,OAAOu7D,GAAkB3mD,GAE5C,IAAIkoD,EAAOj/D,GAAImS,MAAMY,UAKrB,OAHAuE,GAAWP,GAAKiE,SAAQ,SAAUlqB,GAChCymB,GAAa0nD,EAAMnuE,EAAGumB,GAAUN,EAAKjmB,GACvC,IACO4sE,GAAkBuB,EAI7B,CAEA,IAAKnoD,GAAeC,EAAK,uBAAwB,CAC/C,GAAID,GAAeC,EAAK,gBAAiB,MAAM,IAAI9kB,MAAM,+BACzD,GAAI6kB,GAAeC,EAAK,aAAc,MAAM,IAAI9kB,MAAM,+BACtD,MAAM,IAAIA,MAAM,uBAClB,CAEA,IAKIyvB,EAAQw9C,EALRzD,EAAUnkD,GAAWP,GACrBooD,EAn5vCN,SAAkB7wE,GAGhB,IAAIuX,EA/BG,CACLu5D,UAAW,GACX19C,OAAQ,GACR29C,OAAQ,GACRC,QAAS,GACTC,OAAQ,GACRz4C,KAAM,GACNovB,KAAM,GACNpH,SAAU,GACV0wB,iBAAkB,GAClBC,MAAO,GACPC,UAAW,GACXC,SAAU,GACVC,UAAW,GACXh1B,OAAQ,GACRC,OAAQ,GACRg1B,WAAY,GACZC,IAAK,GACLC,SAAU,GACVpkC,SAAU,GACVqT,OAAQ,GACRgxB,KAAM,GACNjiB,MAAO,IAUT,IAAKzvD,IAASA,EAAKsK,MAAO,OAAOiN,EACjC,IAAIo6D,EAAQ,CAAC,EAqBb,IApBC3xE,EAAKsK,MAAMwf,KAAa,IAAI4C,SAAQ,SAAUzrB,GAC7C,IAAIkG,EAAI8iB,GAAYhpB,GAEpB,OAAQkG,EAAE,GAAGpF,QAAQgoB,GAAS,MAC5B,IAAK,QACH,MAEF,IAAK,SACHxS,EAAGk4C,MAAQtoD,EAAE,SAAWA,EAAE,GAAGmD,MAAM,YAAc,CAAC,GAAI,KAAK,IAC3D,MAEF,IAAK,WACHqnE,EAAMxqE,EAAEyqE,WAAazqE,EAAE0qE,YACvB,MAEF,IAAK,iBACgCniE,IAA/B6H,EAAGqf,GAAQzvB,EAAE0qE,eAA6Bt6D,EAAGqf,GAAQzvB,EAAE0qE,cAAc57D,KAAK9O,EAAE2qE,UAGtF,IACIv6D,EAAGk4C,QAAUziC,GAAMI,GAAI,MAAM,IAAIzpB,MAAM,sBAAwB4T,EAAGk4C,OAMtE,OALAl4C,EAAGw6D,UAAYx6D,EAAGg6D,WAAWnxE,OAAS,EAAImX,EAAGg6D,WAAW,GAAK,GAC7Dh6D,EAAGk6C,IAAMl6C,EAAGqwC,KAAKxnD,OAAS,EAAImX,EAAGqwC,KAAK,GAAK,GAC3CrwC,EAAG68B,MAAQ78B,EAAGglC,OAAOn8C,OAAS,EAAImX,EAAGglC,OAAO,GAAK,GACjDhlC,EAAGq3C,SAAW+iB,SACPp6D,EAAGg6D,WACHh6D,CACT,CAk3vCYy6D,CAASlpD,GAAUL,EAAK,wBAG9BwpD,GAAO,EAQX,GAL6B,IAAzBpB,EAAIC,UAAU1wE,QAEZwoB,GAAWH,EADfmoD,EAAU,mBACmB,IAAOC,EAAIC,UAAU76D,KAAK26D,GAG5B,IAAzBC,EAAIC,UAAU1wE,OAAc,CAE9B,IAAKwoB,GAAWH,EADhBmoD,EAAU,mBACoB,GAAO,MAAM,IAAIjtE,MAAM,2BACrDktE,EAAIC,UAAU76D,KAAK26D,GACnBqB,GAAO,CACT,CAEkC,OAA9BpB,EAAIC,UAAU,GAAG/vE,OAAO,KAAakxE,GAAO,GAChD,IAAI31B,EAAS,CAAC,EAGVC,EAAS,CAAC,EAId,IAAK71C,EAAKkxD,aAAelxD,EAAKmxD,UAAW,CAEvC,GADAjQ,GAAO,GACHipB,EAAIpf,IAAK,IACX7J,GAAOyJ,GAAUzoC,GAAWH,EAAKioD,GAAkBG,EAAIpf,MAAOof,EAAIpf,IAAK/qD,EACzE,CAAE,MAAOlE,GACP,GAAIkE,EAAK+lB,IAAK,MAAMjqB,CACtB,CACIkE,EAAKq9B,YAAc8sC,EAAIv0B,OAAOl8C,SAAQk8C,EA15lB9C,SAAqBt8C,EAEnBuW,EAEA7P,GACA,OAAO+4C,GAAgBz/C,EAAM0G,EAC/B,CAo5lBuDwrE,CAAYppD,GAAUL,EAAKooD,EAAIv0B,OAAO,GAAGv6C,QAAQ,MAAO,KAAK,IAAS,GAAI8uE,EAAIv0B,OAAO,GAAI51C,IACxImqE,EAAIz8B,QAAOmI,EAAS4U,GAAUvoC,GAAWH,EAAKioD,GAAkBG,EAAIz8B,QAASy8B,EAAIz8B,MAAOkI,EAAQ51C,GACtG,CAIAmqE,EAAIM,MAAM9tE,KAAI,SAAU8uE,GACtB,IACa75C,GAAWxP,GAAUL,EAAK4P,GAAcq4C,GAAkByB,KAASA,GAC9E,OAAOzf,GAAY9pC,GAAWH,EAAKioD,GAAkByB,IAAQ35C,EAAM25C,EAAMzrE,EAC3E,CAAE,MAAOlE,GAAI,CACf,IACA,IAAIgwC,EAAKgd,GAAS5mC,GAAWH,EAAKioD,GAAkBG,EAAIC,UAAU,KAAMD,EAAIC,UAAU,GAAIpqE,GACtF4yB,EAAQ,CAAC,EACT84C,EAAW,GAEXvB,EAAIO,UAAUhxE,UAChBgyE,EAAWxpD,GAAWH,EAAKioD,GAAkBG,EAAIO,UAAU,KAAK,MAClD93C,EAAQL,GAAiBm5C,IAEX,IAAxBvB,EAAIQ,SAASjxE,SACfgyE,EAAWxpD,GAAWH,EAAKioD,GAAkBG,EAAIQ,SAAS,KAAK,KAn+uCrE,SAAyBrxE,EAAM8R,EAAGpL,GAChC,IAAIF,EAAI,CAAC,EACJsL,IAAGA,EAAI,CAAC,GACb9R,EAAO4rB,GAAS5rB,GAChBmtB,GAAUT,SAAQ,SAAU1e,GAC1B,IAAI6oC,GAAO72C,EAAKsK,MAAMuhB,GAAS7d,EAAE,MAAQ,IAAI,GAE7C,OAAQA,EAAE,IACR,IAAK,SACC6oC,IAAK/kC,EAAE9D,EAAE,IAAM2c,GAAYksB,IAC/B,MAEF,IAAK,OACH/kC,EAAE9D,EAAE,IAAc,SAAR6oC,EACV,MAEF,IAAK,MACH,IAAI3d,EAAMl5B,EAAKsK,MAAM,IAAIyhB,OAAO,IAAM/d,EAAE,GAAK,uBAA0BA,EAAE,GAAK,MAC1EkrB,GAAOA,EAAI94B,OAAS,IAAGoG,EAAEwH,EAAE,IAAMkrB,EAAI,IAG/C,IACI1yB,EAAE23D,cAAgB33D,EAAE43D,eAAejlC,GAAiB3yB,EAAE23D,aAAc33D,EAAE43D,cAAetsD,EAAGpL,EAE9F,CA48uCoB2rE,CAAgBD,EAAU94C,EAAO5yB,IAInD,IAAI4qE,EAAY,CAAC,EAEZ5qE,EAAKkxD,aAAclxD,EAAKmxD,WACE,IAAzBgZ,EAAIS,UAAUlxE,SAChBgyE,EAAWtpD,GAAUL,EAAKioD,GAAkBG,EAAIS,UAAU,KAAK,MACjDA,EA15uCpB,SAA0BtxE,EAExB0G,GACA,IAAIoL,EAAI,CAAC,EACLyE,EAAO,GACPnP,EAAIpH,EAAKsK,MAAMwvB,IACnB,GAAI1yB,EAAG,IAAK,IAAIlH,EAAI,EAAGA,GAAKkH,EAAEhH,SAAUF,EAAG,CACzC,IAAIe,EAAImG,EAAElH,GACNiH,EAAI8iB,GAAYhpB,GAEpB,OAAQkG,EAAE,IACR,IAAK,QAGL,IAAK,cACH,MAEF,IAAK,YACHoP,EAAOoU,GAAYxjB,EAAEoP,MACrB,MAEF,IAAK,cACHA,EAAO,KACP,MAEF,QACE,GAA0B,IAAtBtV,EAAErB,QAAQ,QAAe,CAC3B,IAAI0yE,EAAOrxE,EAAEmC,MAAM,KACfsG,EAAO4oE,EAAK,GAAGvxE,MAAM,GACrBkiB,EAAOqvD,EAAK,GAGhB,OAAQ5oE,GACN,IAAK,QACL,IAAK,OACL,IAAK,SA4BL,IAAK,KACL,IAAK,QACHoI,EAAEyE,GAAQoU,GAAY1H,GACtB,MA3BF,IAAK,OACHnR,EAAEyE,GAAQ6U,GAAanI,GACvB,MAEF,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,OACHnR,EAAEyE,GAAQjK,SAAS2W,EAAM,IACzB,MAEF,IAAK,KACL,IAAK,KACL,IAAK,UACHnR,EAAEyE,GAAQzI,WAAWmV,GACrB,MAEF,IAAK,WACL,IAAK,OACHnR,EAAEyE,GAAQmQ,GAAUzD,GACpB,MAOF,QACE,GAAsB,KAAlBvZ,EAAK3I,OAAO,GAAW,MACvB2F,EAAK+lB,KAA0B,qBAAZrL,SAAyBA,QAAQmxD,KAAK,aAActxE,EAAGyI,EAAM4oE,GAE1F,MAAO,GAAsB,OAAlBrxE,EAAEF,MAAM,EAAG,SAEf,GAAI2F,EAAK+lB,IAAK,MAAM,IAAI9oB,MAAM1C,GAG3C,CACA,OAAO6Q,CACT,CA20uCgC0gE,CAAiBJ,EAAU1rE,IAIzD,IAAIM,EAAM,CAAC,EAIX,IAAIN,EAAKkxD,YAAclxD,EAAKmxD,aACtBrlB,EAAGlf,OAAQF,EAASof,EAAGlf,OAAOjwB,KAAI,SAAepC,GACnD,OAAOA,EAAEsV,IACX,IAAY+iB,EAAMG,YAAcH,EAAMjG,WAAWjzB,OAAS,IAAGgzB,EAASkG,EAAMjG,YAExE3sB,EAAKmxD,YACP7wD,EAAIo0B,MAAQ9B,EACZtyB,EAAI0sD,UAAY4d,GAGd5qE,EAAKkxD,YAAgC,qBAAXxkC,IAAwBpsB,EAAIqsB,WAAaD,GACnE1sB,EAAKkxD,WAAa5wD,EAAIqsB,WAAa3sB,EAAKmxD,WAAW,OAAO7wD,EAGhEosB,EAAS,CAAC,EACV,IAAIq/C,EAAO,CAAC,EACR/rE,EAAKgsE,UAAY7B,EAAIkB,YAAWU,EAAOlgB,GAAS3pC,GAAWH,EAAKioD,GAAkBG,EAAIkB,YAAalB,EAAIkB,YAC3G,IAIIhuD,EAAM6rD,EAJN1vE,EAAI,EACJ2vE,EAAY,CAAC,EAKX8C,EAAWngC,EAAGlf,OAClBgG,EAAMG,WAAak5C,EAASvyE,OAC5Bk5B,EAAMjG,WAAa,GAEnB,IAAK,IAAInpB,EAAI,EAAGA,GAAKyoE,EAASvyE,SAAU8J,EACtCovB,EAAMjG,WAAWnpB,GAAKyoE,EAASzoE,GAAGqM,KAGtC,IAAIq8D,EAAQX,EAAO,MAAQ,MACvBY,EAAUhC,EAAIC,UAAU,GAAGtjE,YAAY,KACvCslE,GAAcjC,EAAIC,UAAU,GAAG/vE,MAAM,EAAG8xE,EAAU,GAAK,SAAWhC,EAAIC,UAAU,GAAG/vE,MAAM8xE,EAAU,GAAK,SAAS9wE,QAAQ,MAAO,IAC/HymB,GAAeC,EAAKqqD,KAAaA,EAAa,qBAAuBF,EAAQ,SAClF,IAAIG,EAASz6C,GAAWxP,GAAUL,EAAKqqD,GAAY,GAAOA,EAAW/wE,QAAQ,UAAW,SAEnF8uE,EAAIxjC,UAAY,IAAIjtC,QAAU,IAEjCsG,EAAK+mD,OAASmF,GAAahqC,GAAWH,EAAKioD,GAAkBG,EAAIxjC,SAAS,KAAMwjC,EAAIxjC,SAAS,GAAI3mC,KAG9FmqE,EAAInwB,QAAU,IAAItgD,QAAU,IAC/BsG,EAAKg6C,OAvk3BT,SAA0B1gD,EAExB0G,GACA,IAAIM,EAAM,GACNisC,GAAO,EAsDX,OArDAjzC,EAAK+B,QAAQ+nB,IAAU,SAAmB7oB,GACxC,IAAIkG,EAEF8iB,GAAYhpB,GAEd,OAAQupB,GAASrjB,EAAE,KACjB,IAAK,QAKL,IAAK,cAGL,IAAK,gBAYL,IAAK,YAKL,IAAK,UACL,IAAK,WACL,IAAK,YACL,IAAK,YACH,MAhBF,IAAK,UACHH,EAAIiP,KAAK,CACPM,KAAMpP,EAAE6rE,YACRlyC,GAAI35B,EAAE25B,KAER,MAeF,IAAK,OACHmS,GAAO,EACP,MAEF,IAAK,SACHA,GAAO,EACP,MAEF,QACE,IAAKA,GAAQvsC,EAAK+lB,IAAK,MAAM,IAAI9oB,MAAM,gBAAkBwD,EAAE,GAAK,yBAGpE,OAAOlG,CACT,IACO+F,CACT,CA4g3BkBisE,CAAiBrqD,GAAWH,EAAKioD,GAAkBG,EAAInwB,OAAO,KAAMh6C,IAGhFqsE,IAAQA,EA3Pd,SAA2BA,EAAQ3/C,GACjC,IAAK2/C,EAAQ,OAAO,EAEpB,IACEA,EAAS3/C,EAAO/vB,KAAI,SAAcyF,GAEhC,OADKA,EAAEg4B,KAAIh4B,EAAEg4B,GAAKh4B,EAAE83D,UACb,CAAC93D,EAAEyN,KAAMw8D,EAAO,OAAOjqE,EAAEg4B,IAAInI,QAlBlB1oB,EAkByC8iE,EAAO,OAAOjqE,EAAEg4B,IAAIpI,KAb/ErL,GAAKwK,GAAGj4B,QAAQqQ,IAAM,EAAU,QAChCod,GAAKuK,IAAM3nB,GAAKod,GAAKuK,GAAW,QAChCvK,GAAKyK,IAAM7nB,GAAKod,GAAKyK,GAAW,SAChCzK,GAAK0K,IAAM9nB,GAAKod,GAAK0K,GAAW,QAC7B9nB,GAAKA,EAAE7P,OAAS6P,EAAI,UAT7B,IAAwBA,CAmBpB,GACF,CAAE,MAAOzN,GACP,OAAO,IACT,CAEA,OAAQuwE,GAA4B,IAAlBA,EAAO3yE,OAAsB2yE,EAAP,IAC1C,CA8OuBG,CAAkBH,EAAQvgC,EAAGlf,SAGlD,IAAI6/C,EAAQvqD,GAAWH,EAAK,2BAA2B,GAAQ,EAAI,EAEnE2qD,EAAQ,IAAKlzE,EAAI,EAAGA,GAAKo5B,EAAMG,aAAcv5B,EAAG,CAC9C,IAAI4vE,EAAQ,QAaZ,GAXIiD,GAAUA,EAAO7yE,IACnB6jB,EAAO,MAAQgvD,EAAO7yE,GAAG,GAAG6B,QAAQ,YAAa,IAC5CymB,GAAeC,EAAK1E,KAAOA,EAAOgvD,EAAO7yE,GAAG,IAC5CsoB,GAAeC,EAAK1E,KAAOA,EAAO+uD,EAAW/wE,QAAQ,aAAc,IAAMgxE,EAAO7yE,GAAG,IACxF4vE,EAAQiD,EAAO7yE,GAAG,IAGlB6jB,GADAA,EAAO,uBAAyB7jB,EAAI,EAAIizE,GAAS,IAAMP,GAC3C7wE,QAAQ,WAAY,UAGlC6tE,EAAW7rD,EAAKhiB,QAAQ,qBAAsB,oBAC1C2E,GAAuB,MAAfA,EAAK0sB,OAAgB,cAAe1sB,EAAK0sB,QACnD,IAAK,SACH,GAAIlzB,GAAKwG,EAAK0sB,OAAQ,SAASggD,EAC/B,MAEF,IAAK,SACH,GAAI95C,EAAMjG,WAAWnzB,GAAG2O,eAAiBnI,EAAK0sB,OAAOvkB,cAAe,SAASukE,EAC7E,MAEF,QACE,GAAIrwE,MAAMQ,SAAWR,MAAMQ,QAAQmD,EAAK0sB,QAAS,CAG/C,IAFA,IAAIigD,GAAU,EAELC,EAAM,EAAGA,GAAO5sE,EAAK0sB,OAAOhzB,SAAUkzE,EACd,iBAApB5sE,EAAK0sB,OAAOkgD,IAAoB5sE,EAAK0sB,OAAOkgD,IAAQpzE,IAAGmzE,EAAU,GAC7C,iBAApB3sE,EAAK0sB,OAAOkgD,IAAoB5sE,EAAK0sB,OAAOkgD,GAAKzkE,eAAiByqB,EAAMjG,WAAWnzB,GAAG2O,gBAAewkE,EAAU,GAG5H,IAAKA,EAAS,SAASD,CACzB,EAGJzD,GAAiBlnD,EAAK1E,EAAM6rD,EAAUt2C,EAAMjG,WAAWnzB,GAAIA,EAAG2vE,EAAWz8C,EAAQ08C,EAAOppE,EAAM8rC,EAAI8J,EAAQC,EAC5G,CAqCA,OAnCAv1C,EAAM,CACJyyD,UAAWoX,EACX7a,SAAUxjB,EACVpX,MAAO9B,EACPo6B,UAAW4d,EACXiC,KAAMd,EACNn/C,OAAQF,EACRC,WAAYiG,EAAMjG,WAClB4pC,QAASrV,GACT4rB,OAAQj3B,EACRqD,OAAQtD,EACRwb,IAAK5wC,GAAI1hB,IAKPkB,GAAQA,EAAK43D,YACX71C,EAAI/R,OACN1P,EAAIse,KAAO6nD,EACXnmE,EAAI0P,MAAQ+R,EAAI/R,QAEhB1P,EAAIse,KAAO,GACXte,EAAI0P,MAAQ,CAAC,EACb+R,EAAI3U,UAAU4Y,SAAQ,SAAU5a,EAAGzH,GACjCyH,EAAIA,EAAE/P,QAAQ,kBAAmB,IACjCiF,EAAIse,KAAKrP,KAAKnE,GACd9K,EAAI0P,MAAM5E,GAAK2W,EAAI5U,UAAUxJ,EAC/B,MAIA3D,GAAQA,EAAKk3D,UACXiT,EAAIW,IAAIpxE,OAAS,EAAG4G,EAAI62D,OAASj1C,GAAWH,EAAKioD,GAAkBG,EAAIW,IAAI,KAAK,GAAeX,EAAIjiB,UAAYiiB,EAAIjiB,SAAS6kB,MAAQ3yB,KAAQ95C,EAAI62D,OAASj1C,GAAWH,EAAK,qBAAqB,KAG7LzhB,CACT,CAIA,SAAS0sE,GAAch7D,EAAKmB,GAK1B,IAAInT,EAAOmT,GAAS,CAAC,EACjB7L,EAAI,WACJhO,EAAO0R,GAAImH,KAAKH,EAAK1K,GAEzB,IAGE,GAFAA,EAAI,yBACJhO,EAAO0R,GAAImH,KAAKH,EAAK1K,MACPhO,EAAK2X,QAAS,MAAM,IAAIhU,MAAM,mCAAqCqK,GAQjF,GA3u+BJ,SAAoCwE,GAClC,IAAIvS,EAAI,CAAC,EACTA,EAAE6gC,GAAKtuB,EAAKG,WAAW,EAAG,QAC1B1S,EAAEiX,EAAI+9B,GAAoBziC,EAAM,GAChCvS,EAAEu1C,EAAIP,GAAoBziC,EAAM,GAChCvS,EAAEw1C,EAAIR,GAAoBziC,EAAM,EAElC,CA+t+BImhE,CAA2B3zE,EAAK2X,SAGhC3J,EAAI,8BACJhO,EAAO0R,GAAImH,KAAKH,EAAK1K,MACPhO,EAAK2X,QAAS,MAAM,IAAIhU,MAAM,mCAAqCqK,GACjF,IAAI4lE,EAxs+BR,SAA4BphE,GAC1B,IAAIvS,EAAI,GACRuS,EAAKrE,GAAK,EAIV,IAFA,IAAIoK,EAAM/F,EAAKG,WAAW,GAEnB4F,KAAQ,GACbtY,EAAEgW,KAAKm/B,GAAwB5iC,IAGjC,OAAOvS,CACT,CA6r+Bc4zE,CAAmB7zE,EAAK2X,SAClC,GAAmB,IAAfi8D,EAAIxzE,QAAwC,IAAxBwzE,EAAI,GAAGv+B,MAAMj1C,QAAsC,IAAtBwzE,EAAI,GAAGv+B,MAAM,GAAG3wC,GAA2B,8BAAhBkvE,EAAI,GAAGr9D,MAA8D,qBAAtBq9D,EAAI,GAAGv+B,MAAM,GAAG7wC,EAA0B,MAAM,IAAIb,MAAM,+BAAiCqK,GAK1N,GAFAA,EAAI,yDACJhO,EAAO0R,GAAImH,KAAKH,EAAK1K,MACPhO,EAAK2X,QAAS,MAAM,IAAIhU,MAAM,mCAAqCqK,GACjF,IAAI8lE,EAhs+BR,SAAmCthE,GAGjC,IAAIvS,EAEF,GACFuS,EAAKrE,GAAK,EAIV,IAFA,IAAIoK,EAAM/F,EAAKG,WAAW,GAEnB4F,KAAQ,GACbtY,EAAEgW,KAAKzD,EAAKG,WAAW,EAAG,SAG5B,OAAO1S,CACT,CAir+Be8zE,CAA0B/zE,EAAK2X,SAC1C,GAAmB,GAAfm8D,EAAK1zE,QAA0B,6BAAX0zE,EAAK,GAAmC,MAAM,IAAInwE,MAAM,+BAAiCqK,GAKjH,GAFAA,EAAI,kEACJhO,EAAO0R,GAAImH,KAAKH,EAAK1K,MACPhO,EAAK2X,QAAS,MAAM,IAAIhU,MAAM,mCAAqCqK,GAGjFsnC,GAAct1C,EAAK2X,QACrB,CAAE,MAAOnV,GAAI,CAIb,GAFAwL,EAAI,oBACJhO,EAAO0R,GAAImH,KAAKH,EAAK1K,MACPhO,EAAK2X,QAAS,MAAM,IAAIhU,MAAM,mCAAqCqK,GACjF,IAAIgmE,EAjm+BN,SAA8BxhE,GAC5B,IAAI49B,EAAO6E,GAAoBziC,GAE/B,OAAQ49B,EAAK+E,OACX,KAAK,EACH,MAAO,CAAC/E,EAAK+E,MAAOsB,GAAiBjkC,IAEvC,KAAK,EACH,MAAO,CAAC49B,EAAK+E,MAAOuB,MAEtB,KAAK,EACH,MAAO,CAACtG,EAAK+E,MAAOwB,GAAiBnkC,IAGzC,MAAM,IAAI7O,MAAM,iDAAmDysC,EAAK+E,MAC1E,CAkl+Bc8+B,CAAqBj0E,EAAK2X,SAKtC,GAFA3J,EAAI,sBACJhO,EAAO0R,GAAImH,KAAKH,EAAK1K,MACPhO,EAAK2X,QAAS,MAAM,IAAIhU,MAAM,mCAAqCqK,GAKjF,GAAgB,GAAZgmE,EAAM,IAAuC,qBAAlBE,cAA+B,OAAOA,cAAcF,EAAM,GAAIh0E,EAAK2X,QAASjR,EAAKoxC,UAAY,GAAIpxC,GAKhI,GAAgB,GAAZstE,EAAM,IAAuC,qBAAlBG,cAA+B,OAAOA,cAAcH,EAAM,GAAIh0E,EAAK2X,QAASjR,EAAKoxC,UAAY,GAAIpxC,GAChI,MAAM,IAAI/C,MAAM,6BAClB,CA6XA,SAAS8rC,GAAUzhC,EAEjB/N,GAKA,IAAIgB,EAAI,GAER,QAAShB,GAAK,CAAC,GAAGyJ,MAAQ,UACxB,IAAK,SAWL,IAAK,QACH,MAAO,CAACsE,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,IATtD,IAAK,SACH/M,EAAIa,EAAckM,EAAEjN,MAAM,EAAG,KAC7B,MAEF,IAAK,SACHE,EAAI+M,EACJ,MAKF,QACE,MAAM,IAAIrK,MAAM,sBAAwB1D,GAAKA,EAAEyJ,MAAQ,cAG3D,MAAO,CAACzI,EAAEZ,WAAW,GAAIY,EAAEZ,WAAW,GAAIY,EAAEZ,WAAW,GAAIY,EAAEZ,WAAW,GAAIY,EAAEZ,WAAW,GAAIY,EAAEZ,WAAW,GAAIY,EAAEZ,WAAW,GAAIY,EAAEZ,WAAW,GAC9I,CA4BA,SAAS+zE,GAAep0E,EAEtBC,GAKA,IAAIC,EAAI,EAERm0E,EAAM,KAAOn0E,EAAIF,EAAKI,QACpB,OAAQJ,EAAKK,WAAWH,IACtB,KAAK,GACL,KAAK,GACL,KAAK,KACDA,EACF,MAEF,KAAK,GACH,OAAO63D,GAAW/3D,EAAKe,MAAMb,GAAID,GAEnC,QACE,MAAMo0E,EAIZ,OAAOpmC,GAAIrI,YAAY5lC,EAAMC,EAC/B,CA4DA,SAASq0E,GAASt0E,EAAMyE,EAAGxE,EAAGkL,GAC5B,OAAIA,GACFlL,EAAEyJ,KAAO,SACFukC,GAAIrI,YAAY5lC,EAAMC,IAGxBguC,GAAIrI,YAAYnhC,EAAGxE,EAC5B,CAEA,SAASs0E,GAASv0E,EAEhB0G,GAKA5G,IACA,IAAIG,EAAIyG,GAAQ,CAAC,EACjB,GAA2B,qBAAhBhD,aAA+B1D,aAAgB0D,YAAa,OAAO6wE,GAAS,IAAIzxE,WAAW9C,KAAQC,EAAIinB,GAAIjnB,IAAMyJ,KAAO,QAASzJ,IAClH,qBAAf6C,YAA8B9C,aAAgB8C,aAAe7C,EAAEyJ,OAAMzJ,EAAEyJ,KAAuB,qBAAT8qE,KAAuB,SAAW,SAClI,IACIvkE,EADAxL,EAAIzE,EAEJmL,GAAM,EAwBV,GAtBIlL,EAAE8jC,aACJ9jC,EAAEkvC,QAAS,EACXlvC,EAAEk0B,YAAa,GAGjB0zB,GAAW,CAAC,EACR5nD,EAAEsO,SAAQs5C,GAASt5C,OAAStO,EAAEsO,QAC7BtO,EAAEyJ,OAAMzJ,EAAEyJ,KAAO1H,GAAWC,OAAO8B,SAAS/D,GAAQ,SAAW,UAEtD,QAAVC,EAAEyJ,OACJzJ,EAAEyJ,KAAO1H,EAAU,SAAW,SAC9ByC,EAl65CJ,SAAqBsf,GAGnB,GAAmB,qBAARsB,GAAqB,OAAOA,GAAIjB,aAAaL,GACxD,GAAoB,qBAATywD,KAAsB,OAAOA,KAAKpwD,aAAaL,GAE1D,GAAiB,qBAAN0wD,GAAqC,qBAATC,MAA0C,qBAAXC,OAAwB,IAG5F,IAAIC,EAASF,KAAK3wD,GAClB6wD,EAAOC,KAAK,KACZD,EAAO91C,SAAW,SAClB,IAAI9+B,EAAO40E,EAAOzwD,OAElB,OADAywD,EAAOE,QACA90E,CACT,CAAE,MAAOwC,GACP,IAAKA,EAAE2iB,UAAY3iB,EAAE2iB,QAAQ7a,MAAM,YAAa,MAAM9H,CACxD,CACA,MAAM,IAAImB,MAAM,sBAAwBogB,EAC1C,CA+45CQgxD,CAAY/0E,GACU,qBAAf8C,YAA+Bd,IAAS/B,EAAEyJ,KAAO,UAGhD,UAAVzJ,EAAEyJ,OACJyB,GAAM,EACNlL,EAAEyJ,KAAO,SACTzJ,EAAEmlC,SAAW,MACb3gC,EAnDJ,SAAiBzE,GAKf,OAAQA,EAAKsK,MAAM,gBAAyByc,GAAU/mB,GAAjBA,CACvC,CA6CQg1E,CAAQh1E,IAGA,SAAVC,EAAEyJ,MAAyC,qBAAf5G,YAA8B9C,aAAgB8C,YAAqC,qBAAhBY,YAA6B,CAE9H,IAAIuxE,EAAK,IAAIvxE,YAAY,GACrBwxE,EAAK,IAAIpyE,WAAWmyE,GAGxB,GAFAC,EAAGC,IAAM,OAEJD,EAAGC,IAGN,OAFAl1E,EAAIinB,GAAIjnB,IACNyJ,KAAO,QACF6qE,GAAS9wE,EAAKgB,GAAIxE,EAE7B,CAEA,QAASgQ,EAAIw/B,GAAUhrC,EAAGxE,IAAI,IAC5B,KAAK,IACH,GAAa,MAATgQ,EAAE,IAAwB,KAATA,EAAE,IAAwB,MAATA,EAAE,IAAwB,MAATA,EAAE,IAAwB,MAATA,EAAE,IAAwB,KAATA,EAAE,IAAwB,MAATA,EAAE,GAAa,OA7K/H,SAAkByI,EAEhBhS,GAKA,OAAIgL,GAAImH,KAAKH,EAAK,oBAA4Bg7D,GAAch7D,EAAKhS,GAC1D+2D,GAAa/kD,EAAKhS,EAC3B,CAoKsI0uE,CAAS1jE,GAAIyS,KAAK1f,EAAGxE,GAAIA,GACzJ,MAEF,KAAK,EACH,GAAIgQ,EAAE,IAAM,EAAM,OAAOwtD,GAAah5D,EAAGxE,GACzC,MAEF,KAAK,GACH,OAAO83D,GAAWtzD,EAAGxE,GAEvB,KAAK,GACH,GAAa,KAATgQ,EAAE,IAAwB,KAATA,EAAE,IAAwB,IAATA,EAAE,GAAa,MAAM,IAAItM,MAAM,wCACrE,GAAa,KAATsM,EAAE,GAAa,OA5olCzB,SAAoBxL,EAAGiC,GACrB,IAAIzG,EAAIyG,GAAQ,CAAC,EACb2uE,IAAYp1E,EAAEwsB,IAClBxsB,EAAEwsB,KAAM,EAER,IACE,IAAIzlB,EAAMggC,GAAKpB,YAAYnhC,EAAGxE,GAE9B,OADAA,EAAEwsB,IAAM4oD,EACDruE,CACT,CAAE,MAAOxE,GAEP,GADAvC,EAAEwsB,IAAM4oD,GACH7yE,EAAE2iB,QAAQ7a,MAAM,uBAAyB+qE,EAAS,MAAM7yE,EAC7D,OAAOyrC,GAAIrI,YAAYnhC,EAAGiC,EAC5B,CACF,CA8nlCgC4uE,CAAW7wE,EAAGxE,GACxC,MAEF,KAAK,GACH,GAAa,KAATgQ,EAAE,IAAwB,KAATA,EAAE,IAAwB,KAATA,EAAE,GAAa,OAAOk9B,GAAIvH,YAAYnhC,EAAGxE,GAC/E,MAEF,KAAK,GACH,OAAgB,KAATgQ,EAAE,IAAeA,EAAE,GAAK,GAAQA,EAAE,GAAK,EAtLpD,SAAkBjQ,EAEhB0G,GAKA,IACIjC,EAAIzE,EACJC,EAAIyG,GAAQ,CAAC,EAGjB,OAFKzG,EAAEyJ,OAAMzJ,EAAEyJ,KAAO1H,GAAWC,OAAO8B,SAAS/D,GAAQ,SAAW,UAE7DsT,GADDgW,GAAS7kB,EAAGxE,GACIA,EACxB,CAyK2Ds1E,CAAS9wE,EAAGxE,GAAKq0E,GAASt0E,EAAMyE,EAAGxE,EAAGkL,GAE7F,KAAK,IACH,OAAgB,KAAT8E,EAAE,GAAc8nD,GAAWtzD,EAAGxE,GAAKq0E,GAASt0E,EAAMyE,EAAGxE,EAAGkL,GAEjE,KAAK,IACH,GAAa,MAAT8E,EAAE,GACJ,OA9GR,SAAoBjQ,EAElBC,GAKA,IAAIwE,EAAIzE,EAIR,MAHc,UAAVC,EAAEyJ,OAAkBjF,EAAI3C,EAAc2C,IAC1CA,EAAI/D,EAASmjB,MAAMoD,OAAO,KAAMxiB,EAAE1D,MAAM,GAAI,OAC5Cd,EAAEyJ,KAAO,SACF0qE,GAAe3vE,EAAGxE,EAC3B,CAkGeu1E,CAAW/wE,EAAGxE,GAChB,GAAa,IAATgQ,EAAE,IAAwB,IAATA,EAAE,IAAwB,IAATA,EAAE,GAAa,OAAOy/B,GAAI9J,YAAYnhC,EAAGxE,GAEtF,MAEF,KAAK,EACH,GAAa,IAATgQ,EAAE,GAAa,CACjB,GAAIA,EAAE,IAAM,GAAiB,IAATA,EAAE,GAAa,OAAOy/B,GAAI9J,YAAYnhC,EAAGxE,GAC7D,GAAa,IAATgQ,EAAE,KAAyB,IAATA,EAAE,IAAwB,IAATA,EAAE,IAAc,OAAOy/B,GAAI9J,YAAYnhC,EAAGxE,EACnF,CAEA,MAEF,KAAK,EACL,KAAK,IACL,KAAK,IACL,KAAK,IACH,OAAOukC,GAAIoB,YAAYnhC,EAAGxE,GAE5B,KAAK,IACH,GAAa,KAATgQ,EAAE,IAAwB,MAATA,EAAE,IAAwB,MAATA,EAAE,GAAa,OAAOupC,GAAI5T,YAAYnhC,EAAGxE,GAC/E,MAEF,KAAK,GACL,KAAK,GACL,KAAK,GACH,OA5KN,SAA4BD,EAE1BC,GAKA,IAAIkL,EAAM,GACNoxB,EAAQkT,GAAUzvC,EAAMC,GAE5B,OAAQA,EAAEyJ,MACR,IAAK,SACHyB,EAAMrJ,EAAc9B,GACpB,MAEF,IAAK,SACHmL,EAAMnL,EACN,MAEF,IAAK,SACHmL,EAAMnL,EAAKuJ,SAAS,UACpB,MAEF,IAAK,QACH4B,EAAMyb,GAAO5mB,GACb,MAEF,QACE,MAAM,IAAI2D,MAAM,qBAAuB1D,EAAEyJ,MAK7C,OAFgB,KAAZ6yB,EAAM,IAA0B,KAAZA,EAAM,IAA0B,KAAZA,EAAM,KAAYpxB,EAAMygB,GAASzgB,IAC7ElL,EAAEyJ,KAAO,SACF0qE,GAAejpE,EAAKlL,EAC7B,CA0Iaw1E,CAAmBhxE,EAAGxE,GAE/B,KAAK,IACH,GAAa,KAATgQ,EAAE,IAAwB,KAATA,EAAE,IAAwB,KAATA,EAAE,GAAa,MAAM,IAAItM,MAAM,uCAIzE,OAAI4gC,GAAuB3kC,QAAQqQ,EAAE,KAAO,GAAKA,EAAE,IAAM,IAAMA,EAAE,IAAM,GAAWu0B,GAAIoB,YAAYnhC,EAAGxE,GAC9Fq0E,GAASt0E,EAAMyE,EAAGxE,EAAGkL,EAC9B,CAgdA,SAASuqE,GAAcviD,EAErBnnB,EAEAkL,EAEAivB,EAEAlxB,EAEAsgC,EAEA9hB,EAEAxzB,GAKA,IAAIsM,EAAKylB,GAAW9a,GAChBy+D,EAAS11E,EAAE01E,OACXz9D,EAAMjY,EAAEiY,MAAQmB,OAAOoM,UAAUC,eAAevhB,KAAKlE,EAAG,OACxD21E,GAAU,EACVniE,EAES,IAAXwB,EAAe,GAAK,CAAC,EAEvB,GAAe,IAAXA,EACF,GAAIoE,OAAOw8D,eAAgB,IACzBx8D,OAAOw8D,eAAepiE,EAAK,aAAc,CACvC4X,MAAOnU,EACP4+D,YAAY,GAEhB,CAAE,MAAOtzE,GACPiR,EAAIsiE,WAAa7+D,CACnB,MAAOzD,EAAIsiE,WAAa7+D,EAG1B,IAAKuc,GAASN,EAAMjc,GAAI,IAAK,IAAI1F,EAAIxF,EAAE7I,EAAEK,EAAGgO,GAAKxF,EAAExJ,EAAEgB,IAAKgO,EAAG,CAC3D,IAAI5H,EAAM6pB,EAAQN,EAAMjc,GAAG1F,GAAK2hB,EAAMgT,EAAK30B,GAAKjF,GAEhD,QAAYmD,IAAR9F,QAA+B8F,IAAV9F,EAAIlF,EAA7B,CAUA,IAAIF,EAAIoF,EAAIpF,EAEZ,OAAQoF,EAAIlF,GACV,IAAK,IACH,GAAS,MAALF,EAAW,MACf,SAEF,IAAK,IACHA,EAAS,GAALA,EAAS,UAAO,EACpB,MAEF,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACH,MAEF,QACE,MAAM,IAAIb,MAAM,qBAAuBiG,EAAIlF,GAG/C,GAAc,MAAV6wC,EAAI/jC,GAAY,CAClB,GAAS,MAALhN,EACF,GAAa,KAAToF,EAAIlF,GAAkB,OAANF,EAAYiP,EAAI8hC,EAAI/jC,IAAM,UAAU,QAAe9B,IAAXimE,EAAsBliE,EAAI8hC,EAAI/jC,IAAMmkE,MAAY,KAAIz9D,GAAa,OAAN1T,EAAoC,SAAxBiP,EAAI8hC,EAAI/jC,IAAM,IAAkB,MAEnKiC,EAAI8hC,EAAI/jC,IAAM0G,IAAkB,MAAVtO,EAAIlF,GAAuB,MAAVkF,EAAIlF,IAA8B,IAAjBzE,EAAE+1E,YAAwBxxE,EAAIwuB,GAAYppB,EAAKpF,EAAGvE,GAGnG,MAALuE,IAAWoxE,GAAU,EAC3B,CA/BA,KARA,CACE,QAAelmE,IAAXimE,EAAsB,SAEZ,MAAVpgC,EAAI/jC,KACNiC,EAAI8hC,EAAI/jC,IAAMmkE,EAIlB,CAgCF,CACA,MAAO,CACLliE,IAAKA,EACLmiE,QAASA,EAEb,CAEA,SAAS3vC,GAAc9S,EAErBzsB,GAGA,GAAa,MAATysB,GAAkC,MAAjBA,EAAM,QAAiB,MAAO,GACnD,IAAIvpB,EAAM,CACRlF,EAAG,IACHF,EAAG,GAEDyQ,EAAS,EACTuD,EAAS,EACT+8B,EAEF,GACE/wC,EAAI,EACJ4K,EAAK,GACLpD,EAAI,CACN7I,EAAG,CACD6I,EAAG,EACHxI,EAAG,GAELhB,EAAG,CACDwJ,EAAG,EACHxI,EAAG,IAGHvD,EAAIyG,GAAQ,CAAC,EACbirB,EAAmB,MAAX1xB,EAAE0xB,MAAgB1xB,EAAE0xB,MAAQwB,EAAM,QAG9C,OAFiB,IAAblzB,EAAEgV,OAAcA,EAAS,EAAwB,MAAbhV,EAAEgV,OAAgBA,EAAS,EAAWlS,MAAMQ,QAAQtD,EAAEgV,QAASA,EAAS,EAAuB,MAAZhV,EAAEgV,SAAgBA,EAAS,UAEvI0c,GACb,IAAK,SACH3lB,EAAI4mB,GAAkBjB,GACtB,MAEF,IAAK,UACH3lB,EAAI4mB,GAAkBO,EAAM,UAC1BhwB,EAAE6I,EAAI2lB,EACR,MAEF,QACE3lB,EAAI2lB,EAGJ1c,EAAS,IAAGuD,EAAS,GACzB,IAAIjM,EAAKylB,GAAWhmB,EAAE7I,EAAE6I,GACpBm6B,EAEF,GACEn/B,EAEF,GACEivE,EAAO,EACPC,EAAU,EACVziD,EAAQ1wB,MAAMQ,QAAQ4vB,GACtBjc,EAAIlL,EAAE7I,EAAE6I,EACRwF,EAAI,EACJ2kE,EAAa,CAAC,EACd1iD,IAAUN,EAAMjc,KAAIic,EAAMjc,GAAK,IACnC,IAAI+zB,EAEFhrC,EAAEm2E,YAAcjjD,EAAM,UAAY,GAChC6X,EAEF/qC,EAAEm2E,YAAcjjD,EAAM,UAAY,GAEpC,IAAK3hB,EAAIxF,EAAE7I,EAAEK,EAAGgO,GAAKxF,EAAExJ,EAAEgB,IAAKgO,EAC5B,KAAKy5B,EAAQz5B,IAAM,CAAC,GAAGu6B,OAIvB,OAHA5F,EAAK30B,GAAKygB,GAAWzgB,GACrB5H,EAAM6pB,EAAQN,EAAMjc,GAAG1F,GAAK2hB,EAAMgT,EAAK30B,GAAKjF,GAEpC0I,GACN,KAAK,EACHsgC,EAAI/jC,GAAKA,EAAIxF,EAAE7I,EAAEK,EACjB,MAEF,KAAK,EACH+xC,EAAI/jC,GAAK20B,EAAK30B,GACd,MAEF,KAAK,EACH+jC,EAAI/jC,GAAKvR,EAAEgV,OAAOzD,EAAIxF,EAAE7I,EAAEK,GAC1B,MAEF,QAOE,GANW,MAAPoG,IAAaA,EAAM,CACrBd,EAAG,UACHpE,EAAG,MAEL0K,EAAK5K,EAAIwuB,GAAYppB,EAAK,KAAM3J,GAChCi2E,EAAUC,EAAW3xE,IAAM,EACU,CACnC,GACE4K,EAAK5K,EAAI,IAAM0xE,UACRC,EAAW/mE,IAEpB+mE,EAAW3xE,GAAK0xE,EAChBC,EAAW/mE,GAAM,CACnB,MAPc+mE,EAAW3xE,GAAK,EAQ9B+wC,EAAI/jC,GAAKpC,EAIf,IAAK8H,EAAIlL,EAAE7I,EAAE6I,EAAIwM,EAAQtB,GAAKlL,EAAExJ,EAAEwJ,IAAKkL,EACrC,KAAK8zB,EAAQ9zB,IAAM,CAAC,GAAG60B,OAAvB,CACA,IAAIt4B,EAAMiiE,GAAcviD,EAAOnnB,EAAGkL,EAAGivB,EAAMlxB,EAAQsgC,EAAK9hB,EAAOxzB,KAC3C,IAAhBwT,EAAImiE,UAAiC,IAAX3gE,GAA+B,IAAhBhV,EAAEo2E,UAAwBp2E,EAAEo2E,cAAYrvE,EAAIivE,KAAUxiE,EAAIA,IAFhE,CAMzC,OADAzM,EAAI5G,OAAS61E,EACNjvE,CACT,CAEA,IAAIsvE,GAAO,KAEX,SAASC,GAAapjD,EAEpBnnB,EAEAkL,EAEAivB,EAEAx0B,EAEAiiC,EAEApF,EAEAvuC,GAYA,IAPA,IAAI21E,GAAU,EACVniE,EAEF,GACE+iE,EAAM,GACNjqE,EAAKylB,GAAW9a,GAEX1F,EAAIxF,EAAE7I,EAAEK,EAAGgO,GAAKxF,EAAExJ,EAAEgB,IAAKgO,EAChC,GAAK20B,EAAK30B,GAAV,CACA,IAAI5H,EAAM3J,EAAEwzB,OAASN,EAAMjc,IAAM,IAAI1F,GAAK2hB,EAAMgT,EAAK30B,GAAKjF,GAC1D,GAAW,MAAP3C,EAAa4sE,EAAM,QAAQ,GAAa,MAAT5sE,EAAIpF,EAAW,CAChDoxE,GAAU,EACVY,EAAM,IAAMv2E,EAAE+1E,YAAuB,KAATpsE,EAAIlF,EAAWkF,EAAIpF,EAAIwuB,GAAYppB,EAAK,KAAM3J,IAE1E,IAAK,IAAIC,EAAI,EAAGkL,EAAK,EAAGlL,IAAMs2E,EAAIp2E,SAAUF,EAC1C,IAAKkL,EAAKorE,EAAIn2E,WAAWH,MAAQyR,GAAMvG,IAAOwoC,GAAa,KAAPxoC,GAAanL,EAAEw2E,YAAa,CAC9ED,EAAM,IAAOA,EAAIz0E,QAAQu0E,GAAM,MAAQ,IACvC,KACF,CAGS,MAAPE,IAAaA,EAAM,OACzB,MAAoB,MAAT5sE,EAAIoE,GAAcpE,EAAI4iC,EAI1BgqC,EAAM,IAHXZ,GAAU,GACVY,EAAM,IAAM5sE,EAAIoE,GACRpO,QAAQ,MAAQ,IAAG42E,EAAM,IAAMA,EAAIz0E,QAAQu0E,GAAM,MAAQ,MAInE7iE,EAAIwC,KAAKugE,EArBa,CAwBxB,OAAoB,IAAhBv2E,EAAEo2E,WAAuBT,EAAgB,KACtCniE,EAAIhT,KAAK+tC,EAClB,CAEA,SAASkoC,GAAavjD,EAEpBzsB,GAKA,IAAIM,EAEF,GACE/G,EAAY,MAARyG,EAAe,CAAC,EAAIA,EAC5B,GAAa,MAATysB,GAAkC,MAAjBA,EAAM,QAAiB,MAAO,GACnD,IAAInnB,EAAI4mB,GAAkBO,EAAM,SAC5Bqb,OAAc9+B,IAATzP,EAAEuuC,GAAmBvuC,EAAEuuC,GAAK,IACjC78B,EAAK68B,EAAGnuC,WAAW,GACnBqsC,OAAch9B,IAATzP,EAAEysC,GAAmBzsC,EAAEysC,GAAK,KACjCkH,EAAKlH,EAAGrsC,WAAW,GACnBs2E,EAAW,IAAI5qD,QAAc,KAANyiB,EAAY,MAAQA,GAAM,MACjD/6B,EAAM,GACN0yB,EAEF,GACFlmC,EAAEwzB,MAAQ1wB,MAAMQ,QAAQ4vB,GAQxB,IAPA,IAAI8X,EAEFhrC,EAAEm2E,YAAcjjD,EAAM,UAAY,GAChC6X,EAEF/qC,EAAEm2E,YAAcjjD,EAAM,UAAY,GAE3B3hB,EAAIxF,EAAE7I,EAAEK,EAAGgO,GAAKxF,EAAExJ,EAAEgB,IAAKgO,GAC1By5B,EAAQz5B,IAAM,CAAC,GAAGu6B,SAAQ5F,EAAK30B,GAAKygB,GAAWzgB,IAKvD,IAFA,IAAI1I,EAAI,EAECoO,EAAIlL,EAAE7I,EAAE6I,EAAGkL,GAAKlL,EAAExJ,EAAEwJ,IAAKkL,GAC3B8zB,EAAQ9zB,IAAM,CAAC,GAAG60B,QAGZ,OAFXt4B,EAAM8iE,GAAapjD,EAAOnnB,EAAGkL,EAAGivB,EAAMx0B,EAAIiiC,EAAIpF,EAAIvuC,MAM9CA,EAAE22E,QAAOnjE,EAAMA,EAAI1R,QAAQ40E,EAAU,MACrCljE,IAAuB,IAAhBxT,EAAEo2E,YAAqBrvE,EAAIiP,MAAMnN,IAAM4jC,EAAK,IAAMj5B,IAI/D,cADOxT,EAAEwzB,MACFzsB,EAAIvG,KAAK,GAClB,CAEA,SAASo2E,GAAa1jD,EAEpBzsB,GAGKA,IAAMA,EAAO,CAAC,GACnBA,EAAK8nC,GAAK,KACV9nC,EAAKgmC,GAAK,KACV,IAAIvpC,EAAIuzE,GAAavjD,EAAOzsB,GAC5B,GAAuB,oBAAZhG,GAAwC,UAAbgG,EAAKgD,KAAkB,OAAOvG,EACpE,IAAIlD,EAAIS,EAASmjB,MAAMkM,OAAO,KAAM5sB,EAAG,OACvC,OAAO5C,OAAOC,aAAa,KAAOD,OAAOC,aAAa,KAAOP,CAC/D,CA+CA,SAAS62E,GAAetjD,EAEtBujD,EAEArwE,GAGA,IAqBI4qB,EArBArxB,EAAIyG,GAAQ,CAAC,EACb8R,IAAWvY,EAAE+2E,WACbtjD,EAEFF,GAAO,CAAC,EAGNG,EAAK,EACLC,EAAK,EAET,GAAIF,GAAkB,MAAZzzB,EAAE4zB,OACV,GAAuB,iBAAZ5zB,EAAE4zB,OAAoBF,EAAK1zB,EAAE4zB,WAAY,CAClD,IAAIC,EAEiB,iBAAZ7zB,EAAE4zB,OAAqBtB,GAAYtyB,EAAE4zB,QAAU5zB,EAAE4zB,OAE1DF,EAAKG,EAAQ9nB,EACb4nB,EAAKE,EAAQtwB,CACf,CAMF,IAAImuB,EAEF,CACAxuB,EAAG,CACDK,EAAG,EACHwI,EAAG,GAELxJ,EAAG,CACDgB,EAAGowB,EACH5nB,EAAG2nB,EAAKojD,EAAG32E,OAAS,EAAIoY,IAM5B,GAAIkb,EAAG,QAAS,CACd,IAAIK,EAASnB,GAAkBc,EAAG,SAElC/B,EAAMnvB,EAAEgB,EAAIuB,KAAKgI,IAAI4kB,EAAMnvB,EAAEgB,EAAGuwB,EAAOvxB,EAAEgB,GACzCmuB,EAAMnvB,EAAEwJ,EAAIjH,KAAKgI,IAAI4kB,EAAMnvB,EAAEwJ,EAAG+nB,EAAOvxB,EAAEwJ,IAE9B,GAAP2nB,IACFA,EAAKI,EAAOvxB,EAAEwJ,EAAI,EAClB2lB,EAAMnvB,EAAEwJ,EAAI2nB,EAAKojD,EAAG32E,OAAS,EAAIoY,EAErC,MACa,GAAPmb,IACFA,EAAK,EACLhC,EAAMnvB,EAAEwJ,EAAI+qE,EAAG32E,OAAS,EAAIoY,GAIhC,IAAI+8B,EAEFt1C,EAAEgV,QAAU,GACVzD,EAAI,EACRulE,EAAGrqD,SAAQ,SAAUuqD,EAAI//D,GAGvBoO,GAAK2xD,GAAIvqD,SAAQ,SAAU3W,IACI,IAAxBvE,EAAI+jC,EAAI31C,QAAQmW,MAAWw/B,EAAI/jC,EAAI+jC,EAAIn1C,QAAU2V,GACtD,IAAIvR,EAAIyyE,EAAGlhE,GACPrR,EAAI,IACJ2lB,EAAI,GACJqZ,EAAM7R,GAAY,CACpBruB,EAAGowB,EAAKpiB,EACRxF,EAAG2nB,EAAKzc,EAAIsB,IAEd8Y,EAAO4lD,GAAiBxjD,EAAIgQ,IAExBl/B,GAAkB,kBAANA,GAAoBA,aAAakD,MAG/B,iBAALlD,EAAeE,EAAI,IAAyB,kBAALF,EAAgBE,EAAI,IAAyB,iBAALF,EAAeE,EAAI,IAAaF,aAAakD,MACrIhD,EAAI,IAECzE,EAAEm0B,YACL1vB,EAAI,IACJF,EAAIuhB,GAAQvhB,IAGd6lB,EAAIpqB,EAAEsO,QAAU/I,EAAU,KACX,OAANhB,GAAcvE,EAAEi0B,YACzBxvB,EAAI,IACJF,EAAI,GAED8sB,GAMHA,EAAK5sB,EAAIA,EACT4sB,EAAK9sB,EAAIA,SACF8sB,EAAKxoB,SACLwoB,EAAKpa,EACRmT,IAAGiH,EAAKjH,EAAIA,IAVPqJ,EAAGgQ,GAAOpS,EAAO,CAC1B5sB,EAAGA,EACHF,EAAGA,GAUD6lB,IAAGiH,EAAKjH,EAAIA,IA3BhBqJ,EAAGgQ,GAAOl/B,CA6Bd,GACF,IACAmtB,EAAMnvB,EAAEgB,EAAIuB,KAAKgI,IAAI4kB,EAAMnvB,EAAEgB,EAAGowB,EAAK2hB,EAAIn1C,OAAS,GAElD,IAAI4zB,EAAMhC,GAAW2B,GAErB,GAAInb,EAAQ,IAAKhH,EAAI,EAAGA,EAAI+jC,EAAIn1C,SAAUoR,EACxCkiB,EAAGzB,GAAWzgB,EAAIoiB,GAAMI,GAAO,CAC7BtvB,EAAG,IACHF,EAAG+wC,EAAI/jC,IAIX,OADAkiB,EAAG,QAAUjB,GAAad,GACnB+B,CACT,CAYA,SAASwjD,GAAiBxjD,EAExBxc,EAAG1F,GAMH,GAAgB,iBAAL0F,EAAe,CAExB,GAAInU,MAAMQ,QAAQmwB,GAAK,CACrB,IAAIyjD,EAAK5kD,GAAYrb,GAErB,OADKwc,EAAGyjD,EAAGnrE,KAAI0nB,EAAGyjD,EAAGnrE,GAAK,IACnB0nB,EAAGyjD,EAAGnrE,GAAGmrE,EAAG3zE,KAAOkwB,EAAGyjD,EAAGnrE,GAAGmrE,EAAG3zE,GAAK,CACzCkB,EAAG,KAEP,CAEA,OAAOgvB,EAAGxc,KAAOwc,EAAGxc,GAAK,CACvBxS,EAAG,KAEP,CAIA,OAAiCwyE,GAAiBxjD,EAAI7B,GAAtC,iBAAL3a,EAAuDA,EAG1B,CACtClL,EAAGkL,EACH1T,EAAGgO,GAAK,IAEZ,CAqBA,SAAS4lE,KAGP,MAAO,CACL/jD,WAAY,GACZC,OAAQ,CAAC,EAEb,CAIA,SAASgiC,GAAkB9iB,EAEzB9e,EAEAnd,EAEA8gE,GAKA,IAAIn3E,EAAI,EACR,IAAKqW,EAAM,KAAOrW,GAAK,QAC6B,GAA9CsyC,EAAGnf,WAAWzzB,QAAQ2W,EAAO,QAAUrW,KADZA,EAAGqW,OAAO7G,GAG3C,IAAK6G,GAAQi8B,EAAGnf,WAAWjzB,QAAU,MAAQ,MAAM,IAAIuD,MAAM,uBAE7D,GAAI0zE,GAAQ7kC,EAAGnf,WAAWzzB,QAAQ2W,IAAS,EAAG,CAC5C,IAAInP,EAAImP,EAAKjM,MAAM,gBACnBpK,EAAIkH,IAAMA,EAAE,IAAM,EAClB,IAAImM,EAAOnM,GAAKA,EAAE,IAAMmP,EAExB,MAAOrW,EAAGA,GAAK,QACkC,GAA3CsyC,EAAGnf,WAAWzzB,QAAQ2W,EAAOhD,EAAOrT,KADjBA,GAG3B,CAGA,GADAivD,GAAc54C,GACVi8B,EAAGnf,WAAWzzB,QAAQ2W,IAAS,EAAG,MAAM,IAAI5S,MAAM,wBAA0B4S,EAAO,qBAGvF,OAFAi8B,EAAGnf,WAAWpd,KAAKM,GACnBi8B,EAAGlf,OAAO/c,GAAQmd,EACXnd,CACT,CA4CA,SAAS+gE,GAAmBhmD,EAE1B7H,EAEA2hC,GAcA,OAXK3hC,GAGH6H,EAAKnjB,EAAI,CACPwqB,OAAQlP,GAIN2hC,IAAS95B,EAAKnjB,EAAEk9C,QAAUD,WAPvB95B,EAAKnjB,EAUPmjB,CACT,CAyDA,IAAIzN,GAEF,CACAoO,WAAYA,GACZD,WAAYA,GACZH,YAAaA,GACbY,aAAcA,GACdL,WAAYA,GACZF,WAAYA,GACZqlD,WAn53CF,SAAoBr9D,GAKlB,OAAOA,EAAKnY,QAAQ,sBAAuB,SAASqB,MAAM,IAC5D,EA843CEmvB,YAAaA,GACbC,aAAcA,GACdQ,YAAaA,GACbO,cAAeA,GACfujD,eAAgBA,GAChBlQ,cAAeA,GACftyC,aAAcA,GACdkjD,cAnPF,SAAuBT,EAErBrwE,GAGA,OAAOowE,GAAe,KAAMC,EAAIrwE,EAClC,EA8OE+wE,eAAgBjQ,GAChBkQ,cA7uKF,SAAuBlpE,EAErB9H,GAKA,OAAOwsB,GAAkBs0C,GAAgBh5D,EAAO9H,GAAOA,EACzD,EAsuKEgwE,aAAcA,GACdG,aAAcA,GACd5wC,cAAeA,GACf0gC,cAAeA,GACfgR,kBAtaF,SAA2BxkD,GAKzB,IACIlyB,EADAkG,EAAI,GAEJyC,EAAM,GACV,GAAa,MAATupB,GAAkC,MAAjBA,EAAM,QAAiB,MAAO,GACnD,IAKI3hB,EALAxF,EAAI4mB,GAAkBO,EAAM,SAC5B5mB,EAAK,GACL45B,EAEF,GAEEyxC,EAEF,GACEnkD,EAAQ1wB,MAAMQ,QAAQ4vB,GAE1B,IAAK3hB,EAAIxF,EAAE7I,EAAEK,EAAGgO,GAAKxF,EAAExJ,EAAEgB,IAAKgO,EAC5B20B,EAAK30B,GAAKygB,GAAWzgB,GAGvB,IAAK,IAAI0F,EAAIlL,EAAE7I,EAAE6I,EAAGkL,GAAKlL,EAAExJ,EAAEwJ,IAAKkL,EAGhC,IAFA3K,EAAKylB,GAAW9a,GAEX1F,EAAIxF,EAAE7I,EAAEK,EAAGgO,GAAKxF,EAAExJ,EAAEgB,IAAKgO,EAI5B,GAHArK,EAAIg/B,EAAK30B,GAAKjF,EAEd3C,EAAM,QACI8F,KAFVzO,EAAIwyB,GAASN,EAAMjc,IAAM,IAAI1F,GAAK2hB,EAAMhsB,IAExC,CAAmC,GAAW,MAAPlG,EAAEurC,EAAW,CAElD,GADArlC,EAAIlG,EAAEurC,GACDvrC,EAAE+M,EAAG,SACVpE,EAAM3I,EAAE+M,GACe,GAAnB7G,EAAEvH,QAAQ,OAAYuH,EAAIA,EAAI,IAAMA,EAC1C,CACA,GAAW,MAAPlG,EAAE+M,EAAWpE,EAAM3I,EAAE+M,MAAO,IAAW,KAAP/M,EAAEyD,EAAU,SAAc,GAAW,KAAPzD,EAAEyD,GAAmB,MAAPzD,EAAEuD,EAAWoF,EAAM,GAAK3I,EAAEuD,OAAO,GAAW,KAAPvD,EAAEyD,EAAUkF,EAAM3I,EAAEuD,EAAI,OAAS,aAAa,QAAYkL,IAARzO,EAAE6H,EAAiBc,EAAM,IAAM3I,EAAE6H,MAAO,SAAY4G,IAARzO,EAAEuD,EAAiB,SAA8BoF,EAAL,KAAP3I,EAAEyD,EAAgB,IAAMzD,EAAEuD,EAAa,GAAKvD,EAAEuD,CAAC,EACvSozE,EAAKA,EAAKx3E,QAAU+G,EAAI,IAAMyC,CAF9B,CAMJ,OAAOguE,CACT,EA4XEC,0BAA2B5xC,GAC3B6xC,eAAgBZ,GAChBE,SAAUA,GACV9hB,kBAAmBA,GACnByiB,0BAjJF,SAAmCvlC,EAEjCwlC,EAEAC,GAGKzlC,EAAGwjB,WAAUxjB,EAAGwjB,SAAW,CAAC,GAC5BxjB,EAAGwjB,SAAS1iC,SAAQkf,EAAGwjB,SAAS1iC,OAAS,IAC9C,IAAIjpB,EAzEN,SAAsBmoC,EAEpBwlC,GAGA,GAAiB,iBAANA,EAAgB,CACzB,GAAIA,GAAM,GAAKxlC,EAAGnf,WAAWjzB,OAAS43E,EAAI,OAAOA,EACjD,MAAM,IAAIr0E,MAAM,uBAAyBq0E,EAC3C,CAAO,GAAiB,iBAANA,EAAgB,CAChC,IAAI3tE,EAAMmoC,EAAGnf,WAAWzzB,QAAQo4E,GAChC,GAAI3tE,GAAO,EAAG,OAAOA,EACrB,MAAM,IAAI1G,MAAM,2BAA6Bq0E,EAAK,IACpD,CAAO,MAAM,IAAIr0E,MAAM,sBAAwBq0E,EAAK,IACtD,CA4DYE,CAAa1lC,EAAIwlC,GAI3B,OAFKxlC,EAAGwjB,SAAS1iC,OAAOjpB,KAAMmoC,EAAGwjB,SAAS1iC,OAAOjpB,GAAO,CAAC,GAEjD4tE,GACN,KAAK,EACL,KAAK,EACL,KAAK,EACH,MAEF,QACE,MAAM,IAAIt0E,MAAM,gCAAkCs0E,GAItDzlC,EAAGwjB,SAAS1iC,OAAOjpB,GAAK4lD,OAASgoB,CACnC,EAyHEE,uBArHF,SAAgC7mD,EAE9B3nB,GAIA,OADA2nB,EAAKjH,EAAI1gB,EACF2nB,CACT,EA+GEgmD,mBAAoBA,GACpBc,uBAvFF,SAAgC9mD,EAE9BK,EAEAy5B,GAGA,OAAOksB,GAAmBhmD,EAAM,IAAMK,EAAOy5B,EAC/C,EAgFEitB,iBA5EF,SAA0B/mD,EAExBrO,EAEA29B,GAGKtvB,EAAK9tB,IAAG8tB,EAAK9tB,EAAI,IACtB8tB,EAAK9tB,EAAEyS,KAAK,CACVvR,EAAGue,EACHlF,EAAG6iC,GAAU,WAEjB,EAiEE03B,wBA7DF,SAAiC5kD,EAE/B/B,EAAO+Z,EAEP6sC,GAMA,IAHA,IAAIjtB,EAAsB,iBAAT35B,EAAoBA,EAAQiB,GAAkBjB,GAC3D6mD,EAAyB,iBAAT7mD,EAAoBA,EAAQc,GAAad,GAEpDza,EAAIo0C,EAAInoD,EAAE6I,EAAGkL,GAAKo0C,EAAI9oD,EAAEwJ,IAAKkL,EACpC,IAAK,IAAI1F,EAAI85C,EAAInoD,EAAEK,EAAGgO,GAAK85C,EAAI9oD,EAAEgB,IAAKgO,EAAG,CACvC,IAAI8f,EAAO4lD,GAAiBxjD,EAAIxc,EAAG1F,GACnC8f,EAAK5sB,EAAI,IACT4sB,EAAKkb,EAAIgsC,SACFlnD,EAAK9sB,EAER0S,GAAKo0C,EAAInoD,EAAE6I,GAAKwF,GAAK85C,EAAInoD,EAAEK,IAC7B8tB,EAAKtjB,EAAI09B,EACL6sC,IAASjnD,EAAK1rB,GAAI,GAE1B,CAGF,OAAO8tB,CACT,EAqCE9X,OAAQ,CACN68D,cAAe,EACfC,aAAc,EACdC,kBAAmB,IAsPFt5E,EAAK0Q","sources":["../node_modules/xlsx/xlsx.mjs"],"sourcesContent":["/*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */\n\n/* vim: set ts=2: */\n\n/*exported XLSX */\n\n/*global process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false */\nvar XLSX = {};\nXLSX.version = '0.18.5';\nvar current_codepage = 1200,\n    current_ansi = 1252;\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 */\n\nvar CS2CP = {\n  /*::[*/\n  0\n  /*::]*/\n  : 1252,\n\n  /* ANSI */\n\n  /*::[*/\n  1\n  /*::]*/\n  : 65001,\n\n  /* DEFAULT */\n\n  /*::[*/\n  2\n  /*::]*/\n  : 65001,\n\n  /* SYMBOL */\n\n  /*::[*/\n  77\n  /*::]*/\n  : 10000,\n\n  /* MAC */\n\n  /*::[*/\n  128\n  /*::]*/\n  : 932,\n\n  /* SHIFTJIS */\n\n  /*::[*/\n  129\n  /*::]*/\n  : 949,\n\n  /* HANGUL */\n\n  /*::[*/\n  130\n  /*::]*/\n  : 1361,\n\n  /* JOHAB */\n\n  /*::[*/\n  134\n  /*::]*/\n  : 936,\n\n  /* GB2312 */\n\n  /*::[*/\n  136\n  /*::]*/\n  : 950,\n\n  /* CHINESEBIG5 */\n\n  /*::[*/\n  161\n  /*::]*/\n  : 1253,\n\n  /* GREEK */\n\n  /*::[*/\n  162\n  /*::]*/\n  : 1254,\n\n  /* TURKISH */\n\n  /*::[*/\n  163\n  /*::]*/\n  : 1258,\n\n  /* VIETNAMESE */\n\n  /*::[*/\n  177\n  /*::]*/\n  : 1255,\n\n  /* HEBREW */\n\n  /*::[*/\n  178\n  /*::]*/\n  : 1256,\n\n  /* ARABIC */\n\n  /*::[*/\n  186\n  /*::]*/\n  : 1257,\n\n  /* BALTIC */\n\n  /*::[*/\n  204\n  /*::]*/\n  : 1251,\n\n  /* RUSSIAN */\n\n  /*::[*/\n  222\n  /*::]*/\n  : 874,\n\n  /* THAI */\n\n  /*::[*/\n  238\n  /*::]*/\n  : 1250,\n\n  /* EASTEUROPE */\n\n  /*::[*/\n  255\n  /*::]*/\n  : 1252,\n\n  /* OEM */\n\n  /*::[*/\n  69\n  /*::]*/\n  : 6969\n  /* MISC */\n\n}\n/*:any*/\n;\n\nvar set_ansi = function set_ansi(cp\n/*:number*/\n) {\n  if (VALID_ANSI.indexOf(cp) == -1) return;\n  current_ansi = CS2CP[0] = cp;\n};\n\nfunction reset_ansi() {\n  set_ansi(1252);\n}\n\nvar set_cp = function set_cp(cp\n/*:number*/\n) {\n  current_codepage = cp;\n  set_ansi(cp);\n};\n\nfunction reset_cp() {\n  set_cp(1200);\n  reset_ansi();\n}\n\nfunction char_codes(data\n/*:string*/\n)\n/*:Array<number>*/\n{\n  var o\n  /*:Array<number>*/\n  = [];\n\n  for (var i = 0, len = data.length; i < len; ++i) {\n    o[i] = data.charCodeAt(i);\n  }\n\n  return o;\n}\n\nfunction utf16leread(data\n/*:string*/\n)\n/*:string*/\n{\n  var o\n  /*:Array<string>*/\n  = [];\n\n  for (var i = 0; i < data.length >> 1; ++i) {\n    o[i] = String.fromCharCode(data.charCodeAt(2 * i) + (data.charCodeAt(2 * i + 1) << 8));\n  }\n\n  return o.join(\"\");\n}\n\nfunction utf16beread(data\n/*:string*/\n)\n/*:string*/\n{\n  var o\n  /*:Array<string>*/\n  = [];\n\n  for (var i = 0; i < data.length >> 1; ++i) {\n    o[i] = String.fromCharCode(data.charCodeAt(2 * i + 1) + (data.charCodeAt(2 * i) << 8));\n  }\n\n  return o.join(\"\");\n}\n\nvar debom = function debom(data\n/*:string*/\n)\n/*:string*/\n{\n  var c1 = data.charCodeAt(0),\n      c2 = data.charCodeAt(1);\n  if (c1 == 0xFF && c2 == 0xFE) return utf16leread(data.slice(2));\n  if (c1 == 0xFE && c2 == 0xFF) return utf16beread(data.slice(2));\n  if (c1 == 0xFEFF) return data.slice(1);\n  return data;\n};\n\nvar _getchar = function _gc1(x\n/*:number*/\n)\n/*:string*/\n{\n  return String.fromCharCode(x);\n};\n\nvar _getansi = function _ga1(x\n/*:number*/\n)\n/*:string*/\n{\n  return String.fromCharCode(x);\n};\n\nvar $cptable;\n\nfunction set_cptable(cptable) {\n  $cptable = cptable;\n\n  set_cp = function set_cp(cp\n  /*:number*/\n  ) {\n    current_codepage = cp;\n    set_ansi(cp);\n  };\n\n  debom = function debom(data\n  /*:string*/\n  ) {\n    if (data.charCodeAt(0) === 0xFF && data.charCodeAt(1) === 0xFE) {\n      return $cptable.utils.decode(1200, char_codes(data.slice(2)));\n    }\n\n    return data;\n  };\n\n  _getchar = function _gc2(x\n  /*:number*/\n  )\n  /*:string*/\n  {\n    if (current_codepage === 1200) return String.fromCharCode(x);\n    return $cptable.utils.decode(current_codepage, [x & 255, x >> 8])[0];\n  };\n\n  _getansi = function _ga2(x\n  /*:number*/\n  )\n  /*:string*/\n  {\n    return $cptable.utils.decode(current_ansi, [x])[0];\n  };\n\n  cpdoit();\n}\n\nexport { set_cptable };\nvar DENSE = null;\nvar DIF_XL = true;\nvar Base64_map = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\nfunction Base64_encode(input) {\n  var o = \"\";\n  var c1 = 0,\n      c2 = 0,\n      c3 = 0,\n      e1 = 0,\n      e2 = 0,\n      e3 = 0,\n      e4 = 0;\n\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\n    if (isNaN(c2)) {\n      e3 = e4 = 64;\n    } else if (isNaN(c3)) {\n      e4 = 64;\n    }\n\n    o += Base64_map.charAt(e1) + Base64_map.charAt(e2) + Base64_map.charAt(e3) + Base64_map.charAt(e4);\n  }\n\n  return o;\n}\n\nfunction Base64_decode(input) {\n  var o = \"\";\n  var c1 = 0,\n      c2 = 0,\n      c3 = 0,\n      e1 = 0,\n      e2 = 0,\n      e3 = 0,\n      e4 = 0;\n  input = input.replace(/[^\\w\\+\\/\\=]/g, \"\");\n\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\n    if (e3 !== 64) {\n      o += String.fromCharCode(c2);\n    }\n\n    e4 = Base64_map.indexOf(input.charAt(i++));\n    c3 = (e3 & 3) << 6 | e4;\n\n    if (e4 !== 64) {\n      o += String.fromCharCode(c3);\n    }\n  }\n\n  return o;\n}\n\nvar has_buf = /*#__PURE__*/function () {\n  return typeof Buffer !== 'undefined' && typeof process !== 'undefined' && typeof process.versions !== 'undefined' && !!process.versions.node;\n}();\n\nvar Buffer_from = /*#__PURE__*/function () {\n  if (typeof Buffer !== 'undefined') {\n    var nbfs = !Buffer.from;\n    if (!nbfs) try {\n      Buffer.from(\"foo\", \"utf8\");\n    } catch (e) {\n      nbfs = true;\n    }\n    return nbfs ? function (buf, enc) {\n      return enc ? new Buffer(buf, enc) : new Buffer(buf);\n    } : Buffer.from.bind(Buffer);\n  }\n\n  return function () {};\n}();\n\nfunction new_raw_buf(len\n/*:number*/\n) {\n  /* jshint -W056 */\n  if (has_buf) return Buffer.alloc ? Buffer.alloc(len) : new Buffer(len);\n  return typeof Uint8Array != \"undefined\" ? new Uint8Array(len) : new Array(len);\n  /* jshint +W056 */\n}\n\nfunction new_unsafe_buf(len\n/*:number*/\n) {\n  /* jshint -W056 */\n  if (has_buf) return Buffer.allocUnsafe ? Buffer.allocUnsafe(len) : new Buffer(len);\n  return typeof Uint8Array != \"undefined\" ? new Uint8Array(len) : new Array(len);\n  /* jshint +W056 */\n}\n\nvar s2a = function s2a(s\n/*:string*/\n)\n/*:any*/\n{\n  if (has_buf) return Buffer_from(s, \"binary\");\n  return s.split(\"\").map(function (x\n  /*:string*/\n  )\n  /*:number*/\n  {\n    return x.charCodeAt(0) & 0xff;\n  });\n};\n\nfunction s2ab(s\n/*:string*/\n)\n/*:any*/\n{\n  if (typeof ArrayBuffer === 'undefined') return s2a(s);\n  var buf = new ArrayBuffer(s.length),\n      view = new Uint8Array(buf);\n\n  for (var i = 0; i != s.length; ++i) {\n    view[i] = s.charCodeAt(i) & 0xFF;\n  }\n\n  return buf;\n}\n\nfunction a2s(data\n/*:any*/\n)\n/*:string*/\n{\n  if (Array.isArray(data)) return data.map(function (c) {\n    return String.fromCharCode(c);\n  }).join(\"\");\n  var o\n  /*:Array<string>*/\n  = [];\n\n  for (var i = 0; i < data.length; ++i) {\n    o[i] = String.fromCharCode(data[i]);\n  }\n\n  return o.join(\"\");\n}\n\nfunction a2u(data\n/*:Array<number>*/\n)\n/*:Uint8Array*/\n{\n  if (typeof Uint8Array === 'undefined') throw new Error(\"Unsupported\");\n  return new Uint8Array(data);\n}\n\nfunction ab2a(data\n/*:ArrayBuffer|Uint8Array*/\n)\n/*:Array<number>*/\n{\n  if (typeof ArrayBuffer == 'undefined') throw new Error(\"Unsupported\");\n  if (data instanceof ArrayBuffer) return ab2a(new Uint8Array(data));\n  /*:: if(data instanceof ArrayBuffer) throw new Error(\"unreachable\"); */\n\n  var o = new Array(data.length);\n\n  for (var i = 0; i < data.length; ++i) {\n    o[i] = data[i];\n  }\n\n  return o;\n}\n\nvar bconcat = has_buf ? function (bufs) {\n  return Buffer.concat(bufs.map(function (buf) {\n    return Buffer.isBuffer(buf) ? buf : Buffer_from(buf);\n  }));\n} : function (bufs) {\n  if (typeof Uint8Array !== \"undefined\") {\n    var i = 0,\n        maxlen = 0;\n\n    for (i = 0; i < bufs.length; ++i) {\n      maxlen += bufs[i].length;\n    }\n\n    var o = new Uint8Array(maxlen);\n    var len = 0;\n\n    for (i = 0, maxlen = 0; i < bufs.length; maxlen += len, ++i) {\n      len = bufs[i].length;\n      if (bufs[i] instanceof Uint8Array) o.set(bufs[i], maxlen);else if (typeof bufs[i] == \"string\") {\n        throw \"wtf\";\n      } else o.set(new Uint8Array(bufs[i]), maxlen);\n    }\n\n    return o;\n  }\n\n  return [].concat.apply([], bufs.map(function (buf) {\n    return Array.isArray(buf) ? buf : [].slice.call(buf);\n  }));\n};\n\nfunction utf8decode(content\n/*:string*/\n) {\n  var out = [],\n      widx = 0,\n      L = content.length + 250;\n  var o = new_raw_buf(content.length + 255);\n\n  for (var ridx = 0; ridx < content.length; ++ridx) {\n    var c = content.charCodeAt(ridx);\n    if (c < 0x80) o[widx++] = c;else if (c < 0x800) {\n      o[widx++] = 192 | c >> 6 & 31;\n      o[widx++] = 128 | c & 63;\n    } else if (c >= 0xD800 && c < 0xE000) {\n      c = (c & 1023) + 64;\n      var d = content.charCodeAt(++ridx) & 1023;\n      o[widx++] = 240 | c >> 8 & 7;\n      o[widx++] = 128 | c >> 2 & 63;\n      o[widx++] = 128 | d >> 6 & 15 | (c & 3) << 4;\n      o[widx++] = 128 | d & 63;\n    } else {\n      o[widx++] = 224 | c >> 12 & 15;\n      o[widx++] = 128 | c >> 6 & 63;\n      o[widx++] = 128 | c & 63;\n    }\n\n    if (widx > L) {\n      out.push(o.slice(0, widx));\n      widx = 0;\n      o = new_raw_buf(65535);\n      L = 65530;\n    }\n  }\n\n  out.push(o.slice(0, widx));\n  return bconcat(out);\n}\n\nvar chr0 = /\\u0000/g,\n    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\n/* ssf.js (C) 2013-present SheetJS -- http://sheetjs.com */\n\n/*jshint -W041 */\n\nfunction _strrev(x\n/*:string*/\n)\n/*:string*/\n{\n  var o = \"\",\n      i = x.length - 1;\n\n  while (i >= 0) {\n    o += x.charAt(i--);\n  }\n\n  return o;\n}\n\nfunction pad0(v\n/*:any*/\n, d\n/*:number*/\n)\n/*:string*/\n{\n  var t = \"\" + v;\n  return t.length >= d ? t : fill('0', d - t.length) + t;\n}\n\nfunction pad_(v\n/*:any*/\n, d\n/*:number*/\n)\n/*:string*/\n{\n  var t = \"\" + v;\n  return t.length >= d ? t : fill(' ', d - t.length) + t;\n}\n\nfunction rpad_(v\n/*:any*/\n, d\n/*:number*/\n)\n/*:string*/\n{\n  var t = \"\" + v;\n  return t.length >= d ? t : t + fill(' ', d - t.length);\n}\n\nfunction pad0r1(v\n/*:any*/\n, d\n/*:number*/\n)\n/*:string*/\n{\n  var t = \"\" + Math.round(v);\n  return t.length >= d ? t : fill('0', d - t.length) + t;\n}\n\nfunction pad0r2(v\n/*:any*/\n, d\n/*:number*/\n)\n/*:string*/\n{\n  var t = \"\" + v;\n  return t.length >= d ? t : fill('0', d - t.length) + t;\n}\n\nvar p2_32 = /*#__PURE__*/Math.pow(2, 32);\n\nfunction pad0r(v\n/*:any*/\n, d\n/*:number*/\n)\n/*:string*/\n{\n  if (v > p2_32 || v < -p2_32) return pad0r1(v, d);\n  var i = Math.round(v);\n  return pad0r2(i, d);\n}\n/* yes, in 2022 this is still faster than string compare */\n\n\nfunction SSF_isgeneral(s\n/*:string*/\n, i\n/*:?number*/\n)\n/*:boolean*/\n{\n  i = i || 0;\n  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;\n}\n\nvar days\n/*:Array<Array<string> >*/\n= [['Sun', 'Sunday'], ['Mon', 'Monday'], ['Tue', 'Tuesday'], ['Wed', 'Wednesday'], ['Thu', 'Thursday'], ['Fri', 'Friday'], ['Sat', 'Saturday']];\nvar months\n/*:Array<Array<string> >*/\n= [['J', 'Jan', 'January'], ['F', 'Feb', 'February'], ['M', 'Mar', 'March'], ['A', 'Apr', 'April'], ['M', 'May', 'May'], ['J', 'Jun', 'June'], ['J', 'Jul', 'July'], ['A', 'Aug', 'August'], ['S', 'Sep', 'September'], ['O', 'Oct', 'October'], ['N', 'Nov', 'November'], ['D', 'Dec', 'December']];\n\nfunction SSF_init_table(t\n/*:any*/\n) {\n  if (!t) t = {};\n  t[0] = 'General';\n  t[1] = '0';\n  t[2] = '0.00';\n  t[3] = '#,##0';\n  t[4] = '#,##0.00';\n  t[9] = '0%';\n  t[10] = '0.00%';\n  t[11] = '0.00E+00';\n  t[12] = '# ?/?';\n  t[13] = '# ??/??';\n  t[14] = 'm/d/yy';\n  t[15] = 'd-mmm-yy';\n  t[16] = 'd-mmm';\n  t[17] = 'mmm-yy';\n  t[18] = 'h:mm AM/PM';\n  t[19] = 'h:mm:ss AM/PM';\n  t[20] = 'h:mm';\n  t[21] = 'h:mm:ss';\n  t[22] = 'm/d/yy h:mm';\n  t[37] = '#,##0 ;(#,##0)';\n  t[38] = '#,##0 ;[Red](#,##0)';\n  t[39] = '#,##0.00;(#,##0.00)';\n  t[40] = '#,##0.00;[Red](#,##0.00)';\n  t[45] = 'mm:ss';\n  t[46] = '[h]:mm:ss';\n  t[47] = 'mmss.0';\n  t[48] = '##0.0E+0';\n  t[49] = '@';\n  t[56] = '\"上午/下午 \"hh\"時\"mm\"分\"ss\"秒 \"';\n  return t;\n}\n/* repeated to satiate webpack */\n\n\nvar table_fmt = {\n  0: 'General',\n  1: '0',\n  2: '0.00',\n  3: '#,##0',\n  4: '#,##0.00',\n  9: '0%',\n  10: '0.00%',\n  11: '0.00E+00',\n  12: '# ?/?',\n  13: '# ??/??',\n  14: 'm/d/yy',\n  15: 'd-mmm-yy',\n  16: 'd-mmm',\n  17: 'mmm-yy',\n  18: 'h:mm AM/PM',\n  19: 'h:mm:ss AM/PM',\n  20: 'h:mm',\n  21: 'h:mm:ss',\n  22: 'm/d/yy h:mm',\n  37: '#,##0 ;(#,##0)',\n  38: '#,##0 ;[Red](#,##0)',\n  39: '#,##0.00;(#,##0.00)',\n  40: '#,##0.00;[Red](#,##0.00)',\n  45: 'mm:ss',\n  46: '[h]:mm:ss',\n  47: 'mmss.0',\n  48: '##0.0E+0',\n  49: '@',\n  56: '\"上午/下午 \"hh\"時\"mm\"分\"ss\"秒 \"'\n};\n/* Defaults determined by systematically testing in Excel 2019 */\n\n/* These formats appear to default to other formats in the table */\n\nvar SSF_default_map = {\n  5: 37,\n  6: 38,\n  7: 39,\n  8: 40,\n  //  5 -> 37 ...  8 -> 40\n  23: 0,\n  24: 0,\n  25: 0,\n  26: 0,\n  // 23 ->  0 ... 26 ->  0\n  27: 14,\n  28: 14,\n  29: 14,\n  30: 14,\n  31: 14,\n  // 27 -> 14 ... 31 -> 14\n  50: 14,\n  51: 14,\n  52: 14,\n  53: 14,\n  54: 14,\n  // 50 -> 14 ... 58 -> 14\n  55: 14,\n  56: 14,\n  57: 14,\n  58: 14,\n  59: 1,\n  60: 2,\n  61: 3,\n  62: 4,\n  // 59 ->  1 ... 62 ->  4\n  67: 9,\n  68: 10,\n  // 67 ->  9 ... 68 -> 10\n  69: 12,\n  70: 13,\n  71: 14,\n  // 69 -> 12 ... 71 -> 14\n  72: 14,\n  73: 15,\n  74: 16,\n  75: 17,\n  // 72 -> 14 ... 75 -> 17\n  76: 20,\n  77: 21,\n  78: 22,\n  // 76 -> 20 ... 78 -> 22\n  79: 45,\n  80: 46,\n  81: 47,\n  // 79 -> 45 ... 81 -> 47\n  82: 0 // 82 ->  0 ... 65536 -> 0 (omitted)\n\n};\n/* These formats technically refer to Accounting formats with no equivalent */\n\nvar SSF_default_str = {\n  //  5 -- Currency,   0 decimal, black negative\n  5: '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n  63: '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n  //  6 -- Currency,   0 decimal, red   negative\n  6: '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n  64: '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n  //  7 -- Currency,   2 decimal, black negative\n  7: '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n  65: '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n  //  8 -- Currency,   2 decimal, red   negative\n  8: '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n  66: '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n  // 41 -- Accounting, 0 decimal, No Symbol\n  41: '_(* #,##0_);_(* \\\\(#,##0\\\\);_(* \"-\"_);_(@_)',\n  // 42 -- Accounting, 0 decimal, $  Symbol\n  42: '_(\"$\"* #,##0_);_(\"$\"* \\\\(#,##0\\\\);_(\"$\"* \"-\"_);_(@_)',\n  // 43 -- Accounting, 2 decimal, No Symbol\n  43: '_(* #,##0.00_);_(* \\\\(#,##0.00\\\\);_(* \"-\"??_);_(@_)',\n  // 44 -- Accounting, 2 decimal, $  Symbol\n  44: '_(\"$\"* #,##0.00_);_(\"$\"* \\\\(#,##0.00\\\\);_(\"$\"* \"-\"??_);_(@_)'\n};\n\nfunction SSF_frac(x\n/*:number*/\n, D\n/*:number*/\n, mixed\n/*:?boolean*/\n)\n/*:Array<number>*/\n{\n  var sgn = x < 0 ? -1 : 1;\n  var B = x * sgn;\n  var P_2 = 0,\n      P_1 = 1,\n      P = 0;\n  var Q_2 = 1,\n      Q_1 = 0,\n      Q = 0;\n  var A = Math.floor(B);\n\n  while (Q_1 < D) {\n    A = Math.floor(B);\n    P = A * P_1 + P_2;\n    Q = A * Q_1 + Q_2;\n    if (B - A < 0.00000005) break;\n    B = 1 / (B - A);\n    P_2 = P_1;\n    P_1 = P;\n    Q_2 = Q_1;\n    Q_1 = Q;\n  }\n\n  if (Q > D) {\n    if (Q_1 > D) {\n      Q = Q_2;\n      P = P_2;\n    } else {\n      Q = Q_1;\n      P = P_1;\n    }\n  }\n\n  if (!mixed) return [0, sgn * P, Q];\n  var q = Math.floor(sgn * P / Q);\n  return [q, sgn * P - q * Q, Q];\n}\n\nfunction SSF_parse_date_code(v\n/*:number*/\n, opts\n/*:?any*/\n, b2\n/*:?boolean*/\n) {\n  if (v > 2958465 || v < 0) return null;\n  var date = v | 0,\n      time = Math.floor(86400 * (v - date)),\n      dow = 0;\n  var dout = [];\n  var out = {\n    D: date,\n    T: time,\n    u: 86400 * (v - date) - time,\n    y: 0,\n    m: 0,\n    d: 0,\n    H: 0,\n    M: 0,\n    S: 0,\n    q: 0\n  };\n  if (Math.abs(out.u) < 1e-6) out.u = 0;\n  if (opts && opts.date1904) date += 1462;\n\n  if (out.u > 0.9999) {\n    out.u = 0;\n\n    if (++time == 86400) {\n      out.T = time = 0;\n      ++date;\n      ++out.D;\n    }\n  }\n\n  if (date === 60) {\n    dout = b2 ? [1317, 10, 29] : [1900, 2, 29];\n    dow = 3;\n  } else if (date === 0) {\n    dout = b2 ? [1317, 8, 29] : [1900, 1, 0];\n    dow = 6;\n  } else {\n    if (date > 60) --date;\n    /* 1 = Jan 1 1900 in Gregorian */\n\n    var d = new Date(1900, 0, 1);\n    d.setDate(d.getDate() + date - 1);\n    dout = [d.getFullYear(), d.getMonth() + 1, d.getDate()];\n    dow = d.getDay();\n    if (date < 60) dow = (dow + 6) % 7;\n    if (b2) dow = SSF_fix_hijri(d, dout);\n  }\n\n  out.y = dout[0];\n  out.m = dout[1];\n  out.d = dout[2];\n  out.S = time % 60;\n  time = Math.floor(time / 60);\n  out.M = time % 60;\n  time = Math.floor(time / 60);\n  out.H = time;\n  out.q = dow;\n  return out;\n}\n\nvar SSFbasedate = /*#__PURE__*/new Date(1899, 11, 31, 0, 0, 0);\nvar SSFdnthresh = /*#__PURE__*/SSFbasedate.getTime();\nvar SSFbase1904 = /*#__PURE__*/new Date(1900, 2, 1, 0, 0, 0);\n\nfunction datenum_local(v\n/*:Date*/\n, date1904\n/*:?boolean*/\n)\n/*:number*/\n{\n  var epoch = /*#__PURE__*/v.getTime();\n  if (date1904) epoch -= 1461 * 24 * 60 * 60 * 1000;else if (v >= SSFbase1904) epoch += 24 * 60 * 60 * 1000;\n  return (epoch - (SSFdnthresh + ( /*#__PURE__*/v.getTimezoneOffset() - /*#__PURE__*/SSFbasedate.getTimezoneOffset()) * 60000)) / (24 * 60 * 60 * 1000);\n}\n/* ECMA-376 18.8.30 numFmt*/\n\n/* Note: `toPrecision` uses standard form when prec > E and E >= -6 */\n\n/* exponent >= -9 and <= 9 */\n\n\nfunction SSF_strip_decimal(o\n/*:string*/\n)\n/*:string*/\n{\n  return o.indexOf(\".\") == -1 ? o : o.replace(/(?:\\.0*|(\\.\\d*[1-9])0+)$/, \"$1\");\n}\n/* General Exponential always shows 2 digits exp and trims the mantissa */\n\n\nfunction SSF_normalize_exp(o\n/*:string*/\n)\n/*:string*/\n{\n  if (o.indexOf(\"E\") == -1) return o;\n  return o.replace(/(?:\\.0*|(\\.\\d*[1-9])0+)[Ee]/, \"$1E\").replace(/(E[+-])(\\d)$/, \"$10$2\");\n}\n/* exponent >= -9 and <= 9 */\n\n\nfunction SSF_small_exp(v\n/*:number*/\n)\n/*:string*/\n{\n  var w = v < 0 ? 12 : 11;\n  var o = SSF_strip_decimal(v.toFixed(12));\n  if (o.length <= w) return o;\n  o = v.toPrecision(10);\n  if (o.length <= w) return o;\n  return v.toExponential(5);\n}\n/* exponent >= 11 or <= -10 likely exponential */\n\n\nfunction SSF_large_exp(v\n/*:number*/\n)\n/*:string*/\n{\n  var o = SSF_strip_decimal(v.toFixed(11));\n  return o.length > (v < 0 ? 12 : 11) || o === \"0\" || o === \"-0\" ? v.toPrecision(6) : o;\n}\n\nfunction SSF_general_num(v\n/*:number*/\n)\n/*:string*/\n{\n  var V = Math.floor(Math.log(Math.abs(v)) * Math.LOG10E),\n      o;\n  if (V >= -4 && V <= -1) o = v.toPrecision(10 + V);else if (Math.abs(V) <= 9) o = SSF_small_exp(v);else if (V === 10) o = v.toFixed(10).substr(0, 12);else o = SSF_large_exp(v);\n  return SSF_strip_decimal(SSF_normalize_exp(o.toUpperCase()));\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*/\n\n\nfunction SSF_general(v\n/*:any*/\n, opts\n/*:any*/\n) {\n  switch (typeof v) {\n    case 'string':\n      return v;\n\n    case 'boolean':\n      return v ? \"TRUE\" : \"FALSE\";\n\n    case 'number':\n      return (v | 0) === v ? v.toString(10) : SSF_general_num(v);\n\n    case 'undefined':\n      return \"\";\n\n    case 'object':\n      if (v == null) return \"\";\n      if (v instanceof Date) return SSF_format(14, datenum_local(v, opts && opts.date1904), opts);\n  }\n\n  throw new Error(\"unsupported value in General format: \" + v);\n}\n\nfunction SSF_fix_hijri(date\n/*:Date*/\n, o\n/*:[number, number, number]*/\n) {\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} //var THAI_DIGITS = \"\\u0E50\\u0E51\\u0E52\\u0E53\\u0E54\\u0E55\\u0E56\\u0E57\\u0E58\\u0E59\".split(\"\");\n\n\nfunction SSF_write_date(type\n/*:number*/\n, fmt\n/*:string*/\n, val, ss0\n/*:?number*/\n)\n/*:string*/\n{\n  var o = \"\",\n      ss = 0,\n      tt = 0,\n      y = val.y,\n      out,\n      outl = 0;\n\n  switch (type) {\n    case 98:\n      /* 'b' buddhist year */\n      y = val.y + 543;\n\n    /* falls through */\n\n    case 121:\n      /* 'y' year */\n      switch (fmt.length) {\n        case 1:\n        case 2:\n          out = y % 100;\n          outl = 2;\n          break;\n\n        default:\n          out = y % 10000;\n          outl = 4;\n          break;\n      }\n\n      break;\n\n    case 109:\n      /* 'm' month */\n      switch (fmt.length) {\n        case 1:\n        case 2:\n          out = val.m;\n          outl = fmt.length;\n          break;\n\n        case 3:\n          return months[val.m - 1][1];\n\n        case 5:\n          return months[val.m - 1][0];\n\n        default:\n          return months[val.m - 1][2];\n      }\n\n      break;\n\n    case 100:\n      /* 'd' day */\n      switch (fmt.length) {\n        case 1:\n        case 2:\n          out = val.d;\n          outl = fmt.length;\n          break;\n\n        case 3:\n          return days[val.q][0];\n\n        default:\n          return days[val.q][1];\n      }\n\n      break;\n\n    case 104:\n      /* 'h' 12-hour */\n      switch (fmt.length) {\n        case 1:\n        case 2:\n          out = 1 + (val.H + 11) % 12;\n          outl = fmt.length;\n          break;\n\n        default:\n          throw 'bad hour format: ' + fmt;\n      }\n\n      break;\n\n    case 72:\n      /* 'H' 24-hour */\n      switch (fmt.length) {\n        case 1:\n        case 2:\n          out = val.H;\n          outl = fmt.length;\n          break;\n\n        default:\n          throw 'bad hour format: ' + fmt;\n      }\n\n      break;\n\n    case 77:\n      /* 'M' minutes */\n      switch (fmt.length) {\n        case 1:\n        case 2:\n          out = val.M;\n          outl = fmt.length;\n          break;\n\n        default:\n          throw 'bad minute format: ' + fmt;\n      }\n\n      break;\n\n    case 115:\n      /* 's' seconds */\n      if (fmt != 's' && fmt != 'ss' && fmt != '.0' && fmt != '.00' && fmt != '.000') throw 'bad second format: ' + fmt;\n      if (val.u === 0 && (fmt == \"s\" || fmt == \"ss\")) return pad0(val.S, fmt.length);\n      /*::if(!ss0) ss0 = 0; */\n\n      if (ss0 >= 2) tt = ss0 === 3 ? 1000 : 100;else tt = ss0 === 1 ? 10 : 1;\n      ss = Math.round(tt * (val.S + val.u));\n      if (ss >= 60 * tt) ss = 0;\n      if (fmt === 's') return ss === 0 ? \"0\" : \"\" + ss / tt;\n      o = pad0(ss, 2 + ss0);\n      if (fmt === 'ss') return o.substr(0, 2);\n      return \".\" + o.substr(2, fmt.length - 1);\n\n    case 90:\n      /* 'Z' absolute time */\n      switch (fmt) {\n        case '[h]':\n        case '[hh]':\n          out = val.D * 24 + val.H;\n          break;\n\n        case '[m]':\n        case '[mm]':\n          out = (val.D * 24 + val.H) * 60 + val.M;\n          break;\n\n        case '[s]':\n        case '[ss]':\n          out = ((val.D * 24 + val.H) * 60 + val.M) * 60 + Math.round(val.S + val.u);\n          break;\n\n        default:\n          throw 'bad abstime format: ' + fmt;\n      }\n\n      outl = fmt.length === 3 ? 1 : 2;\n      break;\n\n    case 101:\n      /* 'e' era */\n      out = y;\n      outl = 1;\n      break;\n  }\n\n  var outstr = outl > 0 ? pad0(out, outl) : \"\";\n  return outstr;\n}\n/*jshint -W086 */\n\n/*jshint +W086 */\n\n\nfunction commaify(s\n/*:string*/\n)\n/*:string*/\n{\n  var w = 3;\n  if (s.length <= w) return s;\n  var j = s.length % w,\n      o = s.substr(0, j);\n\n  for (; j != s.length; j += w) {\n    o += (o.length > 0 ? \",\" : \"\") + s.substr(j, w);\n  }\n\n  return o;\n}\n\nvar pct1 = /%/g;\n\nfunction write_num_pct(type\n/*:string*/\n, fmt\n/*:string*/\n, val\n/*:number*/\n)\n/*:string*/\n{\n  var sfmt = fmt.replace(pct1, \"\"),\n      mul = fmt.length - sfmt.length;\n  return write_num(type, sfmt, val * Math.pow(10, 2 * mul)) + fill(\"%\", mul);\n}\n\nfunction write_num_cm(type\n/*:string*/\n, fmt\n/*:string*/\n, val\n/*:number*/\n)\n/*:string*/\n{\n  var idx = fmt.length - 1;\n\n  while (fmt.charCodeAt(idx - 1) === 44) {\n    --idx;\n  }\n\n  return write_num(type, fmt.substr(0, idx), val / Math.pow(10, 3 * (fmt.length - idx)));\n}\n\nfunction write_num_exp(fmt\n/*:string*/\n, val\n/*:number*/\n)\n/*:string*/\n{\n  var o\n  /*:string*/\n  ;\n  var idx = fmt.indexOf(\"E\") - fmt.indexOf(\".\") - 1;\n\n  if (fmt.match(/^#+0.0E\\+0$/)) {\n    if (val == 0) return \"0.0E+0\";else if (val < 0) return \"-\" + write_num_exp(fmt, -val);\n    var period = fmt.indexOf(\".\");\n    if (period === -1) period = fmt.indexOf('E');\n    var ee = Math.floor(Math.log(val) * Math.LOG10E) % period;\n    if (ee < 0) ee += period;\n    o = (val / Math.pow(10, ee)).toPrecision(idx + 1 + (period + ee) % period);\n\n    if (o.indexOf(\"e\") === -1) {\n      var fakee = Math.floor(Math.log(val) * Math.LOG10E);\n      if (o.indexOf(\".\") === -1) o = o.charAt(0) + \".\" + o.substr(1) + \"E+\" + (fakee - o.length + ee);else o += \"E+\" + (fakee - ee);\n\n      while (o.substr(0, 2) === \"0.\") {\n        o = o.charAt(0) + o.substr(2, period) + \".\" + o.substr(2 + period);\n        o = o.replace(/^0+([1-9])/, \"$1\").replace(/^0+\\./, \"0.\");\n      }\n\n      o = o.replace(/\\+-/, \"-\");\n    }\n\n    o = o.replace(/^([+-]?)(\\d*)\\.(\\d*)[Ee]/, function ($$, $1, $2, $3) {\n      return $1 + $2 + $3.substr(0, (period + ee) % period) + \".\" + $3.substr(ee) + \"E\";\n    });\n  } else o = val.toExponential(idx);\n\n  if (fmt.match(/E\\+00$/) && o.match(/e[+-]\\d$/)) o = o.substr(0, o.length - 1) + \"0\" + o.charAt(o.length - 1);\n  if (fmt.match(/E\\-/) && o.match(/e\\+/)) o = o.replace(/e\\+/, \"e\");\n  return o.replace(\"e\", \"E\");\n}\n\nvar frac1 = /# (\\?+)( ?)\\/( ?)(\\d+)/;\n\nfunction write_num_f1(r\n/*:Array<string>*/\n, aval\n/*:number*/\n, sign\n/*:string*/\n)\n/*:string*/\n{\n  var den = parseInt(r[4], 10),\n      rr = Math.round(aval * den),\n      base = Math.floor(rr / den);\n  var myn = rr - base * den,\n      myd = den;\n  return 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}\n\nfunction write_num_f2(r\n/*:Array<string>*/\n, aval\n/*:number*/\n, sign\n/*:string*/\n)\n/*:string*/\n{\n  return sign + (aval === 0 ? \"\" : \"\" + aval) + fill(\" \", r[1].length + 2 + r[4].length);\n}\n\nvar dec1 = /^#*0*\\.([0#]+)/;\nvar closeparen = /\\).*[0#]/;\nvar phone = /\\(###\\) ###\\\\?-####/;\n\nfunction hashq(str\n/*:string*/\n)\n/*:string*/\n{\n  var o = \"\",\n      cc;\n\n  for (var i = 0; i != str.length; ++i) {\n    switch (cc = str.charCodeAt(i)) {\n      case 35:\n        break;\n\n      case 63:\n        o += \" \";\n        break;\n\n      case 48:\n        o += \"0\";\n        break;\n\n      default:\n        o += String.fromCharCode(cc);\n    }\n  }\n\n  return o;\n}\n\nfunction rnd(val\n/*:number*/\n, d\n/*:number*/\n)\n/*:string*/\n{\n  var dd = Math.pow(10, d);\n  return \"\" + Math.round(val * dd) / dd;\n}\n\nfunction dec(val\n/*:number*/\n, d\n/*:number*/\n)\n/*:number*/\n{\n  var _frac = val - Math.floor(val),\n      dd = Math.pow(10, d);\n\n  if (d < ('' + Math.round(_frac * dd)).length) return 0;\n  return Math.round(_frac * dd);\n}\n\nfunction carry(val\n/*:number*/\n, d\n/*:number*/\n)\n/*:number*/\n{\n  if (d < ('' + Math.round((val - Math.floor(val)) * Math.pow(10, d))).length) {\n    return 1;\n  }\n\n  return 0;\n}\n\nfunction flr(val\n/*:number*/\n)\n/*:string*/\n{\n  if (val < 2147483647 && val > -2147483648) return \"\" + (val >= 0 ? val | 0 : val - 1 | 0);\n  return \"\" + Math.floor(val);\n}\n\nfunction write_num_flt(type\n/*:string*/\n, fmt\n/*:string*/\n, val\n/*:number*/\n)\n/*:string*/\n{\n  if (type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\n    var ffmt = fmt.replace(/\\( */, \"\").replace(/ \\)/, \"\").replace(/\\)/, \"\");\n    if (val >= 0) return write_num_flt('n', ffmt, val);\n    return '(' + write_num_flt('n', ffmt, -val) + ')';\n  }\n\n  if (fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm(type, fmt, val);\n  if (fmt.indexOf('%') !== -1) return write_num_pct(type, fmt, val);\n  if (fmt.indexOf('E') !== -1) return write_num_exp(fmt, val);\n  if (fmt.charCodeAt(0) === 36) return \"$\" + write_num_flt(type, fmt.substr(fmt.charAt(1) == ' ' ? 2 : 1), val);\n  var o;\n  var r\n  /*:?Array<string>*/\n  ,\n      ri,\n      ff,\n      aval = Math.abs(val),\n      sign = val < 0 ? \"-\" : \"\";\n  if (fmt.match(/^00+$/)) return sign + pad0r(aval, fmt.length);\n\n  if (fmt.match(/^[#?]+$/)) {\n    o = pad0r(val, 0);\n    if (o === \"0\") o = \"\";\n    return o.length > fmt.length ? o : hashq(fmt.substr(0, fmt.length - o.length)) + o;\n  }\n\n  if (r = fmt.match(frac1)) return write_num_f1(r, aval, sign);\n  if (fmt.match(/^#+0+$/)) return sign + pad0r(aval, fmt.length - fmt.indexOf(\"0\"));\n\n  if (r = fmt.match(dec1)) {\n    o = rnd(val, r[1].length).replace(/^([^\\.]+)$/, \"$1.\" + hashq(r[1])).replace(/\\.$/, \".\" + hashq(r[1])).replace(/\\.(\\d*)$/, function ($$, $1) {\n      return \".\" + $1 + fill(\"0\", hashq(\n      /*::(*/\n      r\n      /*::||[\"\"])*/\n      [1]).length - $1.length);\n    });\n    return fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./, \".\");\n  }\n\n  fmt = fmt.replace(/^#+([0.])/, \"$1\");\n\n  if (r = fmt.match(/^(0*)\\.(#*)$/)) {\n    return sign + rnd(aval, r[2].length).replace(/\\.(\\d*[1-9])0*$/, \".$1\").replace(/^(-?\\d*)$/, \"$1.\").replace(/^0\\./, r[1].length ? \"0.\" : \".\");\n  }\n\n  if (r = fmt.match(/^#{1,3},##0(\\.?)$/)) return sign + commaify(pad0r(aval, 0));\n\n  if (r = fmt.match(/^#,##0\\.([#0]*0)$/)) {\n    return 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  }\n\n  if (r = fmt.match(/^#,#*,#0/)) return write_num_flt(type, fmt.replace(/^#,#*,/, \"\"), val);\n\n  if (r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/)) {\n    o = _strrev(write_num_flt(type, fmt.replace(/[\\\\-]/g, \"\"), val));\n    ri = 0;\n    return _strrev(_strrev(fmt.replace(/\\\\/g, \"\")).replace(/[0#]/g, function (x) {\n      return ri < o.length ? o.charAt(ri++) : x === '0' ? '0' : \"\";\n    }));\n  }\n\n  if (fmt.match(phone)) {\n    o = write_num_flt(type, \"##########\", val);\n    return \"(\" + o.substr(0, 3) + \") \" + o.substr(3, 3) + \"-\" + o.substr(6);\n  }\n\n  var oa = \"\";\n\n  if (r = fmt.match(/^([#0?]+)( ?)\\/( ?)([#0?]+)/)) {\n    ri = Math.min(\n    /*::String(*/\n    r[4]\n    /*::)*/\n    .length, 7);\n    ff = SSF_frac(aval, Math.pow(10, ri) - 1, false);\n    o = \"\" + sign;\n    oa = write_num(\"n\",\n    /*::String(*/\n    r[1]\n    /*::)*/\n    , ff[1]);\n    if (oa.charAt(oa.length - 1) == \" \") oa = oa.substr(0, oa.length - 1) + \"0\";\n    o += oa +\n    /*::String(*/\n    r[2]\n    /*::)*/\n    + \"/\" +\n    /*::String(*/\n    r[3]\n    /*::)*/\n    ;\n    oa = rpad_(ff[2], ri);\n    if (oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length - oa.length)) + oa;\n    o += oa;\n    return o;\n  }\n\n  if (r = fmt.match(/^# ([#0?]+)( ?)\\/( ?)([#0?]+)/)) {\n    ri = Math.min(Math.max(r[1].length, r[4].length), 7);\n    ff = SSF_frac(aval, Math.pow(10, ri) - 1, true);\n    return 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  }\n\n  if (r = fmt.match(/^[#0?]+$/)) {\n    o = pad0r(val, 0);\n    if (fmt.length <= o.length) return o;\n    return hashq(fmt.substr(0, fmt.length - o.length)) + o;\n  }\n\n  if (r = fmt.match(/^([#0?]+)\\.([#0]+)$/)) {\n    o = \"\" + val.toFixed(Math.min(r[2].length, 10)).replace(/([^0])0+$/, \"$1\");\n    ri = o.indexOf(\".\");\n    var lres = fmt.indexOf(\".\") - ri,\n        rres = fmt.length - o.length - lres;\n    return hashq(fmt.substr(0, lres) + o + fmt.substr(fmt.length - rres));\n  }\n\n  if (r = fmt.match(/^00,000\\.([#0]*0)$/)) {\n    ri = dec(val, r[1].length);\n    return val < 0 ? \"-\" + write_num_flt(type, fmt, -val) : commaify(flr(val)).replace(/^\\d,\\d{3}$/, \"0$&\").replace(/^\\d*$/, function ($$) {\n      return \"00,\" + ($$.length < 3 ? pad0(0, 3 - $$.length) : \"\") + $$;\n    }) + \".\" + pad0(ri, r[1].length);\n  }\n\n  switch (fmt) {\n    case \"###,##0.00\":\n      return write_num_flt(type, \"#,##0.00\", val);\n\n    case \"###,###\":\n    case \"##,###\":\n    case \"#,###\":\n      var x = commaify(pad0r(aval, 0));\n      return x !== \"0\" ? sign + x : \"\";\n\n    case \"###,###.00\":\n      return write_num_flt(type, \"###,##0.00\", val).replace(/^0\\./, \".\");\n\n    case \"#,###.00\":\n      return write_num_flt(type, \"#,##0.00\", val).replace(/^0\\./, \".\");\n\n    default:\n  }\n\n  throw new Error(\"unsupported format |\" + fmt + \"|\");\n}\n\nfunction write_num_cm2(type\n/*:string*/\n, fmt\n/*:string*/\n, val\n/*:number*/\n)\n/*:string*/\n{\n  var idx = fmt.length - 1;\n\n  while (fmt.charCodeAt(idx - 1) === 44) {\n    --idx;\n  }\n\n  return write_num(type, fmt.substr(0, idx), val / Math.pow(10, 3 * (fmt.length - idx)));\n}\n\nfunction write_num_pct2(type\n/*:string*/\n, fmt\n/*:string*/\n, val\n/*:number*/\n)\n/*:string*/\n{\n  var sfmt = fmt.replace(pct1, \"\"),\n      mul = fmt.length - sfmt.length;\n  return write_num(type, sfmt, val * Math.pow(10, 2 * mul)) + fill(\"%\", mul);\n}\n\nfunction write_num_exp2(fmt\n/*:string*/\n, val\n/*:number*/\n)\n/*:string*/\n{\n  var o\n  /*:string*/\n  ;\n  var idx = fmt.indexOf(\"E\") - fmt.indexOf(\".\") - 1;\n\n  if (fmt.match(/^#+0.0E\\+0$/)) {\n    if (val == 0) return \"0.0E+0\";else if (val < 0) return \"-\" + write_num_exp2(fmt, -val);\n    var period = fmt.indexOf(\".\");\n    if (period === -1) period = fmt.indexOf('E');\n    var ee = Math.floor(Math.log(val) * Math.LOG10E) % period;\n    if (ee < 0) ee += period;\n    o = (val / Math.pow(10, ee)).toPrecision(idx + 1 + (period + ee) % period);\n\n    if (!o.match(/[Ee]/)) {\n      var fakee = Math.floor(Math.log(val) * Math.LOG10E);\n      if (o.indexOf(\".\") === -1) o = o.charAt(0) + \".\" + o.substr(1) + \"E+\" + (fakee - o.length + ee);else o += \"E+\" + (fakee - ee);\n      o = o.replace(/\\+-/, \"-\");\n    }\n\n    o = o.replace(/^([+-]?)(\\d*)\\.(\\d*)[Ee]/, function ($$, $1, $2, $3) {\n      return $1 + $2 + $3.substr(0, (period + ee) % period) + \".\" + $3.substr(ee) + \"E\";\n    });\n  } else o = val.toExponential(idx);\n\n  if (fmt.match(/E\\+00$/) && o.match(/e[+-]\\d$/)) o = o.substr(0, o.length - 1) + \"0\" + o.charAt(o.length - 1);\n  if (fmt.match(/E\\-/) && o.match(/e\\+/)) o = o.replace(/e\\+/, \"e\");\n  return o.replace(\"e\", \"E\");\n}\n\nfunction write_num_int(type\n/*:string*/\n, fmt\n/*:string*/\n, val\n/*:number*/\n)\n/*:string*/\n{\n  if (type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\n    var ffmt = fmt.replace(/\\( */, \"\").replace(/ \\)/, \"\").replace(/\\)/, \"\");\n    if (val >= 0) return write_num_int('n', ffmt, val);\n    return '(' + write_num_int('n', ffmt, -val) + ')';\n  }\n\n  if (fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm2(type, fmt, val);\n  if (fmt.indexOf('%') !== -1) return write_num_pct2(type, fmt, val);\n  if (fmt.indexOf('E') !== -1) return write_num_exp2(fmt, val);\n  if (fmt.charCodeAt(0) === 36) return \"$\" + write_num_int(type, fmt.substr(fmt.charAt(1) == ' ' ? 2 : 1), val);\n  var o;\n  var r\n  /*:?Array<string>*/\n  ,\n      ri,\n      ff,\n      aval = Math.abs(val),\n      sign = val < 0 ? \"-\" : \"\";\n  if (fmt.match(/^00+$/)) return sign + pad0(aval, fmt.length);\n\n  if (fmt.match(/^[#?]+$/)) {\n    o = \"\" + val;\n    if (val === 0) o = \"\";\n    return o.length > fmt.length ? o : hashq(fmt.substr(0, fmt.length - o.length)) + o;\n  }\n\n  if (r = fmt.match(frac1)) return write_num_f2(r, aval, sign);\n  if (fmt.match(/^#+0+$/)) return sign + pad0(aval, fmt.length - fmt.indexOf(\"0\"));\n\n  if (r = fmt.match(dec1)) {\n    /*:: if(!Array.isArray(r)) throw new Error(\"unreachable\"); */\n    o = (\"\" + val).replace(/^([^\\.]+)$/, \"$1.\" + hashq(r[1])).replace(/\\.$/, \".\" + hashq(r[1]));\n    o = o.replace(/\\.(\\d*)$/, function ($$, $1) {\n      /*:: if(!Array.isArray(r)) throw new Error(\"unreachable\"); */\n      return \".\" + $1 + fill(\"0\", hashq(r[1]).length - $1.length);\n    });\n    return fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./, \".\");\n  }\n\n  fmt = fmt.replace(/^#+([0.])/, \"$1\");\n\n  if (r = fmt.match(/^(0*)\\.(#*)$/)) {\n    return sign + (\"\" + aval).replace(/\\.(\\d*[1-9])0*$/, \".$1\").replace(/^(-?\\d*)$/, \"$1.\").replace(/^0\\./, r[1].length ? \"0.\" : \".\");\n  }\n\n  if (r = fmt.match(/^#{1,3},##0(\\.?)$/)) return sign + commaify(\"\" + aval);\n\n  if (r = fmt.match(/^#,##0\\.([#0]*0)$/)) {\n    return val < 0 ? \"-\" + write_num_int(type, fmt, -val) : commaify(\"\" + val) + \".\" + fill('0', r[1].length);\n  }\n\n  if (r = fmt.match(/^#,#*,#0/)) return write_num_int(type, fmt.replace(/^#,#*,/, \"\"), val);\n\n  if (r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/)) {\n    o = _strrev(write_num_int(type, fmt.replace(/[\\\\-]/g, \"\"), val));\n    ri = 0;\n    return _strrev(_strrev(fmt.replace(/\\\\/g, \"\")).replace(/[0#]/g, function (x) {\n      return ri < o.length ? o.charAt(ri++) : x === '0' ? '0' : \"\";\n    }));\n  }\n\n  if (fmt.match(phone)) {\n    o = write_num_int(type, \"##########\", val);\n    return \"(\" + o.substr(0, 3) + \") \" + o.substr(3, 3) + \"-\" + o.substr(6);\n  }\n\n  var oa = \"\";\n\n  if (r = fmt.match(/^([#0?]+)( ?)\\/( ?)([#0?]+)/)) {\n    ri = Math.min(\n    /*::String(*/\n    r[4]\n    /*::)*/\n    .length, 7);\n    ff = SSF_frac(aval, Math.pow(10, ri) - 1, false);\n    o = \"\" + sign;\n    oa = write_num(\"n\",\n    /*::String(*/\n    r[1]\n    /*::)*/\n    , ff[1]);\n    if (oa.charAt(oa.length - 1) == \" \") oa = oa.substr(0, oa.length - 1) + \"0\";\n    o += oa +\n    /*::String(*/\n    r[2]\n    /*::)*/\n    + \"/\" +\n    /*::String(*/\n    r[3]\n    /*::)*/\n    ;\n    oa = rpad_(ff[2], ri);\n    if (oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length - oa.length)) + oa;\n    o += oa;\n    return o;\n  }\n\n  if (r = fmt.match(/^# ([#0?]+)( ?)\\/( ?)([#0?]+)/)) {\n    ri = Math.min(Math.max(r[1].length, r[4].length), 7);\n    ff = SSF_frac(aval, Math.pow(10, ri) - 1, true);\n    return 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  }\n\n  if (r = fmt.match(/^[#0?]+$/)) {\n    o = \"\" + val;\n    if (fmt.length <= o.length) return o;\n    return hashq(fmt.substr(0, fmt.length - o.length)) + o;\n  }\n\n  if (r = fmt.match(/^([#0]+)\\.([#0]+)$/)) {\n    o = \"\" + val.toFixed(Math.min(r[2].length, 10)).replace(/([^0])0+$/, \"$1\");\n    ri = o.indexOf(\".\");\n    var lres = fmt.indexOf(\".\") - ri,\n        rres = fmt.length - o.length - lres;\n    return hashq(fmt.substr(0, lres) + o + fmt.substr(fmt.length - rres));\n  }\n\n  if (r = fmt.match(/^00,000\\.([#0]*0)$/)) {\n    return val < 0 ? \"-\" + write_num_int(type, fmt, -val) : commaify(\"\" + val).replace(/^\\d,\\d{3}$/, \"0$&\").replace(/^\\d*$/, function ($$) {\n      return \"00,\" + ($$.length < 3 ? pad0(0, 3 - $$.length) : \"\") + $$;\n    }) + \".\" + pad0(0, r[1].length);\n  }\n\n  switch (fmt) {\n    case \"###,###\":\n    case \"##,###\":\n    case \"#,###\":\n      var x = commaify(\"\" + aval);\n      return x !== \"0\" ? sign + x : \"\";\n\n    default:\n      if (fmt.match(/\\.[0#?]*$/)) return write_num_int(type, fmt.slice(0, fmt.lastIndexOf(\".\")), val) + hashq(fmt.slice(fmt.lastIndexOf(\".\")));\n  }\n\n  throw new Error(\"unsupported format |\" + fmt + \"|\");\n}\n\nfunction write_num(type\n/*:string*/\n, fmt\n/*:string*/\n, val\n/*:number*/\n)\n/*:string*/\n{\n  return (val | 0) === val ? write_num_int(type, fmt, val) : write_num_flt(type, fmt, val);\n}\n\nfunction SSF_split_fmt(fmt\n/*:string*/\n)\n/*:Array<string>*/\n{\n  var out\n  /*:Array<string>*/\n  = [];\n  var in_str = false\n  /*, cc*/\n  ;\n\n  for (var i = 0, j = 0; i < fmt.length; ++i) {\n    switch (\n    /*cc=*/\n    fmt.charCodeAt(i)) {\n      case 34:\n        /* '\"' */\n        in_str = !in_str;\n        break;\n\n      case 95:\n      case 42:\n      case 92:\n        /* '_' '*' '\\\\' */\n        ++i;\n        break;\n\n      case 59:\n        /* ';' */\n        out[out.length] = fmt.substr(j, i - j);\n        j = i + 1;\n    }\n  }\n\n  out[out.length] = fmt.substr(j);\n  if (in_str === true) throw new Error(\"Format |\" + fmt + \"| unterminated string \");\n  return out;\n}\n\nvar SSF_abstime = /\\[[HhMmSs\\u0E0A\\u0E19\\u0E17]*\\]/;\n\nfunction fmt_is_date(fmt\n/*:string*/\n)\n/*:boolean*/\n{\n  var i = 0,\n\n  /*cc = 0,*/\n  c = \"\",\n      o = \"\";\n\n  while (i < fmt.length) {\n    switch (c = fmt.charAt(i)) {\n      case 'G':\n        if (SSF_isgeneral(fmt, i)) i += 6;\n        i++;\n        break;\n\n      case '\"':\n        for (;\n        /*cc=*/\n        fmt.charCodeAt(++i) !== 34 && i < fmt.length;) {\n          /*empty*/\n        }\n\n        ++i;\n        break;\n\n      case '\\\\':\n        i += 2;\n        break;\n\n      case '_':\n        i += 2;\n        break;\n\n      case '@':\n        ++i;\n        break;\n\n      case 'B':\n      case 'b':\n        if (fmt.charAt(i + 1) === \"1\" || fmt.charAt(i + 1) === \"2\") return true;\n\n      /* falls through */\n\n      case 'M':\n      case 'D':\n      case 'Y':\n      case 'H':\n      case 'S':\n      case 'E':\n      /* falls through */\n\n      case 'm':\n      case 'd':\n      case 'y':\n      case 'h':\n      case 's':\n      case 'e':\n      case 'g':\n        return true;\n\n      case 'A':\n      case 'a':\n      case '上':\n        if (fmt.substr(i, 3).toUpperCase() === \"A/P\") return true;\n        if (fmt.substr(i, 5).toUpperCase() === \"AM/PM\") return true;\n        if (fmt.substr(i, 5).toUpperCase() === \"上午/下午\") return true;\n        ++i;\n        break;\n\n      case '[':\n        o = c;\n\n        while (fmt.charAt(i++) !== ']' && i < fmt.length) {\n          o += fmt.charAt(i);\n        }\n\n        if (o.match(SSF_abstime)) return true;\n        break;\n\n      case '.':\n      /* falls through */\n\n      case '0':\n      case '#':\n        while (i < fmt.length && (\"0#?.,E+-%\".indexOf(c = fmt.charAt(++i)) > -1 || c == '\\\\' && fmt.charAt(i + 1) == \"-\" && \"0#\".indexOf(fmt.charAt(i + 2)) > -1)) {\n          /* empty */\n        }\n\n        break;\n\n      case '?':\n        while (fmt.charAt(++i) === c) {\n          /* empty */\n        }\n\n        break;\n\n      case '*':\n        ++i;\n        if (fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i;\n        break;\n\n      case '(':\n      case ')':\n        ++i;\n        break;\n\n      case '1':\n      case '2':\n      case '3':\n      case '4':\n      case '5':\n      case '6':\n      case '7':\n      case '8':\n      case '9':\n        while (i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1) {\n          /* empty */\n        }\n\n        break;\n\n      case ' ':\n        ++i;\n        break;\n\n      default:\n        ++i;\n        break;\n    }\n  }\n\n  return false;\n}\n\nfunction eval_fmt(fmt\n/*:string*/\n, v\n/*:any*/\n, opts\n/*:any*/\n, flen\n/*:number*/\n) {\n  var out = [],\n      o = \"\",\n      i = 0,\n      c = \"\",\n      lst = 't',\n      dt,\n      j,\n      cc;\n  var hr = 'H';\n  /* Tokenize */\n\n  while (i < fmt.length) {\n    switch (c = fmt.charAt(i)) {\n      case 'G':\n        /* General */\n        if (!SSF_isgeneral(fmt, i)) throw new Error('unrecognized character ' + c + ' in ' + fmt);\n        out[out.length] = {\n          t: 'G',\n          v: 'General'\n        };\n        i += 7;\n        break;\n\n      case '\"':\n        /* Literal text */\n        for (o = \"\"; (cc = fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) {\n          o += String.fromCharCode(cc);\n        }\n\n        out[out.length] = {\n          t: 't',\n          v: o\n        };\n        ++i;\n        break;\n\n      case '\\\\':\n        var w = fmt.charAt(++i),\n            t = w === \"(\" || w === \")\" ? w : 't';\n        out[out.length] = {\n          t: t,\n          v: w\n        };\n        ++i;\n        break;\n\n      case '_':\n        out[out.length] = {\n          t: 't',\n          v: \" \"\n        };\n        i += 2;\n        break;\n\n      case '@':\n        /* Text Placeholder */\n        out[out.length] = {\n          t: 'T',\n          v: v\n        };\n        ++i;\n        break;\n\n      case 'B':\n      case 'b':\n        if (fmt.charAt(i + 1) === \"1\" || fmt.charAt(i + 1) === \"2\") {\n          if (dt == null) {\n            dt = SSF_parse_date_code(v, opts, fmt.charAt(i + 1) === \"2\");\n            if (dt == null) return \"\";\n          }\n\n          out[out.length] = {\n            t: 'X',\n            v: fmt.substr(i, 2)\n          };\n          lst = c;\n          i += 2;\n          break;\n        }\n\n      /* falls through */\n\n      case 'M':\n      case 'D':\n      case 'Y':\n      case 'H':\n      case 'S':\n      case 'E':\n        c = c.toLowerCase();\n\n      /* falls through */\n\n      case 'm':\n      case 'd':\n      case 'y':\n      case 'h':\n      case 's':\n      case 'e':\n      case 'g':\n        if (v < 0) return \"\";\n\n        if (dt == null) {\n          dt = SSF_parse_date_code(v, opts);\n          if (dt == null) return \"\";\n        }\n\n        o = c;\n\n        while (++i < fmt.length && fmt.charAt(i).toLowerCase() === c) {\n          o += c;\n        }\n\n        if (c === 'm' && lst.toLowerCase() === 'h') c = 'M';\n        if (c === 'h') c = hr;\n        out[out.length] = {\n          t: c,\n          v: o\n        };\n        lst = c;\n        break;\n\n      case 'A':\n      case 'a':\n      case '上':\n        var q = {\n          t: c,\n          v: c\n        };\n        if (dt == null) dt = SSF_parse_date_code(v, opts);\n\n        if (fmt.substr(i, 3).toUpperCase() === \"A/P\") {\n          if (dt != null) q.v = dt.H >= 12 ? \"P\" : \"A\";\n          q.t = 'T';\n          hr = 'h';\n          i += 3;\n        } else if (fmt.substr(i, 5).toUpperCase() === \"AM/PM\") {\n          if (dt != null) q.v = dt.H >= 12 ? \"PM\" : \"AM\";\n          q.t = 'T';\n          i += 5;\n          hr = 'h';\n        } else if (fmt.substr(i, 5).toUpperCase() === \"上午/下午\") {\n          if (dt != null) q.v = dt.H >= 12 ? \"下午\" : \"上午\";\n          q.t = 'T';\n          i += 5;\n          hr = 'h';\n        } else {\n          q.t = \"t\";\n          ++i;\n        }\n\n        if (dt == null && q.t === 'T') return \"\";\n        out[out.length] = q;\n        lst = c;\n        break;\n\n      case '[':\n        o = c;\n\n        while (fmt.charAt(i++) !== ']' && i < fmt.length) {\n          o += fmt.charAt(i);\n        }\n\n        if (o.slice(-1) !== ']') throw 'unterminated \"[\" block: |' + o + '|';\n\n        if (o.match(SSF_abstime)) {\n          if (dt == null) {\n            dt = SSF_parse_date_code(v, opts);\n            if (dt == null) return \"\";\n          }\n\n          out[out.length] = {\n            t: 'Z',\n            v: o.toLowerCase()\n          };\n          lst = o.charAt(1);\n        } else if (o.indexOf(\"$\") > -1) {\n          o = (o.match(/\\$([^-\\[\\]]*)/) || [])[1] || \"$\";\n          if (!fmt_is_date(fmt)) out[out.length] = {\n            t: 't',\n            v: o\n          };\n        }\n\n        break;\n\n      /* Numbers */\n\n      case '.':\n        if (dt != null) {\n          o = c;\n\n          while (++i < fmt.length && (c = fmt.charAt(i)) === \"0\") {\n            o += c;\n          }\n\n          out[out.length] = {\n            t: 's',\n            v: o\n          };\n          break;\n        }\n\n      /* falls through */\n\n      case '0':\n      case '#':\n        o = c;\n\n        while (++i < fmt.length && \"0#?.,E+-%\".indexOf(c = fmt.charAt(i)) > -1) {\n          o += c;\n        }\n\n        out[out.length] = {\n          t: 'n',\n          v: o\n        };\n        break;\n\n      case '?':\n        o = c;\n\n        while (fmt.charAt(++i) === c) {\n          o += c;\n        }\n\n        out[out.length] = {\n          t: c,\n          v: o\n        };\n        lst = c;\n        break;\n\n      case '*':\n        ++i;\n        if (fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i;\n        break;\n      // **\n\n      case '(':\n      case ')':\n        out[out.length] = {\n          t: flen === 1 ? 't' : c,\n          v: c\n        };\n        ++i;\n        break;\n\n      case '1':\n      case '2':\n      case '3':\n      case '4':\n      case '5':\n      case '6':\n      case '7':\n      case '8':\n      case '9':\n        o = c;\n\n        while (i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1) {\n          o += fmt.charAt(i);\n        }\n\n        out[out.length] = {\n          t: 'D',\n          v: o\n        };\n        break;\n\n      case ' ':\n        out[out.length] = {\n          t: c,\n          v: c\n        };\n        ++i;\n        break;\n\n      case '$':\n        out[out.length] = {\n          t: 't',\n          v: '$'\n        };\n        ++i;\n        break;\n\n      default:\n        if (\",$-+/():!^&'~{}<>=€acfijklopqrtuvwxzP\".indexOf(c) === -1) throw new Error('unrecognized character ' + c + ' in ' + fmt);\n        out[out.length] = {\n          t: 't',\n          v: c\n        };\n        ++i;\n        break;\n    }\n  }\n  /* Scan for date/time parts */\n\n\n  var bt = 0,\n      ss0 = 0,\n      ssm;\n\n  for (i = out.length - 1, lst = 't'; i >= 0; --i) {\n    switch (out[i].t) {\n      case 'h':\n      case 'H':\n        out[i].t = hr;\n        lst = 'h';\n        if (bt < 1) bt = 1;\n        break;\n\n      case 's':\n        if (ssm = out[i].v.match(/\\.0+$/)) ss0 = Math.max(ss0, ssm[0].length - 1);\n        if (bt < 3) bt = 3;\n\n      /* falls through */\n\n      case 'd':\n      case 'y':\n      case 'M':\n      case 'e':\n        lst = out[i].t;\n        break;\n\n      case 'm':\n        if (lst === 's') {\n          out[i].t = 'M';\n          if (bt < 2) bt = 2;\n        }\n\n        break;\n\n      case 'X':\n        /*if(out[i].v === \"B2\");*/\n        break;\n\n      case 'Z':\n        if (bt < 1 && out[i].v.match(/[Hh]/)) bt = 1;\n        if (bt < 2 && out[i].v.match(/[Mm]/)) bt = 2;\n        if (bt < 3 && out[i].v.match(/[Ss]/)) bt = 3;\n    }\n  }\n  /* time rounding depends on presence of minute / second / usec fields */\n\n\n  switch (bt) {\n    case 0:\n      break;\n\n    case 1:\n      /*::if(!dt) break;*/\n      if (dt.u >= 0.5) {\n        dt.u = 0;\n        ++dt.S;\n      }\n\n      if (dt.S >= 60) {\n        dt.S = 0;\n        ++dt.M;\n      }\n\n      if (dt.M >= 60) {\n        dt.M = 0;\n        ++dt.H;\n      }\n\n      break;\n\n    case 2:\n      /*::if(!dt) break;*/\n      if (dt.u >= 0.5) {\n        dt.u = 0;\n        ++dt.S;\n      }\n\n      if (dt.S >= 60) {\n        dt.S = 0;\n        ++dt.M;\n      }\n\n      break;\n  }\n  /* replace fields */\n\n\n  var nstr = \"\",\n      jj;\n\n  for (i = 0; i < out.length; ++i) {\n    switch (out[i].t) {\n      case 't':\n      case 'T':\n      case ' ':\n      case 'D':\n        break;\n\n      case 'X':\n        out[i].v = \"\";\n        out[i].t = \";\";\n        break;\n\n      case 'd':\n      case 'm':\n      case 'y':\n      case 'h':\n      case 'H':\n      case 'M':\n      case 's':\n      case 'e':\n      case 'b':\n      case 'Z':\n        /*::if(!dt) throw \"unreachable\"; */\n        out[i].v = SSF_write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0);\n        out[i].t = 't';\n        break;\n\n      case 'n':\n      case '?':\n        jj = i + 1;\n\n        while (out[jj] != null && ((c = out[jj].t) === \"?\" || c === \"D\" || (c === \" \" || c === \"t\") && out[jj + 1] != null && (out[jj + 1].t === '?' || out[jj + 1].t === \"t\" && out[jj + 1].v === '/') || out[i].t === '(' && (c === ' ' || c === 'n' || c === ')') || c === 't' && (out[jj].v === '/' || out[jj].v === ' ' && out[jj + 1] != null && out[jj + 1].t == '?'))) {\n          out[i].v += out[jj].v;\n          out[jj] = {\n            v: \"\",\n            t: \";\"\n          };\n          ++jj;\n        }\n\n        nstr += out[i].v;\n        i = jj - 1;\n        break;\n\n      case 'G':\n        out[i].t = 't';\n        out[i].v = SSF_general(v, opts);\n        break;\n    }\n  }\n\n  var vv = \"\",\n      myv,\n      ostr;\n\n  if (nstr.length > 0) {\n    if (nstr.charCodeAt(0) == 40)\n      /* '(' */\n      {\n        myv = v < 0 && nstr.charCodeAt(0) === 45 ? -v : v;\n        ostr = write_num('n', nstr, myv);\n      } else {\n      myv = v < 0 && flen > 1 ? -v : v;\n      ostr = write_num('n', nstr, myv);\n\n      if (myv < 0 && out[0] && out[0].t == 't') {\n        ostr = ostr.substr(1);\n        out[0].v = \"-\" + out[0].v;\n      }\n    }\n\n    jj = ostr.length - 1;\n    var decpt = out.length;\n\n    for (i = 0; i < out.length; ++i) {\n      if (out[i] != null && out[i].t != 't' && out[i].v.indexOf(\".\") > -1) {\n        decpt = i;\n        break;\n      }\n    }\n\n    var lasti = out.length;\n\n    if (decpt === out.length && ostr.indexOf(\"E\") === -1) {\n      for (i = out.length - 1; i >= 0; --i) {\n        if (out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;\n\n        if (jj >= out[i].v.length - 1) {\n          jj -= out[i].v.length;\n          out[i].v = ostr.substr(jj + 1, out[i].v.length);\n        } else if (jj < 0) out[i].v = \"\";else {\n          out[i].v = ostr.substr(0, jj + 1);\n          jj = -1;\n        }\n\n        out[i].t = 't';\n        lasti = i;\n      }\n\n      if (jj >= 0 && lasti < out.length) out[lasti].v = ostr.substr(0, jj + 1) + out[lasti].v;\n    } else if (decpt !== out.length && ostr.indexOf(\"E\") === -1) {\n      jj = ostr.indexOf(\".\") - 1;\n\n      for (i = decpt; i >= 0; --i) {\n        if (out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;\n        j = out[i].v.indexOf(\".\") > -1 && i === decpt ? out[i].v.indexOf(\".\") - 1 : out[i].v.length - 1;\n        vv = out[i].v.substr(j + 1);\n\n        for (; j >= 0; --j) {\n          if (jj >= 0 && (out[i].v.charAt(j) === \"0\" || out[i].v.charAt(j) === \"#\")) vv = ostr.charAt(jj--) + vv;\n        }\n\n        out[i].v = vv;\n        out[i].t = 't';\n        lasti = i;\n      }\n\n      if (jj >= 0 && lasti < out.length) out[lasti].v = ostr.substr(0, jj + 1) + out[lasti].v;\n      jj = ostr.indexOf(\".\") + 1;\n\n      for (i = decpt; i < out.length; ++i) {\n        if (out[i] == null || 'n?('.indexOf(out[i].t) === -1 && i !== decpt) continue;\n        j = out[i].v.indexOf(\".\") > -1 && i === decpt ? out[i].v.indexOf(\".\") + 1 : 0;\n        vv = out[i].v.substr(0, j);\n\n        for (; j < out[i].v.length; ++j) {\n          if (jj < ostr.length) vv += ostr.charAt(jj++);\n        }\n\n        out[i].v = vv;\n        out[i].t = 't';\n        lasti = i;\n      }\n    }\n  }\n\n  for (i = 0; i < out.length; ++i) {\n    if (out[i] != null && 'n?'.indexOf(out[i].t) > -1) {\n      myv = flen > 1 && v < 0 && i > 0 && out[i - 1].v === \"-\" ? -v : v;\n      out[i].v = write_num(out[i].t, out[i].v, myv);\n      out[i].t = 't';\n    }\n  }\n\n  var retval = \"\";\n\n  for (i = 0; i !== out.length; ++i) {\n    if (out[i] != null) retval += out[i].v;\n  }\n\n  return retval;\n}\n\nvar cfregex2 = /\\[(=|>[=]?|<[>=]?)(-?\\d+(?:\\.\\d*)?)\\]/;\n\nfunction chkcond(v, rr) {\n  if (rr == null) return false;\n  var thresh = parseFloat(rr[2]);\n\n  switch (rr[1]) {\n    case \"=\":\n      if (v == thresh) return true;\n      break;\n\n    case \">\":\n      if (v > thresh) return true;\n      break;\n\n    case \"<\":\n      if (v < thresh) return true;\n      break;\n\n    case \"<>\":\n      if (v != thresh) return true;\n      break;\n\n    case \">=\":\n      if (v >= thresh) return true;\n      break;\n\n    case \"<=\":\n      if (v <= thresh) return true;\n      break;\n  }\n\n  return false;\n}\n\nfunction choose_fmt(f\n/*:string*/\n, v\n/*:any*/\n) {\n  var fmt = SSF_split_fmt(f);\n  var l = fmt.length,\n      lat = fmt[l - 1].indexOf(\"@\");\n  if (l < 4 && lat > -1) --l;\n  if (fmt.length > 4) throw new Error(\"cannot find right format for |\" + fmt.join(\"|\") + \"|\");\n  if (typeof v !== \"number\") return [4, fmt.length === 4 || lat > -1 ? fmt[fmt.length - 1] : \"@\"];\n\n  switch (fmt.length) {\n    case 1:\n      fmt = lat > -1 ? [\"General\", \"General\", \"General\", fmt[0]] : [fmt[0], fmt[0], fmt[0], \"@\"];\n      break;\n\n    case 2:\n      fmt = lat > -1 ? [fmt[0], fmt[0], fmt[0], fmt[1]] : [fmt[0], fmt[1], fmt[0], \"@\"];\n      break;\n\n    case 3:\n      fmt = lat > -1 ? [fmt[0], fmt[1], fmt[0], fmt[2]] : [fmt[0], fmt[1], fmt[2], \"@\"];\n      break;\n\n    case 4:\n      break;\n  }\n\n  var ff = v > 0 ? fmt[0] : v < 0 ? fmt[1] : fmt[2];\n  if (fmt[0].indexOf(\"[\") === -1 && fmt[1].indexOf(\"[\") === -1) return [l, ff];\n\n  if (fmt[0].match(/\\[[=<>]/) != null || fmt[1].match(/\\[[=<>]/) != null) {\n    var m1 = fmt[0].match(cfregex2);\n    var m2 = fmt[1].match(cfregex2);\n    return chkcond(v, m1) ? [l, fmt[0]] : chkcond(v, m2) ? [l, fmt[1]] : [l, fmt[m1 != null && m2 != null ? 2 : 1]];\n  }\n\n  return [l, ff];\n}\n\nfunction SSF_format(fmt\n/*:string|number*/\n, v\n/*:any*/\n, o\n/*:?any*/\n) {\n  if (o == null) o = {};\n  var sfmt = \"\";\n\n  switch (typeof fmt) {\n    case \"string\":\n      if (fmt == \"m/d/yy\" && o.dateNF) sfmt = o.dateNF;else sfmt = fmt;\n      break;\n\n    case \"number\":\n      if (fmt == 14 && o.dateNF) sfmt = o.dateNF;else sfmt = (o.table != null ? o.table\n      /*:any*/\n      : table_fmt)[fmt];\n      if (sfmt == null) sfmt = o.table && o.table[SSF_default_map[fmt]] || table_fmt[SSF_default_map[fmt]];\n      if (sfmt == null) sfmt = SSF_default_str[fmt] || \"General\";\n      break;\n  }\n\n  if (SSF_isgeneral(sfmt, 0)) return SSF_general(v, o);\n  if (v instanceof Date) v = datenum_local(v, o.date1904);\n  var f = choose_fmt(sfmt, v);\n  if (SSF_isgeneral(f[1])) return SSF_general(v, o);\n  if (v === true) v = \"TRUE\";else if (v === false) v = \"FALSE\";else if (v === \"\" || v == null) return \"\";\n  return eval_fmt(f[1], v, o, f[0]);\n}\n\nfunction SSF_load(fmt\n/*:string*/\n, idx\n/*:?number*/\n)\n/*:number*/\n{\n  if (typeof idx != 'number') {\n    idx = +idx || -1;\n    /*::if(typeof idx != 'number') return 0x188; */\n\n    for (var i = 0; i < 0x0188; ++i) {\n      /*::if(typeof idx != 'number') return 0x188; */\n      if (table_fmt[i] == undefined) {\n        if (idx < 0) idx = i;\n        continue;\n      }\n\n      if (table_fmt[i] == fmt) {\n        idx = i;\n        break;\n      }\n    }\n    /*::if(typeof idx != 'number') return 0x188; */\n\n\n    if (idx < 0) idx = 0x187;\n  }\n  /*::if(typeof idx != 'number') return 0x188; */\n\n\n  table_fmt[idx] = fmt;\n  return idx;\n}\n\nfunction SSF_load_table(tbl\n/*:SSFTable*/\n)\n/*:void*/\n{\n  for (var i = 0; i != 0x0188; ++i) {\n    if (tbl[i] !== undefined) SSF_load(tbl[i], i);\n  }\n}\n\nfunction make_ssf() {\n  table_fmt = SSF_init_table();\n}\n\nvar SSF = {\n  format: SSF_format,\n  load: SSF_load,\n  _table: table_fmt,\n  load_table: SSF_load_table,\n  parse_date_code: SSF_parse_date_code,\n  is_date: fmt_is_date,\n  get_table: function get_table() {\n    return SSF._table = table_fmt;\n  }\n};\nvar SSFImplicit\n/*{[number]:string}*/\n= {\n  \"5\": '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n  \"6\": '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n  \"7\": '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n  \"8\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n  \"23\": 'General',\n  \"24\": 'General',\n  \"25\": 'General',\n  \"26\": 'General',\n  \"27\": 'm/d/yy',\n  \"28\": 'm/d/yy',\n  \"29\": 'm/d/yy',\n  \"30\": 'm/d/yy',\n  \"31\": 'm/d/yy',\n  \"32\": 'h:mm:ss',\n  \"33\": 'h:mm:ss',\n  \"34\": 'h:mm:ss',\n  \"35\": 'h:mm:ss',\n  \"36\": 'm/d/yy',\n  \"41\": '_(* #,##0_);_(* \\(#,##0\\);_(* \"-\"_);_(@_)',\n  \"42\": '_(\"$\"* #,##0_);_(\"$\"* \\(#,##0\\);_(\"$\"* \"-\"_);_(@_)',\n  \"43\": '_(* #,##0.00_);_(* \\(#,##0.00\\);_(* \"-\"??_);_(@_)',\n  \"44\": '_(\"$\"* #,##0.00_);_(\"$\"* \\(#,##0.00\\);_(\"$\"* \"-\"??_);_(@_)',\n  \"50\": 'm/d/yy',\n  \"51\": 'm/d/yy',\n  \"52\": 'm/d/yy',\n  \"53\": 'm/d/yy',\n  \"54\": 'm/d/yy',\n  \"55\": 'm/d/yy',\n  \"56\": 'm/d/yy',\n  \"57\": 'm/d/yy',\n  \"58\": 'm/d/yy',\n  \"59\": '0',\n  \"60\": '0.00',\n  \"61\": '#,##0',\n  \"62\": '#,##0.00',\n  \"63\": '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n  \"64\": '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n  \"65\": '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n  \"66\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n  \"67\": '0%',\n  \"68\": '0.00%',\n  \"69\": '# ?/?',\n  \"70\": '# ??/??',\n  \"71\": 'm/d/yy',\n  \"72\": 'm/d/yy',\n  \"73\": 'd-mmm-yy',\n  \"74\": 'd-mmm',\n  \"75\": 'mmm-yy',\n  \"76\": 'h:mm',\n  \"77\": 'h:mm:ss',\n  \"78\": 'm/d/yy h:mm',\n  \"79\": 'mm:ss',\n  \"80\": '[h]:mm:ss',\n  \"81\": 'mmss.0'\n}\n/*:any*/\n;\n/* dateNF parse TODO: move to SSF */\n\nvar dateNFregex = /[dD]+|[mM]+|[yYeE]+|[Hh]+|[Ss]+/g;\n\nfunction dateNF_regex(dateNF\n/*:string|number*/\n)\n/*:RegExp*/\n{\n  var fmt = typeof dateNF == \"number\" ? table_fmt[dateNF] : dateNF;\n  fmt = fmt.replace(dateNFregex, \"(\\\\d+)\");\n  return new RegExp(\"^\" + fmt + \"$\");\n}\n\nfunction dateNF_fix(str\n/*:string*/\n, dateNF\n/*:string*/\n, match\n/*:Array<string>*/\n)\n/*:string*/\n{\n  var Y = -1,\n      m = -1,\n      d = -1,\n      H = -1,\n      M = -1,\n      S = -1;\n  (dateNF.match(dateNFregex) || []).forEach(function (n, i) {\n    var v = parseInt(match[i + 1], 10);\n\n    switch (n.toLowerCase().charAt(0)) {\n      case 'y':\n        Y = v;\n        break;\n\n      case 'd':\n        d = v;\n        break;\n\n      case 'h':\n        H = v;\n        break;\n\n      case 's':\n        S = v;\n        break;\n\n      case 'm':\n        if (H >= 0) M = v;else m = v;\n        break;\n    }\n  });\n\n  if (S >= 0 && M == -1 && m >= 0) {\n    M = m;\n    m = -1;\n  }\n\n  var datestr = (\"\" + (Y >= 0 ? Y : new Date().getFullYear())).slice(-4) + \"-\" + (\"00\" + (m >= 1 ? m : 1)).slice(-2) + \"-\" + (\"00\" + (d >= 1 ? d : 1)).slice(-2);\n  if (datestr.length == 7) datestr = \"0\" + datestr;\n  if (datestr.length == 8) datestr = \"20\" + datestr;\n  var timestr = (\"00\" + (H >= 0 ? H : 0)).slice(-2) + \":\" + (\"00\" + (M >= 0 ? M : 0)).slice(-2) + \":\" + (\"00\" + (S >= 0 ? S : 0)).slice(-2);\n  if (H == -1 && M == -1 && S == -1) return datestr;\n  if (Y == -1 && m == -1 && d == -1) return timestr;\n  return datestr + \"T\" + timestr;\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\n/* cfb.js (C) 2013-present SheetJS -- http://sheetjs.com */\n\n/* vim: set ts=2: */\n\n/*jshint eqnull:true */\n\n/*exported CFB */\n\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\n/* crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */\n\n/* vim: set ts=2: */\n\n/*exported CRC32 */\n\n\nvar CRC32 = /*#__PURE__*/function () {\n  var CRC32 = {};\n  CRC32.version = '1.2.0';\n  /* see perf/crc32table.js */\n\n  /*global Int32Array */\n\n  function signed_crc_table()\n  /*:any*/\n  {\n    var c = 0,\n        table\n    /*:Array<number>*/\n    = new Array(256);\n\n    for (var n = 0; n != 256; ++n) {\n      c = n;\n      c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n      c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n      c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n      c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n      c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n      c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n      c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n      c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n      table[n] = c;\n    }\n\n    return typeof Int32Array !== 'undefined' ? new Int32Array(table) : table;\n  }\n\n  var T0 = signed_crc_table();\n\n  function slice_by_16_tables(T) {\n    var c = 0,\n        v = 0,\n        n = 0,\n        table\n    /*:Array<number>*/\n    = typeof Int32Array !== 'undefined' ? new Int32Array(4096) : new Array(4096);\n\n    for (n = 0; n != 256; ++n) {\n      table[n] = T[n];\n    }\n\n    for (n = 0; n != 256; ++n) {\n      v = T[n];\n\n      for (c = 256 + n; c < 4096; c += 256) {\n        v = table[c] = v >>> 8 ^ T[v & 0xFF];\n      }\n    }\n\n    var out = [];\n\n    for (n = 1; n != 16; ++n) {\n      out[n - 1] = typeof Int32Array !== 'undefined' ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256);\n    }\n\n    return out;\n  }\n\n  var TT = slice_by_16_tables(T0);\n  var T1 = TT[0],\n      T2 = TT[1],\n      T3 = TT[2],\n      T4 = TT[3],\n      T5 = TT[4];\n  var T6 = TT[5],\n      T7 = TT[6],\n      T8 = TT[7],\n      T9 = TT[8],\n      Ta = TT[9];\n  var Tb = TT[10],\n      Tc = TT[11],\n      Td = TT[12],\n      Te = TT[13],\n      Tf = TT[14];\n\n  function crc32_bstr(bstr\n  /*:string*/\n  , seed\n  /*:number*/\n  )\n  /*:number*/\n  {\n    var C = seed\n    /*:: ? 0 : 0 */\n    ^ -1;\n\n    for (var i = 0, L = bstr.length; i < L;) {\n      C = C >>> 8 ^ T0[(C ^ bstr.charCodeAt(i++)) & 0xFF];\n    }\n\n    return ~C;\n  }\n\n  function crc32_buf(B\n  /*:Uint8Array|Array<number>*/\n  , seed\n  /*:number*/\n  )\n  /*:number*/\n  {\n    var C = seed\n    /*:: ? 0 : 0 */\n    ^ -1,\n        L = B.length - 15,\n        i = 0;\n\n    for (; i < L;) {\n      C = Tf[B[i++] ^ C & 255] ^ Te[B[i++] ^ C >> 8 & 255] ^ Td[B[i++] ^ C >> 16 & 255] ^ Tc[B[i++] ^ C >>> 24] ^ Tb[B[i++]] ^ Ta[B[i++]] ^ T9[B[i++]] ^ T8[B[i++]] ^ T7[B[i++]] ^ T6[B[i++]] ^ T5[B[i++]] ^ T4[B[i++]] ^ T3[B[i++]] ^ T2[B[i++]] ^ T1[B[i++]] ^ T0[B[i++]];\n    }\n\n    L += 15;\n\n    while (i < L) {\n      C = C >>> 8 ^ T0[(C ^ B[i++]) & 0xFF];\n    }\n\n    return ~C;\n  }\n\n  function crc32_str(str\n  /*:string*/\n  , seed\n  /*:number*/\n  )\n  /*:number*/\n  {\n    var C = seed ^ -1;\n\n    for (var i = 0, L = str.length, c = 0, d = 0; i < L;) {\n      c = str.charCodeAt(i++);\n\n      if (c < 0x80) {\n        C = C >>> 8 ^ T0[(C ^ c) & 0xFF];\n      } else if (c < 0x800) {\n        C = C >>> 8 ^ T0[(C ^ (192 | c >> 6 & 31)) & 0xFF];\n        C = C >>> 8 ^ T0[(C ^ (128 | c & 63)) & 0xFF];\n      } else if (c >= 0xD800 && c < 0xE000) {\n        c = (c & 1023) + 64;\n        d = str.charCodeAt(i++) & 1023;\n        C = C >>> 8 ^ T0[(C ^ (240 | c >> 8 & 7)) & 0xFF];\n        C = C >>> 8 ^ T0[(C ^ (128 | c >> 2 & 63)) & 0xFF];\n        C = C >>> 8 ^ T0[(C ^ (128 | d >> 6 & 15 | (c & 3) << 4)) & 0xFF];\n        C = C >>> 8 ^ T0[(C ^ (128 | d & 63)) & 0xFF];\n      } else {\n        C = C >>> 8 ^ T0[(C ^ (224 | c >> 12 & 15)) & 0xFF];\n        C = C >>> 8 ^ T0[(C ^ (128 | c >> 6 & 63)) & 0xFF];\n        C = C >>> 8 ^ T0[(C ^ (128 | c & 63)) & 0xFF];\n      }\n    }\n\n    return ~C;\n  }\n\n  CRC32.table = T0;\n  CRC32.bstr = crc32_bstr;\n  CRC32.buf = crc32_buf;\n  CRC32.str = crc32_str;\n  return CRC32;\n}();\n/* [MS-CFB] v20171201 */\n\n\nvar CFB = /*#__PURE__*/function _CFB() {\n  var exports = {};\n  exports.version = '1.2.1';\n  /* [MS-CFB] 2.6.4 */\n\n  function namecmp(l\n  /*:string*/\n  , r\n  /*:string*/\n  )\n  /*:number*/\n  {\n    var L = l.split(\"/\"),\n        R = r.split(\"/\");\n\n    for (var i = 0, c = 0, Z = Math.min(L.length, R.length); i < Z; ++i) {\n      if (c = L[i].length - R[i].length) return c;\n      if (L[i] != R[i]) return L[i] < R[i] ? -1 : 1;\n    }\n\n    return L.length - R.length;\n  }\n\n  function dirname(p\n  /*:string*/\n  )\n  /*:string*/\n  {\n    if (p.charAt(p.length - 1) == \"/\") return p.slice(0, -1).indexOf(\"/\") === -1 ? p : dirname(p.slice(0, -1));\n    var c = p.lastIndexOf(\"/\");\n    return c === -1 ? p : p.slice(0, c + 1);\n  }\n\n  function filename(p\n  /*:string*/\n  )\n  /*:string*/\n  {\n    if (p.charAt(p.length - 1) == \"/\") return filename(p.slice(0, -1));\n    var c = p.lastIndexOf(\"/\");\n    return c === -1 ? p : p.slice(c + 1);\n  }\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 */\n\n\n  function write_dos_date(buf\n  /*:CFBlob*/\n  , date\n  /*:Date|string*/\n  ) {\n    if (typeof date === \"string\") date = new Date(date);\n    var hms\n    /*:number*/\n    = date.getHours();\n    hms = hms << 6 | date.getMinutes();\n    hms = hms << 5 | date.getSeconds() >>> 1;\n    buf.write_shift(2, hms);\n    var ymd\n    /*:number*/\n    = date.getFullYear() - 1980;\n    ymd = ymd << 4 | date.getMonth() + 1;\n    ymd = ymd << 5 | date.getDate();\n    buf.write_shift(2, ymd);\n  }\n  /* read four bytes from buf and interpret as a DOS date */\n\n\n  function parse_dos_date(buf\n  /*:CFBlob*/\n  )\n  /*:Date*/\n  {\n    var hms = buf.read_shift(2) & 0xFFFF;\n    var ymd = buf.read_shift(2) & 0xFFFF;\n    var val = new Date();\n    var d = ymd & 0x1F;\n    ymd >>>= 5;\n    var m = ymd & 0x0F;\n    ymd >>>= 4;\n    val.setMilliseconds(0);\n    val.setFullYear(ymd + 1980);\n    val.setMonth(m - 1);\n    val.setDate(d);\n    var S = hms & 0x1F;\n    hms >>>= 5;\n    var M = hms & 0x3F;\n    hms >>>= 6;\n    val.setHours(hms);\n    val.setMinutes(M);\n    val.setSeconds(S << 1);\n    return val;\n  }\n\n  function parse_extra_field(blob\n  /*:CFBlob*/\n  )\n  /*:any*/\n  {\n    prep_blob(blob, 0);\n    var o =\n    /*::(*/\n    {}\n    /*:: :any)*/\n    ;\n    var flags = 0;\n\n    while (blob.l <= blob.length - 4) {\n      var type = blob.read_shift(2);\n      var sz = blob.read_shift(2),\n          tgt = blob.l + sz;\n      var p = {};\n\n      switch (type) {\n        /* UNIX-style Timestamps */\n        case 0x5455:\n          {\n            flags = blob.read_shift(1);\n            if (flags & 1) p.mtime = blob.read_shift(4);\n            /* for some reason, CD flag corresponds to LFH */\n\n            if (sz > 5) {\n              if (flags & 2) p.atime = blob.read_shift(4);\n              if (flags & 4) p.ctime = blob.read_shift(4);\n            }\n\n            if (p.mtime) p.mt = new Date(p.mtime * 1000);\n          }\n          break;\n      }\n\n      blob.l = tgt;\n      o[type] = p;\n    }\n\n    return o;\n  }\n\n  var fs\n  /*:: = require('fs'); */\n  ;\n\n  function get_fs() {\n    return fs || (fs = {});\n  }\n\n  function parse(file\n  /*:RawBytes*/\n  , options\n  /*:CFBReadOpts*/\n  )\n  /*:CFBContainer*/\n  {\n    if (file[0] == 0x50 && file[1] == 0x4b) return parse_zip(file, options);\n    if ((file[0] | 0x20) == 0x6d && (file[1] | 0x20) == 0x69) return parse_mad(file, options);\n    if (file.length < 512) throw new Error(\"CFB file size \" + file.length + \" < 512\");\n    var mver = 3;\n    var ssz = 512;\n    var nmfs = 0; // number of mini FAT sectors\n\n    var difat_sec_cnt = 0;\n    var dir_start = 0;\n    var minifat_start = 0;\n    var difat_start = 0;\n    var fat_addrs\n    /*:Array<number>*/\n    = []; // locations of FAT sectors\n\n    /* [MS-CFB] 2.2 Compound File Header */\n\n    var blob\n    /*:CFBlob*/\n    =\n    /*::(*/\n    file.slice(0, 512)\n    /*:: :any)*/\n    ;\n    prep_blob(blob, 0);\n    /* major version */\n\n    var mv = check_get_mver(blob);\n    mver = mv[0];\n\n    switch (mver) {\n      case 3:\n        ssz = 512;\n        break;\n\n      case 4:\n        ssz = 4096;\n        break;\n\n      case 0:\n        if (mv[1] == 0) return parse_zip(file, options);\n\n      /* falls through */\n\n      default:\n        throw new Error(\"Major Version: Expected 3 or 4 saw \" + mver);\n    }\n    /* reprocess header */\n\n\n    if (ssz !== 512) {\n      blob =\n      /*::(*/\n      file.slice(0, ssz)\n      /*:: :any)*/\n      ;\n      prep_blob(blob, 28\n      /* blob.l */\n      );\n    }\n    /* Save header for final object */\n\n\n    var header\n    /*:RawBytes*/\n    = file.slice(0, ssz);\n    check_shifts(blob, mver); // Number of Directory Sectors\n\n    var dir_cnt\n    /*:number*/\n    = blob.read_shift(4, 'i');\n    if (mver === 3 && dir_cnt !== 0) throw new Error('# Directory Sectors: Expected 0 saw ' + dir_cnt); // Number of FAT Sectors\n\n    blob.l += 4; // First Directory Sector Location\n\n    dir_start = blob.read_shift(4, 'i'); // Transaction Signature\n\n    blob.l += 4; // Mini Stream Cutoff Size\n\n    blob.chk('00100000', 'Mini Stream Cutoff Size: '); // First Mini FAT Sector Location\n\n    minifat_start = blob.read_shift(4, 'i'); // Number of Mini FAT Sectors\n\n    nmfs = blob.read_shift(4, 'i'); // First DIFAT sector location\n\n    difat_start = blob.read_shift(4, 'i'); // Number of DIFAT Sectors\n\n    difat_sec_cnt = blob.read_shift(4, 'i'); // Grab FAT Sector Locations\n\n    for (var q = -1, j = 0; j < 109; ++j) {\n      /* 109 = (512 - blob.l)>>>2; */\n      q = blob.read_shift(4, 'i');\n      if (q < 0) break;\n      fat_addrs[j] = q;\n    }\n    /** Break the file up into sectors */\n\n\n    var sectors\n    /*:Array<RawBytes>*/\n    = sectorify(file, ssz);\n    sleuth_fat(difat_start, difat_sec_cnt, sectors, ssz, fat_addrs);\n    /** Chains */\n\n    var sector_list\n    /*:SectorList*/\n    = make_sector_list(sectors, dir_start, fat_addrs, ssz);\n    sector_list[dir_start].name = \"!Directory\";\n    if (nmfs > 0 && minifat_start !== ENDOFCHAIN) sector_list[minifat_start].name = \"!MiniFAT\";\n    sector_list[fat_addrs[0]].name = \"!FAT\";\n    sector_list.fat_addrs = fat_addrs;\n    sector_list.ssz = ssz;\n    /* [MS-CFB] 2.6.1 Compound File Directory Entry */\n\n    var files\n    /*:CFBFiles*/\n    = {},\n        Paths\n    /*:Array<string>*/\n    = [],\n        FileIndex\n    /*:CFBFileIndex*/\n    = [],\n        FullPaths\n    /*:Array<string>*/\n    = [];\n    read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, minifat_start);\n    build_full_paths(FileIndex, FullPaths, Paths);\n    Paths.shift();\n    var o = {\n      FileIndex: FileIndex,\n      FullPaths: FullPaths\n    }; // $FlowIgnore\n\n    if (options && options.raw) o.raw = {\n      header: header,\n      sectors: sectors\n    };\n    return o;\n  } // parse\n\n  /* [MS-CFB] 2.2 Compound File Header -- read up to major version */\n\n\n  function check_get_mver(blob\n  /*:CFBlob*/\n  )\n  /*:[number, number]*/\n  {\n    if (blob[blob.l] == 0x50 && blob[blob.l + 1] == 0x4b) return [0, 0]; // header signature 8\n\n    blob.chk(HEADER_SIGNATURE, 'Header Signature: '); // clsid 16\n    //blob.chk(HEADER_CLSID, 'CLSID: ');\n\n    blob.l += 16; // minor version 2\n\n    var mver\n    /*:number*/\n    = blob.read_shift(2, 'u');\n    return [blob.read_shift(2, 'u'), mver];\n  }\n\n  function check_shifts(blob\n  /*:CFBlob*/\n  , mver\n  /*:number*/\n  )\n  /*:void*/\n  {\n    var shift = 0x09; // Byte Order\n    //blob.chk('feff', 'Byte Order: '); // note: some writers put 0xffff\n\n    blob.l += 2; // Sector Shift\n\n    switch (shift = blob.read_shift(2)) {\n      case 0x09:\n        if (mver != 3) throw new Error('Sector Shift: Expected 9 saw ' + shift);\n        break;\n\n      case 0x0c:\n        if (mver != 4) throw new Error('Sector Shift: Expected 12 saw ' + shift);\n        break;\n\n      default:\n        throw new Error('Sector Shift: Expected 9 or 12 saw ' + shift);\n    } // Mini Sector Shift\n\n\n    blob.chk('0600', 'Mini Sector Shift: '); // Reserved\n\n    blob.chk('000000000000', 'Reserved: ');\n  }\n  /** Break the file up into sectors */\n\n\n  function sectorify(file\n  /*:RawBytes*/\n  , ssz\n  /*:number*/\n  )\n  /*:Array<RawBytes>*/\n  {\n    var nsectors = Math.ceil(file.length / ssz) - 1;\n    var sectors\n    /*:Array<RawBytes>*/\n    = [];\n\n    for (var i = 1; i < nsectors; ++i) {\n      sectors[i - 1] = file.slice(i * ssz, (i + 1) * ssz);\n    }\n\n    sectors[nsectors - 1] = file.slice(nsectors * ssz);\n    return sectors;\n  }\n  /* [MS-CFB] 2.6.4 Red-Black Tree */\n\n\n  function build_full_paths(FI\n  /*:CFBFileIndex*/\n  , FP\n  /*:Array<string>*/\n  , Paths\n  /*:Array<string>*/\n  )\n  /*:void*/\n  {\n    var i = 0,\n        L = 0,\n        R = 0,\n        C = 0,\n        j = 0,\n        pl = Paths.length;\n    var dad\n    /*:Array<number>*/\n    = [],\n        q\n    /*:Array<number>*/\n    = [];\n\n    for (; i < pl; ++i) {\n      dad[i] = q[i] = i;\n      FP[i] = Paths[i];\n    }\n\n    for (; j < q.length; ++j) {\n      i = q[j];\n      L = FI[i].L;\n      R = FI[i].R;\n      C = FI[i].C;\n\n      if (dad[i] === i) {\n        if (L !== -1\n        /*NOSTREAM*/\n        && dad[L] !== L) dad[i] = dad[L];\n        if (R !== -1 && dad[R] !== R) dad[i] = dad[R];\n      }\n\n      if (C !== -1\n      /*NOSTREAM*/\n      ) dad[C] = i;\n\n      if (L !== -1 && i != dad[i]) {\n        dad[L] = dad[i];\n        if (q.lastIndexOf(L) < j) q.push(L);\n      }\n\n      if (R !== -1 && i != dad[i]) {\n        dad[R] = dad[i];\n        if (q.lastIndexOf(R) < j) q.push(R);\n      }\n    }\n\n    for (i = 1; i < pl; ++i) {\n      if (dad[i] === i) {\n        if (R !== -1\n        /*NOSTREAM*/\n        && dad[R] !== R) dad[i] = dad[R];else if (L !== -1 && dad[L] !== L) dad[i] = dad[L];\n      }\n    }\n\n    for (i = 1; i < pl; ++i) {\n      if (FI[i].type === 0\n      /* unknown */\n      ) continue;\n      j = i;\n      if (j != dad[j]) do {\n        j = dad[j];\n        FP[i] = FP[j] + \"/\" + FP[i];\n      } while (j !== 0 && -1 !== dad[j] && j != dad[j]);\n      dad[i] = -1;\n    }\n\n    FP[0] += \"/\";\n\n    for (i = 1; i < pl; ++i) {\n      if (FI[i].type !== 2\n      /* stream */\n      ) FP[i] += \"/\";\n    }\n  }\n\n  function get_mfat_entry(entry\n  /*:CFBEntry*/\n  , payload\n  /*:RawBytes*/\n  , mini\n  /*:?RawBytes*/\n  )\n  /*:CFBlob*/\n  {\n    var start = entry.start,\n        size = entry.size; //return (payload.slice(start*MSSZ, start*MSSZ + size)/*:any*/);\n\n    var o = [];\n    var idx = start;\n\n    while (mini && size > 0 && idx >= 0) {\n      o.push(payload.slice(idx * MSSZ, idx * MSSZ + MSSZ));\n      size -= MSSZ;\n      idx = __readInt32LE(mini, idx * 4);\n    }\n\n    if (o.length === 0) return new_buf(0)\n    /*:any*/\n    ;\n    return bconcat(o).slice(0, entry.size)\n    /*: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 */\n\n\n  function sleuth_fat(idx\n  /*:number*/\n  , cnt\n  /*:number*/\n  , sectors\n  /*:Array<RawBytes>*/\n  , ssz\n  /*:number*/\n  , fat_addrs)\n  /*:void*/\n  {\n    var q\n    /*:number*/\n    = ENDOFCHAIN;\n\n    if (idx === ENDOFCHAIN) {\n      if (cnt !== 0) throw new Error(\"DIFAT chain shorter than expected\");\n    } else if (idx !== -1\n    /*FREESECT*/\n    ) {\n      var sector = sectors[idx],\n          m = (ssz >>> 2) - 1;\n      if (!sector) return;\n\n      for (var i = 0; i < m; ++i) {\n        if ((q = __readInt32LE(sector, i * 4)) === ENDOFCHAIN) break;\n        fat_addrs.push(q);\n      }\n\n      sleuth_fat(__readInt32LE(sector, ssz - 4), cnt - 1, sectors, ssz, fat_addrs);\n    }\n  }\n  /** Follow the linked list of sectors for a given starting point */\n\n\n  function get_sector_list(sectors\n  /*:Array<RawBytes>*/\n  , start\n  /*:number*/\n  , fat_addrs\n  /*:Array<number>*/\n  , ssz\n  /*:number*/\n  , chkd\n  /*:?Array<boolean>*/\n  )\n  /*:SectorEntry*/\n  {\n    var buf\n    /*:Array<number>*/\n    = [],\n        buf_chain\n    /*:Array<any>*/\n    = [];\n    if (!chkd) chkd = [];\n    var modulus = ssz - 1,\n        j = 0,\n        jj = 0;\n\n    for (j = start; j >= 0;) {\n      chkd[j] = true;\n      buf[buf.length] = j;\n      buf_chain.push(sectors[j]);\n      var addr = fat_addrs[Math.floor(j * 4 / ssz)];\n      jj = j * 4 & modulus;\n      if (ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \" + ssz);\n      if (!sectors[addr]) break;\n      j = __readInt32LE(sectors[addr], jj);\n    }\n\n    return {\n      nodes: buf,\n      data: __toBuffer([buf_chain])\n    };\n  }\n  /** Chase down the sector linked lists */\n\n\n  function make_sector_list(sectors\n  /*:Array<RawBytes>*/\n  , dir_start\n  /*:number*/\n  , fat_addrs\n  /*:Array<number>*/\n  , ssz\n  /*:number*/\n  )\n  /*:SectorList*/\n  {\n    var sl = sectors.length,\n        sector_list\n    /*:SectorList*/\n    = []\n    /*:any*/\n    ;\n    var chkd\n    /*:Array<boolean>*/\n    = [],\n        buf\n    /*:Array<number>*/\n    = [],\n        buf_chain\n    /*:Array<RawBytes>*/\n    = [];\n    var modulus = ssz - 1,\n        i = 0,\n        j = 0,\n        k = 0,\n        jj = 0;\n\n    for (i = 0; i < sl; ++i) {\n      buf = []\n      /*:Array<number>*/\n      ;\n      k = i + dir_start;\n      if (k >= sl) k -= sl;\n      if (chkd[k]) continue;\n      buf_chain = [];\n      var seen = [];\n\n      for (j = k; j >= 0;) {\n        seen[j] = true;\n        chkd[j] = true;\n        buf[buf.length] = j;\n        buf_chain.push(sectors[j]);\n        var addr\n        /*:number*/\n        = fat_addrs[Math.floor(j * 4 / ssz)];\n        jj = j * 4 & modulus;\n        if (ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \" + ssz);\n        if (!sectors[addr]) break;\n        j = __readInt32LE(sectors[addr], jj);\n        if (seen[j]) break;\n      }\n\n      sector_list[k] = {\n        nodes: buf,\n        data: __toBuffer([buf_chain])\n      }\n      /*:SectorEntry*/\n      ;\n    }\n\n    return sector_list;\n  }\n  /* [MS-CFB] 2.6.1 Compound File Directory Entry */\n\n\n  function read_directory(dir_start\n  /*:number*/\n  , sector_list\n  /*:SectorList*/\n  , sectors\n  /*:Array<RawBytes>*/\n  , Paths\n  /*:Array<string>*/\n  , nmfs, files, FileIndex, mini) {\n    var minifat_store = 0,\n        pl = Paths.length ? 2 : 0;\n    var sector = sector_list[dir_start].data;\n    var i = 0,\n        namelen = 0,\n        name;\n\n    for (; i < sector.length; i += 128) {\n      var blob\n      /*:CFBlob*/\n      =\n      /*::(*/\n      sector.slice(i, i + 128)\n      /*:: :any)*/\n      ;\n      prep_blob(blob, 64);\n      namelen = blob.read_shift(2);\n      name = __utf16le(blob, 0, namelen - pl);\n      Paths.push(name);\n      var o\n      /*:CFBEntry*/\n      = {\n        name: name,\n        type: blob.read_shift(1),\n        color: blob.read_shift(1),\n        L: blob.read_shift(4, 'i'),\n        R: blob.read_shift(4, 'i'),\n        C: blob.read_shift(4, 'i'),\n        clsid: blob.read_shift(16),\n        state: blob.read_shift(4, 'i'),\n        start: 0,\n        size: 0\n      };\n      var ctime\n      /*:number*/\n      = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n      if (ctime !== 0) o.ct = read_date(blob, blob.l - 8);\n      var mtime\n      /*:number*/\n      = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n      if (mtime !== 0) o.mt = read_date(blob, blob.l - 8);\n      o.start = blob.read_shift(4, 'i');\n      o.size = blob.read_shift(4, 'i');\n\n      if (o.size < 0 && o.start < 0) {\n        o.size = o.type = 0;\n        o.start = ENDOFCHAIN;\n        o.name = \"\";\n      }\n\n      if (o.type === 5) {\n        /* root */\n        minifat_store = o.start;\n        if (nmfs > 0 && minifat_store !== ENDOFCHAIN) sector_list[minifat_store].name = \"!StreamData\";\n        /*minifat_size = o.size;*/\n      } else if (o.size >= 4096\n      /* MSCSZ */\n      ) {\n        o.storage = 'fat';\n        if (sector_list[o.start] === undefined) sector_list[o.start] = get_sector_list(sectors, o.start, sector_list.fat_addrs, sector_list.ssz);\n        sector_list[o.start].name = o.name;\n        o.content = sector_list[o.start].data.slice(0, o.size)\n        /*:any*/\n        ;\n      } else {\n        o.storage = 'minifat';\n        if (o.size < 0) o.size = 0;else if (minifat_store !== ENDOFCHAIN && o.start !== ENDOFCHAIN && sector_list[minifat_store]) {\n          o.content = get_mfat_entry(o, sector_list[minifat_store].data, (sector_list[mini] || {}).data);\n        }\n      }\n\n      if (o.content) prep_blob(o.content, 0);\n      files[name] = o;\n      FileIndex.push(o);\n    }\n  }\n\n  function read_date(blob\n  /*:RawBytes|CFBlob*/\n  , offset\n  /*:number*/\n  )\n  /*:Date*/\n  {\n    return new Date((__readUInt32LE(blob, offset + 4) / 1e7 * Math.pow(2, 32) + __readUInt32LE(blob, offset) / 1e7 - 11644473600) * 1000);\n  }\n\n  function read_file(filename\n  /*:string*/\n  , options\n  /*:CFBReadOpts*/\n  ) {\n    get_fs();\n    return parse(fs.readFileSync(filename), options);\n  }\n\n  function read(blob\n  /*:RawBytes|string*/\n  , options\n  /*:CFBReadOpts*/\n  ) {\n    var type = options && options.type;\n\n    if (!type) {\n      if (has_buf && Buffer.isBuffer(blob)) type = \"buffer\";\n    }\n\n    switch (type || \"base64\") {\n      case \"file\":\n        /*:: if(typeof blob !== 'string') throw \"Must pass a filename when type='file'\"; */\n        return read_file(blob, options);\n\n      case \"base64\":\n        /*:: if(typeof blob !== 'string') throw \"Must pass a base64-encoded binary string when type='file'\"; */\n        return parse(s2a(Base64_decode(blob)), options);\n\n      case \"binary\":\n        /*:: if(typeof blob !== 'string') throw \"Must pass a binary string when type='file'\"; */\n        return parse(s2a(blob), options);\n    }\n\n    return parse(\n    /*::typeof blob == 'string' ? new Buffer(blob, 'utf-8') : */\n    blob, options);\n  }\n\n  function init_cfb(cfb\n  /*:CFBContainer*/\n  , opts\n  /*:?any*/\n  )\n  /*:void*/\n  {\n    var o = opts || {},\n        root = o.root || \"Root Entry\";\n    if (!cfb.FullPaths) cfb.FullPaths = [];\n    if (!cfb.FileIndex) cfb.FileIndex = [];\n    if (cfb.FullPaths.length !== cfb.FileIndex.length) throw new Error(\"inconsistent CFB structure\");\n\n    if (cfb.FullPaths.length === 0) {\n      cfb.FullPaths[0] = root + \"/\";\n      cfb.FileIndex[0] = {\n        name: root,\n        type: 5\n      }\n      /*:any*/\n      ;\n    }\n\n    if (o.CLSID) cfb.FileIndex[0].clsid = o.CLSID;\n    seed_cfb(cfb);\n  }\n\n  function seed_cfb(cfb\n  /*:CFBContainer*/\n  )\n  /*:void*/\n  {\n    var nm = \"\\x01Sh33tJ5\";\n    if (CFB.find(cfb, \"/\" + nm)) return;\n    var p = new_buf(4);\n    p[0] = 55;\n    p[1] = p[3] = 50;\n    p[2] = 54;\n    cfb.FileIndex.push({\n      name: nm,\n      type: 2,\n      content: p,\n      size: 4,\n      L: 69,\n      R: 69,\n      C: 69\n    }\n    /*:any*/\n    );\n    cfb.FullPaths.push(cfb.FullPaths[0] + nm);\n    rebuild_cfb(cfb);\n  }\n\n  function rebuild_cfb(cfb\n  /*:CFBContainer*/\n  , f\n  /*:?boolean*/\n  )\n  /*:void*/\n  {\n    init_cfb(cfb);\n    var gc = false,\n        s = false;\n\n    for (var i = cfb.FullPaths.length - 1; i >= 0; --i) {\n      var _file = cfb.FileIndex[i];\n\n      switch (_file.type) {\n        case 0:\n          if (s) gc = true;else {\n            cfb.FileIndex.pop();\n            cfb.FullPaths.pop();\n          }\n          break;\n\n        case 1:\n        case 2:\n        case 5:\n          s = true;\n          if (isNaN(_file.R * _file.L * _file.C)) gc = true;\n          if (_file.R > -1 && _file.L > -1 && _file.R == _file.L) gc = true;\n          break;\n\n        default:\n          gc = true;\n          break;\n      }\n    }\n\n    if (!gc && !f) return;\n    var now = new Date(1987, 1, 19),\n        j = 0; // Track which names exist\n\n    var fullPaths = Object.create ? Object.create(null) : {};\n    var data\n    /*:Array<[string, CFBEntry]>*/\n    = [];\n\n    for (i = 0; i < cfb.FullPaths.length; ++i) {\n      fullPaths[cfb.FullPaths[i]] = true;\n      if (cfb.FileIndex[i].type === 0) continue;\n      data.push([cfb.FullPaths[i], cfb.FileIndex[i]]);\n    }\n\n    for (i = 0; i < data.length; ++i) {\n      var dad = dirname(data[i][0]);\n      s = fullPaths[dad];\n\n      if (!s) {\n        data.push([dad, {\n          name: filename(dad).replace(\"/\", \"\"),\n          type: 1,\n          clsid: HEADER_CLSID,\n          ct: now,\n          mt: now,\n          content: null\n        }\n        /*:any*/\n        ]); // Add name to set\n\n        fullPaths[dad] = true;\n      }\n    }\n\n    data.sort(function (x, y) {\n      return namecmp(x[0], y[0]);\n    });\n    cfb.FullPaths = [];\n    cfb.FileIndex = [];\n\n    for (i = 0; i < data.length; ++i) {\n      cfb.FullPaths[i] = data[i][0];\n      cfb.FileIndex[i] = data[i][1];\n    }\n\n    for (i = 0; i < data.length; ++i) {\n      var elt = cfb.FileIndex[i];\n      var nm = cfb.FullPaths[i];\n      elt.name = filename(nm).replace(\"/\", \"\");\n      elt.L = elt.R = elt.C = -(elt.color = 1);\n      elt.size = elt.content ? elt.content.length : 0;\n      elt.start = 0;\n      elt.clsid = elt.clsid || HEADER_CLSID;\n\n      if (i === 0) {\n        elt.C = data.length > 1 ? 1 : -1;\n        elt.size = 0;\n        elt.type = 5;\n      } else if (nm.slice(-1) == \"/\") {\n        for (j = i + 1; j < data.length; ++j) {\n          if (dirname(cfb.FullPaths[j]) == nm) break;\n        }\n\n        elt.C = j >= data.length ? -1 : j;\n\n        for (j = i + 1; j < data.length; ++j) {\n          if (dirname(cfb.FullPaths[j]) == dirname(nm)) break;\n        }\n\n        elt.R = j >= data.length ? -1 : j;\n        elt.type = 1;\n      } else {\n        if (dirname(cfb.FullPaths[i + 1] || \"\") == dirname(nm)) elt.R = i + 1;\n        elt.type = 2;\n      }\n    }\n  }\n\n  function _write(cfb\n  /*:CFBContainer*/\n  , options\n  /*:CFBWriteOpts*/\n  )\n  /*:RawBytes|string*/\n  {\n    var _opts = options || {};\n    /* MAD is order-sensitive, skip rebuild and sort */\n\n\n    if (_opts.fileType == 'mad') return write_mad(cfb, _opts);\n    rebuild_cfb(cfb);\n\n    switch (_opts.fileType) {\n      case 'zip':\n        return write_zip(cfb, _opts);\n      //case 'mad': return write_mad(cfb, _opts);\n    }\n\n    var L = function (cfb\n    /*:CFBContainer*/\n    )\n    /*:Array<number>*/\n    {\n      var mini_size = 0,\n          fat_size = 0;\n\n      for (var i = 0; i < cfb.FileIndex.length; ++i) {\n        var file = cfb.FileIndex[i];\n        if (!file.content) continue;\n        /*:: if(file.content == null) throw new Error(\"unreachable\"); */\n\n        var flen = file.content.length;\n\n        if (flen > 0) {\n          if (flen < 0x1000) mini_size += flen + 0x3F >> 6;else fat_size += flen + 0x01FF >> 9;\n        }\n      }\n\n      var dir_cnt = cfb.FullPaths.length + 3 >> 2;\n      var mini_cnt = mini_size + 7 >> 3;\n      var mfat_cnt = mini_size + 0x7F >> 7;\n      var fat_base = mini_cnt + fat_size + dir_cnt + mfat_cnt;\n      var fat_cnt = fat_base + 0x7F >> 7;\n      var difat_cnt = fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt - 109) / 0x7F);\n\n      while (fat_base + fat_cnt + difat_cnt + 0x7F >> 7 > fat_cnt) {\n        difat_cnt = ++fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt - 109) / 0x7F);\n      }\n\n      var L = [1, difat_cnt, fat_cnt, mfat_cnt, dir_cnt, fat_size, mini_size, 0];\n      cfb.FileIndex[0].size = mini_size << 6;\n      L[7] = (cfb.FileIndex[0].start = L[0] + L[1] + L[2] + L[3] + L[4] + L[5]) + (L[6] + 7 >> 3);\n      return L;\n    }(cfb);\n\n    var o = new_buf(L[7] << 9);\n    var i = 0,\n        T = 0;\n    {\n      for (i = 0; i < 8; ++i) {\n        o.write_shift(1, HEADER_SIG[i]);\n      }\n\n      for (i = 0; i < 8; ++i) {\n        o.write_shift(2, 0);\n      }\n\n      o.write_shift(2, 0x003E);\n      o.write_shift(2, 0x0003);\n      o.write_shift(2, 0xFFFE);\n      o.write_shift(2, 0x0009);\n      o.write_shift(2, 0x0006);\n\n      for (i = 0; i < 3; ++i) {\n        o.write_shift(2, 0);\n      }\n\n      o.write_shift(4, 0);\n      o.write_shift(4, L[2]);\n      o.write_shift(4, L[0] + L[1] + L[2] + L[3] - 1);\n      o.write_shift(4, 0);\n      o.write_shift(4, 1 << 12);\n      o.write_shift(4, L[3] ? L[0] + L[1] + L[2] - 1 : ENDOFCHAIN);\n      o.write_shift(4, L[3]);\n      o.write_shift(-4, L[1] ? L[0] - 1 : ENDOFCHAIN);\n      o.write_shift(4, L[1]);\n\n      for (i = 0; i < 109; ++i) {\n        o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n      }\n    }\n\n    if (L[1]) {\n      for (T = 0; T < L[1]; ++T) {\n        for (; i < 236 + T * 127; ++i) {\n          o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n        }\n\n        o.write_shift(-4, T === L[1] - 1 ? ENDOFCHAIN : T + 1);\n      }\n    }\n\n    var chainit = function chainit(w\n    /*:number*/\n    )\n    /*:void*/\n    {\n      for (T += w; i < T - 1; ++i) {\n        o.write_shift(-4, i + 1);\n      }\n\n      if (w) {\n        ++i;\n        o.write_shift(-4, ENDOFCHAIN);\n      }\n    };\n\n    T = i = 0;\n\n    for (T += L[1]; i < T; ++i) {\n      o.write_shift(-4, consts.DIFSECT);\n    }\n\n    for (T += L[2]; i < T; ++i) {\n      o.write_shift(-4, consts.FATSECT);\n    }\n\n    chainit(L[3]);\n    chainit(L[4]);\n    var j\n    /*:number*/\n    = 0,\n        flen\n    /*:number*/\n    = 0;\n    var file\n    /*:CFBEntry*/\n    = cfb.FileIndex[0];\n\n    for (; j < cfb.FileIndex.length; ++j) {\n      file = cfb.FileIndex[j];\n      if (!file.content) continue;\n      /*:: if(file.content == null) throw new Error(\"unreachable\"); */\n\n      flen = file.content.length;\n      if (flen < 0x1000) continue;\n      file.start = T;\n      chainit(flen + 0x01FF >> 9);\n    }\n\n    chainit(L[6] + 7 >> 3);\n\n    while (o.l & 0x1FF) {\n      o.write_shift(-4, consts.ENDOFCHAIN);\n    }\n\n    T = i = 0;\n\n    for (j = 0; j < cfb.FileIndex.length; ++j) {\n      file = cfb.FileIndex[j];\n      if (!file.content) continue;\n      /*:: if(file.content == null) throw new Error(\"unreachable\"); */\n\n      flen = file.content.length;\n      if (!flen || flen >= 0x1000) continue;\n      file.start = T;\n      chainit(flen + 0x3F >> 6);\n    }\n\n    while (o.l & 0x1FF) {\n      o.write_shift(-4, consts.ENDOFCHAIN);\n    }\n\n    for (i = 0; i < L[4] << 2; ++i) {\n      var nm = cfb.FullPaths[i];\n\n      if (!nm || nm.length === 0) {\n        for (j = 0; j < 17; ++j) {\n          o.write_shift(4, 0);\n        }\n\n        for (j = 0; j < 3; ++j) {\n          o.write_shift(4, -1);\n        }\n\n        for (j = 0; j < 12; ++j) {\n          o.write_shift(4, 0);\n        }\n\n        continue;\n      }\n\n      file = cfb.FileIndex[i];\n      if (i === 0) file.start = file.size ? file.start - 1 : ENDOFCHAIN;\n\n      var _nm\n      /*:string*/\n      = i === 0 && _opts.root || file.name;\n\n      flen = 2 * (_nm.length + 1);\n      o.write_shift(64, _nm, \"utf16le\");\n      o.write_shift(2, flen);\n      o.write_shift(1, file.type);\n      o.write_shift(1, file.color);\n      o.write_shift(-4, file.L);\n      o.write_shift(-4, file.R);\n      o.write_shift(-4, file.C);\n      if (!file.clsid) for (j = 0; j < 4; ++j) {\n        o.write_shift(4, 0);\n      } else o.write_shift(16, file.clsid, \"hex\");\n      o.write_shift(4, file.state || 0);\n      o.write_shift(4, 0);\n      o.write_shift(4, 0);\n      o.write_shift(4, 0);\n      o.write_shift(4, 0);\n      o.write_shift(4, file.start);\n      o.write_shift(4, file.size);\n      o.write_shift(4, 0);\n    }\n\n    for (i = 1; i < cfb.FileIndex.length; ++i) {\n      file = cfb.FileIndex[i];\n      /*:: if(!file.content) throw new Error(\"unreachable\"); */\n\n      if (file.size >= 0x1000) {\n        o.l = file.start + 1 << 9;\n\n        if (has_buf && Buffer.isBuffer(file.content)) {\n          file.content.copy(o, o.l, 0, file.size); // o is a 0-filled Buffer so just set next offset\n\n          o.l += file.size + 511 & -512;\n        } else {\n          for (j = 0; j < file.size; ++j) {\n            o.write_shift(1, file.content[j]);\n          }\n\n          for (; j & 0x1FF; ++j) {\n            o.write_shift(1, 0);\n          }\n        }\n      }\n    }\n\n    for (i = 1; i < cfb.FileIndex.length; ++i) {\n      file = cfb.FileIndex[i];\n      /*:: if(!file.content) throw new Error(\"unreachable\"); */\n\n      if (file.size > 0 && file.size < 0x1000) {\n        if (has_buf && Buffer.isBuffer(file.content)) {\n          file.content.copy(o, o.l, 0, file.size); // o is a 0-filled Buffer so just set next offset\n\n          o.l += file.size + 63 & -64;\n        } else {\n          for (j = 0; j < file.size; ++j) {\n            o.write_shift(1, file.content[j]);\n          }\n\n          for (; j & 0x3F; ++j) {\n            o.write_shift(1, 0);\n          }\n        }\n      }\n    }\n\n    if (has_buf) {\n      o.l = o.length;\n    } else {\n      // When using Buffer, already 0-filled\n      while (o.l < o.length) {\n        o.write_shift(1, 0);\n      }\n    }\n\n    return o;\n  }\n  /* [MS-CFB] 2.6.4 (Unicode 3.0.1 case conversion) */\n\n\n  function find(cfb\n  /*:CFBContainer*/\n  , path\n  /*:string*/\n  )\n  /*:?CFBEntry*/\n  {\n    var UCFullPaths\n    /*:Array<string>*/\n    = cfb.FullPaths.map(function (x) {\n      return x.toUpperCase();\n    });\n    var UCPaths\n    /*:Array<string>*/\n    = UCFullPaths.map(function (x) {\n      var y = x.split(\"/\");\n      return y[y.length - (x.slice(-1) == \"/\" ? 2 : 1)];\n    });\n    var k\n    /*:boolean*/\n    = false;\n\n    if (path.charCodeAt(0) === 47\n    /* \"/\" */\n    ) {\n      k = true;\n      path = UCFullPaths[0].slice(0, -1) + path;\n    } else k = path.indexOf(\"/\") !== -1;\n\n    var UCPath\n    /*:string*/\n    = path.toUpperCase();\n    var w\n    /*:number*/\n    = k === true ? UCFullPaths.indexOf(UCPath) : UCPaths.indexOf(UCPath);\n    if (w !== -1) return cfb.FileIndex[w];\n    var m = !UCPath.match(chr1);\n    UCPath = UCPath.replace(chr0, '');\n    if (m) UCPath = UCPath.replace(chr1, '!');\n\n    for (w = 0; w < UCFullPaths.length; ++w) {\n      if ((m ? UCFullPaths[w].replace(chr1, '!') : UCFullPaths[w]).replace(chr0, '') == UCPath) return cfb.FileIndex[w];\n      if ((m ? UCPaths[w].replace(chr1, '!') : UCPaths[w]).replace(chr0, '') == UCPath) return cfb.FileIndex[w];\n    }\n\n    return null;\n  }\n  /** CFB Constants */\n\n\n  var MSSZ = 64;\n  /* Mini Sector Size = 1<<6 */\n  //var MSCSZ = 4096; /* Mini Stream Cutoff Size */\n\n  /* 2.1 Compound File Sector Numbers and Types */\n\n  var ENDOFCHAIN = -2;\n  /* 2.2 Compound File Header */\n\n  var HEADER_SIGNATURE = 'd0cf11e0a1b11ae1';\n  var HEADER_SIG = [0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1];\n  var HEADER_CLSID = '00000000000000000000000000000000';\n  var consts = {\n    /* 2.1 Compund File Sector Numbers and Types */\n    MAXREGSECT: -6,\n    DIFSECT: -4,\n    FATSECT: -3,\n    ENDOFCHAIN: ENDOFCHAIN,\n    FREESECT: -1,\n\n    /* 2.2 Compound File Header */\n    HEADER_SIGNATURE: HEADER_SIGNATURE,\n    HEADER_MINOR_VERSION: '3e00',\n    MAXREGSID: -6,\n    NOSTREAM: -1,\n    HEADER_CLSID: HEADER_CLSID,\n\n    /* 2.6.1 Compound File Directory Entry */\n    EntryTypes: ['unknown', 'storage', 'stream', 'lockbytes', 'property', 'root']\n  };\n\n  function write_file(cfb\n  /*:CFBContainer*/\n  , filename\n  /*:string*/\n  , options\n  /*:CFBWriteOpts*/\n  )\n  /*:void*/\n  {\n    get_fs();\n\n    var o = _write(cfb, options);\n    /*:: if(typeof Buffer == 'undefined' || !Buffer.isBuffer(o) || !(o instanceof Buffer)) throw new Error(\"unreachable\"); */\n\n\n    fs.writeFileSync(filename, o);\n  }\n\n  function a2s(o\n  /*:RawBytes*/\n  )\n  /*:string*/\n  {\n    var out = new Array(o.length);\n\n    for (var i = 0; i < o.length; ++i) {\n      out[i] = String.fromCharCode(o[i]);\n    }\n\n    return out.join(\"\");\n  }\n\n  function write(cfb\n  /*:CFBContainer*/\n  , options\n  /*:CFBWriteOpts*/\n  )\n  /*:RawBytes|string*/\n  {\n    var o = _write(cfb, options);\n\n    switch (options && options.type || \"buffer\") {\n      case \"file\":\n        get_fs();\n        fs.writeFileSync(options.filename, o\n        /*:any*/\n        );\n        return o;\n\n      case \"binary\":\n        return typeof o == \"string\" ? o : a2s(o);\n\n      case \"base64\":\n        return Base64_encode(typeof o == \"string\" ? o : a2s(o));\n\n      case \"buffer\":\n        if (has_buf) return Buffer.isBuffer(o) ? o : Buffer_from(o);\n\n      /* falls through */\n\n      case \"array\":\n        return typeof o == \"string\" ? s2a(o) : o;\n    }\n\n    return o;\n  }\n  /* node < 8.1 zlib does not expose bytesRead, so default to pure JS */\n\n\n  var _zlib;\n\n  function use_zlib(zlib) {\n    try {\n      var InflateRaw = zlib.InflateRaw;\n      var InflRaw = new InflateRaw();\n\n      InflRaw._processChunk(new Uint8Array([3, 0]), InflRaw._finishFlushFlag);\n\n      if (InflRaw.bytesRead) _zlib = zlib;else throw new Error(\"zlib does not expose bytesRead\");\n    } catch (e) {\n      console.error(\"cannot use native zlib: \" + (e.message || e));\n    }\n  }\n\n  function _inflateRawSync(payload, usz) {\n    if (!_zlib) return _inflate(payload, usz);\n    var InflateRaw = _zlib.InflateRaw;\n    var InflRaw = new InflateRaw();\n\n    var out = InflRaw._processChunk(payload.slice(payload.l), InflRaw._finishFlushFlag);\n\n    payload.l += InflRaw.bytesRead;\n    return out;\n  }\n\n  function _deflateRawSync(payload) {\n    return _zlib ? _zlib.deflateRawSync(payload) : _deflate(payload);\n  }\n\n  var CLEN_ORDER = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];\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 ]; */\n\n  var 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  /*  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 ]; */\n\n  var 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\n  function bit_swap_8(n) {\n    var t = (n << 1 | n << 11) & 0x22110 | (n << 5 | n << 15) & 0x88440;\n    return (t >> 16 | t >> 8 | t) & 0xFF;\n  }\n\n  var use_typed_arrays = typeof Uint8Array !== 'undefined';\n  var bitswap8 = use_typed_arrays ? new Uint8Array(1 << 8) : [];\n\n  for (var q = 0; q < 1 << 8; ++q) {\n    bitswap8[q] = bit_swap_8(q);\n  }\n\n  function bit_swap_n(n, b) {\n    var rev = bitswap8[n & 0xFF];\n    if (b <= 8) return rev >>> 8 - b;\n    rev = rev << 8 | bitswap8[n >> 8 & 0xFF];\n    if (b <= 16) return rev >>> 16 - b;\n    rev = rev << 8 | bitswap8[n >> 16 & 0xFF];\n    return rev >>> 24 - b;\n  }\n  /* helpers for unaligned bit reads */\n\n\n  function read_bits_2(buf, bl) {\n    var w = bl & 7,\n        h = bl >>> 3;\n    return (buf[h] | (w <= 6 ? 0 : buf[h + 1] << 8)) >>> w & 0x03;\n  }\n\n  function read_bits_3(buf, bl) {\n    var w = bl & 7,\n        h = bl >>> 3;\n    return (buf[h] | (w <= 5 ? 0 : buf[h + 1] << 8)) >>> w & 0x07;\n  }\n\n  function read_bits_4(buf, bl) {\n    var w = bl & 7,\n        h = bl >>> 3;\n    return (buf[h] | (w <= 4 ? 0 : buf[h + 1] << 8)) >>> w & 0x0F;\n  }\n\n  function read_bits_5(buf, bl) {\n    var w = bl & 7,\n        h = bl >>> 3;\n    return (buf[h] | (w <= 3 ? 0 : buf[h + 1] << 8)) >>> w & 0x1F;\n  }\n\n  function read_bits_7(buf, bl) {\n    var w = bl & 7,\n        h = bl >>> 3;\n    return (buf[h] | (w <= 1 ? 0 : buf[h + 1] << 8)) >>> w & 0x7F;\n  }\n  /* works up to n = 3 * 8 + 1 = 25 */\n\n\n  function read_bits_n(buf, bl, n) {\n    var w = bl & 7,\n        h = bl >>> 3,\n        f = (1 << n) - 1;\n    var v = buf[h] >>> w;\n    if (n < 8 - w) return v & f;\n    v |= buf[h + 1] << 8 - w;\n    if (n < 16 - w) return v & f;\n    v |= buf[h + 2] << 16 - w;\n    if (n < 24 - w) return v & f;\n    v |= buf[h + 3] << 24 - w;\n    return v & f;\n  }\n  /* helpers for unaligned bit writes */\n\n\n  function write_bits_3(buf, bl, v) {\n    var w = bl & 7,\n        h = bl >>> 3;\n    if (w <= 5) buf[h] |= (v & 7) << w;else {\n      buf[h] |= v << w & 0xFF;\n      buf[h + 1] = (v & 7) >> 8 - w;\n    }\n    return bl + 3;\n  }\n\n  function write_bits_1(buf, bl, v) {\n    var w = bl & 7,\n        h = bl >>> 3;\n    v = (v & 1) << w;\n    buf[h] |= v;\n    return bl + 1;\n  }\n\n  function write_bits_8(buf, bl, v) {\n    var w = bl & 7,\n        h = bl >>> 3;\n    v <<= w;\n    buf[h] |= v & 0xFF;\n    v >>>= 8;\n    buf[h + 1] = v;\n    return bl + 8;\n  }\n\n  function write_bits_16(buf, bl, v) {\n    var w = bl & 7,\n        h = bl >>> 3;\n    v <<= w;\n    buf[h] |= v & 0xFF;\n    v >>>= 8;\n    buf[h + 1] = v & 0xFF;\n    buf[h + 2] = v >>> 8;\n    return bl + 16;\n  }\n  /* until ArrayBuffer#realloc is a thing, fake a realloc */\n\n\n  function realloc(b, sz\n  /*:number*/\n  ) {\n    var L = b.length,\n        M = 2 * L > sz ? 2 * L : sz + 5,\n        i = 0;\n    if (L >= sz) return b;\n\n    if (has_buf) {\n      var o = new_unsafe_buf(M); // $FlowIgnore\n\n      if (b.copy) b.copy(o);else for (; i < b.length; ++i) {\n        o[i] = b[i];\n      }\n      return o;\n    } else if (use_typed_arrays) {\n      var a = new Uint8Array(M);\n      if (a.set) a.set(b);else for (; i < L; ++i) {\n        a[i] = b[i];\n      }\n      return a;\n    }\n\n    b.length = M;\n    return b;\n  }\n  /* zero-filled arrays for older browsers */\n\n\n  function zero_fill_array(n) {\n    var o = new Array(n);\n\n    for (var i = 0; i < n; ++i) {\n      o[i] = 0;\n    }\n\n    return o;\n  }\n  /* build tree (used for literals and lengths) */\n\n\n  function build_tree(clens, cmap, MAX\n  /*:number*/\n  )\n  /*:number*/\n  {\n    var maxlen = 1,\n        w = 0,\n        i = 0,\n        j = 0,\n        ccode = 0,\n        L = clens.length;\n    var bl_count = use_typed_arrays ? new Uint16Array(32) : zero_fill_array(32);\n\n    for (i = 0; i < 32; ++i) {\n      bl_count[i] = 0;\n    }\n\n    for (i = L; i < MAX; ++i) {\n      clens[i] = 0;\n    }\n\n    L = clens.length;\n    var ctree = use_typed_arrays ? new Uint16Array(L) : zero_fill_array(L); // []\n\n    /* build code tree */\n\n    for (i = 0; i < L; ++i) {\n      bl_count[w = clens[i]]++;\n      if (maxlen < w) maxlen = w;\n      ctree[i] = 0;\n    }\n\n    bl_count[0] = 0;\n\n    for (i = 1; i <= maxlen; ++i) {\n      bl_count[i + 16] = ccode = ccode + bl_count[i - 1] << 1;\n    }\n\n    for (i = 0; i < L; ++i) {\n      ccode = clens[i];\n      if (ccode != 0) ctree[i] = bl_count[ccode + 16]++;\n    }\n    /* cmap[maxlen + 4 bits] = (off&15) + (lit<<4) reverse mapping */\n\n\n    var cleni = 0;\n\n    for (i = 0; i < L; ++i) {\n      cleni = clens[i];\n\n      if (cleni != 0) {\n        ccode = bit_swap_n(ctree[i], maxlen) >> maxlen - cleni;\n\n        for (j = (1 << maxlen + 4 - cleni) - 1; j >= 0; --j) {\n          cmap[ccode | j << cleni] = cleni & 15 | i << 4;\n        }\n      }\n    }\n\n    return maxlen;\n  }\n  /* Fixed Huffman */\n\n\n  var fix_lmap = use_typed_arrays ? new Uint16Array(512) : zero_fill_array(512);\n  var fix_dmap = use_typed_arrays ? new Uint16Array(32) : zero_fill_array(32);\n\n  if (!use_typed_arrays) {\n    for (var i = 0; i < 512; ++i) {\n      fix_lmap[i] = 0;\n    }\n\n    for (i = 0; i < 32; ++i) {\n      fix_dmap[i] = 0;\n    }\n  }\n\n  (function () {\n    var dlens\n    /*:Array<number>*/\n    = [];\n    var i = 0;\n\n    for (; i < 32; i++) {\n      dlens.push(5);\n    }\n\n    build_tree(dlens, fix_dmap, 32);\n    var clens\n    /*:Array<number>*/\n    = [];\n    i = 0;\n\n    for (; i <= 143; i++) {\n      clens.push(8);\n    }\n\n    for (; i <= 255; i++) {\n      clens.push(9);\n    }\n\n    for (; i <= 279; i++) {\n      clens.push(7);\n    }\n\n    for (; i <= 287; i++) {\n      clens.push(8);\n    }\n\n    build_tree(clens, fix_lmap, 288);\n  })();\n\n  var _deflateRaw = /*#__PURE__*/function _deflateRawIIFE() {\n    var DST_LN_RE = use_typed_arrays ? new Uint8Array(0x8000) : [];\n    var j = 0,\n        k = 0;\n\n    for (; j < DST_LN.length - 1; ++j) {\n      for (; k < DST_LN[j + 1]; ++k) {\n        DST_LN_RE[k] = j;\n      }\n    }\n\n    for (; k < 32768; ++k) {\n      DST_LN_RE[k] = 29;\n    }\n\n    var LEN_LN_RE = use_typed_arrays ? new Uint8Array(0x103) : [];\n\n    for (j = 0, k = 0; j < LEN_LN.length - 1; ++j) {\n      for (; k < LEN_LN[j + 1]; ++k) {\n        LEN_LN_RE[k] = j;\n      }\n    }\n\n    function write_stored(data, out) {\n      var boff = 0;\n\n      while (boff < data.length) {\n        var L = Math.min(0xFFFF, data.length - boff);\n        var h = boff + L == data.length;\n        out.write_shift(1, +h);\n        out.write_shift(2, L);\n        out.write_shift(2, ~L & 0xFFFF);\n\n        while (L-- > 0) {\n          out[out.l++] = data[boff++];\n        }\n      }\n\n      return out.l;\n    }\n    /* Fixed Huffman */\n\n\n    function write_huff_fixed(data, out) {\n      var bl = 0;\n      var boff = 0;\n      var addrs = use_typed_arrays ? new Uint16Array(0x8000) : [];\n\n      while (boff < data.length) {\n        var L =\n        /* data.length - boff; */\n        Math.min(0xFFFF, data.length - boff);\n        /* write a stored block for short data */\n\n        if (L < 10) {\n          bl = write_bits_3(out, bl, +!!(boff + L == data.length)); // jshint ignore:line\n\n          if (bl & 7) bl += 8 - (bl & 7);\n          out.l = bl / 8 | 0;\n          out.write_shift(2, L);\n          out.write_shift(2, ~L & 0xFFFF);\n\n          while (L-- > 0) {\n            out[out.l++] = data[boff++];\n          }\n\n          bl = out.l * 8;\n          continue;\n        }\n\n        bl = write_bits_3(out, bl, +!!(boff + L == data.length) + 2); // jshint ignore:line\n\n        var hash = 0;\n\n        while (L-- > 0) {\n          var d = data[boff];\n          hash = (hash << 5 ^ d) & 0x7FFF;\n          var match = -1,\n              mlen = 0;\n\n          if (match = addrs[hash]) {\n            match |= boff & ~0x7FFF;\n            if (match > boff) match -= 0x8000;\n            if (match < boff) while (data[match + mlen] == data[boff + mlen] && mlen < 250) {\n              ++mlen;\n            }\n          }\n\n          if (mlen > 2) {\n            /* Copy Token  */\n            d = LEN_LN_RE[mlen];\n            if (d <= 22) bl = write_bits_8(out, bl, bitswap8[d + 1] >> 1) - 1;else {\n              write_bits_8(out, bl, 3);\n              bl += 5;\n              write_bits_8(out, bl, bitswap8[d - 23] >> 5);\n              bl += 3;\n            }\n            var len_eb = d < 8 ? 0 : d - 4 >> 2;\n\n            if (len_eb > 0) {\n              write_bits_16(out, bl, mlen - LEN_LN[d]);\n              bl += len_eb;\n            }\n\n            d = DST_LN_RE[boff - match];\n            bl = write_bits_8(out, bl, bitswap8[d] >> 3);\n            bl -= 3;\n            var dst_eb = d < 4 ? 0 : d - 2 >> 1;\n\n            if (dst_eb > 0) {\n              write_bits_16(out, bl, boff - match - DST_LN[d]);\n              bl += dst_eb;\n            }\n\n            for (var q = 0; q < mlen; ++q) {\n              addrs[hash] = boff & 0x7FFF;\n              hash = (hash << 5 ^ data[boff]) & 0x7FFF;\n              ++boff;\n            }\n\n            L -= mlen - 1;\n          } else {\n            /* Literal Token */\n            if (d <= 143) d = d + 48;else bl = write_bits_1(out, bl, 1);\n            bl = write_bits_8(out, bl, bitswap8[d]);\n            addrs[hash] = boff & 0x7FFF;\n            ++boff;\n          }\n        }\n\n        bl = write_bits_8(out, bl, 0) - 1;\n      }\n\n      out.l = (bl + 7) / 8 | 0;\n      return out.l;\n    }\n\n    return function _deflateRaw(data, out) {\n      if (data.length < 8) return write_stored(data, out);\n      return write_huff_fixed(data, out);\n    };\n  }();\n\n  function _deflate(data) {\n    var buf = new_buf(50 + Math.floor(data.length * 1.1));\n\n    var off = _deflateRaw(data, buf);\n\n    return buf.slice(0, off);\n  }\n  /* modified inflate function also moves original read head */\n\n\n  var dyn_lmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);\n  var dyn_dmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);\n  var dyn_cmap = use_typed_arrays ? new Uint16Array(128) : zero_fill_array(128);\n  var dyn_len_1 = 1,\n      dyn_len_2 = 1;\n  /* 5.5.3 Expanding Huffman Codes */\n\n  function dyn(data, boff\n  /*:number*/\n  ) {\n    /* nomenclature from RFC1951 refers to bit values; these are offset by the implicit constant */\n    var _HLIT = read_bits_5(data, boff) + 257;\n\n    boff += 5;\n\n    var _HDIST = read_bits_5(data, boff) + 1;\n\n    boff += 5;\n\n    var _HCLEN = read_bits_4(data, boff) + 4;\n\n    boff += 4;\n    var w = 0;\n    /* grab and store code lengths */\n\n    var clens = use_typed_arrays ? new Uint8Array(19) : zero_fill_array(19);\n    var ctree = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n    var maxlen = 1;\n    var bl_count = use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);\n    var next_code = use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);\n    var L = clens.length;\n    /* 19 */\n\n    for (var i = 0; i < _HCLEN; ++i) {\n      clens[CLEN_ORDER[i]] = w = read_bits_3(data, boff);\n      if (maxlen < w) maxlen = w;\n      bl_count[w]++;\n      boff += 3;\n    }\n    /* build code tree */\n\n\n    var ccode = 0;\n    bl_count[0] = 0;\n\n    for (i = 1; i <= maxlen; ++i) {\n      next_code[i] = ccode = ccode + bl_count[i - 1] << 1;\n    }\n\n    for (i = 0; i < L; ++i) {\n      if ((ccode = clens[i]) != 0) ctree[i] = next_code[ccode]++;\n    }\n    /* cmap[7 bits from stream] = (off&7) + (lit<<3) */\n\n\n    var cleni = 0;\n\n    for (i = 0; i < L; ++i) {\n      cleni = clens[i];\n\n      if (cleni != 0) {\n        ccode = bitswap8[ctree[i]] >> 8 - cleni;\n\n        for (var j = (1 << 7 - cleni) - 1; j >= 0; --j) {\n          dyn_cmap[ccode | j << cleni] = cleni & 7 | i << 3;\n        }\n      }\n    }\n    /* read literal and dist codes at once */\n\n\n    var hcodes\n    /*:Array<number>*/\n    = [];\n    maxlen = 1;\n\n    for (; hcodes.length < _HLIT + _HDIST;) {\n      ccode = dyn_cmap[read_bits_7(data, boff)];\n      boff += ccode & 7;\n\n      switch (ccode >>>= 3) {\n        case 16:\n          w = 3 + read_bits_2(data, boff);\n          boff += 2;\n          ccode = hcodes[hcodes.length - 1];\n\n          while (w-- > 0) {\n            hcodes.push(ccode);\n          }\n\n          break;\n\n        case 17:\n          w = 3 + read_bits_3(data, boff);\n          boff += 3;\n\n          while (w-- > 0) {\n            hcodes.push(0);\n          }\n\n          break;\n\n        case 18:\n          w = 11 + read_bits_7(data, boff);\n          boff += 7;\n\n          while (w-- > 0) {\n            hcodes.push(0);\n          }\n\n          break;\n\n        default:\n          hcodes.push(ccode);\n          if (maxlen < ccode) maxlen = ccode;\n          break;\n      }\n    }\n    /* build literal / length trees */\n\n\n    var h1 = hcodes.slice(0, _HLIT),\n        h2 = hcodes.slice(_HLIT);\n\n    for (i = _HLIT; i < 286; ++i) {\n      h1[i] = 0;\n    }\n\n    for (i = _HDIST; i < 30; ++i) {\n      h2[i] = 0;\n    }\n\n    dyn_len_1 = build_tree(h1, dyn_lmap, 286);\n    dyn_len_2 = build_tree(h2, dyn_dmap, 30);\n    return boff;\n  }\n  /* return [ data, bytesRead ] */\n\n\n  function inflate(data, usz\n  /*:number*/\n  ) {\n    /* shortcircuit for empty buffer [0x03, 0x00] */\n    if (data[0] == 3 && !(data[1] & 0x3)) {\n      return [new_raw_buf(usz), 2];\n    }\n    /* bit offset */\n\n\n    var boff = 0;\n    /* header includes final bit and type bits */\n\n    var header = 0;\n    var outbuf = new_unsafe_buf(usz ? usz : 1 << 18);\n    var woff = 0;\n    var OL = outbuf.length >>> 0;\n    var max_len_1 = 0,\n        max_len_2 = 0;\n\n    while ((header & 1) == 0) {\n      header = read_bits_3(data, boff);\n      boff += 3;\n\n      if (header >>> 1 == 0) {\n        /* Stored block */\n        if (boff & 7) boff += 8 - (boff & 7);\n        /* 2 bytes sz, 2 bytes bit inverse */\n\n        var sz = data[boff >>> 3] | data[(boff >>> 3) + 1] << 8;\n        boff += 32;\n        /* push sz bytes */\n\n        if (sz > 0) {\n          if (!usz && OL < woff + sz) {\n            outbuf = realloc(outbuf, woff + sz);\n            OL = outbuf.length;\n          }\n\n          while (sz-- > 0) {\n            outbuf[woff++] = data[boff >>> 3];\n            boff += 8;\n          }\n        }\n\n        continue;\n      } else if (header >> 1 == 1) {\n        /* Fixed Huffman */\n        max_len_1 = 9;\n        max_len_2 = 5;\n      } else {\n        /* Dynamic Huffman */\n        boff = dyn(data, boff);\n        max_len_1 = dyn_len_1;\n        max_len_2 = dyn_len_2;\n      }\n\n      for (;;) {\n        // while(true) is apparently out of vogue in modern JS circles\n        if (!usz && OL < woff + 32767) {\n          outbuf = realloc(outbuf, woff + 32767);\n          OL = outbuf.length;\n        }\n        /* ingest code and move read head */\n\n\n        var bits = read_bits_n(data, boff, max_len_1);\n        var code = header >>> 1 == 1 ? fix_lmap[bits] : dyn_lmap[bits];\n        boff += code & 15;\n        code >>>= 4;\n        /* 0-255 are literals, 256 is end of block token, 257+ are copy tokens */\n\n        if ((code >>> 8 & 0xFF) === 0) outbuf[woff++] = code;else if (code == 256) break;else {\n          code -= 257;\n          var len_eb = code < 8 ? 0 : code - 4 >> 2;\n          if (len_eb > 5) len_eb = 0;\n          var tgt = woff + LEN_LN[code];\n          /* length extra bits */\n\n          if (len_eb > 0) {\n            tgt += read_bits_n(data, boff, len_eb);\n            boff += len_eb;\n          }\n          /* dist code */\n\n\n          bits = read_bits_n(data, boff, max_len_2);\n          code = header >>> 1 == 1 ? fix_dmap[bits] : dyn_dmap[bits];\n          boff += code & 15;\n          code >>>= 4;\n          var dst_eb = code < 4 ? 0 : code - 2 >> 1;\n          var dst = DST_LN[code];\n          /* dist extra bits */\n\n          if (dst_eb > 0) {\n            dst += read_bits_n(data, boff, dst_eb);\n            boff += dst_eb;\n          }\n          /* in the common case, manual byte copy is faster than TA set / Buffer copy */\n\n\n          if (!usz && OL < tgt) {\n            outbuf = realloc(outbuf, tgt + 100);\n            OL = outbuf.length;\n          }\n\n          while (woff < tgt) {\n            outbuf[woff] = outbuf[woff - dst];\n            ++woff;\n          }\n        }\n      }\n    }\n\n    if (usz) return [outbuf, boff + 7 >>> 3];\n    return [outbuf.slice(0, woff), boff + 7 >>> 3];\n  }\n\n  function _inflate(payload, usz) {\n    var data = payload.slice(payload.l || 0);\n    var out = inflate(data, usz);\n    payload.l += out[1];\n    return out[0];\n  }\n\n  function warn_or_throw(wrn, msg) {\n    if (wrn) {\n      if (typeof console !== 'undefined') console.error(msg);\n    } else throw new Error(msg);\n  }\n\n  function parse_zip(file\n  /*:RawBytes*/\n  , options\n  /*:CFBReadOpts*/\n  )\n  /*:CFBContainer*/\n  {\n    var blob\n    /*:CFBlob*/\n    =\n    /*::(*/\n    file\n    /*:: :any)*/\n    ;\n    prep_blob(blob, 0);\n    var FileIndex\n    /*:CFBFileIndex*/\n    = [],\n        FullPaths\n    /*:Array<string>*/\n    = [];\n    var o = {\n      FileIndex: FileIndex,\n      FullPaths: FullPaths\n    };\n    init_cfb(o, {\n      root: options.root\n    });\n    /* find end of central directory, start just after signature */\n\n    var i = blob.length - 4;\n\n    while ((blob[i] != 0x50 || blob[i + 1] != 0x4b || blob[i + 2] != 0x05 || blob[i + 3] != 0x06) && i >= 0) {\n      --i;\n    }\n\n    blob.l = i + 4;\n    /* parse end of central directory */\n\n    blob.l += 4;\n    var fcnt = blob.read_shift(2);\n    blob.l += 6;\n    var start_cd = blob.read_shift(4);\n    /* parse central directory */\n\n    blob.l = start_cd;\n\n    for (i = 0; i < fcnt; ++i) {\n      /* trust local file header instead of CD entry */\n      blob.l += 20;\n      var csz = blob.read_shift(4);\n      var usz = blob.read_shift(4);\n      var namelen = blob.read_shift(2);\n      var efsz = blob.read_shift(2);\n      var fcsz = blob.read_shift(2);\n      blob.l += 8;\n      var offset = blob.read_shift(4);\n      var EF = parse_extra_field(\n      /*::(*/\n      blob.slice(blob.l + namelen, blob.l + namelen + efsz)\n      /*:: :any)*/\n      );\n      blob.l += namelen + efsz + fcsz;\n      var L = blob.l;\n      blob.l = offset + 4;\n      parse_local_file(blob, csz, usz, o, EF);\n      blob.l = L;\n    }\n\n    return o;\n  }\n  /* head starts just after local file header signature */\n\n\n  function parse_local_file(blob\n  /*:CFBlob*/\n  , csz\n  /*:number*/\n  , usz\n  /*:number*/\n  , o\n  /*:CFBContainer*/\n  , EF) {\n    /* [local file header] */\n    blob.l += 2;\n    var flags = blob.read_shift(2);\n    var meth = blob.read_shift(2);\n    var date = parse_dos_date(blob);\n    if (flags & 0x2041) throw new Error(\"Unsupported ZIP encryption\");\n    var crc32 = blob.read_shift(4);\n\n    var _csz = blob.read_shift(4);\n\n    var _usz = blob.read_shift(4);\n\n    var namelen = blob.read_shift(2);\n    var efsz = blob.read_shift(2); // TODO: flags & (1<<11) // UTF8\n\n    var name = \"\";\n\n    for (var i = 0; i < namelen; ++i) {\n      name += String.fromCharCode(blob[blob.l++]);\n    }\n\n    if (efsz) {\n      var ef = parse_extra_field(\n      /*::(*/\n      blob.slice(blob.l, blob.l + efsz)\n      /*:: :any)*/\n      );\n      if ((ef[0x5455] || {}).mt) date = ef[0x5455].mt;\n      if (((EF || {})[0x5455] || {}).mt) date = EF[0x5455].mt;\n    }\n\n    blob.l += efsz;\n    /* [encryption header] */\n\n    /* [file data] */\n\n    var data = blob.slice(blob.l, blob.l + _csz);\n\n    switch (meth) {\n      case 8:\n        data = _inflateRawSync(blob, _usz);\n        break;\n\n      case 0:\n        break;\n      // TODO: scan for magic number\n\n      default:\n        throw new Error(\"Unsupported ZIP Compression method \" + meth);\n    }\n    /* [data descriptor] */\n\n\n    var wrn = false;\n\n    if (flags & 8) {\n      crc32 = blob.read_shift(4);\n\n      if (crc32 == 0x08074b50) {\n        crc32 = blob.read_shift(4);\n        wrn = true;\n      }\n\n      _csz = blob.read_shift(4);\n      _usz = blob.read_shift(4);\n    }\n\n    if (_csz != csz) warn_or_throw(wrn, \"Bad compressed size: \" + csz + \" != \" + _csz);\n    if (_usz != usz) warn_or_throw(wrn, \"Bad uncompressed size: \" + usz + \" != \" + _usz); //var _crc32 = CRC32.buf(data, 0);\n    //if((crc32>>0) != (_crc32>>0)) warn_or_throw(wrn, \"Bad CRC32 checksum: \" + crc32 + \" != \" + _crc32);\n\n    cfb_add(o, name, data, {\n      unsafe: true,\n      mt: date\n    });\n  }\n\n  function write_zip(cfb\n  /*:CFBContainer*/\n  , options\n  /*:CFBWriteOpts*/\n  )\n  /*:RawBytes*/\n  {\n    var _opts = options || {};\n\n    var out = [],\n        cdirs = [];\n    var o\n    /*:CFBlob*/\n    = new_buf(1);\n    var method = _opts.compression ? 8 : 0,\n        flags = 0;\n    var desc = false;\n    if (desc) flags |= 8;\n    var i = 0,\n        j = 0;\n    var start_cd = 0,\n        fcnt = 0;\n    var root = cfb.FullPaths[0],\n        fp = root,\n        fi = cfb.FileIndex[0];\n    var crcs = [];\n    var sz_cd = 0;\n\n    for (i = 1; i < cfb.FullPaths.length; ++i) {\n      fp = cfb.FullPaths[i].slice(root.length);\n      fi = cfb.FileIndex[i];\n      if (!fi.size || !fi.content || fp == \"\\x01Sh33tJ5\") continue;\n      var start = start_cd;\n      /* TODO: CP437 filename */\n\n      var namebuf = new_buf(fp.length);\n\n      for (j = 0; j < fp.length; ++j) {\n        namebuf.write_shift(1, fp.charCodeAt(j) & 0x7F);\n      }\n\n      namebuf = namebuf.slice(0, namebuf.l);\n      crcs[fcnt] = CRC32.buf(\n      /*::((*/\n      fi.content\n      /*::||[]):any)*/\n      , 0);\n      var outbuf = fi.content\n      /*::||[]*/\n      ;\n      if (method == 8) outbuf = _deflateRawSync(outbuf);\n      /* local file header */\n\n      o = new_buf(30);\n      o.write_shift(4, 0x04034b50);\n      o.write_shift(2, 20);\n      o.write_shift(2, flags);\n      o.write_shift(2, method);\n      /* TODO: last mod file time/date */\n\n      if (fi.mt) write_dos_date(o, fi.mt);else o.write_shift(4, 0);\n      o.write_shift(-4, flags & 8 ? 0 : crcs[fcnt]);\n      o.write_shift(4, flags & 8 ? 0 : outbuf.length);\n      o.write_shift(4, flags & 8 ? 0 :\n      /*::(*/\n      fi.content\n      /*::||[])*/\n      .length);\n      o.write_shift(2, namebuf.length);\n      o.write_shift(2, 0);\n      start_cd += o.length;\n      out.push(o);\n      start_cd += namebuf.length;\n      out.push(namebuf);\n      /* TODO: extra fields? */\n\n      /* TODO: encryption header ? */\n\n      start_cd += outbuf.length;\n      out.push(outbuf);\n      /* data descriptor */\n\n      if (flags & 8) {\n        o = new_buf(12);\n        o.write_shift(-4, crcs[fcnt]);\n        o.write_shift(4, outbuf.length);\n        o.write_shift(4,\n        /*::(*/\n        fi.content\n        /*::||[])*/\n        .length);\n        start_cd += o.l;\n        out.push(o);\n      }\n      /* central directory */\n\n\n      o = new_buf(46);\n      o.write_shift(4, 0x02014b50);\n      o.write_shift(2, 0);\n      o.write_shift(2, 20);\n      o.write_shift(2, flags);\n      o.write_shift(2, method);\n      o.write_shift(4, 0);\n      /* TODO: last mod file time/date */\n\n      o.write_shift(-4, crcs[fcnt]);\n      o.write_shift(4, outbuf.length);\n      o.write_shift(4,\n      /*::(*/\n      fi.content\n      /*::||[])*/\n      .length);\n      o.write_shift(2, namebuf.length);\n      o.write_shift(2, 0);\n      o.write_shift(2, 0);\n      o.write_shift(2, 0);\n      o.write_shift(2, 0);\n      o.write_shift(4, 0);\n      o.write_shift(4, start);\n      sz_cd += o.l;\n      cdirs.push(o);\n      sz_cd += namebuf.length;\n      cdirs.push(namebuf);\n      ++fcnt;\n    }\n    /* end of central directory */\n\n\n    o = new_buf(22);\n    o.write_shift(4, 0x06054b50);\n    o.write_shift(2, 0);\n    o.write_shift(2, 0);\n    o.write_shift(2, fcnt);\n    o.write_shift(2, fcnt);\n    o.write_shift(4, sz_cd);\n    o.write_shift(4, start_cd);\n    o.write_shift(2, 0);\n    return bconcat([bconcat(out\n    /*:any*/\n    ), bconcat(cdirs), o]\n    /*:any*/\n    );\n  }\n\n  var ContentTypeMap = {\n    \"htm\": \"text/html\",\n    \"xml\": \"text/xml\",\n    \"gif\": \"image/gif\",\n    \"jpg\": \"image/jpeg\",\n    \"png\": \"image/png\",\n    \"mso\": \"application/x-mso\",\n    \"thmx\": \"application/vnd.ms-officetheme\",\n    \"sh33tj5\": \"application/octet-stream\"\n  }\n  /*:any*/\n  ;\n\n  function get_content_type(fi\n  /*:CFBEntry*/\n  , fp\n  /*:string*/\n  )\n  /*:string*/\n  {\n    if (fi.ctype) return fi.ctype;\n    var ext = fi.name || \"\",\n        m = ext.match(/\\.([^\\.]+)$/);\n    if (m && ContentTypeMap[m[1]]) return ContentTypeMap[m[1]];\n\n    if (fp) {\n      m = (ext = fp).match(/[\\.\\\\]([^\\.\\\\])+$/);\n      if (m && ContentTypeMap[m[1]]) return ContentTypeMap[m[1]];\n    }\n\n    return \"application/octet-stream\";\n  }\n  /* 76 character chunks TODO: intertwine encoding */\n\n\n  function write_base64_76(bstr\n  /*:string*/\n  )\n  /*:string*/\n  {\n    var data = Base64_encode(bstr);\n    var o = [];\n\n    for (var i = 0; i < data.length; i += 76) {\n      o.push(data.slice(i, i + 76));\n    }\n\n    return o.join(\"\\r\\n\") + \"\\r\\n\";\n  }\n  /*\n  Rules 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  \n  TODO: 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  */\n\n\n  function write_quoted_printable(text\n  /*:string*/\n  )\n  /*:string*/\n  {\n    var encoded = text.replace(/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7E-\\xFF=]/g, function (c) {\n      var w = c.charCodeAt(0).toString(16).toUpperCase();\n      return \"=\" + (w.length == 1 ? \"0\" + w : w);\n    });\n    encoded = encoded.replace(/ $/mg, \"=20\").replace(/\\t$/mg, \"=09\");\n    if (encoded.charAt(0) == \"\\n\") encoded = \"=0D\" + encoded.slice(1);\n    encoded = encoded.replace(/\\r(?!\\n)/mg, \"=0D\").replace(/\\n\\n/mg, \"\\n=0A\").replace(/([^\\r\\n])\\n/mg, \"$1=0A\");\n    var o\n    /*:Array<string>*/\n    = [],\n        split = encoded.split(\"\\r\\n\");\n\n    for (var si = 0; si < split.length; ++si) {\n      var str = split[si];\n\n      if (str.length == 0) {\n        o.push(\"\");\n        continue;\n      }\n\n      for (var i = 0; i < str.length;) {\n        var end = 76;\n        var tmp = str.slice(i, i + end);\n        if (tmp.charAt(end - 1) == \"=\") end--;else if (tmp.charAt(end - 2) == \"=\") end -= 2;else if (tmp.charAt(end - 3) == \"=\") end -= 3;\n        tmp = str.slice(i, i + end);\n        i += end;\n        if (i < str.length) tmp += \"=\";\n        o.push(tmp);\n      }\n    }\n\n    return o.join(\"\\r\\n\");\n  }\n\n  function parse_quoted_printable(data\n  /*:Array<string>*/\n  )\n  /*:RawBytes*/\n  {\n    var o = [];\n    /* unify long lines */\n\n    for (var di = 0; di < data.length; ++di) {\n      var line = data[di];\n\n      while (di <= data.length && line.charAt(line.length - 1) == \"=\") {\n        line = line.slice(0, line.length - 1) + data[++di];\n      }\n\n      o.push(line);\n    }\n    /* decode */\n\n\n    for (var oi = 0; oi < o.length; ++oi) {\n      o[oi] = o[oi].replace(/[=][0-9A-Fa-f]{2}/g, function ($$) {\n        return String.fromCharCode(parseInt($$.slice(1), 16));\n      });\n    }\n\n    return s2a(o.join(\"\\r\\n\"));\n  }\n\n  function parse_mime(cfb\n  /*:CFBContainer*/\n  , data\n  /*:Array<string>*/\n  , root\n  /*:string*/\n  )\n  /*:void*/\n  {\n    var fname = \"\",\n        cte = \"\",\n        ctype = \"\",\n        fdata;\n    var di = 0;\n\n    for (; di < 10; ++di) {\n      var line = data[di];\n      if (!line || line.match(/^\\s*$/)) break;\n      var m = line.match(/^(.*?):\\s*([^\\s].*)$/);\n      if (m) switch (m[1].toLowerCase()) {\n        case \"content-location\":\n          fname = m[2].trim();\n          break;\n\n        case \"content-type\":\n          ctype = m[2].trim();\n          break;\n\n        case \"content-transfer-encoding\":\n          cte = m[2].trim();\n          break;\n      }\n    }\n\n    ++di;\n\n    switch (cte.toLowerCase()) {\n      case 'base64':\n        fdata = s2a(Base64_decode(data.slice(di).join(\"\")));\n        break;\n\n      case 'quoted-printable':\n        fdata = parse_quoted_printable(data.slice(di));\n        break;\n\n      default:\n        throw new Error(\"Unsupported Content-Transfer-Encoding \" + cte);\n    }\n\n    var file = cfb_add(cfb, fname.slice(root.length), fdata, {\n      unsafe: true\n    });\n    if (ctype) file.ctype = ctype;\n  }\n\n  function parse_mad(file\n  /*:RawBytes*/\n  , options\n  /*:CFBReadOpts*/\n  )\n  /*:CFBContainer*/\n  {\n    if (a2s(file.slice(0, 13)).toLowerCase() != \"mime-version:\") throw new Error(\"Unsupported MAD header\");\n    var root = options && options.root || \"\"; // $FlowIgnore\n\n    var data = (has_buf && Buffer.isBuffer(file) ? file.toString(\"binary\") : a2s(file)).split(\"\\r\\n\");\n    var di = 0,\n        row = \"\";\n    /* if root is not specified, scan for the common prefix */\n\n    for (di = 0; di < data.length; ++di) {\n      row = data[di];\n      if (!/^Content-Location:/i.test(row)) continue;\n      row = row.slice(row.indexOf(\"file\"));\n      if (!root) root = row.slice(0, row.lastIndexOf(\"/\") + 1);\n      if (row.slice(0, root.length) == root) continue;\n\n      while (root.length > 0) {\n        root = root.slice(0, root.length - 1);\n        root = root.slice(0, root.lastIndexOf(\"/\") + 1);\n        if (row.slice(0, root.length) == root) break;\n      }\n    }\n\n    var mboundary = (data[1] || \"\").match(/boundary=\"(.*?)\"/);\n    if (!mboundary) throw new Error(\"MAD cannot find boundary\");\n    var boundary = \"--\" + (mboundary[1] || \"\");\n    var FileIndex\n    /*:CFBFileIndex*/\n    = [],\n        FullPaths\n    /*:Array<string>*/\n    = [];\n    var o = {\n      FileIndex: FileIndex,\n      FullPaths: FullPaths\n    };\n    init_cfb(o);\n    var start_di,\n        fcnt = 0;\n\n    for (di = 0; di < data.length; ++di) {\n      var line = data[di];\n      if (line !== boundary && line !== boundary + \"--\") continue;\n      if (fcnt++) parse_mime(o, data.slice(start_di, di), root);\n      start_di = di;\n    }\n\n    return o;\n  }\n\n  function write_mad(cfb\n  /*:CFBContainer*/\n  , options\n  /*:CFBWriteOpts*/\n  )\n  /*:string*/\n  {\n    var opts = options || {};\n    var boundary = opts.boundary || \"SheetJS\";\n    boundary = '------=' + boundary;\n    var out = ['MIME-Version: 1.0', 'Content-Type: multipart/related; boundary=\"' + boundary.slice(2) + '\"', '', '', ''];\n    var root = cfb.FullPaths[0],\n        fp = root,\n        fi = cfb.FileIndex[0];\n\n    for (var i = 1; i < cfb.FullPaths.length; ++i) {\n      fp = cfb.FullPaths[i].slice(root.length);\n      fi = cfb.FileIndex[i];\n      if (!fi.size || !fi.content || fp == \"\\x01Sh33tJ5\") continue;\n      /* Normalize filename */\n\n      fp = fp.replace(/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7E-\\xFF]/g, function (c) {\n        return \"_x\" + c.charCodeAt(0).toString(16) + \"_\";\n      }).replace(/[\\u0080-\\uFFFF]/g, function (u) {\n        return \"_u\" + u.charCodeAt(0).toString(16) + \"_\";\n      });\n      /* Extract content as binary string */\n\n      var ca = fi.content; // $FlowIgnore\n\n      var cstr = has_buf && Buffer.isBuffer(ca) ? ca.toString(\"binary\") : a2s(ca);\n      /* 4/5 of first 1024 chars ascii -> quoted printable, else base64 */\n\n      var dispcnt = 0,\n          L = Math.min(1024, cstr.length),\n          cc = 0;\n\n      for (var csl = 0; csl <= L; ++csl) {\n        if ((cc = cstr.charCodeAt(csl)) >= 0x20 && cc < 0x80) ++dispcnt;\n      }\n\n      var qp = dispcnt >= L * 4 / 5;\n      out.push(boundary);\n      out.push('Content-Location: ' + (opts.root || 'file:///C:/SheetJS/') + fp);\n      out.push('Content-Transfer-Encoding: ' + (qp ? 'quoted-printable' : 'base64'));\n      out.push('Content-Type: ' + get_content_type(fi, fp));\n      out.push('');\n      out.push(qp ? write_quoted_printable(cstr) : write_base64_76(cstr));\n    }\n\n    out.push(boundary + '--\\r\\n');\n    return out.join(\"\\r\\n\");\n  }\n\n  function cfb_new(opts\n  /*:?any*/\n  )\n  /*:CFBContainer*/\n  {\n    var o\n    /*:CFBContainer*/\n    = {}\n    /*:any*/\n    ;\n    init_cfb(o, opts);\n    return o;\n  }\n\n  function cfb_add(cfb\n  /*:CFBContainer*/\n  , name\n  /*:string*/\n  , content\n  /*:?RawBytes*/\n  , opts\n  /*:?any*/\n  )\n  /*:CFBEntry*/\n  {\n    var unsafe = opts && opts.unsafe;\n    if (!unsafe) init_cfb(cfb);\n    var file = !unsafe && CFB.find(cfb, name);\n\n    if (!file) {\n      var fpath\n      /*:string*/\n      = cfb.FullPaths[0];\n      if (name.slice(0, fpath.length) == fpath) fpath = name;else {\n        if (fpath.slice(-1) != \"/\") fpath += \"/\";\n        fpath = (fpath + name).replace(\"//\", \"/\");\n      }\n      file = {\n        name: filename(name),\n        type: 2\n      }\n      /*:any*/\n      ;\n      cfb.FileIndex.push(file);\n      cfb.FullPaths.push(fpath);\n      if (!unsafe) CFB.utils.cfb_gc(cfb);\n    }\n    /*:: if(!file) throw new Error(\"unreachable\"); */\n\n\n    file.content = content\n    /*:any*/\n    ;\n    file.size = content ? content.length : 0;\n\n    if (opts) {\n      if (opts.CLSID) file.clsid = opts.CLSID;\n      if (opts.mt) file.mt = opts.mt;\n      if (opts.ct) file.ct = opts.ct;\n    }\n\n    return file;\n  }\n\n  function cfb_del(cfb\n  /*:CFBContainer*/\n  , name\n  /*:string*/\n  )\n  /*:boolean*/\n  {\n    init_cfb(cfb);\n    var file = CFB.find(cfb, name);\n    if (file) for (var j = 0; j < cfb.FileIndex.length; ++j) {\n      if (cfb.FileIndex[j] == file) {\n        cfb.FileIndex.splice(j, 1);\n        cfb.FullPaths.splice(j, 1);\n        return true;\n      }\n    }\n    return false;\n  }\n\n  function cfb_mov(cfb\n  /*:CFBContainer*/\n  , old_name\n  /*:string*/\n  , new_name\n  /*:string*/\n  )\n  /*:boolean*/\n  {\n    init_cfb(cfb);\n    var file = CFB.find(cfb, old_name);\n    if (file) for (var j = 0; j < cfb.FileIndex.length; ++j) {\n      if (cfb.FileIndex[j] == file) {\n        cfb.FileIndex[j].name = filename(new_name);\n        cfb.FullPaths[j] = new_name;\n        return true;\n      }\n    }\n    return false;\n  }\n\n  function cfb_gc(cfb\n  /*:CFBContainer*/\n  )\n  /*:void*/\n  {\n    rebuild_cfb(cfb, true);\n  }\n\n  exports.find = find;\n  exports.read = read;\n  exports.parse = parse;\n  exports.write = write;\n  exports.writeFile = write_file;\n  exports.utils = {\n    cfb_new: cfb_new,\n    cfb_add: cfb_add,\n    cfb_del: cfb_del,\n    cfb_mov: cfb_mov,\n    cfb_gc: cfb_gc,\n    ReadShift: ReadShift,\n    CheckField: CheckField,\n    prep_blob: prep_blob,\n    bconcat: bconcat,\n    use_zlib: use_zlib,\n    _deflateRaw: _deflate,\n    _inflateRaw: _inflate,\n    consts: consts\n  };\n  return exports;\n}();\n\nvar _fs = void 0;\n\nfunction set_fs(fs) {\n  _fs = fs;\n}\n\nexport { set_fs };\n/* normalize data for blob ctor */\n\nfunction blobify(data) {\n  if (typeof data === \"string\") return s2ab(data);\n  if (Array.isArray(data)) return a2u(data);\n  return data;\n}\n/* write or download file */\n\n\nfunction write_dl(fname\n/*:string*/\n, payload\n/*:any*/\n, enc\n/*:?string*/\n) {\n  /*global IE_SaveFile, Blob, navigator, saveAs, document, File, chrome */\n  if (typeof _fs !== 'undefined' && _fs.writeFileSync) return enc ? _fs.writeFileSync(fname, payload, enc) : _fs.writeFileSync(fname, payload);\n\n  if (typeof Deno !== 'undefined') {\n    /* in this spot, it's safe to assume typed arrays and TextEncoder/TextDecoder exist */\n    if (enc && typeof payload == \"string\") switch (enc) {\n      case \"utf8\":\n        payload = new TextEncoder(enc).encode(payload);\n        break;\n\n      case \"binary\":\n        payload = s2ab(payload);\n        break;\n\n      /* TODO: binary equivalent */\n\n      default:\n        throw new Error(\"Unsupported encoding \" + enc);\n    }\n    return Deno.writeFileSync(fname, payload);\n  }\n\n  var data = enc == \"utf8\" ? utf8write(payload) : payload;\n  /*:: declare var IE_SaveFile: any; */\n\n  if (typeof IE_SaveFile !== 'undefined') return IE_SaveFile(data, fname);\n\n  if (typeof Blob !== 'undefined') {\n    var blob = new Blob([blobify(data)], {\n      type: \"application/octet-stream\"\n    });\n    /*:: declare var navigator: any; */\n\n    if (typeof navigator !== 'undefined' && navigator.msSaveBlob) return navigator.msSaveBlob(blob, fname);\n    /*:: declare var saveAs: any; */\n\n    if (typeof saveAs !== 'undefined') return saveAs(blob, fname);\n\n    if (typeof URL !== 'undefined' && typeof document !== 'undefined' && document.createElement && URL.createObjectURL) {\n      var url = URL.createObjectURL(blob);\n      /*:: declare var chrome: any; */\n\n      if (typeof chrome === 'object' && typeof (chrome.downloads || {}).download == \"function\") {\n        if (URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function () {\n          URL.revokeObjectURL(url);\n        }, 60000);\n        return chrome.downloads.download({\n          url: url,\n          filename: fname,\n          saveAs: true\n        });\n      }\n\n      var a = document.createElement(\"a\");\n\n      if (a.download != null) {\n        /*:: if(document.body == null) throw new Error(\"unreachable\"); */\n        a.download = fname;\n        a.href = url;\n        document.body.appendChild(a);\n        a.click();\n        /*:: if(document.body == null) throw new Error(\"unreachable\"); */\n\n        document.body.removeChild(a);\n        if (URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function () {\n          URL.revokeObjectURL(url);\n        }, 60000);\n        return url;\n      }\n    }\n  } // $FlowIgnore\n\n\n  if (typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try {\n    // extendscript\n    // $FlowIgnore\n    var out = File(fname);\n    out.open(\"w\");\n    out.encoding = \"binary\";\n    if (Array.isArray(payload)) payload = a2s(payload);\n    out.write(payload);\n    out.close();\n    return payload;\n  } catch (e) {\n    if (!e.message || !e.message.match(/onstruct/)) throw e;\n  }\n  throw new Error(\"cannot save file \" + fname);\n}\n/* read binary data from file */\n\n\nfunction read_binary(path\n/*:string*/\n) {\n  if (typeof _fs !== 'undefined') return _fs.readFileSync(path);\n  if (typeof Deno !== 'undefined') return Deno.readFileSync(path); // $FlowIgnore\n\n  if (typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try {\n    // extendscript\n    // $FlowIgnore\n    var infile = File(path);\n    infile.open(\"r\");\n    infile.encoding = \"binary\";\n    var data = infile.read();\n    infile.close();\n    return data;\n  } catch (e) {\n    if (!e.message || !e.message.match(/onstruct/)) throw e;\n  }\n  throw new Error(\"Cannot access file \" + path);\n}\n\nfunction keys(o\n/*:any*/\n)\n/*:Array<any>*/\n{\n  var ks = Object.keys(o),\n      o2 = [];\n\n  for (var i = 0; i < ks.length; ++i) {\n    if (Object.prototype.hasOwnProperty.call(o, ks[i])) o2.push(ks[i]);\n  }\n\n  return o2;\n}\n\nfunction evert_key(obj\n/*:any*/\n, key\n/*:string*/\n)\n/*:EvertType*/\n{\n  var o = []\n  /*:any*/\n  ,\n      K = keys(obj);\n\n  for (var i = 0; i !== K.length; ++i) {\n    if (o[obj[K[i]][key]] == null) o[obj[K[i]][key]] = K[i];\n  }\n\n  return o;\n}\n\nfunction evert(obj\n/*:any*/\n)\n/*:EvertType*/\n{\n  var o = []\n  /*:any*/\n  ,\n      K = keys(obj);\n\n  for (var i = 0; i !== K.length; ++i) {\n    o[obj[K[i]]] = K[i];\n  }\n\n  return o;\n}\n\nfunction evert_num(obj\n/*:any*/\n)\n/*:EvertNumType*/\n{\n  var o = []\n  /*:any*/\n  ,\n      K = keys(obj);\n\n  for (var i = 0; i !== K.length; ++i) {\n    o[obj[K[i]]] = parseInt(K[i], 10);\n  }\n\n  return o;\n}\n\nfunction evert_arr(obj\n/*:any*/\n)\n/*:EvertArrType*/\n{\n  var o\n  /*:EvertArrType*/\n  = []\n  /*:any*/\n  ,\n      K = keys(obj);\n\n  for (var i = 0; i !== K.length; ++i) {\n    if (o[obj[K[i]]] == null) o[obj[K[i]]] = [];\n    o[obj[K[i]]].push(K[i]);\n  }\n\n  return o;\n}\n\nvar basedate = /*#__PURE__*/new Date(1899, 11, 30, 0, 0, 0); // 2209161600000\n\nfunction datenum(v\n/*:Date*/\n, date1904\n/*:?boolean*/\n)\n/*:number*/\n{\n  var epoch = /*#__PURE__*/v.getTime();\n  if (date1904) epoch -= 1462 * 24 * 60 * 60 * 1000;\n  var dnthresh = /*#__PURE__*/basedate.getTime() + ( /*#__PURE__*/v.getTimezoneOffset() - /*#__PURE__*/basedate.getTimezoneOffset()) * 60000;\n  return (epoch - dnthresh) / (24 * 60 * 60 * 1000);\n}\n\nvar refdate = /*#__PURE__*/new Date();\nvar dnthresh = /*#__PURE__*/basedate.getTime() + ( /*#__PURE__*/refdate.getTimezoneOffset() - /*#__PURE__*/basedate.getTimezoneOffset()) * 60000;\nvar refoffset = /*#__PURE__*/refdate.getTimezoneOffset();\n\nfunction numdate(v\n/*:number*/\n)\n/*:Date*/\n{\n  var out = new Date();\n  out.setTime(v * 24 * 60 * 60 * 1000 + dnthresh);\n\n  if (out.getTimezoneOffset() !== refoffset) {\n    out.setTime(out.getTime() + (out.getTimezoneOffset() - refoffset) * 60000);\n  }\n\n  return out;\n}\n/* ISO 8601 Duration */\n\n\nfunction parse_isodur(s) {\n  var sec = 0,\n      mt = 0,\n      time = false;\n  var m = s.match(/P([0-9\\.]+Y)?([0-9\\.]+M)?([0-9\\.]+D)?T([0-9\\.]+H)?([0-9\\.]+M)?([0-9\\.]+S)?/);\n  if (!m) throw new Error(\"|\" + s + \"| is not an ISO8601 Duration\");\n\n  for (var i = 1; i != m.length; ++i) {\n    if (!m[i]) continue;\n    mt = 1;\n    if (i > 3) time = true;\n\n    switch (m[i].slice(m[i].length - 1)) {\n      case 'Y':\n        throw new Error(\"Unsupported ISO Duration Field: \" + m[i].slice(m[i].length - 1));\n\n      case 'D':\n        mt *= 24;\n\n      /* falls through */\n\n      case 'H':\n        mt *= 60;\n\n      /* falls through */\n\n      case 'M':\n        if (!time) throw new Error(\"Unsupported ISO Duration Field: M\");else mt *= 60;\n\n      /* falls through */\n\n      case 'S':\n        break;\n    }\n\n    sec += mt * parseInt(m[i], 10);\n  }\n\n  return sec;\n}\n\nvar good_pd_date_1 = /*#__PURE__*/new Date('2017-02-19T19:06:09.000Z');\nvar good_pd_date = /*#__PURE__*/isNaN( /*#__PURE__*/good_pd_date_1.getFullYear()) ? /*#__PURE__*/new Date('2/19/17') : good_pd_date_1;\nvar good_pd = /*#__PURE__*/good_pd_date.getFullYear() == 2017;\n/* parses a date as a local date */\n\nfunction parseDate(str\n/*:string|Date*/\n, fixdate\n/*:?number*/\n)\n/*:Date*/\n{\n  var d = new Date(str);\n\n  if (good_pd) {\n    /*:: if(fixdate == null) fixdate = 0; */\n    if (fixdate > 0) d.setTime(d.getTime() + d.getTimezoneOffset() * 60 * 1000);else if (fixdate < 0) d.setTime(d.getTime() - d.getTimezoneOffset() * 60 * 1000);\n    return d;\n  }\n\n  if (str instanceof Date) return str;\n\n  if (good_pd_date.getFullYear() == 1917 && !isNaN(d.getFullYear())) {\n    var s = d.getFullYear();\n    if (str.indexOf(\"\" + s) > -1) return d;\n    d.setFullYear(d.getFullYear() + 100);\n    return d;\n  }\n\n  var n = str.match(/\\d+/g) || [\"2017\", \"2\", \"19\", \"0\", \"0\", \"0\"];\n  var out = new Date(+n[0], +n[1] - 1, +n[2], +n[3] || 0, +n[4] || 0, +n[5] || 0);\n  if (str.indexOf(\"Z\") > -1) out = new Date(out.getTime() - out.getTimezoneOffset() * 60 * 1000);\n  return out;\n}\n\nfunction cc2str(arr\n/*:Array<number>*/\n, debomit)\n/*:string*/\n{\n  if (has_buf && Buffer.isBuffer(arr)) {\n    if (debomit) {\n      if (arr[0] == 0xFF && arr[1] == 0xFE) return utf8write(arr.slice(2).toString(\"utf16le\"));\n      if (arr[1] == 0xFE && arr[2] == 0xFF) return utf8write(utf16beread(arr.slice(2).toString(\"binary\")));\n    }\n\n    return arr.toString(\"binary\");\n  }\n\n  if (typeof TextDecoder !== \"undefined\") try {\n    if (debomit) {\n      if (arr[0] == 0xFF && arr[1] == 0xFE) return utf8write(new TextDecoder(\"utf-16le\").decode(arr.slice(2)));\n      if (arr[0] == 0xFE && arr[1] == 0xFF) return utf8write(new TextDecoder(\"utf-16be\").decode(arr.slice(2)));\n    }\n\n    var rev = {\n      \"\\u20AC\": \"\\x80\",\n      \"\\u201A\": \"\\x82\",\n      \"\\u0192\": \"\\x83\",\n      \"\\u201E\": \"\\x84\",\n      \"\\u2026\": \"\\x85\",\n      \"\\u2020\": \"\\x86\",\n      \"\\u2021\": \"\\x87\",\n      \"\\u02C6\": \"\\x88\",\n      \"\\u2030\": \"\\x89\",\n      \"\\u0160\": \"\\x8a\",\n      \"\\u2039\": \"\\x8b\",\n      \"\\u0152\": \"\\x8c\",\n      \"\\u017D\": \"\\x8e\",\n      \"\\u2018\": \"\\x91\",\n      \"\\u2019\": \"\\x92\",\n      \"\\u201C\": \"\\x93\",\n      \"\\u201D\": \"\\x94\",\n      \"\\u2022\": \"\\x95\",\n      \"\\u2013\": \"\\x96\",\n      \"\\u2014\": \"\\x97\",\n      \"\\u02DC\": \"\\x98\",\n      \"\\u2122\": \"\\x99\",\n      \"\\u0161\": \"\\x9a\",\n      \"\\u203A\": \"\\x9b\",\n      \"\\u0153\": \"\\x9c\",\n      \"\\u017E\": \"\\x9e\",\n      \"\\u0178\": \"\\x9f\"\n    };\n    if (Array.isArray(arr)) arr = new Uint8Array(arr);\n    return new TextDecoder(\"latin1\").decode(arr).replace(/[€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ]/g, function (c) {\n      return rev[c] || c;\n    });\n  } catch (e) {}\n  var o = [];\n\n  for (var i = 0; i != arr.length; ++i) {\n    o.push(String.fromCharCode(arr[i]));\n  }\n\n  return o.join(\"\");\n}\n\nfunction dup(o\n/*:any*/\n)\n/*:any*/\n{\n  if (typeof JSON != 'undefined' && !Array.isArray(o)) return JSON.parse(JSON.stringify(o));\n  if (typeof o != 'object' || o == null) return o;\n  if (o instanceof Date) return new Date(o.getTime());\n  var out = {};\n\n  for (var k in o) {\n    if (Object.prototype.hasOwnProperty.call(o, k)) out[k] = dup(o[k]);\n  }\n\n  return out;\n}\n\nfunction fill(c\n/*:string*/\n, l\n/*:number*/\n)\n/*:string*/\n{\n  var o = \"\";\n\n  while (o.length < l) {\n    o += c;\n  }\n\n  return o;\n}\n/* TODO: stress test */\n\n\nfunction fuzzynum(s\n/*:string*/\n)\n/*:number*/\n{\n  var v\n  /*:number*/\n  = Number(s);\n  if (!isNaN(v)) return isFinite(v) ? v : NaN;\n  if (!/\\d/.test(s)) return v;\n  var wt = 1;\n  var ss = s.replace(/([\\d]),([\\d])/g, \"$1$2\").replace(/[$]/g, \"\").replace(/[%]/g, function () {\n    wt *= 100;\n    return \"\";\n  });\n  if (!isNaN(v = Number(ss))) return v / wt;\n  ss = ss.replace(/[(](.*)[)]/, function ($$, $1) {\n    wt = -wt;\n    return $1;\n  });\n  if (!isNaN(v = Number(ss))) return v / wt;\n  return v;\n}\n\nvar lower_months = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'];\n\nfunction fuzzydate(s\n/*:string*/\n)\n/*:Date*/\n{\n  var o = new Date(s),\n      n = new Date(NaN);\n  var y = o.getYear(),\n      m = o.getMonth(),\n      d = o.getDate();\n  if (isNaN(d)) return n;\n  var lower = s.toLowerCase();\n\n  if (lower.match(/jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec/)) {\n    lower = lower.replace(/[^a-z]/g, \"\").replace(/([^a-z]|^)[ap]m?([^a-z]|$)/, \"\");\n    if (lower.length > 3 && lower_months.indexOf(lower) == -1) return n;\n  } else if (lower.match(/[a-z]/)) return n;\n\n  if (y < 0 || y > 8099) return n;\n  if ((m > 0 || d > 1) && y != 101) return o;\n  if (s.match(/[^-0-9:,\\/\\\\]/)) return n;\n  return o;\n}\n\nvar split_regex = /*#__PURE__*/function () {\n  var safe_split_regex = \"abacaba\".split(/(:?b)/i).length == 5;\n  return function split_regex(str\n  /*:string*/\n  , re, def\n  /*:string*/\n  )\n  /*:Array<string>*/\n  {\n    if (safe_split_regex || typeof re == \"string\") return str.split(re);\n    var p = str.split(re),\n        o = [p[0]];\n\n    for (var i = 1; i < p.length; ++i) {\n      o.push(def);\n      o.push(p[i]);\n    }\n\n    return o;\n  };\n}();\n\nfunction getdatastr(data)\n/*:?string*/\n{\n  if (!data) return null;\n  if (data.content && data.type) return cc2str(data.content, true);\n  if (data.data) return debom(data.data);\n  if (data.asNodeBuffer && has_buf) return debom(data.asNodeBuffer().toString('binary'));\n  if (data.asBinary) return debom(data.asBinary());\n  if (data._data && data._data.getContent) return debom(cc2str(Array.prototype.slice.call(data._data.getContent(), 0)));\n  return null;\n}\n\nfunction getdatabin(data) {\n  if (!data) return null;\n  if (data.data) return char_codes(data.data);\n  if (data.asNodeBuffer && has_buf) return data.asNodeBuffer();\n\n  if (data._data && data._data.getContent) {\n    var o = data._data.getContent();\n\n    if (typeof o == \"string\") return char_codes(o);\n    return Array.prototype.slice.call(o);\n  }\n\n  if (data.content && data.type) return data.content;\n  return null;\n}\n\nfunction getdata(data) {\n  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\n/* OASIS does not comment on filename case sensitivity */\n\n\nfunction safegetzipfile(zip, file\n/*:string*/\n) {\n  var k = zip.FullPaths || keys(zip.files);\n  var f = file.toLowerCase().replace(/[\\/]/g, '\\\\'),\n      g = f.replace(/\\\\/g, '\\/');\n\n  for (var i = 0; i < k.length; ++i) {\n    var n = k[i].replace(/^Root Entry[\\/]/, \"\").toLowerCase();\n    if (f == n || g == n) return zip.files ? zip.files[k[i]] : zip.FileIndex[i];\n  }\n\n  return null;\n}\n\nfunction getzipfile(zip, file\n/*:string*/\n) {\n  var o = safegetzipfile(zip, file);\n  if (o == null) throw new Error(\"Cannot find file \" + file + \" in zip\");\n  return o;\n}\n\nfunction getzipdata(zip, file\n/*:string*/\n, safe\n/*:?boolean*/\n)\n/*:any*/\n{\n  if (!safe) return getdata(getzipfile(zip, file));\n  if (!file) return null;\n\n  try {\n    return getzipdata(zip, file);\n  } catch (e) {\n    return null;\n  }\n}\n\nfunction getzipstr(zip, file\n/*:string*/\n, safe\n/*:?boolean*/\n)\n/*:?string*/\n{\n  if (!safe) return getdatastr(getzipfile(zip, file));\n  if (!file) return null;\n\n  try {\n    return getzipstr(zip, file);\n  } catch (e) {\n    return null;\n  }\n}\n\nfunction getzipbin(zip, file\n/*:string*/\n, safe\n/*:?boolean*/\n)\n/*:any*/\n{\n  if (!safe) return getdatabin(getzipfile(zip, file));\n  if (!file) return null;\n\n  try {\n    return getzipbin(zip, file);\n  } catch (e) {\n    return null;\n  }\n}\n\nfunction zipentries(zip) {\n  var k = zip.FullPaths || keys(zip.files),\n      o = [];\n\n  for (var i = 0; i < k.length; ++i) {\n    if (k[i].slice(-1) != '/') o.push(k[i].replace(/^Root Entry[\\/]/, \"\"));\n  }\n\n  return o.sort();\n}\n\nfunction zip_add_file(zip, path, content) {\n  if (zip.FullPaths) {\n    if (typeof content == \"string\") {\n      var res;\n      if (has_buf) res = Buffer_from(content);\n      /* TODO: investigate performance in Edge 13 */\n      //else if(typeof TextEncoder !== \"undefined\") res = new TextEncoder().encode(content);\n      else res = utf8decode(content);\n      return CFB.utils.cfb_add(zip, path, res);\n    }\n\n    CFB.utils.cfb_add(zip, path, content);\n  } else zip.file(path, content);\n}\n\nfunction zip_new() {\n  return CFB.utils.cfb_new();\n}\n\nfunction zip_read(d, o) {\n  switch (o.type) {\n    case \"base64\":\n      return CFB.read(d, {\n        type: \"base64\"\n      });\n\n    case \"binary\":\n      return CFB.read(d, {\n        type: \"binary\"\n      });\n\n    case \"buffer\":\n    case \"array\":\n      return CFB.read(d, {\n        type: \"buffer\"\n      });\n  }\n\n  throw new Error(\"Unrecognized type \" + o.type);\n}\n\nfunction resolve_path(path\n/*:string*/\n, base\n/*:string*/\n)\n/*:string*/\n{\n  if (path.charAt(0) == \"/\") return path.slice(1);\n  var result = base.split('/');\n  if (base.slice(-1) != \"/\") result.pop(); // folder path\n\n  var target = path.split('/');\n\n  while (target.length !== 0) {\n    var step = target.shift();\n    if (step === '..') result.pop();else if (step !== '.') result.push(step);\n  }\n\n  return result.join('/');\n}\n\nvar XML_HEADER = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\r\\n';\nvar attregexg = /([^\"\\s?>\\/]+)\\s*=\\s*((?:\")([^\"]*)(?:\")|(?:')([^']*)(?:')|([^'\">\\s]+))/g;\nvar tagregex1 = /<[\\/\\?]?[a-zA-Z0-9:_-]+(?:\\s+[^\"\\s?>\\/]+\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^'\">\\s=]+))*\\s*[\\/\\?]?>/mg,\n    tagregex2 = /<[^>]*>/g;\nvar tagregex = /*#__PURE__*/XML_HEADER.match(tagregex1) ? tagregex1 : tagregex2;\nvar nsregex = /<\\w*:/,\n    nsregex2 = /<(\\/?)\\w+:/;\n\nfunction parsexmltag(tag\n/*:string*/\n, skip_root\n/*:?boolean*/\n, skip_LC\n/*:?boolean*/\n)\n/*:any*/\n{\n  var z = {}\n  /*:any*/\n  ;\n  var eq = 0,\n      c = 0;\n\n  for (; eq !== tag.length; ++eq) {\n    if ((c = tag.charCodeAt(eq)) === 32 || c === 10 || c === 13) break;\n  }\n\n  if (!skip_root) z[0] = tag.slice(0, eq);\n  if (eq === tag.length) return z;\n  var m = tag.match(attregexg),\n      j = 0,\n      v = \"\",\n      i = 0,\n      q = \"\",\n      cc = \"\",\n      quot = 1;\n  if (m) for (i = 0; i != m.length; ++i) {\n    cc = m[i];\n\n    for (c = 0; c != cc.length; ++c) {\n      if (cc.charCodeAt(c) === 61) break;\n    }\n\n    q = cc.slice(0, c).trim();\n\n    while (cc.charCodeAt(c + 1) == 32) {\n      ++c;\n    }\n\n    quot = (eq = cc.charCodeAt(c + 1)) == 34 || eq == 39 ? 1 : 0;\n    v = cc.slice(c + 1 + quot, cc.length - quot);\n\n    for (j = 0; j != q.length; ++j) {\n      if (q.charCodeAt(j) === 58) break;\n    }\n\n    if (j === q.length) {\n      if (q.indexOf(\"_\") > 0) q = q.slice(0, q.indexOf(\"_\")); // from ods\n\n      z[q] = v;\n      if (!skip_LC) z[q.toLowerCase()] = v;\n    } else {\n      var k = (j === 5 && q.slice(0, 5) === \"xmlns\" ? \"xmlns\" : \"\") + q.slice(j + 1);\n      if (z[k] && q.slice(j - 3, j) == \"ext\") continue; // from ods\n\n      z[k] = v;\n      if (!skip_LC) z[k.toLowerCase()] = v;\n    }\n  }\n  return z;\n}\n\nfunction strip_ns(x\n/*:string*/\n)\n/*:string*/\n{\n  return x.replace(nsregex2, \"<$1\");\n}\n\nvar encodings = {\n  '&quot;': '\"',\n  '&apos;': \"'\",\n  '&gt;': '>',\n  '&lt;': '<',\n  '&amp;': '&'\n};\nvar rencoding = /*#__PURE__*/evert(encodings); //var rencstr = \"&<>'\\\"\".split(\"\");\n// TODO: CP remap (need to read file version to determine OS)\n\nvar unescapexml\n/*:StringConv*/\n= /*#__PURE__*/function () {\n  /* 22.4.2.4 bstr (Basic String) */\n  var encregex = /&(?:quot|apos|gt|lt|amp|#x?([\\da-fA-F]+));/ig,\n      coderegex = /_x([\\da-fA-F]{4})_/ig;\n  return function unescapexml(text\n  /*:string*/\n  )\n  /*:string*/\n  {\n    var s = text + '',\n        i = s.indexOf(\"<![CDATA[\");\n    if (i == -1) return s.replace(encregex, function ($$, $1) {\n      return encodings[$$] || String.fromCharCode(parseInt($1, $$.indexOf(\"x\") > -1 ? 16 : 10)) || $$;\n    }).replace(coderegex, function (m, c) {\n      return String.fromCharCode(parseInt(c, 16));\n    });\n    var j = s.indexOf(\"]]>\");\n    return unescapexml(s.slice(0, i)) + s.slice(i + 9, j) + unescapexml(s.slice(j + 3));\n  };\n}();\n\nvar decregex = /[&<>'\"]/g,\n    charegex = /[\\u0000-\\u0008\\u000b-\\u001f]/g;\n\nfunction escapexml(text\n/*:string*/\n)\n/*:string*/\n{\n  var s = text + '';\n  return s.replace(decregex, function (y) {\n    return rencoding[y];\n  }).replace(charegex, function (s) {\n    return \"_x\" + (\"000\" + s.charCodeAt(0).toString(16)).slice(-4) + \"_\";\n  });\n}\n\nfunction escapexmltag(text\n/*:string*/\n)\n/*:string*/\n{\n  return escapexml(text).replace(/ /g, \"_x0020_\");\n}\n\nvar htmlcharegex = /[\\u0000-\\u001f]/g;\n\nfunction escapehtml(text\n/*:string*/\n)\n/*:string*/\n{\n  var s = text + '';\n  return s.replace(decregex, function (y) {\n    return rencoding[y];\n  }).replace(/\\n/g, \"<br/>\").replace(htmlcharegex, function (s) {\n    return \"&#x\" + (\"000\" + s.charCodeAt(0).toString(16)).slice(-4) + \";\";\n  });\n}\n\nfunction escapexlml(text\n/*:string*/\n)\n/*:string*/\n{\n  var s = text + '';\n  return s.replace(decregex, function (y) {\n    return rencoding[y];\n  }).replace(htmlcharegex, function (s) {\n    return \"&#x\" + s.charCodeAt(0).toString(16).toUpperCase() + \";\";\n  });\n}\n/* TODO: handle codepages */\n\n\nvar xlml_fixstr\n/*:StringConv*/\n= /*#__PURE__*/function () {\n  var entregex = /&#(\\d+);/g;\n\n  function entrepl($$\n  /*:string*/\n  , $1\n  /*:string*/\n  )\n  /*:string*/\n  {\n    return String.fromCharCode(parseInt($1, 10));\n  }\n\n  return function xlml_fixstr(str\n  /*:string*/\n  )\n  /*:string*/\n  {\n    return str.replace(entregex, entrepl);\n  };\n}();\n\nfunction xlml_unfixstr(str\n/*:string*/\n)\n/*:string*/\n{\n  return str.replace(/(\\r\\n|[\\r\\n])/g, \"\\&#10;\");\n}\n\nfunction parsexmlbool(value\n/*:any*/\n)\n/*:boolean*/\n{\n  switch (value) {\n    case 1:\n    case true:\n    case '1':\n    case 'true':\n    case 'TRUE':\n      return true;\n\n    /* case '0': case 'false': case 'FALSE':*/\n\n    default:\n      return false;\n  }\n}\n\nfunction utf8reada(orig\n/*:string*/\n)\n/*:string*/\n{\n  var out = \"\",\n      i = 0,\n      c = 0,\n      d = 0,\n      e = 0,\n      f = 0,\n      w = 0;\n\n  while (i < orig.length) {\n    c = orig.charCodeAt(i++);\n\n    if (c < 128) {\n      out += String.fromCharCode(c);\n      continue;\n    }\n\n    d = orig.charCodeAt(i++);\n\n    if (c > 191 && c < 224) {\n      f = (c & 31) << 6;\n      f |= d & 63;\n      out += String.fromCharCode(f);\n      continue;\n    }\n\n    e = orig.charCodeAt(i++);\n\n    if (c < 240) {\n      out += String.fromCharCode((c & 15) << 12 | (d & 63) << 6 | e & 63);\n      continue;\n    }\n\n    f = orig.charCodeAt(i++);\n    w = ((c & 7) << 18 | (d & 63) << 12 | (e & 63) << 6 | f & 63) - 65536;\n    out += String.fromCharCode(0xD800 + (w >>> 10 & 1023));\n    out += String.fromCharCode(0xDC00 + (w & 1023));\n  }\n\n  return out;\n}\n\nfunction utf8readb(data) {\n  var out = new_raw_buf(2 * data.length),\n      w,\n      i,\n      j = 1,\n      k = 0,\n      ww = 0,\n      c;\n\n  for (i = 0; i < data.length; i += j) {\n    j = 1;\n    if ((c = data.charCodeAt(i)) < 128) w = c;else if (c < 224) {\n      w = (c & 31) * 64 + (data.charCodeAt(i + 1) & 63);\n      j = 2;\n    } else if (c < 240) {\n      w = (c & 15) * 4096 + (data.charCodeAt(i + 1) & 63) * 64 + (data.charCodeAt(i + 2) & 63);\n      j = 3;\n    } else {\n      j = 4;\n      w = (c & 7) * 262144 + (data.charCodeAt(i + 1) & 63) * 4096 + (data.charCodeAt(i + 2) & 63) * 64 + (data.charCodeAt(i + 3) & 63);\n      w -= 65536;\n      ww = 0xD800 + (w >>> 10 & 1023);\n      w = 0xDC00 + (w & 1023);\n    }\n\n    if (ww !== 0) {\n      out[k++] = ww & 255;\n      out[k++] = ww >>> 8;\n      ww = 0;\n    }\n\n    out[k++] = w % 256;\n    out[k++] = w >>> 8;\n  }\n\n  return out.slice(0, k).toString('ucs2');\n}\n\nfunction utf8readc(data) {\n  return Buffer_from(data, 'binary').toString('utf8');\n}\n\nvar utf8corpus = \"foo bar baz\\xE2\\x98\\x83\\xF0\\x9F\\x8D\\xA3\";\nvar utf8read = has_buf && ( /*#__PURE__*/utf8readc(utf8corpus) == /*#__PURE__*/utf8reada(utf8corpus) && utf8readc || /*#__PURE__*/utf8readb(utf8corpus) == /*#__PURE__*/utf8reada(utf8corpus) && utf8readb) || utf8reada;\nvar utf8write\n/*:StringConv*/\n= has_buf ? function (data) {\n  return Buffer_from(data, 'utf8').toString(\"binary\");\n} : function (orig\n/*:string*/\n)\n/*:string*/\n{\n  var out\n  /*:Array<string>*/\n  = [],\n      i = 0,\n      c = 0,\n      d = 0;\n\n  while (i < orig.length) {\n    c = orig.charCodeAt(i++);\n\n    switch (true) {\n      case c < 128:\n        out.push(String.fromCharCode(c));\n        break;\n\n      case c < 2048:\n        out.push(String.fromCharCode(192 + (c >> 6)));\n        out.push(String.fromCharCode(128 + (c & 63)));\n        break;\n\n      case c >= 55296 && c < 57344:\n        c -= 55296;\n        d = orig.charCodeAt(i++) - 56320 + (c << 10);\n        out.push(String.fromCharCode(240 + (d >> 18 & 7)));\n        out.push(String.fromCharCode(144 + (d >> 12 & 63)));\n        out.push(String.fromCharCode(128 + (d >> 6 & 63)));\n        out.push(String.fromCharCode(128 + (d & 63)));\n        break;\n\n      default:\n        out.push(String.fromCharCode(224 + (c >> 12)));\n        out.push(String.fromCharCode(128 + (c >> 6 & 63)));\n        out.push(String.fromCharCode(128 + (c & 63)));\n    }\n  }\n\n  return out.join(\"\");\n}; // matches <foo>...</foo> extracts content\n\nvar matchtag = /*#__PURE__*/function () {\n  var mtcache\n  /*:{[k:string]:RegExp}*/\n  = {}\n  /*:any*/\n  ;\n  return function matchtag(f\n  /*:string*/\n  , g\n  /*:?string*/\n  )\n  /*:RegExp*/\n  {\n    var t = f + \"|\" + (g || \"\");\n    if (mtcache[t]) return mtcache[t];\n    return mtcache[t] = new RegExp('<(?:\\\\w+:)?' + f + '(?: xml:space=\"preserve\")?(?:[^>]*)>([\\\\s\\\\S]*?)</(?:\\\\w+:)?' + f + '>', g || \"\"\n    /*:any*/\n    );\n  };\n}();\n\nvar htmldecode\n/*:{(s:string):string}*/\n= /*#__PURE__*/function () {\n  var entities\n  /*:Array<[RegExp, string]>*/\n  = [['nbsp', ' '], ['middot', '·'], ['quot', '\"'], ['apos', \"'\"], ['gt', '>'], ['lt', '<'], ['amp', '&']].map(function (x\n  /*:[string, string]*/\n  ) {\n    return [new RegExp('&' + x[0] + ';', \"ig\"), x[1]];\n  });\n  return function htmldecode(str\n  /*:string*/\n  )\n  /*:string*/\n  {\n    var o = str // Remove new lines and spaces from start of content\n    .replace(/^[\\t\\n\\r ]+/, \"\") // Remove new lines and spaces from end of content\n    .replace(/[\\t\\n\\r ]+$/, \"\") // Added line which removes any white space characters after and before html tags\n    .replace(/>\\s+/g, \">\").replace(/\\s+</g, \"<\") // Replace remaining new lines and spaces with space\n    .replace(/[\\t\\n\\r ]+/g, \" \") // Replace <br> tags with new lines\n    .replace(/<\\s*[bB][rR]\\s*\\/?>/g, \"\\n\") // Strip HTML elements\n    .replace(/<[^>]*>/g, \"\");\n\n    for (var i = 0; i < entities.length; ++i) {\n      o = o.replace(entities[i][0], entities[i][1]);\n    }\n\n    return o;\n  };\n}();\n\nvar vtregex = /*#__PURE__*/function () {\n  var vt_cache = {};\n  return function vt_regex(bt) {\n    if (vt_cache[bt] !== undefined) return vt_cache[bt];\n    return vt_cache[bt] = new RegExp(\"<(?:vt:)?\" + bt + \">([\\\\s\\\\S]*?)</(?:vt:)?\" + bt + \">\", 'g');\n  };\n}();\n\nvar vtvregex = /<\\/?(?:vt:)?variant>/g,\n    vtmregex = /<(?:vt:)([^>]*)>([\\s\\S]*)</;\n\nfunction parseVector(data\n/*:string*/\n, opts)\n/*:Array<{v:string,t:string}>*/\n{\n  var h = parsexmltag(data);\n  var matches\n  /*:Array<string>*/\n  = data.match(vtregex(h.baseType)) || [];\n  var res\n  /*:Array<any>*/\n  = [];\n\n  if (matches.length != h.size) {\n    if (opts.WTF) throw new Error(\"unexpected vector length \" + matches.length + \" != \" + h.size);\n    return res;\n  }\n\n  matches.forEach(function (x\n  /*:string*/\n  ) {\n    var v = x.replace(vtvregex, \"\").match(vtmregex);\n    if (v) res.push({\n      v: utf8read(v[2]),\n      t: v[1]\n    });\n  });\n  return res;\n}\n\nvar wtregex = /(^\\s|\\s$|\\n)/;\n\nfunction writetag(f\n/*:string*/\n, g\n/*:string*/\n)\n/*:string*/\n{\n  return '<' + f + (g.match(wtregex) ? ' xml:space=\"preserve\"' : \"\") + '>' + g + '</' + f + '>';\n}\n\nfunction wxt_helper(h)\n/*:string*/\n{\n  return keys(h).map(function (k) {\n    return \" \" + k + '=\"' + h[k] + '\"';\n  }).join(\"\");\n}\n\nfunction writextag(f\n/*:string*/\n, g\n/*:?string*/\n, h) {\n  return '<' + f + (h != null ? wxt_helper(h) : \"\") + (g != null ? (g.match(wtregex) ? ' xml:space=\"preserve\"' : \"\") + '>' + g + '</' + f : \"/\") + '>';\n}\n\nfunction write_w3cdtf(d\n/*:Date*/\n, t\n/*:?boolean*/\n)\n/*:string*/\n{\n  try {\n    return d.toISOString().replace(/\\.\\d*/, \"\");\n  } catch (e) {\n    if (t) throw e;\n  }\n\n  return \"\";\n}\n\nfunction write_vt(s, xlsx\n/*:?boolean*/\n)\n/*:string*/\n{\n  switch (typeof s) {\n    case 'string':\n      var o = writextag('vt:lpwstr', escapexml(s));\n      if (xlsx) o = o.replace(/&quot;/g, \"_x0022_\");\n      return o;\n\n    case 'number':\n      return writextag((s | 0) == s ? 'vt:i4' : 'vt:r8', escapexml(String(s)));\n\n    case 'boolean':\n      return writextag('vt:bool', s ? 'true' : 'false');\n  }\n\n  if (s instanceof Date) return writextag('vt:filetime', write_w3cdtf(s));\n  throw new Error(\"Unable to serialize \" + s);\n}\n\nfunction xlml_normalize(d)\n/*:string*/\n{\n  if (has_buf &&\n  /*::typeof Buffer !== \"undefined\" && d != null && d instanceof Buffer &&*/\n  Buffer.isBuffer(d)) return d.toString('utf8');\n  if (typeof d === 'string') return d;\n  /* duktape */\n\n  if (typeof Uint8Array !== 'undefined' && d instanceof Uint8Array) return utf8read(a2s(ab2a(d)));\n  throw new Error(\"Bad input format: expected Buffer or string\");\n}\n/* UOS uses CJK in tags */\n\n\nvar xlmlregex = /<(\\/?)([^\\s?><!\\/:]*:|)([^\\s?<>:\\/]+)(?:[\\s?:\\/][^>]*)?>/mg; //var xlmlregex = /<(\\/?)([a-z0-9]*:|)(\\w+)[^>]*>/mg;\n\nvar XMLNS = {\n  CORE_PROPS: 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties',\n  CUST_PROPS: \"http://schemas.openxmlformats.org/officeDocument/2006/custom-properties\",\n  EXT_PROPS: \"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\",\n  CT: 'http://schemas.openxmlformats.org/package/2006/content-types',\n  RELS: 'http://schemas.openxmlformats.org/package/2006/relationships',\n  TCMNT: 'http://schemas.microsoft.com/office/spreadsheetml/2018/threadedcomments',\n  'dc': 'http://purl.org/dc/elements/1.1/',\n  'dcterms': 'http://purl.org/dc/terms/',\n  'dcmitype': 'http://purl.org/dc/dcmitype/',\n  'mx': 'http://schemas.microsoft.com/office/mac/excel/2008/main',\n  'r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n  'sjs': 'http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties',\n  'vt': 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes',\n  'xsi': 'http://www.w3.org/2001/XMLSchema-instance',\n  'xsd': 'http://www.w3.org/2001/XMLSchema'\n}\n/*:any*/\n;\nvar XMLNS_main = ['http://schemas.openxmlformats.org/spreadsheetml/2006/main', 'http://purl.oclc.org/ooxml/spreadsheetml/main', 'http://schemas.microsoft.com/office/excel/2006/main', 'http://schemas.microsoft.com/office/excel/2006/2'];\nvar XLMLNS = {\n  'o': 'urn:schemas-microsoft-com:office:office',\n  'x': 'urn:schemas-microsoft-com:office:excel',\n  'ss': 'urn:schemas-microsoft-com:office:spreadsheet',\n  'dt': 'uuid:C2F41010-65B3-11d1-A29F-00AA00C14882',\n  'mv': 'http://macVmlSchemaUri',\n  'v': 'urn:schemas-microsoft-com:vml',\n  'html': 'http://www.w3.org/TR/REC-html40'\n}\n/*:any*/\n;\n\nfunction read_double_le(b\n/*:RawBytes|CFBlob*/\n, idx\n/*:number*/\n)\n/*:number*/\n{\n  var s = 1 - 2 * (b[idx + 7] >>> 7);\n  var e = ((b[idx + 7] & 0x7f) << 4) + (b[idx + 6] >>> 4 & 0x0f);\n  var m = b[idx + 6] & 0x0f;\n\n  for (var i = 5; i >= 0; --i) {\n    m = m * 256 + b[idx + i];\n  }\n\n  if (e == 0x7ff) return m == 0 ? s * Infinity : NaN;\n  if (e == 0) e = -1022;else {\n    e -= 1023;\n    m += Math.pow(2, 52);\n  }\n  return s * Math.pow(2, e - 52) * m;\n}\n\nfunction write_double_le(b\n/*:RawBytes|CFBlob*/\n, v\n/*:number*/\n, idx\n/*:number*/\n) {\n  var bs = (v < 0 || 1 / v == -Infinity ? 1 : 0) << 7,\n      e = 0,\n      m = 0;\n  var av = bs ? -v : v;\n\n  if (!isFinite(av)) {\n    e = 0x7ff;\n    m = isNaN(v) ? 0x6969 : 0;\n  } else if (av == 0) e = m = 0;else {\n    e = Math.floor(Math.log(av) / Math.LN2);\n    m = av * Math.pow(2, 52 - e);\n\n    if (e <= -1023 && (!isFinite(m) || m < Math.pow(2, 52))) {\n      e = -1022;\n    } else {\n      m -= Math.pow(2, 52);\n      e += 1023;\n    }\n  }\n\n  for (var i = 0; i <= 5; ++i, m /= 256) {\n    b[idx + i] = m & 0xff;\n  }\n\n  b[idx + 6] = (e & 0x0f) << 4 | m & 0xf;\n  b[idx + 7] = e >> 4 | bs;\n}\n\nvar ___toBuffer = function ___toBuffer(bufs\n/*:Array<Array<RawBytes> >*/\n)\n/*:RawBytes*/\n{\n  var x = [],\n      w = 10240;\n\n  for (var i = 0; i < bufs[0].length; ++i) {\n    if (bufs[0][i]) for (var j = 0, L = bufs[0][i].length; j < L; j += w) {\n      x.push.apply(x, bufs[0][i].slice(j, j + w));\n    }\n  }\n\n  return x;\n};\n\nvar __toBuffer = has_buf ? function (bufs) {\n  return bufs[0].length > 0 && Buffer.isBuffer(bufs[0][0]) ? Buffer.concat(bufs[0].map(function (x) {\n    return Buffer.isBuffer(x) ? x : Buffer_from(x);\n  })) : ___toBuffer(bufs);\n} : ___toBuffer;\n\nvar ___utf16le = function ___utf16le(b\n/*:RawBytes|CFBlob*/\n, s\n/*:number*/\n, e\n/*:number*/\n)\n/*:string*/\n{\n  var ss\n  /*:Array<string>*/\n  = [];\n\n  for (var i = s; i < e; i += 2) {\n    ss.push(String.fromCharCode(__readUInt16LE(b, i)));\n  }\n\n  return ss.join(\"\").replace(chr0, '');\n};\n\nvar __utf16le = has_buf ? function (b\n/*:RawBytes|CFBlob*/\n, s\n/*:number*/\n, e\n/*:number*/\n)\n/*:string*/\n{\n  if (!Buffer.isBuffer(b)\n  /*:: || !(b instanceof Buffer)*/\n  ) return ___utf16le(b, s, e);\n  return b.toString('utf16le', s, e).replace(chr0, '')\n  /*.replace(chr1,'!')*/\n  ;\n} : ___utf16le;\n\nvar ___hexlify = function ___hexlify(b\n/*:RawBytes|CFBlob*/\n, s\n/*:number*/\n, l\n/*:number*/\n)\n/*:string*/\n{\n  var ss\n  /*:Array<string>*/\n  = [];\n\n  for (var i = s; i < s + l; ++i) {\n    ss.push((\"0\" + b[i].toString(16)).slice(-2));\n  }\n\n  return ss.join(\"\");\n};\n\nvar __hexlify = has_buf ? function (b\n/*:RawBytes|CFBlob*/\n, s\n/*:number*/\n, l\n/*:number*/\n)\n/*:string*/\n{\n  return Buffer.isBuffer(b)\n  /*:: && b instanceof Buffer*/\n  ? b.toString('hex', s, s + l) : ___hexlify(b, s, l);\n} : ___hexlify;\n\nvar ___utf8 = function ___utf8(b\n/*:RawBytes|CFBlob*/\n, s\n/*:number*/\n, e\n/*:number*/\n) {\n  var ss = [];\n\n  for (var i = s; i < e; i++) {\n    ss.push(String.fromCharCode(__readUInt8(b, i)));\n  }\n\n  return ss.join(\"\");\n};\n\nvar __utf8 = has_buf ? function utf8_b(b\n/*:RawBytes|CFBlob*/\n, s\n/*:number*/\n, e\n/*:number*/\n) {\n  return Buffer.isBuffer(b)\n  /*:: && (b instanceof Buffer)*/\n  ? b.toString('utf8', s, e) : ___utf8(b, s, e);\n} : ___utf8;\n\nvar ___lpstr = function ___lpstr(b\n/*:RawBytes|CFBlob*/\n, i\n/*:number*/\n) {\n  var len = __readUInt32LE(b, i);\n\n  return len > 0 ? __utf8(b, i + 4, i + 4 + len - 1) : \"\";\n};\n\nvar __lpstr = ___lpstr;\n\nvar ___cpstr = function ___cpstr(b\n/*:RawBytes|CFBlob*/\n, i\n/*:number*/\n) {\n  var len = __readUInt32LE(b, i);\n\n  return len > 0 ? __utf8(b, i + 4, i + 4 + len - 1) : \"\";\n};\n\nvar __cpstr = ___cpstr;\n\nvar ___lpwstr = function ___lpwstr(b\n/*:RawBytes|CFBlob*/\n, i\n/*:number*/\n) {\n  var len = 2 * __readUInt32LE(b, i);\n\n  return len > 0 ? __utf8(b, i + 4, i + 4 + len - 1) : \"\";\n};\n\nvar __lpwstr = ___lpwstr;\n\nvar ___lpp4 = function lpp4_(b\n/*:RawBytes|CFBlob*/\n, i\n/*:number*/\n) {\n  var len = __readUInt32LE(b, i);\n\n  return len > 0 ? __utf16le(b, i + 4, i + 4 + len) : \"\";\n};\n\nvar __lpp4 = ___lpp4;\n\nvar ___8lpp4 = function ___8lpp4(b\n/*:RawBytes|CFBlob*/\n, i\n/*:number*/\n) {\n  var len = __readUInt32LE(b, i);\n\n  return len > 0 ? __utf8(b, i + 4, i + 4 + len) : \"\";\n};\n\nvar __8lpp4 = ___8lpp4;\n\nvar ___double = function ___double(b\n/*:RawBytes|CFBlob*/\n, idx\n/*:number*/\n) {\n  return read_double_le(b, idx);\n};\n\nvar __double = ___double;\n\nvar is_buf = function is_buf_a(a) {\n  return Array.isArray(a) || typeof Uint8Array !== \"undefined\" && a instanceof Uint8Array;\n};\n\nif (has_buf\n/*:: && typeof Buffer !== 'undefined'*/\n) {\n  __lpstr = function lpstr_b(b\n  /*:RawBytes|CFBlob*/\n  , i\n  /*:number*/\n  ) {\n    if (!Buffer.isBuffer(b)\n    /*:: || !(b instanceof Buffer)*/\n    ) return ___lpstr(b, i);\n    var len = b.readUInt32LE(i);\n    return len > 0 ? b.toString('utf8', i + 4, i + 4 + len - 1) : \"\";\n  };\n\n  __cpstr = function cpstr_b(b\n  /*:RawBytes|CFBlob*/\n  , i\n  /*:number*/\n  ) {\n    if (!Buffer.isBuffer(b)\n    /*:: || !(b instanceof Buffer)*/\n    ) return ___cpstr(b, i);\n    var len = b.readUInt32LE(i);\n    return len > 0 ? b.toString('utf8', i + 4, i + 4 + len - 1) : \"\";\n  };\n\n  __lpwstr = function lpwstr_b(b\n  /*:RawBytes|CFBlob*/\n  , i\n  /*:number*/\n  ) {\n    if (!Buffer.isBuffer(b)\n    /*:: || !(b instanceof Buffer)*/\n    ) return ___lpwstr(b, i);\n    var len = 2 * b.readUInt32LE(i);\n    return b.toString('utf16le', i + 4, i + 4 + len - 1);\n  };\n\n  __lpp4 = function lpp4_b(b\n  /*:RawBytes|CFBlob*/\n  , i\n  /*:number*/\n  ) {\n    if (!Buffer.isBuffer(b)\n    /*:: || !(b instanceof Buffer)*/\n    ) return ___lpp4(b, i);\n    var len = b.readUInt32LE(i);\n    return b.toString('utf16le', i + 4, i + 4 + len);\n  };\n\n  __8lpp4 = function lpp4_8b(b\n  /*:RawBytes|CFBlob*/\n  , i\n  /*:number*/\n  ) {\n    if (!Buffer.isBuffer(b)\n    /*:: || !(b instanceof Buffer)*/\n    ) return ___8lpp4(b, i);\n    var len = b.readUInt32LE(i);\n    return b.toString('utf8', i + 4, i + 4 + len);\n  };\n\n  __double = function double_(b\n  /*:RawBytes|CFBlob*/\n  , i\n  /*:number*/\n  ) {\n    if (Buffer.isBuffer(b)\n    /*::&& b instanceof Buffer*/\n    ) return b.readDoubleLE(i);\n    return ___double(b, i);\n  };\n\n  is_buf = function is_buf_b(a) {\n    return Buffer.isBuffer(a) || Array.isArray(a) || typeof Uint8Array !== \"undefined\" && a instanceof Uint8Array;\n  };\n}\n/* from js-xls */\n\n\nfunction cpdoit() {\n  __utf16le = function __utf16le(b\n  /*:RawBytes|CFBlob*/\n  , s\n  /*:number*/\n  , e\n  /*:number*/\n  ) {\n    return $cptable.utils.decode(1200, b.slice(s, e)).replace(chr0, '');\n  };\n\n  __utf8 = function __utf8(b\n  /*:RawBytes|CFBlob*/\n  , s\n  /*:number*/\n  , e\n  /*:number*/\n  ) {\n    return $cptable.utils.decode(65001, b.slice(s, e));\n  };\n\n  __lpstr = function __lpstr(b\n  /*:RawBytes|CFBlob*/\n  , i\n  /*:number*/\n  ) {\n    var len = __readUInt32LE(b, i);\n\n    return len > 0 ? $cptable.utils.decode(current_ansi, b.slice(i + 4, i + 4 + len - 1)) : \"\";\n  };\n\n  __cpstr = function __cpstr(b\n  /*:RawBytes|CFBlob*/\n  , i\n  /*:number*/\n  ) {\n    var len = __readUInt32LE(b, i);\n\n    return len > 0 ? $cptable.utils.decode(current_codepage, b.slice(i + 4, i + 4 + len - 1)) : \"\";\n  };\n\n  __lpwstr = function __lpwstr(b\n  /*:RawBytes|CFBlob*/\n  , i\n  /*:number*/\n  ) {\n    var len = 2 * __readUInt32LE(b, i);\n\n    return len > 0 ? $cptable.utils.decode(1200, b.slice(i + 4, i + 4 + len - 1)) : \"\";\n  };\n\n  __lpp4 = function __lpp4(b\n  /*:RawBytes|CFBlob*/\n  , i\n  /*:number*/\n  ) {\n    var len = __readUInt32LE(b, i);\n\n    return len > 0 ? $cptable.utils.decode(1200, b.slice(i + 4, i + 4 + len)) : \"\";\n  };\n\n  __8lpp4 = function __8lpp4(b\n  /*:RawBytes|CFBlob*/\n  , i\n  /*:number*/\n  ) {\n    var len = __readUInt32LE(b, i);\n\n    return len > 0 ? $cptable.utils.decode(65001, b.slice(i + 4, i + 4 + len)) : \"\";\n  };\n}\n\nif (typeof $cptable !== 'undefined') cpdoit();\n\nvar __readUInt8 = function __readUInt8(b\n/*:RawBytes|CFBlob*/\n, idx\n/*:number*/\n)\n/*:number*/\n{\n  return b[idx];\n};\n\nvar __readUInt16LE = function __readUInt16LE(b\n/*:RawBytes|CFBlob*/\n, idx\n/*:number*/\n)\n/*:number*/\n{\n  return b[idx + 1] * (1 << 8) + b[idx];\n};\n\nvar __readInt16LE = function __readInt16LE(b\n/*:RawBytes|CFBlob*/\n, idx\n/*:number*/\n)\n/*:number*/\n{\n  var u = b[idx + 1] * (1 << 8) + b[idx];\n  return u < 0x8000 ? u : (0xffff - u + 1) * -1;\n};\n\nvar __readUInt32LE = function __readUInt32LE(b\n/*:RawBytes|CFBlob*/\n, idx\n/*:number*/\n)\n/*:number*/\n{\n  return b[idx + 3] * (1 << 24) + (b[idx + 2] << 16) + (b[idx + 1] << 8) + b[idx];\n};\n\nvar __readInt32LE = function __readInt32LE(b\n/*:RawBytes|CFBlob*/\n, idx\n/*:number*/\n)\n/*:number*/\n{\n  return b[idx + 3] << 24 | b[idx + 2] << 16 | b[idx + 1] << 8 | b[idx];\n};\n\nvar __readInt32BE = function __readInt32BE(b\n/*:RawBytes|CFBlob*/\n, idx\n/*:number*/\n)\n/*:number*/\n{\n  return b[idx] << 24 | b[idx + 1] << 16 | b[idx + 2] << 8 | b[idx + 3];\n};\n\nfunction ReadShift(size\n/*:number*/\n, t\n/*:?string*/\n)\n/*:number|string*/\n{\n  var o = \"\",\n      oI\n  /*:: :number = 0*/\n  ,\n      oR,\n      oo = [],\n      w,\n      vv,\n      i,\n      loc;\n\n  switch (t) {\n    case 'dbcs':\n      loc = this.l;\n      if (has_buf && Buffer.isBuffer(this)) o = this.slice(this.l, this.l + 2 * size).toString(\"utf16le\");else for (i = 0; i < size; ++i) {\n        o += String.fromCharCode(__readUInt16LE(this, loc));\n        loc += 2;\n      }\n      size *= 2;\n      break;\n\n    case 'utf8':\n      o = __utf8(this, this.l, this.l + size);\n      break;\n\n    case 'utf16le':\n      size *= 2;\n      o = __utf16le(this, this.l, this.l + size);\n      break;\n\n    case 'wstr':\n      if (typeof $cptable !== 'undefined') o = $cptable.utils.decode(current_codepage, this.slice(this.l, this.l + 2 * size));else return ReadShift.call(this, size, 'dbcs');\n      size = 2 * size;\n      break;\n\n    /* [MS-OLEDS] 2.1.4 LengthPrefixedAnsiString */\n\n    case 'lpstr-ansi':\n      o = __lpstr(this, this.l);\n      size = 4 + __readUInt32LE(this, this.l);\n      break;\n\n    case 'lpstr-cp':\n      o = __cpstr(this, this.l);\n      size = 4 + __readUInt32LE(this, this.l);\n      break;\n\n    /* [MS-OLEDS] 2.1.5 LengthPrefixedUnicodeString */\n\n    case 'lpwstr':\n      o = __lpwstr(this, this.l);\n      size = 4 + 2 * __readUInt32LE(this, this.l);\n      break;\n\n    /* [MS-OFFCRYPTO] 2.1.2 Length-Prefixed Padded Unicode String (UNICODE-LP-P4) */\n\n    case 'lpp4':\n      size = 4 + __readUInt32LE(this, this.l);\n      o = __lpp4(this, this.l);\n      if (size & 0x02) size += 2;\n      break;\n\n    /* [MS-OFFCRYPTO] 2.1.3 Length-Prefixed UTF-8 String (UTF-8-LP-P4) */\n\n    case '8lpp4':\n      size = 4 + __readUInt32LE(this, this.l);\n      o = __8lpp4(this, this.l);\n      if (size & 0x03) size += 4 - (size & 0x03);\n      break;\n\n    case 'cstr':\n      size = 0;\n      o = \"\";\n\n      while ((w = __readUInt8(this, this.l + size++)) !== 0) {\n        oo.push(_getchar(w));\n      }\n\n      o = oo.join(\"\");\n      break;\n\n    case '_wstr':\n      size = 0;\n      o = \"\";\n\n      while ((w = __readUInt16LE(this, this.l + size)) !== 0) {\n        oo.push(_getchar(w));\n        size += 2;\n      }\n\n      size += 2;\n      o = oo.join(\"\");\n      break;\n\n    /* sbcs and dbcs support continue records in the SST way TODO codepages */\n\n    case 'dbcs-cont':\n      o = \"\";\n      loc = this.l;\n\n      for (i = 0; i < size; ++i) {\n        if (this.lens && this.lens.indexOf(loc) !== -1) {\n          w = __readUInt8(this, loc);\n          this.l = loc + 1;\n          vv = ReadShift.call(this, size - i, w ? 'dbcs-cont' : 'sbcs-cont');\n          return oo.join(\"\") + vv;\n        }\n\n        oo.push(_getchar(__readUInt16LE(this, loc)));\n        loc += 2;\n      }\n\n      o = oo.join(\"\");\n      size *= 2;\n      break;\n\n    case 'cpstr':\n      if (typeof $cptable !== 'undefined') {\n        o = $cptable.utils.decode(current_codepage, this.slice(this.l, this.l + size));\n        break;\n      }\n\n    /* falls through */\n\n    case 'sbcs-cont':\n      o = \"\";\n      loc = this.l;\n\n      for (i = 0; i != size; ++i) {\n        if (this.lens && this.lens.indexOf(loc) !== -1) {\n          w = __readUInt8(this, loc);\n          this.l = loc + 1;\n          vv = ReadShift.call(this, size - i, w ? 'dbcs-cont' : 'sbcs-cont');\n          return oo.join(\"\") + vv;\n        }\n\n        oo.push(_getchar(__readUInt8(this, loc)));\n        loc += 1;\n      }\n\n      o = oo.join(\"\");\n      break;\n\n    default:\n      switch (size) {\n        case 1:\n          oI = __readUInt8(this, this.l);\n          this.l++;\n          return oI;\n\n        case 2:\n          oI = (t === 'i' ? __readInt16LE : __readUInt16LE)(this, this.l);\n          this.l += 2;\n          return oI;\n\n        case 4:\n        case -4:\n          if (t === 'i' || (this[this.l + 3] & 0x80) === 0) {\n            oI = (size > 0 ? __readInt32LE : __readInt32BE)(this, this.l);\n            this.l += 4;\n            return oI;\n          } else {\n            oR = __readUInt32LE(this, this.l);\n            this.l += 4;\n          }\n\n          return oR;\n\n        case 8:\n        case -8:\n          if (t === 'f') {\n            if (size == 8) oR = __double(this, this.l);else 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            this.l += 8;\n            return oR;\n          } else size = 8;\n\n        /* falls through */\n\n        case 16:\n          o = __hexlify(this, this.l, size);\n          break;\n      }\n\n  }\n\n  this.l += size;\n  return o;\n}\n\nvar __writeUInt32LE = function __writeUInt32LE(b\n/*:RawBytes|CFBlob*/\n, val\n/*:number*/\n, idx\n/*:number*/\n)\n/*:void*/\n{\n  b[idx] = val & 0xFF;\n  b[idx + 1] = val >>> 8 & 0xFF;\n  b[idx + 2] = val >>> 16 & 0xFF;\n  b[idx + 3] = val >>> 24 & 0xFF;\n};\n\nvar __writeInt32LE = function __writeInt32LE(b\n/*:RawBytes|CFBlob*/\n, val\n/*:number*/\n, idx\n/*:number*/\n)\n/*:void*/\n{\n  b[idx] = val & 0xFF;\n  b[idx + 1] = val >> 8 & 0xFF;\n  b[idx + 2] = val >> 16 & 0xFF;\n  b[idx + 3] = val >> 24 & 0xFF;\n};\n\nvar __writeUInt16LE = function __writeUInt16LE(b\n/*:RawBytes|CFBlob*/\n, val\n/*:number*/\n, idx\n/*:number*/\n)\n/*:void*/\n{\n  b[idx] = val & 0xFF;\n  b[idx + 1] = val >>> 8 & 0xFF;\n};\n\nfunction WriteShift(t\n/*:number*/\n, val\n/*:string|number*/\n, f\n/*:?string*/\n)\n/*:any*/\n{\n  var size = 0,\n      i = 0;\n\n  if (f === 'dbcs') {\n    /*:: if(typeof val !== 'string') throw new Error(\"unreachable\"); */\n    for (i = 0; i != val.length; ++i) {\n      __writeUInt16LE(this, val.charCodeAt(i), this.l + 2 * i);\n    }\n\n    size = 2 * val.length;\n  } else if (f === 'sbcs') {\n    if (typeof $cptable !== 'undefined' && current_ansi == 874) {\n      /* TODO: use tables directly, don't encode */\n\n      /*:: if(typeof val !== \"string\") throw new Error(\"unreachable\"); */\n      for (i = 0; i != val.length; ++i) {\n        var cppayload = $cptable.utils.encode(current_ansi, val.charAt(i));\n        this[this.l + i] = cppayload[0];\n      }\n    } else {\n      /*:: if(typeof val !== 'string') throw new Error(\"unreachable\"); */\n      val = val.replace(/[^\\x00-\\x7F]/g, \"_\");\n      /*:: if(typeof val !== 'string') throw new Error(\"unreachable\"); */\n\n      for (i = 0; i != val.length; ++i) {\n        this[this.l + i] = val.charCodeAt(i) & 0xFF;\n      }\n    }\n\n    size = val.length;\n  } else if (f === 'hex') {\n    for (; i < t; ++i) {\n      /*:: if(typeof val !== \"string\") throw new Error(\"unreachable\"); */\n      this[this.l++] = parseInt(val.slice(2 * i, 2 * i + 2), 16) || 0;\n    }\n\n    return this;\n  } else if (f === 'utf16le') {\n    /*:: if(typeof val !== \"string\") throw new Error(\"unreachable\"); */\n    var end\n    /*:number*/\n    = Math.min(this.l + t, this.length);\n\n    for (i = 0; i < Math.min(val.length, t); ++i) {\n      var cc = val.charCodeAt(i);\n      this[this.l++] = cc & 0xff;\n      this[this.l++] = cc >> 8;\n    }\n\n    while (this.l < end) {\n      this[this.l++] = 0;\n    }\n\n    return this;\n  } else\n    /*:: if(typeof val === 'number') */\n    switch (t) {\n      case 1:\n        size = 1;\n        this[this.l] = val & 0xFF;\n        break;\n\n      case 2:\n        size = 2;\n        this[this.l] = val & 0xFF;\n        val >>>= 8;\n        this[this.l + 1] = val & 0xFF;\n        break;\n\n      case 3:\n        size = 3;\n        this[this.l] = val & 0xFF;\n        val >>>= 8;\n        this[this.l + 1] = val & 0xFF;\n        val >>>= 8;\n        this[this.l + 2] = val & 0xFF;\n        break;\n\n      case 4:\n        size = 4;\n\n        __writeUInt32LE(this, val, this.l);\n\n        break;\n\n      case 8:\n        size = 8;\n\n        if (f === 'f') {\n          write_double_le(this, val, this.l);\n          break;\n        }\n\n      /* falls through */\n\n      case 16:\n        break;\n\n      case -4:\n        size = 4;\n\n        __writeInt32LE(this, val, this.l);\n\n        break;\n    }\n\n  this.l += size;\n  return this;\n}\n\nfunction CheckField(hexstr\n/*:string*/\n, fld\n/*:string*/\n)\n/*:void*/\n{\n  var m = __hexlify(this, this.l, hexstr.length >> 1);\n\n  if (m !== hexstr) throw new Error(fld + 'Expected ' + hexstr + ' saw ' + m);\n  this.l += hexstr.length >> 1;\n}\n\nfunction prep_blob(blob, pos\n/*:number*/\n)\n/*:void*/\n{\n  blob.l = pos;\n  blob.read_shift =\n  /*::(*/\n  ReadShift\n  /*:: :any)*/\n  ;\n  blob.chk = CheckField;\n  blob.write_shift = WriteShift;\n}\n\nfunction parsenoop(blob, length\n/*:: :number, opts?:any */\n) {\n  blob.l += length;\n}\n\nfunction new_buf(sz\n/*:number*/\n)\n/*:Block*/\n{\n  var o = new_raw_buf(sz);\n  prep_blob(o, 0);\n  return o;\n}\n/* [MS-XLSB] 2.1.4 Record */\n\n\nfunction recordhopper(data, cb\n/*:RecordHopperCB*/\n, opts\n/*:?any*/\n) {\n  if (!data) return;\n  var tmpbyte, cntbyte, length;\n  prep_blob(data, data.l || 0);\n  var L = data.length,\n      RT = 0,\n      tgt = 0;\n\n  while (data.l < L) {\n    RT = data.read_shift(1);\n    if (RT & 0x80) RT = (RT & 0x7F) + ((data.read_shift(1) & 0x7F) << 7);\n    var R = XLSBRecordEnum[RT] || XLSBRecordEnum[0xFFFF];\n    tmpbyte = data.read_shift(1);\n    length = tmpbyte & 0x7F;\n\n    for (cntbyte = 1; cntbyte < 4 && tmpbyte & 0x80; ++cntbyte) {\n      length += ((tmpbyte = data.read_shift(1)) & 0x7F) << 7 * cntbyte;\n    }\n\n    tgt = data.l + length;\n    var d = R.f && R.f(data, length, opts);\n    data.l = tgt;\n    if (cb(d, R, RT)) return;\n  }\n}\n/* control buffer usage for fixed-length buffers */\n\n\nfunction buf_array()\n/*:BufArray*/\n{\n  var bufs\n  /*:Array<Block>*/\n  = [],\n      blksz = has_buf ? 256 : 2048;\n\n  var newblk = function ba_newblk(sz\n  /*:number*/\n  )\n  /*:Block*/\n  {\n    var o\n    /*:Block*/\n    = new_buf(sz)\n    /*:any*/\n    ;\n    prep_blob(o, 0);\n    return o;\n  };\n\n  var curbuf\n  /*:Block*/\n  = newblk(blksz);\n\n  var endbuf = function ba_endbuf() {\n    if (!curbuf) return;\n\n    if (curbuf.length > curbuf.l) {\n      curbuf = curbuf.slice(0, curbuf.l);\n      curbuf.l = curbuf.length;\n    }\n\n    if (curbuf.length > 0) bufs.push(curbuf);\n    curbuf = null;\n  };\n\n  var next = function ba_next(sz\n  /*:number*/\n  )\n  /*:Block*/\n  {\n    if (curbuf && sz < curbuf.length - curbuf.l) return curbuf;\n    endbuf();\n    return curbuf = newblk(Math.max(sz + 1, blksz));\n  };\n\n  var end = function ba_end() {\n    endbuf();\n    return bconcat(bufs);\n  };\n\n  var push = function ba_push(buf) {\n    endbuf();\n    curbuf = buf;\n    if (curbuf.l == null) curbuf.l = curbuf.length;\n    next(blksz);\n  };\n\n  return {\n    next: next,\n    push: push,\n    end: end,\n    _bufs: bufs\n  }\n  /*:any*/\n  ;\n}\n\nfunction write_record(ba\n/*:BufArray*/\n, type\n/*:number*/\n, payload, length\n/*:?number*/\n) {\n  var t\n  /*:number*/\n  = +type,\n      l;\n  if (isNaN(t)) return; // TODO: throw something here?\n\n  if (!length) length = XLSBRecordEnum[t].p || (payload || []).length || 0;\n  l = 1 + (t >= 0x80 ? 1 : 0) + 1\n  /* + length*/\n  ;\n  if (length >= 0x80) ++l;\n  if (length >= 0x4000) ++l;\n  if (length >= 0x200000) ++l;\n  var o = ba.next(l);\n  if (t <= 0x7F) o.write_shift(1, t);else {\n    o.write_shift(1, (t & 0x7F) + 0x80);\n    o.write_shift(1, t >> 7);\n  }\n\n  for (var i = 0; i != 4; ++i) {\n    if (length >= 0x80) {\n      o.write_shift(1, (length & 0x7F) + 0x80);\n      length >>= 7;\n    } else {\n      o.write_shift(1, length);\n      break;\n    }\n  }\n\n  if (\n  /*:: length != null &&*/\n  length > 0 && is_buf(payload)) ba.push(payload);\n}\n/* XLS ranges enforced */\n\n\nfunction shift_cell_xls(cell\n/*:CellAddress*/\n, tgt\n/*:any*/\n, opts\n/*:?any*/\n)\n/*:CellAddress*/\n{\n  var out = dup(cell);\n\n  if (tgt.s) {\n    if (out.cRel) out.c += tgt.s.c;\n    if (out.rRel) out.r += tgt.s.r;\n  } else {\n    if (out.cRel) out.c += tgt.c;\n    if (out.rRel) out.r += tgt.r;\n  }\n\n  if (!opts || opts.biff < 12) {\n    while (out.c >= 0x100) {\n      out.c -= 0x100;\n    }\n\n    while (out.r >= 0x10000) {\n      out.r -= 0x10000;\n    }\n  }\n\n  return out;\n}\n\nfunction shift_range_xls(cell, range, opts) {\n  var out = dup(cell);\n  out.s = shift_cell_xls(out.s, range.s, opts);\n  out.e = shift_cell_xls(out.e, range.s, opts);\n  return out;\n}\n\nfunction encode_cell_xls(c\n/*:CellAddress*/\n, biff\n/*:number*/\n)\n/*:string*/\n{\n  if (c.cRel && c.c < 0) {\n    c = dup(c);\n\n    while (c.c < 0) {\n      c.c += biff > 8 ? 0x4000 : 0x100;\n    }\n  }\n\n  if (c.rRel && c.r < 0) {\n    c = dup(c);\n\n    while (c.r < 0) {\n      c.r += biff > 8 ? 0x100000 : biff > 5 ? 0x10000 : 0x4000;\n    }\n  }\n\n  var s = encode_cell(c);\n  if (!c.cRel && c.cRel != null) s = fix_col(s);\n  if (!c.rRel && c.rRel != null) s = fix_row(s);\n  return s;\n}\n\nfunction encode_range_xls(r, opts)\n/*:string*/\n{\n  if (r.s.r == 0 && !r.s.rRel) {\n    if (r.e.r == (opts.biff >= 12 ? 0xFFFFF : opts.biff >= 8 ? 0x10000 : 0x4000) && !r.e.rRel) {\n      return (r.s.cRel ? \"\" : \"$\") + encode_col(r.s.c) + \":\" + (r.e.cRel ? \"\" : \"$\") + encode_col(r.e.c);\n    }\n  }\n\n  if (r.s.c == 0 && !r.s.cRel) {\n    if (r.e.c == (opts.biff >= 12 ? 0x3FFF : 0xFF) && !r.e.cRel) {\n      return (r.s.rRel ? \"\" : \"$\") + encode_row(r.s.r) + \":\" + (r.e.rRel ? \"\" : \"$\") + encode_row(r.e.r);\n    }\n  }\n\n  return encode_cell_xls(r.s, opts.biff) + \":\" + encode_cell_xls(r.e, opts.biff);\n}\n\nfunction decode_row(rowstr\n/*:string*/\n)\n/*:number*/\n{\n  return parseInt(unfix_row(rowstr), 10) - 1;\n}\n\nfunction encode_row(row\n/*:number*/\n)\n/*:string*/\n{\n  return \"\" + (row + 1);\n}\n\nfunction fix_row(cstr\n/*:string*/\n)\n/*:string*/\n{\n  return cstr.replace(/([A-Z]|^)(\\d+)$/, \"$1$$$2\");\n}\n\nfunction unfix_row(cstr\n/*:string*/\n)\n/*:string*/\n{\n  return cstr.replace(/\\$(\\d+)$/, \"$1\");\n}\n\nfunction decode_col(colstr\n/*:string*/\n)\n/*:number*/\n{\n  var c = unfix_col(colstr),\n      d = 0,\n      i = 0;\n\n  for (; i !== c.length; ++i) {\n    d = 26 * d + c.charCodeAt(i) - 64;\n  }\n\n  return d - 1;\n}\n\nfunction encode_col(col\n/*:number*/\n)\n/*:string*/\n{\n  if (col < 0) throw new Error(\"invalid column \" + col);\n  var s = \"\";\n\n  for (++col; col; col = Math.floor((col - 1) / 26)) {\n    s = String.fromCharCode((col - 1) % 26 + 65) + s;\n  }\n\n  return s;\n}\n\nfunction fix_col(cstr\n/*:string*/\n)\n/*:string*/\n{\n  return cstr.replace(/^([A-Z])/, \"$$$1\");\n}\n\nfunction unfix_col(cstr\n/*:string*/\n)\n/*:string*/\n{\n  return cstr.replace(/^\\$([A-Z])/, \"$1\");\n}\n\nfunction split_cell(cstr\n/*:string*/\n)\n/*:Array<string>*/\n{\n  return cstr.replace(/(\\$?[A-Z]*)(\\$?\\d*)/, \"$1,$2\").split(\",\");\n} //function decode_cell(cstr/*:string*/)/*:CellAddress*/ { var splt = split_cell(cstr); return { c:decode_col(splt[0]), r:decode_row(splt[1]) }; }\n\n\nfunction decode_cell(cstr\n/*:string*/\n)\n/*:CellAddress*/\n{\n  var R = 0,\n      C = 0;\n\n  for (var i = 0; i < cstr.length; ++i) {\n    var cc = cstr.charCodeAt(i);\n    if (cc >= 48 && cc <= 57) R = 10 * R + (cc - 48);else if (cc >= 65 && cc <= 90) C = 26 * C + (cc - 64);\n  }\n\n  return {\n    c: C - 1,\n    r: R - 1\n  };\n} //function encode_cell(cell/*:CellAddress*/)/*:string*/ { return encode_col(cell.c) + encode_row(cell.r); }\n\n\nfunction encode_cell(cell\n/*:CellAddress*/\n)\n/*:string*/\n{\n  var col = cell.c + 1;\n  var s = \"\";\n\n  for (; col; col = (col - 1) / 26 | 0) {\n    s = String.fromCharCode((col - 1) % 26 + 65) + s;\n  }\n\n  return s + (cell.r + 1);\n}\n\nfunction decode_range(range\n/*:string*/\n)\n/*:Range*/\n{\n  var idx = range.indexOf(\":\");\n  if (idx == -1) return {\n    s: decode_cell(range),\n    e: decode_cell(range)\n  };\n  return {\n    s: decode_cell(range.slice(0, idx)),\n    e: decode_cell(range.slice(idx + 1))\n  };\n}\n/*# if only one arg, it is assumed to be a Range.  If 2 args, both are cell addresses */\n\n\nfunction encode_range(cs\n/*:CellAddrSpec|Range*/\n, ce\n/*:?CellAddrSpec*/\n)\n/*:string*/\n{\n  if (typeof ce === 'undefined' || typeof ce === 'number') {\n    /*:: if(!(cs instanceof Range)) throw \"unreachable\"; */\n    return encode_range(cs.s, cs.e);\n  }\n  /*:: if((cs instanceof Range)) throw \"unreachable\"; */\n\n\n  if (typeof cs !== 'string') cs = encode_cell(cs\n  /*:any*/\n  );\n  if (typeof ce !== 'string') ce = encode_cell(ce\n  /*:any*/\n  );\n  /*:: if(typeof cs !== 'string') throw \"unreachable\"; */\n\n  /*:: if(typeof ce !== 'string') throw \"unreachable\"; */\n\n  return cs == ce ? cs : cs + \":\" + ce;\n}\n\nfunction safe_decode_range(range\n/*:string*/\n)\n/*:Range*/\n{\n  var o = {\n    s: {\n      c: 0,\n      r: 0\n    },\n    e: {\n      c: 0,\n      r: 0\n    }\n  };\n  var idx = 0,\n      i = 0,\n      cc = 0;\n  var len = range.length;\n\n  for (idx = 0; i < len; ++i) {\n    if ((cc = range.charCodeAt(i) - 64) < 1 || cc > 26) break;\n    idx = 26 * idx + cc;\n  }\n\n  o.s.c = --idx;\n\n  for (idx = 0; i < len; ++i) {\n    if ((cc = range.charCodeAt(i) - 48) < 0 || cc > 9) break;\n    idx = 10 * idx + cc;\n  }\n\n  o.s.r = --idx;\n\n  if (i === len || cc != 10) {\n    o.e.c = o.s.c;\n    o.e.r = o.s.r;\n    return o;\n  }\n\n  ++i;\n\n  for (idx = 0; i != len; ++i) {\n    if ((cc = range.charCodeAt(i) - 64) < 1 || cc > 26) break;\n    idx = 26 * idx + cc;\n  }\n\n  o.e.c = --idx;\n\n  for (idx = 0; i != len; ++i) {\n    if ((cc = range.charCodeAt(i) - 48) < 0 || cc > 9) break;\n    idx = 10 * idx + cc;\n  }\n\n  o.e.r = --idx;\n  return o;\n}\n\nfunction safe_format_cell(cell\n/*:Cell*/\n, v\n/*:any*/\n) {\n  var q = cell.t == 'd' && v instanceof Date;\n  if (cell.z != null) try {\n    return cell.w = SSF_format(cell.z, q ? datenum(v) : v);\n  } catch (e) {}\n\n  try {\n    return cell.w = SSF_format((cell.XF || {}).numFmtId || (q ? 14 : 0), q ? datenum(v) : v);\n  } catch (e) {\n    return '' + v;\n  }\n}\n\nfunction format_cell(cell\n/*:Cell*/\n, v\n/*:any*/\n, o\n/*:any*/\n) {\n  if (cell == null || cell.t == null || cell.t == 'z') return \"\";\n  if (cell.w !== undefined) return cell.w;\n  if (cell.t == 'd' && !cell.z && o && o.dateNF) cell.z = o.dateNF;\n  if (cell.t == \"e\") return BErr[cell.v] || cell.v;\n  if (v == undefined) return safe_format_cell(cell, cell.v);\n  return safe_format_cell(cell, v);\n}\n\nfunction sheet_to_workbook(sheet\n/*:Worksheet*/\n, opts)\n/*:Workbook*/\n{\n  var n = opts && opts.sheet ? opts.sheet : \"Sheet1\";\n  var sheets = {};\n  sheets[n] = sheet;\n  return {\n    SheetNames: [n],\n    Sheets: sheets\n  };\n}\n\nfunction sheet_add_aoa(_ws\n/*:?Worksheet*/\n, data\n/*:AOA*/\n, opts\n/*:?any*/\n)\n/*:Worksheet*/\n{\n  var o = opts || {};\n  var dense = _ws ? Array.isArray(_ws) : o.dense;\n  if (DENSE != null && dense == null) dense = DENSE;\n  var ws\n  /*:Worksheet*/\n  = _ws || (dense ? []\n  /*:any*/\n  : {}\n  /*:any*/\n  );\n  var _R = 0,\n      _C = 0;\n\n  if (ws && o.origin != null) {\n    if (typeof o.origin == 'number') _R = o.origin;else {\n      var _origin\n      /*:CellAddress*/\n      = typeof o.origin == \"string\" ? decode_cell(o.origin) : o.origin;\n\n      _R = _origin.r;\n      _C = _origin.c;\n    }\n    if (!ws[\"!ref\"]) ws[\"!ref\"] = \"A1:A1\";\n  }\n\n  var range\n  /*:Range*/\n  = {\n    s: {\n      c: 10000000,\n      r: 10000000\n    },\n    e: {\n      c: 0,\n      r: 0\n    }\n  }\n  /*:any*/\n  ;\n\n  if (ws['!ref']) {\n    var _range = safe_decode_range(ws['!ref']);\n\n    range.s.c = _range.s.c;\n    range.s.r = _range.s.r;\n    range.e.c = Math.max(range.e.c, _range.e.c);\n    range.e.r = Math.max(range.e.r, _range.e.r);\n    if (_R == -1) range.e.r = _R = _range.e.r + 1;\n  }\n\n  for (var R = 0; R != data.length; ++R) {\n    if (!data[R]) continue;\n    if (!Array.isArray(data[R])) throw new Error(\"aoa_to_sheet expects an array of arrays\");\n\n    for (var C = 0; C != data[R].length; ++C) {\n      if (typeof data[R][C] === 'undefined') continue;\n      var cell\n      /*:Cell*/\n      = {\n        v: data[R][C]\n      }\n      /*:any*/\n      ;\n\n      var __R = _R + R,\n          __C = _C + C;\n\n      if (range.s.r > __R) range.s.r = __R;\n      if (range.s.c > __C) range.s.c = __C;\n      if (range.e.r < __R) range.e.r = __R;\n      if (range.e.c < __C) range.e.c = __C;\n      if (data[R][C] && typeof data[R][C] === 'object' && !Array.isArray(data[R][C]) && !(data[R][C] instanceof Date)) cell = data[R][C];else {\n        if (Array.isArray(cell.v)) {\n          cell.f = data[R][C][1];\n          cell.v = cell.v[0];\n        }\n\n        if (cell.v === null) {\n          if (cell.f) cell.t = 'n';else if (o.nullError) {\n            cell.t = 'e';\n            cell.v = 0;\n          } else if (!o.sheetStubs) continue;else cell.t = 'z';\n        } else if (typeof cell.v === 'number') cell.t = 'n';else if (typeof cell.v === 'boolean') cell.t = 'b';else if (cell.v instanceof Date) {\n          cell.z = o.dateNF || table_fmt[14];\n\n          if (o.cellDates) {\n            cell.t = 'd';\n            cell.w = SSF_format(cell.z, datenum(cell.v));\n          } else {\n            cell.t = 'n';\n            cell.v = datenum(cell.v);\n            cell.w = SSF_format(cell.z, cell.v);\n          }\n        } else cell.t = 's';\n      }\n\n      if (dense) {\n        if (!ws[__R]) ws[__R] = [];\n        if (ws[__R][__C] && ws[__R][__C].z) cell.z = ws[__R][__C].z;\n        ws[__R][__C] = cell;\n      } else {\n        var cell_ref = encode_cell({\n          c: __C,\n          r: __R\n        }\n        /*:any*/\n        );\n        if (ws[cell_ref] && ws[cell_ref].z) cell.z = ws[cell_ref].z;\n        ws[cell_ref] = cell;\n      }\n    }\n  }\n\n  if (range.s.c < 10000000) ws['!ref'] = encode_range(range);\n  return ws;\n}\n\nfunction aoa_to_sheet(data\n/*:AOA*/\n, opts\n/*:?any*/\n)\n/*:Worksheet*/\n{\n  return sheet_add_aoa(null, data, opts);\n}\n\nfunction parse_Int32LE(data) {\n  return data.read_shift(4, 'i');\n}\n\nfunction write_UInt32LE(x\n/*:number*/\n, o) {\n  if (!o) o = new_buf(4);\n  o.write_shift(4, x);\n  return o;\n}\n/* [MS-XLSB] 2.5.168 */\n\n\nfunction parse_XLWideString(data\n/*::, length*/\n)\n/*:string*/\n{\n  var cchCharacters = data.read_shift(4);\n  return cchCharacters === 0 ? \"\" : data.read_shift(cchCharacters, 'dbcs');\n}\n\nfunction write_XLWideString(data\n/*:string*/\n, o) {\n  var _null = false;\n\n  if (o == null) {\n    _null = true;\n    o = new_buf(4 + 2 * data.length);\n  }\n\n  o.write_shift(4, data.length);\n  if (data.length > 0) o.write_shift(0, data, 'dbcs');\n  return _null ? o.slice(0, o.l) : o;\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 */\n\n\nfunction parse_StrRun(data) {\n  return {\n    ich: data.read_shift(2),\n    ifnt: data.read_shift(2)\n  };\n}\n\nfunction write_StrRun(run, o) {\n  if (!o) o = new_buf(4);\n  o.write_shift(2, run.ich || 0);\n  o.write_shift(2, run.ifnt || 0);\n  return o;\n}\n/* [MS-XLSB] 2.5.121 */\n\n\nfunction parse_RichStr(data, length\n/*:number*/\n)\n/*:XLString*/\n{\n  var start = data.l;\n  var flags = data.read_shift(1);\n  var str = parse_XLWideString(data);\n  var rgsStrRun = [];\n  var z = {\n    t: str,\n    h: str\n  }\n  /*:any*/\n  ;\n\n  if ((flags & 1) !== 0) {\n    /* fRichStr */\n\n    /* TODO: formatted string */\n    var dwSizeStrRun = data.read_shift(4);\n\n    for (var i = 0; i != dwSizeStrRun; ++i) {\n      rgsStrRun.push(parse_StrRun(data));\n    }\n\n    z.r = rgsStrRun;\n  } else z.r = [{\n    ich: 0,\n    ifnt: 0\n  }]; //if((flags & 2) !== 0) { /* fExtStr */\n  //\t/* TODO: phonetic string */\n  //}\n\n\n  data.l = start + length;\n  return z;\n}\n\nfunction write_RichStr(str\n/*:XLString*/\n, o\n/*:?Block*/\n)\n/*:Block*/\n{\n  /* TODO: formatted string */\n  var _null = false;\n\n  if (o == null) {\n    _null = true;\n    o = new_buf(15 + 4 * str.t.length);\n  }\n\n  o.write_shift(1, 0);\n  write_XLWideString(str.t, o);\n  return _null ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.4.328 BrtCommentText (RichStr w/1 run) */\n\n\nvar parse_BrtCommentText = parse_RichStr;\n\nfunction write_BrtCommentText(str\n/*:XLString*/\n, o\n/*:?Block*/\n)\n/*:Block*/\n{\n  /* TODO: formatted string */\n  var _null = false;\n\n  if (o == null) {\n    _null = true;\n    o = new_buf(23 + 4 * str.t.length);\n  }\n\n  o.write_shift(1, 1);\n  write_XLWideString(str.t, o);\n  o.write_shift(4, 1);\n  write_StrRun({\n    ich: 0,\n    ifnt: 0\n  }, o);\n  return _null ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.5.9 */\n\n\nfunction parse_XLSBCell(data)\n/*:any*/\n{\n  var col = data.read_shift(4);\n  var iStyleRef = data.read_shift(2);\n  iStyleRef += data.read_shift(1) << 16;\n  data.l++; //var fPhShow = data.read_shift(1);\n\n  return {\n    c: col,\n    iStyleRef: iStyleRef\n  };\n}\n\nfunction write_XLSBCell(cell\n/*:any*/\n, o\n/*:?Block*/\n) {\n  if (o == null) o = new_buf(8);\n  o.write_shift(-4, cell.c);\n  o.write_shift(3, cell.iStyleRef || cell.s);\n  o.write_shift(1, 0);\n  /* fPhShow */\n\n  return o;\n}\n/* Short XLSB Cell does not include column */\n\n\nfunction parse_XLSBShortCell(data)\n/*:any*/\n{\n  var iStyleRef = data.read_shift(2);\n  iStyleRef += data.read_shift(1) << 16;\n  data.l++; //var fPhShow = data.read_shift(1);\n\n  return {\n    c: -1,\n    iStyleRef: iStyleRef\n  };\n}\n\nfunction write_XLSBShortCell(cell\n/*:any*/\n, o\n/*:?Block*/\n) {\n  if (o == null) o = new_buf(4);\n  o.write_shift(3, cell.iStyleRef || cell.s);\n  o.write_shift(1, 0);\n  /* fPhShow */\n\n  return o;\n}\n/* [MS-XLSB] 2.5.21 */\n\n\nvar parse_XLSBCodeName = parse_XLWideString;\nvar write_XLSBCodeName = write_XLWideString;\n/* [MS-XLSB] 2.5.166 */\n\nfunction parse_XLNullableWideString(data\n/*::, length*/\n)\n/*:string*/\n{\n  var cchCharacters = data.read_shift(4);\n  return cchCharacters === 0 || cchCharacters === 0xFFFFFFFF ? \"\" : data.read_shift(cchCharacters, 'dbcs');\n}\n\nfunction write_XLNullableWideString(data\n/*:string*/\n, o) {\n  var _null = false;\n\n  if (o == null) {\n    _null = true;\n    o = new_buf(127);\n  }\n\n  o.write_shift(4, data.length > 0 ? data.length : 0xFFFFFFFF);\n  if (data.length > 0) o.write_shift(0, data, 'dbcs');\n  return _null ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.5.165 */\n\n\nvar parse_XLNameWideString = parse_XLWideString; //var write_XLNameWideString = write_XLWideString;\n\n/* [MS-XLSB] 2.5.114 */\n\nvar parse_RelID = parse_XLNullableWideString;\nvar write_RelID = write_XLNullableWideString;\n/* [MS-XLS] 2.5.217 ; [MS-XLSB] 2.5.122 */\n\nfunction parse_RkNumber(data)\n/*:number*/\n{\n  var b = data.slice(data.l, data.l + 4);\n  var fX100 = b[0] & 1,\n      fInt = b[0] & 2;\n  data.l += 4;\n  var RK = fInt === 0 ? __double([0, 0, 0, 0, b[0] & 0xFC, b[1], b[2], b[3]], 0) : __readInt32LE(b, 0) >> 2;\n  return fX100 ? RK / 100 : RK;\n}\n\nfunction write_RkNumber(data\n/*:number*/\n, o) {\n  if (o == null) o = new_buf(4);\n  var fX100 = 0,\n      fInt = 0,\n      d100 = data * 100;\n\n  if (data == (data | 0) && data >= -(1 << 29) && data < 1 << 29) {\n    fInt = 1;\n  } else if (d100 == (d100 | 0) && d100 >= -(1 << 29) && d100 < 1 << 29) {\n    fInt = 1;\n    fX100 = 1;\n  }\n\n  if (fInt) o.write_shift(-4, ((fX100 ? d100 : data) << 2) + (fX100 + 2));else throw new Error(\"unsupported RkNumber \" + data); // TODO\n}\n/* [MS-XLSB] 2.5.117 RfX */\n\n\nfunction parse_RfX(data\n/*::, length*/\n)\n/*:Range*/\n{\n  var cell\n  /*:Range*/\n  = {\n    s: {},\n    e: {}\n  }\n  /*:any*/\n  ;\n  cell.s.r = data.read_shift(4);\n  cell.e.r = data.read_shift(4);\n  cell.s.c = data.read_shift(4);\n  cell.e.c = data.read_shift(4);\n  return cell;\n}\n\nfunction write_RfX(r\n/*:Range*/\n, o) {\n  if (!o) o = new_buf(16);\n  o.write_shift(4, r.s.r);\n  o.write_shift(4, r.e.r);\n  o.write_shift(4, r.s.c);\n  o.write_shift(4, r.e.c);\n  return o;\n}\n/* [MS-XLSB] 2.5.153 UncheckedRfX */\n\n\nvar parse_UncheckedRfX = parse_RfX;\nvar write_UncheckedRfX = write_RfX;\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\n/* TODO: error checking, NaN and Infinity values are not valid Xnum */\n\nfunction parse_Xnum(data\n/*::, length*/\n) {\n  if (data.length - data.l < 8) throw \"XLS Xnum Buffer underflow\";\n  return data.read_shift(8, 'f');\n}\n\nfunction write_Xnum(data, o) {\n  return (o || new_buf(8)).write_shift(8, data, 'f');\n}\n/* [MS-XLSB] 2.4.324 BrtColor */\n\n\nfunction parse_BrtColor(data\n/*::, length*/\n) {\n  var out = {};\n  var d = data.read_shift(1); //var fValidRGB = d & 1;\n\n  var xColorType = d >>> 1;\n  var index = data.read_shift(1);\n  var nTS = data.read_shift(2, 'i');\n  var bR = data.read_shift(1);\n  var bG = data.read_shift(1);\n  var bB = data.read_shift(1);\n  data.l++; //var bAlpha = data.read_shift(1);\n\n  switch (xColorType) {\n    case 0:\n      out.auto = 1;\n      break;\n\n    case 1:\n      out.index = index;\n      var icv = XLSIcv[index];\n      /* automatic pseudo index 81 */\n\n      if (icv) out.rgb = rgb2Hex(icv);\n      break;\n\n    case 2:\n      /* if(!fValidRGB) throw new Error(\"invalid\"); */\n      out.rgb = rgb2Hex([bR, bG, bB]);\n      break;\n\n    case 3:\n      out.theme = index;\n      break;\n  }\n\n  if (nTS != 0) out.tint = nTS > 0 ? nTS / 32767 : nTS / 32768;\n  return out;\n}\n\nfunction write_BrtColor(color, o) {\n  if (!o) o = new_buf(8);\n\n  if (!color || color.auto) {\n    o.write_shift(4, 0);\n    o.write_shift(4, 0);\n    return o;\n  }\n\n  if (color.index != null) {\n    o.write_shift(1, 0x02);\n    o.write_shift(1, color.index);\n  } else if (color.theme != null) {\n    o.write_shift(1, 0x06);\n    o.write_shift(1, color.theme);\n  } else {\n    o.write_shift(1, 0x05);\n    o.write_shift(1, 0);\n  }\n\n  var nTS = color.tint || 0;\n  if (nTS > 0) nTS *= 32767;else if (nTS < 0) nTS *= 32768;\n  o.write_shift(2, nTS);\n\n  if (!color.rgb || color.theme != null) {\n    o.write_shift(2, 0);\n    o.write_shift(1, 0);\n    o.write_shift(1, 0);\n  } else {\n    var rgb = color.rgb || 'FFFFFF';\n    if (typeof rgb == 'number') rgb = (\"000000\" + rgb.toString(16)).slice(-6);\n    o.write_shift(1, parseInt(rgb.slice(0, 2), 16));\n    o.write_shift(1, parseInt(rgb.slice(2, 4), 16));\n    o.write_shift(1, parseInt(rgb.slice(4, 6), 16));\n    o.write_shift(1, 0xFF);\n  }\n\n  return o;\n}\n/* [MS-XLSB] 2.5.52 */\n\n\nfunction parse_FontFlags(data\n/*::, length, opts*/\n) {\n  var d = data.read_shift(1);\n  data.l++;\n  var out = {\n    fBold: d & 0x01,\n    fItalic: d & 0x02,\n    fUnderline: d & 0x04,\n    fStrikeout: d & 0x08,\n    fOutline: d & 0x10,\n    fShadow: d & 0x20,\n    fCondense: d & 0x40,\n    fExtend: d & 0x80\n  };\n  return out;\n}\n\nfunction write_FontFlags(font, o) {\n  if (!o) o = new_buf(2);\n  var grbit = (font.italic ? 0x02 : 0) | (font.strike ? 0x08 : 0) | (font.outline ? 0x10 : 0) | (font.shadow ? 0x20 : 0) | (font.condense ? 0x40 : 0) | (font.extend ? 0x80 : 0);\n  o.write_shift(1, grbit);\n  o.write_shift(1, 0);\n  return o;\n}\n/* [MS-OLEDS] 2.3.1 and 2.3.2 */\n\n\nfunction parse_ClipboardFormatOrString(o, w\n/*:number*/\n)\n/*:string*/\n{\n  // $FlowIgnore\n  var ClipFmt = {\n    2: \"BITMAP\",\n    3: \"METAFILEPICT\",\n    8: \"DIB\",\n    14: \"ENHMETAFILE\"\n  };\n  var m\n  /*:number*/\n  = o.read_shift(4);\n\n  switch (m) {\n    case 0x00000000:\n      return \"\";\n\n    case 0xffffffff:\n    case 0xfffffffe:\n      return ClipFmt[o.read_shift(4)] || \"\";\n  }\n\n  if (m > 0x190) throw new Error(\"Unsupported Clipboard: \" + m.toString(16));\n  o.l -= 4;\n  return o.read_shift(0, w == 1 ? \"lpstr\" : \"lpwstr\");\n}\n\nfunction parse_ClipboardFormatOrAnsiString(o) {\n  return parse_ClipboardFormatOrString(o, 1);\n}\n\nfunction parse_ClipboardFormatOrUnicodeString(o) {\n  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;\n\n\nvar VT_I2 = 0x0002;\nvar VT_I4 = 0x0003; //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;\n\nvar VT_BOOL = 0x000B;\nvar VT_VARIANT = 0x000C; //var VT_DECIMAL  = 0x000E;\n//var VT_I1       = 0x0010;\n//var VT_UI1      = 0x0011;\n//var VT_UI2      = 0x0012;\n\nvar VT_UI4 = 0x0013; //var VT_I8       = 0x0014;\n//var VT_UI8      = 0x0015;\n//var VT_INT      = 0x0016;\n//var VT_UINT     = 0x0017;\n\nvar VT_LPSTR = 0x001E; //var VT_LPWSTR   = 0x001F;\n\nvar VT_FILETIME = 0x0040;\nvar VT_BLOB = 0x0041; //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;\n\nvar VT_CF = 0x0047; //var VT_CLSID    = 0x0048;\n//var VT_VERSIONED_STREAM = 0x0049;\n\nvar VT_VECTOR = 0x1000;\nvar VT_VECTOR_VARIANT = 0x100C;\nvar VT_VECTOR_LPSTR = 0x101E; //var VT_ARRAY    = 0x2000;\n\nvar VT_STRING = 0x0050; // 2.3.3.1.11 VtString\n\nvar VT_USTR = 0x0051; // 2.3.3.1.12 VtUnalignedString\n\nvar VT_CUSTOM = [VT_STRING, VT_USTR];\n/* [MS-OSHARED] 2.3.3.2.2.1 Document Summary Information PIDDSI */\n\nvar DocSummaryPIDDSI = {\n  /*::[*/\n  0x01\n  /*::]*/\n  : {\n    n: 'CodePage',\n    t: VT_I2\n  },\n\n  /*::[*/\n  0x02\n  /*::]*/\n  : {\n    n: 'Category',\n    t: VT_STRING\n  },\n\n  /*::[*/\n  0x03\n  /*::]*/\n  : {\n    n: 'PresentationFormat',\n    t: VT_STRING\n  },\n\n  /*::[*/\n  0x04\n  /*::]*/\n  : {\n    n: 'ByteCount',\n    t: VT_I4\n  },\n\n  /*::[*/\n  0x05\n  /*::]*/\n  : {\n    n: 'LineCount',\n    t: VT_I4\n  },\n\n  /*::[*/\n  0x06\n  /*::]*/\n  : {\n    n: 'ParagraphCount',\n    t: VT_I4\n  },\n\n  /*::[*/\n  0x07\n  /*::]*/\n  : {\n    n: 'SlideCount',\n    t: VT_I4\n  },\n\n  /*::[*/\n  0x08\n  /*::]*/\n  : {\n    n: 'NoteCount',\n    t: VT_I4\n  },\n\n  /*::[*/\n  0x09\n  /*::]*/\n  : {\n    n: 'HiddenCount',\n    t: VT_I4\n  },\n\n  /*::[*/\n  0x0a\n  /*::]*/\n  : {\n    n: 'MultimediaClipCount',\n    t: VT_I4\n  },\n\n  /*::[*/\n  0x0b\n  /*::]*/\n  : {\n    n: 'ScaleCrop',\n    t: VT_BOOL\n  },\n\n  /*::[*/\n  0x0c\n  /*::]*/\n  : {\n    n: 'HeadingPairs',\n    t: VT_VECTOR_VARIANT\n    /* VT_VECTOR | VT_VARIANT */\n\n  },\n\n  /*::[*/\n  0x0d\n  /*::]*/\n  : {\n    n: 'TitlesOfParts',\n    t: VT_VECTOR_LPSTR\n    /* VT_VECTOR | VT_LPSTR */\n\n  },\n\n  /*::[*/\n  0x0e\n  /*::]*/\n  : {\n    n: 'Manager',\n    t: VT_STRING\n  },\n\n  /*::[*/\n  0x0f\n  /*::]*/\n  : {\n    n: 'Company',\n    t: VT_STRING\n  },\n\n  /*::[*/\n  0x10\n  /*::]*/\n  : {\n    n: 'LinksUpToDate',\n    t: VT_BOOL\n  },\n\n  /*::[*/\n  0x11\n  /*::]*/\n  : {\n    n: 'CharacterCount',\n    t: VT_I4\n  },\n\n  /*::[*/\n  0x13\n  /*::]*/\n  : {\n    n: 'SharedDoc',\n    t: VT_BOOL\n  },\n\n  /*::[*/\n  0x16\n  /*::]*/\n  : {\n    n: 'HyperlinksChanged',\n    t: VT_BOOL\n  },\n\n  /*::[*/\n  0x17\n  /*::]*/\n  : {\n    n: 'AppVersion',\n    t: VT_I4,\n    p: 'version'\n  },\n\n  /*::[*/\n  0x18\n  /*::]*/\n  : {\n    n: 'DigSig',\n    t: VT_BLOB\n  },\n\n  /*::[*/\n  0x1A\n  /*::]*/\n  : {\n    n: 'ContentType',\n    t: VT_STRING\n  },\n\n  /*::[*/\n  0x1B\n  /*::]*/\n  : {\n    n: 'ContentStatus',\n    t: VT_STRING\n  },\n\n  /*::[*/\n  0x1C\n  /*::]*/\n  : {\n    n: 'Language',\n    t: VT_STRING\n  },\n\n  /*::[*/\n  0x1D\n  /*::]*/\n  : {\n    n: 'Version',\n    t: VT_STRING\n  },\n\n  /*::[*/\n  0xFF\n  /*::]*/\n  : {},\n\n  /* [MS-OLEPS] 2.18 */\n\n  /*::[*/\n  0x80000000\n  /*::]*/\n  : {\n    n: 'Locale',\n    t: VT_UI4\n  },\n\n  /*::[*/\n  0x80000003\n  /*::]*/\n  : {\n    n: 'Behavior',\n    t: VT_UI4\n  },\n\n  /*::[*/\n  0x72627262\n  /*::]*/\n  : {}\n};\n/* [MS-OSHARED] 2.3.3.2.1.1 Summary Information Property Set PIDSI */\n\nvar SummaryPIDSI = {\n  /*::[*/\n  0x01\n  /*::]*/\n  : {\n    n: 'CodePage',\n    t: VT_I2\n  },\n\n  /*::[*/\n  0x02\n  /*::]*/\n  : {\n    n: 'Title',\n    t: VT_STRING\n  },\n\n  /*::[*/\n  0x03\n  /*::]*/\n  : {\n    n: 'Subject',\n    t: VT_STRING\n  },\n\n  /*::[*/\n  0x04\n  /*::]*/\n  : {\n    n: 'Author',\n    t: VT_STRING\n  },\n\n  /*::[*/\n  0x05\n  /*::]*/\n  : {\n    n: 'Keywords',\n    t: VT_STRING\n  },\n\n  /*::[*/\n  0x06\n  /*::]*/\n  : {\n    n: 'Comments',\n    t: VT_STRING\n  },\n\n  /*::[*/\n  0x07\n  /*::]*/\n  : {\n    n: 'Template',\n    t: VT_STRING\n  },\n\n  /*::[*/\n  0x08\n  /*::]*/\n  : {\n    n: 'LastAuthor',\n    t: VT_STRING\n  },\n\n  /*::[*/\n  0x09\n  /*::]*/\n  : {\n    n: 'RevNumber',\n    t: VT_STRING\n  },\n\n  /*::[*/\n  0x0A\n  /*::]*/\n  : {\n    n: 'EditTime',\n    t: VT_FILETIME\n  },\n\n  /*::[*/\n  0x0B\n  /*::]*/\n  : {\n    n: 'LastPrinted',\n    t: VT_FILETIME\n  },\n\n  /*::[*/\n  0x0C\n  /*::]*/\n  : {\n    n: 'CreatedDate',\n    t: VT_FILETIME\n  },\n\n  /*::[*/\n  0x0D\n  /*::]*/\n  : {\n    n: 'ModifiedDate',\n    t: VT_FILETIME\n  },\n\n  /*::[*/\n  0x0E\n  /*::]*/\n  : {\n    n: 'PageCount',\n    t: VT_I4\n  },\n\n  /*::[*/\n  0x0F\n  /*::]*/\n  : {\n    n: 'WordCount',\n    t: VT_I4\n  },\n\n  /*::[*/\n  0x10\n  /*::]*/\n  : {\n    n: 'CharCount',\n    t: VT_I4\n  },\n\n  /*::[*/\n  0x11\n  /*::]*/\n  : {\n    n: 'Thumbnail',\n    t: VT_CF\n  },\n\n  /*::[*/\n  0x12\n  /*::]*/\n  : {\n    n: 'Application',\n    t: VT_STRING\n  },\n\n  /*::[*/\n  0x13\n  /*::]*/\n  : {\n    n: 'DocSecurity',\n    t: VT_I4\n  },\n\n  /*::[*/\n  0xFF\n  /*::]*/\n  : {},\n\n  /* [MS-OLEPS] 2.18 */\n\n  /*::[*/\n  0x80000000\n  /*::]*/\n  : {\n    n: 'Locale',\n    t: VT_UI4\n  },\n\n  /*::[*/\n  0x80000003\n  /*::]*/\n  : {\n    n: 'Behavior',\n    t: VT_UI4\n  },\n\n  /*::[*/\n  0x72627262\n  /*::]*/\n  : {}\n};\n/* [MS-XLS] 2.4.63 Country/Region codes */\n\nvar CountryEnum = {\n  /*::[*/\n  0x0001\n  /*::]*/\n  : \"US\",\n  // United States\n\n  /*::[*/\n  0x0002\n  /*::]*/\n  : \"CA\",\n  // Canada\n\n  /*::[*/\n  0x0003\n  /*::]*/\n  : \"\",\n  // Latin America (except Brazil)\n\n  /*::[*/\n  0x0007\n  /*::]*/\n  : \"RU\",\n  // Russia\n\n  /*::[*/\n  0x0014\n  /*::]*/\n  : \"EG\",\n  // Egypt\n\n  /*::[*/\n  0x001E\n  /*::]*/\n  : \"GR\",\n  // Greece\n\n  /*::[*/\n  0x001F\n  /*::]*/\n  : \"NL\",\n  // Netherlands\n\n  /*::[*/\n  0x0020\n  /*::]*/\n  : \"BE\",\n  // Belgium\n\n  /*::[*/\n  0x0021\n  /*::]*/\n  : \"FR\",\n  // France\n\n  /*::[*/\n  0x0022\n  /*::]*/\n  : \"ES\",\n  // Spain\n\n  /*::[*/\n  0x0024\n  /*::]*/\n  : \"HU\",\n  // Hungary\n\n  /*::[*/\n  0x0027\n  /*::]*/\n  : \"IT\",\n  // Italy\n\n  /*::[*/\n  0x0029\n  /*::]*/\n  : \"CH\",\n  // Switzerland\n\n  /*::[*/\n  0x002B\n  /*::]*/\n  : \"AT\",\n  // Austria\n\n  /*::[*/\n  0x002C\n  /*::]*/\n  : \"GB\",\n  // United Kingdom\n\n  /*::[*/\n  0x002D\n  /*::]*/\n  : \"DK\",\n  // Denmark\n\n  /*::[*/\n  0x002E\n  /*::]*/\n  : \"SE\",\n  // Sweden\n\n  /*::[*/\n  0x002F\n  /*::]*/\n  : \"NO\",\n  // Norway\n\n  /*::[*/\n  0x0030\n  /*::]*/\n  : \"PL\",\n  // Poland\n\n  /*::[*/\n  0x0031\n  /*::]*/\n  : \"DE\",\n  // Germany\n\n  /*::[*/\n  0x0034\n  /*::]*/\n  : \"MX\",\n  // Mexico\n\n  /*::[*/\n  0x0037\n  /*::]*/\n  : \"BR\",\n  // Brazil\n\n  /*::[*/\n  0x003d\n  /*::]*/\n  : \"AU\",\n  // Australia\n\n  /*::[*/\n  0x0040\n  /*::]*/\n  : \"NZ\",\n  // New Zealand\n\n  /*::[*/\n  0x0042\n  /*::]*/\n  : \"TH\",\n  // Thailand\n\n  /*::[*/\n  0x0051\n  /*::]*/\n  : \"JP\",\n  // Japan\n\n  /*::[*/\n  0x0052\n  /*::]*/\n  : \"KR\",\n  // Korea\n\n  /*::[*/\n  0x0054\n  /*::]*/\n  : \"VN\",\n  // Viet Nam\n\n  /*::[*/\n  0x0056\n  /*::]*/\n  : \"CN\",\n  // China\n\n  /*::[*/\n  0x005A\n  /*::]*/\n  : \"TR\",\n  // Turkey\n\n  /*::[*/\n  0x0069\n  /*::]*/\n  : \"JS\",\n  // Ramastan\n\n  /*::[*/\n  0x00D5\n  /*::]*/\n  : \"DZ\",\n  // Algeria\n\n  /*::[*/\n  0x00D8\n  /*::]*/\n  : \"MA\",\n  // Morocco\n\n  /*::[*/\n  0x00DA\n  /*::]*/\n  : \"LY\",\n  // Libya\n\n  /*::[*/\n  0x015F\n  /*::]*/\n  : \"PT\",\n  // Portugal\n\n  /*::[*/\n  0x0162\n  /*::]*/\n  : \"IS\",\n  // Iceland\n\n  /*::[*/\n  0x0166\n  /*::]*/\n  : \"FI\",\n  // Finland\n\n  /*::[*/\n  0x01A4\n  /*::]*/\n  : \"CZ\",\n  // Czech Republic\n\n  /*::[*/\n  0x0376\n  /*::]*/\n  : \"TW\",\n  // Taiwan\n\n  /*::[*/\n  0x03C1\n  /*::]*/\n  : \"LB\",\n  // Lebanon\n\n  /*::[*/\n  0x03C2\n  /*::]*/\n  : \"JO\",\n  // Jordan\n\n  /*::[*/\n  0x03C3\n  /*::]*/\n  : \"SY\",\n  // Syria\n\n  /*::[*/\n  0x03C4\n  /*::]*/\n  : \"IQ\",\n  // Iraq\n\n  /*::[*/\n  0x03C5\n  /*::]*/\n  : \"KW\",\n  // Kuwait\n\n  /*::[*/\n  0x03C6\n  /*::]*/\n  : \"SA\",\n  // Saudi Arabia\n\n  /*::[*/\n  0x03CB\n  /*::]*/\n  : \"AE\",\n  // United Arab Emirates\n\n  /*::[*/\n  0x03CC\n  /*::]*/\n  : \"IL\",\n  // Israel\n\n  /*::[*/\n  0x03CE\n  /*::]*/\n  : \"QA\",\n  // Qatar\n\n  /*::[*/\n  0x03D5\n  /*::]*/\n  : \"IR\",\n  // Iran\n\n  /*::[*/\n  0xFFFF\n  /*::]*/\n  : \"US\" // United States\n\n};\n/* [MS-XLS] 2.5.127 */\n\nvar XLSFillPattern = [null, 'solid', 'mediumGray', 'darkGray', 'lightGray', 'darkHorizontal', 'darkVertical', 'darkDown', 'darkUp', 'darkGrid', 'darkTrellis', 'lightHorizontal', 'lightVertical', 'lightDown', 'lightUp', 'lightGrid', 'lightTrellis', 'gray125', 'gray0625'];\n\nfunction rgbify(arr\n/*:Array<number>*/\n)\n/*:Array<[number, number, number]>*/\n{\n  return arr.map(function (x) {\n    return [x >> 16 & 255, x >> 8 & 255, x & 255];\n  });\n}\n/* [MS-XLS] 2.5.161 */\n\n/* [MS-XLSB] 2.5.75 Icv */\n\n\nvar _XLSIcv = /*#__PURE__*/rgbify([\n/* Color Constants */\n0x000000, 0xFFFFFF, 0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0xFF00FF, 0x00FFFF,\n/* Overridable Defaults */\n0x000000, 0xFFFFFF, 0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0xFF00FF, 0x00FFFF, 0x800000, 0x008000, 0x000080, 0x808000, 0x800080, 0x008080, 0xC0C0C0, 0x808080, 0x9999FF, 0x993366, 0xFFFFCC, 0xCCFFFF, 0x660066, 0xFF8080, 0x0066CC, 0xCCCCFF, 0x000080, 0xFF00FF, 0xFFFF00, 0x00FFFF, 0x800080, 0x800000, 0x008080, 0x0000FF, 0x00CCFF, 0xCCFFFF, 0xCCFFCC, 0xFFFF99, 0x99CCFF, 0xFF99CC, 0xCC99FF, 0xFFCC99, 0x3366FF, 0x33CCCC, 0x99CC00, 0xFFCC00, 0xFF9900, 0xFF6600, 0x666699, 0x969696, 0x003366, 0x339966, 0x003300, 0x333300, 0x993300, 0x993366, 0x333399, 0x333333,\n/* Other entries to appease BIFF8/12 */\n0xFFFFFF,\n/* 0x40 icvForeground ?? */\n0x000000,\n/* 0x41 icvBackground ?? */\n0x000000,\n/* 0x42 icvFrame ?? */\n0x000000,\n/* 0x43 icv3D ?? */\n0x000000,\n/* 0x44 icv3DText ?? */\n0x000000,\n/* 0x45 icv3DHilite ?? */\n0x000000,\n/* 0x46 icv3DShadow ?? */\n0x000000,\n/* 0x47 icvHilite ?? */\n0x000000,\n/* 0x48 icvCtlText ?? */\n0x000000,\n/* 0x49 icvCtlScrl ?? */\n0x000000,\n/* 0x4A icvCtlInv ?? */\n0x000000,\n/* 0x4B icvCtlBody ?? */\n0x000000,\n/* 0x4C icvCtlFrame ?? */\n0x000000,\n/* 0x4D icvCtlFore ?? */\n0x000000,\n/* 0x4E icvCtlBack ?? */\n0x000000,\n/* 0x4F icvCtlNeutral */\n0x000000,\n/* 0x50 icvInfoBk ?? */\n0x000000\n/* 0x51 icvInfoText ?? */\n]);\n\nvar XLSIcv = /*#__PURE__*/dup(_XLSIcv);\n/* [MS-XLSB] 2.5.97.2 */\n\nvar BErr = {\n  /*::[*/\n  0x00\n  /*::]*/\n  : \"#NULL!\",\n\n  /*::[*/\n  0x07\n  /*::]*/\n  : \"#DIV/0!\",\n\n  /*::[*/\n  0x0F\n  /*::]*/\n  : \"#VALUE!\",\n\n  /*::[*/\n  0x17\n  /*::]*/\n  : \"#REF!\",\n\n  /*::[*/\n  0x1D\n  /*::]*/\n  : \"#NAME?\",\n\n  /*::[*/\n  0x24\n  /*::]*/\n  : \"#NUM!\",\n\n  /*::[*/\n  0x2A\n  /*::]*/\n  : \"#N/A\",\n\n  /*::[*/\n  0x2B\n  /*::]*/\n  : \"#GETTING_DATA\",\n\n  /*::[*/\n  0xFF\n  /*::]*/\n  : \"#WTF?\"\n}; //var RBErr = evert_num(BErr);\n\nvar RBErr = {\n  \"#NULL!\": 0x00,\n  \"#DIV/0!\": 0x07,\n  \"#VALUE!\": 0x0F,\n  \"#REF!\": 0x17,\n  \"#NAME?\": 0x1D,\n  \"#NUM!\": 0x24,\n  \"#N/A\": 0x2A,\n  \"#GETTING_DATA\": 0x2B,\n  \"#WTF?\": 0xFF\n};\n/* Parts enumerated in OPC spec, MS-XLSB and MS-XLSX */\n\n/* 12.3 Part Summary <SpreadsheetML> */\n\n/* 14.2 Part Summary <DrawingML> */\n\n/* [MS-XLSX] 2.1 Part Enumerations ; [MS-XLSB] 2.1.7 Part Enumeration */\n\nvar ct2type\n/*{[string]:string}*/\n= {\n  /* Workbook */\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": \"workbooks\",\n  \"application/vnd.ms-excel.sheet.macroEnabled.main+xml\": \"workbooks\",\n  \"application/vnd.ms-excel.sheet.binary.macroEnabled.main\": \"workbooks\",\n  \"application/vnd.ms-excel.addin.macroEnabled.main+xml\": \"workbooks\",\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": \"workbooks\",\n\n  /* Worksheet */\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": \"sheets\",\n  \"application/vnd.ms-excel.worksheet\": \"sheets\",\n  \"application/vnd.ms-excel.binIndexWs\": \"TODO\",\n\n  /* Binary Index */\n\n  /* Chartsheet */\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": \"charts\",\n  \"application/vnd.ms-excel.chartsheet\": \"charts\",\n\n  /* Macrosheet */\n  \"application/vnd.ms-excel.macrosheet+xml\": \"macros\",\n  \"application/vnd.ms-excel.macrosheet\": \"macros\",\n  \"application/vnd.ms-excel.intlmacrosheet\": \"TODO\",\n  \"application/vnd.ms-excel.binIndexMs\": \"TODO\",\n\n  /* Binary Index */\n\n  /* Dialogsheet */\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": \"dialogs\",\n  \"application/vnd.ms-excel.dialogsheet\": \"dialogs\",\n\n  /* Shared Strings */\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\": \"strs\",\n  \"application/vnd.ms-excel.sharedStrings\": \"strs\",\n\n  /* Styles */\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": \"styles\",\n  \"application/vnd.ms-excel.styles\": \"styles\",\n\n  /* File Properties */\n  \"application/vnd.openxmlformats-package.core-properties+xml\": \"coreprops\",\n  \"application/vnd.openxmlformats-officedocument.custom-properties+xml\": \"custprops\",\n  \"application/vnd.openxmlformats-officedocument.extended-properties+xml\": \"extprops\",\n\n  /* Custom Data Properties */\n  \"application/vnd.openxmlformats-officedocument.customXmlProperties+xml\": \"TODO\",\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.customProperty\": \"TODO\",\n\n  /* Comments */\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": \"comments\",\n  \"application/vnd.ms-excel.comments\": \"comments\",\n  \"application/vnd.ms-excel.threadedcomments+xml\": \"threadedcomments\",\n  \"application/vnd.ms-excel.person+xml\": \"people\",\n\n  /* Metadata (Stock/Geography and Dynamic Array) */\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml\": \"metadata\",\n  \"application/vnd.ms-excel.sheetMetadata\": \"metadata\",\n\n  /* PivotTable */\n  \"application/vnd.ms-excel.pivotTable\": \"TODO\",\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml\": \"TODO\",\n\n  /* Chart Objects */\n  \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": \"TODO\",\n\n  /* Chart Colors */\n  \"application/vnd.ms-office.chartcolorstyle+xml\": \"TODO\",\n\n  /* Chart Style */\n  \"application/vnd.ms-office.chartstyle+xml\": \"TODO\",\n\n  /* Chart Advanced */\n  \"application/vnd.ms-office.chartex+xml\": \"TODO\",\n\n  /* Calculation Chain */\n  \"application/vnd.ms-excel.calcChain\": \"calcchains\",\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml\": \"calcchains\",\n\n  /* Printer Settings */\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings\": \"TODO\",\n\n  /* ActiveX */\n  \"application/vnd.ms-office.activeX\": \"TODO\",\n  \"application/vnd.ms-office.activeX+xml\": \"TODO\",\n\n  /* Custom Toolbars */\n  \"application/vnd.ms-excel.attachedToolbars\": \"TODO\",\n\n  /* External Data Connections */\n  \"application/vnd.ms-excel.connections\": \"TODO\",\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": \"TODO\",\n\n  /* External Links */\n  \"application/vnd.ms-excel.externalLink\": \"links\",\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml\": \"links\",\n\n  /* PivotCache */\n  \"application/vnd.ms-excel.pivotCacheDefinition\": \"TODO\",\n  \"application/vnd.ms-excel.pivotCacheRecords\": \"TODO\",\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml\": \"TODO\",\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml\": \"TODO\",\n\n  /* Query Table */\n  \"application/vnd.ms-excel.queryTable\": \"TODO\",\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml\": \"TODO\",\n\n  /* Shared Workbook */\n  \"application/vnd.ms-excel.userNames\": \"TODO\",\n  \"application/vnd.ms-excel.revisionHeaders\": \"TODO\",\n  \"application/vnd.ms-excel.revisionLog\": \"TODO\",\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml\": \"TODO\",\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml\": \"TODO\",\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml\": \"TODO\",\n\n  /* Single Cell Table */\n  \"application/vnd.ms-excel.tableSingleCells\": \"TODO\",\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml\": \"TODO\",\n\n  /* Slicer */\n  \"application/vnd.ms-excel.slicer\": \"TODO\",\n  \"application/vnd.ms-excel.slicerCache\": \"TODO\",\n  \"application/vnd.ms-excel.slicer+xml\": \"TODO\",\n  \"application/vnd.ms-excel.slicerCache+xml\": \"TODO\",\n\n  /* Sort Map */\n  \"application/vnd.ms-excel.wsSortMap\": \"TODO\",\n\n  /* Table */\n  \"application/vnd.ms-excel.table\": \"TODO\",\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": \"TODO\",\n\n  /* Themes */\n  \"application/vnd.openxmlformats-officedocument.theme+xml\": \"themes\",\n\n  /* Theme Override */\n  \"application/vnd.openxmlformats-officedocument.themeOverride+xml\": \"TODO\",\n\n  /* Timeline */\n  \"application/vnd.ms-excel.Timeline+xml\": \"TODO\",\n\n  /* verify */\n  \"application/vnd.ms-excel.TimelineCache+xml\": \"TODO\",\n\n  /* verify */\n\n  /* VBA */\n  \"application/vnd.ms-office.vbaProject\": \"vba\",\n  \"application/vnd.ms-office.vbaProjectSignature\": \"TODO\",\n\n  /* Volatile Dependencies */\n  \"application/vnd.ms-office.volatileDependencies\": \"TODO\",\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml\": \"TODO\",\n\n  /* Control Properties */\n  \"application/vnd.ms-excel.controlproperties+xml\": \"TODO\",\n\n  /* Data Model */\n  \"application/vnd.openxmlformats-officedocument.model+data\": \"TODO\",\n\n  /* Survey */\n  \"application/vnd.ms-excel.Survey+xml\": \"TODO\",\n\n  /* Drawing */\n  \"application/vnd.openxmlformats-officedocument.drawing+xml\": \"drawings\",\n  \"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": \"TODO\",\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml\": \"TODO\",\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml\": \"TODO\",\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml\": \"TODO\",\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml\": \"TODO\",\n\n  /* VML */\n  \"application/vnd.openxmlformats-officedocument.vmlDrawing\": \"TODO\",\n  \"application/vnd.openxmlformats-package.relationships+xml\": \"rels\",\n  \"application/vnd.openxmlformats-officedocument.oleObject\": \"TODO\",\n\n  /* Image */\n  \"image/png\": \"TODO\",\n  \"sheet\": \"js\"\n}\n/*:any*/\n;\nvar CT_LIST = {\n  workbooks: {\n    xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\",\n    xlsm: \"application/vnd.ms-excel.sheet.macroEnabled.main+xml\",\n    xlsb: \"application/vnd.ms-excel.sheet.binary.macroEnabled.main\",\n    xlam: \"application/vnd.ms-excel.addin.macroEnabled.main+xml\",\n    xltx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\"\n  },\n  strs: {\n    /* Shared Strings */\n    xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\",\n    xlsb: \"application/vnd.ms-excel.sharedStrings\"\n  },\n  comments: {\n    /* Comments */\n    xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\",\n    xlsb: \"application/vnd.ms-excel.comments\"\n  },\n  sheets: {\n    /* Worksheet */\n    xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\",\n    xlsb: \"application/vnd.ms-excel.worksheet\"\n  },\n  charts: {\n    /* Chartsheet */\n    xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\",\n    xlsb: \"application/vnd.ms-excel.chartsheet\"\n  },\n  dialogs: {\n    /* Dialogsheet */\n    xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\",\n    xlsb: \"application/vnd.ms-excel.dialogsheet\"\n  },\n  macros: {\n    /* Macrosheet (Excel 4.0 Macros) */\n    xlsx: \"application/vnd.ms-excel.macrosheet+xml\",\n    xlsb: \"application/vnd.ms-excel.macrosheet\"\n  },\n  metadata: {\n    /* Metadata (Stock/Geography and Dynamic Array) */\n    xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml\",\n    xlsb: \"application/vnd.ms-excel.sheetMetadata\"\n  },\n  styles: {\n    /* Styles */\n    xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\",\n    xlsb: \"application/vnd.ms-excel.styles\"\n  }\n};\n\nfunction new_ct()\n/*:any*/\n{\n  return {\n    workbooks: [],\n    sheets: [],\n    charts: [],\n    dialogs: [],\n    macros: [],\n    rels: [],\n    strs: [],\n    comments: [],\n    threadedcomments: [],\n    links: [],\n    coreprops: [],\n    extprops: [],\n    custprops: [],\n    themes: [],\n    styles: [],\n    calcchains: [],\n    vba: [],\n    drawings: [],\n    metadata: [],\n    people: [],\n    TODO: [],\n    xmlns: \"\"\n  }\n  /*:any*/\n  ;\n}\n\nfunction parse_ct(data\n/*:?string*/\n) {\n  var ct = new_ct();\n  if (!data || !data.match) return ct;\n  var ctext = {};\n  (data.match(tagregex) || []).forEach(function (x) {\n    var y = parsexmltag(x);\n\n    switch (y[0].replace(nsregex, \"<\")) {\n      case '<?xml':\n        break;\n\n      case '<Types':\n        ct.xmlns = y['xmlns' + (y[0].match(/<(\\w+):/) || [\"\", \"\"])[1]];\n        break;\n\n      case '<Default':\n        ctext[y.Extension] = y.ContentType;\n        break;\n\n      case '<Override':\n        if (ct[ct2type[y.ContentType]] !== undefined) ct[ct2type[y.ContentType]].push(y.PartName);\n        break;\n    }\n  });\n  if (ct.xmlns !== XMLNS.CT) throw new Error(\"Unknown Namespace: \" + ct.xmlns);\n  ct.calcchain = ct.calcchains.length > 0 ? ct.calcchains[0] : \"\";\n  ct.sst = ct.strs.length > 0 ? ct.strs[0] : \"\";\n  ct.style = ct.styles.length > 0 ? ct.styles[0] : \"\";\n  ct.defaults = ctext;\n  delete ct.calcchains;\n  return ct;\n}\n\nfunction write_ct(ct, opts)\n/*:string*/\n{\n  var type2ct\n  /*{[string]:Array<string>}*/\n  = evert_arr(ct2type);\n  var o\n  /*:Array<string>*/\n  = [],\n      v;\n  o[o.length] = XML_HEADER;\n  o[o.length] = writextag('Types', null, {\n    'xmlns': XMLNS.CT,\n    'xmlns:xsd': XMLNS.xsd,\n    'xmlns:xsi': XMLNS.xsi\n  });\n  o = o.concat([['xml', 'application/xml'], ['bin', 'application/vnd.ms-excel.sheet.binary.macroEnabled.main'], ['vml', 'application/vnd.openxmlformats-officedocument.vmlDrawing'], ['data', 'application/vnd.openxmlformats-officedocument.model+data'],\n  /* from test files */\n  ['bmp', 'image/bmp'], ['png', 'image/png'], ['gif', 'image/gif'], ['emf', 'image/x-emf'], ['wmf', 'image/x-wmf'], ['jpg', 'image/jpeg'], ['jpeg', 'image/jpeg'], ['tif', 'image/tiff'], ['tiff', 'image/tiff'], ['pdf', 'application/pdf'], ['rels', 'application/vnd.openxmlformats-package.relationships+xml']].map(function (x) {\n    return writextag('Default', null, {\n      'Extension': x[0],\n      'ContentType': x[1]\n    });\n  }));\n  /* only write first instance */\n\n  var f1 = function f1(w) {\n    if (ct[w] && ct[w].length > 0) {\n      v = ct[w][0];\n      o[o.length] = writextag('Override', null, {\n        'PartName': (v[0] == '/' ? \"\" : \"/\") + v,\n        'ContentType': CT_LIST[w][opts.bookType] || CT_LIST[w]['xlsx']\n      });\n    }\n  };\n  /* book type-specific */\n\n\n  var f2 = function f2(w) {\n    (ct[w] || []).forEach(function (v) {\n      o[o.length] = writextag('Override', null, {\n        'PartName': (v[0] == '/' ? \"\" : \"/\") + v,\n        'ContentType': CT_LIST[w][opts.bookType] || CT_LIST[w]['xlsx']\n      });\n    });\n  };\n  /* standard type */\n\n\n  var f3 = function f3(t) {\n    (ct[t] || []).forEach(function (v) {\n      o[o.length] = writextag('Override', null, {\n        'PartName': (v[0] == '/' ? \"\" : \"/\") + v,\n        'ContentType': type2ct[t][0]\n      });\n    });\n  };\n\n  f1('workbooks');\n  f2('sheets');\n  f2('charts');\n  f3('themes');\n  ['strs', 'styles'].forEach(f1);\n  ['coreprops', 'extprops', 'custprops'].forEach(f3);\n  f3('vba');\n  f3('comments');\n  f3('threadedcomments');\n  f3('drawings');\n  f2('metadata');\n  f3('people');\n\n  if (o.length > 2) {\n    o[o.length] = '</Types>';\n    o[1] = o[1].replace(\"/>\", \">\");\n  }\n\n  return o.join(\"\");\n}\n/* 9.3 Relationships */\n\n\nvar RELS = {\n  WB: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n  SHEET: \"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n  HLINK: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\",\n  VML: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing\",\n  XPATH: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath\",\n  XMISS: \"http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing\",\n  XLINK: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink\",\n  CXML: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml\",\n  CXMLP: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps\",\n  CMNT: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments\",\n  CORE_PROPS: \"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\",\n  EXT_PROPS: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties',\n  CUST_PROPS: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties',\n  SST: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\",\n  STY: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\",\n  THEME: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\",\n  CHART: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart\",\n  CHARTEX: \"http://schemas.microsoft.com/office/2014/relationships/chartEx\",\n  CS: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet\",\n  WS: [\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\", \"http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet\"],\n  DS: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/dialogsheet\",\n  MS: \"http://schemas.microsoft.com/office/2006/relationships/xlMacrosheet\",\n  IMG: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",\n  DRAW: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing\",\n  XLMETA: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sheetMetadata\",\n  TCMNT: \"http://schemas.microsoft.com/office/2017/10/relationships/threadedComment\",\n  PEOPLE: \"http://schemas.microsoft.com/office/2017/10/relationships/person\",\n  VBA: \"http://schemas.microsoft.com/office/2006/relationships/vbaProject\"\n}\n/*:any*/\n;\n/* 9.3.3 Representing Relationships */\n\nfunction get_rels_path(file\n/*:string*/\n)\n/*:string*/\n{\n  var n = file.lastIndexOf(\"/\");\n  return file.slice(0, n + 1) + '_rels/' + file.slice(n + 1) + \".rels\";\n}\n\nfunction parse_rels(data\n/*:?string*/\n, currentFilePath\n/*:string*/\n) {\n  var rels = {\n    \"!id\": {}\n  };\n  if (!data) return rels;\n\n  if (currentFilePath.charAt(0) !== '/') {\n    currentFilePath = '/' + currentFilePath;\n  }\n\n  var hash = {};\n  (data.match(tagregex) || []).forEach(function (x) {\n    var y = parsexmltag(x);\n    /* 9.3.2.2 OPC_Relationships */\n\n    if (y[0] === '<Relationship') {\n      var rel = {};\n      rel.Type = y.Type;\n      rel.Target = y.Target;\n      rel.Id = y.Id;\n      if (y.TargetMode) rel.TargetMode = y.TargetMode;\n      var canonictarget = y.TargetMode === 'External' ? y.Target : resolve_path(y.Target, currentFilePath);\n      rels[canonictarget] = rel;\n      hash[y.Id] = rel;\n    }\n  });\n  rels[\"!id\"] = hash;\n  return rels;\n}\n/* TODO */\n\n\nfunction write_rels(rels)\n/*:string*/\n{\n  var o = [XML_HEADER, writextag('Relationships', null, {\n    //'xmlns:ns0': XMLNS.RELS,\n    'xmlns': XMLNS.RELS\n  })];\n  keys(rels['!id']).forEach(function (rid) {\n    o[o.length] = writextag('Relationship', null, rels['!id'][rid]);\n  });\n\n  if (o.length > 2) {\n    o[o.length] = '</Relationships>';\n    o[1] = o[1].replace(\"/>\", \">\");\n  }\n\n  return o.join(\"\");\n}\n\nfunction add_rels(rels, rId\n/*:number*/\n, f, type, relobj, targetmode\n/*:?string*/\n)\n/*:number*/\n{\n  if (!relobj) relobj = {};\n  if (!rels['!id']) rels['!id'] = {};\n  if (!rels['!idx']) rels['!idx'] = 1;\n  if (rId < 0) for (rId = rels['!idx']; rels['!id']['rId' + rId]; ++rId) {\n    /* empty */\n  }\n  rels['!idx'] = rId + 1;\n  relobj.Id = 'rId' + rId;\n  relobj.Type = type;\n  relobj.Target = f;\n  if (targetmode) relobj.TargetMode = targetmode;else if ([RELS.HLINK, RELS.XPATH, RELS.XMISS].indexOf(relobj.Type) > -1) relobj.TargetMode = \"External\";\n  if (rels['!id'][relobj.Id]) throw new Error(\"Cannot rewrite rId \" + rId);\n  rels['!id'][relobj.Id] = relobj;\n  rels[('/' + relobj.Target).replace(\"//\", \"/\")] = relobj;\n  return rId;\n}\n/* Open Document Format for Office Applications (OpenDocument) Version 1.2 */\n\n/* Part 3 Section 4 Manifest File */\n\n\nvar CT_ODS = \"application/vnd.oasis.opendocument.spreadsheet\";\n\nfunction parse_manifest(d, opts) {\n  var str = xlml_normalize(d);\n  var Rn;\n  var FEtag;\n\n  while (Rn = xlmlregex.exec(str)) {\n    switch (Rn[3]) {\n      case 'manifest':\n        break;\n      // 4.2 <manifest:manifest>\n\n      case 'file-entry':\n        // 4.3 <manifest:file-entry>\n        FEtag = parsexmltag(Rn[0], false);\n        if (FEtag.path == '/' && FEtag.type !== CT_ODS) throw new Error(\"This OpenDocument is not a spreadsheet\");\n        break;\n\n      case 'encryption-data': // 4.4 <manifest:encryption-data>\n\n      case 'algorithm': // 4.5 <manifest:algorithm>\n\n      case 'start-key-generation': // 4.6 <manifest:start-key-generation>\n\n      case 'key-derivation':\n        // 4.7 <manifest:key-derivation>\n        throw new Error(\"Unsupported ODS Encryption\");\n\n      default:\n        if (opts && opts.WTF) throw Rn;\n    }\n  }\n}\n\nfunction write_manifest(manifest\n/*:Array<Array<string> >*/\n)\n/*:string*/\n{\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\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  }\n\n  o.push('</manifest:manifest>');\n  return o.join(\"\");\n}\n/* Part 3 Section 6 Metadata Manifest File */\n\n\nfunction write_rdf_type(file\n/*:string*/\n, res\n/*:string*/\n, tag\n/*:?string*/\n) {\n  return ['  <rdf:Description rdf:about=\"' + file + '\">\\n', '    <rdf:type rdf:resource=\"http://docs.oasis-open.org/ns/office/1.2/meta/' + (tag || \"odf\") + '#' + res + '\"/>\\n', '  </rdf:Description>\\n'].join(\"\");\n}\n\nfunction write_rdf_has(base\n/*:string*/\n, file\n/*:string*/\n) {\n  return ['  <rdf:Description rdf:about=\"' + base + '\">\\n', '    <ns0:hasPart xmlns:ns0=\"http://docs.oasis-open.org/ns/office/1.2/meta/pkg#\" rdf:resource=\"' + file + '\"/>\\n', '  </rdf:Description>\\n'].join(\"\");\n}\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\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\n  o.push(write_rdf_type(\"\", \"Document\", \"pkg\"));\n  o.push('</rdf:RDF>');\n  return o.join(\"\");\n}\n/* TODO: pull properties */\n\n\nfunction\n  /*:: wb: Workbook, opts: any*/\nwrite_meta_ods()\n/*:string*/\n{\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>Sheet' + 'JS ' + XLSX.version + '</meta:generator></office:meta></office:document-meta>';\n}\n/* ECMA-376 Part II 11.1 Core Properties Part */\n\n/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */\n\n\nvar CORE_PROPS\n/*:Array<Array<string> >*/\n= [[\"cp:category\", \"Category\"], [\"cp:contentStatus\", \"ContentStatus\"], [\"cp:keywords\", \"Keywords\"], [\"cp:lastModifiedBy\", \"LastAuthor\"], [\"cp:lastPrinted\", \"LastPrinted\"], [\"cp:revision\", \"RevNumber\"], [\"cp:version\", \"Version\"], [\"dc:creator\", \"Author\"], [\"dc:description\", \"Comments\"], [\"dc:identifier\", \"Identifier\"], [\"dc:language\", \"Language\"], [\"dc:subject\", \"Subject\"], [\"dc:title\", \"Title\"], [\"dcterms:created\", \"CreatedDate\", 'date'], [\"dcterms:modified\", \"ModifiedDate\", 'date']];\n\nvar CORE_PROPS_REGEX\n/*:Array<RegExp>*/\n= /*#__PURE__*/function () {\n  var r = new Array(CORE_PROPS.length);\n\n  for (var i = 0; i < CORE_PROPS.length; ++i) {\n    var f = CORE_PROPS[i];\n    var g = \"(?:\" + f[0].slice(0, f[0].indexOf(\":\")) + \":)\" + f[0].slice(f[0].indexOf(\":\") + 1);\n    r[i] = new RegExp(\"<\" + g + \"[^>]*>([\\\\s\\\\S]*?)<\\/\" + g + \">\");\n  }\n\n  return r;\n}();\n\nfunction parse_core_props(data) {\n  var p = {};\n  data = utf8read(data);\n\n  for (var i = 0; i < CORE_PROPS.length; ++i) {\n    var f = CORE_PROPS[i],\n        cur = data.match(CORE_PROPS_REGEX[i]);\n    if (cur != null && cur.length > 0) p[f[1]] = unescapexml(cur[1]);\n    if (f[2] === 'date' && p[f[1]]) p[f[1]] = parseDate(p[f[1]]);\n  }\n\n  return p;\n}\n\nfunction cp_doit(f, g, h, o, p) {\n  if (p[f] != null || g == null || g === \"\") return;\n  p[f] = g;\n  g = escapexml(g);\n  o[o.length] = h ? writextag(f, g, h) : writetag(f, g);\n}\n\nfunction write_core_props(cp, _opts) {\n  var opts = _opts || {};\n  var o = [XML_HEADER, writextag('cp:coreProperties', null, {\n    //'xmlns': XMLNS.CORE_PROPS,\n    'xmlns:cp': XMLNS.CORE_PROPS,\n    'xmlns:dc': XMLNS.dc,\n    'xmlns:dcterms': XMLNS.dcterms,\n    'xmlns:dcmitype': XMLNS.dcmitype,\n    'xmlns:xsi': XMLNS.xsi\n  })],\n      p = {};\n  if (!cp && !opts.Props) return o.join(\"\");\n\n  if (cp) {\n    if (cp.CreatedDate != null) cp_doit(\"dcterms:created\", typeof cp.CreatedDate === \"string\" ? cp.CreatedDate : write_w3cdtf(cp.CreatedDate, opts.WTF), {\n      \"xsi:type\": \"dcterms:W3CDTF\"\n    }, o, p);\n    if (cp.ModifiedDate != null) cp_doit(\"dcterms:modified\", typeof cp.ModifiedDate === \"string\" ? cp.ModifiedDate : write_w3cdtf(cp.ModifiedDate, opts.WTF), {\n      \"xsi:type\": \"dcterms:W3CDTF\"\n    }, o, p);\n  }\n\n  for (var i = 0; i != CORE_PROPS.length; ++i) {\n    var f = CORE_PROPS[i];\n    var v = opts.Props && opts.Props[f[1]] != null ? opts.Props[f[1]] : cp ? cp[f[1]] : null;\n    if (v === true) v = \"1\";else if (v === false) v = \"0\";else if (typeof v == \"number\") v = String(v);\n    if (v != null) cp_doit(f[0], v, null, o, p);\n  }\n\n  if (o.length > 2) {\n    o[o.length] = '</cp:coreProperties>';\n    o[1] = o[1].replace(\"/>\", \">\");\n  }\n\n  return o.join(\"\");\n}\n/* 15.2.12.3 Extended File Properties Part */\n\n/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */\n\n\nvar EXT_PROPS\n/*:Array<Array<string> >*/\n= [[\"Application\", \"Application\", \"string\"], [\"AppVersion\", \"AppVersion\", \"string\"], [\"Company\", \"Company\", \"string\"], [\"DocSecurity\", \"DocSecurity\", \"string\"], [\"Manager\", \"Manager\", \"string\"], [\"HyperlinksChanged\", \"HyperlinksChanged\", \"bool\"], [\"SharedDoc\", \"SharedDoc\", \"bool\"], [\"LinksUpToDate\", \"LinksUpToDate\", \"bool\"], [\"ScaleCrop\", \"ScaleCrop\", \"bool\"], [\"HeadingPairs\", \"HeadingPairs\", \"raw\"], [\"TitlesOfParts\", \"TitlesOfParts\", \"raw\"]];\nvar PseudoPropsPairs = [\"Worksheets\", \"SheetNames\", \"NamedRanges\", \"DefinedNames\", \"Chartsheets\", \"ChartNames\"];\n\nfunction load_props_pairs(HP\n/*:string|Array<Array<any>>*/\n, TOP, props, opts) {\n  var v = [];\n  if (typeof HP == \"string\") v = parseVector(HP, opts);else for (var j = 0; j < HP.length; ++j) {\n    v = v.concat(HP[j].map(function (hp) {\n      return {\n        v: hp\n      };\n    }));\n  }\n  var parts = typeof TOP == \"string\" ? parseVector(TOP, opts).map(function (x) {\n    return x.v;\n  }) : TOP;\n  var idx = 0,\n      len = 0;\n  if (parts.length > 0) for (var i = 0; i !== v.length; i += 2) {\n    len = +v[i + 1].v;\n\n    switch (v[i].v) {\n      case \"Worksheets\":\n      case \"工作表\":\n      case \"Листы\":\n      case \"أوراق العمل\":\n      case \"ワークシート\":\n      case \"גליונות עבודה\":\n      case \"Arbeitsblätter\":\n      case \"Çalışma Sayfaları\":\n      case \"Feuilles de calcul\":\n      case \"Fogli di lavoro\":\n      case \"Folhas de cálculo\":\n      case \"Planilhas\":\n      case \"Regneark\":\n      case \"Hojas de cálculo\":\n      case \"Werkbladen\":\n        props.Worksheets = len;\n        props.SheetNames = parts.slice(idx, idx + len);\n        break;\n\n      case \"Named Ranges\":\n      case \"Rangos con nombre\":\n      case \"名前付き一覧\":\n      case \"Benannte Bereiche\":\n      case \"Navngivne områder\":\n        props.NamedRanges = len;\n        props.DefinedNames = parts.slice(idx, idx + len);\n        break;\n\n      case \"Charts\":\n      case \"Diagramme\":\n        props.Chartsheets = len;\n        props.ChartNames = parts.slice(idx, idx + len);\n        break;\n    }\n\n    idx += len;\n  }\n}\n\nfunction parse_ext_props(data, p, opts) {\n  var q = {};\n  if (!p) p = {};\n  data = utf8read(data);\n  EXT_PROPS.forEach(function (f) {\n    var xml = (data.match(matchtag(f[0])) || [])[1];\n\n    switch (f[2]) {\n      case \"string\":\n        if (xml) p[f[1]] = unescapexml(xml);\n        break;\n\n      case \"bool\":\n        p[f[1]] = xml === \"true\";\n        break;\n\n      case \"raw\":\n        var cur = data.match(new RegExp(\"<\" + f[0] + \"[^>]*>([\\\\s\\\\S]*?)<\\/\" + f[0] + \">\"));\n        if (cur && cur.length > 0) q[f[1]] = cur[1];\n        break;\n    }\n  });\n  if (q.HeadingPairs && q.TitlesOfParts) load_props_pairs(q.HeadingPairs, q.TitlesOfParts, p, opts);\n  return p;\n}\n\nfunction write_ext_props(cp\n/*::, opts*/\n)\n/*:string*/\n{\n  var o\n  /*:Array<string>*/\n  = [],\n      W = writextag;\n  if (!cp) cp = {};\n  cp.Application = \"SheetJS\";\n  o[o.length] = XML_HEADER;\n  o[o.length] = writextag('Properties', null, {\n    'xmlns': XMLNS.EXT_PROPS,\n    'xmlns:vt': XMLNS.vt\n  });\n  EXT_PROPS.forEach(function (f) {\n    if (cp[f[1]] === undefined) return;\n    var v;\n\n    switch (f[2]) {\n      case 'string':\n        v = escapexml(String(cp[f[1]]));\n        break;\n\n      case 'bool':\n        v = cp[f[1]] ? 'true' : 'false';\n        break;\n    }\n\n    if (v !== undefined) o[o.length] = W(f[0], v);\n  });\n  /* TODO: HeadingPairs, TitlesOfParts */\n\n  o[o.length] = W('HeadingPairs', W('vt:vector', W('vt:variant', '<vt:lpstr>Worksheets</vt:lpstr>') + W('vt:variant', W('vt:i4', String(cp.Worksheets))), {\n    size: 2,\n    baseType: \"variant\"\n  }));\n  o[o.length] = W('TitlesOfParts', W('vt:vector', cp.SheetNames.map(function (s) {\n    return \"<vt:lpstr>\" + escapexml(s) + \"</vt:lpstr>\";\n  }).join(\"\"), {\n    size: cp.Worksheets,\n    baseType: \"lpstr\"\n  }));\n\n  if (o.length > 2) {\n    o[o.length] = '</Properties>';\n    o[1] = o[1].replace(\"/>\", \">\");\n  }\n\n  return o.join(\"\");\n}\n/* 15.2.12.2 Custom File Properties Part */\n\n\nvar custregex = /<[^>]+>[^<]*/g;\n\nfunction parse_cust_props(data\n/*:string*/\n, opts) {\n  var p = {},\n      name = \"\";\n  var m = data.match(custregex);\n  if (m) for (var i = 0; i != m.length; ++i) {\n    var x = m[i],\n        y = parsexmltag(x);\n\n    switch (y[0]) {\n      case '<?xml':\n        break;\n\n      case '<Properties':\n        break;\n\n      case '<property':\n        name = unescapexml(y.name);\n        break;\n\n      case '</property>':\n        name = null;\n        break;\n\n      default:\n        if (x.indexOf('<vt:') === 0) {\n          var toks = x.split('>');\n          var type = toks[0].slice(4),\n              text = toks[1];\n          /* 22.4.2.32 (CT_Variant). Omit the binary types from 22.4 (Variant Types) */\n\n          switch (type) {\n            case 'lpstr':\n            case 'bstr':\n            case 'lpwstr':\n              p[name] = unescapexml(text);\n              break;\n\n            case 'bool':\n              p[name] = parsexmlbool(text);\n              break;\n\n            case 'i1':\n            case 'i2':\n            case 'i4':\n            case 'i8':\n            case 'int':\n            case 'uint':\n              p[name] = parseInt(text, 10);\n              break;\n\n            case 'r4':\n            case 'r8':\n            case 'decimal':\n              p[name] = parseFloat(text);\n              break;\n\n            case 'filetime':\n            case 'date':\n              p[name] = parseDate(text);\n              break;\n\n            case 'cy':\n            case 'error':\n              p[name] = unescapexml(text);\n              break;\n\n            default:\n              if (type.slice(-1) == '/') break;\n              if (opts.WTF && typeof console !== 'undefined') console.warn('Unexpected', x, type, toks);\n          }\n        } else if (x.slice(0, 2) === \"</\") {\n          /* empty */\n        } else if (opts.WTF) throw new Error(x);\n\n    }\n  }\n  return p;\n}\n\nfunction write_cust_props(cp\n/*::, opts*/\n)\n/*:string*/\n{\n  var o = [XML_HEADER, writextag('Properties', null, {\n    'xmlns': XMLNS.CUST_PROPS,\n    'xmlns:vt': XMLNS.vt\n  })];\n  if (!cp) return o.join(\"\");\n  var pid = 1;\n  keys(cp).forEach(function custprop(k) {\n    ++pid;\n    o[o.length] = writextag('property', write_vt(cp[k], true), {\n      'fmtid': '{D5CDD505-2E9C-101B-9397-08002B2CF9AE}',\n      'pid': pid,\n      'name': escapexml(k)\n    });\n  });\n\n  if (o.length > 2) {\n    o[o.length] = '</Properties>';\n    o[1] = o[1].replace(\"/>\", \">\");\n  }\n\n  return o.join(\"\");\n}\n/* Common Name -> XLML Name */\n\n\nvar XLMLDocPropsMap = {\n  Title: 'Title',\n  Subject: 'Subject',\n  Author: 'Author',\n  Keywords: 'Keywords',\n  Comments: 'Description',\n  LastAuthor: 'LastAuthor',\n  RevNumber: 'Revision',\n  Application: 'AppName',\n\n  /* TotalTime: 'TotalTime', */\n  LastPrinted: 'LastPrinted',\n  CreatedDate: 'Created',\n  ModifiedDate: 'LastSaved',\n\n  /* Pages */\n\n  /* Words */\n\n  /* Characters */\n  Category: 'Category',\n\n  /* PresentationFormat */\n  Manager: 'Manager',\n  Company: 'Company',\n\n  /* Guid */\n\n  /* HyperlinkBase */\n\n  /* Bytes */\n\n  /* Lines */\n\n  /* Paragraphs */\n\n  /* CharactersWithSpaces */\n  AppVersion: 'Version',\n  ContentStatus: 'ContentStatus',\n\n  /* NOTE: missing from schema */\n  Identifier: 'Identifier',\n\n  /* NOTE: missing from schema */\n  Language: 'Language'\n  /* NOTE: missing from schema */\n\n};\nvar evert_XLMLDPM;\n\nfunction xlml_set_prop(Props, tag\n/*:string*/\n, val) {\n  if (!evert_XLMLDPM) evert_XLMLDPM = evert(XLMLDocPropsMap);\n  tag = evert_XLMLDPM[tag] || tag;\n  Props[tag] = val;\n}\n\nfunction xlml_write_docprops(Props, opts) {\n  var o\n  /*:Array<string>*/\n  = [];\n  keys(XLMLDocPropsMap).map(function (m) {\n    for (var i = 0; i < CORE_PROPS.length; ++i) {\n      if (CORE_PROPS[i][1] == m) return CORE_PROPS[i];\n    }\n\n    for (i = 0; i < EXT_PROPS.length; ++i) {\n      if (EXT_PROPS[i][1] == m) return EXT_PROPS[i];\n    }\n\n    throw m;\n  }).forEach(function (p) {\n    if (Props[p[1]] == null) return;\n    var m = opts && opts.Props && opts.Props[p[1]] != null ? opts.Props[p[1]] : Props[p[1]];\n\n    switch (p[2]) {\n      case 'date':\n        m = new Date(m).toISOString().replace(/\\.\\d*Z/, \"Z\");\n        break;\n    }\n\n    if (typeof m == 'number') m = String(m);else if (m === true || m === false) {\n      m = m ? \"1\" : \"0\";\n    } else if (m instanceof Date) m = new Date(m).toISOString().replace(/\\.\\d*Z/, \"\");\n    o.push(writetag(XLMLDocPropsMap[p[1]] || p[1], m));\n  });\n  return writextag('DocumentProperties', o.join(\"\"), {\n    xmlns: XLMLNS.o\n  });\n}\n\nfunction xlml_write_custprops(Props, Custprops\n/*::, opts*/\n) {\n  var BLACKLIST = [\"Worksheets\", \"SheetNames\"];\n  var T = 'CustomDocumentProperties';\n  var o\n  /*:Array<string>*/\n  = [];\n  if (Props) keys(Props).forEach(function (k) {\n    /*:: if(!Props) return; */\n    if (!Object.prototype.hasOwnProperty.call(Props, k)) return;\n\n    for (var i = 0; i < CORE_PROPS.length; ++i) {\n      if (k == CORE_PROPS[i][1]) return;\n    }\n\n    for (i = 0; i < EXT_PROPS.length; ++i) {\n      if (k == EXT_PROPS[i][1]) return;\n    }\n\n    for (i = 0; i < BLACKLIST.length; ++i) {\n      if (k == BLACKLIST[i]) return;\n    }\n\n    var m = Props[k];\n    var t = \"string\";\n\n    if (typeof m == 'number') {\n      t = \"float\";\n      m = String(m);\n    } else if (m === true || m === false) {\n      t = \"boolean\";\n      m = m ? \"1\" : \"0\";\n    } else m = String(m);\n\n    o.push(writextag(escapexmltag(k), m, {\n      \"dt:dt\": t\n    }));\n  });\n  if (Custprops) keys(Custprops).forEach(function (k) {\n    /*:: if(!Custprops) return; */\n    if (!Object.prototype.hasOwnProperty.call(Custprops, k)) return;\n    if (Props && Object.prototype.hasOwnProperty.call(Props, k)) return;\n    var m = Custprops[k];\n    var t = \"string\";\n\n    if (typeof m == 'number') {\n      t = \"float\";\n      m = String(m);\n    } else if (m === true || m === false) {\n      t = \"boolean\";\n      m = m ? \"1\" : \"0\";\n    } else if (m instanceof Date) {\n      t = \"dateTime.tz\";\n      m = m.toISOString();\n    } else m = String(m);\n\n    o.push(writextag(escapexmltag(k), m, {\n      \"dt:dt\": t\n    }));\n  });\n  return '<' + T + ' xmlns=\"' + XLMLNS.o + '\">' + o.join(\"\") + '</' + T + '>';\n}\n/* [MS-DTYP] 2.3.3 FILETIME */\n\n/* [MS-OLEDS] 2.1.3 FILETIME (Packet Version) */\n\n/* [MS-OLEPS] 2.8 FILETIME (Packet Version) */\n\n\nfunction parse_FILETIME(blob) {\n  var dwLowDateTime = blob.read_shift(4),\n      dwHighDateTime = blob.read_shift(4);\n  return new Date((dwHighDateTime / 1e7 * Math.pow(2, 32) + dwLowDateTime / 1e7 - 11644473600) * 1000).toISOString().replace(/\\.000/, \"\");\n}\n\nfunction write_FILETIME(time\n/*:string|Date*/\n) {\n  var date = typeof time == \"string\" ? new Date(Date.parse(time)) : time;\n  var t = date.getTime() / 1000 + 11644473600;\n  var l = t % Math.pow(2, 32),\n      h = (t - l) / Math.pow(2, 32);\n  l *= 1e7;\n  h *= 1e7;\n  var w = l / Math.pow(2, 32) | 0;\n\n  if (w > 0) {\n    l = l % Math.pow(2, 32);\n    h += w;\n  }\n\n  var o = new_buf(8);\n  o.write_shift(4, l);\n  o.write_shift(4, h);\n  return o;\n}\n/* [MS-OSHARED] 2.3.3.1.4 Lpstr */\n\n\nfunction parse_lpstr(blob, type, pad\n/*:?number*/\n) {\n  var start = blob.l;\n  var str = blob.read_shift(0, 'lpstr-cp');\n  if (pad) while (blob.l - start & 3) {\n    ++blob.l;\n  }\n  return str;\n}\n/* [MS-OSHARED] 2.3.3.1.6 Lpwstr */\n\n\nfunction parse_lpwstr(blob, type, pad) {\n  var str = blob.read_shift(0, 'lpwstr');\n  if (pad) blob.l += 4 - (str.length + 1 & 3) & 3;\n  return str;\n}\n/* [MS-OSHARED] 2.3.3.1.11 VtString */\n\n/* [MS-OSHARED] 2.3.3.1.12 VtUnalignedString */\n\n\nfunction parse_VtStringBase(blob, stringType, pad) {\n  if (stringType === 0x1F\n  /*VT_LPWSTR*/\n  ) return parse_lpwstr(blob);\n  return parse_lpstr(blob, stringType, pad);\n}\n\nfunction parse_VtString(blob, t\n/*:number*/\n, pad\n/*:?boolean*/\n) {\n  return parse_VtStringBase(blob, t, pad === false ? 0 : 4);\n}\n\nfunction parse_VtUnalignedString(blob, t\n/*:number*/\n) {\n  if (!t) throw new Error(\"VtUnalignedString must have positive length\");\n  return parse_VtStringBase(blob, t, 0);\n}\n/* [MS-OSHARED] 2.3.3.1.7 VtVecLpwstrValue */\n\n\nfunction parse_VtVecLpwstrValue(blob)\n/*:Array<string>*/\n{\n  var length = blob.read_shift(4);\n  var ret\n  /*:Array<string>*/\n  = [];\n\n  for (var i = 0; i != length; ++i) {\n    var start = blob.l;\n    ret[i] = blob.read_shift(0, 'lpwstr').replace(chr0, '');\n    if (blob.l - start & 0x02) blob.l += 2;\n  }\n\n  return ret;\n}\n/* [MS-OSHARED] 2.3.3.1.9 VtVecUnalignedLpstrValue */\n\n\nfunction parse_VtVecUnalignedLpstrValue(blob)\n/*:Array<string>*/\n{\n  var length = blob.read_shift(4);\n  var ret\n  /*:Array<string>*/\n  = [];\n\n  for (var i = 0; i != length; ++i) {\n    ret[i] = blob.read_shift(0, 'lpstr-cp').replace(chr0, '');\n  }\n\n  return ret;\n}\n/* [MS-OSHARED] 2.3.3.1.13 VtHeadingPair */\n\n\nfunction parse_VtHeadingPair(blob) {\n  var start = blob.l;\n  var headingString = parse_TypedPropertyValue(blob, VT_USTR);\n  if (blob[blob.l] == 0x00 && blob[blob.l + 1] == 0x00 && blob.l - start & 0x02) blob.l += 2;\n  var headerParts = parse_TypedPropertyValue(blob, VT_I4);\n  return [headingString, headerParts];\n}\n/* [MS-OSHARED] 2.3.3.1.14 VtVecHeadingPairValue */\n\n\nfunction parse_VtVecHeadingPairValue(blob) {\n  var cElements = blob.read_shift(4);\n  var out = [];\n\n  for (var i = 0; i < cElements / 2; ++i) {\n    out.push(parse_VtHeadingPair(blob));\n  }\n\n  return out;\n}\n/* [MS-OLEPS] 2.18.1 Dictionary (uses 2.17, 2.16) */\n\n\nfunction parse_dictionary(blob, CodePage) {\n  var cnt = blob.read_shift(4);\n  var dict\n  /*:{[number]:string}*/\n  = {}\n  /*:any*/\n  ;\n\n  for (var j = 0; j != cnt; ++j) {\n    var pid = blob.read_shift(4);\n    var len = blob.read_shift(4);\n    dict[pid] = blob.read_shift(len, CodePage === 0x4B0 ? 'utf16le' : 'utf8').replace(chr0, '').replace(chr1, '!');\n    if (CodePage === 0x4B0 && len % 2) blob.l += 2;\n  }\n\n  if (blob.l & 3) blob.l = blob.l >> 2 + 1 << 2;\n  return dict;\n}\n/* [MS-OLEPS] 2.9 BLOB */\n\n\nfunction parse_BLOB(blob) {\n  var size = blob.read_shift(4);\n  var bytes = blob.slice(blob.l, blob.l + size);\n  blob.l += size;\n  if ((size & 3) > 0) blob.l += 4 - (size & 3) & 3;\n  return bytes;\n}\n/* [MS-OLEPS] 2.11 ClipboardData */\n\n\nfunction parse_ClipboardData(blob) {\n  // TODO\n  var o = {};\n  o.Size = blob.read_shift(4); //o.Format = blob.read_shift(4);\n\n  blob.l += o.Size + 3 - (o.Size - 1) % 4;\n  return o;\n}\n/* [MS-OLEPS] 2.15 TypedPropertyValue */\n\n\nfunction parse_TypedPropertyValue(blob, type\n/*:number*/\n, _opts)\n/*:any*/\n{\n  var t = blob.read_shift(2),\n      ret,\n      opts = _opts || {};\n  blob.l += 2;\n  if (type !== VT_VARIANT) if (t !== type && VT_CUSTOM.indexOf(type) === -1 && !((type & 0xFFFE) == 0x101E && (t & 0xFFFE) == 0x101E)) throw new Error('Expected type ' + type + ' saw ' + t);\n\n  switch (type === VT_VARIANT ? t : type) {\n    case 0x02\n    /*VT_I2*/\n    :\n      ret = blob.read_shift(2, 'i');\n      if (!opts.raw) blob.l += 2;\n      return ret;\n\n    case 0x03\n    /*VT_I4*/\n    :\n      ret = blob.read_shift(4, 'i');\n      return ret;\n\n    case 0x0B\n    /*VT_BOOL*/\n    :\n      return blob.read_shift(4) !== 0x0;\n\n    case 0x13\n    /*VT_UI4*/\n    :\n      ret = blob.read_shift(4);\n      return ret;\n\n    case 0x1E\n    /*VT_LPSTR*/\n    :\n      return parse_lpstr(blob, t, 4).replace(chr0, '');\n\n    case 0x1F\n    /*VT_LPWSTR*/\n    :\n      return parse_lpwstr(blob);\n\n    case 0x40\n    /*VT_FILETIME*/\n    :\n      return parse_FILETIME(blob);\n\n    case 0x41\n    /*VT_BLOB*/\n    :\n      return parse_BLOB(blob);\n\n    case 0x47\n    /*VT_CF*/\n    :\n      return parse_ClipboardData(blob);\n\n    case 0x50\n    /*VT_STRING*/\n    :\n      return parse_VtString(blob, t, !opts.raw).replace(chr0, '');\n\n    case 0x51\n    /*VT_USTR*/\n    :\n      return parse_VtUnalignedString(blob, t\n      /*, 4*/\n      ).replace(chr0, '');\n\n    case 0x100C\n    /*VT_VECTOR|VT_VARIANT*/\n    :\n      return parse_VtVecHeadingPairValue(blob);\n\n    case 0x101E\n    /*VT_VECTOR|VT_LPSTR*/\n    :\n    case 0x101F\n    /*VT_VECTOR|VT_LPWSTR*/\n    :\n      return t == 0x101F ? parse_VtVecLpwstrValue(blob) : parse_VtVecUnalignedLpstrValue(blob);\n\n    default:\n      throw new Error(\"TypedPropertyValue unrecognized type \" + type + \" \" + t);\n  }\n}\n\nfunction write_TypedPropertyValue(type\n/*:number*/\n, value) {\n  var o = new_buf(4),\n      p = new_buf(4);\n  o.write_shift(4, type == 0x50 ? 0x1F : type);\n\n  switch (type) {\n    case 0x03\n    /*VT_I4*/\n    :\n      p.write_shift(-4, value);\n      break;\n\n    case 0x05\n    /*VT_I4*/\n    :\n      p = new_buf(8);\n      p.write_shift(8, value, 'f');\n      break;\n\n    case 0x0B\n    /*VT_BOOL*/\n    :\n      p.write_shift(4, value ? 0x01 : 0x00);\n      break;\n\n    case 0x40\n    /*VT_FILETIME*/\n    :\n      /*:: if(typeof value !== \"string\" && !(value instanceof Date)) throw \"unreachable\"; */\n      p = write_FILETIME(value);\n      break;\n\n    case 0x1F\n    /*VT_LPWSTR*/\n    :\n    case 0x50\n    /*VT_STRING*/\n    :\n      /*:: if(typeof value !== \"string\") throw \"unreachable\"; */\n      p = new_buf(4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));\n      p.write_shift(4, value.length + 1);\n      p.write_shift(0, value, \"dbcs\");\n\n      while (p.l != p.length) {\n        p.write_shift(1, 0);\n      }\n\n      break;\n\n    default:\n      throw new Error(\"TypedPropertyValue unrecognized type \" + type + \" \" + value);\n  }\n\n  return bconcat([o, p]);\n}\n/* [MS-OLEPS] 2.20 PropertySet */\n\n\nfunction parse_PropertySet(blob, PIDSI) {\n  var start_addr = blob.l;\n  var size = blob.read_shift(4);\n  var NumProps = blob.read_shift(4);\n  var Props = [],\n      i = 0;\n  var CodePage = 0;\n  var Dictionary = -1,\n      DictObj\n  /*:{[number]:string}*/\n  = {}\n  /*:any*/\n  ;\n\n  for (i = 0; i != NumProps; ++i) {\n    var PropID = blob.read_shift(4);\n    var Offset = blob.read_shift(4);\n    Props[i] = [PropID, Offset + start_addr];\n  }\n\n  Props.sort(function (x, y) {\n    return x[1] - y[1];\n  });\n  var PropH = {};\n\n  for (i = 0; i != NumProps; ++i) {\n    if (blob.l !== Props[i][1]) {\n      var fail = true;\n      if (i > 0 && PIDSI) switch (PIDSI[Props[i - 1][0]].t) {\n        case 0x02\n        /*VT_I2*/\n        :\n          if (blob.l + 2 === Props[i][1]) {\n            blob.l += 2;\n            fail = false;\n          }\n\n          break;\n\n        case 0x50\n        /*VT_STRING*/\n        :\n          if (blob.l <= Props[i][1]) {\n            blob.l = Props[i][1];\n            fail = false;\n          }\n\n          break;\n\n        case 0x100C\n        /*VT_VECTOR|VT_VARIANT*/\n        :\n          if (blob.l <= Props[i][1]) {\n            blob.l = Props[i][1];\n            fail = false;\n          }\n\n          break;\n      }\n\n      if ((!PIDSI || i == 0) && blob.l <= Props[i][1]) {\n        fail = false;\n        blob.l = Props[i][1];\n      }\n\n      if (fail) throw new Error(\"Read Error: Expected address \" + Props[i][1] + ' at ' + blob.l + ' :' + i);\n    }\n\n    if (PIDSI) {\n      var piddsi = PIDSI[Props[i][0]];\n      PropH[piddsi.n] = parse_TypedPropertyValue(blob, piddsi.t, {\n        raw: true\n      });\n      if (piddsi.p === 'version') PropH[piddsi.n] = String(PropH[piddsi.n] >> 16) + \".\" + (\"0000\" + String(PropH[piddsi.n] & 0xFFFF)).slice(-4);\n      if (piddsi.n == \"CodePage\") switch (PropH[piddsi.n]) {\n        case 0:\n          PropH[piddsi.n] = 1252;\n\n        /* falls through */\n\n        case 874:\n        case 932:\n        case 936:\n        case 949:\n        case 950:\n        case 1250:\n        case 1251:\n        case 1253:\n        case 1254:\n        case 1255:\n        case 1256:\n        case 1257:\n        case 1258:\n        case 10000:\n        case 1200:\n        case 1201:\n        case 1252:\n        case 65000:\n        case -536:\n        case 65001:\n        case -535:\n          set_cp(CodePage = PropH[piddsi.n] >>> 0 & 0xFFFF);\n          break;\n\n        default:\n          throw new Error(\"Unsupported CodePage: \" + PropH[piddsi.n]);\n      }\n    } else {\n      if (Props[i][0] === 0x1) {\n        CodePage = PropH.CodePage = parse_TypedPropertyValue(blob, VT_I2)\n        /*:number*/\n        ;\n        set_cp(CodePage);\n\n        if (Dictionary !== -1) {\n          var oldpos = blob.l;\n          blob.l = Props[Dictionary][1];\n          DictObj = parse_dictionary(blob, CodePage);\n          blob.l = oldpos;\n        }\n      } else if (Props[i][0] === 0) {\n        if (CodePage === 0) {\n          Dictionary = i;\n          blob.l = Props[i + 1][1];\n          continue;\n        }\n\n        DictObj = parse_dictionary(blob, CodePage);\n      } else {\n        var name = DictObj[Props[i][0]];\n        var val;\n        /* [MS-OSHARED] 2.3.3.2.3.1.2 + PROPVARIANT */\n\n        switch (blob[blob.l]) {\n          case 0x41\n          /*VT_BLOB*/\n          :\n            blob.l += 4;\n            val = parse_BLOB(blob);\n            break;\n\n          case 0x1E\n          /*VT_LPSTR*/\n          :\n            blob.l += 4;\n            val = parse_VtString(blob, blob[blob.l - 4]).replace(/\\u0000+$/, \"\");\n            break;\n\n          case 0x1F\n          /*VT_LPWSTR*/\n          :\n            blob.l += 4;\n            val = parse_VtString(blob, blob[blob.l - 4]).replace(/\\u0000+$/, \"\");\n            break;\n\n          case 0x03\n          /*VT_I4*/\n          :\n            blob.l += 4;\n            val = blob.read_shift(4, 'i');\n            break;\n\n          case 0x13\n          /*VT_UI4*/\n          :\n            blob.l += 4;\n            val = blob.read_shift(4);\n            break;\n\n          case 0x05\n          /*VT_R8*/\n          :\n            blob.l += 4;\n            val = blob.read_shift(8, 'f');\n            break;\n\n          case 0x0B\n          /*VT_BOOL*/\n          :\n            blob.l += 4;\n            val = parsebool(blob, 4);\n            break;\n\n          case 0x40\n          /*VT_FILETIME*/\n          :\n            blob.l += 4;\n            val = parseDate(parse_FILETIME(blob));\n            break;\n\n          default:\n            throw new Error(\"unparsed value: \" + blob[blob.l]);\n        }\n\n        PropH[name] = val;\n      }\n    }\n  }\n\n  blob.l = start_addr + size;\n  /* step ahead to skip padding */\n\n  return PropH;\n}\n\nvar XLSPSSkip = [\"CodePage\", \"Thumbnail\", \"_PID_LINKBASE\", \"_PID_HLINKS\", \"SystemIdentifier\", \"FMTID\"]; //.concat(PseudoPropsPairs);\n\nfunction guess_property_type(val\n/*:any*/\n)\n/*:number*/\n{\n  switch (typeof val) {\n    case \"boolean\":\n      return 0x0B;\n\n    case \"number\":\n      return (val | 0) == val ? 0x03 : 0x05;\n\n    case \"string\":\n      return 0x1F;\n\n    case \"object\":\n      if (val instanceof Date) return 0x40;\n      break;\n  }\n\n  return -1;\n}\n\nfunction write_PropertySet(entries, RE, PIDSI) {\n  var hdr = new_buf(8),\n      piao = [],\n      prop = [];\n  var sz = 8,\n      i = 0;\n  var pr = new_buf(8),\n      pio = new_buf(8);\n  pr.write_shift(4, 0x0002);\n  pr.write_shift(4, 0x04B0);\n  pio.write_shift(4, 0x0001);\n  prop.push(pr);\n  piao.push(pio);\n  sz += 8 + pr.length;\n\n  if (!RE) {\n    pio = new_buf(8);\n    pio.write_shift(4, 0);\n    piao.unshift(pio);\n    var bufs = [new_buf(4)];\n    bufs[0].write_shift(4, entries.length);\n\n    for (i = 0; i < entries.length; ++i) {\n      var value = entries[i][0];\n      pr = new_buf(4 + 4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));\n      pr.write_shift(4, i + 2);\n      pr.write_shift(4, value.length + 1);\n      pr.write_shift(0, value, \"dbcs\");\n\n      while (pr.l != pr.length) {\n        pr.write_shift(1, 0);\n      }\n\n      bufs.push(pr);\n    }\n\n    pr = bconcat(bufs);\n    prop.unshift(pr);\n    sz += 8 + pr.length;\n  }\n\n  for (i = 0; i < entries.length; ++i) {\n    if (RE && !RE[entries[i][0]]) continue;\n    if (XLSPSSkip.indexOf(entries[i][0]) > -1 || PseudoPropsPairs.indexOf(entries[i][0]) > -1) continue;\n    if (entries[i][1] == null) continue;\n    var val = entries[i][1],\n        idx = 0;\n\n    if (RE) {\n      idx = +RE[entries[i][0]];\n      var pinfo = PIDSI\n      /*:: || {}*/\n      [idx]\n      /*:: || {} */\n      ;\n\n      if (pinfo.p == \"version\" && typeof val == \"string\") {\n        /*:: if(typeof val !== \"string\") throw \"unreachable\"; */\n        var arr = val.split(\".\");\n        val = (+arr[0] << 16) + (+arr[1] || 0);\n      }\n\n      pr = write_TypedPropertyValue(pinfo.t, val);\n    } else {\n      var T = guess_property_type(val);\n\n      if (T == -1) {\n        T = 0x1F;\n        val = String(val);\n      }\n\n      pr = write_TypedPropertyValue(T, val);\n    }\n\n    prop.push(pr);\n    pio = new_buf(8);\n    pio.write_shift(4, !RE ? 2 + i : idx);\n    piao.push(pio);\n    sz += 8 + pr.length;\n  }\n\n  var w = 8 * (prop.length + 1);\n\n  for (i = 0; i < prop.length; ++i) {\n    piao[i].write_shift(4, w);\n    w += prop[i].length;\n  }\n\n  hdr.write_shift(4, sz);\n  hdr.write_shift(4, prop.length);\n  return bconcat([hdr].concat(piao).concat(prop));\n}\n/* [MS-OLEPS] 2.21 PropertySetStream */\n\n\nfunction parse_PropertySetStream(file, PIDSI, clsid) {\n  var blob = file.content;\n  if (!blob) return {}\n  /*:any*/\n  ;\n  prep_blob(blob, 0);\n  var NumSets,\n      FMTID0,\n      FMTID1,\n      Offset0,\n      Offset1 = 0;\n  blob.chk('feff', 'Byte Order: ');\n  /*var vers = */\n\n  blob.read_shift(2); // TODO: check version\n\n  var SystemIdentifier = blob.read_shift(4);\n  var CLSID = blob.read_shift(16);\n  if (CLSID !== CFB.utils.consts.HEADER_CLSID && CLSID !== clsid) throw new Error(\"Bad PropertySet CLSID \" + CLSID);\n  NumSets = blob.read_shift(4);\n  if (NumSets !== 1 && NumSets !== 2) throw new Error(\"Unrecognized #Sets: \" + NumSets);\n  FMTID0 = blob.read_shift(16);\n  Offset0 = blob.read_shift(4);\n  if (NumSets === 1 && Offset0 !== blob.l) throw new Error(\"Length mismatch: \" + Offset0 + \" !== \" + blob.l);else if (NumSets === 2) {\n    FMTID1 = blob.read_shift(16);\n    Offset1 = blob.read_shift(4);\n  }\n  var PSet0 = parse_PropertySet(blob, PIDSI);\n  var rval = {\n    SystemIdentifier: SystemIdentifier\n  }\n  /*:any*/\n  ;\n\n  for (var y in PSet0) {\n    rval[y] = PSet0[y];\n  } //rval.blob = blob;\n\n\n  rval.FMTID = FMTID0; //rval.PSet0 = PSet0;\n\n  if (NumSets === 1) return rval;\n  if (Offset1 - blob.l == 2) blob.l += 2;\n  if (blob.l !== Offset1) throw new Error(\"Length mismatch 2: \" + blob.l + \" !== \" + Offset1);\n  var PSet1;\n\n  try {\n    PSet1 = parse_PropertySet(blob, null);\n  } catch (e) {\n    /* empty */\n  }\n\n  for (y in PSet1) {\n    rval[y] = PSet1[y];\n  }\n\n  rval.FMTID = [FMTID0, FMTID1]; // TODO: verify FMTID0/1\n\n  return rval;\n}\n\nfunction write_PropertySetStream(entries, clsid, RE, PIDSI\n/*:{[key:string|number]:any}*/\n, entries2\n/*:?any*/\n, clsid2\n/*:?any*/\n) {\n  var hdr = new_buf(entries2 ? 68 : 48);\n  var bufs = [hdr];\n  hdr.write_shift(2, 0xFFFE);\n  hdr.write_shift(2, 0x0000);\n  /* TODO: type 1 props */\n\n  hdr.write_shift(4, 0x32363237);\n  hdr.write_shift(16, CFB.utils.consts.HEADER_CLSID, \"hex\");\n  hdr.write_shift(4, entries2 ? 2 : 1);\n  hdr.write_shift(16, clsid, \"hex\");\n  hdr.write_shift(4, entries2 ? 68 : 48);\n  var ps0 = write_PropertySet(entries, RE, PIDSI);\n  bufs.push(ps0);\n\n  if (entries2) {\n    var ps1 = write_PropertySet(entries2, null, null);\n    hdr.write_shift(16, clsid2, \"hex\");\n    hdr.write_shift(4, 68 + ps0.length);\n    bufs.push(ps1);\n  }\n\n  return bconcat(bufs);\n}\n\nfunction parsenoop2(blob, length) {\n  blob.read_shift(length);\n  return null;\n}\n\nfunction writezeroes(n, o) {\n  if (!o) o = new_buf(n);\n\n  for (var j = 0; j < n; ++j) {\n    o.write_shift(1, 0);\n  }\n\n  return o;\n}\n\nfunction parslurp(blob, length, cb) {\n  var arr = [],\n      target = blob.l + length;\n\n  while (blob.l < target) {\n    arr.push(cb(blob, target - blob.l));\n  }\n\n  if (target !== blob.l) throw new Error(\"Slurp error\");\n  return arr;\n}\n\nfunction parsebool(blob, length\n/*:number*/\n) {\n  return blob.read_shift(length) === 0x1;\n}\n\nfunction writebool(v\n/*:any*/\n, o) {\n  if (!o) o = new_buf(2);\n  o.write_shift(2, +!!v);\n  return o;\n}\n\nfunction parseuint16(blob\n/*::, length:?number, opts:?any*/\n) {\n  return blob.read_shift(2, 'u');\n}\n\nfunction writeuint16(v\n/*:number*/\n, o) {\n  if (!o) o = new_buf(2);\n  o.write_shift(2, v);\n  return o;\n}\n\nfunction parseuint16a(blob, length\n/*:: :?number, opts:?any*/\n) {\n  return parslurp(blob, length, parseuint16);\n}\n/* --- 2.5 Structures --- */\n\n/* [MS-XLS] 2.5.10 Bes (boolean or error) */\n\n\nfunction parse_Bes(blob\n/*::, length*/\n) {\n  var v = blob.read_shift(1),\n      t = blob.read_shift(1);\n  return t === 0x01 ? v : v === 0x01;\n}\n\nfunction write_Bes(v, t\n/*:string*/\n, o) {\n  if (!o) o = new_buf(2);\n  o.write_shift(1, t == 'e' ? +v : +!!v);\n  o.write_shift(1, t == 'e' ? 1 : 0);\n  return o;\n}\n/* [MS-XLS] 2.5.240 ShortXLUnicodeString */\n\n\nfunction parse_ShortXLUnicodeString(blob, length, opts) {\n  var cch = blob.read_shift(opts && opts.biff >= 12 ? 2 : 1);\n  var encoding = 'sbcs-cont';\n  var cp = current_codepage;\n  if (opts && opts.biff >= 8) current_codepage = 1200;\n\n  if (!opts || opts.biff == 8) {\n    var fHighByte = blob.read_shift(1);\n\n    if (fHighByte) {\n      encoding = 'dbcs-cont';\n    }\n  } else if (opts.biff == 12) {\n    encoding = 'wstr';\n  }\n\n  if (opts.biff >= 2 && opts.biff <= 5) encoding = 'cpstr';\n  var o = cch ? blob.read_shift(cch, encoding) : \"\";\n  current_codepage = cp;\n  return o;\n}\n/* 2.5.293 XLUnicodeRichExtendedString */\n\n\nfunction parse_XLUnicodeRichExtendedString(blob) {\n  var cp = current_codepage;\n  current_codepage = 1200;\n  var cch = blob.read_shift(2),\n      flags = blob.read_shift(1);\n  var\n  /*fHighByte = flags & 0x1,*/\n  fExtSt = flags & 0x4,\n      fRichSt = flags & 0x8;\n  var width = 1 + (flags & 0x1); // 0x0 -> utf8, 0x1 -> dbcs\n\n  var cRun = 0,\n      cbExtRst;\n  var z = {};\n  if (fRichSt) cRun = blob.read_shift(2);\n  if (fExtSt) cbExtRst = blob.read_shift(4);\n  var encoding = width == 2 ? 'dbcs-cont' : 'sbcs-cont';\n  var msg = cch === 0 ? \"\" : blob.read_shift(cch, encoding);\n  if (fRichSt) blob.l += 4 * cRun; //TODO: parse this\n\n  if (fExtSt) blob.l += cbExtRst; //TODO: parse this\n\n  z.t = msg;\n\n  if (!fRichSt) {\n    z.raw = \"<t>\" + z.t + \"</t>\";\n    z.r = z.t;\n  }\n\n  current_codepage = cp;\n  return z;\n}\n\nfunction write_XLUnicodeRichExtendedString(xlstr\n/*:: :XLString, opts*/\n) {\n  var str = xlstr.t || \"\",\n      nfmts = 1;\n  var hdr = new_buf(3 + (nfmts > 1 ? 2 : 0));\n  hdr.write_shift(2, str.length);\n  hdr.write_shift(1, (nfmts > 1 ? 0x08 : 0x00) | 0x01);\n  if (nfmts > 1) hdr.write_shift(2, nfmts);\n  var otext = new_buf(2 * str.length);\n  otext.write_shift(2 * str.length, str, 'utf16le');\n  var out = [hdr, otext];\n  return bconcat(out);\n}\n/* 2.5.296 XLUnicodeStringNoCch */\n\n\nfunction parse_XLUnicodeStringNoCch(blob, cch, opts) {\n  var retval;\n\n  if (opts) {\n    if (opts.biff >= 2 && opts.biff <= 5) return blob.read_shift(cch, 'cpstr');\n    if (opts.biff >= 12) return blob.read_shift(cch, 'dbcs-cont');\n  }\n\n  var fHighByte = blob.read_shift(1);\n\n  if (fHighByte === 0) {\n    retval = blob.read_shift(cch, 'sbcs-cont');\n  } else {\n    retval = blob.read_shift(cch, 'dbcs-cont');\n  }\n\n  return retval;\n}\n/* 2.5.294 XLUnicodeString */\n\n\nfunction parse_XLUnicodeString(blob, length, opts) {\n  var cch = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\n  if (cch === 0) {\n    blob.l++;\n    return \"\";\n  }\n\n  return parse_XLUnicodeStringNoCch(blob, cch, opts);\n}\n/* BIFF5 override */\n\n\nfunction parse_XLUnicodeString2(blob, length, opts) {\n  if (opts.biff > 5) return parse_XLUnicodeString(blob, length, opts);\n  var cch = blob.read_shift(1);\n\n  if (cch === 0) {\n    blob.l++;\n    return \"\";\n  }\n\n  return blob.read_shift(cch, opts.biff <= 4 || !blob.lens ? 'cpstr' : 'sbcs-cont');\n}\n/* TODO: BIFF5 and lower, codepage awareness */\n\n\nfunction write_XLUnicodeString(str, opts, o) {\n  if (!o) o = new_buf(3 + 2 * str.length);\n  o.write_shift(2, str.length);\n  o.write_shift(1, 1);\n  o.write_shift(31, str, 'utf16le');\n  return o;\n}\n/* [MS-XLS] 2.5.61 ControlInfo */\n\n\nfunction parse_ControlInfo(blob\n/*::, length, opts*/\n) {\n  var flags = blob.read_shift(1);\n  blob.l++;\n  var accel = blob.read_shift(2);\n  blob.l += 2;\n  return [flags, accel];\n}\n/* [MS-OSHARED] 2.3.7.6 URLMoniker TODO: flags */\n\n\nfunction parse_URLMoniker(blob\n/*::, length, opts*/\n) {\n  var len = blob.read_shift(4),\n      start = blob.l;\n  var extra = false;\n\n  if (len > 24) {\n    /* look ahead */\n    blob.l += len - 24;\n    if (blob.read_shift(16) === \"795881f43b1d7f48af2c825dc4852763\") extra = true;\n    blob.l = start;\n  }\n\n  var url = blob.read_shift((extra ? len - 24 : len) >> 1, 'utf16le').replace(chr0, \"\");\n  if (extra) blob.l += 24;\n  return url;\n}\n/* [MS-OSHARED] 2.3.7.8 FileMoniker TODO: all fields */\n\n\nfunction parse_FileMoniker(blob\n/*::, length*/\n) {\n  var cAnti = blob.read_shift(2);\n  var preamble = \"\";\n\n  while (cAnti-- > 0) {\n    preamble += \"../\";\n  }\n\n  var ansiPath = blob.read_shift(0, 'lpstr-ansi');\n  blob.l += 2; //var endServer = blob.read_shift(2);\n\n  if (blob.read_shift(2) != 0xDEAD) throw new Error(\"Bad FileMoniker\");\n  var sz = blob.read_shift(4);\n  if (sz === 0) return preamble + ansiPath.replace(/\\\\/g, \"/\");\n  var bytes = blob.read_shift(4);\n  if (blob.read_shift(2) != 3) throw new Error(\"Bad FileMoniker\");\n  var unicodePath = blob.read_shift(bytes >> 1, 'utf16le').replace(chr0, \"\");\n  return preamble + unicodePath;\n}\n/* [MS-OSHARED] 2.3.7.2 HyperlinkMoniker TODO: all the monikers */\n\n\nfunction parse_HyperlinkMoniker(blob, length) {\n  var clsid = blob.read_shift(16);\n  length -= 16;\n\n  switch (clsid) {\n    case \"e0c9ea79f9bace118c8200aa004ba90b\":\n      return parse_URLMoniker(blob, length);\n\n    case \"0303000000000000c000000000000046\":\n      return parse_FileMoniker(blob, length);\n\n    default:\n      throw new Error(\"Unsupported Moniker \" + clsid);\n  }\n}\n/* [MS-OSHARED] 2.3.7.9 HyperlinkString */\n\n\nfunction parse_HyperlinkString(blob\n/*::, length*/\n) {\n  var len = blob.read_shift(4);\n  var o = len > 0 ? blob.read_shift(len, 'utf16le').replace(chr0, \"\") : \"\";\n  return o;\n}\n\nfunction write_HyperlinkString(str\n/*:string*/\n, o) {\n  if (!o) o = new_buf(6 + str.length * 2);\n  o.write_shift(4, 1 + str.length);\n\n  for (var i = 0; i < str.length; ++i) {\n    o.write_shift(2, str.charCodeAt(i));\n  }\n\n  o.write_shift(2, 0);\n  return o;\n}\n/* [MS-OSHARED] 2.3.7.1 Hyperlink Object */\n\n\nfunction parse_Hyperlink(blob, length)\n/*:Hyperlink*/\n{\n  var end = blob.l + length;\n  var sVer = blob.read_shift(4);\n  if (sVer !== 2) throw new Error(\"Unrecognized streamVersion: \" + sVer);\n  var flags = blob.read_shift(2);\n  blob.l += 2;\n  var displayName,\n      targetFrameName,\n      moniker,\n      oleMoniker,\n      Loc = \"\",\n      guid,\n      fileTime;\n  if (flags & 0x0010) displayName = parse_HyperlinkString(blob, end - blob.l);\n  if (flags & 0x0080) targetFrameName = parse_HyperlinkString(blob, end - blob.l);\n  if ((flags & 0x0101) === 0x0101) moniker = parse_HyperlinkString(blob, end - blob.l);\n  if ((flags & 0x0101) === 0x0001) oleMoniker = parse_HyperlinkMoniker(blob, end - blob.l);\n  if (flags & 0x0008) Loc = parse_HyperlinkString(blob, end - blob.l);\n  if (flags & 0x0020) guid = blob.read_shift(16);\n  if (flags & 0x0040) fileTime = parse_FILETIME(blob\n  /*, 8*/\n  );\n  blob.l = end;\n  var target = targetFrameName || moniker || oleMoniker || \"\";\n  if (target && Loc) target += \"#\" + Loc;\n  if (!target) target = \"#\" + Loc;\n  if (flags & 0x0002 && target.charAt(0) == \"/\" && target.charAt(1) != \"/\") target = \"file://\" + target;\n  var out = {\n    Target: target\n  }\n  /*:any*/\n  ;\n  if (guid) out.guid = guid;\n  if (fileTime) out.time = fileTime;\n  if (displayName) out.Tooltip = displayName;\n  return out;\n}\n\nfunction write_Hyperlink(hl) {\n  var out = new_buf(512),\n      i = 0;\n  var Target = hl.Target;\n  if (Target.slice(0, 7) == \"file://\") Target = Target.slice(7);\n  var hashidx = Target.indexOf(\"#\");\n  var F = hashidx > -1 ? 0x1f : 0x17;\n\n  switch (Target.charAt(0)) {\n    case \"#\":\n      F = 0x1c;\n      break;\n\n    case \".\":\n      F &= ~2;\n      break;\n  }\n\n  out.write_shift(4, 2);\n  out.write_shift(4, F);\n  var data = [8, 6815827, 6619237, 4849780, 83];\n\n  for (i = 0; i < data.length; ++i) {\n    out.write_shift(4, data[i]);\n  }\n\n  if (F == 0x1C) {\n    Target = Target.slice(1);\n    write_HyperlinkString(Target, out);\n  } else if (F & 0x02) {\n    data = \"e0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b\".split(\" \");\n\n    for (i = 0; i < data.length; ++i) {\n      out.write_shift(1, parseInt(data[i], 16));\n    }\n\n    var Pretarget = hashidx > -1 ? Target.slice(0, hashidx) : Target;\n    out.write_shift(4, 2 * (Pretarget.length + 1));\n\n    for (i = 0; i < Pretarget.length; ++i) {\n      out.write_shift(2, Pretarget.charCodeAt(i));\n    }\n\n    out.write_shift(2, 0);\n    if (F & 0x08) write_HyperlinkString(hashidx > -1 ? Target.slice(hashidx + 1) : \"\", out);\n  } else {\n    data = \"03 03 00 00 00 00 00 00 c0 00 00 00 00 00 00 46\".split(\" \");\n\n    for (i = 0; i < data.length; ++i) {\n      out.write_shift(1, parseInt(data[i], 16));\n    }\n\n    var P = 0;\n\n    while (Target.slice(P * 3, P * 3 + 3) == \"../\" || Target.slice(P * 3, P * 3 + 3) == \"..\\\\\") {\n      ++P;\n    }\n\n    out.write_shift(2, P);\n    out.write_shift(4, Target.length - 3 * P + 1);\n\n    for (i = 0; i < Target.length - 3 * P; ++i) {\n      out.write_shift(1, Target.charCodeAt(i + 3 * P) & 0xFF);\n    }\n\n    out.write_shift(1, 0);\n    out.write_shift(2, 0xFFFF);\n    out.write_shift(2, 0xDEAD);\n\n    for (i = 0; i < 6; ++i) {\n      out.write_shift(4, 0);\n    }\n  }\n\n  return out.slice(0, out.l);\n}\n/* 2.5.178 LongRGBA */\n\n\nfunction parse_LongRGBA(blob\n/*::, length*/\n) {\n  var r = blob.read_shift(1),\n      g = blob.read_shift(1),\n      b = blob.read_shift(1),\n      a = blob.read_shift(1);\n  return [r, g, b, a];\n}\n/* 2.5.177 LongRGB */\n\n\nfunction parse_LongRGB(blob, length) {\n  var x = parse_LongRGBA(blob, length);\n  x[3] = 0;\n  return x;\n}\n/* [MS-XLS] 2.5.19 */\n\n\nfunction parse_XLSCell(blob\n/*::, length*/\n)\n/*:Cell*/\n{\n  var rw = blob.read_shift(2); // 0-indexed\n\n  var col = blob.read_shift(2);\n  var ixfe = blob.read_shift(2);\n  return {\n    r: rw,\n    c: col,\n    ixfe: ixfe\n  }\n  /*:any*/\n  ;\n}\n\nfunction write_XLSCell(R\n/*:number*/\n, C\n/*:number*/\n, ixfe\n/*:?number*/\n, o) {\n  if (!o) o = new_buf(6);\n  o.write_shift(2, R);\n  o.write_shift(2, C);\n  o.write_shift(2, ixfe || 0);\n  return o;\n}\n/* [MS-XLS] 2.5.134 */\n\n\nfunction parse_frtHeader(blob) {\n  var rt = blob.read_shift(2);\n  var flags = blob.read_shift(2); // TODO: parse these flags\n\n  blob.l += 8;\n  return {\n    type: rt,\n    flags: flags\n  };\n}\n\nfunction parse_OptXLUnicodeString(blob, length, opts) {\n  return length === 0 ? \"\" : parse_XLUnicodeString2(blob, length, opts);\n}\n/* [MS-XLS] 2.5.344 */\n\n\nfunction parse_XTI(blob, length, opts) {\n  var w = opts.biff > 8 ? 4 : 2;\n  var iSupBook = blob.read_shift(w),\n      itabFirst = blob.read_shift(w, 'i'),\n      itabLast = blob.read_shift(w, 'i');\n  return [iSupBook, itabFirst, itabLast];\n}\n/* [MS-XLS] 2.5.218 */\n\n\nfunction parse_RkRec(blob) {\n  var ixfe = blob.read_shift(2);\n  var RK = parse_RkNumber(blob);\n  return [ixfe, RK];\n}\n/* [MS-XLS] 2.5.1 */\n\n\nfunction parse_AddinUdf(blob, length, opts) {\n  blob.l += 4;\n  length -= 4;\n  var l = blob.l + length;\n  var udfName = parse_ShortXLUnicodeString(blob, length, opts);\n  var cb = blob.read_shift(2);\n  l -= blob.l;\n  if (cb !== l) throw new Error(\"Malformed AddinUdf: padding = \" + l + \" != \" + cb);\n  blob.l += cb;\n  return udfName;\n}\n/* [MS-XLS] 2.5.209 TODO: Check sizes */\n\n\nfunction parse_Ref8U(blob\n/*::, length*/\n) {\n  var rwFirst = blob.read_shift(2);\n  var rwLast = blob.read_shift(2);\n  var colFirst = blob.read_shift(2);\n  var colLast = blob.read_shift(2);\n  return {\n    s: {\n      c: colFirst,\n      r: rwFirst\n    },\n    e: {\n      c: colLast,\n      r: rwLast\n    }\n  };\n}\n\nfunction write_Ref8U(r\n/*:Range*/\n, o) {\n  if (!o) o = new_buf(8);\n  o.write_shift(2, r.s.r);\n  o.write_shift(2, r.e.r);\n  o.write_shift(2, r.s.c);\n  o.write_shift(2, r.e.c);\n  return o;\n}\n/* [MS-XLS] 2.5.211 */\n\n\nfunction parse_RefU(blob\n/*::, length*/\n) {\n  var rwFirst = blob.read_shift(2);\n  var rwLast = blob.read_shift(2);\n  var colFirst = blob.read_shift(1);\n  var colLast = blob.read_shift(1);\n  return {\n    s: {\n      c: colFirst,\n      r: rwFirst\n    },\n    e: {\n      c: colLast,\n      r: rwLast\n    }\n  };\n}\n/* [MS-XLS] 2.5.207 */\n\n\nvar parse_Ref = parse_RefU;\n/* [MS-XLS] 2.5.143 */\n\nfunction parse_FtCmo(blob\n/*::, length*/\n) {\n  blob.l += 4;\n  var ot = blob.read_shift(2);\n  var id = blob.read_shift(2);\n  var flags = blob.read_shift(2);\n  blob.l += 12;\n  return [id, ot, flags];\n}\n/* [MS-XLS] 2.5.149 */\n\n\nfunction parse_FtNts(blob) {\n  var out = {};\n  blob.l += 4;\n  blob.l += 16; // GUID TODO\n\n  out.fSharedNote = blob.read_shift(2);\n  blob.l += 4;\n  return out;\n}\n/* [MS-XLS] 2.5.142 */\n\n\nfunction parse_FtCf(blob) {\n  var out = {};\n  blob.l += 4;\n  blob.cf = blob.read_shift(2);\n  return out;\n}\n/* [MS-XLS] 2.5.140 - 2.5.154 and friends */\n\n\nfunction parse_FtSkip(blob) {\n  blob.l += 2;\n  blob.l += blob.read_shift(2);\n}\n\nvar FtTab = {\n  /*::[*/\n  0x00\n  /*::]*/\n  : parse_FtSkip,\n\n  /* FtEnd */\n\n  /*::[*/\n  0x04\n  /*::]*/\n  : parse_FtSkip,\n\n  /* FtMacro */\n\n  /*::[*/\n  0x05\n  /*::]*/\n  : parse_FtSkip,\n\n  /* FtButton */\n\n  /*::[*/\n  0x06\n  /*::]*/\n  : parse_FtSkip,\n\n  /* FtGmo */\n\n  /*::[*/\n  0x07\n  /*::]*/\n  : parse_FtCf,\n\n  /* FtCf */\n\n  /*::[*/\n  0x08\n  /*::]*/\n  : parse_FtSkip,\n\n  /* FtPioGrbit */\n\n  /*::[*/\n  0x09\n  /*::]*/\n  : parse_FtSkip,\n\n  /* FtPictFmla */\n\n  /*::[*/\n  0x0A\n  /*::]*/\n  : parse_FtSkip,\n\n  /* FtCbls */\n\n  /*::[*/\n  0x0B\n  /*::]*/\n  : parse_FtSkip,\n\n  /* FtRbo */\n\n  /*::[*/\n  0x0C\n  /*::]*/\n  : parse_FtSkip,\n\n  /* FtSbs */\n\n  /*::[*/\n  0x0D\n  /*::]*/\n  : parse_FtNts,\n\n  /* FtNts */\n\n  /*::[*/\n  0x0E\n  /*::]*/\n  : parse_FtSkip,\n\n  /* FtSbsFmla */\n\n  /*::[*/\n  0x0F\n  /*::]*/\n  : parse_FtSkip,\n\n  /* FtGboData */\n\n  /*::[*/\n  0x10\n  /*::]*/\n  : parse_FtSkip,\n\n  /* FtEdoData */\n\n  /*::[*/\n  0x11\n  /*::]*/\n  : parse_FtSkip,\n\n  /* FtRboData */\n\n  /*::[*/\n  0x12\n  /*::]*/\n  : parse_FtSkip,\n\n  /* FtCblsData */\n\n  /*::[*/\n  0x13\n  /*::]*/\n  : parse_FtSkip,\n\n  /* FtLbsData */\n\n  /*::[*/\n  0x14\n  /*::]*/\n  : parse_FtSkip,\n\n  /* FtCblsFmla */\n\n  /*::[*/\n  0x15\n  /*::]*/\n  : parse_FtCmo\n};\n\nfunction parse_FtArray(blob, length\n/*::, ot*/\n) {\n  var tgt = blob.l + length;\n  var fts = [];\n\n  while (blob.l < tgt) {\n    var ft = blob.read_shift(2);\n    blob.l -= 2;\n\n    try {\n      fts.push(FtTab[ft](blob, tgt - blob.l));\n    } catch (e) {\n      blob.l = tgt;\n      return fts;\n    }\n  }\n\n  if (blob.l != tgt) blob.l = tgt; //throw new Error(\"bad Object Ft-sequence\");\n\n  return fts;\n}\n/* --- 2.4 Records --- */\n\n/* [MS-XLS] 2.4.21 */\n\n\nfunction parse_BOF(blob, length) {\n  var o = {\n    BIFFVer: 0,\n    dt: 0\n  };\n  o.BIFFVer = blob.read_shift(2);\n  length -= 2;\n\n  if (length >= 2) {\n    o.dt = blob.read_shift(2);\n    blob.l -= 2;\n  }\n\n  switch (o.BIFFVer) {\n    case 0x0600:\n    /* BIFF8 */\n\n    case 0x0500:\n    /* BIFF5 */\n\n    case 0x0400:\n    /* BIFF4 */\n\n    case 0x0300:\n    /* BIFF3 */\n\n    case 0x0200:\n    /* BIFF2 */\n\n    case 0x0002:\n    case 0x0007:\n      /* BIFF2 */\n      break;\n\n    default:\n      if (length > 6) throw new Error(\"Unexpected BIFF Ver \" + o.BIFFVer);\n  }\n\n  blob.read_shift(length);\n  return o;\n}\n\nfunction write_BOF(wb\n/*:Workbook*/\n, t\n/*:number*/\n, o) {\n  var h = 0x0600,\n      w = 16;\n\n  switch (o.bookType) {\n    case 'biff8':\n      break;\n\n    case 'biff5':\n      h = 0x0500;\n      w = 8;\n      break;\n\n    case 'biff4':\n      h = 0x0004;\n      w = 6;\n      break;\n\n    case 'biff3':\n      h = 0x0003;\n      w = 6;\n      break;\n\n    case 'biff2':\n      h = 0x0002;\n      w = 4;\n      break;\n\n    case 'xla':\n      break;\n\n    default:\n      throw new Error(\"unsupported BIFF version\");\n  }\n\n  var out = new_buf(w);\n  out.write_shift(2, h);\n  out.write_shift(2, t);\n  if (w > 4) out.write_shift(2, 0x7262);\n  if (w > 6) out.write_shift(2, 0x07CD);\n\n  if (w > 8) {\n    out.write_shift(2, 0xC009);\n    out.write_shift(2, 0x0001);\n    out.write_shift(2, 0x0706);\n    out.write_shift(2, 0x0000);\n  }\n\n  return out;\n}\n/* [MS-XLS] 2.4.146 */\n\n\nfunction parse_InterfaceHdr(blob, length) {\n  if (length === 0) return 0x04b0;\n\n  if (blob.read_shift(2) !== 0x04b0) {\n    /* empty */\n  }\n\n  return 0x04b0;\n}\n/* [MS-XLS] 2.4.349 */\n\n\nfunction parse_WriteAccess(blob, length, opts) {\n  if (opts.enc) {\n    blob.l += length;\n    return \"\";\n  }\n\n  var l = blob.l; // TODO: make sure XLUnicodeString doesnt overrun\n\n  var UserName = parse_XLUnicodeString2(blob, 0, opts);\n  blob.read_shift(length + l - blob.l);\n  return UserName;\n}\n\nfunction write_WriteAccess(s\n/*:string*/\n, opts) {\n  var b8 = !opts || opts.biff == 8;\n  var o = new_buf(b8 ? 112 : 54);\n  o.write_shift(opts.biff == 8 ? 2 : 1, 7);\n  if (b8) o.write_shift(1, 0);\n  o.write_shift(4, 0x33336853);\n  o.write_shift(4, 0x00534A74 | (b8 ? 0 : 0x20000000));\n\n  while (o.l < o.length) {\n    o.write_shift(1, b8 ? 0 : 32);\n  }\n\n  return o;\n}\n/* [MS-XLS] 2.4.351 */\n\n\nfunction parse_WsBool(blob, length, opts) {\n  var flags = opts && opts.biff == 8 || length == 2 ? blob.read_shift(2) : (blob.l += length, 0);\n  return {\n    fDialog: flags & 0x10,\n    fBelow: flags & 0x40,\n    fRight: flags & 0x80\n  };\n}\n/* [MS-XLS] 2.4.28 */\n\n\nfunction parse_BoundSheet8(blob, length, opts) {\n  var pos = blob.read_shift(4);\n  var hidden = blob.read_shift(1) & 0x03;\n  var dt = blob.read_shift(1);\n\n  switch (dt) {\n    case 0:\n      dt = 'Worksheet';\n      break;\n\n    case 1:\n      dt = 'Macrosheet';\n      break;\n\n    case 2:\n      dt = 'Chartsheet';\n      break;\n\n    case 6:\n      dt = 'VBAModule';\n      break;\n  }\n\n  var name = parse_ShortXLUnicodeString(blob, 0, opts);\n  if (name.length === 0) name = \"Sheet1\";\n  return {\n    pos: pos,\n    hs: hidden,\n    dt: dt,\n    name: name\n  };\n}\n\nfunction write_BoundSheet8(data, opts) {\n  var w = !opts || opts.biff >= 8 ? 2 : 1;\n  var o = new_buf(8 + w * data.name.length);\n  o.write_shift(4, data.pos);\n  o.write_shift(1, data.hs || 0);\n  o.write_shift(1, data.dt);\n  o.write_shift(1, data.name.length);\n  if (opts.biff >= 8) o.write_shift(1, 1);\n  o.write_shift(w * data.name.length, data.name, opts.biff < 8 ? 'sbcs' : 'utf16le');\n  var out = o.slice(0, o.l);\n  out.l = o.l;\n  return out;\n}\n/* [MS-XLS] 2.4.265 TODO */\n\n\nfunction parse_SST(blob, length)\n/*:SST*/\n{\n  var end = blob.l + length;\n  var cnt = blob.read_shift(4);\n  var ucnt = blob.read_shift(4);\n  var strs\n  /*:SST*/\n  = []\n  /*:any*/\n  ;\n\n  for (var i = 0; i != ucnt && blob.l < end; ++i) {\n    strs.push(parse_XLUnicodeRichExtendedString(blob));\n  }\n\n  strs.Count = cnt;\n  strs.Unique = ucnt;\n  return strs;\n}\n\nfunction write_SST(sst, opts) {\n  var header = new_buf(8);\n  header.write_shift(4, sst.Count);\n  header.write_shift(4, sst.Unique);\n  var strs = [];\n\n  for (var j = 0; j < sst.length; ++j) {\n    strs[j] = write_XLUnicodeRichExtendedString(sst[j], opts);\n  }\n\n  var o = bconcat([header].concat(strs));\n  /*::(*/\n\n  o\n  /*:: :any)*/\n  .parts = [header.length].concat(strs.map(function (str) {\n    return str.length;\n  }));\n  return o;\n}\n/* [MS-XLS] 2.4.107 */\n\n\nfunction parse_ExtSST(blob, length) {\n  var extsst = {};\n  extsst.dsst = blob.read_shift(2);\n  blob.l += length - 2;\n  return extsst;\n}\n/* [MS-XLS] 2.4.221 TODO: check BIFF2-4 */\n\n\nfunction parse_Row(blob) {\n  var z = {}\n  /*:any*/\n  ;\n  z.r = blob.read_shift(2);\n  z.c = blob.read_shift(2);\n  z.cnt = blob.read_shift(2) - z.c;\n  var miyRw = blob.read_shift(2);\n  blob.l += 4; // reserved(2), unused(2)\n\n  var flags = blob.read_shift(1); // various flags\n\n  blob.l += 3; // reserved(8), ixfe(12), flags(4)\n\n  if (flags & 0x07) z.level = flags & 0x07; // collapsed: flags & 0x10\n\n  if (flags & 0x20) z.hidden = true;\n  if (flags & 0x40) z.hpt = miyRw / 20;\n  return z;\n}\n/* [MS-XLS] 2.4.125 */\n\n\nfunction parse_ForceFullCalculation(blob) {\n  var header = parse_frtHeader(blob);\n  if (header.type != 0x08A3) throw new Error(\"Invalid Future Record \" + header.type);\n  var fullcalc = blob.read_shift(4);\n  return fullcalc !== 0x0;\n}\n/* [MS-XLS] 2.4.215 rt */\n\n\nfunction parse_RecalcId(blob) {\n  blob.read_shift(2);\n  return blob.read_shift(4);\n}\n/* [MS-XLS] 2.4.87 */\n\n\nfunction parse_DefaultRowHeight(blob, length, opts) {\n  var f = 0;\n\n  if (!(opts && opts.biff == 2)) {\n    f = blob.read_shift(2);\n  }\n\n  var miyRw = blob.read_shift(2);\n\n  if (opts && opts.biff == 2) {\n    f = 1 - (miyRw >> 15);\n    miyRw &= 0x7fff;\n  }\n\n  var fl = {\n    Unsynced: f & 1,\n    DyZero: (f & 2) >> 1,\n    ExAsc: (f & 4) >> 2,\n    ExDsc: (f & 8) >> 3\n  };\n  return [fl, miyRw];\n}\n/* [MS-XLS] 2.4.345 TODO */\n\n\nfunction parse_Window1(blob) {\n  var xWn = blob.read_shift(2),\n      yWn = blob.read_shift(2),\n      dxWn = blob.read_shift(2),\n      dyWn = blob.read_shift(2);\n  var flags = blob.read_shift(2),\n      iTabCur = blob.read_shift(2),\n      iTabFirst = blob.read_shift(2);\n  var ctabSel = blob.read_shift(2),\n      wTabRatio = blob.read_shift(2);\n  return {\n    Pos: [xWn, yWn],\n    Dim: [dxWn, dyWn],\n    Flags: flags,\n    CurTab: iTabCur,\n    FirstTab: iTabFirst,\n    Selected: ctabSel,\n    TabRatio: wTabRatio\n  };\n}\n\nfunction\n  /*::opts*/\nwrite_Window1() {\n  var o = new_buf(18);\n  o.write_shift(2, 0);\n  o.write_shift(2, 0);\n  o.write_shift(2, 0x7260);\n  o.write_shift(2, 0x44c0);\n  o.write_shift(2, 0x38);\n  o.write_shift(2, 0);\n  o.write_shift(2, 0);\n  o.write_shift(2, 1);\n  o.write_shift(2, 0x01f4);\n  return o;\n}\n/* [MS-XLS] 2.4.346 TODO */\n\n\nfunction parse_Window2(blob, length, opts) {\n  if (opts && opts.biff >= 2 && opts.biff < 5) return {};\n  var f = blob.read_shift(2);\n  return {\n    RTL: f & 0x40\n  };\n}\n\nfunction write_Window2(view) {\n  var o = new_buf(18),\n      f = 0x6b6;\n  if (view && view.RTL) f |= 0x40;\n  o.write_shift(2, f);\n  o.write_shift(4, 0);\n  o.write_shift(4, 64);\n  o.write_shift(4, 0);\n  o.write_shift(4, 0);\n  return o;\n}\n/* [MS-XLS] 2.4.189 TODO */\n\n\nfunction\n  /*blob, length, opts*/\nparse_Pane() {}\n/* [MS-XLS] 2.4.122 TODO */\n\n\nfunction parse_Font(blob, length, opts) {\n  var o\n  /*:any*/\n  = {\n    dyHeight: blob.read_shift(2),\n    fl: blob.read_shift(2)\n  };\n\n  switch (opts && opts.biff || 8) {\n    case 2:\n      break;\n\n    case 3:\n    case 4:\n      blob.l += 2;\n      break;\n\n    default:\n      blob.l += 10;\n      break;\n  }\n\n  o.name = parse_ShortXLUnicodeString(blob, 0, opts);\n  return o;\n}\n\nfunction write_Font(data, opts) {\n  var name = data.name || \"Arial\";\n  var b5 = opts && opts.biff == 5,\n      w = b5 ? 15 + name.length : 16 + 2 * name.length;\n  var o = new_buf(w);\n  o.write_shift(2, (data.sz || 12) * 20);\n  o.write_shift(4, 0);\n  o.write_shift(2, 400);\n  o.write_shift(4, 0);\n  o.write_shift(2, 0);\n  o.write_shift(1, name.length);\n  if (!b5) o.write_shift(1, 1);\n  o.write_shift((b5 ? 1 : 2) * name.length, name, b5 ? \"sbcs\" : \"utf16le\");\n  return o;\n}\n/* [MS-XLS] 2.4.149 */\n\n\nfunction parse_LabelSst(blob) {\n  var cell = parse_XLSCell(blob);\n  cell.isst = blob.read_shift(4);\n  return cell;\n}\n\nfunction write_LabelSst(R\n/*:number*/\n, C\n/*:number*/\n, v\n/*:number*/\n, os\n/*:number*/\n\n/*::, opts*/\n) {\n  var o = new_buf(10);\n  write_XLSCell(R, C, os, o);\n  o.write_shift(4, v);\n  return o;\n}\n/* [MS-XLS] 2.4.148 */\n\n\nfunction parse_Label(blob, length, opts) {\n  if (opts.biffguess && opts.biff == 2) opts.biff = 5;\n  var target = blob.l + length;\n  var cell = parse_XLSCell(blob, 6);\n  if (opts.biff == 2) blob.l++;\n  var str = parse_XLUnicodeString(blob, target - blob.l, opts);\n  cell.val = str;\n  return cell;\n}\n\nfunction write_Label(R\n/*:number*/\n, C\n/*:number*/\n, v\n/*:string*/\n, os\n/*:number*/\n, opts) {\n  var b8 = !opts || opts.biff == 8;\n  var o = new_buf(6 + 2 + +b8 + (1 + b8) * v.length);\n  write_XLSCell(R, C, os, o);\n  o.write_shift(2, v.length);\n  if (b8) o.write_shift(1, 1);\n  o.write_shift((1 + b8) * v.length, v, b8 ? 'utf16le' : 'sbcs');\n  return o;\n}\n/* [MS-XLS] 2.4.126 Number Formats */\n\n\nfunction parse_Format(blob, length, opts) {\n  var numFmtId = blob.read_shift(2);\n  var fmtstr = parse_XLUnicodeString2(blob, 0, opts);\n  return [numFmtId, fmtstr];\n}\n\nfunction write_Format(i\n/*:number*/\n, f\n/*:string*/\n, opts, o) {\n  var b5 = opts && opts.biff == 5;\n  if (!o) o = new_buf(b5 ? 3 + f.length : 5 + 2 * f.length);\n  o.write_shift(2, i);\n  o.write_shift(b5 ? 1 : 2, f.length);\n  if (!b5) o.write_shift(1, 1);\n  o.write_shift((b5 ? 1 : 2) * f.length, f, b5 ? 'sbcs' : 'utf16le');\n  var out = o.length > o.l ? o.slice(0, o.l) : o;\n  if (out.l == null) out.l = out.length;\n  return out;\n}\n\nvar parse_BIFF2Format = parse_XLUnicodeString2;\n/* [MS-XLS] 2.4.90 */\n\nfunction parse_Dimensions(blob, length, opts) {\n  var end = blob.l + length;\n  var w = opts.biff == 8 || !opts.biff ? 4 : 2;\n  var r = blob.read_shift(w),\n      R = blob.read_shift(w);\n  var c = blob.read_shift(2),\n      C = blob.read_shift(2);\n  blob.l = end;\n  return {\n    s: {\n      r: r,\n      c: c\n    },\n    e: {\n      r: R,\n      c: C\n    }\n  };\n}\n\nfunction write_Dimensions(range, opts) {\n  var w = opts.biff == 8 || !opts.biff ? 4 : 2;\n  var o = new_buf(2 * w + 6);\n  o.write_shift(w, range.s.r);\n  o.write_shift(w, range.e.r + 1);\n  o.write_shift(2, range.s.c);\n  o.write_shift(2, range.e.c + 1);\n  o.write_shift(2, 0);\n  return o;\n}\n/* [MS-XLS] 2.4.220 */\n\n\nfunction parse_RK(blob) {\n  var rw = blob.read_shift(2),\n      col = blob.read_shift(2);\n  var rkrec = parse_RkRec(blob);\n  return {\n    r: rw,\n    c: col,\n    ixfe: rkrec[0],\n    rknum: rkrec[1]\n  };\n}\n/* [MS-XLS] 2.4.175 */\n\n\nfunction parse_MulRk(blob, length) {\n  var target = blob.l + length - 2;\n  var rw = blob.read_shift(2),\n      col = blob.read_shift(2);\n  var rkrecs = [];\n\n  while (blob.l < target) {\n    rkrecs.push(parse_RkRec(blob));\n  }\n\n  if (blob.l !== target) throw new Error(\"MulRK read error\");\n  var lastcol = blob.read_shift(2);\n  if (rkrecs.length != lastcol - col + 1) throw new Error(\"MulRK length mismatch\");\n  return {\n    r: rw,\n    c: col,\n    C: lastcol,\n    rkrec: rkrecs\n  };\n}\n/* [MS-XLS] 2.4.174 */\n\n\nfunction parse_MulBlank(blob, length) {\n  var target = blob.l + length - 2;\n  var rw = blob.read_shift(2),\n      col = blob.read_shift(2);\n  var ixfes = [];\n\n  while (blob.l < target) {\n    ixfes.push(blob.read_shift(2));\n  }\n\n  if (blob.l !== target) throw new Error(\"MulBlank read error\");\n  var lastcol = blob.read_shift(2);\n  if (ixfes.length != lastcol - col + 1) throw new Error(\"MulBlank length mismatch\");\n  return {\n    r: rw,\n    c: col,\n    C: lastcol,\n    ixfe: ixfes\n  };\n}\n/* [MS-XLS] 2.5.20 2.5.249 TODO: interpret values here */\n\n\nfunction parse_CellStyleXF(blob, length, style, opts) {\n  var o = {};\n  var a = blob.read_shift(4),\n      b = blob.read_shift(4);\n  var c = blob.read_shift(4),\n      d = blob.read_shift(2);\n  o.patternType = XLSFillPattern[c >> 26];\n  if (!opts.cellStyles) return o;\n  o.alc = a & 0x07;\n  o.fWrap = a >> 3 & 0x01;\n  o.alcV = a >> 4 & 0x07;\n  o.fJustLast = a >> 7 & 0x01;\n  o.trot = a >> 8 & 0xFF;\n  o.cIndent = a >> 16 & 0x0F;\n  o.fShrinkToFit = a >> 20 & 0x01;\n  o.iReadOrder = a >> 22 & 0x02;\n  o.fAtrNum = a >> 26 & 0x01;\n  o.fAtrFnt = a >> 27 & 0x01;\n  o.fAtrAlc = a >> 28 & 0x01;\n  o.fAtrBdr = a >> 29 & 0x01;\n  o.fAtrPat = a >> 30 & 0x01;\n  o.fAtrProt = a >> 31 & 0x01;\n  o.dgLeft = b & 0x0F;\n  o.dgRight = b >> 4 & 0x0F;\n  o.dgTop = b >> 8 & 0x0F;\n  o.dgBottom = b >> 12 & 0x0F;\n  o.icvLeft = b >> 16 & 0x7F;\n  o.icvRight = b >> 23 & 0x7F;\n  o.grbitDiag = b >> 30 & 0x03;\n  o.icvTop = c & 0x7F;\n  o.icvBottom = c >> 7 & 0x7F;\n  o.icvDiag = c >> 14 & 0x7F;\n  o.dgDiag = c >> 21 & 0x0F;\n  o.icvFore = d & 0x7F;\n  o.icvBack = d >> 7 & 0x7F;\n  o.fsxButton = d >> 14 & 0x01;\n  return o;\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 */\n\n\nfunction parse_XF(blob, length, opts) {\n  var o = {};\n  o.ifnt = blob.read_shift(2);\n  o.numFmtId = blob.read_shift(2);\n  o.flags = blob.read_shift(2);\n  o.fStyle = o.flags >> 2 & 0x01;\n  length -= 6;\n  o.data = parse_CellStyleXF(blob, length, o.fStyle, opts);\n  return o;\n}\n\nfunction write_XF(data, ixfeP, opts, o) {\n  var b5 = opts && opts.biff == 5;\n  if (!o) o = new_buf(b5 ? 16 : 20);\n  o.write_shift(2, 0);\n\n  if (data.style) {\n    o.write_shift(2, data.numFmtId || 0);\n    o.write_shift(2, 0xFFF4);\n  } else {\n    o.write_shift(2, data.numFmtId || 0);\n    o.write_shift(2, ixfeP << 4);\n  }\n\n  var f = 0;\n  if (data.numFmtId > 0 && b5) f |= 0x0400;\n  o.write_shift(4, f);\n  o.write_shift(4, 0);\n  if (!b5) o.write_shift(4, 0);\n  o.write_shift(2, 0);\n  return o;\n}\n/* [MS-XLS] 2.4.134 */\n\n\nfunction parse_Guts(blob) {\n  blob.l += 4;\n  var out = [blob.read_shift(2), blob.read_shift(2)];\n  if (out[0] !== 0) out[0]--;\n  if (out[1] !== 0) out[1]--;\n  if (out[0] > 7 || out[1] > 7) throw new Error(\"Bad Gutters: \" + out.join(\"|\"));\n  return out;\n}\n\nfunction write_Guts(guts\n/*:Array<number>*/\n) {\n  var o = new_buf(8);\n  o.write_shift(4, 0);\n  o.write_shift(2, guts[0] ? guts[0] + 1 : 0);\n  o.write_shift(2, guts[1] ? guts[1] + 1 : 0);\n  return o;\n}\n/* [MS-XLS] 2.4.24 */\n\n\nfunction parse_BoolErr(blob, length, opts) {\n  var cell = parse_XLSCell(blob, 6);\n  if (opts.biff == 2 || length == 9) ++blob.l;\n  var val = parse_Bes(blob, 2);\n  cell.val = val;\n  cell.t = val === true || val === false ? 'b' : 'e';\n  return cell;\n}\n\nfunction write_BoolErr(R\n/*:number*/\n, C\n/*:number*/\n, v, os\n/*:number*/\n, opts, t\n/*:string*/\n) {\n  var o = new_buf(8);\n  write_XLSCell(R, C, os, o);\n  write_Bes(v, t, o);\n  return o;\n}\n/* [MS-XLS] 2.4.180 Number */\n\n\nfunction parse_Number(blob, length, opts) {\n  if (opts.biffguess && opts.biff == 2) opts.biff = 5;\n  var cell = parse_XLSCell(blob, 6);\n  var xnum = parse_Xnum(blob, 8);\n  cell.val = xnum;\n  return cell;\n}\n\nfunction write_Number(R\n/*:number*/\n, C\n/*:number*/\n, v, os\n/*:: :number, opts*/\n) {\n  var o = new_buf(14);\n  write_XLSCell(R, C, os, o);\n  write_Xnum(v, o);\n  return o;\n}\n\nvar parse_XLHeaderFooter = parse_OptXLUnicodeString; // TODO: parse 2.4.136\n\n/* [MS-XLS] 2.4.271 */\n\nfunction parse_SupBook(blob, length, opts) {\n  var end = blob.l + length;\n  var ctab = blob.read_shift(2);\n  var cch = blob.read_shift(2);\n  opts.sbcch = cch;\n  if (cch == 0x0401 || cch == 0x3A01) return [cch, ctab];\n  if (cch < 0x01 || cch > 0xff) throw new Error(\"Unexpected SupBook type: \" + cch);\n  var virtPath = parse_XLUnicodeStringNoCch(blob, cch);\n  /* TODO: 2.5.277 Virtual Path */\n\n  var rgst = [];\n\n  while (end > blob.l) {\n    rgst.push(parse_XLUnicodeString(blob));\n  }\n\n  return [cch, ctab, virtPath, rgst];\n}\n/* [MS-XLS] 2.4.105 TODO */\n\n\nfunction parse_ExternName(blob, length, opts) {\n  var flags = blob.read_shift(2);\n  var body;\n  var o = {\n    fBuiltIn: flags & 0x01,\n    fWantAdvise: flags >>> 1 & 0x01,\n    fWantPict: flags >>> 2 & 0x01,\n    fOle: flags >>> 3 & 0x01,\n    fOleLink: flags >>> 4 & 0x01,\n    cf: flags >>> 5 & 0x3FF,\n    fIcon: flags >>> 15 & 0x01\n  }\n  /*:any*/\n  ;\n  if (opts.sbcch === 0x3A01) body = parse_AddinUdf(blob, length - 2, opts); //else throw new Error(\"unsupported SupBook cch: \" + opts.sbcch);\n\n  o.body = body || blob.read_shift(length - 2);\n  if (typeof body === \"string\") o.Name = body;\n  return o;\n}\n/* [MS-XLS] 2.4.150 TODO */\n\n\nvar XLSLblBuiltIn = [\"_xlnm.Consolidate_Area\", \"_xlnm.Auto_Open\", \"_xlnm.Auto_Close\", \"_xlnm.Extract\", \"_xlnm.Database\", \"_xlnm.Criteria\", \"_xlnm.Print_Area\", \"_xlnm.Print_Titles\", \"_xlnm.Recorder\", \"_xlnm.Data_Form\", \"_xlnm.Auto_Activate\", \"_xlnm.Auto_Deactivate\", \"_xlnm.Sheet_Title\", \"_xlnm._FilterDatabase\"];\n\nfunction parse_Lbl(blob, length, opts) {\n  var target = blob.l + length;\n  var flags = blob.read_shift(2);\n  var chKey = blob.read_shift(1);\n  var cch = blob.read_shift(1);\n  var cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n  var itab = 0;\n\n  if (!opts || opts.biff >= 5) {\n    if (opts.biff != 5) blob.l += 2;\n    itab = blob.read_shift(2);\n    if (opts.biff == 5) blob.l += 2;\n    blob.l += 4;\n  }\n\n  var name = parse_XLUnicodeStringNoCch(blob, cch, opts);\n  if (flags & 0x20) name = XLSLblBuiltIn[name.charCodeAt(0)];\n  var npflen = target - blob.l;\n  if (opts && opts.biff == 2) --npflen;\n  /*jshint -W018 */\n\n  var rgce = target == blob.l || cce === 0 || !(npflen > 0) ? [] : parse_NameParsedFormula(blob, npflen, opts, cce);\n  /*jshint +W018 */\n\n  return {\n    chKey: chKey,\n    Name: name,\n    itab: itab,\n    rgce: rgce\n  };\n}\n/* [MS-XLS] 2.4.106 TODO: verify filename encoding */\n\n\nfunction parse_ExternSheet(blob, length, opts) {\n  if (opts.biff < 8) return parse_BIFF5ExternSheet(blob, length, opts);\n  var o = [],\n      target = blob.l + length,\n      len = blob.read_shift(opts.biff > 8 ? 4 : 2);\n\n  while (len-- !== 0) {\n    o.push(parse_XTI(blob, opts.biff > 8 ? 12 : 6, opts));\n  } // [iSupBook, itabFirst, itabLast];\n\n\n  if (blob.l != target) throw new Error(\"Bad ExternSheet: \" + blob.l + \" != \" + target);\n  return o;\n}\n\nfunction parse_BIFF5ExternSheet(blob, length, opts) {\n  if (blob[blob.l + 1] == 0x03) blob[blob.l]++;\n  var o = parse_ShortXLUnicodeString(blob, length, opts);\n  return o.charCodeAt(0) == 0x03 ? o.slice(1) : o;\n}\n/* [MS-XLS] 2.4.176 TODO: check older biff */\n\n\nfunction parse_NameCmt(blob, length, opts) {\n  if (opts.biff < 8) {\n    blob.l += length;\n    return;\n  }\n\n  var cchName = blob.read_shift(2);\n  var cchComment = blob.read_shift(2);\n  var name = parse_XLUnicodeStringNoCch(blob, cchName, opts);\n  var comment = parse_XLUnicodeStringNoCch(blob, cchComment, opts);\n  return [name, comment];\n}\n/* [MS-XLS] 2.4.260 */\n\n\nfunction parse_ShrFmla(blob, length, opts) {\n  var ref = parse_RefU(blob, 6);\n  blob.l++;\n  var cUse = blob.read_shift(1);\n  length -= 8;\n  return [parse_SharedParsedFormula(blob, length, opts), cUse, ref];\n}\n/* [MS-XLS] 2.4.4 TODO */\n\n\nfunction parse_Array(blob, length, opts) {\n  var ref = parse_Ref(blob, 6);\n  /* TODO: fAlwaysCalc */\n\n  switch (opts.biff) {\n    case 2:\n      blob.l++;\n      length -= 7;\n      break;\n\n    case 3:\n    case 4:\n      blob.l += 2;\n      length -= 8;\n      break;\n\n    default:\n      blob.l += 6;\n      length -= 12;\n  }\n\n  return [ref, parse_ArrayParsedFormula(blob, length, opts, ref)];\n}\n/* [MS-XLS] 2.4.173 */\n\n\nfunction parse_MTRSettings(blob) {\n  var fMTREnabled = blob.read_shift(4) !== 0x00;\n  var fUserSetThreadCount = blob.read_shift(4) !== 0x00;\n  var cUserThreadCount = blob.read_shift(4);\n  return [fMTREnabled, fUserSetThreadCount, cUserThreadCount];\n}\n/* [MS-XLS] 2.5.186 TODO: BIFF5 */\n\n\nfunction parse_NoteSh(blob, length, opts) {\n  if (opts.biff < 8) return;\n  var row = blob.read_shift(2),\n      col = blob.read_shift(2);\n  var flags = blob.read_shift(2),\n      idObj = blob.read_shift(2);\n  var stAuthor = parse_XLUnicodeString2(blob, 0, opts);\n  if (opts.biff < 8) blob.read_shift(1);\n  return [{\n    r: row,\n    c: col\n  }, stAuthor, idObj, flags];\n}\n/* [MS-XLS] 2.4.179 */\n\n\nfunction parse_Note(blob, length, opts) {\n  /* TODO: Support revisions */\n  return parse_NoteSh(blob, length, opts);\n}\n/* [MS-XLS] 2.4.168 */\n\n\nfunction parse_MergeCells(blob, length)\n/*:Array<Range>*/\n{\n  var merges\n  /*:Array<Range>*/\n  = [];\n  var cmcs = blob.read_shift(2);\n\n  while (cmcs--) {\n    merges.push(parse_Ref8U(blob, length));\n  }\n\n  return merges;\n}\n\nfunction write_MergeCells(merges\n/*:Array<Range>*/\n) {\n  var o = new_buf(2 + merges.length * 8);\n  o.write_shift(2, merges.length);\n\n  for (var i = 0; i < merges.length; ++i) {\n    write_Ref8U(merges[i], o);\n  }\n\n  return o;\n}\n/* [MS-XLS] 2.4.181 TODO: parse all the things! */\n\n\nfunction parse_Obj(blob, length, opts) {\n  if (opts && opts.biff < 8) return parse_BIFF5Obj(blob, length, opts);\n  var cmo = parse_FtCmo(blob, 22); // id, ot, flags\n\n  var fts = parse_FtArray(blob, length - 22, cmo[1]);\n  return {\n    cmo: cmo,\n    ft: fts\n  };\n}\n/* from older spec */\n\n\nvar parse_BIFF5OT = {\n  0x08: function _(blob, length) {\n    var tgt = blob.l + length;\n    blob.l += 10; // todo\n\n    var cf = blob.read_shift(2);\n    blob.l += 4;\n    blob.l += 2; //var cbPictFmla = blob.read_shift(2);\n\n    blob.l += 2;\n    blob.l += 2; //var grbit = blob.read_shift(2);\n\n    blob.l += 4;\n    var cchName = blob.read_shift(1);\n    blob.l += cchName; // TODO: stName\n\n    blob.l = tgt; // TODO: fmla\n\n    return {\n      fmt: cf\n    };\n  }\n};\n\nfunction parse_BIFF5Obj(blob, length, opts) {\n  blob.l += 4; //var cnt = blob.read_shift(4);\n\n  var ot = blob.read_shift(2);\n  var id = blob.read_shift(2);\n  var grbit = blob.read_shift(2);\n  blob.l += 2; //var colL = blob.read_shift(2);\n\n  blob.l += 2; //var dxL = blob.read_shift(2);\n\n  blob.l += 2; //var rwT = blob.read_shift(2);\n\n  blob.l += 2; //var dyT = blob.read_shift(2);\n\n  blob.l += 2; //var colR = blob.read_shift(2);\n\n  blob.l += 2; //var dxR = blob.read_shift(2);\n\n  blob.l += 2; //var rwB = blob.read_shift(2);\n\n  blob.l += 2; //var dyB = blob.read_shift(2);\n\n  blob.l += 2; //var cbMacro = blob.read_shift(2);\n\n  blob.l += 6;\n  length -= 36;\n  var fts = [];\n  fts.push((parse_BIFF5OT[ot] || parsenoop)(blob, length, opts));\n  return {\n    cmo: [id, ot, grbit],\n    ft: fts\n  };\n}\n/* [MS-XLS] 2.4.329 TODO: parse properly */\n\n\nfunction parse_TxO(blob, length, opts) {\n  var s = blob.l;\n  var texts = \"\";\n\n  try {\n    blob.l += 4;\n    var ot = (opts.lastobj || {\n      cmo: [0, 0]\n    }).cmo[1];\n    var controlInfo; // eslint-disable-line no-unused-vars\n\n    if ([0, 5, 7, 11, 12, 14].indexOf(ot) == -1) blob.l += 6;else controlInfo = parse_ControlInfo(blob, 6, opts); // eslint-disable-line no-unused-vars\n\n    var cchText = blob.read_shift(2);\n    /*var cbRuns = */\n\n    blob.read_shift(2);\n    /*var ifntEmpty = */\n\n    parseuint16(blob, 2);\n    var len = blob.read_shift(2);\n    blob.l += len; //var fmla = parse_ObjFmla(blob, s + length - blob.l);\n\n    for (var i = 1; i < blob.lens.length - 1; ++i) {\n      if (blob.l - s != blob.lens[i]) throw new Error(\"TxO: bad continue record\");\n      var hdr = blob[blob.l];\n      var t = parse_XLUnicodeStringNoCch(blob, blob.lens[i + 1] - blob.lens[i] - 1);\n      texts += t;\n      if (texts.length >= (hdr ? cchText : 2 * cchText)) break;\n    }\n\n    if (texts.length !== cchText && texts.length !== cchText * 2) {\n      throw new Error(\"cchText: \" + cchText + \" != \" + texts.length);\n    }\n\n    blob.l = s + length;\n    /* [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\n    return {\n      t: texts\n    };\n  } catch (e) {\n    blob.l = s + length;\n    return {\n      t: texts\n    };\n  }\n}\n/* [MS-XLS] 2.4.140 */\n\n\nfunction parse_HLink(blob, length) {\n  var ref = parse_Ref8U(blob, 8);\n  blob.l += 16;\n  /* CLSID */\n\n  var hlink = parse_Hyperlink(blob, length - 24);\n  return [ref, hlink];\n}\n\nfunction write_HLink(hl) {\n  var O = new_buf(24);\n  var ref = decode_cell(hl[0]);\n  O.write_shift(2, ref.r);\n  O.write_shift(2, ref.r);\n  O.write_shift(2, ref.c);\n  O.write_shift(2, ref.c);\n  var clsid = \"d0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b\".split(\" \");\n\n  for (var i = 0; i < 16; ++i) {\n    O.write_shift(1, parseInt(clsid[i], 16));\n  }\n\n  return bconcat([O, write_Hyperlink(hl[1])]);\n}\n/* [MS-XLS] 2.4.141 */\n\n\nfunction parse_HLinkTooltip(blob, length) {\n  blob.read_shift(2);\n  var ref = parse_Ref8U(blob, 8);\n  var wzTooltip = blob.read_shift((length - 10) / 2, 'dbcs-cont');\n  wzTooltip = wzTooltip.replace(chr0, \"\");\n  return [ref, wzTooltip];\n}\n\nfunction write_HLinkTooltip(hl) {\n  var TT = hl[1].Tooltip;\n  var O = new_buf(10 + 2 * (TT.length + 1));\n  O.write_shift(2, 0x0800);\n  var ref = decode_cell(hl[0]);\n  O.write_shift(2, ref.r);\n  O.write_shift(2, ref.r);\n  O.write_shift(2, ref.c);\n  O.write_shift(2, ref.c);\n\n  for (var i = 0; i < TT.length; ++i) {\n    O.write_shift(2, TT.charCodeAt(i));\n  }\n\n  O.write_shift(2, 0);\n  return O;\n}\n/* [MS-XLS] 2.4.63 */\n\n\nfunction parse_Country(blob)\n/*:[string|number, string|number]*/\n{\n  var o = [0, 0],\n      d;\n  d = blob.read_shift(2);\n  o[0] = CountryEnum[d] || d;\n  d = blob.read_shift(2);\n  o[1] = CountryEnum[d] || d;\n  return o;\n}\n\nfunction write_Country(o) {\n  if (!o) o = new_buf(4);\n  o.write_shift(2, 0x01);\n  o.write_shift(2, 0x01);\n  return o;\n}\n/* [MS-XLS] 2.4.50 ClrtClient */\n\n\nfunction parse_ClrtClient(blob) {\n  var ccv = blob.read_shift(2);\n  var o = [];\n\n  while (ccv-- > 0) {\n    o.push(parse_LongRGB(blob, 8));\n  }\n\n  return o;\n}\n/* [MS-XLS] 2.4.188 */\n\n\nfunction parse_Palette(blob) {\n  var ccv = blob.read_shift(2);\n  var o = [];\n\n  while (ccv-- > 0) {\n    o.push(parse_LongRGB(blob, 8));\n  }\n\n  return o;\n}\n/* [MS-XLS] 2.4.354 */\n\n\nfunction parse_XFCRC(blob) {\n  blob.l += 2;\n  var o = {\n    cxfs: 0,\n    crc: 0\n  };\n  o.cxfs = blob.read_shift(2);\n  o.crc = blob.read_shift(4);\n  return o;\n}\n/* [MS-XLS] 2.4.53 TODO: parse flags */\n\n/* [MS-XLSB] 2.4.323 TODO: parse flags */\n\n\nfunction parse_ColInfo(blob, length, opts) {\n  if (!opts.cellStyles) return parsenoop(blob, length);\n  var w = opts && opts.biff >= 12 ? 4 : 2;\n  var colFirst = blob.read_shift(w);\n  var colLast = blob.read_shift(w);\n  var coldx = blob.read_shift(w);\n  var ixfe = blob.read_shift(w);\n  var flags = blob.read_shift(2);\n  if (w == 2) blob.l += 2;\n  var o = {\n    s: colFirst,\n    e: colLast,\n    w: coldx,\n    ixfe: ixfe,\n    flags: flags\n  }\n  /*:any*/\n  ;\n  if (opts.biff >= 5 || !opts.biff) o.level = flags >> 8 & 0x7;\n  return o;\n}\n\nfunction write_ColInfo(col, idx) {\n  var o = new_buf(12);\n  o.write_shift(2, idx);\n  o.write_shift(2, idx);\n  o.write_shift(2, col.width * 256);\n  o.write_shift(2, 0);\n  var f = 0;\n  if (col.hidden) f |= 1;\n  o.write_shift(1, f);\n  f = col.level || 0;\n  o.write_shift(1, f);\n  o.write_shift(2, 0);\n  return o;\n}\n/* [MS-XLS] 2.4.257 */\n\n\nfunction parse_Setup(blob, length) {\n  var o = {};\n  if (length < 32) return o;\n  blob.l += 16;\n  o.header = parse_Xnum(blob, 8);\n  o.footer = parse_Xnum(blob, 8);\n  blob.l += 2;\n  return o;\n}\n/* [MS-XLS] 2.4.261 */\n\n\nfunction parse_ShtProps(blob, length, opts) {\n  var def = {\n    area: false\n  };\n\n  if (opts.biff != 5) {\n    blob.l += length;\n    return def;\n  }\n\n  var d = blob.read_shift(1);\n  blob.l += 3;\n  if (d & 0x10) def.area = true;\n  return def;\n}\n/* [MS-XLS] 2.4.241 */\n\n\nfunction write_RRTabId(n\n/*:number*/\n) {\n  var out = new_buf(2 * n);\n\n  for (var i = 0; i < n; ++i) {\n    out.write_shift(2, i + 1);\n  }\n\n  return out;\n}\n\nvar parse_Blank = parse_XLSCell;\n/* [MS-XLS] 2.4.20 Just the cell */\n\nvar parse_Scl = parseuint16a;\n/* [MS-XLS] 2.4.247 num, den */\n\nvar parse_String = parse_XLUnicodeString;\n/* [MS-XLS] 2.4.268 */\n\n/* --- Specific to versions before BIFF8 --- */\n\nfunction parse_ImData(blob) {\n  var cf = blob.read_shift(2);\n  var env = blob.read_shift(2);\n  var lcb = blob.read_shift(4);\n  var o = {\n    fmt: cf,\n    env: env,\n    len: lcb,\n    data: blob.slice(blob.l, blob.l + lcb)\n  };\n  blob.l += lcb;\n  return o;\n}\n/* BIFF2_??? where ??? is the name from [XLS] */\n\n\nfunction parse_BIFF2STR(blob, length, opts) {\n  if (opts.biffguess && opts.biff == 5) opts.biff = 2;\n  var cell = parse_XLSCell(blob, 6);\n  ++blob.l;\n  var str = parse_XLUnicodeString2(blob, length - 7, opts);\n  cell.t = 'str';\n  cell.val = str;\n  return cell;\n}\n\nfunction parse_BIFF2NUM(blob\n/*::, length*/\n) {\n  var cell = parse_XLSCell(blob, 6);\n  ++blob.l;\n  var num = parse_Xnum(blob, 8);\n  cell.t = 'n';\n  cell.val = num;\n  return cell;\n}\n\nfunction write_BIFF2NUM(r\n/*:number*/\n, c\n/*:number*/\n, val\n/*:number*/\n) {\n  var out = new_buf(15);\n  write_BIFF2Cell(out, r, c);\n  out.write_shift(8, val, 'f');\n  return out;\n}\n\nfunction parse_BIFF2INT(blob) {\n  var cell = parse_XLSCell(blob, 6);\n  ++blob.l;\n  var num = blob.read_shift(2);\n  cell.t = 'n';\n  cell.val = num;\n  return cell;\n}\n\nfunction write_BIFF2INT(r\n/*:number*/\n, c\n/*:number*/\n, val\n/*:number*/\n) {\n  var out = new_buf(9);\n  write_BIFF2Cell(out, r, c);\n  out.write_shift(2, val);\n  return out;\n}\n\nfunction parse_BIFF2STRING(blob) {\n  var cch = blob.read_shift(1);\n\n  if (cch === 0) {\n    blob.l++;\n    return \"\";\n  }\n\n  return blob.read_shift(cch, 'sbcs-cont');\n}\n/* TODO: convert to BIFF8 font struct */\n\n\nfunction parse_BIFF2FONTXTRA(blob, length) {\n  blob.l += 6; // unknown\n\n  blob.l += 2; // font weight \"bls\"\n\n  blob.l += 1; // charset\n\n  blob.l += 3; // unknown\n\n  blob.l += 1; // font family\n\n  blob.l += length - 13;\n}\n/* TODO: parse rich text runs */\n\n\nfunction parse_RString(blob, length, opts) {\n  var end = blob.l + length;\n  var cell = parse_XLSCell(blob, 6);\n  var cch = blob.read_shift(2);\n  var str = parse_XLUnicodeStringNoCch(blob, cch, opts);\n  blob.l = end;\n  cell.t = 'str';\n  cell.val = str;\n  return cell;\n}\n/* from js-harb (C) 2014-present  SheetJS */\n\n\nvar DBF_SUPPORTED_VERSIONS = [0x02, 0x03, 0x30, 0x31, 0x83, 0x8B, 0x8C, 0xF5];\n\nvar DBF = /*#__PURE__*/function () {\n  var dbf_codepage_map = {\n    /* Code Pages Supported by Visual FoxPro */\n\n    /*::[*/\n    0x01\n    /*::]*/\n    : 437,\n\n    /*::[*/\n    0x02\n    /*::]*/\n    : 850,\n\n    /*::[*/\n    0x03\n    /*::]*/\n    : 1252,\n\n    /*::[*/\n    0x04\n    /*::]*/\n    : 10000,\n\n    /*::[*/\n    0x64\n    /*::]*/\n    : 852,\n\n    /*::[*/\n    0x65\n    /*::]*/\n    : 866,\n\n    /*::[*/\n    0x66\n    /*::]*/\n    : 865,\n\n    /*::[*/\n    0x67\n    /*::]*/\n    : 861,\n\n    /*::[*/\n    0x68\n    /*::]*/\n    : 895,\n\n    /*::[*/\n    0x69\n    /*::]*/\n    : 620,\n\n    /*::[*/\n    0x6A\n    /*::]*/\n    : 737,\n\n    /*::[*/\n    0x6B\n    /*::]*/\n    : 857,\n\n    /*::[*/\n    0x78\n    /*::]*/\n    : 950,\n\n    /*::[*/\n    0x79\n    /*::]*/\n    : 949,\n\n    /*::[*/\n    0x7A\n    /*::]*/\n    : 936,\n\n    /*::[*/\n    0x7B\n    /*::]*/\n    : 932,\n\n    /*::[*/\n    0x7C\n    /*::]*/\n    : 874,\n\n    /*::[*/\n    0x7D\n    /*::]*/\n    : 1255,\n\n    /*::[*/\n    0x7E\n    /*::]*/\n    : 1256,\n\n    /*::[*/\n    0x96\n    /*::]*/\n    : 10007,\n\n    /*::[*/\n    0x97\n    /*::]*/\n    : 10029,\n\n    /*::[*/\n    0x98\n    /*::]*/\n    : 10006,\n\n    /*::[*/\n    0xC8\n    /*::]*/\n    : 1250,\n\n    /*::[*/\n    0xC9\n    /*::]*/\n    : 1251,\n\n    /*::[*/\n    0xCA\n    /*::]*/\n    : 1254,\n\n    /*::[*/\n    0xCB\n    /*::]*/\n    : 1253,\n\n    /* shapefile DBF extension */\n\n    /*::[*/\n    0x00\n    /*::]*/\n    : 20127,\n\n    /*::[*/\n    0x08\n    /*::]*/\n    : 865,\n\n    /*::[*/\n    0x09\n    /*::]*/\n    : 437,\n\n    /*::[*/\n    0x0A\n    /*::]*/\n    : 850,\n\n    /*::[*/\n    0x0B\n    /*::]*/\n    : 437,\n\n    /*::[*/\n    0x0D\n    /*::]*/\n    : 437,\n\n    /*::[*/\n    0x0E\n    /*::]*/\n    : 850,\n\n    /*::[*/\n    0x0F\n    /*::]*/\n    : 437,\n\n    /*::[*/\n    0x10\n    /*::]*/\n    : 850,\n\n    /*::[*/\n    0x11\n    /*::]*/\n    : 437,\n\n    /*::[*/\n    0x12\n    /*::]*/\n    : 850,\n\n    /*::[*/\n    0x13\n    /*::]*/\n    : 932,\n\n    /*::[*/\n    0x14\n    /*::]*/\n    : 850,\n\n    /*::[*/\n    0x15\n    /*::]*/\n    : 437,\n\n    /*::[*/\n    0x16\n    /*::]*/\n    : 850,\n\n    /*::[*/\n    0x17\n    /*::]*/\n    : 865,\n\n    /*::[*/\n    0x18\n    /*::]*/\n    : 437,\n\n    /*::[*/\n    0x19\n    /*::]*/\n    : 437,\n\n    /*::[*/\n    0x1A\n    /*::]*/\n    : 850,\n\n    /*::[*/\n    0x1B\n    /*::]*/\n    : 437,\n\n    /*::[*/\n    0x1C\n    /*::]*/\n    : 863,\n\n    /*::[*/\n    0x1D\n    /*::]*/\n    : 850,\n\n    /*::[*/\n    0x1F\n    /*::]*/\n    : 852,\n\n    /*::[*/\n    0x22\n    /*::]*/\n    : 852,\n\n    /*::[*/\n    0x23\n    /*::]*/\n    : 852,\n\n    /*::[*/\n    0x24\n    /*::]*/\n    : 860,\n\n    /*::[*/\n    0x25\n    /*::]*/\n    : 850,\n\n    /*::[*/\n    0x26\n    /*::]*/\n    : 866,\n\n    /*::[*/\n    0x37\n    /*::]*/\n    : 850,\n\n    /*::[*/\n    0x40\n    /*::]*/\n    : 852,\n\n    /*::[*/\n    0x4D\n    /*::]*/\n    : 936,\n\n    /*::[*/\n    0x4E\n    /*::]*/\n    : 949,\n\n    /*::[*/\n    0x4F\n    /*::]*/\n    : 950,\n\n    /*::[*/\n    0x50\n    /*::]*/\n    : 874,\n\n    /*::[*/\n    0x57\n    /*::]*/\n    : 1252,\n\n    /*::[*/\n    0x58\n    /*::]*/\n    : 1252,\n\n    /*::[*/\n    0x59\n    /*::]*/\n    : 1252,\n\n    /*::[*/\n    0x6C\n    /*::]*/\n    : 863,\n\n    /*::[*/\n    0x86\n    /*::]*/\n    : 737,\n\n    /*::[*/\n    0x87\n    /*::]*/\n    : 852,\n\n    /*::[*/\n    0x88\n    /*::]*/\n    : 857,\n\n    /*::[*/\n    0xCC\n    /*::]*/\n    : 1257,\n\n    /*::[*/\n    0xFF\n    /*::]*/\n    : 16969\n  };\n  var dbf_reverse_map = evert({\n    /*::[*/\n    0x01\n    /*::]*/\n    : 437,\n\n    /*::[*/\n    0x02\n    /*::]*/\n    : 850,\n\n    /*::[*/\n    0x03\n    /*::]*/\n    : 1252,\n\n    /*::[*/\n    0x04\n    /*::]*/\n    : 10000,\n\n    /*::[*/\n    0x64\n    /*::]*/\n    : 852,\n\n    /*::[*/\n    0x65\n    /*::]*/\n    : 866,\n\n    /*::[*/\n    0x66\n    /*::]*/\n    : 865,\n\n    /*::[*/\n    0x67\n    /*::]*/\n    : 861,\n\n    /*::[*/\n    0x68\n    /*::]*/\n    : 895,\n\n    /*::[*/\n    0x69\n    /*::]*/\n    : 620,\n\n    /*::[*/\n    0x6A\n    /*::]*/\n    : 737,\n\n    /*::[*/\n    0x6B\n    /*::]*/\n    : 857,\n\n    /*::[*/\n    0x78\n    /*::]*/\n    : 950,\n\n    /*::[*/\n    0x79\n    /*::]*/\n    : 949,\n\n    /*::[*/\n    0x7A\n    /*::]*/\n    : 936,\n\n    /*::[*/\n    0x7B\n    /*::]*/\n    : 932,\n\n    /*::[*/\n    0x7C\n    /*::]*/\n    : 874,\n\n    /*::[*/\n    0x7D\n    /*::]*/\n    : 1255,\n\n    /*::[*/\n    0x7E\n    /*::]*/\n    : 1256,\n\n    /*::[*/\n    0x96\n    /*::]*/\n    : 10007,\n\n    /*::[*/\n    0x97\n    /*::]*/\n    : 10029,\n\n    /*::[*/\n    0x98\n    /*::]*/\n    : 10006,\n\n    /*::[*/\n    0xC8\n    /*::]*/\n    : 1250,\n\n    /*::[*/\n    0xC9\n    /*::]*/\n    : 1251,\n\n    /*::[*/\n    0xCA\n    /*::]*/\n    : 1254,\n\n    /*::[*/\n    0xCB\n    /*::]*/\n    : 1253,\n\n    /*::[*/\n    0x00\n    /*::]*/\n    : 20127\n  });\n  /* TODO: find an actual specification */\n\n  function dbf_to_aoa(buf, opts)\n  /*:AOA*/\n  {\n    var out\n    /*:AOA*/\n    = [];\n    var d\n    /*:Block*/\n    = new_raw_buf(1)\n    /*:any*/\n    ;\n\n    switch (opts.type) {\n      case 'base64':\n        d = s2a(Base64_decode(buf));\n        break;\n\n      case 'binary':\n        d = s2a(buf);\n        break;\n\n      case 'buffer':\n      case 'array':\n        d = buf;\n        break;\n    }\n\n    prep_blob(d, 0);\n    /* header */\n\n    var ft = d.read_shift(1);\n    var memo = !!(ft & 0x88);\n    var vfp = false,\n        l7 = false;\n\n    switch (ft) {\n      case 0x02:\n        break;\n      // dBASE II\n\n      case 0x03:\n        break;\n      // dBASE III\n\n      case 0x30:\n        vfp = true;\n        memo = true;\n        break;\n      // VFP\n\n      case 0x31:\n        vfp = true;\n        memo = true;\n        break;\n      // VFP with autoincrement\n      // 0x43 dBASE IV SQL table files\n      // 0x63 dBASE IV SQL system files\n\n      case 0x83:\n        break;\n      // dBASE III with memo\n\n      case 0x8B:\n        break;\n      // dBASE IV with memo\n\n      case 0x8C:\n        l7 = true;\n        break;\n      // dBASE Level 7 with memo\n      // case 0xCB dBASE IV SQL table files with memo\n\n      case 0xF5:\n        break;\n      // FoxPro 2.x with memo\n      // case 0xFB FoxBASE\n\n      default:\n        throw new Error(\"DBF Unsupported Version: \" + ft.toString(16));\n    }\n\n    var nrow = 0,\n        fpos = 0x0209;\n    if (ft == 0x02) nrow = d.read_shift(2);\n    d.l += 3; // dBASE II stores DDMMYY date, others use YYMMDD\n\n    if (ft != 0x02) nrow = d.read_shift(4);\n    if (nrow > 1048576) nrow = 1e6;\n    if (ft != 0x02) fpos = d.read_shift(2); // header length\n\n    var rlen = d.read_shift(2); // record length\n\n    var\n    /*flags = 0,*/\n    current_cp = opts.codepage || 1252;\n\n    if (ft != 0x02) {\n      // 20 reserved bytes\n      d.l += 16;\n      /*flags = */\n\n      d.read_shift(1); //if(memo && ((flags & 0x02) === 0)) throw new Error(\"DBF Flags \" + flags.toString(16) + \" ft \" + ft.toString(16));\n\n      /* codepage present in FoxPro and dBASE Level 7 */\n\n      if (d[d.l] !== 0) current_cp = dbf_codepage_map[d[d.l]];\n      d.l += 1;\n      d.l += 2;\n    }\n\n    if (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\n    var fields\n    /*:Array<DBFField>*/\n    = [],\n        field\n    /*:DBFField*/\n    = {}\n    /*:any*/\n    ;\n    var hend = Math.min(d.length, ft == 0x02 ? 0x209 : fpos - 10 - (vfp ? 264 : 0));\n    var ww = l7 ? 32 : 11;\n\n    while (d.l < hend && d[d.l] != 0x0d) {\n      field = {}\n      /*:any*/\n      ;\n      field.name = $cptable.utils.decode(current_cp, d.slice(d.l, d.l + ww)).replace(/[\\u0000\\r\\n].*$/g, \"\");\n      d.l += ww;\n      field.type = String.fromCharCode(d.read_shift(1));\n      if (ft != 0x02 && !l7) field.offset = d.read_shift(4);\n      field.len = d.read_shift(1);\n      if (ft == 0x02) field.offset = d.read_shift(2);\n      field.dec = d.read_shift(1);\n      if (field.name.length) fields.push(field);\n      if (ft != 0x02) d.l += l7 ? 13 : 14;\n\n      switch (field.type) {\n        case 'B':\n          // Double (VFP) / Binary (dBASE L7)\n          if ((!vfp || field.len != 8) && opts.WTF) console.log('Skipping ' + field.name + ':' + field.type);\n          break;\n\n        case 'G': // General (FoxPro and dBASE L7)\n\n        case 'P':\n          // Picture (FoxPro and dBASE L7)\n          if (opts.WTF) console.log('Skipping ' + field.name + ':' + field.type);\n          break;\n\n        case '+': // Autoincrement (dBASE L7 only)\n\n        case '0': // _NullFlags (VFP only)\n\n        case '@': // Timestamp (dBASE L7 only)\n\n        case 'C': // Character (dBASE II)\n\n        case 'D': // Date (dBASE III)\n\n        case 'F': // Float (dBASE IV)\n\n        case 'I': // Long (VFP and dBASE L7)\n\n        case 'L': // Logical (dBASE II)\n\n        case 'M': // Memo (dBASE III)\n\n        case 'N': // Number (dBASE II)\n\n        case 'O': // Double (dBASE L7 only)\n\n        case 'T': // Datetime (VFP only)\n\n        case 'Y':\n          // Currency (VFP only)\n          break;\n\n        default:\n          throw new Error('Unknown Field Type: ' + field.type);\n      }\n    }\n\n    if (d[d.l] !== 0x0D) d.l = fpos - 1;\n    if (d.read_shift(1) !== 0x0D) throw new Error(\"DBF Terminator not found \" + d.l + \" \" + d[d.l]);\n    d.l = fpos;\n    /* data */\n\n    var R = 0,\n        C = 0;\n    out[0] = [];\n\n    for (C = 0; C != fields.length; ++C) {\n      out[0][C] = fields[C].name;\n    }\n\n    while (nrow-- > 0) {\n      if (d[d.l] === 0x2A) {\n        // TODO: record marked as deleted -- create a hidden row?\n        d.l += rlen;\n        continue;\n      }\n\n      ++d.l;\n      out[++R] = [];\n      C = 0;\n\n      for (C = 0; C != fields.length; ++C) {\n        var dd = d.slice(d.l, d.l + fields[C].len);\n        d.l += fields[C].len;\n        prep_blob(dd, 0);\n        var s = $cptable.utils.decode(current_cp, dd);\n\n        switch (fields[C].type) {\n          case 'C':\n            // NOTE: it is conventional to write '  /  /  ' for empty dates\n            if (s.trim().length) out[R][C] = s.replace(/\\s+$/, \"\");\n            break;\n\n          case 'D':\n            if (s.length === 8) out[R][C] = new Date(+s.slice(0, 4), +s.slice(4, 6) - 1, +s.slice(6, 8));else out[R][C] = s;\n            break;\n\n          case 'F':\n            out[R][C] = parseFloat(s.trim());\n            break;\n\n          case '+':\n          case 'I':\n            out[R][C] = l7 ? dd.read_shift(-4, 'i') ^ 0x80000000 : dd.read_shift(4, 'i');\n            break;\n\n          case 'L':\n            switch (s.trim().toUpperCase()) {\n              case 'Y':\n              case 'T':\n                out[R][C] = true;\n                break;\n\n              case 'N':\n              case 'F':\n                out[R][C] = false;\n                break;\n\n              case '':\n              case '?':\n                break;\n\n              default:\n                throw new Error(\"DBF Unrecognized L:|\" + s + \"|\");\n            }\n\n            break;\n\n          case 'M':\n            /* TODO: handle memo files */\n            if (!memo) throw new Error(\"DBF Unexpected MEMO for type \" + ft.toString(16));\n            out[R][C] = \"##MEMO##\" + (l7 ? parseInt(s.trim(), 10) : dd.read_shift(4));\n            break;\n\n          case 'N':\n            s = s.replace(/\\u0000/g, \"\").trim(); // NOTE: dBASE II interprets \"  .  \" as 0\n\n            if (s && s != \".\") out[R][C] = +s || 0;\n            break;\n\n          case '@':\n            // NOTE: dBASE specs appear to be incorrect\n            out[R][C] = new Date(dd.read_shift(-8, 'f') - 0x388317533400);\n            break;\n\n          case 'T':\n            out[R][C] = new Date((dd.read_shift(4) - 0x253D8C) * 0x5265C00 + dd.read_shift(4));\n            break;\n\n          case 'Y':\n            out[R][C] = dd.read_shift(4, 'i') / 1e4 + dd.read_shift(4, 'i') / 1e4 * Math.pow(2, 32);\n            break;\n\n          case 'O':\n            out[R][C] = -dd.read_shift(-8, 'f');\n            break;\n\n          case 'B':\n            if (vfp && fields[C].len == 8) {\n              out[R][C] = dd.read_shift(8, 'f');\n              break;\n            }\n\n          /* falls through */\n\n          case 'G':\n          case 'P':\n            dd.l += fields[C].len;\n            break;\n\n          case '0':\n            if (fields[C].name === '_NullFlags') break;\n\n          /* falls through */\n\n          default:\n            throw new Error(\"DBF Unsupported data type \" + fields[C].type);\n        }\n      }\n    }\n\n    if (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    if (opts && opts.sheetRows) out = out.slice(0, opts.sheetRows);\n    opts.DBF = fields;\n    return out;\n  }\n\n  function dbf_to_sheet(buf, opts)\n  /*:Worksheet*/\n  {\n    var o = opts || {};\n    if (!o.dateNF) o.dateNF = \"yyyymmdd\";\n    var ws = aoa_to_sheet(dbf_to_aoa(buf, o), o);\n    ws[\"!cols\"] = o.DBF.map(function (field) {\n      return {\n        wch: field.len,\n        DBF: field\n      };\n    });\n    delete o.DBF;\n    return ws;\n  }\n\n  function dbf_to_workbook(buf, opts)\n  /*:Workbook*/\n  {\n    try {\n      return sheet_to_workbook(dbf_to_sheet(buf, opts), opts);\n    } catch (e) {\n      if (opts && opts.WTF) throw e;\n    }\n\n    return {\n      SheetNames: [],\n      Sheets: {}\n    };\n  }\n\n  var _RLEN = {\n    'B': 8,\n    'C': 250,\n    'L': 1,\n    'D': 8,\n    '?': 0,\n    '': 0\n  };\n\n  function sheet_to_dbf(ws\n  /*:Worksheet*/\n  , opts\n  /*:WriteOpts*/\n  ) {\n    var o = opts || {};\n    if (+o.codepage >= 0) set_cp(+o.codepage);\n    if (o.type == \"string\") throw new Error(\"Cannot write DBF to JS string\");\n    var ba = buf_array();\n    var aoa\n    /*:AOA*/\n    = sheet_to_json(ws, {\n      header: 1,\n      raw: true,\n      cellDates: true\n    });\n    var headers = aoa[0],\n        data = aoa.slice(1),\n        cols = ws[\"!cols\"] || [];\n    var i = 0,\n        j = 0,\n        hcnt = 0,\n        rlen = 1;\n\n    for (i = 0; i < headers.length; ++i) {\n      if (((cols[i] || {}).DBF || {}).name) {\n        headers[i] = cols[i].DBF.name;\n        ++hcnt;\n        continue;\n      }\n\n      if (headers[i] == null) continue;\n      ++hcnt;\n      if (typeof headers[i] === 'number') headers[i] = headers[i].toString(10);\n      if (typeof headers[i] !== 'string') throw new Error(\"DBF Invalid column name \" + headers[i] + \" |\" + typeof headers[i] + \"|\");\n      if (headers.indexOf(headers[i]) !== i) for (j = 0; j < 1024; ++j) {\n        if (headers.indexOf(headers[i] + \"_\" + j) == -1) {\n          headers[i] += \"_\" + j;\n          break;\n        }\n      }\n    }\n\n    var range = safe_decode_range(ws['!ref']);\n    var coltypes\n    /*:Array<string>*/\n    = [];\n    var colwidths\n    /*:Array<number>*/\n    = [];\n    var coldecimals\n    /*:Array<number>*/\n    = [];\n\n    for (i = 0; i <= range.e.c - range.s.c; ++i) {\n      var guess = '',\n          _guess = '',\n          maxlen = 0;\n      var col\n      /*:Array<any>*/\n      = [];\n\n      for (j = 0; j < data.length; ++j) {\n        if (data[j][i] != null) col.push(data[j][i]);\n      }\n\n      if (col.length == 0 || headers[i] == null) {\n        coltypes[i] = '?';\n        continue;\n      }\n\n      for (j = 0; j < col.length; ++j) {\n        switch (typeof col[j]) {\n          /* TODO: check if L2 compat is desired */\n          case 'number':\n            _guess = 'B';\n            break;\n\n          case 'string':\n            _guess = 'C';\n            break;\n\n          case 'boolean':\n            _guess = 'L';\n            break;\n\n          case 'object':\n            _guess = col[j] instanceof Date ? 'D' : 'C';\n            break;\n\n          default:\n            _guess = 'C';\n        }\n\n        maxlen = Math.max(maxlen, String(col[j]).length);\n        guess = guess && guess != _guess ? 'C' : _guess; //if(guess == 'C') break;\n      }\n\n      if (maxlen > 250) maxlen = 250;\n      _guess = ((cols[i] || {}).DBF || {}).type;\n      /* TODO: more fine grained control over DBF type resolution */\n\n      if (_guess == 'C') {\n        if (cols[i].DBF.len > maxlen) maxlen = cols[i].DBF.len;\n      }\n\n      if (guess == 'B' && _guess == 'N') {\n        guess = 'N';\n        coldecimals[i] = cols[i].DBF.dec;\n        maxlen = cols[i].DBF.len;\n      }\n\n      colwidths[i] = guess == 'C' || _guess == 'N' ? maxlen : _RLEN[guess] || 0;\n      rlen += colwidths[i];\n      coltypes[i] = guess;\n    }\n\n    var h = ba.next(32);\n    h.write_shift(4, 0x13021130);\n    h.write_shift(4, data.length);\n    h.write_shift(2, 296 + 32 * hcnt);\n    h.write_shift(2, rlen);\n\n    for (i = 0; i < 4; ++i) {\n      h.write_shift(4, 0);\n    }\n\n    h.write_shift(4, 0x00000000 | (+dbf_reverse_map[\n    /*::String(*/\n    current_ansi\n    /*::)*/\n    ] || 0x03) << 8);\n\n    for (i = 0, j = 0; i < headers.length; ++i) {\n      if (headers[i] == null) continue;\n      var hf = ba.next(32);\n\n      var _f = (headers[i].slice(-10) + \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\").slice(0, 11);\n\n      hf.write_shift(1, _f, \"sbcs\");\n      hf.write_shift(1, coltypes[i] == '?' ? 'C' : coltypes[i], \"sbcs\");\n      hf.write_shift(4, j);\n      hf.write_shift(1, colwidths[i] || _RLEN[coltypes[i]] || 0);\n      hf.write_shift(1, coldecimals[i] || 0);\n      hf.write_shift(1, 0x02);\n      hf.write_shift(4, 0);\n      hf.write_shift(1, 0);\n      hf.write_shift(4, 0);\n      hf.write_shift(4, 0);\n      j += colwidths[i] || _RLEN[coltypes[i]] || 0;\n    }\n\n    var hb = ba.next(264);\n    hb.write_shift(4, 0x0000000D);\n\n    for (i = 0; i < 65; ++i) {\n      hb.write_shift(4, 0x00000000);\n    }\n\n    for (i = 0; i < data.length; ++i) {\n      var rout = ba.next(rlen);\n      rout.write_shift(1, 0);\n\n      for (j = 0; j < headers.length; ++j) {\n        if (headers[j] == null) continue;\n\n        switch (coltypes[j]) {\n          case 'L':\n            rout.write_shift(1, data[i][j] == null ? 0x3F : data[i][j] ? 0x54 : 0x46);\n            break;\n\n          case 'B':\n            rout.write_shift(8, data[i][j] || 0, 'f');\n            break;\n\n          case 'N':\n            var _n = \"0\";\n            if (typeof data[i][j] == \"number\") _n = data[i][j].toFixed(coldecimals[j] || 0);\n\n            for (hcnt = 0; hcnt < colwidths[j] - _n.length; ++hcnt) {\n              rout.write_shift(1, 0x20);\n            }\n\n            rout.write_shift(1, _n, \"sbcs\");\n            break;\n\n          case 'D':\n            if (!data[i][j]) rout.write_shift(8, \"00000000\", \"sbcs\");else {\n              rout.write_shift(4, (\"0000\" + data[i][j].getFullYear()).slice(-4), \"sbcs\");\n              rout.write_shift(2, (\"00\" + (data[i][j].getMonth() + 1)).slice(-2), \"sbcs\");\n              rout.write_shift(2, (\"00\" + data[i][j].getDate()).slice(-2), \"sbcs\");\n            }\n            break;\n\n          case 'C':\n            var _s = String(data[i][j] != null ? data[i][j] : \"\").slice(0, colwidths[j]);\n\n            rout.write_shift(1, _s, \"sbcs\");\n\n            for (hcnt = 0; hcnt < colwidths[j] - _s.length; ++hcnt) {\n              rout.write_shift(1, 0x20);\n            }\n\n            break;\n        }\n      } // data\n\n    }\n\n    ba.next(1).write_shift(1, 0x1A);\n    return ba.end();\n  }\n\n  return {\n    to_workbook: dbf_to_workbook,\n    to_sheet: dbf_to_sheet,\n    from_sheet: sheet_to_dbf\n  };\n}();\n\nvar SYLK = /*#__PURE__*/function () {\n  /* TODO: stress test sequences */\n  var sylk_escapes = {\n    AA: 'À',\n    BA: 'Á',\n    CA: 'Â',\n    DA: 195,\n    HA: 'Ä',\n    JA: 197,\n    AE: 'È',\n    BE: 'É',\n    CE: 'Ê',\n    HE: 'Ë',\n    AI: 'Ì',\n    BI: 'Í',\n    CI: 'Î',\n    HI: 'Ï',\n    AO: 'Ò',\n    BO: 'Ó',\n    CO: 'Ô',\n    DO: 213,\n    HO: 'Ö',\n    AU: 'Ù',\n    BU: 'Ú',\n    CU: 'Û',\n    HU: 'Ü',\n    Aa: 'à',\n    Ba: 'á',\n    Ca: 'â',\n    Da: 227,\n    Ha: 'ä',\n    Ja: 229,\n    Ae: 'è',\n    Be: 'é',\n    Ce: 'ê',\n    He: 'ë',\n    Ai: 'ì',\n    Bi: 'í',\n    Ci: 'î',\n    Hi: 'ï',\n    Ao: 'ò',\n    Bo: 'ó',\n    Co: 'ô',\n    Do: 245,\n    Ho: 'ö',\n    Au: 'ù',\n    Bu: 'ú',\n    Cu: 'û',\n    Hu: 'ü',\n    KC: 'Ç',\n    Kc: 'ç',\n    q: 'æ',\n    z: 'œ',\n    a: 'Æ',\n    j: 'Œ',\n    DN: 209,\n    Dn: 241,\n    Hy: 255,\n    S: 169,\n    c: 170,\n    R: 174,\n    \"B \": 180,\n\n    /*::[*/\n    0\n    /*::]*/\n    : 176,\n\n    /*::[*/\n    1\n    /*::]*/\n    : 177,\n\n    /*::[*/\n    2\n    /*::]*/\n    : 178,\n\n    /*::[*/\n    3\n    /*::]*/\n    : 179,\n\n    /*::[*/\n    5\n    /*::]*/\n    : 181,\n\n    /*::[*/\n    6\n    /*::]*/\n    : 182,\n\n    /*::[*/\n    7\n    /*::]*/\n    : 183,\n    Q: 185,\n    k: 186,\n    b: 208,\n    i: 216,\n    l: 222,\n    s: 240,\n    y: 248,\n    \"!\": 161,\n    '\"': 162,\n    \"#\": 163,\n    \"(\": 164,\n    \"%\": 165,\n    \"'\": 167,\n    \"H \": 168,\n    \"+\": 171,\n    \";\": 187,\n    \"<\": 188,\n    \"=\": 189,\n    \">\": 190,\n    \"?\": 191,\n    \"{\": 223\n  }\n  /*:any*/\n  ;\n  var sylk_char_regex = new RegExp(\"\\x1BN(\" + keys(sylk_escapes).join(\"|\").replace(/\\|\\|\\|/, \"|\\\\||\").replace(/([?()+])/g, \"\\\\$1\") + \"|\\\\|)\", \"gm\");\n\n  var sylk_char_fn = function sylk_char_fn(_, $1) {\n    var o = sylk_escapes[$1];\n    return typeof o == \"number\" ? _getansi(o) : o;\n  };\n\n  var decode_sylk_char = function decode_sylk_char($$, $1, $2) {\n    var newcc = $1.charCodeAt(0) - 0x20 << 4 | $2.charCodeAt(0) - 0x30;\n    return newcc == 59 ? $$ : _getansi(newcc);\n  };\n\n  sylk_escapes[\"|\"] = 254;\n  /* TODO: find an actual specification */\n\n  function sylk_to_aoa(d\n  /*:RawData*/\n  , opts)\n  /*:[AOA, Worksheet]*/\n  {\n    switch (opts.type) {\n      case 'base64':\n        return sylk_to_aoa_str(Base64_decode(d), opts);\n\n      case 'binary':\n        return sylk_to_aoa_str(d, opts);\n\n      case 'buffer':\n        return sylk_to_aoa_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts);\n\n      case 'array':\n        return sylk_to_aoa_str(cc2str(d), opts);\n    }\n\n    throw new Error(\"Unrecognized type \" + opts.type);\n  }\n\n  function sylk_to_aoa_str(str\n  /*:string*/\n  , opts)\n  /*:[AOA, Worksheet]*/\n  {\n    var records = str.split(/[\\n\\r]+/),\n        R = -1,\n        C = -1,\n        ri = 0,\n        rj = 0,\n        arr\n    /*:AOA*/\n    = [];\n    var formats\n    /*:Array<string>*/\n    = [];\n    var next_cell_format\n    /*:string|null*/\n    = null;\n    var sht = {},\n        rowinfo\n    /*:Array<RowInfo>*/\n    = [],\n        colinfo\n    /*:Array<ColInfo>*/\n    = [],\n        cw\n    /*:Array<string>*/\n    = [];\n    var Mval = 0,\n        j;\n    if (+opts.codepage >= 0) set_cp(+opts.codepage);\n\n    for (; ri !== records.length; ++ri) {\n      Mval = 0;\n      var rstr = records[ri].trim().replace(/\\x1B([\\x20-\\x2F])([\\x30-\\x3F])/g, decode_sylk_char).replace(sylk_char_regex, sylk_char_fn);\n      var record = rstr.replace(/;;/g, \"\\0\").split(\";\").map(function (x) {\n        return x.replace(/\\u0000/g, \";\");\n      });\n      var RT = record[0],\n          val;\n      if (rstr.length > 0) switch (RT) {\n        case 'ID':\n          break;\n\n        /* header */\n\n        case 'E':\n          break;\n\n        /* EOF */\n\n        case 'B':\n          break;\n\n        /* dimensions */\n\n        case 'O':\n          break;\n\n        /* options? */\n\n        case 'W':\n          break;\n\n        /* window? */\n\n        case 'P':\n          if (record[1].charAt(0) == 'P') formats.push(rstr.slice(3).replace(/;;/g, \";\"));\n          break;\n\n        case 'C':\n          var C_seen_K = false,\n              C_seen_X = false,\n              C_seen_S = false,\n              C_seen_E = false,\n              _R = -1,\n              _C = -1;\n\n          for (rj = 1; rj < record.length; ++rj) {\n            switch (record[rj].charAt(0)) {\n              case 'A':\n                break;\n              // TODO: comment\n\n              case 'X':\n                C = parseInt(record[rj].slice(1)) - 1;\n                C_seen_X = true;\n                break;\n\n              case 'Y':\n                R = parseInt(record[rj].slice(1)) - 1;\n                if (!C_seen_X) C = 0;\n\n                for (j = arr.length; j <= R; ++j) {\n                  arr[j] = [];\n                }\n\n                break;\n\n              case 'K':\n                val = record[rj].slice(1);\n                if (val.charAt(0) === '\"') val = val.slice(1, val.length - 1);else if (val === 'TRUE') val = true;else if (val === 'FALSE') val = false;else if (!isNaN(fuzzynum(val))) {\n                  val = fuzzynum(val);\n                  if (next_cell_format !== null && fmt_is_date(next_cell_format)) val = numdate(val);\n                } else if (!isNaN(fuzzydate(val).getDate())) {\n                  val = parseDate(val);\n                }\n                if (typeof $cptable !== 'undefined' && typeof val == \"string\" && (opts || {}).type != \"string\" && (opts || {}).codepage) val = $cptable.utils.decode(opts.codepage, val);\n                C_seen_K = true;\n                break;\n\n              case 'E':\n                C_seen_E = true;\n                var formula = rc_to_a1(record[rj].slice(1), {\n                  r: R,\n                  c: C\n                });\n                arr[R][C] = [arr[R][C], formula];\n                break;\n\n              case 'S':\n                C_seen_S = true;\n                arr[R][C] = [arr[R][C], \"S5S\"];\n                break;\n\n              case 'G':\n                break;\n              // unknown\n\n              case 'R':\n                _R = parseInt(record[rj].slice(1)) - 1;\n                break;\n\n              case 'C':\n                _C = parseInt(record[rj].slice(1)) - 1;\n                break;\n\n              default:\n                if (opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n            }\n          }\n\n          if (C_seen_K) {\n            if (arr[R][C] && arr[R][C].length == 2) arr[R][C][0] = val;else arr[R][C] = val;\n            next_cell_format = null;\n          }\n\n          if (C_seen_S) {\n            if (C_seen_E) throw new Error(\"SYLK shared formula cannot have own formula\");\n            var shrbase = _R > -1 && arr[_R][_C];\n            if (!shrbase || !shrbase[1]) throw new Error(\"SYLK shared formula cannot find base\");\n            arr[R][C][1] = shift_formula_str(shrbase[1], {\n              r: R - _R,\n              c: C - _C\n            });\n          }\n\n          break;\n\n        case 'F':\n          var F_seen = 0;\n\n          for (rj = 1; rj < record.length; ++rj) {\n            switch (record[rj].charAt(0)) {\n              case 'X':\n                C = parseInt(record[rj].slice(1)) - 1;\n                ++F_seen;\n                break;\n\n              case 'Y':\n                R = parseInt(record[rj].slice(1)) - 1;\n                /*C = 0;*/\n\n                for (j = arr.length; j <= R; ++j) {\n                  arr[j] = [];\n                }\n\n                break;\n\n              case 'M':\n                Mval = parseInt(record[rj].slice(1)) / 20;\n                break;\n\n              case 'F':\n                break;\n\n              /* ??? */\n\n              case 'G':\n                break;\n\n              /* hide grid */\n\n              case 'P':\n                next_cell_format = formats[parseInt(record[rj].slice(1))];\n                break;\n\n              case 'S':\n                break;\n\n              /* cell style */\n\n              case 'D':\n                break;\n\n              /* column */\n\n              case 'N':\n                break;\n\n              /* font */\n\n              case 'W':\n                cw = record[rj].slice(1).split(\" \");\n\n                for (j = parseInt(cw[0], 10); j <= parseInt(cw[1], 10); ++j) {\n                  Mval = parseInt(cw[2], 10);\n                  colinfo[j - 1] = Mval === 0 ? {\n                    hidden: true\n                  } : {\n                    wch: Mval\n                  };\n                  process_col(colinfo[j - 1]);\n                }\n\n                break;\n\n              case 'C':\n                /* default column format */\n                C = parseInt(record[rj].slice(1)) - 1;\n                if (!colinfo[C]) colinfo[C] = {};\n                break;\n\n              case 'R':\n                /* row properties */\n                R = parseInt(record[rj].slice(1)) - 1;\n                if (!rowinfo[R]) rowinfo[R] = {};\n\n                if (Mval > 0) {\n                  rowinfo[R].hpt = Mval;\n                  rowinfo[R].hpx = pt2px(Mval);\n                } else if (Mval === 0) rowinfo[R].hidden = true;\n\n                break;\n\n              default:\n                if (opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n            }\n          }\n\n          if (F_seen < 1) next_cell_format = null;\n          break;\n\n        default:\n          if (opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n      }\n    }\n\n    if (rowinfo.length > 0) sht['!rows'] = rowinfo;\n    if (colinfo.length > 0) sht['!cols'] = colinfo;\n    if (opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n    return [arr, sht];\n  }\n\n  function sylk_to_sheet(d\n  /*:RawData*/\n  , opts)\n  /*:Worksheet*/\n  {\n    var aoasht = sylk_to_aoa(d, opts);\n    var aoa = aoasht[0],\n        ws = aoasht[1];\n    var o = aoa_to_sheet(aoa, opts);\n    keys(ws).forEach(function (k) {\n      o[k] = ws[k];\n    });\n    return o;\n  }\n\n  function sylk_to_workbook(d\n  /*:RawData*/\n  , opts)\n  /*:Workbook*/\n  {\n    return sheet_to_workbook(sylk_to_sheet(d, opts), opts);\n  }\n\n  function write_ws_cell_sylk(cell\n  /*:Cell*/\n  , ws\n  /*:Worksheet*/\n  , R\n  /*:number*/\n  , C\n  /*:number*/\n\n  /*::, opts*/\n  )\n  /*:string*/\n  {\n    var o = \"C;Y\" + (R + 1) + \";X\" + (C + 1) + \";K\";\n\n    switch (cell.t) {\n      case 'n':\n        o += cell.v || 0;\n        if (cell.f && !cell.F) o += \";E\" + a1_to_rc(cell.f, {\n          r: R,\n          c: C\n        });\n        break;\n\n      case 'b':\n        o += cell.v ? \"TRUE\" : \"FALSE\";\n        break;\n\n      case 'e':\n        o += cell.w || cell.v;\n        break;\n\n      case 'd':\n        o += '\"' + (cell.w || cell.v) + '\"';\n        break;\n\n      case 's':\n        o += '\"' + cell.v.replace(/\"/g, \"\").replace(/;/g, \";;\") + '\"';\n        break;\n    }\n\n    return o;\n  }\n\n  function write_ws_cols_sylk(out, cols) {\n    cols.forEach(function (col, i) {\n      var rec = \"F;W\" + (i + 1) + \" \" + (i + 1) + \" \";\n      if (col.hidden) rec += \"0\";else {\n        if (typeof col.width == 'number' && !col.wpx) col.wpx = width2px(col.width);\n        if (typeof col.wpx == 'number' && !col.wch) col.wch = px2char(col.wpx);\n        if (typeof col.wch == 'number') rec += Math.round(col.wch);\n      }\n      if (rec.charAt(rec.length - 1) != \" \") out.push(rec);\n    });\n  }\n\n  function write_ws_rows_sylk(out\n  /*:Array<string>*/\n  , rows\n  /*:Array<RowInfo>*/\n  ) {\n    rows.forEach(function (row, i) {\n      var rec = \"F;\";\n      if (row.hidden) rec += \"M0;\";else if (row.hpt) rec += \"M\" + 20 * row.hpt + \";\";else if (row.hpx) rec += \"M\" + 20 * px2pt(row.hpx) + \";\";\n      if (rec.length > 2) out.push(rec + \"R\" + (i + 1));\n    });\n  }\n\n  function sheet_to_sylk(ws\n  /*:Worksheet*/\n  , opts\n  /*:?any*/\n  )\n  /*:string*/\n  {\n    var preamble\n    /*:Array<string>*/\n    = [\"ID;PWXL;N;E\"],\n        o\n    /*:Array<string>*/\n    = [];\n    var r = safe_decode_range(ws['!ref']),\n        cell\n    /*:Cell*/\n    ;\n    var dense = Array.isArray(ws);\n    var RS = \"\\r\\n\";\n    preamble.push(\"P;PGeneral\");\n    preamble.push(\"F;P0;DG0G8;M255\");\n    if (ws['!cols']) write_ws_cols_sylk(preamble, ws['!cols']);\n    if (ws['!rows']) write_ws_rows_sylk(preamble, ws['!rows']);\n    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\n    for (var R = r.s.r; R <= r.e.r; ++R) {\n      for (var C = r.s.c; C <= r.e.c; ++C) {\n        var coord = encode_cell({\n          r: R,\n          c: C\n        });\n        cell = dense ? (ws[R] || [])[C] : ws[coord];\n        if (!cell || cell.v == null && (!cell.f || cell.F)) continue;\n        o.push(write_ws_cell_sylk(cell, ws, R, C, opts));\n      }\n    }\n\n    return preamble.join(RS) + RS + o.join(RS) + RS + \"E\" + RS;\n  }\n\n  return {\n    to_workbook: sylk_to_workbook,\n    to_sheet: sylk_to_sheet,\n    from_sheet: sheet_to_sylk\n  };\n}();\n\nvar DIF = /*#__PURE__*/function () {\n  function dif_to_aoa(d\n  /*:RawData*/\n  , opts)\n  /*:AOA*/\n  {\n    switch (opts.type) {\n      case 'base64':\n        return dif_to_aoa_str(Base64_decode(d), opts);\n\n      case 'binary':\n        return dif_to_aoa_str(d, opts);\n\n      case 'buffer':\n        return dif_to_aoa_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts);\n\n      case 'array':\n        return dif_to_aoa_str(cc2str(d), opts);\n    }\n\n    throw new Error(\"Unrecognized type \" + opts.type);\n  }\n\n  function dif_to_aoa_str(str\n  /*:string*/\n  , opts)\n  /*:AOA*/\n  {\n    var records = str.split('\\n'),\n        R = -1,\n        C = -1,\n        ri = 0,\n        arr\n    /*:AOA*/\n    = [];\n\n    for (; ri !== records.length; ++ri) {\n      if (records[ri].trim() === 'BOT') {\n        arr[++R] = [];\n        C = 0;\n        continue;\n      }\n\n      if (R < 0) continue;\n      var metadata = records[ri].trim().split(\",\");\n      var type = metadata[0],\n          value = metadata[1];\n      ++ri;\n      var data = records[ri] || \"\";\n\n      while ((data.match(/[\"]/g) || []).length & 1 && ri < records.length - 1) {\n        data += \"\\n\" + records[++ri];\n      }\n\n      data = data.trim();\n\n      switch (+type) {\n        case -1:\n          if (data === 'BOT') {\n            arr[++R] = [];\n            C = 0;\n            continue;\n          } else if (data !== 'EOD') throw new Error(\"Unrecognized DIF special command \" + data);\n\n          break;\n\n        case 0:\n          if (data === 'TRUE') arr[R][C] = true;else if (data === 'FALSE') arr[R][C] = false;else if (!isNaN(fuzzynum(value))) arr[R][C] = fuzzynum(value);else if (!isNaN(fuzzydate(value).getDate())) arr[R][C] = parseDate(value);else arr[R][C] = value;\n          ++C;\n          break;\n\n        case 1:\n          data = data.slice(1, data.length - 1);\n          data = data.replace(/\"\"/g, '\"');\n          if (DIF_XL && data && data.match(/^=\".*\"$/)) data = data.slice(2, -1);\n          arr[R][C++] = data !== '' ? data : null;\n          break;\n      }\n\n      if (data === 'EOD') break;\n    }\n\n    if (opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n    return arr;\n  }\n\n  function dif_to_sheet(str\n  /*:string*/\n  , opts)\n  /*:Worksheet*/\n  {\n    return aoa_to_sheet(dif_to_aoa(str, opts), opts);\n  }\n\n  function dif_to_workbook(str\n  /*:string*/\n  , opts)\n  /*:Workbook*/\n  {\n    return sheet_to_workbook(dif_to_sheet(str, opts), opts);\n  }\n\n  var sheet_to_dif = /*#__PURE__*/function () {\n    var push_field = function pf(o\n    /*:Array<string>*/\n    , topic\n    /*:string*/\n    , v\n    /*:number*/\n    , n\n    /*:number*/\n    , s\n    /*:string*/\n    ) {\n      o.push(topic);\n      o.push(v + \",\" + n);\n      o.push('\"' + s.replace(/\"/g, '\"\"') + '\"');\n    };\n\n    var push_value = function po(o\n    /*:Array<string>*/\n    , type\n    /*:number*/\n    , v\n    /*:any*/\n    , s\n    /*:string*/\n    ) {\n      o.push(type + \",\" + v);\n      o.push(type == 1 ? '\"' + s.replace(/\"/g, '\"\"') + '\"' : s);\n    };\n\n    return function sheet_to_dif(ws\n    /*:Worksheet*/\n\n    /*::, opts:?any*/\n    )\n    /*:string*/\n    {\n      var o\n      /*:Array<string>*/\n      = [];\n      var r = safe_decode_range(ws['!ref']),\n          cell\n      /*:Cell*/\n      ;\n      var dense = Array.isArray(ws);\n      push_field(o, \"TABLE\", 0, 1, \"sheetjs\");\n      push_field(o, \"VECTORS\", 0, r.e.r - r.s.r + 1, \"\");\n      push_field(o, \"TUPLES\", 0, r.e.c - r.s.c + 1, \"\");\n      push_field(o, \"DATA\", 0, 0, \"\");\n\n      for (var R = r.s.r; R <= r.e.r; ++R) {\n        push_value(o, -1, 0, \"BOT\");\n\n        for (var C = r.s.c; C <= r.e.c; ++C) {\n          var coord = encode_cell({\n            r: R,\n            c: C\n          });\n          cell = dense ? (ws[R] || [])[C] : ws[coord];\n\n          if (!cell) {\n            push_value(o, 1, 0, \"\");\n            continue;\n          }\n\n          switch (cell.t) {\n            case 'n':\n              var val = DIF_XL ? cell.w : cell.v;\n              if (!val && cell.v != null) val = cell.v;\n\n              if (val == null) {\n                if (DIF_XL && cell.f && !cell.F) push_value(o, 1, 0, \"=\" + cell.f);else push_value(o, 1, 0, \"\");\n              } else push_value(o, 0, val, \"V\");\n\n              break;\n\n            case 'b':\n              push_value(o, 0, cell.v ? 1 : 0, cell.v ? \"TRUE\" : \"FALSE\");\n              break;\n\n            case 's':\n              push_value(o, 1, 0, !DIF_XL || isNaN(cell.v) ? cell.v : '=\"' + cell.v + '\"');\n              break;\n\n            case 'd':\n              if (!cell.w) cell.w = SSF_format(cell.z || table_fmt[14], datenum(parseDate(cell.v)));\n              if (DIF_XL) push_value(o, 0, cell.w, \"V\");else push_value(o, 1, 0, cell.w);\n              break;\n\n            default:\n              push_value(o, 1, 0, \"\");\n          }\n        }\n      }\n\n      push_value(o, -1, 0, \"EOD\");\n      var RS = \"\\r\\n\";\n      var oo = o.join(RS); //while((oo.length & 0x7F) != 0) oo += \"\\0\";\n\n      return oo;\n    };\n  }();\n\n  return {\n    to_workbook: dif_to_workbook,\n    to_sheet: dif_to_sheet,\n    from_sheet: sheet_to_dif\n  };\n}();\n\nvar ETH = /*#__PURE__*/function () {\n  function decode(s\n  /*:string*/\n  )\n  /*:string*/\n  {\n    return s.replace(/\\\\b/g, \"\\\\\").replace(/\\\\c/g, \":\").replace(/\\\\n/g, \"\\n\");\n  }\n\n  function encode(s\n  /*:string*/\n  )\n  /*:string*/\n  {\n    return s.replace(/\\\\/g, \"\\\\b\").replace(/:/g, \"\\\\c\").replace(/\\n/g, \"\\\\n\");\n  }\n\n  function eth_to_aoa(str\n  /*:string*/\n  , opts)\n  /*:AOA*/\n  {\n    var records = str.split('\\n'),\n        R = -1,\n        C = -1,\n        ri = 0,\n        arr\n    /*:AOA*/\n    = [];\n\n    for (; ri !== records.length; ++ri) {\n      var record = records[ri].trim().split(\":\");\n      if (record[0] !== 'cell') continue;\n      var addr = decode_cell(record[1]);\n      if (arr.length <= addr.r) for (R = arr.length; R <= addr.r; ++R) {\n        if (!arr[R]) arr[R] = [];\n      }\n      R = addr.r;\n      C = addr.c;\n\n      switch (record[2]) {\n        case 't':\n          arr[R][C] = decode(record[3]);\n          break;\n\n        case 'v':\n          arr[R][C] = +record[3];\n          break;\n\n        case 'vtf':\n          var _f = record[record.length - 1];\n\n        /* falls through */\n\n        case 'vtc':\n          switch (record[3]) {\n            case 'nl':\n              arr[R][C] = +record[4] ? true : false;\n              break;\n\n            default:\n              arr[R][C] = +record[4];\n              break;\n          }\n\n          if (record[2] == 'vtf') arr[R][C] = [arr[R][C], _f];\n      }\n    }\n\n    if (opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n    return arr;\n  }\n\n  function eth_to_sheet(d\n  /*:string*/\n  , opts)\n  /*:Worksheet*/\n  {\n    return aoa_to_sheet(eth_to_aoa(d, opts), opts);\n  }\n\n  function eth_to_workbook(d\n  /*:string*/\n  , opts)\n  /*:Workbook*/\n  {\n    return sheet_to_workbook(eth_to_sheet(d, opts), opts);\n  }\n\n  var header = [\"socialcalc:version:1.5\", \"MIME-Version: 1.0\", \"Content-Type: multipart/mixed; boundary=SocialCalcSpreadsheetControlSave\"].join(\"\\n\");\n  var sep = [\"--SocialCalcSpreadsheetControlSave\", \"Content-type: text/plain; charset=UTF-8\"].join(\"\\n\") + \"\\n\";\n  /* TODO: the other parts */\n\n  var meta = [\"# SocialCalc Spreadsheet Control Save\", \"part:sheet\"].join(\"\\n\");\n  var end = \"--SocialCalcSpreadsheetControlSave--\";\n\n  function sheet_to_eth_data(ws\n  /*:Worksheet*/\n  )\n  /*:string*/\n  {\n    if (!ws || !ws['!ref']) return \"\";\n    var o\n    /*:Array<string>*/\n    = [],\n        oo\n    /*:Array<string>*/\n    = [],\n        cell,\n        coord = \"\";\n    var r = decode_range(ws['!ref']);\n    var dense = Array.isArray(ws);\n\n    for (var R = r.s.r; R <= r.e.r; ++R) {\n      for (var C = r.s.c; C <= r.e.c; ++C) {\n        coord = encode_cell({\n          r: R,\n          c: C\n        });\n        cell = dense ? (ws[R] || [])[C] : ws[coord];\n        if (!cell || cell.v == null || cell.t === 'z') continue;\n        oo = [\"cell\", coord, 't'];\n\n        switch (cell.t) {\n          case 's':\n          case 'str':\n            oo.push(encode(cell.v));\n            break;\n\n          case 'n':\n            if (!cell.f) {\n              oo[2] = 'v';\n              oo[3] = cell.v;\n            } else {\n              oo[2] = 'vtf';\n              oo[3] = 'n';\n              oo[4] = cell.v;\n              oo[5] = encode(cell.f);\n            }\n\n            break;\n\n          case 'b':\n            oo[2] = 'vt' + (cell.f ? 'f' : 'c');\n            oo[3] = 'nl';\n            oo[4] = cell.v ? \"1\" : \"0\";\n            oo[5] = encode(cell.f || (cell.v ? 'TRUE' : 'FALSE'));\n            break;\n\n          case 'd':\n            var t = datenum(parseDate(cell.v));\n            oo[2] = 'vtc';\n            oo[3] = 'nd';\n            oo[4] = \"\" + t;\n            oo[5] = cell.w || SSF_format(cell.z || table_fmt[14], t);\n            break;\n\n          case 'e':\n            continue;\n        }\n\n        o.push(oo.join(\":\"));\n      }\n    }\n\n    o.push(\"sheet:c:\" + (r.e.c - r.s.c + 1) + \":r:\" + (r.e.r - r.s.r + 1) + \":tvf:1\");\n    o.push(\"valueformat:1:text-wiki\"); //o.push(\"copiedfrom:\" + ws['!ref']); // clipboard only\n\n    return o.join(\"\\n\");\n  }\n\n  function sheet_to_eth(ws\n  /*:Worksheet*/\n\n  /*::, opts:?any*/\n  )\n  /*:string*/\n  {\n    return [header, sep, meta, sep, sheet_to_eth_data(ws), end].join(\"\\n\"); // return [\"version:1.5\", sheet_to_eth_data(ws)].join(\"\\n\"); // clipboard form\n  }\n\n  return {\n    to_workbook: eth_to_workbook,\n    to_sheet: eth_to_sheet,\n    from_sheet: sheet_to_eth\n  };\n}();\n\nvar PRN = /*#__PURE__*/function () {\n  function set_text_arr(data\n  /*:string*/\n  , arr\n  /*:AOA*/\n  , R\n  /*:number*/\n  , C\n  /*:number*/\n  , o\n  /*:any*/\n  ) {\n    if (o.raw) arr[R][C] = data;else if (data === \"\") {\n      /* empty */\n    } else if (data === 'TRUE') arr[R][C] = true;else if (data === 'FALSE') arr[R][C] = false;else if (!isNaN(fuzzynum(data))) arr[R][C] = fuzzynum(data);else if (!isNaN(fuzzydate(data).getDate())) arr[R][C] = parseDate(data);else arr[R][C] = data;\n  }\n\n  function prn_to_aoa_str(f\n  /*:string*/\n  , opts)\n  /*:AOA*/\n  {\n    var o = opts || {};\n    var arr\n    /*:AOA*/\n    = []\n    /*:any*/\n    ;\n    if (!f || f.length === 0) return arr;\n    var lines = f.split(/[\\r\\n]/);\n    var L = lines.length - 1;\n\n    while (L >= 0 && lines[L].length === 0) {\n      --L;\n    }\n\n    var start = 10,\n        idx = 0;\n    var R = 0;\n\n    for (; R <= L; ++R) {\n      idx = lines[R].indexOf(\" \");\n      if (idx == -1) idx = lines[R].length;else idx++;\n      start = Math.max(start, idx);\n    }\n\n    for (R = 0; R <= L; ++R) {\n      arr[R] = [];\n      /* TODO: confirm that widths are always 10 */\n\n      var C = 0;\n      set_text_arr(lines[R].slice(0, start).trim(), arr, R, C, o);\n\n      for (C = 1; C <= (lines[R].length - start) / 10 + 1; ++C) {\n        set_text_arr(lines[R].slice(start + (C - 1) * 10, start + C * 10).trim(), arr, R, C, o);\n      }\n    }\n\n    if (o.sheetRows) arr = arr.slice(0, o.sheetRows);\n    return arr;\n  } // List of accepted CSV separators\n\n\n  var guess_seps = {\n    /*::[*/\n    0x2C\n    /*::]*/\n    : ',',\n\n    /*::[*/\n    0x09\n    /*::]*/\n    : \"\\t\",\n\n    /*::[*/\n    0x3B\n    /*::]*/\n    : ';',\n\n    /*::[*/\n    0x7C\n    /*::]*/\n    : '|'\n  }; // CSV separator weights to be used in case of equal numbers\n\n  var guess_sep_weights = {\n    /*::[*/\n    0x2C\n    /*::]*/\n    : 3,\n\n    /*::[*/\n    0x09\n    /*::]*/\n    : 2,\n\n    /*::[*/\n    0x3B\n    /*::]*/\n    : 1,\n\n    /*::[*/\n    0x7C\n    /*::]*/\n    : 0\n  };\n\n  function guess_sep(str) {\n    var cnt = {},\n        instr = false,\n        end = 0,\n        cc = 0;\n\n    for (; end < str.length; ++end) {\n      if ((cc = str.charCodeAt(end)) == 0x22) instr = !instr;else if (!instr && cc in guess_seps) cnt[cc] = (cnt[cc] || 0) + 1;\n    }\n\n    cc = [];\n\n    for (end in cnt) {\n      if (Object.prototype.hasOwnProperty.call(cnt, end)) {\n        cc.push([cnt[end], end]);\n      }\n    }\n\n    if (!cc.length) {\n      cnt = guess_sep_weights;\n\n      for (end in cnt) {\n        if (Object.prototype.hasOwnProperty.call(cnt, end)) {\n          cc.push([cnt[end], end]);\n        }\n      }\n    }\n\n    cc.sort(function (a, b) {\n      return a[0] - b[0] || guess_sep_weights[a[1]] - guess_sep_weights[b[1]];\n    });\n    return guess_seps[cc.pop()[1]] || 0x2C;\n  }\n\n  function dsv_to_sheet_str(str\n  /*:string*/\n  , opts)\n  /*:Worksheet*/\n  {\n    var o = opts || {};\n    var sep = \"\";\n    if (DENSE != null && o.dense == null) o.dense = DENSE;\n    var ws\n    /*:Worksheet*/\n    = o.dense ? []\n    /*:any*/\n    : {}\n    /*:any*/\n    ;\n    var range\n    /*:Range*/\n    = {\n      s: {\n        c: 0,\n        r: 0\n      },\n      e: {\n        c: 0,\n        r: 0\n      }\n    }\n    /*:any*/\n    ;\n\n    if (str.slice(0, 4) == \"sep=\") {\n      // If the line ends in \\r\\n\n      if (str.charCodeAt(5) == 13 && str.charCodeAt(6) == 10) {\n        sep = str.charAt(4);\n        str = str.slice(7);\n      } // If line ends in \\r OR \\n\n      else if (str.charCodeAt(5) == 13 || str.charCodeAt(5) == 10) {\n        sep = str.charAt(4);\n        str = str.slice(6);\n      } else sep = guess_sep(str.slice(0, 1024));\n    } else if (o && o.FS) sep = o.FS;else sep = guess_sep(str.slice(0, 1024));\n\n    var R = 0,\n        C = 0,\n        v = 0;\n    var start = 0,\n        end = 0,\n        sepcc = sep.charCodeAt(0),\n        instr = false,\n        cc = 0,\n        startcc = str.charCodeAt(0);\n    str = str.replace(/\\r\\n/mg, \"\\n\");\n\n    var _re\n    /*:?RegExp*/\n    = o.dateNF != null ? dateNF_regex(o.dateNF) : null;\n\n    function finish_cell() {\n      var s = str.slice(start, end);\n      var cell = {}\n      /*:any*/\n      ;\n      if (s.charAt(0) == '\"' && s.charAt(s.length - 1) == '\"') s = s.slice(1, -1).replace(/\"\"/g, '\"');\n      if (s.length === 0) cell.t = 'z';else if (o.raw) {\n        cell.t = 's';\n        cell.v = s;\n      } else if (s.trim().length === 0) {\n        cell.t = 's';\n        cell.v = s;\n      } else if (s.charCodeAt(0) == 0x3D) {\n        if (s.charCodeAt(1) == 0x22 && s.charCodeAt(s.length - 1) == 0x22) {\n          cell.t = 's';\n          cell.v = s.slice(2, -1).replace(/\"\"/g, '\"');\n        } else if (fuzzyfmla(s)) {\n          cell.t = 'n';\n          cell.f = s.slice(1);\n        } else {\n          cell.t = 's';\n          cell.v = s;\n        }\n      } else if (s == \"TRUE\") {\n        cell.t = 'b';\n        cell.v = true;\n      } else if (s == \"FALSE\") {\n        cell.t = 'b';\n        cell.v = false;\n      } else if (!isNaN(v = fuzzynum(s))) {\n        cell.t = 'n';\n        if (o.cellText !== false) cell.w = s;\n        cell.v = v;\n      } else if (!isNaN(fuzzydate(s).getDate()) || _re && s.match(_re)) {\n        cell.z = o.dateNF || table_fmt[14];\n        var k = 0;\n\n        if (_re && s.match(_re)) {\n          s = dateNF_fix(s, o.dateNF, s.match(_re) || []);\n          k = 1;\n        }\n\n        if (o.cellDates) {\n          cell.t = 'd';\n          cell.v = parseDate(s, k);\n        } else {\n          cell.t = 'n';\n          cell.v = datenum(parseDate(s, k));\n        }\n\n        if (o.cellText !== false) cell.w = SSF_format(cell.z, cell.v instanceof Date ? datenum(cell.v) : cell.v);\n        if (!o.cellNF) delete cell.z;\n      } else {\n        cell.t = 's';\n        cell.v = s;\n      }\n\n      if (cell.t == 'z') {} else if (o.dense) {\n        if (!ws[R]) ws[R] = [];\n        ws[R][C] = cell;\n      } else ws[encode_cell({\n        c: C,\n        r: R\n      })] = cell;\n\n      start = end + 1;\n      startcc = str.charCodeAt(start);\n      if (range.e.c < C) range.e.c = C;\n      if (range.e.r < R) range.e.r = R;\n      if (cc == sepcc) ++C;else {\n        C = 0;\n        ++R;\n        if (o.sheetRows && o.sheetRows <= R) return true;\n      }\n    }\n\n    outer: for (; end < str.length; ++end) {\n      switch (cc = str.charCodeAt(end)) {\n        case 0x22:\n          if (startcc === 0x22) instr = !instr;\n          break;\n\n        case sepcc:\n        case 0x0a:\n        case 0x0d:\n          if (!instr && finish_cell()) break outer;\n          break;\n\n        default:\n          break;\n      }\n    }\n\n    if (end - start > 0) finish_cell();\n    ws['!ref'] = encode_range(range);\n    return ws;\n  }\n\n  function prn_to_sheet_str(str\n  /*:string*/\n  , opts)\n  /*:Worksheet*/\n  {\n    if (!(opts && opts.PRN)) return dsv_to_sheet_str(str, opts);\n    if (opts.FS) return dsv_to_sheet_str(str, opts);\n    if (str.slice(0, 4) == \"sep=\") return dsv_to_sheet_str(str, opts);\n    if (str.indexOf(\"\\t\") >= 0 || str.indexOf(\",\") >= 0 || str.indexOf(\";\") >= 0) return dsv_to_sheet_str(str, opts);\n    return aoa_to_sheet(prn_to_aoa_str(str, opts), opts);\n  }\n\n  function prn_to_sheet(d\n  /*:RawData*/\n  , opts)\n  /*:Worksheet*/\n  {\n    var str = \"\",\n        bytes = opts.type == 'string' ? [0, 0, 0, 0] : firstbyte(d, opts);\n\n    switch (opts.type) {\n      case 'base64':\n        str = Base64_decode(d);\n        break;\n\n      case 'binary':\n        str = d;\n        break;\n\n      case 'buffer':\n        if (opts.codepage == 65001) str = d.toString('utf8'); // TODO: test if buf\n        else if (opts.codepage && typeof $cptable !== 'undefined') str = $cptable.utils.decode(opts.codepage, d);else str = has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d);\n        break;\n\n      case 'array':\n        str = cc2str(d);\n        break;\n\n      case 'string':\n        str = d;\n        break;\n\n      default:\n        throw new Error(\"Unrecognized type \" + opts.type);\n    }\n\n    if (bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str.slice(3));else if (opts.type != 'string' && opts.type != 'buffer' && opts.codepage == 65001) str = utf8read(str);else if (opts.type == 'binary' && typeof $cptable !== 'undefined' && opts.codepage) str = $cptable.utils.decode(opts.codepage, $cptable.utils.encode(28591, str));\n    if (str.slice(0, 19) == \"socialcalc:version:\") return ETH.to_sheet(opts.type == 'string' ? str : utf8read(str), opts);\n    return prn_to_sheet_str(str, opts);\n  }\n\n  function prn_to_workbook(d\n  /*:RawData*/\n  , opts)\n  /*:Workbook*/\n  {\n    return sheet_to_workbook(prn_to_sheet(d, opts), opts);\n  }\n\n  function sheet_to_prn(ws\n  /*:Worksheet*/\n\n  /*::, opts:?any*/\n  )\n  /*:string*/\n  {\n    var o\n    /*:Array<string>*/\n    = [];\n    var r = safe_decode_range(ws['!ref']),\n        cell\n    /*:Cell*/\n    ;\n    var dense = Array.isArray(ws);\n\n    for (var R = r.s.r; R <= r.e.r; ++R) {\n      var oo\n      /*:Array<string>*/\n      = [];\n\n      for (var C = r.s.c; C <= r.e.c; ++C) {\n        var coord = encode_cell({\n          r: R,\n          c: C\n        });\n        cell = dense ? (ws[R] || [])[C] : ws[coord];\n\n        if (!cell || cell.v == null) {\n          oo.push(\"          \");\n          continue;\n        }\n\n        var w = (cell.w || (format_cell(cell), cell.w) || \"\").slice(0, 10);\n\n        while (w.length < 10) {\n          w += \" \";\n        }\n\n        oo.push(w + (C === 0 ? \" \" : \"\"));\n      }\n\n      o.push(oo.join(\"\"));\n    }\n\n    return o.join(\"\\n\");\n  }\n\n  return {\n    to_workbook: prn_to_workbook,\n    to_sheet: prn_to_sheet,\n    from_sheet: sheet_to_prn\n  };\n}();\n/* Excel defaults to SYLK but warns if data is not valid */\n\n\nfunction read_wb_ID(d, opts) {\n  var o = opts || {},\n      OLD_WTF = !!o.WTF;\n  o.WTF = true;\n\n  try {\n    var out = SYLK.to_workbook(d, o);\n    o.WTF = OLD_WTF;\n    return out;\n  } catch (e) {\n    o.WTF = OLD_WTF;\n    if (!e.message.match(/SYLK bad record ID/) && OLD_WTF) throw e;\n    return PRN.to_workbook(d, opts);\n  }\n}\n\nvar WK_ = /*#__PURE__*/function () {\n  function lotushopper(data, cb\n  /*:RecordHopperCB*/\n  , opts\n  /*:any*/\n  ) {\n    if (!data) return;\n    prep_blob(data, data.l || 0);\n    var Enum = opts.Enum || WK1Enum;\n\n    while (data.l < data.length) {\n      var RT = data.read_shift(2);\n      var R = Enum[RT] || Enum[0xFFFF];\n      var length = data.read_shift(2);\n      var tgt = data.l + length;\n      var d = R.f && R.f(data, length, opts);\n      data.l = tgt;\n      if (cb(d, R, RT)) return;\n    }\n  }\n\n  function lotus_to_workbook(d\n  /*:RawData*/\n  , opts) {\n    switch (opts.type) {\n      case 'base64':\n        return lotus_to_workbook_buf(s2a(Base64_decode(d)), opts);\n\n      case 'binary':\n        return lotus_to_workbook_buf(s2a(d), opts);\n\n      case 'buffer':\n      case 'array':\n        return lotus_to_workbook_buf(d, opts);\n    }\n\n    throw \"Unsupported type \" + opts.type;\n  }\n\n  function lotus_to_workbook_buf(d, opts)\n  /*:Workbook*/\n  {\n    if (!d) return d;\n    var o = opts || {};\n    if (DENSE != null && o.dense == null) o.dense = DENSE;\n    var s\n    /*:Worksheet*/\n    = o.dense ? [] : {}\n    /*:any*/\n    ,\n        n = \"Sheet1\",\n        next_n = \"\",\n        sidx = 0;\n    var sheets = {},\n        snames = [],\n        realnames = [];\n    var refguess = {\n      s: {\n        r: 0,\n        c: 0\n      },\n      e: {\n        r: 0,\n        c: 0\n      }\n    };\n    var sheetRows = o.sheetRows || 0;\n\n    if (d[2] == 0x00) {\n      if (d[3] == 0x08 || d[3] == 0x09) {\n        if (d.length >= 16 && d[14] == 0x05 && d[15] === 0x6c) throw new Error(\"Unsupported Works 3 for Mac file\");\n      }\n    }\n\n    if (d[2] == 0x02) {\n      o.Enum = WK1Enum;\n      lotushopper(d, function (val, R, RT) {\n        switch (RT) {\n          case 0x00:\n            /* BOF */\n            o.vers = val;\n            if (val >= 0x1000) o.qpro = true;\n            break;\n\n          case 0x06:\n            refguess = val;\n            break;\n\n          /* RANGE */\n\n          case 0xCC:\n            if (val) next_n = val;\n            break;\n\n          /* SHEETNAMECS */\n\n          case 0xDE:\n            next_n = val;\n            break;\n\n          /* SHEETNAMELP */\n\n          case 0x0F:\n          /* LABEL */\n\n          case 0x33:\n            /* STRING */\n            if (!o.qpro) val[1].v = val[1].v.slice(1);\n\n          /* falls through */\n\n          case 0x0D:\n          /* INTEGER */\n\n          case 0x0E:\n          /* NUMBER */\n\n          case 0x10:\n            /* FORMULA */\n\n            /* TODO: actual translation of the format code */\n            if (RT == 0x0E && (val[2] & 0x70) == 0x70 && (val[2] & 0x0F) > 1 && (val[2] & 0x0F) < 15) {\n              val[1].z = o.dateNF || table_fmt[14];\n\n              if (o.cellDates) {\n                val[1].t = 'd';\n                val[1].v = numdate(val[1].v);\n              }\n            }\n\n            if (o.qpro) {\n              if (val[3] > sidx) {\n                s[\"!ref\"] = encode_range(refguess);\n                sheets[n] = s;\n                snames.push(n);\n                s = o.dense ? [] : {};\n                refguess = {\n                  s: {\n                    r: 0,\n                    c: 0\n                  },\n                  e: {\n                    r: 0,\n                    c: 0\n                  }\n                };\n                sidx = val[3];\n                n = next_n || \"Sheet\" + (sidx + 1);\n                next_n = \"\";\n              }\n            }\n\n            var tmpcell = o.dense ? (s[val[0].r] || [])[val[0].c] : s[encode_cell(val[0])];\n\n            if (tmpcell) {\n              tmpcell.t = val[1].t;\n              tmpcell.v = val[1].v;\n              if (val[1].z != null) tmpcell.z = val[1].z;\n              if (val[1].f != null) tmpcell.f = val[1].f;\n              break;\n            }\n\n            if (o.dense) {\n              if (!s[val[0].r]) s[val[0].r] = [];\n              s[val[0].r][val[0].c] = val[1];\n            } else s[encode_cell(val[0])] = val[1];\n\n            break;\n\n          default:\n        }\n      }, o);\n    } else if (d[2] == 0x1A || d[2] == 0x0E) {\n      o.Enum = WK3Enum;\n\n      if (d[2] == 0x0E) {\n        o.qpro = true;\n        d.l = 0;\n      }\n\n      lotushopper(d, function (val, R, RT) {\n        switch (RT) {\n          case 0xCC:\n            n = val;\n            break;\n\n          /* SHEETNAMECS */\n\n          case 0x16:\n            /* LABEL16 */\n            val[1].v = val[1].v.slice(1);\n\n          /* falls through */\n\n          case 0x17:\n          /* NUMBER17 */\n\n          case 0x18:\n          /* NUMBER18 */\n\n          case 0x19:\n          /* FORMULA19 */\n\n          case 0x25:\n          /* NUMBER25 */\n\n          case 0x27:\n          /* NUMBER27 */\n\n          case 0x28:\n            /* FORMULA28 */\n            if (val[3] > sidx) {\n              s[\"!ref\"] = encode_range(refguess);\n              sheets[n] = s;\n              snames.push(n);\n              s = o.dense ? [] : {};\n              refguess = {\n                s: {\n                  r: 0,\n                  c: 0\n                },\n                e: {\n                  r: 0,\n                  c: 0\n                }\n              };\n              sidx = val[3];\n              n = \"Sheet\" + (sidx + 1);\n            }\n\n            if (sheetRows > 0 && val[0].r >= sheetRows) break;\n\n            if (o.dense) {\n              if (!s[val[0].r]) s[val[0].r] = [];\n              s[val[0].r][val[0].c] = val[1];\n            } else s[encode_cell(val[0])] = val[1];\n\n            if (refguess.e.c < val[0].c) refguess.e.c = val[0].c;\n            if (refguess.e.r < val[0].r) refguess.e.r = val[0].r;\n            break;\n\n          case 0x1B:\n            /* XFORMAT */\n            if (val[0x36b0]) realnames[val[0x36b0][0]] = val[0x36b0][1];\n            break;\n\n          case 0x0601:\n            /* SHEETINFOQP */\n            realnames[val[0]] = val[1];\n            if (val[0] == sidx) n = val[1];\n            break;\n\n          default:\n            break;\n        }\n      }, o);\n    } else throw new Error(\"Unrecognized LOTUS BOF \" + d[2]);\n\n    s[\"!ref\"] = encode_range(refguess);\n    sheets[next_n || n] = s;\n    snames.push(next_n || n);\n    if (!realnames.length) return {\n      SheetNames: snames,\n      Sheets: sheets\n    };\n    var osheets = {},\n        rnames = [];\n    /* TODO: verify no collisions */\n\n    for (var i = 0; i < realnames.length; ++i) {\n      if (sheets[snames[i]]) {\n        rnames.push(realnames[i] || snames[i]);\n        osheets[realnames[i]] = sheets[realnames[i]] || sheets[snames[i]];\n      } else {\n        rnames.push(realnames[i]);\n        osheets[realnames[i]] = {\n          \"!ref\": \"A1\"\n        };\n      }\n    }\n\n    return {\n      SheetNames: rnames,\n      Sheets: osheets\n    };\n  }\n\n  function sheet_to_wk1(ws\n  /*:Worksheet*/\n  , opts\n  /*:WriteOpts*/\n  ) {\n    var o = opts || {};\n    if (+o.codepage >= 0) set_cp(+o.codepage);\n    if (o.type == \"string\") throw new Error(\"Cannot write WK1 to JS string\");\n    var ba = buf_array();\n    var range = safe_decode_range(ws[\"!ref\"]);\n    var dense = Array.isArray(ws);\n    var cols = [];\n    write_biff_rec(ba, 0x00, write_BOF_WK1(0x0406));\n    write_biff_rec(ba, 0x06, write_RANGE(range));\n    var max_R = Math.min(range.e.r, 8191);\n\n    for (var R = range.s.r; R <= max_R; ++R) {\n      var rr = encode_row(R);\n\n      for (var C = range.s.c; C <= range.e.c; ++C) {\n        if (R === range.s.r) cols[C] = encode_col(C);\n        var ref = cols[C] + rr;\n        var cell = dense ? (ws[R] || [])[C] : ws[ref];\n        if (!cell || cell.t == \"z\") continue;\n        /* TODO: formula records */\n\n        if (cell.t == \"n\") {\n          if ((cell.v | 0) == cell.v && cell.v >= -32768 && cell.v <= 32767) write_biff_rec(ba, 0x0d, write_INTEGER(R, C, cell.v));else write_biff_rec(ba, 0x0e, write_NUMBER(R, C, cell.v));\n        } else {\n          var str = format_cell(cell);\n          write_biff_rec(ba, 0x0F, write_LABEL(R, C, str.slice(0, 239)));\n        }\n      }\n    }\n\n    write_biff_rec(ba, 0x01);\n    return ba.end();\n  }\n\n  function book_to_wk3(wb\n  /*:Workbook*/\n  , opts\n  /*:WriteOpts*/\n  ) {\n    var o = opts || {};\n    if (+o.codepage >= 0) set_cp(+o.codepage);\n    if (o.type == \"string\") throw new Error(\"Cannot write WK3 to JS string\");\n    var ba = buf_array();\n    write_biff_rec(ba, 0x00, write_BOF_WK3(wb));\n\n    for (var i = 0, cnt = 0; i < wb.SheetNames.length; ++i) {\n      if ((wb.Sheets[wb.SheetNames[i]] || {})[\"!ref\"]) write_biff_rec(ba, 0x1b, write_XFORMAT_SHEETNAME(wb.SheetNames[i], cnt++));\n    }\n\n    var wsidx = 0;\n\n    for (i = 0; i < wb.SheetNames.length; ++i) {\n      var ws = wb.Sheets[wb.SheetNames[i]];\n      if (!ws || !ws[\"!ref\"]) continue;\n      var range = safe_decode_range(ws[\"!ref\"]);\n      var dense = Array.isArray(ws);\n      var cols = [];\n      var max_R = Math.min(range.e.r, 8191);\n\n      for (var R = range.s.r; R <= max_R; ++R) {\n        var rr = encode_row(R);\n\n        for (var C = range.s.c; C <= range.e.c; ++C) {\n          if (R === range.s.r) cols[C] = encode_col(C);\n          var ref = cols[C] + rr;\n          var cell = dense ? (ws[R] || [])[C] : ws[ref];\n          if (!cell || cell.t == \"z\") continue;\n          /* TODO: FORMULA19 NUMBER18 records */\n\n          if (cell.t == \"n\") {\n            write_biff_rec(ba, 0x17, write_NUMBER_17(R, C, wsidx, cell.v));\n          } else {\n            var str = format_cell(cell);\n            /* TODO: max len? */\n\n            write_biff_rec(ba, 0x16, write_LABEL_16(R, C, wsidx, str.slice(0, 239)));\n          }\n        }\n      }\n\n      ++wsidx;\n    }\n\n    write_biff_rec(ba, 0x01);\n    return ba.end();\n  }\n\n  function write_BOF_WK1(v\n  /*:number*/\n  ) {\n    var out = new_buf(2);\n    out.write_shift(2, v);\n    return out;\n  }\n\n  function write_BOF_WK3(wb\n  /*:Workbook*/\n  ) {\n    var out = new_buf(26);\n    out.write_shift(2, 0x1000);\n    out.write_shift(2, 0x0004);\n    out.write_shift(4, 0x0000);\n    var rows = 0,\n        cols = 0,\n        wscnt = 0;\n\n    for (var i = 0; i < wb.SheetNames.length; ++i) {\n      var name = wb.SheetNames[i];\n      var ws = wb.Sheets[name];\n      if (!ws || !ws[\"!ref\"]) continue;\n      ++wscnt;\n      var range = decode_range(ws[\"!ref\"]);\n      if (rows < range.e.r) rows = range.e.r;\n      if (cols < range.e.c) cols = range.e.c;\n    }\n\n    if (rows > 8191) rows = 8191;\n    out.write_shift(2, rows);\n    out.write_shift(1, wscnt);\n    out.write_shift(1, cols);\n    out.write_shift(2, 0x00);\n    out.write_shift(2, 0x00);\n    out.write_shift(1, 0x01);\n    out.write_shift(1, 0x02);\n    out.write_shift(4, 0);\n    out.write_shift(4, 0);\n    return out;\n  }\n\n  function parse_RANGE(blob, length, opts) {\n    var o = {\n      s: {\n        c: 0,\n        r: 0\n      },\n      e: {\n        c: 0,\n        r: 0\n      }\n    };\n\n    if (length == 8 && opts.qpro) {\n      o.s.c = blob.read_shift(1);\n      blob.l++;\n      o.s.r = blob.read_shift(2);\n      o.e.c = blob.read_shift(1);\n      blob.l++;\n      o.e.r = blob.read_shift(2);\n      return o;\n    }\n\n    o.s.c = blob.read_shift(2);\n    o.s.r = blob.read_shift(2);\n    if (length == 12 && opts.qpro) blob.l += 2;\n    o.e.c = blob.read_shift(2);\n    o.e.r = blob.read_shift(2);\n    if (length == 12 && opts.qpro) blob.l += 2;\n    if (o.s.c == 0xFFFF) o.s.c = o.e.c = o.s.r = o.e.r = 0;\n    return o;\n  }\n\n  function write_RANGE(range) {\n    var out = new_buf(8);\n    out.write_shift(2, range.s.c);\n    out.write_shift(2, range.s.r);\n    out.write_shift(2, range.e.c);\n    out.write_shift(2, range.e.r);\n    return out;\n  }\n\n  function parse_cell(blob, length, opts) {\n    var o = [{\n      c: 0,\n      r: 0\n    }, {\n      t: 'n',\n      v: 0\n    }, 0, 0];\n\n    if (opts.qpro && opts.vers != 0x5120) {\n      o[0].c = blob.read_shift(1);\n      o[3] = blob.read_shift(1);\n      o[0].r = blob.read_shift(2);\n      blob.l += 2;\n    } else {\n      o[2] = blob.read_shift(1);\n      o[0].c = blob.read_shift(2);\n      o[0].r = blob.read_shift(2);\n    }\n\n    return o;\n  }\n\n  function parse_LABEL(blob, length, opts) {\n    var tgt = blob.l + length;\n    var o = parse_cell(blob, length, opts);\n    o[1].t = 's';\n\n    if (opts.vers == 0x5120) {\n      blob.l++;\n      var len = blob.read_shift(1);\n      o[1].v = blob.read_shift(len, 'utf8');\n      return o;\n    }\n\n    if (opts.qpro) blob.l++;\n    o[1].v = blob.read_shift(tgt - blob.l, 'cstr');\n    return o;\n  }\n\n  function write_LABEL(R, C, s) {\n    /* TODO: encoding */\n    var o = new_buf(7 + s.length);\n    o.write_shift(1, 0xFF);\n    o.write_shift(2, C);\n    o.write_shift(2, R);\n    o.write_shift(1, 0x27); // ??\n\n    for (var i = 0; i < o.length; ++i) {\n      var cc = s.charCodeAt(i);\n      o.write_shift(1, cc >= 0x80 ? 0x5F : cc);\n    }\n\n    o.write_shift(1, 0);\n    return o;\n  }\n\n  function parse_INTEGER(blob, length, opts) {\n    var o = parse_cell(blob, length, opts);\n    o[1].v = blob.read_shift(2, 'i');\n    return o;\n  }\n\n  function write_INTEGER(R, C, v) {\n    var o = new_buf(7);\n    o.write_shift(1, 0xFF);\n    o.write_shift(2, C);\n    o.write_shift(2, R);\n    o.write_shift(2, v, 'i');\n    return o;\n  }\n\n  function parse_NUMBER(blob, length, opts) {\n    var o = parse_cell(blob, length, opts);\n    o[1].v = blob.read_shift(8, 'f');\n    return o;\n  }\n\n  function write_NUMBER(R, C, v) {\n    var o = new_buf(13);\n    o.write_shift(1, 0xFF);\n    o.write_shift(2, C);\n    o.write_shift(2, R);\n    o.write_shift(8, v, 'f');\n    return o;\n  }\n\n  function parse_FORMULA(blob, length, opts) {\n    var tgt = blob.l + length;\n    var o = parse_cell(blob, length, opts);\n    /* TODO: formula */\n\n    o[1].v = blob.read_shift(8, 'f');\n    if (opts.qpro) blob.l = tgt;else {\n      var flen = blob.read_shift(2);\n      wk1_fmla_to_csf(blob.slice(blob.l, blob.l + flen), o);\n      blob.l += flen;\n    }\n    return o;\n  }\n\n  function wk1_parse_rc(B, V, col) {\n    var rel = V & 0x8000;\n    V &= ~0x8000;\n    V = (rel ? B : 0) + (V >= 0x2000 ? V - 0x4000 : V);\n    return (rel ? \"\" : \"$\") + (col ? encode_col(V) : encode_row(V));\n  }\n  /* var oprec = [\n  \t8, 8, 8, 8, 8, 8, 8, 8, 6, 4, 4, 5, 5, 7, 3, 3,\n  \t3, 3, 3, 3, 1, 1, 2, 6, 8, 8, 8, 8, 8, 8, 8, 8\n  ]; */\n\n  /* TODO: flesh out */\n\n\n  var FuncTab = {\n    0x33: [\"FALSE\", 0],\n    0x34: [\"TRUE\", 0],\n    0x46: [\"LEN\", 1],\n    0x50: [\"SUM\", 69],\n    0x51: [\"AVERAGEA\", 69],\n    0x52: [\"COUNTA\", 69],\n    0x53: [\"MINA\", 69],\n    0x54: [\"MAXA\", 69],\n    0x6F: [\"T\", 1]\n  };\n  var BinOpTab = [\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", // eslint-disable-line no-mixed-spaces-and-tabs\n  \"\", \"+\", \"-\", \"*\", \"/\", \"^\", \"=\", \"<>\", // eslint-disable-line no-mixed-spaces-and-tabs\n  \"<=\", \">=\", \"<\", \">\", \"\", \"\", \"\", \"\", // eslint-disable-line no-mixed-spaces-and-tabs\n  \"&\", \"\", \"\", \"\", \"\", \"\", \"\", \"\" // eslint-disable-line no-mixed-spaces-and-tabs\n  ];\n\n  function wk1_fmla_to_csf(blob, o) {\n    prep_blob(blob, 0);\n    var out = [],\n        argc = 0,\n        R = \"\",\n        C = \"\",\n        argL = \"\",\n        argR = \"\";\n\n    while (blob.l < blob.length) {\n      var cc = blob[blob.l++];\n\n      switch (cc) {\n        case 0x00:\n          out.push(blob.read_shift(8, 'f'));\n          break;\n\n        case 0x01:\n          {\n            C = wk1_parse_rc(o[0].c, blob.read_shift(2), true);\n            R = wk1_parse_rc(o[0].r, blob.read_shift(2), false);\n            out.push(C + R);\n          }\n          break;\n\n        case 0x02:\n          {\n            var c = wk1_parse_rc(o[0].c, blob.read_shift(2), true);\n            var r = wk1_parse_rc(o[0].r, blob.read_shift(2), false);\n            C = wk1_parse_rc(o[0].c, blob.read_shift(2), true);\n            R = wk1_parse_rc(o[0].r, blob.read_shift(2), false);\n            out.push(c + r + \":\" + C + R);\n          }\n          break;\n\n        case 0x03:\n          if (blob.l < blob.length) {\n            console.error(\"WK1 premature formula end\");\n            return;\n          }\n\n          break;\n\n        case 0x04:\n          out.push(\"(\" + out.pop() + \")\");\n          break;\n\n        case 0x05:\n          out.push(blob.read_shift(2));\n          break;\n\n        case 0x06:\n          {\n            /* TODO: text encoding */\n            var Z = \"\";\n\n            while (cc = blob[blob.l++]) {\n              Z += String.fromCharCode(cc);\n            }\n\n            out.push('\"' + Z.replace(/\"/g, '\"\"') + '\"');\n          }\n          break;\n\n        case 0x08:\n          out.push(\"-\" + out.pop());\n          break;\n\n        case 0x17:\n          out.push(\"+\" + out.pop());\n          break;\n\n        case 0x16:\n          out.push(\"NOT(\" + out.pop() + \")\");\n          break;\n\n        case 0x14:\n        case 0x15:\n          {\n            argR = out.pop();\n            argL = out.pop();\n            out.push([\"AND\", \"OR\"][cc - 0x14] + \"(\" + argL + \",\" + argR + \")\");\n          }\n          break;\n\n        default:\n          if (cc < 0x20 && BinOpTab[cc]) {\n            argR = out.pop();\n            argL = out.pop();\n            out.push(argL + BinOpTab[cc] + argR);\n          } else if (FuncTab[cc]) {\n            argc = FuncTab[cc][1];\n            if (argc == 69) argc = blob[blob.l++];\n\n            if (argc > out.length) {\n              console.error(\"WK1 bad formula parse 0x\" + cc.toString(16) + \":|\" + out.join(\"|\") + \"|\");\n              return;\n            }\n\n            var args = out.slice(-argc);\n            out.length -= argc;\n            out.push(FuncTab[cc][0] + \"(\" + args.join(\",\") + \")\");\n          } else if (cc <= 0x07) return console.error(\"WK1 invalid opcode \" + cc.toString(16));else if (cc <= 0x18) return console.error(\"WK1 unsupported op \" + cc.toString(16));else if (cc <= 0x1E) return console.error(\"WK1 invalid opcode \" + cc.toString(16));else if (cc <= 0x73) return console.error(\"WK1 unsupported function opcode \" + cc.toString(16)); // possible future functions ??\n          else return console.error(\"WK1 unrecognized opcode \" + cc.toString(16));\n\n      }\n    }\n\n    if (out.length == 1) o[1].f = \"\" + out[0];else console.error(\"WK1 bad formula parse |\" + out.join(\"|\") + \"|\");\n  }\n\n  function parse_cell_3(blob\n  /*::, length*/\n  ) {\n    var o = [{\n      c: 0,\n      r: 0\n    }, {\n      t: 'n',\n      v: 0\n    }, 0];\n    o[0].r = blob.read_shift(2);\n    o[3] = blob[blob.l++];\n    o[0].c = blob[blob.l++];\n    return o;\n  }\n\n  function parse_LABEL_16(blob, length) {\n    var o = parse_cell_3(blob, length);\n    o[1].t = 's';\n    o[1].v = blob.read_shift(length - 4, 'cstr');\n    return o;\n  }\n\n  function write_LABEL_16(R, C, wsidx, s) {\n    /* TODO: encoding */\n    var o = new_buf(6 + s.length);\n    o.write_shift(2, R);\n    o.write_shift(1, wsidx);\n    o.write_shift(1, C);\n    o.write_shift(1, 0x27);\n\n    for (var i = 0; i < s.length; ++i) {\n      var cc = s.charCodeAt(i);\n      o.write_shift(1, cc >= 0x80 ? 0x5F : cc);\n    }\n\n    o.write_shift(1, 0);\n    return o;\n  }\n\n  function parse_NUMBER_18(blob, length) {\n    var o = parse_cell_3(blob, length);\n    o[1].v = blob.read_shift(2);\n    var v = o[1].v >> 1;\n\n    if (o[1].v & 0x1) {\n      switch (v & 0x07) {\n        case 0:\n          v = (v >> 3) * 5000;\n          break;\n\n        case 1:\n          v = (v >> 3) * 500;\n          break;\n\n        case 2:\n          v = (v >> 3) / 20;\n          break;\n\n        case 3:\n          v = (v >> 3) / 200;\n          break;\n\n        case 4:\n          v = (v >> 3) / 2000;\n          break;\n\n        case 5:\n          v = (v >> 3) / 20000;\n          break;\n\n        case 6:\n          v = (v >> 3) / 16;\n          break;\n\n        case 7:\n          v = (v >> 3) / 64;\n          break;\n      }\n    }\n\n    o[1].v = v;\n    return o;\n  }\n\n  function parse_NUMBER_17(blob, length) {\n    var o = parse_cell_3(blob, length);\n    var v1 = blob.read_shift(4);\n    var v2 = blob.read_shift(4);\n    var e = blob.read_shift(2);\n\n    if (e == 0xFFFF) {\n      if (v1 === 0 && v2 === 0xC0000000) {\n        o[1].t = \"e\";\n        o[1].v = 0x0F;\n      } // ERR -> #VALUE!\n      else if (v1 === 0 && v2 === 0xD0000000) {\n        o[1].t = \"e\";\n        o[1].v = 0x2A;\n      } // NA -> #N/A\n      else o[1].v = 0;\n\n      return o;\n    }\n\n    var s = e & 0x8000;\n    e = (e & 0x7FFF) - 16446;\n    o[1].v = (1 - s * 2) * (v2 * Math.pow(2, e + 32) + v1 * Math.pow(2, e));\n    return o;\n  }\n\n  function write_NUMBER_17(R, C, wsidx, v) {\n    var o = new_buf(14);\n    o.write_shift(2, R);\n    o.write_shift(1, wsidx);\n    o.write_shift(1, C);\n\n    if (v == 0) {\n      o.write_shift(4, 0);\n      o.write_shift(4, 0);\n      o.write_shift(2, 0xFFFF);\n      return o;\n    }\n\n    var s = 0,\n        e = 0,\n        v1 = 0,\n        v2 = 0;\n\n    if (v < 0) {\n      s = 1;\n      v = -v;\n    }\n\n    e = Math.log2(v) | 0;\n    v /= Math.pow(2, e - 31);\n    v2 = v >>> 0;\n\n    if ((v2 & 0x80000000) == 0) {\n      v /= 2;\n      ++e;\n      v2 = v >>> 0;\n    }\n\n    v -= v2;\n    v2 |= 0x80000000;\n    v2 >>>= 0;\n    v *= Math.pow(2, 32);\n    v1 = v >>> 0;\n    o.write_shift(4, v1);\n    o.write_shift(4, v2);\n    e += 0x3FFF + (s ? 0x8000 : 0);\n    o.write_shift(2, e);\n    return o;\n  }\n\n  function parse_FORMULA_19(blob, length) {\n    var o = parse_NUMBER_17(blob, 14);\n    blob.l += length - 14;\n    /* TODO: WK3 formula */\n\n    return o;\n  }\n\n  function parse_NUMBER_25(blob, length) {\n    var o = parse_cell_3(blob, length);\n    var v1 = blob.read_shift(4);\n    o[1].v = v1 >> 6;\n    return o;\n  }\n\n  function parse_NUMBER_27(blob, length) {\n    var o = parse_cell_3(blob, length);\n    var v1 = blob.read_shift(8, 'f');\n    o[1].v = v1;\n    return o;\n  }\n\n  function parse_FORMULA_28(blob, length) {\n    var o = parse_NUMBER_27(blob, 14);\n    blob.l += length - 10;\n    /* TODO: formula */\n\n    return o;\n  }\n\n  function parse_SHEETNAMECS(blob, length) {\n    return blob[blob.l + length - 1] == 0 ? blob.read_shift(length, 'cstr') : \"\";\n  }\n\n  function parse_SHEETNAMELP(blob, length) {\n    var len = blob[blob.l++];\n    if (len > length - 1) len = length - 1;\n    var o = \"\";\n\n    while (o.length < len) {\n      o += String.fromCharCode(blob[blob.l++]);\n    }\n\n    return o;\n  }\n\n  function parse_SHEETINFOQP(blob, length, opts) {\n    if (!opts.qpro || length < 21) return;\n    var id = blob.read_shift(1);\n    blob.l += 17;\n    blob.l += 1; //var len = blob.read_shift(1);\n\n    blob.l += 2;\n    var nm = blob.read_shift(length - 21, 'cstr');\n    return [id, nm];\n  }\n\n  function parse_XFORMAT(blob, length) {\n    var o = {},\n        tgt = blob.l + length;\n\n    while (blob.l < tgt) {\n      var dt = blob.read_shift(2);\n\n      if (dt == 0x36b0) {\n        o[dt] = [0, \"\"];\n        o[dt][0] = blob.read_shift(2);\n\n        while (blob[blob.l]) {\n          o[dt][1] += String.fromCharCode(blob[blob.l]);\n          blob.l++;\n        }\n\n        blob.l++;\n      } // TODO: 0x3a99 ??\n\n    }\n\n    return o;\n  }\n\n  function write_XFORMAT_SHEETNAME(name, wsidx) {\n    var out = new_buf(5 + name.length);\n    out.write_shift(2, 0x36b0);\n    out.write_shift(2, wsidx);\n\n    for (var i = 0; i < name.length; ++i) {\n      var cc = name.charCodeAt(i);\n      out[out.l++] = cc > 0x7F ? 0x5F : cc;\n    }\n\n    out[out.l++] = 0;\n    return out;\n  }\n\n  var WK1Enum = {\n    /*::[*/\n    0x0000\n    /*::]*/\n    : {\n      n: \"BOF\",\n      f: parseuint16\n    },\n\n    /*::[*/\n    0x0001\n    /*::]*/\n    : {\n      n: \"EOF\"\n    },\n\n    /*::[*/\n    0x0002\n    /*::]*/\n    : {\n      n: \"CALCMODE\"\n    },\n\n    /*::[*/\n    0x0003\n    /*::]*/\n    : {\n      n: \"CALCORDER\"\n    },\n\n    /*::[*/\n    0x0004\n    /*::]*/\n    : {\n      n: \"SPLIT\"\n    },\n\n    /*::[*/\n    0x0005\n    /*::]*/\n    : {\n      n: \"SYNC\"\n    },\n\n    /*::[*/\n    0x0006\n    /*::]*/\n    : {\n      n: \"RANGE\",\n      f: parse_RANGE\n    },\n\n    /*::[*/\n    0x0007\n    /*::]*/\n    : {\n      n: \"WINDOW1\"\n    },\n\n    /*::[*/\n    0x0008\n    /*::]*/\n    : {\n      n: \"COLW1\"\n    },\n\n    /*::[*/\n    0x0009\n    /*::]*/\n    : {\n      n: \"WINTWO\"\n    },\n\n    /*::[*/\n    0x000A\n    /*::]*/\n    : {\n      n: \"COLW2\"\n    },\n\n    /*::[*/\n    0x000B\n    /*::]*/\n    : {\n      n: \"NAME\"\n    },\n\n    /*::[*/\n    0x000C\n    /*::]*/\n    : {\n      n: \"BLANK\"\n    },\n\n    /*::[*/\n    0x000D\n    /*::]*/\n    : {\n      n: \"INTEGER\",\n      f: parse_INTEGER\n    },\n\n    /*::[*/\n    0x000E\n    /*::]*/\n    : {\n      n: \"NUMBER\",\n      f: parse_NUMBER\n    },\n\n    /*::[*/\n    0x000F\n    /*::]*/\n    : {\n      n: \"LABEL\",\n      f: parse_LABEL\n    },\n\n    /*::[*/\n    0x0010\n    /*::]*/\n    : {\n      n: \"FORMULA\",\n      f: parse_FORMULA\n    },\n\n    /*::[*/\n    0x0018\n    /*::]*/\n    : {\n      n: \"TABLE\"\n    },\n\n    /*::[*/\n    0x0019\n    /*::]*/\n    : {\n      n: \"ORANGE\"\n    },\n\n    /*::[*/\n    0x001A\n    /*::]*/\n    : {\n      n: \"PRANGE\"\n    },\n\n    /*::[*/\n    0x001B\n    /*::]*/\n    : {\n      n: \"SRANGE\"\n    },\n\n    /*::[*/\n    0x001C\n    /*::]*/\n    : {\n      n: \"FRANGE\"\n    },\n\n    /*::[*/\n    0x001D\n    /*::]*/\n    : {\n      n: \"KRANGE1\"\n    },\n\n    /*::[*/\n    0x0020\n    /*::]*/\n    : {\n      n: \"HRANGE\"\n    },\n\n    /*::[*/\n    0x0023\n    /*::]*/\n    : {\n      n: \"KRANGE2\"\n    },\n\n    /*::[*/\n    0x0024\n    /*::]*/\n    : {\n      n: \"PROTEC\"\n    },\n\n    /*::[*/\n    0x0025\n    /*::]*/\n    : {\n      n: \"FOOTER\"\n    },\n\n    /*::[*/\n    0x0026\n    /*::]*/\n    : {\n      n: \"HEADER\"\n    },\n\n    /*::[*/\n    0x0027\n    /*::]*/\n    : {\n      n: \"SETUP\"\n    },\n\n    /*::[*/\n    0x0028\n    /*::]*/\n    : {\n      n: \"MARGINS\"\n    },\n\n    /*::[*/\n    0x0029\n    /*::]*/\n    : {\n      n: \"LABELFMT\"\n    },\n\n    /*::[*/\n    0x002A\n    /*::]*/\n    : {\n      n: \"TITLES\"\n    },\n\n    /*::[*/\n    0x002B\n    /*::]*/\n    : {\n      n: \"SHEETJS\"\n    },\n\n    /*::[*/\n    0x002D\n    /*::]*/\n    : {\n      n: \"GRAPH\"\n    },\n\n    /*::[*/\n    0x002E\n    /*::]*/\n    : {\n      n: \"NGRAPH\"\n    },\n\n    /*::[*/\n    0x002F\n    /*::]*/\n    : {\n      n: \"CALCCOUNT\"\n    },\n\n    /*::[*/\n    0x0030\n    /*::]*/\n    : {\n      n: \"UNFORMATTED\"\n    },\n\n    /*::[*/\n    0x0031\n    /*::]*/\n    : {\n      n: \"CURSORW12\"\n    },\n\n    /*::[*/\n    0x0032\n    /*::]*/\n    : {\n      n: \"WINDOW\"\n    },\n\n    /*::[*/\n    0x0033\n    /*::]*/\n    : {\n      n: \"STRING\",\n      f: parse_LABEL\n    },\n\n    /*::[*/\n    0x0037\n    /*::]*/\n    : {\n      n: \"PASSWORD\"\n    },\n\n    /*::[*/\n    0x0038\n    /*::]*/\n    : {\n      n: \"LOCKED\"\n    },\n\n    /*::[*/\n    0x003C\n    /*::]*/\n    : {\n      n: \"QUERY\"\n    },\n\n    /*::[*/\n    0x003D\n    /*::]*/\n    : {\n      n: \"QUERYNAME\"\n    },\n\n    /*::[*/\n    0x003E\n    /*::]*/\n    : {\n      n: \"PRINT\"\n    },\n\n    /*::[*/\n    0x003F\n    /*::]*/\n    : {\n      n: \"PRINTNAME\"\n    },\n\n    /*::[*/\n    0x0040\n    /*::]*/\n    : {\n      n: \"GRAPH2\"\n    },\n\n    /*::[*/\n    0x0041\n    /*::]*/\n    : {\n      n: \"GRAPHNAME\"\n    },\n\n    /*::[*/\n    0x0042\n    /*::]*/\n    : {\n      n: \"ZOOM\"\n    },\n\n    /*::[*/\n    0x0043\n    /*::]*/\n    : {\n      n: \"SYMSPLIT\"\n    },\n\n    /*::[*/\n    0x0044\n    /*::]*/\n    : {\n      n: \"NSROWS\"\n    },\n\n    /*::[*/\n    0x0045\n    /*::]*/\n    : {\n      n: \"NSCOLS\"\n    },\n\n    /*::[*/\n    0x0046\n    /*::]*/\n    : {\n      n: \"RULER\"\n    },\n\n    /*::[*/\n    0x0047\n    /*::]*/\n    : {\n      n: \"NNAME\"\n    },\n\n    /*::[*/\n    0x0048\n    /*::]*/\n    : {\n      n: \"ACOMM\"\n    },\n\n    /*::[*/\n    0x0049\n    /*::]*/\n    : {\n      n: \"AMACRO\"\n    },\n\n    /*::[*/\n    0x004A\n    /*::]*/\n    : {\n      n: \"PARSE\"\n    },\n\n    /*::[*/\n    0x0066\n    /*::]*/\n    : {\n      n: \"PRANGES??\"\n    },\n\n    /*::[*/\n    0x0067\n    /*::]*/\n    : {\n      n: \"RRANGES??\"\n    },\n\n    /*::[*/\n    0x0068\n    /*::]*/\n    : {\n      n: \"FNAME??\"\n    },\n\n    /*::[*/\n    0x0069\n    /*::]*/\n    : {\n      n: \"MRANGES??\"\n    },\n\n    /*::[*/\n    0x00CC\n    /*::]*/\n    : {\n      n: \"SHEETNAMECS\",\n      f: parse_SHEETNAMECS\n    },\n\n    /*::[*/\n    0x00DE\n    /*::]*/\n    : {\n      n: \"SHEETNAMELP\",\n      f: parse_SHEETNAMELP\n    },\n\n    /*::[*/\n    0xFFFF\n    /*::]*/\n    : {\n      n: \"\"\n    }\n  };\n  var WK3Enum = {\n    /*::[*/\n    0x0000\n    /*::]*/\n    : {\n      n: \"BOF\"\n    },\n\n    /*::[*/\n    0x0001\n    /*::]*/\n    : {\n      n: \"EOF\"\n    },\n\n    /*::[*/\n    0x0002\n    /*::]*/\n    : {\n      n: \"PASSWORD\"\n    },\n\n    /*::[*/\n    0x0003\n    /*::]*/\n    : {\n      n: \"CALCSET\"\n    },\n\n    /*::[*/\n    0x0004\n    /*::]*/\n    : {\n      n: \"WINDOWSET\"\n    },\n\n    /*::[*/\n    0x0005\n    /*::]*/\n    : {\n      n: \"SHEETCELLPTR\"\n    },\n\n    /*::[*/\n    0x0006\n    /*::]*/\n    : {\n      n: \"SHEETLAYOUT\"\n    },\n\n    /*::[*/\n    0x0007\n    /*::]*/\n    : {\n      n: \"COLUMNWIDTH\"\n    },\n\n    /*::[*/\n    0x0008\n    /*::]*/\n    : {\n      n: \"HIDDENCOLUMN\"\n    },\n\n    /*::[*/\n    0x0009\n    /*::]*/\n    : {\n      n: \"USERRANGE\"\n    },\n\n    /*::[*/\n    0x000A\n    /*::]*/\n    : {\n      n: \"SYSTEMRANGE\"\n    },\n\n    /*::[*/\n    0x000B\n    /*::]*/\n    : {\n      n: \"ZEROFORCE\"\n    },\n\n    /*::[*/\n    0x000C\n    /*::]*/\n    : {\n      n: \"SORTKEYDIR\"\n    },\n\n    /*::[*/\n    0x000D\n    /*::]*/\n    : {\n      n: \"FILESEAL\"\n    },\n\n    /*::[*/\n    0x000E\n    /*::]*/\n    : {\n      n: \"DATAFILLNUMS\"\n    },\n\n    /*::[*/\n    0x000F\n    /*::]*/\n    : {\n      n: \"PRINTMAIN\"\n    },\n\n    /*::[*/\n    0x0010\n    /*::]*/\n    : {\n      n: \"PRINTSTRING\"\n    },\n\n    /*::[*/\n    0x0011\n    /*::]*/\n    : {\n      n: \"GRAPHMAIN\"\n    },\n\n    /*::[*/\n    0x0012\n    /*::]*/\n    : {\n      n: \"GRAPHSTRING\"\n    },\n\n    /*::[*/\n    0x0013\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0014\n    /*::]*/\n    : {\n      n: \"ERRCELL\"\n    },\n\n    /*::[*/\n    0x0015\n    /*::]*/\n    : {\n      n: \"NACELL\"\n    },\n\n    /*::[*/\n    0x0016\n    /*::]*/\n    : {\n      n: \"LABEL16\",\n      f: parse_LABEL_16\n    },\n\n    /*::[*/\n    0x0017\n    /*::]*/\n    : {\n      n: \"NUMBER17\",\n      f: parse_NUMBER_17\n    },\n\n    /*::[*/\n    0x0018\n    /*::]*/\n    : {\n      n: \"NUMBER18\",\n      f: parse_NUMBER_18\n    },\n\n    /*::[*/\n    0x0019\n    /*::]*/\n    : {\n      n: \"FORMULA19\",\n      f: parse_FORMULA_19\n    },\n\n    /*::[*/\n    0x001A\n    /*::]*/\n    : {\n      n: \"FORMULA1A\"\n    },\n\n    /*::[*/\n    0x001B\n    /*::]*/\n    : {\n      n: \"XFORMAT\",\n      f: parse_XFORMAT\n    },\n\n    /*::[*/\n    0x001C\n    /*::]*/\n    : {\n      n: \"DTLABELMISC\"\n    },\n\n    /*::[*/\n    0x001D\n    /*::]*/\n    : {\n      n: \"DTLABELCELL\"\n    },\n\n    /*::[*/\n    0x001E\n    /*::]*/\n    : {\n      n: \"GRAPHWINDOW\"\n    },\n\n    /*::[*/\n    0x001F\n    /*::]*/\n    : {\n      n: \"CPA\"\n    },\n\n    /*::[*/\n    0x0020\n    /*::]*/\n    : {\n      n: \"LPLAUTO\"\n    },\n\n    /*::[*/\n    0x0021\n    /*::]*/\n    : {\n      n: \"QUERY\"\n    },\n\n    /*::[*/\n    0x0022\n    /*::]*/\n    : {\n      n: \"HIDDENSHEET\"\n    },\n\n    /*::[*/\n    0x0023\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0025\n    /*::]*/\n    : {\n      n: \"NUMBER25\",\n      f: parse_NUMBER_25\n    },\n\n    /*::[*/\n    0x0026\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0027\n    /*::]*/\n    : {\n      n: \"NUMBER27\",\n      f: parse_NUMBER_27\n    },\n\n    /*::[*/\n    0x0028\n    /*::]*/\n    : {\n      n: \"FORMULA28\",\n      f: parse_FORMULA_28\n    },\n\n    /*::[*/\n    0x008E\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0093\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0096\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0097\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0098\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0099\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x009A\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x009B\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x009C\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x00A3\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x00AE\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x00AF\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x00B0\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x00B1\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x00B8\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x00B9\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x00BA\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x00BB\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x00BC\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x00C3\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x00C9\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x00CC\n    /*::]*/\n    : {\n      n: \"SHEETNAMECS\",\n      f: parse_SHEETNAMECS\n    },\n\n    /*::[*/\n    0x00CD\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x00CE\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x00CF\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x00D0\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0100\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0103\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0104\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0105\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0106\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0107\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0109\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x010A\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x010B\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x010C\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x010E\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x010F\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0180\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0185\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0186\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0189\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x018C\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0200\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0202\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0201\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0204\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0205\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0280\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0281\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0282\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0283\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0284\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0285\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0286\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0287\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0288\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0292\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0293\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0294\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0295\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0296\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0299\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x029A\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0300\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0304\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0601\n    /*::]*/\n    : {\n      n: \"SHEETINFOQP\",\n      f: parse_SHEETINFOQP\n    },\n\n    /*::[*/\n    0x0640\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0642\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0701\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0702\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0703\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0704\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0780\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0800\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0801\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0804\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x0A80\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x2AF6\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x3231\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x6E49\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0x6F44\n    /*::]*/\n    : {\n      n: \"??\"\n    },\n\n    /*::[*/\n    0xFFFF\n    /*::]*/\n    : {\n      n: \"\"\n    }\n  };\n  return {\n    sheet_to_wk1: sheet_to_wk1,\n    book_to_wk3: book_to_wk3,\n    to_workbook: lotus_to_workbook\n  };\n}();\n/* 18.4.7 rPr CT_RPrElt */\n\n\nfunction parse_rpr(rpr) {\n  var font = {},\n      m = rpr.match(tagregex),\n      i = 0;\n  var pass = false;\n  if (m) for (; i != m.length; ++i) {\n    var y = parsexmltag(m[i]);\n\n    switch (y[0].replace(/\\w*:/g, \"\")) {\n      /* 18.8.12 condense CT_BooleanProperty */\n\n      /* ** not required . */\n      case '<condense':\n        break;\n\n      /* 18.8.17 extend CT_BooleanProperty */\n\n      /* ** not required . */\n\n      case '<extend':\n        break;\n\n      /* 18.8.36 shadow CT_BooleanProperty */\n\n      /* ** not required . */\n\n      case '<shadow':\n        if (!y.val) break;\n\n      /* falls through */\n\n      case '<shadow>':\n      case '<shadow/>':\n        font.shadow = 1;\n        break;\n\n      case '</shadow>':\n        break;\n\n      /* 18.4.1 charset CT_IntProperty TODO */\n\n      case '<charset':\n        if (y.val == '1') break;\n        font.cp = CS2CP[parseInt(y.val, 10)];\n        break;\n\n      /* 18.4.2 outline CT_BooleanProperty TODO */\n\n      case '<outline':\n        if (!y.val) break;\n\n      /* falls through */\n\n      case '<outline>':\n      case '<outline/>':\n        font.outline = 1;\n        break;\n\n      case '</outline>':\n        break;\n\n      /* 18.4.5 rFont CT_FontName */\n\n      case '<rFont':\n        font.name = y.val;\n        break;\n\n      /* 18.4.11 sz CT_FontSize */\n\n      case '<sz':\n        font.sz = y.val;\n        break;\n\n      /* 18.4.10 strike CT_BooleanProperty */\n\n      case '<strike':\n        if (!y.val) break;\n\n      /* falls through */\n\n      case '<strike>':\n      case '<strike/>':\n        font.strike = 1;\n        break;\n\n      case '</strike>':\n        break;\n\n      /* 18.4.13 u CT_UnderlineProperty */\n\n      case '<u':\n        if (!y.val) break;\n\n        switch (y.val) {\n          case 'double':\n            font.uval = \"double\";\n            break;\n\n          case 'singleAccounting':\n            font.uval = \"single-accounting\";\n            break;\n\n          case 'doubleAccounting':\n            font.uval = \"double-accounting\";\n            break;\n        }\n\n      /* falls through */\n\n      case '<u>':\n      case '<u/>':\n        font.u = 1;\n        break;\n\n      case '</u>':\n        break;\n\n      /* 18.8.2 b */\n\n      case '<b':\n        if (y.val == '0') break;\n\n      /* falls through */\n\n      case '<b>':\n      case '<b/>':\n        font.b = 1;\n        break;\n\n      case '</b>':\n        break;\n\n      /* 18.8.26 i */\n\n      case '<i':\n        if (y.val == '0') break;\n\n      /* falls through */\n\n      case '<i>':\n      case '<i/>':\n        font.i = 1;\n        break;\n\n      case '</i>':\n        break;\n\n      /* 18.3.1.15 color CT_Color TODO: tint, theme, auto, indexed */\n\n      case '<color':\n        if (y.rgb) font.color = y.rgb.slice(2, 8);\n        break;\n\n      case '<color>':\n      case '<color/>':\n      case '</color>':\n        break;\n\n      /* 18.8.18 family ST_FontFamily */\n\n      case '<family':\n        font.family = y.val;\n        break;\n\n      case '<family>':\n      case '<family/>':\n      case '</family>':\n        break;\n\n      /* 18.4.14 vertAlign CT_VerticalAlignFontProperty TODO */\n\n      case '<vertAlign':\n        font.valign = y.val;\n        break;\n\n      case '<vertAlign>':\n      case '<vertAlign/>':\n      case '</vertAlign>':\n        break;\n\n      /* 18.8.35 scheme CT_FontScheme TODO */\n\n      case '<scheme':\n        break;\n\n      case '<scheme>':\n      case '<scheme/>':\n      case '</scheme>':\n        break;\n\n      /* 18.2.10 extLst CT_ExtensionList ? */\n\n      case '<extLst':\n      case '<extLst>':\n      case '</extLst>':\n        break;\n\n      case '<ext':\n        pass = true;\n        break;\n\n      case '</ext>':\n        pass = false;\n        break;\n\n      default:\n        if (y[0].charCodeAt(1) !== 47 && !pass) throw new Error('Unrecognized rich format ' + y[0]);\n    }\n  }\n  return font;\n}\n\nvar parse_rs = /*#__PURE__*/function () {\n  var tregex = matchtag(\"t\"),\n      rpregex = matchtag(\"rPr\");\n  /* 18.4.4 r CT_RElt */\n\n  function parse_r(r) {\n    /* 18.4.12 t ST_Xstring */\n    var t = r.match(tregex)\n    /*, cp = 65001*/\n    ;\n    if (!t) return {\n      t: \"s\",\n      v: \"\"\n    };\n    var o\n    /*:Cell*/\n    = {\n      t: 's',\n      v: unescapexml(t[1])\n    }\n    /*:any*/\n    ;\n    var rpr = r.match(rpregex);\n    if (rpr) o.s = parse_rpr(rpr[1]);\n    return o;\n  }\n\n  var rregex = /<(?:\\w+:)?r>/g,\n      rend = /<\\/(?:\\w+:)?r>/;\n  return function parse_rs(rs) {\n    return rs.replace(rregex, \"\").split(rend).map(parse_r).filter(function (r) {\n      return r.v;\n    });\n  };\n}();\n/* Parse a list of <r> tags */\n\n\nvar rs_to_html = /*#__PURE__*/function parse_rs_factory() {\n  var nlregex = /(\\r\\n|\\n)/g;\n\n  function parse_rpr2(font, intro, outro) {\n    var style\n    /*:Array<string>*/\n    = [];\n    if (font.u) style.push(\"text-decoration: underline;\");\n    if (font.uval) style.push(\"text-underline-style:\" + font.uval + \";\");\n    if (font.sz) style.push(\"font-size:\" + font.sz + \"pt;\");\n    if (font.outline) style.push(\"text-effect: outline;\");\n    if (font.shadow) style.push(\"text-shadow: auto;\");\n    intro.push('<span style=\"' + style.join(\"\") + '\">');\n\n    if (font.b) {\n      intro.push(\"<b>\");\n      outro.push(\"</b>\");\n    }\n\n    if (font.i) {\n      intro.push(\"<i>\");\n      outro.push(\"</i>\");\n    }\n\n    if (font.strike) {\n      intro.push(\"<s>\");\n      outro.push(\"</s>\");\n    }\n\n    var align = font.valign || \"\";\n    if (align == \"superscript\" || align == \"super\") align = \"sup\";else if (align == \"subscript\") align = \"sub\";\n\n    if (align != \"\") {\n      intro.push(\"<\" + align + \">\");\n      outro.push(\"</\" + align + \">\");\n    }\n\n    outro.push(\"</span>\");\n    return font;\n  }\n  /* 18.4.4 r CT_RElt */\n\n\n  function r_to_html(r) {\n    var terms\n    /*:[Array<string>, string, Array<string>]*/\n    = [[], r.v, []];\n    if (!r.v) return \"\";\n    if (r.s) parse_rpr2(r.s, terms[0], terms[2]);\n    return terms[0].join(\"\") + terms[1].replace(nlregex, '<br/>') + terms[2].join(\"\");\n  }\n\n  return function parse_rs(rs) {\n    return rs.map(r_to_html).join(\"\");\n  };\n}();\n/* 18.4.8 si CT_Rst */\n\n\nvar sitregex = /<(?:\\w+:)?t[^>]*>([^<]*)<\\/(?:\\w+:)?t>/g,\n    sirregex = /<(?:\\w+:)?r>/;\nvar sirphregex = /<(?:\\w+:)?rPh.*?>([\\s\\S]*?)<\\/(?:\\w+:)?rPh>/g;\n\nfunction parse_si(x, opts) {\n  var html = opts ? opts.cellHTML : true;\n  var z = {};\n  if (!x) return {\n    t: \"\"\n  }; //var y;\n\n  /* 18.4.12 t ST_Xstring (Plaintext String) */\n  // TODO: is whitespace actually valid here?\n\n  if (x.match(/^\\s*<(?:\\w+:)?t[^>]*>/)) {\n    z.t = unescapexml(utf8read(x.slice(x.indexOf(\">\") + 1).split(/<\\/(?:\\w+:)?t>/)[0] || \"\"));\n    z.r = utf8read(x);\n    if (html) z.h = escapehtml(z.t);\n  }\n  /* 18.4.4 r CT_RElt (Rich Text Run) */\n  else if (\n  /*y = */\n  x.match(sirregex)) {\n    z.r = utf8read(x);\n    z.t = unescapexml(utf8read((x.replace(sirphregex, '').match(sitregex) || []).join(\"\").replace(tagregex, \"\")));\n    if (html) z.h = rs_to_html(parse_rs(z.r));\n  }\n  /* 18.4.3 phoneticPr CT_PhoneticPr (TODO: needed for Asian support) */\n\n  /* 18.4.6 rPh CT_PhoneticRun (TODO: needed for Asian support) */\n\n\n  return z;\n}\n/* 18.4 Shared String Table */\n\n\nvar sstr0 = /<(?:\\w+:)?sst([^>]*)>([\\s\\S]*)<\\/(?:\\w+:)?sst>/;\nvar sstr1 = /<(?:\\w+:)?(?:si|sstItem)>/g;\nvar sstr2 = /<\\/(?:\\w+:)?(?:si|sstItem)>/;\n\nfunction parse_sst_xml(data\n/*:string*/\n, opts)\n/*:SST*/\n{\n  var s\n  /*:SST*/\n  = []\n  /*:any*/\n  ,\n      ss = \"\";\n  if (!data) return s;\n  /* 18.4.9 sst CT_Sst */\n\n  var sst = data.match(sstr0);\n\n  if (sst) {\n    ss = sst[2].replace(sstr1, \"\").split(sstr2);\n\n    for (var i = 0; i != ss.length; ++i) {\n      var o = parse_si(ss[i].trim(), opts);\n      if (o != null) s[s.length] = o;\n    }\n\n    sst = parsexmltag(sst[1]);\n    s.Count = sst.count;\n    s.Unique = sst.uniqueCount;\n  }\n\n  return s;\n}\n\nvar straywsregex = /^\\s|\\s$|[\\t\\n\\r]/;\n\nfunction write_sst_xml(sst\n/*:SST*/\n, opts)\n/*:string*/\n{\n  if (!opts.bookSST) return \"\";\n  var o = [XML_HEADER];\n  o[o.length] = writextag('sst', null, {\n    xmlns: XMLNS_main[0],\n    count: sst.Count,\n    uniqueCount: sst.Unique\n  });\n\n  for (var i = 0; i != sst.length; ++i) {\n    if (sst[i] == null) continue;\n    var s\n    /*:XLString*/\n    = sst[i];\n    var sitag = \"<si>\";\n    if (s.r) sitag += s.r;else {\n      sitag += \"<t\";\n      if (!s.t) s.t = \"\";\n      if (s.t.match(straywsregex)) sitag += ' xml:space=\"preserve\"';\n      sitag += \">\" + escapexml(s.t) + \"</t>\";\n    }\n    sitag += \"</si>\";\n    o[o.length] = sitag;\n  }\n\n  if (o.length > 2) {\n    o[o.length] = '</sst>';\n    o[1] = o[1].replace(\"/>\", \">\");\n  }\n\n  return o.join(\"\");\n}\n/* [MS-XLSB] 2.4.221 BrtBeginSst */\n\n\nfunction parse_BrtBeginSst(data) {\n  return [data.read_shift(4), data.read_shift(4)];\n}\n/* [MS-XLSB] 2.1.7.45 Shared Strings */\n\n\nfunction parse_sst_bin(data, opts)\n/*:SST*/\n{\n  var s\n  /*:SST*/\n  = []\n  /*:any*/\n  ;\n  var pass = false;\n  recordhopper(data, function hopper_sst(val, R, RT) {\n    switch (RT) {\n      case 0x009F:\n        /* BrtBeginSst */\n        s.Count = val[0];\n        s.Unique = val[1];\n        break;\n\n      case 0x0013:\n        /* BrtSSTItem */\n        s.push(val);\n        break;\n\n      case 0x00A0:\n        /* BrtEndSst */\n        return true;\n\n      case 0x0023:\n        /* BrtFRTBegin */\n        pass = true;\n        break;\n\n      case 0x0024:\n        /* BrtFRTEnd */\n        pass = false;\n        break;\n\n      default:\n        if (R.T) {}\n\n        if (!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n    }\n  });\n  return s;\n}\n\nfunction write_BrtBeginSst(sst, o) {\n  if (!o) o = new_buf(8);\n  o.write_shift(4, sst.Count);\n  o.write_shift(4, sst.Unique);\n  return o;\n}\n\nvar write_BrtSSTItem = write_RichStr;\n\nfunction write_sst_bin(sst\n/*::, opts*/\n) {\n  var ba = buf_array();\n  write_record(ba, 0x009F\n  /* BrtBeginSst */\n  , write_BrtBeginSst(sst));\n\n  for (var i = 0; i < sst.length; ++i) {\n    write_record(ba, 0x0013\n    /* BrtSSTItem */\n    , write_BrtSSTItem(sst[i]));\n  }\n  /* FRTSST */\n\n\n  write_record(ba, 0x00A0\n  /* BrtEndSst */\n  );\n  return ba.end();\n}\n\nfunction _JS2ANSI(str\n/*:string*/\n)\n/*:Array<number>*/\n{\n  if (typeof $cptable !== 'undefined') return $cptable.utils.encode(current_ansi, str);\n  var o\n  /*:Array<number>*/\n  = [],\n      oo = str.split(\"\");\n\n  for (var i = 0; i < oo.length; ++i) {\n    o[i] = oo[i].charCodeAt(0);\n  }\n\n  return o;\n}\n/* [MS-OFFCRYPTO] 2.1.4 Version */\n\n\nfunction parse_CRYPTOVersion(blob, length\n/*:?number*/\n) {\n  var o\n  /*:any*/\n  = {};\n  o.Major = blob.read_shift(2);\n  o.Minor = blob.read_shift(2);\n  /*:: if(length == null) return o; */\n\n  if (length >= 4) blob.l += length - 4;\n  return o;\n}\n/* [MS-OFFCRYPTO] 2.1.5 DataSpaceVersionInfo */\n\n\nfunction parse_DataSpaceVersionInfo(blob) {\n  var o = {};\n  o.id = blob.read_shift(0, 'lpp4');\n  o.R = parse_CRYPTOVersion(blob, 4);\n  o.U = parse_CRYPTOVersion(blob, 4);\n  o.W = parse_CRYPTOVersion(blob, 4);\n  return o;\n}\n/* [MS-OFFCRYPTO] 2.1.6.1 DataSpaceMapEntry Structure */\n\n\nfunction parse_DataSpaceMapEntry(blob) {\n  var len = blob.read_shift(4);\n  var end = blob.l + len - 4;\n  var o = {};\n  var cnt = blob.read_shift(4);\n  var comps\n  /*:Array<{t:number, v:string}>*/\n  = [];\n  /* [MS-OFFCRYPTO] 2.1.6.2 DataSpaceReferenceComponent Structure */\n\n  while (cnt-- > 0) {\n    comps.push({\n      t: blob.read_shift(4),\n      v: blob.read_shift(0, 'lpp4')\n    });\n  }\n\n  o.name = blob.read_shift(0, 'lpp4');\n  o.comps = comps;\n  if (blob.l != end) throw new Error(\"Bad DataSpaceMapEntry: \" + blob.l + \" != \" + end);\n  return o;\n}\n/* [MS-OFFCRYPTO] 2.1.6 DataSpaceMap */\n\n\nfunction parse_DataSpaceMap(blob) {\n  var o = [];\n  blob.l += 4; // must be 0x8\n\n  var cnt = blob.read_shift(4);\n\n  while (cnt-- > 0) {\n    o.push(parse_DataSpaceMapEntry(blob));\n  }\n\n  return o;\n}\n/* [MS-OFFCRYPTO] 2.1.7 DataSpaceDefinition */\n\n\nfunction parse_DataSpaceDefinition(blob)\n/*:Array<string>*/\n{\n  var o\n  /*:Array<string>*/\n  = [];\n  blob.l += 4; // must be 0x8\n\n  var cnt = blob.read_shift(4);\n\n  while (cnt-- > 0) {\n    o.push(blob.read_shift(0, 'lpp4'));\n  }\n\n  return o;\n}\n/* [MS-OFFCRYPTO] 2.1.8 DataSpaceDefinition */\n\n\nfunction parse_TransformInfoHeader(blob) {\n  var o = {};\n  /*var len = */\n\n  blob.read_shift(4);\n  blob.l += 4; // must be 0x1\n\n  o.id = blob.read_shift(0, 'lpp4');\n  o.name = blob.read_shift(0, 'lpp4');\n  o.R = parse_CRYPTOVersion(blob, 4);\n  o.U = parse_CRYPTOVersion(blob, 4);\n  o.W = parse_CRYPTOVersion(blob, 4);\n  return o;\n}\n\nfunction parse_Primary(blob) {\n  /* [MS-OFFCRYPTO] 2.2.6 IRMDSTransformInfo */\n  var hdr = parse_TransformInfoHeader(blob);\n  /* [MS-OFFCRYPTO] 2.1.9 EncryptionTransformInfo */\n\n  hdr.ename = blob.read_shift(0, '8lpp4');\n  hdr.blksz = blob.read_shift(4);\n  hdr.cmode = blob.read_shift(4);\n  if (blob.read_shift(4) != 0x04) throw new Error(\"Bad !Primary record\");\n  return hdr;\n}\n/* [MS-OFFCRYPTO] 2.3.2 Encryption Header */\n\n\nfunction parse_EncryptionHeader(blob, length\n/*:number*/\n) {\n  var tgt = blob.l + length;\n  var o = {};\n  o.Flags = blob.read_shift(4) & 0x3F;\n  blob.l += 4;\n  o.AlgID = blob.read_shift(4);\n  var valid = false;\n\n  switch (o.AlgID) {\n    case 0x660E:\n    case 0x660F:\n    case 0x6610:\n      valid = o.Flags == 0x24;\n      break;\n\n    case 0x6801:\n      valid = o.Flags == 0x04;\n      break;\n\n    case 0:\n      valid = o.Flags == 0x10 || o.Flags == 0x04 || o.Flags == 0x24;\n      break;\n\n    default:\n      throw 'Unrecognized encryption algorithm: ' + o.AlgID;\n  }\n\n  if (!valid) throw new Error(\"Encryption Flags/AlgID mismatch\");\n  o.AlgIDHash = blob.read_shift(4);\n  o.KeySize = blob.read_shift(4);\n  o.ProviderType = blob.read_shift(4);\n  blob.l += 8;\n  o.CSPName = blob.read_shift(tgt - blob.l >> 1, 'utf16le');\n  blob.l = tgt;\n  return o;\n}\n/* [MS-OFFCRYPTO] 2.3.3 Encryption Verifier */\n\n\nfunction parse_EncryptionVerifier(blob, length\n/*:number*/\n) {\n  var o = {},\n      tgt = blob.l + length;\n  blob.l += 4; // SaltSize must be 0x10\n\n  o.Salt = blob.slice(blob.l, blob.l + 16);\n  blob.l += 16;\n  o.Verifier = blob.slice(blob.l, blob.l + 16);\n  blob.l += 16;\n  /*var sz = */\n\n  blob.read_shift(4);\n  o.VerifierHash = blob.slice(blob.l, tgt);\n  blob.l = tgt;\n  return o;\n}\n/* [MS-OFFCRYPTO] 2.3.4.* EncryptionInfo Stream */\n\n\nfunction parse_EncryptionInfo(blob) {\n  var vers = parse_CRYPTOVersion(blob);\n\n  switch (vers.Minor) {\n    case 0x02:\n      return [vers.Minor, parse_EncInfoStd(blob, vers)];\n\n    case 0x03:\n      return [vers.Minor, parse_EncInfoExt(blob, vers)];\n\n    case 0x04:\n      return [vers.Minor, parse_EncInfoAgl(blob, vers)];\n  }\n\n  throw new Error(\"ECMA-376 Encrypted file unrecognized Version: \" + vers.Minor);\n}\n/* [MS-OFFCRYPTO] 2.3.4.5  EncryptionInfo Stream (Standard Encryption) */\n\n\nfunction parse_EncInfoStd(blob\n/*::, vers*/\n) {\n  var flags = blob.read_shift(4);\n  if ((flags & 0x3F) != 0x24) throw new Error(\"EncryptionInfo mismatch\");\n  var sz = blob.read_shift(4); //var tgt = blob.l + sz;\n\n  var hdr = parse_EncryptionHeader(blob, sz);\n  var verifier = parse_EncryptionVerifier(blob, blob.length - blob.l);\n  return {\n    t: \"Std\",\n    h: hdr,\n    v: verifier\n  };\n}\n/* [MS-OFFCRYPTO] 2.3.4.6  EncryptionInfo Stream (Extensible Encryption) */\n\n\nfunction\n  /*::blob, vers*/\nparse_EncInfoExt() {\n  throw new Error(\"File is password-protected: ECMA-376 Extensible\");\n}\n/* [MS-OFFCRYPTO] 2.3.4.10 EncryptionInfo Stream (Agile Encryption) */\n\n\nfunction parse_EncInfoAgl(blob\n/*::, vers*/\n) {\n  var KeyData = [\"saltSize\", \"blockSize\", \"keyBits\", \"hashSize\", \"cipherAlgorithm\", \"cipherChaining\", \"hashAlgorithm\", \"saltValue\"];\n  blob.l += 4;\n  var xml = blob.read_shift(blob.length - blob.l, 'utf8');\n  var o = {};\n  xml.replace(tagregex, function xml_agile(x) {\n    var y\n    /*:any*/\n    = parsexmltag(x);\n\n    switch (strip_ns(y[0])) {\n      case '<?xml':\n        break;\n\n      case '<encryption':\n      case '</encryption>':\n        break;\n\n      case '<keyData':\n        KeyData.forEach(function (k) {\n          o[k] = y[k];\n        });\n        break;\n\n      case '<dataIntegrity':\n        o.encryptedHmacKey = y.encryptedHmacKey;\n        o.encryptedHmacValue = y.encryptedHmacValue;\n        break;\n\n      case '<keyEncryptors>':\n      case '<keyEncryptors':\n        o.encs = [];\n        break;\n\n      case '</keyEncryptors>':\n        break;\n\n      case '<keyEncryptor':\n        o.uri = y.uri;\n        break;\n\n      case '</keyEncryptor>':\n        break;\n\n      case '<encryptedKey':\n        o.encs.push(y);\n        break;\n\n      default:\n        throw y[0];\n    }\n  });\n  return o;\n}\n/* [MS-OFFCRYPTO] 2.3.5.1 RC4 CryptoAPI Encryption Header */\n\n\nfunction parse_RC4CryptoHeader(blob, length\n/*:number*/\n) {\n  var o = {};\n  var vers = o.EncryptionVersionInfo = parse_CRYPTOVersion(blob, 4);\n  length -= 4;\n  if (vers.Minor != 2) throw new Error('unrecognized minor version code: ' + vers.Minor);\n  if (vers.Major > 4 || vers.Major < 2) throw new Error('unrecognized major version code: ' + vers.Major);\n  o.Flags = blob.read_shift(4);\n  length -= 4;\n  var sz = blob.read_shift(4);\n  length -= 4;\n  o.EncryptionHeader = parse_EncryptionHeader(blob, sz);\n  length -= sz;\n  o.EncryptionVerifier = parse_EncryptionVerifier(blob, length);\n  return o;\n}\n/* [MS-OFFCRYPTO] 2.3.6.1 RC4 Encryption Header */\n\n\nfunction parse_RC4Header(blob\n/*::, length*/\n) {\n  var o = {};\n  var vers = o.EncryptionVersionInfo = parse_CRYPTOVersion(blob, 4);\n  if (vers.Major != 1 || vers.Minor != 1) throw 'unrecognized version code ' + vers.Major + ' : ' + vers.Minor;\n  o.Salt = blob.read_shift(16);\n  o.EncryptedVerifier = blob.read_shift(16);\n  o.EncryptedVerifierHash = blob.read_shift(16);\n  return o;\n}\n/* [MS-OFFCRYPTO] 2.3.7.1 Binary Document Password Verifier Derivation */\n\n\nfunction crypto_CreatePasswordVerifier_Method1(Password\n/*:string*/\n) {\n  var Verifier = 0x0000,\n      PasswordArray;\n\n  var PasswordDecoded = _JS2ANSI(Password);\n\n  var len = PasswordDecoded.length + 1,\n      i,\n      PasswordByte;\n  var Intermediate1, Intermediate2, Intermediate3;\n  PasswordArray = new_raw_buf(len);\n  PasswordArray[0] = PasswordDecoded.length;\n\n  for (i = 1; i != len; ++i) {\n    PasswordArray[i] = PasswordDecoded[i - 1];\n  }\n\n  for (i = len - 1; i >= 0; --i) {\n    PasswordByte = PasswordArray[i];\n    Intermediate1 = (Verifier & 0x4000) === 0x0000 ? 0 : 1;\n    Intermediate2 = Verifier << 1 & 0x7FFF;\n    Intermediate3 = Intermediate1 | Intermediate2;\n    Verifier = Intermediate3 ^ PasswordByte;\n  }\n\n  return Verifier ^ 0xCE4B;\n}\n/* [MS-OFFCRYPTO] 2.3.7.2 Binary Document XOR Array Initialization */\n\n\nvar crypto_CreateXorArray_Method1 = /*#__PURE__*/function () {\n  var PadArray = [0xBB, 0xFF, 0xFF, 0xBA, 0xFF, 0xFF, 0xB9, 0x80, 0x00, 0xBE, 0x0F, 0x00, 0xBF, 0x0F, 0x00];\n  var InitialCode = [0xE1F0, 0x1D0F, 0xCC9C, 0x84C0, 0x110C, 0x0E10, 0xF1CE, 0x313E, 0x1872, 0xE139, 0xD40F, 0x84F9, 0x280C, 0xA96A, 0x4EC3];\n  var 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\n  var Ror = function Ror(Byte) {\n    return (Byte / 2 | Byte * 128) & 0xFF;\n  };\n\n  var XorRor = function XorRor(byte1, byte2) {\n    return Ror(byte1 ^ byte2);\n  };\n\n  var CreateXorKey_Method1 = function CreateXorKey_Method1(Password) {\n    var XorKey = InitialCode[Password.length - 1];\n    var CurrentElement = 0x68;\n\n    for (var i = Password.length - 1; i >= 0; --i) {\n      var Char = Password[i];\n\n      for (var j = 0; j != 7; ++j) {\n        if (Char & 0x40) XorKey ^= XorMatrix[CurrentElement];\n        Char *= 2;\n        --CurrentElement;\n      }\n    }\n\n    return XorKey;\n  };\n\n  return function (password\n  /*:string*/\n  ) {\n    var Password = _JS2ANSI(password);\n\n    var XorKey = CreateXorKey_Method1(Password);\n    var Index = Password.length;\n    var ObfuscationArray = new_raw_buf(16);\n\n    for (var i = 0; i != 16; ++i) {\n      ObfuscationArray[i] = 0x00;\n    }\n\n    var Temp, PasswordLastChar, PadIndex;\n\n    if ((Index & 1) === 1) {\n      Temp = XorKey >> 8;\n      ObfuscationArray[Index] = XorRor(PadArray[0], Temp);\n      --Index;\n      Temp = XorKey & 0xFF;\n      PasswordLastChar = Password[Password.length - 1];\n      ObfuscationArray[Index] = XorRor(PasswordLastChar, Temp);\n    }\n\n    while (Index > 0) {\n      --Index;\n      Temp = XorKey >> 8;\n      ObfuscationArray[Index] = XorRor(Password[Index], Temp);\n      --Index;\n      Temp = XorKey & 0xFF;\n      ObfuscationArray[Index] = XorRor(Password[Index], Temp);\n    }\n\n    Index = 15;\n    PadIndex = 15 - Password.length;\n\n    while (PadIndex > 0) {\n      Temp = XorKey >> 8;\n      ObfuscationArray[Index] = XorRor(PadArray[PadIndex], Temp);\n      --Index;\n      --PadIndex;\n      Temp = XorKey & 0xFF;\n      ObfuscationArray[Index] = XorRor(Password[Index], Temp);\n      --Index;\n      --PadIndex;\n    }\n\n    return ObfuscationArray;\n  };\n}();\n/* [MS-OFFCRYPTO] 2.3.7.3 Binary Document XOR Data Transformation Method 1 */\n\n\nvar crypto_DecryptData_Method1 = function crypto_DecryptData_Method1(password\n/*:string*/\n, Data, XorArrayIndex, XorArray, O) {\n  /* If XorArray is set, use it; if O is not set, make changes in-place */\n  if (!O) O = Data;\n  if (!XorArray) XorArray = crypto_CreateXorArray_Method1(password);\n  var Index, Value;\n\n  for (Index = 0; Index != Data.length; ++Index) {\n    Value = Data[Index];\n    Value ^= XorArray[XorArrayIndex];\n    Value = (Value >> 5 | Value << 3) & 0xFF;\n    O[Index] = Value;\n    ++XorArrayIndex;\n  }\n\n  return [O, XorArrayIndex, XorArray];\n};\n\nvar crypto_MakeXorDecryptor = function crypto_MakeXorDecryptor(password\n/*:string*/\n) {\n  var XorArrayIndex = 0,\n      XorArray = crypto_CreateXorArray_Method1(password);\n  return function (Data) {\n    var O = crypto_DecryptData_Method1(\"\", Data, XorArrayIndex, XorArray);\n    XorArrayIndex = O[1];\n    return O[0];\n  };\n};\n/* 2.5.343 */\n\n\nfunction parse_XORObfuscation(blob, length, opts, out) {\n  var o = {\n    key: parseuint16(blob),\n    verificationBytes: parseuint16(blob)\n  }\n  /*:any*/\n  ;\n  if (opts.password) o.verifier = crypto_CreatePasswordVerifier_Method1(opts.password);\n  out.valid = o.verificationBytes === o.verifier;\n  if (out.valid) out.insitu = crypto_MakeXorDecryptor(opts.password);\n  return o;\n}\n/* 2.4.117 */\n\n\nfunction parse_FilePassHeader(blob, length\n/*:number*/\n, oo) {\n  var o = oo || {};\n  o.Info = blob.read_shift(2);\n  blob.l -= 2;\n  if (o.Info === 1) o.Data = parse_RC4Header(blob, length);else o.Data = parse_RC4CryptoHeader(blob, length);\n  return o;\n}\n\nfunction parse_FilePass(blob, length\n/*:number*/\n, opts) {\n  var o = {\n    Type: opts.biff >= 8 ? blob.read_shift(2) : 0\n  }\n  /*:any*/\n  ;\n  /* wEncryptionType */\n\n  if (o.Type) parse_FilePassHeader(blob, length - 2, o);else parse_XORObfuscation(blob, opts.biff >= 8 ? length : length - 2, opts, o);\n  return o;\n}\n\nvar RTF = /*#__PURE__*/function () {\n  function rtf_to_sheet(d\n  /*:RawData*/\n  , opts)\n  /*:Worksheet*/\n  {\n    switch (opts.type) {\n      case 'base64':\n        return rtf_to_sheet_str(Base64_decode(d), opts);\n\n      case 'binary':\n        return rtf_to_sheet_str(d, opts);\n\n      case 'buffer':\n        return rtf_to_sheet_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts);\n\n      case 'array':\n        return rtf_to_sheet_str(cc2str(d), opts);\n    }\n\n    throw new Error(\"Unrecognized type \" + opts.type);\n  }\n  /* TODO: this is a stub */\n\n\n  function rtf_to_sheet_str(str\n  /*:string*/\n  , opts)\n  /*:Worksheet*/\n  {\n    var o = opts || {};\n    var ws\n    /*:Worksheet*/\n    = o.dense ? []\n    /*:any*/\n    : {}\n    /*:any*/\n    ;\n    var rows = str.match(/\\\\trowd.*?\\\\row\\b/g);\n    if (!rows.length) throw new Error(\"RTF missing table\");\n    var range\n    /*:Range*/\n    = {\n      s: {\n        c: 0,\n        r: 0\n      },\n      e: {\n        c: 0,\n        r: rows.length - 1\n      }\n    }\n    /*:any*/\n    ;\n    rows.forEach(function (rowtf, R) {\n      if (Array.isArray(ws)) ws[R] = [];\n      var rtfre = /\\\\\\w+\\b/g;\n      var last_index = 0;\n      var res;\n      var C = -1;\n\n      while (res = rtfre.exec(rowtf)) {\n        switch (res[0]) {\n          case \"\\\\cell\":\n            var data = rowtf.slice(last_index, rtfre.lastIndex - res[0].length);\n            if (data[0] == \" \") data = data.slice(1);\n            ++C;\n\n            if (data.length) {\n              // TODO: value parsing, including codepage adjustments\n              var cell = {\n                v: data,\n                t: \"s\"\n              };\n              if (Array.isArray(ws)) ws[R][C] = cell;else ws[encode_cell({\n                r: R,\n                c: C\n              })] = cell;\n            }\n\n            break;\n        }\n\n        last_index = rtfre.lastIndex;\n      }\n\n      if (C > range.e.c) range.e.c = C;\n    });\n    ws['!ref'] = encode_range(range);\n    return ws;\n  }\n\n  function rtf_to_workbook(d\n  /*:RawData*/\n  , opts)\n  /*:Workbook*/\n  {\n    return sheet_to_workbook(rtf_to_sheet(d, opts), opts);\n  }\n  /* TODO: this is a stub */\n\n\n  function sheet_to_rtf(ws\n  /*:Worksheet*/\n\n  /*::, opts*/\n  )\n  /*:string*/\n  {\n    var o = [\"{\\\\rtf1\\\\ansi\"];\n    var r = safe_decode_range(ws['!ref']),\n        cell\n    /*:Cell*/\n    ;\n    var dense = Array.isArray(ws);\n\n    for (var R = r.s.r; R <= r.e.r; ++R) {\n      o.push(\"\\\\trowd\\\\trautofit1\");\n\n      for (var C = r.s.c; C <= r.e.c; ++C) {\n        o.push(\"\\\\cellx\" + (C + 1));\n      }\n\n      o.push(\"\\\\pard\\\\intbl\");\n\n      for (C = r.s.c; C <= r.e.c; ++C) {\n        var coord = encode_cell({\n          r: R,\n          c: C\n        });\n        cell = dense ? (ws[R] || [])[C] : ws[coord];\n        if (!cell || cell.v == null && (!cell.f || cell.F)) continue;\n        o.push(\" \" + (cell.w || (format_cell(cell), cell.w)));\n        o.push(\"\\\\cell\");\n      }\n\n      o.push(\"\\\\pard\\\\intbl\\\\row\");\n    }\n\n    return o.join(\"\") + \"}\";\n  }\n\n  return {\n    to_workbook: rtf_to_workbook,\n    to_sheet: rtf_to_sheet,\n    from_sheet: sheet_to_rtf\n  };\n}();\n\nfunction hex2RGB(h) {\n  var o = h.slice(h[0] === \"#\" ? 1 : 0).slice(0, 6);\n  return [parseInt(o.slice(0, 2), 16), parseInt(o.slice(2, 4), 16), parseInt(o.slice(4, 6), 16)];\n}\n\nfunction rgb2Hex(rgb) {\n  for (var i = 0, o = 1; i != 3; ++i) {\n    o = o * 256 + (rgb[i] > 255 ? 255 : rgb[i] < 0 ? 0 : rgb[i]);\n  }\n\n  return o.toString(16).toUpperCase().slice(1);\n}\n\nfunction rgb2HSL(rgb) {\n  var R = rgb[0] / 255,\n      G = rgb[1] / 255,\n      B = rgb[2] / 255;\n  var M = Math.max(R, G, B),\n      m = Math.min(R, G, B),\n      C = M - m;\n  if (C === 0) return [0, 0, R];\n  var H6 = 0,\n      S = 0,\n      L2 = M + m;\n  S = C / (L2 > 1 ? 2 - L2 : L2);\n\n  switch (M) {\n    case R:\n      H6 = ((G - B) / C + 6) % 6;\n      break;\n\n    case G:\n      H6 = (B - R) / C + 2;\n      break;\n\n    case B:\n      H6 = (R - G) / C + 4;\n      break;\n  }\n\n  return [H6 / 6, S, L2 / 2];\n}\n\nfunction hsl2RGB(hsl) {\n  var H = hsl[0],\n      S = hsl[1],\n      L = hsl[2];\n  var C = S * 2 * (L < 0.5 ? L : 1 - L),\n      m = L - C / 2;\n  var rgb = [m, m, m],\n      h6 = 6 * H;\n  var X;\n  if (S !== 0) switch (h6 | 0) {\n    case 0:\n    case 6:\n      X = C * h6;\n      rgb[0] += C;\n      rgb[1] += X;\n      break;\n\n    case 1:\n      X = C * (2 - h6);\n      rgb[0] += X;\n      rgb[1] += C;\n      break;\n\n    case 2:\n      X = C * (h6 - 2);\n      rgb[1] += C;\n      rgb[2] += X;\n      break;\n\n    case 3:\n      X = C * (4 - h6);\n      rgb[1] += X;\n      rgb[2] += C;\n      break;\n\n    case 4:\n      X = C * (h6 - 4);\n      rgb[2] += C;\n      rgb[0] += X;\n      break;\n\n    case 5:\n      X = C * (6 - h6);\n      rgb[2] += X;\n      rgb[0] += C;\n      break;\n  }\n\n  for (var i = 0; i != 3; ++i) {\n    rgb[i] = Math.round(rgb[i] * 255);\n  }\n\n  return rgb;\n}\n/* 18.8.3 bgColor tint algorithm */\n\n\nfunction rgb_tint(hex, tint) {\n  if (tint === 0) return hex;\n  var hsl = rgb2HSL(hex2RGB(hex));\n  if (tint < 0) hsl[2] = hsl[2] * (1 + tint);else hsl[2] = 1 - (1 - hsl[2]) * (1 - tint);\n  return rgb2Hex(hsl2RGB(hsl));\n}\n/* 18.3.1.13 width calculations */\n\n/* [MS-OI29500] 2.1.595 Column Width & Formatting */\n\n\nvar DEF_MDW = 6,\n    MAX_MDW = 15,\n    MIN_MDW = 1,\n    MDW = DEF_MDW;\n\nfunction width2px(width) {\n  return Math.floor((width + Math.round(128 / MDW) / 256) * MDW);\n}\n\nfunction px2char(px) {\n  return Math.floor((px - 5) / MDW * 100 + 0.5) / 100;\n}\n\nfunction char2width(chr) {\n  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; }\n\n\nfunction cycle_width(collw) {\n  return char2width(px2char(width2px(collw)));\n}\n/* XLSX/XLSB/XLS specify width in units of MDW */\n\n\nfunction find_mdw_colw(collw) {\n  var delta = Math.abs(collw - cycle_width(collw)),\n      _MDW = MDW;\n  if (delta > 0.005) for (MDW = MIN_MDW; MDW < MAX_MDW; ++MDW) {\n    if (Math.abs(collw - cycle_width(collw)) <= delta) {\n      delta = Math.abs(collw - cycle_width(collw));\n      _MDW = MDW;\n    }\n  }\n  MDW = _MDW;\n}\n/* XLML specifies width in terms of pixels */\n\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\n\nfunction process_col(coll\n/*:ColInfo*/\n) {\n  if (coll.width) {\n    coll.wpx = width2px(coll.width);\n    coll.wch = px2char(coll.wpx);\n    coll.MDW = MDW;\n  } else if (coll.wpx) {\n    coll.wch = px2char(coll.wpx);\n    coll.width = char2width(coll.wch);\n    coll.MDW = MDW;\n  } else if (typeof coll.wch == 'number') {\n    coll.width = char2width(coll.wch);\n    coll.wpx = width2px(coll.width);\n    coll.MDW = MDW;\n  }\n\n  if (coll.customWidth) delete coll.customWidth;\n}\n\nvar DEF_PPI = 96,\n    PPI = DEF_PPI;\n\nfunction px2pt(px) {\n  return px * 96 / PPI;\n}\n\nfunction pt2px(pt) {\n  return pt * PPI / 96;\n}\n/* [MS-EXSPXML3] 2.4.54 ST_enmPattern */\n\n\nvar XLMLPatternTypeMap = {\n  \"None\": \"none\",\n  \"Solid\": \"solid\",\n  \"Gray50\": \"mediumGray\",\n  \"Gray75\": \"darkGray\",\n  \"Gray25\": \"lightGray\",\n  \"HorzStripe\": \"darkHorizontal\",\n  \"VertStripe\": \"darkVertical\",\n  \"ReverseDiagStripe\": \"darkDown\",\n  \"DiagStripe\": \"darkUp\",\n  \"DiagCross\": \"darkGrid\",\n  \"ThickDiagCross\": \"darkTrellis\",\n  \"ThinHorzStripe\": \"lightHorizontal\",\n  \"ThinVertStripe\": \"lightVertical\",\n  \"ThinReverseDiagStripe\": \"lightDown\",\n  \"ThinHorzCross\": \"lightGrid\"\n};\n/* 18.8.5 borders CT_Borders */\n\nfunction parse_borders(t, styles, themes, opts) {\n  styles.Borders = [];\n  var border = {};\n  var pass = false;\n  (t[0].match(tagregex) || []).forEach(function (x) {\n    var y = parsexmltag(x);\n\n    switch (strip_ns(y[0])) {\n      case '<borders':\n      case '<borders>':\n      case '</borders>':\n        break;\n\n      /* 18.8.4 border CT_Border */\n\n      case '<border':\n      case '<border>':\n      case '<border/>':\n        border =\n        /*::(*/\n        {}\n        /*:: :any)*/\n        ;\n        if (y.diagonalUp) border.diagonalUp = parsexmlbool(y.diagonalUp);\n        if (y.diagonalDown) border.diagonalDown = parsexmlbool(y.diagonalDown);\n        styles.Borders.push(border);\n        break;\n\n      case '</border>':\n        break;\n\n      /* note: not in spec, appears to be CT_BorderPr */\n\n      case '<left/>':\n        break;\n\n      case '<left':\n      case '<left>':\n        break;\n\n      case '</left>':\n        break;\n\n      /* note: not in spec, appears to be CT_BorderPr */\n\n      case '<right/>':\n        break;\n\n      case '<right':\n      case '<right>':\n        break;\n\n      case '</right>':\n        break;\n\n      /* 18.8.43 top CT_BorderPr */\n\n      case '<top/>':\n        break;\n\n      case '<top':\n      case '<top>':\n        break;\n\n      case '</top>':\n        break;\n\n      /* 18.8.6 bottom CT_BorderPr */\n\n      case '<bottom/>':\n        break;\n\n      case '<bottom':\n      case '<bottom>':\n        break;\n\n      case '</bottom>':\n        break;\n\n      /* 18.8.13 diagonal CT_BorderPr */\n\n      case '<diagonal':\n      case '<diagonal>':\n      case '<diagonal/>':\n        break;\n\n      case '</diagonal>':\n        break;\n\n      /* 18.8.25 horizontal CT_BorderPr */\n\n      case '<horizontal':\n      case '<horizontal>':\n      case '<horizontal/>':\n        break;\n\n      case '</horizontal>':\n        break;\n\n      /* 18.8.44 vertical CT_BorderPr */\n\n      case '<vertical':\n      case '<vertical>':\n      case '<vertical/>':\n        break;\n\n      case '</vertical>':\n        break;\n\n      /* 18.8.37 start CT_BorderPr */\n\n      case '<start':\n      case '<start>':\n      case '<start/>':\n        break;\n\n      case '</start>':\n        break;\n\n      /* 18.8.16 end CT_BorderPr */\n\n      case '<end':\n      case '<end>':\n      case '<end/>':\n        break;\n\n      case '</end>':\n        break;\n\n      /* 18.8.? color CT_Color */\n\n      case '<color':\n      case '<color>':\n        break;\n\n      case '<color/>':\n      case '</color>':\n        break;\n\n      /* 18.2.10 extLst CT_ExtensionList ? */\n\n      case '<extLst':\n      case '<extLst>':\n      case '</extLst>':\n        break;\n\n      case '<ext':\n        pass = true;\n        break;\n\n      case '</ext>':\n        pass = false;\n        break;\n\n      default:\n        if (opts && opts.WTF) {\n          if (!pass) throw new Error('unrecognized ' + y[0] + ' in borders');\n        }\n\n    }\n  });\n}\n/* 18.8.21 fills CT_Fills */\n\n\nfunction parse_fills(t, styles, themes, opts) {\n  styles.Fills = [];\n  var fill = {};\n  var pass = false;\n  (t[0].match(tagregex) || []).forEach(function (x) {\n    var y = parsexmltag(x);\n\n    switch (strip_ns(y[0])) {\n      case '<fills':\n      case '<fills>':\n      case '</fills>':\n        break;\n\n      /* 18.8.20 fill CT_Fill */\n\n      case '<fill>':\n      case '<fill':\n      case '<fill/>':\n        fill = {};\n        styles.Fills.push(fill);\n        break;\n\n      case '</fill>':\n        break;\n\n      /* 18.8.24 gradientFill CT_GradientFill */\n\n      case '<gradientFill>':\n        break;\n\n      case '<gradientFill':\n      case '</gradientFill>':\n        styles.Fills.push(fill);\n        fill = {};\n        break;\n\n      /* 18.8.32 patternFill CT_PatternFill */\n\n      case '<patternFill':\n      case '<patternFill>':\n        if (y.patternType) fill.patternType = y.patternType;\n        break;\n\n      case '<patternFill/>':\n      case '</patternFill>':\n        break;\n\n      /* 18.8.3 bgColor CT_Color */\n\n      case '<bgColor':\n        if (!fill.bgColor) fill.bgColor = {};\n        if (y.indexed) fill.bgColor.indexed = parseInt(y.indexed, 10);\n        if (y.theme) fill.bgColor.theme = parseInt(y.theme, 10);\n        if (y.tint) fill.bgColor.tint = parseFloat(y.tint);\n        /* Excel uses ARGB strings */\n\n        if (y.rgb) fill.bgColor.rgb = y.rgb.slice(-6);\n        break;\n\n      case '<bgColor/>':\n      case '</bgColor>':\n        break;\n\n      /* 18.8.19 fgColor CT_Color */\n\n      case '<fgColor':\n        if (!fill.fgColor) fill.fgColor = {};\n        if (y.theme) fill.fgColor.theme = parseInt(y.theme, 10);\n        if (y.tint) fill.fgColor.tint = parseFloat(y.tint);\n        /* Excel uses ARGB strings */\n\n        if (y.rgb != null) fill.fgColor.rgb = y.rgb.slice(-6);\n        break;\n\n      case '<fgColor/>':\n      case '</fgColor>':\n        break;\n\n      /* 18.8.38 stop CT_GradientStop */\n\n      case '<stop':\n      case '<stop/>':\n        break;\n\n      case '</stop>':\n        break;\n\n      /* 18.8.? color CT_Color */\n\n      case '<color':\n      case '<color/>':\n        break;\n\n      case '</color>':\n        break;\n\n      /* 18.2.10 extLst CT_ExtensionList ? */\n\n      case '<extLst':\n      case '<extLst>':\n      case '</extLst>':\n        break;\n\n      case '<ext':\n        pass = true;\n        break;\n\n      case '</ext>':\n        pass = false;\n        break;\n\n      default:\n        if (opts && opts.WTF) {\n          if (!pass) throw new Error('unrecognized ' + y[0] + ' in fills');\n        }\n\n    }\n  });\n}\n/* 18.8.23 fonts CT_Fonts */\n\n\nfunction parse_fonts(t, styles, themes, opts) {\n  styles.Fonts = [];\n  var font = {};\n  var pass = false;\n  (t[0].match(tagregex) || []).forEach(function (x) {\n    var y = parsexmltag(x);\n\n    switch (strip_ns(y[0])) {\n      case '<fonts':\n      case '<fonts>':\n      case '</fonts>':\n        break;\n\n      /* 18.8.22 font CT_Font */\n\n      case '<font':\n      case '<font>':\n        break;\n\n      case '</font>':\n      case '<font/>':\n        styles.Fonts.push(font);\n        font = {};\n        break;\n\n      /* 18.8.29 name CT_FontName */\n\n      case '<name':\n        if (y.val) font.name = utf8read(y.val);\n        break;\n\n      case '<name/>':\n      case '</name>':\n        break;\n\n      /* 18.8.2  b CT_BooleanProperty */\n\n      case '<b':\n        font.bold = y.val ? parsexmlbool(y.val) : 1;\n        break;\n\n      case '<b/>':\n        font.bold = 1;\n        break;\n\n      /* 18.8.26 i CT_BooleanProperty */\n\n      case '<i':\n        font.italic = y.val ? parsexmlbool(y.val) : 1;\n        break;\n\n      case '<i/>':\n        font.italic = 1;\n        break;\n\n      /* 18.4.13 u CT_UnderlineProperty */\n\n      case '<u':\n        switch (y.val) {\n          case \"none\":\n            font.underline = 0x00;\n            break;\n\n          case \"single\":\n            font.underline = 0x01;\n            break;\n\n          case \"double\":\n            font.underline = 0x02;\n            break;\n\n          case \"singleAccounting\":\n            font.underline = 0x21;\n            break;\n\n          case \"doubleAccounting\":\n            font.underline = 0x22;\n            break;\n        }\n\n        break;\n\n      case '<u/>':\n        font.underline = 1;\n        break;\n\n      /* 18.4.10 strike CT_BooleanProperty */\n\n      case '<strike':\n        font.strike = y.val ? parsexmlbool(y.val) : 1;\n        break;\n\n      case '<strike/>':\n        font.strike = 1;\n        break;\n\n      /* 18.4.2  outline CT_BooleanProperty */\n\n      case '<outline':\n        font.outline = y.val ? parsexmlbool(y.val) : 1;\n        break;\n\n      case '<outline/>':\n        font.outline = 1;\n        break;\n\n      /* 18.8.36 shadow CT_BooleanProperty */\n\n      case '<shadow':\n        font.shadow = y.val ? parsexmlbool(y.val) : 1;\n        break;\n\n      case '<shadow/>':\n        font.shadow = 1;\n        break;\n\n      /* 18.8.12 condense CT_BooleanProperty */\n\n      case '<condense':\n        font.condense = y.val ? parsexmlbool(y.val) : 1;\n        break;\n\n      case '<condense/>':\n        font.condense = 1;\n        break;\n\n      /* 18.8.17 extend CT_BooleanProperty */\n\n      case '<extend':\n        font.extend = y.val ? parsexmlbool(y.val) : 1;\n        break;\n\n      case '<extend/>':\n        font.extend = 1;\n        break;\n\n      /* 18.4.11 sz CT_FontSize */\n\n      case '<sz':\n        if (y.val) font.sz = +y.val;\n        break;\n\n      case '<sz/>':\n      case '</sz>':\n        break;\n\n      /* 18.4.14 vertAlign CT_VerticalAlignFontProperty */\n\n      case '<vertAlign':\n        if (y.val) font.vertAlign = y.val;\n        break;\n\n      case '<vertAlign/>':\n      case '</vertAlign>':\n        break;\n\n      /* 18.8.18 family CT_FontFamily */\n\n      case '<family':\n        if (y.val) font.family = parseInt(y.val, 10);\n        break;\n\n      case '<family/>':\n      case '</family>':\n        break;\n\n      /* 18.8.35 scheme CT_FontScheme */\n\n      case '<scheme':\n        if (y.val) font.scheme = y.val;\n        break;\n\n      case '<scheme/>':\n      case '</scheme>':\n        break;\n\n      /* 18.4.1 charset CT_IntProperty */\n\n      case '<charset':\n        if (y.val == '1') break;\n        y.codepage = CS2CP[parseInt(y.val, 10)];\n        break;\n\n      /* 18.?.? color CT_Color */\n\n      case '<color':\n        if (!font.color) font.color = {};\n        if (y.auto) font.color.auto = parsexmlbool(y.auto);\n        if (y.rgb) font.color.rgb = y.rgb.slice(-6);else if (y.indexed) {\n          font.color.index = parseInt(y.indexed, 10);\n          var icv = XLSIcv[font.color.index];\n          if (font.color.index == 81) icv = XLSIcv[1];\n          if (!icv) icv = XLSIcv[1]; //throw new Error(x); // note: 206 is valid\n\n          font.color.rgb = icv[0].toString(16) + icv[1].toString(16) + icv[2].toString(16);\n        } else if (y.theme) {\n          font.color.theme = parseInt(y.theme, 10);\n          if (y.tint) font.color.tint = parseFloat(y.tint);\n\n          if (y.theme && themes.themeElements && themes.themeElements.clrScheme) {\n            font.color.rgb = rgb_tint(themes.themeElements.clrScheme[font.color.theme].rgb, font.color.tint || 0);\n          }\n        }\n        break;\n\n      case '<color/>':\n      case '</color>':\n        break;\n\n      /* note: sometimes mc:AlternateContent appears bare */\n\n      case '<AlternateContent':\n        pass = true;\n        break;\n\n      case '</AlternateContent>':\n        pass = false;\n        break;\n\n      /* 18.2.10 extLst CT_ExtensionList ? */\n\n      case '<extLst':\n      case '<extLst>':\n      case '</extLst>':\n        break;\n\n      case '<ext':\n        pass = true;\n        break;\n\n      case '</ext>':\n        pass = false;\n        break;\n\n      default:\n        if (opts && opts.WTF) {\n          if (!pass) throw new Error('unrecognized ' + y[0] + ' in fonts');\n        }\n\n    }\n  });\n}\n/* 18.8.31 numFmts CT_NumFmts */\n\n\nfunction parse_numFmts(t, styles, opts) {\n  styles.NumberFmt = [];\n  var k\n  /*Array<number>*/\n  = keys(table_fmt)\n  /*:any*/\n  ;\n\n  for (var i = 0; i < k.length; ++i) {\n    styles.NumberFmt[k[i]] = table_fmt[k[i]];\n  }\n\n  var m = t[0].match(tagregex);\n  if (!m) return;\n\n  for (i = 0; i < m.length; ++i) {\n    var y = parsexmltag(m[i]);\n\n    switch (strip_ns(y[0])) {\n      case '<numFmts':\n      case '</numFmts>':\n      case '<numFmts/>':\n      case '<numFmts>':\n        break;\n\n      case '<numFmt':\n        {\n          var f = unescapexml(utf8read(y.formatCode)),\n              j = parseInt(y.numFmtId, 10);\n          styles.NumberFmt[j] = f;\n\n          if (j > 0) {\n            if (j > 0x188) {\n              for (j = 0x188; j > 0x3c; --j) {\n                if (styles.NumberFmt[j] == null) break;\n              }\n\n              styles.NumberFmt[j] = f;\n            }\n\n            SSF_load(f, j);\n          }\n        }\n        break;\n\n      case '</numFmt>':\n        break;\n\n      default:\n        if (opts.WTF) throw new Error('unrecognized ' + y[0] + ' in numFmts');\n    }\n  }\n}\n\nfunction write_numFmts(NF\n/*:{[n:number|string]:string}*/\n\n/*::, opts*/\n) {\n  var o = [\"<numFmts>\"];\n  [[5, 8], [23, 26], [41, 44], [\n  /*63*/\n  50,\n  /*66],[164,*/\n  392]].forEach(function (r) {\n    for (var i = r[0]; i <= r[1]; ++i) {\n      if (NF[i] != null) o[o.length] = writextag('numFmt', null, {\n        numFmtId: i,\n        formatCode: escapexml(NF[i])\n      });\n    }\n  });\n  if (o.length === 1) return \"\";\n  o[o.length] = \"</numFmts>\";\n  o[0] = writextag('numFmts', null, {\n    count: o.length - 2\n  }).replace(\"/>\", \">\");\n  return o.join(\"\");\n}\n/* 18.8.10 cellXfs CT_CellXfs */\n\n\nvar cellXF_uint = [\"numFmtId\", \"fillId\", \"fontId\", \"borderId\", \"xfId\"];\nvar cellXF_bool = [\"applyAlignment\", \"applyBorder\", \"applyFill\", \"applyFont\", \"applyNumberFormat\", \"applyProtection\", \"pivotButton\", \"quotePrefix\"];\n\nfunction parse_cellXfs(t, styles, opts) {\n  styles.CellXf = [];\n  var xf;\n  var pass = false;\n  (t[0].match(tagregex) || []).forEach(function (x) {\n    var y = parsexmltag(x),\n        i = 0;\n\n    switch (strip_ns(y[0])) {\n      case '<cellXfs':\n      case '<cellXfs>':\n      case '<cellXfs/>':\n      case '</cellXfs>':\n        break;\n\n      /* 18.8.45 xf CT_Xf */\n\n      case '<xf':\n      case '<xf/>':\n        xf = y;\n        delete xf[0];\n\n        for (i = 0; i < cellXF_uint.length; ++i) {\n          if (xf[cellXF_uint[i]]) xf[cellXF_uint[i]] = parseInt(xf[cellXF_uint[i]], 10);\n        }\n\n        for (i = 0; i < cellXF_bool.length; ++i) {\n          if (xf[cellXF_bool[i]]) xf[cellXF_bool[i]] = parsexmlbool(xf[cellXF_bool[i]]);\n        }\n\n        if (styles.NumberFmt && xf.numFmtId > 0x188) {\n          for (i = 0x188; i > 0x3c; --i) {\n            if (styles.NumberFmt[xf.numFmtId] == styles.NumberFmt[i]) {\n              xf.numFmtId = i;\n              break;\n            }\n          }\n        }\n\n        styles.CellXf.push(xf);\n        break;\n\n      case '</xf>':\n        break;\n\n      /* 18.8.1 alignment CT_CellAlignment */\n\n      case '<alignment':\n      case '<alignment/>':\n        var alignment = {};\n        if (y.vertical) alignment.vertical = y.vertical;\n        if (y.horizontal) alignment.horizontal = y.horizontal;\n        if (y.textRotation != null) alignment.textRotation = y.textRotation;\n        if (y.indent) alignment.indent = y.indent;\n        if (y.wrapText) alignment.wrapText = parsexmlbool(y.wrapText);\n        xf.alignment = alignment;\n        break;\n\n      case '</alignment>':\n        break;\n\n      /* 18.8.33 protection CT_CellProtection */\n\n      case '<protection':\n        break;\n\n      case '</protection>':\n      case '<protection/>':\n        break;\n\n      /* note: sometimes mc:AlternateContent appears bare */\n\n      case '<AlternateContent':\n        pass = true;\n        break;\n\n      case '</AlternateContent>':\n        pass = false;\n        break;\n\n      /* 18.2.10 extLst CT_ExtensionList ? */\n\n      case '<extLst':\n      case '<extLst>':\n      case '</extLst>':\n        break;\n\n      case '<ext':\n        pass = true;\n        break;\n\n      case '</ext>':\n        pass = false;\n        break;\n\n      default:\n        if (opts && opts.WTF) {\n          if (!pass) throw new Error('unrecognized ' + y[0] + ' in cellXfs');\n        }\n\n    }\n  });\n}\n\nfunction write_cellXfs(cellXfs)\n/*:string*/\n{\n  var o\n  /*:Array<string>*/\n  = [];\n  o[o.length] = writextag('cellXfs', null);\n  cellXfs.forEach(function (c) {\n    o[o.length] = writextag('xf', null, c);\n  });\n  o[o.length] = \"</cellXfs>\";\n  if (o.length === 2) return \"\";\n  o[0] = writextag('cellXfs', null, {\n    count: o.length - 2\n  }).replace(\"/>\", \">\");\n  return o.join(\"\");\n}\n/* 18.8 Styles CT_Stylesheet*/\n\n\nvar parse_sty_xml = /*#__PURE__*/function make_pstyx() {\n  var numFmtRegex = /<(?:\\w+:)?numFmts([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?numFmts>/;\n  var cellXfRegex = /<(?:\\w+:)?cellXfs([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?cellXfs>/;\n  var fillsRegex = /<(?:\\w+:)?fills([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?fills>/;\n  var fontsRegex = /<(?:\\w+:)?fonts([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?fonts>/;\n  var bordersRegex = /<(?:\\w+:)?borders([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?borders>/;\n  return function parse_sty_xml(data, themes, opts) {\n    var styles = {};\n    if (!data) return styles;\n    data = data.replace(/<!--([\\s\\S]*?)-->/mg, \"\").replace(/<!DOCTYPE[^\\[]*\\[[^\\]]*\\]>/gm, \"\");\n    /* 18.8.39 styleSheet CT_Stylesheet */\n\n    var t;\n    /* 18.8.31 numFmts CT_NumFmts ? */\n\n    if (t = data.match(numFmtRegex)) parse_numFmts(t, styles, opts);\n    /* 18.8.23 fonts CT_Fonts ? */\n\n    if (t = data.match(fontsRegex)) parse_fonts(t, styles, themes, opts);\n    /* 18.8.21 fills CT_Fills ? */\n\n    if (t = data.match(fillsRegex)) parse_fills(t, styles, themes, opts);\n    /* 18.8.5  borders CT_Borders ? */\n\n    if (t = data.match(bordersRegex)) parse_borders(t, styles, themes, opts);\n    /* 18.8.9  cellStyleXfs CT_CellStyleXfs ? */\n\n    /* 18.8.8  cellStyles CT_CellStyles ? */\n\n    /* 18.8.10 cellXfs CT_CellXfs ? */\n\n    if (t = data.match(cellXfRegex)) parse_cellXfs(t, styles, opts);\n    /* 18.8.15 dxfs CT_Dxfs ? */\n\n    /* 18.8.42 tableStyles CT_TableStyles ? */\n\n    /* 18.8.11 colors CT_Colors ? */\n\n    /* 18.2.10 extLst CT_ExtensionList ? */\n\n    return styles;\n  };\n}();\n\nfunction write_sty_xml(wb\n/*:Workbook*/\n, opts)\n/*:string*/\n{\n  var o = [XML_HEADER, writextag('styleSheet', null, {\n    'xmlns': XMLNS_main[0],\n    'xmlns:vt': XMLNS.vt\n  })],\n      w;\n  if (wb.SSF && (w = write_numFmts(wb.SSF)) != null) o[o.length] = w;\n  o[o.length] = '<fonts count=\"1\"><font><sz val=\"12\"/><color theme=\"1\"/><name val=\"Calibri\"/><family val=\"2\"/><scheme val=\"minor\"/></font></fonts>';\n  o[o.length] = '<fills count=\"2\"><fill><patternFill patternType=\"none\"/></fill><fill><patternFill patternType=\"gray125\"/></fill></fills>';\n  o[o.length] = '<borders count=\"1\"><border><left/><right/><top/><bottom/><diagonal/></border></borders>';\n  o[o.length] = '<cellStyleXfs count=\"1\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\"/></cellStyleXfs>';\n  if (w = write_cellXfs(opts.cellXfs)) o[o.length] = w;\n  o[o.length] = '<cellStyles count=\"1\"><cellStyle name=\"Normal\" xfId=\"0\" builtinId=\"0\"/></cellStyles>';\n  o[o.length] = '<dxfs count=\"0\"/>';\n  o[o.length] = '<tableStyles count=\"0\" defaultTableStyle=\"TableStyleMedium9\" defaultPivotStyle=\"PivotStyleMedium4\"/>';\n\n  if (o.length > 2) {\n    o[o.length] = '</styleSheet>';\n    o[1] = o[1].replace(\"/>\", \">\");\n  }\n\n  return o.join(\"\");\n}\n/* [MS-XLSB] 2.4.657 BrtFmt */\n\n\nfunction parse_BrtFmt(data, length\n/*:number*/\n) {\n  var numFmtId = data.read_shift(2);\n  var stFmtCode = parse_XLWideString(data, length - 2);\n  return [numFmtId, stFmtCode];\n}\n\nfunction write_BrtFmt(i\n/*:number*/\n, f\n/*:string*/\n, o) {\n  if (!o) o = new_buf(6 + 4 * f.length);\n  o.write_shift(2, i);\n  write_XLWideString(f, o);\n  var out = o.length > o.l ? o.slice(0, o.l) : o;\n  if (o.l == null) o.l = o.length;\n  return out;\n}\n/* [MS-XLSB] 2.4.659 BrtFont TODO */\n\n\nfunction parse_BrtFont(data, length\n/*:number*/\n, opts) {\n  var out = {}\n  /*:any*/\n  ;\n  out.sz = data.read_shift(2) / 20;\n  var grbit = parse_FontFlags(data, 2, opts);\n  if (grbit.fItalic) out.italic = 1;\n  if (grbit.fCondense) out.condense = 1;\n  if (grbit.fExtend) out.extend = 1;\n  if (grbit.fShadow) out.shadow = 1;\n  if (grbit.fOutline) out.outline = 1;\n  if (grbit.fStrikeout) out.strike = 1;\n  var bls = data.read_shift(2);\n  if (bls === 0x02BC) out.bold = 1;\n\n  switch (data.read_shift(2)) {\n    /* case 0: out.vertAlign = \"baseline\"; break; */\n    case 1:\n      out.vertAlign = \"superscript\";\n      break;\n\n    case 2:\n      out.vertAlign = \"subscript\";\n      break;\n  }\n\n  var underline = data.read_shift(1);\n  if (underline != 0) out.underline = underline;\n  var family = data.read_shift(1);\n  if (family > 0) out.family = family;\n  var bCharSet = data.read_shift(1);\n  if (bCharSet > 0) out.charset = bCharSet;\n  data.l++;\n  out.color = parse_BrtColor(data, 8);\n\n  switch (data.read_shift(1)) {\n    /* case 0: out.scheme = \"none\": break; */\n    case 1:\n      out.scheme = \"major\";\n      break;\n\n    case 2:\n      out.scheme = \"minor\";\n      break;\n  }\n\n  out.name = parse_XLWideString(data, length - 21);\n  return out;\n}\n\nfunction write_BrtFont(font\n/*:any*/\n, o) {\n  if (!o) o = new_buf(25 + 4 * 32);\n  o.write_shift(2, font.sz * 20);\n  write_FontFlags(font, o);\n  o.write_shift(2, font.bold ? 0x02BC : 0x0190);\n  var sss = 0;\n  if (font.vertAlign == \"superscript\") sss = 1;else if (font.vertAlign == \"subscript\") sss = 2;\n  o.write_shift(2, sss);\n  o.write_shift(1, font.underline || 0);\n  o.write_shift(1, font.family || 0);\n  o.write_shift(1, font.charset || 0);\n  o.write_shift(1, 0);\n  write_BrtColor(font.color, o);\n  var scheme = 0;\n  if (font.scheme == \"major\") scheme = 1;\n  if (font.scheme == \"minor\") scheme = 2;\n  o.write_shift(1, scheme);\n  write_XLWideString(font.name, o);\n  return o.length > o.l ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.4.650 BrtFill */\n\n\nvar XLSBFillPTNames = [\"none\", \"solid\", \"mediumGray\", \"darkGray\", \"lightGray\", \"darkHorizontal\", \"darkVertical\", \"darkDown\", \"darkUp\", \"darkGrid\", \"darkTrellis\", \"lightHorizontal\", \"lightVertical\", \"lightDown\", \"lightUp\", \"lightGrid\", \"lightTrellis\", \"gray125\", \"gray0625\"];\nvar rev_XLSBFillPTNames\n/*:EvertNumType*/\n;\n/* TODO: gradient fill representation */\n\nvar parse_BrtFill = parsenoop;\n\nfunction write_BrtFill(fill, o) {\n  if (!o) o = new_buf(4 * 3 + 8 * 7 + 16 * 1);\n  if (!rev_XLSBFillPTNames) rev_XLSBFillPTNames = evert(XLSBFillPTNames)\n  /*:any*/\n  ;\n  var fls\n  /*:number*/\n  = rev_XLSBFillPTNames[fill.patternType];\n  if (fls == null) fls = 0x28;\n  o.write_shift(4, fls);\n  var j = 0;\n\n  if (fls != 0x28) {\n    /* TODO: custom FG Color */\n    write_BrtColor({\n      auto: 1\n    }, o);\n    /* TODO: custom BG Color */\n\n    write_BrtColor({\n      auto: 1\n    }, o);\n\n    for (; j < 12; ++j) {\n      o.write_shift(4, 0);\n    }\n  } else {\n    for (; j < 4; ++j) {\n      o.write_shift(4, 0);\n    }\n\n    for (; j < 12; ++j) {\n      o.write_shift(4, 0);\n    }\n    /* TODO */\n\n    /* iGradientType */\n\n    /* xnumDegree */\n\n    /* xnumFillToLeft */\n\n    /* xnumFillToRight */\n\n    /* xnumFillToTop */\n\n    /* xnumFillToBottom */\n\n    /* cNumStop */\n\n    /* xfillGradientStop */\n\n  }\n\n  return o.length > o.l ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.4.824 BrtXF */\n\n\nfunction parse_BrtXF(data, length\n/*:number*/\n) {\n  var tgt = data.l + length;\n  var ixfeParent = data.read_shift(2);\n  var ifmt = data.read_shift(2);\n  data.l = tgt;\n  return {\n    ixfe: ixfeParent,\n    numFmtId: ifmt\n  };\n}\n\nfunction write_BrtXF(data, ixfeP, o) {\n  if (!o) o = new_buf(16);\n  o.write_shift(2, ixfeP || 0);\n  o.write_shift(2, data.numFmtId || 0);\n  o.write_shift(2, 0);\n  /* iFont */\n\n  o.write_shift(2, 0);\n  /* iFill */\n\n  o.write_shift(2, 0);\n  /* ixBorder */\n\n  o.write_shift(1, 0);\n  /* trot */\n\n  o.write_shift(1, 0);\n  /* indent */\n\n  var flow = 0;\n  o.write_shift(1, flow);\n  /* flags */\n\n  o.write_shift(1, 0);\n  /* flags */\n\n  o.write_shift(1, 0);\n  /* xfGrbitAtr */\n\n  o.write_shift(1, 0);\n  return o;\n}\n/* [MS-XLSB] 2.5.4 Blxf TODO */\n\n\nfunction write_Blxf(data, o) {\n  if (!o) o = new_buf(10);\n  o.write_shift(1, 0);\n  /* dg */\n\n  o.write_shift(1, 0);\n  o.write_shift(4, 0);\n  /* color */\n\n  o.write_shift(4, 0);\n  /* color */\n\n  return o;\n}\n/* [MS-XLSB] 2.4.302 BrtBorder TODO */\n\n\nvar parse_BrtBorder = parsenoop;\n\nfunction write_BrtBorder(border, o) {\n  if (!o) o = new_buf(51);\n  o.write_shift(1, 0);\n  /* diagonal */\n\n  write_Blxf(null, o);\n  /* top */\n\n  write_Blxf(null, o);\n  /* bottom */\n\n  write_Blxf(null, o);\n  /* left */\n\n  write_Blxf(null, o);\n  /* right */\n\n  write_Blxf(null, o);\n  /* diag */\n\n  return o.length > o.l ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.4.763 BrtStyle TODO */\n\n\nfunction write_BrtStyle(style, o) {\n  if (!o) o = new_buf(12 + 4 * 10);\n  o.write_shift(4, style.xfId);\n  o.write_shift(2, 1);\n  o.write_shift(1, +style.builtinId);\n  o.write_shift(1, 0);\n  /* iLevel */\n\n  write_XLNullableWideString(style.name || \"\", o);\n  return o.length > o.l ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.4.272 BrtBeginTableStyles */\n\n\nfunction write_BrtBeginTableStyles(cnt, defTableStyle, defPivotStyle) {\n  var o = new_buf(4 + 256 * 2 * 4);\n  o.write_shift(4, cnt);\n  write_XLNullableWideString(defTableStyle, o);\n  write_XLNullableWideString(defPivotStyle, o);\n  return o.length > o.l ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.1.7.50 Styles */\n\n\nfunction parse_sty_bin(data, themes, opts) {\n  var styles = {};\n  styles.NumberFmt = []\n  /*:any*/\n  ;\n\n  for (var y in table_fmt) {\n    styles.NumberFmt[y] = table_fmt[y];\n  }\n\n  styles.CellXf = [];\n  styles.Fonts = [];\n  var state\n  /*:Array<string>*/\n  = [];\n  var pass = false;\n  recordhopper(data, function hopper_sty(val, R, RT) {\n    switch (RT) {\n      case 0x002C:\n        /* BrtFmt */\n        styles.NumberFmt[val[0]] = val[1];\n        SSF_load(val[1], val[0]);\n        break;\n\n      case 0x002B:\n        /* BrtFont */\n        styles.Fonts.push(val);\n\n        if (val.color.theme != null && themes && themes.themeElements && themes.themeElements.clrScheme) {\n          val.color.rgb = rgb_tint(themes.themeElements.clrScheme[val.color.theme].rgb, val.color.tint || 0);\n        }\n\n        break;\n\n      case 0x0401:\n        /* BrtKnownFonts */\n        break;\n\n      case 0x002D:\n        /* BrtFill */\n        break;\n\n      case 0x002E:\n        /* BrtBorder */\n        break;\n\n      case 0x002F:\n        /* BrtXF */\n        if (state[state.length - 1] == 0x0269\n        /* BrtBeginCellXFs */\n        ) {\n          styles.CellXf.push(val);\n        }\n\n        break;\n\n      case 0x0030:\n      /* BrtStyle */\n\n      case 0x01FB:\n      /* BrtDXF */\n\n      case 0x023C:\n      /* BrtMRUColor */\n\n      case 0x01DB:\n        /* BrtIndexedColor */\n        break;\n\n      case 0x0493:\n      /* BrtDXF14 */\n\n      case 0x0836:\n      /* BrtDXF15 */\n\n      case 0x046A:\n      /* BrtSlicerStyleElement */\n\n      case 0x0200:\n      /* BrtTableStyleElement */\n\n      case 0x082F:\n      /* BrtTimelineStyleElement */\n\n      case 0x0C00:\n        /* BrtUid */\n        break;\n\n      case 0x0023:\n        /* BrtFRTBegin */\n        pass = true;\n        break;\n\n      case 0x0024:\n        /* BrtFRTEnd */\n        pass = false;\n        break;\n\n      case 0x0025:\n        /* BrtACBegin */\n        state.push(RT);\n        pass = true;\n        break;\n\n      case 0x0026:\n        /* BrtACEnd */\n        state.pop();\n        pass = false;\n        break;\n\n      default:\n        if (R.T > 0) state.push(RT);else if (R.T < 0) state.pop();else if (!pass || opts.WTF && state[state.length - 1] != 0x0025\n        /* BrtACBegin */\n        ) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n    }\n  });\n  return styles;\n}\n\nfunction write_FMTS_bin(ba, NF\n/*:?SSFTable*/\n) {\n  if (!NF) return;\n  var cnt = 0;\n  [[5, 8], [23, 26], [41, 44], [\n  /*63*/\n  50,\n  /*66],[164,*/\n  392]].forEach(function (r) {\n    /*:: if(!NF) return; */\n    for (var i = r[0]; i <= r[1]; ++i) {\n      if (NF[i] != null) ++cnt;\n    }\n  });\n  if (cnt == 0) return;\n  write_record(ba, 0x0267\n  /* BrtBeginFmts */\n  , write_UInt32LE(cnt));\n  [[5, 8], [23, 26], [41, 44], [\n  /*63*/\n  50,\n  /*66],[164,*/\n  392]].forEach(function (r) {\n    /*:: if(!NF) return; */\n    for (var i = r[0]; i <= r[1]; ++i) {\n      if (NF[i] != null) write_record(ba, 0x002C\n      /* BrtFmt */\n      , write_BrtFmt(i, NF[i]));\n    }\n  });\n  write_record(ba, 0x0268\n  /* BrtEndFmts */\n  );\n}\n\nfunction write_FONTS_bin(ba\n/*::, data*/\n) {\n  var cnt = 1;\n  if (cnt == 0) return;\n  write_record(ba, 0x0263\n  /* BrtBeginFonts */\n  , write_UInt32LE(cnt));\n  write_record(ba, 0x002B\n  /* BrtFont */\n  , write_BrtFont({\n    sz: 12,\n    color: {\n      theme: 1\n    },\n    name: \"Calibri\",\n    family: 2,\n    scheme: \"minor\"\n  }));\n  /* 1*65491BrtFont [ACFONTS] */\n\n  write_record(ba, 0x0264\n  /* BrtEndFonts */\n  );\n}\n\nfunction write_FILLS_bin(ba\n/*::, data*/\n) {\n  var cnt = 2;\n  if (cnt == 0) return;\n  write_record(ba, 0x025B\n  /* BrtBeginFills */\n  , write_UInt32LE(cnt));\n  write_record(ba, 0x002D\n  /* BrtFill */\n  , write_BrtFill({\n    patternType: \"none\"\n  }));\n  write_record(ba, 0x002D\n  /* BrtFill */\n  , write_BrtFill({\n    patternType: \"gray125\"\n  }));\n  /* 1*65431BrtFill */\n\n  write_record(ba, 0x025C\n  /* BrtEndFills */\n  );\n}\n\nfunction write_BORDERS_bin(ba\n/*::, data*/\n) {\n  var cnt = 1;\n  if (cnt == 0) return;\n  write_record(ba, 0x0265\n  /* BrtBeginBorders */\n  , write_UInt32LE(cnt));\n  write_record(ba, 0x002E\n  /* BrtBorder */\n  , write_BrtBorder({}));\n  /* 1*65430BrtBorder */\n\n  write_record(ba, 0x0266\n  /* BrtEndBorders */\n  );\n}\n\nfunction write_CELLSTYLEXFS_bin(ba\n/*::, data*/\n) {\n  var cnt = 1;\n  write_record(ba, 0x0272\n  /* BrtBeginCellStyleXFs */\n  , write_UInt32LE(cnt));\n  write_record(ba, 0x002F\n  /* BrtXF */\n  , write_BrtXF({\n    numFmtId: 0,\n    fontId: 0,\n    fillId: 0,\n    borderId: 0\n  }, 0xFFFF));\n  /* 1*65430(BrtXF *FRT) */\n\n  write_record(ba, 0x0273\n  /* BrtEndCellStyleXFs */\n  );\n}\n\nfunction write_CELLXFS_bin(ba, data) {\n  write_record(ba, 0x0269\n  /* BrtBeginCellXFs */\n  , write_UInt32LE(data.length));\n  data.forEach(function (c) {\n    write_record(ba, 0x002F\n    /* BrtXF */\n    , write_BrtXF(c, 0));\n  });\n  /* 1*65430(BrtXF *FRT) */\n\n  write_record(ba, 0x026A\n  /* BrtEndCellXFs */\n  );\n}\n\nfunction write_STYLES_bin(ba\n/*::, data*/\n) {\n  var cnt = 1;\n  write_record(ba, 0x026B\n  /* BrtBeginStyles */\n  , write_UInt32LE(cnt));\n  write_record(ba, 0x0030\n  /* BrtStyle */\n  , write_BrtStyle({\n    xfId: 0,\n    builtinId: 0,\n    name: \"Normal\"\n  }));\n  /* 1*65430(BrtStyle *FRT) */\n\n  write_record(ba, 0x026C\n  /* BrtEndStyles */\n  );\n}\n\nfunction write_DXFS_bin(ba\n/*::, data*/\n) {\n  var cnt = 0;\n  write_record(ba, 0x01F9\n  /* BrtBeginDXFs */\n  , write_UInt32LE(cnt));\n  /* *2147483647(BrtDXF *FRT) */\n\n  write_record(ba, 0x01FA\n  /* BrtEndDXFs */\n  );\n}\n\nfunction write_TABLESTYLES_bin(ba\n/*::, data*/\n) {\n  var cnt = 0;\n  write_record(ba, 0x01FC\n  /* BrtBeginTableStyles */\n  , write_BrtBeginTableStyles(cnt, \"TableStyleMedium9\", \"PivotStyleMedium4\"));\n  /* *TABLESTYLE */\n\n  write_record(ba, 0x01FD\n  /* BrtEndTableStyles */\n  );\n}\n\nfunction\n  /*::ba, data*/\nwrite_COLORPALETTE_bin() {\n  return;\n  /* BrtBeginColorPalette [INDEXEDCOLORS] [MRUCOLORS] BrtEndColorPalette */\n}\n/* [MS-XLSB] 2.1.7.50 Styles */\n\n\nfunction write_sty_bin(wb, opts) {\n  var ba = buf_array();\n  write_record(ba, 0x0116\n  /* BrtBeginStyleSheet */\n  );\n  write_FMTS_bin(ba, wb.SSF);\n  write_FONTS_bin(ba, wb);\n  write_FILLS_bin(ba, wb);\n  write_BORDERS_bin(ba, wb);\n  write_CELLSTYLEXFS_bin(ba, wb);\n  write_CELLXFS_bin(ba, opts.cellXfs);\n  write_STYLES_bin(ba, wb);\n  write_DXFS_bin(ba, wb);\n  write_TABLESTYLES_bin(ba, wb);\n  write_COLORPALETTE_bin(ba, wb);\n  /* FRTSTYLESHEET*/\n\n  write_record(ba, 0x0117\n  /* BrtEndStyleSheet */\n  );\n  return ba.end();\n}\n/* Even though theme layout is dk1 lt1 dk2 lt2, true order is lt1 dk1 lt2 dk2 */\n\n\nvar XLSXThemeClrScheme = ['</a:lt1>', '</a:dk1>', '</a:lt2>', '</a:dk2>', '</a:accent1>', '</a:accent2>', '</a:accent3>', '</a:accent4>', '</a:accent5>', '</a:accent6>', '</a:hlink>', '</a:folHlink>'];\n/* 20.1.6.2 clrScheme CT_ColorScheme */\n\nfunction parse_clrScheme(t, themes, opts) {\n  themes.themeElements.clrScheme = [];\n  var color = {};\n  (t[0].match(tagregex) || []).forEach(function (x) {\n    var y = parsexmltag(x);\n\n    switch (y[0]) {\n      /* 20.1.6.2 clrScheme (Color Scheme) CT_ColorScheme */\n      case '<a:clrScheme':\n      case '</a:clrScheme>':\n        break;\n\n      /* 20.1.2.3.32 srgbClr CT_SRgbColor */\n\n      case '<a:srgbClr':\n        color.rgb = y.val;\n        break;\n\n      /* 20.1.2.3.33 sysClr CT_SystemColor */\n\n      case '<a:sysClr':\n        color.rgb = y.lastClr;\n        break;\n\n      /* 20.1.4.1.1 accent1 (Accent 1) */\n\n      /* 20.1.4.1.2 accent2 (Accent 2) */\n\n      /* 20.1.4.1.3 accent3 (Accent 3) */\n\n      /* 20.1.4.1.4 accent4 (Accent 4) */\n\n      /* 20.1.4.1.5 accent5 (Accent 5) */\n\n      /* 20.1.4.1.6 accent6 (Accent 6) */\n\n      /* 20.1.4.1.9 dk1 (Dark 1) */\n\n      /* 20.1.4.1.10 dk2 (Dark 2) */\n\n      /* 20.1.4.1.15 folHlink (Followed Hyperlink) */\n\n      /* 20.1.4.1.19 hlink (Hyperlink) */\n\n      /* 20.1.4.1.22 lt1 (Light 1) */\n\n      /* 20.1.4.1.23 lt2 (Light 2) */\n\n      case '<a:dk1>':\n      case '</a:dk1>':\n      case '<a:lt1>':\n      case '</a:lt1>':\n      case '<a:dk2>':\n      case '</a:dk2>':\n      case '<a:lt2>':\n      case '</a:lt2>':\n      case '<a:accent1>':\n      case '</a:accent1>':\n      case '<a:accent2>':\n      case '</a:accent2>':\n      case '<a:accent3>':\n      case '</a:accent3>':\n      case '<a:accent4>':\n      case '</a:accent4>':\n      case '<a:accent5>':\n      case '</a:accent5>':\n      case '<a:accent6>':\n      case '</a:accent6>':\n      case '<a:hlink>':\n      case '</a:hlink>':\n      case '<a:folHlink>':\n      case '</a:folHlink>':\n        if (y[0].charAt(1) === '/') {\n          themes.themeElements.clrScheme[XLSXThemeClrScheme.indexOf(y[0])] = color;\n          color = {};\n        } else {\n          color.name = y[0].slice(3, y[0].length - 1);\n        }\n\n        break;\n\n      default:\n        if (opts && opts.WTF) throw new Error('Unrecognized ' + y[0] + ' in clrScheme');\n    }\n  });\n}\n/* 20.1.4.1.18 fontScheme CT_FontScheme */\n\n\nfunction\n  /*::t, themes, opts*/\nparse_fontScheme() {}\n/* 20.1.4.1.15 fmtScheme CT_StyleMatrix */\n\n\nfunction\n  /*::t, themes, opts*/\nparse_fmtScheme() {}\n\nvar clrsregex = /<a:clrScheme([^>]*)>[\\s\\S]*<\\/a:clrScheme>/;\nvar fntsregex = /<a:fontScheme([^>]*)>[\\s\\S]*<\\/a:fontScheme>/;\nvar fmtsregex = /<a:fmtScheme([^>]*)>[\\s\\S]*<\\/a:fmtScheme>/;\n/* 20.1.6.10 themeElements CT_BaseStyles */\n\nfunction parse_themeElements(data, themes, opts) {\n  themes.themeElements = {};\n  var t;\n  [\n  /* clrScheme CT_ColorScheme */\n  ['clrScheme', clrsregex, parse_clrScheme],\n  /* fontScheme CT_FontScheme */\n  ['fontScheme', fntsregex, parse_fontScheme],\n  /* fmtScheme CT_StyleMatrix */\n  ['fmtScheme', fmtsregex, parse_fmtScheme]].forEach(function (m) {\n    if (!(t = data.match(m[1]))) throw new Error(m[0] + ' not found in themeElements');\n    m[2](t, themes, opts);\n  });\n}\n\nvar themeltregex = /<a:themeElements([^>]*)>[\\s\\S]*<\\/a:themeElements>/;\n/* 14.2.7 Theme Part */\n\nfunction parse_theme_xml(data\n/*:string*/\n, opts) {\n  /* 20.1.6.9 theme CT_OfficeStyleSheet */\n  if (!data || data.length === 0) data = write_theme();\n  var t;\n  var themes = {};\n  /* themeElements CT_BaseStyles */\n\n  if (!(t = data.match(themeltregex))) throw new Error('themeElements not found in theme');\n  parse_themeElements(t[0], themes, opts);\n  themes.raw = data;\n  return themes;\n}\n\nfunction write_theme(Themes, opts)\n/*:string*/\n{\n  if (opts && opts.themeXLSX) return opts.themeXLSX;\n  if (Themes && typeof Themes.raw == \"string\") return Themes.raw;\n  var o = [XML_HEADER];\n  o[o.length] = '<a:theme xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" name=\"Office Theme\">';\n  o[o.length] = '<a:themeElements>';\n  o[o.length] = '<a:clrScheme name=\"Office\">';\n  o[o.length] = '<a:dk1><a:sysClr val=\"windowText\" lastClr=\"000000\"/></a:dk1>';\n  o[o.length] = '<a:lt1><a:sysClr val=\"window\" lastClr=\"FFFFFF\"/></a:lt1>';\n  o[o.length] = '<a:dk2><a:srgbClr val=\"1F497D\"/></a:dk2>';\n  o[o.length] = '<a:lt2><a:srgbClr val=\"EEECE1\"/></a:lt2>';\n  o[o.length] = '<a:accent1><a:srgbClr val=\"4F81BD\"/></a:accent1>';\n  o[o.length] = '<a:accent2><a:srgbClr val=\"C0504D\"/></a:accent2>';\n  o[o.length] = '<a:accent3><a:srgbClr val=\"9BBB59\"/></a:accent3>';\n  o[o.length] = '<a:accent4><a:srgbClr val=\"8064A2\"/></a:accent4>';\n  o[o.length] = '<a:accent5><a:srgbClr val=\"4BACC6\"/></a:accent5>';\n  o[o.length] = '<a:accent6><a:srgbClr val=\"F79646\"/></a:accent6>';\n  o[o.length] = '<a:hlink><a:srgbClr val=\"0000FF\"/></a:hlink>';\n  o[o.length] = '<a:folHlink><a:srgbClr val=\"800080\"/></a:folHlink>';\n  o[o.length] = '</a:clrScheme>';\n  o[o.length] = '<a:fontScheme name=\"Office\">';\n  o[o.length] = '<a:majorFont>';\n  o[o.length] = '<a:latin typeface=\"Cambria\"/>';\n  o[o.length] = '<a:ea typeface=\"\"/>';\n  o[o.length] = '<a:cs typeface=\"\"/>';\n  o[o.length] = '<a:font script=\"Jpan\" typeface=\"MS Pゴシック\"/>';\n  o[o.length] = '<a:font script=\"Hang\" typeface=\"맑은 고딕\"/>';\n  o[o.length] = '<a:font script=\"Hans\" typeface=\"宋体\"/>';\n  o[o.length] = '<a:font script=\"Hant\" typeface=\"新細明體\"/>';\n  o[o.length] = '<a:font script=\"Arab\" typeface=\"Times New Roman\"/>';\n  o[o.length] = '<a:font script=\"Hebr\" typeface=\"Times New Roman\"/>';\n  o[o.length] = '<a:font script=\"Thai\" typeface=\"Tahoma\"/>';\n  o[o.length] = '<a:font script=\"Ethi\" typeface=\"Nyala\"/>';\n  o[o.length] = '<a:font script=\"Beng\" typeface=\"Vrinda\"/>';\n  o[o.length] = '<a:font script=\"Gujr\" typeface=\"Shruti\"/>';\n  o[o.length] = '<a:font script=\"Khmr\" typeface=\"MoolBoran\"/>';\n  o[o.length] = '<a:font script=\"Knda\" typeface=\"Tunga\"/>';\n  o[o.length] = '<a:font script=\"Guru\" typeface=\"Raavi\"/>';\n  o[o.length] = '<a:font script=\"Cans\" typeface=\"Euphemia\"/>';\n  o[o.length] = '<a:font script=\"Cher\" typeface=\"Plantagenet Cherokee\"/>';\n  o[o.length] = '<a:font script=\"Yiii\" typeface=\"Microsoft Yi Baiti\"/>';\n  o[o.length] = '<a:font script=\"Tibt\" typeface=\"Microsoft Himalaya\"/>';\n  o[o.length] = '<a:font script=\"Thaa\" typeface=\"MV Boli\"/>';\n  o[o.length] = '<a:font script=\"Deva\" typeface=\"Mangal\"/>';\n  o[o.length] = '<a:font script=\"Telu\" typeface=\"Gautami\"/>';\n  o[o.length] = '<a:font script=\"Taml\" typeface=\"Latha\"/>';\n  o[o.length] = '<a:font script=\"Syrc\" typeface=\"Estrangelo Edessa\"/>';\n  o[o.length] = '<a:font script=\"Orya\" typeface=\"Kalinga\"/>';\n  o[o.length] = '<a:font script=\"Mlym\" typeface=\"Kartika\"/>';\n  o[o.length] = '<a:font script=\"Laoo\" typeface=\"DokChampa\"/>';\n  o[o.length] = '<a:font script=\"Sinh\" typeface=\"Iskoola Pota\"/>';\n  o[o.length] = '<a:font script=\"Mong\" typeface=\"Mongolian Baiti\"/>';\n  o[o.length] = '<a:font script=\"Viet\" typeface=\"Times New Roman\"/>';\n  o[o.length] = '<a:font script=\"Uigh\" typeface=\"Microsoft Uighur\"/>';\n  o[o.length] = '<a:font script=\"Geor\" typeface=\"Sylfaen\"/>';\n  o[o.length] = '</a:majorFont>';\n  o[o.length] = '<a:minorFont>';\n  o[o.length] = '<a:latin typeface=\"Calibri\"/>';\n  o[o.length] = '<a:ea typeface=\"\"/>';\n  o[o.length] = '<a:cs typeface=\"\"/>';\n  o[o.length] = '<a:font script=\"Jpan\" typeface=\"MS Pゴシック\"/>';\n  o[o.length] = '<a:font script=\"Hang\" typeface=\"맑은 고딕\"/>';\n  o[o.length] = '<a:font script=\"Hans\" typeface=\"宋体\"/>';\n  o[o.length] = '<a:font script=\"Hant\" typeface=\"新細明體\"/>';\n  o[o.length] = '<a:font script=\"Arab\" typeface=\"Arial\"/>';\n  o[o.length] = '<a:font script=\"Hebr\" typeface=\"Arial\"/>';\n  o[o.length] = '<a:font script=\"Thai\" typeface=\"Tahoma\"/>';\n  o[o.length] = '<a:font script=\"Ethi\" typeface=\"Nyala\"/>';\n  o[o.length] = '<a:font script=\"Beng\" typeface=\"Vrinda\"/>';\n  o[o.length] = '<a:font script=\"Gujr\" typeface=\"Shruti\"/>';\n  o[o.length] = '<a:font script=\"Khmr\" typeface=\"DaunPenh\"/>';\n  o[o.length] = '<a:font script=\"Knda\" typeface=\"Tunga\"/>';\n  o[o.length] = '<a:font script=\"Guru\" typeface=\"Raavi\"/>';\n  o[o.length] = '<a:font script=\"Cans\" typeface=\"Euphemia\"/>';\n  o[o.length] = '<a:font script=\"Cher\" typeface=\"Plantagenet Cherokee\"/>';\n  o[o.length] = '<a:font script=\"Yiii\" typeface=\"Microsoft Yi Baiti\"/>';\n  o[o.length] = '<a:font script=\"Tibt\" typeface=\"Microsoft Himalaya\"/>';\n  o[o.length] = '<a:font script=\"Thaa\" typeface=\"MV Boli\"/>';\n  o[o.length] = '<a:font script=\"Deva\" typeface=\"Mangal\"/>';\n  o[o.length] = '<a:font script=\"Telu\" typeface=\"Gautami\"/>';\n  o[o.length] = '<a:font script=\"Taml\" typeface=\"Latha\"/>';\n  o[o.length] = '<a:font script=\"Syrc\" typeface=\"Estrangelo Edessa\"/>';\n  o[o.length] = '<a:font script=\"Orya\" typeface=\"Kalinga\"/>';\n  o[o.length] = '<a:font script=\"Mlym\" typeface=\"Kartika\"/>';\n  o[o.length] = '<a:font script=\"Laoo\" typeface=\"DokChampa\"/>';\n  o[o.length] = '<a:font script=\"Sinh\" typeface=\"Iskoola Pota\"/>';\n  o[o.length] = '<a:font script=\"Mong\" typeface=\"Mongolian Baiti\"/>';\n  o[o.length] = '<a:font script=\"Viet\" typeface=\"Arial\"/>';\n  o[o.length] = '<a:font script=\"Uigh\" typeface=\"Microsoft Uighur\"/>';\n  o[o.length] = '<a:font script=\"Geor\" typeface=\"Sylfaen\"/>';\n  o[o.length] = '</a:minorFont>';\n  o[o.length] = '</a:fontScheme>';\n  o[o.length] = '<a:fmtScheme name=\"Office\">';\n  o[o.length] = '<a:fillStyleLst>';\n  o[o.length] = '<a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>';\n  o[o.length] = '<a:gradFill rotWithShape=\"1\">';\n  o[o.length] = '<a:gsLst>';\n  o[o.length] = '<a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"50000\"/><a:satMod val=\"300000\"/></a:schemeClr></a:gs>';\n  o[o.length] = '<a:gs pos=\"35000\"><a:schemeClr val=\"phClr\"><a:tint val=\"37000\"/><a:satMod val=\"300000\"/></a:schemeClr></a:gs>';\n  o[o.length] = '<a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:tint val=\"15000\"/><a:satMod val=\"350000\"/></a:schemeClr></a:gs>';\n  o[o.length] = '</a:gsLst>';\n  o[o.length] = '<a:lin ang=\"16200000\" scaled=\"1\"/>';\n  o[o.length] = '</a:gradFill>';\n  o[o.length] = '<a:gradFill rotWithShape=\"1\">';\n  o[o.length] = '<a:gsLst>';\n  o[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  o[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  o[o.length] = '</a:gsLst>';\n  o[o.length] = '<a:lin ang=\"16200000\" scaled=\"0\"/>';\n  o[o.length] = '</a:gradFill>';\n  o[o.length] = '</a:fillStyleLst>';\n  o[o.length] = '<a:lnStyleLst>';\n  o[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  o[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  o[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  o[o.length] = '</a:lnStyleLst>';\n  o[o.length] = '<a:effectStyleLst>';\n  o[o.length] = '<a:effectStyle>';\n  o[o.length] = '<a:effectLst>';\n  o[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  o[o.length] = '</a:effectLst>';\n  o[o.length] = '</a:effectStyle>';\n  o[o.length] = '<a:effectStyle>';\n  o[o.length] = '<a:effectLst>';\n  o[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  o[o.length] = '</a:effectLst>';\n  o[o.length] = '</a:effectStyle>';\n  o[o.length] = '<a:effectStyle>';\n  o[o.length] = '<a:effectLst>';\n  o[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  o[o.length] = '</a:effectLst>';\n  o[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  o[o.length] = '<a:sp3d><a:bevelT w=\"63500\" h=\"25400\"/></a:sp3d>';\n  o[o.length] = '</a:effectStyle>';\n  o[o.length] = '</a:effectStyleLst>';\n  o[o.length] = '<a:bgFillStyleLst>';\n  o[o.length] = '<a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>';\n  o[o.length] = '<a:gradFill rotWithShape=\"1\">';\n  o[o.length] = '<a:gsLst>';\n  o[o.length] = '<a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"40000\"/><a:satMod val=\"350000\"/></a:schemeClr></a:gs>';\n  o[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  o[o.length] = '<a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:shade val=\"20000\"/><a:satMod val=\"255000\"/></a:schemeClr></a:gs>';\n  o[o.length] = '</a:gsLst>';\n  o[o.length] = '<a:path path=\"circle\"><a:fillToRect l=\"50000\" t=\"-80000\" r=\"50000\" b=\"180000\"/></a:path>';\n  o[o.length] = '</a:gradFill>';\n  o[o.length] = '<a:gradFill rotWithShape=\"1\">';\n  o[o.length] = '<a:gsLst>';\n  o[o.length] = '<a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"80000\"/><a:satMod val=\"300000\"/></a:schemeClr></a:gs>';\n  o[o.length] = '<a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:shade val=\"30000\"/><a:satMod val=\"200000\"/></a:schemeClr></a:gs>';\n  o[o.length] = '</a:gsLst>';\n  o[o.length] = '<a:path path=\"circle\"><a:fillToRect l=\"50000\" t=\"50000\" r=\"50000\" b=\"50000\"/></a:path>';\n  o[o.length] = '</a:gradFill>';\n  o[o.length] = '</a:bgFillStyleLst>';\n  o[o.length] = '</a:fmtScheme>';\n  o[o.length] = '</a:themeElements>';\n  o[o.length] = '<a:objectDefaults>';\n  o[o.length] = '<a:spDef>';\n  o[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  o[o.length] = '</a:spDef>';\n  o[o.length] = '<a:lnDef>';\n  o[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  o[o.length] = '</a:lnDef>';\n  o[o.length] = '</a:objectDefaults>';\n  o[o.length] = '<a:extraClrSchemeLst/>';\n  o[o.length] = '</a:theme>';\n  return o.join(\"\");\n}\n/* [MS-XLS] 2.4.326 TODO: payload is a zip file */\n\n\nfunction parse_Theme(blob, length, opts) {\n  var end = blob.l + length;\n  var dwThemeVersion = blob.read_shift(4);\n  if (dwThemeVersion === 124226) return;\n\n  if (!opts.cellStyles) {\n    blob.l = end;\n    return;\n  }\n\n  var data = blob.slice(blob.l);\n  blob.l = end;\n  var zip;\n\n  try {\n    zip = zip_read(data, {\n      type: \"array\"\n    });\n  } catch (e) {\n    return;\n  }\n\n  var themeXML = getzipstr(zip, \"theme/theme/theme1.xml\", true);\n  if (!themeXML) return;\n  return parse_theme_xml(themeXML, opts);\n}\n/* 2.5.49 */\n\n\nfunction parse_ColorTheme(blob\n/*::, length*/\n) {\n  return blob.read_shift(4);\n}\n/* 2.5.155 */\n\n\nfunction parse_FullColorExt(blob\n/*::, length*/\n) {\n  var o = {};\n  o.xclrType = blob.read_shift(2);\n  o.nTintShade = blob.read_shift(2);\n\n  switch (o.xclrType) {\n    case 0:\n      blob.l += 4;\n      break;\n\n    case 1:\n      o.xclrValue = parse_IcvXF(blob, 4);\n      break;\n\n    case 2:\n      o.xclrValue = parse_LongRGBA(blob, 4);\n      break;\n\n    case 3:\n      o.xclrValue = parse_ColorTheme(blob, 4);\n      break;\n\n    case 4:\n      blob.l += 4;\n      break;\n  }\n\n  blob.l += 8;\n  return o;\n}\n/* 2.5.164 TODO: read 7 bits*/\n\n\nfunction parse_IcvXF(blob, length) {\n  return parsenoop(blob, length);\n}\n/* 2.5.280 */\n\n\nfunction parse_XFExtGradient(blob, length) {\n  return parsenoop(blob, length);\n}\n/* [MS-XLS] 2.5.108 */\n\n\nfunction parse_ExtProp(blob\n/*::, length*/\n)\n/*:Array<any>*/\n{\n  var extType = blob.read_shift(2);\n  var cb = blob.read_shift(2) - 4;\n  var o = [extType];\n\n  switch (extType) {\n    case 0x04:\n    case 0x05:\n    case 0x07:\n    case 0x08:\n    case 0x09:\n    case 0x0A:\n    case 0x0B:\n    case 0x0D:\n      o[1] = parse_FullColorExt(blob, cb);\n      break;\n\n    case 0x06:\n      o[1] = parse_XFExtGradient(blob, cb);\n      break;\n\n    case 0x0E:\n    case 0x0F:\n      o[1] = blob.read_shift(cb === 1 ? 1 : 2);\n      break;\n\n    default:\n      throw new Error(\"Unrecognized ExtProp type: \" + extType + \" \" + cb);\n  }\n\n  return o;\n}\n/* 2.4.355 */\n\n\nfunction parse_XFExt(blob, length) {\n  var end = blob.l + length;\n  blob.l += 2;\n  var ixfe = blob.read_shift(2);\n  blob.l += 2;\n  var cexts = blob.read_shift(2);\n  var ext\n  /*:AOA*/\n  = [];\n\n  while (cexts-- > 0) {\n    ext.push(parse_ExtProp(blob, end - blob.l));\n  }\n\n  return {\n    ixfe: ixfe,\n    ext: ext\n  };\n}\n/* xf is an XF, see parse_XFExt for xfext */\n\n\nfunction update_xfext(xf, xfext) {\n  xfext.forEach(function (xfe) {\n    switch (xfe[0]) {\n      /* 2.5.108 extPropData */\n      case 0x04:\n        break;\n\n      /* foreground color */\n\n      case 0x05:\n        break;\n\n      /* background color */\n\n      case 0x06:\n        break;\n\n      /* gradient fill */\n\n      case 0x07:\n        break;\n\n      /* top cell border color */\n\n      case 0x08:\n        break;\n\n      /* bottom cell border color */\n\n      case 0x09:\n        break;\n\n      /* left cell border color */\n\n      case 0x0a:\n        break;\n\n      /* right cell border color */\n\n      case 0x0b:\n        break;\n\n      /* diagonal cell border color */\n\n      case 0x0d:\n        /* text color */\n        break;\n\n      case 0x0e:\n        break;\n\n      /* font scheme */\n\n      case 0x0f:\n        break;\n\n      /* indentation level */\n    }\n  });\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}\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}\n\nfunction parse_BrtMdb(data) {\n  var out = [];\n  var cnt = data.read_shift(4);\n\n  while (cnt-- > 0) {\n    out.push([data.read_shift(4), data.read_shift(4)]);\n  }\n\n  return out;\n}\n\nfunction write_BrtMdb(mdb) {\n  var o = new_buf(4 + 8 * mdb.length);\n  o.write_shift(4, mdb.length);\n\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\n  return o;\n}\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}\n\nfunction parse_BrtBeginEsmdb(data) {\n  data.l += 4;\n  return data.read_shift(4) != 0;\n}\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}\n\nfunction parse_xlmeta_bin(data, name, _opts) {\n  var out = {\n    Types: [],\n    Cell: [],\n    Value: []\n  };\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({\n          name: val.name\n        });\n        break;\n\n      case 51:\n        val.forEach(function (r) {\n          if (metatype == 1) out.Cell.push({\n            type: out.Types[r[0] - 1].name,\n            index: r[1]\n          });else if (metatype == 0) out.Value.push({\n            type: out.Types[r[0] - 1].name,\n            index: r[1]\n          });\n        });\n        break;\n\n      case 337:\n        metatype = val ? 1 : 0;\n        break;\n\n      case 338:\n        metatype = 2;\n        break;\n\n      case 35:\n        state.push(RT);\n        pass = true;\n        break;\n\n      case 36:\n        state.pop();\n        pass = false;\n        break;\n\n      default:\n        if (R.T) {} else if (!pass || opts.WTF && state[state.length - 1] != 35) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\n    }\n  });\n  return out;\n}\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}\n\nfunction parse_xlmeta_xml(data, name, opts) {\n  var out = {\n    Types: [],\n    Cell: [],\n    Value: []\n  };\n  if (!data) 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\n    switch (strip_ns(y[0])) {\n      case \"<?xml\":\n        break;\n\n      case \"<metadata\":\n      case \"</metadata>\":\n        break;\n\n      case \"<metadataTypes\":\n      case \"</metadataTypes>\":\n        break;\n\n      case \"<metadataType\":\n        out.Types.push({\n          name: y.name\n        });\n        break;\n\n      case \"</metadataType>\":\n        break;\n\n      case \"<futureMetadata\":\n        for (var j = 0; j < out.Types.length; ++j) {\n          if (out.Types[j].name == y.name) lastmeta = out.Types[j];\n        }\n\n        break;\n\n      case \"</futureMetadata>\":\n        break;\n\n      case \"<bk>\":\n        break;\n\n      case \"</bk>\":\n        break;\n\n      case \"<rc\":\n        if (metatype == 1) out.Cell.push({\n          type: out.Types[y.t - 1].name,\n          index: +y.v\n        });else if (metatype == 0) out.Value.push({\n          type: out.Types[y.t - 1].name,\n          index: +y.v\n        });\n        break;\n\n      case \"</rc>\":\n        break;\n\n      case \"<cellMetadata\":\n        metatype = 1;\n        break;\n\n      case \"</cellMetadata>\":\n        metatype = 2;\n        break;\n\n      case \"<valueMetadata\":\n        metatype = 0;\n        break;\n\n      case \"</valueMetadata>\":\n        metatype = 2;\n        break;\n\n      case \"<extLst\":\n      case \"<extLst>\":\n      case \"</extLst>\":\n      case \"<extLst/>\":\n        break;\n\n      case \"<ext\":\n        pass = true;\n        break;\n\n      case \"</ext>\":\n        pass = false;\n        break;\n\n      case \"<rvb\":\n        if (!lastmeta) break;\n        if (!lastmeta.offsets) lastmeta.offsets = [];\n        lastmeta.offsets.push(+y.i);\n        break;\n\n      default:\n        if (!pass && opts.WTF) throw new Error(\"unrecognized \" + y[0] + \" in metadata\");\n    }\n\n    return x;\n  });\n  return out;\n}\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 */\n\n\nfunction parse_cc_xml(data\n/*::, name, opts*/\n)\n/*:Array<any>*/\n{\n  var d = [];\n  if (!data) return d;\n  var i = 1;\n  (data.match(tagregex) || []).forEach(function (x) {\n    var y = parsexmltag(x);\n\n    switch (y[0]) {\n      case '<?xml':\n        break;\n\n      /* 18.6.2  calcChain CT_CalcChain 1 */\n\n      case '<calcChain':\n      case '<calcChain>':\n      case '</calcChain>':\n        break;\n\n      /* 18.6.1  c CT_CalcCell 1 */\n\n      case '<c':\n        delete y[0];\n        if (y.i) i = y.i;else y.i = i;\n        d.push(y);\n        break;\n    }\n  });\n  return d;\n} //function write_cc_xml(data, opts) { }\n\n/* [MS-XLSB] 2.6.4.1 */\n\n\nfunction parse_BrtCalcChainItem$(data) {\n  var out = {};\n  out.i = data.read_shift(4);\n  var cell = {};\n  cell.r = data.read_shift(4);\n  cell.c = data.read_shift(4);\n  out.r = encode_cell(cell);\n  var flags = data.read_shift(1);\n  if (flags & 0x2) out.l = '1';\n  if (flags & 0x8) out.a = '1';\n  return out;\n}\n/* 18.6 Calculation Chain */\n\n\nfunction parse_cc_bin(data, name, opts) {\n  var out = [];\n  var pass = false;\n  recordhopper(data, function hopper_cc(val, R, RT) {\n    switch (RT) {\n      case 0x003F:\n        /* 'BrtCalcChainItem$' */\n        out.push(val);\n        break;\n\n      default:\n        if (R.T) {\n          /* empty */\n        } else if (!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\n    }\n  });\n  return out;\n} //function write_cc_bin(data, opts) { }\n\n/* 18.14 Supplementary Workbook Data */\n\n\nfunction\n  /*::data, rel, name:string, _opts*/\nparse_xlink_xml() {//var opts = _opts || {};\n  //if(opts.WTF) throw \"XLSX External Link\";\n}\n/* [MS-XLSB] 2.1.7.25 External Link */\n\n\nfunction parse_xlink_bin(data, rel, name\n/*:string*/\n, _opts) {\n  if (!data) return data;\n  var opts = _opts || {};\n  var pass = false,\n      end = false;\n  recordhopper(data, function xlink_parse(val, R, RT) {\n    if (end) return;\n\n    switch (RT) {\n      case 0x0167:\n      /* 'BrtSupTabs' */\n\n      case 0x016B:\n      /* 'BrtExternTableStart' */\n\n      case 0x016C:\n      /* 'BrtExternTableEnd' */\n\n      case 0x016E:\n      /* 'BrtExternRowHdr' */\n\n      case 0x016F:\n      /* 'BrtExternCellBlank' */\n\n      case 0x0170:\n      /* 'BrtExternCellReal' */\n\n      case 0x0171:\n      /* 'BrtExternCellBool' */\n\n      case 0x0172:\n      /* 'BrtExternCellError' */\n\n      case 0x0173:\n      /* 'BrtExternCellString' */\n\n      case 0x01D8:\n      /* 'BrtExternValueMeta' */\n\n      case 0x0241:\n      /* 'BrtSupNameStart' */\n\n      case 0x0242:\n      /* 'BrtSupNameValueStart' */\n\n      case 0x0243:\n      /* 'BrtSupNameValueEnd' */\n\n      case 0x0244:\n      /* 'BrtSupNameNum' */\n\n      case 0x0245:\n      /* 'BrtSupNameErr' */\n\n      case 0x0246:\n      /* 'BrtSupNameSt' */\n\n      case 0x0247:\n      /* 'BrtSupNameNil' */\n\n      case 0x0248:\n      /* 'BrtSupNameBool' */\n\n      case 0x0249:\n      /* 'BrtSupNameFmla' */\n\n      case 0x024A:\n      /* 'BrtSupNameBits' */\n\n      case 0x024B:\n        /* 'BrtSupNameEnd' */\n        break;\n\n      case 0x0023:\n        /* 'BrtFRTBegin' */\n        pass = true;\n        break;\n\n      case 0x0024:\n        /* 'BrtFRTEnd' */\n        pass = false;\n        break;\n\n      default:\n        if (R.T) {\n          /* empty */\n        } else if (!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\n    }\n  }, opts);\n}\n/* 20.5 DrawingML - SpreadsheetML Drawing */\n\n/* 20.5.2.35 wsDr CT_Drawing */\n\n\nfunction parse_drawing(data, rels\n/*:any*/\n) {\n  if (!data) return \"??\";\n  /*\n    Chartsheet Drawing:\n     - 20.5.2.35 wsDr CT_Drawing\n      - 20.5.2.1  absoluteAnchor CT_AbsoluteAnchor\n       - 20.5.2.16 graphicFrame CT_GraphicalObjectFrame\n        - 20.1.2.2.16 graphic CT_GraphicalObject\n         - 20.1.2.2.17 graphicData CT_GraphicalObjectData\n           - chart reference\n     the actual type is based on the URI of the graphicData\n  \tTODO: handle embedded charts and other types of graphics\n  */\n\n  var id = (data.match(/<c:chart [^>]*r:id=\"([^\"]*)\"/) || [\"\", \"\"])[1];\n  return rels['!id'][id].Target;\n}\n/* L.5.5.2 SpreadsheetML Comments + VML Schema */\n\n\nvar _shapeid = 1024;\n\nfunction write_comments_vml(rId\n/*:number*/\n, comments) {\n  var csize = [21600, 21600];\n  /* L.5.2.1.2 Path Attribute */\n\n  var bbox = [\"m0,0l0\", csize[1], csize[0], csize[1], csize[0], \"0xe\"].join(\",\");\n  var o = [writextag(\"xml\", null, {\n    'xmlns:v': XLMLNS.v,\n    'xmlns:o': XLMLNS.o,\n    'xmlns:x': XLMLNS.x,\n    'xmlns:mv': XLMLNS.mv\n  }).replace(/\\/>/, \">\"), writextag(\"o:shapelayout\", writextag(\"o:idmap\", null, {\n    'v:ext': \"edit\",\n    'data': rId\n  }), {\n    'v:ext': \"edit\"\n  }), writextag(\"v:shapetype\", [writextag(\"v:stroke\", null, {\n    joinstyle: \"miter\"\n  }), writextag(\"v:path\", null, {\n    gradientshapeok: \"t\",\n    'o:connecttype': \"rect\"\n  })].join(\"\"), {\n    id: \"_x0000_t202\",\n    'o:spt': 202,\n    coordsize: csize.join(\",\"),\n    path: bbox\n  })];\n\n  while (_shapeid < rId * 1000) {\n    _shapeid += 1000;\n  }\n\n  comments.forEach(function (x) {\n    var c = decode_cell(x[0]);\n    var fillopts =\n    /*::(*/\n    {\n      'color2': \"#BEFF82\",\n      'type': \"gradient\"\n    }\n    /*:: :any)*/\n    ;\n    if (fillopts.type == \"gradient\") fillopts.angle = \"-180\";\n    var fillparm = fillopts.type == \"gradient\" ? writextag(\"o:fill\", null, {\n      type: \"gradientUnscaled\",\n      'v:ext': \"view\"\n    }) : null;\n    var fillxml = writextag('v:fill', fillparm, fillopts);\n    var shadata = {\n      on: \"t\",\n      'obscured': \"t\"\n    }\n    /*:any*/\n    ;\n    ++_shapeid;\n    o = o.concat(['<v:shape' + wxt_helper({\n      id: '_x0000_s' + _shapeid,\n      type: \"#_x0000_t202\",\n      style: \"position:absolute; margin-left:80pt;margin-top:5pt;width:104pt;height:64pt;z-index:10\" + (x[1].hidden ? \";visibility:hidden\" : \"\"),\n      fillcolor: \"#ECFAD4\",\n      strokecolor: \"#edeaa1\"\n    }) + '>', fillxml, writextag(\"v:shadow\", null, shadata), writextag(\"v:path\", null, {\n      'o:connecttype': \"none\"\n    }), '<v:textbox><div style=\"text-align:left\"></div></v:textbox>', '<x:ClientData ObjectType=\"Note\">', '<x:MoveWithCells/>', '<x:SizeWithCells/>',\n    /* Part 4 19.4.2.3 Anchor (Anchor) */\n    writetag('x:Anchor', [c.c + 1, 0, c.r + 1, 0, c.c + 3, 20, c.r + 5, 20].join(\",\")), writetag('x:AutoFill', \"False\"), writetag('x:Row', String(c.r)), writetag('x:Column', String(c.c)), x[1].hidden ? '' : '<x:Visible/>', '</x:ClientData>', '</v:shape>']);\n  });\n  o.push('</xml>');\n  return o.join(\"\");\n}\n\nfunction sheet_insert_comments(sheet, comments\n/*:Array<RawComment>*/\n, threaded\n/*:boolean*/\n, people\n/*:?Array<any>*/\n) {\n  var dense = Array.isArray(sheet);\n  var cell\n  /*:Cell*/\n  ;\n  comments.forEach(function (comment) {\n    var r = decode_cell(comment.ref);\n\n    if (dense) {\n      if (!sheet[r.r]) sheet[r.r] = [];\n      cell = sheet[r.r][r.c];\n    } else cell = sheet[comment.ref];\n\n    if (!cell) {\n      cell = {\n        t: \"z\"\n      }\n      /*:any*/\n      ;\n      if (dense) sheet[r.r][r.c] = cell;else sheet[comment.ref] = cell;\n      var range = safe_decode_range(sheet[\"!ref\"] || \"BDWGO1000001:A1\");\n      if (range.s.r > r.r) range.s.r = r.r;\n      if (range.e.r < r.r) range.e.r = r.r;\n      if (range.s.c > r.c) range.s.c = r.c;\n      if (range.e.c < r.c) range.e.c = r.c;\n      var encoded = encode_range(range);\n      if (encoded !== sheet[\"!ref\"]) sheet[\"!ref\"] = encoded;\n    }\n\n    if (!cell.c) cell.c = [];\n    var o\n    /*:Comment*/\n    = {\n      a: comment.author,\n      t: comment.t,\n      r: comment.r,\n      T: threaded\n    };\n    if (comment.h) o.h = comment.h;\n    /* threaded comments always override */\n\n    for (var i = cell.c.length - 1; i >= 0; --i) {\n      if (!threaded && cell.c[i].T) return;\n      if (threaded && !cell.c[i].T) cell.c.splice(i, 1);\n    }\n\n    if (threaded && people) for (i = 0; i < people.length; ++i) {\n      if (o.a == people[i].id) {\n        o.a = people[i].name || o.a;\n        break;\n      }\n    }\n    cell.c.push(o);\n  });\n}\n/* 18.7 Comments */\n\n\nfunction parse_comments_xml(data\n/*:string*/\n, opts)\n/*:Array<RawComment>*/\n{\n  /* 18.7.6 CT_Comments */\n  if (data.match(/<(?:\\w+:)?comments *\\/>/)) return [];\n  var authors\n  /*:Array<string>*/\n  = [];\n  var commentList\n  /*:Array<RawComment>*/\n  = [];\n  var authtag = data.match(/<(?:\\w+:)?authors>([\\s\\S]*)<\\/(?:\\w+:)?authors>/);\n  if (authtag && authtag[1]) authtag[1].split(/<\\/\\w*:?author>/).forEach(function (x) {\n    if (x === \"\" || x.trim() === \"\") return;\n    var a = x.match(/<(?:\\w+:)?author[^>]*>(.*)/);\n    if (a) authors.push(a[1]);\n  });\n  var cmnttag = data.match(/<(?:\\w+:)?commentList>([\\s\\S]*)<\\/(?:\\w+:)?commentList>/);\n  if (cmnttag && cmnttag[1]) cmnttag[1].split(/<\\/\\w*:?comment>/).forEach(function (x) {\n    if (x === \"\" || x.trim() === \"\") return;\n    var cm = x.match(/<(?:\\w+:)?comment[^>]*>/);\n    if (!cm) return;\n    var y = parsexmltag(cm[0]);\n    var comment\n    /*:RawComment*/\n    = {\n      author: y.authorId && authors[y.authorId] || \"sheetjsghost\",\n      ref: y.ref,\n      guid: y.guid\n    }\n    /*:any*/\n    ;\n    var cell = decode_cell(y.ref);\n    if (opts.sheetRows && opts.sheetRows <= cell.r) return;\n    var textMatch = x.match(/<(?:\\w+:)?text>([\\s\\S]*)<\\/(?:\\w+:)?text>/);\n    var rt = !!textMatch && !!textMatch[1] && parse_si(textMatch[1]) || {\n      r: \"\",\n      t: \"\",\n      h: \"\"\n    };\n    comment.r = rt.r;\n    if (rt.r == \"<t></t>\") rt.t = rt.h = \"\";\n    comment.t = (rt.t || \"\").replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\");\n    if (opts.cellHTML) comment.h = rt.h;\n    commentList.push(comment);\n  });\n  return commentList;\n}\n\nfunction write_comments_xml(data\n/*::, opts*/\n) {\n  var o = [XML_HEADER, writextag('comments', null, {\n    'xmlns': XMLNS_main[0]\n  })];\n  var iauthor\n  /*:Array<string>*/\n  = [];\n  o.push(\"<authors>\");\n  data.forEach(function (x) {\n    x[1].forEach(function (w) {\n      var a = escapexml(w.a);\n\n      if (iauthor.indexOf(a) == -1) {\n        iauthor.push(a);\n        o.push(\"<author>\" + a + \"</author>\");\n      }\n\n      if (w.T && w.ID && iauthor.indexOf(\"tc=\" + w.ID) == -1) {\n        iauthor.push(\"tc=\" + w.ID);\n        o.push(\"<author>\" + \"tc=\" + w.ID + \"</author>\");\n      }\n    });\n  });\n\n  if (iauthor.length == 0) {\n    iauthor.push(\"SheetJ5\");\n    o.push(\"<author>SheetJ5</author>\");\n  }\n\n  o.push(\"</authors>\");\n  o.push(\"<commentList>\");\n  data.forEach(function (d) {\n    /* 18.7.3 CT_Comment */\n    var lastauthor = 0,\n        ts = [];\n    if (d[1][0] && d[1][0].T && d[1][0].ID) lastauthor = iauthor.indexOf(\"tc=\" + d[1][0].ID);else d[1].forEach(function (c) {\n      if (c.a) lastauthor = iauthor.indexOf(escapexml(c.a));\n      ts.push(c.t || \"\");\n    });\n    o.push('<comment ref=\"' + d[0] + '\" authorId=\"' + lastauthor + '\"><text>');\n    if (ts.length <= 1) o.push(writetag(\"t\", escapexml(ts[0] || \"\")));else {\n      /* based on Threaded Comments -> Comments projection */\n      var t = \"Comment:\\n    \" + ts[0] + \"\\n\";\n\n      for (var i = 1; i < ts.length; ++i) {\n        t += \"Reply:\\n    \" + ts[i] + \"\\n\";\n      }\n\n      o.push(writetag(\"t\", escapexml(t)));\n    }\n    o.push('</text></comment>');\n  });\n  o.push(\"</commentList>\");\n\n  if (o.length > 2) {\n    o[o.length] = '</comments>';\n    o[1] = o[1].replace(\"/>\", \">\");\n  }\n\n  return o.join(\"\");\n}\n/* [MS-XLSX] 2.1.17 */\n\n\nfunction parse_tcmnt_xml(data\n/*:string*/\n, opts)\n/*:Array<RawComment>*/\n{\n  var out = [];\n  var pass = false,\n      comment = {},\n      tidx = 0;\n  data.replace(tagregex, function xml_tcmnt(x, idx) {\n    var y\n    /*:any*/\n    = parsexmltag(x);\n\n    switch (strip_ns(y[0])) {\n      case '<?xml':\n        break;\n\n      /* 2.6.207 ThreadedComments CT_ThreadedComments */\n\n      case '<ThreadedComments':\n        break;\n\n      case '</ThreadedComments>':\n        break;\n\n      /* 2.6.205 threadedComment CT_ThreadedComment */\n\n      case '<threadedComment':\n        comment = {\n          author: y.personId,\n          guid: y.id,\n          ref: y.ref,\n          T: 1\n        };\n        break;\n\n      case '</threadedComment>':\n        if (comment.t != null) out.push(comment);\n        break;\n\n      case '<text>':\n      case '<text':\n        tidx = idx + x.length;\n        break;\n\n      case '</text>':\n        comment.t = data.slice(tidx, idx).replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\");\n        break;\n\n      /* 2.6.206 mentions CT_ThreadedCommentMentions TODO */\n\n      case '<mentions':\n      case '<mentions>':\n        pass = true;\n        break;\n\n      case '</mentions>':\n        pass = false;\n        break;\n\n      /* 2.6.202 mention CT_Mention TODO */\n\n      /* 18.2.10 extLst CT_ExtensionList ? */\n\n      case '<extLst':\n      case '<extLst>':\n      case '</extLst>':\n      case '<extLst/>':\n        break;\n\n      /* 18.2.7  ext CT_Extension + */\n\n      case '<ext':\n        pass = true;\n        break;\n\n      case '</ext>':\n        pass = false;\n        break;\n\n      default:\n        if (!pass && opts.WTF) throw new Error('unrecognized ' + y[0] + ' in threaded comments');\n    }\n\n    return x;\n  });\n  return out;\n}\n\nfunction write_tcmnt_xml(comments, people, opts) {\n  var o = [XML_HEADER, writextag('ThreadedComments', null, {\n    'xmlns': XMLNS.TCMNT\n  }).replace(/[\\/]>/, \">\")];\n  comments.forEach(function (carr) {\n    var rootid = \"\";\n    (carr[1] || []).forEach(function (c, idx) {\n      if (!c.T) {\n        delete c.ID;\n        return;\n      }\n\n      if (c.a && people.indexOf(c.a) == -1) people.push(c.a);\n      var tcopts = {\n        ref: carr[0],\n        id: \"{54EE7951-7262-4200-6969-\" + (\"000000000000\" + opts.tcid++).slice(-12) + \"}\"\n      };\n      if (idx == 0) rootid = tcopts.id;else tcopts.parentId = rootid;\n      c.ID = tcopts.id;\n      if (c.a) tcopts.personId = \"{54EE7950-7262-4200-6969-\" + (\"000000000000\" + people.indexOf(c.a)).slice(-12) + \"}\";\n      o.push(writextag('threadedComment', writetag('text', c.t || \"\"), tcopts));\n    });\n  });\n  o.push('</ThreadedComments>');\n  return o.join(\"\");\n}\n/* [MS-XLSX] 2.1.18 */\n\n\nfunction parse_people_xml(data\n/*:string*/\n, opts) {\n  var out = [];\n  var pass = false;\n  data.replace(tagregex, function xml_tcmnt(x) {\n    var y\n    /*:any*/\n    = parsexmltag(x);\n\n    switch (strip_ns(y[0])) {\n      case '<?xml':\n        break;\n\n      /* 2.4.85 personList CT_PersonList */\n\n      case '<personList':\n        break;\n\n      case '</personList>':\n        break;\n\n      /* 2.6.203 person CT_Person TODO: providers */\n\n      case '<person':\n        out.push({\n          name: y.displayname,\n          id: y.id\n        });\n        break;\n\n      case '</person>':\n        break;\n\n      /* 18.2.10 extLst CT_ExtensionList ? */\n\n      case '<extLst':\n      case '<extLst>':\n      case '</extLst>':\n      case '<extLst/>':\n        break;\n\n      /* 18.2.7  ext CT_Extension + */\n\n      case '<ext':\n        pass = true;\n        break;\n\n      case '</ext>':\n        pass = false;\n        break;\n\n      default:\n        if (!pass && opts.WTF) throw new Error('unrecognized ' + y[0] + ' in threaded comments');\n    }\n\n    return x;\n  });\n  return out;\n}\n\nfunction write_people_xml(people\n/*, opts*/\n) {\n  var o = [XML_HEADER, writextag('personList', null, {\n    'xmlns': XMLNS.TCMNT,\n    'xmlns:x': XMLNS_main[0]\n  }).replace(/[\\/]>/, \">\")];\n  people.forEach(function (person, idx) {\n    o.push(writextag('person', null, {\n      displayName: person,\n      id: \"{54EE7950-7262-4200-6969-\" + (\"000000000000\" + idx).slice(-12) + \"}\",\n      userId: person,\n      providerId: \"None\"\n    }));\n  });\n  o.push(\"</personList>\");\n  return o.join(\"\");\n}\n/* [MS-XLSB] 2.4.28 BrtBeginComment */\n\n\nfunction parse_BrtBeginComment(data) {\n  var out = {};\n  out.iauthor = data.read_shift(4);\n  var rfx = parse_UncheckedRfX(data, 16);\n  out.rfx = rfx.s;\n  out.ref = encode_cell(rfx.s);\n  data.l += 16;\n  /*var guid = parse_GUID(data); */\n\n  return out;\n}\n\nfunction write_BrtBeginComment(data, o) {\n  if (o == null) o = new_buf(36);\n  o.write_shift(4, data[1].iauthor);\n  write_UncheckedRfX(data[0]\n  /*:any*/\n  , o);\n  o.write_shift(4, 0);\n  o.write_shift(4, 0);\n  o.write_shift(4, 0);\n  o.write_shift(4, 0);\n  return o;\n}\n/* [MS-XLSB] 2.4.327 BrtCommentAuthor */\n\n\nvar parse_BrtCommentAuthor = parse_XLWideString;\n\nfunction write_BrtCommentAuthor(data) {\n  return write_XLWideString(data.slice(0, 54));\n}\n/* [MS-XLSB] 2.1.7.8 Comments */\n\n\nfunction parse_comments_bin(data, opts)\n/*:Array<RawComment>*/\n{\n  var out\n  /*:Array<RawComment>*/\n  = [];\n  var authors\n  /*:Array<string>*/\n  = [];\n  var c = {};\n  var pass = false;\n  recordhopper(data, function hopper_cmnt(val, R, RT) {\n    switch (RT) {\n      case 0x0278:\n        /* 'BrtCommentAuthor' */\n        authors.push(val);\n        break;\n\n      case 0x027B:\n        /* 'BrtBeginComment' */\n        c = val;\n        break;\n\n      case 0x027D:\n        /* 'BrtCommentText' */\n        c.t = val.t;\n        c.h = val.h;\n        c.r = val.r;\n        break;\n\n      case 0x027C:\n        /* 'BrtEndComment' */\n        c.author = authors[c.iauthor];\n        delete c\n        /*:any*/\n        .iauthor;\n        if (opts.sheetRows && c.rfx && opts.sheetRows <= c.rfx.r) break;\n        if (!c.t) c.t = \"\";\n        delete c.rfx;\n        out.push(c);\n        break;\n\n      case 0x0C00:\n        /* 'BrtUid' */\n        break;\n\n      case 0x0023:\n        /* 'BrtFRTBegin' */\n        pass = true;\n        break;\n\n      case 0x0024:\n        /* 'BrtFRTEnd' */\n        pass = false;\n        break;\n\n      case 0x0025:\n        /* 'BrtACBegin' */\n        break;\n\n      case 0x0026:\n        /* 'BrtACEnd' */\n        break;\n\n      default:\n        if (R.T) {\n          /* empty */\n        } else if (!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\n    }\n  });\n  return out;\n}\n\nfunction write_comments_bin(data\n/*::, opts*/\n) {\n  var ba = buf_array();\n  var iauthor\n  /*:Array<string>*/\n  = [];\n  write_record(ba, 0x0274\n  /* BrtBeginComments */\n  );\n  write_record(ba, 0x0276\n  /* BrtBeginCommentAuthors */\n  );\n  data.forEach(function (comment) {\n    comment[1].forEach(function (c) {\n      if (iauthor.indexOf(c.a) > -1) return;\n      iauthor.push(c.a.slice(0, 54));\n      write_record(ba, 0x0278\n      /* BrtCommentAuthor */\n      , write_BrtCommentAuthor(c.a));\n    });\n  });\n  write_record(ba, 0x0277\n  /* BrtEndCommentAuthors */\n  );\n  write_record(ba, 0x0279\n  /* BrtBeginCommentList */\n  );\n  data.forEach(function (comment) {\n    comment[1].forEach(function (c) {\n      c.iauthor = iauthor.indexOf(c.a);\n      var range = {\n        s: decode_cell(comment[0]),\n        e: decode_cell(comment[0])\n      };\n      write_record(ba, 0x027B\n      /* BrtBeginComment */\n      , write_BrtBeginComment([range, c]));\n      if (c.t && c.t.length > 0) write_record(ba, 0x027D\n      /* BrtCommentText */\n      , write_BrtCommentText(c));\n      write_record(ba, 0x027C\n      /* BrtEndComment */\n      );\n      delete c.iauthor;\n    });\n  });\n  write_record(ba, 0x027A\n  /* BrtEndCommentList */\n  );\n  write_record(ba, 0x0275\n  /* BrtEndComments */\n  );\n  return ba.end();\n}\n\nvar CT_VBA = \"application/vnd.ms-office.vbaProject\";\n\nfunction make_vba_xls(cfb) {\n  var newcfb = CFB.utils.cfb_new({\n    root: \"R\"\n  });\n  cfb.FullPaths.forEach(function (p, i) {\n    if (p.slice(-1) === \"/\" || !p.match(/_VBA_PROJECT_CUR/)) 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}\n\nfunction fill_vba_xls(cfb, vba) {\n  vba.FullPaths.forEach(function (p, i) {\n    if (i == 0) return;\n    var newpath = p.replace(/[^\\/]*[\\/]/, \"/_VBA_PROJECT_CUR/\");\n    if (newpath.slice(-1) !== \"/\") CFB.utils.cfb_add(cfb, newpath, vba.FileIndex[i].content);\n  });\n}\n\nvar VBAFMTS = [\"xlsb\", \"xlsm\", \"xlam\", \"biff8\", \"xla\"];\n/* macro and dialog sheet stubs */\n\nfunction\n  /*::data:any, opts, idx:number, rels, wb, themes, styles*/\nparse_ds_bin()\n/*:Worksheet*/\n{\n  return {\n    '!type': 'dialog'\n  };\n}\n\nfunction\n  /*::data:any, opts, idx:number, rels, wb, themes, styles*/\nparse_ds_xml()\n/*:Worksheet*/\n{\n  return {\n    '!type': 'dialog'\n  };\n}\n\nfunction\n  /*::data:any, opts, idx:number, rels, wb, themes, styles*/\nparse_ms_bin()\n/*:Worksheet*/\n{\n  return {\n    '!type': 'macro'\n  };\n}\n\nfunction\n  /*::data:any, opts, idx:number, rels, wb, themes, styles*/\nparse_ms_xml()\n/*:Worksheet*/\n{\n  return {\n    '!type': 'macro'\n  };\n}\n/* TODO: it will be useful to parse the function str */\n\n\nvar rc_to_a1 = /*#__PURE__*/function () {\n  var rcregex = /(^|[^A-Za-z_])R(\\[?-?\\d+\\]|[1-9]\\d*|)C(\\[?-?\\d+\\]|[1-9]\\d*|)(?![A-Za-z0-9_])/g;\n  var rcbase\n  /*:Cell*/\n  = {\n    r: 0,\n    c: 0\n  }\n  /*:any*/\n  ;\n\n  function rcfunc($$, $1, $2, $3) {\n    var cRel = false,\n        rRel = false;\n    if ($2.length == 0) rRel = true;else if ($2.charAt(0) == \"[\") {\n      rRel = true;\n      $2 = $2.slice(1, -1);\n    }\n    if ($3.length == 0) cRel = true;else if ($3.charAt(0) == \"[\") {\n      cRel = true;\n      $3 = $3.slice(1, -1);\n    }\n    var R = $2.length > 0 ? parseInt($2, 10) | 0 : 0,\n        C = $3.length > 0 ? parseInt($3, 10) | 0 : 0;\n    if (cRel) C += rcbase.c;else --C;\n    if (rRel) R += rcbase.r;else --R;\n    return $1 + (cRel ? \"\" : \"$\") + encode_col(C) + (rRel ? \"\" : \"$\") + encode_row(R);\n  }\n\n  return function rc_to_a1(fstr\n  /*:string*/\n  , base\n  /*:Cell*/\n  )\n  /*:string*/\n  {\n    rcbase = base;\n    return fstr.replace(rcregex, rcfunc);\n  };\n}();\n\nvar crefregex = /(^|[^._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\nvar a1_to_rc = /*#__PURE__*/function () {\n  return function a1_to_rc(fstr\n  /*:string*/\n  , base\n  /*:CellAddress*/\n  ) {\n    return fstr.replace(crefregex, function ($0, $1, $2, $3, $4, $5) {\n      var c = decode_col($3) - ($2 ? 0 : base.c);\n      var r = decode_row($5) - ($4 ? 0 : base.r);\n      var R = r == 0 ? \"\" : !$4 ? \"[\" + r + \"]\" : r + 1;\n      var C = c == 0 ? \"\" : !$2 ? \"[\" + c + \"]\" : c + 1;\n      return $1 + \"R\" + R + \"C\" + C;\n    });\n  };\n}();\n/* no defined name can collide with a valid cell address A1:XFD1048576 ... except LOG10! */\n\n\nfunction shift_formula_str(f\n/*:string*/\n, delta\n/*:Cell*/\n)\n/*:string*/\n{\n  return f.replace(crefregex, function ($0, $1, $2, $3, $4, $5) {\n    return $1 + ($2 == \"$\" ? $2 + $3 : encode_col(decode_col($3) + delta.c)) + ($4 == \"$\" ? $4 + $5 : encode_row(decode_row($5) + delta.r));\n  });\n}\n\nfunction shift_formula_xlsx(f\n/*:string*/\n, range\n/*:string*/\n, cell\n/*:string*/\n)\n/*:string*/\n{\n  var r = decode_range(range),\n      s = r.s,\n      c = decode_cell(cell);\n  var delta = {\n    r: c.r - s.r,\n    c: c.c - s.c\n  };\n  return shift_formula_str(f, delta);\n}\n/* TODO: parse formula */\n\n\nfunction fuzzyfmla(f\n/*:string*/\n)\n/*:boolean*/\n{\n  if (f.length == 1) return false;\n  return true;\n}\n\nfunction _xlfn(f\n/*:string*/\n)\n/*:string*/\n{\n  return f.replace(/_xlfn\\./g, \"\");\n}\n\nfunction parseread1(blob) {\n  blob.l += 1;\n  return;\n}\n/* [MS-XLS] 2.5.51 */\n\n\nfunction parse_ColRelU(blob, length) {\n  var c = blob.read_shift(length == 1 ? 1 : 2);\n  return [c & 0x3FFF, c >> 14 & 1, c >> 15 & 1];\n}\n/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.89 */\n\n\nfunction parse_RgceArea(blob, length, opts) {\n  var w = 2;\n\n  if (opts) {\n    if (opts.biff >= 2 && opts.biff <= 5) return parse_RgceArea_BIFF2(blob, length, opts);else if (opts.biff == 12) w = 4;\n  }\n\n  var r = blob.read_shift(w),\n      R = blob.read_shift(w);\n  var c = parse_ColRelU(blob, 2);\n  var C = parse_ColRelU(blob, 2);\n  return {\n    s: {\n      r: r,\n      c: c[0],\n      cRel: c[1],\n      rRel: c[2]\n    },\n    e: {\n      r: R,\n      c: C[0],\n      cRel: C[1],\n      rRel: C[2]\n    }\n  };\n}\n/* BIFF 2-5 encodes flags in the row field */\n\n\nfunction parse_RgceArea_BIFF2(blob\n/*::, length, opts*/\n) {\n  var r = parse_ColRelU(blob, 2),\n      R = parse_ColRelU(blob, 2);\n  var c = blob.read_shift(1);\n  var C = blob.read_shift(1);\n  return {\n    s: {\n      r: r[0],\n      c: c,\n      cRel: r[1],\n      rRel: r[2]\n    },\n    e: {\n      r: R[0],\n      c: C,\n      cRel: R[1],\n      rRel: R[2]\n    }\n  };\n}\n/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.90 */\n\n\nfunction parse_RgceAreaRel(blob, length, opts) {\n  if (opts.biff < 8) return parse_RgceArea_BIFF2(blob, length, opts);\n  var r = blob.read_shift(opts.biff == 12 ? 4 : 2),\n      R = blob.read_shift(opts.biff == 12 ? 4 : 2);\n  var c = parse_ColRelU(blob, 2);\n  var C = parse_ColRelU(blob, 2);\n  return {\n    s: {\n      r: r,\n      c: c[0],\n      cRel: c[1],\n      rRel: c[2]\n    },\n    e: {\n      r: R,\n      c: C[0],\n      cRel: C[1],\n      rRel: C[2]\n    }\n  };\n}\n/* [MS-XLS] 2.5.198.109 ; [MS-XLSB] 2.5.97.91 */\n\n\nfunction parse_RgceLoc(blob, length, opts) {\n  if (opts && opts.biff >= 2 && opts.biff <= 5) return parse_RgceLoc_BIFF2(blob, length, opts);\n  var r = blob.read_shift(opts && opts.biff == 12 ? 4 : 2);\n  var c = parse_ColRelU(blob, 2);\n  return {\n    r: r,\n    c: c[0],\n    cRel: c[1],\n    rRel: c[2]\n  };\n}\n\nfunction parse_RgceLoc_BIFF2(blob\n/*::, length, opts*/\n) {\n  var r = parse_ColRelU(blob, 2);\n  var c = blob.read_shift(1);\n  return {\n    r: r[0],\n    c: c,\n    cRel: r[1],\n    rRel: r[2]\n  };\n}\n/* [MS-XLS] 2.5.198.107, 2.5.47 */\n\n\nfunction parse_RgceElfLoc(blob\n/*::, length, opts*/\n) {\n  var r = blob.read_shift(2);\n  var c = blob.read_shift(2);\n  return {\n    r: r,\n    c: c & 0xFF,\n    fQuoted: !!(c & 0x4000),\n    cRel: c >> 15,\n    rRel: c >> 15\n  };\n}\n/* [MS-XLS] 2.5.198.111 ; [MS-XLSB] 2.5.97.92 TODO */\n\n\nfunction parse_RgceLocRel(blob, length, opts) {\n  var biff = opts && opts.biff ? opts.biff : 8;\n  if (biff >= 2 && biff <= 5) return parse_RgceLocRel_BIFF2(blob, length, opts);\n  var r = blob.read_shift(biff >= 12 ? 4 : 2);\n  var cl = blob.read_shift(2);\n  var cRel = (cl & 0x4000) >> 14,\n      rRel = (cl & 0x8000) >> 15;\n  cl &= 0x3FFF;\n  if (rRel == 1) while (r > 0x7FFFF) {\n    r -= 0x100000;\n  }\n  if (cRel == 1) while (cl > 0x1FFF) {\n    cl = cl - 0x4000;\n  }\n  return {\n    r: r,\n    c: cl,\n    cRel: cRel,\n    rRel: rRel\n  };\n}\n\nfunction parse_RgceLocRel_BIFF2(blob\n/*::, length:number, opts*/\n) {\n  var rl = blob.read_shift(2);\n  var c = blob.read_shift(1);\n  var rRel = (rl & 0x8000) >> 15,\n      cRel = (rl & 0x4000) >> 14;\n  rl &= 0x3FFF;\n  if (rRel == 1 && rl >= 0x2000) rl = rl - 0x4000;\n  if (cRel == 1 && c >= 0x80) c = c - 0x100;\n  return {\n    r: rl,\n    c: c,\n    cRel: cRel,\n    rRel: rRel\n  };\n}\n/* [MS-XLS] 2.5.198.27 ; [MS-XLSB] 2.5.97.18 */\n\n\nfunction parse_PtgArea(blob, length, opts) {\n  var type = (blob[blob.l++] & 0x60) >> 5;\n  var area = parse_RgceArea(blob, opts.biff >= 2 && opts.biff <= 5 ? 6 : 8, opts);\n  return [type, area];\n}\n/* [MS-XLS] 2.5.198.28 ; [MS-XLSB] 2.5.97.19 */\n\n\nfunction parse_PtgArea3d(blob, length, opts) {\n  var type = (blob[blob.l++] & 0x60) >> 5;\n  var ixti = blob.read_shift(2, 'i');\n  var w = 8;\n  if (opts) switch (opts.biff) {\n    case 5:\n      blob.l += 12;\n      w = 6;\n      break;\n\n    case 12:\n      w = 12;\n      break;\n  }\n  var area = parse_RgceArea(blob, w, opts);\n  return [type, ixti, area];\n}\n/* [MS-XLS] 2.5.198.29 ; [MS-XLSB] 2.5.97.20 */\n\n\nfunction parse_PtgAreaErr(blob, length, opts) {\n  var type = (blob[blob.l++] & 0x60) >> 5;\n  blob.l += opts && opts.biff > 8 ? 12 : opts.biff < 8 ? 6 : 8;\n  return [type];\n}\n/* [MS-XLS] 2.5.198.30 ; [MS-XLSB] 2.5.97.21 */\n\n\nfunction parse_PtgAreaErr3d(blob, length, opts) {\n  var type = (blob[blob.l++] & 0x60) >> 5;\n  var ixti = blob.read_shift(2);\n  var w = 8;\n  if (opts) switch (opts.biff) {\n    case 5:\n      blob.l += 12;\n      w = 6;\n      break;\n\n    case 12:\n      w = 12;\n      break;\n  }\n  blob.l += w;\n  return [type, ixti];\n}\n/* [MS-XLS] 2.5.198.31 ; [MS-XLSB] 2.5.97.22 */\n\n\nfunction parse_PtgAreaN(blob, length, opts) {\n  var type = (blob[blob.l++] & 0x60) >> 5;\n  var area = parse_RgceAreaRel(blob, length - 1, opts);\n  return [type, area];\n}\n/* [MS-XLS] 2.5.198.32 ; [MS-XLSB] 2.5.97.23 */\n\n\nfunction parse_PtgArray(blob, length, opts) {\n  var type = (blob[blob.l++] & 0x60) >> 5;\n  blob.l += opts.biff == 2 ? 6 : opts.biff == 12 ? 14 : 7;\n  return [type];\n}\n/* [MS-XLS] 2.5.198.33 ; [MS-XLSB] 2.5.97.24 */\n\n\nfunction parse_PtgAttrBaxcel(blob) {\n  var bitSemi = blob[blob.l + 1] & 0x01;\n  /* 1 = volatile */\n\n  var bitBaxcel = 1;\n  blob.l += 4;\n  return [bitSemi, bitBaxcel];\n}\n/* [MS-XLS] 2.5.198.34 ; [MS-XLSB] 2.5.97.25 */\n\n\nfunction parse_PtgAttrChoose(blob, length, opts)\n/*:Array<number>*/\n{\n  blob.l += 2;\n  var offset = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n  var o\n  /*:Array<number>*/\n  = [];\n  /* offset is 1 less than the number of elements */\n\n  for (var i = 0; i <= offset; ++i) {\n    o.push(blob.read_shift(opts && opts.biff == 2 ? 1 : 2));\n  }\n\n  return o;\n}\n/* [MS-XLS] 2.5.198.35 ; [MS-XLSB] 2.5.97.26 */\n\n\nfunction parse_PtgAttrGoto(blob, length, opts) {\n  var bitGoto = blob[blob.l + 1] & 0xFF ? 1 : 0;\n  blob.l += 2;\n  return [bitGoto, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];\n}\n/* [MS-XLS] 2.5.198.36 ; [MS-XLSB] 2.5.97.27 */\n\n\nfunction parse_PtgAttrIf(blob, length, opts) {\n  var bitIf = blob[blob.l + 1] & 0xFF ? 1 : 0;\n  blob.l += 2;\n  return [bitIf, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];\n}\n/* [MS-XLSB] 2.5.97.28 */\n\n\nfunction parse_PtgAttrIfError(blob) {\n  var bitIf = blob[blob.l + 1] & 0xFF ? 1 : 0;\n  blob.l += 2;\n  return [bitIf, blob.read_shift(2)];\n}\n/* [MS-XLS] 2.5.198.37 ; [MS-XLSB] 2.5.97.29 */\n\n\nfunction parse_PtgAttrSemi(blob, length, opts) {\n  var bitSemi = blob[blob.l + 1] & 0xFF ? 1 : 0;\n  blob.l += opts && opts.biff == 2 ? 3 : 4;\n  return [bitSemi];\n}\n/* [MS-XLS] 2.5.198.40 ; [MS-XLSB] 2.5.97.32 */\n\n\nfunction parse_PtgAttrSpaceType(blob\n/*::, length*/\n) {\n  var type = blob.read_shift(1),\n      cch = blob.read_shift(1);\n  return [type, cch];\n}\n/* [MS-XLS] 2.5.198.38 ; [MS-XLSB] 2.5.97.30 */\n\n\nfunction parse_PtgAttrSpace(blob) {\n  blob.read_shift(2);\n  return parse_PtgAttrSpaceType(blob, 2);\n}\n/* [MS-XLS] 2.5.198.39 ; [MS-XLSB] 2.5.97.31 */\n\n\nfunction parse_PtgAttrSpaceSemi(blob) {\n  blob.read_shift(2);\n  return parse_PtgAttrSpaceType(blob, 2);\n}\n/* [MS-XLS] 2.5.198.84 ; [MS-XLSB] 2.5.97.68 TODO */\n\n\nfunction parse_PtgRef(blob, length, opts) {\n  //var ptg = blob[blob.l] & 0x1F;\n  var type = (blob[blob.l] & 0x60) >> 5;\n  blob.l += 1;\n  var loc = parse_RgceLoc(blob, 0, opts);\n  return [type, loc];\n}\n/* [MS-XLS] 2.5.198.88 ; [MS-XLSB] 2.5.97.72 TODO */\n\n\nfunction parse_PtgRefN(blob, length, opts) {\n  var type = (blob[blob.l] & 0x60) >> 5;\n  blob.l += 1;\n  var loc = parse_RgceLocRel(blob, 0, opts);\n  return [type, loc];\n}\n/* [MS-XLS] 2.5.198.85 ; [MS-XLSB] 2.5.97.69 TODO */\n\n\nfunction parse_PtgRef3d(blob, length, opts) {\n  var type = (blob[blob.l] & 0x60) >> 5;\n  blob.l += 1;\n  var ixti = blob.read_shift(2); // XtiIndex\n\n  if (opts && opts.biff == 5) blob.l += 12;\n  var loc = parse_RgceLoc(blob, 0, opts); // TODO: or RgceLocRel\n\n  return [type, ixti, loc];\n}\n/* [MS-XLS] 2.5.198.62 ; [MS-XLSB] 2.5.97.45 TODO */\n\n\nfunction parse_PtgFunc(blob, length, opts) {\n  //var ptg = blob[blob.l] & 0x1F;\n  var type = (blob[blob.l] & 0x60) >> 5;\n  blob.l += 1;\n  var iftab = blob.read_shift(opts && opts.biff <= 3 ? 1 : 2);\n  return [FtabArgc[iftab], Ftab[iftab], type];\n}\n/* [MS-XLS] 2.5.198.63 ; [MS-XLSB] 2.5.97.46 TODO */\n\n\nfunction parse_PtgFuncVar(blob, length, opts) {\n  var type = blob[blob.l++];\n  var cparams = blob.read_shift(1),\n      tab = opts && opts.biff <= 3 ? [type == 0x58 ? -1 : 0, blob.read_shift(1)] : parsetab(blob);\n  return [cparams, (tab[0] === 0 ? Ftab : Cetab)[tab[1]]];\n}\n\nfunction parsetab(blob) {\n  return [blob[blob.l + 1] >> 7, blob.read_shift(2) & 0x7FFF];\n}\n/* [MS-XLS] 2.5.198.41 ; [MS-XLSB] 2.5.97.33 */\n\n\nfunction parse_PtgAttrSum(blob, length, opts) {\n  blob.l += opts && opts.biff == 2 ? 3 : 4;\n  return;\n}\n/* [MS-XLS] 2.5.198.58 ; [MS-XLSB] 2.5.97.40 */\n\n\nfunction parse_PtgExp(blob, length, opts) {\n  blob.l++;\n  if (opts && opts.biff == 12) return [blob.read_shift(4, 'i'), 0];\n  var row = blob.read_shift(2);\n  var col = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n  return [row, col];\n}\n/* [MS-XLS] 2.5.198.57 ; [MS-XLSB] 2.5.97.39 */\n\n\nfunction parse_PtgErr(blob) {\n  blob.l++;\n  return BErr[blob.read_shift(1)];\n}\n/* [MS-XLS] 2.5.198.66 ; [MS-XLSB] 2.5.97.49 */\n\n\nfunction parse_PtgInt(blob) {\n  blob.l++;\n  return blob.read_shift(2);\n}\n/* [MS-XLS] 2.5.198.42 ; [MS-XLSB] 2.5.97.34 */\n\n\nfunction parse_PtgBool(blob) {\n  blob.l++;\n  return blob.read_shift(1) !== 0;\n}\n/* [MS-XLS] 2.5.198.79 ; [MS-XLSB] 2.5.97.63 */\n\n\nfunction parse_PtgNum(blob) {\n  blob.l++;\n  return parse_Xnum(blob, 8);\n}\n/* [MS-XLS] 2.5.198.89 ; [MS-XLSB] 2.5.97.74 */\n\n\nfunction parse_PtgStr(blob, length, opts) {\n  blob.l++;\n  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\n/* [MS-XLSB] 2.5.97.93 + 2.5.97.9{4,5,6,7} */\n\n\nfunction parse_SerAr(blob, biff\n/*:number*/\n) {\n  var val = [blob.read_shift(1)];\n  if (biff == 12) switch (val[0]) {\n    case 0x02:\n      val[0] = 0x04;\n      break;\n\n    /* SerBool */\n\n    case 0x04:\n      val[0] = 0x10;\n      break;\n\n    /* SerErr */\n\n    case 0x00:\n      val[0] = 0x01;\n      break;\n\n    /* SerNum */\n\n    case 0x01:\n      val[0] = 0x02;\n      break;\n\n    /* SerStr */\n  }\n\n  switch (val[0]) {\n    case 0x04:\n      /* SerBool -- boolean */\n      val[1] = parsebool(blob, 1) ? 'TRUE' : 'FALSE';\n      if (biff != 12) blob.l += 7;\n      break;\n\n    case 0x25:\n    /* appears to be an alias */\n\n    case 0x10:\n      /* SerErr -- error */\n      val[1] = BErr[blob[blob.l]];\n      blob.l += biff == 12 ? 4 : 8;\n      break;\n\n    case 0x00:\n      /* SerNil -- honestly, I'm not sure how to reproduce this */\n      blob.l += 8;\n      break;\n\n    case 0x01:\n      /* SerNum -- Xnum */\n      val[1] = parse_Xnum(blob, 8);\n      break;\n\n    case 0x02:\n      /* SerStr -- XLUnicodeString (<256 chars) */\n      val[1] = parse_XLUnicodeString2(blob, 0, {\n        biff: biff > 0 && biff < 8 ? 2 : biff\n      });\n      break;\n\n    default:\n      throw new Error(\"Bad SerAr: \" + val[0]);\n\n    /* Unreachable */\n  }\n\n  return val;\n}\n/* [MS-XLS] 2.5.198.61 ; [MS-XLSB] 2.5.97.44 */\n\n\nfunction parse_PtgExtraMem(blob, cce, opts) {\n  var count = blob.read_shift(opts.biff == 12 ? 4 : 2);\n  var out\n  /*:Array<Range>*/\n  = [];\n\n  for (var i = 0; i != count; ++i) {\n    out.push((opts.biff == 12 ? parse_UncheckedRfX : parse_Ref8U)(blob, 8));\n  }\n\n  return out;\n}\n/* [MS-XLS] 2.5.198.59 ; [MS-XLSB] 2.5.97.41 */\n\n\nfunction parse_PtgExtraArray(blob, length, opts) {\n  var rows = 0,\n      cols = 0;\n\n  if (opts.biff == 12) {\n    rows = blob.read_shift(4); // DRw\n\n    cols = blob.read_shift(4); // DCol\n  } else {\n    cols = 1 + blob.read_shift(1); //DColByteU\n\n    rows = 1 + blob.read_shift(2); //DRw\n  }\n\n  if (opts.biff >= 2 && opts.biff < 8) {\n    --rows;\n    if (--cols == 0) cols = 0x100;\n  } // $FlowIgnore\n\n\n  for (var i = 0, o\n  /*:Array<Array<any>>*/\n  = []; i != rows && (o[i] = []); ++i) {\n    for (var j = 0; j != cols; ++j) {\n      o[i][j] = parse_SerAr(blob, opts.biff);\n    }\n  }\n\n  return o;\n}\n/* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 */\n\n\nfunction parse_PtgName(blob, length, opts) {\n  var type = blob.read_shift(1) >>> 5 & 0x03;\n  var w = !opts || opts.biff >= 8 ? 4 : 2;\n  var nameindex = blob.read_shift(w);\n\n  switch (opts.biff) {\n    case 2:\n      blob.l += 5;\n      break;\n\n    case 3:\n    case 4:\n      blob.l += 8;\n      break;\n\n    case 5:\n      blob.l += 12;\n      break;\n  }\n\n  return [type, 0, nameindex];\n}\n/* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 */\n\n\nfunction parse_PtgNameX(blob, length, opts) {\n  if (opts.biff == 5) return parse_PtgNameX_BIFF5(blob, length, opts);\n  var type = blob.read_shift(1) >>> 5 & 0x03;\n  var ixti = blob.read_shift(2); // XtiIndex\n\n  var nameindex = blob.read_shift(4);\n  return [type, ixti, nameindex];\n}\n\nfunction parse_PtgNameX_BIFF5(blob\n/*::, length, opts*/\n) {\n  var type = blob.read_shift(1) >>> 5 & 0x03;\n  var ixti = blob.read_shift(2, 'i'); // XtiIndex\n\n  blob.l += 8;\n  var nameindex = blob.read_shift(2);\n  blob.l += 12;\n  return [type, ixti, nameindex];\n}\n/* [MS-XLS] 2.5.198.70 ; [MS-XLSB] 2.5.97.54 */\n\n\nfunction parse_PtgMemArea(blob, length, opts) {\n  var type = blob.read_shift(1) >>> 5 & 0x03;\n  blob.l += opts && opts.biff == 2 ? 3 : 4;\n  var cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n  return [type, cce];\n}\n/* [MS-XLS] 2.5.198.72 ; [MS-XLSB] 2.5.97.56 */\n\n\nfunction parse_PtgMemFunc(blob, length, opts) {\n  var type = blob.read_shift(1) >>> 5 & 0x03;\n  var cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n  return [type, cce];\n}\n/* [MS-XLS] 2.5.198.86 ; [MS-XLSB] 2.5.97.69 */\n\n\nfunction parse_PtgRefErr(blob, length, opts) {\n  var type = blob.read_shift(1) >>> 5 & 0x03;\n  blob.l += 4;\n  if (opts.biff < 8) blob.l--;\n  if (opts.biff == 12) blob.l += 2;\n  return [type];\n}\n/* [MS-XLS] 2.5.198.87 ; [MS-XLSB] 2.5.97.71 */\n\n\nfunction parse_PtgRefErr3d(blob, length, opts) {\n  var type = (blob[blob.l++] & 0x60) >> 5;\n  var ixti = blob.read_shift(2);\n  var w = 4;\n  if (opts) switch (opts.biff) {\n    case 5:\n      w = 15;\n      break;\n\n    case 12:\n      w = 6;\n      break;\n  }\n  blob.l += w;\n  return [type, ixti];\n}\n/* [MS-XLS] 2.5.198.71 ; [MS-XLSB] 2.5.97.55 */\n\n\nvar parse_PtgMemErr = parsenoop;\n/* [MS-XLS] 2.5.198.73  ; [MS-XLSB] 2.5.97.57 */\n\nvar parse_PtgMemNoMem = parsenoop;\n/* [MS-XLS] 2.5.198.92 */\n\nvar parse_PtgTbl = parsenoop;\n\nfunction parse_PtgElfLoc(blob, length, opts) {\n  blob.l += 2;\n  return [parse_RgceElfLoc(blob, 4, opts)];\n}\n\nfunction parse_PtgElfNoop(blob\n/*::, length, opts*/\n) {\n  blob.l += 6;\n  return [];\n}\n/* [MS-XLS] 2.5.198.46 */\n\n\nvar parse_PtgElfCol = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.47 */\n\nvar parse_PtgElfColS = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.48 */\n\nvar parse_PtgElfColSV = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.49 */\n\nvar parse_PtgElfColV = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.50 */\n\nfunction parse_PtgElfLel(blob\n/*::, length, opts*/\n) {\n  blob.l += 2;\n  return [parseuint16(blob), blob.read_shift(2) & 0x01];\n}\n/* [MS-XLS] 2.5.198.51 */\n\n\nvar parse_PtgElfRadical = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.52 */\n\nvar parse_PtgElfRadicalLel = parse_PtgElfLel;\n/* [MS-XLS] 2.5.198.53 */\n\nvar parse_PtgElfRadicalS = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.54 */\n\nvar parse_PtgElfRw = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.55 */\n\nvar parse_PtgElfRwV = parse_PtgElfLoc;\n/* [MS-XLSB] 2.5.97.52 TODO */\n\nvar PtgListRT = [\"Data\", \"All\", \"Headers\", \"??\", \"?Data2\", \"??\", \"?DataHeaders\", \"??\", \"Totals\", \"??\", \"??\", \"??\", \"?DataTotals\", \"??\", \"??\", \"??\", \"?Current\"];\n\nfunction parse_PtgList(blob\n/*::, length, opts*/\n) {\n  blob.l += 2;\n  var ixti = blob.read_shift(2);\n  var flags = blob.read_shift(2);\n  var idx = blob.read_shift(4);\n  var c = blob.read_shift(2);\n  var C = blob.read_shift(2);\n  var rt = PtgListRT[flags >> 2 & 0x1F];\n  return {\n    ixti: ixti,\n    coltype: flags & 0x3,\n    rt: rt,\n    idx: idx,\n    c: c,\n    C: C\n  };\n}\n/* [MS-XLS] 2.5.198.91 ; [MS-XLSB] 2.5.97.76 */\n\n\nfunction parse_PtgSxName(blob\n/*::, length, opts*/\n) {\n  blob.l += 2;\n  return [blob.read_shift(4)];\n}\n/* [XLS] old spec */\n\n\nfunction parse_PtgSheet(blob, length, opts) {\n  blob.l += 5;\n  blob.l += 2;\n  blob.l += opts.biff == 2 ? 1 : 4;\n  return [\"PTGSHEET\"];\n}\n\nfunction parse_PtgEndSheet(blob, length, opts) {\n  blob.l += opts.biff == 2 ? 4 : 5;\n  return [\"PTGENDSHEET\"];\n}\n\nfunction parse_PtgMemAreaN(blob\n/*::, length, opts*/\n) {\n  var type = blob.read_shift(1) >>> 5 & 0x03;\n  var cce = blob.read_shift(2);\n  return [type, cce];\n}\n\nfunction parse_PtgMemNoMemN(blob\n/*::, length, opts*/\n) {\n  var type = blob.read_shift(1) >>> 5 & 0x03;\n  var cce = blob.read_shift(2);\n  return [type, cce];\n}\n\nfunction parse_PtgAttrNoop(blob\n/*::, length, opts*/\n) {\n  blob.l += 4;\n  return [0, 0];\n}\n/* [MS-XLS] 2.5.198.25 ; [MS-XLSB] 2.5.97.16 */\n\n\nvar PtgTypes = {\n  /*::[*/\n  0x01\n  /*::]*/\n  : {\n    n: 'PtgExp',\n    f: parse_PtgExp\n  },\n\n  /*::[*/\n  0x02\n  /*::]*/\n  : {\n    n: 'PtgTbl',\n    f: parse_PtgTbl\n  },\n\n  /*::[*/\n  0x03\n  /*::]*/\n  : {\n    n: 'PtgAdd',\n    f: parseread1\n  },\n\n  /*::[*/\n  0x04\n  /*::]*/\n  : {\n    n: 'PtgSub',\n    f: parseread1\n  },\n\n  /*::[*/\n  0x05\n  /*::]*/\n  : {\n    n: 'PtgMul',\n    f: parseread1\n  },\n\n  /*::[*/\n  0x06\n  /*::]*/\n  : {\n    n: 'PtgDiv',\n    f: parseread1\n  },\n\n  /*::[*/\n  0x07\n  /*::]*/\n  : {\n    n: 'PtgPower',\n    f: parseread1\n  },\n\n  /*::[*/\n  0x08\n  /*::]*/\n  : {\n    n: 'PtgConcat',\n    f: parseread1\n  },\n\n  /*::[*/\n  0x09\n  /*::]*/\n  : {\n    n: 'PtgLt',\n    f: parseread1\n  },\n\n  /*::[*/\n  0x0A\n  /*::]*/\n  : {\n    n: 'PtgLe',\n    f: parseread1\n  },\n\n  /*::[*/\n  0x0B\n  /*::]*/\n  : {\n    n: 'PtgEq',\n    f: parseread1\n  },\n\n  /*::[*/\n  0x0C\n  /*::]*/\n  : {\n    n: 'PtgGe',\n    f: parseread1\n  },\n\n  /*::[*/\n  0x0D\n  /*::]*/\n  : {\n    n: 'PtgGt',\n    f: parseread1\n  },\n\n  /*::[*/\n  0x0E\n  /*::]*/\n  : {\n    n: 'PtgNe',\n    f: parseread1\n  },\n\n  /*::[*/\n  0x0F\n  /*::]*/\n  : {\n    n: 'PtgIsect',\n    f: parseread1\n  },\n\n  /*::[*/\n  0x10\n  /*::]*/\n  : {\n    n: 'PtgUnion',\n    f: parseread1\n  },\n\n  /*::[*/\n  0x11\n  /*::]*/\n  : {\n    n: 'PtgRange',\n    f: parseread1\n  },\n\n  /*::[*/\n  0x12\n  /*::]*/\n  : {\n    n: 'PtgUplus',\n    f: parseread1\n  },\n\n  /*::[*/\n  0x13\n  /*::]*/\n  : {\n    n: 'PtgUminus',\n    f: parseread1\n  },\n\n  /*::[*/\n  0x14\n  /*::]*/\n  : {\n    n: 'PtgPercent',\n    f: parseread1\n  },\n\n  /*::[*/\n  0x15\n  /*::]*/\n  : {\n    n: 'PtgParen',\n    f: parseread1\n  },\n\n  /*::[*/\n  0x16\n  /*::]*/\n  : {\n    n: 'PtgMissArg',\n    f: parseread1\n  },\n\n  /*::[*/\n  0x17\n  /*::]*/\n  : {\n    n: 'PtgStr',\n    f: parse_PtgStr\n  },\n\n  /*::[*/\n  0x1A\n  /*::]*/\n  : {\n    n: 'PtgSheet',\n    f: parse_PtgSheet\n  },\n\n  /*::[*/\n  0x1B\n  /*::]*/\n  : {\n    n: 'PtgEndSheet',\n    f: parse_PtgEndSheet\n  },\n\n  /*::[*/\n  0x1C\n  /*::]*/\n  : {\n    n: 'PtgErr',\n    f: parse_PtgErr\n  },\n\n  /*::[*/\n  0x1D\n  /*::]*/\n  : {\n    n: 'PtgBool',\n    f: parse_PtgBool\n  },\n\n  /*::[*/\n  0x1E\n  /*::]*/\n  : {\n    n: 'PtgInt',\n    f: parse_PtgInt\n  },\n\n  /*::[*/\n  0x1F\n  /*::]*/\n  : {\n    n: 'PtgNum',\n    f: parse_PtgNum\n  },\n\n  /*::[*/\n  0x20\n  /*::]*/\n  : {\n    n: 'PtgArray',\n    f: parse_PtgArray\n  },\n\n  /*::[*/\n  0x21\n  /*::]*/\n  : {\n    n: 'PtgFunc',\n    f: parse_PtgFunc\n  },\n\n  /*::[*/\n  0x22\n  /*::]*/\n  : {\n    n: 'PtgFuncVar',\n    f: parse_PtgFuncVar\n  },\n\n  /*::[*/\n  0x23\n  /*::]*/\n  : {\n    n: 'PtgName',\n    f: parse_PtgName\n  },\n\n  /*::[*/\n  0x24\n  /*::]*/\n  : {\n    n: 'PtgRef',\n    f: parse_PtgRef\n  },\n\n  /*::[*/\n  0x25\n  /*::]*/\n  : {\n    n: 'PtgArea',\n    f: parse_PtgArea\n  },\n\n  /*::[*/\n  0x26\n  /*::]*/\n  : {\n    n: 'PtgMemArea',\n    f: parse_PtgMemArea\n  },\n\n  /*::[*/\n  0x27\n  /*::]*/\n  : {\n    n: 'PtgMemErr',\n    f: parse_PtgMemErr\n  },\n\n  /*::[*/\n  0x28\n  /*::]*/\n  : {\n    n: 'PtgMemNoMem',\n    f: parse_PtgMemNoMem\n  },\n\n  /*::[*/\n  0x29\n  /*::]*/\n  : {\n    n: 'PtgMemFunc',\n    f: parse_PtgMemFunc\n  },\n\n  /*::[*/\n  0x2A\n  /*::]*/\n  : {\n    n: 'PtgRefErr',\n    f: parse_PtgRefErr\n  },\n\n  /*::[*/\n  0x2B\n  /*::]*/\n  : {\n    n: 'PtgAreaErr',\n    f: parse_PtgAreaErr\n  },\n\n  /*::[*/\n  0x2C\n  /*::]*/\n  : {\n    n: 'PtgRefN',\n    f: parse_PtgRefN\n  },\n\n  /*::[*/\n  0x2D\n  /*::]*/\n  : {\n    n: 'PtgAreaN',\n    f: parse_PtgAreaN\n  },\n\n  /*::[*/\n  0x2E\n  /*::]*/\n  : {\n    n: 'PtgMemAreaN',\n    f: parse_PtgMemAreaN\n  },\n\n  /*::[*/\n  0x2F\n  /*::]*/\n  : {\n    n: 'PtgMemNoMemN',\n    f: parse_PtgMemNoMemN\n  },\n\n  /*::[*/\n  0x39\n  /*::]*/\n  : {\n    n: 'PtgNameX',\n    f: parse_PtgNameX\n  },\n\n  /*::[*/\n  0x3A\n  /*::]*/\n  : {\n    n: 'PtgRef3d',\n    f: parse_PtgRef3d\n  },\n\n  /*::[*/\n  0x3B\n  /*::]*/\n  : {\n    n: 'PtgArea3d',\n    f: parse_PtgArea3d\n  },\n\n  /*::[*/\n  0x3C\n  /*::]*/\n  : {\n    n: 'PtgRefErr3d',\n    f: parse_PtgRefErr3d\n  },\n\n  /*::[*/\n  0x3D\n  /*::]*/\n  : {\n    n: 'PtgAreaErr3d',\n    f: parse_PtgAreaErr3d\n  },\n\n  /*::[*/\n  0xFF\n  /*::]*/\n  : {}\n};\n/* These are duplicated in the PtgTypes table */\n\nvar PtgDupes = {\n  /*::[*/\n  0x40\n  /*::]*/\n  : 0x20,\n\n  /*::[*/\n  0x60\n  /*::]*/\n  : 0x20,\n\n  /*::[*/\n  0x41\n  /*::]*/\n  : 0x21,\n\n  /*::[*/\n  0x61\n  /*::]*/\n  : 0x21,\n\n  /*::[*/\n  0x42\n  /*::]*/\n  : 0x22,\n\n  /*::[*/\n  0x62\n  /*::]*/\n  : 0x22,\n\n  /*::[*/\n  0x43\n  /*::]*/\n  : 0x23,\n\n  /*::[*/\n  0x63\n  /*::]*/\n  : 0x23,\n\n  /*::[*/\n  0x44\n  /*::]*/\n  : 0x24,\n\n  /*::[*/\n  0x64\n  /*::]*/\n  : 0x24,\n\n  /*::[*/\n  0x45\n  /*::]*/\n  : 0x25,\n\n  /*::[*/\n  0x65\n  /*::]*/\n  : 0x25,\n\n  /*::[*/\n  0x46\n  /*::]*/\n  : 0x26,\n\n  /*::[*/\n  0x66\n  /*::]*/\n  : 0x26,\n\n  /*::[*/\n  0x47\n  /*::]*/\n  : 0x27,\n\n  /*::[*/\n  0x67\n  /*::]*/\n  : 0x27,\n\n  /*::[*/\n  0x48\n  /*::]*/\n  : 0x28,\n\n  /*::[*/\n  0x68\n  /*::]*/\n  : 0x28,\n\n  /*::[*/\n  0x49\n  /*::]*/\n  : 0x29,\n\n  /*::[*/\n  0x69\n  /*::]*/\n  : 0x29,\n\n  /*::[*/\n  0x4A\n  /*::]*/\n  : 0x2A,\n\n  /*::[*/\n  0x6A\n  /*::]*/\n  : 0x2A,\n\n  /*::[*/\n  0x4B\n  /*::]*/\n  : 0x2B,\n\n  /*::[*/\n  0x6B\n  /*::]*/\n  : 0x2B,\n\n  /*::[*/\n  0x4C\n  /*::]*/\n  : 0x2C,\n\n  /*::[*/\n  0x6C\n  /*::]*/\n  : 0x2C,\n\n  /*::[*/\n  0x4D\n  /*::]*/\n  : 0x2D,\n\n  /*::[*/\n  0x6D\n  /*::]*/\n  : 0x2D,\n\n  /*::[*/\n  0x4E\n  /*::]*/\n  : 0x2E,\n\n  /*::[*/\n  0x6E\n  /*::]*/\n  : 0x2E,\n\n  /*::[*/\n  0x4F\n  /*::]*/\n  : 0x2F,\n\n  /*::[*/\n  0x6F\n  /*::]*/\n  : 0x2F,\n\n  /*::[*/\n  0x58\n  /*::]*/\n  : 0x22,\n\n  /*::[*/\n  0x78\n  /*::]*/\n  : 0x22,\n\n  /*::[*/\n  0x59\n  /*::]*/\n  : 0x39,\n\n  /*::[*/\n  0x79\n  /*::]*/\n  : 0x39,\n\n  /*::[*/\n  0x5A\n  /*::]*/\n  : 0x3A,\n\n  /*::[*/\n  0x7A\n  /*::]*/\n  : 0x3A,\n\n  /*::[*/\n  0x5B\n  /*::]*/\n  : 0x3B,\n\n  /*::[*/\n  0x7B\n  /*::]*/\n  : 0x3B,\n\n  /*::[*/\n  0x5C\n  /*::]*/\n  : 0x3C,\n\n  /*::[*/\n  0x7C\n  /*::]*/\n  : 0x3C,\n\n  /*::[*/\n  0x5D\n  /*::]*/\n  : 0x3D,\n\n  /*::[*/\n  0x7D\n  /*::]*/\n  : 0x3D\n};\nvar Ptg18 = {\n  /*::[*/\n  0x01\n  /*::]*/\n  : {\n    n: 'PtgElfLel',\n    f: parse_PtgElfLel\n  },\n\n  /*::[*/\n  0x02\n  /*::]*/\n  : {\n    n: 'PtgElfRw',\n    f: parse_PtgElfRw\n  },\n\n  /*::[*/\n  0x03\n  /*::]*/\n  : {\n    n: 'PtgElfCol',\n    f: parse_PtgElfCol\n  },\n\n  /*::[*/\n  0x06\n  /*::]*/\n  : {\n    n: 'PtgElfRwV',\n    f: parse_PtgElfRwV\n  },\n\n  /*::[*/\n  0x07\n  /*::]*/\n  : {\n    n: 'PtgElfColV',\n    f: parse_PtgElfColV\n  },\n\n  /*::[*/\n  0x0A\n  /*::]*/\n  : {\n    n: 'PtgElfRadical',\n    f: parse_PtgElfRadical\n  },\n\n  /*::[*/\n  0x0B\n  /*::]*/\n  : {\n    n: 'PtgElfRadicalS',\n    f: parse_PtgElfRadicalS\n  },\n\n  /*::[*/\n  0x0D\n  /*::]*/\n  : {\n    n: 'PtgElfColS',\n    f: parse_PtgElfColS\n  },\n\n  /*::[*/\n  0x0F\n  /*::]*/\n  : {\n    n: 'PtgElfColSV',\n    f: parse_PtgElfColSV\n  },\n\n  /*::[*/\n  0x10\n  /*::]*/\n  : {\n    n: 'PtgElfRadicalLel',\n    f: parse_PtgElfRadicalLel\n  },\n\n  /*::[*/\n  0x19\n  /*::]*/\n  : {\n    n: 'PtgList',\n    f: parse_PtgList\n  },\n\n  /*::[*/\n  0x1D\n  /*::]*/\n  : {\n    n: 'PtgSxName',\n    f: parse_PtgSxName\n  },\n\n  /*::[*/\n  0xFF\n  /*::]*/\n  : {}\n};\nvar Ptg19 = {\n  /*::[*/\n  0x00\n  /*::]*/\n  : {\n    n: 'PtgAttrNoop',\n    f: parse_PtgAttrNoop\n  },\n\n  /*::[*/\n  0x01\n  /*::]*/\n  : {\n    n: 'PtgAttrSemi',\n    f: parse_PtgAttrSemi\n  },\n\n  /*::[*/\n  0x02\n  /*::]*/\n  : {\n    n: 'PtgAttrIf',\n    f: parse_PtgAttrIf\n  },\n\n  /*::[*/\n  0x04\n  /*::]*/\n  : {\n    n: 'PtgAttrChoose',\n    f: parse_PtgAttrChoose\n  },\n\n  /*::[*/\n  0x08\n  /*::]*/\n  : {\n    n: 'PtgAttrGoto',\n    f: parse_PtgAttrGoto\n  },\n\n  /*::[*/\n  0x10\n  /*::]*/\n  : {\n    n: 'PtgAttrSum',\n    f: parse_PtgAttrSum\n  },\n\n  /*::[*/\n  0x20\n  /*::]*/\n  : {\n    n: 'PtgAttrBaxcel',\n    f: parse_PtgAttrBaxcel\n  },\n\n  /*::[*/\n  0x21\n  /*::]*/\n  : {\n    n: 'PtgAttrBaxcel',\n    f: parse_PtgAttrBaxcel\n  },\n\n  /*::[*/\n  0x40\n  /*::]*/\n  : {\n    n: 'PtgAttrSpace',\n    f: parse_PtgAttrSpace\n  },\n\n  /*::[*/\n  0x41\n  /*::]*/\n  : {\n    n: 'PtgAttrSpaceSemi',\n    f: parse_PtgAttrSpaceSemi\n  },\n\n  /*::[*/\n  0x80\n  /*::]*/\n  : {\n    n: 'PtgAttrIfError',\n    f: parse_PtgAttrIfError\n  },\n\n  /*::[*/\n  0xFF\n  /*::]*/\n  : {}\n};\n/* [MS-XLS] 2.5.198.103 ; [MS-XLSB] 2.5.97.87 */\n\nfunction parse_RgbExtra(blob, length, rgce, opts) {\n  if (opts.biff < 8) return parsenoop(blob, length);\n  var target = blob.l + length;\n  var o = [];\n\n  for (var i = 0; i !== rgce.length; ++i) {\n    switch (rgce[i][0]) {\n      case 'PtgArray':\n        /* PtgArray -> PtgExtraArray */\n        rgce[i][1] = parse_PtgExtraArray(blob, 0, opts);\n        o.push(rgce[i][1]);\n        break;\n\n      case 'PtgMemArea':\n        /* PtgMemArea -> PtgExtraMem */\n        rgce[i][2] = parse_PtgExtraMem(blob, rgce[i][1], opts);\n        o.push(rgce[i][2]);\n        break;\n\n      case 'PtgExp':\n        /* PtgExp -> PtgExtraCol */\n        if (opts && opts.biff == 12) {\n          rgce[i][1][1] = blob.read_shift(4);\n          o.push(rgce[i][1]);\n        }\n\n        break;\n\n      case 'PtgList':\n      /* TODO: PtgList -> PtgExtraList */\n\n      case 'PtgElfRadicalS':\n      /* TODO: PtgElfRadicalS -> PtgExtraElf */\n\n      case 'PtgElfColS':\n      /* TODO: PtgElfColS -> PtgExtraElf */\n\n      case 'PtgElfColSV':\n        /* TODO: PtgElfColSV -> PtgExtraElf */\n        throw \"Unsupported \" + rgce[i][0];\n\n      default:\n        break;\n    }\n  }\n\n  length = target - blob.l;\n  /* note: this is technically an error but Excel disregards */\n  //if(target !== blob.l && blob.l !== target - length) throw new Error(target + \" != \" + blob.l);\n\n  if (length !== 0) o.push(parsenoop(blob, length));\n  return o;\n}\n/* [MS-XLS] 2.5.198.104 ; [MS-XLSB] 2.5.97.88 */\n\n\nfunction parse_Rgce(blob, length, opts) {\n  var target = blob.l + length;\n  var R,\n      id,\n      ptgs = [];\n\n  while (target != blob.l) {\n    length = target - blob.l;\n    id = blob[blob.l];\n    R = PtgTypes[id] || PtgTypes[PtgDupes[id]];\n    if (id === 0x18 || id === 0x19) R = (id === 0x18 ? Ptg18 : Ptg19)[blob[blob.l + 1]];\n\n    if (!R || !R.f) {\n      /*ptgs.push*/\n      parsenoop(blob, length);\n    } else {\n      ptgs.push([R.n, R.f(blob, length, opts)]);\n    }\n  }\n\n  return ptgs;\n}\n\nfunction stringify_array(f\n/*:Array<Array<string>>*/\n)\n/*:string*/\n{\n  var o\n  /*:Array<string>*/\n  = [];\n\n  for (var i = 0; i < f.length; ++i) {\n    var x = f[i],\n        r\n    /*:Array<string>*/\n    = [];\n\n    for (var j = 0; j < x.length; ++j) {\n      var y = x[j];\n      if (y) switch (y[0]) {\n        // TODO: handle embedded quotes\n        case 0x02:\n          /*:: if(typeof y[1] != 'string') throw \"unreachable\"; */\n          r.push('\"' + y[1].replace(/\"/g, '\"\"') + '\"');\n          break;\n\n        default:\n          r.push(y[1]);\n      } else r.push(\"\");\n    }\n\n    o.push(r.join(\",\"));\n  }\n\n  return o.join(\";\");\n}\n/* [MS-XLS] 2.2.2 ; [MS-XLSB] 2.2.2 TODO */\n\n\nvar PtgBinOp = {\n  PtgAdd: \"+\",\n  PtgConcat: \"&\",\n  PtgDiv: \"/\",\n  PtgEq: \"=\",\n  PtgGe: \">=\",\n  PtgGt: \">\",\n  PtgLe: \"<=\",\n  PtgLt: \"<\",\n  PtgMul: \"*\",\n  PtgNe: \"<>\",\n  PtgPower: \"^\",\n  PtgSub: \"-\"\n}; // List of invalid characters needs to be tested further\n\nfunction formula_quote_sheet_name(sname\n/*:string*/\n, opts)\n/*:string*/\n{\n  if (!sname && !(opts && opts.biff <= 5 && opts.biff >= 2)) throw new Error(\"empty sheet name\");\n  if (/[^\\w\\u4E00-\\u9FFF\\u3040-\\u30FF]/.test(sname)) return \"'\" + sname + \"'\";\n  return sname;\n}\n\nfunction get_ixti_raw(supbooks, ixti\n/*:number*/\n, opts)\n/*:string*/\n{\n  if (!supbooks) return \"SH33TJSERR0\";\n  if (opts.biff > 8 && (!supbooks.XTI || !supbooks.XTI[ixti])) return supbooks.SheetNames[ixti];\n  if (!supbooks.XTI) return \"SH33TJSERR6\";\n  var XTI = supbooks.XTI[ixti];\n\n  if (opts.biff < 8) {\n    if (ixti > 10000) ixti -= 65536;\n    if (ixti < 0) ixti = -ixti;\n    return ixti == 0 ? \"\" : supbooks.XTI[ixti - 1];\n  }\n\n  if (!XTI) return \"SH33TJSERR1\";\n  var o = \"\";\n  if (opts.biff > 8) switch (supbooks[XTI[0]][0]) {\n    case 0x0165:\n      /* 'BrtSupSelf' */\n      o = XTI[1] == -1 ? \"#REF\" : supbooks.SheetNames[XTI[1]];\n      return XTI[1] == XTI[2] ? o : o + \":\" + supbooks.SheetNames[XTI[2]];\n\n    case 0x0166:\n      /* 'BrtSupSame' */\n      if (opts.SID != null) return supbooks.SheetNames[opts.SID];\n      return \"SH33TJSSAME\" + supbooks[XTI[0]][0];\n\n    case 0x0163:\n    /* 'BrtSupBookSrc' */\n\n    /* falls through */\n\n    default:\n      return \"SH33TJSSRC\" + supbooks[XTI[0]][0];\n  }\n\n  switch (supbooks[XTI[0]][0][0]) {\n    case 0x0401:\n      o = XTI[1] == -1 ? \"#REF\" : supbooks.SheetNames[XTI[1]] || \"SH33TJSERR3\";\n      return XTI[1] == XTI[2] ? o : o + \":\" + supbooks.SheetNames[XTI[2]];\n\n    case 0x3A01:\n      return supbooks[XTI[0]].slice(1).map(function (name) {\n        return name.Name;\n      }).join(\";;\");\n    //return \"SH33TJSERR8\";\n\n    default:\n      if (!supbooks[XTI[0]][0][3]) return \"SH33TJSERR2\";\n      o = XTI[1] == -1 ? \"#REF\" : supbooks[XTI[0]][0][3][XTI[1]] || \"SH33TJSERR4\";\n      return XTI[1] == XTI[2] ? o : o + \":\" + supbooks[XTI[0]][0][3][XTI[2]];\n  }\n}\n\nfunction get_ixti(supbooks, ixti\n/*:number*/\n, opts)\n/*:string*/\n{\n  var ixtiraw = get_ixti_raw(supbooks, ixti, opts);\n  return ixtiraw == \"#REF\" ? ixtiraw : formula_quote_sheet_name(ixtiraw, opts);\n}\n\nfunction stringify_formula(formula\n/*Array<any>*/\n, range, cell\n/*:any*/\n, supbooks, opts)\n/*:string*/\n{\n  var biff = opts && opts.biff || 8;\n  var _range =\n  /*range != null ? range :*/\n  {\n    s: {\n      c: 0,\n      r: 0\n    },\n    e: {\n      c: 0,\n      r: 0\n    }\n  };\n  var stack\n  /*:Array<string>*/\n  = [],\n      e1,\n      e2,\n\n  /*::type,*/\n  c\n  /*:CellAddress*/\n  ,\n      ixti = 0,\n      nameidx = 0,\n      r,\n      sname = \"\";\n  if (!formula[0] || !formula[0][0]) return \"\";\n  var last_sp = -1,\n      sp = \"\";\n\n  for (var ff = 0, fflen = formula[0].length; ff < fflen; ++ff) {\n    var f = formula[0][ff];\n\n    switch (f[0]) {\n      case 'PtgUminus':\n        /* [MS-XLS] 2.5.198.93 */\n        stack.push(\"-\" + stack.pop());\n        break;\n\n      case 'PtgUplus':\n        /* [MS-XLS] 2.5.198.95 */\n        stack.push(\"+\" + stack.pop());\n        break;\n\n      case 'PtgPercent':\n        /* [MS-XLS] 2.5.198.81 */\n        stack.push(stack.pop() + \"%\");\n        break;\n\n      case 'PtgAdd':\n      /* [MS-XLS] 2.5.198.26 */\n\n      case 'PtgConcat':\n      /* [MS-XLS] 2.5.198.43 */\n\n      case 'PtgDiv':\n      /* [MS-XLS] 2.5.198.45 */\n\n      case 'PtgEq':\n      /* [MS-XLS] 2.5.198.56 */\n\n      case 'PtgGe':\n      /* [MS-XLS] 2.5.198.64 */\n\n      case 'PtgGt':\n      /* [MS-XLS] 2.5.198.65 */\n\n      case 'PtgLe':\n      /* [MS-XLS] 2.5.198.68 */\n\n      case 'PtgLt':\n      /* [MS-XLS] 2.5.198.69 */\n\n      case 'PtgMul':\n      /* [MS-XLS] 2.5.198.75 */\n\n      case 'PtgNe':\n      /* [MS-XLS] 2.5.198.78 */\n\n      case 'PtgPower':\n      /* [MS-XLS] 2.5.198.82 */\n\n      case 'PtgSub':\n        /* [MS-XLS] 2.5.198.90 */\n        e1 = stack.pop();\n        e2 = stack.pop();\n\n        if (last_sp >= 0) {\n          switch (formula[0][last_sp][1][0]) {\n            case 0:\n              // $FlowIgnore\n              sp = fill(\" \", formula[0][last_sp][1][1]);\n              break;\n\n            case 1:\n              // $FlowIgnore\n              sp = fill(\"\\r\", formula[0][last_sp][1][1]);\n              break;\n\n            default:\n              sp = \"\"; // $FlowIgnore\n\n              if (opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + formula[0][last_sp][1][0]);\n          }\n\n          e2 = e2 + sp;\n          last_sp = -1;\n        }\n\n        stack.push(e2 + PtgBinOp[f[0]] + e1);\n        break;\n\n      case 'PtgIsect':\n        /* [MS-XLS] 2.5.198.67 */\n        e1 = stack.pop();\n        e2 = stack.pop();\n        stack.push(e2 + \" \" + e1);\n        break;\n\n      case 'PtgUnion':\n        /* [MS-XLS] 2.5.198.94 */\n        e1 = stack.pop();\n        e2 = stack.pop();\n        stack.push(e2 + \",\" + e1);\n        break;\n\n      case 'PtgRange':\n        /* [MS-XLS] 2.5.198.83 */\n        e1 = stack.pop();\n        e2 = stack.pop();\n        stack.push(e2 + \":\" + e1);\n        break;\n\n      case 'PtgAttrChoose':\n        /* [MS-XLS] 2.5.198.34 */\n        break;\n\n      case 'PtgAttrGoto':\n        /* [MS-XLS] 2.5.198.35 */\n        break;\n\n      case 'PtgAttrIf':\n        /* [MS-XLS] 2.5.198.36 */\n        break;\n\n      case 'PtgAttrIfError':\n        /* [MS-XLSB] 2.5.97.28 */\n        break;\n\n      case 'PtgRef':\n        /* [MS-XLS] 2.5.198.84 */\n\n        /*::type = f[1][0]; */\n        c = shift_cell_xls(f[1][1]\n        /*:any*/\n        , _range, opts);\n        stack.push(encode_cell_xls(c, biff));\n        break;\n\n      case 'PtgRefN':\n        /* [MS-XLS] 2.5.198.88 */\n\n        /*::type = f[1][0]; */\n        c = cell ? shift_cell_xls(f[1][1]\n        /*:any*/\n        , cell, opts) : f[1][1]\n        /*:any*/\n        ;\n        stack.push(encode_cell_xls(c, biff));\n        break;\n\n      case 'PtgRef3d':\n        /* [MS-XLS] 2.5.198.85 */\n\n        /*::type = f[1][0]; */\n        ixti =\n        /*::Number(*/\n        f[1][1]\n        /*::)*/\n        ;\n        c = shift_cell_xls(f[1][2]\n        /*:any*/\n        , _range, opts);\n        sname = get_ixti(supbooks, ixti, opts);\n        var w = sname;\n        /* IE9 fails on defined names */\n        // eslint-disable-line no-unused-vars\n\n        stack.push(sname + \"!\" + encode_cell_xls(c, biff));\n        break;\n\n      case 'PtgFunc':\n      /* [MS-XLS] 2.5.198.62 */\n\n      case 'PtgFuncVar':\n        /* [MS-XLS] 2.5.198.63 */\n\n        /* f[1] = [argc, func, type] */\n        var argc\n        /*:number*/\n        = f[1][0]\n        /*:any*/\n        ,\n            func\n        /*:string*/\n        = f[1][1]\n        /*:any*/\n        ;\n        if (!argc) argc = 0;\n        argc &= 0x7F;\n        var args = argc == 0 ? [] : stack.slice(-argc);\n        stack.length -= argc;\n        if (func === 'User') func = args.shift();\n        stack.push(func + \"(\" + args.join(\",\") + \")\");\n        break;\n\n      case 'PtgBool':\n        /* [MS-XLS] 2.5.198.42 */\n        stack.push(f[1] ? \"TRUE\" : \"FALSE\");\n        break;\n\n      case 'PtgInt':\n        /* [MS-XLS] 2.5.198.66 */\n        stack.push(\n        /*::String(*/\n        f[1]\n        /*::)*/\n        );\n        break;\n\n      case 'PtgNum':\n        /* [MS-XLS] 2.5.198.79 TODO: precision? */\n        stack.push(String(f[1]));\n        break;\n\n      case 'PtgStr':\n        /* [MS-XLS] 2.5.198.89 */\n        // $FlowIgnore\n        stack.push('\"' + f[1].replace(/\"/g, '\"\"') + '\"');\n        break;\n\n      case 'PtgErr':\n        /* [MS-XLS] 2.5.198.57 */\n        stack.push(\n        /*::String(*/\n        f[1]\n        /*::)*/\n        );\n        break;\n\n      case 'PtgAreaN':\n        /* [MS-XLS] 2.5.198.31 TODO */\n\n        /*::type = f[1][0]; */\n        r = shift_range_xls(f[1][1], cell ? {\n          s: cell\n        } : _range, opts);\n        stack.push(encode_range_xls(r\n        /*:any*/\n        , opts));\n        break;\n\n      case 'PtgArea':\n        /* [MS-XLS] 2.5.198.27 TODO: fixed points */\n\n        /*::type = f[1][0]; */\n        r = shift_range_xls(f[1][1], _range, opts);\n        stack.push(encode_range_xls(r\n        /*:any*/\n        , opts));\n        break;\n\n      case 'PtgArea3d':\n        /* [MS-XLS] 2.5.198.28 TODO */\n\n        /*::type = f[1][0]; */\n        ixti =\n        /*::Number(*/\n        f[1][1]\n        /*::)*/\n        ;\n        r = f[1][2];\n        sname = get_ixti(supbooks, ixti, opts);\n        stack.push(sname + \"!\" + encode_range_xls(r\n        /*:any*/\n        , opts));\n        break;\n\n      case 'PtgAttrSum':\n        /* [MS-XLS] 2.5.198.41 */\n        stack.push(\"SUM(\" + stack.pop() + \")\");\n        break;\n\n      case 'PtgAttrBaxcel':\n      /* [MS-XLS] 2.5.198.33 */\n\n      case 'PtgAttrSemi':\n        /* [MS-XLS] 2.5.198.37 */\n        break;\n\n      case 'PtgName':\n        /* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 TODO: revisions */\n\n        /* f[1] = type, 0, nameindex */\n        nameidx = f[1][2]\n        /*:any*/\n        ;\n        var lbl = (supbooks.names || [])[nameidx - 1] || (supbooks[0] || [])[nameidx];\n        var name = lbl ? lbl.Name : \"SH33TJSNAME\" + String(nameidx);\n        /* [MS-XLSB] 2.5.97.10 Ftab -- last verified 20220204 */\n\n        if (name && name.slice(0, 6) == \"_xlfn.\" && !opts.xlfn) name = name.slice(6);\n        stack.push(name);\n        break;\n\n      case 'PtgNameX':\n        /* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 TODO: revisions */\n\n        /* f[1] = type, ixti, nameindex */\n        var bookidx\n        /*:number*/\n        = f[1][1]\n        /*:any*/\n        ;\n        nameidx = f[1][2]\n        /*:any*/\n        ;\n        var externbook;\n        /* TODO: Properly handle missing values -- this should be using get_ixti_raw primarily */\n\n        if (opts.biff <= 5) {\n          if (bookidx < 0) bookidx = -bookidx;\n          if (supbooks[bookidx]) externbook = supbooks[bookidx][nameidx];\n        } else {\n          var o = \"\";\n\n          if (((supbooks[bookidx] || [])[0] || [])[0] == 0x3A01) {\n            /* empty */\n          } else if (((supbooks[bookidx] || [])[0] || [])[0] == 0x0401) {\n            if (supbooks[bookidx][nameidx] && supbooks[bookidx][nameidx].itab > 0) {\n              o = supbooks.SheetNames[supbooks[bookidx][nameidx].itab - 1] + \"!\";\n            }\n          } else o = supbooks.SheetNames[nameidx - 1] + \"!\";\n\n          if (supbooks[bookidx] && supbooks[bookidx][nameidx]) o += supbooks[bookidx][nameidx].Name;else if (supbooks[0] && supbooks[0][nameidx]) o += supbooks[0][nameidx].Name;else {\n            var ixtidata = (get_ixti_raw(supbooks, bookidx, opts) || \"\").split(\";;\");\n            if (ixtidata[nameidx - 1]) o = ixtidata[nameidx - 1]; // TODO: confirm this is correct\n            else o += \"SH33TJSERRX\";\n          }\n          stack.push(o);\n          break;\n        }\n\n        if (!externbook) externbook = {\n          Name: \"SH33TJSERRY\"\n        };\n        stack.push(externbook.Name);\n        break;\n\n      case 'PtgParen':\n        /* [MS-XLS] 2.5.198.80 */\n        var lp = '(',\n            rp = ')';\n\n        if (last_sp >= 0) {\n          sp = \"\";\n\n          switch (formula[0][last_sp][1][0]) {\n            // $FlowIgnore\n            case 2:\n              lp = fill(\" \", formula[0][last_sp][1][1]) + lp;\n              break;\n            // $FlowIgnore\n\n            case 3:\n              lp = fill(\"\\r\", formula[0][last_sp][1][1]) + lp;\n              break;\n            // $FlowIgnore\n\n            case 4:\n              rp = fill(\" \", formula[0][last_sp][1][1]) + rp;\n              break;\n            // $FlowIgnore\n\n            case 5:\n              rp = fill(\"\\r\", formula[0][last_sp][1][1]) + rp;\n              break;\n\n            default:\n              // $FlowIgnore\n              if (opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + formula[0][last_sp][1][0]);\n          }\n\n          last_sp = -1;\n        }\n\n        stack.push(lp + stack.pop() + rp);\n        break;\n\n      case 'PtgRefErr':\n        /* [MS-XLS] 2.5.198.86 */\n        stack.push('#REF!');\n        break;\n\n      case 'PtgRefErr3d':\n        /* [MS-XLS] 2.5.198.87 */\n        stack.push('#REF!');\n        break;\n\n      case 'PtgExp':\n        /* [MS-XLS] 2.5.198.58 TODO */\n        c = {\n          c: f[1][1]\n          /*:any*/\n          ,\n          r: f[1][0]\n          /*:any*/\n\n        };\n        var q = {\n          c: cell.c,\n          r: cell.r\n        }\n        /*:any*/\n        ;\n\n        if (supbooks.sharedf[encode_cell(c)]) {\n          var parsedf = supbooks.sharedf[encode_cell(c)];\n          stack.push(stringify_formula(parsedf, _range, q, supbooks, opts));\n        } else {\n          var fnd = false;\n\n          for (e1 = 0; e1 != supbooks.arrayf.length; ++e1) {\n            /* TODO: should be something like range_has */\n            e2 = supbooks.arrayf[e1];\n            if (c.c < e2[0].s.c || c.c > e2[0].e.c) continue;\n            if (c.r < e2[0].s.r || c.r > e2[0].e.r) continue;\n            stack.push(stringify_formula(e2[1], _range, q, supbooks, opts));\n            fnd = true;\n            break;\n          }\n\n          if (!fnd) stack.push(\n          /*::String(*/\n          f[1]\n          /*::)*/\n          );\n        }\n\n        break;\n\n      case 'PtgArray':\n        /* [MS-XLS] 2.5.198.32 TODO */\n        stack.push(\"{\" + stringify_array(\n        /*::(*/\n        f[1]\n        /*:: :any)*/\n        ) + \"}\");\n        break;\n\n      case 'PtgMemArea':\n        /* [MS-XLS] 2.5.198.70 TODO: confirm this is a non-display */\n        //stack.push(\"(\" + f[2].map(encode_range).join(\",\") + \")\");\n        break;\n\n      case 'PtgAttrSpace':\n      /* [MS-XLS] 2.5.198.38 */\n\n      case 'PtgAttrSpaceSemi':\n        /* [MS-XLS] 2.5.198.39 */\n        last_sp = ff;\n        break;\n\n      case 'PtgTbl':\n        /* [MS-XLS] 2.5.198.92 TODO */\n        break;\n\n      case 'PtgMemErr':\n        /* [MS-XLS] 2.5.198.71 */\n        break;\n\n      case 'PtgMissArg':\n        /* [MS-XLS] 2.5.198.74 */\n        stack.push(\"\");\n        break;\n\n      case 'PtgAreaErr':\n        /* [MS-XLS] 2.5.198.29 */\n        stack.push(\"#REF!\");\n        break;\n\n      case 'PtgAreaErr3d':\n        /* [MS-XLS] 2.5.198.30 */\n        stack.push(\"#REF!\");\n        break;\n\n      case 'PtgList':\n        /* [MS-XLSB] 2.5.97.52 */\n        // $FlowIgnore\n        stack.push(\"Table\" + f[1].idx + \"[#\" + f[1].rt + \"]\");\n        break;\n\n      case 'PtgMemAreaN':\n      case 'PtgMemNoMemN':\n      case 'PtgAttrNoop':\n      case 'PtgSheet':\n      case 'PtgEndSheet':\n        break;\n\n      case 'PtgMemFunc':\n        /* [MS-XLS] 2.5.198.72 TODO */\n        break;\n\n      case 'PtgMemNoMem':\n        /* [MS-XLS] 2.5.198.73 TODO */\n        break;\n\n      case 'PtgElfCol':\n      /* [MS-XLS] 2.5.198.46 */\n\n      case 'PtgElfColS':\n      /* [MS-XLS] 2.5.198.47 */\n\n      case 'PtgElfColSV':\n      /* [MS-XLS] 2.5.198.48 */\n\n      case 'PtgElfColV':\n      /* [MS-XLS] 2.5.198.49 */\n\n      case 'PtgElfLel':\n      /* [MS-XLS] 2.5.198.50 */\n\n      case 'PtgElfRadical':\n      /* [MS-XLS] 2.5.198.51 */\n\n      case 'PtgElfRadicalLel':\n      /* [MS-XLS] 2.5.198.52 */\n\n      case 'PtgElfRadicalS':\n      /* [MS-XLS] 2.5.198.53 */\n\n      case 'PtgElfRw':\n      /* [MS-XLS] 2.5.198.54 */\n\n      case 'PtgElfRwV':\n        /* [MS-XLS] 2.5.198.55 */\n        throw new Error(\"Unsupported ELFs\");\n\n      case 'PtgSxName':\n        /* [MS-XLS] 2.5.198.91 TODO -- find a test case */\n        throw new Error('Unrecognized Formula Token: ' + String(f));\n\n      default:\n        throw new Error('Unrecognized Formula Token: ' + String(f));\n    }\n\n    var PtgNonDisp = ['PtgAttrSpace', 'PtgAttrSpaceSemi', 'PtgAttrGoto'];\n    if (opts.biff != 3) if (last_sp >= 0 && PtgNonDisp.indexOf(formula[0][ff][0]) == -1) {\n      f = formula[0][last_sp];\n      var _left = true;\n\n      switch (f[1][0]) {\n        /* note: some bad XLSB files omit the PtgParen */\n        case 4:\n          _left = false;\n\n        /* falls through */\n\n        case 0:\n          // $FlowIgnore\n          sp = fill(\" \", f[1][1]);\n          break;\n\n        case 5:\n          _left = false;\n\n        /* falls through */\n\n        case 1:\n          // $FlowIgnore\n          sp = fill(\"\\r\", f[1][1]);\n          break;\n\n        default:\n          sp = \"\"; // $FlowIgnore\n\n          if (opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + f[1][0]);\n      }\n\n      stack.push((_left ? sp : \"\") + stack.pop() + (_left ? \"\" : sp));\n      last_sp = -1;\n    }\n  }\n\n  if (stack.length > 1 && opts.WTF) throw new Error(\"bad formula stack\");\n  return stack[0];\n}\n/* [MS-XLS] 2.5.198.1 TODO */\n\n\nfunction parse_ArrayParsedFormula(blob, length, opts\n/*::, ref*/\n) {\n  var target = blob.l + length,\n      len = opts.biff == 2 ? 1 : 2;\n  var rgcb,\n      cce = blob.read_shift(len); // length of rgce\n\n  if (cce == 0xFFFF) return [[], parsenoop(blob, length - 2)];\n  var rgce = parse_Rgce(blob, cce, opts);\n  if (length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);\n  blob.l = target;\n  return [rgce, rgcb];\n}\n/* [MS-XLS] 2.5.198.3 TODO */\n\n\nfunction parse_XLSCellParsedFormula(blob, length, opts) {\n  var target = blob.l + length,\n      len = opts.biff == 2 ? 1 : 2;\n  var rgcb,\n      cce = blob.read_shift(len); // length of rgce\n\n  if (cce == 0xFFFF) return [[], parsenoop(blob, length - 2)];\n  var rgce = parse_Rgce(blob, cce, opts);\n  if (length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);\n  blob.l = target;\n  return [rgce, rgcb];\n}\n/* [MS-XLS] 2.5.198.21 */\n\n\nfunction parse_NameParsedFormula(blob, length, opts, cce) {\n  var target = blob.l + length;\n  var rgce = parse_Rgce(blob, cce, opts);\n  var rgcb;\n  if (target !== blob.l) rgcb = parse_RgbExtra(blob, target - blob.l, rgce, opts);\n  return [rgce, rgcb];\n}\n/* [MS-XLS] 2.5.198.118 TODO */\n\n\nfunction parse_SharedParsedFormula(blob, length, opts) {\n  var target = blob.l + length;\n  var rgcb,\n      cce = blob.read_shift(2); // length of rgce\n\n  var rgce = parse_Rgce(blob, cce, opts);\n  if (cce == 0xFFFF) return [[], parsenoop(blob, length - 2)];\n  if (length !== cce + 2) rgcb = parse_RgbExtra(blob, target - cce - 2, rgce, opts);\n  return [rgce, rgcb];\n}\n/* [MS-XLS] 2.5.133 TODO: how to emit empty strings? */\n\n\nfunction parse_FormulaValue(blob\n/*::, length*/\n) {\n  var b;\n  if (__readUInt16LE(blob, blob.l + 6) !== 0xFFFF) return [parse_Xnum(blob), 'n'];\n\n  switch (blob[blob.l]) {\n    case 0x00:\n      blob.l += 8;\n      return [\"String\", 's'];\n\n    case 0x01:\n      b = blob[blob.l + 2] === 0x1;\n      blob.l += 8;\n      return [b, 'b'];\n\n    case 0x02:\n      b = blob[blob.l + 2];\n      blob.l += 8;\n      return [b, 'e'];\n\n    case 0x03:\n      blob.l += 8;\n      return [\"\", 's'];\n  }\n\n  return [];\n}\n\nfunction write_FormulaValue(value) {\n  if (value == null) {\n    // Blank String Value\n    var o = new_buf(8);\n    o.write_shift(1, 0x03);\n    o.write_shift(1, 0);\n    o.write_shift(2, 0);\n    o.write_shift(2, 0);\n    o.write_shift(2, 0xFFFF);\n    return o;\n  } else if (typeof value == \"number\") return write_Xnum(value);\n\n  return write_Xnum(0);\n}\n/* [MS-XLS] 2.4.127 TODO */\n\n\nfunction parse_Formula(blob, length, opts) {\n  var end = blob.l + length;\n  var cell = parse_XLSCell(blob, 6);\n  if (opts.biff == 2) ++blob.l;\n  var val = parse_FormulaValue(blob, 8);\n  var flags = blob.read_shift(1);\n\n  if (opts.biff != 2) {\n    blob.read_shift(1);\n\n    if (opts.biff >= 5) {\n      /*var chn = */\n      blob.read_shift(4);\n    }\n  }\n\n  var cbf = parse_XLSCellParsedFormula(blob, end - blob.l, opts);\n  return {\n    cell: cell,\n    val: val[0],\n    formula: cbf,\n    shared: flags >> 3 & 1,\n    tt: val[1]\n  };\n}\n\nfunction write_Formula(cell\n/*:Cell*/\n, R\n/*:number*/\n, C\n/*:number*/\n, opts, os\n/*:number*/\n) {\n  // Cell\n  var o1 = write_XLSCell(R, C, os); // FormulaValue\n\n  var o2 = write_FormulaValue(cell.v); // flags + cache\n\n  var o3 = new_buf(6);\n  var flags = 0x01 | 0x20;\n  o3.write_shift(2, flags);\n  o3.write_shift(4, 0); // CellParsedFormula\n\n  var bf = new_buf(cell.bf.length);\n\n  for (var i = 0; i < cell.bf.length; ++i) {\n    bf[i] = cell.bf[i];\n  }\n\n  var out = bconcat([o1, o2, o3, bf]);\n  return out;\n}\n/* XLSB Parsed Formula records have the same shape */\n\n\nfunction parse_XLSBParsedFormula(data, length, opts) {\n  var cce = data.read_shift(4);\n  var rgce = parse_Rgce(data, cce, opts);\n  var cb = data.read_shift(4);\n  var rgcb = cb > 0 ? parse_RgbExtra(data, cb, rgce, opts) : null;\n  return [rgce, rgcb];\n}\n/* [MS-XLSB] 2.5.97.1 ArrayParsedFormula */\n\n\nvar parse_XLSBArrayParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.4 CellParsedFormula */\n\nvar parse_XLSBCellParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.8 DVParsedFormula */\n//var parse_XLSBDVParsedFormula = parse_XLSBParsedFormula;\n\n/* [MS-XLSB] 2.5.97.9 FRTParsedFormula */\n//var parse_XLSBFRTParsedFormula = parse_XLSBParsedFormula2;\n\n/* [MS-XLSB] 2.5.97.12 NameParsedFormula */\n\nvar parse_XLSBNameParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.98 SharedParsedFormula */\n\nvar parse_XLSBSharedParsedFormula = parse_XLSBParsedFormula;\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 */\n\nfunction ods_to_csf_formula(f\n/*:string*/\n)\n/*:string*/\n{\n  if (f.slice(0, 3) == \"of:\") f = f.slice(3);\n  /* 5.2 Basic Expressions */\n\n  if (f.charCodeAt(0) == 61) {\n    f = f.slice(1);\n    if (f.charCodeAt(0) == 61) f = f.slice(1);\n  }\n\n  f = f.replace(/COM\\.MICROSOFT\\./g, \"\");\n  /* Part 3 Section 5.8 References */\n\n  f = f.replace(/\\[((?:\\.[A-Z]+[0-9]+)(?::\\.[A-Z]+[0-9]+)?)\\]/g, function ($$, $1) {\n    return $1.replace(/\\./g, \"\");\n  });\n  /* TODO: something other than this */\n\n  f = f.replace(/\\[.(#[A-Z]*[?!])\\]/g, \"$1\");\n  return f.replace(/[;~]/g, \",\").replace(/\\|/g, \";\");\n}\n\nfunction csf_to_ods_formula(f\n/*:string*/\n)\n/*:string*/\n{\n  var o = \"of:=\" + f.replace(crefregex, \"$1[.$2$3$4$5]\").replace(/\\]:\\[/g, \":\");\n  /* TODO: something other than this */\n\n  return o.replace(/;/g, \"|\").replace(/,/g, \";\");\n}\n\nfunction ods_to_csf_3D(r\n/*:string*/\n)\n/*:[string, string]*/\n{\n  var a = r.split(\":\");\n  var s = a[0].split(\".\")[0];\n  return [s, a[0].split(\".\")[1] + (a.length > 1 ? \":\" + (a[1].split(\".\")[1] || a[1].split(\".\")[0]) : \"\")];\n}\n\nfunction csf_to_ods_3D(r\n/*:string*/\n)\n/*:string*/\n{\n  return r.replace(/\\./, \"!\");\n}\n\nvar strs = {}; // shared strings\n\nvar _ssfopts = {}; // spreadsheet formatting options\n\n/*global Map */\n\nvar browser_has_Map = typeof Map !== 'undefined';\n\nfunction get_sst_id(sst\n/*:SST*/\n, str\n/*:string*/\n, rev)\n/*:number*/\n{\n  var i = 0,\n      len = sst.length;\n\n  if (rev) {\n    if (browser_has_Map ? rev.has(str) : Object.prototype.hasOwnProperty.call(rev, str)) {\n      var revarr = browser_has_Map ? rev.get(str) : rev[str];\n\n      for (; i < revarr.length; ++i) {\n        if (sst[revarr[i]].t === str) {\n          sst.Count++;\n          return revarr[i];\n        }\n      }\n    }\n  } else for (; i < len; ++i) {\n    if (sst[i].t === str) {\n      sst.Count++;\n      return i;\n    }\n  }\n\n  sst[len] = {\n    t: str\n  }\n  /*:any*/\n  ;\n  sst.Count++;\n  sst.Unique++;\n\n  if (rev) {\n    if (browser_has_Map) {\n      if (!rev.has(str)) rev.set(str, []);\n      rev.get(str).push(len);\n    } else {\n      if (!Object.prototype.hasOwnProperty.call(rev, str)) rev[str] = [];\n      rev[str].push(len);\n    }\n  }\n\n  return len;\n}\n\nfunction col_obj_w(C\n/*:number*/\n, col) {\n  var p = {\n    min: C + 1,\n    max: C + 1\n  }\n  /*:any*/\n  ;\n  /* wch (chars), wpx (pixels) */\n\n  var wch = -1;\n  if (col.MDW) MDW = col.MDW;\n  if (col.width != null) p.customWidth = 1;else if (col.wpx != null) wch = px2char(col.wpx);else if (col.wch != null) wch = col.wch;\n\n  if (wch > -1) {\n    p.width = char2width(wch);\n    p.customWidth = 1;\n  } else if (col.width != null) p.width = col.width;\n\n  if (col.hidden) p.hidden = true;\n\n  if (col.level != null) {\n    p.outlineLevel = p.level = col.level;\n  }\n\n  return p;\n}\n\nfunction default_margins(margins\n/*:Margins*/\n, mode\n/*:?string*/\n) {\n  if (!margins) return;\n  var defs = [0.7, 0.7, 0.75, 0.75, 0.3, 0.3];\n  if (mode == 'xlml') defs = [1, 1, 1, 1, 0.5, 0.5];\n  if (margins.left == null) margins.left = defs[0];\n  if (margins.right == null) margins.right = defs[1];\n  if (margins.top == null) margins.top = defs[2];\n  if (margins.bottom == null) margins.bottom = defs[3];\n  if (margins.header == null) margins.header = defs[4];\n  if (margins.footer == null) margins.footer = defs[5];\n}\n\nfunction get_cell_style(styles\n/*:Array<any>*/\n, cell\n/*:Cell*/\n, opts) {\n  var z = opts.revssf[cell.z != null ? cell.z : \"General\"];\n  var i = 0x3c,\n      len = styles.length;\n\n  if (z == null && opts.ssf) {\n    for (; i < 0x188; ++i) {\n      if (opts.ssf[i] == null) {\n        SSF_load(cell.z, i); // $FlowIgnore\n\n        opts.ssf[i] = cell.z;\n        opts.revssf[cell.z] = z = i;\n        break;\n      }\n    }\n  }\n\n  for (i = 0; i != len; ++i) {\n    if (styles[i].numFmtId === z) return i;\n  }\n\n  styles[len] = {\n    numFmtId: z,\n    fontId: 0,\n    fillId: 0,\n    borderId: 0,\n    xfId: 0,\n    applyNumberFormat: 1\n  };\n  return len;\n}\n\nfunction safe_format(p\n/*:Cell*/\n, fmtid\n/*:number*/\n, fillid\n/*:?number*/\n, opts, themes, styles) {\n  try {\n    if (opts.cellNF) p.z = table_fmt[fmtid];\n  } catch (e) {\n    if (opts.WTF) throw e;\n  }\n\n  if (p.t === 'z' && !opts.cellStyles) return;\n  if (p.t === 'd' && typeof p.v === 'string') p.v = parseDate(p.v);\n  if ((!opts || opts.cellText !== false) && p.t !== 'z') try {\n    if (table_fmt[fmtid] == null) SSF_load(SSFImplicit[fmtid] || \"General\", fmtid);\n    if (p.t === 'e') p.w = p.w || BErr[p.v];else if (fmtid === 0) {\n      if (p.t === 'n') {\n        if ((p.v | 0) === p.v) p.w = p.v.toString(10);else p.w = SSF_general_num(p.v);\n      } else if (p.t === 'd') {\n        var dd = datenum(p.v);\n        if ((dd | 0) === dd) p.w = dd.toString(10);else p.w = SSF_general_num(dd);\n      } else if (p.v === undefined) return \"\";else p.w = SSF_general(p.v, _ssfopts);\n    } else if (p.t === 'd') p.w = SSF_format(fmtid, datenum(p.v), _ssfopts);else p.w = SSF_format(fmtid, p.v, _ssfopts);\n  } catch (e) {\n    if (opts.WTF) throw e;\n  }\n  if (!opts.cellStyles) return;\n  if (fillid != null) try {\n    p.s = styles.Fills[fillid];\n\n    if (p.s.fgColor && p.s.fgColor.theme && !p.s.fgColor.rgb) {\n      p.s.fgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.fgColor.theme].rgb, p.s.fgColor.tint || 0);\n      if (opts.WTF) p.s.fgColor.raw_rgb = themes.themeElements.clrScheme[p.s.fgColor.theme].rgb;\n    }\n\n    if (p.s.bgColor && p.s.bgColor.theme) {\n      p.s.bgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.bgColor.theme].rgb, p.s.bgColor.tint || 0);\n      if (opts.WTF) p.s.bgColor.raw_rgb = themes.themeElements.clrScheme[p.s.bgColor.theme].rgb;\n    }\n  } catch (e) {\n    if (opts.WTF && styles.Fills) throw e;\n  }\n}\n\nfunction check_ws(ws\n/*:Worksheet*/\n, sname\n/*:string*/\n, i\n/*:number*/\n) {\n  if (ws && ws['!ref']) {\n    var range = safe_decode_range(ws['!ref']);\n    if (range.e.c < range.s.c || range.e.r < range.s.r) throw new Error(\"Bad range (\" + i + \"): \" + ws['!ref']);\n  }\n}\n\nfunction parse_ws_xml_dim(ws\n/*:Worksheet*/\n, s\n/*:string*/\n) {\n  var d = safe_decode_range(s);\n  if (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}\n\nvar mergecregex = /<(?:\\w:)?mergeCell ref=\"[A-Z0-9:]+\"\\s*[\\/]?>/g;\nvar sheetdataregex = /<(?:\\w+:)?sheetData[^>]*>([\\s\\S]*)<\\/(?:\\w+:)?sheetData>/;\nvar hlinkregex = /<(?:\\w:)?hyperlink [^>]*>/mg;\nvar dimregex = /\"(\\w*:\\w*)\"/;\nvar colregex = /<(?:\\w:)?col\\b[^>]*[\\/]?>/g;\nvar afregex = /<(?:\\w:)?autoFilter[^>]*([\\/]|>([\\s\\S]*)<\\/(?:\\w:)?autoFilter)>/g;\nvar marginregex = /<(?:\\w:)?pageMargins[^>]*\\/>/g;\nvar sheetprregex = /<(?:\\w:)?sheetPr\\b(?:[^>a-z][^>]*)?\\/>/;\nvar sheetprregex2 = /<(?:\\w:)?sheetPr[^>]*(?:[\\/]|>([\\s\\S]*)<\\/(?:\\w:)?sheetPr)>/;\nvar svsregex = /<(?:\\w:)?sheetViews[^>]*(?:[\\/]|>([\\s\\S]*)<\\/(?:\\w:)?sheetViews)>/;\n/* 18.3 Worksheets */\n\nfunction parse_ws_xml(data\n/*:?string*/\n, opts, idx\n/*:number*/\n, rels, wb\n/*:WBWBProps*/\n, themes, styles)\n/*:Worksheet*/\n{\n  if (!data) return data;\n  if (!rels) rels = {\n    '!id': {}\n  };\n  if (DENSE != null && opts.dense == null) opts.dense = DENSE;\n  /* 18.3.1.99 worksheet CT_Worksheet */\n\n  var s = opts.dense ? []\n  /*:any*/\n  : {}\n  /*:any*/\n  ;\n  var refguess\n  /*:Range*/\n  = {\n    s: {\n      r: 2000000,\n      c: 2000000\n    },\n    e: {\n      r: 0,\n      c: 0\n    }\n  }\n  /*:any*/\n  ;\n  var data1 = \"\",\n      data2 = \"\";\n  var mtch\n  /*:?any*/\n  = data.match(sheetdataregex);\n\n  if (mtch) {\n    data1 = data.slice(0, mtch.index);\n    data2 = data.slice(mtch.index + mtch[0].length);\n  } else data1 = data2 = data;\n  /* 18.3.1.82 sheetPr CT_SheetPr */\n\n\n  var sheetPr = data1.match(sheetprregex);\n  if (sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);else if (sheetPr = data1.match(sheetprregex2)) parse_ws_xml_sheetpr2(sheetPr[0], sheetPr[1] || \"\", s, wb, idx, styles, themes);\n  /* 18.3.1.35 dimension CT_SheetDimension */\n\n  var ridx = (data1.match(/<(?:\\w*:)?dimension/) || {\n    index: -1\n  }).index;\n\n  if (ridx > 0) {\n    var ref = data1.slice(ridx, ridx + 50).match(dimregex);\n    if (ref) parse_ws_xml_dim(s, ref[1]);\n  }\n  /* 18.3.1.88 sheetViews CT_SheetViews */\n\n\n  var svs = data1.match(svsregex);\n  if (svs && svs[1]) parse_ws_xml_sheetviews(svs[1], wb);\n  /* 18.3.1.17 cols CT_Cols */\n\n  var columns\n  /*:Array<ColInfo>*/\n  = [];\n\n  if (opts.cellStyles) {\n    /* 18.3.1.13 col CT_Col */\n    var cols = data1.match(colregex);\n    if (cols) parse_ws_xml_cols(columns, cols);\n  }\n  /* 18.3.1.80 sheetData CT_SheetData ? */\n\n\n  if (mtch) parse_ws_xml_data(mtch[1], s, opts, refguess, themes, styles);\n  /* 18.3.1.2  autoFilter CT_AutoFilter */\n\n  var afilter = data2.match(afregex);\n  if (afilter) s['!autofilter'] = parse_ws_xml_autofilter(afilter[0]);\n  /* 18.3.1.55 mergeCells CT_MergeCells */\n\n  var merges\n  /*:Array<Range>*/\n  = [];\n\n  var _merge = data2.match(mergecregex);\n\n  if (_merge) for (ridx = 0; ridx != _merge.length; ++ridx) {\n    merges[ridx] = safe_decode_range(_merge[ridx].slice(_merge[ridx].indexOf(\"\\\"\") + 1));\n  }\n  /* 18.3.1.48 hyperlinks CT_Hyperlinks */\n\n  var hlink = data2.match(hlinkregex);\n  if (hlink) parse_ws_xml_hlinks(s, hlink, rels);\n  /* 18.3.1.62 pageMargins CT_PageMargins */\n\n  var margins = data2.match(marginregex);\n  if (margins) s['!margins'] = parse_ws_xml_margins(parsexmltag(margins[0]));\n  if (!s[\"!ref\"] && refguess.e.c >= refguess.s.c && refguess.e.r >= refguess.s.r) s[\"!ref\"] = encode_range(refguess);\n\n  if (opts.sheetRows > 0 && s[\"!ref\"]) {\n    var tmpref = safe_decode_range(s[\"!ref\"]);\n\n    if (opts.sheetRows <= +tmpref.e.r) {\n      tmpref.e.r = opts.sheetRows - 1;\n      if (tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\n      if (tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\n      if (tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\n      if (tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\n      s[\"!fullref\"] = s[\"!ref\"];\n      s[\"!ref\"] = encode_range(tmpref);\n    }\n  }\n\n  if (columns.length > 0) s[\"!cols\"] = columns;\n  if (merges.length > 0) s[\"!merges\"] = merges;\n  return s;\n}\n\nfunction write_ws_xml_merges(merges\n/*:Array<Range>*/\n)\n/*:string*/\n{\n  if (merges.length === 0) return \"\";\n  var o = '<mergeCells count=\"' + merges.length + '\">';\n\n  for (var i = 0; i != merges.length; ++i) {\n    o += '<mergeCell ref=\"' + encode_range(merges[i]) + '\"/>';\n  }\n\n  return o + '</mergeCells>';\n}\n/* 18.3.1.82-3 sheetPr CT_ChartsheetPr / CT_SheetPr */\n\n\nfunction parse_ws_xml_sheetpr(sheetPr\n/*:string*/\n, s, wb\n/*:WBWBProps*/\n, idx\n/*:number*/\n) {\n  var data = parsexmltag(sheetPr);\n  if (!wb.Sheets[idx]) wb.Sheets[idx] = {};\n  if (data.codeName) wb.Sheets[idx].CodeName = unescapexml(utf8read(data.codeName));\n}\n\nfunction parse_ws_xml_sheetpr2(sheetPr\n/*:string*/\n, body\n/*:string*/\n, s, wb\n/*:WBWBProps*/\n, idx\n/*:number*/\n) {\n  parse_ws_xml_sheetpr(sheetPr.slice(0, sheetPr.indexOf(\">\")), s, wb, idx);\n}\n\nfunction write_ws_xml_sheetpr(ws, wb, idx, opts, o) {\n  var needed = false;\n  var props = {},\n      payload = null;\n\n  if (opts.bookType !== 'xlsx' && wb.vbaraw) {\n    var cname = wb.SheetNames[idx];\n\n    try {\n      if (wb.Workbook) cname = wb.Workbook.Sheets[idx].CodeName || cname;\n    } catch (e) {}\n\n    needed = true;\n    props.codeName = utf8write(escapexml(cname));\n  }\n\n  if (ws && ws[\"!outline\"]) {\n    var outlineprops = {\n      summaryBelow: 1,\n      summaryRight: 1\n    };\n    if (ws[\"!outline\"].above) outlineprops.summaryBelow = 0;\n    if (ws[\"!outline\"].left) outlineprops.summaryRight = 0;\n    payload = (payload || \"\") + writextag('outlinePr', null, outlineprops);\n  }\n\n  if (!needed && !payload) return;\n  o[o.length] = writextag('sheetPr', payload, props);\n}\n/* 18.3.1.85 sheetProtection CT_SheetProtection */\n\n\nvar sheetprot_deffalse = [\"objects\", \"scenarios\", \"selectLockedCells\", \"selectUnlockedCells\"];\nvar sheetprot_deftrue = [\"formatColumns\", \"formatRows\", \"formatCells\", \"insertColumns\", \"insertRows\", \"insertHyperlinks\", \"deleteColumns\", \"deleteRows\", \"sort\", \"autoFilter\", \"pivotTables\"];\n\nfunction write_ws_xml_protection(sp)\n/*:string*/\n{\n  // algorithmName, hashValue, saltValue, spinCount\n  var o = {\n    sheet: 1\n  }\n  /*:any*/\n  ;\n  sheetprot_deffalse.forEach(function (n) {\n    if (sp[n] != null && sp[n]) o[n] = \"1\";\n  });\n  sheetprot_deftrue.forEach(function (n) {\n    if (sp[n] != null && !sp[n]) o[n] = \"0\";\n  });\n  /* TODO: algorithm */\n\n  if (sp.password) o.password = crypto_CreatePasswordVerifier_Method1(sp.password).toString(16).toUpperCase();\n  return writextag('sheetProtection', null, o);\n}\n\nfunction parse_ws_xml_hlinks(s, data\n/*:Array<string>*/\n, rels) {\n  var dense = Array.isArray(s);\n\n  for (var i = 0; i != data.length; ++i) {\n    var val = parsexmltag(utf8read(data[i]), true);\n    if (!val.ref) return;\n    var rel = ((rels || {})['!id'] || [])[val.id];\n\n    if (rel) {\n      val.Target = rel.Target;\n      if (val.location) val.Target += \"#\" + unescapexml(val.location);\n    } else {\n      val.Target = \"#\" + unescapexml(val.location);\n      rel = {\n        Target: val.Target,\n        TargetMode: 'Internal'\n      };\n    }\n\n    val.Rel = rel;\n\n    if (val.tooltip) {\n      val.Tooltip = val.tooltip;\n      delete val.tooltip;\n    }\n\n    var rng = safe_decode_range(val.ref);\n\n    for (var R = rng.s.r; R <= rng.e.r; ++R) {\n      for (var C = rng.s.c; C <= rng.e.c; ++C) {\n        var addr = encode_cell({\n          c: C,\n          r: R\n        });\n\n        if (dense) {\n          if (!s[R]) s[R] = [];\n          if (!s[R][C]) s[R][C] = {\n            t: \"z\",\n            v: undefined\n          };\n          s[R][C].l = val;\n        } else {\n          if (!s[addr]) s[addr] = {\n            t: \"z\",\n            v: undefined\n          };\n          s[addr].l = val;\n        }\n      }\n    }\n  }\n}\n\nfunction parse_ws_xml_margins(margin) {\n  var o = {};\n  [\"left\", \"right\", \"top\", \"bottom\", \"header\", \"footer\"].forEach(function (k) {\n    if (margin[k]) o[k] = parseFloat(margin[k]);\n  });\n  return o;\n}\n\nfunction write_ws_xml_margins(margin)\n/*:string*/\n{\n  default_margins(margin);\n  return writextag('pageMargins', null, margin);\n}\n\nfunction parse_ws_xml_cols(columns, cols) {\n  var seencol = false;\n\n  for (var coli = 0; coli != cols.length; ++coli) {\n    var coll = parsexmltag(cols[coli], true);\n    if (coll.hidden) coll.hidden = parsexmlbool(coll.hidden);\n    var colm = parseInt(coll.min, 10) - 1,\n        colM = parseInt(coll.max, 10) - 1;\n    if (coll.outlineLevel) coll.level = +coll.outlineLevel || 0;\n    delete coll.min;\n    delete coll.max;\n    coll.width = +coll.width;\n\n    if (!seencol && coll.width) {\n      seencol = true;\n      find_mdw_colw(coll.width);\n    }\n\n    process_col(coll);\n\n    while (colm <= colM) {\n      columns[colm++] = dup(coll);\n    }\n  }\n}\n\nfunction write_ws_xml_cols(ws, cols)\n/*:string*/\n{\n  var o = [\"<cols>\"],\n      col;\n\n  for (var i = 0; i != cols.length; ++i) {\n    if (!(col = cols[i])) continue;\n    o[o.length] = writextag('col', null, col_obj_w(i, col));\n  }\n\n  o[o.length] = \"</cols>\";\n  return o.join(\"\");\n}\n\nfunction parse_ws_xml_autofilter(data\n/*:string*/\n) {\n  var o = {\n    ref: (data.match(/ref=\"([^\"]*)\"/) || [])[1]\n  };\n  return o;\n}\n\nfunction write_ws_xml_autofilter(data, ws, wb, idx)\n/*:string*/\n{\n  var ref = typeof data.ref == \"string\" ? data.ref : encode_range(data.ref);\n  if (!wb.Workbook) wb.Workbook = {\n    Sheets: []\n  }\n  /*:any*/\n  ;\n  if (!wb.Workbook.Names) wb.Workbook.Names = [];\n  var names\n  /*: Array<any> */\n  = wb.Workbook.Names;\n  var range = decode_range(ref);\n\n  if (range.s.r == range.e.r) {\n    range.e.r = decode_range(ws[\"!ref\"]).e.r;\n    ref = encode_range(range);\n  }\n\n  for (var i = 0; i < names.length; ++i) {\n    var name = names[i];\n    if (name.Name != '_xlnm._FilterDatabase') continue;\n    if (name.Sheet != idx) continue;\n    name.Ref = \"'\" + wb.SheetNames[idx] + \"'!\" + ref;\n    break;\n  }\n\n  if (i == names.length) names.push({\n    Name: '_xlnm._FilterDatabase',\n    Sheet: idx,\n    Ref: \"'\" + wb.SheetNames[idx] + \"'!\" + ref\n  });\n  return writextag(\"autoFilter\", null, {\n    ref: ref\n  });\n}\n/* 18.3.1.88 sheetViews CT_SheetViews */\n\n/* 18.3.1.87 sheetView CT_SheetView */\n\n\nvar sviewregex = /<(?:\\w:)?sheetView(?:[^>a-z][^>]*)?\\/?>/;\n\nfunction parse_ws_xml_sheetviews(data, wb\n/*:WBWBProps*/\n) {\n  if (!wb.Views) wb.Views = [{}];\n  (data.match(sviewregex) || []).forEach(function (r\n  /*:string*/\n  , i\n  /*:number*/\n  ) {\n    var tag = parsexmltag(r); // $FlowIgnore\n\n    if (!wb.Views[i]) wb.Views[i] = {}; // $FlowIgnore\n\n    if (+tag.zoomScale) wb.Views[i].zoom = +tag.zoomScale; // $FlowIgnore\n\n    if (parsexmlbool(tag.rightToLeft)) wb.Views[i].RTL = true;\n  });\n}\n\nfunction write_ws_xml_sheetviews(ws, opts, idx, wb)\n/*:string*/\n{\n  var sview = {\n    workbookViewId: \"0\"\n  }\n  /*:any*/\n  ; // $FlowIgnore\n\n  if ((((wb || {}).Workbook || {}).Views || [])[0]) sview.rightToLeft = wb.Workbook.Views[0].RTL ? \"1\" : \"0\";\n  return writextag(\"sheetViews\", writextag(\"sheetView\", null, sview), {});\n}\n\nfunction write_ws_xml_cell(cell\n/*:Cell*/\n, ref, ws, opts\n/*::, idx, wb*/\n)\n/*:string*/\n{\n  if (cell.c) ws['!comments'].push([ref, cell.c]);\n  if (cell.v === undefined && typeof cell.f !== \"string\" || cell.t === 'z' && !cell.f) return \"\";\n  var vv = \"\";\n  var oldt = cell.t,\n      oldv = cell.v;\n  if (cell.t !== \"z\") switch (cell.t) {\n    case 'b':\n      vv = cell.v ? \"1\" : \"0\";\n      break;\n\n    case 'n':\n      vv = '' + cell.v;\n      break;\n\n    case 'e':\n      vv = BErr[cell.v];\n      break;\n\n    case 'd':\n      if (opts && opts.cellDates) vv = parseDate(cell.v, -1).toISOString();else {\n        cell = dup(cell);\n        cell.t = 'n';\n        vv = '' + (cell.v = datenum(parseDate(cell.v)));\n      }\n      if (typeof cell.z === 'undefined') cell.z = table_fmt[14];\n      break;\n\n    default:\n      vv = cell.v;\n      break;\n  }\n  var v = writetag('v', escapexml(vv)),\n      o = {\n    r: ref\n  }\n  /*:any*/\n  ;\n  /* TODO: cell style */\n\n  var os = get_cell_style(opts.cellXfs, cell, opts);\n  if (os !== 0) o.s = os;\n\n  switch (cell.t) {\n    case 'n':\n      break;\n\n    case 'd':\n      o.t = \"d\";\n      break;\n\n    case 'b':\n      o.t = \"b\";\n      break;\n\n    case 'e':\n      o.t = \"e\";\n      break;\n\n    case 'z':\n      break;\n\n    default:\n      if (cell.v == null) {\n        delete cell.t;\n        break;\n      }\n\n      if (cell.v.length > 32767) throw new Error(\"Text length must not exceed 32767 characters\");\n\n      if (opts && opts.bookSST) {\n        v = writetag('v', '' + get_sst_id(opts.Strings, cell.v, opts.revStrings));\n        o.t = \"s\";\n        break;\n      }\n\n      o.t = \"str\";\n      break;\n  }\n\n  if (cell.t != oldt) {\n    cell.t = oldt;\n    cell.v = oldv;\n  }\n\n  if (typeof cell.f == \"string\" && cell.f) {\n    var ff = cell.F && cell.F.slice(0, ref.length) == ref ? {\n      t: \"array\",\n      ref: cell.F\n    } : null;\n    v = writextag('f', escapexml(cell.f), ff) + (cell.v != null ? v : \"\");\n  }\n\n  if (cell.l) ws['!links'].push([ref, cell.l]);\n  if (cell.D) o.cm = 1;\n  return writextag('c', v, o);\n}\n\nvar parse_ws_xml_data = /*#__PURE__*/function () {\n  var cellregex = /<(?:\\w+:)?c[ \\/>]/,\n      rowregex = /<\\/(?:\\w+:)?row>/;\n  var rregex = /r=[\"']([^\"']*)[\"']/,\n      isregex = /<(?:\\w+:)?is>([\\S\\s]*?)<\\/(?:\\w+:)?is>/;\n  var refregex = /ref=[\"']([^\"']*)[\"']/;\n  var match_v = matchtag(\"v\"),\n      match_f = matchtag(\"f\");\n  return function parse_ws_xml_data(sdata\n  /*:string*/\n  , s, opts, guess\n  /*:Range*/\n  , themes, styles) {\n    var ri = 0,\n        x = \"\",\n        cells\n    /*:Array<string>*/\n    = [],\n        cref\n    /*:?Array<string>*/\n    = [],\n        idx = 0,\n        i = 0,\n        cc = 0,\n        d = \"\",\n        p\n    /*:any*/\n    ;\n    var tag,\n        tagr = 0,\n        tagc = 0;\n    var sstr, ftag;\n    var fmtid = 0,\n        fillid = 0;\n    var do_format = Array.isArray(styles.CellXf),\n        cf;\n    var arrayf\n    /*:Array<[Range, string]>*/\n    = [];\n    var sharedf = [];\n    var dense = Array.isArray(s);\n    var rows\n    /*:Array<RowInfo>*/\n    = [],\n        rowobj = {},\n        rowrite = false;\n    var sheetStubs = !!opts.sheetStubs;\n\n    for (var marr = sdata.split(rowregex), mt = 0, marrlen = marr.length; mt != marrlen; ++mt) {\n      x = marr[mt].trim();\n      var xlen = x.length;\n      if (xlen === 0) continue;\n      /* 18.3.1.73 row CT_Row */\n\n      var rstarti = 0;\n\n      outa: for (ri = 0; ri < xlen; ++ri) {\n        switch (\n        /*x.charCodeAt(ri)*/\n        x[ri]) {\n          case \">\"\n          /*62*/\n          :\n            if (\n            /*x.charCodeAt(ri-1) != 47*/\n            x[ri - 1] != \"/\") {\n              ++ri;\n              break outa;\n            }\n\n            if (opts && opts.cellStyles) {\n              // TODO: avoid duplication\n              tag = parsexmltag(x.slice(rstarti, ri), true);\n              tagr = tag.r != null ? parseInt(tag.r, 10) : tagr + 1;\n              tagc = -1;\n              if (opts.sheetRows && opts.sheetRows < tagr) continue;\n              rowobj = {};\n              rowrite = false;\n\n              if (tag.ht) {\n                rowrite = true;\n                rowobj.hpt = parseFloat(tag.ht);\n                rowobj.hpx = pt2px(rowobj.hpt);\n              }\n\n              if (tag.hidden == \"1\") {\n                rowrite = true;\n                rowobj.hidden = true;\n              }\n\n              if (tag.outlineLevel != null) {\n                rowrite = true;\n                rowobj.level = +tag.outlineLevel;\n              }\n\n              if (rowrite) rows[tagr - 1] = rowobj;\n            }\n\n            break;\n\n          case \"<\"\n          /*60*/\n          :\n            rstarti = ri;\n            break;\n        }\n      }\n\n      if (rstarti >= ri) break;\n      tag = parsexmltag(x.slice(rstarti, ri), true);\n      tagr = tag.r != null ? parseInt(tag.r, 10) : tagr + 1;\n      tagc = -1;\n      if (opts.sheetRows && opts.sheetRows < tagr) continue;\n      if (guess.s.r > tagr - 1) guess.s.r = tagr - 1;\n      if (guess.e.r < tagr - 1) guess.e.r = tagr - 1;\n\n      if (opts && opts.cellStyles) {\n        rowobj = {};\n        rowrite = false;\n\n        if (tag.ht) {\n          rowrite = true;\n          rowobj.hpt = parseFloat(tag.ht);\n          rowobj.hpx = pt2px(rowobj.hpt);\n        }\n\n        if (tag.hidden == \"1\") {\n          rowrite = true;\n          rowobj.hidden = true;\n        }\n\n        if (tag.outlineLevel != null) {\n          rowrite = true;\n          rowobj.level = +tag.outlineLevel;\n        }\n\n        if (rowrite) rows[tagr - 1] = rowobj;\n      }\n      /* 18.3.1.4 c CT_Cell */\n\n\n      cells = x.slice(ri).split(cellregex);\n\n      for (var rslice = 0; rslice != cells.length; ++rslice) {\n        if (cells[rslice].trim().charAt(0) != \"<\") break;\n      }\n\n      cells = cells.slice(rslice);\n\n      for (ri = 0; ri != cells.length; ++ri) {\n        x = cells[ri].trim();\n        if (x.length === 0) continue;\n        cref = x.match(rregex);\n        idx = ri;\n        i = 0;\n        cc = 0;\n        x = \"<c \" + (x.slice(0, 1) == \"<\" ? \">\" : \"\") + x;\n\n        if (cref != null && cref.length === 2) {\n          idx = 0;\n          d = cref[1];\n\n          for (i = 0; i != d.length; ++i) {\n            if ((cc = d.charCodeAt(i) - 64) < 1 || cc > 26) break;\n            idx = 26 * idx + cc;\n          }\n\n          --idx;\n          tagc = idx;\n        } else ++tagc;\n\n        for (i = 0; i != x.length; ++i) {\n          if (x.charCodeAt(i) === 62) break;\n        }\n\n        ++i;\n        tag = parsexmltag(x.slice(0, i), true);\n        if (!tag.r) tag.r = encode_cell({\n          r: tagr - 1,\n          c: tagc\n        });\n        d = x.slice(i);\n        p = {\n          t: \"\"\n        }\n        /*:any*/\n        ;\n        if ((cref = d.match(match_v)) != null &&\n        /*::cref != null && */\n        cref[1] !== '') p.v = unescapexml(cref[1]);\n\n        if (opts.cellFormula) {\n          if ((cref = d.match(match_f)) != null &&\n          /*::cref != null && */\n          cref[1] !== '') {\n            /* TODO: match against XLSXFutureFunctions */\n            p.f = unescapexml(utf8read(cref[1])).replace(/\\r\\n/g, \"\\n\");\n            if (!opts.xlfn) p.f = _xlfn(p.f);\n\n            if (\n            /*::cref != null && cref[0] != null && */\n            cref[0].indexOf('t=\"array\"') > -1) {\n              p.F = (d.match(refregex) || [])[1];\n              if (p.F.indexOf(\":\") > -1) arrayf.push([safe_decode_range(p.F), p.F]);\n            } else if (\n            /*::cref != null && cref[0] != null && */\n            cref[0].indexOf('t=\"shared\"') > -1) {\n              // TODO: parse formula\n              ftag = parsexmltag(cref[0]);\n\n              var ___f = unescapexml(utf8read(cref[1]));\n\n              if (!opts.xlfn) ___f = _xlfn(___f);\n              sharedf[parseInt(ftag.si, 10)] = [ftag, ___f, tag.r];\n            }\n          } else if (cref = d.match(/<f[^>]*\\/>/)) {\n            ftag = parsexmltag(cref[0]);\n            if (sharedf[ftag.si]) p.f = shift_formula_xlsx(sharedf[ftag.si][1], sharedf[ftag.si][2]\n            /*[0].ref*/\n            , tag.r);\n          }\n          /* TODO: factor out contains logic */\n\n\n          var _tag = decode_cell(tag.r);\n\n          for (i = 0; i < arrayf.length; ++i) {\n            if (_tag.r >= arrayf[i][0].s.r && _tag.r <= arrayf[i][0].e.r) if (_tag.c >= arrayf[i][0].s.c && _tag.c <= arrayf[i][0].e.c) p.F = arrayf[i][1];\n          }\n        }\n\n        if (tag.t == null && p.v === undefined) {\n          if (p.f || p.F) {\n            p.v = 0;\n            p.t = \"n\";\n          } else if (!sheetStubs) continue;else p.t = \"z\";\n        } else p.t = tag.t || \"n\";\n\n        if (guess.s.c > tagc) guess.s.c = tagc;\n        if (guess.e.c < tagc) guess.e.c = tagc;\n        /* 18.18.11 t ST_CellType */\n\n        switch (p.t) {\n          case 'n':\n            if (p.v == \"\" || p.v == null) {\n              if (!sheetStubs) continue;\n              p.t = 'z';\n            } else p.v = parseFloat(p.v);\n\n            break;\n\n          case 's':\n            if (typeof p.v == 'undefined') {\n              if (!sheetStubs) continue;\n              p.t = 'z';\n            } else {\n              sstr = strs[parseInt(p.v, 10)];\n              p.v = sstr.t;\n              p.r = sstr.r;\n              if (opts.cellHTML) p.h = sstr.h;\n            }\n\n            break;\n\n          case 'str':\n            p.t = \"s\";\n            p.v = p.v != null ? utf8read(p.v) : '';\n            if (opts.cellHTML) p.h = escapehtml(p.v);\n            break;\n\n          case 'inlineStr':\n            cref = d.match(isregex);\n            p.t = 's';\n\n            if (cref != null && (sstr = parse_si(cref[1]))) {\n              p.v = sstr.t;\n              if (opts.cellHTML) p.h = sstr.h;\n            } else p.v = \"\";\n\n            break;\n\n          case 'b':\n            p.v = parsexmlbool(p.v);\n            break;\n\n          case 'd':\n            if (opts.cellDates) p.v = parseDate(p.v, 1);else {\n              p.v = datenum(parseDate(p.v, 1));\n              p.t = 'n';\n            }\n            break;\n\n          /* error string in .w, number in .v */\n\n          case 'e':\n            if (!opts || opts.cellText !== false) p.w = p.v;\n            p.v = RBErr[p.v];\n            break;\n        }\n        /* formatting */\n\n\n        fmtid = fillid = 0;\n        cf = null;\n\n        if (do_format && tag.s !== undefined) {\n          cf = styles.CellXf[tag.s];\n\n          if (cf != null) {\n            if (cf.numFmtId != null) fmtid = cf.numFmtId;\n\n            if (opts.cellStyles) {\n              if (cf.fillId != null) fillid = cf.fillId;\n            }\n          }\n        }\n\n        safe_format(p, fmtid, fillid, opts, themes, styles);\n\n        if (opts.cellDates && do_format && p.t == 'n' && fmt_is_date(table_fmt[fmtid])) {\n          p.t = 'd';\n          p.v = numdate(p.v);\n        }\n\n        if (tag.cm && opts.xlmeta) {\n          var cm = (opts.xlmeta.Cell || [])[+tag.cm - 1];\n          if (cm && cm.type == 'XLDAPR') p.D = true;\n        }\n\n        if (dense) {\n          var _r = decode_cell(tag.r);\n\n          if (!s[_r.r]) s[_r.r] = [];\n          s[_r.r][_r.c] = p;\n        } else s[tag.r] = p;\n      }\n    }\n\n    if (rows.length > 0) s['!rows'] = rows;\n  };\n}();\n\nfunction write_ws_xml_data(ws\n/*:Worksheet*/\n, opts, idx\n/*:number*/\n, wb\n/*:Workbook*/\n\n/*::, rels*/\n)\n/*:string*/\n{\n  var o\n  /*:Array<string>*/\n  = [],\n      r\n  /*:Array<string>*/\n  = [],\n      range = safe_decode_range(ws['!ref']),\n      cell = \"\",\n      ref,\n      rr = \"\",\n      cols\n  /*:Array<string>*/\n  = [],\n      R = 0,\n      C = 0,\n      rows = ws['!rows'];\n  var dense = Array.isArray(ws);\n  var params = {\n    r: rr\n  }\n  /*:any*/\n  ,\n      row\n  /*:RowInfo*/\n  ,\n      height = -1;\n\n  for (C = range.s.c; C <= range.e.c; ++C) {\n    cols[C] = encode_col(C);\n  }\n\n  for (R = range.s.r; R <= range.e.r; ++R) {\n    r = [];\n    rr = encode_row(R);\n\n    for (C = range.s.c; C <= range.e.c; ++C) {\n      ref = cols[C] + rr;\n\n      var _cell = dense ? (ws[R] || [])[C] : ws[ref];\n\n      if (_cell === undefined) continue;\n      if ((cell = write_ws_xml_cell(_cell, ref, ws, opts, idx, wb)) != null) r.push(cell);\n    }\n\n    if (r.length > 0 || rows && rows[R]) {\n      params = {\n        r: rr\n      }\n      /*:any*/\n      ;\n\n      if (rows && rows[R]) {\n        row = rows[R];\n        if (row.hidden) params.hidden = 1;\n        height = -1;\n        if (row.hpx) height = px2pt(row.hpx);else if (row.hpt) height = row.hpt;\n\n        if (height > -1) {\n          params.ht = height;\n          params.customHeight = 1;\n        }\n\n        if (row.level) {\n          params.outlineLevel = row.level;\n        }\n      }\n\n      o[o.length] = writextag('row', r.join(\"\"), params);\n    }\n  }\n\n  if (rows) for (; R < rows.length; ++R) {\n    if (rows && rows[R]) {\n      params = {\n        r: R + 1\n      }\n      /*:any*/\n      ;\n      row = rows[R];\n      if (row.hidden) params.hidden = 1;\n      height = -1;\n      if (row.hpx) height = px2pt(row.hpx);else if (row.hpt) height = row.hpt;\n\n      if (height > -1) {\n        params.ht = height;\n        params.customHeight = 1;\n      }\n\n      if (row.level) {\n        params.outlineLevel = row.level;\n      }\n\n      o[o.length] = writextag('row', \"\", params);\n    }\n  }\n  return o.join(\"\");\n}\n\nfunction write_ws_xml(idx\n/*:number*/\n, opts, wb\n/*:Workbook*/\n, rels)\n/*:string*/\n{\n  var o = [XML_HEADER, writextag('worksheet', null, {\n    'xmlns': XMLNS_main[0],\n    'xmlns:r': XMLNS.r\n  })];\n  var s = wb.SheetNames[idx],\n      sidx = 0,\n      rdata = \"\";\n  var ws = wb.Sheets[s];\n  if (ws == null) ws = {};\n  var ref = ws['!ref'] || 'A1';\n  var range = safe_decode_range(ref);\n\n  if (range.e.c > 0x3FFF || range.e.r > 0xFFFFF) {\n    if (opts.WTF) throw new Error(\"Range \" + ref + \" exceeds format limit A1:XFD1048576\");\n    range.e.c = Math.min(range.e.c, 0x3FFF);\n    range.e.r = Math.min(range.e.c, 0xFFFFF);\n    ref = encode_range(range);\n  }\n\n  if (!rels) rels = {};\n  ws['!comments'] = [];\n  var _drawing = [];\n  write_ws_xml_sheetpr(ws, wb, idx, opts, o);\n  o[o.length] = writextag('dimension', null, {\n    'ref': ref\n  });\n  o[o.length] = write_ws_xml_sheetviews(ws, opts, idx, wb);\n  /* TODO: store in WB, process styles */\n\n  if (opts.sheetFormat) o[o.length] = writextag('sheetFormatPr', null, {\n    defaultRowHeight: opts.sheetFormat.defaultRowHeight || '16',\n    baseColWidth: opts.sheetFormat.baseColWidth || '10',\n    outlineLevelRow: opts.sheetFormat.outlineLevelRow || '7'\n  });\n  if (ws['!cols'] != null && ws['!cols'].length > 0) o[o.length] = write_ws_xml_cols(ws, ws['!cols']);\n  o[sidx = o.length] = '<sheetData/>';\n  ws['!links'] = [];\n\n  if (ws['!ref'] != null) {\n    rdata = write_ws_xml_data(ws, opts, idx, wb, rels);\n    if (rdata.length > 0) o[o.length] = rdata;\n  }\n\n  if (o.length > sidx + 1) {\n    o[o.length] = '</sheetData>';\n    o[sidx] = o[sidx].replace(\"/>\", \">\");\n  }\n  /* sheetCalcPr */\n\n\n  if (ws['!protect']) o[o.length] = write_ws_xml_protection(ws['!protect']);\n  /* protectedRanges */\n\n  /* scenarios */\n\n  if (ws['!autofilter'] != null) o[o.length] = write_ws_xml_autofilter(ws['!autofilter'], ws, wb, idx);\n  /* sortState */\n\n  /* dataConsolidate */\n\n  /* customSheetViews */\n\n  if (ws['!merges'] != null && ws['!merges'].length > 0) o[o.length] = write_ws_xml_merges(ws['!merges']);\n  /* phoneticPr */\n\n  /* conditionalFormatting */\n\n  /* dataValidations */\n\n  var relc = -1,\n      rel,\n      rId = -1;\n\n  if (\n  /*::(*/\n  ws['!links']\n  /*::||[])*/\n  .length > 0) {\n    o[o.length] = \"<hyperlinks>\";\n    /*::(*/\n\n    ws['!links']\n    /*::||[])*/\n    .forEach(function (l) {\n      if (!l[1].Target) return;\n      rel = {\n        \"ref\": l[0]\n      }\n      /*:any*/\n      ;\n\n      if (l[1].Target.charAt(0) != \"#\") {\n        rId = add_rels(rels, -1, escapexml(l[1].Target).replace(/#.*$/, \"\"), RELS.HLINK);\n        rel[\"r:id\"] = \"rId\" + rId;\n      }\n\n      if ((relc = l[1].Target.indexOf(\"#\")) > -1) rel.location = escapexml(l[1].Target.slice(relc + 1));\n      if (l[1].Tooltip) rel.tooltip = escapexml(l[1].Tooltip);\n      o[o.length] = writextag(\"hyperlink\", null, rel);\n    });\n    o[o.length] = \"</hyperlinks>\";\n  }\n\n  delete ws['!links'];\n  /* printOptions */\n\n  if (ws['!margins'] != null) o[o.length] = write_ws_xml_margins(ws['!margins']);\n  /* pageSetup */\n\n  /* headerFooter */\n\n  /* rowBreaks */\n\n  /* colBreaks */\n\n  /* customProperties */\n\n  /* cellWatches */\n\n  if (!opts || opts.ignoreEC || opts.ignoreEC == void 0) o[o.length] = writetag(\"ignoredErrors\", writextag(\"ignoredError\", null, {\n    numberStoredAsText: 1,\n    sqref: ref\n  }));\n  /* smartTags */\n\n  if (_drawing.length > 0) {\n    rId = add_rels(rels, -1, \"../drawings/drawing\" + (idx + 1) + \".xml\", RELS.DRAW);\n    o[o.length] = writextag(\"drawing\", null, {\n      \"r:id\": \"rId\" + rId\n    });\n    ws['!drawing'] = _drawing;\n  }\n\n  if (ws['!comments'].length > 0) {\n    rId = add_rels(rels, -1, \"../drawings/vmlDrawing\" + (idx + 1) + \".vml\", RELS.VML);\n    o[o.length] = writextag(\"legacyDrawing\", null, {\n      \"r:id\": \"rId\" + rId\n    });\n    ws['!legacy'] = rId;\n  }\n  /* legacyDrawingHF */\n\n  /* picture */\n\n  /* oleObjects */\n\n  /* controls */\n\n  /* webPublishItems */\n\n  /* tableParts */\n\n  /* extLst */\n\n\n  if (o.length > 1) {\n    o[o.length] = '</worksheet>';\n    o[1] = o[1].replace(\"/>\", \">\");\n  }\n\n  return o.join(\"\");\n}\n/* [MS-XLSB] 2.4.726 BrtRowHdr */\n\n\nfunction parse_BrtRowHdr(data, length) {\n  var z = {}\n  /*:any*/\n  ;\n  var tgt = data.l + length;\n  z.r = data.read_shift(4);\n  data.l += 4; // TODO: ixfe\n\n  var miyRw = data.read_shift(2);\n  data.l += 1; // TODO: top/bot padding\n\n  var flags = data.read_shift(1);\n  data.l = tgt;\n  if (flags & 0x07) z.level = flags & 0x07;\n  if (flags & 0x10) z.hidden = true;\n  if (flags & 0x20) z.hpt = miyRw / 20;\n  return z;\n}\n\nfunction write_BrtRowHdr(R\n/*:number*/\n, range, ws) {\n  var o = new_buf(17 + 8 * 16);\n  var row = (ws['!rows'] || [])[R] || {};\n  o.write_shift(4, R);\n  o.write_shift(4, 0);\n  /* TODO: ixfe */\n\n  var miyRw = 0x0140;\n  if (row.hpx) miyRw = px2pt(row.hpx) * 20;else if (row.hpt) miyRw = row.hpt * 20;\n  o.write_shift(2, miyRw);\n  o.write_shift(1, 0);\n  /* top/bot padding */\n\n  var flags = 0x0;\n  if (row.level) flags |= row.level;\n  if (row.hidden) flags |= 0x10;\n  if (row.hpx || row.hpt) flags |= 0x20;\n  o.write_shift(1, flags);\n  o.write_shift(1, 0);\n  /* phonetic guide */\n\n  /* [MS-XLSB] 2.5.8 BrtColSpan explains the mechanism */\n\n  var ncolspan = 0,\n      lcs = o.l;\n  o.l += 4;\n  var caddr = {\n    r: R,\n    c: 0\n  };\n\n  for (var i = 0; i < 16; ++i) {\n    if (range.s.c > i + 1 << 10 || range.e.c < i << 10) continue;\n    var first = -1,\n        last = -1;\n\n    for (var j = i << 10; j < i + 1 << 10; ++j) {\n      caddr.c = j;\n      var cell = Array.isArray(ws) ? (ws[caddr.r] || [])[caddr.c] : ws[encode_cell(caddr)];\n\n      if (cell) {\n        if (first < 0) first = j;\n        last = j;\n      }\n    }\n\n    if (first < 0) continue;\n    ++ncolspan;\n    o.write_shift(4, first);\n    o.write_shift(4, last);\n  }\n\n  var l = o.l;\n  o.l = lcs;\n  o.write_shift(4, ncolspan);\n  o.l = l;\n  return o.length > o.l ? o.slice(0, o.l) : o;\n}\n\nfunction write_row_header(ba, ws, range, R) {\n  var o = write_BrtRowHdr(R, range, ws);\n  if (o.length > 17 || (ws['!rows'] || [])[R]) write_record(ba, 0x0000\n  /* BrtRowHdr */\n  , o);\n}\n/* [MS-XLSB] 2.4.820 BrtWsDim */\n\n\nvar parse_BrtWsDim = parse_UncheckedRfX;\nvar write_BrtWsDim = write_UncheckedRfX;\n/* [MS-XLSB] 2.4.821 BrtWsFmtInfo */\n\nfunction\n  /*::data, length*/\nparse_BrtWsFmtInfo() {} //function write_BrtWsFmtInfo(ws, o) { }\n\n/* [MS-XLSB] 2.4.823 BrtWsProp */\n\n\nfunction parse_BrtWsProp(data, length) {\n  var z = {};\n  var f = data[data.l];\n  ++data.l;\n  z.above = !(f & 0x40);\n  z.left = !(f & 0x80);\n  /* TODO: pull flags */\n\n  data.l += 18;\n  z.name = parse_XLSBCodeName(data, length - 19);\n  return z;\n}\n\nfunction write_BrtWsProp(str, outl, o) {\n  if (o == null) o = new_buf(84 + 4 * str.length);\n  var f = 0xC0;\n\n  if (outl) {\n    if (outl.above) f &= ~0x40;\n    if (outl.left) f &= ~0x80;\n  }\n\n  o.write_shift(1, f);\n\n  for (var i = 1; i < 3; ++i) {\n    o.write_shift(1, 0);\n  }\n\n  write_BrtColor({\n    auto: 1\n  }, o);\n  o.write_shift(-4, -1);\n  o.write_shift(-4, -1);\n  write_XLSBCodeName(str, o);\n  return o.slice(0, o.l);\n}\n/* [MS-XLSB] 2.4.306 BrtCellBlank */\n\n\nfunction parse_BrtCellBlank(data) {\n  var cell = parse_XLSBCell(data);\n  return [cell];\n}\n\nfunction write_BrtCellBlank(cell, ncell, o) {\n  if (o == null) o = new_buf(8);\n  return write_XLSBCell(ncell, o);\n}\n\nfunction parse_BrtShortBlank(data) {\n  var cell = parse_XLSBShortCell(data);\n  return [cell];\n}\n\nfunction write_BrtShortBlank(cell, ncell, o) {\n  if (o == null) o = new_buf(4);\n  return write_XLSBShortCell(ncell, o);\n}\n/* [MS-XLSB] 2.4.307 BrtCellBool */\n\n\nfunction parse_BrtCellBool(data) {\n  var cell = parse_XLSBCell(data);\n  var fBool = data.read_shift(1);\n  return [cell, fBool, 'b'];\n}\n\nfunction write_BrtCellBool(cell, ncell, o) {\n  if (o == null) o = new_buf(9);\n  write_XLSBCell(ncell, o);\n  o.write_shift(1, cell.v ? 1 : 0);\n  return o;\n}\n\nfunction parse_BrtShortBool(data) {\n  var cell = parse_XLSBShortCell(data);\n  var fBool = data.read_shift(1);\n  return [cell, fBool, 'b'];\n}\n\nfunction write_BrtShortBool(cell, ncell, o) {\n  if (o == null) o = new_buf(5);\n  write_XLSBShortCell(ncell, o);\n  o.write_shift(1, cell.v ? 1 : 0);\n  return o;\n}\n/* [MS-XLSB] 2.4.308 BrtCellError */\n\n\nfunction parse_BrtCellError(data) {\n  var cell = parse_XLSBCell(data);\n  var bError = data.read_shift(1);\n  return [cell, bError, 'e'];\n}\n\nfunction write_BrtCellError(cell, ncell, o) {\n  if (o == null) o = new_buf(9);\n  write_XLSBCell(ncell, o);\n  o.write_shift(1, cell.v);\n  return o;\n}\n\nfunction parse_BrtShortError(data) {\n  var cell = parse_XLSBShortCell(data);\n  var bError = data.read_shift(1);\n  return [cell, bError, 'e'];\n}\n\nfunction write_BrtShortError(cell, ncell, o) {\n  if (o == null) o = new_buf(8);\n  write_XLSBShortCell(ncell, o);\n  o.write_shift(1, cell.v);\n  o.write_shift(2, 0);\n  o.write_shift(1, 0);\n  return o;\n}\n/* [MS-XLSB] 2.4.311 BrtCellIsst */\n\n\nfunction parse_BrtCellIsst(data) {\n  var cell = parse_XLSBCell(data);\n  var isst = data.read_shift(4);\n  return [cell, isst, 's'];\n}\n\nfunction write_BrtCellIsst(cell, ncell, o) {\n  if (o == null) o = new_buf(12);\n  write_XLSBCell(ncell, o);\n  o.write_shift(4, ncell.v);\n  return o;\n}\n\nfunction parse_BrtShortIsst(data) {\n  var cell = parse_XLSBShortCell(data);\n  var isst = data.read_shift(4);\n  return [cell, isst, 's'];\n}\n\nfunction write_BrtShortIsst(cell, ncell, o) {\n  if (o == null) o = new_buf(8);\n  write_XLSBShortCell(ncell, o);\n  o.write_shift(4, ncell.v);\n  return o;\n}\n/* [MS-XLSB] 2.4.313 BrtCellReal */\n\n\nfunction parse_BrtCellReal(data) {\n  var cell = parse_XLSBCell(data);\n  var value = parse_Xnum(data);\n  return [cell, value, 'n'];\n}\n\nfunction write_BrtCellReal(cell, ncell, o) {\n  if (o == null) o = new_buf(16);\n  write_XLSBCell(ncell, o);\n  write_Xnum(cell.v, o);\n  return o;\n}\n\nfunction parse_BrtShortReal(data) {\n  var cell = parse_XLSBShortCell(data);\n  var value = parse_Xnum(data);\n  return [cell, value, 'n'];\n}\n\nfunction write_BrtShortReal(cell, ncell, o) {\n  if (o == null) o = new_buf(12);\n  write_XLSBShortCell(ncell, o);\n  write_Xnum(cell.v, o);\n  return o;\n}\n/* [MS-XLSB] 2.4.314 BrtCellRk */\n\n\nfunction parse_BrtCellRk(data) {\n  var cell = parse_XLSBCell(data);\n  var value = parse_RkNumber(data);\n  return [cell, value, 'n'];\n}\n\nfunction write_BrtCellRk(cell, ncell, o) {\n  if (o == null) o = new_buf(12);\n  write_XLSBCell(ncell, o);\n  write_RkNumber(cell.v, o);\n  return o;\n}\n\nfunction parse_BrtShortRk(data) {\n  var cell = parse_XLSBShortCell(data);\n  var value = parse_RkNumber(data);\n  return [cell, value, 'n'];\n}\n\nfunction write_BrtShortRk(cell, ncell, o) {\n  if (o == null) o = new_buf(8);\n  write_XLSBShortCell(ncell, o);\n  write_RkNumber(cell.v, o);\n  return o;\n}\n/* [MS-XLSB] 2.4.323 BrtCellRString */\n\n\nfunction parse_BrtCellRString(data) {\n  var cell = parse_XLSBCell(data);\n  var value = parse_RichStr(data);\n  return [cell, value, 'is'];\n}\n/* [MS-XLSB] 2.4.317 BrtCellSt */\n\n\nfunction parse_BrtCellSt(data) {\n  var cell = parse_XLSBCell(data);\n  var value = parse_XLWideString(data);\n  return [cell, value, 'str'];\n}\n\nfunction write_BrtCellSt(cell, ncell, o) {\n  if (o == null) o = new_buf(12 + 4 * cell.v.length);\n  write_XLSBCell(ncell, o);\n  write_XLWideString(cell.v, o);\n  return o.length > o.l ? o.slice(0, o.l) : o;\n}\n\nfunction parse_BrtShortSt(data) {\n  var cell = parse_XLSBShortCell(data);\n  var value = parse_XLWideString(data);\n  return [cell, value, 'str'];\n}\n\nfunction write_BrtShortSt(cell, ncell, o) {\n  if (o == null) o = new_buf(8 + 4 * cell.v.length);\n  write_XLSBShortCell(ncell, o);\n  write_XLWideString(cell.v, o);\n  return o.length > o.l ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.4.653 BrtFmlaBool */\n\n\nfunction parse_BrtFmlaBool(data, length, opts) {\n  var end = data.l + length;\n  var cell = parse_XLSBCell(data);\n  cell.r = opts['!row'];\n  var value = data.read_shift(1);\n  var o = [cell, value, 'b'];\n\n  if (opts.cellFormula) {\n    data.l += 2;\n    var formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n    o[3] = stringify_formula(formula, null\n    /*range*/\n    , cell, opts.supbooks, opts);\n    /* TODO */\n  } else data.l = end;\n\n  return o;\n}\n/* [MS-XLSB] 2.4.654 BrtFmlaError */\n\n\nfunction parse_BrtFmlaError(data, length, opts) {\n  var end = data.l + length;\n  var cell = parse_XLSBCell(data);\n  cell.r = opts['!row'];\n  var value = data.read_shift(1);\n  var o = [cell, value, 'e'];\n\n  if (opts.cellFormula) {\n    data.l += 2;\n    var formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n    o[3] = stringify_formula(formula, null\n    /*range*/\n    , cell, opts.supbooks, opts);\n    /* TODO */\n  } else data.l = end;\n\n  return o;\n}\n/* [MS-XLSB] 2.4.655 BrtFmlaNum */\n\n\nfunction parse_BrtFmlaNum(data, length, opts) {\n  var end = data.l + length;\n  var cell = parse_XLSBCell(data);\n  cell.r = opts['!row'];\n  var value = parse_Xnum(data);\n  var o = [cell, value, 'n'];\n\n  if (opts.cellFormula) {\n    data.l += 2;\n    var formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n    o[3] = stringify_formula(formula, null\n    /*range*/\n    , cell, opts.supbooks, opts);\n    /* TODO */\n  } else data.l = end;\n\n  return o;\n}\n/* [MS-XLSB] 2.4.656 BrtFmlaString */\n\n\nfunction parse_BrtFmlaString(data, length, opts) {\n  var end = data.l + length;\n  var cell = parse_XLSBCell(data);\n  cell.r = opts['!row'];\n  var value = parse_XLWideString(data);\n  var o = [cell, value, 'str'];\n\n  if (opts.cellFormula) {\n    data.l += 2;\n    var formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n    o[3] = stringify_formula(formula, null\n    /*range*/\n    , cell, opts.supbooks, opts);\n    /* TODO */\n  } else data.l = end;\n\n  return o;\n}\n/* [MS-XLSB] 2.4.682 BrtMergeCell */\n\n\nvar parse_BrtMergeCell = parse_UncheckedRfX;\nvar write_BrtMergeCell = write_UncheckedRfX;\n/* [MS-XLSB] 2.4.107 BrtBeginMergeCells */\n\nfunction write_BrtBeginMergeCells(cnt, o) {\n  if (o == null) o = new_buf(4);\n  o.write_shift(4, cnt);\n  return o;\n}\n/* [MS-XLSB] 2.4.662 BrtHLink */\n\n\nfunction parse_BrtHLink(data, length\n/*::, opts*/\n) {\n  var end = data.l + length;\n  var rfx = parse_UncheckedRfX(data, 16);\n  var relId = parse_XLNullableWideString(data);\n  var loc = parse_XLWideString(data);\n  var tooltip = parse_XLWideString(data);\n  var display = parse_XLWideString(data);\n  data.l = end;\n  var o = {\n    rfx: rfx,\n    relId: relId,\n    loc: loc,\n    display: display\n  }\n  /*:any*/\n  ;\n  if (tooltip) o.Tooltip = tooltip;\n  return o;\n}\n\nfunction write_BrtHLink(l, rId) {\n  var o = new_buf(50 + 4 * (l[1].Target.length + (l[1].Tooltip || \"\").length));\n  write_UncheckedRfX({\n    s: decode_cell(l[0]),\n    e: decode_cell(l[0])\n  }, o);\n  write_RelID(\"rId\" + rId, o);\n  var locidx = l[1].Target.indexOf(\"#\");\n  var loc = locidx == -1 ? \"\" : l[1].Target.slice(locidx + 1);\n  write_XLWideString(loc || \"\", o);\n  write_XLWideString(l[1].Tooltip || \"\", o);\n  write_XLWideString(\"\", o);\n  return o.slice(0, o.l);\n}\n/* [MS-XLSB] 2.4.692 BrtPane */\n\n\nfunction\n  /*data, length, opts*/\nparse_BrtPane() {}\n/* [MS-XLSB] 2.4.6 BrtArrFmla */\n\n\nfunction parse_BrtArrFmla(data, length, opts) {\n  var end = data.l + length;\n  var rfx = parse_RfX(data, 16);\n  var fAlwaysCalc = data.read_shift(1);\n  var o = [rfx];\n  o[2] = fAlwaysCalc;\n\n  if (opts.cellFormula) {\n    var formula = parse_XLSBArrayParsedFormula(data, end - data.l, opts);\n    o[1] = formula;\n  } else data.l = end;\n\n  return o;\n}\n/* [MS-XLSB] 2.4.750 BrtShrFmla */\n\n\nfunction parse_BrtShrFmla(data, length, opts) {\n  var end = data.l + length;\n  var rfx = parse_UncheckedRfX(data, 16);\n  var o = [rfx];\n\n  if (opts.cellFormula) {\n    var formula = parse_XLSBSharedParsedFormula(data, end - data.l, opts);\n    o[1] = formula;\n    data.l = end;\n  } else data.l = end;\n\n  return o;\n}\n/* [MS-XLSB] 2.4.323 BrtColInfo */\n\n/* TODO: once XLS ColInfo is set, combine the functions */\n\n\nfunction write_BrtColInfo(C\n/*:number*/\n, col, o) {\n  if (o == null) o = new_buf(18);\n  var p = col_obj_w(C, col);\n  o.write_shift(-4, C);\n  o.write_shift(-4, C);\n  o.write_shift(4, (p.width || 10) * 256);\n  o.write_shift(4, 0\n  /*ixfe*/\n  ); // style\n\n  var flags = 0;\n  if (col.hidden) flags |= 0x01;\n  if (typeof p.width == 'number') flags |= 0x02;\n  if (col.level) flags |= col.level << 8;\n  o.write_shift(2, flags); // bit flag\n\n  return o;\n}\n/* [MS-XLSB] 2.4.678 BrtMargins */\n\n\nvar BrtMarginKeys = [\"left\", \"right\", \"top\", \"bottom\", \"header\", \"footer\"];\n\nfunction parse_BrtMargins(data\n/*::, length, opts*/\n)\n/*:Margins*/\n{\n  var margins = {}\n  /*:any*/\n  ;\n  BrtMarginKeys.forEach(function (k) {\n    margins[k] = parse_Xnum(data, 8);\n  });\n  return margins;\n}\n\nfunction write_BrtMargins(margins\n/*:Margins*/\n, o) {\n  if (o == null) o = new_buf(6 * 8);\n  default_margins(margins);\n  BrtMarginKeys.forEach(function (k) {\n    write_Xnum(margins\n    /*:any*/\n    [k], o);\n  });\n  return o;\n}\n/* [MS-XLSB] 2.4.299 BrtBeginWsView */\n\n\nfunction parse_BrtBeginWsView(data\n/*::, length, opts*/\n) {\n  var f = data.read_shift(2);\n  data.l += 28;\n  return {\n    RTL: f & 0x20\n  };\n}\n\nfunction write_BrtBeginWsView(ws, Workbook, o) {\n  if (o == null) o = new_buf(30);\n  var f = 0x39c;\n  if ((((Workbook || {}).Views || [])[0] || {}).RTL) f |= 0x20;\n  o.write_shift(2, f); // bit flag\n\n  o.write_shift(4, 0);\n  o.write_shift(4, 0); // view first row\n\n  o.write_shift(4, 0); // view first col\n\n  o.write_shift(1, 0); // gridline color ICV\n\n  o.write_shift(1, 0);\n  o.write_shift(2, 0);\n  o.write_shift(2, 100); // zoom scale\n\n  o.write_shift(2, 0);\n  o.write_shift(2, 0);\n  o.write_shift(2, 0);\n  o.write_shift(4, 0); // workbook view id\n\n  return o;\n}\n/* [MS-XLSB] 2.4.309 BrtCellIgnoreEC */\n\n\nfunction write_BrtCellIgnoreEC(ref) {\n  var o = new_buf(24);\n  o.write_shift(4, 4);\n  o.write_shift(4, 1);\n  write_UncheckedRfX(ref, o);\n  return o;\n}\n/* [MS-XLSB] 2.4.748 BrtSheetProtection */\n\n\nfunction write_BrtSheetProtection(sp, o) {\n  if (o == null) o = new_buf(16 * 4 + 2);\n  o.write_shift(2, sp.password ? crypto_CreatePasswordVerifier_Method1(sp.password) : 0);\n  o.write_shift(4, 1); // this record should not be written if no protection\n\n  [[\"objects\", false], // fObjects\n  [\"scenarios\", false], // fScenarios\n  [\"formatCells\", true], // fFormatCells\n  [\"formatColumns\", true], // fFormatColumns\n  [\"formatRows\", true], // fFormatRows\n  [\"insertColumns\", true], // fInsertColumns\n  [\"insertRows\", true], // fInsertRows\n  [\"insertHyperlinks\", true], // fInsertHyperlinks\n  [\"deleteColumns\", true], // fDeleteColumns\n  [\"deleteRows\", true], // fDeleteRows\n  [\"selectLockedCells\", false], // fSelLockedCells\n  [\"sort\", true], // fSort\n  [\"autoFilter\", true], // fAutoFilter\n  [\"pivotTables\", true], // fPivotTables\n  [\"selectUnlockedCells\", false] // fSelUnlockedCells\n  ].forEach(function (n) {\n    /*:: if(o == null) throw \"unreachable\"; */\n    if (n[1]) o.write_shift(4, sp[n[0]] != null && !sp[n[0]] ? 1 : 0);else o.write_shift(4, sp[n[0]] != null && sp[n[0]] ? 0 : 1);\n  });\n  return o;\n}\n\nfunction\n  /*data, length, opts*/\nparse_BrtDVal() {}\n\nfunction\n  /*data, length, opts*/\nparse_BrtDVal14() {}\n/* [MS-XLSB] 2.1.7.61 Worksheet */\n\n\nfunction parse_ws_bin(data, _opts, idx, rels, wb\n/*:WBWBProps*/\n, themes, styles)\n/*:Worksheet*/\n{\n  if (!data) return data;\n  var opts = _opts || {};\n  if (!rels) rels = {\n    '!id': {}\n  };\n  if (DENSE != null && opts.dense == null) opts.dense = DENSE;\n  var s\n  /*:Worksheet*/\n  = opts.dense ? [] : {};\n  var ref;\n  var refguess = {\n    s: {\n      r: 2000000,\n      c: 2000000\n    },\n    e: {\n      r: 0,\n      c: 0\n    }\n  };\n  var state\n  /*:Array<string>*/\n  = [];\n  var pass = false,\n      end = false;\n  var row, p, cf, R, C, addr, sstr, rr, cell\n  /*:Cell*/\n  ;\n  var merges\n  /*:Array<Range>*/\n  = [];\n  opts.biff = 12;\n  opts['!row'] = 0;\n  var ai = 0,\n      af = false;\n  var arrayf\n  /*:Array<[Range, string]>*/\n  = [];\n  var sharedf = {};\n  var supbooks = opts.supbooks ||\n  /*::(*/\n  wb\n  /*:: :any)*/\n  .supbooks || [[]]\n  /*:any*/\n  ;\n  supbooks.sharedf = sharedf;\n  supbooks.arrayf = arrayf;\n  supbooks.SheetNames = wb.SheetNames || wb.Sheets.map(function (x) {\n    return x.name;\n  });\n\n  if (!opts.supbooks) {\n    opts.supbooks = supbooks;\n    if (wb.Names) for (var i = 0; i < wb.Names.length; ++i) {\n      supbooks[0][i + 1] = wb.Names[i];\n    }\n  }\n\n  var colinfo\n  /*:Array<ColInfo>*/\n  = [],\n      rowinfo\n  /*:Array<RowInfo>*/\n  = [];\n  var seencol = false;\n  XLSBRecordEnum[0x0010] = {\n    n: \"BrtShortReal\",\n    f: parse_BrtShortReal\n  };\n  var cm, vm;\n  recordhopper(data, function ws_parse(val, RR, RT) {\n    if (end) return;\n\n    switch (RT) {\n      case 0x0094:\n        /* 'BrtWsDim' */\n        ref = val;\n        break;\n\n      case 0x0000:\n        /* 'BrtRowHdr' */\n        row = val;\n        if (opts.sheetRows && opts.sheetRows <= row.r) end = true;\n        rr = encode_row(R = row.r);\n        opts['!row'] = row.r;\n\n        if (val.hidden || val.hpt || val.level != null) {\n          if (val.hpt) val.hpx = pt2px(val.hpt);\n          rowinfo[val.r] = val;\n        }\n\n        break;\n\n      case 0x0002:\n      /* 'BrtCellRk' */\n\n      case 0x0003:\n      /* 'BrtCellError' */\n\n      case 0x0004:\n      /* 'BrtCellBool' */\n\n      case 0x0005:\n      /* 'BrtCellReal' */\n\n      case 0x0006:\n      /* 'BrtCellSt' */\n\n      case 0x0007:\n      /* 'BrtCellIsst' */\n\n      case 0x0008:\n      /* 'BrtFmlaString' */\n\n      case 0x0009:\n      /* 'BrtFmlaNum' */\n\n      case 0x000A:\n      /* 'BrtFmlaBool' */\n\n      case 0x000B:\n      /* 'BrtFmlaError' */\n\n      case 0x000D:\n      /* 'BrtShortRk' */\n\n      case 0x000E:\n      /* 'BrtShortError' */\n\n      case 0x000F:\n      /* 'BrtShortBool' */\n\n      case 0x0010:\n      /* 'BrtShortReal' */\n\n      case 0x0011:\n      /* 'BrtShortSt' */\n\n      case 0x0012:\n      /* 'BrtShortIsst' */\n\n      case 0x003E:\n        /* 'BrtCellRString' */\n        p = {\n          t: val[2]\n        }\n        /*:any*/\n        ;\n\n        switch (val[2]) {\n          case 'n':\n            p.v = val[1];\n            break;\n\n          case 's':\n            sstr = strs[val[1]];\n            p.v = sstr.t;\n            p.r = sstr.r;\n            break;\n\n          case 'b':\n            p.v = val[1] ? true : false;\n            break;\n\n          case 'e':\n            p.v = val[1];\n            if (opts.cellText !== false) p.w = BErr[p.v];\n            break;\n\n          case 'str':\n            p.t = 's';\n            p.v = val[1];\n            break;\n\n          case 'is':\n            p.t = 's';\n            p.v = val[1].t;\n            break;\n        }\n\n        if (cf = styles.CellXf[val[0].iStyleRef]) safe_format(p, cf.numFmtId, null, opts, themes, styles);\n        C = val[0].c == -1 ? C + 1 : val[0].c;\n\n        if (opts.dense) {\n          if (!s[R]) s[R] = [];\n          s[R][C] = p;\n        } else s[encode_col(C) + rr] = p;\n\n        if (opts.cellFormula) {\n          af = false;\n\n          for (ai = 0; ai < arrayf.length; ++ai) {\n            var aii = arrayf[ai];\n            if (row.r >= aii[0].s.r && row.r <= aii[0].e.r) if (C >= aii[0].s.c && C <= aii[0].e.c) {\n              p.F = encode_range(aii[0]);\n              af = true;\n            }\n          }\n\n          if (!af && val.length > 3) p.f = val[3];\n        }\n\n        if (refguess.s.r > row.r) refguess.s.r = row.r;\n        if (refguess.s.c > C) refguess.s.c = C;\n        if (refguess.e.r < row.r) refguess.e.r = row.r;\n        if (refguess.e.c < C) refguess.e.c = C;\n\n        if (opts.cellDates && cf && p.t == 'n' && fmt_is_date(table_fmt[cf.numFmtId])) {\n          var _d = SSF_parse_date_code(p.v);\n\n          if (_d) {\n            p.t = 'd';\n            p.v = new Date(_d.y, _d.m - 1, _d.d, _d.H, _d.M, _d.S, _d.u);\n          }\n        }\n\n        if (cm) {\n          if (cm.type == 'XLDAPR') p.D = true;\n          cm = void 0;\n        }\n\n        if (vm) vm = void 0;\n        break;\n\n      case 0x0001:\n      /* 'BrtCellBlank' */\n\n      case 0x000C:\n        /* 'BrtShortBlank' */\n        if (!opts.sheetStubs || pass) break;\n        p = {\n          t: 'z',\n          v: void 0\n        }\n        /*:any*/\n        ;\n        C = val[0].c == -1 ? C + 1 : val[0].c;\n\n        if (opts.dense) {\n          if (!s[R]) s[R] = [];\n          s[R][C] = p;\n        } else s[encode_col(C) + rr] = p;\n\n        if (refguess.s.r > row.r) refguess.s.r = row.r;\n        if (refguess.s.c > C) refguess.s.c = C;\n        if (refguess.e.r < row.r) refguess.e.r = row.r;\n        if (refguess.e.c < C) refguess.e.c = C;\n\n        if (cm) {\n          if (cm.type == 'XLDAPR') p.D = true;\n          cm = void 0;\n        }\n\n        if (vm) vm = void 0;\n        break;\n\n      case 0x00B0:\n        /* 'BrtMergeCell' */\n        merges.push(val);\n        break;\n\n      case 0x0031:\n        {\n          /* 'BrtCellMeta' */\n          cm = ((opts.xlmeta || {}).Cell || [])[val - 1];\n        }\n        break;\n\n      case 0x01EE:\n        /* 'BrtHLink' */\n        var rel = rels['!id'][val.relId];\n\n        if (rel) {\n          val.Target = rel.Target;\n          if (val.loc) val.Target += \"#\" + val.loc;\n          val.Rel = rel;\n        } else if (val.relId == '') {\n          val.Target = \"#\" + val.loc;\n        }\n\n        for (R = val.rfx.s.r; R <= val.rfx.e.r; ++R) {\n          for (C = val.rfx.s.c; C <= val.rfx.e.c; ++C) {\n            if (opts.dense) {\n              if (!s[R]) s[R] = [];\n              if (!s[R][C]) s[R][C] = {\n                t: 'z',\n                v: undefined\n              };\n              s[R][C].l = val;\n            } else {\n              addr = encode_cell({\n                c: C,\n                r: R\n              });\n              if (!s[addr]) s[addr] = {\n                t: 'z',\n                v: undefined\n              };\n              s[addr].l = val;\n            }\n          }\n        }\n\n        break;\n\n      case 0x01AA:\n        /* 'BrtArrFmla' */\n        if (!opts.cellFormula) break;\n        arrayf.push(val);\n        cell = opts.dense ? s[R][C] : s[encode_col(C) + rr]\n        /*:any*/\n        ;\n        cell.f = stringify_formula(val[1], refguess, {\n          r: row.r,\n          c: C\n        }, supbooks, opts);\n        cell.F = encode_range(val[0]);\n        break;\n\n      case 0x01AB:\n        /* 'BrtShrFmla' */\n        if (!opts.cellFormula) break;\n        sharedf[encode_cell(val[0].s)] = val[1];\n        cell = opts.dense ? s[R][C] : s[encode_col(C) + rr];\n        cell.f = stringify_formula(val[1], refguess, {\n          r: row.r,\n          c: C\n        }, supbooks, opts);\n        break;\n\n      /* identical to 'ColInfo' in XLS */\n\n      case 0x003C:\n        /* 'BrtColInfo' */\n        if (!opts.cellStyles) break;\n\n        while (val.e >= val.s) {\n          colinfo[val.e--] = {\n            width: val.w / 256,\n            hidden: !!(val.flags & 0x01),\n            level: val.level\n          };\n\n          if (!seencol) {\n            seencol = true;\n            find_mdw_colw(val.w / 256);\n          }\n\n          process_col(colinfo[val.e + 1]);\n        }\n\n        break;\n\n      case 0x00A1:\n        /* 'BrtBeginAFilter' */\n        s['!autofilter'] = {\n          ref: encode_range(val)\n        };\n        break;\n\n      case 0x01DC:\n        /* 'BrtMargins' */\n        s['!margins'] = val;\n        break;\n\n      case 0x0093:\n        /* 'BrtWsProp' */\n        if (!wb.Sheets[idx]) wb.Sheets[idx] = {};\n        if (val.name) wb.Sheets[idx].CodeName = val.name;\n        if (val.above || val.left) s['!outline'] = {\n          above: val.above,\n          left: val.left\n        };\n        break;\n\n      case 0x0089:\n        /* 'BrtBeginWsView' */\n        if (!wb.Views) wb.Views = [{}];\n        if (!wb.Views[0]) wb.Views[0] = {};\n        if (val.RTL) wb.Views[0].RTL = true;\n        break;\n\n      case 0x01E5:\n        /* 'BrtWsFmtInfo' */\n        break;\n\n      case 0x0040:\n      /* 'BrtDVal' */\n\n      case 0x041D:\n        /* 'BrtDVal14' */\n        break;\n\n      case 0x0097:\n        /* 'BrtPane' */\n        break;\n\n      case 0x0098:\n      /* 'BrtSel' */\n\n      case 0x00AF:\n      /* 'BrtAFilterDateGroupItem' */\n\n      case 0x0284:\n      /* 'BrtActiveX' */\n\n      case 0x0271:\n      /* 'BrtBigName' */\n\n      case 0x0232:\n      /* 'BrtBkHim' */\n\n      case 0x018C:\n      /* 'BrtBrk' */\n\n      case 0x0458:\n      /* 'BrtCFIcon' */\n\n      case 0x047A:\n      /* 'BrtCFRuleExt' */\n\n      case 0x01D7:\n      /* 'BrtCFVO' */\n\n      case 0x041A:\n      /* 'BrtCFVO14' */\n\n      case 0x0289:\n      /* 'BrtCellIgnoreEC' */\n\n      case 0x0451:\n      /* 'BrtCellIgnoreEC14' */\n\n      case 0x024D:\n      /* 'BrtCellSmartTagProperty' */\n\n      case 0x025F:\n      /* 'BrtCellWatch' */\n\n      case 0x0234:\n      /* 'BrtColor' */\n\n      case 0x041F:\n      /* 'BrtColor14' */\n\n      case 0x00A8:\n      /* 'BrtColorFilter' */\n\n      case 0x00AE:\n      /* 'BrtCustomFilter' */\n\n      case 0x049C:\n      /* 'BrtCustomFilter14' */\n\n      case 0x01F3:\n      /* 'BrtDRef' */\n\n      case 0x01FB:\n      /* 'BrtDXF' */\n\n      case 0x0226:\n      /* 'BrtDrawing' */\n\n      case 0x00AB:\n      /* 'BrtDynamicFilter' */\n\n      case 0x00A7:\n      /* 'BrtFilter' */\n\n      case 0x0499:\n      /* 'BrtFilter14' */\n\n      case 0x00A9:\n      /* 'BrtIconFilter' */\n\n      case 0x049D:\n      /* 'BrtIconFilter14' */\n\n      case 0x0227:\n      /* 'BrtLegacyDrawing' */\n\n      case 0x0228:\n      /* 'BrtLegacyDrawingHF' */\n\n      case 0x0295:\n      /* 'BrtListPart' */\n\n      case 0x027F:\n      /* 'BrtOleObject' */\n\n      case 0x01DE:\n      /* 'BrtPageSetup' */\n\n      case 0x0219:\n      /* 'BrtPhoneticInfo' */\n\n      case 0x01DD:\n      /* 'BrtPrintOptions' */\n\n      case 0x0218:\n      /* 'BrtRangeProtection' */\n\n      case 0x044F:\n      /* 'BrtRangeProtection14' */\n\n      case 0x02A8:\n      /* 'BrtRangeProtectionIso' */\n\n      case 0x0450:\n      /* 'BrtRangeProtectionIso14' */\n\n      case 0x0400:\n      /* 'BrtRwDescent' */\n\n      case 0x0297:\n      /* 'BrtSheetCalcProp' */\n\n      case 0x0217:\n      /* 'BrtSheetProtection' */\n\n      case 0x02A6:\n      /* 'BrtSheetProtectionIso' */\n\n      case 0x01F8:\n      /* 'BrtSlc' */\n\n      case 0x0413:\n      /* 'BrtSparkline' */\n\n      case 0x01AC:\n      /* 'BrtTable' */\n\n      case 0x00AA:\n      /* 'BrtTop10Filter' */\n\n      case 0x0C00:\n      /* 'BrtUid' */\n\n      case 0x0032:\n      /* 'BrtValueMeta' */\n\n      case 0x0816:\n      /* 'BrtWebExtension' */\n\n      case 0x0415:\n        /* 'BrtWsFmtInfoEx14' */\n        break;\n\n      case 0x0023:\n        /* 'BrtFRTBegin' */\n        pass = true;\n        break;\n\n      case 0x0024:\n        /* 'BrtFRTEnd' */\n        pass = false;\n        break;\n\n      case 0x0025:\n        /* 'BrtACBegin' */\n        state.push(RT);\n        pass = true;\n        break;\n\n      case 0x0026:\n        /* 'BrtACEnd' */\n        state.pop();\n        pass = false;\n        break;\n\n      default:\n        if (RR.T) {\n          /* empty */\n        } else if (!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\n    }\n  }, opts);\n  delete opts.supbooks;\n  delete opts['!row'];\n  if (!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\n  if (opts.sheetRows && s[\"!ref\"]) {\n    var tmpref = safe_decode_range(s[\"!ref\"]);\n\n    if (opts.sheetRows <= +tmpref.e.r) {\n      tmpref.e.r = opts.sheetRows - 1;\n      if (tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\n      if (tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\n      if (tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\n      if (tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\n      s[\"!fullref\"] = s[\"!ref\"];\n      s[\"!ref\"] = encode_range(tmpref);\n    }\n  }\n\n  if (merges.length > 0) s[\"!merges\"] = merges;\n  if (colinfo.length > 0) s[\"!cols\"] = colinfo;\n  if (rowinfo.length > 0) s[\"!rows\"] = rowinfo;\n  return s;\n}\n/* TODO: something useful -- this is a stub */\n\n\nfunction write_ws_bin_cell(ba\n/*:BufArray*/\n, cell\n/*:Cell*/\n, R\n/*:number*/\n, C\n/*:number*/\n, opts, ws\n/*:Worksheet*/\n, last_seen\n/*:boolean*/\n)\n/*:boolean*/\n{\n  if (cell.v === undefined) return false;\n  var vv = \"\";\n\n  switch (cell.t) {\n    case 'b':\n      vv = cell.v ? \"1\" : \"0\";\n      break;\n\n    case 'd':\n      // no BrtCellDate :(\n      cell = dup(cell);\n      cell.z = cell.z || table_fmt[14];\n      cell.v = datenum(parseDate(cell.v));\n      cell.t = 'n';\n      break;\n\n    /* falls through */\n\n    case 'n':\n    case 'e':\n      vv = '' + cell.v;\n      break;\n\n    default:\n      vv = cell.v;\n      break;\n  }\n\n  var o\n  /*:any*/\n  = {\n    r: R,\n    c: C\n  }\n  /*:any*/\n  ;\n  /* TODO: cell style */\n\n  o.s = get_cell_style(opts.cellXfs, cell, opts);\n  if (cell.l) ws['!links'].push([encode_cell(o), cell.l]);\n  if (cell.c) ws['!comments'].push([encode_cell(o), cell.c]);\n\n  switch (cell.t) {\n    case 's':\n    case 'str':\n      if (opts.bookSST) {\n        vv = get_sst_id(opts.Strings, cell.v\n        /*:any*/\n        , opts.revStrings);\n        o.t = \"s\";\n        o.v = vv;\n        if (last_seen) write_record(ba, 0x0012\n        /* BrtShortIsst */\n        , write_BrtShortIsst(cell, o));else write_record(ba, 0x0007\n        /* BrtCellIsst */\n        , write_BrtCellIsst(cell, o));\n      } else {\n        o.t = \"str\";\n        if (last_seen) write_record(ba, 0x0011\n        /* BrtShortSt */\n        , write_BrtShortSt(cell, o));else write_record(ba, 0x0006\n        /* BrtCellSt */\n        , write_BrtCellSt(cell, o));\n      }\n\n      return true;\n\n    case 'n':\n      /* TODO: determine threshold for Real vs RK */\n      if (cell.v == (cell.v | 0) && cell.v > -1000 && cell.v < 1000) {\n        if (last_seen) write_record(ba, 0x000D\n        /* BrtShortRk */\n        , write_BrtShortRk(cell, o));else write_record(ba, 0x0002\n        /* BrtCellRk */\n        , write_BrtCellRk(cell, o));\n      } else {\n        if (last_seen) write_record(ba, 0x0010\n        /* BrtShortReal */\n        , write_BrtShortReal(cell, o));else write_record(ba, 0x0005\n        /* BrtCellReal */\n        , write_BrtCellReal(cell, o));\n      }\n\n      return true;\n\n    case 'b':\n      o.t = \"b\";\n      if (last_seen) write_record(ba, 0x000F\n      /* BrtShortBool */\n      , write_BrtShortBool(cell, o));else write_record(ba, 0x0004\n      /* BrtCellBool */\n      , write_BrtCellBool(cell, o));\n      return true;\n\n    case 'e':\n      o.t = \"e\";\n      if (last_seen) write_record(ba, 0x000E\n      /* BrtShortError */\n      , write_BrtShortError(cell, o));else write_record(ba, 0x0003\n      /* BrtCellError */\n      , write_BrtCellError(cell, o));\n      return true;\n  }\n\n  if (last_seen) write_record(ba, 0x000C\n  /* BrtShortBlank */\n  , write_BrtShortBlank(cell, o));else write_record(ba, 0x0001\n  /* BrtCellBlank */\n  , write_BrtCellBlank(cell, o));\n  return true;\n}\n\nfunction write_CELLTABLE(ba, ws\n/*:Worksheet*/\n, idx\n/*:number*/\n, opts\n/*::, wb:Workbook*/\n) {\n  var range = safe_decode_range(ws['!ref'] || \"A1\"),\n      ref,\n      rr = \"\",\n      cols\n  /*:Array<string>*/\n  = [];\n  write_record(ba, 0x0091\n  /* BrtBeginSheetData */\n  );\n  var dense = Array.isArray(ws);\n  var cap = range.e.r;\n  if (ws['!rows']) cap = Math.max(range.e.r, ws['!rows'].length - 1);\n\n  for (var R = range.s.r; R <= cap; ++R) {\n    rr = encode_row(R);\n    /* [ACCELLTABLE] */\n\n    /* BrtRowHdr */\n\n    write_row_header(ba, ws, range, R);\n    var last_seen = false;\n    if (R <= range.e.r) for (var C = range.s.c; C <= range.e.c; ++C) {\n      /* *16384CELL */\n      if (R === range.s.r) cols[C] = encode_col(C);\n      ref = cols[C] + rr;\n      var cell = dense ? (ws[R] || [])[C] : ws[ref];\n\n      if (!cell) {\n        last_seen = false;\n        continue;\n      }\n      /* write cell */\n\n\n      last_seen = write_ws_bin_cell(ba, cell, R, C, opts, ws, last_seen);\n    }\n  }\n\n  write_record(ba, 0x0092\n  /* BrtEndSheetData */\n  );\n}\n\nfunction write_MERGECELLS(ba, ws\n/*:Worksheet*/\n) {\n  if (!ws || !ws['!merges']) return;\n  write_record(ba, 0x00B1\n  /* BrtBeginMergeCells */\n  , write_BrtBeginMergeCells(ws['!merges'].length));\n  ws['!merges'].forEach(function (m) {\n    write_record(ba, 0x00B0\n    /* BrtMergeCell */\n    , write_BrtMergeCell(m));\n  });\n  write_record(ba, 0x00B2\n  /* BrtEndMergeCells */\n  );\n}\n\nfunction write_COLINFOS(ba, ws\n/*:Worksheet*/\n\n/*::, idx:number, opts, wb:Workbook*/\n) {\n  if (!ws || !ws['!cols']) return;\n  write_record(ba, 0x0186\n  /* BrtBeginColInfos */\n  );\n  ws['!cols'].forEach(function (m, i) {\n    if (m) write_record(ba, 0x003C\n    /* 'BrtColInfo' */\n    , write_BrtColInfo(i, m));\n  });\n  write_record(ba, 0x0187\n  /* BrtEndColInfos */\n  );\n}\n\nfunction write_IGNOREECS(ba, ws\n/*:Worksheet*/\n) {\n  if (!ws || !ws['!ref']) return;\n  write_record(ba, 0x0288\n  /* BrtBeginCellIgnoreECs */\n  );\n  write_record(ba, 0x0289\n  /* BrtCellIgnoreEC */\n  , write_BrtCellIgnoreEC(safe_decode_range(ws['!ref'])));\n  write_record(ba, 0x028A\n  /* BrtEndCellIgnoreECs */\n  );\n}\n\nfunction write_HLINKS(ba, ws\n/*:Worksheet*/\n, rels) {\n  /* *BrtHLink */\n  ws['!links'].forEach(function (l) {\n    if (!l[1].Target) return;\n    var rId = add_rels(rels, -1, l[1].Target.replace(/#.*$/, \"\"), RELS.HLINK);\n    write_record(ba, 0x01EE\n    /* BrtHLink */\n    , write_BrtHLink(l, rId));\n  });\n  delete ws['!links'];\n}\n\nfunction write_LEGACYDRAWING(ba, ws\n/*:Worksheet*/\n, idx\n/*:number*/\n, rels) {\n  /* [BrtLegacyDrawing] */\n  if (ws['!comments'].length > 0) {\n    var rId = add_rels(rels, -1, \"../drawings/vmlDrawing\" + (idx + 1) + \".vml\", RELS.VML);\n    write_record(ba, 0x0227\n    /* BrtLegacyDrawing */\n    , write_RelID(\"rId\" + rId));\n    ws['!legacy'] = rId;\n  }\n}\n\nfunction write_AUTOFILTER(ba, ws, wb, idx) {\n  if (!ws['!autofilter']) return;\n  var data = ws['!autofilter'];\n  var ref = typeof data.ref === \"string\" ? data.ref : encode_range(data.ref);\n  /* Update FilterDatabase defined name for the worksheet */\n\n  if (!wb.Workbook) wb.Workbook = {\n    Sheets: []\n  }\n  /*:any*/\n  ;\n  if (!wb.Workbook.Names) wb.Workbook.Names = [];\n  var names\n  /*: Array<any> */\n  = wb.Workbook.Names;\n  var range = decode_range(ref);\n\n  if (range.s.r == range.e.r) {\n    range.e.r = decode_range(ws[\"!ref\"]).e.r;\n    ref = encode_range(range);\n  }\n\n  for (var i = 0; i < names.length; ++i) {\n    var name = names[i];\n    if (name.Name != '_xlnm._FilterDatabase') continue;\n    if (name.Sheet != idx) continue;\n    name.Ref = \"'\" + wb.SheetNames[idx] + \"'!\" + ref;\n    break;\n  }\n\n  if (i == names.length) names.push({\n    Name: '_xlnm._FilterDatabase',\n    Sheet: idx,\n    Ref: \"'\" + wb.SheetNames[idx] + \"'!\" + ref\n  });\n  write_record(ba, 0x00A1\n  /* BrtBeginAFilter */\n  , write_UncheckedRfX(safe_decode_range(ref)));\n  /* *FILTERCOLUMN */\n\n  /* [SORTSTATE] */\n\n  /* BrtEndAFilter */\n\n  write_record(ba, 0x00A2\n  /* BrtEndAFilter */\n  );\n}\n\nfunction write_WSVIEWS2(ba, ws, Workbook) {\n  write_record(ba, 0x0085\n  /* BrtBeginWsViews */\n  );\n  {\n    /* 1*WSVIEW2 */\n\n    /* [ACUID] */\n    write_record(ba, 0x0089\n    /* BrtBeginWsView */\n    , write_BrtBeginWsView(ws, Workbook));\n    /* [BrtPane] */\n\n    /* *4BrtSel */\n\n    /* *4SXSELECT */\n\n    /* *FRT */\n\n    write_record(ba, 0x008A\n    /* BrtEndWsView */\n    );\n  }\n  /* *FRT */\n\n  write_record(ba, 0x0086\n  /* BrtEndWsViews */\n  );\n}\n\nfunction\n  /*::ba, ws*/\nwrite_WSFMTINFO() {\n  /* [ACWSFMTINFO] */\n  // write_record(ba, 0x01E5 /* BrtWsFmtInfo */, write_BrtWsFmtInfo(ws));\n}\n\nfunction write_SHEETPROTECT(ba, ws) {\n  if (!ws['!protect']) return;\n  /* [BrtSheetProtectionIso] */\n\n  write_record(ba, 0x0217\n  /* BrtSheetProtection */\n  , write_BrtSheetProtection(ws['!protect']));\n}\n\nfunction write_ws_bin(idx\n/*:number*/\n, opts, wb\n/*:Workbook*/\n, rels) {\n  var ba = buf_array();\n  var s = wb.SheetNames[idx],\n      ws = wb.Sheets[s] || {};\n  var c\n  /*:string*/\n  = s;\n\n  try {\n    if (wb && wb.Workbook) c = wb.Workbook.Sheets[idx].CodeName || c;\n  } catch (e) {}\n\n  var r = safe_decode_range(ws['!ref'] || \"A1\");\n\n  if (r.e.c > 0x3FFF || r.e.r > 0xFFFFF) {\n    if (opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:XFD1048576\");\n    r.e.c = Math.min(r.e.c, 0x3FFF);\n    r.e.r = Math.min(r.e.c, 0xFFFFF);\n  }\n\n  ws['!links'] = [];\n  /* passed back to write_zip and removed there */\n\n  ws['!comments'] = [];\n  write_record(ba, 0x0081\n  /* BrtBeginSheet */\n  );\n  if (wb.vbaraw || ws['!outline']) write_record(ba, 0x0093\n  /* BrtWsProp */\n  , write_BrtWsProp(c, ws['!outline']));\n  write_record(ba, 0x0094\n  /* BrtWsDim */\n  , write_BrtWsDim(r));\n  write_WSVIEWS2(ba, ws, wb.Workbook);\n  write_WSFMTINFO(ba, ws);\n  write_COLINFOS(ba, ws, idx, opts, wb);\n  write_CELLTABLE(ba, ws, idx, opts, wb);\n  /* [BrtSheetCalcProp] */\n\n  write_SHEETPROTECT(ba, ws);\n  /* *([BrtRangeProtectionIso] BrtRangeProtection) */\n\n  /* [SCENMAN] */\n\n  write_AUTOFILTER(ba, ws, wb, idx);\n  /* [SORTSTATE] */\n\n  /* [DCON] */\n\n  /* [USERSHVIEWS] */\n\n  write_MERGECELLS(ba, ws);\n  /* [BrtPhoneticInfo] */\n\n  /* *CONDITIONALFORMATTING */\n\n  /* [DVALS] */\n\n  write_HLINKS(ba, ws, rels);\n  /* [BrtPrintOptions] */\n\n  if (ws['!margins']) write_record(ba, 0x01DC\n  /* BrtMargins */\n  , write_BrtMargins(ws['!margins']));\n  /* [BrtPageSetup] */\n\n  /* [HEADERFOOTER] */\n\n  /* [RWBRK] */\n\n  /* [COLBRK] */\n\n  /* *BrtBigName */\n\n  /* [CELLWATCHES] */\n\n  if (!opts || opts.ignoreEC || opts.ignoreEC == void 0) write_IGNOREECS(ba, ws);\n  /* [SMARTTAGS] */\n\n  /* [BrtDrawing] */\n\n  write_LEGACYDRAWING(ba, ws, idx, rels);\n  /* [BrtLegacyDrawingHF] */\n\n  /* [BrtBkHim] */\n\n  /* [OLEOBJECTS] */\n\n  /* [ACTIVEXCONTROLS] */\n\n  /* [WEBPUBITEMS] */\n\n  /* [LISTPARTS] */\n\n  /* FRTWORKSHEET */\n\n  write_record(ba, 0x0082\n  /* BrtEndSheet */\n  );\n  return ba.end();\n}\n\nfunction parse_Cache(data\n/*:string*/\n)\n/*:[Array<number|string>, string, ?string]*/\n{\n  var col\n  /*:Array<number|string>*/\n  = [];\n  var num = data.match(/^<c:numCache>/);\n  var f;\n  /* 21.2.2.150 pt CT_NumVal */\n\n  (data.match(/<c:pt idx=\"(\\d*)\">(.*?)<\\/c:pt>/mg) || []).forEach(function (pt) {\n    var q = pt.match(/<c:pt idx=\"(\\d*?)\"><c:v>(.*)<\\/c:v><\\/c:pt>/);\n    if (!q) return;\n    col[+q[1]] = num ? +q[2] : q[2];\n  });\n  /* 21.2.2.71 formatCode CT_Xstring */\n\n  var nf = unescapexml((data.match(/<c:formatCode>([\\s\\S]*?)<\\/c:formatCode>/) || [\"\", \"General\"])[1]);\n  (data.match(/<c:f>(.*?)<\\/c:f>/mg) || []).forEach(function (F) {\n    f = F.replace(/<.*?>/g, \"\");\n  });\n  return [col, nf, f];\n}\n/* 21.2 DrawingML - Charts */\n\n\nfunction parse_chart(data\n/*:?string*/\n, name\n/*:string*/\n, opts, rels, wb, csheet) {\n  var cs\n  /*:Worksheet*/\n  = csheet || {\n    \"!type\": \"chart\"\n  }\n  /*:any*/\n  ;\n  if (!data) return csheet;\n  /* 21.2.2.27 chart CT_Chart */\n\n  var C = 0,\n      R = 0,\n      col = \"A\";\n  var refguess = {\n    s: {\n      r: 2000000,\n      c: 2000000\n    },\n    e: {\n      r: 0,\n      c: 0\n    }\n  };\n  /* 21.2.2.120 numCache CT_NumData */\n\n  (data.match(/<c:numCache>[\\s\\S]*?<\\/c:numCache>/gm) || []).forEach(function (nc) {\n    var cache = parse_Cache(nc);\n    refguess.s.r = refguess.s.c = 0;\n    refguess.e.c = C;\n    col = encode_col(C);\n    cache[0].forEach(function (n, i) {\n      cs[col + encode_row(i)] = {\n        t: 'n',\n        v: n,\n        z: cache[1]\n      };\n      R = i;\n    });\n    if (refguess.e.r < R) refguess.e.r = R;\n    ++C;\n  });\n  if (C > 0) cs[\"!ref\"] = encode_range(refguess);\n  return cs;\n}\n/* 18.3 Worksheets also covers Chartsheets */\n\n\nfunction parse_cs_xml(data\n/*:?string*/\n, opts, idx\n/*:number*/\n, rels, wb\n/*::, themes, styles*/\n)\n/*:Worksheet*/\n{\n  if (!data) return data;\n  /* 18.3.1.12 chartsheet CT_ChartSheet */\n\n  if (!rels) rels = {\n    '!id': {}\n  };\n  var s = {\n    '!type': \"chart\",\n    '!drawel': null,\n    '!rel': \"\"\n  }\n  /*:any*/\n  ;\n  var m;\n  /* 18.3.1.83 sheetPr CT_ChartsheetPr */\n\n  var sheetPr = data.match(sheetprregex);\n  if (sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);\n  /* 18.3.1.36 drawing CT_Drawing */\n\n  if (m = data.match(/drawing r:id=\"(.*?)\"/)) s['!rel'] = m[1];\n  if (rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];\n  return s;\n}\n\nfunction write_cs_xml(idx\n/*:number*/\n, opts, wb\n/*:Workbook*/\n, rels)\n/*:string*/\n{\n  var o = [XML_HEADER, writextag('chartsheet', null, {\n    'xmlns': XMLNS_main[0],\n    'xmlns:r': XMLNS.r\n  })];\n  o[o.length] = writextag(\"drawing\", null, {\n    \"r:id\": \"rId1\"\n  });\n  add_rels(rels, -1, \"../drawings/drawing\" + (idx + 1) + \".xml\", RELS.DRAW);\n\n  if (o.length > 2) {\n    o[o.length] = '</chartsheet>';\n    o[1] = o[1].replace(\"/>\", \">\");\n  }\n\n  return o.join(\"\");\n}\n/* [MS-XLSB] 2.4.331 BrtCsProp */\n\n\nfunction parse_BrtCsProp(data, length\n/*:number*/\n) {\n  data.l += 10;\n  var name = parse_XLWideString(data, length - 10);\n  return {\n    name: name\n  };\n}\n/* [MS-XLSB] 2.1.7.7 Chart Sheet */\n\n\nfunction parse_cs_bin(data, opts, idx\n/*:number*/\n, rels, wb\n/*::, themes, styles*/\n)\n/*:Worksheet*/\n{\n  if (!data) return data;\n  if (!rels) rels = {\n    '!id': {}\n  };\n  var s = {\n    '!type': \"chart\",\n    '!drawel': null,\n    '!rel': \"\"\n  };\n  var state\n  /*:Array<string>*/\n  = [];\n  var pass = false;\n  recordhopper(data, function cs_parse(val, R, RT) {\n    switch (RT) {\n      case 0x0226:\n        /* 'BrtDrawing' */\n        s['!rel'] = val;\n        break;\n\n      case 0x028B:\n        /* 'BrtCsProp' */\n        if (!wb.Sheets[idx]) wb.Sheets[idx] = {};\n        if (val.name) wb.Sheets[idx].CodeName = val.name;\n        break;\n\n      case 0x0232:\n      /* 'BrtBkHim' */\n\n      case 0x028C:\n      /* 'BrtCsPageSetup' */\n\n      case 0x029D:\n      /* 'BrtCsProtection' */\n\n      case 0x02A7:\n      /* 'BrtCsProtectionIso' */\n\n      case 0x0227:\n      /* 'BrtLegacyDrawing' */\n\n      case 0x0228:\n      /* 'BrtLegacyDrawingHF' */\n\n      case 0x01DC:\n      /* 'BrtMargins' */\n\n      case 0x0C00:\n        /* 'BrtUid' */\n        break;\n\n      case 0x0023:\n        /* 'BrtFRTBegin' */\n        pass = true;\n        break;\n\n      case 0x0024:\n        /* 'BrtFRTEnd' */\n        pass = false;\n        break;\n\n      case 0x0025:\n        /* 'BrtACBegin' */\n        state.push(RT);\n        break;\n\n      case 0x0026:\n        /* 'BrtACEnd' */\n        state.pop();\n        break;\n\n      default:\n        if (R.T > 0) state.push(RT);else if (R.T < 0) state.pop();else if (!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n    }\n  }, opts);\n  if (rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];\n  return s;\n}\n\nfunction\n  /*::idx:number, opts, wb:Workbook, rels*/\nwrite_cs_bin() {\n  var ba = buf_array();\n  write_record(ba, 0x0081\n  /* BrtBeginSheet */\n  );\n  /* [BrtCsProp] */\n\n  /* CSVIEWS */\n\n  /* [[BrtCsProtectionIso] BrtCsProtection] */\n\n  /* [USERCSVIEWS] */\n\n  /* [BrtMargins] */\n\n  /* [BrtCsPageSetup] */\n\n  /* [HEADERFOOTER] */\n\n  /* BrtDrawing */\n\n  /* [BrtLegacyDrawing] */\n\n  /* [BrtLegacyDrawingHF] */\n\n  /* [BrtBkHim] */\n\n  /* [WEBPUBITEMS] */\n\n  /* FRTCHARTSHEET */\n\n  write_record(ba, 0x0082\n  /* BrtEndSheet */\n  );\n  return ba.end();\n}\n/* 18.2.28 (CT_WorkbookProtection) Defaults */\n\n\nvar WBPropsDef = [['allowRefreshQuery', false, \"bool\"], ['autoCompressPictures', true, \"bool\"], ['backupFile', false, \"bool\"], ['checkCompatibility', false, \"bool\"], ['CodeName', ''], ['date1904', false, \"bool\"], ['defaultThemeVersion', 0, \"int\"], ['filterPrivacy', false, \"bool\"], ['hidePivotFieldList', false, \"bool\"], ['promptedSolutions', false, \"bool\"], ['publishItems', false, \"bool\"], ['refreshAllConnections', false, \"bool\"], ['saveExternalLinkValues', true, \"bool\"], ['showBorderUnselectedTables', true, \"bool\"], ['showInkAnnotation', true, \"bool\"], ['showObjects', 'all'], ['showPivotChartFilter', false, \"bool\"], ['updateLinks', 'userSet']];\n/* 18.2.30 (CT_BookView) Defaults */\n\nvar WBViewDef = [['activeTab', 0, \"int\"], ['autoFilterDateGrouping', true, \"bool\"], ['firstSheet', 0, \"int\"], ['minimized', false, \"bool\"], ['showHorizontalScroll', true, \"bool\"], ['showSheetTabs', true, \"bool\"], ['showVerticalScroll', true, \"bool\"], ['tabRatio', 600, \"int\"], ['visibility', 'visible'] //window{Height,Width}, {x,y}Window\n];\n/* 18.2.19 (CT_Sheet) Defaults */\n\nvar SheetDef = [//['state', 'visible']\n];\n/* 18.2.2  (CT_CalcPr) Defaults */\n\nvar CalcPrDef = [['calcCompleted', 'true'], ['calcMode', 'auto'], ['calcOnSave', 'true'], ['concurrentCalc', 'true'], ['fullCalcOnLoad', 'false'], ['fullPrecision', 'true'], ['iterate', 'false'], ['iterateCount', '100'], ['iterateDelta', '0.001'], ['refMode', 'A1']];\n/* 18.2.3 (CT_CustomWorkbookView) Defaults */\n\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  for (var j = 0; j != target.length; ++j) {\n    var w = target[j];\n\n    for (var i = 0; i != defaults.length; ++i) {\n      var z = defaults[i];\n      if (w[z[0]] == null) w[z[0]] = z[1];else switch (z[2]) {\n        case \"bool\":\n          if (typeof w[z[0]] == \"string\") w[z[0]] = parsexmlbool(w[z[0]]);\n          break;\n\n        case \"int\":\n          if (typeof w[z[0]] == \"string\") w[z[0]] = parseInt(w[z[0]], 10);\n          break;\n      }\n    }\n  }\n}\n\nfunction push_defaults(target, defaults) {\n  for (var i = 0; i != defaults.length; ++i) {\n    var z = defaults[i];\n    if (target[z[0]] == null) target[z[0]] = z[1];else switch (z[2]) {\n      case \"bool\":\n        if (typeof target[z[0]] == \"string\") target[z[0]] = parsexmlbool(target[z[0]]);\n        break;\n\n      case \"int\":\n        if (typeof target[z[0]] == \"string\") target[z[0]] = parseInt(target[z[0]], 10);\n        break;\n    }\n  }\n}\n\nfunction parse_wb_defaults(wb) {\n  push_defaults(wb.WBProps, WBPropsDef);\n  push_defaults(wb.CalcPr, CalcPrDef);\n  push_defaults_array(wb.WBView, WBViewDef);\n  push_defaults_array(wb.Sheets, SheetDef);\n  _ssfopts.date1904 = parsexmlbool(wb.WBProps.date1904);\n}\n\nfunction safe1904(wb\n/*:Workbook*/\n)\n/*:string*/\n{\n  /* TODO: store date1904 somewhere else */\n  if (!wb.Workbook) return \"false\";\n  if (!wb.Workbook.WBProps) return \"false\";\n  return parsexmlbool(wb.Workbook.WBProps.date1904) ? \"true\" : \"false\";\n}\n\nvar badchars = /*#__PURE__*/\"][*?\\/\\\\\".split(\"\");\n\nfunction check_ws_name(n\n/*:string*/\n, safe\n/*:?boolean*/\n)\n/*:boolean*/\n{\n  if (n.length > 31) {\n    if (safe) return false;\n    throw new Error(\"Sheet names cannot exceed 31 chars\");\n  }\n\n  var _good = true;\n  badchars.forEach(function (c) {\n    if (n.indexOf(c) == -1) return;\n    if (!safe) throw new Error(\"Sheet name cannot contain : \\\\ / ? * [ ]\");\n    _good = false;\n  });\n  return _good;\n}\n\nfunction check_wb_names(N, S, codes) {\n  N.forEach(function (n, i) {\n    check_ws_name(n);\n\n    for (var j = 0; j < i; ++j) {\n      if (n == N[j]) throw new Error(\"Duplicate Sheet Name: \" + n);\n    }\n\n    if (codes) {\n      var cn = S && S[i] && S[i].CodeName || n;\n      if (cn.charCodeAt(0) == 95 && cn.length > 22) throw new Error(\"Bad Code Name: Worksheet\" + cn);\n    }\n  });\n}\n\nfunction check_wb(wb) {\n  if (!wb || !wb.SheetNames || !wb.Sheets) throw new Error(\"Invalid Workbook\");\n  if (!wb.SheetNames.length) throw new Error(\"Workbook is empty\");\n  var Sheets = wb.Workbook && wb.Workbook.Sheets || [];\n  check_wb_names(wb.SheetNames, Sheets, !!wb.vbaraw);\n\n  for (var i = 0; i < wb.SheetNames.length; ++i) {\n    check_ws(wb.Sheets[wb.SheetNames[i]], wb.SheetNames[i], i);\n  }\n  /* TODO: validate workbook */\n\n}\n/* 18.2 Workbook */\n\n\nvar wbnsregex = /<\\w+:workbook/;\n\nfunction parse_wb_xml(data, opts)\n/*:WorkbookFile*/\n{\n  if (!data) throw new Error(\"Could not find file\");\n  var wb =\n  /*::(*/\n  {\n    AppVersion: {},\n    WBProps: {},\n    WBView: [],\n    Sheets: [],\n    CalcPr: {},\n    Names: [],\n    xmlns: \"\"\n  }\n  /*::)*/\n  ;\n  var pass = false,\n      xmlns = \"xmlns\";\n  var dname = {},\n      dnstart = 0;\n  data.replace(tagregex, function xml_wb(x, idx) {\n    var y\n    /*:any*/\n    = parsexmltag(x);\n\n    switch (strip_ns(y[0])) {\n      case '<?xml':\n        break;\n\n      /* 18.2.27 workbook CT_Workbook 1 */\n\n      case '<workbook':\n        if (x.match(wbnsregex)) xmlns = \"xmlns\" + x.match(/<(\\w+):/)[1];\n        wb.xmlns = y[xmlns];\n        break;\n\n      case '</workbook>':\n        break;\n\n      /* 18.2.13 fileVersion CT_FileVersion ? */\n\n      case '<fileVersion':\n        delete y[0];\n        wb.AppVersion = y;\n        break;\n\n      case '<fileVersion/>':\n      case '</fileVersion>':\n        break;\n\n      /* 18.2.12 fileSharing CT_FileSharing ? */\n\n      case '<fileSharing':\n        break;\n\n      case '<fileSharing/>':\n        break;\n\n      /* 18.2.28 workbookPr CT_WorkbookPr ? */\n\n      case '<workbookPr':\n      case '<workbookPr/>':\n        WBPropsDef.forEach(function (w) {\n          if (y[w[0]] == null) return;\n\n          switch (w[2]) {\n            case \"bool\":\n              wb.WBProps[w[0]] = parsexmlbool(y[w[0]]);\n              break;\n\n            case \"int\":\n              wb.WBProps[w[0]] = parseInt(y[w[0]], 10);\n              break;\n\n            default:\n              wb.WBProps[w[0]] = y[w[0]];\n          }\n        });\n        if (y.codeName) wb.WBProps.CodeName = utf8read(y.codeName);\n        break;\n\n      case '</workbookPr>':\n        break;\n\n      /* 18.2.29 workbookProtection CT_WorkbookProtection ? */\n\n      case '<workbookProtection':\n        break;\n\n      case '<workbookProtection/>':\n        break;\n\n      /* 18.2.1  bookViews CT_BookViews ? */\n\n      case '<bookViews':\n      case '<bookViews>':\n      case '</bookViews>':\n        break;\n\n      /* 18.2.30   workbookView CT_BookView + */\n\n      case '<workbookView':\n      case '<workbookView/>':\n        delete y[0];\n        wb.WBView.push(y);\n        break;\n\n      case '</workbookView>':\n        break;\n\n      /* 18.2.20 sheets CT_Sheets 1 */\n\n      case '<sheets':\n      case '<sheets>':\n      case '</sheets>':\n        break;\n      // aggregate sheet\n\n      /* 18.2.19   sheet CT_Sheet + */\n\n      case '<sheet':\n        switch (y.state) {\n          case \"hidden\":\n            y.Hidden = 1;\n            break;\n\n          case \"veryHidden\":\n            y.Hidden = 2;\n            break;\n\n          default:\n            y.Hidden = 0;\n        }\n\n        delete y.state;\n        y.name = unescapexml(utf8read(y.name));\n        delete y[0];\n        wb.Sheets.push(y);\n        break;\n\n      case '</sheet>':\n        break;\n\n      /* 18.2.15 functionGroups CT_FunctionGroups ? */\n\n      case '<functionGroups':\n      case '<functionGroups/>':\n        break;\n\n      /* 18.2.14   functionGroup CT_FunctionGroup + */\n\n      case '<functionGroup':\n        break;\n\n      /* 18.2.9  externalReferences CT_ExternalReferences ? */\n\n      case '<externalReferences':\n      case '</externalReferences>':\n      case '<externalReferences>':\n        break;\n\n      /* 18.2.8    externalReference CT_ExternalReference + */\n\n      case '<externalReference':\n        break;\n\n      /* 18.2.6  definedNames CT_DefinedNames ? */\n\n      case '<definedNames/>':\n        break;\n\n      case '<definedNames>':\n      case '<definedNames':\n        pass = true;\n        break;\n\n      case '</definedNames>':\n        pass = false;\n        break;\n\n      /* 18.2.5    definedName CT_DefinedName + */\n\n      case '<definedName':\n        {\n          dname = {};\n          dname.Name = utf8read(y.name);\n          if (y.comment) dname.Comment = y.comment;\n          if (y.localSheetId) dname.Sheet = +y.localSheetId;\n          if (parsexmlbool(y.hidden || \"0\")) dname.Hidden = true;\n          dnstart = idx + x.length;\n        }\n        break;\n\n      case '</definedName>':\n        {\n          dname.Ref = unescapexml(utf8read(data.slice(dnstart, idx)));\n          wb.Names.push(dname);\n        }\n        break;\n\n      case '<definedName/>':\n        break;\n\n      /* 18.2.2  calcPr CT_CalcPr ? */\n\n      case '<calcPr':\n        delete y[0];\n        wb.CalcPr = y;\n        break;\n\n      case '<calcPr/>':\n        delete y[0];\n        wb.CalcPr = y;\n        break;\n\n      case '</calcPr>':\n        break;\n\n      /* 18.2.16 oleSize CT_OleSize ? (ref required) */\n\n      case '<oleSize':\n        break;\n\n      /* 18.2.4  customWorkbookViews CT_CustomWorkbookViews ? */\n\n      case '<customWorkbookViews>':\n      case '</customWorkbookViews>':\n      case '<customWorkbookViews':\n        break;\n\n      /* 18.2.3  customWorkbookView CT_CustomWorkbookView + */\n\n      case '<customWorkbookView':\n      case '</customWorkbookView>':\n        break;\n\n      /* 18.2.18 pivotCaches CT_PivotCaches ? */\n\n      case '<pivotCaches>':\n      case '</pivotCaches>':\n      case '<pivotCaches':\n        break;\n\n      /* 18.2.17 pivotCache CT_PivotCache ? */\n\n      case '<pivotCache':\n        break;\n\n      /* 18.2.21 smartTagPr CT_SmartTagPr ? */\n\n      case '<smartTagPr':\n      case '<smartTagPr/>':\n        break;\n\n      /* 18.2.23 smartTagTypes CT_SmartTagTypes ? */\n\n      case '<smartTagTypes':\n      case '<smartTagTypes>':\n      case '</smartTagTypes>':\n        break;\n\n      /* 18.2.22 smartTagType CT_SmartTagType ? */\n\n      case '<smartTagType':\n        break;\n\n      /* 18.2.24 webPublishing CT_WebPublishing ? */\n\n      case '<webPublishing':\n      case '<webPublishing/>':\n        break;\n\n      /* 18.2.11 fileRecoveryPr CT_FileRecoveryPr ? */\n\n      case '<fileRecoveryPr':\n      case '<fileRecoveryPr/>':\n        break;\n\n      /* 18.2.26 webPublishObjects CT_WebPublishObjects ? */\n\n      case '<webPublishObjects>':\n      case '<webPublishObjects':\n      case '</webPublishObjects>':\n        break;\n\n      /* 18.2.25 webPublishObject CT_WebPublishObject ? */\n\n      case '<webPublishObject':\n        break;\n\n      /* 18.2.10 extLst CT_ExtensionList ? */\n\n      case '<extLst':\n      case '<extLst>':\n      case '</extLst>':\n      case '<extLst/>':\n        break;\n\n      /* 18.2.7  ext CT_Extension + */\n\n      case '<ext':\n        pass = true;\n        break;\n      //TODO: check with versions of excel\n\n      case '</ext>':\n        pass = false;\n        break;\n\n      /* Others */\n\n      case '<ArchID':\n        break;\n\n      case '<AlternateContent':\n      case '<AlternateContent>':\n        pass = true;\n        break;\n\n      case '</AlternateContent>':\n        pass = false;\n        break;\n\n      /* TODO */\n\n      case '<revisionPtr':\n        break;\n\n      default:\n        if (!pass && opts.WTF) throw new Error('unrecognized ' + y[0] + ' in workbook');\n    }\n\n    return x;\n  });\n  if (XMLNS_main.indexOf(wb.xmlns) === -1) throw new Error(\"Unknown Namespace: \" + wb.xmlns);\n  parse_wb_defaults(wb);\n  return wb;\n}\n\nfunction write_wb_xml(wb\n/*:Workbook*/\n\n/*::, opts:?WriteOpts*/\n)\n/*:string*/\n{\n  var o = [XML_HEADER];\n  o[o.length] = writextag('workbook', null, {\n    'xmlns': XMLNS_main[0],\n    //'xmlns:mx': XMLNS.mx,\n    //'xmlns:s': XMLNS_main[0],\n    'xmlns:r': XMLNS.r\n  });\n  var write_names = wb.Workbook && (wb.Workbook.Names || []).length > 0;\n  /* fileVersion */\n\n  /* fileSharing */\n\n  var workbookPr\n  /*:any*/\n  = {\n    codeName: \"ThisWorkbook\"\n  }\n  /*:any*/\n  ;\n\n  if (wb.Workbook && wb.Workbook.WBProps) {\n    WBPropsDef.forEach(function (x) {\n      /*:: if(!wb.Workbook || !wb.Workbook.WBProps) throw \"unreachable\"; */\n      if (wb.Workbook.WBProps[x[0]]\n      /*:any*/\n      == null) return;\n      if (wb.Workbook.WBProps[x[0]]\n      /*:any*/\n      == x[1]) return;\n      workbookPr[x[0]] = wb.Workbook.WBProps[x[0]]\n      /*:any*/\n      ;\n    });\n    /*:: if(!wb.Workbook || !wb.Workbook.WBProps) throw \"unreachable\"; */\n\n    if (wb.Workbook.WBProps.CodeName) {\n      workbookPr.codeName = wb.Workbook.WBProps.CodeName;\n      delete workbookPr.CodeName;\n    }\n  }\n\n  o[o.length] = writextag('workbookPr', null, workbookPr);\n  /* workbookProtection */\n\n  var sheets = wb.Workbook && wb.Workbook.Sheets || [];\n  var i = 0;\n  /* bookViews only written if first worksheet is hidden */\n\n  if (sheets && sheets[0] && !!sheets[0].Hidden) {\n    o[o.length] = \"<bookViews>\";\n\n    for (i = 0; i != wb.SheetNames.length; ++i) {\n      if (!sheets[i]) break;\n      if (!sheets[i].Hidden) break;\n    }\n\n    if (i == wb.SheetNames.length) i = 0;\n    o[o.length] = '<workbookView firstSheet=\"' + i + '\" activeTab=\"' + i + '\"/>';\n    o[o.length] = \"</bookViews>\";\n  }\n\n  o[o.length] = \"<sheets>\";\n\n  for (i = 0; i != wb.SheetNames.length; ++i) {\n    var sht = {\n      name: escapexml(wb.SheetNames[i].slice(0, 31))\n    }\n    /*:any*/\n    ;\n    sht.sheetId = \"\" + (i + 1);\n    sht[\"r:id\"] = \"rId\" + (i + 1);\n    if (sheets[i]) switch (sheets[i].Hidden) {\n      case 1:\n        sht.state = \"hidden\";\n        break;\n\n      case 2:\n        sht.state = \"veryHidden\";\n        break;\n    }\n    o[o.length] = writextag('sheet', null, sht);\n  }\n\n  o[o.length] = \"</sheets>\";\n  /* functionGroups */\n\n  /* externalReferences */\n\n  if (write_names) {\n    o[o.length] = \"<definedNames>\";\n    if (wb.Workbook && wb.Workbook.Names) wb.Workbook.Names.forEach(function (n) {\n      var d\n      /*:any*/\n      = {\n        name: n.Name\n      };\n      if (n.Comment) d.comment = n.Comment;\n      if (n.Sheet != null) d.localSheetId = \"\" + n.Sheet;\n      if (n.Hidden) d.hidden = \"1\";\n      if (!n.Ref) return;\n      o[o.length] = writextag('definedName', escapexml(n.Ref), d);\n    });\n    o[o.length] = \"</definedNames>\";\n  }\n  /* calcPr */\n\n  /* oleSize */\n\n  /* customWorkbookViews */\n\n  /* pivotCaches */\n\n  /* smartTagPr */\n\n  /* smartTagTypes */\n\n  /* webPublishing */\n\n  /* fileRecoveryPr */\n\n  /* webPublishObjects */\n\n  /* extLst */\n\n\n  if (o.length > 2) {\n    o[o.length] = '</workbook>';\n    o[1] = o[1].replace(\"/>\", \">\");\n  }\n\n  return o.join(\"\");\n}\n/* [MS-XLSB] 2.4.304 BrtBundleSh */\n\n\nfunction parse_BrtBundleSh(data, length\n/*:number*/\n) {\n  var z = {};\n  z.Hidden = data.read_shift(4); //hsState ST_SheetState\n\n  z.iTabID = data.read_shift(4);\n  z.strRelID = parse_RelID(data, length - 8);\n  z.name = parse_XLWideString(data);\n  return z;\n}\n\nfunction write_BrtBundleSh(data, o) {\n  if (!o) o = new_buf(127);\n  o.write_shift(4, data.Hidden);\n  o.write_shift(4, data.iTabID);\n  write_RelID(data.strRelID, o);\n  write_XLWideString(data.name.slice(0, 31), o);\n  return o.length > o.l ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.4.815 BrtWbProp */\n\n\nfunction parse_BrtWbProp(data, length)\n/*:WBProps*/\n{\n  var o\n  /*:WBProps*/\n  = {}\n  /*:any*/\n  ;\n  var flags = data.read_shift(4);\n  o.defaultThemeVersion = data.read_shift(4);\n  var strName = length > 8 ? parse_XLWideString(data) : \"\";\n  if (strName.length > 0) o.CodeName = strName;\n  o.autoCompressPictures = !!(flags & 0x10000);\n  o.backupFile = !!(flags & 0x40);\n  o.checkCompatibility = !!(flags & 0x1000);\n  o.date1904 = !!(flags & 0x01);\n  o.filterPrivacy = !!(flags & 0x08);\n  o.hidePivotFieldList = !!(flags & 0x400);\n  o.promptedSolutions = !!(flags & 0x10);\n  o.publishItems = !!(flags & 0x800);\n  o.refreshAllConnections = !!(flags & 0x40000);\n  o.saveExternalLinkValues = !!(flags & 0x80);\n  o.showBorderUnselectedTables = !!(flags & 0x04);\n  o.showInkAnnotation = !!(flags & 0x20);\n  o.showObjects = [\"all\", \"placeholders\", \"none\"][flags >> 13 & 0x03];\n  o.showPivotChartFilter = !!(flags & 0x8000);\n  o.updateLinks = [\"userSet\", \"never\", \"always\"][flags >> 8 & 0x03];\n  return o;\n}\n\nfunction write_BrtWbProp(data\n/*:?WBProps*/\n, o) {\n  if (!o) o = new_buf(72);\n  var flags = 0;\n\n  if (data) {\n    /* TODO: mirror parse_BrtWbProp fields */\n    if (data.filterPrivacy) flags |= 0x08;\n  }\n\n  o.write_shift(4, flags);\n  o.write_shift(4, 0);\n  write_XLSBCodeName(data && data.CodeName || \"ThisWorkbook\", o);\n  return o.slice(0, o.l);\n}\n\nfunction parse_BrtFRTArchID$(data, length) {\n  var o = {};\n  data.read_shift(4);\n  o.ArchID = data.read_shift(4);\n  data.l += length - 8;\n  return o;\n}\n/* [MS-XLSB] 2.4.687 BrtName */\n\n\nfunction parse_BrtName(data, length, opts) {\n  var end = data.l + length;\n  data.l += 4; //var flags = data.read_shift(4);\n\n  data.l += 1; //var chKey = data.read_shift(1);\n\n  var itab = data.read_shift(4);\n  var name = parse_XLNameWideString(data);\n  var formula = parse_XLSBNameParsedFormula(data, 0, opts);\n  var comment = parse_XLNullableWideString(data); //if(0 /* fProc */) {\n  // unusedstring1: XLNullableWideString\n  // description: XLNullableWideString\n  // helpTopic: XLNullableWideString\n  // unusedstring2: XLNullableWideString\n  //}\n\n  data.l = end;\n  var out = {\n    Name: name,\n    Ptg: formula\n  }\n  /*:any*/\n  ;\n  if (itab < 0xFFFFFFF) out.Sheet = itab;\n  if (comment) out.Comment = comment;\n  return out;\n}\n/* [MS-XLSB] 2.1.7.61 Workbook */\n\n\nfunction parse_wb_bin(data, opts)\n/*:WorkbookFile*/\n{\n  var wb = {\n    AppVersion: {},\n    WBProps: {},\n    WBView: [],\n    Sheets: [],\n    CalcPr: {},\n    xmlns: \"\"\n  };\n  var state\n  /*:Array<string>*/\n  = [];\n  var pass = false;\n  if (!opts) opts = {};\n  opts.biff = 12;\n  var Names = [];\n  var supbooks = [[]]\n  /*:any*/\n  ;\n  supbooks.SheetNames = [];\n  supbooks.XTI = [];\n  XLSBRecordEnum[0x0010] = {\n    n: \"BrtFRTArchID$\",\n    f: parse_BrtFRTArchID$\n  };\n  recordhopper(data, function hopper_wb(val, R, RT) {\n    switch (RT) {\n      case 0x009C:\n        /* 'BrtBundleSh' */\n        supbooks.SheetNames.push(val.name);\n        wb.Sheets.push(val);\n        break;\n\n      case 0x0099:\n        /* 'BrtWbProp' */\n        wb.WBProps = val;\n        break;\n\n      case 0x0027:\n        /* 'BrtName' */\n        if (val.Sheet != null) opts.SID = val.Sheet;\n        val.Ref = stringify_formula(val.Ptg, null, null, supbooks, opts);\n        delete opts.SID;\n        delete val.Ptg;\n        Names.push(val);\n        break;\n\n      case 0x040C:\n        /* 'BrtNameExt' */\n        break;\n\n      case 0x0165:\n      /* 'BrtSupSelf' */\n\n      case 0x0166:\n      /* 'BrtSupSame' */\n\n      case 0x0163:\n      /* 'BrtSupBookSrc' */\n\n      case 0x029B:\n        /* 'BrtSupAddin' */\n        if (!supbooks[0].length) supbooks[0] = [RT, val];else supbooks.push([RT, val]);\n        supbooks[supbooks.length - 1].XTI = [];\n        break;\n\n      case 0x016A:\n        /* 'BrtExternSheet' */\n        if (supbooks.length === 0) {\n          supbooks[0] = [];\n          supbooks[0].XTI = [];\n        }\n\n        supbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val);\n        supbooks.XTI = supbooks.XTI.concat(val);\n        break;\n\n      case 0x0169:\n        /* 'BrtPlaceholderName' */\n        break;\n\n      case 0x0817:\n      /* 'BrtAbsPath15' */\n\n      case 0x009E:\n      /* 'BrtBookView' */\n\n      case 0x008F:\n      /* 'BrtBeginBundleShs' */\n\n      case 0x0298:\n      /* 'BrtBeginFnGroup' */\n\n      case 0x0161:\n        /* 'BrtBeginExternals' */\n        break;\n\n      /* case 'BrtModelTimeGroupingCalcCol' */\n\n      case 0x0C00:\n      /* 'BrtUid' */\n\n      case 0x0C01:\n      /* 'BrtRevisionPtr' */\n\n      case 0x0216:\n      /* 'BrtBookProtection' */\n\n      case 0x02A5:\n      /* 'BrtBookProtectionIso' */\n\n      case 0x009D:\n      /* 'BrtCalcProp' */\n\n      case 0x0262:\n      /* 'BrtCrashRecErr' */\n\n      case 0x0802:\n      /* 'BrtDecoupledPivotCacheID' */\n\n      case 0x009B:\n      /* 'BrtFileRecover' */\n\n      case 0x0224:\n      /* 'BrtFileSharing' */\n\n      case 0x02A4:\n      /* 'BrtFileSharingIso' */\n\n      case 0x0080:\n      /* 'BrtFileVersion' */\n\n      case 0x0299:\n      /* 'BrtFnGroup' */\n\n      case 0x0850:\n      /* 'BrtModelRelationship' */\n\n      case 0x084D:\n      /* 'BrtModelTable' */\n\n      case 0x0225:\n      /* 'BrtOleSize' */\n\n      case 0x0805:\n      /* 'BrtPivotTableRef' */\n\n      case 0x0254:\n      /* 'BrtSmartTagType' */\n\n      case 0x081C:\n      /* 'BrtTableSlicerCacheID' */\n\n      case 0x081B:\n      /* 'BrtTableSlicerCacheIDs' */\n\n      case 0x0822:\n      /* 'BrtTimelineCachePivotCacheID' */\n\n      case 0x018D:\n      /* 'BrtUserBookView' */\n\n      case 0x009A:\n      /* 'BrtWbFactoid' */\n\n      case 0x045D:\n      /* 'BrtWbProp14' */\n\n      case 0x0229:\n      /* 'BrtWebOpt' */\n\n      case 0x082B:\n        /* 'BrtWorkBookPr15' */\n        break;\n\n      case 0x0023:\n        /* 'BrtFRTBegin' */\n        state.push(RT);\n        pass = true;\n        break;\n\n      case 0x0024:\n        /* 'BrtFRTEnd' */\n        state.pop();\n        pass = false;\n        break;\n\n      case 0x0025:\n        /* 'BrtACBegin' */\n        state.push(RT);\n        pass = true;\n        break;\n\n      case 0x0026:\n        /* 'BrtACEnd' */\n        state.pop();\n        pass = false;\n        break;\n\n      case 0x0010:\n        /* 'BrtFRTArchID$' */\n        break;\n\n      default:\n        if (R.T) {\n          /* empty */\n        } else if (!pass || opts.WTF && state[state.length - 1] != 0x0025\n        /* BrtACBegin */\n        && state[state.length - 1] != 0x0023\n        /* BrtFRTBegin */\n        ) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\n    }\n  }, opts);\n  parse_wb_defaults(wb); // $FlowIgnore\n\n  wb.Names = Names;\n  wb\n  /*:any*/\n  .supbooks = supbooks;\n  return wb;\n}\n\nfunction write_BUNDLESHS(ba, wb\n/*::, opts*/\n) {\n  write_record(ba, 0x008F\n  /* BrtBeginBundleShs */\n  );\n\n  for (var idx = 0; idx != wb.SheetNames.length; ++idx) {\n    var viz = wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx] && wb.Workbook.Sheets[idx].Hidden || 0;\n    var d = {\n      Hidden: viz,\n      iTabID: idx + 1,\n      strRelID: 'rId' + (idx + 1),\n      name: wb.SheetNames[idx]\n    };\n    write_record(ba, 0x009C\n    /* BrtBundleSh */\n    , write_BrtBundleSh(d));\n  }\n\n  write_record(ba, 0x0090\n  /* BrtEndBundleShs */\n  );\n}\n/* [MS-XLSB] 2.4.649 BrtFileVersion */\n\n\nfunction write_BrtFileVersion(data, o) {\n  if (!o) o = new_buf(127);\n\n  for (var i = 0; i != 4; ++i) {\n    o.write_shift(4, 0);\n  }\n\n  write_XLWideString(\"SheetJS\", o);\n  write_XLWideString(XLSX.version, o);\n  write_XLWideString(XLSX.version, o);\n  write_XLWideString(\"7262\", o);\n  return o.length > o.l ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.4.301 BrtBookView */\n\n\nfunction write_BrtBookView(idx, o) {\n  if (!o) o = new_buf(29);\n  o.write_shift(-4, 0);\n  o.write_shift(-4, 460);\n  o.write_shift(4, 28800);\n  o.write_shift(4, 17600);\n  o.write_shift(4, 500);\n  o.write_shift(4, idx);\n  o.write_shift(4, idx);\n  var flags = 0x78;\n  o.write_shift(1, flags);\n  return o.length > o.l ? o.slice(0, o.l) : o;\n}\n\nfunction write_BOOKVIEWS(ba, wb\n/*::, opts*/\n) {\n  /* required if hidden tab appears before visible tab */\n  if (!wb.Workbook || !wb.Workbook.Sheets) return;\n  var sheets = wb.Workbook.Sheets;\n  var i = 0,\n      vistab = -1,\n      hidden = -1;\n\n  for (; i < sheets.length; ++i) {\n    if (!sheets[i] || !sheets[i].Hidden && vistab == -1) vistab = i;else if (sheets[i].Hidden == 1 && hidden == -1) hidden = i;\n  }\n\n  if (hidden > vistab) return;\n  write_record(ba, 0x0087\n  /* BrtBeginBookViews */\n  );\n  write_record(ba, 0x009E\n  /* BrtBookView */\n  , write_BrtBookView(vistab));\n  /* 1*(BrtBookView *FRT) */\n\n  write_record(ba, 0x0088\n  /* BrtEndBookViews */\n  );\n}\n/* [MS-XLSB] 2.4.305 BrtCalcProp */\n\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\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 */\n\n\nfunction write_wb_bin(wb, opts) {\n  var ba = buf_array();\n  write_record(ba, 0x0083\n  /* BrtBeginBook */\n  );\n  write_record(ba, 0x0080\n  /* BrtFileVersion */\n  , write_BrtFileVersion());\n  /* [[BrtFileSharingIso] BrtFileSharing] */\n\n  write_record(ba, 0x0099\n  /* BrtWbProp */\n  , write_BrtWbProp(wb.Workbook && wb.Workbook.WBProps || null));\n  /* [ACABSPATH] */\n\n  /* [[BrtBookProtectionIso] BrtBookProtection] */\n\n  write_BOOKVIEWS(ba, wb, opts);\n  write_BUNDLESHS(ba, wb, opts);\n  /* [FNGROUP] */\n\n  /* [EXTERNALS] */\n\n  /* *BrtName */\n\n  /* write_record(ba, 0x009D BrtCalcProp, write_BrtCalcProp()); */\n\n  /* [BrtOleSize] */\n\n  /* *(BrtUserBookView *FRT) */\n\n  /* [PIVOTCACHEIDS] */\n\n  /* [BrtWbFactoid] */\n\n  /* [SMARTTAGTYPES] */\n\n  /* [BrtWebOpt] */\n\n  /* write_record(ba, 0x009B BrtFileRecover, write_BrtFileRecover()); */\n\n  /* [WEBPUBITEMS] */\n\n  /* [CRERRS] */\n\n  /* FRTWORKBOOK */\n\n  write_record(ba, 0x0084\n  /* BrtEndBook */\n  );\n  return ba.end();\n}\n\nfunction parse_wb(data, name\n/*:string*/\n, opts)\n/*:WorkbookFile*/\n{\n  if (name.slice(-4) === \".bin\") return parse_wb_bin(data\n  /*:any*/\n  , opts);\n  return parse_wb_xml(data\n  /*:any*/\n  , opts);\n}\n\nfunction parse_ws(data, name\n/*:string*/\n, idx\n/*:number*/\n, opts, rels, wb, themes, styles)\n/*:Worksheet*/\n{\n  if (name.slice(-4) === \".bin\") return parse_ws_bin(data\n  /*:any*/\n  , opts, idx, rels, wb, themes, styles);\n  return parse_ws_xml(data\n  /*:any*/\n  , opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_cs(data, name\n/*:string*/\n, idx\n/*:number*/\n, opts, rels, wb, themes, styles)\n/*:Worksheet*/\n{\n  if (name.slice(-4) === \".bin\") return parse_cs_bin(data\n  /*:any*/\n  , opts, idx, rels, wb, themes, styles);\n  return parse_cs_xml(data\n  /*:any*/\n  , opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_ms(data, name\n/*:string*/\n, idx\n/*:number*/\n, opts, rels, wb, themes, styles)\n/*:Worksheet*/\n{\n  if (name.slice(-4) === \".bin\") return parse_ms_bin(data\n  /*:any*/\n  , opts, idx, rels, wb, themes, styles);\n  return parse_ms_xml(data\n  /*:any*/\n  , opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_ds(data, name\n/*:string*/\n, idx\n/*:number*/\n, opts, rels, wb, themes, styles)\n/*:Worksheet*/\n{\n  if (name.slice(-4) === \".bin\") return parse_ds_bin(data\n  /*:any*/\n  , opts, idx, rels, wb, themes, styles);\n  return parse_ds_xml(data\n  /*:any*/\n  , opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_sty(data, name\n/*:string*/\n, themes, opts) {\n  if (name.slice(-4) === \".bin\") return parse_sty_bin(data\n  /*:any*/\n  , themes, opts);\n  return parse_sty_xml(data\n  /*:any*/\n  , themes, opts);\n}\n\nfunction parse_theme(data\n/*:string*/\n, name\n/*:string*/\n, opts) {\n  return parse_theme_xml(data, opts);\n}\n\nfunction parse_sst(data, name\n/*:string*/\n, opts)\n/*:SST*/\n{\n  if (name.slice(-4) === \".bin\") return parse_sst_bin(data\n  /*:any*/\n  , opts);\n  return parse_sst_xml(data\n  /*:any*/\n  , opts);\n}\n\nfunction parse_cmnt(data, name\n/*:string*/\n, opts)\n/*:Array<RawComment>*/\n{\n  if (name.slice(-4) === \".bin\") return parse_comments_bin(data\n  /*:any*/\n  , opts);\n  return parse_comments_xml(data\n  /*:any*/\n  , opts);\n}\n\nfunction parse_cc(data, name\n/*:string*/\n, opts) {\n  if (name.slice(-4) === \".bin\") return parse_cc_bin(data\n  /*:any*/\n  , name, opts);\n  return parse_cc_xml(data\n  /*:any*/\n  , name, opts);\n}\n\nfunction parse_xlink(data, rel, name\n/*:string*/\n, opts) {\n  if (name.slice(-4) === \".bin\") return parse_xlink_bin(data\n  /*:any*/\n  , rel, name, opts);\n  return parse_xlink_xml(data\n  /*:any*/\n  , rel, name, opts);\n}\n\nfunction parse_xlmeta(data, name\n/*:string*/\n, opts) {\n  if (name.slice(-4) === \".bin\") return parse_xlmeta_bin(data\n  /*:any*/\n  , name, opts);\n  return parse_xlmeta_xml(data\n  /*:any*/\n  , name, opts);\n}\n\nfunction write_wb(wb, name\n/*:string*/\n, opts) {\n  return (name.slice(-4) === \".bin\" ? write_wb_bin : write_wb_xml)(wb, opts);\n}\n\nfunction write_ws(data\n/*:number*/\n, name\n/*:string*/\n, opts, wb\n/*:Workbook*/\n, rels) {\n  return (name.slice(-4) === \".bin\" ? write_ws_bin : write_ws_xml)(data, opts, wb, rels);\n} // eslint-disable-next-line no-unused-vars\n\n\nfunction write_cs(data\n/*:number*/\n, name\n/*:string*/\n, opts, wb\n/*:Workbook*/\n, rels) {\n  return (name.slice(-4) === \".bin\" ? write_cs_bin : write_cs_xml)(data, opts, wb, rels);\n}\n\nfunction write_sty(data, name\n/*:string*/\n, opts) {\n  return (name.slice(-4) === \".bin\" ? write_sty_bin : write_sty_xml)(data, opts);\n}\n\nfunction write_sst(data\n/*:SST*/\n, name\n/*:string*/\n, opts) {\n  return (name.slice(-4) === \".bin\" ? write_sst_bin : write_sst_xml)(data, opts);\n}\n\nfunction write_cmnt(data\n/*:Array<any>*/\n, name\n/*:string*/\n, opts) {\n  return (name.slice(-4) === \".bin\" ? write_comments_bin : write_comments_xml)(data, opts);\n}\n/*\nfunction write_cc(data, name:string, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_cc_bin : write_cc_xml)(data, opts);\n}\n*/\n\n\nfunction write_xlmeta(name\n/*:string*/\n) {\n  return (name.slice(-4) === \".bin\" ? write_xlmeta_bin : write_xlmeta_xml)();\n}\n\nvar attregexg2 = /([\\w:]+)=((?:\")([^\"]*)(?:\")|(?:')([^']*)(?:'))/g;\nvar attregex2 = /([\\w:]+)=((?:\")(?:[^\"]*)(?:\")|(?:')(?:[^']*)(?:'))/;\n\nfunction xlml_parsexmltag(tag\n/*:string*/\n, skip_root\n/*:?boolean*/\n) {\n  var words = tag.split(/\\s+/);\n  var z\n  /*:any*/\n  = []\n  /*:any*/\n  ;\n  if (!skip_root) z[0] = words[0];\n  if (words.length === 1) return z;\n  var m = tag.match(attregexg2),\n      y,\n      j,\n      w,\n      i;\n  if (m) for (i = 0; i != m.length; ++i) {\n    y = m[i].match(attregex2);\n    /*:: if(!y || !y[2]) continue; */\n\n    if ((j = y[1].indexOf(\":\")) === -1) z[y[1]] = y[2].slice(1, y[2].length - 1);else {\n      if (y[1].slice(0, 6) === \"xmlns:\") w = \"xmlns\" + y[1].slice(6);else w = y[1].slice(j + 1);\n      z[w] = y[2].slice(1, y[2].length - 1);\n    }\n  }\n  return z;\n}\n\nfunction xlml_parsexmltagobj(tag\n/*:string*/\n) {\n  var words = tag.split(/\\s+/);\n  var z = {};\n  if (words.length === 1) return z;\n  var m = tag.match(attregexg2),\n      y,\n      j,\n      w,\n      i;\n  if (m) for (i = 0; i != m.length; ++i) {\n    y = m[i].match(attregex2);\n    /*:: if(!y || !y[2]) continue; */\n\n    if ((j = y[1].indexOf(\":\")) === -1) z[y[1]] = y[2].slice(1, y[2].length - 1);else {\n      if (y[1].slice(0, 6) === \"xmlns:\") w = \"xmlns\" + y[1].slice(6);else w = y[1].slice(j + 1);\n      z[w] = y[2].slice(1, y[2].length - 1);\n    }\n  }\n  return z;\n} // ----\n\n/* map from xlml named formats to SSF TODO: localize */\n\n\nvar XLMLFormatMap\n/*: {[string]:string}*/\n;\n\nfunction xlml_format(format, value)\n/*:string*/\n{\n  var fmt = XLMLFormatMap[format] || unescapexml(format);\n  if (fmt === \"General\") return SSF_general(value);\n  return SSF_format(fmt, value);\n}\n\nfunction xlml_set_custprop(Custprops, key, cp, val\n/*:string*/\n) {\n  var oval\n  /*:any*/\n  = val;\n\n  switch ((cp[0].match(/dt:dt=\"([\\w.]+)\"/) || [\"\", \"\"])[1]) {\n    case \"boolean\":\n      oval = parsexmlbool(val);\n      break;\n\n    case \"i2\":\n    case \"int\":\n      oval = parseInt(val, 10);\n      break;\n\n    case \"r4\":\n    case \"float\":\n      oval = parseFloat(val);\n      break;\n\n    case \"date\":\n    case \"dateTime.tz\":\n      oval = parseDate(val);\n      break;\n\n    case \"i8\":\n    case \"string\":\n    case \"fixed\":\n    case \"uuid\":\n    case \"bin.base64\":\n      break;\n\n    default:\n      throw new Error(\"bad custprop:\" + cp[0]);\n  }\n\n  Custprops[unescapexml(key)] = oval;\n}\n\nfunction safe_format_xlml(cell\n/*:Cell*/\n, nf, o) {\n  if (cell.t === 'z') return;\n  if (!o || o.cellText !== false) try {\n    if (cell.t === 'e') {\n      cell.w = cell.w || BErr[cell.v];\n    } else if (nf === \"General\") {\n      if (cell.t === 'n') {\n        if ((cell.v | 0) === cell.v) cell.w = cell.v.toString(10);else cell.w = SSF_general_num(cell.v);\n      } else cell.w = SSF_general(cell.v);\n    } else cell.w = xlml_format(nf || \"General\", cell.v);\n  } catch (e) {\n    if (o.WTF) throw e;\n  }\n\n  try {\n    var z = XLMLFormatMap[nf] || nf || \"General\";\n    if (o.cellNF) cell.z = z;\n\n    if (o.cellDates && cell.t == 'n' && fmt_is_date(z)) {\n      var _d = SSF_parse_date_code(cell.v);\n\n      if (_d) {\n        cell.t = 'd';\n        cell.v = new Date(_d.y, _d.m - 1, _d.d, _d.H, _d.M, _d.S, _d.u);\n      }\n    }\n  } catch (e) {\n    if (o.WTF) throw e;\n  }\n}\n\nfunction process_style_xlml(styles, stag, opts) {\n  if (opts.cellStyles) {\n    if (stag.Interior) {\n      var I = stag.Interior;\n      if (I.Pattern) I.patternType = XLMLPatternTypeMap[I.Pattern] || I.Pattern;\n    }\n  }\n\n  styles[stag.ID] = stag;\n}\n/* TODO: there must exist some form of OSP-blessed spec */\n\n\nfunction parse_xlml_data(xml, ss, data, cell\n/*:any*/\n, base, styles, csty, row, arrayf, o) {\n  var nf = \"General\",\n      sid = cell.StyleID,\n      S = {};\n  o = o || {};\n  var interiors = [];\n  var i = 0;\n  if (sid === undefined && row) sid = row.StyleID;\n  if (sid === undefined && csty) sid = csty.StyleID;\n\n  while (styles[sid] !== undefined) {\n    if (styles[sid].nf) nf = styles[sid].nf;\n    if (styles[sid].Interior) interiors.push(styles[sid].Interior);\n    if (!styles[sid].Parent) break;\n    sid = styles[sid].Parent;\n  }\n\n  switch (data.Type) {\n    case 'Boolean':\n      cell.t = 'b';\n      cell.v = parsexmlbool(xml);\n      break;\n\n    case 'String':\n      cell.t = 's';\n      cell.r = xlml_fixstr(unescapexml(xml));\n      cell.v = xml.indexOf(\"<\") > -1 ? unescapexml(ss || xml).replace(/<.*?>/g, \"\") : cell.r; // todo: BR etc\n\n      break;\n\n    case 'DateTime':\n      if (xml.slice(-1) != \"Z\") xml += \"Z\";\n      cell.v = (parseDate(xml) - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);\n      if (cell.v !== cell.v) cell.v = unescapexml(xml);else if (cell.v < 60) cell.v = cell.v - 1;\n      if (!nf || nf == \"General\") nf = \"yyyy-mm-dd\";\n\n    /* falls through */\n\n    case 'Number':\n      if (cell.v === undefined) cell.v = +xml;\n      if (!cell.t) cell.t = 'n';\n      break;\n\n    case 'Error':\n      cell.t = 'e';\n      cell.v = RBErr[xml];\n      if (o.cellText !== false) cell.w = xml;\n      break;\n\n    default:\n      if (xml == \"\" && ss == \"\") {\n        cell.t = 'z';\n      } else {\n        cell.t = 's';\n        cell.v = xlml_fixstr(ss || xml);\n      }\n\n      break;\n  }\n\n  safe_format_xlml(cell, nf, o);\n\n  if (o.cellFormula !== false) {\n    if (cell.Formula) {\n      var fstr = unescapexml(cell.Formula);\n      /* strictly speaking, the leading = is required but some writers omit */\n\n      if (fstr.charCodeAt(0) == 61\n      /* = */\n      ) fstr = fstr.slice(1);\n      cell.f = rc_to_a1(fstr, base);\n      delete cell.Formula;\n      if (cell.ArrayRange == \"RC\") cell.F = rc_to_a1(\"RC:RC\", base);else if (cell.ArrayRange) {\n        cell.F = rc_to_a1(cell.ArrayRange, base);\n        arrayf.push([safe_decode_range(cell.F), cell.F]);\n      }\n    } else {\n      for (i = 0; i < arrayf.length; ++i) {\n        if (base.r >= arrayf[i][0].s.r && base.r <= arrayf[i][0].e.r) if (base.c >= arrayf[i][0].s.c && base.c <= arrayf[i][0].e.c) cell.F = arrayf[i][1];\n      }\n    }\n  }\n\n  if (o.cellStyles) {\n    interiors.forEach(function (x) {\n      if (!S.patternType && x.patternType) S.patternType = x.patternType;\n    });\n    cell.s = S;\n  }\n\n  if (cell.StyleID !== undefined) cell.ixfe = cell.StyleID;\n}\n\nfunction xlml_clean_comment(comment\n/*:any*/\n) {\n  comment.t = comment.v || \"\";\n  comment.t = comment.t.replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\");\n  comment.v = comment.w = comment.ixfe = undefined;\n}\n/* TODO: Everything */\n\n\nfunction parse_xlml_xml(d, _opts)\n/*:Workbook*/\n{\n  var opts = _opts || {};\n  make_ssf();\n  var str = debom(xlml_normalize(d));\n\n  if (opts.type == 'binary' || opts.type == 'array' || opts.type == 'base64') {\n    if (typeof $cptable !== 'undefined') str = $cptable.utils.decode(65001, char_codes(str));else str = utf8read(str);\n  }\n\n  var opening = str.slice(0, 1024).toLowerCase(),\n      ishtml = false;\n  opening = opening.replace(/\".*?\"/g, \"\");\n\n  if ((opening.indexOf(\">\") & 1023) > Math.min(opening.indexOf(\",\") & 1023, opening.indexOf(\";\") & 1023)) {\n    var _o = dup(opts);\n\n    _o.type = \"string\";\n    return PRN.to_workbook(str, _o);\n  }\n\n  if (opening.indexOf(\"<?xml\") == -1) [\"html\", \"table\", \"head\", \"meta\", \"script\", \"style\", \"div\"].forEach(function (tag) {\n    if (opening.indexOf(\"<\" + tag) >= 0) ishtml = true;\n  });\n  if (ishtml) return html_to_workbook(str, opts);\n  XLMLFormatMap = {\n    \"General Number\": \"General\",\n    \"General Date\": table_fmt[22],\n    \"Long Date\": \"dddd, mmmm dd, yyyy\",\n    \"Medium Date\": table_fmt[15],\n    \"Short Date\": table_fmt[14],\n    \"Long Time\": table_fmt[19],\n    \"Medium Time\": table_fmt[18],\n    \"Short Time\": table_fmt[20],\n    \"Currency\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n    \"Fixed\": table_fmt[2],\n    \"Standard\": table_fmt[4],\n    \"Percent\": table_fmt[10],\n    \"Scientific\": table_fmt[11],\n    \"Yes/No\": '\"Yes\";\"Yes\";\"No\";@',\n    \"True/False\": '\"True\";\"True\";\"False\";@',\n    \"On/Off\": '\"Yes\";\"Yes\";\"No\";@'\n  }\n  /*:any*/\n  ;\n  var Rn;\n  var state = [],\n      tmp;\n  if (DENSE != null && opts.dense == null) opts.dense = DENSE;\n  var sheets = {},\n      sheetnames\n  /*:Array<string>*/\n  = [],\n      cursheet\n  /*:Worksheet*/\n  = opts.dense ? [] : {},\n      sheetname = \"\";\n  var cell = {}\n  /*:any*/\n  ,\n      row = {}; // eslint-disable-line no-unused-vars\n\n  var dtag = xlml_parsexmltag('<Data ss:Type=\"String\">'),\n      didx = 0;\n  var c = 0,\n      r = 0;\n  var refguess\n  /*:Range*/\n  = {\n    s: {\n      r: 2000000,\n      c: 2000000\n    },\n    e: {\n      r: 0,\n      c: 0\n    }\n  };\n  var styles = {},\n      stag = {};\n  var ss = \"\",\n      fidx = 0;\n  var merges\n  /*:Array<Range>*/\n  = [];\n  var Props = {},\n      Custprops = {},\n      pidx = 0,\n      cp = [];\n  var comments\n  /*:Array<Comment>*/\n  = [],\n      comment\n  /*:Comment*/\n  = {}\n  /*:any*/\n  ;\n  var cstys = [],\n      csty,\n      seencol = false;\n  var arrayf\n  /*:Array<[Range, string]>*/\n  = [];\n  var rowinfo\n  /*:Array<RowInfo>*/\n  = [],\n      rowobj = {},\n      cc = 0,\n      rr = 0;\n  var Workbook\n  /*:WBWBProps*/\n  = {\n    Sheets: [],\n    WBProps: {\n      date1904: false\n    }\n  }\n  /*:any*/\n  ,\n      wsprops = {};\n  xlmlregex.lastIndex = 0;\n  str = str.replace(/<!--([\\s\\S]*?)-->/mg, \"\");\n  var raw_Rn3 = \"\";\n\n  while (Rn = xlmlregex.exec(str)) {\n    switch (Rn[3] = (raw_Rn3 = Rn[3]).toLowerCase()) {\n      case 'data'\n      /*case 'Data'*/\n      :\n        if (raw_Rn3 == \"data\") {\n          if (Rn[1] === '/') {\n            if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n          } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') state.push([Rn[3], true]);\n\n          break;\n        }\n\n        if (state[state.length - 1][1]) break;\n        if (Rn[1] === '/') parse_xlml_data(str.slice(didx, Rn.index), ss, dtag, state[state.length - 1][0] ==\n        /*\"Comment\"*/\n        \"comment\" ? comment : cell, {\n          c: c,\n          r: r\n        }, styles, cstys[c], row, arrayf, opts);else {\n          ss = \"\";\n          dtag = xlml_parsexmltag(Rn[0]);\n          didx = Rn.index + Rn[0].length;\n        }\n        break;\n\n      case 'cell'\n      /*case 'Cell'*/\n      :\n        if (Rn[1] === '/') {\n          if (comments.length > 0) cell.c = comments;\n\n          if ((!opts.sheetRows || opts.sheetRows > r) && cell.v !== undefined) {\n            if (opts.dense) {\n              if (!cursheet[r]) cursheet[r] = [];\n              cursheet[r][c] = cell;\n            } else cursheet[encode_col(c) + encode_row(r)] = cell;\n          }\n\n          if (cell.HRef) {\n            cell.l = {\n              Target: unescapexml(cell.HRef)\n            }\n            /*:any*/\n            ;\n            if (cell.HRefScreenTip) cell.l.Tooltip = cell.HRefScreenTip;\n            delete cell.HRef;\n            delete cell.HRefScreenTip;\n          }\n\n          if (cell.MergeAcross || cell.MergeDown) {\n            cc = c + (parseInt(cell.MergeAcross, 10) | 0);\n            rr = r + (parseInt(cell.MergeDown, 10) | 0);\n            merges.push({\n              s: {\n                c: c,\n                r: r\n              },\n              e: {\n                c: cc,\n                r: rr\n              }\n            });\n          }\n\n          if (!opts.sheetStubs) {\n            if (cell.MergeAcross) c = cc + 1;else ++c;\n          } else if (cell.MergeAcross || cell.MergeDown) {\n            /*:: if(!cc) cc = 0; if(!rr) rr = 0; */\n            for (var cma = c; cma <= cc; ++cma) {\n              for (var cmd = r; cmd <= rr; ++cmd) {\n                if (cma > c || cmd > r) {\n                  if (opts.dense) {\n                    if (!cursheet[cmd]) cursheet[cmd] = [];\n                    cursheet[cmd][cma] = {\n                      t: 'z'\n                    };\n                  } else cursheet[encode_col(cma) + encode_row(cmd)] = {\n                    t: 'z'\n                  };\n                }\n              }\n            }\n\n            c = cc + 1;\n          } else ++c;\n        } else {\n          cell = xlml_parsexmltagobj(Rn[0]);\n          if (cell.Index) c = +cell.Index - 1;\n          if (c < refguess.s.c) refguess.s.c = c;\n          if (c > refguess.e.c) refguess.e.c = c;\n          if (Rn[0].slice(-2) === \"/>\") ++c;\n          comments = [];\n        }\n\n        break;\n\n      case 'row'\n      /*case 'Row'*/\n      :\n        if (Rn[1] === '/' || Rn[0].slice(-2) === \"/>\") {\n          if (r < refguess.s.r) refguess.s.r = r;\n          if (r > refguess.e.r) refguess.e.r = r;\n\n          if (Rn[0].slice(-2) === \"/>\") {\n            row = xlml_parsexmltag(Rn[0]);\n            if (row.Index) r = +row.Index - 1;\n          }\n\n          c = 0;\n          ++r;\n        } else {\n          row = xlml_parsexmltag(Rn[0]);\n          if (row.Index) r = +row.Index - 1;\n          rowobj = {};\n\n          if (row.AutoFitHeight == \"0\" || row.Height) {\n            rowobj.hpx = parseInt(row.Height, 10);\n            rowobj.hpt = px2pt(rowobj.hpx);\n            rowinfo[r] = rowobj;\n          }\n\n          if (row.Hidden == \"1\") {\n            rowobj.hidden = true;\n            rowinfo[r] = rowobj;\n          }\n        }\n\n        break;\n\n      case 'worksheet'\n      /*case 'Worksheet'*/\n      :\n        /* TODO: read range from FullRows/FullColumns */\n        if (Rn[1] === '/') {\n          if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n          sheetnames.push(sheetname);\n\n          if (refguess.s.r <= refguess.e.r && refguess.s.c <= refguess.e.c) {\n            cursheet[\"!ref\"] = encode_range(refguess);\n\n            if (opts.sheetRows && opts.sheetRows <= refguess.e.r) {\n              cursheet[\"!fullref\"] = cursheet[\"!ref\"];\n              refguess.e.r = opts.sheetRows - 1;\n              cursheet[\"!ref\"] = encode_range(refguess);\n            }\n          }\n\n          if (merges.length) cursheet[\"!merges\"] = merges;\n          if (cstys.length > 0) cursheet[\"!cols\"] = cstys;\n          if (rowinfo.length > 0) cursheet[\"!rows\"] = rowinfo;\n          sheets[sheetname] = cursheet;\n        } else {\n          refguess = {\n            s: {\n              r: 2000000,\n              c: 2000000\n            },\n            e: {\n              r: 0,\n              c: 0\n            }\n          };\n          r = c = 0;\n          state.push([Rn[3], false]);\n          tmp = xlml_parsexmltag(Rn[0]);\n          sheetname = unescapexml(tmp.Name);\n          cursheet = opts.dense ? [] : {};\n          merges = [];\n          arrayf = [];\n          rowinfo = [];\n          wsprops = {\n            name: sheetname,\n            Hidden: 0\n          };\n          Workbook.Sheets.push(wsprops);\n        }\n\n        break;\n\n      case 'table'\n      /*case 'Table'*/\n      :\n        if (Rn[1] === '/') {\n          if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n        } else if (Rn[0].slice(-2) == \"/>\") break;else {\n          state.push([Rn[3], false]);\n          cstys = [];\n          seencol = false;\n        }\n\n        break;\n\n      case 'style'\n      /*case 'Style'*/\n      :\n        if (Rn[1] === '/') process_style_xlml(styles, stag, opts);else stag = xlml_parsexmltag(Rn[0]);\n        break;\n\n      case 'numberformat'\n      /*case 'NumberFormat'*/\n      :\n        stag.nf = unescapexml(xlml_parsexmltag(Rn[0]).Format || \"General\");\n        if (XLMLFormatMap[stag.nf]) stag.nf = XLMLFormatMap[stag.nf];\n\n        for (var ssfidx = 0; ssfidx != 0x188; ++ssfidx) {\n          if (table_fmt[ssfidx] == stag.nf) break;\n        }\n\n        if (ssfidx == 0x188) for (ssfidx = 0x39; ssfidx != 0x188; ++ssfidx) {\n          if (table_fmt[ssfidx] == null) {\n            SSF_load(stag.nf, ssfidx);\n            break;\n          }\n        }\n        break;\n\n      case 'column'\n      /*case 'Column'*/\n      :\n        if (state[state.length - 1][0] !==\n        /*'Table'*/\n        'table') break;\n        csty = xlml_parsexmltag(Rn[0]);\n\n        if (csty.Hidden) {\n          csty.hidden = true;\n          delete csty.Hidden;\n        }\n\n        if (csty.Width) csty.wpx = parseInt(csty.Width, 10);\n\n        if (!seencol && csty.wpx > 10) {\n          seencol = true;\n          MDW = DEF_MDW; //find_mdw_wpx(csty.wpx);\n\n          for (var _col = 0; _col < cstys.length; ++_col) {\n            if (cstys[_col]) process_col(cstys[_col]);\n          }\n        }\n\n        if (seencol) process_col(csty);\n        cstys[csty.Index - 1 || cstys.length] = csty;\n\n        for (var i = 0; i < +csty.Span; ++i) {\n          cstys[cstys.length] = dup(csty);\n        }\n\n        break;\n\n      case 'namedrange'\n      /*case 'NamedRange'*/\n      :\n        if (Rn[1] === '/') break;\n        if (!Workbook.Names) Workbook.Names = [];\n\n        var _NamedRange = parsexmltag(Rn[0]);\n\n        var _DefinedName\n        /*:DefinedName*/\n        = {\n          Name: _NamedRange.Name,\n          Ref: rc_to_a1(_NamedRange.RefersTo.slice(1), {\n            r: 0,\n            c: 0\n          })\n        }\n        /*:any*/\n        ;\n        if (Workbook.Sheets.length > 0) _DefinedName.Sheet = Workbook.Sheets.length - 1;\n        /*:: if(Workbook.Names) */\n\n        Workbook.Names.push(_DefinedName);\n        break;\n\n      case 'namedcell'\n      /*case 'NamedCell'*/\n      :\n        break;\n\n      case 'b'\n      /*case 'B'*/\n      :\n        break;\n\n      case 'i'\n      /*case 'I'*/\n      :\n        break;\n\n      case 'u'\n      /*case 'U'*/\n      :\n        break;\n\n      case 's'\n      /*case 'S'*/\n      :\n        break;\n\n      case 'em'\n      /*case 'EM'*/\n      :\n        break;\n\n      case 'h2'\n      /*case 'H2'*/\n      :\n        break;\n\n      case 'h3'\n      /*case 'H3'*/\n      :\n        break;\n\n      case 'sub'\n      /*case 'Sub'*/\n      :\n        break;\n\n      case 'sup'\n      /*case 'Sup'*/\n      :\n        break;\n\n      case 'span'\n      /*case 'Span'*/\n      :\n        break;\n\n      case 'alignment'\n      /*case 'Alignment'*/\n      :\n        break;\n\n      case 'borders'\n      /*case 'Borders'*/\n      :\n        break;\n\n      case 'border'\n      /*case 'Border'*/\n      :\n        break;\n\n      case 'font'\n      /*case 'Font'*/\n      :\n        if (Rn[0].slice(-2) === \"/>\") break;else if (Rn[1] === \"/\") ss += str.slice(fidx, Rn.index);else fidx = Rn.index + Rn[0].length;\n        break;\n\n      case 'interior'\n      /*case 'Interior'*/\n      :\n        if (!opts.cellStyles) break;\n        stag.Interior = xlml_parsexmltag(Rn[0]);\n        break;\n\n      case 'protection'\n      /*case 'Protection'*/\n      :\n        break;\n\n      case 'author'\n      /*case 'Author'*/\n      :\n      case 'title'\n      /*case 'Title'*/\n      :\n      case 'description'\n      /*case 'Description'*/\n      :\n      case 'created'\n      /*case 'Created'*/\n      :\n      case 'keywords'\n      /*case 'Keywords'*/\n      :\n      case 'subject'\n      /*case 'Subject'*/\n      :\n      case 'category'\n      /*case 'Category'*/\n      :\n      case 'company'\n      /*case 'Company'*/\n      :\n      case 'lastauthor'\n      /*case 'LastAuthor'*/\n      :\n      case 'lastsaved'\n      /*case 'LastSaved'*/\n      :\n      case 'lastprinted'\n      /*case 'LastPrinted'*/\n      :\n      case 'version'\n      /*case 'Version'*/\n      :\n      case 'revision'\n      /*case 'Revision'*/\n      :\n      case 'totaltime'\n      /*case 'TotalTime'*/\n      :\n      case 'hyperlinkbase'\n      /*case 'HyperlinkBase'*/\n      :\n      case 'manager'\n      /*case 'Manager'*/\n      :\n      case 'contentstatus'\n      /*case 'ContentStatus'*/\n      :\n      case 'identifier'\n      /*case 'Identifier'*/\n      :\n      case 'language'\n      /*case 'Language'*/\n      :\n      case 'appname'\n      /*case 'AppName'*/\n      :\n        if (Rn[0].slice(-2) === \"/>\") break;else if (Rn[1] === \"/\") xlml_set_prop(Props, raw_Rn3, str.slice(pidx, Rn.index));else pidx = Rn.index + Rn[0].length;\n        break;\n\n      case 'paragraphs'\n      /*case 'Paragraphs'*/\n      :\n        break;\n\n      case 'styles'\n      /*case 'Styles'*/\n      :\n      case 'workbook'\n      /*case 'Workbook'*/\n      :\n        if (Rn[1] === '/') {\n          if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n        } else state.push([Rn[3], false]);\n\n        break;\n\n      case 'comment'\n      /*case 'Comment'*/\n      :\n        if (Rn[1] === '/') {\n          if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n          xlml_clean_comment(comment);\n          comments.push(comment);\n        } else {\n          state.push([Rn[3], false]);\n          tmp = xlml_parsexmltag(Rn[0]);\n          comment = {\n            a: tmp.Author\n          }\n          /*:any*/\n          ;\n        }\n\n        break;\n\n      case 'autofilter'\n      /*case 'AutoFilter'*/\n      :\n        if (Rn[1] === '/') {\n          if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n        } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') {\n          var AutoFilter = xlml_parsexmltag(Rn[0]);\n          cursheet['!autofilter'] = {\n            ref: rc_to_a1(AutoFilter.Range).replace(/\\$/g, \"\")\n          };\n          state.push([Rn[3], true]);\n        }\n\n        break;\n\n      case 'name'\n      /*case 'Name'*/\n      :\n        break;\n\n      case 'datavalidation'\n      /*case 'DataValidation'*/\n      :\n        if (Rn[1] === '/') {\n          if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n        } else {\n          if (Rn[0].charAt(Rn[0].length - 2) !== '/') state.push([Rn[3], true]);\n        }\n\n        break;\n\n      case 'pixelsperinch'\n      /*case 'PixelsPerInch'*/\n      :\n        break;\n\n      case 'componentoptions'\n      /*case 'ComponentOptions'*/\n      :\n      case 'documentproperties'\n      /*case 'DocumentProperties'*/\n      :\n      case 'customdocumentproperties'\n      /*case 'CustomDocumentProperties'*/\n      :\n      case 'officedocumentsettings'\n      /*case 'OfficeDocumentSettings'*/\n      :\n      case 'pivottable'\n      /*case 'PivotTable'*/\n      :\n      case 'pivotcache'\n      /*case 'PivotCache'*/\n      :\n      case 'names'\n      /*case 'Names'*/\n      :\n      case 'mapinfo'\n      /*case 'MapInfo'*/\n      :\n      case 'pagebreaks'\n      /*case 'PageBreaks'*/\n      :\n      case 'querytable'\n      /*case 'QueryTable'*/\n      :\n      case 'sorting'\n      /*case 'Sorting'*/\n      :\n      case 'schema'\n      /*case 'Schema'*/\n      : //case 'data' /*case 'data'*/:\n\n      case 'conditionalformatting'\n      /*case 'ConditionalFormatting'*/\n      :\n      case 'smarttagtype'\n      /*case 'SmartTagType'*/\n      :\n      case 'smarttags'\n      /*case 'SmartTags'*/\n      :\n      case 'excelworkbook'\n      /*case 'ExcelWorkbook'*/\n      :\n      case 'workbookoptions'\n      /*case 'WorkbookOptions'*/\n      :\n      case 'worksheetoptions'\n      /*case 'WorksheetOptions'*/\n      :\n        if (Rn[1] === '/') {\n          if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n        } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') state.push([Rn[3], true]);\n\n        break;\n\n      case 'null'\n      /*case 'Null'*/\n      :\n        break;\n\n      default:\n        /* FODS file root is <office:document> */\n        if (state.length == 0 && Rn[3] == \"document\") return parse_fods(str, opts);\n        /* UOS file root is <uof:UOF> */\n\n        if (state.length == 0 && Rn[3] == \"uof\"\n        /*\"UOF\"*/\n        ) return parse_fods(str, opts);\n        var seen = true;\n\n        switch (state[state.length - 1][0]) {\n          /* OfficeDocumentSettings */\n          case 'officedocumentsettings'\n          /*case 'OfficeDocumentSettings'*/\n          :\n            switch (Rn[3]) {\n              case 'allowpng'\n              /*case 'AllowPNG'*/\n              :\n                break;\n\n              case 'removepersonalinformation'\n              /*case 'RemovePersonalInformation'*/\n              :\n                break;\n\n              case 'downloadcomponents'\n              /*case 'DownloadComponents'*/\n              :\n                break;\n\n              case 'locationofcomponents'\n              /*case 'LocationOfComponents'*/\n              :\n                break;\n\n              case 'colors'\n              /*case 'Colors'*/\n              :\n                break;\n\n              case 'color'\n              /*case 'Color'*/\n              :\n                break;\n\n              case 'index'\n              /*case 'Index'*/\n              :\n                break;\n\n              case 'rgb'\n              /*case 'RGB'*/\n              :\n                break;\n\n              case 'targetscreensize'\n              /*case 'TargetScreenSize'*/\n              :\n                break;\n\n              case 'readonlyrecommended'\n              /*case 'ReadOnlyRecommended'*/\n              :\n                break;\n\n              default:\n                seen = false;\n            }\n\n            break;\n\n          /* ComponentOptions */\n\n          case 'componentoptions'\n          /*case 'ComponentOptions'*/\n          :\n            switch (Rn[3]) {\n              case 'toolbar'\n              /*case 'Toolbar'*/\n              :\n                break;\n\n              case 'hideofficelogo'\n              /*case 'HideOfficeLogo'*/\n              :\n                break;\n\n              case 'spreadsheetautofit'\n              /*case 'SpreadsheetAutoFit'*/\n              :\n                break;\n\n              case 'label'\n              /*case 'Label'*/\n              :\n                break;\n\n              case 'caption'\n              /*case 'Caption'*/\n              :\n                break;\n\n              case 'maxheight'\n              /*case 'MaxHeight'*/\n              :\n                break;\n\n              case 'maxwidth'\n              /*case 'MaxWidth'*/\n              :\n                break;\n\n              case 'nextsheetnumber'\n              /*case 'NextSheetNumber'*/\n              :\n                break;\n\n              default:\n                seen = false;\n            }\n\n            break;\n\n          /* ExcelWorkbook */\n\n          case 'excelworkbook'\n          /*case 'ExcelWorkbook'*/\n          :\n            switch (Rn[3]) {\n              case 'date1904'\n              /*case 'Date1904'*/\n              :\n                /*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */\n                Workbook.WBProps.date1904 = true;\n                break;\n\n              case 'windowheight'\n              /*case 'WindowHeight'*/\n              :\n                break;\n\n              case 'windowwidth'\n              /*case 'WindowWidth'*/\n              :\n                break;\n\n              case 'windowtopx'\n              /*case 'WindowTopX'*/\n              :\n                break;\n\n              case 'windowtopy'\n              /*case 'WindowTopY'*/\n              :\n                break;\n\n              case 'tabratio'\n              /*case 'TabRatio'*/\n              :\n                break;\n\n              case 'protectstructure'\n              /*case 'ProtectStructure'*/\n              :\n                break;\n\n              case 'protectwindow'\n              /*case 'ProtectWindow'*/\n              :\n                break;\n\n              case 'protectwindows'\n              /*case 'ProtectWindows'*/\n              :\n                break;\n\n              case 'activesheet'\n              /*case 'ActiveSheet'*/\n              :\n                break;\n\n              case 'displayinknotes'\n              /*case 'DisplayInkNotes'*/\n              :\n                break;\n\n              case 'firstvisiblesheet'\n              /*case 'FirstVisibleSheet'*/\n              :\n                break;\n\n              case 'supbook'\n              /*case 'SupBook'*/\n              :\n                break;\n\n              case 'sheetname'\n              /*case 'SheetName'*/\n              :\n                break;\n\n              case 'sheetindex'\n              /*case 'SheetIndex'*/\n              :\n                break;\n\n              case 'sheetindexfirst'\n              /*case 'SheetIndexFirst'*/\n              :\n                break;\n\n              case 'sheetindexlast'\n              /*case 'SheetIndexLast'*/\n              :\n                break;\n\n              case 'dll'\n              /*case 'Dll'*/\n              :\n                break;\n\n              case 'acceptlabelsinformulas'\n              /*case 'AcceptLabelsInFormulas'*/\n              :\n                break;\n\n              case 'donotsavelinkvalues'\n              /*case 'DoNotSaveLinkValues'*/\n              :\n                break;\n\n              case 'iteration'\n              /*case 'Iteration'*/\n              :\n                break;\n\n              case 'maxiterations'\n              /*case 'MaxIterations'*/\n              :\n                break;\n\n              case 'maxchange'\n              /*case 'MaxChange'*/\n              :\n                break;\n\n              case 'path'\n              /*case 'Path'*/\n              :\n                break;\n\n              case 'xct'\n              /*case 'Xct'*/\n              :\n                break;\n\n              case 'count'\n              /*case 'Count'*/\n              :\n                break;\n\n              case 'selectedsheets'\n              /*case 'SelectedSheets'*/\n              :\n                break;\n\n              case 'calculation'\n              /*case 'Calculation'*/\n              :\n                break;\n\n              case 'uncalced'\n              /*case 'Uncalced'*/\n              :\n                break;\n\n              case 'startupprompt'\n              /*case 'StartupPrompt'*/\n              :\n                break;\n\n              case 'crn'\n              /*case 'Crn'*/\n              :\n                break;\n\n              case 'externname'\n              /*case 'ExternName'*/\n              :\n                break;\n\n              case 'formula'\n              /*case 'Formula'*/\n              :\n                break;\n\n              case 'colfirst'\n              /*case 'ColFirst'*/\n              :\n                break;\n\n              case 'collast'\n              /*case 'ColLast'*/\n              :\n                break;\n\n              case 'wantadvise'\n              /*case 'WantAdvise'*/\n              :\n                break;\n\n              case 'boolean'\n              /*case 'Boolean'*/\n              :\n                break;\n\n              case 'error'\n              /*case 'Error'*/\n              :\n                break;\n\n              case 'text'\n              /*case 'Text'*/\n              :\n                break;\n\n              case 'ole'\n              /*case 'OLE'*/\n              :\n                break;\n\n              case 'noautorecover'\n              /*case 'NoAutoRecover'*/\n              :\n                break;\n\n              case 'publishobjects'\n              /*case 'PublishObjects'*/\n              :\n                break;\n\n              case 'donotcalculatebeforesave'\n              /*case 'DoNotCalculateBeforeSave'*/\n              :\n                break;\n\n              case 'number'\n              /*case 'Number'*/\n              :\n                break;\n\n              case 'refmoder1c1'\n              /*case 'RefModeR1C1'*/\n              :\n                break;\n\n              case 'embedsavesmarttags'\n              /*case 'EmbedSaveSmartTags'*/\n              :\n                break;\n\n              default:\n                seen = false;\n            }\n\n            break;\n\n          /* WorkbookOptions */\n\n          case 'workbookoptions'\n          /*case 'WorkbookOptions'*/\n          :\n            switch (Rn[3]) {\n              case 'owcversion'\n              /*case 'OWCVersion'*/\n              :\n                break;\n\n              case 'height'\n              /*case 'Height'*/\n              :\n                break;\n\n              case 'width'\n              /*case 'Width'*/\n              :\n                break;\n\n              default:\n                seen = false;\n            }\n\n            break;\n\n          /* WorksheetOptions */\n\n          case 'worksheetoptions'\n          /*case 'WorksheetOptions'*/\n          :\n            switch (Rn[3]) {\n              case 'visible'\n              /*case 'Visible'*/\n              :\n                if (Rn[0].slice(-2) === \"/>\") {\n                  /* empty */\n                } else if (Rn[1] === \"/\") switch (str.slice(pidx, Rn.index)) {\n                  case \"SheetHidden\":\n                    wsprops.Hidden = 1;\n                    break;\n\n                  case \"SheetVeryHidden\":\n                    wsprops.Hidden = 2;\n                    break;\n                } else pidx = Rn.index + Rn[0].length;\n\n                break;\n\n              case 'header'\n              /*case 'Header'*/\n              :\n                if (!cursheet['!margins']) default_margins(cursheet['!margins'] = {}, 'xlml');\n                if (!isNaN(+parsexmltag(Rn[0]).Margin)) cursheet['!margins'].header = +parsexmltag(Rn[0]).Margin;\n                break;\n\n              case 'footer'\n              /*case 'Footer'*/\n              :\n                if (!cursheet['!margins']) default_margins(cursheet['!margins'] = {}, 'xlml');\n                if (!isNaN(+parsexmltag(Rn[0]).Margin)) cursheet['!margins'].footer = +parsexmltag(Rn[0]).Margin;\n                break;\n\n              case 'pagemargins'\n              /*case 'PageMargins'*/\n              :\n                var pagemargins = parsexmltag(Rn[0]);\n                if (!cursheet['!margins']) default_margins(cursheet['!margins'] = {}, 'xlml');\n                if (!isNaN(+pagemargins.Top)) cursheet['!margins'].top = +pagemargins.Top;\n                if (!isNaN(+pagemargins.Left)) cursheet['!margins'].left = +pagemargins.Left;\n                if (!isNaN(+pagemargins.Right)) cursheet['!margins'].right = +pagemargins.Right;\n                if (!isNaN(+pagemargins.Bottom)) cursheet['!margins'].bottom = +pagemargins.Bottom;\n                break;\n\n              case 'displayrighttoleft'\n              /*case 'DisplayRightToLeft'*/\n              :\n                if (!Workbook.Views) Workbook.Views = [];\n                if (!Workbook.Views[0]) Workbook.Views[0] = {};\n                Workbook.Views[0].RTL = true;\n                break;\n\n              case 'freezepanes'\n              /*case 'FreezePanes'*/\n              :\n                break;\n\n              case 'frozennosplit'\n              /*case 'FrozenNoSplit'*/\n              :\n                break;\n\n              case 'splithorizontal'\n              /*case 'SplitHorizontal'*/\n              :\n              case 'splitvertical'\n              /*case 'SplitVertical'*/\n              :\n                break;\n\n              case 'donotdisplaygridlines'\n              /*case 'DoNotDisplayGridlines'*/\n              :\n                break;\n\n              case 'activerow'\n              /*case 'ActiveRow'*/\n              :\n                break;\n\n              case 'activecol'\n              /*case 'ActiveCol'*/\n              :\n                break;\n\n              case 'toprowbottompane'\n              /*case 'TopRowBottomPane'*/\n              :\n                break;\n\n              case 'leftcolumnrightpane'\n              /*case 'LeftColumnRightPane'*/\n              :\n                break;\n\n              case 'unsynced'\n              /*case 'Unsynced'*/\n              :\n                break;\n\n              case 'print'\n              /*case 'Print'*/\n              :\n                break;\n\n              case 'printerrors'\n              /*case 'PrintErrors'*/\n              :\n                break;\n\n              case 'panes'\n              /*case 'Panes'*/\n              :\n                break;\n\n              case 'scale'\n              /*case 'Scale'*/\n              :\n                break;\n\n              case 'pane'\n              /*case 'Pane'*/\n              :\n                break;\n\n              case 'number'\n              /*case 'Number'*/\n              :\n                break;\n\n              case 'layout'\n              /*case 'Layout'*/\n              :\n                break;\n\n              case 'pagesetup'\n              /*case 'PageSetup'*/\n              :\n                break;\n\n              case 'selected'\n              /*case 'Selected'*/\n              :\n                break;\n\n              case 'protectobjects'\n              /*case 'ProtectObjects'*/\n              :\n                break;\n\n              case 'enableselection'\n              /*case 'EnableSelection'*/\n              :\n                break;\n\n              case 'protectscenarios'\n              /*case 'ProtectScenarios'*/\n              :\n                break;\n\n              case 'validprinterinfo'\n              /*case 'ValidPrinterInfo'*/\n              :\n                break;\n\n              case 'horizontalresolution'\n              /*case 'HorizontalResolution'*/\n              :\n                break;\n\n              case 'verticalresolution'\n              /*case 'VerticalResolution'*/\n              :\n                break;\n\n              case 'numberofcopies'\n              /*case 'NumberofCopies'*/\n              :\n                break;\n\n              case 'activepane'\n              /*case 'ActivePane'*/\n              :\n                break;\n\n              case 'toprowvisible'\n              /*case 'TopRowVisible'*/\n              :\n                break;\n\n              case 'leftcolumnvisible'\n              /*case 'LeftColumnVisible'*/\n              :\n                break;\n\n              case 'fittopage'\n              /*case 'FitToPage'*/\n              :\n                break;\n\n              case 'rangeselection'\n              /*case 'RangeSelection'*/\n              :\n                break;\n\n              case 'papersizeindex'\n              /*case 'PaperSizeIndex'*/\n              :\n                break;\n\n              case 'pagelayoutzoom'\n              /*case 'PageLayoutZoom'*/\n              :\n                break;\n\n              case 'pagebreakzoom'\n              /*case 'PageBreakZoom'*/\n              :\n                break;\n\n              case 'filteron'\n              /*case 'FilterOn'*/\n              :\n                break;\n\n              case 'fitwidth'\n              /*case 'FitWidth'*/\n              :\n                break;\n\n              case 'fitheight'\n              /*case 'FitHeight'*/\n              :\n                break;\n\n              case 'commentslayout'\n              /*case 'CommentsLayout'*/\n              :\n                break;\n\n              case 'zoom'\n              /*case 'Zoom'*/\n              :\n                break;\n\n              case 'lefttoright'\n              /*case 'LeftToRight'*/\n              :\n                break;\n\n              case 'gridlines'\n              /*case 'Gridlines'*/\n              :\n                break;\n\n              case 'allowsort'\n              /*case 'AllowSort'*/\n              :\n                break;\n\n              case 'allowfilter'\n              /*case 'AllowFilter'*/\n              :\n                break;\n\n              case 'allowinsertrows'\n              /*case 'AllowInsertRows'*/\n              :\n                break;\n\n              case 'allowdeleterows'\n              /*case 'AllowDeleteRows'*/\n              :\n                break;\n\n              case 'allowinsertcols'\n              /*case 'AllowInsertCols'*/\n              :\n                break;\n\n              case 'allowdeletecols'\n              /*case 'AllowDeleteCols'*/\n              :\n                break;\n\n              case 'allowinserthyperlinks'\n              /*case 'AllowInsertHyperlinks'*/\n              :\n                break;\n\n              case 'allowformatcells'\n              /*case 'AllowFormatCells'*/\n              :\n                break;\n\n              case 'allowsizecols'\n              /*case 'AllowSizeCols'*/\n              :\n                break;\n\n              case 'allowsizerows'\n              /*case 'AllowSizeRows'*/\n              :\n                break;\n\n              case 'nosummaryrowsbelowdetail'\n              /*case 'NoSummaryRowsBelowDetail'*/\n              :\n                if (!cursheet[\"!outline\"]) cursheet[\"!outline\"] = {};\n                cursheet[\"!outline\"].above = true;\n                break;\n\n              case 'tabcolorindex'\n              /*case 'TabColorIndex'*/\n              :\n                break;\n\n              case 'donotdisplayheadings'\n              /*case 'DoNotDisplayHeadings'*/\n              :\n                break;\n\n              case 'showpagelayoutzoom'\n              /*case 'ShowPageLayoutZoom'*/\n              :\n                break;\n\n              case 'nosummarycolumnsrightdetail'\n              /*case 'NoSummaryColumnsRightDetail'*/\n              :\n                if (!cursheet[\"!outline\"]) cursheet[\"!outline\"] = {};\n                cursheet[\"!outline\"].left = true;\n                break;\n\n              case 'blackandwhite'\n              /*case 'BlackAndWhite'*/\n              :\n                break;\n\n              case 'donotdisplayzeros'\n              /*case 'DoNotDisplayZeros'*/\n              :\n                break;\n\n              case 'displaypagebreak'\n              /*case 'DisplayPageBreak'*/\n              :\n                break;\n\n              case 'rowcolheadings'\n              /*case 'RowColHeadings'*/\n              :\n                break;\n\n              case 'donotdisplayoutline'\n              /*case 'DoNotDisplayOutline'*/\n              :\n                break;\n\n              case 'noorientation'\n              /*case 'NoOrientation'*/\n              :\n                break;\n\n              case 'allowusepivottables'\n              /*case 'AllowUsePivotTables'*/\n              :\n                break;\n\n              case 'zeroheight'\n              /*case 'ZeroHeight'*/\n              :\n                break;\n\n              case 'viewablerange'\n              /*case 'ViewableRange'*/\n              :\n                break;\n\n              case 'selection'\n              /*case 'Selection'*/\n              :\n                break;\n\n              case 'protectcontents'\n              /*case 'ProtectContents'*/\n              :\n                break;\n\n              default:\n                seen = false;\n            }\n\n            break;\n\n          /* PivotTable */\n\n          case 'pivottable'\n          /*case 'PivotTable'*/\n          :\n          case 'pivotcache'\n          /*case 'PivotCache'*/\n          :\n            switch (Rn[3]) {\n              case 'immediateitemsondrop'\n              /*case 'ImmediateItemsOnDrop'*/\n              :\n                break;\n\n              case 'showpagemultipleitemlabel'\n              /*case 'ShowPageMultipleItemLabel'*/\n              :\n                break;\n\n              case 'compactrowindent'\n              /*case 'CompactRowIndent'*/\n              :\n                break;\n\n              case 'location'\n              /*case 'Location'*/\n              :\n                break;\n\n              case 'pivotfield'\n              /*case 'PivotField'*/\n              :\n                break;\n\n              case 'orientation'\n              /*case 'Orientation'*/\n              :\n                break;\n\n              case 'layoutform'\n              /*case 'LayoutForm'*/\n              :\n                break;\n\n              case 'layoutsubtotallocation'\n              /*case 'LayoutSubtotalLocation'*/\n              :\n                break;\n\n              case 'layoutcompactrow'\n              /*case 'LayoutCompactRow'*/\n              :\n                break;\n\n              case 'position'\n              /*case 'Position'*/\n              :\n                break;\n\n              case 'pivotitem'\n              /*case 'PivotItem'*/\n              :\n                break;\n\n              case 'datatype'\n              /*case 'DataType'*/\n              :\n                break;\n\n              case 'datafield'\n              /*case 'DataField'*/\n              :\n                break;\n\n              case 'sourcename'\n              /*case 'SourceName'*/\n              :\n                break;\n\n              case 'parentfield'\n              /*case 'ParentField'*/\n              :\n                break;\n\n              case 'ptlineitems'\n              /*case 'PTLineItems'*/\n              :\n                break;\n\n              case 'ptlineitem'\n              /*case 'PTLineItem'*/\n              :\n                break;\n\n              case 'countofsameitems'\n              /*case 'CountOfSameItems'*/\n              :\n                break;\n\n              case 'item'\n              /*case 'Item'*/\n              :\n                break;\n\n              case 'itemtype'\n              /*case 'ItemType'*/\n              :\n                break;\n\n              case 'ptsource'\n              /*case 'PTSource'*/\n              :\n                break;\n\n              case 'cacheindex'\n              /*case 'CacheIndex'*/\n              :\n                break;\n\n              case 'consolidationreference'\n              /*case 'ConsolidationReference'*/\n              :\n                break;\n\n              case 'filename'\n              /*case 'FileName'*/\n              :\n                break;\n\n              case 'reference'\n              /*case 'Reference'*/\n              :\n                break;\n\n              case 'nocolumngrand'\n              /*case 'NoColumnGrand'*/\n              :\n                break;\n\n              case 'norowgrand'\n              /*case 'NoRowGrand'*/\n              :\n                break;\n\n              case 'blanklineafteritems'\n              /*case 'BlankLineAfterItems'*/\n              :\n                break;\n\n              case 'hidden'\n              /*case 'Hidden'*/\n              :\n                break;\n\n              case 'subtotal'\n              /*case 'Subtotal'*/\n              :\n                break;\n\n              case 'basefield'\n              /*case 'BaseField'*/\n              :\n                break;\n\n              case 'mapchilditems'\n              /*case 'MapChildItems'*/\n              :\n                break;\n\n              case 'function'\n              /*case 'Function'*/\n              :\n                break;\n\n              case 'refreshonfileopen'\n              /*case 'RefreshOnFileOpen'*/\n              :\n                break;\n\n              case 'printsettitles'\n              /*case 'PrintSetTitles'*/\n              :\n                break;\n\n              case 'mergelabels'\n              /*case 'MergeLabels'*/\n              :\n                break;\n\n              case 'defaultversion'\n              /*case 'DefaultVersion'*/\n              :\n                break;\n\n              case 'refreshname'\n              /*case 'RefreshName'*/\n              :\n                break;\n\n              case 'refreshdate'\n              /*case 'RefreshDate'*/\n              :\n                break;\n\n              case 'refreshdatecopy'\n              /*case 'RefreshDateCopy'*/\n              :\n                break;\n\n              case 'versionlastrefresh'\n              /*case 'VersionLastRefresh'*/\n              :\n                break;\n\n              case 'versionlastupdate'\n              /*case 'VersionLastUpdate'*/\n              :\n                break;\n\n              case 'versionupdateablemin'\n              /*case 'VersionUpdateableMin'*/\n              :\n                break;\n\n              case 'versionrefreshablemin'\n              /*case 'VersionRefreshableMin'*/\n              :\n                break;\n\n              case 'calculation'\n              /*case 'Calculation'*/\n              :\n                break;\n\n              default:\n                seen = false;\n            }\n\n            break;\n\n          /* PageBreaks */\n\n          case 'pagebreaks'\n          /*case 'PageBreaks'*/\n          :\n            switch (Rn[3]) {\n              case 'colbreaks'\n              /*case 'ColBreaks'*/\n              :\n                break;\n\n              case 'colbreak'\n              /*case 'ColBreak'*/\n              :\n                break;\n\n              case 'rowbreaks'\n              /*case 'RowBreaks'*/\n              :\n                break;\n\n              case 'rowbreak'\n              /*case 'RowBreak'*/\n              :\n                break;\n\n              case 'colstart'\n              /*case 'ColStart'*/\n              :\n                break;\n\n              case 'colend'\n              /*case 'ColEnd'*/\n              :\n                break;\n\n              case 'rowend'\n              /*case 'RowEnd'*/\n              :\n                break;\n\n              default:\n                seen = false;\n            }\n\n            break;\n\n          /* AutoFilter */\n\n          case 'autofilter'\n          /*case 'AutoFilter'*/\n          :\n            switch (Rn[3]) {\n              case 'autofiltercolumn'\n              /*case 'AutoFilterColumn'*/\n              :\n                break;\n\n              case 'autofiltercondition'\n              /*case 'AutoFilterCondition'*/\n              :\n                break;\n\n              case 'autofilterand'\n              /*case 'AutoFilterAnd'*/\n              :\n                break;\n\n              case 'autofilteror'\n              /*case 'AutoFilterOr'*/\n              :\n                break;\n\n              default:\n                seen = false;\n            }\n\n            break;\n\n          /* QueryTable */\n\n          case 'querytable'\n          /*case 'QueryTable'*/\n          :\n            switch (Rn[3]) {\n              case 'id'\n              /*case 'Id'*/\n              :\n                break;\n\n              case 'autoformatfont'\n              /*case 'AutoFormatFont'*/\n              :\n                break;\n\n              case 'autoformatpattern'\n              /*case 'AutoFormatPattern'*/\n              :\n                break;\n\n              case 'querysource'\n              /*case 'QuerySource'*/\n              :\n                break;\n\n              case 'querytype'\n              /*case 'QueryType'*/\n              :\n                break;\n\n              case 'enableredirections'\n              /*case 'EnableRedirections'*/\n              :\n                break;\n\n              case 'refreshedinxl9'\n              /*case 'RefreshedInXl9'*/\n              :\n                break;\n\n              case 'urlstring'\n              /*case 'URLString'*/\n              :\n                break;\n\n              case 'htmltables'\n              /*case 'HTMLTables'*/\n              :\n                break;\n\n              case 'connection'\n              /*case 'Connection'*/\n              :\n                break;\n\n              case 'commandtext'\n              /*case 'CommandText'*/\n              :\n                break;\n\n              case 'refreshinfo'\n              /*case 'RefreshInfo'*/\n              :\n                break;\n\n              case 'notitles'\n              /*case 'NoTitles'*/\n              :\n                break;\n\n              case 'nextid'\n              /*case 'NextId'*/\n              :\n                break;\n\n              case 'columninfo'\n              /*case 'ColumnInfo'*/\n              :\n                break;\n\n              case 'overwritecells'\n              /*case 'OverwriteCells'*/\n              :\n                break;\n\n              case 'donotpromptforfile'\n              /*case 'DoNotPromptForFile'*/\n              :\n                break;\n\n              case 'textwizardsettings'\n              /*case 'TextWizardSettings'*/\n              :\n                break;\n\n              case 'source'\n              /*case 'Source'*/\n              :\n                break;\n\n              case 'number'\n              /*case 'Number'*/\n              :\n                break;\n\n              case 'decimal'\n              /*case 'Decimal'*/\n              :\n                break;\n\n              case 'thousandseparator'\n              /*case 'ThousandSeparator'*/\n              :\n                break;\n\n              case 'trailingminusnumbers'\n              /*case 'TrailingMinusNumbers'*/\n              :\n                break;\n\n              case 'formatsettings'\n              /*case 'FormatSettings'*/\n              :\n                break;\n\n              case 'fieldtype'\n              /*case 'FieldType'*/\n              :\n                break;\n\n              case 'delimiters'\n              /*case 'Delimiters'*/\n              :\n                break;\n\n              case 'tab'\n              /*case 'Tab'*/\n              :\n                break;\n\n              case 'comma'\n              /*case 'Comma'*/\n              :\n                break;\n\n              case 'autoformatname'\n              /*case 'AutoFormatName'*/\n              :\n                break;\n\n              case 'versionlastedit'\n              /*case 'VersionLastEdit'*/\n              :\n                break;\n\n              case 'versionlastrefresh'\n              /*case 'VersionLastRefresh'*/\n              :\n                break;\n\n              default:\n                seen = false;\n            }\n\n            break;\n\n          case 'datavalidation'\n          /*case 'DataValidation'*/\n          :\n            switch (Rn[3]) {\n              case 'range'\n              /*case 'Range'*/\n              :\n                break;\n\n              case 'type'\n              /*case 'Type'*/\n              :\n                break;\n\n              case 'min'\n              /*case 'Min'*/\n              :\n                break;\n\n              case 'max'\n              /*case 'Max'*/\n              :\n                break;\n\n              case 'sort'\n              /*case 'Sort'*/\n              :\n                break;\n\n              case 'descending'\n              /*case 'Descending'*/\n              :\n                break;\n\n              case 'order'\n              /*case 'Order'*/\n              :\n                break;\n\n              case 'casesensitive'\n              /*case 'CaseSensitive'*/\n              :\n                break;\n\n              case 'value'\n              /*case 'Value'*/\n              :\n                break;\n\n              case 'errorstyle'\n              /*case 'ErrorStyle'*/\n              :\n                break;\n\n              case 'errormessage'\n              /*case 'ErrorMessage'*/\n              :\n                break;\n\n              case 'errortitle'\n              /*case 'ErrorTitle'*/\n              :\n                break;\n\n              case 'inputmessage'\n              /*case 'InputMessage'*/\n              :\n                break;\n\n              case 'inputtitle'\n              /*case 'InputTitle'*/\n              :\n                break;\n\n              case 'combohide'\n              /*case 'ComboHide'*/\n              :\n                break;\n\n              case 'inputhide'\n              /*case 'InputHide'*/\n              :\n                break;\n\n              case 'condition'\n              /*case 'Condition'*/\n              :\n                break;\n\n              case 'qualifier'\n              /*case 'Qualifier'*/\n              :\n                break;\n\n              case 'useblank'\n              /*case 'UseBlank'*/\n              :\n                break;\n\n              case 'value1'\n              /*case 'Value1'*/\n              :\n                break;\n\n              case 'value2'\n              /*case 'Value2'*/\n              :\n                break;\n\n              case 'format'\n              /*case 'Format'*/\n              :\n                break;\n\n              case 'cellrangelist'\n              /*case 'CellRangeList'*/\n              :\n                break;\n\n              default:\n                seen = false;\n            }\n\n            break;\n\n          case 'sorting'\n          /*case 'Sorting'*/\n          :\n          case 'conditionalformatting'\n          /*case 'ConditionalFormatting'*/\n          :\n            switch (Rn[3]) {\n              case 'range'\n              /*case 'Range'*/\n              :\n                break;\n\n              case 'type'\n              /*case 'Type'*/\n              :\n                break;\n\n              case 'min'\n              /*case 'Min'*/\n              :\n                break;\n\n              case 'max'\n              /*case 'Max'*/\n              :\n                break;\n\n              case 'sort'\n              /*case 'Sort'*/\n              :\n                break;\n\n              case 'descending'\n              /*case 'Descending'*/\n              :\n                break;\n\n              case 'order'\n              /*case 'Order'*/\n              :\n                break;\n\n              case 'casesensitive'\n              /*case 'CaseSensitive'*/\n              :\n                break;\n\n              case 'value'\n              /*case 'Value'*/\n              :\n                break;\n\n              case 'errorstyle'\n              /*case 'ErrorStyle'*/\n              :\n                break;\n\n              case 'errormessage'\n              /*case 'ErrorMessage'*/\n              :\n                break;\n\n              case 'errortitle'\n              /*case 'ErrorTitle'*/\n              :\n                break;\n\n              case 'cellrangelist'\n              /*case 'CellRangeList'*/\n              :\n                break;\n\n              case 'inputmessage'\n              /*case 'InputMessage'*/\n              :\n                break;\n\n              case 'inputtitle'\n              /*case 'InputTitle'*/\n              :\n                break;\n\n              case 'combohide'\n              /*case 'ComboHide'*/\n              :\n                break;\n\n              case 'inputhide'\n              /*case 'InputHide'*/\n              :\n                break;\n\n              case 'condition'\n              /*case 'Condition'*/\n              :\n                break;\n\n              case 'qualifier'\n              /*case 'Qualifier'*/\n              :\n                break;\n\n              case 'useblank'\n              /*case 'UseBlank'*/\n              :\n                break;\n\n              case 'value1'\n              /*case 'Value1'*/\n              :\n                break;\n\n              case 'value2'\n              /*case 'Value2'*/\n              :\n                break;\n\n              case 'format'\n              /*case 'Format'*/\n              :\n                break;\n\n              default:\n                seen = false;\n            }\n\n            break;\n\n          /* MapInfo (schema) */\n\n          case 'mapinfo'\n          /*case 'MapInfo'*/\n          :\n          case 'schema'\n          /*case 'Schema'*/\n          :\n          case 'data'\n          /*case 'data'*/\n          :\n            switch (Rn[3]) {\n              case 'map'\n              /*case 'Map'*/\n              :\n                break;\n\n              case 'entry'\n              /*case 'Entry'*/\n              :\n                break;\n\n              case 'range'\n              /*case 'Range'*/\n              :\n                break;\n\n              case 'xpath'\n              /*case 'XPath'*/\n              :\n                break;\n\n              case 'field'\n              /*case 'Field'*/\n              :\n                break;\n\n              case 'xsdtype'\n              /*case 'XSDType'*/\n              :\n                break;\n\n              case 'filteron'\n              /*case 'FilterOn'*/\n              :\n                break;\n\n              case 'aggregate'\n              /*case 'Aggregate'*/\n              :\n                break;\n\n              case 'elementtype'\n              /*case 'ElementType'*/\n              :\n                break;\n\n              case 'attributetype'\n              /*case 'AttributeType'*/\n              :\n                break;\n\n              /* These are from xsd (XML Schema Definition) */\n\n              case 'schema'\n              /*case 'schema'*/\n              :\n              case 'element'\n              /*case 'element'*/\n              :\n              case 'complextype'\n              /*case 'complexType'*/\n              :\n              case 'datatype'\n              /*case 'datatype'*/\n              :\n              case 'all'\n              /*case 'all'*/\n              :\n              case 'attribute'\n              /*case 'attribute'*/\n              :\n              case 'extends'\n              /*case 'extends'*/\n              :\n                break;\n\n              case 'row'\n              /*case 'row'*/\n              :\n                break;\n\n              default:\n                seen = false;\n            }\n\n            break;\n\n          /* SmartTags (can be anything) */\n\n          case 'smarttags'\n          /*case 'SmartTags'*/\n          :\n            break;\n\n          default:\n            seen = false;\n            break;\n        }\n\n        if (seen) break;\n        /* CustomDocumentProperties */\n\n        if (Rn[3].match(/!\\[CDATA/)) break;\n        if (!state[state.length - 1][1]) throw 'Unrecognized tag: ' + Rn[3] + \"|\" + state.join(\"|\");\n\n        if (state[state.length - 1][0] ===\n        /*'CustomDocumentProperties'*/\n        'customdocumentproperties') {\n          if (Rn[0].slice(-2) === \"/>\") break;else if (Rn[1] === \"/\") xlml_set_custprop(Custprops, raw_Rn3, cp, str.slice(pidx, Rn.index));else {\n            cp = Rn;\n            pidx = Rn.index + Rn[0].length;\n          }\n          break;\n        }\n\n        if (opts.WTF) throw 'Unrecognized tag: ' + Rn[3] + \"|\" + state.join(\"|\");\n    }\n  }\n\n  var out = {}\n  /*:any*/\n  ;\n  if (!opts.bookSheets && !opts.bookProps) out.Sheets = sheets;\n  out.SheetNames = sheetnames;\n  out.Workbook = Workbook;\n  out.SSF = dup(table_fmt);\n  out.Props = Props;\n  out.Custprops = Custprops;\n  return out;\n}\n\nfunction parse_xlml(data\n/*:RawBytes|string*/\n, opts)\n/*:Workbook*/\n{\n  fix_read_opts(opts = opts || {});\n\n  switch (opts.type || \"base64\") {\n    case \"base64\":\n      return parse_xlml_xml(Base64_decode(data), opts);\n\n    case \"binary\":\n    case \"buffer\":\n    case \"file\":\n      return parse_xlml_xml(data, opts);\n\n    case \"array\":\n      return parse_xlml_xml(a2s(data), opts);\n  }\n  /*:: throw new Error(\"unsupported type \" + opts.type); */\n\n}\n/* TODO */\n\n\nfunction write_props_xlml(wb\n/*:Workbook*/\n, opts)\n/*:string*/\n{\n  var o\n  /*:Array<string>*/\n  = [];\n  /* DocumentProperties */\n\n  if (wb.Props) o.push(xlml_write_docprops(wb.Props, opts));\n  /* CustomDocumentProperties */\n\n  if (wb.Custprops) o.push(xlml_write_custprops(wb.Props, wb.Custprops, opts));\n  return o.join(\"\");\n}\n/* TODO */\n\n\nfunction\n  /*::wb, opts*/\nwrite_wb_xlml()\n/*:string*/\n{\n  /* OfficeDocumentSettings */\n\n  /* ExcelWorkbook */\n  return \"\";\n}\n/* TODO */\n\n\nfunction write_sty_xlml(wb, opts)\n/*:string*/\n{\n  /* Styles */\n  var styles\n  /*:Array<string>*/\n  = ['<Style ss:ID=\"Default\" ss:Name=\"Normal\"><NumberFormat/></Style>'];\n  opts.cellXfs.forEach(function (xf, id) {\n    var payload\n    /*:Array<string>*/\n    = [];\n    payload.push(writextag('NumberFormat', null, {\n      \"ss:Format\": escapexml(table_fmt[xf.numFmtId])\n    }));\n    var o =\n    /*::(*/\n    {\n      \"ss:ID\": \"s\" + (21 + id)\n    }\n    /*:: :any)*/\n    ;\n    styles.push(writextag('Style', payload.join(\"\"), o));\n  });\n  return writextag(\"Styles\", styles.join(\"\"));\n}\n\nfunction write_name_xlml(n) {\n  return writextag(\"NamedRange\", null, {\n    \"ss:Name\": n.Name,\n    \"ss:RefersTo\": \"=\" + a1_to_rc(n.Ref, {\n      r: 0,\n      c: 0\n    })\n  });\n}\n\nfunction write_names_xlml(wb\n/*::, opts*/\n)\n/*:string*/\n{\n  if (!((wb || {}).Workbook || {}).Names) return \"\";\n  /*:: if(!wb || !wb.Workbook || !wb.Workbook.Names) throw new Error(\"unreachable\"); */\n\n  var names\n  /*:Array<any>*/\n  = wb.Workbook.Names;\n  var out\n  /*:Array<string>*/\n  = [];\n\n  for (var i = 0; i < names.length; ++i) {\n    var n = names[i];\n    if (n.Sheet != null) continue;\n    if (n.Name.match(/^_xlfn\\./)) continue;\n    out.push(write_name_xlml(n));\n  }\n\n  return writextag(\"Names\", out.join(\"\"));\n}\n\nfunction write_ws_xlml_names(ws\n/*:Worksheet*/\n, opts, idx\n/*:number*/\n, wb\n/*:Workbook*/\n)\n/*:string*/\n{\n  if (!ws) return \"\";\n  if (!((wb || {}).Workbook || {}).Names) return \"\";\n  /*:: if(!wb || !wb.Workbook || !wb.Workbook.Names) throw new Error(\"unreachable\"); */\n\n  var names\n  /*:Array<any>*/\n  = wb.Workbook.Names;\n  var out\n  /*:Array<string>*/\n  = [];\n\n  for (var i = 0; i < names.length; ++i) {\n    var n = names[i];\n    if (n.Sheet != idx) continue;\n    /*switch(n.Name) {\n    \tcase \"_\": continue;\n    }*/\n\n    if (n.Name.match(/^_xlfn\\./)) continue;\n    out.push(write_name_xlml(n));\n  }\n\n  return out.join(\"\");\n}\n/* WorksheetOptions */\n\n\nfunction write_ws_xlml_wsopts(ws\n/*:Worksheet*/\n, opts, idx\n/*:number*/\n, wb\n/*:Workbook*/\n)\n/*:string*/\n{\n  if (!ws) return \"\";\n  var o\n  /*:Array<string>*/\n  = [];\n  /* NOTE: spec technically allows any order, but stick with implied order */\n\n  /* FitToPage */\n\n  /* DoNotDisplayColHeaders */\n\n  /* DoNotDisplayRowHeaders */\n\n  /* ViewableRange */\n\n  /* Selection */\n\n  /* GridlineColor */\n\n  /* Name */\n\n  /* ExcelWorksheetType */\n\n  /* IntlMacro */\n\n  /* Unsynced */\n\n  /* Selected */\n\n  /* CodeName */\n\n  if (ws['!margins']) {\n    o.push(\"<PageSetup>\");\n    if (ws['!margins'].header) o.push(writextag(\"Header\", null, {\n      'x:Margin': ws['!margins'].header\n    }));\n    if (ws['!margins'].footer) o.push(writextag(\"Footer\", null, {\n      'x:Margin': ws['!margins'].footer\n    }));\n    o.push(writextag(\"PageMargins\", null, {\n      'x:Bottom': ws['!margins'].bottom || \"0.75\",\n      'x:Left': ws['!margins'].left || \"0.7\",\n      'x:Right': ws['!margins'].right || \"0.7\",\n      'x:Top': ws['!margins'].top || \"0.75\"\n    }));\n    o.push(\"</PageSetup>\");\n  }\n  /* PageSetup */\n\n  /* DisplayPageBreak */\n\n  /* TransitionExpressionEvaluation */\n\n  /* TransitionFormulaEntry */\n\n  /* Print */\n\n  /* Zoom */\n\n  /* PageLayoutZoom */\n\n  /* PageBreakZoom */\n\n  /* ShowPageBreakZoom */\n\n  /* DefaultRowHeight */\n\n  /* DefaultColumnWidth */\n\n  /* StandardWidth */\n\n\n  if (wb && wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx]) {\n    /* Visible */\n    if (wb.Workbook.Sheets[idx].Hidden) o.push(writextag(\"Visible\", wb.Workbook.Sheets[idx].Hidden == 1 ? \"SheetHidden\" : \"SheetVeryHidden\", {}));else {\n      /* Selected */\n      for (var i = 0; i < idx; ++i) {\n        if (wb.Workbook.Sheets[i] && !wb.Workbook.Sheets[i].Hidden) break;\n      }\n\n      if (i == idx) o.push(\"<Selected/>\");\n    }\n  }\n  /* LeftColumnVisible */\n\n\n  if (((((wb || {}).Workbook || {}).Views || [])[0] || {}).RTL) o.push(\"<DisplayRightToLeft/>\");\n  /* GridlineColorIndex */\n\n  /* DisplayFormulas */\n\n  /* DoNotDisplayGridlines */\n\n  /* DoNotDisplayHeadings */\n\n  /* DoNotDisplayOutline */\n\n  /* ApplyAutomaticOutlineStyles */\n\n  /* NoSummaryRowsBelowDetail */\n\n  /* NoSummaryColumnsRightDetail */\n\n  /* DoNotDisplayZeros */\n\n  /* ActiveRow */\n\n  /* ActiveColumn */\n\n  /* FilterOn */\n\n  /* RangeSelection */\n\n  /* TopRowVisible */\n\n  /* TopRowBottomPane */\n\n  /* LeftColumnRightPane */\n\n  /* ActivePane */\n\n  /* SplitHorizontal */\n\n  /* SplitVertical */\n\n  /* FreezePanes */\n\n  /* FrozenNoSplit */\n\n  /* TabColorIndex */\n\n  /* Panes */\n\n  /* NOTE: Password not supported in XLML Format */\n\n  if (ws['!protect']) {\n    o.push(writetag(\"ProtectContents\", \"True\"));\n    if (ws['!protect'].objects) o.push(writetag(\"ProtectObjects\", \"True\"));\n    if (ws['!protect'].scenarios) o.push(writetag(\"ProtectScenarios\", \"True\"));\n    if (ws['!protect'].selectLockedCells != null && !ws['!protect'].selectLockedCells) o.push(writetag(\"EnableSelection\", \"NoSelection\"));else if (ws['!protect'].selectUnlockedCells != null && !ws['!protect'].selectUnlockedCells) o.push(writetag(\"EnableSelection\", \"UnlockedCells\"));\n    [[\"formatCells\", \"AllowFormatCells\"], [\"formatColumns\", \"AllowSizeCols\"], [\"formatRows\", \"AllowSizeRows\"], [\"insertColumns\", \"AllowInsertCols\"], [\"insertRows\", \"AllowInsertRows\"], [\"insertHyperlinks\", \"AllowInsertHyperlinks\"], [\"deleteColumns\", \"AllowDeleteCols\"], [\"deleteRows\", \"AllowDeleteRows\"], [\"sort\", \"AllowSort\"], [\"autoFilter\", \"AllowFilter\"], [\"pivotTables\", \"AllowUsePivotTables\"]].forEach(function (x) {\n      if (ws['!protect'][x[0]]) o.push(\"<\" + x[1] + \"/>\");\n    });\n  }\n\n  if (o.length == 0) return \"\";\n  return writextag(\"WorksheetOptions\", o.join(\"\"), {\n    xmlns: XLMLNS.x\n  });\n}\n\nfunction write_ws_xlml_comment(comments\n/*:Array<any>*/\n)\n/*:string*/\n{\n  return comments.map(function (c) {\n    // TODO: formatted text\n    var t = xlml_unfixstr(c.t || \"\");\n    var d = writextag(\"ss:Data\", t, {\n      \"xmlns\": \"http://www.w3.org/TR/REC-html40\"\n    });\n    return writextag(\"Comment\", d, {\n      \"ss:Author\": c.a\n    });\n  }).join(\"\");\n}\n\nfunction write_ws_xlml_cell(cell, ref\n/*:string*/\n, ws, opts, idx\n/*:number*/\n, wb, addr)\n/*:string*/\n{\n  if (!cell || cell.v == undefined && cell.f == undefined) return \"\";\n  var attr = {};\n  if (cell.f) attr[\"ss:Formula\"] = \"=\" + escapexml(a1_to_rc(cell.f, addr));\n\n  if (cell.F && cell.F.slice(0, ref.length) == ref) {\n    var end = decode_cell(cell.F.slice(ref.length + 1));\n    attr[\"ss:ArrayRange\"] = \"RC:R\" + (end.r == addr.r ? \"\" : \"[\" + (end.r - addr.r) + \"]\") + \"C\" + (end.c == addr.c ? \"\" : \"[\" + (end.c - addr.c) + \"]\");\n  }\n\n  if (cell.l && cell.l.Target) {\n    attr[\"ss:HRef\"] = escapexml(cell.l.Target);\n    if (cell.l.Tooltip) attr[\"x:HRefScreenTip\"] = escapexml(cell.l.Tooltip);\n  }\n\n  if (ws['!merges']) {\n    var marr = ws['!merges'];\n\n    for (var mi = 0; mi != marr.length; ++mi) {\n      if (marr[mi].s.c != addr.c || marr[mi].s.r != addr.r) continue;\n      if (marr[mi].e.c > marr[mi].s.c) attr['ss:MergeAcross'] = marr[mi].e.c - marr[mi].s.c;\n      if (marr[mi].e.r > marr[mi].s.r) attr['ss:MergeDown'] = marr[mi].e.r - marr[mi].s.r;\n    }\n  }\n\n  var t = \"\",\n      p = \"\";\n\n  switch (cell.t) {\n    case 'z':\n      if (!opts.sheetStubs) return \"\";\n      break;\n\n    case 'n':\n      t = 'Number';\n      p = String(cell.v);\n      break;\n\n    case 'b':\n      t = 'Boolean';\n      p = cell.v ? \"1\" : \"0\";\n      break;\n\n    case 'e':\n      t = 'Error';\n      p = BErr[cell.v];\n      break;\n\n    case 'd':\n      t = 'DateTime';\n      p = new Date(cell.v).toISOString();\n      if (cell.z == null) cell.z = cell.z || table_fmt[14];\n      break;\n\n    case 's':\n      t = 'String';\n      p = escapexlml(cell.v || \"\");\n      break;\n  }\n  /* TODO: cell style */\n\n\n  var os = get_cell_style(opts.cellXfs, cell, opts);\n  attr[\"ss:StyleID\"] = \"s\" + (21 + os);\n  attr[\"ss:Index\"] = addr.c + 1;\n\n  var _v = cell.v != null ? p : \"\";\n\n  var m = cell.t == 'z' ? \"\" : '<Data ss:Type=\"' + t + '\">' + _v + '</Data>';\n  if ((cell.c || []).length > 0) m += write_ws_xlml_comment(cell.c);\n  return writextag(\"Cell\", m, attr);\n}\n\nfunction write_ws_xlml_row(R\n/*:number*/\n, row)\n/*:string*/\n{\n  var o = '<Row ss:Index=\"' + (R + 1) + '\"';\n\n  if (row) {\n    if (row.hpt && !row.hpx) row.hpx = pt2px(row.hpt);\n    if (row.hpx) o += ' ss:AutoFitHeight=\"0\" ss:Height=\"' + row.hpx + '\"';\n    if (row.hidden) o += ' ss:Hidden=\"1\"';\n  }\n\n  return o + '>';\n}\n/* TODO */\n\n\nfunction write_ws_xlml_table(ws\n/*:Worksheet*/\n, opts, idx\n/*:number*/\n, wb\n/*:Workbook*/\n)\n/*:string*/\n{\n  if (!ws['!ref']) return \"\";\n  var range\n  /*:Range*/\n  = safe_decode_range(ws['!ref']);\n  var marr\n  /*:Array<Range>*/\n  = ws['!merges'] || [],\n      mi = 0;\n  var o\n  /*:Array<string>*/\n  = [];\n  if (ws['!cols']) ws['!cols'].forEach(function (n, i) {\n    process_col(n);\n    var w = !!n.width;\n    var p = col_obj_w(i, n);\n    var k\n    /*:any*/\n    = {\n      \"ss:Index\": i + 1\n    };\n    if (w) k['ss:Width'] = width2px(p.width);\n    if (n.hidden) k['ss:Hidden'] = \"1\";\n    o.push(writextag(\"Column\", null, k));\n  });\n  var dense = Array.isArray(ws);\n\n  for (var R = range.s.r; R <= range.e.r; ++R) {\n    var row = [write_ws_xlml_row(R, (ws['!rows'] || [])[R])];\n\n    for (var C = range.s.c; C <= range.e.c; ++C) {\n      var skip = false;\n\n      for (mi = 0; mi != marr.length; ++mi) {\n        if (marr[mi].s.c > C) continue;\n        if (marr[mi].s.r > R) continue;\n        if (marr[mi].e.c < C) continue;\n        if (marr[mi].e.r < R) continue;\n        if (marr[mi].s.c != C || marr[mi].s.r != R) skip = true;\n        break;\n      }\n\n      if (skip) continue;\n      var addr = {\n        r: R,\n        c: C\n      };\n      var ref = encode_cell(addr),\n          cell = dense ? (ws[R] || [])[C] : ws[ref];\n      row.push(write_ws_xlml_cell(cell, ref, ws, opts, idx, wb, addr));\n    }\n\n    row.push(\"</Row>\");\n    if (row.length > 2) o.push(row.join(\"\"));\n  }\n\n  return o.join(\"\");\n}\n\nfunction write_ws_xlml(idx\n/*:number*/\n, opts, wb\n/*:Workbook*/\n)\n/*:string*/\n{\n  var o\n  /*:Array<string>*/\n  = [];\n  var s = wb.SheetNames[idx];\n  var ws = wb.Sheets[s];\n  var t\n  /*:string*/\n  = ws ? write_ws_xlml_names(ws, opts, idx, wb) : \"\";\n  if (t.length > 0) o.push(\"<Names>\" + t + \"</Names>\");\n  /* Table */\n\n  t = ws ? write_ws_xlml_table(ws, opts, idx, wb) : \"\";\n  if (t.length > 0) o.push(\"<Table>\" + t + \"</Table>\");\n  /* WorksheetOptions */\n\n  o.push(write_ws_xlml_wsopts(ws, opts, idx, wb));\n  return o.join(\"\");\n}\n\nfunction write_xlml(wb, opts)\n/*:string*/\n{\n  if (!opts) opts = {};\n  if (!wb.SSF) wb.SSF = dup(table_fmt);\n\n  if (wb.SSF) {\n    make_ssf();\n    SSF_load_table(wb.SSF); // $FlowIgnore\n\n    opts.revssf = evert_num(wb.SSF);\n    opts.revssf[wb.SSF[65535]] = 0;\n    opts.ssf = wb.SSF;\n    opts.cellXfs = [];\n    get_cell_style(opts.cellXfs, {}, {\n      revssf: {\n        \"General\": 0\n      }\n    });\n  }\n\n  var d\n  /*:Array<string>*/\n  = [];\n  d.push(write_props_xlml(wb, opts));\n  d.push(write_wb_xlml(wb, opts));\n  d.push(\"\");\n  d.push(\"\");\n\n  for (var i = 0; i < wb.SheetNames.length; ++i) {\n    d.push(writextag(\"Worksheet\", write_ws_xlml(i, opts, wb), {\n      \"ss:Name\": escapexml(wb.SheetNames[i])\n    }));\n  }\n\n  d[2] = write_sty_xlml(wb, opts);\n  d[3] = write_names_xlml(wb, opts);\n  return XML_HEADER + writextag(\"Workbook\", d.join(\"\"), {\n    'xmlns': XLMLNS.ss,\n    'xmlns:o': XLMLNS.o,\n    'xmlns:x': XLMLNS.x,\n    'xmlns:ss': XLMLNS.ss,\n    'xmlns:dt': XLMLNS.dt,\n    'xmlns:html': XLMLNS.html\n  });\n}\n/* [MS-OLEDS] 2.3.8 CompObjStream */\n\n\nfunction parse_compobj(obj\n/*:CFBEntry*/\n) {\n  var v = {};\n  var o = obj.content;\n  /*:: if(o == null) return; */\n\n  /* [MS-OLEDS] 2.3.7 CompObjHeader -- All fields MUST be ignored */\n\n  o.l = 28;\n  v.AnsiUserType = o.read_shift(0, \"lpstr-ansi\");\n  v.AnsiClipboardFormat = parse_ClipboardFormatOrAnsiString(o);\n  if (o.length - o.l <= 4) return v;\n  var m\n  /*:number*/\n  = o.read_shift(4);\n  if (m == 0 || m > 40) return v;\n  o.l -= 4;\n  v.Reserved1 = o.read_shift(0, \"lpstr-ansi\");\n  if (o.length - o.l <= 4) return v;\n  m = o.read_shift(4);\n  if (m !== 0x71b239f4) return v;\n  v.UnicodeClipboardFormat = parse_ClipboardFormatOrUnicodeString(o);\n  m = o.read_shift(4);\n  if (m == 0 || m > 40) return v;\n  o.l -= 4;\n  v.Reserved2 = o.read_shift(0, \"lpwstr\");\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*/\n\n\nvar CONTINUE_RT = [0x003c, 0x043c, 0x0812, 0x0875, 0x087f];\n\nfunction slurp(RecordType, R, blob, length\n/*:number*/\n, opts)\n/*:any*/\n{\n  var l = length;\n  var bufs = [];\n  var d = blob.slice(blob.l, blob.l + l);\n  if (opts && opts.enc && opts.enc.insitu && d.length > 0) switch (RecordType) {\n    case 0x0009:\n    case 0x0209:\n    case 0x0409:\n    case 0x0809\n    /* BOF */\n    :\n    case 0x002f\n    /* FilePass */\n    :\n    case 0x0195\n    /* FileLock */\n    :\n    case 0x00e1\n    /* InterfaceHdr */\n    :\n    case 0x0196\n    /* RRDInfo */\n    :\n    case 0x0138\n    /* RRDHead */\n    :\n    case 0x0194\n    /* UsrExcl */\n    :\n    case 0x000a\n    /* EOF */\n    :\n      break;\n\n    case 0x0085\n    /* BoundSheet8 */\n    :\n      break;\n\n    default:\n      opts.enc.insitu(d);\n  }\n  bufs.push(d);\n  blob.l += l;\n\n  var nextrt = __readUInt16LE(blob, blob.l),\n      next = XLSRecordEnum[nextrt];\n\n  var start = 0;\n\n  while (next != null && CONTINUE_RT.indexOf(nextrt) > -1) {\n    l = __readUInt16LE(blob, blob.l + 2);\n    start = blob.l + 4;\n    if (nextrt == 0x0812\n    /* ContinueFrt */\n    ) start += 4;else if (nextrt == 0x0875 || nextrt == 0x087f) {\n      start += 12;\n    }\n    d = blob.slice(start, blob.l + 4 + l);\n    bufs.push(d);\n    blob.l += 4 + l;\n    next = XLSRecordEnum[nextrt = __readUInt16LE(blob, blob.l)];\n  }\n\n  var b = bconcat(bufs)\n  /*:any*/\n  ;\n  prep_blob(b, 0);\n  var ll = 0;\n  b.lens = [];\n\n  for (var j = 0; j < bufs.length; ++j) {\n    b.lens.push(ll);\n    ll += bufs[j].length;\n  }\n\n  if (b.length < length) throw \"XLS Record 0x\" + RecordType.toString(16) + \" Truncated: \" + b.length + \" < \" + length;\n  return R.f(b, b.length, opts);\n}\n\nfunction safe_format_xf(p\n/*:any*/\n, opts\n/*:ParseOpts*/\n, date1904\n/*:?boolean*/\n) {\n  if (p.t === 'z') return;\n  if (!p.XF) return;\n  var fmtid = 0;\n\n  try {\n    fmtid = p.z || p.XF.numFmtId || 0;\n    if (opts.cellNF) p.z = table_fmt[fmtid];\n  } catch (e) {\n    if (opts.WTF) throw e;\n  }\n\n  if (!opts || opts.cellText !== false) try {\n    if (p.t === 'e') {\n      p.w = p.w || BErr[p.v];\n    } else if (fmtid === 0 || fmtid == \"General\") {\n      if (p.t === 'n') {\n        if ((p.v | 0) === p.v) p.w = p.v.toString(10);else p.w = SSF_general_num(p.v);\n      } else p.w = SSF_general(p.v);\n    } else p.w = SSF_format(fmtid, p.v, {\n      date1904: !!date1904,\n      dateNF: opts && opts.dateNF\n    });\n  } catch (e) {\n    if (opts.WTF) throw e;\n  }\n\n  if (opts.cellDates && fmtid && p.t == 'n' && fmt_is_date(table_fmt[fmtid] || String(fmtid))) {\n    var _d = SSF_parse_date_code(p.v);\n\n    if (_d) {\n      p.t = 'd';\n      p.v = new Date(_d.y, _d.m - 1, _d.d, _d.H, _d.M, _d.S, _d.u);\n    }\n  }\n}\n\nfunction make_cell(val, ixfe, t)\n/*:Cell*/\n{\n  return {\n    v: val,\n    ixfe: ixfe,\n    t: t\n  }\n  /*:any*/\n  ;\n} // 2.3.2\n\n\nfunction parse_workbook(blob, options\n/*:ParseOpts*/\n)\n/*:Workbook*/\n{\n  var wb = {\n    opts: {}\n  }\n  /*:any*/\n  ;\n  var Sheets = {};\n  if (DENSE != null && options.dense == null) options.dense = DENSE;\n  var out\n  /*:Worksheet*/\n  = options.dense ? [] : {}\n  /*:any*/\n  ;\n  var Directory = {};\n  var range\n  /*:Range*/\n  = {}\n  /*:any*/\n  ;\n  var last_formula = null;\n  var sst\n  /*:SST*/\n  = []\n  /*:any*/\n  ;\n  var cur_sheet = \"\";\n  var Preamble = {};\n  var lastcell,\n      last_cell = \"\",\n      cc\n  /*:Cell*/\n  ,\n      cmnt,\n      rngC,\n      rngR;\n  var sharedf = {};\n  var arrayf\n  /*:Array<[Range, string]>*/\n  = [];\n  var temp_val\n  /*:Cell*/\n  ;\n  var country;\n  var XFs = [];\n  /* XF records */\n\n  var palette\n  /*:Array<[number, number, number]>*/\n  = [];\n  var Workbook\n  /*:WBWBProps*/\n  = {\n    Sheets: [],\n    WBProps: {\n      date1904: false\n    },\n    Views: [{}]\n  }\n  /*:any*/\n  ,\n      wsprops = {};\n\n  var get_rgb = function getrgb(icv\n  /*:number*/\n  )\n  /*:[number, number, number]*/\n  {\n    if (icv < 8) return XLSIcv[icv];\n    if (icv < 64) return palette[icv - 8] || XLSIcv[icv];\n    return XLSIcv[icv];\n  };\n\n  var process_cell_style = function pcs(cell, line\n  /*:any*/\n  , options) {\n    var xfd = line.XF.data;\n    if (!xfd || !xfd.patternType || !options || !options.cellStyles) return;\n    line.s = {}\n    /*:any*/\n    ;\n    line.s.patternType = xfd.patternType;\n    var t;\n\n    if (t = rgb2Hex(get_rgb(xfd.icvFore))) {\n      line.s.fgColor = {\n        rgb: t\n      };\n    }\n\n    if (t = rgb2Hex(get_rgb(xfd.icvBack))) {\n      line.s.bgColor = {\n        rgb: t\n      };\n    }\n  };\n\n  var addcell = function addcell(cell\n  /*:any*/\n  , line\n  /*:any*/\n  , options\n  /*:any*/\n  ) {\n    if (file_depth > 1) return;\n    if (options.sheetRows && cell.r >= options.sheetRows) return;\n    if (options.cellStyles && line.XF && line.XF.data) process_cell_style(cell, line, options);\n    delete line.ixfe;\n    delete line.XF;\n    lastcell = cell;\n    last_cell = encode_cell(cell);\n    if (!range || !range.s || !range.e) range = {\n      s: {\n        r: 0,\n        c: 0\n      },\n      e: {\n        r: 0,\n        c: 0\n      }\n    };\n    if (cell.r < range.s.r) range.s.r = cell.r;\n    if (cell.c < range.s.c) range.s.c = cell.c;\n    if (cell.r + 1 > range.e.r) range.e.r = cell.r + 1;\n    if (cell.c + 1 > range.e.c) range.e.c = cell.c + 1;\n\n    if (options.cellFormula && line.f) {\n      for (var afi = 0; afi < arrayf.length; ++afi) {\n        if (arrayf[afi][0].s.c > cell.c || arrayf[afi][0].s.r > cell.r) continue;\n        if (arrayf[afi][0].e.c < cell.c || arrayf[afi][0].e.r < cell.r) continue;\n        line.F = encode_range(arrayf[afi][0]);\n        if (arrayf[afi][0].s.c != cell.c || arrayf[afi][0].s.r != cell.r) delete line.f;\n        if (line.f) line.f = \"\" + stringify_formula(arrayf[afi][1], range, cell, supbooks, opts);\n        break;\n      }\n    }\n\n    {\n      if (options.dense) {\n        if (!out[cell.r]) out[cell.r] = [];\n        out[cell.r][cell.c] = line;\n      } else out[last_cell] = line;\n    }\n  };\n\n  var opts = {\n    enc: false,\n    // encrypted\n    sbcch: 0,\n    // cch in the preceding SupBook\n    snames: [],\n    // sheetnames\n    sharedf: sharedf,\n    // shared formulae by address\n    arrayf: arrayf,\n    // array formulae array\n    rrtabid: [],\n    // RRTabId\n    lastuser: \"\",\n    // Last User from WriteAccess\n    biff: 8,\n    // BIFF version\n    codepage: 0,\n    // CP from CodePage record\n    winlocked: 0,\n    // fLockWn from WinProtect\n    cellStyles: !!options && !!options.cellStyles,\n    WTF: !!options && !!options.wtf\n  }\n  /*:any*/\n  ;\n  if (options.password) opts.password = options.password;\n  var themes;\n  var merges\n  /*:Array<Range>*/\n  = [];\n  var objects = [];\n  var colinfo\n  /*:Array<ColInfo>*/\n  = [],\n      rowinfo\n  /*:Array<RowInfo>*/\n  = [];\n  var seencol = false;\n  var supbooks = []\n  /*:any*/\n  ; // 1-indexed, will hold extern names\n\n  supbooks.SheetNames = opts.snames;\n  supbooks.sharedf = opts.sharedf;\n  supbooks.arrayf = opts.arrayf;\n  supbooks.names = [];\n  supbooks.XTI = [];\n  var last_RT = 0;\n  var file_depth = 0;\n  /* TODO: make a real stack */\n\n  var BIFF2Fmt = 0,\n      BIFF2FmtTable\n  /*:Array<string>*/\n  = [];\n  var FilterDatabases = [];\n  /* TODO: sort out supbooks and process elsewhere */\n\n  var last_lbl\n  /*:?DefinedName*/\n  ;\n  /* explicit override for some broken writers */\n\n  opts.codepage = 1200;\n  set_cp(1200);\n  var seen_codepage = false;\n\n  while (blob.l < blob.length - 1) {\n    var s = blob.l;\n    var RecordType = blob.read_shift(2);\n    if (RecordType === 0 && last_RT === 0x000a\n    /* EOF */\n    ) break;\n    var length = blob.l === blob.length ? 0 : blob.read_shift(2);\n    var R = XLSRecordEnum[RecordType]; //console.log(RecordType.toString(16), RecordType, R, blob.l, length, blob.length);\n    //if(!R) console.log(blob.slice(blob.l, blob.l + length));\n\n    if (R && R.f) {\n      if (options.bookSheets) {\n        if (last_RT === 0x0085\n        /* BoundSheet8 */\n        && RecordType !== 0x0085\n        /* R.n !== 'BoundSheet8' */\n        ) break;\n      }\n\n      last_RT = RecordType;\n\n      if (R.r === 2 || R.r == 12) {\n        var rt = blob.read_shift(2);\n        length -= 2;\n        if (!opts.enc && rt !== RecordType && ((rt & 0xFF) << 8 | rt >> 8) !== RecordType) throw new Error(\"rt mismatch: \" + rt + \"!=\" + RecordType);\n\n        if (R.r == 12) {\n          blob.l += 10;\n          length -= 10;\n        } // skip FRT\n\n      } //console.error(R,blob.l,length,blob.length);\n\n\n      var val\n      /*:any*/\n      = {}\n      /*:any*/\n      ;\n      if (RecordType === 0x000a\n      /* EOF */\n      ) val =\n      /*::(*/\n      R.f(blob, length, opts)\n      /*:: :any)*/\n      ;else val =\n      /*::(*/\n      slurp(RecordType, R, blob, length, opts)\n      /*:: :any)*/\n      ;\n      /*:: val = (val:any); */\n\n      if (file_depth == 0 && [0x0009, 0x0209, 0x0409, 0x0809].indexOf(last_RT) === -1\n      /* 'BOF' */\n      ) continue;\n\n      switch (RecordType) {\n        case 0x0022\n        /* Date1904 */\n        :\n          /*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */\n          wb.opts.Date1904 = Workbook.WBProps.date1904 = val;\n          break;\n\n        case 0x0086\n        /* WriteProtect */\n        :\n          wb.opts.WriteProtect = true;\n          break;\n\n        case 0x002f\n        /* FilePass */\n        :\n          if (!opts.enc) blob.l = 0;\n          opts.enc = val;\n          if (!options.password) throw new Error(\"File is password-protected\");\n          if (val.valid == null) throw new Error(\"Encryption scheme unsupported\");\n          if (!val.valid) throw new Error(\"Password is incorrect\");\n          break;\n\n        case 0x005c\n        /* WriteAccess */\n        :\n          opts.lastuser = val;\n          break;\n\n        case 0x0042\n        /* CodePage */\n        :\n          var cpval = Number(val);\n          /* overrides based on test cases */\n\n          switch (cpval) {\n            case 0x5212:\n              cpval = 1200;\n              break;\n\n            case 0x8000:\n              cpval = 10000;\n              break;\n\n            case 0x8001:\n              cpval = 1252;\n              break;\n          }\n\n          set_cp(opts.codepage = cpval);\n          seen_codepage = true;\n          break;\n\n        case 0x013d\n        /* RRTabId */\n        :\n          opts.rrtabid = val;\n          break;\n\n        case 0x0019\n        /* WinProtect */\n        :\n          opts.winlocked = val;\n          break;\n\n        case 0x01b7\n        /* RefreshAll */\n        :\n          wb.opts[\"RefreshAll\"] = val;\n          break;\n\n        case 0x000c\n        /* CalcCount */\n        :\n          wb.opts[\"CalcCount\"] = val;\n          break;\n\n        case 0x0010\n        /* CalcDelta */\n        :\n          wb.opts[\"CalcDelta\"] = val;\n          break;\n\n        case 0x0011\n        /* CalcIter */\n        :\n          wb.opts[\"CalcIter\"] = val;\n          break;\n\n        case 0x000d\n        /* CalcMode */\n        :\n          wb.opts[\"CalcMode\"] = val;\n          break;\n\n        case 0x000e\n        /* CalcPrecision */\n        :\n          wb.opts[\"CalcPrecision\"] = val;\n          break;\n\n        case 0x005f\n        /* CalcSaveRecalc */\n        :\n          wb.opts[\"CalcSaveRecalc\"] = val;\n          break;\n\n        case 0x000f\n        /* CalcRefMode */\n        :\n          opts.CalcRefMode = val;\n          break;\n        // TODO: implement R1C1\n\n        case 0x08a3\n        /* ForceFullCalculation */\n        :\n          wb.opts.FullCalc = val;\n          break;\n\n        case 0x0081\n        /* WsBool */\n        :\n          if (val.fDialog) out[\"!type\"] = \"dialog\";\n          if (!val.fBelow) (out[\"!outline\"] || (out[\"!outline\"] = {})).above = true;\n          if (!val.fRight) (out[\"!outline\"] || (out[\"!outline\"] = {})).left = true;\n          break;\n        // TODO\n\n        case 0x00e0\n        /* XF */\n        :\n          XFs.push(val);\n          break;\n\n        case 0x01ae\n        /* SupBook */\n        :\n          supbooks.push([val]);\n          supbooks[supbooks.length - 1].XTI = [];\n          break;\n\n        case 0x0023:\n        case 0x0223\n        /* ExternName */\n        :\n          supbooks[supbooks.length - 1].push(val);\n          break;\n\n        case 0x0018:\n        case 0x0218\n        /* Lbl */\n        :\n          last_lbl = {\n            Name: val.Name,\n            Ref: stringify_formula(val.rgce, range, null, supbooks, opts)\n          }\n          /*:DefinedName*/\n          ;\n          if (val.itab > 0) last_lbl.Sheet = val.itab - 1;\n          supbooks.names.push(last_lbl);\n\n          if (!supbooks[0]) {\n            supbooks[0] = [];\n            supbooks[0].XTI = [];\n          }\n\n          supbooks[supbooks.length - 1].push(val);\n          if (val.Name == \"_xlnm._FilterDatabase\" && val.itab > 0) if (val.rgce && val.rgce[0] && val.rgce[0][0] && val.rgce[0][0][0] == 'PtgArea3d') FilterDatabases[val.itab - 1] = {\n            ref: encode_range(val.rgce[0][0][1][2])\n          };\n          break;\n\n        case 0x0016\n        /* ExternCount */\n        :\n          opts.ExternCount = val;\n          break;\n\n        case 0x0017\n        /* ExternSheet */\n        :\n          if (supbooks.length == 0) {\n            supbooks[0] = [];\n            supbooks[0].XTI = [];\n          }\n\n          supbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val);\n          supbooks.XTI = supbooks.XTI.concat(val);\n          break;\n\n        case 0x0894\n        /* NameCmt */\n        :\n          /* TODO: search for correct name */\n          if (opts.biff < 8) break;\n          if (last_lbl != null) last_lbl.Comment = val[1];\n          break;\n\n        case 0x0012\n        /* Protect */\n        :\n          out[\"!protect\"] = val;\n          break;\n\n        /* for sheet or book */\n\n        case 0x0013\n        /* Password */\n        :\n          if (val !== 0 && opts.WTF) console.error(\"Password verifier: \" + val);\n          break;\n\n        case 0x0085\n        /* BoundSheet8 */\n        :\n          {\n            Directory[val.pos] = val;\n            opts.snames.push(val.name);\n          }\n          break;\n\n        case 0x000a\n        /* EOF */\n        :\n          {\n            if (--file_depth) break;\n\n            if (range.e) {\n              if (range.e.r > 0 && range.e.c > 0) {\n                range.e.r--;\n                range.e.c--;\n                out[\"!ref\"] = encode_range(range);\n\n                if (options.sheetRows && options.sheetRows <= range.e.r) {\n                  var tmpri = range.e.r;\n                  range.e.r = options.sheetRows - 1;\n                  out[\"!fullref\"] = out[\"!ref\"];\n                  out[\"!ref\"] = encode_range(range);\n                  range.e.r = tmpri;\n                }\n\n                range.e.r++;\n                range.e.c++;\n              }\n\n              if (merges.length > 0) out[\"!merges\"] = merges;\n              if (objects.length > 0) out[\"!objects\"] = objects;\n              if (colinfo.length > 0) out[\"!cols\"] = colinfo;\n              if (rowinfo.length > 0) out[\"!rows\"] = rowinfo;\n              Workbook.Sheets.push(wsprops);\n            }\n\n            if (cur_sheet === \"\") Preamble = out;else Sheets[cur_sheet] = out;\n            out = options.dense ? [] : {}\n            /*:any*/\n            ;\n          }\n          break;\n\n        case 0x0009:\n        case 0x0209:\n        case 0x0409:\n        case 0x0809\n        /* BOF */\n        :\n          {\n            if (opts.biff === 8) opts.biff = {\n              /*::[*/\n              0x0009\n              /*::]*/\n              : 2,\n\n              /*::[*/\n              0x0209\n              /*::]*/\n              : 3,\n\n              /*::[*/\n              0x0409\n              /*::]*/\n              : 4\n            }[RecordType] || {\n              /*::[*/\n              0x0200\n              /*::]*/\n              : 2,\n\n              /*::[*/\n              0x0300\n              /*::]*/\n              : 3,\n\n              /*::[*/\n              0x0400\n              /*::]*/\n              : 4,\n\n              /*::[*/\n              0x0500\n              /*::]*/\n              : 5,\n\n              /*::[*/\n              0x0600\n              /*::]*/\n              : 8,\n\n              /*::[*/\n              0x0002\n              /*::]*/\n              : 2,\n\n              /*::[*/\n              0x0007\n              /*::]*/\n              : 2\n            }[val.BIFFVer] || 8;\n            opts.biffguess = val.BIFFVer == 0;\n\n            if (val.BIFFVer == 0 && val.dt == 0x1000) {\n              opts.biff = 5;\n              seen_codepage = true;\n              set_cp(opts.codepage = 28591);\n            }\n\n            if (opts.biff == 8 && val.BIFFVer == 0 && val.dt == 16) opts.biff = 2;\n            if (file_depth++) break;\n            out = options.dense ? [] : {}\n            /*:any*/\n            ;\n\n            if (opts.biff < 8 && !seen_codepage) {\n              seen_codepage = true;\n              set_cp(opts.codepage = options.codepage || 1252);\n            }\n\n            if (opts.biff < 5 || val.BIFFVer == 0 && val.dt == 0x1000) {\n              if (cur_sheet === \"\") cur_sheet = \"Sheet1\";\n              range = {\n                s: {\n                  r: 0,\n                  c: 0\n                },\n                e: {\n                  r: 0,\n                  c: 0\n                }\n              };\n              /* fake BoundSheet8 */\n\n              var fakebs8 = {\n                pos: blob.l - length,\n                name: cur_sheet\n              };\n              Directory[fakebs8.pos] = fakebs8;\n              opts.snames.push(cur_sheet);\n            } else cur_sheet = (Directory[s] || {\n              name: \"\"\n            }).name;\n\n            if (val.dt == 0x20) out[\"!type\"] = \"chart\";\n            if (val.dt == 0x40) out[\"!type\"] = \"macro\";\n            merges = [];\n            objects = [];\n            opts.arrayf = arrayf = [];\n            colinfo = [];\n            rowinfo = [];\n            seencol = false;\n            wsprops = {\n              Hidden: (Directory[s] || {\n                hs: 0\n              }).hs,\n              name: cur_sheet\n            };\n          }\n          break;\n\n        case 0x0203\n        /* Number */\n        :\n        case 0x0003\n        /* BIFF2NUM */\n        :\n        case 0x0002\n        /* BIFF2INT */\n        :\n          {\n            if (out[\"!type\"] == \"chart\") if (options.dense ? (out[val.r] || [])[val.c] : out[encode_cell({\n              c: val.c,\n              r: val.r\n            })]) ++val.c;\n            temp_val = {\n              ixfe: val.ixfe,\n              XF: XFs[val.ixfe] || {},\n              v: val.val,\n              t: 'n'\n            }\n            /*:any*/\n            ;\n            if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x3F];\n            safe_format_xf(temp_val, options, wb.opts.Date1904);\n            addcell({\n              c: val.c,\n              r: val.r\n            }, temp_val, options);\n          }\n          break;\n\n        case 0x0005:\n        case 0x0205\n        /* BoolErr */\n        :\n          {\n            temp_val = {\n              ixfe: val.ixfe,\n              XF: XFs[val.ixfe],\n              v: val.val,\n              t: val.t\n            }\n            /*:any*/\n            ;\n            if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x3F];\n            safe_format_xf(temp_val, options, wb.opts.Date1904);\n            addcell({\n              c: val.c,\n              r: val.r\n            }, temp_val, options);\n          }\n          break;\n\n        case 0x027e\n        /* RK */\n        :\n          {\n            temp_val = {\n              ixfe: val.ixfe,\n              XF: XFs[val.ixfe],\n              v: val.rknum,\n              t: 'n'\n            }\n            /*:any*/\n            ;\n            if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x3F];\n            safe_format_xf(temp_val, options, wb.opts.Date1904);\n            addcell({\n              c: val.c,\n              r: val.r\n            }, temp_val, options);\n          }\n          break;\n\n        case 0x00bd\n        /* MulRk */\n        :\n          {\n            for (var j = val.c; j <= val.C; ++j) {\n              var ixfe = val.rkrec[j - val.c][0];\n              temp_val = {\n                ixfe: ixfe,\n                XF: XFs[ixfe],\n                v: val.rkrec[j - val.c][1],\n                t: 'n'\n              }\n              /*:any*/\n              ;\n              if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x3F];\n              safe_format_xf(temp_val, options, wb.opts.Date1904);\n              addcell({\n                c: j,\n                r: val.r\n              }, temp_val, options);\n            }\n          }\n          break;\n\n        case 0x0006:\n        case 0x0206:\n        case 0x0406\n        /* Formula */\n        :\n          {\n            if (val.val == 'String') {\n              last_formula = val;\n              break;\n            }\n\n            temp_val = make_cell(val.val, val.cell.ixfe, val.tt);\n            temp_val.XF = XFs[temp_val.ixfe];\n\n            if (options.cellFormula) {\n              var _f = val.formula;\n\n              if (_f && _f[0] && _f[0][0] && _f[0][0][0] == 'PtgExp') {\n                var _fr = _f[0][0][1][0],\n                    _fc = _f[0][0][1][1];\n\n                var _fe = encode_cell({\n                  r: _fr,\n                  c: _fc\n                });\n\n                if (sharedf[_fe]) temp_val.f = \"\" + stringify_formula(val.formula, range, val.cell, supbooks, opts);else temp_val.F = ((options.dense ? (out[_fr] || [])[_fc] : out[_fe]) || {}).F;\n              } else temp_val.f = \"\" + stringify_formula(val.formula, range, val.cell, supbooks, opts);\n            }\n\n            if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x3F];\n            safe_format_xf(temp_val, options, wb.opts.Date1904);\n            addcell(val.cell, temp_val, options);\n            last_formula = val;\n          }\n          break;\n\n        case 0x0007:\n        case 0x0207\n        /* String */\n        :\n          {\n            if (last_formula) {\n              /* technically always true */\n              last_formula.val = val;\n              temp_val = make_cell(val, last_formula.cell.ixfe, 's');\n              temp_val.XF = XFs[temp_val.ixfe];\n\n              if (options.cellFormula) {\n                temp_val.f = \"\" + stringify_formula(last_formula.formula, range, last_formula.cell, supbooks, opts);\n              }\n\n              if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x3F];\n              safe_format_xf(temp_val, options, wb.opts.Date1904);\n              addcell(last_formula.cell, temp_val, options);\n              last_formula = null;\n            } else throw new Error(\"String record expects Formula\");\n          }\n          break;\n\n        case 0x0021:\n        case 0x0221\n        /* Array */\n        :\n          {\n            arrayf.push(val);\n\n            var _arraystart = encode_cell(val[0].s);\n\n            cc = options.dense ? (out[val[0].s.r] || [])[val[0].s.c] : out[_arraystart];\n\n            if (options.cellFormula && cc) {\n              if (!last_formula) break;\n              /* technically unreachable */\n\n              if (!_arraystart || !cc) break;\n              cc.f = \"\" + stringify_formula(val[1], range, val[0], supbooks, opts);\n              cc.F = encode_range(val[0]);\n            }\n          }\n          break;\n\n        case 0x04bc\n        /* ShrFmla */\n        :\n          {\n            if (!options.cellFormula) break;\n\n            if (last_cell) {\n              /* TODO: capture range */\n              if (!last_formula) break;\n              /* technically unreachable */\n\n              sharedf[encode_cell(last_formula.cell)] = val[0];\n              cc = options.dense ? (out[last_formula.cell.r] || [])[last_formula.cell.c] : out[encode_cell(last_formula.cell)];\n              (cc || {}).f = \"\" + stringify_formula(val[0], range, lastcell, supbooks, opts);\n            }\n          }\n          break;\n\n        case 0x00fd\n        /* LabelSst */\n        :\n          temp_val = make_cell(sst[val.isst].t, val.ixfe, 's');\n          if (sst[val.isst].h) temp_val.h = sst[val.isst].h;\n          temp_val.XF = XFs[temp_val.ixfe];\n          if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x3F];\n          safe_format_xf(temp_val, options, wb.opts.Date1904);\n          addcell({\n            c: val.c,\n            r: val.r\n          }, temp_val, options);\n          break;\n\n        case 0x0201\n        /* Blank */\n        :\n          if (options.sheetStubs) {\n            temp_val = {\n              ixfe: val.ixfe,\n              XF: XFs[val.ixfe],\n              t: 'z'\n            }\n            /*:any*/\n            ;\n            if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x3F];\n            safe_format_xf(temp_val, options, wb.opts.Date1904);\n            addcell({\n              c: val.c,\n              r: val.r\n            }, temp_val, options);\n          }\n\n          break;\n\n        case 0x00be\n        /* MulBlank */\n        :\n          if (options.sheetStubs) {\n            for (var _j = val.c; _j <= val.C; ++_j) {\n              var _ixfe = val.ixfe[_j - val.c];\n              temp_val = {\n                ixfe: _ixfe,\n                XF: XFs[_ixfe],\n                t: 'z'\n              }\n              /*:any*/\n              ;\n              if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x3F];\n              safe_format_xf(temp_val, options, wb.opts.Date1904);\n              addcell({\n                c: _j,\n                r: val.r\n              }, temp_val, options);\n            }\n          }\n\n          break;\n\n        case 0x00d6\n        /* RString */\n        :\n        case 0x0204\n        /* Label */\n        :\n        case 0x0004\n        /* BIFF2STR */\n        :\n          temp_val = make_cell(val.val, val.ixfe, 's');\n          temp_val.XF = XFs[temp_val.ixfe];\n          if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x3F];\n          safe_format_xf(temp_val, options, wb.opts.Date1904);\n          addcell({\n            c: val.c,\n            r: val.r\n          }, temp_val, options);\n          break;\n\n        case 0x0000:\n        case 0x0200\n        /* Dimensions */\n        :\n          {\n            if (file_depth === 1) range = val;\n            /* TODO: stack */\n          }\n          break;\n\n        case 0x00fc\n        /* SST */\n        :\n          {\n            sst = val;\n          }\n          break;\n\n        case 0x041e\n        /* Format */\n        :\n          {\n            /* val = [id, fmt] */\n            if (opts.biff == 4) {\n              BIFF2FmtTable[BIFF2Fmt++] = val[1];\n\n              for (var b4idx = 0; b4idx < BIFF2Fmt + 163; ++b4idx) {\n                if (table_fmt[b4idx] == val[1]) break;\n              }\n\n              if (b4idx >= 163) SSF_load(val[1], BIFF2Fmt + 163);\n            } else SSF_load(val[1], val[0]);\n          }\n          break;\n\n        case 0x001e\n        /* BIFF2FORMAT */\n        :\n          {\n            BIFF2FmtTable[BIFF2Fmt++] = val;\n\n            for (var b2idx = 0; b2idx < BIFF2Fmt + 163; ++b2idx) {\n              if (table_fmt[b2idx] == val) break;\n            }\n\n            if (b2idx >= 163) SSF_load(val, BIFF2Fmt + 163);\n          }\n          break;\n\n        case 0x00e5\n        /* MergeCells */\n        :\n          merges = merges.concat(val);\n          break;\n\n        case 0x005d\n        /* Obj */\n        :\n          objects[val.cmo[0]] = opts.lastobj = val;\n          break;\n\n        case 0x01b6\n        /* TxO */\n        :\n          opts.lastobj.TxO = val;\n          break;\n\n        case 0x007f\n        /* ImData */\n        :\n          opts.lastobj.ImData = val;\n          break;\n\n        case 0x01b8\n        /* HLink */\n        :\n          {\n            for (rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR) {\n              for (rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n                cc = options.dense ? (out[rngR] || [])[rngC] : out[encode_cell({\n                  c: rngC,\n                  r: rngR\n                })];\n                if (cc) cc.l = val[1];\n              }\n            }\n          }\n          break;\n\n        case 0x0800\n        /* HLinkTooltip */\n        :\n          {\n            for (rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR) {\n              for (rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n                cc = options.dense ? (out[rngR] || [])[rngC] : out[encode_cell({\n                  c: rngC,\n                  r: rngR\n                })];\n                if (cc && cc.l) cc.l.Tooltip = val[1];\n              }\n            }\n          }\n          break;\n\n        case 0x001c\n        /* Note */\n        :\n          {\n            if (opts.biff <= 5 && opts.biff >= 2) break;\n            /* TODO: BIFF5 */\n\n            cc = options.dense ? (out[val[0].r] || [])[val[0].c] : out[encode_cell(val[0])];\n            var noteobj = objects[val[2]];\n\n            if (!cc) {\n              if (options.dense) {\n                if (!out[val[0].r]) out[val[0].r] = [];\n                cc = out[val[0].r][val[0].c] = {\n                  t: \"z\"\n                }\n                /*:any*/\n                ;\n              } else {\n                cc = out[encode_cell(val[0])] = {\n                  t: \"z\"\n                }\n                /*:any*/\n                ;\n              }\n\n              range.e.r = Math.max(range.e.r, val[0].r);\n              range.s.r = Math.min(range.s.r, val[0].r);\n              range.e.c = Math.max(range.e.c, val[0].c);\n              range.s.c = Math.min(range.s.c, val[0].c);\n            }\n\n            if (!cc.c) cc.c = [];\n            cmnt = {\n              a: val[1],\n              t: noteobj.TxO.t\n            };\n            cc.c.push(cmnt);\n          }\n          break;\n\n        case 0x087d\n        /* XFExt */\n        :\n          update_xfext(XFs[val.ixfe], val.ext);\n          break;\n\n        case 0x007d\n        /* ColInfo */\n        :\n          {\n            if (!opts.cellStyles) break;\n\n            while (val.e >= val.s) {\n              colinfo[val.e--] = {\n                width: val.w / 256,\n                level: val.level || 0,\n                hidden: !!(val.flags & 1)\n              };\n\n              if (!seencol) {\n                seencol = true;\n                find_mdw_colw(val.w / 256);\n              }\n\n              process_col(colinfo[val.e + 1]);\n            }\n          }\n          break;\n\n        case 0x0208\n        /* Row */\n        :\n          {\n            var rowobj = {};\n\n            if (val.level != null) {\n              rowinfo[val.r] = rowobj;\n              rowobj.level = val.level;\n            }\n\n            if (val.hidden) {\n              rowinfo[val.r] = rowobj;\n              rowobj.hidden = true;\n            }\n\n            if (val.hpt) {\n              rowinfo[val.r] = rowobj;\n              rowobj.hpt = val.hpt;\n              rowobj.hpx = pt2px(val.hpt);\n            }\n          }\n          break;\n\n        case 0x0026\n        /* LeftMargin */\n        :\n        case 0x0027\n        /* RightMargin */\n        :\n        case 0x0028\n        /* TopMargin */\n        :\n        case 0x0029\n        /* BottomMargin */\n        :\n          if (!out['!margins']) default_margins(out['!margins'] = {});\n          out['!margins'][{\n            0x26: \"left\",\n            0x27: \"right\",\n            0x28: \"top\",\n            0x29: \"bottom\"\n          }[RecordType]] = val;\n          break;\n\n        case 0x00a1\n        /* Setup */\n        :\n          // TODO\n          if (!out['!margins']) default_margins(out['!margins'] = {});\n          out['!margins'].header = val.header;\n          out['!margins'].footer = val.footer;\n          break;\n\n        case 0x023e\n        /* Window2 */\n        :\n          // TODO\n          // $FlowIgnore\n          if (val.RTL) Workbook.Views[0].RTL = true;\n          break;\n\n        case 0x0092\n        /* Palette */\n        :\n          palette = val;\n          break;\n\n        case 0x0896\n        /* Theme */\n        :\n          themes = val;\n          break;\n\n        case 0x008c\n        /* Country */\n        :\n          country = val;\n          break;\n\n        case 0x01ba\n        /* CodeName */\n        :\n          {\n            /*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */\n            if (!cur_sheet) Workbook.WBProps.CodeName = val || \"ThisWorkbook\";else wsprops.CodeName = val || wsprops.name;\n          }\n          break;\n      }\n    } else {\n      if (!R) console.error(\"Missing Info for XLS Record 0x\" + RecordType.toString(16));\n      blob.l += length;\n    }\n  }\n\n  wb.SheetNames = keys(Directory).sort(function (a, b) {\n    return Number(a) - Number(b);\n  }).map(function (x) {\n    return Directory[x].name;\n  });\n  if (!options.bookSheets) wb.Sheets = Sheets;\n\n  if (!wb.SheetNames.length && Preamble[\"!ref\"]) {\n    wb.SheetNames.push(\"Sheet1\");\n    /*jshint -W069 */\n\n    if (wb.Sheets) wb.Sheets[\"Sheet1\"] = Preamble;\n    /*jshint +W069 */\n  } else wb.Preamble = Preamble;\n\n  if (wb.Sheets) FilterDatabases.forEach(function (r, i) {\n    wb.Sheets[wb.SheetNames[i]]['!autofilter'] = r;\n  });\n  wb.Strings = sst;\n  wb.SSF = dup(table_fmt);\n  if (opts.enc) wb.Encryption = opts.enc;\n  if (themes) wb.Themes = themes;\n  wb.Metadata = {};\n  if (country !== undefined) wb.Metadata.Country = country;\n  if (supbooks.names.length > 0) Workbook.Names = supbooks.names;\n  wb.Workbook = Workbook;\n  return wb;\n}\n/* TODO: split props*/\n\n\nvar PSCLSID = {\n  SI: \"e0859ff2f94f6810ab9108002b27b3d9\",\n  DSI: \"02d5cdd59c2e1b10939708002b2cf9ae\",\n  UDI: \"05d5cdd59c2e1b10939708002b2cf9ae\"\n};\n\nfunction parse_xls_props(cfb\n/*:CFBContainer*/\n, props, o) {\n  /* [MS-OSHARED] 2.3.3.2.2 Document Summary Information Property Set */\n  var DSI = CFB.find(cfb, '/!DocumentSummaryInformation');\n  if (DSI && DSI.size > 0) try {\n    var DocSummary = parse_PropertySetStream(DSI, DocSummaryPIDDSI, PSCLSID.DSI);\n\n    for (var d in DocSummary) {\n      props[d] = DocSummary[d];\n    }\n  } catch (e) {\n    if (o.WTF) throw e;\n    /* empty */\n  }\n  /* [MS-OSHARED] 2.3.3.2.1 Summary Information Property Set*/\n\n  var SI = CFB.find(cfb, '/!SummaryInformation');\n  if (SI && SI.size > 0) try {\n    var Summary = parse_PropertySetStream(SI, SummaryPIDSI, PSCLSID.SI);\n\n    for (var s in Summary) {\n      if (props[s] == null) props[s] = Summary[s];\n    }\n  } catch (e) {\n    if (o.WTF) throw e;\n    /* empty */\n  }\n\n  if (props.HeadingPairs && props.TitlesOfParts) {\n    load_props_pairs(props.HeadingPairs, props.TitlesOfParts, props, o);\n    delete props.HeadingPairs;\n    delete props.TitlesOfParts;\n  }\n}\n\nfunction write_xls_props(wb\n/*:Workbook*/\n, cfb\n/*:CFBContainer*/\n) {\n  var DSEntries = [],\n      SEntries = [],\n      CEntries = [];\n  var i = 0,\n      Keys;\n  var DocSummaryRE\n  /*:{[key:string]:string}*/\n  = evert_key(DocSummaryPIDDSI, \"n\");\n  var SummaryRE\n  /*:{[key:string]:string}*/\n  = evert_key(SummaryPIDSI, \"n\");\n\n  if (wb.Props) {\n    Keys = keys(wb.Props); // $FlowIgnore\n\n    for (i = 0; i < Keys.length; ++i) {\n      (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    }\n  }\n\n  if (wb.Custprops) {\n    Keys = keys(wb.Custprops); // $FlowIgnore\n\n    for (i = 0; i < Keys.length; ++i) {\n      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    }\n  }\n\n  var CEntries2 = [];\n\n  for (i = 0; i < CEntries.length; ++i) {\n    if (XLSPSSkip.indexOf(CEntries[i][0]) > -1 || PseudoPropsPairs.indexOf(CEntries[i][0]) > -1) continue;\n    if (CEntries[i][1] == null) continue;\n    CEntries2.push(CEntries[i]);\n  }\n\n  if (SEntries.length) CFB.utils.cfb_add(cfb, \"/\\x05SummaryInformation\", write_PropertySetStream(SEntries, PSCLSID.SI, SummaryRE, SummaryPIDSI));\n  if (DSEntries.length || CEntries2.length) CFB.utils.cfb_add(cfb, \"/\\x05DocumentSummaryInformation\", write_PropertySetStream(DSEntries, PSCLSID.DSI, DocSummaryRE, DocSummaryPIDDSI, CEntries2.length ? CEntries2 : null, PSCLSID.UDI));\n}\n\nfunction parse_xlscfb(cfb\n/*:any*/\n, options\n/*:?ParseOpts*/\n)\n/*:Workbook*/\n{\n  if (!options) options = {};\n  fix_read_opts(options);\n  reset_cp();\n  if (options.codepage) set_ansi(options.codepage);\n  var CompObj\n  /*:?CFBEntry*/\n  , WB\n  /*:?any*/\n  ;\n\n  if (cfb.FullPaths) {\n    if (CFB.find(cfb, '/encryption')) throw new Error(\"File is password-protected\");\n    CompObj = CFB.find(cfb, '!CompObj');\n    WB = CFB.find(cfb, '/Workbook') || CFB.find(cfb, '/Book');\n  } else {\n    switch (options.type) {\n      case 'base64':\n        cfb = s2a(Base64_decode(cfb));\n        break;\n\n      case 'binary':\n        cfb = s2a(cfb);\n        break;\n\n      case 'buffer':\n        break;\n\n      case 'array':\n        if (!Array.isArray(cfb)) cfb = Array.prototype.slice.call(cfb);\n        break;\n    }\n\n    prep_blob(cfb, 0);\n    WB = {\n      content: cfb\n    }\n    /*:any*/\n    ;\n  }\n\n  var\n  /*::CompObjP, */\n  WorkbookP\n  /*:: :Workbook = XLSX.utils.book_new(); */\n  ;\n\n  var _data\n  /*:?any*/\n  ;\n\n  if (CompObj)\n    /*::CompObjP = */\n    parse_compobj(CompObj);\n  if (options.bookProps && !options.bookSheets) WorkbookP = {}\n  /*:any*/\n  ;else\n    /*:: if(cfb instanceof CFBContainer) */\n    {\n      var T = has_buf ? 'buffer' : 'array';\n      if (WB && WB.content) WorkbookP = parse_workbook(WB.content, options);\n      /* Quattro Pro 7-8 */\n      else if ((_data = CFB.find(cfb, 'PerfectOffice_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));\n      /* Quattro Pro 9 */\n      else if ((_data = CFB.find(cfb, 'NativeContent_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));\n      /* Works 4 for Mac */\n      else if ((_data = CFB.find(cfb, 'MN0')) && _data.content) throw new Error(\"Unsupported Works 4 for Mac file\");else throw new Error(\"Cannot find Workbook stream\");\n      if (options.bookVBA && cfb.FullPaths && CFB.find(cfb, '/_VBA_PROJECT_CUR/VBA/dir')) WorkbookP.vbaraw = make_vba_xls(cfb);\n    }\n  var props = {};\n  if (cfb.FullPaths) parse_xls_props(\n  /*::((*/\n  cfb\n  /*:: :any):CFBContainer)*/\n  , props, options);\n  WorkbookP.Props = WorkbookP.Custprops = props;\n  /* TODO: split up properties */\n\n  if (options.bookFiles) WorkbookP.cfb = cfb;\n  /*WorkbookP.CompObjP = CompObjP; // TODO: storage? */\n\n  return WorkbookP;\n}\n\nfunction write_xlscfb(wb\n/*:Workbook*/\n, opts\n/*:WriteOpts*/\n)\n/*:CFBContainer*/\n{\n  var o = opts || {};\n  var cfb = CFB.utils.cfb_new({\n    root: \"R\"\n  });\n  var wbpath = \"/Workbook\";\n\n  switch (o.bookType || \"xls\") {\n    case \"xls\":\n      o.bookType = \"biff8\";\n\n    /* falls through */\n\n    case \"xla\":\n      if (!o.bookType) o.bookType = \"xla\";\n\n    /* falls through */\n\n    case \"biff8\":\n      wbpath = \"/Workbook\";\n      o.biff = 8;\n      break;\n\n    case \"biff5\":\n      wbpath = \"/Book\";\n      o.biff = 5;\n      break;\n\n    default:\n      throw new Error(\"invalid type \" + o.bookType + \" for XLS CFB\");\n  }\n\n  CFB.utils.cfb_add(cfb, wbpath, write_biff_buf(wb, o));\n  if (o.biff == 8 && (wb.Props || wb.Custprops)) write_xls_props(wb, cfb); // TODO: SI, DSI, CO\n\n  if (o.biff == 8 && wb.vbaraw) fill_vba_xls(cfb, CFB.read(wb.vbaraw, {\n    type: typeof wb.vbaraw == \"string\" ? \"binary\" : \"buffer\"\n  }));\n  return cfb;\n}\n/* [MS-XLSB] 2.3 Record Enumeration */\n\n\nvar XLSBRecordEnum = {\n  /*::[*/\n  0x0000\n  /*::]*/\n  : {\n    /* n:\"BrtRowHdr\", */\n    f: parse_BrtRowHdr\n  },\n\n  /*::[*/\n  0x0001\n  /*::]*/\n  : {\n    /* n:\"BrtCellBlank\", */\n    f: parse_BrtCellBlank\n  },\n\n  /*::[*/\n  0x0002\n  /*::]*/\n  : {\n    /* n:\"BrtCellRk\", */\n    f: parse_BrtCellRk\n  },\n\n  /*::[*/\n  0x0003\n  /*::]*/\n  : {\n    /* n:\"BrtCellError\", */\n    f: parse_BrtCellError\n  },\n\n  /*::[*/\n  0x0004\n  /*::]*/\n  : {\n    /* n:\"BrtCellBool\", */\n    f: parse_BrtCellBool\n  },\n\n  /*::[*/\n  0x0005\n  /*::]*/\n  : {\n    /* n:\"BrtCellReal\", */\n    f: parse_BrtCellReal\n  },\n\n  /*::[*/\n  0x0006\n  /*::]*/\n  : {\n    /* n:\"BrtCellSt\", */\n    f: parse_BrtCellSt\n  },\n\n  /*::[*/\n  0x0007\n  /*::]*/\n  : {\n    /* n:\"BrtCellIsst\", */\n    f: parse_BrtCellIsst\n  },\n\n  /*::[*/\n  0x0008\n  /*::]*/\n  : {\n    /* n:\"BrtFmlaString\", */\n    f: parse_BrtFmlaString\n  },\n\n  /*::[*/\n  0x0009\n  /*::]*/\n  : {\n    /* n:\"BrtFmlaNum\", */\n    f: parse_BrtFmlaNum\n  },\n\n  /*::[*/\n  0x000A\n  /*::]*/\n  : {\n    /* n:\"BrtFmlaBool\", */\n    f: parse_BrtFmlaBool\n  },\n\n  /*::[*/\n  0x000B\n  /*::]*/\n  : {\n    /* n:\"BrtFmlaError\", */\n    f: parse_BrtFmlaError\n  },\n\n  /*::[*/\n  0x000C\n  /*::]*/\n  : {\n    /* n:\"BrtShortBlank\", */\n    f: parse_BrtShortBlank\n  },\n\n  /*::[*/\n  0x000D\n  /*::]*/\n  : {\n    /* n:\"BrtShortRk\", */\n    f: parse_BrtShortRk\n  },\n\n  /*::[*/\n  0x000E\n  /*::]*/\n  : {\n    /* n:\"BrtShortError\", */\n    f: parse_BrtShortError\n  },\n\n  /*::[*/\n  0x000F\n  /*::]*/\n  : {\n    /* n:\"BrtShortBool\", */\n    f: parse_BrtShortBool\n  },\n\n  /*::[*/\n  0x0010\n  /*::]*/\n  : {\n    /* n:\"BrtShortReal\", */\n    f: parse_BrtShortReal\n  },\n\n  /*::[*/\n  0x0011\n  /*::]*/\n  : {\n    /* n:\"BrtShortSt\", */\n    f: parse_BrtShortSt\n  },\n\n  /*::[*/\n  0x0012\n  /*::]*/\n  : {\n    /* n:\"BrtShortIsst\", */\n    f: parse_BrtShortIsst\n  },\n\n  /*::[*/\n  0x0013\n  /*::]*/\n  : {\n    /* n:\"BrtSSTItem\", */\n    f: parse_RichStr\n  },\n\n  /*::[*/\n  0x0014\n  /*::]*/\n  : {\n    /* n:\"BrtPCDIMissing\" */\n  },\n\n  /*::[*/\n  0x0015\n  /*::]*/\n  : {\n    /* n:\"BrtPCDINumber\" */\n  },\n\n  /*::[*/\n  0x0016\n  /*::]*/\n  : {\n    /* n:\"BrtPCDIBoolean\" */\n  },\n\n  /*::[*/\n  0x0017\n  /*::]*/\n  : {\n    /* n:\"BrtPCDIError\" */\n  },\n\n  /*::[*/\n  0x0018\n  /*::]*/\n  : {\n    /* n:\"BrtPCDIString\" */\n  },\n\n  /*::[*/\n  0x0019\n  /*::]*/\n  : {\n    /* n:\"BrtPCDIDatetime\" */\n  },\n\n  /*::[*/\n  0x001A\n  /*::]*/\n  : {\n    /* n:\"BrtPCDIIndex\" */\n  },\n\n  /*::[*/\n  0x001B\n  /*::]*/\n  : {\n    /* n:\"BrtPCDIAMissing\" */\n  },\n\n  /*::[*/\n  0x001C\n  /*::]*/\n  : {\n    /* n:\"BrtPCDIANumber\" */\n  },\n\n  /*::[*/\n  0x001D\n  /*::]*/\n  : {\n    /* n:\"BrtPCDIABoolean\" */\n  },\n\n  /*::[*/\n  0x001E\n  /*::]*/\n  : {\n    /* n:\"BrtPCDIAError\" */\n  },\n\n  /*::[*/\n  0x001F\n  /*::]*/\n  : {\n    /* n:\"BrtPCDIAString\" */\n  },\n\n  /*::[*/\n  0x0020\n  /*::]*/\n  : {\n    /* n:\"BrtPCDIADatetime\" */\n  },\n\n  /*::[*/\n  0x0021\n  /*::]*/\n  : {\n    /* n:\"BrtPCRRecord\" */\n  },\n\n  /*::[*/\n  0x0022\n  /*::]*/\n  : {\n    /* n:\"BrtPCRRecordDt\" */\n  },\n\n  /*::[*/\n  0x0023\n  /*::]*/\n  : {\n    /* n:\"BrtFRTBegin\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0024\n  /*::]*/\n  : {\n    /* n:\"BrtFRTEnd\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0025\n  /*::]*/\n  : {\n    /* n:\"BrtACBegin\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0026\n  /*::]*/\n  : {\n    /* n:\"BrtACEnd\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0027\n  /*::]*/\n  : {\n    /* n:\"BrtName\", */\n    f: parse_BrtName\n  },\n\n  /*::[*/\n  0x0028\n  /*::]*/\n  : {\n    /* n:\"BrtIndexRowBlock\" */\n  },\n\n  /*::[*/\n  0x002A\n  /*::]*/\n  : {\n    /* n:\"BrtIndexBlock\" */\n  },\n\n  /*::[*/\n  0x002B\n  /*::]*/\n  : {\n    /* n:\"BrtFont\", */\n    f: parse_BrtFont\n  },\n\n  /*::[*/\n  0x002C\n  /*::]*/\n  : {\n    /* n:\"BrtFmt\", */\n    f: parse_BrtFmt\n  },\n\n  /*::[*/\n  0x002D\n  /*::]*/\n  : {\n    /* n:\"BrtFill\", */\n    f: parse_BrtFill\n  },\n\n  /*::[*/\n  0x002E\n  /*::]*/\n  : {\n    /* n:\"BrtBorder\", */\n    f: parse_BrtBorder\n  },\n\n  /*::[*/\n  0x002F\n  /*::]*/\n  : {\n    /* n:\"BrtXF\", */\n    f: parse_BrtXF\n  },\n\n  /*::[*/\n  0x0030\n  /*::]*/\n  : {\n    /* n:\"BrtStyle\" */\n  },\n\n  /*::[*/\n  0x0031\n  /*::]*/\n  : {\n    /* n:\"BrtCellMeta\", */\n    f: parse_Int32LE\n  },\n\n  /*::[*/\n  0x0032\n  /*::]*/\n  : {\n    /* n:\"BrtValueMeta\" */\n  },\n\n  /*::[*/\n  0x0033\n  /*::]*/\n  : {\n    /* n:\"BrtMdb\" */\n    f: parse_BrtMdb\n  },\n\n  /*::[*/\n  0x0034\n  /*::]*/\n  : {\n    /* n:\"BrtBeginFmd\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0035\n  /*::]*/\n  : {\n    /* n:\"BrtEndFmd\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0036\n  /*::]*/\n  : {\n    /* n:\"BrtBeginMdx\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0037\n  /*::]*/\n  : {\n    /* n:\"BrtEndMdx\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0038\n  /*::]*/\n  : {\n    /* n:\"BrtBeginMdxTuple\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0039\n  /*::]*/\n  : {\n    /* n:\"BrtEndMdxTuple\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x003A\n  /*::]*/\n  : {\n    /* n:\"BrtMdxMbrIstr\" */\n  },\n\n  /*::[*/\n  0x003B\n  /*::]*/\n  : {\n    /* n:\"BrtStr\" */\n  },\n\n  /*::[*/\n  0x003C\n  /*::]*/\n  : {\n    /* n:\"BrtColInfo\", */\n    f: parse_ColInfo\n  },\n\n  /*::[*/\n  0x003E\n  /*::]*/\n  : {\n    /* n:\"BrtCellRString\", */\n    f: parse_BrtCellRString\n  },\n\n  /*::[*/\n  0x003F\n  /*::]*/\n  : {\n    /* n:\"BrtCalcChainItem$\", */\n    f: parse_BrtCalcChainItem$\n  },\n\n  /*::[*/\n  0x0040\n  /*::]*/\n  : {\n    /* n:\"BrtDVal\", */\n    f: parse_BrtDVal\n  },\n\n  /*::[*/\n  0x0041\n  /*::]*/\n  : {\n    /* n:\"BrtSxvcellNum\" */\n  },\n\n  /*::[*/\n  0x0042\n  /*::]*/\n  : {\n    /* n:\"BrtSxvcellStr\" */\n  },\n\n  /*::[*/\n  0x0043\n  /*::]*/\n  : {\n    /* n:\"BrtSxvcellBool\" */\n  },\n\n  /*::[*/\n  0x0044\n  /*::]*/\n  : {\n    /* n:\"BrtSxvcellErr\" */\n  },\n\n  /*::[*/\n  0x0045\n  /*::]*/\n  : {\n    /* n:\"BrtSxvcellDate\" */\n  },\n\n  /*::[*/\n  0x0046\n  /*::]*/\n  : {\n    /* n:\"BrtSxvcellNil\" */\n  },\n\n  /*::[*/\n  0x0080\n  /*::]*/\n  : {\n    /* n:\"BrtFileVersion\" */\n  },\n\n  /*::[*/\n  0x0081\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSheet\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0082\n  /*::]*/\n  : {\n    /* n:\"BrtEndSheet\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0083\n  /*::]*/\n  : {\n    /* n:\"BrtBeginBook\", */\n    T: 1,\n    f: parsenoop,\n    p: 0\n  },\n\n  /*::[*/\n  0x0084\n  /*::]*/\n  : {\n    /* n:\"BrtEndBook\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0085\n  /*::]*/\n  : {\n    /* n:\"BrtBeginWsViews\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0086\n  /*::]*/\n  : {\n    /* n:\"BrtEndWsViews\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0087\n  /*::]*/\n  : {\n    /* n:\"BrtBeginBookViews\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0088\n  /*::]*/\n  : {\n    /* n:\"BrtEndBookViews\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0089\n  /*::]*/\n  : {\n    /* n:\"BrtBeginWsView\", */\n    T: 1,\n    f: parse_BrtBeginWsView\n  },\n\n  /*::[*/\n  0x008A\n  /*::]*/\n  : {\n    /* n:\"BrtEndWsView\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x008B\n  /*::]*/\n  : {\n    /* n:\"BrtBeginCsViews\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x008C\n  /*::]*/\n  : {\n    /* n:\"BrtEndCsViews\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x008D\n  /*::]*/\n  : {\n    /* n:\"BrtBeginCsView\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x008E\n  /*::]*/\n  : {\n    /* n:\"BrtEndCsView\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x008F\n  /*::]*/\n  : {\n    /* n:\"BrtBeginBundleShs\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0090\n  /*::]*/\n  : {\n    /* n:\"BrtEndBundleShs\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0091\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSheetData\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0092\n  /*::]*/\n  : {\n    /* n:\"BrtEndSheetData\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0093\n  /*::]*/\n  : {\n    /* n:\"BrtWsProp\", */\n    f: parse_BrtWsProp\n  },\n\n  /*::[*/\n  0x0094\n  /*::]*/\n  : {\n    /* n:\"BrtWsDim\", */\n    f: parse_BrtWsDim,\n    p: 16\n  },\n\n  /*::[*/\n  0x0097\n  /*::]*/\n  : {\n    /* n:\"BrtPane\", */\n    f: parse_BrtPane\n  },\n\n  /*::[*/\n  0x0098\n  /*::]*/\n  : {\n    /* n:\"BrtSel\" */\n  },\n\n  /*::[*/\n  0x0099\n  /*::]*/\n  : {\n    /* n:\"BrtWbProp\", */\n    f: parse_BrtWbProp\n  },\n\n  /*::[*/\n  0x009A\n  /*::]*/\n  : {\n    /* n:\"BrtWbFactoid\" */\n  },\n\n  /*::[*/\n  0x009B\n  /*::]*/\n  : {\n    /* n:\"BrtFileRecover\" */\n  },\n\n  /*::[*/\n  0x009C\n  /*::]*/\n  : {\n    /* n:\"BrtBundleSh\", */\n    f: parse_BrtBundleSh\n  },\n\n  /*::[*/\n  0x009D\n  /*::]*/\n  : {\n    /* n:\"BrtCalcProp\" */\n  },\n\n  /*::[*/\n  0x009E\n  /*::]*/\n  : {\n    /* n:\"BrtBookView\" */\n  },\n\n  /*::[*/\n  0x009F\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSst\", */\n    T: 1,\n    f: parse_BrtBeginSst\n  },\n\n  /*::[*/\n  0x00A0\n  /*::]*/\n  : {\n    /* n:\"BrtEndSst\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00A1\n  /*::]*/\n  : {\n    /* n:\"BrtBeginAFilter\", */\n    T: 1,\n    f: parse_UncheckedRfX\n  },\n\n  /*::[*/\n  0x00A2\n  /*::]*/\n  : {\n    /* n:\"BrtEndAFilter\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00A3\n  /*::]*/\n  : {\n    /* n:\"BrtBeginFilterColumn\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00A4\n  /*::]*/\n  : {\n    /* n:\"BrtEndFilterColumn\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00A5\n  /*::]*/\n  : {\n    /* n:\"BrtBeginFilters\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00A6\n  /*::]*/\n  : {\n    /* n:\"BrtEndFilters\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00A7\n  /*::]*/\n  : {\n    /* n:\"BrtFilter\" */\n  },\n\n  /*::[*/\n  0x00A8\n  /*::]*/\n  : {\n    /* n:\"BrtColorFilter\" */\n  },\n\n  /*::[*/\n  0x00A9\n  /*::]*/\n  : {\n    /* n:\"BrtIconFilter\" */\n  },\n\n  /*::[*/\n  0x00AA\n  /*::]*/\n  : {\n    /* n:\"BrtTop10Filter\" */\n  },\n\n  /*::[*/\n  0x00AB\n  /*::]*/\n  : {\n    /* n:\"BrtDynamicFilter\" */\n  },\n\n  /*::[*/\n  0x00AC\n  /*::]*/\n  : {\n    /* n:\"BrtBeginCustomFilters\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00AD\n  /*::]*/\n  : {\n    /* n:\"BrtEndCustomFilters\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00AE\n  /*::]*/\n  : {\n    /* n:\"BrtCustomFilter\" */\n  },\n\n  /*::[*/\n  0x00AF\n  /*::]*/\n  : {\n    /* n:\"BrtAFilterDateGroupItem\" */\n  },\n\n  /*::[*/\n  0x00B0\n  /*::]*/\n  : {\n    /* n:\"BrtMergeCell\", */\n    f: parse_BrtMergeCell\n  },\n\n  /*::[*/\n  0x00B1\n  /*::]*/\n  : {\n    /* n:\"BrtBeginMergeCells\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00B2\n  /*::]*/\n  : {\n    /* n:\"BrtEndMergeCells\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00B3\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPivotCacheDef\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00B4\n  /*::]*/\n  : {\n    /* n:\"BrtEndPivotCacheDef\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00B5\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDFields\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00B6\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDFields\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00B7\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDField\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00B8\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDField\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00B9\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDSource\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00BA\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDSource\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00BB\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDSRange\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00BC\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDSRange\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00BD\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDFAtbl\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00BE\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDFAtbl\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00BF\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDIRun\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00C0\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDIRun\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00C1\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPivotCacheRecords\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00C2\n  /*::]*/\n  : {\n    /* n:\"BrtEndPivotCacheRecords\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00C3\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDHierarchies\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00C4\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDHierarchies\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00C5\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDHierarchy\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00C6\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDHierarchy\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00C7\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDHFieldsUsage\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00C8\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDHFieldsUsage\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00C9\n  /*::]*/\n  : {\n    /* n:\"BrtBeginExtConnection\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00CA\n  /*::]*/\n  : {\n    /* n:\"BrtEndExtConnection\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00CB\n  /*::]*/\n  : {\n    /* n:\"BrtBeginECDbProps\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00CC\n  /*::]*/\n  : {\n    /* n:\"BrtEndECDbProps\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00CD\n  /*::]*/\n  : {\n    /* n:\"BrtBeginECOlapProps\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00CE\n  /*::]*/\n  : {\n    /* n:\"BrtEndECOlapProps\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00CF\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDSConsol\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00D0\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDSConsol\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00D1\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDSCPages\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00D2\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDSCPages\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00D3\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDSCPage\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00D4\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDSCPage\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00D5\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDSCPItem\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00D6\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDSCPItem\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00D7\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDSCSets\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00D8\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDSCSets\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00D9\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDSCSet\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00DA\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDSCSet\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00DB\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDFGroup\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00DC\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDFGroup\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00DD\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDFGItems\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00DE\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDFGItems\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00DF\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDFGRange\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00E0\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDFGRange\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00E1\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDFGDiscrete\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00E2\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDFGDiscrete\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00E3\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDSDTupleCache\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00E4\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDSDTupleCache\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00E5\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDSDTCEntries\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00E6\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDSDTCEntries\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00E7\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDSDTCEMembers\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00E8\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDSDTCEMembers\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00E9\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDSDTCEMember\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00EA\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDSDTCEMember\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00EB\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDSDTCQueries\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00EC\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDSDTCQueries\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00ED\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDSDTCQuery\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00EE\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDSDTCQuery\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00EF\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDSDTCSets\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00F0\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDSDTCSets\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00F1\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDSDTCSet\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00F2\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDSDTCSet\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00F3\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDCalcItems\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00F4\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDCalcItems\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00F5\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDCalcItem\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00F6\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDCalcItem\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00F7\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPRule\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00F8\n  /*::]*/\n  : {\n    /* n:\"BrtEndPRule\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00F9\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPRFilters\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00FA\n  /*::]*/\n  : {\n    /* n:\"BrtEndPRFilters\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00FB\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPRFilter\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00FC\n  /*::]*/\n  : {\n    /* n:\"BrtEndPRFilter\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00FD\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPNames\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x00FE\n  /*::]*/\n  : {\n    /* n:\"BrtEndPNames\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x00FF\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPName\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0100\n  /*::]*/\n  : {\n    /* n:\"BrtEndPName\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0101\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPNPairs\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0102\n  /*::]*/\n  : {\n    /* n:\"BrtEndPNPairs\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0103\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPNPair\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0104\n  /*::]*/\n  : {\n    /* n:\"BrtEndPNPair\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0105\n  /*::]*/\n  : {\n    /* n:\"BrtBeginECWebProps\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0106\n  /*::]*/\n  : {\n    /* n:\"BrtEndECWebProps\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0107\n  /*::]*/\n  : {\n    /* n:\"BrtBeginEcWpTables\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0108\n  /*::]*/\n  : {\n    /* n:\"BrtEndECWPTables\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0109\n  /*::]*/\n  : {\n    /* n:\"BrtBeginECParams\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x010A\n  /*::]*/\n  : {\n    /* n:\"BrtEndECParams\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x010B\n  /*::]*/\n  : {\n    /* n:\"BrtBeginECParam\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x010C\n  /*::]*/\n  : {\n    /* n:\"BrtEndECParam\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x010D\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDKPIs\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x010E\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDKPIs\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x010F\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDKPI\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0110\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDKPI\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0111\n  /*::]*/\n  : {\n    /* n:\"BrtBeginDims\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0112\n  /*::]*/\n  : {\n    /* n:\"BrtEndDims\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0113\n  /*::]*/\n  : {\n    /* n:\"BrtBeginDim\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0114\n  /*::]*/\n  : {\n    /* n:\"BrtEndDim\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0115\n  /*::]*/\n  : {\n    /* n:\"BrtIndexPartEnd\" */\n  },\n\n  /*::[*/\n  0x0116\n  /*::]*/\n  : {\n    /* n:\"BrtBeginStyleSheet\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0117\n  /*::]*/\n  : {\n    /* n:\"BrtEndStyleSheet\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0118\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXView\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0119\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXVI\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x011A\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXVI\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x011B\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXVIs\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x011C\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXVIs\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x011D\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXVD\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x011E\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXVD\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x011F\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXVDs\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0120\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXVDs\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0121\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXPI\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0122\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXPI\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0123\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXPIs\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0124\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXPIs\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0125\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXDI\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0126\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXDI\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0127\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXDIs\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0128\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXDIs\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0129\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXLI\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x012A\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXLI\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x012B\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXLIRws\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x012C\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXLIRws\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x012D\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXLICols\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x012E\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXLICols\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x012F\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXFormat\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0130\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXFormat\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0131\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXFormats\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0132\n  /*::]*/\n  : {\n    /* n:\"BrtEndSxFormats\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0133\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSxSelect\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0134\n  /*::]*/\n  : {\n    /* n:\"BrtEndSxSelect\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0135\n  /*::]*/\n  : {\n    /* n:\"BrtBeginISXVDRws\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0136\n  /*::]*/\n  : {\n    /* n:\"BrtEndISXVDRws\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0137\n  /*::]*/\n  : {\n    /* n:\"BrtBeginISXVDCols\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0138\n  /*::]*/\n  : {\n    /* n:\"BrtEndISXVDCols\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0139\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXLocation\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x013A\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXLocation\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x013B\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXView\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x013C\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXTHs\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x013D\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXTHs\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x013E\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXTH\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x013F\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXTH\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0140\n  /*::]*/\n  : {\n    /* n:\"BrtBeginISXTHRws\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0141\n  /*::]*/\n  : {\n    /* n:\"BrtEndISXTHRws\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0142\n  /*::]*/\n  : {\n    /* n:\"BrtBeginISXTHCols\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0143\n  /*::]*/\n  : {\n    /* n:\"BrtEndISXTHCols\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0144\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXTDMPS\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0145\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXTDMPs\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0146\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXTDMP\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0147\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXTDMP\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0148\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXTHItems\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0149\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXTHItems\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x014A\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXTHItem\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x014B\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXTHItem\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x014C\n  /*::]*/\n  : {\n    /* n:\"BrtBeginMetadata\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x014D\n  /*::]*/\n  : {\n    /* n:\"BrtEndMetadata\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x014E\n  /*::]*/\n  : {\n    /* n:\"BrtBeginEsmdtinfo\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x014F\n  /*::]*/\n  : {\n    /* n:\"BrtMdtinfo\", */\n    f: parse_BrtMdtinfo\n  },\n\n  /*::[*/\n  0x0150\n  /*::]*/\n  : {\n    /* n:\"BrtEndEsmdtinfo\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0151\n  /*::]*/\n  : {\n    /* n:\"BrtBeginEsmdb\", */\n    f: parse_BrtBeginEsmdb,\n    T: 1\n  },\n\n  /*::[*/\n  0x0152\n  /*::]*/\n  : {\n    /* n:\"BrtEndEsmdb\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0153\n  /*::]*/\n  : {\n    /* n:\"BrtBeginEsfmd\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0154\n  /*::]*/\n  : {\n    /* n:\"BrtEndEsfmd\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0155\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSingleCells\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0156\n  /*::]*/\n  : {\n    /* n:\"BrtEndSingleCells\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0157\n  /*::]*/\n  : {\n    /* n:\"BrtBeginList\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0158\n  /*::]*/\n  : {\n    /* n:\"BrtEndList\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0159\n  /*::]*/\n  : {\n    /* n:\"BrtBeginListCols\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x015A\n  /*::]*/\n  : {\n    /* n:\"BrtEndListCols\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x015B\n  /*::]*/\n  : {\n    /* n:\"BrtBeginListCol\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x015C\n  /*::]*/\n  : {\n    /* n:\"BrtEndListCol\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x015D\n  /*::]*/\n  : {\n    /* n:\"BrtBeginListXmlCPr\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x015E\n  /*::]*/\n  : {\n    /* n:\"BrtEndListXmlCPr\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x015F\n  /*::]*/\n  : {\n    /* n:\"BrtListCCFmla\" */\n  },\n\n  /*::[*/\n  0x0160\n  /*::]*/\n  : {\n    /* n:\"BrtListTrFmla\" */\n  },\n\n  /*::[*/\n  0x0161\n  /*::]*/\n  : {\n    /* n:\"BrtBeginExternals\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0162\n  /*::]*/\n  : {\n    /* n:\"BrtEndExternals\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0163\n  /*::]*/\n  : {\n    /* n:\"BrtSupBookSrc\", */\n    f: parse_RelID\n  },\n\n  /*::[*/\n  0x0165\n  /*::]*/\n  : {\n    /* n:\"BrtSupSelf\" */\n  },\n\n  /*::[*/\n  0x0166\n  /*::]*/\n  : {\n    /* n:\"BrtSupSame\" */\n  },\n\n  /*::[*/\n  0x0167\n  /*::]*/\n  : {\n    /* n:\"BrtSupTabs\" */\n  },\n\n  /*::[*/\n  0x0168\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSupBook\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0169\n  /*::]*/\n  : {\n    /* n:\"BrtPlaceholderName\" */\n  },\n\n  /*::[*/\n  0x016A\n  /*::]*/\n  : {\n    /* n:\"BrtExternSheet\", */\n    f: parse_ExternSheet\n  },\n\n  /*::[*/\n  0x016B\n  /*::]*/\n  : {\n    /* n:\"BrtExternTableStart\" */\n  },\n\n  /*::[*/\n  0x016C\n  /*::]*/\n  : {\n    /* n:\"BrtExternTableEnd\" */\n  },\n\n  /*::[*/\n  0x016E\n  /*::]*/\n  : {\n    /* n:\"BrtExternRowHdr\" */\n  },\n\n  /*::[*/\n  0x016F\n  /*::]*/\n  : {\n    /* n:\"BrtExternCellBlank\" */\n  },\n\n  /*::[*/\n  0x0170\n  /*::]*/\n  : {\n    /* n:\"BrtExternCellReal\" */\n  },\n\n  /*::[*/\n  0x0171\n  /*::]*/\n  : {\n    /* n:\"BrtExternCellBool\" */\n  },\n\n  /*::[*/\n  0x0172\n  /*::]*/\n  : {\n    /* n:\"BrtExternCellError\" */\n  },\n\n  /*::[*/\n  0x0173\n  /*::]*/\n  : {\n    /* n:\"BrtExternCellString\" */\n  },\n\n  /*::[*/\n  0x0174\n  /*::]*/\n  : {\n    /* n:\"BrtBeginEsmdx\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0175\n  /*::]*/\n  : {\n    /* n:\"BrtEndEsmdx\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0176\n  /*::]*/\n  : {\n    /* n:\"BrtBeginMdxSet\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0177\n  /*::]*/\n  : {\n    /* n:\"BrtEndMdxSet\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0178\n  /*::]*/\n  : {\n    /* n:\"BrtBeginMdxMbrProp\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0179\n  /*::]*/\n  : {\n    /* n:\"BrtEndMdxMbrProp\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x017A\n  /*::]*/\n  : {\n    /* n:\"BrtBeginMdxKPI\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x017B\n  /*::]*/\n  : {\n    /* n:\"BrtEndMdxKPI\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x017C\n  /*::]*/\n  : {\n    /* n:\"BrtBeginEsstr\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x017D\n  /*::]*/\n  : {\n    /* n:\"BrtEndEsstr\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x017E\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPRFItem\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x017F\n  /*::]*/\n  : {\n    /* n:\"BrtEndPRFItem\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0180\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPivotCacheIDs\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0181\n  /*::]*/\n  : {\n    /* n:\"BrtEndPivotCacheIDs\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0182\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPivotCacheID\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0183\n  /*::]*/\n  : {\n    /* n:\"BrtEndPivotCacheID\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0184\n  /*::]*/\n  : {\n    /* n:\"BrtBeginISXVIs\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0185\n  /*::]*/\n  : {\n    /* n:\"BrtEndISXVIs\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0186\n  /*::]*/\n  : {\n    /* n:\"BrtBeginColInfos\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0187\n  /*::]*/\n  : {\n    /* n:\"BrtEndColInfos\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0188\n  /*::]*/\n  : {\n    /* n:\"BrtBeginRwBrk\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0189\n  /*::]*/\n  : {\n    /* n:\"BrtEndRwBrk\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x018A\n  /*::]*/\n  : {\n    /* n:\"BrtBeginColBrk\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x018B\n  /*::]*/\n  : {\n    /* n:\"BrtEndColBrk\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x018C\n  /*::]*/\n  : {\n    /* n:\"BrtBrk\" */\n  },\n\n  /*::[*/\n  0x018D\n  /*::]*/\n  : {\n    /* n:\"BrtUserBookView\" */\n  },\n\n  /*::[*/\n  0x018E\n  /*::]*/\n  : {\n    /* n:\"BrtInfo\" */\n  },\n\n  /*::[*/\n  0x018F\n  /*::]*/\n  : {\n    /* n:\"BrtCUsr\" */\n  },\n\n  /*::[*/\n  0x0190\n  /*::]*/\n  : {\n    /* n:\"BrtUsr\" */\n  },\n\n  /*::[*/\n  0x0191\n  /*::]*/\n  : {\n    /* n:\"BrtBeginUsers\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0193\n  /*::]*/\n  : {\n    /* n:\"BrtEOF\" */\n  },\n\n  /*::[*/\n  0x0194\n  /*::]*/\n  : {\n    /* n:\"BrtUCR\" */\n  },\n\n  /*::[*/\n  0x0195\n  /*::]*/\n  : {\n    /* n:\"BrtRRInsDel\" */\n  },\n\n  /*::[*/\n  0x0196\n  /*::]*/\n  : {\n    /* n:\"BrtRREndInsDel\" */\n  },\n\n  /*::[*/\n  0x0197\n  /*::]*/\n  : {\n    /* n:\"BrtRRMove\" */\n  },\n\n  /*::[*/\n  0x0198\n  /*::]*/\n  : {\n    /* n:\"BrtRREndMove\" */\n  },\n\n  /*::[*/\n  0x0199\n  /*::]*/\n  : {\n    /* n:\"BrtRRChgCell\" */\n  },\n\n  /*::[*/\n  0x019A\n  /*::]*/\n  : {\n    /* n:\"BrtRREndChgCell\" */\n  },\n\n  /*::[*/\n  0x019B\n  /*::]*/\n  : {\n    /* n:\"BrtRRHeader\" */\n  },\n\n  /*::[*/\n  0x019C\n  /*::]*/\n  : {\n    /* n:\"BrtRRUserView\" */\n  },\n\n  /*::[*/\n  0x019D\n  /*::]*/\n  : {\n    /* n:\"BrtRRRenSheet\" */\n  },\n\n  /*::[*/\n  0x019E\n  /*::]*/\n  : {\n    /* n:\"BrtRRInsertSh\" */\n  },\n\n  /*::[*/\n  0x019F\n  /*::]*/\n  : {\n    /* n:\"BrtRRDefName\" */\n  },\n\n  /*::[*/\n  0x01A0\n  /*::]*/\n  : {\n    /* n:\"BrtRRNote\" */\n  },\n\n  /*::[*/\n  0x01A1\n  /*::]*/\n  : {\n    /* n:\"BrtRRConflict\" */\n  },\n\n  /*::[*/\n  0x01A2\n  /*::]*/\n  : {\n    /* n:\"BrtRRTQSIF\" */\n  },\n\n  /*::[*/\n  0x01A3\n  /*::]*/\n  : {\n    /* n:\"BrtRRFormat\" */\n  },\n\n  /*::[*/\n  0x01A4\n  /*::]*/\n  : {\n    /* n:\"BrtRREndFormat\" */\n  },\n\n  /*::[*/\n  0x01A5\n  /*::]*/\n  : {\n    /* n:\"BrtRRAutoFmt\" */\n  },\n\n  /*::[*/\n  0x01A6\n  /*::]*/\n  : {\n    /* n:\"BrtBeginUserShViews\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01A7\n  /*::]*/\n  : {\n    /* n:\"BrtBeginUserShView\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01A8\n  /*::]*/\n  : {\n    /* n:\"BrtEndUserShView\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01A9\n  /*::]*/\n  : {\n    /* n:\"BrtEndUserShViews\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01AA\n  /*::]*/\n  : {\n    /* n:\"BrtArrFmla\", */\n    f: parse_BrtArrFmla\n  },\n\n  /*::[*/\n  0x01AB\n  /*::]*/\n  : {\n    /* n:\"BrtShrFmla\", */\n    f: parse_BrtShrFmla\n  },\n\n  /*::[*/\n  0x01AC\n  /*::]*/\n  : {\n    /* n:\"BrtTable\" */\n  },\n\n  /*::[*/\n  0x01AD\n  /*::]*/\n  : {\n    /* n:\"BrtBeginExtConnections\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01AE\n  /*::]*/\n  : {\n    /* n:\"BrtEndExtConnections\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01AF\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDCalcMems\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01B0\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDCalcMems\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01B1\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDCalcMem\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01B2\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDCalcMem\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01B3\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDHGLevels\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01B4\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDHGLevels\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01B5\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDHGLevel\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01B6\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDHGLevel\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01B7\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDHGLGroups\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01B8\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDHGLGroups\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01B9\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDHGLGroup\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01BA\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDHGLGroup\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01BB\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDHGLGMembers\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01BC\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDHGLGMembers\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01BD\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDHGLGMember\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01BE\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDHGLGMember\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01BF\n  /*::]*/\n  : {\n    /* n:\"BrtBeginQSI\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01C0\n  /*::]*/\n  : {\n    /* n:\"BrtEndQSI\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01C1\n  /*::]*/\n  : {\n    /* n:\"BrtBeginQSIR\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01C2\n  /*::]*/\n  : {\n    /* n:\"BrtEndQSIR\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01C3\n  /*::]*/\n  : {\n    /* n:\"BrtBeginDeletedNames\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01C4\n  /*::]*/\n  : {\n    /* n:\"BrtEndDeletedNames\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01C5\n  /*::]*/\n  : {\n    /* n:\"BrtBeginDeletedName\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01C6\n  /*::]*/\n  : {\n    /* n:\"BrtEndDeletedName\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01C7\n  /*::]*/\n  : {\n    /* n:\"BrtBeginQSIFs\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01C8\n  /*::]*/\n  : {\n    /* n:\"BrtEndQSIFs\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01C9\n  /*::]*/\n  : {\n    /* n:\"BrtBeginQSIF\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01CA\n  /*::]*/\n  : {\n    /* n:\"BrtEndQSIF\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01CB\n  /*::]*/\n  : {\n    /* n:\"BrtBeginAutoSortScope\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01CC\n  /*::]*/\n  : {\n    /* n:\"BrtEndAutoSortScope\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01CD\n  /*::]*/\n  : {\n    /* n:\"BrtBeginConditionalFormatting\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01CE\n  /*::]*/\n  : {\n    /* n:\"BrtEndConditionalFormatting\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01CF\n  /*::]*/\n  : {\n    /* n:\"BrtBeginCFRule\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01D0\n  /*::]*/\n  : {\n    /* n:\"BrtEndCFRule\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01D1\n  /*::]*/\n  : {\n    /* n:\"BrtBeginIconSet\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01D2\n  /*::]*/\n  : {\n    /* n:\"BrtEndIconSet\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01D3\n  /*::]*/\n  : {\n    /* n:\"BrtBeginDatabar\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01D4\n  /*::]*/\n  : {\n    /* n:\"BrtEndDatabar\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01D5\n  /*::]*/\n  : {\n    /* n:\"BrtBeginColorScale\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01D6\n  /*::]*/\n  : {\n    /* n:\"BrtEndColorScale\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01D7\n  /*::]*/\n  : {\n    /* n:\"BrtCFVO\" */\n  },\n\n  /*::[*/\n  0x01D8\n  /*::]*/\n  : {\n    /* n:\"BrtExternValueMeta\" */\n  },\n\n  /*::[*/\n  0x01D9\n  /*::]*/\n  : {\n    /* n:\"BrtBeginColorPalette\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01DA\n  /*::]*/\n  : {\n    /* n:\"BrtEndColorPalette\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01DB\n  /*::]*/\n  : {\n    /* n:\"BrtIndexedColor\" */\n  },\n\n  /*::[*/\n  0x01DC\n  /*::]*/\n  : {\n    /* n:\"BrtMargins\", */\n    f: parse_BrtMargins\n  },\n\n  /*::[*/\n  0x01DD\n  /*::]*/\n  : {\n    /* n:\"BrtPrintOptions\" */\n  },\n\n  /*::[*/\n  0x01DE\n  /*::]*/\n  : {\n    /* n:\"BrtPageSetup\" */\n  },\n\n  /*::[*/\n  0x01DF\n  /*::]*/\n  : {\n    /* n:\"BrtBeginHeaderFooter\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01E0\n  /*::]*/\n  : {\n    /* n:\"BrtEndHeaderFooter\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01E1\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXCrtFormat\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01E2\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXCrtFormat\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01E3\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXCrtFormats\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01E4\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXCrtFormats\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01E5\n  /*::]*/\n  : {\n    /* n:\"BrtWsFmtInfo\", */\n    f: parse_BrtWsFmtInfo\n  },\n\n  /*::[*/\n  0x01E6\n  /*::]*/\n  : {\n    /* n:\"BrtBeginMgs\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01E7\n  /*::]*/\n  : {\n    /* n:\"BrtEndMGs\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01E8\n  /*::]*/\n  : {\n    /* n:\"BrtBeginMGMaps\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01E9\n  /*::]*/\n  : {\n    /* n:\"BrtEndMGMaps\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01EA\n  /*::]*/\n  : {\n    /* n:\"BrtBeginMG\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01EB\n  /*::]*/\n  : {\n    /* n:\"BrtEndMG\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01EC\n  /*::]*/\n  : {\n    /* n:\"BrtBeginMap\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01ED\n  /*::]*/\n  : {\n    /* n:\"BrtEndMap\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01EE\n  /*::]*/\n  : {\n    /* n:\"BrtHLink\", */\n    f: parse_BrtHLink\n  },\n\n  /*::[*/\n  0x01EF\n  /*::]*/\n  : {\n    /* n:\"BrtBeginDCon\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01F0\n  /*::]*/\n  : {\n    /* n:\"BrtEndDCon\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01F1\n  /*::]*/\n  : {\n    /* n:\"BrtBeginDRefs\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01F2\n  /*::]*/\n  : {\n    /* n:\"BrtEndDRefs\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01F3\n  /*::]*/\n  : {\n    /* n:\"BrtDRef\" */\n  },\n\n  /*::[*/\n  0x01F4\n  /*::]*/\n  : {\n    /* n:\"BrtBeginScenMan\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01F5\n  /*::]*/\n  : {\n    /* n:\"BrtEndScenMan\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01F6\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSct\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01F7\n  /*::]*/\n  : {\n    /* n:\"BrtEndSct\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01F8\n  /*::]*/\n  : {\n    /* n:\"BrtSlc\" */\n  },\n\n  /*::[*/\n  0x01F9\n  /*::]*/\n  : {\n    /* n:\"BrtBeginDXFs\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01FA\n  /*::]*/\n  : {\n    /* n:\"BrtEndDXFs\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01FB\n  /*::]*/\n  : {\n    /* n:\"BrtDXF\" */\n  },\n\n  /*::[*/\n  0x01FC\n  /*::]*/\n  : {\n    /* n:\"BrtBeginTableStyles\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01FD\n  /*::]*/\n  : {\n    /* n:\"BrtEndTableStyles\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x01FE\n  /*::]*/\n  : {\n    /* n:\"BrtBeginTableStyle\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x01FF\n  /*::]*/\n  : {\n    /* n:\"BrtEndTableStyle\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0200\n  /*::]*/\n  : {\n    /* n:\"BrtTableStyleElement\" */\n  },\n\n  /*::[*/\n  0x0201\n  /*::]*/\n  : {\n    /* n:\"BrtTableStyleClient\" */\n  },\n\n  /*::[*/\n  0x0202\n  /*::]*/\n  : {\n    /* n:\"BrtBeginVolDeps\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0203\n  /*::]*/\n  : {\n    /* n:\"BrtEndVolDeps\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0204\n  /*::]*/\n  : {\n    /* n:\"BrtBeginVolType\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0205\n  /*::]*/\n  : {\n    /* n:\"BrtEndVolType\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0206\n  /*::]*/\n  : {\n    /* n:\"BrtBeginVolMain\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0207\n  /*::]*/\n  : {\n    /* n:\"BrtEndVolMain\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0208\n  /*::]*/\n  : {\n    /* n:\"BrtBeginVolTopic\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0209\n  /*::]*/\n  : {\n    /* n:\"BrtEndVolTopic\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x020A\n  /*::]*/\n  : {\n    /* n:\"BrtVolSubtopic\" */\n  },\n\n  /*::[*/\n  0x020B\n  /*::]*/\n  : {\n    /* n:\"BrtVolRef\" */\n  },\n\n  /*::[*/\n  0x020C\n  /*::]*/\n  : {\n    /* n:\"BrtVolNum\" */\n  },\n\n  /*::[*/\n  0x020D\n  /*::]*/\n  : {\n    /* n:\"BrtVolErr\" */\n  },\n\n  /*::[*/\n  0x020E\n  /*::]*/\n  : {\n    /* n:\"BrtVolStr\" */\n  },\n\n  /*::[*/\n  0x020F\n  /*::]*/\n  : {\n    /* n:\"BrtVolBool\" */\n  },\n\n  /*::[*/\n  0x0210\n  /*::]*/\n  : {\n    /* n:\"BrtBeginCalcChain$\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0211\n  /*::]*/\n  : {\n    /* n:\"BrtEndCalcChain$\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0212\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSortState\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0213\n  /*::]*/\n  : {\n    /* n:\"BrtEndSortState\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0214\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSortCond\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0215\n  /*::]*/\n  : {\n    /* n:\"BrtEndSortCond\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0216\n  /*::]*/\n  : {\n    /* n:\"BrtBookProtection\" */\n  },\n\n  /*::[*/\n  0x0217\n  /*::]*/\n  : {\n    /* n:\"BrtSheetProtection\" */\n  },\n\n  /*::[*/\n  0x0218\n  /*::]*/\n  : {\n    /* n:\"BrtRangeProtection\" */\n  },\n\n  /*::[*/\n  0x0219\n  /*::]*/\n  : {\n    /* n:\"BrtPhoneticInfo\" */\n  },\n\n  /*::[*/\n  0x021A\n  /*::]*/\n  : {\n    /* n:\"BrtBeginECTxtWiz\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x021B\n  /*::]*/\n  : {\n    /* n:\"BrtEndECTxtWiz\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x021C\n  /*::]*/\n  : {\n    /* n:\"BrtBeginECTWFldInfoLst\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x021D\n  /*::]*/\n  : {\n    /* n:\"BrtEndECTWFldInfoLst\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x021E\n  /*::]*/\n  : {\n    /* n:\"BrtBeginECTwFldInfo\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0224\n  /*::]*/\n  : {\n    /* n:\"BrtFileSharing\" */\n  },\n\n  /*::[*/\n  0x0225\n  /*::]*/\n  : {\n    /* n:\"BrtOleSize\" */\n  },\n\n  /*::[*/\n  0x0226\n  /*::]*/\n  : {\n    /* n:\"BrtDrawing\", */\n    f: parse_RelID\n  },\n\n  /*::[*/\n  0x0227\n  /*::]*/\n  : {\n    /* n:\"BrtLegacyDrawing\" */\n  },\n\n  /*::[*/\n  0x0228\n  /*::]*/\n  : {\n    /* n:\"BrtLegacyDrawingHF\" */\n  },\n\n  /*::[*/\n  0x0229\n  /*::]*/\n  : {\n    /* n:\"BrtWebOpt\" */\n  },\n\n  /*::[*/\n  0x022A\n  /*::]*/\n  : {\n    /* n:\"BrtBeginWebPubItems\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x022B\n  /*::]*/\n  : {\n    /* n:\"BrtEndWebPubItems\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x022C\n  /*::]*/\n  : {\n    /* n:\"BrtBeginWebPubItem\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x022D\n  /*::]*/\n  : {\n    /* n:\"BrtEndWebPubItem\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x022E\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXCondFmt\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x022F\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXCondFmt\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0230\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXCondFmts\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0231\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXCondFmts\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0232\n  /*::]*/\n  : {\n    /* n:\"BrtBkHim\" */\n  },\n\n  /*::[*/\n  0x0234\n  /*::]*/\n  : {\n    /* n:\"BrtColor\" */\n  },\n\n  /*::[*/\n  0x0235\n  /*::]*/\n  : {\n    /* n:\"BrtBeginIndexedColors\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0236\n  /*::]*/\n  : {\n    /* n:\"BrtEndIndexedColors\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0239\n  /*::]*/\n  : {\n    /* n:\"BrtBeginMRUColors\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x023A\n  /*::]*/\n  : {\n    /* n:\"BrtEndMRUColors\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x023C\n  /*::]*/\n  : {\n    /* n:\"BrtMRUColor\" */\n  },\n\n  /*::[*/\n  0x023D\n  /*::]*/\n  : {\n    /* n:\"BrtBeginDVals\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x023E\n  /*::]*/\n  : {\n    /* n:\"BrtEndDVals\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0241\n  /*::]*/\n  : {\n    /* n:\"BrtSupNameStart\" */\n  },\n\n  /*::[*/\n  0x0242\n  /*::]*/\n  : {\n    /* n:\"BrtSupNameValueStart\" */\n  },\n\n  /*::[*/\n  0x0243\n  /*::]*/\n  : {\n    /* n:\"BrtSupNameValueEnd\" */\n  },\n\n  /*::[*/\n  0x0244\n  /*::]*/\n  : {\n    /* n:\"BrtSupNameNum\" */\n  },\n\n  /*::[*/\n  0x0245\n  /*::]*/\n  : {\n    /* n:\"BrtSupNameErr\" */\n  },\n\n  /*::[*/\n  0x0246\n  /*::]*/\n  : {\n    /* n:\"BrtSupNameSt\" */\n  },\n\n  /*::[*/\n  0x0247\n  /*::]*/\n  : {\n    /* n:\"BrtSupNameNil\" */\n  },\n\n  /*::[*/\n  0x0248\n  /*::]*/\n  : {\n    /* n:\"BrtSupNameBool\" */\n  },\n\n  /*::[*/\n  0x0249\n  /*::]*/\n  : {\n    /* n:\"BrtSupNameFmla\" */\n  },\n\n  /*::[*/\n  0x024A\n  /*::]*/\n  : {\n    /* n:\"BrtSupNameBits\" */\n  },\n\n  /*::[*/\n  0x024B\n  /*::]*/\n  : {\n    /* n:\"BrtSupNameEnd\" */\n  },\n\n  /*::[*/\n  0x024C\n  /*::]*/\n  : {\n    /* n:\"BrtEndSupBook\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x024D\n  /*::]*/\n  : {\n    /* n:\"BrtCellSmartTagProperty\" */\n  },\n\n  /*::[*/\n  0x024E\n  /*::]*/\n  : {\n    /* n:\"BrtBeginCellSmartTag\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x024F\n  /*::]*/\n  : {\n    /* n:\"BrtEndCellSmartTag\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0250\n  /*::]*/\n  : {\n    /* n:\"BrtBeginCellSmartTags\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0251\n  /*::]*/\n  : {\n    /* n:\"BrtEndCellSmartTags\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0252\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSmartTags\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0253\n  /*::]*/\n  : {\n    /* n:\"BrtEndSmartTags\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0254\n  /*::]*/\n  : {\n    /* n:\"BrtSmartTagType\" */\n  },\n\n  /*::[*/\n  0x0255\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSmartTagTypes\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0256\n  /*::]*/\n  : {\n    /* n:\"BrtEndSmartTagTypes\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0257\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXFilters\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0258\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXFilters\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0259\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXFILTER\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x025A\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXFilter\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x025B\n  /*::]*/\n  : {\n    /* n:\"BrtBeginFills\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x025C\n  /*::]*/\n  : {\n    /* n:\"BrtEndFills\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x025D\n  /*::]*/\n  : {\n    /* n:\"BrtBeginCellWatches\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x025E\n  /*::]*/\n  : {\n    /* n:\"BrtEndCellWatches\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x025F\n  /*::]*/\n  : {\n    /* n:\"BrtCellWatch\" */\n  },\n\n  /*::[*/\n  0x0260\n  /*::]*/\n  : {\n    /* n:\"BrtBeginCRErrs\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0261\n  /*::]*/\n  : {\n    /* n:\"BrtEndCRErrs\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0262\n  /*::]*/\n  : {\n    /* n:\"BrtCrashRecErr\" */\n  },\n\n  /*::[*/\n  0x0263\n  /*::]*/\n  : {\n    /* n:\"BrtBeginFonts\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0264\n  /*::]*/\n  : {\n    /* n:\"BrtEndFonts\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0265\n  /*::]*/\n  : {\n    /* n:\"BrtBeginBorders\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0266\n  /*::]*/\n  : {\n    /* n:\"BrtEndBorders\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0267\n  /*::]*/\n  : {\n    /* n:\"BrtBeginFmts\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0268\n  /*::]*/\n  : {\n    /* n:\"BrtEndFmts\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0269\n  /*::]*/\n  : {\n    /* n:\"BrtBeginCellXFs\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x026A\n  /*::]*/\n  : {\n    /* n:\"BrtEndCellXFs\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x026B\n  /*::]*/\n  : {\n    /* n:\"BrtBeginStyles\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x026C\n  /*::]*/\n  : {\n    /* n:\"BrtEndStyles\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0271\n  /*::]*/\n  : {\n    /* n:\"BrtBigName\" */\n  },\n\n  /*::[*/\n  0x0272\n  /*::]*/\n  : {\n    /* n:\"BrtBeginCellStyleXFs\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0273\n  /*::]*/\n  : {\n    /* n:\"BrtEndCellStyleXFs\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0274\n  /*::]*/\n  : {\n    /* n:\"BrtBeginComments\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0275\n  /*::]*/\n  : {\n    /* n:\"BrtEndComments\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0276\n  /*::]*/\n  : {\n    /* n:\"BrtBeginCommentAuthors\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0277\n  /*::]*/\n  : {\n    /* n:\"BrtEndCommentAuthors\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0278\n  /*::]*/\n  : {\n    /* n:\"BrtCommentAuthor\", */\n    f: parse_BrtCommentAuthor\n  },\n\n  /*::[*/\n  0x0279\n  /*::]*/\n  : {\n    /* n:\"BrtBeginCommentList\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x027A\n  /*::]*/\n  : {\n    /* n:\"BrtEndCommentList\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x027B\n  /*::]*/\n  : {\n    /* n:\"BrtBeginComment\", */\n    T: 1,\n    f: parse_BrtBeginComment\n  },\n\n  /*::[*/\n  0x027C\n  /*::]*/\n  : {\n    /* n:\"BrtEndComment\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x027D\n  /*::]*/\n  : {\n    /* n:\"BrtCommentText\", */\n    f: parse_BrtCommentText\n  },\n\n  /*::[*/\n  0x027E\n  /*::]*/\n  : {\n    /* n:\"BrtBeginOleObjects\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x027F\n  /*::]*/\n  : {\n    /* n:\"BrtOleObject\" */\n  },\n\n  /*::[*/\n  0x0280\n  /*::]*/\n  : {\n    /* n:\"BrtEndOleObjects\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0281\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSxrules\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0282\n  /*::]*/\n  : {\n    /* n:\"BrtEndSxRules\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0283\n  /*::]*/\n  : {\n    /* n:\"BrtBeginActiveXControls\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0284\n  /*::]*/\n  : {\n    /* n:\"BrtActiveX\" */\n  },\n\n  /*::[*/\n  0x0285\n  /*::]*/\n  : {\n    /* n:\"BrtEndActiveXControls\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0286\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDSDTCEMembersSortBy\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0288\n  /*::]*/\n  : {\n    /* n:\"BrtBeginCellIgnoreECs\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0289\n  /*::]*/\n  : {\n    /* n:\"BrtCellIgnoreEC\" */\n  },\n\n  /*::[*/\n  0x028A\n  /*::]*/\n  : {\n    /* n:\"BrtEndCellIgnoreECs\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x028B\n  /*::]*/\n  : {\n    /* n:\"BrtCsProp\", */\n    f: parse_BrtCsProp\n  },\n\n  /*::[*/\n  0x028C\n  /*::]*/\n  : {\n    /* n:\"BrtCsPageSetup\" */\n  },\n\n  /*::[*/\n  0x028D\n  /*::]*/\n  : {\n    /* n:\"BrtBeginUserCsViews\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x028E\n  /*::]*/\n  : {\n    /* n:\"BrtEndUserCsViews\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x028F\n  /*::]*/\n  : {\n    /* n:\"BrtBeginUserCsView\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0290\n  /*::]*/\n  : {\n    /* n:\"BrtEndUserCsView\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0291\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPcdSFCIEntries\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0292\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDSFCIEntries\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0293\n  /*::]*/\n  : {\n    /* n:\"BrtPCDSFCIEntry\" */\n  },\n\n  /*::[*/\n  0x0294\n  /*::]*/\n  : {\n    /* n:\"BrtBeginListParts\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0295\n  /*::]*/\n  : {\n    /* n:\"BrtListPart\" */\n  },\n\n  /*::[*/\n  0x0296\n  /*::]*/\n  : {\n    /* n:\"BrtEndListParts\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0297\n  /*::]*/\n  : {\n    /* n:\"BrtSheetCalcProp\" */\n  },\n\n  /*::[*/\n  0x0298\n  /*::]*/\n  : {\n    /* n:\"BrtBeginFnGroup\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0299\n  /*::]*/\n  : {\n    /* n:\"BrtFnGroup\" */\n  },\n\n  /*::[*/\n  0x029A\n  /*::]*/\n  : {\n    /* n:\"BrtEndFnGroup\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x029B\n  /*::]*/\n  : {\n    /* n:\"BrtSupAddin\" */\n  },\n\n  /*::[*/\n  0x029C\n  /*::]*/\n  : {\n    /* n:\"BrtSXTDMPOrder\" */\n  },\n\n  /*::[*/\n  0x029D\n  /*::]*/\n  : {\n    /* n:\"BrtCsProtection\" */\n  },\n\n  /*::[*/\n  0x029F\n  /*::]*/\n  : {\n    /* n:\"BrtBeginWsSortMap\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x02A0\n  /*::]*/\n  : {\n    /* n:\"BrtEndWsSortMap\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x02A1\n  /*::]*/\n  : {\n    /* n:\"BrtBeginRRSort\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x02A2\n  /*::]*/\n  : {\n    /* n:\"BrtEndRRSort\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x02A3\n  /*::]*/\n  : {\n    /* n:\"BrtRRSortItem\" */\n  },\n\n  /*::[*/\n  0x02A4\n  /*::]*/\n  : {\n    /* n:\"BrtFileSharingIso\" */\n  },\n\n  /*::[*/\n  0x02A5\n  /*::]*/\n  : {\n    /* n:\"BrtBookProtectionIso\" */\n  },\n\n  /*::[*/\n  0x02A6\n  /*::]*/\n  : {\n    /* n:\"BrtSheetProtectionIso\" */\n  },\n\n  /*::[*/\n  0x02A7\n  /*::]*/\n  : {\n    /* n:\"BrtCsProtectionIso\" */\n  },\n\n  /*::[*/\n  0x02A8\n  /*::]*/\n  : {\n    /* n:\"BrtRangeProtectionIso\" */\n  },\n\n  /*::[*/\n  0x02A9\n  /*::]*/\n  : {\n    /* n:\"BrtDValList\" */\n  },\n\n  /*::[*/\n  0x0400\n  /*::]*/\n  : {\n    /* n:\"BrtRwDescent\" */\n  },\n\n  /*::[*/\n  0x0401\n  /*::]*/\n  : {\n    /* n:\"BrtKnownFonts\" */\n  },\n\n  /*::[*/\n  0x0402\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXTupleSet\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0403\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXTupleSet\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0404\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXTupleSetHeader\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0405\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXTupleSetHeader\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0406\n  /*::]*/\n  : {\n    /* n:\"BrtSXTupleSetHeaderItem\" */\n  },\n\n  /*::[*/\n  0x0407\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXTupleSetData\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0408\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXTupleSetData\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0409\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXTupleSetRow\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x040A\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXTupleSetRow\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x040B\n  /*::]*/\n  : {\n    /* n:\"BrtSXTupleSetRowItem\" */\n  },\n\n  /*::[*/\n  0x040C\n  /*::]*/\n  : {\n    /* n:\"BrtNameExt\" */\n  },\n\n  /*::[*/\n  0x040D\n  /*::]*/\n  : {\n    /* n:\"BrtPCDH14\" */\n  },\n\n  /*::[*/\n  0x040E\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDCalcMem14\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x040F\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDCalcMem14\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0410\n  /*::]*/\n  : {\n    /* n:\"BrtSXTH14\" */\n  },\n\n  /*::[*/\n  0x0411\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSparklineGroup\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0412\n  /*::]*/\n  : {\n    /* n:\"BrtEndSparklineGroup\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0413\n  /*::]*/\n  : {\n    /* n:\"BrtSparkline\" */\n  },\n\n  /*::[*/\n  0x0414\n  /*::]*/\n  : {\n    /* n:\"BrtSXDI14\" */\n  },\n\n  /*::[*/\n  0x0415\n  /*::]*/\n  : {\n    /* n:\"BrtWsFmtInfoEx14\" */\n  },\n\n  /*::[*/\n  0x0416\n  /*::]*/\n  : {\n    /* n:\"BrtBeginConditionalFormatting14\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0417\n  /*::]*/\n  : {\n    /* n:\"BrtEndConditionalFormatting14\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0418\n  /*::]*/\n  : {\n    /* n:\"BrtBeginCFRule14\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0419\n  /*::]*/\n  : {\n    /* n:\"BrtEndCFRule14\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x041A\n  /*::]*/\n  : {\n    /* n:\"BrtCFVO14\" */\n  },\n\n  /*::[*/\n  0x041B\n  /*::]*/\n  : {\n    /* n:\"BrtBeginDatabar14\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x041C\n  /*::]*/\n  : {\n    /* n:\"BrtBeginIconSet14\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x041D\n  /*::]*/\n  : {\n    /* n:\"BrtDVal14\", */\n    f: parse_BrtDVal14\n  },\n\n  /*::[*/\n  0x041E\n  /*::]*/\n  : {\n    /* n:\"BrtBeginDVals14\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x041F\n  /*::]*/\n  : {\n    /* n:\"BrtColor14\" */\n  },\n\n  /*::[*/\n  0x0420\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSparklines\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0421\n  /*::]*/\n  : {\n    /* n:\"BrtEndSparklines\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0422\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSparklineGroups\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0423\n  /*::]*/\n  : {\n    /* n:\"BrtEndSparklineGroups\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0425\n  /*::]*/\n  : {\n    /* n:\"BrtSXVD14\" */\n  },\n\n  /*::[*/\n  0x0426\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXView14\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0427\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXView14\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0428\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXView16\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0429\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXView16\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x042A\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCD14\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x042B\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCD14\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x042C\n  /*::]*/\n  : {\n    /* n:\"BrtBeginExtConn14\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x042D\n  /*::]*/\n  : {\n    /* n:\"BrtEndExtConn14\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x042E\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSlicerCacheIDs\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x042F\n  /*::]*/\n  : {\n    /* n:\"BrtEndSlicerCacheIDs\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0430\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSlicerCacheID\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0431\n  /*::]*/\n  : {\n    /* n:\"BrtEndSlicerCacheID\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0433\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSlicerCache\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0434\n  /*::]*/\n  : {\n    /* n:\"BrtEndSlicerCache\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0435\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSlicerCacheDef\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0436\n  /*::]*/\n  : {\n    /* n:\"BrtEndSlicerCacheDef\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0437\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSlicersEx\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0438\n  /*::]*/\n  : {\n    /* n:\"BrtEndSlicersEx\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0439\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSlicerEx\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x043A\n  /*::]*/\n  : {\n    /* n:\"BrtEndSlicerEx\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x043B\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSlicer\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x043C\n  /*::]*/\n  : {\n    /* n:\"BrtEndSlicer\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x043D\n  /*::]*/\n  : {\n    /* n:\"BrtSlicerCachePivotTables\" */\n  },\n\n  /*::[*/\n  0x043E\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSlicerCacheOlapImpl\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x043F\n  /*::]*/\n  : {\n    /* n:\"BrtEndSlicerCacheOlapImpl\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0440\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSlicerCacheLevelsData\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0441\n  /*::]*/\n  : {\n    /* n:\"BrtEndSlicerCacheLevelsData\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0442\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSlicerCacheLevelData\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0443\n  /*::]*/\n  : {\n    /* n:\"BrtEndSlicerCacheLevelData\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0444\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSlicerCacheSiRanges\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0445\n  /*::]*/\n  : {\n    /* n:\"BrtEndSlicerCacheSiRanges\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0446\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSlicerCacheSiRange\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0447\n  /*::]*/\n  : {\n    /* n:\"BrtEndSlicerCacheSiRange\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0448\n  /*::]*/\n  : {\n    /* n:\"BrtSlicerCacheOlapItem\" */\n  },\n\n  /*::[*/\n  0x0449\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSlicerCacheSelections\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x044A\n  /*::]*/\n  : {\n    /* n:\"BrtSlicerCacheSelection\" */\n  },\n\n  /*::[*/\n  0x044B\n  /*::]*/\n  : {\n    /* n:\"BrtEndSlicerCacheSelections\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x044C\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSlicerCacheNative\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x044D\n  /*::]*/\n  : {\n    /* n:\"BrtEndSlicerCacheNative\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x044E\n  /*::]*/\n  : {\n    /* n:\"BrtSlicerCacheNativeItem\" */\n  },\n\n  /*::[*/\n  0x044F\n  /*::]*/\n  : {\n    /* n:\"BrtRangeProtection14\" */\n  },\n\n  /*::[*/\n  0x0450\n  /*::]*/\n  : {\n    /* n:\"BrtRangeProtectionIso14\" */\n  },\n\n  /*::[*/\n  0x0451\n  /*::]*/\n  : {\n    /* n:\"BrtCellIgnoreEC14\" */\n  },\n\n  /*::[*/\n  0x0457\n  /*::]*/\n  : {\n    /* n:\"BrtList14\" */\n  },\n\n  /*::[*/\n  0x0458\n  /*::]*/\n  : {\n    /* n:\"BrtCFIcon\" */\n  },\n\n  /*::[*/\n  0x0459\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSlicerCachesPivotCacheIDs\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x045A\n  /*::]*/\n  : {\n    /* n:\"BrtEndSlicerCachesPivotCacheIDs\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x045B\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSlicers\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x045C\n  /*::]*/\n  : {\n    /* n:\"BrtEndSlicers\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x045D\n  /*::]*/\n  : {\n    /* n:\"BrtWbProp14\" */\n  },\n\n  /*::[*/\n  0x045E\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXEdit\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x045F\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXEdit\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0460\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXEdits\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0461\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXEdits\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0462\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXChange\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0463\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXChange\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0464\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXChanges\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0465\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXChanges\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0466\n  /*::]*/\n  : {\n    /* n:\"BrtSXTupleItems\" */\n  },\n\n  /*::[*/\n  0x0468\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSlicerStyle\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0469\n  /*::]*/\n  : {\n    /* n:\"BrtEndSlicerStyle\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x046A\n  /*::]*/\n  : {\n    /* n:\"BrtSlicerStyleElement\" */\n  },\n\n  /*::[*/\n  0x046B\n  /*::]*/\n  : {\n    /* n:\"BrtBeginStyleSheetExt14\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x046C\n  /*::]*/\n  : {\n    /* n:\"BrtEndStyleSheetExt14\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x046D\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSlicerCachesPivotCacheID\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x046E\n  /*::]*/\n  : {\n    /* n:\"BrtEndSlicerCachesPivotCacheID\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x046F\n  /*::]*/\n  : {\n    /* n:\"BrtBeginConditionalFormattings\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0470\n  /*::]*/\n  : {\n    /* n:\"BrtEndConditionalFormattings\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0471\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDCalcMemExt\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0472\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDCalcMemExt\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0473\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPCDCalcMemsExt\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0474\n  /*::]*/\n  : {\n    /* n:\"BrtEndPCDCalcMemsExt\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0475\n  /*::]*/\n  : {\n    /* n:\"BrtPCDField14\" */\n  },\n\n  /*::[*/\n  0x0476\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSlicerStyles\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0477\n  /*::]*/\n  : {\n    /* n:\"BrtEndSlicerStyles\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0478\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSlicerStyleElements\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0479\n  /*::]*/\n  : {\n    /* n:\"BrtEndSlicerStyleElements\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x047A\n  /*::]*/\n  : {\n    /* n:\"BrtCFRuleExt\" */\n  },\n\n  /*::[*/\n  0x047B\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXCondFmt14\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x047C\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXCondFmt14\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x047D\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSXCondFmts14\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x047E\n  /*::]*/\n  : {\n    /* n:\"BrtEndSXCondFmts14\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0480\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSortCond14\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0481\n  /*::]*/\n  : {\n    /* n:\"BrtEndSortCond14\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0482\n  /*::]*/\n  : {\n    /* n:\"BrtEndDVals14\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0483\n  /*::]*/\n  : {\n    /* n:\"BrtEndIconSet14\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0484\n  /*::]*/\n  : {\n    /* n:\"BrtEndDatabar14\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0485\n  /*::]*/\n  : {\n    /* n:\"BrtBeginColorScale14\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0486\n  /*::]*/\n  : {\n    /* n:\"BrtEndColorScale14\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0487\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSxrules14\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0488\n  /*::]*/\n  : {\n    /* n:\"BrtEndSxrules14\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0489\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPRule14\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x048A\n  /*::]*/\n  : {\n    /* n:\"BrtEndPRule14\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x048B\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPRFilters14\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x048C\n  /*::]*/\n  : {\n    /* n:\"BrtEndPRFilters14\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x048D\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPRFilter14\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x048E\n  /*::]*/\n  : {\n    /* n:\"BrtEndPRFilter14\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x048F\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPRFItem14\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0490\n  /*::]*/\n  : {\n    /* n:\"BrtEndPRFItem14\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0491\n  /*::]*/\n  : {\n    /* n:\"BrtBeginCellIgnoreECs14\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0492\n  /*::]*/\n  : {\n    /* n:\"BrtEndCellIgnoreECs14\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0493\n  /*::]*/\n  : {\n    /* n:\"BrtDxf14\" */\n  },\n\n  /*::[*/\n  0x0494\n  /*::]*/\n  : {\n    /* n:\"BrtBeginDxF14s\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0495\n  /*::]*/\n  : {\n    /* n:\"BrtEndDxf14s\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0499\n  /*::]*/\n  : {\n    /* n:\"BrtFilter14\" */\n  },\n\n  /*::[*/\n  0x049A\n  /*::]*/\n  : {\n    /* n:\"BrtBeginCustomFilters14\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x049C\n  /*::]*/\n  : {\n    /* n:\"BrtCustomFilter14\" */\n  },\n\n  /*::[*/\n  0x049D\n  /*::]*/\n  : {\n    /* n:\"BrtIconFilter14\" */\n  },\n\n  /*::[*/\n  0x049E\n  /*::]*/\n  : {\n    /* n:\"BrtPivotCacheConnectionName\" */\n  },\n\n  /*::[*/\n  0x0800\n  /*::]*/\n  : {\n    /* n:\"BrtBeginDecoupledPivotCacheIDs\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0801\n  /*::]*/\n  : {\n    /* n:\"BrtEndDecoupledPivotCacheIDs\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0802\n  /*::]*/\n  : {\n    /* n:\"BrtDecoupledPivotCacheID\" */\n  },\n\n  /*::[*/\n  0x0803\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPivotTableRefs\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0804\n  /*::]*/\n  : {\n    /* n:\"BrtEndPivotTableRefs\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0805\n  /*::]*/\n  : {\n    /* n:\"BrtPivotTableRef\" */\n  },\n\n  /*::[*/\n  0x0806\n  /*::]*/\n  : {\n    /* n:\"BrtSlicerCacheBookPivotTables\" */\n  },\n\n  /*::[*/\n  0x0807\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSxvcells\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0808\n  /*::]*/\n  : {\n    /* n:\"BrtEndSxvcells\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0809\n  /*::]*/\n  : {\n    /* n:\"BrtBeginSxRow\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x080A\n  /*::]*/\n  : {\n    /* n:\"BrtEndSxRow\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x080C\n  /*::]*/\n  : {\n    /* n:\"BrtPcdCalcMem15\" */\n  },\n\n  /*::[*/\n  0x0813\n  /*::]*/\n  : {\n    /* n:\"BrtQsi15\" */\n  },\n\n  /*::[*/\n  0x0814\n  /*::]*/\n  : {\n    /* n:\"BrtBeginWebExtensions\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0815\n  /*::]*/\n  : {\n    /* n:\"BrtEndWebExtensions\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0816\n  /*::]*/\n  : {\n    /* n:\"BrtWebExtension\" */\n  },\n\n  /*::[*/\n  0x0817\n  /*::]*/\n  : {\n    /* n:\"BrtAbsPath15\" */\n  },\n\n  /*::[*/\n  0x0818\n  /*::]*/\n  : {\n    /* n:\"BrtBeginPivotTableUISettings\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0819\n  /*::]*/\n  : {\n    /* n:\"BrtEndPivotTableUISettings\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x081B\n  /*::]*/\n  : {\n    /* n:\"BrtTableSlicerCacheIDs\" */\n  },\n\n  /*::[*/\n  0x081C\n  /*::]*/\n  : {\n    /* n:\"BrtTableSlicerCacheID\" */\n  },\n\n  /*::[*/\n  0x081D\n  /*::]*/\n  : {\n    /* n:\"BrtBeginTableSlicerCache\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x081E\n  /*::]*/\n  : {\n    /* n:\"BrtEndTableSlicerCache\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x081F\n  /*::]*/\n  : {\n    /* n:\"BrtSxFilter15\" */\n  },\n\n  /*::[*/\n  0x0820\n  /*::]*/\n  : {\n    /* n:\"BrtBeginTimelineCachePivotCacheIDs\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0821\n  /*::]*/\n  : {\n    /* n:\"BrtEndTimelineCachePivotCacheIDs\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0822\n  /*::]*/\n  : {\n    /* n:\"BrtTimelineCachePivotCacheID\" */\n  },\n\n  /*::[*/\n  0x0823\n  /*::]*/\n  : {\n    /* n:\"BrtBeginTimelineCacheIDs\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0824\n  /*::]*/\n  : {\n    /* n:\"BrtEndTimelineCacheIDs\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0825\n  /*::]*/\n  : {\n    /* n:\"BrtBeginTimelineCacheID\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0826\n  /*::]*/\n  : {\n    /* n:\"BrtEndTimelineCacheID\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0827\n  /*::]*/\n  : {\n    /* n:\"BrtBeginTimelinesEx\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0828\n  /*::]*/\n  : {\n    /* n:\"BrtEndTimelinesEx\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0829\n  /*::]*/\n  : {\n    /* n:\"BrtBeginTimelineEx\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x082A\n  /*::]*/\n  : {\n    /* n:\"BrtEndTimelineEx\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x082B\n  /*::]*/\n  : {\n    /* n:\"BrtWorkBookPr15\" */\n  },\n\n  /*::[*/\n  0x082C\n  /*::]*/\n  : {\n    /* n:\"BrtPCDH15\" */\n  },\n\n  /*::[*/\n  0x082D\n  /*::]*/\n  : {\n    /* n:\"BrtBeginTimelineStyle\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x082E\n  /*::]*/\n  : {\n    /* n:\"BrtEndTimelineStyle\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x082F\n  /*::]*/\n  : {\n    /* n:\"BrtTimelineStyleElement\" */\n  },\n\n  /*::[*/\n  0x0830\n  /*::]*/\n  : {\n    /* n:\"BrtBeginTimelineStylesheetExt15\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0831\n  /*::]*/\n  : {\n    /* n:\"BrtEndTimelineStylesheetExt15\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0832\n  /*::]*/\n  : {\n    /* n:\"BrtBeginTimelineStyles\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0833\n  /*::]*/\n  : {\n    /* n:\"BrtEndTimelineStyles\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0834\n  /*::]*/\n  : {\n    /* n:\"BrtBeginTimelineStyleElements\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0835\n  /*::]*/\n  : {\n    /* n:\"BrtEndTimelineStyleElements\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0836\n  /*::]*/\n  : {\n    /* n:\"BrtDxf15\" */\n  },\n\n  /*::[*/\n  0x0837\n  /*::]*/\n  : {\n    /* n:\"BrtBeginDxfs15\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0838\n  /*::]*/\n  : {\n    /* n:\"BrtEndDxfs15\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0839\n  /*::]*/\n  : {\n    /* n:\"BrtSlicerCacheHideItemsWithNoData\" */\n  },\n\n  /*::[*/\n  0x083A\n  /*::]*/\n  : {\n    /* n:\"BrtBeginItemUniqueNames\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x083B\n  /*::]*/\n  : {\n    /* n:\"BrtEndItemUniqueNames\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x083C\n  /*::]*/\n  : {\n    /* n:\"BrtItemUniqueName\" */\n  },\n\n  /*::[*/\n  0x083D\n  /*::]*/\n  : {\n    /* n:\"BrtBeginExtConn15\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x083E\n  /*::]*/\n  : {\n    /* n:\"BrtEndExtConn15\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x083F\n  /*::]*/\n  : {\n    /* n:\"BrtBeginOledbPr15\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0840\n  /*::]*/\n  : {\n    /* n:\"BrtEndOledbPr15\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0841\n  /*::]*/\n  : {\n    /* n:\"BrtBeginDataFeedPr15\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0842\n  /*::]*/\n  : {\n    /* n:\"BrtEndDataFeedPr15\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0843\n  /*::]*/\n  : {\n    /* n:\"BrtTextPr15\" */\n  },\n\n  /*::[*/\n  0x0844\n  /*::]*/\n  : {\n    /* n:\"BrtRangePr15\" */\n  },\n\n  /*::[*/\n  0x0845\n  /*::]*/\n  : {\n    /* n:\"BrtDbCommand15\" */\n  },\n\n  /*::[*/\n  0x0846\n  /*::]*/\n  : {\n    /* n:\"BrtBeginDbTables15\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0847\n  /*::]*/\n  : {\n    /* n:\"BrtEndDbTables15\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0848\n  /*::]*/\n  : {\n    /* n:\"BrtDbTable15\" */\n  },\n\n  /*::[*/\n  0x0849\n  /*::]*/\n  : {\n    /* n:\"BrtBeginDataModel\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x084A\n  /*::]*/\n  : {\n    /* n:\"BrtEndDataModel\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x084B\n  /*::]*/\n  : {\n    /* n:\"BrtBeginModelTables\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x084C\n  /*::]*/\n  : {\n    /* n:\"BrtEndModelTables\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x084D\n  /*::]*/\n  : {\n    /* n:\"BrtModelTable\" */\n  },\n\n  /*::[*/\n  0x084E\n  /*::]*/\n  : {\n    /* n:\"BrtBeginModelRelationships\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x084F\n  /*::]*/\n  : {\n    /* n:\"BrtEndModelRelationships\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0850\n  /*::]*/\n  : {\n    /* n:\"BrtModelRelationship\" */\n  },\n\n  /*::[*/\n  0x0851\n  /*::]*/\n  : {\n    /* n:\"BrtBeginECTxtWiz15\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0852\n  /*::]*/\n  : {\n    /* n:\"BrtEndECTxtWiz15\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0853\n  /*::]*/\n  : {\n    /* n:\"BrtBeginECTWFldInfoLst15\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0854\n  /*::]*/\n  : {\n    /* n:\"BrtEndECTWFldInfoLst15\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x0855\n  /*::]*/\n  : {\n    /* n:\"BrtBeginECTWFldInfo15\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x0856\n  /*::]*/\n  : {\n    /* n:\"BrtFieldListActiveItem\" */\n  },\n\n  /*::[*/\n  0x0857\n  /*::]*/\n  : {\n    /* n:\"BrtPivotCacheIdVersion\" */\n  },\n\n  /*::[*/\n  0x0858\n  /*::]*/\n  : {\n    /* n:\"BrtSXDI15\" */\n  },\n\n  /*::[*/\n  0x0859\n  /*::]*/\n  : {\n    /* n:\"BrtBeginModelTimeGroupings\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x085A\n  /*::]*/\n  : {\n    /* n:\"BrtEndModelTimeGroupings\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x085B\n  /*::]*/\n  : {\n    /* n:\"BrtBeginModelTimeGrouping\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x085C\n  /*::]*/\n  : {\n    /* n:\"BrtEndModelTimeGrouping\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x085D\n  /*::]*/\n  : {\n    /* n:\"BrtModelTimeGroupingCalcCol\" */\n  },\n\n  /*::[*/\n  0x0C00\n  /*::]*/\n  : {\n    /* n:\"BrtUid\" */\n  },\n\n  /*::[*/\n  0x0C01\n  /*::]*/\n  : {\n    /* n:\"BrtRevisionPtr\" */\n  },\n\n  /*::[*/\n  0x1000\n  /*::]*/\n  : {\n    /* n:\"BrtBeginDynamicArrayPr\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x1001\n  /*::]*/\n  : {\n    /* n:\"BrtEndDynamicArrayPr\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x138A\n  /*::]*/\n  : {\n    /* n:\"BrtBeginRichValueBlock\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x138B\n  /*::]*/\n  : {\n    /* n:\"BrtEndRichValueBlock\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x13D9\n  /*::]*/\n  : {\n    /* n:\"BrtBeginRichFilters\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x13DA\n  /*::]*/\n  : {\n    /* n:\"BrtEndRichFilters\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x13DB\n  /*::]*/\n  : {\n    /* n:\"BrtRichFilter\" */\n  },\n\n  /*::[*/\n  0x13DC\n  /*::]*/\n  : {\n    /* n:\"BrtBeginRichFilterColumn\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x13DD\n  /*::]*/\n  : {\n    /* n:\"BrtEndRichFilterColumn\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x13DE\n  /*::]*/\n  : {\n    /* n:\"BrtBeginCustomRichFilters\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x13DF\n  /*::]*/\n  : {\n    /* n:\"BrtEndCustomRichFilters\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x13E0\n  /*::]*/\n  : {\n    /* n:\"BrtCustomRichFilter\" */\n  },\n\n  /*::[*/\n  0x13E1\n  /*::]*/\n  : {\n    /* n:\"BrtTop10RichFilter\" */\n  },\n\n  /*::[*/\n  0x13E2\n  /*::]*/\n  : {\n    /* n:\"BrtDynamicRichFilter\" */\n  },\n\n  /*::[*/\n  0x13E4\n  /*::]*/\n  : {\n    /* n:\"BrtBeginRichSortCondition\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x13E5\n  /*::]*/\n  : {\n    /* n:\"BrtEndRichSortCondition\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x13E6\n  /*::]*/\n  : {\n    /* n:\"BrtRichFilterDateGroupItem\" */\n  },\n\n  /*::[*/\n  0x13E7\n  /*::]*/\n  : {\n    /* n:\"BrtBeginCalcFeatures\", */\n    T: 1\n  },\n\n  /*::[*/\n  0x13E8\n  /*::]*/\n  : {\n    /* n:\"BrtEndCalcFeatures\", */\n    T: -1\n  },\n\n  /*::[*/\n  0x13E9\n  /*::]*/\n  : {\n    /* n:\"BrtCalcFeature\" */\n  },\n\n  /*::[*/\n  0x13EB\n  /*::]*/\n  : {\n    /* n:\"BrtExternalLinksPr\" */\n  },\n\n  /*::[*/\n  0xFFFF\n  /*::]*/\n  : {\n    n: \"\"\n  }\n};\n/* [MS-XLS] 2.3 Record Enumeration (and other sources) */\n\nvar XLSRecordEnum = {\n  /* [MS-XLS] 2.3 Record Enumeration 2021-08-17 */\n\n  /*::[*/\n  0x0006\n  /*::]*/\n  : {\n    /* n:\"Formula\", */\n    f: parse_Formula\n  },\n\n  /*::[*/\n  0x000a\n  /*::]*/\n  : {\n    /* n:\"EOF\", */\n    f: parsenoop2\n  },\n\n  /*::[*/\n  0x000c\n  /*::]*/\n  : {\n    /* n:\"CalcCount\", */\n    f: parseuint16\n  },\n  //\n\n  /*::[*/\n  0x000d\n  /*::]*/\n  : {\n    /* n:\"CalcMode\", */\n    f: parseuint16\n  },\n  //\n\n  /*::[*/\n  0x000e\n  /*::]*/\n  : {\n    /* n:\"CalcPrecision\", */\n    f: parsebool\n  },\n  //\n\n  /*::[*/\n  0x000f\n  /*::]*/\n  : {\n    /* n:\"CalcRefMode\", */\n    f: parsebool\n  },\n  //\n\n  /*::[*/\n  0x0010\n  /*::]*/\n  : {\n    /* n:\"CalcDelta\", */\n    f: parse_Xnum\n  },\n  //\n\n  /*::[*/\n  0x0011\n  /*::]*/\n  : {\n    /* n:\"CalcIter\", */\n    f: parsebool\n  },\n  //\n\n  /*::[*/\n  0x0012\n  /*::]*/\n  : {\n    /* n:\"Protect\", */\n    f: parsebool\n  },\n\n  /*::[*/\n  0x0013\n  /*::]*/\n  : {\n    /* n:\"Password\", */\n    f: parseuint16\n  },\n\n  /*::[*/\n  0x0014\n  /*::]*/\n  : {\n    /* n:\"Header\", */\n    f: parse_XLHeaderFooter\n  },\n\n  /*::[*/\n  0x0015\n  /*::]*/\n  : {\n    /* n:\"Footer\", */\n    f: parse_XLHeaderFooter\n  },\n\n  /*::[*/\n  0x0017\n  /*::]*/\n  : {\n    /* n:\"ExternSheet\", */\n    f: parse_ExternSheet\n  },\n\n  /*::[*/\n  0x0018\n  /*::]*/\n  : {\n    /* n:\"Lbl\", */\n    f: parse_Lbl\n  },\n\n  /*::[*/\n  0x0019\n  /*::]*/\n  : {\n    /* n:\"WinProtect\", */\n    f: parsebool\n  },\n\n  /*::[*/\n  0x001a\n  /*::]*/\n  : {\n    /* n:\"VerticalPageBreaks\", */\n  },\n\n  /*::[*/\n  0x001b\n  /*::]*/\n  : {\n    /* n:\"HorizontalPageBreaks\", */\n  },\n\n  /*::[*/\n  0x001c\n  /*::]*/\n  : {\n    /* n:\"Note\", */\n    f: parse_Note\n  },\n\n  /*::[*/\n  0x001d\n  /*::]*/\n  : {\n    /* n:\"Selection\", */\n  },\n\n  /*::[*/\n  0x0022\n  /*::]*/\n  : {\n    /* n:\"Date1904\", */\n    f: parsebool\n  },\n\n  /*::[*/\n  0x0023\n  /*::]*/\n  : {\n    /* n:\"ExternName\", */\n    f: parse_ExternName\n  },\n\n  /*::[*/\n  0x0026\n  /*::]*/\n  : {\n    /* n:\"LeftMargin\", */\n    f: parse_Xnum\n  },\n  // *\n\n  /*::[*/\n  0x0027\n  /*::]*/\n  : {\n    /* n:\"RightMargin\", */\n    f: parse_Xnum\n  },\n  // *\n\n  /*::[*/\n  0x0028\n  /*::]*/\n  : {\n    /* n:\"TopMargin\", */\n    f: parse_Xnum\n  },\n  // *\n\n  /*::[*/\n  0x0029\n  /*::]*/\n  : {\n    /* n:\"BottomMargin\", */\n    f: parse_Xnum\n  },\n  // *\n\n  /*::[*/\n  0x002a\n  /*::]*/\n  : {\n    /* n:\"PrintRowCol\", */\n    f: parsebool\n  },\n\n  /*::[*/\n  0x002b\n  /*::]*/\n  : {\n    /* n:\"PrintGrid\", */\n    f: parsebool\n  },\n\n  /*::[*/\n  0x002f\n  /*::]*/\n  : {\n    /* n:\"FilePass\", */\n    f: parse_FilePass\n  },\n\n  /*::[*/\n  0x0031\n  /*::]*/\n  : {\n    /* n:\"Font\", */\n    f: parse_Font\n  },\n\n  /*::[*/\n  0x0033\n  /*::]*/\n  : {\n    /* n:\"PrintSize\", */\n    f: parseuint16\n  },\n\n  /*::[*/\n  0x003c\n  /*::]*/\n  : {\n    /* n:\"Continue\", */\n  },\n\n  /*::[*/\n  0x003d\n  /*::]*/\n  : {\n    /* n:\"Window1\", */\n    f: parse_Window1\n  },\n\n  /*::[*/\n  0x0040\n  /*::]*/\n  : {\n    /* n:\"Backup\", */\n    f: parsebool\n  },\n\n  /*::[*/\n  0x0041\n  /*::]*/\n  : {\n    /* n:\"Pane\", */\n    f: parse_Pane\n  },\n\n  /*::[*/\n  0x0042\n  /*::]*/\n  : {\n    /* n:\"CodePage\", */\n    f: parseuint16\n  },\n\n  /*::[*/\n  0x004d\n  /*::]*/\n  : {\n    /* n:\"Pls\", */\n  },\n\n  /*::[*/\n  0x0050\n  /*::]*/\n  : {\n    /* n:\"DCon\", */\n  },\n\n  /*::[*/\n  0x0051\n  /*::]*/\n  : {\n    /* n:\"DConRef\", */\n  },\n\n  /*::[*/\n  0x0052\n  /*::]*/\n  : {\n    /* n:\"DConName\", */\n  },\n\n  /*::[*/\n  0x0055\n  /*::]*/\n  : {\n    /* n:\"DefColWidth\", */\n    f: parseuint16\n  },\n\n  /*::[*/\n  0x0059\n  /*::]*/\n  : {\n    /* n:\"XCT\", */\n  },\n\n  /*::[*/\n  0x005a\n  /*::]*/\n  : {\n    /* n:\"CRN\", */\n  },\n\n  /*::[*/\n  0x005b\n  /*::]*/\n  : {\n    /* n:\"FileSharing\", */\n  },\n\n  /*::[*/\n  0x005c\n  /*::]*/\n  : {\n    /* n:\"WriteAccess\", */\n    f: parse_WriteAccess\n  },\n\n  /*::[*/\n  0x005d\n  /*::]*/\n  : {\n    /* n:\"Obj\", */\n    f: parse_Obj\n  },\n\n  /*::[*/\n  0x005e\n  /*::]*/\n  : {\n    /* n:\"Uncalced\", */\n  },\n\n  /*::[*/\n  0x005f\n  /*::]*/\n  : {\n    /* n:\"CalcSaveRecalc\", */\n    f: parsebool\n  },\n  //\n\n  /*::[*/\n  0x0060\n  /*::]*/\n  : {\n    /* n:\"Template\", */\n  },\n\n  /*::[*/\n  0x0061\n  /*::]*/\n  : {\n    /* n:\"Intl\", */\n  },\n\n  /*::[*/\n  0x0063\n  /*::]*/\n  : {\n    /* n:\"ObjProtect\", */\n    f: parsebool\n  },\n\n  /*::[*/\n  0x007d\n  /*::]*/\n  : {\n    /* n:\"ColInfo\", */\n    f: parse_ColInfo\n  },\n\n  /*::[*/\n  0x0080\n  /*::]*/\n  : {\n    /* n:\"Guts\", */\n    f: parse_Guts\n  },\n\n  /*::[*/\n  0x0081\n  /*::]*/\n  : {\n    /* n:\"WsBool\", */\n    f: parse_WsBool\n  },\n\n  /*::[*/\n  0x0082\n  /*::]*/\n  : {\n    /* n:\"GridSet\", */\n    f: parseuint16\n  },\n\n  /*::[*/\n  0x0083\n  /*::]*/\n  : {\n    /* n:\"HCenter\", */\n    f: parsebool\n  },\n\n  /*::[*/\n  0x0084\n  /*::]*/\n  : {\n    /* n:\"VCenter\", */\n    f: parsebool\n  },\n\n  /*::[*/\n  0x0085\n  /*::]*/\n  : {\n    /* n:\"BoundSheet8\", */\n    f: parse_BoundSheet8\n  },\n\n  /*::[*/\n  0x0086\n  /*::]*/\n  : {\n    /* n:\"WriteProtect\", */\n  },\n\n  /*::[*/\n  0x008c\n  /*::]*/\n  : {\n    /* n:\"Country\", */\n    f: parse_Country\n  },\n\n  /*::[*/\n  0x008d\n  /*::]*/\n  : {\n    /* n:\"HideObj\", */\n    f: parseuint16\n  },\n\n  /*::[*/\n  0x0090\n  /*::]*/\n  : {\n    /* n:\"Sort\", */\n  },\n\n  /*::[*/\n  0x0092\n  /*::]*/\n  : {\n    /* n:\"Palette\", */\n    f: parse_Palette\n  },\n\n  /*::[*/\n  0x0097\n  /*::]*/\n  : {\n    /* n:\"Sync\", */\n  },\n\n  /*::[*/\n  0x0098\n  /*::]*/\n  : {\n    /* n:\"LPr\", */\n  },\n\n  /*::[*/\n  0x0099\n  /*::]*/\n  : {\n    /* n:\"DxGCol\", */\n  },\n\n  /*::[*/\n  0x009a\n  /*::]*/\n  : {\n    /* n:\"FnGroupName\", */\n  },\n\n  /*::[*/\n  0x009b\n  /*::]*/\n  : {\n    /* n:\"FilterMode\", */\n  },\n\n  /*::[*/\n  0x009c\n  /*::]*/\n  : {\n    /* n:\"BuiltInFnGroupCount\", */\n    f: parseuint16\n  },\n\n  /*::[*/\n  0x009d\n  /*::]*/\n  : {\n    /* n:\"AutoFilterInfo\", */\n  },\n\n  /*::[*/\n  0x009e\n  /*::]*/\n  : {\n    /* n:\"AutoFilter\", */\n  },\n\n  /*::[*/\n  0x00a0\n  /*::]*/\n  : {\n    /* n:\"Scl\", */\n    f: parse_Scl\n  },\n\n  /*::[*/\n  0x00a1\n  /*::]*/\n  : {\n    /* n:\"Setup\", */\n    f: parse_Setup\n  },\n\n  /*::[*/\n  0x00ae\n  /*::]*/\n  : {\n    /* n:\"ScenMan\", */\n  },\n\n  /*::[*/\n  0x00af\n  /*::]*/\n  : {\n    /* n:\"SCENARIO\", */\n  },\n\n  /*::[*/\n  0x00b0\n  /*::]*/\n  : {\n    /* n:\"SxView\", */\n  },\n\n  /*::[*/\n  0x00b1\n  /*::]*/\n  : {\n    /* n:\"Sxvd\", */\n  },\n\n  /*::[*/\n  0x00b2\n  /*::]*/\n  : {\n    /* n:\"SXVI\", */\n  },\n\n  /*::[*/\n  0x00b4\n  /*::]*/\n  : {\n    /* n:\"SxIvd\", */\n  },\n\n  /*::[*/\n  0x00b5\n  /*::]*/\n  : {\n    /* n:\"SXLI\", */\n  },\n\n  /*::[*/\n  0x00b6\n  /*::]*/\n  : {\n    /* n:\"SXPI\", */\n  },\n\n  /*::[*/\n  0x00b8\n  /*::]*/\n  : {\n    /* n:\"DocRoute\", */\n  },\n\n  /*::[*/\n  0x00b9\n  /*::]*/\n  : {\n    /* n:\"RecipName\", */\n  },\n\n  /*::[*/\n  0x00bd\n  /*::]*/\n  : {\n    /* n:\"MulRk\", */\n    f: parse_MulRk\n  },\n\n  /*::[*/\n  0x00be\n  /*::]*/\n  : {\n    /* n:\"MulBlank\", */\n    f: parse_MulBlank\n  },\n\n  /*::[*/\n  0x00c1\n  /*::]*/\n  : {\n    /* n:\"Mms\", */\n    f: parsenoop2\n  },\n\n  /*::[*/\n  0x00c5\n  /*::]*/\n  : {\n    /* n:\"SXDI\", */\n  },\n\n  /*::[*/\n  0x00c6\n  /*::]*/\n  : {\n    /* n:\"SXDB\", */\n  },\n\n  /*::[*/\n  0x00c7\n  /*::]*/\n  : {\n    /* n:\"SXFDB\", */\n  },\n\n  /*::[*/\n  0x00c8\n  /*::]*/\n  : {\n    /* n:\"SXDBB\", */\n  },\n\n  /*::[*/\n  0x00c9\n  /*::]*/\n  : {\n    /* n:\"SXNum\", */\n  },\n\n  /*::[*/\n  0x00ca\n  /*::]*/\n  : {\n    /* n:\"SxBool\", */\n    f: parsebool\n  },\n\n  /*::[*/\n  0x00cb\n  /*::]*/\n  : {\n    /* n:\"SxErr\", */\n  },\n\n  /*::[*/\n  0x00cc\n  /*::]*/\n  : {\n    /* n:\"SXInt\", */\n  },\n\n  /*::[*/\n  0x00cd\n  /*::]*/\n  : {\n    /* n:\"SXString\", */\n  },\n\n  /*::[*/\n  0x00ce\n  /*::]*/\n  : {\n    /* n:\"SXDtr\", */\n  },\n\n  /*::[*/\n  0x00cf\n  /*::]*/\n  : {\n    /* n:\"SxNil\", */\n  },\n\n  /*::[*/\n  0x00d0\n  /*::]*/\n  : {\n    /* n:\"SXTbl\", */\n  },\n\n  /*::[*/\n  0x00d1\n  /*::]*/\n  : {\n    /* n:\"SXTBRGIITM\", */\n  },\n\n  /*::[*/\n  0x00d2\n  /*::]*/\n  : {\n    /* n:\"SxTbpg\", */\n  },\n\n  /*::[*/\n  0x00d3\n  /*::]*/\n  : {\n    /* n:\"ObProj\", */\n  },\n\n  /*::[*/\n  0x00d5\n  /*::]*/\n  : {\n    /* n:\"SXStreamID\", */\n  },\n\n  /*::[*/\n  0x00d7\n  /*::]*/\n  : {\n    /* n:\"DBCell\", */\n  },\n\n  /*::[*/\n  0x00d8\n  /*::]*/\n  : {\n    /* n:\"SXRng\", */\n  },\n\n  /*::[*/\n  0x00d9\n  /*::]*/\n  : {\n    /* n:\"SxIsxoper\", */\n  },\n\n  /*::[*/\n  0x00da\n  /*::]*/\n  : {\n    /* n:\"BookBool\", */\n    f: parseuint16\n  },\n\n  /*::[*/\n  0x00dc\n  /*::]*/\n  : {\n    /* n:\"DbOrParamQry\", */\n  },\n\n  /*::[*/\n  0x00dd\n  /*::]*/\n  : {\n    /* n:\"ScenarioProtect\", */\n    f: parsebool\n  },\n\n  /*::[*/\n  0x00de\n  /*::]*/\n  : {\n    /* n:\"OleObjectSize\", */\n  },\n\n  /*::[*/\n  0x00e0\n  /*::]*/\n  : {\n    /* n:\"XF\", */\n    f: parse_XF\n  },\n\n  /*::[*/\n  0x00e1\n  /*::]*/\n  : {\n    /* n:\"InterfaceHdr\", */\n    f: parse_InterfaceHdr\n  },\n\n  /*::[*/\n  0x00e2\n  /*::]*/\n  : {\n    /* n:\"InterfaceEnd\", */\n    f: parsenoop2\n  },\n\n  /*::[*/\n  0x00e3\n  /*::]*/\n  : {\n    /* n:\"SXVS\", */\n  },\n\n  /*::[*/\n  0x00e5\n  /*::]*/\n  : {\n    /* n:\"MergeCells\", */\n    f: parse_MergeCells\n  },\n\n  /*::[*/\n  0x00e9\n  /*::]*/\n  : {\n    /* n:\"BkHim\", */\n  },\n\n  /*::[*/\n  0x00eb\n  /*::]*/\n  : {\n    /* n:\"MsoDrawingGroup\", */\n  },\n\n  /*::[*/\n  0x00ec\n  /*::]*/\n  : {\n    /* n:\"MsoDrawing\", */\n  },\n\n  /*::[*/\n  0x00ed\n  /*::]*/\n  : {\n    /* n:\"MsoDrawingSelection\", */\n  },\n\n  /*::[*/\n  0x00ef\n  /*::]*/\n  : {\n    /* n:\"PhoneticInfo\", */\n  },\n\n  /*::[*/\n  0x00f0\n  /*::]*/\n  : {\n    /* n:\"SxRule\", */\n  },\n\n  /*::[*/\n  0x00f1\n  /*::]*/\n  : {\n    /* n:\"SXEx\", */\n  },\n\n  /*::[*/\n  0x00f2\n  /*::]*/\n  : {\n    /* n:\"SxFilt\", */\n  },\n\n  /*::[*/\n  0x00f4\n  /*::]*/\n  : {\n    /* n:\"SxDXF\", */\n  },\n\n  /*::[*/\n  0x00f5\n  /*::]*/\n  : {\n    /* n:\"SxItm\", */\n  },\n\n  /*::[*/\n  0x00f6\n  /*::]*/\n  : {\n    /* n:\"SxName\", */\n  },\n\n  /*::[*/\n  0x00f7\n  /*::]*/\n  : {\n    /* n:\"SxSelect\", */\n  },\n\n  /*::[*/\n  0x00f8\n  /*::]*/\n  : {\n    /* n:\"SXPair\", */\n  },\n\n  /*::[*/\n  0x00f9\n  /*::]*/\n  : {\n    /* n:\"SxFmla\", */\n  },\n\n  /*::[*/\n  0x00fb\n  /*::]*/\n  : {\n    /* n:\"SxFormat\", */\n  },\n\n  /*::[*/\n  0x00fc\n  /*::]*/\n  : {\n    /* n:\"SST\", */\n    f: parse_SST\n  },\n\n  /*::[*/\n  0x00fd\n  /*::]*/\n  : {\n    /* n:\"LabelSst\", */\n    f: parse_LabelSst\n  },\n\n  /*::[*/\n  0x00ff\n  /*::]*/\n  : {\n    /* n:\"ExtSST\", */\n    f: parse_ExtSST\n  },\n\n  /*::[*/\n  0x0100\n  /*::]*/\n  : {\n    /* n:\"SXVDEx\", */\n  },\n\n  /*::[*/\n  0x0103\n  /*::]*/\n  : {\n    /* n:\"SXFormula\", */\n  },\n\n  /*::[*/\n  0x0122\n  /*::]*/\n  : {\n    /* n:\"SXDBEx\", */\n  },\n\n  /*::[*/\n  0x0137\n  /*::]*/\n  : {\n    /* n:\"RRDInsDel\", */\n  },\n\n  /*::[*/\n  0x0138\n  /*::]*/\n  : {\n    /* n:\"RRDHead\", */\n  },\n\n  /*::[*/\n  0x013b\n  /*::]*/\n  : {\n    /* n:\"RRDChgCell\", */\n  },\n\n  /*::[*/\n  0x013d\n  /*::]*/\n  : {\n    /* n:\"RRTabId\", */\n    f: parseuint16a\n  },\n\n  /*::[*/\n  0x013e\n  /*::]*/\n  : {\n    /* n:\"RRDRenSheet\", */\n  },\n\n  /*::[*/\n  0x013f\n  /*::]*/\n  : {\n    /* n:\"RRSort\", */\n  },\n\n  /*::[*/\n  0x0140\n  /*::]*/\n  : {\n    /* n:\"RRDMove\", */\n  },\n\n  /*::[*/\n  0x014a\n  /*::]*/\n  : {\n    /* n:\"RRFormat\", */\n  },\n\n  /*::[*/\n  0x014b\n  /*::]*/\n  : {\n    /* n:\"RRAutoFmt\", */\n  },\n\n  /*::[*/\n  0x014d\n  /*::]*/\n  : {\n    /* n:\"RRInsertSh\", */\n  },\n\n  /*::[*/\n  0x014e\n  /*::]*/\n  : {\n    /* n:\"RRDMoveBegin\", */\n  },\n\n  /*::[*/\n  0x014f\n  /*::]*/\n  : {\n    /* n:\"RRDMoveEnd\", */\n  },\n\n  /*::[*/\n  0x0150\n  /*::]*/\n  : {\n    /* n:\"RRDInsDelBegin\", */\n  },\n\n  /*::[*/\n  0x0151\n  /*::]*/\n  : {\n    /* n:\"RRDInsDelEnd\", */\n  },\n\n  /*::[*/\n  0x0152\n  /*::]*/\n  : {\n    /* n:\"RRDConflict\", */\n  },\n\n  /*::[*/\n  0x0153\n  /*::]*/\n  : {\n    /* n:\"RRDDefName\", */\n  },\n\n  /*::[*/\n  0x0154\n  /*::]*/\n  : {\n    /* n:\"RRDRstEtxp\", */\n  },\n\n  /*::[*/\n  0x015f\n  /*::]*/\n  : {\n    /* n:\"LRng\", */\n  },\n\n  /*::[*/\n  0x0160\n  /*::]*/\n  : {\n    /* n:\"UsesELFs\", */\n    f: parsebool\n  },\n\n  /*::[*/\n  0x0161\n  /*::]*/\n  : {\n    /* n:\"DSF\", */\n    f: parsenoop2\n  },\n\n  /*::[*/\n  0x0191\n  /*::]*/\n  : {\n    /* n:\"CUsr\", */\n  },\n\n  /*::[*/\n  0x0192\n  /*::]*/\n  : {\n    /* n:\"CbUsr\", */\n  },\n\n  /*::[*/\n  0x0193\n  /*::]*/\n  : {\n    /* n:\"UsrInfo\", */\n  },\n\n  /*::[*/\n  0x0194\n  /*::]*/\n  : {\n    /* n:\"UsrExcl\", */\n  },\n\n  /*::[*/\n  0x0195\n  /*::]*/\n  : {\n    /* n:\"FileLock\", */\n  },\n\n  /*::[*/\n  0x0196\n  /*::]*/\n  : {\n    /* n:\"RRDInfo\", */\n  },\n\n  /*::[*/\n  0x0197\n  /*::]*/\n  : {\n    /* n:\"BCUsrs\", */\n  },\n\n  /*::[*/\n  0x0198\n  /*::]*/\n  : {\n    /* n:\"UsrChk\", */\n  },\n\n  /*::[*/\n  0x01a9\n  /*::]*/\n  : {\n    /* n:\"UserBView\", */\n  },\n\n  /*::[*/\n  0x01aa\n  /*::]*/\n  : {\n    /* n:\"UserSViewBegin\", */\n  },\n\n  /*::[*/\n  0x01ab\n  /*::]*/\n  : {\n    /* n:\"UserSViewEnd\", */\n  },\n\n  /*::[*/\n  0x01ac\n  /*::]*/\n  : {\n    /* n:\"RRDUserView\", */\n  },\n\n  /*::[*/\n  0x01ad\n  /*::]*/\n  : {\n    /* n:\"Qsi\", */\n  },\n\n  /*::[*/\n  0x01ae\n  /*::]*/\n  : {\n    /* n:\"SupBook\", */\n    f: parse_SupBook\n  },\n\n  /*::[*/\n  0x01af\n  /*::]*/\n  : {\n    /* n:\"Prot4Rev\", */\n    f: parsebool\n  },\n\n  /*::[*/\n  0x01b0\n  /*::]*/\n  : {\n    /* n:\"CondFmt\", */\n  },\n\n  /*::[*/\n  0x01b1\n  /*::]*/\n  : {\n    /* n:\"CF\", */\n  },\n\n  /*::[*/\n  0x01b2\n  /*::]*/\n  : {\n    /* n:\"DVal\", */\n  },\n\n  /*::[*/\n  0x01b5\n  /*::]*/\n  : {\n    /* n:\"DConBin\", */\n  },\n\n  /*::[*/\n  0x01b6\n  /*::]*/\n  : {\n    /* n:\"TxO\", */\n    f: parse_TxO\n  },\n\n  /*::[*/\n  0x01b7\n  /*::]*/\n  : {\n    /* n:\"RefreshAll\", */\n    f: parsebool\n  },\n  //\n\n  /*::[*/\n  0x01b8\n  /*::]*/\n  : {\n    /* n:\"HLink\", */\n    f: parse_HLink\n  },\n\n  /*::[*/\n  0x01b9\n  /*::]*/\n  : {\n    /* n:\"Lel\", */\n  },\n\n  /*::[*/\n  0x01ba\n  /*::]*/\n  : {\n    /* n:\"CodeName\", */\n    f: parse_XLUnicodeString\n  },\n\n  /*::[*/\n  0x01bb\n  /*::]*/\n  : {\n    /* n:\"SXFDBType\", */\n  },\n\n  /*::[*/\n  0x01bc\n  /*::]*/\n  : {\n    /* n:\"Prot4RevPass\", */\n    f: parseuint16\n  },\n\n  /*::[*/\n  0x01bd\n  /*::]*/\n  : {\n    /* n:\"ObNoMacros\", */\n  },\n\n  /*::[*/\n  0x01be\n  /*::]*/\n  : {\n    /* n:\"Dv\", */\n  },\n\n  /*::[*/\n  0x01c0\n  /*::]*/\n  : {\n    /* n:\"Excel9File\", */\n    f: parsenoop2\n  },\n\n  /*::[*/\n  0x01c1\n  /*::]*/\n  : {\n    /* n:\"RecalcId\", */\n    f: parse_RecalcId,\n    r: 2\n  },\n\n  /*::[*/\n  0x01c2\n  /*::]*/\n  : {\n    /* n:\"EntExU2\", */\n    f: parsenoop2\n  },\n\n  /*::[*/\n  0x0200\n  /*::]*/\n  : {\n    /* n:\"Dimensions\", */\n    f: parse_Dimensions\n  },\n\n  /*::[*/\n  0x0201\n  /*::]*/\n  : {\n    /* n:\"Blank\", */\n    f: parse_Blank\n  },\n\n  /*::[*/\n  0x0203\n  /*::]*/\n  : {\n    /* n:\"Number\", */\n    f: parse_Number\n  },\n\n  /*::[*/\n  0x0204\n  /*::]*/\n  : {\n    /* n:\"Label\", */\n    f: parse_Label\n  },\n\n  /*::[*/\n  0x0205\n  /*::]*/\n  : {\n    /* n:\"BoolErr\", */\n    f: parse_BoolErr\n  },\n\n  /*::[*/\n  0x0207\n  /*::]*/\n  : {\n    /* n:\"String\", */\n    f: parse_String\n  },\n\n  /*::[*/\n  0x0208\n  /*::]*/\n  : {\n    /* n:\"Row\", */\n    f: parse_Row\n  },\n\n  /*::[*/\n  0x020b\n  /*::]*/\n  : {\n    /* n:\"Index\", */\n  },\n\n  /*::[*/\n  0x0221\n  /*::]*/\n  : {\n    /* n:\"Array\", */\n    f: parse_Array\n  },\n\n  /*::[*/\n  0x0225\n  /*::]*/\n  : {\n    /* n:\"DefaultRowHeight\", */\n    f: parse_DefaultRowHeight\n  },\n\n  /*::[*/\n  0x0236\n  /*::]*/\n  : {\n    /* n:\"Table\", */\n  },\n\n  /*::[*/\n  0x023e\n  /*::]*/\n  : {\n    /* n:\"Window2\", */\n    f: parse_Window2\n  },\n\n  /*::[*/\n  0x027e\n  /*::]*/\n  : {\n    /* n:\"RK\", */\n    f: parse_RK\n  },\n\n  /*::[*/\n  0x0293\n  /*::]*/\n  : {\n    /* n:\"Style\", */\n  },\n\n  /*::[*/\n  0x0418\n  /*::]*/\n  : {\n    /* n:\"BigName\", */\n  },\n\n  /*::[*/\n  0x041e\n  /*::]*/\n  : {\n    /* n:\"Format\", */\n    f: parse_Format\n  },\n\n  /*::[*/\n  0x043c\n  /*::]*/\n  : {\n    /* n:\"ContinueBigName\", */\n  },\n\n  /*::[*/\n  0x04bc\n  /*::]*/\n  : {\n    /* n:\"ShrFmla\", */\n    f: parse_ShrFmla\n  },\n\n  /*::[*/\n  0x0800\n  /*::]*/\n  : {\n    /* n:\"HLinkTooltip\", */\n    f: parse_HLinkTooltip\n  },\n\n  /*::[*/\n  0x0801\n  /*::]*/\n  : {\n    /* n:\"WebPub\", */\n  },\n\n  /*::[*/\n  0x0802\n  /*::]*/\n  : {\n    /* n:\"QsiSXTag\", */\n  },\n\n  /*::[*/\n  0x0803\n  /*::]*/\n  : {\n    /* n:\"DBQueryExt\", */\n  },\n\n  /*::[*/\n  0x0804\n  /*::]*/\n  : {\n    /* n:\"ExtString\", */\n  },\n\n  /*::[*/\n  0x0805\n  /*::]*/\n  : {\n    /* n:\"TxtQry\", */\n  },\n\n  /*::[*/\n  0x0806\n  /*::]*/\n  : {\n    /* n:\"Qsir\", */\n  },\n\n  /*::[*/\n  0x0807\n  /*::]*/\n  : {\n    /* n:\"Qsif\", */\n  },\n\n  /*::[*/\n  0x0808\n  /*::]*/\n  : {\n    /* n:\"RRDTQSIF\", */\n  },\n\n  /*::[*/\n  0x0809\n  /*::]*/\n  : {\n    /* n:\"BOF\", */\n    f: parse_BOF\n  },\n\n  /*::[*/\n  0x080a\n  /*::]*/\n  : {\n    /* n:\"OleDbConn\", */\n  },\n\n  /*::[*/\n  0x080b\n  /*::]*/\n  : {\n    /* n:\"WOpt\", */\n  },\n\n  /*::[*/\n  0x080c\n  /*::]*/\n  : {\n    /* n:\"SXViewEx\", */\n  },\n\n  /*::[*/\n  0x080d\n  /*::]*/\n  : {\n    /* n:\"SXTH\", */\n  },\n\n  /*::[*/\n  0x080e\n  /*::]*/\n  : {\n    /* n:\"SXPIEx\", */\n  },\n\n  /*::[*/\n  0x080f\n  /*::]*/\n  : {\n    /* n:\"SXVDTEx\", */\n  },\n\n  /*::[*/\n  0x0810\n  /*::]*/\n  : {\n    /* n:\"SXViewEx9\", */\n  },\n\n  /*::[*/\n  0x0812\n  /*::]*/\n  : {\n    /* n:\"ContinueFrt\", */\n  },\n\n  /*::[*/\n  0x0813\n  /*::]*/\n  : {\n    /* n:\"RealTimeData\", */\n  },\n\n  /*::[*/\n  0x0850\n  /*::]*/\n  : {\n    /* n:\"ChartFrtInfo\", */\n  },\n\n  /*::[*/\n  0x0851\n  /*::]*/\n  : {\n    /* n:\"FrtWrapper\", */\n  },\n\n  /*::[*/\n  0x0852\n  /*::]*/\n  : {\n    /* n:\"StartBlock\", */\n  },\n\n  /*::[*/\n  0x0853\n  /*::]*/\n  : {\n    /* n:\"EndBlock\", */\n  },\n\n  /*::[*/\n  0x0854\n  /*::]*/\n  : {\n    /* n:\"StartObject\", */\n  },\n\n  /*::[*/\n  0x0855\n  /*::]*/\n  : {\n    /* n:\"EndObject\", */\n  },\n\n  /*::[*/\n  0x0856\n  /*::]*/\n  : {\n    /* n:\"CatLab\", */\n  },\n\n  /*::[*/\n  0x0857\n  /*::]*/\n  : {\n    /* n:\"YMult\", */\n  },\n\n  /*::[*/\n  0x0858\n  /*::]*/\n  : {\n    /* n:\"SXViewLink\", */\n  },\n\n  /*::[*/\n  0x0859\n  /*::]*/\n  : {\n    /* n:\"PivotChartBits\", */\n  },\n\n  /*::[*/\n  0x085a\n  /*::]*/\n  : {\n    /* n:\"FrtFontList\", */\n  },\n\n  /*::[*/\n  0x0862\n  /*::]*/\n  : {\n    /* n:\"SheetExt\", */\n  },\n\n  /*::[*/\n  0x0863\n  /*::]*/\n  : {\n    /* n:\"BookExt\", */\n    r: 12\n  },\n\n  /*::[*/\n  0x0864\n  /*::]*/\n  : {\n    /* n:\"SXAddl\", */\n  },\n\n  /*::[*/\n  0x0865\n  /*::]*/\n  : {\n    /* n:\"CrErr\", */\n  },\n\n  /*::[*/\n  0x0866\n  /*::]*/\n  : {\n    /* n:\"HFPicture\", */\n  },\n\n  /*::[*/\n  0x0867\n  /*::]*/\n  : {\n    /* n:\"FeatHdr\", */\n    f: parsenoop2\n  },\n\n  /*::[*/\n  0x0868\n  /*::]*/\n  : {\n    /* n:\"Feat\", */\n  },\n\n  /*::[*/\n  0x086a\n  /*::]*/\n  : {\n    /* n:\"DataLabExt\", */\n  },\n\n  /*::[*/\n  0x086b\n  /*::]*/\n  : {\n    /* n:\"DataLabExtContents\", */\n  },\n\n  /*::[*/\n  0x086c\n  /*::]*/\n  : {\n    /* n:\"CellWatch\", */\n  },\n\n  /*::[*/\n  0x0871\n  /*::]*/\n  : {\n    /* n:\"FeatHdr11\", */\n  },\n\n  /*::[*/\n  0x0872\n  /*::]*/\n  : {\n    /* n:\"Feature11\", */\n  },\n\n  /*::[*/\n  0x0874\n  /*::]*/\n  : {\n    /* n:\"DropDownObjIds\", */\n  },\n\n  /*::[*/\n  0x0875\n  /*::]*/\n  : {\n    /* n:\"ContinueFrt11\", */\n  },\n\n  /*::[*/\n  0x0876\n  /*::]*/\n  : {\n    /* n:\"DConn\", */\n  },\n\n  /*::[*/\n  0x0877\n  /*::]*/\n  : {\n    /* n:\"List12\", */\n  },\n\n  /*::[*/\n  0x0878\n  /*::]*/\n  : {\n    /* n:\"Feature12\", */\n  },\n\n  /*::[*/\n  0x0879\n  /*::]*/\n  : {\n    /* n:\"CondFmt12\", */\n  },\n\n  /*::[*/\n  0x087a\n  /*::]*/\n  : {\n    /* n:\"CF12\", */\n  },\n\n  /*::[*/\n  0x087b\n  /*::]*/\n  : {\n    /* n:\"CFEx\", */\n  },\n\n  /*::[*/\n  0x087c\n  /*::]*/\n  : {\n    /* n:\"XFCRC\", */\n    f: parse_XFCRC,\n    r: 12\n  },\n\n  /*::[*/\n  0x087d\n  /*::]*/\n  : {\n    /* n:\"XFExt\", */\n    f: parse_XFExt,\n    r: 12\n  },\n\n  /*::[*/\n  0x087e\n  /*::]*/\n  : {\n    /* n:\"AutoFilter12\", */\n  },\n\n  /*::[*/\n  0x087f\n  /*::]*/\n  : {\n    /* n:\"ContinueFrt12\", */\n  },\n\n  /*::[*/\n  0x0884\n  /*::]*/\n  : {\n    /* n:\"MDTInfo\", */\n  },\n\n  /*::[*/\n  0x0885\n  /*::]*/\n  : {\n    /* n:\"MDXStr\", */\n  },\n\n  /*::[*/\n  0x0886\n  /*::]*/\n  : {\n    /* n:\"MDXTuple\", */\n  },\n\n  /*::[*/\n  0x0887\n  /*::]*/\n  : {\n    /* n:\"MDXSet\", */\n  },\n\n  /*::[*/\n  0x0888\n  /*::]*/\n  : {\n    /* n:\"MDXProp\", */\n  },\n\n  /*::[*/\n  0x0889\n  /*::]*/\n  : {\n    /* n:\"MDXKPI\", */\n  },\n\n  /*::[*/\n  0x088a\n  /*::]*/\n  : {\n    /* n:\"MDB\", */\n  },\n\n  /*::[*/\n  0x088b\n  /*::]*/\n  : {\n    /* n:\"PLV\", */\n  },\n\n  /*::[*/\n  0x088c\n  /*::]*/\n  : {\n    /* n:\"Compat12\", */\n    f: parsebool,\n    r: 12\n  },\n\n  /*::[*/\n  0x088d\n  /*::]*/\n  : {\n    /* n:\"DXF\", */\n  },\n\n  /*::[*/\n  0x088e\n  /*::]*/\n  : {\n    /* n:\"TableStyles\", */\n    r: 12\n  },\n\n  /*::[*/\n  0x088f\n  /*::]*/\n  : {\n    /* n:\"TableStyle\", */\n  },\n\n  /*::[*/\n  0x0890\n  /*::]*/\n  : {\n    /* n:\"TableStyleElement\", */\n  },\n\n  /*::[*/\n  0x0892\n  /*::]*/\n  : {\n    /* n:\"StyleExt\", */\n  },\n\n  /*::[*/\n  0x0893\n  /*::]*/\n  : {\n    /* n:\"NamePublish\", */\n  },\n\n  /*::[*/\n  0x0894\n  /*::]*/\n  : {\n    /* n:\"NameCmt\", */\n    f: parse_NameCmt,\n    r: 12\n  },\n\n  /*::[*/\n  0x0895\n  /*::]*/\n  : {\n    /* n:\"SortData\", */\n  },\n\n  /*::[*/\n  0x0896\n  /*::]*/\n  : {\n    /* n:\"Theme\", */\n    f: parse_Theme,\n    r: 12\n  },\n\n  /*::[*/\n  0x0897\n  /*::]*/\n  : {\n    /* n:\"GUIDTypeLib\", */\n  },\n\n  /*::[*/\n  0x0898\n  /*::]*/\n  : {\n    /* n:\"FnGrp12\", */\n  },\n\n  /*::[*/\n  0x0899\n  /*::]*/\n  : {\n    /* n:\"NameFnGrp12\", */\n  },\n\n  /*::[*/\n  0x089a\n  /*::]*/\n  : {\n    /* n:\"MTRSettings\", */\n    f: parse_MTRSettings,\n    r: 12\n  },\n\n  /*::[*/\n  0x089b\n  /*::]*/\n  : {\n    /* n:\"CompressPictures\", */\n    f: parsenoop2\n  },\n\n  /*::[*/\n  0x089c\n  /*::]*/\n  : {\n    /* n:\"HeaderFooter\", */\n  },\n\n  /*::[*/\n  0x089d\n  /*::]*/\n  : {\n    /* n:\"CrtLayout12\", */\n  },\n\n  /*::[*/\n  0x089e\n  /*::]*/\n  : {\n    /* n:\"CrtMlFrt\", */\n  },\n\n  /*::[*/\n  0x089f\n  /*::]*/\n  : {\n    /* n:\"CrtMlFrtContinue\", */\n  },\n\n  /*::[*/\n  0x08a3\n  /*::]*/\n  : {\n    /* n:\"ForceFullCalculation\", */\n    f: parse_ForceFullCalculation\n  },\n\n  /*::[*/\n  0x08a4\n  /*::]*/\n  : {\n    /* n:\"ShapePropsStream\", */\n  },\n\n  /*::[*/\n  0x08a5\n  /*::]*/\n  : {\n    /* n:\"TextPropsStream\", */\n  },\n\n  /*::[*/\n  0x08a6\n  /*::]*/\n  : {\n    /* n:\"RichTextStream\", */\n  },\n\n  /*::[*/\n  0x08a7\n  /*::]*/\n  : {\n    /* n:\"CrtLayout12A\", */\n  },\n\n  /*::[*/\n  0x1001\n  /*::]*/\n  : {\n    /* n:\"Units\", */\n  },\n\n  /*::[*/\n  0x1002\n  /*::]*/\n  : {\n    /* n:\"Chart\", */\n  },\n\n  /*::[*/\n  0x1003\n  /*::]*/\n  : {\n    /* n:\"Series\", */\n  },\n\n  /*::[*/\n  0x1006\n  /*::]*/\n  : {\n    /* n:\"DataFormat\", */\n  },\n\n  /*::[*/\n  0x1007\n  /*::]*/\n  : {\n    /* n:\"LineFormat\", */\n  },\n\n  /*::[*/\n  0x1009\n  /*::]*/\n  : {\n    /* n:\"MarkerFormat\", */\n  },\n\n  /*::[*/\n  0x100a\n  /*::]*/\n  : {\n    /* n:\"AreaFormat\", */\n  },\n\n  /*::[*/\n  0x100b\n  /*::]*/\n  : {\n    /* n:\"PieFormat\", */\n  },\n\n  /*::[*/\n  0x100c\n  /*::]*/\n  : {\n    /* n:\"AttachedLabel\", */\n  },\n\n  /*::[*/\n  0x100d\n  /*::]*/\n  : {\n    /* n:\"SeriesText\", */\n  },\n\n  /*::[*/\n  0x1014\n  /*::]*/\n  : {\n    /* n:\"ChartFormat\", */\n  },\n\n  /*::[*/\n  0x1015\n  /*::]*/\n  : {\n    /* n:\"Legend\", */\n  },\n\n  /*::[*/\n  0x1016\n  /*::]*/\n  : {\n    /* n:\"SeriesList\", */\n  },\n\n  /*::[*/\n  0x1017\n  /*::]*/\n  : {\n    /* n:\"Bar\", */\n  },\n\n  /*::[*/\n  0x1018\n  /*::]*/\n  : {\n    /* n:\"Line\", */\n  },\n\n  /*::[*/\n  0x1019\n  /*::]*/\n  : {\n    /* n:\"Pie\", */\n  },\n\n  /*::[*/\n  0x101a\n  /*::]*/\n  : {\n    /* n:\"Area\", */\n  },\n\n  /*::[*/\n  0x101b\n  /*::]*/\n  : {\n    /* n:\"Scatter\", */\n  },\n\n  /*::[*/\n  0x101c\n  /*::]*/\n  : {\n    /* n:\"CrtLine\", */\n  },\n\n  /*::[*/\n  0x101d\n  /*::]*/\n  : {\n    /* n:\"Axis\", */\n  },\n\n  /*::[*/\n  0x101e\n  /*::]*/\n  : {\n    /* n:\"Tick\", */\n  },\n\n  /*::[*/\n  0x101f\n  /*::]*/\n  : {\n    /* n:\"ValueRange\", */\n  },\n\n  /*::[*/\n  0x1020\n  /*::]*/\n  : {\n    /* n:\"CatSerRange\", */\n  },\n\n  /*::[*/\n  0x1021\n  /*::]*/\n  : {\n    /* n:\"AxisLine\", */\n  },\n\n  /*::[*/\n  0x1022\n  /*::]*/\n  : {\n    /* n:\"CrtLink\", */\n  },\n\n  /*::[*/\n  0x1024\n  /*::]*/\n  : {\n    /* n:\"DefaultText\", */\n  },\n\n  /*::[*/\n  0x1025\n  /*::]*/\n  : {\n    /* n:\"Text\", */\n  },\n\n  /*::[*/\n  0x1026\n  /*::]*/\n  : {\n    /* n:\"FontX\", */\n    f: parseuint16\n  },\n\n  /*::[*/\n  0x1027\n  /*::]*/\n  : {\n    /* n:\"ObjectLink\", */\n  },\n\n  /*::[*/\n  0x1032\n  /*::]*/\n  : {\n    /* n:\"Frame\", */\n  },\n\n  /*::[*/\n  0x1033\n  /*::]*/\n  : {\n    /* n:\"Begin\", */\n  },\n\n  /*::[*/\n  0x1034\n  /*::]*/\n  : {\n    /* n:\"End\", */\n  },\n\n  /*::[*/\n  0x1035\n  /*::]*/\n  : {\n    /* n:\"PlotArea\", */\n  },\n\n  /*::[*/\n  0x103a\n  /*::]*/\n  : {\n    /* n:\"Chart3d\", */\n  },\n\n  /*::[*/\n  0x103c\n  /*::]*/\n  : {\n    /* n:\"PicF\", */\n  },\n\n  /*::[*/\n  0x103d\n  /*::]*/\n  : {\n    /* n:\"DropBar\", */\n  },\n\n  /*::[*/\n  0x103e\n  /*::]*/\n  : {\n    /* n:\"Radar\", */\n  },\n\n  /*::[*/\n  0x103f\n  /*::]*/\n  : {\n    /* n:\"Surf\", */\n  },\n\n  /*::[*/\n  0x1040\n  /*::]*/\n  : {\n    /* n:\"RadarArea\", */\n  },\n\n  /*::[*/\n  0x1041\n  /*::]*/\n  : {\n    /* n:\"AxisParent\", */\n  },\n\n  /*::[*/\n  0x1043\n  /*::]*/\n  : {\n    /* n:\"LegendException\", */\n  },\n\n  /*::[*/\n  0x1044\n  /*::]*/\n  : {\n    /* n:\"ShtProps\", */\n    f: parse_ShtProps\n  },\n\n  /*::[*/\n  0x1045\n  /*::]*/\n  : {\n    /* n:\"SerToCrt\", */\n  },\n\n  /*::[*/\n  0x1046\n  /*::]*/\n  : {\n    /* n:\"AxesUsed\", */\n  },\n\n  /*::[*/\n  0x1048\n  /*::]*/\n  : {\n    /* n:\"SBaseRef\", */\n  },\n\n  /*::[*/\n  0x104a\n  /*::]*/\n  : {\n    /* n:\"SerParent\", */\n  },\n\n  /*::[*/\n  0x104b\n  /*::]*/\n  : {\n    /* n:\"SerAuxTrend\", */\n  },\n\n  /*::[*/\n  0x104e\n  /*::]*/\n  : {\n    /* n:\"IFmtRecord\", */\n  },\n\n  /*::[*/\n  0x104f\n  /*::]*/\n  : {\n    /* n:\"Pos\", */\n  },\n\n  /*::[*/\n  0x1050\n  /*::]*/\n  : {\n    /* n:\"AlRuns\", */\n  },\n\n  /*::[*/\n  0x1051\n  /*::]*/\n  : {\n    /* n:\"BRAI\", */\n  },\n\n  /*::[*/\n  0x105b\n  /*::]*/\n  : {\n    /* n:\"SerAuxErrBar\", */\n  },\n\n  /*::[*/\n  0x105c\n  /*::]*/\n  : {\n    /* n:\"ClrtClient\", */\n    f: parse_ClrtClient\n  },\n\n  /*::[*/\n  0x105d\n  /*::]*/\n  : {\n    /* n:\"SerFmt\", */\n  },\n\n  /*::[*/\n  0x105f\n  /*::]*/\n  : {\n    /* n:\"Chart3DBarShape\", */\n  },\n\n  /*::[*/\n  0x1060\n  /*::]*/\n  : {\n    /* n:\"Fbi\", */\n  },\n\n  /*::[*/\n  0x1061\n  /*::]*/\n  : {\n    /* n:\"BopPop\", */\n  },\n\n  /*::[*/\n  0x1062\n  /*::]*/\n  : {\n    /* n:\"AxcExt\", */\n  },\n\n  /*::[*/\n  0x1063\n  /*::]*/\n  : {\n    /* n:\"Dat\", */\n  },\n\n  /*::[*/\n  0x1064\n  /*::]*/\n  : {\n    /* n:\"PlotGrowth\", */\n  },\n\n  /*::[*/\n  0x1065\n  /*::]*/\n  : {\n    /* n:\"SIIndex\", */\n  },\n\n  /*::[*/\n  0x1066\n  /*::]*/\n  : {\n    /* n:\"GelFrame\", */\n  },\n\n  /*::[*/\n  0x1067\n  /*::]*/\n  : {\n    /* n:\"BopPopCustom\", */\n  },\n\n  /*::[*/\n  0x1068\n  /*::]*/\n  : {\n    /* n:\"Fbi2\", */\n  },\n\n  /*::[*/\n  0x0000\n  /*::]*/\n  : {\n    /* n:\"Dimensions\", */\n    f: parse_Dimensions\n  },\n\n  /*::[*/\n  0x0001\n  /*::]*/\n  : {\n    /* n:\"BIFF2BLANK\", */\n  },\n\n  /*::[*/\n  0x0002\n  /*::]*/\n  : {\n    /* n:\"BIFF2INT\", */\n    f: parse_BIFF2INT\n  },\n\n  /*::[*/\n  0x0003\n  /*::]*/\n  : {\n    /* n:\"BIFF2NUM\", */\n    f: parse_BIFF2NUM\n  },\n\n  /*::[*/\n  0x0004\n  /*::]*/\n  : {\n    /* n:\"BIFF2STR\", */\n    f: parse_BIFF2STR\n  },\n\n  /*::[*/\n  0x0005\n  /*::]*/\n  : {\n    /* n:\"BoolErr\", */\n    f: parse_BoolErr\n  },\n\n  /*::[*/\n  0x0007\n  /*::]*/\n  : {\n    /* n:\"String\", */\n    f: parse_BIFF2STRING\n  },\n\n  /*::[*/\n  0x0008\n  /*::]*/\n  : {\n    /* n:\"BIFF2ROW\", */\n  },\n\n  /*::[*/\n  0x0009\n  /*::]*/\n  : {\n    /* n:\"BOF\", */\n    f: parse_BOF\n  },\n\n  /*::[*/\n  0x000b\n  /*::]*/\n  : {\n    /* n:\"Index\", */\n  },\n\n  /*::[*/\n  0x0016\n  /*::]*/\n  : {\n    /* n:\"ExternCount\", */\n    f: parseuint16\n  },\n\n  /*::[*/\n  0x001e\n  /*::]*/\n  : {\n    /* n:\"BIFF2FORMAT\", */\n    f: parse_BIFF2Format\n  },\n\n  /*::[*/\n  0x001f\n  /*::]*/\n  : {\n    /* n:\"BIFF2FMTCNT\", */\n  },\n\n  /* 16-bit cnt of BIFF2FORMAT records */\n\n  /*::[*/\n  0x0020\n  /*::]*/\n  : {\n    /* n:\"BIFF2COLINFO\", */\n  },\n\n  /*::[*/\n  0x0021\n  /*::]*/\n  : {\n    /* n:\"Array\", */\n    f: parse_Array\n  },\n\n  /*::[*/\n  0x0024\n  /*::]*/\n  : {\n    /* n:\"COLWIDTH\", */\n  },\n\n  /*::[*/\n  0x0025\n  /*::]*/\n  : {\n    /* n:\"DefaultRowHeight\", */\n    f: parse_DefaultRowHeight\n  },\n  // 0x2c ??\n  // 0x2d ??\n  // 0x2e ??\n  // 0x30 FONTCOUNT: number of fonts\n\n  /*::[*/\n  0x0032\n  /*::]*/\n  : {\n    /* n:\"BIFF2FONTXTRA\", */\n    f: parse_BIFF2FONTXTRA\n  },\n  // 0x35: INFOOPTS\n  // 0x36: TABLE (BIFF2 only)\n  // 0x37: TABLE2 (BIFF2 only)\n  // 0x38: WNDESK\n  // 0x39 ??\n  // 0x3a: BEGINPREF\n  // 0x3b: ENDPREF\n\n  /*::[*/\n  0x003e\n  /*::]*/\n  : {\n    /* n:\"BIFF2WINDOW2\", */\n  },\n  // 0x3f ??\n  // 0x46: SHOWSCROLL\n  // 0x47: SHOWFORMULA\n  // 0x48: STATUSBAR\n  // 0x49: SHORTMENUS\n  // 0x4A:\n  // 0x4B:\n  // 0x4C:\n  // 0x4E:\n  // 0x4F:\n  // 0x58: TOOLBAR (BIFF3)\n\n  /* - - - */\n\n  /*::[*/\n  0x0034\n  /*::]*/\n  : {\n    /* n:\"DDEObjName\", */\n  },\n\n  /*::[*/\n  0x0043\n  /*::]*/\n  : {\n    /* n:\"BIFF2XF\", */\n  },\n\n  /*::[*/\n  0x0044\n  /*::]*/\n  : {\n    /* n:\"BIFF2XFINDEX\", */\n    f: parseuint16\n  },\n\n  /*::[*/\n  0x0045\n  /*::]*/\n  : {\n    /* n:\"BIFF2FONTCLR\", */\n  },\n\n  /*::[*/\n  0x0056\n  /*::]*/\n  : {\n    /* n:\"BIFF4FMTCNT\", */\n  },\n\n  /* 16-bit cnt, similar to BIFF2 */\n\n  /*::[*/\n  0x007e\n  /*::]*/\n  : {\n    /* n:\"RK\", */\n  },\n\n  /* Not necessarily same as 0x027e */\n\n  /*::[*/\n  0x007f\n  /*::]*/\n  : {\n    /* n:\"ImData\", */\n    f: parse_ImData\n  },\n\n  /*::[*/\n  0x0087\n  /*::]*/\n  : {\n    /* n:\"Addin\", */\n  },\n\n  /*::[*/\n  0x0088\n  /*::]*/\n  : {\n    /* n:\"Edg\", */\n  },\n\n  /*::[*/\n  0x0089\n  /*::]*/\n  : {\n    /* n:\"Pub\", */\n  },\n  // 0x8A\n  // 0x8B LH: alternate menu key flag (BIFF3/4)\n  // 0x8E\n  // 0x8F\n\n  /*::[*/\n  0x0091\n  /*::]*/\n  : {\n    /* n:\"Sub\", */\n  },\n  // 0x93 STYLE\n\n  /*::[*/\n  0x0094\n  /*::]*/\n  : {\n    /* n:\"LHRecord\", */\n  },\n\n  /*::[*/\n  0x0095\n  /*::]*/\n  : {\n    /* n:\"LHNGraph\", */\n  },\n\n  /*::[*/\n  0x0096\n  /*::]*/\n  : {\n    /* n:\"Sound\", */\n  },\n  // 0xA2 FNPROTO: function prototypes (BIFF4)\n  // 0xA3\n  // 0xA8\n\n  /*::[*/\n  0x00a9\n  /*::]*/\n  : {\n    /* n:\"CoordList\", */\n  },\n\n  /*::[*/\n  0x00ab\n  /*::]*/\n  : {\n    /* n:\"GCW\", */\n  },\n\n  /*::[*/\n  0x00bc\n  /*::]*/\n  : {\n    /* n:\"ShrFmla\", */\n  },\n\n  /* Not necessarily same as 0x04bc */\n\n  /*::[*/\n  0x00bf\n  /*::]*/\n  : {\n    /* n:\"ToolbarHdr\", */\n  },\n\n  /*::[*/\n  0x00c0\n  /*::]*/\n  : {\n    /* n:\"ToolbarEnd\", */\n  },\n\n  /*::[*/\n  0x00c2\n  /*::]*/\n  : {\n    /* n:\"AddMenu\", */\n  },\n\n  /*::[*/\n  0x00c3\n  /*::]*/\n  : {\n    /* n:\"DelMenu\", */\n  },\n\n  /*::[*/\n  0x00d6\n  /*::]*/\n  : {\n    /* n:\"RString\", */\n    f: parse_RString\n  },\n\n  /*::[*/\n  0x00df\n  /*::]*/\n  : {\n    /* n:\"UDDesc\", */\n  },\n\n  /*::[*/\n  0x00ea\n  /*::]*/\n  : {\n    /* n:\"TabIdConf\", */\n  },\n\n  /*::[*/\n  0x0162\n  /*::]*/\n  : {\n    /* n:\"XL5Modify\", */\n  },\n\n  /*::[*/\n  0x01a5\n  /*::]*/\n  : {\n    /* n:\"FileSharing2\", */\n  },\n\n  /*::[*/\n  0x0206\n  /*::]*/\n  : {\n    /* n:\"Formula\", */\n    f: parse_Formula\n  },\n\n  /*::[*/\n  0x0209\n  /*::]*/\n  : {\n    /* n:\"BOF\", */\n    f: parse_BOF\n  },\n\n  /*::[*/\n  0x0218\n  /*::]*/\n  : {\n    /* n:\"Lbl\", */\n    f: parse_Lbl\n  },\n\n  /*::[*/\n  0x0223\n  /*::]*/\n  : {\n    /* n:\"ExternName\", */\n    f: parse_ExternName\n  },\n\n  /*::[*/\n  0x0231\n  /*::]*/\n  : {\n    /* n:\"Font\", */\n  },\n\n  /*::[*/\n  0x0243\n  /*::]*/\n  : {\n    /* n:\"BIFF3XF\", */\n  },\n\n  /*::[*/\n  0x0406\n  /*::]*/\n  : {\n    /* n:\"Formula\", */\n    f: parse_Formula\n  },\n\n  /*::[*/\n  0x0409\n  /*::]*/\n  : {\n    /* n:\"BOF\", */\n    f: parse_BOF\n  },\n\n  /*::[*/\n  0x0443\n  /*::]*/\n  : {\n    /* n:\"BIFF4XF\", */\n  },\n\n  /*::[*/\n  0x086d\n  /*::]*/\n  : {\n    /* n:\"FeatInfo\", */\n  },\n\n  /*::[*/\n  0x0873\n  /*::]*/\n  : {\n    /* n:\"FeatInfo11\", */\n  },\n\n  /*::[*/\n  0x0881\n  /*::]*/\n  : {\n    /* n:\"SXAddl12\", */\n  },\n\n  /*::[*/\n  0x08c0\n  /*::]*/\n  : {\n    /* n:\"AutoWebPub\", */\n  },\n\n  /*::[*/\n  0x08c1\n  /*::]*/\n  : {\n    /* n:\"ListObj\", */\n  },\n\n  /*::[*/\n  0x08c2\n  /*::]*/\n  : {\n    /* n:\"ListField\", */\n  },\n\n  /*::[*/\n  0x08c3\n  /*::]*/\n  : {\n    /* n:\"ListDV\", */\n  },\n\n  /*::[*/\n  0x08c4\n  /*::]*/\n  : {\n    /* n:\"ListCondFmt\", */\n  },\n\n  /*::[*/\n  0x08c5\n  /*::]*/\n  : {\n    /* n:\"ListCF\", */\n  },\n\n  /*::[*/\n  0x08c6\n  /*::]*/\n  : {\n    /* n:\"FMQry\", */\n  },\n\n  /*::[*/\n  0x08c7\n  /*::]*/\n  : {\n    /* n:\"FMSQry\", */\n  },\n\n  /*::[*/\n  0x08c8\n  /*::]*/\n  : {\n    /* n:\"PLV\", */\n  },\n\n  /*::[*/\n  0x08c9\n  /*::]*/\n  : {\n    /* n:\"LnExt\", */\n  },\n\n  /*::[*/\n  0x08ca\n  /*::]*/\n  : {\n    /* n:\"MkrExt\", */\n  },\n\n  /*::[*/\n  0x08cb\n  /*::]*/\n  : {\n    /* n:\"CrtCoopt\", */\n  },\n\n  /*::[*/\n  0x08d6\n  /*::]*/\n  : {\n    /* n:\"FRTArchId$\", */\n    r: 12\n  },\n\n  /*::[*/\n  0x7262\n  /*::]*/\n  : {}\n};\n\nfunction write_biff_rec(ba\n/*:BufArray*/\n, type\n/*:number*/\n, payload, length\n/*:?number*/\n)\n/*:void*/\n{\n  var t\n  /*:number*/\n  = type;\n  if (isNaN(t)) return;\n  var len = length || (payload || []).length || 0;\n  var o = ba.next(4);\n  o.write_shift(2, t);\n  o.write_shift(2, len);\n  if (\n  /*:: len != null &&*/\n  len > 0 && is_buf(payload)) ba.push(payload);\n}\n\nfunction write_biff_continue(ba\n/*:BufArray*/\n, type\n/*:number*/\n, payload, length\n/*:?number*/\n)\n/*:void*/\n{\n  var len = length || (payload || []).length || 0;\n  if (len <= 8224) return write_biff_rec(ba, type, payload, len);\n  var t = type;\n  if (isNaN(t)) return;\n  var parts = payload.parts || [],\n      sidx = 0;\n  var i = 0,\n      w = 0;\n\n  while (w + (parts[sidx] || 8224) <= 8224) {\n    w += parts[sidx] || 8224;\n    sidx++;\n  }\n\n  var o = ba.next(4);\n  o.write_shift(2, t);\n  o.write_shift(2, w);\n  ba.push(payload.slice(i, i + w));\n  i += w;\n\n  while (i < len) {\n    o = ba.next(4);\n    o.write_shift(2, 0x3c); // TODO: figure out correct continue type\n\n    w = 0;\n\n    while (w + (parts[sidx] || 8224) <= 8224) {\n      w += parts[sidx] || 8224;\n      sidx++;\n    }\n\n    o.write_shift(2, w);\n    ba.push(payload.slice(i, i + w));\n    i += w;\n  }\n}\n\nfunction write_BIFF2Cell(out, r\n/*:number*/\n, c\n/*:number*/\n) {\n  if (!out) out = new_buf(7);\n  out.write_shift(2, r);\n  out.write_shift(2, c);\n  out.write_shift(2, 0);\n  out.write_shift(1, 0);\n  return out;\n}\n\nfunction write_BIFF2BERR(r\n/*:number*/\n, c\n/*:number*/\n, val, t\n/*:?string*/\n) {\n  var out = new_buf(9);\n  write_BIFF2Cell(out, r, c);\n  write_Bes(val, t || 'b', out);\n  return out;\n}\n/* TODO: codepage, large strings */\n\n\nfunction write_BIFF2LABEL(r\n/*:number*/\n, c\n/*:number*/\n, val) {\n  var out = new_buf(8 + 2 * val.length);\n  write_BIFF2Cell(out, r, c);\n  out.write_shift(1, val.length);\n  out.write_shift(val.length, val, 'sbcs');\n  return out.l < out.length ? out.slice(0, out.l) : out;\n}\n\nfunction write_ws_biff2_cell(ba\n/*:BufArray*/\n, cell\n/*:Cell*/\n, R\n/*:number*/\n, C\n/*:number*/\n\n/*::, opts*/\n) {\n  if (cell.v != null) switch (cell.t) {\n    case 'd':\n    case 'n':\n      var v = cell.t == 'd' ? datenum(parseDate(cell.v)) : cell.v;\n      if (v == (v | 0) && v >= 0 && v < 65536) write_biff_rec(ba, 0x0002, write_BIFF2INT(R, C, v));else write_biff_rec(ba, 0x0003, write_BIFF2NUM(R, C, v));\n      return;\n\n    case 'b':\n    case 'e':\n      write_biff_rec(ba, 0x0005, write_BIFF2BERR(R, C, cell.v, cell.t));\n      return;\n\n    /* TODO: codepage, sst */\n\n    case 's':\n    case 'str':\n      write_biff_rec(ba, 0x0004, write_BIFF2LABEL(R, C, (cell.v || \"\").slice(0, 255)));\n      return;\n  }\n  write_biff_rec(ba, 0x0001, write_BIFF2Cell(null, R, C));\n}\n\nfunction write_ws_biff2(ba\n/*:BufArray*/\n, ws\n/*:Worksheet*/\n, idx\n/*:number*/\n, opts\n/*::, wb:Workbook*/\n) {\n  var dense = Array.isArray(ws);\n  var range = safe_decode_range(ws['!ref'] || \"A1\"),\n      ref\n  /*:string*/\n  ,\n      rr = \"\",\n      cols\n  /*:Array<string>*/\n  = [];\n\n  if (range.e.c > 0xFF || range.e.r > 0x3FFF) {\n    if (opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n    range.e.c = Math.min(range.e.c, 0xFF);\n    range.e.r = Math.min(range.e.c, 0x3FFF);\n    ref = encode_range(range);\n  }\n\n  for (var R = range.s.r; R <= range.e.r; ++R) {\n    rr = encode_row(R);\n\n    for (var C = range.s.c; C <= range.e.c; ++C) {\n      if (R === range.s.r) cols[C] = encode_col(C);\n      ref = cols[C] + rr;\n      var cell = dense ? (ws[R] || [])[C] : ws[ref];\n      if (!cell) continue;\n      /* write cell */\n\n      write_ws_biff2_cell(ba, cell, R, C, opts);\n    }\n  }\n}\n/* Based on test files */\n\n\nfunction write_biff2_buf(wb\n/*:Workbook*/\n, opts\n/*:WriteOpts*/\n) {\n  var o = opts || {};\n  if (DENSE != null && o.dense == null) o.dense = DENSE;\n  var ba = buf_array();\n  var idx = 0;\n\n  for (var i = 0; i < wb.SheetNames.length; ++i) {\n    if (wb.SheetNames[i] == o.sheet) idx = i;\n  }\n\n  if (idx == 0 && !!o.sheet && wb.SheetNames[0] != o.sheet) throw new Error(\"Sheet not found: \" + o.sheet);\n  write_biff_rec(ba, o.biff == 4 ? 0x0409 : o.biff == 3 ? 0x0209 : 0x0009, write_BOF(wb, 0x10, o));\n  /* ... */\n\n  write_ws_biff2(ba, wb.Sheets[wb.SheetNames[idx]], idx, o, wb);\n  /* ... */\n\n  write_biff_rec(ba, 0x000A);\n  return ba.end();\n}\n\nfunction write_FONTS_biff8(ba, data, opts) {\n  write_biff_rec(ba, 0x0031\n  /* Font */\n  , write_Font({\n    sz: 12,\n    color: {\n      theme: 1\n    },\n    name: \"Arial\",\n    family: 2,\n    scheme: \"minor\"\n  }, opts));\n}\n\nfunction write_FMTS_biff8(ba, NF\n/*:?SSFTable*/\n, opts) {\n  if (!NF) return;\n  [[5, 8], [23, 26], [41, 44], [\n  /*63*/\n  50,\n  /*66],[164,*/\n  392]].forEach(function (r) {\n    /*:: if(!NF) return; */\n    for (var i = r[0]; i <= r[1]; ++i) {\n      if (NF[i] != null) write_biff_rec(ba, 0x041E\n      /* Format */\n      , write_Format(i, NF[i], opts));\n    }\n  });\n}\n\nfunction write_FEAT(ba, ws) {\n  /* [MS-XLS] 2.4.112 */\n  var o = new_buf(19);\n  o.write_shift(4, 0x867);\n  o.write_shift(4, 0);\n  o.write_shift(4, 0);\n  o.write_shift(2, 3);\n  o.write_shift(1, 1);\n  o.write_shift(4, 0);\n  write_biff_rec(ba, 0x0867\n  /* FeatHdr */\n  , o);\n  /* [MS-XLS] 2.4.111 */\n\n  o = new_buf(39);\n  o.write_shift(4, 0x868);\n  o.write_shift(4, 0);\n  o.write_shift(4, 0);\n  o.write_shift(2, 3);\n  o.write_shift(1, 0);\n  o.write_shift(4, 0);\n  o.write_shift(2, 1);\n  o.write_shift(4, 4);\n  o.write_shift(2, 0);\n  write_Ref8U(safe_decode_range(ws['!ref'] || \"A1\"), o);\n  o.write_shift(4, 4);\n  write_biff_rec(ba, 0x0868\n  /* Feat */\n  , o);\n}\n\nfunction write_CELLXFS_biff8(ba, opts) {\n  for (var i = 0; i < 16; ++i) {\n    write_biff_rec(ba, 0x00e0\n    /* XF */\n    , write_XF({\n      numFmtId: 0,\n      style: true\n    }, 0, opts));\n  }\n\n  opts.cellXfs.forEach(function (c) {\n    write_biff_rec(ba, 0x00e0\n    /* XF */\n    , write_XF(c, 0, opts));\n  });\n}\n\nfunction write_ws_biff8_hlinks(ba\n/*:BufArray*/\n, ws) {\n  for (var R = 0; R < ws['!links'].length; ++R) {\n    var HL = ws['!links'][R];\n    write_biff_rec(ba, 0x01b8\n    /* HLink */\n    , write_HLink(HL));\n    if (HL[1].Tooltip) write_biff_rec(ba, 0x0800\n    /* HLinkTooltip */\n    , write_HLinkTooltip(HL));\n  }\n\n  delete ws['!links'];\n}\n\nfunction write_ws_cols_biff8(ba, cols) {\n  if (!cols) return;\n  var cnt = 0;\n  cols.forEach(function (col, idx) {\n    if (++cnt <= 256 && col) {\n      write_biff_rec(ba, 0x007d\n      /* ColInfo */\n      , write_ColInfo(col_obj_w(idx, col), idx));\n    }\n  });\n}\n\nfunction write_ws_biff8_cell(ba\n/*:BufArray*/\n, cell\n/*:Cell*/\n, R\n/*:number*/\n, C\n/*:number*/\n, opts) {\n  var os = 16 + get_cell_style(opts.cellXfs, cell, opts);\n\n  if (cell.v == null && !cell.bf) {\n    write_biff_rec(ba, 0x0201\n    /* Blank */\n    , write_XLSCell(R, C, os));\n    return;\n  }\n\n  if (cell.bf) write_biff_rec(ba, 0x0006\n  /* Formula */\n  , write_Formula(cell, R, C, opts, os));else switch (cell.t) {\n    case 'd':\n    case 'n':\n      var v = cell.t == 'd' ? datenum(parseDate(cell.v)) : cell.v;\n      /* TODO: emit RK as appropriate */\n\n      write_biff_rec(ba, 0x0203\n      /* Number */\n      , write_Number(R, C, v, os, opts));\n      break;\n\n    case 'b':\n    case 'e':\n      write_biff_rec(ba, 0x0205\n      /* BoolErr */\n      , write_BoolErr(R, C, cell.v, os, opts, cell.t));\n      break;\n\n    /* TODO: codepage, sst */\n\n    case 's':\n    case 'str':\n      if (opts.bookSST) {\n        var isst = get_sst_id(opts.Strings, cell.v, opts.revStrings);\n        write_biff_rec(ba, 0x00fd\n        /* LabelSst */\n        , write_LabelSst(R, C, isst, os, opts));\n      } else write_biff_rec(ba, 0x0204\n      /* Label */\n      , write_Label(R, C, (cell.v || \"\").slice(0, 255), os, opts));\n\n      break;\n\n    default:\n      write_biff_rec(ba, 0x0201\n      /* Blank */\n      , write_XLSCell(R, C, os));\n  }\n}\n/* [MS-XLS] 2.1.7.20.5 */\n\n\nfunction write_ws_biff8(idx\n/*:number*/\n, opts, wb\n/*:Workbook*/\n) {\n  var ba = buf_array();\n  var s = wb.SheetNames[idx],\n      ws = wb.Sheets[s] || {};\n\n  var _WB\n  /*:WBWBProps*/\n  = (wb || {}).Workbook || {}\n  /*:any*/\n  ;\n\n  var _sheet\n  /*:WBWSProp*/\n  = (_WB.Sheets || [])[idx] || {}\n  /*:any*/\n  ;\n\n  var dense = Array.isArray(ws);\n  var b8 = opts.biff == 8;\n  var ref\n  /*:string*/\n  ,\n      rr = \"\",\n      cols\n  /*:Array<string>*/\n  = [];\n  var range = safe_decode_range(ws['!ref'] || \"A1\");\n  var MAX_ROWS = b8 ? 65536 : 16384;\n\n  if (range.e.c > 0xFF || range.e.r >= MAX_ROWS) {\n    if (opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n    range.e.c = Math.min(range.e.c, 0xFF);\n    range.e.r = Math.min(range.e.c, MAX_ROWS - 1);\n  }\n\n  write_biff_rec(ba, 0x0809, write_BOF(wb, 0x10, opts));\n  /* [Uncalced] Index */\n\n  write_biff_rec(ba, 0x000d\n  /* CalcMode */\n  , writeuint16(1));\n  write_biff_rec(ba, 0x000c\n  /* CalcCount */\n  , writeuint16(100));\n  write_biff_rec(ba, 0x000f\n  /* CalcRefMode */\n  , writebool(true));\n  write_biff_rec(ba, 0x0011\n  /* CalcIter */\n  , writebool(false));\n  write_biff_rec(ba, 0x0010\n  /* CalcDelta */\n  , write_Xnum(0.001));\n  write_biff_rec(ba, 0x005f\n  /* CalcSaveRecalc */\n  , writebool(true));\n  write_biff_rec(ba, 0x002a\n  /* PrintRowCol */\n  , writebool(false));\n  write_biff_rec(ba, 0x002b\n  /* PrintGrid */\n  , writebool(false));\n  write_biff_rec(ba, 0x0082\n  /* GridSet */\n  , writeuint16(1));\n  write_biff_rec(ba, 0x0080\n  /* Guts */\n  , write_Guts([0, 0]));\n  /* DefaultRowHeight WsBool [Sync] [LPr] [HorizontalPageBreaks] [VerticalPageBreaks] */\n\n  /* Header (string) */\n\n  /* Footer (string) */\n\n  write_biff_rec(ba, 0x0083\n  /* HCenter */\n  , writebool(false));\n  write_biff_rec(ba, 0x0084\n  /* VCenter */\n  , writebool(false));\n  /* ... */\n\n  if (b8) write_ws_cols_biff8(ba, ws[\"!cols\"]);\n  /* ... */\n\n  write_biff_rec(ba, 0x200, write_Dimensions(range, opts));\n  /* ... */\n\n  if (b8) ws['!links'] = [];\n\n  for (var R = range.s.r; R <= range.e.r; ++R) {\n    rr = encode_row(R);\n\n    for (var C = range.s.c; C <= range.e.c; ++C) {\n      if (R === range.s.r) cols[C] = encode_col(C);\n      ref = cols[C] + rr;\n      var cell = dense ? (ws[R] || [])[C] : ws[ref];\n      if (!cell) continue;\n      /* write cell */\n\n      write_ws_biff8_cell(ba, cell, R, C, opts);\n      if (b8 && cell.l) ws['!links'].push([ref, cell.l]);\n    }\n  }\n\n  var cname\n  /*:string*/\n  = _sheet.CodeName || _sheet.name || s;\n  /* ... */\n\n  if (b8) write_biff_rec(ba, 0x023e\n  /* Window2 */\n  , write_Window2((_WB.Views || [])[0]));\n  /* ... */\n\n  if (b8 && (ws['!merges'] || []).length) write_biff_rec(ba, 0x00e5\n  /* MergeCells */\n  , write_MergeCells(ws['!merges']));\n  /* [LRng] *QUERYTABLE [PHONETICINFO] CONDFMTS */\n\n  if (b8) write_ws_biff8_hlinks(ba, ws);\n  /* [DVAL] */\n\n  write_biff_rec(ba, 0x01ba\n  /* CodeName */\n  , write_XLUnicodeString(cname, opts));\n  /* *WebPub *CellWatch [SheetExt] */\n\n  if (b8) write_FEAT(ba, ws);\n  /* *FEAT11 *RECORD12 */\n\n  write_biff_rec(ba, 0x000a\n  /* EOF */\n  );\n  return ba.end();\n}\n/* [MS-XLS] 2.1.7.20.3 */\n\n\nfunction write_biff8_global(wb\n/*:Workbook*/\n, bufs, opts\n/*:WriteOpts*/\n) {\n  var A = buf_array();\n\n  var _WB\n  /*:WBWBProps*/\n  = (wb || {}).Workbook || {}\n  /*:any*/\n  ;\n\n  var _sheets\n  /*:Array<WBWSProp>*/\n  = _WB.Sheets || [];\n\n  var _wb\n  /*:WBProps*/\n  =\n  /*::((*/\n  _WB.WBProps || {\n    /*::CodeName:\"ThisWorkbook\"*/\n  }\n  /*:: ):any)*/\n  ;\n\n  var b8 = opts.biff == 8,\n      b5 = opts.biff == 5;\n  write_biff_rec(A, 0x0809, write_BOF(wb, 0x05, opts));\n  if (opts.bookType == \"xla\") write_biff_rec(A, 0x0087\n  /* Addin */\n  );\n  write_biff_rec(A, 0x00e1\n  /* InterfaceHdr */\n  , b8 ? writeuint16(0x04b0) : null);\n  write_biff_rec(A, 0x00c1\n  /* Mms */\n  , writezeroes(2));\n  if (b5) write_biff_rec(A, 0x00bf\n  /* ToolbarHdr */\n  );\n  if (b5) write_biff_rec(A, 0x00c0\n  /* ToolbarEnd */\n  );\n  write_biff_rec(A, 0x00e2\n  /* InterfaceEnd */\n  );\n  write_biff_rec(A, 0x005c\n  /* WriteAccess */\n  , write_WriteAccess(\"SheetJS\", opts));\n  /* [FileSharing] */\n\n  write_biff_rec(A, 0x0042\n  /* CodePage */\n  , writeuint16(b8 ? 0x04b0 : 0x04E4));\n  /* *2047 Lel */\n\n  if (b8) write_biff_rec(A, 0x0161\n  /* DSF */\n  , writeuint16(0));\n  if (b8) write_biff_rec(A, 0x01c0\n  /* Excel9File */\n  );\n  write_biff_rec(A, 0x013d\n  /* RRTabId */\n  , write_RRTabId(wb.SheetNames.length));\n  if (b8 && wb.vbaraw) write_biff_rec(A, 0x00d3\n  /* ObProj */\n  );\n  /* [ObNoMacros] */\n\n  if (b8 && wb.vbaraw) {\n    var cname\n    /*:string*/\n    = _wb.CodeName || \"ThisWorkbook\";\n    write_biff_rec(A, 0x01ba\n    /* CodeName */\n    , write_XLUnicodeString(cname, opts));\n  }\n\n  write_biff_rec(A, 0x009c\n  /* BuiltInFnGroupCount */\n  , writeuint16(0x11));\n  /* *FnGroupName *FnGrp12 */\n\n  /* *Lbl */\n\n  /* [OleObjectSize] */\n\n  write_biff_rec(A, 0x0019\n  /* WinProtect */\n  , writebool(false));\n  write_biff_rec(A, 0x0012\n  /* Protect */\n  , writebool(false));\n  write_biff_rec(A, 0x0013\n  /* Password */\n  , writeuint16(0));\n  if (b8) write_biff_rec(A, 0x01af\n  /* Prot4Rev */\n  , writebool(false));\n  if (b8) write_biff_rec(A, 0x01bc\n  /* Prot4RevPass */\n  , writeuint16(0));\n  write_biff_rec(A, 0x003d\n  /* Window1 */\n  , write_Window1(opts));\n  write_biff_rec(A, 0x0040\n  /* Backup */\n  , writebool(false));\n  write_biff_rec(A, 0x008d\n  /* HideObj */\n  , writeuint16(0));\n  write_biff_rec(A, 0x0022\n  /* Date1904 */\n  , writebool(safe1904(wb) == \"true\"));\n  write_biff_rec(A, 0x000e\n  /* CalcPrecision */\n  , writebool(true));\n  if (b8) write_biff_rec(A, 0x01b7\n  /* RefreshAll */\n  , writebool(false));\n  write_biff_rec(A, 0x00DA\n  /* BookBool */\n  , writeuint16(0));\n  /* ... */\n\n  write_FONTS_biff8(A, wb, opts);\n  write_FMTS_biff8(A, wb.SSF, opts);\n  write_CELLXFS_biff8(A, opts);\n  /* ... */\n\n  if (b8) write_biff_rec(A, 0x0160\n  /* UsesELFs */\n  , writebool(false));\n  var a = A.end();\n  var C = buf_array();\n  /* METADATA [MTRSettings] [ForceFullCalculation] */\n\n  if (b8) write_biff_rec(C, 0x008C, write_Country());\n  /* *SUPBOOK *LBL *RTD [RecalcId] *HFPicture *MSODRAWINGGROUP */\n\n  /* BIFF8: [SST *Continue] ExtSST */\n\n  if (b8 && opts.Strings) write_biff_continue(C, 0x00FC, write_SST(opts.Strings, opts));\n  /* *WebPub [WOpt] [CrErr] [BookExt] *FeatHdr *DConn [THEME] [CompressPictures] [Compat12] [GUIDTypeLib] */\n\n  write_biff_rec(C, 0x000A\n  /* EOF */\n  );\n  var c = C.end();\n  var B = buf_array();\n  var blen = 0,\n      j = 0;\n\n  for (j = 0; j < wb.SheetNames.length; ++j) {\n    blen += (b8 ? 12 : 11) + (b8 ? 2 : 1) * wb.SheetNames[j].length;\n  }\n\n  var start = a.length + blen + c.length;\n\n  for (j = 0; j < wb.SheetNames.length; ++j) {\n    var _sheet\n    /*:WBWSProp*/\n    = _sheets[j] || {}\n    /*:any*/\n    ;\n\n    write_biff_rec(B, 0x0085\n    /* BoundSheet8 */\n    , write_BoundSheet8({\n      pos: start,\n      hs: _sheet.Hidden || 0,\n      dt: 0,\n      name: wb.SheetNames[j]\n    }, opts));\n    start += bufs[j].length;\n  }\n  /* 1*BoundSheet8 */\n\n\n  var b = B.end();\n  if (blen != b.length) throw new Error(\"BS8 \" + blen + \" != \" + b.length);\n  var out = [];\n  if (a.length) out.push(a);\n  if (b.length) out.push(b);\n  if (c.length) out.push(c);\n  return bconcat(out);\n}\n/* [MS-XLS] 2.1.7.20 Workbook Stream */\n\n\nfunction write_biff8_buf(wb\n/*:Workbook*/\n, opts\n/*:WriteOpts*/\n) {\n  var o = opts || {};\n  var bufs = [];\n\n  if (wb && !wb.SSF) {\n    wb.SSF = dup(table_fmt);\n  }\n\n  if (wb && wb.SSF) {\n    make_ssf();\n    SSF_load_table(wb.SSF); // $FlowIgnore\n\n    o.revssf = evert_num(wb.SSF);\n    o.revssf[wb.SSF[65535]] = 0;\n    o.ssf = wb.SSF;\n  }\n\n  o.Strings =\n  /*::((*/\n  []\n  /*:: :any):SST)*/\n  ;\n  o.Strings.Count = 0;\n  o.Strings.Unique = 0;\n  fix_write_opts(o);\n  o.cellXfs = [];\n  get_cell_style(o.cellXfs, {}, {\n    revssf: {\n      \"General\": 0\n    }\n  });\n  if (!wb.Props) wb.Props = {};\n\n  for (var i = 0; i < wb.SheetNames.length; ++i) {\n    bufs[bufs.length] = write_ws_biff8(i, o, wb);\n  }\n\n  bufs.unshift(write_biff8_global(wb, bufs, o));\n  return bconcat(bufs);\n}\n\nfunction write_biff_buf(wb\n/*:Workbook*/\n, opts\n/*:WriteOpts*/\n) {\n  for (var i = 0; i <= wb.SheetNames.length; ++i) {\n    var ws = wb.Sheets[wb.SheetNames[i]];\n    if (!ws || !ws[\"!ref\"]) continue;\n    var range = decode_range(ws[\"!ref\"]);\n\n    if (range.e.c > 255) {\n      // note: 255 is IV\n      if (typeof console != \"undefined\" && console.error) console.error(\"Worksheet '\" + wb.SheetNames[i] + \"' extends beyond column IV (255).  Data may be lost.\");\n    }\n  }\n\n  var o = opts || {};\n\n  switch (o.biff || 2) {\n    case 8:\n    case 5:\n      return write_biff8_buf(wb, opts);\n\n    case 4:\n    case 3:\n    case 2:\n      return write_biff2_buf(wb, opts);\n  }\n\n  throw new Error(\"invalid type \" + o.bookType + \" for BIFF\");\n}\n/* note: browser DOM element cannot see mso- style attrs, must parse */\n\n\nfunction html_to_sheet(str\n/*:string*/\n, _opts)\n/*:Workbook*/\n{\n  var opts = _opts || {};\n  if (DENSE != null && opts.dense == null) opts.dense = DENSE;\n  var ws\n  /*:Worksheet*/\n  = opts.dense ? []\n  /*:any*/\n  : {}\n  /*:any*/\n  ;\n  str = str.replace(/<!--.*?-->/g, \"\");\n  var mtch\n  /*:any*/\n  = str.match(/<table/i);\n  if (!mtch) throw new Error(\"Invalid HTML: could not find <table>\");\n  var mtch2\n  /*:any*/\n  = str.match(/<\\/table/i);\n  var i\n  /*:number*/\n  = mtch.index,\n      j\n  /*:number*/\n  = mtch2 && mtch2.index || str.length;\n  var rows = split_regex(str.slice(i, j), /(:?<tr[^>]*>)/i, \"<tr>\");\n  var R = -1,\n      C = 0,\n      RS = 0,\n      CS = 0;\n  var range\n  /*:Range*/\n  = {\n    s: {\n      r: 10000000,\n      c: 10000000\n    },\n    e: {\n      r: 0,\n      c: 0\n    }\n  };\n  var merges\n  /*:Array<Range>*/\n  = [];\n\n  for (i = 0; i < rows.length; ++i) {\n    var row = rows[i].trim();\n    var hd = row.slice(0, 3).toLowerCase();\n\n    if (hd == \"<tr\") {\n      ++R;\n\n      if (opts.sheetRows && opts.sheetRows <= R) {\n        --R;\n        break;\n      }\n\n      C = 0;\n      continue;\n    }\n\n    if (hd != \"<td\" && hd != \"<th\") continue;\n    var cells = row.split(/<\\/t[dh]>/i);\n\n    for (j = 0; j < cells.length; ++j) {\n      var cell = cells[j].trim();\n      if (!cell.match(/<t[dh]/i)) continue;\n      var m = cell,\n          cc = 0;\n      /* TODO: parse styles etc */\n\n      while (m.charAt(0) == \"<\" && (cc = m.indexOf(\">\")) > -1) {\n        m = m.slice(cc + 1);\n      }\n\n      for (var midx = 0; midx < merges.length; ++midx) {\n        var _merge\n        /*:Range*/\n        = merges[midx];\n\n        if (_merge.s.c == C && _merge.s.r < R && R <= _merge.e.r) {\n          C = _merge.e.c + 1;\n          midx = -1;\n        }\n      }\n\n      var tag = parsexmltag(cell.slice(0, cell.indexOf(\">\")));\n      CS = tag.colspan ? +tag.colspan : 1;\n      if ((RS = +tag.rowspan) > 1 || CS > 1) merges.push({\n        s: {\n          r: R,\n          c: C\n        },\n        e: {\n          r: R + (RS || 1) - 1,\n          c: C + CS - 1\n        }\n      });\n\n      var _t\n      /*:string*/\n      = tag.t || tag[\"data-t\"] || \"\";\n      /* TODO: generate stub cells */\n\n\n      if (!m.length) {\n        C += CS;\n        continue;\n      }\n\n      m = htmldecode(m);\n      if (range.s.r > R) range.s.r = R;\n      if (range.e.r < R) range.e.r = R;\n      if (range.s.c > C) range.s.c = C;\n      if (range.e.c < C) range.e.c = C;\n\n      if (!m.length) {\n        C += CS;\n        continue;\n      }\n\n      var o\n      /*:Cell*/\n      = {\n        t: 's',\n        v: m\n      };\n\n      if (opts.raw || !m.trim().length || _t == 's') {} else if (m === 'TRUE') o = {\n        t: 'b',\n        v: true\n      };else if (m === 'FALSE') o = {\n        t: 'b',\n        v: false\n      };else if (!isNaN(fuzzynum(m))) o = {\n        t: 'n',\n        v: fuzzynum(m)\n      };else if (!isNaN(fuzzydate(m).getDate())) {\n        o = {\n          t: 'd',\n          v: parseDate(m)\n        }\n        /*:any*/\n        ;\n        if (!opts.cellDates) o = {\n          t: 'n',\n          v: datenum(o.v)\n        }\n        /*:any*/\n        ;\n        o.z = opts.dateNF || table_fmt[14];\n      }\n\n      if (opts.dense) {\n        if (!ws[R]) ws[R] = [];\n        ws[R][C] = o;\n      } else ws[encode_cell({\n        r: R,\n        c: C\n      })] = o;\n\n      C += CS;\n    }\n  }\n\n  ws['!ref'] = encode_range(range);\n  if (merges.length) ws[\"!merges\"] = merges;\n  return ws;\n}\n\nfunction make_html_row(ws\n/*:Worksheet*/\n, r\n/*:Range*/\n, R\n/*:number*/\n, o\n/*:Sheet2HTMLOpts*/\n)\n/*:string*/\n{\n  var M\n  /*:Array<Range>*/\n  = ws['!merges'] || [];\n  var oo\n  /*:Array<string>*/\n  = [];\n\n  for (var C = r.s.c; C <= r.e.c; ++C) {\n    var RS = 0,\n        CS = 0;\n\n    for (var j = 0; j < M.length; ++j) {\n      if (M[j].s.r > R || M[j].s.c > C) continue;\n      if (M[j].e.r < R || M[j].e.c < C) continue;\n\n      if (M[j].s.r < R || M[j].s.c < C) {\n        RS = -1;\n        break;\n      }\n\n      RS = M[j].e.r - M[j].s.r + 1;\n      CS = M[j].e.c - M[j].s.c + 1;\n      break;\n    }\n\n    if (RS < 0) continue;\n    var coord = encode_cell({\n      r: R,\n      c: C\n    });\n    var cell = o.dense ? (ws[R] || [])[C] : ws[coord];\n    /* TODO: html entities */\n\n    var w = cell && cell.v != null && (cell.h || escapehtml(cell.w || (format_cell(cell), cell.w) || \"\")) || \"\";\n    var sp = {}\n    /*:any*/\n    ;\n    if (RS > 1) sp.rowspan = RS;\n    if (CS > 1) sp.colspan = CS;\n    if (o.editable) w = '<span contenteditable=\"true\">' + w + '</span>';else if (cell) {\n      sp[\"data-t\"] = cell && cell.t || 'z';\n      if (cell.v != null) sp[\"data-v\"] = cell.v;\n      if (cell.z != null) sp[\"data-z\"] = cell.z;\n      if (cell.l && (cell.l.Target || \"#\").charAt(0) != \"#\") w = '<a href=\"' + cell.l.Target + '\">' + w + '</a>';\n    }\n    sp.id = (o.id || \"sjs\") + \"-\" + coord;\n    oo.push(writextag('td', w, sp));\n  }\n\n  var preamble = \"<tr>\";\n  return 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\n/*:string*/\n, opts)\n/*:Workbook*/\n{\n  var mtch = str.match(/<table[\\s\\S]*?>[\\s\\S]*?<\\/table>/gi);\n  if (!mtch || mtch.length == 0) throw new Error(\"Invalid HTML: could not find <table>\");\n  if (mtch.length == 1) return sheet_to_workbook(html_to_sheet(mtch[0], opts), opts);\n  var wb = book_new();\n  mtch.forEach(function (s, idx) {\n    book_append_sheet(wb, html_to_sheet(s, opts), \"Sheet\" + (idx + 1));\n  });\n  return wb;\n}\n\nfunction make_html_preamble(ws\n/*:Worksheet*/\n, R\n/*:Range*/\n, o\n/*:Sheet2HTMLOpts*/\n)\n/*:string*/\n{\n  var out\n  /*:Array<string>*/\n  = [];\n  return out.join(\"\") + '<table' + (o && o.id ? ' id=\"' + o.id + '\"' : \"\") + '>';\n}\n\nfunction sheet_to_html(ws\n/*:Worksheet*/\n, opts\n/*:?Sheet2HTMLOpts*/\n\n/*, wb:?Workbook*/\n)\n/*:string*/\n{\n  var o = opts || {};\n  var header = o.header != null ? o.header : HTML_BEGIN;\n  var footer = o.footer != null ? o.footer : HTML_END;\n  var out\n  /*:Array<string>*/\n  = [header];\n  var r = decode_range(ws['!ref']);\n  o.dense = Array.isArray(ws);\n  out.push(make_html_preamble(ws, r, o));\n\n  for (var R = r.s.r; R <= r.e.r; ++R) {\n    out.push(make_html_row(ws, r, R, o));\n  }\n\n  out.push(\"</table>\" + footer);\n  return out.join(\"\");\n}\n\nfunction sheet_add_dom(ws\n/*:Worksheet*/\n, table\n/*:HTMLElement*/\n, _opts\n/*:?any*/\n)\n/*:Worksheet*/\n{\n  var opts = _opts || {};\n  if (DENSE != null) opts.dense = DENSE;\n  var or_R = 0,\n      or_C = 0;\n\n  if (opts.origin != null) {\n    if (typeof opts.origin == 'number') or_R = opts.origin;else {\n      var _origin\n      /*:CellAddress*/\n      = typeof opts.origin == \"string\" ? decode_cell(opts.origin) : opts.origin;\n\n      or_R = _origin.r;\n      or_C = _origin.c;\n    }\n  }\n\n  var rows\n  /*:HTMLCollection<HTMLTableRowElement>*/\n  = table.getElementsByTagName('tr');\n  var sheetRows = Math.min(opts.sheetRows || 10000000, rows.length);\n  var range\n  /*:Range*/\n  = {\n    s: {\n      r: 0,\n      c: 0\n    },\n    e: {\n      r: or_R,\n      c: or_C\n    }\n  };\n\n  if (ws[\"!ref\"]) {\n    var _range\n    /*:Range*/\n    = decode_range(ws[\"!ref\"]);\n\n    range.s.r = Math.min(range.s.r, _range.s.r);\n    range.s.c = Math.min(range.s.c, _range.s.c);\n    range.e.r = Math.max(range.e.r, _range.e.r);\n    range.e.c = Math.max(range.e.c, _range.e.c);\n    if (or_R == -1) range.e.r = or_R = _range.e.r + 1;\n  }\n\n  var merges\n  /*:Array<Range>*/\n  = [],\n      midx = 0;\n  var rowinfo\n  /*:Array<RowInfo>*/\n  = ws[\"!rows\"] || (ws[\"!rows\"] = []);\n  var _R = 0,\n      R = 0,\n      _C = 0,\n      C = 0,\n      RS = 0,\n      CS = 0;\n  if (!ws[\"!cols\"]) ws['!cols'] = [];\n\n  for (; _R < rows.length && R < sheetRows; ++_R) {\n    var row\n    /*:HTMLTableRowElement*/\n    = rows[_R];\n\n    if (is_dom_element_hidden(row)) {\n      if (opts.display) continue;\n      rowinfo[R] = {\n        hidden: true\n      };\n    }\n\n    var elts\n    /*:HTMLCollection<HTMLTableCellElement>*/\n    = row.children\n    /*:any*/\n    ;\n\n    for (_C = C = 0; _C < elts.length; ++_C) {\n      var elt\n      /*:HTMLTableCellElement*/\n      = elts[_C];\n      if (opts.display && is_dom_element_hidden(elt)) continue;\n      var v\n      /*:?string*/\n      = elt.hasAttribute('data-v') ? elt.getAttribute('data-v') : elt.hasAttribute('v') ? elt.getAttribute('v') : htmldecode(elt.innerHTML);\n      var z\n      /*:?string*/\n      = elt.getAttribute('data-z') || elt.getAttribute('z');\n\n      for (midx = 0; midx < merges.length; ++midx) {\n        var m\n        /*:Range*/\n        = merges[midx];\n\n        if (m.s.c == C + or_C && m.s.r < R + or_R && R + or_R <= m.e.r) {\n          C = m.e.c + 1 - or_C;\n          midx = -1;\n        }\n      }\n      /* TODO: figure out how to extract nonstandard mso- style */\n\n\n      CS = +elt.getAttribute(\"colspan\") || 1;\n      if ((RS = +elt.getAttribute(\"rowspan\") || 1) > 1 || CS > 1) merges.push({\n        s: {\n          r: R + or_R,\n          c: C + or_C\n        },\n        e: {\n          r: R + or_R + (RS || 1) - 1,\n          c: C + or_C + (CS || 1) - 1\n        }\n      });\n      var o\n      /*:Cell*/\n      = {\n        t: 's',\n        v: v\n      };\n\n      var _t\n      /*:string*/\n      = elt.getAttribute(\"data-t\") || elt.getAttribute(\"t\") || \"\";\n\n      if (v != null) {\n        if (v.length == 0) o.t = _t || 'z';else if (opts.raw || v.trim().length == 0 || _t == \"s\") {} else if (v === 'TRUE') o = {\n          t: 'b',\n          v: true\n        };else if (v === 'FALSE') o = {\n          t: 'b',\n          v: false\n        };else if (!isNaN(fuzzynum(v))) o = {\n          t: 'n',\n          v: fuzzynum(v)\n        };else if (!isNaN(fuzzydate(v).getDate())) {\n          o = {\n            t: 'd',\n            v: parseDate(v)\n          }\n          /*:any*/\n          ;\n          if (!opts.cellDates) o = {\n            t: 'n',\n            v: datenum(o.v)\n          }\n          /*:any*/\n          ;\n          o.z = opts.dateNF || table_fmt[14];\n        }\n      }\n\n      if (o.z === undefined && z != null) o.z = z;\n      /* The first link is used.  Links are assumed to be fully specified.\n       * TODO: The right way to process relative links is to make a new <a> */\n\n      var l = \"\",\n          Aelts = elt.getElementsByTagName(\"A\");\n      if (Aelts && Aelts.length) for (var Aelti = 0; Aelti < Aelts.length; ++Aelti) {\n        if (Aelts[Aelti].hasAttribute(\"href\")) {\n          l = Aelts[Aelti].getAttribute(\"href\");\n          if (l.charAt(0) != \"#\") break;\n        }\n      }\n      if (l && l.charAt(0) != \"#\") o.l = {\n        Target: l\n      };\n\n      if (opts.dense) {\n        if (!ws[R + or_R]) ws[R + or_R] = [];\n        ws[R + or_R][C + or_C] = o;\n      } else ws[encode_cell({\n        c: C + or_C,\n        r: R + or_R\n      })] = o;\n\n      if (range.e.c < C + or_C) range.e.c = C + or_C;\n      C += CS;\n    }\n\n    ++R;\n  }\n\n  if (merges.length) ws['!merges'] = (ws[\"!merges\"] || []).concat(merges);\n  range.e.r = Math.max(range.e.r, R - 1 + or_R);\n  ws['!ref'] = encode_range(range);\n  if (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\n  return ws;\n}\n\nfunction parse_dom_table(table\n/*:HTMLElement*/\n, _opts\n/*:?any*/\n)\n/*:Worksheet*/\n{\n  var opts = _opts || {};\n  var ws\n  /*:Worksheet*/\n  = opts.dense ? []\n  /*:any*/\n  : {}\n  /*:any*/\n  ;\n  return sheet_add_dom(ws, table, _opts);\n}\n\nfunction table_to_book(table\n/*:HTMLElement*/\n, opts\n/*:?any*/\n)\n/*:Workbook*/\n{\n  return sheet_to_workbook(parse_dom_table(table, opts), opts);\n}\n\nfunction is_dom_element_hidden(element\n/*:HTMLElement*/\n)\n/*:boolean*/\n{\n  var display\n  /*:string*/\n  = '';\n  var get_computed_style\n  /*:?function*/\n  = get_get_computed_style_function(element);\n  if (get_computed_style) display = get_computed_style(element).getPropertyValue('display');\n  if (!display) display = element.style && element.style.display;\n  return display === 'none';\n}\n/* global getComputedStyle */\n\n\nfunction get_get_computed_style_function(element\n/*:HTMLElement*/\n)\n/*:?function*/\n{\n  // The proper getComputedStyle implementation is the one defined in the element window\n  if (element.ownerDocument.defaultView && typeof element.ownerDocument.defaultView.getComputedStyle === 'function') return element.ownerDocument.defaultView.getComputedStyle; // If it is not available, try to get one from the global namespace\n\n  if (typeof getComputedStyle === 'function') return getComputedStyle;\n  return null;\n}\n/* OpenDocument */\n\n\nfunction parse_text_p(text\n/*:string*/\n\n/*::, tag*/\n)\n/*:Array<any>*/\n{\n  /* 6.1.2 White Space Characters */\n  var fixed = text.replace(/[\\t\\r\\n]/g, \" \").trim().replace(/ +/g, \" \").replace(/<text:s\\/>/g, \" \").replace(/<text:s text:c=\"(\\d+)\"\\/>/g, function ($$, $1) {\n    return Array(parseInt($1, 10) + 1).join(\" \");\n  }).replace(/<text:tab[^>]*\\/>/g, \"\\t\").replace(/<text:line-break\\/>/g, \"\\n\");\n  var v = unescapexml(fixed.replace(/<[^>]*>/g, \"\"));\n  return [v];\n}\n\nvar number_formats_ods = {\n  /* ods name: [short ssf fmt, long ssf fmt] */\n  day: [\"d\", \"dd\"],\n  month: [\"m\", \"mm\"],\n  year: [\"y\", \"yy\"],\n  hours: [\"h\", \"hh\"],\n  minutes: [\"m\", \"mm\"],\n  seconds: [\"s\", \"ss\"],\n  \"am-pm\": [\"A/P\", \"AM/PM\"],\n  \"day-of-week\": [\"ddd\", \"dddd\"],\n  era: [\"e\", \"ee\"],\n\n  /* there is no native representation of LO \"Q\" format */\n  quarter: [\"\\\\Qm\", \"m\\\\\\\"th quarter\\\"\"]\n};\n\nfunction parse_content_xml(d\n/*:string*/\n, _opts)\n/*:Workbook*/\n{\n  var opts = _opts || {};\n  if (DENSE != null && opts.dense == null) opts.dense = DENSE;\n  var str = xlml_normalize(d);\n  var state\n  /*:Array<any>*/\n  = [],\n      tmp;\n  var tag\n  /*:: = {}*/\n  ;\n  var NFtag = {\n    name: \"\"\n  },\n      NF = \"\",\n      pidx = 0;\n  var sheetag\n  /*:: = {name:\"\", '名称':\"\"}*/\n  ;\n  var rowtag\n  /*:: = {'行号':\"\"}*/\n  ;\n  var Sheets = {},\n      SheetNames\n  /*:Array<string>*/\n  = [];\n  var ws = opts.dense ? []\n  /*:any*/\n  : {}\n  /*:any*/\n  ;\n  var Rn, q\n  /*:: :any = ({t:\"\", v:null, z:null, w:\"\",c:[],}:any)*/\n  ;\n  var ctag = {\n    value: \"\"\n  }\n  /*:any*/\n  ;\n  var textp = \"\",\n      textpidx = 0,\n      textptag\n  /*:: = {}*/\n  ;\n  var textR = [];\n  var R = -1,\n      C = -1,\n      range = {\n    s: {\n      r: 1000000,\n      c: 10000000\n    },\n    e: {\n      r: 0,\n      c: 0\n    }\n  };\n  var row_ol = 0;\n  var number_format_map = {};\n  var merges\n  /*:Array<Range>*/\n  = [],\n      mrange = {},\n      mR = 0,\n      mC = 0;\n  var rowinfo\n  /*:Array<RowInfo>*/\n  = [],\n      rowpeat = 1,\n      colpeat = 1;\n  var arrayf\n  /*:Array<[Range, string]>*/\n  = [];\n  var WB = {\n    Names: []\n  };\n  var atag = {}\n  /*:any*/\n  ;\n  var _Ref\n  /*:[string, string]*/\n  = [\"\", \"\"];\n  var comments\n  /*:Array<Comment>*/\n  = [],\n      comment\n  /*:Comment*/\n  = {}\n  /*:any*/\n  ;\n  var creator = \"\",\n      creatoridx = 0;\n  var isstub = false,\n      intable = false;\n  var i = 0;\n  xlmlregex.lastIndex = 0;\n  str = str.replace(/<!--([\\s\\S]*?)-->/mg, \"\").replace(/<!DOCTYPE[^\\[]*\\[[^\\]]*\\]>/gm, \"\");\n\n  while (Rn = xlmlregex.exec(str)) {\n    switch (Rn[3] = Rn[3].replace(/_.*$/, \"\")) {\n      case 'table':\n      case '工作表':\n        // 9.1.2 <table:table>\n        if (Rn[1] === '/') {\n          if (range.e.c >= range.s.c && range.e.r >= range.s.r) ws['!ref'] = encode_range(range);else ws['!ref'] = \"A1:A1\";\n\n          if (opts.sheetRows > 0 && opts.sheetRows <= range.e.r) {\n            ws['!fullref'] = ws['!ref'];\n            range.e.r = opts.sheetRows - 1;\n            ws['!ref'] = encode_range(range);\n          }\n\n          if (merges.length) ws['!merges'] = merges;\n          if (rowinfo.length) ws[\"!rows\"] = rowinfo;\n          sheetag.name = sheetag['名称'] || sheetag.name;\n          if (typeof JSON !== 'undefined') JSON.stringify(sheetag);\n          SheetNames.push(sheetag.name);\n          Sheets[sheetag.name] = ws;\n          intable = false;\n        } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') {\n          sheetag = parsexmltag(Rn[0], false);\n          R = C = -1;\n          range.s.r = range.s.c = 10000000;\n          range.e.r = range.e.c = 0;\n          ws = opts.dense ? []\n          /*:any*/\n          : {}\n          /*:any*/\n          ;\n          merges = [];\n          rowinfo = [];\n          intable = true;\n        }\n\n        break;\n\n      case 'table-row-group':\n        // 9.1.9 <table:table-row-group>\n        if (Rn[1] === \"/\") --row_ol;else ++row_ol;\n        break;\n\n      case 'table-row':\n      case '行':\n        // 9.1.3 <table:table-row>\n        if (Rn[1] === '/') {\n          R += rowpeat;\n          rowpeat = 1;\n          break;\n        }\n\n        rowtag = parsexmltag(Rn[0], false);\n        if (rowtag['行号']) R = rowtag['行号'] - 1;else if (R == -1) R = 0;\n        rowpeat = +rowtag['number-rows-repeated'] || 1;\n        /* TODO: remove magic */\n\n        if (rowpeat < 10) for (i = 0; i < rowpeat; ++i) {\n          if (row_ol > 0) rowinfo[R + i] = {\n            level: row_ol\n          };\n        }\n        C = -1;\n        break;\n\n      case 'covered-table-cell':\n        // 9.1.5 <table:covered-table-cell>\n        if (Rn[1] !== '/') ++C;\n\n        if (opts.sheetStubs) {\n          if (opts.dense) {\n            if (!ws[R]) ws[R] = [];\n            ws[R][C] = {\n              t: 'z'\n            };\n          } else ws[encode_cell({\n            r: R,\n            c: C\n          })] = {\n            t: 'z'\n          };\n        }\n\n        textp = \"\";\n        textR = [];\n        break;\n\n      /* stub */\n\n      case 'table-cell':\n      case '数据':\n        if (Rn[0].charAt(Rn[0].length - 2) === '/') {\n          ++C;\n          ctag = parsexmltag(Rn[0], false);\n          colpeat = parseInt(ctag['number-columns-repeated'] || \"1\", 10);\n          q = {\n            t: 'z',\n            v: null\n            /*:: , z:null, w:\"\",c:[]*/\n\n          }\n          /*:any*/\n          ;\n          if (ctag.formula && opts.cellFormula != false) q.f = ods_to_csf_formula(unescapexml(ctag.formula));\n\n          if ((ctag['数据类型'] || ctag['value-type']) == \"string\") {\n            q.t = \"s\";\n            q.v = unescapexml(ctag['string-value'] || \"\");\n\n            if (opts.dense) {\n              if (!ws[R]) ws[R] = [];\n              ws[R][C] = q;\n            } else {\n              ws[encode_cell({\n                r: R,\n                c: C\n              })] = q;\n            }\n          }\n\n          C += colpeat - 1;\n        } else if (Rn[1] !== '/') {\n          ++C;\n          textp = \"\";\n          textpidx = 0;\n          textR = [];\n          colpeat = 1;\n          var rptR = rowpeat ? R + rowpeat - 1 : R;\n          if (C > range.e.c) range.e.c = C;\n          if (C < range.s.c) range.s.c = C;\n          if (R < range.s.r) range.s.r = R;\n          if (rptR > range.e.r) range.e.r = rptR;\n          ctag = parsexmltag(Rn[0], false);\n          comments = [];\n          comment = {}\n          /*:any*/\n          ;\n          q = {\n            t: ctag['数据类型'] || ctag['value-type'],\n            v: null\n            /*:: , z:null, w:\"\",c:[]*/\n\n          }\n          /*:any*/\n          ;\n\n          if (opts.cellFormula) {\n            if (ctag.formula) ctag.formula = unescapexml(ctag.formula);\n\n            if (ctag['number-matrix-columns-spanned'] && ctag['number-matrix-rows-spanned']) {\n              mR = parseInt(ctag['number-matrix-rows-spanned'], 10) || 0;\n              mC = parseInt(ctag['number-matrix-columns-spanned'], 10) || 0;\n              mrange = {\n                s: {\n                  r: R,\n                  c: C\n                },\n                e: {\n                  r: R + mR - 1,\n                  c: C + mC - 1\n                }\n              };\n              q.F = encode_range(mrange);\n              arrayf.push([mrange, q.F]);\n            }\n\n            if (ctag.formula) q.f = ods_to_csf_formula(ctag.formula);else for (i = 0; i < arrayf.length; ++i) {\n              if (R >= arrayf[i][0].s.r && R <= arrayf[i][0].e.r) if (C >= arrayf[i][0].s.c && C <= arrayf[i][0].e.c) q.F = arrayf[i][1];\n            }\n          }\n\n          if (ctag['number-columns-spanned'] || ctag['number-rows-spanned']) {\n            mR = parseInt(ctag['number-rows-spanned'], 10) || 0;\n            mC = parseInt(ctag['number-columns-spanned'], 10) || 0;\n            mrange = {\n              s: {\n                r: R,\n                c: C\n              },\n              e: {\n                r: R + mR - 1,\n                c: C + mC - 1\n              }\n            };\n            merges.push(mrange);\n          }\n          /* 19.675.2 table:number-columns-repeated */\n\n\n          if (ctag['number-columns-repeated']) colpeat = parseInt(ctag['number-columns-repeated'], 10);\n          /* 19.385 office:value-type */\n\n          switch (q.t) {\n            case 'boolean':\n              q.t = 'b';\n              q.v = parsexmlbool(ctag['boolean-value']);\n              break;\n\n            case 'float':\n              q.t = 'n';\n              q.v = parseFloat(ctag.value);\n              break;\n\n            case 'percentage':\n              q.t = 'n';\n              q.v = parseFloat(ctag.value);\n              break;\n\n            case 'currency':\n              q.t = 'n';\n              q.v = parseFloat(ctag.value);\n              break;\n\n            case 'date':\n              q.t = 'd';\n              q.v = parseDate(ctag['date-value']);\n\n              if (!opts.cellDates) {\n                q.t = 'n';\n                q.v = datenum(q.v);\n              }\n\n              q.z = 'm/d/yy';\n              break;\n\n            case 'time':\n              q.t = 'n';\n              q.v = parse_isodur(ctag['time-value']) / 86400;\n\n              if (opts.cellDates) {\n                q.t = 'd';\n                q.v = numdate(q.v);\n              }\n\n              q.z = 'HH:MM:SS';\n              break;\n\n            case 'number':\n              q.t = 'n';\n              q.v = parseFloat(ctag['数据数值']);\n              break;\n\n            default:\n              if (q.t === 'string' || q.t === 'text' || !q.t) {\n                q.t = 's';\n\n                if (ctag['string-value'] != null) {\n                  textp = unescapexml(ctag['string-value']);\n                  textR = [];\n                }\n              } else throw new Error('Unsupported value type ' + q.t);\n\n          }\n        } else {\n          isstub = false;\n\n          if (q.t === 's') {\n            q.v = textp || '';\n            if (textR.length) q.R = textR;\n            isstub = textpidx == 0;\n          }\n\n          if (atag.Target) q.l = atag;\n\n          if (comments.length > 0) {\n            q.c = comments;\n            comments = [];\n          }\n\n          if (textp && opts.cellText !== false) q.w = textp;\n\n          if (isstub) {\n            q.t = \"z\";\n            delete q.v;\n          }\n\n          if (!isstub || opts.sheetStubs) {\n            if (!(opts.sheetRows && opts.sheetRows <= R)) {\n              for (var rpt = 0; rpt < rowpeat; ++rpt) {\n                colpeat = parseInt(ctag['number-columns-repeated'] || \"1\", 10);\n\n                if (opts.dense) {\n                  if (!ws[R + rpt]) ws[R + rpt] = [];\n                  ws[R + rpt][C] = rpt == 0 ? q : dup(q);\n\n                  while (--colpeat > 0) {\n                    ws[R + rpt][C + colpeat] = dup(q);\n                  }\n                } else {\n                  ws[encode_cell({\n                    r: R + rpt,\n                    c: C\n                  })] = q;\n\n                  while (--colpeat > 0) {\n                    ws[encode_cell({\n                      r: R + rpt,\n                      c: C + colpeat\n                    })] = dup(q);\n                  }\n                }\n\n                if (range.e.c <= C) range.e.c = C;\n              }\n            }\n          }\n\n          colpeat = parseInt(ctag['number-columns-repeated'] || \"1\", 10);\n          C += colpeat - 1;\n          colpeat = 0;\n          q = {\n            /*:: t:\"\", v:null, z:null, w:\"\",c:[]*/\n          };\n          textp = \"\";\n          textR = [];\n        }\n\n        atag = {}\n        /*:any*/\n        ;\n        break;\n      // 9.1.4 <table:table-cell>\n\n      /* pure state */\n\n      case 'document': // TODO: <office:document> is the root for FODS\n\n      case 'document-content':\n      case '电子表格文档': // 3.1.3.2 <office:document-content>\n\n      case 'spreadsheet':\n      case '主体': // 3.7 <office:spreadsheet>\n\n      case 'scripts': // 3.12 <office:scripts>\n\n      case 'styles': // TODO <office:styles>\n\n      case 'font-face-decls': // 3.14 <office:font-face-decls>\n\n      case 'master-styles':\n        // 3.15.4 <office:master-styles> -- relevant for FODS\n        if (Rn[1] === '/') {\n          if ((tmp = state.pop())[0] !== Rn[3]) throw \"Bad state: \" + tmp;\n        } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') state.push([Rn[3], true]);\n\n        break;\n\n      case 'annotation':\n        // 14.1 <office:annotation>\n        if (Rn[1] === '/') {\n          if ((tmp = state.pop())[0] !== Rn[3]) throw \"Bad state: \" + tmp;\n          comment.t = textp;\n          if (textR.length)\n            /*::(*/\n            comment\n            /*:: :any)*/\n            .R = textR;\n          comment.a = creator;\n          comments.push(comment);\n        } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') {\n          state.push([Rn[3], false]);\n        }\n\n        creator = \"\";\n        creatoridx = 0;\n        textp = \"\";\n        textpidx = 0;\n        textR = [];\n        break;\n\n      case 'creator':\n        // 4.3.2.7 <dc:creator>\n        if (Rn[1] === '/') {\n          creator = str.slice(creatoridx, Rn.index);\n        } else creatoridx = Rn.index + Rn[0].length;\n\n        break;\n\n      /* ignore state */\n\n      case 'meta':\n      case '元数据': // TODO: <office:meta> <uof:元数据> FODS/UOF\n\n      case 'settings': // TODO: <office:settings>\n\n      case 'config-item-set': // TODO: <office:config-item-set>\n\n      case 'config-item-map-indexed': // TODO: <office:config-item-map-indexed>\n\n      case 'config-item-map-entry': // TODO: <office:config-item-map-entry>\n\n      case 'config-item-map-named': // TODO: <office:config-item-map-entry>\n\n      case 'shapes': // 9.2.8 <table:shapes>\n\n      case 'frame': // 10.4.2 <draw:frame>\n\n      case 'text-box': // 10.4.3 <draw:text-box>\n\n      case 'image': // 10.4.4 <draw:image>\n\n      case 'data-pilot-tables': // 9.6.2 <table:data-pilot-tables>\n\n      case 'list-style': // 16.30 <text:list-style>\n\n      case 'form': // 13.13 <form:form>\n\n      case 'dde-links': // 9.8 <table:dde-links>\n\n      case 'event-listeners': // TODO\n\n      case 'chart':\n        // TODO\n        if (Rn[1] === '/') {\n          if ((tmp = state.pop())[0] !== Rn[3]) throw \"Bad state: \" + tmp;\n        } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') state.push([Rn[3], false]);\n\n        textp = \"\";\n        textpidx = 0;\n        textR = [];\n        break;\n\n      case 'scientific-number':\n        // TODO: <number:scientific-number>\n        break;\n\n      case 'currency-symbol':\n        // TODO: <number:currency-symbol>\n        break;\n\n      case 'currency-style':\n        // TODO: <number:currency-style>\n        break;\n\n      case 'number-style': // 16.27.2 <number:number-style>\n\n      case 'percentage-style': // 16.27.9 <number:percentage-style>\n\n      case 'date-style': // 16.27.10 <number:date-style>\n\n      case 'time-style':\n        // 16.27.18 <number:time-style>\n        if (Rn[1] === '/') {\n          number_format_map[NFtag.name] = NF;\n          if ((tmp = state.pop())[0] !== Rn[3]) throw \"Bad state: \" + tmp;\n        } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') {\n          NF = \"\";\n          NFtag = parsexmltag(Rn[0], false);\n          state.push([Rn[3], true]);\n        }\n\n        break;\n\n      case 'script':\n        break;\n      // 3.13 <office:script>\n\n      case 'libraries':\n        break;\n      // TODO: <ooo:libraries>\n\n      case 'automatic-styles':\n        break;\n      // 3.15.3 <office:automatic-styles>\n\n      case 'default-style': // TODO: <style:default-style>\n\n      case 'page-layout':\n        break;\n      // TODO: <style:page-layout>\n\n      case 'style':\n        // 16.2 <style:style>\n        break;\n\n      case 'map':\n        break;\n      // 16.3 <style:map>\n\n      case 'font-face':\n        break;\n      // 16.21 <style:font-face>\n\n      case 'paragraph-properties':\n        break;\n      // 17.6 <style:paragraph-properties>\n\n      case 'table-properties':\n        break;\n      // 17.15 <style:table-properties>\n\n      case 'table-column-properties':\n        break;\n      // 17.16 <style:table-column-properties>\n\n      case 'table-row-properties':\n        break;\n      // 17.17 <style:table-row-properties>\n\n      case 'table-cell-properties':\n        break;\n      // 17.18 <style:table-cell-properties>\n\n      case 'number':\n        // 16.27.3 <number:number>\n        switch (state[state.length - 1][0]) {\n          case 'time-style':\n          case 'date-style':\n            tag = parsexmltag(Rn[0], false);\n            NF += number_formats_ods[Rn[3]][tag.style === 'long' ? 1 : 0];\n            break;\n        }\n\n        break;\n\n      case 'fraction':\n        break;\n      // TODO 16.27.6 <number:fraction>\n\n      case 'day': // 16.27.11 <number:day>\n\n      case 'month': // 16.27.12 <number:month>\n\n      case 'year': // 16.27.13 <number:year>\n\n      case 'era': // 16.27.14 <number:era>\n\n      case 'day-of-week': // 16.27.15 <number:day-of-week>\n\n      case 'week-of-year': // 16.27.16 <number:week-of-year>\n\n      case 'quarter': // 16.27.17 <number:quarter>\n\n      case 'hours': // 16.27.19 <number:hours>\n\n      case 'minutes': // 16.27.20 <number:minutes>\n\n      case 'seconds': // 16.27.21 <number:seconds>\n\n      case 'am-pm':\n        // 16.27.22 <number:am-pm>\n        switch (state[state.length - 1][0]) {\n          case 'time-style':\n          case 'date-style':\n            tag = parsexmltag(Rn[0], false);\n            NF += number_formats_ods[Rn[3]][tag.style === 'long' ? 1 : 0];\n            break;\n        }\n\n        break;\n\n      case 'boolean-style':\n        break;\n      // 16.27.23 <number:boolean-style>\n\n      case 'boolean':\n        break;\n      // 16.27.24 <number:boolean>\n\n      case 'text-style':\n        break;\n      // 16.27.25 <number:text-style>\n\n      case 'text':\n        // 16.27.26 <number:text>\n        if (Rn[0].slice(-2) === \"/>\") break;else if (Rn[1] === \"/\") switch (state[state.length - 1][0]) {\n          case 'number-style':\n          case 'date-style':\n          case 'time-style':\n            NF += str.slice(pidx, Rn.index);\n            break;\n        } else pidx = Rn.index + Rn[0].length;\n        break;\n\n      case 'named-range':\n        // 9.4.12 <table:named-range>\n        tag = parsexmltag(Rn[0], false);\n        _Ref = ods_to_csf_3D(tag['cell-range-address']);\n        var nrange = {\n          Name: tag.name,\n          Ref: _Ref[0] + '!' + _Ref[1]\n        }\n        /*:any*/\n        ;\n        if (intable) nrange.Sheet = SheetNames.length;\n        WB.Names.push(nrange);\n        break;\n\n      case 'text-content':\n        break;\n      // 16.27.27 <number:text-content>\n\n      case 'text-properties':\n        break;\n      // 16.27.27 <style:text-properties>\n\n      case 'embedded-text':\n        break;\n      // 16.27.4 <number:embedded-text>\n\n      case 'body':\n      case '电子表格':\n        break;\n      // 3.3 16.9.6 19.726.3\n\n      case 'forms':\n        break;\n      // 12.25.2 13.2\n\n      case 'table-column':\n        break;\n      // 9.1.6 <table:table-column>\n\n      case 'table-header-rows':\n        break;\n      // 9.1.7 <table:table-header-rows>\n\n      case 'table-rows':\n        break;\n      // 9.1.12 <table:table-rows>\n\n      /* TODO: outline levels */\n\n      case 'table-column-group':\n        break;\n      // 9.1.10 <table:table-column-group>\n\n      case 'table-header-columns':\n        break;\n      // 9.1.11 <table:table-header-columns>\n\n      case 'table-columns':\n        break;\n      // 9.1.12 <table:table-columns>\n\n      case 'null-date':\n        break;\n      // 9.4.2 <table:null-date> TODO: date1904\n\n      case 'graphic-properties':\n        break;\n      // 17.21 <style:graphic-properties>\n\n      case 'calculation-settings':\n        break;\n      // 9.4.1 <table:calculation-settings>\n\n      case 'named-expressions':\n        break;\n      // 9.4.11 <table:named-expressions>\n\n      case 'label-range':\n        break;\n      // 9.4.9 <table:label-range>\n\n      case 'label-ranges':\n        break;\n      // 9.4.10 <table:label-ranges>\n\n      case 'named-expression':\n        break;\n      // 9.4.13 <table:named-expression>\n\n      case 'sort':\n        break;\n      // 9.4.19 <table:sort>\n\n      case 'sort-by':\n        break;\n      // 9.4.20 <table:sort-by>\n\n      case 'sort-groups':\n        break;\n      // 9.4.22 <table:sort-groups>\n\n      case 'tab':\n        break;\n      // 6.1.4 <text:tab>\n\n      case 'line-break':\n        break;\n      // 6.1.5 <text:line-break>\n\n      case 'span':\n        break;\n      // 6.1.7 <text:span>\n\n      case 'p':\n      case '文本串':\n        // 5.1.3 <text:p>\n        if (['master-styles'].indexOf(state[state.length - 1][0]) > -1) break;\n\n        if (Rn[1] === '/' && (!ctag || !ctag['string-value'])) {\n          var ptp = parse_text_p(str.slice(textpidx, Rn.index), textptag);\n          textp = (textp.length > 0 ? textp + \"\\n\" : \"\") + ptp[0];\n        } else {\n          textptag = parsexmltag(Rn[0], false);\n          textpidx = Rn.index + Rn[0].length;\n        }\n\n        break;\n      // <text:p>\n\n      case 's':\n        break;\n      // <text:s>\n\n      case 'database-range':\n        // 9.4.15 <table:database-range>\n        if (Rn[1] === '/') break;\n\n        try {\n          _Ref = ods_to_csf_3D(parsexmltag(Rn[0])['target-range-address']);\n          Sheets[_Ref[0]]['!autofilter'] = {\n            ref: _Ref[1]\n          };\n        } catch (e) {\n          /* empty */\n        }\n\n        break;\n\n      case 'date':\n        break;\n      // <*:date>\n\n      case 'object':\n        break;\n      // 10.4.6.2 <draw:object>\n\n      case 'title':\n      case '标题':\n        break;\n      // <*:title> OR <uof:标题>\n\n      case 'desc':\n        break;\n      // <*:desc>\n\n      case 'binary-data':\n        break;\n      // 10.4.5 TODO: b64 blob\n\n      /* 9.2 Advanced Tables */\n\n      case 'table-source':\n        break;\n      // 9.2.6\n\n      case 'scenario':\n        break;\n      // 9.2.6\n\n      case 'iteration':\n        break;\n      // 9.4.3 <table:iteration>\n\n      case 'content-validations':\n        break;\n      // 9.4.4 <table:\n\n      case 'content-validation':\n        break;\n      // 9.4.5 <table:\n\n      case 'help-message':\n        break;\n      // 9.4.6 <table:\n\n      case 'error-message':\n        break;\n      // 9.4.7 <table:\n\n      case 'database-ranges':\n        break;\n      // 9.4.14 <table:database-ranges>\n\n      case 'filter':\n        break;\n      // 9.5.2 <table:filter>\n\n      case 'filter-and':\n        break;\n      // 9.5.3 <table:filter-and>\n\n      case 'filter-or':\n        break;\n      // 9.5.4 <table:filter-or>\n\n      case 'filter-condition':\n        break;\n      // 9.5.5 <table:filter-condition>\n\n      case 'list-level-style-bullet':\n        break;\n      // 16.31 <text:\n\n      case 'list-level-style-number':\n        break;\n      // 16.32 <text:\n\n      case 'list-level-properties':\n        break;\n      // 17.19 <style:\n\n      /* 7.3 Document Fields */\n\n      case 'sender-firstname': // 7.3.6.2\n\n      case 'sender-lastname': // 7.3.6.3\n\n      case 'sender-initials': // 7.3.6.4\n\n      case 'sender-title': // 7.3.6.5\n\n      case 'sender-position': // 7.3.6.6\n\n      case 'sender-email': // 7.3.6.7\n\n      case 'sender-phone-private': // 7.3.6.8\n\n      case 'sender-fax': // 7.3.6.9\n\n      case 'sender-company': // 7.3.6.10\n\n      case 'sender-phone-work': // 7.3.6.11\n\n      case 'sender-street': // 7.3.6.12\n\n      case 'sender-city': // 7.3.6.13\n\n      case 'sender-postal-code': // 7.3.6.14\n\n      case 'sender-country': // 7.3.6.15\n\n      case 'sender-state-or-province': // 7.3.6.16\n\n      case 'author-name': // 7.3.7.1\n\n      case 'author-initials': // 7.3.7.2\n\n      case 'chapter': // 7.3.8\n\n      case 'file-name': // 7.3.9\n\n      case 'template-name': // 7.3.9\n\n      case 'sheet-name':\n        // 7.3.9\n        break;\n\n      case 'event-listener':\n        break;\n\n      /* TODO: FODS Properties */\n\n      case 'initial-creator':\n      case 'creation-date':\n      case 'print-date':\n      case 'generator':\n      case 'document-statistic':\n      case 'user-defined':\n      case 'editing-duration':\n      case 'editing-cycles':\n        break;\n\n      /* TODO: FODS Config */\n\n      case 'config-item':\n        break;\n\n      /* TODO: style tokens */\n\n      case 'page-number':\n        break;\n      // TODO <text:page-number>\n\n      case 'page-count':\n        break;\n      // TODO <text:page-count>\n\n      case 'time':\n        break;\n      // TODO <text:time>\n\n      /* 9.3 Advanced Table Cells */\n\n      case 'cell-range-source':\n        break;\n      // 9.3.1 <table:\n\n      case 'detective':\n        break;\n      // 9.3.2 <table:\n\n      case 'operation':\n        break;\n      // 9.3.3 <table:\n\n      case 'highlighted-range':\n        break;\n      // 9.3.4 <table:\n\n      /* 9.6 Data Pilot Tables <table: */\n\n      case 'data-pilot-table': // 9.6.3\n\n      case 'source-cell-range': // 9.6.5\n\n      case 'source-service': // 9.6.6\n\n      case 'data-pilot-field': // 9.6.7\n\n      case 'data-pilot-level': // 9.6.8\n\n      case 'data-pilot-subtotals': // 9.6.9\n\n      case 'data-pilot-subtotal': // 9.6.10\n\n      case 'data-pilot-members': // 9.6.11\n\n      case 'data-pilot-member': // 9.6.12\n\n      case 'data-pilot-display-info': // 9.6.13\n\n      case 'data-pilot-sort-info': // 9.6.14\n\n      case 'data-pilot-layout-info': // 9.6.15\n\n      case 'data-pilot-field-reference': // 9.6.16\n\n      case 'data-pilot-groups': // 9.6.17\n\n      case 'data-pilot-group': // 9.6.18\n\n      case 'data-pilot-group-member':\n        // 9.6.19\n        break;\n\n      /* 10.3 Drawing Shapes */\n\n      case 'rect':\n        // 10.3.2\n        break;\n\n      /* 14.6 DDE Connections */\n\n      case 'dde-connection-decls': // 14.6.2 <text:\n\n      case 'dde-connection-decl': // 14.6.3 <text:\n\n      case 'dde-link': // 14.6.4 <table:\n\n      case 'dde-source':\n        // 14.6.5 <office:\n        break;\n\n      case 'properties':\n        break;\n      // 13.7 <form:properties>\n\n      case 'property':\n        break;\n      // 13.8 <form:property>\n\n      case 'a':\n        // 6.1.8 hyperlink\n        if (Rn[1] !== '/') {\n          atag = parsexmltag(Rn[0], false);\n          if (!atag.href) break;\n          atag.Target = unescapexml(atag.href);\n          delete atag.href;\n\n          if (atag.Target.charAt(0) == \"#\" && atag.Target.indexOf(\".\") > -1) {\n            _Ref = ods_to_csf_3D(atag.Target.slice(1));\n            atag.Target = \"#\" + _Ref[0] + \"!\" + _Ref[1];\n          } else if (atag.Target.match(/^\\.\\.[\\\\\\/]/)) atag.Target = atag.Target.slice(3);\n        }\n\n        break;\n\n      /* non-standard */\n\n      case 'table-protection':\n        break;\n\n      case 'data-pilot-grand-total':\n        break;\n      // <table:\n\n      case 'office-document-common-attrs':\n        break;\n      // bare\n\n      default:\n        switch (Rn[2]) {\n          case 'dc:': // TODO: properties\n\n          case 'calcext:': // ignore undocumented extensions\n\n          case 'loext:': // ignore undocumented extensions\n\n          case 'ooo:': // ignore undocumented extensions\n\n          case 'chartooo:': // ignore undocumented extensions\n\n          case 'draw:': // TODO: drawing\n\n          case 'style:': // TODO: styles\n\n          case 'chart:': // TODO: charts\n\n          case 'form:': // TODO: forms\n\n          case 'uof:': // TODO: uof\n\n          case '表:': // TODO: uof\n\n          case '字:':\n            // TODO: uof\n            break;\n\n          default:\n            if (opts.WTF) throw new Error(Rn);\n        }\n\n    }\n  }\n\n  var out\n  /*:Workbook*/\n  = {\n    Sheets: Sheets,\n    SheetNames: SheetNames,\n    Workbook: WB\n  }\n  /*:any*/\n  ;\n  if (opts.bookSheets) delete\n  /*::(*/\n  out\n  /*:: :any)*/\n  .Sheets;\n  return out;\n}\n\nfunction parse_ods(zip\n/*:ZIPFile*/\n, opts\n/*:?ParseOpts*/\n)\n/*:Workbook*/\n{\n  opts = opts || {}\n  /*:any*/\n  ;\n  if (safegetzipfile(zip, 'META-INF/manifest.xml')) parse_manifest(getzipdata(zip, 'META-INF/manifest.xml'), opts);\n  var content = getzipstr(zip, 'content.xml');\n  if (!content) throw new Error(\"Missing content.xml in ODS / UOF file\");\n  var wb = parse_content_xml(utf8read(content), opts);\n  if (safegetzipfile(zip, 'meta.xml')) wb.Props = parse_core_props(getzipdata(zip, 'meta.xml'));\n  return wb;\n}\n\nfunction parse_fods(data\n/*:string*/\n, opts\n/*:?ParseOpts*/\n)\n/*:Workbook*/\n{\n  return parse_content_xml(data, opts);\n}\n/* OpenDocument */\n\n\nvar write_styles_ods\n/*:{(wb:any, opts:any):string}*/\n= /* @__PURE__ */function () {\n  var master_styles = ['<office:master-styles>', '<style:master-page style:name=\"mp1\" style:page-layout-name=\"mp1\">', '<style:header/>', '<style:header-left style:display=\"false\"/>', '<style:footer/>', '<style:footer-left style:display=\"false\"/>', '</style:master-page>', '</office:master-styles>'].join(\"\");\n  var payload = '<office:document-styles ' + wxt_helper({\n    'xmlns:office': \"urn:oasis:names:tc:opendocument:xmlns:office:1.0\",\n    'xmlns:table': \"urn:oasis:names:tc:opendocument:xmlns:table:1.0\",\n    'xmlns:style': \"urn:oasis:names:tc:opendocument:xmlns:style:1.0\",\n    'xmlns:text': \"urn:oasis:names:tc:opendocument:xmlns:text:1.0\",\n    'xmlns:draw': \"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0\",\n    'xmlns:fo': \"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0\",\n    'xmlns:xlink': \"http://www.w3.org/1999/xlink\",\n    'xmlns:dc': \"http://purl.org/dc/elements/1.1/\",\n    'xmlns:number': \"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0\",\n    'xmlns:svg': \"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0\",\n    'xmlns:of': \"urn:oasis:names:tc:opendocument:xmlns:of:1.2\",\n    'office:version': \"1.2\"\n  }) + '>' + master_styles + '</office:document-styles>';\n  return function\n    /*::wb, opts*/\n  wso() {\n    return XML_HEADER + payload;\n  };\n}();\n\nvar write_content_ods\n/*:{(wb:any, opts:any):string}*/\n= /* @__PURE__ */function () {\n  /* 6.1.2 White Space Characters */\n  var write_text_p = function write_text_p(text\n  /*:string*/\n  )\n  /*:string*/\n  {\n    return escapexml(text).replace(/  +/g, function ($$) {\n      return '<text:s text:c=\"' + $$.length + '\"/>';\n    }).replace(/\\t/g, \"<text:tab/>\").replace(/\\n/g, \"</text:p><text:p>\").replace(/^ /, \"<text:s/>\").replace(/ $/, \"<text:s/>\");\n  };\n\n  var null_cell_xml = '          <table:table-cell />\\n';\n  var covered_cell_xml = '          <table:covered-table-cell/>\\n';\n\n  var write_ws = function write_ws(ws, wb\n  /*:Workbook*/\n  , i\n  /*:number*/\n\n  /*::, opts*/\n  )\n  /*:string*/\n  {\n    /* Section 9 Tables */\n    var o\n    /*:Array<string>*/\n    = [];\n    o.push('      <table:table table:name=\"' + escapexml(wb.SheetNames[i]) + '\" table:style-name=\"ta1\">\\n');\n    var R = 0,\n        C = 0,\n        range = decode_range(ws['!ref'] || \"A1\");\n    var marr\n    /*:Array<Range>*/\n    = ws['!merges'] || [],\n        mi = 0;\n    var dense = Array.isArray(ws);\n\n    if (ws[\"!cols\"]) {\n      for (C = 0; C <= range.e.c; ++C) {\n        o.push('        <table:table-column' + (ws[\"!cols\"][C] ? ' table:style-name=\"co' + ws[\"!cols\"][C].ods + '\"' : '') + '></table:table-column>\\n');\n      }\n    }\n\n    var H = \"\",\n        ROWS = ws[\"!rows\"] || [];\n\n    for (R = 0; R < range.s.r; ++R) {\n      H = ROWS[R] ? ' table:style-name=\"ro' + ROWS[R].ods + '\"' : \"\";\n      o.push('        <table:table-row' + H + '></table:table-row>\\n');\n    }\n\n    for (; R <= range.e.r; ++R) {\n      H = ROWS[R] ? ' table:style-name=\"ro' + ROWS[R].ods + '\"' : \"\";\n      o.push('        <table:table-row' + H + '>\\n');\n\n      for (C = 0; C < range.s.c; ++C) {\n        o.push(null_cell_xml);\n      }\n\n      for (; C <= range.e.c; ++C) {\n        var skip = false,\n            ct = {},\n            textp = \"\";\n\n        for (mi = 0; mi != marr.length; ++mi) {\n          if (marr[mi].s.c > C) continue;\n          if (marr[mi].s.r > R) continue;\n          if (marr[mi].e.c < C) continue;\n          if (marr[mi].e.r < R) continue;\n          if (marr[mi].s.c != C || marr[mi].s.r != R) skip = true;\n          ct['table:number-columns-spanned'] = marr[mi].e.c - marr[mi].s.c + 1;\n          ct['table:number-rows-spanned'] = marr[mi].e.r - marr[mi].s.r + 1;\n          break;\n        }\n\n        if (skip) {\n          o.push(covered_cell_xml);\n          continue;\n        }\n\n        var ref = encode_cell({\n          r: R,\n          c: C\n        }),\n            cell = dense ? (ws[R] || [])[C] : ws[ref];\n\n        if (cell && cell.f) {\n          ct['table:formula'] = escapexml(csf_to_ods_formula(cell.f));\n\n          if (cell.F) {\n            if (cell.F.slice(0, ref.length) == ref) {\n              var _Fref = decode_range(cell.F);\n\n              ct['table:number-matrix-columns-spanned'] = _Fref.e.c - _Fref.s.c + 1;\n              ct['table:number-matrix-rows-spanned'] = _Fref.e.r - _Fref.s.r + 1;\n            }\n          }\n        }\n\n        if (!cell) {\n          o.push(null_cell_xml);\n          continue;\n        }\n\n        switch (cell.t) {\n          case 'b':\n            textp = cell.v ? 'TRUE' : 'FALSE';\n            ct['office:value-type'] = \"boolean\";\n            ct['office:boolean-value'] = cell.v ? 'true' : 'false';\n            break;\n\n          case 'n':\n            textp = cell.w || String(cell.v || 0);\n            ct['office:value-type'] = \"float\";\n            ct['office:value'] = cell.v || 0;\n            break;\n\n          case 's':\n          case 'str':\n            textp = cell.v == null ? \"\" : cell.v;\n            ct['office:value-type'] = \"string\";\n            break;\n\n          case 'd':\n            textp = cell.w || parseDate(cell.v).toISOString();\n            ct['office:value-type'] = \"date\";\n            ct['office:date-value'] = parseDate(cell.v).toISOString();\n            ct['table:style-name'] = \"ce1\";\n            break;\n          //case 'e':\n\n          default:\n            o.push(null_cell_xml);\n            continue;\n        }\n\n        var text_p = write_text_p(textp);\n\n        if (cell.l && cell.l.Target) {\n          var _tgt = cell.l.Target;\n          _tgt = _tgt.charAt(0) == \"#\" ? \"#\" + csf_to_ods_3D(_tgt.slice(1)) : _tgt; // TODO: choose correct parent path format based on link delimiters\n\n          if (_tgt.charAt(0) != \"#\" && !_tgt.match(/^\\w+:/)) _tgt = '../' + _tgt;\n          text_p = writextag('text:a', text_p, {\n            'xlink:href': _tgt.replace(/&/g, \"&amp;\")\n          });\n        }\n\n        o.push('          ' + writextag('table:table-cell', writextag('text:p', text_p, {}), ct) + '\\n');\n      }\n\n      o.push('        </table:table-row>\\n');\n    }\n\n    o.push('      </table:table>\\n');\n    return o.join(\"\");\n  };\n\n  var write_automatic_styles_ods = function write_automatic_styles_ods(o\n  /*:Array<string>*/\n  , wb) {\n    o.push(' <office:automatic-styles>\\n');\n    o.push('  <number:date-style style:name=\"N37\" number:automatic-order=\"true\">\\n');\n    o.push('   <number:month number:style=\"long\"/>\\n');\n    o.push('   <number:text>/</number:text>\\n');\n    o.push('   <number:day number:style=\"long\"/>\\n');\n    o.push('   <number:text>/</number:text>\\n');\n    o.push('   <number:year/>\\n');\n    o.push('  </number:date-style>\\n');\n    /* column styles */\n\n    var cidx = 0;\n    wb.SheetNames.map(function (n) {\n      return wb.Sheets[n];\n    }).forEach(function (ws) {\n      if (!ws) return;\n\n      if (ws[\"!cols\"]) {\n        for (var C = 0; C < ws[\"!cols\"].length; ++C) {\n          if (ws[\"!cols\"][C]) {\n            var colobj = ws[\"!cols\"][C];\n            if (colobj.width == null && colobj.wpx == null && colobj.wch == null) continue;\n            process_col(colobj);\n            colobj.ods = cidx;\n            var w = ws[\"!cols\"][C].wpx + \"px\";\n            o.push('  <style:style style:name=\"co' + cidx + '\" style:family=\"table-column\">\\n');\n            o.push('   <style:table-column-properties fo:break-before=\"auto\" style:column-width=\"' + w + '\"/>\\n');\n            o.push('  </style:style>\\n');\n            ++cidx;\n          }\n        }\n      }\n    });\n    /* row styles */\n\n    var ridx = 0;\n    wb.SheetNames.map(function (n) {\n      return wb.Sheets[n];\n    }).forEach(function (ws) {\n      if (!ws) return;\n\n      if (ws[\"!rows\"]) {\n        for (var R = 0; R < ws[\"!rows\"].length; ++R) {\n          if (ws[\"!rows\"][R]) {\n            ws[\"!rows\"][R].ods = ridx;\n            var h = ws[\"!rows\"][R].hpx + \"px\";\n            o.push('  <style:style style:name=\"ro' + ridx + '\" style:family=\"table-row\">\\n');\n            o.push('   <style:table-row-properties fo:break-before=\"auto\" style:row-height=\"' + h + '\"/>\\n');\n            o.push('  </style:style>\\n');\n            ++ridx;\n          }\n        }\n      }\n    });\n    /* table */\n\n    o.push('  <style:style style:name=\"ta1\" style:family=\"table\" style:master-page-name=\"mp1\">\\n');\n    o.push('   <style:table-properties table:display=\"true\" style:writing-mode=\"lr-tb\"/>\\n');\n    o.push('  </style:style>\\n');\n    /* table cells, text */\n\n    o.push('  <style:style style:name=\"ce1\" style:family=\"table-cell\" style:parent-style-name=\"Default\" style:data-style-name=\"N37\"/>\\n');\n    /* page-layout */\n\n    o.push(' </office:automatic-styles>\\n');\n  };\n\n  return function wcx(wb, opts) {\n    var o = [XML_HEADER];\n    /* 3.1.3.2 */\n\n    var attr = wxt_helper({\n      'xmlns:office': \"urn:oasis:names:tc:opendocument:xmlns:office:1.0\",\n      'xmlns:table': \"urn:oasis:names:tc:opendocument:xmlns:table:1.0\",\n      'xmlns:style': \"urn:oasis:names:tc:opendocument:xmlns:style:1.0\",\n      'xmlns:text': \"urn:oasis:names:tc:opendocument:xmlns:text:1.0\",\n      'xmlns:draw': \"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0\",\n      'xmlns:fo': \"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0\",\n      'xmlns:xlink': \"http://www.w3.org/1999/xlink\",\n      'xmlns:dc': \"http://purl.org/dc/elements/1.1/\",\n      'xmlns:meta': \"urn:oasis:names:tc:opendocument:xmlns:meta:1.0\",\n      'xmlns:number': \"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0\",\n      'xmlns:presentation': \"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0\",\n      'xmlns:svg': \"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0\",\n      'xmlns:chart': \"urn:oasis:names:tc:opendocument:xmlns:chart:1.0\",\n      'xmlns:dr3d': \"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0\",\n      'xmlns:math': \"http://www.w3.org/1998/Math/MathML\",\n      'xmlns:form': \"urn:oasis:names:tc:opendocument:xmlns:form:1.0\",\n      'xmlns:script': \"urn:oasis:names:tc:opendocument:xmlns:script:1.0\",\n      'xmlns:ooo': \"http://openoffice.org/2004/office\",\n      'xmlns:ooow': \"http://openoffice.org/2004/writer\",\n      'xmlns:oooc': \"http://openoffice.org/2004/calc\",\n      'xmlns:dom': \"http://www.w3.org/2001/xml-events\",\n      'xmlns:xforms': \"http://www.w3.org/2002/xforms\",\n      'xmlns:xsd': \"http://www.w3.org/2001/XMLSchema\",\n      'xmlns:xsi': \"http://www.w3.org/2001/XMLSchema-instance\",\n      'xmlns:sheet': \"urn:oasis:names:tc:opendocument:sh33tjs:1.0\",\n      'xmlns:rpt': \"http://openoffice.org/2005/report\",\n      'xmlns:of': \"urn:oasis:names:tc:opendocument:xmlns:of:1.2\",\n      'xmlns:xhtml': \"http://www.w3.org/1999/xhtml\",\n      'xmlns:grddl': \"http://www.w3.org/2003/g/data-view#\",\n      'xmlns:tableooo': \"http://openoffice.org/2009/table\",\n      'xmlns:drawooo': \"http://openoffice.org/2010/draw\",\n      'xmlns:calcext': \"urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0\",\n      'xmlns:loext': \"urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0\",\n      'xmlns:field': \"urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0\",\n      'xmlns:formx': \"urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0\",\n      'xmlns:css3t': \"http://www.w3.org/TR/css3-text/\",\n      'office:version': \"1.2\"\n    });\n    var fods = wxt_helper({\n      'xmlns:config': \"urn:oasis:names:tc:opendocument:xmlns:config:1.0\",\n      'office:mimetype': \"application/vnd.oasis.opendocument.spreadsheet\"\n    });\n\n    if (opts.bookType == \"fods\") {\n      o.push('<office:document' + attr + fods + '>\\n');\n      o.push(write_meta_ods().replace(/office:document-meta/g, \"office:meta\")); // TODO: settings (equiv of settings.xml for ODS)\n    } else o.push('<office:document-content' + attr + '>\\n'); // o.push('  <office:scripts/>\\n');\n\n\n    write_automatic_styles_ods(o, wb);\n    o.push('  <office:body>\\n');\n    o.push('    <office:spreadsheet>\\n');\n\n    for (var i = 0; i != wb.SheetNames.length; ++i) {\n      o.push(write_ws(wb.Sheets[wb.SheetNames[i]], wb, i, opts));\n    }\n\n    o.push('    </office:spreadsheet>\\n');\n    o.push('  </office:body>\\n');\n    if (opts.bookType == \"fods\") o.push('</office:document>');else o.push('</office:document-content>');\n    return o.join(\"\");\n  };\n}();\n\nfunction write_ods(wb\n/*:any*/\n, opts\n/*:any*/\n) {\n  if (opts.bookType == \"fods\") return write_content_ods(wb, opts);\n  var zip = zip_new();\n  var f = \"\";\n  var manifest\n  /*:Array<Array<string> >*/\n  = [];\n  var rdf\n  /*:Array<[string, string]>*/\n  = [];\n  /* Part 3 Section 3.3 MIME Media Type */\n\n  f = \"mimetype\";\n  zip_add_file(zip, f, \"application/vnd.oasis.opendocument.spreadsheet\");\n  /* Part 1 Section 2.2 Documents */\n\n  f = \"content.xml\";\n  zip_add_file(zip, f, write_content_ods(wb, opts));\n  manifest.push([f, \"text/xml\"]);\n  rdf.push([f, \"ContentFile\"]);\n  /* TODO: these are hard-coded styles to satiate excel */\n\n  f = \"styles.xml\";\n  zip_add_file(zip, f, write_styles_ods(wb, opts));\n  manifest.push([f, \"text/xml\"]);\n  rdf.push([f, \"StylesFile\"]);\n  /* TODO: this is hard-coded to satiate excel */\n\n  f = \"meta.xml\";\n  zip_add_file(zip, f, XML_HEADER + write_meta_ods());\n  manifest.push([f, \"text/xml\"]);\n  rdf.push([f, \"MetadataFile\"]);\n  /* Part 3 Section 6 Metadata Manifest File */\n\n  f = \"manifest.rdf\";\n  zip_add_file(zip, f, write_rdf(rdf\n  /*, opts*/\n  ));\n  manifest.push([f, \"application/rdf+xml\"]);\n  /* Part 3 Section 4 Manifest File */\n\n  f = \"META-INF/manifest.xml\";\n  zip_add_file(zip, f, write_manifest(manifest\n  /*, opts*/\n  ));\n  return zip;\n}\n/*! sheetjs (C) 2013-present SheetJS -- http://sheetjs.com */\n\n\nfunction u8_to_dataview(array) {\n  return new DataView(array.buffer, array.byteOffset, array.byteLength);\n}\n\nfunction u8str(u8) {\n  return typeof TextDecoder != \"undefined\" ? new TextDecoder().decode(u8) : utf8read(a2s(u8));\n}\n\nfunction stru8(str) {\n  return typeof TextEncoder != \"undefined\" ? new TextEncoder().encode(str) : s2a(utf8write(str));\n}\n\nfunction u8contains(body, search) {\n  outer: for (var L = 0; L <= body.length - search.length; ++L) {\n    for (var j = 0; j < search.length; ++j) {\n      if (body[L + j] != search[j]) continue outer;\n    }\n\n    return true;\n  }\n\n  return false;\n}\n\nfunction u8concat(u8a) {\n  var len = u8a.reduce(function (acc, x) {\n    return acc + x.length;\n  }, 0);\n  var out = new Uint8Array(len);\n  var off = 0;\n  u8a.forEach(function (u8) {\n    out.set(u8, off);\n    off += u8.length;\n  });\n  return out;\n}\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}\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\n  for (var j = offset + 13; j >= offset; --j) {\n    mantissa = mantissa * 256 + buf[j];\n  }\n\n  return (buf[offset + 15] & 128 ? -mantissa : mantissa) * Math.pow(10, exp - 6176);\n}\n\nfunction writeDecimal128LE(buf, offset, value) {\n  var exp = Math.floor(value == 0 ? 0 : Math.LOG10E * Math.log(Math.abs(value))) + 6176 - 20;\n  var mantissa = value / Math.pow(10, exp - 6176);\n  buf[offset + 15] |= exp >> 7;\n  buf[offset + 14] |= (exp & 127) << 1;\n\n  for (var i = 0; mantissa >= 1; ++i, mantissa /= 256) {\n    buf[offset + i] = mantissa & 255;\n  }\n\n  buf[offset + 15] |= value >= 0 ? 0 : 128;\n}\n\nfunction parse_varint49(buf, ptr) {\n  var l = ptr ? ptr[0] : 0;\n  var usz = buf[l] & 127;\n\n  varint: if (buf[l++] >= 128) {\n    usz |= (buf[l] & 127) << 7;\n    if (buf[l++] < 128) break varint;\n    usz |= (buf[l] & 127) << 14;\n    if (buf[l++] < 128) break varint;\n    usz |= (buf[l] & 127) << 21;\n    if (buf[l++] < 128) break varint;\n    usz += (buf[l] & 127) * Math.pow(2, 28);\n    ++l;\n    if (buf[l++] < 128) break varint;\n    usz += (buf[l] & 127) * Math.pow(2, 35);\n    ++l;\n    if (buf[l++] < 128) break varint;\n    usz += (buf[l] & 127) * Math.pow(2, 42);\n    ++l;\n    if (buf[l++] < 128) break varint;\n  }\n\n  if (ptr) ptr[0] = l;\n  return usz;\n}\n\nfunction write_varint49(v) {\n  var usz = new Uint8Array(7);\n  usz[0] = v & 127;\n  var L = 1;\n\n  sz: if (v > 127) {\n    usz[L - 1] |= 128;\n    usz[L] = v >> 7 & 127;\n    ++L;\n    if (v <= 16383) break sz;\n    usz[L - 1] |= 128;\n    usz[L] = v >> 14 & 127;\n    ++L;\n    if (v <= 2097151) break sz;\n    usz[L - 1] |= 128;\n    usz[L] = v >> 21 & 127;\n    ++L;\n    if (v <= 268435455) break sz;\n    usz[L - 1] |= 128;\n    usz[L] = v / 256 >>> 21 & 127;\n    ++L;\n    if (v <= 34359738367) break sz;\n    usz[L - 1] |= 128;\n    usz[L] = v / 65536 >>> 21 & 127;\n    ++L;\n    if (v <= 4398046511103) break sz;\n    usz[L - 1] |= 128;\n    usz[L] = v / 16777216 >>> 21 & 127;\n    ++L;\n  }\n\n  return usz.slice(0, L);\n}\n\nfunction varint_to_i32(buf) {\n  var l = 0,\n      i32 = buf[l] & 127;\n\n  varint: if (buf[l++] >= 128) {\n    i32 |= (buf[l] & 127) << 7;\n    if (buf[l++] < 128) break varint;\n    i32 |= (buf[l] & 127) << 14;\n    if (buf[l++] < 128) break varint;\n    i32 |= (buf[l] & 127) << 21;\n    if (buf[l++] < 128) break varint;\n    i32 |= (buf[l] & 127) << 28;\n  }\n\n  return i32;\n}\n\nfunction parse_shallow(buf) {\n  var out = [],\n      ptr = [0];\n\n  while (ptr[0] < buf.length) {\n    var off = ptr[0];\n    var num = parse_varint49(buf, ptr);\n    var type = num & 7;\n    num = Math.floor(num / 8);\n    var len = 0;\n    var res;\n    if (num == 0) break;\n\n    switch (type) {\n      case 0:\n        {\n          var l = ptr[0];\n\n          while (buf[ptr[0]++] >= 128) {\n            ;\n          }\n\n          res = buf.slice(l, ptr[0]);\n        }\n        break;\n\n      case 5:\n        len = 4;\n        res = buf.slice(ptr[0], ptr[0] + len);\n        ptr[0] += len;\n        break;\n\n      case 1:\n        len = 8;\n        res = buf.slice(ptr[0], ptr[0] + len);\n        ptr[0] += len;\n        break;\n\n      case 2:\n        len = parse_varint49(buf, ptr);\n        res = buf.slice(ptr[0], ptr[0] + len);\n        ptr[0] += len;\n        break;\n\n      case 3:\n      case 4:\n      default:\n        throw new Error(\"PB Type \".concat(type, \" for Field \").concat(num, \" at offset \").concat(off));\n    }\n\n    var v = {\n      data: res,\n      type: type\n    };\n    if (out[num] == null) out[num] = [v];else out[num].push(v);\n  }\n\n  return out;\n}\n\nfunction write_shallow(proto) {\n  var out = [];\n  proto.forEach(function (field, idx) {\n    field.forEach(function (item) {\n      if (!item.data) return;\n      out.push(write_varint49(idx * 8 + item.type));\n      if (item.type == 2) out.push(write_varint49(item.data.length));\n      out.push(item.data);\n    });\n  });\n  return u8concat(out);\n}\n\nfunction mappa(data, cb) {\n  return (data == null ? void 0 : data.map(function (d) {\n    return cb(d.data);\n  })) || [];\n}\n\nfunction parse_iwa_file(buf) {\n  var _a;\n\n  var out = [],\n      ptr = [0];\n\n  while (ptr[0] < buf.length) {\n    var len = parse_varint49(buf, ptr);\n    var ai = parse_shallow(buf.slice(ptr[0], ptr[0] + len));\n    ptr[0] += 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.slice(ptr[0], ptr[0] + fl)\n      });\n      ptr[0] += fl;\n    });\n    if ((_a = ai[3]) == null ? void 0 : _a[0]) res.merge = varint_to_i32(ai[3][0].data) >>> 0 > 0;\n    out.push(res);\n  }\n\n  return out;\n}\n\nfunction write_iwa_file(ias) {\n  var bufs = [];\n  ias.forEach(function (ia) {\n    var ai = [];\n    ai[1] = [{\n      data: write_varint49(ia.id),\n      type: 0\n    }];\n    ai[2] = [];\n    if (ia.merge != null) ai[3] = [{\n      data: write_varint49(+!!ia.merge),\n      type: 0\n    }];\n    var midata = [];\n    ia.messages.forEach(function (mi) {\n      midata.push(mi.data);\n      mi.meta[3] = [{\n        type: 0,\n        data: write_varint49(mi.data.length)\n      }];\n      ai[2].push({\n        data: write_shallow(mi.meta),\n        type: 2\n      });\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}\n\nfunction parse_snappy_chunk(type, buf) {\n  if (type != 0) throw new Error(\"Unexpected Snappy chunk type \".concat(type));\n  var ptr = [0];\n  var usz = parse_varint49(buf, ptr);\n  var chunks = [];\n\n  while (ptr[0] < buf.length) {\n    var tag = buf[ptr[0]] & 3;\n\n    if (tag == 0) {\n      var len = buf[ptr[0]++] >> 2;\n      if (len < 60) ++len;else {\n        var c = len - 59;\n        len = buf[ptr[0]];\n        if (c > 1) len |= buf[ptr[0] + 1] << 8;\n        if (c > 2) len |= buf[ptr[0] + 2] << 16;\n        if (c > 3) len |= buf[ptr[0] + 3] << 24;\n        len >>>= 0;\n        len++;\n        ptr[0] += c;\n      }\n      chunks.push(buf.slice(ptr[0], ptr[0] + len));\n      ptr[0] += len;\n      continue;\n    } else {\n      var offset = 0,\n          length = 0;\n\n      if (tag == 1) {\n        length = (buf[ptr[0]] >> 2 & 7) + 4;\n        offset = (buf[ptr[0]++] & 224) << 3;\n        offset |= buf[ptr[0]++];\n      } else {\n        length = (buf[ptr[0]++] >> 2) + 1;\n\n        if (tag == 2) {\n          offset = buf[ptr[0]] | buf[ptr[0] + 1] << 8;\n          ptr[0] += 2;\n        } else {\n          offset = (buf[ptr[0]] | buf[ptr[0] + 1] << 8 | buf[ptr[0] + 2] << 16 | buf[ptr[0] + 3] << 24) >>> 0;\n          ptr[0] += 4;\n        }\n      }\n\n      chunks = [u8concat(chunks)];\n      if (offset == 0) throw new Error(\"Invalid offset 0\");\n      if (offset > chunks[0].length) throw new Error(\"Invalid offset beyond length\");\n\n      if (length >= offset) {\n        chunks.push(chunks[0].slice(-offset));\n        length -= offset;\n\n        while (length >= chunks[chunks.length - 1].length) {\n          chunks.push(chunks[chunks.length - 1]);\n          length -= chunks[chunks.length - 1].length;\n        }\n      }\n\n      chunks.push(chunks[0].slice(-offset, -offset + length));\n    }\n  }\n\n  var o = u8concat(chunks);\n  if (o.length != usz) throw new Error(\"Unexpected length: \".concat(o.length, \" != \").concat(usz));\n  return o;\n}\n\nfunction decompress_iwa_file(buf) {\n  var out = [];\n  var l = 0;\n\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(parse_snappy_chunk(t, buf.slice(l, l + len)));\n    l += len;\n  }\n\n  if (l !== buf.length) throw new Error(\"data is not a valid framed stream!\");\n  return u8concat(out);\n}\n\nfunction compress_iwa_file(buf) {\n  var out = [];\n  var l = 0;\n\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\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\n    out.push(buf.slice(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\n  return u8concat(out);\n}\n\nfunction parse_old_storage(buf, sst, rsst, v) {\n  var dv = u8_to_dataview(buf);\n  var flags = dv.getUint32(4, true);\n  var data_offset = (v > 1 ? 12 : 8) + popcnt(flags & (v > 1 ? 3470 : 398)) * 4;\n  var ridx = -1,\n      sidx = -1,\n      ieee = NaN,\n      dt = new Date(2001, 0, 1);\n\n  if (flags & 512) {\n    ridx = dv.getUint32(data_offset, true);\n    data_offset += 4;\n  }\n\n  data_offset += popcnt(flags & (v > 1 ? 12288 : 4096)) * 4;\n\n  if (flags & 16) {\n    sidx = dv.getUint32(data_offset, true);\n    data_offset += 4;\n  }\n\n  if (flags & 32) {\n    ieee = dv.getFloat64(data_offset, true);\n    data_offset += 8;\n  }\n\n  if (flags & 64) {\n    dt.setTime(dt.getTime() + dv.getFloat64(data_offset, true) * 1e3);\n    data_offset += 8;\n  }\n\n  var ret;\n\n  switch (buf[2]) {\n    case 0:\n      break;\n\n    case 2:\n      ret = {\n        t: \"n\",\n        v: ieee\n      };\n      break;\n\n    case 3:\n      ret = {\n        t: \"s\",\n        v: sst[sidx]\n      };\n      break;\n\n    case 5:\n      ret = {\n        t: \"d\",\n        v: dt\n      };\n      break;\n\n    case 6:\n      ret = {\n        t: \"b\",\n        v: ieee > 0\n      };\n      break;\n\n    case 7:\n      ret = {\n        t: \"n\",\n        v: ieee / 86400\n      };\n      break;\n\n    case 8:\n      ret = {\n        t: \"e\",\n        v: 0\n      };\n      break;\n\n    case 9:\n      {\n        if (ridx > -1) ret = {\n          t: \"s\",\n          v: rsst[ridx]\n        };else if (sidx > -1) ret = {\n          t: \"s\",\n          v: sst[sidx]\n        };else if (!isNaN(ieee)) ret = {\n          t: \"n\",\n          v: ieee\n        };else throw new Error(\"Unsupported cell type \".concat(buf.slice(0, 4)));\n      }\n      break;\n\n    default:\n      throw new Error(\"Unsupported cell type \".concat(buf.slice(0, 4)));\n  }\n\n  return ret;\n}\n\nfunction parse_new_storage(buf, sst, rsst) {\n  var dv = u8_to_dataview(buf);\n  var flags = dv.getUint32(8, true);\n  var data_offset = 12;\n  var ridx = -1,\n      sidx = -1,\n      d128 = NaN,\n      ieee = NaN,\n      dt = new Date(2001, 0, 1);\n\n  if (flags & 1) {\n    d128 = readDecimal128LE(buf, data_offset);\n    data_offset += 16;\n  }\n\n  if (flags & 2) {\n    ieee = dv.getFloat64(data_offset, true);\n    data_offset += 8;\n  }\n\n  if (flags & 4) {\n    dt.setTime(dt.getTime() + dv.getFloat64(data_offset, true) * 1e3);\n    data_offset += 8;\n  }\n\n  if (flags & 8) {\n    sidx = dv.getUint32(data_offset, true);\n    data_offset += 4;\n  }\n\n  if (flags & 16) {\n    ridx = dv.getUint32(data_offset, true);\n    data_offset += 4;\n  }\n\n  var ret;\n\n  switch (buf[1]) {\n    case 0:\n      break;\n\n    case 2:\n      ret = {\n        t: \"n\",\n        v: d128\n      };\n      break;\n\n    case 3:\n      ret = {\n        t: \"s\",\n        v: sst[sidx]\n      };\n      break;\n\n    case 5:\n      ret = {\n        t: \"d\",\n        v: dt\n      };\n      break;\n\n    case 6:\n      ret = {\n        t: \"b\",\n        v: ieee > 0\n      };\n      break;\n\n    case 7:\n      ret = {\n        t: \"n\",\n        v: ieee / 86400\n      };\n      break;\n\n    case 8:\n      ret = {\n        t: \"e\",\n        v: 0\n      };\n      break;\n\n    case 9:\n      {\n        if (ridx > -1) ret = {\n          t: \"s\",\n          v: rsst[ridx]\n        };else throw new Error(\"Unsupported cell type \".concat(buf[1], \" : \").concat(flags & 31, \" : \").concat(buf.slice(0, 4)));\n      }\n      break;\n\n    case 10:\n      ret = {\n        t: \"n\",\n        v: d128\n      };\n      break;\n\n    default:\n      throw new Error(\"Unsupported cell type \".concat(buf[1], \" : \").concat(flags & 31, \" : \").concat(buf.slice(0, 4)));\n  }\n\n  return ret;\n}\n\nfunction write_new_storage(cell, sst) {\n  var out = new Uint8Array(32),\n      dv = u8_to_dataview(out),\n      l = 12,\n      flags = 0;\n  out[0] = 5;\n\n  switch (cell.t) {\n    case \"n\":\n      out[1] = 2;\n      writeDecimal128LE(out, l, cell.v);\n      flags |= 1;\n      l += 16;\n      break;\n\n    case \"b\":\n      out[1] = 6;\n      dv.setFloat64(l, cell.v ? 1 : 0, true);\n      flags |= 2;\n      l += 8;\n      break;\n\n    case \"s\":\n      if (sst.indexOf(cell.v) == -1) throw new Error(\"Value \".concat(cell.v, \" missing from SST!\"));\n      out[1] = 3;\n      dv.setUint32(l, sst.indexOf(cell.v), true);\n      flags |= 8;\n      l += 4;\n      break;\n\n    default:\n      throw \"unsupported cell type \" + cell.t;\n  }\n\n  dv.setUint32(8, flags, true);\n  return out.slice(0, l);\n}\n\nfunction write_old_storage(cell, sst) {\n  var out = new Uint8Array(32),\n      dv = u8_to_dataview(out),\n      l = 12,\n      flags = 0;\n  out[0] = 3;\n\n  switch (cell.t) {\n    case \"n\":\n      out[2] = 2;\n      dv.setFloat64(l, cell.v, true);\n      flags |= 32;\n      l += 8;\n      break;\n\n    case \"b\":\n      out[2] = 6;\n      dv.setFloat64(l, cell.v ? 1 : 0, true);\n      flags |= 32;\n      l += 8;\n      break;\n\n    case \"s\":\n      if (sst.indexOf(cell.v) == -1) throw new Error(\"Value \".concat(cell.v, \" missing from SST!\"));\n      out[2] = 3;\n      dv.setUint32(l, sst.indexOf(cell.v), true);\n      flags |= 16;\n      l += 4;\n      break;\n\n    default:\n      throw \"unsupported cell type \" + cell.t;\n  }\n\n  dv.setUint32(4, flags, true);\n  return out.slice(0, l);\n}\n\nfunction parse_cell_storage(buf, sst, rsst) {\n  switch (buf[0]) {\n    case 0:\n    case 1:\n    case 2:\n    case 3:\n      return parse_old_storage(buf, sst, rsst, buf[0]);\n\n    case 5:\n      return parse_new_storage(buf, sst, rsst);\n\n    default:\n      throw new Error(\"Unsupported payload version \".concat(buf[0]));\n  }\n}\n\nfunction parse_TSP_Reference(buf) {\n  var pb = parse_shallow(buf);\n  return parse_varint49(pb[1][0].data);\n}\n\nfunction write_TSP_Reference(idx) {\n  var out = [];\n  out[1] = [{\n    type: 0,\n    data: write_varint49(idx)\n  }];\n  return write_shallow(out);\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 le = parse_shallow(entry.data);\n    var key = varint_to_i32(le[1][0].data) >>> 0;\n\n    switch (type) {\n      case 1:\n        data[key] = u8str(le[3][0].data);\n        break;\n\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) throw new Error(\"2000 unexpected reference to \".concat(mtype));\n          var tswpsa = parse_shallow(rtpref.data);\n          data[key] = tswpsa[3].map(function (x) {\n            return u8str(x.data);\n          }).join(\"\");\n        }\n        break;\n    }\n  });\n  return data;\n}\n\nfunction parse_TST_TileRowInfo(u8, type) {\n  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;\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\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 throw \"NUMBERS Tile missing \".concat(type, \" cell storage\");\n\n  var width = wide_offsets ? 4 : 1;\n  var used_storage_offsets = u8_to_dataview(used_storage_u8);\n  var offsets = [];\n\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) offsets.push([C, off]);\n  }\n\n  if (offsets.length != cnt) throw \"Expected \".concat(cnt, \" cells, found \").concat(offsets.length);\n  var cells = [];\n\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  }\n\n  if (offsets.length >= 1) cells[offsets[offsets.length - 1][0]] = used_storage.subarray(offsets[offsets.length - 1][1] * width);\n  return {\n    R: R,\n    cells: cells\n  };\n}\n\nfunction parse_TST_Tile(M, root) {\n  var _a;\n\n  var pb = parse_shallow(root.data);\n  var storage = ((_a = pb == null ? void 0 : pb[7]) == null ? void 0 : _a[0]) ? varint_to_i32(pb[7][0].data) >>> 0 > 0 ? 1 : 0 : -1;\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]) acc[x.R] = [];\n      x.cells.forEach(function (cell, C) {\n        if (acc[x.R][C]) 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}\n\nfunction parse_TST_TableModelArchive(M, root, ws) {\n  var _a;\n\n  var pb = parse_shallow(root.data);\n  var range = {\n    s: {\n      r: 0,\n      c: 0\n    },\n    e: {\n      r: 0,\n      c: 0\n    }\n  };\n  range.e.r = (varint_to_i32(pb[6][0].data) >>> 0) - 1;\n  if (range.e.r < 0) 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) throw new Error(\"Invalid col varint \".concat(pb[7][0].data));\n  ws[\"!ref\"] = encode_range(range);\n  var store = parse_shallow(pb[4][0].data);\n  var sst = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[4][0].data)][0]);\n  var rsst = ((_a = store[17]) == null ? void 0 : _a[0]) ? parse_TST_TableDataList(M, M[parse_TSP_Reference(store[17][0].data)][0]) : [];\n  var tile = parse_shallow(store[3][0].data);\n  var _R = 0;\n  tile[1].forEach(function (t) {\n    var tl = parse_shallow(t.data);\n    var ref = M[parse_TSP_Reference(tl[2][0].data)][0];\n    var mtype = varint_to_i32(ref.meta[1][0].data);\n    if (mtype != 6002) throw new Error(\"6001 unexpected reference to \".concat(mtype));\n\n    var _tile = parse_TST_Tile(M, ref);\n\n    _tile.data.forEach(function (row, R) {\n      row.forEach(function (buf, C) {\n        var addr = encode_cell({\n          r: _R + R,\n          c: C\n        });\n        var res = parse_cell_storage(buf, sst, rsst);\n        if (res) ws[addr] = res;\n      });\n    });\n\n    _R += _tile.nrows;\n  });\n}\n\nfunction parse_TST_TableInfoArchive(M, root) {\n  var pb = parse_shallow(root.data);\n  var out = {\n    \"!ref\": \"A1\"\n  };\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) throw new Error(\"6000 unexpected reference to \".concat(mtype));\n  parse_TST_TableModelArchive(M, tableref[0], out);\n  return out;\n}\n\nfunction parse_TN_SheetArchive(M, root) {\n  var _a;\n\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) out.sheets.push(parse_TST_TableInfoArchive(M, m));\n    });\n  });\n  return out;\n}\n\nfunction parse_TN_DocumentArchive(M, root) {\n  var out = book_new();\n  var pb = parse_shallow(root.data);\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\n      if (mtype == 2) {\n        var root2 = parse_TN_SheetArchive(M, m);\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) throw new Error(\"Empty NUMBERS file\");\n  return out;\n}\n\nfunction parse_numbers_iwa(cfb) {\n  var _a, _b, _c, _d;\n\n  var M = {},\n      indices = [];\n  cfb.FullPaths.forEach(function (p) {\n    if (p.match(/\\.iwpv2/)) throw new Error(\"Unsupported password protection\");\n  });\n  cfb.FileIndex.forEach(function (s) {\n    if (!s.name.match(/\\.iwa$/)) return;\n    var o;\n\n    try {\n      o = decompress_iwa_file(s.content);\n    } catch (e) {\n      return console.log(\"?? \" + s.content.length + \" \" + (e.message || e));\n    }\n\n    var packets;\n\n    try {\n      packets = parse_iwa_file(o);\n    } catch (e) {\n      return console.log(\"## \" + (e.message || e));\n    }\n\n    packets.forEach(function (packet) {\n      M[packet.id] = packet.messages;\n      indices.push(packet.id);\n    });\n  });\n  if (!indices.length) throw new Error(\"File has no messages\");\n  var docroot = ((_d = (_c = (_b = (_a = M == null ? void 0 : M[1]) == null ? void 0 : _a[0]) == null ? void 0 : _b.meta) == null ? void 0 : _c[1]) == null ? void 0 : _d[0].data) && varint_to_i32(M[1][0].meta[1][0].data) == 1 && M[1][0];\n  if (!docroot) indices.forEach(function (idx) {\n    M[idx].forEach(function (iwam) {\n      var mtype = varint_to_i32(iwam.meta[1][0].data) >>> 0;\n\n      if (mtype == 1) {\n        if (!docroot) docroot = iwam;else throw new Error(\"Document has multiple roots\");\n      }\n    });\n  });\n  if (!docroot) throw new Error(\"Cannot find Document root\");\n  return parse_TN_DocumentArchive(M, docroot);\n}\n\nfunction write_tile_row(tri, data, SST) {\n  var _a, _b, _c, _d;\n\n  if (!((_a = tri[6]) == null ? void 0 : _a[0]) || !((_b = tri[7]) == null ? void 0 : _b[0])) throw \"Mutation only works on post-BNC storages!\";\n  var wide_offsets = ((_d = (_c = tri[8]) == null ? void 0 : _c[0]) == null ? void 0 : _d.data) && varint_to_i32(tri[8][0].data) > 0 || false;\n  if (wide_offsets) throw \"Math only works with normal offsets\";\n  var cnt = 0;\n  var dv = u8_to_dataview(tri[7][0].data),\n      last_offset = 0,\n      cell_storage = [];\n\n  var _dv = u8_to_dataview(tri[4][0].data),\n      _last_offset = 0,\n      _cell_storage = [];\n\n  for (var C = 0; C < data.length; ++C) {\n    if (data[C] == null) {\n      dv.setUint16(C * 2, 65535, true);\n\n      _dv.setUint16(C * 2, 65535);\n\n      continue;\n    }\n\n    dv.setUint16(C * 2, last_offset, true);\n\n    _dv.setUint16(C * 2, _last_offset, true);\n\n    var celload, _celload;\n\n    switch (typeof data[C]) {\n      case \"string\":\n        celload = write_new_storage({\n          t: \"s\",\n          v: data[C]\n        }, SST);\n        _celload = write_old_storage({\n          t: \"s\",\n          v: data[C]\n        }, SST);\n        break;\n\n      case \"number\":\n        celload = write_new_storage({\n          t: \"n\",\n          v: data[C]\n        }, SST);\n        _celload = write_old_storage({\n          t: \"n\",\n          v: data[C]\n        }, SST);\n        break;\n\n      case \"boolean\":\n        celload = write_new_storage({\n          t: \"b\",\n          v: data[C]\n        }, SST);\n        _celload = write_old_storage({\n          t: \"b\",\n          v: data[C]\n        }, SST);\n        break;\n\n      default:\n        throw new Error(\"Unsupported value \" + data[C]);\n    }\n\n    cell_storage.push(celload);\n    last_offset += celload.length;\n\n    _cell_storage.push(_celload);\n\n    _last_offset += _celload.length;\n    ++cnt;\n  }\n\n  tri[2][0].data = write_varint49(cnt);\n\n  for (; C < tri[7][0].data.length / 2; ++C) {\n    dv.setUint16(C * 2, 65535, true);\n\n    _dv.setUint16(C * 2, 65535, true);\n  }\n\n  tri[6][0].data = u8concat(cell_storage);\n  tri[3][0].data = u8concat(_cell_storage);\n  return cnt;\n}\n\nfunction write_numbers_iwa(wb, opts) {\n  if (!opts || !opts.numbers) throw new Error(\"Must pass a `numbers` option -- check the README\");\n  var ws = wb.Sheets[wb.SheetNames[0]];\n  if (wb.SheetNames.length > 1) console.error(\"The Numbers writer currently writes only the first table\");\n  var range = decode_range(ws[\"!ref\"]);\n  range.s.r = range.s.c = 0;\n  var trunc = false;\n\n  if (range.e.c > 9) {\n    trunc = true;\n    range.e.c = 9;\n  }\n\n  if (range.e.r > 49) {\n    trunc = true;\n    range.e.r = 49;\n  }\n\n  if (trunc) console.error(\"The Numbers writer is currently limited to \".concat(encode_range(range)));\n  var data = sheet_to_json(ws, {\n    range: range,\n    header: 1\n  });\n  var SST = [\"~Sh33tJ5~\"];\n  data.forEach(function (row) {\n    return row.forEach(function (cell) {\n      if (typeof cell == \"string\") SST.push(cell);\n    });\n  });\n  var dependents = {};\n  var indices = [];\n  var cfb = CFB.read(opts.numbers, {\n    type: \"base64\"\n  });\n  cfb.FileIndex.map(function (fi, idx) {\n    return [fi, cfb.FullPaths[idx]];\n  }).forEach(function (row) {\n    var fi = row[0],\n        fp = row[1];\n    if (fi.type != 2) return;\n    if (!fi.name.match(/\\.iwa/)) return;\n    var old_content = fi.content;\n    var raw1 = decompress_iwa_file(old_content);\n    var x2 = parse_iwa_file(raw1);\n    x2.forEach(function (packet2) {\n      indices.push(packet2.id);\n      dependents[packet2.id] = {\n        deps: [],\n        location: fp,\n        type: varint_to_i32(packet2.messages[0].meta[1][0].data)\n      };\n    });\n  });\n  indices.sort(function (x2, y2) {\n    return x2 - y2;\n  });\n  var indices_varint = indices.filter(function (x2) {\n    return x2 > 1;\n  }).map(function (x2) {\n    return [x2, write_varint49(x2)];\n  });\n  cfb.FileIndex.map(function (fi, idx) {\n    return [fi, cfb.FullPaths[idx]];\n  }).forEach(function (row) {\n    var fi = row[0],\n        fp = row[1];\n    if (!fi.name.match(/\\.iwa/)) return;\n    var x2 = parse_iwa_file(decompress_iwa_file(fi.content));\n    x2.forEach(function (ia) {\n      ia.messages.forEach(function (m) {\n        indices_varint.forEach(function (ivi) {\n          if (ia.messages.some(function (mess) {\n            return varint_to_i32(mess.meta[1][0].data) != 11006 && u8contains(mess.data, ivi[1]);\n          })) {\n            dependents[ivi[0]].deps.push(ia.id);\n          }\n        });\n      });\n    });\n  });\n\n  function get_unique_msgid() {\n    for (var i = 927262; i < 2e6; ++i) {\n      if (!dependents[i]) return i;\n    }\n\n    throw new Error(\"Too many messages\");\n  }\n\n  var entry = CFB.find(cfb, dependents[1].location);\n  var x = parse_iwa_file(decompress_iwa_file(entry.content));\n  var docroot;\n\n  for (var xi = 0; xi < x.length; ++xi) {\n    var packet = x[xi];\n    if (packet.id == 1) docroot = packet;\n  }\n\n  var sheetrootref = parse_TSP_Reference(parse_shallow(docroot.messages[0].data)[1][0].data);\n  entry = CFB.find(cfb, dependents[sheetrootref].location);\n  x = parse_iwa_file(decompress_iwa_file(entry.content));\n\n  for (xi = 0; xi < x.length; ++xi) {\n    packet = x[xi];\n    if (packet.id == sheetrootref) docroot = packet;\n  }\n\n  sheetrootref = parse_TSP_Reference(parse_shallow(docroot.messages[0].data)[2][0].data);\n  entry = CFB.find(cfb, dependents[sheetrootref].location);\n  x = parse_iwa_file(decompress_iwa_file(entry.content));\n\n  for (xi = 0; xi < x.length; ++xi) {\n    packet = x[xi];\n    if (packet.id == sheetrootref) docroot = packet;\n  }\n\n  sheetrootref = parse_TSP_Reference(parse_shallow(docroot.messages[0].data)[2][0].data);\n  entry = CFB.find(cfb, dependents[sheetrootref].location);\n  x = parse_iwa_file(decompress_iwa_file(entry.content));\n\n  for (xi = 0; xi < x.length; ++xi) {\n    packet = x[xi];\n    if (packet.id == sheetrootref) docroot = packet;\n  }\n\n  var pb = parse_shallow(docroot.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    var cruidsref = parse_TSP_Reference(pb[46][0].data);\n    var oldbucket = CFB.find(cfb, dependents[cruidsref].location);\n\n    var _x = parse_iwa_file(decompress_iwa_file(oldbucket.content));\n\n    {\n      for (var j = 0; j < _x.length; ++j) {\n        if (_x[j].id == cruidsref) break;\n      }\n\n      if (_x[j].id != cruidsref) throw \"Bad ColumnRowUIDMapArchive\";\n      var cruids = parse_shallow(_x[j].messages[0].data);\n      cruids[1] = [];\n      cruids[2] = [], cruids[3] = [];\n\n      for (var C = 0; C <= range.e.c; ++C) {\n        var uuid = [];\n        uuid[1] = uuid[2] = [{\n          type: 0,\n          data: write_varint49(C + 420690)\n        }];\n        cruids[1].push({\n          type: 2,\n          data: write_shallow(uuid)\n        });\n        cruids[2].push({\n          type: 0,\n          data: write_varint49(C)\n        });\n        cruids[3].push({\n          type: 0,\n          data: write_varint49(C)\n        });\n      }\n\n      cruids[4] = [];\n      cruids[5] = [], cruids[6] = [];\n\n      for (var R = 0; R <= range.e.r; ++R) {\n        uuid = [];\n        uuid[1] = uuid[2] = [{\n          type: 0,\n          data: write_varint49(R + 726270)\n        }];\n        cruids[4].push({\n          type: 2,\n          data: write_shallow(uuid)\n        });\n        cruids[5].push({\n          type: 0,\n          data: write_varint49(R)\n        });\n        cruids[6].push({\n          type: 0,\n          data: write_varint49(R)\n        });\n      }\n\n      _x[j].messages[0].data = write_shallow(cruids);\n    }\n    oldbucket.content = compress_iwa_file(write_iwa_file(_x));\n    oldbucket.size = oldbucket.content.length;\n    delete pb[46];\n    var store = parse_shallow(pb[4][0].data);\n    {\n      store[7][0].data = write_varint49(range.e.r + 1);\n      var row_headers = parse_shallow(store[1][0].data);\n      var row_header_ref = parse_TSP_Reference(row_headers[2][0].data);\n      oldbucket = CFB.find(cfb, dependents[row_header_ref].location);\n      _x = parse_iwa_file(decompress_iwa_file(oldbucket.content));\n      {\n        if (_x[0].id != row_header_ref) throw \"Bad HeaderStorageBucket\";\n        var base_bucket = parse_shallow(_x[0].messages[0].data);\n\n        for (R = 0; R < data.length; ++R) {\n          var _bucket = parse_shallow(base_bucket[2][0].data);\n\n          _bucket[1][0].data = write_varint49(R);\n          _bucket[4][0].data = write_varint49(data[R].length);\n          base_bucket[2][R] = {\n            type: base_bucket[2][0].type,\n            data: write_shallow(_bucket)\n          };\n        }\n\n        _x[0].messages[0].data = write_shallow(base_bucket);\n      }\n      oldbucket.content = compress_iwa_file(write_iwa_file(_x));\n      oldbucket.size = oldbucket.content.length;\n      var col_header_ref = parse_TSP_Reference(store[2][0].data);\n      oldbucket = CFB.find(cfb, dependents[col_header_ref].location);\n      _x = parse_iwa_file(decompress_iwa_file(oldbucket.content));\n      {\n        if (_x[0].id != col_header_ref) throw \"Bad HeaderStorageBucket\";\n        base_bucket = parse_shallow(_x[0].messages[0].data);\n\n        for (C = 0; C <= range.e.c; ++C) {\n          _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] = {\n            type: base_bucket[2][0].type,\n            data: write_shallow(_bucket)\n          };\n        }\n\n        _x[0].messages[0].data = write_shallow(base_bucket);\n      }\n      oldbucket.content = compress_iwa_file(write_iwa_file(_x));\n      oldbucket.size = oldbucket.content.length;\n      var sstref = parse_TSP_Reference(store[4][0].data);\n\n      (function () {\n        var sentry = CFB.find(cfb, dependents[sstref].location);\n        var sx = parse_iwa_file(decompress_iwa_file(sentry.content));\n        var sstroot;\n\n        for (var sxi = 0; sxi < sx.length; ++sxi) {\n          var packet2 = sx[sxi];\n          if (packet2.id == sstref) sstroot = packet2;\n        }\n\n        var sstdata = parse_shallow(sstroot.messages[0].data);\n        {\n          sstdata[3] = [];\n          var newsst = [];\n          SST.forEach(function (str, i) {\n            newsst[1] = [{\n              type: 0,\n              data: write_varint49(i)\n            }];\n            newsst[2] = [{\n              type: 0,\n              data: write_varint49(1)\n            }];\n            newsst[3] = [{\n              type: 2,\n              data: stru8(str)\n            }];\n            sstdata[3].push({\n              type: 2,\n              data: write_shallow(newsst)\n            });\n          });\n        }\n        sstroot.messages[0].data = write_shallow(sstdata);\n        var sy = write_iwa_file(sx);\n        var raw32 = compress_iwa_file(sy);\n        sentry.content = raw32;\n        sentry.size = sentry.content.length;\n      })();\n\n      var tile = parse_shallow(store[3][0].data);\n      {\n        var t = tile[1][0];\n        delete tile[2];\n        var tl = parse_shallow(t.data);\n        {\n          var tileref = parse_TSP_Reference(tl[2][0].data);\n\n          (function () {\n            var tentry = CFB.find(cfb, dependents[tileref].location);\n            var tx = parse_iwa_file(decompress_iwa_file(tentry.content));\n            var tileroot;\n\n            for (var sxi = 0; sxi < tx.length; ++sxi) {\n              var packet2 = tx[sxi];\n              if (packet2.id == tileref) tileroot = packet2;\n            }\n\n            var tiledata = parse_shallow(tileroot.messages[0].data);\n            {\n              delete tiledata[6];\n              delete tile[7];\n              var rowload = new Uint8Array(tiledata[5][0].data);\n              tiledata[5] = [];\n              var cnt = 0;\n\n              for (var R2 = 0; R2 <= range.e.r; ++R2) {\n                var tilerow = parse_shallow(rowload);\n                cnt += write_tile_row(tilerow, data[R2], SST);\n                tilerow[1][0].data = write_varint49(R2);\n                tiledata[5].push({\n                  data: write_shallow(tilerow),\n                  type: 2\n                });\n              }\n\n              tiledata[1] = [{\n                type: 0,\n                data: write_varint49(range.e.c + 1)\n              }];\n              tiledata[2] = [{\n                type: 0,\n                data: write_varint49(range.e.r + 1)\n              }];\n              tiledata[3] = [{\n                type: 0,\n                data: write_varint49(cnt)\n              }];\n              tiledata[4] = [{\n                type: 0,\n                data: write_varint49(range.e.r + 1)\n              }];\n            }\n            tileroot.messages[0].data = write_shallow(tiledata);\n            var ty = write_iwa_file(tx);\n            var raw32 = compress_iwa_file(ty);\n            tentry.content = raw32;\n            tentry.size = tentry.content.length;\n          })();\n        }\n        t.data = write_shallow(tl);\n      }\n      store[3][0].data = write_shallow(tile);\n    }\n    pb[4][0].data = write_shallow(store);\n  }\n  docroot.messages[0].data = write_shallow(pb);\n  var y = write_iwa_file(x);\n  var raw3 = compress_iwa_file(y);\n  entry.content = raw3;\n  entry.size = entry.content.length;\n  return cfb;\n}\n\nfunction fix_opts_func(defaults\n/*:Array<Array<any> >*/\n)\n/*:{(o:any):void}*/\n{\n  return function fix_opts(opts) {\n    for (var i = 0; i != defaults.length; ++i) {\n      var d = defaults[i];\n      if (opts[d[0]] === undefined) opts[d[0]] = d[1];\n      if (d[2] === 'n') opts[d[0]] = Number(opts[d[0]]);\n    }\n  };\n}\n\nfunction fix_read_opts(opts) {\n  fix_opts_func([['cellNF', false],\n  /* emit cell number format string as .z */\n  ['cellHTML', true],\n  /* emit html string as .h */\n  ['cellFormula', true],\n  /* emit formulae as .f */\n  ['cellStyles', false],\n  /* emits style/theme as .s */\n  ['cellText', true],\n  /* emit formatted text as .w */\n  ['cellDates', false],\n  /* emit date cells with type `d` */\n  ['sheetStubs', false],\n  /* emit empty cells */\n  ['sheetRows', 0, 'n'],\n  /* read n rows (0 = read all rows) */\n  ['bookDeps', false],\n  /* parse calculation chains */\n  ['bookSheets', false],\n  /* only try to get sheet names (no Sheets) */\n  ['bookProps', false],\n  /* only try to get properties (no Sheets) */\n  ['bookFiles', false],\n  /* include raw file structure (keys, files, cfb) */\n  ['bookVBA', false],\n  /* include vba raw data (vbaraw) */\n  ['password', ''],\n  /* password */\n  ['WTF', false]\n  /* WTF mode (throws errors) */\n  ])(opts);\n}\n\nfunction fix_write_opts(opts) {\n  fix_opts_func([['cellDates', false],\n  /* write date cells with type `d` */\n  ['bookSST', false],\n  /* Generate Shared String Table */\n  ['bookType', 'xlsx'],\n  /* Type of workbook (xlsx/m/b) */\n  ['compression', false],\n  /* Use file compression */\n  ['WTF', false]\n  /* WTF mode (throws errors) */\n  ])(opts);\n}\n\nfunction get_sheet_type(n\n/*:string*/\n)\n/*:string*/\n{\n  if (RELS.WS.indexOf(n) > -1) return \"sheet\";\n  if (RELS.CS && n == RELS.CS) return \"chart\";\n  if (RELS.DS && n == RELS.DS) return \"dialog\";\n  if (RELS.MS && n == RELS.MS) return \"macro\";\n  return n && n.length ? n : \"sheet\";\n}\n\nfunction safe_parse_wbrels(wbrels, sheets) {\n  if (!wbrels) return 0;\n\n  try {\n    wbrels = sheets.map(function pwbr(w) {\n      if (!w.id) w.id = w.strRelID;\n      return [w.name, wbrels['!id'][w.id].Target, get_sheet_type(wbrels['!id'][w.id].Type)];\n    });\n  } catch (e) {\n    return null;\n  }\n\n  return !wbrels || wbrels.length === 0 ? null : wbrels;\n}\n\nfunction safe_parse_sheet(zip, path\n/*:string*/\n, relsPath\n/*:string*/\n, sheet, idx\n/*:number*/\n, sheetRels, sheets, stype\n/*:string*/\n, opts, wb, themes, styles) {\n  try {\n    sheetRels[sheet] = parse_rels(getzipstr(zip, relsPath, true), path);\n    var data = getzipdata(zip, path);\n\n    var _ws;\n\n    switch (stype) {\n      case 'sheet':\n        _ws = parse_ws(data, path, idx, opts, sheetRels[sheet], wb, themes, styles);\n        break;\n\n      case 'chart':\n        _ws = parse_cs(data, path, idx, opts, sheetRels[sheet], wb, themes, styles);\n        if (!_ws || !_ws['!drawel']) break;\n        var dfile = resolve_path(_ws['!drawel'].Target, path);\n        var drelsp = get_rels_path(dfile);\n        var draw = parse_drawing(getzipstr(zip, dfile, true), parse_rels(getzipstr(zip, drelsp, true), dfile));\n        var chartp = resolve_path(draw, dfile);\n        var crelsp = get_rels_path(chartp);\n        _ws = parse_chart(getzipstr(zip, chartp, true), chartp, opts, parse_rels(getzipstr(zip, crelsp, true), chartp), wb, _ws);\n        break;\n\n      case 'macro':\n        _ws = parse_ms(data, path, idx, opts, sheetRels[sheet], wb, themes, styles);\n        break;\n\n      case 'dialog':\n        _ws = parse_ds(data, path, idx, opts, sheetRels[sheet], wb, themes, styles);\n        break;\n\n      default:\n        throw new Error(\"Unrecognized sheet type \" + stype);\n    }\n\n    sheets[sheet] = _ws;\n    /* scan rels for comments and threaded comments */\n\n    var tcomments = [];\n    if (sheetRels && sheetRels[sheet]) keys(sheetRels[sheet]).forEach(function (n) {\n      var dfile = \"\";\n\n      if (sheetRels[sheet][n].Type == RELS.CMNT) {\n        dfile = resolve_path(sheetRels[sheet][n].Target, path);\n        var comments = parse_cmnt(getzipdata(zip, dfile, true), dfile, opts);\n        if (!comments || !comments.length) return;\n        sheet_insert_comments(_ws, comments, false);\n      }\n\n      if (sheetRels[sheet][n].Type == RELS.TCMNT) {\n        dfile = resolve_path(sheetRels[sheet][n].Target, path);\n        tcomments = tcomments.concat(parse_tcmnt_xml(getzipdata(zip, dfile, true), opts));\n      }\n    });\n    if (tcomments && tcomments.length) sheet_insert_comments(_ws, tcomments, true, opts.people || []);\n  } catch (e) {\n    if (opts.WTF) throw e;\n  }\n}\n\nfunction strip_front_slash(x\n/*:string*/\n)\n/*:string*/\n{\n  return x.charAt(0) == '/' ? x.slice(1) : x;\n}\n\nfunction parse_zip(zip\n/*:ZIP*/\n, opts\n/*:?ParseOpts*/\n)\n/*:Workbook*/\n{\n  make_ssf();\n  opts = opts || {};\n  fix_read_opts(opts);\n  /* OpenDocument Part 3 Section 2.2.1 OpenDocument Package */\n\n  if (safegetzipfile(zip, 'META-INF/manifest.xml')) return parse_ods(zip, opts);\n  /* UOC */\n\n  if (safegetzipfile(zip, 'objectdata.xml')) return parse_ods(zip, opts);\n  /* Numbers */\n\n  if (safegetzipfile(zip, 'Index/Document.iwa')) {\n    if (typeof Uint8Array == \"undefined\") throw new Error('NUMBERS file parsing requires Uint8Array support');\n\n    if (typeof parse_numbers_iwa != \"undefined\") {\n      if (zip.FileIndex) return parse_numbers_iwa(zip);\n\n      var _zip = CFB.utils.cfb_new();\n\n      zipentries(zip).forEach(function (e) {\n        zip_add_file(_zip, e, getzipbin(zip, e));\n      });\n      return parse_numbers_iwa(_zip);\n    }\n\n    throw new Error('Unsupported NUMBERS file');\n  }\n\n  if (!safegetzipfile(zip, '[Content_Types].xml')) {\n    if (safegetzipfile(zip, 'index.xml.gz')) throw new Error('Unsupported NUMBERS 08 file');\n    if (safegetzipfile(zip, 'index.xml')) throw new Error('Unsupported NUMBERS 09 file');\n    throw new Error('Unsupported ZIP file');\n  }\n\n  var entries = zipentries(zip);\n  var dir = parse_ct(getzipstr(zip, '[Content_Types].xml')\n  /*:?any*/\n  );\n  var xlsb = false;\n  var sheets, binname;\n\n  if (dir.workbooks.length === 0) {\n    binname = \"xl/workbook.xml\";\n    if (getzipdata(zip, binname, true)) dir.workbooks.push(binname);\n  }\n\n  if (dir.workbooks.length === 0) {\n    binname = \"xl/workbook.bin\";\n    if (!getzipdata(zip, binname, true)) throw new Error(\"Could not find workbook\");\n    dir.workbooks.push(binname);\n    xlsb = true;\n  }\n\n  if (dir.workbooks[0].slice(-3) == \"bin\") xlsb = true;\n  var themes = {}\n  /*:any*/\n  ;\n  var styles = {}\n  /*:any*/\n  ;\n\n  if (!opts.bookSheets && !opts.bookProps) {\n    strs = [];\n    if (dir.sst) try {\n      strs = parse_sst(getzipdata(zip, strip_front_slash(dir.sst)), dir.sst, opts);\n    } catch (e) {\n      if (opts.WTF) throw e;\n    }\n    if (opts.cellStyles && dir.themes.length) themes = parse_theme(getzipstr(zip, dir.themes[0].replace(/^\\//, ''), true) || \"\", dir.themes[0], opts);\n    if (dir.style) styles = parse_sty(getzipdata(zip, strip_front_slash(dir.style)), dir.style, themes, opts);\n  }\n  /*var externbooks = */\n\n\n  dir.links.map(function (link) {\n    try {\n      var rels = parse_rels(getzipstr(zip, get_rels_path(strip_front_slash(link))), link);\n      return parse_xlink(getzipdata(zip, strip_front_slash(link)), rels, link, opts);\n    } catch (e) {}\n  });\n  var wb = parse_wb(getzipdata(zip, strip_front_slash(dir.workbooks[0])), dir.workbooks[0], opts);\n  var props = {},\n      propdata = \"\";\n\n  if (dir.coreprops.length) {\n    propdata = getzipdata(zip, strip_front_slash(dir.coreprops[0]), true);\n    if (propdata) props = parse_core_props(propdata);\n\n    if (dir.extprops.length !== 0) {\n      propdata = getzipdata(zip, strip_front_slash(dir.extprops[0]), true);\n      if (propdata) parse_ext_props(propdata, props, opts);\n    }\n  }\n\n  var custprops = {};\n\n  if (!opts.bookSheets || opts.bookProps) {\n    if (dir.custprops.length !== 0) {\n      propdata = getzipstr(zip, strip_front_slash(dir.custprops[0]), true);\n      if (propdata) custprops = parse_cust_props(propdata, opts);\n    }\n  }\n\n  var out = {}\n  /*:any*/\n  ;\n\n  if (opts.bookSheets || opts.bookProps) {\n    if (wb.Sheets) sheets = wb.Sheets.map(function pluck(x) {\n      return x.name;\n    });else if (props.Worksheets && props.SheetNames.length > 0) sheets = props.SheetNames;\n\n    if (opts.bookProps) {\n      out.Props = props;\n      out.Custprops = custprops;\n    }\n\n    if (opts.bookSheets && typeof sheets !== 'undefined') out.SheetNames = sheets;\n    if (opts.bookSheets ? out.SheetNames : opts.bookProps) return out;\n  }\n\n  sheets = {};\n  var deps = {};\n  if (opts.bookDeps && dir.calcchain) deps = parse_cc(getzipdata(zip, strip_front_slash(dir.calcchain)), dir.calcchain, opts);\n  var i = 0;\n  var sheetRels = {}\n  /*:any*/\n  ;\n  var path, relsPath;\n  {\n    var wbsheets = wb.Sheets;\n    props.Worksheets = wbsheets.length;\n    props.SheetNames = [];\n\n    for (var j = 0; j != wbsheets.length; ++j) {\n      props.SheetNames[j] = wbsheets[j].name;\n    }\n  }\n  var wbext = xlsb ? \"bin\" : \"xml\";\n  var wbrelsi = dir.workbooks[0].lastIndexOf(\"/\");\n  var wbrelsfile = (dir.workbooks[0].slice(0, wbrelsi + 1) + \"_rels/\" + dir.workbooks[0].slice(wbrelsi + 1) + \".rels\").replace(/^\\//, \"\");\n  if (!safegetzipfile(zip, wbrelsfile)) wbrelsfile = 'xl/_rels/workbook.' + wbext + '.rels';\n  var wbrels = parse_rels(getzipstr(zip, wbrelsfile, true), wbrelsfile.replace(/_rels.*/, \"s5s\"));\n\n  if ((dir.metadata || []).length >= 1) {\n    /* TODO: MDX and other types of metadata */\n    opts.xlmeta = parse_xlmeta(getzipdata(zip, strip_front_slash(dir.metadata[0])), dir.metadata[0], opts);\n  }\n\n  if ((dir.people || []).length >= 1) {\n    opts.people = parse_people_xml(getzipdata(zip, strip_front_slash(dir.people[0])), opts);\n  }\n\n  if (wbrels) wbrels = safe_parse_wbrels(wbrels, wb.Sheets);\n  /* Numbers iOS hack */\n\n  var nmode = getzipdata(zip, \"xl/worksheets/sheet.xml\", true) ? 1 : 0;\n\n  wsloop: for (i = 0; i != props.Worksheets; ++i) {\n    var stype = \"sheet\";\n\n    if (wbrels && wbrels[i]) {\n      path = 'xl/' + wbrels[i][1].replace(/[\\/]?xl\\//, \"\");\n      if (!safegetzipfile(zip, path)) path = wbrels[i][1];\n      if (!safegetzipfile(zip, path)) path = wbrelsfile.replace(/_rels\\/.*$/, \"\") + wbrels[i][1];\n      stype = wbrels[i][2];\n    } else {\n      path = 'xl/worksheets/sheet' + (i + 1 - nmode) + \".\" + wbext;\n      path = path.replace(/sheet0\\./, \"sheet.\");\n    }\n\n    relsPath = path.replace(/^(.*)(\\/)([^\\/]*)$/, \"$1/_rels/$3.rels\");\n    if (opts && opts.sheets != null) switch (typeof opts.sheets) {\n      case \"number\":\n        if (i != opts.sheets) continue wsloop;\n        break;\n\n      case \"string\":\n        if (props.SheetNames[i].toLowerCase() != opts.sheets.toLowerCase()) continue wsloop;\n        break;\n\n      default:\n        if (Array.isArray && Array.isArray(opts.sheets)) {\n          var snjseen = false;\n\n          for (var snj = 0; snj != opts.sheets.length; ++snj) {\n            if (typeof opts.sheets[snj] == \"number\" && opts.sheets[snj] == i) snjseen = 1;\n            if (typeof opts.sheets[snj] == \"string\" && opts.sheets[snj].toLowerCase() == props.SheetNames[i].toLowerCase()) snjseen = 1;\n          }\n\n          if (!snjseen) continue wsloop;\n        }\n\n    }\n    safe_parse_sheet(zip, path, relsPath, props.SheetNames[i], i, sheetRels, sheets, stype, opts, wb, themes, styles);\n  }\n\n  out = {\n    Directory: dir,\n    Workbook: wb,\n    Props: props,\n    Custprops: custprops,\n    Deps: deps,\n    Sheets: sheets,\n    SheetNames: props.SheetNames,\n    Strings: strs,\n    Styles: styles,\n    Themes: themes,\n    SSF: dup(table_fmt)\n  }\n  /*:any*/\n  ;\n\n  if (opts && opts.bookFiles) {\n    if (zip.files) {\n      out.keys = entries;\n      out.files = zip.files;\n    } else {\n      out.keys = [];\n      out.files = {};\n      zip.FullPaths.forEach(function (p, idx) {\n        p = p.replace(/^Root Entry[\\/]/, \"\");\n        out.keys.push(p);\n        out.files[p] = zip.FileIndex[idx];\n      });\n    }\n  }\n\n  if (opts && opts.bookVBA) {\n    if (dir.vba.length > 0) out.vbaraw = getzipdata(zip, strip_front_slash(dir.vba[0]), true);else if (dir.defaults && dir.defaults.bin === CT_VBA) out.vbaraw = getzipdata(zip, 'xl/vbaProject.bin', true);\n  }\n\n  return out;\n}\n/* [MS-OFFCRYPTO] 2.1.1 */\n\n\nfunction parse_xlsxcfb(cfb, _opts\n/*:?ParseOpts*/\n)\n/*:Workbook*/\n{\n  var opts = _opts || {};\n  var f = 'Workbook',\n      data = CFB.find(cfb, f);\n\n  try {\n    f = '/!DataSpaces/Version';\n    data = CFB.find(cfb, f);\n    if (!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n    /*var version = */\n\n    parse_DataSpaceVersionInfo(data.content);\n    /* 2.3.4.1 */\n\n    f = '/!DataSpaces/DataSpaceMap';\n    data = CFB.find(cfb, f);\n    if (!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n    var dsm = parse_DataSpaceMap(data.content);\n    if (dsm.length !== 1 || dsm[0].comps.length !== 1 || dsm[0].comps[0].t !== 0 || dsm[0].name !== \"StrongEncryptionDataSpace\" || dsm[0].comps[0].v !== \"EncryptedPackage\") throw new Error(\"ECMA-376 Encrypted file bad \" + f);\n    /* 2.3.4.2 */\n\n    f = '/!DataSpaces/DataSpaceInfo/StrongEncryptionDataSpace';\n    data = CFB.find(cfb, f);\n    if (!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n    var seds = parse_DataSpaceDefinition(data.content);\n    if (seds.length != 1 || seds[0] != \"StrongEncryptionTransform\") throw new Error(\"ECMA-376 Encrypted file bad \" + f);\n    /* 2.3.4.3 */\n\n    f = '/!DataSpaces/TransformInfo/StrongEncryptionTransform/!Primary';\n    data = CFB.find(cfb, f);\n    if (!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n    /*var hdr = */\n\n    parse_Primary(data.content);\n  } catch (e) {}\n\n  f = '/EncryptionInfo';\n  data = CFB.find(cfb, f);\n  if (!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n  var einfo = parse_EncryptionInfo(data.content);\n  /* 2.3.4.4 */\n\n  f = '/EncryptedPackage';\n  data = CFB.find(cfb, f);\n  if (!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n  /*global decrypt_agile */\n\n  /*:: declare var decrypt_agile:any; */\n\n  if (einfo[0] == 0x04 && typeof decrypt_agile !== 'undefined') return decrypt_agile(einfo[1], data.content, opts.password || \"\", opts);\n  /*global decrypt_std76 */\n\n  /*:: declare var decrypt_std76:any; */\n\n  if (einfo[0] == 0x02 && typeof decrypt_std76 !== 'undefined') return decrypt_std76(einfo[1], data.content, opts.password || \"\", opts);\n  throw new Error(\"File is password-protected\");\n}\n\nfunction write_zip(wb\n/*:Workbook*/\n, opts\n/*:WriteOpts*/\n)\n/*:ZIP*/\n{\n  if (opts.bookType == \"ods\") return write_ods(wb, opts);\n  if (opts.bookType == \"numbers\") return write_numbers_iwa(wb, opts);\n  if (opts.bookType == \"xlsb\") return write_zip_xlsxb(wb, opts);\n  return write_zip_xlsx(wb, opts);\n}\n/* XLSX and XLSB writing are very similar.  Originally they were unified in one\n   export function.  This is horrible for tree shaking in the common case (most\n   applications need to export files in one format) so this function supports\n   both formats while write_zip_xlsx only handles XLSX */\n\n\nfunction write_zip_xlsxb(wb\n/*:Workbook*/\n, opts\n/*:WriteOpts*/\n)\n/*:ZIP*/\n{\n  _shapeid = 1024;\n\n  if (wb && !wb.SSF) {\n    wb.SSF = dup(table_fmt);\n  }\n\n  if (wb && wb.SSF) {\n    make_ssf();\n    SSF_load_table(wb.SSF); // $FlowIgnore\n\n    opts.revssf = evert_num(wb.SSF);\n    opts.revssf[wb.SSF[65535]] = 0;\n    opts.ssf = wb.SSF;\n  }\n\n  opts.rels = {};\n  opts.wbrels = {};\n  opts.Strings =\n  /*::((*/\n  []\n  /*:: :any):SST)*/\n  ;\n  opts.Strings.Count = 0;\n  opts.Strings.Unique = 0;\n  if (browser_has_Map) opts.revStrings = new Map();else {\n    opts.revStrings = {};\n    opts.revStrings.foo = [];\n    delete opts.revStrings.foo;\n  }\n  var wbext = opts.bookType == \"xlsb\" ? \"bin\" : \"xml\";\n  var vbafmt = VBAFMTS.indexOf(opts.bookType) > -1;\n  var ct = new_ct();\n  fix_write_opts(opts = opts || {});\n  var zip = zip_new();\n  var f = \"\",\n      rId = 0;\n  opts.cellXfs = [];\n  get_cell_style(opts.cellXfs, {}, {\n    revssf: {\n      \"General\": 0\n    }\n  });\n  if (!wb.Props) wb.Props = {};\n  f = \"docProps/core.xml\";\n  zip_add_file(zip, f, write_core_props(wb.Props, opts));\n  ct.coreprops.push(f);\n  add_rels(opts.rels, 2, f, RELS.CORE_PROPS);\n  /*::if(!wb.Props) throw \"unreachable\"; */\n\n  f = \"docProps/app.xml\";\n\n  if (wb.Props && wb.Props.SheetNames) {\n    /* empty */\n  } else if (!wb.Workbook || !wb.Workbook.Sheets) wb.Props.SheetNames = wb.SheetNames;else {\n    var _sn = [];\n\n    for (var _i = 0; _i < wb.SheetNames.length; ++_i) {\n      if ((wb.Workbook.Sheets[_i] || {}).Hidden != 2) _sn.push(wb.SheetNames[_i]);\n    }\n\n    wb.Props.SheetNames = _sn;\n  }\n\n  wb.Props.Worksheets = wb.Props.SheetNames.length;\n  zip_add_file(zip, f, write_ext_props(wb.Props, opts));\n  ct.extprops.push(f);\n  add_rels(opts.rels, 3, f, RELS.EXT_PROPS);\n\n  if (wb.Custprops !== wb.Props && keys(wb.Custprops || {}).length > 0) {\n    f = \"docProps/custom.xml\";\n    zip_add_file(zip, f, write_cust_props(wb.Custprops, opts));\n    ct.custprops.push(f);\n    add_rels(opts.rels, 4, f, RELS.CUST_PROPS);\n  }\n\n  for (rId = 1; rId <= wb.SheetNames.length; ++rId) {\n    var wsrels = {\n      '!id': {}\n    };\n    var ws = wb.Sheets[wb.SheetNames[rId - 1]];\n\n    var _type = (ws || {})[\"!type\"] || \"sheet\";\n\n    switch (_type) {\n      case \"chart\":\n      /* falls through */\n\n      default:\n        f = \"xl/worksheets/sheet\" + rId + \".\" + wbext;\n        zip_add_file(zip, f, write_ws(rId - 1, f, opts, wb, wsrels));\n        ct.sheets.push(f);\n        add_rels(opts.wbrels, -1, \"worksheets/sheet\" + rId + \".\" + wbext, RELS.WS[0]);\n    }\n\n    if (ws) {\n      var comments = ws['!comments'];\n      var need_vml = false;\n      var cf = \"\";\n\n      if (comments && comments.length > 0) {\n        cf = \"xl/comments\" + rId + \".\" + wbext;\n        zip_add_file(zip, cf, write_cmnt(comments, cf, opts));\n        ct.comments.push(cf);\n        add_rels(wsrels, -1, \"../comments\" + rId + \".\" + wbext, RELS.CMNT);\n        need_vml = true;\n      }\n\n      if (ws['!legacy']) {\n        if (need_vml) zip_add_file(zip, \"xl/drawings/vmlDrawing\" + rId + \".vml\", write_comments_vml(rId, ws['!comments']));\n      }\n\n      delete ws['!comments'];\n      delete ws['!legacy'];\n    }\n\n    if (wsrels['!id'].rId1) zip_add_file(zip, get_rels_path(f), write_rels(wsrels));\n  }\n\n  if (opts.Strings != null && opts.Strings.length > 0) {\n    f = \"xl/sharedStrings.\" + wbext;\n    zip_add_file(zip, f, write_sst(opts.Strings, f, opts));\n    ct.strs.push(f);\n    add_rels(opts.wbrels, -1, \"sharedStrings.\" + wbext, RELS.SST);\n  }\n\n  f = \"xl/workbook.\" + wbext;\n  zip_add_file(zip, f, write_wb(wb, f, opts));\n  ct.workbooks.push(f);\n  add_rels(opts.rels, 1, f, RELS.WB);\n  /* TODO: something more intelligent with themes */\n\n  f = \"xl/theme/theme1.xml\";\n  zip_add_file(zip, f, write_theme(wb.Themes, opts));\n  ct.themes.push(f);\n  add_rels(opts.wbrels, -1, \"theme/theme1.xml\", RELS.THEME);\n  /* TODO: something more intelligent with styles */\n\n  f = \"xl/styles.\" + wbext;\n  zip_add_file(zip, f, write_sty(wb, f, opts));\n  ct.styles.push(f);\n  add_rels(opts.wbrels, -1, \"styles.\" + wbext, RELS.STY);\n\n  if (wb.vbaraw && vbafmt) {\n    f = \"xl/vbaProject.bin\";\n    zip_add_file(zip, f, wb.vbaraw);\n    ct.vba.push(f);\n    add_rels(opts.wbrels, -1, \"vbaProject.bin\", RELS.VBA);\n  }\n\n  f = \"xl/metadata.\" + wbext;\n  zip_add_file(zip, f, write_xlmeta(f));\n  ct.metadata.push(f);\n  add_rels(opts.wbrels, -1, \"metadata.\" + wbext, RELS.XLMETA);\n  zip_add_file(zip, \"[Content_Types].xml\", write_ct(ct, opts));\n  zip_add_file(zip, '_rels/.rels', write_rels(opts.rels));\n  zip_add_file(zip, 'xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels));\n  delete opts.revssf;\n  delete opts.ssf;\n  return zip;\n}\n\nfunction write_zip_xlsx(wb\n/*:Workbook*/\n, opts\n/*:WriteOpts*/\n)\n/*:ZIP*/\n{\n  _shapeid = 1024;\n\n  if (wb && !wb.SSF) {\n    wb.SSF = dup(table_fmt);\n  }\n\n  if (wb && wb.SSF) {\n    make_ssf();\n    SSF_load_table(wb.SSF); // $FlowIgnore\n\n    opts.revssf = evert_num(wb.SSF);\n    opts.revssf[wb.SSF[65535]] = 0;\n    opts.ssf = wb.SSF;\n  }\n\n  opts.rels = {};\n  opts.wbrels = {};\n  opts.Strings =\n  /*::((*/\n  []\n  /*:: :any):SST)*/\n  ;\n  opts.Strings.Count = 0;\n  opts.Strings.Unique = 0;\n  if (browser_has_Map) opts.revStrings = new Map();else {\n    opts.revStrings = {};\n    opts.revStrings.foo = [];\n    delete opts.revStrings.foo;\n  }\n  var wbext = \"xml\";\n  var vbafmt = VBAFMTS.indexOf(opts.bookType) > -1;\n  var ct = new_ct();\n  fix_write_opts(opts = opts || {});\n  var zip = zip_new();\n  var f = \"\",\n      rId = 0;\n  opts.cellXfs = [];\n  get_cell_style(opts.cellXfs, {}, {\n    revssf: {\n      \"General\": 0\n    }\n  });\n  if (!wb.Props) wb.Props = {};\n  f = \"docProps/core.xml\";\n  zip_add_file(zip, f, write_core_props(wb.Props, opts));\n  ct.coreprops.push(f);\n  add_rels(opts.rels, 2, f, RELS.CORE_PROPS);\n  /*::if(!wb.Props) throw \"unreachable\"; */\n\n  f = \"docProps/app.xml\";\n\n  if (wb.Props && wb.Props.SheetNames) {\n    /* empty */\n  } else if (!wb.Workbook || !wb.Workbook.Sheets) wb.Props.SheetNames = wb.SheetNames;else {\n    var _sn = [];\n\n    for (var _i = 0; _i < wb.SheetNames.length; ++_i) {\n      if ((wb.Workbook.Sheets[_i] || {}).Hidden != 2) _sn.push(wb.SheetNames[_i]);\n    }\n\n    wb.Props.SheetNames = _sn;\n  }\n\n  wb.Props.Worksheets = wb.Props.SheetNames.length;\n  zip_add_file(zip, f, write_ext_props(wb.Props, opts));\n  ct.extprops.push(f);\n  add_rels(opts.rels, 3, f, RELS.EXT_PROPS);\n\n  if (wb.Custprops !== wb.Props && keys(wb.Custprops || {}).length > 0) {\n    f = \"docProps/custom.xml\";\n    zip_add_file(zip, f, write_cust_props(wb.Custprops, opts));\n    ct.custprops.push(f);\n    add_rels(opts.rels, 4, f, RELS.CUST_PROPS);\n  }\n\n  var people = [\"SheetJ5\"];\n  opts.tcid = 0;\n\n  for (rId = 1; rId <= wb.SheetNames.length; ++rId) {\n    var wsrels = {\n      '!id': {}\n    };\n    var ws = wb.Sheets[wb.SheetNames[rId - 1]];\n\n    var _type = (ws || {})[\"!type\"] || \"sheet\";\n\n    switch (_type) {\n      case \"chart\":\n      /* falls through */\n\n      default:\n        f = \"xl/worksheets/sheet\" + rId + \".\" + wbext;\n        zip_add_file(zip, f, write_ws_xml(rId - 1, opts, wb, wsrels));\n        ct.sheets.push(f);\n        add_rels(opts.wbrels, -1, \"worksheets/sheet\" + rId + \".\" + wbext, RELS.WS[0]);\n    }\n\n    if (ws) {\n      var comments = ws['!comments'];\n      var need_vml = false;\n      var cf = \"\";\n\n      if (comments && comments.length > 0) {\n        var needtc = false;\n        comments.forEach(function (carr) {\n          carr[1].forEach(function (c) {\n            if (c.T == true) needtc = true;\n          });\n        });\n\n        if (needtc) {\n          cf = \"xl/threadedComments/threadedComment\" + rId + \".\" + wbext;\n          zip_add_file(zip, cf, write_tcmnt_xml(comments, people, opts));\n          ct.threadedcomments.push(cf);\n          add_rels(wsrels, -1, \"../threadedComments/threadedComment\" + rId + \".\" + wbext, RELS.TCMNT);\n        }\n\n        cf = \"xl/comments\" + rId + \".\" + wbext;\n        zip_add_file(zip, cf, write_comments_xml(comments, opts));\n        ct.comments.push(cf);\n        add_rels(wsrels, -1, \"../comments\" + rId + \".\" + wbext, RELS.CMNT);\n        need_vml = true;\n      }\n\n      if (ws['!legacy']) {\n        if (need_vml) zip_add_file(zip, \"xl/drawings/vmlDrawing\" + rId + \".vml\", write_comments_vml(rId, ws['!comments']));\n      }\n\n      delete ws['!comments'];\n      delete ws['!legacy'];\n    }\n\n    if (wsrels['!id'].rId1) zip_add_file(zip, get_rels_path(f), write_rels(wsrels));\n  }\n\n  if (opts.Strings != null && opts.Strings.length > 0) {\n    f = \"xl/sharedStrings.\" + wbext;\n    zip_add_file(zip, f, write_sst_xml(opts.Strings, opts));\n    ct.strs.push(f);\n    add_rels(opts.wbrels, -1, \"sharedStrings.\" + wbext, RELS.SST);\n  }\n\n  f = \"xl/workbook.\" + wbext;\n  zip_add_file(zip, f, write_wb_xml(wb, opts));\n  ct.workbooks.push(f);\n  add_rels(opts.rels, 1, f, RELS.WB);\n  /* TODO: something more intelligent with themes */\n\n  f = \"xl/theme/theme1.xml\";\n  zip_add_file(zip, f, write_theme(wb.Themes, opts));\n  ct.themes.push(f);\n  add_rels(opts.wbrels, -1, \"theme/theme1.xml\", RELS.THEME);\n  /* TODO: something more intelligent with styles */\n\n  f = \"xl/styles.\" + wbext;\n  zip_add_file(zip, f, write_sty_xml(wb, opts));\n  ct.styles.push(f);\n  add_rels(opts.wbrels, -1, \"styles.\" + wbext, RELS.STY);\n\n  if (wb.vbaraw && vbafmt) {\n    f = \"xl/vbaProject.bin\";\n    zip_add_file(zip, f, wb.vbaraw);\n    ct.vba.push(f);\n    add_rels(opts.wbrels, -1, \"vbaProject.bin\", RELS.VBA);\n  }\n\n  f = \"xl/metadata.\" + wbext;\n  zip_add_file(zip, f, write_xlmeta_xml());\n  ct.metadata.push(f);\n  add_rels(opts.wbrels, -1, \"metadata.\" + wbext, RELS.XLMETA);\n\n  if (people.length > 1) {\n    f = \"xl/persons/person.xml\";\n    zip_add_file(zip, f, write_people_xml(people, opts));\n    ct.people.push(f);\n    add_rels(opts.wbrels, -1, \"persons/person.xml\", RELS.PEOPLE);\n  }\n\n  zip_add_file(zip, \"[Content_Types].xml\", write_ct(ct, opts));\n  zip_add_file(zip, '_rels/.rels', write_rels(opts.rels));\n  zip_add_file(zip, 'xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels));\n  delete opts.revssf;\n  delete opts.ssf;\n  return zip;\n}\n\nfunction firstbyte(f\n/*:RawData*/\n, o\n/*:?TypeOpts*/\n)\n/*:Array<number>*/\n{\n  var x = \"\";\n\n  switch ((o || {}).type || \"base64\") {\n    case 'buffer':\n      return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];\n\n    case 'base64':\n      x = Base64_decode(f.slice(0, 12));\n      break;\n\n    case 'binary':\n      x = f;\n      break;\n\n    case 'array':\n      return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];\n\n    default:\n      throw new Error(\"Unrecognized type \" + (o && o.type || \"undefined\"));\n  }\n\n  return [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\n/*:CFBContainer*/\n, opts\n/*:?ParseOpts*/\n)\n/*:Workbook*/\n{\n  if (CFB.find(cfb, \"EncryptedPackage\")) return parse_xlsxcfb(cfb, opts);\n  return parse_xlscfb(cfb, opts);\n}\n\nfunction read_zip(data\n/*:RawData*/\n, opts\n/*:?ParseOpts*/\n)\n/*:Workbook*/\n{\n  var zip,\n      d = data;\n  var o = opts || {};\n  if (!o.type) o.type = has_buf && Buffer.isBuffer(data) ? \"buffer\" : \"base64\";\n  zip = zip_read(d, o);\n  return parse_zip(zip, o);\n}\n\nfunction read_plaintext(data\n/*:string*/\n, o\n/*:ParseOpts*/\n)\n/*:Workbook*/\n{\n  var i = 0;\n\n  main: while (i < data.length) {\n    switch (data.charCodeAt(i)) {\n      case 0x0A:\n      case 0x0D:\n      case 0x20:\n        ++i;\n        break;\n\n      case 0x3C:\n        return parse_xlml(data.slice(i), o);\n\n      default:\n        break main;\n    }\n  }\n\n  return PRN.to_workbook(data, o);\n}\n\nfunction read_plaintext_raw(data\n/*:RawData*/\n, o\n/*:ParseOpts*/\n)\n/*:Workbook*/\n{\n  var str = \"\",\n      bytes = firstbyte(data, o);\n\n  switch (o.type) {\n    case 'base64':\n      str = Base64_decode(data);\n      break;\n\n    case 'binary':\n      str = data;\n      break;\n\n    case 'buffer':\n      str = data.toString('binary');\n      break;\n\n    case 'array':\n      str = cc2str(data);\n      break;\n\n    default:\n      throw new Error(\"Unrecognized type \" + o.type);\n  }\n\n  if (bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str);\n  o.type = \"binary\";\n  return read_plaintext(str, o);\n}\n\nfunction read_utf16(data\n/*:RawData*/\n, o\n/*:ParseOpts*/\n)\n/*:Workbook*/\n{\n  var d = data;\n  if (o.type == 'base64') d = Base64_decode(d);\n  d = $cptable.utils.decode(1200, d.slice(2), 'str');\n  o.type = \"binary\";\n  return read_plaintext(d, o);\n}\n\nfunction bstrify(data\n/*:string*/\n)\n/*:string*/\n{\n  return !data.match(/[^\\x00-\\x7F]/) ? data : utf8write(data);\n}\n\nfunction read_prn(data, d, o, str) {\n  if (str) {\n    o.type = \"string\";\n    return PRN.to_workbook(data, o);\n  }\n\n  return PRN.to_workbook(d, o);\n}\n\nfunction readSync(data\n/*:RawData*/\n, opts\n/*:?ParseOpts*/\n)\n/*:Workbook*/\n{\n  reset_cp();\n  var o = opts || {};\n  if (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) return readSync(new Uint8Array(data), (o = dup(o), o.type = \"array\", o));\n  if (typeof Uint8Array !== 'undefined' && data instanceof Uint8Array && !o.type) o.type = typeof Deno !== \"undefined\" ? \"buffer\" : \"array\";\n  var d = data,\n      n = [0, 0, 0, 0],\n      str = false;\n\n  if (o.cellStyles) {\n    o.cellNF = true;\n    o.sheetStubs = true;\n  }\n\n  _ssfopts = {};\n  if (o.dateNF) _ssfopts.dateNF = o.dateNF;\n  if (!o.type) o.type = has_buf && Buffer.isBuffer(data) ? \"buffer\" : \"base64\";\n\n  if (o.type == \"file\") {\n    o.type = has_buf ? \"buffer\" : \"binary\";\n    d = read_binary(data);\n    if (typeof Uint8Array !== 'undefined' && !has_buf) o.type = \"array\";\n  }\n\n  if (o.type == \"string\") {\n    str = true;\n    o.type = \"binary\";\n    o.codepage = 65001;\n    d = bstrify(data);\n  }\n\n  if (o.type == 'array' && typeof Uint8Array !== 'undefined' && data instanceof Uint8Array && typeof ArrayBuffer !== 'undefined') {\n    // $FlowIgnore\n    var ab = new ArrayBuffer(3),\n        vu = new Uint8Array(ab);\n    vu.foo = \"bar\"; // $FlowIgnore\n\n    if (!vu.foo) {\n      o = dup(o);\n      o.type = 'array';\n      return readSync(ab2a(d), o);\n    }\n  }\n\n  switch ((n = firstbyte(d, o))[0]) {\n    case 0xD0:\n      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);\n      break;\n\n    case 0x09:\n      if (n[1] <= 0x08) return parse_xlscfb(d, o);\n      break;\n\n    case 0x3C:\n      return parse_xlml(d, o);\n\n    case 0x49:\n      if (n[1] === 0x49 && n[2] === 0x2a && n[3] === 0x00) throw new Error(\"TIFF Image File is not a spreadsheet\");\n      if (n[1] === 0x44) return read_wb_ID(d, o);\n      break;\n\n    case 0x54:\n      if (n[1] === 0x41 && n[2] === 0x42 && n[3] === 0x4C) return DIF.to_workbook(d, o);\n      break;\n\n    case 0x50:\n      return n[1] === 0x4B && n[2] < 0x09 && n[3] < 0x09 ? read_zip(d, o) : read_prn(data, d, o, str);\n\n    case 0xEF:\n      return n[3] === 0x3C ? parse_xlml(d, o) : read_prn(data, d, o, str);\n\n    case 0xFF:\n      if (n[1] === 0xFE) {\n        return read_utf16(d, o);\n      } else if (n[1] === 0x00 && n[2] === 0x02 && n[3] === 0x00) return WK_.to_workbook(d, o);\n\n      break;\n\n    case 0x00:\n      if (n[1] === 0x00) {\n        if (n[2] >= 0x02 && n[3] === 0x00) return WK_.to_workbook(d, o);\n        if (n[2] === 0x00 && (n[3] === 0x08 || n[3] === 0x09)) return WK_.to_workbook(d, o);\n      }\n\n      break;\n\n    case 0x03:\n    case 0x83:\n    case 0x8B:\n    case 0x8C:\n      return DBF.to_workbook(d, o);\n\n    case 0x7B:\n      if (n[1] === 0x5C && n[2] === 0x72 && n[3] === 0x74) return RTF.to_workbook(d, o);\n      break;\n\n    case 0x0A:\n    case 0x0D:\n    case 0x20:\n      return read_plaintext_raw(d, o);\n\n    case 0x89:\n      if (n[1] === 0x50 && n[2] === 0x4E && n[3] === 0x47) throw new Error(\"PNG Image File is not a spreadsheet\");\n      break;\n  }\n\n  if (DBF_SUPPORTED_VERSIONS.indexOf(n[0]) > -1 && n[2] <= 12 && n[3] <= 31) return DBF.to_workbook(d, o);\n  return read_prn(data, d, o, str);\n}\n\nfunction readFileSync(filename\n/*:string*/\n, opts\n/*:?ParseOpts*/\n)\n/*:Workbook*/\n{\n  var o = opts || {};\n  o.type = 'file';\n  return readSync(filename, o);\n}\n\nfunction write_cfb_ctr(cfb\n/*:CFBContainer*/\n, o\n/*:WriteOpts*/\n)\n/*:any*/\n{\n  switch (o.type) {\n    case \"base64\":\n    case \"binary\":\n      break;\n\n    case \"buffer\":\n    case \"array\":\n      o.type = \"\";\n      break;\n\n    case \"file\":\n      return write_dl(o.file, CFB.write(cfb, {\n        type: has_buf ? 'buffer' : \"\"\n      }));\n\n    case \"string\":\n      throw new Error(\"'string' output type invalid for '\" + o.bookType + \"' files\");\n\n    default:\n      throw new Error(\"Unrecognized type \" + o.type);\n  }\n\n  return CFB.write(cfb, o);\n}\n/*:: declare var encrypt_agile:any; */\n\n\nfunction write_zip_type(wb\n/*:Workbook*/\n, opts\n/*:?WriteOpts*/\n)\n/*:any*/\n{\n  var o = dup(opts || {});\n  var z = write_zip(wb, o);\n  return write_zip_denouement(z, o);\n}\n\nfunction write_zip_typeXLSX(wb\n/*:Workbook*/\n, opts\n/*:?WriteOpts*/\n)\n/*:any*/\n{\n  var o = dup(opts || {});\n  var z = write_zip_xlsx(wb, o);\n  return write_zip_denouement(z, o);\n}\n\nfunction write_zip_denouement(z\n/*:any*/\n, o\n/*:?WriteOpts*/\n)\n/*:any*/\n{\n  var oopts = {};\n  var ftype = has_buf ? \"nodebuffer\" : typeof Uint8Array !== \"undefined\" ? \"array\" : \"string\";\n  if (o.compression) oopts.compression = 'DEFLATE';\n  if (o.password) oopts.type = ftype;else switch (o.type) {\n    case \"base64\":\n      oopts.type = \"base64\";\n      break;\n\n    case \"binary\":\n      oopts.type = \"string\";\n      break;\n\n    case \"string\":\n      throw new Error(\"'string' output type invalid for '\" + o.bookType + \"' files\");\n\n    case \"buffer\":\n    case \"file\":\n      oopts.type = ftype;\n      break;\n\n    default:\n      throw new Error(\"Unrecognized type \" + o.type);\n  }\n  var out = z.FullPaths ? CFB.write(z, {\n    fileType: \"zip\",\n    type:\n    /*::(*/\n    {\n      \"nodebuffer\": \"buffer\",\n      \"string\": \"binary\"\n    }\n    /*:: :any)*/\n    [oopts.type] || oopts.type,\n    compression: !!o.compression\n  }) : z.generate(oopts);\n\n  if (typeof Deno !== \"undefined\") {\n    if (typeof out == \"string\") {\n      if (o.type == \"binary\" || o.type == \"base64\") return out;\n      out = new Uint8Array(s2ab(out));\n    }\n  }\n  /*jshint -W083 */\n\n\n  if (o.password && typeof encrypt_agile !== 'undefined') return write_cfb_ctr(encrypt_agile(out, o.password), o); // eslint-disable-line no-undef\n\n  /*jshint +W083 */\n\n  if (o.type === \"file\") return write_dl(o.file, out);\n  return o.type == \"string\" ? utf8read(\n  /*::(*/\n  out\n  /*:: :any)*/\n  ) : out;\n}\n\nfunction write_cfb_type(wb\n/*:Workbook*/\n, opts\n/*:?WriteOpts*/\n)\n/*:any*/\n{\n  var o = opts || {};\n  var cfb\n  /*:CFBContainer*/\n  = write_xlscfb(wb, o);\n  return write_cfb_ctr(cfb, o);\n}\n\nfunction write_string_type(out\n/*:string*/\n, opts\n/*:WriteOpts*/\n, bom\n/*:?string*/\n)\n/*:any*/\n{\n  if (!bom) bom = \"\";\n  var o = bom + out;\n\n  switch (opts.type) {\n    case \"base64\":\n      return Base64_encode(utf8write(o));\n\n    case \"binary\":\n      return utf8write(o);\n\n    case \"string\":\n      return out;\n\n    case \"file\":\n      return write_dl(opts.file, o, 'utf8');\n\n    case \"buffer\":\n      {\n        if (has_buf) return Buffer_from(o, 'utf8');else if (typeof TextEncoder !== \"undefined\") return new TextEncoder().encode(o);else return write_string_type(o, {\n          type: 'binary'\n        }).split(\"\").map(function (c) {\n          return c.charCodeAt(0);\n        });\n      }\n  }\n\n  throw new Error(\"Unrecognized type \" + opts.type);\n}\n\nfunction write_stxt_type(out\n/*:string*/\n, opts\n/*:WriteOpts*/\n)\n/*:any*/\n{\n  switch (opts.type) {\n    case \"base64\":\n      return Base64_encode(out);\n\n    case \"binary\":\n      return out;\n\n    case \"string\":\n      return out;\n\n    /* override in sheet_to_txt */\n\n    case \"file\":\n      return write_dl(opts.file, out, 'binary');\n\n    case \"buffer\":\n      {\n        if (has_buf) return Buffer_from(out, 'binary');else return out.split(\"\").map(function (c) {\n          return c.charCodeAt(0);\n        });\n      }\n  }\n\n  throw new Error(\"Unrecognized type \" + opts.type);\n}\n/* TODO: test consistency */\n\n\nfunction write_binary_type(out, opts\n/*:WriteOpts*/\n)\n/*:any*/\n{\n  switch (opts.type) {\n    case \"string\":\n    case \"base64\":\n    case \"binary\":\n      var bstr = \"\"; // $FlowIgnore\n\n      for (var i = 0; i < out.length; ++i) {\n        bstr += String.fromCharCode(out[i]);\n      }\n\n      return opts.type == 'base64' ? Base64_encode(bstr) : opts.type == 'string' ? utf8read(bstr) : bstr;\n\n    case \"file\":\n      return write_dl(opts.file, out);\n\n    case \"buffer\":\n      return out;\n\n    default:\n      throw new Error(\"Unrecognized type \" + opts.type);\n  }\n}\n\nfunction writeSyncXLSX(wb\n/*:Workbook*/\n, opts\n/*:?WriteOpts*/\n) {\n  reset_cp();\n  check_wb(wb);\n  var o = dup(opts || {});\n\n  if (o.cellStyles) {\n    o.cellNF = true;\n    o.sheetStubs = true;\n  }\n\n  if (o.type == \"array\") {\n    o.type = \"binary\";\n    var out\n    /*:string*/\n    = writeSyncXLSX(wb, o)\n    /*:any*/\n    ;\n    o.type = \"array\";\n    return s2ab(out);\n  }\n\n  return write_zip_typeXLSX(wb, o);\n}\n\nfunction writeSync(wb\n/*:Workbook*/\n, opts\n/*:?WriteOpts*/\n) {\n  reset_cp();\n  check_wb(wb);\n  var o = dup(opts || {});\n\n  if (o.cellStyles) {\n    o.cellNF = true;\n    o.sheetStubs = true;\n  }\n\n  if (o.type == \"array\") {\n    o.type = \"binary\";\n    var out\n    /*:string*/\n    = writeSync(wb, o)\n    /*:any*/\n    ;\n    o.type = \"array\";\n    return s2ab(out);\n  }\n\n  var idx = 0;\n\n  if (o.sheet) {\n    if (typeof o.sheet == \"number\") idx = o.sheet;else idx = wb.SheetNames.indexOf(o.sheet);\n    if (!wb.SheetNames[idx]) throw new Error(\"Sheet not found: \" + o.sheet + \" : \" + typeof o.sheet);\n  }\n\n  switch (o.bookType || 'xlsb') {\n    case 'xml':\n    case 'xlml':\n      return write_string_type(write_xlml(wb, o), o);\n\n    case 'slk':\n    case 'sylk':\n      return write_string_type(SYLK.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\n    case 'htm':\n    case 'html':\n      return write_string_type(sheet_to_html(wb.Sheets[wb.SheetNames[idx]], o), o);\n\n    case 'txt':\n      return write_stxt_type(sheet_to_txt(wb.Sheets[wb.SheetNames[idx]], o), o);\n\n    case 'csv':\n      return write_string_type(sheet_to_csv(wb.Sheets[wb.SheetNames[idx]], o), o, \"\\uFEFF\");\n\n    case 'dif':\n      return write_string_type(DIF.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\n    case 'dbf':\n      return write_binary_type(DBF.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\n    case 'prn':\n      return write_string_type(PRN.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\n    case 'rtf':\n      return write_string_type(RTF.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\n    case 'eth':\n      return write_string_type(ETH.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\n    case 'fods':\n      return write_string_type(write_ods(wb, o), o);\n\n    case 'wk1':\n      return write_binary_type(WK_.sheet_to_wk1(wb.Sheets[wb.SheetNames[idx]], o), o);\n\n    case 'wk3':\n      return write_binary_type(WK_.book_to_wk3(wb, o), o);\n\n    case 'biff2':\n      if (!o.biff) o.biff = 2;\n\n    /* falls through */\n\n    case 'biff3':\n      if (!o.biff) o.biff = 3;\n\n    /* falls through */\n\n    case 'biff4':\n      if (!o.biff) o.biff = 4;\n      return write_binary_type(write_biff_buf(wb, o), o);\n\n    case 'biff5':\n      if (!o.biff) o.biff = 5;\n\n    /* falls through */\n\n    case 'biff8':\n    case 'xla':\n    case 'xls':\n      if (!o.biff) o.biff = 8;\n      return write_cfb_type(wb, o);\n\n    case 'xlsx':\n    case 'xlsm':\n    case 'xlam':\n    case 'xlsb':\n    case 'numbers':\n    case 'ods':\n      return write_zip_type(wb, o);\n\n    default:\n      throw new Error(\"Unrecognized bookType |\" + o.bookType + \"|\");\n  }\n}\n\nfunction resolve_book_type(o\n/*:WriteFileOpts*/\n) {\n  if (o.bookType) return;\n  var _BT = {\n    \"xls\": \"biff8\",\n    \"htm\": \"html\",\n    \"slk\": \"sylk\",\n    \"socialcalc\": \"eth\",\n    \"Sh33tJS\": \"WTF\"\n  };\n  var ext = o.file.slice(o.file.lastIndexOf(\".\")).toLowerCase();\n  if (ext.match(/^\\.[a-z]+$/)) o.bookType = ext.slice(1);\n  o.bookType = _BT[o.bookType] || o.bookType;\n}\n\nfunction writeFileSync(wb\n/*:Workbook*/\n, filename\n/*:string*/\n, opts\n/*:?WriteFileOpts*/\n) {\n  var o = opts || {};\n  o.type = 'file';\n  o.file = filename;\n  resolve_book_type(o);\n  return writeSync(wb, o);\n}\n\nfunction writeFileSyncXLSX(wb\n/*:Workbook*/\n, filename\n/*:string*/\n, opts\n/*:?WriteFileOpts*/\n) {\n  var o = opts || {};\n  o.type = 'file';\n  o.file = filename;\n  resolve_book_type(o);\n  return writeSyncXLSX(wb, o);\n}\n\nfunction writeFileAsync(filename\n/*:string*/\n, wb\n/*:Workbook*/\n, opts\n/*:?WriteFileOpts*/\n, cb\n/*:?(e?:ErrnoError)=>void*/\n) {\n  var o = opts || {};\n  o.type = 'file';\n  o.file = filename;\n  resolve_book_type(o);\n  o.type = 'buffer';\n  var _cb = cb;\n  if (!(_cb instanceof Function)) _cb = opts\n  /*:any*/\n  ;\n  return _fs.writeFile(filename, writeSync(wb, o), _cb);\n}\n/*::\ntype MJRObject = {\n\trow: any;\n\tisempty: boolean;\n};\n*/\n\n\nfunction make_json_row(sheet\n/*:Worksheet*/\n, r\n/*:Range*/\n, R\n/*:number*/\n, cols\n/*:Array<string>*/\n, header\n/*:number*/\n, hdr\n/*:Array<any>*/\n, dense\n/*:boolean*/\n, o\n/*:Sheet2JSONOpts*/\n)\n/*:MJRObject*/\n{\n  var rr = encode_row(R);\n  var defval = o.defval,\n      raw = o.raw || !Object.prototype.hasOwnProperty.call(o, \"raw\");\n  var isempty = true;\n  var row\n  /*:any*/\n  = header === 1 ? [] : {};\n\n  if (header !== 1) {\n    if (Object.defineProperty) try {\n      Object.defineProperty(row, '__rowNum__', {\n        value: R,\n        enumerable: false\n      });\n    } catch (e) {\n      row.__rowNum__ = R;\n    } else row.__rowNum__ = R;\n  }\n\n  if (!dense || sheet[R]) for (var C = r.s.c; C <= r.e.c; ++C) {\n    var val = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\n    if (val === undefined || val.t === undefined) {\n      if (defval === undefined) continue;\n\n      if (hdr[C] != null) {\n        row[hdr[C]] = defval;\n      }\n\n      continue;\n    }\n\n    var v = val.v;\n\n    switch (val.t) {\n      case 'z':\n        if (v == null) break;\n        continue;\n\n      case 'e':\n        v = v == 0 ? null : void 0;\n        break;\n\n      case 's':\n      case 'd':\n      case 'b':\n      case 'n':\n        break;\n\n      default:\n        throw new Error('unrecognized type ' + val.t);\n    }\n\n    if (hdr[C] != null) {\n      if (v == null) {\n        if (val.t == \"e\" && v === null) row[hdr[C]] = null;else if (defval !== undefined) row[hdr[C]] = defval;else if (raw && v === null) row[hdr[C]] = null;else continue;\n      } else {\n        row[hdr[C]] = raw && (val.t !== \"n\" || val.t === \"n\" && o.rawNumbers !== false) ? v : format_cell(val, v, o);\n      }\n\n      if (v != null) isempty = false;\n    }\n  }\n  return {\n    row: row,\n    isempty: isempty\n  };\n}\n\nfunction sheet_to_json(sheet\n/*:Worksheet*/\n, opts\n/*:?Sheet2JSONOpts*/\n) {\n  if (sheet == null || sheet[\"!ref\"] == null) return [];\n  var val = {\n    t: 'n',\n    v: 0\n  },\n      header = 0,\n      offset = 1,\n      hdr\n  /*:Array<any>*/\n  = [],\n      v = 0,\n      vv = \"\";\n  var r = {\n    s: {\n      r: 0,\n      c: 0\n    },\n    e: {\n      r: 0,\n      c: 0\n    }\n  };\n  var o = opts || {};\n  var range = o.range != null ? o.range : sheet[\"!ref\"];\n  if (o.header === 1) header = 1;else if (o.header === \"A\") header = 2;else if (Array.isArray(o.header)) header = 3;else if (o.header == null) header = 0;\n\n  switch (typeof range) {\n    case 'string':\n      r = safe_decode_range(range);\n      break;\n\n    case 'number':\n      r = safe_decode_range(sheet[\"!ref\"]);\n      r.s.r = range;\n      break;\n\n    default:\n      r = range;\n  }\n\n  if (header > 0) offset = 0;\n  var rr = encode_row(r.s.r);\n  var cols\n  /*:Array<string>*/\n  = [];\n  var out\n  /*:Array<any>*/\n  = [];\n  var outi = 0,\n      counter = 0;\n  var dense = Array.isArray(sheet);\n  var R = r.s.r,\n      C = 0;\n  var header_cnt = {};\n  if (dense && !sheet[R]) sheet[R] = [];\n  var colinfo\n  /*:Array<ColInfo>*/\n  = o.skipHidden && sheet[\"!cols\"] || [];\n  var rowinfo\n  /*:Array<ColInfo>*/\n  = o.skipHidden && sheet[\"!rows\"] || [];\n\n  for (C = r.s.c; C <= r.e.c; ++C) {\n    if ((colinfo[C] || {}).hidden) continue;\n    cols[C] = encode_col(C);\n    val = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\n    switch (header) {\n      case 1:\n        hdr[C] = C - r.s.c;\n        break;\n\n      case 2:\n        hdr[C] = cols[C];\n        break;\n\n      case 3:\n        hdr[C] = o.header[C - r.s.c];\n        break;\n\n      default:\n        if (val == null) val = {\n          w: \"__EMPTY\",\n          t: \"s\"\n        };\n        vv = v = format_cell(val, null, o);\n        counter = header_cnt[v] || 0;\n        if (!counter) header_cnt[v] = 1;else {\n          do {\n            vv = v + \"_\" + counter++;\n          } while (header_cnt[vv]);\n\n          header_cnt[v] = counter;\n          header_cnt[vv] = 1;\n        }\n        hdr[C] = vv;\n    }\n  }\n\n  for (R = r.s.r + offset; R <= r.e.r; ++R) {\n    if ((rowinfo[R] || {}).hidden) continue;\n    var row = make_json_row(sheet, r, R, cols, header, hdr, dense, o);\n    if (row.isempty === false || (header === 1 ? o.blankrows !== false : !!o.blankrows)) out[outi++] = row.row;\n  }\n\n  out.length = outi;\n  return out;\n}\n\nvar qreg = /\"/g;\n\nfunction make_csv_row(sheet\n/*:Worksheet*/\n, r\n/*:Range*/\n, R\n/*:number*/\n, cols\n/*:Array<string>*/\n, fs\n/*:number*/\n, rs\n/*:number*/\n, FS\n/*:string*/\n, o\n/*:Sheet2CSVOpts*/\n)\n/*:?string*/\n{\n  var isempty = true;\n  var row\n  /*:Array<string>*/\n  = [],\n      txt = \"\",\n      rr = encode_row(R);\n\n  for (var C = r.s.c; C <= r.e.c; ++C) {\n    if (!cols[C]) continue;\n    var val = o.dense ? (sheet[R] || [])[C] : sheet[cols[C] + rr];\n    if (val == null) txt = \"\";else if (val.v != null) {\n      isempty = false;\n      txt = '' + (o.rawNumbers && val.t == \"n\" ? val.v : format_cell(val, null, o));\n\n      for (var i = 0, cc = 0; i !== txt.length; ++i) {\n        if ((cc = txt.charCodeAt(i)) === fs || cc === rs || cc === 34 || o.forceQuotes) {\n          txt = \"\\\"\" + txt.replace(qreg, '\"\"') + \"\\\"\";\n          break;\n        }\n      }\n\n      if (txt == \"ID\") txt = '\"ID\"';\n    } else if (val.f != null && !val.F) {\n      isempty = false;\n      txt = '=' + val.f;\n      if (txt.indexOf(\",\") >= 0) txt = '\"' + txt.replace(qreg, '\"\"') + '\"';\n    } else txt = \"\";\n    /* NOTE: Excel CSV does not support array formulae */\n\n    row.push(txt);\n  }\n\n  if (o.blankrows === false && isempty) return null;\n  return row.join(FS);\n}\n\nfunction sheet_to_csv(sheet\n/*:Worksheet*/\n, opts\n/*:?Sheet2CSVOpts*/\n)\n/*:string*/\n{\n  var out\n  /*:Array<string>*/\n  = [];\n  var o = opts == null ? {} : opts;\n  if (sheet == null || sheet[\"!ref\"] == null) return \"\";\n  var r = safe_decode_range(sheet[\"!ref\"]);\n  var FS = o.FS !== undefined ? o.FS : \",\",\n      fs = FS.charCodeAt(0);\n  var RS = o.RS !== undefined ? o.RS : \"\\n\",\n      rs = RS.charCodeAt(0);\n  var endregex = new RegExp((FS == \"|\" ? \"\\\\|\" : FS) + \"+$\");\n  var row = \"\",\n      cols\n  /*:Array<string>*/\n  = [];\n  o.dense = Array.isArray(sheet);\n  var colinfo\n  /*:Array<ColInfo>*/\n  = o.skipHidden && sheet[\"!cols\"] || [];\n  var rowinfo\n  /*:Array<ColInfo>*/\n  = o.skipHidden && sheet[\"!rows\"] || [];\n\n  for (var C = r.s.c; C <= r.e.c; ++C) {\n    if (!(colinfo[C] || {}).hidden) cols[C] = encode_col(C);\n  }\n\n  var w = 0;\n\n  for (var R = r.s.r; R <= r.e.r; ++R) {\n    if ((rowinfo[R] || {}).hidden) continue;\n    row = make_csv_row(sheet, r, R, cols, fs, rs, FS, o);\n\n    if (row == null) {\n      continue;\n    }\n\n    if (o.strip) row = row.replace(endregex, \"\");\n    if (row || o.blankrows !== false) out.push((w++ ? RS : \"\") + row);\n  }\n\n  delete o.dense;\n  return out.join(\"\");\n}\n\nfunction sheet_to_txt(sheet\n/*:Worksheet*/\n, opts\n/*:?Sheet2CSVOpts*/\n) {\n  if (!opts) opts = {};\n  opts.FS = \"\\t\";\n  opts.RS = \"\\n\";\n  var s = sheet_to_csv(sheet, opts);\n  if (typeof $cptable == 'undefined' || opts.type == 'string') return s;\n  var o = $cptable.utils.encode(1200, s, 'str');\n  return String.fromCharCode(255) + String.fromCharCode(254) + o;\n}\n\nfunction sheet_to_formulae(sheet\n/*:Worksheet*/\n)\n/*:Array<string>*/\n{\n  var y = \"\",\n      x,\n      val = \"\";\n  if (sheet == null || sheet[\"!ref\"] == null) return [];\n  var r = safe_decode_range(sheet['!ref']),\n      rr = \"\",\n      cols\n  /*:Array<string>*/\n  = [],\n      C;\n  var cmds\n  /*:Array<string>*/\n  = [];\n  var dense = Array.isArray(sheet);\n\n  for (C = r.s.c; C <= r.e.c; ++C) {\n    cols[C] = encode_col(C);\n  }\n\n  for (var R = r.s.r; R <= r.e.r; ++R) {\n    rr = encode_row(R);\n\n    for (C = r.s.c; C <= r.e.c; ++C) {\n      y = cols[C] + rr;\n      x = dense ? (sheet[R] || [])[C] : sheet[y];\n      val = \"\";\n      if (x === undefined) continue;else if (x.F != null) {\n        y = x.F;\n        if (!x.f) continue;\n        val = x.f;\n        if (y.indexOf(\":\") == -1) y = y + \":\" + y;\n      }\n      if (x.f != null) val = x.f;else if (x.t == 'z') continue;else if (x.t == 'n' && x.v != null) val = \"\" + x.v;else if (x.t == 'b') val = x.v ? \"TRUE\" : \"FALSE\";else if (x.w !== undefined) val = \"'\" + x.w;else if (x.v === undefined) continue;else if (x.t == 's') val = \"'\" + x.v;else val = \"\" + x.v;\n      cmds[cmds.length] = y + \"=\" + val;\n    }\n  }\n\n  return cmds;\n}\n\nfunction sheet_add_json(_ws\n/*:?Worksheet*/\n, js\n/*:Array<any>*/\n, opts)\n/*:Worksheet*/\n{\n  var o = opts || {};\n  var offset = +!o.skipHeader;\n  var ws\n  /*:Worksheet*/\n  = _ws || {}\n  /*:any*/\n  ;\n  var _R = 0,\n      _C = 0;\n\n  if (ws && o.origin != null) {\n    if (typeof o.origin == 'number') _R = o.origin;else {\n      var _origin\n      /*:CellAddress*/\n      = typeof o.origin == \"string\" ? decode_cell(o.origin) : o.origin;\n\n      _R = _origin.r;\n      _C = _origin.c;\n    }\n  }\n\n  var cell\n  /*:Cell*/\n  ;\n  var range\n  /*:Range*/\n  = {\n    s: {\n      c: 0,\n      r: 0\n    },\n    e: {\n      c: _C,\n      r: _R + js.length - 1 + offset\n    }\n  }\n  /*:any*/\n  ;\n\n  if (ws['!ref']) {\n    var _range = safe_decode_range(ws['!ref']);\n\n    range.e.c = Math.max(range.e.c, _range.e.c);\n    range.e.r = Math.max(range.e.r, _range.e.r);\n\n    if (_R == -1) {\n      _R = _range.e.r + 1;\n      range.e.r = _R + js.length - 1 + offset;\n    }\n  } else {\n    if (_R == -1) {\n      _R = 0;\n      range.e.r = js.length - 1 + offset;\n    }\n  }\n\n  var hdr\n  /*:Array<string>*/\n  = o.header || [],\n      C = 0;\n  js.forEach(function (JS, R\n  /*:number*/\n  ) {\n    keys(JS).forEach(function (k) {\n      if ((C = hdr.indexOf(k)) == -1) hdr[C = hdr.length] = k;\n      var v = JS[k];\n      var t = 'z';\n      var z = \"\";\n      var ref = encode_cell({\n        c: _C + C,\n        r: _R + R + offset\n      });\n      cell = ws_get_cell_stub(ws, ref);\n\n      if (v && typeof v === 'object' && !(v instanceof Date)) {\n        ws[ref] = v;\n      } else {\n        if (typeof v == 'number') t = 'n';else if (typeof v == 'boolean') t = 'b';else if (typeof v == 'string') t = 's';else if (v instanceof Date) {\n          t = 'd';\n\n          if (!o.cellDates) {\n            t = 'n';\n            v = datenum(v);\n          }\n\n          z = o.dateNF || table_fmt[14];\n        } else if (v === null && o.nullError) {\n          t = 'e';\n          v = 0;\n        }\n        if (!cell) ws[ref] = cell = {\n          t: t,\n          v: v\n        }\n        /*:any*/\n        ;else {\n          cell.t = t;\n          cell.v = v;\n          delete cell.w;\n          delete cell.R;\n          if (z) cell.z = z;\n        }\n        if (z) cell.z = z;\n      }\n    });\n  });\n  range.e.c = Math.max(range.e.c, _C + hdr.length - 1);\n\n  var __R = encode_row(_R);\n\n  if (offset) for (C = 0; C < hdr.length; ++C) {\n    ws[encode_col(C + _C) + __R] = {\n      t: 's',\n      v: hdr[C]\n    };\n  }\n  ws['!ref'] = encode_range(range);\n  return ws;\n}\n\nfunction json_to_sheet(js\n/*:Array<any>*/\n, opts)\n/*:Worksheet*/\n{\n  return sheet_add_json(null, js, opts);\n}\n/* get cell, creating a stub if necessary */\n\n\nfunction ws_get_cell_stub(ws\n/*:Worksheet*/\n, R, C\n/*:?number*/\n)\n/*:Cell*/\n{\n  /* A1 cell address */\n  if (typeof R == \"string\") {\n    /* dense */\n    if (Array.isArray(ws)) {\n      var RC = decode_cell(R);\n      if (!ws[RC.r]) ws[RC.r] = [];\n      return ws[RC.r][RC.c] || (ws[RC.r][RC.c] = {\n        t: 'z'\n      });\n    }\n\n    return ws[R] || (ws[R] = {\n      t: 'z'\n    });\n  }\n  /* cell address object */\n\n\n  if (typeof R != \"number\") return ws_get_cell_stub(ws, encode_cell(R));\n  /* R and C are 0-based indices */\n\n  return ws_get_cell_stub(ws, encode_cell({\n    r: R,\n    c: C || 0\n  }));\n}\n/* find sheet index for given name / validate index */\n\n\nfunction wb_sheet_idx(wb\n/*:Workbook*/\n, sh\n/*:number|string*/\n) {\n  if (typeof sh == \"number\") {\n    if (sh >= 0 && wb.SheetNames.length > sh) return sh;\n    throw new Error(\"Cannot find sheet # \" + sh);\n  } else if (typeof sh == \"string\") {\n    var idx = wb.SheetNames.indexOf(sh);\n    if (idx > -1) return idx;\n    throw new Error(\"Cannot find sheet name |\" + sh + \"|\");\n  } else throw new Error(\"Cannot find sheet |\" + sh + \"|\");\n}\n/* simple blank workbook object */\n\n\nfunction book_new()\n/*:Workbook*/\n{\n  return {\n    SheetNames: [],\n    Sheets: {}\n  };\n}\n/* add a worksheet to the end of a given workbook */\n\n\nfunction book_append_sheet(wb\n/*:Workbook*/\n, ws\n/*:Worksheet*/\n, name\n/*:?string*/\n, roll\n/*:?boolean*/\n)\n/*:string*/\n{\n  var i = 1;\n  if (!name) for (; i <= 0xFFFF; ++i, name = undefined) {\n    if (wb.SheetNames.indexOf(name = \"Sheet\" + i) == -1) break;\n  }\n  if (!name || wb.SheetNames.length >= 0xFFFF) throw new Error(\"Too many worksheets\");\n\n  if (roll && wb.SheetNames.indexOf(name) >= 0) {\n    var m = name.match(/(^.*?)(\\d+)$/);\n    i = m && +m[2] || 0;\n    var root = m && m[1] || name;\n\n    for (++i; i <= 0xFFFF; ++i) {\n      if (wb.SheetNames.indexOf(name = root + i) == -1) break;\n    }\n  }\n\n  check_ws_name(name);\n  if (wb.SheetNames.indexOf(name) >= 0) throw new Error(\"Worksheet with name |\" + name + \"| already exists!\");\n  wb.SheetNames.push(name);\n  wb.Sheets[name] = ws;\n  return name;\n}\n/* set sheet visibility (visible/hidden/very hidden) */\n\n\nfunction book_set_sheet_visibility(wb\n/*:Workbook*/\n, sh\n/*:number|string*/\n, vis\n/*:number*/\n) {\n  if (!wb.Workbook) wb.Workbook = {};\n  if (!wb.Workbook.Sheets) wb.Workbook.Sheets = [];\n  var idx = wb_sheet_idx(wb, sh); // $FlowIgnore\n\n  if (!wb.Workbook.Sheets[idx]) wb.Workbook.Sheets[idx] = {};\n\n  switch (vis) {\n    case 0:\n    case 1:\n    case 2:\n      break;\n\n    default:\n      throw new Error(\"Bad sheet visibility setting \" + vis);\n  } // $FlowIgnore\n\n\n  wb.Workbook.Sheets[idx].Hidden = vis;\n}\n/* set number format */\n\n\nfunction cell_set_number_format(cell\n/*:Cell*/\n, fmt\n/*:string|number*/\n) {\n  cell.z = fmt;\n  return cell;\n}\n/* set cell hyperlink */\n\n\nfunction cell_set_hyperlink(cell\n/*:Cell*/\n, target\n/*:string*/\n, tooltip\n/*:?string*/\n) {\n  if (!target) {\n    delete cell.l;\n  } else {\n    cell.l = {\n      Target: target\n    }\n    /*:Hyperlink*/\n    ;\n    if (tooltip) cell.l.Tooltip = tooltip;\n  }\n\n  return cell;\n}\n\nfunction cell_set_internal_link(cell\n/*:Cell*/\n, range\n/*:string*/\n, tooltip\n/*:?string*/\n) {\n  return cell_set_hyperlink(cell, \"#\" + range, tooltip);\n}\n/* add to cell comments */\n\n\nfunction cell_add_comment(cell\n/*:Cell*/\n, text\n/*:string*/\n, author\n/*:?string*/\n) {\n  if (!cell.c) cell.c = [];\n  cell.c.push({\n    t: text,\n    a: author || \"SheetJS\"\n  });\n}\n/* set array formula and flush related cells */\n\n\nfunction sheet_set_array_formula(ws\n/*:Worksheet*/\n, range, formula\n/*:string*/\n, dynamic\n/*:boolean*/\n) {\n  var rng = typeof range != \"string\" ? range : safe_decode_range(range);\n  var rngstr = typeof range == \"string\" ? range : encode_range(range);\n\n  for (var R = rng.s.r; R <= rng.e.r; ++R) {\n    for (var C = rng.s.c; C <= rng.e.c; ++C) {\n      var cell = ws_get_cell_stub(ws, R, C);\n      cell.t = 'n';\n      cell.F = rngstr;\n      delete cell.v;\n\n      if (R == rng.s.r && C == rng.s.c) {\n        cell.f = formula;\n        if (dynamic) cell.D = true;\n      }\n    }\n  }\n\n  return ws;\n}\n\nvar utils\n/*:any*/\n= {\n  encode_col: encode_col,\n  encode_row: encode_row,\n  encode_cell: encode_cell,\n  encode_range: encode_range,\n  decode_col: decode_col,\n  decode_row: decode_row,\n  split_cell: split_cell,\n  decode_cell: decode_cell,\n  decode_range: decode_range,\n  format_cell: format_cell,\n  sheet_add_aoa: sheet_add_aoa,\n  sheet_add_json: sheet_add_json,\n  sheet_add_dom: sheet_add_dom,\n  aoa_to_sheet: aoa_to_sheet,\n  json_to_sheet: json_to_sheet,\n  table_to_sheet: parse_dom_table,\n  table_to_book: table_to_book,\n  sheet_to_csv: sheet_to_csv,\n  sheet_to_txt: sheet_to_txt,\n  sheet_to_json: sheet_to_json,\n  sheet_to_html: sheet_to_html,\n  sheet_to_formulae: sheet_to_formulae,\n  sheet_to_row_object_array: sheet_to_json,\n  sheet_get_cell: ws_get_cell_stub,\n  book_new: book_new,\n  book_append_sheet: book_append_sheet,\n  book_set_sheet_visibility: book_set_sheet_visibility,\n  cell_set_number_format: cell_set_number_format,\n  cell_set_hyperlink: cell_set_hyperlink,\n  cell_set_internal_link: cell_set_internal_link,\n  cell_add_comment: cell_add_comment,\n  sheet_set_array_formula: sheet_set_array_formula,\n  consts: {\n    SHEET_VISIBLE: 0,\n    SHEET_HIDDEN: 1,\n    SHEET_VERY_HIDDEN: 2\n  }\n};\n\nvar _Readable;\n\nfunction set_readable(R) {\n  _Readable = R;\n}\n\nfunction write_csv_stream(sheet\n/*:Worksheet*/\n, opts\n/*:?Sheet2CSVOpts*/\n) {\n  var stream = _Readable();\n\n  var o = opts == null ? {} : opts;\n\n  if (sheet == null || sheet[\"!ref\"] == null) {\n    stream.push(null);\n    return stream;\n  }\n\n  var r = safe_decode_range(sheet[\"!ref\"]);\n  var FS = o.FS !== undefined ? o.FS : \",\",\n      fs = FS.charCodeAt(0);\n  var RS = o.RS !== undefined ? o.RS : \"\\n\",\n      rs = RS.charCodeAt(0);\n  var endregex = new RegExp((FS == \"|\" ? \"\\\\|\" : FS) + \"+$\");\n  var row\n  /*:?string*/\n  = \"\",\n      cols\n  /*:Array<string>*/\n  = [];\n  o.dense = Array.isArray(sheet);\n  var colinfo\n  /*:Array<ColInfo>*/\n  = o.skipHidden && sheet[\"!cols\"] || [];\n  var rowinfo\n  /*:Array<RowInfo>*/\n  = o.skipHidden && sheet[\"!rows\"] || [];\n\n  for (var C = r.s.c; C <= r.e.c; ++C) {\n    if (!(colinfo[C] || {}).hidden) cols[C] = encode_col(C);\n  }\n\n  var R = r.s.r;\n  var BOM = false,\n      w = 0;\n\n  stream._read = function () {\n    if (!BOM) {\n      BOM = true;\n      return stream.push(\"\\uFEFF\");\n    }\n\n    while (R <= r.e.r) {\n      ++R;\n      if ((rowinfo[R - 1] || {}).hidden) continue;\n      row = make_csv_row(sheet, r, R - 1, cols, fs, rs, FS, o);\n\n      if (row != null) {\n        if (o.strip) row = row.replace(endregex, \"\");\n        if (row || o.blankrows !== false) return stream.push((w++ ? RS : \"\") + row);\n      }\n    }\n\n    return stream.push(null);\n  };\n\n  return stream;\n}\n\nfunction write_html_stream(ws\n/*:Worksheet*/\n, opts\n/*:?Sheet2HTMLOpts*/\n) {\n  var stream = _Readable();\n\n  var o = opts || {};\n  var header = o.header != null ? o.header : HTML_BEGIN;\n  var footer = o.footer != null ? o.footer : HTML_END;\n  stream.push(header);\n  var r = decode_range(ws['!ref']);\n  o.dense = Array.isArray(ws);\n  stream.push(make_html_preamble(ws, r, o));\n  var R = r.s.r;\n  var end = false;\n\n  stream._read = function () {\n    if (R > r.e.r) {\n      if (!end) {\n        end = true;\n        stream.push(\"</table>\" + footer);\n      }\n\n      return stream.push(null);\n    }\n\n    while (R <= r.e.r) {\n      stream.push(make_html_row(ws, r, R, o));\n      ++R;\n      break;\n    }\n  };\n\n  return stream;\n}\n\nfunction write_json_stream(sheet\n/*:Worksheet*/\n, opts\n/*:?Sheet2CSVOpts*/\n) {\n  var stream = _Readable({\n    objectMode: true\n  });\n\n  if (sheet == null || sheet[\"!ref\"] == null) {\n    stream.push(null);\n    return stream;\n  }\n\n  var val = {\n    t: 'n',\n    v: 0\n  },\n      header = 0,\n      offset = 1,\n      hdr\n  /*:Array<any>*/\n  = [],\n      v = 0,\n      vv = \"\";\n  var r = {\n    s: {\n      r: 0,\n      c: 0\n    },\n    e: {\n      r: 0,\n      c: 0\n    }\n  };\n  var o = opts || {};\n  var range = o.range != null ? o.range : sheet[\"!ref\"];\n  if (o.header === 1) header = 1;else if (o.header === \"A\") header = 2;else if (Array.isArray(o.header)) header = 3;\n\n  switch (typeof range) {\n    case 'string':\n      r = safe_decode_range(range);\n      break;\n\n    case 'number':\n      r = safe_decode_range(sheet[\"!ref\"]);\n      r.s.r = range;\n      break;\n\n    default:\n      r = range;\n  }\n\n  if (header > 0) offset = 0;\n  var rr = encode_row(r.s.r);\n  var cols\n  /*:Array<string>*/\n  = [];\n  var counter = 0;\n  var dense = Array.isArray(sheet);\n  var R = r.s.r,\n      C = 0;\n  var header_cnt = {};\n  if (dense && !sheet[R]) sheet[R] = [];\n  var colinfo\n  /*:Array<ColInfo>*/\n  = o.skipHidden && sheet[\"!cols\"] || [];\n  var rowinfo\n  /*:Array<RowInfo>*/\n  = o.skipHidden && sheet[\"!rows\"] || [];\n\n  for (C = r.s.c; C <= r.e.c; ++C) {\n    if ((colinfo[C] || {}).hidden) continue;\n    cols[C] = encode_col(C);\n    val = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\n    switch (header) {\n      case 1:\n        hdr[C] = C - r.s.c;\n        break;\n\n      case 2:\n        hdr[C] = cols[C];\n        break;\n\n      case 3:\n        hdr[C] = o.header[C - r.s.c];\n        break;\n\n      default:\n        if (val == null) val = {\n          w: \"__EMPTY\",\n          t: \"s\"\n        };\n        vv = v = format_cell(val, null, o);\n        counter = header_cnt[v] || 0;\n        if (!counter) header_cnt[v] = 1;else {\n          do {\n            vv = v + \"_\" + counter++;\n          } while (header_cnt[vv]);\n\n          header_cnt[v] = counter;\n          header_cnt[vv] = 1;\n        }\n        hdr[C] = vv;\n    }\n  }\n\n  R = r.s.r + offset;\n\n  stream._read = function () {\n    while (R <= r.e.r) {\n      if ((rowinfo[R - 1] || {}).hidden) continue;\n      var row = make_json_row(sheet, r, R, cols, header, hdr, dense, o);\n      ++R;\n\n      if (row.isempty === false || (header === 1 ? o.blankrows !== false : !!o.blankrows)) {\n        stream.push(row.row);\n        return;\n      }\n    }\n\n    return stream.push(null);\n  };\n\n  return stream;\n}\n\nvar __stream = {\n  to_json: write_json_stream,\n  to_html: write_html_stream,\n  to_csv: write_csv_stream,\n  set_readable: set_readable\n};\nexport var version = XLSX.version;\nexport { parse_xlscfb, parse_zip, readSync as read, readFileSync as readFile, readFileSync, writeSync as write, writeFileSync as writeFile, writeFileSync, writeFileAsync, writeSyncXLSX as writeXLSX, writeFileSyncXLSX as writeFileXLSX, utils, __stream as stream, SSF, CFB };"],"names":["XLSX","current_codepage","current_ansi","VALID_ANSI","CS2CP","set_ansi","cp","indexOf","set_cp","reset_cp","char_codes","data","o","i","len","length","charCodeAt","utf16beread","String","fromCharCode","join","$cptable","debom","c1","c2","utf16leread","slice","_getchar","x","_getansi","DENSE","Base64_map","Base64_encode","input","c3","e1","e2","e3","e4","isNaN","charAt","Base64_decode","replace","has_buf","Buffer","process","versions","node","Buffer_from","nbfs","from","e","buf","enc","bind","new_raw_buf","alloc","Uint8Array","Array","new_unsafe_buf","allocUnsafe","s2a","s","split","map","a2s","isArray","c","ab2a","ArrayBuffer","Error","bconcat","bufs","concat","isBuffer","maxlen","set","apply","call","chr0","chr1","_strrev","pad0","v","d","t","fill","pad_","rpad_","p2_32","Math","pow","pad0r","round","pad0r1","pad0r2","SSF_isgeneral","days","months","table_fmt","SSF_default_map","SSF_default_str","SSF_frac","D","mixed","sgn","B","P_2","P_1","P","Q_2","Q_1","Q","A","floor","q","SSF_parse_date_code","opts","b2","date","time","dow","dout","out","T","u","y","m","H","M","S","abs","date1904","Date","setDate","getDate","getFullYear","getMonth","getDay","SSF_fix_hijri","SSFbasedate","SSFdnthresh","getTime","SSFbase1904","datenum_local","epoch","getTimezoneOffset","SSF_strip_decimal","SSF_general_num","V","log","LOG10E","toPrecision","w","toFixed","toExponential","SSF_small_exp","substr","SSF_large_exp","SSF_normalize_exp","toUpperCase","SSF_general","toString","SSF_format","SSF_write_date","type","fmt","val","ss0","ss","tt","outl","commaify","j","pct1","write_num_exp","idx","match","period","ee","fakee","$$","$1","$2","$3","frac1","dec1","closeparen","phone","hashq","str","cc","rnd","dd","dec","_frac","write_num_flt","ffmt","write_num","write_num_cm","sfmt","mul","write_num_pct","r","ri","ff","aval","sign","den","parseInt","rr","base","myn","myd","write_num_f1","carry","oa","min","max","lres","rres","flr","write_num_exp2","write_num_int","write_num_cm2","write_num_pct2","write_num_f2","lastIndexOf","SSF_abstime","fmt_is_date","cfregex2","chkcond","thresh","parseFloat","choose_fmt","f","in_str","SSF_split_fmt","l","lat","m1","m2","dateNF","table","flen","dt","lst","hr","toLowerCase","ssm","bt","jj","nstr","myv","ostr","vv","decpt","lasti","retval","eval_fmt","SSF_load","undefined","make_ssf","SSFImplicit","dateNFregex","CRC32","version","T0","n","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","C","L","CFB","fs","exports","dirname","p","filename","write_dos_date","hms","getHours","getMinutes","getSeconds","write_shift","ymd","parse_extra_field","blob","prep_blob","flags","read_shift","sz","tgt","mtime","atime","ctime","mt","get_fs","parse","file","options","parse_zip","root","di","row","test","mboundary","boundary","FileIndex","FullPaths","init_cfb","start_di","fcnt","line","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","header","shift","check_shifts","dir_cnt","sectors","nsectors","ceil","sectorify","sleuth_fat","sector_list","sl","chkd","buf_chain","modulus","k","seen","push","addr","__readInt32LE","nodes","__toBuffer","make_sector_list","name","ENDOFCHAIN","Paths","files","mini","minifat_store","pl","sector","namelen","__utf16le","color","R","clsid","state","start","size","ct","read_date","storage","get_sector_list","content","get_mfat_entry","read_directory","FI","FP","dad","build_full_paths","raw","entry","payload","MSSZ","new_buf","cnt","offset","__readUInt32LE","cfb","CLSID","nm","find","rebuild_cfb","seed_cfb","gc","_file","pop","now","fullPaths","Object","create","HEADER_CLSID","sort","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","method","compression","start_cd","crcs","sz_cd","namebuf","outbuf","_deflateRawSync","write_zip","mini_size","fat_size","mfat_cnt","fat_base","fat_cnt","difat_cnt","HEADER_SIG","chainit","consts","DIFSECT","FATSECT","_nm","copy","_zlib","MAXREGSECT","FREESECT","HEADER_MINOR_VERSION","MAXREGSID","NOSTREAM","EntryTypes","deflateRawSync","_deflate","CLEN_ORDER","LEN_LN","DST_LN","bit_swap_8","use_typed_arrays","bitswap8","bit_swap_n","b","rev","read_bits_2","bl","h","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","a","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","hash","mlen","len_eb","dst_eb","write_huff_fixed","off","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","usz","woff","OL","max_len_1","max_len_2","bits","code","dst","inflate","warn_or_throw","wrn","msg","console","error","csz","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","text","encoded","si","end","tmp","fdata","fname","cte","trim","oi","parse_quoted_printable","fpath","utils","cfb_gc","path","UCFullPaths","UCPaths","UCPath","read","readFileSync","read_file","write","writeFileSync","writeFile","cfb_new","cfb_del","splice","cfb_mov","old_name","new_name","ReadShift","CheckField","use_zlib","zlib","message","_inflateRaw","_fs","keys","ks","o2","prototype","hasOwnProperty","evert","obj","K","basedate","datenum","refdate","dnthresh","refoffset","numdate","setTime","parse_isodur","sec","good_pd_date_1","good_pd_date","good_pd","parseDate","fixdate","cc2str","arr","debomit","utf8write","TextDecoder","decode","dup","JSON","stringify","fuzzynum","Number","isFinite","NaN","wt","lower_months","fuzzydate","getYear","lower","split_regex","safe_split_regex","re","def","getdatastr","asNodeBuffer","asBinary","_data","getContent","getdatabin","safegetzipfile","zip","g","getzipfile","getzipdata","safe","getzipstr","getzipbin","zipentries","zip_add_file","res","widx","ridx","utf8decode","zip_read","resolve_path","result","target","step","XML_HEADER","attregexg","tagregex1","tagregex","nsregex","nsregex2","parsexmltag","tag","skip_root","skip_LC","z","eq","quot","strip_ns","encodings","rencoding","unescapexml","encregex","coderegex","decregex","htmlcharegex","escapehtml","xlml_fixstr","entregex","entrepl","parsexmlbool","value","utf8reada","orig","utf8readb","ww","utf8readc","utf8corpus","utf8read","matchtag","mtcache","RegExp","htmldecode","entities","vtregex","vt_cache","vtvregex","vtmregex","parseVector","matches","baseType","WTF","forEach","wtregex","wxt_helper","writextag","xlml_normalize","xlmlregex","XMLNS","CORE_PROPS","CUST_PROPS","EXT_PROPS","CT","RELS","TCMNT","XMLNS_main","___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","cpdoit","readUInt32LE","readDoubleLE","__readInt16LE","__readInt32BE","oI","oR","loc","oo","this","lens","__writeUInt32LE","__writeInt32LE","__writeUInt16LE","WriteShift","cppayload","encode","bs","av","LN2","write_double_le","hexstr","fld","pos","parsenoop","recordhopper","cb","tmpbyte","cntbyte","RT","XLSBRecordEnum","buf_array","blksz","newblk","curbuf","endbuf","next","_bufs","shift_cell_xls","cell","cRel","rRel","biff","shift_range_xls","range","encode_cell_xls","encode_cell","fix_row","encode_range_xls","encode_row","encode_col","decode_row","rowstr","decode_col","colstr","col","decode_cell","decode_range","encode_range","cs","ce","safe_decode_range","safe_format_cell","XF","numFmtId","format_cell","BErr","sheet_to_workbook","sheet","sheets","SheetNames","Sheets","sheet_add_aoa","_ws","dense","ws","_R","_C","origin","_origin","_range","__R","__C","nullError","sheetStubs","cellDates","cell_ref","aoa_to_sheet","parse_XLWideString","cchCharacters","parse_StrRun","ich","ifnt","parse_RichStr","rgsStrRun","dwSizeStrRun","parse_BrtCommentText","parse_XLSBCell","iStyleRef","parse_XLSBShortCell","parse_XLSBCodeName","parse_XLNullableWideString","parse_XLNameWideString","parse_RelID","parse_RkNumber","fX100","fInt","RK","parse_RfX","parse_UncheckedRfX","parse_Xnum","parse_ClipboardFormatOrString","VT_I2","VT_I4","VT_VARIANT","VT_STRING","VT_USTR","VT_CUSTOM","DocSummaryPIDDSI","SummaryPIDSI","CountryEnum","XLSFillPattern","rgbify","XLSIcv","RBErr","ct2type","WB","SHEET","HLINK","VML","XPATH","XMISS","XLINK","CXML","CXMLP","CMNT","SST","STY","THEME","CHART","CHARTEX","CS","WS","DS","MS","IMG","DRAW","XLMETA","PEOPLE","VBA","get_rels_path","parse_rels","currentFilePath","rels","rel","Type","Target","Id","TargetMode","canonictarget","CT_ODS","CORE_PROPS_REGEX","parse_core_props","cur","load_props_pairs","HP","TOP","props","hp","parts","Worksheets","NamedRanges","DefinedNames","Chartsheets","ChartNames","custregex","evert_XLMLDPM","XLMLDocPropsMap","Title","Subject","Author","Keywords","Comments","LastAuthor","RevNumber","Application","LastPrinted","CreatedDate","ModifiedDate","Category","Manager","Company","AppVersion","ContentStatus","Identifier","Language","xlml_set_prop","Props","parse_FILETIME","dwLowDateTime","dwHighDateTime","toISOString","parse_lpstr","pad","parse_lpwstr","parse_VtStringBase","stringType","parse_VtString","parse_VtHeadingPair","headingString","parse_TypedPropertyValue","parse_dictionary","CodePage","dict","pid","parse_BLOB","bytes","ret","Size","parse_ClipboardData","parse_VtUnalignedString","cElements","parse_VtVecHeadingPairValue","parse_VtVecLpwstrValue","parse_VtVecUnalignedLpstrValue","parse_PropertySet","PIDSI","start_addr","NumProps","Dictionary","DictObj","PropID","Offset","PropH","fail","piddsi","oldpos","parsebool","parse_PropertySetStream","NumSets","FMTID0","FMTID1","Offset0","Offset1","SystemIdentifier","PSet1","PSet0","rval","FMTID","parsenoop2","parseuint16","parseuint16a","parslurp","parse_ShortXLUnicodeString","cch","encoding","parse_XLUnicodeRichExtendedString","cbExtRst","fExtSt","fRichSt","width","cRun","parse_XLUnicodeStringNoCch","parse_XLUnicodeString","parse_XLUnicodeString2","parse_HyperlinkMoniker","extra","url","parse_URLMoniker","cAnti","preamble","ansiPath","parse_FileMoniker","parse_HyperlinkString","parse_LongRGBA","parse_LongRGB","parse_XLSCell","ixfe","parse_XTI","parse_RkRec","parse_Ref8U","rwFirst","rwLast","parse_RefU","parse_Ref","parse_FtCmo","ot","id","parse_FtSkip","FtTab","cf","fSharedNote","parse_BOF","BIFFVer","parse_DefaultRowHeight","miyRw","Unsynced","DyZero","ExAsc","ExDsc","parse_BIFF2Format","parse_Dimensions","parse_BoolErr","parse_Bes","parse_XLHeaderFooter","parse_ExternName","body","fBuiltIn","fWantAdvise","fWantPict","fOle","fOleLink","fIcon","sbcch","udfName","parse_AddinUdf","Name","XLSLblBuiltIn","parse_Lbl","chKey","cce","itab","npflen","rgce","rgcb","parse_Rgce","parse_RgbExtra","parse_NameParsedFormula","parse_ExternSheet","parse_BIFF5ExternSheet","parse_Array","ref","parse_ArrayParsedFormula","parse_BIFF5OT","cchName","parse_ColInfo","cellStyles","colFirst","colLast","coldx","level","parse_Blank","parse_Scl","parse_String","DBF_SUPPORTED_VERSIONS","DBF","dbf_codepage_map","dbf_reverse_map","dbf_to_sheet","ft","memo","vfp","l7","nrow","fpos","rlen","current_cp","codepage","fields","field","hend","sheetRows","dbf_to_aoa","wch","_RLEN","to_workbook","to_sheet","from_sheet","ba","aoa","sheet_to_json","headers","cols","hcnt","coltypes","colwidths","coldecimals","guess","_guess","hf","_f","hb","rout","_n","_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","formats","next_cell_format","sht","rowinfo","colinfo","cw","Mval","rstr","record","C_seen_K","C_seen_X","C_seen_S","C_seen_E","formula","rc_to_a1","shrbase","shift_formula_str","F_seen","hidden","process_col","hpt","hpx","pt2px","sylk_to_sheet","aoasht","sylk_to_aoa","write_ws_cell_sylk","F","a1_to_rc","RS","rec","wpx","width2px","px2char","rows","px2pt","write_ws_rows_sylk","coord","DIF","dif_to_aoa_str","metadata","dif_to_sheet","dif_to_aoa","push_field","topic","push_value","ETH","eth_to_sheet","eth_to_aoa","sep","meta","sheet_to_eth_data","PRN","set_text_arr","guess_seps","guess_sep_weights","guess_sep","instr","dsv_to_sheet_str","FS","sepcc","startcc","_re","dateNF_regex","finish_cell","Y","datestr","timestr","dateNF_fix","cellText","cellNF","outer","prn_to_sheet_str","lines","prn_to_aoa_str","prn_to_sheet","firstbyte","WK_","lotushopper","Enum","WK1Enum","lotus_to_workbook_buf","next_n","sidx","snames","realnames","refguess","vers","qpro","tmpcell","WK3Enum","osheets","rnames","parse_cell","parse_LABEL","write_LABEL","write_INTEGER","write_NUMBER","wk1_parse_rc","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","args","wk1_fmla_to_csf","sheet_to_wk1","write_biff_rec","write_BOF_WK1","write_RANGE","max_R","book_to_wk3","wb","wscnt","write_BOF_WK3","parse_rs","tregex","rpregex","parse_r","rpr","font","pass","shadow","outline","strike","uval","rgb","family","valign","parse_rpr","rregex","rend","rs","filter","rs_to_html","nlregex","r_to_html","terms","intro","outro","style","align","parse_rpr2","sitregex","sirregex","sirphregex","parse_si","html","cellHTML","sstr0","sstr1","sstr2","_JS2ANSI","parse_CRYPTOVersion","Major","Minor","parse_DataSpaceMapEntry","comps","parse_Primary","hdr","U","W","parse_TransformInfoHeader","ename","cmode","parse_EncryptionHeader","Flags","AlgID","valid","AlgIDHash","KeySize","ProviderType","CSPName","parse_EncryptionVerifier","Salt","Verifier","VerifierHash","parse_EncInfoStd","parse_EncInfoExt","parse_EncInfoAgl","KeyData","xml","encryptedHmacKey","encryptedHmacValue","encs","uri","crypto_CreatePasswordVerifier_Method1","Password","PasswordArray","PasswordDecoded","crypto_CreateXorArray_Method1","PadArray","InitialCode","XorMatrix","XorRor","byte1","byte2","Byte","password","Temp","PasswordLastChar","PadIndex","XorKey","CurrentElement","Char","CreateXorKey_Method1","Index","ObfuscationArray","crypto_MakeXorDecryptor","XorArrayIndex","XorArray","Data","O","Value","crypto_DecryptData_Method1","parse_FilePassHeader","Info","EncryptionVersionInfo","EncryptedVerifier","EncryptedVerifierHash","parse_RC4Header","EncryptionHeader","EncryptionVerifier","parse_RC4CryptoHeader","RTF","rtf_to_sheet","rtf_to_sheet_str","rowtf","rtfre","last_index","exec","lastIndex","rgb2Hex","rgb_tint","hex","tint","hsl","G","H6","L2","rgb2HSL","hex2RGB","X","h6","hsl2RGB","DEF_MDW","MAX_MDW","MIN_MDW","MDW","px","char2width","chr","cycle_width","collw","find_mdw_colw","delta","_MDW","coll","customWidth","PPI","pt","XLMLPatternTypeMap","cellXF_uint","cellXF_bool","parse_sty_xml","numFmtRegex","cellXfRegex","fillsRegex","fontsRegex","bordersRegex","themes","styles","NumberFmt","formatCode","parse_numFmts","Fonts","bold","italic","underline","condense","extend","vertAlign","scheme","auto","indexed","index","icv","theme","themeElements","clrScheme","parse_fonts","Fills","patternType","bgColor","fgColor","parse_fills","Borders","border","diagonalUp","diagonalDown","parse_borders","xf","CellXf","alignment","vertical","horizontal","textRotation","indent","wrapText","parse_cellXfs","parse_BrtFill","parse_BrtBorder","XLSXThemeClrScheme","parse_clrScheme","lastClr","parse_fontScheme","parse_fmtScheme","clrsregex","fntsregex","fmtsregex","themeltregex","parse_theme_xml","write_theme","parse_themeElements","Themes","themeXLSX","parse_FullColorExt","xclrType","nTintShade","xclrValue","parse_IcvXF","parse_ColorTheme","parse_ExtProp","extType","parse_XFExtGradient","sheet_insert_comments","comments","threaded","people","comment","author","parse_BrtCommentAuthor","CT_VBA","rcregex","rcbase","rcfunc","fstr","crefregex","$0","$4","$5","shift_formula_xlsx","_xlfn","parseread1","parse_ColRelU","parse_RgceArea","parse_RgceArea_BIFF2","parse_RgceLoc","parse_RgceLoc_BIFF2","parse_RgceElfLoc","fQuoted","parse_PtgAttrBaxcel","bitSemi","parse_PtgAttrSpaceType","parse_SerAr","parse_PtgExtraMem","count","parse_PtgExtraArray","parse_PtgElfLoc","parse_PtgElfNoop","parse_PtgElfLel","PtgListRT","PtgTypes","iftab","FtabArgc","Ftab","cparams","tab","parsetab","Cetab","nameindex","rl","parse_RgceLocRel_BIFF2","cl","parse_RgceLocRel","area","parse_RgceAreaRel","ixti","parse_PtgNameX_BIFF5","PtgDupes","Ptg18","coltype","rt","Ptg19","bitIf","bitGoto","ptgs","stringify_array","PtgBinOp","PtgAdd","PtgConcat","PtgDiv","PtgEq","PtgGe","PtgGt","PtgLe","PtgLt","PtgMul","PtgNe","PtgPower","PtgSub","get_ixti_raw","supbooks","XTI","SID","get_ixti","ixtiraw","sname","formula_quote_sheet_name","stringify_formula","stack","nameidx","last_sp","sp","fflen","func","lbl","names","xlfn","externbook","bookidx","ixtidata","lp","rp","sharedf","parsedf","fnd","arrayf","_left","parse_SharedParsedFormula","parse_Formula","parse_FormulaValue","cbf","parse_XLSCellParsedFormula","shared","parse_XLSBParsedFormula","parse_XLSBArrayParsedFormula","parse_XLSBCellParsedFormula","parse_XLSBNameParsedFormula","parse_XLSBSharedParsedFormula","ods_to_csf_formula","ods_to_csf_3D","strs","_ssfopts","default_margins","margins","mode","defs","left","right","top","bottom","footer","safe_format","fmtid","fillid","raw_rgb","mergecregex","sheetdataregex","hlinkregex","dimregex","colregex","afregex","marginregex","sheetprregex","sheetprregex2","svsregex","parse_ws_xml","data1","data2","mtch","sheetPr","parse_ws_xml_sheetpr","parse_ws_xml_sheetpr2","parse_ws_xml_dim","svs","Views","sviewregex","zoomScale","zoom","rightToLeft","RTL","parse_ws_xml_sheetviews","columns","seencol","coli","colm","colM","outlineLevel","parse_ws_xml_cols","parse_ws_xml_data","afilter","parse_ws_xml_autofilter","merges","_merge","hlink","location","Rel","tooltip","Tooltip","rng","parse_ws_xml_hlinks","margin","parse_ws_xml_margins","tmpref","codeName","CodeName","cellregex","rowregex","isregex","refregex","match_v","match_f","sdata","sstr","ftag","cells","cref","tagr","tagc","do_format","rowobj","rowrite","marr","marrlen","xlen","rstarti","outa","ht","rslice","cellFormula","___f","_tag","fillId","cm","xlmeta","Cell","_r","parse_BrtWsDim","parse_BrtShortReal","parse_BrtMergeCell","BrtMarginKeys","parse_chart","csheet","nc","cache","num","nf","parse_Cache","WBPropsDef","WBViewDef","SheetDef","CalcPrDef","push_defaults_array","defaults","push_defaults","parse_wb_defaults","WBProps","CalcPr","WBView","badchars","check_ws_name","_good","wbnsregex","parse_BrtFRTArchID$","ArchID","parse_wb","xmlns","Names","Sheet","Ref","Ptg","parse_wb_bin","dname","dnstart","Hidden","Comment","localSheetId","parse_wb_xml","parse_ws","ai","af","vm","RR","aii","_d","relId","rfx","above","parse_ws_bin","parse_cs","parse_cs_bin","parse_cs_xml","parse_sty","parse_sty_bin","parse_sst","Count","Unique","parse_sst_bin","sst","uniqueCount","parse_sst_xml","parse_cmnt","authors","iauthor","parse_comments_bin","commentList","authtag","cmnttag","authorId","guid","textMatch","parse_comments_xml","parse_cc","parse_cc_bin","parse_cc_xml","parse_xlink","parse_xlink_bin","parse_xlmeta","Types","metatype","parse_xlmeta_bin","lastmeta","offsets","parse_xlmeta_xml","XLMLFormatMap","attregexg2","attregex2","xlml_parsexmltag","words","xlml_parsexmltagobj","xlml_set_custprop","Custprops","key","oval","safe_format_xlml","format","xlml_format","process_style_xlml","stag","Interior","I","Pattern","ID","parse_xlml_data","csty","sid","StyleID","interiors","Parent","UTC","Formula","ArrayRange","xlml_clean_comment","parse_xlml_xml","Rn","opening","ishtml","_o","html_to_sheet","book_append_sheet","html_to_workbook","sheetnames","cursheet","sheetname","dtag","didx","fidx","pidx","cstys","Workbook","wsprops","raw_Rn3","HRef","HRefScreenTip","MergeAcross","MergeDown","cma","cmd","AutoFitHeight","Height","Format","ssfidx","Width","_col","Span","_NamedRange","_DefinedName","RefersTo","AutoFilter","Range","parse_fods","Margin","pagemargins","Top","Left","Right","Bottom","bookSheets","bookProps","SSF","parse_xlml","fix_read_opts","parse_compobj","AnsiUserType","AnsiClipboardFormat","parse_ClipboardFormatOrAnsiString","Reserved1","UnicodeClipboardFormat","parse_ClipboardFormatOrUnicodeString","Reserved2","CONTINUE_RT","slurp","RecordType","insitu","nextrt","XLSRecordEnum","ll","safe_format_xf","make_cell","parse_workbook","lastcell","cmnt","rngC","rngR","temp_val","country","Directory","last_formula","cur_sheet","Preamble","last_cell","XFs","palette","get_rgb","addcell","file_depth","xfd","icvFore","icvBack","process_cell_style","afi","rrtabid","lastuser","winlocked","wtf","objects","last_lbl","last_RT","BIFF2Fmt","BIFF2FmtTable","FilterDatabases","seen_codepage","Date1904","WriteProtect","cpval","CalcRefMode","FullCalc","fDialog","fBelow","fRight","ExternCount","tmpri","biffguess","fakebs8","hs","rknum","rkrec","_fr","_fc","_fe","_arraystart","isst","_j","_ixfe","b4idx","b2idx","cmo","lastobj","TxO","ImData","noteobj","xfe","Strings","Encryption","Metadata","Country","PSCLSID","SI","DSI","UDI","parse_xlscfb","CompObj","WorkbookP","bookVBA","vbaraw","newcfb","newpath","make_vba_xls","DocSummary","Summary","HeadingPairs","TitlesOfParts","parse_xls_props","bookFiles","grbit","fBold","fItalic","fUnderline","fStrikeout","fOutline","fShadow","fCondense","fExtend","parse_FontFlags","bCharSet","charset","xColorType","nTS","bR","bG","bB","parse_BrtColor","ixfeParent","ifmt","defaultThemeVersion","strName","autoCompressPictures","backupFile","checkCompatibility","filterPrivacy","hidePivotFieldList","promptedSolutions","publishItems","refreshAllConnections","saveExternalLinkValues","showBorderUnselectedTables","showInkAnnotation","showObjects","showPivotChartFilter","updateLinks","iTabID","strRelID","fAlwaysCalc","display","idObj","stAuthor","parse_NoteSh","verificationBytes","verifier","parse_XORObfuscation","dyHeight","fl","Pos","Dim","CurTab","FirstTab","Selected","TabRatio","UserName","fts","parse_BIFF5Obj","parse_FtArray","ccv","rw","rkrecs","lastcol","ixfes","fStyle","alc","fWrap","alcV","fJustLast","trot","cIndent","fShrinkToFit","iReadOrder","fAtrNum","fAtrFnt","fAtrAlc","fAtrBdr","fAtrPat","fAtrProt","dgLeft","dgRight","dgTop","dgBottom","icvLeft","icvRight","grbitDiag","icvTop","icvBottom","icvDiag","dgDiag","fsxButton","parse_CellStyleXF","cmcs","ucnt","extsst","dsst","ctab","virtPath","rgst","texts","accel","parse_ControlInfo","cchText","sVer","displayName","targetFrameName","moniker","oleMoniker","fileTime","Loc","parse_Hyperlink","xnum","cUse","wzTooltip","cxfs","crc","cexts","cchComment","themeXML","parse_frtHeader","env","lcb","mtch2","hd","midx","colspan","rowspan","_t","make_html_row","editable","HTML_BEGIN","HTML_END","make_html_preamble","sheet_to_html","sheet_add_dom","or_R","or_C","getElementsByTagName","is_dom_element_hidden","elts","children","hasAttribute","getAttribute","innerHTML","Aelts","Aelti","parse_dom_table","element","get_computed_style","ownerDocument","defaultView","getComputedStyle","get_get_computed_style_function","getPropertyValue","parse_text_p","fixed","number_formats_ods","day","month","year","hours","minutes","seconds","era","quarter","parse_content_xml","sheetag","rowtag","NFtag","NF","ctag","textp","textpidx","textR","row_ol","number_format_map","mrange","rowpeat","colpeat","atag","_Ref","creator","creatoridx","isstub","intable","rptR","rpt","nrange","ptp","href","parse_ods","FEtag","parse_manifest","u8_to_dataview","array","DataView","buffer","byteOffset","byteLength","u8str","u8","u8concat","u8a","reduce","acc","popcnt","parse_varint49","ptr","varint","varint_to_i32","i32","parse_shallow","mappa","parse_iwa_file","_a","messages","mi","merge","parse_snappy_chunk","chunks","decompress_iwa_file","parse_new_storage","rsst","dv","getUint32","data_offset","d128","ieee","exp","mantissa","readDecimal128LE","getFloat64","parse_cell_storage","parse_old_storage","parse_TSP_Reference","parse_TST_TableDataList","pb","entries","le","rtp","rtpref","mtype","tswpsa","parse_TST_Tile","_b","_c","_e","_g","_h","_i","_k","_l","_m","used_storage_u8","used_storage","wide_offsets","used_storage_offsets","getUint16","parse_TST_TileRowInfo","nrows","parse_TST_TableInfoArchive","tableref","store","tile","tl","_tile","parse_TST_TableModelArchive","parse_TN_DocumentArchive","root2","parse_TN_SheetArchive","parse_numbers_iwa","indices","packets","packet","docroot","iwam","fix_opts_func","safe_parse_sheet","relsPath","sheetRels","stype","dfile","drelsp","draw","parse_drawing","chartp","crelsp","parse_ds","tcomments","tidx","personId","parse_tcmnt_xml","strip_front_slash","_zip","binname","dir","workbooks","charts","dialogs","macros","threadedcomments","links","coreprops","extprops","custprops","calcchains","vba","drawings","TODO","ctext","Extension","ContentType","PartName","calcchain","parse_ct","xlsb","parse_theme","link","propdata","parse_ext_props","toks","warn","parse_cust_props","deps","bookDeps","wbsheets","wbext","wbrelsi","wbrelsfile","wbrels","displayname","parse_people_xml","safe_parse_wbrels","nmode","wsloop","snjseen","snj","Deps","Styles","bin","parse_xlsxcfb","parse_DataSpaceVersionInfo","dsm","parse_DataSpaceMap","seds","parse_DataSpaceDefinition","einfo","parse_EncryptionInfo","decrypt_agile","decrypt_std76","read_plaintext","main","read_prn","readSync","Deno","$","File","Folder","infile","open","close","read_binary","bstrify","ab","vu","foo","read_cfb","OLD_WTF","read_wb_ID","read_zip","read_utf16","read_plaintext_raw","make_json_row","defval","isempty","defineProperty","enumerable","__rowNum__","rawNumbers","outi","counter","header_cnt","skipHidden","blankrows","qreg","make_csv_row","txt","forceQuotes","sheet_to_csv","endregex","strip","sheet_to_txt","sheet_add_json","js","skipHeader","JS","ws_get_cell_stub","RC","book_new","roll","cell_set_hyperlink","split_cell","json_to_sheet","table_to_sheet","table_to_book","sheet_to_formulae","cmds","sheet_to_row_object_array","sheet_get_cell","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","rngstr","SHEET_VISIBLE","SHEET_HIDDEN","SHEET_VERY_HIDDEN"],"sourceRoot":""}