monoeg_g_iconv_open (const char * to_charset, const char * from_charset)
{
  char D.5010;
  char D.5012;
  int * D.5013;
  struct _GIConv * D.5014;
  const char * D.5015;
  int D.5016;
  int D.5019;
  void * icd;
  int (*Decoder) (char *, size_t, gunichar *) decoder;
  int (*Encoder) (gunichar, char *, size_t) encoder;
  struct _GIConv * cd;
  guint i;

  icd = 4294967295B;
  decoder = 0B;
  encoder = 0B;
  if (to_charset == 0B) goto <D.5006>; else goto <D.5008>;
  <D.5008>:
  if (from_charset == 0B) goto <D.5006>; else goto <D.5009>;
  <D.5009>:
  D.5010 = *to_charset;
  if (D.5010 == 0) goto <D.5006>; else goto <D.5011>;
  <D.5011>:
  D.5012 = *from_charset;
  if (D.5012 == 0) goto <D.5006>; else goto <D.5007>;
  <D.5006>:
  D.5013 = __errno_location ();
  *D.5013 = 22;
  D.5014 = 4294967295B;
  return D.5014;
  <D.5007>:
  i = 0;
  goto <D.4682>;
  <D.4681>:
  D.5015 = charsets[i].name;
  D.5016 = monoeg_ascii_strcasecmp (D.5015, from_charset);
  if (D.5016 == 0) goto <D.5017>; else goto <D.5018>;
  <D.5017>:
  decoder = charsets[i].decoder;
  <D.5018>:
  D.5015 = charsets[i].name;
  D.5019 = monoeg_ascii_strcasecmp (D.5015, to_charset);
  if (D.5019 == 0) goto <D.5020>; else goto <D.5021>;
  <D.5020>:
  encoder = charsets[i].encoder;
  <D.5021>:
  i = i + 1;
  <D.4682>:
  if (i <= 14) goto <D.4681>; else goto <D.4683>;
  <D.4683>:
  if (encoder == 0B) goto <D.5022>; else goto <D.5024>;
  <D.5024>:
  if (decoder == 0B) goto <D.5022>; else goto <D.5023>;
  <D.5022>:
  icd = iconv_open (to_charset, from_charset);
  if (icd == 4294967295B) goto <D.5025>; else goto <D.5026>;
  <D.5025>:
  D.5014 = 4294967295B;
  return D.5014;
  <D.5026>:
  <D.5023>:
  cd = monoeg_malloc (16);
  cd->decode = decoder;
  cd->encode = encoder;
  cd->c = 4294967295;
  cd->cd = icd;
  D.5014 = cd;
  return D.5014;
}


encode_utf8 (gunichar c, char * outbuf, size_t outleft)
{
  unsigned char D.5030;
  int D.5031;
  unsigned int n.0;
  int * D.5047;
  sizetype i.1;
  unsigned char * D.5049;
  unsigned char D.5050;
  unsigned char D.5051;
  unsigned char D.5052;
  unsigned char D.5053;
  unsigned char * outptr;
  int base;
  int n;
  int i;

  outptr = outbuf;
  if (c <= 127) goto <D.5028>; else goto <D.5029>;
  <D.5028>:
  D.5030 = (unsigned char) c;
  *outptr = D.5030;
  D.5031 = 1;
  return D.5031;
  <D.5029>:
  if (c <= 2047) goto <D.5032>; else goto <D.5033>;
  <D.5032>:
  base = 192;
  n = 2;
  goto <D.5034>;
  <D.5033>:
  if (c <= 65535) goto <D.5035>; else goto <D.5036>;
  <D.5035>:
  base = 224;
  n = 3;
  goto <D.5037>;
  <D.5036>:
  if (c <= 2097151) goto <D.5038>; else goto <D.5039>;
  <D.5038>:
  base = 240;
  n = 4;
  goto <D.5040>;
  <D.5039>:
  if (c <= 67108863) goto <D.5041>; else goto <D.5042>;
  <D.5041>:
  base = 248;
  n = 5;
  goto <D.5043>;
  <D.5042>:
  base = 252;
  n = 6;
  <D.5043>:
  <D.5040>:
  <D.5037>:
  <D.5034>:
  n.0 = (unsigned int) n;
  if (n.0 > outleft) goto <D.5045>; else goto <D.5046>;
  <D.5045>:
  D.5047 = __errno_location ();
  *D.5047 = 7;
  D.5031 = -1;
  return D.5031;
  <D.5046>:
  i = n + -1;
  goto <D.4788>;
  <D.4787>:
  i.1 = (sizetype) i;
  D.5049 = outptr + i.1;
  D.5030 = (unsigned char) c;
  D.5050 = D.5030 & 63;
  D.5051 = D.5050 | 128;
  *D.5049 = D.5051;
  c = c >> 6;
  i = i + -1;
  <D.4788>:
  if (i > 0) goto <D.4787>; else goto <D.4789>;
  <D.4789>:
  D.5030 = (unsigned char) c;
  D.5052 = (unsigned char) base;
  D.5053 = D.5030 | D.5052;
  *outptr = D.5053;
  D.5031 = n;
  return D.5031;
}


decode_utf8 (char * inbuf, size_t inleft, gunichar * outchar)
{
  unsigned char D.5055;
  int D.5058;
  int * D.5061;
  unsigned int n.2;
  unsigned int D.5080;
  unsigned char D.5081;
  unsigned int D.5082;
  unsigned char * inptr;
  gunichar u;
  int n;
  int i;

  inptr = inbuf;
  D.5055 = *inptr;
  u = (gunichar) D.5055;
  if (u <= 127) goto <D.5056>; else goto <D.5057>;
  <D.5056>:
  *outchar = u;
  D.5058 = 1;
  return D.5058;
  <D.5057>:
  if (u <= 193) goto <D.5059>; else goto <D.5060>;
  <D.5059>:
  D.5061 = __errno_location ();
  *D.5061 = 88;
  D.5058 = -1;
  return D.5058;
  <D.5060>:
  if (u <= 223) goto <D.5062>; else goto <D.5063>;
  <D.5062>:
  u = u & 31;
  n = 2;
  goto <D.5064>;
  <D.5063>:
  if (u <= 239) goto <D.5065>; else goto <D.5066>;
  <D.5065>:
  u = u & 15;
  n = 3;
  goto <D.5067>;
  <D.5066>:
  if (u <= 247) goto <D.5068>; else goto <D.5069>;
  <D.5068>:
  u = u & 7;
  n = 4;
  goto <D.5070>;
  <D.5069>:
  if (u <= 251) goto <D.5071>; else goto <D.5072>;
  <D.5071>:
  u = u & 3;
  n = 5;
  goto <D.5073>;
  <D.5072>:
  if (u <= 253) goto <D.5074>; else goto <D.5075>;
  <D.5074>:
  u = u & 1;
  n = 6;
  goto <D.5076>;
  <D.5075>:
  D.5061 = __errno_location ();
  *D.5061 = 88;
  D.5058 = -1;
  return D.5058;
  <D.5076>:
  <D.5073>:
  <D.5070>:
  <D.5067>:
  <D.5064>:
  n.2 = (unsigned int) n;
  if (n.2 > inleft) goto <D.5078>; else goto <D.5079>;
  <D.5078>:
  D.5061 = __errno_location ();
  *D.5061 = 22;
  D.5058 = -1;
  return D.5058;
  <D.5079>:
  i = 1;
  goto <D.4776>;
  <D.4775>:
  D.5080 = u << 6;
  inptr = inptr + 1;
  D.5055 = *inptr;
  D.5081 = D.5055 ^ 128;
  D.5082 = (unsigned int) D.5081;
  u = D.5080 | D.5082;
  i = i + 1;
  <D.4776>:
  if (i < n) goto <D.4775>; else goto <D.4777>;
  <D.4777>:
  *outchar = u;
  D.5058 = n;
  return D.5058;
}


encode_utf16le (gunichar c, char * outbuf, size_t outleft)
{
  int * D.5088;
  int D.5089;
  unsigned char D.5090;
  unsigned char * D.5091;
  unsigned int D.5092;
  unsigned char D.5093;
  unsigned int D.5096;
  short unsigned int D.5097;
  unsigned char D.5098;
  short unsigned int D.5099;
  unsigned char D.5100;
  short unsigned int D.5101;
  short unsigned int D.5102;
  unsigned char * D.5103;
  unsigned char * D.5104;
  unsigned char * outptr;
  gunichar2 ch;
  gunichar c2;

  outptr = outbuf;
  if (c <= 65535) goto <D.5084>; else goto <D.5085>;
  <D.5084>:
  if (outleft <= 1) goto <D.5086>; else goto <D.5087>;
  <D.5086>:
  D.5088 = __errno_location ();
  *D.5088 = 7;
  D.5089 = -1;
  return D.5089;
  <D.5087>:
  D.5090 = (unsigned char) c;
  *outptr = D.5090;
  D.5091 = outptr + 1;
  D.5092 = c >> 8;
  D.5093 = (unsigned char) D.5092;
  *D.5091 = D.5093;
  D.5089 = 2;
  return D.5089;
  <D.5085>:
  if (outleft <= 3) goto <D.5094>; else goto <D.5095>;
  <D.5094>:
  D.5088 = __errno_location ();
  *D.5088 = 7;
  D.5089 = -1;
  return D.5089;
  <D.5095>:
  c2 = c + 4294901760;
  D.5096 = c2 >> 10;
  D.5097 = (short unsigned int) D.5096;
  ch = D.5097 + 55296;
  D.5098 = (unsigned char) ch;
  *outptr = D.5098;
  D.5091 = outptr + 1;
  D.5099 = ch >> 8;
  D.5100 = (unsigned char) D.5099;
  *D.5091 = D.5100;
  D.5101 = (short unsigned int) c2;
  D.5102 = D.5101 & 1023;
  ch = D.5102 + 56320;
  D.5103 = outptr + 2;
  D.5098 = (unsigned char) ch;
  *D.5103 = D.5098;
  D.5104 = outptr + 3;
  D.5099 = ch >> 8;
  D.5100 = (unsigned char) D.5099;
  *D.5104 = D.5100;
  D.5089 = 4;
  return D.5089;
}


