Browse Source

Update dexed

tags/2018-04-16
falkTX 7 years ago
parent
commit
7bf5c7e729
37 changed files with 1217 additions and 807 deletions
  1. +464
    -276
      ports/dexed/source/BinaryData.cpp
  2. +6
    -6
      ports/dexed/source/BinaryData.h
  3. +1
    -1
      ports/dexed/source/CartManager.h
  4. +2
    -2
      ports/dexed/source/DXComponents.cpp
  5. +3
    -19
      ports/dexed/source/DXLookNFeel.cpp
  6. +4
    -10
      ports/dexed/source/DXLookNFeel.h
  7. +1
    -1
      ports/dexed/source/EngineMkI.cpp
  8. +1
    -1
      ports/dexed/source/EngineMkI.h
  9. +1
    -1
      ports/dexed/source/EngineOpl.cpp
  10. +46
    -33
      ports/dexed/source/GlobalEditor.cpp
  11. +12
    -12
      ports/dexed/source/GlobalEditor.h
  12. +38
    -29
      ports/dexed/source/OperatorEditor.cpp
  13. +5
    -5
      ports/dexed/source/OperatorEditor.h
  14. +210
    -105
      ports/dexed/source/ParamDialog.cpp
  15. +12
    -15
      ports/dexed/source/ParamDialog.h
  16. +18
    -11
      ports/dexed/source/PluginData.cpp
  17. +5
    -7
      ports/dexed/source/PluginEditor.cpp
  18. +5
    -4
      ports/dexed/source/PluginEditor.h
  19. +20
    -1
      ports/dexed/source/PluginParam.cpp
  20. +4
    -2
      ports/dexed/source/PluginParam.h
  21. +64
    -23
      ports/dexed/source/PluginProcessor.cpp
  22. +1
    -1
      ports/dexed/source/PluginProcessor.h
  23. +5
    -18
      ports/dexed/source/ProgramListBox.cpp
  24. +0
    -1
      ports/dexed/source/ProgramListBox.h
  25. +36
    -36
      ports/dexed/source/msfa/aligned_buf.h
  26. +126
    -126
      ports/dexed/source/msfa/controllers.h
  27. +25
    -12
      ports/dexed/source/msfa/dx7note.cc
  28. +1
    -0
      ports/dexed/source/msfa/dx7note.h
  29. +94
    -47
      ports/dexed/source/msfa/env.cc
  30. +7
    -1
      ports/dexed/source/msfa/env.h
  31. +0
    -0
      ports/dexed/source/msfa/exp2.cc
  32. +0
    -0
      ports/dexed/source/msfa/exp2.h
  33. +0
    -0
      ports/dexed/source/msfa/freqlut.cc
  34. +0
    -0
      ports/dexed/source/msfa/freqlut.h
  35. +0
    -0
      ports/dexed/source/msfa/module.h
  36. +0
    -0
      ports/dexed/source/msfa/pitchenv.h
  37. +0
    -1
      ports/dexed/source/msfa/synth.h

+ 464
- 276
ports/dexed/source/BinaryData.cpp View File

@@ -7,8 +7,209 @@
namespace BinaryData
{
//================== Switch_32x32.png ==================
//================== dexedIcon.png ==================
static const unsigned char temp_binary_data_0[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,2,0,0,0,2,0,8,6,0,0,0,244,120,212,250,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,226,2,15,2,57,31,53,243,7,62,
0,0,0,29,105,84,88,116,67,111,109,109,101,110,116,0,0,0,0,0,67,114,101,97,116,101,100,32,119,105,116,104,32,71,73,77,80,100,46,101,7,0,0,32,0,73,68,65,84,120,218,237,221,121,96,86,213,157,255,241,207,125,150,44,100,7,178,66,128,0,33,129,16,146,0,226,
130,10,226,86,151,42,106,213,177,243,107,103,218,233,58,90,107,157,169,182,213,78,181,155,86,91,173,109,109,167,211,169,211,214,214,169,29,157,182,211,42,69,68,68,65,144,45,9,97,11,129,132,176,101,129,144,144,132,108,207,114,127,127,104,109,171,108,129,
36,207,189,231,190,95,255,185,36,121,206,185,247,124,159,207,61,247,222,115,172,155,175,191,194,22,0,0,240,20,31,93,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,
0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,
0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,
0,0,0,0,8,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,32,0,208,5,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,
0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,
0,32,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,
0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,
0,0,2,0,93,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,
0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,4,0,0,0,64,0,0,0,0,230,10,208,5,56,83,151,92,118,165,62,125,199,221,198,180,103,107,77,181,30,252,242,61,28,88,128,154,227,137,154,195,12,0,0,0,30,68,0,0,0,128,0,0,
0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,
0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,4,0,0,0,64,0,0,0,
0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,128,73,236,168,77,39,0,160,230,16,0,224,53,209,104,148,78,0,64,205,33,0,192,107,34,209,8,157,0,128,154,67,0,0,105,28,0,168,57,4,0,24,47,60,48,64,39,0,160,230,16,0,224,53,253,3,253,116,2,0,106,14,1,
0,158,27,140,125,125,116,2,0,106,14,1,0,94,211,199,96,4,64,205,33,0,192,131,105,188,159,193,8,128,154,67,0,128,231,28,59,118,140,78,0,64,205,113,169,0,93,112,102,18,18,18,149,157,147,163,172,172,28,101,102,231,40,43,43,91,169,105,233,74,73,73,85,114,
74,138,82,82,82,21,23,23,175,96,48,168,64,32,160,64,224,173,174,14,135,195,10,133,67,10,135,194,26,24,232,87,87,87,167,186,187,186,212,213,121,84,157,93,157,58,212,218,162,214,150,102,181,182,52,169,165,185,89,125,125,189,206,29,140,221,93,156,8,0,53,
135,154,67,0,48,215,168,81,73,42,158,81,162,201,83,166,105,98,193,100,77,154,52,89,217,57,185,103,244,187,252,129,128,226,149,240,206,63,103,101,231,156,244,255,63,124,168,85,123,26,234,181,167,97,183,246,52,236,86,237,142,109,58,218,209,238,136,126,
137,70,163,234,237,233,81,226,168,81,156,36,0,53,135,154,67,0,48,160,83,2,1,149,150,205,86,89,197,28,77,159,81,170,137,147,10,228,243,197,230,110,201,216,204,44,141,205,204,210,220,121,231,189,243,239,246,239,219,171,109,91,170,181,165,166,90,213,149,
27,213,219,219,19,179,190,234,62,214,205,96,4,168,57,212,28,2,128,123,197,39,36,232,220,243,46,212,57,231,93,160,89,101,179,149,152,152,232,216,207,58,62,127,130,198,231,79,208,21,87,189,95,161,129,1,109,169,169,214,186,181,171,181,254,205,55,212,217,
121,116,68,63,75,87,231,81,101,102,102,157,209,207,254,219,75,127,84,117,211,126,103,117,238,13,55,12,199,101,139,130,175,189,38,95,123,59,3,237,36,236,81,163,52,112,217,165,146,223,252,178,100,117,28,85,234,218,181,154,119,238,5,212,156,17,172,57,32,
0,252,141,146,210,50,93,178,232,10,205,59,127,190,18,18,18,93,247,249,131,113,113,170,152,115,142,42,230,156,163,143,125,242,14,109,218,180,94,175,188,180,68,155,54,174,147,109,15,255,206,89,71,59,58,206,248,103,239,184,96,129,62,243,251,223,168,47,28,
50,251,36,243,249,20,46,47,83,112,197,171,178,168,57,39,20,42,47,51,254,203,223,146,84,154,157,167,203,166,78,215,185,159,188,147,154,51,194,53,7,4,0,197,197,197,107,225,165,151,235,154,247,223,168,220,188,113,198,180,203,31,8,232,156,121,231,235,156,
121,231,235,72,219,97,189,252,210,139,90,242,194,239,117,172,187,123,216,254,102,71,199,145,51,254,217,172,228,20,125,120,206,185,250,143,55,87,153,127,117,155,158,161,72,193,100,5,26,234,169,58,199,17,201,203,147,125,138,123,211,110,150,16,8,104,209,
212,98,93,55,163,84,185,41,105,212,156,24,213,28,120,56,0,36,37,37,235,253,139,111,210,229,239,187,86,41,41,169,70,183,117,244,152,177,186,229,182,15,235,253,139,111,214,43,203,150,232,143,191,127,94,109,109,135,135,126,48,158,229,180,246,213,197,51,
181,106,207,110,109,107,105,50,254,252,11,151,76,151,255,192,1,89,44,103,250,183,225,200,239,87,184,180,212,200,182,37,199,199,107,113,73,153,174,42,42,81,114,92,60,53,199,1,53,7,127,21,224,74,138,167,60,96,122,35,227,227,227,117,221,13,55,235,115,159,
191,79,101,21,115,20,31,31,239,153,3,28,12,6,53,173,104,186,174,188,234,253,74,78,73,213,174,157,181,10,133,134,110,67,141,241,249,19,84,49,103,222,25,255,188,37,105,70,86,174,150,213,237,80,196,54,123,167,47,203,239,87,52,33,94,254,166,38,225,175,174,
254,103,206,148,157,157,109,216,21,127,80,55,206,172,208,61,11,46,87,121,222,120,197,249,189,115,173,229,244,154,227,36,135,90,91,180,114,197,50,2,192,112,185,228,210,43,117,239,125,15,106,238,188,243,21,23,23,231,221,164,231,247,107,90,209,116,93,118,
229,213,138,70,34,218,189,107,231,144,220,175,27,61,102,172,46,184,112,193,89,253,142,148,248,4,5,253,126,85,29,220,111,254,129,72,75,147,239,208,33,89,189,189,130,20,73,73,85,120,246,108,89,150,25,79,71,88,146,46,47,44,214,253,151,94,165,115,242,39,
42,232,247,83,115,28,88,115,8,0,111,49,118,37,192,137,147,10,244,181,135,30,211,167,63,115,183,210,210,51,168,180,111,75,78,78,209,135,62,242,9,61,242,248,143,84,88,52,253,172,127,95,219,225,67,67,242,185,174,159,49,75,211,198,122,227,201,222,80,121,
249,219,95,21,222,102,75,138,204,174,144,229,51,163,12,21,140,30,171,135,175,190,65,119,92,176,80,105,46,124,184,207,107,53,7,6,6,0,191,223,175,15,126,232,163,122,248,219,63,80,209,244,18,142,240,9,228,79,152,168,175,61,244,152,62,250,137,219,21,159,
144,112,198,191,231,240,16,13,70,159,101,233,206,249,151,40,224,243,192,234,212,169,169,10,21,78,225,234,127,210,68,217,163,71,187,190,29,1,159,79,31,158,115,174,30,187,246,38,21,103,102,11,238,168,57,48,44,0,140,27,63,65,223,124,244,123,90,124,211,173,
242,7,88,226,224,148,7,223,231,211,251,174,190,78,143,60,246,67,21,76,158,122,70,191,227,104,71,187,66,161,161,121,141,47,63,61,67,183,150,205,241,68,223,71,139,138,21,77,244,238,85,98,52,24,84,184,196,253,1,125,66,250,104,125,251,154,27,117,211,204,
10,249,44,102,117,220,86,115,8,0,134,184,252,202,107,244,240,119,126,112,198,39,149,151,229,230,141,211,215,31,126,92,87,93,115,253,25,253,252,145,33,124,210,247,166,210,10,21,140,30,107,126,167,7,131,198,62,249,126,58,194,165,165,178,92,254,84,252,85,
69,37,250,206,181,55,121,227,124,53,184,230,16,0,92,204,239,15,232,83,119,220,173,143,127,250,78,79,61,221,63,228,223,71,113,113,250,200,199,255,89,159,251,252,125,10,14,242,97,201,214,150,230,161,59,158,150,79,159,157,191,80,126,203,252,91,1,246,184,
113,138,100,121,111,202,56,58,102,140,236,137,19,221,59,86,252,126,221,57,127,161,62,117,222,69,138,243,240,67,126,166,212,28,2,128,75,101,100,140,214,215,30,126,76,139,46,187,146,35,57,68,206,159,127,177,190,250,205,239,40,61,227,244,31,156,108,105,
30,218,215,218,10,70,143,213,77,165,21,222,184,18,46,47,147,109,121,105,87,110,75,225,178,114,215,126,250,49,163,146,244,240,85,139,117,233,212,98,138,133,65,53,135,0,224,50,227,198,231,235,235,143,60,161,169,133,69,28,197,33,54,101,234,52,61,244,232,
247,53,97,98,193,105,253,255,205,205,7,135,252,51,220,90,54,71,19,210,71,155,223,217,73,73,10,23,21,122,230,220,10,21,78,145,157,230,206,69,184,242,211,51,244,200,213,55,104,234,152,76,138,132,129,53,135,0,224,18,69,197,51,244,213,135,30,99,67,136,225,
188,210,25,155,169,7,190,241,168,166,156,70,192,106,105,26,250,193,24,240,249,116,231,252,133,158,120,176,42,58,173,72,209,36,243,119,55,139,38,36,40,90,236,206,43,231,25,89,57,122,248,170,197,26,155,148,76,113,48,180,230,16,0,92,96,86,249,108,221,255,
224,195,198,47,229,235,4,201,201,41,250,242,131,15,157,242,117,202,225,74,227,133,99,179,116,253,140,89,230,119,180,223,175,240,172,50,227,155,25,46,47,147,2,65,215,125,238,138,188,124,61,120,197,251,141,95,202,151,154,67,0,112,180,210,89,21,250,252,
23,31,224,97,191,17,52,106,84,146,238,251,202,55,84,60,125,230,9,255,159,166,131,7,21,141,14,207,50,190,31,172,56,71,121,169,105,198,247,179,157,147,163,72,94,158,177,237,139,228,230,200,206,117,95,251,202,243,198,235,75,139,222,199,195,126,30,170,57,
4,0,7,42,41,45,211,61,95,226,203,63,22,18,18,18,117,239,253,15,106,226,164,227,223,159,27,24,232,31,150,77,63,36,41,206,31,208,103,230,95,226,137,117,243,194,165,165,178,13,252,162,177,125,62,87,206,112,148,229,142,211,125,124,249,123,174,230,16,0,28,
102,242,148,66,221,123,223,131,103,181,122,20,206,78,82,82,178,190,244,149,111,42,59,39,247,184,255,253,224,254,125,195,246,183,103,100,229,232,234,226,153,94,184,244,81,164,216,188,167,203,195,197,197,210,40,119,61,227,80,56,54,75,247,45,186,202,83,
155,248,80,115,8,0,142,147,153,149,173,47,220,255,53,37,176,182,118,204,101,100,140,214,253,15,60,164,228,228,148,247,252,183,3,7,134,119,48,126,120,206,121,202,58,206,223,53,77,100,202,84,69,82,204,105,103,52,37,89,145,66,119,45,206,149,147,146,170,
47,95,122,149,226,89,77,212,211,53,135,0,16,99,201,201,41,186,239,43,223,28,212,251,161,24,94,217,57,185,186,251,222,251,101,189,235,221,245,3,251,246,14,235,223,77,8,4,116,199,5,11,205,239,96,191,239,173,135,229,12,17,42,47,151,229,115,207,20,122,106,
124,130,190,114,217,53,108,230,67,205,33,0,196,146,101,249,116,247,189,247,43,111,220,120,142,146,195,204,44,45,215,71,62,246,169,191,249,119,123,247,238,25,246,191,91,150,59,78,151,23,78,55,191,131,199,102,42,50,33,223,245,205,8,231,79,144,198,186,231,
157,121,191,229,211,189,11,175,240,196,67,167,212,28,56,58,0,124,232,31,63,166,153,165,229,28,33,135,122,223,53,215,107,193,162,203,255,50,24,27,27,70,228,239,126,244,156,243,53,102,84,146,241,253,27,42,153,41,59,232,222,41,104,59,16,84,164,212,93,207,
109,252,227,220,243,52,51,39,143,193,77,205,33,0,196,210,249,23,46,208,181,215,223,196,209,113,184,127,250,196,237,202,205,27,39,73,234,237,233,209,225,67,173,195,254,55,71,5,227,116,251,249,11,140,239,91,43,33,65,225,25,238,221,45,47,60,179,68,114,209,
27,59,23,21,76,213,117,94,88,115,130,154,3,39,7,128,236,156,92,125,234,246,207,113,100,92,32,33,33,81,159,253,151,47,202,255,246,107,82,123,27,247,140,200,223,157,51,126,130,46,153,50,205,248,254,141,20,20,40,154,158,238,186,207,29,205,200,80,212,69,
155,253,228,165,166,121,227,249,18,106,14,156,28,0,44,203,167,59,239,254,130,18,19,121,0,199,45,38,79,41,212,135,62,242,9,141,205,204,26,209,45,58,63,118,206,124,101,36,154,189,124,174,101,89,10,149,185,235,129,64,91,82,184,162,92,242,185,99,137,17,191,
229,211,221,23,93,170,4,158,248,167,230,120,144,163,206,250,91,110,251,144,10,167,177,203,150,219,92,125,237,98,93,125,237,226,17,253,155,201,241,241,250,228,185,23,233,225,87,151,154,221,185,163,71,43,60,105,146,2,123,220,113,165,19,153,50,69,118,154,
123,102,45,110,43,159,171,194,177,236,41,66,205,97,6,32,166,10,167,21,107,241,141,183,112,68,112,218,206,159,88,160,249,147,166,24,223,206,112,73,137,236,65,238,151,30,11,209,132,4,133,167,187,39,192,23,103,102,123,102,219,105,192,177,1,192,231,243,233,
147,183,223,37,63,211,112,24,164,79,158,123,161,82,227,205,94,33,210,138,139,83,104,166,243,159,168,143,148,150,202,10,198,185,162,79,253,62,159,110,191,96,129,39,118,155,4,28,29,0,174,191,225,150,211,222,7,26,248,107,105,9,137,250,248,188,249,198,183,
211,158,56,81,209,209,163,157,251,229,159,149,165,232,120,247,172,217,113,227,204,114,77,72,31,205,0,2,1,32,150,178,115,114,117,227,45,31,228,72,224,140,93,60,185,80,243,242,39,25,223,206,112,121,185,108,7,94,176,218,150,79,225,114,247,172,217,145,155,
146,166,91,102,205,97,224,128,0,16,235,15,240,143,31,251,52,59,252,225,172,125,250,188,139,148,100,248,126,237,118,90,154,194,83,156,183,174,126,184,184,72,74,114,207,226,76,31,159,55,159,29,254,128,88,7,128,153,179,202,53,103,238,185,28,5,156,181,209,
163,146,244,209,185,231,27,223,206,72,241,116,217,14,218,21,51,154,148,164,72,97,161,107,250,175,44,119,188,230,140,159,192,128,1,98,29,0,62,244,143,159,224,8,96,200,92,86,88,172,138,188,124,163,219,104,5,3,10,149,150,58,231,234,191,172,76,150,75,174,
166,45,203,210,71,60,16,18,1,199,7,128,133,139,174,80,193,228,41,28,1,12,169,219,47,88,160,196,96,208,232,54,218,227,199,43,154,21,251,77,118,34,227,198,201,206,206,118,77,191,93,58,181,72,5,163,199,48,72,128,88,6,0,159,207,167,155,110,229,193,63,12,
189,204,164,100,125,120,206,121,198,183,51,52,171,92,118,12,95,97,179,253,1,133,103,185,103,237,124,191,207,167,91,121,240,15,136,125,0,88,176,232,114,101,103,231,210,251,24,22,87,21,149,152,191,171,91,74,178,34,211,138,98,246,231,195,37,37,82,130,123,
214,95,88,52,165,72,89,201,41,12,14,32,150,1,192,178,124,186,241,3,183,209,243,24,190,115,76,210,103,46,88,168,120,195,23,150,138,20,21,42,26,131,253,16,162,233,233,138,76,118,207,186,29,126,203,167,155,103,205,102,96,0,177,14,0,23,47,92,164,236,28,174,
254,49,188,114,82,82,245,255,42,230,153,221,72,127,64,145,242,145,223,44,40,84,86,38,203,69,43,232,45,156,82,168,108,174,254,129,216,7,128,107,174,187,145,94,199,136,120,255,244,82,21,103,102,27,221,198,104,78,142,34,185,35,23,168,35,5,5,210,104,119,
173,160,119,221,140,89,12,6,224,56,70,116,142,180,164,180,76,147,10,120,242,255,100,14,29,106,213,190,198,61,218,183,119,143,58,143,118,168,167,183,71,189,61,61,234,233,57,38,73,138,143,139,87,92,66,130,18,226,19,20,23,31,175,148,148,84,101,231,228,42,
43,43,71,89,217,217,74,75,207,160,19,223,102,89,150,62,51,255,18,221,245,135,255,81,40,18,49,182,157,161,89,179,228,107,109,149,53,204,109,180,227,226,21,42,153,33,55,173,158,95,150,59,78,147,50,120,242,159,154,131,152,7,128,107,185,250,127,143,214,150,
102,109,88,191,86,27,214,173,209,238,186,157,234,237,237,57,171,223,23,31,31,175,130,201,133,42,158,81,162,233,51,74,53,173,104,186,146,146,147,61,219,191,227,211,210,245,119,101,115,245,244,166,55,205,13,58,163,70,41,92,84,164,224,182,109,195,28,52,
220,179,217,15,87,255,212,28,56,40,0,100,231,228,170,98,206,60,122,92,82,111,111,175,86,44,95,170,87,150,253,73,123,27,27,134,244,119,247,247,247,107,199,246,45,218,177,125,139,126,247,252,179,146,164,41,133,69,186,104,193,34,93,48,127,129,210,51,188,
151,214,111,152,89,166,55,26,235,181,187,237,144,177,109,140,20,78,149,127,239,94,249,186,187,135,231,247,143,205,148,157,239,174,69,150,114,83,210,52,103,252,68,10,14,53,7,177,14,0,151,92,122,165,124,62,159,167,59,187,163,189,93,75,94,248,157,94,90,
242,71,29,59,214,61,98,127,119,119,93,173,118,215,213,234,231,63,253,177,202,42,102,235,210,203,175,210,57,231,94,224,153,227,225,183,124,186,115,254,66,221,253,199,231,21,137,70,205,156,5,240,249,21,46,47,87,220,170,85,67,254,187,109,203,82,56,6,15,
27,158,173,203,10,139,229,245,205,126,169,57,136,121,0,176,44,75,11,22,93,238,217,78,142,68,34,90,182,244,5,61,243,139,167,212,215,215,27,179,207,97,219,81,85,109,218,160,170,77,27,52,113,82,129,110,249,224,63,232,156,121,222,88,26,117,82,198,24,125,
160,180,66,207,86,111,52,182,141,118,102,166,34,227,199,203,191,127,255,16,207,46,76,147,82,220,245,20,189,207,178,180,104,202,52,106,14,53,7,177,14,0,229,179,207,209,152,49,99,61,217,193,123,27,27,244,227,39,191,171,186,157,59,28,245,185,26,247,52,232,
209,111,62,160,130,41,83,245,241,79,221,169,169,133,69,198,31,139,91,103,205,209,218,189,13,106,108,63,98,108,27,195,165,51,229,107,106,150,21,9,15,201,239,139,38,142,82,164,216,125,95,164,115,198,77,208,232,81,73,242,34,106,14,78,59,40,143,196,31,89,
120,233,21,158,236,220,149,43,150,233,222,187,239,112,220,64,252,107,13,187,119,233,190,123,238,210,111,254,251,105,133,195,97,163,143,135,223,231,211,157,243,47,145,207,50,120,98,56,33,81,225,146,25,67,119,37,89,94,38,249,221,183,160,210,162,169,222,
252,114,161,230,192,81,1,32,62,33,65,179,61,246,240,95,52,26,213,51,79,63,165,39,159,248,182,34,17,231,159,224,182,29,213,115,207,254,82,247,223,123,151,154,14,30,48,250,216,76,29,147,169,197,37,101,70,183,49,82,80,160,104,106,218,217,255,158,188,60,
69,115,114,92,215,254,196,96,80,115,61,246,240,31,53,7,142,12,0,231,204,187,64,241,241,241,158,233,208,80,40,164,239,124,235,107,239,60,13,235,38,245,187,235,116,255,23,62,167,134,250,93,70,31,163,219,202,207,209,184,180,116,99,219,103,249,124,10,157,
229,67,123,182,223,175,176,131,182,29,30,140,115,243,11,20,231,146,45,138,169,57,222,168,57,158,13,0,231,95,120,177,103,58,51,18,137,232,7,79,60,170,245,111,190,225,218,54,116,117,30,213,87,190,244,175,218,186,101,179,177,199,41,206,239,215,157,23,44,
116,213,114,182,131,54,102,140,194,147,206,252,42,56,52,125,186,52,106,148,43,155,126,225,36,239,44,54,70,205,129,99,3,64,66,66,162,202,202,189,179,9,199,79,127,252,3,173,89,181,210,245,237,232,235,235,213,55,30,248,162,106,170,43,141,61,86,197,89,57,
186,182,120,166,209,231,99,184,164,68,118,92,112,240,95,42,41,169,138,78,113,231,151,232,168,96,156,202,243,198,83,115,168,57,136,117,0,40,159,61,87,113,113,222,152,254,255,205,127,63,173,151,95,122,209,156,47,143,112,88,143,61,242,117,163,239,207,125,
104,246,185,202,73,73,53,182,125,86,92,188,194,37,131,155,198,183,37,69,42,202,101,185,244,125,237,217,227,242,21,244,200,244,63,53,7,142,14,0,179,231,158,235,137,78,220,92,189,73,207,61,251,75,227,218,117,236,88,183,190,245,141,127,27,209,5,68,70,82,
124,32,160,59,46,88,96,244,98,49,209,9,249,138,14,98,37,182,200,196,137,178,199,184,119,237,124,175,60,252,71,205,129,227,3,64,89,197,28,227,59,176,163,189,93,223,127,236,91,198,182,239,224,129,253,250,254,227,230,182,175,52,103,156,174,152,54,195,224,
17,238,83,184,188,66,246,233,92,253,199,5,21,158,89,226,218,166,90,146,42,242,242,101,58,106,14,28,31,0,38,79,41,84,70,198,104,163,59,47,26,141,234,7,79,60,162,163,71,59,140,110,231,166,13,235,180,98,249,82,99,219,247,145,185,231,107,108,146,185,155,
151,216,233,105,138,156,198,61,253,240,204,153,178,92,124,203,110,234,216,44,165,39,38,82,115,168,57,136,117,0,240,194,213,255,202,21,203,180,185,106,147,39,78,148,159,253,244,223,117,180,163,221,200,182,37,6,131,186,253,252,5,70,31,191,240,244,98,69,
79,242,58,110,116,244,104,69,243,39,184,186,141,94,184,250,167,230,192,21,1,160,164,212,236,197,86,122,122,142,233,153,95,60,229,153,19,165,183,167,71,191,126,230,231,198,182,111,246,184,124,85,140,206,52,182,125,86,48,238,36,239,245,91,10,151,87,72,
46,223,168,101,102,78,30,53,135,154,131,88,7,0,159,207,167,105,69,211,141,238,184,231,159,253,149,241,211,112,239,182,252,165,37,58,176,127,175,177,237,187,54,127,146,236,222,94,99,219,103,231,231,43,146,249,222,61,57,66,133,83,100,167,185,251,109,8,
191,207,167,226,204,108,106,14,53,7,177,14,0,83,11,139,148,144,96,238,189,184,166,131,7,244,226,31,127,231,201,19,230,185,223,60,99,108,219,18,253,1,5,171,171,140,62,126,225,178,114,217,127,181,0,82,52,49,81,209,226,98,215,183,107,218,216,44,197,7,2,
198,30,55,106,14,92,19,0,102,204,156,101,116,167,253,246,185,95,43,18,137,120,242,132,89,253,218,10,181,52,55,25,219,62,127,83,179,172,125,251,204,61,128,41,41,138,20,22,254,37,16,204,42,147,2,65,215,55,107,102,182,217,211,255,212,156,38,193,37,1,160,
168,216,220,215,170,142,180,29,214,235,43,151,123,250,164,249,211,11,191,55,186,125,193,205,213,82,127,191,185,179,0,69,197,138,38,38,42,146,157,35,59,47,215,136,54,21,103,153,59,253,79,205,49,191,230,24,21,0,166,24,188,21,231,146,23,126,239,217,36,254,
103,175,44,95,170,126,131,191,32,173,129,144,2,213,213,230,182,47,224,87,184,188,92,225,114,115,30,212,45,28,155,69,205,161,230,32,214,1,96,204,152,177,74,31,196,202,99,110,210,219,211,163,101,127,122,193,243,39,77,111,79,143,54,172,91,99,116,27,253,
7,14,200,119,240,160,177,237,179,115,114,92,187,217,207,187,101,38,37,43,205,208,103,142,168,57,222,169,57,70,4,128,41,133,230,94,253,175,126,253,85,245,244,28,227,172,145,244,234,43,203,140,111,163,191,178,82,234,31,224,96,115,245,79,205,161,230,16,
0,78,43,0,76,157,102,108,103,189,254,218,43,156,49,111,171,169,222,164,238,238,46,179,7,199,192,128,2,108,81,234,120,83,199,152,187,126,3,53,199,91,53,199,245,1,96,226,164,201,70,118,84,219,225,67,218,190,181,134,51,230,109,209,104,84,27,215,175,53,127,
22,96,239,62,249,154,155,57,224,14,54,105,244,24,35,219,69,205,241,102,205,113,117,0,200,159,96,230,110,92,171,13,216,115,123,168,109,218,176,206,19,237,244,87,86,74,3,33,14,184,67,77,72,55,115,207,17,106,142,119,107,142,43,3,64,124,66,130,198,140,53,
115,58,110,213,74,166,226,222,109,115,213,38,79,60,157,236,235,235,83,96,235,22,14,184,3,37,6,131,198,110,228,68,205,241,110,205,113,101,0,200,207,159,40,159,203,215,19,63,158,246,35,109,218,211,176,155,179,229,93,142,29,235,86,253,238,58,111,12,148,
61,123,100,29,106,229,160,59,240,234,223,50,176,93,212,28,106,142,235,2,192,248,124,51,167,255,107,54,87,113,166,156,192,142,109,222,184,50,182,36,5,54,85,74,33,110,5,56,73,126,186,153,175,28,83,115,168,57,174,11,0,121,227,198,155,57,24,171,55,113,166,
156,192,118,15,13,70,95,79,143,252,219,183,113,208,29,36,119,148,153,211,255,212,28,106,142,235,2,64,86,118,14,105,220,99,118,238,240,214,23,98,96,119,189,116,248,48,7,222,41,1,32,106,102,187,168,57,212,28,215,5,128,236,156,92,227,58,232,192,254,125,
58,210,70,193,63,145,206,206,163,158,235,159,224,166,77,82,36,204,193,143,117,241,106,110,86,78,106,170,113,237,162,230,80,115,152,1,112,136,186,218,237,156,37,167,80,191,123,151,183,6,205,177,99,242,111,223,193,129,143,33,59,52,32,127,101,37,53,135,
154,3,39,4,128,196,81,163,148,146,98,94,26,111,168,231,68,59,149,125,123,247,120,174,205,254,186,58,89,237,237,28,252,24,9,84,215,40,201,231,163,230,80,115,224,132,0,48,214,208,247,255,121,21,231,212,246,239,107,244,92,155,45,73,254,141,27,101,243,78,
242,200,247,125,75,179,2,251,246,82,115,168,57,112,74,0,200,48,116,57,206,61,13,245,156,37,167,28,140,123,61,217,110,127,87,151,2,181,59,57,1,70,210,64,232,173,215,49,169,57,212,28,16,0,134,83,115,211,65,245,246,246,112,150,156,66,211,193,3,158,109,123,
160,182,86,214,209,14,78,130,145,234,239,45,155,229,235,235,163,230,80,115,232,4,39,5,128,209,25,230,13,198,198,198,6,206,144,211,208,215,215,171,174,206,78,143,182,222,86,96,195,38,41,18,229,68,24,102,86,75,139,252,141,123,169,57,240,120,205,113,226,
12,192,24,243,6,99,107,115,19,103,200,105,106,105,241,110,95,249,58,143,202,183,139,91,1,195,26,179,66,3,10,84,86,82,115,64,205,113,98,0,72,75,75,55,111,48,182,182,112,134,156,166,195,30,95,39,63,176,125,135,196,21,201,240,245,239,150,45,242,245,246,
82,115,64,205,113,98,0,72,54,240,117,156,214,22,246,129,63,93,237,71,142,120,186,253,150,109,43,184,105,147,108,219,230,100,24,234,190,109,105,81,96,79,35,53,7,212,28,199,6,128,228,20,227,58,231,16,105,252,180,177,50,151,228,107,111,151,111,23,239,112,
15,37,59,20,86,96,211,38,106,14,168,57,206,158,1,48,113,48,146,198,79,59,141,183,147,198,37,41,184,109,155,212,213,77,71,12,145,192,150,154,119,158,250,167,230,128,154,227,212,0,144,100,214,174,92,93,93,157,234,239,239,231,12,25,68,127,65,178,162,81,
5,170,54,73,81,222,10,56,235,190,108,61,36,255,158,61,212,28,80,115,156,28,0,44,203,167,196,81,163,204,58,185,120,160,107,80,186,25,140,239,240,31,110,147,175,129,215,185,206,74,40,164,64,229,38,89,212,28,80,115,156,29,0,18,18,19,204,59,185,186,187,56,
59,6,161,179,243,40,157,240,87,2,91,183,74,61,44,232,114,54,253,231,59,73,255,81,115,64,205,113,74,0,136,55,112,48,118,49,24,7,163,239,93,175,104,121,157,21,137,156,240,225,53,156,162,239,14,181,158,114,6,133,154,3,106,142,67,2,64,92,124,60,105,220,227,
122,88,190,244,61,252,135,14,201,119,146,123,216,56,142,80,72,129,141,149,39,156,250,167,230,128,154,227,180,25,128,4,19,211,56,247,151,6,85,183,7,6,20,14,135,233,136,119,9,108,174,145,205,149,202,233,135,166,173,219,228,59,141,194,78,205,1,53,199,49,
51,0,220,143,131,52,48,192,19,204,239,102,69,194,10,86,86,209,17,167,227,208,33,249,79,115,39,60,106,14,168,57,78,9,0,193,56,227,58,166,255,4,239,30,227,228,137,28,199,185,170,109,105,150,181,111,31,29,113,50,225,144,226,54,109,58,229,212,63,53,7,212,
28,135,5,0,159,223,103,92,199,132,35,17,206,142,193,166,241,80,136,78,56,129,96,117,181,108,10,252,137,67,210,182,109,178,6,241,214,4,53,7,212,28,167,4,0,159,223,188,193,200,189,165,51,184,136,99,48,158,136,21,10,41,88,93,77,71,28,175,111,14,31,86,96,
119,253,160,126,134,154,3,106,142,99,2,128,121,105,60,194,96,28,180,104,148,43,152,147,94,229,30,60,40,29,59,70,71,188,187,95,234,234,168,57,212,28,106,14,1,128,52,238,238,193,200,242,183,39,61,167,38,77,148,146,146,232,136,119,127,241,205,152,46,157,
246,221,127,106,14,168,57,4,128,225,46,74,17,6,35,131,113,8,251,38,33,65,145,146,82,58,226,56,236,180,116,133,138,138,168,57,212,28,106,142,27,3,128,145,87,37,60,144,115,6,131,209,166,19,78,116,117,87,81,33,197,5,233,136,19,141,183,226,105,138,166,166,
82,115,64,205,113,91,0,48,49,133,89,62,178,17,134,232,203,63,127,130,236,156,28,58,226,164,227,205,175,240,220,57,58,221,91,1,212,28,128,0,48,108,2,129,0,103,7,206,126,108,36,36,40,92,198,212,255,233,176,211,210,21,46,158,70,205,1,92,21,0,12,156,186,
10,248,25,140,24,130,171,255,242,10,89,6,46,90,51,108,253,85,84,164,72,202,169,111,5,80,115,0,102,0,72,227,112,172,200,132,124,217,185,76,253,15,198,159,111,5,216,22,53,7,112,69,0,136,24,248,46,38,131,17,103,195,142,143,87,120,230,44,58,226,76,164,167,
43,50,173,152,154,3,184,33,0,12,244,155,183,33,131,159,193,56,104,113,113,76,117,255,89,168,188,66,138,167,63,206,84,184,120,154,162,169,41,212,28,80,115,156,30,0,250,13,28,140,193,32,175,108,13,86,98,98,34,157,32,41,50,126,188,236,188,92,58,226,44,88,
62,191,66,179,79,124,43,128,154,3,106,142,99,2,128,121,155,156,164,164,164,114,118,12,122,48,142,242,124,31,216,113,241,10,149,49,245,63,36,50,50,20,41,44,162,230,128,154,195,12,192,200,74,78,78,225,236,24,164,248,132,4,207,247,65,168,188,76,86,92,60,
39,195,16,9,79,47,82,244,56,95,140,212,28,80,115,28,18,0,76,188,31,151,76,26,31,148,132,132,68,35,151,103,29,140,200,184,113,178,199,141,227,100,24,66,111,189,21,48,251,61,183,2,168,57,160,230,56,36,0,244,246,246,24,247,90,78,114,10,105,124,48,188,126,
47,46,26,12,42,60,139,169,255,225,96,167,191,247,86,0,53,7,220,255,119,72,0,144,164,222,158,30,163,58,38,133,193,56,184,193,56,202,219,247,226,194,229,229,18,211,145,195,215,191,197,239,189,21,64,205,161,230,192,33,1,160,187,187,203,172,52,206,253,184,
65,201,200,24,227,217,182,71,242,242,100,143,31,207,73,48,140,44,191,95,161,57,127,123,43,128,154,67,205,1,1,96,120,210,120,106,26,11,115,12,66,250,232,209,158,108,183,29,23,84,168,172,140,19,96,118,0,194,99,0,0,22,247,73,68,65,84,100,42,190,34,133,211,
168,57,240,116,205,33,0,140,68,199,248,124,202,204,98,25,215,211,175,205,222,28,140,161,89,101,178,152,250,31,49,225,226,226,119,110,5,80,115,168,57,112,72,0,232,234,236,52,174,115,178,178,25,140,167,107,244,104,239,77,199,69,114,115,101,231,231,115,
240,71,208,95,223,10,160,230,80,115,224,144,0,208,209,209,110,222,96,204,202,230,12,57,77,233,30,75,227,118,32,248,214,131,127,136,197,165,159,34,133,211,168,57,212,28,58,193,41,1,160,189,237,48,105,220,203,53,217,99,105,60,84,54,139,167,254,99,40,92,
92,172,35,199,186,169,57,212,28,56,34,0,180,27,152,198,115,88,207,253,116,229,228,230,121,166,173,145,236,28,217,19,38,112,208,99,200,242,251,213,150,145,78,205,161,230,192,17,1,224,72,155,113,157,51,105,210,100,206,144,211,16,159,144,160,49,99,198,122,
162,173,118,32,160,80,5,83,255,78,112,196,103,81,115,168,57,112,66,0,56,114,196,188,91,0,217,57,185,74,72,96,181,169,83,25,55,206,59,15,194,133,102,205,146,197,10,100,142,208,214,115,140,154,67,205,129,19,2,192,161,214,22,227,150,230,244,249,124,42,152,
60,133,179,228,20,242,60,50,24,35,89,217,178,39,78,228,128,59,196,161,238,46,217,166,21,100,106,14,53,199,141,1,32,28,14,171,189,253,136,113,29,84,48,165,144,179,228,84,105,124,188,249,131,209,246,7,20,102,234,223,81,6,34,17,181,27,56,11,64,205,161,230,
184,46,0,72,82,107,115,147,113,29,52,121,242,84,206,146,83,24,159,111,254,3,113,225,89,165,18,107,143,59,78,179,97,139,1,81,115,168,57,174,13,0,45,45,205,198,117,80,97,209,116,206,146,83,245,209,180,98,163,219,23,205,202,84,116,210,36,14,180,3,181,116,
153,183,24,16,53,135,154,227,206,0,208,116,208,184,14,202,205,27,167,204,76,22,231,56,145,49,99,51,53,218,224,167,113,109,191,95,3,21,179,57,208,14,213,212,117,148,154,67,205,129,19,2,192,129,3,251,140,236,164,89,124,1,156,208,52,195,175,86,194,165,165,
178,152,250,119,172,3,71,59,168,57,212,28,56,33,0,236,219,219,104,230,96,44,159,195,153,114,2,38,79,87,70,198,102,42,90,80,192,65,118,176,189,6,46,7,76,205,241,110,205,113,117,0,104,58,184,95,161,80,200,184,78,154,89,90,38,203,178,56,91,142,163,168,120,
134,145,237,178,253,126,133,103,27,252,212,127,95,159,236,104,196,253,51,0,157,29,138,24,246,250,49,53,199,155,53,199,245,1,32,26,141,170,185,233,128,113,157,148,146,146,170,226,25,51,57,91,222,37,53,53,77,83,166,78,51,178,109,225,153,51,165,164,100,
99,143,157,191,178,82,254,186,93,174,111,71,36,26,213,193,78,243,158,3,160,230,120,175,230,184,62,0,72,210,190,198,61,70,118,212,197,11,47,229,108,121,151,217,115,207,149,207,231,51,174,93,145,177,99,140,126,234,223,106,58,168,64,115,179,2,181,181,210,
49,247,191,71,223,216,113,196,200,227,68,205,241,78,205,49,38,0,212,215,239,50,178,163,206,187,224,34,5,2,1,206,152,191,50,103,222,121,198,181,233,173,169,255,57,146,169,69,38,28,82,160,122,243,91,65,32,18,145,127,243,102,215,55,169,222,192,157,72,169,
57,222,169,57,70,5,128,221,117,59,141,236,168,164,164,100,205,157,119,62,103,204,219,2,129,128,102,149,153,247,164,114,184,164,68,74,74,50,246,184,249,119,212,202,215,219,251,151,227,216,220,44,95,147,187,23,240,170,107,107,165,230,80,115,224,136,25,
128,221,117,198,237,9,240,103,11,22,93,206,25,243,182,217,115,207,85,162,97,155,226,236,233,238,50,251,169,255,206,163,10,28,231,190,191,191,186,90,118,216,189,15,4,238,106,59,100,220,158,0,212,28,111,212,28,227,2,64,111,111,143,154,14,30,48,178,179,
42,102,159,163,220,188,241,156,53,146,46,191,242,26,163,218,211,31,14,235,185,134,58,115,167,254,37,5,171,170,165,227,124,85,250,122,123,21,168,221,238,218,118,245,12,12,168,201,192,7,1,169,57,102,215,28,35,3,128,36,237,170,219,97,102,103,249,124,186,
225,166,91,61,127,210,100,102,102,171,180,172,194,168,54,253,178,114,157,142,132,250,141,61,102,86,99,163,124,109,109,39,252,239,254,186,93,178,92,188,172,110,237,161,22,106,14,53,7,78,8,0,219,182,214,24,219,97,243,47,190,68,99,60,190,12,229,101,87,94,
109,212,147,184,219,91,155,245,135,237,230,158,179,246,64,191,2,53,39,111,159,101,219,242,87,85,185,182,141,91,91,154,140,61,126,212,28,243,106,142,217,1,96,203,102,99,59,44,24,12,234,186,27,110,241,236,9,19,23,23,175,75,46,189,210,152,246,12,68,34,250,
222,234,21,178,109,219,216,99,22,216,178,85,190,211,88,160,203,127,184,77,214,222,189,46,13,0,7,141,61,126,212,28,179,106,142,241,1,160,165,185,73,71,12,125,53,71,146,46,187,226,42,207,222,151,187,230,186,27,148,158,145,97,76,123,126,85,185,206,200,133,
100,222,185,178,111,107,147,191,241,244,151,232,14,214,108,145,61,48,224,186,118,30,236,60,170,246,222,30,106,14,53,7,177,14,0,146,217,183,1,130,113,113,250,216,167,62,227,185,147,37,41,41,89,215,45,190,217,152,246,212,30,106,209,239,183,153,59,91,165,
72,84,254,202,42,13,102,65,89,107,160,95,193,109,219,92,217,220,45,205,6,207,2,80,115,224,166,0,176,185,106,147,209,29,87,58,171,92,243,47,190,196,83,39,203,226,155,110,85,82,178,25,203,227,134,60,48,245,239,219,189,75,254,51,120,176,207,223,208,32,29,
113,223,234,122,85,77,251,169,57,212,28,56,33,0,84,85,174,55,190,243,62,252,145,79,120,230,228,156,56,169,64,87,95,187,216,152,246,60,83,181,94,251,13,221,74,86,146,236,158,30,5,118,156,249,219,56,193,234,106,215,133,163,77,134,110,71,78,205,129,235,
2,64,71,123,187,26,234,119,27,221,121,25,25,163,245,217,187,191,104,252,73,18,8,4,244,153,207,221,171,96,92,156,17,237,169,59,220,170,223,109,173,54,250,152,5,55,215,200,138,156,249,226,62,190,142,14,249,235,235,93,213,230,35,61,199,212,112,164,141,154,
67,205,65,172,3,128,36,85,110,92,103,124,7,150,207,158,171,91,63,248,15,70,183,241,239,63,252,79,154,48,209,140,21,242,194,209,168,190,183,250,85,69,13,158,250,183,154,155,228,111,58,251,251,225,129,173,219,164,190,94,87,181,125,227,129,189,50,29,53,
7,174,8,0,155,54,188,233,137,78,188,225,3,127,167,217,115,231,25,217,182,11,47,94,164,171,12,154,134,251,117,213,6,237,53,116,247,56,73,178,195,145,119,54,251,57,235,32,17,9,43,80,179,197,85,237,223,176,191,81,94,64,205,129,227,3,192,206,218,237,106,
59,124,200,252,78,244,249,116,215,191,126,73,211,13,219,191,187,98,246,57,250,231,59,255,197,152,5,56,118,183,29,214,255,110,169,50,250,92,12,212,110,151,175,103,232,94,135,243,239,223,47,171,213,61,99,120,71,107,179,218,122,142,201,116,212,28,56,62,
0,72,210,155,107,86,121,162,35,19,18,18,245,133,47,127,93,197,211,205,24,144,69,211,75,116,247,61,247,27,179,29,105,36,26,213,19,171,95,81,196,142,26,123,14,90,93,157,242,215,13,253,118,220,129,234,42,217,17,119,108,22,100,75,90,211,88,47,47,160,230,
192,241,1,96,205,234,215,60,211,153,137,137,137,250,226,151,191,166,233,37,165,174,110,199,252,139,47,209,253,15,60,164,248,132,4,99,142,205,179,155,55,170,177,253,136,209,231,159,191,170,74,214,48,60,219,224,235,238,86,160,174,206,53,253,176,122,143,
217,15,31,83,115,224,154,0,80,187,99,155,39,110,3,188,51,32,71,141,210,253,15,60,164,247,93,115,157,43,63,255,223,253,253,63,232,179,119,127,65,241,241,241,198,28,147,134,35,135,245,92,77,165,217,3,121,111,163,252,135,135,239,9,120,127,109,173,116,172,
219,21,125,177,221,35,183,1,168,57,56,235,113,93,82,60,229,129,225,254,35,169,169,105,198,221,171,58,105,167,250,253,170,152,51,79,57,185,227,84,185,105,189,162,46,152,62,205,206,201,213,221,159,191,95,11,23,93,97,212,177,136,68,163,250,234,242,37,58,
98,240,23,130,61,48,160,184,53,107,207,234,181,191,83,177,108,91,86,247,49,69,243,243,93,209,39,105,9,137,154,145,157,75,205,161,230,56,218,161,214,22,173,92,177,204,220,25,0,73,90,177,124,169,39,15,238,69,11,22,233,145,199,126,168,89,229,179,157,123,
229,232,243,105,241,77,183,234,219,79,252,216,200,237,54,159,171,169,84,195,145,195,70,159,103,193,173,219,100,141,192,250,253,254,150,22,249,14,186,99,185,221,151,119,237,144,23,81,115,224,184,25,128,238,238,46,205,156,85,161,204,204,44,207,117,112,
106,106,154,46,94,120,153,38,21,76,81,221,206,29,234,57,230,140,43,81,191,63,160,69,151,93,169,207,254,203,23,117,193,133,11,140,124,240,166,177,253,136,30,123,125,185,209,239,252,171,173,77,193,234,145,91,212,200,58,114,68,209,137,19,37,191,223,209,
221,210,213,223,175,242,188,241,202,76,242,222,50,178,212,28,102,0,78,215,136,29,129,87,94,254,147,167,110,3,188,219,57,231,94,160,178,138,57,90,253,250,171,90,242,199,223,107,79,67,108,30,84,74,75,207,208,194,69,151,235,234,107,23,43,99,244,24,99,251,
59,98,71,245,196,234,21,10,71,205,125,234,223,142,70,21,87,61,178,175,53,250,122,123,229,175,173,85,100,166,243,199,242,178,186,29,154,158,149,67,205,161,230,224,68,129,254,230,235,175,24,145,203,163,96,48,168,31,253,231,175,148,154,150,70,175,75,170,
221,190,85,203,150,190,168,202,141,235,212,117,6,27,182,12,70,122,70,134,206,61,239,66,157,55,255,98,21,79,47,145,223,225,87,111,67,225,127,54,111,210,47,43,205,94,137,210,191,107,151,2,53,177,216,117,211,210,192,162,69,178,211,82,29,221,63,113,254,128,
158,186,249,255,41,37,158,39,203,169,57,206,180,181,166,90,15,126,249,30,243,103,0,66,161,144,94,126,233,69,221,120,243,109,28,117,189,245,206,107,209,244,18,69,163,81,237,222,181,83,213,149,27,180,165,166,90,251,247,54,170,243,44,246,167,143,143,143,
87,222,248,124,21,78,43,214,180,105,211,53,117,90,177,242,198,121,107,31,241,189,29,71,244,235,234,13,70,183,209,238,237,149,63,102,219,246,218,10,84,85,42,180,96,129,163,251,104,32,18,214,210,157,219,245,129,82,238,51,83,115,16,211,25,0,233,173,141,
44,158,252,201,211,220,251,57,133,174,174,78,29,216,191,79,205,77,7,213,211,115,76,125,189,61,234,237,233,85,95,95,175,44,159,165,184,184,120,197,199,39,40,46,46,78,241,9,9,202,24,61,70,153,153,89,202,204,204,86,74,106,170,167,251,46,106,219,186,231,
197,223,170,238,112,171,209,237,12,188,249,166,252,49,126,32,111,96,246,108,217,19,39,58,186,159,198,140,74,210,79,62,240,247,242,91,172,44,71,205,97,6,32,102,51,0,146,212,222,126,68,107,87,191,166,11,23,44,226,200,159,68,74,74,170,138,167,151,168,120,
122,9,157,49,72,191,221,90,101,252,151,191,213,220,28,243,47,127,73,10,212,212,40,148,147,43,197,59,119,199,182,182,158,99,90,189,167,94,23,23,76,101,112,80,115,240,46,35,30,139,127,251,252,179,138,26,252,96,22,98,103,255,209,14,253,186,202,236,169,127,
69,194,35,250,212,255,73,139,71,40,164,192,182,173,142,239,178,231,107,42,101,51,60,128,216,7,128,125,123,247,104,253,186,53,244,60,134,148,109,219,250,222,234,21,26,112,201,154,245,103,202,191,99,167,172,33,220,236,231,172,11,200,158,61,82,91,155,163,
251,108,79,123,155,222,220,219,192,32,1,98,29,0,36,233,185,95,255,146,158,199,144,250,221,182,205,170,61,212,98,118,35,187,186,228,175,219,233,168,143,100,73,10,86,85,201,118,248,172,222,179,213,27,25,36,128,19,2,64,227,158,122,173,127,243,13,122,31,
67,226,96,231,81,61,83,185,222,248,118,6,170,170,135,101,179,159,179,46,34,157,157,242,215,59,123,7,190,250,35,135,181,110,223,30,6,11,16,235,0,32,73,191,250,197,79,21,9,135,57,2,56,43,127,153,250,55,251,92,178,246,237,147,223,193,155,106,5,182,111,147,
221,219,235,232,62,252,249,198,55,205,94,21,18,112,75,0,56,120,96,191,150,47,91,194,17,192,89,249,195,246,26,109,111,109,54,59,228,132,6,20,220,92,227,232,207,104,133,35,10,214,56,251,51,238,63,218,174,151,118,110,103,208,0,177,14,0,146,244,236,127,63,
173,30,15,109,219,137,161,213,220,213,105,252,106,127,146,20,216,186,77,214,64,191,227,63,167,255,192,1,89,173,206,126,14,227,153,170,245,234,13,133,24,60,64,172,3,64,87,231,81,61,255,236,175,56,10,24,252,85,177,164,239,173,94,161,126,195,111,35,89,237,
237,10,52,184,231,9,246,64,101,181,228,224,55,49,142,246,245,234,217,205,60,16,8,196,60,0,72,210,31,255,239,183,49,219,164,2,238,245,194,246,45,218,218,210,100,118,200,177,109,5,54,85,186,171,160,244,28,147,111,103,173,163,63,227,255,109,221,172,61,237,
109,12,34,16,0,98,95,228,162,250,143,31,62,161,136,225,239,111,99,232,180,116,119,233,233,77,107,141,111,167,191,126,183,124,103,177,70,123,204,102,1,106,235,164,238,110,199,126,190,136,29,213,15,215,188,38,155,7,2,65,0,136,189,93,117,181,90,182,244,
5,142,6,78,29,24,37,125,127,245,171,234,51,124,234,223,238,237,85,32,102,155,253,156,29,203,142,42,224,144,213,10,79,164,246,80,139,150,236,220,198,128,2,1,192,9,126,249,179,255,84,211,193,3,28,17,23,9,135,195,234,237,237,85,127,95,223,136,253,205,37,
181,91,85,211,108,254,121,18,172,169,145,21,118,239,172,152,191,181,85,214,254,253,142,254,140,63,223,176,70,77,93,71,25,200,212,28,2,64,172,13,12,244,235,251,143,127,139,181,1,92,34,26,141,234,107,255,118,175,254,225,182,197,250,232,135,62,48,236,251,
139,75,82,107,119,151,126,190,193,252,169,127,171,181,69,254,3,238,15,57,129,154,26,217,33,231,142,231,190,112,88,143,191,254,10,107,3,80,115,8,0,78,176,171,174,86,255,251,220,175,57,42,46,176,228,143,191,211,246,109,91,36,73,161,80,72,175,191,186,124,
216,255,230,15,222,88,169,190,176,225,175,112,69,34,111,61,73,111,66,113,233,235,83,96,135,179,223,187,175,61,212,162,255,217,188,137,1,77,205,33,0,56,193,115,207,254,74,91,107,170,57,50,14,118,240,192,126,61,243,244,83,127,243,239,134,251,25,142,165,
59,183,169,186,105,191,241,125,235,223,89,43,159,65,107,99,248,119,239,146,213,225,236,105,246,103,171,55,106,75,203,65,6,54,53,135,0,16,107,182,29,213,227,143,126,67,109,109,135,57,58,14,20,10,133,244,253,239,62,162,208,187,22,83,57,176,127,159,182,
111,29,158,149,224,14,31,235,214,207,60,48,245,175,174,110,249,107,119,26,213,36,203,150,2,85,149,146,131,55,11,138,216,81,61,186,114,153,142,176,40,25,53,135,0,16,123,157,157,71,245,248,35,95,127,207,1,71,236,253,242,103,63,209,238,186,227,191,231,189,
108,233,139,195,242,55,127,240,198,74,245,132,6,140,239,219,64,117,149,35,55,251,57,235,34,211,222,46,95,99,163,163,63,99,71,111,175,30,89,185,76,17,135,239,106,72,205,25,153,154,67,0,136,177,157,181,219,245,212,127,60,201,17,114,144,53,171,95,211,146,
23,126,127,194,255,190,246,141,215,212,213,57,180,15,230,44,171,219,161,202,131,251,140,239,91,107,255,62,249,15,29,50,182,125,129,173,91,101,247,59,123,57,227,237,173,205,250,241,155,171,24,232,30,175,57,4,0,135,88,190,108,137,126,247,252,179,28,37,
7,216,191,111,175,126,244,253,199,78,250,255,132,195,97,173,124,245,229,33,251,155,109,61,199,244,212,6,15,108,27,61,16,114,252,102,63,103,29,112,66,33,5,182,108,117,252,231,92,186,115,155,158,223,82,201,128,247,104,205,33,0,56,204,51,79,63,165,85,175,
173,224,72,197,80,123,251,17,61,244,213,251,213,215,119,234,237,94,151,253,105,232,30,204,121,114,205,74,245,12,152,63,245,239,223,182,77,86,127,191,249,237,220,219,40,29,118,254,179,61,79,111,124,83,175,55,236,98,224,123,176,230,16,0,28,232,201,39,30,
85,229,198,245,28,173,24,232,235,235,213,183,190,254,111,58,116,232,244,118,121,107,58,184,95,91,183,108,62,235,191,251,202,238,90,109,220,191,215,248,254,181,58,218,21,104,168,247,196,185,100,73,10,86,85,75,17,103,223,103,183,37,125,119,213,43,218,116,
96,31,5,192,67,53,135,0,224,80,145,72,68,143,62,244,128,54,87,243,190,238,72,10,133,66,250,238,183,191,169,250,221,117,131,250,185,151,207,242,245,156,246,222,30,253,116,157,249,83,255,182,109,203,95,233,173,233,102,95,87,167,124,187,157,127,117,29,142,
70,245,208,138,63,169,186,137,213,73,189,80,115,8,0,78,31,144,225,176,190,245,141,175,176,70,192,8,246,247,119,191,253,77,109,218,176,110,208,63,187,246,141,85,234,60,122,230,239,126,63,185,102,165,186,7,60,48,37,94,95,47,127,135,247,150,162,13,236,216,
33,187,167,199,241,159,115,32,18,209,55,94,89,194,26,1,30,168,57,4,0,55,164,195,129,1,125,243,171,247,105,195,186,181,28,185,97,30,136,143,63,250,13,173,127,243,204,174,194,35,145,176,86,174,88,118,70,63,251,106,253,78,173,223,215,104,126,39,247,245,
42,176,213,155,155,209,88,145,136,130,155,221,49,101,219,31,14,235,193,101,47,106,253,254,70,10,131,161,53,135,0,224,166,16,16,10,233,209,135,30,212,43,47,47,229,232,13,199,247,82,95,175,190,243,240,87,207,120,32,254,217,203,47,13,254,253,220,142,222,
94,253,100,221,106,111,92,5,111,174,145,21,241,238,190,23,254,166,38,249,154,155,93,241,89,7,34,97,61,244,202,82,45,223,181,131,2,97,88,205,33,0,184,144,109,71,245,239,63,120,76,207,61,251,75,69,89,184,99,200,28,237,104,215,131,95,190,87,27,55,188,121,
214,191,171,233,224,1,109,169,169,26,212,207,252,104,237,107,234,246,192,211,240,86,139,25,155,253,156,117,8,168,170,150,92,18,130,34,118,84,223,91,253,170,158,173,222,40,182,14,50,167,230,16,0,92,236,55,255,253,180,30,123,228,235,234,117,193,253,68,
167,59,176,127,159,238,187,247,174,19,174,184,117,38,6,179,74,215,235,13,187,180,118,111,131,241,253,108,71,34,10,84,243,28,139,36,249,122,123,228,223,225,174,165,143,159,169,90,175,71,94,125,201,252,77,169,60,80,115,224,242,0,32,73,235,214,174,214,125,
247,222,165,131,7,246,115,52,207,208,154,213,175,233,139,255,250,25,181,182,12,237,148,236,186,53,171,116,180,163,253,212,87,1,125,189,250,15,143,172,192,22,168,219,41,223,49,214,156,127,103,22,160,110,167,212,213,229,170,207,252,70,99,189,238,121,225,
183,58,216,201,67,103,110,173,57,120,123,252,149,20,79,121,192,237,141,232,236,60,170,21,203,151,42,61,61,67,5,83,166,114,84,79,83,40,20,210,47,158,250,177,158,254,217,79,20,14,15,253,84,172,109,219,74,77,77,83,241,244,146,147,254,127,79,172,90,161,93,
109,135,204,239,240,238,110,5,215,109,144,197,36,242,59,44,73,86,87,167,162,19,38,186,234,115,31,237,235,213,242,93,181,202,72,28,165,201,99,198,114,32,93,86,115,156,226,80,107,75,76,31,94,244,153,114,98,245,247,247,235,223,159,124,92,143,62,244,32,175,
131,156,134,134,250,221,250,210,231,239,60,233,58,219,67,225,229,151,94,60,233,115,26,111,52,214,235,141,70,111,44,132,19,168,174,150,101,243,204,202,123,174,66,14,29,150,181,223,125,139,238,244,133,67,250,254,27,175,234,225,87,151,170,171,191,143,3,
233,146,154,3,3,3,192,159,173,127,243,13,221,117,251,63,105,197,242,165,156,4,199,75,224,3,3,122,246,87,63,215,23,255,245,14,53,238,25,254,47,222,150,230,166,19,174,221,208,217,223,167,127,95,251,186,55,174,116,15,28,144,191,181,149,19,240,4,130,155,
107,164,1,119,222,87,95,211,216,160,127,254,237,175,181,124,87,45,115,59,14,175,57,120,87,248,54,225,22,192,187,13,12,12,104,195,186,53,218,178,185,90,147,167,78,83,122,122,6,71,90,82,229,198,245,122,244,225,7,181,110,237,106,217,35,184,237,236,192,64,
191,206,159,127,241,123,254,253,247,86,175,80,221,97,243,191,20,237,208,128,130,111,172,145,21,137,112,18,158,40,32,69,34,82,36,44,59,39,199,149,159,191,63,18,214,155,251,246,168,166,249,128,166,142,205,82,122,66,34,7,213,129,53,199,105,98,125,11,32,
96,242,201,183,99,251,22,125,254,174,79,105,193,37,151,233,150,219,62,172,204,172,108,79,14,194,198,61,13,250,197,127,253,88,53,213,177,89,118,118,221,218,213,234,104,111,87,122,198,95,130,216,218,189,13,90,181,103,183,39,250,63,176,125,187,124,30,120,
189,241,172,175,70,234,235,21,153,48,65,202,112,111,96,223,218,210,164,207,254,223,255,104,209,148,105,186,173,252,28,101,38,37,83,115,28,82,115,224,145,25,128,247,158,140,245,90,250,226,31,212,213,121,84,227,39,76,84,82,82,146,39,14,110,67,253,110,253,
236,63,127,164,167,126,242,228,144,63,109,59,168,43,96,219,86,74,106,170,138,103,204,148,36,117,247,247,235,171,203,95,244,198,171,84,29,29,10,110,170,148,69,173,57,245,44,128,36,95,71,135,34,147,38,201,178,220,221,99,13,71,218,180,164,118,171,58,251,
250,52,33,125,180,70,197,197,81,115,98,88,115,152,1,56,193,152,187,249,250,43,60,117,219,202,178,124,154,127,209,66,189,127,241,7,84,48,121,138,145,109,220,82,83,165,63,252,238,121,85,110,92,231,152,207,148,149,157,163,239,253,232,191,228,243,249,244,
216,235,203,181,178,190,206,248,115,205,182,109,197,173,92,41,95,59,175,37,13,198,64,89,153,236,201,147,205,185,202,178,124,186,168,96,170,22,151,148,169,96,244,24,106,78,12,106,142,83,109,173,169,214,131,95,190,39,102,127,223,232,91,0,199,47,202,81,
173,122,237,21,173,122,237,21,77,43,154,174,75,46,187,82,231,207,191,88,163,70,185,123,86,160,163,189,93,43,87,44,211,203,47,189,168,150,230,38,199,125,190,214,150,102,213,84,87,106,96,236,88,79,124,249,75,146,191,161,158,47,255,51,16,220,182,85,253,
121,121,178,18,18,140,104,79,196,142,234,213,250,157,122,181,126,167,166,103,229,232,210,169,197,186,112,210,20,37,6,131,212,156,17,168,57,101,21,115,24,84,4,128,247,218,89,187,93,59,107,183,235,191,126,242,35,205,59,111,190,206,61,127,190,102,149,207,
81,98,162,59,30,224,57,218,209,174,245,235,214,232,205,55,86,169,102,115,165,227,223,122,88,178,236,69,237,152,52,209,19,231,150,221,215,167,192,182,109,194,224,89,161,176,130,91,182,40,60,119,174,113,109,219,222,218,172,237,173,205,250,207,117,171,116,
222,132,201,58,127,98,129,202,178,243,148,24,31,79,205,25,6,203,150,190,64,0,56,217,88,243,218,45,128,83,38,162,64,64,101,229,115,84,54,123,174,74,102,206,82,254,132,73,142,249,108,161,129,1,237,170,171,213,214,45,213,218,92,85,169,218,29,91,71,244,201,
90,0,212,28,106,14,1,192,51,82,82,222,122,144,100,106,97,145,38,21,76,209,164,130,201,202,24,129,251,120,145,112,88,7,15,238,215,158,134,122,53,212,239,82,253,238,58,213,213,110,87,40,196,26,228,0,53,135,154,3,2,64,76,36,39,167,40,59,55,79,217,217,57,
202,202,206,209,216,204,44,165,166,166,41,37,53,77,41,41,41,74,74,78,81,92,48,78,129,64,64,129,96,80,126,191,95,209,104,84,161,80,72,225,112,72,225,112,88,125,189,189,234,234,234,84,87,231,81,117,117,117,233,104,71,187,90,91,91,212,218,220,164,214,214,
102,181,182,180,40,226,225,237,98,1,80,115,64,0,0,0,0,67,204,71,23,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,128,0,0,0,0,8,0,0,
0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,142,231,255,3,55,250,199,177,55,164,241,111,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* dexedIcon_png = (const char*) temp_binary_data_0;
//================== Switch_32x32.png ==================
static const unsigned char temp_binary_data_1[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,64,8,6,0,0,0,123,142,117,174,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,9,112,72,89,115,0,0,14,195,0,0,14,195,1,199,111,168,100,0,0,2,222,73,68,
65,84,104,67,237,153,77,79,19,81,20,134,177,206,208,66,233,116,166,45,29,98,218,41,165,223,45,138,9,229,163,124,136,11,91,18,117,33,223,110,132,4,113,225,194,53,174,136,63,130,21,236,216,251,31,52,254,13,227,214,144,184,237,250,120,222,59,67,236,144,
178,243,140,49,153,55,121,194,237,123,223,48,151,211,222,233,153,203,72,168,80,161,254,55,117,25,186,139,104,108,140,242,78,1,25,49,189,97,40,26,141,13,101,246,225,35,234,246,54,145,17,147,90,128,145,52,135,178,186,182,78,187,123,251,225,2,194,5,136,
@@ -22,10 +223,10 @@ static const unsigned char temp_binary_data_0[] =
68,52,26,139,221,98,76,29,84,26,134,129,140,152,112,250,65,241,248,196,80,218,124,63,176,44,75,244,132,4,239,47,37,120,223,15,99,133,191,17,203,229,138,232,103,32,60,39,252,247,11,208,52,141,28,52,33,67,120,214,237,209,254,193,107,185,5,68,34,247,187,
57,190,229,118,123,155,67,217,219,63,160,157,221,61,209,127,88,132,10,21,234,47,107,100,228,55,171,12,230,253,182,31,107,115,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* Switch_32x32_png = (const char*) temp_binary_data_0;
const char* Switch_32x32_png = (const char*) temp_binary_data_1;
//================== Switch_48x26.png ==================
static const unsigned char temp_binary_data_1[] =
static const unsigned char temp_binary_data_2[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,48,0,0,0,52,8,6,0,0,0,204,147,187,145,0,0,0,6,98,75,71,68,0,0,0,230,0,0,84,44,23,109,0,0,8,138,73,68,65,84,104,222,237,153,203,146,92,71,17,134,191,204,170,115,122,46,109,100,89,8,73,182,9,155,192,198,
17,108,88,176,100,207,130,61,15,192,139,16,65,240,28,108,216,178,231,21,88,177,99,225,0,54,88,72,8,203,88,30,205,69,211,167,170,50,89,84,157,75,247,140,100,141,199,14,135,35,166,38,58,230,116,247,233,83,121,253,51,243,47,184,89,223,238,146,245,122,253,
35,224,215,223,81,249,255,20,129,119,223,190,127,255,23,63,255,217,79,126,21,52,68,4,220,253,162,166,8,142,79,215,230,142,224,32,2,108,255,102,186,22,104,63,169,159,45,174,139,27,102,142,153,227,14,230,142,91,221,97,126,214,184,15,184,8,120,253,190,148,
@@ -59,10 +260,10 @@ static const unsigned char temp_binary_data_1[] =
170,245,214,237,55,249,225,59,239,112,112,112,192,217,233,233,52,29,93,135,153,123,217,82,160,3,86,237,117,11,184,211,94,183,129,239,181,215,173,198,238,189,206,122,12,252,161,177,119,95,47,51,119,69,2,44,2,107,224,141,166,192,123,192,7,141,16,123,31,
184,15,220,5,30,52,229,199,245,219,147,147,147,223,127,99,204,220,215,172,220,26,120,19,120,183,41,247,33,240,199,147,147,147,191,222,112,46,223,133,245,127,146,199,98,107,0,177,99,238,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* Switch_48x26_png = (const char*) temp_binary_data_1;
const char* Switch_48x26_png = (const char*) temp_binary_data_2;
//================== ButtonUnlabeled_50x30.png ==================
static const unsigned char temp_binary_data_2[] =
static const unsigned char temp_binary_data_3[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,50,0,0,0,60,8,6,0,0,0,36,53,233,193,0,0,7,1,73,68,65,84,120,218,237,152,89,115,84,85,16,199,17,2,162,200,50,36,72,162,147,9,165,24,182,84,48,40,22,123,50,89,36,179,79,112,65,4,67,74,32,9,168,133,143,
190,248,96,41,1,13,202,146,109,88,50,201,100,82,128,154,68,95,172,242,73,191,134,96,197,42,31,228,107,92,187,207,237,190,211,119,155,185,153,12,84,160,50,85,255,234,62,203,61,221,191,219,231,222,153,57,75,150,44,126,22,238,231,25,208,82,208,178,39,68,
75,41,103,211,7,59,107,64,97,208,177,39,68,97,202,121,169,4,41,3,237,121,117,207,91,3,215,102,166,238,95,154,6,161,157,153,249,43,231,79,235,109,101,167,105,142,244,229,117,22,31,116,17,174,237,3,219,7,253,104,47,76,235,234,147,18,227,60,71,182,251,212,
@@ -90,10 +291,10 @@ static const unsigned char temp_binary_data_2[] =
234,97,47,5,140,189,191,119,126,191,197,138,5,241,178,248,163,248,237,229,26,251,81,109,173,82,192,120,134,120,220,32,115,253,255,50,167,255,41,133,64,214,84,84,140,188,25,105,255,187,185,243,248,131,214,147,39,30,180,128,90,79,118,42,191,149,253,174,
78,234,235,52,181,219,186,230,39,199,117,173,125,164,22,200,175,252,229,170,97,39,144,167,230,56,232,169,57,160,91,252,44,148,207,255,202,67,236,221,252,78,22,31,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* ButtonUnlabeled_50x30_png = (const char*) temp_binary_data_2;
const char* ButtonUnlabeled_50x30_png = (const char*) temp_binary_data_3;
//================== Knob_34x34.png ==================
static const unsigned char temp_binary_data_3[] =
static const unsigned char temp_binary_data_4[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,34,0,0,6,96,8,6,0,0,0,27,7,149,159,0,0,50,154,73,68,65,84,120,218,237,221,247,87,215,87,186,47,240,156,115,79,38,55,197,134,8,118,64,58,130,40,72,17,68,122,239,189,87,41,138,32,54,84,84,80,84,236,189,
247,154,88,99,65,177,247,26,77,76,98,98,108,201,76,214,202,111,103,221,123,255,128,204,50,115,223,247,121,30,192,51,51,119,206,36,103,38,223,207,39,201,121,246,90,123,209,249,236,239,254,236,189,191,159,231,181,118,121,227,13,77,191,161,244,175,148,223,
162,220,147,178,13,229,1,93,217,166,235,123,111,117,253,142,197,210,191,81,238,71,217,119,128,173,117,149,155,203,176,53,163,70,120,30,25,61,210,171,99,180,183,87,199,8,15,215,35,46,195,236,215,88,91,91,85,241,239,116,253,238,191,253,220,53,208,231,205,
@@ -280,10 +481,10 @@ static const unsigned char temp_binary_data_3[] =
77,171,124,207,139,98,100,83,196,40,159,6,192,245,171,91,165,48,203,22,207,198,8,7,187,191,60,43,205,72,49,226,54,178,108,113,147,104,209,194,230,105,84,8,7,243,206,74,27,65,183,132,11,33,133,89,48,3,163,232,205,207,180,157,175,93,135,57,72,33,62,186,
119,22,113,49,97,212,232,221,204,219,199,104,184,155,51,98,162,67,209,215,170,207,255,237,221,171,199,238,55,204,156,99,100,55,100,240,171,46,182,242,84,49,82,49,82,49,250,77,166,255,7,121,17,68,51,15,166,168,239,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* Knob_34x34_png = (const char*) temp_binary_data_3;
const char* Knob_34x34_png = (const char*) temp_binary_data_4;
//================== LFO_36_26.png ==================
static const unsigned char temp_binary_data_4[] =
static const unsigned char temp_binary_data_5[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,36,0,0,0,156,8,6,0,0,0,23,153,9,128,0,0,6,109,73,68,65,84,120,218,237,92,123,136,84,85,24,183,44,123,63,169,168,232,101,81,68,4,21,81,66,255,100,6,217,238,206,185,119,52,55,165,39,244,36,130,176,210,
160,168,88,144,94,68,86,235,158,115,238,180,115,207,89,23,45,148,94,246,128,77,49,72,169,68,147,202,48,43,202,178,76,55,50,67,114,181,172,109,250,125,231,158,187,141,53,59,51,123,157,189,119,179,243,131,195,157,157,189,51,247,119,191,243,184,223,239,
251,190,51,163,70,57,56,56,56,84,135,175,197,53,158,230,87,102,207,164,84,218,199,83,226,70,180,223,208,250,88,40,175,202,148,143,37,211,135,182,214,11,197,231,56,238,240,180,188,41,43,50,215,69,150,145,171,189,112,206,137,147,59,219,79,242,84,240,33,
@@ -310,10 +511,10 @@ static const unsigned char temp_binary_data_4[] =
56,228,32,36,63,163,27,161,64,195,48,16,250,187,213,71,200,88,168,100,171,214,75,13,35,68,131,149,72,237,222,58,198,213,94,163,130,230,242,207,80,156,146,126,25,204,121,0,14,14,14,35,21,127,1,145,198,91,134,223,250,76,248,0,0,0,0,73,69,78,68,174,66,96,
130,0,0 };
const char* LFO_36_26_png = (const char*) temp_binary_data_4;
const char* LFO_36_26_png = (const char*) temp_binary_data_5;
//================== Light_14x14.png ==================
static const unsigned char temp_binary_data_5[] =
static const unsigned char temp_binary_data_6[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,14,0,0,0,28,8,6,0,0,0,81,86,142,65,0,0,0,6,98,75,71,68,0,0,0,230,0,0,84,44,23,109,0,0,2,209,73,68,65,84,56,203,213,146,203,111,19,87,20,135,191,59,115,103,236,120,252,8,13,142,19,18,89,136,180,69,168,
60,20,30,18,109,36,216,176,101,211,69,55,149,186,52,255,64,255,0,254,4,182,201,178,93,119,67,54,221,33,36,42,40,175,144,200,60,20,129,148,132,36,216,14,6,143,51,227,204,227,142,47,11,59,144,144,68,8,169,155,206,242,232,124,115,206,253,157,15,254,55,159,
216,175,56,61,93,177,210,233,161,60,64,16,52,219,215,174,205,196,95,4,43,149,171,229,215,75,141,63,83,182,117,9,32,138,212,237,241,163,197,223,102,102,102,87,14,4,167,167,43,150,215,30,191,213,122,183,58,101,73,5,192,219,166,199,234,122,235,110,156,52,
@@ -326,10 +527,10 @@ static const unsigned char temp_binary_data_5[] =
183,14,212,13,165,215,59,15,223,45,203,68,127,151,217,112,76,115,20,54,159,117,88,253,187,233,13,198,221,53,3,106,253,222,64,10,208,26,86,66,40,89,144,29,112,163,220,218,157,134,8,230,228,88,2,50,242,85,39,163,244,211,67,240,192,132,87,118,79,4,45,251,
22,184,30,84,77,208,69,240,187,74,215,106,110,124,52,128,84,6,54,198,160,58,12,11,10,170,233,190,61,98,63,229,52,148,146,94,122,66,131,103,65,221,62,72,185,175,149,252,3,249,209,60,170,202,77,183,53,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* Light_14x14_png = (const char*) temp_binary_data_5;
const char* Light_14x14_png = (const char*) temp_binary_data_6;
//================== Meter_140x8.png ==================
static const unsigned char temp_binary_data_6[] =
static const unsigned char temp_binary_data_7[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,140,0,0,0,16,8,6,0,0,0,196,100,151,6,0,0,1,89,73,68,65,84,120,218,237,152,205,74,195,64,20,133,211,141,174,74,43,21,236,127,10,182,197,133,184,85,215,1,27,17,74,23,198,133,89,233,3,248,48,250,66,77,
147,186,117,209,62,138,136,187,235,157,144,208,97,96,200,116,145,54,166,103,241,49,39,135,36,220,59,28,152,203,88,39,213,42,157,214,235,0,100,114,214,104,144,117,222,233,208,197,96,0,64,38,87,227,241,38,48,126,179,25,3,13,173,211,8,12,52,2,3,141,192,
64,23,49,48,0,24,13,189,15,142,67,51,215,5,32,147,167,233,148,172,244,30,166,197,244,107,53,178,153,93,175,42,69,169,163,136,53,237,163,142,150,122,15,115,107,219,244,216,235,209,139,1,175,255,124,205,131,178,239,137,200,134,200,72,124,36,93,182,219,
@@ -337,10 +538,10 @@ static const unsigned char temp_binary_data_6[] =
104,224,31,194,158,4,154,126,231,172,69,54,190,25,103,56,220,4,134,238,172,24,241,114,170,23,146,142,36,29,228,224,47,115,254,127,164,233,43,52,240,15,97,79,2,77,191,115,73,199,129,193,145,132,35,105,171,35,9,67,47,134,222,173,134,222,244,30,198,99,158,
39,19,242,153,93,175,42,69,169,163,136,53,237,163,14,79,186,135,249,3,16,33,129,174,117,203,43,132,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* Meter_140x8_png = (const char*) temp_binary_data_6;
const char* Meter_140x8_png = (const char*) temp_binary_data_7;
//================== Scaling_36_26.png ==================
static const unsigned char temp_binary_data_7[] =
static const unsigned char temp_binary_data_8[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,36,0,0,0,156,8,6,0,0,0,23,153,9,128,0,0,5,201,73,68,65,84,120,218,237,92,91,143,84,69,16,94,197,75,68,209,168,120,125,48,241,138,215,68,125,23,89,140,36,235,206,57,103,119,117,222,20,81,162,70,12,18,
244,145,32,171,139,24,111,171,238,78,119,159,227,204,233,158,93,118,21,135,7,227,79,0,89,80,76,140,15,42,183,40,222,163,49,17,137,10,202,101,198,175,186,207,4,246,129,4,77,118,186,140,93,73,103,118,178,15,243,77,87,157,174,175,190,170,158,174,174,96,
193,254,75,214,106,157,18,233,202,237,44,176,244,143,171,139,99,157,174,143,181,60,28,231,114,158,87,48,125,70,45,0,144,189,37,45,247,39,90,61,230,13,200,163,89,118,122,108,212,26,128,57,130,245,65,100,178,235,189,129,33,183,0,196,54,172,163,177,22,175,
@@ -364,10 +565,10 @@ static const unsigned char temp_binary_data_7[] =
27,71,242,197,170,226,98,219,86,10,222,80,6,181,31,101,123,175,204,168,35,136,21,255,133,34,220,179,210,186,201,164,203,185,136,13,244,91,102,57,15,57,198,168,77,36,90,177,144,99,220,47,50,169,38,170,135,126,22,73,17,1,60,66,169,128,133,164,215,22,61,
233,174,51,139,221,41,100,225,191,104,166,158,5,32,118,194,57,187,214,66,176,96,39,105,127,3,136,107,241,8,229,27,0,90,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* Scaling_36_26_png = (const char*) temp_binary_data_7;
const char* Scaling_36_26_png = (const char*) temp_binary_data_8;
//================== Slider_26x26.png ==================
static const unsigned char temp_binary_data_8[] =
static const unsigned char temp_binary_data_9[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,26,0,0,0,26,8,6,0,0,0,169,74,76,206,0,0,0,6,98,75,71,68,0,0,0,230,0,0,84,44,23,109,0,0,2,157,73,68,65,84,72,199,229,150,65,111,212,86,16,199,127,243,252,236,221,77,130,68,4,148,74,105,65,81,133,84,42,
33,56,113,172,184,114,234,169,23,14,124,22,62,74,63,70,41,170,90,137,83,175,72,109,69,4,17,80,137,68,172,150,144,44,235,181,159,61,51,61,120,9,40,106,118,183,155,67,15,29,201,146,237,247,252,255,121,222,127,222,216,240,191,138,59,119,190,94,122,238,189,
123,223,205,29,151,69,2,247,239,127,127,187,109,249,220,172,69,21,218,182,197,221,81,109,81,53,154,166,17,240,253,71,143,126,253,109,158,78,92,4,186,116,105,243,65,93,213,119,15,14,142,8,226,228,49,162,170,52,45,4,113,54,207,159,35,198,248,35,112,119,
@@ -380,10 +581,10 @@ static const unsigned char temp_binary_data_8[] =
209,232,232,65,149,210,15,101,85,93,41,203,233,13,119,187,172,234,225,131,247,239,39,226,102,94,1,9,208,211,26,223,220,156,47,92,232,51,26,85,31,46,123,192,117,224,234,63,124,115,4,104,128,103,192,14,208,254,235,159,147,19,145,3,197,156,231,210,12,232,
252,87,241,55,44,143,105,246,6,50,28,31,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* Slider_26x26_png = (const char*) temp_binary_data_8;
const char* Slider_26x26_png = (const char*) temp_binary_data_9;
//================== NotoSans-Regular.ttf ==================
static const unsigned char temp_binary_data_9[] =
static const unsigned char temp_binary_data_10[] =
{ 0,1,0,0,0,17,1,0,0,4,0,16,71,68,69,70,114,119,111,105,0,4,1,248,0,0,1,246,71,80,79,83,237,98,240,38,0,4,3,240,0,0,162,22,71,83,85,66,124,176,53,44,0,4,166,8,0,0,8,92,79,83,47,50,247,201,153,79,0,0,1,152,0,0,0,96,99,109,97,112,88,98,29,225,0,0,39,160,
0,0,14,210,99,118,116,32,25,175,26,197,0,0,64,68,0,0,0,254,102,112,103,109,54,11,22,12,0,0,54,116,0,0,7,180,103,97,115,112,0,22,0,35,0,4,1,232,0,0,0,16,103,108,121,102,170,127,220,169,0,0,102,240,0,3,150,146,104,101,97,100,245,231,74,201,0,0,1,28,0,0,
0,54,104,104,101,97,14,175,12,74,0,0,1,84,0,0,0,36,104,109,116,120,220,134,79,22,0,0,1,248,0,0,37,168,108,111,99,97,16,223,58,96,0,0,65,68,0,0,37,172,109,97,120,112,11,236,5,22,0,0,1,120,0,0,0,32,110,97,109,101,103,90,145,24,0,3,253,132,0,0,4,66,112,
@@ -3989,10 +4190,10 @@ static const unsigned char temp_binary_data_9[] =
9,43,0,4,4,229,4,243,2,96,9,44,0,4,4,229,4,243,2,97,9,45,0,4,4,229,4,244,2,96,9,46,0,4,4,229,4,244,2,97,9,47,0,4,4,231,4,243,2,96,9,48,0,4,4,231,4,243,2,97,9,49,0,4,4,231,4,244,2,96,9,50,0,4,4,231,4,244,2,97,9,55,0,4,4,233,4,229,2,96,9,56,0,4,4,233,4,
229,2,97,9,57,0,4,4,233,4,231,2,96,9,58,0,4,4,233,4,231,2,97,0,2,0,3,1,126,1,126,0,0,1,134,1,134,0,1,1,146,1,146,0,2,0,2,0,12,0,3,0,243,2,55,6,3,0,2,0,2,0,76,0,77,0,0,4,87,4,87,0,2,0,0 };
const char* NotoSansRegular_ttf = (const char*) temp_binary_data_9;
const char* NotoSansRegular_ttf = (const char*) temp_binary_data_10;
//================== NotoSans-Bold.ttf ==================
static const unsigned char temp_binary_data_10[] =
static const unsigned char temp_binary_data_11[] =
{ 0,1,0,0,0,17,1,0,0,4,0,16,71,68,69,70,114,119,111,105,0,4,18,180,0,0,1,246,71,80,79,83,163,246,48,16,0,4,20,172,0,0,163,204,71,83,85,66,124,176,53,44,0,4,184,120,0,0,8,92,79,83,47,50,248,245,156,138,0,0,1,152,0,0,0,96,99,109,97,112,88,98,29,225,0,0,39,
160,0,0,14,210,99,118,116,32,39,8,39,208,0,0,64,212,0,0,1,18,102,112,103,109,54,11,22,12,0,0,54,116,0,0,7,180,103,97,115,112,0,17,0,35,0,4,18,164,0,0,0,16,103,108,121,102,161,3,188,9,0,0,103,148,0,3,166,130,104,101,97,100,246,93,74,203,0,0,1,28,0,0,0,
54,104,104,101,97,15,36,13,50,0,0,1,84,0,0,0,36,104,109,116,120,60,227,229,135,0,0,1,248,0,0,37,168,108,111,99,97,17,55,17,102,0,0,65,232,0,0,37,172,109,97,120,112,12,8,5,21,0,0,1,120,0,0,0,32,110,97,109,101,106,81,151,19,0,4,14,24,0,0,4,108,112,111,
@@ -7642,10 +7843,10 @@ static const unsigned char temp_binary_data_10[] =
0,4,4,231,4,244,2,96,9,50,0,4,4,231,4,244,2,97,9,55,0,4,4,233,4,229,2,96,9,56,0,4,4,233,4,229,2,97,9,57,0,4,4,233,4,231,2,96,9,58,0,4,4,233,4,231,2,97,0,2,0,3,1,126,1,126,0,0,1,134,1,134,0,1,1,146,1,146,0,2,0,2,0,12,0,3,0,243,2,55,6,3,0,2,0,2,0,76,0,
77,0,0,4,87,4,87,0,2,0,0 };
const char* NotoSansBold_ttf = (const char*) temp_binary_data_10;
const char* NotoSansBold_ttf = (const char*) temp_binary_data_11;
//================== builtin_pgm.zip ==================
static const unsigned char temp_binary_data_11[] =
static const unsigned char temp_binary_data_12[] =
{ 80,75,3,4,20,0,0,0,8,0,235,124,51,68,91,179,46,131,152,9,0,0,8,16,0,0,12,0,28,0,68,101,120,101,100,95,48,49,46,115,121,120,85,84,9,0,3,249,55,220,82,77,94,228,82,117,120,11,0,1,4,245,1,0,0,4,20,0,0,0,93,151,219,87,26,217,18,135,139,238,6,26,108,185,5,
161,81,130,45,87,229,38,23,81,80,146,128,8,104,64,32,92,4,21,21,168,100,77,178,214,76,226,36,153,153,117,230,101,254,229,243,118,94,79,237,110,64,152,78,92,43,249,252,85,213,174,221,181,107,87,255,183,2,38,5,140,165,4,38,16,212,39,15,244,15,115,41,141,
201,23,32,192,230,58,0,176,18,136,175,42,60,4,50,171,138,218,126,26,113,188,4,28,32,61,25,122,118,173,1,66,105,185,55,253,143,82,254,101,250,229,107,242,178,105,86,112,208,129,52,147,138,125,39,52,175,204,94,28,223,65,134,128,44,220,9,144,126,111,86,
@@ -8892,10 +9093,10 @@ static const unsigned char temp_binary_data_11[] =
227,193,80,81,117,120,11,0,1,4,245,1,0,0,4,20,0,0,0,80,75,1,2,30,3,20,0,0,0,8,0,198,139,121,66,196,112,97,144,143,10,0,0,8,16,0,0,16,0,24,0,0,0,0,0,0,0,0,0,192,129,57,69,1,0,83,121,110,112,114,101,122,70,77,95,51,50,46,115,121,120,85,84,5,0,3,227,193,
80,81,117,120,11,0,1,4,245,1,0,0,4,20,0,0,0,80,75,5,6,0,0,0,0,33,0,33,0,18,11,0,0,18,80,1,0,0,0,0,0 };
const char* builtin_pgm_zip = (const char*) temp_binary_data_11;
const char* builtin_pgm_zip = (const char*) temp_binary_data_12;
//================== about.png ==================
static const unsigned char temp_binary_data_12[] =
static const unsigned char temp_binary_data_13[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,1,44,0,0,1,64,8,6,0,0,0,6,75,65,84,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,46,35,0,0,46,35,1,120,165,63,118,0,0,0,7,116,73,77,69,7,223,12,27,4,11,5,249,195,188,
93,0,0,32,0,73,68,65,84,120,218,236,157,119,152,85,197,249,199,63,231,220,190,189,247,94,89,122,7,233,29,65,4,236,177,70,77,136,137,141,88,126,150,244,196,36,166,154,152,98,162,49,106,162,6,43,54,80,16,84,122,239,109,129,93,118,217,93,216,222,203,237,
247,158,223,31,203,94,89,216,122,238,221,101,209,249,60,15,143,114,57,103,206,204,59,51,223,51,243,158,153,119,164,27,150,204,83,16,8,4,130,203,0,89,152,64,32,16,8,193,18,8,4,2,33,88,2,129,64,8,150,64,32,16,8,193,18,8,4,2,33,88,2,129,64,8,150,64,32,16,
@@ -9251,260 +9452,245 @@ static const unsigned char temp_binary_data_12[] =
69,16,4,65,130,69,16,4,65,130,69,16,4,9,22,65,16,4,9,22,65,16,4,9,22,65,16,36,88,4,65,16,36,88,4,65,16,36,88,4,65,144,96,17,4,65,144,96,17,4,65,144,96,17,4,65,130,69,16,4,65,130,69,16,4,65,130,69,16,4,9,22,65,16,4,9,22,65,16,4,9,22,65,16,36,88,4,65,16,
36,88,4,65,16,36,88,4,65,144,96,17,4,65,144,96,17,4,65,130,69,16,4,81,69,248,63,125,98,180,101,153,101,182,227,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* about_png = (const char*) temp_binary_data_12;
const char* about_png = (const char*) temp_binary_data_13;
//================== GlobalEditor_864x144.png ==================
static const unsigned char temp_binary_data_13[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,3,96,0,0,0,144,8,6,0,0,0,110,232,8,32,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,9,112,72,89,115,0,0,14,195,0,0,14,195,1,199,111,168,100,0,0,67,75,73,68,65,
84,120,94,237,157,9,152,36,85,149,239,25,71,7,26,92,112,235,215,44,190,65,6,121,46,131,11,208,128,52,34,52,116,45,93,221,244,66,131,208,208,236,32,139,200,38,251,14,54,139,130,32,32,139,195,174,192,115,97,20,7,25,70,6,29,65,118,81,92,16,70,133,39,155,
172,202,34,155,58,51,247,197,47,168,211,117,234,214,201,234,140,170,172,172,204,172,127,124,223,239,203,200,27,247,156,184,247,198,137,136,251,207,123,35,114,153,254,229,111,10,254,182,96,217,130,55,21,188,179,224,93,5,107,22,172,85,176,118,193,212,130,
245,11,54,16,66,136,54,131,107,23,215,48,174,101,92,211,184,182,253,239,130,201,5,111,46,88,174,128,107,32,215,66,93,15,133,24,91,116,62,138,78,66,241,44,60,245,198,195,146,96,32,97,197,130,85,11,62,80,176,97,65,79,193,150,5,219,21,236,84,176,107,193,
110,66,8,209,102,112,237,226,26,182,125,193,130,130,222,130,141,10,184,56,114,97,124,91,193,164,2,174,133,186,30,10,49,182,232,124,20,157,132,226,89,120,234,141,135,101,94,87,128,18,39,24,86,43,88,183,160,239,31,86,91,245,196,174,77,167,221,184,195,182,
243,254,223,81,135,236,155,14,59,112,47,33,132,104,107,14,218,119,183,180,205,150,125,191,235,218,116,195,155,222,183,230,187,207,40,174,117,91,20,172,87,176,122,129,93,20,65,215,67,33,198,24,157,143,162,147,80,60,11,79,29,241,176,204,27,10,24,6,101,
8,116,221,55,174,48,105,251,158,205,55,190,129,32,216,113,219,185,37,221,155,110,32,132,16,29,129,93,215,184,56,206,236,218,248,206,21,150,159,180,99,113,237,99,202,192,223,23,188,189,224,173,5,186,30,10,209,4,116,62,138,78,66,241,44,60,75,137,135,114,
40,148,57,168,255,88,48,107,78,223,230,183,236,186,104,65,232,72,8,33,58,137,133,11,250,210,150,91,116,223,95,92,251,230,22,124,184,128,233,1,220,28,63,88,160,235,161,16,77,68,231,163,232,36,20,207,194,147,197,195,135,10,150,121,99,1,65,49,109,141,119,
191,235,212,79,238,188,77,104,40,132,16,157,200,214,115,187,211,90,239,95,227,210,226,26,56,189,224,253,5,239,43,216,248,31,86,91,85,215,67,33,154,140,206,71,209,73,40,158,133,199,197,195,199,11,202,185,168,188,161,163,183,175,123,147,155,102,110,62,
45,52,18,162,19,88,123,173,255,35,38,40,81,60,192,166,211,214,78,115,251,54,191,183,184,6,242,171,20,243,179,121,123,209,236,153,93,31,215,245,80,180,44,81,140,183,19,81,157,96,36,231,227,244,141,214,77,211,214,251,80,90,127,237,15,132,251,18,98,172,
32,230,166,173,247,193,34,110,215,9,99,83,241,60,177,168,16,15,179,11,150,121,71,1,111,230,88,176,245,188,222,199,35,3,33,218,157,232,68,17,19,147,40,62,230,207,218,236,149,226,26,200,219,167,248,85,106,227,130,109,182,154,219,163,235,161,104,57,162,
152,110,103,162,58,214,123,62,206,248,248,250,101,71,53,242,43,68,179,249,232,212,181,202,152,204,227,84,241,60,49,89,74,60,124,162,160,124,47,61,239,170,223,126,139,158,143,15,201,40,68,187,19,157,24,98,98,147,199,200,199,214,255,96,42,174,129,188,58,
118,70,193,230,5,59,207,238,222,120,72,62,33,198,147,40,150,59,129,188,158,245,158,143,27,78,253,96,232,79,136,241,98,253,117,254,113,72,156,42,158,39,46,195,196,195,14,5,203,76,41,96,72,116,103,9,48,209,137,68,39,133,152,216,228,49,210,127,65,220,163,
128,255,98,129,61,36,192,68,171,17,197,114,39,144,215,179,158,243,113,211,141,214,9,125,9,49,222,124,252,163,31,25,20,171,138,231,137,77,141,120,216,165,96,153,149,10,120,37,226,174,18,96,162,211,136,78,6,33,192,199,73,255,5,113,175,130,153,253,236,41,
1,38,90,137,40,134,59,9,95,215,122,206,71,158,179,136,252,8,49,222,108,176,238,224,81,143,177,136,231,194,135,24,71,162,99,82,139,26,241,192,31,54,151,2,108,3,190,72,128,137,78,35,58,25,132,0,31,39,238,6,217,215,207,94,18,96,162,149,136,98,184,147,240,
117,173,231,124,92,239,35,239,15,253,140,37,107,189,239,31,210,219,86,124,243,146,78,216,88,243,214,183,188,41,189,239,61,171,133,101,17,173,203,58,31,122,239,160,88,29,139,120,38,62,38,45,187,108,90,97,210,36,209,68,222,180,194,10,105,149,149,86,10,
143,73,45,106,196,131,4,152,232,108,162,147,65,8,240,113,34,1,38,90,157,40,134,59,9,95,215,122,206,199,200,199,88,243,150,55,191,177,236,248,46,247,119,127,23,118,206,26,201,242,203,45,247,90,39,123,185,101,195,178,136,214,198,199,234,88,196,243,223,
254,205,223,164,21,223,252,230,244,142,183,189,77,52,145,119,190,253,237,105,245,213,170,255,40,226,143,181,4,152,152,16,68,39,130,16,224,227,68,2,76,180,58,81,12,119,18,190,174,173,42,192,138,114,164,55,46,191,124,122,219,138,43,134,157,179,70,194,62,
96,202,228,201,97,89,68,107,227,99,85,2,172,115,144,0,19,162,78,162,19,65,8,240,113,34,1,38,90,157,40,134,59,9,95,215,86,21,96,175,43,4,88,179,59,189,239,254,251,191,15,203,34,90,27,31,171,18,96,157,67,91,10,176,190,25,27,165,163,15,63,40,157,125,230,
231,135,176,248,248,35,211,188,190,233,161,157,24,204,126,251,236,22,182,225,105,167,156,152,22,110,53,43,180,153,200,68,39,130,16,224,227,68,2,76,180,58,81,12,119,18,190,174,173,42,192,154,221,233,29,105,103,79,140,63,62,86,37,192,58,135,182,20,96,243,
102,109,150,110,254,225,15,210,203,47,191,60,132,123,127,249,243,180,227,194,249,161,157,24,160,119,179,105,233,138,203,47,14,219,240,177,71,31,73,159,217,111,207,208,110,34,19,157,8,66,128,143,19,9,48,209,234,68,49,220,73,248,186,74,128,189,134,4,88,
251,226,99,85,2,172,115,104,91,1,118,199,109,183,164,104,249,237,111,254,51,237,180,112,203,208,78,12,128,0,251,218,149,151,167,255,254,239,255,238,111,185,129,229,153,103,158,78,7,239,191,87,104,55,145,137,78,4,33,192,199,137,4,152,104,117,162,24,238,
36,124,93,37,192,94,67,2,172,125,241,177,42,1,214,57,72,128,77,80,36,192,170,19,157,8,66,128,143,19,9,48,209,234,68,49,220,73,248,186,74,128,189,134,4,88,251,226,99,85,2,172,115,144,0,155,160,72,128,85,39,58,17,132,0,31,39,18,96,162,213,137,98,184,147,
240,117,149,0,123,13,9,176,246,197,199,170,4,88,231,32,1,54,65,145,0,171,78,116,34,8,1,62,78,36,192,68,171,19,197,112,39,225,235,42,1,246,26,18,96,237,139,143,85,9,176,206,65,2,108,130,34,1,86,157,232,68,16,2,124,156,72,128,137,86,39,138,225,78,194,215,
85,2,236,53,36,192,218,23,31,171,18,96,157,131,4,216,4,69,2,172,58,209,137,32,4,248,56,169,231,6,89,164,9,209,52,124,236,65,20,195,157,132,175,171,4,216,107,72,128,181,47,62,86,37,192,58,135,182,21,96,183,223,246,163,126,185,48,120,145,0,171,15,4,216,
85,87,92,42,1,86,129,232,68,16,2,124,156,212,43,192,38,45,187,108,90,97,210,36,33,198,140,55,173,176,66,90,101,165,149,6,197,30,68,49,220,73,248,186,74,128,189,134,4,88,251,226,99,85,2,172,115,104,57,1,182,245,220,158,180,247,30,59,164,35,15,217,63,29,
119,212,33,233,240,131,247,75,123,237,182,40,45,152,211,181,36,207,220,153,211,211,205,55,253,160,95,46,12,94,150,38,192,182,220,98,70,218,125,167,109,211,193,7,236,157,142,57,226,51,229,62,142,56,100,191,180,239,94,59,167,237,182,222,34,205,234,122,
45,144,187,54,89,63,117,117,109,84,155,233,31,29,226,59,167,107,122,65,100,107,244,231,235,221,108,195,178,222,159,220,101,97,58,244,192,79,165,99,143,60,56,29,127,244,107,117,255,212,39,119,74,11,23,204,42,202,245,177,33,254,107,129,64,197,215,97,159,
217,183,172,223,81,135,30,80,214,111,155,45,251,82,79,127,185,17,96,151,95,242,101,9,176,10,68,39,130,16,224,227,164,158,27,164,110,120,162,25,216,13,222,199,30,68,49,220,73,248,186,74,128,189,134,4,88,251,226,99,85,2,172,115,104,25,1,198,159,39,159,
127,206,25,233,238,187,238,72,79,62,241,120,122,241,79,127,74,47,189,244,98,122,225,133,231,211,227,191,127,44,221,126,235,205,233,172,47,156,154,182,219,106,118,41,146,174,191,238,59,161,120,136,4,24,98,227,211,123,237,146,46,185,240,188,116,215,157,
183,165,71,31,125,56,61,247,236,179,233,197,23,7,246,241,244,83,79,166,251,239,187,55,125,247,95,190,149,62,123,220,17,105,171,133,243,82,207,65,123,167,158,19,142,24,66,239,9,135,165,238,79,238,48,172,8,43,5,220,142,91,167,158,227,14,13,125,116,31,121,
64,154,185,85,95,58,240,211,159,76,95,189,236,194,244,147,187,239,76,191,127,236,209,244,252,115,207,13,42,215,83,79,62,153,238,187,247,151,233,154,111,125,163,20,83,91,206,158,17,238,15,16,169,159,63,249,248,116,243,15,191,95,214,241,249,231,159,43,
253,208,150,248,249,217,61,119,167,139,255,233,220,66,128,110,83,10,177,243,206,249,66,250,175,255,250,175,254,150,27,88,36,192,98,162,19,65,8,240,113,34,1,38,90,5,9,48,9,48,67,2,172,125,241,177,42,1,214,57,180,132,0,251,204,126,123,166,31,221,244,131,
244,242,75,47,133,162,138,5,161,128,144,248,247,239,253,107,218,127,159,221,211,85,95,141,167,207,229,2,108,225,86,179,210,69,95,254,82,250,127,15,62,144,94,125,245,149,210,166,214,62,72,255,235,95,255,154,158,125,246,143,229,126,14,62,255,172,212,247,
229,179,210,172,139,206,25,66,239,233,139,83,247,39,182,24,84,143,65,204,237,78,51,23,31,157,250,46,57,55,180,223,185,176,255,202,87,46,73,143,60,252,80,81,174,87,107,150,137,229,181,114,253,37,253,225,153,103,210,117,215,94,83,138,201,124,127,136,170,
107,175,249,231,178,236,180,85,228,143,180,87,94,121,165,20,185,71,31,126,96,58,249,196,163,203,125,231,139,4,88,76,116,34,8,1,62,78,36,192,68,171,32,1,38,1,102,72,128,181,47,62,86,37,192,58,135,113,23,96,251,237,179,91,57,250,19,141,196,68,203,159,255,
252,231,116,235,143,126,152,190,243,173,111,164,191,252,229,47,253,169,3,139,23,96,59,111,191,32,93,251,157,127,78,127,42,132,91,213,133,242,252,234,183,191,73,199,92,251,205,52,187,16,76,91,92,122,222,32,16,81,61,135,31,144,186,250,167,44,122,186,54,
219,48,245,236,191,71,154,121,193,89,161,221,94,87,94,156,110,184,243,214,244,242,203,47,15,43,188,162,133,58,211,94,76,85,180,253,81,223,27,254,237,186,80,76,69,11,62,24,237,67,196,62,247,220,179,253,169,3,139,4,88,76,116,34,8,1,62,78,36,192,68,171,
32,1,38,1,102,72,128,181,47,62,86,37,192,58,135,113,21,96,140,78,49,210,196,168,83,149,5,17,198,20,59,70,133,242,197,4,216,54,243,103,150,211,246,16,57,209,130,240,65,136,224,171,214,254,255,167,224,206,223,61,152,118,251,230,87,75,225,148,139,169,190,
115,79,79,221,187,108,59,180,110,11,231,165,89,95,60,105,72,126,124,236,116,213,197,233,198,95,253,34,253,165,134,224,164,44,86,174,72,96,178,32,14,127,124,231,237,105,239,221,119,72,115,122,55,77,87,92,126,81,205,122,214,90,216,15,109,248,74,32,2,37,
192,98,162,19,65,8,240,113,34,1,38,90,5,9,48,9,48,67,2,172,125,241,177,42,1,214,57,140,171,0,251,194,231,23,151,207,98,213,90,16,88,60,199,244,212,83,79,166,63,254,241,15,75,166,16,178,212,26,57,66,128,237,186,195,39,210,57,103,126,62,61,251,199,63,246,
167,14,94,158,126,250,169,114,202,35,35,64,151,93,124,65,57,117,239,190,95,253,50,28,65,122,181,16,65,87,221,125,71,90,112,217,249,161,160,234,89,124,84,234,218,98,224,185,172,174,162,222,61,71,127,38,205,188,240,236,33,249,231,21,92,122,215,109,233,
229,96,63,212,135,103,223,126,248,131,127,47,4,213,197,101,185,174,187,246,219,69,125,126,29,10,68,4,218,213,95,191,170,124,46,236,225,135,126,215,159,58,116,65,172,49,2,136,168,250,227,31,158,25,52,205,179,86,27,74,128,197,68,39,130,16,224,227,68,2,
76,180,10,18,96,173,43,192,94,255,186,215,165,183,190,229,45,225,113,27,11,36,192,218,23,31,171,18,96,157,195,184,10,176,91,110,254,143,154,34,0,97,134,0,57,233,132,163,210,33,7,236,83,190,177,144,23,72,252,242,23,247,212,28,25,98,65,128,241,22,193,95,
252,252,158,254,148,129,133,125,61,250,200,195,233,244,83,63,155,182,158,215,155,102,110,62,173,124,3,33,193,187,207,39,119,44,95,192,129,200,203,151,199,10,241,119,196,119,174,46,159,231,202,69,213,172,139,206,74,61,251,237,158,186,54,253,104,249,226,
141,238,61,22,165,153,231,157,25,228,59,39,237,127,245,149,233,129,66,76,230,11,229,250,245,127,222,87,62,147,181,213,156,238,242,165,33,148,107,139,222,77,202,231,189,110,188,225,250,82,140,230,203,147,79,62,145,126,126,207,79,66,129,198,130,216,186,
249,135,63,72,167,127,238,179,233,176,131,246,45,223,44,249,165,47,158,150,110,187,229,230,114,91,173,69,2,44,38,58,17,132,0,31,39,18,96,162,85,144,0,107,93,1,246,198,229,151,79,111,91,113,197,240,184,141,5,196,194,26,171,175,30,150,69,180,54,62,86,37,
192,58,135,113,21,96,191,249,245,253,253,93,254,193,11,211,233,120,99,33,175,140,247,249,17,37,188,78,253,214,31,221,84,243,153,177,7,126,251,155,114,100,136,183,255,229,11,35,92,231,127,233,204,82,224,120,191,6,35,103,119,221,113,235,16,81,200,190,174,
46,196,226,188,115,79,31,50,21,145,239,189,103,158,146,186,183,153,147,186,230,23,162,238,115,199,13,201,3,115,11,81,118,217,141,223,11,133,20,111,62,100,52,16,65,24,149,107,207,93,183,79,191,186,247,23,67,202,197,247,90,98,148,253,240,252,91,254,70,
72,216,105,187,45,203,233,153,81,89,88,36,192,98,162,19,65,8,240,113,34,1,38,90,5,9,176,214,21,96,239,89,253,221,233,93,171,172,146,86,158,50,165,41,252,253,187,222,149,54,88,111,106,88,22,209,218,248,88,149,0,235,28,198,85,128,33,150,242,5,81,193,168,
205,214,243,122,66,27,56,230,240,131,210,51,79,63,213,111,49,120,121,226,241,223,167,95,223,127,95,40,86,16,124,59,108,59,47,244,9,8,188,115,207,254,66,56,21,241,167,63,251,105,218,238,184,195,211,204,47,127,113,136,184,234,187,248,220,114,218,97,207,
161,251,165,190,139,134,78,61,196,102,225,73,71,167,59,127,122,119,191,183,129,133,114,221,253,227,59,202,215,235,71,101,50,46,189,232,252,97,71,254,242,133,186,238,181,251,162,208,23,240,63,97,180,83,180,72,128,197,68,39,130,16,224,227,68,2,76,180,10,
18,96,173,43,192,214,122,223,26,165,32,234,233,234,74,125,189,189,99,206,204,158,238,180,246,135,62,16,150,69,180,54,62,86,37,192,58,135,150,19,96,136,159,51,62,127,82,152,223,96,154,222,29,183,221,50,68,100,177,48,122,22,141,126,49,138,245,189,235,191,
155,250,102,108,20,250,52,16,30,60,43,149,47,76,93,220,179,216,214,115,252,161,133,224,250,210,80,145,117,225,217,133,208,138,223,122,216,123,202,177,233,83,135,31,88,254,159,89,190,80,174,111,126,253,202,37,127,0,93,11,166,85,214,251,54,71,218,229,27,
255,247,171,195,214,149,109,140,20,70,109,40,1,22,19,157,8,66,128,143,19,9,48,209,42,72,128,181,174,0,19,162,94,124,172,74,128,117,14,45,37,192,16,3,188,136,130,41,119,81,126,131,169,122,95,191,234,43,161,120,32,45,74,71,232,32,218,62,127,242,241,233,
115,39,29,87,147,175,92,250,79,233,15,133,0,201,23,94,220,81,138,146,237,231,167,190,51,79,9,167,25,70,244,157,115,122,234,217,117,97,58,254,232,67,67,1,197,168,214,127,124,255,134,116,218,41,39,134,229,49,174,186,226,210,242,127,208,234,89,94,122,233,
165,180,248,248,35,195,182,243,156,118,202,9,229,203,60,242,69,2,44,38,58,17,132,0,31,39,18,96,162,85,144,0,147,0,19,237,143,143,85,9,176,206,161,229,4,24,211,226,120,133,124,148,223,232,153,254,209,116,246,153,159,175,249,12,83,180,224,219,94,241,190,
52,34,1,199,75,65,14,63,120,191,212,181,217,180,212,179,223,39,211,172,96,180,43,7,145,214,115,200,167,82,79,209,22,103,159,241,185,112,106,35,11,245,136,202,145,19,149,43,95,200,195,8,94,244,103,205,57,252,151,88,36,234,36,192,98,162,19,65,8,240,113,
210,8,1,54,103,246,244,81,17,249,204,137,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,148,0,147,0,19,237,143,143,85,9,176,206,161,229,4,216,207,238,185,59,205,155,181,89,152,223,115,234,226,
99,107,10,154,177,88,120,81,198,81,135,30,80,238,187,107,246,230,105,230,9,71,134,162,203,211,123,234,113,175,189,152,99,243,105,233,162,47,127,169,146,96,28,233,66,27,50,213,145,23,138,228,109,150,195,11,77,120,189,127,190,72,128,197,68,39,130,16,224,
227,68,2,108,128,200,174,10,145,207,156,200,174,10,145,207,156,200,174,10,145,207,156,200,174,10,145,79,9,48,9,48,209,254,248,88,149,0,235,28,90,78,128,221,125,215,29,229,159,11,71,249,61,159,61,238,136,66,128,13,125,101,252,88,45,94,128,117,207,216,
40,245,28,126,64,248,95,95,6,163,95,51,143,59,36,205,40,218,1,1,118,249,37,95,46,71,224,198,122,161,13,31,121,248,161,240,237,135,57,123,239,177,67,41,182,176,241,139,4,88,76,116,34,8,1,62,78,36,192,6,136,236,170,16,249,204,137,236,170,16,249,204,137,
236,170,16,249,204,137,236,170,16,249,148,0,107,125,1,182,251,206,139,150,172,247,117,79,47,137,182,237,184,221,214,229,247,13,214,89,171,252,62,127,118,79,154,177,201,180,37,219,55,222,112,221,180,205,130,57,229,58,121,200,235,125,181,42,86,86,234,23,
109,31,75,174,191,238,218,65,109,216,170,248,88,149,0,235,28,90,78,128,253,228,238,59,211,220,153,75,23,96,252,63,88,21,1,134,239,103,159,253,99,249,140,217,72,224,255,197,152,178,87,254,215,215,162,5,169,247,139,167,132,194,203,51,235,156,211,83,247,
174,11,83,239,230,27,165,75,46,60,191,166,0,227,153,179,104,159,75,227,149,87,134,214,191,20,96,143,60,148,118,89,180,85,216,110,30,254,251,236,15,207,60,35,1,86,39,209,137,32,4,248,56,145,0,27,32,178,171,66,228,51,39,178,171,66,228,51,39,178,171,66,
228,51,39,178,171,66,228,83,2,172,245,5,216,99,143,62,178,68,40,221,114,243,77,37,172,147,246,179,123,126,90,174,31,123,212,97,233,171,151,95,154,206,63,247,236,242,121,116,68,203,97,7,31,80,10,8,243,115,241,133,23,164,179,206,56,109,137,159,111,124,
237,202,116,205,183,174,46,63,45,79,43,66,61,95,120,254,249,116,215,157,183,167,7,31,124,32,125,255,198,27,74,49,25,229,109,52,190,237,91,25,31,171,18,96,157,67,203,9,176,123,127,249,243,242,45,135,81,126,131,103,192,120,83,98,149,41,136,60,67,245,205,
175,93,145,246,219,123,215,17,177,239,158,59,151,83,35,187,182,232,74,189,199,31,81,215,75,56,202,81,176,147,143,77,189,91,205,42,95,111,31,189,240,130,183,54,50,58,182,223,62,187,133,251,173,5,127,172,28,189,9,146,239,79,63,245,100,57,186,21,181,157,
231,160,79,239,89,142,236,229,139,4,88,76,116,34,8,1,62,78,36,192,6,136,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,148,0,107,125,1,134,176,66,96,33,58,16,78,136,46,4,214,226,19,142,45,5,87,148,255,192,79,239,93,
230,65,64,240,73,58,235,140,230,48,10,230,133,217,253,247,253,170,165,71,121,16,64,136,47,251,78,253,78,59,117,241,160,60,64,251,144,151,145,63,70,204,168,147,141,158,145,150,231,39,221,242,249,116,111,63,156,0,35,157,124,126,187,237,47,79,195,167,229,
175,181,191,90,251,169,7,31,171,18,96,157,67,203,9,176,71,31,125,56,237,178,104,235,48,191,193,31,41,243,182,194,232,207,152,241,145,139,18,22,70,159,174,184,252,226,208,95,189,204,40,95,192,177,71,154,117,193,208,255,2,67,108,69,162,108,230,63,157,149,
122,15,217,55,157,116,202,9,233,197,23,135,190,240,2,81,118,254,57,103,148,255,65,22,237,179,22,156,112,215,252,243,215,195,54,96,63,199,28,113,80,104,231,97,26,103,52,138,38,1,22,19,157,8,66,128,143,19,9,176,1,34,187,42,68,62,115,34,187,42,68,62,115,
34,187,42,68,62,115,34,187,42,68,62,37,192,90,95,128,33,166,24,169,66,132,33,184,24,201,34,141,145,32,58,238,228,177,209,46,132,10,35,96,228,37,221,196,27,249,108,228,12,241,130,176,32,175,97,83,19,91,17,132,137,23,96,140,226,69,163,118,212,17,49,73,
59,80,111,70,203,108,157,186,123,177,74,186,141,2,146,207,196,15,237,64,219,208,198,8,221,90,2,140,54,196,7,62,249,52,145,235,71,22,217,47,105,216,219,200,157,141,80,218,113,195,15,121,115,63,85,241,177,58,22,241,188,252,114,203,165,41,147,39,135,127,
224,45,198,142,85,87,94,57,189,119,205,53,195,99,50,28,254,88,55,76,128,177,188,252,210,75,165,48,136,242,27,243,250,166,151,175,110,143,132,22,130,226,197,23,135,254,15,24,121,111,187,229,166,210,54,242,89,23,139,22,164,190,96,234,33,194,171,247,11,
39,165,222,211,78,72,125,151,156,59,100,59,175,162,223,255,244,147,211,227,79,60,222,95,154,129,133,114,253,219,191,94,91,215,139,71,60,8,54,94,236,17,141,2,34,202,46,187,248,130,82,168,70,182,240,154,136,189,48,20,112,18,96,49,209,137,32,98,248,181,
146,95,112,185,89,241,139,32,55,41,63,69,166,211,240,113,34,1,54,64,100,87,133,200,103,78,100,87,133,200,103,78,100,87,133,200,103,78,100,87,133,200,167,4,88,235,11,48,58,229,116,224,233,168,219,104,9,235,136,3,182,115,45,181,105,135,124,71,4,152,0,67,
80,152,40,64,164,145,198,39,105,172,183,3,220,27,168,171,137,79,234,26,61,15,70,187,48,85,209,190,83,71,27,41,163,221,16,103,172,115,191,177,169,155,128,95,19,116,136,38,196,45,235,180,43,75,36,192,16,83,249,189,138,50,113,92,236,59,251,227,152,96,207,
130,63,210,185,239,153,56,67,88,54,226,158,231,99,117,44,226,121,253,169,83,83,111,119,119,248,7,222,98,236,152,221,215,151,230,207,157,27,30,147,225,240,199,186,161,2,12,65,242,175,223,189,102,88,161,196,20,188,135,31,250,93,191,197,224,229,201,39,159,
72,191,249,245,253,161,56,227,141,127,199,31,125,72,232,115,56,202,209,169,45,102,164,153,199,31,54,100,148,171,20,95,23,156,145,186,247,88,148,186,119,250,68,234,253,210,105,97,158,237,47,248,98,250,201,3,67,235,203,194,159,60,243,124,89,180,239,225,
56,241,216,195,203,215,227,71,203,61,63,249,113,218,113,225,252,208,14,182,219,122,139,196,11,79,162,69,2,44,38,58,17,150,134,221,20,59,1,110,54,118,243,90,26,220,24,185,233,217,47,129,220,44,185,49,181,242,47,177,163,193,199,137,4,216,0,145,93,21,34,
159,57,145,93,21,34,159,57,145,93,21,34,159,57,145,93,21,34,159,18,96,173,47,192,128,142,186,23,13,8,18,68,0,235,92,119,249,206,189,4,49,65,199,223,4,152,217,34,224,76,160,241,73,30,174,191,251,236,185,235,18,49,208,170,152,0,67,168,12,247,34,14,238,
37,214,38,128,24,178,251,139,249,96,157,118,242,117,38,143,141,176,209,46,94,112,97,19,9,48,68,28,254,105,87,187,231,209,246,124,199,151,193,253,12,123,19,127,192,177,49,161,22,249,25,9,62,86,219,33,158,197,216,226,143,245,136,5,24,47,182,136,22,132,
210,153,167,159,156,34,31,8,135,239,254,203,183,194,145,27,22,68,221,213,223,184,42,189,244,82,60,10,118,231,237,183,150,47,159,224,57,178,220,119,14,251,231,79,161,143,60,252,160,52,231,144,125,195,169,135,125,23,158,157,122,142,254,76,234,42,78,128,
25,155,79,75,61,7,127,42,245,93,52,244,63,194,230,92,118,126,186,236,174,91,211,159,131,87,209,83,174,31,254,224,223,211,238,59,109,19,150,195,67,185,121,75,36,207,164,157,119,206,23,210,67,191,123,176,223,203,224,133,169,141,87,125,245,210,180,245,220,
158,33,62,182,156,61,35,93,114,225,121,229,243,103,209,34,1,22,19,157,8,195,193,205,143,11,51,55,0,27,5,242,23,123,126,181,179,95,205,184,144,115,227,36,111,36,82,184,49,141,133,120,177,125,90,25,249,238,247,67,26,229,100,29,1,133,144,34,175,149,155,
237,102,111,54,108,163,51,129,8,195,150,58,219,180,12,242,91,190,209,194,126,240,109,101,176,116,246,233,191,27,180,33,233,86,118,48,219,225,110,252,245,224,227,68,2,108,128,200,174,10,145,207,156,200,174,10,145,207,156,200,174,10,145,207,156,200,174,
10,145,79,9,176,246,232,176,114,205,178,235,44,88,199,222,190,179,206,245,148,123,10,215,44,127,29,101,91,126,111,224,26,103,207,144,97,227,183,181,26,148,223,4,210,112,112,157,246,35,80,181,4,24,105,222,31,237,198,244,63,179,177,246,224,94,199,12,34,
223,206,57,180,51,247,112,187,167,248,253,27,121,249,189,0,51,240,195,61,208,31,183,42,248,88,149,0,19,254,88,143,88,128,69,47,145,176,229,177,199,30,45,5,4,66,0,97,194,75,37,78,249,236,49,229,212,195,87,106,8,7,22,68,221,49,133,96,250,249,61,63,9,125,
147,198,200,207,169,139,143,75,219,127,98,78,218,162,119,147,52,171,107,227,242,153,42,70,221,182,93,48,171,20,104,167,157,114,98,186,238,218,111,167,7,31,248,109,186,254,103,63,73,91,93,60,244,249,46,70,182,102,158,121,114,234,94,56,111,73,157,186,182,
236,75,51,63,119,226,144,81,48,216,239,219,255,55,61,240,204,83,253,37,25,188,240,140,218,173,63,186,169,156,126,185,221,86,179,7,151,107,214,102,105,97,81,46,254,183,11,97,250,189,235,175,45,71,0,17,147,223,255,247,127,171,41,70,95,120,225,249,116,237,
119,254,57,29,117,216,129,105,143,157,23,22,98,114,187,116,204,17,159,73,255,242,237,171,195,255,255,178,69,2,44,38,58,17,134,131,139,48,55,5,110,130,220,32,249,4,191,221,110,32,92,192,249,117,143,95,45,185,89,216,13,3,176,97,27,191,234,213,115,163,170,
23,251,165,148,125,217,141,186,214,205,132,27,58,101,32,63,121,201,199,205,132,250,81,102,132,153,149,25,27,210,177,227,87,63,242,51,117,132,207,70,138,72,218,142,50,81,94,155,138,194,190,249,206,190,40,171,221,92,41,27,211,91,72,183,95,71,185,169,82,
78,190,83,254,252,166,89,5,31,39,18,96,3,68,118,85,136,124,230,68,118,85,136,124,230,68,118,85,136,124,230,68,118,85,136,124,74,128,169,195,218,234,228,247,156,90,228,2,200,223,63,241,97,2,140,251,154,221,75,185,47,144,110,247,29,242,115,95,64,156,98,
207,125,201,238,17,30,236,184,151,0,249,241,73,58,235,54,179,195,238,35,121,249,237,158,201,58,247,28,243,195,40,152,229,169,138,143,85,197,179,240,199,122,196,2,236,156,47,126,62,28,169,178,5,81,194,43,218,249,99,225,167,158,124,178,124,62,12,1,101,
68,11,2,108,231,237,23,148,111,73,124,230,233,167,251,83,135,46,127,250,211,159,210,175,255,243,190,82,244,32,98,24,129,186,235,142,91,139,19,236,222,114,26,35,175,184,103,31,143,63,255,92,58,254,123,215,14,17,83,48,235,203,103,165,158,253,247,72,51,
54,29,24,77,43,95,83,191,231,142,169,239,188,51,135,228,159,119,217,5,233,162,59,110,73,175,252,249,207,97,249,73,123,238,185,103,203,50,220,114,243,127,148,229,186,233,63,110,76,63,46,78,238,255,188,255,190,242,237,134,252,98,99,245,191,249,135,63,72,
39,159,120,116,122,252,241,199,250,61,12,93,200,247,124,81,7,242,240,234,250,23,139,122,219,190,237,51,95,36,192,98,162,19,97,56,184,72,251,11,51,157,127,176,239,254,6,98,162,193,182,241,107,25,159,38,146,44,221,46,254,246,125,52,248,27,133,49,220,205,
36,207,207,148,17,110,100,246,157,27,157,141,36,225,195,151,211,110,142,141,4,255,248,181,155,35,32,164,236,87,70,202,70,25,217,206,141,54,111,55,234,226,203,207,13,210,143,142,85,193,199,137,4,216,0,145,93,21,34,159,57,145,93,21,34,159,57,145,93,21,
34,159,57,145,93,21,34,159,18,96,234,176,182,58,92,159,235,249,97,142,107,179,31,37,100,221,174,215,248,240,179,24,72,103,42,34,215,255,92,96,113,127,64,96,97,207,126,253,253,195,32,157,123,3,247,60,111,143,95,210,185,87,251,145,52,95,126,252,91,57,41,
19,249,41,203,72,71,191,192,199,170,226,89,248,99,61,98,1,198,8,20,34,162,234,194,212,185,7,31,248,77,40,32,16,96,252,9,49,211,236,174,186,226,210,82,180,141,116,193,255,21,63,185,51,205,191,252,130,33,98,170,28,253,90,124,116,234,154,211,53,164,94,93,
51,55,77,61,199,28,18,142,130,109,115,197,69,233,154,95,220,83,115,212,170,222,133,178,209,118,180,225,55,191,126,101,101,127,188,150,159,103,229,162,255,38,147,0,139,137,78,132,225,160,195,95,69,128,249,169,34,38,88,216,142,24,99,187,193,77,193,242,
141,6,202,98,35,71,70,21,1,134,216,241,55,30,182,89,217,240,225,5,207,88,9,48,63,82,200,141,144,31,40,124,91,217,3,208,220,8,41,47,105,86,102,191,14,148,127,164,243,244,125,156,72,128,13,16,217,85,33,242,153,19,217,85,33,242,153,19,217,85,33,242,153,
19,217,85,33,242,41,1,166,14,171,104,127,124,172,182,91,60,115,95,230,94,189,180,105,254,150,207,83,43,15,159,249,54,195,247,9,26,1,253,178,70,245,185,26,133,63,214,35,22,96,112,200,1,251,148,255,253,85,239,130,248,226,255,188,152,74,247,228,19,79,244,
167,14,44,38,192,240,205,243,79,87,126,229,146,242,207,134,171,46,255,243,63,255,147,110,127,232,193,180,243,215,47,27,34,162,160,239,60,254,100,121,219,33,245,89,194,118,91,166,190,179,78,29,98,55,251,226,47,165,69,133,8,251,118,209,249,123,225,79,47,
212,28,133,90,218,98,2,108,254,172,205,203,63,93,102,189,94,95,136,46,70,214,248,47,177,251,238,253,229,16,59,9,176,152,232,68,24,14,46,56,116,242,237,59,191,132,249,135,131,121,78,202,46,50,228,243,23,28,19,44,92,104,70,51,117,97,56,16,95,94,80,1,191,
210,249,253,33,210,44,15,191,226,249,252,94,112,1,35,117,38,34,107,213,167,145,224,63,47,63,101,24,238,151,70,108,172,126,81,249,71,250,43,165,143,147,70,8,48,33,26,129,4,152,4,152,104,127,124,172,182,91,60,243,163,110,61,127,180,77,190,252,7,84,219,
70,126,126,64,165,207,68,58,253,9,251,113,53,167,209,125,13,250,8,254,135,243,86,192,31,235,81,9,48,94,42,113,212,161,7,148,211,236,254,26,188,160,194,22,68,2,211,17,25,237,97,212,103,238,204,233,229,20,189,92,60,120,1,6,228,251,220,73,199,149,254,249,
127,172,122,68,10,226,235,137,23,158,79,39,220,240,221,33,2,10,24,217,234,57,124,255,212,213,253,177,65,117,241,148,47,228,56,104,175,52,235,194,179,67,251,5,95,60,57,157,121,209,121,69,64,221,189,100,106,101,189,11,163,87,4,217,165,23,157,95,62,43,198,
254,246,218,109,81,186,241,134,235,75,129,58,156,47,246,69,187,241,156,27,111,119,228,85,244,249,40,152,4,88,76,116,34,12,7,226,137,227,100,211,15,128,239,8,49,166,18,218,139,41,200,203,69,165,150,96,33,47,23,45,70,103,16,77,126,212,102,52,152,216,98,
158,186,247,203,69,206,70,199,88,55,145,99,229,167,28,92,16,201,143,104,161,62,228,33,175,249,30,174,62,141,34,18,96,148,133,125,115,209,4,68,48,229,70,248,82,110,234,106,54,108,163,254,38,68,105,99,239,171,10,62,78,36,192,68,171,32,1,38,1,38,218,31,
31,171,237,40,192,188,152,226,94,204,61,215,231,1,242,69,253,4,250,81,244,51,232,71,229,219,34,114,31,220,231,125,159,137,117,63,130,198,126,129,117,250,10,244,43,248,180,237,29,45,192,0,17,182,235,14,91,151,255,93,197,203,51,120,214,137,103,149,16,76,
207,63,247,92,122,228,225,135,202,103,180,78,93,124,108,154,63,123,243,37,118,188,134,157,255,246,186,235,206,219,150,192,159,19,47,220,106,214,16,255,139,62,49,183,20,98,215,95,247,157,244,171,123,127,145,158,120,252,247,165,111,246,193,115,104,60,19,
198,119,246,253,219,223,254,58,93,248,157,111,166,45,78,58,58,245,126,246,168,33,244,28,117,80,234,206,246,17,50,175,187,16,106,7,132,62,122,79,60,60,245,238,188,77,218,105,209,86,229,243,106,223,187,254,187,69,144,221,91,62,235,198,51,91,148,11,172,
92,164,255,246,55,191,78,55,255,240,251,229,255,127,29,176,239,30,105,110,246,170,126,94,32,194,115,117,183,223,246,163,242,153,47,94,194,129,15,62,127,255,251,71,203,103,220,206,61,251,11,229,155,36,205,6,33,246,131,27,191,55,168,13,17,114,8,58,239,
91,140,236,162,198,92,112,63,15,157,79,46,62,156,228,172,219,47,65,92,20,252,175,66,249,112,61,23,31,46,2,124,70,191,30,141,6,124,34,92,236,162,131,127,46,58,182,47,63,239,158,114,82,14,43,3,219,168,15,249,253,69,109,105,245,105,4,121,217,12,218,150,
50,82,38,234,68,185,72,227,56,32,194,124,57,107,149,191,42,62,78,36,192,68,171,32,1,38,1,38,218,31,31,171,237,46,192,184,15,243,163,178,207,3,228,139,4,24,125,137,42,63,224,250,188,252,176,10,136,62,43,3,63,194,210,223,177,60,252,112,108,63,212,34,244,
216,78,94,203,211,241,2,204,152,213,245,177,114,116,235,160,79,239,153,142,63,250,208,180,248,248,35,203,55,248,241,6,196,5,115,186,134,188,58,158,63,19,222,114,139,25,131,96,74,158,207,147,195,136,216,14,219,206,75,251,237,179,91,233,155,183,14,158,
116,194,81,165,152,227,251,129,133,176,217,101,209,214,105,139,89,155,165,25,69,80,71,116,21,229,236,10,124,71,116,205,248,88,232,163,100,243,141,202,60,140,68,241,6,70,70,238,14,248,212,238,233,232,195,7,202,117,194,49,135,149,35,132,251,23,229,101,
170,33,207,182,205,220,124,184,63,88,222,48,109,51,127,102,249,95,105,199,30,121,112,217,134,124,242,29,129,22,217,226,115,80,59,22,223,203,255,62,203,242,9,221,168,197,80,242,24,145,0,19,173,130,4,152,4,152,104,127,124,172,182,163,0,67,20,33,98,16,55,
204,252,137,126,144,37,159,159,130,104,207,114,33,132,188,96,227,7,83,251,129,213,210,60,38,192,248,65,213,207,202,193,31,251,229,71,87,75,103,159,246,72,2,126,77,116,33,198,44,125,194,8,48,33,90,157,232,100,16,19,155,60,70,36,192,68,171,32,1,38,1,38,
218,31,31,171,237,42,192,24,249,26,110,38,76,173,17,48,102,173,120,33,133,15,196,146,31,85,243,152,15,158,71,207,95,96,102,207,168,227,15,33,134,176,178,103,201,16,104,140,128,249,252,164,75,128,9,209,66,68,39,132,152,152,68,241,33,1,38,90,5,9,48,9,48,
209,254,248,88,109,71,1,102,98,102,56,106,9,48,70,163,242,63,204,230,145,130,90,62,205,135,77,41,204,183,3,35,93,136,42,70,185,200,71,26,66,204,196,152,71,2,76,136,22,36,58,49,196,196,32,138,7,67,2,76,180,10,18,96,18,96,162,253,241,177,218,201,2,140,
183,37,34,118,12,219,198,243,232,8,43,210,24,197,226,185,174,165,9,48,96,84,139,188,246,2,51,19,91,60,63,142,248,226,205,138,150,151,253,147,198,62,200,63,225,158,1,19,66,136,118,71,2,76,180,10,163,17,96,60,252,238,255,54,163,17,224,51,122,217,13,29,
163,70,254,127,143,175,171,4,152,104,119,124,172,182,91,60,115,190,115,222,71,219,60,228,99,100,203,227,183,35,144,108,228,10,81,84,203,103,62,205,209,94,96,150,191,128,11,123,63,170,6,124,183,145,48,243,207,181,41,207,55,222,248,99,45,1,38,132,16,253,
72,128,137,86,97,52,2,108,184,105,62,35,5,65,103,111,46,181,231,49,128,14,78,52,253,104,164,248,186,74,128,137,118,199,199,170,226,89,248,99,45,1,38,132,16,253,52,66,128,205,153,61,125,84,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,
62,115,34,187,42,68,62,115,34,187,42,68,62,235,21,96,252,202,139,224,242,127,235,144,11,48,203,131,88,2,255,55,19,216,177,205,255,42,109,127,19,97,118,164,177,157,95,161,73,99,186,143,237,211,4,24,159,164,177,221,252,176,14,216,178,13,191,192,58,249,
45,159,199,215,85,29,86,209,238,248,88,85,60,11,127,172,37,192,132,16,162,31,9,176,1,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,235,17,96,8,34,166,255,49,77,135,63,35,183,231,29,16,56,38,192,16,64,188,81,140,215,65,147,
134,88,98,59,219,24,201,178,231,51,16,85,76,15,50,123,222,54,70,126,243,201,58,162,137,60,246,188,7,83,131,72,227,187,229,197,143,141,144,145,151,116,202,200,254,121,176,158,114,242,74,107,191,63,143,175,171,58,172,162,221,241,177,170,120,22,254,88,75,
128,137,113,35,10,78,33,198,154,40,22,13,9,176,1,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,171,78,65,100,100,201,222,28,230,5,152,253,247,142,229,67,140,153,0,227,65,118,27,57,67,72,217,43,163,217,142,168,242,35,101,
38,192,88,247,83,14,73,99,177,109,136,50,251,239,31,4,150,127,155,25,251,102,59,235,136,180,232,79,93,125,93,213,97,21,237,142,143,85,197,179,240,199,90,2,76,52,157,40,40,133,104,54,81,108,74,128,13,16,217,85,33,242,153,19,217,85,33,242,153,19,217,85,
33,242,153,19,217,85,33,242,89,143,0,99,116,139,55,133,49,194,132,120,50,97,228,5,24,35,78,38,122,128,188,38,192,16,68,150,14,216,219,20,193,252,197,26,195,9,48,239,7,91,202,196,58,2,204,191,12,4,59,243,225,243,121,124,93,213,97,21,237,142,143,85,197,
179,240,199,90,2,76,52,149,40,32,133,24,47,242,248,148,0,27,32,178,171,66,228,51,39,178,171,66,228,51,39,178,171,66,228,51,39,178,171,66,228,179,30,1,198,84,62,70,184,88,231,13,98,145,0,99,244,203,242,128,61,191,197,186,23,68,8,47,182,177,30,137,163,
92,128,217,91,201,72,243,130,44,23,96,126,244,77,2,76,76,52,124,172,42,158,133,63,214,18,96,162,169,68,1,41,196,120,145,199,167,4,216,0,145,93,21,34,159,57,145,93,21,34,159,57,145,93,21,34,159,57,145,93,21,34,159,245,8,48,132,21,35,92,188,174,25,49,227,
5,148,9,48,166,24,34,124,16,67,76,249,99,221,4,24,246,228,227,21,209,124,218,159,153,46,77,128,177,13,97,229,95,194,97,249,36,192,132,24,192,199,170,226,89,248,99,45,1,38,154,70,20,140,66,140,55,62,70,37,192,6,136,236,170,16,249,204,137,236,170,16,249,
204,137,236,170,16,249,204,137,236,170,16,249,172,247,25,48,166,23,34,164,236,109,131,164,49,154,229,223,106,200,58,66,136,81,50,166,22,250,255,219,97,157,109,254,213,242,216,219,179,97,134,189,5,209,182,35,218,176,33,205,251,243,182,148,201,4,23,144,
207,251,200,247,1,190,174,234,176,138,118,199,199,170,226,89,248,99,45,1,38,154,70,20,140,66,140,55,62,70,37,192,6,136,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,172,250,18,142,90,32,130,76,232,228,163,85,173,
136,175,171,58,172,162,221,241,177,170,120,22,254,88,75,128,137,166,17,5,163,16,227,141,143,81,9,176,1,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,27,37,192,24,185,226,109,135,76,33,100,244,203,143,116,181,34,190,174,234,
176,138,118,199,199,170,226,89,248,99,45,1,38,154,70,20,140,66,140,55,62,70,37,192,6,136,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,108,148,0,107,55,124,93,213,97,21,237,142,143,85,197,179,240,199,90,2,76,52,141,
40,24,133,24,111,124,140,74,128,13,16,217,85,33,242,153,19,217,85,33,242,153,19,217,85,33,242,153,19,217,85,33,242,41,1,166,14,171,104,127,124,172,42,158,133,63,214,18,96,162,105,68,193,40,196,120,227,99,84,2,108,128,200,174,10,145,207,156,200,174,10,
145,207,156,200,174,10,145,207,156,200,174,10,145,79,9,48,117,88,69,251,227,99,85,241,44,252,177,150,0,19,77,35,10,70,33,198,27,31,163,141,16,96,66,52,2,9,48,117,88,69,251,227,99,85,241,44,252,177,150,0,19,77,35,10,70,33,198,27,31,163,18,96,162,85,144,
0,83,135,85,180,63,62,86,21,207,194,31,107,9,48,209,52,162,96,20,98,188,241,49,42,1,38,90,5,9,48,117,88,69,251,227,99,85,241,44,252,177,150,0,19,77,35,10,70,33,198,27,31,163,18,96,162,85,144,0,83,135,85,180,63,62,86,21,207,194,31,107,9,48,209,52,162,
96,20,98,188,241,49,42,1,38,90,5,9,48,117,88,69,251,227,99,85,241,44,252,177,150,0,19,77,35,10,70,33,198,27,31,163,18,96,162,85,144,0,83,135,85,180,63,62,86,21,207,194,31,107,9,48,209,52,162,96,20,98,188,241,49,42,1,38,90,5,9,48,117,88,69,251,227,99,
85,241,44,252,177,150,0,19,77,35,10,70,33,198,27,31,163,18,96,162,85,144,0,83,135,85,180,63,62,86,21,207,194,31,107,9,48,209,52,162,96,20,98,188,241,49,42,1,38,90,5,9,48,117,88,69,251,227,99,85,241,44,252,177,150,0,19,77,35,10,70,33,198,27,31,163,141,
16,96,115,102,79,31,21,145,207,156,200,174,10,145,207,156,200,174,10,145,207,156,200,174,10,145,207,156,200,174,10,145,207,156,200,174,10,145,79,9,48,117,88,69,251,227,99,85,241,44,252,177,150,0,19,77,35,10,70,33,198,27,31,163,18,96,3,68,118,85,136,124,
230,68,118,85,136,124,230,68,118,85,136,124,230,68,118,85,136,124,74,128,169,195,42,218,31,31,171,138,103,225,143,181,4,152,104,26,81,48,10,49,222,248,24,149,0,27,32,178,171,66,228,51,39,178,171,66,228,51,39,178,171,66,228,51,39,178,171,66,228,83,2,76,
29,86,209,254,248,88,85,60,11,127,172,37,192,68,211,136,130,81,136,241,198,199,168,4,216,0,145,93,21,34,159,57,145,93,21,34,159,57,145,93,21,34,159,57,145,93,21,34,159,18,96,234,176,138,246,199,199,170,226,89,248,99,45,1,38,154,70,20,140,66,140,55,62,
70,37,192,6,136,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,148,0,107,191,14,235,177,71,29,150,246,217,115,215,112,155,152,152,248,88,149,0,19,254,88,75,128,137,166,17,5,163,16,227,141,143,81,9,176,1,34,187,42,
68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,37,192,218,175,195,122,254,185,103,151,34,44,218,86,133,122,132,220,120,138,189,13,214,89,43,237,190,243,162,180,227,118,91,15,217,54,127,118,79,218,102,193,156,33,233,125,221,211,7,229,
103,29,31,164,251,124,141,100,227,13,215,45,203,147,167,177,95,234,224,211,173,78,108,231,59,229,170,85,199,42,248,88,149,0,19,254,88,75,128,137,166,17,5,163,16,227,141,143,81,9,176,1,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,
42,68,62,37,192,26,211,97,157,177,201,180,178,35,109,29,113,58,218,8,4,235,96,215,234,160,99,23,165,231,130,193,210,241,217,40,1,86,143,159,70,237,107,36,208,6,47,60,255,124,186,235,206,219,211,131,15,62,144,190,127,227,13,75,132,203,53,223,186,58,189,
250,234,171,67,218,143,188,143,61,250,200,146,239,172,255,236,158,159,46,241,241,141,175,93,185,196,71,163,160,141,240,237,211,56,86,44,167,157,186,120,80,58,109,201,194,118,190,99,75,25,41,31,220,127,223,175,70,36,198,124,172,74,128,9,127,172,37,192,
68,211,136,130,81,136,241,198,199,168,4,216,0,145,93,21,34,159,57,145,93,21,34,159,57,145,93,21,34,159,57,145,93,21,34,159,18,96,163,239,176,30,248,233,189,211,45,55,223,84,118,166,175,191,238,218,82,20,32,30,232,88,35,26,46,190,240,130,114,221,58,221,
108,167,163,77,58,118,139,79,56,182,76,71,180,33,22,190,122,249,165,75,236,44,29,123,68,7,254,233,236,143,84,20,153,80,140,132,156,137,69,63,106,147,231,193,206,231,193,198,139,69,196,77,52,50,53,18,240,139,40,177,239,180,139,9,26,218,130,109,94,224,
88,126,218,202,210,88,247,229,67,128,209,182,246,189,17,112,60,40,143,29,95,96,221,4,149,207,75,26,88,94,218,23,108,59,226,235,233,167,159,26,34,44,151,134,143,85,9,48,225,143,181,4,152,104,26,81,48,10,49,222,248,24,149,0,27,32,178,171,66,228,51,39,178,
171,66,228,51,39,178,171,66,228,51,39,178,171,66,228,83,2,108,244,29,86,132,1,120,225,66,167,159,17,26,75,67,164,209,249,103,29,65,99,194,1,193,98,163,39,228,201,69,23,159,116,214,189,104,160,3,63,18,1,102,62,35,33,135,104,66,44,32,6,114,129,96,121,40,
31,245,36,13,63,38,230,16,145,182,143,179,206,56,109,73,29,70,75,46,192,240,109,109,72,29,40,151,23,56,236,151,180,225,4,24,235,44,141,26,5,99,122,38,109,73,59,240,105,233,124,55,145,104,130,148,81,80,218,202,242,147,150,11,48,160,30,38,202,235,197,199,
170,4,152,240,199,186,46,1,86,164,9,81,55,62,118,60,81,48,10,49,222,248,24,149,0,27,32,178,171,66,228,51,39,178,171,66,228,51,39,178,171,66,228,51,39,178,171,66,228,83,2,108,244,29,86,58,243,116,154,17,52,214,153,166,163,111,194,202,190,155,88,160,3,
206,58,157,115,131,116,196,13,54,62,29,145,131,240,240,157,116,19,26,246,189,94,16,11,136,2,251,142,127,243,131,176,49,81,192,40,140,229,99,191,209,190,40,235,97,7,31,80,174,83,102,19,57,212,43,159,110,57,82,240,137,128,162,12,212,153,145,33,155,158,
71,249,40,47,117,48,129,67,57,216,247,112,2,12,40,227,104,159,185,50,16,198,246,140,28,251,183,145,43,19,96,180,29,109,69,26,117,160,205,40,243,112,2,44,74,91,26,62,86,37,192,132,63,214,117,11,176,73,203,46,155,86,152,52,73,136,154,188,105,133,21,210,
42,43,173,52,40,118,60,81,48,10,49,222,248,24,149,0,27,32,178,171,66,228,51,39,178,171,66,228,51,39,178,171,66,228,51,39,178,171,66,228,83,2,172,113,29,86,132,24,35,28,140,20,209,233,103,241,35,96,38,106,24,253,66,84,121,91,240,35,60,30,108,253,232,10,
157,254,145,8,48,58,245,126,202,158,23,114,8,21,19,125,96,251,195,198,242,216,104,15,219,201,111,233,248,196,23,226,135,41,148,164,53,2,19,96,180,75,46,152,76,128,153,192,161,141,104,59,179,177,124,145,0,27,201,20,191,8,124,48,202,105,109,134,95,107,
95,19,96,54,234,104,35,157,124,39,239,112,2,140,237,26,1,19,163,193,31,235,186,4,216,210,58,28,66,64,173,14,131,17,5,163,16,227,141,143,81,9,176,1,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,37,192,70,223,97,69,4,208,97,
102,116,131,209,21,58,230,116,250,121,129,4,98,137,78,57,157,112,27,49,98,59,157,113,58,222,136,26,235,108,91,58,130,130,116,19,105,116,218,45,63,66,7,95,38,126,170,96,83,8,237,187,23,114,38,104,108,155,97,2,204,202,96,130,210,70,119,88,71,92,80,111,
202,86,85,56,12,7,109,136,24,137,182,89,121,77,224,32,124,17,105,75,19,96,148,185,81,34,209,132,167,125,71,128,210,14,172,155,0,99,157,79,48,113,61,156,0,163,172,136,186,170,163,136,62,86,155,33,192,104,119,98,169,214,241,105,20,180,7,162,159,216,163,
109,163,31,46,26,9,49,68,44,81,47,226,100,172,247,231,33,14,124,236,142,6,127,172,37,192,68,195,144,0,19,237,136,143,209,70,8,48,33,26,129,4,216,232,59,172,116,150,233,216,35,62,172,227,108,226,129,233,113,116,172,114,113,131,216,162,115,7,254,165,21,
164,211,177,199,198,143,250,208,225,101,31,136,40,242,128,109,171,23,132,18,29,60,246,73,231,153,17,27,19,81,236,139,109,38,36,45,157,114,216,186,109,199,158,14,177,165,3,226,130,237,38,208,26,129,181,97,180,205,4,152,173,83,30,214,177,241,157,88,214,
169,43,176,78,167,154,60,182,125,52,176,207,92,40,225,159,182,244,2,140,117,22,59,158,185,0,227,187,125,34,218,77,168,87,193,199,106,51,4,24,245,108,134,0,35,102,173,173,76,108,143,36,246,235,5,223,62,62,16,125,254,252,28,43,136,13,132,166,143,221,209,
224,143,181,4,152,104,24,18,96,162,29,241,49,42,1,38,90,5,9,176,177,233,176,14,39,30,198,19,19,114,140,176,229,66,14,49,129,16,64,0,122,33,105,121,88,103,27,34,144,142,177,183,197,167,9,142,70,65,89,107,117,126,41,31,101,96,157,114,88,121,177,241,194,
213,196,144,97,233,163,37,223,143,65,27,1,101,243,226,204,239,155,58,89,217,201,235,203,103,233,85,241,177,218,12,1,70,155,83,246,102,199,184,9,220,104,91,163,225,24,243,35,133,63,142,99,1,251,177,31,6,36,192,68,75,35,1,38,218,17,31,163,18,96,162,85,
144,0,27,155,14,43,29,84,70,8,162,109,157,6,29,200,102,141,20,136,24,31,171,205,16,96,208,108,1,70,124,17,103,196,91,180,189,81,176,31,70,116,217,215,72,70,35,171,194,190,216,143,4,152,104,121,36,192,68,59,226,99,84,2,76,180,10,18,96,205,235,176,118,
34,140,124,209,9,247,211,17,69,243,241,177,218,137,2,140,125,53,75,228,243,227,9,35,196,140,6,179,79,246,29,229,107,4,140,38,219,200,177,4,152,104,121,26,37,192,56,145,27,253,128,37,115,120,253,180,140,70,195,47,63,181,46,64,249,179,4,30,123,163,21,101,
179,245,145,128,255,145,78,145,152,232,248,24,149,0,19,173,130,4,152,4,152,104,127,124,172,118,154,0,107,166,248,202,97,116,170,209,253,68,143,189,92,132,118,100,26,162,189,85,51,202,91,5,127,172,37,192,68,195,104,148,0,99,190,117,163,231,172,243,235,
197,88,254,90,194,92,228,90,101,38,221,207,51,247,216,175,42,35,253,133,133,11,144,93,36,248,228,151,161,40,159,168,141,143,81,9,48,209,42,72,128,73,128,137,246,199,199,106,39,9,176,102,139,47,255,188,23,63,54,55,115,223,35,237,159,69,248,99,45,1,38,
26,198,88,9,48,70,135,252,67,176,124,230,39,158,23,56,108,203,31,6,29,169,0,99,95,216,113,242,179,15,202,66,26,235,249,5,193,151,9,27,203,147,11,48,242,241,29,155,90,2,140,17,53,242,12,87,102,222,122,197,69,168,209,243,174,235,173,179,65,186,213,199,
210,200,103,117,136,30,204,181,7,176,135,171,95,179,240,49,42,1,38,90,5,9,48,9,48,209,254,248,88,237,36,1,70,191,38,95,106,253,8,221,8,248,177,153,55,81,218,15,206,99,57,250,149,147,247,207,70,131,63,214,18,96,162,97,140,133,0,163,243,207,9,199,127,122,
240,31,16,60,16,73,199,158,55,224,88,135,159,206,60,67,196,172,115,82,146,143,252,216,89,158,145,10,48,202,130,31,202,195,131,219,12,75,227,159,117,246,105,255,173,66,62,187,224,81,102,202,199,16,57,255,231,194,190,217,206,54,230,227,243,157,242,217,
168,21,233,254,4,167,126,164,179,15,166,37,214,122,96,28,223,182,255,70,82,111,157,129,58,80,70,234,74,62,234,78,58,182,148,143,116,214,253,205,128,81,58,252,208,6,190,109,198,11,31,163,18,96,162,85,144,0,147,0,19,237,143,143,85,197,179,240,199,90,2,
76,52,140,177,16,96,8,42,123,136,152,206,189,117,228,233,216,91,58,194,0,81,128,112,161,67,111,35,66,116,240,45,15,233,35,21,96,38,140,0,225,192,235,126,89,103,36,11,97,98,249,172,108,236,211,139,38,47,50,200,111,35,101,222,183,23,96,164,231,246,86,39,
15,34,111,36,117,90,26,245,214,153,81,174,92,88,153,56,51,241,102,219,16,103,94,12,91,125,120,160,22,255,150,111,60,240,49,42,1,38,90,5,9,48,117,88,69,251,227,99,85,241,44,252,177,150,0,19,13,99,44,4,24,29,124,70,99,248,52,72,103,212,203,214,233,208,
211,185,71,16,48,68,237,243,218,48,53,121,70,42,192,252,203,49,240,73,26,235,248,179,50,144,102,235,136,67,222,160,99,54,216,155,13,229,179,116,48,161,227,5,24,66,6,193,98,117,0,63,189,209,160,93,162,244,209,82,111,157,17,101,94,100,81,103,70,189,88,
231,248,249,54,192,6,91,127,220,128,227,102,245,30,47,124,140,54,66,128,205,153,61,125,84,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,37,192,212,97,21,237,143,143,85,197,179,240,199,90,2,76,
52,140,177,16,96,126,84,37,7,145,66,39,223,139,5,58,243,209,104,209,104,4,152,149,5,106,137,17,210,188,48,241,47,195,64,40,153,13,121,236,57,42,47,186,252,58,163,66,126,159,181,64,252,120,1,212,40,170,212,217,4,23,32,118,77,240,98,111,54,128,13,182,8,
46,47,66,201,195,113,180,239,227,129,143,81,9,176,1,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,37,192,212,97,21,237,143,143,85,197,179,240,199,186,46,1,182,252,114,203,165,41,147,39,167,149,167,76,17,162,38,171,174,188,
114,122,239,154,107,14,138,29,79,20,140,17,94,0,208,105,167,131,78,199,30,177,101,83,225,128,52,58,243,8,22,75,179,103,171,120,86,12,225,102,34,160,153,2,204,151,153,209,48,166,10,154,13,229,39,31,101,67,56,154,248,192,198,4,24,2,146,116,108,177,171,
37,178,152,146,73,62,64,240,65,35,70,196,234,173,51,229,100,157,114,82,87,202,97,109,92,75,128,217,54,132,27,109,129,56,109,198,31,42,14,135,143,81,9,176,1,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,37,192,212,97,21,237,
143,143,85,197,179,240,199,186,46,1,182,254,212,169,169,183,187,59,245,245,246,10,81,147,217,125,125,105,254,220,185,131,98,199,19,5,99,132,77,39,180,239,116,220,233,224,131,23,24,228,243,157,124,195,254,168,143,103,177,236,165,16,76,125,139,70,198,150,
70,94,22,246,79,26,235,248,179,242,144,150,151,13,145,197,126,41,191,217,0,254,16,31,164,155,13,190,200,155,219,83,143,168,142,6,118,8,83,242,225,211,234,59,26,216,119,61,117,182,188,8,40,142,141,9,44,192,222,215,25,27,223,254,118,140,252,126,198,11,
31,163,18,96,3,68,118,85,136,124,230,68,118,85,136,124,230,68,118,85,136,124,230,68,118,85,136,124,74,128,169,195,42,218,31,31,171,138,103,225,143,117,93,2,76,136,70,17,5,164,16,227,69,30,159,18,96,3,68,118,85,136,124,230,68,118,85,136,124,230,68,118,
85,136,124,230,68,118,85,136,124,74,128,169,195,42,218,31,31,171,138,103,225,143,181,4,152,104,42,81,64,10,49,94,228,241,41,1,54,64,100,87,133,200,103,78,100,87,133,200,103,78,100,87,133,200,103,78,100,87,133,200,167,4,152,58,172,162,253,241,177,170,
120,22,254,88,75,128,137,166,19,5,165,16,205,38,138,77,9,176,1,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,37,192,212,97,21,237,143,143,85,197,179,240,199,90,2,76,140,27,81,112,10,49,214,68,177,104,72,128,13,16,217,85,
33,242,153,19,217,85,33,242,153,19,217,85,33,242,153,19,217,85,33,242,41,1,166,14,171,104,127,124,172,42,158,133,63,214,18,96,66,8,209,143,4,216,0,145,93,21,34,159,57,145,93,21,34,159,57,145,93,21,34,159,57,145,93,21,34,159,18,96,234,176,138,246,199,
199,170,226,89,248,99,45,1,38,132,16,253,72,128,13,16,217,85,33,242,153,19,217,85,33,242,153,19,217,85,33,242,153,19,217,85,33,242,41,1,166,14,171,104,127,124,172,42,158,133,63,214,18,96,66,8,209,143,4,216,0,145,93,21,34,159,57,145,93,21,34,159,57,145,
93,21,34,159,57,145,93,21,34,159,18,96,234,176,138,246,199,199,170,226,89,248,99,45,1,38,132,16,253,72,128,13,16,217,85,33,242,153,19,217,85,33,242,153,19,217,85,33,242,153,19,217,85,33,242,41,1,166,14,171,104,127,124,172,42,158,133,63,214,18,96,66,8,
209,79,35,4,152,16,141,64,2,76,29,86,209,254,248,88,85,60,11,127,172,37,192,132,16,162,31,9,48,209,42,72,128,169,195,42,218,31,31,171,138,103,225,143,181,4,152,104,26,69,108,137,14,34,58,198,237,142,4,152,104,21,36,192,212,97,21,237,143,143,85,197,179,
240,199,90,2,76,52,141,34,182,210,164,101,151,77,43,76,154,36,218,152,55,173,176,66,90,101,165,149,194,99,220,238,72,128,137,86,65,2,76,29,86,209,254,248,88,85,60,11,127,172,37,192,68,211,80,199,181,51,168,213,49,236,4,36,192,68,171,80,85,128,205,159,
221,147,190,241,181,43,211,105,167,46,14,183,87,225,172,51,78,75,219,44,152,83,174,127,245,242,75,151,172,143,6,252,204,216,100,90,184,205,227,235,170,14,171,104,119,124,172,42,158,133,63,214,18,96,162,105,168,227,218,25,72,128,41,142,197,216,83,85,128,
221,117,231,237,233,176,131,15,104,136,88,186,230,91,87,167,221,119,94,84,174,227,215,214,71,3,126,250,186,167,135,219,60,190,174,234,176,138,118,199,199,170,226,89,248,99,45,1,38,154,134,58,174,157,129,4,152,226,88,140,61,85,4,24,194,230,233,167,159,
42,133,210,198,27,174,91,166,49,218,228,191,27,150,158,143,70,89,58,35,105,185,0,219,103,207,93,203,239,150,102,108,176,206,90,101,218,142,219,109,61,40,29,72,51,127,124,247,2,140,79,75,207,241,117,85,135,85,180,59,62,86,21,207,194,31,107,9,48,209,52,
212,113,237,12,36,192,20,199,98,236,169,34,192,206,63,247,236,244,194,243,207,151,159,136,27,70,193,238,191,239,87,229,119,132,207,129,159,222,187,204,135,200,34,253,226,11,47,72,183,220,124,83,90,124,194,177,101,58,34,13,1,199,20,70,210,201,227,5,216,
207,238,249,105,57,133,144,109,136,51,219,47,105,236,131,79,242,89,58,254,109,255,54,37,210,4,152,149,205,196,88,142,175,171,58,172,162,221,241,177,170,120,22,254,88,75,128,137,166,161,142,107,103,32,1,166,56,22,99,79,21,1,6,143,61,250,200,146,117,132,
143,137,46,70,154,16,78,172,35,148,188,232,122,240,193,7,202,117,166,46,178,141,117,192,151,23,96,254,185,50,108,24,249,178,239,6,2,14,159,108,243,101,49,240,195,72,218,112,226,11,124,93,213,97,21,237,142,143,85,197,179,240,199,90,2,76,52,13,117,92,59,
3,9,48,197,177,24,123,70,35,192,24,177,2,68,15,92,127,221,181,101,250,247,111,188,161,20,64,150,14,164,35,190,142,61,234,176,37,246,209,20,68,219,134,15,155,114,200,72,23,121,201,243,234,171,175,150,194,138,109,230,215,67,26,226,205,143,160,69,248,186,
170,195,42,218,29,31,171,138,103,225,143,181,4,152,104,26,234,184,118,6,18,96,138,99,49,246,140,70,128,229,130,202,224,237,134,144,167,147,23,49,101,223,17,111,181,70,192,16,112,140,116,33,202,16,99,164,49,234,197,20,72,4,24,235,140,134,89,126,3,63,76,
63,196,38,42,155,225,235,170,14,171,104,119,124,172,42,158,133,63,214,18,96,162,105,168,227,218,25,72,128,41,142,197,216,51,26,1,134,208,97,180,9,225,196,84,68,166,24,146,142,64,34,157,41,138,8,40,155,142,104,233,228,231,57,48,123,161,7,219,16,78,136,
46,219,102,211,25,25,233,194,6,255,164,179,127,155,90,200,40,23,163,110,248,55,177,133,31,182,219,212,71,189,132,67,76,4,124,172,42,158,133,63,214,18,96,162,105,168,227,218,25,72,128,41,142,197,216,83,85,128,229,111,34,68,236,48,218,133,112,242,98,199,
210,253,127,125,1,194,8,193,132,240,50,161,68,58,121,120,121,7,66,138,237,254,249,47,242,34,230,240,15,126,27,223,253,62,248,180,237,248,111,166,0,99,191,190,174,6,229,160,14,70,94,38,219,238,211,114,104,27,155,226,57,17,161,93,107,29,75,218,61,143,75,
207,112,109,75,236,248,169,175,237,138,143,85,9,48,225,143,181,4,152,104,26,234,184,118,6,18,96,138,99,49,246,84,21,96,157,130,175,107,163,58,172,8,41,70,224,242,116,196,35,35,119,108,3,58,253,150,159,105,152,140,4,242,201,243,109,54,138,152,67,94,63,
250,56,81,160,61,152,118,202,104,38,245,7,47,114,105,75,123,14,49,223,198,20,89,123,22,145,109,81,219,50,138,58,220,84,213,118,193,199,170,4,152,240,199,90,2,76,52,13,117,92,59,131,137,46,192,150,95,110,185,52,101,242,228,180,242,148,41,66,140,25,171,
174,188,114,122,239,154,107,14,138,61,136,110,234,157,132,175,107,51,4,24,228,233,60,167,102,98,12,76,100,213,26,69,99,155,125,39,143,253,199,26,35,64,140,242,144,199,182,231,163,62,228,183,209,70,15,105,228,181,125,50,146,228,71,24,241,105,144,151,237,
209,136,18,163,83,222,79,35,160,126,136,82,63,186,133,136,162,29,172,140,8,51,95,94,3,241,181,180,23,177,128,23,96,86,63,219,102,117,178,239,214,14,246,157,252,181,234,75,58,182,228,161,30,249,232,157,249,37,31,219,249,238,125,131,29,87,243,227,183,229,
248,88,149,0,19,254,88,75,128,137,166,33,1,214,25,76,116,1,182,254,212,169,169,183,187,59,245,245,246,10,49,102,204,238,235,75,243,231,206,29,20,123,16,221,212,59,9,95,215,241,16,96,116,168,89,242,142,53,130,192,191,168,196,192,183,9,48,4,3,207,200,209,
65,7,70,121,16,28,76,81,228,147,60,148,195,196,4,121,236,245,253,230,15,232,252,51,122,68,217,216,47,223,177,247,47,67,49,63,228,33,47,251,224,89,60,132,143,229,161,60,148,141,114,71,101,31,41,248,165,110,121,58,35,98,38,96,40,147,253,21,130,135,242,
44,77,180,128,9,48,242,226,203,166,35,146,70,221,169,55,101,160,253,217,102,207,38,2,226,57,170,47,194,154,116,108,105,79,4,150,23,207,222,15,117,33,191,237,135,253,146,206,49,163,141,105,111,124,89,125,107,225,99,85,2,76,248,99,45,1,38,154,134,4,88,
103,48,209,5,152,16,227,73,116,83,239,36,124,93,155,33,192,232,128,179,13,232,100,35,106,188,136,49,120,254,45,26,185,49,1,198,8,144,137,47,210,233,152,155,232,2,242,176,141,124,230,7,129,18,61,63,134,208,34,221,11,21,70,106,76,244,176,79,43,35,117,176,
183,81,2,101,48,129,71,157,200,107,219,26,5,251,68,236,229,233,236,219,132,10,162,145,253,83,102,19,79,8,158,232,13,153,17,180,17,109,238,197,23,176,15,252,176,206,118,202,194,58,237,107,233,180,77,244,92,154,127,185,140,65,219,153,127,218,220,166,67,
178,80,7,214,105,79,107,99,242,70,113,80,11,31,171,237,40,192,136,89,218,204,98,170,22,150,207,83,43,143,157,35,19,17,127,172,37,192,68,211,144,0,235,12,36,192,132,24,63,162,155,122,39,225,235,218,12,1,70,103,218,58,140,228,163,19,207,244,186,188,147,
136,152,242,130,202,192,134,209,18,58,247,38,62,0,223,8,1,19,119,64,135,30,191,136,5,196,21,29,126,47,46,12,242,48,138,131,61,251,180,178,152,15,182,217,20,73,246,227,71,198,172,62,172,215,43,118,170,130,72,137,218,147,122,229,245,161,188,94,132,209,
86,126,123,45,168,7,254,176,181,250,243,137,189,111,83,59,38,214,38,8,5,68,155,247,101,152,144,98,187,181,17,229,50,177,75,123,217,190,124,57,125,252,176,63,223,222,75,195,199,106,59,10,48,139,111,234,79,60,210,126,209,8,38,249,56,111,252,177,177,109,
228,71,56,211,238,164,115,92,45,126,71,67,116,238,180,58,254,88,75,128,137,166,33,1,214,25,72,128,9,49,126,68,55,245,78,194,215,181,25,2,204,70,80,60,116,250,173,131,110,208,249,140,166,212,225,155,142,59,194,205,143,188,208,57,172,53,82,194,212,53,70,
111,232,136,70,219,13,196,0,62,172,195,207,254,177,101,63,54,218,67,249,189,240,243,2,140,122,80,62,219,214,40,216,55,157,114,19,43,96,29,112,43,151,135,50,90,135,155,78,120,212,142,57,86,111,240,237,200,126,163,58,177,95,142,177,181,109,190,221,131,
40,244,226,148,246,196,198,143,234,249,99,227,227,199,143,96,214,131,143,213,118,21,96,254,220,169,37,64,201,23,197,51,49,66,28,218,200,226,210,176,145,54,98,216,98,9,223,124,247,199,157,24,66,212,145,110,130,144,79,111,215,138,248,99,45,1,38,154,134,
4,88,103,32,1,38,196,248,17,221,212,59,9,95,215,70,10,48,58,135,38,184,76,116,249,117,15,157,56,251,149,158,142,35,29,189,104,244,11,124,199,147,206,163,141,216,0,29,123,58,245,248,243,246,116,16,17,0,209,190,129,206,37,157,92,62,17,44,54,21,206,58,179,
126,202,33,62,106,9,48,124,208,121,102,123,212,105,30,13,248,163,108,8,23,214,125,39,155,242,82,95,190,211,134,38,80,217,70,217,16,81,180,169,181,191,239,88,27,212,195,234,69,125,109,221,246,197,119,240,83,227,200,199,177,240,194,208,67,153,104,83,202,
228,219,208,202,104,237,12,94,76,80,62,19,33,118,92,41,55,101,241,54,17,62,86,59,65,128,209,86,209,244,83,127,30,120,104,159,40,189,22,228,101,68,146,99,133,45,113,195,119,218,219,98,153,124,196,7,113,96,241,67,62,190,35,192,137,173,165,137,240,241,194,
31,107,9,48,209,52,36,192,58,3,9,48,33,198,143,232,166,222,73,248,186,54,170,195,74,167,153,142,191,135,116,58,110,144,231,7,58,116,116,246,232,224,249,78,126,14,190,253,118,235,52,178,206,47,242,116,4,241,145,79,151,162,163,89,107,223,164,35,94,162,
14,62,157,81,63,130,100,157,79,251,206,8,156,159,34,198,118,58,205,86,231,70,194,190,40,35,117,244,207,92,217,72,4,251,165,30,190,60,64,121,73,167,93,104,227,124,59,224,207,183,163,111,99,214,205,214,215,157,114,12,55,58,101,101,162,253,252,62,241,71,
231,221,231,245,251,227,24,231,199,129,242,179,63,191,255,8,31,171,237,42,192,136,85,218,27,113,131,80,245,109,227,243,249,41,136,196,41,233,180,145,23,108,196,139,29,59,75,243,176,175,90,219,56,6,38,156,57,150,254,88,99,131,111,214,57,182,249,241,108,
21,252,177,150,0,19,77,67,2,172,51,144,0,19,98,252,136,110,234,157,132,175,107,59,118,88,235,129,206,187,117,80,171,128,40,161,99,89,107,132,103,34,67,155,248,209,194,42,208,145,231,152,68,219,70,139,143,213,118,22,96,8,215,72,120,25,150,47,79,183,81,
92,251,142,15,132,146,31,85,243,224,195,199,55,49,207,185,2,248,49,187,92,128,217,136,152,9,192,90,254,199,27,127,172,37,192,68,211,144,0,235,12,36,192,132,24,63,162,155,122,39,225,235,90,207,249,184,238,135,223,23,250,105,85,232,24,210,153,92,218,200,
73,14,83,178,152,90,53,92,39,120,162,194,232,7,237,90,107,228,164,22,136,53,236,16,23,209,246,81,243,193,246,143,103,132,85,61,98,166,150,0,35,206,25,25,99,187,165,33,158,106,249,204,125,112,174,152,56,246,118,172,251,31,49,56,63,24,89,179,239,45,73,
28,15,75,4,216,250,5,187,74,128,137,177,64,2,172,51,152,32,2,108,102,63,123,74,128,137,86,34,188,177,119,16,190,174,245,156,143,31,157,170,209,32,209,154,172,191,246,7,6,197,106,59,198,115,21,1,198,179,125,136,32,195,182,33,160,16,86,164,217,203,105,
234,21,96,8,43,166,48,34,174,189,29,163,100,76,135,100,132,13,145,103,2,144,105,146,236,131,169,143,222,79,43,80,35,30,74,1,54,165,96,189,130,157,37,192,196,88,176,252,114,203,165,41,147,39,167,149,167,76,17,109,204,170,43,175,156,222,187,230,154,225,
49,110,119,250,47,136,123,20,244,20,244,178,46,1,38,90,141,232,230,222,9,228,245,172,231,124,252,248,71,63,18,250,18,98,188,217,104,253,15,13,138,213,118,140,231,232,249,183,8,242,49,42,229,241,219,17,72,136,34,68,24,98,170,150,207,124,132,23,191,8,56,
166,45,242,108,151,127,214,144,117,70,47,109,116,13,33,70,62,210,70,50,21,117,172,169,17,15,187,20,44,243,191,10,214,41,88,36,1,38,198,130,245,167,78,77,189,221,221,169,175,183,87,180,49,179,251,250,210,252,185,115,195,99,220,238,184,95,164,186,10,102,
20,236,34,1,38,90,141,232,230,222,9,228,245,172,247,124,228,151,229,200,159,16,227,197,212,15,191,63,117,109,178,254,160,56,85,60,79,92,134,137,135,29,11,150,121,71,193,135,10,62,177,206,90,239,121,214,103,18,66,136,137,192,26,255,251,157,127,45,174,
129,139,10,54,45,216,164,96,187,181,255,113,13,93,15,69,203,17,221,228,219,153,168,142,245,158,143,155,109,60,53,173,247,17,117,90,69,107,64,103,123,179,143,173,59,40,70,65,241,60,49,89,74,60,108,91,176,204,91,11,222,91,48,107,245,119,77,254,241,204,
205,167,13,201,44,132,16,157,202,166,211,214,78,239,89,109,202,131,197,53,112,65,193,71,11,120,38,118,238,187,87,125,167,174,135,162,101,137,110,248,237,68,84,39,24,201,249,248,177,13,62,172,142,171,24,55,214,251,200,251,211,180,245,62,52,100,164,3,20,
207,19,143,58,227,97,110,193,50,111,42,88,173,224,227,239,89,125,213,75,167,126,168,51,159,241,16,66,136,8,46,136,107,172,182,242,119,139,107,32,83,67,62,88,176,86,193,244,53,222,189,138,174,135,66,52,25,157,143,162,147,80,60,11,143,139,135,205,10,150,
153,84,192,115,96,31,46,152,255,238,85,223,241,192,71,62,176,122,104,40,132,16,157,198,219,222,248,250,167,222,240,134,215,111,87,92,255,166,22,188,187,128,31,164,214,214,245,80,136,230,163,243,81,116,18,138,103,225,113,241,192,187,55,150,249,187,130,
183,20,16,20,27,78,126,199,91,15,90,109,149,183,63,68,80,252,227,154,239,10,29,8,33,68,187,195,245,141,139,225,228,119,172,120,100,113,237,251,88,193,63,20,76,46,224,185,88,110,148,186,30,10,209,36,116,62,138,78,66,241,44,60,53,226,97,153,191,45,88,174,
224,237,5,107,20,76,43,88,176,218,170,147,191,253,174,41,43,62,60,229,109,147,210,219,223,244,122,33,132,232,24,38,191,117,210,239,87,249,95,43,126,239,13,111,120,253,246,197,245,110,227,130,255,83,240,206,130,21,10,150,47,208,245,80,136,38,161,243,81,
116,18,138,103,225,25,38,30,150,249,155,130,215,23,16,20,166,204,25,30,157,94,192,67,98,11,11,118,42,216,181,128,215,104,10,33,68,59,194,53,140,107,25,215,180,121,5,155,23,172,91,192,47,81,118,115,228,90,168,235,161,16,99,143,206,71,209,73,40,158,133,
167,158,120,40,23,19,97,60,15,182,98,193,74,5,171,23,188,191,224,35,5,204,93,229,205,45,176,129,16,66,180,33,92,191,184,150,113,77,251,64,1,23,194,149,11,120,19,44,215,62,174,129,175,43,208,245,80,136,177,71,231,163,232,36,20,207,194,179,148,120,88,230,
245,255,31,190,10,252,25,242,221,162,193,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
static const unsigned char temp_binary_data_14[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,3,96,0,0,0,144,8,6,0,0,0,110,232,8,32,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,9,112,72,89,115,0,0,14,195,0,0,14,195,1,199,111,168,100,0,0,62,230,73,68,
65,84,120,94,237,157,11,152,28,85,153,191,163,171,11,33,162,136,154,13,183,21,16,89,111,136,2,1,36,136,16,72,102,38,147,129,16,34,247,139,16,64,46,162,6,22,69,197,197,101,23,21,69,163,176,34,162,34,139,226,122,89,255,202,42,138,34,186,162,174,44,234,
138,202,197,85,65,87,65,84,16,197,27,241,246,212,191,222,78,127,233,175,207,124,61,211,103,166,167,187,171,231,119,158,231,125,186,250,212,249,190,58,167,234,171,170,243,235,115,170,122,78,61,61,172,228,175,74,54,42,217,180,228,9,37,219,148,236,88,178,
83,201,46,37,11,75,246,40,217,83,8,33,42,6,215,46,174,97,92,203,184,166,113,109,251,219,146,249,37,143,46,217,184,132,107,32,215,66,93,15,133,152,89,116,62,138,65,66,241,44,60,237,198,195,134,96,32,99,179,146,173,75,158,94,178,87,201,112,201,33,37,71,
149,188,160,100,117,201,137,66,8,81,49,184,118,113,13,59,186,100,85,201,72,201,222,37,92,28,185,48,110,94,50,183,132,107,161,174,135,66,204,44,58,31,197,32,161,120,22,158,118,227,97,206,195,75,80,226,4,195,182,37,187,149,140,62,105,219,173,255,105,233,
126,139,110,56,246,136,131,127,112,238,203,206,40,206,57,243,84,33,132,168,52,103,157,113,98,113,248,33,163,63,92,186,223,94,55,62,117,199,237,214,150,215,186,3,75,118,47,217,190,196,46,138,160,235,161,16,51,140,206,71,49,72,40,158,133,167,141,120,152,
243,200,18,134,65,25,2,221,237,81,243,230,30,61,124,192,62,215,19,4,199,29,177,162,198,208,126,123,10,33,196,64,96,215,53,46,142,203,150,238,115,243,188,77,230,30,87,94,251,152,50,240,196,146,199,149,60,182,68,215,67,33,186,128,206,71,49,72,40,158,133,
103,146,120,168,13,133,50,7,245,25,37,203,15,26,61,224,203,171,143,89,21,58,18,66,136,65,226,200,85,163,197,33,7,14,125,167,188,246,173,40,121,86,9,211,3,184,57,62,179,68,215,67,33,186,136,206,71,49,72,40,158,133,39,137,135,157,75,230,60,170,132,160,
88,180,195,118,219,92,248,194,227,15,15,13,133,16,98,16,57,116,197,80,177,211,211,118,184,178,188,6,46,46,121,90,201,83,75,246,121,210,182,91,235,122,40,68,151,209,249,40,6,9,197,179,240,184,120,120,94,73,109,46,42,111,232,24,25,29,218,247,198,101,7,
44,10,141,132,24,4,118,217,233,239,196,44,37,138,7,216,111,209,46,197,138,209,3,110,43,175,129,252,42,197,252,108,222,94,52,182,108,233,243,116,61,20,125,75,20,227,85,34,106,19,76,229,124,92,188,247,110,197,162,221,119,46,246,216,229,233,225,182,132,
152,41,136,185,69,187,63,179,140,219,93,195,216,84,60,207,46,50,226,97,172,100,206,227,75,120,51,199,170,67,15,30,185,55,50,16,162,234,68,39,138,152,157,68,241,177,114,249,254,15,149,215,64,222,62,197,175,82,251,148,28,254,252,21,195,186,30,138,190,35,
138,233,42,19,181,177,221,243,113,201,243,246,168,117,84,35,191,66,116,155,231,44,220,169,22,147,105,156,42,158,103,39,147,196,195,97,37,181,247,210,243,174,250,163,15,28,126,222,184,130,66,84,157,232,196,16,179,155,52,70,158,187,199,51,139,242,26,200,
171,99,151,148,28,80,114,252,216,208,62,227,202,9,209,75,162,88,30,4,210,118,182,123,62,238,181,240,153,161,63,33,122,197,30,187,62,99,92,156,42,158,103,47,19,196,195,177,37,115,22,148,48,36,122,188,4,152,24,68,162,147,66,204,110,210,24,169,95,16,79,
46,225,191,88,224,100,9,48,209,111,68,177,60,8,164,237,108,231,124,220,111,239,93,67,95,66,244,154,231,61,231,217,77,177,170,120,158,221,180,136,135,19,74,230,108,81,194,43,17,87,75,128,137,65,35,58,25,132,0,31,39,245,11,226,169,37,203,234,156,34,1,38,
250,137,40,134,7,9,223,214,118,206,71,158,179,136,252,8,209,107,246,220,173,121,212,99,38,226,185,244,33,122,72,116,76,90,209,34,30,248,195,230,154,0,219,147,47,18,96,98,208,136,78,6,33,192,199,137,187,65,142,214,57,85,2,76,244,19,81,12,15,18,190,173,
237,156,143,187,63,251,105,161,159,153,100,167,167,62,169,216,124,179,71,111,232,132,205,52,143,125,204,166,197,83,159,188,109,88,23,209,191,236,186,243,83,154,98,117,38,226,153,248,152,187,209,70,197,188,185,115,69,23,217,116,222,188,98,171,45,182,8,
143,73,43,90,196,131,4,152,24,108,162,147,65,8,240,113,34,1,38,250,157,40,134,7,9,223,214,118,206,199,200,199,76,243,152,71,63,170,214,241,221,248,175,255,58,236,156,117,146,77,54,222,120,125,39,123,227,141,194,186,136,254,198,199,234,76,196,243,95,61,
236,97,197,102,143,126,116,241,248,205,55,23,93,228,9,143,123,92,177,253,182,249,63,138,248,99,45,1,38,102,5,209,137,32,4,248,56,145,0,19,253,78,20,195,131,132,111,107,191,10,176,178,30,197,163,54,217,164,216,124,179,205,194,206,89,39,97,27,176,96,254,
252,176,46,162,191,241,177,42,1,54,56,84,86,128,141,46,217,187,56,249,248,35,199,113,244,97,7,133,229,197,120,70,246,95,84,156,112,204,161,227,246,225,234,99,15,11,203,207,118,162,19,65,8,240,113,34,1,38,250,157,40,134,7,9,223,214,126,21,96,15,47,5,88,
183,59,189,219,61,241,137,97,93,68,127,227,99,85,2,108,112,168,172,0,59,246,240,21,197,31,255,248,199,226,161,135,30,106,226,11,159,255,108,88,94,140,231,249,7,13,21,63,185,231,238,113,251,240,222,123,239,9,203,207,118,162,19,65,8,240,113,34,1,38,250,
157,40,134,7,9,223,214,126,21,96,221,238,244,78,181,179,39,122,143,143,85,9,176,193,161,186,2,236,136,131,139,40,253,215,151,190,16,150,23,227,57,116,197,112,113,255,125,63,175,239,185,70,250,197,253,247,135,229,103,59,209,137,32,4,248,56,145,0,19,253,
78,20,195,131,132,111,171,4,216,122,36,192,170,139,143,85,9,176,193,65,2,108,22,35,1,150,71,116,34,8,1,62,78,36,192,68,191,19,197,240,32,225,219,42,1,182,30,9,176,234,226,99,85,2,108,112,144,0,155,197,72,128,229,17,157,8,66,128,143,19,9,48,209,239,68,
49,60,72,248,182,74,128,173,71,2,172,186,248,88,149,0,27,28,36,192,102,49,18,96,121,68,39,130,16,224,227,68,2,76,244,59,81,12,15,18,190,173,18,96,235,145,0,171,46,62,86,37,192,6,7,9,176,89,140,4,88,30,209,137,32,4,248,56,145,0,19,253,78,20,195,131,132,
111,171,4,216,122,36,192,170,139,143,85,9,176,193,65,2,108,22,35,1,150,71,116,34,8,1,62,78,36,192,68,191,19,197,240,32,225,219,42,1,182,30,9,176,234,226,99,85,2,108,112,232,75,1,198,235,209,17,88,39,30,119,88,113,202,234,163,107,255,75,117,204,97,43,
138,149,203,15,216,80,70,2,108,98,14,57,112,73,211,62,228,147,87,247,31,50,182,100,67,25,9,176,60,162,19,65,8,240,113,210,206,13,178,204,19,162,107,248,216,131,40,134,7,9,223,86,9,176,245,72,128,85,23,31,171,18,96,131,67,95,9,176,191,127,201,41,197,87,
111,254,74,241,179,159,222,91,252,225,15,127,168,203,129,245,137,255,167,186,251,238,31,21,215,127,250,218,154,184,56,242,249,203,235,107,154,211,108,23,96,47,57,253,196,226,166,175,124,169,246,95,94,235,214,173,171,239,149,245,105,221,186,135,106,255,
251,197,127,165,29,177,106,121,113,240,242,253,37,192,50,136,78,4,33,192,199,73,187,2,108,238,70,27,21,243,230,206,21,98,198,216,116,222,188,98,171,45,182,104,138,61,136,98,120,144,240,109,149,0,91,143,4,88,117,241,177,42,1,54,56,244,133,0,35,120,16,
86,57,233,162,215,159,95,95,106,78,145,0,59,243,197,47,44,46,188,224,188,226,117,255,244,234,182,57,251,165,167,22,67,75,246,46,134,150,182,32,217,70,202,82,62,35,187,37,207,45,134,15,88,84,156,189,230,180,226,245,255,252,15,225,182,91,241,146,211,86,
135,219,130,145,253,23,21,239,127,239,123,234,123,161,189,244,150,55,189,174,248,233,189,63,169,127,107,36,9,176,152,232,68,16,2,124,156,180,115,131,212,13,79,116,3,187,193,251,216,131,40,134,7,9,223,86,9,176,245,72,128,85,23,31,171,18,96,131,67,95,8,
176,219,111,251,118,189,235,223,126,250,211,159,254,88,95,106,78,169,0,187,250,189,87,212,215,228,167,247,125,246,186,98,255,139,254,185,88,126,241,235,155,121,219,69,197,200,241,135,55,109,39,101,228,197,39,21,203,255,229,13,227,108,151,173,125,93,241,
241,235,175,171,111,33,63,93,245,158,203,199,109,107,249,210,231,22,95,187,249,166,122,137,188,20,237,71,9,176,152,232,68,16,2,124,156,72,128,137,126,65,2,76,2,204,144,0,171,46,62,86,37,192,6,135,158,11,48,166,28,118,50,121,1,118,201,218,55,212,115,167,
158,206,187,254,19,197,216,123,46,45,14,188,242,237,77,140,93,182,182,24,26,217,183,169,45,27,56,100,217,184,242,176,236,138,183,21,255,250,229,255,172,123,158,122,90,251,198,215,54,109,239,131,239,191,170,190,166,51,73,2,44,38,58,17,132,0,31,39,18,96,
162,95,144,0,147,0,51,36,192,170,139,143,85,9,176,193,161,167,2,236,156,191,63,163,222,229,111,157,126,112,215,157,197,157,223,255,94,241,219,223,254,166,158,51,113,50,1,182,230,69,39,213,115,226,244,187,223,253,182,54,242,118,199,109,183,22,191,255,
253,239,235,185,227,211,47,126,255,187,226,240,171,223,29,10,170,209,87,157,53,174,77,67,139,159,83,140,174,189,96,92,217,177,146,243,63,253,241,186,215,56,61,248,224,175,138,219,110,253,86,113,199,237,183,142,123,6,206,167,95,255,250,193,226,224,209,
197,181,237,49,189,114,178,244,195,31,220,85,124,255,123,223,45,30,252,213,175,234,57,19,39,9,176,152,232,68,16,2,124,156,72,128,137,126,65,2,76,2,204,144,0,171,46,62,86,37,192,6,135,158,10,176,232,5,16,164,63,253,233,79,197,135,63,240,190,113,229,79,
62,254,200,82,144,125,191,94,42,78,38,192,254,231,235,55,215,115,154,19,66,238,53,231,190,108,156,239,55,191,241,130,113,47,173,176,244,201,91,111,41,134,222,249,214,113,162,10,134,143,59,180,201,207,200,233,39,132,229,86,190,231,178,226,123,247,222,
83,247,216,156,16,94,231,156,117,70,147,31,120,231,101,151,180,156,106,249,31,31,251,247,90,153,159,255,236,103,245,156,241,233,134,235,175,43,70,246,223,171,201,231,241,71,175,170,137,206,137,146,4,88,76,116,34,8,1,62,78,36,192,68,191,32,1,38,1,102,
72,128,85,23,31,171,18,96,131,67,207,4,216,63,188,242,239,235,221,253,241,9,49,20,217,24,19,189,176,227,139,95,248,124,113,202,234,163,234,223,154,19,111,1,60,225,152,102,193,228,121,249,153,47,170,151,28,159,14,123,237,63,212,70,177,82,97,53,118,217,
91,54,76,69,28,62,116,108,220,122,88,254,158,75,139,179,223,18,79,135,68,124,29,245,252,177,113,117,49,16,139,173,210,43,206,126,73,241,199,63,198,2,237,210,75,222,28,250,51,62,117,237,127,212,75,142,79,18,96,49,209,137,32,4,248,56,145,0,19,253,130,4,
88,255,10,176,71,60,252,225,197,99,31,243,152,240,184,205,4,18,96,213,197,199,170,4,216,224,208,51,1,214,234,165,17,159,251,236,167,195,242,30,94,58,209,106,228,135,81,159,86,190,207,60,227,228,208,159,231,99,31,249,80,189,116,115,122,231,21,151,23,203,
222,250,250,80,96,141,190,250,172,218,212,195,229,111,126,109,184,126,223,53,47,44,190,245,205,111,212,61,53,167,23,158,112,100,88,15,207,231,111,248,76,189,116,115,226,181,252,81,98,10,227,178,3,22,133,190,60,173,166,94,74,128,197,68,39,130,16,224,227,
68,2,76,244,11,18,96,253,43,192,30,181,201,38,197,230,155,109,22,30,183,153,128,88,216,97,251,237,195,186,136,254,198,199,170,4,216,224,208,19,1,182,98,217,226,226,158,187,127,92,239,238,55,18,211,237,94,122,250,73,161,77,202,167,174,189,166,110,213,
156,90,137,47,158,129,26,46,69,82,228,203,195,51,85,127,254,243,159,235,86,141,116,243,77,255,85,44,105,49,194,5,163,231,189,44,204,103,132,108,197,202,145,186,151,230,244,173,91,254,39,172,67,202,107,207,127,117,241,151,191,252,165,110,53,121,186,232,
245,255,20,250,73,97,138,99,148,36,192,98,162,19,65,8,240,113,34,1,38,250,5,9,176,254,21,96,79,222,126,187,98,155,173,182,42,182,92,176,160,43,60,113,155,109,138,61,119,95,24,214,69,244,55,62,86,37,192,6,135,158,8,176,163,15,59,168,246,34,137,52,253,
242,151,15,20,135,174,24,14,109,82,120,19,96,148,30,120,224,23,245,165,230,244,217,207,124,170,246,95,89,147,113,202,234,163,195,145,33,94,4,194,118,71,206,88,29,10,173,86,12,173,26,45,94,245,242,151,214,189,52,167,127,187,250,202,114,155,123,141,171,
67,202,203,214,156,222,242,89,176,40,97,147,238,175,136,19,143,59,172,110,209,156,36,192,98,162,19,65,8,240,113,34,1,38,250,5,9,176,254,21,96,59,61,117,135,154,32,26,94,186,180,24,29,25,153,113,150,13,15,21,187,236,252,244,176,46,162,191,241,177,42,1,
54,56,244,68,128,157,244,130,195,107,47,218,72,211,189,247,222,19,150,143,104,245,246,191,104,244,170,19,233,199,63,250,191,226,160,145,253,138,165,165,184,89,190,54,158,106,152,50,114,230,105,181,186,190,251,242,183,213,189,204,124,186,255,254,251,198,
237,171,86,240,236,25,111,131,76,147,4,88,76,116,34,8,1,62,78,36,192,68,191,32,1,214,191,2,76,136,118,241,177,42,1,54,56,244,68,128,157,118,242,177,245,174,126,115,250,246,183,110,9,203,71,240,54,191,110,38,166,76,218,171,223,135,198,246,15,5,151,103,
236,237,111,42,134,234,207,97,125,252,99,31,169,123,153,249,196,20,76,191,159,38,226,208,131,71,106,98,43,77,18,96,49,209,137,32,4,248,56,145,0,19,253,130,4,152,4,152,168,62,62,86,37,192,6,135,158,8,176,86,163,87,188,193,48,42,31,113,196,170,229,117,
171,238,164,154,0,91,190,255,134,237,143,156,116,116,40,188,140,225,21,75,55,148,229,197,32,221,74,76,181,180,237,78,198,170,131,150,22,63,251,217,79,235,150,141,36,1,22,19,157,8,66,128,143,147,78,8,176,131,198,22,79,139,200,103,74,100,151,67,228,51,
37,178,203,33,242,153,18,217,229,16,249,76,137,236,114,136,124,166,68,118,57,68,62,37,192,36,192,68,245,241,177,42,1,54,56,244,68,128,157,189,230,180,122,87,191,57,241,182,191,168,124,4,163,55,221,76,227,4,216,201,199,134,194,203,24,62,184,241,44,91,
171,183,24,206,68,186,238,147,255,177,97,187,147,113,200,129,75,138,159,222,251,147,186,101,35,73,128,197,68,39,130,16,224,227,68,2,172,65,100,151,67,228,51,37,178,203,33,242,153,18,217,229,16,249,76,137,236,114,136,124,74,128,73,128,137,234,227,99,85,
2,108,112,232,137,0,123,201,233,39,214,187,250,205,201,254,68,185,29,14,95,185,172,110,213,94,122,224,23,247,23,63,252,193,93,83,134,169,125,60,3,198,182,135,87,14,135,162,203,51,246,246,55,23,67,75,247,174,149,191,254,211,159,172,215,162,57,241,42,253,
104,91,147,241,131,187,238,44,126,114,207,221,117,47,205,169,157,215,248,27,8,176,159,253,244,222,186,101,35,73,128,197,68,39,130,16,224,227,68,2,172,65,100,151,67,228,51,37,178,203,33,242,153,18,217,229,16,249,76,137,236,114,136,124,74,128,245,191,0,
59,233,248,99,54,44,143,14,45,174,17,173,59,238,168,67,107,223,247,220,117,167,218,247,149,99,195,197,146,125,23,109,88,191,207,94,187,21,135,175,58,168,182,76,25,202,122,95,253,138,213,149,246,69,235,103,146,235,62,249,137,166,125,216,175,248,88,149,
0,27,28,122,34,192,120,211,96,148,190,251,191,119,132,229,35,94,112,228,33,117,171,246,18,111,28,68,64,241,10,252,169,112,96,253,207,150,135,14,216,187,88,222,226,255,192,82,150,157,243,146,154,205,71,255,253,3,245,90,52,18,175,149,191,100,237,27,194,
109,77,6,251,150,255,15,139,18,255,55,230,247,211,68,240,198,73,94,218,145,38,9,176,152,232,68,16,2,124,156,72,128,53,136,236,114,136,124,166,68,118,57,68,62,83,34,187,28,34,159,41,145,93,14,145,79,9,176,254,23,96,204,174,49,161,244,229,47,222,88,131,
101,242,190,121,203,55,106,203,231,157,123,78,241,190,171,174,44,46,187,244,146,226,190,251,126,94,19,45,231,156,189,166,38,32,204,207,21,239,122,71,113,241,218,139,54,248,249,240,7,223,95,92,243,209,143,212,62,173,76,63,66,59,127,253,224,131,197,87,
111,190,169,184,235,174,59,139,207,221,112,125,77,76,70,101,59,141,223,247,253,140,143,85,9,176,193,161,39,2,140,23,104,172,91,247,80,189,187,223,72,60,143,212,206,127,117,193,154,23,157,84,183,106,78,173,94,215,254,153,235,174,13,253,228,178,108,205,
41,161,216,106,197,208,81,43,139,183,190,249,245,245,90,52,167,171,175,122,119,184,141,118,137,18,111,53,140,202,70,28,249,252,229,197,111,127,251,155,186,101,35,73,128,197,68,39,130,16,224,227,68,2,172,65,100,151,67,228,51,37,178,203,33,242,153,18,217,
229,16,249,76,137,236,114,136,124,74,128,245,191,0,67,88,33,176,16,29,8,39,68,23,2,235,130,243,207,171,9,174,168,252,153,47,62,173,86,6,1,193,39,249,44,51,154,195,40,152,23,102,223,185,227,246,190,30,229,65,0,33,190,236,59,237,187,232,194,11,154,202,
0,251,135,178,140,252,49,98,70,155,108,244,140,188,180,60,249,86,206,231,123,251,137,4,24,249,148,243,235,109,123,105,30,62,173,124,171,237,181,218,78,59,248,88,149,0,27,28,122,34,192,152,62,72,39,63,77,252,55,24,255,17,22,217,164,188,229,77,175,171,
91,53,39,78,168,40,253,223,15,239,106,251,255,177,90,49,114,220,161,161,200,130,101,175,120,105,152,63,122,249,91,139,53,47,95,83,175,69,115,186,227,246,91,195,237,180,11,211,42,163,132,176,138,202,167,156,244,130,35,234,22,205,73,2,44,38,58,17,132,0,
31,39,18,96,13,34,187,28,34,159,41,145,93,14,145,207,148,200,46,135,200,103,74,100,151,67,228,83,2,172,255,5,24,98,138,145,42,68,24,130,139,145,44,242,24,9,162,227,78,25,27,237,66,168,48,2,70,89,242,77,188,81,206,70,206,16,47,244,131,40,107,216,212,196,
126,4,97,226,5,24,163,120,209,168,29,109,68,76,178,31,104,55,163,101,182,76,219,189,88,37,223,70,1,41,103,226,135,253,192,190,97,31,35,116,91,9,48,246,33,62,240,201,167,137,92,63,178,200,118,201,195,222,70,238,108,132,210,142,27,126,40,155,250,201,197,
199,234,76,196,243,38,27,111,92,44,152,63,63,252,3,111,49,115,108,189,229,150,197,83,118,220,49,60,38,19,225,143,117,182,0,27,93,178,119,113,215,157,223,171,119,247,155,211,63,190,250,101,161,77,74,171,23,91,124,225,243,159,13,255,72,153,244,234,87,156,
21,250,106,135,225,178,61,99,151,173,13,69,214,178,87,174,169,149,25,125,227,249,225,250,161,115,207,10,255,247,140,196,27,33,211,109,181,11,109,141,82,187,35,107,31,124,255,85,117,139,230,36,1,22,19,157,8,34,134,95,43,249,5,151,155,21,191,8,114,147,
242,83,100,6,13,31,39,18,96,13,34,187,28,34,159,41,145,93,14,145,207,148,200,46,135,200,103,74,100,151,67,228,83,2,172,255,5,24,157,114,58,240,116,212,109,180,132,101,196,1,235,185,150,218,180,67,190,35,2,76,128,33,40,76,20,32,210,200,227,147,60,150,
171,0,247,6,218,106,226,147,182,70,207,131,177,95,152,170,104,223,105,163,141,148,177,223,16,103,44,115,191,177,169,155,128,95,19,116,136,38,196,45,203,236,87,82,36,192,16,83,233,189,138,58,113,92,236,59,219,227,152,96,79,194,31,249,220,247,76,156,33,
44,59,113,207,243,177,58,19,241,188,199,194,133,197,200,208,80,248,7,222,98,230,24,27,29,45,86,174,88,17,30,147,137,240,199,58,91,128,193,53,255,239,67,181,160,77,19,47,166,136,202,123,158,127,208,80,177,110,221,186,186,69,115,66,152,189,247,202,119,
213,191,53,39,108,120,254,44,242,217,138,149,203,15,40,214,190,241,181,197,146,87,172,9,197,213,242,183,175,45,134,44,248,203,122,69,101,134,222,117,73,241,177,91,190,90,175,69,115,250,237,111,126,83,28,123,196,193,227,182,59,17,135,31,50,90,92,246,47,
107,139,11,254,241,85,117,47,205,137,231,186,54,60,179,214,130,137,222,34,41,1,22,19,157,8,147,97,55,197,65,128,155,141,221,188,38,131,27,35,55,61,251,37,144,155,37,55,166,126,254,37,118,58,248,56,145,0,107,16,217,229,16,249,76,137,236,114,136,124,166,
68,118,57,68,62,83,34,187,28,34,159,18,96,253,47,192,128,142,186,23,13,8,18,68,0,203,92,119,249,206,189,4,49,65,199,223,4,152,217,34,224,76,160,241,73,25,174,191,167,159,178,122,131,24,232,87,76,128,33,84,38,122,17,7,247,18,219,39,128,24,178,251,139,
249,96,153,253,228,219,76,25,27,97,99,191,120,193,133,77,36,192,16,113,248,103,191,218,61,143,125,207,119,124,25,220,207,176,55,241,7,28,27,19,106,145,159,169,224,99,181,10,241,44,102,22,127,172,167,36,192,142,61,124,69,189,187,63,62,221,126,219,183,
107,111,232,75,109,120,62,236,184,35,87,22,15,62,248,171,122,201,241,137,55,41,82,174,149,64,251,77,41,120,120,126,172,85,253,150,29,176,168,246,255,88,47,122,225,11,138,27,255,243,134,154,205,245,223,189,189,24,126,247,37,161,184,26,62,122,101,147,253,
200,41,199,133,229,142,120,255,21,197,159,255,242,151,154,191,52,49,149,240,212,19,143,41,210,147,200,96,196,16,209,73,189,111,250,202,151,106,54,188,176,132,151,104,252,254,119,191,171,125,79,211,109,183,126,171,241,199,209,14,246,13,130,239,238,187,
127,84,47,57,62,73,128,197,68,39,194,68,112,243,227,194,204,13,192,70,129,252,197,158,95,237,236,87,51,46,228,220,56,41,27,137,20,110,76,51,33,94,108,155,86,71,190,251,237,144,71,61,89,70,64,33,164,40,107,245,102,189,217,155,13,235,232,76,32,194,176,
165,205,54,45,131,242,86,110,186,176,29,124,91,29,44,223,126,69,246,101,129,125,72,190,213,29,204,118,162,27,127,59,248,56,145,0,107,16,217,229,16,249,76,137,236,114,136,124,166,68,118,57,68,62,83,34,187,28,34,159,18,96,213,232,176,114,205,178,235,44,
88,199,222,190,179,204,245,148,123,10,215,44,127,29,101,93,122,111,224,26,103,207,144,97,227,215,245,27,212,223,4,210,68,112,157,246,35,80,173,4,24,121,222,31,251,141,233,127,102,99,251,131,123,29,253,68,191,159,83,216,207,220,195,237,158,226,183,111,
164,245,247,2,204,192,15,247,64,127,220,114,240,177,42,1,38,252,177,158,146,0,131,235,63,125,109,189,203,63,62,241,66,142,207,125,246,186,226,242,75,47,46,222,254,47,111,46,254,253,131,87,151,157,186,175,23,15,61,52,254,229,29,62,217,171,236,175,124,
247,59,234,57,113,250,193,93,223,175,253,241,51,126,121,67,226,199,62,242,161,226,75,55,126,190,184,245,219,183,52,253,57,241,125,191,253,77,113,216,213,239,10,69,213,178,51,79,29,215,166,161,82,224,180,154,138,248,169,239,220,86,247,26,167,239,127,239,
127,107,162,239,195,31,120,95,109,122,224,53,31,253,112,173,61,136,169,251,203,147,215,167,59,110,91,255,252,216,127,126,238,250,122,206,248,244,203,95,62,80,91,127,249,219,47,46,222,118,241,155,138,15,253,219,123,139,175,127,245,191,107,34,116,162,36,
1,22,19,157,8,19,193,69,152,155,2,55,65,110,144,124,130,95,111,55,16,46,224,252,186,199,175,150,220,44,236,134,1,216,176,142,95,245,218,185,81,181,139,253,82,202,182,236,70,221,234,102,194,13,157,58,80,158,178,148,227,102,66,251,168,51,194,204,234,140,
13,249,216,241,171,31,229,153,58,194,103,39,69,36,251,142,58,81,95,155,138,194,182,249,206,182,168,171,221,92,169,27,211,91,200,183,95,71,185,169,82,79,190,83,255,244,166,153,131,143,19,9,176,6,145,93,14,145,207,148,200,46,135,200,103,74,100,151,67,228,
51,37,178,203,33,242,41,1,166,14,107,191,147,222,115,90,145,10,32,127,255,196,135,9,48,238,107,118,47,229,190,64,190,221,119,40,207,125,1,113,138,61,247,37,187,71,120,176,227,94,2,148,199,39,249,44,219,204,14,187,143,164,245,183,123,38,203,220,115,204,
15,163,96,86,38,23,31,171,138,103,225,143,245,148,5,24,83,233,120,241,198,84,19,207,85,241,58,119,159,252,127,137,221,253,227,214,163,60,237,166,115,63,253,241,98,249,123,46,29,39,166,198,46,190,176,24,90,250,220,166,246,24,195,7,46,29,87,190,198,191,
190,189,120,160,197,243,105,185,201,4,24,180,26,5,107,39,69,207,166,73,128,197,68,39,194,68,112,145,246,23,102,58,255,96,223,253,13,196,68,131,173,227,215,50,62,77,36,89,190,93,252,237,251,116,240,55,10,99,162,155,73,90,158,41,35,220,200,236,59,55,58,
27,73,194,135,175,167,221,28,59,9,254,241,107,55,71,64,72,217,175,140,212,141,58,178,158,27,109,186,223,104,139,175,63,55,72,63,58,150,131,143,19,9,176,6,145,93,14,145,207,148,200,46,135,200,103,74,100,151,67,228,51,37,178,203,33,242,41,1,166,14,107,
191,195,245,185,157,31,230,184,54,251,81,66,150,237,122,141,15,63,139,129,124,166,34,114,253,79,5,22,247,7,4,22,246,108,215,223,63,12,242,185,55,112,207,243,246,248,37,159,123,181,31,73,243,245,199,191,213,147,58,81,158,186,76,117,244,11,124,172,42,158,
133,63,214,83,22,96,240,207,175,121,101,189,219,159,159,24,25,251,243,159,255,92,255,182,62,121,1,118,240,242,253,107,83,245,166,154,174,250,250,77,181,231,183,34,49,53,188,106,180,169,29,41,35,39,30,53,206,6,33,119,236,7,174,44,238,153,96,10,101,187,
201,11,176,179,215,156,86,203,75,197,104,59,233,234,247,94,81,95,106,36,9,176,152,232,68,152,8,58,252,57,2,204,79,21,49,193,194,122,196,24,235,13,110,10,86,110,58,80,23,27,57,50,114,4,24,98,199,223,120,88,103,117,195,135,23,60,51,37,192,252,72,33,55,
66,166,148,248,125,101,15,64,115,35,164,190,228,89,157,253,50,80,255,169,206,211,247,113,34,1,214,32,178,203,33,242,153,18,217,229,16,249,76,137,236,114,136,124,166,68,118,57,68,62,37,192,212,97,21,213,199,199,106,213,226,153,251,50,247,234,201,166,249,
91,57,79,171,50,124,166,235,12,223,39,232,4,244,203,58,213,231,234,20,254,88,79,75,128,1,111,62,108,245,255,93,173,18,211,243,120,173,124,154,188,0,3,158,159,226,153,178,220,116,231,47,238,43,86,189,247,242,113,34,10,70,94,180,186,105,27,33,139,159,83,
44,127,221,121,161,253,170,119,175,127,152,115,58,41,253,195,229,243,94,117,118,125,77,251,233,235,95,251,239,218,243,110,105,146,0,139,137,78,132,137,224,130,67,39,223,190,243,75,152,127,56,152,231,164,236,34,67,57,127,193,49,193,194,133,102,58,83,23,
38,2,241,229,5,21,240,43,157,223,30,34,205,202,240,43,158,47,239,5,23,48,82,103,34,178,85,123,58,9,254,211,250,83,135,137,126,105,196,198,218,23,213,127,170,191,82,250,56,233,132,0,19,162,19,72,128,73,128,137,234,227,99,181,106,241,204,143,186,237,252,
209,54,229,210,31,80,109,29,229,249,1,149,62,19,249,244,39,236,199,213,148,78,247,53,232,35,248,31,206,251,1,127,172,167,45,192,224,140,83,142,47,190,242,229,27,235,18,160,117,250,213,47,127,89,92,178,246,13,53,155,229,75,247,169,231,54,210,215,202,131,
147,250,134,127,124,245,203,139,91,254,231,107,245,82,147,167,183,124,241,134,112,234,225,242,183,188,174,88,218,238,255,137,141,29,48,206,30,198,74,134,95,249,210,226,53,231,190,172,184,237,219,223,172,111,177,189,68,27,46,126,243,133,225,127,125,157,
120,220,97,45,95,77,239,19,207,209,241,92,24,54,188,236,36,77,76,105,76,125,139,252,139,26,226,137,139,129,77,63,0,190,35,196,152,74,104,47,166,160,44,23,149,86,130,133,178,92,180,24,157,65,52,249,81,155,233,96,98,139,121,234,222,47,23,57,27,29,99,217,
68,142,213,159,122,112,65,164,60,162,133,246,80,134,178,230,123,162,246,116,138,72,128,81,23,182,205,69,19,16,193,212,27,225,75,189,105,171,217,176,142,246,155,16,101,31,123,95,57,248,56,145,0,19,253,130,4,152,4,152,168,62,62,86,171,40,192,188,152,226,
94,204,61,215,151,1,202,69,253,4,250,81,244,51,232,71,165,235,34,82,31,220,231,125,159,137,101,63,130,198,118,129,101,250,10,244,43,248,180,245,179,66,128,25,135,173,28,169,189,64,131,23,79,240,182,195,63,252,225,15,181,23,80,32,206,120,237,186,47,203,
27,253,248,31,45,222,14,104,32,66,124,153,20,94,43,207,11,41,120,155,224,79,239,253,73,169,184,31,170,9,146,7,30,248,69,241,189,239,126,167,248,204,117,215,22,23,94,112,94,113,224,161,7,22,195,135,141,21,195,135,58,14,59,176,24,202,109,87,41,194,176,
75,253,12,31,60,180,161,12,175,132,231,101,35,136,71,94,195,191,161,78,191,184,191,54,133,242,83,215,94,83,188,246,252,115,75,193,25,63,115,150,194,212,203,119,94,118,73,109,148,12,193,202,62,196,215,87,255,251,191,138,55,188,246,53,77,101,121,235,227,
89,47,62,165,105,31,158,113,234,241,77,101,196,122,162,19,97,50,152,11,238,231,161,243,201,197,135,147,156,101,251,37,136,139,130,255,85,40,29,174,231,226,195,69,128,207,232,215,163,233,128,79,132,139,93,116,240,207,69,199,182,229,231,221,83,79,234,97,
117,96,29,237,161,188,191,168,77,214,158,78,144,214,205,96,223,82,71,234,68,155,168,23,121,28,7,68,152,175,103,171,250,231,226,227,68,2,76,244,11,18,96,18,96,162,250,248,88,173,186,0,227,62,204,143,202,190,12,80,46,18,96,244,37,114,126,192,245,101,249,
97,21,16,125,86,7,126,132,165,191,99,101,248,225,216,126,168,69,232,177,158,178,86,102,86,9,48,33,250,153,232,100,16,179,155,52,70,36,192,68,191,32,1,38,1,38,170,143,143,213,42,10,48,68,17,34,6,113,195,204,159,232,7,89,202,249,41,136,246,44,23,66,200,
11,54,126,48,181,31,88,45,207,99,2,140,31,84,253,172,28,252,177,93,126,116,181,124,182,105,143,36,224,215,68,23,98,204,242,37,192,132,232,19,162,147,65,204,110,210,24,145,0,19,253,130,4,152,4,152,168,62,62,86,171,42,192,24,249,154,104,38,76,171,17,48,
102,173,120,33,133,15,196,146,31,85,243,152,15,158,71,79,95,96,102,207,168,227,15,33,134,176,178,103,201,16,104,140,128,249,242,228,75,128,9,209,71,68,39,132,152,157,68,241,33,1,38,250,5,9,48,9,48,81,125,124,172,86,81,128,153,152,153,136,86,2,140,209,
168,244,15,179,121,164,160,149,79,243,97,83,10,211,245,192,72,23,162,138,81,46,202,145,135,16,51,49,230,145,0,19,162,15,137,78,12,49,59,136,226,193,144,0,19,253,130,4,152,4,152,168,62,62,86,7,89,128,241,182,68,196,142,97,235,120,30,29,97,69,30,163,88,
60,215,53,153,0,3,70,181,40,107,47,48,51,177,197,243,227,136,47,222,172,104,101,217,62,121,108,131,242,122,6,76,8,33,42,134,4,152,232,23,166,35,192,120,248,221,255,109,70,39,192,103,244,178,27,58,70,246,204,71,39,240,109,149,0,19,85,199,199,106,213,226,
153,243,157,243,62,90,231,161,28,35,91,30,191,30,129,100,35,87,136,162,86,62,211,105,142,246,2,179,244,5,92,216,251,81,53,224,187,141,132,153,127,174,77,105,185,94,227,143,181,4,152,16,66,212,145,0,19,253,194,116,4,216,68,211,124,166,10,130,206,222,92,
106,207,99,0,29,156,104,250,209,84,241,109,149,0,19,85,199,199,170,226,89,248,99,45,1,38,132,16,117,58,33,192,14,26,91,60,45,34,159,41,145,93,14,145,207,148,200,46,135,200,103,74,100,151,67,228,51,37,178,203,33,242,153,18,217,229,16,249,108,87,128,241,
43,47,130,203,255,173,67,42,192,172,12,98,9,252,223,76,96,199,58,255,171,180,253,77,132,217,145,199,122,126,133,38,143,233,62,182,77,19,96,124,146,199,122,243,195,50,96,203,58,252,2,203,148,183,114,30,223,86,117,88,69,213,241,177,170,120,22,254,88,75,
128,9,33,68,29,9,176,6,145,93,14,145,207,148,200,46,135,200,103,74,100,151,67,228,51,37,178,203,33,242,217,142,0,67,16,49,253,143,105,58,252,25,185,61,239,128,192,49,1,134,0,226,141,98,188,14,154,60,196,18,235,89,199,72,150,61,159,129,168,98,122,144,
217,243,182,49,202,155,79,150,17,77,148,177,231,61,152,26,68,30,223,173,44,126,108,132,140,178,228,83,71,182,207,131,245,212,147,87,90,251,237,121,124,91,213,97,21,85,199,199,170,226,89,248,99,45,1,38,122,70,20,156,66,204,52,81,44,26,18,96,13,34,187,
28,34,159,41,145,93,14,145,207,148,200,46,135,200,103,74,100,151,67,228,51,119,10,34,35,75,246,230,48,47,192,236,191,119,172,28,98,204,4,24,15,178,219,200,25,66,202,94,25,205,122,68,149,31,41,51,1,198,178,159,114,72,30,201,214,33,202,236,191,127,16,88,
254,109,102,108,155,245,44,35,210,162,63,117,245,109,85,135,85,84,29,31,171,138,103,225,143,181,4,152,232,58,81,80,10,209,109,162,216,148,0,107,16,217,229,16,249,76,137,236,114,136,124,166,68,118,57,68,62,83,34,187,28,34,159,237,8,48,70,183,120,83,24,
35,76,136,39,19,70,94,128,49,226,100,162,7,40,107,2,12,65,100,249,128,189,77,17,76,95,172,49,145,0,243,126,176,165,78,44,35,192,252,203,64,176,51,31,190,156,199,183,85,29,86,81,117,124,172,42,158,133,63,214,18,96,162,171,68,1,41,68,175,72,227,83,2,172,
65,100,151,67,228,51,37,178,203,33,242,153,18,217,229,16,249,76,137,236,114,136,124,182,35,192,152,202,199,8,23,203,188,65,44,18,96,140,126,89,25,176,231,183,88,246,130,8,225,197,58,150,35,113,148,10,48,123,43,25,121,94,144,165,2,204,143,190,73,128,137,
217,134,143,85,197,179,240,199,90,2,76,116,149,40,32,133,232,21,105,124,74,128,53,136,236,114,136,124,166,68,118,57,68,62,83,34,187,28,34,159,41,145,93,14,145,207,118,4,24,194,138,17,46,94,215,140,152,241,2,202,4,24,83,12,17,62,136,33,166,252,177,108,
2,12,123,202,241,138,104,62,237,207,76,39,19,96,172,67,88,249,151,112,88,57,9,48,33,26,248,88,85,60,11,127,172,37,192,68,215,136,130,81,136,94,227,99,84,2,172,65,100,151,67,228,51,37,178,203,33,242,153,18,217,229,16,249,76,137,236,114,136,124,182,251,
12,24,211,11,17,82,246,182,65,242,24,205,242,111,53,100,25,33,196,40,25,83,11,253,255,237,176,204,58,255,106,121,236,237,217,48,195,222,130,104,235,17,109,216,144,231,253,121,91,234,100,130,11,40,231,125,164,219,0,223,86,117,88,69,213,241,177,170,120,
22,254,88,75,128,137,174,17,5,163,16,189,198,199,168,4,88,131,200,46,135,200,103,74,100,151,67,228,51,37,178,203,33,242,153,18,217,229,16,249,204,125,9,71,43,16,65,38,116,210,209,170,126,196,183,85,29,86,81,117,124,172,42,158,133,63,214,18,96,162,107,
68,193,40,68,175,241,49,42,1,214,32,178,203,33,242,153,18,217,229,16,249,76,137,236,114,136,124,166,68,118,57,68,62,59,37,192,24,185,226,109,135,76,33,100,244,203,143,116,245,35,190,173,234,176,138,170,227,99,85,241,44,252,177,150,0,19,93,35,10,70,33,
122,141,143,81,9,176,6,145,93,14,145,207,148,200,46,135,200,103,74,100,151,67,228,51,37,178,203,33,242,217,41,1,86,53,124,91,213,97,21,85,199,199,170,226,89,248,99,45,1,38,186,70,20,140,66,244,26,31,163,18,96,13,34,187,28,34,159,41,145,93,14,145,207,
148,200,46,135,200,103,74,100,151,67,228,83,2,76,29,86,81,125,124,172,42,158,133,63,214,18,96,162,107,68,193,40,68,175,241,49,42,1,214,32,178,203,33,242,153,18,217,229,16,249,76,137,236,114,136,124,166,68,118,57,68,62,37,192,212,97,21,213,199,199,170,
226,89,248,99,45,1,38,186,70,20,140,66,244,26,31,163,157,16,96,66,116,2,9,48,117,88,69,245,241,177,170,120,22,254,88,75,128,137,174,17,5,163,16,189,198,199,168,4,152,232,23,36,192,212,97,21,213,199,199,170,226,89,248,99,45,1,38,186,70,20,140,66,244,26,
31,163,18,96,162,95,144,0,83,135,85,84,31,31,171,138,103,225,143,181,4,152,232,26,81,48,10,209,107,124,140,74,128,137,126,65,2,76,29,86,81,125,124,172,42,158,133,63,214,18,96,162,107,68,193,40,68,175,241,49,42,1,38,250,5,9,48,117,88,69,245,241,177,170,
120,22,254,88,75,128,137,174,17,5,163,16,189,198,199,168,4,152,232,23,36,192,212,97,21,213,199,199,170,226,89,248,99,45,1,38,186,70,20,140,66,244,26,31,163,18,96,162,95,144,0,83,135,85,84,31,31,171,138,103,225,143,181,4,152,232,26,81,48,10,209,107,124,
140,74,128,137,126,65,2,76,29,86,81,125,124,172,42,158,133,63,214,18,96,162,107,68,193,40,68,175,241,49,42,1,38,250,5,9,48,117,88,69,245,241,177,170,120,22,254,88,75,128,137,174,17,5,163,16,189,198,199,104,39,4,216,65,99,139,167,69,228,51,37,178,203,
33,242,153,18,217,229,16,249,76,137,236,114,136,124,166,68,118,57,68,62,83,34,187,28,34,159,18,96,234,176,138,234,227,99,85,241,44,252,177,150,0,19,93,35,10,70,33,122,141,143,81,9,176,6,145,93,14,145,207,148,200,46,135,200,103,74,100,151,67,228,51,37,
178,203,33,242,41,1,166,14,171,168,62,62,86,21,207,194,31,107,9,48,209,53,162,96,20,162,215,248,24,149,0,107,16,217,229,16,249,76,137,236,114,136,124,166,68,118,57,68,62,83,34,187,28,34,159,18,96,234,176,138,234,227,99,85,241,44,252,177,150,0,19,93,35,
10,70,33,122,141,143,81,9,176,6,145,93,14,145,207,148,200,46,135,200,103,74,100,151,67,228,51,37,178,203,33,242,41,1,166,14,171,168,62,62,86,21,207,194,31,107,9,48,209,53,162,96,20,162,215,248,24,149,0,107,16,217,229,16,249,76,137,236,114,136,124,166,
68,118,57,68,62,83,34,187,28,34,159,18,96,213,235,176,158,119,238,57,197,233,167,172,14,215,137,217,137,143,85,9,48,225,143,181,4,152,232,26,81,48,10,209,107,124,140,74,128,53,136,236,114,136,124,166,68,118,57,68,62,83,34,187,28,34,159,41,145,93,14,145,
79,9,176,234,117,88,47,187,244,146,154,8,139,214,229,208,142,144,235,165,216,219,115,215,157,138,147,142,63,166,56,238,168,67,199,173,91,57,54,92,28,190,234,160,113,249,163,67,139,155,202,179,140,15,242,125,185,78,178,207,94,187,213,234,147,230,177,93,
218,224,243,173,77,172,231,59,245,106,213,198,28,124,172,74,128,9,127,172,37,192,68,215,136,130,81,136,94,227,99,84,2,172,65,100,151,67,228,51,37,178,203,33,242,153,18,217,229,16,249,76,137,236,114,136,124,74,128,117,166,195,186,100,223,69,181,142,180,
117,196,233,104,35,16,172,131,221,170,131,142,93,148,159,10,6,203,199,103,167,4,88,59,126,58,181,173,169,192,62,248,245,131,15,22,95,189,249,166,226,174,187,238,44,62,119,195,245,27,132,203,53,31,253,72,177,110,221,186,113,251,143,178,247,220,253,227,
13,223,89,254,230,45,223,216,224,227,195,31,124,255,6,31,157,130,125,132,111,159,199,177,34,93,116,225,5,77,249,236,75,18,235,249,142,45,117,164,126,240,157,59,110,159,146,24,243,177,42,1,38,252,177,150,0,19,93,35,10,70,33,122,141,143,81,9,176,6,145,
93,14,145,207,148,200,46,135,200,103,74,100,151,67,228,51,37,178,203,33,242,41,1,54,253,14,235,153,47,62,173,248,242,23,111,172,117,166,175,251,228,39,106,162,0,241,64,199,26,209,112,197,187,222,81,91,182,78,55,235,233,104,147,143,221,5,231,159,87,203,
71,180,33,22,222,119,213,149,27,236,44,31,123,68,7,254,233,236,79,85,20,153,80,140,132,156,137,69,63,106,147,150,193,206,151,193,198,139,69,196,77,52,50,53,21,240,139,40,177,239,236,23,19,52,236,11,214,121,129,99,229,217,87,150,199,178,175,31,2,140,125,
107,223,59,1,199,131,250,216,241,5,150,77,80,249,178,228,129,149,101,255,130,173,71,124,221,119,223,207,199,9,203,201,240,177,42,1,38,252,177,150,0,19,93,35,10,70,33,122,141,143,81,9,176,6,145,93,14,145,207,148,200,46,135,200,103,74,100,151,67,228,51,
37,178,203,33,242,41,1,54,253,14,43,194,0,188,112,161,211,207,8,141,229,33,210,232,252,179,140,160,49,225,128,96,177,209,19,202,164,162,139,79,58,235,94,52,208,129,159,138,0,51,159,145,144,67,52,33,22,16,3,169,64,176,50,212,143,118,146,135,31,19,115,
136,72,219,198,197,107,47,218,208,134,233,146,10,48,124,219,62,164,13,212,203,11,28,182,75,222,68,2,140,101,82,167,70,193,152,158,201,190,100,63,240,105,249,124,55,145,104,130,148,81,80,246,149,149,39,47,21,96,64,59,76,148,183,139,143,85,9,48,225,143,
117,91,2,172,204,19,162,109,124,236,120,162,96,20,162,215,248,24,149,0,107,16,217,229,16,249,76,137,236,114,136,124,166,68,118,57,68,62,83,34,187,28,34,159,18,96,211,239,176,210,153,167,211,140,160,177,206,52,29,125,19,86,246,221,196,2,29,112,150,233,
156,27,228,35,110,176,241,249,136,28,132,135,239,164,155,208,176,239,237,130,88,64,20,216,119,252,155,31,132,141,137,2,70,97,172,28,219,141,182,69,93,207,57,123,77,109,153,58,155,200,161,93,233,116,203,169,130,79,4,20,117,160,205,140,12,217,244,60,234,
71,125,105,131,9,28,234,193,182,39,18,96,64,29,167,251,204,149,129,48,182,103,228,216,190,141,92,153,0,99,223,177,175,200,163,13,236,51,234,60,145,0,139,242,38,195,199,170,4,152,240,199,186,109,1,54,119,163,141,138,121,115,231,10,209,146,77,231,205,43,
182,218,98,139,166,216,241,68,193,40,68,175,241,49,42,1,214,32,178,203,33,242,153,18,217,229,16,249,76,137,236,114,136,124,166,68,118,57,68,62,37,192,58,215,97,69,136,49,194,193,72,17,157,126,146,31,1,51,81,195,232,23,162,202,219,130,31,225,241,96,235,
71,87,232,244,79,69,128,209,169,247,83,246,188,144,67,168,152,232,3,219,30,54,86,198,70,123,88,79,121,203,199,39,190,16,63,76,161,36,175,19,152,0,99,191,164,130,201,4,152,9,28,246,17,251,206,108,172,92,36,192,166,50,197,47,2,31,140,114,218,62,195,175,
237,95,19,96,54,234,104,35,157,124,167,236,68,2,140,245,26,1,19,211,193,31,235,182,4,216,100,29,14,33,160,85,135,193,136,130,81,136,94,227,99,84,2,172,65,100,151,67,228,51,37,178,203,33,242,153,18,217,229,16,249,76,137,236,114,136,124,74,128,77,191,195,
138,8,160,195,204,232,6,163,43,116,204,233,244,243,2,9,196,18,157,114,58,225,54,98,196,122,58,227,116,188,17,53,214,217,182,124,4,5,249,38,210,232,180,91,121,132,14,190,76,252,228,96,83,8,237,187,23,114,38,104,108,157,97,2,204,234,96,130,210,70,119,88,
70,92,208,110,234,150,43,28,38,130,125,136,24,137,214,89,125,77,224,32,124,17,105,147,9,48,234,220,41,145,104,194,211,190,35,64,217,15,44,155,0,99,153,79,48,113,61,145,0,163,174,136,186,220,81,68,31,171,221,16,96,236,119,98,169,213,241,233,20,236,15,
68,63,177,199,190,141,126,184,232,36,196,16,177,68,187,136,147,153,222,158,135,56,240,177,59,29,252,177,150,0,19,29,67,2,76,84,17,31,163,157,16,96,66,116,2,9,176,233,119,88,233,44,211,177,71,124,88,199,217,196,3,211,227,232,88,165,226,6,177,69,231,14,
252,75,43,200,167,99,143,141,31,245,161,195,203,54,16,81,148,1,91,215,46,8,37,58,120,108,147,206,51,35,54,38,162,216,22,235,76,72,90,62,245,176,101,91,143,61,29,98,203,7,196,5,235,77,160,117,2,219,135,209,58,19,96,182,76,125,88,198,198,119,98,89,166,
173,192,50,157,106,202,216,250,233,192,54,83,161,132,127,246,165,23,96,44,147,236,120,166,2,140,239,246,137,104,55,161,158,131,143,213,110,8,48,218,217,13,1,70,204,218,190,50,177,61,149,216,111,23,124,251,248,64,244,249,243,115,166,32,54,16,154,62,118,
167,131,63,214,18,96,162,99,72,128,137,42,226,99,84,2,76,244,11,18,96,51,211,97,157,72,60,244,18,19,114,140,176,165,66,14,49,129,16,64,0,122,33,105,101,88,102,29,34,144,142,177,183,197,167,9,142,78,65,93,91,117,126,169,31,117,96,153,122,88,125,177,241,
194,213,196,144,97,249,211,37,221,142,193,62,2,234,230,197,153,223,54,109,178,186,83,214,215,207,242,115,241,177,218,13,1,198,62,167,238,221,142,113,19,184,209,186,78,195,49,230,71,10,127,28,103,2,182,99,63,12,72,128,137,190,70,2,76,84,17,31,163,18,96,
162,95,144,0,155,153,14,43,29,84,70,8,162,117,131,6,29,200,110,141,20,136,24,31,171,221,16,96,208,109,1,70,124,17,103,196,91,180,190,83,176,29,70,116,217,214,84,70,35,115,97,91,108,71,2,76,244,61,18,96,162,138,248,24,149,0,19,253,130,4,88,247,58,172,
131,8,35,95,116,194,253,116,68,209,125,124,172,14,162,0,99,91,221,18,249,252,120,194,8,49,163,193,108,147,109,71,229,58,1,163,201,54,114,44,1,38,250,158,78,9,48,78,228,78,63,96,201,28,94,63,45,163,211,240,203,79,171,11,80,250,44,129,199,222,104,69,221,
108,121,42,224,127,170,83,36,102,59,62,70,37,192,68,191,32,1,38,1,38,170,143,143,213,65,19,96,221,20,95,41,140,78,117,186,159,232,177,151,139,176,31,153,134,104,111,213,140,202,230,224,143,181,4,152,232,24,157,18,96,204,183,238,244,156,117,126,189,152,
201,95,75,152,139,220,170,206,228,251,121,230,30,251,85,101,170,191,176,112,1,178,139,4,159,252,50,20,149,19,173,241,49,42,1,38,250,5,9,48,9,48,81,125,124,172,14,146,0,235,182,248,242,207,123,241,99,115,55,183,61,213,254,89,132,63,214,18,96,162,99,204,
148,0,99,116,200,63,4,203,103,122,226,121,129,195,186,244,97,208,169,10,48,182,133,29,39,63,219,160,46,228,177,156,94,16,124,157,176,177,50,169,0,163,28,223,177,105,37,192,24,81,163,204,68,117,230,173,87,92,132,58,61,239,186,221,54,27,228,91,123,44,143,
114,214,134,232,193,92,123,0,123,162,246,117,11,31,163,18,96,162,95,144,0,147,0,19,213,199,199,234,32,9,48,250,53,105,106,245,35,116,39,224,199,102,222,68,105,63,56,207,228,232,87,74,218,63,155,14,254,88,75,128,137,142,49,19,2,140,206,63,39,28,255,233,
193,127,64,240,64,36,29,123,222,128,99,29,126,58,243,12,17,179,204,73,73,57,202,99,103,101,166,42,192,168,11,126,168,15,15,110,51,44,141,127,150,217,166,253,183,10,229,236,130,71,157,169,31,67,228,252,159,11,219,102,61,235,152,143,207,119,234,103,163,
86,228,251,19,156,246,145,207,54,152,150,216,234,129,113,124,219,246,59,73,187,109,6,218,64,29,105,43,229,104,59,249,216,82,63,242,89,246,55,3,70,233,240,195,62,240,251,166,87,248,24,149,0,19,253,130,4,152,4,152,168,62,62,86,21,207,194,31,107,9,48,209,
49,102,66,128,33,168,236,33,98,58,247,214,145,167,99,111,249,8,3,68,1,194,133,14,189,141,8,209,193,183,50,228,79,85,128,153,48,2,132,3,175,251,101,153,145,44,132,137,149,179,186,177,77,47,154,188,200,160,188,141,148,121,223,94,128,145,159,218,91,155,
60,136,188,169,180,105,50,218,109,51,163,92,169,176,50,113,102,226,205,214,33,206,188,24,182,246,240,64,45,254,173,92,47,240,49,42,1,38,250,5,9,48,117,88,69,245,241,177,170,120,22,254,88,75,128,137,142,49,19,2,140,14,62,163,49,124,26,228,51,234,101,203,
116,232,233,220,35,8,24,162,246,101,109,152,154,50,83,21,96,254,229,24,248,36,143,101,252,89,29,200,179,101,196,33,111,208,49,27,236,205,134,250,89,62,152,208,241,2,12,33,131,96,177,54,128,159,222,104,176,95,162,252,233,210,110,155,17,101,94,100,209,
102,70,189,88,230,248,249,125,128,13,182,254,184,1,199,205,218,221,43,124,140,118,66,128,29,52,182,120,90,68,62,83,34,187,28,34,159,41,145,93,14,145,207,148,200,46,135,200,103,74,100,151,67,228,51,37,178,203,33,242,41,1,166,14,171,168,62,62,86,21,207,
194,31,107,9,48,209,49,102,66,128,249,81,149,20,68,10,157,124,47,22,232,204,71,163,69,211,17,96,86,23,104,37,70,200,243,194,196,191,12,3,161,100,54,148,177,231,168,188,232,242,203,140,10,249,109,182,2,241,227,5,80,167,200,105,179,9,46,64,236,154,224,
197,222,108,0,27,108,17,92,94,132,82,134,227,104,223,123,129,143,81,9,176,6,145,93,14,145,207,148,200,46,135,200,103,74,100,151,67,228,51,37,178,203,33,242,41,1,166,14,171,168,62,62,86,21,207,194,31,235,182,4,216,38,27,111,92,44,152,63,191,216,114,193,
2,33,90,178,245,150,91,22,79,217,113,199,166,216,241,68,193,24,225,5,0,157,118,58,232,116,236,17,91,54,21,14,200,163,51,143,96,177,60,123,182,138,103,197,16,110,38,2,186,41,192,124,157,25,13,99,170,160,217,80,127,202,81,55,132,163,137,15,108,76,128,33,
32,201,199,22,187,86,34,139,41,153,148,3,4,31,116,98,68,172,221,54,83,79,150,169,39,109,165,30,182,143,91,9,48,91,135,112,99,95,32,78,187,241,135,138,19,225,99,84,2,172,65,100,151,67,228,51,37,178,203,33,242,153,18,217,229,16,249,76,137,236,114,136,124,
74,128,169,195,42,170,143,143,85,197,179,240,199,186,45,1,182,199,194,133,197,200,208,80,49,58,50,34,68,75,198,70,71,139,149,43,86,52,197,142,39,10,198,8,155,78,104,223,233,184,211,193,7,47,48,40,231,59,249,134,253,81,31,207,98,217,75,33,152,250,22,141,
140,77,70,90,23,182,79,30,203,248,179,250,144,151,214,13,145,197,118,169,191,217,0,254,16,31,228,155,13,190,40,155,218,211,142,168,141,6,118,8,83,202,225,211,218,59,29,216,118,59,109,182,178,8,40,142,141,9,44,192,222,183,25,27,191,255,237,24,249,237,
244,10,31,163,18,96,13,34,187,28,34,159,41,145,93,14,145,207,148,200,46,135,200,103,74,100,151,67,228,83,2,76,29,86,81,125,124,172,42,158,133,63,214,109,9,48,33,58,69,20,144,66,244,138,52,62,37,192,26,68,118,57,68,62,83,34,187,28,34,159,41,145,93,14,
145,207,148,200,46,135,200,167,4,152,58,172,162,250,248,88,85,60,11,127,172,37,192,68,87,137,2,82,136,94,145,198,167,4,88,131,200,46,135,200,103,74,100,151,67,228,51,37,178,203,33,242,153,18,217,229,16,249,148,0,83,135,85,84,31,31,171,138,103,225,143,
181,4,152,232,58,81,80,10,209,109,162,216,148,0,107,16,217,229,16,249,76,137,236,114,136,124,166,68,118,57,68,62,83,34,187,28,34,159,18,96,234,176,138,234,227,99,85,241,44,252,177,150,0,19,61,35,10,78,33,102,154,40,22,13,9,176,6,145,93,14,145,207,148,
200,46,135,200,103,74,100,151,67,228,51,37,178,203,33,242,41,1,166,14,171,168,62,62,86,21,207,194,31,107,9,48,33,132,168,35,1,214,32,178,203,33,242,153,18,217,229,16,249,76,137,236,114,136,124,166,68,118,57,68,62,37,192,212,97,21,213,199,199,170,226,
89,248,99,45,1,38,132,16,117,36,192,26,68,118,57,68,62,83,34,187,28,34,159,41,145,93,14,145,207,148,200,46,135,200,167,4,152,58,172,162,250,248,88,85,60,11,127,172,37,192,132,16,162,142,4,88,131,200,46,135,200,103,74,100,151,67,228,51,37,178,203,33,242,
153,18,217,229,16,249,148,0,83,135,85,84,31,31,171,138,103,225,143,181,4,152,16,66,212,145,0,107,16,217,229,16,249,76,137,236,114,136,124,166,68,118,57,68,62,83,34,187,28,34,159,18,96,234,176,138,234,227,99,85,241,44,252,177,150,0,19,66,136,58,157,16,
96,66,116,2,9,48,117,88,69,245,241,177,170,120,22,254,88,75,128,9,33,68,29,9,48,209,47,72,128,169,195,42,170,143,143,85,197,179,240,199,90,2,76,116,141,50,182,196,0,17,29,227,170,35,1,38,250,5,9,48,117,88,69,245,241,177,170,120,22,254,88,75,128,137,174,
81,198,86,49,119,163,141,138,121,115,231,138,10,179,233,188,121,197,86,91,108,17,30,227,170,35,1,38,250,5,9,48,117,88,69,245,241,177,170,120,22,254,88,75,128,137,174,161,142,235,96,208,170,99,56,8,72,128,137,126,33,87,128,173,28,27,46,62,252,193,247,
23,23,93,120,65,184,62,135,139,215,94,84,28,190,234,160,218,242,251,174,186,114,195,242,116,192,207,146,125,23,133,235,60,190,173,234,176,138,170,227,99,85,241,44,252,177,150,0,19,93,67,29,215,193,64,2,76,113,44,102,158,92,1,246,213,155,111,42,206,57,
123,77,71,196,210,53,31,253,72,113,210,241,199,212,150,241,107,203,211,1,63,163,67,139,195,117,30,223,86,117,88,69,213,241,177,170,120,22,254,88,75,128,137,174,161,142,235,96,32,1,166,56,22,51,79,142,0,67,216,220,119,223,207,107,66,105,159,189,118,171,
229,49,218,228,191,27,150,159,142,70,89,62,35,105,169,0,59,253,148,213,181,239,150,103,236,185,235,78,181,188,227,142,58,180,41,31,200,51,127,124,247,2,140,79,203,79,241,109,85,135,85,84,29,31,171,138,103,225,143,181,4,152,232,26,234,184,14,6,18,96,138,
99,49,243,228,8,176,203,46,189,164,248,245,131,15,214,62,17,55,140,130,125,231,142,219,107,223,17,62,103,190,248,180,90,57,68,22,249,87,188,235,29,197,151,191,120,99,113,193,249,231,213,242,17,105,8,56,166,48,146,79,25,47,192,190,121,203,55,106,83,8,
89,135,56,179,237,146,199,54,248,164,156,229,227,223,182,111,83,34,77,128,89,221,76,140,165,248,182,170,195,42,170,142,143,85,197,179,240,199,90,2,76,116,13,117,92,7,3,9,48,197,177,152,121,114,4,24,220,115,247,143,55,44,35,124,76,116,49,210,132,112,98,
25,161,228,69,215,93,119,221,89,91,102,234,34,235,88,6,124,121,1,230,159,43,195,134,145,47,251,110,32,224,240,201,58,95,23,3,63,140,164,77,36,190,192,183,85,29,86,81,117,124,172,42,158,133,63,214,18,96,162,107,168,227,58,24,72,128,41,142,197,204,51,29,
1,198,136,21,32,122,224,186,79,126,162,150,255,185,27,174,175,9,32,203,7,242,17,95,231,157,123,206,6,251,104,10,162,173,195,135,77,57,100,164,139,178,148,89,183,110,93,77,88,177,206,252,122,200,67,188,249,17,180,8,223,86,117,88,69,213,241,177,170,120,
22,254,88,75,128,137,174,161,142,235,96,32,1,166,56,22,51,207,116,4,88,42,168,12,222,110,8,105,62,101,17,83,246,29,241,214,106,4,12,1,199,72,23,162,12,49,70,30,163,94,76,129,68,128,177,204,104,152,149,55,240,195,244,67,108,162,186,25,190,173,234,176,
138,170,227,99,85,241,44,252,177,150,0,19,93,67,29,215,193,64,2,76,113,44,102,158,233,8,48,132,14,163,77,8,39,166,34,50,197,144,124,4,18,249,76,81,68,64,217,116,68,203,167,60,207,129,217,11,61,88,135,112,66,116,217,58,155,206,200,72,23,54,248,39,159,
237,219,212,66,70,185,24,117,195,191,137,45,252,176,222,166,62,234,37,28,98,54,224,99,85,241,44,252,177,150,0,19,93,67,29,215,193,64,2,76,113,44,102,158,92,1,150,190,137,16,177,195,104,23,194,201,139,29,203,247,255,245,5,8,35,4,19,194,203,132,18,249,
148,225,229,29,8,41,214,251,231,191,40,139,152,195,63,248,117,124,247,219,224,211,214,227,191,155,2,140,237,250,182,26,212,131,54,24,105,157,108,189,207,75,97,223,216,20,207,217,8,251,181,213,177,100,191,167,113,233,153,104,223,18,59,126,234,107,85,241,
177,42,1,38,252,177,150,0,19,93,67,29,215,193,64,2,76,113,44,102,158,92,1,54,40,248,182,118,170,195,138,144,98,4,46,205,71,60,50,114,199,58,160,211,111,229,153,134,201,72,32,159,60,223,102,163,136,41,148,245,163,143,179,5,246,7,211,78,25,205,164,253,
224,69,46,251,210,158,67,76,215,49,69,214,158,69,100,93,180,111,25,69,157,104,170,106,85,240,177,42,1,38,252,177,150,0,19,93,67,29,215,193,96,182,11,176,77,54,222,184,88,48,127,126,177,229,130,5,66,204,24,91,111,185,101,241,148,29,119,108,138,61,136,
110,234,131,132,111,107,55,4,24,164,249,60,167,102,98,12,76,100,181,26,69,99,157,125,167,140,253,199,26,35,64,140,242,80,198,214,167,163,62,148,183,209,70,15,121,148,181,109,50,146,228,71,24,241,105,80,150,245,209,136,18,163,83,222,79,39,160,125,136,
82,63,186,133,136,98,63,88,29,17,102,190,190,6,226,107,178,23,177,128,23,96,214,62,91,103,109,178,239,182,31,236,59,229,91,181,151,124,108,41,67,59,210,209,59,243,75,57,214,243,221,251,6,59,174,230,199,175,75,241,177,42,1,38,252,177,150,0,19,93,67,2,
108,48,152,237,2,108,143,133,11,139,145,161,161,98,116,100,68,136,25,99,108,116,180,88,185,98,69,83,236,65,116,83,31,36,124,91,123,33,192,232,80,147,210,142,53,130,192,191,168,196,192,183,9,48,4,3,207,200,209,65,7,70,121,16,28,76,81,228,147,50,212,195,
196,4,101,236,245,253,230,15,232,252,51,122,68,221,216,46,223,177,247,47,67,49,63,148,161,44,219,224,89,60,132,143,149,161,62,212,141,122,71,117,159,42,248,165,109,105,62,35,98,38,96,168,147,253,21,130,135,250,76,38,90,192,4,24,101,241,101,211,17,201,
163,237,180,155,58,176,255,89,103,207,38,2,226,57,106,47,194,154,124,108,217,159,8,44,47,158,189,31,218,66,121,219,14,219,37,159,99,198,62,102,127,227,203,218,219,10,31,171,18,96,194,31,107,9,48,209,53,36,192,6,131,217,46,192,132,232,37,209,77,125,144,
240,109,237,134,0,163,3,206,58,160,147,141,168,241,34,198,224,249,183,104,228,198,4,24,35,64,38,190,200,167,99,110,162,11,40,195,58,202,153,31,4,74,244,252,24,66,139,124,47,84,24,169,49,209,195,54,173,142,180,193,222,70,9,212,193,4,30,109,162,172,173,
235,20,108,19,177,151,230,179,109,19,42,136,70,182,79,157,77,60,33,120,162,55,100,70,176,143,216,231,94,124,1,219,192,15,203,172,167,46,44,179,127,45,159,125,19,61,151,230,95,46,99,176,239,204,63,251,220,166,67,146,104,3,203,236,79,219,199,148,141,226,
160,21,62,86,171,40,192,136,89,246,153,197,84,43,172,156,167,85,25,59,71,102,35,254,88,75,128,137,174,33,1,54,24,72,128,9,209,59,162,155,250,32,225,219,218,13,1,70,103,218,58,140,148,163,19,207,244,186,180,147,136,152,242,130,202,192,134,209,18,58,247,
38,62,0,223,8,1,19,119,64,135,30,191,136,5,196,21,29,126,47,46,12,202,48,138,131,61,219,180,186,152,15,214,217,20,73,182,227,71,198,172,61,44,183,43,118,114,65,164,68,251,147,118,165,237,161,190,94,132,177,175,252,250,86,208,14,252,97,107,237,231,19,
123,191,79,237,152,216,62,65,40,32,218,188,47,195,132,20,235,109,31,81,47,19,187,236,47,219,150,175,167,143,31,182,231,247,247,100,248,88,173,162,0,179,248,166,253,196,35,251,47,26,193,164,28,231,141,63,54,182,142,242,8,103,246,59,249,28,87,139,223,233,
16,157,59,253,142,63,214,18,96,162,107,72,128,13,6,18,96,66,244,142,232,166,62,72,248,182,118,67,128,217,8,138,135,78,191,117,208,13,58,159,209,148,58,124,211,113,71,184,249,145,23,58,135,173,70,74,152,186,198,232,13,29,209,104,189,129,24,192,135,117,
248,217,62,182,108,199,70,123,168,191,23,126,94,128,209,14,234,103,235,58,5,219,166,83,110,98,5,172,3,110,245,242,80,71,235,112,211,9,143,246,99,138,181,27,252,126,100,187,81,155,216,46,199,216,246,109,186,222,131,40,244,226,148,253,137,141,31,213,243,
199,198,199,143,31,193,108,7,31,171,85,21,96,254,220,105,37,64,41,23,197,51,49,66,28,218,200,226,100,216,72,27,49,108,177,132,111,190,251,227,78,12,33,234,200,55,65,200,167,183,235,71,252,177,150,0,19,93,67,2,108,48,144,0,19,162,119,68,55,245,65,194,
183,181,147,2,140,206,161,9,46,19,93,126,217,67,39,206,126,165,167,227,72,71,47,26,253,2,223,241,164,243,104,35,54,64,199,158,78,61,254,188,61,29,68,4,64,180,109,160,115,73,39,151,79,4,139,77,133,179,206,172,159,114,136,143,86,2,12,31,116,158,89,31,117,
154,167,3,254,168,27,194,133,101,223,201,166,190,180,151,239,236,67,19,168,172,163,110,136,40,246,169,237,127,223,177,54,104,135,181,139,246,218,178,109,139,239,224,167,198,81,142,99,225,133,161,135,58,177,79,169,147,223,135,86,71,219,207,224,197,4,245,
51,17,98,199,149,122,83,23,111,19,225,99,117,16,4,24,251,42,154,126,234,207,3,15,251,39,202,111,5,101,25,145,228,88,97,75,220,240,157,253,109,177,76,57,226,131,56,176,248,161,28,223,17,224,196,214,100,34,188,87,248,99,45,1,38,186,134,4,216,96,32,1,38,
68,239,136,110,234,131,132,111,107,167,58,172,116,154,233,248,123,200,167,227,6,105,121,160,67,71,103,143,14,158,239,228,167,224,219,175,183,78,35,203,252,34,79,71,16,31,233,116,41,58,154,173,182,77,62,226,37,234,224,211,25,245,35,72,214,249,180,239,
140,192,249,41,98,172,167,211,108,109,238,36,108,139,58,210,70,255,204,149,141,68,176,93,218,225,235,3,212,151,124,246,11,251,56,93,15,248,243,251,209,239,99,150,205,214,183,157,122,76,52,58,101,117,98,255,249,109,226,143,206,187,47,235,183,199,49,78,
143,3,245,103,123,126,251,17,62,86,171,42,192,136,85,246,55,226,6,161,234,247,141,47,231,167,32,18,167,228,179,143,188,96,35,94,236,216,89,158,135,109,181,90,199,49,48,225,204,177,244,199,26,27,124,179,204,177,77,143,103,191,224,143,181,4,152,232,26,
18,96,131,129,4,152,16,189,35,186,169,15,18,190,173,85,236,176,182,3,157,119,235,160,230,128,40,161,99,217,106,132,103,54,195,62,241,163,133,57,208,145,231,152,68,235,166,139,143,213,42,11,48,132,107,36,188,12,43,151,230,219,40,174,125,199,7,66,201,143,
170,121,240,225,227,155,152,231,92,1,252,152,93,42,192,108,68,204,4,96,43,255,189,198,31,107,9,48,209,53,36,192,6,3,9,48,33,122,71,116,83,31,36,124,91,219,57,31,119,123,214,83,67,63,253,10,29,67,58,147,147,141,156,164,48,37,139,169,85,19,117,130,103,
43,140,126,176,95,91,141,156,180,2,177,134,29,226,34,90,63,109,158,89,253,120,70,88,181,35,102,90,9,48,226,156,145,49,214,91,30,226,169,149,207,212,7,231,138,137,99,111,199,178,255,17,131,243,131,145,53,251,222,151,196,241,176,65,128,237,81,178,90,2,
76,204,4,18,96,131,193,44,17,96,203,234,156,34,1,38,250,137,240,198,62,64,248,182,182,115,62,62,103,161,70,131,68,127,178,199,46,79,111,138,213,42,198,115,142,0,227,217,62,68,144,97,235,16,80,8,43,242,236,229,52,237,10,48,132,21,83,24,17,215,222,142,
81,50,166,67,50,194,134,200,51,1,200,52,73,182,193,212,71,239,167,31,104,17,15,53,1,182,160,100,247,146,227,37,192,196,76,176,201,198,27,23,11,230,207,47,182,92,176,64,84,152,173,183,220,178,120,202,142,59,134,199,184,234,212,47,136,39,151,12,151,140,
176,44,1,38,250,141,232,230,62,8,164,237,108,231,124,124,222,115,158,29,250,18,162,215,236,189,199,206,77,177,90,197,120,142,158,127,139,160,28,163,82,30,191,30,129,132,40,66,132,33,166,90,249,76,71,120,241,139,128,99,218,34,207,118,249,103,13,89,102,
244,210,70,215,16,98,148,35,111,42,83,81,103,154,22,241,112,66,201,156,191,41,217,181,228,24,9,48,49,19,236,177,112,97,49,50,52,84,140,142,140,136,10,51,54,58,90,172,92,177,34,60,198,85,199,253,34,181,180,100,73,201,9,18,96,162,223,136,110,238,131,64,
218,206,118,207,71,126,89,142,252,9,209,43,22,62,235,105,197,210,125,247,104,138,83,197,243,236,101,130,120,56,174,100,206,227,75,118,46,57,108,215,157,158,252,75,95,72,8,33,102,3,59,252,237,19,254,84,94,3,143,41,217,175,100,223,146,163,118,121,198,14,
186,30,138,190,35,186,201,87,153,168,141,237,158,143,251,239,179,176,216,253,217,234,180,138,254,128,206,246,254,207,221,173,41,70,65,241,60,59,153,36,30,142,40,153,243,216,146,167,148,44,223,126,155,249,95,91,118,192,162,113,133,133,16,98,80,217,111,
209,46,197,147,183,93,112,87,121,13,92,85,242,156,18,158,137,93,177,221,214,79,208,245,80,244,45,209,13,191,74,68,109,130,169,156,143,207,221,243,89,234,184,138,158,177,251,179,159,86,44,218,125,231,113,35,29,160,120,158,125,180,25,15,43,74,230,108,90,
178,109,201,243,158,188,253,214,87,46,220,121,48,159,241,16,66,136,8,46,136,59,108,187,229,181,229,53,144,169,33,207,44,217,169,100,241,14,219,109,165,235,161,16,93,70,231,163,24,36,20,207,194,227,226,97,255,146,57,115,75,120,14,236,89,37,43,183,219,
250,241,119,62,251,233,219,135,134,66,8,49,104,108,254,168,71,252,252,145,143,124,196,81,229,245,111,97,201,118,37,252,32,181,139,174,135,66,116,31,157,143,98,144,80,60,11,143,139,7,222,189,49,231,175,75,30,83,66,80,236,53,255,241,143,61,107,219,173,
30,247,127,4,197,51,118,220,38,116,32,132,16,85,135,235,27,23,195,249,143,223,236,85,229,181,239,185,37,79,42,153,95,194,115,177,220,40,117,61,20,162,75,232,124,20,131,132,226,89,120,90,196,195,156,191,42,217,184,228,113,37,59,148,44,42,89,181,237,214,
243,63,182,205,130,205,126,180,96,243,185,197,227,54,125,132,16,66,12,12,243,31,59,247,39,91,253,205,102,159,121,228,35,31,113,116,121,189,219,167,228,239,74,158,80,50,175,100,147,18,93,15,133,232,18,58,31,197,32,161,120,22,158,9,226,97,206,195,74,30,
81,66,80,152,50,103,120,116,113,9,15,137,29,89,242,130,146,213,37,188,70,83,8,33,170,8,215,48,174,101,92,211,14,46,57,160,100,183,18,126,137,178,155,35,215,66,93,15,133,152,121,116,62,138,65,66,241,44,60,237,196,67,45,153,8,227,121,176,205,74,182,40,
217,190,228,105,37,207,46,97,238,42,111,110,129,61,133,16,162,130,112,253,226,90,198,53,237,233,37,92,8,183,44,225,77,176,92,251,184,6,62,188,68,215,67,33,102,30,157,143,98,144,80,60,11,207,36,241,48,231,17,255,31,194,152,166,96,81,95,137,222,0,0,0,0,
73,69,78,68,174,66,96,130,0,0 };
const char* GlobalEditor_864x144_png = (const char*) temp_binary_data_13;
const char* GlobalEditor_864x144_png = (const char*) temp_binary_data_14;
//================== OperatorEditor_287x218.png ==================
static const unsigned char temp_binary_data_14[] =
static const unsigned char temp_binary_data_15[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,1,31,0,0,0,218,8,6,0,0,0,159,5,70,254,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,9,112,72,89,115,0,0,14,195,0,0,14,195,1,199,111,168,100,0,0,42,68,73,68,65,
84,120,94,237,157,107,136,101,89,149,231,179,180,91,243,209,86,101,101,102,101,101,70,190,51,35,34,51,50,51,30,25,239,136,27,239,136,140,200,168,200,180,179,170,108,203,71,217,85,150,218,182,35,232,96,151,96,183,14,66,53,66,13,136,130,80,32,20,72,33,
130,130,136,35,50,162,51,142,72,139,126,80,63,40,50,168,31,212,153,193,154,129,41,161,177,190,116,194,124,216,179,127,251,198,138,92,113,98,159,251,136,251,136,115,206,93,1,63,206,57,123,175,189,247,185,103,173,253,63,235,156,115,227,158,125,254,111,
@@ -9663,7 +9849,7 @@ static const unsigned char temp_binary_data_14[] =
167,228,121,91,207,133,83,255,169,251,236,241,255,117,238,228,97,215,117,236,144,97,24,198,174,57,253,232,67,255,251,252,233,71,254,139,207,120,158,246,250,50,231,185,236,121,196,115,192,179,239,160,231,152,231,130,103,216,179,228,225,134,208,187,60,
207,122,222,231,225,75,65,134,97,24,181,128,102,160,29,104,200,227,158,21,15,143,214,201,120,16,158,67,251,246,237,251,139,255,15,171,227,103,50,233,85,150,225,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* OperatorEditor_287x218_png = (const char*) temp_binary_data_14;
const char* OperatorEditor_287x218_png = (const char*) temp_binary_data_15;
const char* getNamedResource (const char*, int&) throw();
@@ -9676,6 +9862,7 @@ const char* getNamedResource (const char* resourceNameUTF8, int& numBytes) throw
switch (hash)
{
case 0x23112e79: numBytes = 14239; return dexedIcon_png;
case 0xb5f9cc57: numBytes = 841; return Switch_32x32_png;
case 0xb808cdf7: numBytes = 2261; return Switch_48x26_png;
case 0x5fe3afed: numBytes = 1850; return ButtonUnlabeled_50x30_png;
@@ -9689,7 +9876,7 @@ const char* getNamedResource (const char* resourceNameUTF8, int& numBytes) throw
case 0x654b711b: numBytes = 311508; return NotoSansBold_ttf;
case 0x796d1c9c: numBytes = 88890; return builtin_pgm_zip;
case 0xb02b7677: numBytes = 24863; return about_png;
case 0xff44b02a: numBytes = 17334; return GlobalEditor_864x144_png;
case 0xff44b02a: numBytes = 16209; return GlobalEditor_864x144_png;
case 0x081c7d0e: numBytes = 10927; return OperatorEditor_287x218_png;
default: break;
}
@@ -9700,6 +9887,7 @@ const char* getNamedResource (const char* resourceNameUTF8, int& numBytes) throw
const char* namedResourceList[] =
{
"dexedIcon_png",
"Switch_32x32_png",
"Switch_48x26_png",
"ButtonUnlabeled_50x30_png",


+ 6
- 6
ports/dexed/source/BinaryData.h View File

@@ -4,11 +4,13 @@
*/
#ifndef BINARYDATA_H_22182922_INCLUDED
#define BINARYDATA_H_22182922_INCLUDED
#pragma once
namespace BinaryData
{
extern const char* dexedIcon_png;
const int dexedIcon_pngSize = 14239;
extern const char* Switch_32x32_png;
const int Switch_32x32_pngSize = 841;
@@ -49,7 +51,7 @@ namespace BinaryData
const int about_pngSize = 24863;
extern const char* GlobalEditor_864x144_png;
const int GlobalEditor_864x144_pngSize = 17334;
const int GlobalEditor_864x144_pngSize = 16209;
extern const char* OperatorEditor_287x218_png;
const int OperatorEditor_287x218_pngSize = 10927;
@@ -58,11 +60,9 @@ namespace BinaryData
extern const char* namedResourceList[];
// Number of elements in the namedResourceList array.
const int namedResourceListSize = 15;
const int namedResourceListSize = 16;
// If you provide the name of one of the binary resource variables above, this function will
// return the corresponding data and its size (or a null pointer if the name isn't found).
const char* getNamedResource (const char* resourceNameUTF8, int& dataSizeInBytes) throw();
}
#endif

+ 1
- 1
ports/dexed/source/CartManager.h View File

@@ -26,7 +26,7 @@
#include "ProgramListBox.h"
#include "PluginData.h"
class CartManager : public Component, public ButtonListener, public DragAndDropContainer, public FileBrowserListener
class CartManager : public Component, public Button::Listener, public DragAndDropContainer, public FileBrowserListener
, public ProgramListBoxListener, public KeyListener {
ScopedPointer<TextButton> newButton;
ScopedPointer<TextButton> loadButton;


+ 2
- 2
ports/dexed/source/DXComponents.cpp View File

@@ -1,6 +1,6 @@
/**
*
* Copyright (c) 2014 Pascal Gauthier.
* Copyright (c) 2014-2018 Pascal Gauthier.
*
* DX7 Envelope Tables from legasynth-0.4.1 / DX7 Patch Editor
* Copyright (C) 2002 Juan Linietsky <coding@reduz.com.ar>
@@ -346,7 +346,7 @@ void LcdDisplay::paint(Graphics &g) {
g.setColour (Colours::white);
g.drawText (paramMsg,
0, 0, 140, 14,
Justification::centred, true);
Justification::centred, false);
}
void ComboBoxImage::paint(Graphics &g) {


+ 3
- 19
ports/dexed/source/DXLookNFeel.cpp View File

@@ -1,6 +1,6 @@
/**
*
* Copyright (c) 2013-2016 Pascal Gauthier.
* Copyright (c) 2013-2018 Pascal Gauthier.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -36,7 +36,7 @@ Image findImage(String path) {
DXLookNFeel::DXLookNFeel() {
Colour ctrlBackground;
DexedAudioProcessor::dexedAppDir.setAsCurrentWorkingDirectory();
ctrlBackground = Colour(20,18,18);
@@ -73,9 +73,6 @@ DXLookNFeel::DXLookNFeel() {
imageOperator = ImageCache::getFromMemory(BinaryData::OperatorEditor_287x218_png, BinaryData::OperatorEditor_287x218_pngSize);
imageGlobal = ImageCache::getFromMemory (BinaryData::GlobalEditor_864x144_png, BinaryData::GlobalEditor_864x144_pngSize);
defaultFont = Typeface::createSystemTypefaceFor(BinaryData::NotoSansRegular_ttf, BinaryData::NotoSansRegular_ttfSize);
defaultFontBold = Typeface::createSystemTypefaceFor(BinaryData::NotoSansBold_ttf, BinaryData::NotoSansBold_ttfSize);
File dexedTheme = DexedAudioProcessor::dexedAppDir.getChildFile("DexedTheme.xml");
if ( ! dexedTheme.existsAsFile() )
@@ -158,7 +155,7 @@ DXLookNFeel::DXLookNFeel() {
}
Typeface::Ptr DXLookNFeel::getTypefaceForFont(const Font &) {
return defaultFont;
return Typeface::createSystemTypefaceFor(BinaryData::NotoSansRegular_ttf, BinaryData::NotoSansRegular_ttfSize);
}
void DXLookNFeel::drawRotarySlider( Graphics &g, int x, int y, int width, int height, float sliderPosProportional,
@@ -223,10 +220,6 @@ void DXLookNFeel::drawLinearSliderThumb (Graphics& g, int x, int y, int width, i
g.drawImage(imageSlider, p, 0, 26, 26, 0, 0, 26, 26);
}
Font DXLookNFeel::getTextButtonFont(TextButton& button, int buttonHeight) {
return Font(defaultFontBold);
}
void DXLookNFeel::positionComboBoxText(ComboBox& box, Label& label) {
ComboBox *src = &box;
@@ -239,17 +232,8 @@ void DXLookNFeel::positionComboBoxText(ComboBox& box, Label& label) {
LookAndFeel_V3::positionComboBoxText(box, label);
}
CriticalSection DXLookNFeel::lock;
DXLookNFeel * DXLookNFeel::ins = NULL;
Colour DXLookNFeel::fillColour = Colour(77,159,151);
Colour DXLookNFeel::lightBackground = Colour(78,72,63);
Colour DXLookNFeel::background = Colour(60,50,47);
Colour DXLookNFeel::roundBackground = Colour(58,52,48);
DXLookNFeel *DXLookNFeel::getLookAndFeel() {
const ScopedLock locker(lock);
if ( ins != NULL )
return ins;
ins = new DXLookNFeel();
return ins;
}

+ 4
- 10
ports/dexed/source/DXLookNFeel.h View File

@@ -1,6 +1,6 @@
/**
*
* Copyright (c) 2013-2016 Pascal Gauthier.
* Copyright (c) 2013-2018 Pascal Gauthier.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -24,16 +24,11 @@
#include "JuceHeader.h"
class DXLookNFeel : public LookAndFeel_V3 {
static CriticalSection lock;
static DXLookNFeel *ins;
DXLookNFeel();
HashMap<String, int> colourMap;
public:
Typeface::Ptr defaultFont;
Typeface::Ptr defaultFontBold;
DXLookNFeel();
Image imageKnob, imageSwitch, imageButton, imageSlider, imageScaling, imageLight, imageLFO;
Image imageSwitchOperator;
Image imageOperator, imageGlobal;
@@ -49,11 +44,10 @@ public:
const Slider::SliderStyle, Slider&) override;
virtual void drawButtonBackground (Graphics&, Button&, const Colour& backgroundColour,
bool isMouseOverButton, bool isButtonDown) override;
virtual Font getTextButtonFont(TextButton&, int buttonHeight) override;
//virtual Font getTextButtonFont(TextButton&, int buttonHeight) override;
virtual Typeface::Ptr getTypefaceForFont(const Font &) override;
virtual void positionComboBoxText (ComboBox& box, Label& label) override;
static DXLookNFeel *getLookAndFeel();
static Colour fillColour;
static Colour lightBackground;
static Colour background;


+ 1
- 1
ports/dexed/source/EngineMkI.cpp View File

@@ -292,7 +292,7 @@ void EngineMkI::compute_fb3(int32_t *output, FmOpParams *parms, int32_t gain01,
fb_buf[1] = y;
}
void EngineMkI::render(int32_t *output, FmOpParams *params, int algorithm, int32_t *fb_buf, int feedback_shift) {
void EngineMkI::render(int32_t *output, FmOpParams *params, int algorithm, int32_t *fb_buf, int32_t feedback_shift) {
const int kLevelThresh = ENV_MAX-100;
FmAlgorithm alg = algorithms[algorithm];
bool has_contents[3] = { true, false, false };


+ 1
- 1
ports/dexed/source/EngineMkI.h View File

@@ -29,7 +29,7 @@ class EngineMkI : public FmCore {
public:
EngineMkI();
void render(int32_t *output, FmOpParams *params, int algorithm, int32_t *fb_buf, int feedback_shift) override;
void render(int32_t *output, FmOpParams *params, int algorithm, int32_t *fb_buf, int32_t feedback_shift) override;
void compute(int32_t *output, const int32_t *input, int32_t phase0, int32_t freq, int32_t gain1, int32_t gain2,
bool add);


+ 1
- 1
ports/dexed/source/EngineOpl.cpp View File

@@ -169,7 +169,7 @@ void EngineOpl::compute_fb(int32_t *output, int32_t phase0, int32_t freq,
void EngineOpl::render(int32_t *output, FmOpParams *params, int algorithm,
int32_t *fb_buf, int feedback_shift) {
int32_t *fb_buf, int32_t feedback_shift) {
const int kLevelThresh = 507; // really ????
const FmAlgorithm alg = algorithms[algorithm];
bool has_contents[3] = { true, false, false };


+ 46
- 33
ports/dexed/source/GlobalEditor.cpp View File

@@ -1,17 +1,17 @@
/*
==============================================================================
This is an automatically generated GUI class created by the Introjucer!
This is an automatically generated GUI class created by the Projucer!
Be careful when adding custom code to these files, as only the code within
the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded
and re-saved.
Created with Introjucer version: 3.2.0
Created with Projucer version: 4.3.1
------------------------------------------------------------------------------
The Introjucer is part of the JUCE library - "Jules' Utility Class Extensions"
The Projucer is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright (c) 2015 - ROLI Ltd.
==============================================================================
@@ -30,7 +30,7 @@
/**
* Ugly but usefull midi monitor to know if you are really sending/receiving something from the DX7
* If the midi is not configured this component wont show up
*/
*
class MidiMonitor : public Component {
SysexComm *midi;
Image light;
@@ -58,7 +58,7 @@ public:
midi->outActivity = false;
}
}
};
};*/
class AboutBox : public DialogWindow {
public:
@@ -274,18 +274,19 @@ GlobalEditor::GlobalEditor ()
//[Constructor] You can add your own custom stuff here..
SharedResourcePointer<DXLookNFeel> lookAndFeel;
lfoType->addItem("TRIANGLE", 1);
lfoType->addItem("SAW DOWN", 2);
lfoType->addItem("SAW UP", 3);
lfoType->addItem("SQUARE", 4);
lfoType->addItem("SINE", 5);
lfoType->addItem("S&HOLD", 6);
lfoType->setImage(DXLookNFeel::getLookAndFeel()->imageLFO);
lfoType->setImage(lookAndFeel->imageLFO);
programs = programSelector;
background = DXLookNFeel::getLookAndFeel()->imageGlobal;
imageLight = DXLookNFeel::getLookAndFeel()->imageLight;
background = lookAndFeel->imageGlobal;
imageLight = lookAndFeel->imageLight;
//[/Constructor]
}
@@ -602,10 +603,10 @@ void GlobalEditor::bind(DexedAudioProcessorEditor *edit) {
pitchEnvDisplay->pvalues = &(processor->data[126]);
algoDisplay->opStatus = processor->controllers.opSwitch;
editor = edit;
midiMonitor = new MidiMonitor(&(processor->sysexComm));
//midiMonitor = new MidiMonitor(&(processor->sysexComm));
//addAndMakeVisible(midiMonitor);
//midiMonitor->setBounds(155, 21, 80, 45);
@@ -632,7 +633,7 @@ void GlobalEditor::updatePitchPos(int pos) {
void GlobalEditor::updateVu(float f) {
vuOutput->v = f;
vuOutput->repaint();
midiMonitor->repaint();
//midiMonitor->repaint();
}
void GlobalEditor::setMonoState(bool state) {
@@ -652,9 +653,9 @@ void GlobalEditor::mouseDown(const MouseEvent &e) {
//==============================================================================
#if 0
/* -- Introjucer information section --
/* -- Projucer information section --
This is where the Introjucer stores the metadata that describe this GUI layout, so
This is where the Projucer stores the metadata that describe this GUI layout, so
make changes in here at your peril!
BEGIN_JUCER_METADATA
@@ -667,70 +668,82 @@ BEGIN_JUCER_METADATA
<SLIDER name="lfoSpeed" id="b10eaf327ab3bff5" memberName="lfoSpeed" virtualName=""
explicitFocusOrder="0" pos="564 50 34 34" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="lfoAmDepth" id="3e95a6206fa4a891" memberName="lfoAmDepth"
virtualName="" explicitFocusOrder="0" pos="686 50 34 34" min="0"
max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="lfoPitchDepth" id="6ead769ca786c813" memberName="lfoPitchDepth"
virtualName="" explicitFocusOrder="0" pos="646 50 34 34" min="0"
max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="lfoDelay" id="1fce68dc81619ef5" memberName="lfoDelay" virtualName=""
explicitFocusOrder="0" pos="603 50 34 34" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="cutoff" id="40531f16bb0bd225" memberName="cutoff" virtualName=""
explicitFocusOrder="0" pos="234 9 34 34" min="0" max="1" int="0"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="0"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="reso" id="c8c13464e81a8d83" memberName="reso" virtualName=""
explicitFocusOrder="0" pos="278 9 34 34" min="0" max="1" int="0"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="0"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="pitchRate2" id="73f386b3c91d3de4" memberName="pitchRate2"
virtualName="" explicitFocusOrder="0" pos="767 96 34 34" min="0"
max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="pitchRate3" id="187c25b24413fccf" memberName="pitchRate3"
virtualName="" explicitFocusOrder="0" pos="795 96 35 34" min="0"
max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="pitchRate4" id="1aeb2a8fbbcbeaab" memberName="pitchRate4"
virtualName="" explicitFocusOrder="0" pos="823 96 34 34" min="0"
max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="pitchRate1" id="419d613b3fb9604e" memberName="pitchRate1"
virtualName="" explicitFocusOrder="0" pos="739 96 34 34" min="0"
max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="pitchLevel2" id="3a355ad2221887d9" memberName="pitchLevel2"
virtualName="" explicitFocusOrder="0" pos="767 57 34 34" min="0"
max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="pitchLevel3" id="5c5d782e8a7f3ad7" memberName="pitchLevel3"
virtualName="" explicitFocusOrder="0" pos="795 56 34 34" min="0"
max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="pitchLevel4" id="eb900b141fbad8ff" memberName="pitchLevel4"
virtualName="" explicitFocusOrder="0" pos="823 56 34 34" min="0"
max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="pitchLevel1" id="344cbe26ec9fa128" memberName="pitchLevel1"
virtualName="" explicitFocusOrder="0" pos="739 57 34 34" min="0"
max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="transpose" id="7d1266b1c1534947" memberName="transpose"
virtualName="" explicitFocusOrder="0" pos="202 60 34 34" min="0"
max="48" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="0" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="0" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<TOGGLEBUTTON name="oscSync" id="8f3fe641537cd00" memberName="oscSync" virtualName=""
explicitFocusOrder="0" pos="650 96 48 26" buttonText="" connectedEdges="0"
needsCallback="1" radioGroupId="0" state="0"/>
<SLIDER name="pitchModSens" id="904f73df85a9f886" memberName="pitchModSens"
virtualName="" explicitFocusOrder="0" pos="666 5 34 34" min="0"
max="7" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<TOGGLEBUTTON name="lfoSync" id="ff92bb0a5a4f7187" memberName="lfoSync" virtualName=""
explicitFocusOrder="0" pos="565 96 48 26" buttonText="" connectedEdges="0"
needsCallback="1" radioGroupId="0" state="0"/>
@@ -743,18 +756,18 @@ BEGIN_JUCER_METADATA
<SLIDER name="feedback" id="4fac1940c29ab8c" memberName="feedback" virtualName=""
explicitFocusOrder="0" pos="501 81 34 34" min="0" max="7" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="algo" id="8a226ddf9bbff752" memberName="algo" virtualName=""
explicitFocusOrder="0" pos="501 22 34 34" min="1" max="32" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="0"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<GENERICCOMPONENT name="lcdDisplay" id="30c7bb8f114cbbe3" memberName="lcdDisplay"
virtualName="" explicitFocusOrder="0" pos="6 87 140 13" class="LcdDisplay"
params=""/>
<SLIDER name="output" id="7697fdd54fd1593e" memberName="output" virtualName=""
explicitFocusOrder="0" pos="157 60 34 34" min="0" max="1" int="0"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="0"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<GENERICCOMPONENT name="vuOutput" id="dac75af912267f51" memberName="vuOutput" virtualName=""
explicitFocusOrder="0" pos="6 103 140 8" class="VuMeter" params=""/>
<TEXTBUTTON name="initButton" id="92b278163c42e21d" memberName="initButton"
@@ -787,7 +800,7 @@ BEGIN_JUCER_METADATA
<SLIDER name="tune" id="d22c34aa3363a28a" memberName="tune" virtualName=""
explicitFocusOrder="0" pos="190 9 34 34" min="0" max="1" int="0"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="0"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
</JUCER_COMPONENT>
END_JUCER_METADATA


+ 12
- 12
ports/dexed/source/GlobalEditor.h View File

@@ -1,17 +1,17 @@
/*
==============================================================================
This is an automatically generated GUI class created by the Introjucer!
This is an automatically generated GUI class created by the Projucer!
Be careful when adding custom code to these files, as only the code within
the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded
and re-saved.
Created with Introjucer version: 3.2.0
Created with Projucer version: 4.3.1
------------------------------------------------------------------------------
The Introjucer is part of the JUCE library - "Jules' Utility Class Extensions"
The Projucer is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright (c) 2015 - ROLI Ltd.
==============================================================================
@@ -40,8 +40,8 @@ class DexedAudioProcessorEditor;
//[/Comments]
*/
class GlobalEditor : public Component,
public SliderListener,
public ButtonListener
public Slider::Listener,
public Button::Listener
{
public:
//==============================================================================
@@ -61,14 +61,14 @@ public:
void setMonoState(bool state);
ProgramSelector *programs;
ScopedPointer<Component> midiMonitor;
void mouseDown(const MouseEvent& e) override;
void mouseDown(const MouseEvent& e) override;
//[/UserMethods]
void paint (Graphics& g);
void resized();
void sliderValueChanged (Slider* sliderThatWasMoved);
void buttonClicked (Button* buttonThatWasClicked);
void paint (Graphics& g) override;
void resized() override;
void sliderValueChanged (Slider* sliderThatWasMoved) override;
void buttonClicked (Button* buttonThatWasClicked) override;
@@ -76,7 +76,7 @@ private:
//[UserVariables] -- You can add your own custom variables in this section.
DexedAudioProcessorEditor *editor;
DexedAudioProcessor *processor;
Image background;
Image imageLight;
//[/UserVariables]


+ 38
- 29
ports/dexed/source/OperatorEditor.cpp View File

@@ -1,17 +1,17 @@
/*
==============================================================================
This is an automatically generated GUI class created by the Introjucer!
This is an automatically generated GUI class created by the Projucer!
Be careful when adding custom code to these files, as only the code within
the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded
and re-saved.
Created with Introjucer version: 3.2.0
Created with Projucer version: 4.3.1
------------------------------------------------------------------------------
The Introjucer is part of the JUCE library - "Jules' Utility Class Extensions"
The Projucer is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright (c) 2015 - ROLI Ltd.
==============================================================================
@@ -30,9 +30,10 @@
class OperatorSwitch : public ToggleButton {
Image image;
SharedResourcePointer<DXLookNFeel> lookAndFeel;
public :
OperatorSwitch() : ToggleButton("opSwitch") {
image = DXLookNFeel::getLookAndFeel()->imageSwitchOperator;
image = lookAndFeel->imageSwitchOperator;
setSize(32, 32);
}
@@ -197,8 +198,10 @@ OperatorEditor::OperatorEditor ()
//[Constructor] You can add your own custom stuff here..
light = DXLookNFeel::getLookAndFeel()->imageLight;
Image tmp = DXLookNFeel::getLookAndFeel()->imageScaling;
SharedResourcePointer<DXLookNFeel> lookAndFeel;
light = lookAndFeel->imageLight;
Image tmp = lookAndFeel->imageScaling;
kbdLeftCurve->addItem("-LN", 1);
kbdLeftCurve->addItem("-EX", 2);
@@ -214,7 +217,7 @@ OperatorEditor::OperatorEditor ()
int posRight[] = {3,2,1,0};
kbdRightCurve->setImage(tmp, posRight);
background = DXLookNFeel::getLookAndFeel()->imageOperator;
background = lookAndFeel->imageOperator;
//[/Constructor]
}
@@ -263,12 +266,12 @@ void OperatorEditor::paint (Graphics& g)
//[/UserPrePaint]
//[UserPaint] Add your own custom painting code here..
if ( opSwitch->getToggleState() )
g.setColour(Colours::white);
else
g.setColour(DXLookNFeel::roundBackground);
g.setFont(Font (30.00f, Font::plain));
g.drawText(opNum, 250, 14, 30, 30, Justification::centred, true);
@@ -550,9 +553,9 @@ void OperatorEditor::mouseDown(const MouseEvent &event) {
//==============================================================================
#if 0
/* -- Introjucer information section --
/* -- Projucer information section --
This is where the Introjucer stores the metadata that describe this GUI layout, so
This is where the Projucer stores the metadata that describe this GUI layout, so
make changes in here at your peril!
BEGIN_JUCER_METADATA
@@ -565,47 +568,47 @@ BEGIN_JUCER_METADATA
<SLIDER name="egl1" id="dc070cc41347df47" memberName="s_egl1" virtualName=""
explicitFocusOrder="0" pos="5 128 34 34" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="egl2" id="66f5195e9c374029" memberName="s_egl2" virtualName=""
explicitFocusOrder="0" pos="33 129 34 34" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="egl3" id="9d57bd53203dcdb4" memberName="s_egl3" virtualName=""
explicitFocusOrder="0" pos="61 128 34 34" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="egl4" id="4f7c3ece3ea2cf9c" memberName="s_egl4" virtualName=""
explicitFocusOrder="0" pos="89 128 34 34" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="egr1" id="2ca8137d80da46fb" memberName="s_egv1" virtualName=""
explicitFocusOrder="0" pos="5 169 34 34" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="egr3" id="4ad6d0c532d15973" memberName="s_egv2" virtualName=""
explicitFocusOrder="0" pos="33 169 34 34" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="egr3" id="8a2027f9ede16b4f" memberName="s_egv3" virtualName=""
explicitFocusOrder="0" pos="61 169 34 34" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="egr4" id="8c04f1c943d837e8" memberName="s_egv4" virtualName=""
explicitFocusOrder="0" pos="89 169 34 34" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="opLevel" id="f8521c8214fb8993" memberName="opLevel" virtualName=""
explicitFocusOrder="0" pos="245 76 34 34" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="opFine" id="e445aa61bd6cddcb" memberName="opFine" virtualName=""
explicitFocusOrder="0" pos="78 24 34 34" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="opCoarse" id="4eec63d30d7488d2" memberName="opCoarse" virtualName=""
explicitFocusOrder="0" pos="43 24 34 34" min="0" max="31" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<LABEL name="khz" id="eb961eed8902a6fc" memberName="khzDisplay" virtualName=""
explicitFocusOrder="0" pos="15 10 95 10" bkgCol="6a000000" textCol="ffffffff"
outlineCol="0" edTextCol="ff000000" edBkgCol="0" labelText="1,000 kHz"
@@ -615,34 +618,40 @@ BEGIN_JUCER_METADATA
<SLIDER name="detune" id="f093ec8defca2fc2" memberName="detune" virtualName=""
explicitFocusOrder="0" pos="6 24 34 34" min="-7" max="7" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="0"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<GENERICCOMPONENT name="envDisplay" id="b18856de924c6340" memberName="envDisplay"
virtualName="" explicitFocusOrder="0" pos="16 83 94 30" class="EnvDisplay"
params=""/>
<SLIDER name="sclLeftLevel" id="bd6f338ae68e454f" memberName="sclLeftLevel"
virtualName="" explicitFocusOrder="0" pos="131 115 34 34" tooltip="Keyboard Scale Level Left Depth "
min="0" max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="sclRightLevel" id="b9e23ed5187fc7e5" memberName="sclRightLevel"
virtualName="" explicitFocusOrder="0" pos="241 115 34 34" tooltip="Keyboard Scale Level Right Depth "
min="0" max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="sclLvlBrkPt" id="c563ac3116923bbc" memberName="sclLvlBrkPt"
virtualName="" explicitFocusOrder="0" pos="178 130 54 24" tooltip="Scale Level Breakpoint"
min="0" max="99" int="1" style="LinearHorizontal" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="sclRateScaling" id="f0d17c8e09aa4c49" memberName="sclRateScaling"
virtualName="" explicitFocusOrder="0" pos="186 179 34 34" tooltip="Keyboard Rate Scaling"
min="0" max="7" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="keyVelSens" id="21795d045d07602b" memberName="keyVelSens"
virtualName="" explicitFocusOrder="0" pos="204 76 34 34" min="0"
max="7" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="ampModSens" id="634ceaa7b0f81a6c" memberName="ampModSens"
virtualName="" explicitFocusOrder="0" pos="140 76 34 34" min="0"
max="3" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<GENERICCOMPONENT name="vu" id="6f952594ea99dc1e" memberName="vu" virtualName=""
explicitFocusOrder="0" pos="132 52 140 8" class="VuMeter" params=""/>
<TOGGLEBUTTON name="opMode" id="15db8e5c9dd13966" memberName="opMode" virtualName=""


+ 5
- 5
ports/dexed/source/OperatorEditor.h View File

@@ -1,17 +1,17 @@
/*
==============================================================================
This is an automatically generated GUI class created by the Introjucer!
This is an automatically generated GUI class created by the Projucer!
Be careful when adding custom code to these files, as only the code within
the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded
and re-saved.
Created with Introjucer version: 3.2.0
Created with Projucer version: 4.3.1
------------------------------------------------------------------------------
The Introjucer is part of the JUCE library - "Jules' Utility Class Extensions"
The Projucer is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright (c) 2015 - ROLI Ltd.
==============================================================================
@@ -38,8 +38,8 @@
//[/Comments]
*/
class OperatorEditor : public Component,
public SliderListener,
public ButtonListener
public Slider::Listener,
public Button::Listener
{
public:
//==============================================================================


+ 210
- 105
ports/dexed/source/ParamDialog.cpp View File

@@ -1,17 +1,17 @@
/*
==============================================================================
This is an automatically generated GUI class created by the Introjucer!
This is an automatically generated GUI class created by the Projucer!
Be careful when adding custom code to these files, as only the code within
the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded
and re-saved.
Created with Introjucer version: 3.2.0
Created with Projucer version: 5.2.0
------------------------------------------------------------------------------
The Introjucer is part of the JUCE library - "Jules' Utility Class Extensions"
The Projucer is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright (c) 2015 - ROLI Ltd.
==============================================================================
@@ -170,6 +170,9 @@ ParamDialog::ParamDialog ()
output.addArray(MidiOutput::getDevices());
sysexOut->addItemList(output, 2);
if ( JUCEApplication::isStandaloneApp() ) {
sysexIn->setVisible(false);
}
//[/Constructor]
}
@@ -215,100 +218,191 @@ void ParamDialog::paint (Graphics& g)
g.fillAll (Colour (0xff3c322f));
g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("Pitch Bend Range"),
20, 16, 276, 23,
Justification::centredLeft, true);
{
int x = 20, y = 16, width = 276, height = 23;
String text (TRANS("Pitch Bend Range"));
Colour fillColour = Colours::white;
//[UserPaintCustomArguments] Customize the painting arguments here..
//[/UserPaintCustomArguments]
g.setColour (fillColour);
g.setFont (Font (15.00f, Font::plain).withTypefaceStyle ("Regular"));
g.drawText (text, x, y, width, height,
Justification::centredLeft, true);
}
g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("Pitch Bend Step"),
20, 56, 276, 23,
Justification::centredLeft, true);
{
int x = 20, y = 56, width = 276, height = 23;
String text (TRANS("Pitch Bend Step"));
Colour fillColour = Colours::white;
//[UserPaintCustomArguments] Customize the painting arguments here..
//[/UserPaintCustomArguments]
g.setColour (fillColour);
g.setFont (Font (15.00f, Font::plain).withTypefaceStyle ("Regular"));
g.drawText (text, x, y, width, height,
Justification::centredLeft, true);
}
g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("DX7 In"),
20, 224, 131, 23,
Justification::centredLeft, true);
{
int x = 20, y = 304, width = 245, height = 23;
String text (TRANS("DX7 Channel"));
Colour fillColour = Colours::white;
//[UserPaintCustomArguments] Customize the painting arguments here..
//[/UserPaintCustomArguments]
g.setColour (fillColour);
g.setFont (Font (15.00f, Font::plain).withTypefaceStyle ("Regular"));
g.drawText (text, x, y, width, height,
Justification::centredLeft, true);
}
g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("DX7 Out"),
20, 264, 131, 23,
Justification::centredLeft, true);
{
int x = 20, y = 156, width = 276, height = 23;
String text (TRANS("Engine Resolution"));
Colour fillColour = Colours::white;
//[UserPaintCustomArguments] Customize the painting arguments here..
//[/UserPaintCustomArguments]
g.setColour (fillColour);
g.setFont (Font (15.00f, Font::plain).withTypefaceStyle ("Regular"));
g.drawText (text, x, y, width, height,
Justification::centredLeft, true);
}
g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("DX7 Channel"),
20, 304, 245, 23,
Justification::centredLeft, true);
{
int x = 22, y = 138, width = 306, height = 1;
Colour fillColour = Colours::black;
//[UserPaintCustomArguments] Customize the painting arguments here..
//[/UserPaintCustomArguments]
g.setColour (fillColour);
g.fillRect (x, y, width, height);
}
g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("Engine Resolution"),
20, 156, 276, 23,
Justification::centredLeft, true);
{
int x = 22, y = 195, width = 306, height = 1;
Colour fillColour = Colours::black;
//[UserPaintCustomArguments] Customize the painting arguments here..
//[/UserPaintCustomArguments]
g.setColour (fillColour);
g.fillRect (x, y, width, height);
}
g.setColour (Colours::black);
g.fillRect (22, 138, 306, 1);
{
int x = 20, y = 96, width = 276, height = 23;
String text (TRANS("Show Keyboard"));
Colour fillColour = Colours::white;
//[UserPaintCustomArguments] Customize the painting arguments here..
//[/UserPaintCustomArguments]
g.setColour (fillColour);
g.setFont (Font (15.00f, Font::plain).withTypefaceStyle ("Regular"));
g.drawText (text, x, y, width, height,
Justification::centredLeft, true);
}
g.setColour (Colours::black);
g.fillRect (22, 195, 306, 1);
{
int x = 352, y = 11, width = 1, height = 325;
Colour fillColour = Colours::black;
//[UserPaintCustomArguments] Customize the painting arguments here..
//[/UserPaintCustomArguments]
g.setColour (fillColour);
g.fillRect (x, y, width, height);
}
g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("Show Keyboard"),
20, 96, 276, 23,
Justification::centredLeft, true);
{
int x = 368, y = 16, width = 276, height = 23;
String text (TRANS("Wheel"));
Colour fillColour = Colours::white;
//[UserPaintCustomArguments] Customize the painting arguments here..
//[/UserPaintCustomArguments]
g.setColour (fillColour);
g.setFont (Font (15.00f, Font::plain).withTypefaceStyle ("Regular"));
g.drawText (text, x, y, width, height,
Justification::centredLeft, true);
}
g.setColour (Colours::black);
g.fillRect (352, 11, 1, 325);
{
int x = 368, y = 96, width = 276, height = 23;
String text (TRANS("Foot"));
Colour fillColour = Colours::white;
//[UserPaintCustomArguments] Customize the painting arguments here..
//[/UserPaintCustomArguments]
g.setColour (fillColour);
g.setFont (Font (15.00f, Font::plain).withTypefaceStyle ("Regular"));
g.drawText (text, x, y, width, height,
Justification::centredLeft, true);
}
g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("Wheel"),
368, 16, 276, 23,
Justification::centredLeft, true);
{
int x = 368, y = 56, width = 276, height = 23;
String text (TRANS("Breath"));
Colour fillColour = Colours::white;
//[UserPaintCustomArguments] Customize the painting arguments here..
//[/UserPaintCustomArguments]
g.setColour (fillColour);
g.setFont (Font (15.00f, Font::plain).withTypefaceStyle ("Regular"));
g.drawText (text, x, y, width, height,
Justification::centredLeft, true);
}
g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("Foot"),
368, 96, 276, 23,
Justification::centredLeft, true);
{
int x = 368, y = 136, width = 276, height = 23;
String text (TRANS("After Touch"));
Colour fillColour = Colours::white;
//[UserPaintCustomArguments] Customize the painting arguments here..
//[/UserPaintCustomArguments]
g.setColour (fillColour);
g.setFont (Font (15.00f, Font::plain).withTypefaceStyle ("Regular"));
g.drawText (text, x, y, width, height,
Justification::centredLeft, true);
}
g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("Breath"),
368, 56, 276, 23,
Justification::centredLeft, true);
{
int x = 533, y = 163, width = 48, height = 23;
String text (TRANS("PITCH"));
Colour fillColour = Colours::white;
//[UserPaintCustomArguments] Customize the painting arguments here..
//[/UserPaintCustomArguments]
g.setColour (fillColour);
g.setFont (Font (15.00f, Font::plain).withTypefaceStyle ("Regular"));
g.drawText (text, x, y, width, height,
Justification::centredLeft, true);
}
g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("After Touch"),
368, 136, 276, 23,
Justification::centredLeft, true);
{
int x = 589, y = 163, width = 48, height = 23;
String text (TRANS("AMP"));
Colour fillColour = Colours::white;
//[UserPaintCustomArguments] Customize the painting arguments here..
//[/UserPaintCustomArguments]
g.setColour (fillColour);
g.setFont (Font (15.00f, Font::plain).withTypefaceStyle ("Regular"));
g.drawText (text, x, y, width, height,
Justification::centredLeft, true);
}
g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("PITCH"),
533, 163, 48, 23,
Justification::centredLeft, true);
{
int x = 645, y = 163, width = 48, height = 23;
String text (TRANS("EG BIAS"));
Colour fillColour = Colours::white;
//[UserPaintCustomArguments] Customize the painting arguments here..
//[/UserPaintCustomArguments]
g.setColour (fillColour);
g.setFont (Font (15.00f, Font::plain).withTypefaceStyle ("Regular"));
g.drawText (text, x, y, width, height,
Justification::centredLeft, true);
}
g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("AMP"),
589, 163, 48, 23,
Justification::centredLeft, true);
//[UserPaint] Add your own custom painting code here..
if ( ! JUCEApplication::isStandaloneApp() ) {
g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("DX7 In"),
20, 224, 131, 23,
Justification::centredLeft, true);
}
g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("EG BIAS"),
645, 163, 48, 23,
g.drawText (TRANS("DX7 Out"),
20, 264, 131, 23,
Justification::centredLeft, true);
//[UserPaint] Add your own custom painting code here..
//[/UserPaint]
}
@@ -557,12 +651,13 @@ bool ParamDialog::getDialogValues(Controllers &c, SysexComm &mgr, int *reso, boo
c.refresh();
ret &= mgr.setInput(sysexIn->getItemText(sysexIn->getSelectedItemIndex()));
if ( ! JUCEApplication::isStandaloneApp() ) {
ret &= mgr.setInput(sysexIn->getItemText(sysexIn->getSelectedItemIndex()));
}
ret &= mgr.setOutput(sysexOut->getItemText(sysexOut->getSelectedItemIndex()));
mgr.setChl(sysexChl->getValue() - 1);
*reso = engineReso->getSelectedItemIndex();
// *showKey = showKeyboard->getToggleStateValue() == Button::ButtonState::buttonDown;
*showKey = showKeyboard->getToggleState();
return ret;
}
@@ -572,9 +667,9 @@ bool ParamDialog::getDialogValues(Controllers &c, SysexComm &mgr, int *reso, boo
//==============================================================================
#if 0
/* -- Introjucer information section --
/* -- Projucer information section --
This is where the Introjucer stores the metadata that describe this GUI layout, so
This is where the Projucer stores the metadata that describe this GUI layout, so
make changes in here at your peril!
BEGIN_JUCER_METADATA
@@ -585,45 +680,55 @@ BEGIN_JUCER_METADATA
fixedSize="1" initialWidth="710" initialHeight="350">
<BACKGROUND backgroundColour="ff3c322f">
<TEXT pos="20 16 276 23" fill="solid: ffffffff" hasStroke="0" text="Pitch Bend Range"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
fontname="Default font" fontsize="15" kerning="0" bold="0" italic="0"
justification="33"/>
<TEXT pos="20 56 276 23" fill="solid: ffffffff" hasStroke="0" text="Pitch Bend Step"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
<TEXT pos="20 224 131 23" fill="solid: ffffffff" hasStroke="0" text="DX7 In"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
<TEXT pos="20 264 131 23" fill="solid: ffffffff" hasStroke="0" text="DX7 Out"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
fontname="Default font" fontsize="15" kerning="0" bold="0" italic="0"
justification="33"/>
<TEXT pos="20 304 245 23" fill="solid: ffffffff" hasStroke="0" text="DX7 Channel"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
fontname="Default font" fontsize="15" kerning="0" bold="0" italic="0"
justification="33"/>
<TEXT pos="20 156 276 23" fill="solid: ffffffff" hasStroke="0" text="Engine Resolution"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
fontname="Default font" fontsize="15" kerning="0" bold="0" italic="0"
justification="33"/>
<RECT pos="22 138 306 1" fill="solid: ff000000" hasStroke="0"/>
<RECT pos="22 195 306 1" fill="solid: ff000000" hasStroke="0"/>
<TEXT pos="20 96 276 23" fill="solid: ffffffff" hasStroke="0" text="Show Keyboard"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
fontname="Default font" fontsize="15" kerning="0" bold="0" italic="0"
justification="33"/>
<RECT pos="352 11 1 325" fill="solid: ff000000" hasStroke="0"/>
<TEXT pos="368 16 276 23" fill="solid: ffffffff" hasStroke="0" text="Wheel"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
fontname="Default font" fontsize="15" kerning="0" bold="0" italic="0"
justification="33"/>
<TEXT pos="368 96 276 23" fill="solid: ffffffff" hasStroke="0" text="Foot"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
fontname="Default font" fontsize="15" kerning="0" bold="0" italic="0"
justification="33"/>
<TEXT pos="368 56 276 23" fill="solid: ffffffff" hasStroke="0" text="Breath"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
fontname="Default font" fontsize="15" kerning="0" bold="0" italic="0"
justification="33"/>
<TEXT pos="368 136 276 23" fill="solid: ffffffff" hasStroke="0" text="After Touch"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
fontname="Default font" fontsize="15" kerning="0" bold="0" italic="0"
justification="33"/>
<TEXT pos="533 163 48 23" fill="solid: ffffffff" hasStroke="0" text="PITCH"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
fontname="Default font" fontsize="15" kerning="0" bold="0" italic="0"
justification="33"/>
<TEXT pos="589 163 48 23" fill="solid: ffffffff" hasStroke="0" text="AMP"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
fontname="Default font" fontsize="15" kerning="0" bold="0" italic="0"
justification="33"/>
<TEXT pos="645 163 48 23" fill="solid: ffffffff" hasStroke="0" text="EG BIAS"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
fontname="Default font" fontsize="15" kerning="0" bold="0" italic="0"
justification="33"/>
</BACKGROUND>
<SLIDER name="pitchRange" id="7409be5a8dfaa91" memberName="pitchRange"
virtualName="" explicitFocusOrder="0" pos="264 16 72 24" min="0"
max="12" int="1" style="RotaryVerticalDrag" textBoxPos="TextBoxLeft"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="pitchStep" id="b86af4b792e768ca" memberName="pitchStep"
virtualName="" explicitFocusOrder="0" pos="264 56 72 24" min="0"
max="12" int="1" style="RotaryVerticalDrag" textBoxPos="TextBoxLeft"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<COMBOBOX name="sysexIn" id="3750642d8b5be11" memberName="sysexIn" virtualName=""
explicitFocusOrder="0" pos="104 224 224 24" editable="0" layout="33"
items="" textWhenNonSelected="" textWhenNoItems="(no choices)"/>
@@ -633,7 +738,7 @@ BEGIN_JUCER_METADATA
<SLIDER name="sysexChl" id="7fdc8830f90a7c86" memberName="sysexChl" virtualName=""
explicitFocusOrder="0" pos="264 304 72 24" min="1" max="16" int="1"
style="RotaryVerticalDrag" textBoxPos="TextBoxLeft" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<COMBOBOX name="new combo box" id="4087ff978c3d9e8d" memberName="engineReso"
virtualName="" explicitFocusOrder="0" pos="160 156 168 24" editable="0"
layout="33" items="Modern (24-bit)&#10;Mark I&#10;OPL Series"
@@ -644,19 +749,19 @@ BEGIN_JUCER_METADATA
<SLIDER name="whlRange" id="3d6522f5f581e580" memberName="whlRange" virtualName=""
explicitFocusOrder="0" pos="448 16 72 24" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="TextBoxLeft" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="ftRange" id="cf553f74c3fb0d12" memberName="ftRange" virtualName=""
explicitFocusOrder="0" pos="448 56 72 24" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="TextBoxLeft" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="brRange" id="c4aa6814f75016a7" memberName="brRange" virtualName=""
explicitFocusOrder="0" pos="448 96 72 24" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="TextBoxLeft" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="atRange" id="d0aa1ebb24284577" memberName="atRange" virtualName=""
explicitFocusOrder="0" pos="448 136 72 24" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="TextBoxLeft" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<TOGGLEBUTTON name="whlEg" id="d8242ae592c912a" memberName="whlEg" virtualName=""
explicitFocusOrder="0" pos="640 16 56 24" buttonText="" connectedEdges="0"
needsCallback="1" radioGroupId="0" state="0"/>


+ 12
- 15
ports/dexed/source/ParamDialog.h View File

@@ -1,24 +1,23 @@
/*
==============================================================================
This is an automatically generated GUI class created by the Introjucer!
This is an automatically generated GUI class created by the Projucer!
Be careful when adding custom code to these files, as only the code within
the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded
and re-saved.
Created with Introjucer version: 3.2.0
Created with Projucer version: 5.2.0
------------------------------------------------------------------------------
The Introjucer is part of the JUCE library - "Jules' Utility Class Extensions"
The Projucer is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright (c) 2015 - ROLI Ltd.
==============================================================================
*/
#ifndef __JUCE_HEADER_D00F97AD887A66__
#define __JUCE_HEADER_D00F97AD887A66__
#pragma once
//[Headers] -- You can add your own extra header files here --
#include "JuceHeader.h"
@@ -37,9 +36,9 @@
//[/Comments]
*/
class ParamDialog : public Component,
public SliderListener,
public ComboBoxListener,
public ButtonListener
public Slider::Listener,
public ComboBox::Listener,
public Button::Listener
{
public:
//==============================================================================
@@ -52,11 +51,11 @@ public:
bool getDialogValues(Controllers &c, SysexComm &mgr, int *reso, bool *showKeyboard);
//[/UserMethods]
void paint (Graphics& g);
void resized();
void sliderValueChanged (Slider* sliderThatWasMoved);
void comboBoxChanged (ComboBox* comboBoxThatHasChanged);
void buttonClicked (Button* buttonThatWasClicked);
void paint (Graphics& g) override;
void resized() override;
void sliderValueChanged (Slider* sliderThatWasMoved) override;
void comboBoxChanged (ComboBox* comboBoxThatHasChanged) override;
void buttonClicked (Button* buttonThatWasClicked) override;
@@ -96,5 +95,3 @@ private:
//[EndFile] You can add extra defines here...
//[/EndFile]
#endif // __JUCE_HEADER_D00F97AD887A66__

+ 18
- 11
ports/dexed/source/PluginData.cpp View File

@@ -159,7 +159,6 @@ void Cartridge::unpackProgram(uint8_t *unpackPgm, int idx) {
unpackPgm[142] = (lpms_lfw_lks >> 1) & 7;
unpackPgm[143] = lpms_lfw_lks >> 4;
memcpy(unpackPgm + 144, bulk + 117, 11); // transpose, name
unpackPgm[155] = 63; // operator on/off (DEPRECATED)
}
void DexedAudioProcessor::loadCartridge(Cartridge &sysex) {
@@ -178,19 +177,22 @@ void DexedAudioProcessor::packOpSwitch() {
}
void DexedAudioProcessor::unpackOpSwitch(char packOpValue) {
controllers.opSwitch[5] = (packOpValue & 32) + 48;
controllers.opSwitch[4] = (packOpValue & 16) + 48;
controllers.opSwitch[3] = (packOpValue & 8) + 48;
controllers.opSwitch[2] = (packOpValue & 4) + 48;
controllers.opSwitch[1] = (packOpValue & 2) + 48;
controllers.opSwitch[0] = (packOpValue & 1) + 48;
controllers.opSwitch[5] = ((packOpValue >> 5) &1) + 48;
controllers.opSwitch[4] = ((packOpValue >> 4) &1) + 48;
controllers.opSwitch[3] = ((packOpValue >> 3) &1) + 48;
controllers.opSwitch[2] = ((packOpValue >> 2) &1) + 48;
controllers.opSwitch[1] = ((packOpValue >> 1) &1) + 48;
controllers.opSwitch[0] = (packOpValue &1) + 48;
}
void DexedAudioProcessor::updateProgramFromSysex(const uint8_t *rawdata) {
int DexedAudioProcessor::updateProgramFromSysex(const uint8_t *rawdata) {
memcpy(data, rawdata, 155);
unpackOpSwitch(rawdata[155]);
unpackOpSwitch(0x3F);
lfo.reset(data + 137);
triggerAsyncUpdate();
if (sysexChecksum(rawdata, 155) != rawdata[155]) // rawdata[155] is a checksum in a sysex dump
return 1; // just return 1 if the checksum doesn't match, might be normal if it is loaded from a cartridge
return 0;
}
void DexedAudioProcessor::setupStartupCart() {
@@ -250,6 +252,7 @@ void DexedAudioProcessor::sendCurrentSysexProgram() {
packOpSwitch();
exportSysexPgm(raw, data);
raw[2] = raw[2] | sysexComm.getChl();
if ( sysexComm.isOutputActive() ) {
sysexComm.send(MidiMessage(raw, 163));
}
@@ -259,6 +262,7 @@ void DexedAudioProcessor::sendCurrentSysexCartridge() {
uint8_t raw[4104];
currentCart.saveVoice(raw);
raw[2] = raw[2] | sysexComm.getChl();
if ( sysexComm.isOutputActive() ) {
sysexComm.send(MidiMessage(raw, 4104));
}
@@ -313,6 +317,7 @@ void DexedAudioProcessor::getStateInformation(MemoryBlock& destData) {
dexedState.setAttribute("monoMode", monoMode);
dexedState.setAttribute("engineType", (int) engineType);
dexedState.setAttribute("masterTune", controllers.masterTune);
//TRACE("saving opswitch %s", controllers.opSwitch);
dexedState.setAttribute("opSwitch", controllers.opSwitch);
char mod_cfg[15];
@@ -333,6 +338,7 @@ void DexedAudioProcessor::getStateInformation(MemoryBlock& destData) {
blobSet.set("program", var((void *) &data, 161));
blobSet.copyToXmlAttributes(*dexedBlob);
copyXmlToBinary(dexedState, destData);
}
@@ -354,6 +360,7 @@ void DexedAudioProcessor::setStateInformation(const void* source, int sizeInByte
currentProgram = root->getIntAttribute("currentProgram");
String opSwitchValue = root->getStringAttribute("opSwitch");
//TRACE("opSwitch value %s", opSwitchValue.toRawUTF8());
if ( opSwitchValue.length() != 6 ) {
strcpy(controllers.opSwitch, "111111");
} else {
@@ -396,8 +403,8 @@ void DexedAudioProcessor::setStateInformation(const void* source, int sizeInByte
cart.load((uint8 *)sysex_blob.getBinaryData()->getData(), 4104);
loadCartridge(cart);
memcpy(data, program.getBinaryData()->getData(), 161);
lastStateSave = (long) time(NULL);
lastStateSave = (long) time(NULL);
TRACE("setting VST STATE");
updateUI();
}


+ 5
- 7
ports/dexed/source/PluginEditor.cpp View File

@@ -1,6 +1,6 @@
/**
*
* Copyright (c) 2013-2015 Pascal Gauthier.
* Copyright (c) 2013-2018 Pascal Gauthier.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -25,7 +25,6 @@
#include "SysexComm.h"
#include "Dexed.h"
#include "math.h"
#include "DXLookNFeel.h"
#include <fstream>
#include "msfa/fm_op_kernel.h"
@@ -36,13 +35,12 @@ DexedAudioProcessorEditor::DexedAudioProcessorEditor (DexedAudioProcessor* owner
midiKeyboard (ownerFilter->keyboardState, MidiKeyboardComponent::horizontalKeyboard),
cartManager(this)
{
LookAndFeel::setDefaultLookAndFeel(DXLookNFeel::getLookAndFeel());
setSize(866, ownerFilter->showKeyboard ? 674 : 581);
processor = ownerFilter;
background = DXLookNFeel::getLookAndFeel()->background;
lookAndFeel->setDefaultLookAndFeel(lookAndFeel);
background = lookAndFeel->background;
// OPERATORS
addAndMakeVisible(&(operators[0]));
@@ -95,6 +93,7 @@ DexedAudioProcessorEditor::DexedAudioProcessorEditor (DexedAudioProcessor* owner
DexedAudioProcessorEditor::~DexedAudioProcessorEditor() {
stopTimer();
processor->unbindUI();
setLookAndFeel(nullptr);
}
//==============================================================================
@@ -161,7 +160,7 @@ void DexedAudioProcessorEditor::parmShow() {
ParamDialog param;
param.setColour(AlertWindow::backgroundColourId, Colour(0x32FFFFFF));
param.setDialogValues(processor->controllers, processor->sysexComm, tp, processor->showKeyboard);
window.addCustomComponent(&param);
window.addButton("OK", 0);
window.addButton("Cancel" ,1);
@@ -265,7 +264,6 @@ void DexedAudioProcessorEditor::storeProgram() {
destSysex.getProgramNames(programs);
dialog.addComboBox("Dest", programs, "Program Destination");
if ( externalFile == NULL ) {
StringArray saveAction;
saveAction.add("Store program to DAW plugin song state");


+ 5
- 4
ports/dexed/source/PluginEditor.h View File

@@ -1,6 +1,6 @@
/**
*
* Copyright (c) 2013-2016 Pascal Gauthier.
* Copyright (c) 2013-2018 Pascal Gauthier.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -31,16 +31,17 @@
//==============================================================================
/**
*/
class DexedAudioProcessorEditor : public AudioProcessorEditor, public ComboBoxListener, public Timer {
class DexedAudioProcessorEditor : public AudioProcessorEditor, public ComboBox::Listener, public Timer {
MidiKeyboardComponent midiKeyboard;
OperatorEditor operators[6];
Colour background;
CartManager cartManager;
SharedResourcePointer<DXLookNFeel> lookAndFeel;
public:
DexedAudioProcessor *processor;
GlobalEditor global;
DexedAudioProcessorEditor (DexedAudioProcessor* ownerFilter);
~DexedAudioProcessorEditor();
void timerCallback();


+ 20
- 1
ports/dexed/source/PluginParam.cpp View File

@@ -26,6 +26,20 @@
#include "PluginEditor.h"
#include "Dexed.h"
// Async updater
class CtrlUpdate : public CallbackMessage {
Ctrl *ctrl;
float value;
public:
CtrlUpdate(Ctrl *ctrl, float value) {
this->ctrl = ctrl;
this->value = value;
}
void messageCallback() {
ctrl->publishValue(value);
}
};
// ************************************************************************
// Custom displays
@@ -237,6 +251,11 @@ void Ctrl::unbind() {
}
}
void Ctrl::publishValueAsync(float value) {
CtrlUpdate *update = new CtrlUpdate(this, value);
update->post();
}
void Ctrl::publishValue(float value) {
parent->beginParameterChangeGesture(idx);
parent->setParameterNotifyingHost(idx, value);
@@ -637,7 +656,7 @@ void DexedAudioProcessor::setCurrentProgram(int index) {
index = index > 31 ? 31 : index;
currentCart.unpackProgram(data, index);
strcpy(controllers.opSwitch, "111111");
unpackOpSwitch(0x3F);
lfo.reset(data + 137);
currentProgram = index;
triggerAsyncUpdate();


+ 4
- 2
ports/dexed/source/PluginParam.h View File

@@ -25,7 +25,7 @@
class DexedAudioProcessor;
class Ctrl : public SliderListener, public ButtonListener, public ComboBoxListener, public MouseListener {
class Ctrl : public Slider::Listener, public Button::Listener, public ComboBox::Listener, public MouseListener {
protected:
/**
* Binded components of the UI
@@ -46,6 +46,9 @@ public:
// use this to signal a parameter change to the host
void publishValue(float value);
// use this to publish a new value to be computed on the event thread
void publishValueAsync(float value);
/**
* Host value is related 0.0 to 1.0 values
*/
@@ -104,7 +107,6 @@ public:
void updateDisplayName();
};
struct OperatorCtrl {
ScopedPointer<CtrlDX> egRate[4];
ScopedPointer<CtrlDX> egLevel[4];


+ 64
- 23
ports/dexed/source/PluginProcessor.cpp View File

@@ -1,6 +1,6 @@
/**
*
* Copyright (c) 2013-2017 Pascal Gauthier.
* Copyright (c) 2013-2018 Pascal Gauthier.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -34,9 +34,39 @@
#include "msfa/aligned_buf.h"
#include "msfa/fm_op_kernel.h"
#if JUCE_MSVC
#pragma comment (lib, "kernel32.lib")
#pragma comment (lib, "user32.lib")
#pragma comment (lib, "wininet.lib")
#pragma comment (lib, "advapi32.lib")
#pragma comment (lib, "ws2_32.lib")
#pragma comment (lib, "version.lib")
#pragma comment (lib, "shlwapi.lib")
#pragma comment (lib, "winmm.lib")
#pragma comment (lib, "DbgHelp.lib")
#pragma comment (lib, "Imm32.lib")
#ifdef _NATIVE_WCHAR_T_DEFINED
#ifdef _DEBUG
#pragma comment (lib, "comsuppwd.lib")
#else
#pragma comment (lib, "comsuppw.lib")
#endif
#else
#ifdef _DEBUG
#pragma comment (lib, "comsuppd.lib")
#else
#pragma comment (lib, "comsupp.lib")
#endif
#endif
#endif
//==============================================================================
DexedAudioProcessor::DexedAudioProcessor() {
#ifdef DEBUG
// avoid creating the log file if it is in standalone mode
Logger *tmp = Logger::getCurrentLogger();
if ( tmp == NULL ) {
Logger::setCurrentLogger(FileLogger::createDateStampedLogger("Dexed", "DebugSession-", "log", "DexedAudioProcessor Created"));
@@ -56,8 +86,6 @@ DexedAudioProcessor::DexedAudioProcessor() {
monoMode = 0;
resolvAppDir();
TRACE("controler %s", controllers.opSwitch);
initCtrl();
sendSysexChange = true;
@@ -71,7 +99,7 @@ DexedAudioProcessor::DexedAudioProcessor() {
controllers.values_[kControllerPitchRange] = 3;
controllers.values_[kControllerPitchStep] = 0;
controllers.masterTune = 0;
loadPreference();
for (int note = 0; note < MAX_ACTIVE_NOTES; ++note) {
@@ -85,6 +113,11 @@ DexedAudioProcessor::DexedAudioProcessor() {
}
DexedAudioProcessor::~DexedAudioProcessor() {
Logger *tmp = Logger::getCurrentLogger();
if ( tmp != NULL ) {
Logger::setCurrentLogger(NULL);
delete tmp;
}
TRACE("Bye");
}
@@ -109,7 +142,8 @@ void DexedAudioProcessor::prepareToPlay(double sampleRate, int samplesPerBlock)
controllers.foot_cc = 0;
controllers.breath_cc = 0;
controllers.aftertouch_cc = 0;
controllers.refresh();
sustain = false;
extra_buf_size = 0;
@@ -262,6 +296,11 @@ bool DexedAudioProcessor::getNextEvent(MidiBuffer::Iterator* iter,const int samp
}
void DexedAudioProcessor::processMidiMessage(const MidiMessage *msg) {
if ( msg->isSysEx() ) {
handleIncomingMidiMessage(NULL, *msg);
return;
}
const uint8 *buf = msg->getRawData();
uint8_t cmd = buf[0];
@@ -302,10 +341,18 @@ void DexedAudioProcessor::processMidiMessage(const MidiMessage *msg) {
}
}
break;
case 123:
case 120:
panic();
break;
}
case 123:
for (int note = 0; note < MAX_ACTIVE_NOTES; note++) {
if (voices[note].keydown)
keyup(voices[note].midi_note);
}
break;
default:
TRACE("handle CC %d %d", ctrl, value);
}
}
return;
@@ -321,13 +368,13 @@ void DexedAudioProcessor::processMidiMessage(const MidiMessage *msg) {
}
switch (cmd) {
case 0xe0 :
controllers.values_[kControllerPitch] = buf[1] | (buf[2] << 7);
break;
if ( cmd & 0xe0 ) {
controllers.values_[kControllerPitch] = buf[1] | (buf[2] << 7);
}
}
#define ACT(v) (v.keydown ? v.midi_note : -1)
void DexedAudioProcessor::keydown(uint8_t pitch, uint8_t velo) {
if ( velo == 0 ) {
keyup(pitch);
@@ -377,6 +424,7 @@ void DexedAudioProcessor::keydown(uint8_t pitch, uint8_t velo) {
}
voices[note].live = true;
//TRACE("activate %d [ %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d ]", pitch, ACT(voices[0]), ACT(voices[1]), ACT(voices[2]), ACT(voices[3]), ACT(voices[4]), ACT(voices[5]), ACT(voices[6]), ACT(voices[7]), ACT(voices[8]), ACT(voices[9]), ACT(voices[10]), ACT(voices[11]), ACT(voices[12]), ACT(voices[13]), ACT(voices[14]), ACT(voices[15]));
}
void DexedAudioProcessor::keyup(uint8_t pitch) {
@@ -386,13 +434,14 @@ void DexedAudioProcessor::keyup(uint8_t pitch) {
for (note=0; note<MAX_ACTIVE_NOTES; ++note) {
if ( voices[note].midi_note == pitch && voices[note].keydown ) {
voices[note].keydown = false;
//TRACE("deactivate %d [ %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d ]", pitch, ACT(voices[0]), ACT(voices[1]), ACT(voices[2]), ACT(voices[3]), ACT(voices[4]), ACT(voices[5]), ACT(voices[6]), ACT(voices[7]), ACT(voices[8]), ACT(voices[9]), ACT(voices[10]), ACT(voices[11]), ACT(voices[12]), ACT(voices[13]), ACT(voices[14]), ACT(voices[15]));
break;
}
}
// note not found ?
if ( note >= MAX_ACTIVE_NOTES ) {
TRACE("note-off not found???");
TRACE("note found ??? %d [ %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d ]", pitch, ACT(voices[0]), ACT(voices[1]), ACT(voices[2]), ACT(voices[3]), ACT(voices[4]), ACT(voices[5]), ACT(voices[6]), ACT(voices[7]), ACT(voices[8]), ACT(voices[9]), ACT(voices[10]), ACT(voices[11]), ACT(voices[12]), ACT(voices[13]), ACT(voices[14]), ACT(voices[15]));
return;
}
@@ -406,7 +455,7 @@ void DexedAudioProcessor::keyup(uint8_t pitch) {
}
}
if ( highNote != -1 ) {
if ( highNote != -1 && voices[note].live ) {
voices[note].live = false;
voices[target].live = true;
voices[target].dx7_note->transferState(*voices[note].dx7_note);
@@ -460,8 +509,8 @@ void DexedAudioProcessor::handleIncomingMidiMessage(MidiInput* source, const Mid
TRACE("wrong single voice datasize %d", sz);
return;
}
updateProgramFromSysex(buf+6);
if ( updateProgramFromSysex(buf+6) )
TRACE("bad checksum when updating program from sysex message");
}
// 32 voice dump
@@ -580,19 +629,11 @@ bool DexedAudioProcessor::isOutputChannelStereoPair (int index) const {
}
bool DexedAudioProcessor::acceptsMidi() const {
#if JucePlugin_WantsMidiInput
return true;
#else
return false;
#endif
}
bool DexedAudioProcessor::producesMidi() const {
#if JucePlugin_ProducesMidiOutput
return true;
#else
return false;
#endif
}
bool DexedAudioProcessor::silenceInProducesSilenceOut() const {


+ 1
- 1
ports/dexed/source/PluginProcessor.h View File

@@ -189,7 +189,7 @@ public :
bool hasEditor() const;
void updateUI();
bool peekVoiceStatus();
void updateProgramFromSysex(const uint8 *rawdata);
int updateProgramFromSysex(const uint8 *rawdata);
void setupStartupCart();
//==============================================================================


+ 5
- 18
ports/dexed/source/ProgramListBox.cpp View File

@@ -29,7 +29,6 @@ ProgramListBox::ProgramListBox(const String name, int numCols) : Component(name)
selectedPgm = -1;
hasContent = false;
dragCandidate = -1;
pgmCandidate = -1;
readOnly = false;
programNames.clear();
}
@@ -103,35 +102,23 @@ int ProgramListBox::programPosition(int x, int y) {
}
void ProgramListBox::mouseDown(const MouseEvent &event) {
pgmCandidate = -1;
if ( ! hasContent )
return;
int pos = programPosition(event.getMouseDownX(), event.getMouseDownY());
if ( event.mods.isRightButtonDown() || event.mods.isAnyModifierKeyDown() ) {
int pos = programPosition(event.getMouseDownX(), event.getMouseDownY());
if ( listener != nullptr )
listener->programRightClicked(this, pos);
listener->programRightClicked(this, pos);
return;
}
pgmCandidate = programPosition(event.getMouseDownX(), event.getMouseDownY());
listener->programSelected(this, pos);
}
void ProgramListBox::mouseUp(const MouseEvent &event) {
if ( pgmCandidate == -1 )
return;
int pos = programPosition(event.getMouseDownX(), event.getMouseDownY());
if ( pgmCandidate == pos) {
if ( listener != nullptr )
listener->programSelected(this, pgmCandidate);
pgmCandidate = -1;
}
}
void ProgramListBox::mouseDrag(const MouseEvent &event) {
pgmCandidate = -1;
if ( ! hasContent )
return;
if ( dragCandidate != -1 )


+ 0
- 1
ports/dexed/source/ProgramListBox.h View File

@@ -45,7 +45,6 @@ class ProgramListBox : public Component, public DragAndDropTarget {
Cartridge cartContent;
int dragCandidate;
int pgmCandidate;
public:
StringArray programNames;


+ 36
- 36
ports/dexed/source/msfa/aligned_buf.h View File

@@ -1,36 +1,36 @@
/*
* Copyright 2013 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// A convenient wrapper for buffers with alignment constraints
// Note that if we were on C++11, we'd use aligned_storage or somesuch.
#ifndef __ALIGNED_BUF_H
#define __ALIGNED_BUF_H
#include<stddef.h>
template<typename T, size_t size, size_t alignment = 16>
class AlignedBuf {
public:
T *get() {
return (T *)((((intptr_t)storage_) + alignment - 1) & -alignment);
}
private:
unsigned char storage_[size * sizeof(T) + alignment];
};
#endif // __ALIGNED_BUF_H
/*
* Copyright 2013 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// A convenient wrapper for buffers with alignment constraints
// Note that if we were on C++11, we'd use aligned_storage or somesuch.
#ifndef __ALIGNED_BUF_H
#define __ALIGNED_BUF_H
#include<stddef.h>
template<typename T, size_t size, size_t alignment = 16>
class AlignedBuf {
public:
T *get() {
return (T *)((((intptr_t)storage_) + alignment - 1) & -alignment);
}
private:
unsigned char storage_[size * sizeof(T) + alignment];
};
#endif // __ALIGNED_BUF_H

+ 126
- 126
ports/dexed/source/msfa/controllers.h View File

@@ -1,126 +1,126 @@
/*
* Copyright 2013 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef __CONTROLLERS_H
#define __CONTROLLERS_H
#include "synth.h"
#include "../Dexed.h"
#include <stdio.h>
#include <string.h>
#ifdef _WIN32
#define snprintf _snprintf
#endif
// State of MIDI controllers
const int kControllerPitch = 128;
const int kControllerPitchRange = 129;
const int kControllerPitchStep = 130;
class FmCore;
struct FmMod {
int range;
bool pitch;
bool amp;
bool eg;
FmMod() {
range = 0;
pitch = false;
amp = false;
eg = false;
}
void parseConfig(const char *cfg) {
int r = 0, p = 0, a = 0, e = 0;
sscanf(cfg, "%d %d %d %d", &r, &p, &a, &e);
range = r < 0 && r > 127 ? 0 : r;
pitch = p != 0;
amp = a != 0;
eg = e != 0;
}
void setConfig(char *cfg) {
snprintf(cfg, 13, "%d %d %d %d", range, pitch, amp, eg);
}
};
class Controllers {
void applyMod(int cc, FmMod &mod) {
float range = 0.01 * mod.range;
int total = cc * range;
if ( mod.amp )
amp_mod = max(amp_mod, total);
if ( mod.pitch )
pitch_mod = max(pitch_mod, total);
if ( mod.eg )
eg_mod = max(eg_mod, total);
}
public:
int values_[131];
char opSwitch[7];
int amp_mod;
int pitch_mod;
int eg_mod;
int aftertouch_cc;
int breath_cc;
int foot_cc;
int modwheel_cc;
int masterTune;
FmMod wheel;
FmMod foot;
FmMod breath;
FmMod at;
Controllers() {
amp_mod = 0;
pitch_mod = 0;
eg_mod = 0;
strcpy(opSwitch, "111111");
}
void refresh() {
amp_mod = 0;
pitch_mod = 0;
eg_mod = 0;
applyMod(modwheel_cc, wheel);
applyMod(breath_cc, breath);
applyMod(foot_cc, foot);
applyMod(aftertouch_cc, at);
if ( ! ((wheel.eg || foot.eg) || (breath.eg || at.eg)) )
eg_mod = 127;
TRACE("amp_mod %d pitch_mod %d", amp_mod, pitch_mod);
}
FmCore *core;
};
#endif // __CONTROLLERS_H
/*
* Copyright 2013 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef __CONTROLLERS_H
#define __CONTROLLERS_H
#include "synth.h"
#include "../Dexed.h"
#include <stdio.h>
#include <string.h>
#ifdef _WIN32
#define snprintf _snprintf
#endif
// State of MIDI controllers
const int kControllerPitch = 128;
const int kControllerPitchRange = 129;
const int kControllerPitchStep = 130;
class FmCore;
struct FmMod {
int range;
bool pitch;
bool amp;
bool eg;
FmMod() {
range = 0;
pitch = false;
amp = false;
eg = false;
}
void parseConfig(const char *cfg) {
int r = 0, p = 0, a = 0, e = 0;
sscanf(cfg, "%d %d %d %d", &r, &p, &a, &e);
range = r < 0 && r > 127 ? 0 : r;
pitch = p != 0;
amp = a != 0;
eg = e != 0;
}
void setConfig(char *cfg) {
snprintf(cfg, 13, "%d %d %d %d", range, pitch, amp, eg);
}
};
class Controllers {
void applyMod(int cc, FmMod &mod) {
float range = 0.01 * mod.range;
int total = cc * range;
if ( mod.amp )
amp_mod = max(amp_mod, total);
if ( mod.pitch )
pitch_mod = max(pitch_mod, total);
if ( mod.eg )
eg_mod = max(eg_mod, total);
}
public:
int values_[131];
char opSwitch[7];
int amp_mod;
int pitch_mod;
int eg_mod;
int aftertouch_cc;
int breath_cc;
int foot_cc;
int modwheel_cc;
int masterTune;
FmMod wheel;
FmMod foot;
FmMod breath;
FmMod at;
Controllers() {
amp_mod = 0;
pitch_mod = 0;
eg_mod = 0;
strcpy(opSwitch, "111111");
}
void refresh() {
amp_mod = 0;
pitch_mod = 0;
eg_mod = 0;
applyMod(modwheel_cc, wheel);
applyMod(breath_cc, breath);
applyMod(foot_cc, foot);
applyMod(aftertouch_cc, at);
if ( ! ((wheel.eg || foot.eg) || (breath.eg || at.eg)) )
eg_mod = 127;
TRACE("controllers refresh>>> amp_mod %d pitch_mod %d", amp_mod, pitch_mod);
}
FmCore *core;
};
#endif // __CONTROLLERS_H

+ 25
- 12
ports/dexed/source/msfa/dx7note.cc View File

@@ -44,14 +44,20 @@ int32_t osc_freq(int midinote, int mode, int coarse, int fine, int detune) {
int32_t logfreq;
if (mode == 0) {
logfreq = midinote_to_logfreq(midinote);
// could use more precision, closer enough for now. those numbers comes from my DX7
double detuneRatio = 0.0209 * exp(-0.396 * (((float)logfreq)/(1<<24))) / 7;
logfreq += detuneRatio * logfreq * (detune - 7);
logfreq += coarsemul[coarse & 31];
if (fine) {
// (1 << 24) / log(2)
logfreq += (int32_t)floor(24204406.323123 * log(1 + 0.01 * fine) + 0.5);
}
// This was measured at 7.213Hz per count at 9600Hz, but the exact
// value is somewhat dependent on midinote. Close enough for now.
logfreq += 12606 * (detune - 7);
// // This was measured at 7.213Hz per count at 9600Hz, but the exact
// // value is somewhat dependent on midinote. Close enough for now.
// //logfreq += 12606 * (detune -7);
} else {
// ((1 << 24) * log(10) / log(2) * .01) << 3
logfreq = (4458616 * ((coarse & 3) * 100 + fine)) >> 3;
@@ -164,6 +170,7 @@ void Dx7Note::init(const uint8_t patch[156], int midinote, int velocity) {
int fine = patch[off + 19];
int detune = patch[off + 20];
int32_t freq = osc_freq(midinote, mode, coarse, fine, detune);
opMode[op] = mode;
basepitch_[op] = freq;
ampmodsens_[op] = ampmodsenstab[patch[off + 14] & 3];
}
@@ -186,7 +193,7 @@ void Dx7Note::compute(int32_t *buf, int32_t lfo_val, int32_t lfo_delay, const Co
int32_t senslfo = pitchmodsens_ * (lfo_val - (1 << 23));
int32_t pmod_1 = (((int64_t) pmd) * (int64_t) senslfo) >> 39;
pmod_1 = abs(pmod_1);
int32_t pmod_2 = ((int64_t)ctrls->pitch_mod * (int64_t)senslfo) >> 14;
int32_t pmod_2 = (int32_t)(((int64_t)ctrls->pitch_mod * (int64_t)senslfo) >> 14);
pmod_2 = abs(pmod_2);
int32_t pitch_mod = max(pmod_1, pmod_2);
pitch_mod = pitchenv_.getsample() + (pitch_mod * (senslfo < 0 ? -1 : 1));
@@ -203,13 +210,14 @@ void Dx7Note::compute(int32_t *buf, int32_t lfo_val, int32_t lfo_delay, const Co
pb = (pb * (8191 / stp)) << 11;
}
}
pitch_mod += pb;
pitch_mod += ctrls->masterTune;
int32_t pitch_base = pb + ctrls->masterTune;
pitch_mod += pitch_base;
// ==== AMP MOD ====
uint32_t amod_1 = ((int64_t) ampmoddepth_ * (int64_t) lfo_delay) >> 8; // Q24 :D
amod_1 = ((int64_t) amod_1 * (int64_t) lfo_val) >> 24;
uint32_t amod_2 = ((int64_t) ctrls->amp_mod * (int64_t) lfo_val) >> 7; // Q?? :|
lfo_val = (1<<24) - lfo_val;
uint32_t amod_1 = (uint32_t)(((int64_t) ampmoddepth_ * (int64_t) lfo_delay) >> 8); // Q24 :D
amod_1 = (uint32_t)(((int64_t) amod_1 * (int64_t) lfo_val) >> 24);
uint32_t amod_2 = (uint32_t)(((int64_t) ctrls->amp_mod * (int64_t) lfo_val) >> 7); // Q?? :|
uint32_t amd_mod = max(amod_1, amod_2);
// ==== EG AMP MOD ====
@@ -223,15 +231,19 @@ void Dx7Note::compute(int32_t *buf, int32_t lfo_val, int32_t lfo_delay, const Co
params_[op].level_in = 0;
} else {
//int32_t gain = pow(2, 10 + level * (1.0 / (1 << 24)));
params_[op].freq = Freqlut::lookup(basepitch_[op] + pitch_mod);
if ( opMode[op] )
params_[op].freq = Freqlut::lookup(basepitch_[op] + pitch_base);
else
params_[op].freq = Freqlut::lookup(basepitch_[op] + pitch_mod);
int32_t level = env_[op].getsample();
if (ampmodsens_[op] != 0) {
uint32_t sensamp = ((uint64_t) amd_mod) * ((uint64_t) ampmodsens_[op]) >> 24;
uint32_t sensamp = (uint32_t)(((uint64_t) amd_mod) * ((uint64_t) ampmodsens_[op]) >> 24);
// TODO: mehhh.. this needs some real tuning.
uint32_t pt = exp(((float)sensamp)/262144 * 0.07 + 12.2);
uint32_t ldiff = ((uint64_t)level) * (((uint64_t)pt<<4)) >> 28;
uint32_t ldiff = (uint32_t)(((uint64_t)level) * (((uint64_t)pt<<4)) >> 28);
level -= ldiff;
}
params_[op].level_in = level;
@@ -258,6 +270,7 @@ void Dx7Note::update(const uint8_t patch[156], int midinote, int velocity) {
int detune = patch[off + 20];
basepitch_[op] = osc_freq(midinote, mode, coarse, fine, detune);
ampmodsens_[op] = ampmodsenstab[patch[off + 14] & 3];
opMode[op] = mode;
for (int i = 0; i < 4; i++) {
rates[i] = patch[off + i];


+ 1
- 0
ports/dexed/source/msfa/dx7note.h View File

@@ -66,6 +66,7 @@ private:
int32_t fb_buf_[2];
int32_t fb_shift_;
int32_t ampmodsens_[6];
int32_t opMode[6];
int ampmoddepth_;
int algorithm_;


+ 94
- 47
ports/dexed/source/msfa/env.cc View File

@@ -24,16 +24,31 @@
//using namespace std;
uint32_t Env::sr_multiplier = (1<<24);
const int levellut[] = {
0, 5, 9, 13, 17, 20, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 42, 43, 45, 46
};
void Env::init_sr(double sampleRate) {
};

#ifdef ACCURATE_ENVELOPE
const int statics[] = {
1764000, 1764000, 1411200, 1411200, 1190700, 1014300, 992250,
882000, 705600, 705600, 584325, 507150, 502740, 441000, 418950,
352800, 308700, 286650, 253575, 220500, 220500, 176400, 145530,
145530, 125685, 110250, 110250, 88200, 88200, 74970, 61740,
61740, 55125, 48510, 44100, 37485, 31311, 30870, 27562, 27562,
22050, 18522, 17640, 15435, 14112, 13230, 11025, 9261, 9261, 7717,
6615, 6615, 5512, 5512, 4410, 3969, 3969, 3439, 2866, 2690, 2249,
1984, 1896, 1808, 1411, 1367, 1234, 1146, 926, 837, 837, 705,
573, 573, 529, 441, 441
// and so on, I stopped measuring after R=76 (needs to be double-checked anyway)
};
#endif

void Env::init_sr(double sampleRate) {
sr_multiplier = (44100.0 / sampleRate) * (1<<24);
}
void Env::init(const int r[4], const int l[4], int32_t ol, int rate_scaling) {
void Env::init(const int r[4], const int l[4], int ol, int rate_scaling) {
for (int i = 0; i < 4; i++) {
rates_[i] = r[i];
levels_[i] = l[i];
@@ -41,33 +56,47 @@ void Env::init(const int r[4], const int l[4], int32_t ol, int rate_scaling) {
outlevel_ = ol;
rate_scaling_ = rate_scaling;
level_ = 0;
down_ = true;
down_ = true;
advance(0);
}
int32_t Env::getsample() {
if (ix_ < 3 || ((ix_ < 4) && !down_)) {
if (rising_) {
const int jumptarget = 1716;
if (level_ < (jumptarget << 16)) {
level_ = jumptarget << 16;
}
level_ += (((17 << 24) - level_) >> 24) * inc_;
// TODO: should probably be more accurate when inc is large
if (level_ >= targetlevel_) {
level_ = targetlevel_;
advance(ix_ + 1);
}
} else { // !rising
level_ -= inc_;
if (level_ <= targetlevel_) {
level_ = targetlevel_;
advance(ix_ + 1);
}
}
}
int32_t Env::getsample() {
#ifdef ACCURATE_ENVELOPE
if (staticcount_) {
staticcount_ -= N;
if (staticcount_ <= 0) {
staticcount_ = 0;
advance(ix_ + 1);
}
}
#endif

if (ix_ < 3 || ((ix_ < 4) && !down_)) {
if (rising_) {
const int jumptarget = 1716;
if (level_ < (jumptarget << 16)) {
level_ = jumptarget << 16;
}
level_ += (((17 << 24) - level_) >> 24) * inc_;
// TODO: should probably be more accurate when inc is large
if (level_ >= targetlevel_) {
level_ = targetlevel_;
advance(ix_ + 1);
}
}
else if (staticcount_) {
;
}
else { // !rising
level_ -= inc_;
if (level_ <= targetlevel_) {
level_ = targetlevel_;
advance(ix_ + 1);
}
}
}
// TODO: this would be a good place to set level to 0 when under threshold
return level_;
return level_;
}
void Env::keydown(bool d) {
@@ -79,44 +108,59 @@ void Env::keydown(bool d) {
int Env::scaleoutlevel(int outlevel) {
return outlevel >= 20 ? 28 + outlevel : levellut[outlevel];
}
}
void Env::advance(int newix) {
ix_ = newix;
if (ix_ < 4) {
int newlevel = levels_[ix_];
int newlevel = levels_[ix_];
int actuallevel = scaleoutlevel(newlevel) >> 1;
actuallevel = (actuallevel << 6) + outlevel_ - 4256;
actuallevel = actuallevel < 16 ? 16 : actuallevel;
// level here is same as Java impl
targetlevel_ = actuallevel << 16;
rising_ = (targetlevel_ > level_);
actuallevel = actuallevel < 16 ? 16 : actuallevel;
// level here is same as Java impl
targetlevel_ = actuallevel << 16;
rising_ = (targetlevel_ > level_);
// rate
int qrate = (rates_[ix_] * 41) >> 6;
qrate += rate_scaling_;
qrate = min(qrate, 63);
inc_ = (4 + (qrate & 3)) << (2 + LG_N + (qrate >> 2));
qrate = min(qrate, 63);

#ifdef ACCURATE_ENVELOPE
if (targetlevel_ == level_) {
// approximate number of samples at 44.100 kHz to achieve the time
// empirically gathered using 2 TF1s, could probably use some double-checking
// and cleanup, but it's pretty close for now.
int staticrate = rates_[ix_];
staticrate += rate_scaling_; // needs to be checked, as well, but seems correct
staticrate = min(staticrate, 99);
staticcount_ = staticrate < 77 ? statics[staticrate] : 20 * (99 - staticrate);
staticcount_ = (int)(((int64_t)staticcount_ * (int64_t)sr_multiplier) >> 24);
}
else {
staticcount_ = 0;
}
#endif
inc_ = (4 + (qrate & 3)) << (2 + LG_N + (qrate >> 2));
// meh, this should be fixed elsewhere
inc_ = ((int64_t)inc_ * (int64_t)sr_multiplier) >> 24;
inc_ = (int)(((int64_t)inc_ * (int64_t)sr_multiplier) >> 24);
}
}
void Env::update(const int r[4], const int l[4], int32_t ol, int rate_scaling) {
void Env::update(const int r[4], const int l[4], int ol, int rate_scaling) {
for (int i = 0; i < 4; i++) {
rates_[i] = r[i];
levels_[i] = l[i];
}
}
outlevel_ = ol;
rate_scaling_ = rate_scaling;
if ( down_ ) {
if ( down_ ) {
// for now we simply reset ourselve at level 3
int newlevel = levels_[2];
int actuallevel = scaleoutlevel(newlevel) >> 1;
actuallevel = (actuallevel << 6) - 4256;
actuallevel = actuallevel < 16 ? 16 : actuallevel;
targetlevel_ = actuallevel << 16;
actuallevel = actuallevel < 16 ? 16 : actuallevel;
targetlevel_ = actuallevel << 16;
advance(2);
}
}
@@ -136,7 +180,10 @@ void Env::transfer(Env &src) {
targetlevel_ = src.targetlevel_;
rising_= src.rising_;
ix_ = src.ix_;
inc_ = src.inc_;
down_ = src.down_;
down_ = src.down_;
#ifdef ACCURATE_ENVELOPE
staticcount_ = src.staticcount_;
#endif
inc_ = src.inc_;
}

+ 7
- 1
ports/dexed/source/msfa/env.h View File

@@ -22,6 +22,8 @@

// DX7 envelope generation

#define ACCURATE_ENVELOPE

class Env {
public:

@@ -50,10 +52,11 @@ class Env {
void transfer(Env &src);
private:

// PG: This code is normalized to 44100, need to put a multiplier
// if we are not using 44100.
static uint32_t sr_multiplier;
int rates_[4];
int levels_[4];
int outlevel_;
@@ -66,6 +69,9 @@ class Env {
bool rising_;
int ix_;
int inc_;
#ifdef ACCURATE_ENVELOPE
int staticcount_;
#endif

bool down_;



+ 0
- 0
ports/dexed/source/msfa/exp2.cc View File


+ 0
- 0
ports/dexed/source/msfa/exp2.h View File


+ 0
- 0
ports/dexed/source/msfa/freqlut.cc View File


+ 0
- 0
ports/dexed/source/msfa/freqlut.h View File


+ 0
- 0
ports/dexed/source/msfa/module.h View File


+ 0
- 0
ports/dexed/source/msfa/pitchenv.h View File


+ 0
- 1
ports/dexed/source/msfa/synth.h View File

@@ -38,7 +38,6 @@ typedef __int16 SInt16;
#endif
#endif
#include "../Dexed.h"
// #undef SynthMemoryBarrier()


Loading…
Cancel
Save