├── .github └── workflows │ └── compile-examples.yml ├── LICENSE ├── README.md ├── docs ├── api.md ├── images │ ├── modulino-buttons.jpeg │ ├── modulino-buzzer.jpg │ ├── modulino-distance.jpg │ ├── modulino-knob.jpg │ ├── modulino-movement.jpg │ ├── modulino-pixels.jpg │ └── modulino-thermo.jpg └── readme.md ├── examples ├── Modulino_Buttons │ ├── Button2Integration │ │ └── Button2Integration.ino │ └── Buttons_Basic │ │ └── Buttons_Basic.ino ├── Modulino_Buzzer │ ├── Buzzer_Basic │ │ └── Buzzer_Basic.ino │ ├── Simple_melody │ │ └── Simple_melody.ino │ └── Theremin │ │ └── Theremin.ino ├── Modulino_Distance │ └── Distance_Basic │ │ └── Distance_Basic.ino ├── Modulino_Knob │ ├── Encoder_Setter │ │ └── Encoder_Setter.ino │ └── Knob_Basic │ │ └── Knob_Basic.ino ├── Modulino_Movement │ └── Movement_Basic │ │ └── Movement_Basic.ino ├── Modulino_Pixels │ ├── Pixels_Basic │ │ └── Pixels_Basic.ino │ └── Simple_Animation │ │ └── Simple_Animation.ino ├── Modulino_Thermo │ ├── Temperature_Humidity_Matrix │ │ └── Temperature_Humidity_Matrix.ino │ └── Thermo_Basic │ │ └── Thermo_Basic.ino └── Utilities │ ├── AddressChanger │ └── AddressChanger.ino │ ├── FirmwareUpdater │ └── FirmwareUpdater.ino │ └── Modulino_PlugNPlay │ └── Modulino_PlugNPlay.ino ├── library.properties └── src ├── Modulino.cpp ├── Modulino.h └── fw.h /.github/workflows/compile-examples.yml: -------------------------------------------------------------------------------- 1 | name: Compile Examples 2 | 3 | on: 4 | pull_request: 5 | paths: 6 | - ".github/workflows/compile-examples.yml" 7 | - "library.properties" 8 | - "examples/**" 9 | - "src/**" 10 | push: 11 | paths: 12 | - ".github/workflows/compile-examples.yml" 13 | - "library.properties" 14 | - "examples/**" 15 | - "src/**" 16 | schedule: 17 | # Run every Tuesday at 8 AM UTC to catch breakage caused by changes to external resources (libraries, platforms). 18 | - cron: "0 8 * * TUE" 19 | workflow_dispatch: 20 | repository_dispatch: 21 | 22 | jobs: 23 | build: 24 | runs-on: ubuntu-latest 25 | 26 | env: 27 | SKETCHES_REPORTS_PATH: sketches-reports 28 | 29 | strategy: 30 | fail-fast: false 31 | 32 | matrix: 33 | board: 34 | - fqbn: arduino:renesas_uno:unor4wifi 35 | 36 | steps: 37 | - name: Checkout 38 | uses: actions/checkout@v4 39 | 40 | - name: Compile examples 41 | uses: arduino/compile-sketches@main 42 | with: 43 | github-token: ${{ secrets.GITHUB_TOKEN }} 44 | fqbn: ${{ matrix.board.fqbn }} 45 | libraries: | 46 | # Install the library from the local path. 47 | - source-path: ./ 48 | # Install library dependencies. 49 | - name: STM32duino VL53L4CD 50 | - name: STM32duino VL53L4ED 51 | - name: Arduino_LSM6DSOX 52 | - name: Arduino_LPS22HB 53 | - name: Arduino_HS300x 54 | - name: Button2 55 | - name: ArduinoGraphics 56 | 57 | enable-deltas-report: true 58 | sketches-report-path: ${{ env.SKETCHES_REPORTS_PATH }} 59 | 60 | - name: Save memory usage change report as artifact 61 | uses: actions/upload-artifact@v4 62 | with: 63 | name: ${{ env.SKETCHES_REPORTS_PATH }} 64 | path: ${{ env.SKETCHES_REPORTS_PATH }} -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Mozilla Public License Version 2.0 2 | ================================== 3 | 4 | 1. Definitions 5 | -------------- 6 | 7 | 1.1. "Contributor" 8 | means each individual or legal entity that creates, contributes to 9 | the creation of, or owns Covered Software. 10 | 11 | 1.2. "Contributor Version" 12 | means the combination of the Contributions of others (if any) used 13 | by a Contributor and that particular Contributor's Contribution. 14 | 15 | 1.3. "Contribution" 16 | means Covered Software of a particular Contributor. 17 | 18 | 1.4. "Covered Software" 19 | means Source Code Form to which the initial Contributor has attached 20 | the notice in Exhibit A, the Executable Form of such Source Code 21 | Form, and Modifications of such Source Code Form, in each case 22 | including portions thereof. 23 | 24 | 1.5. "Incompatible With Secondary Licenses" 25 | means 26 | 27 | (a) that the initial Contributor has attached the notice described 28 | in Exhibit B to the Covered Software; or 29 | 30 | (b) that the Covered Software was made available under the terms of 31 | version 1.1 or earlier of the License, but not also under the 32 | terms of a Secondary License. 33 | 34 | 1.6. "Executable Form" 35 | means any form of the work other than Source Code Form. 36 | 37 | 1.7. "Larger Work" 38 | means a work that combines Covered Software with other material, in 39 | a separate file or files, that is not Covered Software. 40 | 41 | 1.8. "License" 42 | means this document. 43 | 44 | 1.9. "Licensable" 45 | means having the right to grant, to the maximum extent possible, 46 | whether at the time of the initial grant or subsequently, any and 47 | all of the rights conveyed by this License. 48 | 49 | 1.10. "Modifications" 50 | means any of the following: 51 | 52 | (a) any file in Source Code Form that results from an addition to, 53 | deletion from, or modification of the contents of Covered 54 | Software; or 55 | 56 | (b) any new file in Source Code Form that contains any Covered 57 | Software. 58 | 59 | 1.11. "Patent Claims" of a Contributor 60 | means any patent claim(s), including without limitation, method, 61 | process, and apparatus claims, in any patent Licensable by such 62 | Contributor that would be infringed, but for the grant of the 63 | License, by the making, using, selling, offering for sale, having 64 | made, import, or transfer of either its Contributions or its 65 | Contributor Version. 66 | 67 | 1.12. "Secondary License" 68 | means either the GNU General Public License, Version 2.0, the GNU 69 | Lesser General Public License, Version 2.1, the GNU Affero General 70 | Public License, Version 3.0, or any later versions of those 71 | licenses. 72 | 73 | 1.13. "Source Code Form" 74 | means the form of the work preferred for making modifications. 75 | 76 | 1.14. "You" (or "Your") 77 | means an individual or a legal entity exercising rights under this 78 | License. For legal entities, "You" includes any entity that 79 | controls, is controlled by, or is under common control with You. For 80 | purposes of this definition, "control" means (a) the power, direct 81 | or indirect, to cause the direction or management of such entity, 82 | whether by contract or otherwise, or (b) ownership of more than 83 | fifty percent (50%) of the outstanding shares or beneficial 84 | ownership of such entity. 85 | 86 | 2. License Grants and Conditions 87 | -------------------------------- 88 | 89 | 2.1. Grants 90 | 91 | Each Contributor hereby grants You a world-wide, royalty-free, 92 | non-exclusive license: 93 | 94 | (a) under intellectual property rights (other than patent or trademark) 95 | Licensable by such Contributor to use, reproduce, make available, 96 | modify, display, perform, distribute, and otherwise exploit its 97 | Contributions, either on an unmodified basis, with Modifications, or 98 | as part of a Larger Work; and 99 | 100 | (b) under Patent Claims of such Contributor to make, use, sell, offer 101 | for sale, have made, import, and otherwise transfer either its 102 | Contributions or its Contributor Version. 103 | 104 | 2.2. Effective Date 105 | 106 | The licenses granted in Section 2.1 with respect to any Contribution 107 | become effective for each Contribution on the date the Contributor first 108 | distributes such Contribution. 109 | 110 | 2.3. Limitations on Grant Scope 111 | 112 | The licenses granted in this Section 2 are the only rights granted under 113 | this License. No additional rights or licenses will be implied from the 114 | distribution or licensing of Covered Software under this License. 115 | Notwithstanding Section 2.1(b) above, no patent license is granted by a 116 | Contributor: 117 | 118 | (a) for any code that a Contributor has removed from Covered Software; 119 | or 120 | 121 | (b) for infringements caused by: (i) Your and any other third party's 122 | modifications of Covered Software, or (ii) the combination of its 123 | Contributions with other software (except as part of its Contributor 124 | Version); or 125 | 126 | (c) under Patent Claims infringed by Covered Software in the absence of 127 | its Contributions. 128 | 129 | This License does not grant any rights in the trademarks, service marks, 130 | or logos of any Contributor (except as may be necessary to comply with 131 | the notice requirements in Section 3.4). 132 | 133 | 2.4. Subsequent Licenses 134 | 135 | No Contributor makes additional grants as a result of Your choice to 136 | distribute the Covered Software under a subsequent version of this 137 | License (see Section 10.2) or under the terms of a Secondary License (if 138 | permitted under the terms of Section 3.3). 139 | 140 | 2.5. Representation 141 | 142 | Each Contributor represents that the Contributor believes its 143 | Contributions are its original creation(s) or it has sufficient rights 144 | to grant the rights to its Contributions conveyed by this License. 145 | 146 | 2.6. Fair Use 147 | 148 | This License is not intended to limit any rights You have under 149 | applicable copyright doctrines of fair use, fair dealing, or other 150 | equivalents. 151 | 152 | 2.7. Conditions 153 | 154 | Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted 155 | in Section 2.1. 156 | 157 | 3. Responsibilities 158 | ------------------- 159 | 160 | 3.1. Distribution of Source Form 161 | 162 | All distribution of Covered Software in Source Code Form, including any 163 | Modifications that You create or to which You contribute, must be under 164 | the terms of this License. You must inform recipients that the Source 165 | Code Form of the Covered Software is governed by the terms of this 166 | License, and how they can obtain a copy of this License. You may not 167 | attempt to alter or restrict the recipients' rights in the Source Code 168 | Form. 169 | 170 | 3.2. Distribution of Executable Form 171 | 172 | If You distribute Covered Software in Executable Form then: 173 | 174 | (a) such Covered Software must also be made available in Source Code 175 | Form, as described in Section 3.1, and You must inform recipients of 176 | the Executable Form how they can obtain a copy of such Source Code 177 | Form by reasonable means in a timely manner, at a charge no more 178 | than the cost of distribution to the recipient; and 179 | 180 | (b) You may distribute such Executable Form under the terms of this 181 | License, or sublicense it under different terms, provided that the 182 | license for the Executable Form does not attempt to limit or alter 183 | the recipients' rights in the Source Code Form under this License. 184 | 185 | 3.3. Distribution of a Larger Work 186 | 187 | You may create and distribute a Larger Work under terms of Your choice, 188 | provided that You also comply with the requirements of this License for 189 | the Covered Software. If the Larger Work is a combination of Covered 190 | Software with a work governed by one or more Secondary Licenses, and the 191 | Covered Software is not Incompatible With Secondary Licenses, this 192 | License permits You to additionally distribute such Covered Software 193 | under the terms of such Secondary License(s), so that the recipient of 194 | the Larger Work may, at their option, further distribute the Covered 195 | Software under the terms of either this License or such Secondary 196 | License(s). 197 | 198 | 3.4. Notices 199 | 200 | You may not remove or alter the substance of any license notices 201 | (including copyright notices, patent notices, disclaimers of warranty, 202 | or limitations of liability) contained within the Source Code Form of 203 | the Covered Software, except that You may alter any license notices to 204 | the extent required to remedy known factual inaccuracies. 205 | 206 | 3.5. Application of Additional Terms 207 | 208 | You may choose to offer, and to charge a fee for, warranty, support, 209 | indemnity or liability obligations to one or more recipients of Covered 210 | Software. However, You may do so only on Your own behalf, and not on 211 | behalf of any Contributor. You must make it absolutely clear that any 212 | such warranty, support, indemnity, or liability obligation is offered by 213 | You alone, and You hereby agree to indemnify every Contributor for any 214 | liability incurred by such Contributor as a result of warranty, support, 215 | indemnity or liability terms You offer. You may include additional 216 | disclaimers of warranty and limitations of liability specific to any 217 | jurisdiction. 218 | 219 | 4. Inability to Comply Due to Statute or Regulation 220 | --------------------------------------------------- 221 | 222 | If it is impossible for You to comply with any of the terms of this 223 | License with respect to some or all of the Covered Software due to 224 | statute, judicial order, or regulation then You must: (a) comply with 225 | the terms of this License to the maximum extent possible; and (b) 226 | describe the limitations and the code they affect. Such description must 227 | be placed in a text file included with all distributions of the Covered 228 | Software under this License. Except to the extent prohibited by statute 229 | or regulation, such description must be sufficiently detailed for a 230 | recipient of ordinary skill to be able to understand it. 231 | 232 | 5. Termination 233 | -------------- 234 | 235 | 5.1. The rights granted under this License will terminate automatically 236 | if You fail to comply with any of its terms. However, if You become 237 | compliant, then the rights granted under this License from a particular 238 | Contributor are reinstated (a) provisionally, unless and until such 239 | Contributor explicitly and finally terminates Your grants, and (b) on an 240 | ongoing basis, if such Contributor fails to notify You of the 241 | non-compliance by some reasonable means prior to 60 days after You have 242 | come back into compliance. Moreover, Your grants from a particular 243 | Contributor are reinstated on an ongoing basis if such Contributor 244 | notifies You of the non-compliance by some reasonable means, this is the 245 | first time You have received notice of non-compliance with this License 246 | from such Contributor, and You become compliant prior to 30 days after 247 | Your receipt of the notice. 248 | 249 | 5.2. If You initiate litigation against any entity by asserting a patent 250 | infringement claim (excluding declaratory judgment actions, 251 | counter-claims, and cross-claims) alleging that a Contributor Version 252 | directly or indirectly infringes any patent, then the rights granted to 253 | You by any and all Contributors for the Covered Software under Section 254 | 2.1 of this License shall terminate. 255 | 256 | 5.3. In the event of termination under Sections 5.1 or 5.2 above, all 257 | end user license agreements (excluding distributors and resellers) which 258 | have been validly granted by You or Your distributors under this License 259 | prior to termination shall survive termination. 260 | 261 | ************************************************************************ 262 | * * 263 | * 6. Disclaimer of Warranty * 264 | * ------------------------- * 265 | * * 266 | * Covered Software is provided under this License on an "as is" * 267 | * basis, without warranty of any kind, either expressed, implied, or * 268 | * statutory, including, without limitation, warranties that the * 269 | * Covered Software is free of defects, merchantable, fit for a * 270 | * particular purpose or non-infringing. The entire risk as to the * 271 | * quality and performance of the Covered Software is with You. * 272 | * Should any Covered Software prove defective in any respect, You * 273 | * (not any Contributor) assume the cost of any necessary servicing, * 274 | * repair, or correction. This disclaimer of warranty constitutes an * 275 | * essential part of this License. No use of any Covered Software is * 276 | * authorized under this License except under this disclaimer. * 277 | * * 278 | ************************************************************************ 279 | 280 | ************************************************************************ 281 | * * 282 | * 7. Limitation of Liability * 283 | * -------------------------- * 284 | * * 285 | * Under no circumstances and under no legal theory, whether tort * 286 | * (including negligence), contract, or otherwise, shall any * 287 | * Contributor, or anyone who distributes Covered Software as * 288 | * permitted above, be liable to You for any direct, indirect, * 289 | * special, incidental, or consequential damages of any character * 290 | * including, without limitation, damages for lost profits, loss of * 291 | * goodwill, work stoppage, computer failure or malfunction, or any * 292 | * and all other commercial damages or losses, even if such party * 293 | * shall have been informed of the possibility of such damages. This * 294 | * limitation of liability shall not apply to liability for death or * 295 | * personal injury resulting from such party's negligence to the * 296 | * extent applicable law prohibits such limitation. Some * 297 | * jurisdictions do not allow the exclusion or limitation of * 298 | * incidental or consequential damages, so this exclusion and * 299 | * limitation may not apply to You. * 300 | * * 301 | ************************************************************************ 302 | 303 | 8. Litigation 304 | ------------- 305 | 306 | Any litigation relating to this License may be brought only in the 307 | courts of a jurisdiction where the defendant maintains its principal 308 | place of business and such litigation shall be governed by laws of that 309 | jurisdiction, without reference to its conflict-of-law provisions. 310 | Nothing in this Section shall prevent a party's ability to bring 311 | cross-claims or counter-claims. 312 | 313 | 9. Miscellaneous 314 | ---------------- 315 | 316 | This License represents the complete agreement concerning the subject 317 | matter hereof. If any provision of this License is held to be 318 | unenforceable, such provision shall be reformed only to the extent 319 | necessary to make it enforceable. Any law or regulation which provides 320 | that the language of a contract shall be construed against the drafter 321 | shall not be used to construe this License against a Contributor. 322 | 323 | 10. Versions of the License 324 | --------------------------- 325 | 326 | 10.1. New Versions 327 | 328 | Mozilla Foundation is the license steward. Except as provided in Section 329 | 10.3, no one other than the license steward has the right to modify or 330 | publish new versions of this License. Each version will be given a 331 | distinguishing version number. 332 | 333 | 10.2. Effect of New Versions 334 | 335 | You may distribute the Covered Software under the terms of the version 336 | of the License under which You originally received the Covered Software, 337 | or under the terms of any subsequent version published by the license 338 | steward. 339 | 340 | 10.3. Modified Versions 341 | 342 | If you create software not governed by this License, and you want to 343 | create a new license for such software, you may create and use a 344 | modified version of this License if you rename the license and remove 345 | any references to the name of the license steward (except to note that 346 | such modified license differs from this License). 347 | 348 | 10.4. Distributing Source Code Form that is Incompatible With Secondary 349 | Licenses 350 | 351 | If You choose to distribute Source Code Form that is Incompatible With 352 | Secondary Licenses under the terms of this version of the License, the 353 | notice described in Exhibit B of this License must be attached. 354 | 355 | Exhibit A - Source Code Form License Notice 356 | ------------------------------------------- 357 | 358 | This Source Code Form is subject to the terms of the Mozilla Public 359 | License, v. 2.0. If a copy of the MPL was not distributed with this 360 | file, You can obtain one at http://mozilla.org/MPL/2.0/. 361 | 362 | If it is not possible or desirable to put the notice in a particular 363 | file, then You may include the notice in a location (such as a LICENSE 364 | file in a relevant directory) where a recipient would be likely to look 365 | for such a notice. 366 | 367 | You may add additional accurate notices of copyright ownership. 368 | 369 | Exhibit B - "Incompatible With Secondary Licenses" Notice 370 | --------------------------------------------------------- 371 | 372 | This Source Code Form is "Incompatible With Secondary Licenses", as 373 | defined by the Mozilla Public License, v. 2.0. 374 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 🧩 Arduino Modulino® Library 2 | 3 | The Arduino Modulino® Library simplifies the integration and management of Modulino® modules on Arduino boards. 4 | 5 | A Modulino® is a compact, modular electronic device that connects easily to Arduino via the Qwiic connector and communicates using the I2C (`Wire`) protocol. These modules include sensors, actuators, and more. 6 | 7 | 📖 For more information about this library please read the documentation [here](./docs/). 8 | 9 | ## Hardware Compatibility 10 | This library is compatible with all Arduino boards that feature an I2C interface (`Wire`). 11 | 12 | ## Support and Contributions 13 | If you find this library helpful, consider supporting us through [donations](https://www.arduino.cc/en/donate/), [sponsorship](https://github.com/sponsors/arduino) or check out our [store](https://store.arduino.cc/). -------------------------------------------------------------------------------- /docs/api.md: -------------------------------------------------------------------------------- 1 | # Arduino Modulino Library API 2 | 3 | ## Summary 4 | 5 | Members | Descriptions 6 | --------------------------------------------|------------------------------------------ 7 | | `class` [`ModulinoClass`](#modulinoclass) | The base class for all Modulino components, providing essential functionality and structure for all subsequent Modulino modules. | 8 | | `class` [`ModulinoButtons`](#modulinobuttons) | Handles the functionality of Modulino Buttons, enabling detection of presses and handling input events. | 9 | | `class` [`ModulinoBuzzer`](#modulinobuttons) |Handles the functionality of Modulino Buzzer, enabling the sound generation for feedback or alerts. | 10 | | `class` [`ModulinoPixels`](#modulinopixels) | Handles the functionality of Modulino Pixels, managing LEDs strip color, status and brightness. | 11 | | `class` [`ModulinoKnob`](#modulinoknob) | Handles the functionality of Modulino Knob, interfacing with the rotary knob position. | 12 | | `class` [`ModulinoMovement`](#modulinomovement) | Handles the functionality of Modulino Movement,interfacing with the IMU sensor to get acceleration readings. | 13 | | `class` [`ModulinoThermo`](#modulinothermo) | Handles the functionality of Modulino Thermo, managing temperature sensors to provide real-time temperature and humidity readings. | 14 | | `class` [`ModulinoDistance`](#modulinodistance) | Handles the functionality of Modulino Distance, enabling distance measurement using ToF (Time-of-Flight) sensors for precise range detection. | 15 | 16 | ### ModulinoClass 17 | 18 | The `ModulinoClass` is the main class that handles the initialization of the I2C communication bus. 19 | 20 | #### Methods 21 | 22 | - **`void begin(HardwareI2C& wire = Wire)`** 23 | Initializes the I2C communication. The default I2C bus is `Wire`, but you can specify another one (e.g., `Wire1`). 24 | 25 | --- 26 | 27 | ### ModulinoButtons 28 | 29 | Represents a Modulino Buttons module. 30 | 31 | #### Methods 32 | 33 | - **`PinStatus isPressed(int index)`** 34 | Returns the press status (HIGH/LOW) of the button at the specified index (_0-A, 1-B, 2-C_). 35 | 36 | - **`PinStatus isPressed(char button)`** 37 | Returns the press status (HIGH/LOW) of the button specified by its character ('A', 'B', 'C'). 38 | 39 | - **`PinStatus isPressed(const char *button)`** 40 | Returns the press status (HIGH/LOW) of the button specified by its string ("A", "B", "C"). 41 | 42 | - **`bool update()`** 43 | Updates the button status. Returns `true` if the status has changed, `false` otherwise. 44 | 45 | - **`void setLeds(bool a, bool b, bool c)`** 46 | Sets the LED states. Each argument corresponds to one LED's state (on/off). 47 | 48 | --- 49 | 50 | ### ModulinoBuzzer 51 | 52 | Represents a Modulino Buzzer module. 53 | 54 | #### Methods 55 | 56 | - **`void tone(size_t freq, size_t len_ms)`** 57 | Plays a tone at the specified frequency (`freq`) and duration (`len_ms`). 58 | 59 | - **`void noTone()`** 60 | Stops any tone currently playing. 61 | 62 | --- 63 | 64 | ### ModulinoPixels 65 | 66 | Represents a Modulino Pixels module. 67 | 68 | #### Methods 69 | 70 | - **`void set(int idx, ModulinoColor rgb, uint8_t brightness = 25)`** 71 | Sets the color of the LED at the specified index. 72 | 73 | - **`void set(int idx, uint8_t r, uint8_t g, uint8_t b, uint8_t brightness = 5)`** 74 | Sets the color of the LED at the specified index using RGB values. 75 | 76 | - **`void clear(int idx)`** 77 | Clears the LED at the specified index (turns it off). 78 | 79 | - **`void clear()`** 80 | Clears all LEDs (turns them all off). 81 | 82 | - **`void show()`** 83 | Updates the LEDs to display the current color data. 84 | 85 | --- 86 | 87 | ### ModulinoKnob 88 | 89 | Represents a Modulino Knob module. 90 | 91 | #### Methods 92 | 93 | - **`int16_t get()`** 94 | Gets the current value of the knob. 95 | 96 | - **`bool isPressed()`** 97 | Returns `true` if the button on the knob is pressed, `false` otherwise. 98 | 99 | - **`int8_t getDirection()`** 100 | Returns the direction of the knob rotation. 101 | - `1` for clockwise 102 | - `-1` for counter-clockwise 103 | - `0` if no movement is detected 104 | 105 | - **`void set(int16_t value)`** 106 | Sets the knob value. 107 | 108 | --- 109 | 110 | ### ModulinoMovement 111 | 112 | Represents a Modulino Movement module. 113 | 114 | #### Methods 115 | 116 | - **`int update()`** 117 | Updates the sensor data and reads the acceleration values. 118 | 119 | - **`int available()`** 120 | Returns `true` if acceleration data is available. 121 | 122 | - **`float getX()`** 123 | Returns the X-axis acceleration. 124 | 125 | - **`float getY()`** 126 | Returns the Y-axis acceleration. 127 | 128 | - **`float getZ()`** 129 | Returns the Z-axis acceleration. 130 | 131 | - **`float getRoll()`** 132 | Returns the angular velocity around X-axis. 133 | 134 | - **`float getPitch()`** 135 | Returns the angular velocity around Y-axis. 136 | 137 | - **`float getYaw()`** 138 | Returns the angular velocity around Z-axis. 139 | 140 | --- 141 | 142 | ### ModulinoThermo 143 | 144 | Represents a Modulino Thermo module. 145 | 146 | #### Methods 147 | 148 | - **`float getHumidity()`** 149 | Returns the humidity reading. 150 | 151 | - **`float getTemperature()`** 152 | Returns the temperature reading. 153 | 154 | --- 155 | 156 | ### ModulinoDistance 157 | 158 | Represents a Modulino Distance module. 159 | 160 | #### Methods 161 | 162 | - **`available()`** 163 | Checks if new distance data is available from the sensor. If data is ready, it reads the data and updates the distance value. 164 | `true` if distance data is available, `false` if distance data is not available. 165 | 166 | - **`float get()`** 167 | Returns the distance measured by the sensor in millimeters. 168 | The measured distance in millimeters if available, `NAN` if the distance reading is invalid. 169 | 170 | ## Constants 171 | 172 | - **`ModulinoColor RED`** 173 | Represents the color red for Modulino Pixels modules. 174 | 175 | - **`ModulinoColor BLUE`** 176 | Represents the color blue for Modulino Pixels modules. 177 | 178 | - **`ModulinoColor GREEN`** 179 | Represents the color green for Modulino Pixels modules. 180 | 181 | - **`ModulinoColor VIOLET`** 182 | Represents the color violet for Modulino Pixels modules. 183 | 184 | - **`ModulinoColor WHITE`** 185 | Represents the color white for Modulino Pixels modules. 186 | 187 | ### ModulinoColor 188 | 189 | Represents a color for Modulino Pixels modules. 190 | 191 | #### Constructor 192 | 193 | - **`ModulinoColor(uint8_t r, uint8_t g, uint8_t b)`** 194 | Creates a color with the specified red (`r`), green (`g`), and blue (`b`) components. 195 | 196 | ## License 197 | 198 | This library is released under the [MPL-2.0 license](../LICENSE). -------------------------------------------------------------------------------- /docs/images/modulino-buttons.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arduino-libraries/Modulino/9c948fefc0de011add921fb36a4cf06687dc4871/docs/images/modulino-buttons.jpeg -------------------------------------------------------------------------------- /docs/images/modulino-buzzer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arduino-libraries/Modulino/9c948fefc0de011add921fb36a4cf06687dc4871/docs/images/modulino-buzzer.jpg -------------------------------------------------------------------------------- /docs/images/modulino-distance.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arduino-libraries/Modulino/9c948fefc0de011add921fb36a4cf06687dc4871/docs/images/modulino-distance.jpg -------------------------------------------------------------------------------- /docs/images/modulino-knob.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arduino-libraries/Modulino/9c948fefc0de011add921fb36a4cf06687dc4871/docs/images/modulino-knob.jpg -------------------------------------------------------------------------------- /docs/images/modulino-movement.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arduino-libraries/Modulino/9c948fefc0de011add921fb36a4cf06687dc4871/docs/images/modulino-movement.jpg -------------------------------------------------------------------------------- /docs/images/modulino-pixels.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arduino-libraries/Modulino/9c948fefc0de011add921fb36a4cf06687dc4871/docs/images/modulino-pixels.jpg -------------------------------------------------------------------------------- /docs/images/modulino-thermo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arduino-libraries/Modulino/9c948fefc0de011add921fb36a4cf06687dc4871/docs/images/modulino-thermo.jpg -------------------------------------------------------------------------------- /docs/readme.md: -------------------------------------------------------------------------------- 1 | # Arduino Modulino® Library 2 | 3 | The **Modulino** library is designed to simplify integration with various Modulino. It supports a variety of modules, such as motion sensors, buttons, buzzers, LED displays, and more, all through an I2C (`Wire`) interface. 4 | 5 | ## Hardware Compatibility 6 | 7 | The library is compatible with Arduino boards that support I2C (`Wire`) communication. 8 | 9 | Each Modulino has a fixed I2C address assigned by default. If you wish to change the I2C address, you can refer to the [Utilities](#utilities) section. 10 | 11 | ## Main Features 12 | 13 | The **Modulino** library supports the following hardware modules: 14 | 15 | - **Buttons (`ModulinoButtons`)**: Read the state of buttons and control the associated LEDs. 16 | - **Buzzer (`ModulinoBuzzer`)**: Activate and deactivate the buzzer and set its frequency. 17 | - **LEDs (`ModulinoPixels`)**: Control RGB LEDs with customizable display modes. 18 | - **Knob (`ModulinoKnob`)**: Read the value of a rotary encoder. 19 | - **Motion (`ModulinoMovement`)**: Interface with the LSM6DSOX IMU sensor to get acceleration values. 20 | - **Temperature & Humidity (`ModulinoThermo`)**: Get temperature and humidity readings from the HS300x sensor. 21 | - **Distance (`ModulinoDistance`)**: Measures distance using a Time-of-Flight (ToF) sensor (VL53L0x). 22 | 23 | ## Library Initialization 24 | 25 | To initialize the **Modulino** library, include the header file and call the `begin()` method. This will set up the I2C communication and prepare the library for use with the modules. 26 | 27 | ```cpp 28 | #include 29 | Modulino.begin(); // Initialize the Modulino library 30 | ``` 31 | 32 | ## Supported Modules 33 | 34 | You can initialize a Modulino board easily. The basic setup requires just a call to the `begin()` method for each module. For example: 35 | 36 | ```cpp 37 | ModulinoType modulino_name; 38 | modulino_name.begin(); // Initialize the ModulinoType module 39 | ``` 40 | 41 | ### ModulinoButtons 42 | Manages the state of three buttons and controls their associated LED states. You can read the state of each button and send commands to turn the LEDs on/off. 43 | 44 | ![Modulino Buttons](./images/modulino-buttons.jpeg) 45 | 46 | ```cpp 47 | ModulinoButtons buttons; 48 | buttons.begin(); 49 | buttons.setLeds(true, false, true); // Turn on LED 1 and LED 3 50 | ``` 51 | 52 | ### ModulinoBuzzer 53 | Allows you to emit sounds through the buzzer. You can set the frequency and duration of the sound. 54 | 55 | ![Modulino Buzzer](./images/modulino-buzzer.jpg) 56 | 57 | ```cpp 58 | ModulinoBuzzer buzzer; 59 | buzzer.begin(); 60 | buzzer.tone(440, 1000); // 440Hz frequency for 1000ms 61 | ``` 62 | 63 | ### ModulinoPixels 64 | Controls an array of 8 RGB LEDs, allowing you to set the colors and brightness. You can also clear individual LEDs or the entire array. 65 | 66 | ![Modulino Pixels](./images/modulino-pixels.jpg) 67 | 68 | ```cpp 69 | ModulinoPixels leds; 70 | leds.set(0, ModulinoColor(255, 0, 0)); // Set the first LED (Position: 0) to red 71 | leds.show(); // Display the LEDs 72 | ``` 73 | 74 | ### ModulinoKnob 75 | Manages a rotary encoder, allowing you to read the potentiometer value and check if the knob is pressed. 76 | 77 | ![Modulino Knob](./images/modulino-knob.jpg) 78 | 79 | ```cpp 80 | ModulinoKnob knob; 81 | knob.begin(); 82 | int16_t value = knob.get(); // Get the value of the encoder 83 | ``` 84 | 85 | ### ModulinoMovement 86 | Interfaces with the LSM6DSOX IMU sensor to get acceleration readings. 87 | 88 | ![Modulino Movement](./images/modulino-movement.jpg) 89 | 90 | ```cpp 91 | ModulinoMovement movement; 92 | movement.begin(); 93 | float x = movement.getX(); 94 | ``` 95 | 96 | ### ModulinoThermo 97 | Reads temperature and humidity data from the HS300x sensor. 98 | 99 | ![Modulino Thermo](./images/modulino-thermo.jpg) 100 | 101 | ```cpp 102 | ModulinoThermo thermo; 103 | thermo.begin(); 104 | float temperature = thermo.getTemperature(); 105 | float humidity = thermo.getHumidity(); 106 | ``` 107 | 108 | ### ModulinoDistance 109 | Measures distance using a ToF (Time-of-Flight) sensor. 110 | 111 | ![Modulino Distance](./images/modulino-distance.jpg) 112 | 113 | ```cpp 114 | ModulinoDistance distance; 115 | distance.begin(); 116 | float distanceValue = distance.get(); 117 | ``` 118 | 119 | ## Example Usage 120 | 121 | Here’s an example of how to use some Modulino in a program: 122 | 123 | ```cpp 124 | // This sketch demonstrates how to use the Modulino library to control buttons, LEDs, and a buzzer. 125 | // It listens for a button press (Button A), turns on the LED 0, and plays a sound through the buzzer when pressed. 126 | 127 | #include 128 | 129 | ModulinoButtons buttons; // Declare a Buttons Modulino 130 | ModulinoPixels leds; // Declare a Pixels Modulino 131 | ModulinoBuzzer buzzer; // Declare a Buzzer Modulino 132 | 133 | int frequency = 440; // Set frequency to 440Hz 134 | int duration = 1000; // Set duration to 1000ms 135 | 136 | void setup() { 137 | Serial.begin(9600); 138 | 139 | Modulino.begin(); // Initialize the Modulino library 140 | 141 | buttons.begin(); // Initialize the Buttons module 142 | leds.begin(); // Initialize the Pixels module 143 | buzzer.begin(); // Initialize the Buzzer module 144 | } 145 | 146 | void loop() { 147 | if (buttons.update()) { // Update the button states 148 | if (buttons.isPressed(0)) { // Check if Button A (button 0) is pressed 149 | Serial.println("Button A pressed!"); 150 | leds.set(0, RED); // Turn on LED 0 to red 151 | leds.show(); 152 | 153 | buzzer.tone(frequency, duration); // Play buzzer sound with the specified frequency and duration 154 | delay(duration); 155 | } else { 156 | leds.clear(0); // Turn off LED 0 157 | leds.show(); 158 | } 159 | } 160 | } 161 | ``` 162 | 163 | ## Examples 164 | 165 | The examples folder is organized by Modulino type. Each module has its own folder with example sketches that demonstrate both basic and advanced usage (where applicable). 166 | 167 | You can explore the examples [here](../examples). 168 | 169 | ### Utilities 170 | 171 | In the [Utilities](../examples/Utilities) folder, you will find programs designed to help you manage and manipulate the Modulino: 172 | 173 | - [AddressChanger](../examples/Utilities/AddressChanger/): This program allows you to change the I2C address of a Modulino module. It’s helpful when you need to reassign addresses to avoid conflicts or organize your I2C network. 174 | 175 | ## API 176 | 177 | The API documentation can be found [here](./api.md). 178 | 179 | ## License 180 | 181 | This library is released under the [MPL-2.0 license](../LICENSE). 182 | -------------------------------------------------------------------------------- /examples/Modulino_Buttons/Button2Integration/Button2Integration.ino: -------------------------------------------------------------------------------- 1 | /* 2 | * Modulino Buttons - Button2 Integration 3 | * Integration with https://github.com/LennartHennigs/Button2 4 | * 5 | * This example code is in the public domain. 6 | * Copyright (c) 2025 Arduino 7 | * SPDX-License-Identifier: MPL-2.0 8 | */ 9 | 10 | #include "Modulino.h" 11 | #include "Button2.h" 12 | 13 | Button2 button; 14 | ModulinoButtons modulino_buttons; 15 | 16 | uint8_t button0StateHandler() { 17 | modulino_buttons.update(); 18 | return modulino_buttons.isPressed(0) ? LOW : HIGH; // fake a normal button -> LOW = pressed 19 | } 20 | 21 | void handler(Button2& btn) { 22 | switch (btn.getType()) { 23 | case single_click: 24 | break; 25 | case double_click: 26 | Serial.print("double "); 27 | break; 28 | case triple_click: 29 | Serial.print("triple "); 30 | break; 31 | case long_click: 32 | Serial.print("long"); 33 | break; 34 | } 35 | Serial.print("click"); 36 | Serial.print(" ("); 37 | Serial.print(btn.getNumberOfClicks()); 38 | Serial.println(")"); 39 | } 40 | 41 | void setup() { 42 | 43 | Serial.begin(115200); 44 | 45 | Modulino.begin(); 46 | modulino_buttons.begin(); 47 | 48 | button.setDebounceTime(35); 49 | button.setButtonStateFunction(button0StateHandler); 50 | button.setClickHandler(handler); 51 | button.setDoubleClickHandler(handler); 52 | button.setTripleClickHandler(handler); 53 | button.setLongClickHandler(handler); 54 | button.begin(BTN_VIRTUAL_PIN); 55 | } 56 | 57 | void loop() { 58 | button.loop(); 59 | } -------------------------------------------------------------------------------- /examples/Modulino_Buttons/Buttons_Basic/Buttons_Basic.ino: -------------------------------------------------------------------------------- 1 | /* 2 | * Modulino Buttons - Basic 3 | * 4 | * This example code is in the public domain. 5 | * Copyright (c) 2025 Arduino 6 | * SPDX-License-Identifier: MPL-2.0 7 | */ 8 | 9 | #include 10 | 11 | // Create a ModulinoButtons object 12 | ModulinoButtons buttons; 13 | 14 | bool button_a = true; 15 | bool button_b = true; 16 | bool button_c = true; 17 | 18 | void setup() { 19 | Serial.begin(9600); 20 | // Initialize Modulino I2C communication 21 | Modulino.begin(); 22 | // Detect and connect to buttons module 23 | buttons.begin(); 24 | // Turn on the LEDs above buttons A, B, and C 25 | buttons.setLeds(true, true, true); 26 | } 27 | 28 | void loop() { 29 | // Check for new button events, returns true when button state changes 30 | if (buttons.update()) { 31 | // You can use either index (0=A, 1=B, 2=C) or letter ('A', 'B', 'C') to check buttons 32 | // Below we use the letter-based method for better readability 33 | 34 | if (buttons.isPressed('A')) { 35 | Serial.println("Button A pressed!"); 36 | button_a = !button_a; 37 | } else if (buttons.isPressed("B")) { 38 | Serial.println("Button B pressed!"); 39 | button_b = !button_b; 40 | } else if (buttons.isPressed('C')) { 41 | Serial.println("Button C pressed!"); 42 | button_c = !button_c; 43 | } 44 | 45 | // Update the LEDs above buttons, depending on the variables value 46 | buttons.setLeds(button_a, button_b, button_c); 47 | } 48 | } -------------------------------------------------------------------------------- /examples/Modulino_Buzzer/Buzzer_Basic/Buzzer_Basic.ino: -------------------------------------------------------------------------------- 1 | /* 2 | * Modulino Buzzer - Basic 3 | * 4 | * This example code is in the public domain. 5 | * Copyright (c) 2025 Arduino 6 | * SPDX-License-Identifier: MPL-2.0 7 | */ 8 | 9 | #include 10 | 11 | // Create a ModulinoBuzzer object 12 | ModulinoBuzzer buzzer; 13 | 14 | int frequency = 440; 15 | int duration = 1000; 16 | 17 | void setup(){ 18 | // Initialize Modulino I2C communication 19 | Modulino.begin(); 20 | // Detect and connect to buzzer module 21 | buzzer.begin(); 22 | } 23 | 24 | void loop(){ 25 | 26 | // Play tone at specified frequency and duration 27 | buzzer.tone(frequency, duration); 28 | delay(1000); 29 | // Stop the tone (0 frequency) 30 | buzzer.tone(0, duration); 31 | delay(1000); 32 | 33 | } -------------------------------------------------------------------------------- /examples/Modulino_Buzzer/Simple_melody/Simple_melody.ino: -------------------------------------------------------------------------------- 1 | /* 2 | * Modulino Buzzer - Simple melody 3 | * 4 | * This example code is in the public domain. 5 | * Copyright (c) 2025 Arduino 6 | * SPDX-License-Identifier: MPL-2.0 7 | */ 8 | 9 | #include 10 | 11 | // Create a ModulinoBuzzer object 12 | ModulinoBuzzer buzzer; 13 | 14 | // Define melody notes in Hz (C4, G3, G3, A3, G3, rest, B3, C4) 15 | int melody[] = { 262, 196, 196, 220, 196, 0, 247, 262 }; 16 | 17 | void setup() { 18 | // Initialize Modulino I2C communication 19 | Modulino.begin(); 20 | // Detect and connect to buzzer module 21 | buzzer.begin(); 22 | } 23 | 24 | void loop() { 25 | // Play each note in the melody 26 | for (int i = 0; i < 8; i++) { 27 | // Get current note frequency 28 | int note = melody[i]; 29 | // Play the note for 250ms 30 | buzzer.tone(note, 250); 31 | delay(250); 32 | 33 | } 34 | } -------------------------------------------------------------------------------- /examples/Modulino_Buzzer/Theremin/Theremin.ino: -------------------------------------------------------------------------------- 1 | #include "Modulino.h" 2 | 3 | ModulinoBuzzer buzzer; 4 | ModulinoDistance distance; 5 | ModulinoKnob encoder; 6 | 7 | 8 | void setup() { 9 | 10 | Modulino.begin(); 11 | encoder.begin(); 12 | distance.begin(); 13 | buzzer.begin(); 14 | } 15 | 16 | int pitch = 0; 17 | int noteIndex = 0; 18 | 19 | //Notes from C to B with # 20 | int note[] = {262, 277, 294, 311, 330, 349, 370, 392, 415, 440, 466, 494}; 21 | 22 | void loop() { 23 | pitch = distance.get(); 24 | noteIndex = encoder.get(); 25 | 26 | noteIndex = noteIndex % 11; 27 | if (noteIndex < 0){ 28 | noteIndex = 0; 29 | } 30 | 31 | buzzer.tone(note[noteIndex] + pitch, 1000); 32 | } -------------------------------------------------------------------------------- /examples/Modulino_Distance/Distance_Basic/Distance_Basic.ino: -------------------------------------------------------------------------------- 1 | /* 2 | * Modulino Distance - Basic 3 | * 4 | * This example code is in the public domain. 5 | * Copyright (c) 2025 Arduino 6 | * SPDX-License-Identifier: MPL-2.0 7 | */ 8 | 9 | #include "Modulino.h" 10 | 11 | // Create a ModulinoDistance object 12 | ModulinoDistance distance; 13 | 14 | void setup() { 15 | Serial.begin(9600); 16 | // Initialize Modulino I2C communication 17 | Modulino.begin(); 18 | // Detect and connect to distance sensor module 19 | distance.begin(); 20 | } 21 | 22 | void loop() { 23 | // Check if new distance measurement is available 24 | if (distance.available()) { 25 | // Get the latest distance measurement in millimeters 26 | int measure = distance.get(); 27 | Serial.println(measure); 28 | } 29 | delay(10); 30 | } -------------------------------------------------------------------------------- /examples/Modulino_Knob/Encoder_Setter/Encoder_Setter.ino: -------------------------------------------------------------------------------- 1 | /* 2 | * Modulino Knob - Encoder Setter 3 | * 4 | * This example code is in the public domain. 5 | * Copyright (c) 2025 Arduino 6 | * SPDX-License-Identifier: MPL-2.0 7 | */ 8 | 9 | #include "Modulino.h" 10 | 11 | // Create objects for the modules 12 | ModulinoKnob encoder; 13 | ModulinoPixels leds; 14 | ModulinoButtons buttons; 15 | 16 | void setup() { 17 | Serial.begin(115200); 18 | // Initialize Modulino I2C communication 19 | Modulino.begin(); 20 | // Detect and connect to modules 21 | encoder.begin(); 22 | leds.begin(); 23 | buttons.begin(); 24 | } 25 | 26 | void loop() { 27 | // Get current encoder position value 28 | int value = encoder.get(); 29 | // Reset encoder position if out of range (0-100) 30 | if (value > 100 || value < 0) { 31 | encoder.set(0); 32 | } 33 | 34 | // Get updated encoder value after possible reset 35 | value = encoder.get(); 36 | 37 | Serial.println(value); 38 | 39 | // Set LED brightness based on encoder value (0-100) 40 | // Available colors: RED, BLUE, GREEN, VIOLET, WHITE 41 | leds.set(1, RED, value); 42 | leds.set(2, GREEN, value); 43 | leds.set(3, BLUE, value); 44 | // Update LEDs with new settings 45 | leds.show(); 46 | // Check button states 47 | buttons.update(); 48 | // Set button LEDs to match button press states 49 | buttons.setLeds(buttons.isPressed(0), buttons.isPressed(1), buttons.isPressed(2)); 50 | } 51 | -------------------------------------------------------------------------------- /examples/Modulino_Knob/Knob_Basic/Knob_Basic.ino: -------------------------------------------------------------------------------- 1 | /* 2 | * Modulino Knob - Basic 3 | * 4 | * This example code is in the public domain. 5 | * Copyright (c) 2025 Arduino 6 | * SPDX-License-Identifier: MPL-2.0 7 | */ 8 | 9 | #include 10 | 11 | // Create a ModulinoKnob object 12 | ModulinoKnob knob; 13 | 14 | void setup() { 15 | Serial.begin(9600); 16 | // Initialize Modulino I2C communication 17 | Modulino.begin(); 18 | // Detect and connect to knob module 19 | knob.begin(); 20 | } 21 | 22 | void loop(){ 23 | // Get the current position value of the knob 24 | int position = knob.get(); 25 | // Check if the knob has been pressed (clicked) 26 | bool click = knob.isPressed(); 27 | // Get the rotation direction 28 | int8_t direction = knob.getDirection(); 29 | 30 | Serial.print("Current position is: "); 31 | Serial.println(position); 32 | 33 | if(click){ 34 | Serial.println("Clicked!"); 35 | } 36 | 37 | if (direction == 1) { 38 | Serial.println("Rotated clockwise"); 39 | } else if (direction == -1) { 40 | Serial.println("Rotated counter-clockwise"); 41 | } 42 | 43 | delay(10); // optional small delay to reduce serial spam 44 | } -------------------------------------------------------------------------------- /examples/Modulino_Movement/Movement_Basic/Movement_Basic.ino: -------------------------------------------------------------------------------- 1 | /* 2 | * Modulino Movement - Basic 3 | * 4 | * This example code is in the public domain. 5 | * Copyright (c) 2025 Arduino 6 | * SPDX-License-Identifier: MPL-2.0 7 | */ 8 | 9 | #include "Modulino.h" 10 | 11 | // Create a ModulinoMovement 12 | ModulinoMovement movement; 13 | 14 | 15 | float x, y, z; 16 | float roll, pitch, yaw; 17 | 18 | 19 | void setup() { 20 | Serial.begin(9600); 21 | // Initialize Modulino I2C communication 22 | Modulino.begin(); 23 | // Detect and connect to movement sensor module 24 | movement.begin(); 25 | } 26 | 27 | void loop() { 28 | // Read new movement data from the sensor 29 | movement.update(); 30 | 31 | // Get acceleration and gyroscope values 32 | x = movement.getX(); 33 | y = movement.getY(); 34 | z = movement.getZ(); 35 | roll = movement.getRoll(); 36 | pitch = movement.getPitch(); 37 | yaw = movement.getYaw(); 38 | 39 | // Print acceleration values 40 | Serial.print("A: "); 41 | Serial.print(x, 3); 42 | Serial.print(", "); 43 | Serial.print(y, 3); 44 | Serial.print(", "); 45 | Serial.print(z, 3); 46 | 47 | // Print divider between acceleration and gyroscope 48 | Serial.print(" | G: "); 49 | 50 | // Print gyroscope values 51 | Serial.print(roll, 1); 52 | Serial.print(", "); 53 | Serial.print(pitch, 1); 54 | Serial.print(", "); 55 | Serial.println(yaw, 1); 56 | 57 | delay(200); 58 | } -------------------------------------------------------------------------------- /examples/Modulino_Pixels/Pixels_Basic/Pixels_Basic.ino: -------------------------------------------------------------------------------- 1 | /* 2 | * Modulino Pixels - Basic 3 | * 4 | * This example code is in the public domain. 5 | * Copyright (c) 2025 Arduino 6 | * SPDX-License-Identifier: MPL-2.0 7 | */ 8 | 9 | #include 10 | 11 | // Create a ModulinoPixels object 12 | ModulinoPixels leds; 13 | 14 | int brightness = 25; 15 | 16 | void setup(){ 17 | // Initialize Modulino I2C communication 18 | Modulino.begin(); 19 | // Detect and connect to pixels module 20 | leds.begin(); 21 | } 22 | 23 | void loop(){ 24 | // Set all 8 LEDs to blue color 25 | for (int i = 0; i < 8; i++) { 26 | // Set each LED (index, color, brightness) 27 | // Available colors: RED, BLUE, GREEN, VIOLET, WHITE 28 | leds.set(i, BLUE, brightness); 29 | // Update the physical LEDs with new settings 30 | leds.show(); 31 | } 32 | } -------------------------------------------------------------------------------- /examples/Modulino_Pixels/Simple_Animation/Simple_Animation.ino: -------------------------------------------------------------------------------- 1 | /* 2 | * Modulino Pixels - Simple Animation 3 | * 4 | * This example code is in the public domain. 5 | * Copyright (c) 2025 Arduino 6 | * SPDX-License-Identifier: MPL-2.0 7 | */ 8 | 9 | #include 10 | 11 | // Create a ModulinoPixels object for the LED array 12 | ModulinoPixels leds; 13 | 14 | // Define a custom color for turning off LEDs 15 | ModulinoColor OFF(0, 0, 0); 16 | 17 | int brightness = 25; 18 | 19 | void setup() { 20 | // Initialize Modulino I2C communication 21 | Modulino.begin(); 22 | // Detect and connect to pixels module 23 | leds.begin(); 24 | } 25 | 26 | void loop() { 27 | // Light up LEDs in different colors 28 | // Available colors: RED, BLUE, GREEN, VIOLET, WHITE 29 | for (int i = 0; i < 8; i++) { 30 | if (i == 0 || i == 1) { 31 | setPixel(i, RED); 32 | } else if (i == 2 || i == 3) { 33 | setPixel(i, BLUE); 34 | } else if(i == 4 || i == 5){ 35 | setPixel(i, GREEN); 36 | } else if(i == 6 || i == 7){ 37 | setPixel(i, VIOLET); 38 | } else if (i == 7 || i == 8) { 39 | setPixel(i, WHITE); 40 | } 41 | 42 | delay(25); 43 | 44 | } 45 | 46 | // Turn off all LEDs one by one 47 | for (int i = 0; i < 8; i++) { 48 | setPixel(i, OFF); 49 | delay(25); 50 | } 51 | 52 | } 53 | 54 | void setPixel(int pixel, ModulinoColor color) { 55 | leds.set(pixel, color, brightness); 56 | leds.show(); 57 | } -------------------------------------------------------------------------------- /examples/Modulino_Thermo/Temperature_Humidity_Matrix/Temperature_Humidity_Matrix.ino: -------------------------------------------------------------------------------- 1 | /* 2 | * Modulino Thermo - Temperature Humidity Matrix 3 | * 4 | * This example code is in the public domain. 5 | * Copyright (c) 2025 Arduino 6 | * SPDX-License-Identifier: MPL-2.0 7 | */ 8 | 9 | #include "Modulino.h" 10 | #include "ArduinoGraphics.h" 11 | #include "Arduino_LED_Matrix.h" 12 | 13 | // Create a ModulinoThermo object 14 | ModulinoThermo thermo; 15 | // Create an object to control the LED matrix on UNO R4 WiFi 16 | ArduinoLEDMatrix matrix; 17 | 18 | float temperature = -273.15; 19 | float humidity = 0.0; 20 | 21 | void setup() { 22 | Serial.begin(9600); 23 | 24 | // Initialize Modulino I2C communication 25 | Modulino.begin(); 26 | // Detect and connect to temperature/humidity sensor module 27 | thermo.begin(); 28 | 29 | // Initialize the LED matrix 30 | matrix.begin(); 31 | delay(100); 32 | } 33 | 34 | void loop() { 35 | //Acquire temperature and humidity 36 | temperature = thermo.getTemperature(); 37 | humidity = thermo.getHumidity(); 38 | 39 | //Convert the temperature float to a string with 1 decimal point shown 40 | //and add °C at the end 41 | String temperature_text = String(temperature, 1) + "°C"; 42 | 43 | //Convert the humidity float to a string with no decimal points shown 44 | //and add % at the end 45 | String humidity_text = String(humidity, 0) + "%"; 46 | 47 | //Print each of the sensor values on serial 48 | Serial.print(temperature_text + " "); 49 | Serial.println(humidity_text); 50 | 51 | //Show on the UNO R4 WiFi LED matrix the data 52 | 53 | matrix.beginDraw(); 54 | matrix.stroke(0xFFFFFFFF); 55 | matrix.textScrollSpeed(75); 56 | matrix.textFont(Font_5x7); 57 | matrix.beginText(0, 1, 0xFFFFFF); 58 | matrix.println(" " + temperature_text + " " + humidity_text + " "); 59 | matrix.endText(SCROLL_LEFT); 60 | matrix.endDraw(); 61 | } 62 | -------------------------------------------------------------------------------- /examples/Modulino_Thermo/Thermo_Basic/Thermo_Basic.ino: -------------------------------------------------------------------------------- 1 | /* 2 | * Modulino Thermo - Basic 3 | * 4 | * This example code is in the public domain. 5 | * Copyright (c) 2025 Arduino 6 | * SPDX-License-Identifier: MPL-2.0 7 | */ 8 | 9 | #include 10 | 11 | // Create object instance 12 | ModulinoThermo thermo; 13 | 14 | void setup(){ 15 | Serial.begin(9600); 16 | 17 | // Initialize Modulino I2C communication 18 | Modulino.begin(); 19 | // Detect and connect to temperature/humidity sensor module 20 | thermo.begin(); 21 | } 22 | 23 | void loop(){ 24 | // Read temperature in Celsius from the sensor 25 | float celsius = thermo.getTemperature(); 26 | 27 | // Convert Celsius to Fahrenheit 28 | float fahrenheit = (celsius * 9 / 5) + 32; 29 | 30 | // Read humidity percentage from the sensor 31 | float humidity = thermo.getHumidity(); 32 | 33 | Serial.print("Temperature (C) is: "); 34 | Serial.println(celsius); 35 | 36 | Serial.print("Temperature (F) is: "); 37 | Serial.println(fahrenheit); 38 | 39 | Serial.print("Humidity (rH) is: "); 40 | Serial.println(humidity); 41 | 42 | } -------------------------------------------------------------------------------- /examples/Utilities/AddressChanger/AddressChanger.ino: -------------------------------------------------------------------------------- 1 | /* 2 | * Modulino - Address Changer 3 | * 4 | * This example code is in the public domain. 5 | * Copyright (c) 2025 Arduino 6 | * SPDX-License-Identifier: MPL-2.0 7 | */ 8 | 9 | #include "Wire.h" 10 | 11 | // Setting new_address to 0 means that the module will get back its original address 12 | const uint8_t new_address = 0; 13 | 14 | uint8_t address; 15 | 16 | void setup() { 17 | Wire1.begin(); 18 | Serial.begin(115200); 19 | delay(1000); 20 | if (new_address != 0 && (new_address < 8 || new_address > 0x77)) { 21 | Serial.println("Address outside valid range"); 22 | while (1); 23 | } 24 | // Search for devices and wait for user confirmation 25 | for (int i = 8; i < 128; i++) { 26 | Wire1.beginTransmission(i); 27 | auto err = Wire1.endTransmission(); 28 | if (err == 0) { 29 | Serial.print("Found device at "); 30 | Serial.println(i); 31 | address = i; 32 | Serial.println("Press 'c' to configure te new address"); 33 | } 34 | } 35 | } 36 | 37 | String pinstrapToName(uint8_t pinstrap) { 38 | switch (pinstrap) { 39 | case 0x3C: 40 | return "BUZZER"; 41 | case 0x7C: 42 | return "BUTTONS"; 43 | case 0x76: 44 | case 0x74: 45 | return "ENCODER"; 46 | case 0x6C: 47 | return "SMARTLEDS"; 48 | } 49 | return "UNKNOWN"; 50 | } 51 | 52 | void loop() { 53 | // put your main code here, to run repeatedly: 54 | if (Serial.available()) { 55 | if (Serial.read() == 'c') { 56 | Serial.print("Assigning new address to "); 57 | Serial.println(address); 58 | uint8_t data[40] = { 'C', 'F', new_address * 2 }; 59 | Wire1.beginTransmission(address); 60 | Wire1.write(data, 40); 61 | Wire1.endTransmission(); 62 | delay(1000); 63 | Wire1.requestFrom(new_address, 1); 64 | Serial.println("Device type " + pinstrapToName(Wire1.read()) + " at new address " + String(new_address)); 65 | } 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /examples/Utilities/FirmwareUpdater/FirmwareUpdater.ino: -------------------------------------------------------------------------------- 1 | /* 2 | * Modulino - Firmware Updater 3 | * 4 | * This example code is in the public domain. 5 | * Copyright (c) 2025 Arduino 6 | * SPDX-License-Identifier: MPL-2.0 7 | */ 8 | 9 | #if defined(ARDUINO_UNOWIFIR4) 10 | #include "ArduinoGraphics.h" 11 | #include "Arduino_LED_Matrix.h" 12 | #endif 13 | 14 | #include "Modulino.h" 15 | #include "Wire.h" 16 | #include "fw.h" 17 | 18 | // https://www.st.com/resource/en/application_note/an4221-i2c-protocol-used-in-the-stm32-bootloader-stmicroelectronics.pdf 19 | 20 | bool flash(const uint8_t* binary, size_t lenght, bool verbose = true); 21 | 22 | void setup() { 23 | Serial.begin(115200); 24 | Wire1.begin(); 25 | Wire1.setClock(400000); 26 | 27 | // Send reset to the module; remember, connect only ONE module at a time 28 | if (sendReset() != 0) { 29 | Serial.println("Send reset failed"); 30 | } 31 | 32 | auto result = flash(node_base_bin, node_base_bin_len); 33 | 34 | #if defined(ARDUINO_UNOWIFIR4) 35 | if (result) { 36 | matrixInitAndDraw("PASS"); 37 | } else { 38 | matrixInitAndDraw("FAIL"); 39 | } 40 | #endif 41 | } 42 | 43 | void loop() { 44 | // put your main code here, to run repeatedly: 45 | } 46 | 47 | class SerialVerbose { 48 | public: 49 | SerialVerbose(bool verbose) : _verbose(verbose) {} 50 | int print(String s) { 51 | if (_verbose) { 52 | Serial.print(s); 53 | } 54 | } 55 | int println(String s) { 56 | if (_verbose) { 57 | Serial.println(s); 58 | } 59 | } 60 | int println(int num, int base) { 61 | if (_verbose) { 62 | Serial.println(num, base); 63 | } 64 | } 65 | private: 66 | bool _verbose; 67 | }; 68 | 69 | #if defined(ARDUINO_UNOWIFIR4) 70 | ArduinoLEDMatrix matrix; 71 | 72 | void matrixInitAndDraw(char* text) { 73 | matrix.begin(); 74 | matrix.beginDraw(); 75 | 76 | matrix.stroke(0xFFFFFFFF); 77 | matrix.textFont(Font_4x6); 78 | matrix.beginText(0, 1, 0xFFFFFF); 79 | matrix.println(text); 80 | matrix.endText(); 81 | 82 | matrix.endDraw(); 83 | } 84 | #endif 85 | 86 | bool flash(const uint8_t* binary, size_t lenght, bool verbose) { 87 | 88 | SerialVerbose SerialDebug(verbose); 89 | 90 | uint8_t resp_buf[255]; 91 | int resp; 92 | SerialDebug.println("GET_COMMAND"); 93 | resp = command(0, nullptr, 0, resp_buf, 20, verbose); 94 | 95 | if (resp < 0) { 96 | SerialDebug.println("Failed :("); 97 | return false; 98 | } 99 | 100 | for (int i = 0; i < resp; i++) { 101 | SerialDebug.println(resp_buf[i], HEX); 102 | } 103 | 104 | SerialDebug.println("GET_ID"); 105 | resp = command(2, nullptr, 0, resp_buf, 3, verbose); 106 | for (int i = 0; i < resp; i++) { 107 | SerialDebug.println(resp_buf[i], HEX); 108 | } 109 | 110 | SerialDebug.println("GET_ID"); 111 | resp = command(2, nullptr, 0, resp_buf, 3, verbose); 112 | for (int i = 0; i < resp; i++) { 113 | SerialDebug.println(resp_buf[i], HEX); 114 | } 115 | 116 | SerialDebug.println("MASS_ERASE"); 117 | uint8_t erase_buf[3] = { 0xFF, 0xFF, 0x0 }; 118 | resp = command(0x44, erase_buf, 3, nullptr, 0, verbose); 119 | for (int i = 0; i < resp; i++) { 120 | SerialDebug.println(resp_buf[i], HEX); 121 | } 122 | 123 | for (int i = 0; i < lenght; i += 128) { 124 | SerialDebug.print("WRITE_PAGE "); 125 | SerialDebug.println(i, HEX); 126 | uint8_t write_buf[5] = { 8, 0, i / 256, i % 256 }; 127 | resp = command_write_page(0x32, write_buf, 5, &binary[i], 128, verbose); 128 | for (int i = 0; i < resp; i++) { 129 | SerialDebug.println(resp_buf[i], HEX); 130 | } 131 | delay(10); 132 | } 133 | SerialDebug.println("GO"); 134 | uint8_t jump_buf[5] = { 0x8, 0x00, 0x00, 0x00, 0x8 }; 135 | resp = command(0x21, jump_buf, 5, nullptr, 0, verbose); 136 | return true; 137 | } 138 | 139 | int howmany; 140 | int command_write_page(uint8_t opcode, uint8_t* buf_cmd, size_t len_cmd, const uint8_t* buf_fw, size_t len_fw, bool verbose) { 141 | 142 | SerialVerbose SerialDebug(verbose); 143 | 144 | uint8_t cmd[2]; 145 | cmd[0] = opcode; 146 | cmd[1] = 0xFF ^ opcode; 147 | Wire1.beginTransmission(100); 148 | Wire1.write(cmd, 2); 149 | if (len_cmd > 0) { 150 | buf_cmd[len_cmd - 1] = 0; 151 | for (int i = 0; i < len_cmd - 1; i++) { 152 | buf_cmd[len_cmd - 1] ^= buf_cmd[i]; 153 | } 154 | Wire1.endTransmission(true); 155 | Wire1.requestFrom(100, 1); 156 | auto c = Wire1.read(); 157 | if (c != 0x79) { 158 | SerialDebug.print("error first ack: "); 159 | SerialDebug.println(c, HEX); 160 | return -1; 161 | } 162 | Wire1.beginTransmission(100); 163 | Wire1.write(buf_cmd, len_cmd); 164 | } 165 | Wire1.endTransmission(true); 166 | Wire1.requestFrom(100, 1); 167 | auto c = Wire1.read(); 168 | if (c != 0x79) { 169 | while (c == 0x76) { 170 | delay(10); 171 | Wire1.requestFrom(100, 1); 172 | c = Wire1.read(); 173 | } 174 | if (c != 0x79) { 175 | SerialDebug.print("error second ack: "); 176 | SerialDebug.println(c, HEX); 177 | return -1; 178 | } 179 | } 180 | uint8_t tmpbuf[len_fw + 2] = { len_fw - 1 }; 181 | memcpy(&tmpbuf[1], buf_fw, len_fw); 182 | for (int i = 0; i < len_fw + 1; i++) { 183 | tmpbuf[len_fw + 1] ^= tmpbuf[i]; 184 | } 185 | Wire1.beginTransmission(100); 186 | Wire1.write(tmpbuf, len_fw + 2); 187 | Wire1.endTransmission(true); 188 | Wire1.requestFrom(100, 1); 189 | c = Wire1.read(); 190 | if (c != 0x79) { 191 | while (c == 0x76) { 192 | delay(10); 193 | Wire1.requestFrom(100, 1); 194 | c = Wire1.read(); 195 | } 196 | if (c != 0x79) { 197 | SerialDebug.print("error: "); 198 | SerialDebug.println(c, HEX); 199 | return -1; 200 | } 201 | } 202 | final_ack: 203 | return howmany + 1; 204 | } 205 | 206 | int command(uint8_t opcode, uint8_t* buf_cmd, size_t len_cmd, uint8_t* buf_resp, size_t len_resp, bool verbose) { 207 | 208 | SerialVerbose SerialDebug(verbose); 209 | 210 | uint8_t cmd[2]; 211 | cmd[0] = opcode; 212 | cmd[1] = 0xFF ^ opcode; 213 | Wire1.beginTransmission(100); 214 | Wire1.write(cmd, 2); 215 | if (len_cmd > 0) { 216 | Wire1.endTransmission(true); 217 | Wire1.requestFrom(100, 1); 218 | auto c = Wire1.read(); 219 | if (c != 0x79) { 220 | Serial.print("error first ack: "); 221 | Serial.println(c, HEX); 222 | return -1; 223 | } 224 | Wire1.beginTransmission(100); 225 | Wire1.write(buf_cmd, len_cmd); 226 | } 227 | Wire1.endTransmission(true); 228 | Wire1.requestFrom(100, 1); 229 | auto c = Wire1.read(); 230 | if (c != 0x79) { 231 | while (c == 0x76) { 232 | delay(100); 233 | Wire1.requestFrom(100, 1); 234 | c = Wire1.read(); 235 | SerialDebug.println("retry"); 236 | } 237 | if (c != 0x79) { 238 | SerialDebug.print("error second ack: "); 239 | SerialDebug.println(c, HEX); 240 | return -1; 241 | } 242 | } 243 | int howmany = -1; 244 | if (len_resp == 0) { 245 | goto final_ack; 246 | } 247 | Wire1.requestFrom(100, len_resp); 248 | howmany = Wire1.read(); 249 | for (int j = 0; j < howmany + 1; j++) { 250 | buf_resp[j] = Wire1.read(); 251 | } 252 | 253 | Wire1.requestFrom(100, 1); 254 | c = Wire1.read(); 255 | if (c != 0x79) { 256 | SerialDebug.print("error: "); 257 | SerialDebug.println(c, HEX); 258 | return -1; 259 | } 260 | final_ack: 261 | return howmany + 1; 262 | } 263 | 264 | int sendReset() { 265 | uint8_t buf[3] = { 'D', 'I', 'E' }; 266 | int ret; 267 | for (int i = 8; i < 0x78; i++) { 268 | Wire1.beginTransmission(i); 269 | ret = Wire1.endTransmission(); 270 | if (ret != 2) { 271 | Wire1.beginTransmission(i); 272 | Wire1.write(buf, 40); 273 | ret = Wire1.endTransmission(); 274 | return ret; 275 | } 276 | } 277 | return ret; 278 | } -------------------------------------------------------------------------------- /examples/Utilities/Modulino_PlugNPlay/Modulino_PlugNPlay.ino: -------------------------------------------------------------------------------- 1 | /* 2 | * Modulino - Plug and Play 3 | * 4 | * This example code is in the public domain. 5 | * Copyright (c) 2025 Arduino 6 | * SPDX-License-Identifier: MPL-2.0 7 | */ 8 | 9 | #include "Modulino.h" 10 | 11 | // Create objects for all Modulino modules 12 | ModulinoButtons buttons; 13 | ModulinoBuzzer buzzer; 14 | ModulinoPixels leds; 15 | ModulinoKnob encoder; 16 | ModulinoDistance distance; 17 | ModulinoMovement imu; 18 | ModulinoThermo thermo; 19 | 20 | void setup() { 21 | 22 | Serial.begin(115200); 23 | // Initialize Modulino I2C communication 24 | Modulino.begin(); 25 | // Detect and connect to all modules 26 | distance.begin(); 27 | buttons.begin(); 28 | encoder.begin(); 29 | buzzer.begin(); 30 | leds.begin(); 31 | imu.begin(); 32 | thermo.begin(); 33 | } 34 | 35 | int skip = 0; 36 | int pitch = 0; 37 | bool a = false; 38 | bool b = false; 39 | bool c = false; 40 | 41 | void loop() { 42 | 43 | float x; 44 | float y; 45 | float z; 46 | // Cycle through LED patterns when encoder is pressed 47 | if (encoder.isPressed()) { 48 | skip = (skip + 1) % 5; 49 | } 50 | 51 | // Calculate pitch by combining encoder position and distance sensor value 52 | pitch = encoder.get() + (distance.available() ? distance.get() : 0); 53 | 54 | // When 's' is received over serial, report sensor data 55 | if (Serial.available() && Serial.read() == 's') { 56 | // Update and report accelerometer values 57 | imu.update(); 58 | Serial.print("IMU: x "); 59 | Serial.print(imu.getX(), 3); 60 | Serial.print("\ty "); 61 | Serial.print(imu.getY(), 3); 62 | Serial.print("\tz "); 63 | Serial.println(imu.getZ(), 3); 64 | 65 | // Report temperature and humidity values 66 | Serial.print("Humidity: " + String(thermo.getHumidity())); 67 | Serial.println("\tTemperature: " + String(thermo.getTemperature())); 68 | } 69 | 70 | // Check for button presses 71 | if (buttons.update()) { 72 | // Button A: Red LED and 440Hz tone 73 | if (buttons.isPressed(0)) { 74 | leds.set(1 + skip, RED, 100); 75 | buzzer.tone(440 + pitch, 1000); 76 | } else { 77 | leds.clear(1 + skip); 78 | } 79 | // Button B: Blue LED and 880Hz tone 80 | if (buttons.isPressed(1)) { 81 | leds.set(2 + skip, BLUE, 100); 82 | buzzer.tone(880 + pitch, 1000); 83 | } else { 84 | leds.clear(2 + skip); 85 | } 86 | // Button C: Green LED and 1240Hz tone 87 | if (buttons.isPressed(2)) { 88 | leds.set(3 + skip, GREEN, 100); 89 | buzzer.tone(1240 + pitch, 1000); 90 | } else { 91 | leds.clear(3 + skip); 92 | } 93 | // Update the LEDs 94 | leds.show(); 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /library.properties: -------------------------------------------------------------------------------- 1 | name=Modulino 2 | version=0.5.0 3 | author=Arduino 4 | maintainer=Arduino 5 | sentence=Arduino Library for Modulinos 6 | paragraph=The Arduino Modulino® Library simplifies the integration of Modulino®, compact devices that connect via Qwiic and communicate over I2C. It provides an easy-to-use interface for working with sensors, actuators, and other modules on Arduino boards. 7 | category=Communication 8 | url=https://github.com/arduino-libraries/Modulino 9 | architectures=* 10 | includes=Modulino.h 11 | depends=STM32duino VL53L4CD,STM32duino VL53L4ED,Arduino_LSM6DSOX,Arduino_LPS22HB,Arduino_HS300x,ArduinoGraphics 12 | -------------------------------------------------------------------------------- /src/Modulino.cpp: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2025 Arduino SA 2 | // SPDX-License-Identifier: MPL-2.0 3 | 4 | #include "Modulino.h" 5 | 6 | // The only singleton that needs to exist 7 | // Build before other objects to fix the Wire object 8 | ModulinoClass Modulino __attribute__ ((init_priority (101))); 9 | 10 | ModulinoColor RED(255, 0, 0); 11 | ModulinoColor BLUE(0, 0, 255); 12 | ModulinoColor GREEN(0, 255, 0); 13 | ModulinoColor VIOLET(255, 0, 255); 14 | ModulinoColor WHITE(255, 255, 255); 15 | 16 | #if __has_include("Arduino_LED_Matrix.h") 17 | void __increaseI2CPriority() { 18 | for (int i = 0; i < 96; i++) { 19 | if (R_ICU->IELSR[i] == BSP_PRV_IELS_ENUM(EVENT_IIC0_TXI)) { 20 | NVIC_SetPriority(IRQn_Type(i), 6); 21 | NVIC_SetPriority(IRQn_Type(i+1), 6); 22 | NVIC_SetPriority(IRQn_Type(i+2), 6); 23 | NVIC_SetPriority(IRQn_Type(i+3), 6); 24 | } 25 | } 26 | } 27 | #else 28 | void __increaseI2CPriority() {} 29 | #endif -------------------------------------------------------------------------------- /src/Modulino.h: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2025 Arduino SA 2 | // SPDX-License-Identifier: MPL-2.0 3 | 4 | #ifndef ARDUINO_LIBRARIES_MODULINO_H 5 | #define ARDUINO_LIBRARIES_MODULINO_H 6 | 7 | #include "Wire.h" 8 | #include // from stm32duino 9 | #include // from stm32duino 10 | #include "Arduino_LSM6DSOX.h" 11 | #include 12 | #include 13 | //#include // need to provide a way to change Wire object 14 | 15 | #ifndef ARDUINO_API_VERSION 16 | #define PinStatus uint8_t 17 | #define HardwareI2C TwoWire 18 | #endif 19 | 20 | void __increaseI2CPriority(); 21 | 22 | class ModulinoClass { 23 | public: 24 | #ifdef ARDUINO_UNOR4_WIFI 25 | void begin(HardwareI2C& wire = Wire1) { 26 | #else 27 | void begin(HardwareI2C& wire = Wire) { 28 | #endif 29 | 30 | #ifdef ARDUINO_UNOR4_WIFI 31 | // unlock Wire1 bus at begin since we don't know the state of the system 32 | pinMode(WIRE1_SCL_PIN, OUTPUT); 33 | for (int i = 0; i < 20; i++) { 34 | digitalWrite(WIRE1_SCL_PIN, HIGH); 35 | digitalWrite(WIRE1_SCL_PIN, LOW); 36 | } 37 | #endif 38 | _wire = &wire; 39 | _wire->begin(); 40 | _wire->setClock(100000); 41 | __increaseI2CPriority(); 42 | } 43 | friend class Module; 44 | protected: 45 | HardwareI2C* _wire; 46 | }; 47 | 48 | extern ModulinoClass Modulino; 49 | 50 | class Module : public Printable { 51 | public: 52 | Module(uint8_t address = 0xFF, const char* name = "") 53 | : address(address), name((char *)name) {} 54 | virtual ~Module() {} 55 | bool begin() { 56 | if (address >= 0x7F) { 57 | address = discover() / 2; // divide by 2 to match address in fw main.c 58 | } 59 | return (address < 0x7F); 60 | } 61 | virtual uint8_t discover() { 62 | return 0xFF; 63 | } 64 | operator bool() { 65 | return address < 0x7F; 66 | } 67 | static HardwareI2C* getWire() { 68 | return Modulino._wire; 69 | } 70 | bool read(uint8_t* buf, int howmany) { 71 | if (address >= 0x7F) { 72 | return false; 73 | } 74 | Modulino._wire->requestFrom(address, howmany + 1); 75 | auto start = millis(); 76 | while ((Modulino._wire->available() == 0) && (millis() - start < 100)) { 77 | delay(1); 78 | } 79 | if (Modulino._wire->available() < howmany) { 80 | return false; 81 | } 82 | pinstrap_address = Modulino._wire->read(); 83 | for (int i = 0; i < howmany; i++) { 84 | buf[i] = Modulino._wire->read(); 85 | } 86 | while (Modulino._wire->available()) { 87 | Modulino._wire->read(); 88 | } 89 | return true; 90 | } 91 | bool write(uint8_t* buf, int howmany) { 92 | if (address >= 0x7F) { 93 | return false; 94 | } 95 | Modulino._wire->beginTransmission(address); 96 | for (int i = 0; i < howmany; i++) { 97 | Modulino._wire->write(buf[i]); 98 | } 99 | Modulino._wire->endTransmission(); 100 | return true; 101 | } 102 | bool nonDefaultAddress() { 103 | return (pinstrap_address != address); 104 | } 105 | virtual size_t printTo(Print& p) const { 106 | return p.print(name); 107 | } 108 | bool scan(uint8_t addr) { 109 | Modulino._wire->beginTransmission(addr / 2); // multply by 2 to match address in fw main.c 110 | auto ret = Modulino._wire->endTransmission(); 111 | if (ret == 0) { 112 | // could also ask for 1 byte and check if it's truely a modulino of that kind 113 | return true; 114 | } 115 | return false; 116 | } 117 | private: 118 | uint8_t address; 119 | uint8_t pinstrap_address; 120 | char* name; 121 | }; 122 | 123 | class ModulinoButtons : public Module { 124 | public: 125 | ModulinoButtons(uint8_t address = 0xFF) 126 | : Module(address, "BUTTONS") {} 127 | PinStatus isPressed(int index) { 128 | return last_status[index] ? HIGH : LOW; 129 | } 130 | PinStatus isPressed(char button) { 131 | int index = buttonToIndex(button); 132 | if (index < 0) return LOW; 133 | return isPressed(index); 134 | } 135 | PinStatus isPressed(const char *button) { 136 | if (button == nullptr || button[0] == '\0' || button[1] != '\0') { 137 | return LOW; 138 | } 139 | return isPressed(button[0]); 140 | } 141 | bool update() { 142 | uint8_t buf[3]; 143 | auto res = read((uint8_t*)buf, 3); 144 | auto ret = res && (buf[0] != last_status[0] || buf[1] != last_status[1] || buf[2] != last_status[2]); 145 | last_status[0] = buf[0]; 146 | last_status[1] = buf[1]; 147 | last_status[2] = buf[2]; 148 | return ret; 149 | } 150 | void setLeds(bool a, bool b, bool c) { 151 | uint8_t buf[3]; 152 | buf[0] = a; 153 | buf[1] = b; 154 | buf[2] = c; 155 | write((uint8_t*)buf, 3); 156 | return; 157 | } 158 | virtual uint8_t discover() { 159 | for (unsigned int i = 0; i < sizeof(match)/sizeof(match[0]); i++) { 160 | if (scan(match[i])) { 161 | return match[i]; 162 | } 163 | } 164 | return 0xFF; 165 | } 166 | private: 167 | bool last_status[3]; 168 | int buttonToIndex(char button) { 169 | switch (toupper(button)) { 170 | case 'A': return 0; 171 | case 'B': return 1; 172 | case 'C': return 2; 173 | default: return -1; 174 | } 175 | } 176 | protected: 177 | uint8_t match[1] = { 0x7C }; // same as fw main.c 178 | }; 179 | 180 | class ModulinoBuzzer : public Module { 181 | public: 182 | ModulinoBuzzer(uint8_t address = 0xFF) 183 | : Module(address, "BUZZER") {} 184 | void (tone)(size_t freq, size_t len_ms) { 185 | uint8_t buf[8]; 186 | memcpy(&buf[0], &freq, 4); 187 | memcpy(&buf[4], &len_ms, 4); 188 | write(buf, 8); 189 | } 190 | void (noTone)() { 191 | uint8_t buf[8]; 192 | memset(&buf[0], 0, 8); 193 | write(buf, 8); 194 | } 195 | virtual uint8_t discover() { 196 | for (unsigned int i = 0; i < sizeof(match)/sizeof(match[0]); i++) { 197 | if (scan(match[i])) { 198 | return match[i]; 199 | } 200 | } 201 | return 0xFF; 202 | } 203 | protected: 204 | uint8_t match[1] = { 0x3C }; // same as fw main.c 205 | }; 206 | 207 | class ModulinoColor { 208 | public: 209 | ModulinoColor(uint8_t r, uint8_t g, uint8_t b) 210 | : r(r), g(g), b(b) {} 211 | operator uint32_t() { 212 | return (b << 8 | g << 16 | r << 24); 213 | } 214 | private: 215 | uint8_t r, g, b; 216 | }; 217 | 218 | class ModulinoPixels : public Module { 219 | public: 220 | ModulinoPixels(uint8_t address = 0xFF) 221 | : Module(address, "LEDS") { 222 | memset((uint8_t*)data, 0xE0, NUMLEDS * 4); 223 | } 224 | void set(int idx, ModulinoColor rgb, uint8_t brightness = 25) { 225 | if (idx < NUMLEDS) { 226 | uint8_t _brightness = map(brightness, 0, 100, 0, 0x1F); 227 | data[idx] = (uint32_t)rgb | _brightness | 0xE0; 228 | } 229 | } 230 | void set(int idx, uint8_t r, uint8_t g, uint8_t b, uint8_t brightness = 5) { 231 | set(idx, ModulinoColor(r,g,b), brightness); 232 | } 233 | void clear(int idx) { 234 | set(idx, ModulinoColor(0,0,0), 0); 235 | } 236 | void clear() { 237 | memset((uint8_t*)data, 0xE0, NUMLEDS * 4); 238 | } 239 | void show() { 240 | write((uint8_t*)data, NUMLEDS * 4); 241 | } 242 | virtual uint8_t discover() { 243 | for (unsigned int i = 0; i < sizeof(match)/sizeof(match[0]); i++) { 244 | if (scan(match[i])) { 245 | return match[i]; 246 | } 247 | } 248 | return 0xFF; 249 | } 250 | private: 251 | static const int NUMLEDS = 8; 252 | uint32_t data[NUMLEDS]; 253 | protected: 254 | uint8_t match[1] = { 0x6C }; 255 | }; 256 | 257 | 258 | class ModulinoKnob : public Module { 259 | public: 260 | ModulinoKnob(uint8_t address = 0xFF) 261 | : Module(address, "ENCODER") {} 262 | bool begin() { 263 | auto ret = Module::begin(); 264 | if (ret) { 265 | auto _val = get(); 266 | _lastPosition = _val; 267 | _lastDebounceTime = millis(); 268 | set(100); 269 | if (get() != 100) { 270 | _bug_on_set = true; 271 | set(-_val); 272 | } else { 273 | set(_val); 274 | } 275 | } 276 | return ret; 277 | } 278 | int16_t get() { 279 | uint8_t buf[3]; 280 | auto res = read(buf, 3); 281 | if (res == false) { 282 | return 0; 283 | } 284 | _pressed = (buf[2] != 0); 285 | int16_t ret = buf[0] | (buf[1] << 8); 286 | return ret; 287 | } 288 | void set(int16_t value) { 289 | if (_bug_on_set) { 290 | value = -value; 291 | } 292 | uint8_t buf[4]; 293 | memcpy(buf, &value, 2); 294 | write(buf, 4); 295 | } 296 | bool isPressed() { 297 | get(); 298 | return _pressed; 299 | } 300 | int8_t getDirection() { 301 | unsigned long now = millis(); 302 | if (now - _lastDebounceTime < DEBOUNCE_DELAY) { 303 | return 0; 304 | } 305 | int16_t current = get(); 306 | int8_t direction = 0; 307 | if (current > _lastPosition) { 308 | direction = 1; 309 | } else if (current < _lastPosition) { 310 | direction = -1; 311 | } 312 | if (direction != 0) { 313 | _lastDebounceTime = now; 314 | _lastPosition = current; 315 | } 316 | return direction; 317 | } 318 | virtual uint8_t discover() { 319 | for (unsigned int i = 0; i < sizeof(match)/sizeof(match[0]); i++) { 320 | if (scan(match[i])) { 321 | return match[i]; 322 | } 323 | } 324 | return 0xFF; 325 | } 326 | private: 327 | bool _pressed = false; 328 | bool _bug_on_set = false; 329 | int16_t _lastPosition = 0; 330 | unsigned long _lastDebounceTime = 0; 331 | static constexpr unsigned long DEBOUNCE_DELAY = 30; 332 | protected: 333 | uint8_t match[2] = { 0x74, 0x76 }; 334 | }; 335 | 336 | extern ModulinoColor RED; 337 | extern ModulinoColor BLUE; 338 | extern ModulinoColor GREEN; 339 | extern ModulinoColor VIOLET; 340 | extern ModulinoColor WHITE; 341 | 342 | class ModulinoMovement : public Module { 343 | public: 344 | bool begin() { 345 | if (_imu == nullptr) { 346 | _imu = new LSM6DSOXClass(*((TwoWire*)getWire()), 0x6A); 347 | } 348 | initialized = _imu->begin(); 349 | __increaseI2CPriority(); 350 | return initialized != 0; 351 | } 352 | operator bool() { 353 | return (initialized != 0); 354 | } 355 | int update() { 356 | if (initialized) { 357 | int accel = _imu->readAcceleration(x, y, z); 358 | int gyro = _imu->readGyroscope(roll, pitch, yaw); 359 | return accel && gyro; 360 | } 361 | return 0; 362 | } 363 | int available() { 364 | if (initialized) { 365 | return _imu->accelerationAvailable() && _imu->gyroscopeAvailable(); 366 | } 367 | return 0; 368 | } 369 | float getX() { 370 | return x; 371 | } 372 | float getY() { 373 | return y; 374 | } 375 | float getZ() { 376 | return z; 377 | } 378 | float getRoll() { 379 | return roll; 380 | } 381 | float getPitch() { 382 | return pitch; 383 | } 384 | float getYaw() { 385 | return yaw; 386 | } 387 | private: 388 | LSM6DSOXClass* _imu = nullptr; 389 | float x,y,z; 390 | float roll,pitch,yaw; //gx, gy, gz 391 | int initialized = 0; 392 | }; 393 | 394 | class ModulinoThermo: public Module { 395 | public: 396 | bool begin() { 397 | if (_sensor == nullptr) { 398 | _sensor = new HS300xClass(*((TwoWire*)getWire())); 399 | } 400 | initialized = _sensor->begin(); 401 | __increaseI2CPriority(); 402 | return initialized; 403 | } 404 | operator bool() { 405 | return (initialized != 0); 406 | } 407 | float getHumidity() { 408 | if (initialized) { 409 | return _sensor->readHumidity(); 410 | } 411 | return 0; 412 | } 413 | float getTemperature() { 414 | if (initialized) { 415 | return _sensor->readTemperature(); 416 | } 417 | return 0; 418 | } 419 | private: 420 | HS300xClass* _sensor = nullptr; 421 | int initialized = 0; 422 | }; 423 | 424 | class ModulinoPressure : public Module { 425 | public: 426 | bool begin() { 427 | if (_barometer == nullptr) { 428 | _barometer = new LPS22HBClass(*((TwoWire*)getWire())); 429 | } 430 | initialized = _barometer->begin(); 431 | if (initialized == 0) { 432 | // unfortunately LPS22HBClass calles Wire.end() on failure, restart it 433 | getWire()->begin(); 434 | } 435 | __increaseI2CPriority(); 436 | return initialized != 0; 437 | } 438 | operator bool() { 439 | return (initialized != 0); 440 | } 441 | float getPressure() { 442 | if (initialized) { 443 | return _barometer->readPressure(); 444 | } 445 | return 0; 446 | } 447 | float getTemperature() { 448 | if (initialized) { 449 | return _barometer->readTemperature(); 450 | } 451 | return 0; 452 | } 453 | private: 454 | LPS22HBClass* _barometer = nullptr; 455 | int initialized = 0; 456 | }; 457 | 458 | class ModulinoLight : public Module { 459 | 460 | }; 461 | 462 | class _distance_api { 463 | public: 464 | _distance_api(VL53L4CD* sensor) : sensor(sensor) { 465 | isVL53L4CD = true; 466 | }; 467 | _distance_api(VL53L4ED* sensor) : sensor(sensor) {}; 468 | uint8_t setRangeTiming(uint32_t timing_budget_ms, uint32_t inter_measurement_ms) { 469 | if (isVL53L4CD) { 470 | return ((VL53L4CD*)sensor)->VL53L4CD_SetRangeTiming(timing_budget_ms, inter_measurement_ms); 471 | } else { 472 | return ((VL53L4ED*)sensor)->VL53L4ED_SetRangeTiming(timing_budget_ms, inter_measurement_ms); 473 | } 474 | } 475 | uint8_t startRanging() { 476 | if (isVL53L4CD) { 477 | return ((VL53L4CD*)sensor)->VL53L4CD_StartRanging(); 478 | } else { 479 | return ((VL53L4ED*)sensor)->VL53L4ED_StartRanging(); 480 | } 481 | } 482 | uint8_t checkForDataReady(uint8_t* p_is_data_ready) { 483 | if (isVL53L4CD) { 484 | return ((VL53L4CD*)sensor)->VL53L4CD_CheckForDataReady(p_is_data_ready); 485 | } else { 486 | return ((VL53L4ED*)sensor)->VL53L4ED_CheckForDataReady(p_is_data_ready); 487 | } 488 | } 489 | uint8_t clearInterrupt() { 490 | if (isVL53L4CD) { 491 | return ((VL53L4CD*)sensor)->VL53L4CD_ClearInterrupt(); 492 | } else { 493 | return ((VL53L4ED*)sensor)->VL53L4ED_ClearInterrupt(); 494 | } 495 | } 496 | uint8_t getResult(void* result) { 497 | if (isVL53L4CD) { 498 | return ((VL53L4CD*)sensor)->VL53L4CD_GetResult((VL53L4CD_Result_t*)result); 499 | } else { 500 | return ((VL53L4ED*)sensor)->VL53L4ED_GetResult((VL53L4ED_ResultsData_t*)result); 501 | } 502 | } 503 | private: 504 | void* sensor; 505 | bool isVL53L4CD = false; 506 | }; 507 | 508 | class ModulinoDistance : public Module { 509 | public: 510 | bool begin() { 511 | // try scanning for 0x29 since the library contains a while(true) on begin() 512 | getWire()->beginTransmission(0x29); 513 | if (getWire()->endTransmission() != 0) { 514 | return false; 515 | } 516 | tof_sensor = new VL53L4CD((TwoWire*)getWire(), -1); 517 | auto ret = tof_sensor->InitSensor(); 518 | if (ret != VL53L4CD_ERROR_NONE) { 519 | delete tof_sensor; 520 | tof_sensor = nullptr; 521 | tof_sensor_alt = new VL53L4ED((TwoWire*)getWire(), -1); 522 | ret = tof_sensor_alt->InitSensor(); 523 | if (ret == VL53L4ED_ERROR_NONE) { 524 | api = new _distance_api(tof_sensor_alt); 525 | } else { 526 | delete tof_sensor_alt; 527 | tof_sensor_alt = nullptr; 528 | return false; 529 | } 530 | } else { 531 | api = new _distance_api(tof_sensor); 532 | } 533 | 534 | __increaseI2CPriority(); 535 | api->setRangeTiming(20, 0); 536 | api->startRanging(); 537 | return true; 538 | } 539 | operator bool() { 540 | return (api != nullptr); 541 | } 542 | bool available() { 543 | if (api == nullptr) { 544 | return false; 545 | } 546 | 547 | uint8_t NewDataReady = 0; 548 | api->checkForDataReady(&NewDataReady); 549 | if (NewDataReady) { 550 | api->clearInterrupt(); 551 | api->getResult(&results); 552 | } 553 | if (results.range_status == 0) { 554 | internal = results.distance_mm; 555 | } else { 556 | internal = NAN; 557 | } 558 | return !isnan(internal); 559 | } 560 | float get() { 561 | return internal; 562 | } 563 | private: 564 | VL53L4CD* tof_sensor = nullptr; 565 | VL53L4ED* tof_sensor_alt = nullptr; 566 | VL53L4CD_Result_t results; 567 | //VL53L4ED_ResultsData_t results; 568 | float internal = NAN; 569 | _distance_api* api = nullptr; 570 | }; 571 | 572 | #endif 573 | -------------------------------------------------------------------------------- /src/fw.h: -------------------------------------------------------------------------------- 1 | const 2 | unsigned char node_base_bin[] = { 3 | 0x00, 0x18, 0x00, 0x20, 0x71, 0x2d, 0x00, 0x08, 0xfd, 0x08, 0x00, 0x08, 4 | 0xff, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x09, 0x00, 0x08, 7 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x09, 0x00, 0x08, 8 | 0x05, 0x09, 0x00, 0x08, 0xc1, 0x2d, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 9 | 0xc1, 0x2d, 0x00, 0x08, 0xc1, 0x2d, 0x00, 0x08, 0xc1, 0x2d, 0x00, 0x08, 10 | 0xc1, 0x2d, 0x00, 0x08, 0xc1, 0x2d, 0x00, 0x08, 0xc1, 0x2d, 0x00, 0x08, 11 | 0x00, 0x00, 0x00, 0x00, 0xc1, 0x2d, 0x00, 0x08, 0xc1, 0x2d, 0x00, 0x08, 12 | 0xc1, 0x2d, 0x00, 0x08, 0xc1, 0x2d, 0x00, 0x08, 0xc1, 0x2d, 0x00, 0x08, 13 | 0xc1, 0x2d, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0xc1, 0x2d, 0x00, 0x08, 14 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0x2d, 0x00, 0x08, 15 | 0x00, 0x00, 0x00, 0x00, 0xc1, 0x2d, 0x00, 0x08, 0xc1, 0x2d, 0x00, 0x08, 16 | 0x0d, 0x09, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0xc1, 0x2d, 0x00, 0x08, 17 | 0x00, 0x00, 0x00, 0x00, 0xc1, 0x2d, 0x00, 0x08, 0xc1, 0x2d, 0x00, 0x08, 18 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 19 | 0x02, 0xb4, 0x71, 0x46, 0x49, 0x08, 0x49, 0x00, 0x09, 0x5c, 0x49, 0x00, 20 | 0x8e, 0x44, 0x02, 0xbc, 0x70, 0x47, 0xc0, 0x46, 0x00, 0x29, 0x34, 0xd0, 21 | 0x01, 0x23, 0x00, 0x22, 0x10, 0xb4, 0x88, 0x42, 0x2c, 0xd3, 0x01, 0x24, 22 | 0x24, 0x07, 0xa1, 0x42, 0x04, 0xd2, 0x81, 0x42, 0x02, 0xd2, 0x09, 0x01, 23 | 0x1b, 0x01, 0xf8, 0xe7, 0xe4, 0x00, 0xa1, 0x42, 0x04, 0xd2, 0x81, 0x42, 24 | 0x02, 0xd2, 0x49, 0x00, 0x5b, 0x00, 0xf8, 0xe7, 0x88, 0x42, 0x01, 0xd3, 25 | 0x40, 0x1a, 0x1a, 0x43, 0x4c, 0x08, 0xa0, 0x42, 0x02, 0xd3, 0x00, 0x1b, 26 | 0x5c, 0x08, 0x22, 0x43, 0x8c, 0x08, 0xa0, 0x42, 0x02, 0xd3, 0x00, 0x1b, 27 | 0x9c, 0x08, 0x22, 0x43, 0xcc, 0x08, 0xa0, 0x42, 0x02, 0xd3, 0x00, 0x1b, 28 | 0xdc, 0x08, 0x22, 0x43, 0x00, 0x28, 0x03, 0xd0, 0x1b, 0x09, 0x01, 0xd0, 29 | 0x09, 0x09, 0xe3, 0xe7, 0x10, 0x00, 0x10, 0xbc, 0x70, 0x47, 0x01, 0xb5, 30 | 0x00, 0x20, 0x00, 0xf0, 0x0b, 0xf8, 0x02, 0xbd, 0x00, 0x29, 0xf8, 0xd0, 31 | 0x03, 0xb5, 0xff, 0xf7, 0xc1, 0xff, 0x0e, 0xbc, 0x42, 0x43, 0x89, 0x1a, 32 | 0x18, 0x47, 0xc0, 0x46, 0x70, 0x47, 0xc0, 0x46, 0x10, 0xb5, 0x06, 0x4c, 33 | 0x23, 0x78, 0x00, 0x2b, 0x07, 0xd1, 0x05, 0x4b, 0x00, 0x2b, 0x02, 0xd0, 34 | 0x04, 0x48, 0x00, 0xe0, 0x00, 0xbf, 0x01, 0x23, 0x23, 0x70, 0x10, 0xbd, 35 | 0x0c, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x30, 0x2e, 0x00, 0x08, 36 | 0x04, 0x4b, 0x10, 0xb5, 0x00, 0x2b, 0x03, 0xd0, 0x03, 0x49, 0x04, 0x48, 37 | 0x00, 0xe0, 0x00, 0xbf, 0x10, 0xbd, 0xc0, 0x46, 0x00, 0x00, 0x00, 0x00, 38 | 0x10, 0x00, 0x00, 0x20, 0x30, 0x2e, 0x00, 0x08, 0xf8, 0xb5, 0xa0, 0x25, 39 | 0x06, 0x00, 0x07, 0x24, 0x01, 0x27, 0xed, 0x05, 0x32, 0x00, 0x22, 0x41, 40 | 0x01, 0x21, 0x28, 0x00, 0x3a, 0x40, 0x01, 0xf0, 0x97, 0xf9, 0x01, 0x22, 41 | 0x02, 0x21, 0x28, 0x00, 0x01, 0xf0, 0x92, 0xf9, 0x00, 0x22, 0x02, 0x21, 42 | 0x28, 0x00, 0x01, 0xf0, 0x8d, 0xf9, 0x01, 0x3c, 0xec, 0xd2, 0xf8, 0xbd, 43 | 0x10, 0xb5, 0x72, 0xb6, 0x00, 0x22, 0x0a, 0x4b, 0x1a, 0x60, 0x00, 0xf0, 44 | 0xfb, 0xfc, 0x01, 0x23, 0x08, 0x4a, 0x5b, 0x42, 0xd3, 0x67, 0xc0, 0x22, 45 | 0x07, 0x49, 0x52, 0x00, 0x8b, 0x50, 0x62, 0xb6, 0x06, 0x4b, 0x1b, 0x68, 46 | 0x83, 0xf3, 0x08, 0x88, 0x05, 0x4b, 0x1b, 0x68, 0x98, 0x47, 0xfe, 0xe7, 47 | 0x10, 0xe0, 0x00, 0xe0, 0x04, 0xe1, 0x00, 0xe0, 0x00, 0xe1, 0x00, 0xe0, 48 | 0x00, 0x00, 0xff, 0x1f, 0x04, 0x00, 0xff, 0x1f, 0x70, 0xb5, 0x04, 0x00, 49 | 0xa0, 0x20, 0x00, 0x22, 0x01, 0x21, 0xc0, 0x05, 0x01, 0xf0, 0x60, 0xf9, 50 | 0xa0, 0x20, 0x00, 0x22, 0x02, 0x21, 0xc0, 0x05, 0x01, 0xf0, 0x5a, 0xf9, 51 | 0x00, 0x20, 0xff, 0xf7, 0xb3, 0xff, 0x00, 0x20, 0xff, 0xf7, 0xb0, 0xff, 52 | 0x00, 0x20, 0xff, 0xf7, 0xad, 0xff, 0x25, 0x00, 0x00, 0x20, 0xff, 0xf7, 53 | 0xa9, 0xff, 0x20, 0x35, 0x20, 0x78, 0x01, 0x34, 0xff, 0xf7, 0xa4, 0xff, 54 | 0xac, 0x42, 0xf9, 0xd1, 0x00, 0x20, 0xff, 0xf7, 0x9f, 0xff, 0xa0, 0x20, 55 | 0x00, 0x22, 0x01, 0x21, 0xc0, 0x05, 0x01, 0xf0, 0x3d, 0xf9, 0xa0, 0x20, 56 | 0x00, 0x22, 0x02, 0x21, 0xc0, 0x05, 0x01, 0xf0, 0x37, 0xf9, 0x70, 0xbd, 57 | 0x30, 0xb5, 0x9d, 0xb0, 0x14, 0x22, 0x00, 0x21, 0x03, 0xa8, 0x02, 0xf0, 58 | 0x96, 0xfd, 0x68, 0x4b, 0x1b, 0x78, 0x74, 0x2b, 0x00, 0xd1, 0x78, 0xe0, 59 | 0x06, 0xd8, 0x3c, 0x2b, 0x1c, 0xd0, 0x6c, 0x2b, 0x00, 0xd1, 0xab, 0xe0, 60 | 0x1d, 0xb0, 0x30, 0xbd, 0x76, 0x2b, 0x6e, 0xd0, 0x7c, 0x2b, 0xf9, 0xd1, 61 | 0xa0, 0x20, 0x01, 0x24, 0x75, 0x3b, 0x03, 0xa9, 0xc0, 0x05, 0x03, 0x93, 62 | 0x05, 0x94, 0x01, 0xf0, 0x5b, 0xf8, 0x38, 0x23, 0xa0, 0x20, 0x03, 0x93, 63 | 0x00, 0x23, 0x03, 0xa9, 0xc0, 0x05, 0x04, 0x94, 0x05, 0x93, 0x01, 0xf0, 64 | 0x51, 0xf8, 0xe5, 0xe7, 0x0c, 0x22, 0x00, 0x21, 0x68, 0x46, 0x02, 0xf0, 65 | 0x6c, 0xfd, 0x1c, 0x22, 0x00, 0x21, 0x08, 0xa8, 0x02, 0xf0, 0x67, 0xfd, 66 | 0x34, 0x22, 0x00, 0x21, 0x0f, 0xa8, 0x02, 0xf0, 0x62, 0xfd, 0x4f, 0x4c, 67 | 0x4f, 0x4b, 0x50, 0x4a, 0x23, 0x60, 0x00, 0x23, 0x20, 0x00, 0x63, 0x60, 68 | 0xa3, 0x60, 0xe2, 0x60, 0x23, 0x61, 0x63, 0x61, 0xa3, 0x61, 0x02, 0xf0, 69 | 0x7f, 0xfa, 0x00, 0x28, 0x01, 0xd0, 0x72, 0xb6, 0xfe, 0xe7, 0x00, 0x90, 70 | 0x01, 0x90, 0x02, 0x90, 0x69, 0x46, 0x20, 0x00, 0x02, 0xf0, 0x92, 0xfc, 71 | 0x02, 0x1e, 0x01, 0xd0, 0x72, 0xb6, 0xfe, 0xe7, 0x60, 0x23, 0x09, 0x90, 72 | 0x0a, 0x90, 0x0b, 0x90, 0x0c, 0x90, 0x0d, 0x90, 0x0e, 0x90, 0x08, 0xa9, 73 | 0x20, 0x00, 0x08, 0x93, 0x02, 0xf0, 0x20, 0xfb, 0x00, 0x28, 0x01, 0xd0, 74 | 0x72, 0xb6, 0xfe, 0xe7, 0x80, 0x23, 0x9b, 0x01, 0x14, 0x93, 0x80, 0x23, 75 | 0x0f, 0x90, 0x10, 0x90, 0x11, 0x90, 0x12, 0x90, 0x13, 0x90, 0x15, 0x90, 76 | 0x16, 0x90, 0x17, 0x90, 0x9b, 0x04, 0x19, 0x90, 0x1a, 0x90, 0x1b, 0x90, 77 | 0x0f, 0xa9, 0x20, 0x00, 0x18, 0x93, 0x02, 0xf0, 0x99, 0xfc, 0x00, 0x28, 78 | 0x01, 0xd0, 0x72, 0xb6, 0xfe, 0xe7, 0x20, 0x00, 0x00, 0xf0, 0x6e, 0xfb, 79 | 0x8c, 0xe7, 0xa0, 0x20, 0x04, 0x23, 0x01, 0x25, 0x03, 0xa9, 0xc0, 0x05, 80 | 0x03, 0x93, 0x05, 0x95, 0x00, 0xf0, 0xee, 0xff, 0x20, 0x22, 0x00, 0x21, 81 | 0x10, 0xa8, 0x02, 0xf0, 0x0a, 0xfd, 0x0c, 0x22, 0x00, 0x21, 0x08, 0xa8, 82 | 0x02, 0xf0, 0x05, 0xfd, 0x20, 0x4c, 0x21, 0x4b, 0x21, 0x4a, 0x23, 0x60, 83 | 0x00, 0x23, 0x20, 0x00, 0x0f, 0xa9, 0x63, 0x60, 0xa3, 0x60, 0xe2, 0x60, 84 | 0x23, 0x61, 0x63, 0x61, 0xa3, 0x61, 0x0f, 0x95, 0x11, 0x95, 0x15, 0x95, 85 | 0x02, 0xf0, 0x48, 0xfa, 0x00, 0x28, 0x01, 0xd0, 0x72, 0xb6, 0xfe, 0xe7, 86 | 0x08, 0x90, 0x09, 0x90, 0x0a, 0x90, 0x08, 0xa9, 0x20, 0x00, 0x02, 0xf0, 87 | 0x31, 0xfc, 0x00, 0x28, 0x01, 0xd0, 0x72, 0xb6, 0xfe, 0xe7, 0x3c, 0x21, 88 | 0x20, 0x00, 0x02, 0xf0, 0x6d, 0xf9, 0x53, 0xe7, 0xa0, 0x20, 0x07, 0x23, 89 | 0x01, 0x24, 0x03, 0xa9, 0xc0, 0x05, 0x03, 0x93, 0x04, 0x94, 0x00, 0xf0, 90 | 0xb5, 0xff, 0xa0, 0x20, 0x22, 0x00, 0x04, 0x21, 0xc0, 0x05, 0x01, 0xf0, 91 | 0x69, 0xf8, 0x09, 0x4c, 0x20, 0x22, 0xe0, 0x21, 0x20, 0x00, 0x02, 0xf0, 92 | 0xca, 0xfc, 0x20, 0x00, 0xff, 0xf7, 0xf8, 0xfe, 0x3a, 0xe7, 0xc0, 0x46, 93 | 0x2c, 0x00, 0x00, 0x20, 0xb0, 0x00, 0x00, 0x20, 0x00, 0x2c, 0x01, 0x40, 94 | 0xff, 0xff, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x20, 0x20, 0x4b, 0x13, 0xb5, 95 | 0x1a, 0x78, 0x00, 0x2a, 0x03, 0xd0, 0x00, 0x22, 0x06, 0x20, 0x1a, 0x70, 96 | 0x16, 0xbd, 0x1d, 0x4b, 0x1d, 0x4c, 0x1b, 0x78, 0x23, 0x70, 0x76, 0x2b, 97 | 0x06, 0xd0, 0x13, 0xd8, 0x20, 0x20, 0x6c, 0x2b, 0xf4, 0xd0, 0x1d, 0x38, 98 | 0x74, 0x2b, 0xf1, 0xd1, 0x18, 0x4b, 0x19, 0x48, 0x1b, 0x68, 0x5a, 0x6a, 99 | 0x6b, 0x46, 0x99, 0x1d, 0x17, 0x4b, 0x1b, 0x88, 0x9b, 0x18, 0x02, 0x22, 100 | 0x0b, 0x80, 0x02, 0xf0, 0xc5, 0xfc, 0x12, 0xe0, 0x03, 0x20, 0x7c, 0x2b, 101 | 0xe0, 0xd1, 0xa0, 0x20, 0x01, 0x21, 0xc0, 0x05, 0x01, 0xf0, 0x22, 0xf8, 102 | 0x43, 0x42, 0x58, 0x41, 0x60, 0x70, 0xa0, 0x20, 0x02, 0x21, 0xc0, 0x05, 103 | 0x01, 0xf0, 0x1a, 0xf8, 0x43, 0x42, 0x58, 0x41, 0xa0, 0x70, 0xa0, 0x20, 104 | 0x04, 0x21, 0xc0, 0x05, 0x01, 0xf0, 0x12, 0xf8, 0x43, 0x42, 0x58, 0x41, 105 | 0xe0, 0x70, 0x03, 0x20, 0xc6, 0xe7, 0xc0, 0x46, 0x28, 0x00, 0x00, 0x20, 106 | 0x2c, 0x00, 0x00, 0x20, 0x2e, 0x00, 0x00, 0x20, 0xb0, 0x00, 0x00, 0x20, 107 | 0x2f, 0x00, 0x00, 0x20, 0x2a, 0x00, 0x00, 0x20, 0x08, 0x4b, 0x20, 0x20, 108 | 0x1b, 0x78, 0x6c, 0x2b, 0x04, 0xd0, 0x04, 0xd8, 0x1d, 0x38, 0x3c, 0x2b, 109 | 0x00, 0xd1, 0x05, 0x30, 0x70, 0x47, 0x02, 0x22, 0x93, 0x43, 0x74, 0x3b, 110 | 0x5a, 0x42, 0x53, 0x41, 0xd8, 0x1c, 0xf7, 0xe7, 0x2c, 0x00, 0x00, 0x20, 111 | 0x70, 0x47, 0x00, 0x00, 0x01, 0x22, 0x01, 0x4b, 0x1a, 0x70, 0x70, 0x47, 112 | 0xae, 0x00, 0x00, 0x20, 0x70, 0xb5, 0x0c, 0x4d, 0x0c, 0x4c, 0x01, 0x29, 113 | 0x0a, 0xd1, 0xff, 0xf7, 0x8f, 0xff, 0x80, 0x23, 0x01, 0x30, 0x82, 0xb2, 114 | 0x29, 0x00, 0x20, 0x00, 0x9b, 0x04, 0x01, 0xf0, 0x09, 0xf9, 0x70, 0xbd, 115 | 0xff, 0xf7, 0xd2, 0xff, 0x80, 0x23, 0x02, 0x00, 0x29, 0x00, 0x20, 0x00, 116 | 0x9b, 0x04, 0x01, 0xf0, 0x6d, 0xf9, 0xf4, 0xe7, 0x2e, 0x00, 0x00, 0x20, 117 | 0x0c, 0x01, 0x00, 0x20, 0x10, 0xb5, 0x02, 0x48, 0x01, 0xf0, 0xd0, 0xf9, 118 | 0x10, 0xbd, 0xc0, 0x46, 0x0c, 0x01, 0x00, 0x20, 0x70, 0x47, 0x00, 0xb5, 119 | 0x8d, 0xb0, 0x08, 0x22, 0x00, 0x21, 0x06, 0xa8, 0x02, 0xf0, 0x23, 0xfc, 120 | 0x00, 0x21, 0x14, 0x22, 0x68, 0x46, 0x02, 0xf0, 0x1e, 0xfc, 0x0a, 0x23, 121 | 0x05, 0x93, 0xf6, 0x33, 0x08, 0x93, 0x80, 0x23, 0x5b, 0x01, 0x09, 0x93, 122 | 0x40, 0x23, 0x05, 0xa8, 0x0a, 0x93, 0x3f, 0x3b, 0x0b, 0x93, 0x00, 0xf0, 123 | 0x7f, 0xfb, 0x01, 0x1e, 0x01, 0xd0, 0x72, 0xb6, 0xfe, 0xe7, 0x07, 0x23, 124 | 0x01, 0x90, 0x02, 0x90, 0x03, 0x90, 0x04, 0x90, 0x68, 0x46, 0x00, 0x93, 125 | 0x00, 0xf0, 0xce, 0xfc, 0x00, 0x28, 0x01, 0xd0, 0x72, 0xb6, 0xfe, 0xe7, 126 | 0x0d, 0xb0, 0x00, 0xbd, 0xf0, 0xb5, 0x8f, 0xb0, 0x00, 0xf0, 0x9c, 0xfa, 127 | 0xff, 0xf7, 0xcd, 0xff, 0x01, 0x21, 0x02, 0x24, 0x04, 0x26, 0xb0, 0x4b, 128 | 0x0a, 0xa8, 0x5a, 0x6b, 0x09, 0xad, 0x0a, 0x43, 0x5a, 0x63, 0x5a, 0x6b, 129 | 0x0a, 0x40, 0x03, 0x92, 0x03, 0x9a, 0x5a, 0x6b, 0x1f, 0x31, 0x22, 0x43, 130 | 0x5a, 0x63, 0x5a, 0x6b, 0x22, 0x40, 0x04, 0x92, 0x04, 0x9a, 0x5a, 0x6b, 131 | 0x32, 0x43, 0x5a, 0x63, 0x5a, 0x6b, 0x32, 0x40, 0x05, 0x92, 0x05, 0x9a, 132 | 0x5a, 0x6b, 0x0a, 0x43, 0x5a, 0x63, 0x5b, 0x6b, 0x10, 0x22, 0x0b, 0x40, 133 | 0x06, 0x93, 0x00, 0x21, 0x06, 0x9b, 0x02, 0xf0, 0xd0, 0xfb, 0xe0, 0x23, 134 | 0xa0, 0x20, 0x5b, 0x00, 0x29, 0x00, 0xc0, 0x05, 0x09, 0x93, 0xac, 0x60, 135 | 0x00, 0xf0, 0xa6, 0xfe, 0xc0, 0x23, 0x29, 0x00, 0x1b, 0x02, 0x99, 0x48, 136 | 0x09, 0x93, 0x00, 0xf0, 0x9f, 0xfe, 0x29, 0x00, 0x97, 0x48, 0x09, 0x96, 137 | 0x00, 0xf0, 0x9a, 0xfe, 0xa0, 0x20, 0x40, 0x21, 0xc0, 0x05, 0x00, 0xf0, 138 | 0x49, 0xff, 0x04, 0x00, 0xa0, 0x20, 0x80, 0x21, 0xc0, 0x05, 0x00, 0xf0, 139 | 0x43, 0xff, 0xa4, 0x01, 0x40, 0x01, 0x04, 0x43, 0x80, 0x21, 0xa0, 0x20, 140 | 0x49, 0x00, 0xc0, 0x05, 0x00, 0xf0, 0x3a, 0xff, 0x80, 0x21, 0xb0, 0x40, 141 | 0x64, 0xb2, 0x04, 0x43, 0xc9, 0x01, 0x88, 0x48, 0x00, 0xf0, 0x32, 0xff, 142 | 0x80, 0x21, 0xc0, 0x00, 0x64, 0xb2, 0x04, 0x43, 0x09, 0x02, 0x84, 0x48, 143 | 0x00, 0xf0, 0x2a, 0xff, 0x64, 0xb2, 0x80, 0x00, 0x31, 0x00, 0x04, 0x43, 144 | 0x81, 0x48, 0x00, 0xf0, 0x23, 0xff, 0x81, 0x4a, 0x64, 0xb2, 0x40, 0x00, 145 | 0x80, 0x4b, 0x04, 0x43, 0x00, 0x92, 0x12, 0x78, 0xe4, 0xb2, 0x1c, 0x70, 146 | 0x01, 0x93, 0x51, 0x1e, 0x7d, 0x4b, 0xc9, 0xb2, 0x1c, 0x70, 0xfd, 0x29, 147 | 0x06, 0xd8, 0x00, 0x99, 0x48, 0x78, 0x33, 0x21, 0x51, 0x40, 0x88, 0x42, 148 | 0x00, 0xd1, 0x1a, 0x70, 0x78, 0x4e, 0x1b, 0x78, 0x78, 0x4a, 0xb3, 0x60, 149 | 0x01, 0x23, 0x32, 0x60, 0x77, 0x4a, 0xf3, 0x60, 0x72, 0x60, 0x80, 0x22, 150 | 0x00, 0x23, 0x12, 0x03, 0x30, 0x00, 0x33, 0x61, 0xf2, 0x61, 0x33, 0x62, 151 | 0x00, 0xf0, 0xd0, 0xff, 0x01, 0x1e, 0x01, 0xd0, 0x72, 0xb6, 0xfe, 0xe7, 152 | 0x30, 0x00, 0x01, 0xf0, 0x51, 0xfe, 0x01, 0x1e, 0x01, 0xd0, 0x72, 0xb6, 153 | 0xfe, 0xe7, 0x30, 0x00, 0x01, 0xf0, 0x70, 0xfe, 0x00, 0x28, 0x01, 0xd0, 154 | 0x72, 0xb6, 0xfe, 0xe7, 0x69, 0x4f, 0x6a, 0x4b, 0x78, 0x60, 0x3b, 0x60, 155 | 0x69, 0x4b, 0x38, 0x00, 0xfb, 0x60, 0xbb, 0x60, 0x01, 0xf0, 0x8e, 0xfe, 156 | 0x04, 0x1e, 0x01, 0xd0, 0x72, 0xb6, 0xfe, 0xe7, 0x02, 0x00, 0x01, 0x00, 157 | 0x17, 0x20, 0x00, 0xf0, 0x03, 0xfa, 0x17, 0x20, 0x00, 0xf0, 0x2a, 0xfa, 158 | 0xff, 0xf7, 0xa0, 0xfd, 0x30, 0x00, 0x01, 0xf0, 0xdb, 0xf8, 0x38, 0x00, 159 | 0x01, 0xf0, 0xac, 0xfe, 0x00, 0x2c, 0x07, 0xd0, 0x00, 0xf0, 0xee, 0xf9, 160 | 0xa0, 0x42, 0x04, 0xd9, 0x00, 0x21, 0x5a, 0x48, 0x02, 0xf0, 0x72, 0xfa, 161 | 0x00, 0x24, 0x59, 0x4e, 0x33, 0x78, 0x00, 0x2b, 0xed, 0xd0, 0x58, 0x49, 162 | 0x0a, 0x78, 0x44, 0x2a, 0x07, 0xd1, 0x4b, 0x78, 0x49, 0x2b, 0x35, 0xd1, 163 | 0x8b, 0x78, 0x45, 0x2b, 0x32, 0xd1, 0xff, 0xf7, 0x2b, 0xfd, 0x43, 0x2a, 164 | 0x2e, 0xd1, 0x4b, 0x78, 0x46, 0x2b, 0x2b, 0xd1, 0x2a, 0x00, 0x50, 0x4b, 165 | 0x8c, 0x78, 0x83, 0xcb, 0x83, 0xc2, 0x00, 0xf0, 0x17, 0xfd, 0x02, 0xa9, 166 | 0x28, 0x00, 0x00, 0xf0, 0xa3, 0xfd, 0x33, 0x22, 0x07, 0xab, 0x62, 0x40, 167 | 0x1c, 0x70, 0x9c, 0x70, 0x1c, 0x71, 0x9c, 0x71, 0x5a, 0x70, 0xda, 0x70, 168 | 0x5a, 0x71, 0xda, 0x71, 0x07, 0x9a, 0x08, 0x9b, 0x00, 0x99, 0x01, 0x20, 169 | 0x00, 0xf0, 0x50, 0xfd, 0x01, 0x22, 0x43, 0x4b, 0x1a, 0x70, 0x00, 0x23, 170 | 0x33, 0x70, 0x00, 0xf0, 0x0d, 0xfd, 0xbf, 0xf3, 0x4f, 0x8f, 0x40, 0x4b, 171 | 0x40, 0x4a, 0xda, 0x60, 0xbf, 0xf3, 0x4f, 0x8f, 0xc0, 0x46, 0xfd, 0xe7, 172 | 0x01, 0x9b, 0x1b, 0x78, 0x74, 0x2b, 0x42, 0xd0, 0x07, 0xd8, 0x3c, 0x2b, 173 | 0x25, 0xd0, 0x6c, 0x2b, 0x49, 0xd0, 0x00, 0x22, 0x33, 0x4b, 0x1a, 0x70, 174 | 0xa3, 0xe7, 0x76, 0x2b, 0x37, 0xd0, 0x7c, 0x2b, 0xf7, 0xd1, 0x53, 0x1e, 175 | 0x9a, 0x41, 0xa0, 0x20, 0x08, 0x21, 0xd2, 0xb2, 0xc0, 0x05, 0x00, 0xf0, 176 | 0x6b, 0xfe, 0x2d, 0x4e, 0xa0, 0x20, 0x72, 0x78, 0x10, 0x21, 0x53, 0x1e, 177 | 0x9a, 0x41, 0xc0, 0x05, 0xd2, 0xb2, 0x00, 0xf0, 0x61, 0xfe, 0xb2, 0x78, 178 | 0xa0, 0x20, 0x53, 0x1e, 0x9a, 0x41, 0x20, 0x21, 0xd2, 0xb2, 0xc0, 0x05, 179 | 0x00, 0xf0, 0x58, 0xfe, 0xdb, 0xe7, 0x04, 0x22, 0x07, 0xa8, 0x02, 0xf0, 180 | 0xe7, 0xfa, 0x04, 0x22, 0x25, 0x49, 0x28, 0x00, 0x02, 0xf0, 0xe2, 0xfa, 181 | 0x00, 0xf0, 0x6e, 0xf9, 0x09, 0x9c, 0x07, 0x99, 0x04, 0x19, 0x22, 0x48, 182 | 0xff, 0xf7, 0x36, 0xfc, 0x21, 0x4b, 0x00, 0x21, 0xd8, 0x62, 0x40, 0x08, 183 | 0x58, 0x63, 0x16, 0x48, 0x02, 0xf0, 0x98, 0xf9, 0xc1, 0xe7, 0x02, 0x22, 184 | 0x28, 0x00, 0x02, 0xf0, 0xcd, 0xfa, 0x12, 0x4b, 0x2a, 0x88, 0x1b, 0x68, 185 | 0x59, 0x6a, 0x1a, 0x4b, 0x52, 0x1a, 0x1a, 0x80, 0xb5, 0xe7, 0x08, 0x00, 186 | 0xff, 0xf7, 0xc6, 0xfc, 0xb1, 0xe7, 0xc0, 0x46, 0x00, 0x10, 0x02, 0x40, 187 | 0x00, 0x08, 0x00, 0x50, 0x00, 0x14, 0x00, 0x50, 0x00, 0x38, 0x00, 0x08, 188 | 0x2c, 0x00, 0x00, 0x20, 0x2d, 0x00, 0x00, 0x20, 0x0c, 0x01, 0x00, 0x20, 189 | 0x00, 0x54, 0x00, 0x40, 0x13, 0x04, 0x10, 0x00, 0xfc, 0x00, 0x00, 0x20, 190 | 0x00, 0x30, 0x00, 0x40, 0xff, 0x0f, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x20, 191 | 0xae, 0x00, 0x00, 0x20, 0x2e, 0x00, 0x00, 0x20, 0x80, 0x2e, 0x00, 0x08, 192 | 0x28, 0x00, 0x00, 0x20, 0x00, 0xed, 0x00, 0xe0, 0x04, 0x00, 0xfa, 0x05, 193 | 0x32, 0x00, 0x00, 0x20, 0x4c, 0xff, 0xb3, 0x00, 0x00, 0x2c, 0x01, 0x40, 194 | 0x2a, 0x00, 0x00, 0x20, 0x72, 0xb6, 0xfe, 0xe7, 0xfe, 0xe7, 0xfe, 0xe7, 195 | 0x70, 0x47, 0x70, 0x47, 0x10, 0xb5, 0x00, 0xf0, 0x0b, 0xf9, 0x10, 0xbd, 196 | 0x06, 0x48, 0x10, 0xb5, 0x03, 0x68, 0x9a, 0x69, 0xe0, 0x23, 0xdb, 0x00, 197 | 0x1a, 0x42, 0x02, 0xd0, 0x01, 0xf0, 0x40, 0xfb, 0x10, 0xbd, 0x01, 0xf0, 198 | 0x03, 0xf8, 0xfb, 0xe7, 0x0c, 0x01, 0x00, 0x20, 0x01, 0x21, 0x0a, 0x4b, 199 | 0x82, 0xb0, 0x1a, 0x6c, 0x0a, 0x43, 0x1a, 0x64, 0x1a, 0x6c, 0x0a, 0x40, 200 | 0x80, 0x21, 0x00, 0x92, 0x00, 0x9a, 0xda, 0x6b, 0x49, 0x05, 0x0a, 0x43, 201 | 0xda, 0x63, 0xdb, 0x6b, 0x0b, 0x40, 0x01, 0x93, 0x01, 0x9b, 0x02, 0xb0, 202 | 0x70, 0x47, 0xc0, 0x46, 0x00, 0x10, 0x02, 0x40, 0x10, 0xb5, 0x04, 0x00, 203 | 0x8e, 0xb0, 0x14, 0x22, 0x00, 0x21, 0x02, 0xa8, 0x02, 0xf0, 0x2b, 0xfa, 204 | 0x1c, 0x22, 0x00, 0x21, 0x07, 0xa8, 0x02, 0xf0, 0x26, 0xfa, 0x17, 0x4b, 205 | 0x22, 0x68, 0x9a, 0x42, 0x27, 0xd1, 0x40, 0x23, 0x07, 0xa8, 0x07, 0x93, 206 | 0x00, 0xf0, 0x9a, 0xfb, 0x00, 0x28, 0x01, 0xd0, 0xff, 0xf7, 0xb4, 0xff, 207 | 0x02, 0x22, 0x11, 0x4c, 0x11, 0x48, 0x63, 0x6b, 0x02, 0xa9, 0x13, 0x43, 208 | 0x63, 0x63, 0x63, 0x6b, 0x13, 0x40, 0x00, 0x93, 0x00, 0x9b, 0xc0, 0x23, 209 | 0x02, 0x93, 0xae, 0x3b, 0x03, 0x93, 0x00, 0x23, 0x04, 0x93, 0x05, 0x93, 210 | 0x06, 0x33, 0x06, 0x93, 0x00, 0xf0, 0xe2, 0xfc, 0x80, 0x22, 0xe3, 0x6b, 211 | 0x92, 0x03, 0x13, 0x43, 0xe3, 0x63, 0xe3, 0x6b, 0x13, 0x40, 0x01, 0x93, 212 | 0x01, 0x9b, 0x0e, 0xb0, 0x10, 0xbd, 0xc0, 0x46, 0x00, 0x54, 0x00, 0x40, 213 | 0x00, 0x10, 0x02, 0x40, 0x00, 0x04, 0x00, 0x50, 0x10, 0xb5, 0x04, 0x00, 214 | 0x88, 0xb0, 0x14, 0x22, 0x00, 0x21, 0x03, 0xa8, 0x02, 0xf0, 0xe9, 0xf9, 215 | 0x11, 0x4b, 0x22, 0x68, 0x9a, 0x42, 0x1d, 0xd1, 0x80, 0x21, 0x10, 0x4b, 216 | 0x09, 0x01, 0x1a, 0x6c, 0xa0, 0x20, 0x0a, 0x43, 0x1a, 0x64, 0x1a, 0x6c, 217 | 0xc0, 0x05, 0x0a, 0x40, 0x01, 0x92, 0x01, 0x9a, 0x01, 0x22, 0x59, 0x6b, 218 | 0x11, 0x43, 0x59, 0x63, 0x5b, 0x6b, 0x03, 0xa9, 0x13, 0x40, 0x02, 0x93, 219 | 0x02, 0x9b, 0x03, 0x23, 0x03, 0x93, 0x01, 0x3b, 0x04, 0x93, 0x03, 0x33, 220 | 0x05, 0x92, 0x07, 0x93, 0x00, 0xf0, 0xa6, 0xfc, 0x08, 0xb0, 0x10, 0xbd, 221 | 0x00, 0x2c, 0x01, 0x40, 0x00, 0x10, 0x02, 0x40, 0x08, 0x4b, 0x02, 0x68, 222 | 0x82, 0xb0, 0x9a, 0x42, 0x09, 0xd1, 0x80, 0x21, 0x06, 0x4b, 0x09, 0x01, 223 | 0x1a, 0x6c, 0x0a, 0x43, 0x1a, 0x64, 0x1b, 0x6c, 0x0b, 0x40, 0x01, 0x93, 224 | 0x01, 0x9b, 0x02, 0xb0, 0x70, 0x47, 0xc0, 0x46, 0x00, 0x2c, 0x01, 0x40, 225 | 0x00, 0x10, 0x02, 0x40, 0x10, 0xb5, 0x04, 0x00, 0x86, 0xb0, 0x14, 0x22, 226 | 0x00, 0x21, 0x01, 0xa8, 0x02, 0xf0, 0xa3, 0xf9, 0x0c, 0x4b, 0x22, 0x68, 227 | 0x9a, 0x42, 0x12, 0xd1, 0x01, 0x23, 0xa0, 0x20, 0x0a, 0x4a, 0xc0, 0x05, 228 | 0x51, 0x6b, 0x19, 0x43, 0x51, 0x63, 0x52, 0x6b, 0x01, 0x93, 0x1a, 0x40, 229 | 0xdb, 0x18, 0x00, 0x92, 0x02, 0x93, 0x01, 0xa9, 0x03, 0x33, 0x00, 0x9a, 230 | 0x05, 0x93, 0x00, 0xf0, 0x6b, 0xfc, 0x06, 0xb0, 0x10, 0xbd, 0xc0, 0x46, 231 | 0x00, 0x2c, 0x01, 0x40, 0x00, 0x10, 0x02, 0x40, 0x70, 0xb5, 0x10, 0x4b, 232 | 0x05, 0x00, 0x19, 0x78, 0x00, 0x29, 0x01, 0xd1, 0x01, 0x20, 0x70, 0xbd, 233 | 0xfa, 0x20, 0x80, 0x00, 0xff, 0xf7, 0x02, 0xfb, 0x0b, 0x4c, 0x01, 0x00, 234 | 0x20, 0x68, 0xff, 0xf7, 0xfd, 0xfa, 0x00, 0xf0, 0x69, 0xf8, 0x04, 0x1e, 235 | 0xf0, 0xd1, 0x03, 0x2d, 0xee, 0xd8, 0x02, 0x00, 0x01, 0x20, 0x29, 0x00, 236 | 0x40, 0x42, 0x00, 0xf0, 0x29, 0xf8, 0x04, 0x4b, 0x20, 0x00, 0x1d, 0x60, 237 | 0xe5, 0xe7, 0xc0, 0x46, 0x00, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x20, 238 | 0x04, 0x00, 0x00, 0x20, 0x10, 0xb5, 0x03, 0x20, 0xff, 0xf7, 0xd4, 0xff, 239 | 0x04, 0x1e, 0x03, 0xd1, 0xff, 0xf7, 0x0a, 0xff, 0x20, 0x00, 0x10, 0xbd, 240 | 0x01, 0x24, 0xfb, 0xe7, 0x03, 0x4a, 0x04, 0x4b, 0x11, 0x68, 0x1b, 0x78, 241 | 0x5b, 0x18, 0x13, 0x60, 0x70, 0x47, 0xc0, 0x46, 0x60, 0x01, 0x00, 0x20, 242 | 0x00, 0x00, 0x00, 0x20, 0x01, 0x4b, 0x18, 0x68, 0x70, 0x47, 0xc0, 0x46, 243 | 0x60, 0x01, 0x00, 0x20, 0x10, 0xb5, 0xff, 0x24, 0x03, 0x22, 0x0b, 0x00, 244 | 0x21, 0x00, 0x02, 0x40, 0xd2, 0x00, 0x91, 0x40, 0x9b, 0x01, 0x23, 0x40, 245 | 0xc9, 0x43, 0x93, 0x40, 0x00, 0x28, 0x0a, 0xdb, 0xc0, 0x24, 0x0b, 0x4a, 246 | 0x80, 0x08, 0x80, 0x00, 0x80, 0x18, 0xa4, 0x00, 0x02, 0x59, 0x0a, 0x40, 247 | 0x13, 0x43, 0x03, 0x51, 0x10, 0xbd, 0x0f, 0x22, 0x10, 0x40, 0x08, 0x38, 248 | 0x05, 0x4a, 0x80, 0x08, 0x80, 0x00, 0x80, 0x18, 0xc2, 0x69, 0x11, 0x40, 249 | 0x19, 0x43, 0xc1, 0x61, 0xf2, 0xe7, 0xc0, 0x46, 0x00, 0xe1, 0x00, 0xe0, 250 | 0x00, 0xed, 0x00, 0xe0, 0x00, 0x28, 0x05, 0xdb, 0x1f, 0x23, 0x18, 0x40, 251 | 0x1e, 0x3b, 0x83, 0x40, 0x01, 0x4a, 0x13, 0x60, 0x70, 0x47, 0xc0, 0x46, 252 | 0x00, 0xe1, 0x00, 0xe0, 0x80, 0x22, 0x43, 0x1e, 0x52, 0x04, 0x01, 0x20, 253 | 0x93, 0x42, 0x0d, 0xd2, 0xc0, 0x21, 0x07, 0x4a, 0x07, 0x48, 0x53, 0x60, 254 | 0x03, 0x6a, 0x09, 0x06, 0x1b, 0x02, 0x1b, 0x0a, 0x0b, 0x43, 0x03, 0x62, 255 | 0x00, 0x20, 0x07, 0x23, 0x90, 0x60, 0x13, 0x60, 0x70, 0x47, 0xc0, 0x46, 256 | 0x10, 0xe0, 0x00, 0xe0, 0x00, 0xed, 0x00, 0xe0, 0x70, 0xb5, 0xff, 0xf7, 257 | 0xa7, 0xff, 0x80, 0x23, 0x80, 0x26, 0x05, 0x00, 0x24, 0x4c, 0x5b, 0x00, 258 | 0x22, 0x68, 0xf6, 0x00, 0x13, 0x43, 0x23, 0x60, 0x23, 0x68, 0x33, 0x42, 259 | 0x2c, 0xd0, 0x80, 0x23, 0xdb, 0x01, 0x63, 0x60, 0xff, 0xf7, 0x96, 0xff, 260 | 0x00, 0x23, 0x05, 0x00, 0x38, 0x26, 0xa3, 0x60, 0xa3, 0x68, 0x33, 0x42, 261 | 0x27, 0xd1, 0xff, 0xf7, 0x8d, 0xff, 0x80, 0x26, 0x05, 0x00, 0x23, 0x68, 262 | 0x18, 0x4a, 0xb6, 0x02, 0x13, 0x40, 0x23, 0x60, 0x23, 0x68, 0x1a, 0x00, 263 | 0x32, 0x40, 0x33, 0x42, 0x20, 0xd1, 0x23, 0x68, 0x14, 0x49, 0x0b, 0x40, 264 | 0x23, 0x60, 0x01, 0x23, 0x5b, 0x42, 0xa2, 0x61, 0x23, 0x62, 0x12, 0x4a, 265 | 0x12, 0x4b, 0x1a, 0x60, 0x12, 0x4b, 0x18, 0x68, 0xff, 0xf7, 0x32, 0xff, 266 | 0x43, 0x1e, 0x98, 0x41, 0xc0, 0xb2, 0x05, 0xe0, 0xff, 0xf7, 0x6c, 0xff, 267 | 0x40, 0x1b, 0x02, 0x28, 0xca, 0xd9, 0x03, 0x20, 0x70, 0xbd, 0xff, 0xf7, 268 | 0x65, 0xff, 0x0b, 0x4b, 0x40, 0x1b, 0x98, 0x42, 0xce, 0xd9, 0xf6, 0xe7, 269 | 0xff, 0xf7, 0x5e, 0xff, 0x40, 0x1b, 0x64, 0x28, 0xd4, 0xd9, 0xf0, 0xe7, 270 | 0x00, 0x10, 0x02, 0x40, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfb, 0xff, 271 | 0x00, 0x6c, 0xdc, 0x02, 0x08, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x20, 272 | 0x88, 0x13, 0x00, 0x00, 0xf8, 0xb5, 0x05, 0x1e, 0x01, 0xd1, 0x01, 0x20, 273 | 0xf8, 0xbd, 0x03, 0x68, 0xdb, 0x07, 0x0d, 0xd4, 0x2b, 0x68, 0x9b, 0x07, 274 | 0x4f, 0xd4, 0x2b, 0x68, 0x1b, 0x07, 0x00, 0xd5, 0xa4, 0xe0, 0x04, 0x22, 275 | 0x2b, 0x68, 0x13, 0x42, 0x00, 0xd0, 0xcf, 0xe0, 0x00, 0x20, 0xed, 0xe7, 276 | 0x38, 0x21, 0x85, 0x4c, 0x43, 0x68, 0xa2, 0x68, 0x0a, 0x40, 0x08, 0x2a, 277 | 0x02, 0xd1, 0x00, 0x2b, 0xe8, 0xd1, 0xe2, 0xe7, 0x80, 0x22, 0x52, 0x02, 278 | 0x93, 0x42, 0x11, 0xd1, 0x22, 0x68, 0x13, 0x43, 0x23, 0x60, 0xff, 0xf7, 279 | 0x23, 0xff, 0x80, 0x27, 0x06, 0x00, 0xbf, 0x02, 0x23, 0x68, 0x3b, 0x42, 280 | 0xd8, 0xd1, 0xff, 0xf7, 0x1b, 0xff, 0x80, 0x1b, 0x64, 0x28, 0xf7, 0xd9, 281 | 0x03, 0x20, 0xcd, 0xe7, 0xa0, 0x21, 0xc9, 0x02, 0x8b, 0x42, 0x08, 0xd1, 282 | 0x80, 0x23, 0x21, 0x68, 0xdb, 0x02, 0x0b, 0x43, 0x23, 0x60, 0x23, 0x68, 283 | 0x1a, 0x43, 0x22, 0x60, 0xe3, 0xe7, 0x22, 0x68, 0x6f, 0x49, 0x0a, 0x40, 284 | 0x22, 0x60, 0x22, 0x68, 0x6e, 0x49, 0x0a, 0x40, 0x22, 0x60, 0x00, 0x2b, 285 | 0xd9, 0xd1, 0xff, 0xf7, 0xfd, 0xfe, 0x80, 0x27, 0x06, 0x00, 0xbf, 0x02, 286 | 0x23, 0x68, 0x3b, 0x42, 0xb2, 0xd0, 0xff, 0xf7, 0xf5, 0xfe, 0x80, 0x1b, 287 | 0x64, 0x28, 0xf7, 0xd9, 0xd8, 0xe7, 0x38, 0x22, 0x62, 0x4c, 0xeb, 0x68, 288 | 0xa1, 0x68, 0x11, 0x42, 0x1c, 0xd1, 0x00, 0x2b, 0x9f, 0xd0, 0x62, 0x68, 289 | 0x6b, 0x69, 0x61, 0x49, 0x1b, 0x02, 0x0a, 0x40, 0x13, 0x43, 0x63, 0x60, 290 | 0x23, 0x68, 0x5f, 0x4a, 0x5f, 0x49, 0x13, 0x40, 0x2a, 0x69, 0x13, 0x43, 291 | 0x23, 0x60, 0x23, 0x68, 0x5d, 0x4a, 0x9b, 0x04, 0x5b, 0x0f, 0xda, 0x40, 292 | 0x5c, 0x4b, 0x0a, 0x60, 0x18, 0x68, 0xff, 0xf7, 0x91, 0xfe, 0x00, 0x28, 293 | 0x8d, 0xd0, 0x84, 0xe7, 0x00, 0x2b, 0x20, 0xd0, 0x23, 0x68, 0x54, 0x4a, 294 | 0x80, 0x27, 0x13, 0x40, 0x2a, 0x69, 0xff, 0x00, 0x13, 0x43, 0x23, 0x60, 295 | 0x80, 0x23, 0x22, 0x68, 0x5b, 0x00, 0x13, 0x43, 0x23, 0x60, 0xff, 0xf7, 296 | 0xbd, 0xfe, 0x06, 0x00, 0x23, 0x68, 0x3b, 0x42, 0x07, 0xd0, 0x62, 0x68, 297 | 0x6b, 0x69, 0x49, 0x49, 0x1b, 0x02, 0x0a, 0x40, 0x13, 0x43, 0x63, 0x60, 298 | 0x6f, 0xe7, 0xff, 0xf7, 0xaf, 0xfe, 0x80, 0x1b, 0x02, 0x28, 0xef, 0xd9, 299 | 0x92, 0xe7, 0x23, 0x68, 0x47, 0x4a, 0x80, 0x27, 0x13, 0x40, 0x23, 0x60, 300 | 0xff, 0xf7, 0xa4, 0xfe, 0x06, 0x00, 0xff, 0x00, 0x23, 0x68, 0x3b, 0x42, 301 | 0x00, 0xd1, 0x5c, 0xe7, 0xff, 0xf7, 0x9c, 0xfe, 0x80, 0x1b, 0x02, 0x28, 302 | 0xf6, 0xd9, 0x7f, 0xe7, 0x38, 0x21, 0x36, 0x4c, 0xaa, 0x69, 0xa3, 0x68, 303 | 0x0b, 0x40, 0x18, 0x2b, 0x03, 0xd1, 0x00, 0x2a, 0x00, 0xd0, 0x50, 0xe7, 304 | 0x43, 0xe7, 0x01, 0x23, 0x00, 0x2a, 0x10, 0xd0, 0x22, 0x6e, 0x02, 0x27, 305 | 0x13, 0x43, 0x23, 0x66, 0xff, 0xf7, 0x84, 0xfe, 0x06, 0x00, 0x23, 0x6e, 306 | 0x3b, 0x42, 0x00, 0xd0, 0x41, 0xe7, 0xff, 0xf7, 0x7d, 0xfe, 0x80, 0x1b, 307 | 0x02, 0x28, 0xf6, 0xd9, 0x60, 0xe7, 0x22, 0x6e, 0x02, 0x27, 0x9a, 0x43, 308 | 0x22, 0x66, 0xff, 0xf7, 0x73, 0xfe, 0x06, 0x00, 0x23, 0x6e, 0x3b, 0x42, 309 | 0x00, 0xd1, 0x30, 0xe7, 0xff, 0xf7, 0x6c, 0xfe, 0x80, 0x1b, 0x02, 0x28, 310 | 0xf6, 0xd9, 0x4f, 0xe7, 0x38, 0x21, 0x1e, 0x4c, 0xa8, 0x68, 0xa3, 0x68, 311 | 0x0b, 0x40, 0x20, 0x2b, 0x03, 0xd1, 0x43, 0x42, 0x58, 0x41, 0xc0, 0xb2, 312 | 0x14, 0xe7, 0xe3, 0x6d, 0x01, 0x28, 0x10, 0xd1, 0x03, 0x43, 0xe3, 0x65, 313 | 0xff, 0xf7, 0x56, 0xfe, 0x02, 0x26, 0x05, 0x00, 0xe3, 0x6d, 0x33, 0x42, 314 | 0x00, 0xd0, 0x17, 0xe7, 0xff, 0xf7, 0x4e, 0xfe, 0x1a, 0x4b, 0x40, 0x1b, 315 | 0x98, 0x42, 0xf5, 0xd9, 0x30, 0xe7, 0x05, 0x28, 0x05, 0xd1, 0x13, 0x43, 316 | 0xe3, 0x65, 0x01, 0x23, 0xe2, 0x6d, 0x13, 0x43, 0xe7, 0xe7, 0x01, 0x21, 317 | 0x8b, 0x43, 0xe3, 0x65, 0xe3, 0x6d, 0x93, 0x43, 0xe3, 0x65, 0x00, 0x28, 318 | 0xe0, 0xd1, 0xff, 0xf7, 0x37, 0xfe, 0x02, 0x26, 0x05, 0x00, 0xe3, 0x6d, 319 | 0x33, 0x42, 0x00, 0xd1, 0xf8, 0xe6, 0xff, 0xf7, 0x2f, 0xfe, 0x0b, 0x4b, 320 | 0x40, 0x1b, 0x98, 0x42, 0xf5, 0xd9, 0x11, 0xe7, 0x00, 0x10, 0x02, 0x40, 321 | 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x80, 0xff, 0xff, 322 | 0xff, 0xc7, 0xff, 0xff, 0x08, 0x00, 0x00, 0x20, 0x00, 0x6c, 0xdc, 0x02, 323 | 0x04, 0x00, 0x00, 0x20, 0xff, 0xfe, 0xff, 0xff, 0x88, 0x13, 0x00, 0x00, 324 | 0x38, 0x22, 0x0f, 0x4b, 0x99, 0x68, 0x11, 0x42, 0x05, 0xd1, 0x1b, 0x68, 325 | 0x0d, 0x48, 0x9b, 0x04, 0x5b, 0x0f, 0xd8, 0x40, 0x70, 0x47, 0x99, 0x68, 326 | 0x11, 0x40, 0x08, 0x29, 0x0b, 0xd0, 0x99, 0x68, 0x11, 0x40, 0x20, 0x29, 327 | 0x09, 0xd0, 0x9b, 0x68, 0x00, 0x20, 0x13, 0x40, 0x18, 0x2b, 0xf1, 0xd1, 328 | 0xfa, 0x20, 0xc0, 0x01, 0xee, 0xe7, 0x04, 0x48, 0xec, 0xe7, 0x80, 0x20, 329 | 0x00, 0x02, 0xe9, 0xe7, 0x00, 0x10, 0x02, 0x40, 0x00, 0x6c, 0xdc, 0x02, 330 | 0x00, 0x12, 0x7a, 0x00, 0xf7, 0xb5, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x28, 331 | 0x01, 0xd1, 0x01, 0x20, 0xfe, 0xbd, 0x07, 0x27, 0x4b, 0x4e, 0x33, 0x68, 332 | 0x3b, 0x40, 0x8b, 0x42, 0x2a, 0xd3, 0x22, 0x68, 0x93, 0x07, 0x3b, 0xd4, 333 | 0xd2, 0x07, 0x4a, 0xd4, 0x07, 0x27, 0x33, 0x68, 0x3b, 0x40, 0xab, 0x42, 334 | 0x0a, 0xd9, 0x33, 0x68, 0xbb, 0x43, 0x2b, 0x43, 0x33, 0x60, 0xff, 0xf7, 335 | 0xd3, 0xfd, 0x01, 0x90, 0x33, 0x68, 0x3b, 0x40, 0xab, 0x42, 0x6d, 0xd1, 336 | 0x23, 0x68, 0x3f, 0x4d, 0x5b, 0x07, 0x71, 0xd4, 0xff, 0xf7, 0xb2, 0xff, 337 | 0xab, 0x68, 0x3d, 0x49, 0x1b, 0x05, 0x1b, 0x0f, 0x9b, 0x00, 0x5b, 0x58, 338 | 0x1f, 0x21, 0x0b, 0x40, 0xd8, 0x40, 0x3a, 0x4a, 0x3a, 0x4b, 0x10, 0x60, 339 | 0x18, 0x68, 0xff, 0xf7, 0x79, 0xfd, 0xcd, 0xe7, 0x33, 0x68, 0xbb, 0x43, 340 | 0x0b, 0x43, 0x33, 0x60, 0xff, 0xf7, 0xb2, 0xfd, 0x01, 0x90, 0x33, 0x68, 341 | 0x3b, 0x40, 0xab, 0x42, 0xc9, 0xd0, 0xff, 0xf7, 0xab, 0xfd, 0x01, 0x9b, 342 | 0xc0, 0x1a, 0x31, 0x4b, 0x98, 0x42, 0xf4, 0xd9, 0x03, 0x20, 0xb9, 0xe7, 343 | 0x2a, 0x49, 0x53, 0x07, 0x06, 0xd5, 0x88, 0x68, 0x2d, 0x4b, 0x18, 0x40, 344 | 0xb0, 0x23, 0x1b, 0x01, 0x03, 0x43, 0x8b, 0x60, 0x8b, 0x68, 0x2b, 0x48, 345 | 0x03, 0x40, 0xe0, 0x68, 0x03, 0x43, 0x8b, 0x60, 0xb2, 0xe7, 0x1c, 0x22, 346 | 0x21, 0x4f, 0x3b, 0x68, 0x93, 0x43, 0xa2, 0x68, 0x13, 0x43, 0x3b, 0x60, 347 | 0x62, 0x68, 0x01, 0x2a, 0x19, 0xd1, 0x3b, 0x68, 0x9b, 0x03, 0x9a, 0xd5, 348 | 0x07, 0x21, 0xbb, 0x68, 0x8b, 0x43, 0x13, 0x43, 0xbb, 0x60, 0xff, 0xf7, 349 | 0x7f, 0xfd, 0x01, 0x90, 0x38, 0x23, 0xba, 0x68, 0x1a, 0x40, 0x63, 0x68, 350 | 0xdb, 0x00, 0x9a, 0x42, 0x98, 0xd0, 0xff, 0xf7, 0x75, 0xfd, 0x01, 0x9b, 351 | 0xc0, 0x1a, 0x16, 0x4b, 0x98, 0x42, 0xf1, 0xd9, 0xc8, 0xe7, 0x00, 0x2a, 352 | 0x03, 0xd1, 0x3b, 0x68, 0x5b, 0x05, 0xe3, 0xd4, 0x7d, 0xe7, 0x02, 0x23, 353 | 0x03, 0x2a, 0x03, 0xd1, 0x39, 0x6e, 0x19, 0x42, 0xdc, 0xd1, 0x76, 0xe7, 354 | 0xf9, 0x6d, 0xfa, 0xe7, 0xff, 0xf7, 0x5e, 0xfd, 0x01, 0x9b, 0xc0, 0x1a, 355 | 0x0a, 0x4b, 0x98, 0x42, 0x86, 0xd9, 0xb1, 0xe7, 0xab, 0x68, 0x0b, 0x4a, 356 | 0x13, 0x40, 0x22, 0x69, 0x13, 0x43, 0xab, 0x60, 0x86, 0xe7, 0xc0, 0x46, 357 | 0x00, 0x20, 0x02, 0x40, 0x00, 0x10, 0x02, 0x40, 0x8c, 0x2e, 0x00, 0x08, 358 | 0x08, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x20, 0x88, 0x13, 0x00, 0x00, 359 | 0xff, 0x84, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 360 | 0xf0, 0xb5, 0x03, 0x68, 0x05, 0x00, 0x85, 0xb0, 0x00, 0x20, 0x9b, 0x03, 361 | 0x23, 0xd5, 0x80, 0x22, 0x39, 0x4c, 0x52, 0x05, 0xe3, 0x6b, 0x06, 0x00, 362 | 0x13, 0x42, 0x07, 0xd1, 0xe3, 0x6b, 0x01, 0x36, 0x13, 0x43, 0xe3, 0x63, 363 | 0xe3, 0x6b, 0x13, 0x40, 0x03, 0x93, 0x03, 0x9b, 0xe2, 0x6d, 0xc0, 0x23, 364 | 0x10, 0x00, 0x9b, 0x00, 0xa9, 0x69, 0x31, 0x4f, 0x18, 0x40, 0x1a, 0x42, 365 | 0x3b, 0xd1, 0x00, 0x20, 0xe3, 0x6d, 0xaa, 0x69, 0x3b, 0x40, 0x13, 0x43, 366 | 0xe3, 0x65, 0x01, 0x2e, 0x03, 0xd1, 0xe3, 0x6b, 0x2b, 0x4a, 0x13, 0x40, 367 | 0xe3, 0x63, 0x2a, 0x68, 0xd3, 0x07, 0x06, 0xd5, 0x03, 0x24, 0x26, 0x49, 368 | 0x4b, 0x6d, 0xa3, 0x43, 0xac, 0x68, 0x23, 0x43, 0x4b, 0x65, 0x53, 0x06, 369 | 0x06, 0xd5, 0x22, 0x49, 0x24, 0x4c, 0x4b, 0x6d, 0x23, 0x40, 0xec, 0x68, 370 | 0x23, 0x43, 0x4b, 0x65, 0x53, 0x04, 0x06, 0xd5, 0x1d, 0x49, 0x6c, 0x69, 371 | 0x4b, 0x6d, 0x9b, 0x00, 0x9b, 0x08, 0x23, 0x43, 0x4b, 0x65, 0x13, 0x05, 372 | 0x06, 0xd5, 0x19, 0x49, 0x1c, 0x4c, 0x4b, 0x6d, 0x23, 0x40, 0x2c, 0x69, 373 | 0x23, 0x43, 0x4b, 0x65, 0x00, 0x2a, 0x06, 0xda, 0xe0, 0x21, 0x14, 0x4a, 374 | 0x13, 0x68, 0x8b, 0x43, 0x69, 0x68, 0x0b, 0x43, 0x13, 0x60, 0x05, 0xb0, 375 | 0xf0, 0xbd, 0x88, 0x42, 0xc1, 0xd0, 0x80, 0x22, 0xe3, 0x6d, 0xe0, 0x6d, 376 | 0x19, 0x00, 0x52, 0x02, 0x02, 0x43, 0xe2, 0x65, 0xe2, 0x6d, 0x10, 0x48, 377 | 0x39, 0x40, 0x02, 0x40, 0xe2, 0x65, 0xe1, 0x65, 0xdb, 0x07, 0xb2, 0xd5, 378 | 0xff, 0xf7, 0xd0, 0xfc, 0x01, 0x90, 0x02, 0x22, 0xe3, 0x6d, 0x13, 0x42, 379 | 0xab, 0xd1, 0xff, 0xf7, 0xc9, 0xfc, 0x01, 0x9b, 0xc0, 0x1a, 0x08, 0x4b, 380 | 0x98, 0x42, 0xf4, 0xd9, 0x03, 0x20, 0xa8, 0xe7, 0x00, 0x10, 0x02, 0x40, 381 | 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xcf, 0xff, 0xff, 382 | 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0x88, 0x13, 0x00, 0x00, 383 | 0x00, 0x20, 0x05, 0x4b, 0x5a, 0x69, 0x82, 0x42, 0x05, 0xda, 0x04, 0x4a, 384 | 0x9a, 0x60, 0x04, 0x4a, 0x9a, 0x60, 0x58, 0x69, 0xc0, 0x0f, 0x70, 0x47, 385 | 0x00, 0x20, 0x02, 0x40, 0x23, 0x01, 0x67, 0x45, 0xab, 0x89, 0xef, 0xcd, 386 | 0x80, 0x22, 0x04, 0x4b, 0x12, 0x06, 0x59, 0x69, 0x0a, 0x43, 0x5a, 0x61, 387 | 0x58, 0x69, 0xc0, 0x43, 0xc0, 0x0f, 0x70, 0x47, 0x00, 0x20, 0x02, 0x40, 388 | 0xf8, 0xb5, 0x05, 0x00, 0x80, 0x27, 0xff, 0xf7, 0x91, 0xfc, 0x7f, 0x02, 389 | 0x46, 0x19, 0x11, 0x4c, 0x23, 0x69, 0x3b, 0x42, 0x05, 0xd0, 0xff, 0xf7, 390 | 0x89, 0xfc, 0xb0, 0x42, 0xf7, 0xd3, 0x03, 0x20, 0x07, 0xe0, 0x23, 0x69, 391 | 0x0c, 0x4a, 0x13, 0x40, 0x23, 0x61, 0x03, 0xd0, 0x01, 0x20, 0x0b, 0x4a, 392 | 0x53, 0x60, 0xf8, 0xbd, 0xff, 0xf7, 0x7a, 0xfc, 0x80, 0x26, 0x45, 0x19, 393 | 0xf6, 0x02, 0x23, 0x69, 0x18, 0x00, 0x30, 0x40, 0x33, 0x42, 0xf4, 0xd0, 394 | 0xff, 0xf7, 0x70, 0xfc, 0xa8, 0x42, 0xf6, 0xd3, 0xe5, 0xe7, 0xc0, 0x46, 395 | 0x00, 0x20, 0x02, 0x40, 0xfa, 0xc3, 0x00, 0x00, 0x64, 0x01, 0x00, 0x20, 396 | 0xf7, 0xb5, 0x17, 0x4e, 0x01, 0x93, 0x33, 0x78, 0x04, 0x00, 0x0d, 0x00, 397 | 0x02, 0x20, 0x00, 0x92, 0x01, 0x2b, 0x1e, 0xd0, 0x01, 0x23, 0xfa, 0x20, 398 | 0x33, 0x70, 0x00, 0x23, 0x80, 0x00, 0x73, 0x60, 0xff, 0xf7, 0xbe, 0xff, 399 | 0x00, 0x28, 0x12, 0xd1, 0x0e, 0x4f, 0x01, 0x2c, 0x12, 0xd1, 0x7b, 0x69, 400 | 0x23, 0x43, 0x7b, 0x61, 0x00, 0x9b, 0x2b, 0x60, 0xbf, 0xf3, 0x6f, 0x8f, 401 | 0x01, 0x9b, 0x6b, 0x60, 0xfa, 0x20, 0x80, 0x00, 0xff, 0xf7, 0xac, 0xff, 402 | 0x7b, 0x69, 0xa3, 0x43, 0x7b, 0x61, 0x00, 0x23, 0x33, 0x70, 0xfe, 0xbd, 403 | 0x28, 0x00, 0x00, 0x99, 0x01, 0xf0, 0xc0, 0xfd, 0xf0, 0xe7, 0xc0, 0x46, 404 | 0x64, 0x01, 0x00, 0x20, 0x00, 0x20, 0x02, 0x40, 0x78, 0x21, 0x04, 0x4a, 405 | 0xc0, 0x00, 0x53, 0x69, 0x8b, 0x43, 0x18, 0x43, 0x02, 0x4b, 0x03, 0x43, 406 | 0x53, 0x61, 0x70, 0x47, 0x00, 0x20, 0x02, 0x40, 0x02, 0x00, 0x01, 0x00, 407 | 0xf7, 0xb5, 0x20, 0x4f, 0x05, 0x00, 0x3b, 0x78, 0x02, 0x24, 0x01, 0x91, 408 | 0x01, 0x2b, 0x18, 0xd0, 0x01, 0x23, 0xfa, 0x20, 0x3b, 0x70, 0x00, 0x23, 409 | 0x80, 0x00, 0x7b, 0x60, 0xff, 0xf7, 0x7e, 0xff, 0x04, 0x1e, 0x0c, 0xd1, 410 | 0x2b, 0x68, 0x04, 0x2b, 0x0d, 0xd1, 0xfa, 0x20, 0x16, 0x4a, 0x17, 0x4b, 411 | 0x51, 0x69, 0x80, 0x00, 0x0b, 0x43, 0x53, 0x61, 0xff, 0xf7, 0x70, 0xff, 412 | 0x04, 0x00, 0x00, 0x23, 0x3b, 0x70, 0x20, 0x00, 0xfe, 0xbd, 0x01, 0x23, 413 | 0x01, 0x9a, 0x5b, 0x42, 0x13, 0x60, 0x6e, 0x68, 0x6b, 0x68, 0xaa, 0x68, 414 | 0x9b, 0x18, 0xb3, 0x42, 0x0b, 0xd9, 0x30, 0x00, 0xff, 0xf7, 0xc2, 0xff, 415 | 0xfa, 0x20, 0x80, 0x00, 0xff, 0xf7, 0x5a, 0xff, 0x00, 0x28, 0x08, 0xd0, 416 | 0x04, 0x00, 0x01, 0x9b, 0x1e, 0x60, 0x02, 0x21, 0x04, 0x4a, 0x53, 0x69, 417 | 0x8b, 0x43, 0x53, 0x61, 0xdf, 0xe7, 0x01, 0x36, 0xe6, 0xe7, 0xc0, 0x46, 418 | 0x64, 0x01, 0x00, 0x20, 0x00, 0x20, 0x02, 0x40, 0x04, 0x00, 0x01, 0x00, 419 | 0x00, 0x23, 0x9c, 0x46, 0xf0, 0xb5, 0x85, 0xb0, 0x0b, 0x68, 0x64, 0x46, 420 | 0x1a, 0x00, 0xe2, 0x40, 0x01, 0xd1, 0x05, 0xb0, 0xf0, 0xbd, 0x62, 0x46, 421 | 0x01, 0x26, 0x96, 0x40, 0x1a, 0x00, 0x32, 0x40, 0x01, 0x92, 0x33, 0x42, 422 | 0x00, 0xd1, 0x80, 0xe0, 0x4f, 0x68, 0x10, 0x23, 0x3d, 0x00, 0x9d, 0x43, 423 | 0x03, 0x95, 0x02, 0x2d, 0x14, 0xd1, 0x63, 0x46, 0xda, 0x08, 0x92, 0x00, 424 | 0x82, 0x18, 0x13, 0x6a, 0x07, 0x24, 0x1d, 0x00, 0x63, 0x46, 0x1c, 0x40, 425 | 0x0f, 0x23, 0xa4, 0x00, 0xa3, 0x40, 0x9d, 0x43, 0x02, 0x95, 0x0f, 0x25, 426 | 0x0b, 0x69, 0x2b, 0x40, 0xa3, 0x40, 0x02, 0x9c, 0x23, 0x43, 0x13, 0x62, 427 | 0x63, 0x46, 0x5a, 0x00, 0x03, 0x23, 0x93, 0x40, 0x04, 0x68, 0xdd, 0x43, 428 | 0x9c, 0x43, 0x03, 0x23, 0x3b, 0x40, 0x93, 0x40, 0x02, 0x95, 0x03, 0x9d, 429 | 0x23, 0x43, 0x01, 0x3d, 0x03, 0x60, 0x01, 0x2d, 0x56, 0xd9, 0x03, 0x2f, 430 | 0x51, 0xd0, 0xc4, 0x68, 0x02, 0x9b, 0x1c, 0x40, 0x8b, 0x68, 0x93, 0x40, 431 | 0x23, 0x43, 0xc3, 0x60, 0x80, 0x23, 0x5b, 0x05, 0x1f, 0x42, 0x46, 0xd0, 432 | 0x63, 0x46, 0x9a, 0x08, 0x2b, 0x4b, 0x92, 0x00, 0xd2, 0x18, 0x03, 0x24, 433 | 0x63, 0x46, 0x1c, 0x40, 0x0f, 0x23, 0xe4, 0x00, 0xa3, 0x40, 0xa0, 0x26, 434 | 0x15, 0x6e, 0xf6, 0x05, 0x9d, 0x43, 0x00, 0x23, 0xb0, 0x42, 0x0c, 0xd0, 435 | 0x24, 0x4e, 0x01, 0x33, 0xb0, 0x42, 0x08, 0xd0, 0x23, 0x4e, 0x01, 0x33, 436 | 0xb0, 0x42, 0x04, 0xd0, 0x22, 0x4b, 0xc3, 0x18, 0x5e, 0x1e, 0xb3, 0x41, 437 | 0x05, 0x33, 0xa3, 0x40, 0x2b, 0x43, 0x13, 0x66, 0x1f, 0x4b, 0x01, 0x9a, 438 | 0xdd, 0x6f, 0x01, 0x9c, 0xd2, 0x43, 0x2c, 0x43, 0xfe, 0x03, 0x01, 0xd4, 439 | 0x2c, 0x00, 0x14, 0x40, 0xdc, 0x67, 0x1b, 0x4c, 0x01, 0x9d, 0xe3, 0x6f, 440 | 0x1d, 0x43, 0xbe, 0x03, 0x01, 0xd4, 0x13, 0x40, 0x1d, 0x00, 0x12, 0x4b, 441 | 0xe5, 0x67, 0x1d, 0x68, 0x01, 0x9c, 0x2c, 0x43, 0xfe, 0x02, 0x01, 0xd4, 442 | 0x2c, 0x00, 0x14, 0x40, 0x1c, 0x60, 0x5c, 0x68, 0x01, 0x9d, 0x25, 0x43, 443 | 0xbf, 0x02, 0x01, 0xd4, 0x14, 0x40, 0x25, 0x00, 0x5d, 0x60, 0x01, 0x23, 444 | 0x9c, 0x44, 0x6b, 0xe7, 0x84, 0x68, 0x02, 0x9b, 0x65, 0x46, 0x1c, 0x40, 445 | 0xcb, 0x68, 0x93, 0x40, 0x23, 0x43, 0x83, 0x60, 0x3b, 0x09, 0xab, 0x40, 446 | 0x44, 0x68, 0xb4, 0x43, 0x23, 0x43, 0x43, 0x60, 0x9b, 0xe7, 0xc0, 0x46, 447 | 0x00, 0x18, 0x02, 0x40, 0x00, 0x04, 0x00, 0x50, 0x00, 0x08, 0x00, 0x50, 448 | 0x00, 0xec, 0xff, 0xaf, 0x04, 0x18, 0x02, 0x40, 0x08, 0x18, 0x02, 0x40, 449 | 0x00, 0x69, 0x08, 0x40, 0x43, 0x1e, 0x98, 0x41, 0xc0, 0xb2, 0x70, 0x47, 450 | 0x00, 0x2a, 0x01, 0xd0, 0x81, 0x61, 0x70, 0x47, 0x81, 0x62, 0xfc, 0xe7, 451 | 0xf8, 0xb5, 0x01, 0x23, 0x41, 0x1d, 0xcb, 0x77, 0x84, 0x1d, 0xe2, 0x7f, 452 | 0x02, 0x2a, 0x03, 0xd0, 0x04, 0x22, 0xc2, 0x63, 0x18, 0x00, 0xf8, 0xbd, 453 | 0x0e, 0x26, 0x02, 0x68, 0x15, 0x68, 0xb5, 0x43, 0x15, 0x60, 0x15, 0x68, 454 | 0x46, 0x6c, 0x9d, 0x43, 0x15, 0x60, 0x32, 0x68, 0x11, 0x4d, 0x2a, 0x40, 455 | 0x32, 0x60, 0x02, 0x6c, 0x10, 0x4e, 0x15, 0x00, 0x1c, 0x22, 0x15, 0x40, 456 | 0xab, 0x40, 0x77, 0x68, 0x3b, 0x43, 0x73, 0x60, 0xc2, 0x6c, 0x83, 0x6c, 457 | 0x5a, 0x60, 0x03, 0x6d, 0x00, 0x2b, 0x06, 0xd0, 0x1a, 0x68, 0x08, 0x4d, 458 | 0x2a, 0x40, 0x1a, 0x60, 0x43, 0x6d, 0x82, 0x6d, 0x5a, 0x60, 0x01, 0x23, 459 | 0xe3, 0x77, 0x00, 0x23, 0xcb, 0x77, 0x83, 0x6b, 0x00, 0x2b, 0x00, 0xd0, 460 | 0x98, 0x47, 0x00, 0x20, 0xd1, 0xe7, 0xc0, 0x46, 0xff, 0xfe, 0xff, 0xff, 461 | 0x00, 0x00, 0x02, 0x40, 0x06, 0x30, 0xc0, 0x7f, 0xc0, 0xb2, 0x70, 0x47, 462 | 0x03, 0x68, 0x9a, 0x69, 0x92, 0x07, 0x01, 0xd5, 0x00, 0x22, 0x9a, 0x62, 463 | 0x01, 0x22, 0x99, 0x69, 0x11, 0x42, 0x02, 0xd1, 0x99, 0x69, 0x0a, 0x43, 464 | 0x9a, 0x61, 0x70, 0x47, 0x30, 0xb5, 0x03, 0x9c, 0x00, 0x68, 0x23, 0x43, 465 | 0x12, 0x04, 0x89, 0x05, 0x1a, 0x43, 0x89, 0x0d, 0x05, 0x4b, 0x45, 0x68, 466 | 0x0a, 0x43, 0x64, 0x0d, 0x23, 0x43, 0x52, 0x00, 0x9d, 0x43, 0x52, 0x08, 467 | 0x2a, 0x43, 0x42, 0x60, 0x30, 0xbd, 0xc0, 0x46, 0xff, 0x63, 0xff, 0x03, 468 | 0x10, 0xb5, 0x42, 0x6b, 0x1b, 0x4c, 0x0b, 0xb2, 0xa2, 0x42, 0x1e, 0xd0, 469 | 0x1a, 0x4c, 0xa2, 0x42, 0x1b, 0xd0, 0x1a, 0x4c, 0xa2, 0x42, 0x18, 0xd0, 470 | 0xb8, 0x22, 0xf2, 0x24, 0xdb, 0x17, 0x1a, 0x40, 0xcb, 0x07, 0xdb, 0x17, 471 | 0x23, 0x40, 0x13, 0x43, 0x8a, 0x07, 0x01, 0xd5, 0xf4, 0x22, 0x13, 0x43, 472 | 0x10, 0x29, 0x06, 0xd1, 0x90, 0x22, 0x13, 0x43, 0x01, 0x68, 0x0a, 0x68, 473 | 0x13, 0x43, 0x0b, 0x60, 0x10, 0xbd, 0x20, 0x29, 0xf8, 0xd1, 0x0b, 0x43, 474 | 0xf6, 0xe7, 0xb8, 0x22, 0xf2, 0x24, 0xdb, 0x17, 0x1a, 0x40, 0xcb, 0x07, 475 | 0xdb, 0x17, 0x23, 0x40, 0x13, 0x43, 0x8a, 0x07, 0x01, 0xd5, 0xf4, 0x22, 476 | 0x13, 0x43, 0x10, 0x29, 0xe6, 0xd0, 0x20, 0x29, 0x01, 0xd1, 0x60, 0x22, 477 | 0xe3, 0xe7, 0x40, 0x29, 0xe9, 0xd0, 0xe1, 0xe7, 0x99, 0x1e, 0x00, 0x08, 478 | 0x4d, 0x21, 0x00, 0x08, 0x3d, 0x1d, 0x00, 0x08, 0x00, 0x23, 0x10, 0xb5, 479 | 0xca, 0x07, 0x08, 0xd5, 0x03, 0x00, 0x41, 0x33, 0x1a, 0x78, 0x28, 0x23, 480 | 0x1a, 0x40, 0xca, 0x33, 0x28, 0x2a, 0x00, 0xd1, 0xb0, 0x3b, 0x8a, 0x07, 481 | 0x08, 0xd5, 0x02, 0x00, 0x28, 0x24, 0x41, 0x32, 0x12, 0x78, 0x22, 0x40, 482 | 0xa2, 0x42, 0x0b, 0xd1, 0x44, 0x22, 0x13, 0x43, 0x09, 0xb2, 0x00, 0x29, 483 | 0x01, 0xda, 0xb8, 0x22, 0x13, 0x43, 0x01, 0x68, 0x0a, 0x68, 0x9a, 0x43, 484 | 0x0a, 0x60, 0x10, 0xbd, 0xf4, 0x22, 0xf2, 0xe7, 0x70, 0xb5, 0x04, 0x00, 485 | 0x01, 0x20, 0x00, 0x2c, 0x4e, 0xd0, 0x25, 0x00, 0x41, 0x35, 0x2b, 0x78, 486 | 0xda, 0xb2, 0x00, 0x2b, 0x05, 0xd1, 0x23, 0x00, 0x40, 0x33, 0x20, 0x00, 487 | 0x1a, 0x70, 0xff, 0xf7, 0x53, 0xf9, 0x24, 0x23, 0x01, 0x21, 0x2b, 0x70, 488 | 0x23, 0x68, 0xe0, 0x68, 0x1a, 0x68, 0xa6, 0x68, 0x8a, 0x43, 0x1a, 0x60, 489 | 0x1d, 0x49, 0x62, 0x68, 0x0a, 0x40, 0x1a, 0x61, 0x9a, 0x68, 0x1c, 0x49, 490 | 0x0a, 0x40, 0x9a, 0x60, 0x01, 0x28, 0x07, 0xd1, 0x80, 0x22, 0x12, 0x02, 491 | 0x32, 0x43, 0x9a, 0x60, 0x5a, 0x68, 0x18, 0x48, 0x02, 0x40, 0x09, 0xe0, 492 | 0x84, 0x22, 0x12, 0x02, 0x32, 0x43, 0x9a, 0x60, 0x02, 0x28, 0xf5, 0xd1, 493 | 0x80, 0x22, 0x58, 0x68, 0x12, 0x01, 0x02, 0x43, 0x5a, 0x60, 0x58, 0x68, 494 | 0x11, 0x4a, 0x02, 0x43, 0x5a, 0x60, 0xda, 0x68, 0x00, 0x20, 0x0a, 0x40, 495 | 0xda, 0x60, 0x61, 0x69, 0x22, 0x69, 0x0a, 0x43, 0xa1, 0x69, 0x09, 0x02, 496 | 0x0a, 0x43, 0xda, 0x60, 0x21, 0x6a, 0xe2, 0x69, 0x0a, 0x43, 0x1a, 0x60, 497 | 0x01, 0x22, 0x19, 0x68, 0x0a, 0x43, 0x1a, 0x60, 0x20, 0x23, 0x60, 0x64, 498 | 0x2b, 0x70, 0x20, 0x63, 0x42, 0x34, 0x20, 0x70, 0x70, 0xbd, 0xc0, 0x46, 499 | 0xff, 0xff, 0xff, 0xf0, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 500 | 0x00, 0x80, 0x00, 0x02, 0xf0, 0xb5, 0x06, 0x00, 0x85, 0xb0, 0x02, 0x92, 501 | 0x28, 0x22, 0x01, 0x91, 0x03, 0x93, 0x41, 0x36, 0x33, 0x78, 0x04, 0x00, 502 | 0x13, 0x40, 0x93, 0x42, 0x02, 0xd0, 0x01, 0x20, 0x05, 0xb0, 0xf0, 0xbd, 503 | 0x01, 0x9b, 0x00, 0x2b, 0x02, 0xd0, 0x02, 0x9b, 0x00, 0x2b, 0x03, 0xd1, 504 | 0x80, 0x23, 0x9b, 0x00, 0x63, 0x64, 0xf2, 0xe7, 0x25, 0x00, 0x25, 0x49, 505 | 0x40, 0x35, 0xff, 0xf7, 0x5f, 0xff, 0x2b, 0x78, 0x02, 0x20, 0x01, 0x2b, 506 | 0xea, 0xd0, 0x01, 0x23, 0x2b, 0x70, 0x33, 0x78, 0x20, 0x4f, 0x2a, 0x2b, 507 | 0x16, 0xd1, 0x01, 0x00, 0x20, 0x00, 0xff, 0xf7, 0x51, 0xff, 0x23, 0x68, 508 | 0x1a, 0x68, 0x12, 0x04, 0x0e, 0xd5, 0x1a, 0x68, 0xe0, 0x6b, 0x3a, 0x40, 509 | 0x1a, 0x60, 0x00, 0x28, 0x08, 0xd0, 0x19, 0x4b, 0x83, 0x63, 0xff, 0xf7, 510 | 0x9d, 0xfe, 0x00, 0x28, 0x02, 0xd0, 0xe0, 0x6b, 0x83, 0x6b, 0x98, 0x47, 511 | 0x29, 0x23, 0x33, 0x70, 0x23, 0x00, 0x20, 0x22, 0x42, 0x33, 0x1a, 0x70, 512 | 0x00, 0x23, 0x63, 0x64, 0x23, 0x68, 0x5a, 0x68, 0x3a, 0x40, 0x5a, 0x60, 513 | 0x01, 0x9a, 0x62, 0x62, 0x02, 0x9a, 0x62, 0x85, 0x62, 0x8d, 0x22, 0x85, 514 | 0x03, 0x9a, 0xe2, 0x62, 0x0b, 0x4a, 0x99, 0x69, 0x62, 0x63, 0x9a, 0x69, 515 | 0xd2, 0x03, 0x03, 0xd5, 0x08, 0x22, 0x11, 0x42, 0x00, 0xd0, 0xda, 0x61, 516 | 0x00, 0x26, 0x20, 0x00, 0x02, 0x49, 0x2e, 0x70, 0xff, 0xf7, 0xda, 0xfe, 517 | 0x30, 0x00, 0xa7, 0xe7, 0x01, 0x80, 0x00, 0x00, 0xff, 0x7f, 0xff, 0xff, 518 | 0x85, 0x23, 0x00, 0x08, 0x61, 0x22, 0x00, 0x08, 0xf7, 0xb5, 0x07, 0x00, 519 | 0x00, 0x92, 0x28, 0x22, 0x01, 0x93, 0x41, 0x37, 0x3b, 0x78, 0x04, 0x00, 520 | 0x0d, 0x00, 0x13, 0x40, 0x93, 0x42, 0x01, 0xd0, 0x01, 0x20, 0xfe, 0xbd, 521 | 0x00, 0x29, 0x02, 0xd0, 0x00, 0x9b, 0x00, 0x2b, 0x03, 0xd1, 0x80, 0x23, 522 | 0x9b, 0x00, 0x63, 0x64, 0xf4, 0xe7, 0x26, 0x00, 0x24, 0x49, 0x40, 0x36, 523 | 0xff, 0xf7, 0xf4, 0xfe, 0x33, 0x78, 0x02, 0x20, 0x01, 0x2b, 0xec, 0xd0, 524 | 0x01, 0x21, 0x31, 0x70, 0x3b, 0x78, 0x29, 0x2b, 0x16, 0xd1, 0x20, 0x00, 525 | 0xff, 0xf7, 0xe8, 0xfe, 0x23, 0x68, 0x1a, 0x68, 0x52, 0x04, 0x0f, 0xd5, 526 | 0x1a, 0x68, 0x1b, 0x49, 0xa0, 0x6b, 0x0a, 0x40, 0x1a, 0x60, 0x00, 0x28, 527 | 0x08, 0xd0, 0x19, 0x4b, 0x83, 0x63, 0xff, 0xf7, 0x33, 0xfe, 0x00, 0x28, 528 | 0x02, 0xd0, 0xa0, 0x6b, 0x83, 0x6b, 0x98, 0x47, 0x2a, 0x23, 0x3b, 0x70, 529 | 0x23, 0x00, 0x20, 0x22, 0x42, 0x33, 0x1a, 0x70, 0x00, 0x23, 0x63, 0x64, 530 | 0x23, 0x68, 0x11, 0x49, 0x5a, 0x68, 0x0a, 0x40, 0x5a, 0x60, 0x00, 0x9a, 531 | 0x65, 0x62, 0x62, 0x85, 0x62, 0x8d, 0x22, 0x85, 0x01, 0x9a, 0xe2, 0x62, 532 | 0x0c, 0x4a, 0x99, 0x69, 0x62, 0x63, 0x9a, 0x69, 0xd2, 0x03, 0x03, 0xd4, 533 | 0x08, 0x22, 0x11, 0x42, 0x00, 0xd0, 0xda, 0x61, 0x00, 0x25, 0x20, 0x00, 534 | 0x02, 0x49, 0x35, 0x70, 0xff, 0xf7, 0x70, 0xfe, 0x28, 0x00, 0xaa, 0xe7, 535 | 0x02, 0x80, 0x00, 0x00, 0xff, 0xbf, 0xff, 0xff, 0x85, 0x23, 0x00, 0x08, 536 | 0xff, 0x7f, 0xff, 0xff, 0x61, 0x22, 0x00, 0x08, 0x02, 0x00, 0x10, 0xb5, 537 | 0x41, 0x32, 0x11, 0x78, 0x02, 0x23, 0x20, 0x29, 0x08, 0xd1, 0x80, 0x21, 538 | 0x26, 0x33, 0x13, 0x70, 0x03, 0x4b, 0x09, 0x02, 0x43, 0x63, 0xff, 0xf7, 539 | 0x55, 0xfe, 0x00, 0x23, 0x18, 0x00, 0x10, 0xbd, 0x61, 0x22, 0x00, 0x08, 540 | 0x03, 0x68, 0x10, 0xb5, 0x99, 0x69, 0x1a, 0x68, 0x43, 0x6b, 0x00, 0x2b, 541 | 0x00, 0xd0, 0x98, 0x47, 0x10, 0xbd, 0x70, 0x47, 0x70, 0x47, 0x03, 0x00, 542 | 0x70, 0xb5, 0x00, 0x25, 0x20, 0x22, 0x06, 0x00, 0x42, 0x33, 0x1d, 0x70, 543 | 0x01, 0x3b, 0x19, 0x78, 0x04, 0x00, 0x40, 0x36, 0x1a, 0x70, 0x21, 0x29, 544 | 0x0a, 0xd1, 0x11, 0x23, 0x45, 0x63, 0x03, 0x63, 0x20, 0x39, 0xff, 0xf7, 545 | 0x71, 0xfe, 0x20, 0x00, 0x35, 0x70, 0xff, 0xf7, 0xe6, 0xff, 0x70, 0xbd, 546 | 0x12, 0x23, 0x45, 0x63, 0x03, 0x63, 0x02, 0x21, 0xff, 0xf7, 0x66, 0xfe, 547 | 0x20, 0x00, 0x35, 0x70, 0xff, 0xf7, 0xdc, 0xff, 0xf3, 0xe7, 0x00, 0x00, 548 | 0x01, 0x00, 0x03, 0x68, 0x10, 0xb5, 0x04, 0x00, 0x00, 0x20, 0x1a, 0x68, 549 | 0x42, 0x31, 0x08, 0x70, 0x51, 0x04, 0x18, 0xd5, 0x1a, 0x68, 0x18, 0x49, 550 | 0x0a, 0x40, 0x1a, 0x60, 0x23, 0x00, 0x41, 0x33, 0x1a, 0x78, 0x29, 0x2a, 551 | 0x14, 0xd1, 0x01, 0x3a, 0x1a, 0x70, 0x21, 0x23, 0x20, 0x00, 0x23, 0x63, 552 | 0x01, 0x21, 0xff, 0xf7, 0x45, 0xfe, 0x23, 0x00, 0x00, 0x22, 0x40, 0x33, 553 | 0x20, 0x00, 0x1a, 0x70, 0xfe, 0xf7, 0xa0, 0xfd, 0x10, 0xbd, 0x12, 0x04, 554 | 0xe8, 0xd5, 0x1a, 0x68, 0x0b, 0x49, 0xe3, 0xe7, 0x1a, 0x78, 0x2a, 0x2a, 555 | 0xf6, 0xd1, 0x02, 0x3a, 0x1a, 0x70, 0x22, 0x23, 0x20, 0x00, 0x23, 0x63, 556 | 0x02, 0x21, 0xff, 0xf7, 0x2d, 0xfe, 0x23, 0x00, 0x00, 0x22, 0x40, 0x33, 557 | 0x20, 0x00, 0x1a, 0x70, 0xfe, 0xf7, 0x8a, 0xfd, 0xe6, 0xe7, 0xc0, 0x46, 558 | 0xff, 0xbf, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0x03, 0x00, 0xf7, 0xb5, 559 | 0x28, 0x22, 0x41, 0x33, 0x1b, 0x78, 0x04, 0x00, 0x01, 0x68, 0x13, 0x40, 560 | 0x93, 0x42, 0x3c, 0xd1, 0xfe, 0x27, 0x8d, 0x69, 0x8e, 0x69, 0x8b, 0x68, 561 | 0xca, 0x68, 0xed, 0x03, 0x01, 0x92, 0xc2, 0x68, 0x36, 0x0c, 0xed, 0x0f, 562 | 0x3e, 0x40, 0x02, 0x2a, 0x25, 0xd1, 0x9b, 0x05, 0x9a, 0x0d, 0x5b, 0x0f, 563 | 0x73, 0x40, 0x18, 0x00, 0x06, 0x26, 0x30, 0x40, 0x33, 0x42, 0x10, 0xd1, 564 | 0xa3, 0x6c, 0x01, 0x33, 0xa3, 0x64, 0xa3, 0x6c, 0x02, 0x2b, 0x09, 0xd1, 565 | 0x9b, 0x19, 0xa0, 0x64, 0xcb, 0x61, 0x23, 0x00, 0x40, 0x33, 0x18, 0x70, 566 | 0x29, 0x00, 0x20, 0x00, 0xfe, 0xf7, 0x5a, 0xfd, 0xf7, 0xbd, 0x80, 0x21, 567 | 0x20, 0x00, 0x09, 0x02, 0xff, 0xf7, 0xea, 0xfd, 0x23, 0x00, 0x00, 0x22, 568 | 0x40, 0x33, 0x1a, 0x70, 0x01, 0x9a, 0x3a, 0x40, 0xee, 0xe7, 0x80, 0x21, 569 | 0x09, 0x02, 0xff, 0xf7, 0xdf, 0xfd, 0x23, 0x00, 0x00, 0x22, 0x40, 0x33, 570 | 0x1a, 0x70, 0x32, 0x00, 0xe4, 0xe7, 0x08, 0x23, 0xcb, 0x61, 0x00, 0x23, 571 | 0x40, 0x34, 0x23, 0x70, 0xe2, 0xe7, 0x00, 0x00, 0x18, 0x4b, 0x10, 0xb5, 572 | 0xc3, 0x62, 0x00, 0x23, 0x02, 0x00, 0x03, 0x63, 0x04, 0x00, 0x20, 0x20, 573 | 0x41, 0x32, 0x10, 0x70, 0x53, 0x70, 0x04, 0x22, 0x63, 0x63, 0x11, 0x42, 574 | 0x12, 0xd0, 0x23, 0x68, 0x59, 0x6a, 0x63, 0x6a, 0x19, 0x70, 0x63, 0x6a, 575 | 0x01, 0x33, 0x63, 0x62, 0x23, 0x8d, 0x00, 0x2b, 0x08, 0xd0, 0x01, 0x3b, 576 | 0x23, 0x85, 0x63, 0x8d, 0x01, 0x3b, 0x9b, 0xb2, 0x63, 0x85, 0x63, 0x6c, 577 | 0x1a, 0x43, 0x62, 0x64, 0x20, 0x00, 0x08, 0x49, 0xff, 0xf7, 0xac, 0xfd, 578 | 0x10, 0x22, 0x23, 0x68, 0x20, 0x00, 0xda, 0x61, 0x23, 0x00, 0x00, 0x22, 579 | 0x40, 0x33, 0x1a, 0x70, 0xfe, 0xf7, 0x2a, 0xfd, 0x10, 0xbd, 0xc0, 0x46, 580 | 0x00, 0x00, 0xff, 0xff, 0x03, 0x80, 0x00, 0x00, 0x70, 0x47, 0x70, 0x47, 581 | 0x70, 0x47, 0x01, 0x00, 0x02, 0x00, 0x10, 0xb5, 0x41, 0x31, 0x0c, 0x78, 582 | 0x00, 0x23, 0x40, 0x32, 0x60, 0x2c, 0x06, 0xd1, 0x40, 0x3c, 0x0c, 0x70, 583 | 0x03, 0x63, 0x13, 0x70, 0xff, 0xf7, 0xf0, 0xff, 0x10, 0xbd, 0x03, 0x63, 584 | 0x13, 0x70, 0xfe, 0xf7, 0x15, 0xfd, 0xf9, 0xe7, 0x70, 0xb5, 0x05, 0x00, 585 | 0x00, 0x22, 0x04, 0x00, 0x41, 0x35, 0x42, 0x30, 0x2b, 0x78, 0x02, 0x70, 586 | 0x3a, 0x48, 0x28, 0x3b, 0xe0, 0x62, 0x62, 0x85, 0x62, 0x6c, 0x0a, 0x43, 587 | 0x62, 0x64, 0x02, 0x2b, 0x2b, 0xd8, 0x03, 0x21, 0x20, 0x00, 0xff, 0xf7, 588 | 0x6f, 0xfd, 0x28, 0x23, 0x2b, 0x70, 0x34, 0x4b, 0xa0, 0x6b, 0x63, 0x63, 589 | 0x23, 0x6b, 0x00, 0x28, 0x40, 0xd0, 0x1a, 0x00, 0x10, 0x21, 0x11, 0x3a, 590 | 0x8a, 0x43, 0x3b, 0xd1, 0x23, 0x68, 0x1a, 0x68, 0x52, 0x04, 0x03, 0xd5, 591 | 0x1a, 0x68, 0x2d, 0x49, 0x0a, 0x40, 0x1a, 0x60, 0xff, 0xf7, 0xf0, 0xfc, 592 | 0x01, 0x28, 0x2b, 0xd0, 0xa0, 0x6b, 0x2a, 0x4b, 0x00, 0x22, 0x83, 0x63, 593 | 0x23, 0x00, 0x40, 0x33, 0x1a, 0x70, 0xff, 0xf7, 0xa7, 0xfc, 0x00, 0x28, 594 | 0x23, 0xd0, 0xa0, 0x6b, 0x83, 0x6b, 0x98, 0x47, 0x1f, 0xe0, 0x20, 0x00, 595 | 0x23, 0x49, 0xff, 0xf7, 0x43, 0xfd, 0x20, 0x00, 0xff, 0xf7, 0xdc, 0xfc, 596 | 0x2b, 0x78, 0x60, 0x2b, 0x10, 0xd0, 0x20, 0x22, 0x2a, 0x70, 0x23, 0x68, 597 | 0x99, 0x69, 0x11, 0x42, 0x0a, 0xd0, 0x99, 0x69, 0x10, 0x3a, 0x11, 0x42, 598 | 0x04, 0xd0, 0xda, 0x61, 0x61, 0x6c, 0x0c, 0x3a, 0x0a, 0x43, 0x62, 0x64, 599 | 0x20, 0x22, 0xda, 0x61, 0x00, 0x23, 0xbd, 0xe7, 0x20, 0x00, 0xff, 0xf7, 600 | 0x8e, 0xff, 0x70, 0xbd, 0xe0, 0x6b, 0x00, 0x28, 0xf8, 0xd0, 0x10, 0x22, 601 | 0x12, 0x3b, 0x93, 0x43, 0xf4, 0xd1, 0x23, 0x68, 0x1a, 0x68, 0x12, 0x04, 602 | 0x03, 0xd5, 0x1a, 0x68, 0x0e, 0x49, 0x0a, 0x40, 0x1a, 0x60, 0xff, 0xf7, 603 | 0xad, 0xfc, 0x01, 0x28, 0xe8, 0xd0, 0xe0, 0x6b, 0x08, 0x4b, 0x00, 0x22, 604 | 0x83, 0x63, 0x23, 0x00, 0x40, 0x33, 0x1a, 0x70, 0xff, 0xf7, 0x64, 0xfc, 605 | 0x00, 0x28, 0xe0, 0xd0, 0xe0, 0x6b, 0xbb, 0xe7, 0x00, 0x00, 0xff, 0xff, 606 | 0x61, 0x22, 0x00, 0x08, 0xff, 0xbf, 0xff, 0xff, 0x85, 0x23, 0x00, 0x08, 607 | 0x03, 0x80, 0x00, 0x00, 0xff, 0x7f, 0xff, 0xff, 0xf7, 0xb5, 0x20, 0x23, 608 | 0x05, 0x00, 0x06, 0x68, 0x41, 0x35, 0xf3, 0x61, 0x2b, 0x78, 0x04, 0x00, 609 | 0x0f, 0x00, 0x21, 0x2b, 0x2b, 0xd1, 0x01, 0x21, 0xff, 0xf7, 0xec, 0xfc, 610 | 0x11, 0x23, 0x23, 0x63, 0x73, 0x68, 0x2e, 0x4a, 0x13, 0x40, 0x73, 0x60, 611 | 0x00, 0x23, 0x63, 0x63, 0x2c, 0x4b, 0xe3, 0x62, 0x10, 0x23, 0x1f, 0x42, 612 | 0x04, 0xd0, 0xf3, 0x61, 0x62, 0x6c, 0x0c, 0x3b, 0x13, 0x43, 0x63, 0x64, 613 | 0x2b, 0x78, 0x60, 0x2b, 0x05, 0xd1, 0x7f, 0x07, 0x03, 0xd5, 0x73, 0x6a, 614 | 0xdb, 0xb2, 0x01, 0x93, 0x01, 0x9b, 0x20, 0x00, 0xff, 0xf7, 0x6a, 0xfc, 615 | 0x63, 0x6c, 0x2a, 0x78, 0x60, 0x2a, 0x01, 0xd0, 0x00, 0x2b, 0x0c, 0xd0, 616 | 0x20, 0x00, 0x61, 0x6c, 0xff, 0xf7, 0x40, 0xff, 0xf7, 0xbd, 0x2b, 0x78, 617 | 0x22, 0x2b, 0xd5, 0xd1, 0x02, 0x21, 0xff, 0xf7, 0xbd, 0xfc, 0x12, 0x23, 618 | 0xcf, 0xe7, 0x2a, 0x78, 0x21, 0x2a, 0x13, 0xd1, 0x01, 0x3a, 0x2a, 0x70, 619 | 0x22, 0x00, 0x21, 0x00, 0x23, 0x63, 0x42, 0x32, 0x10, 0x78, 0x40, 0x31, 620 | 0x13, 0x70, 0x0b, 0x70, 0x40, 0x28, 0x03, 0xd1, 0x20, 0x00, 0xff, 0xf7, 621 | 0x0d, 0xff, 0xe3, 0xe7, 0x20, 0x00, 0xff, 0xf7, 0x1e, 0xfe, 0xdf, 0xe7, 622 | 0x2a, 0x78, 0x22, 0x2a, 0xdc, 0xd1, 0x02, 0x3a, 0x2a, 0x70, 0x22, 0x00, 623 | 0x21, 0x00, 0x23, 0x63, 0x42, 0x32, 0x10, 0x78, 0x40, 0x31, 0x13, 0x70, 624 | 0x0b, 0x70, 0x40, 0x28, 0x03, 0xd1, 0x20, 0x00, 0xff, 0xf7, 0xf7, 0xfe, 625 | 0xcc, 0xe7, 0x20, 0x00, 0xff, 0xf7, 0x08, 0xfe, 0xc8, 0xe7, 0xc0, 0x46, 626 | 0x00, 0xe8, 0x00, 0xfe, 0x00, 0x00, 0xff, 0xff, 0x73, 0xb5, 0x05, 0x00, 627 | 0x40, 0x35, 0x2b, 0x78, 0x04, 0x00, 0x02, 0x20, 0x01, 0x2b, 0x15, 0xd0, 628 | 0x01, 0x23, 0x2b, 0x70, 0x0f, 0x33, 0x19, 0x42, 0x11, 0xd0, 0x1a, 0x42, 629 | 0x0f, 0xd0, 0x22, 0x68, 0x20, 0x00, 0xd3, 0x61, 0x62, 0x6c, 0x0c, 0x3b, 630 | 0x13, 0x43, 0x20, 0x21, 0x63, 0x64, 0xff, 0xf7, 0x2f, 0xfc, 0x20, 0x00, 631 | 0xff, 0xf7, 0x08, 0xfc, 0x00, 0x20, 0x28, 0x70, 0x76, 0xbd, 0x02, 0x23, 632 | 0x19, 0x42, 0x08, 0xd0, 0x1a, 0x42, 0x06, 0xd0, 0x23, 0x68, 0x22, 0x6d, 633 | 0x9a, 0x62, 0x01, 0x23, 0x5b, 0x42, 0x23, 0x65, 0xf0, 0xe7, 0x40, 0x26, 634 | 0x0b, 0x06, 0x3b, 0xd5, 0x32, 0x42, 0x39, 0xd0, 0x01, 0x21, 0x20, 0x00, 635 | 0xff, 0xf7, 0x54, 0xfc, 0x10, 0x21, 0x20, 0x00, 0xff, 0xf7, 0x10, 0xfc, 636 | 0x63, 0x8d, 0x00, 0x2b, 0x29, 0xd0, 0x63, 0x8d, 0xff, 0x2b, 0x1b, 0xd9, 637 | 0x00, 0x23, 0xff, 0x22, 0xe1, 0x6c, 0x22, 0x85, 0x00, 0x93, 0x80, 0x23, 638 | 0x89, 0xb2, 0x5b, 0x04, 0x20, 0x00, 0xff, 0xf7, 0xe9, 0xfb, 0x63, 0x8d, 639 | 0x22, 0x8d, 0x9b, 0x1a, 0x9b, 0xb2, 0x63, 0x85, 0x23, 0x00, 0x41, 0x33, 640 | 0x1a, 0x78, 0x23, 0x68, 0x19, 0x68, 0x22, 0x2a, 0x47, 0xd1, 0x80, 0x22, 641 | 0x12, 0x02, 0x0a, 0x43, 0x1a, 0x60, 0xc1, 0xe7, 0x00, 0x23, 0x62, 0x8d, 642 | 0xe1, 0x6c, 0x92, 0xb2, 0x22, 0x85, 0x00, 0x93, 0x80, 0x23, 0xd2, 0xb2, 643 | 0x89, 0xb2, 0x9b, 0x04, 0xe0, 0xe7, 0x31, 0x00, 0x20, 0x00, 0xff, 0xf7, 644 | 0x9b, 0xfe, 0xb1, 0xe7, 0x31, 0x42, 0x33, 0xd0, 0x32, 0x42, 0x31, 0xd0, 645 | 0x26, 0x00, 0x01, 0x21, 0x20, 0x00, 0xff, 0xf7, 0x15, 0xfc, 0x41, 0x36, 646 | 0x10, 0x21, 0x20, 0x00, 0xff, 0xf7, 0xd0, 0xfb, 0x33, 0x78, 0x22, 0x3b, 647 | 0x5a, 0x42, 0x53, 0x41, 0x17, 0x4a, 0x9b, 0x02, 0x9b, 0x18, 0x62, 0x8d, 648 | 0xff, 0x2a, 0x10, 0xd9, 0xff, 0x22, 0xe1, 0x6c, 0x22, 0x85, 0x00, 0x93, 649 | 0x80, 0x23, 0x89, 0xb2, 0x5b, 0x04, 0x20, 0x00, 0xff, 0xf7, 0xa6, 0xfb, 650 | 0x63, 0x8d, 0x22, 0x8d, 0x9b, 0x1a, 0x9b, 0xb2, 0x63, 0x85, 0x32, 0x78, 651 | 0xbd, 0xe7, 0x62, 0x8d, 0xe1, 0x6c, 0x92, 0xb2, 0x22, 0x85, 0x00, 0x93, 652 | 0x80, 0x23, 0xd2, 0xb2, 0x89, 0xb2, 0x9b, 0x04, 0xeb, 0xe7, 0x80, 0x22, 653 | 0xd2, 0x01, 0xb6, 0xe7, 0x20, 0x23, 0x19, 0x42, 0x00, 0xd1, 0x77, 0xe7, 654 | 0x1a, 0x42, 0x00, 0xd1, 0x74, 0xe7, 0x20, 0x00, 0xff, 0xf7, 0xe4, 0xfe, 655 | 0x70, 0xe7, 0xc0, 0x46, 0x00, 0x20, 0x00, 0x80, 0xf7, 0xb5, 0x06, 0x00, 656 | 0x40, 0x36, 0x33, 0x78, 0x04, 0x00, 0x02, 0x20, 0x01, 0x2b, 0x15, 0xd0, 657 | 0x01, 0x23, 0x33, 0x70, 0x0f, 0x33, 0x19, 0x42, 0x11, 0xd0, 0x1a, 0x42, 658 | 0x0f, 0xd0, 0x22, 0x68, 0x20, 0x00, 0xd3, 0x61, 0x62, 0x6c, 0x0c, 0x3b, 659 | 0x13, 0x43, 0x20, 0x21, 0x63, 0x64, 0xff, 0xf7, 0x81, 0xfb, 0x20, 0x00, 660 | 0xff, 0xf7, 0x5a, 0xfb, 0x00, 0x20, 0x30, 0x70, 0xfe, 0xbd, 0x40, 0x23, 661 | 0x08, 0x06, 0x41, 0xd5, 0x1a, 0x42, 0x3f, 0xd0, 0x25, 0x68, 0x2a, 0x68, 662 | 0x9a, 0x43, 0x2a, 0x60, 0x63, 0x8d, 0x00, 0x2b, 0x2c, 0xd0, 0x69, 0x68, 663 | 0x63, 0x8d, 0x89, 0x05, 0x89, 0x0d, 0xff, 0x2b, 0x18, 0xd9, 0xff, 0x23, 664 | 0x23, 0x85, 0x80, 0x23, 0x5b, 0x04, 0x00, 0x20, 0x27, 0x8d, 0x00, 0x90, 665 | 0xfa, 0xb2, 0x20, 0x00, 0xff, 0xf7, 0x48, 0xfb, 0x63, 0x8d, 0xdb, 0x1b, 666 | 0x9b, 0xb2, 0x63, 0x85, 0x41, 0x34, 0x23, 0x78, 0x2a, 0x68, 0x22, 0x2b, 667 | 0x0f, 0xd1, 0x80, 0x23, 0x1b, 0x02, 0x13, 0x43, 0x2b, 0x60, 0xd1, 0xe7, 668 | 0x63, 0x8d, 0xe2, 0x6a, 0x23, 0x85, 0x1a, 0x4b, 0x9a, 0x42, 0x01, 0xd0, 669 | 0xe3, 0x6a, 0xe2, 0xe7, 0x80, 0x23, 0x9b, 0x04, 0xdf, 0xe7, 0x80, 0x23, 670 | 0xdb, 0x01, 0xee, 0xe7, 0x6b, 0x68, 0x9b, 0x01, 0x03, 0xd4, 0x20, 0x00, 671 | 0xff, 0xf7, 0xf7, 0xfc, 0xbc, 0xe7, 0x40, 0x21, 0x20, 0x00, 0xff, 0xf7, 672 | 0xf3, 0xfd, 0xb7, 0xe7, 0x19, 0x42, 0x12, 0xd0, 0x1a, 0x42, 0x10, 0xd0, 673 | 0x63, 0x8d, 0x00, 0x2b, 0xf3, 0xd1, 0x22, 0x68, 0x53, 0x68, 0x9b, 0x01, 674 | 0xac, 0xd4, 0xe1, 0x6a, 0x08, 0x4b, 0x99, 0x42, 0xe7, 0xd1, 0x80, 0x23, 675 | 0x51, 0x68, 0xdb, 0x01, 0x0b, 0x43, 0x53, 0x60, 0xa2, 0xe7, 0x20, 0x23, 676 | 0x19, 0x42, 0x9f, 0xd0, 0x1a, 0x42, 0x9d, 0xd0, 0x20, 0x00, 0xff, 0xf7, 677 | 0x5f, 0xfe, 0x99, 0xe7, 0x00, 0x00, 0xff, 0xff, 0x70, 0xb5, 0x80, 0x25, 678 | 0x03, 0x68, 0x6d, 0x00, 0x99, 0x69, 0x1a, 0x68, 0x29, 0x42, 0x06, 0xd0, 679 | 0x14, 0x06, 0x04, 0xd5, 0x01, 0x24, 0x46, 0x6c, 0x34, 0x43, 0x44, 0x64, 680 | 0xdd, 0x61, 0x80, 0x25, 0xed, 0x00, 0x29, 0x42, 0x06, 0xd0, 0x14, 0x06, 681 | 0x04, 0xd5, 0x08, 0x24, 0x46, 0x6c, 0x34, 0x43, 0x44, 0x64, 0xdd, 0x61, 682 | 0x80, 0x24, 0xa4, 0x00, 0x21, 0x42, 0x06, 0xd0, 0x12, 0x06, 0x04, 0xd5, 683 | 0x02, 0x22, 0x41, 0x6c, 0x0a, 0x43, 0x42, 0x64, 0xdc, 0x61, 0x0b, 0x23, 684 | 0x41, 0x6c, 0x19, 0x42, 0x01, 0xd0, 0xff, 0xf7, 0xa7, 0xfd, 0x70, 0xbd, 685 | 0xf7, 0xb5, 0x05, 0x68, 0x06, 0x00, 0x2b, 0x68, 0x41, 0x36, 0x01, 0x93, 686 | 0x20, 0x23, 0x04, 0x00, 0x30, 0x78, 0x0f, 0x00, 0x21, 0x38, 0xeb, 0x61, 687 | 0x09, 0x28, 0x0c, 0xd8, 0xfe, 0xf7, 0x54, 0xf8, 0x05, 0x53, 0x0b, 0x0b, 688 | 0x0b, 0x0b, 0x0b, 0x59, 0x05, 0x53, 0x20, 0x00, 0x42, 0x49, 0xff, 0xf7, 689 | 0x11, 0xfb, 0x21, 0x23, 0x23, 0x63, 0x80, 0x22, 0x6b, 0x68, 0x12, 0x02, 690 | 0x13, 0x43, 0x6b, 0x60, 0x6b, 0x68, 0x3e, 0x4a, 0x20, 0x00, 0x13, 0x40, 691 | 0x6b, 0x60, 0xff, 0xf7, 0x9f, 0xfa, 0x01, 0x9b, 0x5b, 0x04, 0x44, 0xd5, 692 | 0x2b, 0x68, 0x3a, 0x4a, 0x13, 0x40, 0x2b, 0x60, 0xa3, 0x6b, 0x00, 0x2b, 693 | 0x03, 0xd0, 0x1b, 0x68, 0x5b, 0x68, 0x9b, 0xb2, 0x63, 0x85, 0x04, 0x23, 694 | 0x1f, 0x42, 0x0f, 0xd0, 0x6a, 0x6a, 0x9f, 0x43, 0x63, 0x6a, 0x1a, 0x70, 695 | 0x63, 0x6a, 0x01, 0x33, 0x63, 0x62, 0x23, 0x8d, 0x00, 0x2b, 0x05, 0xd0, 696 | 0x01, 0x3b, 0x23, 0x85, 0x63, 0x8d, 0x01, 0x3b, 0x9b, 0xb2, 0x63, 0x85, 697 | 0x63, 0x8d, 0x00, 0x2b, 0x03, 0xd0, 0x04, 0x23, 0x62, 0x6c, 0x13, 0x43, 698 | 0x63, 0x64, 0x23, 0x00, 0x00, 0x22, 0x42, 0x33, 0x1a, 0x70, 0x65, 0x6c, 699 | 0x62, 0x63, 0x95, 0x42, 0x22, 0xd0, 0x20, 0x00, 0x61, 0x6c, 0xff, 0xf7, 700 | 0x4b, 0xfd, 0x33, 0x78, 0x28, 0x2b, 0x03, 0xd1, 0x39, 0x00, 0x20, 0x00, 701 | 0xff, 0xf7, 0xf6, 0xfc, 0xf7, 0xbd, 0x20, 0x00, 0x1e, 0x49, 0xff, 0xf7, 702 | 0xc3, 0xfa, 0x22, 0x23, 0xb0, 0xe7, 0x20, 0x00, 0x1c, 0x49, 0xff, 0xf7, 703 | 0xbd, 0xfa, 0x00, 0x23, 0xaa, 0xe7, 0x80, 0x22, 0x01, 0x9b, 0x12, 0x02, 704 | 0x13, 0x42, 0xc0, 0xd0, 0x2b, 0x68, 0x18, 0x4a, 0x13, 0x40, 0x2b, 0x60, 705 | 0xe3, 0x6b, 0xb4, 0xe7, 0x27, 0x00, 0xe3, 0x6a, 0x15, 0x4a, 0x40, 0x37, 706 | 0x93, 0x42, 0x0c, 0xd0, 0x20, 0x00, 0xff, 0xf7, 0x47, 0xfc, 0x20, 0x23, 707 | 0x11, 0x4a, 0x20, 0x00, 0xe2, 0x62, 0x33, 0x70, 0x25, 0x63, 0x3d, 0x70, 708 | 0xfe, 0xf7, 0x26, 0xfa, 0xd4, 0xe7, 0x20, 0x23, 0x32, 0x78, 0x20, 0x00, 709 | 0x33, 0x70, 0x25, 0x63, 0x3d, 0x70, 0x22, 0x2a, 0x02, 0xd1, 0xfe, 0xf7, 710 | 0xf7, 0xf9, 0xc9, 0xe7, 0xfe, 0xf7, 0xf2, 0xf9, 0xc6, 0xe7, 0xc0, 0x46, 711 | 0x01, 0x80, 0x00, 0x00, 0x00, 0xe8, 0x00, 0xfe, 0xff, 0xbf, 0xff, 0xff, 712 | 0x02, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0xff, 0x7f, 0xff, 0xff, 713 | 0x00, 0x00, 0xff, 0xff, 0x03, 0x00, 0xf7, 0xb5, 0x40, 0x33, 0x01, 0x93, 714 | 0x1b, 0x78, 0x04, 0x00, 0xc7, 0x6a, 0x0e, 0x00, 0x15, 0x00, 0x02, 0x20, 715 | 0x01, 0x2b, 0x3b, 0xd0, 0x01, 0x23, 0x01, 0x9a, 0x13, 0x70, 0x1f, 0x33, 716 | 0x19, 0x42, 0x04, 0xd0, 0x1d, 0x42, 0x02, 0xd0, 0x20, 0x00, 0xff, 0xf7, 717 | 0x3f, 0xff, 0x10, 0x21, 0x0e, 0x42, 0x62, 0xd0, 0x0d, 0x42, 0x60, 0xd0, 718 | 0x80, 0x23, 0x6a, 0x04, 0xd2, 0x0f, 0x10, 0x00, 0x1b, 0x02, 0x2b, 0x40, 719 | 0x18, 0x43, 0x55, 0xd0, 0xe1, 0x6b, 0x00, 0x29, 0x21, 0xd0, 0x00, 0x2b, 720 | 0x03, 0xd0, 0x0b, 0x68, 0x5b, 0x68, 0x59, 0x42, 0x4b, 0x41, 0x21, 0x00, 721 | 0xa0, 0x6b, 0x41, 0x31, 0x00, 0x28, 0x05, 0xd0, 0x00, 0x2a, 0x03, 0xd0, 722 | 0x02, 0x68, 0x52, 0x68, 0x00, 0x2a, 0x01, 0xd0, 0x01, 0x2b, 0x20, 0xd1, 723 | 0x0b, 0x78, 0x28, 0x2b, 0x0d, 0xd1, 0x80, 0x23, 0x9b, 0x04, 0x9f, 0x42, 724 | 0x09, 0xd1, 0x31, 0x00, 0x20, 0x00, 0xff, 0xf7, 0x69, 0xfc, 0x00, 0x20, 725 | 0x01, 0x9b, 0x18, 0x70, 0xfe, 0xbd, 0x0b, 0x00, 0xe1, 0xe7, 0x10, 0x22, 726 | 0x09, 0x78, 0x23, 0x68, 0xda, 0x61, 0x29, 0x29, 0xf3, 0xd1, 0x1a, 0x49, 727 | 0x8f, 0x42, 0xf0, 0xd0, 0x20, 0x00, 0xff, 0xf7, 0xc5, 0xf9, 0x20, 0x00, 728 | 0xff, 0xf7, 0xc6, 0xfb, 0xe9, 0xe7, 0x10, 0x22, 0x23, 0x68, 0xda, 0x61, 729 | 0x04, 0x23, 0x62, 0x6c, 0x13, 0x43, 0x63, 0x64, 0x08, 0x78, 0x12, 0x4b, 730 | 0xc0, 0xb2, 0x1f, 0x42, 0xdd, 0xd1, 0x21, 0x38, 0x09, 0x28, 0x08, 0xd8, 731 | 0xfd, 0xf7, 0x4e, 0xff, 0x05, 0x0c, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 732 | 0x05, 0x0c, 0x21, 0x23, 0x23, 0x63, 0x20, 0x00, 0x61, 0x6c, 0xff, 0xf7, 733 | 0x85, 0xfc, 0xcc, 0xe7, 0x22, 0x23, 0xf7, 0xe7, 0x23, 0x68, 0xd9, 0x61, 734 | 0xc7, 0xe7, 0x08, 0x23, 0x1e, 0x42, 0xc4, 0xd0, 0x1d, 0x42, 0xc2, 0xd0, 735 | 0x20, 0x00, 0xff, 0xf7, 0xdb, 0xfb, 0xbe, 0xe7, 0x00, 0x00, 0xff, 0xff, 736 | 0xff, 0xff, 0xff, 0xfe, 0x03, 0x00, 0xf7, 0xb5, 0x40, 0x33, 0x01, 0x93, 737 | 0x1b, 0x78, 0x04, 0x00, 0xc7, 0x6a, 0x0d, 0x00, 0x16, 0x00, 0x02, 0x20, 738 | 0x01, 0x2b, 0x22, 0xd0, 0x01, 0x23, 0x01, 0x9a, 0x13, 0x70, 0x1f, 0x33, 739 | 0x19, 0x42, 0x04, 0xd0, 0x1e, 0x42, 0x02, 0xd0, 0x20, 0x00, 0xff, 0xf7, 740 | 0xb5, 0xfe, 0x10, 0x23, 0x1d, 0x42, 0x33, 0xd0, 0x1e, 0x42, 0x31, 0xd0, 741 | 0x62, 0x8d, 0x00, 0x2a, 0x20, 0xd1, 0x23, 0x00, 0x41, 0x33, 0x1a, 0x78, 742 | 0x28, 0x2a, 0x0b, 0xd1, 0x80, 0x22, 0x92, 0x04, 0x97, 0x42, 0x07, 0xd1, 743 | 0x29, 0x00, 0x20, 0x00, 0xff, 0xf7, 0xf8, 0xfb, 0x00, 0x20, 0x01, 0x9b, 744 | 0x18, 0x70, 0xfe, 0xbd, 0x10, 0x22, 0x19, 0x78, 0x23, 0x68, 0xda, 0x61, 745 | 0x29, 0x29, 0xf5, 0xd1, 0x2b, 0x49, 0x8f, 0x42, 0xf2, 0xd0, 0x20, 0x00, 746 | 0xff, 0xf7, 0x56, 0xf9, 0x20, 0x00, 0xff, 0xf7, 0x57, 0xfb, 0xeb, 0xe7, 747 | 0x22, 0x68, 0xd3, 0x61, 0x04, 0x23, 0x62, 0x6c, 0x13, 0x43, 0x63, 0x64, 748 | 0x24, 0x4b, 0x1f, 0x42, 0xe2, 0xd1, 0x20, 0x00, 0x61, 0x6c, 0xff, 0xf7, 749 | 0x25, 0xfc, 0xdd, 0xe7, 0x04, 0x23, 0x1d, 0x42, 0x19, 0xd0, 0x1e, 0x42, 750 | 0x17, 0xd0, 0x63, 0x8d, 0x00, 0x2b, 0x0d, 0xd0, 0x23, 0x68, 0x5a, 0x6a, 751 | 0x63, 0x6a, 0x1a, 0x70, 0x63, 0x6a, 0x01, 0x33, 0x63, 0x62, 0x23, 0x8d, 752 | 0x01, 0x3b, 0x23, 0x85, 0x63, 0x8d, 0x01, 0x3b, 0x9b, 0xb2, 0x63, 0x85, 753 | 0x63, 0x8d, 0x00, 0x2b, 0xc4, 0xd1, 0x13, 0x4b, 0x9f, 0x42, 0xc1, 0xd0, 754 | 0xd0, 0xe7, 0x08, 0x23, 0x1d, 0x42, 0x05, 0xd0, 0x1e, 0x42, 0x03, 0xd0, 755 | 0x20, 0x00, 0xff, 0xf7, 0x63, 0xfb, 0xb7, 0xe7, 0x02, 0x23, 0x1d, 0x42, 756 | 0xb4, 0xd0, 0x1e, 0x42, 0xb2, 0xd0, 0x63, 0x8d, 0x00, 0x2b, 0x0d, 0xd0, 757 | 0x63, 0x6a, 0x22, 0x68, 0x19, 0x78, 0x01, 0x33, 0x91, 0x62, 0x63, 0x62, 758 | 0x63, 0x8d, 0x01, 0x3b, 0x9b, 0xb2, 0x63, 0x85, 0x23, 0x8d, 0x01, 0x3b, 759 | 0x23, 0x85, 0xa1, 0xe7, 0x02, 0x4b, 0x1f, 0x42, 0x9e, 0xd1, 0xad, 0xe7, 760 | 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x80, 0x6a, 0x10, 0xb5, 761 | 0x83, 0x6b, 0x00, 0x2b, 0x01, 0xd0, 0x00, 0x22, 0x9a, 0x63, 0xc3, 0x6b, 762 | 0x00, 0x2b, 0x01, 0xd0, 0x00, 0x22, 0x9a, 0x63, 0xff, 0xf7, 0xbd, 0xfb, 763 | 0x10, 0xbd, 0x00, 0x00, 0xf0, 0xb5, 0x04, 0x00, 0x41, 0x34, 0x22, 0x78, 764 | 0x03, 0x00, 0x0f, 0x00, 0x02, 0x20, 0xd6, 0xb2, 0x20, 0x2a, 0x18, 0xd1, 765 | 0x1d, 0x00, 0x40, 0x35, 0x2a, 0x78, 0x01, 0x2a, 0x13, 0xd0, 0x24, 0x22, 766 | 0x22, 0x70, 0x1b, 0x68, 0x23, 0x3a, 0x19, 0x68, 0x07, 0x48, 0x91, 0x43, 767 | 0x19, 0x60, 0x19, 0x68, 0x01, 0x40, 0x00, 0x20, 0x19, 0x60, 0x19, 0x68, 768 | 0x39, 0x43, 0x19, 0x60, 0x19, 0x68, 0x0a, 0x43, 0x1a, 0x60, 0x26, 0x70, 769 | 0x28, 0x70, 0xf0, 0xbd, 0xff, 0xef, 0xff, 0xff, 0x02, 0x00, 0xf0, 0xb5, 770 | 0x41, 0x32, 0x14, 0x78, 0x03, 0x00, 0xe5, 0xb2, 0x02, 0x20, 0x20, 0x2c, 771 | 0x17, 0xd1, 0x1c, 0x00, 0x40, 0x34, 0x26, 0x78, 0x01, 0x2e, 0x12, 0xd0, 772 | 0x22, 0x30, 0x10, 0x70, 0x1b, 0x68, 0x23, 0x38, 0x1e, 0x68, 0x07, 0x4f, 773 | 0x86, 0x43, 0x1e, 0x60, 0x1e, 0x68, 0x09, 0x02, 0x3e, 0x40, 0x31, 0x43, 774 | 0x19, 0x60, 0x19, 0x68, 0x08, 0x43, 0x18, 0x60, 0x00, 0x20, 0x15, 0x70, 775 | 0x20, 0x70, 0xf0, 0xbd, 0xff, 0xf0, 0xff, 0xff, 0x80, 0x22, 0x02, 0x4b, 776 | 0x12, 0x05, 0x9a, 0x60, 0x70, 0x47, 0xc0, 0x46, 0x00, 0xed, 0x00, 0xe0, 777 | 0x70, 0xb5, 0x04, 0x00, 0x01, 0x20, 0x00, 0x2c, 0x16, 0xd0, 0x23, 0x68, 778 | 0x12, 0x4a, 0x07, 0x26, 0x1a, 0x60, 0x12, 0x4a, 0x1a, 0x60, 0x62, 0x68, 779 | 0x5a, 0x60, 0xa2, 0x68, 0x9a, 0x60, 0xfe, 0xf7, 0x67, 0xfb, 0x05, 0x00, 780 | 0x23, 0x68, 0xda, 0x68, 0x32, 0x42, 0x06, 0xd1, 0x19, 0x69, 0xe2, 0x68, 781 | 0x91, 0x42, 0x0d, 0xd0, 0x1a, 0x61, 0x00, 0x20, 0x70, 0xbd, 0xfe, 0xf7, 782 | 0x59, 0xfb, 0x40, 0x1b, 0x31, 0x28, 0xef, 0xd9, 0x23, 0x68, 0xdb, 0x68, 783 | 0x33, 0x42, 0xeb, 0xd0, 0x03, 0x20, 0xf3, 0xe7, 0x03, 0x4a, 0x1a, 0x60, 784 | 0xef, 0xe7, 0xc0, 0x46, 0xcc, 0xcc, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 785 | 0xaa, 0xaa, 0x00, 0x00, 0x03, 0x68, 0x02, 0x4a, 0x00, 0x20, 0x1a, 0x60, 786 | 0x70, 0x47, 0xc0, 0x46, 0xaa, 0xaa, 0x00, 0x00, 0x70, 0xb5, 0x01, 0x24, 787 | 0x03, 0x6a, 0x02, 0x6a, 0xa2, 0x43, 0x02, 0x62, 0x44, 0x68, 0x12, 0x4a, 788 | 0x85, 0x69, 0x15, 0x40, 0x0a, 0x68, 0x15, 0x43, 0x02, 0x22, 0x93, 0x43, 789 | 0x8a, 0x68, 0x13, 0x43, 0x0e, 0x4a, 0x90, 0x42, 0x05, 0xd0, 0x0e, 0x4a, 790 | 0x90, 0x42, 0x02, 0xd0, 0x0d, 0x4a, 0x90, 0x42, 0x0b, 0xd1, 0x08, 0x22, 791 | 0x93, 0x43, 0xca, 0x68, 0x8e, 0x69, 0x13, 0x43, 0x04, 0x22, 0x93, 0x43, 792 | 0x09, 0x4a, 0x22, 0x40, 0x4c, 0x69, 0x34, 0x43, 0x14, 0x43, 0x4a, 0x68, 793 | 0x44, 0x60, 0x85, 0x61, 0x42, 0x63, 0x03, 0x62, 0x70, 0xbd, 0xc0, 0x46, 794 | 0x8c, 0xff, 0xfe, 0xff, 0x00, 0x2c, 0x01, 0x40, 0x00, 0x44, 0x01, 0x40, 795 | 0x00, 0x48, 0x01, 0x40, 0xff, 0xfc, 0xff, 0xff, 0x70, 0xb5, 0x17, 0x4a, 796 | 0x05, 0x6a, 0x03, 0x6a, 0x13, 0x40, 0x03, 0x62, 0x42, 0x68, 0x15, 0x4b, 797 | 0xc4, 0x69, 0x1c, 0x40, 0x0b, 0x68, 0x1c, 0x43, 0x13, 0x4b, 0x1d, 0x40, 798 | 0x8b, 0x68, 0x1b, 0x02, 0x2b, 0x43, 0x12, 0x4d, 0xa8, 0x42, 0x0e, 0xd1, 799 | 0x11, 0x4d, 0x1d, 0x40, 0xcb, 0x68, 0x1b, 0x02, 0x2b, 0x43, 0x10, 0x4d, 800 | 0x2b, 0x40, 0x10, 0x4d, 0x8e, 0x69, 0x15, 0x40, 0x4a, 0x69, 0x32, 0x43, 801 | 0x12, 0x01, 0x2a, 0x43, 0x05, 0xe0, 0x0d, 0x4d, 0xa8, 0x42, 0xf4, 0xd0, 802 | 0x0c, 0x4d, 0xa8, 0x42, 0xf1, 0xd0, 0x42, 0x60, 0x4a, 0x68, 0xc4, 0x61, 803 | 0xc2, 0x63, 0x03, 0x62, 0x70, 0xbd, 0xc0, 0x46, 0xff, 0xfe, 0xff, 0xff, 804 | 0x8c, 0xff, 0xfe, 0xff, 0xff, 0xfd, 0xff, 0xff, 0x00, 0x2c, 0x01, 0x40, 805 | 0xff, 0xf7, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 806 | 0x00, 0x44, 0x01, 0x40, 0x00, 0x48, 0x01, 0x40, 0x30, 0xb5, 0x12, 0x4a, 807 | 0x04, 0x6a, 0x03, 0x6a, 0x11, 0x4d, 0x13, 0x40, 0x03, 0x62, 0x43, 0x68, 808 | 0xc2, 0x69, 0x2a, 0x40, 0x0d, 0x68, 0x2d, 0x02, 0x15, 0x43, 0x0e, 0x4a, 809 | 0x14, 0x40, 0x8a, 0x68, 0x12, 0x03, 0x22, 0x43, 0x0c, 0x4c, 0xa0, 0x42, 810 | 0x05, 0xd0, 0x0c, 0x4c, 0xa0, 0x42, 0x02, 0xd0, 0x0b, 0x4c, 0xa0, 0x42, 811 | 0x04, 0xd1, 0x0b, 0x4c, 0x1c, 0x40, 0x4b, 0x69, 0x9b, 0x01, 0x23, 0x43, 812 | 0x43, 0x60, 0x4b, 0x68, 0xc5, 0x61, 0x03, 0x64, 0x02, 0x62, 0x30, 0xbd, 813 | 0xff, 0xef, 0xff, 0xff, 0xff, 0x8c, 0xff, 0xfe, 0xff, 0xdf, 0xff, 0xff, 814 | 0x00, 0x2c, 0x01, 0x40, 0x00, 0x44, 0x01, 0x40, 0x00, 0x48, 0x01, 0x40, 815 | 0xff, 0xbf, 0xff, 0xff, 0x70, 0xb5, 0x06, 0x6a, 0x10, 0x4c, 0x03, 0x6a, 816 | 0x10, 0x4a, 0x23, 0x40, 0x03, 0x62, 0x43, 0x68, 0x45, 0x6d, 0x15, 0x40, 817 | 0x0a, 0x68, 0x15, 0x43, 0x0d, 0x4a, 0x16, 0x40, 0x8a, 0x68, 0x12, 0x04, 818 | 0x32, 0x43, 0x0c, 0x4e, 0xb0, 0x42, 0x05, 0xd0, 0x0b, 0x4e, 0xb0, 0x42, 819 | 0x02, 0xd0, 0x0b, 0x4e, 0xb0, 0x42, 0x03, 0xd1, 0x1c, 0x40, 0x4b, 0x69, 820 | 0x1b, 0x02, 0x23, 0x43, 0x43, 0x60, 0x4b, 0x68, 0x45, 0x65, 0x83, 0x65, 821 | 0x02, 0x62, 0x70, 0xbd, 0xff, 0xff, 0xfe, 0xff, 0x8f, 0xff, 0xfe, 0xff, 822 | 0xff, 0xff, 0xfd, 0xff, 0x00, 0x2c, 0x01, 0x40, 0x00, 0x44, 0x01, 0x40, 823 | 0x00, 0x48, 0x01, 0x40, 0x30, 0xb5, 0x12, 0x4a, 0x04, 0x6a, 0x03, 0x6a, 824 | 0x11, 0x4d, 0x13, 0x40, 0x03, 0x62, 0x43, 0x68, 0x42, 0x6d, 0x2a, 0x40, 825 | 0x0d, 0x68, 0x2d, 0x02, 0x15, 0x43, 0x0e, 0x4a, 0x14, 0x40, 0x8a, 0x68, 826 | 0x12, 0x05, 0x22, 0x43, 0x0c, 0x4c, 0xa0, 0x42, 0x05, 0xd0, 0x0c, 0x4c, 827 | 0xa0, 0x42, 0x02, 0xd0, 0x0b, 0x4c, 0xa0, 0x42, 0x04, 0xd1, 0x0b, 0x4c, 828 | 0x1c, 0x40, 0x4b, 0x69, 0x9b, 0x02, 0x23, 0x43, 0x43, 0x60, 0x4b, 0x68, 829 | 0x45, 0x65, 0xc3, 0x65, 0x02, 0x62, 0x30, 0xbd, 0xff, 0xff, 0xef, 0xff, 830 | 0xff, 0x8f, 0xff, 0xfe, 0xff, 0xff, 0xdf, 0xff, 0x00, 0x2c, 0x01, 0x40, 831 | 0x00, 0x44, 0x01, 0x40, 0x00, 0x48, 0x01, 0x40, 0xff, 0xff, 0xfb, 0xff, 832 | 0xf7, 0xb5, 0x3e, 0x22, 0x03, 0x00, 0x94, 0x46, 0x1f, 0x00, 0x84, 0x44, 833 | 0x62, 0x46, 0x1e, 0x00, 0x1d, 0x00, 0x3f, 0x37, 0x10, 0x78, 0x3a, 0x78, 834 | 0x44, 0x36, 0xd2, 0xb2, 0x01, 0x92, 0x45, 0x35, 0x34, 0x78, 0x2a, 0x78, 835 | 0xc0, 0xb2, 0xe4, 0xb2, 0xd2, 0xb2, 0x00, 0x29, 0x15, 0xd1, 0x01, 0x28, 836 | 0x44, 0xd1, 0x01, 0x2c, 0x10, 0xd1, 0x02, 0x22, 0x61, 0x46, 0x0a, 0x70, 837 | 0x32, 0x70, 0x1a, 0x68, 0x11, 0x6a, 0xa1, 0x43, 0x11, 0x62, 0x11, 0x6a, 838 | 0x21, 0x43, 0x11, 0x62, 0x1a, 0x68, 0x01, 0x23, 0x00, 0x20, 0x11, 0x68, 839 | 0x0b, 0x43, 0x13, 0x60, 0xfe, 0xbd, 0x04, 0x29, 0x10, 0xd1, 0x01, 0x20, 840 | 0x01, 0x99, 0x81, 0x42, 0xf8, 0xd1, 0x82, 0x42, 0xf6, 0xd1, 0x02, 0x22, 841 | 0x10, 0x21, 0x3a, 0x70, 0x2a, 0x70, 0x1a, 0x68, 0x10, 0x6a, 0x88, 0x43, 842 | 0x10, 0x62, 0x10, 0x6a, 0x01, 0x43, 0xe4, 0xe7, 0x01, 0x28, 0x1b, 0xd1, 843 | 0x01, 0x99, 0x01, 0x29, 0xe6, 0xd1, 0x01, 0x2c, 0xe4, 0xd1, 0x01, 0x2a, 844 | 0xe2, 0xd1, 0x60, 0x46, 0x01, 0x31, 0x01, 0x70, 0x39, 0x70, 0x31, 0x70, 845 | 0x29, 0x70, 0x19, 0x68, 0x08, 0x6a, 0x90, 0x43, 0x08, 0x62, 0x08, 0x6a, 846 | 0x02, 0x43, 0x0a, 0x62, 0x10, 0x22, 0x08, 0x6a, 0x90, 0x43, 0x08, 0x62, 847 | 0x08, 0x6a, 0x02, 0x43, 0x0a, 0x62, 0xc7, 0xe7, 0x01, 0x20, 0xcb, 0xe7, 848 | 0x10, 0xb5, 0x18, 0x4c, 0x03, 0x68, 0xa0, 0x42, 0x0a, 0xd0, 0x17, 0x4a, 849 | 0x90, 0x42, 0x07, 0xd0, 0x16, 0x4a, 0x90, 0x42, 0x09, 0xd1, 0x16, 0x4a, 850 | 0x1a, 0x40, 0xcb, 0x68, 0x13, 0x43, 0x0a, 0xe0, 0x70, 0x22, 0x93, 0x43, 851 | 0x4a, 0x68, 0x13, 0x43, 0xf5, 0xe7, 0x12, 0x4a, 0x90, 0x42, 0xf2, 0xd0, 852 | 0x11, 0x4a, 0x90, 0x42, 0xef, 0xd0, 0x80, 0x22, 0x93, 0x43, 0x4a, 0x69, 853 | 0x13, 0x43, 0x03, 0x60, 0x8b, 0x68, 0xc3, 0x62, 0x0b, 0x68, 0x83, 0x62, 854 | 0xa0, 0x42, 0x05, 0xd0, 0x09, 0x4b, 0x98, 0x42, 0x02, 0xd0, 0x09, 0x4b, 855 | 0x98, 0x42, 0x01, 0xd1, 0x0b, 0x69, 0x03, 0x63, 0x01, 0x23, 0x43, 0x61, 856 | 0x10, 0xbd, 0xc0, 0x46, 0x00, 0x2c, 0x01, 0x40, 0x00, 0x04, 0x00, 0x40, 857 | 0x00, 0x20, 0x00, 0x40, 0xff, 0xfc, 0xff, 0xff, 0x00, 0x44, 0x01, 0x40, 858 | 0x00, 0x48, 0x01, 0x40, 0x70, 0xb5, 0x04, 0x00, 0x01, 0x20, 0x00, 0x2c, 859 | 0x23, 0xd0, 0x25, 0x00, 0x3d, 0x35, 0x2b, 0x78, 0xda, 0xb2, 0x00, 0x2b, 860 | 0x05, 0xd1, 0x23, 0x00, 0x3c, 0x33, 0x20, 0x00, 0x1a, 0x70, 0xfe, 0xf7, 861 | 0x03, 0xf9, 0x02, 0x23, 0x2b, 0x70, 0x20, 0x68, 0x21, 0x1d, 0xff, 0xf7, 862 | 0xab, 0xff, 0x22, 0x00, 0x01, 0x23, 0x00, 0x20, 0x48, 0x32, 0x13, 0x70, 863 | 0x47, 0x34, 0x0a, 0x3a, 0x13, 0x70, 0x53, 0x70, 0x93, 0x70, 0xd3, 0x70, 864 | 0x13, 0x71, 0x53, 0x71, 0x93, 0x71, 0xd3, 0x71, 0x13, 0x72, 0x23, 0x70, 865 | 0x2b, 0x70, 0x70, 0xbd, 0xf7, 0xb5, 0x04, 0x00, 0x0d, 0x00, 0x01, 0x20, 866 | 0x00, 0x2c, 0x47, 0xd0, 0x26, 0x00, 0x3d, 0x36, 0x33, 0x78, 0xda, 0xb2, 867 | 0x00, 0x2b, 0x05, 0xd1, 0x23, 0x00, 0x3c, 0x33, 0x20, 0x00, 0x1a, 0x70, 868 | 0xfe, 0xf7, 0xa8, 0xf8, 0x02, 0x23, 0x21, 0x00, 0x33, 0x70, 0x80, 0xc9, 869 | 0x1c, 0x4a, 0xbb, 0x68, 0x38, 0x00, 0x13, 0x40, 0xbb, 0x60, 0xff, 0xf7, 870 | 0x7b, 0xff, 0xb9, 0x68, 0x2a, 0x68, 0xbb, 0x69, 0x11, 0x43, 0x18, 0x4a, 871 | 0x01, 0x91, 0x13, 0x40, 0xaa, 0x69, 0xa9, 0x68, 0x12, 0x02, 0x0a, 0x43, 872 | 0x1a, 0x43, 0x15, 0x4b, 0x29, 0x69, 0x1a, 0x40, 0xeb, 0x69, 0x09, 0x01, 873 | 0x1b, 0x02, 0x0b, 0x43, 0xe9, 0x68, 0x38, 0x6a, 0x0b, 0x43, 0x29, 0x6a, 874 | 0x09, 0x03, 0x0b, 0x43, 0x13, 0x43, 0xaa, 0x22, 0x90, 0x43, 0x6a, 0x69, 875 | 0x6d, 0x68, 0x12, 0x01, 0x01, 0x99, 0x2a, 0x43, 0x02, 0x43, 0xb9, 0x60, 876 | 0xbb, 0x61, 0x3a, 0x62, 0x22, 0x00, 0x01, 0x23, 0x00, 0x20, 0x48, 0x32, 877 | 0x13, 0x70, 0x45, 0x34, 0x0a, 0x3a, 0x13, 0x70, 0x53, 0x70, 0x93, 0x71, 878 | 0x23, 0x70, 0x33, 0x70, 0xfe, 0xbd, 0xc0, 0x46, 0xf8, 0xbf, 0xfe, 0xff, 879 | 0xfc, 0xfc, 0xff, 0xff, 0x03, 0x03, 0xff, 0xff, 0x10, 0x22, 0x70, 0xb5, 880 | 0x05, 0x6a, 0x03, 0x6a, 0x16, 0x4c, 0x93, 0x43, 0x03, 0x62, 0x42, 0x68, 881 | 0x83, 0x69, 0x23, 0x40, 0x0c, 0x68, 0x24, 0x02, 0x1c, 0x43, 0x20, 0x23, 882 | 0x9d, 0x43, 0x8b, 0x68, 0x1b, 0x01, 0x2b, 0x43, 0x10, 0x4d, 0xa8, 0x42, 883 | 0x0f, 0xd1, 0x80, 0x25, 0xab, 0x43, 0x1e, 0x00, 0xcb, 0x68, 0x40, 0x3d, 884 | 0x1b, 0x01, 0x33, 0x43, 0xab, 0x43, 0x0c, 0x4d, 0x8e, 0x69, 0x15, 0x40, 885 | 0x4a, 0x69, 0x32, 0x43, 0x92, 0x00, 0x2a, 0x43, 0x05, 0xe0, 0x09, 0x4d, 886 | 0xa8, 0x42, 0xf4, 0xd0, 0x08, 0x4d, 0xa8, 0x42, 0xf1, 0xd0, 0x42, 0x60, 887 | 0x4a, 0x68, 0x84, 0x61, 0x82, 0x63, 0x03, 0x62, 0x70, 0xbd, 0xc0, 0x46, 888 | 0xff, 0x8c, 0xff, 0xfe, 0x00, 0x2c, 0x01, 0x40, 0xff, 0xf3, 0xff, 0xff, 889 | 0x00, 0x44, 0x01, 0x40, 0x00, 0x48, 0x01, 0x40, 0xf8, 0xb5, 0x07, 0x00, 890 | 0x3c, 0x37, 0x15, 0x00, 0x3a, 0x78, 0x03, 0x00, 0x0c, 0x00, 0x02, 0x20, 891 | 0x01, 0x2a, 0x0c, 0xd0, 0x01, 0x38, 0x38, 0x70, 0x0c, 0x2d, 0x51, 0xd0, 892 | 0x08, 0xd8, 0x04, 0x2d, 0x2d, 0xd0, 0x08, 0x2d, 0x3c, 0xd0, 0x00, 0x2d, 893 | 0x17, 0xd0, 0x00, 0x23, 0x3b, 0x70, 0xf8, 0xbd, 0x10, 0x2d, 0x58, 0xd0, 894 | 0x14, 0x2d, 0xf8, 0xd1, 0x1d, 0x68, 0x28, 0x00, 0xff, 0xf7, 0x52, 0xfe, 895 | 0x80, 0x23, 0x6a, 0x6d, 0x1b, 0x01, 0x13, 0x43, 0x6b, 0x65, 0x6b, 0x6d, 896 | 0x2e, 0x4a, 0x13, 0x40, 0x6b, 0x65, 0x23, 0x69, 0x6a, 0x6d, 0x1b, 0x02, 897 | 0x53, 0xe0, 0x1d, 0x68, 0x28, 0x00, 0xff, 0xf7, 0x65, 0xfd, 0x08, 0x23, 898 | 0xaa, 0x69, 0x13, 0x43, 0x04, 0x22, 0xab, 0x61, 0xab, 0x69, 0x93, 0x43, 899 | 0xab, 0x61, 0xab, 0x69, 0x22, 0x69, 0x13, 0x43, 0xab, 0x61, 0x00, 0x20, 900 | 0xd5, 0xe7, 0x1d, 0x68, 0x28, 0x00, 0xff, 0xf7, 0x81, 0xff, 0x80, 0x23, 901 | 0xaa, 0x69, 0x1b, 0x01, 0x13, 0x43, 0xab, 0x61, 0xab, 0x69, 0x1d, 0x4a, 902 | 0x13, 0x40, 0xab, 0x61, 0x23, 0x69, 0xaa, 0x69, 0x1b, 0x02, 0xea, 0xe7, 903 | 0x1e, 0x68, 0x30, 0x00, 0xff, 0xf7, 0x78, 0xfd, 0x04, 0x22, 0xf3, 0x69, 904 | 0x1d, 0x43, 0xf5, 0x61, 0xf3, 0x69, 0x93, 0x43, 0xf3, 0x61, 0xf3, 0x69, 905 | 0x22, 0x69, 0x13, 0x43, 0xf3, 0x61, 0xdc, 0xe7, 0x1d, 0x68, 0x28, 0x00, 906 | 0xff, 0xf7, 0xaa, 0xfd, 0x80, 0x23, 0xea, 0x69, 0x1b, 0x01, 0x13, 0x43, 907 | 0xeb, 0x61, 0xeb, 0x69, 0x0c, 0x4a, 0x13, 0x40, 0xeb, 0x61, 0x23, 0x69, 908 | 0xea, 0x69, 0x1b, 0x02, 0x13, 0x43, 0xeb, 0x61, 0xc9, 0xe7, 0x1d, 0x68, 909 | 0x28, 0x00, 0xff, 0xf7, 0xcb, 0xfd, 0x08, 0x23, 0x6a, 0x6d, 0x13, 0x43, 910 | 0x04, 0x22, 0x6b, 0x65, 0x6b, 0x6d, 0x93, 0x43, 0x6b, 0x65, 0x6b, 0x6d, 911 | 0x22, 0x69, 0x13, 0x43, 0x6b, 0x65, 0xb8, 0xe7, 0xff, 0xfb, 0xff, 0xff, 912 | 0x1f, 0x23, 0x10, 0xb5, 0x01, 0x24, 0x19, 0x40, 0x8c, 0x40, 0x8a, 0x40, 913 | 0x03, 0x6a, 0xa3, 0x43, 0x03, 0x62, 0x03, 0x6a, 0x1a, 0x43, 0x02, 0x62, 914 | 0x10, 0xbd, 0x00, 0x00, 0x02, 0x00, 0x10, 0xb5, 0x08, 0x29, 0x1c, 0xd0, 915 | 0x06, 0xd8, 0x00, 0x29, 0x0b, 0xd0, 0x04, 0x29, 0x14, 0xd0, 0x13, 0x00, 916 | 0x43, 0x33, 0x08, 0xe0, 0x0c, 0x29, 0x15, 0xd0, 0x10, 0x29, 0xf8, 0xd1, 917 | 0x03, 0x00, 0x42, 0x33, 0x01, 0xe0, 0x03, 0x00, 0x3e, 0x33, 0x1b, 0x78, 918 | 0x01, 0x3b, 0x58, 0x1e, 0x83, 0x41, 0xdb, 0xb2, 0x01, 0x20, 0x00, 0x2b, 919 | 0x09, 0xd0, 0x10, 0xbd, 0x03, 0x00, 0x3f, 0x33, 0xf3, 0xe7, 0x03, 0x00, 920 | 0x40, 0x33, 0xf0, 0xe7, 0x03, 0x00, 0x41, 0x33, 0xed, 0xe7, 0x02, 0x23, 921 | 0x08, 0x29, 0x30, 0xd0, 0x06, 0xd8, 0x00, 0x29, 0x0b, 0xd0, 0x04, 0x29, 922 | 0x28, 0xd0, 0x10, 0x00, 0x43, 0x30, 0x08, 0xe0, 0x0c, 0x29, 0x29, 0xd0, 923 | 0x10, 0x29, 0xf8, 0xd1, 0x10, 0x00, 0x42, 0x30, 0x01, 0xe0, 0x10, 0x00, 924 | 0x3e, 0x30, 0x03, 0x70, 0x14, 0x68, 0x01, 0x22, 0x20, 0x00, 0xff, 0xf7, 925 | 0xb1, 0xff, 0x16, 0x4a, 0x94, 0x42, 0x05, 0xd0, 0x15, 0x4b, 0x9c, 0x42, 926 | 0x02, 0xd0, 0x15, 0x4b, 0x9c, 0x42, 0x16, 0xd1, 0x80, 0x23, 0x61, 0x6c, 927 | 0x1b, 0x02, 0x0b, 0x43, 0x63, 0x64, 0x94, 0x42, 0x12, 0xd1, 0xa3, 0x68, 928 | 0x10, 0x4a, 0x13, 0x40, 0x06, 0x2b, 0x12, 0xd1, 0x00, 0x20, 0xc4, 0xe7, 929 | 0x10, 0x00, 0x3f, 0x30, 0xdf, 0xe7, 0x10, 0x00, 0x40, 0x30, 0xdc, 0xe7, 930 | 0x10, 0x00, 0x41, 0x30, 0xd9, 0xe7, 0x0a, 0x4b, 0x9c, 0x42, 0xec, 0xd0, 931 | 0x01, 0x23, 0x22, 0x68, 0x13, 0x43, 0x23, 0x60, 0xec, 0xe7, 0x80, 0x22, 932 | 0x52, 0x02, 0x93, 0x42, 0xf6, 0xd1, 0xe7, 0xe7, 0x00, 0x2c, 0x01, 0x40, 933 | 0x00, 0x44, 0x01, 0x40, 0x00, 0x48, 0x01, 0x40, 0x07, 0x00, 0x01, 0x00, 934 | 0x00, 0x04, 0x00, 0x40, 0x10, 0xb5, 0xff, 0xf7, 0x85, 0xff, 0x10, 0xbd, 935 | 0x70, 0xb5, 0x05, 0x68, 0x00, 0x22, 0x04, 0x00, 0x28, 0x00, 0x0e, 0x00, 936 | 0xff, 0xf7, 0x6e, 0xff, 0x1c, 0x4b, 0x1d, 0x4a, 0x9d, 0x42, 0x05, 0xd0, 937 | 0x1c, 0x4b, 0x9d, 0x42, 0x02, 0xd0, 0x1c, 0x4b, 0x9d, 0x42, 0x0a, 0xd1, 938 | 0x2b, 0x6a, 0x13, 0x42, 0x07, 0xd1, 0x29, 0x6a, 0x19, 0x4b, 0x19, 0x42, 939 | 0x03, 0xd1, 0x6b, 0x6c, 0x18, 0x49, 0x0b, 0x40, 0x6b, 0x64, 0x2b, 0x6a, 940 | 0x13, 0x42, 0x07, 0xd1, 0x2a, 0x6a, 0x14, 0x4b, 0x1a, 0x42, 0x03, 0xd1, 941 | 0x01, 0x22, 0x2b, 0x68, 0x93, 0x43, 0x2b, 0x60, 0x01, 0x23, 0x08, 0x2e, 942 | 0x12, 0xd0, 0x05, 0xd8, 0x00, 0x2e, 0x09, 0xd0, 0x04, 0x2e, 0x0b, 0xd0, 943 | 0x43, 0x34, 0x06, 0xe0, 0x0c, 0x2e, 0x0b, 0xd0, 0x10, 0x2e, 0xf9, 0xd1, 944 | 0x42, 0x34, 0x00, 0xe0, 0x3e, 0x34, 0x00, 0x20, 0x23, 0x70, 0x70, 0xbd, 945 | 0x3f, 0x34, 0xfa, 0xe7, 0x40, 0x34, 0xf8, 0xe7, 0x41, 0x34, 0xf6, 0xe7, 946 | 0x00, 0x2c, 0x01, 0x40, 0x11, 0x11, 0x00, 0x00, 0x00, 0x44, 0x01, 0x40, 947 | 0x00, 0x48, 0x01, 0x40, 0x44, 0x04, 0x00, 0x00, 0xff, 0x7f, 0xff, 0xff, 948 | 0x10, 0xb5, 0xff, 0xf7, 0xaf, 0xff, 0x10, 0xbd, 0xf0, 0xb5, 0x04, 0x00, 949 | 0x02, 0x22, 0x3c, 0x34, 0x25, 0x78, 0x03, 0x00, 0x10, 0x00, 0x01, 0x2d, 950 | 0x1f, 0xd0, 0x1d, 0x00, 0x3d, 0x35, 0x2a, 0x70, 0x1a, 0x68, 0x0e, 0x4e, 951 | 0x53, 0x68, 0x90, 0x68, 0xb2, 0x42, 0x03, 0xd1, 0x0c, 0x4f, 0x3b, 0x40, 952 | 0x4f, 0x68, 0x3b, 0x43, 0x70, 0x27, 0xbb, 0x43, 0x0f, 0x68, 0x3b, 0x43, 953 | 0x53, 0x60, 0xb2, 0x42, 0x02, 0xd0, 0x08, 0x4b, 0x9a, 0x42, 0x04, 0xd1, 954 | 0x80, 0x23, 0x98, 0x43, 0x8b, 0x68, 0x18, 0x43, 0x90, 0x60, 0x01, 0x23, 955 | 0x00, 0x20, 0x2b, 0x70, 0x20, 0x70, 0xf0, 0xbd, 0x00, 0x2c, 0x01, 0x40, 956 | 0xff, 0xff, 0x0f, 0xff, 0x00, 0x04, 0x00, 0x40, 0x10, 0xb5, 0x04, 0x00, 957 | 0x3c, 0x34, 0x23, 0x78, 0x02, 0x00, 0x02, 0x20, 0x01, 0x2b, 0x39, 0xd0, 958 | 0x1d, 0x48, 0xcb, 0x68, 0x12, 0x68, 0x03, 0x40, 0x88, 0x68, 0x03, 0x43, 959 | 0x1b, 0x48, 0x03, 0x40, 0x48, 0x68, 0x03, 0x43, 0x1a, 0x48, 0x03, 0x40, 960 | 0x08, 0x68, 0x03, 0x43, 0x19, 0x48, 0x03, 0x40, 0x08, 0x69, 0x03, 0x43, 961 | 0x18, 0x48, 0x03, 0x40, 0x48, 0x69, 0x03, 0x43, 0x17, 0x48, 0x03, 0x40, 962 | 0x08, 0x6b, 0x03, 0x43, 0x16, 0x48, 0x03, 0x40, 0x88, 0x69, 0x00, 0x04, 963 | 0x03, 0x43, 0x15, 0x48, 0x82, 0x42, 0x14, 0xd1, 0x14, 0x48, 0x18, 0x40, 964 | 0xcb, 0x69, 0x18, 0x43, 0x13, 0x4b, 0x18, 0x40, 0x8b, 0x6a, 0x1b, 0x05, 965 | 0x03, 0x43, 0x12, 0x48, 0x03, 0x40, 0x08, 0x6a, 0x03, 0x43, 0x11, 0x48, 966 | 0x03, 0x40, 0x48, 0x6a, 0xc9, 0x6a, 0x03, 0x43, 0x0f, 0x48, 0x03, 0x40, 967 | 0x0b, 0x43, 0x00, 0x20, 0x53, 0x64, 0x20, 0x70, 0x10, 0xbd, 0xc0, 0x46, 968 | 0xff, 0xfc, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 969 | 0xff, 0xef, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 970 | 0xff, 0xff, 0xf0, 0xff, 0x00, 0x2c, 0x01, 0x40, 0xff, 0xff, 0xff, 0xef, 971 | 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfd, 972 | 0xff, 0xff, 0xff, 0xdf, 0x0d, 0x48, 0x85, 0x46, 0xff, 0xf7, 0x60, 0xfb, 973 | 0x00, 0x21, 0x03, 0xe0, 0x0b, 0x4b, 0x5b, 0x58, 0x43, 0x50, 0x04, 0x31, 974 | 0x0a, 0x48, 0x0b, 0x4b, 0x42, 0x18, 0x9a, 0x42, 0xf6, 0xd3, 0x0a, 0x4a, 975 | 0x02, 0xe0, 0x00, 0x23, 0x13, 0x60, 0x04, 0x32, 0x08, 0x4b, 0x9a, 0x42, 976 | 0xf9, 0xd3, 0x00, 0xf0, 0x19, 0xf8, 0xfd, 0xf7, 0x11, 0xfc, 0xfe, 0xe7, 977 | 0x00, 0x18, 0x00, 0x20, 0xd4, 0x2e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 978 | 0x0c, 0x00, 0x00, 0x20, 0x0c, 0x00, 0x00, 0x20, 0x7c, 0x01, 0x00, 0x20, 979 | 0xfe, 0xe7, 0x03, 0x00, 0x82, 0x18, 0x93, 0x42, 0x00, 0xd1, 0x70, 0x47, 980 | 0x19, 0x70, 0x01, 0x33, 0xf9, 0xe7, 0x00, 0x00, 0x70, 0xb5, 0x00, 0x26, 981 | 0x0c, 0x4c, 0x0d, 0x4d, 0x64, 0x1b, 0xa4, 0x10, 0xa6, 0x42, 0x09, 0xd1, 982 | 0x00, 0x26, 0x00, 0xf0, 0x23, 0xf8, 0x0a, 0x4c, 0x0a, 0x4d, 0x64, 0x1b, 983 | 0xa4, 0x10, 0xa6, 0x42, 0x05, 0xd1, 0x70, 0xbd, 0xb3, 0x00, 0xeb, 0x58, 984 | 0x98, 0x47, 0x01, 0x36, 0xee, 0xe7, 0xb3, 0x00, 0xeb, 0x58, 0x98, 0x47, 985 | 0x01, 0x36, 0xf2, 0xe7, 0xcc, 0x2e, 0x00, 0x08, 0xcc, 0x2e, 0x00, 0x08, 986 | 0xd0, 0x2e, 0x00, 0x08, 0xcc, 0x2e, 0x00, 0x08, 0x00, 0x23, 0x10, 0xb5, 987 | 0x9a, 0x42, 0x00, 0xd1, 0x10, 0xbd, 0xcc, 0x5c, 0xc4, 0x54, 0x01, 0x33, 988 | 0xf8, 0xe7, 0x00, 0x00, 0xf8, 0xb5, 0xc0, 0x46, 0xf8, 0xbc, 0x08, 0xbc, 989 | 0x9e, 0x46, 0x70, 0x47, 0xf8, 0xb5, 0xc0, 0x46, 0xf8, 0xbc, 0x08, 0xbc, 990 | 0x9e, 0x46, 0x70, 0x47, 0x80, 0x22, 0x0c, 0x4b, 0x30, 0xb5, 0x5c, 0x69, 991 | 0xd2, 0x02, 0x22, 0x43, 0x5a, 0x61, 0xef, 0xf3, 0x10, 0x82, 0x72, 0xb6, 992 | 0x4c, 0x1c, 0xff, 0x34, 0x40, 0x1a, 0x0d, 0x68, 0x45, 0x50, 0x04, 0x31, 993 | 0xa1, 0x42, 0xfa, 0xd1, 0x80, 0x21, 0x49, 0x02, 0x18, 0x69, 0x08, 0x42, 994 | 0xfc, 0xd1, 0x82, 0xf3, 0x10, 0x88, 0x30, 0xbd, 0x00, 0x20, 0x02, 0x40, 995 | 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 996 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 997 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 998 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 999 | 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 1000 | 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 1001 | 0x09, 0x00, 0x00, 0x00, 0x8d, 0x01, 0x00, 0x08, 0x65, 0x01, 0x00, 0x08, 1002 | 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xdc, 0x02, 1003 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1004 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1005 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1006 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1007 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1008 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1009 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1010 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1011 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1012 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1013 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1014 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1015 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1016 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1017 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1018 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1019 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1020 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1021 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1022 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1023 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1024 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1025 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1026 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1027 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1028 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1029 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1030 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1031 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1032 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1033 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1034 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1035 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1036 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1037 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1038 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1039 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1040 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1041 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1042 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1043 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1044 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1045 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1046 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1047 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1048 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1049 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1050 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1051 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1052 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1053 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1054 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1055 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1056 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1057 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1058 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1059 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1060 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1061 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1062 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1063 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1064 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1065 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1066 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1067 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1068 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1069 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1070 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1071 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1072 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1073 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1074 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1075 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1076 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1077 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1078 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1079 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1080 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1081 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1082 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1083 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1084 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1085 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1086 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1087 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1088 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1089 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1090 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1091 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1092 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1093 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1094 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1095 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1096 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1097 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1098 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1099 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1100 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1101 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1102 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1103 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1104 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1105 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1106 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1107 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1108 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1109 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1110 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1111 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1112 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1113 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1114 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1115 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1116 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1117 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1118 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1119 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1120 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1121 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1122 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1123 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1124 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1125 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1126 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1127 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1128 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1129 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1130 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1131 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1132 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1133 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1134 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1135 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1136 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1137 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1138 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1139 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1140 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1141 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1142 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1143 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1144 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1145 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1146 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1147 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1148 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1149 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1150 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1151 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1152 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1153 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1154 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1155 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1156 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1157 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1158 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1159 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1160 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1161 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1162 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1163 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1164 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1165 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1166 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1167 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1168 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1169 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1170 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1171 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1172 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1173 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1174 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1175 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1176 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1177 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1178 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1179 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1180 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1181 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1182 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1183 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1184 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1185 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1186 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1187 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1188 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1189 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1190 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1191 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1192 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1193 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1194 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1195 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1196 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1197 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1198 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1199 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1200 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1201 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1202 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1203 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1204 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1205 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1206 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1207 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1208 | 0x00, 0x00, 0x00, 0x00 1209 | }; 1210 | unsigned int node_base_bin_len = 14464; 1211 | --------------------------------------------------------------------------------