decode_utf16le (char * inbuf, size_t inleft, gunichar * outchar)
{
  int * D.5108;
  int D.5109;
  unsigned char * D.5110;
  unsigned char D.5111;
  int D.5112;
  int D.5113;
  unsigned char D.5114;
  int D.5115;
  int D.5116;
  unsigned char * D.5123;
  unsigned char D.5124;
  int D.5125;
  int D.5126;
  signed short D.5127;
  unsigned char * D.5128;
  unsigned char D.5129;
  signed short D.5130;
  signed short D.5131;
  short unsigned int D.5132;
  unsigned int D.5135;
  unsigned int D.5136;
  unsigned int D.5137;
  unsigned int D.5138;
  unsigned char * inptr;
  gunichar2 c;
  gunichar u;

  inptr = inbuf;
  if (inleft <= 1) goto <D.5106>; else goto <D.5107>;
  <D.5106>:
  D.5108 = __errno_location ();
  *D.5108 = 22;
  D.5109 = -1;
  return D.5109;
  <D.5107>:
  D.5110 = inptr + 1;
  D.5111 = *D.5110;
  D.5112 = (int) D.5111;
  D.5113 = D.5112 << 8;
  D.5114 = *inptr;
  D.5115 = (int) D.5114;
  D.5116 = D.5113 | D.5115;
  u = (gunichar) D.5116;
  if (u <= 55295) goto <D.5117>; else goto <D.5118>;
  <D.5117>:
  *outchar = u;
  D.5109 = 2;
  return D.5109;
  <D.5118>:
  if (u <= 56319) goto <D.5119>; else goto <D.5120>;
  <D.5119>:
  if (inleft <= 3) goto <D.5121>; else goto <D.5122>;
  <D.5121>:
  D.5108 = __errno_location ();
  *D.5108 = 22;
  D.5109 = -2;
  return D.5109;
  <D.5122>:
  D.5123 = inptr + 3;
  D.5124 = *D.5123;
  D.5125 = (int) D.5124;
  D.5126 = D.5125 << 8;
  D.5127 = (signed short) D.5126;
  D.5128 = inptr + 2;
  D.5129 = *D.5128;
  D.5130 = (signed short) D.5129;
  D.5131 = D.5127 | D.5130;
  c = (gunichar2) D.5131;
  D.5132 = c + 9216;
  if (D.5132 > 1023) goto <D.5133>; else goto <D.5134>;
  <D.5133>:
  D.5108 = __errno_location ();
  *D.5108 = 88;
  D.5109 = -2;
  return D.5109;
  <D.5134>:
  D.5135 = u + 4294912000;
  D.5136 = D.5135 << 10;
  D.5137 = (unsigned int) c;
  D.5138 = D.5136 + D.5137;
  u = D.5138 + 9216;
  *outchar = u;
  D.5109 = 4;
  return D.5109;
  <D.5120>:
  if (u <= 57343) goto <D.5139>; else goto <D.5140>;
  <D.5139>:
  D.5108 = __errno_location ();
  *D.5108 = 88;
  D.5109 = -1;
  return D.5109;
  <D.5140>:
  *outchar = u;
  D.5109 = 2;
  return D.5109;
}


encode_utf16be (gunichar c, char * outbuf, size_t outleft)
{
  int * D.5146;
  int D.5147;
  unsigned int D.5148;
  unsigned char D.5149;
  unsigned char * D.5150;
  unsigned char D.5151;
  unsigned int D.5154;
  short unsigned int D.5155;
  short unsigned int D.5156;
  unsigned char D.5157;
  unsigned char D.5158;
  short unsigned int D.5159;
  short unsigned int D.5160;
  unsigned char * D.5161;
  unsigned char * D.5162;
  unsigned char * outptr;
  gunichar2 ch;
  gunichar c2;

  outptr = outbuf;
  if (c <= 65535) goto <D.5142>; else goto <D.5143>;
  <D.5142>:
  if (outleft <= 1) goto <D.5144>; else goto <D.5145>;
  <D.5144>:
  D.5146 = __errno_location ();
  *D.5146 = 7;
  D.5147 = -1;
  return D.5147;
  <D.5145>:
  D.5148 = c >> 8;
  D.5149 = (unsigned char) D.5148;
  *outptr = D.5149;
  D.5150 = outptr + 1;
  D.5151 = (unsigned char) c;
  *D.5150 = D.5151;
  D.5147 = 2;
  return D.5147;
  <D.5143>:
  if (outleft <= 3) goto <D.5152>; else goto <D.5153>;
  <D.5152>:
  D.5146 = __errno_location ();
  *D.5146 = 7;
  D.5147 = -1;
  return D.5147;
  <D.5153>:
  c2 = c + 4294901760;
  D.5154 = c2 >> 10;
  D.5155 = (short unsigned int) D.5154;
  ch = D.5155 + 55296;
  D.5156 = ch >> 8;
  D.5157 = (unsigned char) D.5156;
  *outptr = D.5157;
  D.5150 = outptr + 1;
  D.5158 = (unsigned char) ch;
  *D.5150 = D.5158;
  D.5159 = (short unsigned int) c2;
  D.5160 = D.5159 & 1023;
  ch = D.5160 + 56320;
  D.5161 = outptr + 2;
  D.5156 = ch >> 8;
  D.5157 = (unsigned char) D.5156;
  *D.5161 = D.5157;
  D.5162 = outptr + 3;
  D.5158 = (unsigned char) ch;
  *D.5162 = D.5158;
  D.5147 = 4;
  return D.5147;
}


decode_utf16be (char * inbuf, size_t inleft, gunichar * outchar)
{
  int * D.5166;
  int D.5167;
  unsigned char D.5168;
  int D.5169;
  int D.5170;
  unsigned char * D.5171;
  unsigned char D.5172;
  int D.5173;
  int D.5174;
  unsigned char * D.5181;
  unsigned char D.5182;
  int D.5183;
  int D.5184;
  signed short D.5185;
  unsigned char * D.5186;
  unsigned char D.5187;
  signed short D.5188;
  signed short D.5189;
  short unsigned int D.5190;
  unsigned int D.5193;
  unsigned int D.5194;
  unsigned int D.5195;
  unsigned int D.5196;
  unsigned char * inptr;
  gunichar2 c;
  gunichar u;

  inptr = inbuf;
  if (inleft <= 1) goto <D.5164>; else goto <D.5165>;
  <D.5164>:
  D.5166 = __errno_location ();
  *D.5166 = 22;
  D.5167 = -1;
  return D.5167;
  <D.5165>:
  D.5168 = *inptr;
  D.5169 = (int) D.5168;
  D.5170 = D.5169 << 8;
  D.5171 = inptr + 1;
  D.5172 = *D.5171;
  D.5173 = (int) D.5172;
  D.5174 = D.5170 | D.5173;
  u = (gunichar) D.5174;
  if (u <= 55295) goto <D.5175>; else goto <D.5176>;
  <D.5175>:
  *outchar = u;
  D.5167 = 2;
  return D.5167;
  <D.5176>:
  if (u <= 56319) goto <D.5177>; else goto <D.5178>;
  <D.5177>:
  if (inleft <= 3) goto <D.5179>; else goto <D.5180>;
  <D.5179>:
  D.5166 = __errno_location ();
  *D.5166 = 22;
  D.5167 = -2;
  return D.5167;
  <D.5180>:
  D.5181 = inptr + 2;
  D.5182 = *D.5181;
  D.5183 = (int) D.5182;
  D.5184 = D.5183 << 8;
  D.5185 = (signed short) D.5184;
  D.5186 = inptr + 3;
  D.5187 = *D.5186;
  D.5188 = (signed short) D.5187;
  D.5189 = D.5185 | D.5188;
  c = (gunichar2) D.5189;
  D.5190 = c + 9216;
  if (D.5190 > 1023) goto <D.5191>; else goto <D.5192>;
  <D.5191>:
  D.5166 = __errno_location ();
  *D.5166 = 88;
  D.5167 = -2;
  return D.5167;
  <D.5192>:
  D.5193 = u + 4294912000;
  D.5194 = D.5193 << 10;
  D.5195 = (unsigned int) c;
  D.5196 = D.5194 + D.5195;
  u = D.5196 + 9216;
  *outchar = u;
  D.5167 = 4;
  return D.5167;
  <D.5178>:
  if (u <= 57343) goto <D.5197>; else goto <D.5198>;
  <D.5197>:
  D.5166 = __errno_location ();
  *D.5166 = 88;
  D.5167 = -1;
  return D.5167;
  <D.5198>:
  *outchar = u;
  D.5167 = 2;
  return D.5167;
}


encode_utf32le (gunichar c, char * outbuf, size_t outleft)
{
  int * D.5202;
  int D.5203;
  unsigned char D.5204;
  unsigned char * D.5205;
  unsigned int D.5206;
  unsigned char D.5207;
  unsigned char * D.5208;
  unsigned int D.5209;
  unsigned char D.5210;
  unsigned char * D.5211;
  unsigned int D.5212;
  unsigned char D.5213;
  unsigned char * outptr;

  outptr = outbuf;
  if (outleft <= 3) goto <D.5200>; else goto <D.5201>;
  <D.5200>:
  D.5202 = __errno_location ();
  *D.5202 = 7;
  D.5203 = -1;
  return D.5203;
  <D.5201>:
  D.5204 = (unsigned char) c;
  *outptr = D.5204;
  D.5205 = outptr + 1;
  D.5206 = c >> 8;
  D.5207 = (unsigned char) D.5206;
  *D.5205 = D.5207;
  D.5208 = outptr + 2;
  D.5209 = c >> 16;
  D.5210 = (unsigned char) D.5209;
  *D.5208 = D.5210;
  D.5211 = outptr + 3;
  D.5212 = c >> 24;
  D.5213 = (unsigned char) D.5212;
  *D.5211 = D.5213;
  D.5203 = 4;
  return D.5203;
}


