LyoKICogTkVULkVYRSAtIFdpbmUtY29tcGF0aWJsZSBuZXQgcHJvZ3JhbQogKiBLT1JFQU4gbGFuZ3VhZ2Ugc3VwcG9ydAogKgogKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGltIFNjaHdhcnR6CiAqIENvcHlyaWdodCAoQykgMjAwNyBZdW5Tb25nIEh3YW5nIChoeXM1NDVAZHJlYW13aXouY29tKQogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0tPUkVBTiwgU1VCTEFOR19ORVVUUkFMCgpTVFJJTkdUQUJMRQp7CiAgICBTVFJJTkdfVVNBR0UsICLAzCC47bfJvu7AxyC5rrn9OlxuXG5ORVQgWyBIRUxQIHwgU1RBUlQgfCBTVE9QIF1cbiIKICAgIFNUUklOR19TVEFSVF9VU0FHRSwgIsH2waS1yCC8rbrxvbogIL3DwNsuXG4iCiAgICBTVFJJTkdfU1RPUF9VU0FHRSwgIsH2waS1yCC8rbrxvbogIMGkwfYuXG4iCiAgICBTVFJJTkdfU1RPUF9ERVAsICLAp8G4tcggvK268b26IMGkwfbB3zogJXNcbiIKICAgIFNUUklOR19DQU5UX1NUT1AsICIlcyC8rbrxvbq4piDBpMH2x9IgvPYgvvi9wLTPtNlcbiIKICAgIFNUUklOR19OT19TQ00sICK8rbrxvbogwaa+7iCw/LiuwNq4piC02bfqILz2IL74vcC0z7TZLlxuIgogICAgU1RSSU5HX05PX1NWQ0hBTkRMRSwgIrytuvG9urimILTZt+ogvPYgvvi9wLTPtNkuXG4iCiAgICBTVFJJTkdfU1RBUlRfU1ZDLCAiJXMgvK268b26tMIgvcPA28HfLlxuIgogICAgU1RSSU5HX1NUQVJUX1NWQ19TVUNDRVNTLCAiICVzILytuvG9uiC9w8DbILy6sPguXG4iCiAgICBTVFJJTkdfU1RBUlRfU1ZDX0ZBSUwsICIlcyC8rbrxvbogvcPA2yC9x8bQLlxuIgogICAgU1RSSU5HX1NUT1BfU1ZDLCAiJXMgILytuvG9uiDBpMH2LlxuIgogICAgU1RSSU5HX1NUT1BfU1ZDX1NVQ0NFU1MsICIlcyC8rbrxvbogwaTB9iC8urD4LlxuIgogICAgU1RSSU5HX1NUT1BfU1ZDX0ZBSUwsICIlcyC8rbrxvbogwaTB9iC9x8bQLlxuIgogICAgU1RSSU5HX0hFTFBfVVNBR0UsICK47bfJvu4gua65/TpcblxuTkVUIEhFTFAguO23yb7uIFxuICAgIC1vci1cbk5FVCC47bfJvu4gIC9IRUxQXG5cbiAgsKG0ycfRILjtt8m+7jpcbiAgIE5FVCBIRUxQICAgIE5FVCBTVEFSVCAgICAgTkVUIFNUT1BcbiIKfQo=