monoeg_g_utf8_strup (const gchar * str, gssize len)
{
  gchar * D.5045;

  D.5045 = utf8_case_conv (str, len, 1);
  return D.5045;
}


utf8_case_conv (const gchar * str, gssize len, gboolean upper)
{
  long unsigned int i.0;
  long unsigned int D.5048;
  gunichar * D.5049;
  gunichar iftmp.1;
  unsigned int D.5053;
  long int ulen.2;
  gchar * D.5056;
  gunichar * ustr;
  glong i;
  glong ulen;
  gchar * utf8;

  try
    {
      ustr = monoeg_g_utf8_to_ucs4_fast (str, len, &ulen);
      i = 0;
      goto <D.4931>;
      <D.4930>:
      i.0 = (long unsigned int) i;
      D.5048 = i.0 * 4;
      D.5049 = ustr + D.5048;
      if (upper != 0) goto <D.5051>; else goto <D.5052>;
      <D.5051>:
      i.0 = (long unsigned int) i;
      D.5048 = i.0 * 4;
      D.5049 = ustr + D.5048;
      D.5053 = *D.5049;
      iftmp.1 = monoeg_g_unichar_toupper (D.5053);
      goto <D.5054>;
      <D.5052>:
      i.0 = (long unsigned int) i;
      D.5048 = i.0 * 4;
      D.5049 = ustr + D.5048;
      D.5053 = *D.5049;
      iftmp.1 = monoeg_g_unichar_tolower (D.5053);
      <D.5054>:
      *D.5049 = iftmp.1;
      i = i + 1;
      <D.4931>:
      ulen.2 = ulen;
      if (i < ulen.2) goto <D.4930>; else goto <D.4932>;
      <D.4932>:
      ulen.2 = ulen;
      utf8 = monoeg_g_ucs4_to_utf8 (ustr, ulen.2, 0B, 0B, 0B);
      monoeg_g_free (ustr);
      D.5056 = utf8;
      return D.5056;
    }
  finally
    {
      ulen = {CLOBBER};
    }
}


monoeg_g_utf8_strdown (const gchar * str, gssize len)
{
  gchar * D.5059;

  D.5059 = utf8_case_conv (str, len, 0);
  return D.5059;
}


monoeg_g_utf8_validate (const gchar * str, gssize max_len, const gchar * * end)
{
  gboolean D.5063;
  unsigned char D.5066;
  int D.5067;
  unsigned char D.5068;
  long unsigned int D.5069;
  int D.5070;
  sizetype D.5073;
  long int D.5077;
  long int D.5078;
  long int D.5079;
  long unsigned int D.5080;
  int D.5081;
  guchar * inptr;
  gboolean valid;
  guint length;
  guint min;
  gssize n;

  inptr = str;
  valid = 1;
  n = 0;
  if (max_len == 0) goto <D.5061>; else goto <D.5062>;
  <D.5061>:
  D.5063 = 0;
  return D.5063;
  <D.5062>:
  if (max_len < 0) goto <D.5064>; else goto <D.5065>;
  <D.5064>:
  goto <D.4971>;
  <D.4970>:
  D.5066 = *inptr;
  D.5067 = (int) D.5066;
  D.5068 = g_utf8_jump_table[D.5067];
  length = (guint) D.5068;
  D.5069 = (long unsigned int) length;
  D.5070 = utf8_validate (inptr, D.5069);
  if (D.5070 == 0) goto <D.5071>; else goto <D.5072>;
  <D.5071>:
  valid = 0;
  goto <D.4969>;
  <D.5072>:
  D.5073 = (sizetype) length;
  inptr = inptr + D.5073;
  <D.4971>:
  D.5066 = *inptr;
  if (D.5066 != 0) goto <D.4970>; else goto <D.4969>;
  <D.4969>:
  goto <D.5074>;
  <D.5065>:
  goto <D.4974>;
  <D.4973>:
  D.5066 = *inptr;
  if (D.5066 == 0) goto <D.5075>; else goto <D.5076>;
  <D.5075>:
  valid = 0;
  goto <D.4972>;
  <D.5076>:
  D.5066 = *inptr;
  D.5067 = (int) D.5066;
  D.5068 = g_utf8_jump_table[D.5067];
  length = (guint) D.5068;
  D.5077 = max_len - n;
  D.5078 = (long int) length;
  D.5079 = MIN_EXPR <D.5077, D.5078>;
  min = (guint) D.5079;
  D.5080 = (long unsigned int) min;
  D.5081 = utf8_validate (inptr, D.5080);
  if (D.5081 == 0) goto <D.5082>; else goto <D.5083>;
  <D.5082>:
  valid = 0;
  goto <D.4972>;
  <D.5083>:
  if (min < length) goto <D.5084>; else goto <D.5085>;
  <D.5084>:
  valid = 0;
  goto <D.4972>;
  <D.5085>:
  D.5073 = (sizetype) length;
  inptr = inptr + D.5073;
  D.5078 = (long int) length;
  n = D.5078 + n;
  <D.4974>:
  if (n < max_len) goto <D.4973>; else goto <D.4972>;
  <D.4972>:
  <D.5074>:
  if (end != 0B) goto <D.5086>; else goto <D.5087>;
  <D.5086>:
  *end = inptr;
  <D.5087>:
  D.5063 = valid;
  return D.5063;
}