decode_utf32le (char * inbuf, size_t inleft, gunichar * outchar)
{
  int * D.5217;
  int D.5218;
  unsigned char * D.5219;
  unsigned char D.5220;
  int D.5221;
  int D.5222;
  unsigned char * D.5223;
  unsigned char D.5224;
  int D.5225;
  int D.5226;
  int D.5227;
  unsigned char * D.5228;
  unsigned char D.5229;
  int D.5230;
  int D.5231;
  int D.5232;
  unsigned char D.5233;
  int D.5234;
  int D.5235;
  unsigned int D.5236;
  unsigned char * inptr;
  gunichar c;

  inptr = inbuf;
  if (inleft <= 3) goto <D.5215>; else goto <D.5216>;
  <D.5215>:
  D.5217 = __errno_location ();
  *D.5217 = 22;
  D.5218 = -1;
  return D.5218;
  <D.5216>:
  D.5219 = inptr + 3;
  D.5220 = *D.5219;
  D.5221 = (int) D.5220;
  D.5222 = D.5221 << 24;
  D.5223 = inptr + 2;
  D.5224 = *D.5223;
  D.5225 = (int) D.5224;
  D.5226 = D.5225 << 16;
  D.5227 = D.5222 | D.5226;
  D.5228 = inptr + 1;
  D.5229 = *D.5228;
  D.5230 = (int) D.5229;
  D.5231 = D.5230 << 8;
  D.5232 = D.5227 | D.5231;
  D.5233 = *inptr;
  D.5234 = (int) D.5233;
  D.5235 = D.5232 | D.5234;
  c = (gunichar) D.5235;
  D.5236 = c + 4294912000;
  if (D.5236 <= 2047) goto <D.5237>; else goto <D.5238>;
  <D.5237>:
  D.5217 = __errno_location ();
  *D.5217 = 88;
  D.5218 = -1;
  return D.5218;
  <D.5238>:
  if (c > 1114111) goto <D.5239>; else goto <D.5240>;
  <D.5239>:
  D.5217 = __errno_location ();
  *D.5217 = 88;
  D.5218 = -1;
  return D.5218;
  <D.5240>:
  *outchar = c;
  D.5218 = 4;
  return D.5218;
}


encode_utf32be (gunichar c, char * outbuf, size_t outleft)
{
  int * D.5244;
  int D.5245;
  unsigned int D.5246;
  unsigned char D.5247;
  unsigned char * D.5248;
  unsigned int D.5249;
  unsigned char D.5250;
  unsigned char * D.5251;
  unsigned int D.5252;
  unsigned char D.5253;
  unsigned char * D.5254;
  unsigned char D.5255;
  unsigned char * outptr;

  outptr = outbuf;
  if (outleft <= 3) goto <D.5242>; else goto <D.5243>;
  <D.5242>:
  D.5244 = __errno_location ();
  *D.5244 = 7;
  D.5245 = -1;
  return D.5245;
  <D.5243>:
  D.5246 = c >> 24;
  D.5247 = (unsigned char) D.5246;
  *outptr = D.5247;
  D.5248 = outptr + 1;
  D.5249 = c >> 16;
  D.5250 = (unsigned char) D.5249;
  *D.5248 = D.5250;
  D.5251 = outptr + 2;
  D.5252 = c >> 8;
  D.5253 = (unsigned char) D.5252;
  *D.5251 = D.5253;
  D.5254 = outptr + 3;
  D.5255 = (unsigned char) c;
  *D.5254 = D.5255;
  D.5245 = 4;
  return D.5245;
}


decode_utf32be (char * inbuf, size_t inleft, gunichar * outchar)
{
  int * D.5259;
  int D.5260;
  unsigned char D.5261;
  int D.5262;
  int D.5263;
  unsigned char * D.5264;
  unsigned char D.5265;
  int D.5266;
  int D.5267;
  int D.5268;
  unsigned char * D.5269;
  unsigned char D.5270;
  int D.5271;
  int D.5272;
  int D.5273;
  unsigned char * D.5274;
  unsigned char D.5275;
  int D.5276;
  int D.5277;
  unsigned int D.5278;
  unsigned char * inptr;
  gunichar c;

  inptr = inbuf;
  if (inleft <= 3) goto <D.5257>; else goto <D.5258>;
  <D.5257>:
  D.5259 = __errno_location ();
  *D.5259 = 22;
  D.5260 = -1;
  return D.5260;
  <D.5258>:
  D.5261 = *inptr;
  D.5262 = (int) D.5261;
  D.5263 = D.5262 << 24;
  D.5264 = inptr + 1;
  D.5265 = *D.5264;
  D.5266 = (int) D.5265;
  D.5267 = D.5266 << 16;
  D.5268 = D.5263 | D.5267;
  D.5269 = inptr + 2;
  D.5270 = *D.5269;
  D.5271 = (int) D.5270;
  D.5272 = D.5271 << 8;
  D.5273 = D.5268 | D.5272;
  D.5274 = inptr + 3;
  D.5275 = *D.5274;
  D.5276 = (int) D.5275;
  D.5277 = D.5273 | D.5276;
  c = (gunichar) D.5277;
  D.5278 = c + 4294912000;
  if (D.5278 <= 2047) goto <D.5279>; else goto <D.5280>;
  <D.5279>:
  D.5259 = __errno_location ();
  *D.5259 = 88;
  D.5260 = -1;
  return D.5260;
  <D.5280>:
  if (c > 1114111) goto <D.5281>; else goto <D.5282>;
  <D.5281>:
  D.5259 = __errno_location ();
  *D.5259 = 88;
  D.5260 = -1;
  return D.5260;
  <D.5282>:
  *outchar = c;
  D.5260 = 4;
  return D.5260;
}


encode_latin1 (gunichar c, char * outbuf, size_t outleft)
{
  int * D.5286;
  int D.5287;
  char D.5290;

  if (outleft == 0) goto <D.5284>; else goto <D.5285>;
  <D.5284>:
  D.5286 = __errno_location ();
  *D.5286 = 7;
  D.5287 = -1;
  return D.5287;
  <D.5285>:
  if (c > 255) goto <D.5288>; else goto <D.5289>;
  <D.5288>:
  D.5286 = __errno_location ();
  *D.5286 = 88;
  D.5287 = -1;
  return D.5287;
  <D.5289>:
  D.5290 = (char) c;
  *outbuf = D.5290;
  D.5287 = 1;
  return D.5287;
}


decode_latin1 (char * inbuf, size_t inleft, gunichar * outchar)
{
  char D.5292;
  unsigned char D.5293;
  unsigned int D.5294;
  int D.5295;

  D.5292 = *inbuf;
  D.5293 = (unsigned char) D.5292;
  D.5294 = (unsigned int) D.5293;
  *outchar = D.5294;
  D.5295 = 1;
  return D.5295;
}


monoeg_g_iconv_close (struct _GIConv * cd)
{
  void * D.5297;
  int D.5300;

  D.5297 = cd->cd;
  if (D.5297 != 4294967295B) goto <D.5298>; else goto <D.5299>;
  <D.5298>:
  D.5297 = cd->cd;
  iconv_close (D.5297);
  <D.5299>:
  monoeg_g_free (cd);
  D.5300 = 0;
  return D.5300;
}


