LyoKICogVHVya2lzaCBSZXNvdXJjZXMgZm9yIEhlbHAgVmlld2VyCiAqCiAqIENvcHlyaWdodCAyMDA2IEZhdGloIEH+/WP9IDxmYXNpY2lAbGludXgtc2V2ZW5sZXIub3JnPgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgovKiBNZW51ICovCgpNQUlOX01FTlUgTUVOVSBMQU5HVUFHRSBMQU5HX1RVUktJU0gsIFNVQkxBTkdfREVGQVVMVAp7CiBQT1BVUCAiJkRvc3lhIiB7CiAgTUVOVUlURU0gIiZB5yIsIE1OSURfRklMRV9PUEVOCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIllhJnpk/XIiLCBNTklEX0ZJTEVfUFJJTlQKICBNRU5VSVRFTSAiJllhev1j/SBheWFybGFy/S4uLiIsIE1OSURfRklMRV9TRVRVUAogICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJsf9a/3+IiwgTU5JRF9GSUxFX0VYSVQKIH0KIFBPUFVQICJE/CZ6ZW4iIHsKICAgTUVOVUlURU0gIksmb3B5YWxhLi4uIiwgTU5JRF9FRElUX0NPUFlETEcKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgIE1FTlVJVEVNICImQW5ub3RhdGUuLi4iLCBNTklEX0VESVRfQU5OT1RBVEUKIH0KIFBPUFVQICJZZXIg3SZtbGVyaSIgewogICBNRU5VSVRFTSAiJlRhbv1tbGEuLi4iLCBNTklEX0JLTUtfREVGSU5FCiB9CiBQT1BVUCAiJllhcmT9bSIgewogICBNRU5VSVRFTSAiJllhcmT9bSBLdWxsYW79bf0iLCBNTklEX0hFTFBfSEVMUE9OCiAgIE1FTlVJVEVNICImSGVyIFphbWFuINxzdHRlIiwgTU5JRF9IRUxQX0hFTFBUT1AKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgIE1FTlVJVEVNICImQmlsZ2kuLi4iLCBNTklEX0hFTFBfQUJPVVQKI2lmZGVmIFdJTkVMSUIKICAgTUVOVUlURU0gIldJTkUgJkhha2v9bmRhIiwgTU5JRF9IRUxQX1dJTkUKI2VuZGlmCiB9Cn0KCi8qIFN0cmluZ3MgKi8KU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUgTEFOR1VBR0UgTEFOR19UVVJLSVNILCBTVUJMQU5HX0RFRkFVTFQKewpTVElEX1dJTkVfSEVMUCwgCSJXSU5FIFlhcmT9bSIKU1RJRF9XSEVSUk9SLCAJCSJIQVRBIgpTVElEX1dBUk5JTkcsICAJCSJVWUFSSSIKU1RJRF9JTkZPLCAgCQkiQmlsZ2kiClNUSURfTk9UX0lNUExFTUVOVEVELCAJIkhlbvx6IHRhbWFtbGFubWFk/SIKU1RJRF9ITFBGSUxFX0VSUk9SX3MsIAkiJyVzJyB5YXJk/W0gZG9zeWFz/SBh5/1s/XJrZW4gaGF0YSIKU1RJRF9DT05URU5UUywgCQkiJt3naW5kZWtpbGVyIgpTVElEX1NFQVJDSCwgCQkiJkFyYSIKU1RJRF9CQUNLLCAJCSImR2VyaSIKU1RJRF9ISVNUT1JZLCAJCSJHZSbnbWn+IgpTVElEX1RPUElDUywJCSImS29udWxhciIKU1RJRF9BTExfRklMRVMsIAkiVPxtIGRvc3lhbGFyICgqLiopIgpTVElEX0hFTFBfRklMRVNfSExQLCAJIllhcmT9bSBkb3N5YWxhcv0gKCouaGxwKSIKU1RJRF9GSUxFX05PVF9GT1VORF9zCSJDYW5ub3QgZmluZCAnJXMnLiBEbyB5b3Ugd2FudCB0byBmaW5kIHRoaXMgZmlsZSB5b3Vyc2VsZj8iCn0K