diff --git a/README.md b/README.md index b1d2f2f0ee5c51c0c296f5b5c5d932053209d53e..1eb61d5144a30f17c4d33d5509aa3db20f3e2140 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,185 @@ --- -title: Qr Scan Difficulty -emoji: 🏃 -colorFrom: yellow +title: QR Scan Difficulty +emoji: 📷 +colorFrom: green colorTo: red sdk: static pinned: false +license: other +short_description: Not every phone reads the same QR codes, measured --- -Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference +# Not every phone reads the same QR codes + +A one-page answer to "will this QR code scan?", for people who know why QR codes matter but don't +have time for a dashboard. Every number comes from measured decodes. + +Every iPhone, about 1 in 4 smartphones in use, has the same scanner: Apple's, which read 69% of our +6,499 test codes. On the other 3 in 4, more than 3 billion phones, the scanner depends on the maker +and the app, and the scanners Android phones come with read from 42% to 68%: + +- **Samsung's own**, in its Camera app ([Samsung's guide](https://www.samsung.com/us/support/answer/ANS10001925/)), + on more than a billion phones: about 59%, measured on a real Galaxy A57 from a sample of the codes. It + misses about 15 of every 100 codes an iPhone reads. +- **Google's ML Kit**, which Android's own QR button (lock screen and Quick Settings) opens, as on Pixel phones + ([Android's source](https://android.googlesource.com/platform/frameworks/base/+/refs/heads/main/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java): + "On the eligible devices this activity is provided by GMS core"): 61%. +- **Huawei's Scan Kit**, built into Huawei phones + ([HarmonyOS](https://developer.huawei.com/consumer/en/doc/harmonyos-guides/scan-introduction), + [HMS Core](https://developer.huawei.com/consumer/en/doc/development/HMSCore-Guides/service-introduction-0000001050041994)): 68%. +- **ZXing**, which [Android's Settings app](https://cs.android.com/android/_/android/platform/frameworks/base/+/2ecfdb1d2dd832c637aacfa15c257822b94f10b1:packages/SettingsLib/src/com/android/settingslib/qrcode/QrCamera.java;bpv=1;bpt=0) + uses for Wi-Fi codes only: 42%. +- **Apps** bring their own; the four open-source scanners apps are built on read 27% to 67%. + +The built-in scanners of more than 1 in 3 phones, from Xiaomi, OPPO, vivo, Transsion and Honor, +could not be measured. + +Phones in use: [Counterpoint Research](https://counterpointresearch.com/en/insights/Active-Installed-Base-8-Smartphone-OEMs-Top-200-mn-Nearly-1-in-4-is-an-iPhone), +active smartphones in 2025: "nearly one in four active smartphones is an iPhone, while nearly one in five +is a Samsung"; only Apple and Samsung pass a billion, and eight makers have more than 200 million each. +People: at the end of 2025, 4.6 billion, 56% of the world, went online with a smartphone of their own +([GSMA, State of Mobile Internet Connectivity 2026](https://www.gsma.com/somic/wp-content/uploads/2026/09/The-State-of-Mobile-Internet-Connectivity-2026.pdf), p. 32). +Web counters such as StatCounter show iPhones higher, about 31% of mobile page views, because they +count page views, not phones. + +1. **Not every phone reads the same QR codes.** Each scanner's share of all the codes, and what the + gap means for one code. +2. **The QR code was invented for messy factories.** Why the gap matters: Denso made the QR code in 1994 + for oily, damaged factory labels, with error correction built in, in the words of its developer, + Masahiro Hara. When one scanner reads a picture and another misses it, the difference is the software. +3. **More than a billion phones read fewer codes than an iPhone.** Which phones use which scanner, + how many phones that is, how many codes each reads, and how many of every 100 codes an iPhone + reads it misses (and reads that the iPhone misses). +4. **The gap opens on harder codes.** One strip per set of codes (clean, everyday, tough, hardest + cases) at a chosen image resolution: 1920, 1280 or 640 pixels on the long side. Samsung's estimate + appears at 1280, the one resolution it was read at. +5. **Even everyday prints fail on some scanners.** Every tested code on one scale from easy to + hard, shaded by how many of the eight scanners read it. Drag along it to see a code from that + spot, and the mix of shades there; a link under the code opens its exact picture, to try with your + own phone. +6. **What makes a code hard to read.** Six before-and-after pairs (small squares, too much data for + the size, blur, faded ink, tight curves, a covered corner square), each with the scanners that still + read it. The data pair shows the same version 21 codes squeezed into a small space and printed + bigger: more data needs a bigger print, because its squares shrink in the same space. +7. **What helps a code scan on every phone.** Five plain rules, each backed by the measurements. + +Everything else waits behind a "+", for readers who want to master it: each scanner's full profile; +how a scanner reads a QR code (telling dark from light, finding the corner squares, fitting the grid, reading +the squares, error correction) and, for each of the 17 factors, the step it breaks; and how the +measurements were made. + +## Decoders + +| On the page | Decoder | What it is | Version | +|---|---|---|---| +| Apple's scanner | [Apple Vision](https://developer.apple.com/documentation/vision/vndetectbarcodesrequest) | Apple's barcode detector, built into iOS; our stand-in for the iPhone, measured on a Mac | macOS 14.3, `VNDetectBarcodesRequest` revision 4 | +| Google's scanner | [ML Kit](https://developers.google.com/ml-kit) ([barcode scanning](https://developers.google.com/ml-kit/vision/barcode-scanning)) | Google's barcode scanner as Google Play services delivers it; on Google's Android 14 image, Android's QR button is set to Play services' ML Kit barcode scanner | play-services-mlkit-barcode-scanning 18.3.1 with Google Play services 26.41.31 (barcode module 264131001), QR only, on Google's Android 14 emulator image (API 34, arm64) | +| Samsung's scanner | [Samsung Camera's QR scanner](https://www.samsung.com/us/support/answer/ANS10001925/), with a decoder by [Quram (Quramsoft)](https://www.quramsoft.com/) | the scanner in Samsung's Camera app, which the "Scan QR code" button in Quick Settings opens on Samsung phones; read on a real phone borrowed through Samsung's Remote Test Lab, on a random sample of the codes | Camera 16.5.00.85 on a Galaxy A57 (SM-A576S), One UI 8.5, Android 16; each picture opened from the gallery, at 1280 px only | +| Huawei's scanner | [Huawei Scan Kit](https://developer.huawei.com/consumer/en/hms/huawei-scankit/) | Huawei's scanning engine, built into HarmonyOS and shipped in HMS Core on Huawei phones; the kit's three models are byte-identical to those in HMS Core 6.16.2.300 | `com.huawei.hms:scanplus` 2.15.0.301 from Huawei's developer repository, photo mode (`decodeWithBitmap`), QR only, on Google's Android 14 emulator image (API 34, arm64) | +| Android Settings' scanner | [ZXing (Java)](https://github.com/zxing/zxing/releases/tag/zxing-3.5.2) | the scanner Android's Settings app uses for Wi-Fi codes; also inside apps built on zxing-android-embedded | 3.5.2, called as AOSP's `QrCamera` calls it, inverted retry included | +| WeChat's scanner | [WeChat](https://docs.opencv.org/4.12.0/d5/d04/classcv_1_1wechat__qrcode_1_1WeChatQRCode.html) | WeChat's neural-network scanner, open-sourced in OpenCV (the app's own build may differ) | OpenCV contrib 4.12 with its detector and super-resolution models | +| zxing-cpp | [zxing-cpp](https://github.com/zxing-cpp/zxing-cpp/releases/tag/v3.1.1) | grew out of ZXing; used by open-source Android scanners such as Binary Eye | 3.1.1, library defaults | +| OpenCV, newer | [OpenCV ArUco](https://docs.opencv.org/4.12.0/d3/db0/classcv_1_1QRCodeDetectorAruco.html) | OpenCV's ArUco-based QR detector | 4.12 `QRCodeDetectorAruco`, single-code `detectAndDecode` | +| OpenCV, original | [OpenCV](https://docs.opencv.org/4.12.0/de/dc3/classcv_1_1QRCodeDetector.html) | OpenCV's first QR detector | 4.12 `QRCodeDetector`, single-code `detectAndDecode` | + +An iPhone has one built-in scanner that the Camera and any app can use. Android ships none for +everyday codes: its QR button opens one that Google or the phone maker supplies, camera apps use the +maker's own (Samsung's in its Camera app; Huawei's is Scan Kit), and every other app picks its own, so the same code can +scan in one app and fail in another. + +Google's scanner is measured as Google Play services delivers ML Kit, on Google's Android 14 emulator +image, where the QR button's default is `com.google.android.gms/.mlkit.barcode.ui.PlatformBarcodeScanningActivityProxy`. +The model lives in Play services' barcode module, which updates with Play services. The image's Play Store +updated Play services to 26.41.31 (October 2026) by itself; that version was then held for the whole +measurement, and every result records the versions of Play services and its barcode module. On Google's +images for each Android version, every up-to-date one from Android 9 to 17 read every code exactly the same; +older Play services read a little less (57% of codes with 2023's version). + +Huawei's scanner is measured through Huawei's own developer kit, on the same emulator image, reading +each picture in the kit's photo mode. The kit's camera mode, meant for live video frames, read a +little less of these still pictures. + +Samsung doesn't name the decoder in its scanner, but the phone shows whose it is: the Camera app decodes +with a library that carries the name of [Quram](https://www.quramsoft.com/), a Korean imaging-software company, +and the decoding engine names itself in the phone's log. Quram sells a QR and barcode scanner of its own and +names Samsung among its customers. + +Samsung's scanner runs only on Samsung phones, so it was read on a real Galaxy A57 borrowed through +[Samsung's Remote Test Lab](https://developer.samsung.com/remote-test-lab), on a random sample of each set at +1280 px. Each picture was opened from the phone's gallery in the scanner, inside a white border, because the +crop box the gallery shows first keeps only the middle of a picture. A read is the text on its result card, equal +to the code's content. Some content it never shows as text: it hands contacts, Wi-Fi, calendar, SMS, location, +email and phone codes and Facebook links straight to an app (its log names each action), and shows binary content and +JSON text as an empty card. Codes with such content are left out of its comparison, for every scanner. Its +figures are estimates: its gap to the other scanners on the codes it read, added to their results on all of a +set's codes. On all codes that comes to about 59% (57% to 61%, 95% confidence). + +Not yet measured: the scanners other phone makers build into their phones, such as Xiaomi's, OPPO's, +vivo's, Transsion's and Honor's. Each runs only on its maker's phones, so it can be measured only on real devices +borrowed from a test lab, far more slowly than the other scanners. Samsung's came first, for its more than a billion +phones, and even it on a sample of the codes; the others are left for future work. + +## Codes + +- **Made here** (synthetic captures, payloads made up): pristine, everyday and tough tiers, plus + one-factor ladders: a code all eight scanners read, changed one step at a time, 80 codes per step, + each code the same at every step but for the factor. One ladder, "More data, printed bigger", takes + the amount-of-data ladder's own codes and keeps every square at 6 camera pixels, up to version 21. + Published as + [QR Scan Difficulty: synthetic codes](https://huggingface.co/datasets/devmandan/qr-scan-difficulty), + with each code's content, every setting used to make it, and which scanners read it. +- **Research datasets**, each used under its own terms. Most of their codes are the page's "hardest cases": codes + researchers collected or built to copy the toughest conditions real codes meet. The other 1,525 are easy, QR-DN1.0's + clean originals, alone or tiled four to a picture. + - [BoofCV QR singles](https://huggingface.co/datasets/devmandan/boofcv-qr-singles): Peter Abeles' + BoofCV QR Code Performance Benchmark photos, published openly without an explicit licence grant. + - [QR-DN1.0](https://huggingface.co/datasets/devmandan/qr-dn1.0): clean QR codes, the same codes + tiled four to a picture, and distorted, noisy versions of them; CC BY 4.0 (Mendeley Data, + doi:10.17632/t2bdr663ms.2). + - [syn10k](https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes): Bodnár, Grósz and + Tóth's barcode images; the page uses 1,000 of its computer-made warped ones. CC BY 4.0. + - [Broken QR 104](https://huggingface.co/datasets/devmandan/broken-qr-codes-104): real codes that + fail to decode, collected from public web sources; annotations CC BY 4.0. + +A code in an image can be read by any phone, so showing an image shows its payload. Images are +cropped and resized from their datasets; to have one removed, open a discussion on its dataset +page. The page itself never prints payload text. + +## How it was measured + +Every image is read at seven image resolutions, 1920 down to 224 pixels on the long side: larger +images are shrunk to each size, smaller ones are read as they are, never enlarged. Most +research-dataset images are 512 × 512, so only the sizes below 640 shrink them. Every decoder reads +every image at every size, and a two-parameter item-response model turns the pattern of reads and +misses into one difficulty per code. The ladders are read at 1280 px. + +A read counts only when a scanner returns the code's exact content, byte for byte; finding a code +without reading it is a miss. The content comes with each code: made here, or published by its +dataset. BoofCV's photos and QR-DN (whose distorted images take the content of their clean +originals) come without it; there the content is what other decoders read identically, and a code +is kept only when at least two decoders other than the scanner being scored agree, which leaves out +4 photos. On 100 images with no code, made to fool scanners (look-alike corner squares, +checkerboards, clutter, other barcode types), none of the eight returned anything. Samsung's scanner +read them on its phone with no false readings; among the other barcode types it read the 4 Data Matrix +codes, each correctly, as it reads Data Matrix as well as QR codes (the eight, as we ran them, read QR +codes only). + +One rule throughout: a code's shade counts the scanners that read it at 1280 px (all eight, most = +5 to 7, some = 1 to 4, none). A group of codes, such as a ladder step or a set, counts a scanner when +it reads at least 9 in 10 of them. The page's "How we measured" section has the details. + +## Why we made this + +To show how unevenly the world's phones read QR codes, and to help everyone who builds a scanner see where +theirs falls short and improve it. A measurement this broad has become practical only recently, thanks to AI +models that help write the software behind it. + +## Disclosures + +Independent work, not affiliated with or endorsed by any company or organization named here: Apple, Google, +Samsung, Quram (Quramsoft), Huawei, Honor, Xiaomi, OPPO, vivo, Transsion, Tencent, Meta, Denso, DENSO WAVE, +Toyota, GS1, Counterpoint Research, GSMA, ITU, IDC or StatCounter; nor by the open-source projects and dataset +authors credited above. QR Code is a registered trademark of DENSO WAVE INCORPORATED. Apple and iPhone are +trademarks of Apple Inc.; Android, Google Play, ML Kit and Pixel of Google LLC; Samsung and Galaxy of Samsung +Electronics Co., Ltd.; Huawei and HarmonyOS of Huawei Technologies Co., Ltd.; WeChat of Tencent; WhatsApp and +Instagram of Meta Platforms, Inc. Other names are trademarks of their owners. diff --git a/app.js b/app.js new file mode 100644 index 0000000000000000000000000000000000000000..c3487b593bbbbde3897d7ff5e9113840845ad1bd --- /dev/null +++ b/app.js @@ -0,0 +1,1381 @@ +// QR Scan Difficulty. Every number on the page is computed here from data/site.json. +const SVGNS = 'http://www.w3.org/2000/svg'; +const PILE_LO = -6; // codes every scanner read at every resolution +const PILE_HI = 106; // codes no scanner read at any resolution +const X_MIN = -12; +const X_MAX = 112; +const RELIABLE = 0.9; // a group of codes counts as read by a scanner that reads 9 in 10 of them +const BASE_FRAME = 1280; // a typical phone camera image; the default everywhere +const LADDER_WINDOW = 360; // a factor picture's usual window of the camera image (site.json gives each ladder's own) +// Android Settings' Wi-Fi QR scanner: QrCamera, which decodes with ZXing (AOSP source) +const ANDROID_SOURCE = 'https://cs.android.com/android/_/android/platform/frameworks/base/+/2ecfdb1d2dd832c637aacfa15c257822b94f10b1:packages/SettingsLib/src/com/android/settingslib/qrcode/QrCamera.java;bpv=1;bpt=0'; +// Smartphones in the world (not our data; each figure quoted from its publisher, checked 2026-10-27) +const WORLD_PHONES = { + // unique people using a smartphone of their own to go online, end of 2025 (p. 32) + people: { billions: 4.6, share: 56, source: 'GSMA, 2026', url: 'https://www.gsma.com/somic/wp-content/uploads/2026/09/The-State-of-Mobile-Internet-Connectivity-2026.pdf' }, + // Active smartphones by brand, 2025. Its text: "Nearly one in four active smartphones is an iPhone, while nearly one in + // five is a Samsung"; "Only Apple and Samsung have surpassed the one-billion active devices milestone"; each of the eight + // leaders (starred in its chart: Apple, Samsung, Xiaomi, OPPO, vivo, Transsion, Huawei, HONOR) has over 200 million. + // Shares read from its chart: Xiaomi 12%, OPPO 8%, vivo 7%, Transsion 5%, HONOR 4% (36% together), Huawei 4%, Google 0.8%. + inUse: { + source: 'Counterpoint Research, 2026', url: 'https://counterpointresearch.com/en/insights/Active-Installed-Base-8-Smartphone-OEMs-Top-200-mn-Nearly-1-in-4-is-an-iPhone', + apple: 'estimated at over a billion actively used devices', samsung: 'estimated at over a billion actively used devices', + otherFive: 'each estimated at over 200 million actively used devices', huawei: 'estimated at over 200 million actively used devices', + }, + // Devices with Google Play, which carries Google's scanner: "we expanded enhanced fraud protection to 185 markets, now covering + // more than 2.8 billion Android devices" (Google, 19 February 2026); a floor, and it may count tablets + googlePlay: { billions: 2.8, source: 'Google, 2026', url: 'https://blog.google/security/keeping-google-play-android-app-ecosystem-safe-2025/' }, + // Apple shipped 247.8 million of 1,260.3 million smartphones in 2025 + shipped: { share: 19.7, total: 1.26, url: 'https://www.idc.com/resource-center/press-releases/q425mobilephonetop5/' }, + // "Globally, 82 per cent of individuals 10 years or older own a mobile phone." + anyPhone: { share: 82, url: 'https://www.itu.int/itu-d/reports/statistics/2025/10/15/ff25-mobile-phone-ownership/' }, + // web page views, not phones: Android 69.31%, iOS 30.66% of mobile page views, September 2026 + web: { ios: 31, url: 'https://gs.statcounter.com/os-market-share/mobile/worldwide' }, +}; +const CAMERAX_DOCS = 'https://developer.android.com/media/camera/camerax/configuration'; +const AOSP_ZXING = 'https://android.googlesource.com/platform/external/zxing/+/refs/heads/main/METADATA'; +// Android's QR button opens the scanner a setting names: "On the eligible devices this activity is provided by GMS core" +const AOSP_QR_BUTTON = 'https://android.googlesource.com/platform/frameworks/base/+/refs/heads/main/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java'; +// ...and the phone maker's own default for it, empty in Android's code +const AOSP_QR_DEFAULT = 'https://android.googlesource.com/platform/frameworks/base/+/refs/heads/main/core/res/res/values/config.xml'; +// the scanners' roles on the page +const APPLE = 'apple-vision'; // Apple's scanner: the iPhone Camera and any app +const GOOGLE = 'mlkit-gms'; // Google's ML Kit from Google Play services: what Android's QR button opens +const SETTINGS = 'zxing-java'; // ZXing in Android's Settings app, for Wi-Fi codes +const HUAWEI = 'hms-scankit'; // Huawei's Scan Kit: the scanner in HarmonyOS and in HMS Core on Huawei phones +// Huawei's documentation of Scan Kit, for Android phones (HMS Core) and for HarmonyOS +const HUAWEI_KIT = 'https://developer.huawei.com/consumer/en/doc/development/HMSCore-Guides/service-introduction-0000001050041994'; +const HUAWEI_HARMONY = 'https://developer.huawei.com/consumer/en/doc/harmonyos-guides/scan-introduction'; +// What we measured, credited to its maker: each one's own page (checked 2026-10-28) +const ML_KIT = 'https://developers.google.com/ml-kit'; // ML Kit's home page +const ML_KIT_BARCODE = 'https://developers.google.com/ml-kit/vision/barcode-scanning'; // its barcode scanning API +const SCAN_KIT = 'https://developer.huawei.com/consumer/en/hms/huawei-scankit/'; // Scan Kit's home page +const APPLE_VISION = 'https://developer.apple.com/documentation/vision/vndetectbarcodesrequest'; // Apple Vision's barcode request +// Samsung's guide to its "Scan QR code" button, which opens the Gallery too: the way we read each picture. Samsung +// doesn't name the decoder inside; the phone shows it is Quram's (Quramsoft), credited openly by the user's decision +// of 2026-10-28: the Camera app decodes with a library carrying Quram's name, and the engine names itself in the log. +const SAMSUNG_QR = 'https://www.samsung.com/us/support/answer/ANS10001925/'; +const QURAM = 'https://www.quramsoft.com/'; +const SYNTH_DATASET = 'https://huggingface.co/datasets/devmandan/qr-scan-difficulty'; // the codes made for this page +// Denso Wave's history of the QR code: "it declared that it would not exercise" its patent rights +const QR_HISTORY = 'https://www.qrcode.com/en/history/'; +// Denso's QR code page (the corner squares' 1:1:3:1:1 ratio, the alignment square) and Denso Wave's error correction page +const DENSO_QR = 'https://www.denso.com/global/en/business/innovation/qrcode/'; +const QR_EC = 'https://www.qrcode.com/en/about/error_correction.html'; +// Why the page exists, and who it is not affiliated with: every company and organization the page names (the audit checks +// that each one named in the page's text is listed), and the trademark notice DENSO WAVE asks for when the words "QR Code" are used +const PURPOSE = 'To show how unevenly the world’s phones read QR codes, and to help everyone who builds a scanner see where theirs falls short and improve it. A measurement this broad has become practical only recently, thanks to AI models that help write the software behind it.'; +const AFFILIATIONS = ['Apple', 'Google', 'Samsung', 'Quram (Quramsoft)', 'Huawei', 'Honor', 'Xiaomi', 'OPPO', 'vivo', 'Transsion', 'Tencent', 'Meta', + 'Denso', 'DENSO WAVE', 'Toyota', 'GS1', 'Counterpoint Research', 'GSMA', 'ITU', 'IDC', 'StatCounter']; +const DISCLOSURE = `Independent work, not affiliated with or endorsed by any company or organization named on this page: ${AFFILIATIONS.slice(0, -1).join(', ')} or ${AFFILIATIONS[AFFILIATIONS.length - 1]}; nor by the open-source projects and dataset authors credited above. QR Code is a registered trademark of DENSO WAVE INCORPORATED. Apple and iPhone are trademarks of Apple Inc.; Android, Google Play, ML Kit and Pixel of Google LLC; Samsung and Galaxy of Samsung Electronics Co., Ltd.; Huawei and HarmonyOS of Huawei Technologies Co., Ltd.; WeChat of Tencent; WhatsApp and Instagram of Meta Platforms, Inc. Other names are trademarks of their owners.`; +// How a scanner reads a code: each factor's "breaks" line in site.json names one of these steps +const READ_STEPS = ['Telling dark from light', 'Finding the code', 'Fitting the grid', 'Reading the squares', 'Error correction']; // Quram's own site; its Machine Eye page sells a QR and barcode scanner, MI.CODE +const ZXING = 'https://github.com/zxing/zxing/releases/tag/zxing-3.5.2'; +const ZXING_CPP = 'https://github.com/zxing-cpp/zxing-cpp/releases/tag/v3.1.1'; +const WECHAT_QR = 'https://docs.opencv.org/4.12.0/d5/d04/classcv_1_1wechat__qrcode_1_1WeChatQRCode.html'; +const OPENCV_ARUCO = 'https://docs.opencv.org/4.12.0/d3/db0/classcv_1_1QRCodeDetectorAruco.html'; +const OPENCV_QR = 'https://docs.opencv.org/4.12.0/de/dc3/classcv_1_1QRCodeDetector.html'; +const SCANNER_PAGES = { // each scanner's own pages, for exactly what we measured + 'apple-vision': [[APPLE_VISION, 'Apple’s documentation of VNDetectBarcodesRequest']], + 'mlkit-gms': [[ML_KIT_BARCODE, 'ML Kit’s barcode scanning'], [AOSP_QR_BUTTON, 'Android’s source for the QR button']], + 'hms-scankit': [[SCAN_KIT, 'Scan Kit'], [HUAWEI_KIT, 'its HMS Core guide'], [HUAWEI_HARMONY, 'its HarmonyOS guide']], + 'zxing-java': [[ZXING, 'ZXing 3.5.2'], [ANDROID_SOURCE, 'QrCamera.java in Android’s Settings library']], + wechat: [[WECHAT_QR, 'OpenCV’s WeChatQRCode']], + 'zxing-cpp': [[ZXING_CPP, 'zxing-cpp 3.1.1']], + 'opencv-aruco': [[OPENCV_ARUCO, 'OpenCV’s QRCodeDetectorAruco']], + opencv: [[OPENCV_QR, 'OpenCV’s QRCodeDetector']], +}; +/** "See a, b and c.": a scanner's pages, each a link that opens in a new tab. */ +function see(pages) { + const sep = (i) => (i === 0 ? '' : i === pages.length - 1 ? ' and ' : ', '); + return ['See ', ...pages.flatMap(([href, text], i) => [sep(i), el('a', { href, text, target: '_blank', rel: 'noopener' })]), '.']; +} +// the same scanner on Google's image for each Android version, and the Play services versions it came in +function versionsNote() { + const v = DATA.googleVersions; + if (!v) return ''; + const now = percent(pctRead(GOOGLE, () => true).rate); + return `It read the same on each up-to-date Android version we tried, from ${v.androidSame[0]} to ${v.androidSame[1]}: what matters is Google Play services, which updates itself. Older versions read a little less (${percent(v.older.rate)} in ${v.older.year}, ${now} since ${v.sinceYear}).`; +} +// ZXing as Android's Settings app runs it reads light-on-dark codes only on its second, inverted pass +function invertedNote() { + const inv = DATA.zxingInvertedPass; + return inv ? `It reads light-on-dark codes only by retrying on an inverted image, as Android’s Settings app does: ${inv.read} of our ${inv.n} light-on-dark codes, and ${inv.read - inv.second} without the retry.` : ''; +} +// Samsung's scanner: its Camera app's, read on a real phone borrowed through Samsung's Remote Test Lab, on a random +// sample of each set at one resolution (DATA.samsung), so its figures are estimates +const SAMSUNG_RTL = 'https://developer.samsung.com/remote-test-lab'; +const WORDS = ['none', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']; +// One rule everywhere: how many of the scanners read it. A single code is read or not; +// a group of codes (a factor step, a set) is read by a scanner that reads 9 in 10 of them. +let ZONES; // all, most (more than half), some, none: set once the number of scanners is known +function makeZones(n) { + const half = Math.floor(n / 2); + return [ + { min: n, name: `All ${WORDS[n]}`, words: `all ${WORDS[n]}`, tone: '--z-every' }, + { min: half + 1, name: 'Most', words: `most (${half + 1} to ${n - 1})`, range: `${half + 1}–${n - 1}`, tone: '--z-most' }, + { min: 1, name: 'Some', words: `some (1 to ${half})`, range: `1–${half}`, tone: '--z-some' }, + { min: 0, name: 'None', words: 'none', tone: '--z-none' }, + ]; +} +const allWord = () => WORDS[ORDER.length]; // "seven" +const mostMin = () => ZONES[1].min; // the fewest scanners that still count as most +// the image resolution a scanner gets: larger images shrunk to this long side, smaller ones left as they are +const RESOLUTIONS = [ + { frame: 1920, label: 'High', note: 'Larger images were shrunk to 1920 pixels on the long side, like 1080p video.' }, + { frame: 1280, label: 'Medium', note: 'Larger images were shrunk to 1280 pixels on the long side, like 720p video.' }, + { frame: 640, label: 'Low', note: 'Larger images were shrunk to 640 pixels on the long side. CameraX, Google’s camera library for Android apps, analyses 640 × 480 unless an app asks for more.' }, +]; +const WORLD = { pristine: 0.2, everyday: 0.5, tough: 0.2, dataset: 0.1 }; // the curve's illustrative mix +const PLAIN = { // a name anyone can place, then what it is, for the specialist + 'apple-vision': ['Apple’s scanner', 'Apple Vision, built into iOS'], + 'mlkit-gms': ['Google’s scanner', 'ML Kit, opened by Android’s QR button'], + 'hms-scankit': ['Huawei’s scanner', 'Scan Kit, built into Huawei phones'], + 'zxing-java': ['Android Settings’ scanner', 'ZXing (Java), for Wi-Fi codes'], + wechat: ['WeChat’s scanner', 'neural network, open-sourced in OpenCV'], + 'zxing-cpp': ['zxing-cpp', 'grew out of ZXing; in open-source apps'], + 'opencv-aruco': ['OpenCV, newer', 'OpenCV’s ArUco-based detector'], + opencv: ['OpenCV, original', 'OpenCV’s first QR detector'], +}; +const SPOKEN = { // the same names inside sentences + 'apple-vision': 'Apple’s scanner', 'mlkit-gms': 'Google’s scanner', 'hms-scankit': 'Huawei’s scanner', 'zxing-java': 'Android Settings’ scanner', + wechat: 'WeChat’s scanner', + 'zxing-cpp': 'zxing-cpp', 'opencv-aruco': 'OpenCV’s newer detector', opencv: 'OpenCV’s original detector', +}; +const SETS = [ + { label: 'Clean', noun: 'clean prints', match: (s) => s.key === 'pristine' }, + { label: 'Everyday', noun: 'everyday prints', match: (s) => s.key === 'everyday' }, + { label: 'Tough', noun: 'tough prints', match: (s) => s.key === 'tough' }, + { label: 'Hardest cases', noun: 'hardest cases', match: (s) => s.group === 'dataset' }, +]; +const SOURCE_PLAIN = { // what an example is; QR-DN1.0's examples carry their kind (site.json), its tiled ones are never shown + pristine: 'Clean print, simulated for this test', + everyday: 'Everyday print, simulated for this test', + tough: 'Tough print, simulated for this test', + boofcv: 'Real photo, BoofCV research set', + 'qrdn/clean': 'Clean code, QR-DN1.0 research set', + 'qrdn/distorted': 'Distorted, noisy code, QR-DN1.0 research set', + syn10k: 'Computer-made warped code, syn10k research set', + broken104: 'Real code that fails, collected from the web', +}; +const PAIRS = [ + { key: 'size', title: 'Squares too small' }, + { key: 'version', title: 'Too much data for the size' }, + { key: 'blur', title: 'Out of focus' }, + { key: 'contrast', title: 'Faded ink' }, + { key: 'curve', title: 'Tight curves' }, + { key: 'corner', title: 'A covered corner square' }, +]; + +const state = { d: 40, offset: 0, laneFrame: BASE_FRAME, gridFrame: BASE_FRAME, showPct: false, factor: 'size', level: 0 }; +let DATA; +let RES; +let NF; +let N; +let COUNT; // per code: how many of the scanners read it at BASE_FRAME +let ORDER; +let BELL; +let HIGH_NOTE; // what going above BASE_FRAME does, measured + +const $ = (id) => document.getElementById(id); +const css = (name) => getComputedStyle(document.documentElement).getPropertyValue(name).trim(); +// a picture's address carries the build, so a browser never pairs new data with a cached old picture +const imgUrl = (path) => `img/${path}?v=${DATA.build}`; + +function el(tag, attrs = {}, children = []) { + const node = document.createElement(tag); + for (const [k, v] of Object.entries(attrs)) { + if (k === 'text') node.textContent = v; + else if (k === 'class') node.className = v; + else node.setAttribute(k, v); + } + for (const c of [].concat(children)) if (c != null) node.append(c); + return node; +} + +function sv(tag, attrs = {}, parent = null) { + const node = document.createElementNS(SVGNS, tag); + for (const [k, v] of Object.entries(attrs)) { + if (k === 'text') node.textContent = v; + else node.setAttribute(k, v); + } + if (parent) parent.append(node); + return node; +} + +// ---- data ------------------------------------------------------------------------------- + +function decodeResults(data) { + const F = data.frames.length; + const n = data.items.s.length; + const res = new Uint8Array(n * F); + for (let i = 0; i < n; i++) { + const s = data.items.r[i]; + for (let f = 0; f < F; f++) res[i * F + f] = parseInt(s.slice(2 * f, 2 * f + 2), 16); // bit k: scanner k read it + } + return res; +} + +const decIndex = (key) => DATA.decoders.findIndex((d) => d.key === key); +const decoder = (key) => DATA.decoders[decIndex(key)]; +const reads = (i, fi, k) => (RES[i * NF + fi] >> k) & 1; +const source = (i) => DATA.sources[DATA.items.s[i]]; +const isAndroid = (key) => decoder(key).platform.startsWith('Android'); +const otherApps = () => ORDER.filter((k) => ![APPLE, GOOGLE, HUAWEI, SETTINGS].includes(k)); // scanners other apps are built on +const zoneFor = (count) => ZONES.find((z) => count >= z.min); +const snap = (d) => (d > 103 ? PILE_HI : d > 100 ? 100 : d < -3 ? PILE_LO : d < 0 ? 0 : d); // the piles, or the scale +const zoneIndex = (count) => ZONES.indexOf(zoneFor(count)); +function luminance(hex) { + const c = hex.match(/\w\w/g).map((h) => parseInt(h, 16) / 255).map((v) => (v <= 0.03928 ? v / 12.92 : ((v + 0.055) / 1.055) ** 2.4)); + return 0.2126 * c[0] + 0.7152 * c[1] + 0.0722 * c[2]; +} +/** Text colour for a label sitting on a tone: whichever of ink and surface contrasts more. */ +function onTone(z) { + const t = luminance(css(z.tone)); + const ratio = (name) => { const l = luminance(css(name)); return (Math.max(t, l) + 0.05) / (Math.min(t, l) + 0.05); }; + return ratio('--surface') >= ratio('--ink') ? css('--surface') : css('--ink'); +} + +/** A percent that never rounds onto 0%, 90% (9 in 10) or 100% unless it is really there. */ +function percent(v) { + const r = Math.round(100 * v); + if (!((v > 0 && r === 0) || (v < RELIABLE && r === 90) || (v < 1 && r === 100))) return `${r}%`; + const t = (100 * v).toFixed(1); + return `${t === '0.0' ? '0.1' : t === '90.0' ? '89.9' : t === '100.0' ? '99.9' : t}%`; +} + +/** Scanners that read a group of codes: at least 9 in 10 of them. */ +function readsGroup(items, fi) { + return ORDER.filter((key) => { + const k = decIndex(key); + return items.reduce((s, i) => s + reads(i, fi, k), 0) >= RELIABLE * items.length; + }); +} + +/** Scanners that read a ladder step: at least 9 in 10 of its codes, at the ladder frame. */ +const stepScanners = (level) => ORDER.filter((key) => level.reads[decIndex(key)] >= RELIABLE * level.n); + +/** Index of the last step, counting from the easy end, that at least `min` scanners still read. */ +function lastStep(lad, min) { + let last = -1; + for (let li = 0; li < lad.levels.length; li++) { + if (stepScanners(lad.levels[li]).length < min) break; + last = li; + } + return last; +} + +/** Index of the first step that fewer than `min` scanners read, or -1. */ +const firstBelow = (lad, min) => lad.levels.findIndex((lv) => stepScanners(lv).length < min); + +const ladder = (key) => DATA.ladders.find((l) => l.key === key); +// the base code's settings a factor sets itself, so the explorer doesn't quote the base value for them +const OWN_SETTINGS = { size: ['ppm'], version: ['version', 'ppm'], version_big: ['version', 'ppm'], contrast: ['contrast'], tilt: ['tilt'], blur: ['blur'] }; + +/** A pair's two steps: the last one every scanner reads, and the first harder one that one scanner or none reads. */ +function pairSteps(lad) { + const counts = lad.levels.map((lv) => stepScanners(lv).length); + const good = Math.max(0, lastStep(lad, ORDER.length)); + const bad = counts.findIndex((c, li) => li > good && c <= 1); + return { good, bad: bad < 0 ? lad.levels.length - 1 : bad }; +} + +/** A version-ladder step's codes printed bigger, from the "version_big" ladder (same codes, squares kept the same size). */ +function printedBigger(lv) { + const big = ladder('version_big'); + const found = big ? big.levels.find((l) => l.short === lv.short) : null; + return found ? { lad: big, lv: found } : null; +} +const pxOf = (lv) => lv.label.match(/([\d.]+) camera pixels/)[1]; // a data step's camera pixels per square, from its label + +// ---- small shared pieces ---------------------------------------------------------------- + +function showTip(evt, lines) { + const tip = $('tip'); + tip.replaceChildren(...lines.map(([cls, text]) => el('div', { class: cls, text }))); + tip.hidden = false; + const w = tip.offsetWidth; + const h = tip.offsetHeight; + let x = evt.clientX + 14; + let y = evt.clientY + 14; + if (x + w > window.innerWidth - 8) x = evt.clientX - w - 14; + if (y + h > window.innerHeight - 8) y = evt.clientY - h - 14; + tip.style.left = `${x}px`; + tip.style.top = `${y}px`; +} +const hideTip = () => { $('tip').hidden = true; }; +// on a touch screen, lifting the finger ends the pointer: the tip stays until the next tap or a scroll +const leaveTip = (e) => { if (e.pointerType !== 'touch') hideTip(); }; + +const swatch = (z) => el('i', { class: 'swatch', style: `background:${css(z.tone)}` }); + +/** The image-resolution choice: it names what it sets, gives each setting in pixels, and says what + * the chosen one means. Picking re-renders the section, so focus returns to the chosen button. */ +function resolutionControl(container, current, onPick) { + const refocus = container.contains(document.activeElement); + const id = `${container.id}Label`; + const note = RESOLUTIONS.find((r) => r.frame === current).note; + container.replaceChildren( + el('span', { class: 'res-label', id, text: 'Image resolution' }), + el('div', { class: 'seg', role: 'group', 'aria-labelledby': id }, RESOLUTIONS.map((o) => { + const b = el('button', { type: 'button', 'aria-pressed': String(o.frame === current) }, [`${o.label} `, el('span', { class: 'px', text: `${o.frame} px` })]); + b.addEventListener('click', () => onPick(o.frame)); + return b; + })), + el('p', { class: 'res-note', text: current === RESOLUTIONS[0].frame ? `${note} ${HIGH_NOTE}` : note }), + ); + if (refocus) container.querySelector('[aria-pressed="true"]').focus(); +} + +function countText(n) { + const all = ORDER.length; + if (n === all) return `Read by all ${WORDS[all]} scanners`; + if (n === 0) return `Read by none of the ${WORDS[all]}`; + return `Read by ${n} of the ${all} scanners`; +} + +function groupText(n) { + const all = ORDER.length; + if (n === all) return `Read reliably by all ${WORDS[all]} scanners`; + if (n === 0) return `Read reliably by none of the ${WORDS[all]}`; + return `Read reliably by ${n} of the ${all} scanners`; +} + +/** A shade's swatch that names its shade, for a line that gives the count in words. */ +const namedSwatch = (z) => { const s = swatch(z); s.title = z.name; return s; }; + +/** Scanner names for a sentence; both OpenCV detectors together read as one phrase. */ +function sayNames(keys) { + const both = keys.includes('opencv-aruco') && keys.includes('opencv'); + const names = keys.filter((k) => !(both && k.startsWith('opencv'))).map((k) => SPOKEN[k]); + return both ? [...names, 'both OpenCV detectors'] : names; +} +const join = (xs) => (xs.length < 2 ? xs.join('') : `${xs.slice(0, -1).join(', ')} and ${xs[xs.length - 1]}`); +const capital = (s) => s.replace(/^./, (c) => c.toUpperCase()); +const pctText = (v) => (v > 0 && v < 0.005 ? '<1%' : `${Math.round(100 * v)}%`); + +// ---- Apple's scanner, Android's QR button, Android Settings, other apps ----------------- + +function pctRead(key, match, frame = BASE_FRAME) { + const fi = DATA.frames.indexOf(frame); + const k = decIndex(key); + let r = 0; + let n = 0; + for (let i = 0; i < N; i++) { + if (!match(source(i))) continue; + r += reads(i, fi, k); + n += 1; + } + return { rate: r / Math.max(1, n), n }; +} + +/** Samsung's scanner read a random sample of each set: its estimated share of the matching sets' codes, each set's + * estimate weighed by the set's size, as pctRead weighs the other scanners' sets. */ +function samsungRate(match) { + let r = 0; + let n = 0; + for (const s of DATA.sources) { + const v = DATA.samsung.sets[s.key]; + if (!v || !match(s)) continue; + r += v.of * v.estimate; + n += v.of; + } + return { rate: r / Math.max(1, n), n }; +} +const about = (v) => `≈${Math.round(100 * v)}%`; // an estimate, to the nearest percent + +/** Against the iPhone, on the same codes: of every 100 codes Apple's scanner read, how many this one missed, and how many + * codes it read that Apple's missed, per 100 of Apple's reads; with the counts behind them (read, missedN). */ +function vsApple(key, match = () => true) { + const fi = DATA.frames.indexOf(BASE_FRAME); + const a = decIndex(APPLE); + const k = decIndex(key); + let appleRead = 0; + let missed = 0; + let extra = 0; + for (let i = 0; i < N; i++) { + if (!match(source(i))) continue; + const ra = reads(i, fi, a); + const rk = reads(i, fi, k); + appleRead += ra; + missed += ra && !rk ? 1 : 0; + extra += !ra && rk ? 1 : 0; + } + return { missed: (100 * missed) / appleRead, extra: (100 * extra) / appleRead, read: appleRead, missedN: missed }; +} + +/** The same for Samsung's scanner, from its sample: each set's shares, weighed by how many of the set's codes Apple's + * scanner read (the misses) or by the set's size (the extra reads), as samsungRate weighs its estimates. */ +function samsungVsApple(match = () => true) { + const fi = DATA.frames.indexOf(BASE_FRAME); + const a = decIndex(APPLE); + let appleRead = 0; + let missed = 0; + let extra = 0; + DATA.sources.forEach((s, si) => { + const v = DATA.samsung.sets[s.key]; + if (!v || !match(s)) return; + let read = 0; + let n = 0; + for (let i = 0; i < N; i++) { + if (DATA.items.s[i] !== si) continue; + read += reads(i, fi, a); + n += 1; + } + appleRead += read; + if (v.vsApple.appleRead) missed += (read * v.vsApple.missed) / v.vsApple.appleRead; + extra += (n * v.vsApple.extra) / v.n; + }); + return { missed: (100 * missed) / appleRead, extra: (100 * extra) / appleRead }; +} +const SAMSUNG_RES = () => RESOLUTIONS.find((r) => r.frame === DATA.samsung.frame)?.label ?? `${DATA.samsung.frame} px`; + +function renderVersus() { + const link = (href, text) => el('a', { href, text, target: '_blank', rel: 'noopener' }); + const all = () => true; + const apple = pctRead(APPLE, all); + const google = pctRead(GOOGLE, all); + const samsung = samsungRate(all); + const huawei = pctRead(HUAWEI, all); + const zx = pctRead(SETTINGS, all); + const others = otherApps().map((k) => pctRead(k, all).rate); + const lo = Math.min(...others); + const hi = Math.max(...others); + const builtIn = [google.rate, samsung.rate, huawei.rate, zx.rate]; // the scanners Android phones come with + const hard = (s) => s.group === 'dataset'; + const count = (pred) => DATA.sources.filter(pred).reduce((acc, s) => acc + s.count, 0); + const made = count((s) => s.group === 'made' && s.key !== 'ladder'); + const real = count(hard); + const label = (name, what) => el('span', { class: 'vlabel' }, [el('span', { class: 'name', text: name }), el('span', { class: 'what' }, what)]); + const bar = (name, what, v, estimate = false) => el('div', { class: 'vbar' }, [ + label(name, what), + el('span', { class: 'vtrack' }, el('span', { class: estimate ? 'vfill est' : 'vfill', style: `width:${100 * v.rate}%` })), + el('span', { class: 'vval', text: estimate ? about(v.rate) : percent(v.rate) }), + ]); + $('versus').replaceChildren( + el('p', { class: 'versus-lede' }, [ + `We tested ${apple.n.toLocaleString()} QR codes, most of them deliberately hard, on the scanners phones use. `, + 'Every iPhone, about ', link(WORLD_PHONES.inUse.url, '1 in 4 smartphones'), `, has Apple’s scanner; it read ${percent(apple.rate)}. `, + `The other 3 in 4, more than 3 billion phones, use other scanners; those measured so far read ${percent(Math.min(...builtIn))} to ${percent(Math.max(...builtIn))}.`, + ]), + el('div', { class: 'vbars' }, [ // the iPhone's, then the scanners Android phones come with, then those inside apps + bar('iPhone', ['Apple’s scanner (', link(APPLE_VISION, 'Vision'), ')'], apple), + bar('Samsung phones', ['Samsung’s scanner (', link(SAMSUNG_QR, 'Camera'), ')'], samsung, true), + bar('Android’s QR button', ['Google’s scanner (', link(ML_KIT, 'ML Kit'), ')'], google), + bar('Huawei phones', ['Huawei’s scanner (', link(SCAN_KIT, 'Scan Kit'), ')'], huawei), + bar('Android Settings', [link(ZXING, 'ZXing'), ', for ', link(ANDROID_SOURCE, 'Wi-Fi codes')], zx), + el('div', { class: 'vbar' }, [ + label('Other apps', `${others.length} scanners apps are built on`), + el('span', { class: 'vtrack spread' }, [ + el('span', { class: 'vband', style: `left:${100 * lo}%;width:${100 * (hi - lo)}%` }), + ...others.map((v) => el('span', { class: 'vdot', style: `left:${100 * v}%` })), + ]), + el('span', { class: 'vval wide', text: `${percent(lo)}–${percent(hi)}` }), + ]), + ]), + el('p', { class: 'takeaway', text: 'The same code can scan on one phone and fail on the next.' }), + el('p', { class: 'fine' }, `The codes: ${made.toLocaleString()} prints we simulated, and ${real.toLocaleString()} from research datasets, mostly hardest cases that researchers collected or built to copy the toughest conditions real codes meet. ≈ Samsung’s figure is an estimate.`), + ); +} + +/** The intro's closing point, from the reads: a picture one scanner read was readable, so another scanner's miss on + * it is the software's, not the code's. Then why that matters, and how far one better scanner reaches. */ +function renderIntro() { + const link = (href, text) => el('a', { href, text, target: '_blank', rel: 'noopener' }); + const split = COUNT.filter((c) => c >= 1 && c < ORDER.length).length; + $('introNote').textContent = `Codes in daily life meet the same mess: faded signs, spilled-on menus, crumpled receipts. A scanner built only for pristine codes misses why the QR code exists. When one scanner reads a picture that another misses, the difference is the software: that happened with ${split.toLocaleString()} of our codes.`; + const v = DATA.googleVersions; + const now = percent(pctRead(GOOGLE, () => true).rate); + $('introClose').replaceChildren( + 'The QR code is still the best two-dimensional code for phones: ', + link(QR_HISTORY, 'free for anyone to use'), ', readable from any direction, and built to repair itself. ', + 'It doesn’t need replacing; the scanners need to catch up with what it was built for.', + v ? ` Updates alone can help: Google’s ML Kit scanner, delivered and updated through Google Play services, went from reading ${percent(v.older.rate)} of our codes in ${v.older.year} to ${now} since ${v.sinceYear}, with no new phone needed.` : '', + ); +} + +/** Which phones use which scanner, how many phones that is, how many codes each reads, and how many of the codes an + * iPhone reads each one misses: on everyday prints and on the hardest cases, where the gap is. */ +function renderWho() { + const link = (href, text) => el('a', { href, text, target: '_blank', rel: 'noopener' }); + const all = () => true; + const everyday = (s) => s.key === 'everyday'; + const hard = (s) => s.group === 'dataset'; + const { inUse, googlePlay } = WORLD_PHONES; + const apple = pctRead(APPLE, all).rate; + const samsung = samsungRate(all).rate; + const others = otherApps(); + const n = (v) => String(Math.round(v)); + const range = (vals) => (n(Math.min(...vals)) === n(Math.max(...vals)) ? n(vals[0]) : `${n(Math.min(...vals))}–${n(Math.max(...vals))}`); + const misses = (key) => [vsApple(key, everyday).missed, vsApple(key, hard).missed].map(n); + const samEvery = samsungVsApple(everyday); + const samHard = samsungVsApple(hard); + const appRead = others.map((k) => pctRead(k, all).rate); + const rows = [ // phones, how many (Counterpoint), their scanner, codes read, misses of every 100 the iPhone reads (everyday, hard) + ['iPhone', inUse.apple, 'Apple’s', percent(apple), '—', '—'], + // Google's scanner comes with Google Play services: apps reach it on most Android phones, and Pixel's QR button opens it + ['Most Android phones, in apps', `over ${googlePlay.billions} billion devices with Google Play, by Google’s count; also Pixel’s QR button`, + 'Google’s ML Kit, in Google Play services', percent(pctRead(GOOGLE, all).rate), ...misses(GOOGLE)], + ['Samsung', inUse.samsung, 'Samsung’s own, in its Camera app', about(samsung), `≈${n(samEvery.missed)}`, `≈${n(samHard.missed)}`], // estimates + ['Xiaomi, OPPO, vivo, Transsion, Honor', inUse.otherFive, 'each maker’s own', 'not yet measured', '—', '—'], + ['Huawei', inUse.huawei, 'Huawei’s Scan Kit', percent(pctRead(HUAWEI, all).rate), ...misses(HUAWEI)], + ['Android’s own Settings app', 'for Wi-Fi codes', 'ZXing', percent(pctRead(SETTINGS, all).rate), ...misses(SETTINGS)], + ['Other apps, on any phone', 'each brings its own', `${capital(WORDS[others.length])} that apps are built on`, + `${percent(Math.min(...appRead))}–${percent(Math.max(...appRead))}`, + range(others.map((k) => vsApple(k, everyday).missed)), range(others.map((k) => vsApple(k, hard).missed))], + ]; + const th = (text, attrs = {}) => el('th', { scope: 'col', text, ...attrs }); + $('who').replaceChildren( + el('thead', {}, [ + el('tr', {}, [th('Phones', { class: 'left', rowspan: '2' }), th('Their scanner', { class: 'left', rowspan: '2' }), + th(`Reads, of all ${N.toLocaleString()} codes`, { rowspan: '2' }), th('Misses, of every 100 codes an iPhone reads', { colspan: '2', scope: 'colgroup' })]), + el('tr', {}, [th('Everyday prints'), th('Hardest cases')]), + ]), + el('tbody', {}, rows.map(([phones, many, scanner, read, ev, hd]) => el('tr', {}, [ + el('th', { scope: 'row' }, [el('span', { class: 'name', text: phones }), el('span', { class: 'what', text: many })]), + el('td', { class: 'left', text: scanner }), + el('td', { text: read }), + el('td', { text: ev }), + el('td', { text: hd }), + ]))), + ); + // how the misses are counted, with the real counts behind one row + const zxEvery = vsApple(SETTINGS, everyday); + const zxHard = vsApple(SETTINGS, hard); + $('whoHow').textContent = `How the misses are counted, for Android Settings’ scanner: of the ${zxEvery.read.toLocaleString()} everyday prints an iPhone read, it missed ${zxEvery.missedN.toLocaleString()}, about ${n(zxEvery.missed)} in 100; of the ${zxHard.read.toLocaleString()} hardest cases an iPhone read, it missed ${zxHard.missedN.toLocaleString()}, about ${n(zxHard.missed)} in 100.`; + $('whoTitle').textContent = samsung < apple ? 'More than a billion phones read fewer codes than an iPhone' : 'Which phones read which codes'; + // the phones' main scanners on everyday prints (Android Settings' reads Wi-Fi codes only; its row and whoHow show it) + const everydayMost = n(Math.max(vsApple(GOOGLE, everyday).missed, samEvery.missed, vsApple(HUAWEI, everyday).missed)); + const googleHard = vsApple(GOOGLE, hard); + const both = n(samHard.missed) === n(googleHard.missed) + ? `Samsung’s and Google’s scanners each miss about ${n(samHard.missed)}` + : `Samsung’s scanner misses about ${n(samHard.missed)} and Google’s ${n(googleHard.missed)}`; + $('whoNote').textContent = `On everyday prints, Google’s, Samsung’s and Huawei’s scanners miss ${everydayMost === '0' ? 'almost none' : `at most ${everydayMost} in 100`} of the codes an iPhone reads. On the hardest cases, ${both} of every 100 an iPhone reads. Phones from Xiaomi, OPPO, vivo, Transsion and Honor, together more than a billion, are not yet measured.`; + const sam = samsungVsApple(all); + const g = vsApple(GOOGLE); + const h = vsApple(HUAWEI); + $('whoSource').replaceChildren( + `Some scanners also read codes an iPhone misses: for every 100 it reads, Huawei’s read ${n(h.extra)} more, Google’s ${n(g.extra)} and Samsung’s about ${n(sam.extra)}. Samsung’s figures are estimates; why the other makers wait is under How we measured. Phones in use: `, + link(inUse.url, inUse.source), '; devices with Google Play: ', link(googlePlay.url, googlePlay.source), '.', + ); +} + +// ---- the spectrum ----------------------------------------------------------------------- + +/** The illustrative mix over difficulty, split by how many scanners read each code. */ +function bellData() { + const counts = {}; + for (let i = 0; i < N; i++) counts[source(i).key] = (counts[source(i).key] || 0) + 1; + const nSets = DATA.sources.filter((s) => s.group === 'dataset' && counts[s.key]).length; + const weight = (s) => (s.group === 'dataset' ? WORLD.dataset / nSets : WORLD[s.key]) / counts[s.key]; + const dens = ZONES.map(() => new Float64Array(101)); + const piles = { lo: ZONES.map(() => 0), hi: ZONES.map(() => 0) }; + let total = 0; + for (let i = 0; i < N; i++) { + const w = weight(source(i)); + const d = DATA.items.d[i]; + const z = zoneIndex(COUNT[i]); + total += w; + if (d < 0) piles.lo[z] += w; + else if (d > 100) piles.hi[z] += w; + else dens[z][Math.round(d)] += w; + } + const sigma = 4.5; + const medians = {}; + for (const key of ['pristine', 'everyday', 'tough']) { + const ds = []; + for (let i = 0; i < N; i++) if (source(i).key === key) ds.push(DATA.items.d[i]); + ds.sort((a, b) => a - b); + medians[key] = ds[Math.floor(ds.length / 2)]; + } + const smooth = dens.map((arr) => Array.from(arr, (_, j) => { + let s = 0; + let ws = 0; + for (let k = Math.max(0, j - 14); k <= Math.min(100, j + 14); k++) { + const w = Math.exp(-((k - j) ** 2) / (2 * sigma * sigma)); + s += arr[k] * w; + ws += w; + } + return s / ws; + })); + return { smooth, piles, total, medians }; +} + +/** Shares of the four tones among the codes at difficulty d (the same smoothing as the bell). */ +function mixAt(d) { + let v; + if (d <= PILE_LO) v = BELL.piles.lo; + else if (d >= PILE_HI) v = BELL.piles.hi; + else { + const j = Math.max(0, Math.min(99, Math.floor(d))); + v = BELL.smooth.map((s) => s[j] + (s[j + 1] - s[j]) * (d - j)); + } + const t = v.reduce((a, b) => a + b, 0) || 1; + return v.map((x) => x / t); +} + +function renderKey() { + $('bellKey').replaceChildren( + el('span', { class: 'key-title', text: `How many of the ${allWord()} scanners read each code:` }), + ...ZONES.map((z) => el('span', {}, [swatch(z), z.range ? `${z.name} (${z.range})` : z.name])), + ); +} + +function renderBell() { + const svg = $('bell'); + const W = svg.clientWidth || 700; + const padTop = 18; + const plotH = 170; + const base = padTop + plotH; + const H = base + 46; + const x = (d) => 4 + ((d - X_MIN) / (X_MAX - X_MIN)) * (W - 8); + const xInv = (px) => X_MIN + ((px - 4) / (W - 8)) * (X_MAX - X_MIN); + svg.setAttribute('viewBox', `0 0 ${W} ${H}`); + svg.setAttribute('height', H); + svg.replaceChildren(); + + // stacked: all of them at the bottom, then most, some, none; piles keep the same area scale + const { smooth, piles } = BELL; + const cum = []; + smooth.forEach((s, z) => cum.push(s.map((v, j) => v + (z ? cum[z - 1][j] : 0)))); + const at = (arr, d) => { + const j = Math.max(0, Math.min(99, Math.floor(d))); + return arr[j] + (arr[j + 1] - arr[j]) * (d - j); + }; + const pileH = (p) => p.reduce((a, b) => a + b, 0) / 8; + const yMax = Math.max(...cum[cum.length - 1], pileH(piles.lo), pileH(piles.hi)) * 1.12; + const y = (v) => base - (Math.min(v, yMax) / yMax) * plotH; + ZONES.forEach((z, zi) => { + let path = ''; + for (let d = 0; d <= 100 + 1e-9; d += 0.5) path += `${path ? 'L' : 'M'}${x(d)},${y(at(cum[zi], d))}`; + for (let d = 100; d >= -1e-9; d -= 0.5) path += `L${x(d)},${zi ? y(at(cum[zi - 1], d)) : base}`; + sv('path', { d: `${path}Z`, fill: css(z.tone) }, svg); + }); + ZONES.slice(0, -1).forEach((_, zi) => { // a thin surface line between tones + let path = ''; + for (let d = 0; d <= 100 + 1e-9; d += 0.5) path += `${path ? 'L' : 'M'}${x(d)},${y(at(cum[zi], d))}`; + sv('path', { d: path, fill: 'none', stroke: css('--surface'), 'stroke-width': 1.5 }, svg); + }); + for (const [c, p, what] of [[PILE_LO, piles.lo, 'Read by every scanner at every resolution'], [PILE_HI, piles.hi, 'Read by no scanner at any resolution']]) { + let v0 = 0; + p.forEach((w, zi) => { + if (!w) return; + const top = y((v0 + w) / 8); + sv('rect', { x: x(c - 4), y: top, width: x(c + 4) - x(c - 4), height: y(v0 / 8) - top, fill: css(ZONES[zi].tone) }, svg); + v0 += w; + }); + const hit = sv('rect', { x: x(c - 5), y: padTop, width: x(c + 5) - x(c - 5), height: plotH, fill: 'transparent' }, svg); + const tip = (e) => showTip(e, [['v', `${Math.round((100 * p.reduce((a, b) => a + b, 0)) / BELL.total)}% of the mix`], ['k', what]]); + hit.addEventListener('pointermove', tip); + hit.addEventListener('pointerdown', tip); + hit.addEventListener('pointerleave', leaveTip); + } + sv('line', { x1: x(X_MIN), x2: x(X_MAX), y1: base + 0.5, y2: base + 0.5, stroke: css('--rule') }, svg); + + // a name inside each tone, only where the tone is thick enough under the whole word + const halfWord = (24 / (W - 8)) * (X_MAX - X_MIN); + ZONES.forEach((z, zi) => { + let best = null; + for (let d = 2 + halfWord; d <= 98 - halfWord; d += 1) { + const mid = ((zi ? y(at(cum[zi - 1], d)) : base) + y(at(cum[zi], d))) / 2; + // room left above and below the word, at its two ends and its middle + const room = Math.min(...[d - halfWord, d, d + halfWord].map((dd) => + Math.min(mid - 9 - y(at(cum[zi], dd)), (zi ? y(at(cum[zi - 1], dd)) : base) - (mid + 5)))); + if (!best || room > best.room) best = { d, room, mid }; + } + if (best && best.room >= 2) { + sv('text', { x: x(best.d), y: best.mid + 4, 'text-anchor': 'middle', style: `fill:${onTone(z)};font-weight:600`, text: z.name }, svg); + } + }); + // the axis: easier and harder at the ends, and the middle code of each set we made + const placed = [{ cx: x(X_MIN) + 30, w: 64, r: 0 }, { cx: x(X_MAX) - 30, w: 64, r: 0 }]; + sv('text', { x: x(X_MIN), y: base + 20, class: 'muted', text: '← Easier' }, svg); + sv('text', { x: x(X_MAX), y: base + 20, class: 'muted', 'text-anchor': 'end', text: 'Harder →' }, svg); + const ticks = []; + for (const [key, text] of [['pristine', 'clean prints'], ['everyday', 'everyday prints'], ['tough', 'tough prints']]) { + const cx = x(BELL.medians[key]); + const w = text.length * 6.4 + 10; + let r = 0; + while (placed.some((q) => q.r === r && Math.abs(q.cx - cx) < (q.w + w) / 2)) r += 1; + placed.push({ cx, w, r }); + ticks.push({ cx, r, text }); + } + // the lines first; then each label on a patch of the page's color, so a lower label's line passes behind a higher label + for (const { cx, r } of ticks) sv('line', { x1: cx, x2: cx, y1: base, y2: base + 6 + 15 * r, stroke: css('--ink-3') }, svg); + for (const { cx, r, text } of ticks) { + const label = sv('text', { x: cx, y: base + 20 + 15 * r, 'text-anchor': 'middle', class: 'muted', text }, svg); + const bb = label.getBBox(); + svg.insertBefore(sv('rect', { x: bb.x - 3, y: bb.y, width: bb.width + 6, height: bb.height, fill: css('--surface') }), label); + } + + // the movable cursor + const cx = x(state.d); + const g = sv('g', { 'pointer-events': 'none' }, svg); + sv('line', { x1: cx, x2: cx, y1: padTop - 8, y2: base, stroke: css('--accent'), 'stroke-width': 2 }, g); + sv('circle', { cx, cy: padTop - 8, r: 7, fill: css('--accent'), stroke: css('--surface'), 'stroke-width': 2 }, g); + + const move = (e) => { + const rect = svg.getBoundingClientRect(); + const d = xInv(((e.clientX - rect.left) / rect.width) * W); + setCursor(snap(d)); + }; + svg.onpointerdown = (e) => { svg.setPointerCapture(e.pointerId); move(e); svg.onpointermove = (ev) => { if (ev.buttons) move(ev); }; }; + svg.onpointerup = () => { svg.onpointermove = null; }; + svg.setAttribute('aria-label', `QR codes from easiest to hardest, shaded by how many of the ${allWord()} scanners read each one: all ${allWord()}, most, some or none.`); +} + +function renderReadout() { + const mix = mixAt(state.d); + let text; + if (state.d <= PILE_LO) text = 'Codes here were read by every scanner at every image resolution.'; + else if (state.d >= PILE_HI) text = 'Codes here were read by no scanner at any image resolution.'; + else { + const parts = ZONES.map((z, zi) => [z, mix[zi]]).filter(([, v]) => v > 0); + text = `Codes here: ${parts.map(([z, v], k) => `${pctText(v)} ${k ? 'by' : 'read by'} ${z.words}`).join(' · ')}.`; + } + $('readout').textContent = text; +} + +/** The eight example codes nearest this spot; the first one shown has the spot's most common tone. */ +function nearest(d) { + const c = []; + for (let i = 0; i < N; i++) { + if (DATA.items.x[i] < 0) continue; + c.push([Math.abs(DATA.items.d[i] - d), i]); + } + const picks = c.sort((a, b) => a[0] - b[0]).slice(0, 8).map(([, i]) => i); + const mix = mixAt(d); + const common = mix.indexOf(Math.max(...mix)); + const first = picks.findIndex((i) => zoneIndex(COUNT[i]) === common); + return first > 0 ? [picks[first], ...picks.filter((_, k) => k !== first)] : picks; +} + +function renderSpecimen() { + const picks = nearest(state.d); + const i = picks[state.offset % picks.length]; + const fi = DATA.frames.indexOf(BASE_FRAME); + const readKeys = ORDER.filter((k) => reads(i, fi, decIndex(k))); + const z = zoneFor(readKeys.length); + const yes = (k) => (readKeys.includes(k) ? 'read' : 'missed'); + const others = otherApps(); + const ex = DATA.examples[DATA.items.x[i]]; + const plain = SOURCE_PLAIN[ex.kind ? `${source(i).key}/${ex.kind}` : source(i).key] || source(i).name; + const next = el('button', { class: 'linklike', type: 'button', text: 'Another code from here' }); + next.addEventListener('click', () => { state.offset += 1; renderSpecimen(); }); + const full = /^https?:/.test(ex.href) ? ex.href : imgUrl(ex.href); // the exact picture the scanners read + $('specimen').replaceChildren( + el('img', { src: imgUrl(ex.img), alt: `A QR code from this spot: ${plain}` }), + el('a', { class: 'scan-it', href: full, target: '_blank', rel: 'noopener', text: 'Open the full picture, and try it with your phone ↗' }), + el('div', { class: 'big' }, [namedSwatch(z), countText(readKeys.length)]), + el('div', { class: 'small', text: `Apple’s: ${yes(APPLE)} · Google’s: ${yes(GOOGLE)} · Huawei’s: ${yes(HUAWEI)} · Android Settings’: ${yes(SETTINGS)} · apps’ scanners: ${others.filter((k) => readKeys.includes(k)).length} of ${others.length}` }), + el('div', { class: 'src', text: plain }), + next, + ); +} + +function setCursor(d) { + state.d = d; + state.offset = 0; + $('cursor').value = String(d); + renderBell(); + renderReadout(); + renderSpecimen(); +} + +function renderTakeaway() { + const fi = DATA.frames.indexOf(BASE_FRAME); + const every = []; + for (let i = 0; i < N; i++) if (source(i).key === 'everyday') every.push(i); + const allRead = every.filter((i) => COUNT[i] === ORDER.length).length / every.length; + const ok = readsGroup(every, fi); + const no = [...new Set(ORDER.filter((k) => !ok.includes(k)).map((k) => SPOKEN[k]))]; + const missed = 100 - Math.round(100 * allRead); + $('spectrumTitle').textContent = missed >= 10 ? 'Even everyday prints fail on some scanners' : 'Easy codes scan everywhere. Hard ones split the phones.'; + $('takeaway').textContent = `Of everyday prints, ${missed}% are missed by at least one of the ${allWord()} scanners` + (no.length + ? `; ${join(no)} read fewer than 9 in 10 of them.` + : ', though each reads 9 in 10 or more of them.'); + $('bellNote').textContent = 'The curve’s shape is an illustrative mix of the sets, not a count of them.'; +} + +// ---- each scanner (inside "See each scanner") --------------------------------------------- + +function renderLanes() { + resolutionControl($('laneRes'), state.laneFrame, (f) => { state.laneFrame = f; renderLanes(); }); + const svg = $('lanes'); + const W = svg.clientWidth || 700; + const stacked = W < 640; // phones: each name above its lane, without the technical line + const rowH = stacked ? 50 : 34; + const H = ORDER.length * rowH + 30; + svg.setAttribute('viewBox', `0 0 ${W} ${H}`); + svg.setAttribute('height', H); + svg.replaceChildren(); + const labels = ORDER.flatMap((key, r) => [ + sv('text', { x: 0, y: r * rowH + 15, class: 'strong', text: PLAIN[key][0] }, svg), + ...(stacked ? [] : [sv('text', { x: 0, y: r * rowH + 29, class: 'muted', style: 'font-size:11px', text: PLAIN[key][1] }, svg)]), + ]); + const left = stacked ? 0 : Math.ceil(Math.max(...labels.map((t) => t.getComputedTextLength()))) + 16; + const barY = stacked ? 22 : 6; // the lane's top, within its row + const barH = 20; + const x = (d) => left + ((d - X_MIN) / (X_MAX - X_MIN)) * (W - left - 4); + $('lanesKey').replaceChildren( + el('span', {}, [el('i', { class: 'ramp' }), 'Share of the codes read']), + el('span', {}, [el('i', { class: 'uline' }), 'At least 9 in 10 read']), + ); + $('lanesNote').textContent = 'Each cell holds codes of about the same difficulty. An orange line under a cell means the scanner read at least 9 in 10 of them; where its line stops and the others go on, it misses codes they read. Hover over or tap a cell for its count.'; + const fi = DATA.frames.indexOf(state.laneFrame); + const rgb = (hex) => hex.match(/\w\w/g).map((h) => parseInt(h, 16)); + const a = rgb(css('--lane-0')); + const b = rgb(css('--z-every')); + const mix = (t) => `rgb(${a.map((c, j) => Math.round(c + (b[j] - c) * t)).join(',')})`; + const span = (bin) => (bin === 0 ? [-10, -2] : bin === 51 ? [102, 110] : [(bin - 1) * 2, bin * 2]); + const binOf = (d) => (d < 0 ? 0 : d > 100 ? 51 : 1 + Math.min(49, Math.floor(d / 2))); + ORDER.forEach((key, r) => { + const k = decIndex(key); + const top = r * rowH; + const bins = Array.from({ length: 52 }, () => [0, 0]); + for (let i = 0; i < N; i++) { + const bin = binOf(DATA.items.d[i]); + bins[bin][0] += reads(i, fi, k); + bins[bin][1] += 1; + } + bins.forEach(([rd, n], bin) => { + if (!n) return; + const [from, to] = span(bin); + sv('rect', { x: x(from), y: top + barY, width: Math.max(1, x(to) - x(from) - 0.5), height: barH, fill: mix(rd / n) }, svg); + }); + // the page's one rule, cell by cell: one line under each run of cells where it read at least 9 in 10 + let run = null; + const flush = () => { + if (run) sv('rect', { x: x(span(run[0])[0]), y: top + barY + barH + 2, width: Math.max(1, x(span(run[1])[1]) - x(span(run[0])[0]) - 0.5), height: 3, + fill: css('--accent'), class: 'ok', 'data-key': key, 'data-cells': `${run[0]}-${run[1]}` }, svg); + run = null; + }; + bins.forEach(([rd, n], bin) => { + const ok = n > 0 && rd >= RELIABLE * n; + if (!ok || bin === 1 || bin === 51) flush(); // the end blocks stand apart from the scale + if (ok) run = run ? [run[0], bin] : [bin, bin]; + }); + flush(); + const hit = sv('rect', { x: x(X_MIN), y: top, width: x(X_MAX) - x(X_MIN), height: rowH, fill: 'transparent' }, svg); + const tipAt = (e) => { + const rect = svg.getBoundingClientRect(); + const d = X_MIN + ((((e.clientX - rect.left) / rect.width) * W - left) / (W - left - 4)) * (X_MAX - X_MIN); + const bin = d > 101 ? 51 : d < -1 ? 0 : binOf(Math.max(0, Math.min(100, d))); + if (!bins[bin][1]) { hideTip(); return; } + const [rd, n] = bins[bin]; + showTip(e, [['v', `${percent(rd / n)} read`], ['k', `${PLAIN[key][0]}: ${rd.toLocaleString()} of ${n.toLocaleString()} codes here`]]); + }; + hit.addEventListener('pointermove', tipAt); + hit.addEventListener('pointerdown', tipAt); + hit.addEventListener('pointerleave', leaveTip); + }); + sv('text', { x: x(X_MIN), y: H - 6, class: 'muted', text: '← Easier' }, svg); + sv('text', { x: x(X_MAX), y: H - 6, class: 'muted', 'text-anchor': 'end', text: 'Harder →' }, svg); +} + +// ---- what makes a code hard ------------------------------------------------------------- + +/** One sentence per pair, every number read off the ladder. */ +function pairRule(key, lad) { + const all = lastStep(lad, ORDER.length); + const most = lastStep(lad, mostMin()); + const s = (li) => (li < 0 ? null : lad.levels[li].short); + const grid = (v) => { const n = Number(v.replace('v', '')); return `version ${n} (${17 + 4 * n} squares across)`; }; + if (all < 0 || most < 0) return 'Even the easiest step did not scan reliably on most scanners.'; + switch (key) { + case 'size': + return `What counts is how many camera pixels cover each small square: most scanners need at least ${s(most)}, all ${allWord()} need ${s(all)}.`; + case 'version': { // the captions carry the numbers; the sentence says why + const lv = lad.levels[pairSteps(lad).bad]; + const big = printedBigger(lv); + const squeezed = 'More data means more squares, so in the same space each one shrinks.'; + if (!big) return `${squeezed} At ${grid(lv.short)}, ${stepScanners(lv).length} of ${ORDER.length} scanners read it.`; + const miss = ORDER.length - stepScanners(big.lv).length; + return `${squeezed} Printed bigger, the same code reads again ` + (miss + ? `on all but ${WORDS[miss]} scanner${miss === 1 ? ', which handles' : 's, which handle'} that many squares poorly.` + : 'on every scanner.'); + } + case 'blur': + return all > 0 + ? `A little blur is fine: all ${allWord()} read up to ${s(all)} px of blur, most up to ${s(most)} px, on squares ${DATA.ladderBase.ppm} px wide.` + : `Only a sharp image read on all ${allWord()}; most read up to ${s(most)} px of blur, on squares ${DATA.ladderBase.ppm} px wide.`; + case 'contrast': + return `All ${allWord()} need at least ${s(all)} contrast between ink and paper; most read faded ink down to ${s(most)}.`; + case 'curve': + return all > 0 + ? `Wrapped round a curve, the grid bends. All ${allWord()} read down to a bend radius of ${s(all)}× the code’s width; most, down to ${s(most)}×.` + : `Wrapped round a curve, the grid bends. Most scanners read down to a bend radius of ${s(most)}× the code’s width.`; + case 'corner': { + const c = cornerFacts(); + if (!c) return 'Some scanner still read 9 in 10 codes at every step.'; + return `Scanners find a code by its corner squares, which error correction doesn’t protect: covering ${c.step.short} of one, ${c.share} of the whole code, left no scanner reading 9 codes in 10. A ${c.smudge.short} smudge elsewhere still left ${c.smudgeCount} of the ${ORDER.length} reading.`; + } + default: + return ''; + } +} + +/** The corner-square story, read off two ladders: the first corner step no scanner reads, its + * share of the whole code, and the first smudge step (kept off the corners) for comparison. */ +function cornerFacts() { + const corner = ladder('corner'); + const damage = ladder('damage'); + const li = corner.levels.findIndex((lv) => stepScanners(lv).length === 0); + if (li < 0) return null; + const side = 17 + 4 * DATA.ladderBase.version; + const pct = parseFloat(corner.levels[li].short) / 100; + const smudge = damage.levels[1]; + return { step: corner.levels[li], share: `${((100 * pct * 49) / (side * side)).toFixed(1)}%`, smudge, smudgeCount: stepScanners(smudge).length }; +} + +function renderPairs() { + $('factorsLede').textContent = `Each pair changes one thing about a code all ${allWord()} scanners read. Under each picture: how many still read at least 9 in 10 codes like it.`; + $('pairs').replaceChildren(...PAIRS.map(({ key, title }) => { + const lad = ladder(key); + const { good, bad } = pairSteps(lad); + const fig = (lv, label = lv.label, from = lad) => { + const ok = stepScanners(lv); + return el('figure', {}, [ + el('img', { src: imgUrl(lv.img), alt: `${from.name}: ${label}`, loading: 'lazy' }), + el('figcaption', {}, [ + el('span', { text: label }), + el('span', { class: 'count', text: `${ok.length} of ${ORDER.length} scanners`, title: ok.length ? `Read reliably by ${join(ok.map((k) => PLAIN[k][0]))}` : 'Read reliably by none' }), + ]), + ]); + }; + // too much data: the same codes printed bigger beside them squeezed into the space a smaller version reads in + const big = key === 'version' ? printedBigger(lad.levels[bad]) : null; + const v = (lv) => lv.short.replace('v', 'Version '); + const figs = big + ? [fig(big.lv, `${v(big.lv)}, printed bigger: ${pxOf(big.lv)} camera pixels per square`, big.lad), + fig(lad.levels[bad], `${v(lad.levels[bad])}, squeezed: ${pxOf(lad.levels[bad])} camera pixels per square`)] + : [fig(lad.levels[good]), fig(lad.levels[bad])]; + return el('article', { class: 'pair' }, [ + el('h3', { text: title }), + el('div', { class: 'two' }, figs), + el('p', { text: pairRule(key, lad) }), + ]); + })); +} + +function renderExplorer() { + const box = $('explorer'); + const lad = ladder(state.factor); + state.level = Math.min(state.level, lad.levels.length - 1); + const lv = lad.levels[state.level]; + const ok = stepScanners(lv); + const z = zoneFor(ok.length); + const need = Math.ceil(RELIABLE * lv.n); + const pick = (li) => { state.level = li; renderExplorer(); }; + const pills = el('div', { class: 'pills', role: 'group', 'aria-label': 'Factor' }, DATA.ladders.map((l) => { + const b = el('button', { type: 'button', 'aria-pressed': String(l.key === state.factor), text: l.name }); + b.addEventListener('click', () => { state.factor = l.key; state.level = 0; renderExplorer(); }); + return b; + })); + let control; + if (lad.levels.length <= 3) { // a choice, not a scale: one button per step + control = el('div', { class: 'seg', role: 'group', 'aria-label': lad.name }, lad.levels.map((l, li) => { + const b = el('button', { type: 'button', 'aria-pressed': String(li === state.level), text: l.label }); + b.addEventListener('click', () => pick(li)); + return b; + })); + } else { + const slider = el('input', { type: 'range', class: 'range', min: '0', max: String(lad.levels.length - 1), step: '1', + value: String(state.level), 'aria-label': `${lad.name}: step`, 'aria-valuetext': lv.label }); + slider.addEventListener('input', () => { pick(Number(slider.value)); box.querySelector('input.range')?.focus(); }); + control = el('div', {}, [slider, el('div', { class: 'ends' }, [el('span', { text: 'Easier' }), el('span', { text: `Step ${state.level + 1} of ${lad.levels.length}` }), el('span', { text: 'Harder' })])]); + } + const rows = el('div', { class: 'rows' }, ORDER.map((key) => { + const r = lv.reads[decIndex(key)]; + return el('div', { class: `row${r >= need ? ' ok' : ''}` }, [ + el('span', { class: 'label', text: PLAIN[key][0] }), + el('span', { class: 'track' }, [el('span', { class: 'fill', style: `width:${(100 * r) / lv.n}%` }), el('span', { class: 'mark', style: `left:${100 * RELIABLE}%` })]), + el('span', { class: 'val', text: `${r}/${lv.n}` }), + ]); + })); + // a factor's steps, one column each; printed bigger lines up under the same versions of "Amount of data" (-1: none) + const columns = (l) => (l.key === 'version_big' + ? ladder('version').levels.map((lv) => l.levels.findIndex((s) => s.short === lv.short)) + : l.levels.map((_, li) => li)); + const tips = el('div', { class: 'tips' }, [ + el('h3', { text: 'Every factor, every step' }), + ...DATA.ladders.map((l) => el('div', { class: 'tip-row' }, [ + el('span', { class: 'label', text: l.name }), + el('div', { class: 'tip-cells', style: `grid-template-columns:repeat(${columns(l).length}, minmax(0, 1fr))` }, + columns(l).map((li, col) => { + if (li < 0) { // printed bigger, this version would not fit the picture + const short = ladder('version').levels[col].short; + return el('span', { class: 'tip-none', text: short, title: `${short.replace('v', 'Version ')} at ${pxOf(l.levels[0])} pixels per square doesn’t fit a ${DATA.ladderFrame} × ${DATA.ladderFrame * 3 / 4} picture at every angle` }); + } + const step = l.levels[li]; + const n = stepScanners(step).length; + const zz = zoneFor(n); + const b = el('button', { type: 'button', text: step.short, 'aria-label': `${l.name}, ${step.label}: ${n} of ${ORDER.length} scanners`, + style: `background:${css(zz.tone)};color:${onTone(zz)}` }); + const tip = (e) => showTip(e, [['v', `${n} of ${ORDER.length} scanners`], ['k', `${l.name}: ${step.label}`]]); + b.addEventListener('pointermove', tip); + b.addEventListener('pointerdown', tip); + b.addEventListener('pointerleave', leaveTip); + b.addEventListener('click', () => { state.factor = l.key; state.level = li; renderExplorer(); box.scrollIntoView({ behavior: 'smooth', block: 'start' }); }); + return b; + })), + ])), + el('div', { class: 'key' }, ZONES.map((zz) => el('span', {}, [swatch(zz), zz.range ? `${zz.name} (${zz.range})` : zz.name]))), + el('p', { class: 'fine', text: `A step counts as read when a scanner reads at least ${need} of its ${lv.n} codes, at a ${DATA.ladderFrame}-px camera image.` }), + ]); + const b = DATA.ladderBase; + const link = (href, text) => el('a', { href, text, target: '_blank', rel: 'noopener' }); + const primer = el('div', { class: 'primer' }, [ // the steps every factor below breaks one of + el('h3', { text: 'How a scanner reads a QR code' }), + el('ol', {}, [ + el('li', {}, [el('strong', { text: `${READ_STEPS[0]}.` })]), + el('li', {}, [el('strong', { text: `${READ_STEPS[1]}` }), ' by its three corner squares, whose ', link(DENSO_QR, '1:1:3:1:1 stripes'), ' stand out from other print.']), + el('li', {}, [el('strong', { text: `${READ_STEPS[2]}` }), ' between them, helped on bigger codes by smaller ', link(DENSO_QR, 'alignment squares'), '.']), + el('li', {}, [el('strong', { text: `${READ_STEPS[3]}` }), ', each at its place in the grid.']), + el('li', {}, [el('strong', { text: `${READ_STEPS[4]}` }), ', which repairs damaged squares by the ', link(QR_EC, 'Reed–Solomon method'), '.']), + ]), + el('p', { class: 'fine', text: 'Each factor names the step it breaks.' }), + ]); + box.replaceChildren( + primer, + pills, + el('p', { class: 'about', text: lad.about }), + ...(lad.breaks ? [el('p', { class: 'about breaks' }, [ // the step it breaks, in bold as in the list of steps + el('strong', { text: `${lad.breaks.split(': ')[0]}. ` }), capital(lad.breaks.split(': ').slice(1).join(': '))])] : []), + el('div', { class: 'explore' }, [ + el('figure', { style: 'margin:0' }, [ + el('img', { src: imgUrl(lv.img), alt: `${lad.name}: ${lv.label}` }), + el('div', { class: 'step', text: lv.label }), + el('p', { class: 'fine', text: lad.window > LADDER_WINDOW + ? `Shown at ${lad.window === 2 * LADDER_WINDOW ? 'half' : `1/${lad.window / LADDER_WINDOW} of`} the camera’s scale, so bigger codes fit: one pixel here is ${WORDS[lad.window / LADDER_WINDOW] ?? lad.window / LADDER_WINDOW} pixels of a ${DATA.ladderFrame}-pixel-wide image.` + : `Shown at the camera’s scale: one pixel here is one pixel of a ${DATA.ladderFrame}-pixel-wide image.` }), + el('p', { class: 'fine', text: `How it is made: ${lad.how} Everything else stays as the base code: ${join([['version', `version ${b.version}`], + ['ppm', `${b.ppm} camera pixels per square`], ['contrast', `contrast ${Math.round(100 * b.contrast)}%`], ['tilt', `tilted ${b.tilt}°`], + ['blur', `blur ${b.blur} px`]].filter(([k]) => !(OWN_SETTINGS[lad.key] || []).includes(k)).map(([, text]) => text))}.` }), + ]), + el('div', {}, [ + control, + el('div', { class: 'headline' }, el('span', { class: 'step' }, [namedSwatch(z), groupText(ok.length)])), + rows, + el('p', { class: 'fine', text: `Each bar: how many of the ${lv.n} codes the scanner read. Dark bars pass the line at ${need} of ${lv.n}.` }), + ]), + ]), + tips, + ); +} + +// ---- Android: the scanner depends on the app --------------------------------------------- + +/** Each set's codes and every scanner's read rate on them, at frame index fi. */ +function setRates(fi) { + return SETS.map((set) => { + const items = []; + for (let i = 0; i < N; i++) if (set.match(source(i))) items.push(i); + const rate = Object.fromEntries(ORDER.map((k) => [k, items.reduce((acc, i) => acc + reads(i, fi, decIndex(k)), 0) / items.length])); + return { ...set, items, rate }; + }); +} + +/** Going from the base resolution to the highest, in one sentence: on any set, does a scanner read + * at least a point more, or a point fewer? */ +function highNote() { + const top = RESOLUTIONS[0].frame; + const high = setRates(DATA.frames.indexOf(top)); + const base = setRates(DATA.frames.indexOf(BASE_FRAME)); + const diffs = high.flatMap((set, si) => ORDER.map((k) => set.rate[k] - base[si].rate[k])); + const more = diffs.some((d) => d >= 0.01); + const fewer = diffs.some((d) => d <= -0.01); + const from = `From ${BASE_FRAME} to ${top} pixels`; + if (more && fewer) return `${from}, some scanners read more and some read fewer.`; + if (more) return `${from}, scanners read as many codes or more.`; + if (fewer) return `${from}, scanners read as many codes or fewer.`; + return ''; +} + +function renderAndroid() { + resolutionControl($('gridRes'), state.gridFrame, (f) => { state.gridFrame = f; renderAndroid(); }); + const sets = setRates(DATA.frames.indexOf(state.gridFrame)); + const sam = state.gridFrame === DATA.samsung.frame; // Samsung's scanner was read at one resolution + for (const set of sets) set.samsung = sam ? samsungRate(set.match).rate : null; + const android = ORDER.filter(isAndroid); + const others = otherApps(); + const kind = (k) => (k === APPLE ? 'apple' : k === GOOGLE ? 'google' : k === HUAWEI ? 'huawei' : k === SETTINGS ? 'own' : 'other'); + const mark = (k, set) => el('span', { class: `mark ${kind(k)}`, style: `left:${100 * set.rate[k]}%`, + title: `${PLAIN[k][0]}: ${percent(set.rate[k])} of ${set.items.length.toLocaleString()} ${set.noun}` }); + const samsungMark = (set) => (sam ? [el('span', { class: 'mark samsung', style: `left:${100 * set.samsung}%`, + title: `Samsung’s scanner: about ${about(set.samsung).slice(1)} of ${set.noun}, estimated from a sample` })] : []); + const spread = (set) => { // the measured Android scanners: Samsung's estimate stays a mark of its own + const v = android.map((k) => set.rate[k]); + return [Math.min(...v), Math.max(...v)]; + }; + $('skey').replaceChildren( + el('span', {}, [el('span', { class: 'mark apple' }), 'Apple’s scanner']), + el('span', {}, [el('span', { class: 'mark google' }), 'Google’s scanner']), + el('span', {}, [el('span', { class: 'mark samsung' }), sam ? 'Samsung’s scanner, estimated' : `Samsung’s scanner: ${SAMSUNG_RES()} only`]), + el('span', {}, [el('span', { class: 'mark huawei' }), 'Huawei’s scanner']), + el('span', {}, [el('span', { class: 'mark own' }), 'Android Settings’ scanner']), + el('span', {}, [el('span', { class: 'mark other' }), `${others.length} scanners other apps are built on`]), + ); + $('strips').replaceChildren( + el('div', { class: 'srow shead', 'aria-hidden': 'true' }, [el('span'), el('span'), el('span', { class: 'sval', text: 'Android range' })]), + ...sets.map((set) => { + const [lo, hi] = spread(set); + return el('div', { class: 'srow', role: 'listitem', 'aria-label': `${set.label}: Apple’s scanner ${percent(set.rate[APPLE])}; Google’s ${percent(set.rate[GOOGLE])}; ${sam ? `Samsung’s about ${about(set.samsung).slice(1)}; ` : ''}Huawei’s ${percent(set.rate[HUAWEI])}; Android Settings’ ${percent(set.rate[SETTINGS])}; Android scanners from ${percent(lo)} to ${percent(hi)}` }, [ + el('span', { class: 'slabel', text: set.label }), + el('span', { class: 'strack' }, [ + el('span', { class: 'sband', style: `left:${100 * lo}%;width:${100 * (hi - lo)}%` }), + ...others.map((k) => mark(k, set)), + mark(SETTINGS, set), + mark(APPLE, set), + ...samsungMark(set), // a hollow square: above Apple's ring, below Huawei's and Google's marks + mark(HUAWEI, set), // above Apple's ring, so it shows where they meet + mark(GOOGLE, set), // last: where it meets Apple's ring it shows inside it + ]), + el('span', { class: 'sval', text: percent(lo) === percent(hi) ? percent(lo) : `${percent(lo)}–${percent(hi)}` }), + ]); + }), + el('div', { class: 'srow saxis', 'aria-hidden': 'true' }, [el('span'), el('span', { class: 'strack' }, [el('span', { text: '0%' }), el('span', { text: '50%' }), el('span', { text: '100% read' })]), el('span')]), + ); + const [cleanLo] = spread(sets[0]); + const [toughLo, toughHi] = spread(sets[2]); + const width = (set) => spread(set)[1] - spread(set)[0]; + const widens = width(sets[0]) < width(sets[1]) && width(sets[1]) < width(sets[2]); // clean, everyday, tough prints + $('androidTitle').textContent = widens ? 'The gap opens on harder codes' : 'The gap, set by set'; + $('stripNote').textContent = `On clean prints every Android scanner read at least ${percent(cleanLo)}. On tough prints an iPhone read ${percent(sets[2].rate[APPLE])}, and Android scanners from ${percent(toughLo)} to ${percent(toughHi)}.`; + const head = el('thead', {}, el('tr', {}, [el('th', { scope: 'col', text: '' }), ...sets.map((set) => el('th', { scope: 'col', text: set.label }))])); + const samsungRow = el('tr', {}, [ + el('th', { scope: 'row' }, [el('span', { class: 'name', text: 'Samsung’s scanner' }), el('span', { class: 'what', text: `Samsung’s Camera app; estimated from a sample, ${SAMSUNG_RES()} only` })]), + ...sets.map((set) => el('td', sam + ? { 'aria-label': `Samsung’s scanner, ${set.noun}: about ${about(set.samsung).slice(1)} read, estimated`, text: about(set.samsung) } + : { 'aria-label': `Samsung’s scanner, ${set.noun}: read at ${SAMSUNG_RES()} resolution only`, text: '—' })), + ]); + const body = el('tbody', {}, ORDER.flatMap((k) => [el('tr', {}, [ + el('th', { scope: 'row' }, [el('span', { class: 'name', text: PLAIN[k][0] }), el('span', { class: 'what', text: PLAIN[k][1] })]), + ...sets.map((set) => el('td', { 'aria-label': `${PLAIN[k][0]}, ${set.noun}: ${percent(set.rate[k])} read`, title: `${percent(set.rate[k])} of ${set.items.length.toLocaleString()} ${set.noun}`, text: percent(set.rate[k]) })), + ]), ...(k === GOOGLE ? [samsungRow] : [])])); + $('phones').replaceChildren(head, body); + $('numbers').hidden = !state.showPct; + const toggle = el('button', { class: 'linklike', type: 'button', text: state.showPct ? 'Hide the numbers' : 'Show the numbers' }); + toggle.addEventListener('click', () => { state.showPct = !state.showPct; renderAndroid(); }); + $('gridNote').replaceChildren(toggle); +} + +// ---- advice ----------------------------------------------------------------------------- + +function renderAdvice() { + const fi = DATA.frames.indexOf(BASE_FRAME); + const size = ladder('size'); + const colors = ladder('colors'); + const dots_ = ladder('dots'); + const pxMost = size.levels[Math.max(0, lastStep(size, mostMin()))].short; + const pxAll = size.levels[Math.max(0, lastStep(size, ORDER.length))].short; + const lightOk = stepScanners(colors.levels[colors.levels.length - 1]); + const lost = sayNames(ORDER.filter((k) => !lightOk.includes(k))); + const dotStep = dots_.levels[firstBelow(dots_, ORDER.length)]; + const dotLost = dotStep ? sayNames(ORDER.filter((k) => !stepScanners(dotStep).includes(k))) : []; + const c = cornerFacts(); + const tough = []; + for (let i = 0; i < N; i++) if (source(i).key === 'tough') tough.push(i); + const share = (key) => tough.reduce((acc, i) => acc + reads(i, fi, decIndex(key)), 0) / tough.length; + const rate = (key) => percent(share(key)); + const otherRates = otherApps().map(share); + const items = [ + ['Size the print for the data.', 'More data means smaller squares at the same printed size. Print bigger as the data grows, or keep it short, such as with a short GS1 Digital Link domain.'], + ['Print it big enough for the distance.', `Most scanners need about ${pxMost} camera pixels per square, and all ${allWord()} need ${pxAll}. Twice the distance needs twice the size.`], + ['Keep it dark on light, made of solid squares.', `Light-on-dark codes lost ${join(lost)}.${dotStep ? ` Round dots, even ${dotStep.short} of a square wide, lost ${join(dotLost)}.` : ''}`], + ['Keep the three corner squares clean.', c ? `Covering ${c.step.short} of one corner square, ${c.share} of the whole code, left no scanner reading 9 codes in 10.` : 'A covered corner square cost scanners at every step.'], + ['Test with several phones and apps, not just an iPhone.', `On our tough prints an iPhone read ${rate(APPLE)}, Samsung’s scanner about ${about(samsungRate((s) => s.key === 'tough').rate).slice(1)}, and some apps’ scanners ${percent(Math.min(...otherRates))}.`], + ]; + $('advice').replaceChildren(...items.map(([head, body]) => el('li', {}, el('div', {}, [el('strong', { text: head }), el('span', { text: body })])))); +} + +// ---- how we measured -------------------------------------------------------------------- + +/** The false-reading check, from the measured negatives: images with no code at all. */ +function falseReadsText() { + const neg = DATA.checks.negatives; + const fooled = ORDER.filter((k) => neg.falseReads[k] > 0); + const result = fooled.length + ? fooled.map((k) => `${PLAIN[k][0]} returned something on ${neg.falseReads[k]}`).join('; ') + : `None of the ${allWord()} returned anything`; + const sam = DATA.samsung.negatives; + const kinds = sam ? Object.keys(sam.otherBarcodes.read) : []; + const other = kinds.reduce((acc, k) => acc + sam.otherBarcodes.read[k], 0); + const samsung = sam ? ` Samsung’s scanner read them too, on its phone: ${sam.falseReads ? `${sam.falseReads} false ${sam.falseReads === 1 ? 'reading' : 'readings'}` : 'no false readings'}${other ? `. Among the other barcode types it read the ${other} ${join(kinds)} codes, each correctly: it reads ${join(kinds)} as well as QR codes, while the scanners above, as we ran them, read QR codes only` : ''}.` : ''; + return `To check for false readings, all ${allWord()} scanners also read ${neg.n} images with no code, made to fool them with look-alike corner squares, checkerboards, clutter and other barcode types. ${result}.${samsung}`; +} + +/** How Samsung's scanner was read, and why its figures are estimates. */ +function samsungMethod() { + const s = DATA.samsung; + const [lo, hi] = s.range; + return [ + `Samsung’s scanner runs only on Samsung phones, and reading pictures through a borrowed phone is slow, so it read a random sample of each set, ${s.counted.toLocaleString()} codes in all, at ${s.frame} px only, on a real ${s.phone} (Samsung Camera ${s.camera}, One UI ${s.oneUi}, Android ${s.android}) borrowed through Samsung’s Remote Test Lab. Each picture was opened from the phone’s gallery in that scanner, as a person opens a saved photo, inside a white border so that the crop box the gallery shows first keeps all of it. Its figures are estimates: its gap to the other scanners on the codes it read, added to their results on all of a set’s codes. On all codes that comes to about ${percent(s.estimate)}, between ${percent(lo)} and ${percent(hi)} with 95% confidence. Older Samsung phones may run an older version of its scanner.`, + `For Samsung’s scanner, a read is the text on its result card, equal to the code’s content, and a miss is its own “Couldn’t read QR code”. Some content it never shows as text: contacts, Wi-Fi, calendar, SMS, location, email and phone codes and Facebook links go straight to an app, and binary content and JSON text show as an empty card. Its log shows it read them, but nothing on screen can be checked against the code, so the ${s.uncheckable} codes holding such content were left out of its comparison, for every scanner.`, + ]; +} + +function renderMethod() { + const count = (pred) => DATA.sources.filter(pred).reduce((acc, s) => acc + s.count, 0); + const made = count((s) => s.group === 'made' && s.key !== 'ladder'); + const real = count((s) => s.group === 'dataset'); + const ladders = count((s) => s.key === 'ladder'); + const src = (key) => count((s) => s.key === key).toLocaleString(); + const qrdn = DATA.sources.find((s) => s.key === 'qrdn').parts; // clean, tiled and distorted images + const n = DATA.ladders[0].levels[0].n; + const total = N * DATA.frames.length * DATA.decoders.length + ladders * DATA.decoders.length; + const para = (t) => el('p', { text: t }); + const a = (href, text) => el('a', { href, text, target: '_blank', rel: 'noopener' }); + const list = (rows) => el('ul', {}, rows.map((t) => el('li', { text: t }))); + const strip = sv('svg', { class: 'chart', role: 'img', 'aria-label': 'Where each set of codes sits on the difficulty scale' }); + const sam = DATA.samsung; + const [samHow, samRead] = samsungMethod(); + $('methodBody').replaceChildren(el('div', { class: 'method' }, [ + el('h3', { text: 'What we tested' }), + para(`${made.toLocaleString()} codes made for this page: clean, everyday and tough prints captured by a simulated phone camera. ${real.toLocaleString()} codes from four public research datasets, most of them hardest cases: ${src('boofcv')} real photos (BoofCV), ${src('broken104')} real codes that fail (Broken QR 104), ${src('syn10k')} computer-made warped codes (syn10k), and ${src('qrdn')} from QR-DN1.0: ${qrdn.distorted.toLocaleString()} distorted, noisy codes, and ${(qrdn.clean + qrdn.tiled).toLocaleString()} easy ones, its clean originals (${qrdn.clean.toLocaleString()}) alone or tiled four to a picture (${qrdn.tiled.toLocaleString()}). And ${ladders.toLocaleString()} codes for the factors: one code, changed one step at a time, ${n} codes per step.`), + el('h3', { text: 'How' }), + para(`Every code on the scale was read at seven image resolutions, from ${DATA.frames[0]} down to ${DATA.frames[DATA.frames.length - 1]} pixels on the long side: “at ${BASE_FRAME} px” means larger images were shrunk to ${BASE_FRAME}, and smaller ones were read as they are, never enlarged. Most research-dataset images are 512 × 512, so only the settings below 640 shrink them. The factor images were read at ${DATA.ladderFrame}. All ${allWord()} scanners read every image at every setting: ${total.toLocaleString()} results. Smaller images stand in for apps with low-resolution camera feeds, and for codes seen from farther away.`), + para(samHow), + el('h3', { text: 'What counts as a read' }), + para('Only the code’s exact content, byte for byte. Finding a code without reading it, or reading it wrong, is a miss; so is anything slower than 20 seconds.'), + para(`The right content comes with each code: we made it, or its dataset published it. Two datasets come without it: BoofCV’s photos, and QR-DN, whose distorted images take the content of their clean originals. There the content is what other decoders read identically, and a code is kept only if at least two decoders other than the scanner being scored agree. That left out ${DATA.checks.dependentTruth} photos.`), + para(samRead), + para(falseReadsText()), + el('h3', { text: 'How many scanners read it' }), + para(`One rule throughout. A single code is read by a scanner, or not; its shade counts the scanners that read it at ${BASE_FRAME} px: ${ZONES[0].words}, ${ZONES[1].words}, ${ZONES[2].words} or ${ZONES[3].words}; Samsung’s, read only on a sample, is not among the ${allWord()}. A group of codes, such as a factor step or a set, counts a scanner when it reads at least 9 in 10 of them: for a factor step, ${Math.ceil(RELIABLE * DATA.ladders[0].levels[0].n)} of its ${DATA.ladders[0].levels[0].n} codes.`), + el('h3', { text: 'Where a code sits' }), + para(`Only the reads decide: a standard item-response model places each code where scanner-and-resolution pairs start to fail, across all seven image resolutions. Codes every pair read sit at the far left; codes none read, at the far right. The curve on the scale is an illustrative mix: half everyday prints, a fifth each clean and tough, a tenth hardest cases.`), + strip, + el('h3', { text: 'Scanners' }), + el('ul', {}, ORDER.map(decoder).flatMap((d) => [ + el('li', {}, [`${d.name}: ${d.detail}. `, d.key === GOOGLE ? `${versionsNote()} ` : '', d.key === SETTINGS ? `${invertedNote()} ` : '', ...see(SCANNER_PAGES[d.key])]), + ...(d.key === GOOGLE ? [el('li', {}, [`Samsung’s scanner: the QR scanner in Samsung’s Camera app ${sam.camera}, which the QR button in Quick Settings opens on Samsung phones, read on a real ${sam.phone} (${sam.model}, One UI ${sam.oneUi}, Android ${sam.android}), each picture opened from its gallery. Samsung doesn’t name its decoder, but the phone shows whose it is: the Camera app decodes with a library that carries the name of Quram, a Korean imaging-software company, and the decoding engine names itself in the phone’s log. Quram sells a QR and barcode scanner of its own and names Samsung among its customers. `, + ...see([[SAMSUNG_QR, 'Samsung’s guide to scanning QR codes'], [QURAM, 'Quram (Quramsoft)'], [SAMSUNG_RTL, 'Samsung’s Remote Test Lab, where we borrowed the phone']])])] : []), + ])), + el('h3', { text: 'Smartphones in the world' }), + el('p', {}, [`People: at the end of 2025, ${WORLD_PHONES.people.billions} billion people, ${WORLD_PHONES.people.share}% of the world’s population, were using their own smartphone to go online (`, + a(WORLD_PHONES.people.url, 'GSMA, The State of Mobile Internet Connectivity 2026'), ', p. 32). It counts people, not phones or SIM cards. Counting any mobile phone, ', + `${WORLD_PHONES.anyPhone.share}% of people aged 10 and over own one (`, a(WORLD_PHONES.anyPhone.url, 'ITU, Facts and Figures 2025'), ').']), + el('p', {}, ['Phones in use: “nearly one in four active smartphones is an iPhone” (', a(WORLD_PHONES.inUse.url, 'Counterpoint Research'), + ', installed base in 2025, published February 2026); with more than a billion iPhones, the other three in four are more than 3 billion. The rest are almost all Android; a few percent are Huawei phones on HarmonyOS. Devices with Google Play, which carries Google’s scanner: Google says its enhanced fraud protection now covers “more than 2.8 billion Android devices” in 185 markets (', + a(WORLD_PHONES.googlePlay.url, 'Google, February 2026'), '). New phones: iPhones were ', + `${WORLD_PHONES.shipped.share}% of the ${WORLD_PHONES.shipped.total} billion smartphones shipped in 2025 (`, a(WORLD_PHONES.shipped.url, 'IDC'), ').']), + el('p', {}, ['Web counters give iPhones more: ', a(WORLD_PHONES.web.url, 'StatCounter'), + `, often quoted, shows about ${WORLD_PHONES.web.ios}% of mobile page views in September 2026. It counts page views on the websites that carry its code, so it measures browsing, not phones.`]), + el('h3', { text: 'Sources' }), + el('ul', {}, [ + el('li', {}, `Every read, rate and boundary on this page: our own measurements, ${total.toLocaleString()} results, and ${(sam.measured + (sam.negatives?.n ?? 0)).toLocaleString()} read on a Samsung phone.`), + el('li', {}, ['Android’s QR button: on the lock screen and in Quick Settings it opens the scanner a setting names; Android’s own code says that “on the eligible devices this activity is provided by GMS core”, Google Play services (', a(AOSP_QR_BUTTON, 'SystemUiDeviceConfigFlags.java'), '). The phone maker’s default is empty in Android’s code (', a(AOSP_QR_DEFAULT, 'config.xml'), '); on Google’s own Android 14 image it is set to Play services’ ML Kit barcode scanner (com.google.android.gms/.mlkit.barcode.ui.PlatformBarcodeScanningActivityProxy), which we checked on the emulator we measured.']), + el('li', {}, [`Samsung’s QR button: on the ${sam.phone} we read, the “Scan QR code” button in Quick Settings belongs to Samsung’s Camera app and opens its scanner, though the phone’s Android setting names Google’s. We checked on the phone, borrowed through `, a(SAMSUNG_RTL, 'Samsung’s Remote Test Lab'), '.']), + el('li', {}, ['Android Settings’ scanner: ', a(ANDROID_SOURCE, 'QrCamera.java'), ' in Android’s Settings library, which decodes Wi-Fi QR codes with ZXing; Android ships ZXing 3.5.2 (', a(AOSP_ZXING, 'METADATA'), ').']), + el('li', {}, ['Huawei’s scanner: Scan Kit is the scanning service Huawei documents for HarmonyOS and for HMS Core, the services layer of its Android phones (', a(HUAWEI_HARMONY, 'HarmonyOS'), ', ', a(HUAWEI_KIT, 'HMS Core'), '). We checked that the three models in the kit we measured are byte-identical to those in HMS Core 6.16.2.300.']), + el('li', {}, ['Image resolution: CameraX analyses frames at 640 × 480 unless an app asks for more (', a(CAMERAX_DOCS, 'Android developer documentation'), ').']), + el('li', {}, 'Smartphones in the world: GSMA, ITU, Counterpoint Research, Google and IDC, as linked above, each quoted from the publisher.'), + el('li', {}, 'Research datasets: listed under Codes and credits, each used under its own terms.'), + ]), + el('h3', { text: 'Not included' }), + para('Not yet: the scanners other phone makers build into their phones, such as Xiaomi’s, OPPO’s, vivo’s, Transsion’s and Honor’s. Each runs only on its maker’s phones, so it can be measured only on real devices borrowed from a test lab, far more slowly than the scanners above. Samsung’s came first, for its more than a billion phones, and even it was read on a sample of the codes; the others are left for future work. Huawei’s is here because Huawei offers its scanner to developers as a kit.'), + para('Never: the text inside the codes. The page doesn’t print it.'), + el('h3', { text: 'Codes and credits' }), + list(DATA.sources.map((s) => `${s.name}: ${s.count.toLocaleString()} images. ${s.detail}.`)), + el('p', {}, ['The codes made for this page, with their contents and every setting used to make them, and which scanners read each one, are published as a dataset: ', + a(SYNTH_DATASET, 'QR Scan Difficulty: synthetic codes'), '. Under each example code, a link opens the exact picture the scanners read.']), + para('Images from the research datasets are cropped and resized here; a code in an image can be read by any phone. To have an image removed, open a discussion on its dataset page. Payloads of codes made here are invented.'), + el('h3', { text: 'Why we made this' }), + para(PURPOSE), + el('h3', { text: 'Disclosures' }), + para(DISCLOSURE), + para(`Built ${DATA.built}.`), + ])); + renderStrip(strip); +} + +function renderStrip(svg) { + const W = svg.clientWidth || 700; + const left = W < 640 ? 112 : 180; + const rows = DATA.sources.filter((s) => s.key !== 'ladder'); + const rowH = 22; + const H = rows.length * rowH + 26; + const x = (d) => left + ((Math.max(X_MIN, Math.min(X_MAX, d)) - X_MIN) / (X_MAX - X_MIN)) * (W - left - 4); + svg.setAttribute('viewBox', `0 0 ${W} ${H}`); + svg.setAttribute('height', H); + svg.replaceChildren(); + rows.forEach((s, r) => { + const si = DATA.sources.indexOf(s); + const ds = DATA.items.d.filter((_, i) => DATA.items.s[i] === si).sort((p, q) => p - q); + const q = (f) => ds[Math.round(f * (ds.length - 1))]; + const yy = r * rowH + rowH / 2; + sv('text', { x: 0, y: yy + 4, text: s.name }, svg); + sv('line', { x1: x(q(0.1)), x2: x(q(0.9)), y1: yy, y2: yy, stroke: css('--ink-3'), 'stroke-width': 1 }, svg); + sv('rect', { x: x(q(0.25)), y: yy - 3, width: Math.max(2, x(q(0.75)) - x(q(0.25))), height: 6, rx: 3, fill: css('--ink-3') }, svg); + sv('circle', { cx: x(q(0.5)), cy: yy, r: 4, fill: css('--ink'), stroke: css('--surface'), 'stroke-width': 2 }, svg); + }); + sv('text', { x: x(X_MIN), y: H - 4, class: 'muted', text: '← Easier' }, svg); + sv('text', { x: x(X_MAX), y: H - 4, class: 'muted', 'text-anchor': 'end', text: 'Harder →' }, svg); +} + +// ---- wiring ----------------------------------------------------------------------------- + +function renderLede() { + $('lede').textContent = `Every code on one scale, from easy to hard, shaded by how many of ${allWord()} scanners read it: Apple’s, Google’s, Huawei’s, Android Settings’ and ${WORDS[otherApps().length]} that apps use. Move the slider to see a code, and try it with your phone.`; +} + +function renderAll() { + renderVersus(); + renderIntro(); + renderWho(); + renderLede(); + renderKey(); + renderBell(); + renderReadout(); + renderSpecimen(); + renderTakeaway(); + renderPairs(); + renderAndroid(); + renderAdvice(); + if ($('lanesMore').open) renderLanes(); + if ($('factorsMore').open) renderExplorer(); + if ($('method').open) renderMethod(); +} + +async function main() { + const params = new URLSearchParams(location.search); + const theme = params.get('theme'); + if (theme === 'light' || theme === 'dark') document.documentElement.dataset.theme = theme; + DATA = await (await fetch('data/site.json', { cache: 'no-cache' })).json(); // always ask the server: never a stale copy + RES = decodeResults(DATA); + NF = DATA.frames.length; + N = DATA.items.s.length; + ORDER = DATA.displayOrder; + ZONES = makeZones(ORDER.length); + const fi = DATA.frames.indexOf(BASE_FRAME); + COUNT = Uint8Array.from({ length: N }, (_, i) => ORDER.reduce((s, k) => s + reads(i, fi, decIndex(k)), 0)); + BELL = bellData(); + HIGH_NOTE = highNote(); + if (params.has('d') && Number.isFinite(Number(params.get('d')))) state.d = Math.max(PILE_LO, Math.min(PILE_HI, Number(params.get('d')))); + if (params.has('factor') && DATA.ladders.some((l) => l.key === params.get('factor'))) state.factor = params.get('factor'); + if (params.has('step')) state.level = Math.max(0, Number(params.get('step')) || 0); + for (const id of ['lanesMore', 'factorsMore', 'method']) if (params.get('open')?.split(',').includes(id)) $(id).open = true; + $('cursor').value = String(state.d); + $('cursor').addEventListener('input', (e) => setCursor(snap(Number(e.target.value)))); + $('lanesMore').addEventListener('toggle', () => { if ($('lanesMore').open) renderLanes(); }); + $('factorsMore').addEventListener('toggle', () => { if ($('factorsMore').open) renderExplorer(); }); + $('method').addEventListener('toggle', () => { if ($('method').open) renderMethod(); }); + renderAll(); + document.addEventListener('pointerdown', (e) => { if (e.pointerType === 'touch') hideTip(); }, true); // before a tapped tip shows + window.addEventListener('scroll', hideTip, { passive: true }); + let raf = 0; + new ResizeObserver(() => { + cancelAnimationFrame(raf); + raf = requestAnimationFrame(() => { + renderBell(); + if ($('lanesMore').open) renderLanes(); + if ($('method').open) renderMethod(); + }); + }).observe(document.querySelector('.page')); + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', renderAll); +} + +main().catch((err) => { + $('lede').textContent = `Could not load the measurements: ${err.message}`; +}); diff --git a/data/site.json b/data/site.json new file mode 100644 index 0000000000000000000000000000000000000000..d8474b57ec590ea2cd013a3008664a6ab21fc28f --- /dev/null +++ b/data/site.json @@ -0,0 +1 @@ +{"built":"2026-10-29","build":"ab950967c2e3","decoders":[{"key":"zxing-cpp","name":"zxing-cpp","platform":"Android apps","detail":"The C++ ZXing port inside open-source Android scanners such as Binary Eye; version 3.1.1, library defaults, QR codes only"},{"key":"wechat","name":"WeChat","platform":"Android apps","detail":"WeChat's open-sourced CNN scanner as shipped in OpenCV contrib 4.12, with its detector and super-resolution models"},{"key":"opencv","name":"OpenCV","platform":"Android apps","detail":"OpenCV 4.12's classic QR detector, single-code detectAndDecode"},{"key":"opencv-aruco","name":"OpenCV ArUco","platform":"Android apps","detail":"OpenCV 4.12's ArUco-based QR detector, single-code detectAndDecode"},{"key":"apple-vision","name":"Apple Vision","platform":"iPhone","detail":"Apple's Vision barcode detector, our stand-in for the iPhone; measured on macOS 14.3, request revision 4, QR codes only"},{"key":"zxing-java","name":"ZXing (Java)","platform":"Android apps","detail":"ZXing 3.5.2, called the way Android's Settings app calls it to read Wi-Fi QR codes; also inside apps built on zxing-android-embedded"},{"key":"mlkit-gms","name":"ML Kit","platform":"Android (QR button)","detail":"Google's ML Kit barcode scanning as Google Play services delivers it (play-services-mlkit-barcode-scanning 18.3.1, Google Play services 26.41.31, barcode module 264131001), QR codes only, on Google's Android 14 emulator image (API 34, arm64), where Android's QR button is set to open Play services' ML Kit barcode scanner","engine":"play-services-mlkit-barcode-scanning 18.3.1 (Google Play services 26.41.31 (190400-1002748488)); Play services code 264131029; barcode module 264131001; tflite module 264010405; Android API 34; arm64-v8a","gms":"26.41.31","module":264131001},{"key":"hms-scankit","name":"Huawei Scan Kit","platform":"Android (Huawei phones)","detail":"Huawei's scanning engine, built into HarmonyOS and shipped in HMS Core on Huawei phones: Scan Kit 2.15.0.301 (com.huawei.hms:scanplus, from Huawei's developer repository), whose three models are byte-identical to those in HMS Core 6.16.2.300. Each picture decoded in photo mode, QR codes only, on Google's Android 14 emulator image (API 34, arm64)","engine":"hms-scanplus 2.15.0.301 (Huawei Scan Kit, SDK mode, photo mode); Android API 34; arm64-v8a","scankit":"2.15.0.301"}],"displayOrder":["apple-vision","mlkit-gms","hms-scankit","zxing-java","wechat","zxing-cpp","opencv-aruco","opencv"],"frames":[1920,1280,896,640,448,320,224],"ladderFrame":1280,"ladderBase":{"ppm":8.0,"version":3,"tilt":5.0,"blur":0.3,"contrast":0.73},"zxingInvertedPass":{"n":80,"read":79,"second":79},"googleVersions":{"androidSame":["9","17"],"older":{"gms":"23.18.18","year":2023,"rate":0.5745499307585783,"samePage":false},"sinceYear":2025,"versions":[{"gms":"22.50.14","year":2022,"rate":0.5694722264963841,"samePage":false},{"gms":"23.18.18","year":2023,"rate":0.5745499307585783,"samePage":false},{"gms":"24.23.35","year":2024,"rate":0.6022464994614556,"samePage":false},{"gms":"25.34.34","year":2025,"rate":0.610863209724573,"samePage":true},{"gms":"26.11.36","year":2026,"rate":0.610863209724573,"samePage":true},{"gms":"26.22.36","year":2026,"rate":0.610863209724573,"samePage":true},{"gms":"26.32.37","year":2026,"rate":0.610863209724573,"samePage":true},{"gms":"26.41.31","year":2026,"rate":0.610863209724573,"samePage":true}]},"samsung":{"key":"samsung-a57s","engine":"Samsung camera QR scanner 16.5.00.85, gallery picture via Gallery 15.8.00.83 (square crop); SM-A576S BP4A.251205.006.A576SKSU1AZG7, One UI 80500, Android 16; each picture padded to a centred white square 1.2x its long side","camera":"16.5.00.85","model":"SM-A576S","phone":"Galaxy A57","oneUi":"8.5","android":"16","frame":1280,"measured":866,"counted":837,"uncheckable":29,"estimate":0.5894543455717672,"range":[0.5679732291992616,0.6122464386461263],"sets":{"qrdn":{"n":160,"of":3775,"estimate":0.5226665976821192,"reads":{"samsung":96,"zxing-cpp":90,"wechat":99,"opencv":45,"opencv-aruco":73,"apple-vision":103,"zxing-java":78,"mlkit-gms":99,"hms-scankit":106},"vsApple":{"appleRead":103,"missed":8,"extra":1}},"syn10k":{"n":100,"of":1000,"estimate":0.38449999999999995,"reads":{"samsung":40,"zxing-cpp":18,"wechat":74,"opencv":1,"opencv-aruco":7,"apple-vision":80,"zxing-java":5,"mlkit-gms":40,"hms-scankit":69},"vsApple":{"appleRead":80,"missed":40,"extra":0}},"pristine":{"n":40,"of":200,"estimate":0.999375,"reads":{"samsung":40,"zxing-cpp":40,"wechat":40,"opencv":40,"opencv-aruco":40,"apple-vision":40,"zxing-java":40,"mlkit-gms":40,"hms-scankit":40},"vsApple":{"appleRead":40,"missed":0,"extra":0}},"boofcv":{"n":126,"of":268,"estimate":0.8387230514096187,"reads":{"samsung":104,"zxing-cpp":100,"wechat":101,"opencv":69,"opencv-aruco":71,"apple-vision":116,"zxing-java":44,"mlkit-gms":105,"hms-scankit":114},"vsApple":{"appleRead":116,"missed":17,"extra":5}},"everyday":{"n":180,"of":600,"estimate":0.9936805555555556,"reads":{"samsung":180,"zxing-cpp":179,"wechat":179,"opencv":139,"opencv-aruco":165,"apple-vision":179,"zxing-java":163,"mlkit-gms":179,"hms-scankit":180},"vsApple":{"appleRead":179,"missed":0,"extra":1}},"broken104":{"n":51,"of":56,"estimate":0.2540703781512605,"reads":{"samsung":13,"zxing-cpp":4,"wechat":13,"opencv":3,"opencv-aruco":2,"apple-vision":17,"zxing-java":1,"mlkit-gms":4,"hms-scankit":21},"vsApple":{"appleRead":17,"missed":6,"extra":2}},"tough":{"n":180,"of":600,"estimate":0.7303472222222223,"reads":{"samsung":132,"zxing-cpp":149,"wechat":161,"opencv":34,"opencv-aruco":88,"apple-vision":160,"zxing-java":101,"mlkit-gms":167,"hms-scankit":170},"vsApple":{"appleRead":160,"missed":31,"extra":3}}},"negatives":{"dataset":"negative-controls-v1","seed":20260825,"frame":1280,"n":100,"strata":{"blank":10,"noise":15,"checkerboard":15,"finder_like":20,"clutter":20,"other_symbology":20},"falseReads":0,"noResult":0,"otherBarcodes":{"n":20,"read":{"Data Matrix":4}}}},"checks":{"negatives":{"n":100,"strata":{"blank":10,"noise":15,"checkerboard":15,"finder_like":20,"clutter":20,"other_symbology":20},"falseReads":{"zxing-cpp":0,"wechat":0,"opencv":0,"opencv-aruco":0,"apple-vision":0,"zxing-java":0,"mlkit-gms":0,"hms-scankit":0}},"dependentTruth":4},"readers":[{"decoder":"zxing-cpp","frame":1920,"d50":57.64,"slope":0.5842},{"decoder":"zxing-cpp","frame":1280,"d50":57.61,"slope":0.5842},{"decoder":"zxing-cpp","frame":896,"d50":57.2,"slope":0.5842},{"decoder":"zxing-cpp","frame":640,"d50":55.52,"slope":0.5842},{"decoder":"zxing-cpp","frame":448,"d50":48.83,"slope":0.3002},{"decoder":"zxing-cpp","frame":320,"d50":43.1,"slope":0.181},{"decoder":"zxing-cpp","frame":224,"d50":36.28,"slope":0.1139},{"decoder":"wechat","frame":1920,"d50":70.83,"slope":0.1456},{"decoder":"wechat","frame":1280,"d50":70.6,"slope":0.1507},{"decoder":"wechat","frame":896,"d50":70.63,"slope":0.1528},{"decoder":"wechat","frame":640,"d50":70.27,"slope":0.1417},{"decoder":"wechat","frame":448,"d50":68.31,"slope":0.1123},{"decoder":"wechat","frame":320,"d50":61.03,"slope":0.0768},{"decoder":"wechat","frame":224,"d50":56.88,"slope":0.048},{"decoder":"opencv","frame":1920,"d50":18.21,"slope":0.0519},{"decoder":"opencv","frame":1280,"d50":20.04,"slope":0.0555},{"decoder":"opencv","frame":896,"d50":17.25,"slope":0.0618},{"decoder":"opencv","frame":640,"d50":11.74,"slope":0.079},{"decoder":"opencv","frame":448,"d50":9.6,"slope":0.0861},{"decoder":"opencv","frame":320,"d50":4.08,"slope":0.0855},{"decoder":"opencv","frame":224,"d50":-7.11,"slope":0.0763},{"decoder":"opencv-aruco","frame":1920,"d50":46.94,"slope":0.1262},{"decoder":"opencv-aruco","frame":1280,"d50":45.93,"slope":0.1356},{"decoder":"opencv-aruco","frame":896,"d50":44.03,"slope":0.1491},{"decoder":"opencv-aruco","frame":640,"d50":40.17,"slope":0.1729},{"decoder":"opencv-aruco","frame":448,"d50":33.75,"slope":0.1965},{"decoder":"opencv-aruco","frame":320,"d50":30.34,"slope":0.1456},{"decoder":"opencv-aruco","frame":224,"d50":22.99,"slope":0.1324},{"decoder":"apple-vision","frame":1920,"d50":71.2,"slope":0.2304},{"decoder":"apple-vision","frame":1280,"d50":70.97,"slope":0.2202},{"decoder":"apple-vision","frame":896,"d50":70.39,"slope":0.1925},{"decoder":"apple-vision","frame":640,"d50":68.42,"slope":0.1358},{"decoder":"apple-vision","frame":448,"d50":63.57,"slope":0.082},{"decoder":"apple-vision","frame":320,"d50":56.9,"slope":0.0592},{"decoder":"apple-vision","frame":224,"d50":48.17,"slope":0.0467},{"decoder":"zxing-java","frame":1920,"d50":46.1,"slope":0.1264},{"decoder":"zxing-java","frame":1280,"d50":46.45,"slope":0.1362},{"decoder":"zxing-java","frame":896,"d50":45.1,"slope":0.1574},{"decoder":"zxing-java","frame":640,"d50":41.95,"slope":0.213},{"decoder":"zxing-java","frame":448,"d50":15.69,"slope":0.0694},{"decoder":"zxing-java","frame":320,"d50":14.48,"slope":0.0747},{"decoder":"zxing-java","frame":224,"d50":28.07,"slope":0.1126},{"decoder":"mlkit-gms","frame":1920,"d50":61.41,"slope":0.4617},{"decoder":"mlkit-gms","frame":1280,"d50":61.11,"slope":0.5842},{"decoder":"mlkit-gms","frame":896,"d50":60.49,"slope":0.5842},{"decoder":"mlkit-gms","frame":640,"d50":59.36,"slope":0.4602},{"decoder":"mlkit-gms","frame":448,"d50":55.98,"slope":0.198},{"decoder":"mlkit-gms","frame":320,"d50":49.58,"slope":0.1184},{"decoder":"mlkit-gms","frame":224,"d50":42.72,"slope":0.0797},{"decoder":"hms-scankit","frame":1920,"d50":71.33,"slope":0.1699},{"decoder":"hms-scankit","frame":1280,"d50":71.23,"slope":0.1699},{"decoder":"hms-scankit","frame":896,"d50":71.1,"slope":0.1612},{"decoder":"hms-scankit","frame":640,"d50":69.96,"slope":0.143},{"decoder":"hms-scankit","frame":448,"d50":67.97,"slope":0.1069},{"decoder":"hms-scankit","frame":320,"d50":61.69,"slope":0.0748},{"decoder":"hms-scankit","frame":224,"d50":53.49,"slope":0.0544}],"sources":[{"key":"pristine","name":"Pristine","group":"made","detail":"Synthetic: low version, big modules, clean print, head-on","count":200,"shown":true},{"key":"everyday","name":"Everyday","group":"made","detail":"Synthetic: ordinary prints and phone captures","count":600,"shown":true},{"key":"tough","name":"Tough","group":"made","detail":"Synthetic: small, soft, tilted, glared or worn, short of the hard datasets","count":600,"shown":true},{"key":"ladder","name":"Ladders","group":"made","detail":"Synthetic: one change at a time to a code every scanner here reads, 80 codes per step","count":13520,"shown":true},{"key":"boofcv","name":"BoofCV photos","group":"dataset","detail":"devmandan/boofcv-qr-singles: Peter Abeles' BoofCV QR benchmark photos (single-code subset)","count":268,"shown":true},{"key":"qrdn","name":"QR-DN1.0","group":"dataset","detail":"devmandan/qr-dn1.0: clean QR codes and distorted, noisy versions of them (CC BY 4.0), test split","count":3775,"shown":true,"parts":{"clean":775,"tiled":750,"distorted":2250}},{"key":"syn10k","name":"syn10k","group":"dataset","detail":"devmandan/syn10k-huawei-barcodes: Bodn\u00e1r-Huawei barcodes, a 1,000-image sample of its computer-made warped set (CC BY 4.0)","count":1000,"shown":true},{"key":"broken104","name":"Broken QR 104","group":"dataset","detail":"devmandan/broken-qr-codes-104: real codes that fail to decode, collected from the web","count":56,"shown":true}],"items":{"s":[5,5,6,5,5,5,5,0,5,5,5,4,5,5,5,6,5,5,6,5,5,4,5,5,5,5,5,5,5,5,5,4,5,1,4,1,5,5,5,5,6,5,5,6,5,5,5,1,1,6,6,5,5,6,6,5,6,1,1,5,5,5,5,5,5,6,6,6,5,6,0,1,1,5,5,6,1,7,5,1,1,5,0,5,5,5,4,1,6,5,5,5,5,4,5,5,5,5,6,5,1,5,5,1,5,5,5,5,6,1,1,5,1,5,5,7,5,5,4,6,5,5,5,5,5,5,0,5,5,5,4,6,5,6,5,6,6,5,5,5,5,1,5,6,5,5,5,6,5,7,6,0,6,5,5,5,6,0,5,5,6,6,4,5,5,5,5,1,5,1,5,5,5,5,6,5,5,7,6,5,1,5,5,5,1,6,5,5,5,6,7,5,5,5,5,5,5,6,5,0,5,5,5,1,6,5,5,5,5,5,5,5,5,6,6,5,5,5,5,5,0,5,6,5,5,5,5,5,5,6,5,1,5,6,5,6,0,5,4,5,5,1,5,1,5,5,5,1,5,1,5,6,6,5,5,6,4,5,5,5,5,1,5,5,5,5,6,5,4,5,5,4,6,5,5,6,6,4,5,5,6,5,5,5,6,1,0,5,5,4,5,6,5,5,5,5,6,5,6,4,5,5,5,5,4,4,6,5,6,5,1,5,5,5,5,6,5,5,0,5,5,1,6,6,5,6,5,6,5,5,4,6,0,4,6,5,5,5,5,6,1,1,5,6,5,6,5,5,0,5,5,5,5,5,5,5,5,5,1,4,5,5,6,5,6,4,6,4,5,5,5,1,5,5,6,5,5,5,5,5,4,5,6,1,6,5,5,4,5,6,5,6,4,5,4,5,1,5,1,5,5,5,5,5,5,6,4,5,6,5,1,6,5,6,5,5,1,5,4,5,5,6,5,1,5,6,5,5,5,5,1,5,5,5,4,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,5,5,5,5,6,5,5,5,6,5,1,5,6,6,5,5,5,5,5,5,5,5,5,5,5,1,0,5,5,6,5,5,5,5,5,6,5,5,5,6,5,5,7,5,5,5,5,6,5,5,1,5,5,6,5,5,5,6,5,1,5,5,5,6,4,0,1,5,5,0,5,5,5,5,5,1,0,1,5,6,1,5,5,6,1,6,5,6,5,5,5,5,4,5,6,6,5,1,1,6,5,4,5,5,5,5,5,5,6,5,6,5,5,5,5,1,6,5,5,6,6,5,6,5,5,5,4,5,5,5,5,5,5,1,5,6,5,5,5,5,5,6,6,6,6,5,5,6,5,4,6,5,1,5,5,5,5,6,1,5,6,0,5,5,5,6,5,5,0,5,5,4,4,1,5,5,5,5,0,5,5,5,5,5,4,5,5,5,6,1,5,6,6,6,5,5,0,5,5,5,6,5,5,5,6,5,4,1,6,4,5,0,1,5,6,5,5,5,6,5,5,5,5,1,5,5,5,5,5,5,5,5,5,5,0,5,6,5,6,5,6,1,5,5,5,5,5,5,6,1,5,5,5,5,5,5,6,1,5,5,5,6,6,5,4,5,5,6,6,6,5,5,0,1,1,1,5,5,5,5,6,1,5,5,1,5,5,5,0,0,5,5,5,5,5,1,5,5,5,5,5,5,4,0,5,0,5,5,5,5,5,5,5,6,5,5,5,5,5,1,1,5,6,5,6,4,5,0,5,4,5,5,6,5,5,5,6,6,5,5,5,5,6,6,1,5,5,5,5,5,5,6,5,4,5,5,5,5,6,5,1,5,5,5,6,7,5,5,5,5,4,5,5,5,5,5,5,5,5,5,6,5,5,6,5,5,5,5,0,5,5,5,5,5,5,5,5,7,5,5,5,5,5,5,6,5,5,5,5,5,5,6,5,5,5,5,5,6,6,6,5,6,5,6,5,5,5,5,5,4,5,5,6,1,6,5,5,5,5,5,6,5,4,5,5,1,5,5,1,5,5,5,6,5,5,4,5,5,0,6,5,5,5,5,1,5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,6,6,5,5,5,5,1,4,5,4,5,6,6,5,5,5,5,6,5,1,5,5,5,5,5,5,1,6,5,5,6,5,5,5,5,5,5,5,5,5,6,0,5,5,5,5,5,5,5,1,1,5,1,5,6,1,5,5,5,1,6,5,0,1,5,5,5,6,1,6,5,6,6,5,7,1,1,5,5,5,4,5,1,5,5,1,6,5,5,5,5,5,1,4,1,5,5,6,5,5,6,5,5,5,1,1,1,5,5,1,4,5,5,5,5,6,6,6,5,5,5,5,5,0,5,6,5,4,5,1,5,5,4,1,4,0,5,5,5,5,5,1,1,6,6,6,5,5,1,5,6,5,5,5,0,5,5,4,5,5,1,1,5,5,5,5,5,5,6,5,5,5,5,5,7,0,5,5,5,5,5,6,5,4,6,5,5,0,6,5,6,5,5,5,6,5,5,5,1,5,6,5,5,1,5,5,5,5,5,4,1,5,5,1,5,5,5,5,5,5,5,5,1,5,1,5,6,5,5,5,5,5,6,6,5,6,5,1,5,5,5,1,5,5,5,5,1,1,6,6,5,5,5,5,1,5,5,5,6,5,5,0,5,5,4,5,5,5,5,5,4,5,1,5,6,5,5,1,1,1,6,5,5,5,5,5,5,5,6,5,5,5,1,6,5,5,5,1,6,6,6,6,5,4,6,5,5,5,5,5,5,1,5,6,5,5,5,5,5,5,5,5,5,5,1,5,6,4,5,5,5,5,5,5,5,5,6,5,5,5,6,5,4,5,5,5,0,6,5,5,6,6,5,5,1,5,5,5,5,5,6,5,5,7,6,5,1,5,5,5,5,5,5,1,5,5,0,5,5,6,0,5,5,1,5,5,1,1,5,5,5,5,7,5,5,5,5,1,5,5,5,5,5,1,1,5,6,5,5,5,4,5,0,5,6,5,5,5,6,5,5,5,6,6,5,5,5,5,5,5,5,5,5,5,5,6,5,6,5,5,6,5,6,5,5,6,5,5,1,5,5,5,5,6,4,5,5,5,5,5,6,0,5,6,1,5,6,5,6,1,5,5,6,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,6,0,1,1,5,1,5,6,5,5,6,5,5,5,5,6,5,5,6,5,5,5,7,5,5,5,5,5,1,5,6,5,6,5,6,5,1,5,1,5,5,1,1,5,4,6,5,6,5,6,6,5,5,4,5,5,5,0,5,6,5,5,5,5,5,6,5,6,6,4,5,5,6,5,5,7,5,1,1,5,5,5,5,5,5,4,5,4,5,0,5,4,5,5,4,5,5,1,5,1,1,5,5,5,5,1,5,1,0,5,0,5,6,5,5,0,5,5,6,5,5,0,5,5,5,5,5,1,5,1,5,0,5,5,6,6,6,5,1,5,6,5,5,7,5,5,5,6,5,6,5,5,5,5,1,1,5,5,5,5,5,5,6,5,5,5,5,5,5,5,6,5,6,1,5,5,5,5,5,5,4,5,6,5,5,6,6,6,5,5,5,5,5,5,5,1,5,5,6,5,4,5,5,5,5,5,5,5,5,1,4,5,5,5,4,5,5,5,1,5,5,6,5,5,5,6,1,6,5,4,5,6,6,6,6,5,5,6,0,6,1,5,6,1,5,5,5,5,5,5,4,5,1,1,5,5,6,0,5,5,5,5,5,5,5,5,6,5,5,6,0,5,5,4,5,5,6,6,1,5,4,5,5,6,5,5,5,5,5,1,6,1,6,5,6,4,5,5,6,4,5,5,1,6,5,1,5,0,4,6,5,1,1,5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,1,5,5,5,5,5,5,5,5,5,5,5,6,0,6,5,4,0,5,4,5,6,4,0,5,5,5,1,1,1,1,5,6,1,5,4,5,5,5,5,5,5,5,1,5,1,6,5,5,6,1,6,5,5,5,5,5,5,5,5,5,5,5,6,4,6,5,5,5,5,5,1,5,5,6,1,5,6,0,5,5,5,5,1,5,5,6,5,5,5,1,6,5,6,1,6,4,5,5,1,5,5,6,6,5,0,5,5,5,1,5,5,5,6,5,5,1,1,5,5,6,6,5,5,1,5,5,6,5,5,4,5,5,5,5,6,6,6,5,6,5,5,5,5,6,6,5,6,5,6,0,1,5,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,6,6,6,5,4,5,5,6,7,5,6,5,4,5,5,5,5,5,5,5,4,5,5,5,5,4,5,5,6,5,5,5,5,5,5,5,5,5,5,6,5,5,5,5,5,1,5,0,5,5,1,5,6,5,5,5,5,6,5,5,6,6,5,5,5,5,5,5,5,6,5,5,6,4,1,5,5,5,5,5,6,6,5,5,6,6,5,1,5,5,5,5,5,5,5,1,6,4,5,0,6,5,1,5,5,5,0,6,6,0,5,5,5,5,5,5,7,5,6,5,6,5,5,6,5,6,5,1,1,5,5,5,5,6,5,6,5,1,4,5,4,5,5,5,5,1,5,5,7,6,1,4,5,6,5,6,5,1,5,6,5,5,4,5,1,1,5,5,4,5,5,5,0,1,1,5,5,1,5,6,5,5,5,1,6,1,5,5,6,5,6,5,5,5,1,5,5,5,5,5,5,1,5,6,5,6,1,1,5,1,5,5,5,1,6,5,5,5,5,0,5,5,5,1,5,5,5,6,1,6,1,5,1,6,5,6,5,5,6,5,6,1,4,5,5,5,5,4,5,1,5,5,0,0,0,5,5,6,5,5,6,6,1,1,5,5,5,5,6,5,5,5,6,5,5,1,5,0,5,5,5,0,5,6,6,6,5,5,5,5,5,5,5,5,6,6,5,5,5,1,5,5,5,6,4,5,0,1,5,4,6,6,5,5,5,4,6,5,6,5,5,5,5,5,5,5,6,5,5,5,5,6,6,5,5,5,5,6,5,5,6,5,5,6,5,6,5,5,1,5,1,6,4,5,6,1,5,0,5,5,1,1,6,4,5,1,5,5,6,5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,4,6,5,5,5,5,5,5,5,5,6,5,6,5,5,5,1,5,5,1,5,5,5,5,1,5,1,5,6,4,6,1,5,5,5,4,5,5,5,1,5,1,5,1,6,6,6,5,4,0,5,5,5,5,5,5,1,6,5,1,1,5,5,5,5,5,5,5,0,5,6,5,5,6,5,5,1,5,5,1,5,5,5,7,6,5,5,6,6,5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,1,5,1,5,5,5,5,6,5,5,1,1,6,5,5,6,5,5,5,6,7,5,5,5,6,1,6,5,1,5,5,5,5,5,5,1,5,6,5,4,6,5,5,6,5,1,5,5,1,5,5,5,6,5,0,6,4,1,5,1,5,4,5,5,6,5,5,5,5,5,1,5,5,6,5,5,5,5,5,5,5,1,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,4,4,5,5,6,1,5,6,5,5,5,6,5,6,5,5,6,5,5,6,4,1,5,6,1,5,6,6,5,6,5,5,5,5,6,5,5,6,0,5,5,5,5,0,0,6,5,6,5,6,5,6,5,5,5,6,5,1,5,6,1,6,6,5,1,6,6,1,5,1,5,0,0,5,1,5,6,5,0,5,5,4,5,5,0,5,6,5,4,4,5,5,1,5,6,5,6,5,1,6,5,5,5,1,5,1,5,5,0,6,6,5,6,6,5,6,5,5,5,5,1,5,5,5,5,5,0,5,1,5,5,5,5,6,5,5,5,5,5,4,6,5,5,5,5,5,5,5,5,6,5,4,6,5,5,5,5,5,5,4,4,5,1,0,5,4,1,0,5,5,5,5,6,5,5,5,5,5,5,0,5,1,5,5,1,6,6,5,6,5,5,5,5,5,1,6,5,5,5,6,5,4,1,5,5,4,5,5,5,0,5,5,5,6,5,5,5,5,5,5,5,5,5,6,6,5,5,5,5,5,5,5,5,4,6,5,5,5,5,1,5,5,5,5,5,1,5,5,1,5,5,5,5,7,6,6,0,5,5,5,5,5,5,6,0,5,5,5,1,5,4,5,0,5,6,5,5,0,6,4,0,5,4,5,0,5,6,5,5,5,6,6,6,0,1,1,5,6,5,5,4,5,5,5,6,5,0,6,5,5,5,7,1,5,5,5,5,6,5,5,6,5,5,5,5,6,6,5,5,5,5,4,5,5,5,5,5,5,1,1,6,5,5,5,4,5,5,6,5,5,5,5,5,6,6,5,5,5,5,5,1,6,5,6,6,4,5,5,6,5,6,5,5,4,1,5,6,5,5,5,5,6,4,4,5,5,6,1,5,5,5,5,5,1,5,6,5,1,5,5,5,5,5,1,4,0,6,5,0,5,5,6,5,0,5,5,5,5,5,6,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,1,5,5,5,5,5,4,5,7,5,1,5,5,5,0,5,5,1,5,0,5,5,5,5,6,5,1,6,4,4,5,5,5,6,5,5,6,5,5,1,5,5,5,6,6,6,5,5,6,1,5,5,5,5,0,6,5,5,5,6,1,5,6,5,5,5,5,6,5,5,5,5,1,5,5,5,5,5,5,6,5,6,5,5,5,5,5,5,5,5,5,5,5,6,5,1,5,5,5,5,5,5,5,5,5,5,6,5,6,5,5,1,4,5,5,1,5,5,7,1,6,5,5,5,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,6,5,5,5,4,1,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,5,4,1,5,5,6,5,4,5,5,0,4,5,5,5,6,5,1,4,4,5,5,5,6,6,4,5,5,1,5,5,5,7,5,5,6,1,5,7,5,5,5,5,5,5,1,5,5,4,5,5,0,6,6,5,5,6,5,4,0,5,5,4,5,5,5,5,6,5,1,5,5,5,6,5,5,1,6,5,5,5,5,1,6,6,5,5,5,5,1,5,5,1,1,6,5,5,4,5,6,6,5,7,6,5,6,5,5,6,5,5,1,5,5,6,5,0,5,5,5,5,6,6,6,5,5,0,5,1,5,5,5,6,5,7,5,5,5,1,5,5,5,5,5,5,5,5,5,5,4,5,5,6,5,5,5,5,5,6,5,5,5,5,5,6,1,5,5,5,5,5,6,5,5,5,5,5,6,5,5,4,5,5,5,5,5,5,5,5,4,5,6,1,6,1,1,5,0,5,5,5,5,5,5,7,6,5,5,5,5,1,5,1,6,5,5,5,5,5,5,5,6,1,5,5,5,5,5,5,7,1,5,5,1,5,5,5,5,6,5,5,7,6,5,6,1,6,6,5,5,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,6,5,5,6,5,5,1,6,1,5,4,5,5,5,5,6,5,5,5,4,5,5,5,5,5,0,5,5,6,5,5,5,0,5,5,7,5,5,1,5,5,5,5,5,5,4,5,6,5,5,5,5,1,5,5,5,0,5,5,5,5,1,5,5,5,6,4,6,6,5,5,5,5,1,6,5,5,6,5,5,5,6,6,1,5,5,6,7,5,5,5,5,5,5,5,5,5,5,6,6,6,5,5,5,5,5,5,5,7,5,5,5,5,5,5,5,4,6,6,5,5,5,5,5,5,6,1,5,6,5,5,5,5,6,5,5,5,5,5,5,5,5,1,1,5,5,4,5,4,1,6,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,6,5,6,5,5,5,5,5,6,5,1,5,5,5,4,5,6,5,5,5,5,5,5,5,5,5,1,6,5,1,6,6,5,4,6,5,6,5,0,5,5,6,5,5,5,6,5,7,5,5,5,6,6,5,5,5,5,5,5,1,5,5,5,5,5,5,6,6,5,1,5,6,6,0,5,6,5,1,5,1,1,1,5,5,5,0,5,5,4,1,5,5,5,5,5,5,6,5,6,1,5,5,4,5,5,5,6,5,5,1,5,1,6,5,5,6,5,6,5,5,6,5,6,5,5,5,5,6,5,5,5,5,5,5,0,5,5,1,6,1,5,6,6,6,5,6,6,5,0,5,5,1,5,5,5,1,5,5,5,5,1,5,6,5,5,0,5,5,1,5,5,6,5,5,6,5,5,4,6,5,5,5,5,5,0,7,5,6,5,5,5,5,1,6,6,5,5,5,6,1,5,5,6,6,6,5,5,4,5,6,5,1,5,6,1,6,5,5,5,5,5,5,6,5,5,6,6,4,5,4,5,5,6,5,5,5,5,6,5,6,1,5,4,5,5,5,5,4,4,6,5,5,5,1,6,6,5,5,6,1,6,5,5,6,5,5,5,5,5,5,5,4,5,5,5,5,5,0,4,5,1,5,5,1,1,5,1,5,1,5,5,6,5,6,5,6,1,6,5,5,1,5,5,5,5,5,1,6,1,5,5,6,4,1,6,5,5,5,1,5,5,5,5,5,6,1,1,5,5,5,6,5,5,5,4,1,5,5,6,5,5,1,5,5,5,6,5,5,6,6,6,6,6,5,5,5,4,5,6,5,5,5,5,1,5,5,5,5,5,5,5,5,5,5,6,5,6,5,5,5,5,5,5,6,5,5,5,5,5,5,6,1,5,5,4,0,5,5,5,5,5,6,5,5,5,5,0,5,4,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,4,1,6,5,5,7,7,5,1,5,0,6,5,5,5,5,5,5,5,1,6,1,6,5,5,0,5,6,1,6,0,0,5,0,5,6,6,5,5,5,5,5,5,5,5,6,1,5,5,5,6,1,5,5,5,1,5,6,6,0,4,1,5,5,5,5,5,6,5,6,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,5,6,1,0,5,5,1,5,5,5,5,5,1,1,5,6,4,5,5,4,5,5,4,5,6,5,6,1,6,5,5,5,6,6,6,5,6,4,6,1,4,5,5,5,5,5,5,5,5,1,1,5,0,1,5,5,5,1,5,5,5,6,5,5,5,4,0,5,5,5,5,5,5,5,5,5,5,5,5,6,5,6,6,6,5,5,1,5,5,5,5,5,1,5,5,5,5,4,5,5,5,5,6,6,5,6,1,6,6,0,5,5,4,5,4,5,1,1,5,6,5,5,5,5,5,6,5,4,5,5,0,5,5,5,6,5,5,5,6,5,5,6,5,5,5,5,6,1,6,5,5,5,5,6,5,5,5,5,5,5,5,0,1,5,5,1,5,6,5,6,5,5,6,5,4,5,5,5,6,6,5,5,5,5,5,5,5,6,5,5,5,5,5,0,5,5,5,5,5,5,0,5,5,5,6,6,6,5,5,6,5,7,5,5,5,6,5,5,6,5,6,5,5,5,5,5,6,0,5,5,5,5,0,5,5,5,5,6,0,5,5,5,5,5,5,6,5,5,6,4,5,5,5,5,6,6,5,5,6,6,5,4,5,5,5,6,5,5,5,5,5,4,6,5,5,5,5,5,5,6,5,5,6,5,6,6,5,5,5,5,1,5,5,1,6,4,5,5,5,5,1,5,6,5,6,6,5,6,5,5,5,6,5,1,5,5,0,6,5,6,0,5,5,6,5,5,1,5,5,5,5,6,5,1,5,5,5,5,4,5,1,6,0,6,5,4,4,5,6,5,6,5,5,1,5,6,5,6,5,1,6,5,6,5,5,1,6,1,1,5,6,5,5,1,1,6,4,5,5,1,1,5,1,5,5,5,6,5,5,5,1,5,5,5,5,5,5,6,5,6,5,5,4,5,4,5,5,5,0,5,1,5,6,5,5,5,5,6,6,6,5,4,1,5,5,5,6,5,5,5,0,5,5,5,5,6,1,7,5,6,5,5,5,5,5,5,5,5,5,5,5,5,0,6,1,6,1,5,1,1,0,5,6,5,6,5,5,5,5,5,5,5,5,1,6,6,5,5,6,5,1,1,5,5,5,0,5,6,5,5,5,5,5,5,5,5,5,5,0,6,0,1,5,6,5,1,5,5,5,6,5,5,6,1,6,7,5,5,5,7,5,6,5,5,1,4,5,6,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,1,6,5,5,5,5,5,1,5,4,5,5,5,5,5,5,5,5,6,6,5,5,1,6,5,5,6,5,6,6,6,1,1,5,5,5,1,1,5,5,6,1,5,5,5,5,5,6,5,1,5,5,5,5,5,5,5,5,6,5,5,5,0,0,5,5,5,5,5,5,5,5,7,5,5,5,5,5,5,5,6,4,5,1,5,5,1,5,5,6,5,5,5,5,6,5,5,6,5,5,5,5,6,5,5,1,5,6,5,1,4,5,1,6,6,5,5,1,5,5,5,5,5,5,5,5,1,6,5,5,1,0,5,6,5,5,1,5,5,0,5,5,5,5,5,0,5,5,5,5,5,7,1,6,7,6,5,5,5,6,5,5,5,6,5,5,5,1,5,5,5,1,6,1,7,5,5,5,5,4,0,6,5,5,5,1,1,6,5,1,5,5,5,5,5,0,5,5,6,5,6,5,5,5,5,6,6,6,1,6,5,6,0,6,1,5,5,5,6,5,6,5,5,4,5,5,5,5,6,6,5,5,5,5,5,5,5,5,5,5,5,5,1,6,5,1,5,4,5,5,5,1,5,1,5,6,5,6,1,5,5,5,4,4,5,6,6,5,0,6,6,5,5,5,5,5,5,0,1,5,5,6,5,0,4,5,6,5,1,6,4,5,4,5,6,5,1,1,5,1,5,1,6,5,6,6,6,1,5,5,6,4,5,6,5,6,6,5,1,1,5,7,5,6,5,5,5,5,5,1,1,0,5,5,6,5,5,5,5,6,1,5,5,5,5,4,1,5,6,5,5,5,1,5,1,6,5,0,6,5,5,1,5,5,5,5,5,5,5,5,5,6,5,6,5,6,1,5,5,0,5,5,5,6,5,4,5,1,5,6,5,5,5,1,5,6,5,5,5,6,7,5,5,5,1,6,6,5,5,5,4,5,5,0,0,5,5,6,5,6,5,5,5,5,6,5,6,5,6,5,6,0,1,6,5,1,5,5,5,5,5,5,5,6,5,5,5,5,5,5,6,6,5,5,5,6,6,5,1,5,0,7,5,6,5,5,5,6,1,5,5,6,5,5,5,5,5,1,5,4,5,6,6,5,5,5,6,0,5,5,4,1,5,4,6,6,6,5,5,5,4,5,5,5,5,1,6,5,5,5,5,5,5,5,5,5,4,5,6,5,1,5,5,5,5,5,5,5,1,6,5,5,5,5,5,5,6,5,5,5,5,4,5,5,5,6,5,1,6,5,5,6,1,6,5,5,6,5,6,0,5,6,6,4,5,4,0,4,4,5,4,5,5,5,5,5,5,6,1,6,5,5,5,5,5,5,5,5,5,5,1,5,1,5,5,6,1,5,6,0,5,6,7,6,5,5,5,5,5,5,5,5,5,5,5,5,1,5,0,5,5,5,5,5,4,5,1,5,5,5,1,5,5,5,1,5,5,5,5,6,6,6,5,5,6,1,6,5,5,5,1,5,5,1,5,5,5,1,5,5,0,5,5,5,5,0,5,1,5,5,5,5,5,6,1,1,1,6,5,5,5,6,5,5,6,0,5,6,5,5,5,5,6,6,5,5,5,6,5,5,6,1,5,5,5,5,5,4,5,5,5,6,5,5,5,5,5,6,5,6,5,1,5,5,1,6,1,0,5,5,5,6,5,1,5,4,0,6,7,1,4,5,4,6,0,5,6,5,1,6,5,6,5,5,5,6,5,1,1,5,5,5,1,6,6,1,5,5,5,5,5,6,4,5,7,5,5,6,5,6,5,5,5,6,5,5,5,5,6,5,5,0,0,1,6,5,6,5,5,5,5,5,5,7,1,6,5,5,1,5,5,5,6,0,5,6,1,5,1,5,1,6,0,6,5,5,6,1,1,4,5,5,5,5,6,5,6,5,6,5,6,5,5,1,1,6,1,5,5,5,4,5,0,5,5,5,5,4,0,5,5,1,4,5,5,4,5,5,5,6,6,6,5,5,5,6,5,5,5,5,5,5,5,5,5,6,5,6,5,1,4,5,6,5,5,6,5,5,5,6,6,6,5,5,5,5,5,5,5,5,5,4,5,1,5,6,5,5,5,5,1,6,1,6,6,5,5,5,5,6,5,6,1,5,5,5,5,5,5,0,5,5,5,6,0,5,5,5,5,6,5,5,6,5,5,5,5,6,1,6,6,6,5,4,5,5,5,1,6,6,6,5,5,5,5,5,5,0,0,5,5,5,5,5,5,6,5,5,5,5,5,1,5,1,5,5,5,5,5,5,1,4,5,6,5,5,5,5,5,5,5,6,1,5,5,4,5,5,0,6,5,5,5,4,5,1,5,5,5,6,5,4,5,5,5,5,1,1,5,5,5,5,5,5,5,6,5,6,5,5,6,5,5,4,5,5,5,5,5,5,5,5,6,5,1,6,5,5,5,1,5,5,5,5,0,5,5,6,5,5,4,5,1,7,5,5,5,5,6,5,5,5,5,5,5,5,6,1,1,5,5,5,6,5,0,1,5,4,5,1,1,5,5,5,5,5,5,5,5,5,5,6,5,6,6,5,1,5,5,5,5,5,6,5,4,5,5,5,5,5,0,5,6,5,0,5,1,5,6,5,5,5,5,5,6,5,6,6,5,5,5,1,5,6,5,5,5,5,1,5,5,5,5,0,5,5,6,5,5,5,6,5,5,5,7,5,5,1,1,5,5,5,1,6,1,5,5,5,5,5,5,5,4,4,6,6,5,5,5,5,1,5,1,5,5,4,5,6,5,1,5,5,5,4,6,5,5,5,1,5,5,5,5,5,6,5,4,5,5,5,5,5,5,1,5,1,5,5,1,5,5,5,5,5,6,5,7,5,5,5,6,5,1,1,5,5,5,1,5,5,5,5,6,1,5,5,1,1,5,5,1,1,5,6,1,5,5,1,5,6,1,1,5,5,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2],"d":[106.0,19.7,106.0,-6.0,36.9,17.1,106.0,19.3,106.0,106.0,96.8,32.9,106.0,35.9,106.0,63.4,106.0,-6.0,65.6,106.0,36.9,41.2,19.7,106.0,-6.0,106.0,19.7,-6.0,-6.0,19.7,-6.0,42.7,106.0,54.7,38.7,43.2,36.9,59.6,60.8,36.9,54.6,106.0,106.0,63.8,106.0,106.0,106.0,35.9,39.5,63.7,63.4,106.0,73.7,58.2,63.1,-6.0,61.0,42.1,39.0,106.0,106.0,-6.0,106.0,19.7,56.4,56.9,62.7,69.0,51.5,63.1,17.0,41.7,40.2,-6.0,106.0,63.1,48.3,58.7,57.8,48.2,37.2,19.7,9.0,66.4,58.0,106.0,65.8,48.1,42.7,19.7,67.2,106.0,106.0,26.6,17.1,106.0,106.0,106.0,46.2,-6.0,27.5,17.1,-6.0,35.0,39.5,19.7,46.2,106.0,106.0,39.9,25.2,106.0,37.1,60.7,57.9,61.2,17.1,46.2,48.1,57.2,106.0,19.7,58.3,106.0,36.9,-6.0,34.0,-6.0,19.7,106.0,46.7,100.0,48.8,65.9,106.0,58.0,58.5,-6.0,-6.0,52.6,-6.0,33.5,106.0,62.6,106.0,57.8,-6.0,106.0,17.1,64.1,67.0,18.6,106.0,106.0,57.8,19.7,62.8,22.1,106.0,33.9,74.7,106.0,27.2,46.2,106.0,19.7,57.8,78.8,36.9,47.3,36.9,19.7,106.0,-6.0,42.2,-6.0,106.0,106.0,73.9,17.1,45.4,-6.0,40.4,-6.0,29.4,63.0,70.9,-6.0,106.0,63.0,80.4,106.0,106.0,-6.0,106.0,-6.0,106.0,62.1,-6.0,25.6,106.0,106.0,106.0,34.9,63.6,19.7,-6.0,-6.0,106.0,57.8,106.0,-6.0,57.7,58.7,63.1,106.0,106.0,106.0,106.0,106.0,27.1,106.0,57.8,-6.0,60.9,73.6,75.6,-6.0,42.6,56.0,19.7,35.6,106.0,51.4,19.7,9.3,10.2,19.7,43.9,19.7,57.8,46.0,-6.0,39.9,36.9,19.7,76.5,40.6,-6.0,42.1,52.2,59.5,63.1,32.9,57.8,55.5,45.8,106.0,106.0,106.0,67.4,40.3,33.9,106.0,-6.0,19.7,99.1,19.7,67.0,106.0,106.0,41.8,67.5,-6.0,57.9,73.0,85.0,59.7,-6.0,19.7,67.0,106.0,106.0,19.7,58.2,41.7,19.3,-6.0,106.0,-6.0,19.7,59.4,68.0,106.0,57.7,36.9,46.2,106.0,58.2,87.0,36.9,106.0,106.0,19.7,41.7,-6.0,75.5,-6.0,67.3,19.7,33.2,45.5,106.0,106.0,106.0,58.5,-6.0,-6.0,25.3,-6.0,-6.0,41.1,35.4,58.5,32.9,66.7,106.0,65.1,19.7,17.1,23.0,63.5,13.7,52.1,67.9,106.0,106.0,-6.0,72.2,23.3,52.4,54.4,106.0,63.0,71.8,58.5,25.7,33.9,27.3,106.0,106.0,106.0,17.1,106.0,106.0,32.9,106.0,58.7,52.7,33.8,57.8,106.0,62.9,106.0,58.3,41.7,59.3,59.4,-6.0,65.4,19.7,37.8,57.8,36.9,63.0,96.6,106.0,106.0,29.6,60.5,2.8,56.1,48.8,42.9,62.6,106.0,43.7,64.3,33.9,58.5,62.7,58.1,0.2,-6.0,41.9,53.6,36.8,17.1,45.2,19.7,-6.0,106.0,62.4,38.2,67.1,75.5,41.5,-6.0,93.0,76.2,34.4,63.3,106.0,63.6,106.0,106.0,37.2,106.0,-6.0,-6.0,106.0,63.1,106.0,39.1,106.0,42.6,57.8,106.0,106.0,59.5,52.0,-6.0,19.7,106.0,59.7,106.0,46.2,46.2,52.1,106.0,-6.0,106.0,38.7,19.7,52.6,19.7,19.7,-6.0,-6.0,106.0,106.0,-6.0,106.0,106.0,106.0,-6.0,106.0,46.2,-6.0,106.0,39.1,76.1,19.7,45.1,106.0,63.2,46.6,-6.0,48.1,77.1,52.6,41.6,-6.0,67.2,67.0,106.0,36.9,-6.0,19.7,106.0,43.7,75.6,106.0,106.0,106.0,-6.0,22.3,28.1,106.0,58.5,85.2,106.0,75.6,106.0,-6.0,46.2,63.0,106.0,90.1,106.0,106.0,106.0,57.9,63.4,19.7,106.0,106.0,106.0,106.0,-6.0,106.0,31.1,-6.0,57.8,67.3,-6.0,106.0,-6.0,63.1,100.0,38.5,-6.0,-6.0,106.0,58.4,0.0,19.6,30.9,59.2,106.0,23.7,106.0,71.9,-6.0,62.1,17.1,40.4,13.1,31.6,57.8,67.3,36.8,66.1,100.0,63.5,36.5,63.1,-6.0,106.0,106.0,17.1,36.9,106.0,16.6,36.9,106.0,66.3,19.7,35.9,32.1,65.6,33.9,37.0,41.5,65.0,66.3,-6.0,46.2,-6.0,57.5,106.0,59.7,19.7,106.0,106.0,57.8,53.5,73.5,106.0,19.7,63.0,77.9,-6.0,63.9,106.0,43.7,46.2,39.5,68.6,106.0,59.4,106.0,106.0,106.0,47.8,-6.0,63.4,40.7,51.0,36.9,106.0,48.2,106.0,55.3,85.5,63.1,106.0,-6.0,58.7,-6.0,33.6,37.1,17.1,37.6,-6.0,-6.0,106.0,46.2,63.7,44.5,73.6,67.4,30.6,106.0,-6.0,17.1,63.0,106.0,74.5,0.0,57.1,69.0,47.4,39.7,41.2,36.9,-6.0,106.0,106.0,29.9,43.7,106.0,106.0,36.9,106.0,47.9,106.0,36.9,106.0,88.7,39.9,106.0,74.5,63.5,63.1,58.8,-6.0,22.2,19.7,106.0,106.0,63.0,59.8,19.7,106.0,53.9,106.0,67.0,45.2,72.5,55.7,106.0,19.0,40.5,106.0,106.0,106.0,106.0,106.0,88.3,106.0,-6.0,34.3,-6.0,47.8,-6.0,46.2,-6.0,-6.0,106.0,19.7,-6.0,106.0,-6.0,19.7,26.3,19.7,58.5,76.2,35.0,57.8,43.4,48.6,106.0,17.1,57.9,52.6,-6.0,106.0,65.3,44.6,19.7,-6.0,85.8,92.2,71.5,106.0,75.6,50.9,43.7,106.0,-6.0,77.9,46.2,43.7,12.2,106.0,-6.0,106.0,49.7,106.0,-6.0,-6.0,25.8,51.5,50.3,50.4,-6.0,19.7,106.0,29.6,34.0,40.0,19.7,-6.0,37.4,75.6,106.0,56.9,15.7,13.1,106.0,-6.0,52.6,19.7,-6.0,42.8,106.0,100.0,19.7,-6.0,-6.0,106.0,30.1,16.8,19.7,25.8,38.3,19.7,106.0,47.8,106.0,-6.0,106.0,56.3,106.0,-6.0,-6.0,106.0,73.4,45.5,45.9,95.9,63.1,106.0,63.0,67.6,-6.0,11.7,-6.0,12.3,68.9,-6.0,57.8,100.0,19.7,19.7,63.1,41.1,106.0,89.8,36.9,106.0,63.0,63.0,30.9,19.7,88.7,19.7,-6.0,106.0,19.7,75.0,48.8,28.7,19.7,106.0,56.9,46.2,58.1,-6.0,40.4,106.0,106.0,106.0,46.2,63.0,106.0,106.0,-6.0,19.7,16.2,46.2,17.1,17.1,106.0,106.0,19.7,106.0,71.5,-6.0,53.8,106.0,58.0,76.9,106.0,106.0,106.0,-6.0,16.8,72.1,-6.0,46.2,-6.0,46.2,19.7,106.0,106.0,70.7,-6.0,17.1,19.7,63.0,46.2,48.8,62.9,106.0,77.9,-6.0,19.7,106.0,106.0,63.0,106.0,43.7,106.0,-6.0,19.7,39.4,63.1,58.3,106.0,50.5,106.0,68.0,19.7,17.1,106.0,106.0,33.9,16.4,57.9,106.0,72.2,43.7,70.1,106.0,-6.0,106.0,-6.0,106.0,63.0,-6.0,0.0,-6.0,45.1,50.7,56.1,106.0,50.4,75.6,-6.0,106.0,58.2,19.7,-6.0,-6.0,59.4,19.7,10.2,61.7,106.0,19.7,58.3,106.0,37.2,33.9,106.0,-6.0,-6.0,106.0,3.4,19.7,19.7,106.0,89.8,106.0,19.7,46.2,106.0,33.9,106.0,59.5,58.4,60.8,49.7,91.4,61.6,52.1,31.1,106.0,81.0,59.3,57.8,66.3,49.8,-6.0,106.0,56.1,106.0,106.0,37.5,106.0,19.7,54.5,19.7,106.0,46.2,32.8,58.5,43.7,50.5,87.2,106.0,106.0,106.0,-6.0,106.0,106.0,106.0,106.0,17.1,63.4,11.7,19.7,-6.0,-6.0,106.0,-6.0,106.0,-6.0,29.3,29.1,106.0,51.1,106.0,68.4,56.7,-6.0,55.2,-6.0,49.2,57.8,106.0,22.6,63.1,106.0,106.0,47.2,72.5,29.1,58.4,19.7,48.8,68.4,58.1,106.0,53.5,31.3,36.9,56.2,19.7,41.1,-6.0,50.7,106.0,106.0,52.6,63.5,43.4,-6.0,106.0,73.4,106.0,49.7,49.6,48.4,106.0,57.8,51.8,19.7,106.0,75.6,75.6,106.0,106.0,31.5,40.7,38.7,19.7,106.0,41.9,48.9,56.5,-6.0,-6.0,-6.0,60.5,106.0,63.0,-6.0,106.0,-6.0,106.0,-6.0,0.0,106.0,69.2,41.8,58.3,59.1,42.2,43.4,56.1,11.0,47.8,48.9,0.0,106.0,106.0,19.7,106.0,106.0,54.4,39.3,72.4,66.0,67.1,106.0,19.7,44.5,56.3,66.6,106.0,51.5,-6.0,33.5,-6.0,-6.0,50.6,32.9,19.7,46.7,37.7,19.7,17.1,106.0,-6.0,19.7,-6.0,58.6,19.7,106.0,-6.0,-6.0,106.0,90.9,19.7,-6.0,32.9,106.0,-6.0,19.7,63.7,-6.0,31.0,73.8,46.2,-6.0,17.9,65.6,46.2,106.0,106.0,106.0,52.6,65.8,17.1,106.0,106.0,28.8,57.3,52.2,-6.0,106.0,40.0,106.0,-6.0,19.7,58.3,67.3,50.5,39.5,36.9,106.0,49.1,57.8,106.0,38.2,106.0,19.7,106.0,106.0,46.2,35.4,17.1,35.5,106.0,67.6,106.0,32.9,-6.0,17.1,-6.0,63.0,63.0,36.9,62.5,106.0,39.3,78.8,41.4,32.9,41.4,-6.0,-6.0,19.7,-6.0,43.4,32.0,51.5,58.3,-6.0,-6.0,-6.0,106.0,43.0,106.0,-6.0,106.0,42.8,48.3,36.9,0.0,-6.0,-6.0,61.3,19.7,106.0,77.9,106.0,106.0,49.6,106.0,56.7,19.7,61.9,106.0,-6.0,41.1,54.5,34.3,57.8,106.0,61.5,17.1,-6.0,19.7,106.0,106.0,63.4,19.7,61.5,19.7,40.8,77.9,91.7,106.0,106.0,39.0,74.6,57.5,63.2,65.5,-6.0,2.2,55.7,106.0,100.0,106.0,-6.0,68.4,-6.0,41.1,106.0,67.3,106.0,46.2,106.0,17.1,106.0,-6.0,-6.0,33.9,106.0,19.7,40.6,-6.0,69.0,-6.0,19.7,19.7,-6.0,106.0,19.7,-6.0,36.9,64.3,68.0,46.6,57.8,106.0,67.3,106.0,-6.0,-6.0,106.0,-6.0,25.8,77.9,106.0,106.0,41.1,66.6,106.0,-6.0,48.1,106.0,77.2,33.9,62.8,-6.0,58.1,-6.0,76.2,106.0,44.0,106.0,27.9,106.0,-6.0,33.9,19.7,-6.0,36.9,27.2,36.9,36.9,8.1,106.0,55.7,57.7,28.3,-6.0,17.1,38.5,106.0,106.0,34.5,37.9,-6.0,-6.0,46.2,19.7,106.0,106.0,106.0,19.7,19.7,64.1,-6.0,72.4,106.0,106.0,36.9,36.2,42.6,36.9,63.2,106.0,43.7,-6.0,42.2,106.0,20.7,106.0,67.4,106.0,-6.0,48.8,61.6,106.0,19.7,106.0,63.0,64.4,36.9,19.7,106.0,19.7,106.0,-6.0,-6.0,106.0,106.0,43.7,99.1,53.1,-6.0,58.0,17.1,17.1,58.5,57.6,65.8,57.8,19.7,88.7,-6.0,106.0,38.5,76.5,96.8,-6.0,106.0,58.3,50.2,-6.0,-6.0,-6.0,106.0,19.7,75.6,15.4,19.7,71.8,51.0,17.1,60.1,-6.0,92.1,43.4,106.0,106.0,51.6,57.9,95.9,106.0,17.1,43.7,36.9,106.0,36.9,106.0,106.0,106.0,19.7,-6.0,-6.0,43.7,106.0,12.0,57.3,27.0,106.0,33.8,19.7,46.6,-6.0,19.7,56.9,67.6,106.0,74.2,106.0,41.3,19.7,46.2,76.6,106.0,106.0,19.7,106.0,-6.0,-6.0,-6.0,106.0,100.0,30.9,-6.0,63.0,106.0,66.4,46.2,58.3,67.0,43.9,106.0,30.5,-6.0,106.0,40.3,48.8,57.8,42.4,59.7,43.7,62.6,106.0,69.6,48.8,106.0,59.2,35.1,57.3,67.2,-6.0,30.4,46.2,63.1,106.0,-6.0,106.0,19.7,106.0,66.5,33.9,63.9,53.1,2.8,-6.0,74.9,70.1,75.6,-6.0,76.5,106.0,27.0,50.4,106.0,106.0,17.1,106.0,106.0,106.0,57.1,75.9,56.6,106.0,19.8,106.0,55.9,19.7,106.0,0.0,-6.0,106.0,40.0,106.0,41.6,44.9,19.7,59.8,19.7,19.7,35.3,106.0,39.2,2.5,-6.0,22.1,62.4,62.1,106.0,43.7,29.6,-6.0,-6.0,58.2,-6.0,106.0,34.1,106.0,72.6,106.0,81.1,19.7,40.5,58.1,38.4,87.6,10.2,33.9,106.0,63.3,75.6,65.4,106.0,32.4,-6.0,63.0,44.3,-6.0,64.7,106.0,-6.0,46.2,72.3,62.6,50.2,106.0,106.0,46.2,70.1,39.9,44.3,60.1,19.7,19.7,17.1,64.7,19.7,57.0,19.7,66.0,19.7,17.1,-6.0,49.2,106.0,28.9,-6.0,66.6,42.2,36.9,106.0,17.1,36.9,57.8,106.0,26.3,106.0,66.7,47.7,106.0,84.0,63.7,58.8,-6.0,-6.0,32.9,38.2,106.0,56.2,106.0,54.3,-6.0,-6.0,66.8,57.8,41.2,106.0,100.0,19.7,19.7,-6.0,60.6,19.7,106.0,53.0,79.3,46.2,46.2,106.0,29.0,106.0,106.0,106.0,44.5,-6.0,19.7,106.0,65.5,-6.0,52.6,63.0,42.6,63.3,106.0,36.3,17.1,25.2,106.0,69.9,62.4,106.0,65.9,77.9,18.2,62.1,39.5,-6.0,75.5,27.2,32.9,-6.0,17.1,59.2,43.4,-6.0,27.6,-6.0,27.7,29.6,-6.0,-6.0,66.9,15.4,106.0,106.0,-6.0,106.0,68.0,-6.0,75.3,58.9,66.3,106.0,36.9,106.0,28.8,106.0,106.0,7.3,75.6,106.0,63.0,106.0,53.2,-6.0,21.6,106.0,57.8,106.0,-6.0,19.7,106.0,106.0,106.0,45.1,56.6,36.1,56.7,17.1,57.8,37.0,57.7,17.1,67.3,19.4,19.7,57.7,35.5,67.2,69.0,40.0,59.3,2.8,13.5,58.0,-6.0,31.0,41.5,106.0,106.0,59.6,-6.0,106.0,21.6,19.7,71.9,106.0,-6.0,95.5,106.0,106.0,77.2,-6.0,40.0,-6.0,19.7,74.4,-6.0,19.7,74.1,106.0,62.6,-6.0,106.0,-6.0,106.0,17.7,53.6,-6.0,60.3,30.5,106.0,-6.0,-6.0,40.3,49.3,22.9,106.0,43.7,78.7,32.7,32.4,37.0,41.1,48.5,106.0,40.7,36.9,59.2,106.0,19.7,106.0,-6.0,50.2,-6.0,106.0,34.6,73.0,37.2,67.3,19.7,36.9,68.6,38.1,75.2,19.7,75.6,-6.0,64.5,17.1,106.0,106.0,73.7,64.0,106.0,106.0,62.5,31.4,66.0,19.7,106.0,106.0,-6.0,17.1,30.9,17.1,19.7,69.2,34.2,19.7,68.0,30.2,19.7,106.0,19.7,106.0,46.7,46.2,106.0,58.0,106.0,47.4,106.0,55.1,51.0,106.0,38.2,50.3,58.3,31.1,19.7,46.2,35.5,-6.0,-6.0,58.6,96.6,32.9,0.0,17.1,56.1,-6.0,47.9,-6.0,-6.0,75.0,66.2,62.1,48.7,51.6,44.9,58.1,106.0,56.8,74.2,19.7,-6.0,34.2,19.7,20.8,68.4,19.7,43.7,19.2,43.5,19.7,88.0,75.6,63.0,106.0,106.0,106.0,76.5,52.6,43.7,106.0,106.0,37.0,66.1,19.7,63.0,106.0,63.3,24.9,39.5,106.0,106.0,106.0,106.0,57.8,46.2,64.1,106.0,19.7,106.0,38.2,106.0,106.0,60.3,19.7,-6.0,58.3,62.8,41.5,-6.0,41.6,61.9,100.0,56.0,67.3,106.0,41.4,106.0,-6.0,106.0,106.0,-6.0,36.9,-6.0,106.0,-6.0,64.4,-6.0,106.0,-6.0,106.0,57.1,51.0,-6.0,67.7,64.5,32.9,76.9,-6.0,-6.0,-6.0,-6.0,36.9,-6.0,-6.0,63.7,33.9,-6.0,49.4,43.0,66.4,39.3,106.0,5.3,106.0,106.0,51.4,106.0,106.0,106.0,19.7,-6.0,106.0,65.8,106.0,48.8,75.6,58.6,19.7,46.2,36.9,68.2,57.8,49.8,-6.0,65.9,60.0,106.0,106.0,49.2,41.7,57.8,38.2,19.7,-6.0,39.0,66.0,15.8,106.0,17.1,7.6,69.7,17.1,31.6,106.0,67.0,106.0,86.4,-6.0,73.7,106.0,24.0,106.0,33.5,19.7,15.1,106.0,106.0,43.8,76.9,106.0,106.0,26.9,58.3,47.7,27.0,106.0,-6.0,86.2,17.1,63.7,74.2,106.0,106.0,63.7,106.0,63.3,19.7,106.0,62.8,52.6,63.1,106.0,44.1,44.2,45.5,106.0,60.4,32.9,53.8,106.0,58.3,106.0,47.3,-6.0,106.0,41.9,106.0,-6.0,29.4,19.7,39.2,52.6,36.9,64.0,58.2,29.6,39.4,19.7,106.0,106.0,59.2,48.8,54.1,17.1,106.0,-6.0,19.7,55.1,43.7,36.4,40.0,33.9,76.6,-6.0,106.0,106.0,106.0,23.0,34.1,48.1,-6.0,106.0,56.3,49.4,84.7,-6.0,60.9,106.0,49.2,81.2,29.6,19.7,106.0,66.7,19.7,60.2,106.0,19.7,106.0,34.4,36.9,60.9,106.0,-6.0,73.9,-6.0,47.0,106.0,59.5,106.0,59.9,39.2,49.1,76.5,39.3,19.7,106.0,-6.0,48.9,96.8,52.6,106.0,59.2,106.0,17.2,-6.0,106.0,106.0,45.3,-6.0,-6.0,19.7,66.8,32.0,58.6,32.1,106.0,39.2,106.0,88.4,106.0,19.7,36.9,58.0,19.7,91.7,45.3,59.2,106.0,106.0,106.0,52.1,60.4,-6.0,25.8,36.9,-6.0,11.7,0.0,25.6,106.0,-6.0,53.6,17.1,106.0,37.5,60.3,31.2,46.9,19.7,106.0,106.0,106.0,66.3,46.2,106.0,106.0,59.3,76.2,63.6,52.3,-6.0,7.3,-6.0,73.1,17.1,12.0,19.7,60.1,58.6,63.1,106.0,106.0,106.0,106.0,106.0,106.0,36.9,106.0,63.1,63.6,-6.0,19.7,-6.0,51.1,106.0,17.1,106.0,64.7,50.5,52.6,35.1,49.6,86.1,13.1,63.0,62.5,106.0,19.7,106.0,68.7,47.2,19.7,58.1,19.7,46.2,68.5,-6.0,-6.0,106.0,19.7,71.8,-6.0,106.0,106.0,-6.0,69.5,58.6,-6.0,36.9,106.0,106.0,75.6,106.0,106.0,46.3,106.0,36.9,58.7,106.0,63.1,-6.0,106.0,49.8,106.0,37.3,60.1,53.2,19.7,63.1,33.9,71.3,19.7,-6.0,106.0,31.2,53.3,70.6,52.6,46.2,40.4,19.7,-6.0,51.0,-6.0,-6.0,-6.0,-6.0,106.0,-6.0,67.1,74.8,75.0,-6.0,0.0,19.7,106.0,19.7,-6.0,106.0,106.0,106.0,-6.0,77.9,106.0,59.5,52.8,60.7,-6.0,74.4,51.7,106.0,-6.0,52.5,106.0,67.5,19.7,68.7,-6.0,100.0,32.9,36.1,43.7,68.1,41.8,106.0,106.0,-6.0,58.1,47.5,68.4,53.1,73.6,55.8,-6.0,48.4,32.4,106.0,106.0,106.0,8.4,-6.0,-6.0,19.7,43.9,36.9,51.0,-6.0,40.1,63.0,63.3,68.2,100.0,-6.0,0.0,19.7,106.0,-6.0,106.0,106.0,57.9,47.8,39.0,106.0,53.0,28.9,58.1,58.3,32.9,36.9,106.0,19.7,52.6,30.3,44.3,89.8,17.1,-6.0,57.9,106.0,-6.0,35.3,106.0,58.4,30.9,106.0,46.2,106.0,74.5,70.5,57.8,52.8,77.9,75.0,106.0,106.0,44.5,106.0,106.0,106.0,106.0,46.2,106.0,106.0,12.0,59.5,36.9,-6.0,106.0,-6.0,46.1,106.0,42.3,46.2,36.9,106.0,17.1,51.7,-6.0,36.9,41.3,46.9,63.2,36.9,106.0,58.2,-6.0,106.0,106.0,63.6,106.0,106.0,55.6,106.0,63.0,54.1,76.9,-6.0,25.8,-6.0,63.2,-6.0,42.0,-6.0,106.0,39.2,36.9,70.2,19.7,57.1,30.8,106.0,17.1,58.2,-6.0,38.8,106.0,106.0,37.9,106.0,106.0,-6.0,77.9,56.1,9.6,47.6,51.3,30.0,19.7,34.9,33.9,48.7,32.9,106.0,41.1,-6.0,106.0,30.1,31.1,106.0,54.0,19.7,106.0,67.0,106.0,106.0,-6.0,-6.0,-6.0,106.0,106.0,40.5,46.2,41.5,106.0,62.6,100.0,106.0,106.0,-6.0,106.0,-6.0,106.0,106.0,32.9,17.1,50.0,106.0,-6.0,58.6,54.1,40.8,106.0,93.0,106.0,25.8,106.0,57.8,43.7,106.0,17.1,75.6,-6.0,63.0,-6.0,-6.0,57.4,57.8,106.0,57.0,30.2,34.8,57.8,106.0,39.8,106.0,59.3,58.6,19.7,96.8,106.0,17.1,-6.0,-6.0,58.1,106.0,19.7,46.6,25.8,106.0,19.7,106.0,106.0,0.0,24.0,63.0,106.0,106.0,36.9,67.0,106.0,55.0,106.0,-6.0,58.5,64.3,74.4,33.6,106.0,75.0,27.0,56.2,60.5,106.0,41.3,52.1,57.5,34.8,-6.0,50.3,-6.0,29.8,5.3,106.0,35.4,-6.0,63.0,46.1,15.1,106.0,46.2,56.2,17.1,38.9,0.8,106.0,66.5,106.0,57.7,10.9,-6.0,-6.0,32.4,50.2,67.8,77.2,51.3,106.0,56.1,57.3,33.9,-6.0,17.1,50.6,48.8,46.0,56.3,62.1,0.0,35.5,74.5,19.7,75.5,67.6,74.2,58.4,-6.0,19.7,55.0,106.0,25.8,106.0,57.7,106.0,-6.0,-6.0,7.1,19.7,39.9,-6.0,106.0,-6.0,106.0,106.0,-6.0,100.0,106.0,58.7,46.2,43.0,63.3,57.8,33.9,-6.0,19.7,17.1,-6.0,-6.0,88.7,58.2,19.7,47.0,60.0,106.0,106.0,-6.0,106.0,19.7,106.0,57.4,33.4,106.0,33.9,19.2,106.0,51.4,27.2,0.0,-6.0,-6.0,106.0,73.7,63.0,-6.0,-6.0,106.0,-6.0,106.0,63.5,5.2,106.0,33.6,43.7,-6.0,37.6,72.8,60.2,19.7,36.1,75.3,-6.0,106.0,106.0,19.7,50.7,51.1,19.7,59.0,106.0,34.0,58.3,75.6,32.7,-6.0,106.0,67.6,-6.0,19.7,106.0,35.9,106.0,106.0,86.4,69.0,-6.0,57.1,19.7,99.1,106.0,19.7,19.7,33.6,106.0,61.9,30.0,106.0,36.9,62.0,106.0,-6.0,57.8,106.0,-6.0,45.4,58.4,17.1,-6.0,106.0,106.0,39.1,106.0,106.0,106.0,46.2,31.3,30.6,106.0,106.0,24.0,-6.0,106.0,36.9,106.0,61.0,59.7,53.4,5.3,106.0,106.0,106.0,106.0,40.7,19.7,66.7,26.7,106.0,40.3,106.0,36.3,-6.0,10.2,-6.0,12.0,106.0,58.7,39.9,19.7,29.5,48.8,52.4,15.2,106.0,-6.0,38.7,23.7,106.0,63.2,106.0,52.6,62.4,58.2,67.0,58.1,23.0,40.7,36.7,36.9,88.3,-6.0,106.0,73.3,106.0,-6.0,51.0,61.6,106.0,17.0,56.7,33.9,-6.0,19.7,68.7,48.2,36.9,106.0,39.2,46.2,66.7,64.1,76.2,42.2,19.7,32.6,106.0,44.1,65.6,47.1,-6.0,106.0,19.7,-6.0,67.0,106.0,36.9,19.7,-6.0,106.0,19.7,33.7,50.7,67.0,106.0,106.0,60.9,41.8,106.0,-6.0,63.1,-6.0,46.9,106.0,73.6,19.7,59.1,61.8,67.6,-6.0,106.0,106.0,106.0,45.1,58.3,106.0,34.7,52.0,1.1,106.0,19.7,28.7,-6.0,50.2,106.0,106.0,0.0,26.9,106.0,63.0,106.0,106.0,19.7,106.0,67.3,6.1,75.6,62.7,-6.0,63.0,36.1,106.0,106.0,106.0,50.5,36.9,39.1,106.0,58.5,19.7,53.7,19.7,57.8,77.9,106.0,19.7,48.3,29.4,21.8,60.1,106.0,21.7,106.0,-6.0,67.6,106.0,25.8,62.1,-6.0,60.6,59.0,44.3,61.0,106.0,-6.0,65.9,-6.0,75.5,-6.0,17.1,47.1,51.0,39.1,106.0,41.5,73.5,-6.0,106.0,41.1,75.6,106.0,71.1,46.2,-6.0,75.2,36.9,96.8,106.0,37.9,106.0,106.0,106.0,23.9,33.9,-6.0,50.7,92.0,20.7,100.0,19.7,-6.0,-6.0,63.0,-6.0,42.3,67.3,50.0,-6.0,106.0,-6.0,106.0,58.5,106.0,19.7,57.3,-6.0,-6.0,38.4,106.0,66.4,-6.0,106.0,96.8,106.0,56.1,17.1,58.3,37.2,106.0,40.4,-6.0,-6.0,23.1,58.9,106.0,106.0,106.0,65.9,50.3,106.0,46.2,106.0,106.0,67.4,36.9,70.4,19.7,106.0,-6.0,-6.0,32.9,46.2,-6.0,106.0,49.9,44.3,88.9,56.2,63.1,59.9,106.0,52.6,17.1,106.0,-6.0,106.0,106.0,106.0,106.0,19.7,106.0,86.4,106.0,43.3,64.6,-6.0,-6.0,106.0,17.1,65.4,106.0,57.8,-6.0,19.7,106.0,106.0,46.2,19.7,106.0,38.2,19.1,-6.0,57.9,37.9,-6.0,57.8,75.5,44.0,106.0,-6.0,106.0,106.0,63.4,106.0,52.6,106.0,93.0,106.0,51.6,59.5,49.1,106.0,-6.0,106.0,106.0,106.0,19.7,63.0,75.6,17.1,106.0,52.8,51.9,93.8,57.9,73.8,52.6,106.0,106.0,100.0,77.9,19.7,106.0,106.0,106.0,56.2,61.7,58.5,19.7,83.3,49.4,-6.0,100.0,63.1,106.0,47.9,40.4,19.7,11.8,57.1,106.0,106.0,106.0,100.0,106.0,33.6,46.5,19.3,19.7,106.0,106.0,60.5,69.5,77.9,-6.0,-6.0,54.4,36.9,106.0,106.0,74.6,-6.0,106.0,67.0,33.7,106.0,61.2,106.0,37.8,106.0,106.0,106.0,19.7,54.6,106.0,-6.0,40.8,106.0,19.7,10.2,58.5,58.2,106.0,-6.0,106.0,-6.0,60.6,15.4,62.3,-6.0,38.4,58.4,106.0,46.2,-6.0,75.3,-6.0,47.8,52.1,36.9,106.0,66.3,-6.0,19.7,47.4,59.8,-6.0,-6.0,76.2,-6.0,50.1,46.2,66.2,19.7,-6.0,106.0,19.7,32.6,106.0,17.1,42.7,43.6,67.4,-6.0,106.0,50.9,106.0,55.7,67.6,57.8,74.9,69.9,19.7,73.0,-6.0,46.8,67.2,-6.0,19.7,30.5,-6.0,106.0,106.0,106.0,9.3,106.0,106.0,77.6,32.9,73.1,56.3,66.2,-6.0,106.0,6.0,41.4,43.2,106.0,106.0,19.7,67.8,-6.0,106.0,-6.0,75.5,-6.0,48.0,46.2,19.7,106.0,46.2,19.7,-6.0,106.0,-6.0,106.0,106.0,17.2,106.0,57.7,65.3,-6.0,91.4,57.8,33.9,-6.0,52.6,19.7,19.7,106.0,40.3,36.9,69.5,33.8,26.4,106.0,28.0,106.0,19.7,106.0,92.9,106.0,106.0,106.0,29.7,41.2,106.0,19.7,0.0,-6.0,106.0,-6.0,106.0,19.7,106.0,106.0,57.9,-6.0,50.2,42.1,37.8,62.8,33.1,38.3,57.8,24.3,106.0,52.7,58.1,19.7,40.4,100.0,60.3,75.0,106.0,106.0,31.6,19.7,52.3,106.0,55.0,62.6,33.9,106.0,19.7,100.0,-6.0,106.0,106.0,63.5,31.2,106.0,106.0,-6.0,100.0,19.7,-6.0,66.5,62.0,53.7,36.9,39.3,56.9,62.7,57.8,106.0,93.4,106.0,19.7,49.7,63.1,106.0,53.5,36.2,65.7,73.1,-6.0,-6.0,-6.0,76.2,106.0,36.9,106.0,106.0,46.2,51.7,106.0,17.1,106.0,106.0,106.0,19.7,106.0,67.3,19.7,17.1,57.8,-6.0,106.0,30.6,63.0,48.5,57.9,-6.0,-6.0,-6.0,57.8,106.0,58.6,106.0,17.1,106.0,46.8,106.0,106.0,-6.0,17.1,17.1,16.1,106.0,-6.0,58.1,106.0,67.9,-6.0,0.0,56.3,-6.0,106.0,106.0,-6.0,39.3,106.0,58.1,106.0,46.2,-6.0,56.1,31.9,58.0,65.9,61.9,106.0,-6.0,19.7,39.6,106.0,17.1,77.9,28.0,-6.0,-6.0,17.1,106.0,49.7,17.1,19.7,19.7,73.5,0.0,68.8,57.7,-6.0,106.0,106.0,-6.0,36.1,59.2,46.2,106.0,63.0,106.0,106.0,51.3,66.7,62.1,50.4,19.7,106.0,57.8,85.5,57.4,19.7,-6.0,75.5,106.0,106.0,93.4,106.0,106.0,19.7,49.6,47.9,57.8,63.0,106.0,106.0,47.2,60.1,106.0,106.0,106.0,106.0,106.0,-6.0,36.9,-6.0,106.0,106.0,50.7,37.4,63.9,106.0,106.0,106.0,58.0,106.0,-6.0,106.0,49.1,-6.0,60.3,36.9,106.0,-6.0,106.0,55.7,106.0,106.0,106.0,46.2,17.1,106.0,41.5,100.0,40.9,52.4,106.0,106.0,54.6,19.7,46.1,34.9,63.5,106.0,106.0,106.0,57.8,106.0,106.0,106.0,57.8,39.7,106.0,106.0,106.0,75.6,36.9,91.7,48.8,19.7,19.7,106.0,-6.0,59.4,43.7,106.0,-6.0,106.0,59.2,106.0,17.1,57.4,73.5,49.6,19.7,106.0,106.0,48.7,106.0,35.8,106.0,19.7,-6.0,59.8,17.1,-6.0,106.0,106.0,106.0,43.0,63.1,106.0,49.6,55.4,106.0,19.7,18.6,88.8,106.0,63.0,106.0,25.8,106.0,106.0,65.9,106.0,-6.0,57.8,63.0,-6.0,106.0,106.0,75.6,-6.0,53.1,76.3,83.4,106.0,106.0,-6.0,19.7,-6.0,44.3,-6.0,106.0,19.7,74.8,75.5,36.9,27.6,63.2,106.0,25.8,57.3,65.9,75.0,8.1,106.0,59.7,37.7,41.6,106.0,31.7,43.3,32.9,19.7,75.9,52.6,26.4,17.1,106.0,39.9,39.8,106.0,69.1,-6.0,-6.0,-6.0,68.0,58.6,-6.0,62.5,54.1,17.1,43.7,37.5,-6.0,106.0,36.9,73.1,56.7,106.0,41.2,43.7,29.4,62.5,106.0,-6.0,59.7,32.9,65.4,106.0,106.0,67.2,106.0,49.8,106.0,58.6,68.0,106.0,63.0,73.7,106.0,106.0,106.0,-6.0,106.0,28.1,58.2,47.1,44.1,63.5,24.0,58.1,63.4,63.1,63.7,106.0,57.6,73.4,-6.0,12.0,19.7,-6.0,51.7,19.7,62.6,106.0,46.4,19.7,106.0,66.8,106.0,48.2,96.6,67.9,57.9,106.0,21.6,57.8,-6.0,52.3,106.0,40.4,63.1,106.0,106.0,58.6,46.2,-6.0,47.9,10.9,106.0,106.0,93.5,19.7,51.0,18.7,106.0,106.0,96.8,19.7,106.0,106.0,106.0,54.2,66.3,63.9,76.4,19.7,-6.0,75.0,47.5,84.2,106.0,61.9,63.5,84.4,106.0,106.0,0.0,56.1,58.8,106.0,59.3,106.0,34.7,32.9,63.0,106.0,106.0,17.1,-6.0,106.0,106.0,75.0,19.7,67.4,67.3,75.9,34.7,106.0,22.5,106.0,-6.0,64.4,17.1,36.9,51.0,19.7,106.0,62.3,42.3,53.4,106.0,59.4,17.1,106.0,19.7,59.1,47.2,11.2,63.4,-6.0,17.1,19.7,36.8,96.8,63.0,36.9,-6.0,62.5,46.8,66.4,106.0,46.2,58.8,-6.0,-6.0,106.0,68.2,-6.0,68.6,-6.0,46.8,19.7,77.9,-6.0,19.7,106.0,13.9,38.6,31.1,30.1,52.1,-6.0,37.2,33.1,106.0,65.6,106.0,51.1,106.0,17.1,63.0,77.6,51.6,81.2,67.3,52.4,59.0,-6.0,64.3,45.2,106.0,46.2,106.0,19.7,17.1,36.1,63.4,40.6,106.0,-6.0,57.8,50.7,53.0,40.8,57.5,44.4,-6.0,28.2,106.0,100.0,19.7,19.7,63.0,73.8,45.0,39.4,68.0,44.3,-6.0,63.5,-6.0,-6.0,106.0,55.4,50.6,19.7,106.0,58.2,106.0,-6.0,49.9,106.0,-6.0,-6.0,90.1,32.9,106.0,38.2,77.9,66.3,67.0,54.6,106.0,19.7,76.5,10.9,-6.0,33.8,59.0,106.0,43.7,106.0,52.4,106.0,106.0,106.0,96.6,19.7,106.0,-6.0,50.8,-6.0,106.0,74.1,19.7,74.7,17.1,106.0,19.7,-6.0,106.0,72.6,63.0,36.9,-6.0,38.2,48.8,65.6,-6.0,58.4,52.0,-6.0,52.6,42.3,13.8,32.9,19.7,36.9,106.0,106.0,67.0,-6.0,66.3,-6.0,67.4,8.2,106.0,17.9,38.2,36.9,19.7,17.1,40.3,57.9,106.0,106.0,106.0,106.0,-6.0,106.0,-6.0,-6.0,36.9,40.0,47.3,106.0,106.0,19.7,106.0,106.0,43.7,31.3,19.7,2.8,59.8,106.0,106.0,65.8,-6.0,106.0,106.0,19.7,42.1,61.1,42.5,63.0,74.4,19.7,20.4,68.6,63.1,42.3,63.1,23.7,23.7,106.0,22.3,-6.0,58.0,63.0,59.1,-6.0,106.0,75.6,88.4,58.0,106.0,43.7,62.2,34.5,106.0,106.0,106.0,63.9,44.4,19.7,106.0,106.0,48.6,-6.0,63.1,73.6,29.9,19.4,38.6,-6.0,33.9,106.0,-6.0,36.9,60.0,106.0,38.7,32.9,19.7,-6.0,-6.0,-6.0,100.0,106.0,65.6,19.7,-6.0,19.7,46.2,106.0,-6.0,19.7,19.7,45.4,41.8,21.6,106.0,106.0,37.9,106.0,106.0,36.9,-6.0,106.0,33.7,38.3,-6.0,58.6,33.7,17.1,88.7,-6.0,76.2,57.5,29.6,106.0,67.4,106.0,48.3,37.6,58.5,-6.0,55.3,-6.0,38.9,64.0,50.6,-6.0,46.2,14.0,76.5,37.9,37.4,106.0,106.0,106.0,52.1,106.0,-6.0,19.7,46.2,37.6,38.2,57.7,13.1,30.4,19.7,106.0,42.8,45.9,-6.0,106.0,36.9,67.0,19.7,70.8,63.3,35.5,23.7,106.0,56.6,57.8,19.7,43.4,-6.0,19.7,106.0,-6.0,106.0,92.0,32.9,68.0,106.0,57.6,74.7,66.2,74.4,106.0,51.7,106.0,-6.0,106.0,60.7,44.5,33.6,60.9,60.0,106.0,106.0,19.3,106.0,59.2,69.2,19.7,63.4,31.7,106.0,65.9,38.4,67.2,72.3,14.9,19.7,19.7,5.3,106.0,59.8,-6.0,55.9,50.2,106.0,106.0,106.0,58.3,-6.0,19.7,-6.0,77.9,106.0,32.5,-6.0,106.0,23.5,-6.0,-6.0,106.0,33.7,36.9,-6.0,-6.0,53.0,106.0,106.0,106.0,106.0,60.5,-6.0,106.0,67.2,50.7,75.2,106.0,-6.0,-6.0,106.0,75.2,33.9,87.9,106.0,39.0,57.8,106.0,-6.0,5.3,30.5,86.0,106.0,25.8,-6.0,63.1,67.2,74.6,106.0,-6.0,63.5,36.9,50.3,58.4,-6.0,-6.0,66.0,52.6,106.0,44.9,106.0,19.7,-6.0,106.0,57.8,63.4,19.7,106.0,106.0,106.0,91.7,0.0,100.0,19.7,-6.0,67.3,106.0,19.7,13.8,46.9,59.3,106.0,84.8,57.5,59.8,62.4,106.0,58.3,19.7,74.8,106.0,56.8,-6.0,22.7,106.0,19.7,67.6,57.8,45.8,-6.0,106.0,106.0,106.0,-6.0,48.8,25.7,75.6,-6.0,19.7,57.8,25.3,-6.0,-6.0,87.5,52.6,86.6,24.5,106.0,106.0,43.7,19.7,58.2,-6.0,106.0,106.0,59.6,63.0,89.7,-6.0,106.0,53.7,44.8,58.2,67.0,106.0,106.0,60.0,62.7,106.0,18.3,106.0,31.1,75.6,63.3,106.0,106.0,46.2,106.0,106.0,84.4,106.0,106.0,-6.0,106.0,65.9,19.7,19.7,63.5,106.0,106.0,76.9,45.5,59.9,62.1,106.0,-6.0,17.1,106.0,46.3,106.0,106.0,23.5,46.2,74.0,40.3,46.2,106.0,19.7,38.1,-6.0,106.0,23.7,63.0,71.2,-6.0,67.9,-6.0,106.0,106.0,58.0,19.7,52.6,-6.0,106.0,12.0,56.0,17.1,69.9,18.6,-6.0,19.7,57.7,106.0,19.7,30.6,19.7,-6.0,59.7,-6.0,63.0,106.0,39.7,36.9,-6.0,19.7,19.7,36.6,106.0,31.0,63.5,5.3,38.4,-6.0,37.0,10.9,47.8,63.8,106.0,106.0,57.9,61.1,41.2,-6.0,56.9,38.2,77.9,106.0,45.0,73.1,44.3,63.0,106.0,106.0,49.8,56.4,40.0,54.1,106.0,63.0,17.1,106.0,33.6,41.9,55.2,-6.0,-6.0,-6.0,42.0,40.2,-6.0,32.7,-6.0,-6.0,17.1,63.0,76.5,106.0,52.6,42.3,106.0,63.6,19.7,106.0,19.7,46.2,40.3,-6.0,67.6,106.0,-6.0,62.0,106.0,31.7,19.7,36.9,106.0,35.4,73.4,37.1,67.1,66.6,106.0,106.0,58.0,19.7,58.3,66.6,45.0,36.9,4.9,41.9,-6.0,19.7,-6.0,74.2,106.0,48.8,106.0,19.7,-6.0,-6.0,17.1,106.0,75.6,38.8,71.8,19.7,83.9,36.9,-6.0,-6.0,106.0,57.5,19.7,-6.0,106.0,46.2,-6.0,57.7,59.9,0.0,49.7,49.8,67.0,53.3,76.9,32.7,28.0,13.5,-6.0,74.4,106.0,58.5,-6.0,-6.0,58.5,44.4,19.7,106.0,32.9,64.1,42.4,63.0,66.2,106.0,33.9,68.2,46.2,54.1,48.4,-6.0,106.0,-6.0,23.0,-6.0,57.5,-6.0,-6.0,-6.0,-6.0,-6.0,-6.0,-6.0,17.1,106.0,-6.0,24.4,106.0,32.5,51.5,-6.0,35.4,-6.0,44.3,78.7,44.8,36.9,51.5,-6.0,19.7,55.5,81.5,67.0,64.1,106.0,106.0,32.9,63.0,106.0,63.5,19.7,46.2,36.2,36.0,36.9,65.6,63.4,106.0,106.0,63.9,106.0,106.0,35.9,106.0,106.0,19.7,19.7,57.8,19.7,106.0,17.1,39.9,63.5,106.0,45.1,106.0,29.6,-6.0,39.6,57.8,10.9,-6.0,-6.0,56.9,17.1,106.0,106.0,57.3,19.7,106.0,72.5,-6.0,106.0,42.9,106.0,106.0,-6.0,106.0,75.6,58.6,63.0,77.9,44.5,52.3,-6.0,-6.0,106.0,37.9,51.3,-6.0,17.1,106.0,52.7,-6.0,46.2,106.0,106.0,106.0,34.7,-6.0,47.9,106.0,106.0,106.0,106.0,106.0,19.7,106.0,106.0,61.7,19.7,75.6,79.3,18.8,18.2,-6.0,-6.0,-6.0,-6.0,106.0,106.0,106.0,106.0,106.0,52.6,19.7,19.7,49.2,46.2,19.7,106.0,106.0,55.5,33.9,37.7,106.0,19.7,51.4,86.6,106.0,51.5,106.0,106.0,106.0,106.0,63.0,19.7,17.1,58.3,-6.0,106.0,32.0,-6.0,66.5,-6.0,-6.0,41.6,106.0,67.9,106.0,37.6,22.7,78.6,43.2,35.0,53.9,48.7,106.0,41.0,76.5,106.0,-6.0,106.0,86.2,106.0,106.0,67.2,42.2,106.0,106.0,106.0,29.6,19.5,17.1,84.0,60.6,-6.0,29.3,52.6,52.6,24.5,106.0,62.4,-6.0,-6.0,-6.0,19.1,36.9,106.0,36.9,-6.0,-6.0,57.7,39.9,0.0,57.1,47.2,36.9,19.7,106.0,53.3,75.2,74.1,19.7,60.9,100.0,106.0,106.0,34.2,-6.0,57.8,99.1,40.9,62.2,35.6,106.0,106.0,-6.0,19.7,-6.0,76.1,5.3,67.0,59.6,106.0,-6.0,40.0,49.1,106.0,-6.0,41.1,106.0,40.4,46.2,-6.0,75.9,19.7,-6.0,-6.0,63.5,106.0,43.5,17.1,-6.0,106.0,29.6,58.3,59.4,58.1,30.6,59.5,106.0,34.5,19.6,64.0,32.8,-6.0,106.0,44.5,63.1,17.1,106.0,106.0,-6.0,71.1,106.0,106.0,32.9,-6.0,106.0,67.0,106.0,90.6,19.7,57.7,106.0,19.7,-6.0,106.0,19.7,36.9,106.0,106.0,32.8,89.8,19.7,48.5,106.0,-6.0,19.7,19.7,19.7,37.3,36.9,35.1,-6.0,57.8,106.0,106.0,41.4,-6.0,106.0,78.6,47.5,53.2,60.5,69.9,60.4,59.7,22.1,57.6,73.6,106.0,106.0,43.7,-6.0,17.1,106.0,5.3,45.6,106.0,106.0,63.3,17.1,34.2,35.1,68.6,59.4,52.1,46.6,63.1,47.9,106.0,39.0,19.7,106.0,32.9,55.1,32.8,19.7,36.3,36.9,26.0,66.0,-6.0,27.8,71.8,33.1,40.9,106.0,-6.0,63.0,51.3,19.7,63.4,106.0,46.2,35.5,106.0,37.9,50.0,106.0,60.5,106.0,49.6,106.0,17.1,19.7,106.0,106.0,51.3,40.0,13.8,17.1,106.0,46.2,106.0,36.9,106.0,46.2,57.9,49.9,-6.0,46.2,106.0,-6.0,86.6,32.0,106.0,50.7,68.4,74.5,106.0,45.6,-6.0,50.7,100.0,57.8,14.6,59.3,106.0,106.0,46.2,-6.0,36.9,76.5,106.0,19.7,100.0,106.0,63.2,-6.0,67.0,63.3,63.0,-6.0,62.1,35.7,-6.0,-6.0,11.3,43.7,19.7,106.0,66.8,106.0,35.5,-6.0,41.3,90.9,48.2,106.0,52.6,33.9,39.0,-6.0,68.4,-6.0,106.0,106.0,64.0,85.6,19.7,106.0,106.0,32.0,73.7,52.6,19.7,60.1,-6.0,57.9,47.9,58.9,5.3,28.5,57.5,106.0,106.0,19.7,75.1,106.0,74.7,106.0,71.1,63.1,106.0,57.8,106.0,74.4,60.3,67.9,25.2,34.6,65.3,106.0,40.0,19.7,-6.0,40.4,68.0,106.0,106.0,106.0,106.0,-6.0,106.0,106.0,-6.0,61.4,106.0,63.1,75.6,106.0,-6.0,106.0,106.0,73.3,106.0,28.2,-6.0,25.1,106.0,106.0,65.9,-6.0,106.0,-6.0,83.9,46.9,57.2,75.0,52.4,70.4,-6.0,-6.0,76.5,-6.0,48.6,17.1,38.4,106.0,45.3,67.4,-6.0,36.9,36.9,91.7,27.5,19.7,106.0,40.6,39.9,95.9,57.2,75.6,106.0,96.8,52.6,19.7,71.2,58.0,-6.0,106.0,106.0,-6.0,29.6,36.4,-6.0,106.0,-6.0,48.3,57.8,106.0,106.0,32.9,55.6,19.4,106.0,63.0,19.7,50.7,106.0,63.2,-6.0,69.9,106.0,-6.0,106.0,38.6,64.3,45.0,106.0,106.0,106.0,44.4,59.3,74.7,106.0,17.1,106.0,84.5,41.2,-6.0,106.0,19.7,61.4,106.0,27.2,77.9,-6.0,52.6,63.1,43.9,63.1,43.7,106.0,59.0,106.0,47.6,9.6,17.1,57.8,55.9,51.9,-6.0,77.9,18.1,77.1,6.3,36.9,-6.0,106.0,106.0,36.9,106.0,88.3,74.7,57.8,46.1,62.9,106.0,106.0,36.9,19.7,106.0,106.0,76.2,-6.0,106.0,62.8,48.1,46.2,51.3,106.0,19.7,58.5,41.6,106.0,63.8,25.6,100.0,91.7,73.4,68.0,106.0,44.8,-6.0,19.7,19.7,19.7,106.0,-6.0,-6.0,-6.0,-6.0,106.0,27.9,19.7,25.8,19.7,58.3,19.7,106.0,106.0,50.6,73.9,47.9,-6.0,59.2,36.9,40.0,46.2,-6.0,75.6,54.6,106.0,19.7,19.7,106.0,69.9,71.7,59.7,17.1,56.0,58.1,34.5,55.7,19.7,-6.0,106.0,40.8,57.4,-6.0,50.7,106.0,-6.0,66.2,49.1,100.0,58.3,24.9,106.0,19.7,89.8,-6.0,34.5,106.0,54.6,-6.0,106.0,-6.0,106.0,36.9,77.2,24.0,52.4,36.9,63.6,57.6,106.0,19.7,106.0,36.9,62.1,63.0,15.5,-6.0,51.0,19.7,19.7,106.0,-6.0,47.9,63.7,54.8,32.9,52.6,106.0,106.0,106.0,35.5,52.4,106.0,46.2,106.0,106.0,46.2,57.8,17.1,-6.0,106.0,42.2,-6.0,19.7,106.0,-6.0,106.0,62.5,40.4,106.0,106.0,45.6,106.0,106.0,37.0,63.4,35.7,23.2,46.2,106.0,64.9,63.1,59.9,46.0,36.9,49.2,21.8,58.0,57.3,36.8,35.2,19.7,74.2,77.9,7.3,106.0,63.0,60.1,36.9,65.3,-6.0,48.3,106.0,106.0,-6.0,63.0,62.6,44.6,34.9,106.0,59.5,44.8,25.3,62.0,44.3,44.1,106.0,-6.0,57.2,-6.0,57.6,6.1,58.3,76.2,106.0,-6.0,-6.0,75.6,89.7,76.5,44.2,-6.0,-6.0,63.1,69.3,106.0,100.0,106.0,106.0,106.0,-6.0,7.6,23.0,29.8,67.3,46.2,58.7,33.9,19.7,19.7,17.1,-6.0,-6.0,106.0,44.7,62.0,63.8,19.7,42.0,67.0,106.0,-6.0,49.2,21.6,106.0,47.2,39.3,106.0,37.0,17.1,57.4,49.8,17.9,106.0,106.0,106.0,56.3,42.0,55.9,56.9,106.0,19.7,72.5,106.0,63.1,-6.0,38.8,106.0,43.6,106.0,58.5,17.1,17.1,41.4,43.2,70.1,40.5,19.7,19.7,106.0,41.8,106.0,33.3,-6.0,106.0,106.0,57.8,30.5,8.1,106.0,-6.0,36.2,13.3,36.9,52.6,36.1,106.0,48.2,-6.0,73.5,61.7,57.3,-6.0,19.7,106.0,106.0,32.9,19.7,106.0,106.0,19.7,17.1,106.0,67.4,106.0,84.5,106.0,106.0,65.2,33.7,5.3,19.7,76.2,106.0,19.7,77.2,58.0,19.7,106.0,66.1,63.0,40.1,-6.0,106.0,106.0,-6.0,80.8,-6.0,-6.0,19.7,106.0,29.8,19.7,49.6,-6.0,71.5,19.7,75.6,106.0,17.1,44.3,57.6,26.0,106.0,63.1,57.8,106.0,-6.0,106.0,67.6,58.0,68.2,31.2,52.6,-6.0,19.7,56.4,17.1,106.0,5.3,-6.0,17.1,-6.0,67.1,15.1,106.0,106.0,19.7,86.4,18.6,-6.0,106.0,66.0,43.5,33.9,64.3,106.0,63.4,41.2,75.0,56.3,106.0,100.0,58.6,61.3,17.1,-6.0,32.1,63.4,52.8,73.6,106.0,61.5,57.8,106.0,-6.0,47.2,3.4,12.5,19.7,57.8,-6.0,36.9,-6.0,19.7,63.0,-6.0,106.0,-6.0,106.0,66.7,31.9,106.0,36.1,68.6,106.0,100.0,106.0,106.0,-6.0,33.2,18.4,66.3,71.9,106.0,19.7,-6.0,48.8,85.7,106.0,33.9,8.3,46.9,106.0,-6.0,-6.0,66.2,106.0,25.8,63.0,57.7,77.2,57.8,0.0,-6.0,39.3,106.0,106.0,63.7,57.7,106.0,-6.0,106.0,57.5,58.4,106.0,51.9,32.7,57.7,106.0,19.7,-6.0,-6.0,32.9,106.0,79.5,-6.0,68.7,106.0,106.0,57.0,100.0,46.2,58.0,58.1,106.0,19.7,106.0,46.2,106.0,106.0,19.7,57.8,57.8,47.5,44.8,19.7,19.7,-6.0,34.8,106.0,46.2,106.0,106.0,18.9,106.0,46.2,66.6,-6.0,106.0,57.4,17.1,51.1,61.7,106.0,-6.0,106.0,106.0,63.0,75.6,106.0,40.4,-6.0,106.0,106.0,-6.0,75.0,28.7,37.0,106.0,106.0,-6.0,106.0,59.2,20.5,29.1,19.7,56.8,106.0,48.6,54.3,-6.0,19.7,53.7,106.0,106.0,-6.0,106.0,19.7,17.1,-6.0,49.3,106.0,66.5,106.0,-6.0,43.1,-6.0,69.3,-6.0,106.0,106.0,54.8,19.7,9.6,57.8,-6.0,106.0,106.0,106.0,32.1,19.7,67.0,106.0,16.9,64.1,46.5,36.9,46.5,68.8,106.0,106.0,19.7,106.0,56.9,52.6,52.6,59.5,19.7,-6.0,106.0,31.4,106.0,58.2,106.0,106.0,57.8,48.8,51.4,75.6,75.1,36.9,106.0,22.1,106.0,106.0,57.7,-6.0,-6.0,-6.0,59.4,-6.0,106.0,19.7,-6.0,19.7,47.2,29.6,41.2,-6.0,-6.0,46.7,43.0,67.0,42.2,106.0,106.0,-6.0,106.0,54.9,106.0,-6.0,5.1,52.2,58.6,63.4,37.7,36.9,19.7,46.2,37.3,106.0,37.0,106.0,-6.0,61.6,106.0,106.0,74.0,33.5,85.7,19.7,-6.0,54.0,58.0,-6.0,106.0,-6.0,38.5,106.0,19.7,67.0,106.0,106.0,93.4,106.0,35.4,106.0,106.0,-6.0,40.4,19.7,-6.0,50.7,51.0,43.7,41.2,106.0,45.4,-6.0,50.4,106.0,57.8,19.7,58.5,66.9,106.0,19.7,106.0,106.0,73.6,-6.0,55.2,37.9,106.0,19.7,106.0,43.0,-6.0,56.1,19.7,106.0,66.7,50.7,106.0,66.7,28.7,32.0,-6.0,106.0,44.4,49.9,19.7,68.2,43.8,96.2,-6.0,44.0,106.0,63.1,41.4,35.5,106.0,106.0,106.0,61.3,53.6,55.7,53.8,63.8,57.7,57.4,52.2,57.1,53.5,54.7,58.8,59.7,59.1,56.6,57.4,51.3,43.1,56.4,52.1,56.8,51.7,55.4,54.5,55.2,49.1,56.0,49.1,56.6,41.6,43.6,64.2,59.1,60.1,62.0,62.7,44.9,51.3,90.3,62.5,57.4,56.3,61.8,76.8,57.1,57.6,106.0,56.4,52.0,62.0,57.7,59.3,61.0,50.8,49.8,55.6,53.2,52.6,52.9,52.8,60.3,66.7,51.7,50.1,61.0,55.2,55.2,57.2,60.2,50.7,65.0,63.3,54.6,55.7,58.6,56.0,51.3,59.8,47.4,59.9,58.1,47.0,56.8,52.5,59.1,41.6,56.4,47.5,59.2,58.4,58.5,49.0,49.8,50.6,57.9,56.8,51.8,44.0,59.2,54.2,54.0,53.1,62.8,51.9,46.7,59.3,58.3,56.9,41.9,52.9,40.7,54.5,46.7,55.1,52.0,52.6,52.7,53.2,47.6,56.5,51.2,51.3,54.6,51.1,62.5,54.3,51.4,56.5,77.9,65.8,56.5,45.9,58.8,63.0,54.7,52.5,50.6,55.9,56.8,58.0,57.2,50.4,45.7,49.3,58.3,59.9,51.7,61.7,51.5,53.2,59.0,58.8,51.3,53.3,55.2,59.4,55.3,54.6,55.4,51.8,55.1,59.3,51.5,55.6,56.6,53.6,55.4,60.1,68.4,56.6,47.9,58.9,56.0,53.2,56.6,51.3,55.3,59.9,50.7,53.5,60.4,54.7,51.7,106.0,45.6,57.7,60.4,44.5,55.6,56.9,45.5,56.1,54.9,54.7,53.4,59.6,59.6,58.8,54.9,57.6,54.7,61.0,54.2,57.9,52.8,47.5,55.6,55.1,52.3,60.9,49.0,53.0,54.1,57.5,40.0,70.6,52.7,58.1,55.0,55.4,53.8,53.1,57.6,53.8,60.8,51.7,53.2,55.0,57.6,56.2,53.6,54.2,59.3,53.1,58.7,59.1,83.3,57.4,57.6,52.1,64.6,65.4,60.8,56.9,50.1,51.6,59.9,54.8,56.1,54.5,56.7,55.6,61.6,53.7,52.9,52.8,50.2,60.1,61.1,56.9,47.8,48.5,52.8,55.7,56.4,57.3,47.9,52.2,49.5,58.1,106.0,54.1,47.5,59.5,51.4,49.2,57.3,58.7,56.9,57.1,56.7,60.6,53.9,56.0,57.2,56.8,58.8,50.0,43.4,56.9,55.1,51.9,58.9,42.4,62.8,90.9,55.0,57.2,57.1,52.0,52.5,56.7,52.6,56.9,51.4,61.3,56.2,60.5,47.5,56.9,56.6,53.2,52.6,54.5,58.9,51.4,50.7,60.7,57.9,60.3,60.6,59.6,61.4,51.8,51.7,58.3,81.2,51.4,58.7,56.3,49.3,57.7,52.7,51.4,52.3,51.7,56.6,53.6,58.3,38.5,55.7,52.8,61.8,76.5,59.2,55.5,56.8,46.1,55.8,53.3,57.8,56.0,39.9,57.5,52.7,53.2,57.4,61.0,52.3,54.5,55.3,44.8,62.4,59.3,72.4,59.5,56.8,59.1,50.9,49.9,58.2,48.9,54.1,57.5,49.0,54.5,58.7,57.4,44.8,43.9,50.2,57.8,57.4,62.0,58.2,60.8,58.8,57.0,49.4,59.0,58.4,51.4,47.7,55.3,56.6,54.1,57.5,55.8,54.3,43.1,57.6,60.7,63.3,53.8,53.4,57.2,53.2,53.2,60.8,54.3,59.5,59.6,54.1,58.5,61.3,52.3,58.4,54.1,56.7,106.0,53.4,58.0,57.6,57.4,61.6,45.8,61.5,54.6,45.0,62.4,106.0,54.8,60.8,60.5,89.2,53.5,56.0,56.9,55.7,48.4,47.2,52.4,53.3,55.1,58.5,58.6,57.7,58.8,51.2,54.7,48.8,43.5,78.4,54.2,37.6,46.4,58.4,51.8,55.7,49.0,56.3,59.1,44.1,54.6,73.1,59.1,58.8,53.2,56.0,55.0,54.5,55.4,52.8,60.0,53.2,41.6,81.2,56.9,58.7,60.4,53.9,58.0,59.9,41.2,59.0,53.4,50.6,55.0,51.6,55.6,58.6,43.9,59.4,47.7,55.0,62.5,59.1,60.5,51.7,65.3,60.1,89.2,49.9,51.1,43.7,59.1,47.5,55.8,59.6,48.8,59.1,51.2,56.9,43.0,60.7,55.0,57.1,55.5,56.2,53.1,58.8,58.2,42.9,53.3,52.2,50.3,59.2,62.5,57.7,56.5,55.6,58.0,59.2,57.4,47.1,56.9,46.2,47.7,58.0,56.7,55.8,56.0,60.3,51.1,55.3,58.2,59.9,57.0,55.8,54.8,58.7,51.1,52.2,61.0,55.1,66.7,60.2,57.4,45.2,55.5,56.1,53.6,57.1,55.8,58.5,59.5,55.5,51.8,47.8,58.9,53.6,62.2,59.8,53.9,59.0,59.3,52.8,76.5,52.0,52.3,51.3,56.9,53.6,56.3,50.6,55.8,76.5,56.7,53.4,56.9,53.5,52.5,58.6,57.4,53.1,52.0,58.0,77.9,56.5,54.6],"r":["00000000000000","fbfbfbfbdbdbfb","00000000000000","ffffffffffffff","f3f3f3f3d3dbf3","fbfbfbfbdbfbfb","00000000000000","fffffffffff7c2","00000000000000","00000000000000","00000000008000","bbfbfbf3fbfbf3","00000000000000","f3f3f3f3f3f3f7","00000000000000","92929292929012","00000000000000","ffffffffffffff","12121212929292","00000000000000","f3f3f3f3d3dbf3","dddd5ddddddf1d","fbfbfbfbdbdbfb","00000000000000","ffffffffffffff","00000000000000","fbfbfbfbdbdbfb","ffffffffffffff","ffffffffffffff","fbfbfbfbdbdbfb","ffffffffffffff","d3d3d3f3f3f3d3","00000000000000","fbfbf3c2820000","f3f3f3f7f3d2db","fffbdbf7f30200","f3f3f3f3f3f3f3","d0d0d0d0c0c0c2","03030303030203","f3f3f3f3d3dbf3","d1d1d1d1d0d0d0","00000000000000","00000000000000","92929292828202","00000000000000","00000000000000","00000000000000","dffffffbd3d302","ffffffdfcb8200","92929292121212","92929292121a02","00000000000000","02020202020302","d2d2d2d2d25212","92929292929212","ffffffffffffff","11111111109210","fffffffbc2c200","fffffff3db8200","00000000000000","00000000000000","ffffffffffffff","00000000000000","fbfbfbfbdbdbfb","f2f2f2f2f2b2f2","93939393c39383","92929292d0d090","90909090800000","d1d1d1d1d3d1d3","92929292929212","fffffffffff7c1","fbfffff3d38200","ffffffffe30000","ffffffffffffff","00000000000000","92929292929212","ffffffd3c20000","d2d2d296d65250","d2d2d2d2d2d2d2","fbfbfbdbc20000","fffffffbd38300","fbfbfbfbdbdbfb","ffffdfffffffde","90909090909092","d2d2d2d252d2d2","00000000000000","82828282d280c2","fbfbfbd3930000","f3f3f3f3f3d2c2","fbfbfbfbdbdbfb","82828282829282","00000000000000","00000000000000","fffffffff7d393","fbfbfbfbdbfbfb","00000000000000","00000000000000","00000000000000","d3d3d3d3d3d3d3","ffffffffffffff","fffffffbffd382","fbfbfbfbdbfbfb","ffffffffffffff","fffffffbff8200","f3f3f3f3f2f3f7","fbfbfbfbdbdbfb","d3d3d3d3d3d3d3","00000000000000","00000000000000","fbfffffbd38200","fffffffffff380","00000000000000","fbfffffbd39300","5050505040d2d2","939393939292d2","c0c0c0c0c0c0c0","fbfbfbfbdbfbfb","d3d3d3d3d3d3d3","fffffff3820000","d2d2d2d2dad2da","00000000000000","fbfbfbfbdbdbfb","d2d2d2d292d2c2","00000000000000","f3f3f3f3d3dbf3","ffffffffffffff","fffffff7f7d300","ffffffffffffff","fbfbfbfbdbdbfb","00000000000000","d3d1d3f1f3f1c3","00000000000002","d3d3d3d3d3d2d2","90909090909292","00000000000000","d2d2d2d2d25252","d2d2d2d2929292","ffffffffffffff","ffffffffffffff","53535353d2f3d3","ffffffffffffff","fffffffbdbca00","00000000000000","9292929292d292","00000000000000","d2d2d2d2d2d2d2","ffffffffffffff","00000000000000","fbfbfbfbdbfbfb","82929292928282","12121212121212","fbffffffffdfc2","00000000000000","00000000000000","d2d2d2d2d2d2d2","fbfbfbfbdbdbfb","9292929292d212","ffffffffffd3c1","00000000000000","dbdbdbdbdbfbf3","10101010100010","00000000000000","9bdfdfffffffff","d3d3d3d3d3d3d3","00000000000000","fbfbfbfbdbdbfb","d2d2d2d2d2d2d2","00808080800000","f3f3f3f3d3dbf3","fffffbdbc20000","f3f3f3f3f3f3f3","fbfbfbfbdbdbfb","00000000000000","ffffffffffffff","f3f3f3f3f3d2d2","ffffffffffffff","00000000000000","00000000000000","02020202820282","fbfbfbfbdbfbfb","fbffdbf3d30000","ffffffffffffff","dbdbdbdbd3d3d3","ffffffffffffff","fffffffbffd300","92929292929292","10101010504042","ffffffffffffff","00000000000000","92929292929292","80800080000000","00000000000000","00000000000000","ffffffffffffff","00000000000000","ffffffffffffff","00000000000000","92929292d2d292","ffffffffffffff","fbfffffffbdb82","00000000000000","00000000000000","00000000000000","fbfffffbfad700","92929292129210","fbfbfbfbdbdbfb","ffffffffffffff","ffffffffffffff","00000000000000","d2d2d2d2d2d2d2","00000000000000","ffffffffffffff","d2d2d2d2d2f2d2","d2d2d2d290d082","92929292929282","00000000000000","00000000000000","00000000000000","00000000000000","00000000000000","ffffffffffc382","00000000000000","d2d2d2d2d2d2d2","ffffffffffffff","96969696b2ded8","10101010120002","02020202020202","ffffffffffffff","d7d7d7d7f6f7f3","dadadadadadad2","fbfbfbfbdbdbfb","fffffffbf3d280","00000000000000","d3d3d3d3d2929a","fbfbfbfbdbdbfb","fffffffffff7d7","fffffffffffbd3","fbfbfbfbdbdbfb","d9d9d9d9d9dd99","fbfbfbfbdbdbfb","d2d2d2d2d2d2d2","fbfff3f3c30000","ffffffffffffff","fffffff3db8000","f3f3f3f3d3dbf3","fbfbfbfbdbdbfb","02020202020002","fffbfbfbd38200","ffffffffffffff","ffffffd3c7c200","d3d3d3d392d2d2","52525252929a12","92929292929212","dbdbdbdbfbfbf3","d2d2d2d2d2d2d2","fafafafaf2b292","f7f7ffd3d38200","00000000000000","00000000000000","00000000000000","90909090908080","fffffff7d38200","dbdbdbdbdbfbf3","00000000000000","ffffffffffffff","fbfbfbfbdbdbfb","00000000001000","fbfbfbfbdbdbfb","12121212121212","00000000000000","00000000000000","d3d3d3f3d7f3d7","90909090121002","ffffffffffffff","d2d2d2d250dad2","80808080c08080","00000000821000","c0c0d0c1c080c1","ffffffffffffff","fbfbfbfbdbdbfb","12121212121212","00000000000000","00000000000000","fbfbfbfbdbdbfb","d2d2d2d2d29292","fbfffff3d38200","ffffffffffd3d3","ffffffffffffff","00000000000000","ffffffffffffff","fbfbfbfbdbdbfb","52525252d0d0d0","82828282901290","00000000000000","d2d2d2d2f2d2d2","f3f3f3f3d3dbf3","d3d3d3d3d3d3d3","00000000000000","d2d2d2d2d29292","00100000000000","f3f3f3f3d3dbf3","00000000000000","00000000000000","fbfbfbfbdbdbfb","ffdff7fbd39200","ffffffffffffff","80808080900000","ffffffffffffff","12121212908202","fbfbfbfbdbdbfb","fffffffbd3f302","d3d3d3d3d3d3d7","00000000000000","00000000000000","00000000000000","d2d2d2d2929292","ffffffffffffff","ffffffffffffff","fffffff7ffd3c3","ffffffffffffff","ffffffffffffff","fbfbfbfbd38200","f7f7f7f7f7d7d2","d2d2d2d2929292","dbdbdbdbfbfbf3","90909090c04000","00000000000000","909090909890d0","fbfbfbfbdbdbfb","fbfbfbfbdbfbfb","dfdfffdfdffff3","92929292129212","ffffffffffdbd3","f3f3f3d2f2d292","12121212121010","00000000000000","00000000000000","ffffffffffffff","101010109010c0","fbfbfbfbf7ffd3","fff3f3d3820000","dffbd3c3000000","00000000000000","92929292929292","80808080d04080","d2d2d2d2929292","f7f7f7f7fff7f7","dbdbdbdbdbfbf3","fffffffff7d3d2","00000000000000","00000000000000","00000000000000","fbfbfbfbdbfbfb","00000000000000","00000000000000","dbdbdbdbfbfbf3","00000000000000","d2d2d2d21212d2","fbdbdbd3820000","ffffffffd3d300","d2d2d2d2d2d2d2","00000000000000","92929292929252","00000000000000","93939393125212","f3f3f3f3f3d382","d0d0d0d0d0d0d0","ded2d140000000","ffffffffffffff","90909090928300","fbfbfbfbdbdbfb","fbfffffbd38300","d2d2d2d2d2d2d2","f3f3f3f3d3dbf3","92929292929292","00000000000200","00000000000000","00000000000000","f7f7f7f7f7f7f7","03030303830203","ffffffffffdff3","f2f2f2f2f2f2f2","d3d3d3d3d3d2d2","ffffffd3d3c000","9292929292d292","00000000000000","d3d3d3d3d3dbf3","16161a16161612","dbdbdbdbdbfbf3","d2d2d2d2d09092","929292929292d2","d2d2d2d2d2d212","fffffff7ffdfff","ffffffffffffff","9f9fdfdfffdfd7","d1d1d1d1d1d0d0","fbfbfffbdbc200","fbfbfbfbdbfbfb","ffdffbfbd28000","fbfbfbfbdbdbfb","ffffffffffffff","00000000000000","9292929292d2d2","f3f3f3f3f3f3f2","a0a0a0a09082a0","80808080020200","d3d7d3d7f7f3f3","ffffffffffffff","00000000020000","10101010000000","ffffffffdbc200","92929292129292","00000000000000","92929292129202","00000000000000","00000000000000","fffffffbd38300","00000000000000","ffffffffffffff","ffffffffffffff","00000000000000","92929292929282","00000000000000","dfffffffd39200","00000000000000","ddddddddcbcf88","d2d2d2d2d2d2d2","00000000000000","00000000000000","d0d0d0d0d090d0","fbfbf3d3820000","ffffffffffffff","fbfbfbfbdbdbfb","00000000000000","9292d2d2d2d2d2","00000000000000","d3d3d3d3d3d3d3","d3d3d3d3d3d3d3","d1d1d1d1d1d1d3","00000000000000","ffffffffffffff","00000000000000","f7f7f7f3ffd282","fbfbfbfbdbdbfb","53535353d2f3d3","fbfbfbfbdbdbfb","fbfbfbfbdbdbfb","ffffffffffffff","ffffffffffffff","00000000000000","00000000000000","ffffffffffffff","00000000000000","00000000000000","00000000000000","ffffffffffffff","00000000000000","d3d3d3d3d3d3d3","ffffffffffffff","00000000000000","fbfbfbfbf3c200","08080808080000","fbfbfbfbdbdbfb","d3d3d3d3d3d3f3","00000000000000","92929292921292","d3d3d3d3d3d3d1","ffffffffffffff","d3d3d3d3d3f2d2","02020202020000","53535353d2f3d3","ffdffffbd30200","ffffffffffffff","12121212121092","12121212121212","00000000000000","f3f3f3f3d3dbf3","ffffffffffffff","fbfbfbfbdbdbfb","00000000000000","d3d3d3d3d3dbf3","02020202020202","00000000000000","00000000000000","00000000000000","ffffffffffffff","fffffffffbdbc2","fffffffff7d782","00000000000000","83838383938393","00000000109080","00000000000000","02020202020202","00000000000000","ffffffffffffff","d3d3d3d3d3d3d3","92929292929292","00000000000000","00000000008040","00000000000000","00000000000000","00000000000000","d2d2d2d2d2d2c2","10109292d2d2d3","fbfbfbfbdbdbfb","00000000000000","00000000000000","00000000000000","00000000000000","ffffffffffffff","00000000000000","fffffffbfbc302","ffffffffffffff","d2d2d2d2d2d2d2","12121212121202","ffffffffffffff","00000000000000","ffffffffffffff","92929292929212","00000000000002","fffffffbf38200","ffffffffffffff","ffffffffffffff","00000000000000","d2d2d2d292d212","dfffffffffffff","ffffffffffdf82","fffffffbfbd300","d0d0d0d0d0d0d2","00000000000000","ffffffffffd782","00000000000000","808080809090d2","ffffffffffffff","92929292d2d292","fbfbfbfbdbfbfb","fbfbfff3d38300","fffffffffff7f2","fffffffffb9300","d2d2d2d2d2d2d2","12121212121202","fffffffbdaca02","9090909082c082","00000000000002","92929292129212","dffffff7f7c300","92929292929212","ffffffffffffff","00000000000000","00000000000000","fbfbfbfbdbfbfb","f3f3f3f3d3dbf3","00000000000000","fffffffffff3d3","f3f3f3f3d3dbf3","00000000000000","12121212921212","fbfbfbfbdbdbfb","fffffffff2f300","fffffffbdbc380","12121212929292","dbdbdbdbdbfbf3","93d3dbfbfbfbff","dbdbdbdbdad3d3","9090909092c0d2","82828282c28282","ffffffffffffff","d3d3d3d3d3d3d3","ffffffffffffff","d2d2d2d29a9ada","00000000000000","91919191901090","fbfbfbfbdbdbfb","00000000000000","00000000000000","d2d2d2d2d2d2d2","dff3f3c3820000","0202020280c280","00000000000000","fbfbfbfbdbdbfb","92929292929292","80808080000000","ffffffffffffff","92929292901210","00000000000000","d3d3d3d3d3dbf3","d3d3d3d3d3d3d3","f3f3f3f7f3f392","90909090000003","00000000000000","52525252c2c282","00000000000000","00000000000000","00000000000000","fbdbffd3c30000","ffffffffffffff","92929292921212","f3f3f3f3d3d393","d3d3d3d3d2d2d2","f3f3f3f3d3dbf3","00000000000000","d3d3d3d3d2f3d3","00000000000000","53535353521212","00000000908000","92929292929212","00000000000000","ffffffffffffff","d2d2d2d2129292","ffffffffffffff","f7f7f7f7f3f3f3","f3f3f3f3f7d7d3","fbfbfbfbdbfbfb","fbfffffbdb8200","ffffffffffffff","ffffffffffffff","00000000000000","d3d3d3d3d3d3d3","92929292121282","fbfffffbd20000","80808080909080","12121212121210","fffffffffdc182","00000000000000","ffffffffffffff","fbfbfbfbdbfbfb","92929292929292","00000000000000","10101010001012","ffffffffffffd7","d2d2d2d2d3d2d3","10101010505283","93979fdfffffff","dddddddddddd9d","fffffff3d38200","f3f3f3f3d3dbf3","ffffffffffffff","00000000000000","00000000000000","fffffffff3f382","d3d3d3d3d3dbf3","00000000000000","00000000000000","f3f3f3f3d3dbf3","00000000000000","979f9fbfffffff","00000000000000","f3f3f3f3d3dbf3","00000000000000","00000000808000","fbfffffbd38200","00000000000000","10101010008200","92929292129212","92929292929212","d2d2d2d2829282","ffffffffffffff","ffffffdfffdfd2","fbfbfbfbdbdbfb","00000000000000","00000000000000","92929292929292","c2c2c2c2d24202","fbfbfbfbdbdbfb","00000000000000","d1d1d1d1d2d2d2","00000000000000","12121212121212","fffbfbd3d30200","80808080921202","d3d3d3d2828200","00000000000000","fffbfffff7ffc3","ffffffd7db8200","00000000000000","00000000000000","00000000000000","00000000000000","00000000000000","00000000020200","00000000000000","ffffffffffffff","f3f3f3f3fbf3f3","ffffffffffffff","fffbfbdbc20000","ffffffffffffff","d3d3d3d3d3d3d3","ffffffffffffff","ffffffffffffff","00000000000000","fbfbfbfbdbdbfb","ffffffffffffff","00000000000000","ffffffffffffff","fbfbfbfbdbdbfb","fffffff7ffd781","fbfbfbfbdbdbfb","d2d2d2d2929292","10101010000000","dfdfdfdfdfd1d3","d2d2d2d2d2c2d6","d3d3d3d3dbdbd1","fffbfbd3c28000","00000000000000","fbfbfbfbdbfbfb","d2d2d2d2d2d2c2","53535353d2f3d3","ffffffffffffff","00000000000000","12121212529282","fffbfbdbca8200","fbfbfbfbdbdbfb","ffffffffffffff","000000000040c0","00000000008010","8080808090c2c0","00000000000000","02020202020202","fbfbf3db820000","d3d3d3d3d3dbf3","00000000000000","ffffffffffffff","80808080000000","d3d3d3d3d3d3d3","d3d3d3d3d3dbf3","dfffffffffffd3","00000000000000","ffffffffffffff","00000000000000","d3d3d3d3d1d2d2","00000000000000","ffffffffffffff","ffffffffffffff","ffffffffffd382","dbfbdbf3820000","fffbffd3820000","fffbdbd3c20000","ffffffffffffff","fbfbfbfbdbdbfb","00000000000000","f7f7f7f7f7f7f7","f3f3f3f3f7d3ff","fffffbfbd38200","fbfbfbfbdbdbfb","ffffffffffffff","fffff7f3d3f302","02020202020202","00000000000000","93939393d38392","ffffffffffdbc3","fffffffffff7d3","00000000000000","ffffffffffffff","53535353d2f3d3","fbfbfbfbdbdbfb","ffffffffffffff","fffbfbdbd38200","00000000000000","00000000000002","fbfbfbfbdbdbfb","ffffffffffffff","ffffffffffffff","00000000000000","bffff7fff7f7f7","ffffffffffdfc2","fbfbfbfbdbdbfb","fffffffbffd3c2","f3f3f3f3f3b3f3","fbfbfbfbdbdbfb","00000000000000","d3d3d3d3d3d2d3","00000000000000","ffffffffffffff","00000000000000","dadadadadada82","00000000000000","ffffffffffffff","ffffffffffffff","00000000000000","10101010109010","ffdfdfd7dac080","fbfff3fed3c200","00000000100000","92929292929282","00000000000000","92929292929292","12121292120000","ffffffffffffff","fffffffffff7c7","ffffffffffffff","dfdfffffffdfdf","10101010c2c092","ffffffffffffff","d2d2d2d2d2d2d2","00000000000080","fbfbfbfbdbdbfb","fbfbfbfbdbdbfb","92929292929212","f3f3f3f3d3d3d2","00000000000000","00000000020002","f3f3f3f3d3dbf3","00000000000000","92929292929292","92929292929292","fffffffbfbd300","fbfbfbfbdbdbfb","00000000808000","fbfbfbfbdbdbfb","ffffffffffffff","00000000000000","fbfbfbfbdbdbfb","80808080808080","d3d3d3d3d2d3d3","fffffffffbd302","fbfbfbfbdbdbfb","00000000000000","dadadadad2c252","d3d3d3d3d3d3d3","93939393929292","ffffffffffffff","fbfffbf3d38300","00000000000000","00000000000000","00000000000000","d3d3d3d3d3d3d3","92929292929292","00000000000000","00000000000000","ffffffffffffff","fbfbfbfbdbdbfb","fbfbfbfbfffbf3","d3d3d3d3d3d3d3","fbfbfbfbdbfbfb","fbfbfbfbdbfbfb","00000000000000","00000000000000","fbfbfbfbdbdbfb","00000000000000","82828282000000","ffffffffffffff","d1d1d1d193d2c0","00000000000000","d2d2d2d2d252c2","80808080008000","00000000000000","00000000000000","00000000000000","ffffffffffffff","ffffffffffdfc2","10101010128210","ffffffffffffff","d3d3d3d3d3d3d3","ffffffffffffff","d3d3d3d3d3d3d3","fbfbfbfbdbdbfb","00000000000000","00000000000000","02005004069000","ffffffffffffff","fbfbfbfbdbfbfb","fbfbfbfbdbdbfb","92929292929292","d3d3d3d3d3d3d3","d3d3d3d3d2d3d3","92929292d09092","00000000000000","02020202000002","ffffffffffffff","fbfbfbfbdbdbfb","00000000000000","00000000000000","92929292929292","00000000000000","d3d3d3d3f3f3f3","00000000000000","ffffffffffffff","fbfbfbfbdbdbfb","dbdbdbdbd7d3d3","92929292929212","d2d2d2d2929a92","00000000000000","d3d3d3d3d29a9a","00000000000000","90909090808080","fbfbfbfbdbdbfb","fbfbfbfbdbfbfb","00000000000000","00000000000000","dbdbdbdbdbfbf3","fffffffbfff7d3","d2d2d2d2d2d2d0","00000000000000","10101010d00000","ffffdfd3d3c200","10101010d09090","00000000000000","ffffffffffffff","00000000000000","ffffffffffffff","00000000000000","92929292929292","ffffffffffffff","fffffffffffff7","ffffffffffffff","d3d3d3d3d3d3f3","fffbfbd3820000","f2f2f2f2f2f2f2","00000000000000","fbffdbd3c20000","02020202020202","ffffffffffffff","00000000000000","d2d2d2d2d25212","fbfbfbfbdbdbfb","ffffffffffffff","ffffffffffffff","d0d0d0d0d0d0c0","fbfbfbfbdbdbfb","fffffffffbffd3","92929292d39282","00000000000000","fbfbfbfbdbdbfb","d2d2d2d292d2c2","00000000000000","fffffffbd38300","dbdbdbdbdbfbf3","00000000000000","ffffffffffffff","ffffffffffffff","00000000000000","ffffffffffffc7","fbfbfbfbdbdbfb","fbfbfbfbdbdbfb","00000000000000","00000000020002","00000000000000","fbfbfbfbdbdbfb","d3d3d3d3d3d3d3","00000000000000","dbdbdbdbdbfbf3","00000000000000","91919191d00082","d8d8d8d8d29082","92929292d3d3d2","d3d3d3d3d2d3d2","00000000009000","50505050501000","ffd3dbd3c20000","dfdfdffff3f3f3","00000000000000","02020200000000","d0d0d0d0d0d0d0","d2d2d2d2d2d2d2","12121212921212","d3d3d3d3d2d1d1","ffffffffffffff","00000000000000","f2f2f2f2f2f2f2","00000000000000","00000000000000","fbfffffbd7c200","00000000000000","fbfbfbfbdbdbfb","d1d1d1d1d0d0d2","fbfbfbfbdbdbfb","00000000000000","d3d3d3d3d3d3d3","fbfffffbdbd300","d2d2d2d2929292","d3d3d3d3d3dbf3","d3d3d3d3d2f2d2","00000000020082","00000000000000","00000000000000","00000000000000","ffffffffffffff","00000000000000","00000000000000","00000000000000","00000000000000","fbfbfbfbdbfbfb","92929292921212","fffffffffff7c7","fbfbfbfbdbdbfb","ffffffffffffff","ffffffffffffff","00000000000000","ffffffffffffff","00000000000000","ffffffffffffff","fffffffff7f302","ffffffffffc300","00000000000000","fbfbfbd3820000","00000000000000","82828282028282","dbdbd291820000","ffffffffffffff","f6f6f6f6f6f2f6","ffffffffffffff","fffff3d3830000","d2d2d2d2d2d2d2","00000000000000","fffffffff7d7d3","c040c0c0008000","00000000000000","00000000000000","d3d3d3d3d3d3d2","8080808080d280","fffffffbfbd382","d2d2d2d2d09290","fbfbfbfbdbdbfb","d3d3d3d3d3d2d2","12121212020202","d2d2d2d2d282d2","00000000000000","dbffdfd2c20200","fffffffbf3f382","f3f3f3f3d3dbf3","5151515192d252","fbfbfbfbdbdbfb","d5dddddddddd9d","ffffffffffffff","fffbfbd3820000","00000000000000","00000000000000","fbf3d3db820000","92929292121292","f3f3f3f3f2f2f2","ffffffffffffff","00000000000000","80808080828082","00000000000000","dffbffd3c20000","fbfbfbd3c20000","fffbfbd3830000","00000000000000","d2d2d2d2d2d2d2","d3d3d3d3d2d212","fbfbfbfbdbdbfb","00000000000000","02020202020202","02020202020202","00000000000000","00000000000000","fffffffff7c380","fbfffffbd30200","dffffffbd3d200","fbfbfbfbdbdbfb","00000000000000","fbfbfbfbd30200","d3d3d3d3e3c382","f2f2f2f2d2f2d2","ffffffffffffff","ffffffffffffff","ffffffffffffff","11111111115010","00000000000000","92929292929292","ffffffffffffff","00000000000000","ffffffffffffff","00000000000000","ffffffffffffff","ffffffffffffd7","00000000000000","12121212101000","d3d3d3d3fbf3f3","d2d2d2d2d29202","d0d0d0d050d1d2","dffffffbd30000","f3f3f3f3f2f2d3","f2f2f2f2f2f2f2","dbffffffffffd7","fbfffbdbc20000","f3f7f3f3d28200","fffffffffffff3","00000000000000","00000000000000","fbfbfbfbdbdbfb","00000000000000","00000000000000","dbdfd3c3800000","fffffffbf30200","10101010420002","12121212921292","90909090908090","00000000000000","fbfbfbfbdbdbfb","ffdfdfebd38000","f2f2f2f2f2d2f2","12121212921202","00000000000000","d3d3d3d3d2d0d2","ffffffffffffff","fffffffff7c100","ffffffffffffff","ffffffffffffff","fbfbf3f3820000","dbdbdbdbfbfbf3","fbfbfbfbdbdbfb","ffffffdbc20000","fffffbffd3c200","fbfbfbfbdbdbfb","fbfbfbfbdbfbfb","00000000000000","ffffffffffffff","fbfbfbfbdbdbfb","ffffffffffffff","d2d2d2d2929212","fbfbfbfbdbdbfb","00000000000000","ffffffffffffff","ffffffffffffff","00000000000000","00000002000000","ffffffffffdbc2","ffffffffffffff","dbdbdbdbfbfbf3","00000000000000","ffffffffffffff","fbfbfbfbdbdbfb","92929292121212","ffffffffffffff","dfdfdfdfdff3f3","10101010109000","d3d3d3d3d3d3d3","ffffffffffffff","ffffffffffd7c3","12121212929292","d3d3d3d3d3d3d3","00000000000000","00000000000000","00000000000000","53535353d2f3d3","82828282938200","fbfbfbfbdbfbfb","00000000000000","00000000000000","fffffffbfbf302","d2d2d2d2d2d3d3","d3d3d3d3d29292","ffffffffffffff","00000000000000","fffffbfbf30200","00000000000000","ffffffffffffff","fbfbfbfbdbdbfb","d2d2d2d2d29290","82828282828292","d3d3d3d2f3d3f2","ffdffffbd3c200","f3f3f3f3f3f3f3","00000000000000","ffffdfeb820000","d2d2d2d2d2d2d2","00000000000000","f3f3f3f3f3f3f2","00000000000000","fbfbfbfbdbdbfb","00000000000000","00000000000000","d3d3d3d3d3d3d3","fbfffffbf3c300","fbfbfbfbdbfbfb","fffffffbdbc200","00000000000000","12121212121012","00000000000000","dbdbdbdbfbfbf3","ffffffffffffff","fbfbfbfbdbfbfb","ffffffffffffff","92929292929292","92929292929292","f3f3f3f3d3dbf3","92929292d29282","00000000000000","fffffffbd38200","0000000050d010","d7d7d7d7d7f3d7","dbdbdbdbfbfbf3","ffdfdfdffed200","ffffffffffffff","ffffffffffffff","fbfbfbfbdbdbfb","ffffffffffffff","fffffbf3c38000","fffffffbdbd300","d1d1d1d1d3d1d3","d2d2d2d2525242","ffffffffffffff","ffffffffffffff","ffffffffffffff","00000000000000","fbfbfff3d30200","00000000000000","ffffffffffffff","00000000000000","d3d3d3d3dbd7e3","d3d3d3d3d1d1d1","f3f3f3f3d3dbf3","fffffffffffff3","ffffffffffffff","ffffffffffffff","928292d2d2d2d2","fbfbfbfbdbdbfb","00000000000000","02020202000002","00000000000000","00000000000000","d199d9ddd9dd99","00000000000000","fbf3d382020000","fbfbfbfbdbdbfb","50505050101002","00000000000000","ffffffffffffff","fbfbfbfbd38200","fbdbffc2820000","fffffffbdfc200","d2d2d2d2d2d2d2","00000000000000","c0c0c0c090c0c0","fbfbfbfbdbfbfb","ffffffffffffff","fbfbfbfbdbdbfb","00000000000000","00000000000000","92929292929012","fbfbfbfbdbdbfb","c0c0c0c080d0c0","fbfbfbfbdbdbfb","fffffbfbd30200","80808080000000","00000000008080","00000000000000","00000000000000","fbffffffd38200","10101010101000","d2d2d2d2d2dad2","92929292921292","12121212521292","ffffffffffffff","fffffffffffbdb","dadadadadadada","00000000000000","00000000000002","00000000000000","ffffffffffffff","12121212120002","ffffffffffffff","dfffdffbd3c200","00000000000000","12121212121202","00000000000000","d3d3d3d3d3d3d3","00000000000000","fbfbfbfbdbfbfb","00000000000000","ffffffffffffff","ffffffffffffff","dbdbdbdbdbfbf3","00000000000000","fbfbfbfbdbdbfb","fbfffbfbf30200","ffffffffffffff","82828282820200","ffffffffffffff","fbfbfbfbdbdbfb","fbfbfbfbdbdbfb","ffffffffffffff","00000000000000","fbfbfbfbdbdbfb","ffffffffffffff","f3f3f3f3f3f3f3","8c8c8c8c8c0c0c","82828282828202","d3d3d3d3d3d3d1","d2d2d2d2d2d2d2","00000000000000","12121212121202","00000000000000","ffffffffffffff","ffffffffffffff","00000000000000","ffffffffffffff","ffffffffffd382","02020202000002","00000000000000","00000000000000","f3f3f3f3d3d3d2","12121212921202","00000000000000","ffffffffffffff","fff7fbf3c20000","00000000000000","80808080000080","dbdbdbdbdbfbf3","404040405050c2","ffffffffffffff","d2d2d2d2d2d212","ffffffffffffff","02020202009080","00000000000000","f3f3f3f3d2f2d3","00000000000000","ffffffffffd300","00000000000000","ffffffffffffff","dbdbdbdbdbfbf3","fbfbfbfbdbdbfb","ffffffffffffff","f3f3f3f3d3dbf3","fffffffffbf302","f3f3f3f3d3dbf3","f3f3f3f3d3dbf3","ffffffffffffc3","00000000000000","f2f2f2f2f2f3f2","d2d2d2d2d39290","fffffffff7d581","ffffffffffffff","fbfbfbfbdbfbfb","dfffffffd3c200","00000000000000","00000000000000","fffffffbfbc200","fffffffbd3c200","ffffffffffffff","ffffffffffffff","d3d3d3d3d3d3d3","fbfbfbfbdbdbfb","00000000000000","00000000000000","00000000000000","fbfbfbfbdbdbfb","fbfbfbfbdbdbfb","80c0c280828200","ffffffffffffff","10101010908090","00000000000000","00000000000000","f3f3f3f3d3dbf3","fbfff7f7dbd300","dbdffffbd38200","f3f3f3f3d3dbf3","92929292921292","00000000000000","d3d3d3d3d3dbf3","ffffffffffffff","f3f3f3f3f3d380","00000000000000","fffffffffbd7c3","00000000000000","90909090908080","00000000000000","ffffffffffffff","d3d3d3d3d2d3d3","50505050804040","00000000000000","fbfbfbfbdbdbfb","00000000000000","92929292929292","98989898908000","f3f3f3f3d3dbf3","fbfbfbfbdbdbfb","00000000000000","fbfbfbfbdbdbfb","00000000000000","ffffffffffffff","ffffffffffffff","00000000000000","00000000000000","d3d3d3d3d3dbf3","00000000001000","d3d3d3d3929292","ffffffffffffff","d2d2d2d2d292d2","fbfbfbfbdbfbfb","fbfbfbfbdbfbfb","d2d2d2d2929292","d2d2d2d2d2d2d3","90909090929280","d2d2d2d2d2d2d2","fbfbfbfbdbdbfb","00000000808000","ffffffffffffff","00000000000000","dffffffbdb8200","02020202020002","00000000008000","ffffffffffffff","00000000000000","d2d2d2d2d21292","d3d3d3d3d2d2f2","ffffffffffffff","ffffffffffffff","ffffffffffffff","00000000000000","fbfbfbfbdbdbfb","80808080808000","fffffffffffbd2","fbfbfbfbdbdbfb","10101010121212","ffdbdfd3c20000","fbfbfbfbdbfbfb","52525252128282","ffffffffffffff","00000000008002","fffffbf3c30200","00000000000000","00000000000000","d3d3d3d3939292","d2d2d2d2d252d2","00000000100000","00000000000000","fbfbfbfbdbfbfb","d3d3d3d3d3dbf3","f3f3f3f3d3dbf3","00000000000000","f3f3f3f3d3dbf3","00000000000000","00000000000000","00000000000000","fbfbfbfbdbdbfb","ffffffffffffff","ffffffffffffff","d3d3d3d3d3dbf3","00000000000000","ffffffffffdfc3","f7d3d382000000","fbfffffbfff382","00000000000000","fffffbfbdbc300","fbfbfbfbdbdbfb","f3f3f3f3d2d292","ffffffffffffff","fbfbfbfbdbdbfb","dadadadad2d292","82828282c08082","00000000000000","10101010808000","00000000000000","d7d7d7d7d7d7d7","fbfbfbfbdbdbfb","d3d3d3d3d3d3d3","80808080000082","00000000000000","00000000000000","fbfbfbfbdbdbfb","00000000000000","ffffffffffffff","ffffffffffffff","ffffffffffffff","00000000000000","00000000000080","fbfffffbfbd380","ffffffffffffff","92929292929292","00000000000000","90909090909092","d3d3d3d3d3d3d3","d2d2d2d292d292","12121212121212","fbfff7f3d30200","00000000000000","fffffffff3db00","ffffffffffffff","00000000000000","fffffff7d38200","dfdbdbfbd20000","d2d2d2d2d2d2d2","ffffffdfc30200","d0d0d0d0501a10","d3d3d3d3d3dbf3","9292929292d292","00000000000000","10101010521292","d3d3d3d3d3d2d2","00000000000000","d0d0d0d0d0d0d2","fffffbfbd3c382","d2d2d2d2d3d2d2","12121212820282","ffffffffffffff","fffffffff3d392","d3d3d3d3d3d3d3","92929292929212","00000000000000","ffffffffffffff","00000000000000","fbfbfbfbdbdbfb","00000000000000","12121212129212","dbdbdbdbdbfbf3","92929292121202","d3d3d3d3929292","ffffffffffdff3","ffffffffffffff","80808080900080","8080808050d110","02020202020202","ffffffffffffff","80808080800000","00000000000000","ffffffffffd302","fffbf3d3c20000","00000000000000","00000000000000","fbfbfbfbdbfbfb","00000000000000","00000000000000","00000000000000","d2d2d2d3c2d282","80808080800080","d7d7d3c2000000","00000000000000","fffffffffbdfc2","00000000000000","d6d6d797d69696","fbfbfbfbdbdbfb","00000000000000","fffffffffffffb","ffffffffffffff","00000000000000","fffffbfbd38200","00000000000000","ffffdbfbd38200","ffffdfdfd2c000","fbfbfbfbdbdbfb","d0d0d0d09090d2","fbfbfbfbdbdbfb","fbfbfbfbdbdbfb","fffffff7dbd202","00000000000000","dffff7ffdf8000","fffffffffff7f7","ffffffffffffff","ffffffffffdb82","92929292d290d2","92929292d2d292","00000000000000","d3d3d3d3d3dbf3","ffffffffd7f382","ffffffffffffff","ffffffffffffff","d2d2d2d2d29292","ffffffffffffff","00000000000000","fffffff7f3d700","00000000000000","80808080909092","00000000000000","00000000908282","fbfbfbfbdbdbfb","fbfffbfbd38200","d2d2d2d2d2c292","ffdffff3fbc200","00000000100210","fffffffffffbd3","dbdbdbdbdbfbf3","00000000000000","92929292929202","02020202020202","12121212529212","00000000000000","fffffffbf3d382","ffffffffffffff","92929292929292","d3d3d3d3dbd3d3","ffffffffffffff","9282d210020000","00000000000000","ffffffffffffff","d3d3d3d3d3d3d3","10101010909080","92929292c2c282","d3d3d3d3d2d2d3","00000000000000","00000000000000","d3d3d3d3d3d3d3","82828282020002","fbfffffbd38200","dffffff3d2c200","d0d0d0d08090c0","fbfbfbfbdbdbfb","fbfbfbfbdbdbfb","fbfbfbfbdbfbfb","40404040800000","fbfbfbfbdbdbfb","f2f2f2f2d29292","fbfbfbfbdbdbfb","90909090929082","fbfbfbfbdbdbfb","fbfbfbfbdbfbfb","ffffffffffffff","d7d7d7d7d2d2d2","00000000000000","dfdfdfdfdfdfd7","ffffffffffffff","12121212128292","fffffbdbd38200","f3f3f3f3d3dbf3","00000000000000","fbfbfbfbdbfbfb","f3f3f3f3f3f3f3","d2d2d2d2d2d2d2","00000000000000","dfdfdfdfdfdfdf","00000000000000","12121212121292","d3d3d3d3d393c3","00000000000000","00000000808280","92929292121212","d2d2d2d2829282","ffffffffffffff","ffffffffffffff","dbdbdbdbfbfbf3","dbdbdbdbdbd3d3","00000000000000","f2f2f2f2f2f6d2","00000000000000","dfdfd3c3020000","ffffffffffffff","ffffffffffffff","12121212129202","d2d2d2d2f2d2c2","d9d9dbd9d9d9df","00000000000000","00000000000010","fbfbfbfbdbdbfb","fbfbfbfbdbdbfb","ffffffffffffff","52525252100090","fbfbfbfbdbdbfb","00000000000000","fbd7f3d3820000","00008080028080","d3d3d3d3d3d3d3","d3d3d3d3d3d3d3","00000000000000","f7f7f7f7fff3f3","00000000000000","00000000000000","00000000000000","fbdfdffbc38000","ffffffffffffff","fbfbfbfbdbdbfb","00000000000000","90909090929290","ffffffffffffff","53535353d2f3d3","92929292929292","fffffbf3d30200","92929292129292","00000000000000","fbfbfbfbf3c380","fbfbfbfbdbfbfb","fffffffff3deda","00000000000000","12121212000002","92929292d29292","00000000000000","909090909050d0","80808080000000","ffffffffffdbd2","c0c0c0c0808080","fff7fbfbd3d200","ffffffffffffff","10101010001000","fffffffffbf302","dbdbdbdbfbfbf3","ffffffffffffff","fbfbfbfbdbfbfb","d0d0d0d0d0d0d2","f3f3f3f3f2f2f2","ffffffffffffff","dfdfdbdfdfdfdf","ffffffffffffff","fffffffbfbf382","fffffffffbd300","ffffffffffffff","ffffffffffffff","12121212128212","fffffffffffbd2","00000000000000","00000000000000","ffffffffffffff","00000000000000","82828282828202","ffffffffffffff","80808080008280","d0d0d0d0d2d2d2","90909090921210","00000000000000","f3f3f3f3d3dbf3","00000000000000","fffffff3f3ffc2","00000000000000","00000000000000","fffffffffff7f3","02020202020202","00000000000000","92929292929292","00000000000000","fbd3fbc3820000","ffffffffffffff","dfd7d7ffffffff","00000000000000","93939393929392","00000000000000","ffffffffffffff","fbfbfbfbdbdbfb","00000000000000","00000000000000","00000000000000","ffffdff3c30000","dadadadadad0d0","fffbfbf7d3f302","c1c1c1c1d09282","fbfbfbfbdbfbfb","d2d2d2d2d2d2d2","fbf7f3f7f3f3c2","d2d2d2d2f2d2d2","fbfbfbfbdbfbfb","90909090821002","dfdfdfdfffffff","fbfbfbfbdbdbfb","9b9b9b9b00808a","fffffffbdbc200","12121212829002","82828282809080","fffffbfbf30200","c2c2c2c2c2c6a2","ffffffffffdff3","dfdbdfffffffff","d2d2d2d2d2d292","ffffffffffffff","fffffffbf3db02","fffbfbfbe30200","00000000000000","00000000000000","c2c2c2c2c2c2c2","ffffffffffffff","00000000000000","ffffffffffd7c2","fbfbfbfbdbdbfb","10101010124082","00000000000000","ffffffffffffff","00000000000400","00000000000000","00000000000000","80808080000080","ffffffffffffff","fffffbfbf30200","ffffffffffffff","fbfbfbfbdbdbfb","10101010800080","ffffffffffffff","fbfbfbfbdbdbfb","10101010001202","00000000000000","92929292c2c282","ffffffffffffff","00000000000000","ffffffffffffff","00000000000000","fffffffffff7d2","d1d1d1d1d1d0d0","ffffffffffffff","f7d38200000000","fffffffff7d380","00000000000000","ffffffffffffff","ffffffffffffff","f3f3f3f3f3d3d2","93939fd7ffffff","ffffffffffd7c0","00000000000000","d3d3d3d3d3dbf3","08080808000000","ffffffffd3f300","fffffffbf3d382","ffffffffd3c200","fffffbf3f38200","d3d3d3d3d38393","00000000000000","fbfffffbd38000","f3f3f3f3d3dbf3","92d6d69696d696","00000000000000","fbfbfbfbdbdbfb","00000000000000","ffffffffffffff","d3d3d3d3d2d2d3","ffffffffffffff","00000000000000","fffffffbdb8300","02020202420282","dfdffffbfbd200","90909090821002","fbfbfbfbdbdbfb","f3f3f3f3d3dbf3","90909090108000","ffffffdbdbc200","10101010100000","fbfbfbfbdbdbfb","02020202020202","ffffffffffffff","90909090d0d0d0","fbfbfbfbdbfbfb","00000000000000","00000000000000","808080808080c2","90909090d0d2d2","00000000000000","00000000000000","92929292d29212","dfdfdfdddfdfd7","90909090921282","fbfbfbfbdbdbfb","00000000000000","00000000000000","ffffffffffffff","fbfbfbfbdbfbfb","fffffffffbd282","fbfbfbfbdbfbfb","fbfbfbfbdbdbfb","90909090100000","fffffffbfed300","fbfbfbfbdbdbfb","90909090808080","ffffffffddd1c0","fbfbfbfbdbdbfb","00000000000000","fbfbfbfbdbdbfb","00000000000000","ffdbf7f3c30000","d3d3d3d3d3d3d3","00000000000000","d2d2d2d2d2d250","00000000000000","d3d3d3d3d3c393","00000000000000","dbdfdfc2820000","d3d3d3d3d2d2d2","00000000000000","f3f3f3f3f3f3d3","dfdfffd3c20000","d2d2d2d2d28292","fffffbfbd7d3d2","fbfbfbfbdbdbfb","d3d3d3d3d3d3d3","fffffffbdbc200","ffffffffffffff","ffffffffffffff","d2d2d2d2929212","00000000000200","dbdbdbdbfbfbf3","ffffffffffffd7","fbfbfbfbdbfbfb","f2f2f2f2f2f2f2","ffffffffffffff","fffbffd3830000","ffffffffffffff","ffffffffffffff","02020202028082","90909090909290","92929292d2d2c0","e3e3e3e3f2e3f6","ffdbfbd3820000","ffdfdff3d38000","f0f0f0f0d0d0d2","00000000000000","dadadadad2d2c2","02020202028282","fbfbfbfbdbdbfb","ffffffffffffff","fffffff7cfc300","fbfbfbfbdbdbfb","fbfbfbfbf7f3ff","90909090101010","fbfbfbfbdbdbfb","d3d3d3d3d3dbf3","ffffdffffff7d3","dbdbdbdbd2d3d3","fbfbfbfbdbdbfb","00000000080000","02020202020202","92929292929292","00000000000000","00000000000000","00000000000000","80808080800000","53535353d2f3d3","d3d3d3d3d3dbf3","00000000000000","00000000000000","dbdbdbdbdbdbc3","82828282830282","fbfbfbfbdbdbfb","92929292929292","00000000000000","92929292129292","ffffffffffd780","ffffffdfd3c200","00000000000000","00000000000000","00000000000000","00000000000000","d2d2d2d2d2d2d2","d9d9d9d9d3d3d3","909090908392c2","00000000000000","fbfbfbfbdbdbfb","00000000000000","dbdbdbdbdbd3d3","00000000000000","00000000000000","1111111190d0d2","fbfbfbfbdbdbfb","ffffffffffffff","d2d2d2d2d29282","92929292529212","f3f3f3f3f3f2d2","ffffffffffffff","d3d3f3f7f3d2db","92929292d2d2d2","00000000000080","f2f2f2f2d3d2d2","82828280929292","00000000000000","d3d3d3d3fbfbd3","00000000000000","ffffffffffffff","00000000000000","00000000000000","ffffffffffffff","f3f3f3f3d3dbf3","ffffffffffffff","00000000000000","ffffffffffffff","d0c09280000000","ffffffffffffff","00000000000000","ffffffffffffff","00000000000000","dbdbd382000000","d3d3d3d3d2d2d2","ffffffffffffff","82828282d08000","92929292808080","dbdbdbdbfbfbf3","80808080008000","ffffffffffffff","ffffffffffffff","ffffffffffffff","ffffffffffffff","f3f3f3f3d3dbf3","ffffffffffffff","ffffffffffffff","92929292121212","dbdbdbdbdbfbf3","ffffffffffffff","d3d3d3d39383d3","d3d3d3d3d3fbf3","8282828282d282","fffffffbd38200","00000000000000","ffffffffffffd3","00000000000000","00000000000000","fbfffbd3020000","00000000000000","00000000000000","00000000000000","fbfbfbfbdbdbfb","ffffffffffffff","00000000000000","90909090929280","00000000000000","d3d3d3d3d3d2d2","02020202020202","d2d2d2d2929290","fbfbfbfbdbdbfb","d3d3d3d3d3d3d3","f3f3f3f3d3dbf3","8282828280c082","d2d2d2d2d2d2d2","d9d9d9d9d0d3d3","ffffffffffffff","12121212928292","13131313105000","00000000000000","00000000000000","fbfffbd3c20000","fbfffff3d38200","d2d2d2d2d2d2d2","f3f3f3f3f3d3d7","fbfbfbfbdbdbfb","ffffffffffffff","f3f3f3f3d3f3d3","90909090929090","fffffffff7f7db","00000000000000","fbfbfbfbdbfbfb","ffffffffffffd6","82828282020082","fbfbfbfbdbfbfb","fffbfbfbfbf300","00000000000000","12121212121212","00000000000000","00000000020202","ffffffffffffff","10101010800210","00000000000000","fffffffffff382","00000000000000","fffffff7f3f2d2","fbfbfbfbdbdbfb","fffffffffff7c3","00000000000000","00000000000000","fffbfffbd28000","80808080008000","00000000000000","00000000000000","fbffffffffd382","d2d2d2d29a9212","d3d3d3d3d3d352","fffffff7ffd7c0","00000000000000","ffffffffffffff","000000008000c0","fbfbfbfbdbfbfb","9292929210d082","80808080908010","00000000000000","00000000000000","92929292121212","00000000000000","92929292929202","fbfbfbfbdbdbfb","00000000000000","9292929292d212","53535353d2f3d3","92929292929212","00000000000000","fbfbfbdbf30000","fffffff3d28200","d3d3d3d3d3f3d3","00000000000000","c0c0c0c0d2d2c2","dbdbdbdbfbfbf3","c3c3c3c3c3c181","00000000000000","d2d2d2d292d292","00000000000000","fffffbdbc20000","ffffffffffffff","00000000000000","f3f3f3f7f3d2c2","00000000000000","ffffffffffffff","fbfbfbfbf3d3f3","fbfbfbfbdbdbfb","fffffbfbf38200","53535353d2f3d3","f3f3f3f3d3dbf3","90909090d0d2d2","d2d2d2d2d29292","fffffffffbd300","d9dddddddddddd","fbfbfbfbdbdbfb","00000000000000","00000000000000","d0d0d0d052d292","d3d3d3d3d2d3d3","d3fbf3c3020000","fbfbfbfbdbfbfb","00000000000000","ffffffffffffff","fbfbfbfbdbdbfb","d3d2d393d39212","d3d3d3d3d3dbf3","fbfffbfbf39302","fffffbfbd38200","dbdbdbdbdbfbf3","80808080000090","ffffffffffffff","00000000000000","00000000000000","00000000000000","fffffffffff780","dbfffffff7d300","fffffbd3d20000","ffffffffffffff","00000000000000","dfdbc3c2800000","d3d3d3d3d2d1d3","00000000120012","ffffffffffffff","50505050505052","00000000000000","ffffffd3920000","00000000921200","fffffffffbc380","fbfbfbfbdbdbfb","00000000000000","90909090909090","fbfbfbfbdbdbfb","d0d0d0d0501000","00000000000000","fbfbfbfbdbdbfb","00000000000000","ffffffdfffd200","f3f3f3f3d3dbf3","50505050505250","00000000000000","ffffffffffffff","10101010108010","ffffffffffffff","fbfbfbf3830000","00000000000000","5252525292d292","00000000000000","d0d0d0d0c0c000","fffffbfbf38200","fbfffbf3820000","02020202100040","fffffffbd38200","fbfbfbfbdbdbfb","00000000000000","ffffffffffffff","fbfbdbdbd20000","00000000008000","53535353d2f3d3","00000000000000","d0d0d0d0d0d0d2","00000000000000","fffffffffbdbd3","ffffffffffffff","00000000000000","00000000000000","fbfffffbc20000","ffffffffffffff","ffffffffffffff","fbfbfbfbdbdbfb","12121212921090","fffffffbdbd300","d2d2d2d2929212","dfffffffdfd680","00000000000000","fbfffbfbd3c200","00000000000000","00000000800040","00000000000000","fbfbfbfbdbdbfb","f3f3f3f3d3dbf3","d2d2d2d2d2d292","fbfbfbfbdbdbfb","00000000008080","fbffdffbc28200","c0c0c0d2dad2da","00000000000000","00000000000000","00000000000000","d1d1d1d1d1d1d3","f3d38200000000","ffffffffffffff","ffffffffffd382","f3f3f3f3d3dbf3","ffffffffffffff","ffffffffdfffc3","ffffffffffffd7","fffffffbffd782","00000000000000","ffffffffffffff","d3d3d3d3929090","fbfbfbfbdbfbfb","00000000000000","f3f3f3f3f3d3db","d0d0d0d0901010","fffffffff3d382","fffbfbdb830000","fbfbfbfbdbdbfb","00000000000000","00000000000000","00000000000000","12121212921212","d3d3d3d3d3d3d3","00000000000000","00000000000000","d0d0d0d0d0d0d0","10101010000000","01010101100010","ffd3fbd3820000","ffffffffffffff","fffffffffff7f3","ffffffffffffff","80808080828280","fbfbfbfbdbfbfb","ffffffffffdfe2","fbfbfbfbdbdbfb","52525252121212","d2d2d2d2929282","92929292929212","00000000000000","00000000000000","00000000000000","00000000000000","00000000000000","00000000000000","f3f3f3f3d3dbf3","00000000000000","92929292929212","92929292921012","ffffffffffffff","fbfbfbfbdbdbfb","ffffffffffffff","fbfbfbd3820000","00000000000000","fbfbfbfbdbfbfb","00000000000000","92929292900000","99d9d3dbd1d7d0","53535353d2f3d3","ffffdfdfffd282","fbffffd3920000","00000000900080","fffffffffff7d3","92929292929292","92929292d21252","00000000000000","fbfbfbfbdbdbfb","00000000000000","92108090904080","d3d3d3d3d3d3d2","fbfbfbfbdbdbfb","93939393929292","fbfbfbfbdbdbfb","d3d3d3d3d3d3d3","82828282808290","ffffffffffffff","ffffffffffffff","00000000000000","fbfbfbfbdbdbfb","10101010121212","ffffffffffffff","00000000000000","00000000000000","ffffffffffffff","82828282020202","d2d2d2d2929282","ffffffffffffff","f3f3f3f3d3dbf3","00000000000000","00000000000000","80808080808000","00000000000000","00000000000000","f3f3f3f3d2d252","00000000000000","f3f3f3f3d3dbf3","d2d2d2d2921292","00000000000000","92929292929212","ffffffffffffff","00000000000000","fbfbfbdb820000","00000000000000","fbf7fffbd3d300","d0d0d0d0909080","f3f3dbd3820000","fbfbfbfbdbdbfb","92929292929212","fffffff3f3f382","8080808090d282","ffffffffffdbc2","ffffffffffffff","00000000000000","fffffffff3d382","fbfbd3c3820000","82828282800000","d191dd995ddddd","d3d3d3d3d3d3d3","fffffff3f38200","fbfbfbfbdbdbfb","ffffffffffffff","d1d1d1d1d1d9c9","ffffffffffffff","ffffffffffffff","ffffffffffffff","ffffffffffffff","00000000000000","ffffffffffffff","828282828282c2","02020202028202","80808080808080","ffffffffffffff","ffffffffffffdb","fbfbfbfbdbdbfb","00000000000000","fbfbfbfbdbdbfb","ffffffffffffff","00000000000000","00000000000000","00000000000000","ffffffffffffff","80808080000000","00000000000000","9292d2d2d2d2d3","d3d3d3d3d29090","50505050c0c0d2","ffffffffffffff","80808080809080","d1d1d1d1d1d3d3","00000000000000","ffffffffffffff","d3d3d3d392c2d2","00000000000000","82828282921202","fbfbfbfbdbdbfb","12121212120000","ffffffffffffff","00000000000080","dbdbdbdbfbfbf3","fffffffbfb8200","d3d3d3d3d3dbf3","12121212104200","ffdfffdbd3c200","00000000000000","00000000000000","ffffffffffffff","d2d2d2d2c2c2c2","fffffbd3c28200","12121212020202","dfffdbd3000000","02020202828280","53535353121210","ffffffffffffff","d5d5d5d5d5d7d5","fbfbfffbdfd300","00000000000000","00000000000000","00000000000000","dffffff7ffdfff","ffffffffffffff","ffffffffffffff","fbfbfbfbdbdbfb","fbfffff7d28200","f3f3f3f3f3f3f3","dbf3fbd3c28000","ffffffffffffff","fffffffbd30200","92929292929292","92929292929202","12121212101210","00000000000010","ffffffffffffff","ffffffffffffdf","fbfbfbfbdbdbfb","00000000000000","ffffffffffffff","00000000000000","00000000000000","d2d2d2d2d2d0d2","fffbfbdbc20000","f3f3f3f3f3d38b","00000000000000","fffbdbc3800000","fbffffffffd300","d2d2d2d2c2c2c2","93939393021293","dbdbdbdbfbfbf3","f3f3f3f3d3dbf3","00000000000000","fbfbfbfbdbdbfb","53535353d2f3d3","fffffffff7c342","d3d3d3d3dbd3d3","00000000020002","fbfbfbfbdbfbfb","ffffffffffffff","d2d2d2d2d2d2c2","00000000000000","ffffffffffffff","fffffffff38300","00000000000000","d2d2d2d28292d6","fffffffbfbd300","00000000000000","d3d3d3d3d3d3d3","00000000000000","00000040404240","82828282020000","d2d2d2d2d2d2d2","5b5b5b5bd050d2","80808080000000","80808080808080","00000000000000","00000000000000","d3d3d3d3f3d3f3","00000000000000","00000000000000","00000000000000","00000000000000","d3d3d3d3d3d3d3","00000000000000","00000000000000","fbfffffffff7d7","50505050d3d2d2","f3f3f3f3f3f3f3","ffffffffffffff","00000000000000","ffffffffffffff","ffffdfd3c19200","00000000000000","fbfffbf3d38200","d3d3d3d3d3d3d3","f3f3f3f3d3dbf3","00000000000000","fbfbfbfbdbfbfb","d1d1d1d1d1d3d3","ffffffffffffff","f3f3f3f3d3dbf3","fbfffbfbd30200","fffffbf3c20000","92929292921292","f3f3f3f3d3dbf3","00000000000000","d2d2d2d292d2d2","ffffffffffffff","00000000000000","00000000000000","92929292921012","00000000000000","00000000000000","f2f2f2f2f6f6f6","00000000000000","92929292929292","fffbfb83020000","80808080008000","ffffffffffffff","ffffffffffd382","ffffffffffffff","92929292909093","ffffffffffffff","d3d3d3d3f7f7f3","ffffffffffffff","00000000000000","fbfffbfbd3c200","f3f3f3f3d3dbf3","10101010929212","fbfbfbfbdbdbfb","d2d2d2d2d3d2f2","dbdbdbdbfbfbfb","00000000000000","fbfbfbfbdbfbfb","d2d2d2d2d29292","ffffffffffffff","ffffffffd6d200","00000000000000","00000000000000","fffffffbd3c200","00000000000000","00000000000000","ffffffffffffff","80808080000000","f2f2f2f2f2f2f2","ffffffffffdfd3","d3d3d3d3f3da92","d3d1d1d1d1d1d3","fffffffbdbf302","fbfbfbfbdbdbfb","fffff7fff3d300","dbdbdbdbdbfbf3","d9d9d9d9d9d180","dbdbdbdbfbfbf3","00000000000000","f3f3f3f3f3d2d3","ffffffffffffff","00000000000000","f7f7f7f7f7d3ff","f7f7f7f7f7f3f7","00000000000000","dfdbd3d3800000","fbfbfbfbdbdbfb","00000000000000","12121212121212","00000000000000","00000000000000","ffffffffffffff","ffffffffffffff","ffffffffffffff","00000000000000","00000000000000","fbfffbfbd38200","d3d3d3d3d3d3d3","dbd3fbf3f3d382","00000000000000","01010101404240","00000000000010","00000000000000","00000000000000","ffffffffffffff","00000000000000","ffffffffffffff","00000000000000","00000000000000","dbdbdbdbfbfbf3","fbfbfbfbdbfbfb","d3d3d3d3f2f2d2","00000000000000","ffffffffffffff","93939393121210","f7f7dbd2928200","dbdbdbdbd993d3","00000000000000","00000000020000","00000000000000","ffffffffffd382","00000000000000","d2d2d2d2f2d292","d3d3d3d3d3dbf3","00000000000000","fbfbfbfbdbfbfb","02020202020202","ffffffffffffff","92929292929292","ffffffffffffff","ffffffffffffff","d2d2d2d2d3d292","d2d2d2d2d2d2d2","00000000000000","f2f2f2f2d29292","dfdfdfdfdff7d7","fffffffbf3c300","d2d2d2d2d2d2d2","00000000000000","fffbfbfbf38200","00000000000000","d0d0d0d0d0d290","93939393121012","fbfbfbfbdbdbfb","00000000008000","00000000000000","fbfbfbfbdbfbfb","ffffffffffffff","ffffffffffffff","d2d2d2d2d2c282","00000000000000","fbfbfbfbdbdbfb","d3d3d3d3d3d3c3","fffffffffbd782","00000000000000","fbfbfbfbdbdbfb","00000000000000","00000000000000","fffffffffffff7","fffffffffff382","92929292929292","00000000000000","00000000000000","f3f3f3f3d3dbf3","12121212121282","00000000000000","c3c3c3c3835282","00000000000000","ffffffffffffff","d2d2d2d29292c2","92929292900082","80808080809080","fffffffff3c300","00000000000000","80808080808080","fbfffffbfff382","f2f2f2f2f2d2da","81818181918092","00000000000000","fbfffbfbd38000","d3d3d3d3d2d280","d2d2d2d2dad2d2","fbfbfffbf3d302","ffffffffffffff","fffffbd3820000","ffffffffffffff","fffffff7ffc3c0","ffffffffffffd3","00000000000000","bfffffffffc380","ffffffffffffff","92929292929292","d3d3d3d3d3f2f3","ffffffffffd3f3","00000000000000","d3d3d3d3d3d3d3","c3c383c3c38280","fbfbfbfbdbfbfb","dbdbdbdbd3d3db","ffffffffffffe3","00000000000000","12121212129212","00000000000000","d2d2d2d2d2d382","dfdfdfffffffff","ffffffffffffff","ffffffffffffff","fffffffff7c300","d3d3d3d3d2d2d3","12121212101212","80808080000080","d3d3d3d392d6d6","00000000000000","dbfb9bd2820000","dadadadad05290","dbdbdbdbdbfbf3","ffffffffffffff","fbfbfbfbdbfbfb","fffbdbdb820000","d3d3d3d3d2d3d3","fffff7dbd28200","f2f2f2f2f2f2d2","92929292d2d0d2","ffffffffffffd7","dbdbdbdbdbfbd3","02020202828002","fbfbfbfbdbdbfb","80808080900000","82828282828282","02020202828200","d0d0d0d0d35382","ffffffffffffff","fbfbfbfbdbdbfb","f2f2f2f2f3f3f2","00000000000000","ffffffffffd382","00000000000000","d2d2d2d2d2f2d2","00000000000000","ffffffffffffff","ffffffffffffff","ffffffffffffca","fbfbfbfbdbdbfb","fffffbffd38000","ffffffffffffff","00000000000000","ffffffffffffff","00000000000000","00000000000000","ffffffffffffff","00000000000002","00000000000000","d0d0d0d0d0d2f3","d3d3d3d3d3d3d3","d1d9dddddddd99","92929292929202","d2d2d2d2d2d2d2","dbdbdbdbdbfbf3","ffffffffffffff","fbfbfbfbdbdbfb","fbfbfbfbdbfbfb","ffffffffffffff","ffffffffffffff","00000000808000","d2d2d2d2d29292","fbfbfbfbdbdbfb","d3d3d3d3d3d3c1","52525252921202","00000000000000","00000000000000","ffffffffffffff","00000000000000","fbfbfbfbdbdbfb","00000000000000","d3d3d382800000","f7f7fbf3f3f3f3","00000000000000","fffffffbd3f300","ffffffffffd7c6","00000000000000","d7d6d3d3d3d2f2","fffffffffbf302","fffffffffbfff7","ffffffffffffff","ffffffffffffff","00000000000000","80808080c00080","92929292925290","ffffffffffffff","ffffffffffffff","00000000000000","ffffffffffffff","00000000000000","92929292828242","ffffffffffdfd7","00000000000000","ffffffffd3e300","d3d3d3d3d3dbf3","ffffffffffffff","fbffffffd3c200","10101010101290","d0d0d0d0901090","fbfbfbfbdbdbfb","dbdbdbdbdfd7d3","10101010000200","ffffffffffffff","00000000000000","00000000000000","fbfbfbfbdbdbfb","fffbfbd3820000","d3d3d3d3c2c3c2","fbfbfbfbdbdbfb","83838383830183","00000000000000","fbfbfbfbfafad2","dcdcdcdc809c80","42100000000000","fffffff7dbd302","ffffffffffffff","00000000000000","10101110101013","ffffffffffffff","fbfbfbfbdbdbfb","00000000000000","fffffff7f7f010","00000000000000","00000000000000","00000000808080","12121212020002","ffffffffffffff","8b8b8b8bd393d2","fbfbfbfbdbdbfb","00000000001000","00000000000000","fbfbfbfbdbdbfb","fbfbfbfbdbdbfb","f7f7f7f7f3f3f3","00000000000000","92929292d2d2d2","f3f3f3f3fbfbfb","00000000000000","f3f3f3f3d3dbf3","929292929392c2","00000000000000","ffffffffffffff","d2d2d2d2d2d2d2","00000000000000","ffffffffffffff","f3f3fbf3d38200","d2d2d2d29292d2","fbfbfbfbdbfbfb","ffffffffffffff","00000000000000","00000000000000","fffffbffd38200","00000000000000","00000000000000","00000000000000","d3d3d3d3d3d3d3","fbfbfbfbf3d3f2","fffffffffbf202","00000000000000","00000000000000","fffffffffff382","ffffffffffffff","00000000000000","f3f3f3f3d3dbf3","00000000000000","929292d2d2d292","d0d0d0d0921292","d3d3d3d3921292","ffffffffffffd3","00000000000000","00000000000000","00000000000000","00000000000000","d3d3d3d3f7f3ff","fbfbfbfbdbdbfb","82828282929282","fffffff7f7d7d3","00000000000000","f3f3f3f3f2f3f3","00000000000000","fffffbfbdbc200","ffffffffffffff","fffffffffffbd3","ffffffffffffff","ffffffffffdfc3","00000000000000","d2d2d2d2129252","f3f3f3f3d3d3d3","fbfbfbfbdbdbfb","fbfffffbfbd702","d3d3d3d3d2d3d3","d1d1d1d1d1d1d1","fffffffffff6db","00000000000000","ffffffffffffff","dbdbdbdbdbd3d1","ffffffffffd782","00000000000000","92929292921292","00000000000000","53535353d2f3d3","9292929292d2d2","d2d2d2d2d2d090","12121212121212","d2d2d2d252d2c2","fbffffffffd7c2","dbdbdfdbfbc302","ffffdffbdb8300","f3f3f3f3d3dbf3","00000000900000","ffffffffffffff","00000000000000","40400000000000","00000000000000","ffffffffffffff","d3d3d3d3d2d2d2","92929292d2d392","00000000000000","fffffffffff7c1","93939393d393d2","dbdbdbdbdbfbf3","ffffffffffffff","fbfbfbfbdbdbfb","10108010c0c8c2","fbfbfbdbc20000","f3f3f3f3d3dbf3","00000000000000","f7f7f7f7d2d3f3","d3d3d3d3d3d3d3","82828282929282","92929292909000","10101010000000","f3f3f3f3d3f2d2","fbfbfbfbdbdbfb","f7f7f7f7d7f7f6","00000000000000","f3f3f3f3f2d2f2","90909090929212","d9d9d9d9d1d9d1","ffffffffffffff","00000000000000","fbfbfbfbdbdbfb","ffffffffffffff","12901292128000","00000000000000","f3f3f3f3d3dbf3","fbfbfbfbdbdbfb","ffffffffffffff","00000000000000","fbfbfbfbdbdbfb","fffffffbd7d300","fffbfbd3820000","12121212121212","00000000000000","00000000000000","505050505082d0","f3f3f3f3f3d6c2","00000000000000","ffffffffffffff","92929292929212","ffffffffffffff","d3d3d3d3d3d393","00000000000000","10101010808080","fbfbfbfbdbdbfb","91919191d09212","c0c0c0c0920200","90909090809080","ffffffffffffff","00000000000000","00000000000000","00000000000000","ffdffbdbc30200","93939393129292","00000000000000","f3f3f3f3f3fbdb","d3d3d3d352d2c2","dffffffffffff7","00000000000000","fbfbfbfbdbdbfb","fbfbfbfbf3dfc6","ffffffffffffff","d3d3d3d3d2d2d3","00000000000000","00000000000000","dfffffffffffff","fffffffff7db82","00000000000000","92929292929292","00000000000000","00000000000000","fbfbfbfbdbdbfb","00000000000000","12121212121202","dfffffffffdff7","80808080808000","9292929292d282","ffffffffffffff","92929292929292","fffffff7d3d300","00000000000000","00000000000000","00000000000000","d9d9d9d9f8d0d2","f3f3f3f3d3dbf3","dffffbf3dbd200","00000000000000","d2d2d2d2521292","fbfbfbfbdbdbfb","9f9fffcbc38000","fbfbfbfbdbdbfb","d2d2d2d2d2d2d2","02020202000002","00000000000000","fbfbfbfbdbdbfb","f3f3f3f3d2b200","dfdff7fff7f3f3","fffffffff7f7d1","52525252121212","00000000000000","ffffffffffd393","00000000000000","ffffffffffffff","82828282828282","00000000000000","ffffffffffd382","50505050100010","ffffffffffffff","9e9e9e9e8c9892","52525252d2d2d2","d3d3d3d3dbd3d3","92929292d3d392","00000000000000","ffffffffffffff","12121212929212","ffffffffffffff","08080808080080","ffffffffffffff","fbfbfbfbdbfbfb","d3d3d3d3d3f2d3","d1d1d1d1d3d3d3","f3f3f3f3f3f3b2","00000000000000","f3f3f3f3f2f3f2","80808080c08000","ffffffffffffff","00000000000000","ffffffdbd3c000","02020202020202","00000000000000","14141414800800","d3d3d3d3d3d3d3","ffffffffffffff","10101010100000","f3f3f3f3d3dbf3","00000000008000","00000000000000","fffffbfbd38300","00000000000000","00000000000000","00000000000000","fffffffff7f783","dbdbdbdbdbfbf3","ffffffffffffff","fffbfbd3820000","00000000000202","ffffffffffd3c3","00000000000080","fbfbfbfbdbdbfb","ffffffffffffff","ffffffffffffff","92929292929292","ffffffffffffff","fbfffbf3d38200","12121212121202","97979fbfffbfff","ffffffffffffff","00000000000000","ffffffffffffff","00000000000000","d2d2d2d2929292","00000000000000","fbfbfbfbdbdbfb","d2d2d2d2d3d2d2","ffffffffffffff","ffffffffffffff","ffffffffd38200","00000000000000","12121212124242","ffffffffffffff","00000000000000","00000000008000","00000000000000","f2f2f2f2f2f2f2","fbfbfbfbdbfbfb","d2d2d2d292d292","fffffffbd38300","00000000000000","f3f3f3f3d3d2fa","ffffffffffffff","ffffffffffffff","ffffffffffd742","83838383c31292","00000000000000","00000000000000","00000000000000","12121212929212","fbf7f7d3d20000","00000000000000","d3d3d3d3d3d3d3","00000000000000","00000000000000","12121212028282","f3f3f3f3d3dbf3","12121212000000","fbfbfbfbdbdbfb","00000000000000","ffffffffffffff","ffffffffffffff","fffffffbdbc300","d3d3d3d3d3d3d3","ffffffffffffff","00000000000000","d3d3d3d3d39213","d3d3d3d3dbd3d3","00000000008082","dadadadafad2d2","01010101809080","52525252129292","00000000000000","53535353d2f3d3","fbfbfbfbdbfbfb","00000000000000","ffffffffffffff","00000000000000","00000000000000","00000000000000","00000000000000","fbfbfbfbdbdbfb","00000000000000","00000000020202","00000000000000","ffffffd3d38200","9090909092c2d2","ffffffffffffff","ffffffffffffff","00000000000000","fbfbfbfbdbfbfb","90909090c0c0c0","00000000000000","d2d2d2d2d2d2d2","ffffffffffffff","fbfbfbfbdbdbfb","00000000000000","00000000000000","d3d3d3d3d3d3d3","fbfbfbfbdbdbfb","00000000000000","ffffdbfbdbc200","dfdffffffbfbdb","ffffffffffffff","d2d2d2d2d2d0d2","fffffffbd3c200","ffffffffffffff","d2d2d2d2d2d2d2","000000828282c2","fffffbd3f30200","00000000000000","ffffffffffffff","00000000000000","00000000000000","92929292928092","00000000000000","53535353d2f3d3","00000000000000","00000000020000","00000000000000","d1d1d1d1d1d1d9","d0d0d0d0d090d0","d3d3d3d3d2dad3","00000000000000","ffffffffffffff","00000000000000","00000000000000","00000000000000","fbfbfbfbdbdbfb","92929292929292","02020202020202","fbfbfbfbdbfbfb","00000000000000","959b9f9fbfbfff","dbfbdfe3820000","00000000000082","d2d2d2d2d2d252","02020202829002","53535353d2f3d3","00000000000000","00000000000000","00000000000080","80808080000000","fbfbfbfbdbdbfb","00000000000000","00000000000000","00000000000000","d1d1d1d1800080","03030303020202","83838383c38303","fbfbfbfbdbdbfb","80800000000000","fbfffbdb820000","ffffffffffffff","00000000000002","92929292929212","00000000000000","d3d3d3d393d3d3","dbdbdbdbd3d3d3","fbfbfbfbdbdbfb","fffffffffff3f3","93939393939383","00000000000000","00000000000000","00000000000000","00000000000080","00000000000000","fffffffff3c300","f3f7f7f3c38200","fbfbfbfbfbfbf3","fbfbfbfbdbdbfb","00000000000000","00000000000000","9a9a9a9ad29ad2","82828282808080","10101000000000","ffffffffffffff","ffffffffffffff","dfd3f3c3800000","f3f3f3f3d3dbf3","00000000000000","00000000000000","10101010101000","ffffffffffffff","00000000000000","12121212121212","ffffdffffbc680","00000000000000","909092939292f7","00000000000000","f3f3f3f3f3f1f3","00000000000000","00000000000000","00000000000000","fbfbfbfbdbdbfb","dffbf3d2820000","00000000000000","ffffffffffffff","fffffbfbd38000","00000000000000","fbfbfbfbdbdbfb","fffffffffffbd3","d2d2d2d2929292","d2d2d2d2d29292","00000000000000","ffffffffffffff","00000000000000","ffffffffffffff","c2c2c2c2828080","fffffffffffbd2","92929292d282d2","ffffffffffffff","ffffffffd38200","d2d2d2d290d2d0","00000000000000","d3d3d3d3d3d3d3","ffffffffffffff","02020202820002","ffffffffffffff","dbdfdfdbda8000","d3d3d3d3d0d0d2","f3f3f3f3d3dbf3","00000000000000","12121212921212","ffffffffffffff","fbfbfbfbdbdbfb","fbfffbf3c20000","d0d0d0d0d09080","ffffffffffffff","ffffffffffffff","02020202808000","ffffffffffffff","fff7fbdb820000","d3d3d3d3d3d3d3","90909090c0c000","fbfbfbfbdbdbfb","ffffffffffffff","00000000000000","fbfbfbfbdbdbfb","ffffffffdb9300","00000000000000","fbfbfbfbdbfbfb","fbfbfbfbd30000","f3f3fbf3f3c200","12121212121210","ffffffffffffff","00000000000000","93d3d3d3d3d3d2","00000000000000","53535353121212","82828282828282","d2d2d2d2d2d2d2","10001000109252","90909090000000","fbfbfbfbdbdbfb","10101010901010","ffffffffffffff","d3d3d3d3d3d2f3","90909090901090","ffffffffffffff","fbfbfbfbdbdbfb","fffffffbffc300","ffffffffffffff","00000000000000","00000000000000","00000000000000","fffffffffff7d7","00000000000000","00000000000000","02020202000200","dbdbdbdbfbfbf3","10101010808082","dadadadadad2d2","12121212129292","ffffffffffffff","00000000000000","fffffffffbffd7","f3f3f3f3f6d3d3","fffffffbd20200","00000000000000","00000000000000","fbfbfbfbdbdbfb","12121212101212","ffffffffffffff","00000000000000","ffffffffffffff","8080808000c000","ffffffffffffff","fbdbffdb830000","d3d3d3d3d3d3d3","fbfbfbfbdbdbfb","00000000000000","d3d3d3d3d3d3d3","fbfbfbfbdbdbfb","ffffffffffffff","00000000000000","ffffffffffffff","00000000000000","00000000000000","dfdfd7ffffffff","00000000000000","d2d2d2d2d2f2d2","90909090929292","ffffffffffffff","00000000009000","d2d2d2d2d2d2d2","dbdbdbdbdbfbf3","ffffffffffffff","d1d1d1d1d39352","fbfbfbfbdbdbfb","fbfbfbfbdbdbfb","00000000000000","f3f3f3f3f2f3f3","f3f3f3f3d3dbf3","82828282020202","ffffffffd3d300","fbfbfbfbf3f3f7","00000000000000","fbfbfbfbf3f3f3","00000000000000","fbfbfbfbdbdbfb","00000000000000","00000000001080","00000000000000","00000000000000","00000000000000","f3f3f3f3fff3ff","d3d3d3d3dbdfd7","00000000000000","fbfbfbfbdbdbfb","ffdfffffffffff","ffffffffffffff","00000000000000","ffffffffffffff","00000000000000","fbfbfbfbdbdbfb","00000000000000","00000000000000","d2d2d2d2d2d2c2","ffffffffffffff","d9d9d9d9d07353","d3d3d3d3fbf7d3","fffffbfbf3c200","9292929292d212","ffffffffd3d302","fbfffbfbdb8200","d2d2d2d2d2d2d2","ffffffffffd740","00000000000000","d1d1d1d1d1d1d2","d2d2d2d2d0d2d0","fbfbfbfbdbdbfb","dbdbdbdbd3d3d3","00000000000080","9090939ad2d3d1","80808080808080","00000000000000","00000000000000","f7f7f7f7f3f3fb","fbfbfbfbdbdbfb","dbfff3d3820000","00000000000000","9bd3fbd3020000","92929292d21292","dbdbdbdbdbfbf3","00000000000000","fbfbfbfbdbdbfb","00000000000002","ffffffffffffff","00000000000000","00000000000000","92929292129212","fffffffff3d382","00000000000000","00000000000000","ffffffffffffff","00000000000080","fbfbfbfbdbdbfb","ffffffffffffff","01010100000001","c0c0c0c0c00000","53535353c39302","f3f3f3f3d3dbf3","fffffffbd38200","f2f2f2f2d2d282","92929292b29292","d2d2d2d2d2d2d2","00000000000000","00000000800000","00000000000000","fbfbfbfbdbdbfb","dfdff3f3d20000","92929292929212","00000000000000","c3c3c3c343c3c3","ffffffffd38300","90909090929092","02020202920212","ffffffffffffff","ffffffffffffff","ffffffffffffff","10101010000000","00000000000000","f3f3f3f3f3f3f3","00000000000000","00000000000000","d3d3d3d3d3d3d3","d1d1d1d1d1d3d3","00000000000000","fbfbfbfbdbfbfb","00000000000000","00000000000000","00000000000000","fbfbfbfbdbdbfb","00000000000000","12121212121202","fbfbfbfbdbdbfb","fbfbfbfbdbfbfb","d2d2d2d2d2d2d2","ffffffffffffff","00000000000000","fffffffbdfd300","92929292929292","fffbdbdbc20200","d2d2d2d2d2d0d2","ffffffffffffff","ffffffffffffff","ffffffffffffff","d2d2d2d2d2d2d2","00000000000000","d2d2d2d2929212","00000000000000","fbfbfbfbdbfbfb","00000000000000","f3f3f3f3f2d280","00000000000000","00000000000000","ffffffffffffff","fbfbfbfbdbfbfb","fbfbfbfbdbfbfb","fffffffffbfbc3","00000000000000","ffffffffffffff","d2d2d2d2d2c282","00000000000000","12121212121002","ffffffffffffff","ffffffffffffdf","d1d1d1d1000202","ffffffffffffff","00000000000000","00000000000000","ffffffffffffff","fffffffbd38200","00000000000000","d2d2d2d2d292d0","00000000000000","d3d3d3d3d3d3d3","ffffffffffffff","f2f2f2f2f2f2f2","dbdbdbdbdbdbff","d2d2d2d2d0d2d2","12121212929212","92929292d2d2d2","00000000000000","ffffffffffffff","fbfbfbfbdbdbfb","ffffffffda8200","00000000000000","fbfbfbfbdbfbfb","80808080000000","ffffffffffc380","ffffffffffffff","ffffffffffffff","fbfbfbfbdbfbfb","00000000000000","fbfbfbd3030000","fbfbfbfbdbfbfb","fbfbfbfbdbdbfb","fbfbfbfbdbdbfb","10101010901000","ffffffffffffd7","12121212101010","d6d6d6d6da9080","ffffffffffffff","00000000000000","00000000000000","ffffffffffffff","fbfffbfbdb8300","52525252d25292","d3d3d3d3d3d3d3","00000000000000","92929292929292","00000000000000","00000000000000","d3d3d3d3838303","12121212121292","92929292d2d292","fffbf3d3c20000","fbfbfbfbdbdbfb","00000000000000","d2d2d2d2d2d2d2","00000000000288","d2d2d2d2d2d2de","fbfbfbfbdbdbfb","ffffffffffffff","10101010000080","00000000000000","00000000000000","00000000800000","00000000000000","00000000000000","fbfbfbfbdbdbfb","d3d3d3d3dad2d2","d3d3d3d3d3d392","d2d2d2d2d2d2d2","929292929282c2","00000000000000","00000000000000","d3d3d3d3d393d3","c2c2c2c2420252","00000000000000","00000000000000","00000000000000","00000000000000","00000000000000","ffffffffffffff","f3f3f3f3d3dbf3","ffffffffffffff","00000000000000","00000000000000","d3d3d3d3d39212","f3f3f3f3f3dbd3","92929292121202","00000000000000","00000000000000","00000000000000","d2d2d2d2d292d2","00000000000000","ffffffffffffff","00000000000000","fffbdbdbc20000","ffffffffffffff","d0d0d0d0109080","f3f3f3f3d3dbf3","00000000000000","ffffffffffffff","00000000000000","53535353121212","00000000000000","00000000000000","00000000000000","d3d3d3d3d3d3d3","fbfbfbfbdbfbfb","00000000000000","f3f3f3f3f2f3d3","00000000000002","fffffffbd30000","ffdbfbd1820000","00000000000000","00000000000000","ffdfd3f2020000","fbfbfbfbdbdbfb","d3dfd3d3d3d2f2","fbfffffbd3d302","92929292928202","00000000000000","00000000000000","00000000000000","d2d2d2d2d2d2d2","00000000000000","00000000000000","00000000000000","d2d2d2d2d2d2d2","f7f7f7f7f3c382","00000000000000","00000000000000","00000000000000","80808080808000","f3f3f3f3d3dbf3","00000000008080","d3d3d3d3d3d2d2","fbfbfbfbdbdbfb","fbfbfbfbdbdbfb","00000000000000","ffffffffffffff","d0d0d0d092d292","d3d3d3d3d3dbf3","00000000000000","ffffffffffffff","00000000000000","d0d0d0d0d0d292","00000000000000","fbfbfbfbdbfbfb","d2d2d2d2d3c302","080808080c0404","ffffdfd3c20000","fbfbfbfbdbdbfb","00000000000000","00000000000000","d9d9d9d9d9d180","00000000000000","d7d7d7d7dfdfdf","00000000000000","fbfbfbfbdbdbfb","ffffffffffffff","c2c2c2c2c2c042","fbfbfbfbdbfbfb","ffffffffffffff","00000000000000","00000000000000","00000000000000","fffffbdbd30200","92929292929212","00000000000000","fbfbfbd3c20000","dadadadad9d3d1","00000000000000","fbfbfbfbdbdbfb","dfdfffdffffff7","00000000000282","00000000000000","92929292929292","00000000000000","ffffffffffd382","00000000000000","00000000000000","12121212929212","00000000000000","ffffffffffffff","d2d2d2d2d2d2d2","92929292929292","ffffffffffffff","00000000000000","00000000000000","02020202020202","ffffffffffffff","d3d3d3d3929292","02020202000282","00000000808240","00000000000000","00000000000000","ffffffffffffff","fbfbfbfbdbdbfb","ffffffffffffff","ffffffdb930200","ffffffffffffff","00000000000000","fbfbfbfbdbdbfb","02020202028202","10101010001000","f3f3f3f3f3f3f3","f7f7f7f7f3fbff","92929292929280","00000000000000","fffffffffbd782","d2d2d2d2d3d2d2","12121212929212","02020202020282","ffffffffffffc3","00000000000000","52525252521292","f3f3f3f3d3f3f3","fbfffffbc38000","00000000000000","ffffffffdbc300","fffffbf3d30000","fffffffbdba302","fbfbfbfbdbdbfb","80808080800080","53535353d2f3d3","fffffffffff2c2","fbfbfbfbdbfbfb","00000000000000","f3f3f3dfd3f3d2","fffffbf3f3c200","00000000000000","82828282808082","ffffffffffffff","ffffffffffffff","ffffffffffffff","90909090808080","d2d2d2d2929212","ffffffffffffff","92929292d29212","dbd7d3d3820000","fbfbfbfbdbfbfb","d3d3d3d3d3dbf3","db5f5f5fdf77dd","ffffffffffffff","00000000000000","f3f3f3f3f3f3f3","80808080928002","f2f2f2f272d2d2","00000000000000","ffffdfdfd3c200","d3d3d3d3d3dbf3","fffffff3fff382","92929292d29212","00000000000000","ffffffffffffff","52525252d21210","dbdbdbdbfbfbf3","90909090819082","00000000000000","00000000000000","12121212821202","00000000000000","d3d3d3d3d3d282","00000000000000","d2d2d2d2928292","82828282828202","00000000000000","92929292929292","80808080028282","00000000000000","00000000000000","00000000000000","ffffffffffffff","00000000000000","fffffffff7d782","d8d8d8d8d0d0d2","d3d3d3d3dad3d3","dfffdfdbc3c200","92929292121292","fffffffffff382","d2d2d2d2c2d252","92929292921212","92929292929212","92929292121212","00000000000000","d2d2d2d2d2da52","10101010109010","ffffffffffffff","ffffffffffdfc3","fbfbfbfbdbdbfb","ffffffffffffff","dbfbdbdb820000","fbfbfbfbdbdbfb","4040404050d0c2","00000000000000","fffffbfbc00000","fbfbfbfbdbdbfb","00000000000000","1212121280d090","00000000000000","fbfbfbdbc20000","00000000000200","12121212121010","d2d2d2d2d2c293","00000000000000","fffffffffbfbc0","d2d2d2d2d2d2d2","ffffffffffffff","fbfbcfdb020000","00000000000000","dbdbdbdbd3d3d3","92929292929212","00000000000000","00000000000000","d2d2d2d2929212","d3d3d3d3d3d3d3","ffffffffffffff","93939fdfffffff","fffffffffbf7db","00000000000000","00000000000000","00000000001010","fbfbfbfbdbdbfb","d1d1d1d1d3d3d3","ffffdffffffece","00000000000000","00000000000000","00000000008000","fbfbfbfbdbdbfb","00000000000000","00000000000000","00000000000000","dfdfdbf2820000","12121212921212","92929292121210","80808080004000","fbfbfbfbdbdbfb","ffffffffffffff","80808080809000","fbfbfbdbd20000","00000000105002","00000000000000","92929292d2d2d2","92929292909282","00000000121010","00000000000000","00000000000000","fffffff7ffffff","f2f2f2f2f2f2f2","d2d2d2d2129212","00000000000000","d2c2d2c2c28200","00000000000000","dbdbdbdbdbdbdb","fffffffbdbc300","92929292929292","00000000000000","00000000000000","fbfbfbfbdbfbfb","ffffffffffffff","00000000000000","00000000000000","80808080808080","fbfbfbfbdbdbfb","18181818108840","12121212121202","02020202100202","dfdf5f5fdf77dd","00000000000000","d3d7dfffffffff","00000000000000","ffffffffffffff","92929292109002","fbfbfbfbdbfbfb","f3f3f3f3d3dbf3","d3d3d3d3d2d2d2","fbfbfbfbdbdbfb","00000000000000","c0c0c0c0801000","f3f3f3f3f3f292","dbf7f3d3020000","00000000000000","d0d0d0d0d29092","fbfbfbfbdbfbfb","00000000000000","fbfbfbfbdbdbfb","52525252d2d252","d2d3d3f3f3f3f3","fffff7fffff7f7","92929292928280","ffffffffffffff","fbfbfbfbdbfbfb","fbfbfbfbdbdbfb","fbffffffd38300","00000000008000","92929292929292","f3f3f3f3d3dbf3","ffffffffffffff","92929292931212","ffffdbfbc20000","90909090909092","00000000000000","d3d3d3d3d3d3d3","d2d2d2d2921212","ffffffffffffff","ffffffffffffff","00000000000000","90909090008280","ffffffffffffff","90909090800080","ffffffffffffff","f3f3f3f3d38200","fbfbfbfbdbdbfb","02020202000002","ffffffffffffff","fbfbfbfbdbdbfb","00000000000000","ffffffffdfffc1","9fdffff3f3f3f3","f7f7f7f7f3f7f7","fffffffbfbd302","d1d1d1d1d1d1d3","ffffffffffffff","fffffffbd38300","ffffffffd3d302","00000000000000","92829282828200","00000000000000","fbfbfbd3820000","00000000000000","fbfbfbfbdbfbfb","92929292929292","02020202000200","d5d5d5d5c3c183","0000000090c080","12121212121202","fbf3dbdb020000","c2c2c2c293d2d2","ffffffffffffff","82828282d2d2d2","fbfffbd3d38000","00000000000000","d3d3d3d3d3d3d3","00000000000000","fbfbfbfbdbdbfb","fbfbfbfbdbfbfb","fbfffffbdbc200","92929292921212","dffffbfbf38200","00000000000000","ffffffffffffff","d2d2d2d2d2d2d2","ffffffd3020000","ffffdbd2d20000","f3f3f3f3d3f2da","d2d2d2d2d6d6d2","d3d3d3d3d3f3f3","ffffffffffffff","fffffffffb9b02","00000000000000","00000000000080","fbfbfbfbdbdbfb","fbfbfbfbdbdbfb","92929292929292","80808080820280","fffffbcbd30000","dfdffffbdb9200","90909090808080","d3d3d3d3dbd3d3","ffffffffffffff","92929292921202","ffffffffffffff","ffffffffffffff","00000000000000","d3d3d393828200","ffdbf3d3830000","fbfbfbfbdbdbfb","00000000000000","d2d2d2d292d2d2","00000000000000","ffffffffffffff","dbf7fbdbc20000","00000000000000","ffffffffffffff","ffffffffffffff","00000000800002","dbdbdbdbfbfbf3","00000000000000","dbdbdbdbdbd3d3","80808080000000","12121212921212","82828282830002","d1d1d1d1d0d0d0","00000000000000","fbfbfbfbdbdbfb","02020202020002","dfdfdfffffffff","ffffffffffffff","fbfbfbfbf3d2da","91919191d090d2","00000000000000","d3d3d3d3d3dbf3","00000000000000","ffdbf3d3820000","00000000000000","00000000000000","00000000000000","00000000000200","fbfbfbfbdbdbfb","00000000000000","ffffffffffffff","d3d3d3d3d2d0d3","ffffffffffffff","00000000000000","10101010101010","fbfbfbfbdbdbfb","10101010100002","fbfbfbfbdbfbfb","00000000000000","fbfbfbfbdbdbfb","ffffffffffffff","00000000000000","10101010900092","9292929292c092","f3f3f3f3d3dbf3","ffffffffffffff","d7d7d7d7f3fbfb","d3d3d3d3d2d3d3","90909090d20082","ffffffffffffff","d2d2d2d2d0d012","dfdbf3d3c20000","ffffffffffffff","53535353d2f3d3","d9d9d9dddddd99","ffffffffffffc2","dbdbdbdbfbfbf3","fbfbfbfbdbdbfb","f3f3f3f3f3f3f3","00000000000000","00000000000000","12121212121212","ffffffffffffff","90909090928082","ffffffffffffff","80808080c68786","ffffffffffdbf3","00000000000000","fffffffffffad3","f3f3f3f3f3f3f2","f3f3f3f3f3f3f3","fbfbfbfbdbdbfb","fbfbfbfbdbfbfb","939bd7ffffffff","d2d2d2d2d2d0d2","00000000000000","00000000000000","00000000000000","00000000000000","ffffffffffffff","00000000000000","ffffffffffffff","ffffffffffffff","f3f3f3f3d3dbf3","d7d7f7f7d3d3d3","fbffdbfbc20000","00000000000000","00000000000000","fbfbfbfbdbdbfb","00000000000000","00000000000000","d3d3d3d3d3dbf3","fffffffbf3f382","fbfbfbfbdbdbfb","ffffffffffdff3","52525252921292","00000000000000","00000000000000","90909090d08090","ffffffffffffff","00000000000000","00000000000000","fbfbfbfbdbdbfb","fbfffbfbd30000","50505050505090","fffbfff3d30200","92929292929292","10101010800002","fbfbfbfbdbdbfb","fffffffff7f7d3","82828282820202","92929292929212","dfffdffbd38200","92929292929212","ffffffffffd782","ffffffffffd782","00000000000000","fffffffffbdbc2","ffffffffffffff","d2d2d2d2d2d282","92929292929292","d0d0d0d0d0d2d2","ffffffffffffff","00000000000000","02020202020202","00000000101010","d2d2d2d2c2d2c2","00000000000000","d3d3d3d3d3dbf3","92929292d2d290","fffffffbfbc200","00000000000000","00000000000000","00000000000000","92929292129080","dfffffdbc30200","fbfbfbfbdbdbfb","00000000000000","00000000000000","fbffdfdbc20000","ffffffffffffff","92929292929212","02020202121212","fffffffff3f382","dfdfdfdfffffff","fffbfbfbd38300","ffffffffffffff","dbdbdbdbdbfbf3","00000000000000","ffffffffffffff","f3f3f3f3d3dbf3","52525252929002","00000000000000","f3f3f3f3fbd2da","dbdbdbdbfbfbf3","fbfbfbfbdbdbfb","ffffffffffffff","ffffffffffffff","ffffffffffffff","00000000000002","00000000000000","82828282818380","fbfbfbfbdbdbfb","ffffffffffffff","fbfbfbfbdbdbfb","d3d3d3d3d3d3d3","00000000000000","ffffffffffffff","fbfbfbfbdbdbfb","fbfbfbfbdbdbfb","d3d3d3d3d3d3cb","fffffffbc30000","ffffffffffd7c2","00000000000000","00000000000000","fffffffbd3c200","00000000000000","00000000000000","f3f3f3f3d3dbf3","ffffffffffffff","00000000000000","fffffffbf3e300","fbfbfffbdb8200","ffffffffffffff","d2d2d2d2929282","dfdfdff7f3f3f3","fbfbfbfbdbfbfb","00000000808000","ffffffffffffff","02020202020200","d2d2d2d2d2d3d2","93dfdfffffffff","00000000000000","12121212120282","00000000000000","d3d3d3d3d3d382","fbffffffd3c200","d2d2d2d2929292","ffffffffffffff","f2f2f2f2f3d2fa","ffffffffffffff","dbdbdbdbd3d3db","92929292121090","d3d3d3d3d293d2","ffffffffffffff","d3d3d3d3d3d3d3","dbfffffff7ffdf","02020202020002","fffffffbd3c200","fffff7fff3c202","00000000000000","00000000000000","00000000000000","d1d1d1d1d1d1d3","00000000000000","ffffffffffffff","fbfbfbfbdbdbfb","d3d3d3d3d3d3d3","fbfffffbdb8200","ffffffdffed200","d2d2d2d2d2f2d2","fffffffffff7d3","fffffffbdbd382","fbfbfbfbdbdbfb","00000000000000","dbdbdbdbd2d9d3","fff3fbf3c30000","ffffffffffffff","00000000000000","f3f3f3f3d3dbf3","12121212121212","fbfbfbfbdbdbfb","8080808090d0d2","92929292929082","dfdf5b5fdf77dd","ffffffdffffbc2","00000000000000","f2f2f2f2d2d2d2","d2d2d2d2d2d2d2","fbfbfbfbdbdbfb","f3f3f3f3f2f2f2","ffffffffffffff","fbfbfbfbdbdbfb","00000000000000","ffffffffffffff","00000000000000","00000000000202","dbdbdbdbfbfbf3","90909090101012","00000000000000","d2d2d2d2d2d2da","10101010100010","12121212929210","10101010800080","00000000000000","d3ffdfd3c20000","00000000000000","ffffffffffffff","00000000000000","03030303028307","d3d3d3d3f3d3f3","ffffffffdbd200","505050504242c0","50505050d2d0d3","00000000000000","00000000000000","fbfbfbfbfbfbf3","00000000000000","d0d0d0d0d0d0d2","80808080d0d292","fbfbfbfbdbdbfb","92929292921212","dfdfdfdfdfdbd3","00000000000000","12121212929212","fffff7fbfec280","82828282929012","10101010928000","ffffffffffdfd2","fbfbfbfbdbdbfb","fbfbfbfbdbdbfb","ffffffffffffd3","00000000000000","d3d19090400200","ffffffffffffff","d1f3d1c3000000","f7ffffd3c00000","00000000000000","00000000000000","00000000000000","d2d2d2d2d0d0c0","ffffffffffffff","fbfbfbfbdbdbfb","ffffffffffffff","80808080000000","00000000000000","dfdffff3f3f3f3","ffffffffffffff","00000000000000","fbfffffffbdf82","ffffffffffffff","ffffffffffffff","00000000000000","fbfbfbfbf6dade","f3f3f3f3d3dbf3","ffffffffffffff","ffffffffffffff","d3d3d3d3d28202","00000000000000","00000000000000","00000000000000","00000000000000","b2b2b2b2d2d2d2","ffffffffffffff","00000000000000","12121212121092","fffbfbd3820000","10101010100000","00000000000000","ffffffffffffff","ffffffffffffff","00000000000000","10101010100000","dbdbdbdbdbfbf3","00000000400000","00000000000000","f3f3f3f3f3f2f3","d2d2d2d2d2d2d2","00000000000000","ffffffffffffff","ffffffffffffd3","fffffffbffc300","04040404000000","00000000000000","ffffffffffd382","ffffffffffffff","92929292929212","12121212120242","10101010101000","00000000000000","ffffffffffffff","92929292921210","f3f3f3f3d3dbf3","fbdffbd3c20000","d2d2d2d2d28202","ffffffffffffff","ffffffffffffff","90909090920292","d3d3d3d392d292","00000000000000","d3d3d3d3d3d3db","00000000000000","fbfbfbfbdbdbfb","ffffffffffffff","00000000000000","d2d2d2d2d2d2d2","92929292921212","fbfbfbfbdbdbfb","00000000000000","00000000000000","00000000000000","00000000100010","fffffffffffff3","00000000000080","fbfbfbfbdbdbfb","ffffffffffffff","8282828282c082","00000000000000","fbfbfbfbdbdbfb","ffffffffffffc2","d3d3d3d3d3d393","d0d0d0d0d0d0d0","00000000000000","00000000800282","93939393939292","52525252929212","92929292d25052","00000000000000","d2d2d2d292d292","fbfbfbfbdbdbfb","10101000008282","00000000000000","93939393c39393","ffffffffffffff","fbfbfbfbfbfbd3","00000000000000","fbfbfbfbdbdbfb","12121212828002","d2d2d2d2d2d2d2","f3f3f3f3d2d2d2","ffffffffffffff","00000000000000","00000000000000","00000000000000","ffffffffffffff","d3d3d3d3d3d2d2","fffffffff7d783","10101010000010","ffffffffffffff","fbfbfbfbdbdbfb","d2d2d2d2d2d2d2","ffffffffdfd5c2","ffffffffffffff","ffffffffffffff","00000000100202","53535353d2f3d3","00000000001212","ffffdfffffd7d2","00000000000000","00000000000000","d3d3d3d3d3dbf3","fbfbfbfbdbdbfb","d2d2d2d2d290d2","ffffffffffffff","00000000000000","00000000000000","c2c2c2c2c2c2c2","92929292929292","00008000000000","ffffffffffffff","00000000000000","5959595958d2d3","d3d3d3d3f3f3d3","d2d2d2d292d2d2","12121212121212","00000000000000","00000000000000","52525252c20090","929292929292d2","00000000000000","d3dfdfffffffff","00000000000000","f7f7f7f7f7f3f7","02020202020202","92929292928290","00000000000000","00000000000000","d3d3d3d3d3d3d3","00000000000000","00000000000000","02000200000000","00000000000000","00000000000000","ffffffffffffff","00000000000000","828282829292d2","fbfbfbfbdbdbfb","fbfbfbfbdbdbfb","92929292901890","00000000000000","00000000000000","80808080008000","d3d3d3d3d3f3f2","52525252909292","92929292d2d292","00000000000000","ffffffffffffff","fbfbfbfbdbfbfb","00000000000000","fbfbfbfbc20000","00000000000000","00000000000000","dffffffffffb82","d3d3d3d3d3d3d3","10101410101000","f3f3f3f3d3f3d2","d3d3d3d3d3d3d3","00000000000000","fbfbfbfbdbdbfb","ffffffdbdbc200","ffffffffffffff","00000000000000","f7f7f7f7f7ffff","82828282c3d3c2","10101010129212","ffffffffffffff","12121212121010","ffffffffffffff","00000000000000","00000000000000","d2d2d2d2d292d2","fbfbfbfbdbdbfb","fbfbdbd3020000","ffffffffffffff","00000000000000","ffffffffffdfc3","93939393d7d3d3","fbfbfbfbdbfbfb","90909090000000","fbffffffffdfc2","ffffffffffffff","fbfbfbfbdbdbfb","d2d2d2d2f2d2d2","00000000000000","fbfbfbfbdbdbfb","fffffffffbc300","fbfbfbfbdbdbfb","ffffffffffffff","c2c2c2c2c2c242","ffffffffffffff","92929292929292","00000000000000","ffffdffbd3c200","f3f3f3f3f3f3f3","ffffffffffffff","fbfbfbfbdbdbfb","fbfbfbfbdbdbfb","5f5f5f5fdf7fdf","00000000000000","dffffffbfbf302","92929292129212","ffffffffffffd3","dbdbdbdbdbdada","ffffffffffffff","fbfbdbdbdbd3c2","dfdfdfffffffff","d3d3d3d3d3d2d3","1a1a1a1a121292","00000000000000","00000000000000","d2d2d2d2d2d2c2","50505050504050","fffffff7c38200","ffffffffffffff","d2d2d2d2f3dad2","dbdbdbdbdbd3d3","02020202000002","00000000000000","fbfffbdbc30000","02020202828282","d3d3d3d3dbd3d3","92929292929292","00000000000000","00000000000000","fbfbfbdb820000","b3b3b3b392b392","fffffffbcac200","dfffdfca820000","00000000000000","92929292929292","fbfbfbfbdbfbfb","00000000000000","fffffffff3c300","fbfbfbfbd30200","d1d1d1d1929212","ffffffffffffff","ffffffffffffff","ffffffffffffff","ffffffdbd2ca00","fffff7fbf38200","ffffffffffffff","ffffffffd3f300","ffffffffffffff","ffffffffffffff","fbfbfbfbdbfbfb","92929292929292","80808080800000","00000000000000","53535353d2f3d3","ffdffbfbc38200","00000000000000","92929292828282","fbfbfbfbdbdbfb","00000000000000","fbfbfbfbdbdbfb","d3d3d3d3d3d3d3","f3f3f3f3f3d3d2","ffffffffffffff","12121212820202","00000000000000","ffffffffffffff","d2d2c200000000","00000000000000","dfdfdfdfdfdbd3","fbfbfbfbdbdbfb","f3f3f3f3f3f3f3","00000000000000","fffffff3f7d180","10101010808200","fffffffbf3c200","828282828282c2","12121212921210","00000000000000","00000000000000","d2d2d2d252d2d2","fbfbfbfbdbdbfb","d2d2d2d2d092d0","82828282d01212","d3d3d3d3dbfad2","f3f3f3f3f3f3f3","ffffffffdfffd7","fffffbf3f30200","ffffffffffffff","fbfbfbfbdbdbfb","ffffffffffffff","80808080908080","00000000000000","d3d3d3d3d3f292","00000000000000","fffffffff7dfc3","ffffffffffffff","ffffffffffffff","fbfbfbfbdbfbfb","00000000000000","80808080808000","fffffffbd3c000","848484809080c0","fbfbfbfbdbdbfb","00000000908080","f3f3f3f3d3dbf3","ffffffffffffff","ffffffffffffff","00000000000000","d2d2d2d2d2d3d2","fbfbfbfbdbdbfb","ffffffffffffff","00000000000000","d3d3d3d3d3d3d3","ffffffffffffff","d2d2d2d2d2f2d2","58585858505040","fffffffffffff3","d3d3d3d3d2d3d2","fbfbfbdb820000","12121212121212","ffffd3c3020000","80808080008000","fffbfbfbdbf300","fffffffbfff300","fffffffffff3d7","ffffffffffffff","02020202820202","00000000000000","d2d2d2d2528292","ffffffffffffff","ffffffffffffff","d2d2d2d212c2d2","f1f1f1f1f1f3f3","fbfbfbfbdbdbfb","00000000000000","dbdbdbdbfbfbf3","40404040005200","ffffffdbf30000","92929292929292","12121212129292","00000000000000","dbdbdbdbdbfbf3","90909090109000","d3d3d3d3d3d3d3","dbdbf3c3800000","fffbfbd3830000","ffffffffffffff","00000000000000","ffffffffffffff","fffffffbffd3c3","ffffffffffffff","d2d2d2d2d2dad2","ffffffffffffff","ffffffffffffff","ffffffffffffff","ffffffffffffff","ffffffffffffff","ffffffffffffff","ffffffffffffff","fbfbfbfbdbfbfb","00000000000000","ffffffffffffff","fffffff7ffdf82","00000000000000","fffff7fff7d340","f3f3fbd3c20000","ffffffffffffff","dbdbdbdbdbdbd7","ffffffffffffff","fbfffbdbc30200","08080808000000","d3d3d3d3d3dbd3","f3f3f3f3d3dbf3","d3d3d3d3d2d292","ffffffffffffff","fbfbfbfbdbdbfb","53535353121a02","80000080800000","12121212121212","909090929292b2","00000000000000","00000000000000","dbdbdbdbfbfbf3","92929292929292","00000000000000","92929292921202","fbfbfbfbdbdbfb","d3d3d3d3d3d3d3","ffffffffd38300","fbfbf3f7f3f3c2","f3f3f3f3d3dbf3","12121212929292","92929292829282","00000000000000","00000000000000","92929292121202","00000000000000","00000000000000","f3f3f3f3f3f3f7","00000000000000","00000000000000","fbfbfbfbdbdbfb","fbfbfbfbdbdbfb","d2d2d2d2d2d2d2","fbfbfbfbdbdbfb","00000000000000","fbfbfbfbdbfbfb","fbfffffbd38200","92929292121292","00000000000000","d3d3d3d3d3d3f3","00000000000000","f7f7f7f7f7f7f7","ffffffffffffff","fffbdffbf3c200","d2d2d2d2d2d2d2","dfdfdfffffffff","ffffffffffffff","ffffffffffffff","d2d2d2d2d3d1d3","fbfbfbfbdbfbfb","00000000000000","00000000000000","9393939393c283","fbfbfbfbdbdbfb","00000000000000","02020202921282","ffffffffffffff","00000000000000","fbfbfbf3d38200","00000000000000","00000000000000","ffffffffffffff","00000000000000","02020202020202","d2d2d2d2929212","92929292929292","02020202000080","fffffbdbc30000","fffbf3d3020000","ffffffffffffff","ffffffffffffff","00000000000000","fffffffbd3c200","fffff3d3820000","ffffffffffffff","fbfbfbfbdbfbfb","00000000000000","fbf3f3d3820000","ffffffffffffff","d3d3d3d3d3d3d3","00000000000000","00000000000000","00000000000000","dbdbdbdbdbdbdb","ffffffffffffff","dfffffdbc20000","00000000000000","00000000000000","00000000000000","00000000000000","00000000000000","fbfbfbfbdbdbfb","00000000000000","00000000000000","50505050109010","fbfbfbfbdbdbfb","02020202020202","00000000928212","fbfffffffff7c1","fffffffff7fdd3","ffffffffffffff","ffffffffffffff","ffffffffffffff","ffffffffffffff","00000000000000","00000000000000","00000000000000","00000000000000","00000000000000","53535353d2f3d3","fbfbfbfbdbdbfb","fbfbfbfbdbdbfb","d3d3d3d3d2d3c3","d3d3d3d3d3d3d3","fbfbfbfbdbdbfb","00000000000000","00000000000000","d3d3d3d2928200","dbdbdbdbdbfbf3","fffffbfbdb8200","00000000000000","fbfbfbfbdbdbfb","dffbdbdb820000","00000000800202","00000000000000","d1d1d1d1d9d1c1","00000000000000","00000000000000","00000000000000","00000000000000","92929292929292","fbfbfbfbdbdbfb","fbfbfbfbdbfbfb","93939393921212","ffffffffffffff","00000000000000","f3f3f3f3f3fbff","ffffffffffffff","12121212129212","ffffffffffffff","ffffffffffffff","fbfffbf3f38200","00000000000000","90909090900080","00000000000000","fffffffff38200","fbfbfbfbfbfbd3","02020202000000","fbfffbf3f30000","f3f3f3f3f3fbf3","53535353535292","d3d3d3d3d383d2","00000000000000","ffffdffbd38200","02020202020002","00000000000000","ffffffffffffff","00000000000000","00000000809000","00000000000000","00000000000000","90909090809090","fbfffbfbc30200","00000000000000","00000000000000","00000000000000","fffffffffbd300","fffffffff7f7c7","fbfbfbfbdbfbfb","00000000028202","5050505050f052","ffffffffffffff","fffffffbdff300","53535353d2f3d3","53535353d2f3d3","fffffffff7fbc0","00000000000000","92929292d29292","ffffffffffffff","ffffffffffffff","ffffffffffffff","ffffffffffd793","f3f3f3f3d3dbf3","00000000000000","f3f3f3f3d3dbf3","ffffffffffffff","ffffffffffffff","939393939292d3","fbfffffbd38200","fffffffffffff3","61616161010100","d3d3d3d3d3d792","f3f3f3f3d3dbf3","fbfbfbfbdbdbfb","00000000000000","d3d3d3d3521212","10101010100000","10101010001202","fbfbfbfbdbdbfb","c0c0c0c091c090","00000000000010","00000000000000","00000000000000","fffffffff7d200","ffffffffffffff","d2d2d2d2d2d2d2","00000000001000","fffffffbd30000","92929292d292d2","dffffffbf3d300","00000000000000","00000000000000","ffffffffffffff","fbfbfbfbdbdbfb","ffffffffffffff","02001084049000","ffffffffffffd3","12121212121290","52525252c0d0c0","00000000000000","ffffffffffffff","fffffbfbf30200","fff7fbd3830000","00000000000000","ffffffffffffff","fbfbfbfbd38200","00000000000000","dbdbdbdbd3d3d3","d3d3d3d3d3d3d3","ffffffffffffff","80808080800080","fffffffff7dfd1","ffffffffffffff","ffffffffffffff","92929292928202","00000000000000","d3d3d3d3f3f3db","fbfbfbfbdbfbfb","ffffffffffffff","00000000000000","f7f7f7f7f7f7f7","d2d2d2d2d21292","13131313125212","93939393d09090","fffffffffbc300","d0d0d0d0d090d0","00000000000000","f3f3f3f3fbfafa","ffffffffffdf82","92929292120212","fffffffbf3f300","ffffffffffffff","00000000000000","f3f3f3f3f2b2f2","92929292929212","fbfbfbfbdbfbfb","00000000000000","00000000000000","ffffffffffffff","10101814141010","00000000000000","00000000000000","dbdbdbdbfbfbf3","ffffffffffffff","00000000000000","12121212920202","00000000000000","00000000000800","fbfbfbfbdbdbfb","d0d0d0d0d79eda","00000000000000","fbfbfbfbdbdbfb","ffffffffffffff","00000000000000","fbfbfbfbdbdbfb","f3f3f3f3f3f3f3","00000000000000","00000000000000","fbfffffbdbd300","00000000020002","fbfbfbfbdbdbfb","fff7fbdbc20000","00000000000000","ffffffffffffff","fbfbfbfbdbdbfb","fbfbfbfbdbdbfb","fbfbfbfbdbdbfb","dffffffbd3c300","f3f3f3f3f3f3f3","ffffffffe6c782","ffffffffffffff","d2d2d2d2d2d2d2","00000000000000","00000000000000","fffbfbfbd30200","ffffffffffffff","00000000000000","02020202000000","d19dd9dddddd5d","9b9b9f9fbebfff","c0c0c0c0d2d0d2","12121212000002","c0c0c0c0534110","d0d0d0d0c05050","ffffffffffdb82","d2d2d2d2d2d2da","02020202121212","00000000000000","00000000000000","d3d3d3d3d3dbf3","ffffffffffffff","fbfbfbfbdbfbfb","00000000000000","fffffffffffbcb","dbffffdbc30000","00000000000000","00000000000000","92929292929210","fbfbfbfbdbfbfb","fffff7fbf3c782","f7f7f7f7d3d7f1","82828282021282","c2c2c2c2c38282","d1d1d1d1d1d1d3","fffbdbfbd20000","92929292521290","93939fdfffffff","00000000000000","fffffff7f38202","fbfbfbfbdbdbfb","00000000000000","dbdbdbdbfbfbf3","fbdbf3c2820000","fffffffff3d300","fbfbfbfbdbdbfb","dfffffffd3c300","f3f3f3f3d3dbf3","fffffffffbf382","12121212921292","ffffffffffffff","fbfbfbfbfbd3d3","10101010909090","f3f3f3f3f3fbfb","fffffbfbc38200","00000000000000","ffffffffffffff","92929292929292","fbfff3c3c20000","fbfbfbfbdbdbfb","92929292829282","00000000000000","d3d3d3d3d3d3d3","f3f3f3f3f3f7db","00000000000000","fffffffbd3c200","fbfbf3d3830000","00000000000000","9292d2d2929292","00000000000000","d3d3d3d3d2da9a","00000000000000","fbfbfbfbdbfbfb","fbfbfbfbdbdbfb","00000000000000","00000000000000","fbfbf3f3020000","fffffbfbd38200","ffffffffffffc2","fbfbfbfbdbfbfb","00000000000000","d3d3d3d3d3d3d3","00000000000000","f3f3f3f3d3dbf3","00000000000000","d3d3d3d3d3d3d3","d2d2d2d2d31212","ffffffd3820000","ffffffffffffff","d3d3d3d3d3d3d3","00000000000000","ffffffffffffff","10000000000000","fffffffbdbd300","00000000000000","d3d3d3d3d2c392","90909090808000","80808080808082","00000000000000","dffbfbfbc28200","ffffffffffffff","dfdfdbdbc20000","00000000000002","d2d2d2d2d2d2d2","ffffffffffcfc3","d0d0d0d0d0c2d0","00000000000000","00000000000000","fffffbf3d20000","ffffffffffffff","f3f3f3f3d3dbf3","80808080800000","00000000000000","fbfbfbfbdbdbfb","00000000000080","00000000000000","9292929212c282","ffffffffffffff","12121212121212","929292921212d2","92929292929292","ffffffffffffff","9292929292dad0","fffffffbd3c300","ffffffffffffff","ffffffffffffff","ffffffffdfffd6","d3d3d3d3d3dbf3","fbfbfbfbdbdbfb","00000000000000","12121212921012","00000000000000","fffffbfbd3e300","ffffffffffffff","fbfbfffbc38200","00000000101000","d3d3d3d3f3d2d2","00000000000000","53535353d2f3d3","dbdbdbdbdbfbf3","fbfbfbfbdb8200","ffffffffffffff","90909090020200","ffffffffffffff","00000000000000","00000000000000","90909090d291c0","02000000020000","fbfbfbfbdbdbfb","00000000000000","00000000000000","fffffffbdbd300","80808080904080","d3d3d3d392d0d2","fbfbfbfbdbdbfb","c2c2c2c2928282","ffffffffffffff","9191c8d1c1d080","d3d3d3d3d39393","d0d0d0d0d2d2d2","ffffffffffffd3","fffffffff7d381","d2d2d2d2d2d3d2","00000000000000","00000000000000","fbfbfbfbdbdbfb","80808080808002","00000000000000","10101010008080","00000000000000","10101010129282","92929292929212","00000000000000","d2d2d2d2d2d2d2","00000000000000","80808080828000","c0c0c0c0d2d2d2","12121212121010","fffffffff7c7c3","fffffffbdb8300","12121212929a02","00000000000000","fffffbfbd38200","fbfbfbfbdbdbfb","ffffffffffffff","dbdbdbdbd3d3d3","90909090808080","00000000000000","00000000000000","00000000000000","00000000000000","ffffffffffffff","00000000000000","00000000000000","ffffffffffffff","03030303020203","00000000000000","92929292929212","02020202020202","00000000000000","ffffffffffffff","00000000000000","00000000000000","10101010109080","00000000000000","ffffffffdfd380","ffffffffffffff","ffffffffffd702","00000000000000","00000000000000","12121212929212","ffffffffffffff","00000000000000","ffffffffffffff","00000000128002","fffffbf3c20000","9393939392d3d3","80808080808080","d1d1d1d1d3d1d0","12121212000000","ffffffffffffff","ffffffffffffff","02020202020002","ffffffffffffff","fbffdfdbc20000","fbfbfbfbdbfbfb","ffffffffd38200","00000000000000","f3f3f3f3f29392","12121212121210","ffffffffffffff","f3f3f3f3d3dbf3","f3f3f3f3d3dbf3","00000000008080","fffffffbffd382","fbfbfbfbdbdbfb","00000000000000","5b5b5f5f5f5f5f","fffffff3d3c200","00000000100000","c4c4c3d383c382","02020202020202","00000000000000","00000000008000","53535353d2f3d3","fbfbfbfbdbdbfb","101010101a1002","d2d2d2d2d2d292","ffffffffffffff","00000000000000","00000000000000","ffffffffffffff","fffffffffbd300","dbdbdbdbdbdbd3","ffffffffffffff","00000000000000","ffffffffffffff","d3d3d3d3d3c2d3","d2d2d2d2d2d2d2","00000000000000","00000000000000","dbdbdbdbfbfbf3","c1c1c1c1c191d1","dfdfdfdfffffff","00000000000000","92929292929292","fbfbfbfbdbdbfb","fffbfbd3820000","00000000000000","92929292928284","ffffffffffffff","90909090000000","00000000000000","ffffffffffffff","00000000000000","fffffbfbd3c200","92929292108202","d3d3d3d393f3fb","00000000000000","00000000000000","00000000000000","f1f1f1f1f1f3f3","8383838392c2c2","80808080820002","00000000000000","fbfbfbfbdbfbfb","00000000000000","00000000809080","fffffff3d38200","ffffffffffffff","00000000000000","fbfbfbfbdbdbfb","9a9a9a9a929292","00000000000000","fffffffffbf302","80808080000000","ffffffffffffff","53535353d2f3d3","92929292929212","fffffbd3d38200","92929292929212","d3d3d3d3d3dbf3","00000000000000","91919191d28282","00000000000000","d3d3d3d3db9382","ffffffffffdfd3","fbfbfbfbdbfbfb","d2d2d2d2d2d2d2","93939393fadbda","ffdffbd3020000","ffffffffffffff","10101000000000","fffffffbfff7c3","02020202020000","dfdfffffffdfff","f3f3f3f3d3dbf3","ffffffffffffff","00000000000000","00000000000000","f3f3f3f3d3dbf3","00000000000000","00000000101002","10101010008080","d2d2d2d2d2d2d2","ffffffdbc28000","92929292c28212","00000000000000","00000000000000","f3f3f3f3d3dbf3","fbfbfbfbdbdbfb","00000000000000","00000000000000","10101010000000","ffffffffffffff","00000000000000","40404040c0c0c0","fbfbfbd3930000","d3d3d3d3d3d3d3","fffffbc3820000","00000000000000","fbfbfbfbdbdbfb","d2d2d2d2929292","ffffffdbd38200","00000000000000","92929292828202","fbfffffffbdb82","00000000000002","00000000008080","80808080828082","82828282920210","00000000000000","d3d3d3d3f3f3f2","ffffffffffffff","fbfbfbfbdbdbfb","fbfbfbfbdbdbfb","fbfbfbfbdbdbfb","00000000000000","ffffffffffffff","ffffffffffffff","ffffffffffffff","ffffffffffffff","00000000000000","ffffffffffd300","fbfbfbfbdbdbfb","fffffffbffd3c2","fbfbfbfbdbdbfb","d0d0d0d0d1d1d2","fbfbfbfbdbdbfb","00000000000000","00000000000000","d3d3d7d3d2c382","80808080809082","fbfff3d3c30000","ffffffffffffff","d0d0d0d0d0d0d2","f3f3f3f3f3f3f3","fffbfffbf30200","d3d3d3d3d3d3d3","ffffffffffffff","02020202020202","ffdbfbc2820000","00000000000000","fbfbfbfbdbdbfb","fbfbfbfbdbdbfb","00000000000000","90909090000000","80808080c28200","52525252d21082","fbfbfbfbdbfbfb","f2f2f2f2d2f2f3","d2d2d2d2d2d212","fffffffbfbc200","51515151c39282","fbfbfbfbdbdbfb","ffffffffffffff","00000000000000","fffff3fbf38200","93939393838313","ffffffffffffff","fffbfbd3820000","00000000000000","ffffffffffffff","90909090c09080","dfffd7fad38200","00000000000002","d2d2d2d2d29202","ffffffffd7f7c1","00000000000000","fbfbfbfbdbdbfb","00000000020002","ffffffffffffff","ffffffffd3c682","00000000000000","dbdbdbd2c20000","ffffffffffffff","00000000000000","ffffffffffffff","00000000000000","f3f3f3f3f3f3f3","02020202800000","fffffffffff382","dbfbfbd3020000","fbfffbfbdbc200","92929292821212","d2d2d2d2d2d2f2","00000000000000","fbfbfbfbdbdbfb","00000000000000","f3f3f3f3f3f3f3","c0c0c0c00040c0","92929292929292","fffffffffbf7c7","ffffffffffffff","d3d3d3d3d2d2d2","fbfbfbfbdbdbfb","fbfbfbfbdbdbfb","00000000000000","ffffffffffffff","d5d5d5d5dbc5d3","92929292121212","d1d1d1d1d09292","dbdbdbdbfbfbf3","53535353d2f3d3","00000000000000","00000000000000","00000000000000","dbdbdbdbdfd3db","ffdbdbd3820000","00000000000000","d3d3d3d3d3d3d3","00000000000000","00000000000000","d3d3d3d3d3d3d3","d2d2d2d2d2d2d2","fbfbfbfbdbfbfb","ffffffffffffff","00000000000000","f3f3f3f3f3d2d2","ffffffffffffff","fbfbfbfbdbdbfb","00000000000000","ffffffffffffff","00000000000000","92929292d29282","dbdbdbdbd3d3d3","00000000000000","00000000000000","ffffffd3c30000","00000000000000","00000000000000","ffffffffd3c200","92929292929200","fffffbfbd3d300","ffffffffffd313","d3d3d3d3d3d3d3","00000000000000","90909090909392","92929292929212","c2c2c2c2c280c2","ffdfdfdbc30200","f3f3f3f3d3dbf3","979393dfffffff","fffffffff7f7c3","d2d2d2d2d2d292","93939393939181","fbfffffbfb8200","fffff7dfd3f3c2","fbfbfbfbdbdbfb","92101000000000","80808080000000","fffffffffff7f3","00000000000000","92929292929292","03030303830383","ffffffffdb8000","90909090929292","ffffffffffffff","d3d3d3d3c3d3c2","00000000000000","00000000000000","ffffffffffffff","92929292929292","42424242800000","fffffbfbc28000","fffffffbd3d300","00000000000000","d0d0d0d0c0d0c0","d3d3d3d3d3dbd3","fffffffffff302","92929292d2d2d0","d3d3d3d3dfd393","fffffbf3c30000","00000000000000","ffffffffffffff","d6d6d6d6d6d2d2","ffffffffffffff","d2d2d2d2d2d2f2","fbfbfbfbfffbff","bbd3d380000000","10101010000000","00000000000000","ffffffffffffff","ffffffffffffff","80808080808000","00000000000404","80808080800000","dbdbdbdbd2d1d3","ffffffffffffff","ffffffffffffff","92929292929212","90909090008000","00000000000000","00000000000002","00000000000000","00000000000000","00000000000000","ffffffffffffff","ffffffffffffd6","fbffffffffd7c2","fffffffbdfd302","12121212121202","d3d3d3d3d3d3d3","83838383939382","dbdbdbdbdbfbf3","fbfbfbfbdbdbfb","fbfbfbfbdbdbfb","fbfbfbfbdbfbfb","ffffffffffffff","ffffffffffffff","00000000000000","dbfbfbfbc30000","42424242120042","1c1c1c1c8c848c","fbfbfbfbdbdbfb","fbfbfbfbf30000","90909090809280","00000000000000","ffffffffffffff","d1d1d1d1d9d9d9","ffffffffffd7c2","00000000000000","d3d3d3d3d3d3d2","fffffffbd38200","00000000000000","ffffffffd3c200","fbfbfbfbdbfbfb","979f9f93830200","d3d3d3d3d38382","ffffffffffd7c3","00000000000000","00000000000000","00000000000000","dadadadadad2d2","fbfbfbfbf30000","fbdbc3d2020000","d2d2d6d6f6d2f6","00000000000000","fbfbfbfbdbdbfb","0202020202d282","00000000000000","92929292929212","ffffffffffffff","f3f3f3f3d3f3da","00000000000000","d7d7d7d7d3c7d3","00000000000000","d2d2d2d2929292","fbfbfbfbdbfbfb","fbfbfbfbdbfbfb","dfdffff3dbc000","fbfffbf3c38200","82828282020002","fbfffbfbd38200","fbfbfbfbdbdbfb","fbfbfbfbdbdbfb","00000000000000","fffffbf3d38200","00000000000000","fffffffbf3c382","ffffffffffffff","00000000000000","00000000000000","d2d2d2d2d2d2d2","ffffffffd7f380","ffffffffffffc3","00000000000000","ffffffffffffff","fffffff3f3d300","dbdfdfffffffff","f3f3f3f3d3dbf3","53535353d2f3d3","fffbfbf3dbd300","00000000000000","d3d3d3d3d383c3","ffffffffffffff","80808080501002","81818181808000","d2d2d2d2d2dad3","ffffffffffffff","fbfbfbfbdbdbfb","00000000000000","00000000000000","dbdbdbdbfbfbf3","fbfbfbfbdbdbfb","00000000000000","00000000000000","fbfbfbfbdbdbfb","fbfbfbfbdbfbfb","00000000000000","90909090808480","00000000000000","00000000021202","00000000000000","00000000000000","1212121290d190","fffffffbfbd200","ffffffffffffd3","fbfbfbfbdbdbfb","10101010000000","00000000000000","fbfbfbfbdbdbfb","80808080000080","d2d2d2d2d0d2d2","fbfbfbfbdbdbfb","00000000000000","12121212929202","92929292929292","dddddddddfd7d3","ffffffffffffff","00000000000000","00000000000000","ffffffffffffff","00000000829082","ffffffffffffff","ffffffffffffff","fbfbfbfbdbdbfb","00000000000000","fffff7ffffd302","fbfbfbfbdbdbfb","fbdff7dbc20000","ffffffffffffff","10101010505000","fbfbfbfbdbdbfb","02020202020202","00000000000000","fbfbfbfbdbfbfb","dfd7f7f3f3c202","93939393939282","fffffffffbf382","00000000000000","92929292929212","d2d2d2d2d2d2d2","00000000000000","ffffffffffffff","00000000000000","12121212109210","d2d2d2d2d292b2","12121212109010","fffffbfbfbd302","d1d1d1d1d1f0d3","ffffffffffffff","fbfbfbfbdbdbfb","93939393d3c3c3","fbfbfbfbdbfbfb","00000000000000","ffffffffffffd3","ffffffffffffff","fbfbfbfbdbfbfb","ffffffffffffff","90909090908090","fffffffffff7c3","00000000000000","00000000000000","fbfbfbfbdbdbfb","00000000020202","fbfbfbfbfbfbdb","ffffffffffffff","00000000000000","12121212921292","dbdbdbdbd2d3d3","dbdbdbdbdbfbf3","92929292809002","00000000000000","92929292d00202","fffffff3d38200","80808080808080","dadadadadad2d2","00000000000000","00000000000080","92d2d2d2d2d2d2","92929292f2f2f2","fbfbfbfbdbfbfb","ffffffffffffff","ffffffffffc200","92929292921212","d3d3d3d3525240","80808080909010","00000000000000","505050500050d0","d2d2d2d2d2d2d2","00000000000000","ffffffffffffff","d3d3d3d3d3d3d2","ffffffffffffc7","fffffffffffbc3","fbfbfbfbdbdbfb","d2d2d2d2d2d2d2","ffffffffffffff","f3f3f3f3f3f3f3","ffffffffffffff","fbfbfbfbdbdbfb","92929292929292","ffffffffffffff","00000000000000","ffffffffffffff","00000000000000","90909090901212","fffffffbfbc300","00000000000000","fffffffbfb8200","82828282021212","00000000000000","00000000000002","00000000000000","00000000000000","ffffffffffffff","fffffffbf3d302","dbfff7fffffbdb","90909090504040","10101010828202","00000000000000","fbfbfbfbdbdbfb","ffffffffffffff","d3d3d3d3d2d3d3","000000000080c2","00000000000000","dbdbdbdbdbfbf3","fffffffffff7de","fbfffbdb830000","00000000000000","ffffffffffffff","ffffffffffffff","9090909090d080","00000000000000","fffffffff7d3c3","92929292929292","d2d2d2d2d2d2d6","80808080000080","d2d2d2d2d2d2d2","ffffffffffffd7","ffffffffffffff","fffffffbd38200","00000000000000","00000000000000","92929292909082","93939393d29292","00000000000000","ffffffffffffff","00000000000000","d2d2d2d2dad2d2","83838383c38383","00000000000000","ffdfd7c3c28000","ffffffffd3f300","f0f0f0f0f0f2d2","00000000000000","fbfbfbfbdbdbfb","ffffffffffffff","ffffffffffffff","dbdbdbdbfbfbf3","00000000000000","00000000921212","ffffffffffffff","90909090101000","00000000000000","00000000000000","f2f2f2f292d2d2","00000000000080","d3d3d3d3d3d3d3","d2d2d2d2d2d282","d2d2d2d2d2c292","00000000000000","fbfbfbfbdbdbfb","00000000000000","d3d3d3d3d3d3d3","00000000000000","00000000000000","fbfbfbfbdbdbfb","d2d2d2d2d2d2d2","d2d2d2d2d2d2d2","fffff3f3d20000","d3d3d3d3d3dbd3","fbfbfbfbdbdbfb","fbfbfbfbdbdbfb","ffffffffffffff","fffffffbf3c300","00000000000000","d3d3d3d3d3d3d3","00000000000000","00000000000000","fffffff7ffdfc3","00000000000000","d3d3d3d3d3d3d3","12121212921210","ffffffffffffff","00000000000000","dbd3d382000000","fbfbfbfbdbfbfb","fbfbfbd3820000","8282c2c2c2c2c2","00000000000000","ffffffffffffff","00000000000000","00000000000000","92929292929292","02020202020202","00000000000000","dbdbdbdbd3d3d3","ffffffffffffff","00000000000000","00000000000000","ffffffffffffff","80808080808080","fffffffffbd302","ffffffffd3c200","00000000000000","00000000000000","ffffffffffffff","00000000000000","d0d0d0d0d0d0d2","fffffffffff3d2","ffffffffffc300","fbfbfbfbdbdbfb","ffdbf302000000","00000000000000","fbffdfdbc20000","fbd3f3e2c20000","ffffffffffffff","fbfbfbfbdbdbfb","c3c3c3c3c38343","00000000000000","00000000000000","ffffffffffffff","00000000000000","fbfbfbfbdbdbfb","fbfbfbfbdbfbfb","ffffffffffffff","d3d3d3d3d3c0d1","00000000000000","90909090909280","00000000000000","ffffffffffffff","ffffffdbd30000","ffffffffffffff","82828282009210","ffffffffffffff","00000000000000","00000000000000","5353535352d212","fbfbfbfbdbdbfb","dfdffffffffff7","d2d2d2d2d2d2d2","ffffffffffffff","00000000000000","00000000000000","00000000000000","ffffffdbffd380","fbfbfbfbdbdbfb","12121212121212","00000000000000","fffffffbffdbd3","40404040401000","fbfbfbd3e30000","f3f3f3f3d3dbf3","d3d3d3d3d3d5c3","90909090008080","00000000000000","00000000000000","fbfbfbfbdbdbfb","00000000000000","d2d2d2d2d3d393","53535353d2f3d3","d3d3d3d392d292","d0d0d0d0d0c280","fbfbfbfbdbdbfb","ffffffffffffff","00000000000000","fffffffff7d300","00000000000000","d2d2d2d2d29292","00000000000000","00000000000000","d2d2d2d2d2d2d2","d3d3d3d3d3d2d2","dffbdbdb820000","02020202020202","80808080808002","f3f3f3f3d3dbf3","00000000000000","fffffffff7f3c7","00000000000000","00000000000000","d2d2d2d2d38292","ffffffffffffff","ffffffffffffff","ffffffffffffff","52525252d21252","ffffffffffffff","00000000000000","fbfbfbfbdbdbfb","ffffffffffffff","fbfbfbfbdbdbfb","d3d3d3d3d3d3d2","fbfffffbfbf380","f3f3fff3f3c300","ffffffffffffff","ffffffffffffff","d3d3d3d3d3c3d3","dfdfffdbd3c200","12121212121212","fffffff7d2c200","00000000000000","00000000000000","ffffffffffffff","00000000000000","f2f2f2f2f3f3e6","00000000000000","ffffffffffffff","dfdbffffffffff","d5d5d1c1d9c1c4","d2d2d2d2929212","92929292921212","f3f3f3f3d3f3f3","f3f3f3f3f3f3f3","fbfbfbfbdbdbfb","d3d3d3d3d3d3d3","fffffbfbcbc200","00000000000000","fffffffbdb8200","00000000000000","ffffffffffffff","96969696969696","00000000000000","00000000000000","02020202820212","ffffffffcfd200","00000000005040","fbfbfbfbdbdbfb","ffffffffffffff","ffffdbd2820000","d0d0d0d0d1d1d9","ffffffffffffff","00000000000000","ffffffffffffff","fbfffffbd3c200","00000000000000","fbfbfbfbdbdbfb","90909090909080","00000000000000","00000000000000","00000000800000","00000000000000","ffffffffd39300","00000000000000","00000000000000","ffffffffffffff","dbdbdbdbd3d3d3","fbfbfbfbdbdbfb","ffffffffffffff","fffff7cb820000","d3d3d3d3d2d2d2","fffffbdbd30000","dbdbdbdbd3d1d3","00000000000000","fffffbd3c30200","ffffffffffffff","d1d1d1d1d9d3d3","00000000000000","d2d2d2d2d2d2d2","fbfbfbfbdbdbfb","d2d2d2d2929292","82828282829292","00000000000000","fbfbfbfbdbdbfb","00000000000000","00000000000000","10101010809000","ffffffffffffff","dfdfdbc2820000","fffffffbd3c200","00000000000000","fbfbfbfbdbdbfb","00000000000000","fbfffffbd28200","ffffffffffffff","f2f2f2f2f2f2f2","fbfbfbfbdbdbfb","00000000000000","12121212121292","fffbfbd3820000","00000000000000","82828282929282","fffffffffbd302","fffffff7ffc300","ffffffffffffff","00000000000000","fbffffdbc30000","ffffffd3820000","fbfbfbfbdbdbfb","82828282920082","fbffffd3d38200","00000000000040","ffffffffffffff","f7fffff3d30000","00000000000000","92929292929212","ffdfdbdbdbc402","dfdfffffdbc300","00000000000000","00000000000000","00000000000000","d3d28282000000","fbfbd3d3000000","d3f3f313020000","fff7d3d3000000","f2b28282000000","fbf39392000000","f3d3d382000000","ffffdfdac20000","dfdbd382000000","f3f3d3d3420000","d3dfd3d3000000","fbdbc200000000","c2ded2c2400000","d1d34042020000","ffdbd382020000","f3d3d382000000","ffdffbd3820000","fffffbfbd28200","fbd3c383000000","fbf3f3f3020000","d3d3d3c2000000","fffbf3d3820000","fbdb93d3020000","f3d3f353020000","dbf3f783020000","fffbdbdbc20000","dfd7d3d2000000","fffbfbf3820000","dfd3db82820000","fff7fffbd30200","dbfffbf3d38200","93830202000000","f3d3c280000000","dbd38202000000","d1d10000000000","d292c040000000","fbfbfbfbd20200","fffff3d3820000","00020000000000","c0c0c0c0800000","d3fbd302000000","f3f3d352000000","f0f0b090820000","01000002000000","d3f35342000000","dbd193d0900000","00000000000000","e3e363c3000000","dbffdbdb020000","dad18200000000","d3535342000000","f3bb9302000000","d0c0d0c8800000","f3f3f3f3f00000","fbfbfbdb820000","ffd3d393000000","f3f3f3d3820000","bfdfdbdb030000","dbfbdfd3800000","ffd7f3d3820000","f3c38282000000","c280c080000000","fbffdbd3820000","f7fbfbf3820000","d3d30200000000","fbfbd3c2820000","fff3dbd2000000","dbfbd302000000","fbd38200000000","fffbfbd3820000","d2930000000000","d2d28082000000","fff3f383820000","dbfbd383000000","f3f3c282000000","fbdbd3c2000000","fbffd3f3820000","cacacac2c00000","fffbdbd3c30200","fb938302000000","dbc3c382000000","fffffbdbb20200","73537313020000","d3fbfbd3820000","dbd3c202000000","fffffbfbc30200","d9d9f3c0820000","ffdfdfe3c30000","dadad2d2000000","dbd3d282000000","d3d3d282800000","fbfbfbd3d20000","ffdbffd3c20000","fffbdbdb820000","d3d3d2c2000000","dbfbdac2000000","fffbfbf2c20000","dbfffbdbf30200","d3d3d200000000","fbdbd3c3020000","f3f3d353420000","fbdbfbc3020000","d3910200000000","dbdfdedbd30000","fffbfbd3c30000","fbdb9202000000","cacadad2d30000","fbf3d382000000","fffffbf3f30200","f3f3d3d1510000","fbfffffbc38200","f3f3f343020000","fbfffbf3c28000","d9dbf7d0c20000","fffbd3f3020000","fbfbdbd3020000","dbdaffd3c30000","dbfbf3c3820000","ffdbfbdb130200","f3f39333020000","f3f3f3d3430000","d7ffd3f3c20000","fbfbfbc2020000","fffffbd3020000","c0c0c0c0800000","f3f3d353400000","fbfffbd3020000","f3d3d3c2000000","80808080000000","c2c28200000000","dfd3d3c0020000","fff3fbf3c30000","f3d3c282000000","43430002000000","d3dfd7c1820000","fbfbf3d3020000","fffbdbdb820000","d7d7d7d2800000","dffbdb80000000","c3e3c342000000","dbdb9303020000","fbfbdbdb920000","fffbffcbc30000","f3f3f3d3d30200","dadadad0d20000","f3d2c282000000","fffbf3d3820000","c0c2c0c2020000","dbdbdbd3d20200","fbfbd3d3020000","d3d38382000000","bbb3d382000000","fbfbd3d3c20200","d3f3f3d3420000","dbf7dbd2800000","d6d2d2d2020000","f1f3d343020000","f1f3f353020000","fbf3d383020000","dfdfdbd3c20000","dbd3fb83820000","73614302000000","fff7f3f3020000","ffffdb92020000","fbfbd382000000","f3f3f3d3020000","dbdbdb83020000","d3d38282000000","90c08202000000","fbfbd382000000","fbfbfbf3c20000","fbdb0302000000","f3fbd3c2000000","f3f3d3d3420200","fbf3b383000000","fffbf7d3820000","d7f3dad3820000","d3f38282000000","fffbfbd3820000","fff3d3d3020000","d3938302000000","fff3f7d2020000","f3f3f3f3420000","00000000000000","ffdbfbdbd30000","dafadadad00000","f3d38200000000","fffffbdbc30000","d7dbd3d2820000","dbfbd382000000","fffbfbdbb30000","f3f35313020000","dbdbd3d1000000","dbfbdb93020000","f3f3f353420000","f2d2c2d2020000","dbf38282000000","dadadaca100000","d3dbd3d3000000","f3f3c302020000","f3fbf393020000","d3d30200000000","fbfbbbd3020000","dad2d3d2c00000","f3f3f3d3420000","fbffdfd3c30000","f3d3d343000000","d3d3d353400000","fffbdbd3020000","d3a30302000000","fffbf3dbc20000","f7fbf3c3820000","73735373130200","fbd3c382000000","fffffbfbd38200","82828282800000","d3d3f3f3420200","d2dadbd2000000","f3d3d353020000","dfd3d3a3020000","fbfff393120000","fff7f3d3000000","d3f3d302000000","dbfbd3c3820000","c0c2d2c0c00000","fffbf3d3820000","fbd3f3d3820000","dbfbdbd2020000","d3d3d382000000","f3d3dbc2000000","53f2f3f3d30000","fffbdb93020000","fad3d282000000","dfdfdfc3820000","dbd39302000000","f3f30302000000","80800000000000","d3d3d382020000","fad7d3c0000000","dfdbdbd3c20000","d3828200000000","d2929200000000","51512102000000","d3d3f392020000","fbfffbd3920000","dbfbf3d3c20000","f3d38282000000","ffd6f3d3820000","fbfbd392020000","f3f3f353000000","73f37342020000","f3d3d343000000","d3938202000000","ddddf3c3c20000","fbffff93820000","fbfbd3d3820000","f3f3f3d3730000","f3d38202000000","43435002000000","fbdbd382000000","f3f3f3f3730200","ffdffbdbc20000","fbfbd3d3820000","dbd8cadbc30000","d3f3c383020000","d3d3f382000000","ffffffcbc20000","ffdbfbd3020000","fbfbfbf3820000","5ad7d3c0000000","00000000000000","fffbf393020000","dbdfdbdbc38200","fbd39202000000","fbfffbd3020000","fffbfbd3c20000","f3f35312020000","fbd3d200000000","d3fb9313020000","dbf3d382000000","f3f3c342020000","dadad280000000","f3f3d373020000","f3f3f342020000","dbd3d382020000","d1d1f352020000","fbf3d000000000","fbfbf3d3830000","fffbfbfb930200","fbfbd302000000","f3fbf3c2820000","dffbfbcb020000","d3d39302000000","ffffffdbd30200","c0c0c0c0000000","00000002000000","dbdbfb83020000","fbd3d382000000","f3f3d382000000","fbfbf3d3820000","ffd7f7d3820000","dbfbd382020000","dbdedbdbc30000","dbfbd382000000","fbfbffd3020000","db938202000000","fbfbd332000000","cad0dac0000000","f3f3f3f3d30200","dbdbd382020000","dfdbd392020000","f3f3f3f3000000","fbfbdbd3020000","fffbdb93000000","d3d39302000000","f7fbdbdb820000","fffbfbd3820000","cac2c2d2000000","dadef7d0000000","c0dad2d0800000","c2c2c2c2c00000","db999302020000","d3530200000000","dbfbfbd3820000","fffbf3d3820000","dbfb8382000000","00808000800000","fffbfbd3020000","dbcbc042000000","d3d3d3c2820000","dfffffd3c20000","d3dbcb02000000","fbdbdbd3820000","ffd7ffd1c20000","f3f3f3d3030000","fbfbfbd3020000","fbfbd382000000","dbfbfb93820200","d9d0dcc1000000","fffffffbf38200","fbfbd3c2000000","fff7f3c3820000","d2c38282000000","80808080800000","dadadac2000000","73737353020000","fbdfd382000000","fffffbd3c30000","dfdbdbc2000000","f7ffd3d3020000","d9d39b92820000","dbfbd3c2000000","fbfffffbd38200","dbf3c382000000","fbfbf3c3820000","dbdbdbd3820000","d3f3d382000000","d390d282020000","ffffd3f3000000","dffbf393020000","f3f3d341020000","fbfbfbdbd30000","d2d21290800000","fbb39302000000","90909000000000","f1db9282000000","ffdbd382000000","cadedad2800000","fffff7d3820000","fffffffac20000","dadaced2d28000","fffbffdb820000","d3f3f3d3020000","ffff9382000000","fffffbdb820000","dffbfbc2820000","53d3b312000000","d3f3d382000000","fbfbfbdbd30000","fffffbdbe30000","d3fbfbdbc20000","c3dbd192000000","dff3c382000000","4a585292000000","d3d35242020000","f3530202000000","dacadaca920000","f3f3a313020000","fbfffbdb820000","fbc3c282000000","d3dbd282000000","fbfbffd3020000","fbfffbd3930000","d3f3d343020000","f3fbb3c2020000","fbfbd3c3000000","d3f3c382020000","d7d3f3d2800000","fbfbf393020000","fbfbfff3f30000","d3dbd302000000","dacad682000000","c3038202000000","f3d3dbf3000000","fbd7d7d3820000","dbf3d302020000","fffbfb93820000","fffbfb93820000","92d38382020000","fbfbdb93020000","dbd39282000000","d1d38302000000","f3f3f353020000","f3f39302000000","d2d2c282000000","dfdfddd3c20000","cbc3c382020000","dbdfd7d3000000","dfd3d3c0000000","00000000000000","dbf3d3f3020000","fbdbe282000000","dadededac28000","d9fbd302000000","4852c2d0000000","fbffffdbf20000","d3c30200000000","ddddd9d1c00000","fbfffbdbc30000","40505040110000","00000000000000","fbfbd393020000","c7d38202000000","d0c0d8c0d00000","80000000000000","fff7d7d3000000","e3e3e3c3000000","f3f3b303020000","dbfbd3c2020000","dbffdbd3d30000","dbdbfbdbc30200","fff3dbd3820000","f3f3f3d3400000","fbfbd393000000","fbd39302000000","d2d2d2d8d28000","d2d3d3c2020000","d7d39302000000","dbfbfbf3020000","ddffbbd3020000","dbdbffd3c30000","fbfffbdbd38000","40000080000000","dbdbdedbc00000","fffffbfff39200","fffff7db930000","dadadad2920000","dfdfdbd3c20000","dbfbd383000000","fbffd7db830000","dbd3d3c2800000","d2cad2c8c80000","fffffbf3c30000","dbf3d3c3020000","40888080000000","f3c39302000000","dad2dac0d20000","fbfbdbb3820000","fffbd392020000","d3fbfbc2820000","d3f3f3c3020000","fbf3d383020000","f3f3f3d3420000","cac2d2c0d08000","fbfbd3d3020000","ffffffdbf30200","00808000800000","fbf3d382000000","dacad2cad20000","93839b12820000","f3f37373020000","d2dadad2d10000","f3db8202000000","fbfbfbfbf30200","d3f38302000000","ffdbdbd3000000","fbfbf3f3820000","d3d3d3c3820000","fffff7d3020000","dbdfd393000000","fbd38382000000","f3fbfbdbf38200","dacad8c0d00000","dbfffbd3c30000","fbfbdbd2000000","c3018102000000","dbd38302000000","d8c8c0c8c00000","fffbf3d3820000","93130000000000","d3d38282000000","80000000000000","fffff3f3820000","dbdfdff3c00000","fbffdbfbc30200","dbc39302000000","dbdfdfdbd30000","dbdfd7d0800000","73535202000000","fbfbfbd3830000","dbd38302000000","dffffbd3820000","fbdbd382000000","fffbf3fbf30000","d3930302000000","fffbd3d2020000","dbdbd382000000","dbdbd3d2820000","dbdeded3820000","fbf3f3d3020000","d8dad2d2d00000","fbf39302000000","fffbf3fbd30200","fbdbf3c3820000","fbfbd3f3020000","fffbff93930200","d7d38302000000","c0c0c0c0800000","f3f35302000000","fffbd382000000","dfd3f3d2800000","73f35302000000","d0d3d2c2000000","d3f3d382000000","fbfbfbd3c30000","dbdb9383020000","fffffbf3d20000","fbdbdffbc28000","f3735302000000","d1f36383020000","fbfbb393020000","dbfbd3c2000000","f3e38202000000","f3f3f353530200","d3f3f1d2520000","f2f3c340000000","51515100000000","f373c303000000","fbfbdb92800000","d7d3d3d3800000","dbd39302000000","f3ffffd3820000","fff3fb93330000","c2c2c2c2020000","dff3d793020000","d2920202000000","d2c2c2c0c20000","dbd3d312000000","fffffbdbd28200","ffdbdbc2000000","fbf3c383000000","d3f3f353520000","dbf3d382000000","73737313030000","f3f39302000000","d9939101000000","f3d35363000000","dfdfdbd9920200","fbfffbdbc20000","c2dad2d8d20000","f3d3d3d3c20000","f3838200000000","cad2cec0c00000","dfd7dbd1820000","fbe38302000000","d3d38302000000","f3f3f3d3420000","80808080800000","fbfbf3d3820000","ffdbfbc3820000","fbdbdbdbc00000","fbdbd382000000","dbffd3c3820000","fbd3d3c2000000","dbdbfbcb830000","dfdfc7d2800000","80808080800000","53737313020000","f7f3f3d3020000","fbd3f382000000","dfd3f3d3820000","dddfdbd3c20000","d1c3c382000000","f3f3d302000000","dfffdbd3000000","fbfbf3d3820000","fbfb9302000000","80808002000000","73737313020000","d9fffb83120000"],"x":[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,389,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,173,-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,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,77,-1,-1,-1,-1,-1,-1,243,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,276,-1,-1,-1,-1,-1,-1,-1,-1,-1,117,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,252,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,196,395,-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,116,-1,-1,-1,-1,324,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,328,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,244,-1,401,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,44,-1,-1,183,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,218,-1,-1,-1,-1,-1,191,-1,-1,-1,-1,-1,-1,-1,-1,-1,391,-1,-1,-1,-1,-1,-1,-1,-1,297,-1,-1,-1,-1,-1,-1,-1,-1,-1,175,-1,-1,-1,-1,-1,-1,279,-1,-1,-1,-1,-1,-1,353,-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,100,-1,61,216,-1,-1,-1,-1,-1,101,-1,-1,-1,-1,295,-1,109,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,220,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,384,-1,-1,-1,-1,20,-1,-1,-1,-1,-1,-1,265,-1,-1,257,-1,14,-1,-1,-1,154,-1,-1,-1,-1,-1,-1,161,-1,-1,-1,-1,376,-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,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,187,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,97,120,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,263,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,396,-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,75,-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,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,227,345,-1,-1,-1,-1,-1,142,-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,-1,358,-1,-1,-1,-1,-1,-1,-1,96,-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,-1,-1,-1,-1,-1,-1,182,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,194,-1,56,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,143,-1,-1,-1,-1,-1,-1,-1,70,58,-1,-1,-1,-1,-1,179,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,299,-1,-1,-1,262,-1,-1,-1,-1,-1,-1,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,121,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,259,-1,-1,-1,-1,73,-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,290,-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,74,-1,-1,-1,-1,288,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,23,-1,-1,-1,364,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,370,-1,-1,-1,-1,330,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,354,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,-1,-1,-1,-1,-1,-1,-1,-1,210,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,260,-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,-1,-1,-1,-1,169,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,240,-1,177,-1,-1,54,-1,203,9,-1,-1,-1,-1,-1,-1,-1,-1,271,-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,368,87,-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,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,149,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,12,-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,-1,-1,-1,-1,16,-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,-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,41,-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,89,-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,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,67,-1,-1,-1,-1,-1,-1,374,-1,-1,-1,-1,-1,382,-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,195,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,131,-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,18,-1,-1,-1,-1,-1,314,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,230,-1,-1,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,17,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,49,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,268,-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,123,-1,-1,-1,-1,-1,-1,-1,-1,-1,112,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,232,-1,-1,-1,-1,-1,-1,172,-1,-1,-1,-1,-1,-1,-1,-1,-1,326,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,153,-1,107,-1,-1,-1,-1,-1,319,-1,-1,-1,-1,-1,115,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,66,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,37,-1,-1,-1,-1,-1,-1,93,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,157,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,21,60,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,381,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,248,-1,-1,-1,-1,-1,-1,99,-1,-1,323,-1,137,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,307,-1,310,-1,267,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,129,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,160,-1,-1,134,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,201,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,90,-1,-1,-1,82,-1,-1,356,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,105,-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,277,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,266,-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,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,406,-1,-1,-1,-1,-1,-1,165,-1,71,-1,-1,39,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,64,-1,-1,-1,-1,-1,-1,-1,-1,-1,114,-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,-1,-1,-1,-1,166,-1,-1,-1,-1,-1,224,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,344,-1,-1,-1,-1,333,-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,202,-1,-1,-1,-1,-1,78,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,372,-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,36,-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,284,-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,-1,-1,-1,-1,86,-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,318,-1,-1,-1,-1,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,280,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,-1,-1,-1,-1,-1,43,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,122,-1,-1,-1,-1,-1,-1,-1,130,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,185,-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,229,-1,-1,-1,-1,-1,110,-1,-1,-1,176,-1,-1,-1,-1,-1,-1,234,132,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,47,-1,-1,128,-1,-1,-1,-1,-1,-1,171,-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,405,-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,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,274,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,250,-1,-1,-1,-1,-1,-1,-1,-1,127,-1,-1,-1,-1,-1,-1,65,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,52,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,305,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,35,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,193,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,140,-1,-1,83,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,26,-1,-1,-1,-1,-1,-1,-1,-1,152,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,311,-1,-1,-1,278,-1,-1,-1,150,-1,-1,-1,286,-1,-1,-1,-1,-1,-1,-1,141,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,188,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,104,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,50,-1,-1,-1,-1,-1,-1,-1,-1,219,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,298,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,283,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,275,-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,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,32,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,-1,94,-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,386,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,394,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,387,-1,-1,-1,-1,-1,-1,168,-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,261,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,349,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,308,-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,380,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,336,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,393,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,253,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,-1,-1,-1,-1,-1,-1,-1,68,-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,209,-1,-1,-1,-1,306,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,45,-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,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,113,-1,-1,-1,-1,-1,375,-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,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,272,255,-1,-1,-1,-1,-1,-1,-1,378,-1,-1,206,-1,-1,222,-1,-1,-1,-1,-1,-1,-1,-1,155,-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,72,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,135,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,285,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,346,-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,402,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,174,-1,-1,-1,-1,-1,225,-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,-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,-1,-1,313,338,-1,-1,-1,-1,-1,184,-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,-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,-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,385,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,53,-1,-1,379,-1,-1,-1,-1,-1,388,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,245,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,98,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,198,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,197,-1,-1,-1,-1,-1,-1,-1,-1,-1,282,-1,-1,-1,-1,-1,-1,-1,-1,-1,133,-1,-1,-1,-1,-1,-1,270,-1,-1,-1,-1,-1,-1,214,334,-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,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,365,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,51,-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,178,62,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,79,-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,19,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,88,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,256,-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,398,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,91,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,357,-1,-1,-1,126,-1,-1,-1,-1,-1,-1,-1,228,-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,-1,-1,-1,181,-1,-1,-1,-1,-1,373,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,84,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,28,-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,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,29,-1,348,-1,111,-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,13,-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,190,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,355,-1,351,-1,-1,-1,-1,-1,-1,-1,-1,-1,246,-1,362,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,342,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,102,-1,303,-1,-1,-1,-1,-1,-1,-1,103,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,55,-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,31,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,233,-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,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,24,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,294,-1,339,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,221,-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,-1,-1,-1,-1,-1,-1,138,-1,-1,-1,-1,-1,322,-1,-1,-1,-1,-1,-1,335,-1,264,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,151,-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,-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,309,325,-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,213,-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,-1,-1,-1,-1,-1,-1,341,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,239,-1,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,404,-1,-1,-1,-1,312,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,125,-1,-1,-1,-1,-1,-1,146,-1,-1,139,-1,-1,-1,-1,-1,-1,-1,-1,292,-1,-1,-1,-1,-1,-1,-1,367,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,363,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,321,-1,-1,249,-1,-1,247,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,144,147,-1,-1,217,-1,-1,-1,-1,164,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,119,-1,-1,-1,-1,-1,-1,212,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,63,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,352,-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,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,347,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,27,-1,-1,-1,-1,-1,-1,-1,-1,-1,291,-1,-1,-1,-1,-1,-1,-1,108,-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,106,-1,-1,-1,-1,-1,-1,340,-1,-1,-1,-1,-1,-1,-1,-1,-1,200,-1,-1,-1,-1,-1,-1,-1,-1,371,118,-1,-1,-1,-1,-1,236,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,85,-1,-1,-1,-1,-1,-1,-1,287,-1,-1,-1,163,-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,-1,316,34,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,300,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,302,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,293,-1,-1,-1,-1,145,-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,156,-1,-1,69,-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,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,205,-1,-1,237,-1,148,-1,304,-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,33,-1,-1,400,-1,-1,-1,361,-1,-1,-1,-1,-1,-1,-1,392,-1,-1,-1,-1,38,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,92,-1,-1,-1,-1,-1,-1,238,207,-1,-1,-1,-1,-1,-1,231,-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,40,-1,-1,-1,59,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,343,-1,-1,-1,-1,30,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,329,-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,-1,-1,-1,-1,350,81,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,397,242,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,22,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,80,-1,-1,-1,-1,-1,-1,-1,-1,-1,42,-1,-1,-1,-1,-1,-1,-1,-1,-1,317,-1,-1,-1,-1,-1,-1,-1,-1,-1,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,327,-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,-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,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,46,-1,-1,-1,-1,-1,136,-1,-1,-1,76,-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,-1,-1,1,-1,-1,124,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,25,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,254,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,162,-1,-1,-1,-1,-1,377,-1,-1,-1,-1,-1,-1,-1,-1,208,-1,-1,-1,-1,189,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,301,-1,-1,159,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,383,-1,-1,-1,-1,-1,-1,-1,-1,399,-1,-1,-1,-1,-1,-1,-1,-1,235,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,215,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,366,-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,-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,170,-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,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,281,-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,-1,-1,-1,251,-1,-1,-1,-1,167,289,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,337,-1,-1,-1,-1,269,-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,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,258,369,-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,332,-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,296,-1,-1,-1,-1,-1,-1,-1,-1,-1,204,-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,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,186,-1,403,226,-1,-1,360,223,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,320,-1,158,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,331,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,359,-1,-1,-1,-1,-1,-1,-1,-1,-1,211,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,180,-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,273,-1,-1,-1,-1,-1,-1,-1,-1,241,-1,-1,-1,199,-1,-1,-1,-1,-1,-1,-1,-1,315,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]},"examples":[{"img":"e/0000.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_close_image036.jpg"},{"img":"e/0001.jpg","href":"https://huggingface.co/datasets/devmandan/broken-qr-codes-104/resolve/main/data/44.jpg"},{"img":"e/0002.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2187_target.jpg","kind":"clean"},{"img":"e/0003.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/decoding_v2WIFI.png"},{"img":"e/0004.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1558_target.jpg","kind":"clean"},{"img":"e/0005.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/decoding_v2MeCard-Notes.png"},{"img":"e/0006.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1611_target.jpg","kind":"clean"},{"img":"e/0007.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/decoding_v3YouTube.png"},{"img":"e/0008.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_curved_image009.jpg"},{"img":"e/0009.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0192.jpg"},{"img":"e/0010.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/03641.jpg"},{"img":"e/0011.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/decoding_v3SMS-Text.png"},{"img":"e/0012.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0019.jpg"},{"img":"e/0013.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0087.jpg"},{"img":"e/0014.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_nominal_image061.jpg"},{"img":"e/0015.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_close_image006.jpg"},{"img":"e/0016.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_glare_image049.jpg"},{"img":"e/0017.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0152.jpg"},{"img":"e/0018.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_glare_image047.jpg"},{"img":"e/0019.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0120.jpg"},{"img":"e/0020.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/decoding_v2VCard-Type.png"},{"img":"e/0021.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0113.jpg"},{"img":"e/0022.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0116.jpg"},{"img":"e/0023.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0080.jpg"},{"img":"e/0024.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_nominal_image005.jpg"},{"img":"e/0025.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_nominal_image054.jpg"},{"img":"e/0026.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0118.jpg"},{"img":"e/0027.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0085.jpg"},{"img":"e/0028.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/decoding_v2VCard-Encoding.png"},{"img":"e/0029.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0109.jpg"},{"img":"e/0030.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_blurred_image033.jpg"},{"img":"e/0031.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0171.jpg"},{"img":"e/0032.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_close_image004.jpg"},{"img":"e/0033.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/02108.jpg"},{"img":"e/0034.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_blurred_image034.jpg"},{"img":"e/0035.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0016.jpg"},{"img":"e/0036.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0005.jpg"},{"img":"e/0037.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_nominal_image020.jpg"},{"img":"e/0038.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0151.jpg"},{"img":"e/0039.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/04439.jpg"},{"img":"e/0040.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0159.jpg"},{"img":"e/0041.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0025.jpg"},{"img":"e/0042.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/02278.jpg"},{"img":"e/0043.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_nominal_image057.jpg"},{"img":"e/0044.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/03537.jpg"},{"img":"e/0045.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0068.jpg"},{"img":"e/0046.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_close_image015.jpg"},{"img":"e/0047.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0177.jpg"},{"img":"e/0048.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0017.jpg"},{"img":"e/0049.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0187.jpg"},{"img":"e/0050.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_nominal_image049.jpg"},{"img":"e/0051.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_close_image034.jpg"},{"img":"e/0052.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_close_image035.jpg"},{"img":"e/0053.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/03078.jpg"},{"img":"e/0054.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_nominal_image059.jpg"},{"img":"e/0055.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0035.jpg"},{"img":"e/0056.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_close_image003.jpg"},{"img":"e/0057.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_close_image016.jpg"},{"img":"e/0058.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0006.jpg"},{"img":"e/0059.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_close_image014.jpg"},{"img":"e/0060.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_close_image017.jpg"},{"img":"e/0061.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0092.jpg"},{"img":"e/0062.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0013.jpg"},{"img":"e/0063.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0023.jpg"},{"img":"e/0064.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0133.jpg"},{"img":"e/0065.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0155.jpg"},{"img":"e/0066.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0074.jpg"},{"img":"e/0067.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0146.jpg"},{"img":"e/0068.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0072.jpg"},{"img":"e/0069.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0131.jpg"},{"img":"e/0070.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0042.jpg"},{"img":"e/0071.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/06620.jpg"},{"img":"e/0072.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0062.jpg"},{"img":"e/0073.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/decoding_v3VCard-Encoding.png"},{"img":"e/0074.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_nominal_image063.jpg"},{"img":"e/0075.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/decoding_v2VCard-BasicWikipedia.png"},{"img":"e/0076.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0098.jpg"},{"img":"e/0077.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0163.jpg"},{"img":"e/0078.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0172.jpg"},{"img":"e/0079.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_glare_image040.jpg"},{"img":"e/0080.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_glare_image043.jpg"},{"img":"e/0081.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/01781.jpg"},{"img":"e/0082.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_blurred_image032.jpg"},{"img":"e/0083.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0063.jpg"},{"img":"e/0084.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/decoding_v3VCard-Type.png"},{"img":"e/0085.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/decoding_v2Event.png"},{"img":"e/0086.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0058.jpg"},{"img":"e/0087.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0049.jpg"},{"img":"e/0088.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0145.jpg"},{"img":"e/0089.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0065.jpg"},{"img":"e/0090.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2113_extracted_voted.jpg","kind":"distorted"},{"img":"e/0091.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0050.jpg"},{"img":"e/0092.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0094.jpg"},{"img":"e/0093.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_monitor_image001.jpg"},{"img":"e/0094.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0084.jpg"},{"img":"e/0095.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0185.jpg"},{"img":"e/0096.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0091.jpg"},{"img":"e/0097.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0483.jpg"},{"img":"e/0098.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_monitor_image010.jpg"},{"img":"e/0099.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0067.jpg"},{"img":"e/0100.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_blurred_image028.jpg"},{"img":"e/0101.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/02496.jpg"},{"img":"e/0102.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0579.jpg"},{"img":"e/0103.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2219_extracted_voted.jpg","kind":"distorted"},{"img":"e/0104.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0441.jpg"},{"img":"e/0105.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0180.jpg"},{"img":"e/0106.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0178.jpg"},{"img":"e/0107.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/03617.jpg"},{"img":"e/0108.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0011.jpg"},{"img":"e/0109.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2004_extracted_voted.jpg","kind":"distorted"},{"img":"e/0110.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0413.jpg"},{"img":"e/0111.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0263.jpg"},{"img":"e/0112.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_nominal_image056.jpg"},{"img":"e/0113.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2080_extracted_voted.jpg","kind":"distorted"},{"img":"e/0114.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0018.jpg"},{"img":"e/0115.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0150.jpg"},{"img":"e/0116.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_monitor_image004.jpg"},{"img":"e/0117.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0585.jpg"},{"img":"e/0118.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0164.jpg"},{"img":"e/0119.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/03030.jpg"},{"img":"e/0120.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0190.jpg"},{"img":"e/0121.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_curved_image046.jpg"},{"img":"e/0122.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0521.jpg"},{"img":"e/0123.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/00939.jpg"},{"img":"e/0124.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0297.jpg"},{"img":"e/0125.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1915_extracted_voted.jpg","kind":"distorted"},{"img":"e/0126.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_monitor_image003.jpg"},{"img":"e/0127.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0197.jpg"},{"img":"e/0128.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0527.jpg"},{"img":"e/0129.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0095.jpg"},{"img":"e/0130.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0104.jpg"},{"img":"e/0131.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0315.jpg"},{"img":"e/0132.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/01808.jpg"},{"img":"e/0133.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2052_extracted_voted.jpg","kind":"distorted"},{"img":"e/0134.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_nominal_image012.jpg"},{"img":"e/0135.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_blurred_image013.jpg"},{"img":"e/0136.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0033.jpg"},{"img":"e/0137.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0258.jpg"},{"img":"e/0138.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0182.jpg"},{"img":"e/0139.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0103.jpg"},{"img":"e/0140.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_curved_image008.jpg"},{"img":"e/0141.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2187_extracted_voted.jpg","kind":"distorted"},{"img":"e/0142.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_close_image030.jpg"},{"img":"e/0143.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/04489.jpg"},{"img":"e/0144.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0030.jpg"},{"img":"e/0145.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0409.jpg"},{"img":"e/0146.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/03308.jpg"},{"img":"e/0147.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_blurred_image039.jpg"},{"img":"e/0148.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_curved_image030.jpg"},{"img":"e/0149.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0480.jpg"},{"img":"e/0150.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/clean/0037.jpg"},{"img":"e/0151.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1963_extracted_voted.jpg","kind":"distorted"},{"img":"e/0152.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/03996.jpg"},{"img":"e/0153.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_nominal_image014.jpg"},{"img":"e/0154.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0509.jpg"},{"img":"e/0155.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1956_extracted_voted.jpg","kind":"distorted"},{"img":"e/0156.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1888_extracted_voted.jpg","kind":"distorted"},{"img":"e/0157.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_glare_image020.jpg"},{"img":"e/0158.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/tough/0165.jpg"},{"img":"e/0159.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0206.jpg"},{"img":"e/0160.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/00654.jpg"},{"img":"e/0161.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1828_extracted_voted.jpg","kind":"distorted"},{"img":"e/0162.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0470.jpg"},{"img":"e/0163.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0205.jpg"},{"img":"e/0164.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_nominal_image039.jpg"},{"img":"e/0165.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2091_extracted_voted.jpg","kind":"distorted"},{"img":"e/0166.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_close_image011.jpg"},{"img":"e/0167.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/tough/0302.jpg"},{"img":"e/0168.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1993_extracted_voted.jpg","kind":"distorted"},{"img":"e/0169.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0176.jpg"},{"img":"e/0170.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/tough/0246.jpg"},{"img":"e/0171.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/01894.jpg"},{"img":"e/0172.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_close_image008.jpg"},{"img":"e/0173.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_close_image009.jpg"},{"img":"e/0174.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1810_extracted_voted.jpg","kind":"distorted"},{"img":"e/0175.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0512.jpg"},{"img":"e/0176.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2128_extracted_voted.jpg","kind":"distorted"},{"img":"e/0177.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0273.jpg"},{"img":"e/0178.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_close_image038.jpg"},{"img":"e/0179.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0235.jpg"},{"img":"e/0180.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/tough/0130.jpg"},{"img":"e/0181.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2068_extracted_voted.jpg","kind":"distorted"},{"img":"e/0182.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/01635.jpg"},{"img":"e/0183.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_close_image039.jpg"},{"img":"e/0184.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0519.jpg"},{"img":"e/0185.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2162_extracted_voted.jpg","kind":"distorted"},{"img":"e/0186.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/tough/0562.jpg"},{"img":"e/0187.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2212_extracted_voted.jpg","kind":"distorted"},{"img":"e/0188.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_glare_image006.jpg"},{"img":"e/0189.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0598.jpg"},{"img":"e/0190.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/04090.jpg"},{"img":"e/0191.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_nominal_image024.jpg"},{"img":"e/0192.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0003.jpg"},{"img":"e/0193.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1995_extracted_voted.jpg","kind":"distorted"},{"img":"e/0194.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/05066.jpg"},{"img":"e/0195.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2095_extracted_voted.jpg","kind":"distorted"},{"img":"e/0196.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_curved_image043.jpg"},{"img":"e/0197.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0095.jpg"},{"img":"e/0198.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_curved_image007.jpg"},{"img":"e/0199.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/tough/0508.jpg"},{"img":"e/0200.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0308.jpg"},{"img":"e/0201.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2083_extracted_voted.jpg","kind":"distorted"},{"img":"e/0202.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0320.jpg"},{"img":"e/0203.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_curved_image010.jpg"},{"img":"e/0204.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/tough/0092.jpg"},{"img":"e/0205.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_monitor_image017.jpg"},{"img":"e/0206.jpg","href":"https://huggingface.co/datasets/devmandan/broken-qr-codes-104/resolve/main/data/64.jpg"},{"img":"e/0207.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/07410.jpg"},{"img":"e/0208.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0288.jpg"},{"img":"e/0209.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_close_image027.jpg"},{"img":"e/0210.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0014.jpg"},{"img":"e/0211.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/tough/0301.jpg"},{"img":"e/0212.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_curved_image028.jpg"},{"img":"e/0213.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/02287.jpg"},{"img":"e/0214.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/02536.jpg"},{"img":"e/0215.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/tough/0031.jpg"},{"img":"e/0216.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_nominal_image010.jpg"},{"img":"e/0217.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2154_extracted_voted.jpg","kind":"distorted"},{"img":"e/0218.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2164_extracted_voted.jpg","kind":"distorted"},{"img":"e/0219.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_close_image025.jpg"},{"img":"e/0220.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0576.jpg"},{"img":"e/0221.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0006.jpg"},{"img":"e/0222.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/04007.jpg"},{"img":"e/0223.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/tough/0571.jpg"},{"img":"e/0224.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0073.jpg"},{"img":"e/0225.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_damaged_image001.jpg"},{"img":"e/0226.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/tough/0557.jpg"},{"img":"e/0227.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/05186.jpg"},{"img":"e/0228.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2244_extracted_voted.jpg","kind":"distorted"},{"img":"e/0229.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1840_extracted_voted.jpg","kind":"distorted"},{"img":"e/0230.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_noncompliant_image005.jpg"},{"img":"e/0231.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0532.jpg"},{"img":"e/0232.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1813_extracted_voted.jpg","kind":"distorted"},{"img":"e/0233.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/01592.jpg"},{"img":"e/0234.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_glare_image031.jpg"},{"img":"e/0235.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/tough/0221.jpg"},{"img":"e/0236.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_noncompliant_image008.jpg"},{"img":"e/0237.jpg","href":"https://huggingface.co/datasets/devmandan/broken-qr-codes-104/resolve/main/data/43.jpg"},{"img":"e/0238.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0525.jpg"},{"img":"e/0239.jpg","href":"https://huggingface.co/datasets/devmandan/broken-qr-codes-104/resolve/main/data/94.jpg"},{"img":"e/0240.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_glare_image026.jpg"},{"img":"e/0241.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/tough/0206.jpg"},{"img":"e/0242.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_damaged_image005.jpg"},{"img":"e/0243.jpg","href":"https://huggingface.co/datasets/devmandan/broken-qr-codes-104/resolve/main/data/12.jpg"},{"img":"e/0244.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/06378.jpg"},{"img":"e/0245.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0270.jpg"},{"img":"e/0246.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2009_extracted_voted.jpg","kind":"distorted"},{"img":"e/0247.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2141_extracted_voted.jpg","kind":"distorted"},{"img":"e/0248.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_curved_image037.jpg"},{"img":"e/0249.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1926_extracted_voted.jpg","kind":"distorted"},{"img":"e/0250.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/03152.jpg"},{"img":"e/0251.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/tough/0163.jpg"},{"img":"e/0252.jpg","href":"https://huggingface.co/datasets/devmandan/broken-qr-codes-104/resolve/main/data/45.jpg"},{"img":"e/0253.jpg","href":"https://huggingface.co/datasets/devmandan/broken-qr-codes-104/resolve/main/data/98.jpg"},{"img":"e/0254.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_noncompliant_image015.jpg"},{"img":"e/0255.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0339.jpg"},{"img":"e/0256.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/03140.jpg"},{"img":"e/0257.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1860_extracted_voted.jpg","kind":"distorted"},{"img":"e/0258.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/tough/0205.jpg"},{"img":"e/0259.jpg","href":"https://huggingface.co/datasets/devmandan/broken-qr-codes-104/resolve/main/data/7.jpg"},{"img":"e/0260.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0592.jpg"},{"img":"e/0261.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1868_extracted_voted.jpg","kind":"distorted"},{"img":"e/0262.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/07890.jpg"},{"img":"e/0263.jpg","href":"https://huggingface.co/datasets/devmandan/broken-qr-codes-104/resolve/main/data/99.jpg"},{"img":"e/0264.jpg","href":"https://huggingface.co/datasets/devmandan/broken-qr-codes-104/resolve/main/data/97.jpg"},{"img":"e/0265.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_damaged_image009.jpg"},{"img":"e/0266.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_glare_image024.jpg"},{"img":"e/0267.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2014_extracted_voted.jpg","kind":"distorted"},{"img":"e/0268.jpg","href":"https://huggingface.co/datasets/devmandan/broken-qr-codes-104/resolve/main/data/29.jpg"},{"img":"e/0269.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/tough/0234.jpg"},{"img":"e/0270.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0285.jpg"},{"img":"e/0271.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/07867.jpg"},{"img":"e/0272.jpg","href":"https://huggingface.co/datasets/devmandan/broken-qr-codes-104/resolve/main/data/77.jpg"},{"img":"e/0273.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/tough/0463.jpg"},{"img":"e/0274.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/03896.jpg"},{"img":"e/0275.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_glare_image015.jpg"},{"img":"e/0276.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1933_extracted_voted.jpg","kind":"distorted"},{"img":"e/0277.jpg","href":"https://huggingface.co/datasets/devmandan/broken-qr-codes-104/resolve/main/data/83.jpg"},{"img":"e/0278.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_damaged_image032.jpg"},{"img":"e/0279.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2190_extracted_one.jpg","kind":"distorted"},{"img":"e/0280.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2165_extracted_voted.jpg","kind":"distorted"},{"img":"e/0281.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/tough/0213.jpg"},{"img":"e/0282.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2194_extracted_one.jpg","kind":"distorted"},{"img":"e/0283.jpg","href":"https://huggingface.co/datasets/devmandan/broken-qr-codes-104/resolve/main/data/101.jpg"},{"img":"e/0284.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_damaged_image029.jpg"},{"img":"e/0285.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/01358.jpg"},{"img":"e/0286.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/07860.jpg"},{"img":"e/0287.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1939_extracted_one.jpg","kind":"distorted"},{"img":"e/0288.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/03158.jpg"},{"img":"e/0289.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/tough/0323.jpg"},{"img":"e/0290.jpg","href":"https://huggingface.co/datasets/devmandan/broken-qr-codes-104/resolve/main/data/36.jpg"},{"img":"e/0291.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1974_extracted_one.jpg","kind":"distorted"},{"img":"e/0292.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_damaged_image008.jpg"},{"img":"e/0293.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/08065.jpg"},{"img":"e/0294.jpg","href":"https://huggingface.co/datasets/devmandan/broken-qr-codes-104/resolve/main/data/42.jpg"},{"img":"e/0295.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2077_extracted_voted.jpg","kind":"distorted"},{"img":"e/0296.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/tough/0589.jpg"},{"img":"e/0297.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/07194.jpg"},{"img":"e/0298.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_curved_image034.jpg"},{"img":"e/0299.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2106_extracted_voted.jpg","kind":"distorted"},{"img":"e/0300.jpg","href":"https://huggingface.co/datasets/devmandan/broken-qr-codes-104/resolve/main/data/85.jpg"},{"img":"e/0301.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/04063.jpg"},{"img":"e/0302.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1914_extracted_one.jpg","kind":"distorted"},{"img":"e/0303.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_damaged_image010.jpg"},{"img":"e/0304.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_glare_image011.jpg"},{"img":"e/0305.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/09829.jpg"},{"img":"e/0306.jpg","href":"https://huggingface.co/datasets/devmandan/broken-qr-codes-104/resolve/main/data/55.jpg"},{"img":"e/0307.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/08502.jpg"},{"img":"e/0308.jpg","href":"https://huggingface.co/datasets/devmandan/broken-qr-codes-104/resolve/main/data/104.jpg"},{"img":"e/0309.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1733_extracted_voted.jpg","kind":"distorted"},{"img":"e/0310.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1678_extracted_voted.jpg","kind":"distorted"},{"img":"e/0311.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_blurred_image010.jpg"},{"img":"e/0312.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_damaged_image027.jpg"},{"img":"e/0313.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/06903.jpg"},{"img":"e/0314.jpg","href":"https://huggingface.co/datasets/devmandan/broken-qr-codes-104/resolve/main/data/65.jpg"},{"img":"e/0315.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/tough/0151.jpg"},{"img":"e/0316.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_glare_image034.jpg"},{"img":"e/0317.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1954_extracted_one.jpg","kind":"distorted"},{"img":"e/0318.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2103_extracted_voted.jpg","kind":"distorted"},{"img":"e/0319.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/08007.jpg"},{"img":"e/0320.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/tough/0555.jpg"},{"img":"e/0321.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1686_extracted_voted.jpg","kind":"distorted"},{"img":"e/0322.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1528_extracted_one.jpg","kind":"distorted"},{"img":"e/0323.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1930_extracted_one.jpg","kind":"distorted"},{"img":"e/0324.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0524.jpg"},{"img":"e/0325.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1945_extracted_voted.jpg","kind":"distorted"},{"img":"e/0326.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_glare_image041.jpg"},{"img":"e/0327.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/08758.jpg"},{"img":"e/0328.jpg","href":"https://huggingface.co/datasets/devmandan/broken-qr-codes-104/resolve/main/data/19.jpg"},{"img":"e/0329.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2066_extracted_voted.jpg","kind":"distorted"},{"img":"e/0330.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_glare_image033.jpg"},{"img":"e/0331.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/tough/0114.jpg"},{"img":"e/0332.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/tough/0060.jpg"},{"img":"e/0333.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/07336.jpg"},{"img":"e/0334.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1856_extracted_voted.jpg","kind":"distorted"},{"img":"e/0335.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/everyday/0076.jpg"},{"img":"e/0336.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_glare_image023.jpg"},{"img":"e/0337.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/tough/0108.jpg"},{"img":"e/0338.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1998_extracted_voted.jpg","kind":"distorted"},{"img":"e/0339.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/06781.jpg"},{"img":"e/0340.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/04991.jpg"},{"img":"e/0341.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/06500.jpg"},{"img":"e/0342.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_damaged_image011.jpg"},{"img":"e/0343.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/09061.jpg"},{"img":"e/0344.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/08370.jpg"},{"img":"e/0345.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/05190.jpg"},{"img":"e/0346.jpg","href":"https://huggingface.co/datasets/devmandan/broken-qr-codes-104/resolve/main/data/0.jpg"},{"img":"e/0347.jpg","href":"https://huggingface.co/datasets/devmandan/broken-qr-codes-104/resolve/main/data/15.jpg"},{"img":"e/0348.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2139_extracted_one.jpg","kind":"distorted"},{"img":"e/0349.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/08751.jpg"},{"img":"e/0350.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1753_extracted_voted.jpg","kind":"distorted"},{"img":"e/0351.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/07650.jpg"},{"img":"e/0352.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_glare_image014.jpg"},{"img":"e/0353.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_glare_image012.jpg"},{"img":"e/0354.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/08269.jpg"},{"img":"e/0355.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1751_extracted_voted.jpg","kind":"distorted"},{"img":"e/0356.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1824_extracted_one.jpg","kind":"distorted"},{"img":"e/0357.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1738_extracted_one.jpg","kind":"distorted"},{"img":"e/0358.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/05903.jpg"},{"img":"e/0359.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/tough/0111.jpg"},{"img":"e/0360.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/tough/0001.jpg"},{"img":"e/0361.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1826_extracted_one.jpg","kind":"distorted"},{"img":"e/0362.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_glare_image001.jpg"},{"img":"e/0363.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/09619.jpg"},{"img":"e/0364.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1795_extracted_voted.jpg","kind":"distorted"},{"img":"e/0365.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/09342.jpg"},{"img":"e/0366.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/tough/0593.jpg"},{"img":"e/0367.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2020_extracted_one.jpg","kind":"distorted"},{"img":"e/0368.jpg","href":"https://huggingface.co/datasets/devmandan/broken-qr-codes-104/resolve/main/data/13.jpg"},{"img":"e/0369.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/tough/0590.jpg"},{"img":"e/0370.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1798_extracted_one.jpg","kind":"distorted"},{"img":"e/0371.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/07242.jpg"},{"img":"e/0372.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/09194.jpg"},{"img":"e/0373.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1739_extracted_voted.jpg","kind":"distorted"},{"img":"e/0374.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/07191.jpg"},{"img":"e/0375.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1980_extracted_one.jpg","kind":"distorted"},{"img":"e/0376.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/07564.jpg"},{"img":"e/0377.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/09680.jpg"},{"img":"e/0378.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/09861.jpg"},{"img":"e/0379.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2158_extracted_one.jpg","kind":"distorted"},{"img":"e/0380.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2045_extracted_voted.jpg","kind":"distorted"},{"img":"e/0381.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/2104_extracted_one.jpg","kind":"distorted"},{"img":"e/0382.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/08494.jpg"},{"img":"e/0383.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1886_extracted_voted.jpg","kind":"distorted"},{"img":"e/0384.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1781_extracted_voted.jpg","kind":"distorted"},{"img":"e/0385.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1776_extracted_voted.jpg","kind":"distorted"},{"img":"e/0386.jpg","href":"https://huggingface.co/datasets/devmandan/broken-qr-codes-104/resolve/main/data/49.jpg"},{"img":"e/0387.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/09949.jpg"},{"img":"e/0388.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/09288.jpg"},{"img":"e/0389.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1736_extracted_voted.jpg","kind":"distorted"},{"img":"e/0390.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/09391.jpg"},{"img":"e/0391.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/06603.jpg"},{"img":"e/0392.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1709_extracted_voted.jpg","kind":"distorted"},{"img":"e/0393.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/09280.jpg"},{"img":"e/0394.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1885_extracted_one.jpg","kind":"distorted"},{"img":"e/0395.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/08659.jpg"},{"img":"e/0396.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1805_extracted_voted.jpg","kind":"distorted"},{"img":"e/0397.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1823_extracted_voted.jpg","kind":"distorted"},{"img":"e/0398.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/08049.jpg"},{"img":"e/0399.jpg","href":"https://huggingface.co/datasets/devmandan/boofcv-qr-singles/resolve/main/data/detection_curved_image032.jpg"},{"img":"e/0400.jpg","href":"https://huggingface.co/datasets/devmandan/broken-qr-codes-104/resolve/main/data/22.jpg"},{"img":"e/0401.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1516_extracted_voted.jpg","kind":"distorted"},{"img":"e/0402.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/09148.jpg"},{"img":"e/0403.jpg","href":"https://huggingface.co/datasets/devmandan/qr-scan-difficulty/resolve/main/tiers/tough/0023.jpg"},{"img":"e/0404.jpg","href":"https://huggingface.co/datasets/devmandan/broken-qr-codes-104/resolve/main/data/92.jpg"},{"img":"e/0405.jpg","href":"https://huggingface.co/datasets/devmandan/qr-dn1.0/resolve/main/images/test/1698_extracted_one.jpg","kind":"distorted"},{"img":"e/0406.jpg","href":"https://huggingface.co/datasets/devmandan/syn10k-huawei-barcodes/resolve/main/images/warp2014/04599.jpg"}],"ladders":[{"key":"size","name":"Square size","about":"How many pixels of the camera image cover one small square of the code. Printing bigger or standing closer raises it.","how":"Module pitch in pixels of a 1280-px-wide image.","breaks":"Reading the squares: each square has to cover a few camera pixels to stand apart. Below about two, neighbouring squares merge, and so do the corner squares\u2019 1:1:3:1:1 stripes.","levels":[{"label":"8 camera pixels per square","short":"8","img":"l/size_00.jpg","n":80,"reads":[80,80,78,80,80,80,80,80]},{"label":"6 camera pixels per square","short":"6","img":"l/size_01.jpg","n":80,"reads":[80,80,79,78,80,79,80,80]},{"label":"5 camera pixels per square","short":"5","img":"l/size_02.jpg","n":80,"reads":[80,80,79,79,80,77,80,80]},{"label":"4 camera pixels per square","short":"4","img":"l/size_03.jpg","n":80,"reads":[80,80,62,77,80,69,80,80]},{"label":"3.5 camera pixels per square","short":"3.5","img":"l/size_04.jpg","n":80,"reads":[80,80,58,78,80,60,80,80]},{"label":"3 camera pixels per square","short":"3","img":"l/size_05.jpg","n":80,"reads":[80,80,18,76,80,50,80,80]},{"label":"2.6 camera pixels per square","short":"2.6","img":"l/size_06.jpg","n":80,"reads":[80,80,4,71,80,38,80,80]},{"label":"2.3 camera pixels per square","short":"2.3","img":"l/size_07.jpg","n":80,"reads":[80,78,8,53,79,35,79,80]},{"label":"2 camera pixels per square","short":"2","img":"l/size_08.jpg","n":80,"reads":[78,65,5,30,77,4,79,80]},{"label":"1.8 camera pixels per square","short":"1.8","img":"l/size_09.jpg","n":80,"reads":[69,64,1,7,63,1,80,80]},{"label":"1.6 camera pixels per square","short":"1.6","img":"l/size_10.jpg","n":80,"reads":[37,52,1,0,27,4,70,79]},{"label":"1.4 camera pixels per square","short":"1.4","img":"l/size_11.jpg","n":80,"reads":[9,31,0,0,0,0,0,65]},{"label":"1.2 camera pixels per square","short":"1.2","img":"l/size_12.jpg","n":80,"reads":[0,8,0,0,0,0,0,18]},{"label":"1 camera pixels per square","short":"1","img":"l/size_13.jpg","n":80,"reads":[0,0,0,0,0,0,0,1]}],"window":360},{"key":"version","name":"Amount of data","about":"More data needs more squares: version 1 is 21 squares across, version 40 is 177. Here the printed size stays the same, so each square shrinks.","how":"Code 200 px wide in a 1280-px image, quiet zone included; the payload fills about 90% of each version at error-correction level M.","breaks":"Reading the squares: each square gets fewer pixels, as in Square size. Fitting the grid: a bigger grid is harder to count; ZXing, in Android\u2019s Settings, estimates it from the corner squares\u2019 spacing, so it misses big codes even with large squares.","levels":[{"label":"Version 1: 6.9 camera pixels per square","short":"v1","img":"l/version_00.jpg","n":80,"reads":[80,80,80,79,80,80,80,80]},{"label":"Version 2: 6.1 camera pixels per square","short":"v2","img":"l/version_01.jpg","n":80,"reads":[80,80,80,80,80,80,80,80]},{"label":"Version 3: 5.4 camera pixels per square","short":"v3","img":"l/version_02.jpg","n":80,"reads":[80,80,79,79,80,79,80,80]},{"label":"Version 4: 4.9 camera pixels per square","short":"v4","img":"l/version_03.jpg","n":80,"reads":[80,80,77,79,80,73,80,80]},{"label":"Version 5: 4.4 camera pixels per square","short":"v5","img":"l/version_04.jpg","n":80,"reads":[80,80,71,80,80,72,80,80]},{"label":"Version 6: 4.1 camera pixels per square","short":"v6","img":"l/version_05.jpg","n":80,"reads":[80,80,68,78,80,73,80,80]},{"label":"Version 8: 3.5 camera pixels per square","short":"v8","img":"l/version_06.jpg","n":80,"reads":[80,80,55,80,80,58,80,80]},{"label":"Version 10: 3.1 camera pixels per square","short":"v10","img":"l/version_07.jpg","n":80,"reads":[80,77,23,78,80,51,80,80]},{"label":"Version 13: 2.6 camera pixels per square","short":"v13","img":"l/version_08.jpg","n":80,"reads":[80,80,11,70,78,15,68,80]},{"label":"Version 15: 2.4 camera pixels per square","short":"v15","img":"l/version_09.jpg","n":80,"reads":[76,79,2,18,76,22,49,80]},{"label":"Version 18: 2.1 camera pixels per square","short":"v18","img":"l/version_10.jpg","n":80,"reads":[75,77,0,0,69,2,28,72]},{"label":"Version 21: 1.8 camera pixels per square","short":"v21","img":"l/version_11.jpg","n":80,"reads":[70,76,0,0,38,0,6,71]},{"label":"Version 25: 1.6 camera pixels per square","short":"v25","img":"l/version_12.jpg","n":80,"reads":[40,69,0,0,19,1,0,17]},{"label":"Version 30: 1.4 camera pixels per square","short":"v30","img":"l/version_13.jpg","n":80,"reads":[0,61,0,0,0,0,0,0]},{"label":"Version 40: 1.1 camera pixels per square","short":"v40","img":"l/version_14.jpg","n":80,"reads":[0,0,0,0,0,0,0,0]}],"window":720},{"key":"version_big","name":"More data, printed bigger","about":"The same codes, printed bigger as the data grows, so every square keeps 6 camera pixels. Only the print size changes, not the data.","how":"The version ladder's codes and scenes at 6 px per module in a 1280-px image. It stops at version 21: bigger codes, turned at their random angle, no longer fit inside a 1280 \u00d7 960 picture.","breaks":"Fitting the grid: only the grid\u2019s size is left, about 100 squares to count and place across. Most scanners manage; Android Settings\u2019 scanner and OpenCV\u2019s original detector still miss many.","levels":[{"label":"Version 1: 6 camera pixels per square","short":"v1","img":"l/version_big_00.jpg","n":80,"reads":[80,79,80,76,80,80,80,80]},{"label":"Version 2: 6 camera pixels per square","short":"v2","img":"l/version_big_01.jpg","n":80,"reads":[80,80,79,80,80,79,79,80]},{"label":"Version 3: 6 camera pixels per square","short":"v3","img":"l/version_big_02.jpg","n":80,"reads":[80,80,80,80,80,78,80,80]},{"label":"Version 4: 6 camera pixels per square","short":"v4","img":"l/version_big_03.jpg","n":80,"reads":[80,80,78,80,80,78,80,80]},{"label":"Version 5: 6 camera pixels per square","short":"v5","img":"l/version_big_04.jpg","n":80,"reads":[80,80,76,77,80,79,80,80]},{"label":"Version 6: 6 camera pixels per square","short":"v6","img":"l/version_big_05.jpg","n":80,"reads":[80,80,74,80,80,79,80,80]},{"label":"Version 8: 6 camera pixels per square","short":"v8","img":"l/version_big_06.jpg","n":80,"reads":[80,80,77,80,80,77,80,80]},{"label":"Version 10: 6 camera pixels per square","short":"v10","img":"l/version_big_07.jpg","n":80,"reads":[80,80,77,80,80,76,80,80]},{"label":"Version 13: 6 camera pixels per square","short":"v13","img":"l/version_big_08.jpg","n":80,"reads":[80,80,73,80,80,74,80,80]},{"label":"Version 15: 6 camera pixels per square","short":"v15","img":"l/version_big_09.jpg","n":80,"reads":[80,77,77,80,80,70,80,80]},{"label":"Version 18: 6 camera pixels per square","short":"v18","img":"l/version_big_10.jpg","n":80,"reads":[80,77,62,80,80,57,80,80]},{"label":"Version 21: 6 camera pixels per square","short":"v21","img":"l/version_big_11.jpg","n":80,"reads":[80,79,24,80,80,57,79,80]}],"window":720},{"key":"blur","name":"Focus","about":"A camera out of focus. Each square is 8 camera pixels wide here.","how":"Gaussian blur, sigma in pixels of a 1280-px-wide image.","breaks":"Telling dark from light: blur spreads each square into its neighbours. Near half a square of blur, the corner squares\u2019 stripes and the squares themselves run together.","levels":[{"label":"Sharp","short":"0","img":"l/blur_00.jpg","n":80,"reads":[80,80,78,80,80,80,80,80]},{"label":"Blur 0.5 px, 6% of a square","short":"0.5","img":"l/blur_01.jpg","n":80,"reads":[80,80,78,80,80,80,80,80]},{"label":"Blur 1 px, 12% of a square","short":"1","img":"l/blur_02.jpg","n":80,"reads":[80,80,80,80,80,78,80,80]},{"label":"Blur 1.5 px, 19% of a square","short":"1.5","img":"l/blur_03.jpg","n":80,"reads":[80,80,80,80,80,79,80,80]},{"label":"Blur 2 px, 25% of a square","short":"2","img":"l/blur_04.jpg","n":80,"reads":[80,80,78,79,80,75,80,80]},{"label":"Blur 2.5 px, 31% of a square","short":"2.5","img":"l/blur_05.jpg","n":80,"reads":[80,80,76,77,80,60,80,80]},{"label":"Blur 3 px, 38% of a square","short":"3","img":"l/blur_06.jpg","n":80,"reads":[80,80,54,54,80,20,80,80]},{"label":"Blur 3.5 px, 44% of a square","short":"3.5","img":"l/blur_07.jpg","n":80,"reads":[78,80,16,12,80,32,49,80]},{"label":"Blur 4 px, 50% of a square","short":"4","img":"l/blur_08.jpg","n":80,"reads":[31,76,0,0,77,27,18,80]},{"label":"Blur 4.5 px, 56% of a square","short":"4.5","img":"l/blur_09.jpg","n":80,"reads":[0,27,0,0,33,0,0,74]},{"label":"Blur 5 px, 62% of a square","short":"5","img":"l/blur_10.jpg","n":80,"reads":[0,0,0,0,0,0,0,8]},{"label":"Blur 6 px, 75% of a square","short":"6","img":"l/blur_11.jpg","n":80,"reads":[0,0,0,0,0,0,0,0]}],"window":360},{"key":"contrast","name":"Faded ink","about":"How much darker the ink is than the paper, as a share of the full step from black to white.","how":"(paper - ink) / 255, with the paper at level 210.","breaks":"Telling dark from light: with little difference between ink and paper, noise and uneven light push squares to the wrong side of the line between dark and light.","levels":[{"label":"Contrast 75%","short":"75%","img":"l/contrast_00.jpg","n":80,"reads":[80,80,78,80,80,78,80,80]},{"label":"Contrast 59%","short":"59%","img":"l/contrast_01.jpg","n":80,"reads":[80,80,78,80,80,78,79,80]},{"label":"Contrast 43%","short":"43%","img":"l/contrast_02.jpg","n":80,"reads":[80,80,77,80,80,78,80,80]},{"label":"Contrast 35%","short":"35%","img":"l/contrast_03.jpg","n":80,"reads":[80,80,78,80,80,78,80,80]},{"label":"Contrast 31%","short":"31%","img":"l/contrast_04.jpg","n":80,"reads":[80,80,79,80,80,74,80,80]},{"label":"Contrast 27%","short":"27%","img":"l/contrast_05.jpg","n":80,"reads":[80,80,77,80,80,69,80,80]},{"label":"Contrast 24%","short":"24%","img":"l/contrast_06.jpg","n":80,"reads":[80,80,78,80,80,31,80,80]},{"label":"Contrast 18%","short":"18%","img":"l/contrast_07.jpg","n":80,"reads":[80,76,77,80,80,0,80,80]},{"label":"Contrast 14%","short":"14%","img":"l/contrast_08.jpg","n":80,"reads":[80,74,78,80,80,0,80,80]},{"label":"Contrast 11%","short":"11%","img":"l/contrast_09.jpg","n":80,"reads":[80,68,79,80,80,0,80,80]},{"label":"Contrast 8%","short":"8%","img":"l/contrast_10.jpg","n":80,"reads":[72,58,67,58,80,0,40,80]},{"label":"Contrast 6%","short":"6%","img":"l/contrast_11.jpg","n":80,"reads":[23,40,47,11,79,0,0,63]},{"label":"Contrast 4%","short":"4%","img":"l/contrast_12.jpg","n":80,"reads":[0,11,11,0,58,0,0,5]}],"window":360},{"key":"tilt","name":"Tilt","about":"The code turned away from facing the camera.","how":"Rotation about a random axis in the code's plane; pinhole camera, focal length 0.8 x image width.","breaks":"Fitting the grid: tilt squeezes the squares on the far side. Scanners undo the perspective from the corner squares and the smaller alignment square.","levels":[{"label":"Head-on","short":"0\u00b0","img":"l/tilt_00.jpg","n":80,"reads":[80,80,76,80,80,79,80,80]},{"label":"Tilted 10\u00b0","short":"10\u00b0","img":"l/tilt_01.jpg","n":80,"reads":[80,80,77,80,80,77,79,80]},{"label":"Tilted 20\u00b0","short":"20\u00b0","img":"l/tilt_02.jpg","n":80,"reads":[80,80,79,80,80,74,80,80]},{"label":"Tilted 30\u00b0","short":"30\u00b0","img":"l/tilt_03.jpg","n":80,"reads":[80,78,79,80,80,75,80,80]},{"label":"Tilted 40\u00b0","short":"40\u00b0","img":"l/tilt_04.jpg","n":80,"reads":[80,76,78,80,80,63,80,80]},{"label":"Tilted 50\u00b0","short":"50\u00b0","img":"l/tilt_05.jpg","n":80,"reads":[80,56,44,70,79,34,80,80]},{"label":"Tilted 55\u00b0","short":"55\u00b0","img":"l/tilt_06.jpg","n":80,"reads":[70,31,14,47,76,18,80,80]},{"label":"Tilted 60\u00b0","short":"60\u00b0","img":"l/tilt_07.jpg","n":80,"reads":[58,18,5,34,49,15,80,79]},{"label":"Tilted 65\u00b0","short":"65\u00b0","img":"l/tilt_08.jpg","n":80,"reads":[51,10,0,19,24,8,75,75]},{"label":"Tilted 70\u00b0","short":"70\u00b0","img":"l/tilt_09.jpg","n":80,"reads":[44,2,0,12,7,4,61,55]},{"label":"Tilted 75\u00b0","short":"75\u00b0","img":"l/tilt_10.jpg","n":80,"reads":[28,0,0,3,2,1,37,35]}],"window":360},{"key":"curve","name":"Curved surface","about":"Printed on a bottle or a can. Smaller numbers are tighter curves.","how":"Wrapped round a vertical cylinder seen head-on; radius in code widths.","breaks":"Fitting the grid: a curved code isn\u2019t flat, so a single perspective correction can\u2019t place every square.","levels":[{"label":"Flat","short":"flat","img":"l/curve_00.jpg","n":80,"reads":[80,79,78,80,80,80,80,80]},{"label":"Bend radius 3\u00d7 the code\u2019s width","short":"3","img":"l/curve_01.jpg","n":80,"reads":[80,79,79,80,80,78,80,80]},{"label":"Bend radius 2\u00d7 the code\u2019s width","short":"2","img":"l/curve_02.jpg","n":80,"reads":[80,79,79,80,80,76,80,80]},{"label":"Bend radius 1.5\u00d7 the code\u2019s width","short":"1.5","img":"l/curve_03.jpg","n":80,"reads":[80,79,80,80,80,76,80,80]},{"label":"Bend radius 1.2\u00d7 the code\u2019s width","short":"1.2","img":"l/curve_04.jpg","n":80,"reads":[80,79,79,79,80,77,80,80]},{"label":"Bend radius 1\u00d7 the code\u2019s width","short":"1","img":"l/curve_05.jpg","n":80,"reads":[80,80,80,80,80,79,80,80]},{"label":"Bend radius 0.85\u00d7 the code\u2019s width","short":"0.85","img":"l/curve_06.jpg","n":80,"reads":[80,80,74,80,80,79,80,80]},{"label":"Bend radius 0.7\u00d7 the code\u2019s width","short":"0.7","img":"l/curve_07.jpg","n":80,"reads":[80,80,31,8,80,79,80,80]},{"label":"Bend radius 0.6\u00d7 the code\u2019s width","short":"0.6","img":"l/curve_08.jpg","n":80,"reads":[59,80,0,0,80,53,80,80]},{"label":"Bend radius 0.55\u00d7 the code\u2019s width","short":"0.55","img":"l/curve_09.jpg","n":80,"reads":[2,70,0,0,69,2,75,78]}],"window":360},{"key":"damage","name":"Smudges","about":"Dirt or wear on the pattern, kept off the three big corner squares.","how":"Light or dark elliptical blobs covering this share of the symbol, clear of the finder patterns and their borders; each step adds blobs to the one before.","breaks":"Error correction: smudges turn squares the wrong shade, and Reed\u2013Solomon correction repairs them up to its limit. These codes use level M, the most common, which can restore about 15% of the data.","levels":[{"label":"Clean","short":"0%","img":"l/damage_00.jpg","n":80,"reads":[80,80,78,80,80,80,80,80]},{"label":"2% of the code smudged, corner squares clear","short":"2%","img":"l/damage_01.jpg","n":80,"reads":[80,79,65,67,80,68,76,80]},{"label":"4% of the code smudged, corner squares clear","short":"4%","img":"l/damage_02.jpg","n":80,"reads":[76,78,58,62,77,63,71,78]},{"label":"6% of the code smudged, corner squares clear","short":"6%","img":"l/damage_03.jpg","n":80,"reads":[63,67,40,45,68,44,57,69]},{"label":"8% of the code smudged, corner squares clear","short":"8%","img":"l/damage_04.jpg","n":80,"reads":[18,23,7,11,25,7,18,29]},{"label":"10% of the code smudged, corner squares clear","short":"10%","img":"l/damage_05.jpg","n":80,"reads":[1,3,0,0,2,0,0,1]},{"label":"12% of the code smudged, corner squares clear","short":"12%","img":"l/damage_06.jpg","n":80,"reads":[0,0,0,0,0,0,0,0]},{"label":"15% of the code smudged, corner squares clear","short":"15%","img":"l/damage_07.jpg","n":80,"reads":[0,0,0,0,0,0,0,0]},{"label":"20% of the code smudged, corner squares clear","short":"20%","img":"l/damage_08.jpg","n":80,"reads":[0,0,0,0,0,0,0,0]},{"label":"25% of the code smudged, corner squares clear","short":"25%","img":"l/damage_09.jpg","n":80,"reads":[0,0,0,0,0,0,0,0]}],"window":360},{"key":"corner","name":"Corner square","about":"One of the three big corner squares, partly covered.","how":"Blobs clipped to one 7 x 7-module finder pattern, covering this share of it.","breaks":"Finding the code: scanners find a code by its three corner squares, which error correction doesn\u2019t protect, so a covered one stops them before correction can help.","levels":[{"label":"Clean","short":"0%","img":"l/corner_00.jpg","n":80,"reads":[80,80,78,80,80,79,80,80]},{"label":"10% of one corner square covered","short":"10%","img":"l/corner_01.jpg","n":80,"reads":[3,52,22,9,45,5,75,79]},{"label":"20% of one corner square covered","short":"20%","img":"l/corner_02.jpg","n":80,"reads":[1,38,10,0,32,1,63,76]},{"label":"30% of one corner square covered","short":"30%","img":"l/corner_03.jpg","n":80,"reads":[0,16,1,0,19,0,47,72]},{"label":"40% of one corner square covered","short":"40%","img":"l/corner_04.jpg","n":80,"reads":[0,10,0,0,12,0,29,68]},{"label":"50% of one corner square covered","short":"50%","img":"l/corner_05.jpg","n":80,"reads":[0,2,0,0,5,0,19,52]},{"label":"60% of one corner square covered","short":"60%","img":"l/corner_06.jpg","n":80,"reads":[0,1,0,0,0,0,9,50]},{"label":"80% of one corner square covered","short":"80%","img":"l/corner_07.jpg","n":80,"reads":[0,1,0,0,0,0,9,40]},{"label":"100% of one corner square covered","short":"100%","img":"l/corner_08.jpg","n":80,"reads":[0,0,0,0,0,0,0,31]}],"window":360},{"key":"glare","name":"Glare","about":"A bright reflection over the code.","how":"Gaussian highlight, sigma 0.22 x code width; at 100% its centre saturates.","breaks":"Telling dark from light: glare washes squares out to white, and on a corner square it hides the code.","levels":[{"label":"No glare","short":"0%","img":"l/glare_00.jpg","n":80,"reads":[80,80,78,80,80,79,80,80]},{"label":"Glare 20%","short":"20%","img":"l/glare_01.jpg","n":80,"reads":[80,80,78,80,80,79,80,80]},{"label":"Glare 35%","short":"35%","img":"l/glare_02.jpg","n":80,"reads":[80,80,79,80,80,79,79,80]},{"label":"Glare 50%","short":"50%","img":"l/glare_03.jpg","n":80,"reads":[80,79,79,80,80,79,79,80]},{"label":"Glare 65%","short":"65%","img":"l/glare_04.jpg","n":80,"reads":[80,79,79,80,80,79,79,80]},{"label":"Glare 80%","short":"80%","img":"l/glare_05.jpg","n":80,"reads":[79,79,76,77,80,77,79,80]},{"label":"Glare 90%","short":"90%","img":"l/glare_06.jpg","n":80,"reads":[79,78,70,68,80,49,80,80]},{"label":"Glare 100%","short":"100%","img":"l/glare_07.jpg","n":80,"reads":[43,76,61,56,78,0,68,79]},{"label":"Glare 125%","short":"125%","img":"l/glare_08.jpg","n":80,"reads":[0,3,2,2,6,0,2,8]},{"label":"Glare 150%","short":"150%","img":"l/glare_09.jpg","n":80,"reads":[0,0,0,0,0,0,0,0]}],"window":360},{"key":"shadow","name":"Shadow","about":"Part of the code in shadow.","how":"Soft-edged shadow over part of the code, darkening it by this share.","breaks":"Telling dark from light: a shadow\u2019s edge across the code defeats a single threshold for the whole picture; scanners that judge dark and light locally cope better.","levels":[{"label":"No shadow","short":"0%","img":"l/shadow_00.jpg","n":80,"reads":[80,80,79,80,80,80,80,80]},{"label":"Shadow 15% darker","short":"15%","img":"l/shadow_01.jpg","n":80,"reads":[80,80,78,80,80,80,80,80]},{"label":"Shadow 30% darker","short":"30%","img":"l/shadow_02.jpg","n":80,"reads":[80,80,78,80,80,80,80,80]},{"label":"Shadow 45% darker","short":"45%","img":"l/shadow_03.jpg","n":80,"reads":[80,78,78,80,80,80,79,80]},{"label":"Shadow 60% darker","short":"60%","img":"l/shadow_04.jpg","n":80,"reads":[80,75,76,80,80,80,80,80]},{"label":"Shadow 75% darker","short":"75%","img":"l/shadow_05.jpg","n":80,"reads":[76,63,57,61,80,76,78,80]},{"label":"Shadow 85% darker","short":"85%","img":"l/shadow_06.jpg","n":80,"reads":[61,43,18,56,80,63,33,80]},{"label":"Shadow 92% darker","short":"92%","img":"l/shadow_07.jpg","n":80,"reads":[0,19,20,33,73,2,0,74]}],"window":360},{"key":"noise","name":"Low light","about":"Grain from a dim scene or a small camera sensor.","how":"Gaussian noise with a sigma of 1 plus this many grey levels (of 255), plus brightness-dependent noise.","breaks":"Telling dark from light: grain flips pixels, breaking the corner squares\u2019 stripes and the squares\u2019 shades.","levels":[{"label":"No noise","short":"0","img":"l/noise_00.jpg","n":80,"reads":[80,80,78,80,80,78,79,80]},{"label":"Noise 5","short":"5","img":"l/noise_01.jpg","n":80,"reads":[80,80,78,80,80,78,78,80]},{"label":"Noise 10","short":"10","img":"l/noise_02.jpg","n":80,"reads":[80,80,74,80,80,74,80,80]},{"label":"Noise 15","short":"15","img":"l/noise_03.jpg","n":80,"reads":[80,80,76,80,80,77,79,80]},{"label":"Noise 20","short":"20","img":"l/noise_04.jpg","n":80,"reads":[80,80,74,80,80,75,78,80]},{"label":"Noise 30","short":"30","img":"l/noise_05.jpg","n":80,"reads":[80,78,71,78,80,75,78,80]},{"label":"Noise 40","short":"40","img":"l/noise_06.jpg","n":80,"reads":[80,77,68,75,80,68,78,80]},{"label":"Noise 50","short":"50","img":"l/noise_07.jpg","n":80,"reads":[79,79,60,72,80,65,78,80]},{"label":"Noise 60","short":"60","img":"l/noise_08.jpg","n":80,"reads":[79,78,41,50,80,15,79,80]}],"window":360},{"key":"jpeg","name":"JPEG compression","about":"Image compression, as when a photo is saved small.","how":"JPEG quality setting of the saved capture (libjpeg scale).","breaks":"Telling dark from light: heavy compression smears edges in blocks of 8 \u00d7 8 pixels and shifts the squares\u2019 shades.","levels":[{"label":"JPEG quality 95","short":"q95","img":"l/jpeg_00.jpg","n":80,"reads":[80,80,78,80,80,79,80,80]},{"label":"JPEG quality 75","short":"q75","img":"l/jpeg_01.jpg","n":80,"reads":[80,80,78,80,80,79,80,80]},{"label":"JPEG quality 50","short":"q50","img":"l/jpeg_02.jpg","n":80,"reads":[80,80,78,80,80,79,80,80]},{"label":"JPEG quality 35","short":"q35","img":"l/jpeg_03.jpg","n":80,"reads":[80,80,77,80,80,79,80,80]},{"label":"JPEG quality 25","short":"q25","img":"l/jpeg_04.jpg","n":80,"reads":[80,80,77,80,80,79,80,80]},{"label":"JPEG quality 18","short":"q18","img":"l/jpeg_05.jpg","n":80,"reads":[80,80,79,80,80,79,80,80]},{"label":"JPEG quality 12","short":"q12","img":"l/jpeg_06.jpg","n":80,"reads":[80,80,77,80,80,79,80,80]},{"label":"JPEG quality 8","short":"q8","img":"l/jpeg_07.jpg","n":80,"reads":[80,80,78,80,80,79,80,80]},{"label":"JPEG quality 5","short":"q5","img":"l/jpeg_08.jpg","n":80,"reads":[80,80,79,80,80,78,80,80]}],"window":360},{"key":"quiet","name":"Margin","about":"The blank border round the code, in squares.","how":"Paper margin in modules; cluttered background beyond it.","breaks":"Finding the code: scanners find the corner squares by their stripes, and clutter right beside the code adds stripes that don\u2019t fit. The standard asks for a margin of 4 squares.","levels":[{"label":"4-square margin","short":"4","img":"l/quiet_00.jpg","n":80,"reads":[80,80,77,80,80,79,80,80]},{"label":"3-square margin","short":"3","img":"l/quiet_01.jpg","n":80,"reads":[80,80,79,80,80,79,80,80]},{"label":"2-square margin","short":"2","img":"l/quiet_02.jpg","n":80,"reads":[80,80,78,80,80,79,80,80]},{"label":"1.5-square margin","short":"1.5","img":"l/quiet_03.jpg","n":80,"reads":[80,80,74,80,80,79,80,80]},{"label":"1-square margin","short":"1","img":"l/quiet_04.jpg","n":80,"reads":[80,80,77,80,80,79,80,80]},{"label":"0.5-square margin","short":"0.5","img":"l/quiet_05.jpg","n":80,"reads":[80,80,78,80,80,79,79,80]},{"label":"No margin","short":"0","img":"l/quiet_06.jpg","n":80,"reads":[0,71,0,0,80,0,7,80]}],"window":360},{"key":"dots","name":"Round dots","about":"The small squares drawn as round dots, as many styled codes do.","how":"Dot diameter as a share of the module; finder patterns drawn solid.","breaks":"Reading the squares: round dots leave light gaps, so less of each dark square is dark. The corner squares stay solid here, so this tests reading the squares, not finding the code.","levels":[{"label":"Solid squares","short":"\u25a0","img":"l/dots_00.jpg","n":80,"reads":[80,80,80,80,80,80,80,80]},{"label":"Round dots, 90% of a square wide","short":"90%","img":"l/dots_01.jpg","n":80,"reads":[80,77,80,80,80,70,80,80]},{"label":"Round dots, 80% of a square wide","short":"80%","img":"l/dots_02.jpg","n":80,"reads":[80,76,80,78,78,50,80,80]},{"label":"Round dots, 70% of a square wide","short":"70%","img":"l/dots_03.jpg","n":80,"reads":[80,72,80,77,77,52,80,80]},{"label":"Round dots, 60% of a square wide","short":"60%","img":"l/dots_04.jpg","n":80,"reads":[79,70,80,77,78,41,80,80]},{"label":"Round dots, 50% of a square wide","short":"50%","img":"l/dots_05.jpg","n":80,"reads":[79,71,80,76,78,34,80,80]},{"label":"Round dots, 40% of a square wide","short":"40%","img":"l/dots_06.jpg","n":80,"reads":[79,61,75,67,79,21,80,75]},{"label":"Round dots, 30% of a square wide","short":"30%","img":"l/dots_07.jpg","n":80,"reads":[76,58,0,0,50,7,71,48]}],"window":360},{"key":"motion","name":"Shake","about":"A camera that moved while taking the picture.","how":"Linear motion blur in a random direction; streak length in pixels of a 1280-px-wide image.","breaks":"Telling dark from light: shake smears the code in one direction, so squares along that direction run together.","levels":[{"label":"Still","short":"0","img":"l/motion_00.jpg","n":80,"reads":[80,80,79,80,80,78,80,80]},{"label":"2 px streak","short":"2","img":"l/motion_01.jpg","n":80,"reads":[80,80,75,80,80,80,80,80]},{"label":"4 px streak","short":"4","img":"l/motion_02.jpg","n":80,"reads":[80,80,76,80,80,78,80,80]},{"label":"6 px streak","short":"6","img":"l/motion_03.jpg","n":80,"reads":[80,80,76,79,80,76,80,80]},{"label":"8 px streak","short":"8","img":"l/motion_04.jpg","n":80,"reads":[80,80,73,76,80,73,80,80]},{"label":"10 px streak","short":"10","img":"l/motion_05.jpg","n":80,"reads":[80,80,64,71,80,71,80,80]},{"label":"12 px streak","short":"12","img":"l/motion_06.jpg","n":80,"reads":[80,80,30,47,80,53,80,80]},{"label":"14 px streak","short":"14","img":"l/motion_07.jpg","n":80,"reads":[59,68,10,8,57,17,54,68]},{"label":"17 px streak","short":"17","img":"l/motion_08.jpg","n":80,"reads":[9,18,0,0,15,2,7,20]},{"label":"20 px streak","short":"20","img":"l/motion_09.jpg","n":80,"reads":[0,0,0,0,0,0,0,2]}],"window":360},{"key":"colors","name":"Colors","about":"A dark code on a light background, or the reverse.","how":"Inverted: light modules on a dark field.","breaks":"Finding the code: scanners look for the corner squares\u2019 dark-light-dark stripes. On a light-on-dark code they must also try the inverted picture, and some never do.","levels":[{"label":"Dark on light","short":"dark","img":"l/colors_00.jpg","n":80,"reads":[80,80,77,80,80,79,80,80]},{"label":"Light on dark","short":"light","img":"l/colors_01.jpg","n":80,"reads":[80,80,0,0,80,79,79,80]}],"window":360}]} \ No newline at end of file diff --git a/img/e/0000.jpg b/img/e/0000.jpg new file mode 100644 index 0000000000000000000000000000000000000000..849406189bb47fecf356e75a34c593606189d237 Binary files /dev/null and b/img/e/0000.jpg differ diff --git a/img/e/0001.jpg b/img/e/0001.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e4952b738c496c2726d567d7023ddb6f00cc04a6 Binary files /dev/null and b/img/e/0001.jpg differ diff --git a/img/e/0002.jpg b/img/e/0002.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fea05553439e10d79316a3ec56b0448274265401 Binary files /dev/null and b/img/e/0002.jpg differ diff --git a/img/e/0003.jpg b/img/e/0003.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c066cf0017b038fe71f41f70ad1bcc9b80331284 Binary files /dev/null and b/img/e/0003.jpg differ diff --git a/img/e/0004.jpg b/img/e/0004.jpg new file mode 100644 index 0000000000000000000000000000000000000000..12c6e62c32096aa44ccee38b7f39dbc199ab2d36 Binary files /dev/null and b/img/e/0004.jpg differ diff --git a/img/e/0005.jpg b/img/e/0005.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6f9a1ef0238319211e4880567159559bd1bfe3ce Binary files /dev/null and b/img/e/0005.jpg differ diff --git a/img/e/0006.jpg b/img/e/0006.jpg new file mode 100644 index 0000000000000000000000000000000000000000..74a0dc2c4d4a5588fcc7c6f4dbeb867e9d1097f6 Binary files /dev/null and b/img/e/0006.jpg differ diff --git a/img/e/0007.jpg b/img/e/0007.jpg new file mode 100644 index 0000000000000000000000000000000000000000..47eb56b841bb942f4ed07700a2c6f917096d5865 Binary files /dev/null and b/img/e/0007.jpg differ diff --git a/img/e/0008.jpg b/img/e/0008.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dc5853d9a05e67fd21fff09942f600b07cd52e9c Binary files /dev/null and b/img/e/0008.jpg differ diff --git a/img/e/0009.jpg b/img/e/0009.jpg new file mode 100644 index 0000000000000000000000000000000000000000..47d18d63a4981d1ca0f144a96033de20bb7419f2 Binary files /dev/null and b/img/e/0009.jpg differ diff --git a/img/e/0010.jpg b/img/e/0010.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f273a0f3edd06e8455201a5f792de2f5d59611de Binary files /dev/null and b/img/e/0010.jpg differ diff --git a/img/e/0011.jpg b/img/e/0011.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d98cdca6bf4ebe4ec953d1e8e669d6b94f6c925f Binary files /dev/null and b/img/e/0011.jpg differ diff --git a/img/e/0012.jpg b/img/e/0012.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4743d2fec7d9809bcc03be9cc544bcab2564e385 Binary files /dev/null and b/img/e/0012.jpg differ diff --git a/img/e/0013.jpg b/img/e/0013.jpg new file mode 100644 index 0000000000000000000000000000000000000000..84428d8eb9423b77734645902e913a573e53d3cc Binary files /dev/null and b/img/e/0013.jpg differ diff --git a/img/e/0014.jpg b/img/e/0014.jpg new file mode 100644 index 0000000000000000000000000000000000000000..01cf0c2f475fbb16ead8e061f50f7bb4127f37c1 Binary files /dev/null and b/img/e/0014.jpg differ diff --git a/img/e/0015.jpg b/img/e/0015.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ffac19462215847ce5aa9655592f397d0080f7a1 Binary files /dev/null and b/img/e/0015.jpg differ diff --git a/img/e/0016.jpg b/img/e/0016.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eb8cc4a484577b84a51199fb6e719e8e11069dca Binary files /dev/null and b/img/e/0016.jpg differ diff --git a/img/e/0017.jpg b/img/e/0017.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d6c61cc50addc1c6daeffaf7ff83f5b0f12fceee Binary files /dev/null and b/img/e/0017.jpg differ diff --git a/img/e/0018.jpg b/img/e/0018.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fe5346187e1d3f101d86b659316ad995556d769d Binary files /dev/null and b/img/e/0018.jpg differ diff --git a/img/e/0019.jpg b/img/e/0019.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bfcf6ca805e3126ce3fcedaaab690bc225020f44 Binary files /dev/null and b/img/e/0019.jpg differ diff --git a/img/e/0020.jpg b/img/e/0020.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b47c1def544260e84e7ecc7397de67365ae174b9 Binary files /dev/null and b/img/e/0020.jpg differ diff --git a/img/e/0021.jpg b/img/e/0021.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ee1279433c982514b6b26622652fd310dfb3c514 Binary files /dev/null and b/img/e/0021.jpg differ diff --git a/img/e/0022.jpg b/img/e/0022.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cb09ab92ff44b9d2311acb7ff072b0069ea13e67 Binary files /dev/null and b/img/e/0022.jpg differ diff --git a/img/e/0023.jpg b/img/e/0023.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1da1b508fee17c2982833d189261b036de047e0b Binary files /dev/null and b/img/e/0023.jpg differ diff --git a/img/e/0024.jpg b/img/e/0024.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8a693b9d0ed525229e51aa6615db98622210c1d5 Binary files /dev/null and b/img/e/0024.jpg differ diff --git a/img/e/0025.jpg b/img/e/0025.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b9fb4572e122dd2c9487e656913bfed48980e050 Binary files /dev/null and b/img/e/0025.jpg differ diff --git a/img/e/0026.jpg b/img/e/0026.jpg new file mode 100644 index 0000000000000000000000000000000000000000..82f96290e620a0ff8c88a596b8935cca432381c3 Binary files /dev/null and b/img/e/0026.jpg differ diff --git a/img/e/0027.jpg b/img/e/0027.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dbe6682b36086449eed0cb3e0fce67a34eed4852 Binary files /dev/null and b/img/e/0027.jpg differ diff --git a/img/e/0028.jpg b/img/e/0028.jpg new file mode 100644 index 0000000000000000000000000000000000000000..58f998f8e25400d32e3aa9bab559dc9cc4cb092c Binary files /dev/null and b/img/e/0028.jpg differ diff --git a/img/e/0029.jpg b/img/e/0029.jpg new file mode 100644 index 0000000000000000000000000000000000000000..52b98f4344f8df0b27a57417ec848f1f2ab2a388 Binary files /dev/null and b/img/e/0029.jpg differ diff --git a/img/e/0030.jpg b/img/e/0030.jpg new file mode 100644 index 0000000000000000000000000000000000000000..69d4d559b6af9e9b650677ed028d78ea4cac7c19 Binary files /dev/null and b/img/e/0030.jpg differ diff --git a/img/e/0031.jpg b/img/e/0031.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c4592491301e5ebaa17f558d6a8b56bfc8af47bf Binary files /dev/null and b/img/e/0031.jpg differ diff --git a/img/e/0032.jpg b/img/e/0032.jpg new file mode 100644 index 0000000000000000000000000000000000000000..17a3f5df4f74769363b5f6689aefb9ff26f1036c Binary files /dev/null and b/img/e/0032.jpg differ diff --git a/img/e/0033.jpg b/img/e/0033.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d1abb962a84ae0d77a23fa2b52af1e07e65c4e00 Binary files /dev/null and b/img/e/0033.jpg differ diff --git a/img/e/0034.jpg b/img/e/0034.jpg new file mode 100644 index 0000000000000000000000000000000000000000..75b22393bb6ab87fff8c117ede2c1c6dedb7d5b2 Binary files /dev/null and b/img/e/0034.jpg differ diff --git a/img/e/0035.jpg b/img/e/0035.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7ce917f03f8de9a34c96f4d3e09c165480a8fadd Binary files /dev/null and b/img/e/0035.jpg differ diff --git a/img/e/0036.jpg b/img/e/0036.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f6aa9de2e8d7d3e2af28b968b8eece8963af86e2 Binary files /dev/null and b/img/e/0036.jpg differ diff --git a/img/e/0037.jpg b/img/e/0037.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4890916ea01261261391b7cfa06f19da6e932ada Binary files /dev/null and b/img/e/0037.jpg differ diff --git a/img/e/0038.jpg b/img/e/0038.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3dea5a39a91c4ed76f41b0ca901c43f657b7bc2b Binary files /dev/null and b/img/e/0038.jpg differ diff --git a/img/e/0039.jpg b/img/e/0039.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3c6c0938f8c456e9f2a14044730880dd4c8c2a8d Binary files /dev/null and b/img/e/0039.jpg differ diff --git a/img/e/0040.jpg b/img/e/0040.jpg new file mode 100644 index 0000000000000000000000000000000000000000..08806b6a30adf712c521050383e1df4ed2ee8323 Binary files /dev/null and b/img/e/0040.jpg differ diff --git a/img/e/0041.jpg b/img/e/0041.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0cf67fc3fe2b1f044af825e3b279fd3b874d0dae Binary files /dev/null and b/img/e/0041.jpg differ diff --git a/img/e/0042.jpg b/img/e/0042.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b656abd213db5a570aac9d97b39e4d80638aaf35 Binary files /dev/null and b/img/e/0042.jpg differ diff --git a/img/e/0043.jpg b/img/e/0043.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3cfd245fc6a8aec7bdf4fc2f59528e1509bed13d Binary files /dev/null and b/img/e/0043.jpg differ diff --git a/img/e/0044.jpg b/img/e/0044.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a233fa9dfdb35b11d6785ddf50dad0d8fb0a6d5c Binary files /dev/null and b/img/e/0044.jpg differ diff --git a/img/e/0045.jpg b/img/e/0045.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0e2a874bcde51fb2dae9a6e435d15b3bce5c94e2 Binary files /dev/null and b/img/e/0045.jpg differ diff --git a/img/e/0046.jpg b/img/e/0046.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ff8f6c340d4ffaa472b7067c6d179d721dd29c02 Binary files /dev/null and b/img/e/0046.jpg differ diff --git a/img/e/0047.jpg b/img/e/0047.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8f249249ef457914d31a510d616b48e69fa1842f Binary files /dev/null and b/img/e/0047.jpg differ diff --git a/img/e/0048.jpg b/img/e/0048.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5fe1cd2d7893f469ad442b62465fece9f64c939e Binary files /dev/null and b/img/e/0048.jpg differ diff --git a/img/e/0049.jpg b/img/e/0049.jpg new file mode 100644 index 0000000000000000000000000000000000000000..886a1060a18fc383519eb35692d9fb92233d69f8 Binary files /dev/null and b/img/e/0049.jpg differ diff --git a/img/e/0050.jpg b/img/e/0050.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dbfa52e5abbe4d32156586f431076ca341b105ba Binary files /dev/null and b/img/e/0050.jpg differ diff --git a/img/e/0051.jpg b/img/e/0051.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0c286607f5b1e63ef901e048ed66d992a96ab1b6 Binary files /dev/null and b/img/e/0051.jpg differ diff --git a/img/e/0052.jpg b/img/e/0052.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9929dade075e41cb0afb749b24c7b08a51d214d0 Binary files /dev/null and b/img/e/0052.jpg differ diff --git a/img/e/0053.jpg b/img/e/0053.jpg new file mode 100644 index 0000000000000000000000000000000000000000..909b82683f46bff9af8b2fa6ce17d0688554bdcc Binary files /dev/null and b/img/e/0053.jpg differ diff --git a/img/e/0054.jpg b/img/e/0054.jpg new file mode 100644 index 0000000000000000000000000000000000000000..40fb5a697a0b592d11005bc84f0a5960b09b0072 Binary files /dev/null and b/img/e/0054.jpg differ diff --git a/img/e/0055.jpg b/img/e/0055.jpg new file mode 100644 index 0000000000000000000000000000000000000000..72c5ee8869e835acf81a4b1cc7d993ed01b79aed Binary files /dev/null and b/img/e/0055.jpg differ diff --git a/img/e/0056.jpg b/img/e/0056.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c3de74ec2e6fdaa3c0e024dc24e0560da2bc1a10 Binary files /dev/null and b/img/e/0056.jpg differ diff --git a/img/e/0057.jpg b/img/e/0057.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cb2f0370c381aa29c4dafaaedab7153bfd607219 Binary files /dev/null and b/img/e/0057.jpg differ diff --git a/img/e/0058.jpg b/img/e/0058.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7d4c6c1f450ced302ca402ced91ea57487fa4acd Binary files /dev/null and b/img/e/0058.jpg differ diff --git a/img/e/0059.jpg b/img/e/0059.jpg new file mode 100644 index 0000000000000000000000000000000000000000..679adfe91ae012fadbc4c744036e7598313f0b06 Binary files /dev/null and b/img/e/0059.jpg differ diff --git a/img/e/0060.jpg b/img/e/0060.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1e8479dc97a34949ac7704ea2249aeadf48dcdf5 Binary files /dev/null and b/img/e/0060.jpg differ diff --git a/img/e/0061.jpg b/img/e/0061.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d6774e9b53f86976c199249e8605ca6ceb55e3ef Binary files /dev/null and b/img/e/0061.jpg differ diff --git a/img/e/0062.jpg b/img/e/0062.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3b09690eff0a92791df3003f217a95dfb6507c8b Binary files /dev/null and b/img/e/0062.jpg differ diff --git a/img/e/0063.jpg b/img/e/0063.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9d0dc6f37cc30dbe0baa9974215d61b27dfb5a43 Binary files /dev/null and b/img/e/0063.jpg differ diff --git a/img/e/0064.jpg b/img/e/0064.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7fb09ca6726d98bb7e5f3746870019d9eb2382b2 Binary files /dev/null and b/img/e/0064.jpg differ diff --git a/img/e/0065.jpg b/img/e/0065.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4c945401bc7fb63ff833b1f1660365d245c1a478 Binary files /dev/null and b/img/e/0065.jpg differ diff --git a/img/e/0066.jpg b/img/e/0066.jpg new file mode 100644 index 0000000000000000000000000000000000000000..66e026dd6790ba4270028f9616775ed98c80861a Binary files /dev/null and b/img/e/0066.jpg differ diff --git a/img/e/0067.jpg b/img/e/0067.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f22334792cdc121d481089b074341b7c54eeec7d Binary files /dev/null and b/img/e/0067.jpg differ diff --git a/img/e/0068.jpg b/img/e/0068.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f080caad26e644038516e9754d4f80de4a9cc74f Binary files /dev/null and b/img/e/0068.jpg differ diff --git a/img/e/0069.jpg b/img/e/0069.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0693ccde8628d64fee5aed8122caac6111dbf77f Binary files /dev/null and b/img/e/0069.jpg differ diff --git a/img/e/0070.jpg b/img/e/0070.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3798ef3d8e0742453fdb707db28d332f54ece920 Binary files /dev/null and b/img/e/0070.jpg differ diff --git a/img/e/0071.jpg b/img/e/0071.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e035f69734e7b757745dddae9d0ecc6576a053fe Binary files /dev/null and b/img/e/0071.jpg differ diff --git a/img/e/0072.jpg b/img/e/0072.jpg new file mode 100644 index 0000000000000000000000000000000000000000..28419452d1d61dea72971851f2966a754bfba9b1 Binary files /dev/null and b/img/e/0072.jpg differ diff --git a/img/e/0073.jpg b/img/e/0073.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1bf44d84e19e04e97d4c93208fb0e35e42c50c6e Binary files /dev/null and b/img/e/0073.jpg differ diff --git a/img/e/0074.jpg b/img/e/0074.jpg new file mode 100644 index 0000000000000000000000000000000000000000..96ad57100ab6e86eede86d0c88e5a5493b1c6337 Binary files /dev/null and b/img/e/0074.jpg differ diff --git a/img/e/0075.jpg b/img/e/0075.jpg new file mode 100644 index 0000000000000000000000000000000000000000..19de5d25e0e2e24bebd4685da07125885d6c7f32 Binary files /dev/null and b/img/e/0075.jpg differ diff --git a/img/e/0076.jpg b/img/e/0076.jpg new file mode 100644 index 0000000000000000000000000000000000000000..17919ecfe6fe6bffd0147412de0ee7570fb2e41d Binary files /dev/null and b/img/e/0076.jpg differ diff --git a/img/e/0077.jpg b/img/e/0077.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4a361c67b41c5fde4fb430ca40870957605234f2 Binary files /dev/null and b/img/e/0077.jpg differ diff --git a/img/e/0078.jpg b/img/e/0078.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7e6b2f59ce3d534f359af18d901f4e21e0bc2898 Binary files /dev/null and b/img/e/0078.jpg differ diff --git a/img/e/0079.jpg b/img/e/0079.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0b8a7dfc97d018b33c494aeb92ce15fd8f2153a9 Binary files /dev/null and b/img/e/0079.jpg differ diff --git a/img/e/0080.jpg b/img/e/0080.jpg new file mode 100644 index 0000000000000000000000000000000000000000..de23552742e45b97c9750d3046e143cd81cf4a8f Binary files /dev/null and b/img/e/0080.jpg differ diff --git a/img/e/0081.jpg b/img/e/0081.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9e2ed846991f2f37f1fee95063e99b09deabddff Binary files /dev/null and b/img/e/0081.jpg differ diff --git a/img/e/0082.jpg b/img/e/0082.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2b0c7c46bc58f35c0e8815d473d72c36c8761d05 Binary files /dev/null and b/img/e/0082.jpg differ diff --git a/img/e/0083.jpg b/img/e/0083.jpg new file mode 100644 index 0000000000000000000000000000000000000000..be09e0efb32c5b64f45550b32039e5869b780b73 Binary files /dev/null and b/img/e/0083.jpg differ diff --git a/img/e/0084.jpg b/img/e/0084.jpg new file mode 100644 index 0000000000000000000000000000000000000000..db4718a08a793b48fe653795fb7e2346e4639427 Binary files /dev/null and b/img/e/0084.jpg differ diff --git a/img/e/0085.jpg b/img/e/0085.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c41d12ff0f1a365a25d36fee71b6a0f86b3ffecc Binary files /dev/null and b/img/e/0085.jpg differ diff --git a/img/e/0086.jpg b/img/e/0086.jpg new file mode 100644 index 0000000000000000000000000000000000000000..723f8aa4c829f40a3beed7444ffae9c17be56ab2 Binary files /dev/null and b/img/e/0086.jpg differ diff --git a/img/e/0087.jpg b/img/e/0087.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0dfd829815571800b78ba5f11327ca880195e8fb Binary files /dev/null and b/img/e/0087.jpg differ diff --git a/img/e/0088.jpg b/img/e/0088.jpg new file mode 100644 index 0000000000000000000000000000000000000000..189b67ff408bf4cf8a3f6a7ff524cfe1a4b4c686 Binary files /dev/null and b/img/e/0088.jpg differ diff --git a/img/e/0089.jpg b/img/e/0089.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f5db3098f35b5fa4fb1303975ed2aec88bf9d3f6 Binary files /dev/null and b/img/e/0089.jpg differ diff --git a/img/e/0090.jpg b/img/e/0090.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ad8c2e4573c73088f6dd1ea8e24b4f06976a03bb Binary files /dev/null and b/img/e/0090.jpg differ diff --git a/img/e/0091.jpg b/img/e/0091.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c92e2b6cdb5c3dabef1c628a98cff05e5a6a539d Binary files /dev/null and b/img/e/0091.jpg differ diff --git a/img/e/0092.jpg b/img/e/0092.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6dcd8741e02fab330c0fbd93a65cc61feab595a6 Binary files /dev/null and b/img/e/0092.jpg differ diff --git a/img/e/0093.jpg b/img/e/0093.jpg new file mode 100644 index 0000000000000000000000000000000000000000..21578ce7e9ae6387aaefa27c2eee5af6a308f1bf Binary files /dev/null and b/img/e/0093.jpg differ diff --git a/img/e/0094.jpg b/img/e/0094.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6c73bf379c01eb5c0cde0d43dcdaeb399e3f3223 Binary files /dev/null and b/img/e/0094.jpg differ diff --git a/img/e/0095.jpg b/img/e/0095.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5fea6f160b74a74d01258897f001feac3e192782 Binary files /dev/null and b/img/e/0095.jpg differ diff --git a/img/e/0096.jpg b/img/e/0096.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab1371f849334cea14417f7ef22d6d1eee413d6d Binary files /dev/null and b/img/e/0096.jpg differ diff --git a/img/e/0097.jpg b/img/e/0097.jpg new file mode 100644 index 0000000000000000000000000000000000000000..60d7ec098e1cd754dd4f3ff0bef0b3fea2c2f800 Binary files /dev/null and b/img/e/0097.jpg differ diff --git a/img/e/0098.jpg b/img/e/0098.jpg new file mode 100644 index 0000000000000000000000000000000000000000..81035e40ae6bb0446c0ca945f697cffa074d7d94 Binary files /dev/null and b/img/e/0098.jpg differ diff --git a/img/e/0099.jpg b/img/e/0099.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f8e62231780b2dc76601a6bcb1f0f5209b303765 Binary files /dev/null and b/img/e/0099.jpg differ diff --git a/img/e/0100.jpg b/img/e/0100.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c6bfaac22a174d2f0a4012c206a352a8c2a45071 Binary files /dev/null and b/img/e/0100.jpg differ diff --git a/img/e/0101.jpg b/img/e/0101.jpg new file mode 100644 index 0000000000000000000000000000000000000000..43fac5dbc967eb60e1530332f5d6f5a86ab33bcc Binary files /dev/null and b/img/e/0101.jpg differ diff --git a/img/e/0102.jpg b/img/e/0102.jpg new file mode 100644 index 0000000000000000000000000000000000000000..274eebfc26a18359a558f9fefee122722023ed8f Binary files /dev/null and b/img/e/0102.jpg differ diff --git a/img/e/0103.jpg b/img/e/0103.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a3b8e6aeeb1ac88eff6fa1e6360eac73ddfa31bc Binary files /dev/null and b/img/e/0103.jpg differ diff --git a/img/e/0104.jpg b/img/e/0104.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a77382ada46d5e1588a8e20e4623172098c8af71 Binary files /dev/null and b/img/e/0104.jpg differ diff --git a/img/e/0105.jpg b/img/e/0105.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9e5f6cb7b801c1a88b7efa1e9bf577cdab3235f8 Binary files /dev/null and b/img/e/0105.jpg differ diff --git a/img/e/0106.jpg b/img/e/0106.jpg new file mode 100644 index 0000000000000000000000000000000000000000..851f6e7254599904eca4ef34d06eed01e327b061 Binary files /dev/null and b/img/e/0106.jpg differ diff --git a/img/e/0107.jpg b/img/e/0107.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9a49a81be78e67da003a638876f7fa36172b6072 Binary files /dev/null and b/img/e/0107.jpg differ diff --git a/img/e/0108.jpg b/img/e/0108.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3726c77985553260b248404913834bbab026acf0 Binary files /dev/null and b/img/e/0108.jpg differ diff --git a/img/e/0109.jpg b/img/e/0109.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cabace3c074654cfb647985c4c968903f2aecd05 Binary files /dev/null and b/img/e/0109.jpg differ diff --git a/img/e/0110.jpg b/img/e/0110.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9d22b4796cc5582d7c45cdfdff7b6b5a5922ea59 Binary files /dev/null and b/img/e/0110.jpg differ diff --git a/img/e/0111.jpg b/img/e/0111.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5055e107f0ec2098f1ae763d9c7f545b1e7c301f Binary files /dev/null and b/img/e/0111.jpg differ diff --git a/img/e/0112.jpg b/img/e/0112.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ec0c0bca37f6621d5fdefe7d1bad93f1c8b38e0a Binary files /dev/null and b/img/e/0112.jpg differ diff --git a/img/e/0113.jpg b/img/e/0113.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8e133f597b1b824afa156fa84297748c9cedb123 Binary files /dev/null and b/img/e/0113.jpg differ diff --git a/img/e/0114.jpg b/img/e/0114.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e9c0d0036ead1eb77ce53b12143fa95ec86a11d0 Binary files /dev/null and b/img/e/0114.jpg differ diff --git a/img/e/0115.jpg b/img/e/0115.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e1595f31427543c0217794fdb21bcd6c5ae8e3a4 Binary files /dev/null and b/img/e/0115.jpg differ diff --git a/img/e/0116.jpg b/img/e/0116.jpg new file mode 100644 index 0000000000000000000000000000000000000000..818b8f351edf0649485c9d7374f838314d06e515 Binary files /dev/null and b/img/e/0116.jpg differ diff --git a/img/e/0117.jpg b/img/e/0117.jpg new file mode 100644 index 0000000000000000000000000000000000000000..875de241b5d21b4e404a98f8cdb9ee57011ed51c Binary files /dev/null and b/img/e/0117.jpg differ diff --git a/img/e/0118.jpg b/img/e/0118.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aebdca44f1f8794eae929b557e90ba2d85fef354 Binary files /dev/null and b/img/e/0118.jpg differ diff --git a/img/e/0119.jpg b/img/e/0119.jpg new file mode 100644 index 0000000000000000000000000000000000000000..68f8f52624f1f717f10a0d5eac35f526400d47ba Binary files /dev/null and b/img/e/0119.jpg differ diff --git a/img/e/0120.jpg b/img/e/0120.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4262902a49ff27139bf26bad1c6ea587b4abfd5e Binary files /dev/null and b/img/e/0120.jpg differ diff --git a/img/e/0121.jpg b/img/e/0121.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2fb46a7e3bc2934df7b1439b98f4ee29ac2e0734 Binary files /dev/null and b/img/e/0121.jpg differ diff --git a/img/e/0122.jpg b/img/e/0122.jpg new file mode 100644 index 0000000000000000000000000000000000000000..00cfcc84bbb51b0317a6a86c5f94cdd1089fe704 Binary files /dev/null and b/img/e/0122.jpg differ diff --git a/img/e/0123.jpg b/img/e/0123.jpg new file mode 100644 index 0000000000000000000000000000000000000000..700140e5a78fe4e1d30e29694d24effefd1f17c4 Binary files /dev/null and b/img/e/0123.jpg differ diff --git a/img/e/0124.jpg b/img/e/0124.jpg new file mode 100644 index 0000000000000000000000000000000000000000..530cea0a30fb91e2c4cc3dab55357b10ac16ff47 Binary files /dev/null and b/img/e/0124.jpg differ diff --git a/img/e/0125.jpg b/img/e/0125.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c08bb6cd04c0c980672a8ea0635b533e2ef823bf Binary files /dev/null and b/img/e/0125.jpg differ diff --git a/img/e/0126.jpg b/img/e/0126.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a218a22f897920bc38081a1129d1d3e68650f559 Binary files /dev/null and b/img/e/0126.jpg differ diff --git a/img/e/0127.jpg b/img/e/0127.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b96aa20fbb000e347665952f80ab72885f16052a Binary files /dev/null and b/img/e/0127.jpg differ diff --git a/img/e/0128.jpg b/img/e/0128.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a03164d6c0bc19f370f35ecc45eb61452a141470 Binary files /dev/null and b/img/e/0128.jpg differ diff --git a/img/e/0129.jpg b/img/e/0129.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fa439e2753b81b66915c55559903c21c6e7264a9 Binary files /dev/null and b/img/e/0129.jpg differ diff --git a/img/e/0130.jpg b/img/e/0130.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1d2367b6b6ed6bc565f5d2b01bccebcb18255529 Binary files /dev/null and b/img/e/0130.jpg differ diff --git a/img/e/0131.jpg b/img/e/0131.jpg new file mode 100644 index 0000000000000000000000000000000000000000..29b6ac04d813964a154977a08e191e2517046c67 Binary files /dev/null and b/img/e/0131.jpg differ diff --git a/img/e/0132.jpg b/img/e/0132.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cb29b5c4ef7955019e6d8a4b5c34c09275f91358 Binary files /dev/null and b/img/e/0132.jpg differ diff --git a/img/e/0133.jpg b/img/e/0133.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e9c1f94d71e64579a6b467ab8883b7f95d79c713 Binary files /dev/null and b/img/e/0133.jpg differ diff --git a/img/e/0134.jpg b/img/e/0134.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e957469a15adfbe40f62e7642e99c4c184d9dc7e Binary files /dev/null and b/img/e/0134.jpg differ diff --git a/img/e/0135.jpg b/img/e/0135.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c920bd4a5d1bbf3eaca5f222f90d7db23c1f80b4 Binary files /dev/null and b/img/e/0135.jpg differ diff --git a/img/e/0136.jpg b/img/e/0136.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4c019c2310070854c71cca3e915ddfee87b7d4da Binary files /dev/null and b/img/e/0136.jpg differ diff --git a/img/e/0137.jpg b/img/e/0137.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9ea5cfc5315e6b1f90b3c33ff42a724dcd95b61a Binary files /dev/null and b/img/e/0137.jpg differ diff --git a/img/e/0138.jpg b/img/e/0138.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0138431d475f21624ccf79ac8be01f80bd9eee52 Binary files /dev/null and b/img/e/0138.jpg differ diff --git a/img/e/0139.jpg b/img/e/0139.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9471dd1ee750e673d4c49b5a30e4fc560774cb99 Binary files /dev/null and b/img/e/0139.jpg differ diff --git a/img/e/0140.jpg b/img/e/0140.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ff59bba4c6a0b67130fcf2c6b503c2afab89c85d Binary files /dev/null and b/img/e/0140.jpg differ diff --git a/img/e/0141.jpg b/img/e/0141.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cb9eb29f55b523c2bbc1aa2127339ce9e0547953 Binary files /dev/null and b/img/e/0141.jpg differ diff --git a/img/e/0142.jpg b/img/e/0142.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dfa60309284e87dd9206a2fdb79b9d4176688cd8 Binary files /dev/null and b/img/e/0142.jpg differ diff --git a/img/e/0143.jpg b/img/e/0143.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7e2f2513a15b7acdf9242b81b5d6a2d33551abc0 Binary files /dev/null and b/img/e/0143.jpg differ diff --git a/img/e/0144.jpg b/img/e/0144.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ed05e1f432a4b808bf6b32fd29267c48d62ab5b8 Binary files /dev/null and b/img/e/0144.jpg differ diff --git a/img/e/0145.jpg b/img/e/0145.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e219cadc057746798ba10a0a303a0416f9837c94 Binary files /dev/null and b/img/e/0145.jpg differ diff --git a/img/e/0146.jpg b/img/e/0146.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bb1502c503594b598d18d77ef1a901efa1ba0197 Binary files /dev/null and b/img/e/0146.jpg differ diff --git a/img/e/0147.jpg b/img/e/0147.jpg new file mode 100644 index 0000000000000000000000000000000000000000..777de3057bad3b09a38e1d0d126deed513ae8044 Binary files /dev/null and b/img/e/0147.jpg differ diff --git a/img/e/0148.jpg b/img/e/0148.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8d4fb8c3a92416ef169206a064238701b644aa87 Binary files /dev/null and b/img/e/0148.jpg differ diff --git a/img/e/0149.jpg b/img/e/0149.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7a9cb5f40b19f85c4a5e60704da6cc348b6572f8 Binary files /dev/null and b/img/e/0149.jpg differ diff --git a/img/e/0150.jpg b/img/e/0150.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ebde17c64f85a659b28349b8bbf31a0c1a57620b Binary files /dev/null and b/img/e/0150.jpg differ diff --git a/img/e/0151.jpg b/img/e/0151.jpg new file mode 100644 index 0000000000000000000000000000000000000000..18377e3ae762983d777ddf7e5a14d06d7e32ff59 Binary files /dev/null and b/img/e/0151.jpg differ diff --git a/img/e/0152.jpg b/img/e/0152.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bee64d27d8310918c052617876e82bc1c4b7231f Binary files /dev/null and b/img/e/0152.jpg differ diff --git a/img/e/0153.jpg b/img/e/0153.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6b15c7439fa223cda738aac669e7c7603e1075b1 Binary files /dev/null and b/img/e/0153.jpg differ diff --git a/img/e/0154.jpg b/img/e/0154.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c296139c1ec8c4ce41f51aa00429506e3f4ea433 Binary files /dev/null and b/img/e/0154.jpg differ diff --git a/img/e/0155.jpg b/img/e/0155.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a2b09b6872d1c1a1c0514ecfcf2e94093e2d2731 Binary files /dev/null and b/img/e/0155.jpg differ diff --git a/img/e/0156.jpg b/img/e/0156.jpg new file mode 100644 index 0000000000000000000000000000000000000000..890c3de6e7cebf8b8c9d9f6077e8fe794d5647aa Binary files /dev/null and b/img/e/0156.jpg differ diff --git a/img/e/0157.jpg b/img/e/0157.jpg new file mode 100644 index 0000000000000000000000000000000000000000..23c0d071dcd4a20ba794dcbfb43bdfe78f8e7c23 Binary files /dev/null and b/img/e/0157.jpg differ diff --git a/img/e/0158.jpg b/img/e/0158.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d857bfc8d28ade58bfe02ba632cf80cd55dcc10e Binary files /dev/null and b/img/e/0158.jpg differ diff --git a/img/e/0159.jpg b/img/e/0159.jpg new file mode 100644 index 0000000000000000000000000000000000000000..01b2306bb64ec8e61d70dbc89c563efa59009be9 Binary files /dev/null and b/img/e/0159.jpg differ diff --git a/img/e/0160.jpg b/img/e/0160.jpg new file mode 100644 index 0000000000000000000000000000000000000000..edb2d27f70f0356232f3051f7141ff4ff0cddde4 Binary files /dev/null and b/img/e/0160.jpg differ diff --git a/img/e/0161.jpg b/img/e/0161.jpg new file mode 100644 index 0000000000000000000000000000000000000000..108d917f72f15c23f7122227b5b0a78425c12b3a Binary files /dev/null and b/img/e/0161.jpg differ diff --git a/img/e/0162.jpg b/img/e/0162.jpg new file mode 100644 index 0000000000000000000000000000000000000000..82fd0f173a10f85e72fa0df61320df68826e7af5 Binary files /dev/null and b/img/e/0162.jpg differ diff --git a/img/e/0163.jpg b/img/e/0163.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc1e918b8a3e3ceb8b35e9f9bbbb399ddd6dc9cd Binary files /dev/null and b/img/e/0163.jpg differ diff --git a/img/e/0164.jpg b/img/e/0164.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6073279edec93a64d22529b0c2c52b80776d62f8 Binary files /dev/null and b/img/e/0164.jpg differ diff --git a/img/e/0165.jpg b/img/e/0165.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d9aa07c4e2dbf8f68344c36c2ad8b2a87a1db825 Binary files /dev/null and b/img/e/0165.jpg differ diff --git a/img/e/0166.jpg b/img/e/0166.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6bdd35c962c072c598e1c565f8c46c4bb4f21dc9 Binary files /dev/null and b/img/e/0166.jpg differ diff --git a/img/e/0167.jpg b/img/e/0167.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eb3fdbc467127c86d0232e563341734c0ff74980 Binary files /dev/null and b/img/e/0167.jpg differ diff --git a/img/e/0168.jpg b/img/e/0168.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1d561b4b4d813f0477ac1924ec6193ad68fd73ee Binary files /dev/null and b/img/e/0168.jpg differ diff --git a/img/e/0169.jpg b/img/e/0169.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b103b4f024cd6bbf3e1b5faffbb857f10b0551a3 Binary files /dev/null and b/img/e/0169.jpg differ diff --git a/img/e/0170.jpg b/img/e/0170.jpg new file mode 100644 index 0000000000000000000000000000000000000000..32c81b84693d77e06ef6e19e732a54cbebbd6016 Binary files /dev/null and b/img/e/0170.jpg differ diff --git a/img/e/0171.jpg b/img/e/0171.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ac6597d03c108ceec56890636e789c80d2f84351 Binary files /dev/null and b/img/e/0171.jpg differ diff --git a/img/e/0172.jpg b/img/e/0172.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f972966f59185c50273c619364fee07d1bd83692 Binary files /dev/null and b/img/e/0172.jpg differ diff --git a/img/e/0173.jpg b/img/e/0173.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5a37d931408f2fad898a5f9411d184fb32415fd5 Binary files /dev/null and b/img/e/0173.jpg differ diff --git a/img/e/0174.jpg b/img/e/0174.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c87726ba40e60dbe22678ce9fe650a9123676704 Binary files /dev/null and b/img/e/0174.jpg differ diff --git a/img/e/0175.jpg b/img/e/0175.jpg new file mode 100644 index 0000000000000000000000000000000000000000..922a9cc359dc866e00b390c85b34147114896743 Binary files /dev/null and b/img/e/0175.jpg differ diff --git a/img/e/0176.jpg b/img/e/0176.jpg new file mode 100644 index 0000000000000000000000000000000000000000..452975de64394d5a4a29ac0e5d6352f5ce6a687f Binary files /dev/null and b/img/e/0176.jpg differ diff --git a/img/e/0177.jpg b/img/e/0177.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0488997ea295d3d82e0963a864137a3c8c3c2e33 Binary files /dev/null and b/img/e/0177.jpg differ diff --git a/img/e/0178.jpg b/img/e/0178.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d6c56c0692d6f2d1ee6f76b53acaac9653fbf81f Binary files /dev/null and b/img/e/0178.jpg differ diff --git a/img/e/0179.jpg b/img/e/0179.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f1796abde514924580f67d5288d3faa0f5355511 Binary files /dev/null and b/img/e/0179.jpg differ diff --git a/img/e/0180.jpg b/img/e/0180.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3133dbbcf6ab5a1ddd6d66c7ad48bc2f13c51d90 Binary files /dev/null and b/img/e/0180.jpg differ diff --git a/img/e/0181.jpg b/img/e/0181.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3c8d3d4249354d2a8b597a5e392d55b85075675a Binary files /dev/null and b/img/e/0181.jpg differ diff --git a/img/e/0182.jpg b/img/e/0182.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2e0f9eb10a23d4c2902fa030295389b55839efcc Binary files /dev/null and b/img/e/0182.jpg differ diff --git a/img/e/0183.jpg b/img/e/0183.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b0fcbb83e05895e94b796e644677734058ae8690 Binary files /dev/null and b/img/e/0183.jpg differ diff --git a/img/e/0184.jpg b/img/e/0184.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e5b6fcedcb20f3ee901474368b6255e3bffb3ebc Binary files /dev/null and b/img/e/0184.jpg differ diff --git a/img/e/0185.jpg b/img/e/0185.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4001a9fe7eeeac20ca75ae83091eccf2caf7b703 Binary files /dev/null and b/img/e/0185.jpg differ diff --git a/img/e/0186.jpg b/img/e/0186.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1cd4e79d0e719611ec6f8dc128a7f3770fc0b12b Binary files /dev/null and b/img/e/0186.jpg differ diff --git a/img/e/0187.jpg b/img/e/0187.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5eef0d64ab74e53f3db31c775ebc073290e7f51c Binary files /dev/null and b/img/e/0187.jpg differ diff --git a/img/e/0188.jpg b/img/e/0188.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6c94f32e6b0082ead3ea3c6512391b142e0ef586 Binary files /dev/null and b/img/e/0188.jpg differ diff --git a/img/e/0189.jpg b/img/e/0189.jpg new file mode 100644 index 0000000000000000000000000000000000000000..14bac15652fdbf353fa007d639bb7343c8ad406f Binary files /dev/null and b/img/e/0189.jpg differ diff --git a/img/e/0190.jpg b/img/e/0190.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e5e064853975f63a6201eb263c205e7cca1abe43 Binary files /dev/null and b/img/e/0190.jpg differ diff --git a/img/e/0191.jpg b/img/e/0191.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1cc05c505f64f02cbf1de07edd966dcc745d6670 Binary files /dev/null and b/img/e/0191.jpg differ diff --git a/img/e/0192.jpg b/img/e/0192.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7196cccef9a9af387dafe1107734692b28f3f443 Binary files /dev/null and b/img/e/0192.jpg differ diff --git a/img/e/0193.jpg b/img/e/0193.jpg new file mode 100644 index 0000000000000000000000000000000000000000..455b8b071bc57b7469657463e56b4d60394670fe Binary files /dev/null and b/img/e/0193.jpg differ diff --git a/img/e/0194.jpg b/img/e/0194.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5b4b0646926a4ef49e4d353a0092922dbd87ec8f Binary files /dev/null and b/img/e/0194.jpg differ diff --git a/img/e/0195.jpg b/img/e/0195.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8268e1191b89919d71f7f77c415eefd5c4fcbbab Binary files /dev/null and b/img/e/0195.jpg differ diff --git a/img/e/0196.jpg b/img/e/0196.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7e2b52c2e17f4fdbb10b00693bc3e298a2ee860b Binary files /dev/null and b/img/e/0196.jpg differ diff --git a/img/e/0197.jpg b/img/e/0197.jpg new file mode 100644 index 0000000000000000000000000000000000000000..38643985df42a78f0f047711482162f3304e1397 Binary files /dev/null and b/img/e/0197.jpg differ diff --git a/img/e/0198.jpg b/img/e/0198.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bf3625ffd5abe4de02236247d4e87e85710b78dc Binary files /dev/null and b/img/e/0198.jpg differ diff --git a/img/e/0199.jpg b/img/e/0199.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c93957d123cf8d7d9f7e2f1af1fc194eb42ce9ee Binary files /dev/null and b/img/e/0199.jpg differ diff --git a/img/e/0200.jpg b/img/e/0200.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dae10ac0a4b363bce85893ec030c4960691a5df4 Binary files /dev/null and b/img/e/0200.jpg differ diff --git a/img/e/0201.jpg b/img/e/0201.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3659dd11f96106ad78957b53aaf834b0bdac53ff Binary files /dev/null and b/img/e/0201.jpg differ diff --git a/img/e/0202.jpg b/img/e/0202.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0597bfde0bfd7bf89a26bae6ff93c281e401d782 Binary files /dev/null and b/img/e/0202.jpg differ diff --git a/img/e/0203.jpg b/img/e/0203.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dc24c4673bf62cbc77595dc261a7c7f7cb06b1d6 Binary files /dev/null and b/img/e/0203.jpg differ diff --git a/img/e/0204.jpg b/img/e/0204.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7c3634ee130519814b7d06b7df442542728e2718 Binary files /dev/null and b/img/e/0204.jpg differ diff --git a/img/e/0205.jpg b/img/e/0205.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a42b9742740dd7d2a8dfee7e7900db641b177c3f Binary files /dev/null and b/img/e/0205.jpg differ diff --git a/img/e/0206.jpg b/img/e/0206.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8a6dd098c1cea6bed1974d5e75452704b8e747bb Binary files /dev/null and b/img/e/0206.jpg differ diff --git a/img/e/0207.jpg b/img/e/0207.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9c6498f12e3ab1c8de2311c1bf909e645876a442 Binary files /dev/null and b/img/e/0207.jpg differ diff --git a/img/e/0208.jpg b/img/e/0208.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ecd34277df93ce23ac334944593d001c433e5e13 Binary files /dev/null and b/img/e/0208.jpg differ diff --git a/img/e/0209.jpg b/img/e/0209.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8fb2705b6363cd24977076f1421f5fdb599b7410 Binary files /dev/null and b/img/e/0209.jpg differ diff --git a/img/e/0210.jpg b/img/e/0210.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d18d7a93e58c20d5413946b710d12cb5bff358ad Binary files /dev/null and b/img/e/0210.jpg differ diff --git a/img/e/0211.jpg b/img/e/0211.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8587801860e1faf624026e52134a60cd6439bafd Binary files /dev/null and b/img/e/0211.jpg differ diff --git a/img/e/0212.jpg b/img/e/0212.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1b35f380c3080036989e58943111c4114b5b7df8 Binary files /dev/null and b/img/e/0212.jpg differ diff --git a/img/e/0213.jpg b/img/e/0213.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a0707b08df6a9a9772537824932fc4a2974f61d1 Binary files /dev/null and b/img/e/0213.jpg differ diff --git a/img/e/0214.jpg b/img/e/0214.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1c57430e4966d674ae00db2dcd7d55fb1227040e Binary files /dev/null and b/img/e/0214.jpg differ diff --git a/img/e/0215.jpg b/img/e/0215.jpg new file mode 100644 index 0000000000000000000000000000000000000000..90c64c931f2ada6834c0315091cfa52ccc109664 Binary files /dev/null and b/img/e/0215.jpg differ diff --git a/img/e/0216.jpg b/img/e/0216.jpg new file mode 100644 index 0000000000000000000000000000000000000000..31474bce11578de5bbc3c03a910242aaf6831dd9 Binary files /dev/null and b/img/e/0216.jpg differ diff --git a/img/e/0217.jpg b/img/e/0217.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5590bf50197a180303c41e4a4eee58bc6df828c2 Binary files /dev/null and b/img/e/0217.jpg differ diff --git a/img/e/0218.jpg b/img/e/0218.jpg new file mode 100644 index 0000000000000000000000000000000000000000..42b69230b99a6fbec7e2869b1a490027627983ef Binary files /dev/null and b/img/e/0218.jpg differ diff --git a/img/e/0219.jpg b/img/e/0219.jpg new file mode 100644 index 0000000000000000000000000000000000000000..60a6df1431585f68b03e3d649eb8bb7163e52db4 Binary files /dev/null and b/img/e/0219.jpg differ diff --git a/img/e/0220.jpg b/img/e/0220.jpg new file mode 100644 index 0000000000000000000000000000000000000000..15c06b7f27d40990f6c2199c9bd59af6fbce818d Binary files /dev/null and b/img/e/0220.jpg differ diff --git a/img/e/0221.jpg b/img/e/0221.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c0d503ed1dbff05d5b5bd0a9dcb36bd46a877e67 Binary files /dev/null and b/img/e/0221.jpg differ diff --git a/img/e/0222.jpg b/img/e/0222.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9a9ce3a5e2562471945f9293c71b1f3a67c73402 Binary files /dev/null and b/img/e/0222.jpg differ diff --git a/img/e/0223.jpg b/img/e/0223.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ad284b5c653feea7a99b801aafe19ac4ac6fbadd Binary files /dev/null and b/img/e/0223.jpg differ diff --git a/img/e/0224.jpg b/img/e/0224.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f707d11c909994c99d2838645ca83bbacb78a47e Binary files /dev/null and b/img/e/0224.jpg differ diff --git a/img/e/0225.jpg b/img/e/0225.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f55396b9c3dec9cc876e72b02d0398da61116685 Binary files /dev/null and b/img/e/0225.jpg differ diff --git a/img/e/0226.jpg b/img/e/0226.jpg new file mode 100644 index 0000000000000000000000000000000000000000..591c1841e9a59b60872f9015fef06efb0b7473dd Binary files /dev/null and b/img/e/0226.jpg differ diff --git a/img/e/0227.jpg b/img/e/0227.jpg new file mode 100644 index 0000000000000000000000000000000000000000..246f719a6da7d87a25f7a6e65e3ad4e276d7958d Binary files /dev/null and b/img/e/0227.jpg differ diff --git a/img/e/0228.jpg b/img/e/0228.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1782ae7f046bf62a9d77a5c9abab023f9494e0ea Binary files /dev/null and b/img/e/0228.jpg differ diff --git a/img/e/0229.jpg b/img/e/0229.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a43cfb77156c61847b7cb0899bd08b7a8870b1fe Binary files /dev/null and b/img/e/0229.jpg differ diff --git a/img/e/0230.jpg b/img/e/0230.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d58d846392a751532fb4115595c23e8ef1152ccc Binary files /dev/null and b/img/e/0230.jpg differ diff --git a/img/e/0231.jpg b/img/e/0231.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5e0a0fc901781dbf2b39275877644c64c0a8275e Binary files /dev/null and b/img/e/0231.jpg differ diff --git a/img/e/0232.jpg b/img/e/0232.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ae58b96c424bb9a537ebebf8029077672fb88911 Binary files /dev/null and b/img/e/0232.jpg differ diff --git a/img/e/0233.jpg b/img/e/0233.jpg new file mode 100644 index 0000000000000000000000000000000000000000..354eac6a5629bae3d9fb56e854a9509025262740 Binary files /dev/null and b/img/e/0233.jpg differ diff --git a/img/e/0234.jpg b/img/e/0234.jpg new file mode 100644 index 0000000000000000000000000000000000000000..23ef2e6af45dc92868f1746299f27b7526a08fa2 Binary files /dev/null and b/img/e/0234.jpg differ diff --git a/img/e/0235.jpg b/img/e/0235.jpg new file mode 100644 index 0000000000000000000000000000000000000000..de54bc785537f59f1c01332afa1e853428aeed2f Binary files /dev/null and b/img/e/0235.jpg differ diff --git a/img/e/0236.jpg b/img/e/0236.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cbe51998a5ea4ac5b51332cfa18ad7960b1c115b Binary files /dev/null and b/img/e/0236.jpg differ diff --git a/img/e/0237.jpg b/img/e/0237.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f9b9c7e6b029f2dd973ce85b934cc096fe079beb Binary files /dev/null and b/img/e/0237.jpg differ diff --git a/img/e/0238.jpg b/img/e/0238.jpg new file mode 100644 index 0000000000000000000000000000000000000000..60bc9bad432296b3f0bc3e699bb9c484f8d5ddfb Binary files /dev/null and b/img/e/0238.jpg differ diff --git a/img/e/0239.jpg b/img/e/0239.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1ea4968aca17036341b4d59699c1ae4dcc6bec79 Binary files /dev/null and b/img/e/0239.jpg differ diff --git a/img/e/0240.jpg b/img/e/0240.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5ccab2c35a06bc84c19b00a6921a5454841424b5 Binary files /dev/null and b/img/e/0240.jpg differ diff --git a/img/e/0241.jpg b/img/e/0241.jpg new file mode 100644 index 0000000000000000000000000000000000000000..269fb95762264dab1c3ac293311e10181c28bb6d Binary files /dev/null and b/img/e/0241.jpg differ diff --git a/img/e/0242.jpg b/img/e/0242.jpg new file mode 100644 index 0000000000000000000000000000000000000000..80d11b0e3c574b3dc47ef21bd63a4346d2c0fc95 Binary files /dev/null and b/img/e/0242.jpg differ diff --git a/img/e/0243.jpg b/img/e/0243.jpg new file mode 100644 index 0000000000000000000000000000000000000000..33ae0b3ebbfd529e2621483822e89a17d2ea926e Binary files /dev/null and b/img/e/0243.jpg differ diff --git a/img/e/0244.jpg b/img/e/0244.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7c5a9e042abdf230cf64cdb2a5782c15008f25b2 Binary files /dev/null and b/img/e/0244.jpg differ diff --git a/img/e/0245.jpg b/img/e/0245.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fda8692944af8edd26af03ca90f11794aa7ad226 Binary files /dev/null and b/img/e/0245.jpg differ diff --git a/img/e/0246.jpg b/img/e/0246.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9fd72f24082c71492721e440db1be11e48a00c21 Binary files /dev/null and b/img/e/0246.jpg differ