monoeg_g_iconv (struct _GIConv * cd, gchar * * inbytes, gsize * inbytesleft, gchar * * outbytes, gsize * outbytesleft)
{
  void * D.5302;
  unsigned int n_inleft.3;
  unsigned int n_outleft.4;
  gsize D.5313;
  gsize iftmp.5;
  char * iftmp.6;
  unsigned int c.7;
  unsigned int c.8;
  int (*<Tdc6>) (char *, size_t, gunichar *) D.5328;
  unsigned int rc.9;
  sizetype rc.10;
  int (*<Tdcb>) (gunichar, char *, size_t) D.5332;
  gsize iftmp.11;
  gsize inleft;
  gsize outleft;
  char * inptr;
  char * outptr;
  gunichar c;
  int rc;
  void encode = <<< error >>>;

  try
    {
      rc = 0;
      D.5302 = cd->cd;
      if (D.5302 != 4294967295B) goto <D.5303>; else goto <D.5304>;
      <D.5303>:
      {
        size_t * outleftptr;
        size_t * inleftptr;
        size_t n_outleft;
        size_t n_inleft;

        try
          {
            if (inbytesleft != 0B) goto <D.5305>; else goto <D.5306>;
            <D.5305>:
            n_inleft.3 = *inbytesleft;
            n_inleft = n_inleft.3;
            inleftptr = &n_inleft;
            goto <D.5308>;
            <D.5306>:
            inleftptr = 0B;
            <D.5308>:
            if (outbytesleft != 0B) goto <D.5309>; else goto <D.5310>;
            <D.5309>:
            n_outleft.4 = *outbytesleft;
            n_outleft = n_outleft.4;
            outleftptr = &n_outleft;
            goto <D.5312>;
            <D.5310>:
            outleftptr = 0B;
            <D.5312>:
            D.5302 = cd->cd;
            D.5313 = iconv (D.5302, inbytes, inleftptr, outbytes, outleftptr);
            return D.5313;
          }
        finally
          {
            n_outleft = {CLOBBER};
            n_inleft = {CLOBBER};
          }
      }
      <D.5304>:
      if (outbytes == 0B) goto <D.5314>; else goto <D.5316>;
      <D.5316>:
      if (outbytesleft == 0B) goto <D.5314>; else goto <D.5315>;
      <D.5314>:
      cd->c = 4294967295;
      D.5313 = 0;
      return D.5313;
      <D.5315>:
      if (inbytesleft != 0B) goto <D.5318>; else goto <D.5319>;
      <D.5318>:
      iftmp.5 = *inbytesleft;
      goto <D.5320>;
      <D.5319>:
      iftmp.5 = 0;
      <D.5320>:
      inleft = iftmp.5;
      if (inbytes != 0B) goto <D.5322>; else goto <D.5323>;
      <D.5322>:
      iftmp.6 = *inbytes;
      goto <D.5324>;
      <D.5323>:
      iftmp.6 = 0B;
      <D.5324>:
      inptr = iftmp.6;
      outleft = *outbytesleft;
      outptr = *outbytes;
      c.7 = cd->c;
      c = c.7;
      c.8 = c;
      if (c.8 != 4294967295) goto encode; else goto <D.5327>;
      <D.5327>:
      goto <D.4707>;
      <D.4706>:
      D.5328 = cd->decode;
      rc = D.5328 (inptr, inleft, &c);
      if (rc < 0) goto <D.4705>; else goto <D.5329>;
      <D.5329>:
      rc.9 = (unsigned int) rc;
      inleft = inleft - rc.9;
      rc.10 = (sizetype) rc;
      inptr = inptr + rc.10;
      encode:
      D.5332 = cd->encode;
      c.8 = c;
      rc = D.5332 (c.8, outptr, outleft);
      if (rc < 0) goto <D.4705>; else goto <D.5333>;
      <D.5333>:
      c = 4294967295;
      rc.9 = (unsigned int) rc;
      outleft = outleft - rc.9;
      rc.10 = (sizetype) rc;
      outptr = outptr + rc.10;
      <D.4707>:
      if (inleft != 0) goto <D.4706>; else goto <D.4705>;
      <D.4705>:
      if (inbytesleft != 0B) goto <D.5334>; else goto <D.5335>;
      <D.5334>:
      *inbytesleft = inleft;
      <D.5335>:
      if (inbytes != 0B) goto <D.5336>; else goto <D.5337>;
      <D.5336>:
      *inbytes = inptr;
      <D.5337>:
      *outbytesleft = outleft;
      *outbytes = outptr;
      c.8 = c;
      cd->c = c.8;
      if (rc < 0) goto <D.5339>; else goto <D.5340>;
      <D.5339>:
      iftmp.11 = 4294967295;
      goto <D.5341>;
      <D.5340>:
      iftmp.11 = 0;
      <D.5341>:
      D.5313 = iftmp.11;
      return D.5313;
    }
  finally
    {
      c = {CLOBBER};
    }
}


monoeg_g_convert_error_quark ()
{
  void * D.5345;

  D.5345 = error_quark;
  return D.5345;
}


monoeg_g_convert (const gchar * str, gssize len, const gchar * to_charset, const gchar * from_charset, gsize * bytes_read, gsize * bytes_written, struct GError * * err)
{
  gchar * D.5349;
  void * D.5356;
  size_t iftmp.12;
  unsigned int inleft.13;
  unsigned int D.5366;
  int * D.5372;
  int D.5373;
  unsigned int D.5374;
  char * outbuf.14;
  int outbuf.15;
  int result.16;
  int D.5378;
  unsigned int outleft.17;
  unsigned int outleft.18;
  char * outbuf.19;
  void * D.5385;
  const gchar * D.5386;
  char * inbuf.20;
  int inbuf.21;
  int str.22;
  int D.5392;
  unsigned int D.5393;
  void * D.5396;
  const gchar * D.5397;
  unsigned int D.5406;
  gsize outsize;
  gsize outused;
  gsize outleft;
  gsize inleft;
  gsize grow;
  gsize rc;
  char * result;
  char * outbuf;
  char * inbuf;
  gboolean flush;
  gboolean done;
  struct _GIConv * cd;

  try
    {
      flush = 0;
      done = 0;
      if (str == 0B) goto <D.5347>; else goto <D.5348>;
      <D.5347>:
      monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "giconv.c", 669, "str != NULL");
      D.5349 = 0B;
      return D.5349;
      <D.5348>:
      if (to_charset == 0B) goto <D.5350>; else goto <D.5351>;
      <D.5350>:
      monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "giconv.c", 670, "to_charset != NULL");
      D.5349 = 0B;
      return D.5349;
      <D.5351>:
      if (from_charset == 0B) goto <D.5352>; else goto <D.5353>;
      <D.5352>:
      monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "giconv.c", 671, "from_charset != NULL");
      D.5349 = 0B;
      return D.5349;
      <D.5353>:
      cd = monoeg_g_iconv_open (to_charset, from_charset);
      if (cd == 4294967295B) goto <D.5354>; else goto <D.5355>;
      <D.5354>:
      D.5356 = monoeg_g_convert_error_quark ();
      monoeg_g_set_error (err, D.5356, 0, "Conversion from %s to %s not supported.", from_charset, to_charset);
      if (bytes_written != 0B) goto <D.5357>; else goto <D.5358>;
      <D.5357>:
      *bytes_written = 0;
      <D.5358>:
      if (bytes_read != 0B) goto <D.5359>; else goto <D.5360>;
      <D.5359>:
      *bytes_read = 0;
      <D.5360>:
      D.5349 = 0B;
      return D.5349;
      <D.5355>:
      if (len < 0) goto <D.5362>; else goto <D.5363>;
      <D.5362>:
      iftmp.12 = strlen (str);
      goto <D.5364>;
      <D.5363>:
      iftmp.12 = (size_t) len;
      <D.5364>:
      inleft = iftmp.12;
      inbuf = str;
      inleft.13 = inleft;
      outsize = MAX_EXPR <inleft.13, 8>;
      outleft = outsize;
      D.5366 = outsize + 4;
      result = monoeg_malloc (D.5366);
      outbuf = result;
      <D.4831>:
      if (flush == 0) goto <D.5367>; else goto <D.5368>;
      <D.5367>:
      rc = monoeg_g_iconv (cd, &inbuf, &inleft, &outbuf, &outleft);
      goto <D.5369>;
      <D.5368>:
      rc = monoeg_g_iconv (cd, 0B, 0B, &outbuf, &outleft);
      <D.5369>:
      if (rc == 4294967295) goto <D.5370>; else goto <D.5371>;
      <D.5370>:
      D.5372 = __errno_location ();
      D.5373 = *D.5372;
      switch (D.5373) <default: <D.4829>, case 7: <D.4825>, case 22: <D.4827>, case 88: <D.4828>>
      <D.4825>:
      inleft.13 = inleft;
      D.5374 = MAX_EXPR <inleft.13, 8>;
      grow = D.5374 << 1;
      outbuf.14 = outbuf;
      outbuf.15 = (int) outbuf.14;
      result.16 = (int) result;
      D.5378 = outbuf.15 - result.16;
      outused = (gsize) D.5378;
      outsize = outsize + grow;
      outleft.17 = outleft;
      outleft.18 = outleft.17 + grow;
      outleft = outleft.18;
      D.5366 = outsize + 4;
      result = monoeg_realloc (result, D.5366);
      outbuf.19 = result + outused;
      outbuf = outbuf.19;
      goto <D.4826>;
      <D.4827>:
      if (flush != 0) goto <D.5382>; else goto <D.5383>;
      <D.5382>:
      done = 1;
      goto <D.5384>;
      <D.5383>:
      flush = 1;
      <D.5384>:
      goto <D.4826>;
      <D.4828>:
      D.5385 = monoeg_g_convert_error_quark ();
      D.5372 = __errno_location ();
      D.5373 = *D.5372;
      D.5386 = monoeg_g_strerror (D.5373);
      monoeg_g_set_error (err, D.5385, 1, "%s", D.5386);
      if (bytes_read != 0B) goto <D.5387>; else goto <D.5388>;
      <D.5387>:
      inbuf.20 = inbuf;
      inbuf.21 = (int) inbuf.20;
      str.22 = (int) str;
      D.5392 = inbuf.21 - str.22;
      D.5393 = (unsigned int) D.5392;
      *bytes_read = D.5393;
      <D.5388>:
      if (bytes_written != 0B) goto <D.5394>; else goto <D.5395>;
      <D.5394>:
      *bytes_written = 0;
      <D.5395>:
      monoeg_g_iconv_close (cd);
      monoeg_g_free (result);
      D.5349 = 0B;
      return D.5349;
      <D.4829>:
      D.5396 = monoeg_g_convert_error_quark ();
      D.5372 = __errno_location ();
      D.5373 = *D.5372;
      D.5397 = monoeg_g_strerror (D.5373);
      monoeg_g_set_error (err, D.5396, 2, "%s", D.5397);
      if (bytes_written != 0B) goto <D.5398>; else goto <D.5399>;
      <D.5398>:
      *bytes_written = 0;
      <D.5399>:
      if (bytes_read != 0B) goto <D.5400>; else goto <D.5401>;
      <D.5400>:
      *bytes_read = 0;
      <D.5401>:
      monoeg_g_iconv_close (cd);
      monoeg_g_free (result);
      D.5349 = 0B;
      return D.5349;
      <D.4826>:
      goto <D.5402>;
      <D.5371>:
      if (flush != 0) goto <D.4830>; else goto <D.5403>;
      <D.5403>:
      flush = 1;
      <D.5402>:
      if (done == 0) goto <D.4831>; else goto <D.4830>;
      <D.4830>:
      monoeg_g_iconv_close (cd);
      outbuf.14 = outbuf;
      memset (outbuf.14, 0, 4);
      if (bytes_written != 0B) goto <D.5404>; else goto <D.5405>;
      <D.5404>:
      outbuf.14 = outbuf;
      outbuf.15 = (int) outbuf.14;
      result.16 = (int) result;
      D.5378 = outbuf.15 - result.16;
      D.5406 = (unsigned int) D.5378;
      *bytes_written = D.5406;
      <D.5405>:
      if (bytes_read != 0B) goto <D.5407>; else goto <D.5408>;
      <D.5407>:
      inbuf.20 = inbuf;
      inbuf.21 = (int) inbuf.20;
      str.22 = (int) str;
      D.5392 = inbuf.21 - str.22;
      D.5393 = (unsigned int) D.5392;
      *bytes_read = D.5393;
      <D.5408>:
      D.5349 = result;
      return D.5349;
    }
  finally
    {
      outleft = {CLOBBER};
      inleft = {CLOBBER};
      outbuf = {CLOBBER};
      inbuf = {CLOBBER};
    }
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.5413;
  int D.5418;
  void * D.5420;
  unsigned int D.5421;

  D.5413 = __builtin_constant_p (__len);
  if (D.5413 != 0) goto <D.5414>; else goto <D.5415>;
  <D.5414>:
  if (__len == 0) goto <D.5416>; else goto <D.5417>;
  <D.5416>:
  D.5418 = __builtin_constant_p (__ch);
  if (D.5418 == 0) goto <D.5411>; else goto <D.5419>;
  <D.5419>:
  if (__ch != 0) goto <D.5411>; else goto <D.5412>;
  <D.5411>:
  __warn_memset_zero_len ();
  D.5420 = __dest;
  return D.5420;
  <D.5412>:
  <D.5417>:
  <D.5415>:
  D.5421 = __builtin_object_size (__dest, 0);
  D.5420 = __builtin___memset_chk (__dest, __ch, __len, D.5421);
  return D.5420;
}


