macsbug

M5Stack Nixie tube Clock

leave a comment »

M5Stack で ニキシー管時計を製作しました。                 2019.06.16

M5Stack に 130円の リアルタイムクロックボード(RTC)を追加し 表示は ニキシー管画像 を使用しました。
ネット接続ができない場所でも RTCボード があると動作します。
RTCボード が無くても ネット接続 ( NTP ) できると動作します。

.

機能:Cボタン スイッチで 表示を切り換えます。
_  時計機能:130円の リアルタイムクロックボード(RTC)を追加しました。
_        RTCが無くとも動作します。
_  NTP設定:起動時に ネット接続が可能であれば RTCにNTPを保存します。
_  時間調整:ネット接続が可能であれば 決められた時間にNTP時間を調整(保存)します。

動作:ネットのNTPへ接続し 日付と時間のデーターを入手します。
_  日付と時間を RTC へ保存します。
_  ネット環境が無いか 接続出来ない場合は 上記のNTPをパスします。
_  RTC から 日付と時間を取得し ディスプレーのニキシー管に表示します。
_  RTC が無い場合は NTP の時間を使用します。
_  時間の更新は ESP32内の Timer を使用します。( 理由は 製作メモ を参照ください) 

DS3231 ボード:M5Stackは 時計機能が無い為、DS3231 リアルタイムクロック (RTC) を追加します。
_ 使用する DS3231 は ラズベリーパイ用の RTC Module で 130円と低価格で小型です。
_ Raspberry Pi RTC Module With Battery:回路図参照の事。
_ DS3231 の使用事例、価格、販売店 は 「DS3231 RTC in ESP8266」を参照ください。
_ 日本国内は高いですので ebay か Aliexpress で入手します。
_ 


.
部品の準備:DS3231 Precision RTC Clock Memory Module For Arduino Raspberry Pi
販売:ebay の worldchips Store は 製品管理は良いです。輸送期間は8日〜16日を経験しています。 
注意:Aliexpress や ebay は 販売画像と異なる物が来る事があります。
_  DS3231 Module は 電池付きであるかを確かめてください。
_  以下の worldchips Store を再調査すると Battery 付きではありませんでした。2019.06.29
_  最近、中◯からのバッテリの輸送は出来ない話を聞いています。2019.07.07
_  CR1025:3V 10.0 x 2.5mm。2019.07.07
_  ボタン電池一覧表で 電圧とサイズを確認して購入してください。2019.07.07

Store price memo
 ebay : worldchips  127円  1個
 ebay : worldchips  118円  10個 1184円
 ebay : lincx  116円  1個
 ebay : 3c_topstore  214円  1個 調査中

.
追記:2019.07.04。DS3231 価格:
_  その後の調査で スイッチサイエンスの DS3231 は 1個 2104円です。約17倍の価格。
.


.
M5Stack 改造:DS3231 BOARD の取り付け。

1. DS3231 BOARD の BATTERY が 3.0V ある事を確認します。
2. BATTERY の位置を移動します。移動とハンダ付け時に向きに注意してください。
_ 
3. DS3231 BOARD をカプトンテープで保護します。
4. ハンダ付け時に周囲を溶かさない様にテープ等でケースを保護します。
5. M5Stackの基板にある小さな部品に接触や負担を与えない配置を考えます。
6. 回路図に従い 配線します。
7. M-BUS 3.3V と GROVE PIN にハンダ付けする時は 短時間(0.5秒)に実施します。
8, 注意:M5Stackには 小さな部品があり 接触, 衝撃, 熱 を加えないでください。


.
ニキシー管 画像のHex データー製作:元画像 70×134 pixel ( png ):

_ 12枚の画像 70×134 から vfd_70x134.c を作成します。

1.  vfd_18x34.c と vfd_35x67.c は 「M5StickC Nixie tube Clock」から入手します。

2.  vfd_70x134_0, , , , vfd_70x134_9, vfd_70x134_n.png, vfd_70x134_q.png
_ 以下の画像を DL ( ドラッグ アンド ドロップ ) し
_ 「M5StickC Nixie tube Clock」を参照し
_ 「lcd-image-converter 20180211-beta」で vfd_70x134.c を作成します。
_ 少し手間かもしれませんが マスターすると 綺麗な作品を自由に作る事が可能になります。

3. apple_35x41.png:Apple icon が好きな方へ。 apple_35x41.c は リストに記載しました。
_ 

4. vfd_70x134_0 〜 vfd_70x134_9, vfd_70x134_n.png, vfd_70x134_q.png

.

5. スケッチ:
_ 下の様に スケッチを用意します。
_ ライブラリー:RTClib : スケッチ内に入れるか ライブラリーにいれます。
_ フォルダーは以下の様になります。
_  


.
製作メモ:Production note
1. 時間の更新は ESP32内の Timer を使用します:
_ RTC の データーを 1秒毎に取得すると なぜか 飛び飛びの値しか取得出来ません。
_ いろいろ試しましたが 技術力が無い為か 1秒毎に取得する事はできませんでした。
_ 対策:その為に 1秒毎の動作は ESP32 の Timer を使用しています。
_ ネットでのサンプルを見ると 3秒毎に取得する例が殆どで 1秒単位の表示ができません。
_ M5Stack のサンプルは Timer を使用しています。
_ Timer を使用する場合は 適切な 単位の宣言(unsigned long)が必要です。
2. RTC は CS が無きため GPIO は D(SDA)=5, C(SCK)=13 としました。

maffucci氏の M5Stack Fire Robottillo:Stack Case を製作しました。
ロボチックな感じがなかなか良いです。

3. トラブルシュート:
_ シリアルモニター:「RTC is NOT running!」が表示される:DS3231 の配線を確認します。
_ ディスプレーの表示:「2165/165/165 165:165:85」になる:DS3231 の配線を確認します。
_ ディスプレーの表示:「2010 ,,,, 」になる:DS3231 のバッテリー不足です。交換します。
_ バッテリー交換:電圧をチェックしてください。


