LyoKICogUmVnZWRpdCByZXNvdXJjZXMKICoKICogQ29weXJpZ2h0IDIwMDQgSGFqaW1lIFNlZ2F3YQogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0pBUEFORVNFLCBTVUJMQU5HX0RFRkFVTFQKCi8qCiAqIE1lbnUKICovCgpJRENfUkVHRURJVCBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAig3SDQINDg4soJkYpIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAij0mXuSgmeCkiLCAgICAgICAgICAgICAgICAgICAgICAgSURfUkVHSVNUUllfRVhJVAogICAgRU5ECiAgICBQT1BVUCAiJkhlbHAiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICKDb4Fbg1eDh4OTj+6V8SgmQSkuLi4iLCAgICAgICAgICAgICAgICAgIElEX0hFTFBfQUJPVVQKICAgIEVORApFTkQKCklEUl9SRUdFRElUX01FTlUgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgogICAgUE9QVVAgIoOMg1eDWINng4ooJlIpIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAig4yDV4NYg2eDioLMg0ODk4N8gVuDZygmSSkuLi4iLCAgICBJRF9SRUdJU1RSWV9JTVBPUlRSRUdJU1RSWUZJTEUKICAgICAgICBNRU5VSVRFTSAig4yDV4NYg2eDioLMg0eDToNYg3yBW4NnKCZFKS4uLiIsICAgIElEX1JFR0lTVFJZX0VYUE9SVFJFR0lTVFJZRklMRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICKDbINig2eDj4Fbg06DjINXg1iDZ4OKgsmQ2pGxKCZDKS4uLiIsIElEX1JFR0lTVFJZX0NPTk5FQ1RORVRXT1JLUkVHSVNUUlksIEdSQVlFRAogICAgICAgIE1FTlVJVEVNICKDbINig2eDj4Fbg06DjINXg1iDZ4OKgqmC55DYkmYoJkQpLi4uIiwgSURfUkVHSVNUUllfRElTQ09OTkVDVE5FVFdPUktSRUdJU1RSWSwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIojzjfwoJlApXHRDdHJsK1AiLCAgICAgICAgICAgICAgSURfUkVHSVNUUllfUFJJTlQsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICKPSZe5KCZ4KSIsICAgICAgICAgICAgICAgICAgICAgICBJRF9SRUdJU1RSWV9FWElUCiAgICBFTkQKICAgIFBPUFVQICKV0o9XKCZFKSIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIpXPjVgoJk0pIiwgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX01PRElGWQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIFBPUFVQICKQVotLKCZOKSIKICAgICAgICBCRUdJTgogICAgICAgICAgICBNRU5VSVRFTSAig0yBWygmSykiLCAgICAgICAgICAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0tFWQogICAgICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICAgICAgTUVOVUlURU0gIpW2jpqX8SgmUykiLCAgICAgICAgICAgICAgIElEX0VESVRfTkVXX1NUUklOR1ZBTFVFCiAgICAgICAgICAgIE1FTlVJVEVNICKDb4NDg2mDiigmQikiLCAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0JJTkFSWVZBTFVFCiAgICAgICAgICAgIE1FTlVJVEVNICJEV09SRJJsKCZEKSIsICAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0RXT1JEVkFMVUUKICAgICAgICBFTkQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAije2PnCgmRClcdERlbCIsICAgICAgICAgICAgICAgIElEX0VESVRfREVMRVRFCiAgICAgICAgTUVOVUlURU0gIpa8kU+CzJXPjVgoJlIpXHRGMiIsICAgICAgICAgICAgICAgICBJRF9FRElUX1JFTkFNRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICKDTIFblryC8INSg3OBWygmQykiLCAgICAgICAgICAgICAgSURfRURJVF9DT1BZS0VZTkFNRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICKMn431KCZGKVx0Q3RybCtGIiwgICAgICAgICAgICAgICBJRF9FRElUX0ZJTkQsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNICKOn4LMjJ+N9YzzleIoJngpXHRGMyIsICAgICAgICAgICAgICBJRF9FRElUX0ZJTkRORVhULCBHUkFZRUQKICAgIEVORAogICAgUE9QVVAgIpVcjqYoJlYpIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAig1iDZYFbg16DWINvgVsoJkIpIiwgICAgICAgICAgICAgICAgIElEX1ZJRVdfU1RBVFVTQkFSCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIpWqioQoJmwpIiwgICAgICAgICAgICAgICAgICAgICAgSURfVklFV19TUExJVAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICKDioN0g4yDYoNWg4UoJlIpXHRGNSIsICAgICAgICAgICAgICAgIElEX1ZJRVdfUkVGUkVTSAogICAgRU5ECiAgICBQT1BVUCAigqiLQ4LJk/yC6CgmRikiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICKCqItDgsmT/ILogsmSx4nBKCZBKSIsICAgICAgICAgIElEX0ZBVk9SSVRFU19BRERUT0ZBVk9SSVRFUwogICAgICAgICwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gIoKoi0OCyZP8guiCqYLnje2PnCgmUikiLCAgICAgICAgICAgSURfRkFWT1JJVEVTX1JFTU9WRUZBVk9SSVRFCiAgICAgICAgLCBHUkFZRUQKICAgIEVORAogICAgUE9QVVAgIoN3g4uDdigmSCkiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICKDd4OLg3YoJkgpXHRGMSIsICAgICAgICAgICAgSURfSEVMUF9IRUxQVE9QSUNTCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIoNvgVuDV4OHg5OP7pXxKCZBKSIsICAgICAgSURfSEVMUF9BQk9VVAogICAgRU5ECkVORAoKSURSX1BPUFVQX01FTlVTIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KICBQT1BVUCAiIgogIEJFR0lOCglNRU5VSVRFTSAilc+NWCgmTSkiLCAgICAgICAgICAgICAgICAgICAgIElEX0VESVRfTU9ESUZZCglNRU5VSVRFTSAig2+DQ4Npg4qDZoFbg16C8JXPjVgiLCAgICAgICAgICBJRF9FRElUX01PRElGWV9CSU4KCU1FTlVJVEVNIFNFUEFSQVRPUgoJTUVOVUlURU0gIo3tj5woJkQpXHREZWwiLCAgICAgICAgICAgICAgICBJRF9FRElUX0RFTEVURQoJTUVOVUlURU0gIpa8kU+CzJXPjVgoJlIpIiwgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX1JFTkFNRQogIEVORAogIFBPUFVQICIiCiAgQkVHSU4KICAgICAgICBQT1BVUCAikFaLSygmTikiCiAgICAgICAgQkVHSU4KICAgICAgICAgICAgTUVOVUlURU0gIoNMgVsoJkspIiwgICAgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX05FV19LRVkKICAgICAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgICAgIE1FTlVJVEVNICKVto6al/EoJlMpIiwgICAgICAgICAgICAgICBJRF9FRElUX05FV19TVFJJTkdWQUxVRQogICAgICAgICAgICBNRU5VSVRFTSAig2+DQ4Npg4ooJkIpIiwgICAgICAgICAgICAgICBJRF9FRElUX05FV19CSU5BUllWQUxVRQogICAgICAgICAgICBNRU5VSVRFTSAiRFdPUkSSbCgmRCkiLCAgICAgICAgICAgICAgICBJRF9FRElUX05FV19EV09SRFZBTFVFCiAgICAgICAgRU5ECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIo3tj5woJkQpXHREZWwiLCAgICAgICAgICAgICAgICBJRF9FRElUX0RFTEVURQogICAgICAgIE1FTlVJVEVNICKWvJFPgsyVz41YKCZSKVx0RjIiLCAgICAgICAgICAgICAgICAgSURfRURJVF9SRU5BTUUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAig0yBW5a8gvCDUoNzgVsoJkMpIiwgICAgICAgICAgICAgIElEX0VESVRfQ09QWUtFWU5BTUUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAijJ+N9SgmRilcdEN0cmwrRiIsICAgICAgICAgICAgICAgSURfRURJVF9GSU5ELCBHUkFZRUQKICBFTkQKRU5ECgoKLyoKICogRGlhbG9nCiAqLwoKSUREX0FCT1VUQk9YIERJQUxPRyBESVNDQVJEQUJMRSAgMjIsIDE3LCAyMzAsIDc1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICKDjINXg1iDZ4OKg0eDZoNCg16CyYLCgqKCxCIKRk9OVCA5LCAiTVMgVUkgR290aGljIgpCRUdJTgogICAgSUNPTiAgICAgICAgICAgIElESV9SRUdFRElULElESV9SRUdFRElULDE0LDksMTYsMTYKICAgIExURVhUICAgICAgICAgICAiUmVhY3RPUyCDjINXg1iDZ4OKg0eDZoNCg14gg2+BW4NXg4eDkyAxLjAiLElEQ19TVEFUSUMsNDksMTAsMTE5LDgsCiAgICAgICAgICAgICAgICAgICAgU1NfTk9QUkVGSVgKICAgIExURVhUICAgICAgICAgICAiQ29weXJpZ2h0IChDKSAyMDAyIFJlYWN0T1MgVGVhbSIsSURDX1NUQVRJQyw0OSwyMCwxMTksOAogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsSURPSywxOTUsNiwzMCwxMSxXU19HUk9VUApFTkQKCklERF9FRElUX1NUUklORyBESUFMT0cgRElTQ0FSREFCTEUgIDIyLCAxNywgMjEwLCA3NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAilbaOmpfxgsyV0o9XIgpGT05UIDksICJNUyBVSSBHb3RoaWMiCkJFR0lOCiAgICBMVEVYVCAgICAgICAgICAgIpJsgsyWvJFPOiIsSURDX1NUQVRJQyw1LDUsMTE5LDgKICAgIEVESVRURVhUICAgICAgICBJRENfVkFMVUVfTkFNRSw1LDE1LDIwMCwxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUCB8IFdTX0RJU0FCTEVECiAgICBMVEVYVCAgICAgICAgICAgIoNmgVuDXjoiLElEQ19TVEFUSUMsNSwzMCwxMTksOAogICAgRURJVFRFWFQgICAgICAgIElEQ19WQUxVRV9EQVRBLDUsNDAsMjAwLDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QIHwgRVNfQVVUT0hTQ1JPTEwKICAgIERFRlBVU0hCVVRUT04gICAiT0siLElET0ssMTQwLDYwLDMwLDExLFdTX0dST1VQCiAgICBQVVNIQlVUVE9OICAgIoNMg4ODk4Nag4siLElEQ0FOQ0VMLDE3NSw2MCwzMCwxMSxXU19HUk9VUApFTkQKCklERF9FRElUX0RXT1JEIERJQUxPRyBESVNDQVJEQUJMRSAgMjIsIDE3LCAyMTAsIDEwMApTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiRFdPUkSSbILMldKPVyIKRk9OVCA5LCAiTVMgVUkgR290aGljIgpCRUdJTgogICAgTFRFWFQgICAgICAgICAgICKSbILMlryRTzoiLElEQ19TVEFUSUMsNSw1LDExOSw4CiAgICBFRElUVEVYVCAgICAgICAgSURDX1ZBTFVFX05BTUUsNSwxNSwyMDAsMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AgfCBXU19ESVNBQkxFRAogICAgTFRFWFQgICAgICAgICAgICKDZoFbg146IixJRENfU1RBVElDLDUsMzAsOTAsOAogICAgRURJVFRFWFQgICAgICAgIElEQ19WQUxVRV9EQVRBLDUsNDAsOTAsMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKICAgIEdST1VQQk9YICAgICAgICAig3iBW4NYIiwgSURDX0RXT1JEX0JBU0UsIDEyMCwgMzAsIDg1LCAzNywgQlNfR1JPVVBCT1gKICAgIEFVVE9SQURJT0JVVFRPTiAiMTaQaZCUIiwgSURDX0RXT1JEX0hFWCwgMTMwLCA0MCwgNjAsIDEwLCBXU19UQUJTVE9QCiAgICBBVVRPUkFESU9CVVRUT04gIjEwkGmQlCIsIElEQ19EV09SRF9ERUMsIDEzMCwgNTIsIDYwLCAxMCwgV1NfVEFCU1RPUAogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsSURPSywxNDAsODAsMzAsMTEsV1NfR1JPVVAKICAgIFBVU0hCVVRUT04gICAig0yDg4OTg1qDiyIsSURDQU5DRUwsMTc1LDgwLDMwLDExLFdTX0dST1VQCkVORAoKLyoKICogU3RyaW5nIFRhYmxlCiAqLwoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEU19MSVNUX0NPTFVNTl9OQU1FICAgICKWvJFPIgogICAgSURTX0xJU1RfQ09MVU1OX1RZUEUgICAgIoNeg0ODdiIKICAgIElEU19MSVNUX0NPTFVNTl9EQVRBICAgICKDZoFbg14iCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEU19BUFBfVElUTEUgICAgICAgICAgICKDjINXg1iDZ4OKg0eDZoNCg14iCiAgICBJRENfUkVHRURJVCAgICAgICAgICAgICAiUkVHRURJVCIKICAgIElEQ19SRUdFRElUX0ZSQU1FICAgICAgICJSRUdFRElUX0ZSQU1FIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRF9SRUdJU1RSWV9NRU5VICAgICAgICAig4yDV4NYg2eDipFTkcyC8JGAjeyCt4Lpg1KDfYOTg2giCiAgICBJRF9FRElUX01FTlUgICAgICAgICAgICAikmyCxoNMgVuC8JXSj1eCt4Lpg1KDfYOTg2giCiAgICBJRF9WSUVXX01FTlUgICAgICAgICAgICAig4yDV4NYg2eDioNFg0KDk4Nog0WC8INKg1iDXoN9g0ODWYK3gumDUoN9g5ODaCIKICAgIElEX0ZBVk9SSVRFU19NRU5VICAgICAgICKC5oKtjmeCpINMgVuCyYNBg06DWoNYgreC6YNSg32Dk4NoIgogICAgSURfSEVMUF9NRU5VICAgICAgICAgICAgIoOMg1eDWINng4qDR4Nmg0KDXoLJgsKCooLEgsyDd4OLg3aC4o/ulfGC8JVcjqaCt4Lpg1KDfYOTg2giCiAgICBJRF9FRElUX05FV19NRU5VICAgICAgICAikFaCtYKig0yBW4LikmyC8I3skKyCt4Lpg1KDfYOTg2giCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEX0VESVRfTU9ESUZZICAgICAgICAgICKSbILMg2aBW4NegvCVz41YIgogICAgSURfRURJVF9ORVdfS0VZICAgICAgICAgIpBWgrWCooNMgVuC8JLHicEiCiAgICBJRF9FRElUX05FV19TVFJJTkdWQUxVRSAikFaCtYKilbaOmpfxgvCSx4nBIgogICAgSURfRURJVF9ORVdfQklOQVJZVkFMVUUgIpBWgrWCooNvg0ODaYOKgvCSx4nBIgogICAgSURfRURJVF9ORVdfRFdPUkRWQUxVRSAgIpBWgrWCokRXT1JEkmyC8JLHicEiCiAgICBJRF9SRUdJU1RSWV9JTVBPUlRSRUdJU1RSWUZJTEUgIoNlg0yDWINng3SDQINDg4uC8IOMg1eDWINng4qCyYNDg5ODfIFbg2ciCiAgICBJRF9SRUdJU1RSWV9FWFBPUlRSRUdJU1RSWUZJTEUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICKDjINXg1iDZ4OKgsyI6pWUgtyCvYLNkVOVlILwg2WDTINYg2eDdINAg0ODi4LJg0eDToNYg3yBW4NnIgogICAgSURfUkVHSVNUUllfQ09OTkVDVE5FVFdPUktSRUdJU1RSWQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIoOKg4KBW4Nng1KDk4Nzg4WBW4NegsyDjINXg1iDZ4OKgsmQ2pGxIgogICAgSURfUkVHSVNUUllfRElTQ09OTkVDVE5FVFdPUktSRUdJU1RSWQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIoOKg4KBW4Nng1KDk4Nzg4WBW4NegsyDjINXg1iDZ4OKgqmC55DYkmYiCiAgICBJRF9SRUdJU1RSWV9QUklOVCAgICAgICAig4yDV4NYg2eDioLMiOqVlILcgr2CzZFTlZSC8IjzjfwiCi8qICAgIElEX0hFTFBfSEVMUFRPUElDUyAgICAgICKDjINXg1iDZ4OKg0eDZoNCg16CzIN3g4uDdoLwikqCrSIgKi8KICAgIElEX0hFTFBfQUJPVVQgICAgICAgICAgICKDdoONg0+DiYOAgsyP7pXxgUGDb4Fbg1eDh4OTgUGSmI3sjtKC8JVcjqYiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEX1JFR0lTVFJZX0VYSVQgICAgICAgICKDjINXg1iDZ4OKg0eDZoNCg16C8I9Jl7kiCiAgICBJRF9GQVZPUklURVNfQUREVE9GQVZPUklURVMgIoNMgVuC8IKoi0OCyZP8guiCyZLHicEiCiAgICBJRF9GQVZPUklURVNfUkVNT1ZFRkFWT1JJVEUgIoNMgVuC8IKoi0OCyZP8guiCqYLnje2PnCIKICAgIElEX1ZJRVdfU1RBVFVTQkFSICAgICAgICKDWINlgVuDXoNYg2+BW4LwlVyOpoFFiUKCtyIKICAgIElEX1ZJRVdfU1BMSVQgICAgICAgICAgICKDeYNDg5OK1ILMgrWCq4LogsyIypJ1gvCVz41YIgogICAgSURfVklFV19SRUZSRVNIICAgICAgICAgIoNFg0KDk4Nog0WC8IOKg3SDjINig1aDhSIKICAgIElEX0VESVRfREVMRVRFICAgICAgICAgICKRSZHwgrWCvY2AltqC8I3tj5wiCiAgICBJRF9FRElUX1JFTkFNRSAgICAgICAgICAikUmR8IK1gr2NgJbagsyWvJFPgvCVz41YIgogICAgSURfRURJVF9DT1BZS0VZTkFNRSAgICAgIpFJkfCCtYK9g0yBW4LMlryRT4Lwg06DioNig3aDe4Fbg2iCyYNSg3OBWyIKICAgIElEX0VESVRfRklORCAgICAgICAgICAgICKDTIFbgUGSbIFBg2aBW4NegqmC55W2jpqX8YLwjJ+N9SIKICAgIElEX0VESVRfRklORE5FWFQgICAgICAgICKIyJFPgsyMn431j/CMj4LJgqiCooLEjp+CzIzzleKC8IyfjfUiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEU19FUlJPUgkJICAgICKDR4OJgVsiCiAgICBJRFNfQkFEX0tFWQkJICAgICKDTIFbICclcyeCqo+Kk76CxYKrgtyCuYLxIgogICAgSURTX0JBRF9WQUxVRSAgICAgICAgICAgIpJsICclcyeCqo+Kk76CxYKrgtyCuYLxIgogICAgSURTX1VOU1VQUE9SVEVEX1RZUEUgICAgIoKxgsyDXoNDg3aCzINMgVuCzZXSj1eCxYKrgtyCuYLxICglbGQpIgogICAgSURTX1RPT19CSUdfVkFMVUUgICAgICAgIpJsgqqR5YKrgreCrILcgrcgKCVsZCkiCiAgICBJRFNfREVMRVRFX0JPWF9USVRMRSAgICAikmyCzI3tj5yKbZRGIgogICAgSURTX0RFTEVURV9CT1hfVEVYVCAgICAgIpZ7k5aCySAnJXMngvCN7Y+cgrWC3IK3gqk/IgogICAgSURTX05FV0tFWSAgICAgICAgICAgICAgIpBWgrWCooNMgVsgIyVkIgogICAgSURTX05FV1ZBTFVFICAgICAgICAgICAgIpBWgrWCopJsICMlZCIKRU5ECgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKLyoKICogRGlhbG9nCiAqLwoKSUREX0RJQUxPRzEgRElBTE9HIERJU0NBUkRBQkxFICA1MCwgNTAsIDI2OCwgOTgKU1RZTEUgRFNfM0RMT09LIHwgRFNfQ09OVFJPTCB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0NMSVBTSUJMSU5HUyB8CiAgICBXU19CT1JERVIKRk9OVCA5LCAiTVMgVUkgR290aGljIgpCRUdJTgpFTkQKCklERF9ESUFMT0cyIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMTg3LCA5NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICKDX4NDg0GDjYNPIgpGT05UIDksICJNUyBVSSBHb3RoaWMiCkJFR0lOCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIixJRE9LLDEzMCw3LDUwLDE0CiAgICBQVVNIQlVUVE9OICAgICAgIoNMg4ODk4Nag4siLElEQ0FOQ0VMLDEzMCwyNCw1MCwxNApFTkQKCgovKgogKiBURVhUSU5DTFVERQogKi8KCjEgVEVYVElOQ0xVREUgRElTQ0FSREFCTEUKQkVHSU4KICAgICJyZXNvdXJjZS5oXDAiCkVORAoKCgovKgogKiBTdHJpbmcgVGFibGUKICovCgovKgogKlNUUklOR1RBQkxFIERJU0NBUkRBQkxFCiAqQkVHSU4KICogICAgSURfSEVMUF9IRUxQVE9QSUNTICAgICAgIoOMg1eDWINng4qDR4Nmg0KDXoLMg3eDi4N2gvCKSoKtIgogKiAgICBJRF9IRUxQX0FCT1VUICAgICAgICAgICAig3aDjYNPg4mDgILMj+6V8YFBg2+BW4NXg4eDk4FBkpiN7I7SgvCVXI6mIgogKkVORAogKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K