monoeg_g_unichar_to_utf8 (gunichar c, gchar * outbuf)
{
  signed int c.23;
  gint D.5442;
  sizetype i.24;
  gchar * D.5446;
  unsigned char D.5447;
  unsigned char D.5448;
  unsigned char D.5449;
  char D.5450;
  unsigned char D.5451;
  unsigned char D.5452;
  char D.5453;
  int base;
  int n;
  int i;

  if (c <= 127) goto <D.5423>; else goto <D.5424>;
  <D.5423>:
  base = 0;
  n = 1;
  goto <D.5425>;
  <D.5424>:
  if (c <= 2047) goto <D.5426>; else goto <D.5427>;
  <D.5426>:
  base = 192;
  n = 2;
  goto <D.5428>;
  <D.5427>:
  if (c <= 65535) goto <D.5429>; else goto <D.5430>;
  <D.5429>:
  base = 224;
  n = 3;
  goto <D.5431>;
  <D.5430>:
  if (c <= 2097151) goto <D.5432>; else goto <D.5433>;
  <D.5432>:
  base = 240;
  n = 4;
  goto <D.5434>;
  <D.5433>:
  if (c <= 67108863) goto <D.5435>; else goto <D.5436>;
  <D.5435>:
  base = 248;
  n = 5;
  goto <D.5437>;
  <D.5436>:
  c.23 = (signed int) c;
  if (c.23 >= 0) goto <D.5439>; else goto <D.5440>;
  <D.5439>:
  base = 252;
  n = 6;
  goto <D.5441>;
  <D.5440>:
  D.5442 = -1;
  return D.5442;
  <D.5441>:
  <D.5437>:
  <D.5434>:
  <D.5431>:
  <D.5428>:
  <D.5425>:
  if (outbuf != 0B) goto <D.5443>; else goto <D.5444>;
  <D.5443>:
  i = n + -1;
  goto <D.4840>;
  <D.4839>:
  i.24 = (sizetype) i;
  D.5446 = outbuf + i.24;
  D.5447 = (unsigned char) c;
  D.5448 = D.5447 & 63;
  D.5449 = D.5448 | 128;
  D.5450 = (char) D.5449;
  *D.5446 = D.5450;
  c = c >> 6;
  i = i + -1;
  <D.4840>:
  if (i > 0) goto <D.4839>; else goto <D.4841>;
  <D.4841>:
  D.5447 = (unsigned char) c;
  D.5451 = (unsigned char) base;
  D.5452 = D.5447 | D.5451;
  D.5453 = (char) D.5452;
  *outbuf = D.5453;
  <D.5444>:
  D.5442 = n;
  return D.5442;
}


monoeg_g_utf8_to_ucs4_fast (const gchar * str, glong len, glong * items_written)
{
  gunichar * D.5457;
  long int D.5460;
  long unsigned int D.5461;
  long unsigned int D.5462;
  gunichar * outptr.25;
  unsigned int D.5464;
  char D.5465;
  unsigned char D.5466;
  int D.5467;
  unsigned char D.5468;
  sizetype D.5469;
  gunichar * outbuf;
  gunichar * outptr;
  char * inptr;
  glong n;
  glong i;

  if (str == 0B) goto <D.5455>; else goto <D.5456>;
  <D.5455>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "giconv.c", 896, "str != NULL");
  D.5457 = 0B;
  return D.5457;
  <D.5456>:
  n = monoeg_g_utf8_strlen (str, len);
  if (items_written != 0B) goto <D.5458>; else goto <D.5459>;
  <D.5458>:
  *items_written = n;
  <D.5459>:
  D.5460 = n + 1;
  D.5461 = (long unsigned int) D.5460;
  D.5462 = D.5461 * 4;
  outbuf = monoeg_malloc (D.5462);
  outptr = outbuf;
  inptr = str;
  i = 0;
  goto <D.4858>;
  <D.4857>:
  outptr.25 = outptr;
  outptr = outptr.25 + 4;
  D.5464 = monoeg_g_utf8_get_char (inptr);
  *outptr.25 = D.5464;
  D.5465 = *inptr;
  D.5466 = (unsigned char) D.5465;
  D.5467 = (int) D.5466;
  D.5468 = g_utf8_jump_table[D.5467];
  D.5469 = (sizetype) D.5468;
  inptr = inptr + D.5469;
  i = i + 1;
  <D.4858>:
  if (i < n) goto <D.4857>; else goto <D.4859>;
  <D.4859>:
  *outptr = 0;
  D.5457 = outbuf;
  return D.5457;
}


monoeg_g_utf8_to_utf16 (const gchar * str, glong len, glong * items_read, glong * items_written, struct GError * * err)
{
  gunichar2 * D.5471;

  D.5471 = eg_utf8_to_utf16_general (str, len, items_read, items_written, 0, err);
  return D.5471;
}


eg_utf8_to_utf16_general (const gchar * str, glong len, glong * items_read, glong * items_written, gboolean include_nuls, struct GError * * err)
{
  gunichar2 * D.5475;
  void * D.5480;
  unsigned int D.5481;
  unsigned int c.26;
  int * D.5489;
  unsigned int u.27;
  unsigned int n.28;
  sizetype n.29;
  int inptr.30;
  int str.31;
  int D.5497;
  long int outlen.32;
  unsigned int D.5501;
  unsigned int D.5502;
  int D.5507;
  unsigned int D.5508;
  unsigned int D.5509;
  int D.5510;
  void * D.5513;
  void * D.5518;
  gunichar2 * outbuf;
  gunichar2 * outptr;
  size_t outlen;
  size_t inleft;
  char * inptr;
  gunichar c;
  int u;
  int n;
  void error = <<< error >>>;

  try
    {
      outlen = 0;
      if (str == 0B) goto <D.5473>; else goto <D.5474>;
      <D.5473>:
      monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "giconv.c", 926, "str != NULL");
      D.5475 = 0B;
      return D.5475;
      <D.5474>:
      if (len < 0) goto <D.5476>; else goto <D.5477>;
      <D.5476>:
      if (include_nuls != 0) goto <D.5478>; else goto <D.5479>;
      <D.5478>:
      D.5480 = monoeg_g_convert_error_quark ();
      monoeg_g_set_error (err, D.5480, 2, "Conversions with embedded nulls must pass the string length");
      D.5475 = 0B;
      return D.5475;
      <D.5479>:
      D.5481 = strlen (str);
      len = (glong) D.5481;
      <D.5477>:
      inptr = str;
      inleft = (size_t) len;
      goto <D.4879>;
      <D.4878>:
      n = decode_utf8 (inptr, inleft, &c);
      if (n < 0) goto error; else goto <D.5482>;
      <D.5482>:
      c.26 = c;
      if (c.26 == 0) goto <D.5484>; else goto <D.5485>;
      <D.5484>:
      if (include_nuls == 0) goto <D.4877>; else goto <D.5486>;
      <D.5486>:
      <D.5485>:
      c.26 = c;
      u = monoeg_unichar_to_utf16 (c.26, 0B);
      if (u < 0) goto <D.5487>; else goto <D.5488>;
      <D.5487>:
      D.5489 = __errno_location ();
      *D.5489 = 88;
      goto error;
      <D.5488>:
      u.27 = (unsigned int) u;
      outlen = outlen + u.27;
      n.28 = (unsigned int) n;
      inleft = inleft - n.28;
      n.29 = (sizetype) n;
      inptr = inptr + n.29;
      <D.4879>:
      if (inleft != 0) goto <D.4878>; else goto <D.4877>;
      <D.4877>:
      if (items_read != 0B) goto <D.5493>; else goto <D.5494>;
      <D.5493>:
      inptr.30 = (int) inptr;
      str.31 = (int) str;
      D.5497 = inptr.30 - str.31;
      *items_read = D.5497;
      <D.5494>:
      if (items_written != 0B) goto <D.5498>; else goto <D.5499>;
      <D.5498>:
      outlen.32 = (long int) outlen;
      *items_written = outlen.32;
      <D.5499>:
      D.5501 = outlen + 1;
      D.5502 = D.5501 * 2;
      outbuf = monoeg_malloc (D.5502);
      outptr = outbuf;
      inptr = str;
      inleft = (size_t) len;
      goto <D.4882>;
      <D.4881>:
      n = decode_utf8 (inptr, inleft, &c);
      if (n < 0) goto <D.4880>; else goto <D.5503>;
      <D.5503>:
      c.26 = c;
      if (c.26 == 0) goto <D.5504>; else goto <D.5505>;
      <D.5504>:
      if (include_nuls == 0) goto <D.4880>; else goto <D.5506>;
      <D.5506>:
      <D.5505>:
      c.26 = c;
      D.5507 = monoeg_unichar_to_utf16 (c.26, outptr);
      D.5508 = (unsigned int) D.5507;
      D.5509 = D.5508 * 2;
      outptr = outptr + D.5509;
      n.28 = (unsigned int) n;
      inleft = inleft - n.28;
      n.29 = (sizetype) n;
      inptr = inptr + n.29;
      <D.4882>:
      if (inleft != 0) goto <D.4881>; else goto <D.4880>;
      <D.4880>:
      *outptr = 0;
      D.5475 = outbuf;
      return D.5475;
      error:
      D.5489 = __errno_location ();
      D.5510 = *D.5489;
      if (D.5510 == 88) goto <D.5511>; else goto <D.5512>;
      <D.5511>:
      D.5513 = monoeg_g_convert_error_quark ();
      monoeg_g_set_error (err, D.5513, 1, "Illegal byte sequence encounted in the input.");
      goto <D.5514>;
      <D.5512>:
      if (items_read != 0B) goto <D.5515>; else goto <D.5516>;
      <D.5515>:
      goto <D.5517>;
      <D.5516>:
      D.5518 = monoeg_g_convert_error_quark ();
      monoeg_g_set_error (err, D.5518, 3, "Partial byte sequence encountered in the input.");
      <D.5517>:
      <D.5514>:
      if (items_read != 0B) goto <D.5519>; else goto <D.5520>;
      <D.5519>:
      inptr.30 = (int) inptr;
      str.31 = (int) str;
      D.5497 = inptr.30 - str.31;
      *items_read = D.5497;
      <D.5520>:
      if (items_written != 0B) goto <D.5521>; else goto <D.5522>;
      <D.5521>:
      *items_written = 0;
      <D.5522>:
      D.5475 = 0B;
      return D.5475;
    }
  finally
    {
      c = {CLOBBER};
    }
}


