LyoKICogIENsb2NrIChGcmVuY2ggcmVzb3VyY2VzKQogKgogKiBDb3B5cmlnaHQgMTk5OCBSb2JlcnQgUG91bGlvdCA8a3J5bm9zQGNsaWMubmV0PgogKiBDb3B5cmlnaHQgMjAwMiBTeWx2YWluIFBldHJlb2xsZSA8c3BldHJlb2xsZUB5YWhvby5mcj4KICogQ29weXJpZ2h0IDIwMDYgSm9uYXRoYW4gRXJuc3QgPGpvbmF0aGFuQGVybnN0ZmFtaWx5LmNoPgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAiY2xvY2tfcmVzLmgiCgpMQU5HVUFHRSBMQU5HX0ZSRU5DSCwgU1VCTEFOR19ORVVUUkFMCgpNQUlOX01FTlUgTUVOVQp7CiBQT1BVUCAiJlByb3Byael06XMiIHsKICBNRU5VSVRFTSAiQW5hJmxvZ2lxdWUiLCBJRE1fQU5BTE9HCiAgTUVOVUlURU0gIiZOdW3pcmlxdWUiLCBJRE1fRElHSVRBTAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImUG9saWNlLi4uIiwgSURNX0ZPTlQKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiU2FucyAmYmFycmUgZGUgdGl0cmUiLCBJRE1fTk9USVRMRQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImU2Vjb25kZXMiLCBJRE1fU0VDT05EUwogIE1FTlVJVEVNICImRGF0ZSIsIElETV9EQVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZUb3Vqb3VycyB2aXNpYmxlIiwgSURNX09OVE9QCiB9CiBQT1BVUCAiSW5mJm8iIHsKICBNRU5VSVRFTSAiJkxpY2VuY2UuLi4iLCBJRE1fTElDRU5TRQogIE1FTlVJVEVNICJBVUNVTkUgJkdBUkFOVElFLi4uIiwgSURNX05PV0FSUkFOVFkKICBNRU5VSVRFTSAiwCAmcHJvcG9zIGRlIGwnaG9ybG9nZSIsIElETV9BQk9VVAogfQp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CklEU19DTE9DSywgIkhvcmxvZ2UiCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFIExBTkdVQUdFIExBTkdfRlJFTkNILCBTVUJMQU5HX05FVVRSQUwKewpJRFNfTElDRU5TRV9DQVBUSU9OLCAgICAgICAgICAgICJMSUNFTkNFIgpJRFNfTElDRU5TRSwKIkNlIHByb2dyYW1tZSBlc3QgdW4gbG9naWNpZWwgbGlicmWgOyB2b3VzIHBvdXZleiBsZSByZWRpc3RyaWJ1ZXIgZXQvb3UgXApsZSBtb2RpZmllciBzdWl2YW50IGxlcyB0ZXJtZXMgZGUgbGEgTGljZW5jZSBH6W7pcmFsZSBQdWJsaXF1ZSBMaW1pdOllIEdOVSBcCnRlbGxlIHF1ZSBwdWJsaellIHBhciBsYSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb26gOyBzb2l0IGxhIHZlcnNpb24gMi4xIFwKZGUgbGEgTGljZW5zZSwgc29pdCAo4CB2b3RyZSBncukpIHRvdXRlIHZlcnNpb24gdWx06XJpZXVyZS5cblwKQ2UgcHJvZ3JhbW1lIGVzdCBkaXN0cmlidekgZGFucyBsJ2VzcG9pciBxdSdpbCBzZXJhIHV0aWxlLCBtYWlzIFwKU0FOUyBBVUNVTkUgR0FSQU5USUWgOiBzYW5zIG3qbWUgbGEgZ2FyYW50aWUgaW1wbGljaXRlIGRlIFwKQ09NTUVSQ0lBTElTQUJJTElUySBvdSBkJ0FEyVFVQVRJT04gwCBVTiBPQkpFQ1RJRiBQQVJUSUNVTElFUi4gQ29uc3VsdGV6IFwKbGEgTGljZW5jZSBH6W7pcmFsZSBQdWJsaXF1ZSBMaW1pdOllIHBvdXIgcGx1cyBkZSBk6XRhaWxzLlxuXApWb3VzIGRldnJpZXogYXZvaXIgcmXndSB1bmUgY29waWUgZGUgbGEgTGljZW5jZSBH6W7pcmFsZSBQdWJsaXF1ZSBMaW1pdOllIFwKR05VIGF2ZWMgY2UgcHJvZ3JhbW1loDsgc2kgY2Ugbidlc3QgcGFzIGxlIGNhcywg6WNyaXZleiDgIGxhoDogXApGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBcCk1BIDAyMTEwLTEzMDEsIFVTQS4iCgpJRFNfV0FSUkFOVFlfQ0FQVElPTiwgIkFVQ1VORSBHQVJBTlRJRSIKSURTX1dBUlJBTlRZLAoiQ2UgcHJvZ3JhbW1lIGVzdCBkaXN0cmlidekgZGFucyBsJ2VzcG9pciBxdSdpbCBzZXJhIHV0aWxlLCBtYWlzIFwKU0FOUyBBVUNVTkUgR0FSQU5USUWgOiBzYW5zIG3qbWUgbGEgZ2FyYW50aWUgaW1wbGljaXRlIGRlIFwKQ09NTUVSQ0lBTElTQUJJTElUySBvdSBkJ0FEyVFVQVRJT04gwCBVTiBPQkpFQ1RJRiBQQVJUSUNVTElFUi4gQ29uc3VsdGV6IFwKbGEgTGljZW5jZSBH6W7pcmFsZSBQdWJsaXF1ZSBMaW1pdOllIHBvdXIgcGx1cyBkZSBk6XRhaWxzLiIKfQo=