.
追記:青いニキシー管:2019.07.04
_ ニキシー管イメージは 微妙で 数字周りのニキシー管イメージが少ない感じです。
_ 


.
参考:
M5StickC Nixie tube Clock:2019.06.15
DS3231 RTC in ESP8266:2016.10.07:
ESP8266 + RTC + NTP デジタル時計:2015.12.05:
+DEVICE PLUS:ESP32とRTCで「二度寝防止アラーム時計」を作ろう!
Raspberry Pi RTC Module With Battery:回路図があります。


.
感想:
_ 前回 M5StickC Nixie tube Clock:これに基づき M5Stack も製作しました。
_ 小型化:PROTO Board か Expansion Board は大きくなりますので本体に収めました。
_ 本体未改造方法:Expansion Board か Expansion Adapter で行なう方法があります。
_ Nixie 画像 70×134 pixel :M5Stack の画面に合わせ作成しました。
_ DS3231のバッテリー:ハンダ付けです。電圧が無い場合は交換する必要があります。
_ DS3231 モジュールが無い場合:NTPやPC TIME を使用し電源を切らなければ使用できます。
_ 表示:ニキシー数値のサイズや位置を変更すると 好みのデザインができます。

_ 追記:2019.06.30。
_  facebook:関氏の情報:「電池は省略し本体のBATT端子に接続しました。」
_   配線は使い慣れた0.2mmのホルマル線を使用。
_   GROVEのGNDは付けにくいのでUSBフレームのGNDに強引にはんだ付け。


.
スケッチ:M5Stack nixie tube clock : 2019.06.16 macsbug

// M5Stack nixie tube clock : 2019.06.16 macsbug
// https://macsbug.wordpress.com/2019/06/16/m5stack-nixie-tube-clock/
// RTC DS3231 : https://wiki.52pi.com/index.php/Raspberry_Pi_Super_Capacitor_RTC(English)
// RTClib : https://www.arduinolibraries.info/libraries/rt-clib
#include <M5Stack.h>
#include "M5StackUpdater.h"
#include <WiFi.h>
#include <SPI.h> 
#include "RTClib.h"
RTC_DS3231 rtc;
#include "vfd_18x34.c"   // font 18px34
#include "vfd_35x67.c"   // font 35x67
#include "vfd_70x134.c"  // font 70px134
#include "apple_35x41.c" // icon 35px41 
const uint8_t rtc_sda = 5, rtc_sck = 13;
const char *ssid = "your ssid";
const char *pass = "your password";
uint32_t targetTime = 0; // for next 1 second timeout
const uint8_t*n[] = { // vfd font 18x34
  vfd_18x34_0,vfd_18x34_1,vfd_18x34_2,vfd_18x34_3,vfd_18x34_4,
  vfd_18x34_5,vfd_18x34_6,vfd_18x34_7,vfd_18x34_8,vfd_18x34_9 };
const uint8_t*m[] = { // vfd font 35x67
  vfd_35x67_0,vfd_35x67_1,vfd_35x67_2,vfd_35x67_3,vfd_35x67_4,
  vfd_35x67_5,vfd_35x67_6,vfd_35x67_7,vfd_35x67_8,vfd_35x67_9,
  vfd_35x67_q,vfd_35x67_n };
  const uint8_t*b[] = { // vfd font 70x134
  vfd_70x134_0,vfd_70x134_1,vfd_70x134_2,vfd_70x134_3,vfd_70x134_4,
  vfd_70x134_5,vfd_70x134_6,vfd_70x134_7,vfd_70x134_8,vfd_70x134_9,
  vfd_70x134_q,vfd_70x134_n };
