{"version":3,"sources":["jsdelivr-header.js","/npm/@chillerlan/qrcode@1.0.1/src/QRCodeException.js","/npm/@chillerlan/qrcode@1.0.1/src/Common/PHPJS.js","/npm/@chillerlan/qrcode@1.0.1/src/Common/constants.js","/npm/@chillerlan/qrcode@1.0.1/src/Output/QROutputInterface.js","/npm/@chillerlan/qrcode@1.0.1/src/Output/QRCodeOutputException.js","/npm/@chillerlan/qrcode@1.0.1/src/Output/QROutputAbstract.js","/npm/@chillerlan/qrcode@1.0.1/src/Output/QRMarkupSVG.js","/npm/@chillerlan/qrcode@1.0.1/src/QROptions.js","/npm/@chillerlan/qrcode@1.0.1/src/Common/MaskPattern.js","/npm/@chillerlan/qrcode@1.0.1/src/Common/Mode.js","/npm/@chillerlan/qrcode@1.0.1/src/Data/QRCodeDataException.js","/npm/@chillerlan/qrcode@1.0.1/src/Data/QRDataModeInterface.js","/npm/@chillerlan/qrcode@1.0.1/src/Data/QRDataModeAbstract.js","/npm/@chillerlan/qrcode@1.0.1/src/Data/AlphaNum.js","/npm/@chillerlan/qrcode@1.0.1/src/Data/Byte.js","/npm/@chillerlan/qrcode@1.0.1/src/Data/Numeric.js","/npm/@chillerlan/qrcode@1.0.1/src/Common/BitBuffer.js","/npm/@chillerlan/qrcode@1.0.1/src/Common/EccLevel.js","/npm/@chillerlan/qrcode@1.0.1/src/Common/Version.js","/npm/@chillerlan/qrcode@1.0.1/src/Common/GF256.js","/npm/@chillerlan/qrcode@1.0.1/src/Common/GenericGFPoly.js","/npm/@chillerlan/qrcode@1.0.1/src/Common/ReedSolomonEncoder.js","/npm/@chillerlan/qrcode@1.0.1/src/Data/QRMatrix.js","/npm/@chillerlan/qrcode@1.0.1/src/Data/QRData.js","/npm/@chillerlan/qrcode@1.0.1/src/QRCode.js","/npm/@chillerlan/qrcode@1.0.1/src/Output/QRCanvas.js","/npm/@chillerlan/qrcode@1.0.1/src/Output/QRStringText.js","/npm/@chillerlan/qrcode@1.0.1/src/Output/QRStringJSON.js","/npm/@chillerlan/qrcode@1.0.1/src/index.js"],"names":[],"mappings":"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AC,GAAI,CAAC,CAAE,EAAG,IAAK,CAAC,GAAI,MAAO,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,MAAO,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,OAC5G,CAAC,CAAC,GAAI,CAAC,CAAE,EAAG,KAAM,CAAE,EAAG,OAAQ,CAAC,GAAI,CAAC,CAAE,EAAG,IAAK,CAAC,GAAI,MAAO,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,MAAO,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAE,EAAG,OAC5G,CAAC,CAAC,GAAI,CAAC,CAAE,EAAG,KAAM,CAAE,EAAG,OAAQ,CAAC,GAAI,CAAC,CAAE,EAAG,IAAK,CAAC,GAAI,MAAO,CAAC,GAAI,CAAC,CAAE,EAAG,IAAK,CAAC,GAAI,MAAO,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,OAC5G,CAAC,CAAC,GAAI,CAAC,CAAC,GAAI,KAAM,CAAE,EAAG,OAAQ,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAE,EAAG,MAAO,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAE,EAAG,MAAO,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAE,EAAG,OAC5G,CAAC,CAAC,GAAI,CAAC,CAAE,EAAG,KAAM,CAAE,EAAG,OAAQ,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAE,EAAG,MAAO,CAAC,GAAI,CAAC,CAAE,EAAG,IAAK,CAAC,GAAI,MAAO,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,OAC5G,CAAC,CAAC,GAAI,CAAC,CAAE,EAAG,KAAM,CAAC,GAAI,OAAQ,CAAC,GAAI,CAAC,CAAE,EAAG,IAAK,CAAC,GAAI,MAAO,CAAC,GAAI,CAAC,CAAE,EAAG,IAAK,CAAC,GAAI,MAAO,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,OAC5G,CAAC,CAAC,GAAI,CAAC,CAAE,EAAG,KAAM,CAAE,EAAG,OAAQ,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAE,EAAG,MAAO,CAAC,GAAI,CAAC,CAAE,EAAG,IAAK,CAAC,GAAI,MAAO,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,OAC5G,CAAC,CAAC,GAAI,CAAC,CAAE,EAAG,KAAM,CAAC,GAAI,OAAQ,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,MAAO,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,MAAO,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,OAC5G,CAAC,CAAC,GAAI,CAAC,CAAC,GAAI,KAAM,CAAE,EAAG,OAAQ,CAAC,GAAI,CAAC,CAAE,EAAG,IAAK,CAAC,GAAI,MAAO,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAE,EAAG,MAAO,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,OAC5G,CAAC,CAAC,GAAI,CAAC,CAAC,GAAI,KAAM,CAAE,EAAK,KAAM,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,MAAO,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,MAAO,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,OAC5G,CAAC,CAAC,GAAI,CAAC,CAAC,GAAI,KAAM,CAAE,EAAG,OAAQ,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,MAAO,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,MAAO,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,OAC5G,CAAC,CAAC,GAAI,CAAC,CAAC,GAAI,KAAM,CAAE,EAAG,OAAQ,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,MAAO,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAE,EAAG,MAAO,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAE,EAAG,OAC5G,CAAC,CAAC,GAAI,CAAC,CAAC,GAAI,KAAM,CAAE,EAAG,OAAQ,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,MAAO,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,MAAO,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,OAC5G,CAAC,CAAC,GAAI,CAAC,CAAE,EAAG,KAAM,CAAC,GAAI,OAAQ,CAAC,GAAI,CAAC,CAAE,EAAG,IAAK,CAAC,GAAI,MAAO,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,MAAO,CAAC,GAAI,CAAC,CAAE,EAAG,IAAK,CAAC,GAAI,OAC5G,CAAC,CAAC,GAAI,CAAC,CAAC,GAAI,KAAM,CAAE,EAAG,OAAQ,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,MAAO,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,MAAO,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,OAC5G,CAAC,CAAC,GAAI,CAAC,CAAE,EAAG,KAAM,CAAC,GAAI,OAAQ,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,MAAO,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,MAAO,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,OAC5G,CAAC,CAAC,GAAI,CAAC,CAAC,GAAI,KAAM,CAAE,EAAG,OAAQ,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAE,EAAG,MAAO,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,MAAO,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,OAC5G,CAAC,CAAC,GAAI,CAAC,CAAC,GAAI,KAAM,CAAE,EAAG,OAAQ,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,MAAO,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,MAAO,CAAC,GAAI,CAAC,CAAC,GAAI,IAAK,CAAC,GAAI,SAMvG,iBAAe,iBAAA,EAAA,KAAG,CACvB,KACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,OAMoB,QAAO,WA0B3B,OAAA,cATA,SAAA,EAAY,GAEX,GAFoB,gBAAA,KAAA,GAfrB,gBAAA,KAAA,kBAAA,iBAAA,EAAA,KAAA,iBAAA,EAAA,KAiBI,iBAAA,EAAA,QAAA,EAAW,IAAC,iBAAA,EAAA,QAAI,EAAW,IAC7B,MADgC,iBAAA,EAAA,QAAA,iBAAA,EAAA,KAC1B,IAAI,gBAAgB,yBAC1B,iBAAA,EAAA,QAAA,iBAAA,EAAA,KAED,KAAK,QAAU,CAChB,GAEA,EAAA,IAAA,WAAA,MAKA,WACC,OADS,iBAAA,EAAA,KAAA,iBAAA,EAAA,KACF,KAAK,QAAU,EACvB,GAEA,CAAA,IAAA,mBAAA,MAKA,WACC,OADiB,iBAAA,EAAA,KAAA,iBAAA,EAAA,KACV,KAAK,OACb,GAEA,CAAA,IAAA,eAAA,MAKA,WACC,OADa,iBAAA,EAAA,KAAA,iBAAA,EAAA,KACS,EAAf,KAAK,QAAc,EAC3B,GAEA,CAAA,IAAA,oBAAA,MAKA,WAAmB,IAAA,EAClB,OADkB,iBAAA,EAAA,KAAA,iBAAA,EAAA,MACkB,QAApC,iBAAA,EAAO,QAAP,EAAO,gBAAgB,KAAK,gBAAQ,SAAA,iBAAA,EAAA,QAAI,KACzC,GAEA,CAAA,IAAA,sBAAA,MAKA,WACC,OADoB,iBAAA,EAAA,KAAA,iBAAA,EAAA,MACb,kBAAkB,KAAK,QAC/B,GAEA,CAAA,IAAA,cAAA,MAOA,SAAY,GACX,OADqB,iBAAA,EAAA,KAAA,iBAAA,EAAA,MACd,SAAS,KAAK,SAAS,EAAU,aACzC,GAEA,CAAA,IAAA,oBAAA,MAKA,WACC,OADkB,iBAAA,EAAA,KAAA,iBAAA,EAAA,MACX,gBAAgB,KAAK,QAC7B,IAAC,CAzF0B,G,ipFClMhB,OAAA,eAAA,kBAAA,CAAA,EAAA,CAAA,CAAA,iBAFZ,IAAM,UAAQ,iBAAA,EAAA,KAAG,CAChB,KACA,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,IAAK,EAAG,IAAK,GAAI,IAAK,GAAI,IAAK,IAAK,GACzD,EAAG,IAAK,IAAK,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,EAAG,GAAI,IACnE,EAAG,IAAK,IAAK,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,GACnE,GAAI,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,EAAG,IAAK,GAAI,IAAK,IAAK,IACtE,EAAG,IAAK,IAAK,GAAI,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,GAAI,IAAK,GAAI,IACpE,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,IAAK,GAAI,GAAI,GACtE,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,GACrE,IAAK,GAAI,IAAK,IAAK,GAAI,GAAI,IAAK,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GACtE,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,IAAK,GAAI,IAAK,IAAK,GAAI,IAAK,IAAK,GACrE,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,GAAI,GAAI,IAAK,IAAK,GAAI,GAAI,IAAK,GACtE,GAAI,GAAI,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GACxE,IAAK,GAAI,IAAK,IAAK,GAAI,GAAI,GAAI,IAAK,IAAK,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,IAClE,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,IAAK,IAAK,GAAI,IAAK,IACrE,IAAK,IAAK,GAAI,GAAI,GAAI,IAAK,GAAI,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,GAAI,GACrE,IAAK,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,IAAK,GAAI,IAAK,IAAK,IAAK,GAAI,IACrE,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,MAOnE,UAAQ,iBAAA,EAAA,KAAG,CAChB,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,GAAI,GAC7D,GAAI,IAAK,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,IAChE,IAAK,GAAI,GAAI,IAAK,GAAI,GAAI,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GACtE,GAAI,IAAK,EAAG,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnE,GAAI,IAAK,GAAI,IAAK,IAAK,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,GAAI,IAAK,IACpE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,IAC1E,IAAK,IAAK,GAAI,IAAK,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IACpE,IAAK,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,IACvE,IAAK,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,GAAI,GAAI,IAAK,GAAI,GAAI,GACnE,IAAK,GAAI,IAAK,GAAI,GAAI,IAAK,GAAI,IAAK,GAAI,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IACrE,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACzE,IAAK,IAAK,IAAK,GAAI,IAAK,GAAI,GAAI,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,GACtE,IAAK,GAAI,GAAI,IAAK,IAAK,IAAK,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,GAAI,IACnE,GAAI,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,IAAK,GAAI,IAAK,EACtE,GAAI,GAAI,GAAI,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,GACtE,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,IAelD,MAAK,kBAAA,cAAA,SAAA,IAAA,gBAAA,KAAA,EAAA,UAAA,IAAA,MAAA,MAOzB,SAAW,GASV,OATa,iBAAA,EAAA,KAAA,iBAAA,EAAA,KAEV,EAAK,GAAE,iBAAA,EAAA,QAAA,iBAAA,EAAA,KACT,GAAM,MAEF,iBAAA,EAAA,QAAA,iBAAA,EAAA,KAAG,GAAM,KAAI,iBAAA,EAAA,QAAA,iBAAA,EAAA,KACjB,GAAM,KACN,iBAAA,EAAA,SAAA,iBAAA,EAAA,KAEM,SAAS,EACjB,GAEA,CAAA,IAAA,MAAA,MAMA,SAAW,GAEV,GAFa,iBAAA,EAAA,KAAA,iBAAA,EAAA,KAEV,EAAK,EACP,MADS,iBAAA,EAAA,QAAA,iBAAA,EAAA,KACH,IAAI,gBAAgB,UAG3B,OAFC,iBAAA,EAAA,QAAA,iBAAA,EAAA,KAEM,SAAS,EACjB,GAEA,CAAA,IAAA,WAAA,MAMA,SAAgB,EAAI,GAEnB,OAFsB,iBAAA,EAAA,KAAA,iBAAA,EAAA,MAEnB,iBAAA,EAAA,QAAO,IAAP,IAAQ,iBAAA,EAAA,QAAW,IAAP,IAAS,iBAAA,EAAA,QAAA,iBAAA,EAAA,MAChB,IACP,iBAAA,EAAA,QAAA,iBAAA,EAAA,MAEM,UAAU,SAAS,GAAM,SAAS,IAAO,KACjD,IAAC,CA/CwB,G,k3KCrDd,OAAA,eAAA,kBAAA,CAAA,EAAA,CAAA,CAAA,iBAHZ,IASqB,cAAa,WAgBjC,SAAA,EAAY,GAA8B,IAAA,EAAf,EAAO,UAAA,OAAA,QAAA,IAAA,UAAA,GAAA,UAAA,qBAAA,EAAA,QAAG,MAGpC,GAHwC,gBAAA,KAAA,GAdzC,gBAAA,sCAAA,EAAA,KAIe,KAAE,iBAAA,EAAA,KAAA,iBAAA,EAAA,KAWT,QAAP,EAAA,SAAO,IAAA,IAAP,EAAY,GAAE,iBAAA,EAAA,KAEX,iBAAA,EAAA,SAAC,IAAa,iBAAA,EAAI,SAAC,EAAc,QACnC,MAD0C,iBAAA,EAAA,QAAA,iBAAA,EAAA,KACpC,IAAI,gBAAgB,8BAG3B,GAFC,iBAAA,EAAA,QAAA,iBAAA,EAAA,KAEE,EAAU,EACZ,MADc,iBAAA,EAAA,QAAA,iBAAA,EAAA,KACR,IAAI,gBAAgB,mBAC1B,iBAAA,EAAA,QAED,IAAI,GAAmB,iBAAA,EAAG,OAAc,QAGpC,GAAa,iBAAA,EAAA,KAAG,GAEpB,IAFsB,iBAAA,EAAA,KAEhB,iBAAA,EAAA,UAAgB,IAAmB,iBAAA,EAAA,QAAqC,IAAjC,EAAc,KAAqB,iBAAA,EAAA,KAC/E,IAGD,GAFC,iBAAA,EAAA,MAEE,IAAkB,EAAoB,iBAAA,EAAA,QAAA,iBAAA,EAAA,MACxC,KAAK,aAAe,CAAC,OAElB,CAAA,iBAAA,EAAA,QAAA,iBAAA,EAAA,MACH,KAAK,aAAe,MAAM,WAAW,EAAsB,EAAgB,EAAS,GAAG,iBAAA,EAAA,MAEvF,IAAI,IAAI,GAAE,iBAAA,EAAG,SAAG,EAAK,EAAsB,EAAe,IAAK,iBAAA,EAAA,MAC9D,KAAK,aAAa,GAAM,EAAc,EAAK,EAE7C,CACD,CAEA,OAAA,aAAA,EAAA,EAAA,IAAA,iBAAA,MAKA,SAAe,GACd,OADsB,iBAAA,EAAA,KAAA,iBAAA,EAAA,MACf,KAAK,aAAa,KAAK,aAAa,OAAS,EAAI,EACzD,GAEA,CAAA,IAAA,kBAAA,MAGA,WACC,OADgB,iBAAA,EAAA,KAAA,iBAAA,EAAA,MACT,KAAK,YACb,GAEA,CAAA,IAAA,YAAA,MAGA,WACC,OADU,iBAAA,EAAA,KAAA,iBAAA,EAAA,MACH,KAAK,aAAa,OAAS,CACnC,GAEA,CAAA,IAAA,SAAA,MAGA,WACC,OADO,iBAAA,EAAA,KAAA,iBAAA,EAAA,MACyB,IAAzB,KAAK,aAAa,EAC1B,GAEA,CAAA,IAAA,WAAA,MAKA,SAAS,GAER,GAFe,iBAAA,EAAA,KAAA,iBAAA,EAAA,MAEZ,iBAAA,EAAI,QAAA,KAAC,WAAQ,iBAAA,EAAI,UAAO,UAC1B,OADmC,iBAAA,EAAA,QAAA,iBAAA,EAAA,MAC5B,IAAI,EAAc,CAAC,IAC1B,iBAAA,EAAA,QAED,IAAI,GAAQ,iBAAA,EAAA,MAAG,MAAM,WAAW,KAAK,aAAa,OAAS,EAAO,aAAa,OAAS,EAAG,IAAG,iBAAA,EAAA,MAE9F,IAAI,IAAI,GAAE,iBAAA,EAAA,MAAG,GAAG,EAAK,KAAK,aAAa,OAAQ,IAAK,CAAA,iBAAA,EAAA,MACnD,IAAI,IAAI,GAAE,iBAAA,EAAA,MAAG,GAAG,EAAK,EAAO,aAAa,OAAQ,IAAK,iBAAA,EAAA,MACrD,EAAS,EAAK,IAAO,MAAM,SAAS,KAAK,aAAa,GAAK,EAAO,aAAa,GAGjF,CAEA,OAFC,iBAAA,EAAA,MAEM,IAAI,EAAc,EAC1B,GAEA,CAAA,IAAA,MAAA,MAKA,SAAI,GAEH,GAFU,iBAAA,EAAA,KAAA,iBAAA,EAAA,MAEP,KAAK,aAAa,OAAS,EAAO,aAAa,OAAS,EAC1D,OAD4D,iBAAA,EAAA,QAAA,iBAAA,EAAA,MACrD,KACP,iBAAA,EAAA,QAED,IAAI,GAAM,iBAAA,EAAA,MAAG,MAAM,IAAI,KAAK,aAAa,IAAM,MAAM,IAAI,EAAO,aAAa,KAAI,iBAAA,EAAA,MAEjF,IAAI,IAAI,GAAE,iBAAA,EAAA,MAAG,GAAG,EAAK,EAAO,aAAa,OAAQ,IAAK,iBAAA,EAAA,MACrD,KAAK,aAAa,IAAO,MAAM,IAAI,MAAM,IAAI,EAAO,aAAa,IAAO,GAGzE,OAFC,iBAAA,EAAA,MAEO,IAAI,EAAc,KAAK,cAAe,IAAI,EACnD,IAAC,CAvHgC,G,s1JCNtB,OAAA,eAAA,kBAAA,CAAA,EAAA,CAAA,CAAA,iBAJZ,IAKqB,mBAAkB,WAiCtC,OAAA,cALA,SAAA,EAAY,EAAU,GAAU,gBAAA,KAAA,GA1BhC,gBAAA,KAAA,0BAMA,gBAAA,KAAA,+BAMA,gBAAA,KAAA,kBAKA,gBAAA,KAAA,mBAAA,iBAAA,EAAA,KAAA,iBAAA,EAAA,KAUC,KAAK,QAAW,EAAS,iBAAA,EAAA,KACzB,KAAK,SAAW,CACjB,GAEA,EAAA,IAAA,oBAAA,MAQA,SAAkB,GAAW,iBAAA,EAAA,KAC5B,IAAI,GAAY,iBAAA,EAAO,KAAA,KAAK,QAAQ,YAAY,KAAK,WACjD,GAAgB,iBAAA,EAAG,OAAa,IAChC,GAAG,iBAAA,EAAgB,OAAa,GAAG,GAAG,IACtC,GAAG,iBAAA,EAAgB,OAAa,GAAG,GAAG,IACtC,GAAG,iBAAA,EAAgB,OAAa,GAAG,GAAG,IACtC,GAAG,iBAAA,EAAgB,OAAa,GAAG,GAAG,IACtC,GAAS,iBAAA,EAAA,KAAU,MAAM,WAAW,EAAK,CAAC,EAAmB,EAAK,KAAM,iBAAA,EAAA,KAEzE,EAAM,GAAE,iBAAA,EAAA,QAAA,iBAAA,EAAA,MACV,EAAY,EAAU,OAAO,MAAM,WAAW,EAAK,CAAC,EAAmB,EAAK,MAC5E,iBAAA,EAAA,QAED,IAAI,GAAc,iBAAA,EAAA,MAAI,EAAW,aAC7B,GAAU,iBAAA,EAAA,MAAQ,IAClB,GAAQ,iBAAA,EAAA,MAAU,IAClB,GAAa,iBAAA,EAAA,MAAK,GAClB,GAAW,iBAAA,EAAA,MAAO,GAClB,GAAe,iBAAA,EAAA,MAAG,GAEtB,IAAI,IAAI,KAFgB,iBAAA,EAAA,MAER,EAAU,CACzB,IAAI,GAAa,iBAAA,EAAA,MAAI,EAAU,GAAM,IACjC,GAAc,iBAAA,EAAA,MAAG,EAAU,GAAM,IAAG,iBAAA,EAAA,MAExC,EAAW,GAAU,GAAG,iBAAA,EAAA,MAExB,IAAI,IAAI,GAAE,iBAAA,EAAA,MAAG,GAAG,EAAK,EAAgB,IAAK,iBAAA,EAAA,MACzC,EAAW,GAAM,GAA6C,IAAvC,EAAe,EAAK,GAG5C,IAAI,GAAY,iBAAA,EAAG,QAAgB,GAAe,iBAAA,EAAA,MAClD,EAAS,GAAU,KAAK,OAAO,EAAW,GAAO,GAAc,iBAAA,EAAA,MAC/D,EAAmB,KAAK,IAAI,EAAe,GAAgB,iBAAA,EAAA,MAC3D,EAAmB,KAAK,IAAI,EAAa,GAAc,iBAAA,EAAA,MACvD,GAAmB,CACpB,CAAC,iBAAA,EAAA,MAED,KAAK,gBAAuB,MAAM,WAAW,KAAK,QAAQ,oBAAqB,GAAG,iBAAA,EAAA,MAClF,KAAK,qBAAuB,EAC5B,IAAI,GAAY,iBAAA,EAAY,QAAM,GAKlC,OALsC,iBAAA,EAAA,MAEtC,KAAK,WAAW,EAAY,EAAe,GAAc,iBAAA,EAAA,MACzD,KAAK,WAAW,EAAU,EAAa,GAAc,iBAAA,EAAA,MAE9C,KAAK,eACb,GAEA,CAAA,IAAA,SAAA,MAOA,SAAO,EAAY,GAAa,iBAAA,EAAA,KAC/B,IAAI,GAAO,iBAAA,EAAA,MAAG,IAAI,cAAc,CAAC,KAAI,iBAAA,EAAA,MAErC,IAAI,IAAI,GAAE,iBAAA,EAAA,MAAG,GAAG,EAAK,EAAc,IAAK,iBAAA,EAAA,MACvC,EAAU,EAAQ,SAAS,IAAI,cAAc,CAAC,EAAG,MAAM,IAAI,MAG5D,IAAI,GAAa,iBAAA,EAAA,MAAM,EAAQ,aAC3B,GAAgB,iBAAA,EAAI,UAAI,cAAc,EAAY,GACpD,IAAI,GACJ,mBAGE,GAAQ,iBAAA,EAAA,MAAG,MAAM,WAAW,EAAe,IAC3C,GAAM,iBAAA,EAAA,MAAK,EAAiB,OAAS,GAAc,iBAAA,EAAA,MAEvD,IAAI,IAAI,GAAE,iBAAA,EAAG,SAAG,EAAK,EAAS,OAAQ,IAAK,CAC1C,IAAI,GAAS,iBAAA,EAAG,QAAK,GAAO,iBAAA,EAAA,MAC5B,EAAS,GAAO,GAAa,GAAC,iBAAA,EAAG,UAAiB,KAAU,iBAAA,EAAA,QAAG,EAChE,CAEA,OAFC,iBAAA,EAAA,MAEM,CACR,GAEA,CAAA,IAAA,aAAA,MAQA,SAAW,EAAY,EAAW,GAAa,iBAAA,EAAA,KAAA,iBAAA,EAAA,MAC9C,IAAI,IAAI,GAAE,iBAAA,EAAA,MAAG,GAAG,EAAK,EAAW,IAAK,CAAA,iBAAA,EAAA,MACpC,IAAI,IAAI,GAAE,iBAAA,EAAA,MAAG,GAAG,EAAK,EAAc,IAAK,iBAAA,EAAA,MACpC,EAAK,EAAW,GAAI,QAAO,iBAAA,EAAA,QAAA,iBAAA,EAAA,MAC7B,KAAK,gBAAgB,KAAK,wBAA0B,EAAW,GAAI,IACnE,iBAAA,EAAA,OAEH,CACD,IAAC,CAvIqC,G,s05BCD3B,OAAA,cAAA,kBAAA,CAAA,EAAA,CAAA,CAAA,gBAGZ,IAMqB,SAAQ,WAuD5B,OAAA,cAPA,SAAA,EAAY,EAAU,GAAU,gBAAA,KAAA,GA9ChC,gBAAA,KAAA,oBAQA,gBAAA,KAAA,mBAQA,gBAAA,KAAA,uBAQA,gBAAA,KAAA,sBAQA,gBAAA,KAAA,kBAAA,gBAAA,EAAA,KAAA,gBAAA,EAAA,KAeC,KAAK,SAAe,EAAS,gBAAA,EAAA,KAC7B,KAAK,UAAe,EAAU,gBAAA,EAAA,KAC9B,KAAK,YAAe,KAAK,SAAS,eAAe,gBAAA,EAAA,KACjD,KAAK,QAAe,KAAK,aAAa,KAAK,YAAa,OACzD,GAEA,EAAA,IAAA,eAAA,MASA,SAAa,EAAO,GACnB,OAD0B,gBAAA,EAAA,KAAA,gBAAA,EAAA,KACnB,MAAM,WAAW,EAAO,MAAM,WAAW,EAAO,GACxD,GAEA,CAAA,IAAA,yBAAA,MAKA,WACC,OADuB,gBAAA,EAAA,KAAA,gBAAA,EAAA,KAChB,KACL,mBACA,gBACA,sBACA,mBACA,gBACA,mBACA,eAEH,GAEA,CAAA,IAAA,YAAA,MAOA,WAA2B,IAAjB,EAAQ,UAAA,OAAA,QAAA,IAAA,UAAA,GAAA,UAAA,oBAAA,EAAA,SAAG,GAEpB,GAFyB,gBAAA,EAAA,KAAA,gBAAA,EAAA,MAErB,EACH,OADY,gBAAA,EAAA,QAAA,gBAAA,EAAA,KACL,KAAK,QACZ,gBAAA,EAAA,QAED,IAAI,GAAO,gBAAA,EAAA,KAAG,IAEd,IAAI,IAAI,KAFS,gBAAA,EAAA,KAEH,KAAK,QAAQ,gBAAA,EAAA,MAC1B,EAAQ,GAAM,KAAK,QAAQ,GAAI,IAAI,KAAK,QAGzC,OAFC,gBAAA,EAAA,MAEM,CACR,GAEA,CAAA,IAAA,aAAA,MAKA,WACC,OADW,gBAAA,EAAA,KAAA,gBAAA,EAAA,MACJ,KAAK,QACb,GAEA,CAAA,IAAA,cAAA,MAKA,WACC,OADY,gBAAA,EAAA,KAAA,gBAAA,EAAA,MACL,KAAK,SACb,GAEA,CAAA,IAAA,iBAAA,MAKA,WACC,OADe,gBAAA,EAAA,KAAA,gBAAA,EAAA,MACR,KAAK,YACb,GAEA,CAAA,IAAA,UAAA,MAOA,WACC,OADQ,gBAAA,EAAA,KAAA,gBAAA,EAAA,MACD,KAAK,WACb,GAEA,CAAA,IAAA,MAAA,MAQA,SAAI,EAAI,GAAG,IAAA,EAAA,KAEV,OAFU,gBAAA,EAAA,KAAA,gBAAA,EAAA,MAEN,MAAM,OAAM,WAAM,OAAA,gBAAA,EAAA,KAAA,gBAAA,EAAA,MAAA,EAAK,QAAQ,GAAI,EAAE,KAExC,gBAAA,EAAA,QAAA,gBAAA,EAAA,MAEM,KAAK,QAAQ,GAAI,KAJoB,gBAAA,EAAA,QAAA,gBAAA,EAAA,OACnC,EAIV,GAEA,CAAA,IAAA,MAAA,MAaA,SAAI,EAAI,EAAI,EAAQ,GAAQ,IAAA,EAAA,KAa3B,OAb2B,gBAAA,EAAA,MAAA,gBAAA,EAAA,MAExB,MAAM,OAAM,WAAM,OAAA,gBAAA,EAAA,MAAA,gBAAA,EAAA,MAAA,EAAK,QAAQ,GAAI,EAAE,KAAG,gBAAA,EAAA,QAAA,gBAAA,EAAA,MAE1C,IAAY,QAAO,gBAAA,EAAA,OAEL,IAAX,GAAgB,gBAAA,EAAA,QAAA,gBAAA,EAAA,MAClB,GAAW,SACX,gBAAA,EAAA,QAAA,gBAAA,EAAA,MAED,KAAK,QAAQ,GAAI,GAAM,GACvB,gBAAA,EAAA,QAAA,gBAAA,EAAA,MAEM,IACR,GAEA,CAAA,IAAA,UAAA,MAYA,SAAQ,EAAS,EAAS,EAAQ,EAAS,EAAQ,GAAQ,gBAAA,EAAA,MAAA,gBAAA,EAAA,MAE1D,IAAI,IAAI,GAAE,gBAAA,EAAG,SAAS,EAAM,EAAU,EAAU,IAAK,CAAA,gBAAA,EAAA,MACpD,IAAI,IAAI,GAAE,gBAAA,EAAG,SAAS,EAAM,EAAU,EAAS,IAAK,gBAAA,EAAA,MACnD,KAAK,IAAI,EAAI,EAAI,EAAQ,EAE3B,CAEA,OAFC,gBAAA,EAAA,MAEM,IACR,GAEA,CAAA,IAAA,OAAA,MAQA,SAAK,EAAI,GAAG,IAAA,EAAA,KAMX,OANW,gBAAA,EAAA,MAAA,gBAAA,EAAA,MAER,MAAM,OAAM,WAAM,OAAA,gBAAA,EAAA,MAAA,gBAAA,EAAA,MAAA,EAAK,QAAQ,GAAI,EAAE,KAAG,gBAAA,EAAA,QAAA,gBAAA,EAAA,MAC1C,KAAK,QAAQ,GAAI,IAAO,SACxB,gBAAA,EAAA,QAAA,gBAAA,EAAA,MAEM,IACR,GAEA,CAAA,IAAA,YAAA,MAaA,SAAU,EAAI,EAAI,GAAQ,IAAA,EAAA,KAEzB,OAFyB,gBAAA,EAAA,MAAA,gBAAA,EAAA,MAEtB,MAAM,OAAM,WAAM,OAAA,gBAAA,EAAA,MAAA,gBAAA,EAAA,MAAA,EAAK,QAAQ,GAAI,EAAE,KAAG,gBAAA,EAAA,QAAA,gBAAA,EAAA,OAClC,KAAK,QAAQ,GAAI,GAAM,KAAa,IAC5C,gBAAA,EAAA,QAAA,gBAAA,EAAA,OAEM,EACR,GAEA,CAAA,IAAA,cAAA,MAUA,SAAY,EAAI,EAAI,GAAS,gBAAA,EAAA,MAAA,gBAAA,EAAA,UAED,EAFC,EAAA,2BAET,GAAQ,IAA3B,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,MAA4B,KAApB,EAAO,EAAA,MACd,GADc,gBAAA,EAAA,MACX,KAAK,UAAU,EAAI,EAAI,GACzB,OADkC,gBAAA,EAAA,QAAA,gBAAA,EAAA,OAC3B,EACP,gBAAA,EAAA,OACF,CAAC,OAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAAA,GAAA,CAED,OAFC,gBAAA,EAAA,OAEM,CACR,GAEA,CAAA,IAAA,QAAA,MAaA,SAAM,EAAI,GAAG,IAAA,EAAA,KAEZ,OAFY,gBAAA,EAAA,MAAA,gBAAA,EAAA,MAET,MAAM,OAAM,WAAM,OAAA,gBAAA,EAAA,MAAA,gBAAA,EAAA,MAAA,EAAK,QAAQ,GAAI,EAAE,KAAG,gBAAA,EAAA,QAAA,gBAAA,EAAA,MACnC,KAAK,OAAO,KAAK,QAAQ,GAAI,MACpC,gBAAA,EAAA,QAAA,gBAAA,EAAA,OAEM,EACR,GAEA,CAAA,IAAA,SAAA,MAOA,SAAO,GACN,OADc,gBAAA,EAAA,MAAA,gBAAA,EAAA,OACN,EAAU,WAAa,OAChC,GAEA,CAAA,IAAA,kBAAA,MAgBA,SAAgB,EAAI,GAAmB,IAAf,EAAO,UAAA,OAAA,QAAA,IAAA,UAAA,GAAA,UAAA,oBAAA,EAAA,QAAG,MAAI,gBAAA,EAAA,MACrC,IAAI,GAAK,gBAAA,EAAA,MAAG,GAEZ,IAAI,IAAI,KAFM,gBAAA,EAAA,MAEE,kBAAkB,CACjC,IAAwC,EAAA,gBAAxC,gBAAA,EAAiB,wBAAkB,IAAK,GAAnC,EAAG,EAAA,GAAE,EAAG,EAAA,GAA4B,gBAAA,EAAA,MACzC,GAAO,EAAG,gBAAA,EAAA,MACV,GAAO,EAEP,gBAAA,EAAA,OACG,gBAAA,EAAA,SAAY,OAAZ,IAAgB,gBAAA,EAAA,SAAK,KAAK,UAAU,EAAK,EAAK,MAEhD,gBAAA,EAAA,SAAA,gBAAA,EAAA,MAEE,KAAK,UAAU,EAAK,EAAK,UAAS,gBAAA,EAAA,SAAA,gBAAA,EAAA,MACpC,GAAS,GACT,gBAAA,EAAA,WANyD,gBAAA,EAAA,SAAA,gBAAA,EAAA,MAQ3D,CAEA,OAFC,gBAAA,EAAA,MAEM,CACR,GAEA,CAAA,IAAA,gBAAA,MAOA,WAGC,OAHc,gBAAA,EAAA,MAAA,gBAAA,EAAA,MACd,KAAK,IAAI,EAAG,KAAK,YAAc,GAAG,EAAM,cAAc,gBAAA,EAAA,MAE/C,IACR,GAEA,CAAA,IAAA,mBAAA,MAOA,WAAkB,gBAAA,EAAA,MAEjB,IAAI,GAAI,gBAAA,EAAG,OACV,CAAC,EAAG,GACJ,CAAC,KAAK,YAAc,EAAG,GACvB,CAAC,EAAG,KAAK,YAAc,KACtB,gBAAA,EAAA,MAEF,QAAA,EAAA,EAAA,EAAc,EAAI,EAAA,EAAA,OAAA,IAAC,CAAf,IAAI,EAAE,EAAA,GAAA,gBAAA,EAAA,MACT,KACE,QAAS,EAAG,GAAU,EAAG,GAAS,EAAG,GAAG,EAAO,UAC/C,QAAS,EAAG,GAAK,EAAK,EAAG,GAAK,EAAI,EAAG,GAAG,EAAO,UAC/C,QAAS,EAAG,GAAK,EAAK,EAAG,GAAK,EAAI,EAAG,GAAG,EAAO,aAElD,CAEA,OAFC,gBAAA,EAAA,MAEM,IACR,GAEA,CAAA,IAAA,gBAAA,MAOA,WAAe,gBAAA,EAAA,MAEd,IAAI,GAAE,gBAAA,EAAG,OACR,CAAC,EAAG,GACJ,CAAC,KAAK,YAAc,EAAG,GACvB,CAAC,EAAG,KAAK,YAAc,KAGpB,GAAE,gBAAA,EAAG,OACR,CAAC,EAAG,GACJ,CAAC,KAAK,YAAc,EAAG,GACvB,CAAC,EAAG,KAAK,YAAc,KACtB,gBAAA,EAAA,MAEF,IAAI,IAAI,GAAE,gBAAA,EAAA,MAAG,GAAG,EAAK,EAAG,IAAK,CAAA,gBAAA,EAAA,MAC5B,IAAI,IAAI,GAAE,gBAAA,EAAA,MAAG,GAAG,EAAK,EAAG,IAAK,gBAAA,EAAA,MAC5B,KAAK,IAAI,EAAG,GAAI,GAAI,EAAG,GAAI,GAAK,GAAI,EAAO,aAAa,gBAAA,EAAA,MACxD,KAAK,IAAI,EAAG,GAAI,GAAK,EAAI,EAAG,GAAI,IAAI,EAAO,YAE7C,CAEA,OAFC,gBAAA,EAAA,MAEM,IACR,GAEA,CAAA,IAAA,sBAAA,MAOA,WAAqB,gBAAA,EAAA,MACpB,IAAI,GAAiB,gBAAA,EAAA,MAAG,KAAK,SAAS,uBAAsB,gBAAA,EAAA,UAE7B,EAF6B,EAAA,2BAE9C,GAAiB,IAA/B,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,MAAgC,KAAxB,EAAE,EAAA,MAAA,gBAAA,EAAA,UACsB,EADtB,EAAA,2BACK,GAAiB,IAA/B,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,MAAgC,KAAxB,EAAE,EAAA,MAAA,gBAAA,EAAA,MAGN,KAAK,QAAQ,GAAI,KAAQ,QAE3B,gBAAA,EAAA,SAAA,gBAAA,EAAA,MAED,KACE,QAAS,EAAK,EAAK,EAAK,EAAI,EAAG,GAAG,EAAO,aACzC,QAAS,EAAK,EAAK,EAAK,EAAI,EAAG,GAAG,EAAO,aACzC,IAAI,EAAI,GAAI,EAAM,eAPe,gBAAA,EAAA,SAAA,gBAAA,EAAA,MAUpC,CAAC,OAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAAA,GAAA,CACF,CAAC,OAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAAA,GAAA,CAED,OAFC,gBAAA,EAAA,MAEM,IACR,GAEA,CAAA,IAAA,mBAAA,MAOA,WAAkB,gBAAA,EAAA,MAAA,gBAAA,EAAA,MAEjB,IAAI,IAAI,GAAE,gBAAA,EAAA,MAAG,GAAG,EAAK,KAAK,YAAc,EAAG,IAE1C,GAF+C,gBAAA,EAAA,MAE5C,gBAAA,EAAI,SAAA,KAAC,QAAQ,GAAG,KAAQ,SAAM,gBAAA,EAAI,SAAA,KAAK,QAAQ,GAAI,KAAO,QAA7D,CAEC,gBAAA,EAAA,SAED,IAAI,GAAE,gBAAA,EAAA,MAAG,EAAK,GAAM,GAAE,gBAAA,EAAA,MAEtB,KAAK,IAAI,EAAI,EAAG,EAAI,UAAW,gBAAA,EAAA,MAC/B,KAAK,IAAI,EAAG,EAAI,EAAI,SALnB,MAFmE,gBAAA,EAAA,SAAA,gBAAA,EAAA,MAUrE,OAFC,gBAAA,EAAA,MAEM,IACR,GAEA,CAAA,IAAA,mBAAA,MAOA,WAAkB,gBAAA,EAAA,MACjB,IAAI,GAAK,gBAAA,EAAA,MAAG,KAAK,SAAS,qBAE1B,GAF8C,gBAAA,EAAA,MAEjC,OAAV,EAAe,CAAA,gBAAA,EAAA,SAAA,gBAAA,EAAA,MAEjB,IAAI,IAAI,GAAE,gBAAA,EAAA,MAAG,GAAG,EAAK,GAAI,IAAK,CAC7B,IAAI,GAAE,gBAAA,EAAA,MAAG,MAAM,OAAO,EAAK,IACvB,GAAE,gBAAA,EAAA,MAAG,EAAK,EAAI,KAAK,YAAc,EAAI,GACrC,GAAE,gBAAA,EAAA,MAA2B,IAAtB,GAAS,EAAM,IAAS,gBAAA,EAAA,MAEnC,KAAK,IAAI,EAAI,EAAI,EAAI,WAAY,gBAAA,EAAA,MACjC,KAAK,IAAI,EAAI,EAAI,EAAI,UACtB,C,MAEA,gBAAA,EAAA,SAED,OAFC,gBAAA,EAAA,MAEM,IACR,GAEA,CAAA,IAAA,gBAAA,MASA,WAAkC,IAApB,EAAY,UAAA,OAAA,QAAA,IAAA,UAAA,GAAA,UAAA,oBAAA,EAAA,SAAG,MAAI,gBAAA,EAAA,MAAA,gBAAA,EAAA,OAChC,KAAK,aAAe,EACpB,IAAI,GAAK,gBAAA,EAAW,UAAG,gBAAA,EAAA,OAEpB,KAAK,wBAAwB,aAAY,gBAAA,EAAA,SAAA,gBAAA,EAAA,OAC3C,EAAQ,KAAK,UAAU,iBAAiB,KAAK,eAC7C,gBAAA,EAAA,SAAA,gBAAA,EAAA,OAED,IAAI,IAAI,GAAE,gBAAA,EAAA,OAAG,GAAG,EAAK,GAAI,IAAK,CAC7B,IAAI,GAAE,gBAAA,EAAA,OAA2B,IAAtB,GAAS,EAAM,IAAS,gBAAA,EAAA,OAEhC,EAAK,GAAE,gBAAA,EAAA,SAAA,gBAAA,EAAA,OACT,KAAK,IAAI,EAAG,EAAI,EAAI,YAEhB,gBAAA,EAAA,SAAA,gBAAA,EAAA,OAAG,EAAK,GAAE,gBAAA,EAAA,SAAA,gBAAA,EAAA,OACd,KAAK,IAAI,EAAG,EAAK,EAAG,EAAI,YAErB,gBAAA,EAAA,SAAA,gBAAA,EAAA,OACH,KAAK,IAAI,EAAG,KAAK,YAAc,GAAK,EAAI,EAAI,YAC5C,gBAAA,EAAA,OAEE,EAAK,GAAE,gBAAA,EAAA,SAAA,gBAAA,EAAA,OACT,KAAK,IAAI,KAAK,YAAc,EAAK,EAAG,EAAG,EAAI,YAEvC,gBAAA,EAAA,SAAA,gBAAA,EAAA,OAAG,EAAK,GAAE,gBAAA,EAAA,SAAA,gBAAA,EAAA,OACd,KAAK,IAAI,GAAK,EAAI,EAAG,EAAI,YAEtB,gBAAA,EAAA,SAAA,gBAAA,EAAA,OACH,KAAK,IAAI,GAAK,EAAK,EAAG,EAAG,EAAI,WAG/B,CAEA,OAFC,gBAAA,EAAA,OAEM,IACR,GAEA,CAAA,IAAA,eAAA,MAUA,SAAa,GAGZ,GAH2B,gBAAA,EAAA,MAAA,gBAAA,EAAA,OAGxB,EAAiB,EACnB,OADqB,gBAAA,EAAA,SAAA,gBAAA,EAAA,OACd,KAGR,GAFC,gBAAA,EAAA,SAAA,gBAAA,EAAA,OAEE,KAAK,QAAQ,KAAK,YAAc,GAAG,KAAK,YAAc,KAAO,OAC/D,MADsE,gBAAA,EAAA,SAAA,gBAAA,EAAA,OAChE,IAAI,oBAAoB,+BAC9B,gBAAA,EAAA,SAGD,IAAI,GAAQ,gBAAA,EAAA,OAAK,KAAK,YAAgC,EAAjB,GACjC,GAAU,gBAAA,EAAA,OAAG,KAAK,aAAa,EAAU,cAE7C,gBAAA,EAAA,OACA,IAAI,IAAI,GAAE,gBAAA,EAAG,UAAG,EAAK,KAAK,YAAa,IAAK,CAAA,gBAAA,EAAA,OAC3C,IAAI,IAAI,GAAE,gBAAA,EAAG,UAAG,EAAK,KAAK,YAAa,IAAK,gBAAA,EAAA,OAC3C,EAAW,EAAK,GAAgB,EAAK,GAAkB,KAAK,QAAQ,GAAI,EAE1E,CAMA,OAJA,gBAAA,EAAA,OACA,KAAK,YAAc,EAAS,gBAAA,EAAA,OAC5B,KAAK,QAAc,EAAW,gBAAA,EAAA,OAEvB,IACR,GAEA,CAAA,IAAA,WAAA,MAKA,WAAU,IAAA,EAAA,KAGT,OAHS,gBAAA,EAAA,MAAA,gBAAA,EAAA,OACT,KAAK,QAAU,KAAK,QAAQ,GAAG,KAAI,SAAC,EAAK,GAAU,OAAA,gBAAA,EAAA,MAAA,gBAAA,EAAA,OAAA,EAAK,QAAQ,KAAI,SAAA,GAAO,OAAA,gBAAA,EAAA,MAAA,gBAAA,EAAA,OAAA,EAAI,EAAK,IAAG,SAAQ,IAAE,gBAAA,EAAA,OAE1F,IACR,GAEA,CAAA,IAAA,SAAA,MAOA,WAAQ,gBAAA,EAAA,MAAA,gBAAA,EAAA,OAEP,IAAI,IAAI,GAAE,gBAAA,EAAG,UAAG,EAAK,KAAK,YAAa,IAAK,CAAA,gBAAA,EAAA,OAC3C,IAAI,IAAI,GAAE,gBAAA,EAAG,UAAG,EAAK,KAAK,YAAa,IAAK,gBAAA,EAAA,OAGxC,KAAK,IAAI,EAAI,KAAQ,QAEvB,gBAAA,EAAA,SAAA,gBAAA,EAAA,OAED,KAAK,KAAK,EAAI,KAJiB,gBAAA,EAAA,SAAA,gBAAA,EAAA,OAMjC,CAEA,OAFC,gBAAA,EAAA,OAEM,IACR,GAEA,CAAA,IAAA,eAAA,MA4BA,SAAa,GAAuD,IAAA,EAAA,EAAA,EAA/C,EAAO,UAAA,OAAA,QAAA,IAAA,UAAA,GAAA,UAAA,oBAAA,EAAA,SAAG,MAAM,EAAO,UAAA,OAAA,QAAA,IAAA,UAAA,GAAA,UAAA,oBAAA,EAAA,SAAG,MAAM,EAAO,UAAA,OAAA,QAAA,IAAA,UAAA,GAAA,UAAA,oBAAA,EAAA,SAAG,MAI9D,GAJkE,gBAAA,EAAA,MAAA,gBAAA,EAAA,OAC3D,QAAP,EAAA,SAAO,IAAA,IAAP,EAAY,GAEZ,gBAAA,EAAA,OACG,gBAAA,EAAA,SAAA,GAAU,IAAC,gBAAA,EAAA,SAAI,GAAW,GAC5B,OAD8B,gBAAA,EAAA,SAAA,gBAAA,EAAA,OACvB,KAIR,GAHC,gBAAA,EAAA,SAED,gBAAA,EAAA,OACG,KAAK,UAAU,aAAe,MAChC,MADsC,gBAAA,EAAA,SAAA,gBAAA,EAAA,OAChC,IAAI,oBAAoB,4CAC9B,gBAAA,EAAA,SAGD,IAAI,GAAU,gBAAA,EAAA,OAAG,KAAK,SAAS,gBAG/B,GADA,gBAAA,EAAA,OACG,gBAAA,EAAA,SAAA,EAAS,IAAU,gBAAA,EAAA,SAAI,EAAU,GACnC,MAD8C,gBAAA,EAAA,SAAA,gBAAA,EAAA,OACxC,IAAI,oBAAoB,sCAa/B,GAZC,gBAAA,EAAA,SAED,gBAAA,EAAA,OACG,gBAAA,EAAA,SAAY,OAAZ,IAAgB,gBAAA,EAAK,WAAS,GAAO,IAAE,gBAAA,EAAA,SAAA,gBAAA,EAAA,OACzC,KACA,gBAAA,EAAA,SAAA,gBAAA,EAAA,OAEE,gBAAA,EAAA,SAAY,OAAZ,IAAgB,gBAAA,EAAK,WAAU,GAAO,IAAE,gBAAA,EAAA,SAAA,gBAAA,EAAA,OAC1C,KACA,gBAAA,EAAA,SAED,gBAAA,EAAA,OACG,EAAS,EAAU,KAAK,MAAM,EAAa,EAAa,KAC1D,MADgE,gBAAA,EAAA,SAAA,gBAAA,EAAA,OAC1D,IAAI,oBAAoB,4DAC9B,gBAAA,EAAA,SAED,IAAI,GAAU,gBAAA,EAAI,QAAC,KAAK,YAAc,GAAc,GAChD,GAAI,gBAAA,EAAU,OAAA,KAAK,YAAc,GAErC,gBAAA,EAAA,OACO,QAAP,EAAA,SAAO,QAAP,GAAc,EAAa,GAAU,GAAG,gBAAA,EAAA,OACjC,QAAP,EAAA,SAAO,QAAP,GAAc,EAAa,GAAW,GACtC,IAAI,GAAK,gBAAA,EAAI,SAAa,EAAU,GAChC,GAAK,gBAAA,EAAI,SAAa,EAAU,GAEpC,gBAAA,EAAA,OACA,IAAI,IAAI,GAAE,gBAAA,EAAA,OAAI,EAAa,GAAU,EAAK,EAAO,IAAK,CAAA,gBAAA,EAAA,OACrD,IAAI,IAAI,GAAE,gBAAA,EAAA,OAAI,EAAa,GAAU,EAAK,EAAO,IAAK,gBAAA,EAAA,OAElD,gBAAA,EAAA,SAAA,EAAK,IAAU,gBAAA,EAAA,SAAI,EAAK,KAAU,gBAAA,EAAG,YAAM,KAAI,gBAAA,EAAA,SAAI,GAAM,IAAK,gBAAA,EAAA,SAAA,gBAAA,EAAA,SAEhE,gBAAA,EAAA,SAAA,gBAAA,EAAA,OAED,KAAK,IAAI,EAAI,GAAI,EAAO,QAE1B,CAEA,OAFC,gBAAA,EAAA,OAEM,IACR,GAEA,CAAA,IAAA,iBAAA,MAOA,SAAe,GAAW,gBAAA,EAAA,MACzB,IAAI,GAAK,gBAAA,EAAG,WAAI,mBAAmB,KAAK,SAAU,KAAK,WAAW,kBAAkB,IAChF,GAAU,gBAAA,EAAG,SAAM,QACnB,GAAM,gBAAA,EAAA,OAAG,GACT,GAAK,gBAAA,EAAA,OAAG,GACR,GAAU,gBAAA,EAAA,QAAG,GAAK,gBAAA,EAAA,OAEtB,IAAI,IAAI,GAAE,gBAAA,EAAA,OAAG,KAAK,YAAc,GAAG,EAAK,EAAG,GAAM,EAAE,CAAA,gBAAA,EAAA,OAGxC,IAAP,GAAS,gBAAA,EAAA,SAAA,gBAAA,EAAA,OACX,KACA,gBAAA,EAAA,SAAA,gBAAA,EAAA,OAED,IAAI,IAAI,GAAM,gBAAA,EAAG,UAAG,EAAS,KAAK,YAAa,IAAS,CACvD,IAAI,GAAE,gBAAA,EAAA,OAAG,GAAO,gBAAA,EAAA,OAEb,GAAW,gBAAA,EAAA,SAAA,gBAAA,EAAA,OACb,EAAM,KAAK,YAAc,EAAI,GAC7B,gBAAA,EAAA,SAAA,gBAAA,EAAA,OAED,IAAI,IAAI,GAAI,gBAAA,EAAA,OAAG,GAAG,EAAO,EAAG,IAAO,CAClC,IAAI,GAAE,gBAAA,EAAG,SAAK,GAEd,gBAAA,EAAA,OACG,KAAK,QAAQ,GAAI,KAAQ,QAE3B,gBAAA,EAAA,SAAA,gBAAA,EAAA,OAED,KAAK,QAAQ,GAAI,GAAM,OAAO,gBAAA,EAAA,OAE3B,gBAAA,EAAA,SAAA,EAAS,IAAU,gBAAA,EAAA,SAAyC,IAAnC,EAAM,IAAW,IAAW,KAAS,gBAAA,EAAA,SAAA,gBAAA,EAAA,OAChE,KAAK,QAAQ,GAAI,IAAO,SACxB,gBAAA,EAAA,SAAA,gBAAA,EAAA,QAEa,IAAX,GAAa,gBAAA,EAAA,SAAA,gBAAA,EAAA,OACf,IAAS,gBAAA,EAAA,OACT,EAAQ,GACR,gBAAA,EAAA,WAbkC,gBAAA,EAAA,SAAA,gBAAA,EAAA,OAcpC,CACD,CAAC,gBAAA,EAAA,OAED,GAAc,CACf,CAEA,OAFC,gBAAA,EAAA,OAEM,IACR,GAEA,CAAA,IAAA,OAAA,MAQA,SAAK,GAAa,gBAAA,EAAA,MAAA,gBAAA,EAAA,OACjB,KAAK,aAAe,EACpB,IAAI,GAAK,gBAAA,EAAA,OAAW,KAAK,aAAa,WAAU,gBAAA,EAAA,OAEhD,IAAI,IAAI,GAAE,gBAAA,EAAG,UAAG,EAAK,KAAK,YAAa,IAAK,CAAA,gBAAA,EAAA,OAC3C,IAAI,IAAI,GAAE,gBAAA,EAAG,UAAG,EAAK,KAAK,YAAa,IAAK,gBAAA,EAAA,OACxC,gBAAA,EAAC,UAAA,KAAK,QAAQ,GAAI,GAAM,UAAY,SAAM,gBAAA,EAAI,WAAM,EAAI,KAAI,gBAAA,EAAA,SAAA,gBAAA,EAAA,OAC9D,KAAK,KAAK,EAAI,IACd,gBAAA,EAAA,QAEH,CAEA,OAFC,gBAAA,EAAA,OAEM,IACR,IAAC,CAzwB2B,G,20OCTjB,OAAA,eAAA,kBAAA,CAAA,EAAA,CAAA,CAAA,iBAAZ,IAGqB,OAAM,WA+D1B,OAAA,cATA,SAAA,EAAY,GAA6B,IAAnB,EAAa,UAAA,OAAA,QAAA,IAAA,UAAA,GAAA,UAAA,qBAAA,EAAA,QAAG,IAAE,gBAAA,KAAA,GApDxC,gBAAA,KAAA,kBAQA,gBAAA,KAAA,oBAQA,gBAAA,KAAA,mBAQA,gBAAA,KAAA,kBAQA,gBAAA,sCAAA,EAAA,KAIe,KAEf,gBAAA,KAAA,wBAAA,iBAAA,EAAA,KAAA,iBAAA,EAAA,KAeC,KAAK,QAAgB,EAAS,iBAAA,EAAA,KAC9B,KAAK,UAAgB,IAAI,UAAU,iBAAA,EAAA,KACnC,KAAK,SAAgB,IAAI,SAAS,KAAK,QAAQ,UAAU,iBAAA,EAAA,KACzD,KAAK,cAAgB,KAAK,SAAS,aAAa,iBAAA,EAAA,KAEhD,KAAK,QAAQ,EACd,GAEA,EAAA,IAAA,UAAA,MAOA,SAAQ,GAOP,OAPqB,iBAAA,EAAA,KAAA,iBAAA,EAAA,KACrB,KAAK,aAAe,EAAc,iBAAA,EAAA,KAClC,KAAK,QAAe,KAAK,oBAAoB,iBAAA,EAAA,KAE7C,KAAK,UAAU,QAAQ,iBAAA,EAAA,KACvB,KAAK,iBAAiB,iBAAA,EAAA,MAEf,IACR,GAEA,CAAA,IAAA,cAAA,MAKA,WACC,OADY,iBAAA,EAAA,KAAA,iBAAA,EAAA,MACJ,IAAI,SAAS,KAAK,QAAS,KAAK,UACtC,yBACA,eAAe,KAAK,UAEvB,GAEA,CAAA,IAAA,yBAAA,MAOA,WAAwB,iBAAA,EAAA,KACvB,IACI,EADA,GAAO,iBAAA,EAAA,MAAG,GACD,iBAAA,EAAA,UAEoB,EAFpB,EAAA,2BAEG,KAAK,cAAY,IAAjC,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,MAAI,EAAQ,EAAA,MAAA,iBAAA,EAAA,MAEX,GAAW,EAAS,kBACpB,iBAAA,EAAA,MACA,GAAW,CACX,OAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAAA,GAAA,CAED,IAAI,GAAmB,iBAAA,EAAA,MAAG,MAE1B,IAAI,IAAI,KAFuB,iBAAA,EAAA,MAEX,KAAK,cAAc,iBAAA,EAAA,MAEtB,IAAb,GAEF,iBAAA,EAAA,QAAA,iBAAA,EAAA,MAEE,GAAW,KAAK,cAAc,IAAU,iBAAA,EAAA,QAAA,iBAAA,EAAA,MAC1C,EAAsB,GACtB,iBAAA,EAAA,UANiB,iBAAA,EAAA,QAAA,iBAAA,EAAA,OAUnB,GAFC,iBAAA,EAAA,MAE0B,OAAxB,EAA6B,CAAA,iBAAA,EAAA,QAAA,iBAAA,EAAA,MAE/B,IACiC,EADjC,EAAA,2BACgB,KAAK,cAAY,IAAjC,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,MAAI,EAAQ,EAAA,MAAA,iBAAA,EAAA,MACX,GAAW,KAAK,wBAAwB,EAAS,SAAU,EAI5D,OAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAAA,GAAA,CAOA,GAPA,iBAAA,EAAA,MACG,KAAK,aAAa,QAAU,GAAE,iBAAA,EAAA,QAAA,iBAAA,EAAA,MAChC,GAAW,GACX,iBAAA,EAAA,QAGD,iBAAA,EAAA,MACG,iBAAA,EAAA,QAAA,GAAW,KAAK,cAAc,KAAoB,iBAAA,EAAA,QAAI,KAAK,cAAe,EAAsB,IAClG,OADsG,iBAAA,EAAA,QAAA,iBAAA,EAAA,MAC/F,EACP,iBAAA,EAAA,O,MAED,iBAAA,EAAA,QAED,MAFC,iBAAA,EAAA,MAEK,IAAI,oBAAmB,0BAAA,OAA2B,EAAO,SAChE,GAEA,CAAA,IAAA,oBAAA,MAOA,WAEC,GAFkB,iBAAA,EAAA,KAAA,iBAAA,EAAA,MAEf,KAAK,QAAQ,UAAY,aAC3B,OADwC,iBAAA,EAAA,QAAA,iBAAA,EAAA,MACjC,IAAI,QAAQ,KAAK,QAAQ,SAChC,iBAAA,EAAA,QAED,IAAI,GAAM,iBAAA,EAAA,MAAG,KAAK,0BAElB,iBAAA,EAAA,MACA,IAAI,IAAI,GAAQ,iBAAA,EAAA,MAAG,KAAK,QAAQ,YAAY,GAAY,KAAK,QAAQ,WAAY,IAAW,CAC3F,GAD2F,iBAAA,EAAA,MACxF,GAAW,KAAK,cAAc,GAAY,EAC5C,OAD+C,iBAAA,EAAA,QAAA,iBAAA,EAAA,MACxC,IAAI,QAAQ,GACnB,iBAAA,EAAA,OACF,CAGA,MADA,iBAAA,EAAA,MACM,IAAI,oBAAoB,kCAC/B,GAEA,CAAA,IAAA,iBAAA,MAOA,WAAgB,iBAAA,EAAA,KACf,IAAI,GAAS,iBAAA,EAAG,MAAA,KAAK,SAAS,qBAAqB,KAAK,UAAS,iBAAA,EAAA,MAEjE,IAAI,IAAI,GAAE,iBAAA,EAAA,MAAG,GAAG,EAAK,KAAK,aAAa,OAAQ,IAAK,iBAAA,EAAA,MACnD,KAAK,aAAa,GAAI,MAAM,KAAK,UAAW,KAAK,QAAQ,oBAI1D,GADA,iBAAA,EAAA,MACG,KAAK,UAAU,YAAc,EAC/B,MADyC,iBAAA,EAAA,QAAA,iBAAA,EAAA,MACnC,IAAI,oBAAmB,0BAAA,OAA2B,KAAK,UAAU,YAAW,OAAA,OAAM,EAAS,UAYlG,IAXC,iBAAA,EAAA,QAED,iBAAA,EAAA,MACG,KAAK,UAAU,YAAc,GAAK,GAAU,iBAAA,EAAA,SAAA,iBAAA,EAAA,MAC9C,KAAK,UAAU,IAAI,EAAG,IACtB,iBAAA,EAAA,SAKD,iBAAA,EAAA,MACM,KAAK,UAAU,YAAc,GAAM,GAAE,CAE1C,GAF0C,iBAAA,EAAA,MAEvC,KAAK,UAAU,cAAgB,EAAU,CAAA,iBAAA,EAAA,SAAA,iBAAA,EAAA,MAC3C,K,CACA,iBAAA,EAAA,SAAA,iBAAA,EAAA,MAED,KAAK,UAAU,QAAO,EACvB,CAKA,IAAI,GAAU,iBAAA,EAAA,OAAG,GAEjB,IAFuB,iBAAA,EAAA,MAEjB,KAAK,UAAU,aAAe,GAAU,iBAAA,EAAA,MAC7C,KAAK,UAAU,IAAI,GAAU,iBAAA,EAAA,SAAG,KAAU,iBAAA,EAAA,SAAG,KAAY,GAAG,iBAAA,EAAA,MAC5D,GAAc,EAKf,IADA,iBAAA,EAAA,MACM,KAAK,UAAU,aAAe,GAAU,iBAAA,EAAA,MAC7C,KAAK,UAAU,QAAO,EAGxB,IAAC,CAnOyB,G,wgPCHf,OAAA,cAAA,kBAAA,CAAA,EAAA,CAAA,CAAA,gBAUZ,IAAM,iBAAe,gBAAA,EAAA,KAAG,MAAM,cAAc,CAAC,YAAa,cAAe,WAAY,CAAC,QAAS,SAAU,QAapF,OAAM,WAuB1B,OAAA,cAJA,SAAA,EAAY,GAAS,gBAAA,KAAA,GAjBrB,gBAAA,KAAA,kBAMA,gBAAA,qCAAA,EAAA,KAIe,KAAE,gBAAA,EAAA,KAAA,gBAAA,EAAA,KAQhB,KAAK,WAAW,EACjB,GAEA,EAAA,IAAA,aAAA,MAOA,SAAW,GAQV,OARmB,gBAAA,EAAA,KAAA,gBAAA,EAAA,KAEd,aAAoB,UAExB,gBAAA,EAAA,SAFmC,gBAAA,EAAA,QAAA,gBAAA,EAAA,KACnC,EAAW,IAAI,WACf,gBAAA,EAAA,KAED,KAAK,QAAU,EAAS,gBAAA,EAAA,KAEjB,IACR,GAEA,CAAA,IAAA,SAAA,MAKA,WAAkC,IAA3B,EAAK,UAAA,OAAA,QAAA,IAAA,UAAA,GAAA,UAAA,oBAAA,EAAA,QAAG,MAAM,EAAK,UAAA,OAAA,QAAA,IAAA,UAAA,GAAA,UAAA,oBAAA,EAAA,QAAG,MAE5B,GAFgC,gBAAA,EAAA,KAAA,gBAAA,EAAA,KAEnB,OAAV,EACF,IAAI,IAAI,KADS,gBAAA,EAAA,QAAA,gBAAA,EAAA,KACA,gBAAgB,CAChC,IAAI,GAAc,gBAAA,EAAG,qBAAgB,IAErC,GAF4C,gBAAA,EAAA,MAEzC,EAAe,eAAe,GAAO,CAAA,gBAAA,EAAA,QAAA,gBAAA,EAAA,MACvC,KAAK,WAAW,IAAI,EAAe,IAAQ,gBAAA,EAAA,MAE3C,K,CACA,gBAAA,EAAA,OACF,MACA,gBAAA,EAAA,QAED,OAFC,gBAAA,EAAA,MAEM,KAAK,aAAa,KAAK,cAAe,EAC9C,GAEA,CAAA,IAAA,eAAA,MAOA,SAAa,GAAwB,IAAA,EAAb,EAAK,UAAA,OAAA,QAAA,IAAA,UAAA,GAAA,UAAA,oBAAA,EAAA,QAAG,MAC/B,OADmC,gBAAA,EAAA,KAAA,gBAAA,EAAA,MAC5B,KAAK,oBAAoB,GAAW,KAAU,QAAN,gBAAA,EAAA,QAAA,EAAC,SAAK,IAAA,KAAA,gBAAA,EAAA,QAAI,KAAK,QAAQ,WACvE,GAEA,CAAA,IAAA,cAAA,MAMA,WAAa,gBAAA,EAAA,KACZ,IAAI,GAAS,gBAAA,EAAG,UAAI,OAAO,KAAK,QAAS,KAAK,cAAc,eAExD,GAAY,gBAAA,EAAA,MAAG,KAAK,QAAQ,cAAgB,mBAAiB,gBAAA,EAAA,QAC9D,YAAY,eAAe,KAAU,gBAAA,EACrC,YAAI,YAAY,KAAK,QAAQ,eAIhC,OAJ6C,gBAAA,EAAA,MAE7C,EAAU,cAAc,GAAc,KAAK,GAAc,gBAAA,EAAA,MAElD,KAAK,uBAAuB,EACpC,GAEA,CAAA,IAAA,yBAAA,MAOA,SAAuB,GAEtB,GAFgC,gBAAA,EAAA,KAAA,gBAAA,EAAA,MAE7B,KAAK,QAAQ,aAAa,KAAA,EAAA,EAAA,EAAA,gBAAA,EAAA,QAE5B,IAAI,GAAe,gBAAA,EAAA,MAAgE,QAAhE,EAAgC,QAAhC,gBAAA,EAAK,QAAL,EAAK,KAAK,QAAQ,sBAAc,IAAA,KAAA,gBAAA,EAAA,QAAI,KAAK,QAAQ,wBAAe,IAAA,KAAA,gBAAA,EAAA,QAAI,IACnF,GAAgB,gBAAA,EAAA,MAAgC,QAAhC,gBAAA,EAAI,SAAJ,EAAI,KAAK,QAAQ,uBAAe,SAAA,gBAAA,EAAI,aAAiB,gBAAA,EAAA,MAEzE,EAAU,aACT,EACA,EACA,KAAK,QAAQ,gBACb,KAAK,QAAQ,gB,MAEd,gBAAA,EAAA,QAMD,OANC,gBAAA,EAAA,MAEE,KAAK,QAAQ,cAAa,gBAAA,EAAA,SAAA,gBAAA,EAAA,MAC5B,EAAU,aAAa,KAAK,QAAQ,gBACpC,gBAAA,EAAA,SAAA,gBAAA,EAAA,MAEM,CACR,GAEA,CAAA,IAAA,sBAAA,MAQA,SAAoB,GAEnB,GAF6B,gBAAA,EAAA,KAAA,gBAAA,EAAA,MAEc,mBAAjC,KAAK,QAAQ,gBACtB,MADqD,gBAAA,EAAA,SAAA,gBAAA,EAAA,MAC/C,IAAI,sBAAsB,wBAChC,gBAAA,EAAA,SAED,IAAI,GAAgB,gBAAA,EAAA,MAAG,IAAI,KAAK,QAAQ,gBAAgB,KAAK,QAAS,IAEtE,GAFiF,gBAAA,EAAA,QAE5E,aAA4B,mBAChC,MADmD,gBAAA,EAAA,SAAA,gBAAA,EAAA,MAC7C,IAAI,sBAAsB,qDAGjC,OAFC,gBAAA,EAAA,SAAA,gBAAA,EAAA,MAEM,CACR,GAEA,CAAA,IAAA,aAAA,MAQA,SAAW,GAGV,OAHmB,gBAAA,EAAA,KAAA,gBAAA,EAAA,MACnB,KAAK,aAAa,KAAK,GAAU,gBAAA,EAAA,MAE1B,IACR,GAEA,CAAA,IAAA,gBAAA,MAKA,WAGC,OAHc,gBAAA,EAAA,KAAA,gBAAA,EAAA,MACd,KAAK,aAAe,GAAG,gBAAA,EAAA,MAEhB,IACR,GAEA,CAAA,IAAA,oBAAA,MAOA,SAAkB,GAGjB,OAHuB,gBAAA,EAAA,KAAA,gBAAA,EAAA,MACvB,KAAK,WAAW,IAAI,QAAQ,IAAQ,gBAAA,EAAA,MAE7B,IACR,GAEA,CAAA,IAAA,qBAAA,MAOA,SAAmB,GAGlB,OAHwB,gBAAA,EAAA,MAAA,gBAAA,EAAA,MACxB,KAAK,WAAW,IAAI,SAAS,IAAQ,gBAAA,EAAA,MAE9B,IACR,GAEA,CAAA,IAAA,iBAAA,MAOA,SAAe,GAGd,OAHoB,gBAAA,EAAA,MAAA,gBAAA,EAAA,MACpB,KAAK,WAAW,IAAI,KAAK,IAAQ,gBAAA,EAAA,MAE1B,IACR,IAAC,CA9MyB,G,61QCvBf,OAAA,cAAA,kBAAA,CAAA,EAAA,CAAA,CAAA,gBADS,aAAQ,oBAAA,IAAA,IAAA,EAAA,gBAAA,KAAA,GAAA,QAAA,EAAA,UAAA,OAAA,EAAA,UAAA,GAAA,EAAA,EAAA,EAAA,EAAA,IAAA,EAAA,GAAA,UAAA,GAa5B,OAXA,gBAF4B,EAAA,WAAA,KAAA,EAAA,UAAA,IAE5B,YAAA,gBAAA,EAAA,KAGW,cAEX,gBAAA,EAAA,iBAMA,gBAAA,EAAA,kBAAA,CAAA,QAAA,UAAA,EAbqC,kBAarC,aAAA,EAAA,EAAA,IAAA,qBAAA,MAwCA,SAAmB,GAClB,OADyB,gBAAA,EAAA,KAAA,gBAAA,EAAA,MAClB,EAAO,MACf,GAEA,CAAA,IAAA,wBAAA,MAGA,SAAsB,GACrB,OAD6B,gBAAA,EAAA,KAAA,gBAAA,EAAA,MACtB,GAAO,gBAAA,EAAA,QAAG,SAAM,gBAAA,EAAA,QAAG,OAC3B,GAEA,CAAA,IAAA,sBAAA,MAGA,WACC,OADoB,gBAAA,EAAA,KAAA,gBAAA,EAAA,MACb,CAAC,KAAK,OAAQ,KAAK,OAC3B,GAEA,CAAA,IAAA,kBAAA,MAMA,SAAgB,EAAO,GAOtB,OAP4B,gBAAA,EAAA,KAAA,gBAAA,EAAA,MAC5B,EAAQ,KAAK,QAAQ,eAAe,OAAO,gBAAA,EAAA,MAE9B,KAAV,GAAa,gBAAA,EAAA,QAAA,gBAAA,EAAA,MACf,EAAQ,KAAK,UACb,gBAAA,EAAA,QAAA,gBAAA,EAAA,MAEM,KAAK,OAAO,UAAU,EAAO,KAAK,QAAQ,mBAClD,GAEA,CAAA,IAAA,OAAA,MAMA,WAAkB,IAAb,EAAK,UAAA,OAAA,QAAA,IAAA,UAAA,GAAA,UAAA,oBAAA,EAAA,QAAG,MAIZ,GAJgB,gBAAA,EAAA,KAAA,gBAAA,EAAA,MAChB,KAAK,QAAU,gBAAA,EAAI,QAAA,KAAC,QAAQ,gBAAa,gBAAA,EAAI,iBAAS,cAAc,YAEpE,gBAAA,EAAA,MACG,gBAAA,EAAA,UAAC,KAAK,SAAM,gBAAA,EAAI,QAAE,KAAK,kBAAkB,qBAAkB,gBAAA,EAAK,QAAkC,mBAA3B,KAAK,OAAO,aACrF,MADgH,gBAAA,EAAA,QAAA,gBAAA,EAAA,MAC1G,IAAI,sBAAsB,0BAKjC,GAJC,gBAAA,EAAA,QAAA,gBAAA,EAAA,MAED,KAAK,YAAY,gBAAA,EAAA,MAEd,KAAK,QAAQ,mBACf,OADkC,gBAAA,EAAA,SAAA,gBAAA,EAAA,MAC3B,KAAK,OACZ,gBAAA,EAAA,SAED,IAAI,GAAa,gBAAA,EAAA,MAAG,KAAK,mBACrB,GAAQ,gBAAA,EAAA,MAAQ,KAAK,EAAc,MAAM,KAAK,KAIlD,OAJsD,gBAAA,EAAA,MAEtD,KAAK,WAAW,EAAU,GAAO,gBAAA,EAAA,MAE9B,KAAK,QAAQ,cAAa,gBAAA,EAAA,SAAA,gBAAA,EAAA,MACrB,IACP,gBAAA,EAAA,SAAA,gBAAA,EAAA,MAEM,EACR,GAEA,CAAA,IAAA,YAAA,MAIA,WAAW,gBAAA,EAAA,KAAA,gBAAA,EAAA,MACV,KAAK,OAAO,MAAS,KAAK,OAAO,gBAAA,EAAA,MACjC,KAAK,OAAO,OAAS,KAAK,OAAO,gBAAA,EAAA,MACjC,KAAK,QAAgB,KAAK,OAAO,WAAW,KAAM,CAAC,MAAO,KAAK,QAAQ,mBAAkB,gBAAA,EAAA,MAEtF,gBAAA,EAAA,SAAA,KAAK,QAAQ,UAAO,gBAAA,EAAA,SAAI,KAAK,YAAY,mBAAmB,KAAK,QAAQ,WAAS,gBAAA,EAAA,SAAA,gBAAA,EAAA,MACpF,KAAK,QAAQ,UAAY,KAAK,QAAQ,QAAQ,gBAAA,EAAA,MAC9C,KAAK,QAAQ,SAAS,EAAG,EAAG,KAAK,OAAQ,KAAK,SAC9C,gBAAA,EAAA,SAAA,gBAAA,EAAA,MAED,IAAI,IAAI,GAAE,gBAAA,EAAG,SAAG,EAAK,KAAK,YAAa,IAAK,CAAA,gBAAA,EAAA,MAC3C,IAAI,IAAI,GAAE,gBAAA,EAAG,SAAG,EAAK,KAAK,YAAa,IAAK,gBAAA,EAAA,MAC3C,KAAK,OAAO,EAAI,EAAI,KAAK,OAAO,IAAI,EAAI,GAE1C,CAED,GAEA,CAAA,IAAA,SAAA,MAIA,SAAO,EAAI,EAAI,GAEd,OAFsB,gBAAA,EAAA,KAAA,gBAAA,EAAA,MAEnB,gBAAA,EAAA,SAAC,KAAK,QAAQ,mBAAgB,gBAAA,EAAI,SAAC,KAAK,OAAO,MAAM,EAAI,KAE3D,gBAAA,EAAA,SAAA,gBAAA,EAAA,MAED,KAAK,QAAQ,UAAY,KAAK,eAAe,GAAS,gBAAA,EAAA,MAEnD,gBAAA,EAAI,SAAA,KAAC,QAAQ,sBAAmB,gBAAA,EAAI,UAAC,KAAK,OAAO,YAAY,EAAI,EAAI,KAAK,QAAQ,gBAAc,gBAAA,EAAA,SAAA,gBAAA,EAAA,MAClG,KAAK,QAAQ,YAAY,gBAAA,EAAA,MAEzB,KAAK,QAAQ,KACX,EAAK,IAAO,KAAK,OACjB,EAAK,IAAO,KAAK,MACjB,KAAK,QAAQ,aAAe,KAAK,MAClC,EACA,EAAI,KAAK,IACT,gBAAA,EAAA,MAED,KAAK,QAAQ,YAAO,gBAAA,EAAA,QAGpB,gBAAA,EAAA,SAAA,gBAAA,EAAA,WAED,KAAK,QAAQ,SAAS,EAAK,KAAK,MAAO,EAAK,KAAK,MAAO,KAAK,MAAO,KAAK,UAtBT,gBAAA,EAAA,cAAA,gBAAA,EAAA,MAuBjE,IAAC,EAAA,IAAA,qBAAA,MApJD,SAA0B,GAEzB,OAFgC,gBAAA,EAAA,KAAA,gBAAA,EAAA,KAEX,iBAAX,GAAoB,gBAAA,EAAA,QAAA,gBAAA,EAAA,MACtB,IACP,gBAAA,EAAA,QAAA,gBAAA,EAAA,KAED,EAAS,EAAO,OAIhB,gBAAA,EAAA,KACG,EAAO,MAAM,+CAA8C,gBAAA,EAAA,QAAA,gBAAA,EAAA,MACtD,IACP,gBAAA,EAAA,QAED,gBAAA,EAAA,KACG,EAAO,MAAM,oCAAmC,gBAAA,EAAA,QAAA,gBAAA,EAAA,MAC3C,IACP,gBAAA,EAAA,QAED,gBAAA,EAAA,KACG,EAAO,MAAM,cAAa,gBAAA,EAAA,QAAA,gBAAA,EAAA,MACrB,IACP,gBAAA,EAAA,QAAA,gBAAA,EAAA,OAEM,KACR,IAAC,CAhD2B,G,ksFCCjB,OAAA,eAAA,kBAAA,CAAA,EAAA,CAAA,CAAA,iBAHS,iBAAY,oBAAA,IAAA,IAAA,EAAA,gBAAA,KAAA,GAAA,QAAA,EAAA,UAAA,OAAA,EAAA,UAAA,GAAA,EAAA,EAAA,EAAA,EAAA,IAAA,EAAA,GAAA,UAAA,GAKT,OAHvB,gBAFgC,EAAA,WAAA,KAAA,EAAA,UAAA,IAEhC,YAAA,iBAAA,EAAA,KAGW,eAAY,CAAA,QAAA,UAAA,EALkB,kBAKlB,aAAA,EAAA,EAAA,IAAA,wBAAA,MAKvB,SAAsB,GACrB,OAD6B,iBAAA,EAAA,KAAA,iBAAA,EAAA,KACtB,GAAO,iBAAA,EAAA,QAAG,OAAI,iBAAA,EAAA,QAAG,KACzB,GAEA,CAAA,IAAA,qBAAA,MAGA,SAAmB,GAClB,OADyB,iBAAA,EAAA,KAAA,iBAAA,EAAA,KAClB,CACR,GAEA,CAAA,IAAA,OAAA,MAUA,SAAK,GAAM,iBAAA,EAAA,KACV,IAAI,GAAI,iBAAA,EAAA,KAAG,IAAG,iBAAA,EAAA,KAEd,IAAI,IAAI,GAAE,iBAAA,EAAG,QAAG,EAAK,KAAK,YAAa,IAAK,CAC3C,IAAI,GAAI,iBAAA,EAAA,KAAG,IAAG,iBAAA,EAAA,KAEd,IAAI,IAAI,GAAE,iBAAA,EAAG,QAAG,EAAK,KAAK,YAAa,IAAK,iBAAA,EAAA,MAC3C,EAAK,KAAK,KAAK,aAAa,KAAK,OAAO,IAAI,EAAI,KAChD,iBAAA,EAAA,MAED,EAAK,KAAK,EAAK,KAAK,IACrB,CAEA,IAAI,GAAK,iBAAA,EAAG,QAAK,KAAK,KAAK,QAAQ,MAInC,OAJwC,iBAAA,EAAA,MAExC,KAAK,WAAW,EAAO,GAAO,iBAAA,EAAA,MAEvB,CACR,IAEA,EAAA,IAAA,qBAAA,MA3BA,SAA0B,GACzB,OADgC,iBAAA,EAAA,KAAA,iBAAA,EAAA,KACP,iBAAX,CACf,GAAC,CAAA,IAAA,QAAA,MAgCD,SAAa,EAAM,GAA2B,IAAnB,EAAW,UAAA,OAAA,QAAA,IAAA,UAAA,GAAA,UAAA,qBAAA,EAAA,QAAG,MAGxC,OAH4C,iBAAA,EAAA,KAAA,iBAAA,EAAA,MAC5C,EAAS,KAAK,IAAI,EAAG,KAAK,IAAI,EAAQ,MAAM,iBAAA,EAAA,MAE5C,aAAgC,IAAhB,GAAoB,iBAAA,EAAA,QAAG,KAAE,iBAAA,EAAG,YAAE,cAAO,EAAM,KAAA,OAAI,EAAI,OACpE,IAAC,CA9D+B,G,kpHCGrB,OAAA,eAAA,kBAAA,CAAA,EAAA,CAAA,CAAA,iBADS,iBAAY,oBAAA,IAAA,IAAA,EAAA,gBAAA,KAAA,GAAA,QAAA,EAAA,UAAA,OAAA,EAAA,UAAA,GAAA,EAAA,EAAA,EAAA,EAAA,IAAA,EAAA,GAAA,UAAA,GAaqE,OAXrG,gBAFgC,EAAA,WAAA,KAAA,EAAA,UAAA,IAEhC,YAAA,iBAAA,EAAA,KAGW,qBAEX,gBAAA,EAAA,UAAA,iBAAA,EAAA,KAMS,+FAA4F,CAAA,QAAA,UAAA,EAb5D,kBAa4D,aAAA,EAAA,EAAA,IAAA,OAAA,MAKrG,SAAK,GAAM,iBAAA,EAAA,KACV,IAAgD,EAAA,gBAAhD,iBAAA,EAAA,KAAsB,KAAK,uBAAqB,GAA3C,EAAK,EAAA,GAAE,EAAM,EAAA,GACd,GAAO,iBAAA,EAAA,KAAK,KAAK,OAAO,cACxB,GAAS,iBAAA,EAAA,KAAG,EAAQ,gBAGpB,GAAK,iBAAA,EAAG,MACX,QAAS,KAAK,OACd,OAAQ,CACP,QAAS,EAAQ,mBACjB,SAAU,KAAK,OAAO,cAAc,WACpC,OAAQ,CACP,KAAM,EACN,cAAe,MAAM,QAAQ,KAAK,YAAc,GAAa,GAC7D,YAAa,KAAK,OAAO,iBAAiB,aAC1C,MAAO,EACP,OAAQ,EACR,KAAM,OAKL,GAAM,iBAAA,EAAA,KAAG,KAAK,OAAO,aAEzB,IAAI,IAAI,KAF6B,iBAAA,EAAA,KAExB,EAAO,CACnB,IAAI,GAAS,iBAAA,EAAA,KAAG,KAAK,IAAI,EAAG,EAAO,KAAI,iBAAA,EAAA,KAEtB,OAAd,GAAmB,iBAAA,EAAA,QAAA,iBAAA,EAAA,MACrB,EAAM,OAAO,OAAO,KAAK,KAAK,IAC9B,iBAAA,EAAA,OACF,CAEA,IAAI,GAAK,iBAAA,EAAG,WAAK,UAAU,IAI3B,OAJkC,iBAAA,EAAA,MAElC,KAAK,WAAW,EAAO,GAAO,iBAAA,EAAA,MAEvB,CACR,GAEA,CAAA,IAAA,MAAA,MAMA,SAAI,EAAI,GAAK,iBAAA,EAAA,KACZ,IAAI,GAAS,iBAAA,EAAG,OAAC,EAAG,EAAI,QAAS,KAEjC,IAAI,IAAI,KAF6B,iBAAA,EAAA,MAExB,EAAK,CACjB,IAAI,GAAM,iBAAA,EAAA,MAAG,KAAK,OAAO,EAAG,EAAI,EAAK,KAAI,iBAAA,EAAA,MAE3B,OAAX,GAAgB,iBAAA,EAAA,QAAA,iBAAA,EAAA,MAClB,EAAU,QAAQ,KAAK,IACvB,iBAAA,EAAA,OACF,CAEA,OAFC,iBAAA,EAAA,MAEE,EAAU,QAAQ,QAAO,iBAAA,EAAA,QAAA,iBAAA,EAAA,MACpB,IACP,iBAAA,EAAA,QAED,iBAAA,EAAA,MACO,KACR,GAEA,CAAA,IAAA,SAAA,MAMA,SAAO,EAAI,EAAI,GAAQ,IAAA,EAAA,iBAAA,EAAA,KACtB,IAAI,GAAM,iBAAA,EAAA,MAAG,KAAK,OAAO,OAAO,IAEhC,OAFyC,iBAAA,EAAA,MAEtC,iBAAA,EAAA,QAAC,KAAK,QAAQ,mBAAgB,iBAAA,EAAI,QAAC,IAErC,iBAAA,EAAA,QAAA,iBAAA,EAAA,MAEM,CACN,EAAG,EACH,KAAM,EACN,MAA2B,QAAtB,iBAAA,EAAA,QAAA,EAAG,WAAW,UAAQ,IAAA,KAAA,iBAAA,EAAI,YAC/B,MAAO,KAAK,eAAe,MARiB,iBAAA,EAAA,QAAA,iBAAA,EAAA,MACrC,KAST,IAAC,CArG+B;;;;;;GCLjC,SAAA,gBAAA,IAAA,EAAA,4CAAA,EAAA,IAAA,SAAA,iBAAA,EAAA,eAAA,EAAA,EAAA,KAAA,EAAA,GAAA,IAAA,EAAA,IAAA,6CAAA,EAAA,GAAA,OAAA,EAAA,GAAA,CAAA,KAAA,4CAAA,aAAA,GAAA,MAAA,GAAA,UAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,gBAAA,2CAAA,KAAA,iDAAA,EAAA,EAAA,GAMY,OAAA,cAAA,kBAAA,CAAA,EAAA,CAAA,CAAA,uB","file":"/npm/@chillerlan/qrcode@1.0.1/lib/browser.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@chillerlan/qrcode@1.0.1/lib/browser.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/**\r\n * @created      11.07.2022\r\n * @author       smiley <smiley@chillerlan.net>\r\n * @copyright    2022 smiley\r\n * @license      MIT\r\n */\r\n\r\nexport default class QRCodeException extends Error{\r\n\r\n}\r\n","/**\r\n * @created      11.07.2022\r\n * @author       smiley <smiley@chillerlan.net>\r\n * @copyright    2022 smiley\r\n * @license      MIT\r\n */\r\n\r\nexport default class PHPJS{\r\n\r\n\t/**\r\n\t * not an exact implementation, we're ignoring the $start_index parameter, which is always 0 here\r\n\t *\r\n\t * @param {number|int} $count\r\n\t * @param {*} $value\r\n\t * @returns {Array}\r\n\t */\r\n\tstatic array_fill($count, $value){\r\n\t\tlet arr = [];\r\n\r\n\t\tfor(let key = 0; key < $count; key++){\r\n\t\t\tarr[key] = structuredClone($value);\r\n\t\t}\r\n\r\n\t\treturn arr;\r\n\t}\r\n\r\n\t/**\r\n\t * Checks to see if a value in a nested array is set.\r\n\t * isset(() => some.nested.value)\r\n\t *\r\n\t * @link https://stackoverflow.com/a/46256973\r\n\t *\r\n\t * @param {Function} $accessor Function that returns our value\r\n\t */\r\n\tstatic isset($accessor){\r\n\t\ttry{\r\n\t\t\treturn typeof $accessor() !== 'undefined';\r\n\t\t}\r\n\t\tcatch(e){\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @link  http://locutus.io/php/var/intval/\r\n\t *\r\n\t * @param {*} $var\r\n\t * @param {number|null} $base\r\n\t * @returns {number|int}\r\n\t */\r\n\tstatic intval($var, $base = null){\r\n\t\tlet tmp;\r\n\t\tlet type = typeof($var);\r\n\r\n\t\tif(type === 'boolean'){\r\n\t\t\treturn +$var;\r\n\t\t}\r\n\r\n\t\tif(type === 'string'){\r\n\t\t\ttmp = parseInt($var, $base || 10);\r\n\r\n\t\t\treturn (isNaN(tmp) || !isFinite(tmp)) ? 0 : tmp;\r\n\t\t}\r\n\r\n\t\tif(type === 'number' && isFinite($var)){\r\n\t\t\treturn $var|0;\r\n\t\t}\r\n\r\n\t\treturn 0;\r\n\t}\r\n\r\n\t/**\r\n\t * @link https://locutus.io/php/array/array_combine/\r\n\t *\r\n\t * @param {Array} keys\r\n\t * @param {Array} values\r\n\t * @returns {Object<{}>|boolean}\r\n\t */\r\n\tstatic array_combine(keys, values){\r\n\t\tlet newArray = {};\r\n\t\tlet i = 0;\r\n\t\t// input sanitation\r\n\t\tif(\r\n\t\t\t// Only accept arrays or array-like objects\r\n\t\t\ttypeof keys !== 'object'\r\n\t\t\t|| typeof values !== 'object'\r\n\t\t\t// Require arrays to have a count\r\n\t\t\t|| typeof keys.length !== 'number'\r\n\t\t\t|| typeof values.length !== 'number'\r\n\t\t\t|| !keys.length\r\n\t\t\t// number of elements does not match\r\n\t\t\t|| keys.length !== values.length\r\n\t\t){\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tfor(i = 0; i < keys.length; i++){\r\n\t\t\tnewArray[keys[i]] = values[i];\r\n\t\t}\r\n\r\n\t\treturn newArray;\r\n\t}\r\n\r\n\t/**\r\n\t * @link https://locutus.io/php/strings/ord\r\n\t *\r\n\t * @param {string} $string\r\n\t * @returns {number|int}\r\n\t */\r\n\tstatic ord($string){\r\n\t\t$string += ''; // make sure we have a string\r\n\t\tlet code = $string.charCodeAt(0);\r\n\r\n\t\tif(code >= 0xD800 && code <= 0xDBFF){\r\n\t\t\t// High surrogate (could change last hex to 0xDB7F to treat\r\n\t\t\t// high private surrogates as single characters)\r\n\t\t\tlet hi = code;\r\n\r\n\t\t\tif($string.length === 1){\r\n\t\t\t\t// This is just a high surrogate with no following low surrogate,\r\n\t\t\t\t// so we return its value;\r\n\t\t\t\treturn code;\r\n\t\t\t\t// we could also throw an error as it is not a complete character,\r\n\t\t\t\t// but someone may want to know\r\n\t\t\t}\r\n\r\n\t\t\treturn ((hi - 0xD800) * 0x400) + ($string.charCodeAt(1) - 0xDC00) + 0x10000;\r\n\t\t}\r\n\r\n\t\tif(code >= 0xDC00 && code <= 0xDFFF){\r\n\t\t\t// Low surrogate\r\n\t\t\t// This is just a low surrogate with no preceding high surrogate,\r\n\t\t\t// so we return its value;\r\n\t\t\treturn code;\r\n\t\t\t// we could also throw an error as it is not a complete character,\r\n\t\t\t// but someone may want to know\r\n\t\t}\r\n\r\n\t\treturn code;\r\n\t}\r\n\r\n\t/**\r\n\t * @link https://www.php.net/manual/en/language.oop5.cloning.php\r\n\t *\r\n\t * because javascript is dumb (have I mentioned it yet??) we still cannot properly 1:1 clone objects in 2024.\r\n\t * structuredClone() suggest that but in fact it does not. so we have to invoke a new instance of the class,\r\n\t * and copy over the properties from the object we want to clone - could have done that by hand entirely...\r\n\t *\r\n\t * @param {Object.<*>} $object\r\n\t * @returns {Object.<*>}\r\n\t */\r\n\tstatic clone($object){\r\n\t\tlet $dummy = Object.create(Object.getPrototypeOf($object));\r\n\r\n\t\treturn Object.assign($dummy, $object);\r\n\t}\r\n\r\n}\r\n","/**\r\n * @created      24.07.2022\r\n * @author       smiley <smiley@chillerlan.net>\r\n * @copyright    2022 smiley\r\n * @license      MIT\r\n *\r\n * @see https://jamie.build/const\r\n */\r\n\r\nimport PHPJS from './PHPJS.js';\r\n\r\n/**\r\n * from EccLevel\r\n */\r\n\r\n// ISO/IEC 18004:2000 Tables 12, 25\r\nconst ECC_L = 0b01; // 7%.\r\nconst ECC_M = 0b00; // 15%.\r\nconst ECC_Q = 0b11; // 25%.\r\nconst ECC_H = 0b10; // 30%.\r\n\r\n/**\r\n * from MaskPattern\r\n */\r\n\r\n/** @type {number|int} */\r\nconst MASK_PATTERN_AUTO = -1;\r\n\r\nconst PATTERN_000 = 0b000;\r\nconst PATTERN_001 = 0b001;\r\nconst PATTERN_010 = 0b010;\r\nconst PATTERN_011 = 0b011;\r\nconst PATTERN_100 = 0b100;\r\nconst PATTERN_101 = 0b101;\r\nconst PATTERN_110 = 0b110;\r\nconst PATTERN_111 = 0b111;\r\n\r\n/**\r\n * @type {number[]|int[]}\r\n * @private\r\n */\r\nconst PATTERNS = [\r\n\tPATTERN_000,\r\n\tPATTERN_001,\r\n\tPATTERN_010,\r\n\tPATTERN_011,\r\n\tPATTERN_100,\r\n\tPATTERN_101,\r\n\tPATTERN_110,\r\n\tPATTERN_111,\r\n];\r\n\r\n/**\r\n * from Mode\r\n */\r\n\r\n// ISO/IEC 18004:2000 Table 2\r\nconst MODE_NUMBER   = 0b0001;\r\nconst MODE_ALPHANUM = 0b0010;\r\nconst MODE_BYTE     = 0b0100;\r\n\r\nconst MODES = [\r\n\tMODE_NUMBER,\r\n\tMODE_ALPHANUM,\r\n\tMODE_BYTE,\r\n];\r\n\r\n/**\r\n * from Version\r\n */\r\n\r\n/** @type {number|int} */\r\nconst VERSION_AUTO = -1;\r\n\r\n/**\r\n * from QRMatrix\r\n */\r\n\r\n/*\r\n * special values\r\n */\r\n\r\n/** @type {number|int} */\r\nconst IS_DARK            = 0b100000000000;\r\n/** @type {number|int} */\r\nconst M_NULL             = 0b000000000000;\r\n/** @type {number|int} */\r\nconst M_LOGO             = 0b001000000000;\r\n/** @type {number|int} */\r\nconst M_LOGO_DARK        = 0b101000000000;\r\n\r\n/*\r\n * light values\r\n */\r\n\r\n/** @type {number|int} */\r\nconst M_DATA             = 0b000000000010;\r\n/** @type {number|int} */\r\nconst M_FINDER           = 0b000000000100;\r\n/** @type {number|int} */\r\nconst M_SEPARATOR        = 0b000000001000;\r\n/** @type {number|int} */\r\nconst M_ALIGNMENT        = 0b000000010000;\r\n/** @type {number|int} */\r\nconst M_TIMING           = 0b000000100000;\r\n/** @type {number|int} */\r\nconst M_FORMAT           = 0b000001000000;\r\n/** @type {number|int} */\r\nconst M_VERSION          = 0b000010000000;\r\n/** @type {number|int} */\r\nconst M_QUIETZONE        = 0b000100000000;\r\n\r\n/*\r\n * dark values\r\n */\r\n\r\n/** @type {number|int} */\r\nconst M_DARKMODULE       = 0b100000000001;\r\n/** @type {number|int} */\r\nconst M_DATA_DARK        = 0b100000000010;\r\n/** @type {number|int} */\r\nconst M_FINDER_DARK      = 0b100000000100;\r\n/** @type {number|int} */\r\nconst M_ALIGNMENT_DARK   = 0b100000010000;\r\n/** @type {number|int} */\r\nconst M_TIMING_DARK      = 0b100000100000;\r\n/** @type {number|int} */\r\nconst M_FORMAT_DARK      = 0b100001000000;\r\n/** @type {number|int} */\r\nconst M_VERSION_DARK     = 0b100010000000;\r\n/** @type {number|int} */\r\nconst M_FINDER_DOT       = 0b110000000000;\r\n\r\n/*\r\n * values used for reversed reflectance\r\n */\r\n\r\n/** @type {number|int} */\r\nconst M_DARKMODULE_LIGHT = 0b000000000001;\r\n/** @type {number|int} */\r\nconst M_FINDER_DOT_LIGHT = 0b010000000000;\r\n/** @type {number|int} */\r\nconst M_SEPARATOR_DARK   = 0b100000001000;\r\n/** @type {number|int} */\r\nconst M_QUIETZONE_DARK   = 0b100100000000;\r\n\r\n/** @type {number[]|int[]} */\r\nconst MATRIX_NEIGHBOUR_FLAGS = [\r\n\t0b00000001,\r\n\t0b00000010,\r\n\t0b00000100,\r\n\t0b00001000,\r\n\t0b00010000,\r\n\t0b00100000,\r\n\t0b01000000,\r\n\t0b10000000,\r\n];\r\n\r\n/**\r\n * Map of flag => coord\r\n *\r\n * @see QRMatrix::checkNeighbours()\r\n *\r\n * @type {number[][]|int[][]}\r\n * @protected\r\n */\r\nconst MATRIX_NEIGHBOURS = PHPJS.array_combine(MATRIX_NEIGHBOUR_FLAGS, [\r\n\t[-1, -1],\r\n\t[ 0, -1],\r\n\t[ 1, -1],\r\n\t[ 1,  0],\r\n\t[ 1,  1],\r\n\t[ 0,  1],\r\n\t[-1,  1],\r\n\t[-1,  0],\r\n]);\r\n\r\n/**\r\n * @type {number[]|int[]}\r\n * @internal\r\n */\r\nconst MODULE_VALUES_KEYS = [\r\n\t// light\r\n\tM_NULL,\r\n\tM_DARKMODULE_LIGHT,\r\n\tM_DATA,\r\n\tM_FINDER,\r\n\tM_SEPARATOR,\r\n\tM_ALIGNMENT,\r\n\tM_TIMING,\r\n\tM_FORMAT,\r\n\tM_VERSION,\r\n\tM_QUIETZONE,\r\n\tM_LOGO,\r\n\tM_FINDER_DOT_LIGHT,\r\n\t// dark\r\n\tM_DARKMODULE,\r\n\tM_DATA_DARK,\r\n\tM_FINDER_DARK,\r\n\tM_SEPARATOR_DARK,\r\n\tM_ALIGNMENT_DARK,\r\n\tM_TIMING_DARK,\r\n\tM_FORMAT_DARK,\r\n\tM_VERSION_DARK,\r\n\tM_QUIETZONE_DARK,\r\n\tM_LOGO_DARK,\r\n\tM_FINDER_DOT,\r\n];\r\n\r\nconst DEFAULT_MODULE_VALUES = PHPJS.array_combine(MODULE_VALUES_KEYS, [\r\n\t// light\r\n\tfalse,\r\n\tfalse,\r\n\tfalse,\r\n\tfalse,\r\n\tfalse,\r\n\tfalse,\r\n\tfalse,\r\n\tfalse,\r\n\tfalse,\r\n\tfalse,\r\n\tfalse,\r\n\tfalse,\r\n\t// dark\r\n\ttrue,\r\n\ttrue,\r\n\ttrue,\r\n\ttrue,\r\n\ttrue,\r\n\ttrue,\r\n\ttrue,\r\n\ttrue,\r\n\ttrue,\r\n\ttrue,\r\n\ttrue,\r\n]);\r\n\r\nconst LAYERNAMES = PHPJS.array_combine(MODULE_VALUES_KEYS, [\r\n\t// light\r\n\t'null',\r\n\t'darkmodule-light',\r\n\t'data',\r\n\t'finder',\r\n\t'separator',\r\n\t'alignment',\r\n\t'timing',\r\n\t'format',\r\n\t'version',\r\n\t'quietzone',\r\n\t'logo',\r\n\t'finder-dot-light',\r\n\t// dark\r\n\t'darkmodule',\r\n\t'data-dark',\r\n\t'finder-dark',\r\n\t'separator-dark',\r\n\t'alignment-dark',\r\n\t'timing-dark',\r\n\t'format-dark',\r\n\t'version-dark',\r\n\t'quietzone-dark',\r\n\t'logo-dark',\r\n\t'finder-dot',\r\n]);\r\n\r\nexport {\r\n\tECC_L, ECC_M, ECC_Q, ECC_H,\r\n\tMASK_PATTERN_AUTO, PATTERNS, PATTERN_000, PATTERN_001, PATTERN_010,\r\n\tPATTERN_011, PATTERN_100, PATTERN_101, PATTERN_110, PATTERN_111,\r\n\tMODES, MODE_NUMBER, MODE_ALPHANUM, MODE_BYTE,\r\n\tVERSION_AUTO,\r\n\tM_NULL, M_DARKMODULE, M_DARKMODULE_LIGHT, M_DATA, M_FINDER, M_SEPARATOR, M_ALIGNMENT, M_TIMING,\r\n\tM_FORMAT, M_VERSION, M_QUIETZONE, M_LOGO, M_FINDER_DOT, M_FINDER_DOT_LIGHT, IS_DARK,\r\n\tM_DATA_DARK, M_FINDER_DARK, M_SEPARATOR_DARK, M_ALIGNMENT_DARK, M_TIMING_DARK,\r\n\tM_FORMAT_DARK, M_VERSION_DARK, M_QUIETZONE_DARK, M_LOGO_DARK,\r\n\tMATRIX_NEIGHBOUR_FLAGS, MATRIX_NEIGHBOURS,\r\n\tDEFAULT_MODULE_VALUES, LAYERNAMES,\r\n};\r\n","/**\r\n * @created      14.07.2022\r\n * @author       smiley <smiley@chillerlan.net>\r\n * @copyright    2022 smiley\r\n * @license      MIT\r\n */\r\n\r\n/**\r\n * @interface\r\n */\r\nexport default class QROutputInterface{\r\n\r\n\t/**\r\n\t * @type {string}\r\n\t * @protected\r\n\t * @see QROutputAbstract.toBase64DataURI()\r\n\t */\r\n\tmimeType;\r\n\r\n\r\n\t/**\r\n\t * Determines whether the given value is valid\r\n\t *\r\n\t * @param {*} $value\r\n\t * @returns {boolean}\r\n\t * @abstract\r\n\t */\r\n\tstatic moduleValueIsValid($value){}\r\n\r\n\t/**\r\n\t * generates the output, optionally dumps it to a file, and returns it\r\n\t *\r\n\t * @param {string|null} $file\r\n\t * @return {*}\r\n\t * @abstract\r\n\t */\r\n\tdump($file = null){}\r\n\r\n}\r\n","import QRCodeException from '../QRCodeException.js';\r\n\r\nexport default class QRCodeOutputException extends QRCodeException{\r\n\r\n}\r\n","/**\r\n * @created      11.07.2022\r\n * @author       smiley <smiley@chillerlan.net>\r\n * @copyright    2022 smiley\r\n * @license      MIT\r\n */\r\n\r\nimport QROutputInterface from './QROutputInterface.js';\r\nimport PHPJS from '../Common/PHPJS.js';\r\nimport {IS_DARK, M_DATA, DEFAULT_MODULE_VALUES} from '../Common/constants.js';\r\nimport QRCodeOutputException from './QRCodeOutputException.js';\r\n\r\n/**\r\n * common output abstract\r\n * @abstract\r\n */\r\nexport default class QROutputAbstract extends QROutputInterface{\r\n\r\n\t/**\r\n\t * the current size of the QR matrix\r\n\t *\r\n\t * @see QRMatrix.getSize()\r\n\t * @type {number|int}\r\n\t * @protected\r\n\t */\r\n\tmoduleCount;\r\n\r\n\t/**\r\n\t * an (optional) array of color values for the several QR matrix parts\r\n\t * @type {Object.<number, *>}\r\n\t * @protected\r\n\t */\r\n\tmoduleValues = {};\r\n\r\n\t/**\r\n\t * the current scaling for a QR pixel\r\n\t *\r\n\t * @see QROptions.$scale\r\n\t * @type {number|int}\r\n\t * @protected\r\n\t */\r\n\tscale;\r\n\r\n\t/**\r\n\t * the side length of the QR image (modules * scale)\r\n\t * @type {number|int}\r\n\t * @protected\r\n\t */\r\n\tlength;\r\n\r\n\t/**\r\n\t * the (filled) data matrix object\r\n\t * @type {QRMatrix}\r\n\t * @protected\r\n\t */\r\n\tmatrix;\r\n\r\n\t/**\r\n\t * @type {QROptions}\r\n\t * @protected\r\n\t */\r\n\toptions;\r\n\r\n\t/**\r\n\t * QROutputAbstract constructor.\r\n\t * @param {QROptions} $options\r\n\t * @param {QRMatrix} $matrix\r\n\t */\r\n\tconstructor($options, $matrix){\r\n\t\tsuper();\r\n\r\n\t\tthis.options = $options;\r\n\t\tthis.matrix  = $matrix;\r\n\r\n\t\tthis.setMatrixDimensions();\r\n\t\tthis.setModuleValues();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets/updates the matrix dimensions\r\n\t *\r\n\t * Call this method if you modify the matrix from within your custom module in case the dimensions have been changed\r\n\t *\r\n\t * @returns {void}\r\n\t * @protected\r\n\t */\r\n\tsetMatrixDimensions(){\r\n\t\tthis.moduleCount = this.matrix.getSize();\r\n\t\tthis.scale       = this.options.scale;\r\n\t\tthis.length      = this.moduleCount * this.scale;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a 2 element array with the current output width and height\r\n\t *\r\n\t * The type and units of the values depend on the output class. The default value is the current module count.\r\n\t *\r\n\t * @returna {array}\r\n\t * @protected\r\n\t */\r\n\tgetOutputDimensions(){\r\n\t\treturn [this.moduleCount, this.moduleCount];\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the initial module values\r\n\t *\r\n\t * @returns {void}\r\n\t * @protected\r\n\t */\r\n\tsetModuleValues(){\r\n\t\tlet $M_TYPE;\r\n\r\n\t\t// first fill the map with the default values\r\n\t\tfor($M_TYPE in DEFAULT_MODULE_VALUES){\r\n\t\t\tthis.moduleValues[$M_TYPE] = this.getDefaultModuleValue(DEFAULT_MODULE_VALUES[$M_TYPE]);\r\n\t\t}\r\n\r\n\t\t// now loop over the options values to replace defaults and add extra values\r\n\t\tfor($M_TYPE in this.options.moduleValues){\r\n\t\t\tlet $value = this.options.moduleValues[$M_TYPE];\r\n\r\n\t\t\tif(this.constructor.moduleValueIsValid($value)){\r\n\t\t\t\tthis.moduleValues[$M_TYPE] = this.prepareModuleValue($value);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the final value for the given input (return value depends on the output module)\r\n\t *\r\n\t * @param {*} $value\r\n\t * @returna {*}\r\n\t * @protected\r\n\t */\r\n\tprepareModuleValue($value){\r\n\t\treturn $value.replace(/(<([^>]+)>)/gi, '').replace(/([ '\"\\r\\n\\t]+)/g, '');\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a defualt value for either dark or light modules (return value depends on the output module)\r\n\t *\r\n\t * @param {boolean} $isDark\r\n\t * @returna {*}\r\n\t * @protected\r\n\t */\r\n\tgetDefaultModuleValue($isDark){\r\n\t\treturn $isDark ? '#000' : '#fff';\r\n\t}\r\n\r\n\t/**\r\n\t * @inheritDoc\r\n\t */\r\n\tstatic moduleValueIsValid($value){\r\n\r\n\t\tif(typeof $value !== 'string'){\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t$value = $value.trim();\r\n\r\n\t\t// hex notation\r\n\t\t// #rgb(a)\r\n\t\t// #rrggbb(aa)\r\n\t\tif($value.match(/^#([\\da-f]{3}){1,2}$|^#([\\da-f]{4}){1,2}$/i)){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t// css: hsla/rgba(...values)\r\n\t\tif($value.match(/^(hsla?|rgba?)\\([\\d .,%\\/]+\\)$/i)){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t// url(...)\r\n\t\tif($value.match(/^url\\([-\\/#a-z\\d]+\\)$/i)){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t// predefined css color\r\n\t\tif($value.match(/^[a-z]+$/i)){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the prepared value for the given $M_TYPE\r\n\t *\r\n\t * @throws {QRCodeOutputException} if $moduleValues[$M_TYPE] doesn't exist\r\n\t * @param {number|int} $M_TYPE\r\n\t * @returna {*}\r\n\t * @protected\r\n\t */\r\n\tgetModuleValue($M_TYPE){\r\n\r\n\t\tif(!PHPJS.isset(() => this.moduleValues[$M_TYPE])){\r\n\t\t\tthrow new QRCodeOutputException(`$M_TYPE \"${$M_TYPE.toString(2).padStart(12, '0')}\" not found in module values map`);\r\n\t\t}\r\n\r\n\t\treturn this.moduleValues[$M_TYPE];\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the prepared module value at the given coordinate [$x, $y] (convenience)\r\n\t *\r\n\t * @param {number|int} $x\r\n\t * @param {number|int} $y\r\n\t * @returna {*}\r\n\t * @protected\r\n\t */\r\n\tgetModuleValueAt($x, $y){\r\n\t\treturn this.getModuleValue(this.matrix.get($x, $y));\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a base64 data URI for the given string and mime type\r\n\t *\r\n\t * @param {string} $data\r\n\t * @param {string} $mime\r\n\t * @returna {string}\r\n\t * @throws {QRCodeOutputException}\r\n\t * @protected\r\n\t */\r\n\ttoBase64DataURI($data, $mime){\r\n\t\t$mime = ($mime ?? this.mimeType).trim();\r\n\r\n\t\tif($mime === ''){\r\n\t\t\tthrow new QRCodeOutputException('invalid mime type given');\r\n\t\t}\r\n\r\n\t\treturn `data:${$mime};base64,${btoa($data)}`;\r\n\t}\r\n\r\n\t/**\r\n\t * saves the qr data to a file\r\n\t *\r\n\t * @see file_put_contents()\r\n\t * @see QROptions.cachefile\r\n\t *\r\n\t * @param {string} $data\r\n\t * @param {string} $file\r\n\t * @returns {void}\r\n\t * @throws QRCodeOutputException\r\n\t * @protected\r\n\t */\r\n\tsaveToFile($data, $file){\r\n\r\n\t\tif($file === null){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// @todo\r\n\t}\r\n\r\n\t/**\r\n\t * collects the modules per QRMatrix.M_* type and runs a $transform functio on each module and\r\n\t * returns an array with the transformed modules\r\n\t *\r\n\t * The transform callback is called with the following parameters:\r\n\t *\r\n\t *   $x            - current column\r\n\t *   $y            - current row\r\n\t *   $M_TYPE       - field value\r\n\t *   $M_TYPE_LAYER - (possibly modified) field value that acts as layer id\r\n\t *\r\n\t * @param {function} $transform\r\n\t * @returns {Object<{}>}\r\n\t * @protected\r\n\t */\r\n\tcollectModules($transform){\r\n\t\tlet $paths = {};\r\n\t\tlet $matrix = this.matrix.getMatrix();\r\n\t\tlet $y = 0;\r\n\r\n\t\t// collect the modules for each type\r\n\t\tfor(let $row of $matrix){\r\n\t\t\tlet $x = 0;\r\n\r\n\t\t\tfor(let $M_TYPE of $row){\r\n\t\t\t\tlet $M_TYPE_LAYER = $M_TYPE;\r\n\r\n\t\t\t\tif(this.options.connectPaths && !this.matrix.checkTypeIn($x, $y, this.options.excludeFromConnect)){\r\n\t\t\t\t\t// to connect paths we'll redeclare the $M_TYPE_LAYER to data only\r\n\t\t\t\t\t$M_TYPE_LAYER = M_DATA;\r\n\r\n\t\t\t\t\tif(this.matrix.check($x, $y)){\r\n\t\t\t\t\t\t$M_TYPE_LAYER |= IS_DARK;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// collect the modules per $M_TYPE\r\n\t\t\t\tlet $module = $transform($x, $y, $M_TYPE, $M_TYPE_LAYER);\r\n\r\n\t\t\t\tif($module){\r\n\t\t\t\t\tif(!$paths[$M_TYPE_LAYER]){\r\n\t\t\t\t\t\t$paths[$M_TYPE_LAYER] = [];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t$paths[$M_TYPE_LAYER].push($module);\r\n\t\t\t\t}\r\n\t\t\t\t$x++;\r\n\t\t\t}\r\n\t\t\t$y++;\r\n\t\t}\r\n\r\n\t\t// beautify output\r\n//\t\tksort($paths);\r\n\r\n\t\treturn $paths;\r\n\t}\r\n\r\n}\r\n","/**\r\n * @created      11.07.2022\r\n * @author       smiley <smiley@chillerlan.net>\r\n * @copyright    2022 smiley\r\n * @license      MIT\r\n */\r\n\r\nimport QROutputAbstract from './QROutputAbstract.js';\r\nimport {LAYERNAMES} from '../Common/constants.js';\r\n\r\n/**\r\n * SVG output\r\n *\r\n * @see https://github.com/codemasher/php-qrcode/pull/5\r\n * @see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/svg\r\n * @see https://www.sarasoueidan.com/demos/interactive-svg-coordinate-system/\r\n * @see https://web.archive.org/web/20200220211445/http://apex.infogridpacific.com/SVG/svg-tutorial-contents.html\r\n */\r\nexport default class QRMarkupSVG extends QROutputAbstract{\r\n\r\n\t/**\r\n\t * @inheritDoc\r\n\t */\r\n\tmimeType = 'image/svg+xml';\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tgetCssClass($M_TYPE){\r\n\t\treturn [\r\n\t\t\t`qr-${LAYERNAMES[$M_TYPE] ?? $M_TYPE}`,\r\n\t\t\tthis.matrix.isDark($M_TYPE) ? 'dark' : 'light',\r\n\t\t\tthis.options.cssClass,\r\n\t\t].join(' ');\r\n\t}\r\n\r\n\t/**\r\n\t * @inheritDoc\r\n\t *\r\n\t * @returns {HTMLElement|SVGElement|ChildNode|string|*}\r\n\t */\r\n\tdump($file = null){\r\n\t\tlet $data = this.createMarkup($file !== null);\r\n\r\n\t\tthis.saveToFile($data, $file);\r\n\r\n\t\tif(this.options.returnAsDomElement){\r\n\t\t\tlet doc = new DOMParser().parseFromString($data.trim(), this.mimeType);\r\n\r\n\t\t\treturn doc.firstChild;\r\n\t\t}\r\n\r\n\t\tif(this.options.outputBase64){\r\n\t\t\t$data = this.toBase64DataURI($data, this.mimeType);\r\n\t\t}\r\n\r\n\t\treturn $data;\r\n\t}\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tcreateMarkup($saveToFile){\r\n\t\tlet $svg = this.header();\r\n\t\tlet $eol = this.options.eol;\r\n\r\n\t\tif(this.options.svgDefs){\r\n\t\t\tlet $s1 = this.options.svgDefs;\r\n\r\n\t\t\t$svg += `<defs>${$s1}${$eol}</defs>${$eol}`;\r\n\t\t}\r\n\r\n\t\t$svg += this.paths();\r\n\r\n\t\t// close svg\r\n\t\t$svg += `${$eol}</svg>${$eol}`;\r\n\r\n\t\treturn $svg;\r\n\t}\r\n\r\n\t/**\r\n\t * returns the value for the SVG viewBox attribute\r\n\t *\r\n\t * @see https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/viewBox\r\n\t * @see https://css-tricks.com/scale-svg/#article-header-id-3\r\n\t *\r\n\t * @returns {string}\r\n\t * @protected\r\n\t */\r\n\tgetViewBox(){\r\n\t\tlet [$width, $height] = this.getOutputDimensions();\r\n\r\n\t\treturn `0 0 ${$width} ${$height}`;\r\n\t}\r\n\r\n\t/**\r\n\t * returns the <svg> header with the given options parsed\r\n\t *\r\n\t * @returns {string}\r\n\t * @protected\r\n\t */\r\n\theader(){\r\n\r\n\t\tlet $header = `<svg xmlns=\"http://www.w3.org/2000/svg\" class=\"qr-svg ${this.options.cssClass}\" `\r\n\t\t\t+ `viewBox=\"${this.getViewBox()}\" preserveAspectRatio=\"${this.options.svgPreserveAspectRatio}\">${this.options.eol}`;\r\n\r\n\t\tif(this.options.svgAddXmlHeader){\r\n\t\t\t$header = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>${this.options.eol}${$header}`;\r\n\t\t}\r\n\r\n\t\treturn $header;\r\n\t}\r\n\r\n\t/**\r\n\t * returns one or more SVG <path> elements\r\n\t *\r\n\t * @see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/path\r\n\t *\r\n\t * @returns {string}\r\n\t * @protected\r\n\t */\r\n\tpaths(){\r\n\t\tlet $paths = this.collectModules(($x, $y, $M_TYPE) => this.module($x, $y, $M_TYPE));\r\n\t\tlet $svg = [];\r\n\r\n\t\t// create the path elements\r\n\t\tfor(let $M_TYPE in $paths){\r\n\t\t\t// limit the total line length\r\n\t\t\tlet $chunkSize = 100;\r\n\t\t\tlet $chonks    = [];\r\n\r\n\t\t\tfor(let $i = 0; $i < $paths[$M_TYPE].length; $i += $chunkSize){\r\n\t\t\t\t$chonks.push($paths[$M_TYPE].slice($i, $i + $chunkSize).join(' '));\r\n\t\t\t}\r\n\r\n\t\t\tlet $path = $chonks.join(this.options.eol);\r\n\r\n\t\t\tif($path.trim() === ''){\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\t$svg.push(this.path($path, $M_TYPE));\r\n\t\t}\r\n\r\n\t\treturn $svg.join(this.options.eol);\r\n\t}\r\n\r\n\t/**\r\n\t * renders and returns a single <path> element\r\n\t *\r\n\t * @see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/path\r\n\t *\r\n\t * @param {string} $path\r\n\t * @param {number|int} $M_TYPE\r\n\t * @returns {string}\r\n\t * @protected\r\n\t */\r\n\tpath($path, $M_TYPE){\r\n\t\tlet $cssClass = this.getCssClass($M_TYPE);\r\n\r\n\t\tif(this.options.svgUseFillAttributes){\r\n\t\t\treturn `<path class=\"${$cssClass}\" fill=\"${this.getModuleValue($M_TYPE)}\" `\r\n\t\t\t\t+ `fill-opacity=\"${this.options.svgOpacity}\" d=\"${$path}\"/>`;\r\n\t\t}\r\n\r\n\t\treturn `<path class=\"${$cssClass}\" d=\"${$path}\"/>`;\r\n\t}\r\n\r\n\t/**\r\n\t * returns a path segment for a single module\r\n\t *\r\n\t * @see https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/d\r\n\t *\r\n\t * @param {number|int} $x\r\n\t * @param {number|int} $y\r\n\t * @param {number|int} $M_TYPE\r\n\t *\r\n\t * @returns {string}\r\n\t * @protected\r\n\t */\r\n\tmodule($x, $y, $M_TYPE){\r\n\r\n\t\tif(!this.options.drawLightModules && !this.matrix.check($x, $y)){\r\n\t\t\treturn '';\r\n\t\t}\r\n\r\n\t\tif(this.options.drawCircularModules && !this.matrix.checkTypeIn($x, $y, this.options.keepAsSquare)){\r\n\t\t\t// some values come with the usual JS float fun and i won't do shit about it\r\n\t\t\tlet r  = parseFloat(this.options.circleRadius);\r\n\t\t\tlet d  = (r * 2);\r\n\t\t\tlet ix = ($x + 0.5 - r);\r\n\t\t\tlet iy = ($y + 0.5);\r\n\r\n\t\t\tif(ix < 1){\r\n\t\t\t\tix = ix.toPrecision(3);\r\n\t\t\t}\r\n\r\n\t\t\tif(iy < 1){\r\n\t\t\t\tiy = iy.toPrecision(3);\r\n\t\t\t}\r\n\r\n\t\t\treturn `M${ix} ${iy} a${r} ${r} 0 1 0 ${d} 0 a${r} ${r} 0 1 0 -${d} 0Z`;\r\n\t\t}\r\n\r\n\t\treturn `M${$x} ${$y} h1 v1 h-1Z`;\r\n\t}\r\n\r\n}\r\n","/**\r\n * @created      11.07.2022\r\n * @author       smiley <smiley@chillerlan.net>\r\n * @copyright    2022 smiley\r\n * @license      MIT\r\n */\r\n\r\nimport QRCodeException from './QRCodeException.js';\r\nimport PHPJS from './Common/PHPJS.js';\r\nimport {\r\n\tECC_H, ECC_L, ECC_M, ECC_Q, MASK_PATTERN_AUTO, VERSION_AUTO,\r\n} from './Common/constants.js';\r\nimport QRMarkupSVG from './Output/QRMarkupSVG.js';\r\n\r\n/**\r\n * The QRCode plug-in settings & setter functionality\r\n */\r\nexport default class QROptions{\r\n\r\n\t/**\r\n\t * QR Code version number\r\n\t *\r\n\t * [1 ... 40] or QRCode.VERSION_AUTO\r\n\t *\r\n\t * @type {number|int}\r\n\t * @protected\r\n\t */\r\n\t_version = VERSION_AUTO;\r\n\r\n\t/**\r\n\t * Minimum QR version\r\n\t *\r\n\t * if $version = QRCode.VERSION_AUTO\r\n\t *\r\n\t * @type {number|int}\r\n\t * @protected\r\n\t */\r\n\t_versionMin = 1;\r\n\r\n\t/**\r\n\t * Maximum QR version\r\n\t *\r\n\t * @type {number|int}\r\n\t * @protected\r\n\t */\r\n\t_versionMax = 40;\r\n\r\n\t/**\r\n\t * Error correct level\r\n\t *\r\n\t * QRCode::ECC_X where X is:\r\n\t *\r\n\t *   - L =>  7%\r\n\t *   - M => 15%\r\n\t *   - Q => 25%\r\n\t *   - H => 30%\r\n\t *\r\n\t * @type {number|int}\r\n\t * @protected\r\n\t */\r\n\t_eccLevel = ECC_L;\r\n\r\n\t/**\r\n\t * Mask Pattern to use (no value in using, mostly for unit testing purposes)\r\n\t *\r\n\t * [0...7] or QRCode::MASK_PATTERN_AUTO\r\n\t *\r\n\t * @type {number|int}\r\n\t * @protected\r\n\t */\r\n\t_maskPattern = MASK_PATTERN_AUTO;\r\n\r\n\t/**\r\n\t * Add a \"quiet zone\" (margin) according to the QR code spec\r\n\t *\r\n\t * @see https://www.qrcode.com/en/howto/code.html\r\n\t *\r\n\t * @type {boolean}\r\n\t */\r\n\taddQuietzone = true;\r\n\r\n\t/**\r\n\t * Size of the quiet zone\r\n\t *\r\n\t * internally clamped to [0 ... $moduleCount / 2], defaults to 4 modules\r\n\t *\r\n\t * @type {number|int}\r\n\t * @protected\r\n\t */\r\n\t_quietzoneSize = 4;\r\n\r\n\t/**\r\n\t * the FQCN of the custom QROutputInterface if $outputType is set to QRCode::OUTPUT_CUSTOM\r\n\t *\r\n\t * @type {string|null}\r\n\t */\r\n\toutputInterface = QRMarkupSVG;\r\n\r\n\t/**\r\n\t * /path/to/cache.file\r\n\t *\r\n\t * @type {string|null}\r\n\t */\r\n\tcachefile = null;\r\n\r\n\t/**\r\n\t * newline string [HTML, SVG, TEXT]\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\teol = '\\n';\r\n\r\n\t/**\r\n\t * size of a QR code module in pixels [SVG, IMAGE_*], HTML via CSS\r\n\t *\r\n\t * @type {number|int}\r\n\t */\r\n\tscale = 5;\r\n\r\n\t/**\r\n\t * a common css class\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tcssClass = 'qrcode';\r\n\r\n\t/**\r\n\t * SVG opacity\r\n\t *\r\n\t * @type {number|float}\r\n\t */\r\n\tsvgOpacity = 1.0;\r\n\r\n\t/**\r\n\t * anything between <defs>\r\n\t *\r\n\t * @see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/defs\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tsvgDefs = '';\r\n\r\n\t/**\r\n\t * @see https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/preserveAspectRatio\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tsvgPreserveAspectRatio = 'xMidYMid';\r\n\r\n\t/**\r\n\t * Whether to add an XML header line or not, e.g. to embed the SVG directly in HTML\r\n\t *\r\n\t * `<?xml version=\"1.0\" encoding=\"UTF-8\"?>`\r\n\t *\r\n\t * @type {boolean}\r\n\t */\r\n\tsvgAddXmlHeader = false;\r\n\r\n\t/**\r\n\t * Whether to use the SVG `fill` attributes\r\n\t *\r\n\t * If set to `true` (default), the `fill` attribute will be set with the module value for the `<path>` element's `$M_TYPE`.\r\n\t * When set to `false`, the module values map will be ignored and the QR Code may be styled via CSS.\r\n\t *\r\n\t * @see https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill\r\n\t *\r\n\t * @type {boolean}\r\n\t */\r\n\tsvgUseFillAttributes = true;\r\n\r\n\t/**\r\n\t * whether to connect the paths for the several module types to avoid weird glitches when using gradients etc.\r\n\t *\r\n\t * @see https://github.com/chillerlan/php-qrcode/issues/57\r\n\t *\r\n\t * @type {boolean}\r\n\t */\r\n\tconnectPaths = false;\r\n\r\n\t/**\r\n\t * specify which paths/patterns to exclude from connecting if $svgConnectPaths is set to true\r\n\t *\r\n\t * @type {number[]|int[]}\r\n\t */\r\n\texcludeFromConnect = [];\r\n\r\n\t/**\r\n\t * specify whether to draw the modules as filled circles\r\n\t *\r\n\t * a note for GDImage output:\r\n\t *\r\n\t * if QROptions::$scale is less or equal than 20, the image will be upscaled internally, then the modules will be drawn\r\n\t * using imagefilledellipse() and then scaled back to the expected size using IMG_BICUBIC which in turn produces\r\n\t * unexpected outcomes in combination with transparency - to avoid this, set scale to a value greater than 20.\r\n\t *\r\n\t * @see https://github.com/chillerlan/php-qrcode/issues/23\r\n\t * @see https://github.com/chillerlan/php-qrcode/discussions/122\r\n\t *\r\n\t * @type {boolean}\r\n\t */\r\n\tdrawCircularModules = false;\r\n\r\n\t/**\r\n\t * specifies the radius of the modules when $svgDrawCircularModules is set to true\r\n\t *\r\n\t * @type {number|float}\r\n\t * @protected\r\n\t */\r\n\t_circleRadius = 0.45;\r\n\r\n\t/**\r\n\t * specifies which module types to exclude when $svgDrawCircularModules is set to true\r\n\t *\r\n\t * @type {number[]|int[]}\r\n\t */\r\n\tkeepAsSquare = [];\r\n\r\n\t/**\r\n\t * toggle base64 or raw image data\r\n\t *\r\n\t * @type {boolean}\r\n\t */\r\n\toutputBase64 = true;\r\n\r\n\t/**\r\n\t * toggle background transparency\r\n\t *\r\n\t * if transparency is disabled, a background color should be specified to avoid unexpected outcomes\r\n\t *\r\n\t * @see QROptions.bgcolor\r\n\t *\r\n\t * @type {boolean}\r\n\t */\r\n\timageTransparent = true;\r\n\r\n\t/**\r\n\t * whether to draw the light (false) modules\r\n\t *\r\n\t * @type {boolean}\r\n\t */\r\n\tdrawLightModules = true;\r\n\r\n\t/**\r\n\t * Module values map\r\n\t *\r\n\t *   - HTML, IMAGICK: #ABCDEF, cssname, rgb(), rgba()...\r\n\t *   - IMAGE: [63, 127, 255] // R, G, B\r\n\t *\r\n\t * @type {Object.<number, *>|null}\r\n\t */\r\n\tmoduleValues = null;\r\n\r\n\t/**\r\n\t * Toggles logo space creation\r\n\t *\r\n\t * @type {boolean}\r\n\t */\r\n\taddLogoSpace = false;\r\n\r\n\t/**\r\n\t * width of the logo space\r\n\t *\r\n\t * @type {number|int|null}\r\n\t * @protected\r\n\t */\r\n\t_logoSpaceWidth = null;\r\n\r\n\t/**\r\n\t * height of the logo space\r\n\t *\r\n\t * @type {number|int|null}\r\n\t * @protected\r\n\t */\r\n\t_logoSpaceHeight = null;\r\n\r\n\t/**\r\n\t * optional horizontal start position of the logo space (top left corner)\r\n\t *\r\n\t * @type {number|int|null}\r\n\t * @protected\r\n\t */\r\n\t_logoSpaceStartX = null;\r\n\r\n\t/**\r\n\t * optional vertical start position of the logo space (top left corner)\r\n\t *\r\n\t * @type {number|int|null}\r\n\t * @protected\r\n\t */\r\n\t_logoSpaceStartY = null;\r\n\r\n\t/**\r\n\t * whether to return the markup as DOM element\r\n\t *\r\n\t * @type {boolean}\r\n\t */\r\n\treturnAsDomElement = true;\r\n\r\n\t/**\r\n\t * background color\r\n\t *\r\n\t * supported in:\r\n\t *\r\n\t * - OUTPUT_CANVAS\r\n\t *\r\n\t * @type {*|null}\r\n\t */\r\n\tbgcolor = null;\r\n\r\n\t/**\r\n\t * the canvas HTML element (canvas output only)\r\n\t *\r\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement\r\n\t *\r\n\t * @type {HTMLCanvasElement}\r\n\t */\r\n\tcanvasElement = null;\r\n\r\n\t/**\r\n\t * canvas image mime type for bas64/file output\r\n\t *\r\n\t * the value may be one of the following (depends on browser/engine):\r\n\t *\r\n\t * - png\r\n\t * - jpeg\r\n\t * - bmp\r\n\t * - webp\r\n\t *\r\n\t * the \"image/\" is prepended internally\r\n\t *\r\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL\r\n\t *\r\n\t * @type {string}\r\n\t * @protected\r\n\t */\r\n\t_canvasMimeType = 'image/png';\r\n\r\n\t/**\r\n\t * canvas image quality\r\n\t *\r\n\t *  \"A number between 0 and 1 indicating the image quality to be used when creating images\r\n\t *   using file formats that support lossy compression (such as image/jpeg or image/webp).\r\n\t *   A user agent will use its default quality value if this option is not specified,\r\n\t *   or if the number is outside the allowed range.\"\r\n\t *\r\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL\r\n\t *\r\n\t * @type {number|float}\r\n\t */\r\n\tcanvasImageQuality = 0.85;\r\n\r\n\t/**\r\n\t * because javascript is dumb, and we can't call getters and setters directly we have to do this silly workaround.\r\n\t * if your inherited options class uses magic getters and setters, add the relevant property names to this array\r\n\t * and call _fromIterable() afterwards:\r\n\t *\r\n\t *     constructor($options = null){\r\n\t *         super();\r\n\t *         this.__workaround__.push('myMagicProp');\r\n\t *         this._fromIterable($options)\r\n\t *     }\r\n\t *\r\n\t *\r\n\t *     let o = new MyExtendedOptions({myMagicProp: 'foo', ...});\r\n\t *\r\n\t * note; for some reason we need to add the constructor with a parent call in extended classes even without\r\n\t * the aforementioned workaround, otherwise the additional properties will not be recognized. wtfjs???\r\n\t *\r\n\t * @protected\r\n\t */\r\n\t__workaround__ = [\r\n\t\t'canvasMimeType',\r\n\t\t'circleRadius',\r\n\t\t'eccLevel',\r\n\t\t'logoSpaceHeight',\r\n\t\t'logoSpaceWidth',\r\n\t\t'logoSpaceStartX',\r\n\t\t'logoSpaceStartY',\r\n\t\t'maskPattern',\r\n\t\t'quietzoneSize',\r\n\t\t'version',\r\n\t\t'versionMin',\r\n\t\t'versionMax',\r\n\t];\r\n\r\n\t/**\r\n\t * @param {Object<{}>|null} $options\r\n\t */\r\n\tconstructor($options = null){\r\n\t\tthis._fromIterable($options);\r\n\t}\r\n\r\n\t/**\r\n\t * @param {Object<{}>} $options\r\n\t * @returns {void}\r\n\t * @protected\r\n\t */\r\n\t_fromIterable($options){\r\n\r\n\t\tif(Object.prototype.toString.call($options) !== '[object Object]'){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tObject.keys($options).forEach($property => {\r\n\t\t\tif(this.__workaround__.includes($property)){\r\n\t\t\t\tthis['_set_'+$property]($options[$property]);\r\n\t\t\t}\r\n\t\t\t// since Object.prototype.hasOwnProperty.call(this, $property) will cause issues with extended classes,\r\n\t\t\t// we'll just check if the property is defined. have i mentioned yet how much i loathe javascript?\r\n\t\t\telse if(this[$property] !== undefined){\r\n\t\t\t\tthis[$property] = $options[$property];\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * clamp min/max version number\r\n\t *\r\n\t * @param {number|int} $versionMin\r\n\t * @param {number|int} $versionMax\r\n\t *\r\n\t * @returns {void}\r\n\t *\r\n\t * @protected\r\n\t */\r\n\tsetMinMaxVersion($versionMin, $versionMax){\r\n\t\tlet $min = Math.max(1, Math.min(40, $versionMin));\r\n\t\tlet $max = Math.max(1, Math.min(40, $versionMax));\r\n\r\n\t\tthis._versionMin = Math.min($min, $max);\r\n\t\tthis._versionMax = Math.max($min, $max);\r\n\t}\r\n\r\n\t/**\r\n\t * sets the minimum version number\r\n\t *\r\n\t * @param {number|int} $versionMin\r\n\t *\r\n\t * @returns {void}\r\n\t * @protected\r\n\t */\r\n\t_set_versionMin($versionMin){\r\n\t\tthis.setMinMaxVersion($versionMin, this._versionMax);\r\n\t}\r\n\r\n\tset versionMin($versionMin){\r\n\t\tthis._set_versionMin($versionMin);\r\n\t}\r\n\r\n\tget versionMin(){\r\n\t\treturn this._versionMin;\r\n\t}\r\n\r\n\t/**\r\n\t * sets the maximum version number\r\n\t *\r\n\t * @param {number|int} $versionMax\r\n\t *\r\n\t * @returns {void}\r\n\t * @protected\r\n\t */\r\n\t_set_versionMax($versionMax){\r\n\t\tthis.setMinMaxVersion(this._versionMin, $versionMax);\r\n\t}\r\n\r\n\tset versionMax($versionMax){\r\n\t\tthis._set_versionMax($versionMax);\r\n\t}\r\n\r\n\tget versionMax(){\r\n\t\treturn this._versionMax;\r\n\t}\r\n\r\n\t/**\r\n\t * sets/clamps the version number\r\n\t *\r\n\t * @param {number|int} $version\r\n\t *\r\n\t * @returns {void}\r\n\t * @protected\r\n\t */\r\n\t_set_version($version){\r\n\t\tthis._version = $version !== VERSION_AUTO ? Math.max(1, Math.min(40, $version)) : VERSION_AUTO;\r\n\t}\r\n\r\n\tset version($version){\r\n\t\tthis._set_version($version);\r\n\t}\r\n\r\n\tget version(){\r\n\t\treturn this._version;\r\n\t}\r\n\r\n\t/**\r\n\t * sets the error correction level\r\n\t *\r\n\t * @param {number|int} $eccLevel\r\n\t *\r\n\t * @returns {void}\r\n\t * @throws QRCodeException\r\n\t * @protected\r\n\t */\r\n\t_set_eccLevel($eccLevel){\r\n\r\n\t\tif(![ECC_L, ECC_M, ECC_Q, ECC_H].includes($eccLevel)){\r\n\t\t\tthrow new QRCodeException(`Invalid error correct level: ${$eccLevel}`);\r\n\t\t}\r\n\r\n\t\tthis._eccLevel = $eccLevel;\r\n\t}\r\n\r\n\tset eccLevel($eccLevel){\r\n\t\tthis._set_eccLevel($eccLevel);\r\n\t}\r\n\r\n\tget eccLevel(){\r\n\t\treturn this._eccLevel;\r\n\t}\r\n\r\n\t/**\r\n\t * sets/clamps the mask pattern\r\n\t *\r\n\t * @param {number|int} $maskPattern\r\n\t *\r\n\t * @returns {void}\r\n\t * @protected\r\n\t */\r\n\t_set_maskPattern($maskPattern){\r\n\r\n\t\tif($maskPattern !== MASK_PATTERN_AUTO){\r\n\t\t\tthis._maskPattern = Math.max(0, Math.min(7, $maskPattern));\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tset maskPattern($maskPattern){\r\n\t\tthis._set_maskPattern($maskPattern);\r\n\t}\r\n\r\n\tget maskPattern(){\r\n\t\treturn this._maskPattern;\r\n\t}\r\n\r\n\t/**\r\n\t * sets/clamps the quiet zone size\r\n\t *\r\n\t * @param {number|int} $quietzoneSize\r\n\t *\r\n\t * @returns {void}\r\n\t * @protected\r\n\t */\r\n\t_set_quietzoneSize($quietzoneSize){\r\n\t\tthis._quietzoneSize = Math.max(0, Math.min($quietzoneSize, 75));\r\n\t}\r\n\r\n\tset quietzoneSize($quietzoneSize){\r\n\t\tthis._set_quietzoneSize($quietzoneSize) ;\r\n\t}\r\n\r\n\tget quietzoneSize(){\r\n\t\treturn this._quietzoneSize;\r\n\t}\r\n\r\n\t/**\r\n\t * clamp the logo space values between 0 and maximum length (177 modules at version 40)\r\n\t *\r\n\t * @param {number|int} $value\r\n\t *\r\n\t * @returns {number|int}\r\n\t * @protected\r\n\t */\r\n\tclampLogoSpaceValue($value){\r\n\t\t$value = PHPJS.intval($value);\r\n\r\n\t\treturn Math.max(0, Math.min(177, $value));\r\n\t}\r\n\r\n\t/**\r\n\t * clamp/set logo space width\r\n\t *\r\n\t * @param {number|int} $width\r\n\t *\r\n\t * @returns {void}\r\n\t * @protected\r\n\t */\r\n\t_set_logoSpaceWidth($width){\r\n\t\tthis._logoSpaceWidth = this.clampLogoSpaceValue($width);\r\n\t}\r\n\r\n\tset logoSpaceWidth($width){\r\n\t\tthis._set_logoSpaceWidth($width);\r\n\t}\r\n\r\n\tget logoSpaceWidth(){\r\n\t\treturn this._logoSpaceWidth;\r\n\t}\r\n\r\n\t/**\r\n\t * clamp/set logo space height\r\n\t *\r\n\t * @param {number|int} $height\r\n\t *\r\n\t * @returns {void}\r\n\t * @protected\r\n\t */\r\n\t_set_logoSpaceHeight($height){\r\n\t\tthis._logoSpaceHeight = this.clampLogoSpaceValue($height);\r\n\t}\r\n\r\n\tset logoSpaceHeight($height){\r\n\t\tthis._set_logoSpaceHeight($height);\r\n\t}\r\n\r\n\tget logoSpaceHeight(){\r\n\t\treturn this._logoSpaceHeight;\r\n\t}\r\n\r\n\t/**\r\n\t * clamp/set horizontal logo space start\r\n\t *\r\n\t * @param {number|int|null} $startX\r\n\t *\r\n\t * @returns {void}\r\n\t * @protected\r\n\t */\r\n\t_set_logoSpaceStartX($startX){\r\n\t\tthis._logoSpaceStartX = (typeof $startX === 'undefined' || $startX === null) ? null : this.clampLogoSpaceValue($startX);\r\n\t}\r\n\r\n\tset logoSpaceStartX($startX){\r\n\t\tthis._set_logoSpaceStartX($startX);\r\n\t}\r\n\r\n\tget logoSpaceStartX(){\r\n\t\treturn this._logoSpaceStartX;\r\n\t}\r\n\r\n\t/**\r\n\t * clamp/set vertical logo space start\r\n\t *\r\n\t * @param {number|int|null} $startY\r\n\t *\r\n\t * @returns {void}\r\n\t * @protected\r\n\t */\r\n\t_set_logoSpaceStartY($startY){\r\n\t\tthis._logoSpaceStartY = (typeof $startY === 'undefined' || $startY === null) ? null : this.clampLogoSpaceValue($startY);\r\n\t}\r\n\r\n\tset logoSpaceStartY($startY){\r\n\t\tthis._set_logoSpaceStartY($startY);\r\n\t}\r\n\r\n\tget logoSpaceStartY(){\r\n\t\treturn this._logoSpaceStartY;\r\n\t}\r\n\r\n\t/**\r\n\t * clamp/set SVG circle radius\r\n\t *\r\n\t * @param {number|float} $circleRadius\r\n\t *\r\n\t * @returns {void}\r\n\t * @protected\r\n\t */\r\n\t_set_circleRadius($circleRadius){\r\n\t\tthis._circleRadius = Math.max(0.1, Math.min(0.75, $circleRadius));\r\n\t}\r\n\r\n\tset circleRadius($circleRadius){\r\n\t\tthis._set_circleRadius($circleRadius);\r\n\t}\r\n\r\n\tget circleRadius(){\r\n\t\treturn this._circleRadius;\r\n\t}\r\n\r\n\t/**\r\n\t * set canvas image type\r\n\t *\r\n\t * @param {string} $canvasImageType\r\n\t *\r\n\t * @returns {void}\r\n\t * @protected\r\n\t */\r\n\t_set_canvasMimeType($canvasImageType){\r\n\t\t$canvasImageType = $canvasImageType.toLowerCase();\r\n\r\n\t\tif(!['bmp', 'jpeg', 'png', 'webp'].includes($canvasImageType)){\r\n\t\t\tthrow new QRCodeException(`Invalid canvas image type: ${$canvasImageType}`);\r\n\t\t}\r\n\r\n\t\tthis._canvasMimeType = `image/${$canvasImageType}`;\r\n\t}\r\n\r\n\tset canvasMimeType($canvasImageType){\r\n\t\tthis._set_canvasMimeType($canvasImageType);\r\n\t}\r\n\r\n\tget canvasMimeType(){\r\n\t\treturn this._canvasMimeType;\r\n\t}\r\n\r\n}\r\n","/**\r\n * @created      11.07.2022\r\n * @author       ZXing Authors\r\n * @author       smiley <smiley@chillerlan.net>\r\n * @copyright    2022 smiley\r\n * @license      Apache-2.0\r\n */\r\n\r\nimport PHPJS from './PHPJS.js';\r\nimport QRCodeException from '../QRCodeException.js';\r\nimport {PATTERNS} from './constants.js';\r\n\r\n/*\r\n * Penalty scores\r\n *\r\n * ISO/IEC 18004:2000 Section 8.8.1 - Table 24\r\n */\r\nconst PENALTY_N1 = 3;\r\nconst PENALTY_N2 = 3;\r\nconst PENALTY_N3 = 40;\r\nconst PENALTY_N4 = 10;\r\n\r\n\r\n/**\r\n * ISO/IEC 18004:2000 Section 8.8.1\r\n * ISO/IEC 18004:2000 Section 8.8.2 - Evaluation of masking results\r\n *\r\n * @see http://www.thonky.com/qr-code-tutorial/data-masking\r\n * @see https://github.com/zxing/zxing/blob/e9e2bd280bcaeabd59d0f955798384fe6c018a6c/core/src/main/java/com/google/zxing/qrcode/encoder/MaskUtil.java\r\n */\r\nexport default class MaskPattern{\r\n\r\n\t/**\r\n\t * The current mask pattern value (0-7)\r\n\t *\r\n\t * @type {number|int}\r\n\t * @private\r\n\t */\r\n\tmaskPattern;\r\n\r\n\t/**\r\n\t * MaskPattern constructor.\r\n\t *\r\n\t * @param {number|int} $maskPattern\r\n\t *\r\n\t * @throws QRCodeException\r\n\t */\r\n\tconstructor($maskPattern){\r\n\t\t$maskPattern = PHPJS.intval($maskPattern);\r\n\r\n\t\tif(($maskPattern & 0b111) !== $maskPattern){\r\n\t\t\tthrow new QRCodeException(`invalid mask pattern: \"${$maskPattern}\"`);\r\n\t\t}\r\n\r\n\t\tthis.maskPattern = $maskPattern;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the current mask pattern\r\n\t *\r\n\t * @returns {number|int}\r\n\t */\r\n\tgetPattern(){\r\n\t\treturn this.maskPattern;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a closure that applies the mask for the chosen mask pattern.\r\n\t *\r\n\t * Note that the diagram in section 6.8.1 is misleading since it indicates that i is column position\r\n\t * and j is row position. In fact, as the text says, i is row position and j is column position.\r\n\t *\r\n\t * @see https://www.thonky.com/qr-code-tutorial/mask-patterns\r\n\t * @see https://github.com/zxing/zxing/blob/e9e2bd280bcaeabd59d0f955798384fe6c018a6c/core/src/main/java/com/google/zxing/qrcode/decoder/DataMask.java#L32-L117\r\n\t *\r\n\t * @returns {Function}\r\n\t */\r\n\tgetMask(){\r\n\t\t// $x = column (width), $y = row (height)\r\n\t\treturn PHPJS.array_combine(PATTERNS, [\r\n\t\t\t($x, $y) => (($x + $y) % 2) === 0,\r\n\t\t\t($x, $y) => ($y % 2) === 0,\r\n\t\t\t($x, $y) => ($x % 3) === 0,\r\n\t\t\t($x, $y) => (($x + $y) % 3) === 0,\r\n\t\t\t($x, $y) => ((PHPJS.intval($y / 2) + PHPJS.intval($x / 3)) % 2) === 0,\r\n\t\t\t($x, $y) => ($x * $y) % 6 === 0,\r\n\t\t\t($x, $y) => (($x * $y) % 6) < 3,\r\n\t\t\t($x, $y) => (($x + $y + (($x * $y) % 3)) % 2) === 0,\r\n\t\t])[this.maskPattern];\r\n\t}\r\n\r\n\t/**\r\n\t * Evaluates the matrix of the given data interface and returns a new mask pattern instance for the best result\r\n\t *\r\n\t * @param {QRMatrix} $QRMatrix\r\n\t *\r\n\t * @returns {MaskPattern}\r\n\t */\r\n\tstatic getBestPattern($QRMatrix){\r\n\t\tlet $penalties = [];\r\n\t\tlet $size      = $QRMatrix.getSize();\r\n\r\n\t\tfor(let $pattern of PATTERNS){\r\n\t\t\tlet $penalty = 0;\r\n\t\t\tlet $mp      = new MaskPattern($pattern);\r\n\t\t\tlet $matrix  = PHPJS.clone($QRMatrix);\r\n\t\t\t// because js is fucking dumb, it can't even properly clone THAT ONE FUCKING ARRAY WITHOUT LEAVING REFERENCES\r\n\t\t\t$matrix._matrix = structuredClone($QRMatrix._matrix);\r\n\t\t\tlet $m = $matrix.setFormatInfo($mp).mask($mp).getMatrix(true);\r\n\r\n\t\t\tfor(let $level = 1; $level <= 4; $level++){\r\n\t\t\t\t$penalty += this['testRule' + $level]($m, $size, $size);\r\n\t\t\t}\r\n\r\n\t\t\t$penalties[$pattern] = PHPJS.intval($penalty);\r\n\t\t}\r\n\r\n\t\treturn new MaskPattern($penalties.indexOf(Math.min(...$penalties)));\r\n\t}\r\n\r\n\t/**\r\n\t * Apply mask penalty rule 1 and return the penalty. Find repetitive cells with the same color and\r\n\t * give penalty to them. Example: 00000 or 11111.\r\n\t *\r\n\t * @param {Array} $matrix\r\n\t * @param {number|int} $height\r\n\t * @param {number|int} $width\r\n\t *\r\n\t * @returns {number|int}\r\n\t */\r\n\tstatic testRule1($matrix, $height, $width){\r\n\t\tlet $penalty = 0;\r\n\r\n\t\t// horizontal\r\n\t\tfor(let $y = 0; $y < $height; $y++){\r\n\t\t\t$penalty += MaskPattern.applyRule1($matrix[$y]);\r\n\t\t}\r\n\r\n\t\t// vertical\r\n\t\tfor(let $x = 0; $x < $width; $x++){\r\n\t\t\t$penalty += MaskPattern.applyRule1($matrix.map(y => y[$x]));\r\n\t\t}\r\n\r\n\t\treturn $penalty;\r\n\t}\r\n\r\n\t/**\r\n\t * @param {Array} $rc\r\n\t *\r\n\t * @returns {number|int}\r\n\t * @private\r\n\t */\r\n\tstatic applyRule1($rc){\r\n\t\tlet $penalty         = 0;\r\n\t\tlet $numSameBitCells = 0;\r\n\t\tlet $prevBit         = null;\r\n\r\n\t\tfor(let $val of $rc){\r\n\r\n\t\t\tif($val === $prevBit){\r\n\t\t\t\t$numSameBitCells++;\r\n\t\t\t}\r\n\t\t\telse{\r\n\r\n\t\t\t\tif($numSameBitCells >= 5){\r\n\t\t\t\t\t$penalty += (PENALTY_N1 + $numSameBitCells - 5);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$numSameBitCells = 1;  // Include the cell itself.\r\n\t\t\t\t$prevBit         = $val;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif($numSameBitCells >= 5){\r\n\t\t\t$penalty += (PENALTY_N1 + $numSameBitCells - 5);\r\n\t\t}\r\n\r\n\t\treturn $penalty;\r\n\t}\r\n\r\n\t/**\r\n\t * Apply mask penalty rule 2 and return the penalty. Find 2x2 blocks with the same color and give\r\n\t * penalty to them. This is actually equivalent to the spec's rule, which is to find MxN blocks and give a\r\n\t * penalty proportional to (M-1)x(N-1), because this is the number of 2x2 blocks inside such a block.\r\n\t *\r\n\t * @param {Array} $matrix\r\n\t * @param {number|int} $height\r\n\t * @param {number|int} $width\r\n\t *\r\n\t * @returns {number|int}\r\n\t */\r\n\tstatic testRule2($matrix, $height, $width){\r\n\t\tlet $penalty = 0;\r\n\r\n\t\tfor(let $y = 0; $y < $height; $y++){\r\n\r\n\t\t\tif($y > $height - 2){\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tfor(let $x = 0; $x < $width; $x++){\r\n\r\n\t\t\t\tif($x > $width - 2){\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet $val = $matrix[$y][$x];\r\n\r\n\t\t\t\tif(\r\n\t\t\t\t\t$val === $matrix[$y][$x + 1]\r\n\t\t\t\t\t&& $val === $matrix[$y + 1][$x]\r\n\t\t\t\t\t&& $val === $matrix[$y + 1][$x + 1]\r\n\t\t\t\t){\r\n\t\t\t\t\t$penalty++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn PENALTY_N2 * $penalty;\r\n\t}\r\n\r\n\t/**\r\n\t * Apply mask penalty rule 3 and return the penalty. Find consecutive runs of 1:1:3:1:1:4\r\n\t * starting with black, or 4:1:1:3:1:1 starting with white, and give penalty to them.  If we\r\n\t * find patterns like 000010111010000, we give penalty once.\r\n\t *\r\n\t * @param {Array} $matrix\r\n\t * @param {number|int} $height\r\n\t * @param {number|int} $width\r\n\t *\r\n\t * @returns {number|int}\r\n\t */\r\n\tstatic testRule3($matrix, $height, $width){\r\n\t\tlet $penalties = 0;\r\n\r\n\t\tfor(let $y = 0; $y < $height; $y++){\r\n\t\t\tfor(let $x = 0; $x < $width; $x++){\r\n\r\n\t\t\t\tif(\r\n\t\t\t\t\t$x + 6 < $width\r\n\t\t\t\t\t&&  $matrix[$y][$x] === true\r\n\t\t\t\t\t&& !$matrix[$y][($x + 1)]\r\n\t\t\t\t\t&&  $matrix[$y][($x + 2)]\r\n\t\t\t\t\t&&  $matrix[$y][($x + 3)]\r\n\t\t\t\t\t&&  $matrix[$y][($x + 4)]\r\n\t\t\t\t\t&& !$matrix[$y][($x + 5)]\r\n\t\t\t\t\t&&  $matrix[$y][($x + 6)]\r\n\t\t\t\t\t&& (\r\n\t\t\t\t\t\tMaskPattern.isWhiteHorizontal($matrix, $width, $y, $x - 4, $x)\r\n\t\t\t\t\t\t|| MaskPattern.isWhiteHorizontal($matrix, $width, $y, $x + 7, $x + 11)\r\n\t\t\t\t\t)\r\n\t\t\t\t){\r\n\t\t\t\t\t$penalties++;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(\r\n\t\t\t\t\t$y + 6 < $height\r\n\t\t\t\t\t&&  $matrix[$y][$x] === true\r\n\t\t\t\t\t&& !$matrix[($y + 1)][$x]\r\n\t\t\t\t\t&&  $matrix[($y + 2)][$x]\r\n\t\t\t\t\t&&  $matrix[($y + 3)][$x]\r\n\t\t\t\t\t&&  $matrix[($y + 4)][$x]\r\n\t\t\t\t\t&& !$matrix[($y + 5)][$x]\r\n\t\t\t\t\t&&  $matrix[($y + 6)][$x]\r\n\t\t\t\t\t&& (\r\n\t\t\t\t\t\tMaskPattern.isWhiteVertical($matrix, $height, $x, $y - 4, $y)\r\n\t\t\t\t\t\t|| MaskPattern.isWhiteVertical($matrix, $height, $x, $y + 7, $y + 11)\r\n\t\t\t\t\t)\r\n\t\t\t\t){\r\n\t\t\t\t\t$penalties++;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn $penalties * PENALTY_N3;\r\n\t}\r\n\r\n\t/**\r\n\t * @param {Array} $matrix\r\n\t * @param {number|int} $width\r\n\t * @param {number|int} $y\r\n\t * @param {number|int} $from\r\n\t * @param {number|int} $to\r\n\t *\r\n\t * @returns {boolean}\r\n\t * @private\r\n\t */\r\n\tstatic isWhiteHorizontal($matrix, $width, $y, $from, $to){\r\n\r\n\t\tif($from < 0 || $width < $to){\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tfor(let $x = $from; $x < $to; $x++){\r\n\t\t\tif($matrix[$y][$x] === true){\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * @param {Array} $matrix\r\n\t * @param {number|int} $height\r\n\t * @param {number|int} $x\r\n\t * @param {number|int} $from\r\n\t * @param {number|int} $to\r\n\t *\r\n\t * @returns {boolean}\r\n\t * @private\r\n\t */\r\n\tstatic isWhiteVertical($matrix, $height, $x, $from, $to){\r\n\r\n\t\tif($from < 0 || $height < $to){\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tfor(let $y = $from; $y < $to; $y++){\r\n\t\t\tif($matrix[$y][$x] === true){\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Apply mask penalty rule 4 and return the penalty. Calculate the ratio of dark cells and give\r\n\t * penalty if the ratio is far from 50%. It gives 10 penalty for 5% distance.\r\n\t *\r\n\t * @param {Array} $matrix\r\n\t * @param {number|int} $height\r\n\t * @param {number|int} $width\r\n\t *\r\n\t * @returns {number|int}\r\n\t */\r\n\tstatic testRule4($matrix, $height, $width){\r\n\t\tlet $darkCells  = 0;\r\n\t\tlet $totalCells = $height * $width;\r\n\r\n\t\tfor(let $row of $matrix){\r\n\t\t\tfor(let $val of $row){\r\n\t\t\t\tif($val === true){\r\n\t\t\t\t\t$darkCells++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn PHPJS.intval((Math.abs($darkCells * 2 - $totalCells) * 10 / $totalCells)) * PENALTY_N4;\r\n\t}\r\n\r\n}\r\n","/**\r\n * @created      11.07.2022\r\n * @author       smiley <smiley@chillerlan.net>\r\n * @copyright    2022 smiley\r\n * @license      MIT\r\n */\r\n\r\nimport PHPJS from './PHPJS.js';\r\nimport QRCodeException from '../QRCodeException.js';\r\nimport {MODES} from './constants.js';\r\n\r\n/**\r\n * mode length bits for the version breakpoints 1-9, 10-26 and 27-40\r\n *\r\n * ISO/IEC 18004:2000 Table 3 - Number of bits in Character Count Indicator\r\n */\r\nconst MODE_LENGTH_BITS = PHPJS.array_combine(MODES, [\r\n\t[10, 12, 14], // Numeric\r\n\t[9, 11, 13],  // AlphaNum\r\n\t[8, 16, 16],  // Byte\r\n]);\r\n\r\n/**\r\n * ISO 18004:2006, 6.4.1, Tables 2 and 3\r\n */\r\nexport default class Mode{\r\n\r\n\t/**\r\n\t * returns the length bits for the version breakpoints 1-9, 10-26 and 27-40\r\n\t *\r\n\t * @param {number|int} $mode\r\n\t * @param {number|int} $version\r\n\t *\r\n\t * @returns {number|int}\r\n\t * @throws QRCodeException\r\n\t */\r\n\tstatic getLengthBitsForVersion($mode, $version){\r\n\r\n\t\tif(!MODE_LENGTH_BITS[$mode]){\r\n\t\t\tthrow new QRCodeException('invalid mode given');\r\n\t\t}\r\n\r\n\t\tlet $minVersion  = 0;\r\n\t\tlet $breakpoints = [9, 26, 40];\r\n\r\n\t\tfor(let $key = 0; $key < $breakpoints.length; $key++){\r\n\t\t\tlet $breakpoint = $breakpoints[$key];\r\n\r\n\t\t\tif($version > $minVersion && $version <= $breakpoint){\r\n\t\t\t\treturn MODE_LENGTH_BITS[$mode][$key];\r\n\t\t\t}\r\n\r\n\t\t\t$minVersion = $breakpoint;\r\n\t\t}\r\n\r\n\t\tthrow new QRCodeException('invalid version number: ' + $version);\r\n\t}\r\n\r\n\t/**\r\n\t * returns the array of length bits for the given mode\r\n\t *\r\n\t * @param {number|int} $mode\r\n\t */\r\n\tstatic getLengthBitsForMode($mode){\r\n\r\n\t\tif(PHPJS.isset(() => MODE_LENGTH_BITS[$mode])){\r\n\t\t\treturn MODE_LENGTH_BITS[$mode];\r\n\t\t}\r\n\r\n\t\tthrow new QRCodeException('invalid mode given');\r\n\t}\r\n\r\n}\r\n","import QRCodeException from '../QRCodeException.js';\r\n\r\nexport default class QRCodeDataException extends QRCodeException{\r\n\r\n}\r\n","/**\r\n * @created      14.07.2022\r\n * @author       smiley <smiley@chillerlan.net>\r\n * @copyright    2022 smiley\r\n * @license      MIT\r\n */\r\n\r\n/**\r\n * @interface\r\n */\r\nexport default class QRDataModeInterface{\r\n\r\n\t/**\r\n\t * returns the current data mode constant\r\n\t *\r\n\t * @inheritDoc\r\n\t *\r\n\t * @returns {number|int}\r\n\t * @abstract\r\n\t */\r\n\tgetDataMode(){}\r\n\r\n\t/**\r\n\t * retruns the length in bits of the data string\r\n\t *\r\n\t * @returns {number|int}\r\n\t * @abstract\r\n\t */\r\n\tgetLengthInBits(){}\r\n\r\n\t/**\r\n\t * writes the actual data string to the BitBuffer, uses the given version to determine the length bits\r\n\t *\r\n\t * @see QRData::writeBitBuffer()\r\n\t *\r\n\t * @param {BitBuffer} $bitBuffer\r\n\t * @param {number|int} $versionNumber\r\n\t *\r\n\t * @returns {void}\r\n\t * @abstract\r\n\t */\r\n\twrite($bitBuffer, $versionNumber){}\r\n\r\n\t/**\r\n\t * checks if the given string qualifies for the encoder module\r\n\t *\r\n\t * @param {string} $string\r\n\t *\r\n\t * @returns {boolean}\r\n\t * @abstract\r\n\t */\r\n\tstatic validateString($string){}\r\n\r\n}\r\n","/**\r\n * @created      11.07.2022\r\n * @author       smiley <smiley@chillerlan.net>\r\n * @copyright    2022 smiley\r\n * @license      MIT\r\n */\r\n\r\nimport Mode from '../Common/Mode.js';\r\nimport QRCodeDataException from './QRCodeDataException.js';\r\nimport QRDataModeInterface from './QRDataModeInterface.js';\r\n\r\n/**\r\n * @abstract\r\n */\r\nexport default class QRDataModeAbstract extends QRDataModeInterface{\r\n\r\n\t/**\r\n\t * the current data mode: Num, Alphanum, Kanji, Byte\r\n\t *\r\n\t * @type {number|int}\r\n\t * @abstract\r\n\t */\r\n\tdatamode;\r\n\r\n\t/**\r\n\t * The data to write\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tdata;\r\n\r\n\t/**\r\n\t * QRDataModeAbstract constructor.\r\n\t *\r\n\t * @param {string} $data\r\n\t *\r\n\t * @throws {QRCodeDataException}\r\n\t */\r\n\tconstructor($data){\r\n\t\tsuper(); // JS dum\r\n\r\n\t\tif(!this.constructor.validateString($data)){\r\n\t\t\tthrow new QRCodeDataException('invalid data');\r\n\t\t}\r\n\r\n\t\tthis.data = $data;\r\n\t}\r\n\r\n\t/**\r\n\t * returns the character count of the $data string\r\n\t *\r\n\t * @returns {number|int}\r\n\t * @protected\r\n\t */\r\n\tgetCharCount(){\r\n\t\treturn this.data.length;\r\n\t}\r\n\r\n\t/**\r\n\t * returns the current data mode constant\r\n\t *\r\n\t * @inheritDoc\r\n\t *\r\n\t * @returns {number|int}\r\n\t */\r\n\tgetDataMode(){\r\n\t\treturn this.datamode;\r\n\t}\r\n\r\n\t/**\r\n\t * @param {number|int} $versionNumber\r\n\t *\r\n\t * @returns {number|int}\r\n\t * @protected\r\n\t */\r\n\tgetLengthBitsForVersion($versionNumber){\r\n\t\treturn Mode.getLengthBitsForVersion(this.datamode, $versionNumber)\r\n\t}\r\n\r\n}\r\n","/**\r\n * @created      11.07.2022\r\n * @author       smiley <smiley@chillerlan.net>\r\n * @copyright    2022 smiley\r\n * @license      MIT\r\n */\r\n\r\nimport QRDataModeAbstract from './QRDataModeAbstract.js';\r\nimport {MODE_ALPHANUM} from '../Common/constants.js';\r\n\r\n/**\r\n * ISO/IEC 18004:2000 Table 5\r\n *\r\n * @type {Object<{}>}\r\n */\r\nconst CHAR_TO_ORD = {\r\n\t'0':  0, '1':  1, '2':  2, '3':  3, '4':  4, '5':  5, '6':  6, '7':  7,\r\n\t'8':  8, '9':  9, 'A': 10, 'B': 11, 'C': 12, 'D': 13, 'E': 14, 'F': 15,\r\n\t'G': 16, 'H': 17, 'I': 18, 'J': 19, 'K': 20, 'L': 21, 'M': 22, 'N': 23,\r\n\t'O': 24, 'P': 25, 'Q': 26, 'R': 27, 'S': 28, 'T': 29, 'U': 30, 'V': 31,\r\n\t'W': 32, 'X': 33, 'Y': 34, 'Z': 35, ' ': 36, '$': 37, '%': 38, '*': 39,\r\n\t'+': 40, '-': 41, '.': 42, '/': 43, ':': 44,\r\n};\r\n\r\n/**\r\n * Alphanumeric mode: 0 to 9, A to Z, space, $ % * + - . / :\r\n *\r\n * ISO/IEC 18004:2000 Section 8.3.3\r\n * ISO/IEC 18004:2000 Section 8.4.3\r\n */\r\nexport default class AlphaNum extends QRDataModeAbstract{\r\n\r\n\t/**\r\n\t * @inheritDoc\r\n\t */\r\n\tdatamode = MODE_ALPHANUM;\r\n\r\n\t/**\r\n\t * @inheritDoc\r\n\t */\r\n\tgetLengthInBits(){\r\n\t\treturn Math.ceil(this.getCharCount() * (11 / 2));\r\n\t}\r\n\r\n\t/**\r\n\t * @inheritDoc\r\n\t */\r\n\tstatic validateString($string){\r\n\r\n\t\tif(typeof $string !== 'string' || !$string.length){\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tlet $chars = $string.split('');\r\n\r\n\t\tfor(let $chr of $chars){\r\n\t\t\tif(typeof CHAR_TO_ORD[$chr] === 'undefined'){\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * @inheritDoc\r\n\t */\r\n\twrite($bitBuffer, $versionNumber){\r\n\t\tlet $len = this.getCharCount();\r\n\t\tlet $i;\r\n\r\n\t\t$bitBuffer\r\n\t\t\t.put(this.datamode, 4)\r\n\t\t\t.put($len, this.getLengthBitsForVersion($versionNumber))\r\n\t\t;\r\n\r\n\t\t// encode 2 characters in 11 bits\r\n\t\tfor($i = 0; $i + 1 < $len; $i += 2){\r\n\t\t\t$bitBuffer.put(CHAR_TO_ORD[this.data[$i]] * 45 + CHAR_TO_ORD[this.data[$i + 1]], 11);\r\n\t\t}\r\n\r\n\t\t// encode a remaining character in 6 bits\r\n\t\tif($i < $len){\r\n\t\t\t$bitBuffer.put(CHAR_TO_ORD[this.data[$i]], 6);\r\n\t\t}\r\n\t}\r\n\r\n}\r\n","/**\r\n * @created      11.07.2022\r\n * @author       smiley <smiley@chillerlan.net>\r\n * @copyright    2022 smiley\r\n * @license      MIT\r\n */\r\n\r\nimport QRDataModeAbstract from './QRDataModeAbstract.js';\r\nimport PHPJS from '../Common/PHPJS.js';\r\nimport {MODE_BYTE} from '../Common/constants.js';\r\n\r\n/**\r\n * Byte mode, ISO-8859-1 or UTF-8\r\n *\r\n * ISO/IEC 18004:2000 Section 8.3.4\r\n * ISO/IEC 18004:2000 Section 8.4.4\r\n */\r\nexport default class Byte extends QRDataModeAbstract{\r\n\r\n\t/**\r\n\t * @inheritDoc\r\n\t */\r\n\tdatamode = MODE_BYTE;\r\n\r\n\t/**\r\n\t * @inheritDoc\r\n\t */\r\n\tgetLengthInBits(){\r\n\t\treturn this.getCharCount() * 8;\r\n\t}\r\n\r\n\t/**\r\n\t * @inheritDoc\r\n\t */\r\n\tstatic validateString($string){\r\n\t\treturn typeof $string === 'string' && !!$string.length;\r\n\t}\r\n\r\n\t/**\r\n\t * @inheritDoc\r\n\t */\r\n\twrite($bitBuffer, $versionNumber){\r\n\t\tlet $len  = this.getCharCount();\r\n\t\tlet $data = this.data.split('');\r\n\r\n\t\t$bitBuffer\r\n\t\t\t.put(this.datamode, 4)\r\n\t\t\t.put($len, this.getLengthBitsForVersion($versionNumber))\r\n\t\t;\r\n\r\n\t\tlet $i = 0;\r\n\r\n\t\twhile($i < $len){\r\n\t\t\t$bitBuffer.put(PHPJS.ord($data[$i]), 8);\r\n\t\t\t$i++;\r\n\t\t}\r\n\r\n\t}\r\n\r\n}\r\n","/**\r\n * @created      11.07.2022\r\n * @author       smiley <smiley@chillerlan.net>\r\n * @copyright    2022 smiley\r\n * @license      MIT\r\n */\r\n\r\nimport QRDataModeAbstract from './QRDataModeAbstract.js';\r\nimport PHPJS from '../Common/PHPJS.js';\r\nimport {MODE_NUMBER} from '../Common/constants.js';\r\n\r\nconst NUMBER_TO_ORD = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9};\r\n\r\n/**\r\n * Numeric mode: decimal digits 0 to 9\r\n *\r\n * ISO/IEC 18004:2000 Section 8.3.2\r\n * ISO/IEC 18004:2000 Section 8.4.2\r\n */\r\nexport default class Numeric extends QRDataModeAbstract{\r\n\r\n\t/**\r\n\t * @inheritDoc\r\n\t */\r\n\tdatamode = MODE_NUMBER;\r\n\r\n\t/**\r\n\t * @inheritDoc\r\n\t */\r\n\tgetLengthInBits(){\r\n\t\treturn Math.ceil(this.getCharCount() * (10 / 3));\r\n\t}\r\n\r\n\t/**\r\n\t * @inheritDoc\r\n\t */\r\n\tstatic validateString($string){\r\n\r\n\t\tif(typeof $string !== 'string' || !$string.length){\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tlet $chars = $string.split('');\r\n\r\n\t\tfor(let $chr of $chars){\r\n\t\t\tif(typeof NUMBER_TO_ORD[$chr] === 'undefined'){\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * @inheritDoc\r\n\t */\r\n\twrite($bitBuffer, $versionNumber){\r\n\t\tlet $len = this.getCharCount();\r\n\r\n\t\t$bitBuffer\r\n\t\t\t.put(this.datamode, 4)\r\n\t\t\t.put($len, this.getLengthBitsForVersion($versionNumber))\r\n\t\t;\r\n\r\n\t\tlet $i = 0;\r\n\r\n\t\t// encode numeric triplets in 10 bits\r\n\t\twhile($i + 2 < $len){\r\n\t\t\t$bitBuffer.put(this.parseInt(this.data.substring($i, 3)), 10);\r\n\t\t\t$i += 3;\r\n\t\t}\r\n\r\n\t\tif($i < $len){\r\n\r\n\t\t\t// encode 2 remaining numbers in 7 bits\r\n\t\t\tif(($len - $i) === 2){\r\n\t\t\t\t$bitBuffer.put(this.parseInt(this.data.substring($i, 2)), 7);\r\n\t\t\t}\r\n\t\t\t// encode one remaining number in 4 bits\r\n\t\t\telse if(($len - $i) === 1){\r\n\t\t\t\t$bitBuffer.put(this.parseInt(this.data.substring($i, 1)), 4);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * get the code for the given numeric string\r\n\t *\r\n\t * @param {string} $string\r\n\t * @returns {number|int}\r\n\t * @private\r\n\t */\r\n\tparseInt($string){\r\n\t\tlet $num = 0;\r\n\t\tlet $chars = $string.split('');\r\n\r\n\t\tfor(let $chr of $chars){\r\n\t\t\t$num = $num * 10 + PHPJS.ord($chr) - 48;\r\n\t\t}\r\n\r\n\t\treturn $num;\r\n\t}\r\n\r\n}\r\n","/**\r\n * @created      11.07.2022\r\n * @author       smiley <smiley@chillerlan.net>\r\n * @copyright    2022 smiley\r\n * @license      MIT\r\n */\r\n\r\nimport PHPJS from './PHPJS.js';\r\n\r\n/**\r\n * Holds the raw binary data\r\n */\r\nexport default class BitBuffer{\r\n\r\n\t/**\r\n\t * The buffer content\r\n\t *\r\n\t * @type {number[]|int[]}\r\n\t */\r\n\tbuffer = [];\r\n\r\n\t/**\r\n\t * Length of the content (bits)\r\n\t *\r\n\t * @type {number|int}\r\n\t */\r\n\tlength = 0;\r\n\r\n\t/**\r\n\t * BitBuffer constructor.\r\n\t *\r\n\t * @param {number[]|int[]|null} $bytes\r\n\t */\r\n\tconstructor($bytes = null){\r\n\t\tthis.buffer = $bytes || [];\r\n\t\tthis.length = this.buffer.length;\r\n\t}\r\n\r\n\t/**\r\n\t * appends a sequence of bits\r\n\t *\r\n\t * @param {number|int} $bits\r\n\t * @param {number|int} $length\r\n\t *\r\n\t * @returns {BitBuffer}\r\n\t */\r\n\tput($bits, $length){\r\n\r\n\t\tfor(let $i = 0; $i < $length; $i++){\r\n\t\t\tthis.putBit((($bits >> ($length - $i - 1)) & 1) === 1);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * appends a single bit\r\n\t *\r\n\t * @param {boolean} $bit\r\n\t *\r\n\t * @returns {BitBuffer}\r\n\t */\r\n\tputBit($bit){\r\n\t\tlet $bufIndex = PHPJS.intval(Math.floor(this.length / 8));\r\n\r\n\t\tif(this.buffer.length <= $bufIndex){\r\n\t\t\tthis.buffer.push(0);\r\n\t\t}\r\n\r\n\t\tif($bit === true){\r\n\t\t\tthis.buffer[$bufIndex] |= (0x80 >> (this.length % 8));\r\n\t\t}\r\n\r\n\t\tthis.length++;\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * returns the current buffer length\r\n\t *\r\n\t * @returns {number|int}\r\n\t */\r\n\tgetLength(){\r\n\t\treturn this.length;\r\n\t}\r\n\r\n\t/**\r\n\t * returns the buffer content\r\n\t *\r\n\t * @returns {number[]|int[]}\r\n\t */\r\n\tgetBuffer(){\r\n\t\treturn this.buffer;\r\n\t}\r\n\r\n\t/**\r\n\t * clears the buffer\r\n\t *\r\n\t * @returns {BitBuffer}\r\n\t */\r\n\tclear(){\r\n\t\tthis.buffer    = [];\r\n\t\tthis.length    = 0;\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n}\r\n","/**\r\n * @created      11.07.2022\r\n * @author       smiley <smiley@chillerlan.net>\r\n * @copyright    2022 smiley\r\n * @license      MIT\r\n */\r\n\r\nimport QRCodeException from '../QRCodeException.js';\r\nimport PHPJS from './PHPJS.js';\r\nimport {ECC_H, ECC_L, ECC_M, ECC_Q} from './constants.js';\r\n\r\nconst ECC_LEVELS = [ECC_L, ECC_M, ECC_Q, ECC_H];\r\n\r\n/**\r\n * ISO/IEC 18004:2000 Tables 7-11 - Number of symbol characters and input data capacity for versions 1 to 40\r\n *\r\n * @type {number[][]|int[][]}\r\n *\r\n * @private\r\n */\r\nconst MAX_BITS = [\r\n\t//  version  => [L, M, Q, H]  // modules\r\n\t[    0,     0,     0,     0], // empty element, count starts at 1\r\n\t[  152,   128,   104,    72], //  21\r\n\t[  272,   224,   176,   128], //  25\r\n\t[  440,   352,   272,   208], //  29\r\n\t[  640,   512,   384,   288], //  33\r\n\t[  864,   688,   496,   368], //  37\r\n\t[ 1088,   864,   608,   480], //  41\r\n\t[ 1248,   992,   704,   528], //  45\r\n\t[ 1552,  1232,   880,   688], //  49\r\n\t[ 1856,  1456,  1056,   800], //  53\r\n\t[ 2192,  1728,  1232,   976], //  57\r\n\t[ 2592,  2032,  1440,  1120], //  61\r\n\t[ 2960,  2320,  1648,  1264], //  65\r\n\t[ 3424,  2672,  1952,  1440], //  69 NICE!\r\n\t[ 3688,  2920,  2088,  1576], //  73\r\n\t[ 4184,  3320,  2360,  1784], //  77\r\n\t[ 4712,  3624,  2600,  2024], //  81\r\n\t[ 5176,  4056,  2936,  2264], //  85\r\n\t[ 5768,  4504,  3176,  2504], //  89\r\n\t[ 6360,  5016,  3560,  2728], //  93\r\n\t[ 6888,  5352,  3880,  3080], //  97\r\n\t[ 7456,  5712,  4096,  3248], // 101\r\n\t[ 8048,  6256,  4544,  3536], // 105\r\n\t[ 8752,  6880,  4912,  3712], // 109\r\n\t[ 9392,  7312,  5312,  4112], // 113\r\n\t[10208,  8000,  5744,  4304], // 117\r\n\t[10960,  8496,  6032,  4768], // 121\r\n\t[11744,  9024,  6464,  5024], // 125\r\n\t[12248,  9544,  6968,  5288], // 129\r\n\t[13048, 10136,  7288,  5608], // 133\r\n\t[13880, 10984,  7880,  5960], // 137\r\n\t[14744, 11640,  8264,  6344], // 141\r\n\t[15640, 12328,  8920,  6760], // 145\r\n\t[16568, 13048,  9368,  7208], // 149\r\n\t[17528, 13800,  9848,  7688], // 153\r\n\t[18448, 14496, 10288,  7888], // 157\r\n\t[19472, 15312, 10832,  8432], // 161\r\n\t[20528, 15936, 11408,  8768], // 165\r\n\t[21616, 16816, 12016,  9136], // 169\r\n\t[22496, 17728, 12656,  9776], // 173\r\n\t[23648, 18672, 13328, 10208], // 177\r\n];\r\n\r\n/**\r\n * ISO/IEC 18004:2000 Section 8.9 - Format Information\r\n *\r\n * ECC level -> mask pattern\r\n *\r\n * @type {number[][]|int[][]}\r\n *\r\n * @private\r\n */\r\nconst FORMAT_PATTERN = [\r\n\t[ // L\r\n\t\t0b111011111000100,\r\n\t\t0b111001011110011,\r\n\t\t0b111110110101010,\r\n\t\t0b111100010011101,\r\n\t\t0b110011000101111,\r\n\t\t0b110001100011000,\r\n\t\t0b110110001000001,\r\n\t\t0b110100101110110,\r\n\t],\r\n\t[ // M\r\n\t\t0b101010000010010,\r\n\t\t0b101000100100101,\r\n\t\t0b101111001111100,\r\n\t\t0b101101101001011,\r\n\t\t0b100010111111001,\r\n\t\t0b100000011001110,\r\n\t\t0b100111110010111,\r\n\t\t0b100101010100000,\r\n\t],\r\n\t[ // Q\r\n\t\t0b011010101011111,\r\n\t\t0b011000001101000,\r\n\t\t0b011111100110001,\r\n\t\t0b011101000000110,\r\n\t\t0b010010010110100,\r\n\t\t0b010000110000011,\r\n\t\t0b010111011011010,\r\n\t\t0b010101111101101,\r\n\t],\r\n\t[ // H\r\n\t\t0b001011010001001,\r\n\t\t0b001001110111110,\r\n\t\t0b001110011100111,\r\n\t\t0b001100111010000,\r\n\t\t0b000011101100010,\r\n\t\t0b000001001010101,\r\n\t\t0b000110100001100,\r\n\t\t0b000100000111011,\r\n\t],\r\n];\r\n\r\n\r\n/**\r\n * This class encapsulates the four error correction levels defined by the QR code standard.\r\n */\r\nexport default class EccLevel{\r\n\r\n\t/**\r\n\t * The current ECC level value\r\n\t *\r\n\t * L: 0b01\r\n\t * M: 0b00\r\n\t * Q: 0b11\r\n\t * H: 0b10\r\n\t *\r\n\t * @type {number|int}\r\n\t * @private\r\n\t */\r\n\teccLevel;\r\n\r\n\t/**\r\n\t * @param {number|int} $eccLevel containing the two bits encoding a QR Code's error correction level\r\n\t *\r\n\t * @throws QRCodeException\r\n\t */\r\n\tconstructor($eccLevel){\r\n\r\n\t\tif((0b11 & $eccLevel) !== $eccLevel){\r\n\t\t\tthrow new QRCodeException('invalid ECC level');\r\n\t\t}\r\n\r\n\t\tthis.eccLevel = $eccLevel;\r\n\t}\r\n\r\n\t/**\r\n\t * returns the string representation of the current ECC level\r\n\t *\r\n\t * @returns {string}\r\n\t */\r\n\ttoString(){\r\n\t\treturn PHPJS.array_combine(ECC_LEVELS, ['L', 'M', 'Q', 'H'])[this.eccLevel];\r\n\t}\r\n\r\n\t/**\r\n\t * returns the current ECC level\r\n\t *\r\n\t * @returns {number|int}\r\n\t */\r\n\tgetLevel(){\r\n\t\treturn this.eccLevel;\r\n\t}\r\n\r\n\t/**\r\n\t * returns the ordinal value of the current ECC level\r\n\t *\r\n\t * references to the keys of the following tables:\r\n\t *\r\n\t * @see MAX_BITS\r\n\t * @see FORMAT_PATTERN\r\n\t * @see RSBLOCKS\r\n\t */\r\n\tgetOrdinal(){\r\n\t\treturn PHPJS.array_combine(ECC_LEVELS, [0, 1, 2, 3])[this.eccLevel];\r\n\t}\r\n\r\n\t/**\r\n\t * returns the format pattern for the given $eccLevel and $maskPattern\r\n\t *\r\n\t * @param {MaskPattern} $maskPattern\r\n\t *\r\n\t * @returns {number|int}\r\n\t */\r\n\tgetformatPattern($maskPattern){\r\n\t\treturn FORMAT_PATTERN[this.getOrdinal()][$maskPattern.getPattern()];\r\n\t}\r\n\r\n\t/**\r\n\t * @returns {number[]|int[]} an array with the max bit lengths for version 1-40 and the current ECC level\r\n\t */\r\n\tgetMaxBits(){\r\n\t\tlet $v = [];\r\n\t\tlet $c = this.getOrdinal();\r\n\r\n\t\tfor(let $k in MAX_BITS){\r\n\t\t\t$v.push(MAX_BITS[$k][$c]);\r\n\t\t}\r\n\r\n\t\treturn $v;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the maximum bit length for the given version and current ECC level\r\n\t *\r\n\t * @param {Version} $version\r\n\t *\r\n\t * @returns {number|int}\r\n\t */\r\n\tgetMaxBitsForVersion($version){\r\n\t\treturn MAX_BITS[$version.getVersionNumber()][this.getOrdinal()];\r\n\t}\r\n\r\n}\r\n","/**\r\n * @created      11.07.2022\r\n * @author       smiley <smiley@chillerlan.net>\r\n * @copyright    2022 smiley\r\n * @license      MIT\r\n */\r\n\r\nimport QRCodeException from '../QRCodeException.js';\r\n\r\n/**\r\n * ISO/IEC 18004:2000 Annex E, Table E.1 - Row/column coordinates of center module of Alignment Patterns\r\n *\r\n * version -> pattern\r\n *\r\n * @type {number[][]|int[][]}\r\n * @private\r\n */\r\nconst ALIGNMENT_PATTERN = [\r\n\tnull, // version count starts at 1\r\n\t[],\r\n\t[6, 18],\r\n\t[6, 22],\r\n\t[6, 26],\r\n\t[6, 30],\r\n\t[6, 34],\r\n\t[6, 22, 38],\r\n\t[6, 24, 42],\r\n\t[6, 26, 46],\r\n\t[6, 28, 50],\r\n\t[6, 30, 54],\r\n\t[6, 32, 58],\r\n\t[6, 34, 62],\r\n\t[6, 26, 46, 66],\r\n\t[6, 26, 48, 70],\r\n\t[6, 26, 50, 74],\r\n\t[6, 30, 54, 78],\r\n\t[6, 30, 56, 82],\r\n\t[6, 30, 58, 86],\r\n\t[6, 34, 62, 90],\r\n\t[6, 28, 50, 72,  94],\r\n\t[6, 26, 50, 74,  98],\r\n\t[6, 30, 54, 78, 102],\r\n\t[6, 28, 54, 80, 106],\r\n\t[6, 32, 58, 84, 110],\r\n\t[6, 30, 58, 86, 114],\r\n\t[6, 34, 62, 90, 118],\r\n\t[6, 26, 50, 74,  98, 122],\r\n\t[6, 30, 54, 78, 102, 126],\r\n\t[6, 26, 52, 78, 104, 130],\r\n\t[6, 30, 56, 82, 108, 134],\r\n\t[6, 34, 60, 86, 112, 138],\r\n\t[6, 30, 58, 86, 114, 142],\r\n\t[6, 34, 62, 90, 118, 146],\r\n\t[6, 30, 54, 78, 102, 126, 150],\r\n\t[6, 24, 50, 76, 102, 128, 154],\r\n\t[6, 28, 54, 80, 106, 132, 158],\r\n\t[6, 32, 58, 84, 110, 136, 162],\r\n\t[6, 26, 54, 82, 110, 138, 166],\r\n\t[6, 30, 58, 86, 114, 142, 170],\r\n];\r\n\r\n/**\r\n * ISO/IEC 18004:2000 Annex D, Table D.1 - Version information bit stream for each version\r\n *\r\n * no version pattern for QR Codes < 7\r\n *\r\n * @type {number[]|int[]}\r\n * @private\r\n */\r\nconst VERSION_PATTERN = [\r\n\tnull, null, null, null, null, null, null, // no version info patterns < version 7\r\n\t0b000111110010010100,\r\n\t0b001000010110111100,\r\n\t0b001001101010011001,\r\n\t0b001010010011010011,\r\n\t0b001011101111110110,\r\n\t0b001100011101100010,\r\n\t0b001101100001000111,\r\n\t0b001110011000001101,\r\n\t0b001111100100101000,\r\n\t0b010000101101111000,\r\n\t0b010001010001011101,\r\n\t0b010010101000010111,\r\n\t0b010011010100110010,\r\n\t0b010100100110100110,\r\n\t0b010101011010000011,\r\n\t0b010110100011001001,\r\n\t0b010111011111101100,\r\n\t0b011000111011000100,\r\n\t0b011001000111100001,\r\n\t0b011010111110101011,\r\n\t0b011011000010001110,\r\n\t0b011100110000011010,\r\n\t0b011101001100111111,\r\n\t0b011110110101110101,\r\n\t0b011111001001010000,\r\n\t0b100000100111010101,\r\n\t0b100001011011110000,\r\n\t0b100010100010111010,\r\n\t0b100011011110011111,\r\n\t0b100100101100001011,\r\n\t0b100101010000101110,\r\n\t0b100110101001100100,\r\n\t0b100111010101000001,\r\n\t0b101000110001101001,\r\n];\r\n\r\n/**\r\n * ISO/IEC 18004:2000 Tables 13-22\r\n *\r\n * @see http://www.thonky.com/qr-code-tutorial/error-correction-table\r\n *\r\n * @type {Array}\r\n * @private\r\n */\r\nconst RSBLOCKS = [\r\n\tnull, // version count starts at 1\r\n\t[[ 7, [[ 1,  19], [ 0,   0]]], [10, [[ 1, 16], [ 0,  0]]], [13, [[ 1, 13], [ 0,  0]]], [17, [[ 1,  9], [ 0,  0]]]],\r\n\t[[10, [[ 1,  34], [ 0,   0]]], [16, [[ 1, 28], [ 0,  0]]], [22, [[ 1, 22], [ 0,  0]]], [28, [[ 1, 16], [ 0,  0]]]],\r\n\t[[15, [[ 1,  55], [ 0,   0]]], [26, [[ 1, 44], [ 0,  0]]], [18, [[ 2, 17], [ 0,  0]]], [22, [[ 2, 13], [ 0,  0]]]],\r\n\t[[20, [[ 1,  80], [ 0,   0]]], [18, [[ 2, 32], [ 0,  0]]], [26, [[ 2, 24], [ 0,  0]]], [16, [[ 4,  9], [ 0,  0]]]],\r\n\t[[26, [[ 1, 108], [ 0,   0]]], [24, [[ 2, 43], [ 0,  0]]], [18, [[ 2, 15], [ 2, 16]]], [22, [[ 2, 11], [ 2, 12]]]],\r\n\t[[18, [[ 2,  68], [ 0,   0]]], [16, [[ 4, 27], [ 0,  0]]], [24, [[ 4, 19], [ 0,  0]]], [28, [[ 4, 15], [ 0,  0]]]],\r\n\t[[20, [[ 2,  78], [ 0,   0]]], [18, [[ 4, 31], [ 0,  0]]], [18, [[ 2, 14], [ 4, 15]]], [26, [[ 4, 13], [ 1, 14]]]],\r\n\t[[24, [[ 2,  97], [ 0,   0]]], [22, [[ 2, 38], [ 2, 39]]], [22, [[ 4, 18], [ 2, 19]]], [26, [[ 4, 14], [ 2, 15]]]],\r\n\t[[30, [[ 2, 116], [ 0,   0]]], [22, [[ 3, 36], [ 2, 37]]], [20, [[ 4, 16], [ 4, 17]]], [24, [[ 4, 12], [ 4, 13]]]],\r\n\t[[18, [[ 2,  68], [ 2,  69]]], [26, [[ 4, 43], [ 1, 44]]], [24, [[ 6, 19], [ 2, 20]]], [28, [[ 6, 15], [ 2, 16]]]],\r\n\t[[20, [[ 4,  81], [ 0,   0]]], [30, [[ 1, 50], [ 4, 51]]], [28, [[ 4, 22], [ 4, 23]]], [24, [[ 3, 12], [ 8, 13]]]],\r\n\t[[24, [[ 2,  92], [ 2,  93]]], [22, [[ 6, 36], [ 2, 37]]], [26, [[ 4, 20], [ 6, 21]]], [28, [[ 7, 14], [ 4, 15]]]],\r\n\t[[26, [[ 4, 107], [ 0,   0]]], [22, [[ 8, 37], [ 1, 38]]], [24, [[ 8, 20], [ 4, 21]]], [22, [[12, 11], [ 4, 12]]]],\r\n\t[[30, [[ 3, 115], [ 1, 116]]], [24, [[ 4, 40], [ 5, 41]]], [20, [[11, 16], [ 5, 17]]], [24, [[11, 12], [ 5, 13]]]],\r\n\t[[22, [[ 5,  87], [ 1,  88]]], [24, [[ 5, 41], [ 5, 42]]], [30, [[ 5, 24], [ 7, 25]]], [24, [[11, 12], [ 7, 13]]]],\r\n\t[[24, [[ 5,  98], [ 1,  99]]], [28, [[ 7, 45], [ 3, 46]]], [24, [[15, 19], [ 2, 20]]], [30, [[ 3, 15], [13, 16]]]],\r\n\t[[28, [[ 1, 107], [ 5, 108]]], [28, [[10, 46], [ 1, 47]]], [28, [[ 1, 22], [15, 23]]], [28, [[ 2, 14], [17, 15]]]],\r\n\t[[30, [[ 5, 120], [ 1, 121]]], [26, [[ 9, 43], [ 4, 44]]], [28, [[17, 22], [ 1, 23]]], [28, [[ 2, 14], [19, 15]]]],\r\n\t[[28, [[ 3, 113], [ 4, 114]]], [26, [[ 3, 44], [11, 45]]], [26, [[17, 21], [ 4, 22]]], [26, [[ 9, 13], [16, 14]]]],\r\n\t[[28, [[ 3, 107], [ 5, 108]]], [26, [[ 3, 41], [13, 42]]], [30, [[15, 24], [ 5, 25]]], [28, [[15, 15], [10, 16]]]],\r\n\t[[28, [[ 4, 116], [ 4, 117]]], [26, [[17, 42], [ 0,  0]]], [28, [[17, 22], [ 6, 23]]], [30, [[19, 16], [ 6, 17]]]],\r\n\t[[28, [[ 2, 111], [ 7, 112]]], [28, [[17, 46], [ 0,  0]]], [30, [[ 7, 24], [16, 25]]], [24, [[34, 13], [ 0,  0]]]],\r\n\t[[30, [[ 4, 121], [ 5, 122]]], [28, [[ 4, 47], [14, 48]]], [30, [[11, 24], [14, 25]]], [30, [[16, 15], [14, 16]]]],\r\n\t[[30, [[ 6, 117], [ 4, 118]]], [28, [[ 6, 45], [14, 46]]], [30, [[11, 24], [16, 25]]], [30, [[30, 16], [ 2, 17]]]],\r\n\t[[26, [[ 8, 106], [ 4, 107]]], [28, [[ 8, 47], [13, 48]]], [30, [[ 7, 24], [22, 25]]], [30, [[22, 15], [13, 16]]]],\r\n\t[[28, [[10, 114], [ 2, 115]]], [28, [[19, 46], [ 4, 47]]], [28, [[28, 22], [ 6, 23]]], [30, [[33, 16], [ 4, 17]]]],\r\n\t[[30, [[ 8, 122], [ 4, 123]]], [28, [[22, 45], [ 3, 46]]], [30, [[ 8, 23], [26, 24]]], [30, [[12, 15], [28, 16]]]],\r\n\t[[30, [[ 3, 117], [10, 118]]], [28, [[ 3, 45], [23, 46]]], [30, [[ 4, 24], [31, 25]]], [30, [[11, 15], [31, 16]]]],\r\n\t[[30, [[ 7, 116], [ 7, 117]]], [28, [[21, 45], [ 7, 46]]], [30, [[ 1, 23], [37, 24]]], [30, [[19, 15], [26, 16]]]],\r\n\t[[30, [[ 5, 115], [10, 116]]], [28, [[19, 47], [10, 48]]], [30, [[15, 24], [25, 25]]], [30, [[23, 15], [25, 16]]]],\r\n\t[[30, [[13, 115], [ 3, 116]]], [28, [[ 2, 46], [29, 47]]], [30, [[42, 24], [ 1, 25]]], [30, [[23, 15], [28, 16]]]],\r\n\t[[30, [[17, 115], [ 0,   0]]], [28, [[10, 46], [23, 47]]], [30, [[10, 24], [35, 25]]], [30, [[19, 15], [35, 16]]]],\r\n\t[[30, [[17, 115], [ 1, 116]]], [28, [[14, 46], [21, 47]]], [30, [[29, 24], [19, 25]]], [30, [[11, 15], [46, 16]]]],\r\n\t[[30, [[13, 115], [ 6, 116]]], [28, [[14, 46], [23, 47]]], [30, [[44, 24], [ 7, 25]]], [30, [[59, 16], [ 1, 17]]]],\r\n\t[[30, [[12, 121], [ 7, 122]]], [28, [[12, 47], [26, 48]]], [30, [[39, 24], [14, 25]]], [30, [[22, 15], [41, 16]]]],\r\n\t[[30, [[ 6, 121], [14, 122]]], [28, [[ 6, 47], [34, 48]]], [30, [[46, 24], [10, 25]]], [30, [[ 2, 15], [64, 16]]]],\r\n\t[[30, [[17, 122], [ 4, 123]]], [28, [[29, 46], [14, 47]]], [30, [[49, 24], [10, 25]]], [30, [[24, 15], [46, 16]]]],\r\n\t[[30, [[ 4, 122], [18, 123]]], [28, [[13, 46], [32, 47]]], [30, [[48, 24], [14, 25]]], [30, [[42, 15], [32, 16]]]],\r\n\t[[30, [[20, 117], [ 4, 118]]], [28, [[40, 47], [ 7, 48]]], [30, [[43, 24], [22, 25]]], [30, [[10, 15], [67, 16]]]],\r\n\t[[30, [[19, 118], [ 6, 119]]], [28, [[18, 47], [31, 48]]], [30, [[34, 24], [34, 25]]], [30, [[20, 15], [61, 16]]]],\r\n];\r\n\r\n/**\r\n * @type {number[]|int[]}\r\n */\r\nconst TOTAL_CODEWORDS = [\r\n\tnull, // version count starts at 1\r\n\t26,\r\n\t44,\r\n\t70,\r\n\t100,\r\n\t134,\r\n\t172,\r\n\t196,\r\n\t242,\r\n\t292,\r\n\t346,\r\n\t404,\r\n\t466,\r\n\t532,\r\n\t581,\r\n\t655,\r\n\t733,\r\n\t815,\r\n\t901,\r\n\t991,\r\n\t1085,\r\n\t1156,\r\n\t1258,\r\n\t1364,\r\n\t1474,\r\n\t1588,\r\n\t1706,\r\n\t1828,\r\n\t1921,\r\n\t2051,\r\n\t2185,\r\n\t2323,\r\n\t2465,\r\n\t2611,\r\n\t2761,\r\n\t2876,\r\n\t3034,\r\n\t3196,\r\n\t3362,\r\n\t3532,\r\n\t3706,\r\n];\r\n\r\n/**\r\n *\r\n */\r\nexport default class Version{\r\n\r\n\t/**\r\n\t * QR Code version number\r\n\t *\r\n\t * @type {number|int}\r\n\t * @private\r\n\t */\r\n\tversion;\r\n\r\n\t/**\r\n\t * Version constructor.\r\n\t *\r\n\t * @param {number|int} $version\r\n\t *\r\n\t * @throws QRCodeException\r\n\t */\r\n\tconstructor($version){\r\n\r\n\t\tif($version < 1 || $version > 40){\r\n\t\t\tthrow new QRCodeException('invalid version given');\r\n\t\t}\r\n\r\n\t\tthis.version = $version;\r\n\t}\r\n\r\n\t/**\r\n\t * returns the current version number as string\r\n\t *\r\n\t * @returns {string}\r\n\t */\r\n\ttoString(){\r\n\t\treturn this.version + '';\r\n\t}\r\n\r\n\t/**\r\n\t * returns the current version number\r\n\t *\r\n\t * @returns {number|int}\r\n\t */\r\n\tgetVersionNumber(){\r\n\t\treturn this.version;\r\n\t}\r\n\r\n\t/**\r\n\t * the matrix size for the given version\r\n\t *\r\n\t * @returns {number|int}\r\n\t */\r\n\tgetDimension(){\r\n\t\treturn this.version * 4 + 17;\r\n\t}\r\n\r\n\t/**\r\n\t * the version pattern for the given version\r\n\t *\r\n\t * @returns {number|int|null}\r\n\t */\r\n\tgetVersionPattern(){\r\n\t\treturn VERSION_PATTERN[this.version] ?? null;\r\n\t}\r\n\r\n\t/**\r\n\t * the alignment patterns for the current version\r\n\t *\r\n\t * @returns {number[]|int[]}\r\n\t */\r\n\tgetAlignmentPattern(){\r\n\t\treturn ALIGNMENT_PATTERN[this.version];\r\n\t}\r\n\r\n\t/**\r\n\t * returns ECC block information for the given $version and $eccLevel\r\n\t *\r\n\t * @param {EccLevel} $eccLevel\r\n\t *\r\n\t * @returns {Array}\r\n\t */\r\n\tgetRSBlocks($eccLevel){\r\n\t\treturn RSBLOCKS[this.version][$eccLevel.getOrdinal()];\r\n\t}\r\n\r\n\t/**\r\n\t * returns the maximum codewords for the current version\r\n\t *\r\n\t * @returns {number|int}\r\n\t */\r\n\tgetTotalCodewords(){\r\n\t\treturn TOTAL_CODEWORDS[this.version];\r\n\t}\r\n\r\n}\r\n","/**\r\n * @created      11.07.2022\r\n * @author       ZXing Authors\r\n * @author       smiley <smiley@chillerlan.net>\r\n * @copyright    2022 smiley\r\n * @license      Apache-2.0\r\n */\r\n\r\nimport QRCodeException from '../QRCodeException.js';\r\n/**\r\n * @type {number[]|int[]}\r\n * @private\r\n */\r\nconst logTable = [\r\n\tnull, // the first value is never returned, index starts at 1\r\n\t0, 1, 25, 2, 50, 26, 198, 3, 223, 51, 238, 27, 104, 199, 75,\r\n\t4, 100, 224, 14, 52, 141, 239, 129, 28, 193, 105, 248, 200, 8, 76, 113,\r\n\t5, 138, 101, 47, 225, 36, 15, 33, 53, 147, 142, 218, 240, 18, 130, 69,\r\n\t29, 181, 194, 125, 106, 39, 249, 185, 201, 154, 9, 120, 77, 228, 114, 166,\r\n\t6, 191, 139, 98, 102, 221, 48, 253, 226, 152, 37, 179, 16, 145, 34, 136,\r\n\t54, 208, 148, 206, 143, 150, 219, 189, 241, 210, 19, 92, 131, 56, 70, 64,\r\n\t30, 66, 182, 163, 195, 72, 126, 110, 107, 58, 40, 84, 250, 133, 186, 61,\r\n\t202, 94, 155, 159, 10, 21, 121, 43, 78, 212, 229, 172, 115, 243, 167, 87,\r\n\t7, 112, 192, 247, 140, 128, 99, 13, 103, 74, 222, 237, 49, 197, 254, 24,\r\n\t227, 165, 153, 119, 38, 184, 180, 124, 17, 68, 146, 217, 35, 32, 137, 46,\r\n\t55, 63, 209, 91, 149, 188, 207, 205, 144, 135, 151, 178, 220, 252, 190, 97,\r\n\t242, 86, 211, 171, 20, 42, 93, 158, 132, 60, 57, 83, 71, 109, 65, 162,\r\n\t31, 45, 67, 216, 183, 123, 164, 118, 196, 23, 73, 236, 127, 12, 111, 246,\r\n\t108, 161, 59, 82, 41, 157, 85, 170, 251, 96, 134, 177, 187, 204, 62, 90,\r\n\t203, 89, 95, 176, 156, 169, 160, 81, 11, 245, 22, 235, 122, 117, 44, 215,\r\n\t79, 174, 213, 233, 230, 231, 173, 232, 116, 214, 244, 234, 168, 80, 88, 175,\r\n];\r\n\r\n/**\r\n * @type {number[]|int[]}\r\n * @private\r\n */\r\nconst expTable = [\r\n\t1, 2, 4, 8, 16, 32, 64, 128, 29, 58, 116, 232, 205, 135, 19, 38,\r\n\t76, 152, 45, 90, 180, 117, 234, 201, 143, 3, 6, 12, 24, 48, 96, 192,\r\n\t157, 39, 78, 156, 37, 74, 148, 53, 106, 212, 181, 119, 238, 193, 159, 35,\r\n\t70, 140, 5, 10, 20, 40, 80, 160, 93, 186, 105, 210, 185, 111, 222, 161,\r\n\t95, 190, 97, 194, 153, 47, 94, 188, 101, 202, 137, 15, 30, 60, 120, 240,\r\n\t253, 231, 211, 187, 107, 214, 177, 127, 254, 225, 223, 163, 91, 182, 113, 226,\r\n\t217, 175, 67, 134, 17, 34, 68, 136, 13, 26, 52, 104, 208, 189, 103, 206,\r\n\t129, 31, 62, 124, 248, 237, 199, 147, 59, 118, 236, 197, 151, 51, 102, 204,\r\n\t133, 23, 46, 92, 184, 109, 218, 169, 79, 158, 33, 66, 132, 21, 42, 84,\r\n\t168, 77, 154, 41, 82, 164, 85, 170, 73, 146, 57, 114, 228, 213, 183, 115,\r\n\t230, 209, 191, 99, 198, 145, 63, 126, 252, 229, 215, 179, 123, 246, 241, 255,\r\n\t227, 219, 171, 75, 150, 49, 98, 196, 149, 55, 110, 220, 165, 87, 174, 65,\r\n\t130, 25, 50, 100, 200, 141, 7, 14, 28, 56, 112, 224, 221, 167, 83, 166,\r\n\t81, 162, 89, 178, 121, 242, 249, 239, 195, 155, 43, 86, 172, 69, 138, 9,\r\n\t18, 36, 72, 144, 61, 122, 244, 245, 247, 243, 251, 235, 203, 139, 11, 22,\r\n\t44, 88, 176, 125, 250, 233, 207, 131, 27, 54, 108, 216, 173, 71, 142, 1,\r\n];\r\n\r\n\r\n/**\r\n * This class contains utility methods for performing mathematical operations over\r\n * the Galois Fields. Operations use a given primitive polynomial in calculations.\r\n *\r\n * Throughout this package, elements of the GF are represented as an int\r\n * for convenience and speed (but at the cost of memory).\r\n *\r\n *\r\n * @author Sean Owen\r\n * @author David Olivier\r\n */\r\nexport default class GF256{\r\n\r\n\t/**\r\n\t * @param {number|int} $a\r\n\t *\r\n\t * @returns {number|int} 2 to the power of a in GF(size)\r\n\t */\r\n\tstatic exp($a){\r\n\r\n\t\tif($a < 0){\r\n\t\t\t$a += 255;\r\n\t\t}\r\n\t\telse if($a >= 256){\r\n\t\t\t$a -= 255;\r\n\t\t}\r\n\r\n\t\treturn expTable[$a];\r\n\t}\r\n\r\n\t/**\r\n\t * @param {number|int} $a\r\n\t *\r\n\t * @returns {number|int} base 2 log of a in GF(size)\r\n\t * @throws QRCodeException\r\n\t */\r\n\tstatic log($a){\r\n\r\n\t\tif($a < 1){\r\n\t\t\tthrow new QRCodeException('$a < 1');\r\n\t\t}\r\n\r\n\t\treturn logTable[$a];\r\n\t}\r\n\r\n\t/**\r\n\t * @param {number|int} $a\r\n\t * @param {number|int} $b\r\n\t *\r\n\t * @return int product of a and b in GF(size)\r\n\t */\r\n\tstatic multiply($a, $b){\r\n\r\n\t\tif($a === 0 || $b === 0){\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\treturn expTable[(logTable[$a] + logTable[$b]) % 255];\r\n\t}\r\n\r\n}\r\n","/**\r\n * @created      11.07.2022\r\n * @author       smiley <smiley@chillerlan.net>\r\n * @author       ZXing Authors\r\n * @copyright    2022 smiley\r\n * @license      Apache-2.0\r\n */\r\n\r\nimport QRCodeException from '../QRCodeException.js';\r\nimport PHPJS from './PHPJS.js';\r\nimport GF256 from './GF256.js';\r\n\r\n/**\r\n * Represents a polynomial whose coefficients are elements of a GF.\r\n * Instances of this class are immutable.\r\n *\r\n * Much credit is due to William Rucklidge since portions of this code are an indirect\r\n * port of his C++ Reed-Solomon implementation.\r\n *\r\n * @author Sean Owen\r\n */\r\nexport default class GenericGFPoly{\r\n\r\n\t/**\r\n\t * @type {number[]|int[]}\r\n\t * @private\r\n\t */\r\n\tcoefficients = [];\r\n\r\n\t/**\r\n\t * @param {number[]|int[]}    $coefficients array coefficients as ints representing elements of GF(size), arranged\r\n\t *                                 from most significant (highest-power term) coefficient to least significant\r\n\t * @param {number|int|null} $degree\r\n\t *\r\n\t * @throws QRCodeException if argument is null or empty, or if leading coefficient is 0 and this\r\n\t *                                            is not a constant polynomial (that is, it is not the monomial \"0\")\r\n\t */\r\n\tconstructor($coefficients, $degree = null){\r\n\t\t$degree ??= 0;\r\n\r\n\t\tif(!$coefficients || !$coefficients.length){\r\n\t\t\tthrow new QRCodeException('arg $coefficients is empty');\r\n\t\t}\r\n\r\n\t\tif($degree < 0){\r\n\t\t\tthrow new QRCodeException('negative degree');\r\n\t\t}\r\n\r\n\t\tlet $coefficientsLength = $coefficients.length;\r\n\r\n\t\t// Leading term must be non-zero for anything except the constant polynomial \"0\"\r\n\t\tlet $firstNonZero = 0;\r\n\r\n\t\twhile($firstNonZero < $coefficientsLength && $coefficients[$firstNonZero] === 0){\r\n\t\t\t$firstNonZero++;\r\n\t\t}\r\n\r\n\t\tif($firstNonZero === $coefficientsLength){\r\n\t\t\tthis.coefficients = [0];\r\n\t\t}\r\n\t\telse{\r\n\t\t\tthis.coefficients = PHPJS.array_fill($coefficientsLength - $firstNonZero + $degree, 0);\r\n\r\n\t\t\tfor(let $i = 0; $i < $coefficientsLength - $firstNonZero; $i++){\r\n\t\t\t\tthis.coefficients[$i] = $coefficients[$i + $firstNonZero];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @param {number|int} $degree\r\n\t *\r\n\t * @returns {number|int} $coefficient of x^degree term in this polynomial\r\n\t */\r\n\tgetCoefficient($degree){\r\n\t\treturn this.coefficients[this.coefficients.length - 1 - $degree];\r\n\t}\r\n\r\n\t/**\r\n\t * @returns {number[]|int[]}\r\n\t */\r\n\tgetCoefficients(){\r\n\t\treturn this.coefficients;\r\n\t}\r\n\r\n\t/**\r\n\t * @returns {number|int} $degree of this polynomial\r\n\t */\r\n\tgetDegree(){\r\n\t\treturn this.coefficients.length - 1;\r\n\t}\r\n\r\n\t/**\r\n\t * @returns {boolean} true if this polynomial is the monomial \"0\"\r\n\t */\r\n\tisZero(){\r\n\t\treturn this.coefficients[0] === 0;\r\n\t}\r\n\r\n\t/**\r\n\t * @param {GenericGFPoly} $other\r\n\t *\r\n\t * @returns {GenericGFPoly}\r\n\t */\r\n\tmultiply($other){\r\n\r\n\t\tif(this.isZero() || $other.isZero()){\r\n\t\t\treturn new GenericGFPoly([0]);\r\n\t\t}\r\n\r\n\t\tlet $product = PHPJS.array_fill(this.coefficients.length + $other.coefficients.length - 1, 0);\r\n\r\n\t\tfor(let $i = 0; $i < this.coefficients.length; $i++){\r\n\t\t\tfor(let $j = 0; $j < $other.coefficients.length; $j++){\r\n\t\t\t\t$product[$i + $j] ^= GF256.multiply(this.coefficients[$i], $other.coefficients[$j]);\r\n\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn new GenericGFPoly($product);\r\n\t}\r\n\r\n\t/**\r\n\t * @param {GenericGFPoly} $other\r\n\t *\r\n\t * @returns {GenericGFPoly}\r\n\t */\r\n\tmod($other){\r\n\r\n\t\tif(this.coefficients.length - $other.coefficients.length < 0){\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tlet $ratio = GF256.log(this.coefficients[0]) - GF256.log($other.coefficients[0]);\r\n\r\n\t\tfor(let $i = 0; $i < $other.coefficients.length; $i++){\r\n\t\t\tthis.coefficients[$i] ^= GF256.exp(GF256.log($other.coefficients[$i]) + $ratio);\r\n\t\t}\r\n\r\n\t\treturn (new GenericGFPoly(this.coefficients)).mod($other);\r\n\t}\r\n\r\n}\r\n","/**\r\n * @created      11.07.2022\r\n * @author       smiley <smiley@chillerlan.net>\r\n * @copyright    2022 smiley\r\n * @license      MIT\r\n */\r\n\r\nimport PHPJS from './PHPJS.js';\r\nimport GenericGFPoly from './GenericGFPoly.js';\r\nimport GF256 from './GF256.js';\r\n\r\n/**\r\n * ISO/IEC 18004:2000 Section 8.5 ff\r\n *\r\n * @see http://www.thonky.com/qr-code-tutorial/error-correction-coding\r\n */\r\nexport default class ReedSolomonEncoder{\r\n\r\n\t/**\r\n\t * @type {Object<{}>}\r\n\t * @private\r\n\t */\r\n\tinterleavedData;\r\n\r\n\t/**\r\n\t * @type {number|int}\r\n\t * @private\r\n\t */\r\n\tinterleavedDataIndex;\r\n\r\n\t/**\r\n\t * @type {Version} $version\r\n\t */\r\n\tversion;\r\n\r\n\t/**\r\n\t * @type {EccLevel} $eccLevel\r\n\t */\r\n\teccLevel;\r\n\r\n\t/**\r\n\t * @param {Version} $version\r\n\t * @param {EccLevel} $eccLevel\r\n\t */\r\n\tconstructor($version, $eccLevel){\r\n\t\tthis.version  = $version;\r\n\t\tthis.eccLevel = $eccLevel;\r\n\t}\r\n\r\n\t/**\r\n\t * ECC interleaving\r\n\t *\r\n\t * @param {BitBuffer} $bitBuffer\r\n\t *\r\n\t * @returns {Object<{}>}\r\n\t * @throws QRCodeException\r\n\t */\r\n\tinterleaveEcBytes($bitBuffer){\r\n\t\tlet $rsblockData     = this.version.getRSBlocks(this.eccLevel);\r\n\t\tlet $numEccCodewords = $rsblockData[0];\r\n\t\tlet $l1              = $rsblockData[1][0][0];\r\n\t\tlet $b1              = $rsblockData[1][0][1];\r\n\t\tlet $l2              = $rsblockData[1][1][0];\r\n\t\tlet $b2              = $rsblockData[1][1][1];\r\n\t\tlet $rsBlocks        = PHPJS.array_fill($l1, [$numEccCodewords + $b1, $b1]);\r\n\r\n\t\tif($l2 > 0){\r\n\t\t\t$rsBlocks = $rsBlocks.concat(PHPJS.array_fill($l2, [$numEccCodewords + $b2, $b2]));\r\n\t\t}\r\n\r\n\t\tlet $bitBufferData  = $bitBuffer.getBuffer();\r\n\t\tlet $dataBytes      = [];\r\n\t\tlet $ecBytes        = [];\r\n\t\tlet $maxDataBytes   = 0;\r\n\t\tlet $maxEcBytes     = 0;\r\n\t\tlet $dataByteOffset = 0;\r\n\r\n\t\tfor(let $key in $rsBlocks){\r\n\t\t\tlet $rsBlockTotal  = $rsBlocks[$key][0];\r\n\t\t\tlet $dataByteCount = $rsBlocks[$key][1];\r\n\r\n\t\t\t$dataBytes[$key]   = [];\r\n\r\n\t\t\tfor(let $i = 0; $i < $dataByteCount; $i++){\r\n\t\t\t\t$dataBytes[$key][$i] = $bitBufferData[$i + $dataByteOffset] & 0xff;\r\n\t\t\t}\r\n\r\n\t\t\tlet $ecByteCount = $rsBlockTotal - $dataByteCount;\r\n\t\t\t$ecBytes[$key]   = this.encode($dataBytes[$key], $ecByteCount);\r\n\t\t\t$maxDataBytes    = Math.max($maxDataBytes, $dataByteCount);\r\n\t\t\t$maxEcBytes      = Math.max($maxEcBytes, $ecByteCount);\r\n\t\t\t$dataByteOffset += $dataByteCount;\r\n\t\t}\r\n\r\n\t\tthis.interleavedData      = PHPJS.array_fill(this.version.getTotalCodewords(), 0);\r\n\t\tthis.interleavedDataIndex = 0;\r\n\t\tlet $numRsBlocks          = $l1 + $l2;\r\n\r\n\t\tthis.interleave($dataBytes, $maxDataBytes, $numRsBlocks);\r\n\t\tthis.interleave($ecBytes, $maxEcBytes, $numRsBlocks);\r\n\r\n\t\treturn this.interleavedData;\r\n\t}\r\n\r\n\t/**\r\n\t * @param {Array} $dataBytes\r\n\t * @param {number|int} $ecByteCount\r\n\t *\r\n\t * @returns {Object<{}>}\r\n\t * @private\r\n\t */\r\n\tencode($dataBytes, $ecByteCount){\r\n\t\tlet $rsPoly = new GenericGFPoly([1]);\r\n\r\n\t\tfor(let $i = 0; $i < $ecByteCount; $i++){\r\n\t\t\t$rsPoly = $rsPoly.multiply(new GenericGFPoly([1, GF256.exp($i)]));\r\n\t\t}\r\n\r\n\t\tlet $rsPolyDegree    = $rsPoly.getDegree();\r\n\t\tlet $modCoefficients = (new GenericGFPoly($dataBytes, $rsPolyDegree))\r\n\t\t\t.mod($rsPoly)\r\n\t\t\t.getCoefficients()\r\n\t\t;\r\n\r\n\t\tlet $ecBytes = PHPJS.array_fill($rsPolyDegree, 0);\r\n\t\tlet $count   = $modCoefficients.length - $rsPolyDegree;\r\n\r\n\t\tfor(let $i = 0; $i < $ecBytes.length; $i++){\r\n\t\t\tlet $modIndex = $i + $count;\r\n\t\t\t$ecBytes[$i]  = $modIndex >= 0 ? $modCoefficients[$modIndex] : 0;\r\n\t\t}\r\n\r\n\t\treturn $ecBytes;\r\n\t}\r\n\r\n\t/**\r\n\t * @param {Object<{}>} $byteArray\r\n\t * @param {number|int} $maxBytes\r\n\t * @param {number|int} $numRsBlocks\r\n\t *\r\n\t * @returns {void}\r\n\t * @private\r\n\t */\r\n\tinterleave($byteArray, $maxBytes, $numRsBlocks){\r\n\t\tfor(let $x = 0; $x < $maxBytes; $x++){\r\n\t\t\tfor(let $y = 0; $y < $numRsBlocks; $y++){\r\n\t\t\t\tif($x < $byteArray[$y].length){\r\n\t\t\t\t\tthis.interleavedData[this.interleavedDataIndex++] = $byteArray[$y][$x];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n}\r\n","/**\r\n * @created      11.07.2022\r\n * @author       smiley <smiley@chillerlan.net>\r\n * @copyright    2022 smiley\r\n * @license      MIT\r\n */\r\n\r\nimport PHPJS from '../Common/PHPJS.js';\r\nimport QRCodeDataException from './QRCodeDataException.js';\r\nimport ReedSolomonEncoder from '../Common/ReedSolomonEncoder.js';\r\nimport {\r\n\tM_ALIGNMENT, M_DARKMODULE, M_DATA, M_FINDER, M_FINDER_DOT, M_FORMAT,\r\n\tM_LOGO, M_NULL, M_QUIETZONE, M_SEPARATOR, M_TIMING, M_VERSION, IS_DARK,\r\n\tECC_H, MATRIX_NEIGHBOURS,\r\n} from '../Common/constants.js';\r\nimport MaskPattern from '../Common/MaskPattern.js';\r\n\r\n\r\n/**\r\n * Holds a numerical representation of the final QR Code;\r\n * maps the ECC coded binary data and applies the mask pattern\r\n *\r\n * @see http://www.thonky.com/qr-code-tutorial/format-version-information\r\n */\r\nexport default class QRMatrix{\r\n\r\n\t/**\r\n\t * the current ECC level\r\n\t *\r\n\t * @type {EccLevel}\r\n\t * @protected\r\n\t */\r\n\t_eccLevel;\r\n\r\n\t/**\r\n\t * a Version instance\r\n\t *\r\n\t * @type {Version}\r\n\t * @protected\r\n\t */\r\n\t_version;\r\n\r\n\t/**\r\n\t * the used mask pattern, set via QRMatrix::mask()\r\n\t *\r\n\t * @type {MaskPattern}\r\n\t * @protected\r\n\t */\r\n\t_maskPattern;\r\n\r\n\t/**\r\n\t * the size (side length) of the matrix, including quiet zone (if created)\r\n\t *\r\n\t * @type {number|int}\r\n\t * @protected\r\n\t */\r\n\tmoduleCount;\r\n\r\n\t/**\r\n\t * the actual matrix data array\r\n\t *\r\n\t * @type {number[][]|int[][]}\r\n\t * @protected\r\n\t */\r\n\t_matrix;\r\n\r\n\t/**\r\n\t * QRMatrix constructor.\r\n\t *\r\n\t * @param {Version} $version\r\n\t * @param {EccLevel} $eccLevel\r\n\t */\r\n\tconstructor($version, $eccLevel){\r\n\t\tthis._version     = $version;\r\n\t\tthis._eccLevel    = $eccLevel;\r\n\t\tthis.moduleCount  = this._version.getDimension();\r\n\t\tthis._matrix      = this.createMatrix(this.moduleCount, M_NULL);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a 2-dimensional array (square) of the given $size\r\n\t *\r\n\t * @param {number|int} $size\r\n\t * @param {number|int} $value\r\n\t *\r\n\t * @returns {Object<{}>}\r\n\t * @protected\r\n\t */\r\n\tcreateMatrix($size, $value){\r\n\t\treturn PHPJS.array_fill($size, PHPJS.array_fill($size, $value));\r\n\t}\r\n\r\n\t/**\r\n\t * shortcut to initialize the functional patterns\r\n\t *\r\n\t * @returns {QRMatrix}\r\n\t */\r\n\tinitFunctionalPatterns(){\r\n\t\treturn this\r\n\t\t\t.setFinderPattern()\r\n\t\t\t.setSeparators()\r\n\t\t\t.setAlignmentPattern()\r\n\t\t\t.setTimingPattern()\r\n\t\t\t.setDarkModule()\r\n\t\t\t.setVersionNumber()\r\n\t\t\t.setFormatInfo()\r\n\t\t;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the data matrix, returns a pure boolean representation if $boolean is set to true\r\n\t *\r\n\t * @param {boolean} $boolean\r\n\t *\r\n\t * @returns {number[][]|int[][]|boolean[][]}\r\n\t */\r\n\tgetMatrix($boolean = false){\r\n\r\n\t\tif(!$boolean){\r\n\t\t\treturn this._matrix;\r\n\t\t}\r\n\r\n\t\tlet $matrix = [];\r\n\r\n\t\tfor(let $y in this._matrix){\r\n\t\t\t$matrix[$y] = this._matrix[$y].map(this.isDark);\r\n\t\t}\r\n\r\n\t\treturn $matrix;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the current version instance\r\n\t *\r\n\t * @returns {Version}\r\n\t */\r\n\tgetVersion(){\r\n\t\treturn this._version;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the current ECC level instance\r\n\t *\r\n\t * @returns {EccLevel}\r\n\t */\r\n\tgetEccLevel(){\r\n\t\treturn this._eccLevel;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the current mask pattern instance\r\n\t *\r\n\t * @returns {MaskPattern}\r\n\t */\r\n\tgetMaskPattern(){\r\n\t\treturn this._maskPattern;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the absoulute size of the matrix, including quiet zone (after setting it).\r\n\t *\r\n\t * size = version * 4 + 17 [ + 2 * quietzone size]\r\n\t *\r\n\t * @returns {number|int}\r\n\t */\r\n\tgetSize(){\r\n\t\treturn this.moduleCount;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the value of the module at position [$x, $y] or -1 if the coordinate is outside of the matrix\r\n\t *\r\n\t * @param {number|int} $x\r\n\t * @param {number|int} $y\r\n\t *\r\n\t * @returns {number|int}\r\n\t */\r\n\tget($x, $y){\r\n\r\n\t\tif(!PHPJS.isset(() => this._matrix[$y][$x])){\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\treturn this._matrix[$y][$x];\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the $M_TYPE value for the module at position [$x, $y]\r\n\t *\r\n\t *   true  => $M_TYPE | 0x800\r\n\t *   false => $M_TYPE\r\n\t *\r\n\t * @param {number|int} $x\r\n\t * @param {number|int} $y\r\n\t * @param {boolean} $value\r\n\t * @param {number|int} $M_TYPE\r\n\t *\r\n\t * @returns {QRMatrix}\r\n\t */\r\n\tset($x, $y, $value, $M_TYPE){\r\n\r\n\t\tif(PHPJS.isset(() => this._matrix[$y][$x])){\r\n\t\t\t// we don't know whether the input is dark, so we remove the dark bit\r\n\t\t\t$M_TYPE &= ~IS_DARK\r\n\r\n\t\t\tif($value === true){\r\n\t\t\t\t$M_TYPE |= IS_DARK;\r\n\t\t\t}\r\n\r\n\t\t\tthis._matrix[$y][$x] = $M_TYPE;\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Fills an area of $width * $height, from the given starting point [$startX, $startY] (top left) with $value for $M_TYPE.\r\n\t *\r\n\t * @param {number|int} $startX\r\n\t * @param {number|int} $startY\r\n\t * @param {number|int} $width\r\n\t * @param {number|int} $height\r\n\t * @param {boolean} $value\r\n\t * @param {number|int} $M_TYPE\r\n\t *\r\n\t * @returns {QRMatrix}\r\n\t */\r\n\tsetArea($startX, $startY, $width, $height, $value, $M_TYPE){\r\n\r\n\t\tfor(let $y = $startY; $y < ($startY + $height); $y++){\r\n\t\t\tfor(let $x = $startX; $x < ($startX + $width); $x++){\r\n\t\t\t\tthis.set($x, $y, $value, $M_TYPE);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Flips the value of the module\r\n\t *\r\n\t * @param {number|int} $x\r\n\t * @param {number|int} $y\r\n\t *\r\n\t * @returns {QRMatrix}\r\n\t */\r\n\tflip($x, $y){\r\n\r\n\t\tif(PHPJS.isset(() => this._matrix[$y][$x])){\r\n\t\t\tthis._matrix[$y][$x] ^= IS_DARK;\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Checks whether a module is of the given $M_TYPE\r\n\t *\r\n\t *   true => $value & $M_TYPE === $M_TYPE\r\n\t *\r\n\t * Also, returns false if the given coordinates are out of range.\r\n\t *\r\n\t * @param {number|int} $x\r\n\t * @param {number|int} $y\r\n\t * @param {number|int} $M_TYPE\r\n\t *\r\n\t * @returns {boolean}\r\n\t */\r\n\tcheckType($x, $y, $M_TYPE){\r\n\r\n\t\tif(PHPJS.isset(() => this._matrix[$y][$x])){\r\n\t\t\treturn (this._matrix[$y][$x] & $M_TYPE) === $M_TYPE;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * Checks whether the module at ($x, $y) is in the given array of $M_TYPES,\r\n\t * returns true if a match is found, otherwise false.\r\n\t *\r\n\t * @param {number|int} $x\r\n\t * @param {number|int} $y\r\n\t * @param {number[]|int[]} $M_TYPES\r\n\t *\r\n\t * @returns {boolean}\r\n\t */\r\n\tcheckTypeIn($x, $y, $M_TYPES){\r\n\r\n\t\tfor(let $M_TYPE of $M_TYPES){\r\n\t\t\tif(this.checkType($x, $y, $M_TYPE)){\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * Checks whether a module is true (dark) or false (light)\r\n\t *\r\n\t * Also, returns false if the given coordinates are out of range.\r\n\t *\r\n\t *   true  => $value & 0x800 === 0x800\r\n\t *   false => $value & 0x800 === 0\r\n\t *\r\n\t * @param {number|int} $x\r\n\t * @param {number|int} $y\r\n\t *\r\n\t * @returns {boolean}\r\n\t */\r\n\tcheck($x, $y){\r\n\r\n\t\tif(PHPJS.isset(() => this._matrix[$y][$x])){\r\n\t\t\treturn this.isDark(this._matrix[$y][$x]);\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * Checks whether the given $M_TYPE is a dark value\r\n\t *\r\n\t * @param {number|int} $M_TYPE\r\n\t *\r\n\t * @returns {boolean}\r\n\t */\r\n\tisDark($M_TYPE){\r\n\t\treturn ($M_TYPE & IS_DARK) === IS_DARK;\r\n\t}\r\n\r\n\t/**\r\n\t * Checks the status neighbouring modules of the given module at ($x, $y) and returns a bitmask with the results.\r\n\t *\r\n\t * The 8 flags of the bitmask represent the status of each of the neighbouring fields,\r\n\t * starting with the lowest bit for top left, going clockwise:\r\n\t *\r\n\t *   0 1 2\r\n\t *   7 # 3\r\n\t *   6 5 4\r\n\t *\r\n\t * @param {number|int} $x\r\n\t * @param {number|int} $y\r\n\t * @param {number|int|null} $M_TYPE\r\n\t *\r\n\t * @returns {number|int}\r\n\t */\r\n\tcheckNeighbours($x, $y, $M_TYPE = null){\r\n\t\tlet $bits = 0;\r\n\r\n\t\tfor(let $bit in MATRIX_NEIGHBOURS){\r\n\t\t\tlet [$ix, $iy] = MATRIX_NEIGHBOURS[$bit];\r\n\t\t\t$ix += $x;\r\n\t\t\t$iy += $y;\r\n\r\n\t\t\t// check if the field is the same type\r\n\t\t\tif($M_TYPE !== null && !this.checkType($ix, $iy, $M_TYPE)){\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.checkType($ix, $iy, IS_DARK)){\r\n\t\t\t\t$bits |= $bit;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn $bits;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the \"dark module\", that is always on the same position 1x1px away from the bottom left finder\r\n\t *\r\n\t * 4 * version + 9 or moduleCount - 8\r\n\t *\r\n\t * @returns {QRMatrix}\r\n\t */\r\n\tsetDarkModule(){\r\n\t\tthis.set(8, this.moduleCount - 8, true, M_DARKMODULE);\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the 7x7 finder patterns in the corners top left/right and bottom left\r\n\t *\r\n\t * ISO/IEC 18004:2000 Section 7.3.2\r\n\t *\r\n\t * @returns {QRMatrix}\r\n\t */\r\n\tsetFinderPattern(){\r\n\r\n\t\tlet $pos = [\r\n\t\t\t[0, 0], // top left\r\n\t\t\t[this.moduleCount - 7, 0], // bottom left\r\n\t\t\t[0, this.moduleCount - 7], // top right\r\n\t\t];\r\n\r\n\t\tfor(let $c of $pos){\r\n\t\t\tthis\r\n\t\t\t\t.setArea( $c[0]     ,  $c[1]     , 7, 7, true,  M_FINDER)\r\n\t\t\t\t.setArea(($c[0] + 1), ($c[1] + 1), 5, 5, false, M_FINDER)\r\n\t\t\t\t.setArea(($c[0] + 2), ($c[1] + 2), 3, 3, true,  M_FINDER_DOT)\r\n\t\t\t;\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the separator lines around the finder patterns\r\n\t *\r\n\t * ISO/IEC 18004:2000 Section 7.3.3\r\n\t *\r\n\t * @returns {QRMatrix}\r\n\t */\r\n\tsetSeparators(){\r\n\r\n\t\tlet $h = [\r\n\t\t\t[7, 0],\r\n\t\t\t[this.moduleCount - 8, 0],\r\n\t\t\t[7, this.moduleCount - 8],\r\n\t\t];\r\n\r\n\t\tlet $v = [\r\n\t\t\t[7, 7],\r\n\t\t\t[this.moduleCount - 1, 7],\r\n\t\t\t[7, this.moduleCount - 8],\r\n\t\t];\r\n\r\n\t\tfor(let $c = 0; $c < 3; $c++){\r\n\t\t\tfor(let $i = 0; $i < 8; $i++){\r\n\t\t\t\tthis.set($h[$c][0], $h[$c][1] + $i, false, M_SEPARATOR);\r\n\t\t\t\tthis.set($v[$c][0] - $i, $v[$c][1], false, M_SEPARATOR);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the 5x5 alignment patterns\r\n\t *\r\n\t * ISO/IEC 18004:2000 Section 7.3.5\r\n\t *\r\n\t * @returns {QRMatrix}\r\n\t */\r\n\tsetAlignmentPattern(){\r\n\t\tlet $alignmentPattern = this._version.getAlignmentPattern();\r\n\r\n\t\tfor(let $y of $alignmentPattern){\r\n\t\t\tfor(let $x of $alignmentPattern){\r\n\r\n\t\t\t\t// skip existing patterns\r\n\t\t\t\tif(this._matrix[$y][$x] !== M_NULL){\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis\r\n\t\t\t\t\t.setArea(($x - 2), ($y - 2), 5, 5, true,  M_ALIGNMENT)\r\n\t\t\t\t\t.setArea(($x - 1), ($y - 1), 3, 3, false, M_ALIGNMENT)\r\n\t\t\t\t\t.set($x, $y, true, M_ALIGNMENT)\r\n\t\t\t\t;\r\n\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the timing pattern (h/v checkered line between the finder patterns)\r\n\t *\r\n\t * ISO/IEC 18004:2000 Section 7.3.4\r\n\t *\r\n\t * @returns {QRMatrix}\r\n\t */\r\n\tsetTimingPattern(){\r\n\r\n\t\tfor(let $i = 8; $i < this.moduleCount - 8; $i++){\r\n\r\n\t\t\tif(this._matrix[6][$i] !== M_NULL || this._matrix[$i][6] !== M_NULL){\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tlet $v = $i % 2 === 0;\r\n\r\n\t\t\tthis.set($i, 6, $v, M_TIMING); // h\r\n\t\t\tthis.set(6, $i, $v, M_TIMING); // v\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the version information, 2x 3x6 pixel\r\n\t *\r\n\t * ISO/IEC 18004:2000 Section 8.10\r\n\t *\r\n\t * @returns {QRMatrix}\r\n\t */\r\n\tsetVersionNumber(){\r\n\t\tlet $bits = this._version.getVersionPattern();\r\n\r\n\t\tif($bits !== null){\r\n\r\n\t\t\tfor(let $i = 0; $i < 18; $i++){\r\n\t\t\t\tlet $a = PHPJS.intval($i / 3);\r\n\t\t\t\tlet $b = $i % 3 + this.moduleCount - 8 - 3;\r\n\t\t\t\tlet $v = (($bits >> $i) & 1) === 1;\r\n\r\n\t\t\t\tthis.set($b, $a, $v, M_VERSION); // ne\r\n\t\t\t\tthis.set($a, $b, $v, M_VERSION); // sw\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the format info along the finder patterns. If no $maskPattern, all format info modules will be set to false.\r\n\t *\r\n\t * ISO/IEC 18004:2000 Section 8.9\r\n\t *\r\n\t * @param {MaskPattern|null} $maskPattern\r\n\t *\r\n\t * @returns {QRMatrix}\r\n\t */\r\n\tsetFormatInfo($maskPattern = null){\r\n\t\tthis._maskPattern = $maskPattern;\r\n\t\tlet $bits         = 0; // sets all format fields to false (test mode)\r\n\r\n\t\tif(this._maskPattern instanceof MaskPattern){\r\n\t\t\t$bits = this._eccLevel.getformatPattern(this._maskPattern);\r\n\t\t}\r\n\r\n\t\tfor(let $i = 0; $i < 15; $i++){\r\n\t\t\tlet $v = (($bits >> $i) & 1) === 1;\r\n\r\n\t\t\tif($i < 6){\r\n\t\t\t\tthis.set(8, $i, $v, M_FORMAT);\r\n\t\t\t}\r\n\t\t\telse if($i < 8){\r\n\t\t\t\tthis.set(8, $i + 1, $v, M_FORMAT);\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\tthis.set(8, this.moduleCount - 15 + $i, $v, M_FORMAT);\r\n\t\t\t}\r\n\r\n\t\t\tif($i < 8){\r\n\t\t\t\tthis.set(this.moduleCount - $i - 1, 8, $v, M_FORMAT);\r\n\t\t\t}\r\n\t\t\telse if($i < 9){\r\n\t\t\t\tthis.set(15 - $i, 8, $v, M_FORMAT);\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\tthis.set(15 - $i - 1, 8, $v, M_FORMAT);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the \"quiet zone\" of $size around the matrix\r\n\t *\r\n\t * ISO/IEC 18004:2000 Section 7.3.7\r\n\t *\r\n\t * @param {number|int} $quietZoneSize\r\n\t *\r\n\t * @returns {QRMatrix}\r\n\t * @throws {QRCodeDataException}\r\n\t */\r\n\tsetQuietZone($quietZoneSize){\r\n\r\n\t\t// early exit if there's nothing to add\r\n\t\tif($quietZoneSize < 1){\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tif(this._matrix[this.moduleCount - 1][this.moduleCount - 1] === M_NULL){\r\n\t\t\tthrow new QRCodeDataException('use only after writing data');\r\n\t\t}\r\n\r\n\t\t// create a matrix with the new size\r\n\t\tlet $newSize   = this.moduleCount + ($quietZoneSize * 2);\r\n\t\tlet $newMatrix = this.createMatrix($newSize, M_QUIETZONE);\r\n\r\n\t\t// copy over the current matrix\r\n\t\tfor(let $y = 0; $y < this.moduleCount; $y++){\r\n\t\t\tfor(let $x = 0; $x < this.moduleCount; $x++){\r\n\t\t\t\t$newMatrix[$y + $quietZoneSize][$x + $quietZoneSize] = this._matrix[$y][$x];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// set the new values\r\n\t\tthis.moduleCount = $newSize;\r\n\t\tthis._matrix     = $newMatrix;\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Rotates the matrix by 90 degrees clock wise\r\n\t *\r\n\t * @link https://stackoverflow.com/a/58668351\r\n\t */\r\n\trotate90(){\r\n\t\tthis._matrix = this._matrix[0].map((val, index) => this._matrix.map(row => row[index]).reverse())\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Inverts the values of the whole matrix\r\n\t *\r\n\t * ISO/IEC 18004:2015 Section 6.2 - Reflectance reversal\r\n\t *\r\n\t * @returns {QRMatrix}\r\n\t */\r\n\tinvert(){\r\n\r\n\t\tfor(let $y = 0; $y < this.moduleCount; $y++){\r\n\t\t\tfor(let $x = 0; $x < this.moduleCount; $x++){\r\n\r\n\t\t\t\t// skip null fields\r\n\t\t\t\tif(this.get($x, $y) === M_NULL){\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.flip($x, $y);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Clears a space of $width * $height in order to add a logo or text.\r\n\t * If no $height is given, the space will be assumed a square of $width.\r\n\t *\r\n\t * Additionally, the logo space can be positioned within the QR Code using $startX and $startY.\r\n\t * If either of these are null, the logo space will be centered in that direction.\r\n\t * ECC level \"H\" (30%) is required.\r\n\t *\r\n\t * The coordinates of $startX and $startY do not include the quiet zone:\r\n\t * [0, 0] is always the top left module of the top left finder pattern, negative values go into the quiet zone top and left.\r\n\t *\r\n\t * Please note that adding a logo space minimizes the error correction capacity of the QR Code and\r\n\t * created images may become unreadable, especially when printed with a chance to receive damage.\r\n\t * Please test thoroughly before using this feature in production.\r\n\t *\r\n\t * This method should be called from within an output module (after the matrix has been filled with data).\r\n\t * Note that there is no restiction on how many times this method could be called on the same matrix instance.\r\n\t *\r\n\t * @link https://github.com/chillerlan/php-qrcode/issues/52\r\n\t *\r\n\t * @param {number|int} $width\r\n\t * @param {number|int|null} $height\r\n\t * @param {number|int|null} $startX\r\n\t * @param {number|int|null} $startY\r\n\t *\r\n\t * @returns {QRMatrix}\r\n\t * @throws {QRCodeDataException}\r\n\t */\r\n\tsetLogoSpace($width, $height = null, $startX = null, $startY = null){\r\n\t\t$height ??= $width;\r\n\r\n\t\t// if width and height happen to be negative or 0 (default value), just return - nothing to do\r\n\t\tif($width <= 0 || $height <= 0){\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\t// for logos, we operate in ECC H (30%) only\r\n\t\tif(this._eccLevel.getLevel() !== ECC_H){\r\n\t\t\tthrow new QRCodeDataException('ECC level \"H\" required to add logo space');\r\n\t\t}\r\n\r\n\t\t// this.moduleCount includes the quiet zone (if created), we need the QR size here\r\n\t\tlet $dimension = this._version.getDimension();\r\n\r\n\t\t// throw if the size is negative or exceeds the qrcode size\r\n\t\tif($width > $dimension || $height > $dimension){\r\n\t\t\tthrow new QRCodeDataException('logo dimensions exceed matrix size');\r\n\t\t}\r\n\r\n\t\t// we need uneven sizes to center the logo space, adjust if needed\r\n\t\tif($startX === null && ($width % 2) === 0){\r\n\t\t\t$width++;\r\n\t\t}\r\n\r\n\t\tif($startY === null && ($height % 2) === 0){\r\n\t\t\t$height++;\r\n\t\t}\r\n\r\n\t\t// throw if the logo space exceeds the maximum error correction capacity\r\n\t\tif($width * $height > Math.floor($dimension * $dimension * 0.25)){\r\n\t\t\tthrow new QRCodeDataException('logo space exceeds the maximum error correction capacity');\r\n\t\t}\r\n\r\n\t\tlet $quietzone = ((this.moduleCount - $dimension) / 2);\r\n\t\tlet $end       = (this.moduleCount - $quietzone);\r\n\r\n\t\t// determine start coordinates\r\n\t\t$startX ??= (($dimension - $width) / 2);\r\n\t\t$startY ??= (($dimension - $height) / 2);\r\n\t\tlet $endX = ($quietzone + $startX + $width);\r\n\t\tlet $endY = ($quietzone + $startY + $height);\r\n\r\n\t\t// clear the space\r\n\t\tfor(let $y = ($quietzone + $startY); $y < $endY; $y++){\r\n\t\t\tfor(let $x = ($quietzone + $startX); $x < $endX; $x++){\r\n\t\t\t\t// out of bounds, skip\r\n\t\t\t\tif($x < $quietzone || $y < $quietzone ||$x >= $end || $y >= $end){\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.set($x, $y, false, M_LOGO);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Maps the interleaved binary $data on the matrix\r\n\t *\r\n\t * @param {BitBuffer} $bitBuffer\r\n\t *\r\n\t * @returns {QRMatrix}\r\n\t */\r\n\twriteCodewords($bitBuffer){\r\n\t\tlet $data = new ReedSolomonEncoder(this._version, this._eccLevel).interleaveEcBytes($bitBuffer);\r\n\t\tlet $byteCount = $data.length;\r\n\t\tlet $iByte = 0;\r\n\t\tlet $iBit = 7;\r\n\t\tlet $direction = true;\r\n\r\n\t\tfor(let $i = this.moduleCount - 1; $i > 0; $i -= 2){\r\n\r\n\t\t\t// skip vertical alignment pattern\r\n\t\t\tif($i === 6){\r\n\t\t\t\t$i--;\r\n\t\t\t}\r\n\r\n\t\t\tfor(let $count = 0; $count < this.moduleCount; $count++){\r\n\t\t\t\tlet $y = $count;\r\n\r\n\t\t\t\tif($direction){\r\n\t\t\t\t\t$y = (this.moduleCount - 1 - $count);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor(let $col = 0; $col < 2; $col++){\r\n\t\t\t\t\tlet $x = $i - $col;\r\n\r\n\t\t\t\t\t// skip functional patterns\r\n\t\t\t\t\tif(this._matrix[$y][$x] !== M_NULL){\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis._matrix[$y][$x] = M_DATA;\r\n\r\n\t\t\t\t\tif($iByte < $byteCount && (($data[$iByte] >> $iBit--) & 1) === 1){\r\n\t\t\t\t\t\tthis._matrix[$y][$x] |= IS_DARK;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif($iBit === -1){\r\n\t\t\t\t\t\t$iByte++;\r\n\t\t\t\t\t\t$iBit = 7;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t$direction = !$direction; // switch directions\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Applies/reverses the mask pattern\r\n\t *\r\n\t * ISO/IEC 18004:2000 Section 8.8.1\r\n\t *\r\n\t * @param {MaskPattern} $maskPattern\r\n\t * @returns {QRMatrix}\r\n\t */\r\n\tmask($maskPattern){\r\n\t\tthis._maskPattern = $maskPattern;\r\n\t\tlet $mask         = this._maskPattern.getMask();\r\n\r\n\t\tfor(let $y = 0; $y < this.moduleCount; $y++){\r\n\t\t\tfor(let $x = 0; $x < this.moduleCount; $x++){\r\n\t\t\t\tif((this._matrix[$y][$x] & M_DATA) === M_DATA && $mask($x, $y)){\r\n\t\t\t\t\tthis.flip($x, $y);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n}\r\n","/**\r\n * @created      11.07.2022\r\n * @author       smiley <smiley@chillerlan.net>\r\n * @copyright    2022 smiley\r\n * @license      MIT\r\n */\r\n\r\nimport BitBuffer from '../Common/BitBuffer.js';\r\nimport EccLevel from '../Common/EccLevel.js';\r\nimport Version from '../Common/Version.js';\r\nimport QRMatrix from './QRMatrix.js';\r\nimport Mode from '../Common/Mode.js';\r\nimport QRCodeDataException from './QRCodeDataException.js';\r\nimport {VERSION_AUTO} from '../Common/constants.js';\r\n\r\n/**\r\n * Processes the binary data and maps it on a matrix which is then being returned\r\n */\r\nexport default class QRData{\r\n\r\n\t/**\r\n\t * the options instance\r\n\t *\r\n\t * @type {QROptions}\r\n\t * @private\r\n\t */\r\n\toptions;\r\n\r\n\t/**\r\n\t * a BitBuffer instance\r\n\t *\r\n\t * @type {BitBuffer}\r\n\t * @private\r\n\t */\r\n\tbitBuffer;\r\n\r\n\t/**\r\n\t * an EccLevel instance\r\n\t *\r\n\t * @type {EccLevel}\r\n\t * @private\r\n\t */\r\n\teccLevel;\r\n\r\n\t/**\r\n\t * current QR Code version\r\n\t *\r\n\t * @type {Version}\r\n\t * @private\r\n\t */\r\n\tversion;\r\n\r\n\t/**\r\n\t * @type {QRDataModeAbstract[]|Array}\r\n\t * @private\r\n\t */\r\n\tdataSegments = [];\r\n\r\n\t/**\r\n\t * Max bits for the current ECC mode\r\n\t *\r\n\t * @type {number[]|int[]}\r\n\t * @private\r\n\t */\r\n\tmaxBitsForEcc;\r\n\r\n\t/**\r\n\t * QRData constructor.\r\n\t *\r\n\t * @param {QROptions}                 $options\r\n\t * @param {QRDataModeAbstract[]} $dataSegments\r\n\t */\r\n\tconstructor($options, $dataSegments = []){\r\n\t\tthis.options       = $options;\r\n\t\tthis.bitBuffer     = new BitBuffer;\r\n\t\tthis.eccLevel      = new EccLevel(this.options.eccLevel);\r\n\t\tthis.maxBitsForEcc = this.eccLevel.getMaxBits();\r\n\r\n\t\tthis.setData($dataSegments);\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the data string (internally called by the constructor)\r\n\t *\r\n\t * @param {QRDataModeAbstract[]} $dataSegments\r\n\t *\r\n\t * @returns {QRData}\r\n\t */\r\n\tsetData($dataSegments){\r\n\t\tthis.dataSegments = $dataSegments;\r\n\t\tthis.version      = this.getMinimumVersion();\r\n\r\n\t\tthis.bitBuffer.clear();\r\n\t\tthis.writeBitBuffer();\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * returns a fresh matrix object with the data written and masked with the given $maskPattern\r\n\t *\r\n\t * @returns {QRMatrix}\r\n\t */\r\n\twriteMatrix(){\r\n\t\treturn (new QRMatrix(this.version, this.eccLevel))\r\n\t\t\t.initFunctionalPatterns()\r\n\t\t\t.writeCodewords(this.bitBuffer)\r\n\t\t;\r\n\t}\r\n\r\n\t/**\r\n\t * estimates the total length of the several mode segments in order to guess the minimum version\r\n\t *\r\n\t * @returns {number|int}\r\n\t * @throws {QRCodeDataException}\r\n\t * @private\r\n\t */\r\n\testimateTotalBitLength(){\r\n\t\tlet $length = 0;\r\n\t\tlet $segment;\r\n\r\n\t\tfor($segment of this.dataSegments){\r\n\t\t\t// data length of the current segment\r\n\t\t\t$length += $segment.getLengthInBits();\r\n\t\t\t// +4 bits for the mode descriptor\r\n\t\t\t$length += 4;\r\n\t\t}\r\n\r\n\t\tlet $provisionalVersion = null;\r\n\r\n\t\tfor(let $version in this.maxBitsForEcc){\r\n\r\n\t\t\tif($version === 0){ // JS array/object weirdness vs php arrays...\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif($length <= this.maxBitsForEcc[$version]){\r\n\t\t\t\t$provisionalVersion = $version;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif($provisionalVersion !== null){\r\n\r\n\t\t\t// add character count indicator bits for the provisional version\r\n\t\t\tfor($segment of this.dataSegments){\r\n\t\t\t\t$length += Mode.getLengthBitsForVersion($segment.datamode, $provisionalVersion);\r\n\t\t\t}\r\n\r\n\t\t\t// it seems that in some cases the estimated total length is not 100% accurate,\r\n\t\t\t// so we substract 4 bits from the total when not in mixed mode\r\n\t\t\tif(this.dataSegments.length <= 1){\r\n\t\t\t\t$length -= 4;\r\n\t\t\t}\r\n\r\n\t\t\t// we've got a match!\r\n\t\t\t// or let's see if there's a higher version number available\r\n\t\t\tif($length <= this.maxBitsForEcc[$provisionalVersion] || this.maxBitsForEcc[($provisionalVersion + 1)]){\r\n\t\t\t\treturn $length;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tthrow new QRCodeDataException(`estimated data exceeds ${$length} bits`);\r\n\t}\r\n\r\n\t/**\r\n\t * returns the minimum version number for the given string\r\n\t *\r\n\t * @return {Version}\r\n\t * @throws {QRCodeDataException}\r\n\t * @private\r\n\t */\r\n\tgetMinimumVersion(){\r\n\r\n\t\tif(this.options.version !== VERSION_AUTO){\r\n\t\t\treturn new Version(this.options.version);\r\n\t\t}\r\n\r\n\t\tlet $total = this.estimateTotalBitLength();\r\n\r\n\t\t// guess the version number within the given range\r\n\t\tfor(let $version = this.options.versionMin; $version <= this.options.versionMax; $version++){\r\n\t\t\tif($total <= (this.maxBitsForEcc[$version] - 4)){\r\n\t\t\t\treturn new Version($version);\r\n\t\t\t}\r\n\t\t}\r\n\t\t/* c8 ignore next 2 */\r\n\t\t// it's almost impossible to run into this one as $this::estimateTotalBitLength() would throw first\r\n\t\tthrow new QRCodeDataException('failed to guess minimum version');\r\n\t}\r\n\r\n\t/**\r\n\t * creates a BitBuffer and writes the string data to it\r\n\t *\r\n\t * @returns {void}\r\n\t * @throws {QRCodeException} on data overflow\r\n\t * @private\r\n\t */\r\n\twriteBitBuffer(){\r\n\t\tlet $MAX_BITS = this.eccLevel.getMaxBitsForVersion(this.version);\r\n\r\n\t\tfor(let $i = 0; $i < this.dataSegments.length; $i++){\r\n\t\t\tthis.dataSegments[$i].write(this.bitBuffer, this.version.getVersionNumber());\r\n\t\t}\r\n\r\n\t\t// overflow, likely caused due to invalid version setting\r\n\t\tif(this.bitBuffer.getLength() > $MAX_BITS){\r\n\t\t\tthrow new QRCodeDataException(`code length overflow. (${this.bitBuffer.getLength()} > ${$MAX_BITS} bit)`);\r\n\t\t}\r\n\r\n\t\t// add terminator (ISO/IEC 18004:2000 Table 2)\r\n\t\tif(this.bitBuffer.getLength() + 4 <= $MAX_BITS){\r\n\t\t\tthis.bitBuffer.put(0, 4);\r\n\t\t}\r\n\r\n\t\t// Padding: ISO/IEC 18004:2000 8.4.9 Bit stream to codeword conversion\r\n\r\n\t\t// if the final codeword is not exactly 8 bits in length, it shall be made 8 bits long\r\n\t\t// by the addition of padding bits with binary value 0\r\n\t\twhile(this.bitBuffer.getLength() % 8 !== 0){\r\n\r\n\t\t\tif(this.bitBuffer.getLength() === $MAX_BITS){\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tthis.bitBuffer.putBit(false);\r\n\t\t}\r\n\r\n\t\t// The message bit stream shall then be extended to fill the data capacity of the symbol\r\n\t\t// corresponding to the Version and Error Correction Level, by the addition of the Pad\r\n\t\t// Codewords 11101100 and 00010001 alternately.\r\n\t\tlet $alternate = false;\r\n\r\n\t\twhile(this.bitBuffer.getLength() <= $MAX_BITS){\r\n\t\t\tthis.bitBuffer.put($alternate ? 0b00010001 : 0b11101100, 8);\r\n\t\t\t$alternate = !$alternate;\r\n\t\t}\r\n\r\n\t\t// In certain versions of symbol, it may be necessary to add 3, 4 or 7 Remainder Bits (all zeros)\r\n\t\t// to the end of the message in order exactly to fill the symbol capacity\r\n\t\twhile(this.bitBuffer.getLength() <= $MAX_BITS){\r\n\t\t\tthis.bitBuffer.putBit(false);\r\n\t\t}\r\n\r\n\t}\r\n\r\n}\r\n","/**\r\n * @created      11.07.2022\r\n * @author       smiley <smiley@chillerlan.net>\r\n * @copyright    2022 smiley\r\n * @license      MIT\r\n */\r\n\r\nimport QROptions from './QROptions.js';\r\nimport MaskPattern from './Common/MaskPattern.js';\r\nimport AlphaNum from './Data/AlphaNum.js';\r\nimport Byte from './Data/Byte.js';\r\nimport Numeric from './Data/Numeric.js';\r\nimport QRData from './Data/QRData.js';\r\nimport QRCodeOutputException from './Output/QRCodeOutputException.js';\r\nimport QROutputInterface from './Output/QROutputInterface.js';\r\nimport PHPJS from './Common/PHPJS.js';\r\nimport {\r\n\tMASK_PATTERN_AUTO, MODE_ALPHANUM, MODE_BYTE, MODE_NUMBER\r\n} from './Common/constants.js';\r\n\r\n/**\r\n * Map of data mode => interface (detection order)\r\n *\r\n * @type {string[]}\r\n */\r\nconst MODE_INTERFACES = PHPJS.array_combine([MODE_NUMBER, MODE_ALPHANUM, MODE_BYTE], [Numeric, AlphaNum, Byte]);\r\n\r\n/**\r\n * Turns a text string into a Model 2 QR Code\r\n *\r\n * @see https://github.com/chillerlan/php-qrcode\r\n * @see https://github.com/kazuhikoarase/qrcode-generator/tree/master/php\r\n * @see http://www.qrcode.com/en/codes/model12.html\r\n * @see https://www.swisseduc.ch/informatik/theoretische_informatik/qr_codes/docs/qr_standard.pdf\r\n * @see https://en.wikipedia.org/wiki/QR_code\r\n * @see http://www.thonky.com/qr-code-tutorial/\r\n * @see https://jamie.build/const\r\n */\r\nexport default class QRCode{\r\n\r\n\t/**\r\n\t * @type {QROptions}\r\n\t * @protected\r\n\t */\r\n\toptions;\r\n\r\n\t/**\r\n\t * @type {Array}\r\n\t * @protected\r\n\t */\r\n\tdataSegments = [];\r\n\r\n\t/**\r\n\t * QRCode constructor.\r\n\t *\r\n\t * @param {QROptions} $options\r\n\t */\r\n\tconstructor($options){\r\n\t\tthis.setOptions($options);\r\n\t}\r\n\r\n\t/**\r\n\t * Sets an options instance\r\n\t *\r\n\t * @param {QROptions} $options\r\n\t *\r\n\t * @returns {QRCode}\r\n\t */\r\n\tsetOptions($options){\r\n\r\n\t\tif(!($options instanceof QROptions)){\r\n\t\t\t$options = new QROptions();\r\n\t\t}\r\n\r\n\t\tthis.options = $options;\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Renders a QR Code for the given $data and QROptions\r\n\t *\r\n\t * @returns {*}\r\n\t */\r\n\trender($data = null, $file = null){\r\n\r\n\t\tif($data !== null){\r\n\t\t\tfor(let $mode in MODE_INTERFACES){\r\n\t\t\t\tlet $dataInterface = MODE_INTERFACES[$mode];\r\n\r\n\t\t\t\tif($dataInterface.validateString($data)){\r\n\t\t\t\t\tthis.addSegment(new $dataInterface($data));\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.renderMatrix(this.getQRMatrix(), $file);\r\n\t}\r\n\r\n\t/**\r\n\t * Renders a QR Code for the given QRMatrix and QROptions, saves $file optionally\r\n\t *\r\n\t * @param {QRMatrix} $QRMatrix\r\n\t * @param {string|null} $file\r\n\t * @returns {*}\r\n\t */\r\n\trenderMatrix($QRMatrix, $file = null){\r\n\t\treturn this.initOutputInterface($QRMatrix).dump($file ?? this.options.cachefile);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a QRMatrix object for the given $data and current QROptions\r\n\t *\r\n\t * @returns {QRMatrix}\r\n\t * @throws {QRCodeDataException}\r\n\t */\r\n\tgetQRMatrix(){\r\n\t\tlet $QRMatrix = new QRData(this.options, this.dataSegments).writeMatrix();\r\n\r\n\t\tlet $maskPattern = this.options.maskPattern === MASK_PATTERN_AUTO\r\n\t\t\t? MaskPattern.getBestPattern($QRMatrix)\r\n\t\t\t: new MaskPattern(this.options.maskPattern);\r\n\r\n\t\t$QRMatrix.setFormatInfo($maskPattern).mask($maskPattern);\r\n\r\n\t\treturn this.addMatrixModifications($QRMatrix);\r\n\t}\r\n\r\n\t/**\r\n\t * add matrix modifications after mask pattern evaluation and before handing over to output\r\n\t *\r\n\t * @param {QRMatrix} $QRMatrix\r\n\t * @returns {QRMatrix}\r\n\t * @protected\r\n\t */\r\n\taddMatrixModifications($QRMatrix){\r\n\r\n\t\tif(this.options.addLogoSpace){\r\n\t\t\t// check whether one of the dimensions was omitted\r\n\t\t\tlet $logoSpaceWidth  = (this.options.logoSpaceWidth ?? this.options.logoSpaceHeight ?? 0);\r\n\t\t\tlet $logoSpaceHeight = (this.options.logoSpaceHeight ?? $logoSpaceWidth);\r\n\r\n\t\t\t$QRMatrix.setLogoSpace(\r\n\t\t\t\t$logoSpaceWidth,\r\n\t\t\t\t$logoSpaceHeight,\r\n\t\t\t\tthis.options.logoSpaceStartX,\r\n\t\t\t\tthis.options.logoSpaceStartY\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif(this.options.addQuietzone){\r\n\t\t\t$QRMatrix.setQuietZone(this.options.quietzoneSize);\r\n\t\t}\r\n\r\n\t\treturn $QRMatrix;\r\n\t}\r\n\r\n\t/**\r\n\t * initializes a fresh built-in or custom QROutputInterface\r\n\t *\r\n\t * @param {QRMatrix} $QRMatrix\r\n\t * @returns {QROutputAbstract}\r\n\t * @throws {QRCodeOutputException}\r\n\t * @protected\r\n\t */\r\n\tinitOutputInterface($QRMatrix){\r\n\r\n\t\tif(typeof this.options.outputInterface !== 'function'){\r\n\t\t\tthrow new QRCodeOutputException('invalid output class');\r\n\t\t}\r\n\r\n\t\tlet $outputInterface = new this.options.outputInterface(this.options, $QRMatrix);\r\n\r\n\t\tif(!($outputInterface instanceof QROutputInterface)){\r\n\t\t\tthrow new QRCodeOutputException('output class does not implement QROutputInterface');\r\n\t\t}\r\n\r\n\t\treturn $outputInterface\r\n\t}\r\n\r\n\t/**\r\n\t * Adds a data segment\r\n\t *\r\n\t * ISO/IEC 18004:2000 8.3.6 - Mixing modes\r\n\t * ISO/IEC 18004:2000 Annex H - Optimisation of bit stream length\r\n\t *\r\n\t * @returns {QRCode}\r\n\t */\r\n\taddSegment($segment){\r\n\t\tthis.dataSegments.push($segment);\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Clears the data segments array\r\n\t *\r\n\t * @returns {QRCode}\r\n\t */\r\n\tclearSegments(){\r\n\t\tthis.dataSegments = [];\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Adds a numeric data segment\r\n\t *\r\n\t * ISO/IEC 18004:2000 8.3.2 - Numeric Mode\r\n\t *\r\n\t * @returns {QRCode}\r\n\t */\r\n\taddNumericSegment($data){\r\n\t\tthis.addSegment(new Numeric($data));\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Adds an alphanumeric data segment\r\n\t *\r\n\t * ISO/IEC 18004:2000 8.3.3 - Alphanumeric Mode\r\n\t *\r\n\t * @returns {QRCode}\r\n\t */\r\n\taddAlphaNumSegment($data){\r\n\t\tthis.addSegment(new AlphaNum($data));\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Adds an 8-bit byte data segment\r\n\t *\r\n\t * ISO/IEC 18004:2000 8.3.4 - 8-bit Byte Mode\r\n\t *\r\n\t * @returns {QRCode}\r\n\t */\r\n\taddByteSegment($data){\r\n\t\tthis.addSegment(new Byte($data));\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n}\r\n","/**\r\n * @created      11.07.2022\r\n * @author       smiley <smiley@chillerlan.net>\r\n * @copyright    2022 smiley\r\n * @license      MIT\r\n */\r\n\r\nimport QROutputAbstract from './QROutputAbstract.js';\r\nimport QRCodeOutputException from './QRCodeOutputException.js';\r\n\r\n/**\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API\r\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas\r\n */\r\nexport default class QRCanvas extends QROutputAbstract{\r\n\r\n\t/**\r\n\t * @inheritDoc\r\n\t */\r\n\tmimeType = 'image/png';\r\n\r\n\t/**\r\n\t * @type {HTMLCanvasElement}\r\n\t * @protected\r\n\t */\r\n\tcanvas;\r\n\r\n\t/**\r\n\t * @type {CanvasRenderingContext2D}\r\n\t * @protected\r\n\t */\r\n\tcontext;\r\n\r\n\t/**\r\n\t * @inheritDoc\r\n\t */\r\n\tstatic moduleValueIsValid($value){\r\n\r\n\t\tif(typeof $value !== 'string'){\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t$value = $value.trim();\r\n\r\n\t\t// hex notation\r\n\t\t// #rgb(a)\r\n\t\t// #rrggbb(aa)\r\n\t\tif($value.match(/^#([\\da-f]{3}){1,2}$|^#([\\da-f]{4}){1,2}$/i)){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t// css: hsla/rgba(...values)\r\n\t\tif($value.match(/^(hsla?|rgba?)\\([\\d .,%\\/]+\\)$/i)){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t// predefined css color\r\n\t\tif($value.match(/^[a-z]+$/i)){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * @inheritDoc\r\n\t */\r\n\tprepareModuleValue($value){\r\n\t\treturn $value.trim();\r\n\t}\r\n\r\n\t/**\r\n\t * @inheritDoc\r\n\t */\r\n\tgetDefaultModuleValue($isDark){\r\n\t\treturn $isDark ? '#000' : '#fff';\r\n\t}\r\n\r\n\t/**\r\n\t * @inheritDoc\r\n\t */\r\n\tgetOutputDimensions(){\r\n\t\treturn [this.length, this.length];\r\n\t}\r\n\r\n\t/**\r\n\t * @param {string} $data (ignored)\r\n\t * @param {string} $mime (ignored)\r\n\t * @returns {string}\r\n\t * @protected\r\n\t */\r\n\ttoBase64DataURI($data, $mime){\r\n\t\t$mime = this.options.canvasMimeType.trim();\r\n\r\n\t\tif($mime === ''){\r\n\t\t\t$mime = this.mimeType;\r\n\t\t}\r\n\r\n\t\treturn this.canvas.toDataURL($mime, this.options.canvasImageQuality)\r\n\t}\r\n\r\n\t/**\r\n\t * @inheritDoc\r\n\t *\r\n\t * @returns {HTMLCanvasElement|string|*}\r\n\t * @throws {QRCodeOutputException}\r\n\t */\r\n\tdump($file = null){\r\n\t\tthis.canvas = (this.options.canvasElement || document.createElement('canvas'));\r\n\r\n\t\t// @todo: test if instance check also works with nodejs canvas modules etc.\r\n\t\tif(!this.canvas || !(this.canvas instanceof HTMLCanvasElement) || (typeof this.canvas.getContext !== 'function')){\r\n\t\t\tthrow new QRCodeOutputException('invalid canvas element');\r\n\t\t}\r\n\r\n\t\tthis.drawImage();\r\n\r\n\t\tif(this.options.returnAsDomElement){\r\n\t\t\treturn this.canvas;\r\n\t\t}\r\n\r\n\t\tlet base64DataURI = this.toBase64DataURI();\r\n\t\tlet rawImage      = atob(base64DataURI.split(',')[1]);\r\n\r\n\t\tthis.saveToFile(rawImage, $file);\r\n\r\n\t\tif(this.options.outputBase64){\r\n\t\t\treturn base64DataURI;\r\n\t\t}\r\n\r\n\t\treturn rawImage;\r\n\t}\r\n\r\n\t/**\r\n\t * @returns {void}\r\n\t * @protected\r\n\t */\r\n\tdrawImage(){\r\n\t\tthis.canvas.width  = this.length;\r\n\t\tthis.canvas.height = this.length;\r\n\t\tthis.context       = this.canvas.getContext('2d', {alpha: this.options.imageTransparent})\r\n\r\n\t\tif(this.options.bgcolor && this.constructor.moduleValueIsValid(this.options.bgcolor)){\r\n\t\t\tthis.context.fillStyle = this.options.bgcolor;\r\n\t\t\tthis.context.fillRect(0, 0, this.length, this.length);\r\n\t\t}\r\n\r\n\t\tfor(let $y = 0; $y < this.moduleCount; $y++){\r\n\t\t\tfor(let $x = 0; $x < this.moduleCount; $x++){\r\n\t\t\t\tthis.module($x, $y, this.matrix.get($x, $y))\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * @returns {void}\r\n\t * @protected\r\n\t */\r\n\tmodule($x, $y, $M_TYPE){\r\n\r\n\t\tif(!this.options.drawLightModules && !this.matrix.check($x, $y)){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.context.fillStyle = this.getModuleValue($M_TYPE);\r\n\r\n\t\tif(this.options.drawCircularModules && !this.matrix.checkTypeIn($x, $y, this.options.keepAsSquare)){\r\n\t\t\tthis.context.beginPath();\r\n\r\n\t\t\tthis.context.arc(\r\n\t\t\t\t($x + 0.5) * this.scale,\r\n\t\t\t\t($y + 0.5) * this.scale,\r\n\t\t\t\t(this.options.circleRadius * this.scale),\r\n\t\t\t\t0,\r\n\t\t\t\t2 * Math.PI\r\n\t\t\t)\r\n\r\n\t\t\tthis.context.fill();\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.context.fillRect($x * this.scale, $y * this.scale, this.scale, this.scale);\r\n\t}\r\n\r\n}\r\n","/**\r\n * @created      11.07.2022\r\n * @author       smiley <smiley@chillerlan.net>\r\n * @copyright    2022 smiley\r\n * @license      MIT\r\n */\r\n\r\nimport QROutputAbstract from './QROutputAbstract.js';\r\n\r\n/**\r\n * Converts the matrix data into string types\r\n */\r\nexport default class QRStringText extends QROutputAbstract{\r\n\r\n\t/**\r\n\t * @inheritDoc\r\n\t */\r\n\tmimeType = 'text/plain';\r\n\r\n\t/**\r\n\t * @inheritDoc\r\n\t */\r\n\tgetDefaultModuleValue($isDark){\r\n\t\treturn $isDark ? '██' : '░░';\r\n\t}\r\n\r\n\t/**\r\n\t * @inheritDoc\r\n\t */\r\n\tprepareModuleValue($value){\r\n\t\treturn $value;\r\n\t}\r\n\r\n\t/**\r\n\t * @inheritDoc\r\n\t */\r\n\tstatic moduleValueIsValid($value){\r\n\t\treturn typeof $value === 'string';\r\n\t}\r\n\r\n\t/**\r\n\t * @inheritDoc\r\n\t */\r\n\tdump($file){\r\n\t\tlet $str = [];\r\n\r\n\t\tfor(let $y = 0; $y < this.moduleCount; $y++){\r\n\t\t\tlet $row = [];\r\n\r\n\t\t\tfor(let $x = 0; $x < this.moduleCount; $x++){\r\n\t\t\t\t$row.push(this.moduleValues[this.matrix.get($x, $y)]);\r\n\t\t\t}\r\n\r\n\t\t\t$str.push($row.join(''));\r\n\t\t}\r\n\r\n\t\tlet $data = $str.join(this.options.eol);\r\n\r\n\t\tthis.saveToFile($data, $file);\r\n\r\n\t\treturn $data;\r\n\t}\r\n\r\n\t/**\r\n\t *\r\n\t * @param {string} $str\r\n\t * @param {number|int} $color\r\n\t * @param {boolean} $background\r\n\t * @returns {string}\r\n\t */\r\n\tstatic ansi8($str, $color, $background = null){\r\n\t\t$color = Math.max(0, Math.min($color, 255));\r\n\r\n\t\treturn `\\x1b[${($background === true ? 48 : 38)};5;${$color}m${$str}\\x1b[0m`;\r\n\t}\r\n\r\n}\r\n","/**\r\n * @created      11.07.2022\r\n * @author       smiley <smiley@chillerlan.net>\r\n * @copyright    2022 smiley\r\n * @license      MIT\r\n */\r\n\r\nimport QROutputAbstract from './QROutputAbstract.js';\r\nimport PHPJS from '../Common/PHPJS.js';\r\nimport {LAYERNAMES} from '../Common/constants.js';\r\n\r\n/**\r\n * Converts the matrix data into string types\r\n */\r\nexport default class QRStringJSON extends QROutputAbstract{\r\n\r\n\t/**\r\n\t * @inheritDoc\r\n\t */\r\n\tmimeType = 'application/json';\r\n\r\n\t/**\r\n\t * the json schema\r\n\t *\r\n\t * @type {string}\r\n\t * @protected\r\n\t */\r\n\tschema = 'https://raw.githubusercontent.com/chillerlan/php-qrcode/main/src/Output/qrcode.schema.json';\r\n\r\n\t/**\r\n\t * @inheritDoc\r\n\t */\r\n\tdump($file){\r\n\t\tlet [width, height] = this.getOutputDimensions();\r\n\t\tlet version   = this.matrix.getVersion();\r\n\t\tlet dimension = version.getDimension();\r\n\r\n\r\n\t\tlet $json = {\r\n\t\t\t$schema: this.schema,\r\n\t\t\tqrcode: {\r\n\t\t\t\tversion: version.getVersionNumber(),\r\n\t\t\t\teccLevel: this.matrix.getEccLevel().toString(),\r\n\t\t\t\tmatrix: {\r\n\t\t\t\t\tsize: dimension,\r\n\t\t\t\t\tquietzoneSize: PHPJS.intval((this.moduleCount - dimension) / 2),\r\n\t\t\t\t\tmaskPattern: this.matrix.getMaskPattern().getPattern(),\r\n\t\t\t\t\twidth: width,\r\n\t\t\t\t\theight: height,\r\n\t\t\t\t\trows: [],\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tlet matrix = this.matrix.getMatrix();\r\n\r\n\t\tfor(let y in matrix){\r\n\t\t\tlet matrixRow = this.row(y, matrix[y]);\r\n\r\n\t\t\tif(matrixRow !== null){\r\n\t\t\t\t$json.qrcode.matrix.rows.push(matrixRow);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet $data = JSON.stringify($json);\r\n\r\n\t\tthis.saveToFile($data, $file);\r\n\r\n\t\treturn $data;\r\n\t}\r\n\r\n\t/**\r\n\t * Creates an array element for a matrix row\r\n\t *\r\n\t * @returns {*}\r\n\t * @protected\r\n\t */\r\n\trow($y, $row){\r\n\t\tlet matrixRow = {y: $y, modules: []};\r\n\r\n\t\tfor(let x in $row){\r\n\t\t\tlet module = this.module(x, $y, $row[x]);\r\n\r\n\t\t\tif(module !== null){\r\n\t\t\t\tmatrixRow.modules.push(module);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(matrixRow.modules.length){\r\n\t\t\treturn matrixRow;\r\n\t\t}\r\n\r\n\t\t// skip empty rows\r\n\t\treturn null;\r\n\t}\r\n\r\n\t/**\r\n\t * Creates an array element for a single module\r\n\t *\r\n\t * @returns {*}\r\n\t * @protected\r\n\t */\r\n\tmodule($x, $y, $M_TYPE){\r\n\t\tlet isDark = this.matrix.isDark($M_TYPE);\r\n\r\n\t\tif(!this.options.drawLightModules && !isDark){\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tx: $x,\r\n\t\t\tdark: isDark,\r\n\t\t\tlayer: (LAYERNAMES[$M_TYPE] ?? ''),\r\n\t\t\tvalue: this.getModuleValue($M_TYPE),\r\n\t\t}\r\n\t}\r\n\r\n}\r\n","/**\r\n * @created      11.07.2022\r\n * @author       smiley <smiley@chillerlan.net>\r\n * @copyright    2022 smiley\r\n * @license      MIT\r\n */\r\n\r\n'use strict';\r\n\r\n// root\r\nimport QRCode from './QRCode.js';\r\nimport QRCodeException from './QRCodeException.js';\r\nimport QROptions from './QROptions.js';\r\n// Common\r\nimport {\r\n\tECC_L, ECC_M, ECC_Q, ECC_H,\r\n\tMASK_PATTERN_AUTO, PATTERNS, PATTERN_000, PATTERN_001, PATTERN_010,\r\n\tPATTERN_011, PATTERN_100, PATTERN_101, PATTERN_110, PATTERN_111,\r\n\tMODES, MODE_NUMBER, MODE_ALPHANUM, MODE_BYTE,\r\n\tVERSION_AUTO,\r\n\tM_NULL, M_DARKMODULE, M_DARKMODULE_LIGHT, M_DATA, M_FINDER, M_SEPARATOR, M_ALIGNMENT, M_TIMING,\r\n\tM_FORMAT, M_VERSION, M_QUIETZONE, M_LOGO, M_FINDER_DOT, M_FINDER_DOT_LIGHT, IS_DARK,\r\n\tM_DATA_DARK, M_FINDER_DARK, M_SEPARATOR_DARK, M_ALIGNMENT_DARK, M_TIMING_DARK,\r\n\tM_FORMAT_DARK, M_VERSION_DARK, M_QUIETZONE_DARK, M_LOGO_DARK,\r\n\tMATRIX_NEIGHBOUR_FLAGS, MATRIX_NEIGHBOURS,\r\n\tDEFAULT_MODULE_VALUES, LAYERNAMES,\r\n} from './Common/constants.js';\r\nimport BitBuffer from './Common/BitBuffer.js';\r\nimport EccLevel from './Common/EccLevel.js';\r\nimport MaskPattern from './Common/MaskPattern.js';\r\nimport Mode from './Common/Mode.js';\r\nimport Version from './Common/Version.js';\r\n// Data\r\nimport AlphaNum from './Data/AlphaNum.js';\r\nimport Byte from './Data/Byte.js';\r\nimport Numeric from './Data/Numeric.js';\r\nimport QRCodeDataException from './Data/QRCodeDataException.js';\r\nimport QRData from './Data/QRData.js';\r\nimport QRDataModeInterface from './Data/QRDataModeInterface.js';\r\nimport QRMatrix from './Data/QRMatrix.js';\r\n// Output\r\nimport QRCanvas from './Output/QRCanvas.js';\r\nimport QRCodeOutputException from './Output/QRCodeOutputException.js';\r\nimport QRMarkupSVG from './Output/QRMarkupSVG.js';\r\nimport QROutputAbstract from './Output/QROutputAbstract.js';\r\nimport QROutputInterface from './Output/QROutputInterface.js';\r\nimport QRStringText from './Output/QRStringText.js';\r\nimport QRStringJSON from './Output/QRStringJSON.js';\r\n\r\n\r\nexport {\r\n\tQRCode,\r\n\tQRCodeException,\r\n\tQROptions,\r\n\tBitBuffer,\r\n\tEccLevel, ECC_L, ECC_M, ECC_Q, ECC_H,\r\n\tMaskPattern, MASK_PATTERN_AUTO, PATTERNS, PATTERN_000, PATTERN_001, PATTERN_010,\r\n\t\tPATTERN_011, PATTERN_100, PATTERN_101, PATTERN_110, PATTERN_111,\r\n\tMode, MODES, MODE_NUMBER, MODE_ALPHANUM, MODE_BYTE,\r\n\tVersion, VERSION_AUTO,\r\n\tAlphaNum,\r\n\tByte,\r\n\tNumeric,\r\n\tQRCodeDataException,\r\n\tQRData,\r\n\tQRDataModeInterface,\r\n\tQRMatrix, M_NULL, M_DARKMODULE, M_DARKMODULE_LIGHT, M_DATA, M_FINDER, M_SEPARATOR, M_ALIGNMENT, M_TIMING,\r\n\t\tM_FORMAT, M_VERSION, M_QUIETZONE, M_LOGO, M_FINDER_DOT, M_FINDER_DOT_LIGHT, IS_DARK,\r\n\t\tM_DATA_DARK, M_FINDER_DARK, M_SEPARATOR_DARK, M_ALIGNMENT_DARK, M_TIMING_DARK,\r\n\t\tM_FORMAT_DARK, M_VERSION_DARK, M_QUIETZONE_DARK, M_LOGO_DARK, MATRIX_NEIGHBOUR_FLAGS, MATRIX_NEIGHBOURS,\r\n\tQRCanvas,\r\n\tQRCodeOutputException,\r\n\tQRMarkupSVG,\r\n\tQROutputAbstract,\r\n\tQROutputInterface, DEFAULT_MODULE_VALUES, LAYERNAMES,\r\n\tQRStringText,\r\n\tQRStringJSON,\r\n};\r\n"]}