utf8_validate (const unsigned char * inptr, size_t len)
{
  gboolean D.5089;
  signed char c.3;
  unsigned char D.5094;
  const unsigned char * D.5097;
  unsigned char D.5098;
  const unsigned char * D.5103;
  unsigned char D.5104;
  _Bool D.5105;
  _Bool D.5106;
  _Bool D.5107;
  unsigned char D.5116;
  int D.5117;
  const unsigned char * D.5124;
  unsigned char D.5125;
  unsigned char D.5126;
  unsigned char D.5131;
  unsigned char D.5140;
  const unsigned char * ptr;
  unsigned char c;

  ptr = inptr + len;
  switch (len) <default: <D.4947>, case 1: <D.4958>, case 2: <D.4950>, case 3: <D.4949>, case 4: <D.4948>>
  <D.4947>:
  D.5089 = 0;
  return D.5089;
  <D.4948>:
  ptr = ptr + 18446744073709551615;
  c = *ptr;
  c.3 = (signed char) c;
  if (c.3 >= 0) goto <D.5090>; else goto <D.5093>;
  <D.5093>:
  if (c > 191) goto <D.5090>; else goto <D.5091>;
  <D.5090>:
  D.5089 = 0;
  return D.5089;
  <D.5091>:
  D.5094 = c + 66;
  if (D.5094 <= 1) goto <D.5095>; else goto <D.5096>;
  <D.5095>:
  D.5097 = ptr + 18446744073709551615;
  D.5098 = *D.5097;
  if (D.5098 == 191) goto <D.5099>; else goto <D.5100>;
  <D.5099>:
  D.5103 = ptr + 18446744073709551614;
  D.5104 = *D.5103;
  D.5105 = D.5104 == 143;
  D.5103 = ptr + 18446744073709551614;
  D.5104 = *D.5103;
  D.5106 = D.5104 == 159;
  D.5107 = D.5105 | D.5106;
  if (D.5107 != 0) goto <D.5101>; else goto <D.5108>;
  <D.5108>:
  D.5103 = ptr + 18446744073709551614;
  D.5104 = *D.5103;
  if (D.5104 == 175) goto <D.5101>; else goto <D.5109>;
  <D.5109>:
  D.5103 = ptr + 18446744073709551614;
  D.5104 = *D.5103;
  if (D.5104 == 191) goto <D.5101>; else goto <D.5102>;
  <D.5101>:
  D.5089 = 0;
  return D.5089;
  <D.5102>:
  <D.5100>:
  <D.5096>:
  <D.4949>:
  ptr = ptr + 18446744073709551615;
  c = *ptr;
  c.3 = (signed char) c;
  if (c.3 >= 0) goto <D.5110>; else goto <D.5112>;
  <D.5112>:
  if (c > 191) goto <D.5110>; else goto <D.5111>;
  <D.5110>:
  D.5089 = 0;
  return D.5089;
  <D.5111>:
  <D.4950>:
  ptr = ptr + 18446744073709551615;
  c = *ptr;
  c.3 = (signed char) c;
  if (c.3 >= 0) goto <D.5113>; else goto <D.5115>;
  <D.5115>:
  if (c > 191) goto <D.5113>; else goto <D.5114>;
  <D.5113>:
  D.5089 = 0;
  return D.5089;
  <D.5114>:
  D.5116 = *inptr;
  D.5117 = (int) D.5116;
  switch (D.5117) <default: <D.4957>, case 224: <D.4951>, case 237: <D.4953>, case 239: <D.4954>, case 240: <D.4955>, case 244: <D.4956>>
  <D.4951>:
  if (c <= 159) goto <D.5118>; else goto <D.5119>;
  <D.5118>:
  D.5089 = 0;
  return D.5089;
  <D.5119>:
  goto <D.4952>;
  <D.4953>:
  if (c > 159) goto <D.5120>; else goto <D.5121>;
  <D.5120>:
  D.5089 = 0;
  return D.5089;
  <D.5121>:
  goto <D.4952>;
  <D.4954>:
  if (c == 183) goto <D.5122>; else goto <D.5123>;
  <D.5122>:
  D.5124 = ptr + 1;
  D.5125 = *D.5124;
  D.5126 = D.5125 + 112;
  if (D.5126 <= 31) goto <D.5127>; else goto <D.5128>;
  <D.5127>:
  D.5089 = 0;
  return D.5089;
  <D.5128>:
  <D.5123>:
  if (c == 191) goto <D.5129>; else goto <D.5130>;
  <D.5129>:
  D.5124 = ptr + 1;
  D.5125 = *D.5124;
  D.5131 = D.5125 + 66;
  if (D.5131 <= 1) goto <D.5132>; else goto <D.5133>;
  <D.5132>:
  D.5089 = 0;
  return D.5089;
  <D.5133>:
  <D.5130>:
  goto <D.4952>;
  <D.4955>:
  if (c <= 143) goto <D.5134>; else goto <D.5135>;
  <D.5134>:
  D.5089 = 0;
  return D.5089;
  <D.5135>:
  goto <D.4952>;
  <D.4956>:
  if (c > 143) goto <D.5136>; else goto <D.5137>;
  <D.5136>:
  D.5089 = 0;
  return D.5089;
  <D.5137>:
  goto <D.4952>;
  <D.4957>:
  c.3 = (signed char) c;
  if (c.3 >= 0) goto <D.5138>; else goto <D.5139>;
  <D.5138>:
  D.5089 = 0;
  return D.5089;
  <D.5139>:
  goto <D.4952>;
  <D.4952>:
  <D.4958>:
  D.5116 = *inptr;
  D.5140 = D.5116 + 128;
  if (D.5140 <= 65) goto <D.5141>; else goto <D.5142>;
  <D.5141>:
  D.5089 = 0;
  return D.5089;
  <D.5142>:
  D.5116 = *inptr;
  if (D.5116 > 244) goto <D.5143>; else goto <D.5144>;
  <D.5143>:
  D.5089 = 0;
  return D.5089;
  <D.5144>:
  D.5089 = 1;
  return D.5089;
}


