From 720ea3ea7a24d0443bc090de8f2fc42bf327c201 Mon Sep 17 00:00:00 2001 From: v-Brocloni Date: Sun, 15 Nov 2020 14:58:54 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E4=BA=A7=E4=BA=8C=E7=BB=B4=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- addons/unishop/controller/Order.php | 32 +- addons/unishop/library/phpqrcode/CHANGELOG | 38 + addons/unishop/library/phpqrcode/INSTALL | 67 + addons/unishop/library/phpqrcode/LICENSE | 165 + addons/unishop/library/phpqrcode/QrCode.php | 15 + addons/unishop/library/phpqrcode/README | 45 + addons/unishop/library/phpqrcode/VERSION | 2 + .../library/phpqrcode/bindings/tcpdf/qrcode.php | 2875 +++++++++++++++++ addons/unishop/library/phpqrcode/cache/frame_1.dat | 2 + addons/unishop/library/phpqrcode/cache/frame_1.png | Bin 0 -> 126 bytes .../unishop/library/phpqrcode/cache/frame_10.dat | Bin 0 -> 204 bytes .../unishop/library/phpqrcode/cache/frame_10.png | Bin 0 -> 202 bytes .../unishop/library/phpqrcode/cache/frame_11.dat | Bin 0 -> 210 bytes .../unishop/library/phpqrcode/cache/frame_11.png | Bin 0 -> 205 bytes .../unishop/library/phpqrcode/cache/frame_12.dat | Bin 0 -> 222 bytes .../unishop/library/phpqrcode/cache/frame_12.png | Bin 0 -> 216 bytes .../unishop/library/phpqrcode/cache/frame_13.dat | Bin 0 -> 223 bytes .../unishop/library/phpqrcode/cache/frame_13.png | Bin 0 -> 210 bytes .../unishop/library/phpqrcode/cache/frame_14.dat | Bin 0 -> 227 bytes .../unishop/library/phpqrcode/cache/frame_14.png | Bin 0 -> 213 bytes .../unishop/library/phpqrcode/cache/frame_15.dat | Bin 0 -> 242 bytes .../unishop/library/phpqrcode/cache/frame_15.png | Bin 0 -> 219 bytes .../unishop/library/phpqrcode/cache/frame_16.dat | 1 + .../unishop/library/phpqrcode/cache/frame_16.png | Bin 0 -> 211 bytes .../unishop/library/phpqrcode/cache/frame_17.dat | Bin 0 -> 237 bytes .../unishop/library/phpqrcode/cache/frame_17.png | Bin 0 -> 211 bytes .../unishop/library/phpqrcode/cache/frame_18.dat | 2 + .../unishop/library/phpqrcode/cache/frame_18.png | Bin 0 -> 228 bytes .../unishop/library/phpqrcode/cache/frame_19.dat | 3 + .../unishop/library/phpqrcode/cache/frame_19.png | Bin 0 -> 225 bytes addons/unishop/library/phpqrcode/cache/frame_2.dat | 1 + addons/unishop/library/phpqrcode/cache/frame_2.png | Bin 0 -> 144 bytes .../unishop/library/phpqrcode/cache/frame_20.dat | Bin 0 -> 250 bytes .../unishop/library/phpqrcode/cache/frame_20.png | Bin 0 -> 225 bytes .../unishop/library/phpqrcode/cache/frame_21.dat | 1 + .../unishop/library/phpqrcode/cache/frame_21.png | Bin 0 -> 235 bytes .../unishop/library/phpqrcode/cache/frame_22.dat | 3 + .../unishop/library/phpqrcode/cache/frame_22.png | Bin 0 -> 226 bytes .../unishop/library/phpqrcode/cache/frame_23.dat | 3 + .../unishop/library/phpqrcode/cache/frame_23.png | Bin 0 -> 220 bytes .../unishop/library/phpqrcode/cache/frame_24.dat | 1 + .../unishop/library/phpqrcode/cache/frame_24.png | Bin 0 -> 242 bytes .../unishop/library/phpqrcode/cache/frame_25.dat | 3 + .../unishop/library/phpqrcode/cache/frame_25.png | Bin 0 -> 242 bytes .../unishop/library/phpqrcode/cache/frame_26.dat | 2 + .../unishop/library/phpqrcode/cache/frame_26.png | Bin 0 -> 244 bytes .../unishop/library/phpqrcode/cache/frame_27.dat | Bin 0 -> 284 bytes .../unishop/library/phpqrcode/cache/frame_27.png | Bin 0 -> 237 bytes .../unishop/library/phpqrcode/cache/frame_28.dat | Bin 0 -> 318 bytes .../unishop/library/phpqrcode/cache/frame_28.png | Bin 0 -> 234 bytes .../unishop/library/phpqrcode/cache/frame_29.dat | 2 + .../unishop/library/phpqrcode/cache/frame_29.png | Bin 0 -> 232 bytes addons/unishop/library/phpqrcode/cache/frame_3.dat | 1 + addons/unishop/library/phpqrcode/cache/frame_3.png | Bin 0 -> 147 bytes .../unishop/library/phpqrcode/cache/frame_30.dat | Bin 0 -> 324 bytes .../unishop/library/phpqrcode/cache/frame_30.png | Bin 0 -> 255 bytes .../unishop/library/phpqrcode/cache/frame_31.dat | 1 + .../unishop/library/phpqrcode/cache/frame_31.png | Bin 0 -> 260 bytes .../unishop/library/phpqrcode/cache/frame_32.dat | 2 + .../unishop/library/phpqrcode/cache/frame_32.png | Bin 0 -> 262 bytes .../unishop/library/phpqrcode/cache/frame_33.dat | 14 + .../unishop/library/phpqrcode/cache/frame_33.png | Bin 0 -> 253 bytes .../unishop/library/phpqrcode/cache/frame_34.dat | Bin 0 -> 331 bytes .../unishop/library/phpqrcode/cache/frame_34.png | Bin 0 -> 256 bytes .../unishop/library/phpqrcode/cache/frame_35.dat | Bin 0 -> 342 bytes .../unishop/library/phpqrcode/cache/frame_35.png | Bin 0 -> 243 bytes .../unishop/library/phpqrcode/cache/frame_36.dat | Bin 0 -> 370 bytes .../unishop/library/phpqrcode/cache/frame_36.png | Bin 0 -> 272 bytes .../unishop/library/phpqrcode/cache/frame_37.dat | Bin 0 -> 376 bytes .../unishop/library/phpqrcode/cache/frame_37.png | Bin 0 -> 279 bytes .../unishop/library/phpqrcode/cache/frame_38.dat | 1 + .../unishop/library/phpqrcode/cache/frame_38.png | Bin 0 -> 279 bytes .../unishop/library/phpqrcode/cache/frame_39.dat | Bin 0 -> 404 bytes .../unishop/library/phpqrcode/cache/frame_39.png | Bin 0 -> 264 bytes addons/unishop/library/phpqrcode/cache/frame_4.dat | 1 + addons/unishop/library/phpqrcode/cache/frame_4.png | Bin 0 -> 149 bytes .../unishop/library/phpqrcode/cache/frame_40.dat | 2 + .../unishop/library/phpqrcode/cache/frame_40.png | Bin 0 -> 267 bytes addons/unishop/library/phpqrcode/cache/frame_5.dat | 1 + addons/unishop/library/phpqrcode/cache/frame_5.png | Bin 0 -> 150 bytes addons/unishop/library/phpqrcode/cache/frame_6.dat | Bin 0 -> 132 bytes addons/unishop/library/phpqrcode/cache/frame_6.png | Bin 0 -> 151 bytes addons/unishop/library/phpqrcode/cache/frame_7.dat | Bin 0 -> 196 bytes addons/unishop/library/phpqrcode/cache/frame_7.png | Bin 0 -> 189 bytes addons/unishop/library/phpqrcode/cache/frame_8.dat | Bin 0 -> 201 bytes addons/unishop/library/phpqrcode/cache/frame_8.png | Bin 0 -> 204 bytes addons/unishop/library/phpqrcode/cache/frame_9.dat | Bin 0 -> 206 bytes addons/unishop/library/phpqrcode/cache/frame_9.png | Bin 0 -> 199 bytes .../library/phpqrcode/cache/mask_0/mask_101_0.dat | Bin 0 -> 157 bytes .../library/phpqrcode/cache/mask_0/mask_105_0.dat | Bin 0 -> 162 bytes .../library/phpqrcode/cache/mask_0/mask_109_0.dat | 2 + .../library/phpqrcode/cache/mask_0/mask_113_0.dat | 2 + .../library/phpqrcode/cache/mask_0/mask_117_0.dat | 2 + .../library/phpqrcode/cache/mask_0/mask_121_0.dat | 1 + .../library/phpqrcode/cache/mask_0/mask_125_0.dat | 2 + .../library/phpqrcode/cache/mask_0/mask_129_0.dat | 2 + .../library/phpqrcode/cache/mask_0/mask_133_0.dat | 2 + .../library/phpqrcode/cache/mask_0/mask_137_0.dat | 1 + .../library/phpqrcode/cache/mask_0/mask_141_0.dat | 2 + .../library/phpqrcode/cache/mask_0/mask_145_0.dat | 2 + .../library/phpqrcode/cache/mask_0/mask_149_0.dat | 3 + .../library/phpqrcode/cache/mask_0/mask_153_0.dat | 1 + .../library/phpqrcode/cache/mask_0/mask_157_0.dat | 2 + .../library/phpqrcode/cache/mask_0/mask_161_0.dat | Bin 0 -> 241 bytes .../library/phpqrcode/cache/mask_0/mask_165_0.dat | 2 + .../library/phpqrcode/cache/mask_0/mask_169_0.dat | 2 + .../library/phpqrcode/cache/mask_0/mask_173_0.dat | 1 + .../library/phpqrcode/cache/mask_0/mask_177_0.dat | 2 + .../library/phpqrcode/cache/mask_0/mask_21_0.dat | Bin 0 -> 48 bytes .../library/phpqrcode/cache/mask_0/mask_25_0.dat | Bin 0 -> 57 bytes .../library/phpqrcode/cache/mask_0/mask_29_0.dat | Bin 0 -> 59 bytes .../library/phpqrcode/cache/mask_0/mask_33_0.dat | Bin 0 -> 62 bytes .../library/phpqrcode/cache/mask_0/mask_37_0.dat | Bin 0 -> 65 bytes .../library/phpqrcode/cache/mask_0/mask_41_0.dat | Bin 0 -> 68 bytes .../library/phpqrcode/cache/mask_0/mask_45_0.dat | Bin 0 -> 106 bytes .../library/phpqrcode/cache/mask_0/mask_49_0.dat | 2 + .../library/phpqrcode/cache/mask_0/mask_53_0.dat | 2 + .../library/phpqrcode/cache/mask_0/mask_57_0.dat | 4 + .../library/phpqrcode/cache/mask_0/mask_61_0.dat | Bin 0 -> 119 bytes .../library/phpqrcode/cache/mask_0/mask_65_0.dat | Bin 0 -> 123 bytes .../library/phpqrcode/cache/mask_0/mask_69_0.dat | 1 + .../library/phpqrcode/cache/mask_0/mask_73_0.dat | 1 + .../library/phpqrcode/cache/mask_0/mask_77_0.dat | 2 + .../library/phpqrcode/cache/mask_0/mask_81_0.dat | 2 + .../library/phpqrcode/cache/mask_0/mask_85_0.dat | 2 + .../library/phpqrcode/cache/mask_0/mask_89_0.dat | 1 + .../library/phpqrcode/cache/mask_0/mask_93_0.dat | 3 + .../library/phpqrcode/cache/mask_0/mask_97_0.dat | Bin 0 -> 150 bytes .../library/phpqrcode/cache/mask_1/mask_101_1.dat | 2 + .../library/phpqrcode/cache/mask_1/mask_105_1.dat | 1 + .../library/phpqrcode/cache/mask_1/mask_109_1.dat | 1 + .../library/phpqrcode/cache/mask_1/mask_113_1.dat | 1 + .../library/phpqrcode/cache/mask_1/mask_117_1.dat | 2 + .../library/phpqrcode/cache/mask_1/mask_121_1.dat | 2 + .../library/phpqrcode/cache/mask_1/mask_125_1.dat | 2 + .../library/phpqrcode/cache/mask_1/mask_129_1.dat | Bin 0 -> 164 bytes .../library/phpqrcode/cache/mask_1/mask_133_1.dat | 1 + .../library/phpqrcode/cache/mask_1/mask_137_1.dat | 3 + .../library/phpqrcode/cache/mask_1/mask_141_1.dat | 2 + .../library/phpqrcode/cache/mask_1/mask_145_1.dat | 1 + .../library/phpqrcode/cache/mask_1/mask_149_1.dat | 1 + .../library/phpqrcode/cache/mask_1/mask_153_1.dat | 2 + .../library/phpqrcode/cache/mask_1/mask_157_1.dat | 2 + .../library/phpqrcode/cache/mask_1/mask_161_1.dat | 1 + .../library/phpqrcode/cache/mask_1/mask_165_1.dat | 1 + .../library/phpqrcode/cache/mask_1/mask_169_1.dat | 1 + .../library/phpqrcode/cache/mask_1/mask_173_1.dat | 1 + .../library/phpqrcode/cache/mask_1/mask_177_1.dat | 1 + .../library/phpqrcode/cache/mask_1/mask_21_1.dat | Bin 0 -> 42 bytes .../library/phpqrcode/cache/mask_1/mask_25_1.dat | Bin 0 -> 48 bytes .../library/phpqrcode/cache/mask_1/mask_29_1.dat | Bin 0 -> 50 bytes .../library/phpqrcode/cache/mask_1/mask_33_1.dat | Bin 0 -> 53 bytes .../library/phpqrcode/cache/mask_1/mask_37_1.dat | Bin 0 -> 56 bytes .../library/phpqrcode/cache/mask_1/mask_41_1.dat | Bin 0 -> 58 bytes .../library/phpqrcode/cache/mask_1/mask_45_1.dat | Bin 0 -> 82 bytes .../library/phpqrcode/cache/mask_1/mask_49_1.dat | Bin 0 -> 84 bytes .../library/phpqrcode/cache/mask_1/mask_53_1.dat | Bin 0 -> 87 bytes .../library/phpqrcode/cache/mask_1/mask_57_1.dat | Bin 0 -> 92 bytes .../library/phpqrcode/cache/mask_1/mask_61_1.dat | 1 + .../library/phpqrcode/cache/mask_1/mask_65_1.dat | Bin 0 -> 99 bytes .../library/phpqrcode/cache/mask_1/mask_69_1.dat | Bin 0 -> 102 bytes .../library/phpqrcode/cache/mask_1/mask_73_1.dat | Bin 0 -> 104 bytes .../library/phpqrcode/cache/mask_1/mask_77_1.dat | Bin 0 -> 110 bytes .../library/phpqrcode/cache/mask_1/mask_81_1.dat | Bin 0 -> 114 bytes .../library/phpqrcode/cache/mask_1/mask_85_1.dat | 2 + .../library/phpqrcode/cache/mask_1/mask_89_1.dat | 1 + .../library/phpqrcode/cache/mask_1/mask_93_1.dat | 2 + .../library/phpqrcode/cache/mask_1/mask_97_1.dat | 2 + .../library/phpqrcode/cache/mask_2/mask_101_2.dat | 3 + .../library/phpqrcode/cache/mask_2/mask_105_2.dat | 1 + .../library/phpqrcode/cache/mask_2/mask_109_2.dat | 2 + .../library/phpqrcode/cache/mask_2/mask_113_2.dat | 1 + .../library/phpqrcode/cache/mask_2/mask_117_2.dat | 2 + .../library/phpqrcode/cache/mask_2/mask_121_2.dat | Bin 0 -> 127 bytes .../library/phpqrcode/cache/mask_2/mask_125_2.dat | 1 + .../library/phpqrcode/cache/mask_2/mask_129_2.dat | 2 + .../library/phpqrcode/cache/mask_2/mask_133_2.dat | 10 + .../library/phpqrcode/cache/mask_2/mask_137_2.dat | 2 + .../library/phpqrcode/cache/mask_2/mask_141_2.dat | 2 + .../library/phpqrcode/cache/mask_2/mask_145_2.dat | 4 + .../library/phpqrcode/cache/mask_2/mask_149_2.dat | 1 + .../library/phpqrcode/cache/mask_2/mask_153_2.dat | 2 + .../library/phpqrcode/cache/mask_2/mask_157_2.dat | 3 + .../library/phpqrcode/cache/mask_2/mask_161_2.dat | Bin 0 -> 190 bytes .../library/phpqrcode/cache/mask_2/mask_165_2.dat | 2 + .../library/phpqrcode/cache/mask_2/mask_169_2.dat | Bin 0 -> 196 bytes .../library/phpqrcode/cache/mask_2/mask_173_2.dat | 1 + .../library/phpqrcode/cache/mask_2/mask_177_2.dat | 2 + .../library/phpqrcode/cache/mask_2/mask_21_2.dat | Bin 0 -> 35 bytes .../library/phpqrcode/cache/mask_2/mask_25_2.dat | Bin 0 -> 41 bytes .../library/phpqrcode/cache/mask_2/mask_29_2.dat | Bin 0 -> 45 bytes .../library/phpqrcode/cache/mask_2/mask_33_2.dat | Bin 0 -> 47 bytes .../library/phpqrcode/cache/mask_2/mask_37_2.dat | Bin 0 -> 47 bytes .../library/phpqrcode/cache/mask_2/mask_41_2.dat | 1 + .../library/phpqrcode/cache/mask_2/mask_45_2.dat | Bin 0 -> 68 bytes .../library/phpqrcode/cache/mask_2/mask_49_2.dat | Bin 0 -> 70 bytes .../library/phpqrcode/cache/mask_2/mask_53_2.dat | Bin 0 -> 73 bytes .../library/phpqrcode/cache/mask_2/mask_57_2.dat | Bin 0 -> 76 bytes .../library/phpqrcode/cache/mask_2/mask_61_2.dat | Bin 0 -> 78 bytes .../library/phpqrcode/cache/mask_2/mask_65_2.dat | Bin 0 -> 89 bytes .../library/phpqrcode/cache/mask_2/mask_69_2.dat | Bin 0 -> 88 bytes .../library/phpqrcode/cache/mask_2/mask_73_2.dat | Bin 0 -> 94 bytes .../library/phpqrcode/cache/mask_2/mask_77_2.dat | 1 + .../library/phpqrcode/cache/mask_2/mask_81_2.dat | 2 + .../library/phpqrcode/cache/mask_2/mask_85_2.dat | 2 + .../library/phpqrcode/cache/mask_2/mask_89_2.dat | 1 + .../library/phpqrcode/cache/mask_2/mask_93_2.dat | Bin 0 -> 103 bytes .../library/phpqrcode/cache/mask_2/mask_97_2.dat | 2 + .../library/phpqrcode/cache/mask_3/mask_101_3.dat | 1 + .../library/phpqrcode/cache/mask_3/mask_105_3.dat | 1 + .../library/phpqrcode/cache/mask_3/mask_109_3.dat | 1 + .../library/phpqrcode/cache/mask_3/mask_113_3.dat | 2 + .../library/phpqrcode/cache/mask_3/mask_117_3.dat | 4 + .../library/phpqrcode/cache/mask_3/mask_121_3.dat | Bin 0 -> 212 bytes .../library/phpqrcode/cache/mask_3/mask_125_3.dat | 2 + .../library/phpqrcode/cache/mask_3/mask_129_3.dat | 8 + .../library/phpqrcode/cache/mask_3/mask_133_3.dat | Bin 0 -> 216 bytes .../library/phpqrcode/cache/mask_3/mask_137_3.dat | 2 + .../library/phpqrcode/cache/mask_3/mask_141_3.dat | 2 + .../library/phpqrcode/cache/mask_3/mask_145_3.dat | 3 + .../library/phpqrcode/cache/mask_3/mask_149_3.dat | 1 + .../library/phpqrcode/cache/mask_3/mask_153_3.dat | 2 + .../library/phpqrcode/cache/mask_3/mask_157_3.dat | Bin 0 -> 248 bytes .../library/phpqrcode/cache/mask_3/mask_161_3.dat | 3 + .../library/phpqrcode/cache/mask_3/mask_165_3.dat | 2 + .../library/phpqrcode/cache/mask_3/mask_169_3.dat | 1 + .../library/phpqrcode/cache/mask_3/mask_173_3.dat | 1 + .../library/phpqrcode/cache/mask_3/mask_177_3.dat | Bin 0 -> 312 bytes .../library/phpqrcode/cache/mask_3/mask_21_3.dat | Bin 0 -> 60 bytes .../library/phpqrcode/cache/mask_3/mask_25_3.dat | Bin 0 -> 75 bytes .../library/phpqrcode/cache/mask_3/mask_29_3.dat | Bin 0 -> 75 bytes .../library/phpqrcode/cache/mask_3/mask_33_3.dat | Bin 0 -> 79 bytes .../library/phpqrcode/cache/mask_3/mask_37_3.dat | Bin 0 -> 83 bytes .../library/phpqrcode/cache/mask_3/mask_41_3.dat | Bin 0 -> 85 bytes .../library/phpqrcode/cache/mask_3/mask_45_3.dat | 2 + .../library/phpqrcode/cache/mask_3/mask_49_3.dat | Bin 0 -> 127 bytes .../library/phpqrcode/cache/mask_3/mask_53_3.dat | 2 + .../library/phpqrcode/cache/mask_3/mask_57_3.dat | Bin 0 -> 126 bytes .../library/phpqrcode/cache/mask_3/mask_61_3.dat | 2 + .../library/phpqrcode/cache/mask_3/mask_65_3.dat | 2 + .../library/phpqrcode/cache/mask_3/mask_69_3.dat | 2 + .../library/phpqrcode/cache/mask_3/mask_73_3.dat | 2 + .../library/phpqrcode/cache/mask_3/mask_77_3.dat | 2 + .../library/phpqrcode/cache/mask_3/mask_81_3.dat | 2 + .../library/phpqrcode/cache/mask_3/mask_85_3.dat | Bin 0 -> 160 bytes .../library/phpqrcode/cache/mask_3/mask_89_3.dat | 2 + .../library/phpqrcode/cache/mask_3/mask_93_3.dat | 2 + .../library/phpqrcode/cache/mask_3/mask_97_3.dat | Bin 0 -> 175 bytes .../library/phpqrcode/cache/mask_4/mask_101_4.dat | 2 + .../library/phpqrcode/cache/mask_4/mask_105_4.dat | 2 + .../library/phpqrcode/cache/mask_4/mask_109_4.dat | Bin 0 -> 182 bytes .../library/phpqrcode/cache/mask_4/mask_113_4.dat | 2 + .../library/phpqrcode/cache/mask_4/mask_117_4.dat | 2 + .../library/phpqrcode/cache/mask_4/mask_121_4.dat | Bin 0 -> 208 bytes .../library/phpqrcode/cache/mask_4/mask_125_4.dat | Bin 0 -> 213 bytes .../library/phpqrcode/cache/mask_4/mask_129_4.dat | Bin 0 -> 220 bytes .../library/phpqrcode/cache/mask_4/mask_133_4.dat | 3 + .../library/phpqrcode/cache/mask_4/mask_137_4.dat | Bin 0 -> 248 bytes .../library/phpqrcode/cache/mask_4/mask_141_4.dat | Bin 0 -> 254 bytes .../library/phpqrcode/cache/mask_4/mask_145_4.dat | Bin 0 -> 255 bytes .../library/phpqrcode/cache/mask_4/mask_149_4.dat | 2 + .../library/phpqrcode/cache/mask_4/mask_153_4.dat | 2 + .../library/phpqrcode/cache/mask_4/mask_157_4.dat | 1 + .../library/phpqrcode/cache/mask_4/mask_161_4.dat | 1 + .../library/phpqrcode/cache/mask_4/mask_165_4.dat | 3 + .../library/phpqrcode/cache/mask_4/mask_169_4.dat | Bin 0 -> 297 bytes .../library/phpqrcode/cache/mask_4/mask_173_4.dat | 2 + .../library/phpqrcode/cache/mask_4/mask_177_4.dat | 2 + .../library/phpqrcode/cache/mask_4/mask_21_4.dat | Bin 0 -> 57 bytes .../library/phpqrcode/cache/mask_4/mask_25_4.dat | Bin 0 -> 76 bytes .../library/phpqrcode/cache/mask_4/mask_29_4.dat | Bin 0 -> 78 bytes .../library/phpqrcode/cache/mask_4/mask_33_4.dat | Bin 0 -> 89 bytes .../library/phpqrcode/cache/mask_4/mask_37_4.dat | Bin 0 -> 86 bytes .../library/phpqrcode/cache/mask_4/mask_41_4.dat | Bin 0 -> 89 bytes .../library/phpqrcode/cache/mask_4/mask_45_4.dat | Bin 0 -> 120 bytes .../library/phpqrcode/cache/mask_4/mask_49_4.dat | Bin 0 -> 124 bytes .../library/phpqrcode/cache/mask_4/mask_53_4.dat | Bin 0 -> 128 bytes .../library/phpqrcode/cache/mask_4/mask_57_4.dat | Bin 0 -> 130 bytes .../library/phpqrcode/cache/mask_4/mask_61_4.dat | Bin 0 -> 132 bytes .../library/phpqrcode/cache/mask_4/mask_65_4.dat | 2 + .../library/phpqrcode/cache/mask_4/mask_69_4.dat | 1 + .../library/phpqrcode/cache/mask_4/mask_73_4.dat | 3 + .../library/phpqrcode/cache/mask_4/mask_77_4.dat | 2 + .../library/phpqrcode/cache/mask_4/mask_81_4.dat | 3 + .../library/phpqrcode/cache/mask_4/mask_85_4.dat | Bin 0 -> 154 bytes .../library/phpqrcode/cache/mask_4/mask_89_4.dat | 2 + .../library/phpqrcode/cache/mask_4/mask_93_4.dat | 2 + .../library/phpqrcode/cache/mask_4/mask_97_4.dat | Bin 0 -> 176 bytes .../library/phpqrcode/cache/mask_5/mask_101_5.dat | 2 + .../library/phpqrcode/cache/mask_5/mask_105_5.dat | Bin 0 -> 224 bytes .../library/phpqrcode/cache/mask_5/mask_109_5.dat | Bin 0 -> 211 bytes .../library/phpqrcode/cache/mask_5/mask_113_5.dat | 9 + .../library/phpqrcode/cache/mask_5/mask_117_5.dat | 1 + .../library/phpqrcode/cache/mask_5/mask_121_5.dat | Bin 0 -> 256 bytes .../library/phpqrcode/cache/mask_5/mask_125_5.dat | 2 + .../library/phpqrcode/cache/mask_5/mask_129_5.dat | Bin 0 -> 259 bytes .../library/phpqrcode/cache/mask_5/mask_133_5.dat | 2 + .../library/phpqrcode/cache/mask_5/mask_137_5.dat | 3 + .../library/phpqrcode/cache/mask_5/mask_141_5.dat | Bin 0 -> 297 bytes .../library/phpqrcode/cache/mask_5/mask_145_5.dat | Bin 0 -> 300 bytes .../library/phpqrcode/cache/mask_5/mask_149_5.dat | 3 + .../library/phpqrcode/cache/mask_5/mask_153_5.dat | 2 + .../library/phpqrcode/cache/mask_5/mask_157_5.dat | 1 + .../library/phpqrcode/cache/mask_5/mask_161_5.dat | 2 + .../library/phpqrcode/cache/mask_5/mask_165_5.dat | Bin 0 -> 332 bytes .../library/phpqrcode/cache/mask_5/mask_169_5.dat | 1 + .../library/phpqrcode/cache/mask_5/mask_173_5.dat | 4 + .../library/phpqrcode/cache/mask_5/mask_177_5.dat | 11 + .../library/phpqrcode/cache/mask_5/mask_21_5.dat | Bin 0 -> 74 bytes .../library/phpqrcode/cache/mask_5/mask_25_5.dat | 2 + .../library/phpqrcode/cache/mask_5/mask_29_5.dat | 2 + .../library/phpqrcode/cache/mask_5/mask_33_5.dat | Bin 0 -> 106 bytes .../library/phpqrcode/cache/mask_5/mask_37_5.dat | Bin 0 -> 103 bytes .../library/phpqrcode/cache/mask_5/mask_41_5.dat | 2 + .../library/phpqrcode/cache/mask_5/mask_45_5.dat | 1 + .../library/phpqrcode/cache/mask_5/mask_49_5.dat | Bin 0 -> 146 bytes .../library/phpqrcode/cache/mask_5/mask_53_5.dat | 1 + .../library/phpqrcode/cache/mask_5/mask_57_5.dat | 2 + .../library/phpqrcode/cache/mask_5/mask_61_5.dat | 1 + .../library/phpqrcode/cache/mask_5/mask_65_5.dat | Bin 0 -> 163 bytes .../library/phpqrcode/cache/mask_5/mask_69_5.dat | Bin 0 -> 167 bytes .../library/phpqrcode/cache/mask_5/mask_73_5.dat | Bin 0 -> 184 bytes .../library/phpqrcode/cache/mask_5/mask_77_5.dat | 1 + .../library/phpqrcode/cache/mask_5/mask_81_5.dat | 3 + .../library/phpqrcode/cache/mask_5/mask_85_5.dat | Bin 0 -> 186 bytes .../library/phpqrcode/cache/mask_5/mask_89_5.dat | 2 + .../library/phpqrcode/cache/mask_5/mask_93_5.dat | 2 + .../library/phpqrcode/cache/mask_5/mask_97_5.dat | 1 + .../library/phpqrcode/cache/mask_6/mask_101_6.dat | 2 + .../library/phpqrcode/cache/mask_6/mask_105_6.dat | 3 + .../library/phpqrcode/cache/mask_6/mask_109_6.dat | 1 + .../library/phpqrcode/cache/mask_6/mask_113_6.dat | 3 + .../library/phpqrcode/cache/mask_6/mask_117_6.dat | 1 + .../library/phpqrcode/cache/mask_6/mask_121_6.dat | Bin 0 -> 309 bytes .../library/phpqrcode/cache/mask_6/mask_125_6.dat | 1 + .../library/phpqrcode/cache/mask_6/mask_129_6.dat | Bin 0 -> 310 bytes .../library/phpqrcode/cache/mask_6/mask_133_6.dat | Bin 0 -> 296 bytes .../library/phpqrcode/cache/mask_6/mask_137_6.dat | 2 + .../library/phpqrcode/cache/mask_6/mask_141_6.dat | 10 + .../library/phpqrcode/cache/mask_6/mask_145_6.dat | Bin 0 -> 357 bytes .../library/phpqrcode/cache/mask_6/mask_149_6.dat | 2 + .../library/phpqrcode/cache/mask_6/mask_153_6.dat | Bin 0 -> 367 bytes .../library/phpqrcode/cache/mask_6/mask_157_6.dat | 1 + .../library/phpqrcode/cache/mask_6/mask_161_6.dat | Bin 0 -> 399 bytes .../library/phpqrcode/cache/mask_6/mask_165_6.dat | Bin 0 -> 400 bytes .../library/phpqrcode/cache/mask_6/mask_169_6.dat | 1 + .../library/phpqrcode/cache/mask_6/mask_173_6.dat | 1 + .../library/phpqrcode/cache/mask_6/mask_177_6.dat | 14 + .../library/phpqrcode/cache/mask_6/mask_21_6.dat | 1 + .../library/phpqrcode/cache/mask_6/mask_25_6.dat | 1 + .../library/phpqrcode/cache/mask_6/mask_29_6.dat | 3 + .../library/phpqrcode/cache/mask_6/mask_33_6.dat | Bin 0 -> 124 bytes .../library/phpqrcode/cache/mask_6/mask_37_6.dat | 1 + .../library/phpqrcode/cache/mask_6/mask_41_6.dat | Bin 0 -> 132 bytes .../library/phpqrcode/cache/mask_6/mask_45_6.dat | Bin 0 -> 189 bytes .../library/phpqrcode/cache/mask_6/mask_49_6.dat | 2 + .../library/phpqrcode/cache/mask_6/mask_53_6.dat | Bin 0 -> 195 bytes .../library/phpqrcode/cache/mask_6/mask_57_6.dat | 2 + .../library/phpqrcode/cache/mask_6/mask_61_6.dat | 2 + .../library/phpqrcode/cache/mask_6/mask_65_6.dat | 1 + .../library/phpqrcode/cache/mask_6/mask_69_6.dat | 1 + .../library/phpqrcode/cache/mask_6/mask_73_6.dat | Bin 0 -> 230 bytes .../library/phpqrcode/cache/mask_6/mask_77_6.dat | 1 + .../library/phpqrcode/cache/mask_6/mask_81_6.dat | 3 + .../library/phpqrcode/cache/mask_6/mask_85_6.dat | Bin 0 -> 229 bytes .../library/phpqrcode/cache/mask_6/mask_89_6.dat | Bin 0 -> 263 bytes .../library/phpqrcode/cache/mask_6/mask_93_6.dat | Bin 0 -> 276 bytes .../library/phpqrcode/cache/mask_6/mask_97_6.dat | 2 + .../library/phpqrcode/cache/mask_7/mask_101_7.dat | 1 + .../library/phpqrcode/cache/mask_7/mask_105_7.dat | 2 + .../library/phpqrcode/cache/mask_7/mask_109_7.dat | 2 + .../library/phpqrcode/cache/mask_7/mask_113_7.dat | 11 + .../library/phpqrcode/cache/mask_7/mask_117_7.dat | 2 + .../library/phpqrcode/cache/mask_7/mask_121_7.dat | 2 + .../library/phpqrcode/cache/mask_7/mask_125_7.dat | Bin 0 -> 288 bytes .../library/phpqrcode/cache/mask_7/mask_129_7.dat | Bin 0 -> 282 bytes .../library/phpqrcode/cache/mask_7/mask_133_7.dat | Bin 0 -> 281 bytes .../library/phpqrcode/cache/mask_7/mask_137_7.dat | 5 + .../library/phpqrcode/cache/mask_7/mask_141_7.dat | 1 + .../library/phpqrcode/cache/mask_7/mask_145_7.dat | 2 + .../library/phpqrcode/cache/mask_7/mask_149_7.dat | 1 + .../library/phpqrcode/cache/mask_7/mask_153_7.dat | 2 + .../library/phpqrcode/cache/mask_7/mask_157_7.dat | 2 + .../library/phpqrcode/cache/mask_7/mask_161_7.dat | 1 + .../library/phpqrcode/cache/mask_7/mask_165_7.dat | 1 + .../library/phpqrcode/cache/mask_7/mask_169_7.dat | Bin 0 -> 383 bytes .../library/phpqrcode/cache/mask_7/mask_173_7.dat | 1 + .../library/phpqrcode/cache/mask_7/mask_177_7.dat | Bin 0 -> 407 bytes .../library/phpqrcode/cache/mask_7/mask_21_7.dat | 4 + .../library/phpqrcode/cache/mask_7/mask_25_7.dat | 1 + .../library/phpqrcode/cache/mask_7/mask_29_7.dat | 2 + .../library/phpqrcode/cache/mask_7/mask_33_7.dat | 1 + .../library/phpqrcode/cache/mask_7/mask_37_7.dat | Bin 0 -> 122 bytes .../library/phpqrcode/cache/mask_7/mask_41_7.dat | 1 + .../library/phpqrcode/cache/mask_7/mask_45_7.dat | Bin 0 -> 173 bytes .../library/phpqrcode/cache/mask_7/mask_49_7.dat | 1 + .../library/phpqrcode/cache/mask_7/mask_53_7.dat | 1 + .../library/phpqrcode/cache/mask_7/mask_57_7.dat | 1 + .../library/phpqrcode/cache/mask_7/mask_61_7.dat | 2 + .../library/phpqrcode/cache/mask_7/mask_65_7.dat | 1 + .../library/phpqrcode/cache/mask_7/mask_69_7.dat | Bin 0 -> 202 bytes .../library/phpqrcode/cache/mask_7/mask_73_7.dat | Bin 0 -> 221 bytes .../library/phpqrcode/cache/mask_7/mask_77_7.dat | Bin 0 -> 226 bytes .../library/phpqrcode/cache/mask_7/mask_81_7.dat | 1 + .../library/phpqrcode/cache/mask_7/mask_85_7.dat | Bin 0 -> 213 bytes .../library/phpqrcode/cache/mask_7/mask_89_7.dat | Bin 0 -> 244 bytes .../library/phpqrcode/cache/mask_7/mask_93_7.dat | Bin 0 -> 248 bytes .../library/phpqrcode/cache/mask_7/mask_97_7.dat | 2 + addons/unishop/library/phpqrcode/images/qrcode.png | 0 addons/unishop/library/phpqrcode/index.php | 94 + addons/unishop/library/phpqrcode/phpqrcode.php | 3312 ++++++++++++++++++++ addons/unishop/library/phpqrcode/qrbitstream.php | 180 ++ addons/unishop/library/phpqrcode/qrconfig.php | 17 + addons/unishop/library/phpqrcode/qrconst.php | 54 + addons/unishop/library/phpqrcode/qrencode.php | 502 +++ addons/unishop/library/phpqrcode/qrimage.php | 95 + addons/unishop/library/phpqrcode/qrinput.php | 729 +++++ addons/unishop/library/phpqrcode/qrlib.php | 43 + addons/unishop/library/phpqrcode/qrmask.php | 328 ++ addons/unishop/library/phpqrcode/qrrscode.php | 210 ++ addons/unishop/library/phpqrcode/qrspec.php | 592 ++++ addons/unishop/library/phpqrcode/qrsplit.php | 311 ++ addons/unishop/library/phpqrcode/qrtools.php | 172 + addons/unishop/library/phpqrcode/tools/merge.bat | 2 + addons/unishop/library/phpqrcode/tools/merge.php | 70 + addons/unishop/library/phpqrcode/tools/merge.sh | 2 + .../library/phpqrcode/tools/merged_config.php | 17 + .../library/phpqrcode/tools/merged_header.php | 36 + .../cache/4e/819c837d54a6ed09abc77a8560a66f.php | 4 + runtime/log/202011/15.log | 802 +++++ runtime/temp/526fc10f0fce06131d1baa28c0e2a9a6.php | 73 + runtime/temp/7e5693e9e96b6a85dd7dde925571fa5f.php | 174 + runtime/temp/dee8a91fd4bf59cbbed6aeed00ef1a4f.php | 64 + 433 files changed, 11579 insertions(+), 1 deletion(-) create mode 100644 addons/unishop/library/phpqrcode/CHANGELOG create mode 100644 addons/unishop/library/phpqrcode/INSTALL create mode 100644 addons/unishop/library/phpqrcode/LICENSE create mode 100644 addons/unishop/library/phpqrcode/QrCode.php create mode 100644 addons/unishop/library/phpqrcode/README create mode 100644 addons/unishop/library/phpqrcode/VERSION create mode 100644 addons/unishop/library/phpqrcode/bindings/tcpdf/qrcode.php create mode 100644 addons/unishop/library/phpqrcode/cache/frame_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_1.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_10.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_10.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_11.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_11.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_12.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_12.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_13.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_13.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_14.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_14.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_15.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_15.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_16.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_16.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_17.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_17.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_18.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_18.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_19.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_19.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_2.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_20.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_20.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_21.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_21.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_22.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_22.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_23.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_23.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_24.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_24.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_25.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_25.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_26.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_26.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_27.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_27.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_28.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_28.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_29.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_29.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_3.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_30.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_30.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_31.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_31.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_32.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_32.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_33.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_33.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_34.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_34.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_35.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_35.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_36.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_36.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_37.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_37.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_38.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_38.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_39.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_39.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_4.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_40.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_40.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_5.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_6.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_7.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_8.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_8.png create mode 100644 addons/unishop/library/phpqrcode/cache/frame_9.dat create mode 100644 addons/unishop/library/phpqrcode/cache/frame_9.png create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_101_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_105_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_109_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_113_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_117_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_121_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_125_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_129_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_133_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_137_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_141_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_145_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_149_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_153_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_157_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_161_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_165_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_169_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_173_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_177_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_21_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_25_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_29_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_33_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_37_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_41_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_45_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_49_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_53_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_57_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_61_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_65_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_69_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_73_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_77_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_81_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_85_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_89_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_93_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_0/mask_97_0.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_101_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_105_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_109_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_113_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_117_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_121_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_125_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_129_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_133_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_137_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_141_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_145_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_149_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_153_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_157_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_161_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_165_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_169_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_173_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_177_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_21_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_25_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_29_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_33_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_37_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_41_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_45_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_49_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_53_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_57_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_61_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_65_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_69_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_73_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_77_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_81_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_85_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_89_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_93_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_1/mask_97_1.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_101_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_105_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_109_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_113_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_117_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_121_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_125_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_129_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_133_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_137_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_141_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_145_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_149_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_153_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_157_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_161_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_165_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_169_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_173_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_177_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_21_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_25_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_29_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_33_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_37_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_41_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_45_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_49_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_53_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_57_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_61_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_65_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_69_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_73_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_77_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_81_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_85_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_89_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_93_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_2/mask_97_2.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_101_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_105_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_109_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_113_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_117_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_121_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_125_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_129_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_133_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_137_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_141_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_145_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_149_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_153_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_157_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_161_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_165_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_169_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_173_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_177_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_21_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_25_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_29_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_33_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_37_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_41_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_45_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_49_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_53_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_57_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_61_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_65_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_69_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_73_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_77_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_81_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_85_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_89_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_93_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_3/mask_97_3.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_101_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_105_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_109_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_113_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_117_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_121_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_125_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_129_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_133_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_137_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_141_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_145_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_149_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_153_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_157_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_161_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_165_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_169_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_173_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_177_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_21_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_25_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_29_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_33_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_37_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_41_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_45_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_49_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_53_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_57_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_61_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_65_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_69_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_73_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_77_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_81_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_85_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_89_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_93_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_4/mask_97_4.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_101_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_105_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_109_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_113_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_117_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_121_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_125_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_129_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_133_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_137_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_141_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_145_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_149_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_153_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_157_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_161_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_165_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_169_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_173_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_177_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_21_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_25_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_29_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_33_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_37_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_41_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_45_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_49_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_53_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_57_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_61_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_65_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_69_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_73_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_77_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_81_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_85_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_89_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_93_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_5/mask_97_5.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_101_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_105_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_109_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_113_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_117_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_121_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_125_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_129_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_133_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_137_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_141_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_145_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_149_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_153_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_157_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_161_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_165_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_169_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_173_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_177_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_21_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_25_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_29_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_33_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_37_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_41_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_45_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_49_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_53_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_57_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_61_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_65_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_69_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_73_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_77_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_81_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_85_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_89_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_93_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_6/mask_97_6.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_101_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_105_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_109_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_113_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_117_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_121_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_125_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_129_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_133_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_137_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_141_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_145_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_149_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_153_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_157_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_161_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_165_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_169_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_173_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_177_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_21_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_25_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_29_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_33_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_37_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_41_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_45_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_49_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_53_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_57_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_61_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_65_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_69_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_73_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_77_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_81_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_85_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_89_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_93_7.dat create mode 100644 addons/unishop/library/phpqrcode/cache/mask_7/mask_97_7.dat create mode 100644 addons/unishop/library/phpqrcode/images/qrcode.png create mode 100644 addons/unishop/library/phpqrcode/index.php create mode 100644 addons/unishop/library/phpqrcode/phpqrcode.php create mode 100644 addons/unishop/library/phpqrcode/qrbitstream.php create mode 100644 addons/unishop/library/phpqrcode/qrconfig.php create mode 100644 addons/unishop/library/phpqrcode/qrconst.php create mode 100644 addons/unishop/library/phpqrcode/qrencode.php create mode 100644 addons/unishop/library/phpqrcode/qrimage.php create mode 100644 addons/unishop/library/phpqrcode/qrinput.php create mode 100644 addons/unishop/library/phpqrcode/qrlib.php create mode 100644 addons/unishop/library/phpqrcode/qrmask.php create mode 100644 addons/unishop/library/phpqrcode/qrrscode.php create mode 100644 addons/unishop/library/phpqrcode/qrspec.php create mode 100644 addons/unishop/library/phpqrcode/qrsplit.php create mode 100644 addons/unishop/library/phpqrcode/qrtools.php create mode 100644 addons/unishop/library/phpqrcode/tools/merge.bat create mode 100644 addons/unishop/library/phpqrcode/tools/merge.php create mode 100644 addons/unishop/library/phpqrcode/tools/merge.sh create mode 100644 addons/unishop/library/phpqrcode/tools/merged_config.php create mode 100644 addons/unishop/library/phpqrcode/tools/merged_header.php create mode 100644 runtime/cache/4e/819c837d54a6ed09abc77a8560a66f.php create mode 100644 runtime/log/202011/15.log create mode 100644 runtime/temp/526fc10f0fce06131d1baa28c0e2a9a6.php create mode 100644 runtime/temp/7e5693e9e96b6a85dd7dde925571fa5f.php create mode 100644 runtime/temp/dee8a91fd4bf59cbbed6aeed00ef1a4f.php diff --git a/addons/unishop/controller/Order.php b/addons/unishop/controller/Order.php index 68a7619..adfff5e 100644 --- a/addons/unishop/controller/Order.php +++ b/addons/unishop/controller/Order.php @@ -41,7 +41,7 @@ class Order extends Base */ protected $frequently = ['getorders']; - protected $noNeedLogin = []; + protected $noNeedLogin = ["addQRCode"]; /** * 创建订单 @@ -682,5 +682,35 @@ class Order extends Base } + /** + * Des: 生成二维码 + * Name: addQRCode + * @param $qCode string 生成的内容 + * @param $QRFile string 二维码图片路径 + * @param int $reType 1:返回成功或失败 2 返回图片数据流 + * @param bool|false $isCreate 生成的图片是否保留 当$reType=2才会有效 + * @param bool $logo 是否添加logo图 + * @param string $logoUrl logo图地址 + * @return array + * @author 倪宗锋 + */ + public function addQRCode() + { + include ROOT_PATH . '/addons/unishop/library/phpqrcode/phpqrcode.php'; + $value = $this->request->request('url');//二维码内容 + $errorCorrectionLevel = 'H';//容错级别 + $matrixPointSize = 6;//生成图片大小 + + $QRFile = ROOT_PATH . '/addons/unishop/library/phpqrcode/' . time().rand(1000,9999) . '.png'; + //生成二维码图片 + \QRcode::png($value, $QRFile, $errorCorrectionLevel, $matrixPointSize, 2); + $QR = imagecreatefromstring(file_get_contents($QRFile)); + + //输出图片 + Header("Content-type: image/png"); + ImagePng($QR); + @unlink($QRFile); + die; + } } diff --git a/addons/unishop/library/phpqrcode/CHANGELOG b/addons/unishop/library/phpqrcode/CHANGELOG new file mode 100644 index 0000000..a6c53d2 --- /dev/null +++ b/addons/unishop/library/phpqrcode/CHANGELOG @@ -0,0 +1,38 @@ +* 1.0.0 build 2010031920 + + - first public release + - help in readme, install + - cleanup ans separation of QRtools and QRspec + - now TCPDF binding requires minimal changes in TCPDF, having most of job + done in QRtools tcpdfBarcodeArray + - nicer QRtools::timeBenchmark output + - license and copyright notices in files + - indent cleanup - from tab to 4spc, keep it that way please :) + - sf project, repository, wiki + - simple code generator in index.php + +* 1.1.0 build 2010032113 + + - added merge tool wich generate merged version of code + located in phpqrcode.php + - splited qrconst.php from qrlib.php + +* 1.1.1 build 2010032405 + + - patch by Rick Seymour allowing saving PNG and displaying it at the same time + - added version info in VERSION file + - modified merge tool to include version info into generated file + - fixed e-mail in almost all head comments + +* 1.1.2 build 2010032722 + + - full integration with TCPDF thanks to Nicola Asuni, it's author + - fixed bug with alphanumeric encoding detection + +* 1.1.3 build 2010081807 + + - short opening tags replaced with standard ones + +* 1.1.4 build 2010100721 + + - added missing static keyword QRinput::check (found by Luke Brookhart, Onjax LLC) diff --git a/addons/unishop/library/phpqrcode/INSTALL b/addons/unishop/library/phpqrcode/INSTALL new file mode 100644 index 0000000..945c95a --- /dev/null +++ b/addons/unishop/library/phpqrcode/INSTALL @@ -0,0 +1,67 @@ +== REQUIREMENTS == + + * PHP5 + * PHP GD2 extension with JPEG and PNG support + +== INSTALLATION == + +If you want to recreate cache by yourself make sure cache directory is +writable and you have permisions to write into it. Also make sure you are +able to read files in it if you have cache option enabled + +== CONFIGURATION == + +Feel free to modify config constants in qrconfig.php file. Read about it in +provided comments and project wiki page (links in README file) + +== QUICK START == + +Notice: probably you should'nt use all of this in same script :) + +encode('PHP QR Code :)'); +QRspec::debug($tab, true); + +== TCPDF INTEGRATION == + +Inside bindings/tcpdf you will find slightly modified 2dbarcodes.php. +Instal phpqrcode liblaty inside tcpdf folder, then overwrite (or merge) +2dbarcodes.php + +Then use similar as example #50 from TCPDF examples: + + true, + 'padding' => 4, + 'fgcolor' => array(0,0,0), + 'bgcolor' => false, //array(255,255,255) +); + +//code name: QR, specify error correction level after semicolon (L,M,Q,H) +$pdf->write2DBarcode('PHP QR Code :)', 'QR,L', '', '', 30, 30, $style, 'N'); diff --git a/addons/unishop/library/phpqrcode/LICENSE b/addons/unishop/library/phpqrcode/LICENSE new file mode 100644 index 0000000..31afd6d --- /dev/null +++ b/addons/unishop/library/phpqrcode/LICENSE @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/addons/unishop/library/phpqrcode/QrCode.php b/addons/unishop/library/phpqrcode/QrCode.php new file mode 100644 index 0000000..e029693 --- /dev/null +++ b/addons/unishop/library/phpqrcode/QrCode.php @@ -0,0 +1,15 @@ + +// http://phpqrcode.sourceforge.net/ +// https://sourceforge.net/projects/phpqrcode/ +// +// The "PHP QR Code encoder" is based on +// "C libqrencode library" (ver. 3.1.1) +// License: GNU-LGPL 2.1 +// Copyright (C) 2006-2010 by Kentaro Fukuchi +// http://megaui.net/fukuchi/works/qrencode/index.en.html +// +// Reed-Solomon code encoder is written by Phil Karn, KA9Q. +// Copyright (C) 2002-2006 Phil Karn, KA9Q +// +// QR Code is registered trademark of DENSO WAVE INCORPORATED +// http://www.denso-wave.com/qrcode/index-e.html +// --------------------------------------------------------- +// +// Author: Nicola Asuni +// +// (c) Copyright 2010: +// Nicola Asuni +// Tecnick.com S.r.l. +// Via della Pace, 11 +// 09044 Quartucciu (CA) +// ITALY +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Class to create QR-code arrays for TCPDF class. + * QR Code symbol is a 2D barcode that can be scanned by handy terminals such as a mobile phone with CCD. + * The capacity of QR Code is up to 7000 digits or 4000 characters, and has high robustness. + * This class supports QR Code model 2, described in JIS (Japanese Industrial Standards) X0510:2004 or ISO/IEC 18004. + * Currently the following features are not supported: ECI and FNC1 mode, Micro QR Code, QR Code model 1, Structured mode. + * + * This class is derived from "PHP QR Code encoder" by Dominik Dzienia (http://phpqrcode.sourceforge.net/) based on "libqrencode C library 3.1.1." by Kentaro Fukuchi (http://megaui.net/fukuchi/works/qrencode/index.en.html), contains Reed-Solomon code written by Phil Karn, KA9Q. QR Code is registered trademark of DENSO WAVE INCORPORATED (http://www.denso-wave.com/qrcode/index-e.html). + * Please read comments on this class source file for full copyright and license information. + * + * @package com.tecnick.tcpdf + * @abstract Class for generating QR-code array for TCPDF. + * @author Nicola Asuni + * @copyright 2010 Nicola Asuni - Tecnick.com S.r.l (www.tecnick.com) Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com + * @link http://www.tcpdf.org + * @license http://www.gnu.org/copyleft/lesser.html LGPL + * @version 1.0.002 + */ + +// definitions +if (!defined('QRCODEDEFS')) { + + /** + * Indicate that definitions for this class are set + */ + define('QRCODEDEFS', true); + + // ----------------------------------------------------- + + // Encoding modes (characters which can be encoded in QRcode) + + /** + * Encoding mode + */ + define('QR_MODE_NL', -1); + + /** + * Encoding mode numeric (0-9). 3 characters are encoded to 10bit length. In theory, 7089 characters or less can be stored in a QRcode. + */ + define('QR_MODE_NM', 0); + + /** + * Encoding mode alphanumeric (0-9A-Z $%*+-./:) 45characters. 2 characters are encoded to 11bit length. In theory, 4296 characters or less can be stored in a QRcode. + */ + define('QR_MODE_AN', 1); + + /** + * Encoding mode 8bit byte data. In theory, 2953 characters or less can be stored in a QRcode. + */ + define('QR_MODE_8B', 2); + + /** + * Encoding mode KANJI. A KANJI character (multibyte character) is encoded to 13bit length. In theory, 1817 characters or less can be stored in a QRcode. + */ + define('QR_MODE_KJ', 3); + + /** + * Encoding mode STRUCTURED (currently unsupported) + */ + define('QR_MODE_ST', 4); + + // ----------------------------------------------------- + + // Levels of error correction. + // QRcode has a function of an error correcting for miss reading that white is black. + // Error correcting is defined in 4 level as below. + + /** + * Error correction level L : About 7% or less errors can be corrected. + */ + define('QR_ECLEVEL_L', 0); + + /** + * Error correction level M : About 15% or less errors can be corrected. + */ + define('QR_ECLEVEL_M', 1); + + /** + * Error correction level Q : About 25% or less errors can be corrected. + */ + define('QR_ECLEVEL_Q', 2); + + /** + * Error correction level H : About 30% or less errors can be corrected. + */ + define('QR_ECLEVEL_H', 3); + + // ----------------------------------------------------- + + // Version. Size of QRcode is defined as version. + // Version is from 1 to 40. + // Version 1 is 21*21 matrix. And 4 modules increases whenever 1 version increases. + // So version 40 is 177*177 matrix. + + /** + * Maximum QR Code version. + */ + define('QRSPEC_VERSION_MAX', 40); + + /** + * Maximum matrix size for maximum version (version 40 is 177*177 matrix). + */ + define('QRSPEC_WIDTH_MAX', 177); + + // ----------------------------------------------------- + + /** + * Matrix index to get width from $capacity array. + */ + define('QRCAP_WIDTH', 0); + + /** + * Matrix index to get number of words from $capacity array. + */ + define('QRCAP_WORDS', 1); + + /** + * Matrix index to get remainder from $capacity array. + */ + define('QRCAP_REMINDER', 2); + + /** + * Matrix index to get error correction level from $capacity array. + */ + define('QRCAP_EC', 3); + + // ----------------------------------------------------- + + // Structure (currently usupported) + + /** + * Number of header bits for structured mode + */ + define('STRUCTURE_HEADER_BITS', 20); + + /** + * Max number of symbols for structured mode + */ + define('MAX_STRUCTURED_SYMBOLS', 16); + + // ----------------------------------------------------- + + // Masks + + /** + * Down point base value for case 1 mask pattern (concatenation of same color in a line or a column) + */ + define('N1', 3); + + /** + * Down point base value for case 2 mask pattern (module block of same color) + */ + define('N2', 3); + + /** + * Down point base value for case 3 mask pattern (1:1:3:1:1(dark:bright:dark:bright:dark)pattern in a line or a column) + */ + define('N3', 40); + + /** + * Down point base value for case 4 mask pattern (ration of dark modules in whole) + */ + define('N4', 10); + + // ----------------------------------------------------- + + // Optimization settings + + /** + * if true, estimates best mask (spec. default, but extremally slow; set to false to significant performance boost but (propably) worst quality code + */ + define('QR_FIND_BEST_MASK', true); + + /** + * if false, checks all masks available, otherwise value tells count of masks need to be checked, mask id are got randomly + */ + define('QR_FIND_FROM_RANDOM', 2); + + /** + * when QR_FIND_BEST_MASK === false + */ + define('QR_DEFAULT_MASK', 2); + + // ----------------------------------------------------- + +} // end of definitions + +// #*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*# + +if (!class_exists('QRcode', false)) { + + // for compaibility with PHP4 + if (!function_exists('str_split')) { + /** + * Convert a string to an array (needed for PHP4 compatibility) + * @param string $string The input string. + * @param int $split_length Maximum length of the chunk. + * @return If the optional split_length parameter is specified, the returned array will be broken down into chunks with each being split_length in length, otherwise each chunk will be one character in length. FALSE is returned if split_length is less than 1. If the split_length length exceeds the length of string , the entire string is returned as the first (and only) array element. + */ + function str_split($string, $split_length=1) { + if ((strlen($string) > $split_length) OR (!$split_length)) { + do { + $c = strlen($string); + $parts[] = substr($string, 0, $split_length); + $string = substr($string, $split_length); + } while ($string !== false); + } else { + $parts = array($string); + } + return $parts; + } + } + + // ##################################################### + + /** + * Class to create QR-code arrays for TCPDF class. + * QR Code symbol is a 2D barcode that can be scanned by handy terminals such as a mobile phone with CCD. + * The capacity of QR Code is up to 7000 digits or 4000 characters, and has high robustness. + * This class supports QR Code model 2, described in JIS (Japanese Industrial Standards) X0510:2004 or ISO/IEC 18004. + * Currently the following features are not supported: ECI and FNC1 mode, Micro QR Code, QR Code model 1, Structured mode. + * + * This class is derived from "PHP QR Code encoder" by Dominik Dzienia (http://phpqrcode.sourceforge.net/) based on "libqrencode C library 3.1.1." by Kentaro Fukuchi (http://megaui.net/fukuchi/works/qrencode/index.en.html), contains Reed-Solomon code written by Phil Karn, KA9Q. QR Code is registered trademark of DENSO WAVE INCORPORATED (http://www.denso-wave.com/qrcode/index-e.html). + * Please read comments on this class source file for full copyright and license information. + * + * @name QRcode + * @package com.tecnick.tcpdf + * @abstract Class for generating QR-code array for TCPDF. + * @author Nicola Asuni + * @copyright 2010 Nicola Asuni - Tecnick.com S.r.l (www.tecnick.com) Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com + * @link http://www.tcpdf.org + * @license http://www.gnu.org/copyleft/lesser.html LGPL + * @version 1.0.002 + */ + class QRcode { + + /** + * @var barcode array to be returned which is readable by TCPDF + * @access protected + */ + protected $barcode_array = array(); + + /** + * @var QR code version. Size of QRcode is defined as version. Version is from 1 to 40. Version 1 is 21*21 matrix. And 4 modules increases whenever 1 version increases. So version 40 is 177*177 matrix. + * @access protected + */ + protected $version = 0; + + /** + * @var Levels of error correction. See definitions for possible values. + * @access protected + */ + protected $level = QR_ECLEVEL_L; + + /** + * @var Encoding mode + * @access protected + */ + protected $hint = QR_MODE_8B; + + /** + * @var if true the input string will be converted to uppercase + * @access protected + */ + protected $casesensitive = true; + + /** + * @var structured QR code (not supported yet) + * @access protected + */ + protected $structured = 0; + + /** + * @var mask data + * @access protected + */ + protected $data; + + // FrameFiller + + /** + * @var width + * @access protected + */ + protected $width; + + /** + * @var frame + * @access protected + */ + protected $frame; + + /** + * @var X position of bit + * @access protected + */ + protected $x; + + /** + * @var Y position of bit + * @access protected + */ + protected $y; + + /** + * @var direction + * @access protected + */ + protected $dir; + + /** + * @var single bit + * @access protected + */ + protected $bit; + + // ---- QRrawcode ---- + + /** + * @var data code + * @access protected + */ + protected $datacode = array(); + + /** + * @var error correction code + * @access protected + */ + protected $ecccode = array(); + + /** + * @var blocks + * @access protected + */ + protected $blocks; + + /** + * @var Reed-Solomon blocks + * @access protected + */ + protected $rsblocks = array(); //of RSblock + + /** + * @var counter + * @access protected + */ + protected $count; + + /** + * @var data length + * @access protected + */ + protected $dataLength; + + /** + * @var error correction length + * @access protected + */ + protected $eccLength; + + /** + * @var b1 + * @access protected + */ + protected $b1; + + // ---- QRmask ---- + + /** + * @var run length + * @access protected + */ + protected $runLength = array(); + + // ---- QRsplit ---- + + /** + * @var input data string + * @access protected + */ + protected $dataStr = ''; + + /** + * @var input items + * @access protected + */ + protected $items; + + // Reed-Solomon items + + /** + * @var Reed-Solomon items + * @access protected + */ + protected $rsitems = array(); + + /** + * @var array of frames + * @access protected + */ + protected $frames = array(); + + /** + * @var alphabet-numeric convesion table + * @access protected + */ + protected $anTable = array( + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // + 36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43, // + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1, // + -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, // + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, // + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 // + ); + + /** + * @var array Table of the capacity of symbols + * See Table 1 (pp.13) and Table 12-16 (pp.30-36), JIS X0510:2004. + * @access protected + */ + protected $capacity = array( + array( 0, 0, 0, array( 0, 0, 0, 0)), // + array( 21, 26, 0, array( 7, 10, 13, 17)), // 1 + array( 25, 44, 7, array( 10, 16, 22, 28)), // + array( 29, 70, 7, array( 15, 26, 36, 44)), // + array( 33, 100, 7, array( 20, 36, 52, 64)), // + array( 37, 134, 7, array( 26, 48, 72, 88)), // 5 + array( 41, 172, 7, array( 36, 64, 96, 112)), // + array( 45, 196, 0, array( 40, 72, 108, 130)), // + array( 49, 242, 0, array( 48, 88, 132, 156)), // + array( 53, 292, 0, array( 60, 110, 160, 192)), // + array( 57, 346, 0, array( 72, 130, 192, 224)), // 10 + array( 61, 404, 0, array( 80, 150, 224, 264)), // + array( 65, 466, 0, array( 96, 176, 260, 308)), // + array( 69, 532, 0, array( 104, 198, 288, 352)), // + array( 73, 581, 3, array( 120, 216, 320, 384)), // + array( 77, 655, 3, array( 132, 240, 360, 432)), // 15 + array( 81, 733, 3, array( 144, 280, 408, 480)), // + array( 85, 815, 3, array( 168, 308, 448, 532)), // + array( 89, 901, 3, array( 180, 338, 504, 588)), // + array( 93, 991, 3, array( 196, 364, 546, 650)), // + array( 97, 1085, 3, array( 224, 416, 600, 700)), // 20 + array(101, 1156, 4, array( 224, 442, 644, 750)), // + array(105, 1258, 4, array( 252, 476, 690, 816)), // + array(109, 1364, 4, array( 270, 504, 750, 900)), // + array(113, 1474, 4, array( 300, 560, 810, 960)), // + array(117, 1588, 4, array( 312, 588, 870, 1050)), // 25 + array(121, 1706, 4, array( 336, 644, 952, 1110)), // + array(125, 1828, 4, array( 360, 700, 1020, 1200)), // + array(129, 1921, 3, array( 390, 728, 1050, 1260)), // + array(133, 2051, 3, array( 420, 784, 1140, 1350)), // + array(137, 2185, 3, array( 450, 812, 1200, 1440)), // 30 + array(141, 2323, 3, array( 480, 868, 1290, 1530)), // + array(145, 2465, 3, array( 510, 924, 1350, 1620)), // + array(149, 2611, 3, array( 540, 980, 1440, 1710)), // + array(153, 2761, 3, array( 570, 1036, 1530, 1800)), // + array(157, 2876, 0, array( 570, 1064, 1590, 1890)), // 35 + array(161, 3034, 0, array( 600, 1120, 1680, 1980)), // + array(165, 3196, 0, array( 630, 1204, 1770, 2100)), // + array(169, 3362, 0, array( 660, 1260, 1860, 2220)), // + array(173, 3532, 0, array( 720, 1316, 1950, 2310)), // + array(177, 3706, 0, array( 750, 1372, 2040, 2430)) // 40 + ); + + /** + * @var array Length indicator + * @access protected + */ + protected $lengthTableBits = array( + array(10, 12, 14), + array( 9, 11, 13), + array( 8, 16, 16), + array( 8, 10, 12) + ); + + /** + * @var array Table of the error correction code (Reed-Solomon block) + * See Table 12-16 (pp.30-36), JIS X0510:2004. + * @access protected + */ + protected $eccTable = array( + array(array( 0, 0), array( 0, 0), array( 0, 0), array( 0, 0)), // + array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), // 1 + array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), // + array(array( 1, 0), array( 1, 0), array( 2, 0), array( 2, 0)), // + array(array( 1, 0), array( 2, 0), array( 2, 0), array( 4, 0)), // + array(array( 1, 0), array( 2, 0), array( 2, 2), array( 2, 2)), // 5 + array(array( 2, 0), array( 4, 0), array( 4, 0), array( 4, 0)), // + array(array( 2, 0), array( 4, 0), array( 2, 4), array( 4, 1)), // + array(array( 2, 0), array( 2, 2), array( 4, 2), array( 4, 2)), // + array(array( 2, 0), array( 3, 2), array( 4, 4), array( 4, 4)), // + array(array( 2, 2), array( 4, 1), array( 6, 2), array( 6, 2)), // 10 + array(array( 4, 0), array( 1, 4), array( 4, 4), array( 3, 8)), // + array(array( 2, 2), array( 6, 2), array( 4, 6), array( 7, 4)), // + array(array( 4, 0), array( 8, 1), array( 8, 4), array(12, 4)), // + array(array( 3, 1), array( 4, 5), array(11, 5), array(11, 5)), // + array(array( 5, 1), array( 5, 5), array( 5, 7), array(11, 7)), // 15 + array(array( 5, 1), array( 7, 3), array(15, 2), array( 3, 13)), // + array(array( 1, 5), array(10, 1), array( 1, 15), array( 2, 17)), // + array(array( 5, 1), array( 9, 4), array(17, 1), array( 2, 19)), // + array(array( 3, 4), array( 3, 11), array(17, 4), array( 9, 16)), // + array(array( 3, 5), array( 3, 13), array(15, 5), array(15, 10)), // 20 + array(array( 4, 4), array(17, 0), array(17, 6), array(19, 6)), // + array(array( 2, 7), array(17, 0), array( 7, 16), array(34, 0)), // + array(array( 4, 5), array( 4, 14), array(11, 14), array(16, 14)), // + array(array( 6, 4), array( 6, 14), array(11, 16), array(30, 2)), // + array(array( 8, 4), array( 8, 13), array( 7, 22), array(22, 13)), // 25 + array(array(10, 2), array(19, 4), array(28, 6), array(33, 4)), // + array(array( 8, 4), array(22, 3), array( 8, 26), array(12, 28)), // + array(array( 3, 10), array( 3, 23), array( 4, 31), array(11, 31)), // + array(array( 7, 7), array(21, 7), array( 1, 37), array(19, 26)), // + array(array( 5, 10), array(19, 10), array(15, 25), array(23, 25)), // 30 + array(array(13, 3), array( 2, 29), array(42, 1), array(23, 28)), // + array(array(17, 0), array(10, 23), array(10, 35), array(19, 35)), // + array(array(17, 1), array(14, 21), array(29, 19), array(11, 46)), // + array(array(13, 6), array(14, 23), array(44, 7), array(59, 1)), // + array(array(12, 7), array(12, 26), array(39, 14), array(22, 41)), // 35 + array(array( 6, 14), array( 6, 34), array(46, 10), array( 2, 64)), // + array(array(17, 4), array(29, 14), array(49, 10), array(24, 46)), // + array(array( 4, 18), array(13, 32), array(48, 14), array(42, 32)), // + array(array(20, 4), array(40, 7), array(43, 22), array(10, 67)), // + array(array(19, 6), array(18, 31), array(34, 34), array(20, 61)) // 40 + ); + + /** + * @var array Positions of alignment patterns. + * This array includes only the second and the third position of the alignment patterns. Rest of them can be calculated from the distance between them. + * See Table 1 in Appendix E (pp.71) of JIS X0510:2004. + * @access protected + */ + protected $alignmentPattern = array( + array( 0, 0), + array( 0, 0), array(18, 0), array(22, 0), array(26, 0), array(30, 0), // 1- 5 + array(34, 0), array(22, 38), array(24, 42), array(26, 46), array(28, 50), // 6-10 + array(30, 54), array(32, 58), array(34, 62), array(26, 46), array(26, 48), // 11-15 + array(26, 50), array(30, 54), array(30, 56), array(30, 58), array(34, 62), // 16-20 + array(28, 50), array(26, 50), array(30, 54), array(28, 54), array(32, 58), // 21-25 + array(30, 58), array(34, 62), array(26, 50), array(30, 54), array(26, 52), // 26-30 + array(30, 56), array(34, 60), array(30, 58), array(34, 62), array(30, 54), // 31-35 + array(24, 50), array(28, 54), array(32, 58), array(26, 54), array(30, 58) // 35-40 + ); + + /** + * @var array Version information pattern (BCH coded). + * See Table 1 in Appendix D (pp.68) of JIS X0510:2004. + * size: [QRSPEC_VERSION_MAX - 6] + * @access protected + */ + protected $versionPattern = array( + 0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d, // + 0x0f928, 0x10b78, 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9, // + 0x177ec, 0x18ec4, 0x191e1, 0x1afab, 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75, // + 0x1f250, 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b, 0x2542e, 0x26a64, // + 0x27541, 0x28c69 + ); + + /** + * @var array Format information + * @access protected + */ + protected $formatInfo = array( + array(0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976), // + array(0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0), // + array(0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed), // + array(0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b) // + ); + + + // ------------------------------------------------- + // ------------------------------------------------- + + + /** + * This is the class constructor. + * Creates a QRcode object + * @param string $code code to represent using QRcode + * @param string $eclevel error level: + * @access public + * @since 1.0.000 + */ + public function __construct($code, $eclevel = 'L') { + $barcode_array = array(); + if ((is_null($code)) OR ($code == '\0') OR ($code == '')) { + return false; + } + // set error correction level + $this->level = array_search($eclevel, array('L', 'M', 'Q', 'H')); + if ($this->level === false) { + $this->level = QR_ECLEVEL_L; + } + if (($this->hint != QR_MODE_8B) AND ($this->hint != QR_MODE_KJ)) { + return false; + } + if (($this->version < 0) OR ($this->version > QRSPEC_VERSION_MAX)) { + return false; + } + $this->items = array(); + $this->encodeString($code); + $qrTab = $this->binarize($this->data); + $size = count($qrTab); + $barcode_array['num_rows'] = $size; + $barcode_array['num_cols'] = $size; + $barcode_array['bcode'] = array(); + foreach ($qrTab as $line) { + $arrAdd = array(); + foreach (str_split($line) as $char) { + $arrAdd[] = ($char=='1')?1:0; + } + $barcode_array['bcode'][] = $arrAdd; + } + $this->barcode_array = $barcode_array; + } + + /** + * Returns a barcode array which is readable by TCPDF + * @return array barcode array readable by TCPDF; + * @access public + */ + public function getBarcodeArray() { + return $this->barcode_array; + } + + /** + * Convert the frame in binary form + * @param array $frame array to binarize + * @return array frame in binary form + */ + protected function binarize($frame) { + $len = count($frame); + // the frame is square (width = height) + foreach ($frame as &$frameLine) { + for ($i=0; $i<$len; $i++) { + $frameLine[$i] = (ord($frameLine[$i])&1)?'1':'0'; + } + } + return $frame; + } + + /** + * Encode the input string to QR code + * @param string $string input string to encode + */ + protected function encodeString($string) { + $this->dataStr = $string; + if (!$this->casesensitive) { + $this->toUpper(); + } + $ret = $this->splitString(); + if ($ret < 0) { + return NULL; + } + $this->encodeMask(-1); + } + + /** + * Encode mask + * @param int $mask masking mode + */ + protected function encodeMask($mask) { + $spec = array(0, 0, 0, 0, 0); + $this->datacode = $this->getByteStream($this->items); + if (is_null($this->datacode)) { + return NULL; + } + $spec = $this->getEccSpec($this->version, $this->level, $spec); + $this->b1 = $this->rsBlockNum1($spec); + $this->dataLength = $this->rsDataLength($spec); + $this->eccLength = $this->rsEccLength($spec); + $this->ecccode = array_fill(0, $this->eccLength, 0); + $this->blocks = $this->rsBlockNum($spec); + $ret = $this->init($spec); + if ($ret < 0) { + return NULL; + } + $this->count = 0; + $this->width = $this->getWidth($this->version); + $this->frame = $this->newFrame($this->version); + $this->x = $this->width - 1; + $this->y = $this->width - 1; + $this->dir = -1; + $this->bit = -1; + // inteleaved data and ecc codes + for ($i=0; $i < ($this->dataLength + $this->eccLength); $i++) { + $code = $this->getCode(); + $bit = 0x80; + for ($j=0; $j<8; $j++) { + $addr = $this->getNextPosition(); + $this->setFrameAt($addr, 0x02 | (($bit & $code) != 0)); + $bit = $bit >> 1; + } + } + // remainder bits + $j = $this->getRemainder($this->version); + for ($i=0; $i<$j; $i++) { + $addr = $this->getNextPosition(); + $this->setFrameAt($addr, 0x02); + } + // masking + $this->runLength = array_fill(0, QRSPEC_WIDTH_MAX + 1, 0); + if ($mask < 0) { + if (QR_FIND_BEST_MASK) { + $masked = $this->mask($this->width, $this->frame, $this->level); + } else { + $masked = $this->makeMask($this->width, $this->frame, (intval(QR_DEFAULT_MASK) % 8), $this->level); + } + } else { + $masked = $this->makeMask($this->width, $this->frame, $mask, $this->level); + } + if ($masked == NULL) { + return NULL; + } + $this->data = $masked; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // FrameFiller + + /** + * Set frame value at specified position + * @param array $at x,y position + * @param int $val value of the character to set + */ + protected function setFrameAt($at, $val) { + $this->frame[$at['y']][$at['x']] = chr($val); + } + + /** + * Get frame value at specified position + * @param array $at x,y position + * @return value at specified position + */ + protected function getFrameAt($at) { + return ord($this->frame[$at['y']][$at['x']]); + } + + /** + * Return the next frame position + * @return array of x,y coordinates + */ + protected function getNextPosition() { + do { + if ($this->bit == -1) { + $this->bit = 0; + return array('x'=>$this->x, 'y'=>$this->y); + } + $x = $this->x; + $y = $this->y; + $w = $this->width; + if ($this->bit == 0) { + $x--; + $this->bit++; + } else { + $x++; + $y += $this->dir; + $this->bit--; + } + if ($this->dir < 0) { + if ($y < 0) { + $y = 0; + $x -= 2; + $this->dir = 1; + if ($x == 6) { + $x--; + $y = 9; + } + } + } else { + if ($y == $w) { + $y = $w - 1; + $x -= 2; + $this->dir = -1; + if ($x == 6) { + $x--; + $y -= 8; + } + } + } + if (($x < 0) OR ($y < 0)) { + return NULL; + } + $this->x = $x; + $this->y = $y; + } while(ord($this->frame[$y][$x]) & 0x80); + return array('x'=>$x, 'y'=>$y); + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRrawcode + + /** + * Initialize code. + * @param array $spec array of ECC specification + * @return 0 in case of success, -1 in case of error + */ + protected function init($spec) { + $dl = $this->rsDataCodes1($spec); + $el = $this->rsEccCodes1($spec); + $rs = $this->init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + $blockNo = 0; + $dataPos = 0; + $eccPos = 0; + $endfor = $this->rsBlockNum1($spec); + for ($i=0; $i < $endfor; ++$i) { + $ecc = array_slice($this->ecccode, $eccPos); + $this->rsblocks[$blockNo] = array(); + $this->rsblocks[$blockNo]['dataLength'] = $dl; + $this->rsblocks[$blockNo]['data'] = array_slice($this->datacode, $dataPos); + $this->rsblocks[$blockNo]['eccLength'] = $el; + $ecc = $this->encode_rs_char($rs, $this->rsblocks[$blockNo]['data'], $ecc); + $this->rsblocks[$blockNo]['ecc'] = $ecc; + $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + if ($this->rsBlockNum2($spec) == 0) { + return 0; + } + $dl = $this->rsDataCodes2($spec); + $el = $this->rsEccCodes2($spec); + $rs = $this->init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + if ($rs == NULL) { + return -1; + } + $endfor = $this->rsBlockNum2($spec); + for ($i=0; $i < $endfor; ++$i) { + $ecc = array_slice($this->ecccode, $eccPos); + $this->rsblocks[$blockNo] = array(); + $this->rsblocks[$blockNo]['dataLength'] = $dl; + $this->rsblocks[$blockNo]['data'] = array_slice($this->datacode, $dataPos); + $this->rsblocks[$blockNo]['eccLength'] = $el; + $ecc = $this->encode_rs_char($rs, $this->rsblocks[$blockNo]['data'], $ecc); + $this->rsblocks[$blockNo]['ecc'] = $ecc; + $this->ecccode = array_merge(array_slice($this->ecccode, 0, $eccPos), $ecc); + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + return 0; + } + + /** + * Return Reed-Solomon block code. + * @return array rsblocks + */ + protected function getCode() { + if ($this->count < $this->dataLength) { + $row = $this->count % $this->blocks; + $col = $this->count / $this->blocks; + if ($col >= $this->rsblocks[0]['dataLength']) { + $row += $this->b1; + } + $ret = $this->rsblocks[$row]['data'][$col]; + } elseif ($this->count < $this->dataLength + $this->eccLength) { + $row = ($this->count - $this->dataLength) % $this->blocks; + $col = ($this->count - $this->dataLength) / $this->blocks; + $ret = $this->rsblocks[$row]['ecc'][$col]; + } else { + return 0; + } + $this->count++; + return $ret; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRmask + + /** + * Write Format Information on frame and returns the number of black bits + * @param int $width frame width + * @param array $frame frame + * @param array $mask masking mode + * @param int $level error correction level + * @return int blacks + */ + protected function writeFormatInformation($width, &$frame, $mask, $level) { + $blacks = 0; + $format = $this->getFormatInfo($mask, $level); + for ($i=0; $i<8; ++$i) { + if ($format & 1) { + $blacks += 2; + $v = 0x85; + } else { + $v = 0x84; + } + $frame[8][$width - 1 - $i] = chr($v); + if ($i < 6) { + $frame[$i][8] = chr($v); + } else { + $frame[$i + 1][8] = chr($v); + } + $format = $format >> 1; + } + for ($i=0; $i<7; ++$i) { + if ($format & 1) { + $blacks += 2; + $v = 0x85; + } else { + $v = 0x84; + } + $frame[$width - 7 + $i][8] = chr($v); + if ($i == 0) { + $frame[8][7] = chr($v); + } else { + $frame[8][6 - $i] = chr($v); + } + $format = $format >> 1; + } + return $blacks; + } + + /** + * mask0 + * @param int $x X position + * @param int $y Y position + * @return int mask + */ + protected function mask0($x, $y) { + return ($x + $y) & 1; + } + + /** + * mask1 + * @param int $x X position + * @param int $y Y position + * @return int mask + */ + protected function mask1($x, $y) { + return ($y & 1); + } + + /** + * mask2 + * @param int $x X position + * @param int $y Y position + * @return int mask + */ + protected function mask2($x, $y) { + return ($x % 3); + } + + /** + * mask3 + * @param int $x X position + * @param int $y Y position + * @return int mask + */ + protected function mask3($x, $y) { + return ($x + $y) % 3; + } + + /** + * mask4 + * @param int $x X position + * @param int $y Y position + * @return int mask + */ + protected function mask4($x, $y) { + return (((int)($y / 2)) + ((int)($x / 3))) & 1; + } + + /** + * mask5 + * @param int $x X position + * @param int $y Y position + * @return int mask + */ + protected function mask5($x, $y) { + return (($x * $y) & 1) + ($x * $y) % 3; + } + + /** + * mask6 + * @param int $x X position + * @param int $y Y position + * @return int mask + */ + protected function mask6($x, $y) { + return ((($x * $y) & 1) + ($x * $y) % 3) & 1; + } + + /** + * mask7 + * @param int $x X position + * @param int $y Y position + * @return int mask + */ + protected function mask7($x, $y) { + return ((($x * $y) % 3) + (($x + $y) & 1)) & 1; + } + + /** + * Return bitmask + * @param int $maskNo mask number + * @param int $width width + * @param array $frame frame + * @return array bitmask + */ + protected function generateMaskNo($maskNo, $width, $frame) { + $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); + for ($y=0; $y<$width; ++$y) { + for ($x=0; $x<$width; ++$x) { + if (ord($frame[$y][$x]) & 0x80) { + $bitMask[$y][$x] = 0; + } else { + $maskFunc = call_user_func(array($this, 'mask'.$maskNo), $x, $y); + $bitMask[$y][$x] = ($maskFunc == 0)?1:0; + } + } + } + return $bitMask; + } + + /** + * makeMaskNo + * @param int $maskNo + * @param int $width + * @param int $s + * @param int $d + * @param boolean $maskGenOnly + * @return int b + */ + protected function makeMaskNo($maskNo, $width, $s, &$d, $maskGenOnly=false) { + $b = 0; + $bitMask = array(); + $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); + if ($maskGenOnly) { + return; + } + $d = $s; + for ($y=0; $y<$width; ++$y) { + for ($x=0; $x<$width; ++$x) { + if ($bitMask[$y][$x] == 1) { + $d[$y][$x] = chr(ord($s[$y][$x]) ^ (int)$bitMask[$y][$x]); + } + $b += (int)(ord($d[$y][$x]) & 1); + } + } + return $b; + } + + /** + * makeMask + * @param int $width + * @param array $frame + * @param int $maskNo + * @param int $level + * @return array mask + */ + protected function makeMask($width, $frame, $maskNo, $level) { + $masked = array_fill(0, $width, str_repeat("\0", $width)); + $this->makeMaskNo($maskNo, $width, $frame, $masked); + $this->writeFormatInformation($width, $masked, $maskNo, $level); + return $masked; + } + + /** + * calcN1N3 + * @param int $length + * @return int demerit + */ + protected function calcN1N3($length) { + $demerit = 0; + for ($i=0; $i<$length; ++$i) { + if ($this->runLength[$i] >= 5) { + $demerit += (N1 + ($this->runLength[$i] - 5)); + } + if ($i & 1) { + if (($i >= 3) AND ($i < ($length-2)) AND ($this->runLength[$i] % 3 == 0)) { + $fact = (int)($this->runLength[$i] / 3); + if (($this->runLength[$i-2] == $fact) + AND ($this->runLength[$i-1] == $fact) + AND ($this->runLength[$i+1] == $fact) + AND ($this->runLength[$i+2] == $fact)) { + if (($this->runLength[$i-3] < 0) OR ($this->runLength[$i-3] >= (4 * $fact))) { + $demerit += N3; + } elseif ((($i+3) >= $length) OR ($this->runLength[$i+3] >= (4 * $fact))) { + $demerit += N3; + } + } + } + } + } + return $demerit; + } + + /** + * evaluateSymbol + * @param int $width + * @param array $frame + * @return int demerit + */ + protected function evaluateSymbol($width, $frame) { + $head = 0; + $demerit = 0; + for ($y=0; $y<$width; ++$y) { + $head = 0; + $this->runLength[0] = 1; + $frameY = $frame[$y]; + if ($y > 0) { + $frameYM = $frame[$y-1]; + } + for ($x=0; $x<$width; ++$x) { + if (($x > 0) AND ($y > 0)) { + $b22 = ord($frameY[$x]) & ord($frameY[$x-1]) & ord($frameYM[$x]) & ord($frameYM[$x-1]); + $w22 = ord($frameY[$x]) | ord($frameY[$x-1]) | ord($frameYM[$x]) | ord($frameYM[$x-1]); + if (($b22 | ($w22 ^ 1)) & 1) { + $demerit += N2; + } + } + if (($x == 0) AND (ord($frameY[$x]) & 1)) { + $this->runLength[0] = -1; + $head = 1; + $this->runLength[$head] = 1; + } elseif ($x > 0) { + if ((ord($frameY[$x]) ^ ord($frameY[$x-1])) & 1) { + $head++; + $this->runLength[$head] = 1; + } else { + $this->runLength[$head]++; + } + } + } + $demerit += $this->calcN1N3($head+1); + } + for ($x=0; $x<$width; ++$x) { + $head = 0; + $this->runLength[0] = 1; + for ($y=0; $y<$width; ++$y) { + if (($y == 0) AND (ord($frame[$y][$x]) & 1)) { + $this->runLength[0] = -1; + $head = 1; + $this->runLength[$head] = 1; + } elseif ($y > 0) { + if ((ord($frame[$y][$x]) ^ ord($frame[$y-1][$x])) & 1) { + $head++; + $this->runLength[$head] = 1; + } else { + $this->runLength[$head]++; + } + } + } + $demerit += $this->calcN1N3($head+1); + } + return $demerit; + } + + /** + * mask + * @param int $width + * @param array $frame + * @param int $level + * @return array best mask + */ + protected function mask($width, $frame, $level) { + $minDemerit = PHP_INT_MAX; + $bestMaskNum = 0; + $bestMask = array(); + $checked_masks = array(0, 1, 2, 3, 4, 5, 6, 7); + if (QR_FIND_FROM_RANDOM !== false) { + $howManuOut = 8 - (QR_FIND_FROM_RANDOM % 9); + for ($i = 0; $i < $howManuOut; ++$i) { + $remPos = rand (0, count($checked_masks)-1); + unset($checked_masks[$remPos]); + $checked_masks = array_values($checked_masks); + } + } + $bestMask = $frame; + foreach ($checked_masks as $i) { + $mask = array_fill(0, $width, str_repeat("\0", $width)); + $demerit = 0; + $blacks = 0; + $blacks = $this->makeMaskNo($i, $width, $frame, $mask); + $blacks += $this->writeFormatInformation($width, $mask, $i, $level); + $blacks = (int)(100 * $blacks / ($width * $width)); + $demerit = (int)((int)(abs($blacks - 50) / 5) * N4); + $demerit += $this->evaluateSymbol($width, $mask); + if ($demerit < $minDemerit) { + $minDemerit = $demerit; + $bestMask = $mask; + $bestMaskNum = $i; + } + } + return $bestMask; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRsplit + + /** + * Return true if the character at specified position is a number + * @param string $str string + * @param int $pos characted position + * @return boolean true of false + */ + protected function isdigitat($str, $pos) { + if ($pos >= strlen($str)) { + return false; + } + return ((ord($str[$pos]) >= ord('0'))&&(ord($str[$pos]) <= ord('9'))); + } + + /** + * Return true if the character at specified position is an alphanumeric character + * @param string $str string + * @param int $pos characted position + * @return boolean true of false + */ + protected function isalnumat($str, $pos) { + if ($pos >= strlen($str)) { + return false; + } + return ($this->lookAnTable(ord($str[$pos])) >= 0); + } + + /** + * identifyMode + * @param int $pos + * @return int mode + */ + protected function identifyMode($pos) { + if ($pos >= strlen($this->dataStr)) { + return QR_MODE_NL; + } + $c = $this->dataStr[$pos]; + if ($this->isdigitat($this->dataStr, $pos)) { + return QR_MODE_NM; + } elseif ($this->isalnumat($this->dataStr, $pos)) { + return QR_MODE_AN; + } elseif ($this->hint == QR_MODE_KJ) { + if ($pos+1 < strlen($this->dataStr)) { + $d = $this->dataStr[$pos+1]; + $word = (ord($c) << 8) | ord($d); + if (($word >= 0x8140 && $word <= 0x9ffc) OR ($word >= 0xe040 && $word <= 0xebbf)) { + return QR_MODE_KJ; + } + } + } + return QR_MODE_8B; + } + + /** + * eatNum + * @return int run + */ + protected function eatNum() { + $ln = $this->lengthIndicator(QR_MODE_NM, $this->version); + $p = 0; + while($this->isdigitat($this->dataStr, $p)) { + $p++; + } + $run = $p; + $mode = $this->identifyMode($p); + if ($mode == QR_MODE_8B) { + $dif = $this->estimateBitsModeNum($run) + 4 + $ln + + $this->estimateBitsMode8(1) // + 4 + l8 + - $this->estimateBitsMode8($run + 1); // - 4 - l8 + if ($dif > 0) { + return $this->eat8(); + } + } + if ($mode == QR_MODE_AN) { + $dif = $this->estimateBitsModeNum($run) + 4 + $ln + + $this->estimateBitsModeAn(1) // + 4 + la + - $this->estimateBitsModeAn($run + 1);// - 4 - la + if ($dif > 0) { + return $this->eatAn(); + } + } + $this->items = $this->appendNewInputItem($this->items, QR_MODE_NM, $run, str_split($this->dataStr)); + return $run; + } + + /** + * eatAn + * @return int run + */ + protected function eatAn() { + $la = $this->lengthIndicator(QR_MODE_AN, $this->version); + $ln = $this->lengthIndicator(QR_MODE_NM, $this->version); + $p = 0; + while($this->isalnumat($this->dataStr, $p)) { + if ($this->isdigitat($this->dataStr, $p)) { + $q = $p; + while($this->isdigitat($this->dataStr, $q)) { + $q++; + } + $dif = $this->estimateBitsModeAn($p) // + 4 + la + + $this->estimateBitsModeNum($q - $p) + 4 + $ln + - $this->estimateBitsModeAn($q); // - 4 - la + if ($dif < 0) { + break; + } else { + $p = $q; + } + } else { + $p++; + } + } + $run = $p; + if (!$this->isalnumat($this->dataStr, $p)) { + $dif = $this->estimateBitsModeAn($run) + 4 + $la + + $this->estimateBitsMode8(1) // + 4 + l8 + - $this->estimateBitsMode8($run + 1); // - 4 - l8 + if ($dif > 0) { + return $this->eat8(); + } + } + $this->items = $this->appendNewInputItem($this->items, QR_MODE_AN, $run, str_split($this->dataStr)); + return $run; + } + + /** + * eatKanji + * @return int run + */ + protected function eatKanji() { + $p = 0; + while($this->identifyMode($p) == QR_MODE_KJ) { + $p += 2; + } + $this->items = $this->appendNewInputItem($this->items, QR_MODE_KJ, $p, str_split($this->dataStr)); + return $run; + } + + /** + * eat8 + * @return int run + */ + protected function eat8() { + $la = $this->lengthIndicator(QR_MODE_AN, $this->version); + $ln = $this->lengthIndicator(QR_MODE_NM, $this->version); + $p = 1; + $dataStrLen = strlen($this->dataStr); + while($p < $dataStrLen) { + $mode = $this->identifyMode($p); + if ($mode == QR_MODE_KJ) { + break; + } + if ($mode == QR_MODE_NM) { + $q = $p; + while($this->isdigitat($this->dataStr, $q)) { + $q++; + } + $dif = $this->estimateBitsMode8($p) // + 4 + l8 + + $this->estimateBitsModeNum($q - $p) + 4 + $ln + - $this->estimateBitsMode8($q); // - 4 - l8 + if ($dif < 0) { + break; + } else { + $p = $q; + } + } elseif ($mode == QR_MODE_AN) { + $q = $p; + while($this->isalnumat($this->dataStr, $q)) { + $q++; + } + $dif = $this->estimateBitsMode8($p) // + 4 + l8 + + $this->estimateBitsModeAn($q - $p) + 4 + $la + - $this->estimateBitsMode8($q); // - 4 - l8 + if ($dif < 0) { + break; + } else { + $p = $q; + } + } else { + $p++; + } + } + $run = $p; + $this->items = $this->appendNewInputItem($this->items, QR_MODE_8B, $run, str_split($this->dataStr)); + return $run; + } + + /** + * splitString + */ + protected function splitString() { + while (strlen($this->dataStr) > 0) { + if ($this->dataStr == '') { + return 0; + } + $mode = $this->identifyMode(0); + switch ($mode) { + case QR_MODE_NM: { + $length = $this->eatNum(); + break; + } + case QR_MODE_AN: { + $length = $this->eatAn(); + break; + } + case QR_MODE_KJ: { + if ($hint == QR_MODE_KJ) { + $length = $this->eatKanji(); + } else { + $length = $this->eat8(); + } + break; + } + default: { + $length = $this->eat8(); + break; + } + } + if ($length == 0) { + return 0; + } + if ($length < 0) { + return -1; + } + $this->dataStr = substr($this->dataStr, $length); + } + } + + /** + * toUpper + */ + protected function toUpper() { + $stringLen = strlen($this->dataStr); + $p = 0; + while ($p < $stringLen) { + $mode = $this->identifyMode(substr($this->dataStr, $p), $this->hint); + if ($mode == QR_MODE_KJ) { + $p += 2; + } else { + if ((ord($this->dataStr[$p]) >= ord('a')) AND (ord($this->dataStr[$p]) <= ord('z'))) { + $this->dataStr[$p] = chr(ord($this->dataStr[$p]) - 32); + } + $p++; + } + } + return $this->dataStr; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRinputItem + + /** + * newInputItem + * @param int $mode + * @param int $size + * @param array $data + * @param array $bstream + * @return array input item + */ + protected function newInputItem($mode, $size, $data, $bstream=null) { + $setData = array_slice($data, 0, $size); + if (count($setData) < $size) { + $setData = array_merge($setData, array_fill(0, ($size - count($setData)), 0)); + } + if (!$this->check($mode, $size, $setData)) { + return NULL; + } + $inputitem = array(); + $inputitem['mode'] = $mode; + $inputitem['size'] = $size; + $inputitem['data'] = $setData; + $inputitem['bstream'] = $bstream; + return $inputitem; + } + + /** + * encodeModeNum + * @param array $inputitem + * @param int $version + * @return array input item + */ + protected function encodeModeNum($inputitem, $version) { + $words = (int)($inputitem['size'] / 3); + $inputitem['bstream'] = array(); + $val = 0x1; + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, $val); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], $this->lengthIndicator(QR_MODE_NM, $version), $inputitem['size']); + for ($i=0; $i < $words; ++$i) { + $val = (ord($inputitem['data'][$i*3 ]) - ord('0')) * 100; + $val += (ord($inputitem['data'][$i*3+1]) - ord('0')) * 10; + $val += (ord($inputitem['data'][$i*3+2]) - ord('0')); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 10, $val); + } + if ($inputitem['size'] - $words * 3 == 1) { + $val = ord($inputitem['data'][$words*3]) - ord('0'); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, $val); + } elseif (($inputitem['size'] - ($words * 3)) == 2) { + $val = (ord($inputitem['data'][$words*3 ]) - ord('0')) * 10; + $val += (ord($inputitem['data'][$words*3+1]) - ord('0')); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 7, $val); + } + return $inputitem; + } + + /** + * encodeModeAn + * @param array $inputitem + * @param int $version + * @return array input item + */ + protected function encodeModeAn($inputitem, $version) { + $words = (int)($inputitem['size'] / 2); + $inputitem['bstream'] = array(); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x02); + $inputitem['bstream'] = $this->appendNum(v, $this->lengthIndicator(QR_MODE_AN, $version), $inputitem['size']); + for ($i=0; $i < $words; ++$i) { + $val = (int)$this->lookAnTable(ord($inputitem['data'][$i*2 ])) * 45; + $val += (int)$this->lookAnTable(ord($inputitem['data'][$i*2+1])); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 11, $val); + } + if ($inputitem['size'] & 1) { + $val = $this->lookAnTable(ord($inputitem['data'][($words * 2)])); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 6, $val); + } + return $inputitem; + } + + /** + * encodeMode8 + * @param array $inputitem + * @param int $version + * @return array input item + */ + protected function encodeMode8($inputitem, $version) { + $inputitem['bstream'] = array(); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x4); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], $this->lengthIndicator(QR_MODE_8B, $version), $inputitem['size']); + for ($i=0; $i < $inputitem['size']; ++$i) { + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 8, ord($inputitem['data'][$i])); + } + return $inputitem; + } + + /** + * encodeModeKanji + * @param array $inputitem + * @param int $version + * @return array input item + */ + protected function encodeModeKanji($inputitem, $version) { + $inputitem['bstream'] = array(); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x8); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], $this->lengthIndicator(QR_MODE_KJ, $version), (int)($inputitem['size'] / 2)); + for ($i=0; $i<$inputitem['size']; $i+=2) { + $val = (ord($inputitem['data'][$i]) << 8) | ord($inputitem['data'][$i+1]); + if ($val <= 0x9ffc) { + $val -= 0x8140; + } else { + $val -= 0xc140; + } + $h = ($val >> 8) * 0xc0; + $val = ($val & 0xff) + $h; + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 13, $val); + } + return $inputitem; + } + + /** + * encodeModeStructure + * @param array $inputitem + * @return array input item + */ + protected function encodeModeStructure($inputitem) { + $inputitem['bstream'] = array(); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x03); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, ord($inputitem['data'][1]) - 1); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, ord($inputitem['data'][0]) - 1); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 8, ord($inputitem['data'][2])); + return $inputitem; + } + + /** + * encodeBitStream + * @param array $inputitem + * @param int $version + * @return array input item + */ + protected function encodeBitStream($inputitem, $version) { + $inputitem['bstream'] = array(); + $words = $this->maximumWords($inputitem['mode'], $version); + if ($inputitem['size'] > $words) { + $st1 = $this->newInputItem($inputitem['mode'], $words, $inputitem['data']); + $st2 = $this->newInputItem($inputitem['mode'], $inputitem['size'] - $words, array_slice($inputitem['data'], $words)); + $st1 = $this->encodeBitStream($st1, $version); + $st2 = $this->encodeBitStream($st2, $version); + $inputitem['bstream'] = array(); + $inputitem['bstream'] = $this->appendBitstream($inputitem['bstream'], $st1['bstream']); + $inputitem['bstream'] = $this->appendBitstream($inputitem['bstream'], $st2['bstream']); + } else { + switch($inputitem['mode']) { + case QR_MODE_NM: { + $inputitem = $this->encodeModeNum($inputitem, $version); + break; + } + case QR_MODE_AN: { + $inputitem = $this->encodeModeAn($inputitem, $version); + break; + } + case QR_MODE_8B: { + $inputitem = $this->encodeMode8($inputitem, $version); + break; + } + case QR_MODE_KJ: { + $inputitem = $this->encodeModeKanji($inputitem, $version); + break; + } + case QR_MODE_ST: { + $inputitem = $this->encodeModeStructure($inputitem); + break; + } + default: { + break; + } + } + } + return $inputitem; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRinput + + /** + * Append data to an input object. + * The data is copied and appended to the input object. + * @param array items input items + * @param int $mode encoding mode. + * @param int $size size of data (byte). + * @param array $data array of input data. + * @return items + * + */ + protected function appendNewInputItem($items, $mode, $size, $data) { + $items[] = $this->newInputItem($mode, $size, $data); + return $items; + } + + /** + * insertStructuredAppendHeader + * @param array $items + * @param int $size + * @param int $index + * @param int $parity + * @return array items + */ + protected function insertStructuredAppendHeader($items, $size, $index, $parity) { + if ($size > MAX_STRUCTURED_SYMBOLS) { + return -1; + } + if (($index <= 0) OR ($index > MAX_STRUCTURED_SYMBOLS)) { + return -1; + } + $buf = array($size, $index, $parity); + $entry = $this->newInputItem(QR_MODE_ST, 3, buf); + array_unshift($items, $entry); + return $items; + } + + /** + * calcParity + * @param array $items + * @return int parity + */ + protected function calcParity($items) { + $parity = 0; + foreach ($items as $item) { + if ($item['mode'] != QR_MODE_ST) { + for ($i=$item['size']-1; $i>=0; --$i) { + $parity ^= $item['data'][$i]; + } + } + } + return $parity; + } + + /** + * checkModeNum + * @param int $size + * @param array $data + * @return boolean true or false + */ + protected function checkModeNum($size, $data) { + for ($i=0; $i<$size; ++$i) { + if ((ord($data[$i]) < ord('0')) OR (ord($data[$i]) > ord('9'))){ + return false; + } + } + return true; + } + + /** + * estimateBitsModeNum + * @param int $size + * @return int number of bits + */ + protected function estimateBitsModeNum($size) { + $w = (int)$size / 3; + $bits = $w * 10; + switch($size - $w * 3) { + case 1: { + $bits += 4; + break; + } + case 2: { + $bits += 7; + break; + } + default: { + break; + } + } + return $bits; + } + + /** + * Look up the alphabet-numeric convesion table (see JIS X0510:2004, pp.19). + * @param int $c character value + * @return value + */ + protected function lookAnTable($c) { + return (($c > 127)?-1:$this->anTable[$c]); + } + + /** + * checkModeAn + * @param int $size + * @param array $data + * @return boolean true or false + */ + protected function checkModeAn($size, $data) { + for ($i=0; $i<$size; ++$i) { + if ($this->lookAnTable(ord($data[$i])) == -1) { + return false; + } + } + return true; + } + + /** + * estimateBitsModeAn + * @param int $size + * @return int number of bits + */ + protected function estimateBitsModeAn($size) { + $w = (int)($size / 2); + $bits = $w * 11; + if ($size & 1) { + $bits += 6; + } + return $bits; + } + + /** + * estimateBitsMode8 + * @param int $size + * @return int number of bits + */ + protected function estimateBitsMode8($size) { + return $size * 8; + } + + /** + * estimateBitsModeKanji + * @param int $size + * @return int number of bits + */ + protected function estimateBitsModeKanji($size) { + return (int)(($size / 2) * 13); + } + + /** + * checkModeKanji + * @param int $size + * @param array $data + * @return boolean true or false + */ + protected function checkModeKanji($size, $data) { + if ($size & 1) { + return false; + } + for ($i=0; $i<$size; $i+=2) { + $val = (ord($data[$i]) << 8) | ord($data[$i+1]); + if (($val < 0x8140) OR (($val > 0x9ffc) AND ($val < 0xe040)) OR ($val > 0xebbf)) { + return false; + } + } + return true; + } + + /** + * Validate the input data. + * @param int $mode encoding mode. + * @param int $size size of data (byte). + * @param array data data to validate + * @return boolean true in case of valid data, false otherwise + */ + protected function check($mode, $size, $data) { + if ($size <= 0) { + return false; + } + switch($mode) { + case QR_MODE_NM: { + return $this->checkModeNum($size, $data); + } + case QR_MODE_AN: { + return $this->checkModeAn($size, $data); + } + case QR_MODE_KJ: { + return $this->checkModeKanji($size, $data); + } + case QR_MODE_8B: { + return true; + } + case QR_MODE_ST: { + return true; + } + default: { + break; + } + } + return false; + } + + /** + * estimateBitStreamSize + * @param array $items + * @param int $version + * @return int bits + */ + protected function estimateBitStreamSize($items, $version) { + $bits = 0; + if ($version == 0) { + $version = 1; + } + foreach ($items as $item) { + switch($item['mode']) { + case QR_MODE_NM: { + $bits = $this->estimateBitsModeNum($item['size']); + break; + } + case QR_MODE_AN: { + $bits = $this->estimateBitsModeAn($item['size']); + break; + } + case QR_MODE_8B: { + $bits = $this->estimateBitsMode8($item['size']); + break; + } + case QR_MODE_KJ: { + $bits = $this->estimateBitsModeKanji($item['size']); + break; + } + case QR_MODE_ST: { + return STRUCTURE_HEADER_BITS; + } + default: { + return 0; + } + } + $l = $this->lengthIndicator($item['mode'], $version); + $m = 1 << $l; + $num = (int)(($item['size'] + $m - 1) / $m); + $bits += $num * (4 + $l); + } + return $bits; + } + + /** + * estimateVersion + * @param array $items + * @return int version + */ + protected function estimateVersion($items) { + $version = 0; + $prev = 0; + do { + $prev = $version; + $bits = $this->estimateBitStreamSize($items, $prev); + $version = $this->getMinimumVersion((int)(($bits + 7) / 8), $this->level); + if ($version < 0) { + return -1; + } + } while ($version > $prev); + return $version; + } + + /** + * lengthOfCode + * @param int $mode + * @param int $version + * @param int $bits + * @return int size + */ + protected function lengthOfCode($mode, $version, $bits) { + $payload = $bits - 4 - $this->lengthIndicator($mode, $version); + switch($mode) { + case QR_MODE_NM: { + $chunks = (int)($payload / 10); + $remain = $payload - $chunks * 10; + $size = $chunks * 3; + if ($remain >= 7) { + $size += 2; + } elseif ($remain >= 4) { + $size += 1; + } + break; + } + case QR_MODE_AN: { + $chunks = (int)($payload / 11); + $remain = $payload - $chunks * 11; + $size = $chunks * 2; + if ($remain >= 6) { + ++$size; + } + break; + } + case QR_MODE_8B: { + $size = (int)($payload / 8); + break; + } + case QR_MODE_KJ: { + $size = (int)(($payload / 13) * 2); + break; + } + case QR_MODE_ST: { + $size = (int)($payload / 8); + break; + } + default: { + $size = 0; + break; + } + } + $maxsize = $this->maximumWords($mode, $version); + if ($size < 0) { + $size = 0; + } + if ($size > $maxsize) { + $size = $maxsize; + } + return $size; + } + + /** + * createBitStream + * @param array $items + * @return array of items and total bits + */ + protected function createBitStream($items) { + $total = 0; + foreach ($items as $key => $item) { + $items[$key] = $this->encodeBitStream($item, $this->version); + $bits = count($items[$key]['bstream']); + $total += $bits; + } + return array($items, $total); + } + + /** + * convertData + * @param array $items + * @return array items + */ + protected function convertData($items) { + $ver = $this->estimateVersion($items); + if ($ver > $this->version) { + $this->version = $ver; + } + for (;;) { + $cbs = $this->createBitStream($items); + $items = $cbs[0]; + $bits = $cbs[1]; + if ($bits < 0) { + return -1; + } + $ver = $this->getMinimumVersion((int)(($bits + 7) / 8), $this->level); + if ($ver < 0) { + return -1; + } elseif ($ver > $this->version) { + $this->version = $ver; + } else { + break; + } + } + return $items; + } + + /** + * Append Padding Bit to bitstream + * @param array $bstream + * @return array bitstream + */ + protected function appendPaddingBit($bstream) { + $bits = count($bstream); + $maxwords = $this->getDataLength($this->version, $this->level); + $maxbits = $maxwords * 8; + if ($maxbits == $bits) { + return 0; + } + if ($maxbits - $bits < 5) { + return $this->appendNum($bstream, $maxbits - $bits, 0); + } + $bits += 4; + $words = (int)(($bits + 7) / 8); + $padding = array(); + $padding = $this->appendNum($padding, $words * 8 - $bits + 4, 0); + $padlen = $maxwords - $words; + if ($padlen > 0) { + $padbuf = array(); + for ($i=0; $i<$padlen; ++$i) { + $padbuf[$i] = ($i&1)?0x11:0xec; + } + $padding = $this->appendBytes($padding, $padlen, $padbuf); + } + return $this->appendBitstream($bstream, $padding); + } + + /** + * mergeBitStream + * @param array $bstream + * @return array bitstream + */ + protected function mergeBitStream($items) { + $items = $this->convertData($items); + $bstream = array(); + foreach ($items as $item) { + $bstream = $this->appendBitstream($bstream, $item['bstream']); + } + return $bstream; + } + + /** + * Returns a stream of bits. + * @param int $items + * @return array padded merged byte stream + */ + protected function getBitStream($items) { + $bstream = $this->mergeBitStream($items); + return $this->appendPaddingBit($bstream); + } + + /** + * Pack all bit streams padding bits into a byte array. + * @param int $items + * @return array padded merged byte stream + */ + protected function getByteStream($items) { + $bstream = $this->getBitStream($items); + return $this->bitstreamToByte($bstream); + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRbitstream + + /** + * Return an array with zeros + * @param int $setLength array size + * @return array + */ + protected function allocate($setLength) { + return array_fill(0, $setLength, 0); + } + + /** + * Return new bitstream from number + * @param int $bits number of bits + * @param int $num number + * @return array bitstream + */ + protected function newFromNum($bits, $num) { + $bstream = $this->allocate($bits); + $mask = 1 << ($bits - 1); + for ($i=0; $i<$bits; ++$i) { + if ($num & $mask) { + $bstream[$i] = 1; + } else { + $bstream[$i] = 0; + } + $mask = $mask >> 1; + } + return $bstream; + } + + /** + * Return new bitstream from bytes + * @param int $size size + * @param array $data bytes + * @return array bitstream + */ + protected function newFromBytes($size, $data) { + $bstream = $this->allocate($size * 8); + $p=0; + for ($i=0; $i<$size; ++$i) { + $mask = 0x80; + for ($j=0; $j<8; ++$j) { + if ($data[$i] & $mask) { + $bstream[$p] = 1; + } else { + $bstream[$p] = 0; + } + $p++; + $mask = $mask >> 1; + } + } + return $bstream; + } + + /** + * Append one bitstream to another + * @param array $bitstream original bitstream + * @param array $append bitstream to append + * @return array bitstream + */ + protected function appendBitstream($bitstream, $append) { + if ((!is_array($append)) OR (count($append) == 0)) { + return $bitstream; + } + if (count($bitstream) == 0) { + return $append; + } + return array_values(array_merge($bitstream, $append)); + } + + /** + * Append one bitstream created from number to another + * @param array $bitstream original bitstream + * @param int $bits number of bits + * @param int $num number + * @return array bitstream + */ + protected function appendNum($bitstream, $bits, $num) { + if ($bits == 0) { + return 0; + } + $b = $this->newFromNum($bits, $num); + return $this->appendBitstream($bitstream, $b); + } + + /** + * Append one bitstream created from bytes to another + * @param array $bitstream original bitstream + * @param int $size size + * @param array $data bytes + * @return array bitstream + */ + protected function appendBytes($bitstream, $size, $data) { + if ($size == 0) { + return 0; + } + $b = $this->newFromBytes($size, $data); + return $this->appendBitstream($bitstream, $b); + } + + /** + * Convert bitstream to bytes + * @param array $bitstream original bitstream + * @return array of bytes + */ + protected function bitstreamToByte($bstream) { + $size = count($bstream); + if ($size == 0) { + return array(); + } + $data = array_fill(0, (int)(($size + 7) / 8), 0); + $bytes = (int)($size / 8); + $p = 0; + for ($i=0; $i<$bytes; $i++) { + $v = 0; + for ($j=0; $j<8; $j++) { + $v = $v << 1; + $v |= $bstream[$p]; + $p++; + } + $data[$i] = $v; + } + if ($size & 7) { + $v = 0; + for ($j=0; $j<($size & 7); $j++) { + $v = $v << 1; + $v |= $bstream[$p]; + $p++; + } + $data[$bytes] = $v; + } + return $data; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRspec + + /** + * Replace a value on the array at the specified position + * @param array $srctab + * @param int $x X position + * @param int $y Y position + * @param string $repl value to replace + * @param int $replLen length of the repl string + * @return array srctab + */ + protected function qrstrset($srctab, $x, $y, $repl, $replLen=false) { + $srctab[$y] = substr_replace($srctab[$y], ($replLen !== false)?substr($repl,0,$replLen):$repl, $x, ($replLen !== false)?$replLen:strlen($repl)); + return $srctab; + } + + /** + * Return maximum data code length (bytes) for the version. + * @param int $version version + * @param int $level error correction level + * @return int maximum size (bytes) + */ + protected function getDataLength($version, $level) { + return $this->capacity[$version][QRCAP_WORDS] - $this->capacity[$version][QRCAP_EC][$level]; + } + + /** + * Return maximum error correction code length (bytes) for the version. + * @param int $version version + * @param int $level error correction level + * @return int ECC size (bytes) + */ + protected function getECCLength($version, $level){ + return $this->capacity[$version][QRCAP_EC][$level]; + } + + /** + * Return the width of the symbol for the version. + * @param int $version version + * @return int width + */ + protected function getWidth($version) { + return $this->capacity[$version][QRCAP_WIDTH]; + } + + /** + * Return the numer of remainder bits. + * @param int $version version + * @return int number of remainder bits + */ + protected function getRemainder($version) { + return $this->capacity[$version][QRCAP_REMINDER]; + } + + /** + * Return a version number that satisfies the input code length. + * @param int $size input code length (byte) + * @param int $level error correction level + * @return int version number + */ + protected function getMinimumVersion($size, $level) { + for ($i=1; $i <= QRSPEC_VERSION_MAX; ++$i) { + $words = $this->capacity[$i][QRCAP_WORDS] - $this->capacity[$i][QRCAP_EC][$level]; + if ($words >= $size) { + return $i; + } + } + return -1; + } + + /** + * Return the size of length indicator for the mode and version. + * @param int $mode encoding mode + * @param int $version version + * @return int the size of the appropriate length indicator (bits). + */ + protected function lengthIndicator($mode, $version) { + if ($mode == QR_MODE_ST) { + return 0; + } + if ($version <= 9) { + $l = 0; + } elseif ($version <= 26) { + $l = 1; + } else { + $l = 2; + } + return $this->lengthTableBits[$mode][$l]; + } + + /** + * Return the maximum length for the mode and version. + * @param int $mode encoding mode + * @param int $version version + * @return int the maximum length (bytes) + */ + protected function maximumWords($mode, $version) { + if ($mode == QR_MODE_ST) { + return 3; + } + if ($version <= 9) { + $l = 0; + } else if ($version <= 26) { + $l = 1; + } else { + $l = 2; + } + $bits = $this->lengthTableBits[$mode][$l]; + $words = (1 << $bits) - 1; + if ($mode == QR_MODE_KJ) { + $words *= 2; // the number of bytes is required + } + return $words; + } + + /** + * Return an array of ECC specification. + * @param int $version version + * @param int $level error correction level + * @param array $spec an array of ECC specification contains as following: {# of type1 blocks, # of data code, # of ecc code, # of type2 blocks, # of data code} + * @return array spec + */ + protected function getEccSpec($version, $level, $spec) { + if (count($spec) < 5) { + $spec = array(0, 0, 0, 0, 0); + } + $b1 = $this->eccTable[$version][$level][0]; + $b2 = $this->eccTable[$version][$level][1]; + $data = $this->getDataLength($version, $level); + $ecc = $this->getECCLength($version, $level); + if ($b2 == 0) { + $spec[0] = $b1; + $spec[1] = (int)($data / $b1); + $spec[2] = (int)($ecc / $b1); + $spec[3] = 0; + $spec[4] = 0; + } else { + $spec[0] = $b1; + $spec[1] = (int)($data / ($b1 + $b2)); + $spec[2] = (int)($ecc / ($b1 + $b2)); + $spec[3] = $b2; + $spec[4] = $spec[1] + 1; + } + return $spec; + } + + /** + * Put an alignment marker. + * @param array $frame frame + * @param int $width width + * @param int $ox X center coordinate of the pattern + * @param int $oy Y center coordinate of the pattern + * @return array frame + */ + protected function putAlignmentMarker($frame, $ox, $oy) { + $finder = array( + "\xa1\xa1\xa1\xa1\xa1", + "\xa1\xa0\xa0\xa0\xa1", + "\xa1\xa0\xa1\xa0\xa1", + "\xa1\xa0\xa0\xa0\xa1", + "\xa1\xa1\xa1\xa1\xa1" + ); + $yStart = $oy - 2; + $xStart = $ox - 2; + for ($y=0; $y < 5; $y++) { + $frame = $this->qrstrset($frame, $xStart, $yStart+$y, $finder[$y]); + } + return $frame; + } + + /** + * Put an alignment pattern. + * @param int $version version + * @param array $fram frame + * @param int $width width + * @return array frame + */ + protected function putAlignmentPattern($version, $frame, $width) { + if ($version < 2) { + return $frame; + } + $d = $this->alignmentPattern[$version][1] - $this->alignmentPattern[$version][0]; + if ($d < 0) { + $w = 2; + } else { + $w = (int)(($width - $this->alignmentPattern[$version][0]) / $d + 2); + } + if ($w * $w - 3 == 1) { + $x = $this->alignmentPattern[$version][0]; + $y = $this->alignmentPattern[$version][0]; + $frame = $this->putAlignmentMarker($frame, $x, $y); + return $frame; + } + $cx = $this->alignmentPattern[$version][0]; + $wo = $w - 1; + for ($x=1; $x < $wo; ++$x) { + $frame = $this->putAlignmentMarker($frame, 6, $cx); + $frame = $this->putAlignmentMarker($frame, $cx, 6); + $cx += $d; + } + $cy = $this->alignmentPattern[$version][0]; + for ($y=0; $y < $wo; ++$y) { + $cx = $this->alignmentPattern[$version][0]; + for ($x=0; $x < $wo; ++$x) { + $frame = $this->putAlignmentMarker($frame, $cx, $cy); + $cx += $d; + } + $cy += $d; + } + return $frame; + } + + /** + * Return BCH encoded version information pattern that is used for the symbol of version 7 or greater. Use lower 18 bits. + * @param int $version version + * @return BCH encoded version information pattern + */ + protected function getVersionPattern($version) { + if (($version < 7) OR ($version > QRSPEC_VERSION_MAX)) { + return 0; + } + return $this->versionPattern[($version - 7)]; + } + + /** + * Return BCH encoded format information pattern. + * @param array $mask + * @param int $level error correction level + * @return BCH encoded format information pattern + */ + protected function getFormatInfo($mask, $level) { + if (($mask < 0) OR ($mask > 7)) { + return 0; + } + if (($level < 0) OR ($level > 3)) { + return 0; + } + return $this->formatInfo[$level][$mask]; + } + + /** + * Put a finder pattern. + * @param array $frame frame + * @param int $width width + * @param int $ox X center coordinate of the pattern + * @param int $oy Y center coordinate of the pattern + * @return array frame + */ + protected function putFinderPattern($frame, $ox, $oy) { + $finder = array( + "\xc1\xc1\xc1\xc1\xc1\xc1\xc1", + "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", + "\xc1\xc1\xc1\xc1\xc1\xc1\xc1" + ); + for ($y=0; $y < 7; $y++) { + $frame = $this->qrstrset($frame, $ox, ($oy + $y), $finder[$y]); + } + return $frame; + } + + /** + * Return a copy of initialized frame. + * @param int $version version + * @return Array of unsigned char. + */ + protected function createFrame($version) { + $width = $this->capacity[$version][QRCAP_WIDTH]; + $frameLine = str_repeat ("\0", $width); + $frame = array_fill(0, $width, $frameLine); + // Finder pattern + $frame = $this->putFinderPattern($frame, 0, 0); + $frame = $this->putFinderPattern($frame, $width - 7, 0); + $frame = $this->putFinderPattern($frame, 0, $width - 7); + // Separator + $yOffset = $width - 7; + for ($y=0; $y < 7; ++$y) { + $frame[$y][7] = "\xc0"; + $frame[$y][$width - 8] = "\xc0"; + $frame[$yOffset][7] = "\xc0"; + ++$yOffset; + } + $setPattern = str_repeat("\xc0", 8); + $frame = $this->qrstrset($frame, 0, 7, $setPattern); + $frame = $this->qrstrset($frame, $width-8, 7, $setPattern); + $frame = $this->qrstrset($frame, 0, $width - 8, $setPattern); + // Format info + $setPattern = str_repeat("\x84", 9); + $frame = $this->qrstrset($frame, 0, 8, $setPattern); + $frame = $this->qrstrset($frame, $width - 8, 8, $setPattern, 8); + $yOffset = $width - 8; + for ($y=0; $y < 8; ++$y,++$yOffset) { + $frame[$y][8] = "\x84"; + $frame[$yOffset][8] = "\x84"; + } + // Timing pattern + $wo = $width - 15; + for ($i=1; $i < $wo; ++$i) { + $frame[6][7+$i] = chr(0x90 | ($i & 1)); + $frame[7+$i][6] = chr(0x90 | ($i & 1)); + } + // Alignment pattern + $frame = $this->putAlignmentPattern($version, $frame, $width); + // Version information + if ($version >= 7) { + $vinf = $this->getVersionPattern($version); + $v = $vinf; + for ($x=0; $x<6; ++$x) { + for ($y=0; $y<3; ++$y) { + $frame[($width - 11)+$y][$x] = chr(0x88 | ($v & 1)); + $v = $v >> 1; + } + } + $v = $vinf; + for ($y=0; $y<6; ++$y) { + for ($x=0; $x<3; ++$x) { + $frame[$y][$x+($width - 11)] = chr(0x88 | ($v & 1)); + $v = $v >> 1; + } + } + } + // and a little bit... + $frame[$width - 8][8] = "\x81"; + return $frame; + } + + /** + * Set new frame for the specified version. + * @param int $version version + * @return Array of unsigned char. + */ + protected function newFrame($version) { + if (($version < 1) OR ($version > QRSPEC_VERSION_MAX)) { + return NULL; + } + if (!isset($this->frames[$version])) { + $this->frames[$version] = $this->createFrame($version); + } + if (is_null($this->frames[$version])) { + return NULL; + } + return $this->frames[$version]; + } + + /** + * Return block number 0 + * @param array $spec + * @return int value + */ + protected function rsBlockNum($spec) { + return ($spec[0] + $spec[3]); + } + + /** + * Return block number 1 + * @param array $spec + * @return int value + */ + protected function rsBlockNum1($spec) { + return $spec[0]; + } + + /** + * Return data codes 1 + * @param array $spec + * @return int value + */ + protected function rsDataCodes1($spec) { + return $spec[1]; + } + + /** + * Return ecc codes 1 + * @param array $spec + * @return int value + */ + protected function rsEccCodes1($spec) { + return $spec[2]; + } + + /** + * Return block number 2 + * @param array $spec + * @return int value + */ + protected function rsBlockNum2($spec) { + return $spec[3]; + } + + /** + * Return data codes 2 + * @param array $spec + * @return int value + */ + protected function rsDataCodes2($spec) { + return $spec[4]; + } + + /** + * Return ecc codes 2 + * @param array $spec + * @return int value + */ + protected function rsEccCodes2($spec) { + return $spec[2]; + } + + /** + * Return data length + * @param array $spec + * @return int value + */ + protected function rsDataLength($spec) { + return ($spec[0] * $spec[1]) + ($spec[3] * $spec[4]); + } + + /** + * Return ecc length + * @param array $spec + * @return int value + */ + protected function rsEccLength($spec) { + return ($spec[0] + $spec[3]) * $spec[2]; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRrs + + /** + * Initialize a Reed-Solomon codec and add it to existing rsitems + * @param int $symsize symbol size, bits + * @param int $gfpoly Field generator polynomial coefficients + * @param int $fcr first root of RS code generator polynomial, index form + * @param int $prim primitive element to generate polynomial roots + * @param int $nroots RS code generator polynomial degree (number of roots) + * @param int $pad padding bytes at front of shortened block + * @return array Array of RS values:. + */ + protected function init_rs($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) { + foreach ($this->rsitems as $rs) { + if (($rs['pad'] != $pad) OR ($rs['nroots'] != $nroots) OR ($rs['mm'] != $symsize) + OR ($rs['gfpoly'] != $gfpoly) OR ($rs['fcr'] != $fcr) OR ($rs['prim'] != $prim)) { + continue; + } + return $rs; + } + $rs = $this->init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad); + array_unshift($this->rsitems, $rs); + return $rs; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRrsItem + + /** + * modnn + * @param array RS values + * @param int $x X position + * @return int X osition + */ + protected function modnn($rs, $x) { + while ($x >= $rs['nn']) { + $x -= $rs['nn']; + $x = ($x >> $rs['mm']) + ($x & $rs['nn']); + } + return $x; + } + + /** + * Initialize a Reed-Solomon codec and returns an array of values. + * @param int $symsize symbol size, bits + * @param int $gfpoly Field generator polynomial coefficients + * @param int $fcr first root of RS code generator polynomial, index form + * @param int $prim primitive element to generate polynomial roots + * @param int $nroots RS code generator polynomial degree (number of roots) + * @param int $pad padding bytes at front of shortened block + * @return array Array of RS values:. + */ + protected function init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) { + // Based on Reed solomon encoder by Phil Karn, KA9Q (GNU-LGPLv2) + $rs = null; + // Check parameter ranges + if (($symsize < 0) OR ($symsize > 8)) { + return $rs; + } + if (($fcr < 0) OR ($fcr >= (1<<$symsize))) { + return $rs; + } + if (($prim <= 0) OR ($prim >= (1<<$symsize))) { + return $rs; + } + if (($nroots < 0) OR ($nroots >= (1<<$symsize))) { + return $rs; + } + if (($pad < 0) OR ($pad >= ((1<<$symsize) -1 - $nroots))) { + return $rs; + } + $rs = array(); + $rs['mm'] = $symsize; + $rs['nn'] = (1 << $symsize) - 1; + $rs['pad'] = $pad; + $rs['alpha_to'] = array_fill(0, ($rs['nn'] + 1), 0); + $rs['index_of'] = array_fill(0, ($rs['nn'] + 1), 0); + // PHP style macro replacement ;) + $NN =& $rs['nn']; + $A0 =& $NN; + // Generate Galois field lookup tables + $rs['index_of'][0] = $A0; // log(zero) = -inf + $rs['alpha_to'][$A0] = 0; // alpha**-inf = 0 + $sr = 1; + for ($i=0; $i<$rs['nn']; ++$i) { + $rs['index_of'][$sr] = $i; + $rs['alpha_to'][$i] = $sr; + $sr <<= 1; + if ($sr & (1 << $symsize)) { + $sr ^= $gfpoly; + } + $sr &= $rs['nn']; + } + if ($sr != 1) { + // field generator polynomial is not primitive! + return NULL; + } + // Form RS code generator polynomial from its roots + $rs['genpoly'] = array_fill(0, ($nroots + 1), 0); + $rs['fcr'] = $fcr; + $rs['prim'] = $prim; + $rs['nroots'] = $nroots; + $rs['gfpoly'] = $gfpoly; + // Find prim-th root of 1, used in decoding + for ($iprim=1; ($iprim % $prim) != 0; $iprim += $rs['nn']) { + ; // intentional empty-body loop! + } + $rs['iprim'] = (int)($iprim / $prim); + $rs['genpoly'][0] = 1; + + + for ($i = 0,$root=$fcr*$prim; $i < $nroots; $i++, $root += $prim) { + $rs['genpoly'][$i+1] = 1; + // Multiply rs->genpoly[] by @**(root + x) + for ($j = $i; $j > 0; --$j) { + if ($rs['genpoly'][$j] != 0) { + $rs['genpoly'][$j] = $rs['genpoly'][$j-1] ^ $rs['alpha_to'][$this->modnn($rs, $rs['index_of'][$rs['genpoly'][$j]] + $root)]; + } else { + $rs['genpoly'][$j] = $rs['genpoly'][$j-1]; + } + } + // rs->genpoly[0] can never be zero + $rs['genpoly'][0] = $rs['alpha_to'][$this->modnn($rs, $rs['index_of'][$rs['genpoly'][0]] + $root)]; + } + // convert rs->genpoly[] to index form for quicker encoding + for ($i = 0; $i <= $nroots; ++$i) { + $rs['genpoly'][$i] = $rs['index_of'][$rs['genpoly'][$i]]; + } + return $rs; + } + + /** + * Encode a Reed-Solomon codec and returns the parity array + * @param array $rs RS values + * @param array $data data + * @param array $parity parity + * @return parity array + */ + protected function encode_rs_char($rs, $data, $parity) { + $MM =& $rs['mm']; // bits per symbol + $NN =& $rs['nn']; // the total number of symbols in a RS block + $ALPHA_TO =& $rs['alpha_to']; // the address of an array of NN elements to convert Galois field elements in index (log) form to polynomial form + $INDEX_OF =& $rs['index_of']; // the address of an array of NN elements to convert Galois field elements in polynomial form to index (log) form + $GENPOLY =& $rs['genpoly']; // an array of NROOTS+1 elements containing the generator polynomial in index form + $NROOTS =& $rs['nroots']; // the number of roots in the RS code generator polynomial, which is the same as the number of parity symbols in a block + $FCR =& $rs['fcr']; // first consecutive root, index form + $PRIM =& $rs['prim']; // primitive element, index form + $IPRIM =& $rs['iprim']; // prim-th root of 1, index form + $PAD =& $rs['pad']; // the number of pad symbols in a block + $A0 =& $NN; + $parity = array_fill(0, $NROOTS, 0); + for ($i=0; $i < ($NN - $NROOTS - $PAD); $i++) { + $feedback = $INDEX_OF[$data[$i] ^ $parity[0]]; + if ($feedback != $A0) { + // feedback term is non-zero + // This line is unnecessary when GENPOLY[NROOTS] is unity, as it must + // always be for the polynomials constructed by init_rs() + $feedback = $this->modnn($rs, $NN - $GENPOLY[$NROOTS] + $feedback); + for ($j=1; $j < $NROOTS; ++$j) { + $parity[$j] ^= $ALPHA_TO[$this->modnn($rs, $feedback + $GENPOLY[($NROOTS - $j)])]; + } + } + // Shift + array_shift($parity); + if ($feedback != $A0) { + array_push($parity, $ALPHA_TO[$this->modnn($rs, $feedback + $GENPOLY[0])]); + } else { + array_push($parity, 0); + } + } + return $parity; + } + + } // end QRcode class + +} // END OF "class_exists QRcode" +?> diff --git a/addons/unishop/library/phpqrcode/cache/frame_1.dat b/addons/unishop/library/phpqrcode/cache/frame_1.dat new file mode 100644 index 0000000..be28fea --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/frame_1.dat @@ -0,0 +1,2 @@ +xڝ E9u`"PńC牗T!0$ +EɲQmh۾9{kI" 9Ln)Ap־>^zmnŖ;mn \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/frame_1.png b/addons/unishop/library/phpqrcode/cache/frame_1.png new file mode 100644 index 0000000000000000000000000000000000000000..86ce6e98d8cf7071291d5e5bb39bc3080511c8b8 GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dx33?wJtG`|X@*aCb)T!Hle|NocXoPQU{GWK+F z45^rtobc!Hfq>uNnVVn7Gg`2HlysJm`1k++!4KjchA)1}^Yl3E66=VaXwbng!p`vB WU-#~W{*xdZ7(8A5T-G@yGywobm@6p& literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_10.dat b/addons/unishop/library/phpqrcode/cache/frame_10.dat new file mode 100644 index 0000000000000000000000000000000000000000..aff163f6882e1c842881c539160539ee97221e5b GIT binary patch literal 204 zcmV;-05ku1+U=K34ul{KMqP93Nm#TyxdGe+ZZ`bX2|6GY6RiCuCX1^|Hy)_wA3>UwXVkes{2iDcbZs(b-_ G?>v^)7G+HU literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_10.png b/addons/unishop/library/phpqrcode/cache/frame_10.png new file mode 100644 index 0000000000000000000000000000000000000000..dbfcd70b588c9cc508d210d761ca285c962e70c7 GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^mLSZ?3?#Q*6Fdf_*aCb)T!Hle|NocXoPQU{s`qqp z45^rNcH&0P1_Kcn{i)eEQ&eWabo5TEo z<(=q;l{2~SNFHOk7+K+Z++>o}0+W;js(lQ_L5J;4XHRbpJ@7EKSbjtGxs>0TanIFf yTerS?Jf(G)Wt_o(rC4{V)qPjP^(|O~A28=0dj4ToPRUb}EH+ z?=;|LU8z+!qM$&p(|BcWyT^0wyzYLMW@>oYiN^Dsz8hTJ4a-aiVeGGljlcQ?PgyF*WC@)ePT+&@l!`0?ief1~n6 zE|yl^gW5e`nKwIinOvP@sie!fPIxQBN@sPwvjzdvtR(AR7bMPLqt$5hLLY|jw(O$c@esqcjU~XWxX2%DQ}j2 Ypk>~2FWzvVWdEB3>HkBaKPQDn?w1{Br2qf` literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_12.png b/addons/unishop/library/phpqrcode/cache/frame_12.png new file mode 100644 index 0000000000000000000000000000000000000000..8ba67822cdbeb547858ff6fc50cacee24a1b7d39 GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^jv&m)3?#Q$MzaAawg8_HS0MfW|No^o=iddgdOckn zLn`JZC;Z`O`p;)zaHT2o|6@ssn1en08x5|_?@qWT|MUNU=7X>P-D6i`V>=dLP>_)D zgJ10T|NV^*^<88qe3j=qkQ8w3g4pi>{%_LN%!j{MZKyvjEwPU&^5g&i?aJMXS9tf# z))chnOn-VfGWh@Dzii+24R{?7GfXmbNLp7=x~^a^N0{!Mqa4YM488*Y@7T!EMuc4o**_dv29=tg%zuR9}#CwLe ZF7lm6+oM%3(p}KSMZA}4^aZ5yN}69FYBT@< literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_13.png b/addons/unishop/library/phpqrcode/cache/frame_13.png new file mode 100644 index 0000000000000000000000000000000000000000..6e49d35a02fdca84cbce7cbdcc4455a8f6c7a3bc GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^t{}|F3?$W@cV+=8wg8_Hkl_FS|CipJe;3GV_jGX# zshD$j(m~D!10L6U|G3>D>;fX{1#EjgrWdpJzq`==!Zpb!r-Z@r!+bgW{TFJO+!qN- zO!?Nbz~r}2caWn=<;hYT--4|xm^^H6ZOHEH)LZFp|21ezZE(M-7khSp>&l1M=G~k7 z```Ke>ZO4uStq~s?ri>iZOio6Z8x~5aew=^?BI!1D~3ap?Te2HrSt=x#Ng@b=d#Wz Gp$P!f)Kr=P literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_14.dat b/addons/unishop/library/phpqrcode/cache/frame_14.dat new file mode 100644 index 0000000000000000000000000000000000000000..e9ae093296aa29fab5e9902b6f08c589fb0ada98 GIT binary patch literal 227 zcmV<90382#+U=M@3dA4`MZ5Oa11^$Xy@B3DZ#HVvL77flO`r_qyJ{$pN0cm*QcbkW zOb{?`fMilEnI}OcLM9cXSrSxIB``^d*Q8K#Sp&p|blj)ly$_eQu1|D#ZtYL-`P`_v z&)r4JoKwyYFt*0oxjyAsirGHbg&iU}F_Jo|lREvc)7@EgS~DZ_@w7&yaPY@qP1;GU zPx{8yNuAV5=eW*sedFq+PER-?LOv2s0FYrKP6Y+uPUG`wUqQUsGc*0ziH*;3-ma%} dV(p*WKJj*9?cGU|IJ?7+#M);zc>`M4w|A(xa#R2S literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_14.png b/addons/unishop/library/phpqrcode/cache/frame_14.png new file mode 100644 index 0000000000000000000000000000000000000000..efc36c034f1a851498e5afad249adcce3d9fb04a GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^o*>M~3?#kx&YTaV*aCb)T!Hle|NocXoPQU{>hg4P z45^rNchW}Q1_K_Jxm}Srn$(yB6x19;G$JQ*YGh^#@P1G+>r7-mB7W`V*G+#Woopx# zaXH*8JW=$>j6!jp4LdeJ%jrLRbWNrUPz|e%?4;ffl``SFGrY?`?QLBi&=CD)URb+W z;hsD0-;#Cz-B}wlN7VYo-djpFrLW5Bvr5*ct<9@=upq-IF3r5?k;t7x_kgZq@O1Ta JS?83{1OWKuRWASl literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_15.dat b/addons/unishop/library/phpqrcode/cache/frame_15.dat new file mode 100644 index 0000000000000000000000000000000000000000..18727818d76dba4873f5993f6c9ba948ca4646af GIT binary patch literal 242 zcmV zjE0Ef4oN1(k{KEk$4bexVm9YiXdC56v{3T$rBr2ZX>#9!_g z`B^`!y7Nq9&A4060Wo%qv*Ufsu{CCYT^E&9np3604Q_DzFE?pw^~|@kYVIa#&+I*` zl@Y;Kkq??`U*qt@M8@#wp?=9QD&F@s(Gu5We?xHWW={>BMTjUwEzGB literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_15.png b/addons/unishop/library/phpqrcode/cache/frame_15.png new file mode 100644 index 0000000000000000000000000000000000000000..a9f416c7cf6d12d66b42288ca30634bd231620ed GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^z97uV3?y$Jul@|A*aCb)T!Hle|NocXoPQU{n&9c; z7*a7OIpGgKW4(k#*1|KZ|Y7;q&c({geOlq6{l_|NsB~@BeOj2?=LKg_g#L z_90*X^SA8}*y`}CUV@?f(2QoEFV40{_R4EX?7Qw<^Koy}!|cERKm4zM{J-8+&^5^V zM2+FAWR7Cxrk}D0bN=>!U_F$7K!)M7p-w2XYph^ate~2LVYZ-;n}smLZ{Gt?94;j$ Q0^P>o>FVdQ&MBb@0G@4Fe*gdg literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_16.dat b/addons/unishop/library/phpqrcode/cache/frame_16.dat new file mode 100644 index 0000000..60af678 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/frame_16.dat @@ -0,0 +1 @@ +xA E]sIX;n6`qW6`%A/3!!g̡1N) E|;>6⸏97$c]kkw1[mC͜cR>E,hʼnp#xFyWVWG3+˓S}Ğ#G8b^c^cpc&3YQ"vk9܇} ĿQL/ \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/frame_16.png b/addons/unishop/library/phpqrcode/cache/frame_16.png new file mode 100644 index 0000000000000000000000000000000000000000..6ac8fe890573bd9ec52af39a315ac3ab4ea2821f GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^fgsGt3?wHw-Y5l9YymzYu0Z<#|Nl#G&c6#}b$Gfs zhE&W+PWZ#m$}S<1weXDnM;@Ma0pIRB@R(Uk#Imf`XJ1(VT~b2AdEtS^#)tMHfByex zYuj(|)!|#c1w;4Yo6V7boNcfCeZ$Lh|MkLuTKNe-qW;_ev6oobrMz06=bb#S{I8Dh zN*l`;cPanr7UAppFZhu8w7WuKxXRac9?ujuXHUG*!(qm7^gY)#$(yb3fo@{(boFyt I=akR{0Keo@^#A|> literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_17.dat b/addons/unishop/library/phpqrcode/cache/frame_17.dat new file mode 100644 index 0000000000000000000000000000000000000000..87f0cf593bab1049b794e2cd5af31a03aed5ae4e GIT binary patch literal 237 zcmV??y z+zk`^4Hi`JDI!!RUucn1n-C-N9Fb z^_i|y`igmlD_r3USGeLnfcpUE6|QiFD_o!A%FM(h?MeyC;;xkP+jach+JBqBM9KYfaSc^$Z&>9G^P0tbL9Kb? literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_17.png b/addons/unishop/library/phpqrcode/cache/frame_17.png new file mode 100644 index 0000000000000000000000000000000000000000..5b929ac736efe8f6d1985337c1177744c1269ea7 GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^p&-o23?!MXtt5dITYyi9E0F&G|NqjP^X~##9iA?Z zAr*6y6aMhChD%6fCBE4#FAy~=;3R%V0whYqvPd*ASAoyV)#iDwF3O@+^;xolwc$WL45Dpax@=q3hFS3j3^ HP6<әt3;H#љt3Y+oghٽlnF>i^#awm;g~pgNs{6zp' \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/frame_18.png b/addons/unishop/library/phpqrcode/cache/frame_18.png new file mode 100644 index 0000000000000000000000000000000000000000..ee0d6a35e2e6a84e715d5eb5b4fdc9b5d2749abb GIT binary patch literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^ks!>-3?%c9O1%M6YymzYu0Z<#|Nl#G&c6#}&Gd9} z45^rtobZRAwO&R-A}euD{dY-;n8Z2%#V16aW903$A%y{rCU=?+2?S zoD&%`Zq?5?^Z!3DPkmyQ!<_#d4AUG7+P3l-Ff2$saPI&Ek5tBsDdq+>Yyb1R)Ia|J zpWl75<3-~We~dpEEmriJ=c8wIT*8-4vt+_y-iROtCy{xt9gWtVsEV2B>-_MFQnAED a3kLr4d-pH(c*O{GB!j1`pUXO@geCyv16v^g literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_19.dat b/addons/unishop/library/phpqrcode/cache/frame_19.dat new file mode 100644 index 0000000..95e26ad --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/frame_19.dat @@ -0,0 +1,3 @@ +xA + E.No7ћiiRN2W%x@ڜ' +u6.*S;}àT zrt%,};)ZLP$qgLdJ;w.]z#[͝Og" B}};w#1Gb;w_C+w@Dfu2N9R7|pWkk \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/frame_19.png b/addons/unishop/library/phpqrcode/cache/frame_19.png new file mode 100644 index 0000000000000000000000000000000000000000..20fddd84c87b089846e770d1f605bb2ad7f57c71 GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^u^`OI3?%>V|Iq-X*aCb)T!Hle|NocXoPQU{n&#=^ z7*a9k?UaqYhYUnq&Wq-jC5YuSB#B&dnb|T?LRr=$Z_R}Tk2{2ZJNXJK?z>}STkBod zD!Ahe?+Y#-&W#RvJnw{;%)2x3`m?>pT<459AMQBAm|$4*AhL{Qjqyw_`&^NPya`bn zXJgWHCRV@tu;iM2+Sbh*zvtZi6J38hrG4+=)_Z5WUzM+1``TYoxK{mFuJ#L=ri0wm XqQq6W4|?kYUC7|+>gTe~DWM4f0svZN literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_2.dat b/addons/unishop/library/phpqrcode/cache/frame_2.dat new file mode 100644 index 0000000..7e42f31 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/frame_2.dat @@ -0,0 +1 @@ +x͒ F{v& &Y+?Z1S'y!a815&۴HٞclF1#6 f6O7C֏8gIfB\DԻ( \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/frame_2.png b/addons/unishop/library/phpqrcode/cache/frame_2.png new file mode 100644 index 0000000000000000000000000000000000000000..9c150ebe3c6343f6eb7549ec855a85c65de7604d GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~;3?%=liz@&rwg8_HS0MfW|No^o=iddgTs>VJ zLn`JZC;X{zXk7U1e=Qr^_5b1%IX6fouV7|A3{)sB@vn(vQN$aEu-Zyy=Ewg(ur1JZ on5OM)8&Req;!^#!TfKm!>(UHx3vIVCg!03uy4-2eap literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_20.dat b/addons/unishop/library/phpqrcode/cache/frame_20.dat new file mode 100644 index 0000000000000000000000000000000000000000..d5ecc1d8a0be752c422607ca863710fb41e89f29 GIT binary patch literal 250 zcmb=p^>&so*I@;L*3I9pv5Fh-u3+BVd2h|XrM?Rygy#mlsE%yq{QN_rm3^kbraf_K zT{CJkWkNo9UY6CcnsV--^u zOJldbdLR|gckNx0zDb^tqE2c~fteS{QV^$$s-(VRP{&d+%}!k2n8hWL&;YFRNm@X@0pL0J~;%WB>pF literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_20.png b/addons/unishop/library/phpqrcode/cache/frame_20.png new file mode 100644 index 0000000000000000000000000000000000000000..23a061d5442e5950dc57ae4e3f754a72b18ff53a GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^i6G3#3?%=YhPDX_8iU0msvcT2m((dUcsbb;eOISnHE*Dg<1ej05g z6TelqVW*J3LxB0VBTn;T9{U-YPuzYYm+{WVu)4`tCvuk0J$+=^JinE@{pYYme)_^G zRCKb+Ysa%PrSIR~y}9%L-~0HO`-ivRxp~21a(d3@Y0=B8FU(feo3S(D-WC(-B3)aC Yhx#Rc#-1{#fi7h5boFyt=akR{0I{51asU7T literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_21.dat b/addons/unishop/library/phpqrcode/cache/frame_21.dat new file mode 100644 index 0000000..1974dd9 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/frame_21.dat @@ -0,0 +1 @@ +xA E]sIX;n6Upв]٘< i-eW)ŕ…H\jvqHL\6ЅrILܹ%@Vv(P4|Xngɝ~]Du1Us S\,2N?DKF-:eJ]p_,a0` X` w,` X]5 Y4{2vJs9)u۹,]^_7$_ \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/frame_21.png b/addons/unishop/library/phpqrcode/cache/frame_21.png new file mode 100644 index 0000000000000000000000000000000000000000..291598c72d21bac6548d649a4c0ae361a3f3c281 GIT binary patch literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^sUXbA3?%b5?e76nYymzYu0Z<#|Nl#G&c6#}E%0=4 z45^s&c8Ve2Ap-%H>!P`J6Rz)A#2UEl5$}@DKW0@L!ESpLCP{0HM08I+w9mQHp{3|< z#uoLvV(f=)_!nr4*yb$UIO$8w3qQFZD{qDu=PBg(==aGzoAaDygT+2UZ#}`II(`@a zTfYDFcHhw_Mf$&32ite~e#^+LRiYnGe^u zy!rp1m#1E^%JI(s6AU`tXJpwn$-ff(mztmOBd(vL_Y+&&`mg^F|356yrZelFIO- 7p 7$}>ɷ7p tssrs Vmҹ}R~7&?7ԦIbh{<Mi- \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/frame_23.png b/addons/unishop/library/phpqrcode/cache/frame_23.png new file mode 100644 index 0000000000000000000000000000000000000000..b8f16ae239dd9f4c18c18191589b0f98e896c750 GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^xggBQ3?wI-)rtZswg8_HS0MfW|No^o=idcMc)B=- zRLn_E_|wl2FCmdNaYwkl!49Ruey#-t=bLuQzgozl!F}cTUb(J&bqNVPt_=cgZT~$s z{jWFp<9dnv$v=0tgvgY49MfCbML0qY4m1n4Xi4n5_TOEBC(>kZ^AY#v;4+grFO{vO z&Rv<5>-tpA?P=FPcV6u)6IiDGIq|S3riwW=Ht_4NMYDR2t#y5Bw5WhlxO>L&-&1e; Q10BcU>FVdQ&MBb@0PfXRdH?_b literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_24.dat b/addons/unishop/library/phpqrcode/cache/frame_24.dat new file mode 100644 index 0000000..7b92e29 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/frame_24.dat @@ -0,0 +1 @@ +xA EMX0;nVP4HSSxU3/O LiJ4V JC%6VR&DBHjDJ??BlcDZ'UXUޏ0ywįj똳3ścj{:GqGNv;笓J <]#8#8H'GqGtr:9#8#8ؓhNt_>teS^\gQe?vuo;>*wlm \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/frame_24.png b/addons/unishop/library/phpqrcode/cache/frame_24.png new file mode 100644 index 0000000000000000000000000000000000000000..397c64f8533159fe3c792420d93cab3ec64c673c GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^g&@qx3?y%CxHlO{u?6^qxB}__|Nk$&IsYz@wcOLi zF{EP7+o>CQ4;cu!o)=Bt;3dWH(5PX|Xd0Tbewt9=(giM&ioPz%uZwq_{AtYK_=L;b z-~axk|Ds~-#=Rctl_DS6E<4m{++hxOxW(*z(!L?xL2jbS`@Xaf{qGdGWmpvR5thb97@%;4$j=d#Wzp$Pzhc4tul literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_25.dat b/addons/unishop/library/phpqrcode/cache/frame_25.dat new file mode 100644 index 0000000..ba12518 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/frame_25.dat @@ -0,0 +1,3 @@ +xA + s낋]rxY51mMBG +*Sx|Ua5ƵZ-,1HPRjX5iG>WR/+uT廯 ӯ嗴u[Sa[kv5+5nJ%+VXbŊ߬u'SRtzZ++VXbŊٟٟٟ+VXb}Ŋ+VXVI+kq[toVZvoNVw}{r<ýR"R] Wr} \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/frame_25.png b/addons/unishop/library/phpqrcode/cache/frame_25.png new file mode 100644 index 0000000000000000000000000000000000000000..25bc4454afbe21949bfd01d1a8bbab713486ae65 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^r6A163?#iy+587mYymzYu0Z<#|Nl#G&c6#}E%$VB z45^s&cB&%ZAqN51|5`cu2Qt4gsF-;4Ir?6nTp+=+Nr<&Ydrf9n!e{G{vpig`o@IAV zpT3{+yxVcXEa?kbazcxq6{lLB{}VM?`;*JP)#Y~fCz=^>mۚ?vmg?ұηdCUIkE\Msfafa>[sӈ9쬩ެ8b]LgEo w1 \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/frame_26.png b/addons/unishop/library/phpqrcode/cache/frame_26.png new file mode 100644 index 0000000000000000000000000000000000000000..f4a6b393861525908d76f29c6d8a3bfc2ba4f747 GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^l_1Q>3?$V}WIz&Z0X`wFK>Gjx|4VPqzYAoo^mK6y zshE?T@TZ^UpG-o+3Rkfo(&rC6=+gP1FW~!t-{pbx-~a#LB)q!sxL;FM;QZsxnjpG@X|Wc^3Whe7pc$LY4HynfX%(+id5E{n0v40R%_lqrDMPR_=K#Nbs1J=Z*FW%KHev5UH0bx zvhP3A?5`T{eKs|C?=(67e>XRlv;V$O{Jat(4^}wWvJV8GgET;O7Rx~3dn=g8x81kq zTBsYH(o>B~k(w6wdiUP<-~a4d_f^K|^b>jOg|*Ku{@y(>H?~&4sQTS6>xH+g>q>Tg S)BB(oTgzV+tiQ0S`YHfvkCqVt literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_27.png b/addons/unishop/library/phpqrcode/cache/frame_27.png new file mode 100644 index 0000000000000000000000000000000000000000..8419ec2301e8c0278f9f86d97417d51d3df000bb GIT binary patch literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^wIIyM3?#Su{YwKY3Z=Ttv zWf2y7&zVY?&I!gH*lL(C<3L-FqWk?PvhJVcioOWu?Vls-VEE&Jg0;|sb157vj!F0I zoFJt8?3CA*9ZT0UM?PxZcc8vtF);OXk;vd$@?2>|KWW^(`l literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_28.dat b/addons/unishop/library/phpqrcode/cache/frame_28.dat new file mode 100644 index 0000000000000000000000000000000000000000..8cbaa1961bed61c3d774192448857480eb49762f GIT binary patch literal 318 zcmb=p^>&UUU$cUMYi#vvHNCX5BIcc(ch)S(P&rt#xF_>o`BhIHdwqxJ`pXR0ab3O; zyhvzU>thM$uzdDevN_u7>@yw8*(S-Z(T=tZ`1|rey6L^W%k_%NF5F|Ui=6h%{9e%d zZ;qDSdF$l&FG(-^99&vHr#0ZpbjM5kK3J?R3cg=E!9=w8_VG%C;KB!IWDhW~88k5R zBz#a~TYLY*^54yi?c%-~`hWLu-)r%Km;K+Pv$J34CnoIU-@%{2z$^h(euDc6>nEnl zMr%QcZlKHrafo2K5)VwFf<8p>oeNCgzsZd&I##GMUwz`}E2+Yy_3mfghfV%>+;#2K w_7?4#@$=nu@tm|;Z8o*f=bqOl7=Ny{aυR-rn.ꯋ\T:*)|) , ,x_}:^RUoɢu~މX`XЏЏЏЏ_`X`XЏЏЏ_`X`XЏЏЏЏwbX`PU)D"c{z3<}^?bm잃a.] +{Q6uT,9 \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/frame_29.png b/addons/unishop/library/phpqrcode/cache/frame_29.png new file mode 100644 index 0000000000000000000000000000000000000000..ffe072c868268ea77f05f71c17088021d549090d GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^tsuP;BJn$?U}wS}0TXykDcgTe~DWM4fn*mjQ literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_3.dat b/addons/unishop/library/phpqrcode/cache/frame_3.dat new file mode 100644 index 0000000..188d531 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/frame_3.dat @@ -0,0 +1 @@ +x E{v& &Y+bk'ya:TXl޶$W+ӏv9}gR@H0YPBEm?s"bt2cn:ﺭ;YzQ7 \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/frame_3.png b/addons/unishop/library/phpqrcode/cache/frame_3.png new file mode 100644 index 0000000000000000000000000000000000000000..945ee7cb993022c3ba0081cdd6b833b92395b30c GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^vLMXJ3?y@6zxn_vwg8_HS0MfW|No^o=iddgJUm?- zLn`JZC;a)}-nj7F|NHzr>;C`eQV>iqJa$2VtqrL1f5H!Lr4wnjD-wRh|KHox`0@XB rt_3F@rfGYe5mn(<%W`B5%F}Pb9F^HI>YU!D_xBYq^}BRWJ#p5u$@O~+U60g$ z^ZZ%%C&E6_>--Dp^Lw@H{+B%qvQk^Qjp5k3r)$sId8T^L{8KD*Wwpx3yDA4+gnbMS zvP`Zw$-FB!Z`b@c+Rxs&eZ4X_H(t}zN!in)_Pe(B-kBwv{Vn`0k`1A%fm#-_F9E_Q zHV6?QtI7cc&w)*Z5ts^pmI@a>n)4-LQd5VAxSF@+|0}%z9_8)t4X9Z8-TGsS+L_O` o3*N2iKjl*T?_}Zp7w1|m>#S{6FV2w-Q4O5Cykv#>|8j$;0GhIr$^ZZW literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_30.png b/addons/unishop/library/phpqrcode/cache/frame_30.png new file mode 100644 index 0000000000000000000000000000000000000000..75dbddd2416814ef91b71363c859c3dbe86f0802 GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^ogmD}3?!9ab#?(Mwg8_HS0MfW|No^o=iddgws^WY zhE&XXJ8dKHAp-$deb!SFYn&!CY6Q4UH4Jk7sONJ?V2XzJ1%+7_{OTQ#YUCIa<5O*I z@1FcVdoow(KLw+VEhS36DYCp#b}QPnZQP#yZF5>L_wIw#N8!&ZL32x5J2SZFRNT#W zJ+d{@@YEHq?4aMP=C-7+TKmm!p0e&81)Cc7+)G|xes$W5z3%q9Wf`gZcFvkf-|8dM zyYV櫷:ñA8-+mTbllltM&]ll&]Ill&]y 6` 6`iuyXWi\tz>.zk t77wJϔ4w҈85 \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/frame_31.png b/addons/unishop/library/phpqrcode/cache/frame_31.png new file mode 100644 index 0000000000000000000000000000000000000000..b14d1fa267f229a5b21beb06401aaea3c7ee4673 GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^y&%lU3?w&9$bJT-*aCb)T!Hle|NocXoPQU{+Ue=y z7*a9k?X-=&hYSQ<^+j{d5~R!+0*%=60@{+AM5auc(!n|5PK2l6>q3RVA30i5E;U78 zzm!b-J6oUkrH>MO^Sih(w%FVJC(3=iBOLgbf7_Y;qQm^gYNmAkvubmKsBNb!r<>aC-Pn**9g*ߚ?aOkL_<[c>c˘uLI%#0#0#otѢ}4fv_)Eph5R881#0#0itZ#0#0#0itZ#0#0#0itZl0#09q"HܜHQ"L5}-Y׾k`>z鸳4&p!!`:5 \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/frame_32.png b/addons/unishop/library/phpqrcode/cache/frame_32.png new file mode 100644 index 0000000000000000000000000000000000000000..58d42db3c5b755228c7565cdf8128438559cfe1b GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^6G51f8A$#VJCOjS*aCb)T!Hle|NocXoPQU{+U@D$ z7*a9k?X-=&hYSQ<^`{N~#na9iwuURu!V?k}}KG;`at7keZ6HBO!j zPFw%CYT8codjH_FpLqjK{?_pC(kM^0-qBFEG_3wrT<*O&_g>F?-&noh_CE9X8vcLx zZ-?L5c<5S4(d*MS%jL4aFL*KcmFQoSBb$x~rEe4WKl3d;RlhCaH-pl}T98i}JYD@< J);T3K0RZV1Z(9HW literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_33.dat b/addons/unishop/library/phpqrcode/cache/frame_33.dat new file mode 100644 index 0000000..a261375 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/frame_33.dat @@ -0,0 +1,14 @@ +xA a޺@n7+*L++柮bb*LCc kHrjJ5Yi~0_TT}e>5b_w͟?\Rai+7W\wLUNL ++ ++jOkc\˩|%o} 8 ++ ++ ++ 3g ++ ++ ++3g@ ++ ++ ++:RXB9I=ko/Swؘٯ`gr_ٙYVSYzIefnmQoz > \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/frame_33.png b/addons/unishop/library/phpqrcode/cache/frame_33.png new file mode 100644 index 0000000000000000000000000000000000000000..924c728e0aa0b3c22b7537d833d53f072a923640 GIT binary patch literal 253 zcmV7LUZoG!D=_b+G>~XohCiGYUA3?`$qlQw=oFH)|?GM%W=ZP z?o-WP`{JCI-1j+kVd;lds9Q_l#)_e*e%!H*n2YxP(|eQ4yd?KKF7uLH<|VmLxpSZ$ z1MOt{Gd*JG7)eOIdQ#d>d~xt^_>>*JiBA`^i7E%w2i00000NkvXXu0mjf DAwYG& literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_34.dat b/addons/unishop/library/phpqrcode/cache/frame_34.dat new file mode 100644 index 0000000000000000000000000000000000000000..7ceb0259d4a6f14ad6d9e5d76eb87c07b034c711 GIT binary patch literal 331 zcmb=p_4bZoU$cP#>xCNzb)OE=JWTSu!=w6LqU*^gyy-W?Z;@;Fg>L`1=l-EkZ?iVvV?C0_X=i2_ zCW9G)ljhbgx7l(nwvgX`%e6^Q_5bh5(A^bzqxMK4)(Kt#i%i{@a^9b964fc@euQ;PW=~uiO$9&bgnPb zQZeW4^o^WMjsmX#U8f~jtBEBjv`tG?seT)Aq*3=qXXlI+_hnO3Z`!AqXdKG<^zh@1 z$2a89EJ`kxb5FQ`=(boyS7nhxxW0w*`IRj*&5GUQE?a*(lXrI>tApXq$M?>eXvpg? zJ7Dnt${M{rF8!;dRI6f&a!y#e`IJAq{!imf{LG6>4VD`%_D=Lmb(?#S3j3^P65% literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_35.dat b/addons/unishop/library/phpqrcode/cache/frame_35.dat new file mode 100644 index 0000000000000000000000000000000000000000..56bc3e28ee83b24767b00391773560ca842f0b44 GIT binary patch literal 342 zcmb=p_4e+@yk-Lt)(dC;l&Z2-bJsJ}Gu4L)&k?(_Yz24S#B<8tYk0!l*-FIIBjt?0 zZ`YVyJa2n|_x3Zdk9bXgHfz^qygTh2XweY|A-_q!&2k4t`5 zdHt-uf3>=7$NxRcHpcK?YhPbowodr?x--Th*X`3@Jbts=sCI7N@2dT+b7tjn%l`^M?L^?B>}TrgGEWxv+gtv>&1 z^SpAXK9B(~H-km1?tx8$7`Ys%2q^kG_8{C6zxh|wzed(x`wSQ9yIX(x>6}yP9JAN? zaAi*~^7>i6``g|}l``+#Pxx*7Q>a$?+fMp@&Wq;Q9mQL}|JJ)V^U3dOv#MPg=?~>E Qwf>fGyj#QM-^sTe06Gf6oB#j- literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_35.png b/addons/unishop/library/phpqrcode/cache/frame_35.png new file mode 100644 index 0000000000000000000000000000000000000000..d29806c6037dea38b05d8211a0a45c2e0c1ff1d0 GIT binary patch literal 243 zcmV69g+8T9FaOlD5lXr@5A{4g21 z`3F-KR1%=7ED2boeU%@kIrD;Vui5n8>omRhI!*7rPSbn8llib6 tcmDZ{$vZ*}#x^0hn~*mYfxOG)^abWznpY06{Y3x(002ovPDHLkV1fp`ZrcC= literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_36.dat b/addons/unishop/library/phpqrcode/cache/frame_36.dat new file mode 100644 index 0000000000000000000000000000000000000000..282c60d23bca6a7c3ac2c3da0744992f3415d8d0 GIT binary patch literal 370 zcmb=p_4ck~UbBG!>xDHtOI5|b@#Qg?H_pDw$;Z^XB}m*L@cxD_oki=_lM}=$=E<9G z-R?29c-FLpVq^dBT+!v^g&NTH_@wd)yXEcGyBzK-j`OqvsA7=ytvYW@9>9b z_WqKQLf0xI)<4~MTkdf{-#UAXb5bv_XIHKgJ-y+Ial~c2Rr$$h4+rJ0P5XKC?x8T> z8}0rlCMY_$@kss?KYU%i=k@&DYZIUS(0u#r`Qg$fYBKRcefj5YDxU=N96s;-dSNve zNU2c@M9){5FJQQ)9U&%Zbfx$L7;cb*sRL;UIPVCC2diGpI|Q*2B5lhKfv>@?fNH7t zol$&B)74DpqnE3hkLL7O>+2T(ei-}yr{??h8{VJ({BR!k#40|+{iXYjd3MGhD3d#O cr#P`%x8CVcM|J%hp|(5rsloS;^$2?d0KeI-=l}o! literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_36.png b/addons/unishop/library/phpqrcode/cache/frame_36.png new file mode 100644 index 0000000000000000000000000000000000000000..96ecb421354bec386b535fe1e2cf4fd753142013 GIT binary patch literal 272 zcmV+r0q_2aP)#C@Z9i(!~1M zrir*qV+k70-90^>68kqFj-O|}12;kA2%H6FtI=5KdLSEeASYjjHt&ri*^^Il@nz@$ zcM<0VP`V6=a&MyY!``k&|IeMgxU(i;@#22_fZ4~6ypj)cPBagDuD;9QQOl0fagwX_p(bdJihERcvP@-vOY{Y; W&Oa>B-?9<_0000W;+CoZ{7==byZrmTWaR#jx=*j}d9!=n z?jLue-7XczO-tXCTNhVr9_xF%CU42z`5zaC*qmOutsr!7Nc8d9(}S-rUG+8hGgqu? z>hF#zI+2@FPEJzwo~AQDvGQO3&(Hs_exLZN>iNf?wdd`Eg1#-+{C#?NzFg&`r^?Tk ze!Y~>4^#=)^407M7_OO)5CclC+`bSD6Zb-m25VS)uMGyjf-Qs@QzZ?7*Sz=JBAN4V zs?k%Ey^Est6oX4n+Z;cW+cNi&e)WmBGn&?4`2F$Yr!zA>_V(^buig{cW~=_xLjUnR b%i@}2^Cua-iuB0WJUmakbVYvd1M%+wXsyHf literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_37.png b/addons/unishop/library/phpqrcode/cache/frame_37.png new file mode 100644 index 0000000000000000000000000000000000000000..fcc51627d75b1195d79e915e5ba5a26accff30b6 GIT binary patch literal 279 zcmV+y0qFjTP)Q+l9uWqZrGW15EmmL1Za)FnMD)vS~08#pCh dPbukz=wHCg@a-IQ|2+Tz002ovPDHLkV1gG4c{u<8 literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_38.dat b/addons/unishop/library/phpqrcode/cache/frame_38.dat new file mode 100644 index 0000000..71cf53e --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/frame_38.dat @@ -0,0 +1 @@ +xA0ЎuA2;Нk(gytp9$D\e^'t-aIFMSkIŤ:7|LkN8N7i}i,[WgӴ?31iN}}=OM:4)SL2eʔ)SL#$ JJM:}]L٧SQL2eʔ)SL2աPt(:)SL2eʔ)S:ECq2eʔ)SL2eʔECѡ8O2eʔ)SL2eTCѡPL2eʔ)SL2ݓsJCIKԂi93n_ +Ri4\g;% }an \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/frame_38.png b/addons/unishop/library/phpqrcode/cache/frame_38.png new file mode 100644 index 0000000000000000000000000000000000000000..89238f3c5bd6d3fa6aea44d2037dfd3bc0a34723 GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^D?yl%8AxVH_vZj9wg8_HS0MfW|No^o=iddg&Um^w zhE&XXJKd1$kb{7$dT5{Gy(7n%mk6AeQJ$Kzej0N`L_}BkhKVNY?%zz+J@k*Y+f^`a z^_k}%XBzDPc}byOdLr}0>WR7QehE+CtzjSL!0mG&m*?>2?tA~Zcn+}6IBv0`eDmq~ zc}z}+JJ0WJ_POR~GP(Dkvz2Uh;m>QHUB{HvnxDHtOI5|b@#Qg?H_jFnQdbgP@~WvsW^bbC&dz=Fbh`ibKL2SI zT-|A9x%8!2QQou6xhFC&&-ym4$aD9pW82OKdqz6mnsRx4=J8U#egE%mowI%0@84xI zZ4W<8zrSnRI_rgRZWpP2x%=6e@AT!byU*{w{_FTmgQ=a_yU*CBT#j3w|M=bQ)LTYp z-zJx@O!B(5Z`GEZo10QkPt%RwHa}ta_dLm$f4^*>CH-=s6v(7v&e*fR{ ztx~zGZ*4yp{T!$et^>&Eoe;)fc50TK5C1au;(Jh&pbBm$WPVLpzUJk@F9}r!=o)#a zk*D#WWv<`r;O<;6&F5D_CzowJTRZ36gVgy2`}e(i{XD+qP1dt!Yu@B<2_N6LRd3?0 je}Av+{;~a+3#!$wOf&lxJI6os@crUlGxJ^MEBXTf`CjAm literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_39.png b/addons/unishop/library/phpqrcode/cache/frame_39.png new file mode 100644 index 0000000000000000000000000000000000000000..1dc9cd1bc53a2e27ad5b61791c7a76cdab408123 GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^YeATi8A$#}%mtDRYymzYu0Z<#|Nl#G&c6#}?e%nV z45^s&cKSvxCPM)i^QmwDPN{$JaQO_kPo;GYt#kKIo$zc&c3+{t4%5trR)KEM%_$W+ zC*PSQGk)DUdv52RwA;cz%>sV@oL27Om%5WD`n|Bh@=ZQB4@JyxmgML?8g}V+>Zb|( zXHzc5U$%Rcbzopr09yKW761SM literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_4.dat b/addons/unishop/library/phpqrcode/cache/frame_4.dat new file mode 100644 index 0000000..67b30e8 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/frame_4.dat @@ -0,0 +1 @@ +x E=u pجQCOM'ˏ$ @3eF\FNXRyؾC{a8R Ńa2@qkH1(`cj~0ܨعnXGĀ \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/frame_4.png b/addons/unishop/library/phpqrcode/cache/frame_4.png new file mode 100644 index 0000000000000000000000000000000000000000..b72f9e70d374741d1d4ec4537b7a379088325669 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^iXhC$3?y^40(5{BTYyi9E0F&G|NqjP^X~##UY;(F zAr*6y6aM`F&%o^b_W%Fyk`gih|L^bcaylaE>?|uG@sHV&`Ea~}XRw*|gxLT4_cSuT v*!F>Kf^<]߳bZn^AQ}[9^]ynajM܇K̘1cƌ3f̘1{W5}{7lMޚxI<Kαyl3f̘1cƌ3f̘1ۻٻ={αyl3f̘1cƌ3f̘1ۻٻ={αyl3f̘1cƌ3f̘1ۻٻ={αyl3f̘1cƌ3f̘1ۻٻ={αyl3f̘1cƌ3f̘SʑӒ7HK޼g\u_r'4[-]qL8ƝY1q!/(% \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/frame_40.png b/addons/unishop/library/phpqrcode/cache/frame_40.png new file mode 100644 index 0000000000000000000000000000000000000000..8034d862d60aed55180914d323aa4557f39c036f GIT binary patch literal 267 zcmV+m0rdWfP)xUy&%?@Zqe$Lt^IHF*f5Ycy_0y589U#OP zDOgy2<>WYTpYrhA^tGLJe{+Ghzs|!@a34iK>1DI|zE}TO_YMEQ{K#kcE&Gwr@LTpH zpW(OcM?S;hKGje=R>w-jeWqvU%KmI=|;a=Y2bm$Ju*=arXY8`~`*2(t2@u R+XVms002ovPDHLkV1jNhe*XXf literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_5.dat b/addons/unishop/library/phpqrcode/cache/frame_5.dat new file mode 100644 index 0000000..d5dafe1 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/frame_5.dat @@ -0,0 +1 @@ +x1 Eu7ЛZ|ND B0@R$l,->VKZ[Io+o1yT37=P9COrj~W-G?9JF6VLpcd literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_6.png b/addons/unishop/library/phpqrcode/cache/frame_6.png new file mode 100644 index 0000000000000000000000000000000000000000..05ca358b0ebc0c3a0b76df7bc0411af2d596f586 GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^njp-`3?wJ5o3s^3u?6^qxB}__|Nk$&IsYz@<>Tq% z7*a7OIpGgbjFGJ^N}+Uq<3Ul6SeNAsih33jb6-tP*oFY|>b2SQ8z)uR?vtd#dj@Cr|apornv1)El=m yfE)D&wC=s-ob2oKGnB!6a?|8|>$jotR__k)Tfb?1CbP75iyKQ(;+|ur1|Lo4=9^M0XYLiuS90INiM|3P! zl1w_Dw_=lP*>oFG#pgDRUYDi$t)1S^DCLO~UG_j|*#gebx3BZ+nH+yL4#Xe`MZ5Oaleo}by@B3DZ#Iau!Ks7Twck}KFFz0sl!D6kkmQ`t zEwPxAt7e4vK(tICs>9R+3CvUzZbGE0t`1I&>PRt0PIx4!4(e4n`AHE@7YTQ-GD-FT zU5Un`f|ct4S(0g==b;u6VVT$-+hayNZ>kV6cem$hSdySrt`hAq)&LF)(-K_0ARP&tIq1zdFuig-v-KQf|`xVm{I3hDX Dr=(<@ literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_8.png b/addons/unishop/library/phpqrcode/cache/frame_8.png new file mode 100644 index 0000000000000000000000000000000000000000..db1f1877ab3aa0f221156a6c8ab461cf548b7c22 GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^h9Jzy3?w~+F2@5Ywg8_HS0MfW|No^o=iddg8a-Vc zLn`KMov@L&*+9hQeCRTV$kt=bOB^&Mo4IaE8~7hfU-_hp z>GjwD9k;ZU{x$DC`?c>k>SwyYUwnVQ%-n^a7#d|n|4z96z#8Zn22WQ%mvv4FO#qqh BQ^o)Q literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_9.dat b/addons/unishop/library/phpqrcode/cache/frame_9.dat new file mode 100644 index 0000000000000000000000000000000000000000..d79295ee0f93bf3b101c220b436cc0d302b3dd72 GIT binary patch literal 206 zcmV;<05Sh~+U=G>4ul{KMO}02Nm#TyxdGe+ZZ;LFff1oFD-%8|o4)*%Sp6YHdA;?7 z06sMb75pI)g+!%pq7Eks1(Ax~0~7*wDR<~T*G1Lma@N`!#dGl;n!P;E()p>G>kd7u z??pPBm5wsHKNm@}RC?UEAu(m9sO7c1-s)A`rDjb%?QOHhl&f?!YX5jm&9&Z*<@HW4 z${vU~>O~9yjCv75*xjqWU*~WAGqlU$A+xo=8}e*Zc!_gVK9@YR<##wsNwa7{iF0qJ IFSFt|>Yb-#$p8QV literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/frame_9.png b/addons/unishop/library/phpqrcode/cache/frame_9.png new file mode 100644 index 0000000000000000000000000000000000000000..74ddf08da2f671de67f1fed645afe705662e8424 GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^rXbA73?y%B7#ag9wg8_HS0MfW|No^o=iddgYCK&W zLn`L%ov@L!AwagA1{7>@m-%iy`qAdx51;UBica)=ne)?S3j3^P6=xt5c>OY+~gW)7igeMcUJuTaR$o&p-O;5+hmJG|D H^z#4!b%aZc literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_0/mask_105_0.dat b/addons/unishop/library/phpqrcode/cache/mask_0/mask_105_0.dat new file mode 100644 index 0000000000000000000000000000000000000000..97e9e5dfff667572d9451add45a3a5e05c157625 GIT binary patch literal 162 zcmb=p_4bw{SAzlr%YohNFaEDz7aTYx-~rdw7iUi!E!oMQ9qZ10=B~!Y1!Xh8FbC`Z zyZK8u`25eDzn4VhGJ|J-om&>Dy5;$~&1-gk)KCM0Wh*o*?Q>r*t&Z>8Q#|w7j5+Ec zQ8l$%fAdS<5uE#%zyDF50RnO9r|hm-%}`_g>f0!1_?Y+V!H}75vy!UUpR@9hH`4Vh H(~brJDN;^O literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_0/mask_109_0.dat b/addons/unishop/library/phpqrcode/cache/mask_0/mask_109_0.dat new file mode 100644 index 0000000..eadf83a --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_0/mask_109_0.dat @@ -0,0 +1,2 @@ +x= +0 нi9'b$t^#ii?bK[AUF徝Ƶijx]m]2-ĖK~ Vw}X&Oɓ666666yR'%lllll/hlm dl3+mͫ \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_0/mask_113_0.dat b/addons/unishop/library/phpqrcode/cache/mask_0/mask_113_0.dat new file mode 100644 index 0000000..5eb7f5d --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_0/mask_113_0.dat @@ -0,0 +1,2 @@ +x; +0>I9+Es=ϤL1̄[FZU4?i<;7;P#W-[ݯ6ddddddc",;"sk摑Q&erw######L.摑Иy1^˲\3 v \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_0/mask_117_0.dat b/addons/unishop/library/phpqrcode/cache/mask_0/mask_117_0.dat new file mode 100644 index 0000000..781c7f8 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_0/mask_117_0.dat @@ -0,0 +1,2 @@ +xA +0 }OrR,#3,o5Cq:;;wvNJZG=m} ѱ2iRkj_YYYYYYYYe_/WVVVVVVkd-Ϻ,#OZc]|{ž$ \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_0/mask_121_0.dat b/addons/unishop/library/phpqrcode/cache/mask_0/mask_121_0.dat new file mode 100644 index 0000000..68810c3 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_0/mask_121_0.dat @@ -0,0 +1 @@ +x1 О/w YMS8>2SFOEcW\ۼ{cpKGBКmxhfffffff/s22W|*d1*5̬RWas\xm~8߮r0wjsdm&y \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_0/mask_125_0.dat b/addons/unishop/library/phpqrcode/cache/mask_0/mask_125_0.dat new file mode 100644 index 0000000..2c73ef1 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_0/mask_125_0.dat @@ -0,0 +1,2 @@ +xA + н_TH`3AOL4 k(ewGW. #2} \Ygggggggggg_d>j^s;;;;;;;;;;'q;;;;;;;;;'˰qu_PYw{e=dG/ \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_0/mask_129_0.dat b/addons/unishop/library/phpqrcode/cache/mask_0/mask_129_0.dat new file mode 100644 index 0000000..812ee8a --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_0/mask_129_0.dat @@ -0,0 +1,2 @@ +x1 + /*DE'hgt-}_pV \"b=s[J=8Dho۞' 0X ۴e0`  j" 0`Wf`^P0`2Ȁ  d07(Y/XLGby"pT \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_0/mask_137_0.dat b/addons/unishop/library/phpqrcode/cache/mask_0/mask_137_0.dat new file mode 100644 index 0000000..f6d993b --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_0/mask_137_0.dat @@ -0,0 +1 @@ +x1 О/+FZ?J L7Ժ*Ba%L~˻ʓCJYIWJ .K]R0a„ $INTwlLaL0a„ &Ld@PO0a„ &L0e@P?a„ &L0aDe@ &L0aMIlL&)dlgacR<$v,ɺ?U2] \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_0/mask_141_0.dat b/addons/unishop/library/phpqrcode/cache/mask_0/mask_141_0.dat new file mode 100644 index 0000000..8c685c8 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_0/mask_141_0.dat @@ -0,0 +1,2 @@ +x= +0 нi9'EDx͘%I9+E{$m^&uS"D6ڟ]98UMbҾY[2拉Ĉ#F1bĈ%iRN潝ѳ#;#F1bĈN1i#F1bĈ#FtZ}Nk1bĈ#F1bktZ;#F1bFV-u"IoD-*7uj>bMV+ \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_0/mask_149_0.dat b/addons/unishop/library/phpqrcode/cache/mask_0/mask_149_0.dat new file mode 100644 index 0000000..d258350 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_0/mask_149_0.dat @@ -0,0 +1,3 @@ +xA + н_MEQXP৞.|94e{JLv#^n[ ?; +ZIV-*w˒1*+VXbŊXgwqX}JRYbŊ+VXbeΠwfeΠ^bŊ+VXbʜAʜAbŊ+VXbŊ9ٜAbŊ+VXbŊl0*0Tj`?Ϊ;X=zZr* \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_0/mask_153_0.dat b/addons/unishop/library/phpqrcode/cache/mask_0/mask_153_0.dat new file mode 100644 index 0000000..fc79e9e --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_0/mask_153_0.dat @@ -0,0 +1 @@ +x1 Н/礑h&F`Ҽ@I;PZ^X͌mf.=5 [if-R+!wr˜g\j̘1cƌ3f̘1cfo.2?1z `ƌ3f̘1cƌzƌ3f̘1cƌ3fztf3f̘1cƌ3f̘kk030cƌ3f̘1c9;Ď`vf͚̆ZϘW9 \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_0/mask_157_0.dat b/addons/unishop/library/phpqrcode/cache/mask_0/mask_157_0.dat new file mode 100644 index 0000000..ad749f3 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_0/mask_157_0.dat @@ -0,0 +1,2 @@ +xA + н_QRY k*q͵=j7~nN.p%ڵsi.رcǎ;vر{.-W2={mgy+رcǎ;vɳ2;yּcǎ;vرcNɳ;vرcǎ;v2xI3`FaC~S7rJnYfY8T-%e~DHFIIc5zv^p@ZbtcP7qJ_1+9^La zKHT%7-Y-t#T{NC)k=gd2o zjNY~Ld^ftnUmGj|mU3?60jkj`HqbYoV)>#S!~tpmi%zkeFHURTr~Ks{-QatqS5&9ib(yR@{gMnQ+Lcye6Ty_ Q@^8h%UuzjeUK>3D05K(RC;$Ke literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_0/mask_165_0.dat b/addons/unishop/library/phpqrcode/cache/mask_0/mask_165_0.dat new file mode 100644 index 0000000..3a17a05 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_0/mask_165_0.dat @@ -0,0 +1,2 @@ +x; +0>I9+DyI4ˠ5:Wvdqߜܴ<d2x%[U%2]&K,Ydɒ%ˡ,S՗r2yd=,k_{Xdɒ%K,Yd)0m,Ydɒ%K,Yd)0m,Ydɒ%K,Yme,e%K,Ydɒ%K,eq Ò%K,Ydɒe:I9EQ=Ls I{ZtR}Sn:|R[?_*SL2eʔ)SL&ϦI O2O2eʔ)SL2e*C1PPSL2eʔ)SLP22)SL2eʔ)SLe(}2)SL2eʔ)SLe(}2)SL2eʔ)Sic7;"ޙFͦސٙvL ^2}oO'r \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_0/mask_173_0.dat b/addons/unishop/library/phpqrcode/cache/mask_0/mask_173_0.dat new file mode 100644 index 0000000..5ef85e7 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_0/mask_173_0.dat @@ -0,0 +1 @@ +x10ޯT [4v2ƽok݇;Ӳ]f֞dljlG0n+߻mG˖-[lٲe"Y}oV[lٲe˖-[lٲeհՃ[2lٲe˖-[lٲeհՃ[2lٲe˖-[lٲeհՃ[lٲe˖-[lٲeValٲe˖-[lٲef[BmаE;N-ۜT/rl?* \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_0/mask_177_0.dat b/addons/unishop/library/phpqrcode/cache/mask_0/mask_177_0.dat new file mode 100644 index 0000000..78a26a7 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_0/mask_177_0.dat @@ -0,0 +1,2 @@ +x1 +0>I9+?߁iև d̹xֈxN/է|{ظ8d0h=cFf̘1cƌ3f̘qq=w6;l4cƕ<nj3f̘1cƌ3fXһ1ֻcƌ3f̘1cƌ3fXbwnj3f̘1cƌ3f̘M'X&1cƌ3f̘1cƌ3ֻnn1cƌ3f̘1cƌÍ3U< \7+(<OƌΊnj4@ \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_0/mask_21_0.dat b/addons/unishop/library/phpqrcode/cache/mask_0/mask_21_0.dat new file mode 100644 index 0000000000000000000000000000000000000000..368c9941fd09f695d58934eb0de062a54fd74c02 GIT binary patch literal 48 zcmb=pWo*#E=&aDfq?gm=vB)I2o5jQUx&ZeRqn1^Uf@;3Hn^Ft5vfXH5Z;oPEP!;?T E0GJaIuK)l5 literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_0/mask_25_0.dat b/addons/unishop/library/phpqrcode/cache/mask_0/mask_25_0.dat new file mode 100644 index 0000000000000000000000000000000000000000..e4a5b6d8afc4516779d7d246ebfcf7ced36029d4 GIT binary patch literal 57 zcmV-90LK4#+A}bK0YfN+0xnzV>=60G~7^dI6e8pX8D%7wG^1 literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_0/mask_33_0.dat b/addons/unishop/library/phpqrcode/cache/mask_0/mask_33_0.dat new file mode 100644 index 0000000000000000000000000000000000000000..2ec712a7adcd6edf1ce2c785adf00e3ca7c5b729 GIT binary patch literal 62 zcmV-E0Kxxw+A}bK0Yfwh1zdy_AgLHMX5awSafcxR$OTi6Q^}|q!_EwNn!%sOz-Hh| UV{|eD?iT|>N~mE50E^|%1m89on*aa+ literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_0/mask_37_0.dat b/addons/unishop/library/phpqrcode/cache/mask_0/mask_37_0.dat new file mode 100644 index 0000000000000000000000000000000000000000..1588cfce1318608538dbde89fa7f04d05ff574e4 GIT binary patch literal 65 zcmV-H0KWft+A}bK0YfYh3b=?-grsWFnuP~Y*IkB0KrWabyvjz+8Z~Q>n+4Agg!2&C XEPQ!r0L+5>(SR6b)HDkKY5W93c-0$f literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_0/mask_41_0.dat b/addons/unishop/library/phpqrcode/cache/mask_0/mask_41_0.dat new file mode 100644 index 0000000000000000000000000000000000000000..e369027e3831ce2d9ac858eaa2cdfa5e5498df07 GIT binary patch literal 68 zcmV-K0K5Nq+A}bK0Ye-R3b=?>h@^7Jm`MQ8#+`;lLN1s-f=Wlt95r*)%t2))yeuHD a3;~--s0 \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_0/mask_53_0.dat b/addons/unishop/library/phpqrcode/cache/mask_0/mask_53_0.dat new file mode 100644 index 0000000..572d279 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_0/mask_53_0.dat @@ -0,0 +1,2 @@ +xK +@!йoQϺ:(m&s-6Z{m4YX.F٭XZij=:έ֋b忑VH 8 #[Y^Xe \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_0/mask_57_0.dat b/addons/unishop/library/phpqrcode/cache/mask_0/mask_57_0.dat new file mode 100644 index 0000000..ea81e6d --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_0/mask_57_0.dat @@ -0,0 +1,4 @@ +xA + {^s=YL՚ ( +ouj)  +Z7yv,ԴwVQ iGiҤDfەwo4ѤoLLȼ}4 h \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_0/mask_61_0.dat b/addons/unishop/library/phpqrcode/cache/mask_0/mask_61_0.dat new file mode 100644 index 0000000000000000000000000000000000000000..93d2444d8249bf3c534223bc1bb339d54f7af957 GIT binary patch literal 119 zcmV--0Eqv1+U?dk3IHJt1<*dHN$!6+E5(hNrI=BE>;m7%=n!PCCC1eixx=ze|IFU^ z&9=7bWCto@OXj<~I62OGT~zl9#bLvS4O_9jbFKC1I6Jle?Kb{3*sx(Qw*P@W*om-i Z8|GT{jXc==mTf+B&fNDGb^()u!gb2GK0EGW|+U?gt4!|G?1i(A5f&YK5CmXS?mE~YV7mp;Hi4u*ftt_y*5-7lK6FzHr z>I4k)=)nLMYOw4+bP*CfgX@x(2S?CA0}V9%z<}J֞!Ŋ+V嬪.2XbŊ+VX.kBzwձ̀gkYZ \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_0/mask_89_0.dat b/addons/unishop/library/phpqrcode/cache/mask_0/mask_89_0.dat new file mode 100644 index 0000000..aaa4c52 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_0/mask_89_0.dat @@ -0,0 +1 @@ +x1 ὧi9'Hl?L^"&M?bq?˸,9!z]VScƌ3_c!`n3f̘1č 3f̘1/f>.Uc˻; 2;Y+7 \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_0/mask_93_0.dat b/addons/unishop/library/phpqrcode/cache/mask_0/mask_93_0.dat new file mode 100644 index 0000000..e218fa0 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_0/mask_93_0.dat @@ -0,0 +1,3 @@ +xK + EyV,OmޠrPH0{2bc{tQ] +{Q{{弬֒ǎ;v_ڳ}L}l߱cǎ;v̑̑̑رcǎ.Legw3qeѾ@i \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_0/mask_97_0.dat b/addons/unishop/library/phpqrcode/cache/mask_0/mask_97_0.dat new file mode 100644 index 0000000000000000000000000000000000000000..74ac719d06e7ba35f7b749e668c884f291daefb7 GIT binary patch literal 150 zcmb=p_4cMC*8v3{my5N2lkfa5ijADYwQUyT?SDJYDA|}8ET~@TVG}wt#i2yK=7z!b z>XaF;OL-RsNjlZ?U*+(wbH1LOIxmNXjYq;D;XuQ~?`*DdR@K|)ymqtY`Of=>87kg* z$16{D`=-laMU02Hv7J?~OBUdlkQVwh=~Mq+LyI<1=UdT5U+wnXEMO=-^wS0a*1ӘK}:!iY'*3]fsmb[JƶŖK9}cccccc'u.6Ʀs6666R[^g{/lٷ 7͂ \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_1/mask_113_1.dat b/addons/unishop/library/phpqrcode/cache/mask_1/mask_113_1.dat new file mode 100644 index 0000000..1dd666d --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_1/mask_113_1.dat @@ -0,0 +1 @@ +x1  -8fL(pBlDM9";-;?1p{\%-3:@ad4*Nadddddd########c]751xYu \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_1/mask_117_1.dat b/addons/unishop/library/phpqrcode/cache/mask_1/mask_117_1.dat new file mode 100644 index 0000000..8921f64 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_1/mask_117_1.dat @@ -0,0 +1,2 @@ +xֻ >ӘK$^ 8YQSV'z8jzʇ^]סekXYYYYYYYjݵ# ++yeeeeeeee#WVVVVVVVV;"+yeeeeeeel'e;b&^9{/J$p \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_1/mask_121_1.dat b/addons/unishop/library/phpqrcode/cache/mask_1/mask_121_1.dat new file mode 100644 index 0000000..64bd8ba --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_1/mask_121_1.dat @@ -0,0 +1,2 @@ +x1 + н\CPbїE$DdƩYtڅλ0$ήꝝga7yٯ痽Y??{{D \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_1/mask_129_1.dat b/addons/unishop/library/phpqrcode/cache/mask_1/mask_129_1.dat new file mode 100644 index 0000000000000000000000000000000000000000..62cd1c9a18c2367d1c2c4a125b0c7bfb7647cd07 GIT binary patch literal 164 zcmb=p_4c+Q*8v3{)(d-=d%mmRskg|fP}}X+^rc5NZJtc#aociguIS=*E7o0PY;Hez z>gn9i&b%cXe#-fTKV)dW7BEeenT946)3$`s uʮ>Wd )g'M{3\d6ubذaÆ 6lؼn]Nذ9FްaÆ 6lذa3a#oذaÆ 6lذذ5e16lذaÆ ]Sbk6lذaÆ mͤ;CcfIdsG \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_1/mask_145_1.dat b/addons/unishop/library/phpqrcode/cache/mask_1/mask_145_1.dat new file mode 100644 index 0000000..6a9950f --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_1/mask_145_1.dat @@ -0,0 +1 @@ +x!0@k 4a)q2i.YCUO{35UZFn]fN>bdwtzJF}F1bĈ#F(F6r1bĈ#F1E1ilF1bĈ#FtF#F1bĈ#FtZ}##F1bĈleHGܣ@ٝ \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_1/mask_149_1.dat b/addons/unishop/library/phpqrcode/cache/mask_1/mask_149_1.dat new file mode 100644 index 0000000..02a3cdc --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_1/mask_149_1.dat @@ -0,0 +1 @@ +x1 Ӕ_΅qH_Xci#Gd̘Ք՛gLU^ݮVR>dKVXbŊ+VXeoXJ_bŊ+VXb;ݙ+}Ŋ+VXbŊ+VAVngŊ+VXbŊ}+ +VXbŊVj>hewf*`uTq \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_1/mask_153_1.dat b/addons/unishop/library/phpqrcode/cache/mask_1/mask_153_1.dat new file mode 100644 index 0000000..2abfca2 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_1/mask_153_1.dat @@ -0,0 +1,2 @@ +x1 +0\9btEc'HH9efߞmffM#.̘1cƌ3f̘1cf73f̘g̘1cƌ3f̘1co2c]?3f̘1cƌ3f5Mf3f̘1cƌ3f̘17utf3f̘1cƌ3f̘=lj3>V \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_1/mask_157_1.dat b/addons/unishop/library/phpqrcode/cache/mask_1/mask_157_1.dat new file mode 100644 index 0000000..17344b8 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_1/mask_157_1.dat @@ -0,0 +1,2 @@ +x1 + >94Sd/51V)SkJv7eGcǎ;vرc]Zٱc'رcǎ;vر+رg;vرcǎ;}V`N+رcǎ;v:;v;vرcǎ;;}Vޱcǎ;vص'vz#;]klwoA` \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_1/mask_161_1.dat b/addons/unishop/library/phpqrcode/cache/mask_1/mask_161_1.dat new file mode 100644 index 0000000..669ade1 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_1/mask_161_1.dat @@ -0,0 +1 @@ +x10_΅Xš yi~Qbkvp7'M u=]([ 2dȐ +\' 2 2dȐ!C 2s0/3d() 2dȐ!C 241dh 2dȐ!C 2dhcȐSL2eʔ)SL2M SLSL2eʔ)SL2M}LSSL2eʔ)SLeSy)SŔ)SL2eʔ)S;ٔ)S;)SL2eʔ)Sv()Sv()SL2eʔ)SLdT6}a*3mljmzC' \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_1/mask_173_1.dat b/addons/unishop/library/phpqrcode/cache/mask_1/mask_173_1.dat new file mode 100644 index 0000000..436918c --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_1/mask_173_1.dat @@ -0,0 +1 @@ +x1 Ӕ_Υ''@y]X1?"g:1犝fn˶˻mm.?lٲe˖-F>glٲ2lٲe˖-[lٲeO`˖e˖-[lٲe˖-[l lٲlٲe˖-[lٲeVO`˖e˖-[lٲe˖-[z0}[z0y˖-[lٲe˖-[Ee[hOVWö=t*| \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_1/mask_177_1.dat b/addons/unishop/library/phpqrcode/cache/mask_1/mask_177_1.dat new file mode 100644 index 0000000..12e2e52 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_1/mask_177_1.dat @@ -0,0 +1 @@ +x1 Ep0X,a#r}6}nj~\8ƌ3f̘1cƌ7{3f,y3f̘1cƌ3fX_`X&3f̘1cƌ3f̘M_1cy̘1cƌ3f̘1cƌ+3f,y3f̘1cƌ3fX_bX&3f̘1cƌ3fx2dX'x[cy| 3 \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_1/mask_21_1.dat b/addons/unishop/library/phpqrcode/cache/mask_1/mask_21_1.dat new file mode 100644 index 0000000000000000000000000000000000000000..f87e0a11227bb4e1e6f46a1dbb133ca9b1cc8109 GIT binary patch literal 42 ycmb=pWo*#E^%B$z4|g)+XrS~G>tDQj I0gJJp;@7?u-2eap literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_1/mask_33_1.dat b/addons/unishop/library/phpqrcode/cache/mask_1/mask_33_1.dat new file mode 100644 index 0000000000000000000000000000000000000000..318949df07745528a680a428ac74ea85f016c2aa GIT binary patch literal 53 zcmb=pWo*#E(KTk=YPW25x~DW1ZnK;yQ#k{?W*9i^mo(k2MWv7BXK JDEWV$2>`Yr5WxTd literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_1/mask_37_1.dat b/addons/unishop/library/phpqrcode/cache/mask_1/mask_37_1.dat new file mode 100644 index 0000000000000000000000000000000000000000..5bd9e3aa0d08230508938e61404749c9ae72e32d GIT binary patch literal 56 zcmb=pWo*#Ec0ARA$6JzFue`IJvZq{C68loc~P O{VIfV)fhyX>>B}kGZlIO literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_1/mask_45_1.dat b/addons/unishop/library/phpqrcode/cache/mask_1/mask_45_1.dat new file mode 100644 index 0000000000000000000000000000000000000000..b35c567dca6aa84fbd8758e1fba4ba2feb397de2 GIT binary patch literal 82 zcmV-Y0ImOc+A}bK0z+KD00FoRNC61dbTS*2PX)7SsT!xdk(^GV*-*`fM1fJW2ff*Z o(g~bDg3KOGC-gI$Q0Yx=v#FI%h$&--irG{SZ{o}b0N2uhd5F*?p8x;= literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_1/mask_49_1.dat b/addons/unishop/library/phpqrcode/cache/mask_1/mask_49_1.dat new file mode 100644 index 0000000000000000000000000000000000000000..d20d71710eecee1842e3fc1535a09df5a9bc8761 GIT binary patch literal 84 zcmV-a0IUCa+A}bK0z-Vj00FoRNCgNTbhiUtgi3bMLkC`eAbEuhJD>&_5)DS}7`1~) qJBUfUaFG#i$7s45S#}Up3)038>ZV;{>!_h=2TkIGcsl^2!^he0dm&5! literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_1/mask_53_1.dat b/addons/unishop/library/phpqrcode/cache/mask_1/mask_53_1.dat new file mode 100644 index 0000000000000000000000000000000000000000..a676d7dfa2092a94b7a81322980eb4def98fba74 GIT binary patch literal 87 zcmV-d0I2_X+A}bK0z*Q;00FoR$N>ml185hf7!~cJr!Ip2Lh>4!c0mm>Bngb#HEP!o tw~N^P1s5B&Ycw5>+BN9xBDS?bOS@>1zes5V31pqmJ6B4Gdk literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_1/mask_57_1.dat b/addons/unishop/library/phpqrcode/cache/mask_1/mask_57_1.dat new file mode 100644 index 0000000000000000000000000000000000000000..896ed43575bbcdf0ad49fbfabe490f0645a69df4 GIT binary patch literal 92 zcmV-i0HgnS+A}bK0z+be0RnItkP8qx2Zf#3M5%1&K=cx?F0b9ifGvGnJH}m literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_1/mask_61_1.dat b/addons/unishop/library/phpqrcode/cache/mask_1/mask_61_1.dat new file mode 100644 index 0000000..4165a4b --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_1/mask_61_1.dat @@ -0,0 +1 @@ +x30CbpPi`@&H^nadQG{nF3s~{gDf@VF{6Pqb^n%N<(VOM!% z$k4$xhh-EO4838Mg8>5u3?CSjTRkcmt{T`$3>YwEH7H+JtRd!Bt3S?PhR}V`4GpQu FA{XR~DnI}L literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_1/mask_69_1.dat b/addons/unishop/library/phpqrcode/cache/mask_1/mask_69_1.dat new file mode 100644 index 0000000000000000000000000000000000000000..03bba657f6d0df2a65ab63bc13715660ffc4ba1b GIT binary patch literal 102 zcmV-s0Ga=I+U?gd3IHGoh2g!^*!?fpBGuB6Ru=tl734z%QACqxBP~f*q;+|~GOlg3 z+|*@yF5PGrS+r?(1q&7|Sg<^6vEHLv!?NAN?qb1$1ZaPm@r{VZ}QxyUc>an#ExUago&HU9mj+T)Arjuh3Vye^8R7`ZVIqZ Kep3TS=JO^`WH?p; literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_1/mask_77_1.dat b/addons/unishop/library/phpqrcode/cache/mask_1/mask_77_1.dat new file mode 100644 index 0000000000000000000000000000000000000000..0fe0b03e868a00c5cc8f97a40528a7873b189a78 GIT binary patch literal 110 zcmV-!0FnQA+U?je4ge4gh2h<4>i(Cr2nH6ODE>E!G+%@^VU`nTV>Q8)snssB^}WNL zdu^VpO`ltHbYfdB9wots4cnKt)&5pivAMDF7O-K%#>`?aFte~>!}hvu_4ni(Cr2nG^~hc@}&Xs9m@nlP)$C$XMn>hy{MjVt$j z{gE+3#iKqBt-N5Y8)R89V#J7X)2MhK+d4+qM(zwoj2JO8ubJ1(Ym68%VvJ~1{NnyH UdYUt;KT?e16B)r+06TKr<%ttFF8}}l literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_1/mask_85_1.dat b/addons/unishop/library/phpqrcode/cache/mask_1/mask_85_1.dat new file mode 100644 index 0000000..b8a20c7 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_1/mask_85_1.dat @@ -0,0 +1,2 @@ +x1 + н\]4AA hM\QjsAkUjmun2RΚ5:k;jƲ[eo[o[kZ \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_1/mask_89_1.dat b/addons/unishop/library/phpqrcode/cache/mask_1/mask_89_1.dat new file mode 100644 index 0000000..e9d226f --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_1/mask_89_1.dat @@ -0,0 +1 @@ +x1 Ӕ_΅Nh}%@ iDOH*c"_.4Iy킎`)-5*(of[sm}6YM ;;;;;G{zطz1vw}=wuL%?"=~ei \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_1/mask_97_1.dat b/addons/unishop/library/phpqrcode/cache/mask_1/mask_97_1.dat new file mode 100644 index 0000000..24fa60f --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_1/mask_97_1.dat @@ -0,0 +1,2 @@ +x1 +0н1\tncKD"H$DH$D"Q&WerH$D"*x[(?/'nd \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_2/mask_117_2.dat b/addons/unishop/library/phpqrcode/cache/mask_2/mask_117_2.dat new file mode 100644 index 0000000..b4dcce4 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_2/mask_117_2.dat @@ -0,0 +1,2 @@ +x1 + >94!m dOs\0X,la5#E>Z[ַRT*JR?Q-*T*JR?UW*JRTݟ+JRԤ~m5;S&+ \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_2/mask_121_2.dat b/addons/unishop/library/phpqrcode/cache/mask_2/mask_121_2.dat new file mode 100644 index 0000000000000000000000000000000000000000..a2a0097b1fd803424ccf0a741277066f44b04dae GIT binary patch literal 127 zcmb=p_4c+Q7lR@X%YlD!!vFtUN&Z3X+ Wr*l6!Q#;$o?ELu?!b)#0qyqpqZ94e? literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_2/mask_125_2.dat b/addons/unishop/library/phpqrcode/cache/mask_2/mask_125_2.dat new file mode 100644 index 0000000..0ea40fd --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_2/mask_125_2.dat @@ -0,0 +1 @@ +x! PӔ_@ U(kp@^Mڮ5-:VF_\t:NtyNqt:NtG;Nt:.8:NtzA}yNq;+n& \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_2/mask_129_2.dat b/addons/unishop/library/phpqrcode/cache/mask_2/mask_129_2.dat new file mode 100644 index 0000000..bf04839 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_2/mask_129_2.dat @@ -0,0 +1,2 @@ +x1 +0н_KVڡ'.!w]A0X~  !࣠fK# xFy4 vey@^+  ~  L#veI \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_2/mask_133_2.dat b/addons/unishop/library/phpqrcode/cache/mask_2/mask_133_2.dat new file mode 100644 index 0000000..9e78b6d --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_2/mask_133_2.dat @@ -0,0 +1,10 @@ +x1 + н&`LQ-g=Aqbʪl fƄȚ44& )OȚYF4444444444c4~9S:3ЌטpǮ> \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_2/mask_145_2.dat b/addons/unishop/library/phpqrcode/cache/mask_2/mask_145_2.dat new file mode 100644 index 0000000..9ff2bbf --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_2/mask_145_2.dat @@ -0,0 +1,4 @@ +x1 + нr] +,tQ^&C~ +щj~mɾ.FgMDDDDDDDDDDDST׈DHdZL+ɴDDDDDDDDDDD2-'"""""""":BתEYDd \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_2/mask_149_2.dat b/addons/unishop/library/phpqrcode/cache/mask_2/mask_149_2.dat new file mode 100644 index 0000000..d52e048 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_2/mask_149_2.dat @@ -0,0 +1 @@ +x;@/gcaGBXB'-ˆouէUQdRVOmT*ǫ;;j廝Ee2PQQQQQQQQQQQ TTTTTTTTTTTTr33R &Tskz_e2P=d \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_2/mask_153_2.dat b/addons/unishop/library/phpqrcode/cache/mask_2/mask_153_2.dat new file mode 100644 index 0000000..3b06041 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_2/mask_153_2.dat @@ -0,0 +1,2 @@ +x1 +0 Ӥ8ZP!BZu賶"bu*)]MFFFFFFFFFFFF%= #ddddddddddddr ot2yFFFFFFFFFFFF& #k5L 2222222222(Y7"d@H \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_2/mask_157_2.dat b/addons/unishop/library/phpqrcode/cache/mask_2/mask_157_2.dat new file mode 100644 index 0000000..2baf535 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_2/mask_157_2.dat @@ -0,0 +1,3 @@ +x1 +0>s6MqUH1X&U̘f/u-'.[KGGGGGGGGGGH|NG(ttttttttttNF;::::::::::}Nz$ +>n A#^AG(t =3{ \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_2/mask_161_2.dat b/addons/unishop/library/phpqrcode/cache/mask_2/mask_161_2.dat new file mode 100644 index 0000000000000000000000000000000000000000..d2df7594eafccef2dacee35dfd7b2fa20d22e1dc GIT binary patch literal 190 zcmb=p_4bY;UxNV;Yry%;UBBb`j2ojEHvT!3{p!RC?nRON7i3-Yc;zkY`Xf0}_x!$! zFE2cT6SG?D4qx=zQRnO+ECdE-0&RD4IXDluF5^{1fQ4roCj>lm@IU~K;tl%3r)17J zJ0ZZ#=G-X(&k}A4K#T&Dr(`%dQ~6pDpuA;fz2pBjgY@glDn4Sf%vz*>v-~PkmIDA9 Cq)A-> literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_2/mask_165_2.dat b/addons/unishop/library/phpqrcode/cache/mask_2/mask_165_2.dat new file mode 100644 index 0000000..2e6cd7c --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_2/mask_165_2.dat @@ -0,0 +1,2 @@ +x1 +0 Ӥ?BVUG%*+_fs MIIIIIIIII2d;l4()))))))))))eqJنIDIIIIIIIIIII)۠mPRRRRRRRRRRR6l JJJJJJJJJJJJن}RaQRRRRRRRRRRNeK?R퐔͔&W3U \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_2/mask_169_2.dat b/addons/unishop/library/phpqrcode/cache/mask_2/mask_169_2.dat new file mode 100644 index 0000000000000000000000000000000000000000..4052062b8db42699eecf910b9792afd64d0db84b GIT binary patch literal 196 zcmb=p_4ckI*8v3{)(d-=cYfa=BffC9bK#GR;+rC$JQO$)A7z^D@-5td;v_x$KZRRf zZ@YKti&y>Si-EiLS+DR!2HU-y%YuV0IWJizqKN=2d5((tdS!V{oP+?U0&*@cSz;s- xgbbohG*|MpPC)`8ZBAZV&W8R7OY$eT{eSz+A@fq6m)EU$prLMGxEX}SGyvz^RrCM= literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_2/mask_173_2.dat b/addons/unishop/library/phpqrcode/cache/mask_2/mask_173_2.dat new file mode 100644 index 0000000..0a30ba5 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_2/mask_173_2.dat @@ -0,0 +1 @@ +x+@ Pift:>y &d U߬S[]5Z;a5V۞A[Z˴VՃI0ZZZZZZZZZZZZZZ=-Lhi`VFK?ݧhioJ0}o \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_2/mask_177_2.dat b/addons/unishop/library/phpqrcode/cache/mask_2/mask_177_2.dat new file mode 100644 index 0000000..d2c52f9 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_2/mask_177_2.dat @@ -0,0 +1,2 @@ +x1 + E>Y4V$~ ,C&U;Ook5bϙGx9%&&&&&&&&&&&n$OL|v#&&&&&&&&&&&&&bbݍXw#&l7bbbbbbbbbbbbbbM"l7bbbbbbbbbbbbbbMa!&݈3)U0}qMK$nTp4?}1s?+4l5MclS literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_2/mask_29_2.dat b/addons/unishop/library/phpqrcode/cache/mask_2/mask_29_2.dat new file mode 100644 index 0000000000000000000000000000000000000000..5112d11eff0ce0631ba1000e8823e0592ee3230e GIT binary patch literal 45 zcmb=pWo*#EnW&mR* B5Pkpv literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_2/mask_33_2.dat b/addons/unishop/library/phpqrcode/cache/mask_2/mask_33_2.dat new file mode 100644 index 0000000000000000000000000000000000000000..5bac0c80d2fd997d753427178c6294dd3dd9184a GIT binary patch literal 47 zcmb=pWo*#E*F> \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_2/mask_45_2.dat b/addons/unishop/library/phpqrcode/cache/mask_2/mask_45_2.dat new file mode 100644 index 0000000000000000000000000000000000000000..ad44ff1885f2c4e0d2158824e4d2b5537e0e8eb5 GIT binary patch literal 68 zcmV-K0K5Nq+A}bK0z=#g4!8^kw`w#Iid7Q>h%(!dOx19XArWX)^>9~>HN_4))uS;# aNK_M3B2!g0&U7-YR1co;#)SYYI)8L$SQ+gA literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_2/mask_49_2.dat b/addons/unishop/library/phpqrcode/cache/mask_2/mask_49_2.dat new file mode 100644 index 0000000000000000000000000000000000000000..6e8edff24b9344b19623318f9e10802439cf2b40 GIT binary patch literal 70 zcmV-M0J;Bo+A}bK0zFeF c>OklqvR0#s4%}&Xxa%04@qrTo0MEO|#KK}86#xJL literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_2/mask_53_2.dat b/addons/unishop/library/phpqrcode/cache/mask_2/mask_53_2.dat new file mode 100644 index 0000000000000000000000000000000000000000..682cae2aa6532baf02d2aa3e0c1dd2ab5227a34e GIT binary patch literal 73 zcmV-P0Ji^l+A}bK0z*Ow32+$&77oAwesj8DyK(d{NRL}|M7?Oxab&l#B)j2eE;wiyK ib&jT?QJteYsi%|F)*Fp=5-1Z!bq=xk#E$^gB4-2t4I$0| literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_2/mask_61_2.dat b/addons/unishop/library/phpqrcode/cache/mask_2/mask_61_2.dat new file mode 100644 index 0000000000000000000000000000000000000000..77d3815eb51a7feb77ebf8fa7001e8428c252db7 GIT binary patch literal 78 zcmb=pWo*#E&42|mGA0{eU)ahq{&Zsci5AoT|sbCRL;^iky?c_QPW#8n#wmU scCwG!AOHf}SdL4%7jXKBFflomDSq>=(yS;mZJM;_nealU{J-+60Ag+8uB49o zCeM)i$;BWcAt6nrP(L9Zkl0KlBqVyA9!Ek#%9h06kgHO>pO7@^?R^TT0-T8OPY@d{ Aga7~l literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_2/mask_77_2.dat b/addons/unishop/library/phpqrcode/cache/mask_2/mask_77_2.dat new file mode 100644 index 0000000..903cba4 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_2/mask_77_2.dat @@ -0,0 +1 @@ +x1 н_CM>Gt ѫe+FWZEm&gއFѶhF+t/FYvFj[*7a \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_2/mask_81_2.dat b/addons/unishop/library/phpqrcode/cache/mask_2/mask_81_2.dat new file mode 100644 index 0000000..17a9ac2 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_2/mask_81_2.dat @@ -0,0 +1,2 @@ +x1 +0н_KҩVi!O\"A]:xbW1uȦ&_T ΋6H$U^D~bׯb=gX \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_2/mask_85_2.dat b/addons/unishop/library/phpqrcode/cache/mask_2/mask_85_2.dat new file mode 100644 index 0000000..72c74ff --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_2/mask_85_2.dat @@ -0,0 +1,2 @@ +x1 +0=1\B7O$A0$8Wwjguu槊RT*uS֧JRTJRRޢN浘V \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_2/mask_89_2.dat b/addons/unishop/library/phpqrcode/cache/mask_2/mask_89_2.dat new file mode 100644 index 0000000..06c9a4f --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_2/mask_89_2.dat @@ -0,0 +1 @@ +xٱ 0 >/&E*cQqŃ zf$rM6hu5#zF6@yLURBPN&o9dL&(sq|@niI{j|F;se@4&-NL5N8P;_ J=`Rs#W7tsZG`0W$ literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_2/mask_97_2.dat b/addons/unishop/library/phpqrcode/cache/mask_2/mask_97_2.dat new file mode 100644 index 0000000..38842b9 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_2/mask_97_2.dat @@ -0,0 +1,2 @@ +x1 +0н_KivH4 )_%s_d3KO1^aL,$H"$KzRPt[I&X9$H"$I$ysI$DI$ɓI$I$Dɍ%es!=LAZ5'̓IVrn/2oƅ \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_3/mask_113_3.dat b/addons/unishop/library/phpqrcode/cache/mask_3/mask_113_3.dat new file mode 100644 index 0000000..023b273 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_3/mask_113_3.dat @@ -0,0 +1,2 @@ +xA +0 D}NrnDFj2KCt?WݲZi.qoP %Smj7ަ:*N:@:***fW9d2*j*}S@`*j৪6Jlѿ}}էTUa24hnt \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_3/mask_117_3.dat b/addons/unishop/library/phpqrcode/cache/mask_3/mask_117_3.dat new file mode 100644 index 0000000..79cc04d --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_3/mask_117_3.dat @@ -0,0 +1,4 @@ +x1 +0 ]Q.xIB$?~!-~Ih^HVEgKLuZlO;cUwJKHSx)|O2B zFzfxyYi|AgTNeL2=}VZ;Ev?R7P^rty{%*guOnUQ^gxskvcVQYX$3@&ONuIXHIa)Pv zd*)?`uy^M1DbmmD%Zo4AT@Sf`A^-TAmugk}r7i9rS@ZJQ!dsI6-_8j2Oj_vmiRt9J G3$_65-fl?% literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_3/mask_125_3.dat b/addons/unishop/library/phpqrcode/cache/mask_3/mask_125_3.dat new file mode 100644 index 0000000..e2febdb --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_3/mask_125_3.dat @@ -0,0 +1,2 @@ +x1 + ~N3rۄ]BБ'?xFrjdA{$T!&?~Jee~GOn@z#E)RHZ@bl-)ݿ<ߧ*OUR"5&5*ie J]+ \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_3/mask_145_3.dat b/addons/unishop/library/phpqrcode/cache/mask_3/mask_145_3.dat new file mode 100644 index 0000000..338b7e7 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_3/mask_145_3.dat @@ -0,0 +1,3 @@ +x +@|:^ Jy̡yMj-' +9VS֦K9e)PyUwe-m jԨQF5jԨRi٫F4_wk}0+jRBRF5jԨQeOMBJHjԨQF5jwP״˪IH I5jԨQFͳc w5jԨQF:zS*2UZ_C*e_OZ%dIȯb \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_3/mask_149_3.dat b/addons/unishop/library/phpqrcode/cache/mask_3/mask_149_3.dat new file mode 100644 index 0000000..30bc5fa --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_3/mask_149_3.dat @@ -0,0 +1 @@ +xA0}Oܠ⦐H頯'Z2{oV|Ι%>yR{!8ÂI+JpI|#f5κ[P A $H Q})&X{ט+Wb`I)5%d \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_3/mask_153_3.dat b/addons/unishop/library/phpqrcode/cache/mask_3/mask_153_3.dat new file mode 100644 index 0000000..89cdec0 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_3/mask_153_3.dat @@ -0,0 +1,2 @@ +xA +0}Ns˹)7mJ,}8X=cW^GeNE;R(13DFEx15%o)(+gL2|3uiEv#I;;|4`apdpkS*^~xvLf_IwePW`Q`R8jLgJQhVasX}og%bb( literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_3/mask_161_3.dat b/addons/unishop/library/phpqrcode/cache/mask_3/mask_161_3.dat new file mode 100644 index 0000000..72a26a4 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_3/mask_161_3.dat @@ -0,0 +1,3 @@ +xA +0}NrnFTk,N Zђf7J:ƒ^`WٔUnXڤǧM-#V+ߡ+9zҖY l)SLocʱO_C?ߩ%;*KlM2eʔ)SL2Ye][bSL2eʔ)SLyVYlWG[bSL2eʔ)SL +]g+$eʔ)SL2eʔ/qBbKlʔ)SL2eqʙ]£{A/~V9\%[P#' \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_3/mask_165_3.dat b/addons/unishop/library/phpqrcode/cache/mask_3/mask_165_3.dat new file mode 100644 index 0000000..870af8f --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_3/mask_165_3.dat @@ -0,0 +1,2 @@ +xA +0}N3T #Z YuÏ:̛1ϱEUTT|S q)m-sG B.Cĉ'N8qğwv7['tg!.ե:qĉ'N8qv`_+.ե:qĉ'N8qv`R8qĉ'N8qΤ8"ե:qĉ'N8qĝIяہq&EKuĉ'N8q+9:}kFT?^ЏGo<0իCg/_ \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_3/mask_169_3.dat b/addons/unishop/library/phpqrcode/cache/mask_3/mask_169_3.dat new file mode 100644 index 0000000..9431095 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_3/mask_169_3.dat @@ -0,0 +1 @@ +xA0}O3rn񷾦 )}'31Eh]4P[ _]Kv<˙fp#y_l[geӧO>}o%uJV/{%O>}ӧO}K~O>}ӧO>Q=/ї>}ӧO>}u{ח>}ӧO>}u{蟪/%?}ӧO>}ׯ.N4჏VMmRt(1| \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_3/mask_177_3.dat b/addons/unishop/library/phpqrcode/cache/mask_3/mask_177_3.dat new file mode 100644 index 0000000000000000000000000000000000000000..9586979a1f9d74c4e115757feeeabb74819df45b GIT binary patch literal 312 zcmb=p_4ckK*C7KDmJ79hlkfa5%Jb^v=;WB?Q=`hguxbC(hf6kRuDyQoTio}+UFQXv zzYC}H-0`hx>pHl#M}PCVx?h`vgGKGt$xx|wRV!3 zfoMp8BP)#fxJc>g$uD7oUs9|>H)gE5sHrt=^#lc>7A~z73z`r_mvKnO#w`)M&Z=su zbg*n(k1PjN^&?s|N=H{r^nS3Sqe@3D+;oUNM?Y$9iHOp<`z#Ekc_EUqAPXMxfb>qw zEAHgtRC0WyjcRYJR@RjRYnSlaR2M&;SL^DVy)i4Q+x2LaXy<=XYjqD_?+J5e|6#~G HtjGiaa;}E0 literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_3/mask_21_3.dat b/addons/unishop/library/phpqrcode/cache/mask_3/mask_21_3.dat new file mode 100644 index 0000000000000000000000000000000000000000..bcb4eec4919b60e2c25c4e18ebb9c34423536b63 GIT binary patch literal 60 zcmb=pWo*#EQOIfiJ63sVS+xNu1fplLAA habXVvLtL={H4TR*l1wwiWg5b#xHRE54FHDyc9;xW9FqV5 literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_3/mask_29_3.dat b/addons/unishop/library/phpqrcode/cache/mask_3/mask_29_3.dat new file mode 100644 index 0000000000000000000000000000000000000000..6150ac1289809bad7646c662dd9cf836311f47f8 GIT binary patch literal 75 zcmV-R0JQ&j+A}bK0z)JO16&9u7I`jwl1Q?&GZ`D8$YeOr5DVhME(}Fn_#_QSO-42g hU)nIl9)oZ$?ieJ~WF$A^k;Gv#QfT0j2LK0SpN7|C8+8Bx literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_3/mask_33_3.dat b/addons/unishop/library/phpqrcode/cache/mask_3/mask_33_3.dat new file mode 100644 index 0000000000000000000000000000000000000000..6053b5e396ca957ae26193aceb85d08a43dacd9c GIT binary patch literal 79 zcmV-V0I>gf+A}bK0z(W00bB+MfK>sq3hWAyRM5v3T!1RJz`2Gv5EpJKDB>cdVAPhO lW(z#c;7?-^TkxkbL)`g=Dz?D=LP!BVTMUV{1pswi&V8ytAOipZ literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_3/mask_37_3.dat b/addons/unishop/library/phpqrcode/cache/mask_3/mask_37_3.dat new file mode 100644 index 0000000000000000000000000000000000000000..5dea5b9cbe14fcff482e0fe9a647359aca07547b GIT binary patch literal 83 zcmV-Z0IdIb+A}bK0z+&F3b+gq0H-2kRd@{JG8i};@d2vZ2XK(!(BO=uY7eM-(E6p3Zv0bsQxl5nw^V$$JC%}Bqlsj9DvDo{aE;P>E# hYO*WtyB%t`BNs_$5b6wWqgwwJ)C%Io3LZM{#-RD-KY#!L literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_3/mask_53_3.dat b/addons/unishop/library/phpqrcode/cache/mask_3/mask_53_3.dat new file mode 100644 index 0000000..8800bea --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_3/mask_53_3.dat @@ -0,0 +1,2 @@ +xK +0Ds ! -(.Bp&|"-t&`qQ-"9_+)Be/H8D%a~}spKFN=,;;a^t4\FSN \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_3/mask_57_3.dat b/addons/unishop/library/phpqrcode/cache/mask_3/mask_57_3.dat new file mode 100644 index 0000000000000000000000000000000000000000..4e1e5da386a57dacaf76f93d05473ff922574488 GIT binary patch literal 126 zcmV-^0D=E_+U=Gx3cxT719!hh{{QE?gyNwnmS{-_8xJAm$PtVPuqu0fSCq8`R#F2C z`Jye^+}fgNtCnh;u5A$xa)x*4$m(#xu^rp7Rcwt+;I=%SqH*TgTz7#%(6RO)$6#_BUJmZJUz-cM|kVFF3Ae8Lopr+yDRo literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_3/mask_61_3.dat b/addons/unishop/library/phpqrcode/cache/mask_3/mask_61_3.dat new file mode 100644 index 0000000..bf1a3cc --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_3/mask_61_3.dat @@ -0,0 +1,2 @@ +xA +0fz4-%*dp!yZܫu(~=&ۓ)R2"/"<9FΊ=rb"/rw"2B#3-0-KW \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_3/mask_65_3.dat b/addons/unishop/library/phpqrcode/cache/mask_3/mask_65_3.dat new file mode 100644 index 0000000..8589208 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_3/mask_65_3.dat @@ -0,0 +1,2 @@ +xQ + D4\?R ,!O-Nv1:cZu "UMÕF ~jK-la[^q^Q\=o-laZpUB @IKJzɢ|1Í  \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_3/mask_69_3.dat b/addons/unishop/library/phpqrcode/cache/mask_3/mask_69_3.dat new file mode 100644 index 0000000..55318a8 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_3/mask_69_3.dat @@ -0,0 +1,2 @@ +x +0 {&2'd l=,Fy;$쇤WE-R:%T,O2g"",Ȣ/DyĈɧ{O䮳",:NvEWN#(&,,]x؅ \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_3/mask_73_3.dat b/addons/unishop/library/phpqrcode/cache/mask_3/mask_73_3.dat new file mode 100644 index 0000000..15be77f --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_3/mask_73_3.dat @@ -0,0 +1,2 @@ +xQ +0 C{g;JJ?dԬK=RasJhTJ6exka\$nIE,-/XB*х=wee4t̒tLщtt߫b gFf qoddn-? \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_3/mask_77_3.dat b/addons/unishop/library/phpqrcode/cache/mask_3/mask_77_3.dat new file mode 100644 index 0000000..ec78280 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_3/mask_77_3.dat @@ -0,0 +1,2 @@ +xA +0 &BiRaK"t`I@|fXyilE:Sza18GifK*?:YC1쌞졘(ቷJ*jl*TRIKR^ؙks)c)c)JZa \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_3/mask_81_3.dat b/addons/unishop/library/phpqrcode/cache/mask_3/mask_81_3.dat new file mode 100644 index 0000000..47bc0f7 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_3/mask_81_3.dat @@ -0,0 +1,2 @@ +x1 + F=\,JGAġhj>#3X:kԹ\FM Jhu3>TZ{PSgP'kVjժU_ۯUV=P oO:Wҝj[Wxm 5 \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_3/mask_85_3.dat b/addons/unishop/library/phpqrcode/cache/mask_3/mask_85_3.dat new file mode 100644 index 0000000000000000000000000000000000000000..02c4f8cdbbe43a99de71a77162d811d36ad4f51b GIT binary patch literal 160 zcmV;R0AK%j+U?m(3V<*SMbUXy^Sb}dIVrU|sn!>N+|q$Y2;pF8P^qqRd9N$FYg^Jj ztFhS7{Q{@rM+N5MyIOtAC{U6F+M{SU#kj+puI|W4iU0x#Ab>!sfcG@40`85I_KdmkG#TsrP@uMqv1rdge4##%ZWgv6J(FGUkB?1g^dV O%IE@ppbHjj!&bK*zf9i% literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_3/mask_89_3.dat b/addons/unishop/library/phpqrcode/cache/mask_3/mask_89_3.dat new file mode 100644 index 0000000..2b4cb59 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_3/mask_89_3.dat @@ -0,0 +1,2 @@ +x1 ὧ) *.@U |eŵ6ۢw5*) oiK4nk>1}d>@ 4XYCo ۡ1<AhFt + 4@51Wr>7G}}x7|NgN \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_3/mask_93_3.dat b/addons/unishop/library/phpqrcode/cache/mask_3/mask_93_3.dat new file mode 100644 index 0000000..b4cc8a9 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_3/mask_93_3.dat @@ -0,0 +1,2 @@ +xA +0 D}NrnJɪQ~B06na<<ׇe6MRCP L̓i9M 2 LkŮdDv*"aXjBdAddZTdAdqY0exqeN&WVQvc \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_3/mask_97_3.dat b/addons/unishop/library/phpqrcode/cache/mask_3/mask_97_3.dat new file mode 100644 index 0000000000000000000000000000000000000000..7adc9ebaa77cfc3c6f7a54307a831fbeee0c87db GIT binary patch literal 175 zcmV;g08syU+U?rG3V&G`N=*G0-MD(Ga{FCK!(&5t$)O3EWmo!5xs*ixXZ zVA@1zxl+BnrYNa(r@cz9VNyyDD4l1cxytAa-_m)8y8uckp@b4jD53OrC10xSQX0*J zF=dt7h5IPcalDsMLJ1|5P(o>6B~s-^N^~6WC6rJ?2_=+%t0e0VeE$jDlr;7Ux}BHg dPL&$iL~p8;J5{b%n)WQo-EsPG#~oB@^PHSYS7`tM literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_4/mask_101_4.dat b/addons/unishop/library/phpqrcode/cache/mask_4/mask_101_4.dat new file mode 100644 index 0000000..1c97dc0 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_4/mask_101_4.dat @@ -0,0 +1,2 @@ +xA Fs^1bИ]4m+8+Ve^HR]\c +oWN#X+l HEcp \^.9qW9":.BB \0aPǨcp \ONqjpG}}$.˅ \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_4/mask_105_4.dat b/addons/unishop/library/phpqrcode/cache/mask_4/mask_105_4.dat new file mode 100644 index 0000000..0211cdb --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_4/mask_105_4.dat @@ -0,0 +1,2 @@ +xK +0 D=Mr˹A TeEFL2 #鹢_I!딤Ѻ-իkmO]sS T6*'8 N$'NZ^XXh%Zrr$W}rU*G9r|c[cN[_=׫5^J 1*qv \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_4/mask_117_4.dat b/addons/unishop/library/phpqrcode/cache/mask_4/mask_117_4.dat new file mode 100644 index 0000000..3867259 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_4/mask_117_4.dat @@ -0,0 +1,2 @@ +x + н_s]4Dgn2Jj}ҾRsSWGRɧ)5Em#ܯk_"z3\rʕ+r Lk|/{;'jk^zGw=K_GJACF5KEX*@<$z}?p^YqOrD6l{pq{+`&l7JcHsOy z_GM@Ox_x?b=y>Jqe}Ao?uX%DM`IXJr{-ZaqKAvlH`*6wj&*7((AW$y+_m1`VYgIgEyrCkW+Vc literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_4/mask_125_4.dat b/addons/unishop/library/phpqrcode/cache/mask_4/mask_125_4.dat new file mode 100644 index 0000000000000000000000000000000000000000..b98dc813afe773cdcd71a8779391ca295c0d3a51 GIT binary patch literal 213 zcmb=p_4c+S-ysD7)(f`F8-K^2;|+^RST%8G)>;-rsHGtPebu=wvE(Rqud?@Jdiv-z32@0r%Fa7(4|DUhVIr-8&`h2IF>D|wlymv&u|5gc>1uLtXBe(o`B(jjL zU;pLDUo3v_shtNkChn^3Ki;iZZS8BT4}Mgedi!xzR{!b=ahL8^+0UC-$jr|$aq=Dj DA0&Li literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_4/mask_129_4.dat b/addons/unishop/library/phpqrcode/cache/mask_4/mask_129_4.dat new file mode 100644 index 0000000000000000000000000000000000000000..8ecfa250845e8ef1add89a66c88fc9f31250a436 GIT binary patch literal 220 zcmb=p_4c+kU$cP#%Y}Q(H@>gmX_E0-a3R;c&@UP>6Fhnzw0;$t`MGk<)@^G`dv2;9 zJa>BiGETqum$vWzzWVcDA(y^F$>O^;cE3bkZ7!_If6o7~R(2)#^;-&#|1=8@FtW=O zT)5zvG5y;kg&7OBX?Mm(S)NeKczodZftUvk%zPFg;tOl7WBdj2GpxmpM2j^4FA?}L o{bhTz9Ot|H{BduueXdPB_S/#\p\p># \p\p#>qp\p.$Iq dGR_4  \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_4/mask_137_4.dat b/addons/unishop/library/phpqrcode/cache/mask_4/mask_137_4.dat new file mode 100644 index 0000000000000000000000000000000000000000..0c09c487c2e85488f8caf2dcc863e260cfd077d4 GIT binary patch literal 248 zcmb=p_4bYxEjs$#?!2-R}~*>9$YZ>m}P8_SPSlc>J(ZYVC8? zO1oo*K1q`<^UtZRwccRy_UiY^lc)4;t3SOfES@w`rW=l2^YbTRO$JKN#b*jQw`{%rV(;`b$vL{4 zXRQkQ#dOtY-ox+n-*;b@wS2d1)2vU1rN&=NV*fwfSo>q^jJZKc}*2a`@ScXA0|@PM!+Z)$&&j+uR`i+&96LlQothXU{Gd06E`pF literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_4/mask_145_4.dat b/addons/unishop/library/phpqrcode/cache/mask_4/mask_145_4.dat new file mode 100644 index 0000000000000000000000000000000000000000..33fb211249fd13955f9481a5af91416b0850c79f GIT binary patch literal 255 zcmb=p_4bYjXH=f@| Kjo |SSWKZm׌j\Ъ2 W\qW\q"~ jvtv_\qW\qW\q%g3 }+++ r9ArW\qW\qŕA g3WA W\qW\qW]V~v{D3Ȝ!\W^Tڍ[S7vۜgq? +{peo383838{YXz,_OYfe3s38383\C!Ms38383r \C?37938383\C!07M8383q,mMrskWv3~W WB \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_4/mask_157_4.dat b/addons/unishop/library/phpqrcode/cache/mask_4/mask_157_4.dat new file mode 100644 index 0000000..ad5fcf6 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_4/mask_157_4.dat @@ -0,0 +1 @@ +x10ޯs4"FP=iRX¢X0멪u 4ftl}m➭S|юS P5<]rwqwq^QN6ÏZsߙ,wqwqǝ>Μ5g;;Y}Vgw,wqwqw>9wqwq>3gY;[ww?P3Ƙggt퐮;].3w4A \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_4/mask_161_4.dat b/addons/unishop/library/phpqrcode/cache/mask_4/mask_161_4.dat new file mode 100644 index 0000000..7604c45 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_4/mask_161_4.dat @@ -0,0 +1 @@ +xA@ fs!AL_|,4l)iml׉0' +E ]N\x#2/_{7g9쏼ٷ}2r!?}-#Te9C9C9~6Sʇ겺!r!r!ۘse9C9C94_Ɯ|.r!r!s/s0 2r!r8}DwrDXΡ|x|!2 \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_4/mask_165_4.dat b/addons/unishop/library/phpqrcode/cache/mask_4/mask_165_4.dat new file mode 100644 index 0000000..d83d631 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_4/mask_165_4.dat @@ -0,0 +1,3 @@ +xA +1 }Or."*?fPLHIkΫZQ8 +Gyqk-n5+?|֎kKnEŹK.K.?2.|EJ{2<:.Ku\K.K.ǝmu)_8\r%\r%\Џ;'2!_8\r%\r%\Џ;'2!_\r%\r%\rinC?nn9 RK.K.;.HqY'ݽNF?K㕢,R| My*3 \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_4/mask_169_4.dat b/addons/unishop/library/phpqrcode/cache/mask_4/mask_169_4.dat new file mode 100644 index 0000000000000000000000000000000000000000..4aac95c1e3fc9ba5257f331564b211fab568c376 GIT binary patch literal 297 zcmb=p_4bw{7n30m>xEkX%lG~l?V3;+6CwFBVc+Mpz`!LezkNJB-=9zK3Cy|6dc7)c z$=5@7j?a{Q`J_AleCn>hU3Whz>;A1NtE#vC#=Q1!Zp)m1?|$5V9DCCK-|1Vc*mtaT zocL^x-SRm_r!-;2ueFy?#eVr#8L;Ge>5J}i?kE{?B4PtL69K8~&|}TJq5E>1FRHmwz3+$1r7q GdJ_PDBBetB literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_4/mask_173_4.dat b/addons/unishop/library/phpqrcode/cache/mask_4/mask_173_4.dat new file mode 100644 index 0000000..9df4d86 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_4/mask_173_4.dat @@ -0,0 +1,2 @@ +xK +1}Nrna ~ZY!Jt^5(/jkz[pj_?~v:|jwՖ_mXzo6?n%^4`7 P=;q=RrH8oyopw{-jJFsR literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_4/mask_25_4.dat b/addons/unishop/library/phpqrcode/cache/mask_4/mask_25_4.dat new file mode 100644 index 0000000000000000000000000000000000000000..0c7c44bbb5bb50a1f060373ea3ca14d083fe686e GIT binary patch literal 76 zcmV-S0JHyi+A}af07FAV1c%Fjuna^PAxDf1Irg9fvh0EKpc;@!E_4AniAM&vX|%Qn i>NlJ|HN*%VIGY$5BJ4r(4;Eo;_F$1gmjnRDU3Su2%N^nX literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_4/mask_29_4.dat b/addons/unishop/library/phpqrcode/cache/mask_4/mask_29_4.dat new file mode 100644 index 0000000000000000000000000000000000000000..c28dc20e8248d196503c88e3e58b9048de750a16 GIT binary patch literal 78 zcmV-U0I~mg+A}af07FAVI0*(^2E@r?NRc2*iM`kWMfO73Na9E&7dAmSNkA6A$s@yF k1DFWbSimBS8G{geiIFARUKIc0kiuy%rYtrE0Gke<<${17%K!iX literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_4/mask_33_4.dat b/addons/unishop/library/phpqrcode/cache/mask_4/mask_33_4.dat new file mode 100644 index 0000000000000000000000000000000000000000..5834b6fb5672ddd54227a5229ad248efb56f9931 GIT binary patch literal 89 zcmV-f0H*(V+A}af07FAV1PK%5G9X?BinJkI0ZA&T;SOAYD(-+P$1ng+a^aGIlSHT> vY|E%S29rDBDF$Z>!lD9ODl{aRP7U#;Q^M{*2@gEd1l)nH0+%8HgW}HuoFyU1 literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_4/mask_37_4.dat b/addons/unishop/library/phpqrcode/cache/mask_4/mask_37_4.dat new file mode 100644 index 0000000000000000000000000000000000000000..4bf2e26ed0238cb7f0fa88b4a2e8d9f607c6c465 GIT binary patch literal 86 zcmV-c0IC0Y+A}af07FAVG!hE93`kRjsRW^pR8`b;7d}8$cR_hr3_>Eg@JYf+B2^J* sQ04GUMNxbc& v?i_XJs5{AZrvXfsV99_*CH~R|;!aXkQtVEY@FYSRQSQW4Nk}mOMgc#BT0kV* literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_4/mask_45_4.dat b/addons/unishop/library/phpqrcode/cache/mask_4/mask_45_4.dat new file mode 100644 index 0000000000000000000000000000000000000000..1b921f3009656cf429e67486e59237b8dd15ff5f GIT binary patch literal 120 zcmV-;0Ehp0+U=A<3IHJpMfaXY?|-@3gj12@{}N1#TnN<@9`Z@`Ei+qoFVPwup|*kU zpmqSgF*>cacXR`pI4*58TFBT1fxMG6XL7wac>{^GqK!9Q$bqGK7QU=)P)>BL}k8 eRu0aQtjeU@>+_-I`CuK_9H00P-1Gn#s>kM_-9E?w literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_4/mask_53_4.dat b/addons/unishop/library/phpqrcode/cache/mask_4/mask_53_4.dat new file mode 100644 index 0000000000000000000000000000000000000000..7e88826dd67c8eed58a77ecc7bd6326cd996537c GIT binary patch literal 128 zcmV-`0Du2@+U=H03cxT31^1pt?|->=VN(l5e9snI(1i&h1DSjzs%My4l0%60s2sV1 zUFvoM>Q$%8k$LTH-z$uZ_X`^svLKUJCMj-(<27Edc$MCl9xf#1?;NQB?uAn=uepcg i^-r(*&mns8lo?t9xVoWK-RMw{czy1?FmMC1XBA^pK|VMD literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_4/mask_57_4.dat b/addons/unishop/library/phpqrcode/cache/mask_4/mask_57_4.dat new file mode 100644 index 0000000000000000000000000000000000000000..84669c7d65c97c0b040497b32d3d3037c70d826e GIT binary patch literal 130 zcmV-|0Db>>+U=H04uCKSME9Hq?teKq4gQfCYGNWRShRhHSItD#wao0Xdx_S`3}%zb z)6ua+cp@ZJk!QRPPwS|R$7C*c-vtG{7f62E_H57pdBSPpo*a39C`!$ZCqdRc`@3z= k_I%kB_3cxT31n<5^|NpsON^2;!>e@qKa}XLb#Yw^v)q9v(qB=lyhR&g$ zouh+=UGEBA9-;T^egK`j*5&+4Z}?KB16>uQvCipDZ+dUw-O4os=_q+W=RtbJoA;dF m^rrXIyZXXjy>U8x$cKrH<+(z6K0*KBy}^0+esBPHn8I@q@JM_B literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_4/mask_65_4.dat b/addons/unishop/library/phpqrcode/cache/mask_4/mask_65_4.dat new file mode 100644 index 0000000..c24343d --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_4/mask_65_4.dat @@ -0,0 +1,2 @@ +xK DtXЙ.4E1^hvOxW0 JHŻz[^܈[v +yyZk=`vcǃ<ȃaCe \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_4/mask_81_4.dat b/addons/unishop/library/phpqrcode/cache/mask_4/mask_81_4.dat new file mode 100644 index 0000000..dd65216 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_4/mask_81_4.dat @@ -0,0 +1,3 @@ +xA +0 yMyXE m7"892ѸQ1ݳ+xx;t35DIY1x\:u}e/ #Th< +UBz<5G<5{G<5<饫>]Urxu \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_4/mask_85_4.dat b/addons/unishop/library/phpqrcode/cache/mask_4/mask_85_4.dat new file mode 100644 index 0000000000000000000000000000000000000000..c8d5123e26909726dbd71694e1f6697cad51529e GIT binary patch literal 154 zcmV;L0A>Gp+U=P!3cw%?MR!k=-2ZZ2N*jmT*5nJN&mmxtH#~v~YIZJnPs9LfrlsbP zk*TK+4nE7TrIxLs*SC2W7zhg5zDpNC7h5Ilh$5=S0ABHmSG?ji)1NN$BI-+pH9Di \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_4/mask_97_4.dat b/addons/unishop/library/phpqrcode/cache/mask_4/mask_97_4.dat new file mode 100644 index 0000000000000000000000000000000000000000..5d848caade31141b6a6d238828e0513940b9aec8 GIT binary patch literal 176 zcmb=p^>&scSAzi$%llg2U;ocnYTk;AQoMQf@D~ArLUH5VhzlL*U+;ClQn_{Ld4Rh8 z>uTAu_q(T_ELu@IVU2P7<-3>5gi15Bf~CWkN@uS0RjmncZrXE$dhO>e3gqq;cwFbMH2i4?0P>DhOaK4? literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_5/mask_101_5.dat b/addons/unishop/library/phpqrcode/cache/mask_5/mask_101_5.dat new file mode 100644 index 0000000..c21869e --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_5/mask_101_5.dat @@ -0,0 +1,2 @@ +x + E+%=M3Cbv ѬNkûgqkqq{%Oo,iKee3[|iVh]` ` 0ʕz˴T0Gu/q8F13:W>#ȕ0c0Q8E=F#+a X͞+cV%9W>Q]TkY-gLqD艋 \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_5/mask_105_5.dat b/addons/unishop/library/phpqrcode/cache/mask_5/mask_105_5.dat new file mode 100644 index 0000000000000000000000000000000000000000..bc8798c64015b6595105a07645625a572c839c0c GIT binary patch literal 224 zcmV<603ZK&+U=S_3dA4~1n<6P`v0HHC0WDb$gbEE0yT;RFVdN!?Sm0#$x+d(-M&MH zb#RhAbEHXz@r$NR=-U3QPci-P|L%XEWG%ZUmG!BgbTK0LXu8R?&L*=*eAagQlk8Qg zsjyG52YayhPWDE5FUx?-`>CeAIbz1%-fVQSH_Cfi23+1R)r9Zid)&FO2Yavwd*nUx z9(fPn!}qvzVGs6T5BA7=v+3UUic`wTHUd>xK aP2TVA&wEd3Dq=6}&i9BW^E?1$d?(3j3x3!D literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_5/mask_109_5.dat b/addons/unishop/library/phpqrcode/cache/mask_5/mask_109_5.dat new file mode 100644 index 0000000000000000000000000000000000000000..25a394402fb8b1d0ebf02b85473522a21235736d GIT binary patch literal 211 zcmb=p^>&scSAzi$%lk^-Pyf$XZV2j*s`A*zF?pKO&MOlNBNgB2F4Ef5es`YjsdLA3 z1GmLzcQ4u+7wuKIGk@pLkJ~=o2#t=t|EsmEP`E4gbGg?&F(KW|<)*sao-4A2zw@dk z3W3o7Ln%e~oL=noQ``Tq@Y3g3w~o|0t6%gi0ZRhqKTiJP`A5a7)9;Xq4;a-6*>}!& z0V-}7~CRaH?+kXgI=m1Q4e>}I|^`+f56tjphW?I(xcpB?4RQpn(Z H=>0 0 0 Ofz3=>0 0 0.3Z$׷8\pw4:Zp:qX 7 \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_5/mask_121_5.dat b/addons/unishop/library/phpqrcode/cache/mask_5/mask_121_5.dat new file mode 100644 index 0000000000000000000000000000000000000000..9bb5c4158981760f99c1831c03ccf11a664e6053 GIT binary patch literal 256 zcmb=p^>%h3*AWFCm;c4Hp8T7ByMNb~P0`w->X-Iu1WibCj$>!PxYtGF(Dx08H@Bz! ziL_Mtn}1F*CX2(7=TOEDEbWKm# z7n3IwXBH>TO_bgSLC0^-+rs}kq59sv;^g0Fytmmr`w)|MuCvr_`^DT6m?EIk`)9ws z`TOnWP2bl(=@oqXJ10zcK~pjRkXgEU#Yr9g&b-C9Uzp__hM;esZ;0LBZFwcK^7XPb o>!)^ZQ#aoWuYBxxGe&=>)49shxbEDe|L3eseDs4sW73s<0HpnlZvX%Q literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_5/mask_125_5.dat b/addons/unishop/library/phpqrcode/cache/mask_5/mask_125_5.dat new file mode 100644 index 0000000..2161c50 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_5/mask_125_5.dat @@ -0,0 +1,2 @@ +xA + E&fc;S$?؏Q4YahûyJ}9g==li.;nh_wz.qCWȧy uPk;<<<|*q, mkWqNl% yyyy^2䰅sX|aaaa3ϙ9lH<<<<̿웁[n`Tq8^vy \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_5/mask_129_5.dat b/addons/unishop/library/phpqrcode/cache/mask_5/mask_129_5.dat new file mode 100644 index 0000000000000000000000000000000000000000..f0c1d65020884c517fcba84b94191eaac350aaa5 GIT binary patch literal 259 zcmb=p^>(%)-(dqD=JNe+fBrw;rBWIY;l}PP(iGgY;6uuWT>&yOg;TY((|V7;4|rHz z$aHnxR5q=ee-{;mpS}6Fjz8)5|GBsR+cqxEkvegY{WD8>{;97#wkaFeC|)-I_*?FJ zdDOO73mlv68dxKM=*5vkTKXxHkABpxay&a{NAkk7uziscPg`}IW$x!MWZc)F|A2b~ z0~9@B{lrw+xCbP5#sezq5T~F&LHq>w52k$wdRTBP%uhX7dcHJE;G5lvJnQRETQ@vs deIFa2`wqnRlbR99G23{{r2|{+4tV*M007v5c@F>p literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_5/mask_133_5.dat b/addons/unishop/library/phpqrcode/cache/mask_5/mask_133_5.dat new file mode 100644 index 0000000..46be8b0 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_5/mask_133_5.dat @@ -0,0 +1,2 @@ +xA +0 DѽOcr]4%1mCTxΜ[Dv={FEϏq?ݿ9keѭ}'2^c4G:3=JK-F0`#Hw'#<{~Z4 :BG舻F0`G~:`#?#tw-`#?##t#F0r}Q}eR;M/k1mX=hsH"k M:3qOW}9ԖIH1G;- sڶ?[%M + v#;zg^3d}69Ψޙ@7҄#gv`;׳ީ\$wlv`v;ލ}7wߑa;vkA#gv`=N2wxgWӤ@n?c}SQ:Zd?+9vz)P \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_5/mask_141_5.dat b/addons/unishop/library/phpqrcode/cache/mask_5/mask_141_5.dat new file mode 100644 index 0000000000000000000000000000000000000000..60c1a8e81acb9a104b1003fe8c362588b053abac GIT binary patch literal 297 zcmb=p_4dw1u0sYqtq*_O`hNbW|NLx;(ly@Fw~{rHnwy%g%&1?U=@uQmHZAgYPUWvV zSwa8P%uLts{p{|I6Ff?XUZ>?fOlh?Hu<*Lhj^j-g&%KHRklY zHSXJ%GR-^MUl+M`k&@0?^TfhtO`k-r;2DQRmi;?;$r6o)IJ{82> zzVP^R$E^#0m%8OX_%_jPZqDCVlYVV;i{Ag?{rvsKSBqQ(C$718!)g|LXx`R)LEA3< z-^TpyQqr?GFC*0AGYu!M2uzSo(E^bzLvI+;8@4U$WERT)%VrUu|y7`j4jj zp4qEF>;UTg{AOd_*}XaEC*vs]Ŝ_{W!zﶬ/)˙v V6V޻,f1Yb n^o>\O],,b,f1YyVgYYYb,f1+ʳ<˳<˳1YbŬ<+ʳ,,b,f1YyVgYYYb,fukys77}vmb=wsw)tW: \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_5/mask_161_5.dat b/addons/unishop/library/phpqrcode/cache/mask_5/mask_161_5.dat new file mode 100644 index 0000000..70d5fb0 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_5/mask_161_5.dat @@ -0,0 +1,2 @@ +xI +@нDp@ o|m rHk㨤~co^Jzװ#5l¦S_92 [}ZÊ=T2ƀP2[cV衆CYf'-X9>v~usK5`e,2,2,2-///o_q}K\reYfeYf峖o+/,\feYfeYfٳexB.e2,2,̲g+l\r16,2,xKGoxt!_!?`Z2*Db#6mYclucZ_V= zotdf6-&SvZv*GR8D7h;;_}1^MuiAF~^{4Rr^~KwcM;_~Y5%sO3bm!TkuUAgq{`4tJ z=-blf&CknX*3G+da{|L^pSsAbX|zx+~B?%Xj;& z;1;Iu;j^AJCF&Z`Lw*|;|Nba-v0r}8=>>Iv>dx&vf52z;Q-;T)bDuoUlH3!|5cNl~ F6aZ#Wx#j=> literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_5/mask_169_5.dat b/addons/unishop/library/phpqrcode/cache/mask_5/mask_169_5.dat new file mode 100644 index 0000000..921a770 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_5/mask_169_5.dat @@ -0,0 +1 @@ +xj0|/niK'.r:T-m&Zx9yq3rOgvOO_zׯu`]ȷitاtiloc13j9%_g|ԧ)>>ϰ=te&_4=tU}/>>>Or5/u>/g}g}gOsvO}/g}g}ٷGo-w{r_{g}g}g_n=n]4Nkβ_M8m?SF< \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_5/mask_173_5.dat b/addons/unishop/library/phpqrcode/cache/mask_5/mask_173_5.dat new file mode 100644 index 0000000..f9a6741 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_5/mask_173_5.dat @@ -0,0 +1,4 @@ +x[ +0&G1gD)[CzeDѷц=RN6FJm JqP}x s_}GFy; +[;]ek[QbTmy&0 L`̄Y?رw؛ fcVN9&0 L`ׄZ}0=F=F9ANL`&0 L`BzYfI=F9AN&0 L`&0 fIsr ' L`&0 L`<i͒"9AN&0 L`VaBX",Um> +=wZgBΜP !8 \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_5/mask_177_5.dat b/addons/unishop/library/phpqrcode/cache/mask_5/mask_177_5.dat new file mode 100644 index 0000000..b07c636 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_5/mask_177_5.dat @@ -0,0 +1,11 @@ +xъ0~ܾح uO,"% :$Xui=ѶՃgƸ?Ώq.So~z׉W:=h1cq]Ƕi!r8Ɓ`+X +V jj;8ƁX+ +oV`+X +V?[1^h-ֳ5Z;rmS+ +oV`+X +V;Z,YMB+ +V`+X +VZeڦ}r\!W`+X +V`+3Km>SB+ +V`+X +Vc㊛{g;^Qq5ZUݮQL0+*&YDq*6 \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_5/mask_21_5.dat b/addons/unishop/library/phpqrcode/cache/mask_5/mask_21_5.dat new file mode 100644 index 0000000000000000000000000000000000000000..04f97ea6983c85e1cf6e68150ea02bffa30a4f4b GIT binary patch literal 74 zcmV-Q0JZ;k+MSL;3IHGo1n<6P=l`E8qQc53Ts_3F*hoFpjJL@ppoFxt|L%<{=GZy:DR \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_5/mask_33_5.dat b/addons/unishop/library/phpqrcode/cache/mask_5/mask_33_5.dat new file mode 100644 index 0000000000000000000000000000000000000000..726d7fd75da51d6bd7737a41e0120162ad66f42d GIT binary patch literal 106 zcmV-w0G0oE+U-+G4gettyYm|Q|Ibavg*ZYTH6AU510hWtK(zoJYG1SgT>VVIrQ<*s zI~>0{7>;PQoL380wan9y;(obh5mL~qPG^u~gT@LOIlD;&&=vfsD8 MtZP z6Mwy=xtNYJP8P5*q$8GTpmRmFxG+$uUgBJr@iKnar8ktiR$tD;xa+0O#TdC4Bt{5~ JuLf_z1Mr1%Fq8lQ literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_5/mask_41_5.dat b/addons/unishop/library/phpqrcode/cache/mask_5/mask_41_5.dat new file mode 100644 index 0000000..e07c617 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_5/mask_41_5.dat @@ -0,0 +1,2 @@ +xTA + 5?7XMtxҴx ?@7@~"N$Sɰ{+CA'r\Pp<ޏ- ͺ:S3sԉۻީz#qw > \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_5/mask_45_5.dat b/addons/unishop/library/phpqrcode/cache/mask_5/mask_45_5.dat new file mode 100644 index 0000000..5168a17 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_5/mask_45_5.dat @@ -0,0 +1 @@ +xUA 5?U:N&Z":;4P1=bNvSGM1˛n'(κ J{Eѵs] ,sq \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_5/mask_49_5.dat b/addons/unishop/library/phpqrcode/cache/mask_5/mask_49_5.dat new file mode 100644 index 0000000000000000000000000000000000000000..9f3f3cd7d60bcba44d9223f52747c1cc9a9feb52 GIT binary patch literal 146 zcmV;D0B!$x+U-_B3cw%?yZ1HC|3A0G94cx|E9_(x5y8cz*3P{E3|?W)+(E}-2WX#i zfHZ}}1&-ONsSXt<99&1;WS;^gJWwdf{AS1((&~d%`->c<{A($VpSL1s{ zRx%t39rs?{9Nck;b+FN)RKeb>Q2ppQ^!)JYKLg9b6OOo!Q?K^%$i!U415hQ$TboHr A)c^nh literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_5/mask_53_5.dat b/addons/unishop/library/phpqrcode/cache/mask_5/mask_53_5.dat new file mode 100644 index 0000000..449807b --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_5/mask_53_5.dat @@ -0,0 +1 @@ +xVA " zYf5ƐJC A;l\,dR. \(e_ еaNi5\żaLP(;2שjN6O u+l{y6od^ C[%  \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_5/mask_57_5.dat b/addons/unishop/library/phpqrcode/cache/mask_5/mask_57_5.dat new file mode 100644 index 0000000..c7dd81f --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_5/mask_57_5.dat @@ -0,0 +1,2 @@ +xVA + 5?NlZHAbBZ0a Md`1z'"<Ր19nvͨ. )bݻ~;9Z#tB~ \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_5/mask_65_5.dat b/addons/unishop/library/phpqrcode/cache/mask_5/mask_65_5.dat new file mode 100644 index 0000000000000000000000000000000000000000..ecd9380682523494a1f5577c6e22eff92571b446 GIT binary patch literal 163 zcmV;U09^lg+U-|C3IHJpy!#sG|DW4SODL(th;FD_Ol!+`ptx^N zLEU#+P+TP~hiEM?kDlMYCn2{Nokr`dh z=(A4`MyHt}6_aUUXNJM(G}onKt|Qlx8JUq8UCD^KPfsl&$;;O(L#`i%q&M<+dnDc& Vax;Tki-1v3l_b|f_yg_whE8s3Pu>6k literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_5/mask_73_5.dat b/addons/unishop/library/phpqrcode/cache/mask_5/mask_73_5.dat new file mode 100644 index 0000000000000000000000000000000000000000..00001176d018bd72f9f2128f2f0bf775aab99aa8 GIT binary patch literal 184 zcmV;p07w6L+U;0d4uBvG``>BS`(MrYR@be?`f zXg4__uzEOkK6dEjx2oLg#9{`gm`?j=wt4_|87ivOHqbF%PAmBX8kw9Db&_}T?ycUn z`rYuGA*p6w>oim|H}6{gZul*glk!e^C-3Cl6W;y1W(Io8^nRzjQ{KtDFL+1JRVtmB msmjs2lzG8{6JIm^VkS0TGiPwh(`lA>@p#INaS{u_o$71/34Ϊz^'[FyglgM>OTL4ϔ{&3Wy*ʧb*`<3;Vo0/s6n0ya[mcE \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_5/mask_81_5.dat b/addons/unishop/library/phpqrcode/cache/mask_5/mask_81_5.dat new file mode 100644 index 0000000..71215e9 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_5/mask_81_5.dat @@ -0,0 +1,3 @@ +x + C~M?tzU4" }tMX2|.ɋ˙F\~m4Xu +ٔ, w:EƄ>X̯=_]g>>zמ/)5ךkkkZsXXY{ܮ}~mt:S#&;U#) \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_5/mask_85_5.dat b/addons/unishop/library/phpqrcode/cache/mask_5/mask_85_5.dat new file mode 100644 index 0000000000000000000000000000000000000000..09cf0e28127934862f45b0f155ede22e48833cd2 GIT binary patch literal 186 zcmV;r07d_J+U=P^3V<*S1n+rG^8e3yuu_X!YO*T`o0cLu)Fn>SVBDKU)x4XXo;}Lz zW!EUrTdh$X>snv=m*blAkGsN*t+gK4zOfzOFOb9L?@mq&=-FzkwKE)0V`(MDRSbv$ zF(3xMXCUdfAl$J#15Y(!+RxHTimUQ~@_-l+17bi7s2)%~pgf>FAO^&M82AqZz<$9g ouBdLo$N>Dm_MjDe$NHpal&=TaS~+q3j)5w#tg{8Q4HYg~22k``-v9sr literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_5/mask_89_5.dat b/addons/unishop/library/phpqrcode/cache/mask_5/mask_89_5.dat new file mode 100644 index 0000000..5fff530 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_5/mask_89_5.dat @@ -0,0 +1,2 @@ +x + 45enpQ Gcfl^^;;b5;`kU͹߮j`NsO=\[a6~nLD? !6uF%w*Ȭkf77SĆbÆXodw_—mbClNۙ ck&YVoܡ׷BעبAl6 Jjx \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_5/mask_93_5.dat b/addons/unishop/library/phpqrcode/cache/mask_5/mask_93_5.dat new file mode 100644 index 0000000..ec4240b --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_5/mask_93_5.dat @@ -0,0 +1,2 @@ +xK +0 D>&&  fP^8BY5s(imҮ=f3/wۧEyYQwf[} [90303ef̙3'3=,ͼwxDַ.,;s%g,,,=Rὓ7uKKTD<(n lYhV۹sޕyPEtyY]ns ;ss,!LkԅcbL12cX91Z#XEn#;svT~L~LR11vs.1111J1&؍Ń111J1&ƞg KLƪjlk{gڞ5K1/ǐ~,ac$ \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_6/mask_105_6.dat b/addons/unishop/library/phpqrcode/cache/mask_6/mask_105_6.dat new file mode 100644 index 0000000..a58fec7 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_6/mask_105_6.dat @@ -0,0 +1,3 @@ +xQ +@ DskBZ#o)Sd}Gܷl쯯^)G]S4S?#BZ:+{sHKNiI!me1 +RWe9!``Uyˀu:檞U=w-oԺwB}cMK蹰{{=y蹰{{=y蹰{wScaoi'fyO=CyO=Cy[{S޻=;|v4}ϯ20 \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_6/mask_109_6.dat b/addons/unishop/library/phpqrcode/cache/mask_6/mask_109_6.dat new file mode 100644 index 0000000..be7b474 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_6/mask_109_6.dat @@ -0,0 +1 @@ +xA0 ~ρDBHCHV20nuol쯯˻=ۢs9[l'?7R" &2:7QqX_n ]$՚EIY*Lq0 0 0{LJз(s\ɳwX-7^ItIII$~?N0 0 0O'Itg7L$L-Iuzrfr M^'}(O~R]1YLĞu9Qӕ \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_6/mask_113_6.dat b/addons/unishop/library/phpqrcode/cache/mask_6/mask_113_6.dat new file mode 100644 index 0000000..397f527 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_6/mask_113_6.dat @@ -0,0 +1,3 @@ +x E5NՉbF6on,m>gS9RWcǕ9&%1_cx= GR^w-z?dzv=,}ԥ?ǹژ:9m==@U䲉UXUXVe~by4Wi:e=+3}u4V%s*ZZGM&;I{^hb=04yIS((dxvZSQzT-ftM{l(nX+lN_8ODT@5*n+ z7_UD(asGDJ=LTuwGLL68OD>x%-!8VhX~z9)s_}nsM7#IRuTu5NlE1M}DE!~LqHV#? z>Qf#_+}0{yXSc>}`Oi7KFW*{qHhjb7t7W#OJ7->RxEgr--0aihQri-x!RWX2w$z_x z-{(K`{`B@#S%`O<>9f@NPe0F}o}Zti{rTɼÆ$<>Ov'Cytaaaa~|'9liΣ<<<<Iæ<:<<<ٕWDzy:.z= ݓʯ sVöE=ll_k0_#vίmj \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_6/mask_129_6.dat b/addons/unishop/library/phpqrcode/cache/mask_6/mask_129_6.dat new file mode 100644 index 0000000000000000000000000000000000000000..b4695c3ff0d8ebd6925d8af5e0b403d5974ed46b GIT binary patch literal 310 zcmV-60m=S&+U=Xs3d1l6Mc@4z{r{iaU`b3tw}-Y`#z{*Vj)K^nc<+O%V_D@=U$Xty z&tEmqAcJ?j?v86TK^YOR_hi^6CyeFRR#Fmw^kkN5f+OzB@3mz7YhU+_46fxbXrKqJ8dEWiRRzyf{&zkpxBFVGk0 z3uq)*fCX591z5l@;1}=<_yzg`eF2RG3$OqSumB7A1^fbj0lz?Bpf8}2U;!3j0T%w4 zg_beb0}DNqzB>!qv~!(b=$i3#ztA<~>3$)bcdqjbP4mv1Uw8})+SVD`X8*k}X!oJ` I0%mGk`PF`vEdT%j literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_6/mask_133_6.dat b/addons/unishop/library/phpqrcode/cache/mask_6/mask_133_6.dat new file mode 100644 index 0000000000000000000000000000000000000000..40911dc575dbbb17a4a057a46521c47b159138ca GIT binary patch literal 296 zcmb=p^>&UUU$X%Z%lo?CzyHr~4f5p772*@!y+W#4z-aoFvniX|)r-4>+}{b_t=?z1 za^B%Uo6C=?Bf5p+A4mDPRY%qZb+7;LH~IgZx!WufT|#LdH+*}lvf|jbWz$U;MJdj?+L60%T4~Y&jvfg5!>uf4f9dJsH`X7Hoj9}k^e4rC zS0C4C)Ev*0lXY~zAowlHfJqsIn&c1mKXCt`{DQ-(sSmClB=SSBgaxSfM)pCdp>-_w zAk_;%Y9X4Lls֪r666rҟ=vڲWy -' +Ο;q tQE>U϶f곭xN]Tc(s❮7tAw`v`v`v`kvwfwt;];;;;;!ޙ;ao];l;;;÷| ʷ(3}l.?"މr};\}S-Aw<9;EV'ם \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_6/mask_141_6.dat b/addons/unishop/library/phpqrcode/cache/mask_6/mask_141_6.dat new file mode 100644 index 0000000..0340409 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_6/mask_141_6.dat @@ -0,0 +1,10 @@ +xa F4/c]زȐ[=[E럓sm,fn/|kj\j?g[q(NOZc5SGGP[oMVָfvL<)r%zGej;*ZC7u5PHroFXT;2T zErAz-@(#{w+P}?wqtMJ3uDW8^Zp>M}^Fr0Lpp6sHMCtS0T=zSWcURlGh1q8m6XBZP z)<+zU-@Sal+U99%rKBCNUob7{wNzPiPzs9vGH3tDF8^{p;9$q2z5quaE#u5AU!HIYpjb0cSa)^E8M?_KmSO6tj)==bYa lKD}5p(yFJjBc0i__3AFOq}<9%1{c=3R{)onxM=_Y literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_6/mask_149_6.dat b/addons/unishop/library/phpqrcode/cache/mask_6/mask_149_6.dat new file mode 100644 index 0000000..69e9883 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_6/mask_149_6.dat @@ -0,0 +1,2 @@ +x +0 E5f478UD62zmpߞk8}GӕN}?}W:guWAˌ7 ~;)Ø{̪ǿ+WPOۢrE\jwG)y˖wAAAAM%2`2dl|p}eqP : e j想=lT5ɠ : G{ddAtDaaaaa&أ&w : 1-MRb0Wf uz5&YiIѺNрAPQSL}4 \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_6/mask_153_6.dat b/addons/unishop/library/phpqrcode/cache/mask_6/mask_153_6.dat new file mode 100644 index 0000000000000000000000000000000000000000..3ab6130edd889298419b702ce1dcfddfda30cf2f GIT binary patch literal 367 zcmb=p_4ZC+-eCoSmWSnj%-{FNXq%daEZUK`+NjemCo*t?dCFURVYiCx+AY&AWaXz; z#Mw80;rtkb0d8YE*wD7uX)inq9ZVuZUFDP(T@8+N1 zd)6dxd%yYT`R@txHxIga-#%q{p=18$LjAv|)HMzi=qI9z_Q`c5T9@Wu3#VwUI?XqmF<#Ov^FVyZX znO%a=0o3e&KJ815aoXF1m16oYp6*fD?Jm?ru;I^wH)p;*n7!8a0qfl_O<0VW z=e+S-gZL9m5s=WóCaz6U~һ{`nݻdvVy~rZ"qk{>g$XKU}m\bjaGx,f1Yb]z̞^.5[?嬜r,f1YY>grVb,f1Y>g,rVmYb,f,|VY9Yb,f,|VY9+g1Ybً ̦M7>2{9z϶hm3l|9xټ#f#x6 -v%N' \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_6/mask_161_6.dat b/addons/unishop/library/phpqrcode/cache/mask_6/mask_161_6.dat new file mode 100644 index 0000000000000000000000000000000000000000..ecec68b1ac0f7ae45685bed5d752ef54a48f0f3e GIT binary patch literal 399 zcmb=p_4aOH-eCm+*NgRG%)jr)tiI;gamK_~Was)*2d9a$rlzvVFd(`Vxt}K4Lw&$1iobzS93uRn)?%d|f?w*sGT%NE> z{5IRU4qg|XWXaPJc9Wm(u=|#>w)ceHw=b*9PWtu#%$j?0UgYIfVgE|yed#NsPfj0ye)_BM^UK-)PTmj)Dk+(%2Qn6>@Mqw( zr>Eaf(4VdSY0^ghT|OXlU~(X3o3@I6N-cI>vvvVU=j&u7z0uK%@n+#iZgHXOO4Lz* zS5klalWD4FYUNJv>X3bV?!C6tj6Zkhb=|q?)qi3p?yJdny>uh|S+%y9&hsv>7uDKn Qv3e2bEbSR&we7b907^~O^#A|> literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_6/mask_165_6.dat b/addons/unishop/library/phpqrcode/cache/mask_6/mask_165_6.dat new file mode 100644 index 0000000000000000000000000000000000000000..d641dfa3dde2565c932c7234b4521d35c4a1af0d GIT binary patch literal 400 zcmb=p_4e+=tY!lV)(ihDXFd5FpVz$dq?^)Rf%2utrx}%SOWEwLn>i_J`_iSlTlG_a z?5xW@^>fafr_X<_`MyU#`bPG>>Gu53mUJ)QUoZ3jlYiaKTYL1ypC5hw`u4`@;aj#{ z65c&WV*jT2f7ha_kN&Vtzwen{t6%P~`!n?0+`iwtWbQAWZ<=}1xMrHJarBp;Hbut9$M7_G_mM zcbUq6j_Pl_yVJGrbfKl*aj-TBao%v9T>btkn@|5AAOFSPyYnPS{;9>|9^-RRg7etb z$M3`Xce6j+WoQnP+#v(96>7#EW6f8E-w#x%VH*A2r>p9Yt-(CciI0n7`gVuGb;wx~J!=SaTlS=q~KG>㵾+'{է_Vˊx-J<ӛܗr_>>i;rO}/g}g}ٿ}}xO}/g}g}ٷGo/{{r_>>o/z^#}g}ٿd'ʳ|QRNS3YڳZ'msEǷj5 \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_6/mask_173_6.dat b/addons/unishop/library/phpqrcode/cache/mask_6/mask_173_6.dat new file mode 100644 index 0000000..95fa97c --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_6/mask_173_6.dat @@ -0,0 +1 @@ +xa09MrM S*:a_-5hh_)uZ֭[loےsmKN{H?x`l#f9>ڟ[eЄώߓ ?^m*/Kmhy%v-nKlkKL`&& g5(gwxYܞa¬pVcZ[#O=SN9&0 L`DŽ 'tjj]QN9&0 L`sYRc@QN9 L`&0 L`"YRc\ ' r&0 L`EH9AN&0 L`& 7p6`|hms R5Ƙȉ k\X/ )g9 \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_6/mask_177_6.dat b/addons/unishop/library/phpqrcode/cache/mask_6/mask_177_6.dat new file mode 100644 index 0000000..e9f0476 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_6/mask_177_6.dat @@ -0,0 +1,14 @@ +xn {ڤ*4v۴u1{f{_,,K9o 4ǵ7lniJiggir<-MG + + + +xuV+zRCr9+Gq6QWb"Qe"WL+ + XXXXX/|~j,nmuMۤ+ + XXXXXYa,X;M+ + XXXXXe)oӘf|5H늚7/D \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_6/mask_21_6.dat b/addons/unishop/library/phpqrcode/cache/mask_6/mask_21_6.dat new file mode 100644 index 0000000..6bd505b --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_6/mask_21_6.dat @@ -0,0 +1 @@ +xڝQ C9M{i]X1- C!D7 W ٜ&rD)~]<M 3(>{A aS \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_6/mask_25_6.dat b/addons/unishop/library/phpqrcode/cache/mask_6/mask_25_6.dat new file mode 100644 index 0000000..d45083a --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_6/mask_25_6.dat @@ -0,0 +1 @@ +xڝQA 52)e+(XmZt*(ڹ;tJ<峂_ڤ3oڴ"̢azh}&qvSG֙,-J4}oS[}w \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_6/mask_29_6.dat b/addons/unishop/library/phpqrcode/cache/mask_6/mask_29_6.dat new file mode 100644 index 0000000..0408e22 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_6/mask_29_6.dat @@ -0,0 +1,3 @@ +xRA +0 XcL(4EԈB +8Cܾ޳nM+lǝՆO1]&ڍ4UD-6-$:6dZ?ylf? 8?߲bTQ5IjGy*#_+5FlYF0i|O3{~#Ory&Utx49Pb}M!qqU eGB4z0Ua0$-m+;~$`<#o+3+E#9Qgs1fkI!%T**fq5 literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_6/mask_37_6.dat b/addons/unishop/library/phpqrcode/cache/mask_6/mask_37_6.dat new file mode 100644 index 0000000..b37ff0a --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_6/mask_37_6.dat @@ -0,0 +1 @@ +xA &T `jB{{Ok%tdtlP>c!Jq2?sR|6OyXBED_#CJGJ|{4?o|# zWi31{IkRWty7H{19EeICVF#bFBLK`Sqohq!P3c{Hxke=hL*^psZ< literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_6/mask_45_6.dat b/addons/unishop/library/phpqrcode/cache/mask_6/mask_45_6.dat new file mode 100644 index 0000000000000000000000000000000000000000..a7da7ee0297b6371bd3ebf57467f009712e40cd6 GIT binary patch literal 189 zcmV;u07CzG+U-?A4#Xe`yz?6P|L3|%6(}8a+S4YxXiTkkisJyP!>lt6lk}|T(tQNG zKksqJ*w!?R9dPAm82jdF@w%LHYmk%ah`(8LQqB>(=edn(GCywV&RxRO?k3YHLkmWk z*aT+KWsqQ$<3Gg7PA4uT3C+}K0drYmWeGYb>)1(p7ta_qgP{3eCtn>q+w^_mWM3IF rC#dT5I$?6GuTnWSVh7coK6Z$@lVax;CrT-Ws>PubeR7!xL?VGyGa6i_ literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_6/mask_49_6.dat b/addons/unishop/library/phpqrcode/cache/mask_6/mask_49_6.dat new file mode 100644 index 0000000..64ded70 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_6/mask_49_6.dat @@ -0,0 +1,2 @@ +xVQ i{K&YX؁0̦!=tn&fpWL +`/<ϓKVrU\1bGp@ӑ&fN/+ƽq`AWSRGp_5||zxν:J+WEm4h43tܭ.Ag`\ʤ*F \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_6/mask_53_6.dat b/addons/unishop/library/phpqrcode/cache/mask_6/mask_53_6.dat new file mode 100644 index 0000000000000000000000000000000000000000..9139e325901037a409a2a2d317141cbd9bb27807 GIT binary patch literal 195 zcmV;!06hPA+U=In4uBvCMc?@v`Tw7*ElsG)6&_ona}B4=6R_J_H(gnqCg!_cThR(n zojZKuSh^TEmcRQQKZxaCGEO}_fJWLvh7ncHkT}m%gO65*3_i=>Wv5I&JTu%XJ;$_U zq9afxnshi?de~<88-}PKQlCVXOM8jnene{dW{CPB^@+QK_CphY=i#p94>Qav8_#g2 xe}y4d8>?E5v<_ݏ`8G1`B`;+}&s]<iK'l'9%.7 \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_6/mask_65_6.dat b/addons/unishop/library/phpqrcode/cache/mask_6/mask_65_6.dat new file mode 100644 index 0000000..550fc8f --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_6/mask_65_6.dat @@ -0,0 +1 @@ +xWQ i{KNLk?e$Qik41{`+!ڮM ? 1b8 .^wsnFj5EaQX|=w@2v<ŋŞ|4w\UXBQz+TTcBz/48,5`ȱ OV$ \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_6/mask_69_6.dat b/addons/unishop/library/phpqrcode/cache/mask_6/mask_69_6.dat new file mode 100644 index 0000000..a3e4fa0 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_6/mask_69_6.dat @@ -0,0 +1 @@ +xK @dTh hLSSEq eY@<+*|窮 %>z*7e6QS`.>sE '%@[6@P0h aFxtpl2 Q-g1Nfeo^0FdT>N_OwG3ug {3<[Ժ b?'6^ \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_6/mask_73_6.dat b/addons/unishop/library/phpqrcode/cache/mask_6/mask_73_6.dat new file mode 100644 index 0000000000000000000000000000000000000000..ab71b70ae59ccfb23e9c4185b1e919d531fb040f GIT binary patch literal 230 zcmV6w!~0Dh_U!#`ksFaQ7m literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_6/mask_77_6.dat b/addons/unishop/library/phpqrcode/cache/mask_6/mask_77_6.dat new file mode 100644 index 0000000..ad5a660 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_6/mask_77_6.dat @@ -0,0 +1 @@ +x E۲iVa.FpSTY4q~z=:͒ 6m8:#0PضiDy:2Š'Zs&}滜\r0\ŚXw;iPȔL)Seԕ{hDu9LbJSS))gZ{e)qJdLw+#3-V0շljڠS-S 9=ݯ5PPq1M?g \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_6/mask_81_6.dat b/addons/unishop/library/phpqrcode/cache/mask_6/mask_81_6.dat new file mode 100644 index 0000000..28a6d07 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_6/mask_81_6.dat @@ -0,0 +1,3 @@ +xQ0D9 rRLvk`0 ;i6\|_cc1huio#2}x*.Yt& +ְq/K;3ve̢ȊAH?`]5Kw!}{Zû߲W +yⷾ^_ykk^Kתb-bYSڸ'֜Nu#MfHSQ?|]IAiMyyuW \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_6/mask_85_6.dat b/addons/unishop/library/phpqrcode/cache/mask_6/mask_85_6.dat new file mode 100644 index 0000000000000000000000000000000000000000..d5403e49a80cd825886b9cf067587297c22542b2 GIT binary patch literal 229 zcmVz+U=Q93IibwME~bB$^9?aLbYnE?lu`e3KJJuW7jbno{1 z6z!*@KIP;y_0^MY?(1Uq+xo)SueFNlpSwk~3kHJTZW;Jhe~*j0f6i>Ev*&T`9<+0j zJ6S`Ia)zC1@aibjTa>+X>cWZvF(3xSz)1!u`9P<`={Ia;V3iYwbtJu->xkU@m%8GB z;(!ntduS+U=Q93dA4`ME`S|1p|)V-|IyeM8#yz&a$P<5H8u1j zJvs=^zR6hA`VPFkrR{fvn^+GR9ksLtHTXo64YENt$i~~)fawi)LW)84hWko>3Nllc zx#paEz7d+7rFOyurM|GlguB4YENtj{*X=Ev^DF}ptAKX6@RpX4vjZjklMsHWS3nR)a*F|K!unUJMmO!Vn} zoTXx;{$pvl+nqFvSzoF-QmYM8VkABAis-2UASHPxZ{Wiz40ft)3ZUf;xjbgSiRJfEh3YX28r%%+%_c*_vLo*0<$@ z23~1k)EU$n%uQeh%zzm%^YhH4w^!eo$?ptXW}>e4xt^)$QRDw9atl$NB&!*=1='#`+bl]Z \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_7/mask_101_7.dat b/addons/unishop/library/phpqrcode/cache/mask_7/mask_101_7.dat new file mode 100644 index 0000000..1f6bc51 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_7/mask_101_7.dat @@ -0,0 +1 @@ +xQ C}rm`fjT#54'tfaЇo$cmOJ23c<6Xn0F ) \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_7/mask_105_7.dat b/addons/unishop/library/phpqrcode/cache/mask_7/mask_105_7.dat new file mode 100644 index 0000000..6b0cacf --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_7/mask_105_7.dat @@ -0,0 +1,2 @@ +xA +0EFaMҙNPx)pQ_~|ñ(bF$.aoWGNPUǖM%{oHQUlִL^>+m#{{eo&Y2soM)gncO9sZ3wo+{=f.zޣ{{=zGcskCQϞp^&{^NʷU e5}EwGn+o \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_7/mask_109_7.dat b/addons/unishop/library/phpqrcode/cache/mask_7/mask_109_7.dat new file mode 100644 index 0000000..9875cbe --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_7/mask_109_7.dat @@ -0,0 +1,2 @@ +xA +0 D9Mr}* _x-d:"NJ-k"⨚d{ջגɬ|'rQ5+ s)c7-1nn햺qɔJtg^ʉw̘Ň-?*&Mm@ee5^ +c + +,b\13j4TZfŢo* + + +:Ut* + + +Xů0"%6ed 8rS NsUnk5XejުuVXg,l`u!hXZ\VlM|[ͬ0 0 0 #hF'c]i>Hataaa~<ÆzyqkO0 0 0 㪞Faaa)2˰fÒ%z8tO=3=3:cw +V$ \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_7/mask_121_7.dat b/addons/unishop/library/phpqrcode/cache/mask_7/mask_121_7.dat new file mode 100644 index 0000000..d5d577f --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_7/mask_121_7.dat @@ -0,0 +1,2 @@ +x[ + Edi;^az,#6ƞ^rh&^amY9_غ5Cr6t^^WlEز~ɿ|MmmS}( ۰ ۰ ۰}mQ]ZVq]vѲ"M1fG, qBmtaaazeF3cxIDmtaaamný$n۰ ۰ ۰ ۏa[}`[yޖ޻)n<4K/Oslnlm/G \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_7/mask_125_7.dat b/addons/unishop/library/phpqrcode/cache/mask_7/mask_125_7.dat new file mode 100644 index 0000000000000000000000000000000000000000..f9ec0887b05d63190cd6ebe1bb181252db240a5b GIT binary patch literal 288 zcmb=p^>(%+-(dwFmiND<{`^0`b*j_CTqezxZ{^rj;wKcm=?PmSu=Glz<7VlslV=Y- zO8>Uu%kQn~TjKuaTl~3{$o%&7)#h8}=22b&;klFIREslqHa`A!?#mmI&via`Hb+0Y z@=dof=(6k43w+wj81s{h(%)-(dv-mfy8!@BX(Jcim*@*T8k(?P5abBdPTV55E<2nWM}-KktRmgh+FK z(J5XM>l-trubloFW*NMH^}mg5a-3Y>F9fC9#l&wam?F3O`BH_m{d}fVk6)~v_I&Hz zHJ=+cdHrqItm^WLCC8c$D{tL(Yf{g&%x7Q9 zubFPXVwyI0pF{it{Ra~h7{x%SagRfsg8l^Y7u;W1ZG?0VFoDnn@e|xnSU)k2i@PJtN|E!a-ww)M{dF^|hGkUkCJ!|~{M9*8VnoW7a`o8vg bU+c{{(Mi0VI}n?>ZnFz5Vih(RRyE z|8~uM{F%Y??j(=+_U|&*MxD6{EXooGIou3B+4rdIt<3u>@m`ky)yCCP{twlzB)65{ zxt83x+o|t_pyi`jZivc5?msx>A1W8Q07ZMC+7Tk}qrk>B3EF|xO$4cfDymCT`D{~t z*yCE}H)iGgttY-t-17O&+Wsls{yaWkCr)~=oXRV&$sJJi`D}ZpWzpFaOJp>)b53$^ I_LZ6o0K%<<o[l +Ο +07։Vl;b7fMS;1LCvR|KMH +#Н(Sqd \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_7/mask_141_7.dat b/addons/unishop/library/phpqrcode/cache/mask_7/mask_141_7.dat new file mode 100644 index 0000000..98dffab --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_7/mask_141_7.dat @@ -0,0 +1 @@ +xA E= rITY@Ä0!|1tbG0ԗѤs2Z/oa\qzOnҋMntX"KmeM}CpPL^S0S0S0SL )ǔژY߾%b,Sl?zC)tLLLLI2zRXh@)tLLLLI1zbϷB)~0S0S0S07)|B)))3ՖL% tfwM*:~hZsnc$1UTtJg8OYE \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_7/mask_145_7.dat b/addons/unishop/library/phpqrcode/cache/mask_7/mask_145_7.dat new file mode 100644 index 0000000..4aa2bac --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_7/mask_145_7.dat @@ -0,0 +1,2 @@ +x + E5?W6Z-^2qbGX6(Ɖu"LbbGuμGk:HwA[jmHݞ3OkQ{l|TEm JfL?2"&)kRfc̉F,z=5X5X5X7F\pUs#5X5X5XFdYk!a ` ` `o8ct ]CC gM5[N%khZp?Iܣϲ^n$Y7AZP[ fȓ0 \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_7/mask_149_7.dat b/addons/unishop/library/phpqrcode/cache/mask_7/mask_149_7.dat new file mode 100644 index 0000000..809f005 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_7/mask_149_7.dat @@ -0,0 +1 @@ +xn {? uچ2G$ncFKb3֪tPc ̥7[?9:['9'*Ӗ Gah_/z+6XB>2qYJ0黏Bfa 1 9c7G Ol,^꽓3A:H  1A b0X4%٫#d>&C  1A b+g嬜,f1Yb|Y>+g嬜,f1Ylio.\Ɲo=gϙ-yk_TA \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_7/mask_161_7.dat b/addons/unishop/library/phpqrcode/cache/mask_7/mask_161_7.dat new file mode 100644 index 0000000..35ba8ff --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_7/mask_161_7.dat @@ -0,0 +1 @@ +xю y/皨E)Ʈ1~493,˵+ZT=ZeC.~iߏ&>,6e~,lW] 2\;׵2j"e,rXݵV(c쵵ZӖ18ީ/,'t.ee,cX2߱,_|yt|]t.cX2e,cy/ɗys.eLe,cX2lo|Z{+2]bl,cX2e{+֊[A2]X2e,c9CXxJ+6rf>h5o6qcIQd2nm=Y_6}PsM~AQyzW1wahnqx4i9#trl79 zGTt{n-#Tkq_|`@8b@BO^-&#lQzJI&bdA?QLEw|ZnT7O=OKRfSrJL~d`Aw9u`O=epcc%X?f~g1U{2P4x`u+VC z_4Xxs=ND}`cY4xm literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_7/mask_173_7.dat b/addons/unishop/library/phpqrcode/cache/mask_7/mask_173_7.dat new file mode 100644 index 0000000..3b51371 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_7/mask_173_7.dat @@ -0,0 +1 @@ +xj0 {=M/ RbHrj\=,mcoZ8;mm0b_ߚt$~Wu5ǚNn'?df2(oG,L6_{z? 9wq9 S!ƌ9o2 L`pOEnv8Lv8L UY"d} Kr ' L`&0 L`B'f:O8TcTc\kr ' L`&0 L`BYgIkr ' L`&0 L`"YRc\ ' r&0 L`EڳH9AN&0 L`&'!;q+Yl*ܳ=؀9j[2 Ms¤Ԅ* \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_7/mask_177_7.dat b/addons/unishop/library/phpqrcode/cache/mask_7/mask_177_7.dat new file mode 100644 index 0000000000000000000000000000000000000000..068477c92af080afb53465a651dd7d1815d562c2 GIT binary patch literal 407 zcmb=p_4e+?tY!lS)(hWjd_VoS4`&P8oD}qI!Lz*MP5ODNZExOG1+MwJb8D;p-LO8! z?c3h{D>>rL|Ffpgd7A6Xc6+Psn~m@D{rRxH?)O~%;+lWWo2OpY#{~EVH=u6 z*CeoNM;zn|YxyENS5&k1Xxh;g$7WrP-Y%=Xxj1^=`WtIKUTA-NKSlcq*G{K(1-ys2 zkTw0`)@J(M6-dz@>7=A*us5M&v*{}_V zikH1R`f1L}yvxPQidw;HV6KBY)F%BE(1c~reV&3`GXd;yxF5O}ivA8Q?Gyc+m*}Yd zYKdyZw)H0}-4ng5+!L?o?u!;XT{?T~wJmv{XFN90&I($0Ldf#T-Q#!vG0tQ&@c{s0 CYRvKg literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_7/mask_21_7.dat b/addons/unishop/library/phpqrcode/cache/mask_7/mask_21_7.dat new file mode 100644 index 0000000..4f9f138 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_7/mask_21_7.dat @@ -0,0 +1,4 @@ +xڝQ +0 B=r]-?]Rl2nc +[nA".j+i +~x3;QIQH8R҈G"z,&;'o97%P8%6oǽ;]NWn[f7v \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_7/mask_29_7.dat b/addons/unishop/library/phpqrcode/cache/mask_7/mask_29_7.dat new file mode 100644 index 0000000..e3d7391 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_7/mask_29_7.dat @@ -0,0 +1,2 @@ +xR9 QpX$lŲf!I2pgSMZj"te0#ԛ`_1-cha~/Eh4"~ \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_7/mask_37_7.dat b/addons/unishop/library/phpqrcode/cache/mask_7/mask_37_7.dat new file mode 100644 index 0000000000000000000000000000000000000000..87d9a1a9d2c57b346aa4a8a2e03754a7f7668ab3 GIT binary patch literal 122 zcmV-=0EPc}+U-<34nQFY+c^!r|K-dh{-xmXMloTrDOS>|wt{nN$p8UIKT#gc;o<{l zE|1OO;;@B_*1sBYail&HAVaMSznZ$V?+Zst%JX#@k^|V&_%v=tL+(dx9wGsNg^L)? cH0CK`8l%kV8sp6AdyF;KJ?hQK0&cYgLugGq!2kdN literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_7/mask_41_7.dat b/addons/unishop/library/phpqrcode/cache/mask_7/mask_41_7.dat new file mode 100644 index 0000000..8acec04 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_7/mask_41_7.dat @@ -0,0 +1 @@ +xTA 5[fDY(O^bR3/~t/L"7SQQ5j\Sib#Նȏ+ǣw#zx?㽧A-wu曑Y7$b.%A;wRoxG}? \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/cache/mask_7/mask_45_7.dat b/addons/unishop/library/phpqrcode/cache/mask_7/mask_45_7.dat new file mode 100644 index 0000000000000000000000000000000000000000..dbba31d0bfddcbed98ea5d7a9f6ee59f976e0421 GIT binary patch literal 173 zcmV;e08;;W+U-@*3cw%;e7~=;|Npr$DAUrsy$v=4K{1olOOYWhIYuypTZ?rVorcG` ziBe#%j*Q*dv)kOh(x@276Nxd&JP9U=2L~+ngMKq>jn}9{jK*jHRSM|5x5n%q5&j`e zsyWelhq7a3OJw7iYkdjosJYWIS!tZw|D3#JI49hv+1NkUa3?Dz bQL;xvA(=V?*)bSkL5FpXakG_S`^qkH-^P*%H1XEuNsLnfvAu` z`*BEI8A_NDBQX*qG5P?bYCW1Y9JBiGIs;FK@Oe8gF(1@>hQVmp28DF`j`Xh+BQX-A zPcoX-fMZmg?C*@cp*&oVxZ$(2Gpy+uA|bgw1Aot87`^rkIYy2Bj`)lr?t+Z`0Y=4# E+IH1p%m4rY literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_7/mask_73_7.dat b/addons/unishop/library/phpqrcode/cache/mask_7/mask_73_7.dat new file mode 100644 index 0000000000000000000000000000000000000000..f414e4a5877861bd45e439125a47c52b70a0ca12 GIT binary patch literal 221 zcmV<303!c*+U;1;4#OY_e7~=O|NpsVOKWw-svJ$a1xQMLKjmF z$Fo{kZk}5~sTj*XCvO!sEAx=sT{$)7Ae9TQEOc4^f@wQ)ea)wu7H%}{#MK=l@)ASD zb^%LDMOj|2h)%FTj!en)$C=J-W^O$fr&vx@-|THnt7dOwYNfBvQ>ukv o40T%96U5*sI{`_>S?}(:yTl{G&E\6}"AX XϬQSkr0$!s zmX(et@ z$j}>#8;TpsDPluxhz+rk$AtTL3lG`X3UJ4`446UdL}WW&@+vhnbfN!;F1qj9*+b^XNIk3 z`ZsZ(ai8(tWM<5anK3hF=1a_o^~_APRcC!GK5O7o1G~?-&v25BNzV0+I1 literal 0 HcmV?d00001 diff --git a/addons/unishop/library/phpqrcode/cache/mask_7/mask_97_7.dat b/addons/unishop/library/phpqrcode/cache/mask_7/mask_97_7.dat new file mode 100644 index 0000000..b277368 --- /dev/null +++ b/addons/unishop/library/phpqrcode/cache/mask_7/mask_97_7.dat @@ -0,0 +1,2 @@ +x0ܲD[V.KI`'sxy$xx"= O^&pbYʬ$Kݣ8K eÌ 3:$bI,%$Yb襶 +M)T %q綦EX}jlTTKbI,%,_e[%V]R];N,%$%V@`%pam(}_%%۸4='u)ai.;M> \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/images/qrcode.png b/addons/unishop/library/phpqrcode/images/qrcode.png new file mode 100644 index 0000000..e69de29 diff --git a/addons/unishop/library/phpqrcode/index.php b/addons/unishop/library/phpqrcode/index.php new file mode 100644 index 0000000..4fa2c9c --- /dev/null +++ b/addons/unishop/library/phpqrcode/index.php @@ -0,0 +1,94 @@ + + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + echo "

PHP QR Code


"; + + //set it to writable location, a place for temp generated PNG files + $PNG_TEMP_DIR = dirname(__FILE__).DIRECTORY_SEPARATOR.'temp'.DIRECTORY_SEPARATOR; + + //html PNG location prefix + $PNG_WEB_DIR = 'temp/'; + + include "qrlib.php"; + + //ofcourse we need rights to create temp dir + if (!file_exists($PNG_TEMP_DIR)) + mkdir($PNG_TEMP_DIR); + + + $filename = $PNG_TEMP_DIR.'test.png'; + + //processing form input + //remember to sanitize user input in real-life solution !!! + $errorCorrectionLevel = 'L'; + if (isset($_REQUEST['level']) && in_array($_REQUEST['level'], array('L','M','Q','H'))) + $errorCorrectionLevel = $_REQUEST['level']; + + $matrixPointSize = 4; + if (isset($_REQUEST['size'])) + $matrixPointSize = min(max((int)$_REQUEST['size'], 1), 10); + + + if (isset($_REQUEST['data'])) { + + //it's very important! + if (trim($_REQUEST['data']) == '') + die('data cannot be empty! back'); + + // user data + $filename = $PNG_TEMP_DIR.'test'.md5($_REQUEST['data'].'|'.$errorCorrectionLevel.'|'.$matrixPointSize).'.png'; + QRcode::png($_REQUEST['data'], $filename, $errorCorrectionLevel, $matrixPointSize, 2); + + } else { + + //default data + echo 'You can provide data in GET parameter: like that
'; + QRcode::png('PHP QR Code :)', $filename, $errorCorrectionLevel, $matrixPointSize, 2); + + } + + //display generated file + echo '
'; + + //config form + echo '
+ Data:   + ECC:   + Size:   +

'; + + // benchmark + QRtools::timeBenchmark(); + + \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/phpqrcode.php b/addons/unishop/library/phpqrcode/phpqrcode.php new file mode 100644 index 0000000..ea8c08f --- /dev/null +++ b/addons/unishop/library/phpqrcode/phpqrcode.php @@ -0,0 +1,3312 @@ + + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + + +/* + * Version: 1.1.4 + * Build: 2010100721 + */ + + + +//---- qrconst.php ----------------------------- + + + + + +/* + * PHP QR Code encoder + * + * Common constants + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + // Encoding modes + + define('QR_MODE_NUL', -1); + define('QR_MODE_NUM', 0); + define('QR_MODE_AN', 1); + define('QR_MODE_8', 2); + define('QR_MODE_KANJI', 3); + define('QR_MODE_STRUCTURE', 4); + + // Levels of error correction. + + define('QR_ECLEVEL_L', 0); + define('QR_ECLEVEL_M', 1); + define('QR_ECLEVEL_Q', 2); + define('QR_ECLEVEL_H', 3); + + // Supported output formats + + define('QR_FORMAT_TEXT', 0); + define('QR_FORMAT_PNG', 1); + + class qrstr { + public static function set(&$srctab, $x, $y, $repl, $replLen = false) { + $srctab[$y] = substr_replace($srctab[$y], ($replLen !== false)?substr($repl,0,$replLen):$repl, $x, ($replLen !== false)?$replLen:strlen($repl)); + } + } + + + +//---- merged_config.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Config file, tuned-up for merged verion + */ + + define('QR_CACHEABLE', false); // use cache - more disk reads but less CPU power, masks and format templates are stored there + define('QR_CACHE_DIR', false); // used when QR_CACHEABLE === true + define('QR_LOG_DIR', false); // default error logs dir + + define('QR_FIND_BEST_MASK', true); // if true, estimates best mask (spec. default, but extremally slow; set to false to significant performance boost but (propably) worst quality code + define('QR_FIND_FROM_RANDOM', 2); // if false, checks all masks available, otherwise value tells count of masks need to be checked, mask id are got randomly + define('QR_DEFAULT_MASK', 2); // when QR_FIND_BEST_MASK === false + + define('QR_PNG_MAXIMUM_SIZE', 1024); // maximum allowed png image width (in pixels), tune to make sure GD and PHP can handle such big images + + + + +//---- qrtools.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Toolset, handy and debug utilites. + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRtools { + + //---------------------------------------------------------------------- + public static function binarize($frame) + { + $len = count($frame); + foreach ($frame as &$frameLine) { + + for($i=0; $i<$len; $i++) { + $frameLine[$i] = (ord($frameLine[$i])&1)?'1':'0'; + } + } + + return $frame; + } + + //---------------------------------------------------------------------- + public static function tcpdfBarcodeArray($code, $mode = 'QR,L', $tcPdfVersion = '4.5.037') + { + $barcode_array = array(); + + if (!is_array($mode)) + $mode = explode(',', $mode); + + $eccLevel = 'L'; + + if (count($mode) > 1) { + $eccLevel = $mode[1]; + } + + $qrTab = QRcode::text($code, false, $eccLevel); + $size = count($qrTab); + + $barcode_array['num_rows'] = $size; + $barcode_array['num_cols'] = $size; + $barcode_array['bcode'] = array(); + + foreach ($qrTab as $line) { + $arrAdd = array(); + foreach(str_split($line) as $char) + $arrAdd[] = ($char=='1')?1:0; + $barcode_array['bcode'][] = $arrAdd; + } + + return $barcode_array; + } + + //---------------------------------------------------------------------- + public static function clearCache() + { + self::$frames = array(); + } + + //---------------------------------------------------------------------- + public static function buildCache() + { + QRtools::markTime('before_build_cache'); + + $mask = new QRmask(); + for ($a=1; $a <= QRSPEC_VERSION_MAX; $a++) { + $frame = QRspec::newFrame($a); + if (QR_IMAGE) { + $fileName = QR_CACHE_DIR.'frame_'.$a.'.png'; + QRimage::png(self::binarize($frame), $fileName, 1, 0); + } + + $width = count($frame); + $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); + for ($maskNo=0; $maskNo<8; $maskNo++) + $mask->makeMaskNo($maskNo, $width, $frame, $bitMask, true); + } + + QRtools::markTime('after_build_cache'); + } + + //---------------------------------------------------------------------- + public static function log($outfile, $err) + { + if (QR_LOG_DIR !== false) { + if ($err != '') { + if ($outfile !== false) { + file_put_contents(QR_LOG_DIR.basename($outfile).'-errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); + } else { + file_put_contents(QR_LOG_DIR.'errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); + } + } + } + } + + //---------------------------------------------------------------------- + public static function dumpMask($frame) + { + $width = count($frame); + for($y=0;$y<$width;$y++) { + for($x=0;$x<$width;$x++) { + echo ord($frame[$y][$x]).','; + } + } + } + + //---------------------------------------------------------------------- + public static function markTime($markerId) + { + list($usec, $sec) = explode(" ", microtime()); + $time = ((float)$usec + (float)$sec); + + if (!isset($GLOBALS['qr_time_bench'])) + $GLOBALS['qr_time_bench'] = array(); + + $GLOBALS['qr_time_bench'][$markerId] = $time; + } + + //---------------------------------------------------------------------- + public static function timeBenchmark() + { + self::markTime('finish'); + + $lastTime = 0; + $startTime = 0; + $p = 0; + + echo ' + + '; + + foreach($GLOBALS['qr_time_bench'] as $markerId=>$thisTime) { + if ($p > 0) { + echo ''; + } else { + $startTime = $thisTime; + } + + $p++; + $lastTime = $thisTime; + } + + echo ' + + +
BENCHMARK
till '.$markerId.': '.number_format($thisTime-$lastTime, 6).'s
TOTAL: '.number_format($lastTime-$startTime, 6).'s
'; + } + + } + + //########################################################################## + + QRtools::markTime('start'); + + + + +//---- qrspec.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * QR Code specifications + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * The following data / specifications are taken from + * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) + * or + * "Automatic identification and data capture techniques -- + * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('QRSPEC_VERSION_MAX', 40); + define('QRSPEC_WIDTH_MAX', 177); + + define('QRCAP_WIDTH', 0); + define('QRCAP_WORDS', 1); + define('QRCAP_REMINDER', 2); + define('QRCAP_EC', 3); + + class QRspec { + + public static $capacity = array( + array( 0, 0, 0, array( 0, 0, 0, 0)), + array( 21, 26, 0, array( 7, 10, 13, 17)), // 1 + array( 25, 44, 7, array( 10, 16, 22, 28)), + array( 29, 70, 7, array( 15, 26, 36, 44)), + array( 33, 100, 7, array( 20, 36, 52, 64)), + array( 37, 134, 7, array( 26, 48, 72, 88)), // 5 + array( 41, 172, 7, array( 36, 64, 96, 112)), + array( 45, 196, 0, array( 40, 72, 108, 130)), + array( 49, 242, 0, array( 48, 88, 132, 156)), + array( 53, 292, 0, array( 60, 110, 160, 192)), + array( 57, 346, 0, array( 72, 130, 192, 224)), //10 + array( 61, 404, 0, array( 80, 150, 224, 264)), + array( 65, 466, 0, array( 96, 176, 260, 308)), + array( 69, 532, 0, array( 104, 198, 288, 352)), + array( 73, 581, 3, array( 120, 216, 320, 384)), + array( 77, 655, 3, array( 132, 240, 360, 432)), //15 + array( 81, 733, 3, array( 144, 280, 408, 480)), + array( 85, 815, 3, array( 168, 308, 448, 532)), + array( 89, 901, 3, array( 180, 338, 504, 588)), + array( 93, 991, 3, array( 196, 364, 546, 650)), + array( 97, 1085, 3, array( 224, 416, 600, 700)), //20 + array(101, 1156, 4, array( 224, 442, 644, 750)), + array(105, 1258, 4, array( 252, 476, 690, 816)), + array(109, 1364, 4, array( 270, 504, 750, 900)), + array(113, 1474, 4, array( 300, 560, 810, 960)), + array(117, 1588, 4, array( 312, 588, 870, 1050)), //25 + array(121, 1706, 4, array( 336, 644, 952, 1110)), + array(125, 1828, 4, array( 360, 700, 1020, 1200)), + array(129, 1921, 3, array( 390, 728, 1050, 1260)), + array(133, 2051, 3, array( 420, 784, 1140, 1350)), + array(137, 2185, 3, array( 450, 812, 1200, 1440)), //30 + array(141, 2323, 3, array( 480, 868, 1290, 1530)), + array(145, 2465, 3, array( 510, 924, 1350, 1620)), + array(149, 2611, 3, array( 540, 980, 1440, 1710)), + array(153, 2761, 3, array( 570, 1036, 1530, 1800)), + array(157, 2876, 0, array( 570, 1064, 1590, 1890)), //35 + array(161, 3034, 0, array( 600, 1120, 1680, 1980)), + array(165, 3196, 0, array( 630, 1204, 1770, 2100)), + array(169, 3362, 0, array( 660, 1260, 1860, 2220)), + array(173, 3532, 0, array( 720, 1316, 1950, 2310)), + array(177, 3706, 0, array( 750, 1372, 2040, 2430)) //40 + ); + + //---------------------------------------------------------------------- + public static function getDataLength($version, $level) + { + return self::$capacity[$version][QRCAP_WORDS] - self::$capacity[$version][QRCAP_EC][$level]; + } + + //---------------------------------------------------------------------- + public static function getECCLength($version, $level) + { + return self::$capacity[$version][QRCAP_EC][$level]; + } + + //---------------------------------------------------------------------- + public static function getWidth($version) + { + return self::$capacity[$version][QRCAP_WIDTH]; + } + + //---------------------------------------------------------------------- + public static function getRemainder($version) + { + return self::$capacity[$version][QRCAP_REMINDER]; + } + + //---------------------------------------------------------------------- + public static function getMinimumVersion($size, $level) + { + + for($i=1; $i<= QRSPEC_VERSION_MAX; $i++) { + $words = self::$capacity[$i][QRCAP_WORDS] - self::$capacity[$i][QRCAP_EC][$level]; + if($words >= $size) + return $i; + } + + return -1; + } + + //###################################################################### + + public static $lengthTableBits = array( + array(10, 12, 14), + array( 9, 11, 13), + array( 8, 16, 16), + array( 8, 10, 12) + ); + + //---------------------------------------------------------------------- + public static function lengthIndicator($mode, $version) + { + if ($mode == QR_MODE_STRUCTURE) + return 0; + + if ($version <= 9) { + $l = 0; + } else if ($version <= 26) { + $l = 1; + } else { + $l = 2; + } + + return self::$lengthTableBits[$mode][$l]; + } + + //---------------------------------------------------------------------- + public static function maximumWords($mode, $version) + { + if($mode == QR_MODE_STRUCTURE) + return 3; + + if($version <= 9) { + $l = 0; + } else if($version <= 26) { + $l = 1; + } else { + $l = 2; + } + + $bits = self::$lengthTableBits[$mode][$l]; + $words = (1 << $bits) - 1; + + if($mode == QR_MODE_KANJI) { + $words *= 2; // the number of bytes is required + } + + return $words; + } + + // Error correction code ----------------------------------------------- + // Table of the error correction code (Reed-Solomon block) + // See Table 12-16 (pp.30-36), JIS X0510:2004. + + public static $eccTable = array( + array(array( 0, 0), array( 0, 0), array( 0, 0), array( 0, 0)), + array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), // 1 + array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), + array(array( 1, 0), array( 1, 0), array( 2, 0), array( 2, 0)), + array(array( 1, 0), array( 2, 0), array( 2, 0), array( 4, 0)), + array(array( 1, 0), array( 2, 0), array( 2, 2), array( 2, 2)), // 5 + array(array( 2, 0), array( 4, 0), array( 4, 0), array( 4, 0)), + array(array( 2, 0), array( 4, 0), array( 2, 4), array( 4, 1)), + array(array( 2, 0), array( 2, 2), array( 4, 2), array( 4, 2)), + array(array( 2, 0), array( 3, 2), array( 4, 4), array( 4, 4)), + array(array( 2, 2), array( 4, 1), array( 6, 2), array( 6, 2)), //10 + array(array( 4, 0), array( 1, 4), array( 4, 4), array( 3, 8)), + array(array( 2, 2), array( 6, 2), array( 4, 6), array( 7, 4)), + array(array( 4, 0), array( 8, 1), array( 8, 4), array(12, 4)), + array(array( 3, 1), array( 4, 5), array(11, 5), array(11, 5)), + array(array( 5, 1), array( 5, 5), array( 5, 7), array(11, 7)), //15 + array(array( 5, 1), array( 7, 3), array(15, 2), array( 3, 13)), + array(array( 1, 5), array(10, 1), array( 1, 15), array( 2, 17)), + array(array( 5, 1), array( 9, 4), array(17, 1), array( 2, 19)), + array(array( 3, 4), array( 3, 11), array(17, 4), array( 9, 16)), + array(array( 3, 5), array( 3, 13), array(15, 5), array(15, 10)), //20 + array(array( 4, 4), array(17, 0), array(17, 6), array(19, 6)), + array(array( 2, 7), array(17, 0), array( 7, 16), array(34, 0)), + array(array( 4, 5), array( 4, 14), array(11, 14), array(16, 14)), + array(array( 6, 4), array( 6, 14), array(11, 16), array(30, 2)), + array(array( 8, 4), array( 8, 13), array( 7, 22), array(22, 13)), //25 + array(array(10, 2), array(19, 4), array(28, 6), array(33, 4)), + array(array( 8, 4), array(22, 3), array( 8, 26), array(12, 28)), + array(array( 3, 10), array( 3, 23), array( 4, 31), array(11, 31)), + array(array( 7, 7), array(21, 7), array( 1, 37), array(19, 26)), + array(array( 5, 10), array(19, 10), array(15, 25), array(23, 25)), //30 + array(array(13, 3), array( 2, 29), array(42, 1), array(23, 28)), + array(array(17, 0), array(10, 23), array(10, 35), array(19, 35)), + array(array(17, 1), array(14, 21), array(29, 19), array(11, 46)), + array(array(13, 6), array(14, 23), array(44, 7), array(59, 1)), + array(array(12, 7), array(12, 26), array(39, 14), array(22, 41)), //35 + array(array( 6, 14), array( 6, 34), array(46, 10), array( 2, 64)), + array(array(17, 4), array(29, 14), array(49, 10), array(24, 46)), + array(array( 4, 18), array(13, 32), array(48, 14), array(42, 32)), + array(array(20, 4), array(40, 7), array(43, 22), array(10, 67)), + array(array(19, 6), array(18, 31), array(34, 34), array(20, 61)),//40 + ); + + //---------------------------------------------------------------------- + // CACHEABLE!!! + + public static function getEccSpec($version, $level, array &$spec) + { + if (count($spec) < 5) { + $spec = array(0,0,0,0,0); + } + + $b1 = self::$eccTable[$version][$level][0]; + $b2 = self::$eccTable[$version][$level][1]; + $data = self::getDataLength($version, $level); + $ecc = self::getECCLength($version, $level); + + if($b2 == 0) { + $spec[0] = $b1; + $spec[1] = (int)($data / $b1); + $spec[2] = (int)($ecc / $b1); + $spec[3] = 0; + $spec[4] = 0; + } else { + $spec[0] = $b1; + $spec[1] = (int)($data / ($b1 + $b2)); + $spec[2] = (int)($ecc / ($b1 + $b2)); + $spec[3] = $b2; + $spec[4] = $spec[1] + 1; + } + } + + // Alignment pattern --------------------------------------------------- + + // Positions of alignment patterns. + // This array includes only the second and the third position of the + // alignment patterns. Rest of them can be calculated from the distance + // between them. + + // See Table 1 in Appendix E (pp.71) of JIS X0510:2004. + + public static $alignmentPattern = array( + array( 0, 0), + array( 0, 0), array(18, 0), array(22, 0), array(26, 0), array(30, 0), // 1- 5 + array(34, 0), array(22, 38), array(24, 42), array(26, 46), array(28, 50), // 6-10 + array(30, 54), array(32, 58), array(34, 62), array(26, 46), array(26, 48), //11-15 + array(26, 50), array(30, 54), array(30, 56), array(30, 58), array(34, 62), //16-20 + array(28, 50), array(26, 50), array(30, 54), array(28, 54), array(32, 58), //21-25 + array(30, 58), array(34, 62), array(26, 50), array(30, 54), array(26, 52), //26-30 + array(30, 56), array(34, 60), array(30, 58), array(34, 62), array(30, 54), //31-35 + array(24, 50), array(28, 54), array(32, 58), array(26, 54), array(30, 58), //35-40 + ); + + + /** -------------------------------------------------------------------- + * Put an alignment marker. + * @param frame + * @param width + * @param ox,oy center coordinate of the pattern + */ + public static function putAlignmentMarker(array &$frame, $ox, $oy) + { + $finder = array( + "\xa1\xa1\xa1\xa1\xa1", + "\xa1\xa0\xa0\xa0\xa1", + "\xa1\xa0\xa1\xa0\xa1", + "\xa1\xa0\xa0\xa0\xa1", + "\xa1\xa1\xa1\xa1\xa1" + ); + + $yStart = $oy-2; + $xStart = $ox-2; + + for($y=0; $y<5; $y++) { + QRstr::set($frame, $xStart, $yStart+$y, $finder[$y]); + } + } + + //---------------------------------------------------------------------- + public static function putAlignmentPattern($version, &$frame, $width) + { + if($version < 2) + return; + + $d = self::$alignmentPattern[$version][1] - self::$alignmentPattern[$version][0]; + if($d < 0) { + $w = 2; + } else { + $w = (int)(($width - self::$alignmentPattern[$version][0]) / $d + 2); + } + + if($w * $w - 3 == 1) { + $x = self::$alignmentPattern[$version][0]; + $y = self::$alignmentPattern[$version][0]; + self::putAlignmentMarker($frame, $x, $y); + return; + } + + $cx = self::$alignmentPattern[$version][0]; + for($x=1; $x<$w - 1; $x++) { + self::putAlignmentMarker($frame, 6, $cx); + self::putAlignmentMarker($frame, $cx, 6); + $cx += $d; + } + + $cy = self::$alignmentPattern[$version][0]; + for($y=0; $y<$w-1; $y++) { + $cx = self::$alignmentPattern[$version][0]; + for($x=0; $x<$w-1; $x++) { + self::putAlignmentMarker($frame, $cx, $cy); + $cx += $d; + } + $cy += $d; + } + } + + // Version information pattern ----------------------------------------- + + // Version information pattern (BCH coded). + // See Table 1 in Appendix D (pp.68) of JIS X0510:2004. + + // size: [QRSPEC_VERSION_MAX - 6] + + public static $versionPattern = array( + 0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d, + 0x0f928, 0x10b78, 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9, + 0x177ec, 0x18ec4, 0x191e1, 0x1afab, 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75, + 0x1f250, 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b, 0x2542e, 0x26a64, + 0x27541, 0x28c69 + ); + + //---------------------------------------------------------------------- + public static function getVersionPattern($version) + { + if($version < 7 || $version > QRSPEC_VERSION_MAX) + return 0; + + return self::$versionPattern[$version -7]; + } + + // Format information -------------------------------------------------- + // See calcFormatInfo in tests/test_qrspec.c (orginal qrencode c lib) + + public static $formatInfo = array( + array(0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976), + array(0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0), + array(0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed), + array(0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b) + ); + + public static function getFormatInfo($mask, $level) + { + if($mask < 0 || $mask > 7) + return 0; + + if($level < 0 || $level > 3) + return 0; + + return self::$formatInfo[$level][$mask]; + } + + // Frame --------------------------------------------------------------- + // Cache of initial frames. + + public static $frames = array(); + + /** -------------------------------------------------------------------- + * Put a finder pattern. + * @param frame + * @param width + * @param ox,oy upper-left coordinate of the pattern + */ + public static function putFinderPattern(&$frame, $ox, $oy) + { + $finder = array( + "\xc1\xc1\xc1\xc1\xc1\xc1\xc1", + "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", + "\xc1\xc1\xc1\xc1\xc1\xc1\xc1" + ); + + for($y=0; $y<7; $y++) { + QRstr::set($frame, $ox, $oy+$y, $finder[$y]); + } + } + + //---------------------------------------------------------------------- + public static function createFrame($version) + { + $width = self::$capacity[$version][QRCAP_WIDTH]; + $frameLine = str_repeat ("\0", $width); + $frame = array_fill(0, $width, $frameLine); + + // Finder pattern + self::putFinderPattern($frame, 0, 0); + self::putFinderPattern($frame, $width - 7, 0); + self::putFinderPattern($frame, 0, $width - 7); + + // Separator + $yOffset = $width - 7; + + for($y=0; $y<7; $y++) { + $frame[$y][7] = "\xc0"; + $frame[$y][$width - 8] = "\xc0"; + $frame[$yOffset][7] = "\xc0"; + $yOffset++; + } + + $setPattern = str_repeat("\xc0", 8); + + QRstr::set($frame, 0, 7, $setPattern); + QRstr::set($frame, $width-8, 7, $setPattern); + QRstr::set($frame, 0, $width - 8, $setPattern); + + // Format info + $setPattern = str_repeat("\x84", 9); + QRstr::set($frame, 0, 8, $setPattern); + QRstr::set($frame, $width - 8, 8, $setPattern, 8); + + $yOffset = $width - 8; + + for($y=0; $y<8; $y++,$yOffset++) { + $frame[$y][8] = "\x84"; + $frame[$yOffset][8] = "\x84"; + } + + // Timing pattern + + for($i=1; $i<$width-15; $i++) { + $frame[6][7+$i] = chr(0x90 | ($i & 1)); + $frame[7+$i][6] = chr(0x90 | ($i & 1)); + } + + // Alignment pattern + self::putAlignmentPattern($version, $frame, $width); + + // Version information + if($version >= 7) { + $vinf = self::getVersionPattern($version); + + $v = $vinf; + + for($x=0; $x<6; $x++) { + for($y=0; $y<3; $y++) { + $frame[($width - 11)+$y][$x] = chr(0x88 | ($v & 1)); + $v = $v >> 1; + } + } + + $v = $vinf; + for($y=0; $y<6; $y++) { + for($x=0; $x<3; $x++) { + $frame[$y][$x+($width - 11)] = chr(0x88 | ($v & 1)); + $v = $v >> 1; + } + } + } + + // and a little bit... + $frame[$width - 8][8] = "\x81"; + + return $frame; + } + + //---------------------------------------------------------------------- + public static function debug($frame, $binary_mode = false) + { + if ($binary_mode) { + + foreach ($frame as &$frameLine) { + $frameLine = join('  ', explode('0', $frameLine)); + $frameLine = join('██', explode('1', $frameLine)); + } + + ?> + +


        '; + echo join("
        ", $frame); + echo '






'; + + } else { + + foreach ($frame as &$frameLine) { + $frameLine = join(' ', explode("\xc0", $frameLine)); + $frameLine = join('', explode("\xc1", $frameLine)); + $frameLine = join(' ', explode("\xa0", $frameLine)); + $frameLine = join('', explode("\xa1", $frameLine)); + $frameLine = join('', explode("\x84", $frameLine)); //format 0 + $frameLine = join('', explode("\x85", $frameLine)); //format 1 + $frameLine = join('', explode("\x81", $frameLine)); //special bit + $frameLine = join(' ', explode("\x90", $frameLine)); //clock 0 + $frameLine = join('', explode("\x91", $frameLine)); //clock 1 + $frameLine = join(' ', explode("\x88", $frameLine)); //version + $frameLine = join('', explode("\x89", $frameLine)); //version + $frameLine = join('♦', explode("\x01", $frameLine)); + $frameLine = join('⋅', explode("\0", $frameLine)); + } + + ?> + + "; + echo join("
", $frame); + echo "
"; + + } + } + + //---------------------------------------------------------------------- + public static function serial($frame) + { + return gzcompress(join("\n", $frame), 9); + } + + //---------------------------------------------------------------------- + public static function unserial($code) + { + return explode("\n", gzuncompress($code)); + } + + //---------------------------------------------------------------------- + public static function newFrame($version) + { + if($version < 1 || $version > QRSPEC_VERSION_MAX) + return null; + + if(!isset(self::$frames[$version])) { + + $fileName = QR_CACHE_DIR.'frame_'.$version.'.dat'; + + if (QR_CACHEABLE) { + if (file_exists($fileName)) { + self::$frames[$version] = self::unserial(file_get_contents($fileName)); + } else { + self::$frames[$version] = self::createFrame($version); + file_put_contents($fileName, self::serial(self::$frames[$version])); + } + } else { + self::$frames[$version] = self::createFrame($version); + } + } + + if(is_null(self::$frames[$version])) + return null; + + return self::$frames[$version]; + } + + //---------------------------------------------------------------------- + public static function rsBlockNum($spec) { return $spec[0] + $spec[3]; } + public static function rsBlockNum1($spec) { return $spec[0]; } + public static function rsDataCodes1($spec) { return $spec[1]; } + public static function rsEccCodes1($spec) { return $spec[2]; } + public static function rsBlockNum2($spec) { return $spec[3]; } + public static function rsDataCodes2($spec) { return $spec[4]; } + public static function rsEccCodes2($spec) { return $spec[2]; } + public static function rsDataLength($spec) { return ($spec[0] * $spec[1]) + ($spec[3] * $spec[4]); } + public static function rsEccLength($spec) { return ($spec[0] + $spec[3]) * $spec[2]; } + + } + + + +//---- qrimage.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Image output of code using GD2 + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('QR_IMAGE', true); + + class QRimage { + + //---------------------------------------------------------------------- + public static function png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE) + { + $image = self::image($frame, $pixelPerPoint, $outerFrame); + + if ($filename === false) { + Header("Content-type: image/png"); + ImagePng($image); + } else { + if($saveandprint===TRUE){ + ImagePng($image, $filename); + header("Content-type: image/png"); + ImagePng($image); + }else{ + ImagePng($image, $filename); + } + } + + ImageDestroy($image); + } + + //---------------------------------------------------------------------- + public static function jpg($frame, $filename = false, $pixelPerPoint = 8, $outerFrame = 4, $q = 85) + { + $image = self::image($frame, $pixelPerPoint, $outerFrame); + + if ($filename === false) { + Header("Content-type: image/jpeg"); + ImageJpeg($image, null, $q); + } else { + ImageJpeg($image, $filename, $q); + } + + ImageDestroy($image); + } + + //---------------------------------------------------------------------- + private static function image($frame, $pixelPerPoint = 4, $outerFrame = 4) + { + $h = count($frame); + $w = strlen($frame[0]); + + $imgW = $w + 2*$outerFrame; + $imgH = $h + 2*$outerFrame; + + $base_image =ImageCreate($imgW, $imgH); + + $col[0] = ImageColorAllocate($base_image,255,255,255); + $col[1] = ImageColorAllocate($base_image,0,0,0); + + imagefill($base_image, 0, 0, $col[0]); + + for($y=0; $y<$h; $y++) { + for($x=0; $x<$w; $x++) { + if ($frame[$y][$x] == '1') { + ImageSetPixel($base_image,$x+$outerFrame,$y+$outerFrame,$col[1]); + } + } + } + + $target_image =ImageCreate($imgW * $pixelPerPoint, $imgH * $pixelPerPoint); + ImageCopyResized($target_image, $base_image, 0, 0, 0, 0, $imgW * $pixelPerPoint, $imgH * $pixelPerPoint, $imgW, $imgH); + ImageDestroy($base_image); + + return $target_image; + } + } + + + +//---- qrinput.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Input encoding class + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('STRUCTURE_HEADER_BITS', 20); + define('MAX_STRUCTURED_SYMBOLS', 16); + + class QRinputItem { + + public $mode; + public $size; + public $data; + public $bstream; + + public function __construct($mode, $size, $data, $bstream = null) + { + $setData = array_slice($data, 0, $size); + + if (count($setData) < $size) { + $setData = array_merge($setData, array_fill(0,$size-count($setData),0)); + } + + if(!QRinput::check($mode, $size, $setData)) { + throw new Exception('Error m:'.$mode.',s:'.$size.',d:'.join(',',$setData)); + return null; + } + + $this->mode = $mode; + $this->size = $size; + $this->data = $setData; + $this->bstream = $bstream; + } + + //---------------------------------------------------------------------- + public function encodeModeNum($version) + { + try { + + $words = (int)($this->size / 3); + $bs = new QRbitstream(); + + $val = 0x1; + $bs->appendNum(4, $val); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_NUM, $version), $this->size); + + for($i=0; $i<$words; $i++) { + $val = (ord($this->data[$i*3 ]) - ord('0')) * 100; + $val += (ord($this->data[$i*3+1]) - ord('0')) * 10; + $val += (ord($this->data[$i*3+2]) - ord('0')); + $bs->appendNum(10, $val); + } + + if($this->size - $words * 3 == 1) { + $val = ord($this->data[$words*3]) - ord('0'); + $bs->appendNum(4, $val); + } else if($this->size - $words * 3 == 2) { + $val = (ord($this->data[$words*3 ]) - ord('0')) * 10; + $val += (ord($this->data[$words*3+1]) - ord('0')); + $bs->appendNum(7, $val); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeAn($version) + { + try { + $words = (int)($this->size / 2); + $bs = new QRbitstream(); + + $bs->appendNum(4, 0x02); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_AN, $version), $this->size); + + for($i=0; $i<$words; $i++) { + $val = (int)QRinput::lookAnTable(ord($this->data[$i*2 ])) * 45; + $val += (int)QRinput::lookAnTable(ord($this->data[$i*2+1])); + + $bs->appendNum(11, $val); + } + + if($this->size & 1) { + $val = QRinput::lookAnTable(ord($this->data[$words * 2])); + $bs->appendNum(6, $val); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeMode8($version) + { + try { + $bs = new QRbitstream(); + + $bs->appendNum(4, 0x4); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_8, $version), $this->size); + + for($i=0; $i<$this->size; $i++) { + $bs->appendNum(8, ord($this->data[$i])); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeKanji($version) + { + try { + + $bs = new QRbitrtream(); + + $bs->appendNum(4, 0x8); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_KANJI, $version), (int)($this->size / 2)); + + for($i=0; $i<$this->size; $i+=2) { + $val = (ord($this->data[$i]) << 8) | ord($this->data[$i+1]); + if($val <= 0x9ffc) { + $val -= 0x8140; + } else { + $val -= 0xc140; + } + + $h = ($val >> 8) * 0xc0; + $val = ($val & 0xff) + $h; + + $bs->appendNum(13, $val); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeStructure() + { + try { + $bs = new QRbitstream(); + + $bs->appendNum(4, 0x03); + $bs->appendNum(4, ord($this->data[1]) - 1); + $bs->appendNum(4, ord($this->data[0]) - 1); + $bs->appendNum(8, ord($this->data[2])); + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function estimateBitStreamSizeOfEntry($version) + { + $bits = 0; + + if($version == 0) + $version = 1; + + switch($this->mode) { + case QR_MODE_NUM: $bits = QRinput::estimateBitsModeNum($this->size); break; + case QR_MODE_AN: $bits = QRinput::estimateBitsModeAn($this->size); break; + case QR_MODE_8: $bits = QRinput::estimateBitsMode8($this->size); break; + case QR_MODE_KANJI: $bits = QRinput::estimateBitsModeKanji($this->size);break; + case QR_MODE_STRUCTURE: return STRUCTURE_HEADER_BITS; + default: + return 0; + } + + $l = QRspec::lengthIndicator($this->mode, $version); + $m = 1 << $l; + $num = (int)(($this->size + $m - 1) / $m); + + $bits += $num * (4 + $l); + + return $bits; + } + + //---------------------------------------------------------------------- + public function encodeBitStream($version) + { + try { + + unset($this->bstream); + $words = QRspec::maximumWords($this->mode, $version); + + if($this->size > $words) { + + $st1 = new QRinputItem($this->mode, $words, $this->data); + $st2 = new QRinputItem($this->mode, $this->size - $words, array_slice($this->data, $words)); + + $st1->encodeBitStream($version); + $st2->encodeBitStream($version); + + $this->bstream = new QRbitstream(); + $this->bstream->append($st1->bstream); + $this->bstream->append($st2->bstream); + + unset($st1); + unset($st2); + + } else { + + $ret = 0; + + switch($this->mode) { + case QR_MODE_NUM: $ret = $this->encodeModeNum($version); break; + case QR_MODE_AN: $ret = $this->encodeModeAn($version); break; + case QR_MODE_8: $ret = $this->encodeMode8($version); break; + case QR_MODE_KANJI: $ret = $this->encodeModeKanji($version);break; + case QR_MODE_STRUCTURE: $ret = $this->encodeModeStructure(); break; + + default: + break; + } + + if($ret < 0) + return -1; + } + + return $this->bstream->size(); + + } catch (Exception $e) { + return -1; + } + } + }; + + //########################################################################## + + class QRinput { + + public $items; + + private $version; + private $level; + + //---------------------------------------------------------------------- + public function __construct($version = 0, $level = QR_ECLEVEL_L) + { + if ($version < 0 || $version > QRSPEC_VERSION_MAX || $level > QR_ECLEVEL_H) { + throw new Exception('Invalid version no'); + return NULL; + } + + $this->version = $version; + $this->level = $level; + } + + //---------------------------------------------------------------------- + public function getVersion() + { + return $this->version; + } + + //---------------------------------------------------------------------- + public function setVersion($version) + { + if($version < 0 || $version > QRSPEC_VERSION_MAX) { + throw new Exception('Invalid version no'); + return -1; + } + + $this->version = $version; + + return 0; + } + + //---------------------------------------------------------------------- + public function getErrorCorrectionLevel() + { + return $this->level; + } + + //---------------------------------------------------------------------- + public function setErrorCorrectionLevel($level) + { + if($level > QR_ECLEVEL_H) { + throw new Exception('Invalid ECLEVEL'); + return -1; + } + + $this->level = $level; + + return 0; + } + + //---------------------------------------------------------------------- + public function appendEntry(QRinputItem $entry) + { + $this->items[] = $entry; + } + + //---------------------------------------------------------------------- + public function append($mode, $size, $data) + { + try { + $entry = new QRinputItem($mode, $size, $data); + $this->items[] = $entry; + return 0; + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + + public function insertStructuredAppendHeader($size, $index, $parity) + { + if( $size > MAX_STRUCTURED_SYMBOLS ) { + throw new Exception('insertStructuredAppendHeader wrong size'); + } + + if( $index <= 0 || $index > MAX_STRUCTURED_SYMBOLS ) { + throw new Exception('insertStructuredAppendHeader wrong index'); + } + + $buf = array($size, $index, $parity); + + try { + $entry = new QRinputItem(QR_MODE_STRUCTURE, 3, buf); + array_unshift($this->items, $entry); + return 0; + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function calcParity() + { + $parity = 0; + + foreach($this->items as $item) { + if($item->mode != QR_MODE_STRUCTURE) { + for($i=$item->size-1; $i>=0; $i--) { + $parity ^= $item->data[$i]; + } + } + } + + return $parity; + } + + //---------------------------------------------------------------------- + public static function checkModeNum($size, $data) + { + for($i=0; $i<$size; $i++) { + if((ord($data[$i]) < ord('0')) || (ord($data[$i]) > ord('9'))){ + return false; + } + } + + return true; + } + + //---------------------------------------------------------------------- + public static function estimateBitsModeNum($size) + { + $w = (int)$size / 3; + $bits = $w * 10; + + switch($size - $w * 3) { + case 1: + $bits += 4; + break; + case 2: + $bits += 7; + break; + default: + break; + } + + return $bits; + } + + //---------------------------------------------------------------------- + public static $anTable = array( + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1, + -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 + ); + + //---------------------------------------------------------------------- + public static function lookAnTable($c) + { + return (($c > 127)?-1:self::$anTable[$c]); + } + + //---------------------------------------------------------------------- + public static function checkModeAn($size, $data) + { + for($i=0; $i<$size; $i++) { + if (self::lookAnTable(ord($data[$i])) == -1) { + return false; + } + } + + return true; + } + + //---------------------------------------------------------------------- + public static function estimateBitsModeAn($size) + { + $w = (int)($size / 2); + $bits = $w * 11; + + if($size & 1) { + $bits += 6; + } + + return $bits; + } + + //---------------------------------------------------------------------- + public static function estimateBitsMode8($size) + { + return $size * 8; + } + + //---------------------------------------------------------------------- + public function estimateBitsModeKanji($size) + { + return (int)(($size / 2) * 13); + } + + //---------------------------------------------------------------------- + public static function checkModeKanji($size, $data) + { + if($size & 1) + return false; + + for($i=0; $i<$size; $i+=2) { + $val = (ord($data[$i]) << 8) | ord($data[$i+1]); + if( $val < 0x8140 + || ($val > 0x9ffc && $val < 0xe040) + || $val > 0xebbf) { + return false; + } + } + + return true; + } + + /*********************************************************************** + * Validation + **********************************************************************/ + + public static function check($mode, $size, $data) + { + if($size <= 0) + return false; + + switch($mode) { + case QR_MODE_NUM: return self::checkModeNum($size, $data); break; + case QR_MODE_AN: return self::checkModeAn($size, $data); break; + case QR_MODE_KANJI: return self::checkModeKanji($size, $data); break; + case QR_MODE_8: return true; break; + case QR_MODE_STRUCTURE: return true; break; + + default: + break; + } + + return false; + } + + + //---------------------------------------------------------------------- + public function estimateBitStreamSize($version) + { + $bits = 0; + + foreach($this->items as $item) { + $bits += $item->estimateBitStreamSizeOfEntry($version); + } + + return $bits; + } + + //---------------------------------------------------------------------- + public function estimateVersion() + { + $version = 0; + $prev = 0; + do { + $prev = $version; + $bits = $this->estimateBitStreamSize($prev); + $version = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level); + if ($version < 0) { + return -1; + } + } while ($version > $prev); + + return $version; + } + + //---------------------------------------------------------------------- + public static function lengthOfCode($mode, $version, $bits) + { + $payload = $bits - 4 - QRspec::lengthIndicator($mode, $version); + switch($mode) { + case QR_MODE_NUM: + $chunks = (int)($payload / 10); + $remain = $payload - $chunks * 10; + $size = $chunks * 3; + if($remain >= 7) { + $size += 2; + } else if($remain >= 4) { + $size += 1; + } + break; + case QR_MODE_AN: + $chunks = (int)($payload / 11); + $remain = $payload - $chunks * 11; + $size = $chunks * 2; + if($remain >= 6) + $size++; + break; + case QR_MODE_8: + $size = (int)($payload / 8); + break; + case QR_MODE_KANJI: + $size = (int)(($payload / 13) * 2); + break; + case QR_MODE_STRUCTURE: + $size = (int)($payload / 8); + break; + default: + $size = 0; + break; + } + + $maxsize = QRspec::maximumWords($mode, $version); + if($size < 0) $size = 0; + if($size > $maxsize) $size = $maxsize; + + return $size; + } + + //---------------------------------------------------------------------- + public function createBitStream() + { + $total = 0; + + foreach($this->items as $item) { + $bits = $item->encodeBitStream($this->version); + + if($bits < 0) + return -1; + + $total += $bits; + } + + return $total; + } + + //---------------------------------------------------------------------- + public function convertData() + { + $ver = $this->estimateVersion(); + if($ver > $this->getVersion()) { + $this->setVersion($ver); + } + + for(;;) { + $bits = $this->createBitStream(); + + if($bits < 0) + return -1; + + $ver = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level); + if($ver < 0) { + throw new Exception('WRONG VERSION'); + return -1; + } else if($ver > $this->getVersion()) { + $this->setVersion($ver); + } else { + break; + } + } + + return 0; + } + + //---------------------------------------------------------------------- + public function appendPaddingBit(&$bstream) + { + $bits = $bstream->size(); + $maxwords = QRspec::getDataLength($this->version, $this->level); + $maxbits = $maxwords * 8; + + if ($maxbits == $bits) { + return 0; + } + + if ($maxbits - $bits < 5) { + return $bstream->appendNum($maxbits - $bits, 0); + } + + $bits += 4; + $words = (int)(($bits + 7) / 8); + + $padding = new QRbitstream(); + $ret = $padding->appendNum($words * 8 - $bits + 4, 0); + + if($ret < 0) + return $ret; + + $padlen = $maxwords - $words; + + if($padlen > 0) { + + $padbuf = array(); + for($i=0; $i<$padlen; $i++) { + $padbuf[$i] = ($i&1)?0x11:0xec; + } + + $ret = $padding->appendBytes($padlen, $padbuf); + + if($ret < 0) + return $ret; + + } + + $ret = $bstream->append($padding); + + return $ret; + } + + //---------------------------------------------------------------------- + public function mergeBitStream() + { + if($this->convertData() < 0) { + return null; + } + + $bstream = new QRbitstream(); + + foreach($this->items as $item) { + $ret = $bstream->append($item->bstream); + if($ret < 0) { + return null; + } + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function getBitStream() + { + + $bstream = $this->mergeBitStream(); + + if($bstream == null) { + return null; + } + + $ret = $this->appendPaddingBit($bstream); + if($ret < 0) { + return null; + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function getByteStream() + { + $bstream = $this->getBitStream(); + if($bstream == null) { + return null; + } + + return $bstream->toByte(); + } + } + + + + + + +//---- qrbitstream.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Bitstream class + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRbitstream { + + public $data = array(); + + //---------------------------------------------------------------------- + public function size() + { + return count($this->data); + } + + //---------------------------------------------------------------------- + public function allocate($setLength) + { + $this->data = array_fill(0, $setLength, 0); + return 0; + } + + //---------------------------------------------------------------------- + public static function newFromNum($bits, $num) + { + $bstream = new QRbitstream(); + $bstream->allocate($bits); + + $mask = 1 << ($bits - 1); + for($i=0; $i<$bits; $i++) { + if($num & $mask) { + $bstream->data[$i] = 1; + } else { + $bstream->data[$i] = 0; + } + $mask = $mask >> 1; + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public static function newFromBytes($size, $data) + { + $bstream = new QRbitstream(); + $bstream->allocate($size * 8); + $p=0; + + for($i=0; $i<$size; $i++) { + $mask = 0x80; + for($j=0; $j<8; $j++) { + if($data[$i] & $mask) { + $bstream->data[$p] = 1; + } else { + $bstream->data[$p] = 0; + } + $p++; + $mask = $mask >> 1; + } + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function append(QRbitstream $arg) + { + if (is_null($arg)) { + return -1; + } + + if($arg->size() == 0) { + return 0; + } + + if($this->size() == 0) { + $this->data = $arg->data; + return 0; + } + + $this->data = array_values(array_merge($this->data, $arg->data)); + + return 0; + } + + //---------------------------------------------------------------------- + public function appendNum($bits, $num) + { + if ($bits == 0) + return 0; + + $b = QRbitstream::newFromNum($bits, $num); + + if(is_null($b)) + return -1; + + $ret = $this->append($b); + unset($b); + + return $ret; + } + + //---------------------------------------------------------------------- + public function appendBytes($size, $data) + { + if ($size == 0) + return 0; + + $b = QRbitstream::newFromBytes($size, $data); + + if(is_null($b)) + return -1; + + $ret = $this->append($b); + unset($b); + + return $ret; + } + + //---------------------------------------------------------------------- + public function toByte() + { + + $size = $this->size(); + + if($size == 0) { + return array(); + } + + $data = array_fill(0, (int)(($size + 7) / 8), 0); + $bytes = (int)($size / 8); + + $p = 0; + + for($i=0; $i<$bytes; $i++) { + $v = 0; + for($j=0; $j<8; $j++) { + $v = $v << 1; + $v |= $this->data[$p]; + $p++; + } + $data[$i] = $v; + } + + if($size & 7) { + $v = 0; + for($j=0; $j<($size & 7); $j++) { + $v = $v << 1; + $v |= $this->data[$p]; + $p++; + } + $data[$bytes] = $v; + } + + return $data; + } + + } + + + + +//---- qrsplit.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Input splitting classes + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * The following data / specifications are taken from + * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) + * or + * "Automatic identification and data capture techniques -- + * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + class QRsplit { + + public $dataStr = ''; + public $input; + public $modeHint; + + //---------------------------------------------------------------------- + public function __construct($dataStr, $input, $modeHint) + { + $this->dataStr = $dataStr; + $this->input = $input; + $this->modeHint = $modeHint; + } + + //---------------------------------------------------------------------- + public static function isdigitat($str, $pos) + { + if ($pos >= strlen($str)) + return false; + + return ((ord($str[$pos]) >= ord('0'))&&(ord($str[$pos]) <= ord('9'))); + } + + //---------------------------------------------------------------------- + public static function isalnumat($str, $pos) + { + if ($pos >= strlen($str)) + return false; + + return (QRinput::lookAnTable(ord($str[$pos])) >= 0); + } + + //---------------------------------------------------------------------- + public function identifyMode($pos) + { + if ($pos >= strlen($this->dataStr)) + return QR_MODE_NUL; + + $c = $this->dataStr[$pos]; + + if(self::isdigitat($this->dataStr, $pos)) { + return QR_MODE_NUM; + } else if(self::isalnumat($this->dataStr, $pos)) { + return QR_MODE_AN; + } else if($this->modeHint == QR_MODE_KANJI) { + + if ($pos+1 < strlen($this->dataStr)) + { + $d = $this->dataStr[$pos+1]; + $word = (ord($c) << 8) | ord($d); + if(($word >= 0x8140 && $word <= 0x9ffc) || ($word >= 0xe040 && $word <= 0xebbf)) { + return QR_MODE_KANJI; + } + } + } + + return QR_MODE_8; + } + + //---------------------------------------------------------------------- + public function eatNum() + { + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 0; + while(self::isdigitat($this->dataStr, $p)) { + $p++; + } + + $run = $p; + $mode = $this->identifyMode($p); + + if($mode == QR_MODE_8) { + $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln + + QRinput::estimateBitsMode8(1) // + 4 + l8 + - QRinput::estimateBitsMode8($run + 1); // - 4 - l8 + if($dif > 0) { + return $this->eat8(); + } + } + if($mode == QR_MODE_AN) { + $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln + + QRinput::estimateBitsModeAn(1) // + 4 + la + - QRinput::estimateBitsModeAn($run + 1);// - 4 - la + if($dif > 0) { + return $this->eatAn(); + } + } + + $ret = $this->input->append(QR_MODE_NUM, $run, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eatAn() + { + $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion()); + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 0; + + while(self::isalnumat($this->dataStr, $p)) { + if(self::isdigitat($this->dataStr, $p)) { + $q = $p; + while(self::isdigitat($this->dataStr, $q)) { + $q++; + } + + $dif = QRinput::estimateBitsModeAn($p) // + 4 + la + + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln + - QRinput::estimateBitsModeAn($q); // - 4 - la + + if($dif < 0) { + break; + } else { + $p = $q; + } + } else { + $p++; + } + } + + $run = $p; + + if(!self::isalnumat($this->dataStr, $p)) { + $dif = QRinput::estimateBitsModeAn($run) + 4 + $la + + QRinput::estimateBitsMode8(1) // + 4 + l8 + - QRinput::estimateBitsMode8($run + 1); // - 4 - l8 + if($dif > 0) { + return $this->eat8(); + } + } + + $ret = $this->input->append(QR_MODE_AN, $run, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eatKanji() + { + $p = 0; + + while($this->identifyMode($p) == QR_MODE_KANJI) { + $p += 2; + } + + $ret = $this->input->append(QR_MODE_KANJI, $p, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eat8() + { + $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion()); + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 1; + $dataStrLen = strlen($this->dataStr); + + while($p < $dataStrLen) { + + $mode = $this->identifyMode($p); + if($mode == QR_MODE_KANJI) { + break; + } + if($mode == QR_MODE_NUM) { + $q = $p; + while(self::isdigitat($this->dataStr, $q)) { + $q++; + } + $dif = QRinput::estimateBitsMode8($p) // + 4 + l8 + + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln + - QRinput::estimateBitsMode8($q); // - 4 - l8 + if($dif < 0) { + break; + } else { + $p = $q; + } + } else if($mode == QR_MODE_AN) { + $q = $p; + while(self::isalnumat($this->dataStr, $q)) { + $q++; + } + $dif = QRinput::estimateBitsMode8($p) // + 4 + l8 + + QRinput::estimateBitsModeAn($q - $p) + 4 + $la + - QRinput::estimateBitsMode8($q); // - 4 - l8 + if($dif < 0) { + break; + } else { + $p = $q; + } + } else { + $p++; + } + } + + $run = $p; + $ret = $this->input->append(QR_MODE_8, $run, str_split($this->dataStr)); + + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function splitString() + { + while (strlen($this->dataStr) > 0) + { + if($this->dataStr == '') + return 0; + + $mode = $this->identifyMode(0); + + switch ($mode) { + case QR_MODE_NUM: $length = $this->eatNum(); break; + case QR_MODE_AN: $length = $this->eatAn(); break; + case QR_MODE_KANJI: + if ($hint == QR_MODE_KANJI) + $length = $this->eatKanji(); + else $length = $this->eat8(); + break; + default: $length = $this->eat8(); break; + + } + + if($length == 0) return 0; + if($length < 0) return -1; + + $this->dataStr = substr($this->dataStr, $length); + } + } + + //---------------------------------------------------------------------- + public function toUpper() + { + $stringLen = strlen($this->dataStr); + $p = 0; + + while ($p<$stringLen) { + $mode = self::identifyMode(substr($this->dataStr, $p), $this->modeHint); + if($mode == QR_MODE_KANJI) { + $p += 2; + } else { + if (ord($this->dataStr[$p]) >= ord('a') && ord($this->dataStr[$p]) <= ord('z')) { + $this->dataStr[$p] = chr(ord($this->dataStr[$p]) - 32); + } + $p++; + } + } + + return $this->dataStr; + } + + //---------------------------------------------------------------------- + public static function splitStringToQRinput($string, QRinput $input, $modeHint, $casesensitive = true) + { + if(is_null($string) || $string == '\0' || $string == '') { + throw new Exception('empty string!!!'); + } + + $split = new QRsplit($string, $input, $modeHint); + + if(!$casesensitive) + $split->toUpper(); + + return $split->splitString(); + } + } + + + +//---- qrrscode.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Reed-Solomon error correction support + * + * Copyright (C) 2002, 2003, 2004, 2006 Phil Karn, KA9Q + * (libfec is released under the GNU Lesser General Public License.) + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRrsItem { + + public $mm; // Bits per symbol + public $nn; // Symbols per block (= (1<= $this->nn) { + $x -= $this->nn; + $x = ($x >> $this->mm) + ($x & $this->nn); + } + + return $x; + } + + //---------------------------------------------------------------------- + public static function init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) + { + // Common code for intializing a Reed-Solomon control block (char or int symbols) + // Copyright 2004 Phil Karn, KA9Q + // May be used under the terms of the GNU Lesser General Public License (LGPL) + + $rs = null; + + // Check parameter ranges + if($symsize < 0 || $symsize > 8) return $rs; + if($fcr < 0 || $fcr >= (1<<$symsize)) return $rs; + if($prim <= 0 || $prim >= (1<<$symsize)) return $rs; + if($nroots < 0 || $nroots >= (1<<$symsize)) return $rs; // Can't have more roots than symbol values! + if($pad < 0 || $pad >= ((1<<$symsize) -1 - $nroots)) return $rs; // Too much padding + + $rs = new QRrsItem(); + $rs->mm = $symsize; + $rs->nn = (1<<$symsize)-1; + $rs->pad = $pad; + + $rs->alpha_to = array_fill(0, $rs->nn+1, 0); + $rs->index_of = array_fill(0, $rs->nn+1, 0); + + // PHP style macro replacement ;) + $NN =& $rs->nn; + $A0 =& $NN; + + // Generate Galois field lookup tables + $rs->index_of[0] = $A0; // log(zero) = -inf + $rs->alpha_to[$A0] = 0; // alpha**-inf = 0 + $sr = 1; + + for($i=0; $i<$rs->nn; $i++) { + $rs->index_of[$sr] = $i; + $rs->alpha_to[$i] = $sr; + $sr <<= 1; + if($sr & (1<<$symsize)) { + $sr ^= $gfpoly; + } + $sr &= $rs->nn; + } + + if($sr != 1){ + // field generator polynomial is not primitive! + $rs = NULL; + return $rs; + } + + /* Form RS code generator polynomial from its roots */ + $rs->genpoly = array_fill(0, $nroots+1, 0); + + $rs->fcr = $fcr; + $rs->prim = $prim; + $rs->nroots = $nroots; + $rs->gfpoly = $gfpoly; + + /* Find prim-th root of 1, used in decoding */ + for($iprim=1;($iprim % $prim) != 0;$iprim += $rs->nn) + ; // intentional empty-body loop! + + $rs->iprim = (int)($iprim / $prim); + $rs->genpoly[0] = 1; + + for ($i = 0,$root=$fcr*$prim; $i < $nroots; $i++, $root += $prim) { + $rs->genpoly[$i+1] = 1; + + // Multiply rs->genpoly[] by @**(root + x) + for ($j = $i; $j > 0; $j--) { + if ($rs->genpoly[$j] != 0) { + $rs->genpoly[$j] = $rs->genpoly[$j-1] ^ $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[$j]] + $root)]; + } else { + $rs->genpoly[$j] = $rs->genpoly[$j-1]; + } + } + // rs->genpoly[0] can never be zero + $rs->genpoly[0] = $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[0]] + $root)]; + } + + // convert rs->genpoly[] to index form for quicker encoding + for ($i = 0; $i <= $nroots; $i++) + $rs->genpoly[$i] = $rs->index_of[$rs->genpoly[$i]]; + + return $rs; + } + + //---------------------------------------------------------------------- + public function encode_rs_char($data, &$parity) + { + $MM =& $this->mm; + $NN =& $this->nn; + $ALPHA_TO =& $this->alpha_to; + $INDEX_OF =& $this->index_of; + $GENPOLY =& $this->genpoly; + $NROOTS =& $this->nroots; + $FCR =& $this->fcr; + $PRIM =& $this->prim; + $IPRIM =& $this->iprim; + $PAD =& $this->pad; + $A0 =& $NN; + + $parity = array_fill(0, $NROOTS, 0); + + for($i=0; $i< ($NN-$NROOTS-$PAD); $i++) { + + $feedback = $INDEX_OF[$data[$i] ^ $parity[0]]; + if($feedback != $A0) { + // feedback term is non-zero + + // This line is unnecessary when GENPOLY[NROOTS] is unity, as it must + // always be for the polynomials constructed by init_rs() + $feedback = $this->modnn($NN - $GENPOLY[$NROOTS] + $feedback); + + for($j=1;$j<$NROOTS;$j++) { + $parity[$j] ^= $ALPHA_TO[$this->modnn($feedback + $GENPOLY[$NROOTS-$j])]; + } + } + + // Shift + array_shift($parity); + if($feedback != $A0) { + array_push($parity, $ALPHA_TO[$this->modnn($feedback + $GENPOLY[0])]); + } else { + array_push($parity, 0); + } + } + } + } + + //########################################################################## + + class QRrs { + + public static $items = array(); + + //---------------------------------------------------------------------- + public static function init_rs($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) + { + foreach(self::$items as $rs) { + if($rs->pad != $pad) continue; + if($rs->nroots != $nroots) continue; + if($rs->mm != $symsize) continue; + if($rs->gfpoly != $gfpoly) continue; + if($rs->fcr != $fcr) continue; + if($rs->prim != $prim) continue; + + return $rs; + } + + $rs = QRrsItem::init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad); + array_unshift(self::$items, $rs); + + return $rs; + } + } + + + +//---- qrmask.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Masking + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('N1', 3); + define('N2', 3); + define('N3', 40); + define('N4', 10); + + class QRmask { + + public $runLength = array(); + + //---------------------------------------------------------------------- + public function __construct() + { + $this->runLength = array_fill(0, QRSPEC_WIDTH_MAX + 1, 0); + } + + //---------------------------------------------------------------------- + public function writeFormatInformation($width, &$frame, $mask, $level) + { + $blacks = 0; + $format = QRspec::getFormatInfo($mask, $level); + + for($i=0; $i<8; $i++) { + if($format & 1) { + $blacks += 2; + $v = 0x85; + } else { + $v = 0x84; + } + + $frame[8][$width - 1 - $i] = chr($v); + if($i < 6) { + $frame[$i][8] = chr($v); + } else { + $frame[$i + 1][8] = chr($v); + } + $format = $format >> 1; + } + + for($i=0; $i<7; $i++) { + if($format & 1) { + $blacks += 2; + $v = 0x85; + } else { + $v = 0x84; + } + + $frame[$width - 7 + $i][8] = chr($v); + if($i == 0) { + $frame[8][7] = chr($v); + } else { + $frame[8][6 - $i] = chr($v); + } + + $format = $format >> 1; + } + + return $blacks; + } + + //---------------------------------------------------------------------- + public function mask0($x, $y) { return ($x+$y)&1; } + public function mask1($x, $y) { return ($y&1); } + public function mask2($x, $y) { return ($x%3); } + public function mask3($x, $y) { return ($x+$y)%3; } + public function mask4($x, $y) { return (((int)($y/2))+((int)($x/3)))&1; } + public function mask5($x, $y) { return (($x*$y)&1)+($x*$y)%3; } + public function mask6($x, $y) { return ((($x*$y)&1)+($x*$y)%3)&1; } + public function mask7($x, $y) { return ((($x*$y)%3)+(($x+$y)&1))&1; } + + //---------------------------------------------------------------------- + private function generateMaskNo($maskNo, $width, $frame) + { + $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); + + for($y=0; $y<$width; $y++) { + for($x=0; $x<$width; $x++) { + if(ord($frame[$y][$x]) & 0x80) { + $bitMask[$y][$x] = 0; + } else { + $maskFunc = call_user_func(array($this, 'mask'.$maskNo), $x, $y); + $bitMask[$y][$x] = ($maskFunc == 0)?1:0; + } + + } + } + + return $bitMask; + } + + //---------------------------------------------------------------------- + public static function serial($bitFrame) + { + $codeArr = array(); + + foreach ($bitFrame as $line) + $codeArr[] = join('', $line); + + return gzcompress(join("\n", $codeArr), 9); + } + + //---------------------------------------------------------------------- + public static function unserial($code) + { + $codeArr = array(); + + $codeLines = explode("\n", gzuncompress($code)); + foreach ($codeLines as $line) + $codeArr[] = str_split($line); + + return $codeArr; + } + + //---------------------------------------------------------------------- + public function makeMaskNo($maskNo, $width, $s, &$d, $maskGenOnly = false) + { + $b = 0; + $bitMask = array(); + + $fileName = QR_CACHE_DIR.'mask_'.$maskNo.DIRECTORY_SEPARATOR.'mask_'.$width.'_'.$maskNo.'.dat'; + + if (QR_CACHEABLE) { + if (file_exists($fileName)) { + $bitMask = self::unserial(file_get_contents($fileName)); + } else { + $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); + if (!file_exists(QR_CACHE_DIR.'mask_'.$maskNo)) + mkdir(QR_CACHE_DIR.'mask_'.$maskNo); + file_put_contents($fileName, self::serial($bitMask)); + } + } else { + $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); + } + + if ($maskGenOnly) + return; + + $d = $s; + + for($y=0; $y<$width; $y++) { + for($x=0; $x<$width; $x++) { + if($bitMask[$y][$x] == 1) { + $d[$y][$x] = chr(ord($s[$y][$x]) ^ (int)$bitMask[$y][$x]); + } + $b += (int)(ord($d[$y][$x]) & 1); + } + } + + return $b; + } + + //---------------------------------------------------------------------- + public function makeMask($width, $frame, $maskNo, $level) + { + $masked = array_fill(0, $width, str_repeat("\0", $width)); + $this->makeMaskNo($maskNo, $width, $frame, $masked); + $this->writeFormatInformation($width, $masked, $maskNo, $level); + + return $masked; + } + + //---------------------------------------------------------------------- + public function calcN1N3($length) + { + $demerit = 0; + + for($i=0; $i<$length; $i++) { + + if($this->runLength[$i] >= 5) { + $demerit += (N1 + ($this->runLength[$i] - 5)); + } + if($i & 1) { + if(($i >= 3) && ($i < ($length-2)) && ($this->runLength[$i] % 3 == 0)) { + $fact = (int)($this->runLength[$i] / 3); + if(($this->runLength[$i-2] == $fact) && + ($this->runLength[$i-1] == $fact) && + ($this->runLength[$i+1] == $fact) && + ($this->runLength[$i+2] == $fact)) { + if(($this->runLength[$i-3] < 0) || ($this->runLength[$i-3] >= (4 * $fact))) { + $demerit += N3; + } else if((($i+3) >= $length) || ($this->runLength[$i+3] >= (4 * $fact))) { + $demerit += N3; + } + } + } + } + } + return $demerit; + } + + //---------------------------------------------------------------------- + public function evaluateSymbol($width, $frame) + { + $head = 0; + $demerit = 0; + + for($y=0; $y<$width; $y++) { + $head = 0; + $this->runLength[0] = 1; + + $frameY = $frame[$y]; + + if ($y>0) + $frameYM = $frame[$y-1]; + + for($x=0; $x<$width; $x++) { + if(($x > 0) && ($y > 0)) { + $b22 = ord($frameY[$x]) & ord($frameY[$x-1]) & ord($frameYM[$x]) & ord($frameYM[$x-1]); + $w22 = ord($frameY[$x]) | ord($frameY[$x-1]) | ord($frameYM[$x]) | ord($frameYM[$x-1]); + + if(($b22 | ($w22 ^ 1))&1) { + $demerit += N2; + } + } + if(($x == 0) && (ord($frameY[$x]) & 1)) { + $this->runLength[0] = -1; + $head = 1; + $this->runLength[$head] = 1; + } else if($x > 0) { + if((ord($frameY[$x]) ^ ord($frameY[$x-1])) & 1) { + $head++; + $this->runLength[$head] = 1; + } else { + $this->runLength[$head]++; + } + } + } + + $demerit += $this->calcN1N3($head+1); + } + + for($x=0; $x<$width; $x++) { + $head = 0; + $this->runLength[0] = 1; + + for($y=0; $y<$width; $y++) { + if($y == 0 && (ord($frame[$y][$x]) & 1)) { + $this->runLength[0] = -1; + $head = 1; + $this->runLength[$head] = 1; + } else if($y > 0) { + if((ord($frame[$y][$x]) ^ ord($frame[$y-1][$x])) & 1) { + $head++; + $this->runLength[$head] = 1; + } else { + $this->runLength[$head]++; + } + } + } + + $demerit += $this->calcN1N3($head+1); + } + + return $demerit; + } + + + //---------------------------------------------------------------------- + public function mask($width, $frame, $level) + { + $minDemerit = PHP_INT_MAX; + $bestMaskNum = 0; + $bestMask = array(); + + $checked_masks = array(0,1,2,3,4,5,6,7); + + if (QR_FIND_FROM_RANDOM !== false) { + + $howManuOut = 8-(QR_FIND_FROM_RANDOM % 9); + for ($i = 0; $i < $howManuOut; $i++) { + $remPos = rand (0, count($checked_masks)-1); + unset($checked_masks[$remPos]); + $checked_masks = array_values($checked_masks); + } + + } + + $bestMask = $frame; + + foreach($checked_masks as $i) { + $mask = array_fill(0, $width, str_repeat("\0", $width)); + + $demerit = 0; + $blacks = 0; + $blacks = $this->makeMaskNo($i, $width, $frame, $mask); + $blacks += $this->writeFormatInformation($width, $mask, $i, $level); + $blacks = (int)(100 * $blacks / ($width * $width)); + $demerit = (int)((int)(abs($blacks - 50) / 5) * N4); + $demerit += $this->evaluateSymbol($width, $mask); + + if($demerit < $minDemerit) { + $minDemerit = $demerit; + $bestMask = $mask; + $bestMaskNum = $i; + } + } + + return $bestMask; + } + + //---------------------------------------------------------------------- + } + + + + +//---- qrencode.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Main encoder classes. + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRrsblock { + public $dataLength; + public $data = array(); + public $eccLength; + public $ecc = array(); + + public function __construct($dl, $data, $el, &$ecc, QRrsItem $rs) + { + $rs->encode_rs_char($data, $ecc); + + $this->dataLength = $dl; + $this->data = $data; + $this->eccLength = $el; + $this->ecc = $ecc; + } + }; + + //########################################################################## + + class QRrawcode { + public $version; + public $datacode = array(); + public $ecccode = array(); + public $blocks; + public $rsblocks = array(); //of RSblock + public $count; + public $dataLength; + public $eccLength; + public $b1; + + //---------------------------------------------------------------------- + public function __construct(QRinput $input) + { + $spec = array(0,0,0,0,0); + + $this->datacode = $input->getByteStream(); + if(is_null($this->datacode)) { + throw new Exception('null imput string'); + } + + QRspec::getEccSpec($input->getVersion(), $input->getErrorCorrectionLevel(), $spec); + + $this->version = $input->getVersion(); + $this->b1 = QRspec::rsBlockNum1($spec); + $this->dataLength = QRspec::rsDataLength($spec); + $this->eccLength = QRspec::rsEccLength($spec); + $this->ecccode = array_fill(0, $this->eccLength, 0); + $this->blocks = QRspec::rsBlockNum($spec); + + $ret = $this->init($spec); + if($ret < 0) { + throw new Exception('block alloc error'); + return null; + } + + $this->count = 0; + } + + //---------------------------------------------------------------------- + public function init(array $spec) + { + $dl = QRspec::rsDataCodes1($spec); + $el = QRspec::rsEccCodes1($spec); + $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + + + $blockNo = 0; + $dataPos = 0; + $eccPos = 0; + for($i=0; $iecccode,$eccPos); + $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); + $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); + + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + + if(QRspec::rsBlockNum2($spec) == 0) + return 0; + + $dl = QRspec::rsDataCodes2($spec); + $el = QRspec::rsEccCodes2($spec); + $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + + if($rs == NULL) return -1; + + for($i=0; $iecccode,$eccPos); + $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); + $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); + + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + + return 0; + } + + //---------------------------------------------------------------------- + public function getCode() + { + $ret; + + if($this->count < $this->dataLength) { + $row = $this->count % $this->blocks; + $col = $this->count / $this->blocks; + if($col >= $this->rsblocks[0]->dataLength) { + $row += $this->b1; + } + $ret = $this->rsblocks[$row]->data[$col]; + } else if($this->count < $this->dataLength + $this->eccLength) { + $row = ($this->count - $this->dataLength) % $this->blocks; + $col = ($this->count - $this->dataLength) / $this->blocks; + $ret = $this->rsblocks[$row]->ecc[$col]; + } else { + return 0; + } + $this->count++; + + return $ret; + } + } + + //########################################################################## + + class QRcode { + + public $version; + public $width; + public $data; + + //---------------------------------------------------------------------- + public function encodeMask(QRinput $input, $mask) + { + if($input->getVersion() < 0 || $input->getVersion() > QRSPEC_VERSION_MAX) { + throw new Exception('wrong version'); + } + if($input->getErrorCorrectionLevel() > QR_ECLEVEL_H) { + throw new Exception('wrong level'); + } + + $raw = new QRrawcode($input); + + QRtools::markTime('after_raw'); + + $version = $raw->version; + $width = QRspec::getWidth($version); + $frame = QRspec::newFrame($version); + + $filler = new FrameFiller($width, $frame); + if(is_null($filler)) { + return NULL; + } + + // inteleaved data and ecc codes + for($i=0; $i<$raw->dataLength + $raw->eccLength; $i++) { + $code = $raw->getCode(); + $bit = 0x80; + for($j=0; $j<8; $j++) { + $addr = $filler->next(); + $filler->setFrameAt($addr, 0x02 | (($bit & $code) != 0)); + $bit = $bit >> 1; + } + } + + QRtools::markTime('after_filler'); + + unset($raw); + + // remainder bits + $j = QRspec::getRemainder($version); + for($i=0; $i<$j; $i++) { + $addr = $filler->next(); + $filler->setFrameAt($addr, 0x02); + } + + $frame = $filler->frame; + unset($filler); + + + // masking + $maskObj = new QRmask(); + if($mask < 0) { + + if (QR_FIND_BEST_MASK) { + $masked = $maskObj->mask($width, $frame, $input->getErrorCorrectionLevel()); + } else { + $masked = $maskObj->makeMask($width, $frame, (intval(QR_DEFAULT_MASK) % 8), $input->getErrorCorrectionLevel()); + } + } else { + $masked = $maskObj->makeMask($width, $frame, $mask, $input->getErrorCorrectionLevel()); + } + + if($masked == NULL) { + return NULL; + } + + QRtools::markTime('after_mask'); + + $this->version = $version; + $this->width = $width; + $this->data = $masked; + + return $this; + } + + //---------------------------------------------------------------------- + public function encodeInput(QRinput $input) + { + return $this->encodeMask($input, -1); + } + + //---------------------------------------------------------------------- + public function encodeString8bit($string, $version, $level) + { + if(string == NULL) { + throw new Exception('empty string!'); + return NULL; + } + + $input = new QRinput($version, $level); + if($input == NULL) return NULL; + + $ret = $input->append($input, QR_MODE_8, strlen($string), str_split($string)); + if($ret < 0) { + unset($input); + return NULL; + } + return $this->encodeInput($input); + } + + //---------------------------------------------------------------------- + public function encodeString($string, $version, $level, $hint, $casesensitive) + { + + if($hint != QR_MODE_8 && $hint != QR_MODE_KANJI) { + throw new Exception('bad hint'); + return NULL; + } + + $input = new QRinput($version, $level); + if($input == NULL) return NULL; + + $ret = QRsplit::splitStringToQRinput($string, $input, $hint, $casesensitive); + if($ret < 0) { + return NULL; + } + + return $this->encodeInput($input); + } + + //---------------------------------------------------------------------- + public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encodePNG($text, $outfile, $saveandprint=false); + } + + //---------------------------------------------------------------------- + public static function text($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encode($text, $outfile); + } + + //---------------------------------------------------------------------- + public static function raw($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encodeRAW($text, $outfile); + } + } + + //########################################################################## + + class FrameFiller { + + public $width; + public $frame; + public $x; + public $y; + public $dir; + public $bit; + + //---------------------------------------------------------------------- + public function __construct($width, &$frame) + { + $this->width = $width; + $this->frame = $frame; + $this->x = $width - 1; + $this->y = $width - 1; + $this->dir = -1; + $this->bit = -1; + } + + //---------------------------------------------------------------------- + public function setFrameAt($at, $val) + { + $this->frame[$at['y']][$at['x']] = chr($val); + } + + //---------------------------------------------------------------------- + public function getFrameAt($at) + { + return ord($this->frame[$at['y']][$at['x']]); + } + + //---------------------------------------------------------------------- + public function next() + { + do { + + if($this->bit == -1) { + $this->bit = 0; + return array('x'=>$this->x, 'y'=>$this->y); + } + + $x = $this->x; + $y = $this->y; + $w = $this->width; + + if($this->bit == 0) { + $x--; + $this->bit++; + } else { + $x++; + $y += $this->dir; + $this->bit--; + } + + if($this->dir < 0) { + if($y < 0) { + $y = 0; + $x -= 2; + $this->dir = 1; + if($x == 6) { + $x--; + $y = 9; + } + } + } else { + if($y == $w) { + $y = $w - 1; + $x -= 2; + $this->dir = -1; + if($x == 6) { + $x--; + $y -= 8; + } + } + } + if($x < 0 || $y < 0) return null; + + $this->x = $x; + $this->y = $y; + + } while(ord($this->frame[$y][$x]) & 0x80); + + return array('x'=>$x, 'y'=>$y); + } + + } ; + + //########################################################################## + + class QRencode { + + public $casesensitive = true; + public $eightbit = false; + + public $version = 0; + public $size = 3; + public $margin = 4; + + public $structured = 0; // not supported yet + + public $level = QR_ECLEVEL_L; + public $hint = QR_MODE_8; + + //---------------------------------------------------------------------- + public static function factory($level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = new QRencode(); + $enc->size = $size; + $enc->margin = $margin; + + switch ($level.'') { + case '0': + case '1': + case '2': + case '3': + $enc->level = $level; + break; + case 'l': + case 'L': + $enc->level = QR_ECLEVEL_L; + break; + case 'm': + case 'M': + $enc->level = QR_ECLEVEL_M; + break; + case 'q': + case 'Q': + $enc->level = QR_ECLEVEL_Q; + break; + case 'h': + case 'H': + $enc->level = QR_ECLEVEL_H; + break; + } + + return $enc; + } + + //---------------------------------------------------------------------- + public function encodeRAW($intext, $outfile = false) + { + $code = new QRcode(); + + if($this->eightbit) { + $code->encodeString8bit($intext, $this->version, $this->level); + } else { + $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); + } + + return $code->data; + } + + //---------------------------------------------------------------------- + public function encode($intext, $outfile = false) + { + $code = new QRcode(); + + if($this->eightbit) { + $code->encodeString8bit($intext, $this->version, $this->level); + } else { + $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); + } + + QRtools::markTime('after_encode'); + + if ($outfile!== false) { + file_put_contents($outfile, join("\n", QRtools::binarize($code->data))); + } else { + return QRtools::binarize($code->data); + } + } + + //---------------------------------------------------------------------- + public function encodePNG($intext, $outfile = false,$saveandprint=false) + { + try { + + ob_start(); + $tab = $this->encode($intext); + $err = ob_get_contents(); + ob_end_clean(); + + if ($err != '') + QRtools::log($outfile, $err); + + $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin)); + + QRimage::png($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint); + + } catch (Exception $e) { + + QRtools::log($outfile, $e->getMessage()); + + } + } + } + + diff --git a/addons/unishop/library/phpqrcode/qrbitstream.php b/addons/unishop/library/phpqrcode/qrbitstream.php new file mode 100644 index 0000000..c8d1166 --- /dev/null +++ b/addons/unishop/library/phpqrcode/qrbitstream.php @@ -0,0 +1,180 @@ + + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRbitstream { + + public $data = array(); + + //---------------------------------------------------------------------- + public function size() + { + return count($this->data); + } + + //---------------------------------------------------------------------- + public function allocate($setLength) + { + $this->data = array_fill(0, $setLength, 0); + return 0; + } + + //---------------------------------------------------------------------- + public static function newFromNum($bits, $num) + { + $bstream = new QRbitstream(); + $bstream->allocate($bits); + + $mask = 1 << ($bits - 1); + for($i=0; $i<$bits; $i++) { + if($num & $mask) { + $bstream->data[$i] = 1; + } else { + $bstream->data[$i] = 0; + } + $mask = $mask >> 1; + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public static function newFromBytes($size, $data) + { + $bstream = new QRbitstream(); + $bstream->allocate($size * 8); + $p=0; + + for($i=0; $i<$size; $i++) { + $mask = 0x80; + for($j=0; $j<8; $j++) { + if($data[$i] & $mask) { + $bstream->data[$p] = 1; + } else { + $bstream->data[$p] = 0; + } + $p++; + $mask = $mask >> 1; + } + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function append(QRbitstream $arg) + { + if (is_null($arg)) { + return -1; + } + + if($arg->size() == 0) { + return 0; + } + + if($this->size() == 0) { + $this->data = $arg->data; + return 0; + } + + $this->data = array_values(array_merge($this->data, $arg->data)); + + return 0; + } + + //---------------------------------------------------------------------- + public function appendNum($bits, $num) + { + if ($bits == 0) + return 0; + + $b = QRbitstream::newFromNum($bits, $num); + + if(is_null($b)) + return -1; + + $ret = $this->append($b); + unset($b); + + return $ret; + } + + //---------------------------------------------------------------------- + public function appendBytes($size, $data) + { + if ($size == 0) + return 0; + + $b = QRbitstream::newFromBytes($size, $data); + + if(is_null($b)) + return -1; + + $ret = $this->append($b); + unset($b); + + return $ret; + } + + //---------------------------------------------------------------------- + public function toByte() + { + + $size = $this->size(); + + if($size == 0) { + return array(); + } + + $data = array_fill(0, (int)(($size + 7) / 8), 0); + $bytes = (int)($size / 8); + + $p = 0; + + for($i=0; $i<$bytes; $i++) { + $v = 0; + for($j=0; $j<8; $j++) { + $v = $v << 1; + $v |= $this->data[$p]; + $p++; + } + $data[$i] = $v; + } + + if($size & 7) { + $v = 0; + for($j=0; $j<($size & 7); $j++) { + $v = $v << 1; + $v |= $this->data[$p]; + $p++; + } + $data[$bytes] = $v; + } + + return $data; + } + + } diff --git a/addons/unishop/library/phpqrcode/qrconfig.php b/addons/unishop/library/phpqrcode/qrconfig.php new file mode 100644 index 0000000..62e7f97 --- /dev/null +++ b/addons/unishop/library/phpqrcode/qrconfig.php @@ -0,0 +1,17 @@ + + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + // Encoding modes + + define('QR_MODE_NUL', -1); + define('QR_MODE_NUM', 0); + define('QR_MODE_AN', 1); + define('QR_MODE_8', 2); + define('QR_MODE_KANJI', 3); + define('QR_MODE_STRUCTURE', 4); + + // Levels of error correction. + + define('QR_ECLEVEL_L', 0); + define('QR_ECLEVEL_M', 1); + define('QR_ECLEVEL_Q', 2); + define('QR_ECLEVEL_H', 3); + + // Supported output formats + + define('QR_FORMAT_TEXT', 0); + define('QR_FORMAT_PNG', 1); + + class qrstr { + public static function set(&$srctab, $x, $y, $repl, $replLen = false) { + $srctab[$y] = substr_replace($srctab[$y], ($replLen !== false)?substr($repl,0,$replLen):$repl, $x, ($replLen !== false)?$replLen:strlen($repl)); + } + } \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/qrencode.php b/addons/unishop/library/phpqrcode/qrencode.php new file mode 100644 index 0000000..fc909fa --- /dev/null +++ b/addons/unishop/library/phpqrcode/qrencode.php @@ -0,0 +1,502 @@ + + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRrsblock { + public $dataLength; + public $data = array(); + public $eccLength; + public $ecc = array(); + + public function __construct($dl, $data, $el, &$ecc, QRrsItem $rs) + { + $rs->encode_rs_char($data, $ecc); + + $this->dataLength = $dl; + $this->data = $data; + $this->eccLength = $el; + $this->ecc = $ecc; + } + }; + + //########################################################################## + + class QRrawcode { + public $version; + public $datacode = array(); + public $ecccode = array(); + public $blocks; + public $rsblocks = array(); //of RSblock + public $count; + public $dataLength; + public $eccLength; + public $b1; + + //---------------------------------------------------------------------- + public function __construct(QRinput $input) + { + $spec = array(0,0,0,0,0); + + $this->datacode = $input->getByteStream(); + if(is_null($this->datacode)) { + throw new Exception('null imput string'); + } + + QRspec::getEccSpec($input->getVersion(), $input->getErrorCorrectionLevel(), $spec); + + $this->version = $input->getVersion(); + $this->b1 = QRspec::rsBlockNum1($spec); + $this->dataLength = QRspec::rsDataLength($spec); + $this->eccLength = QRspec::rsEccLength($spec); + $this->ecccode = array_fill(0, $this->eccLength, 0); + $this->blocks = QRspec::rsBlockNum($spec); + + $ret = $this->init($spec); + if($ret < 0) { + throw new Exception('block alloc error'); + return null; + } + + $this->count = 0; + } + + //---------------------------------------------------------------------- + public function init(array $spec) + { + $dl = QRspec::rsDataCodes1($spec); + $el = QRspec::rsEccCodes1($spec); + $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + + + $blockNo = 0; + $dataPos = 0; + $eccPos = 0; + for($i=0; $iecccode,$eccPos); + $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); + $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); + + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + + if(QRspec::rsBlockNum2($spec) == 0) + return 0; + + $dl = QRspec::rsDataCodes2($spec); + $el = QRspec::rsEccCodes2($spec); + $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + + if($rs == NULL) return -1; + + for($i=0; $iecccode,$eccPos); + $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); + $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); + + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + + return 0; + } + + //---------------------------------------------------------------------- + public function getCode() + { + $ret; + + if($this->count < $this->dataLength) { + $row = $this->count % $this->blocks; + $col = $this->count / $this->blocks; + if($col >= $this->rsblocks[0]->dataLength) { + $row += $this->b1; + } + $ret = $this->rsblocks[$row]->data[$col]; + } else if($this->count < $this->dataLength + $this->eccLength) { + $row = ($this->count - $this->dataLength) % $this->blocks; + $col = ($this->count - $this->dataLength) / $this->blocks; + $ret = $this->rsblocks[$row]->ecc[$col]; + } else { + return 0; + } + $this->count++; + + return $ret; + } + } + + //########################################################################## + + class QRcode { + + public $version; + public $width; + public $data; + + //---------------------------------------------------------------------- + public function encodeMask(QRinput $input, $mask) + { + if($input->getVersion() < 0 || $input->getVersion() > QRSPEC_VERSION_MAX) { + throw new Exception('wrong version'); + } + if($input->getErrorCorrectionLevel() > QR_ECLEVEL_H) { + throw new Exception('wrong level'); + } + + $raw = new QRrawcode($input); + + QRtools::markTime('after_raw'); + + $version = $raw->version; + $width = QRspec::getWidth($version); + $frame = QRspec::newFrame($version); + + $filler = new FrameFiller($width, $frame); + if(is_null($filler)) { + return NULL; + } + + // inteleaved data and ecc codes + for($i=0; $i<$raw->dataLength + $raw->eccLength; $i++) { + $code = $raw->getCode(); + $bit = 0x80; + for($j=0; $j<8; $j++) { + $addr = $filler->next(); + $filler->setFrameAt($addr, 0x02 | (($bit & $code) != 0)); + $bit = $bit >> 1; + } + } + + QRtools::markTime('after_filler'); + + unset($raw); + + // remainder bits + $j = QRspec::getRemainder($version); + for($i=0; $i<$j; $i++) { + $addr = $filler->next(); + $filler->setFrameAt($addr, 0x02); + } + + $frame = $filler->frame; + unset($filler); + + + // masking + $maskObj = new QRmask(); + if($mask < 0) { + + if (QR_FIND_BEST_MASK) { + $masked = $maskObj->mask($width, $frame, $input->getErrorCorrectionLevel()); + } else { + $masked = $maskObj->makeMask($width, $frame, (intval(QR_DEFAULT_MASK) % 8), $input->getErrorCorrectionLevel()); + } + } else { + $masked = $maskObj->makeMask($width, $frame, $mask, $input->getErrorCorrectionLevel()); + } + + if($masked == NULL) { + return NULL; + } + + QRtools::markTime('after_mask'); + + $this->version = $version; + $this->width = $width; + $this->data = $masked; + + return $this; + } + + //---------------------------------------------------------------------- + public function encodeInput(QRinput $input) + { + return $this->encodeMask($input, -1); + } + + //---------------------------------------------------------------------- + public function encodeString8bit($string, $version, $level) + { + if(string == NULL) { + throw new Exception('empty string!'); + return NULL; + } + + $input = new QRinput($version, $level); + if($input == NULL) return NULL; + + $ret = $input->append($input, QR_MODE_8, strlen($string), str_split($string)); + if($ret < 0) { + unset($input); + return NULL; + } + return $this->encodeInput($input); + } + + //---------------------------------------------------------------------- + public function encodeString($string, $version, $level, $hint, $casesensitive) + { + + if($hint != QR_MODE_8 && $hint != QR_MODE_KANJI) { + throw new Exception('bad hint'); + return NULL; + } + + $input = new QRinput($version, $level); + if($input == NULL) return NULL; + + $ret = QRsplit::splitStringToQRinput($string, $input, $hint, $casesensitive); + if($ret < 0) { + return NULL; + } + + return $this->encodeInput($input); + } + + //---------------------------------------------------------------------- + public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encodePNG($text, $outfile, $saveandprint=false); + } + + //---------------------------------------------------------------------- + public static function text($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encode($text, $outfile); + } + + //---------------------------------------------------------------------- + public static function raw($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encodeRAW($text, $outfile); + } + } + + //########################################################################## + + class FrameFiller { + + public $width; + public $frame; + public $x; + public $y; + public $dir; + public $bit; + + //---------------------------------------------------------------------- + public function __construct($width, &$frame) + { + $this->width = $width; + $this->frame = $frame; + $this->x = $width - 1; + $this->y = $width - 1; + $this->dir = -1; + $this->bit = -1; + } + + //---------------------------------------------------------------------- + public function setFrameAt($at, $val) + { + $this->frame[$at['y']][$at['x']] = chr($val); + } + + //---------------------------------------------------------------------- + public function getFrameAt($at) + { + return ord($this->frame[$at['y']][$at['x']]); + } + + //---------------------------------------------------------------------- + public function next() + { + do { + + if($this->bit == -1) { + $this->bit = 0; + return array('x'=>$this->x, 'y'=>$this->y); + } + + $x = $this->x; + $y = $this->y; + $w = $this->width; + + if($this->bit == 0) { + $x--; + $this->bit++; + } else { + $x++; + $y += $this->dir; + $this->bit--; + } + + if($this->dir < 0) { + if($y < 0) { + $y = 0; + $x -= 2; + $this->dir = 1; + if($x == 6) { + $x--; + $y = 9; + } + } + } else { + if($y == $w) { + $y = $w - 1; + $x -= 2; + $this->dir = -1; + if($x == 6) { + $x--; + $y -= 8; + } + } + } + if($x < 0 || $y < 0) return null; + + $this->x = $x; + $this->y = $y; + + } while(ord($this->frame[$y][$x]) & 0x80); + + return array('x'=>$x, 'y'=>$y); + } + + } ; + + //########################################################################## + + class QRencode { + + public $casesensitive = true; + public $eightbit = false; + + public $version = 0; + public $size = 3; + public $margin = 4; + + public $structured = 0; // not supported yet + + public $level = QR_ECLEVEL_L; + public $hint = QR_MODE_8; + + //---------------------------------------------------------------------- + public static function factory($level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = new QRencode(); + $enc->size = $size; + $enc->margin = $margin; + + switch ($level.'') { + case '0': + case '1': + case '2': + case '3': + $enc->level = $level; + break; + case 'l': + case 'L': + $enc->level = QR_ECLEVEL_L; + break; + case 'm': + case 'M': + $enc->level = QR_ECLEVEL_M; + break; + case 'q': + case 'Q': + $enc->level = QR_ECLEVEL_Q; + break; + case 'h': + case 'H': + $enc->level = QR_ECLEVEL_H; + break; + } + + return $enc; + } + + //---------------------------------------------------------------------- + public function encodeRAW($intext, $outfile = false) + { + $code = new QRcode(); + + if($this->eightbit) { + $code->encodeString8bit($intext, $this->version, $this->level); + } else { + $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); + } + + return $code->data; + } + + //---------------------------------------------------------------------- + public function encode($intext, $outfile = false) + { + $code = new QRcode(); + + if($this->eightbit) { + $code->encodeString8bit($intext, $this->version, $this->level); + } else { + $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); + } + + QRtools::markTime('after_encode'); + + if ($outfile!== false) { + file_put_contents($outfile, join("\n", QRtools::binarize($code->data))); + } else { + return QRtools::binarize($code->data); + } + } + + //---------------------------------------------------------------------- + public function encodePNG($intext, $outfile = false,$saveandprint=false) + { + try { + + ob_start(); + $tab = $this->encode($intext); + $err = ob_get_contents(); + ob_end_clean(); + + if ($err != '') + QRtools::log($outfile, $err); + + $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin)); + + QRimage::png($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint); + + } catch (Exception $e) { + + QRtools::log($outfile, $e->getMessage()); + + } + } + } diff --git a/addons/unishop/library/phpqrcode/qrimage.php b/addons/unishop/library/phpqrcode/qrimage.php new file mode 100644 index 0000000..2175c5e --- /dev/null +++ b/addons/unishop/library/phpqrcode/qrimage.php @@ -0,0 +1,95 @@ + + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('QR_IMAGE', true); + + class QRimage { + + //---------------------------------------------------------------------- + public static function png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE) + { + $image = self::image($frame, $pixelPerPoint, $outerFrame); + + if ($filename === false) { + Header("Content-type: image/png"); + ImagePng($image); + } else { + if($saveandprint===TRUE){ + ImagePng($image, $filename); + header("Content-type: image/png"); + ImagePng($image); + }else{ + ImagePng($image, $filename); + } + } + + ImageDestroy($image); + } + + //---------------------------------------------------------------------- + public static function jpg($frame, $filename = false, $pixelPerPoint = 8, $outerFrame = 4, $q = 85) + { + $image = self::image($frame, $pixelPerPoint, $outerFrame); + + if ($filename === false) { + Header("Content-type: image/jpeg"); + ImageJpeg($image, null, $q); + } else { + ImageJpeg($image, $filename, $q); + } + + ImageDestroy($image); + } + + //---------------------------------------------------------------------- + private static function image($frame, $pixelPerPoint = 4, $outerFrame = 4) + { + $h = count($frame); + $w = strlen($frame[0]); + + $imgW = $w + 2*$outerFrame; + $imgH = $h + 2*$outerFrame; + + $base_image =ImageCreate($imgW, $imgH); + + $col[0] = ImageColorAllocate($base_image,255,255,255); + $col[1] = ImageColorAllocate($base_image,0,0,0); + + imagefill($base_image, 0, 0, $col[0]); + + for($y=0; $y<$h; $y++) { + for($x=0; $x<$w; $x++) { + if ($frame[$y][$x] == '1') { + ImageSetPixel($base_image,$x+$outerFrame,$y+$outerFrame,$col[1]); + } + } + } + + $target_image =ImageCreate($imgW * $pixelPerPoint, $imgH * $pixelPerPoint); + ImageCopyResized($target_image, $base_image, 0, 0, 0, 0, $imgW * $pixelPerPoint, $imgH * $pixelPerPoint, $imgW, $imgH); + ImageDestroy($base_image); + + return $target_image; + } + } \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/qrinput.php b/addons/unishop/library/phpqrcode/qrinput.php new file mode 100644 index 0000000..c65f91a --- /dev/null +++ b/addons/unishop/library/phpqrcode/qrinput.php @@ -0,0 +1,729 @@ + + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('STRUCTURE_HEADER_BITS', 20); + define('MAX_STRUCTURED_SYMBOLS', 16); + + class QRinputItem { + + public $mode; + public $size; + public $data; + public $bstream; + + public function __construct($mode, $size, $data, $bstream = null) + { + $setData = array_slice($data, 0, $size); + + if (count($setData) < $size) { + $setData = array_merge($setData, array_fill(0,$size-count($setData),0)); + } + + if(!QRinput::check($mode, $size, $setData)) { + throw new Exception('Error m:'.$mode.',s:'.$size.',d:'.join(',',$setData)); + return null; + } + + $this->mode = $mode; + $this->size = $size; + $this->data = $setData; + $this->bstream = $bstream; + } + + //---------------------------------------------------------------------- + public function encodeModeNum($version) + { + try { + + $words = (int)($this->size / 3); + $bs = new QRbitstream(); + + $val = 0x1; + $bs->appendNum(4, $val); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_NUM, $version), $this->size); + + for($i=0; $i<$words; $i++) { + $val = (ord($this->data[$i*3 ]) - ord('0')) * 100; + $val += (ord($this->data[$i*3+1]) - ord('0')) * 10; + $val += (ord($this->data[$i*3+2]) - ord('0')); + $bs->appendNum(10, $val); + } + + if($this->size - $words * 3 == 1) { + $val = ord($this->data[$words*3]) - ord('0'); + $bs->appendNum(4, $val); + } else if($this->size - $words * 3 == 2) { + $val = (ord($this->data[$words*3 ]) - ord('0')) * 10; + $val += (ord($this->data[$words*3+1]) - ord('0')); + $bs->appendNum(7, $val); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeAn($version) + { + try { + $words = (int)($this->size / 2); + $bs = new QRbitstream(); + + $bs->appendNum(4, 0x02); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_AN, $version), $this->size); + + for($i=0; $i<$words; $i++) { + $val = (int)QRinput::lookAnTable(ord($this->data[$i*2 ])) * 45; + $val += (int)QRinput::lookAnTable(ord($this->data[$i*2+1])); + + $bs->appendNum(11, $val); + } + + if($this->size & 1) { + $val = QRinput::lookAnTable(ord($this->data[$words * 2])); + $bs->appendNum(6, $val); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeMode8($version) + { + try { + $bs = new QRbitstream(); + + $bs->appendNum(4, 0x4); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_8, $version), $this->size); + + for($i=0; $i<$this->size; $i++) { + $bs->appendNum(8, ord($this->data[$i])); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeKanji($version) + { + try { + + $bs = new QRbitrtream(); + + $bs->appendNum(4, 0x8); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_KANJI, $version), (int)($this->size / 2)); + + for($i=0; $i<$this->size; $i+=2) { + $val = (ord($this->data[$i]) << 8) | ord($this->data[$i+1]); + if($val <= 0x9ffc) { + $val -= 0x8140; + } else { + $val -= 0xc140; + } + + $h = ($val >> 8) * 0xc0; + $val = ($val & 0xff) + $h; + + $bs->appendNum(13, $val); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeStructure() + { + try { + $bs = new QRbitstream(); + + $bs->appendNum(4, 0x03); + $bs->appendNum(4, ord($this->data[1]) - 1); + $bs->appendNum(4, ord($this->data[0]) - 1); + $bs->appendNum(8, ord($this->data[2])); + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function estimateBitStreamSizeOfEntry($version) + { + $bits = 0; + + if($version == 0) + $version = 1; + + switch($this->mode) { + case QR_MODE_NUM: $bits = QRinput::estimateBitsModeNum($this->size); break; + case QR_MODE_AN: $bits = QRinput::estimateBitsModeAn($this->size); break; + case QR_MODE_8: $bits = QRinput::estimateBitsMode8($this->size); break; + case QR_MODE_KANJI: $bits = QRinput::estimateBitsModeKanji($this->size);break; + case QR_MODE_STRUCTURE: return STRUCTURE_HEADER_BITS; + default: + return 0; + } + + $l = QRspec::lengthIndicator($this->mode, $version); + $m = 1 << $l; + $num = (int)(($this->size + $m - 1) / $m); + + $bits += $num * (4 + $l); + + return $bits; + } + + //---------------------------------------------------------------------- + public function encodeBitStream($version) + { + try { + + unset($this->bstream); + $words = QRspec::maximumWords($this->mode, $version); + + if($this->size > $words) { + + $st1 = new QRinputItem($this->mode, $words, $this->data); + $st2 = new QRinputItem($this->mode, $this->size - $words, array_slice($this->data, $words)); + + $st1->encodeBitStream($version); + $st2->encodeBitStream($version); + + $this->bstream = new QRbitstream(); + $this->bstream->append($st1->bstream); + $this->bstream->append($st2->bstream); + + unset($st1); + unset($st2); + + } else { + + $ret = 0; + + switch($this->mode) { + case QR_MODE_NUM: $ret = $this->encodeModeNum($version); break; + case QR_MODE_AN: $ret = $this->encodeModeAn($version); break; + case QR_MODE_8: $ret = $this->encodeMode8($version); break; + case QR_MODE_KANJI: $ret = $this->encodeModeKanji($version);break; + case QR_MODE_STRUCTURE: $ret = $this->encodeModeStructure(); break; + + default: + break; + } + + if($ret < 0) + return -1; + } + + return $this->bstream->size(); + + } catch (Exception $e) { + return -1; + } + } + }; + + //########################################################################## + + class QRinput { + + public $items; + + private $version; + private $level; + + //---------------------------------------------------------------------- + public function __construct($version = 0, $level = QR_ECLEVEL_L) + { + if ($version < 0 || $version > QRSPEC_VERSION_MAX || $level > QR_ECLEVEL_H) { + throw new Exception('Invalid version no'); + return NULL; + } + + $this->version = $version; + $this->level = $level; + } + + //---------------------------------------------------------------------- + public function getVersion() + { + return $this->version; + } + + //---------------------------------------------------------------------- + public function setVersion($version) + { + if($version < 0 || $version > QRSPEC_VERSION_MAX) { + throw new Exception('Invalid version no'); + return -1; + } + + $this->version = $version; + + return 0; + } + + //---------------------------------------------------------------------- + public function getErrorCorrectionLevel() + { + return $this->level; + } + + //---------------------------------------------------------------------- + public function setErrorCorrectionLevel($level) + { + if($level > QR_ECLEVEL_H) { + throw new Exception('Invalid ECLEVEL'); + return -1; + } + + $this->level = $level; + + return 0; + } + + //---------------------------------------------------------------------- + public function appendEntry(QRinputItem $entry) + { + $this->items[] = $entry; + } + + //---------------------------------------------------------------------- + public function append($mode, $size, $data) + { + try { + $entry = new QRinputItem($mode, $size, $data); + $this->items[] = $entry; + return 0; + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + + public function insertStructuredAppendHeader($size, $index, $parity) + { + if( $size > MAX_STRUCTURED_SYMBOLS ) { + throw new Exception('insertStructuredAppendHeader wrong size'); + } + + if( $index <= 0 || $index > MAX_STRUCTURED_SYMBOLS ) { + throw new Exception('insertStructuredAppendHeader wrong index'); + } + + $buf = array($size, $index, $parity); + + try { + $entry = new QRinputItem(QR_MODE_STRUCTURE, 3, buf); + array_unshift($this->items, $entry); + return 0; + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function calcParity() + { + $parity = 0; + + foreach($this->items as $item) { + if($item->mode != QR_MODE_STRUCTURE) { + for($i=$item->size-1; $i>=0; $i--) { + $parity ^= $item->data[$i]; + } + } + } + + return $parity; + } + + //---------------------------------------------------------------------- + public static function checkModeNum($size, $data) + { + for($i=0; $i<$size; $i++) { + if((ord($data[$i]) < ord('0')) || (ord($data[$i]) > ord('9'))){ + return false; + } + } + + return true; + } + + //---------------------------------------------------------------------- + public static function estimateBitsModeNum($size) + { + $w = (int)$size / 3; + $bits = $w * 10; + + switch($size - $w * 3) { + case 1: + $bits += 4; + break; + case 2: + $bits += 7; + break; + default: + break; + } + + return $bits; + } + + //---------------------------------------------------------------------- + public static $anTable = array( + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1, + -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 + ); + + //---------------------------------------------------------------------- + public static function lookAnTable($c) + { + return (($c > 127)?-1:self::$anTable[$c]); + } + + //---------------------------------------------------------------------- + public static function checkModeAn($size, $data) + { + for($i=0; $i<$size; $i++) { + if (self::lookAnTable(ord($data[$i])) == -1) { + return false; + } + } + + return true; + } + + //---------------------------------------------------------------------- + public static function estimateBitsModeAn($size) + { + $w = (int)($size / 2); + $bits = $w * 11; + + if($size & 1) { + $bits += 6; + } + + return $bits; + } + + //---------------------------------------------------------------------- + public static function estimateBitsMode8($size) + { + return $size * 8; + } + + //---------------------------------------------------------------------- + public function estimateBitsModeKanji($size) + { + return (int)(($size / 2) * 13); + } + + //---------------------------------------------------------------------- + public static function checkModeKanji($size, $data) + { + if($size & 1) + return false; + + for($i=0; $i<$size; $i+=2) { + $val = (ord($data[$i]) << 8) | ord($data[$i+1]); + if( $val < 0x8140 + || ($val > 0x9ffc && $val < 0xe040) + || $val > 0xebbf) { + return false; + } + } + + return true; + } + + /*********************************************************************** + * Validation + **********************************************************************/ + + public static function check($mode, $size, $data) + { + if($size <= 0) + return false; + + switch($mode) { + case QR_MODE_NUM: return self::checkModeNum($size, $data); break; + case QR_MODE_AN: return self::checkModeAn($size, $data); break; + case QR_MODE_KANJI: return self::checkModeKanji($size, $data); break; + case QR_MODE_8: return true; break; + case QR_MODE_STRUCTURE: return true; break; + + default: + break; + } + + return false; + } + + + //---------------------------------------------------------------------- + public function estimateBitStreamSize($version) + { + $bits = 0; + + foreach($this->items as $item) { + $bits += $item->estimateBitStreamSizeOfEntry($version); + } + + return $bits; + } + + //---------------------------------------------------------------------- + public function estimateVersion() + { + $version = 0; + $prev = 0; + do { + $prev = $version; + $bits = $this->estimateBitStreamSize($prev); + $version = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level); + if ($version < 0) { + return -1; + } + } while ($version > $prev); + + return $version; + } + + //---------------------------------------------------------------------- + public static function lengthOfCode($mode, $version, $bits) + { + $payload = $bits - 4 - QRspec::lengthIndicator($mode, $version); + switch($mode) { + case QR_MODE_NUM: + $chunks = (int)($payload / 10); + $remain = $payload - $chunks * 10; + $size = $chunks * 3; + if($remain >= 7) { + $size += 2; + } else if($remain >= 4) { + $size += 1; + } + break; + case QR_MODE_AN: + $chunks = (int)($payload / 11); + $remain = $payload - $chunks * 11; + $size = $chunks * 2; + if($remain >= 6) + $size++; + break; + case QR_MODE_8: + $size = (int)($payload / 8); + break; + case QR_MODE_KANJI: + $size = (int)(($payload / 13) * 2); + break; + case QR_MODE_STRUCTURE: + $size = (int)($payload / 8); + break; + default: + $size = 0; + break; + } + + $maxsize = QRspec::maximumWords($mode, $version); + if($size < 0) $size = 0; + if($size > $maxsize) $size = $maxsize; + + return $size; + } + + //---------------------------------------------------------------------- + public function createBitStream() + { + $total = 0; + + foreach($this->items as $item) { + $bits = $item->encodeBitStream($this->version); + + if($bits < 0) + return -1; + + $total += $bits; + } + + return $total; + } + + //---------------------------------------------------------------------- + public function convertData() + { + $ver = $this->estimateVersion(); + if($ver > $this->getVersion()) { + $this->setVersion($ver); + } + + for(;;) { + $bits = $this->createBitStream(); + + if($bits < 0) + return -1; + + $ver = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level); + if($ver < 0) { + throw new Exception('WRONG VERSION'); + return -1; + } else if($ver > $this->getVersion()) { + $this->setVersion($ver); + } else { + break; + } + } + + return 0; + } + + //---------------------------------------------------------------------- + public function appendPaddingBit(&$bstream) + { + $bits = $bstream->size(); + $maxwords = QRspec::getDataLength($this->version, $this->level); + $maxbits = $maxwords * 8; + + if ($maxbits == $bits) { + return 0; + } + + if ($maxbits - $bits < 5) { + return $bstream->appendNum($maxbits - $bits, 0); + } + + $bits += 4; + $words = (int)(($bits + 7) / 8); + + $padding = new QRbitstream(); + $ret = $padding->appendNum($words * 8 - $bits + 4, 0); + + if($ret < 0) + return $ret; + + $padlen = $maxwords - $words; + + if($padlen > 0) { + + $padbuf = array(); + for($i=0; $i<$padlen; $i++) { + $padbuf[$i] = ($i&1)?0x11:0xec; + } + + $ret = $padding->appendBytes($padlen, $padbuf); + + if($ret < 0) + return $ret; + + } + + $ret = $bstream->append($padding); + + return $ret; + } + + //---------------------------------------------------------------------- + public function mergeBitStream() + { + if($this->convertData() < 0) { + return null; + } + + $bstream = new QRbitstream(); + + foreach($this->items as $item) { + $ret = $bstream->append($item->bstream); + if($ret < 0) { + return null; + } + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function getBitStream() + { + + $bstream = $this->mergeBitStream(); + + if($bstream == null) { + return null; + } + + $ret = $this->appendPaddingBit($bstream); + if($ret < 0) { + return null; + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function getByteStream() + { + $bstream = $this->getBitStream(); + if($bstream == null) { + return null; + } + + return $bstream->toByte(); + } + } + + + \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/qrlib.php b/addons/unishop/library/phpqrcode/qrlib.php new file mode 100644 index 0000000..43059b9 --- /dev/null +++ b/addons/unishop/library/phpqrcode/qrlib.php @@ -0,0 +1,43 @@ + + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + $QR_BASEDIR = dirname(__FILE__).DIRECTORY_SEPARATOR; + + // Required libs + + include $QR_BASEDIR."qrconst.php"; + include $QR_BASEDIR."qrconfig.php"; + include $QR_BASEDIR."qrtools.php"; + include $QR_BASEDIR."qrspec.php"; + include $QR_BASEDIR."qrimage.php"; + include $QR_BASEDIR."qrinput.php"; + include $QR_BASEDIR."qrbitstream.php"; + include $QR_BASEDIR."qrsplit.php"; + include $QR_BASEDIR."qrrscode.php"; + include $QR_BASEDIR."qrmask.php"; + include $QR_BASEDIR."qrencode.php"; + diff --git a/addons/unishop/library/phpqrcode/qrmask.php b/addons/unishop/library/phpqrcode/qrmask.php new file mode 100644 index 0000000..2d388e0 --- /dev/null +++ b/addons/unishop/library/phpqrcode/qrmask.php @@ -0,0 +1,328 @@ + + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('N1', 3); + define('N2', 3); + define('N3', 40); + define('N4', 10); + + class QRmask { + + public $runLength = array(); + + //---------------------------------------------------------------------- + public function __construct() + { + $this->runLength = array_fill(0, QRSPEC_WIDTH_MAX + 1, 0); + } + + //---------------------------------------------------------------------- + public function writeFormatInformation($width, &$frame, $mask, $level) + { + $blacks = 0; + $format = QRspec::getFormatInfo($mask, $level); + + for($i=0; $i<8; $i++) { + if($format & 1) { + $blacks += 2; + $v = 0x85; + } else { + $v = 0x84; + } + + $frame[8][$width - 1 - $i] = chr($v); + if($i < 6) { + $frame[$i][8] = chr($v); + } else { + $frame[$i + 1][8] = chr($v); + } + $format = $format >> 1; + } + + for($i=0; $i<7; $i++) { + if($format & 1) { + $blacks += 2; + $v = 0x85; + } else { + $v = 0x84; + } + + $frame[$width - 7 + $i][8] = chr($v); + if($i == 0) { + $frame[8][7] = chr($v); + } else { + $frame[8][6 - $i] = chr($v); + } + + $format = $format >> 1; + } + + return $blacks; + } + + //---------------------------------------------------------------------- + public function mask0($x, $y) { return ($x+$y)&1; } + public function mask1($x, $y) { return ($y&1); } + public function mask2($x, $y) { return ($x%3); } + public function mask3($x, $y) { return ($x+$y)%3; } + public function mask4($x, $y) { return (((int)($y/2))+((int)($x/3)))&1; } + public function mask5($x, $y) { return (($x*$y)&1)+($x*$y)%3; } + public function mask6($x, $y) { return ((($x*$y)&1)+($x*$y)%3)&1; } + public function mask7($x, $y) { return ((($x*$y)%3)+(($x+$y)&1))&1; } + + //---------------------------------------------------------------------- + private function generateMaskNo($maskNo, $width, $frame) + { + $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); + + for($y=0; $y<$width; $y++) { + for($x=0; $x<$width; $x++) { + if(ord($frame[$y][$x]) & 0x80) { + $bitMask[$y][$x] = 0; + } else { + $maskFunc = call_user_func(array($this, 'mask'.$maskNo), $x, $y); + $bitMask[$y][$x] = ($maskFunc == 0)?1:0; + } + + } + } + + return $bitMask; + } + + //---------------------------------------------------------------------- + public static function serial($bitFrame) + { + $codeArr = array(); + + foreach ($bitFrame as $line) + $codeArr[] = join('', $line); + + return gzcompress(join("\n", $codeArr), 9); + } + + //---------------------------------------------------------------------- + public static function unserial($code) + { + $codeArr = array(); + + $codeLines = explode("\n", gzuncompress($code)); + foreach ($codeLines as $line) + $codeArr[] = str_split($line); + + return $codeArr; + } + + //---------------------------------------------------------------------- + public function makeMaskNo($maskNo, $width, $s, &$d, $maskGenOnly = false) + { + $b = 0; + $bitMask = array(); + + $fileName = QR_CACHE_DIR.'mask_'.$maskNo.DIRECTORY_SEPARATOR.'mask_'.$width.'_'.$maskNo.'.dat'; + + if (QR_CACHEABLE) { + if (file_exists($fileName)) { + $bitMask = self::unserial(file_get_contents($fileName)); + } else { + $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); + if (!file_exists(QR_CACHE_DIR.'mask_'.$maskNo)) + mkdir(QR_CACHE_DIR.'mask_'.$maskNo); + file_put_contents($fileName, self::serial($bitMask)); + } + } else { + $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); + } + + if ($maskGenOnly) + return; + + $d = $s; + + for($y=0; $y<$width; $y++) { + for($x=0; $x<$width; $x++) { + if($bitMask[$y][$x] == 1) { + $d[$y][$x] = chr(ord($s[$y][$x]) ^ (int)$bitMask[$y][$x]); + } + $b += (int)(ord($d[$y][$x]) & 1); + } + } + + return $b; + } + + //---------------------------------------------------------------------- + public function makeMask($width, $frame, $maskNo, $level) + { + $masked = array_fill(0, $width, str_repeat("\0", $width)); + $this->makeMaskNo($maskNo, $width, $frame, $masked); + $this->writeFormatInformation($width, $masked, $maskNo, $level); + + return $masked; + } + + //---------------------------------------------------------------------- + public function calcN1N3($length) + { + $demerit = 0; + + for($i=0; $i<$length; $i++) { + + if($this->runLength[$i] >= 5) { + $demerit += (N1 + ($this->runLength[$i] - 5)); + } + if($i & 1) { + if(($i >= 3) && ($i < ($length-2)) && ($this->runLength[$i] % 3 == 0)) { + $fact = (int)($this->runLength[$i] / 3); + if(($this->runLength[$i-2] == $fact) && + ($this->runLength[$i-1] == $fact) && + ($this->runLength[$i+1] == $fact) && + ($this->runLength[$i+2] == $fact)) { + if(($this->runLength[$i-3] < 0) || ($this->runLength[$i-3] >= (4 * $fact))) { + $demerit += N3; + } else if((($i+3) >= $length) || ($this->runLength[$i+3] >= (4 * $fact))) { + $demerit += N3; + } + } + } + } + } + return $demerit; + } + + //---------------------------------------------------------------------- + public function evaluateSymbol($width, $frame) + { + $head = 0; + $demerit = 0; + + for($y=0; $y<$width; $y++) { + $head = 0; + $this->runLength[0] = 1; + + $frameY = $frame[$y]; + + if ($y>0) + $frameYM = $frame[$y-1]; + + for($x=0; $x<$width; $x++) { + if(($x > 0) && ($y > 0)) { + $b22 = ord($frameY[$x]) & ord($frameY[$x-1]) & ord($frameYM[$x]) & ord($frameYM[$x-1]); + $w22 = ord($frameY[$x]) | ord($frameY[$x-1]) | ord($frameYM[$x]) | ord($frameYM[$x-1]); + + if(($b22 | ($w22 ^ 1))&1) { + $demerit += N2; + } + } + if(($x == 0) && (ord($frameY[$x]) & 1)) { + $this->runLength[0] = -1; + $head = 1; + $this->runLength[$head] = 1; + } else if($x > 0) { + if((ord($frameY[$x]) ^ ord($frameY[$x-1])) & 1) { + $head++; + $this->runLength[$head] = 1; + } else { + $this->runLength[$head]++; + } + } + } + + $demerit += $this->calcN1N3($head+1); + } + + for($x=0; $x<$width; $x++) { + $head = 0; + $this->runLength[0] = 1; + + for($y=0; $y<$width; $y++) { + if($y == 0 && (ord($frame[$y][$x]) & 1)) { + $this->runLength[0] = -1; + $head = 1; + $this->runLength[$head] = 1; + } else if($y > 0) { + if((ord($frame[$y][$x]) ^ ord($frame[$y-1][$x])) & 1) { + $head++; + $this->runLength[$head] = 1; + } else { + $this->runLength[$head]++; + } + } + } + + $demerit += $this->calcN1N3($head+1); + } + + return $demerit; + } + + + //---------------------------------------------------------------------- + public function mask($width, $frame, $level) + { + $minDemerit = PHP_INT_MAX; + $bestMaskNum = 0; + $bestMask = array(); + + $checked_masks = array(0,1,2,3,4,5,6,7); + + if (QR_FIND_FROM_RANDOM !== false) { + + $howManuOut = 8-(QR_FIND_FROM_RANDOM % 9); + for ($i = 0; $i < $howManuOut; $i++) { + $remPos = rand (0, count($checked_masks)-1); + unset($checked_masks[$remPos]); + $checked_masks = array_values($checked_masks); + } + + } + + $bestMask = $frame; + + foreach($checked_masks as $i) { + $mask = array_fill(0, $width, str_repeat("\0", $width)); + + $demerit = 0; + $blacks = 0; + $blacks = $this->makeMaskNo($i, $width, $frame, $mask); + $blacks += $this->writeFormatInformation($width, $mask, $i, $level); + $blacks = (int)(100 * $blacks / ($width * $width)); + $demerit = (int)((int)(abs($blacks - 50) / 5) * N4); + $demerit += $this->evaluateSymbol($width, $mask); + + if($demerit < $minDemerit) { + $minDemerit = $demerit; + $bestMask = $mask; + $bestMaskNum = $i; + } + } + + return $bestMask; + } + + //---------------------------------------------------------------------- + } diff --git a/addons/unishop/library/phpqrcode/qrrscode.php b/addons/unishop/library/phpqrcode/qrrscode.php new file mode 100644 index 0000000..d7a97d9 --- /dev/null +++ b/addons/unishop/library/phpqrcode/qrrscode.php @@ -0,0 +1,210 @@ + + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRrsItem { + + public $mm; // Bits per symbol + public $nn; // Symbols per block (= (1<= $this->nn) { + $x -= $this->nn; + $x = ($x >> $this->mm) + ($x & $this->nn); + } + + return $x; + } + + //---------------------------------------------------------------------- + public static function init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) + { + // Common code for intializing a Reed-Solomon control block (char or int symbols) + // Copyright 2004 Phil Karn, KA9Q + // May be used under the terms of the GNU Lesser General Public License (LGPL) + + $rs = null; + + // Check parameter ranges + if($symsize < 0 || $symsize > 8) return $rs; + if($fcr < 0 || $fcr >= (1<<$symsize)) return $rs; + if($prim <= 0 || $prim >= (1<<$symsize)) return $rs; + if($nroots < 0 || $nroots >= (1<<$symsize)) return $rs; // Can't have more roots than symbol values! + if($pad < 0 || $pad >= ((1<<$symsize) -1 - $nroots)) return $rs; // Too much padding + + $rs = new QRrsItem(); + $rs->mm = $symsize; + $rs->nn = (1<<$symsize)-1; + $rs->pad = $pad; + + $rs->alpha_to = array_fill(0, $rs->nn+1, 0); + $rs->index_of = array_fill(0, $rs->nn+1, 0); + + // PHP style macro replacement ;) + $NN =& $rs->nn; + $A0 =& $NN; + + // Generate Galois field lookup tables + $rs->index_of[0] = $A0; // log(zero) = -inf + $rs->alpha_to[$A0] = 0; // alpha**-inf = 0 + $sr = 1; + + for($i=0; $i<$rs->nn; $i++) { + $rs->index_of[$sr] = $i; + $rs->alpha_to[$i] = $sr; + $sr <<= 1; + if($sr & (1<<$symsize)) { + $sr ^= $gfpoly; + } + $sr &= $rs->nn; + } + + if($sr != 1){ + // field generator polynomial is not primitive! + $rs = NULL; + return $rs; + } + + /* Form RS code generator polynomial from its roots */ + $rs->genpoly = array_fill(0, $nroots+1, 0); + + $rs->fcr = $fcr; + $rs->prim = $prim; + $rs->nroots = $nroots; + $rs->gfpoly = $gfpoly; + + /* Find prim-th root of 1, used in decoding */ + for($iprim=1;($iprim % $prim) != 0;$iprim += $rs->nn) + ; // intentional empty-body loop! + + $rs->iprim = (int)($iprim / $prim); + $rs->genpoly[0] = 1; + + for ($i = 0,$root=$fcr*$prim; $i < $nroots; $i++, $root += $prim) { + $rs->genpoly[$i+1] = 1; + + // Multiply rs->genpoly[] by @**(root + x) + for ($j = $i; $j > 0; $j--) { + if ($rs->genpoly[$j] != 0) { + $rs->genpoly[$j] = $rs->genpoly[$j-1] ^ $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[$j]] + $root)]; + } else { + $rs->genpoly[$j] = $rs->genpoly[$j-1]; + } + } + // rs->genpoly[0] can never be zero + $rs->genpoly[0] = $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[0]] + $root)]; + } + + // convert rs->genpoly[] to index form for quicker encoding + for ($i = 0; $i <= $nroots; $i++) + $rs->genpoly[$i] = $rs->index_of[$rs->genpoly[$i]]; + + return $rs; + } + + //---------------------------------------------------------------------- + public function encode_rs_char($data, &$parity) + { + $MM =& $this->mm; + $NN =& $this->nn; + $ALPHA_TO =& $this->alpha_to; + $INDEX_OF =& $this->index_of; + $GENPOLY =& $this->genpoly; + $NROOTS =& $this->nroots; + $FCR =& $this->fcr; + $PRIM =& $this->prim; + $IPRIM =& $this->iprim; + $PAD =& $this->pad; + $A0 =& $NN; + + $parity = array_fill(0, $NROOTS, 0); + + for($i=0; $i< ($NN-$NROOTS-$PAD); $i++) { + + $feedback = $INDEX_OF[$data[$i] ^ $parity[0]]; + if($feedback != $A0) { + // feedback term is non-zero + + // This line is unnecessary when GENPOLY[NROOTS] is unity, as it must + // always be for the polynomials constructed by init_rs() + $feedback = $this->modnn($NN - $GENPOLY[$NROOTS] + $feedback); + + for($j=1;$j<$NROOTS;$j++) { + $parity[$j] ^= $ALPHA_TO[$this->modnn($feedback + $GENPOLY[$NROOTS-$j])]; + } + } + + // Shift + array_shift($parity); + if($feedback != $A0) { + array_push($parity, $ALPHA_TO[$this->modnn($feedback + $GENPOLY[0])]); + } else { + array_push($parity, 0); + } + } + } + } + + //########################################################################## + + class QRrs { + + public static $items = array(); + + //---------------------------------------------------------------------- + public static function init_rs($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) + { + foreach(self::$items as $rs) { + if($rs->pad != $pad) continue; + if($rs->nroots != $nroots) continue; + if($rs->mm != $symsize) continue; + if($rs->gfpoly != $gfpoly) continue; + if($rs->fcr != $fcr) continue; + if($rs->prim != $prim) continue; + + return $rs; + } + + $rs = QRrsItem::init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad); + array_unshift(self::$items, $rs); + + return $rs; + } + } \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/qrspec.php b/addons/unishop/library/phpqrcode/qrspec.php new file mode 100644 index 0000000..5a0c4b3 --- /dev/null +++ b/addons/unishop/library/phpqrcode/qrspec.php @@ -0,0 +1,592 @@ + + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * The following data / specifications are taken from + * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) + * or + * "Automatic identification and data capture techniques -- + * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('QRSPEC_VERSION_MAX', 40); + define('QRSPEC_WIDTH_MAX', 177); + + define('QRCAP_WIDTH', 0); + define('QRCAP_WORDS', 1); + define('QRCAP_REMINDER', 2); + define('QRCAP_EC', 3); + + class QRspec { + + public static $capacity = array( + array( 0, 0, 0, array( 0, 0, 0, 0)), + array( 21, 26, 0, array( 7, 10, 13, 17)), // 1 + array( 25, 44, 7, array( 10, 16, 22, 28)), + array( 29, 70, 7, array( 15, 26, 36, 44)), + array( 33, 100, 7, array( 20, 36, 52, 64)), + array( 37, 134, 7, array( 26, 48, 72, 88)), // 5 + array( 41, 172, 7, array( 36, 64, 96, 112)), + array( 45, 196, 0, array( 40, 72, 108, 130)), + array( 49, 242, 0, array( 48, 88, 132, 156)), + array( 53, 292, 0, array( 60, 110, 160, 192)), + array( 57, 346, 0, array( 72, 130, 192, 224)), //10 + array( 61, 404, 0, array( 80, 150, 224, 264)), + array( 65, 466, 0, array( 96, 176, 260, 308)), + array( 69, 532, 0, array( 104, 198, 288, 352)), + array( 73, 581, 3, array( 120, 216, 320, 384)), + array( 77, 655, 3, array( 132, 240, 360, 432)), //15 + array( 81, 733, 3, array( 144, 280, 408, 480)), + array( 85, 815, 3, array( 168, 308, 448, 532)), + array( 89, 901, 3, array( 180, 338, 504, 588)), + array( 93, 991, 3, array( 196, 364, 546, 650)), + array( 97, 1085, 3, array( 224, 416, 600, 700)), //20 + array(101, 1156, 4, array( 224, 442, 644, 750)), + array(105, 1258, 4, array( 252, 476, 690, 816)), + array(109, 1364, 4, array( 270, 504, 750, 900)), + array(113, 1474, 4, array( 300, 560, 810, 960)), + array(117, 1588, 4, array( 312, 588, 870, 1050)), //25 + array(121, 1706, 4, array( 336, 644, 952, 1110)), + array(125, 1828, 4, array( 360, 700, 1020, 1200)), + array(129, 1921, 3, array( 390, 728, 1050, 1260)), + array(133, 2051, 3, array( 420, 784, 1140, 1350)), + array(137, 2185, 3, array( 450, 812, 1200, 1440)), //30 + array(141, 2323, 3, array( 480, 868, 1290, 1530)), + array(145, 2465, 3, array( 510, 924, 1350, 1620)), + array(149, 2611, 3, array( 540, 980, 1440, 1710)), + array(153, 2761, 3, array( 570, 1036, 1530, 1800)), + array(157, 2876, 0, array( 570, 1064, 1590, 1890)), //35 + array(161, 3034, 0, array( 600, 1120, 1680, 1980)), + array(165, 3196, 0, array( 630, 1204, 1770, 2100)), + array(169, 3362, 0, array( 660, 1260, 1860, 2220)), + array(173, 3532, 0, array( 720, 1316, 1950, 2310)), + array(177, 3706, 0, array( 750, 1372, 2040, 2430)) //40 + ); + + //---------------------------------------------------------------------- + public static function getDataLength($version, $level) + { + return self::$capacity[$version][QRCAP_WORDS] - self::$capacity[$version][QRCAP_EC][$level]; + } + + //---------------------------------------------------------------------- + public static function getECCLength($version, $level) + { + return self::$capacity[$version][QRCAP_EC][$level]; + } + + //---------------------------------------------------------------------- + public static function getWidth($version) + { + return self::$capacity[$version][QRCAP_WIDTH]; + } + + //---------------------------------------------------------------------- + public static function getRemainder($version) + { + return self::$capacity[$version][QRCAP_REMINDER]; + } + + //---------------------------------------------------------------------- + public static function getMinimumVersion($size, $level) + { + + for($i=1; $i<= QRSPEC_VERSION_MAX; $i++) { + $words = self::$capacity[$i][QRCAP_WORDS] - self::$capacity[$i][QRCAP_EC][$level]; + if($words >= $size) + return $i; + } + + return -1; + } + + //###################################################################### + + public static $lengthTableBits = array( + array(10, 12, 14), + array( 9, 11, 13), + array( 8, 16, 16), + array( 8, 10, 12) + ); + + //---------------------------------------------------------------------- + public static function lengthIndicator($mode, $version) + { + if ($mode == QR_MODE_STRUCTURE) + return 0; + + if ($version <= 9) { + $l = 0; + } else if ($version <= 26) { + $l = 1; + } else { + $l = 2; + } + + return self::$lengthTableBits[$mode][$l]; + } + + //---------------------------------------------------------------------- + public static function maximumWords($mode, $version) + { + if($mode == QR_MODE_STRUCTURE) + return 3; + + if($version <= 9) { + $l = 0; + } else if($version <= 26) { + $l = 1; + } else { + $l = 2; + } + + $bits = self::$lengthTableBits[$mode][$l]; + $words = (1 << $bits) - 1; + + if($mode == QR_MODE_KANJI) { + $words *= 2; // the number of bytes is required + } + + return $words; + } + + // Error correction code ----------------------------------------------- + // Table of the error correction code (Reed-Solomon block) + // See Table 12-16 (pp.30-36), JIS X0510:2004. + + public static $eccTable = array( + array(array( 0, 0), array( 0, 0), array( 0, 0), array( 0, 0)), + array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), // 1 + array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), + array(array( 1, 0), array( 1, 0), array( 2, 0), array( 2, 0)), + array(array( 1, 0), array( 2, 0), array( 2, 0), array( 4, 0)), + array(array( 1, 0), array( 2, 0), array( 2, 2), array( 2, 2)), // 5 + array(array( 2, 0), array( 4, 0), array( 4, 0), array( 4, 0)), + array(array( 2, 0), array( 4, 0), array( 2, 4), array( 4, 1)), + array(array( 2, 0), array( 2, 2), array( 4, 2), array( 4, 2)), + array(array( 2, 0), array( 3, 2), array( 4, 4), array( 4, 4)), + array(array( 2, 2), array( 4, 1), array( 6, 2), array( 6, 2)), //10 + array(array( 4, 0), array( 1, 4), array( 4, 4), array( 3, 8)), + array(array( 2, 2), array( 6, 2), array( 4, 6), array( 7, 4)), + array(array( 4, 0), array( 8, 1), array( 8, 4), array(12, 4)), + array(array( 3, 1), array( 4, 5), array(11, 5), array(11, 5)), + array(array( 5, 1), array( 5, 5), array( 5, 7), array(11, 7)), //15 + array(array( 5, 1), array( 7, 3), array(15, 2), array( 3, 13)), + array(array( 1, 5), array(10, 1), array( 1, 15), array( 2, 17)), + array(array( 5, 1), array( 9, 4), array(17, 1), array( 2, 19)), + array(array( 3, 4), array( 3, 11), array(17, 4), array( 9, 16)), + array(array( 3, 5), array( 3, 13), array(15, 5), array(15, 10)), //20 + array(array( 4, 4), array(17, 0), array(17, 6), array(19, 6)), + array(array( 2, 7), array(17, 0), array( 7, 16), array(34, 0)), + array(array( 4, 5), array( 4, 14), array(11, 14), array(16, 14)), + array(array( 6, 4), array( 6, 14), array(11, 16), array(30, 2)), + array(array( 8, 4), array( 8, 13), array( 7, 22), array(22, 13)), //25 + array(array(10, 2), array(19, 4), array(28, 6), array(33, 4)), + array(array( 8, 4), array(22, 3), array( 8, 26), array(12, 28)), + array(array( 3, 10), array( 3, 23), array( 4, 31), array(11, 31)), + array(array( 7, 7), array(21, 7), array( 1, 37), array(19, 26)), + array(array( 5, 10), array(19, 10), array(15, 25), array(23, 25)), //30 + array(array(13, 3), array( 2, 29), array(42, 1), array(23, 28)), + array(array(17, 0), array(10, 23), array(10, 35), array(19, 35)), + array(array(17, 1), array(14, 21), array(29, 19), array(11, 46)), + array(array(13, 6), array(14, 23), array(44, 7), array(59, 1)), + array(array(12, 7), array(12, 26), array(39, 14), array(22, 41)), //35 + array(array( 6, 14), array( 6, 34), array(46, 10), array( 2, 64)), + array(array(17, 4), array(29, 14), array(49, 10), array(24, 46)), + array(array( 4, 18), array(13, 32), array(48, 14), array(42, 32)), + array(array(20, 4), array(40, 7), array(43, 22), array(10, 67)), + array(array(19, 6), array(18, 31), array(34, 34), array(20, 61)),//40 + ); + + //---------------------------------------------------------------------- + // CACHEABLE!!! + + public static function getEccSpec($version, $level, array &$spec) + { + if (count($spec) < 5) { + $spec = array(0,0,0,0,0); + } + + $b1 = self::$eccTable[$version][$level][0]; + $b2 = self::$eccTable[$version][$level][1]; + $data = self::getDataLength($version, $level); + $ecc = self::getECCLength($version, $level); + + if($b2 == 0) { + $spec[0] = $b1; + $spec[1] = (int)($data / $b1); + $spec[2] = (int)($ecc / $b1); + $spec[3] = 0; + $spec[4] = 0; + } else { + $spec[0] = $b1; + $spec[1] = (int)($data / ($b1 + $b2)); + $spec[2] = (int)($ecc / ($b1 + $b2)); + $spec[3] = $b2; + $spec[4] = $spec[1] + 1; + } + } + + // Alignment pattern --------------------------------------------------- + + // Positions of alignment patterns. + // This array includes only the second and the third position of the + // alignment patterns. Rest of them can be calculated from the distance + // between them. + + // See Table 1 in Appendix E (pp.71) of JIS X0510:2004. + + public static $alignmentPattern = array( + array( 0, 0), + array( 0, 0), array(18, 0), array(22, 0), array(26, 0), array(30, 0), // 1- 5 + array(34, 0), array(22, 38), array(24, 42), array(26, 46), array(28, 50), // 6-10 + array(30, 54), array(32, 58), array(34, 62), array(26, 46), array(26, 48), //11-15 + array(26, 50), array(30, 54), array(30, 56), array(30, 58), array(34, 62), //16-20 + array(28, 50), array(26, 50), array(30, 54), array(28, 54), array(32, 58), //21-25 + array(30, 58), array(34, 62), array(26, 50), array(30, 54), array(26, 52), //26-30 + array(30, 56), array(34, 60), array(30, 58), array(34, 62), array(30, 54), //31-35 + array(24, 50), array(28, 54), array(32, 58), array(26, 54), array(30, 58), //35-40 + ); + + + /** -------------------------------------------------------------------- + * Put an alignment marker. + * @param frame + * @param width + * @param ox,oy center coordinate of the pattern + */ + public static function putAlignmentMarker(array &$frame, $ox, $oy) + { + $finder = array( + "\xa1\xa1\xa1\xa1\xa1", + "\xa1\xa0\xa0\xa0\xa1", + "\xa1\xa0\xa1\xa0\xa1", + "\xa1\xa0\xa0\xa0\xa1", + "\xa1\xa1\xa1\xa1\xa1" + ); + + $yStart = $oy-2; + $xStart = $ox-2; + + for($y=0; $y<5; $y++) { + QRstr::set($frame, $xStart, $yStart+$y, $finder[$y]); + } + } + + //---------------------------------------------------------------------- + public static function putAlignmentPattern($version, &$frame, $width) + { + if($version < 2) + return; + + $d = self::$alignmentPattern[$version][1] - self::$alignmentPattern[$version][0]; + if($d < 0) { + $w = 2; + } else { + $w = (int)(($width - self::$alignmentPattern[$version][0]) / $d + 2); + } + + if($w * $w - 3 == 1) { + $x = self::$alignmentPattern[$version][0]; + $y = self::$alignmentPattern[$version][0]; + self::putAlignmentMarker($frame, $x, $y); + return; + } + + $cx = self::$alignmentPattern[$version][0]; + for($x=1; $x<$w - 1; $x++) { + self::putAlignmentMarker($frame, 6, $cx); + self::putAlignmentMarker($frame, $cx, 6); + $cx += $d; + } + + $cy = self::$alignmentPattern[$version][0]; + for($y=0; $y<$w-1; $y++) { + $cx = self::$alignmentPattern[$version][0]; + for($x=0; $x<$w-1; $x++) { + self::putAlignmentMarker($frame, $cx, $cy); + $cx += $d; + } + $cy += $d; + } + } + + // Version information pattern ----------------------------------------- + + // Version information pattern (BCH coded). + // See Table 1 in Appendix D (pp.68) of JIS X0510:2004. + + // size: [QRSPEC_VERSION_MAX - 6] + + public static $versionPattern = array( + 0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d, + 0x0f928, 0x10b78, 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9, + 0x177ec, 0x18ec4, 0x191e1, 0x1afab, 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75, + 0x1f250, 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b, 0x2542e, 0x26a64, + 0x27541, 0x28c69 + ); + + //---------------------------------------------------------------------- + public static function getVersionPattern($version) + { + if($version < 7 || $version > QRSPEC_VERSION_MAX) + return 0; + + return self::$versionPattern[$version -7]; + } + + // Format information -------------------------------------------------- + // See calcFormatInfo in tests/test_qrspec.c (orginal qrencode c lib) + + public static $formatInfo = array( + array(0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976), + array(0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0), + array(0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed), + array(0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b) + ); + + public static function getFormatInfo($mask, $level) + { + if($mask < 0 || $mask > 7) + return 0; + + if($level < 0 || $level > 3) + return 0; + + return self::$formatInfo[$level][$mask]; + } + + // Frame --------------------------------------------------------------- + // Cache of initial frames. + + public static $frames = array(); + + /** -------------------------------------------------------------------- + * Put a finder pattern. + * @param frame + * @param width + * @param ox,oy upper-left coordinate of the pattern + */ + public static function putFinderPattern(&$frame, $ox, $oy) + { + $finder = array( + "\xc1\xc1\xc1\xc1\xc1\xc1\xc1", + "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", + "\xc1\xc1\xc1\xc1\xc1\xc1\xc1" + ); + + for($y=0; $y<7; $y++) { + QRstr::set($frame, $ox, $oy+$y, $finder[$y]); + } + } + + //---------------------------------------------------------------------- + public static function createFrame($version) + { + $width = self::$capacity[$version][QRCAP_WIDTH]; + $frameLine = str_repeat ("\0", $width); + $frame = array_fill(0, $width, $frameLine); + + // Finder pattern + self::putFinderPattern($frame, 0, 0); + self::putFinderPattern($frame, $width - 7, 0); + self::putFinderPattern($frame, 0, $width - 7); + + // Separator + $yOffset = $width - 7; + + for($y=0; $y<7; $y++) { + $frame[$y][7] = "\xc0"; + $frame[$y][$width - 8] = "\xc0"; + $frame[$yOffset][7] = "\xc0"; + $yOffset++; + } + + $setPattern = str_repeat("\xc0", 8); + + QRstr::set($frame, 0, 7, $setPattern); + QRstr::set($frame, $width-8, 7, $setPattern); + QRstr::set($frame, 0, $width - 8, $setPattern); + + // Format info + $setPattern = str_repeat("\x84", 9); + QRstr::set($frame, 0, 8, $setPattern); + QRstr::set($frame, $width - 8, 8, $setPattern, 8); + + $yOffset = $width - 8; + + for($y=0; $y<8; $y++,$yOffset++) { + $frame[$y][8] = "\x84"; + $frame[$yOffset][8] = "\x84"; + } + + // Timing pattern + + for($i=1; $i<$width-15; $i++) { + $frame[6][7+$i] = chr(0x90 | ($i & 1)); + $frame[7+$i][6] = chr(0x90 | ($i & 1)); + } + + // Alignment pattern + self::putAlignmentPattern($version, $frame, $width); + + // Version information + if($version >= 7) { + $vinf = self::getVersionPattern($version); + + $v = $vinf; + + for($x=0; $x<6; $x++) { + for($y=0; $y<3; $y++) { + $frame[($width - 11)+$y][$x] = chr(0x88 | ($v & 1)); + $v = $v >> 1; + } + } + + $v = $vinf; + for($y=0; $y<6; $y++) { + for($x=0; $x<3; $x++) { + $frame[$y][$x+($width - 11)] = chr(0x88 | ($v & 1)); + $v = $v >> 1; + } + } + } + + // and a little bit... + $frame[$width - 8][8] = "\x81"; + + return $frame; + } + + //---------------------------------------------------------------------- + public static function debug($frame, $binary_mode = false) + { + if ($binary_mode) { + + foreach ($frame as &$frameLine) { + $frameLine = join('  ', explode('0', $frameLine)); + $frameLine = join('██', explode('1', $frameLine)); + } + + ?> + +


        '; + echo join("
        ", $frame); + echo '






'; + + } else { + + foreach ($frame as &$frameLine) { + $frameLine = join(' ', explode("\xc0", $frameLine)); + $frameLine = join('', explode("\xc1", $frameLine)); + $frameLine = join(' ', explode("\xa0", $frameLine)); + $frameLine = join('', explode("\xa1", $frameLine)); + $frameLine = join('', explode("\x84", $frameLine)); //format 0 + $frameLine = join('', explode("\x85", $frameLine)); //format 1 + $frameLine = join('', explode("\x81", $frameLine)); //special bit + $frameLine = join(' ', explode("\x90", $frameLine)); //clock 0 + $frameLine = join('', explode("\x91", $frameLine)); //clock 1 + $frameLine = join(' ', explode("\x88", $frameLine)); //version + $frameLine = join('', explode("\x89", $frameLine)); //version + $frameLine = join('♦', explode("\x01", $frameLine)); + $frameLine = join('⋅', explode("\0", $frameLine)); + } + + ?> + + "; + echo join("
", $frame); + echo "
"; + + } + } + + //---------------------------------------------------------------------- + public static function serial($frame) + { + return gzcompress(join("\n", $frame), 9); + } + + //---------------------------------------------------------------------- + public static function unserial($code) + { + return explode("\n", gzuncompress($code)); + } + + //---------------------------------------------------------------------- + public static function newFrame($version) + { + if($version < 1 || $version > QRSPEC_VERSION_MAX) + return null; + + if(!isset(self::$frames[$version])) { + + $fileName = QR_CACHE_DIR.'frame_'.$version.'.dat'; + + if (QR_CACHEABLE) { + if (file_exists($fileName)) { + self::$frames[$version] = self::unserial(file_get_contents($fileName)); + } else { + self::$frames[$version] = self::createFrame($version); + file_put_contents($fileName, self::serial(self::$frames[$version])); + } + } else { + self::$frames[$version] = self::createFrame($version); + } + } + + if(is_null(self::$frames[$version])) + return null; + + return self::$frames[$version]; + } + + //---------------------------------------------------------------------- + public static function rsBlockNum($spec) { return $spec[0] + $spec[3]; } + public static function rsBlockNum1($spec) { return $spec[0]; } + public static function rsDataCodes1($spec) { return $spec[1]; } + public static function rsEccCodes1($spec) { return $spec[2]; } + public static function rsBlockNum2($spec) { return $spec[3]; } + public static function rsDataCodes2($spec) { return $spec[4]; } + public static function rsEccCodes2($spec) { return $spec[2]; } + public static function rsDataLength($spec) { return ($spec[0] * $spec[1]) + ($spec[3] * $spec[4]); } + public static function rsEccLength($spec) { return ($spec[0] + $spec[3]) * $spec[2]; } + + } \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/qrsplit.php b/addons/unishop/library/phpqrcode/qrsplit.php new file mode 100644 index 0000000..8099c41 --- /dev/null +++ b/addons/unishop/library/phpqrcode/qrsplit.php @@ -0,0 +1,311 @@ + + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * The following data / specifications are taken from + * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) + * or + * "Automatic identification and data capture techniques -- + * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + class QRsplit { + + public $dataStr = ''; + public $input; + public $modeHint; + + //---------------------------------------------------------------------- + public function __construct($dataStr, $input, $modeHint) + { + $this->dataStr = $dataStr; + $this->input = $input; + $this->modeHint = $modeHint; + } + + //---------------------------------------------------------------------- + public static function isdigitat($str, $pos) + { + if ($pos >= strlen($str)) + return false; + + return ((ord($str[$pos]) >= ord('0'))&&(ord($str[$pos]) <= ord('9'))); + } + + //---------------------------------------------------------------------- + public static function isalnumat($str, $pos) + { + if ($pos >= strlen($str)) + return false; + + return (QRinput::lookAnTable(ord($str[$pos])) >= 0); + } + + //---------------------------------------------------------------------- + public function identifyMode($pos) + { + if ($pos >= strlen($this->dataStr)) + return QR_MODE_NUL; + + $c = $this->dataStr[$pos]; + + if(self::isdigitat($this->dataStr, $pos)) { + return QR_MODE_NUM; + } else if(self::isalnumat($this->dataStr, $pos)) { + return QR_MODE_AN; + } else if($this->modeHint == QR_MODE_KANJI) { + + if ($pos+1 < strlen($this->dataStr)) + { + $d = $this->dataStr[$pos+1]; + $word = (ord($c) << 8) | ord($d); + if(($word >= 0x8140 && $word <= 0x9ffc) || ($word >= 0xe040 && $word <= 0xebbf)) { + return QR_MODE_KANJI; + } + } + } + + return QR_MODE_8; + } + + //---------------------------------------------------------------------- + public function eatNum() + { + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 0; + while(self::isdigitat($this->dataStr, $p)) { + $p++; + } + + $run = $p; + $mode = $this->identifyMode($p); + + if($mode == QR_MODE_8) { + $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln + + QRinput::estimateBitsMode8(1) // + 4 + l8 + - QRinput::estimateBitsMode8($run + 1); // - 4 - l8 + if($dif > 0) { + return $this->eat8(); + } + } + if($mode == QR_MODE_AN) { + $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln + + QRinput::estimateBitsModeAn(1) // + 4 + la + - QRinput::estimateBitsModeAn($run + 1);// - 4 - la + if($dif > 0) { + return $this->eatAn(); + } + } + + $ret = $this->input->append(QR_MODE_NUM, $run, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eatAn() + { + $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion()); + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 0; + + while(self::isalnumat($this->dataStr, $p)) { + if(self::isdigitat($this->dataStr, $p)) { + $q = $p; + while(self::isdigitat($this->dataStr, $q)) { + $q++; + } + + $dif = QRinput::estimateBitsModeAn($p) // + 4 + la + + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln + - QRinput::estimateBitsModeAn($q); // - 4 - la + + if($dif < 0) { + break; + } else { + $p = $q; + } + } else { + $p++; + } + } + + $run = $p; + + if(!self::isalnumat($this->dataStr, $p)) { + $dif = QRinput::estimateBitsModeAn($run) + 4 + $la + + QRinput::estimateBitsMode8(1) // + 4 + l8 + - QRinput::estimateBitsMode8($run + 1); // - 4 - l8 + if($dif > 0) { + return $this->eat8(); + } + } + + $ret = $this->input->append(QR_MODE_AN, $run, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eatKanji() + { + $p = 0; + + while($this->identifyMode($p) == QR_MODE_KANJI) { + $p += 2; + } + + $ret = $this->input->append(QR_MODE_KANJI, $p, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eat8() + { + $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion()); + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 1; + $dataStrLen = strlen($this->dataStr); + + while($p < $dataStrLen) { + + $mode = $this->identifyMode($p); + if($mode == QR_MODE_KANJI) { + break; + } + if($mode == QR_MODE_NUM) { + $q = $p; + while(self::isdigitat($this->dataStr, $q)) { + $q++; + } + $dif = QRinput::estimateBitsMode8($p) // + 4 + l8 + + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln + - QRinput::estimateBitsMode8($q); // - 4 - l8 + if($dif < 0) { + break; + } else { + $p = $q; + } + } else if($mode == QR_MODE_AN) { + $q = $p; + while(self::isalnumat($this->dataStr, $q)) { + $q++; + } + $dif = QRinput::estimateBitsMode8($p) // + 4 + l8 + + QRinput::estimateBitsModeAn($q - $p) + 4 + $la + - QRinput::estimateBitsMode8($q); // - 4 - l8 + if($dif < 0) { + break; + } else { + $p = $q; + } + } else { + $p++; + } + } + + $run = $p; + $ret = $this->input->append(QR_MODE_8, $run, str_split($this->dataStr)); + + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function splitString() + { + while (strlen($this->dataStr) > 0) + { + if($this->dataStr == '') + return 0; + + $mode = $this->identifyMode(0); + + switch ($mode) { + case QR_MODE_NUM: $length = $this->eatNum(); break; + case QR_MODE_AN: $length = $this->eatAn(); break; + case QR_MODE_KANJI: + if ($hint == QR_MODE_KANJI) + $length = $this->eatKanji(); + else $length = $this->eat8(); + break; + default: $length = $this->eat8(); break; + + } + + if($length == 0) return 0; + if($length < 0) return -1; + + $this->dataStr = substr($this->dataStr, $length); + } + } + + //---------------------------------------------------------------------- + public function toUpper() + { + $stringLen = strlen($this->dataStr); + $p = 0; + + while ($p<$stringLen) { + $mode = self::identifyMode(substr($this->dataStr, $p), $this->modeHint); + if($mode == QR_MODE_KANJI) { + $p += 2; + } else { + if (ord($this->dataStr[$p]) >= ord('a') && ord($this->dataStr[$p]) <= ord('z')) { + $this->dataStr[$p] = chr(ord($this->dataStr[$p]) - 32); + } + $p++; + } + } + + return $this->dataStr; + } + + //---------------------------------------------------------------------- + public static function splitStringToQRinput($string, QRinput $input, $modeHint, $casesensitive = true) + { + if(is_null($string) || $string == '\0' || $string == '') { + throw new Exception('empty string!!!'); + } + + $split = new QRsplit($string, $input, $modeHint); + + if(!$casesensitive) + $split->toUpper(); + + return $split->splitString(); + } + } \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/qrtools.php b/addons/unishop/library/phpqrcode/qrtools.php new file mode 100644 index 0000000..e0412c4 --- /dev/null +++ b/addons/unishop/library/phpqrcode/qrtools.php @@ -0,0 +1,172 @@ + + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRtools { + + //---------------------------------------------------------------------- + public static function binarize($frame) + { + $len = count($frame); + foreach ($frame as &$frameLine) { + + for($i=0; $i<$len; $i++) { + $frameLine[$i] = (ord($frameLine[$i])&1)?'1':'0'; + } + } + + return $frame; + } + + //---------------------------------------------------------------------- + public static function tcpdfBarcodeArray($code, $mode = 'QR,L', $tcPdfVersion = '4.5.037') + { + $barcode_array = array(); + + if (!is_array($mode)) + $mode = explode(',', $mode); + + $eccLevel = 'L'; + + if (count($mode) > 1) { + $eccLevel = $mode[1]; + } + + $qrTab = QRcode::text($code, false, $eccLevel); + $size = count($qrTab); + + $barcode_array['num_rows'] = $size; + $barcode_array['num_cols'] = $size; + $barcode_array['bcode'] = array(); + + foreach ($qrTab as $line) { + $arrAdd = array(); + foreach(str_split($line) as $char) + $arrAdd[] = ($char=='1')?1:0; + $barcode_array['bcode'][] = $arrAdd; + } + + return $barcode_array; + } + + //---------------------------------------------------------------------- + public static function clearCache() + { + self::$frames = array(); + } + + //---------------------------------------------------------------------- + public static function buildCache() + { + QRtools::markTime('before_build_cache'); + + $mask = new QRmask(); + for ($a=1; $a <= QRSPEC_VERSION_MAX; $a++) { + $frame = QRspec::newFrame($a); + if (QR_IMAGE) { + $fileName = QR_CACHE_DIR.'frame_'.$a.'.png'; + QRimage::png(self::binarize($frame), $fileName, 1, 0); + } + + $width = count($frame); + $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); + for ($maskNo=0; $maskNo<8; $maskNo++) + $mask->makeMaskNo($maskNo, $width, $frame, $bitMask, true); + } + + QRtools::markTime('after_build_cache'); + } + + //---------------------------------------------------------------------- + public static function log($outfile, $err) + { + if (QR_LOG_DIR !== false) { + if ($err != '') { + if ($outfile !== false) { + file_put_contents(QR_LOG_DIR.basename($outfile).'-errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); + } else { + file_put_contents(QR_LOG_DIR.'errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); + } + } + } + } + + //---------------------------------------------------------------------- + public static function dumpMask($frame) + { + $width = count($frame); + for($y=0;$y<$width;$y++) { + for($x=0;$x<$width;$x++) { + echo ord($frame[$y][$x]).','; + } + } + } + + //---------------------------------------------------------------------- + public static function markTime($markerId) + { + list($usec, $sec) = explode(" ", microtime()); + $time = ((float)$usec + (float)$sec); + + if (!isset($GLOBALS['qr_time_bench'])) + $GLOBALS['qr_time_bench'] = array(); + + $GLOBALS['qr_time_bench'][$markerId] = $time; + } + + //---------------------------------------------------------------------- + public static function timeBenchmark() + { + self::markTime('finish'); + + $lastTime = 0; + $startTime = 0; + $p = 0; + + echo ' + + '; + + foreach($GLOBALS['qr_time_bench'] as $markerId=>$thisTime) { + if ($p > 0) { + echo ''; + } else { + $startTime = $thisTime; + } + + $p++; + $lastTime = $thisTime; + } + + echo ' + + +
BENCHMARK
till '.$markerId.': '.number_format($thisTime-$lastTime, 6).'s
TOTAL: '.number_format($lastTime-$startTime, 6).'s
'; + } + + } + + //########################################################################## + + QRtools::markTime('start'); + \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/tools/merge.bat b/addons/unishop/library/phpqrcode/tools/merge.bat new file mode 100644 index 0000000..2b5eebb --- /dev/null +++ b/addons/unishop/library/phpqrcode/tools/merge.bat @@ -0,0 +1,2 @@ +php ./merge.php +pause \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/tools/merge.php b/addons/unishop/library/phpqrcode/tools/merge.php new file mode 100644 index 0000000..9e809c8 --- /dev/null +++ b/addons/unishop/library/phpqrcode/tools/merge.php @@ -0,0 +1,70 @@ + + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + $QR_BASEDIR = dirname(__FILE__).DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR; + $QR_TOOLSDIR = dirname(__FILE__).DIRECTORY_SEPARATOR; + + $outputFile = $QR_BASEDIR.'phpqrcode.php'; + + // Required libs + + $fileList = array( + $QR_BASEDIR.'qrconst.php', + $QR_TOOLSDIR.'merged_config.php', + $QR_BASEDIR.'qrtools.php', + $QR_BASEDIR.'qrspec.php', + $QR_BASEDIR.'qrimage.php', + $QR_BASEDIR.'qrinput.php', + $QR_BASEDIR.'qrbitstream.php', + $QR_BASEDIR.'qrsplit.php', + $QR_BASEDIR.'qrrscode.php', + $QR_BASEDIR.'qrmask.php', + $QR_BASEDIR.'qrencode.php' + ); + + $headerFile = $QR_TOOLSDIR.'merged_header.php'; + $versionFile = $QR_BASEDIR.'VERSION'; + + $outputCode = ''; + + foreach($fileList as $fileName) { + $outputCode .= "\n\n".'//---- '.basename($fileName).' -----------------------------'."\n\n"; + $anotherCode = file_get_contents($fileName); + $anotherCode = preg_replace ('/^<\?php/', '', $anotherCode); + $anotherCode = preg_replace ('/\?>\*$/', '', $anotherCode); + $outputCode .= "\n\n".$anotherCode."\n\n"; + } + + $versionDataEx = explode("\n", file_get_contents($versionFile)); + + $outputContents = file_get_contents($headerFile); + $outputContents .= "\n\n/*\n * Version: ".trim($versionDataEx[0])."\n * Build: ".trim($versionDataEx[1])."\n */\n\n"; + $outputContents .= $outputCode; + + file_put_contents($outputFile, $outputContents); + + \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/tools/merge.sh b/addons/unishop/library/phpqrcode/tools/merge.sh new file mode 100644 index 0000000..1a2515b --- /dev/null +++ b/addons/unishop/library/phpqrcode/tools/merge.sh @@ -0,0 +1,2 @@ +#!/bin/sh +php ./merge.php \ No newline at end of file diff --git a/addons/unishop/library/phpqrcode/tools/merged_config.php b/addons/unishop/library/phpqrcode/tools/merged_config.php new file mode 100644 index 0000000..8cd917d --- /dev/null +++ b/addons/unishop/library/phpqrcode/tools/merged_config.php @@ -0,0 +1,17 @@ + + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + \ No newline at end of file diff --git a/runtime/cache/4e/819c837d54a6ed09abc77a8560a66f.php b/runtime/cache/4e/819c837d54a6ed09abc77a8560a66f.php new file mode 100644 index 0000000..9a66a98 --- /dev/null +++ b/runtime/cache/4e/819c837d54a6ed09abc77a8560a66f.php @@ -0,0 +1,4 @@ + +a:1:{s:8:"app_init";a:2:{i:0;s:17:"\addons\epay\Epay";i:1;s:23:"\addons\unishop\Unishop";}} \ No newline at end of file diff --git a/runtime/log/202011/15.log b/runtime/log/202011/15.log new file mode 100644 index 0000000..d5bd236 --- /dev/null +++ b/runtime/log/202011/15.log @@ -0,0 +1,802 @@ +--------------------------------------------------------------- +[ 2020-11-15T14:18:26+08:00 ] 127.0.0.1 GET fastadmin.com/ +[运行时间:0.631755s] [吞吐率:1.58req/s] [内存消耗:3,330.34kb] [文件加载:128] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.013664s ] +[ info ] [ CACHE ] INIT File +[ info ] [ BEHAVIOR ] Run \addons\epay\Epay @app_init [ RunTime:0.020635s ] +[ info ] [ BEHAVIOR ] Run \addons\unishop\Unishop @app_init [ RunTime:0.000847s ] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000995s ] +[ info ] [ LANG ] F:\www\fastadmin\shop\thinkphp\lang\zh-cn.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @app_dispatch [ RunTime:0.013416s ] +[ info ] [ ROUTE ] array ( + 'type' => 'module', + 'module' => + array ( + 0 => '', + 1 => NULL, + 2 => NULL, + ), +) +[ info ] [ HEADER ] array ( + 'host' => 'fastadmin.com', + 'connection' => 'keep-alive', + 'upgrade-insecure-requests' => '1', + 'user-agent' => 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36', + 'accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3', + 'accept-encoding' => 'gzip, deflate', + 'accept-language' => 'zh-CN,zh;q=0.9', +) +[ info ] [ PARAM ] array ( +) +[ info ] [ LANG ] F:\www\fastadmin\shop\public/../application/index\lang\zh-cn.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @module_init [ RunTime:0.003561s ] +[ info ] [ LANG ] F:\www\fastadmin\shop\public/../application/index/lang/zh-cn/index.php +[ info ] [ RUN ] app\index\controller\Index->index[ F:\www\fastadmin\shop\application\index\controller\Index.php ] +[ info ] [ VIEW ] F:\www\fastadmin\shop\public/../application/index\view\index\index.html [ array ( + 0 => 'user', + 1 => 'site', + 2 => 'config', +) ] +[ info ] [ LOG ] INIT File +--------------------------------------------------------------- +[ 2020-11-15T14:18:39+08:00 ] 127.0.0.1 GET fastadmin.com/ +[运行时间:0.103640s] [吞吐率:9.65req/s] [内存消耗:3,060.45kb] [文件加载:126] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000179s ] +[ info ] [ CACHE ] INIT File +[ info ] [ BEHAVIOR ] Run \addons\epay\Epay @app_init [ RunTime:0.005077s ] +[ info ] [ BEHAVIOR ] Run \addons\unishop\Unishop @app_init [ RunTime:0.000550s ] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000665s ] +[ info ] [ LANG ] F:\www\fastadmin\shop\thinkphp\lang\zh-cn.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @app_dispatch [ RunTime:0.000726s ] +[ info ] [ ROUTE ] array ( + 'type' => 'module', + 'module' => + array ( + 0 => '', + 1 => NULL, + 2 => NULL, + ), +) +[ info ] [ HEADER ] array ( + 'host' => 'fastadmin.com', + 'connection' => 'keep-alive', + 'pragma' => 'no-cache', + 'cache-control' => 'no-cache', + 'upgrade-insecure-requests' => '1', + 'user-agent' => 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1', + 'accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3', + 'accept-encoding' => 'gzip, deflate', + 'accept-language' => 'zh-CN,zh;q=0.9', +) +[ info ] [ PARAM ] array ( +) +[ info ] [ LANG ] F:\www\fastadmin\shop\public/../application/index\lang\zh-cn.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @module_init [ RunTime:0.003475s ] +[ info ] [ LANG ] F:\www\fastadmin\shop\public/../application/index/lang/zh-cn/index.php +[ info ] [ RUN ] app\index\controller\Index->index[ F:\www\fastadmin\shop\application\index\controller\Index.php ] +[ info ] [ VIEW ] F:\www\fastadmin\shop\public/../application/index\view\index\index.html [ array ( + 0 => 'user', + 1 => 'site', + 2 => 'config', +) ] +[ info ] [ LOG ] INIT File +--------------------------------------------------------------- +[ 2020-11-15T14:18:40+08:00 ] 127.0.0.1 GET fastadmin.com/ +[运行时间:0.070047s] [吞吐率:14.28req/s] [内存消耗:3,060.45kb] [文件加载:126] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000120s ] +[ info ] [ CACHE ] INIT File +[ info ] [ BEHAVIOR ] Run \addons\epay\Epay @app_init [ RunTime:0.003597s ] +[ info ] [ BEHAVIOR ] Run \addons\unishop\Unishop @app_init [ RunTime:0.000573s ] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000695s ] +[ info ] [ LANG ] F:\www\fastadmin\shop\thinkphp\lang\zh-cn.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @app_dispatch [ RunTime:0.000634s ] +[ info ] [ ROUTE ] array ( + 'type' => 'module', + 'module' => + array ( + 0 => '', + 1 => NULL, + 2 => NULL, + ), +) +[ info ] [ HEADER ] array ( + 'host' => 'fastadmin.com', + 'connection' => 'keep-alive', + 'pragma' => 'no-cache', + 'cache-control' => 'no-cache', + 'upgrade-insecure-requests' => '1', + 'user-agent' => 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1', + 'accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3', + 'accept-encoding' => 'gzip, deflate', + 'accept-language' => 'zh-CN,zh;q=0.9', +) +[ info ] [ PARAM ] array ( +) +[ info ] [ LANG ] F:\www\fastadmin\shop\public/../application/index\lang\zh-cn.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @module_init [ RunTime:0.003216s ] +[ info ] [ LANG ] F:\www\fastadmin\shop\public/../application/index/lang/zh-cn/index.php +[ info ] [ RUN ] app\index\controller\Index->index[ F:\www\fastadmin\shop\application\index\controller\Index.php ] +[ info ] [ VIEW ] F:\www\fastadmin\shop\public/../application/index\view\index\index.html [ array ( + 0 => 'user', + 1 => 'site', + 2 => 'config', +) ] +[ info ] [ LOG ] INIT File +--------------------------------------------------------------- +[ 2020-11-15T14:18:47+08:00 ] 127.0.0.1 GET fastadmin.com/index/user/index.html +[运行时间:0.395074s] [吞吐率:2.53req/s] [内存消耗:3,959.76kb] [文件加载:134] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000118s ] +[ info ] [ CACHE ] INIT File +[ info ] [ BEHAVIOR ] Run \addons\epay\Epay @app_init [ RunTime:0.003462s ] +[ info ] [ BEHAVIOR ] Run \addons\unishop\Unishop @app_init [ RunTime:0.000563s ] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000681s ] +[ info ] [ LANG ] F:\www\fastadmin\shop\thinkphp\lang\zh-cn.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @app_dispatch [ RunTime:0.000613s ] +[ info ] [ ROUTE ] array ( + 'type' => 'module', + 'module' => + array ( + 0 => 'index', + 1 => 'user', + 2 => 'index', + ), +) +[ info ] [ HEADER ] array ( + 'host' => 'fastadmin.com', + 'connection' => 'keep-alive', + 'pragma' => 'no-cache', + 'cache-control' => 'no-cache', + 'upgrade-insecure-requests' => '1', + 'user-agent' => 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1', + 'accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3', + 'referer' => 'http://fastadmin.com/', + 'accept-encoding' => 'gzip, deflate', + 'accept-language' => 'zh-CN,zh;q=0.9', +) +[ info ] [ PARAM ] array ( +) +[ info ] [ LANG ] F:\www\fastadmin\shop\public/../application/index\lang\zh-cn.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @module_init [ RunTime:0.001965s ] +[ info ] [ TOKEN ] INIT Mysql +[ info ] [ DB ] INIT mysql +[ info ] [ VIEW ] F:\www\fastadmin\shop\public/../application/common\view\tpl\dispatch_jump.tpl [ array ( + 0 => 'code', + 1 => 'msg', + 2 => 'data', + 3 => 'url', + 4 => 'wait', +) ] +[ info ] [ LOG ] INIT File +--------------------------------------------------------------- +[ 2020-11-15T14:18:50+08:00 ] 127.0.0.1 GET fastadmin.com/index/user/login.html +[运行时间:0.120839s] [吞吐率:8.28req/s] [内存消耗:3,426.71kb] [文件加载:127] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000153s ] +[ info ] [ CACHE ] INIT File +[ info ] [ BEHAVIOR ] Run \addons\epay\Epay @app_init [ RunTime:0.003816s ] +[ info ] [ BEHAVIOR ] Run \addons\unishop\Unishop @app_init [ RunTime:0.000513s ] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000670s ] +[ info ] [ LANG ] F:\www\fastadmin\shop\thinkphp\lang\zh-cn.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @app_dispatch [ RunTime:0.000606s ] +[ info ] [ ROUTE ] array ( + 'type' => 'module', + 'module' => + array ( + 0 => 'index', + 1 => 'user', + 2 => 'login', + ), +) +[ info ] [ HEADER ] array ( + 'host' => 'fastadmin.com', + 'connection' => 'keep-alive', + 'pragma' => 'no-cache', + 'cache-control' => 'no-cache', + 'upgrade-insecure-requests' => '1', + 'user-agent' => 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1', + 'accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3', + 'referer' => 'http://fastadmin.com/index/user/index.html', + 'accept-encoding' => 'gzip, deflate', + 'accept-language' => 'zh-CN,zh;q=0.9', +) +[ info ] [ PARAM ] array ( +) +[ info ] [ LANG ] F:\www\fastadmin\shop\public/../application/index\lang\zh-cn.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @module_init [ RunTime:0.002046s ] +[ info ] [ LANG ] F:\www\fastadmin\shop\public/../application/index/lang/zh-cn/user.php +[ info ] [ RUN ] app\index\controller\User->login[ F:\www\fastadmin\shop\application\index\controller\User.php ] +[ info ] [ VIEW ] F:\www\fastadmin\shop\public/../application/index\view\user\login.html [ array ( + 0 => 'user', + 1 => 'site', + 2 => 'config', + 3 => 'url', + 4 => 'title', +) ] +[ info ] [ SESSION ] INIT array ( + 'id' => '', + 'var_session_id' => '', + 'prefix' => 'think', + 'type' => '', + 'auto_start' => true, +) +[ info ] [ LOG ] INIT File +--------------------------------------------------------------- +[ 2020-11-15T14:18:51+08:00 ] 127.0.0.1 GET fastadmin.com/assets/css/bootstrap.css.map +[运行时间:0.109980s] [吞吐率:9.09req/s] [内存消耗:2,408.42kb] [文件加载:116] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000112s ] +[ info ] [ CACHE ] INIT File +[ info ] [ BEHAVIOR ] Run \addons\epay\Epay @app_init [ RunTime:0.003679s ] +[ info ] [ BEHAVIOR ] Run \addons\unishop\Unishop @app_init [ RunTime:0.000614s ] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000729s ] +[ info ] [ LANG ] F:\www\fastadmin\shop\thinkphp\lang\zh-cn.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @app_dispatch [ RunTime:0.000621s ] +[ info ] [ ROUTE ] array ( + 'type' => 'module', + 'module' => + array ( + 0 => 'assets', + 1 => 'css', + 2 => 'bootstrap.css.map', + ), +) +[ info ] [ HEADER ] array ( + 'host' => 'fastadmin.com', + 'connection' => 'keep-alive', + 'user-agent' => 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1', + 'cache-control' => 'no-cache', + 'accept-encoding' => 'gzip, deflate', + 'accept-language' => 'zh-CN,zh;q=0.9', + 'cookie' => 'PHPSESSID=rru8hbggil0b8fhgh57op70gsd', +) +[ info ] [ PARAM ] array ( +) +[ info ] [ LOG ] INIT File +--------------------------------------------------------------- +[ 2020-11-15T14:18:51+08:00 ] 127.0.0.1 GET fastadmin.com/assets/css/frontend.css.map +[运行时间:0.057956s] [吞吐率:17.25req/s] [内存消耗:2,408.42kb] [文件加载:116] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000137s ] +[ info ] [ CACHE ] INIT File +[ info ] [ BEHAVIOR ] Run \addons\epay\Epay @app_init [ RunTime:0.005566s ] +[ info ] [ BEHAVIOR ] Run \addons\unishop\Unishop @app_init [ RunTime:0.000555s ] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000755s ] +[ info ] [ LANG ] F:\www\fastadmin\shop\thinkphp\lang\zh-cn.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @app_dispatch [ RunTime:0.000921s ] +[ info ] [ ROUTE ] array ( + 'type' => 'module', + 'module' => + array ( + 0 => 'assets', + 1 => 'css', + 2 => 'frontend.css.map', + ), +) +[ info ] [ HEADER ] array ( + 'host' => 'fastadmin.com', + 'connection' => 'keep-alive', + 'user-agent' => 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1', + 'cache-control' => 'no-cache', + 'accept-encoding' => 'gzip, deflate', + 'accept-language' => 'zh-CN,zh;q=0.9', + 'cookie' => 'PHPSESSID=rru8hbggil0b8fhgh57op70gsd', +) +[ info ] [ PARAM ] array ( +) +[ info ] [ LOG ] INIT File +--------------------------------------------------------------- +[ 2020-11-15T14:18:51+08:00 ] 127.0.0.1 GET fastadmin.com/assets/css/fastadmin.css.map +[运行时间:0.064304s] [吞吐率:15.55req/s] [内存消耗:2,408.42kb] [文件加载:116] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000222s ] +[ info ] [ CACHE ] INIT File +[ info ] [ BEHAVIOR ] Run \addons\epay\Epay @app_init [ RunTime:0.005730s ] +[ info ] [ BEHAVIOR ] Run \addons\unishop\Unishop @app_init [ RunTime:0.001114s ] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.001253s ] +[ info ] [ LANG ] F:\www\fastadmin\shop\thinkphp\lang\zh-cn.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @app_dispatch [ RunTime:0.000826s ] +[ info ] [ ROUTE ] array ( + 'type' => 'module', + 'module' => + array ( + 0 => 'assets', + 1 => 'css', + 2 => 'fastadmin.css.map', + ), +) +[ info ] [ HEADER ] array ( + 'host' => 'fastadmin.com', + 'connection' => 'keep-alive', + 'user-agent' => 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1', + 'cache-control' => 'no-cache', + 'accept-encoding' => 'gzip, deflate', + 'accept-language' => 'zh-CN,zh;q=0.9', + 'cookie' => 'PHPSESSID=rru8hbggil0b8fhgh57op70gsd', +) +[ info ] [ PARAM ] array ( +) +[ info ] [ LOG ] INIT File +--------------------------------------------------------------- +[ 2020-11-15T14:18:51+08:00 ] 127.0.0.1 GET fastadmin.com/index/ajax/lang?callback=define&controllername=user&v=1605421130 +[运行时间:0.092190s] [吞吐率:10.85req/s] [内存消耗:3,079.69kb] [文件加载:126] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000161s ] +[ info ] [ CACHE ] INIT File +[ info ] [ BEHAVIOR ] Run \addons\epay\Epay @app_init [ RunTime:0.004235s ] +[ info ] [ BEHAVIOR ] Run \addons\unishop\Unishop @app_init [ RunTime:0.000598s ] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000716s ] +[ info ] [ LANG ] F:\www\fastadmin\shop\thinkphp\lang\zh-cn.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @app_dispatch [ RunTime:0.000909s ] +[ info ] [ ROUTE ] array ( + 'type' => 'module', + 'module' => + array ( + 0 => 'index', + 1 => 'ajax', + 2 => 'lang', + ), +) +[ info ] [ HEADER ] array ( + 'host' => 'fastadmin.com', + 'connection' => 'keep-alive', + 'pragma' => 'no-cache', + 'cache-control' => 'no-cache', + 'user-agent' => 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1', + 'accept' => '*/*', + 'referer' => 'http://fastadmin.com/index/user/login.html', + 'accept-encoding' => 'gzip, deflate', + 'accept-language' => 'zh-CN,zh;q=0.9', + 'cookie' => 'PHPSESSID=rru8hbggil0b8fhgh57op70gsd', +) +[ info ] [ PARAM ] array ( + 'callback' => 'define', + 'controllername' => 'user', + 'v' => '1605421130', +) +[ info ] [ LANG ] F:\www\fastadmin\shop\public/../application/index\lang\zh-cn.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @module_init [ RunTime:0.002316s ] +[ info ] [ LANG ] F:\www\fastadmin\shop\public/../application/index/lang/zh-cn/ajax.php +[ info ] [ RUN ] app\index\controller\Ajax->lang[ F:\www\fastadmin\shop\application\index\controller\Ajax.php ] +[ info ] [ LANG ] F:\www\fastadmin\shop\public/../application/index/lang/zh-cn/user.php +[ info ] [ LOG ] INIT File +--------------------------------------------------------------- +[ 2020-11-15T14:18:53+08:00 ] 127.0.0.1 POST fastadmin.com/index/user/login.html +[运行时间:0.216245s] [吞吐率:4.62req/s] [内存消耗:4,130.55kb] [文件加载:133] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000192s ] +[ info ] [ CACHE ] INIT File +[ info ] [ BEHAVIOR ] Run \addons\epay\Epay @app_init [ RunTime:0.004481s ] +[ info ] [ BEHAVIOR ] Run \addons\unishop\Unishop @app_init [ RunTime:0.000514s ] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000626s ] +[ info ] [ LANG ] F:\www\fastadmin\shop\thinkphp\lang\zh-cn.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @app_dispatch [ RunTime:0.000622s ] +[ info ] [ ROUTE ] array ( + 'type' => 'module', + 'module' => + array ( + 0 => 'index', + 1 => 'user', + 2 => 'login', + ), +) +[ info ] [ HEADER ] array ( + 'host' => 'fastadmin.com', + 'connection' => 'keep-alive', + 'content-length' => '147', + 'pragma' => 'no-cache', + 'cache-control' => 'no-cache', + 'accept' => 'application/json, text/javascript, */*; q=0.01', + 'origin' => 'http://fastadmin.com', + 'x-requested-with' => 'XMLHttpRequest', + 'user-agent' => 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1', + 'content-type' => 'application/x-www-form-urlencoded; charset=UTF-8', + 'referer' => 'http://fastadmin.com/index/user/login.html', + 'accept-encoding' => 'gzip, deflate', + 'accept-language' => 'zh-CN,zh;q=0.9', + 'cookie' => 'PHPSESSID=rru8hbggil0b8fhgh57op70gsd', +) +[ info ] [ PARAM ] array ( + 'url' => 'http://fastadmin.com/index/user/index.html', + '__token__' => '4327f5d1b7a06cb943332330310dcad2', + 'account' => 'admin', + 'password' => 'B6mWV8L7Yc', + 'keeplogin' => '1', +) +[ info ] [ LANG ] F:\www\fastadmin\shop\public/../application/index\lang\zh-cn.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @module_init [ RunTime:0.002394s ] +[ info ] [ LANG ] F:\www\fastadmin\shop\public/../application/index/lang/zh-cn/user.php +[ info ] [ RUN ] app\index\controller\User->login[ F:\www\fastadmin\shop\application\index\controller\User.php ] +[ info ] [ SESSION ] INIT array ( + 'id' => '', + 'var_session_id' => '', + 'prefix' => 'think', + 'type' => '', + 'auto_start' => true, +) +[ info ] [ DB ] INIT mysql +[ info ] [ LOG ] INIT File +--------------------------------------------------------------- +[ 2020-11-15T14:41:48+08:00 ] 127.0.0.1 GET fastadmin.com/addons/unishop/order/addQRCode +[运行时间:0.509167s] [吞吐率:1.96req/s] [内存消耗:3,890.23kb] [文件加载:134] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000125s ] +[ info ] [ CACHE ] INIT File +[ info ] [ BEHAVIOR ] Run \addons\epay\Epay @app_init [ RunTime:0.004922s ] +[ info ] [ BEHAVIOR ] Run \addons\unishop\Unishop @app_init [ RunTime:0.000589s ] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000750s ] +[ info ] [ LANG ] F:\www\fastadmin\shop\thinkphp\lang\zh-cn.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @app_dispatch [ RunTime:0.000761s ] +[ info ] [ ROUTE ] array ( + 'type' => 'method', + 'method' => + array ( + 0 => '\\think\\addons\\Route', + 1 => 'execute', + ), + 'var' => + array ( + ), +) +[ info ] [ HEADER ] array ( + 'host' => 'fastadmin.com', + 'connection' => 'keep-alive', + 'pragma' => 'no-cache', + 'cache-control' => 'no-cache', + 'upgrade-insecure-requests' => '1', + 'user-agent' => 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1', + 'accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3', + 'accept-encoding' => 'gzip, deflate', + 'accept-language' => 'zh-CN,zh;q=0.9', + 'cookie' => 'PHPSESSID=rru8hbggil0b8fhgh57op70gsd', +) +[ info ] [ PARAM ] array ( + 'addon' => 'unishop', + 'controller' => 'order', + 'action' => 'addQRCode', +) +[ info ] [ RUN ] think\addons\Route->execute[ F:\www\fastadmin\shop\vendor\karsonzhang\fastadmin-addons\src\addons\Route.php ] +[ info ] [ LANG ] F:\www\fastadmin\shop\public/../application/common\lang\zh-cn\addon.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @addon_begin [ RunTime:0.025454s ] +[ info ] [ TOKEN ] INIT Mysql +[ info ] [ DB ] INIT mysql +[ info ] [ LOG ] INIT File +--------------------------------------------------------------- +[ 2020-11-15T14:41:48+08:00 ] 127.0.0.1 GET fastadmin.com/favicon.ico +[运行时间:0.048117s] [吞吐率:20.78req/s] [内存消耗:2,409.15kb] [文件加载:116] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000117s ] +[ info ] [ CACHE ] INIT File +[ info ] [ BEHAVIOR ] Run \addons\epay\Epay @app_init [ RunTime:0.004571s ] +[ info ] [ BEHAVIOR ] Run \addons\unishop\Unishop @app_init [ RunTime:0.000516s ] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000629s ] +[ info ] [ LANG ] F:\www\fastadmin\shop\thinkphp\lang\zh-cn.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @app_dispatch [ RunTime:0.000627s ] +[ info ] [ ROUTE ] array ( + 'type' => 'module', + 'module' => + array ( + 0 => 'favicon.ico', + 1 => NULL, + 2 => NULL, + ), +) +[ info ] [ HEADER ] array ( + 'host' => 'fastadmin.com', + 'connection' => 'keep-alive', + 'pragma' => 'no-cache', + 'cache-control' => 'no-cache', + 'user-agent' => 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1', + 'accept' => 'image/webp,image/apng,image/*,*/*;q=0.8', + 'referer' => 'http://fastadmin.com/addons/unishop/order/addQRCode', + 'accept-encoding' => 'gzip, deflate', + 'accept-language' => 'zh-CN,zh;q=0.9', + 'cookie' => 'PHPSESSID=rru8hbggil0b8fhgh57op70gsd', +) +[ info ] [ PARAM ] array ( +) +[ info ] [ LOG ] INIT File +--------------------------------------------------------------- +[ 2020-11-15T14:45:34+08:00 ] 127.0.0.1 GET fastadmin.com/addons/unishop/order/addQRCode +[运行时间:144.286140s] [吞吐率:0.01req/s] [内存消耗:3,828.24kb] [文件加载:130] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000130s ] +[ info ] [ CACHE ] INIT File +[ info ] [ BEHAVIOR ] Run \addons\epay\Epay @app_init [ RunTime:0.003937s ] +[ info ] [ BEHAVIOR ] Run \addons\unishop\Unishop @app_init [ RunTime:0.000553s ] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000675s ] +[ info ] [ LANG ] F:\www\fastadmin\shop\thinkphp\lang\zh-cn.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @app_dispatch [ RunTime:0.001000s ] +[ info ] [ ROUTE ] array ( + 'type' => 'method', + 'method' => + array ( + 0 => '\\think\\addons\\Route', + 1 => 'execute', + ), + 'var' => + array ( + ), +) +[ info ] [ HEADER ] array ( + 'host' => 'fastadmin.com', + 'connection' => 'keep-alive', + 'pragma' => 'no-cache', + 'cache-control' => 'no-cache', + 'upgrade-insecure-requests' => '1', + 'user-agent' => 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36', + 'accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3', + 'accept-encoding' => 'gzip, deflate', + 'accept-language' => 'zh-CN,zh;q=0.9', + 'cookie' => 'PHPSESSID=rru8hbggil0b8fhgh57op70gsd', +) +[ info ] [ PARAM ] array ( + 'addon' => 'unishop', + 'controller' => 'order', + 'action' => 'addQRCode', +) +[ info ] [ RUN ] think\addons\Route->execute[ F:\www\fastadmin\shop\vendor\karsonzhang\fastadmin-addons\src\addons\Route.php ] +[ info ] [ LANG ] F:\www\fastadmin\shop\public/../application/common\lang\zh-cn\addon.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @addon_begin [ RunTime:0.002664s ] +[ info ] [ TOKEN ] INIT Mysql +[ info ] [ DB ] INIT mysql +[ info ] [ LOG ] INIT File +--------------------------------------------------------------- +[ 2020-11-15T14:45:57+08:00 ] 127.0.0.1 GET fastadmin.com/addons/unishop/order/addQRCode +[运行时间:16.778055s] [吞吐率:0.06req/s] [内存消耗:3,371.68kb] [文件加载:130] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000156s ] +[ info ] [ CACHE ] INIT File +[ info ] [ BEHAVIOR ] Run \addons\epay\Epay @app_init [ RunTime:0.004018s ] +[ info ] [ BEHAVIOR ] Run \addons\unishop\Unishop @app_init [ RunTime:0.000560s ] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000690s ] +[ info ] [ LANG ] F:\www\fastadmin\shop\thinkphp\lang\zh-cn.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @app_dispatch [ RunTime:0.000929s ] +[ info ] [ ROUTE ] array ( + 'type' => 'method', + 'method' => + array ( + 0 => '\\think\\addons\\Route', + 1 => 'execute', + ), + 'var' => + array ( + ), +) +[ info ] [ HEADER ] array ( + 'host' => 'fastadmin.com', + 'connection' => 'keep-alive', + 'pragma' => 'no-cache', + 'cache-control' => 'no-cache', + 'upgrade-insecure-requests' => '1', + 'user-agent' => 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36', + 'accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3', + 'accept-encoding' => 'gzip, deflate', + 'accept-language' => 'zh-CN,zh;q=0.9', + 'cookie' => 'PHPSESSID=rru8hbggil0b8fhgh57op70gsd', +) +[ info ] [ PARAM ] array ( + 'addon' => 'unishop', + 'controller' => 'order', + 'action' => 'addQRCode', +) +[ info ] [ RUN ] think\addons\Route->execute[ F:\www\fastadmin\shop\vendor\karsonzhang\fastadmin-addons\src\addons\Route.php ] +[ info ] [ LANG ] F:\www\fastadmin\shop\public/../application/common\lang\zh-cn\addon.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @addon_begin [ RunTime:0.002783s ] +[ info ] [ LANG ] F:\www\fastadmin\shop\addons\unishop/lang/zh-cn.php +[ info ] [ LANG ] F:\www\fastadmin\shop\addons\unishop/lang/zh-cn/order.php +[ info ] [ LOG ] INIT File +[ error ] [0]类型错误: Too few arguments to function addons\unishop\controller\Order::addQRCode(), 0 passed and exactly 1 expected[F:\www\fastadmin\shop\addons\unishop\controller\Order.php:697] +--------------------------------------------------------------- +[ 2020-11-15T14:47:41+08:00 ] 127.0.0.1 GET fastadmin.com/addons/unishop/order/addQRCode +[运行时间:69.342807s] [吞吐率:0.01req/s] [内存消耗:3,826.75kb] [文件加载:126] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000133s ] +[ info ] [ CACHE ] INIT File +[ info ] [ BEHAVIOR ] Run \addons\epay\Epay @app_init [ RunTime:0.003960s ] +[ info ] [ BEHAVIOR ] Run \addons\unishop\Unishop @app_init [ RunTime:0.000614s ] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000745s ] +[ info ] [ LANG ] F:\www\fastadmin\shop\thinkphp\lang\zh-cn.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @app_dispatch [ RunTime:0.001034s ] +[ info ] [ ROUTE ] array ( + 'type' => 'method', + 'method' => + array ( + 0 => '\\think\\addons\\Route', + 1 => 'execute', + ), + 'var' => + array ( + ), +) +[ info ] [ HEADER ] array ( + 'host' => 'fastadmin.com', + 'connection' => 'keep-alive', + 'pragma' => 'no-cache', + 'cache-control' => 'no-cache', + 'upgrade-insecure-requests' => '1', + 'user-agent' => 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36', + 'accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3', + 'accept-encoding' => 'gzip, deflate', + 'accept-language' => 'zh-CN,zh;q=0.9', + 'cookie' => 'PHPSESSID=rru8hbggil0b8fhgh57op70gsd', +) +[ info ] [ PARAM ] array ( + 'addon' => 'unishop', + 'controller' => 'order', + 'action' => 'addQRCode', +) +[ info ] [ RUN ] think\addons\Route->execute[ F:\www\fastadmin\shop\vendor\karsonzhang\fastadmin-addons\src\addons\Route.php ] +[ info ] [ LANG ] F:\www\fastadmin\shop\public/../application/common\lang\zh-cn\addon.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @addon_begin [ RunTime:0.004080s ] +[ info ] [ LANG ] F:\www\fastadmin\shop\addons\unishop/lang/zh-cn.php +[ info ] [ LANG ] F:\www\fastadmin\shop\addons\unishop/lang/zh-cn/order.php +[ info ] [ LOG ] INIT File +--------------------------------------------------------------- +[ 2020-11-15T14:52:04+08:00 ] 127.0.0.1 GET fastadmin.com/addons/unishop/order/addQRCode +[运行时间:176.464727s] [吞吐率:0.01req/s] [内存消耗:3,896.80kb] [文件加载:134] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000295s ] +[ info ] [ CACHE ] INIT File +[ info ] [ BEHAVIOR ] Run \addons\epay\Epay @app_init [ RunTime:0.003763s ] +[ info ] [ BEHAVIOR ] Run \addons\unishop\Unishop @app_init [ RunTime:0.000587s ] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000715s ] +[ info ] [ LANG ] F:\www\fastadmin\shop\thinkphp\lang\zh-cn.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @app_dispatch [ RunTime:0.000801s ] +[ info ] [ ROUTE ] array ( + 'type' => 'method', + 'method' => + array ( + 0 => '\\think\\addons\\Route', + 1 => 'execute', + ), + 'var' => + array ( + ), +) +[ info ] [ HEADER ] array ( + 'host' => 'fastadmin.com', + 'connection' => 'keep-alive', + 'pragma' => 'no-cache', + 'cache-control' => 'no-cache', + 'upgrade-insecure-requests' => '1', + 'user-agent' => 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36', + 'accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3', + 'accept-encoding' => 'gzip, deflate', + 'accept-language' => 'zh-CN,zh;q=0.9', + 'cookie' => 'PHPSESSID=rru8hbggil0b8fhgh57op70gsd', +) +[ info ] [ PARAM ] array ( + 'addon' => 'unishop', + 'controller' => 'order', + 'action' => 'addQRCode', +) +[ info ] [ RUN ] think\addons\Route->execute[ F:\www\fastadmin\shop\vendor\karsonzhang\fastadmin-addons\src\addons\Route.php ] +[ info ] [ LANG ] F:\www\fastadmin\shop\public/../application/common\lang\zh-cn\addon.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @addon_begin [ RunTime:0.003488s ] +[ info ] [ TOKEN ] INIT Mysql +[ info ] [ DB ] INIT mysql +[ info ] [ LOG ] INIT File +--------------------------------------------------------------- +[ 2020-11-15T14:52:24+08:00 ] 127.0.0.1 GET fastadmin.com/addons/unishop/order/addQRCode?url=sssss +[运行时间:6.382474s] [吞吐率:0.16req/s] [内存消耗:3,898.27kb] [文件加载:132] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000131s ] +[ info ] [ CACHE ] INIT File +[ info ] [ BEHAVIOR ] Run \addons\epay\Epay @app_init [ RunTime:0.004498s ] +[ info ] [ BEHAVIOR ] Run \addons\unishop\Unishop @app_init [ RunTime:0.000616s ] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000745s ] +[ info ] [ LANG ] F:\www\fastadmin\shop\thinkphp\lang\zh-cn.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @app_dispatch [ RunTime:0.001508s ] +[ info ] [ ROUTE ] array ( + 'type' => 'method', + 'method' => + array ( + 0 => '\\think\\addons\\Route', + 1 => 'execute', + ), + 'var' => + array ( + ), +) +[ info ] [ HEADER ] array ( + 'host' => 'fastadmin.com', + 'connection' => 'keep-alive', + 'pragma' => 'no-cache', + 'cache-control' => 'no-cache', + 'upgrade-insecure-requests' => '1', + 'user-agent' => 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36', + 'accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3', + 'accept-encoding' => 'gzip, deflate', + 'accept-language' => 'zh-CN,zh;q=0.9', + 'cookie' => 'PHPSESSID=rru8hbggil0b8fhgh57op70gsd', +) +[ info ] [ PARAM ] array ( + 'url' => 'sssss', + 'addon' => 'unishop', + 'controller' => 'order', + 'action' => 'addQRCode', +) +[ info ] [ RUN ] think\addons\Route->execute[ F:\www\fastadmin\shop\vendor\karsonzhang\fastadmin-addons\src\addons\Route.php ] +[ info ] [ LANG ] F:\www\fastadmin\shop\public/../application/common\lang\zh-cn\addon.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @addon_begin [ RunTime:0.003666s ] +[ info ] [ LANG ] F:\www\fastadmin\shop\addons\unishop/lang/zh-cn.php +[ info ] [ LANG ] F:\www\fastadmin\shop\addons\unishop/lang/zh-cn/order.php +[ info ] [ LOG ] INIT File +[ error ] [2]file_get_contents(F:\www\fastadmin\shop\/addons/unishop/library/phpqrcode/16054231447876.png): failed to open stream: No such file or directory[F:\www\fastadmin\shop\addons\unishop\controller\Order.php:707] +--------------------------------------------------------------- +[ 2020-11-15T14:53:53+08:00 ] 127.0.0.1 GET fastadmin.com/addons/unishop/order/addQRCode?url=sssss +[运行时间:19.385981s] [吞吐率:0.05req/s] [内存消耗:3,777.16kb] [文件加载:126] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000286s ] +[ info ] [ CACHE ] INIT File +[ info ] [ BEHAVIOR ] Run \addons\epay\Epay @app_init [ RunTime:0.004052s ] +[ info ] [ BEHAVIOR ] Run \addons\unishop\Unishop @app_init [ RunTime:0.000624s ] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000765s ] +[ info ] [ LANG ] F:\www\fastadmin\shop\thinkphp\lang\zh-cn.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @app_dispatch [ RunTime:0.000826s ] +[ info ] [ ROUTE ] array ( + 'type' => 'method', + 'method' => + array ( + 0 => '\\think\\addons\\Route', + 1 => 'execute', + ), + 'var' => + array ( + ), +) +[ info ] [ HEADER ] array ( + 'host' => 'fastadmin.com', + 'connection' => 'keep-alive', + 'pragma' => 'no-cache', + 'cache-control' => 'no-cache', + 'upgrade-insecure-requests' => '1', + 'user-agent' => 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36', + 'accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3', + 'accept-encoding' => 'gzip, deflate', + 'accept-language' => 'zh-CN,zh;q=0.9', + 'cookie' => 'PHPSESSID=rru8hbggil0b8fhgh57op70gsd', +) +[ info ] [ PARAM ] array ( + 'url' => 'sssss', + 'addon' => 'unishop', + 'controller' => 'order', + 'action' => 'addQRCode', +) +[ info ] [ RUN ] think\addons\Route->execute[ F:\www\fastadmin\shop\vendor\karsonzhang\fastadmin-addons\src\addons\Route.php ] +[ info ] [ LANG ] F:\www\fastadmin\shop\public/../application/common\lang\zh-cn\addon.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @addon_begin [ RunTime:0.002818s ] +[ info ] [ LANG ] F:\www\fastadmin\shop\addons\unishop/lang/zh-cn.php +[ info ] [ LANG ] F:\www\fastadmin\shop\addons\unishop/lang/zh-cn/order.php +[ info ] [ LOG ] INIT File +--------------------------------------------------------------- +[ 2020-11-15T14:54:03+08:00 ] 127.0.0.1 GET fastadmin.com/addons/unishop/order/addQRCode?url=sssss +[运行时间:6.685321s] [吞吐率:0.15req/s] [内存消耗:3,828.32kb] [文件加载:126] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000125s ] +[ info ] [ CACHE ] INIT File +[ info ] [ BEHAVIOR ] Run \addons\epay\Epay @app_init [ RunTime:0.005419s ] +[ info ] [ BEHAVIOR ] Run \addons\unishop\Unishop @app_init [ RunTime:0.000626s ] +[ info ] [ BEHAVIOR ] Run Closure @app_init [ RunTime:0.000755s ] +[ info ] [ LANG ] F:\www\fastadmin\shop\thinkphp\lang\zh-cn.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @app_dispatch [ RunTime:0.000738s ] +[ info ] [ ROUTE ] array ( + 'type' => 'method', + 'method' => + array ( + 0 => '\\think\\addons\\Route', + 1 => 'execute', + ), + 'var' => + array ( + ), +) +[ info ] [ HEADER ] array ( + 'host' => 'fastadmin.com', + 'connection' => 'keep-alive', + 'pragma' => 'no-cache', + 'cache-control' => 'no-cache', + 'upgrade-insecure-requests' => '1', + 'user-agent' => 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36', + 'accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3', + 'accept-encoding' => 'gzip, deflate', + 'accept-language' => 'zh-CN,zh;q=0.9', + 'cookie' => 'PHPSESSID=rru8hbggil0b8fhgh57op70gsd', +) +[ info ] [ PARAM ] array ( + 'url' => 'sssss', + 'addon' => 'unishop', + 'controller' => 'order', + 'action' => 'addQRCode', +) +[ info ] [ RUN ] think\addons\Route->execute[ F:\www\fastadmin\shop\vendor\karsonzhang\fastadmin-addons\src\addons\Route.php ] +[ info ] [ LANG ] F:\www\fastadmin\shop\public/../application/common\lang\zh-cn\addon.php +[ info ] [ BEHAVIOR ] Run app\common\behavior\Common @addon_begin [ RunTime:0.002506s ] +[ info ] [ LANG ] F:\www\fastadmin\shop\addons\unishop/lang/zh-cn.php +[ info ] [ LANG ] F:\www\fastadmin\shop\addons\unishop/lang/zh-cn/order.php +[ info ] [ LOG ] INIT File diff --git a/runtime/temp/526fc10f0fce06131d1baa28c0e2a9a6.php b/runtime/temp/526fc10f0fce06131d1baa28c0e2a9a6.php new file mode 100644 index 0000000..1cb8ae8 --- /dev/null +++ b/runtime/temp/526fc10f0fce06131d1baa28c0e2a9a6.php @@ -0,0 +1,73 @@ + + + + + + + + + + + + + <?php echo $site['name']; ?> + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+

+
+
+
+
+
+
+ + + + + + + + + diff --git a/runtime/temp/7e5693e9e96b6a85dd7dde925571fa5f.php b/runtime/temp/7e5693e9e96b6a85dd7dde925571fa5f.php new file mode 100644 index 0000000..1240f2c --- /dev/null +++ b/runtime/temp/7e5693e9e96b6a85dd7dde925571fa5f.php @@ -0,0 +1,174 @@ + + + + + +<?php echo (isset($title) && ($title !== '')?$title:''); ?> – <?php echo $site['name']; ?> + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ +
+ +
+ + + + + + \ No newline at end of file diff --git a/runtime/temp/dee8a91fd4bf59cbbed6aeed00ef1a4f.php b/runtime/temp/dee8a91fd4bf59cbbed6aeed00ef1a4f.php new file mode 100644 index 0000000..d22e0ae --- /dev/null +++ b/runtime/temp/dee8a91fd4bf59cbbed6aeed00ef1a4f.php @@ -0,0 +1,64 @@ + + + + + + <?php echo __('Warning'); ?> + + + + + + +
+
+ +
+

+ +

+ ' . $wait . ''); ?> +

+ +

+ + + + +

+
+ + + + + \ No newline at end of file