monoeg_unichar_to_utf16 (gunichar c, gunichar2 * outbuf)
{
  short unsigned int D.5529;
  int D.5530;
  unsigned int D.5541;
  short unsigned int D.5542;
  short unsigned int D.5543;
  gunichar2 * D.5544;
  short unsigned int D.5545;
  short unsigned int D.5546;
  short unsigned int D.5547;
  gunichar c2;

  if (c <= 55295) goto <D.5525>; else goto <D.5526>;
  <D.5525>:
  if (outbuf != 0B) goto <D.5527>; else goto <D.5528>;
  <D.5527>:
  D.5529 = (short unsigned int) c;
  *outbuf = D.5529;
  <D.5528>:
  D.5530 = 1;
  return D.5530;
  <D.5526>:
  if (c <= 57343) goto <D.5531>; else goto <D.5532>;
  <D.5531>:
  D.5530 = -1;
  return D.5530;
  <D.5532>:
  if (c <= 65535) goto <D.5533>; else goto <D.5534>;
  <D.5533>:
  if (outbuf != 0B) goto <D.5535>; else goto <D.5536>;
  <D.5535>:
  D.5529 = (short unsigned int) c;
  *outbuf = D.5529;
  <D.5536>:
  D.5530 = 1;
  return D.5530;
  <D.5534>:
  if (c <= 1114111) goto <D.5537>; else goto <D.5538>;
  <D.5537>:
  if (outbuf != 0B) goto <D.5539>; else goto <D.5540>;
  <D.5539>:
  c2 = c + 4294901760;
  D.5541 = c2 >> 10;
  D.5542 = (short unsigned int) D.5541;
  D.5543 = D.5542 + 55296;
  *outbuf = D.5543;
  D.5544 = outbuf + 2;
  D.5545 = (short unsigned int) c2;
  D.5546 = D.5545 & 1023;
  D.5547 = D.5546 + 56320;
  *D.5544 = D.5547;
  <D.5540>:
  D.5530 = 2;
  return D.5530;
  <D.5538>:
  D.5530 = -1;
  return D.5530;
}


eg_utf8_to_utf16_with_nuls (const gchar * str, glong len, glong * items_read, glong * items_written, struct GError * * err)
{
  gunichar2 * D.5549;

  D.5549 = eg_utf8_to_utf16_general (str, len, items_read, items_written, 1, err);
  return D.5549;
}


monoeg_utf8_to_ucs4 (const gchar * str, glong len, glong * items_read, glong * items_written, struct GError * * err)
{
  gunichar * D.5553;
  unsigned int D.5556;
  int * D.5559;
  int D.5560;
  void * D.5563;
  void * D.5566;
  int inptr.33;
  int str.34;
  int D.5571;
  unsigned int c.35;
  unsigned int n.36;
  sizetype n.37;
  unsigned int D.5580;
  long int D.5581;
  unsigned int D.5584;
  gunichar * outptr.38;
  gunichar * outbuf;
  gunichar * outptr;
  size_t outlen;
  size_t inleft;
  char * inptr;
  gunichar c;
  int n;

  try
    {
      outlen = 0;
      if (str == 0B) goto <D.5551>; else goto <D.5552>;
      <D.5551>:
      monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "giconv.c", 1025, "str != NULL");
      D.5553 = 0B;
      return D.5553;
      <D.5552>:
      if (len < 0) goto <D.5554>; else goto <D.5555>;
      <D.5554>:
      D.5556 = strlen (str);
      len = (glong) D.5556;
      <D.5555>:
      inptr = str;
      inleft = (size_t) len;
      goto <D.4913>;
      <D.4912>:
      n = decode_utf8 (inptr, inleft, &c);
      if (n < 0) goto <D.5557>; else goto <D.5558>;
      <D.5557>:
      D.5559 = __errno_location ();
      D.5560 = *D.5559;
      if (D.5560 == 88) goto <D.5561>; else goto <D.5562>;
      <D.5561>:
      D.5563 = monoeg_g_convert_error_quark ();
      monoeg_g_set_error (err, D.5563, 1, "Illegal byte sequence encounted in the input.");
      goto <D.5564>;
      <D.5562>:
      if (items_read != 0B) goto <D.4911>; else goto <D.5565>;
      <D.5565>:
      D.5566 = monoeg_g_convert_error_quark ();
      monoeg_g_set_error (err, D.5566, 3, "Partial byte sequence encountered in the input.");
      <D.5564>:
      if (items_read != 0B) goto <D.5567>; else goto <D.5568>;
      <D.5567>:
      inptr.33 = (int) inptr;
      str.34 = (int) str;
      D.5571 = inptr.33 - str.34;
      *items_read = D.5571;
      <D.5568>:
      if (items_written != 0B) goto <D.5572>; else goto <D.5573>;
      <D.5572>:
      *items_written = 0;
      <D.5573>:
      D.5553 = 0B;
      return D.5553;
      <D.5558>:
      c.35 = c;
      if (c.35 == 0) goto <D.4911>; else goto <D.5575>;
      <D.5575>:
      outlen = outlen + 4;
      n.36 = (unsigned int) n;
      inleft = inleft - n.36;
      n.37 = (sizetype) n;
      inptr = inptr + n.37;
      <D.4913>:
      if (inleft != 0) goto <D.4912>; else goto <D.4911>;
      <D.4911>:
      if (items_written != 0B) goto <D.5578>; else goto <D.5579>;
      <D.5578>:
      D.5580 = outlen / 4;
      D.5581 = (long int) D.5580;
      *items_written = D.5581;
      <D.5579>:
      if (items_read != 0B) goto <D.5582>; else goto <D.5583>;
      <D.5582>:
      inptr.33 = (int) inptr;
      str.34 = (int) str;
      D.5571 = inptr.33 - str.34;
      *items_read = D.5571;
      <D.5583>:
      D.5584 = outlen + 4;
      outbuf = monoeg_malloc (D.5584);
      outptr = outbuf;
      inptr = str;
      inleft = (size_t) len;
      goto <D.4916>;
      <D.4915>:
      n = decode_utf8 (inptr, inleft, &c);
      if (n < 0) goto <D.4914>; else goto <D.5585>;
      <D.5585>:
      c.35 = c;
      if (c.35 == 0) goto <D.4914>; else goto <D.5586>;
      <D.5586>:
      outptr.38 = outptr;
      outptr = outptr.38 + 4;
      c.35 = c;
      *outptr.38 = c.35;
      n.36 = (unsigned int) n;
      inleft = inleft - n.36;
      n.37 = (sizetype) n;
      inptr = inptr + n.37;
      <D.4916>:
      if (inleft != 0) goto <D.4915>; else goto <D.4914>;
      <D.4914>:
      *outptr = 0;
      D.5553 = outbuf;
      return D.5553;
    }
  finally
    {
      c = {CLOBBER};
    }
}


