LyogVGhpcyBoZWFkZXIgZmlsZSBpcyAjaW5jbHVkZSdkIGJ5IGdfY250cmxpZnkuYy4gIEl0IGlzIGEgZGF0YWJhc2UgcmF0aGVyCiAgIHRoYW4gYSB0cnVlIGhlYWRlciBmaWxlOiBpdCBpbmNsdWRlcyBhcnJheXMgb2YgZXNjYXBlIHNlcXVlbmNlcywKICAgbGlnYXR1cmVzLCBldGMuLCB3aGljaCBnb3Zlcm4gdGhlIGludGVycHJldGF0aW9uIG9mIGEgdXNlci1zcGVjaWZpZWQKICAgdGV4dCBzdHJpbmcsIG9yIGBsYWJlbCcuCgogICBUaGlzIGRhdGFiYXNlIGlzIHVzZWQgaW4gYGNvbnRyb2xpZmljYXRpb24nOiB0aGUgbWFwcGluZyBvZiBhIGxhYmVsIChhCiAgIHN0cmluZyBvZiB1bnNpZ25lZCBjaGFycykgdG8gYSBzdHJpbmcgb2YgdW5zaWduZWQgc2hvcnRzLCBmb3IgZnVydGhlcgogICBwcm9jZXNzaW5nLiAgVGhpcyBtYXBwaW5nIGFjY29tcGxpc2hlcyB0d28gdGhpbmdzOiBmaXJzdCwgaXQgbWFwcwogICBjZXJ0YWluIGVzY2FwZSBzZXF1ZW5jZXMsIGJlZ2lubmluZyB3aXRoIGEgYmFja3NsYXNoLCB0byBub24tQVNDSUkKICAgSVNPLUxhdGluLTEgY2hhcmFjdGVycyAoZS5nLiwgXG11IGlzIG1hcHBlZCB0byBgdGltZXMnKSwgYW5kIHNlY29uZCwgaXQKICAgbWFwcyBjZXJ0YWluIGVzY2FwZSBzZXF1ZW5jZXMgdG8gaW50ZXJuYWwgY29udHJvbCBjb2RlcyAoZS5nLiBcc3AgaXMKICAgbWFwcGVkIHRvIGBzdGFydCBzdXBlcnNjcmlwdCcpLiAqLwoKLyogRXNjYXBlIHNlcXVlbmNlcyB0aGF0IGFyZSBtYXBwZWQgdG8gaW50ZXJuYWwgY29udHJvbCBjb2Rlcy4gIFRoZSBvcmRlcgogICBpbiB3aGljaCB0aGVzZSBhcHBlYXIgbXVzdCBhZ3JlZSB3aXRoIHRoZSBvcmRlciBvZiBpbnRlcm5hbCBjb250cm9sCiAgIGNvZGVzIChlLmcuIENfQkVHSU5fU1VCU0NSSVBUKSBhcHBlYXJpbmcgaW4gZ19jb250cm9sLmguICovCgojZGVmaW5lIE5VTV9DT05UUk9MUyAxOApzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IF9jb250cm9sX3RibFtOVU1fQ09OVFJPTFNdID0KewogIC8qIFxzcCA9IHN0YXJ0IHN1cGVyc2NyaXB0ICovCiAgInNwIiwKICAvKiBcZXAgPSBlbmQgc3VwZXJzY3JpcHQgKi8KICAiZXAiLAogIC8qIFxzYiA9IHN0YXJ0IHN1YnNjcmlwdCAqLwogICJzYiIsCiAgLyogXGViID0gZW5kIHN1YnNjcmlwdCAqLwogICJlYiIsCiAgLyogXG1rID0gbWFyayBsb2NhdGlvbiAqLwogICJtayIsCiAgLyogXHJ0ID0gcmV0dXJuICovCiAgInJ0IiwKICAvKiBccjEgPSBzaGlmdCByaWdodCBieSAxIGVtICovCiAgInIxIiwKICAvKiBccjIgPSBzaGlmdCByaWdodCBieSBlbS8yICovCiAgInIyIiwKICAvKiBccjQgPSBzaGlmdCByaWdodCBieSBlbS80ICovCiAgInI0IiwKICAvKiBccjYgPSBzaGlmdCByaWdodCBieSBlbS82ICovCiAgInI2IiwKICAvKiBccjggPSBzaGlmdCByaWdodCBieSBlbS84ICovCiAgInI4IiwKICAvKiBccl4gPSBzaGlmdCByaWdodCBieSBlbS8xMiAqLwogICJyXiIsCiAgLyogXGwxID0gc2hpZnQgbGVmdCBieSAxIGVtICovCiAgImwxIiwKICAvKiBcbDIgPSBzaGlmdCBsZWZ0IGJ5IGVtLzIgKi8KICAibDIiLAogIC8qIFxsNCA9IHNoaWZ0IGxlZnQgYnkgZW0vNCAqLwogICJsNCIsCiAgLyogXGw2ID0gc2hpZnQgbGVmdCBieSBlbS82ICovCiAgImw2IiwKICAvKiBcbDggPSBzaGlmdCBsZWZ0IGJ5IGVtLzggKi8KICAibDgiLAogIC8qIFxsXiA9IHNoaWZ0IGxlZnQgYnkgZW0vMTIgKi8KICAibF4iLAp9OwoKdHlwZWRlZiBzdHJ1Y3QKewogIHVuc2lnbmVkIGNoYXIgYnl0ZTsKICBjb25zdCBjaGFyICogc3RyaW5nOwogIGNvbnN0IGNoYXIgKiBwc19uYW1lOwp9IEVzY2FwZTsKCi8qIFRoZSBiYXNpYyB0cmFuc2xhdGlvbiB0YWJsZSwgYXBwbHlpbmcgdG8gYWxsIElTTy1MYXRpbi0xIGZvbnRzLiAqLwoKI2RlZmluZSBOVU1fSVNPX0VTQ0FQRVMgOTUKCnN0YXRpYyBjb25zdCBFc2NhcGUgX2lzb19lc2NhcGVfdGJsW05VTV9JU09fRVNDQVBFU10gPQp7CiAgLyogZXNjYXBlIHNlcXVlbmNlcywgdGFrZW4gZnJvbSBncm9mZiAqLwogIHsxNjEsICJyISIsICJleGNsYW1kb3duIn0sCiAgezE2MiwgImN0IiwgImNlbnQifSwKICB7MTYzLCAiUG8iLCAic3RlcmxpbmcifSwKICB7MTY0LCAiQ3MiLCAiY3VycmVuY3kifSwKICB7MTY1LCAiWWUiLCAieWVuIn0sCiAgezE2NiwgImJiIiwgImJyb2tlbmJhciJ9LAogIHsxNjcsICJzYyIsICJzZWN0aW9uIn0sCiAgezE2OCwgImFkIiwgImRpZXJlc2lzIn0sCiAgezE2OSwgImNvIiwgImNvcHlyaWdodCJ9LAogIHsxNzAsICJPZiIsICJvcmRmZW1pbmluZSJ9LAogIHsxNzEsICJGbyIsICJndWlsbGVtb3RsZWZ0In0sCiAgezE3MiwgIm5vIiwgImxvZ2ljYWxub3QifSwKICB7MTczLCAiaHkiLCAiaHlwaGVuIn0sCiAgezE3NCwgInJnIiwgInJlZ2lzdGVyZWQifSwKICB7MTc1LCAiYS0iLCAibWFjcm9uIn0sCiAgezE3NiwgImRlIiwgImRlZ3JlZSJ9LAogIHsxNzcsICIrLSIsICJwbHVzbWludXMifSwKICB7MTc4LCAiUzIiLCAidHdvc3VwZXJpb3IifSwKICB7MTc5LCAiUzMiLCAidGhyZWVzdXBlcmlvciJ9LAogIHsxODAsICJhYSIsICJhY3V0ZSJ9LAogIHsxODEsICIqbSIsICJtdSJ9LAogIHsxODIsICJwcyIsICJwYXJhZ3JhcGgifSwKICB7MTgzLCAibWQiLCAicGVyaW9kY2VudGVyZWQifSwKICB7MTg0LCAiYWMiLCAiY2VkaWxsYSJ9LAogIHsxODUsICJTMSIsICJvbmVzdXBlcmlvciJ9LAogIHsxODYsICJPbSIsICJvcmRtYXNjdWxpbmUifSwKICB7MTg3LCAiRmMiLCAiZ3VpbGxlbW90cmlnaHQifSwKICB7MTg4LCAiMTQiLCAib25lcXVhcnRlciJ9LAogIHsxODksICIxMiIsICJvbmVoYWxmIn0sCiAgezE5MCwgIjM0IiwgInRocmVlcXVhcnRlcnMifSwKICB7MTkxLCAicj8iLCAicXVlc3Rpb25kb3duIn0sCiAgezE5MiwgImBBIiwgIkFncmF2ZSJ9LAogIHsxOTMsICInQSIsICJBYWN1dGUifSwKICB7MTk0LCAiXkEiLCAiQWNpcmN1bWZsZXgifSwKICB7MTk1LCAifkEiLCAiQXRpbGRlIn0sCiAgezE5NiwgIjpBIiwgIkFkaWVyZXNpcyJ9LAogIHsxOTcsICJvQSIsICJBcmluZyJ9LAogIHsxOTgsICJBRSIsICJBRSJ9LAogIHsxOTksICIsQyIsICJDY2VkaWxsYSJ9LAogIHsyMDAsICJgRSIsICJFZ3JhdmUifSwKICB7MjAxLCAiJ0UiLCAiRWFjdXRlIn0sCiAgezIwMiwgIl5FIiwgIkVjaXJjdW1mbGV4In0sCiAgezIwMywgIjpFIiwgIkVkaWVyZXNpcyJ9LAogIHsyMDQsICJgSSIsICJJZ3JhdmUifSwKICB7MjA1LCAiJ0kiLCAiSWFjdXRlIn0sCiAgezIwNiwgIl5JIiwgIkljaXJjdW1mbGV4In0sCiAgezIwNywgIjpJIiwgIklkaWVyZXNpcyJ9LAogIHsyMDgsICItRCIsICJFdGgifSwKICB7MjA5LCAifk4iLCAiTnRpbGRlIn0sCiAgezIxMCwgImBPIiwgIk9ncmF2ZSJ9LAogIHsyMTEsICInTyIsICJPYWN1dGUifSwKICB7MjEyLCAiXk8iLCAiT2NpcmN1bWZsZXgifSwKICB7MjEzLCAifk8iLCAiT3RpbGRlIn0sCiAgezIxNCwgIjpPIiwgIk9kaWVyZXNpcyJ9LAogIHsyMTUsICJtdSIsICJtdWx0aXBseSJ9LAogIHsyMTYsICIvTyIsICJPc2xhc2gifSwKICB7MjE3LCAiYFUiLCAiVWdyYXZlIn0sCiAgezIxOCwgIidVIiwgIlVhY3V0ZSJ9LAogIHsyMTksICJeVSIsICJVY2lyY3VtZmxleCJ9LAogIHsyMjAsICI6VSIsICJVZGllcmVzaXMifSwKICB7MjIxLCAiJ1kiLCAiWWFjdXRlIn0sCiAgezIyMiwgIlRQIiwgIlRob3JuIn0sCiAgezIyMywgInNzIiwgImdlcm1hbmRibHMifSwKICB7MjI0LCAiYGEiLCAiYWdyYXZlIn0sCiAgezIyNSwgIidhIiwgImFhY3V0ZSJ9LAogIHsyMjYsICJeYSIsICJhY2lyY3VtZmxleCJ9LAogIHsyMjcsICJ+YSIsICJhdGlsZGUifSwKICB7MjI4LCAiOmEiLCAiYWRpZXJlc2lzIn0sCiAgezIyOSwgIm9hIiwgImFyaW5nIn0sCiAgezIzMCwgImFlIiwgImFlIn0sCiAgezIzMSwgIixjIiwgImNjZWRpbGxhIn0sCiAgezIzMiwgImBlIiwgImVncmF2ZSJ9LAogIHsyMzMsICInZSIsICJlYWN1dGUifSwKICB7MjM0LCAiXmUiLCAiZWNpcmN1bWZsZXgifSwKICB7MjM1LCAiOmUiLCAiZWRpZXJlc2lzIn0sCiAgezIzNiwgImBpIiwgImlncmF2ZSJ9LAogIHsyMzcsICInaSIsICJpYWN1dGUifSwKICB7MjM4LCAiXmkiLCAiaWNpcmN1bWZsZXgifSwKICB7MjM5LCAiOmkiLCAiaWRpZXJlc2lzIn0sCiAgezI0MCwgIlNkIiwgImV0aCJ9LAogIHsyNDEsICJ+biIsICJudGlsZGUifSwKICB7MjQyLCAiYG8iLCAib2dyYXZlIn0sCiAgezI0MywgIidvIiwgIm9hY3V0ZSJ9LAogIHsyNDQsICJebyIsICJvY2lyY3VtZmxleCJ9LAogIHsyNDUsICJ+byIsICJvdGlsZGUifSwKICB7MjQ2LCAiOm8iLCAib2RpZXJlc2lzIn0sCiAgezI0NywgImRpIiwgImRpdmlkZSJ9LAogIHsyNDgsICIvbyIsICJvc2xhc2gifSwKICB7MjQ5LCAiYHUiLCAidWdyYXZlIn0sCiAgezI1MCwgIid1IiwgInVhY3V0ZSJ9LAogIHsyNTEsICJedSIsICJ1Y2lyY3VtZmxleCJ9LAogIHsyNTIsICI6dSIsICJ1ZGllcmVzaXMifSwKICB7MjUzLCAiJ3kiLCAieWFjdXRlIn0sCiAgezI1NCwgIlRwIiwgInRob3JuIn0sCiAgezI1NSwgIjp5IiwgInlkaWVyZXNpcyJ9LAp9OwoKLyogRm9yIGFueSBzdGFuZGFyZCBQUyBmb250IG9yIEhlcnNoZXkgZm9udCwgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsCiAgIHRyYW5zbGF0aW9uIHRhYmxlIGFwcGxpZXMuICBJdCBwZXJtaXRzIHRoZSB1c2Ugb2Ygc3ltYm9scyBhbmQgR3JlZWsKICAgY2hhcmFjdGVycyAodGFrZW4gZnJvbSB0aGUgU3ltYm9sIGZvbnQsIGZvciBhIFBTIGZvbnQsIG9yIGZyb20gdGhlCiAgIEhlcnNoZXlTeW1ib2wgZm9udCwgZm9yIGEgSGVyc2hleSBmb250KSB3aXRob3V0IGV4cGxpY2l0bHkgc3dpdGNoaW5nCiAgIGZvbnRzLiAqLwoKI2RlZmluZSBOVU1fU1lNQk9MX0VTQ0FQRVMgMTYxCgpzdGF0aWMgY29uc3QgRXNjYXBlIF9zeW1ib2xfZXNjYXBlX3RibFtOVU1fU1lNQk9MX0VTQ0FQRVNdID0KewogIC8qIGVzY2FwZSBzZXF1ZW5jZXMsIHRha2VuIGZyb20gZ3JvZmYsIGV4Y2VwdCBmb3IgKDEpIHNldmVyYWwgY2hhcmFjdGVycwogICBmb3Igd2hpY2ggdGhlIGVzY2FwZSBzZXF1ZW5jZXMgd2VyZSBpbnZlbnRlZCwgYmVjYXVzZSBncm9mZiBoYXMgbm8KICAgMi1sZXR0ZXIgZXNjYXBlIHNlcXVlbmNlIGZvciB0aGVtLCBhbmQgKDIpIHRocmVlIGNoYXJhY3RlcnMgKGZsYWdnZWQpCiAgIHRoYXQgbmVlZGVkIHRvIGhhdmUgdGhlaXIgZXNjYXBlIHNlcXVlbmNlcyBjYXBpdGFsaXplZCBkdWUgdG8gY29uZmxpY3RzICovCiAgezA0MiwgImZhIiwgInVuaXZlcnNhbCJ9LAogIHswNDQsICJ0ZSIsICJleGlzdGVudGlhbCJ9LAogIHswNDcsICJzdCIsICJzdWNodGhhdCJ9LAogIHswNTIsICIqKiIsICJhc3Rlcmlza21hdGgifSwKICB7MDEwMCwgIj1+IiwgImNvbmdydWVudCJ9LAogIHswMTAxLCAiKkEiLCAiQWxwaGEifSwKICB7MDEwMiwgIipCIiwgIkJldGEifSwKICB7MDEwMywgIipYIiwgIkNoaSJ9LAogIHswMTA0LCAiKkQiLCAiRGVsdGEifSwKICB7MDEwNSwgIipFIiwgIkVwc2lsb24ifSwKICB7MDEwNiwgIipGIiwgIlBoaSJ9LAogIHswMTA3LCAiKkciLCAiR2FtbWEifSwKICB7MDExMCwgIipZIiwgIkV0YSJ9LAogIHswMTExLCAiKkkiLCAiSW90YSJ9LAogIHswMTEyLCAiK2giLCAidGhldGExIn0sCiAgezAxMTMsICIqSyIsICJrYXBwYSJ9LAogIHswMTE0LCAiKkwiLCAiTGFtYmRhIn0sCiAgezAxMTUsICIqTSIsICJNdSJ9LAogIHswMTE2LCAiKk4iLCAiTnUifSwKICB7MDExNywgIipPIiwgIk9taWNyb24ifSwKICB7MDEyMCwgIipQIiwgIlBpIn0sCiAgezAxMjEsICIqSCIsICJUaGV0YSJ9LAogIHswMTIyLCAiKlIiLCAiUmhvIn0sCiAgezAxMjMsICIqUyIsICJTaWdtYSJ9LAogIHswMTI0LCAiKlQiLCAiVGF1In0sCiAgezAxMjUsICIqVSIsICJVcHNpbG9uIn0sCiAgezAxMjYsICJ0cyIsICJzaWdtYTEifSwKICB7MDEyNywgIipXIiwgIk9tZWdhIn0sCiAgezAxMzAsICIqQyIsICJYaSJ9LAogIHswMTMxLCAiKlEiLCAiUHNpIn0sCiAgezAxMzIsICIqWiIsICJaZXRhIn0sCiAgezAxMzQsICJ0ZiIsICJ0aGVyZWZvcmUifSwKICB7MDEzNiwgInBwIiwgInBlcnBlbmRpY3VsYXIifSwKICB7MDEzNywgInVsIiwgInVuZGVybGluZSJ9LAkvKiBub3QgdGhlIHNhbWUgYXMgdW5kZXJzY29yZSAqLwogIHswMTQwLCAicngiLCAicmFkaWNhbGV4In0sCiAgezAxNDEsICIqYSIsICJhbHBoYSJ9LAogIHswMTQyLCAiKmIiLCAiYmV0YSJ9LAogIHswMTQzLCAiKngiLCAiY2hpIn0sCiAgezAxNDQsICIqZCIsICJkZWx0YSJ9LAogIHswMTQ1LCAiKmUiLCAiZXBzaWxvbiJ9LAogIHswMTQ2LCAiKmYiLCAicGhpIn0sCiAgezAxNDcsICIqZyIsICJnYW1tYSJ9LAogIHswMTUwLCAiKnkiLCAiZXRhIn0sCiAgezAxNTEsICIqaSIsICJpb3RhIn0sCiAgezAxNTIsICIrZiIsICJwaGkxIn0sCiAgezAxNTMsICIqayIsICJrYXBwYSJ9LAogIHswMTU0LCAiKmwiLCAibGFtYmRhIn0sCiAgezAxNTUsICIqbSIsICJtdSJ9LAogIHswMTU2LCAiKm4iLCAibnUifSwKICB7MDE1NywgIipvIiwgIm9taWNyb24ifSwKICB7MDE2MCwgIipwIiwgInBpIn0sCiAgezAxNjEsICIqaCIsICJ0aGV0YSJ9LAogIHswMTYyLCAiKnIiLCAicmhvIn0sCiAgezAxNjMsICIqcyIsICJzaWdtYSJ9LAogIHswMTY0LCAiKnQiLCAidGF1In0sCiAgezAxNjUsICIqdSIsICJ1cHNpbG9uIn0sCiAgezAxNjYsICIrcCIsICJvbWVnYTEifSwKICB7MDE2NywgIip3IiwgIm9tZWdhIn0sCiAgezAxNzAsICIqYyIsICJ4aSJ9LAogIHswMTcxLCAiKnEiLCAicHNpIn0sCiAgezAxNzIsICIqeiIsICJ6ZXRhIn0sCiAgezAxNzYsICJhcCIsICJzaW1pbGFyIn0sCiAgezAyNDEsICIrVSIsICJVcHNpbG9uMSJ9LAogIHswMjQyLCAiZm0iLCAibWludXRlIn0sCiAgezAyNDMsICI8PSIsICJsZXNzZXF1YWwifSwKICB7MDI0NCwgImYvIiwgImZyYWN0aW9uIn0sCiAgezAyNDUsICJpZiIsICJpbmZpbml0eSJ9LAogIHswMjQ2LCAiRm4iLCAiZmxvcmluIn0sCiAgezAyNDcsICJDTCIsICJjbHViIn0sCiAgezAyNTAsICJESSIsICJkaWFtb25kIn0sCiAgezAyNTEsICJIRSIsICJoZWFydCJ9LAogIHswMjUyLCAiU1AiLCAic3BhZGUifSwKICB7MDI1MywgIjw+IiwgImFycm93Ym90aCJ9LAogIHswMjU0LCAiPC0iLCAiYXJyb3dsZWZ0In0sCiAgezAyNTUsICJ1YSIsICJhcnJvd3VwIn0sCiAgezAyNTYsICItPiIsICJhcnJvd3JpZ2h0In0sCiAgezAyNTcsICJkYSIsICJhcnJvd2Rvd24ifSwKICB7MDI2MCwgImRlIiwgImRlZ3JlZSJ9LAogIHswMjYxLCAiKy0iLCAicGx1c21pbnVzIn0sCiAgezAyNjIsICJzZCIsICJzZWNvbmQifSwKICB7MDI2MywgIj49IiwgImdyZWF0ZXJlcXVhbCJ9LAogIHswMjY0LCAibXUiLCAibXVsdGlwbHkifSwKICB7MDI2NSwgInB0IiwgInByb3BvcnRpb25hbCJ9LAogIHswMjY2LCAicGQiLCAicGFydGlhbGRpZmYifSwKICB7MDI2NywgImJ1IiwgImJ1bGxldCJ9LAogIHswMjcwLCAiZGkiLCAiZGl2aWRlIn0sCiAgezAyNzEsICIhPSIsICJub3RlcXVhbCJ9LAogIHswMjcyLCAiPT0iLCAiZXF1aXZhbGVuY2UifSwKICB7MDI3MywgIn5+IiwgImFwcHJveGVxdWFsIn0sCiAgezAyNzQsICIuLiIsICJlbGxpcHNpcyJ9LAogIHswMjc1LCAiTk9fQUJCUkVWIiwgImFycm93dmVydGV4In0sCiAgezAyNzYsICJhbiIsICJhcnJvd2hvcml6ZXgifSwKICB7MDI3NywgIkNSIiwgImNhcnJpYWdlcmV0dXJuIn0sCiAgezAzMDAsICJBaCIsICJhbGVwaCJ9LAogIHswMzAxLCAiSW0iLCAiSWZyYWt0dXIifSwKICB7MDMwMiwgIlJlIiwgIlJmcmFrdHVyIn0sCiAgezAzMDMsICJ3cCIsICJ3ZWllcnN0cmFzcyJ9LAogIHswMzA0LCAiYyoiLCAiY2lyY2xlbXVsdGlwbHkifSwKICB7MDMwNSwgImMrIiwgImNpcmNsZXBsdXMifSwKICB7MDMwNiwgImVzIiwgImVtcHR5c2V0In0sCiAgezAzMDcsICJjYSIsICJjYXAifSwKICB7MDMxMCwgImN1IiwgImN1cCJ9LAogIHswMzExLCAiU1MiLCAic3VwZXJzZXQifSwJLyogZ3JvZmY6IHNwLiAgQ29uZmxpY3RzIHdpdGggXHNwLiAqLwogIHswMzEyLCAiaXAiLCAicmVmbGV4c3VwZXJzZXQifSwKICB7MDMxMywgIm48IiwgIm5vdHN1YnNldCJ9LAogIHswMzE0LCAiU0IiLCAic3Vic2V0In0sCS8qIGdyb2ZmOiBzYi4gIENvbmZsaWN0cyB3aXRoIFxzYi4gKi8KICB7MDMxNSwgImliIiwgInJlZmxleHN1YnNldCJ9LAogIHswMzE2LCAibW8iLCAiZWxlbWVudCJ9LAogIHswMzE3LCAibm0iLCAibm90ZWxlbWVudCJ9LAogIHswMzIwLCAiL18iLCAiYW5nbGUifSwKICB7MDMyMSwgImdyIiwgIm5hYmxhIn0sCiAgezAzMjIsICJyZyIsICJyZWdpc3RlcnNlcmlmIn0sCiAgezAzMjMsICJjbyIsICJjb3B5cmlnaHRzZXJpZiJ9LAogIHswMzI0LCAidG0iLCAidHJhZGVtYXJrc2VyaWYifSwKICB7MDMyNSwgIlBSIiwgInByb2R1Y3QifSwKICB7MDMyNiwgInNyIiwgInJhZGljYWwifSwKICB7MDMyNywgIm1kIiwgImRvdG1hdGgifSwKICB7MDMzMCwgIm5vIiwgImxvZ2ljYWxub3QifSwKICB7MDMzMSwgIkFOIiwgImxvZ2ljYWxhbmQifSwKICB7MDMzMiwgIk9SIiwgImxvZ2ljYWxvciJ9LAogIHswMzMzLCAiaEEiLCAiYXJyb3dkYmxib3RoIn0sCiAgezAzMzQsICJsQSIsICJhcnJvd2RibGxlZnQifSwKICB7MDMzNSwgInVBIiwgImFycm93ZGJsdXAifSwKICB7MDMzNiwgInJBIiwgImFycm93ZGJscmlnaHQifSwKICB7MDMzNywgImRBIiwgImFycm93ZGJsZG93biJ9LAogIHswMzQwLCAibHoiLCAibG96ZW5nZSJ9LAogIHswMzQxLCAibGEiLCAiYW5nbGVsZWZ0In0sCiAgezAzNDIsICJSRyIsICJyZWdpc3RlcnNhbnMifSwKICB7MDM0MywgIkNPIiwgImNvcHlyaWdodHNhbnMifSwKICB7MDM0NCwgIlRNIiwgInRyYWRlbWFya3NhbnMifSwKICB7MDM0NSwgIlNVIiwgInN1bW1hdGlvbiJ9LAogIHswMzQ2LCAiTk9fQUJCUkVWIiwgInBhcmVubGVmdHRwIn0sCiAgezAzNDcsICJOT19BQkJSRVYiLCAicGFyZW5sZWZ0ZXgifSwKICB7MDM1MCwgIk5PX0FCQlJFViIsICJwYXJlbmxlZnRidCJ9LAogIHswMzUxLCAibGMiLCAiYnJhY2tldGxlZnR0cCJ9LAogIHswMzUyLCAiTk9fQUJCUkVWIiwgImJyYWNrZXRsZWZ0ZXgifSwKICB7MDM1MywgImxmIiwgImJyYWNrZXRsZWZ0YnQifSwKICB7MDM1NCwgImx0IiwgImJyYWNlbGVmdHRwIn0sCiAgezAzNTUsICJsayIsICJicmFjZWxlZnRtaWQifSwKICB7MDM1NiwgImxiIiwgImJyYWNlbGVmdGJ0In0sCiAgezAzNTcsICJidiIsICJicmFjZWV4In0sCiAgLyogRXVybyBzeW1ib2wsIGFkZGVkIGJ5IEFkb2JlIDE5OTcoPykuICBPYkhpc3RvcmljYWwgbm90ZTogQmFjayBpbiBBcHBsZQogICAgIExhc2VyV3JpdGVyIGRheXMsIHRoZSBBcHBsZSBsb2dvIHdhcyBzdG9yZWQgaW4gdGhpcyBzbG90LiAqLwogIHswMzYwLCAiZXUiLCAiZXVybyJ9LAogIHswMzYxLCAicmEiLCAiYW5nbGVyaWdodCJ9LAogIHswMzYyLCAiaXMiLCAiaW50ZWdyYWwifSwKICB7MDM2MywgIk5PX0FCQlJFViIsICJpbnRlZ3JhbHRwIn0sCiAgezAzNjQsICJOT19BQkJSRVYiLCAiaW50ZWdyYWxleCJ9LAogIHswMzY1LCAiTk9fQUJCUkVWIiwgImludGVncmFsYnQifSwKICB7MDM2NiwgIk5PX0FCQlJFViIsICJwYXJlbnJpZ2h0dHAifSwKICB7MDM2NywgIk5PX0FCQlJFViIsICJwYXJlbnJpZ2h0ZXgifSwKICB7MDM3MCwgIk5PX0FCQlJFViIsICJwYXJlbnJpZ2h0YnQifSwKICB7MDM3MSwgInJjIiwgImJyYWNrZXRyaWdodHRwIn0sCiAgezAzNzIsICJOT19BQkJSRVYiLCAiYnJhY2tldHJpZ2h0ZXgifSwKICB7MDM3MywgInJmIiwgImJyYWNrZXRyaWdodGJ0In0sCiAgezAzNzQsICJSVCIsICJicmFjZXJpZ2h0dHAifSwJLyogZ3JvZmY6IHJ0LiAgQ29uZmxpY3RzIHdpdGggXHJ0LiAqLwogIHswMzc1LCAicmsiLCAiYnJhY2VyaWdodG1pZCJ9LAogIHswMzc2LCAicmIiLCAiYnJhY2VyaWdodGJ0In0sCiAgLyogdHJhZGl0aW9uYWwgVUdTIGFsaWFzZXMgKHVuZG9jdW1lbnRlZCBhbmQgcmVkdW5kYW50OyBvYnNvbGV0ZSkgKi8KICB7MDEwMCwgIn49IiwgImNvbmdydWVudCJ9LAogIHswMjQyLCAicHIiLCAibWludXRlIn0sCiAgezAyNDUsICJpbiIsICJpbmZpbml0eSJ9LAogIHswMjcxLCAibj0iLCAibm90ZXF1YWwifSwKICB7MDMyMSwgImRsIiwgIm5hYmxhIn0sCn07CgovKiBGb3IgYW55IEhlcnNoZXkgZm9udCwgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIHRyYW5zbGF0aW9uIHRhYmxlCiAgIGFwcGxpZXMuICBJdCBhbGxvd3MgYWNjZXNzIHRvIHNwZWNpYWwgdmVjdG9yIGNoYXJhY3RlcnMsIGZyb20gdGhlCiAgIEhlcnNoZXkgcmVwZXJ0b3J5IGFuZCBmcm9tIHRoZSBTTEFDIFVHUyBbVW5pZmllZCBHcmFwaGljcyBTeXN0ZW1dCiAgIHJlcGVydG9yeSwgd2hpY2ggd2UndmUgcGxhY2VkIGluIHRoZSBub25wcmludGFibGUgMDIwMC4uMDIzNyByZWdpb24gb2YKICAgZWFjaCBIZXJzaGV5IFN5bWJvbCBmb250LiAgVGhhdCByZWdpb24gb2YgZWFjaCBTeW1ib2wgZm9udCwgbGlrZSB0aGUKICAgY29ycmVzcG9uZGluZyByZWdpb24gb2YgYWxsIG90aGVyIGZvbnRzLCBpcyBub3JtYWxseSBpbmFjY2Vzc2libGU7IGl0IGlzCiAgIGFjY2Vzc2libGUgb25seSB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgdHJhbnNsYXRpb25zLiAgKFRoZSBIZXJzaGV5CiAgIHpvZGlhY2FsIGdseXBocywgd2hpY2ggd2VyZSBhIGxhc3QtbWludXRlIGFkZGl0aW9uLCBhcmUgc2ltaWxhcmx5IHN0b3JlZAogICBpbiB0aGUgb3RoZXIgbm9ucHJpbnRhYmxlIHJhbmdlIDAwMC4uMDM3IG9mIHRoZSBTeW1ib2wgZm9udHMuKSAqLwoKI2RlZmluZSBOVU1fU1BFQ0lBTF9FU0NBUEVTIDQwCgpzdGF0aWMgY29uc3QgRXNjYXBlIF9zcGVjaWFsX2VzY2FwZV90YmxbTlVNX1NQRUNJQUxfRVNDQVBFU10gPQp7CiAgLyogem9kaWFjYWwgSGVyc2hleSBnbHlwaHMgKi8KICB7MDEsICJBUiIsICJhcmllcyJ9LAogIHswMiwgIlRBIiwgInRhdXJ1cyJ9LAogIHswMywgIkdFIiwgImdlbWluaSJ9LAogIHswNCwgIkNBIiwgImNhbmNlciJ9LAogIHswNSwgIkxFIiwgImxlbyJ9LAogIHswNiwgIlZJIiwgInZpcmdvIn0sCiAgezA3LCAiTEkiLCAibGlicmEifSwKICB7MDEwLCAiU0MiLCAic2NvcnBpbyJ9LAogIHswMTEsICJTRyIsICJzYWdpdHRhcml1cyJ9LAogIHswMTIsICJDUCIsICJjYXByaWNvcm51cyJ9LAogIHswMTMsICJBUSIsICJhcXVhcml1cyJ9LAogIHswMTQsICJQSSIsICJwaXNjZXMifSwKICAvKiBzb21lIHNwZWNpYWwgVUdTIGNoYXJhY3RlcnMgKi8KICB7MDIwNCwgIn4tIiwgIm1vZGlmaWVkY29uZ3J1ZW50In0sCiAgezAyMDUsICJoYiIsICJoYmFyIn0sCiAgezAyMDYsICJJQiIsICJpbnRlcmJhbmcifSwKICB7MDIwNywgIkxiIiwgImxhbWJkYWJhciJ9LAogIHswMjEwLCAiVUQiLCAidW5kZWZpbmVkIn0sCiAgLyogYXN0cm9ub21pY2FsIEhlcnNoZXkgZ2x5cGhzICovCiAgezAyMTEsICJTTyIsICJzdW4ifSwKICB7MDIxMiwgIk1FIiwgIm1lcmN1cnkifSwKICB7MDIxMywgIlZFIiwgInZlbnVzIn0sCiAgezAyMTQsICJFQSIsICJlYXJ0aCJ9LAogIHswMjE1LCAiTUEiLCAibWFycyJ9LAogIHswMjE2LCAiSlUiLCAianVwaXRlciJ9LAogIHswMjE3LCAiU0EiLCAic2F0dXJuIn0sCiAgezAyMjAsICJVUiIsICJ1cmFudXMifSwKICB7MDIyMSwgIk5FIiwgIm5lcHR1bmUifSwKICB7MDIyMiwgIlBMIiwgInBsdXRvIn0sCiAgezAyMjMsICJMVSIsICJtb29uIn0sCiAgezAyMjQsICJDVCIsICJjb21ldCJ9LAogIHswMjI1LCAiU1QiLCAic3RhciJ9LAogIHswMjI2LCAiQVMiLCAiYXNjZW5kaW5nbm9kZSJ9LAogIHswMjI3LCAiREUiLCAiZGVzY2VuZGluZ25vZGUifSwKICAvKiBmaW5hbCBgcycsIHRyZWF0ZWQgc3BlY2lhbGx5IGluIGdfY250cmxpZnkuYyAqLwojZGVmaW5lIEZJTkFMX0xPV0VSQ0FTRV9TIDAyMzAKICB7MDIzMCwgInMtIiwgInMxIn0sCiAgLyogbm9uLWFzdHJvbm9taWNhbCBIZXJzaGV5IGdseXBocyAqLwogIHswMjMxLCAiZGciLCAiZGFnZ2VyIn0sCiAgezAyMzIsICJkZCIsICJkYWdnZXJkYmwifSwKICB7MDIzMywgImxpIiwgImxpbmUgaW50ZWdyYWwifSwKICB7MDIzNCwgIi0rIiwgIm1pbnVzcGx1cyJ9LAogIHswMjM1LCAifHwiLCAicGFyYWxsZWwifSwKICAvKiBvdmVyYmFyIGFuZCB1bmRlcmJhciAod2hpY2ggbWFrZSBzZW5zZSBmb3IgYWxsIGZvbnRzLCBidXQgd2hpY2ggYXJlCiAgICAgaW1wbGVtZW50ZWQgZm9yIG5vbi1IZXJzaGV5IGZvbnRzIGluIGEgZGlmZmVyZW50IHdheSkgKi8KICB7MDIzNiwgInJuIiwgIm92ZXJzY29yZSJ9LAojZGVmaW5lIFZFQ1RPUl9TWU1CT0xfRk9OVF9VTkRFUlNDT1JFIDAyMzcKICB7MDIzNywgInVsIiwgInVuZGVyc2NvcmUifSwKfTsKCi8qIFRoZSBjaGFyYWN0ZXItdG8tc3VwZXJzY3JpcHQgbWFwcGluZyB0YWJsZSwgYXBwbHlpbmcgb25seSB0byBJU08tODg1OS0xCiAgIEhlcnNoZXkgZm9udHMuICBDZXJ0YWluIHByaW50YWJsZSA4LWJpdCBjaGFyYWN0ZXJzIGFyZSBkcmF3biBhcyBzbWFsbAogICByYWlzZWQgQVNDSUkgY2hhcmFjdGVycywgcG9zc2libHkgdW5kZXJsaW5lZC4gKi8KCnR5cGVkZWYgc3RydWN0CnsKICB1bnNpZ25lZCBjaGFyIGZyb20sIHRvOwogIGJvb2wgdW5kZXJzY29yZWQ7Cn0gUmFpc2VpbmZvOwoKI2RlZmluZSBOVU1fUkFJU0VEX0NIQVJTIDUKCnN0YXRpYyBjb25zdCBSYWlzZWluZm8gX3JhaXNlZF9jaGFyX3RibFtOVU1fUkFJU0VEX0NIQVJTXSA9CnsKICB7MTcwLCA5NywgdHJ1ZX0sCQkJLyogb3JkZmVtaW5pbmUgbWFwcGVkIHRvICdhJyAqLwogIHsxNzgsIDUwLCBmYWxzZX0sCQkJLyogdHdvc3VwZXJpb3IgbWFwcGVkIHRvICcyJyAqLwogIHsxNzksIDUxLCBmYWxzZX0sCQkJLyogdGhyZWVzdXBlcmlvciBtYXBwZWQgdG8gJzMnICovCiAgezE4NSwgNDksIGZhbHNlfSwJCQkvKiBvbmVzdXBlcmlvciBtYXBwZWQgdG8gJzEnICovCiAgezE4NiwgMTExLCB0cnVlfSwJCQkvKiBvcmRtYXNjdWxpbmUgbWFwcGVkIHRvICdvJyovCn07CgovKiBUaGUgc2luZ2xlLWNoYXJhY3RlciBgZGVsaWdhdHVyZScgdGFibGUsIGFwcGx5aW5nIHRvIGFsbCBJU08tODg1OS0xCiAgIEhlcnNoZXkgZm9udHMgKHNpbmNlIHRoZXkgZG8gbm90IGluY2x1ZGUgdGhlc2UgbGlnYXR1cmVzLCBleGNlcHQgZm9yCiAgIGdlcm1hbmRibHMgW2VzemV0XSBpbiBHb3RoaWMtR2VybWFuKS4gKi8KCnR5cGVkZWYgc3RydWN0CnsKICB1bnNpZ25lZCBjaGFyIGZyb207CiAgY29uc3QgY2hhciAqIHRvOwogIGludCBleGNlcHRfZm9udDsKfSBEZWxpZ2F0dXJlOwoKI2RlZmluZSBOVU1fREVMSUdBVFVSRURfQ0hBUlMgMwoKc3RhdGljIGNvbnN0IERlbGlnYXR1cmUgX2RlbGlnYXR1cmVfY2hhcl90YmxbTlVNX0RFTElHQVRVUkVEX0NIQVJTXSA9CnsKICB7MTk4LCAiQUUiLCA5OTl9LAogIHsyMzAsICJhZSIsIDk5OX0sCiAgezIyMywgInNzIiwgSEVSU0hFWV9HT1RISUNfR0VSTUFOfSwgIC8qIG5vIGRlbGlnYXR1cmUgb2YgIzIyMyBpbiBHLi1HZXJtYW4gKi8KfTsKCi8qIFNhbWUgYXMgcHJlY2VkaW5nLCBmb3IgZXNjYXBlIHNlcXVlbmNlcyByYXRoZXIgdGhhbiBmb3IgOC1iaXQKICAgSVNPLUxhdGluLTEgY2hhcnMgKi8KCnR5cGVkZWYgc3RydWN0CnsKICBjb25zdCBjaGFyICogZnJvbTsKICBjb25zdCBjaGFyICogdG87CiAgaW50IGV4Y2VwdF9mb250Owp9IERlbGlnYXR1cmVfZXNjYXBlOwoKI2RlZmluZSBOVU1fREVMSUdBVFVSRURfRVNDQVBFUyAzCgpzdGF0aWMgY29uc3QgRGVsaWdhdHVyZV9lc2NhcGUgX2RlbGlnYXR1cmVfZXNjYXBlX3RibFtOVU1fREVMSUdBVFVSRURfRVNDQVBFU10gPQp7CiAgeyJBRSIsICJBRSIsIDk5OX0sCiAgeyJhZSIsICJhZSIsIDk5OX0sCiAgeyJzcyIsICJzcyIsIEhFUlNIRVlfR09USElDX0dFUk1BTn0sICAgLyogbm8gZGVsaWdhdHVyZSBvZiBcc3MgaW4gR290aGljLUcuKi8KfTsKCi8qIEEgdGFibGUgb2YgdGhlIGxpZ2F0dXJlcyBwcmVzZW50IGluIHRoZSBIZXJzaGV5IGZvbnRzLiAgTGlnYXR1cml6YXRpb24KICAgaXMgYXV0b21hdGljOyBzZWUgZ19jbnRybGlmeS5jLiAgVGhlIGVzemV0IGxpZ2F0dXJlLCBmb3VuZCBvbmx5IGluCiAgIEhlcnNoZXlHb3RoaWMtR2VybWFuLCBpcyBub3QgbGlzdGVkIGhlcmUgYmVjYXVzZSBpdCBpcyBub3QgY29uc3RydWN0ZWQKICAgYXV0b21hdGljYWxseTsgdGhlIHVzZXIgbXVzdCByZXF1ZXN0IGl0LCB3aXRoIGVpdGhlciAiXHNzIiBvciAn3ycuICBUaGUKICAgdGFibGUgaGFzIHRoZSBsb25nZXIgbGlnYXR1cmVzIGZpcnN0IGJlY2F1c2UgaXQgaXMgc2Nhbm5lZCBmcm9tIGZpcnN0IHRvCiAgIGxhc3QsIHdpdGggc3RyY21wKCkuCgogICBUaGUgSGVyc2hleSBmb250cyBhcmUgaW5kaWNhdGVkIGJ5IHRoZWlyIGluZGV4IGluIHRoZSBpbnRlcm5hbCB0YWJsZSBvZgogICBmb250cywgaW4gZ19mb250ZGIuYy4gKi8KCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgZm9udDsKICBjb25zdCBjaGFyICogZnJvbTsKICB1bnNpZ25lZCBjaGFyIGJ5dGU7Cn0gTGlnYXR1cmU7CgojZGVmaW5lIE5VTV9MSUdBVFVSRVMgMjIKCnN0YXRpYyBjb25zdCBMaWdhdHVyZSBfbGlnYXR1cmVfdGJsW05VTV9MSUdBVFVSRVNdID0KewogIHtIRVJTSEVZX1NFUklGLCAiZmZpIiwgMDIwM30sCiAge0hFUlNIRVlfU0VSSUYsICJmZmwiLCAwMjA0fSwKICB7SEVSU0hFWV9TRVJJRiwgImZmIiwgMDIwMH0sCiAge0hFUlNIRVlfU0VSSUYsICJmaSIsIDAyMDF9LAogIHtIRVJTSEVZX1NFUklGLCAiZmwiLCAwMjAyfSwKICB7SEVSU0hFWV9TRVJJRl9JVEFMSUMsICJmZmkiLCAwMjAzfSwKICB7SEVSU0hFWV9TRVJJRl9JVEFMSUMsICJmZmwiLCAwMjA0fSwKICB7SEVSU0hFWV9TRVJJRl9JVEFMSUMsICJmZiIsIDAyMDB9LAogIHtIRVJTSEVZX1NFUklGX0lUQUxJQywgImZpIiwgMDIwMX0sCiAge0hFUlNIRVlfU0VSSUZfSVRBTElDLCAiZmwiLCAwMjAyfSwKICB7SEVSU0hFWV9HT1RISUNfR0VSTUFOLCAiY2giLCAwMjA2fSwKICB7SEVSU0hFWV9HT1RISUNfR0VSTUFOLCAidHoiLCAwMjA3fSwKICB7SEVSU0hFWV9DWVJJTExJQywgImZmaSIsIDAyMDN9LAogIHtIRVJTSEVZX0NZUklMTElDLCAiZmZsIiwgMDIwNH0sCiAge0hFUlNIRVlfQ1lSSUxMSUMsICJmZiIsIDAyMDB9LAogIHtIRVJTSEVZX0NZUklMTElDLCAiZmkiLCAwMjAxfSwKICB7SEVSU0hFWV9DWVJJTExJQywgImZsIiwgMDIwMn0sCiAge0hFUlNIRVlfRVVDLCAiZmZpIiwgMDIwM30sCiAge0hFUlNIRVlfRVVDLCAiZmZsIiwgMDIwNH0sCiAge0hFUlNIRVlfRVVDLCAiZmYiLCAwMjAwfSwKICB7SEVSU0hFWV9FVUMsICJmaSIsIDAyMDF9LAogIHtIRVJTSEVZX0VVQywgImZsIiwgMDIwMn0sCn07Cg==