const char *monthName[12] = {
  "Jan", "Feb", "Mar", "Apr", "May", "Jun",
  "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
uint16_t yy;
uint8_t mn, dd, hh, mm, ss;
uint8_t md = 2; // mode 1(yyyy_mmdd_hhmmss),2(mmdd_hh_mmss),3(mmdd_ss_hhmm)
 
void setup() { 
  M5.begin();
  Wire.begin(rtc_sda,rtc_sck);delay(10); //GLOVE A : SDA,SCL
  if(digitalRead(39)==0){updateFromFS(SD);ESP.restart();}
  rtc.begin(); 
  M5.Lcd.setBrightness(255);
  M5.Lcd.setRotation(1);
  M5.Lcd.fillRect(0, 0, 319, 239, ORANGE);
  M5.Lcd.fillRect(1, 1, 317, 236, BLACK);
  M5.Lcd.setTextSize(2);
  esp_timer_init();
  wifi_setup(); // wifi conection, NTP read, Save NTP to RTC
  rtc_setup();  // Read the value of RTC
}

void loop() {
  M5.update();
  if (targetTime < esp_timer_get_time()/1000 ){
    targetTime = esp_timer_get_time()/1000 + 1000;
    ss++; if (ss == 60) { ss = 0; mm++;
           if (mm == 60) { mm = 0; hh++;
            if (hh == 24) { hh = 0; dd++; //
   }}}}
  if(M5.BtnC.wasPressed()){            // mode change
   if (md == 3){md = 1;M5.Lcd.fillRect(1,1,317,236,BLACK);return;}
   if (md == 2){md = 3;M5.Lcd.fillRect(1,1,317,236,BLACK);return;}
   if (md == 1){md = 2;M5.Lcd.fillRect(1,1,317,236,BLACK);return;}
  }
  if ( md == 3 ){ hhmm();}             // yyyy,mm,dd,ss,hh,mm
  if ( md == 2 ){ yyyy_mmdd_hhmmss();} // yyyy,mm,dd,hh,mm,ss
  if ( md == 1 ){ mmss();}             // mm,ss
  periodic_ntp();                      // Set the time by periodic NTP
  delay(500);
}

void wifi_setup(){
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  M5.Lcd.setCursor(20,40);M5.Lcd.setTextColor(WHITE);
  M5.Lcd.print("Connecting to wifi");
  WiFi.begin(ssid,pass);
  int wifi_check = 10; // WiFi count
  M5.Lcd.setCursor(20,80);M5.Lcd.setTextColor(YELLOW);
  M5.Lcd.print("wifi check in progress");
  while (WiFi.status() != WL_CONNECTED){ // WiFI Status
    delay(500); wifi_check--; if (wifi_check < 0){break;}
  }
  if (wifi_check > 0){  // when there is wifi
    M5.Lcd.setCursor(20,120);M5.Lcd.setTextColor(GREEN);
    M5.Lcd.print("wifi connection complete");delay(2000);
    struct tm t;
    configTime(9*3600L,0,"ntp.nict.jp",
      "time.google.com","ntp.jst.mfeed.ad.jp");
    getLocalTime(&t);
    yy = t.tm_year + 1900; mn = t.tm_mon + 1; dd = t.tm_mday;
    hh = t.tm_hour; mm = t.tm_min; ss = t.tm_sec;
    //Serial.printf("%d %d %d %d %d %d\n",yy,mn,dd,hh,mm,ss);
    rtc.adjust(DateTime(yy,mn,dd,hh,mm,ss));//save ntp to rtc
    M5.Lcd.setCursor(20,160);M5.Lcd.setTextColor(GREEN);
    M5.Lcd.print("SET UP NTP");delay(2000); 
  }
  if (wifi_check < 0){   // When there is no wifi
    M5.Lcd.setCursor(20,120);M5.Lcd.setTextColor(ORANGE);
    M5.Lcd.print("without wifi connection");delay(2000);
  }
}

void rtc_setup(){
  DateTime now = rtc.now(); // time geting from RTC
  if (now.year() == 2165){  // rtc check
    M5.Lcd.setCursor(20,200);M5.Lcd.setTextColor(RED);
    M5.Lcd.print("RTC FAIL");delay(2000);
    M5.Lcd.fillRect(1, 1, 317, 236, BLACK);
    }else{
    yy = now.year(); mn = now.month(); dd = now.day();
    hh = now.hour(); mm = now.minute(); ss = now.second();
    //Serial.printf("%d %d %d %d %d %d\n",yy,mn,dd,hh,mm,ss);
    M5.Lcd.setCursor(20,200);M5.Lcd.setTextColor(BLUE);
    M5.Lcd.print("SET UP RTC");delay(2000);
    M5.Lcd.fillRect(1, 1, 317, 236, BLACK);
  }
}

void yyyy_mmdd_hhmmss(){
  int y1 = (yy / 1000) % 10; int y2 = (yy / 100) % 10;
  int y3 = (yy /   10) % 10; int y4 = yy % 10;
  int ma = (mn /   10) % 10; int mb = mn % 10;
  int d1 = (dd /   10) % 10; int d2 = dd % 10;
  int h1 = (hh /   10) % 10; int h2 = hh % 10;
  int m1 = (mm /   10) % 10; int m2 = mm % 10;
  int s1 = (ss /   10) % 10; int s2 = ss % 10;

  //int p0 = 8; int x0 = 40; int t0 = 22; // icon
  //M5.Lcd.pushImage( p0 + 0*x0, t0, 35,41, (uint16_t *)apple_35x41);

  int p1 = 80; int px1 = 40; int py1 = 5;
  M5.Lcd.pushImage( p1 + 0*px1, py1, 35,67, (uint16_t *)m[y1]); 
  M5.Lcd.pushImage( p1 + 1*px1, py1, 35,67, (uint16_t *)m[y2]);
  M5.Lcd.pushImage( p1 + 2*px1, py1, 35,67, (uint16_t *)m[y3]);
  M5.Lcd.pushImage( p1 + 3*px1, py1, 35,67, (uint16_t *)m[y4]);
  
  int p2 = 80; int px2 = 40; int py2 = 76;
  M5.Lcd.pushImage( p2 + 0*px2, py2, 35,67, (uint16_t *)m[ma]);
  M5.Lcd.pushImage( p2 + 1*px2, py2, 35,67, (uint16_t *)m[mb]);
  //M5.Lcd.drawPixel(118,13, ORANGE); M5.Lcd.drawPixel(119,23,ORANGE);
  M5.Lcd.pushImage( p2 + 2*px2, py2, 35,67, (uint16_t *)m[d1]);
  M5.Lcd.pushImage( p2 + 3*px2, py2, 35,67, (uint16_t *)m[d2]);

  int p3 = 2; int px3 = 40; int py3 = 150;
  M5.Lcd.pushImage( p3 + 0*px3, py3, 35,67, (uint16_t *)m[h1]);
  M5.Lcd.pushImage( p3 + 1*px3, py3, 35,67, (uint16_t *)m[h2]);
  M5.Lcd.pushImage( p3 + 2*px3, py3, 35,67, (uint16_t *)m[10]);
  M5.Lcd.pushImage( p3 + 3*px3, py3, 35,67, (uint16_t *)m[m1]);
  M5.Lcd.pushImage( p3 + 4*px3, py3, 35,67, (uint16_t *)m[m2]);
  M5.Lcd.pushImage( p3 + 5*px3, py3, 35,67, (uint16_t *)m[10]);
  M5.Lcd.pushImage( p3 + 6*px3, py3, 35,67, (uint16_t *)m[s1]);
  M5.Lcd.pushImage( p3 + 7*px3, py3, 35,67, (uint16_t *)m[s2]);
  
  if ( s1 == 0 && s2 == 0 ){ fade1();}
}

void mmss(){
  int ma = (mn / 10) % 10; int mb = mn % 10;
  int d1 = (dd / 10) % 10; int d2 = dd % 10;
  int h1 = (hh / 10) % 10; int h2 = hh % 10;
  int m1 = (mm / 10) % 10; int m2 = mm % 10;
  int s1 = (ss / 10) % 10; int s2 = ss % 10;

  int p0 = 8; int x0 = 40; int t0 = 22; // icon
  M5.Lcd.pushImage( p0 + 0*x0, t0, 35,41, (uint16_t *)apple_35x41);

  int p2 = 65; int px2 = 40; int py2 = 10;
  M5.Lcd.pushImage( p2 + 0*px2, py2, 35,67, (uint16_t *)m[ma]);
  M5.Lcd.pushImage( p2 + 1*px2, py2, 35,67, (uint16_t *)m[mb]);
  //M5.Lcd.drawPixel(118,13, ORANGE); M5.Lcd.drawPixel(119,23,ORANGE);
  M5.Lcd.pushImage( p2 + 2*px2, py2, 35,67, (uint16_t *)m[d1]);
  M5.Lcd.pushImage( p2 + 3*px2, py2, 35,67, (uint16_t *)m[d2]);
  
  int p3 = 240; int px3 = 40; int py3 = 10;
  M5.Lcd.pushImage( p3 + 0*px3, py3, 35,67, (uint16_t *)m[h1]);
  M5.Lcd.pushImage( p3 + 1*px3, py3, 35,67, (uint16_t *)m[h2]);
  
  int p4 = 2; int px4 = 80; int py4 = 100;
  M5.Lcd.pushImage( p4 + 0*px4   , py4, 70,134, (uint16_t *)b[m1]);
  M5.Lcd.pushImage( p4 + 1*px4 -4, py4, 70,134, (uint16_t *)b[m2]);
  //M5.Lcd.drawPixel(155,150, ORANGE); M5.Lcd.drawPixel(155,190,ORANGE);
  M5.Lcd.fillCircle(156,151,3,ORANGE);M5.Lcd.fillCircle(156,191,3,ORANGE);
  M5.Lcd.fillCircle(156,151,1,YELLOW);M5.Lcd.fillCircle(156,191,1,YELLOW);
  M5.Lcd.pushImage( p4 + 2*px4 +4, py4, 70,134, (uint16_t *)b[s1]);
  M5.Lcd.pushImage( p4 + 3*px4   , py4, 70,134, (uint16_t *)b[s2]);

  if ( m1 == 0 && m2 == 0 ){ fade2();}
}

void hhmm(){
  int ma = (mn / 10) % 10; int mb = mn % 10;
  int d1 = (dd / 10) % 10; int d2 = dd % 10;
  int h1 = (hh / 10) % 10; int h2 = hh % 10;
  int m1 = (mm / 10) % 10; int m2 = mm % 10;
  int s1 = (ss / 10) % 10; int s2 = ss % 10;

  //int p0 = 8; int x0 = 40; int t0 = 22; // icon
  //M5.Lcd.pushImage( p0 + 0*x0, t0, 35,41, (uint16_t *)apple_35x41);

  int p2 = 65; int px2 = 40; int py2 = 10;
  M5.Lcd.pushImage( p2 + 0*px2, py2, 35,67, (uint16_t *)m[ma]);
  M5.Lcd.pushImage( p2 + 1*px2, py2, 35,67, (uint16_t *)m[mb]);
  //M5.Lcd.drawPixel(118,13, ORANGE); M5.Lcd.drawPixel(119,23,ORANGE);
  M5.Lcd.pushImage( p2 + 2*px2, py2, 35,67, (uint16_t *)m[d1]);
  M5.Lcd.pushImage( p2 + 3*px2, py2, 35,67, (uint16_t *)m[d2]);
  
  int p3 = 240; int px3 = 40; int py3 = 10;
  M5.Lcd.pushImage( p3 + 0*px3, py3, 35,67, (uint16_t *)m[s1]);
  M5.Lcd.pushImage( p3 + 1*px3, py3, 35,67, (uint16_t *)m[s2]);
  
  int p4 = 2; int px4 = 80; int py4 = 100;
  M5.Lcd.pushImage( p4 + 0*px4   , py4, 70,134, (uint16_t *)b[h1]);
  M5.Lcd.pushImage( p4 + 1*px4 -4, py4, 70,134, (uint16_t *)b[h2]);
  //M5.Lcd.drawPixel( 155,150, ORANGE); M5.Lcd.drawPixel(155,190,ORANGE);
  M5.Lcd.fillCircle(156,151,3,ORANGE);M5.Lcd.fillCircle(156,191,3,ORANGE);
  M5.Lcd.fillCircle(156,151,1,YELLOW);M5.Lcd.fillCircle(156,191,1,YELLOW);
  M5.Lcd.pushImage( p4 + 2*px4 +4, py4, 70,134, (uint16_t *)b[m1]);
  M5.Lcd.pushImage( p4 + 3*px4   , py4, 70,134, (uint16_t *)b[m2]);

  if ( h1 == 0 && h2 == 0 ){ fade2();}
}

void fade1(){
  int p3 = 2; int px3 = 40; int py3 = 150;
  for ( int i = 0; i < 2; i++ ){
  M5.Lcd.pushImage( p3 + 2*px3, py3, 35,67, (uint16_t *)m[11]);
  M5.Lcd.pushImage( p3 + 5*px3, py3, 35,67, (uint16_t *)m[11]);
  delay(25);
  M5.Lcd.pushImage( p3 + 2*px3, py3, 35,67, (uint16_t *)m[10]);
  M5.Lcd.pushImage( p3 + 5*px3, py3, 35,67, (uint16_t *)m[10]);
  delay(25);
  }
}

void fade2(){
  int p3 = 2; int px3 = 40; int py3 = 150;
  for ( int i = 0; i < 2; i++ ){
  M5.Lcd.fillCircle(156,151,3,BLACK);M5.Lcd.fillCircle(156,191,3,BLACK);
  delay(25);
  M5.Lcd.fillCircle(156,151,3,ORANGE);M5.Lcd.fillCircle(156,191,3,ORANGE);
  delay(25);
  }
}

void periodic_ntp(){ // Adjust to ntp at hh mm ss
  if ( (hh == 1) & (mm == 0) & (ss == 0)){ // AM 1:00:00
    wifi_setup();
    rtc_setup();
  }
}

.
apple_35x41.c
.

/*******************************************************************************
* generated by lcd-image-converter rev.c6da9ce from 2018-02-11 00:03:45 +0500
* image
* filename: unsaved
* name: apple_35x41
* macsbug
* preset name: Color R5G6B5
* data block size: 8 bit(s), uint8_t
* RLE compression enabled: no
* conversion type: Color, not_used not_used
* split to rows: yes
* bits per pixel: 16
*
* preprocess:
*  main scan direction: top_to_bottom
*  line scan direction: forward
*  inverse: no
*******************************************************************************/

/*
 typedef struct {
     const uint8_t *data;
     uint16_t width;
     uint16_t height;
     uint8_t dataSize;
     } tImage;
*/
#include <stdint.h>

static const uint8_t apple_35x41[2870] = {
    // ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙░▒∙∙∙∙∙∙∙∙∙∙
    // ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙▒▓▓▓∙∙∙∙∙∙∙∙∙∙
    // ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙▓▓▒▒▓∙∙∙∙∙∙∙∙∙∙
    // ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙▓▒▒▒▒▒∙∙∙∙∙∙∙∙∙∙
    // ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙▓▒▒▒▒▓░∙∙∙∙∙∙∙∙∙∙
    // ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙░▓▒▒▒▒▓∙∙∙∙∙∙∙∙∙∙∙
    // ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙▒▒▒▒▒▓░∙∙∙∙∙∙∙∙∙∙∙
    // ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙▓▒▒▒▓▒∙∙∙∙∙∙∙∙∙∙∙∙
    // ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙▓▒▓▓░∙∙∙∙∙∙∙∙∙∙∙∙∙
    // ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙▓▓░∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙
    // ∙∙∙∙∙∙░▒▓▓▓▓▓▒░∙∙∙∙∙∙∙▒▓▓▓▓▓▓▒∙∙∙∙∙
    // ∙∙∙∙∙▓▓▒▒▒▒▒▒▒▓▓▒░░░▒▓▓▒▒▒▒▒▒▓▓░∙∙∙
    // ∙∙∙∙▓▓▒▒▒▒▒▒▒▒▒▒▒▓▓▓▒▒▒▒▒▒▒▒▒▒▒▓░∙∙
    // ∙∙∙▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓░∙
    // ∙∙▒▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▒∙∙
    // ∙∙█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█▒∙∙∙
    // ∙▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒∙∙∙∙
    // ∙█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█∙∙∙∙∙
    // ░█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒∙∙∙∙∙
    // ▒█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█░∙∙∙∙∙
    // ▒▓▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▓∙∙∙∙∙∙
    // ▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓∙∙∙∙∙∙
    // ▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓∙∙∙∙∙∙
    // ▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░∙∙∙∙∙
    // ▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓∙∙∙∙∙
    // ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒∙∙∙∙∙
    // ∙▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒∙∙∙∙
    // ∙▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░∙∙∙
    // ∙▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░∙∙
    // ∙∙▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒∙
    // ∙∙▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
    // ∙∙░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒∙
    // ∙∙∙▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒∙
    // ∙∙∙░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒∙∙
    // ∙∙∙∙▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒∙∙
    // ∙∙∙∙░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒∙∙∙
    // ∙∙∙∙∙▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓░∙∙∙
    // ∙∙∙∙∙∙▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░∙∙∙∙
    // ∙∙∙∙∙∙∙▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒∙∙∙∙∙
    // ∙∙∙∙∙∙∙∙▒▒▒▒▒▒▒░∙∙∙∙∙▒▒▒▒▒▒▒░∙∙∙∙∙∙
    // ∙∙∙∙∙∙∙∙∙∙░▒░∙∙∙∙∙∙∙∙∙∙░░▒░∙∙∙∙∙∙∙∙
    0x21, 0x24, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x21, 0x64, 0x43, 0x87, 0x6d, 0xc9, 0x19, 0x03, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x21, 0x24, 
    0x08, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0xc9, 0x7f, 0xaa, 0x6e, 0xe9, 0x87, 0xea, 0x10, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x61, 
    0x10, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x62, 0x87, 0xeb, 0x6e, 0xc9, 0x65, 0xe8, 0x65, 0xe8, 0x77, 0x0a, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 
    0x10, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xe1, 0x87, 0xeb, 0x66, 0x08, 0x65, 0xe8, 0x65, 0xe8, 0x66, 0x08, 0x6e, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 
    0x10, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x0a, 0x66, 0x48, 0x65, 0xe8, 0x65, 0xe8, 0x65, 0xe8, 0x77, 0x49, 0x44, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 
    0x10, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x45, 0x77, 0x6a, 0x65, 0xe8, 0x65, 0xe8, 0x65, 0xe8, 0x65, 0xe8, 0x7f, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 
    0x10, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x49, 0x66, 0x28, 0x65, 0xe8, 0x65, 0xe8, 0x65, 0xe8, 0x87, 0xea, 0x32, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 
    0x10, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x77, 0x2a, 0x65, 0xe8, 0x65, 0xe8, 0x65, 0xe8, 0x87, 0xea, 0x4c, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 
    0x10, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xe1, 0x7f, 0x6a, 0x66, 0x08, 0x6f, 0x09, 0x87, 0xcb, 0x33, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 
    0x10, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xc1, 0x08, 0xe1, 0x08, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xe1, 0x8f, 0xec, 0x76, 0xea, 0x44, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xc1, 0x21, 0xe3, 0x19, 0xa2, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 
    0x10, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x04, 0x66, 0x29, 0x77, 0x0a, 0x7f, 0x4a, 0x7f, 0x4a, 0x7f, 0x2a, 0x76, 0xc9, 0x66, 0x29, 0x44, 0x26, 0x11, 0x42, 0x00, 0x00, 0x08, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xc2, 0x5d, 0x68, 0x76, 0xea, 0x7f, 0x4a, 0x77, 0x4a, 0x77, 0x4a, 0x7f, 0x4a, 0x6e, 0xaa, 0x4c, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 
    0x10, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x8a, 0x7f, 0x8a, 0x66, 0x48, 0x65, 0xe8, 0x65, 0xe8, 0x65, 0xe8, 0x65, 0xe8, 0x65, 0xe8, 0x66, 0x28, 0x6f, 0x09, 0x7f, 0x6a, 0x5d, 0xc8, 0x3b, 0x45, 0x2a, 0x83, 0x44, 0x26, 0x66, 0x49, 0x7f, 0x6a, 0x66, 0xa9, 0x65, 0xe8, 0x65, 0xe8, 0x65, 0xe8, 0x65, 0xe8, 0x65, 0xe8, 0x66, 0x08, 0x6f, 0x29, 0x7f, 0x8b, 0x2a, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 
    0x10, 0x82, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x87, 0xab, 0x66, 0xa9, 0x65, 0xe8, 0x65, 0xe8, 0x65, 0xe8, 0x65, 0xe8, 0x65, 0xe8, 0x65, 0xe8, 0x65, 0xe8, 0x65, 0xe8, 0x65, 0xe8, 0x65, 0xe8, 0x66, 0x29, 0x6e, 0xe9, 0x6f, 0x29, 0x6e, 0xc9, 0x66, 0x08, 0x65, 0xe8, 0x65, 0xe8, 0x65, 0xe8, 0x65, 0xe8, 0x65, 0xe8, 0x65, 0xe8, 0x65, 0xe8, 0x65, 0xe8, 0x65, 0xe8, 0x66, 0x08, 0x87, 0xea, 0x3b, 0x85, 0x00, 0x00, 0x10, 0x82, 
    0x10, 0x82, 0x00, 0x00, 0x00, 0x00, 0x67, 0x2b, 0x5e, 0x89, 0x55, 0xe8, 0x55, 0xe8, 0x55, 0xe8, 0x55, 0xe8, 0x55, 0xe8, 0x55, 0xe8, 0x55, 0xe8, 0x55, 0xe8, 0x55, 0xe8, 0x55, 0xe8, 0x55, 0xe8, 0x55, 0xe8, 0x55, 0xe8, 0x55, 0xe8, 0x55, 0xe8, 0x55, 0xe8, 0x55, 0xe8, 0x55, 0xe8, 0x55, 0xe8, 0x55, 0xe8, 0x55, 0xe8, 0x55, 0xe8, 0x55, 0xe8, 0x55, 0xe8, 0x55, 0xe8, 0x55, 0xe8, 0x55, 0xe8, 0x97, 0xec, 0x3b, 0x45, 0x10, 0x82, 
    0x10, 0x82, 0x00, 0x00, 0x5c, 0x86, 0x87, 0x48, 0x6d, 0xc8, 0x6d, 0xc8, 0x6d, 0xc8, 0x6d, 0xc8, 0x6d, 0xc8, 0x6d, 0xc8, 0x6d, 0xc8, 0x6d, 0xc8, 0x6d, 0xc8, 0x6d, 0xc8, 0x6d, 0xc8, 0x6d, 0xc8, 0x6d, 0xc8, 0x6d, 0xc8, 0x6d, 0xc8, 0x6d, 0xc8, 0x6d, 0xc8, 0x6d, 0xc8, 0x6d, 0xc8, 0x6d, 0xc8, 0x6d, 0xc8, 0x6d, 0xc8, 0x6d, 0xc8, 0x6d, 0xc8, 0x6d, 0xc8, 0x6d, 0xc8, 0x6d, 0xc8, 0xa7, 0x89, 0x4c, 0x66, 0x00, 0x00, 0x10, 0x82, 
    0x10, 0x82, 0x00, 0x21, 0xff, 0x85, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xff, 0x85, 0xab, 0x02, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 
    0x10, 0x82, 0xc4, 0x63, 0xfe, 0xc5, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfe, 0xc5, 0xc4, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 
    0x10, 0x82, 0xff, 0x05, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xff, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 
    0x49, 0xe4, 0xff, 0x65, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfd, 0xc4, 0xfe, 0xa5, 0xc4, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 
    0x93, 0xa5, 0xfe, 0xe5, 0xfd, 0xc5, 0xfd, 0xc5, 0xfd, 0xc5, 0xfd, 0xc5, 0xfd, 0xc5, 0xfd, 0xc5, 0xfd, 0xc5, 0xfd, 0xc5, 0xfd, 0xc5, 0xfd, 0xc5, 0xfd, 0xc5, 0xfd, 0xc5, 0xfd, 0xc5, 0xfd, 0xc5, 0xfd, 0xc5, 0xfd, 0xc5, 0xfd, 0xc5, 0xfd, 0xc5, 0xfd, 0xc5, 0xfd, 0xc5, 0xfd, 0xc5, 0xfd, 0xc5, 0xfd, 0xc5, 0xfd, 0xc5, 0xfd, 0xc5, 0xfd, 0xc5, 0xff, 0x25, 0x51, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 
    0xb3, 0x45, 0xfc, 0x64, 0xf3, 0xe4, 0xf3, 0xe4, 0xf3, 0xe4, 0xf3, 0xe4, 0xf3, 0xe4, 0xf3, 0xe4, 0xf3, 0xe4, 0xf3, 0xe4, 0xf3, 0xe4, 0xf3, 0xe4, 0xf3, 0xe4, 0xf3, 0xe4, 0xf3, 0xe4, 0xf3, 0xe4, 0xf3, 0xe4, 0xf3, 0xe4, 0xf3, 0xe4, 0xf3, 0xe4, 0xf3, 0xe4, 0xf3, 0xe4, 0xf3, 0xe4, 0xf3, 0xe4, 0xf3, 0xe4, 0xf3, 0xe4, 0xf3, 0xe4, 0xf3, 0xe4, 0xfc, 0xc4, 0x28, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 
    0xdb, 0xe5, 0xfc, 0x24, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xfc, 0x04, 0xfc, 0xe4, 0x20, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 
    0xdb, 0xe5, 0xfc, 0x24, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xf4, 0x04, 0xfd, 0x04, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 
    0xcb, 0xc6, 0xfc, 0x44, 0xf4, 0x24, 0xf4, 0x24, 0xf4, 0x24, 0xf4, 0x24, 0xf4, 0x24, 0xf4, 0x24, 0xf4, 0x24, 0xf4, 0x24, 0xf4, 0x24, 0xf4, 0x24, 0xf4, 0x24, 0xf4, 0x24, 0xf4, 0x24, 0xf4, 0x24, 0xf4, 0x24, 0xf4, 0x24, 0xf4, 0x24, 0xf4, 0x24, 0xf4, 0x24, 0xf4, 0x24, 0xf4, 0x24, 0xf4, 0x24, 0xf4, 0x24, 0xf4, 0x24, 0xf4, 0x24, 0xf4, 0x24, 0xfc, 0xa4, 0x9a, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 
    0x92, 0xe5, 0xfd, 0x24, 0xf4, 0x64, 0xf4, 0x84, 0xf4, 0x84, 0xf4, 0x84, 0xf4, 0x84, 0xf4, 0x84, 0xf4, 0x84, 0xf4, 0x84, 0xf4, 0x84, 0xf4, 0x84, 0xf4, 0x84, 0xf4, 0x84, 0xf4, 0x84, 0xf4, 0x84, 0xf4, 0x84, 0xf4, 0x84, 0xf4, 0x84, 0xf4, 0x84, 0xf4, 0x84, 0xf4, 0x84, 0xf4, 0x84, 0xf4, 0x84, 0xf4, 0x84, 0xf4, 0x84, 0xf4, 0x84, 0xf4, 0x64, 0xfc, 0x84, 0xfc, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 
    0x61, 0x25, 0xfa, 0x28, 0xe1, 0xa7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xfa, 0x68, 0x28, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 
    0x30, 0xe4, 0xf9, 0xe8, 0xd9, 0xc7, 0xd9, 0xc7, 0xd9, 0xc7, 0xd9, 0xc7, 0xd9, 0xc7, 0xd9, 0xc7, 0xd9, 0xc7, 0xd9, 0xc7, 0xd9, 0xc7, 0xd9, 0xc7, 0xd9, 0xc7, 0xd9, 0xc7, 0xd9, 0xc7, 0xd9, 0xc7, 0xd9, 0xc7, 0xd9, 0xc7, 0xd9, 0xc7, 0xd9, 0xc7, 0xd9, 0xc7, 0xd9, 0xc7, 0xd9, 0xc7, 0xd9, 0xc7, 0xd9, 0xc7, 0xd9, 0xc7, 0xd9, 0xc7, 0xd9, 0xc7, 0xd9, 0xc7, 0xe9, 0xc7, 0xf9, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 
    0x10, 0xa2, 0xfa, 0x08, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xfa, 0x08, 0x99, 0x45, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 
    0x10, 0x82, 0xe1, 0xc7, 0xf1, 0xe7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xe1, 0xc7, 0xfa, 0x08, 0x89, 0x45, 0x00, 0x00, 0x10, 0x82, 
    0x10, 0x82, 0x58, 0xc3, 0xfa, 0x07, 0xe9, 0xc4, 0xe9, 0xc5, 0xe9, 0xc5, 0xe9, 0xc5, 0xe9, 0xc5, 0xe9, 0xc5, 0xe9, 0xc5, 0xe9, 0xc5, 0xe9, 0xc5, 0xe9, 0xc5, 0xe9, 0xc5, 0xe9, 0xc5, 0xe9, 0xc5, 0xe9, 0xc5, 0xe9, 0xc5, 0xe9, 0xc5, 0xe9, 0xc5, 0xe9, 0xc5, 0xe9, 0xc5, 0xe9, 0xc5, 0xe9, 0xc5, 0xe9, 0xc5, 0xe9, 0xc5, 0xe9, 0xc5, 0xe9, 0xc5, 0xe9, 0xc5, 0xe9, 0xc5, 0xe9, 0xc5, 0xe9, 0xc5, 0xfa, 0x07, 0xd9, 0x84, 0x30, 0xe2, 
    0x10, 0x82, 0x00, 0x00, 0xd2, 0x34, 0xa9, 0xf0, 0xa1, 0xf0, 0xa9, 0xf0, 0xa9, 0xf0, 0xa9, 0xf0, 0xa9, 0xf0, 0xa9, 0xf0, 0xa9, 0xf0, 0xa9, 0xf0, 0xa9, 0xf0, 0xa9, 0xf0, 0xa9, 0xf0, 0xa9, 0xf0, 0xa9, 0xf0, 0xa9, 0xf0, 0xa9, 0xf0, 0xa9, 0xf0, 0xa9, 0xf0, 0xa9, 0xf0, 0xa9, 0xf0, 0xa9, 0xf0, 0xa9, 0xf0, 0xa9, 0xf0, 0xa9, 0xf0, 0xa9, 0xf0, 0xa9, 0xf0, 0xa9, 0xf0, 0xa9, 0xf0, 0xa9, 0xf0, 0xa1, 0xef, 0xe2, 0x34, 0xa1, 0xed, 
    0x10, 0x82, 0x00, 0x00, 0x71, 0xb1, 0xa2, 0x16, 0x91, 0xf3, 0x91, 0xf3, 0x91, 0xf3, 0x91, 0xf3, 0x91, 0xf3, 0x91, 0xf3, 0x91, 0xf3, 0x91, 0xf3, 0x91, 0xf3, 0x91, 0xf3, 0x91, 0xf3, 0x91, 0xf3, 0x91, 0xf3, 0x91, 0xf3, 0x91, 0xf3, 0x91, 0xf3, 0x91, 0xf3, 0x91, 0xf3, 0x91, 0xf3, 0x91, 0xf3, 0x91, 0xf3, 0x91, 0xf3, 0x91, 0xf3, 0x91, 0xf3, 0x91, 0xf3, 0x91, 0xf3, 0x91, 0xf3, 0x91, 0xf3, 0x89, 0xf3, 0xb2, 0x59, 0x18, 0xe5, 
    0x10, 0x82, 0x00, 0x00, 0x08, 0x20, 0xc2, 0x58, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0xa2, 0x13, 0xa2, 0x13, 0x10, 0x82, 
    0x10, 0x82, 0x00, 0x00, 0x00, 0x00, 0x81, 0xaf, 0xaa, 0x15, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0x91, 0xf2, 0xc2, 0x58, 0x20, 0x64, 0x10, 0x82, 
    0x10, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd2, 0x58, 0xb9, 0x71, 0xb9, 0x51, 0xb9, 0x71, 0xb9, 0x71, 0xb9, 0x71, 0xb9, 0x71, 0xb9, 0x71, 0xb9, 0x71, 0xb9, 0x71, 0xb9, 0x71, 0xb9, 0x71, 0xb9, 0x71, 0xb9, 0x71, 0xb9, 0x71, 0xb9, 0x71, 0xb9, 0x71, 0xb9, 0x71, 0xb9, 0x71, 0xb9, 0x71, 0xb9, 0x71, 0xb9, 0x71, 0xb9, 0x71, 0xb9, 0x71, 0xb9, 0x71, 0xb9, 0x51, 0xb1, 0x51, 0xc9, 0xb3, 0x9a, 0x12, 0x00, 0x00, 0x10, 0x82, 
    0x10, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x0d, 0x4c, 0xff, 0x3b, 0x97, 0x3b, 0xb8, 0x3b, 0xb8, 0x3b, 0xb8, 0x3b, 0xb8, 0x3b, 0xb8, 0x3b, 0xb8, 0x3b, 0xb8, 0x3b, 0xb8, 0x3b, 0xb8, 0x3b, 0xb8, 0x3b, 0xb8, 0x3b, 0xb8, 0x3b, 0xb8, 0x3b, 0xb8, 0x3b, 0xb8, 0x3b, 0xb8, 0x3b, 0xb8, 0x3b, 0xb8, 0x3b, 0xb8, 0x3b, 0xb8, 0x3b, 0xb8, 0x3b, 0xb8, 0x3b, 0xb8, 0x3b, 0xb8, 0x54, 0xff, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 
    0x10, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xff, 0x05, 0xff, 0x05, 0x5c, 0x05, 0x5c, 0x05, 0x5c, 0x05, 0x5c, 0x05, 0x5c, 0x05, 0x5c, 0x05, 0x5c, 0x05, 0x5c, 0x05, 0x5c, 0x05, 0x5c, 0x05, 0x5c, 0x05, 0x5c, 0x05, 0x5c, 0x05, 0x5c, 0x05, 0x5c, 0x05, 0x5c, 0x05, 0x5c, 0x05, 0x5c, 0x05, 0x5c, 0x05, 0x5c, 0x05, 0x5c, 0x05, 0x5c, 0x05, 0x3c, 0x07, 0x3f, 0x03, 0x50, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 
    0x10, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x3f, 0x05, 0x7e, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x05, 0x1c, 0x05, 0x1c, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x06, 0x5f, 0x04, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 
    0x10, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x5f, 0x05, 0xbf, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x05, 0x1c, 0x05, 0xff, 0x06, 0x1f, 0x05, 0xbf, 0x05, 0xbf, 0x05, 0xff, 0x06, 0x1f, 0x05, 0x7f, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x04, 0xfb, 0x05, 0x1b, 0x06, 0x9f, 0x04, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 
    0x08, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x1c, 0x06, 0x9f, 0x05, 0x9f, 0x05, 0x3d, 0x05, 0x7f, 0x06, 0x5f, 0x05, 0xbf, 0x02, 0xcf, 0x00, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xa8, 0x04, 0x99, 0x06, 0x5f, 0x06, 0x1f, 0x05, 0x5e, 0x05, 0x3d, 0x06, 0x1f, 0x06, 0x9f, 0x02, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x61, 
    0x21, 0x24, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x11, 0xa8, 0x1b, 0xd4, 0x14, 0x98, 0x13, 0xd4, 0x11, 0xc9, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0xa3, 0x12, 0xad, 0x1c, 0x15, 0x1c, 0x77, 0x1a, 0xef, 0x10, 0xc3, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x21, 0x24
};

.
M5Stack nixie tube clock , DS3231 , RTC , VFD , Nixie tube , ニキシー管 , Hex File

Written by macsbug

6月 16, 2019 @ 11:00 am

カテゴリー: M5STACK

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。