monoeg_g_utf16_to_utf8 (const gunichar2 * str, glong len, glong * items_read, glong * items_written, struct GError * * err)
{
  gchar * D.5592;
  unsigned int len.39;
  unsigned int D.5596;
  const gunichar2 * D.5597;
  short unsigned int D.5598;
  long int D.5599;
  int * D.5606;
  int D.5607;
  void * D.5610;
  void * D.5613;
  int inptr.40;
  int str.41;
  int D.5618;
  int D.5619;
  unsigned int c.42;
  int D.5624;
  unsigned int D.5625;
  unsigned int n.43;
  sizetype n.44;
  long int outlen.45;
  unsigned int D.5633;
  int D.5636;
  sizetype D.5637;
  char * inptr;
  char * outbuf;
  char * outptr;
  size_t outlen;
  size_t inleft;
  gunichar c;
  int n;

  try
    {
      outlen = 0;
      if (str == 0B) goto <D.5590>; else goto <D.5591>;
      <D.5590>:
      monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "giconv.c", 1096, "str != NULL");
      D.5592 = 0B;
      return D.5592;
      <D.5591>:
      if (len < 0) goto <D.5593>; else goto <D.5594>;
      <D.5593>:
      len = 0;
      goto <D.4932>;
      <D.4931>:
      len = len + 1;
      <D.4932>:
      len.39 = (unsigned int) len;
      D.5596 = len.39 * 2;
      D.5597 = str + D.5596;
      D.5598 = *D.5597;
      if (D.5598 != 0) goto <D.4931>; else goto <D.4933>;
      <D.4933>:
      <D.5594>:
      inptr = str;
      D.5599 = len * 2;
      inleft = (size_t) D.5599;
      goto <D.4936>;
      <D.4935>:
      n = decode_utf16le (inptr, inleft, &c);
      if (n < 0) goto <D.5600>; else goto <D.5601>;
      <D.5600>:
      if (n == -2) goto <D.5602>; else goto <D.5603>;
      <D.5602>:
      if (inleft > 2) goto <D.5604>; else goto <D.5605>;
      <D.5604>:
      inleft = inleft + 4294967294;
      inptr = inptr + 2;
      <D.5605>:
      <D.5603>:
      D.5606 = __errno_location ();
      D.5607 = *D.5606;
      if (D.5607 == 88) goto <D.5608>; else goto <D.5609>;
      <D.5608>:
      D.5610 = monoeg_g_convert_error_quark ();
      monoeg_g_set_error (err, D.5610, 1, "Illegal byte sequence encounted in the input.");
      goto <D.5611>;
      <D.5609>:
      if (items_read != 0B) goto <D.4934>; else goto <D.5612>;
      <D.5612>:
      D.5613 = monoeg_g_convert_error_quark ();
      monoeg_g_set_error (err, D.5613, 3, "Partial byte sequence encountered in the input.");
      <D.5611>:
      if (items_read != 0B) goto <D.5614>; else goto <D.5615>;
      <D.5614>:
      inptr.40 = (int) inptr;
      str.41 = (int) str;
      D.5618 = inptr.40 - str.41;
      D.5619 = D.5618 / 2;
      *items_read = D.5619;
      <D.5615>:
      if (items_written != 0B) goto <D.5620>; else goto <D.5621>;
      <D.5620>:
      *items_written = 0;
      <D.5621>:
      D.5592 = 0B;
      return D.5592;
      <D.5601>:
      c.42 = c;
      if (c.42 == 0) goto <D.4934>; else goto <D.5623>;
      <D.5623>:
      c.42 = c;
      D.5624 = monoeg_g_unichar_to_utf8 (c.42, 0B);
      D.5625 = (unsigned int) D.5624;
      outlen = D.5625 + outlen;
      n.43 = (unsigned int) n;
      inleft = inleft - n.43;
      n.44 = (sizetype) n;
      inptr = inptr + n.44;
      <D.4936>:
      if (inleft != 0) goto <D.4935>; else goto <D.4934>;
      <D.4934>:
      if (items_read != 0B) goto <D.5628>; else goto <D.5629>;
      <D.5628>:
      inptr.40 = (int) inptr;
      str.41 = (int) str;
      D.5618 = inptr.40 - str.41;
      D.5619 = D.5618 / 2;
      *items_read = D.5619;
      <D.5629>:
      if (items_written != 0B) goto <D.5630>; else goto <D.5631>;
      <D.5630>:
      outlen.45 = (long int) outlen;
      *items_written = outlen.45;
      <D.5631>:
      D.5633 = outlen + 1;
      outbuf = monoeg_malloc (D.5633);
      outptr = outbuf;
      inptr = str;
      D.5599 = len * 2;
      inleft = (size_t) D.5599;
      goto <D.4939>;
      <D.4938>:
      n = decode_utf16le (inptr, inleft, &c);
      if (n < 0) goto <D.4937>; else goto <D.5634>;
      <D.5634>:
      c.42 = c;
      if (c.42 == 0) goto <D.4937>; else goto <D.5635>;
      <D.5635>:
      c.42 = c;
      D.5636 = monoeg_g_unichar_to_utf8 (c.42, outptr);
      D.5637 = (sizetype) D.5636;
      outptr = outptr + D.5637;
      n.43 = (unsigned int) n;
      inleft = inleft - n.43;
      n.44 = (sizetype) n;
      inptr = inptr + n.44;
      <D.4939>:
      if (inleft != 0) goto <D.4938>; else goto <D.4937>;
      <D.4937>:
      *outptr = 0;
      D.5592 = outbuf;
      return D.5592;
    }
  finally
    {
      c = {CLOBBER};
    }
}


monoeg_g_utf16_to_ucs4 (const gunichar2 * str, glong len, glong * items_read, glong * items_written, struct GError * * err)
{
  gunichar * D.5642;
  unsigned int len.46;
  unsigned int D.5646;
  const gunichar2 * D.5647;
  short unsigned int D.5648;
  long int D.5649;
  int * D.5656;
  int D.5657;
  void * D.5660;
  void * D.5663;
  int inptr.47;
  int str.48;
  int D.5668;
  int D.5669;
  unsigned int c.49;
  unsigned int n.50;
  sizetype n.51;
  unsigned int D.5680;
  long int D.5681;
  unsigned int D.5682;
  gunichar * outptr.52;
  gunichar * outbuf;
  gunichar * outptr;
  size_t outlen;
  size_t inleft;
  char * inptr;
  gunichar c;
  int n;

  try
    {
      outlen = 0;
      if (str == 0B) goto <D.5640>; else goto <D.5641>;
      <D.5640>:
      monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "giconv.c", 1177, "str != NULL");
      D.5642 = 0B;
      return D.5642;
      <D.5641>:
      if (len < 0) goto <D.5643>; else goto <D.5644>;
      <D.5643>:
      len = 0;
      goto <D.4955>;
      <D.4954>:
      len = len + 1;
      <D.4955>:
      len.46 = (unsigned int) len;
      D.5646 = len.46 * 2;
      D.5647 = str + D.5646;
      D.5648 = *D.5647;
      if (D.5648 != 0) goto <D.4954>; else goto <D.4956>;
      <D.4956>:
      <D.5644>:
      inptr = str;
      D.5649 = len * 2;
      inleft = (size_t) D.5649;
      goto <D.4959>;
      <D.4958>:
      n = decode_utf16le (inptr, inleft, &c);
      if (n < 0) goto <D.5650>; else goto <D.5651>;
      <D.5650>:
      if (n == -2) goto <D.5652>; else goto <D.5653>;
      <D.5652>:
      if (inleft > 2) goto <D.5654>; else goto <D.5655>;
      <D.5654>:
      inleft = inleft + 4294967294;
      inptr = inptr + 2;
      <D.5655>:
      <D.5653>:
      D.5656 = __errno_location ();
      D.5657 = *D.5656;
      if (D.5657 == 88) goto <D.5658>; else goto <D.5659>;
      <D.5658>:
      D.5660 = monoeg_g_convert_error_quark ();
      monoeg_g_set_error (err, D.5660, 1, "Illegal byte sequence encounted in the input.");
      goto <D.5661>;
      <D.5659>:
      if (items_read != 0B) goto <D.4957>; else goto <D.5662>;
      <D.5662>:
      D.5663 = monoeg_g_convert_error_quark ();
      monoeg_g_set_error (err, D.5663, 3, "Partial byte sequence encountered in the input.");
      <D.5661>:
      if (items_read != 0B) goto <D.5664>; else goto <D.5665>;
      <D.5664>:
      inptr.47 = (int) inptr;
      str.48 = (int) str;
      D.5668 = inptr.47 - str.48;
      D.5669 = D.5668 / 2;
      *items_read = D.5669;
      <D.5665>:
      if (items_written != 0B) goto <D.5670>; else goto <D.5671>;
      <D.5670>:
      *items_written = 0;
      <D.5671>:
      D.5642 = 0B;
      return D.5642;
      <D.5651>:
      c.49 = c;
      if (c.49 == 0) goto <D.4957>; else goto <D.5673>;
      <D.5673>:
      outlen = outlen + 4;
      n.50 = (unsigned int) n;
      inleft = inleft - n.50;
      n.51 = (sizetype) n;
      inptr = inptr + n.51;
      <D.4959>:
      if (inleft != 0) goto <D.4958>; else goto <D.4957>;
      <D.4957>:
      if (items_read != 0B) goto <D.5676>; else goto <D.5677>;
      <D.5676>:
      inptr.47 = (int) inptr;
      str.48 = (int) str;
      D.5668 = inptr.47 - str.48;
      D.5669 = D.5668 / 2;
      *items_read = D.5669;
      <D.5677>:
      if (items_written != 0B) goto <D.5678>; else goto <D.5679>;
      <D.5678>:
      D.5680 = outlen / 4;
      D.5681 = (long int) D.5680;
      *items_written = D.5681;
      <D.5679>:
      D.5682 = outlen + 4;
      outbuf = monoeg_malloc (D.5682);
      outptr = outbuf;
      inptr = str;
      D.5649 = len * 2;
      inleft = (size_t) D.5649;
      goto <D.4962>;
      <D.4961>:
      n = decode_utf16le (inptr, inleft, &c);
      if (n < 0) goto <D.4960>; else goto <D.5683>;
      <D.5683>:
      c.49 = c;
      if (c.49 == 0) goto <D.4960>; else goto <D.5684>;
      <D.5684>:
      outptr.52 = outptr;
      outptr = outptr.52 + 4;
      c.49 = c;
      *outptr.52 = c.49;
      n.50 = (unsigned int) n;
      inleft = inleft - n.50;
      n.51 = (sizetype) n;
      inptr = inptr + n.51;
      <D.4962>:
      if (inleft != 0) goto <D.4961>; else goto <D.4960>;
      <D.4960>:
      *outptr = 0;
      D.5642 = outbuf;
      return D.5642;
    }
  finally
    {
      c = {CLOBBER};
    }
}


