LyoKICogSGVscCBWaWV3ZXIgKFNsb3ZlbmlhbiBSZXNvdXJjZXMpCiAqCiAqIENvcHlyaWdodCAyMDAyIFJvayBNYW5kZWxqYyA8cm9rLm1hbmRlbGpjQGdpbWIub3JnPgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgovKiBNZW51ICovCgpNQUlOX01FTlUgTUVOVSBMQU5HVUFHRSBMQU5HX1NMT1ZFTklBTiwgU1VCTEFOR19ERUZBVUxUCnsKIFBPUFVQICImRGF0b3Rla2EiIHsKICBNRU5VSVRFTSAiJk9kcHJpIC4uLiIsIE1OSURfRklMRV9PUEVOCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIk5hJnRpc25pIHRlbW8gLi4uIiwgTU5JRF9GSUxFX1BSSU5UCiAgTUVOVUlURU0gIiZQcmlwcmF2YSB0aXNrYWxuaWthIiwgTU5JRF9GSUxFX1NFVFVQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIkl6JmhvZCIsIE1OSURfRklMRV9FWElUCiB9CiBQT1BVUCAiJlVyZWphbmplIiB7CiAgIE1FTlVJVEVNICImS29waXJhaiIsIE1OSURfRURJVF9DT1BZRExHCiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICBNRU5VSVRFTSAiJlByaXBvbWJlIC4uLiIsIE1OSURfRURJVF9BTk5PVEFURQogfQogUE9QVVAgIiZaYXpuYW1layIgewogICBNRU5VSVRFTSAiJkRvbG/oaSAuLi4iLCBNTklEX0JLTUtfREVGSU5FCiB9CiBQT1BVUCAiJlBvbW/oIiB7CiAgIE1FTlVJVEVNICImTyBwb21v6GkiLCBNTklEX0hFTFBfSEVMUE9OCiAgIE1FTlVJVEVNICJWZWRubyBuYSAmdnJodSIsIE1OSURfSEVMUF9IRUxQVE9QCiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICBNRU5VSVRFTSAiJkluZm9ybWFjaWplIC4uLiIsIE1OSURfSEVMUF9BQk9VVAojaWZkZWYgV0lORUxJQgogICBNRU5VSVRFTSAiJk8gV0lORSIsIE1OSURfSEVMUF9XSU5FCiNlbmRpZgogfQp9CgovKiBTdHJpbmdzICovClNUUklOR1RBQkxFIERJU0NBUkRBQkxFIExBTkdVQUdFIExBTkdfU0xPVkVOSUFOLCBTVUJMQU5HX0RFRkFVTFQKewpTVElEX1dJTkVfSEVMUCwgCQkiV0lORSBQb21v6CIKU1RJRF9XSEVSUk9SLCAJCSJOQVBBS0EiClNUSURfV0FSTklORywgIAkJIk9QT1pPUklMTyIKU1RJRF9JTkZPLCAgCQkJIkluZm9ybWFjaWphIgpTVElEX05PVF9JTVBMRU1FTlRFRCwgCSJOaSAommUpIG5hIHZvbGpvIgpTVElEX0hMUEZJTEVfRVJST1JfcywgCSJOYXBha2EgcHJpIGJyYW5qdSBkYXRvdGVrZSBgJXMnIgpTVElEX0NPTlRFTlRTLCAJCSImVGVtZSBwb21v6GkiClNUSURfU0VBUkNILCAJCSImSXNrYW5qZSIKU1RJRF9CQUNLLCAJCQkiJk5hemFqIgpTVElEX0hJU1RPUlksIAkJIiZaZ29kb3ZpbmEiClNUSURfQUxMX0ZJTEVTLCAJCSJWc2UgZGF0aXRla2UgKCouKikiClNUSURfSEVMUF9GSUxFU19ITFAsIAkiRGF0b3Rla2UgcyBwb21v6GpvICgqLmhscCkiCn0K