LyoKICogQ29weXJpZ2h0IDIwMDYgQW5kcmFzIEtvdmFjcwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAicmVzb3VyY2UuaCIKCkxBTkdVQUdFIExBTkdfSFVOR0FSSUFOLCBTVUJMQU5HX0RFRkFVTFQKCklERF9QUk9YWURMRyBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI1MCwgMTU0ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIkjhbPN6YXRpIGplbHN68yBtZWdhZOFzYSIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiBMVEVYVCAiS+lyZW0gYWRqYSBtZWcgYSBmZWxoYXN6buFs825ldmV0LCDpcyBqZWxzevN0OiIsIC0xLCA0MCwgNiwgMTUwLCAxNQogTFRFWFQgIlByb3h5IiwgLTEsIDQwLCAyNiwgNTAsIDEwCiBMVEVYVCAiQ3NvcG9ydCIsIC0xLCA0MCwgNDYsIDUwLCAxMAogTFRFWFQgIkZlbGhhc3pu4WzzIiwgLTEsIDQwLCA2NiwgNTAsIDEwCiBMVEVYVCAiSmVsc3rzIiwgLTEsIDQwLCA4NiwgNTAsIDEwCiBMVEVYVCAiIiBJRENfUFJPWFksIDgwLCAyNiwgMTUwLCAxNCwgMAogTFRFWFQgIiIgSURDX1JFQUxNLCA4MCwgNDYsIDE1MCwgMTQsIDAKIEVESVRURVhUIElEQ19VU0VSTkFNRSwgODAsIDY2LCAxNTAsIDE0LCBFU19BVVRPSFNDUk9MTCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKIEVESVRURVhUIElEQ19QQVNTV09SRCwgODAsIDg2LCAxNTAsIDE0LCBFU19BVVRPSFNDUk9MTCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AgfCBFU19QQVNTV09SRAogQ0hFQ0tCT1ggIiZKZWxzevMgbWVudOlzZSAobmVtIGJpenRvbnPhZ29zKSIsIElEQ19TQVZFUEFTU1dPUkQsCiAgICAgICAgICAgODAsIDEwNiwgMTUwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICJPSyIsIElET0ssIDk4LCAxMjYsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QIHwgQlNfREVGUFVTSEJVVFRPTgogUFVTSEJVVFRPTiAiTelnc2UiLCBJRENBTkNFTCwgMTU4LCAxMjYsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKICBJRFNfTEFOQ09OTkVDVElPTiAiTEFOIGthcGNzb2xhdCIKfQo=