monoeg_g_ucs4_to_utf8 (const gunichar * str, glong len, glong * items_read, glong * items_written, struct GError * * err)
{
  gchar * D.5690;
  unsigned int i.53;
  unsigned int D.5694;
  const gunichar * D.5695;
  unsigned int D.5696;
  void * D.5699;
  unsigned int n.54;
  void * D.5708;
  unsigned int D.5714;
  int D.5715;
  sizetype D.5716;
  long int outlen.55;
  char * outbuf;
  char * outptr;
  size_t outlen;
  glong i;
  int n;

  outlen = 0;
  if (str == 0B) goto <D.5688>; else goto <D.5689>;
  <D.5688>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "giconv.c", 1256, "str != NULL");
  D.5690 = 0B;
  return D.5690;
  <D.5689>:
  if (len < 0) goto <D.5691>; else goto <D.5692>;
  <D.5691>:
  i = 0;
  goto <D.4976>;
  <D.4975>:
  i.53 = (unsigned int) i;
  D.5694 = i.53 * 4;
  D.5695 = str + D.5694;
  D.5696 = *D.5695;
  n = monoeg_g_unichar_to_utf8 (D.5696, 0B);
  if (n < 0) goto <D.5697>; else goto <D.5698>;
  <D.5697>:
  D.5699 = monoeg_g_convert_error_quark ();
  monoeg_g_set_error (err, D.5699, 1, "Illegal byte sequence encounted in the input.");
  if (items_written != 0B) goto <D.5700>; else goto <D.5701>;
  <D.5700>:
  *items_written = 0;
  <D.5701>:
  if (items_read != 0B) goto <D.5702>; else goto <D.5703>;
  <D.5702>:
  *items_read = i;
  <D.5703>:
  D.5690 = 0B;
  return D.5690;
  <D.5698>:
  n.54 = (unsigned int) n;
  outlen = outlen + n.54;
  i = i + 1;
  <D.4976>:
  i.53 = (unsigned int) i;
  D.5694 = i.53 * 4;
  D.5695 = str + D.5694;
  D.5696 = *D.5695;
  if (D.5696 != 0) goto <D.4975>; else goto <D.4977>;
  <D.4977>:
  goto <D.5705>;
  <D.5692>:
  i = 0;
  goto <D.4979>;
  <D.4978>:
  i.53 = (unsigned int) i;
  D.5694 = i.53 * 4;
  D.5695 = str + D.5694;
  D.5696 = *D.5695;
  n = monoeg_g_unichar_to_utf8 (D.5696, 0B);
  if (n < 0) goto <D.5706>; else goto <D.5707>;
  <D.5706>:
  D.5708 = monoeg_g_convert_error_quark ();
  monoeg_g_set_error (err, D.5708, 1, "Illegal byte sequence encounted in the input.");
  if (items_written != 0B) goto <D.5709>; else goto <D.5710>;
  <D.5709>:
  *items_written = 0;
  <D.5710>:
  if (items_read != 0B) goto <D.5711>; else goto <D.5712>;
  <D.5711>:
  *items_read = i;
  <D.5712>:
  D.5690 = 0B;
  return D.5690;
  <D.5707>:
  n.54 = (unsigned int) n;
  outlen = outlen + n.54;
  i = i + 1;
  <D.4979>:
  if (i < len) goto <D.5713>; else goto <D.4980>;
  <D.5713>:
  i.53 = (unsigned int) i;
  D.5694 = i.53 * 4;
  D.5695 = str + D.5694;
  D.5696 = *D.5695;
  if (D.5696 != 0) goto <D.4978>; else goto <D.4980>;
  <D.4980>:
  <D.5705>:
  len = i;
  D.5714 = outlen + 1;
  outbuf = monoeg_malloc (D.5714);
  outptr = outbuf;
  i = 0;
  goto <D.4982>;
  <D.4981>:
  i.53 = (unsigned int) i;
  D.5694 = i.53 * 4;
  D.5695 = str + D.5694;
  D.5696 = *D.5695;
  D.5715 = monoeg_g_unichar_to_utf8 (D.5696, outptr);
  D.5716 = (sizetype) D.5715;
  outptr = outptr + D.5716;
  i = i + 1;
  <D.4982>:
  if (i < len) goto <D.4981>; else goto <D.4983>;
  <D.4983>:
  *outptr = 0;
  if (items_written != 0B) goto <D.5717>; else goto <D.5718>;
  <D.5717>:
  outlen.55 = (long int) outlen;
  *items_written = outlen.55;
  <D.5718>:
  if (items_read != 0B) goto <D.5720>; else goto <D.5721>;
  <D.5720>:
  *items_read = i;
  <D.5721>:
  D.5690 = outbuf;
  return D.5690;
}


monoeg_g_ucs4_to_utf16 (const gunichar * str, glong len, glong * items_read, glong * items_written, struct GError * * err)
{
  gunichar2 * D.5725;
  unsigned int i.56;
  unsigned int D.5729;
  const gunichar * D.5730;
  unsigned int D.5731;
  void * D.5734;
  unsigned int n.57;
  void * D.5743;
  unsigned int D.5749;
  unsigned int D.5750;
  int D.5751;
  unsigned int D.5752;
  unsigned int D.5753;
  long int outlen.58;
  gunichar2 * outbuf;
  gunichar2 * outptr;
  size_t outlen;
  glong i;
  int n;

  outlen = 0;
  if (str == 0B) goto <D.5723>; else goto <D.5724>;
  <D.5723>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "giconv.c", 1318, "str != NULL");
  D.5725 = 0B;
  return D.5725;
  <D.5724>:
  if (len < 0) goto <D.5726>; else goto <D.5727>;
  <D.5726>:
  i = 0;
  goto <D.4997>;
  <D.4996>:
  i.56 = (unsigned int) i;
  D.5729 = i.56 * 4;
  D.5730 = str + D.5729;
  D.5731 = *D.5730;
  n = monoeg_unichar_to_utf16 (D.5731, 0B);
  if (n < 0) goto <D.5732>; else goto <D.5733>;
  <D.5732>:
  D.5734 = monoeg_g_convert_error_quark ();
  monoeg_g_set_error (err, D.5734, 1, "Illegal byte sequence encounted in the input.");
  if (items_written != 0B) goto <D.5735>; else goto <D.5736>;
  <D.5735>:
  *items_written = 0;
  <D.5736>:
  if (items_read != 0B) goto <D.5737>; else goto <D.5738>;
  <D.5737>:
  *items_read = i;
  <D.5738>:
  D.5725 = 0B;
  return D.5725;
  <D.5733>:
  n.57 = (unsigned int) n;
  outlen = outlen + n.57;
  i = i + 1;
  <D.4997>:
  i.56 = (unsigned int) i;
  D.5729 = i.56 * 4;
  D.5730 = str + D.5729;
  D.5731 = *D.5730;
  if (D.5731 != 0) goto <D.4996>; else goto <D.4998>;
  <D.4998>:
  goto <D.5740>;
  <D.5727>:
  i = 0;
  goto <D.5000>;
  <D.4999>:
  i.56 = (unsigned int) i;
  D.5729 = i.56 * 4;
  D.5730 = str + D.5729;
  D.5731 = *D.5730;
  n = monoeg_unichar_to_utf16 (D.5731, 0B);
  if (n < 0) goto <D.5741>; else goto <D.5742>;
  <D.5741>:
  D.5743 = monoeg_g_convert_error_quark ();
  monoeg_g_set_error (err, D.5743, 1, "Illegal byte sequence encounted in the input.");
  if (items_written != 0B) goto <D.5744>; else goto <D.5745>;
  <D.5744>:
  *items_written = 0;
  <D.5745>:
  if (items_read != 0B) goto <D.5746>; else goto <D.5747>;
  <D.5746>:
  *items_read = i;
  <D.5747>:
  D.5725 = 0B;
  return D.5725;
  <D.5742>:
  n.57 = (unsigned int) n;
  outlen = outlen + n.57;
  i = i + 1;
  <D.5000>:
  if (i < len) goto <D.5748>; else goto <D.5001>;
  <D.5748>:
  i.56 = (unsigned int) i;
  D.5729 = i.56 * 4;
  D.5730 = str + D.5729;
  D.5731 = *D.5730;
  if (D.5731 != 0) goto <D.4999>; else goto <D.5001>;
  <D.5001>:
  <D.5740>:
  len = i;
  D.5749 = outlen + 1;
  D.5750 = D.5749 * 2;
  outbuf = monoeg_malloc (D.5750);
  outptr = outbuf;
  i = 0;
  goto <D.5003>;
  <D.5002>:
  i.56 = (unsigned int) i;
  D.5729 = i.56 * 4;
  D.5730 = str + D.5729;
  D.5731 = *D.5730;
  D.5751 = monoeg_unichar_to_utf16 (D.5731, outptr);
  D.5752 = (unsigned int) D.5751;
  D.5753 = D.5752 * 2;
  outptr = outptr + D.5753;
  i = i + 1;
  <D.5003>:
  if (i < len) goto <D.5002>; else goto <D.5004>;
  <D.5004>:
  *outptr = 0;
  if (items_written != 0B) goto <D.5754>; else goto <D.5755>;
  <D.5754>:
  outlen.58 = (long int) outlen;
  *items_written = outlen.58;
  <D.5755>:
  if (items_read != 0B) goto <D.5757>; else goto <D.5758>;
  <D.5757>:
  *items_read = i;
  <D.5758>:
  D.5725 = outbuf;
  return D.5725;
}


