what is ᴏɴᴇʙɪᴛ:ɢᴀʟʟᴇʀʏ?
As you might already guessed, OBG is all about digital pixel art. The OBG is the most minimalist and therefore most sustainable gallery for digital art worldwide.
minimalistic constraints
The OBG is characterized by its very harsh restrictions. – Monochrome e-ink displays serve as a stage only in 1-bit pixel graphics format with a resolution of 480 × 800 pixels. The showroom is limited to these bespoke e-ink devices that can be installed on different occasions. The devices themselves consume only small amounts of energy and can be operated independently of the mains with various energy generation modules such as solar or mechanical cranks.
Why?
You may have wondered – why all these restrictions? Contemporary digital art often comes with lavish infrastructure – imagine the big screens, projectors, LED walls, powerful computers and sensors. This often emphasizes the technology itself or the spectacle around it rather than the actual artistic position behind it. The seemingly endless possibilities of the digital world rarely benefit artistic works, due to technological challenges or their raw complexity. The OBG is purely digital and offers its participating artists a very limited creative space to work with. Advantageously, these restrictions can be quickly classified by both the artist and the audience, with one effect: the artistic message becomes central and prominent.
Another agenda of the OBG is the focus on bringing sustainability and the digital world into friction as often as possible – as they often separate from each other.
The gallery frame
The OBG framework was designed with low power/no battery and minimal waste of resources in mind. Each frame is custom built from interchangeable off-the-shelf electronics, using all open source code. With optional modules, we can harvest energy from sunlight or pure mechanical movement to work off-grid. In further development we plan to include energy harvesting as an interaction with the system itself – for example turning a crank or sunbathing for the calculation. Since we are dealing with minimal amounts of harvested electrical energy here, we use e-ink as a visual representation for the artworks as they remain deployed even when electricity is not available.
simple schematics for the console
calling input data from the web
#include <Arduino.h> const unsigned char BUNNY [] PROGMEM = { 0xf3, 0x9f, 0xf3, 0x9f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xec, 0x6f, 0xec, 0x6f, 0xef, 0xef, 0xef, 0xef, 0xdb, 0xb7, 0xdf, 0xf7, 0xdb, 0xb7, 0xd3, 0x97, 0xdb, 0xb7, 0xdb, 0xd7, 0xdf, 0xf7, 0xdf, 0xf7, 0xef, 0xef, 0xef, 0xef, 0xf0, 0x17, 0xf0, 0x13, 0xe7, 0xab, 0xe7, 0x8d, 0xd5, 0xab, 0xd5, 0xad, 0xd5, 0xb7, 0xd5, 0xbb, 0xe0, 0x0f, 0xe0, 0x07, 0xc9, 0xff, 0xc9, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0x7f, 0x7f, 0x7f, 0x7f, 0x5b, 0xbf, 0x7f, 0xbf, 0x5b, 0xbf, 0x13, 0xbf, 0x5b, 0xb7, 0x5b, 0xb7, 0x7f, 0x2b, 0x7f, 0x2b, 0xfe, 0x9b, 0xfe, 0x9b, 0xc1, 0xf7, 0xc1, 0xf7, 0xdb, 0xf7, 0xdb, 0xf7, 0xdb, 0x37, 0xdb, 0x37, 0xb6, 0xef, 0xb6, 0xef, 0xc0, 0x1f, 0xc0, 0x1f }; const unsigned char HOUSE [] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x28, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x28, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x28, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf4, 0x28, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x94, 0x28, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x0c, 0x15, 0x28, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x82, 0x70, 0x14, 0xe8, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0xc0, 0x14, 0x28, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x07, 0x04, 0x22, 0x28, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x60, 0x18, 0x01, 0x00, 0x2b, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf9, 0x80, 0x76, 0x00, 0x40, 0x28, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x03, 0x91, 0xc2, 0x10, 0x44, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x0c, 0x10, 0x70, 0x04, 0x00, 0xac, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xb0, 0x10, 0x0c, 0x01, 0x00, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xc0, 0x37, 0x03, 0x00, 0x41, 0x10, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xe0, 0xd1, 0xc0, 0xc0, 0x10, 0x03, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xf7, 0xf3, 0x10, 0x30, 0x30, 0x00, 0x0c, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xfb, 0xfc, 0x14, 0x0e, 0x0e, 0x08, 0x30, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfd, 0xfc, 0x13, 0x00, 0x03, 0x82, 0xc1, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xfd, 0xfe, 0xfe, 0x10, 0xe0, 0x00, 0xe3, 0x96, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xfe, 0xff, 0x7f, 0x18, 0x18, 0x00, 0x1c, 0x18, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x7f, 0xbf, 0x88, 0x06, 0x00, 0x10, 0x00, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xe7, 0xff, 0xff, 0xbf, 0xdf, 0xd8, 0x01, 0x00, 0x10, 0x03, 0x58, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xdf, 0xfd, 0xff, 0xdf, 0xef, 0xee, 0x00, 0x00, 0x10, 0x0c, 0x46, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xdf, 0xfe, 0xff, 0xef, 0xf7, 0xf1, 0x80, 0x00, 0x10, 0x30, 0x41, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xef, 0xff, 0x7f, 0xf7, 0xfb, 0xf8, 0x60, 0x00, 0x10, 0x41, 0x40, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xbf, 0xfb, 0xfd, 0xfc, 0x18, 0x00, 0x11, 0x02, 0xf0, 0x18, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xbf, 0xff, 0xdf, 0xfd, 0xfe, 0xfe, 0x06, 0x00, 0x08, 0x01, 0x8c, 0x06, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x5f, 0xff, 0xef, 0xfe, 0xff, 0x7f, 0x01, 0x80, 0x08, 0x07, 0x03, 0x01, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x2f, 0xff, 0xf7, 0xff, 0x7f, 0xbf, 0x80, 0x60, 0x08, 0x0c, 0x00, 0xc0, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0xd7, 0xff, 0xfb, 0xff, 0xbf, 0xdf, 0xc0, 0x18, 0x08, 0x30, 0x30, 0x30, 0x18, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x03, 0x0b, 0xff, 0xfd, 0xff, 0xdf, 0xff, 0xe0, 0x07, 0x08, 0xc0, 0x30, 0x0c, 0x06, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0x05, 0xff, 0xfe, 0xff, 0xef, 0xff, 0xb0, 0x01, 0xcb, 0x00, 0x30, 0x03, 0x01, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x32, 0xff, 0xff, 0x7f, 0xf7, 0xfe, 0x78, 0x00, 0x64, 0x10, 0x48, 0x00, 0xc0, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0xc0, 0xc5, 0x7f, 0xff, 0xbf, 0xff, 0xff, 0xf2, 0x00, 0x18, 0x28, 0x48, 0x00, 0x30, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x03, 0x03, 0x04, 0xbf, 0xff, 0xdf, 0xff, 0xff, 0xe8, 0x00, 0x00, 0x38, 0x58, 0x00, 0x0c, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0d, 0xdf, 0xff, 0xef, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x28, 0x58, 0x00, 0x02, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x30, 0x15, 0x6f, 0xff, 0xf7, 0xff, 0xfe, 0x54, 0x00, 0x00, 0x44, 0x58, 0x00, 0x03, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0x2d, 0xf7, 0xff, 0xfb, 0xff, 0xf8, 0x80, 0x00, 0x00, 0x5c, 0x48, 0xf0, 0x0c, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x81, 0x03, 0x00, 0x57, 0xcb, 0xff, 0xff, 0xff, 0xf2, 0x00, 0x00, 0x00, 0x54, 0x4f, 0xf0, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x8c, 0x00, 0xaf, 0x35, 0xff, 0xff, 0xff, 0x88, 0xa0, 0x00, 0x00, 0x44, 0x3f, 0xe0, 0xc7, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x70, 0x02, 0x02, 0xaa, 0xff, 0xff, 0xff, 0x50, 0x00, 0x00, 0x00, 0x5c, 0x0f, 0x03, 0x1c, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x29, 0x55, 0x7f, 0xff, 0xfc, 0x80, 0x00, 0x00, 0x00, 0x38, 0x00, 0x0c, 0x70, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x06, 0x00, 0x00, 0x28, 0xbf, 0xff, 0xf2, 0x40, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x31, 0x80, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0xc1, 0x80, 0x01, 0x14, 0x5f, 0xff, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe0, 0xc6, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x30, 0x60, 0x00, 0x02, 0x2d, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc3, 0x18, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0xac, 0x18, 0x00, 0x10, 0x96, 0x1e, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x0c, 0x60, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x03, 0x06, 0x00, 0x00, 0x0b, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x31, 0x80, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0xa0, 0xc1, 0x80, 0x00, 0x05, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xc6, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x30, 0x60, 0x00, 0x02, 0xc1, 0x55, 0x40, 0x00, 0x00, 0x00, 0x03, 0x18, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x0c, 0x18, 0x00, 0x01, 0x05, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x0c, 0x60, 0x1e, 0x40, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x03, 0x06, 0x00, 0x00, 0x0f, 0x00, 0x34, 0x00, 0x00, 0x00, 0x31, 0x80, 0x20, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x80, 0x00, 0xc1, 0x80, 0x00, 0x28, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x4f, 0x90, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x30, 0x60, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x03, 0x18, 0x00, 0xbf, 0xc0, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x0c, 0x18, 0x00, 0x60, 0x00, 0x01, 0x40, 0x00, 0x0c, 0x60, 0x01, 0x7f, 0xe0, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x03, 0x06, 0x00, 0x40, 0x00, 0x00, 0x80, 0x00, 0x31, 0x80, 0x02, 0x7f, 0xd0, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xc1, 0x81, 0x80, 0x00, 0x00, 0xa0, 0x00, 0xce, 0x00, 0x00, 0xff, 0xd0, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x30, 0x70, 0x80, 0x00, 0x00, 0x40, 0x03, 0x38, 0x00, 0x02, 0xff, 0xd4, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0c, 0x1b, 0x06, 0x00, 0x18, 0x50, 0x0c, 0xe0, 0x00, 0x00, 0xff, 0xd0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x11, 0x0f, 0x00, 0x3c, 0x20, 0x33, 0x80, 0x00, 0x02, 0xff, 0xd4, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x09, 0xe0, 0x00, 0xc6, 0x0b, 0x00, 0x2c, 0x30, 0xcc, 0x00, 0x00, 0x02, 0xff, 0xd0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x72, 0x0b, 0x00, 0x2c, 0x2f, 0x30, 0x07, 0x90, 0x02, 0xff, 0xd4, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x27, 0xc8, 0x00, 0x56, 0x0b, 0x00, 0x2c, 0x14, 0xc0, 0x08, 0x00, 0x02, 0xff, 0xd0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x0f, 0xf4, 0xc0, 0x12, 0x0f, 0x00, 0x3c, 0x1f, 0x00, 0x13, 0xe4, 0x02, 0xff, 0xd0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x1f, 0xfa, 0x00, 0x56, 0x0f, 0x00, 0x3c, 0x10, 0x00, 0x2f, 0xf0, 0x0a, 0xff, 0xd4, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x2f, 0xf9, 0x00, 0x52, 0x0f, 0x00, 0x3c, 0x19, 0x00, 0x5f, 0xf8, 0x02, 0xff, 0xd4, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x2f, 0xfc, 0x40, 0x56, 0x06, 0x00, 0x18, 0x15, 0x00, 0x9f, 0xf4, 0x0a, 0xff, 0x94, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0xaf, 0xfd, 0x00, 0x12, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x3f, 0xf4, 0x02, 0xfe, 0xd4, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x2f, 0xfc, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x15, 0x00, 0xbf, 0xf5, 0x0a, 0xfb, 0x54, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xaf, 0xfd, 0x00, 0x56, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x3f, 0xf4, 0x02, 0xec, 0x54, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x2f, 0xfd, 0x00, 0x11, 0x03, 0x80, 0x38, 0x35, 0x00, 0xbf, 0xf5, 0x02, 0x31, 0x54, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xaf, 0xfd, 0x00, 0x13, 0x0e, 0x00, 0x0e, 0x2d, 0x00, 0xbf, 0xf4, 0x02, 0xc4, 0xd4, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x2f, 0xfd, 0x00, 0x19, 0x02, 0x00, 0x08, 0x35, 0x00, 0xbf, 0xf5, 0x02, 0x93, 0x34, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x2f, 0xfd, 0x00, 0x50, 0x82, 0x00, 0x08, 0x65, 0x00, 0xbf, 0xf4, 0x02, 0xcc, 0xc4, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xaf, 0xfd, 0x40, 0x51, 0x81, 0x00, 0x10, 0x75, 0x00, 0xbf, 0xf4, 0x02, 0xb3, 0x18, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xaf, 0xfd, 0x00, 0x58, 0x40, 0x80, 0x20, 0x5d, 0x02, 0xbf, 0xf5, 0x02, 0xcc, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xa3, 0xfd, 0x40, 0x50, 0x40, 0x60, 0xc0, 0xe5, 0x00, 0xbf, 0xf5, 0x02, 0xb0, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xac, 0xfd, 0x00, 0x10, 0x20, 0x1f, 0x01, 0xe5, 0x02, 0xbf, 0xe5, 0x02, 0xc2, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xaf, 0x3d, 0x40, 0x58, 0x20, 0x00, 0x01, 0xc5, 0x00, 0xbf, 0xb5, 0x02, 0x08, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xaf, 0xcd, 0x00, 0x10, 0x10, 0x00, 0x03, 0x85, 0x02, 0xbe, 0xd5, 0x02, 0x20, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0xaf, 0xf1, 0x00, 0x50, 0x10, 0x00, 0x03, 0x05, 0x00, 0xbb, 0x15, 0x02, 0x80, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0xaf, 0xfd, 0x00, 0x50, 0x10, 0x00, 0x03, 0x05, 0x00, 0x8c, 0x55, 0x03, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xb3, 0xfd, 0x00, 0x70, 0x10, 0xc0, 0x03, 0x0d, 0x00, 0xb1, 0x35, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x8c, 0xfd, 0x00, 0x50, 0x10, 0xc0, 0xc1, 0x89, 0x00, 0xa4, 0xcd, 0x00, 0x00, 0x01, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x63, 0x3d, 0x00, 0x50, 0x10, 0xc1, 0xe1, 0x89, 0x00, 0xb3, 0x31, 0x00, 0x00, 0x02, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x10, 0xcd, 0x00, 0x50, 0x10, 0xe1, 0xe1, 0x89, 0x00, 0xac, 0xc6, 0x00, 0x00, 0x01, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x04, 0x35, 0x00, 0x50, 0x10, 0xe1, 0xe1, 0x85, 0x00, 0xb3, 0x08, 0x00, 0x01, 0x80, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x01, 0x0d, 0x00, 0x54, 0x10, 0xe1, 0xf3, 0x05, 0x00, 0xac, 0x20, 0x00, 0x07, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x60, 0x00, 0x41, 0x00, 0x54, 0x10, 0xe1, 0xde, 0x05, 0x00, 0xb0, 0x80, 0x00, 0x1f, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x18, 0x00, 0x11, 0x00, 0x5c, 0x10, 0xe0, 0xc0, 0x1d, 0x00, 0x82, 0x00, 0x00, 0x77, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x00, 0x05, 0x00, 0x50, 0x10, 0xa0, 0xc0, 0x05, 0x00, 0x88, 0x00, 0x01, 0xf7, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x80, 0x03, 0x00, 0x50, 0x09, 0xa0, 0xcf, 0x05, 0x00, 0xa0, 0x00, 0x07, 0xf7, 0xb2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x60, 0x00, 0x00, 0x54, 0x07, 0x20, 0x91, 0x85, 0x00, 0xc0, 0x00, 0x1d, 0xf7, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x18, 0x00, 0x00, 0x5f, 0x00, 0x21, 0x91, 0x9d, 0x00, 0x00, 0x00, 0x75, 0xf7, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0x00, 0x00, 0x50, 0x40, 0x11, 0x20, 0xc5, 0x00, 0x00, 0x01, 0xc5, 0xb7, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x80, 0x00, 0x50, 0x40, 0x0f, 0x20, 0xc5, 0x00, 0x00, 0x07, 0x15, 0xa7, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x60, 0x00, 0x50, 0x00, 0x00, 0x20, 0xc5, 0x00, 0x00, 0x1d, 0x75, 0x8f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x18, 0x00, 0x4d, 0xa8, 0x00, 0x11, 0x85, 0x00, 0x00, 0x7d, 0x75, 0x1e, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x06, 0x00, 0x48, 0x00, 0x00, 0x0f, 0x1d, 0x00, 0x03, 0xdd, 0x74, 0x78, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x80, 0x4a, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0f, 0xdd, 0x77, 0xe1, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x60, 0x5a, 0x00, 0x00, 0x00, 0x05, 0x00, 0x3e, 0x5d, 0x47, 0x81, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x18, 0x5f, 0x92, 0x40, 0x00, 0x0d, 0x00, 0xf9, 0xd1, 0x1e, 0x0d, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x80, 0x06, 0x50, 0x00, 0x00, 0x00, 0x05, 0x00, 0xb7, 0xcd, 0x70, 0x3d, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x20, 0x01, 0xd0, 0x00, 0x00, 0x02, 0xaf, 0x00, 0xb6, 0x5d, 0xc0, 0xfd, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x08, 0x00, 0x75, 0x55, 0x55, 0x50, 0x06, 0x00, 0xb1, 0x5f, 0x03, 0xfd, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0xc2, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xf8, 0x00, 0xb7, 0x5c, 0x0f, 0xed, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0xb0, 0x80, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0xbe, 0x70, 0x3f, 0x5d, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x9e, 0x20, 0x07, 0xff, 0xff, 0xff, 0xe0, 0x03, 0xb9, 0xc0, 0xff, 0xad, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x02, 0x9f, 0x88, 0x04, 0xff, 0xff, 0xfe, 0x00, 0x0c, 0xb7, 0x03, 0xff, 0x5d, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x60, 0x02, 0x9f, 0xe2, 0x01, 0x80, 0x00, 0x03, 0x00, 0x31, 0x7c, 0x0f, 0xff, 0xbd, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0xb8, 0x00, 0x9f, 0xf8, 0x02, 0xba, 0xb3, 0x3a, 0x80, 0xc6, 0x30, 0x3f, 0xff, 0x7d, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd5, 0x56, 0x02, 0x9f, 0xfc, 0x02, 0x92, 0xaa, 0xaa, 0x83, 0x18, 0x00, 0xff, 0xff, 0xfd, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0xab, 0x82, 0x9f, 0xfd, 0x02, 0x92, 0xb3, 0xaa, 0x8c, 0x60, 0x03, 0xff, 0xff, 0xfd, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8d, 0x5c, 0x82, 0x9f, 0xbd, 0x02, 0x92, 0xaa, 0xaa, 0xb1, 0x80, 0x0f, 0xff, 0xff, 0xfd, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0xb0, 0x82, 0x9f, 0x7d, 0x02, 0x93, 0xab, 0xba, 0xc6, 0x00, 0x3f, 0xff, 0xff, 0xfd, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x40, 0x82, 0x9e, 0xfd, 0x02, 0x80, 0x00, 0x02, 0x90, 0x00, 0xff, 0xff, 0xff, 0xfd, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x40, 0x82, 0x9d, 0xdc, 0x02, 0xff, 0xff, 0xfe, 0x90, 0x03, 0x7f, 0xff, 0xff, 0xfd, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0x50, 0x82, 0x9f, 0xbd, 0x43, 0x3f, 0xff, 0xfd, 0x80, 0x1f, 0xbf, 0xff, 0xff, 0xf9, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x50, 0x82, 0x9f, 0x7d, 0x05, 0xa0, 0x00, 0x05, 0x90, 0x37, 0xdf, 0xff, 0xff, 0xe3, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x51, 0xa0, 0x9e, 0xdd, 0x05, 0xaf, 0xff, 0xf5, 0x50, 0x17, 0x6f, 0xff, 0xff, 0x8c, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x50, 0x82, 0x9d, 0xbd, 0x05, 0xa8, 0x00, 0x15, 0x90, 0x17, 0xbf, 0xff, 0xfe, 0x30, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaf, 0x50, 0x82, 0x9f, 0x7d, 0x04, 0xab, 0xff, 0xd5, 0x50, 0x17, 0xdf, 0xff, 0xf8, 0xc0, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaf, 0x50, 0x82, 0x9f, 0xfd, 0x04, 0xaa, 0xaa, 0xd5, 0x10, 0x17, 0xff, 0xff, 0xe3, 0x00, 0x38, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaf, 0x52, 0x92, 0x9f, 0xfd, 0x04, 0xab, 0x55, 0x55, 0x10, 0x17, 0xff, 0xff, 0x8c, 0x00, 0xce, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x40, 0x82, 0x9f, 0xfd, 0x04, 0x2a, 0xaa, 0xd4, 0x90, 0x17, 0xff, 0xfe, 0x30, 0x03, 0x03, 0x8e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0x41, 0x80, 0x9f, 0xfd, 0x1f, 0xab, 0x55, 0x54, 0x10, 0x17, 0xff, 0xf8, 0xc0, 0x0c, 0x00, 0x63, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x48, 0xc0, 0x9f, 0xfd, 0x10, 0xaa, 0x00, 0x56, 0x90, 0x17, 0xff, 0xe3, 0x00, 0x30, 0x00, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x41, 0x8a, 0x9f, 0xfc, 0x16, 0xab, 0xff, 0xd7, 0x51, 0x07, 0xff, 0x8c, 0x00, 0xc2, 0x03, 0x07, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x42, 0xa2, 0x9f, 0xfd, 0x10, 0xab, 0xef, 0xd6, 0x10, 0x17, 0xfe, 0x30, 0x03, 0x01, 0x8c, 0x01, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x41, 0xd2, 0x9f, 0xfd, 0x14, 0xab, 0xef, 0xd6, 0x10, 0x57, 0xf8, 0xc0, 0x0c, 0x20, 0x30, 0x00, 0x31, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x42, 0xa8, 0xc7, 0xfd, 0x10, 0xab, 0xd7, 0xd7, 0x10, 0x17, 0xe3, 0x00, 0x30, 0x00, 0xc0, 0x00, 0x0c, 0x60, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x49, 0x94, 0x31, 0xfd, 0x16, 0xab, 0xff, 0xd6, 0x10, 0x17, 0x8c, 0x04, 0xc0, 0x03, 0x00, 0x10, 0x03, 0x18, 0x00, 0x00, 0x00, 0x01, 0xb0, 0x45, 0xe8, 0x0c, 0x7d, 0x10, 0xa8, 0x00, 0x14, 0x10, 0x16, 0x32, 0x03, 0x00, 0x04, 0x00, 0x40, 0x00, 0xc4, 0x00, 0x00, 0x00, 0x07, 0x0c, 0x46, 0x34, 0x03, 0x1c, 0x14, 0xa8, 0x00, 0x14, 0x10, 0x00, 0xc0, 0x0c, 0x10, 0x18, 0x01, 0x90, 0x03, 0x0c, 0x00, 0x00, 0x00, 0x18, 0x03, 0x58, 0x0d, 0x00, 0xc5, 0x10, 0xab, 0xc0, 0x16, 0x11, 0x13, 0x00, 0x30, 0x04, 0x44, 0x06, 0x04, 0x0c, 0x34, 0x00, 0x00, 0x00, 0x60, 0x00, 0xe0, 0x03, 0x00, 0x34, 0x16, 0xab, 0x00, 0x17, 0x50, 0x0c, 0x00, 0xc0, 0x01, 0x81, 0x98, 0x00, 0x30, 0xe4, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x0c, 0x10, 0xa8, 0x00, 0x16, 0xba, 0x00, 0x03, 0x00, 0x06, 0x00, 0x60, 0x00, 0xc3, 0x84, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x30, 0x00, 0x1f, 0xa8, 0x00, 0x17, 0x14, 0x80, 0x0c, 0x00, 0x00, 0x01, 0x80, 0x03, 0x8e, 0x0c, 0x00, 0x00, 0x18, 0x00, 0x40, 0x04, 0x10, 0x0c, 0x00, 0x54, 0x29, 0x01, 0x56, 0x9a, 0x20, 0x30, 0x00, 0x60, 0x06, 0x00, 0x0e, 0x18, 0x30, 0x00, 0x00, 0x21, 0x00, 0x30, 0x03, 0x00, 0x03, 0x02, 0x85, 0x28, 0x00, 0x37, 0x15, 0x55, 0xc0, 0x01, 0x80, 0x18, 0x80, 0x38, 0x60, 0xc0, 0x00, 0x00, 0x38, 0xc0, 0x0c, 0x00, 0xc0, 0x00, 0xc1, 0x54, 0xaa, 0x81, 0x54, 0x3a, 0xab, 0x08, 0x06, 0x30, 0x60, 0x20, 0x61, 0x83, 0x00, 0x00, 0x00, 0x26, 0x30, 0x03, 0x00, 0x30, 0x08, 0x30, 0xac, 0x6d, 0x44, 0xb6, 0x55, 0x5c, 0x02, 0x08, 0x0b, 0x80, 0x01, 0x86, 0x0c, 0x00, 0x00, 0x00, 0x21, 0x8c, 0x00, 0xc0, 0x0c, 0x20, 0x0d, 0x54, 0xaa, 0xa9, 0x76, 0xba, 0xb0, 0x00, 0x60, 0x06, 0x00, 0x06, 0x18, 0x30, 0x00, 0x00, 0x00, 0x20, 0x63, 0x00, 0x30, 0x01, 0x80, 0x03, 0x35, 0x67, 0xff, 0xe7, 0x55, 0xc0, 0x01, 0x80, 0x18, 0x00, 0x18, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x30, 0x18, 0xc0, 0x04, 0x00, 0x60, 0x00, 0xef, 0xf8, 0x00, 0x1f, 0xfb, 0x00, 0x06, 0x00, 0x60, 0x00, 0x61, 0x83, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x06, 0x30, 0x00, 0x80, 0x08, 0x00, 0x35, 0x27, 0xff, 0xf4, 0xac, 0x00, 0x18, 0x01, 0x80, 0x01, 0x86, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x8c, 0x00, 0x20, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x06, 0x00, 0x06, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x63, 0x00, 0x08, 0x01, 0x80, 0x00, 0x01, 0x0a, 0xaa, 0x80, 0x00, 0x80, 0x1c, 0x00, 0x18, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18, 0xc0, 0x02, 0x00, 0x60, 0x00, 0x00, 0x41, 0x55, 0x40, 0x00, 0x00, 0x61, 0x00, 0x61, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x06, 0x30, 0x01, 0x80, 0x18, 0x01, 0x04, 0x10, 0x02, 0x80, 0x00, 0x01, 0x80, 0x61, 0x86, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x8c, 0x00, 0x20, 0x06, 0x00, 0x41, 0x04, 0x20, 0x00, 0x00, 0x00, 0x00, 0x06, 0x18, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x63, 0x00, 0x08, 0x01, 0x80, 0x10, 0x41, 0x04, 0x00, 0x00, 0x18, 0x00, 0x18, 0x60, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18, 0xc0, 0x06, 0x00, 0x00, 0x04, 0x10, 0x40, 0x00, 0x00, 0x60, 0x00, 0x61, 0x83, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x06, 0x30, 0x01, 0x80, 0x00, 0x01, 0x04, 0x00, 0x00, 0x01, 0x80, 0x01, 0x86, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x01, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x06, 0x00, 0x06, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x63, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x18, 0x00, 0x18, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x18, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x61, 0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x06, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x86, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x01, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x18, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x06, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x86, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x01, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x18, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x61, 0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x06, 0x30, 0x00, 0x00, 0x00, 0x01, 0x86, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x01, 0x8c, 0x00, 0x00, 0x00, 0x06, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x63, 0x00, 0x00, 0x00, 0x18, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x18, 0xc0, 0x00, 0x00, 0x61, 0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x06, 0x30, 0x00, 0x01, 0x86, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x01, 0x8c, 0x00, 0x06, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x63, 0x00, 0x18, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x18, 0xc0, 0x61, 0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x06, 0x31, 0x86, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x8e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x19, 0x81, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc4, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; #include <WiFi.h> #include <HTTPClient.h> #include "ArduinoJson.h" // GxEPD_MinimumExample by Jean-Marc Zingg // PINS ON ESP32 // BUSY -> 4, RST -> 16, DC -> 17, CS -> SS(5), CLK -> SCK(18), DIN -> MOSI(23), GND -> GND, 3.3V -> 3.3V #include <GxEPD.h> #include <FastLED.h> // select the display class to use, only one, copy from GxEPD_Example #include <GxGDEW042T2/GxGDEW042T2.h> // 4.2" b/w #include <GxIO/GxIO_SPI/GxIO_SPI.h> #include <GxIO/GxIO.h> GxIO_Class io(SPI, /*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16); // arbitrary selection of 17, 16 GxEPD_Class display(io, /*RST=*/ 16, /*BUSY=*/ 4); // arbitrary selection of (16), 4 const char* ssid = "advancedlevelactivist"; const char* password = "..."; const char* pwd = "..."; //Your Domain name with URL path or IP address with path String serverName = "http://thechichibbc.de/obg/data.json"; #include <WiFi.h> String strings[20]; // Max amount of strings anticipated int split(String string, char c) { String data = ""; int bufferIndex = 0; for (int i = 0; i < string.length(); ++i) { char c = string[i]; if (c != ',') { data += c; } else { data += '\0'; strings[bufferIndex++] = data; data = ""; } } return bufferIndex; } const char* ptitle1; const char* ptitle2; const char* e_name = "ename_def"; const char* a_name = "aname_def"; const char* a_desc = "adesc_def"; uint8_t BUNNY_G [128]; void setup() { Serial.begin(9600); display.init(); //display.eraseDisplay(); display.fillScreen(GxEPD_WHITE); display.setRotation(1); WiFi.begin(ssid, password); Serial.println("Connecting"); while(WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to WiFi network with IP Address: "); Serial.println(WiFi.localIP()); delay(500); } void loop() { delay(6000); if(WiFi.status()== WL_CONNECTED){ HTTPClient http; String serverPath = serverName; //Serial.println("Try connect to: " + serverPath ); long rndid = random(1,10); // Your Domain name with URL path or IP address with path http.begin(serverPath); // If you need Node-RED/server authentication, insert user and password below //http.setAuthorization("REPLACE_WITH_SERVER_USERNAME", "REPLACE_WITH_SERVER_PASSWORD"); // Send HTTP GET request int httpResponseCode = http.GET(); if (httpResponseCode>0) { Serial.print(" +++++++++++++++++++++++++++++++++++ "); Serial.print("HTTP Response code: "); Serial.println(httpResponseCode); String payload = http.getString(); http.end(); char json[1500]; //payload.replace(" ",""); payload.replace("\n",""); payload.trim(); //payload.remove(0,1); payload.toCharArray(json,1500); //Serial.println(json); StaticJsonDocument<2048> doc; deserializeJson(doc,json); // Serial.println(doc); int version = int(doc["version"]); int count = int(doc["cnt"]); e_name = doc["ename"]; a_name = doc["aname"]; a_desc = doc["adesc"]; const char* ptitle = doc["piece"][0]["title"]; ptitle2 = doc["piece"][1]["title"]; const String pdata = doc["piece"][0]["data"]; const String pdata2 = doc["piece"][1]["data"]; //pdata.trim(); Serial.print("version: "); Serial.println(version); Serial.print("count: "); Serial.println(count); Serial.print("ename: "); Serial.println(e_name); Serial.print("ptitle: "); Serial.println(ptitle); Serial.print("ptitle2: "); Serial.println(ptitle2); Serial.print("pdata: "); Serial.println(pdata); Serial.print("pdata2: "); Serial.println(pdata2); // Convert String object to char array unsigned int str_len = pdata2.length()+1; char charArray[str_len]; pdata2.toCharArray(charArray, str_len); uint8_t byteArray[256]; int i=0; // split charArray at each ',' and convert to uint8_t char *p = strtok(charArray, ","); while(p != NULL) { byteArray[i++] = strtoul(p, NULL, 16); p = strtok(NULL, ","); } // Print the byteArray for (i=0; i<sizeof(byteArray)/sizeof(char); i++) { //Serial.print(byteArray[i]); //Serial.println(", "); //BUNNY_G[i]= uint8_t(byteArray[i]); } for( i = 0; i<256;i++){ // BUNNY_G[i] = uint8_t(random(0,255)); BUNNY_G[i]= uint8_t(byteArray[i]); } // Serial.println(); //delay(2000); } else { Serial.println("error http request"); delay(500); return; } int rhy = 50 + int(random(1,50)); display.fillScreen(GxEPD_WHITE); display.drawBitmap( 22, rhy, BUNNY_G, 32, 32, GxEPD_BLACK ); int ry = 150 + int(random(1,100)); display.setCursor(20,ry); display.setTextColor(GxEPD_BLACK); display.print(ptitle2); display.setCursor(20,380); display.print(a_name); display.setTextSize(2); display.setCursor(10,310); display.print(e_name); display.setTextWrap(true); display.setTextSize(1); display.setCursor(20,180); display.print(a_desc); display.update(); /* Serial.println("scan start"); // WiFi.scanNetworks will return the number of networks found int n = WiFi.scanNetworks(); Serial.println("scan done"); if (n == 0) { Serial.println("no networks found"); } else { Serial.print(n); Serial.println(" networks found"); for (int i = 0; i < n; ++i) { // Print SSID and RSSI for each network found Serial.print(i + 1); Serial.print(": "); Serial.print(WiFi.SSID(i)); Serial.print(" ("); Serial.print(WiFi.RSSI(i)); Serial.print(")"); Serial.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN)?" ":"*"); delay(10); } } Serial.println(""); // Wait a bit before scanning again delay(5000); */ } }
waking up ESP and reading touch input and slider
#include <Arduino.h> #include <Preferences.h> Preferences preferences; #define TH 66 /* Greater the value, more the sensitivity */ // Potentiometer is connected to GPIO 34 (Analog ADC1_CH6) const int potPin = 34; // variable for storing the potentiometer value int potValue = 0; int ledpin = 2; int sleepcnt = 111000; // a tiny delay counter value to make the ui more relaxed void touch1_callback(){ // this one is called when the touchpin xyz is touched :) Serial.println("touch 1 touched!"); } void touch0_callback(){ // this one is called when the touchpin xyz is touched :) Serial.println("touch 0 touched!"); } void setup() { // as direct feedback, light up an LED to feedback user input! pinMode(ledpin,OUTPUT); digitalWrite(ledpin,HIGH); Serial.begin(9600); // debugging :) // ------------------------------------------------------------ // save values even though the power is off or in deepsleep! -------- // ------------------------------------------------------------ preferences.begin("root_info", false); // Remove all preferences under the opened namespace //preferences.clear(); // Or remove the counter key only //preferences.remove(“counter”); unsigned int boot_counter = preferences.getUInt("boot_counter", 0); // Increase counter by 1 boot_counter++; // Print the counter to Serial Monitor Serial.printf("Current counter value: %u\n", boot_counter); // Store the counter to the Preferences preferences.putUInt("boot_counter", boot_counter); // Close the Preferences preferences.end(); // ------------------------------------------------------------ Serial.println("ESP_IST_WACH..........."); // do stuff here like update EPAPER ETC... int poti_in = analogRead(potPin); Serial.print ("POTI IS: "); Serial.println(poti_in); // potipin read :) } void loop() { sleepcnt--; if(sleepcnt < 0){ // if not touched > values of toucpins are around 2000-2200 > if touche best < 50 int tin0 = analogRead(T0); delay( 10 ); tin0 = analogRead(T0); int tin3 = analogRead(T3); delay( 10 ); tin3 = analogRead(T3); Serial.println(tin0); if( tin0 > 200 && tin3 > 200){ Serial.println("ESP ... geht schlafen..."); touchAttachInterrupt(T0,touch0_callback,TH); touchAttachInterrupt(T3,touch0_callback,TH); esp_sleep_enable_touchpad_wakeup(); esp_deep_sleep_start(); } } }
sprites.h > just a simple spritesheet file 🙂
// https://diyusthad.com/image2cpp // 'HAUS', 180x200px const unsigned char HOUSE [] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x28, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x28, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x28, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf4, 0x28, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x94, 0x28, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x0c, 0x15, 0x28, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x82, 0x70, 0x14, 0xe8, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0xc0, 0x14, 0x28, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x07, 0x04, 0x22, 0x28, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x60, 0x18, 0x01, 0x00, 0x2b, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf9, 0x80, 0x76, 0x00, 0x40, 0x28, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x03, 0x91, 0xc2, 0x10, 0x44, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x0c, 0x10, 0x70, 0x04, 0x00, 0xac, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xb0, 0x10, 0x0c, 0x01, 0x00, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xc0, 0x37, 0x03, 0x00, 0x41, 0x10, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xe0, 0xd1, 0xc0, 0xc0, 0x10, 0x03, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xf7, 0xf3, 0x10, 0x30, 0x30, 0x00, 0x0c, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xfb, 0xfc, 0x14, 0x0e, 0x0e, 0x08, 0x30, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfd, 0xfc, 0x13, 0x00, 0x03, 0x82, 0xc1, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xfd, 0xfe, 0xfe, 0x10, 0xe0, 0x00, 0xe3, 0x96, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xfe, 0xff, 0x7f, 0x18, 0x18, 0x00, 0x1c, 0x18, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x7f, 0xbf, 0x88, 0x06, 0x00, 0x10, 0x00, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xe7, 0xff, 0xff, 0xbf, 0xdf, 0xd8, 0x01, 0x00, 0x10, 0x03, 0x58, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xdf, 0xfd, 0xff, 0xdf, 0xef, 0xee, 0x00, 0x00, 0x10, 0x0c, 0x46, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xdf, 0xfe, 0xff, 0xef, 0xf7, 0xf1, 0x80, 0x00, 0x10, 0x30, 0x41, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xef, 0xff, 0x7f, 0xf7, 0xfb, 0xf8, 0x60, 0x00, 0x10, 0x41, 0x40, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xbf, 0xfb, 0xfd, 0xfc, 0x18, 0x00, 0x11, 0x02, 0xf0, 0x18, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xbf, 0xff, 0xdf, 0xfd, 0xfe, 0xfe, 0x06, 0x00, 0x08, 0x01, 0x8c, 0x06, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x5f, 0xff, 0xef, 0xfe, 0xff, 0x7f, 0x01, 0x80, 0x08, 0x07, 0x03, 0x01, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x2f, 0xff, 0xf7, 0xff, 0x7f, 0xbf, 0x80, 0x60, 0x08, 0x0c, 0x00, 0xc0, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0xd7, 0xff, 0xfb, 0xff, 0xbf, 0xdf, 0xc0, 0x18, 0x08, 0x30, 0x30, 0x30, 0x18, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x03, 0x0b, 0xff, 0xfd, 0xff, 0xdf, 0xff, 0xe0, 0x07, 0x08, 0xc0, 0x30, 0x0c, 0x06, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0x05, 0xff, 0xfe, 0xff, 0xef, 0xff, 0xb0, 0x01, 0xcb, 0x00, 0x30, 0x03, 0x01, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x32, 0xff, 0xff, 0x7f, 0xf7, 0xfe, 0x78, 0x00, 0x64, 0x10, 0x48, 0x00, 0xc0, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0xc0, 0xc5, 0x7f, 0xff, 0xbf, 0xff, 0xff, 0xf2, 0x00, 0x18, 0x28, 0x48, 0x00, 0x30, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x03, 0x03, 0x04, 0xbf, 0xff, 0xdf, 0xff, 0xff, 0xe8, 0x00, 0x00, 0x38, 0x58, 0x00, 0x0c, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0d, 0xdf, 0xff, 0xef, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x28, 0x58, 0x00, 0x02, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x30, 0x15, 0x6f, 0xff, 0xf7, 0xff, 0xfe, 0x54, 0x00, 0x00, 0x44, 0x58, 0x00, 0x03, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0x2d, 0xf7, 0xff, 0xfb, 0xff, 0xf8, 0x80, 0x00, 0x00, 0x5c, 0x48, 0xf0, 0x0c, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x81, 0x03, 0x00, 0x57, 0xcb, 0xff, 0xff, 0xff, 0xf2, 0x00, 0x00, 0x00, 0x54, 0x4f, 0xf0, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x8c, 0x00, 0xaf, 0x35, 0xff, 0xff, 0xff, 0x88, 0xa0, 0x00, 0x00, 0x44, 0x3f, 0xe0, 0xc7, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x70, 0x02, 0x02, 0xaa, 0xff, 0xff, 0xff, 0x50, 0x00, 0x00, 0x00, 0x5c, 0x0f, 0x03, 0x1c, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x29, 0x55, 0x7f, 0xff, 0xfc, 0x80, 0x00, 0x00, 0x00, 0x38, 0x00, 0x0c, 0x70, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x06, 0x00, 0x00, 0x28, 0xbf, 0xff, 0xf2, 0x40, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x31, 0x80, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0xc1, 0x80, 0x01, 0x14, 0x5f, 0xff, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe0, 0xc6, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x30, 0x60, 0x00, 0x02, 0x2d, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc3, 0x18, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0xac, 0x18, 0x00, 0x10, 0x96, 0x1e, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x0c, 0x60, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x03, 0x06, 0x00, 0x00, 0x0b, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x31, 0x80, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0xa0, 0xc1, 0x80, 0x00, 0x05, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xc6, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x30, 0x60, 0x00, 0x02, 0xc1, 0x55, 0x40, 0x00, 0x00, 0x00, 0x03, 0x18, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x0c, 0x18, 0x00, 0x01, 0x05, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x0c, 0x60, 0x1e, 0x40, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x03, 0x06, 0x00, 0x00, 0x0f, 0x00, 0x34, 0x00, 0x00, 0x00, 0x31, 0x80, 0x20, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x80, 0x00, 0xc1, 0x80, 0x00, 0x28, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x4f, 0x90, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x30, 0x60, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x03, 0x18, 0x00, 0xbf, 0xc0, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x0c, 0x18, 0x00, 0x60, 0x00, 0x01, 0x40, 0x00, 0x0c, 0x60, 0x01, 0x7f, 0xe0, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x03, 0x06, 0x00, 0x40, 0x00, 0x00, 0x80, 0x00, 0x31, 0x80, 0x02, 0x7f, 0xd0, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xc1, 0x81, 0x80, 0x00, 0x00, 0xa0, 0x00, 0xce, 0x00, 0x00, 0xff, 0xd0, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x30, 0x70, 0x80, 0x00, 0x00, 0x40, 0x03, 0x38, 0x00, 0x02, 0xff, 0xd4, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0c, 0x1b, 0x06, 0x00, 0x18, 0x50, 0x0c, 0xe0, 0x00, 0x00, 0xff, 0xd0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x11, 0x0f, 0x00, 0x3c, 0x20, 0x33, 0x80, 0x00, 0x02, 0xff, 0xd4, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x09, 0xe0, 0x00, 0xc6, 0x0b, 0x00, 0x2c, 0x30, 0xcc, 0x00, 0x00, 0x02, 0xff, 0xd0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x72, 0x0b, 0x00, 0x2c, 0x2f, 0x30, 0x07, 0x90, 0x02, 0xff, 0xd4, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x27, 0xc8, 0x00, 0x56, 0x0b, 0x00, 0x2c, 0x14, 0xc0, 0x08, 0x00, 0x02, 0xff, 0xd0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x0f, 0xf4, 0xc0, 0x12, 0x0f, 0x00, 0x3c, 0x1f, 0x00, 0x13, 0xe4, 0x02, 0xff, 0xd0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x1f, 0xfa, 0x00, 0x56, 0x0f, 0x00, 0x3c, 0x10, 0x00, 0x2f, 0xf0, 0x0a, 0xff, 0xd4, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x2f, 0xf9, 0x00, 0x52, 0x0f, 0x00, 0x3c, 0x19, 0x00, 0x5f, 0xf8, 0x02, 0xff, 0xd4, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x2f, 0xfc, 0x40, 0x56, 0x06, 0x00, 0x18, 0x15, 0x00, 0x9f, 0xf4, 0x0a, 0xff, 0x94, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0xaf, 0xfd, 0x00, 0x12, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x3f, 0xf4, 0x02, 0xfe, 0xd4, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x2f, 0xfc, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x15, 0x00, 0xbf, 0xf5, 0x0a, 0xfb, 0x54, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xaf, 0xfd, 0x00, 0x56, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x3f, 0xf4, 0x02, 0xec, 0x54, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x2f, 0xfd, 0x00, 0x11, 0x03, 0x80, 0x38, 0x35, 0x00, 0xbf, 0xf5, 0x02, 0x31, 0x54, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xaf, 0xfd, 0x00, 0x13, 0x0e, 0x00, 0x0e, 0x2d, 0x00, 0xbf, 0xf4, 0x02, 0xc4, 0xd4, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x2f, 0xfd, 0x00, 0x19, 0x02, 0x00, 0x08, 0x35, 0x00, 0xbf, 0xf5, 0x02, 0x93, 0x34, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x2f, 0xfd, 0x00, 0x50, 0x82, 0x00, 0x08, 0x65, 0x00, 0xbf, 0xf4, 0x02, 0xcc, 0xc4, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xaf, 0xfd, 0x40, 0x51, 0x81, 0x00, 0x10, 0x75, 0x00, 0xbf, 0xf4, 0x02, 0xb3, 0x18, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xaf, 0xfd, 0x00, 0x58, 0x40, 0x80, 0x20, 0x5d, 0x02, 0xbf, 0xf5, 0x02, 0xcc, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xa3, 0xfd, 0x40, 0x50, 0x40, 0x60, 0xc0, 0xe5, 0x00, 0xbf, 0xf5, 0x02, 0xb0, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xac, 0xfd, 0x00, 0x10, 0x20, 0x1f, 0x01, 0xe5, 0x02, 0xbf, 0xe5, 0x02, 0xc2, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xaf, 0x3d, 0x40, 0x58, 0x20, 0x00, 0x01, 0xc5, 0x00, 0xbf, 0xb5, 0x02, 0x08, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xaf, 0xcd, 0x00, 0x10, 0x10, 0x00, 0x03, 0x85, 0x02, 0xbe, 0xd5, 0x02, 0x20, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0xaf, 0xf1, 0x00, 0x50, 0x10, 0x00, 0x03, 0x05, 0x00, 0xbb, 0x15, 0x02, 0x80, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0xaf, 0xfd, 0x00, 0x50, 0x10, 0x00, 0x03, 0x05, 0x00, 0x8c, 0x55, 0x03, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xb3, 0xfd, 0x00, 0x70, 0x10, 0xc0, 0x03, 0x0d, 0x00, 0xb1, 0x35, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x8c, 0xfd, 0x00, 0x50, 0x10, 0xc0, 0xc1, 0x89, 0x00, 0xa4, 0xcd, 0x00, 0x00, 0x01, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x63, 0x3d, 0x00, 0x50, 0x10, 0xc1, 0xe1, 0x89, 0x00, 0xb3, 0x31, 0x00, 0x00, 0x02, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x10, 0xcd, 0x00, 0x50, 0x10, 0xe1, 0xe1, 0x89, 0x00, 0xac, 0xc6, 0x00, 0x00, 0x01, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x04, 0x35, 0x00, 0x50, 0x10, 0xe1, 0xe1, 0x85, 0x00, 0xb3, 0x08, 0x00, 0x01, 0x80, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x01, 0x0d, 0x00, 0x54, 0x10, 0xe1, 0xf3, 0x05, 0x00, 0xac, 0x20, 0x00, 0x07, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x60, 0x00, 0x41, 0x00, 0x54, 0x10, 0xe1, 0xde, 0x05, 0x00, 0xb0, 0x80, 0x00, 0x1f, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x18, 0x00, 0x11, 0x00, 0x5c, 0x10, 0xe0, 0xc0, 0x1d, 0x00, 0x82, 0x00, 0x00, 0x77, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x00, 0x05, 0x00, 0x50, 0x10, 0xa0, 0xc0, 0x05, 0x00, 0x88, 0x00, 0x01, 0xf7, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x80, 0x03, 0x00, 0x50, 0x09, 0xa0, 0xcf, 0x05, 0x00, 0xa0, 0x00, 0x07, 0xf7, 0xb2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x60, 0x00, 0x00, 0x54, 0x07, 0x20, 0x91, 0x85, 0x00, 0xc0, 0x00, 0x1d, 0xf7, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x18, 0x00, 0x00, 0x5f, 0x00, 0x21, 0x91, 0x9d, 0x00, 0x00, 0x00, 0x75, 0xf7, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0x00, 0x00, 0x50, 0x40, 0x11, 0x20, 0xc5, 0x00, 0x00, 0x01, 0xc5, 0xb7, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x80, 0x00, 0x50, 0x40, 0x0f, 0x20, 0xc5, 0x00, 0x00, 0x07, 0x15, 0xa7, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x60, 0x00, 0x50, 0x00, 0x00, 0x20, 0xc5, 0x00, 0x00, 0x1d, 0x75, 0x8f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x18, 0x00, 0x4d, 0xa8, 0x00, 0x11, 0x85, 0x00, 0x00, 0x7d, 0x75, 0x1e, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x06, 0x00, 0x48, 0x00, 0x00, 0x0f, 0x1d, 0x00, 0x03, 0xdd, 0x74, 0x78, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x80, 0x4a, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0f, 0xdd, 0x77, 0xe1, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x60, 0x5a, 0x00, 0x00, 0x00, 0x05, 0x00, 0x3e, 0x5d, 0x47, 0x81, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x18, 0x5f, 0x92, 0x40, 0x00, 0x0d, 0x00, 0xf9, 0xd1, 0x1e, 0x0d, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x80, 0x06, 0x50, 0x00, 0x00, 0x00, 0x05, 0x00, 0xb7, 0xcd, 0x70, 0x3d, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x20, 0x01, 0xd0, 0x00, 0x00, 0x02, 0xaf, 0x00, 0xb6, 0x5d, 0xc0, 0xfd, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x08, 0x00, 0x75, 0x55, 0x55, 0x50, 0x06, 0x00, 0xb1, 0x5f, 0x03, 0xfd, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0xc2, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xf8, 0x00, 0xb7, 0x5c, 0x0f, 0xed, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0xb0, 0x80, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0xbe, 0x70, 0x3f, 0x5d, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x9e, 0x20, 0x07, 0xff, 0xff, 0xff, 0xe0, 0x03, 0xb9, 0xc0, 0xff, 0xad, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x02, 0x9f, 0x88, 0x04, 0xff, 0xff, 0xfe, 0x00, 0x0c, 0xb7, 0x03, 0xff, 0x5d, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x60, 0x02, 0x9f, 0xe2, 0x01, 0x80, 0x00, 0x03, 0x00, 0x31, 0x7c, 0x0f, 0xff, 0xbd, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0xb8, 0x00, 0x9f, 0xf8, 0x02, 0xba, 0xb3, 0x3a, 0x80, 0xc6, 0x30, 0x3f, 0xff, 0x7d, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd5, 0x56, 0x02, 0x9f, 0xfc, 0x02, 0x92, 0xaa, 0xaa, 0x83, 0x18, 0x00, 0xff, 0xff, 0xfd, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0xab, 0x82, 0x9f, 0xfd, 0x02, 0x92, 0xb3, 0xaa, 0x8c, 0x60, 0x03, 0xff, 0xff, 0xfd, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8d, 0x5c, 0x82, 0x9f, 0xbd, 0x02, 0x92, 0xaa, 0xaa, 0xb1, 0x80, 0x0f, 0xff, 0xff, 0xfd, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0xb0, 0x82, 0x9f, 0x7d, 0x02, 0x93, 0xab, 0xba, 0xc6, 0x00, 0x3f, 0xff, 0xff, 0xfd, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x40, 0x82, 0x9e, 0xfd, 0x02, 0x80, 0x00, 0x02, 0x90, 0x00, 0xff, 0xff, 0xff, 0xfd, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x40, 0x82, 0x9d, 0xdc, 0x02, 0xff, 0xff, 0xfe, 0x90, 0x03, 0x7f, 0xff, 0xff, 0xfd, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0x50, 0x82, 0x9f, 0xbd, 0x43, 0x3f, 0xff, 0xfd, 0x80, 0x1f, 0xbf, 0xff, 0xff, 0xf9, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x50, 0x82, 0x9f, 0x7d, 0x05, 0xa0, 0x00, 0x05, 0x90, 0x37, 0xdf, 0xff, 0xff, 0xe3, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x51, 0xa0, 0x9e, 0xdd, 0x05, 0xaf, 0xff, 0xf5, 0x50, 0x17, 0x6f, 0xff, 0xff, 0x8c, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x50, 0x82, 0x9d, 0xbd, 0x05, 0xa8, 0x00, 0x15, 0x90, 0x17, 0xbf, 0xff, 0xfe, 0x30, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaf, 0x50, 0x82, 0x9f, 0x7d, 0x04, 0xab, 0xff, 0xd5, 0x50, 0x17, 0xdf, 0xff, 0xf8, 0xc0, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaf, 0x50, 0x82, 0x9f, 0xfd, 0x04, 0xaa, 0xaa, 0xd5, 0x10, 0x17, 0xff, 0xff, 0xe3, 0x00, 0x38, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaf, 0x52, 0x92, 0x9f, 0xfd, 0x04, 0xab, 0x55, 0x55, 0x10, 0x17, 0xff, 0xff, 0x8c, 0x00, 0xce, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x40, 0x82, 0x9f, 0xfd, 0x04, 0x2a, 0xaa, 0xd4, 0x90, 0x17, 0xff, 0xfe, 0x30, 0x03, 0x03, 0x8e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0x41, 0x80, 0x9f, 0xfd, 0x1f, 0xab, 0x55, 0x54, 0x10, 0x17, 0xff, 0xf8, 0xc0, 0x0c, 0x00, 0x63, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x48, 0xc0, 0x9f, 0xfd, 0x10, 0xaa, 0x00, 0x56, 0x90, 0x17, 0xff, 0xe3, 0x00, 0x30, 0x00, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x41, 0x8a, 0x9f, 0xfc, 0x16, 0xab, 0xff, 0xd7, 0x51, 0x07, 0xff, 0x8c, 0x00, 0xc2, 0x03, 0x07, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x42, 0xa2, 0x9f, 0xfd, 0x10, 0xab, 0xef, 0xd6, 0x10, 0x17, 0xfe, 0x30, 0x03, 0x01, 0x8c, 0x01, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x41, 0xd2, 0x9f, 0xfd, 0x14, 0xab, 0xef, 0xd6, 0x10, 0x57, 0xf8, 0xc0, 0x0c, 0x20, 0x30, 0x00, 0x31, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x42, 0xa8, 0xc7, 0xfd, 0x10, 0xab, 0xd7, 0xd7, 0x10, 0x17, 0xe3, 0x00, 0x30, 0x00, 0xc0, 0x00, 0x0c, 0x60, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x49, 0x94, 0x31, 0xfd, 0x16, 0xab, 0xff, 0xd6, 0x10, 0x17, 0x8c, 0x04, 0xc0, 0x03, 0x00, 0x10, 0x03, 0x18, 0x00, 0x00, 0x00, 0x01, 0xb0, 0x45, 0xe8, 0x0c, 0x7d, 0x10, 0xa8, 0x00, 0x14, 0x10, 0x16, 0x32, 0x03, 0x00, 0x04, 0x00, 0x40, 0x00, 0xc4, 0x00, 0x00, 0x00, 0x07, 0x0c, 0x46, 0x34, 0x03, 0x1c, 0x14, 0xa8, 0x00, 0x14, 0x10, 0x00, 0xc0, 0x0c, 0x10, 0x18, 0x01, 0x90, 0x03, 0x0c, 0x00, 0x00, 0x00, 0x18, 0x03, 0x58, 0x0d, 0x00, 0xc5, 0x10, 0xab, 0xc0, 0x16, 0x11, 0x13, 0x00, 0x30, 0x04, 0x44, 0x06, 0x04, 0x0c, 0x34, 0x00, 0x00, 0x00, 0x60, 0x00, 0xe0, 0x03, 0x00, 0x34, 0x16, 0xab, 0x00, 0x17, 0x50, 0x0c, 0x00, 0xc0, 0x01, 0x81, 0x98, 0x00, 0x30, 0xe4, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x0c, 0x10, 0xa8, 0x00, 0x16, 0xba, 0x00, 0x03, 0x00, 0x06, 0x00, 0x60, 0x00, 0xc3, 0x84, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x30, 0x00, 0x1f, 0xa8, 0x00, 0x17, 0x14, 0x80, 0x0c, 0x00, 0x00, 0x01, 0x80, 0x03, 0x8e, 0x0c, 0x00, 0x00, 0x18, 0x00, 0x40, 0x04, 0x10, 0x0c, 0x00, 0x54, 0x29, 0x01, 0x56, 0x9a, 0x20, 0x30, 0x00, 0x60, 0x06, 0x00, 0x0e, 0x18, 0x30, 0x00, 0x00, 0x21, 0x00, 0x30, 0x03, 0x00, 0x03, 0x02, 0x85, 0x28, 0x00, 0x37, 0x15, 0x55, 0xc0, 0x01, 0x80, 0x18, 0x80, 0x38, 0x60, 0xc0, 0x00, 0x00, 0x38, 0xc0, 0x0c, 0x00, 0xc0, 0x00, 0xc1, 0x54, 0xaa, 0x81, 0x54, 0x3a, 0xab, 0x08, 0x06, 0x30, 0x60, 0x20, 0x61, 0x83, 0x00, 0x00, 0x00, 0x26, 0x30, 0x03, 0x00, 0x30, 0x08, 0x30, 0xac, 0x6d, 0x44, 0xb6, 0x55, 0x5c, 0x02, 0x08, 0x0b, 0x80, 0x01, 0x86, 0x0c, 0x00, 0x00, 0x00, 0x21, 0x8c, 0x00, 0xc0, 0x0c, 0x20, 0x0d, 0x54, 0xaa, 0xa9, 0x76, 0xba, 0xb0, 0x00, 0x60, 0x06, 0x00, 0x06, 0x18, 0x30, 0x00, 0x00, 0x00, 0x20, 0x63, 0x00, 0x30, 0x01, 0x80, 0x03, 0x35, 0x67, 0xff, 0xe7, 0x55, 0xc0, 0x01, 0x80, 0x18, 0x00, 0x18, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x30, 0x18, 0xc0, 0x04, 0x00, 0x60, 0x00, 0xef, 0xf8, 0x00, 0x1f, 0xfb, 0x00, 0x06, 0x00, 0x60, 0x00, 0x61, 0x83, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x06, 0x30, 0x00, 0x80, 0x08, 0x00, 0x35, 0x27, 0xff, 0xf4, 0xac, 0x00, 0x18, 0x01, 0x80, 0x01, 0x86, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x8c, 0x00, 0x20, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x06, 0x00, 0x06, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x63, 0x00, 0x08, 0x01, 0x80, 0x00, 0x01, 0x0a, 0xaa, 0x80, 0x00, 0x80, 0x1c, 0x00, 0x18, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18, 0xc0, 0x02, 0x00, 0x60, 0x00, 0x00, 0x41, 0x55, 0x40, 0x00, 0x00, 0x61, 0x00, 0x61, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x06, 0x30, 0x01, 0x80, 0x18, 0x01, 0x04, 0x10, 0x02, 0x80, 0x00, 0x01, 0x80, 0x61, 0x86, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x8c, 0x00, 0x20, 0x06, 0x00, 0x41, 0x04, 0x20, 0x00, 0x00, 0x00, 0x00, 0x06, 0x18, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x63, 0x00, 0x08, 0x01, 0x80, 0x10, 0x41, 0x04, 0x00, 0x00, 0x18, 0x00, 0x18, 0x60, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18, 0xc0, 0x06, 0x00, 0x00, 0x04, 0x10, 0x40, 0x00, 0x00, 0x60, 0x00, 0x61, 0x83, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x06, 0x30, 0x01, 0x80, 0x00, 0x01, 0x04, 0x00, 0x00, 0x01, 0x80, 0x01, 0x86, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x01, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x06, 0x00, 0x06, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x63, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x18, 0x00, 0x18, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x18, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x61, 0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x06, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x86, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x01, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x18, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x06, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x86, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x01, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x18, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x61, 0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x06, 0x30, 0x00, 0x00, 0x00, 0x01, 0x86, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x01, 0x8c, 0x00, 0x00, 0x00, 0x06, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x63, 0x00, 0x00, 0x00, 0x18, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x18, 0xc0, 0x00, 0x00, 0x61, 0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x06, 0x30, 0x00, 0x01, 0x86, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x01, 0x8c, 0x00, 0x06, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x63, 0x00, 0x18, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x18, 0xc0, 0x61, 0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x06, 0x31, 0x86, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x8e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x19, 0x81, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc4, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
Main script to simply show the image
#include <Arduino.h> #include <sprites.h> // GxEPD_MinimumExample by Jean-Marc Zingg // PINS ON ESP32 // BUSY -> 4, RST -> 16, DC -> 17, CS -> SS(5), CLK -> SCK(18), DIN -> MOSI(23), GND -> GND, 3.3V -> 3.3V #include <GxEPD.h> #include <FastLED.h> long tick = 0; long max_tick = 100; long cts = 10; long ct = 0; // select the display class to use, only one, copy from GxEPD_Example #include <GxGDEW042T2/GxGDEW042T2.h> // 4.2" b/w #include <GxIO/GxIO_SPI/GxIO_SPI.h> #include <GxIO/GxIO.h> GxIO_Class io(SPI, /*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16); // arbitrary selection of 17, 16 GxEPD_Class display(io, /*RST=*/ 16, /*BUSY=*/ 4); // arbitrary selection of (16), 4 uint16_t rx = 0; uint16_t ry = 0; int width = 300; int height = 400; int gridsize = 2; void drawBlock(int ax,int ay,int w, int h,float type){ if(type>0){ display.fillRect(ax,ay,w,h, GxEPD_BLACK); display.fillRect(width-ax-w,ay,w,h, GxEPD_BLACK); // if mirrored y // display.fillRect(ax,height-ay-h,w,h, GxEPD_BLACK); //display.fillRect(width-ax-w,height-ay-h,w,h, GxEPD_BLACK); }else{ display.fillRect(ax,ay,w,h, GxEPD_WHITE); display.fillRect(width-ax-w,ay,w,h, GxEPD_WHITE); // if mirrored y // display.fillRect(ax,height-ay-h,w,h, GxEPD_WHITE); // display.fillRect(width-ax-w,height-ay-h,w,h, GxEPD_WHITE); } } void drawNoise(){ // go thu all gridpoints for(int x=0;x<150 ;x+= gridsize){ for(int y=0;y<400 ;y+= gridsize){ // do some noise fake growth magic here for now float n = (inoise8(x*12.8,y*12.8,millis()*.001)*0.004) -.5; // add some osciallation here n = sin(n*8); drawBlock(x,y,gridsize,gridsize,n); }} display.update(); } void setup() { //Serial.begin(9600); display.init(); //display.eraseDisplay(); display.fillScreen(GxEPD_BLACK); display.setRotation(1); //drawNoise(); //noLoop(); } void loop() { display.fillScreen(GxEPD_WHITE); int rpx = 70;//int(random(300)-300); // void drawBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, int16_t h, uint16_t color); display.drawBitmap( rpx, 100, HOUSE, 180, 200, GxEPD_BLACK ); display.setCursor(44,50); display.setTextColor(GxEPD_BLACK); display.println("... ONCE, THERE WAS THE TURBOFLIP!"); display.update(); delay(6300); return; // nice partial update example: // https://github.com/ZinggJM/GxEPD/blob/master/examples/PartialUpdateExample/PartialUpdateExample.ino //display.updateWindow(0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, false); // for( int i=0;i<3;i++){ int rx = int(random(150)-4); int ry = int(random(400)-64); int rw = int(random(70)+4); int rh = int(random(120)+4); uint16_t ccol = GxEPD_BLACK; if(random(10)>6){ ccol = GxEPD_WHITE; } display.fillRect(rx, ry, rw, rh, ccol); display.updateWindow(rx-2, ry-2, rw+4, rh+4, true); display.fillRect(300-rx-rw, ry, rw, rh, ccol); display.updateWindow(300-rx -rw, ry , rw , rh , true); //display.powerDown(); //} delay(10); }
simple noise based artworks
sun powered growth simulation
This prototype migh work in the following scenario : As soon as enough sunlight powers up the harvesting rig with the ESP onboard – a partial update will be drawn to the e-paper display. With light intensity and light temperature over time, the visuals will change significantly and produce always unique visuals on update.
The following sketches are done in a PROCESSING simulation setup.
// GxEPD_MinimumExample by Jean-Marc Zingg // PINS ON ESP32 // BUSY -> 4, RST -> 16, DC -> 17, CS -> SS(5), CLK -> SCK(18), DIN -> MOSI(23), GND -> GND, 3.3V -> 3.3V #include <GxEPD.h> #include <FastLED.h> long tick = 0; long max_tick = 100; long cts = 10; long ct = 0; // select the display class to use, only one, copy from GxEPD_Example #include <GxGDEW042T2/GxGDEW042T2.h> // 4.2" b/w #include <GxIO/GxIO_SPI/GxIO_SPI.h> #include <GxIO/GxIO.h> GxIO_Class io(SPI, /*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16); // arbitrary selection of 17, 16 GxEPD_Class display(io, /*RST=*/ 16, /*BUSY=*/ 4); // arbitrary selection of (16), 4 uint16_t rx = 0; uint16_t ry = 0; int width = 300; int height = 400; void setup() { Serial.begin(9600); display.init(); display.eraseDisplay(); display.fillScreen(GxEPD_WHITE); display.setRotation(1); display.update(); drawNoise(); } void loop() { } int gridsize = 2; void drawNoise(){ // go thu all gridpoints for(int x=0;x<150 ;x+= gridsize){ for(int y=0;y<400 ;y+= gridsize){ // do some noise fake growth magic here for now float n = (inoise8(x*12.8,y*12.8,millis()*.001)*0.004) -.5; // add some osciallation here n = sin(n*8); drawBlock(x,y,gridsize,gridsize,n); }} display.update(); } void drawBlock(int ax,int ay,int w, int h,float type){ if(type>0){ display.fillRect(ax,ay,w,h, GxEPD_BLACK); display.fillRect(width-ax-w,ay,w,h, GxEPD_BLACK); // if mirrored y // display.fillRect(ax,height-ay-h,w,h, GxEPD_BLACK); //display.fillRect(width-ax-w,height-ay-h,w,h, GxEPD_BLACK); }else{ display.fillRect(ax,ay,w,h, GxEPD_WHITE); display.fillRect(width-ax-w,ay,w,h, GxEPD_WHITE); // if mirrored y // display.fillRect(ax,height-ay-h,w,h, GxEPD_WHITE); // display.fillRect(width-ax-w,height-ay-h,w,h, GxEPD_WHITE); } }
int gridsize = 2; void setup(){ size(300,400); background(244); } void draw(){ // make a fast simulation loop for(int i=0;i<40;i++){ // pick random point in grid int x = (int)random(width/gridsize/2+1); int y = (int)random(height/gridsize/2+1); // do some noise fake growth magic here for now float n = noise(x*.08,y*.08,millis()*.0001)-.5; n = sin(n*8); n += sin(millis()*.01 + x*.01+y*.04)*.1; drawBlock(x*gridsize,y*gridsize,gridsize,gridsize,n); } } void drawBlock(int ax,int ay,int w, int h,float type){ if(type>0){fill(255);}else{fill(0);} //fill basic area noStroke(); rect(ax,ay,w,h); rect(width-ax-w,ay,w,h); rect(ax,height-ay-h,w,h); rect(width-ax-w,height-ay-h,w,h); }
needs the newer GxEPD Lib installed for arduino
see references here:
https://learn.adafruit.com/adafruit-gfx-graphics-library/graphics-primitives
// GxEPD_MinimumExample by Jean-Marc Zingg // PINS ON ESP32 // BUSY -> 4, RST -> 16, DC -> 17, CS -> SS(5), CLK -> SCK(18), DIN -> MOSI(23), GND -> GND, 3.3V -> 3.3V #include <GxEPD.h> // select the display class to use, only one, copy from GxEPD_Example #include <GxGDEW042T2/GxGDEW042T2.h> // 4.2" b/w #include <GxIO/GxIO_SPI/GxIO_SPI.h> #include <GxIO/GxIO.h> GxIO_Class io(SPI, /*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16); // arbitrary selection of 17, 16 GxEPD_Class display(io, /*RST=*/ 16, /*BUSY=*/ 4); // arbitrary selection of (16), 4 void setup() { display.init(); display.eraseDisplay(); // comment out next line to have no or minimal Adafruit_GFX code //display.drawPaged(drawHelloWorld); // version for AVR using paged drawing, works also on other processors display.drawPaged(drawGEN); } void drawHelloWorld() { display.setTextColor(GxEPD_BLACK); display.print("TURBOFLIP is the Greatest."); } void drawGEN(){ for(int x=0;x<400;x++){ for(int y=0;y<150;y++){ // float n = random(10) -5; float n = sin( x*.1+ y*.2)*10; n /= sin( x*.3 +y*.3 ) ; n /= sin( x*.2 +y*.1) ; n+= (random(10)-5)*.1; if(n>0){ display.drawPixel(x,y,GxEPD_BLACK); display.drawPixel(x,299-y,GxEPD_BLACK); }else{ //display.drawPixel(x,y,GxEPD_GREY); } } } } void loop() {};
SIMULATOR
Deploying for the ESP32/E-paper is taking a lot of compling time, so it makes sense to work in a simulation environment. For obvious sharing reasons, p5.js is not the best, but most agile solution for this. Here you go:
function setup() { createCanvas(400, 300); noLoop(); } function draw() { background(255); for(let x=0;x<400;x++){ for(let y=0;y<150;y++){ let n = sin( x*.1 + y*.2) ; n /= sin( x*.3 +y*.3 ) ; n /= sin( x*.2 +y*.1) ; n+= (random(10)-5)*.1; if(n>0){ noStroke(); fill(255); rect(x,y,1,1); rect(x,299-y,1,1); }else{ noStroke(); fill(0); rect(x,y,1,1); rect(x,299-y,1,1); } } } }