monoeg_utf8_get_char_validated (const gchar * str, gssize max_len)
{
  unsigned char D.5146;
  gunichar D.5149;
  long int D.5171;
  long int D.5172;
  long unsigned int D.5173;
  int D.5174;
  long unsigned int D.5180;
  int D.5181;
  unsigned int D.5184;
  unsigned char D.5185;
  unsigned int D.5186;
  unsigned char * inptr;
  gunichar u;
  int n;
  int i;

  inptr = str;
  D.5146 = *inptr;
  u = (gunichar) D.5146;
  if (max_len == 0) goto <D.5147>; else goto <D.5148>;
  <D.5147>:
  D.5149 = 4294967294;
  return D.5149;
  <D.5148>:
  if (u <= 127) goto <D.5150>; else goto <D.5151>;
  <D.5150>:
  D.5149 = u;
  return D.5149;
  <D.5151>:
  if (u <= 193) goto <D.5152>; else goto <D.5153>;
  <D.5152>:
  D.5149 = 4294967295;
  return D.5149;
  <D.5153>:
  if (u <= 223) goto <D.5154>; else goto <D.5155>;
  <D.5154>:
  u = u & 31;
  n = 2;
  goto <D.5156>;
  <D.5155>:
  if (u <= 239) goto <D.5157>; else goto <D.5158>;
  <D.5157>:
  u = u & 15;
  n = 3;
  goto <D.5159>;
  <D.5158>:
  if (u <= 247) goto <D.5160>; else goto <D.5161>;
  <D.5160>:
  u = u & 7;
  n = 4;
  goto <D.5162>;
  <D.5161>:
  if (u <= 251) goto <D.5163>; else goto <D.5164>;
  <D.5163>:
  u = u & 3;
  n = 5;
  goto <D.5165>;
  <D.5164>:
  if (u <= 253) goto <D.5166>; else goto <D.5167>;
  <D.5166>:
  u = u & 1;
  n = 6;
  goto <D.5168>;
  <D.5167>:
  D.5149 = 4294967295;
  return D.5149;
  <D.5168>:
  <D.5165>:
  <D.5162>:
  <D.5159>:
  <D.5156>:
  if (max_len > 0) goto <D.5169>; else goto <D.5170>;
  <D.5169>:
  D.5171 = (long int) n;
  D.5172 = MIN_EXPR <D.5171, max_len>;
  D.5173 = (long unsigned int) D.5172;
  D.5174 = utf8_validate (inptr, D.5173);
  if (D.5174 == 0) goto <D.5175>; else goto <D.5176>;
  <D.5175>:
  D.5149 = 4294967295;
  return D.5149;
  <D.5176>:
  D.5171 = (long int) n;
  if (D.5171 > max_len) goto <D.5177>; else goto <D.5178>;
  <D.5177>:
  D.5149 = 4294967294;
  return D.5149;
  <D.5178>:
  goto <D.5179>;
  <D.5170>:
  D.5180 = (long unsigned int) n;
  D.5181 = utf8_validate (inptr, D.5180);
  if (D.5181 == 0) goto <D.5182>; else goto <D.5183>;
  <D.5182>:
  D.5149 = 4294967295;
  return D.5149;
  <D.5183>:
  <D.5179>:
  i = 1;
  goto <D.4984>;
  <D.4983>:
  D.5184 = u << 6;
  inptr = inptr + 1;
  D.5146 = *inptr;
  D.5185 = D.5146 ^ 128;
  D.5186 = (unsigned int) D.5185;
  u = D.5184 | D.5186;
  i = i + 1;
  <D.4984>:
  if (i < n) goto <D.4983>; else goto <D.4985>;
  <D.4985>:
  D.5149 = u;
  return D.5149;
}


monoeg_g_utf8_strlen (const gchar * str, gssize max_len)
{
  glong D.5190;
  unsigned char D.5193;
  int D.5194;
  unsigned char D.5195;
  sizetype D.5196;
  long int D.5198;
  sizetype n.4;
  const guchar * inptr;
  glong clen;
  glong len;
  glong n;

  inptr = str;
  clen = 0;
  len = 0;
  if (max_len == 0) goto <D.5188>; else goto <D.5189>;
  <D.5188>:
  D.5190 = 0;
  return D.5190;
  <D.5189>:
  if (max_len < 0) goto <D.5191>; else goto <D.5192>;
  <D.5191>:
  goto <D.4995>;
  <D.4994>:
  D.5193 = *inptr;
  D.5194 = (int) D.5193;
  D.5195 = g_utf8_jump_table[D.5194];
  D.5196 = (sizetype) D.5195;
  inptr = inptr + D.5196;
  len = len + 1;
  <D.4995>:
  D.5193 = *inptr;
  if (D.5193 != 0) goto <D.4994>; else goto <D.4996>;
  <D.4996>:
  goto <D.5197>;
  <D.5192>:
  goto <D.4999>;
  <D.4998>:
  D.5193 = *inptr;
  D.5194 = (int) D.5193;
  D.5195 = g_utf8_jump_table[D.5194];
  n = (glong) D.5195;
  D.5198 = clen + n;
  if (D.5198 > max_len) goto <D.4997>; else goto <D.5199>;
  <D.5199>:
  n.4 = (sizetype) n;
  inptr = inptr + n.4;
  clen = clen + n;
  len = len + 1;
  <D.4999>:
  if (len < max_len) goto <D.5201>; else goto <D.4997>;
  <D.5201>:
  D.5193 = *inptr;
  if (D.5193 != 0) goto <D.4998>; else goto <D.4997>;
  <D.4997>:
  <D.5197>:
  D.5190 = len;
  return D.5190;
}


monoeg_g_utf8_get_char (const gchar * src)
{
  unsigned char D.5203;
  gunichar D.5206;
  unsigned int D.5219;
  unsigned char D.5220;
  unsigned int D.5221;
  unsigned char * inptr;
  gunichar u;
  int n;
  int i;

  inptr = src;
  D.5203 = *inptr;
  u = (gunichar) D.5203;
  if (u <= 127) goto <D.5204>; else goto <D.5205>;
  <D.5204>:
  D.5206 = u;
  return D.5206;
  <D.5205>:
  if (u <= 223) goto <D.5207>; else goto <D.5208>;
  <D.5207>:
  u = u & 31;
  n = 2;
  goto <D.5209>;
  <D.5208>:
  if (u <= 239) goto <D.5210>; else goto <D.5211>;
  <D.5210>:
  u = u & 15;
  n = 3;
  goto <D.5212>;
  <D.5211>:
  if (u <= 247) goto <D.5213>; else goto <D.5214>;
  <D.5213>:
  u = u & 7;
  n = 4;
  goto <D.5215>;
  <D.5214>:
  if (u <= 251) goto <D.5216>; else goto <D.5217>;
  <D.5216>:
  u = u & 3;
  n = 5;
  goto <D.5218>;
  <D.5217>:
  u = u & 1;
  n = 6;
  <D.5218>:
  <D.5215>:
  <D.5212>:
  <D.5209>:
  i = 1;
  goto <D.5008>;
  <D.5007>:
  D.5219 = u << 6;
  inptr = inptr + 1;
  D.5203 = *inptr;
  D.5220 = D.5203 ^ 128;
  D.5221 = (unsigned int) D.5220;
  u = D.5219 | D.5221;
  i = i + 1;
  <D.5008>:
  if (i < n) goto <D.5007>; else goto <D.5009>;
  <D.5009>:
  D.5206 = u;
  return D.5206;
}


monoeg_utf8_find_prev_char (const gchar * str, const gchar * p)
{
  gchar * D.5225;

  goto <D.5015>;
  <D.5014>:
  p = p + 18446744073709551615;
  if (1 != 0) goto <D.5223>; else goto <D.5224>;
  <D.5223>:
  D.5225 = p;
  return D.5225;
  <D.5224>:
  <D.5015>:
  if (p > str) goto <D.5014>; else goto <D.5016>;
  <D.5016>:
  D.5225 = 0B;
  return D.5225;
}


monoeg_utf8_prev_char (const gchar * str)
{
  gchar * D.5227;
  const gchar * p;

  p = str;
  p = p + 18446744073709551615;
  D.5227 = p;
  return D.5227;
}


monoeg_g_utf8_offset_to_pointer (const gchar * str, glong offset)
{
  char D.5231;
  unsigned char D.5232;
  int D.5233;
  unsigned char D.5234;
  sizetype D.5235;
  sizetype offset.5;
  gchar * D.5240;
  const gchar * p;

  p = str;
  if (offset > 0) goto <D.5229>; else goto <D.5230>;
  <D.5229>:
  <D.5026>:
  D.5231 = *p;
  D.5232 = (unsigned char) D.5231;
  D.5233 = (int) D.5232;
  D.5234 = g_utf8_jump_table[D.5233];
  D.5235 = (sizetype) D.5234;
  p = p + D.5235;
  offset = offset + -1;
  if (offset > 0) goto <D.5026>; else goto <D.5027>;
  <D.5027>:
  goto <D.5236>;
  <D.5230>:
  if (offset < 0) goto <D.5237>; else goto <D.5238>;
  <D.5237>:
  {
    const gchar * jump;

    jump = str;
    <D.5032>:
    offset.5 = (sizetype) offset;
    jump = jump + offset.5;
    goto <D.5029>;
    jump = jump + 18446744073709551615;
    <D.5029>:
    p = jump;
    <D.5030>:
    D.5231 = *p;
    D.5232 = (unsigned char) D.5231;
    D.5233 = (int) D.5232;
    D.5234 = g_utf8_jump_table[D.5233];
    D.5235 = (sizetype) D.5234;
    p = p + D.5235;
    offset = offset + 1;
    if (p < jump) goto <D.5030>; else goto <D.5031>;
    <D.5031>:
    if (offset < 0) goto <D.5032>; else goto <D.5033>;
    <D.5033>:
  }
  <D.5238>:
  <D.5236>:
  D.5240 = p;
  return D.5240;
}


monoeg_g_utf8_pointer_to_offset (const gchar * str, const gchar * pos)
{
  glong D.5244;
  char D.5248;
  unsigned char D.5249;
  int D.5250;
  unsigned char D.5251;
  sizetype D.5252;
  const gchar * inptr;
  const gchar * inend;
  glong offset;
  glong sign;

  offset = 0;
  sign = 1;
  if (pos == str) goto <D.5242>; else goto <D.5243>;
  <D.5242>:
  D.5244 = 0;
  return D.5244;
  <D.5243>:
  if (str < pos) goto <D.5245>; else goto <D.5246>;
  <D.5245>:
  inptr = str;
  inend = pos;
  goto <D.5247>;
  <D.5246>:
  inptr = pos;
  inend = str;
  sign = -1;
  <D.5247>:
  <D.5042>:
  D.5248 = *inptr;
  D.5249 = (unsigned char) D.5248;
  D.5250 = (int) D.5249;
  D.5251 = g_utf8_jump_table[D.5250];
  D.5252 = (sizetype) D.5251;
  inptr = inptr + D.5252;
  offset = offset + 1;
  if (inptr < inend) goto <D.5042>; else goto <D.5043>;
  <D.5043>:
  D.5244 = offset * sign;
  return D.5244;
}


