LyoKICogUmVnZWRpdCByZXNvdXJjZXMKICoKICogQ29weXJpZ2h0IDIwMDQgSGFqaW1lIFNlZ2F3YQogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0pBUEFORVNFLCBTVUJMQU5HX0RFRkFVTFQKCi8qCiAqIE1lbnUKICovCgpJRENfUkVHRURJVCBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAig3SDQINDg4soJkYpIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAij0mXuSgmeCkiLCAgICAgICAgICAgICAgICAgICAgICAgSURfUkVHSVNUUllfRVhJVAogICAgRU5ECiAgICBQT1BVUCAiJkhlbHAiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICKDb4Fbg1eDh4OTj+6V8SgmQSkuLi4iLCAgICAgICAgICAgICAgICAgIElEX0hFTFBfQUJPVVQKICAgIEVORApFTkQKCklEUl9SRUdFRElUX01FTlUgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgogICAgUE9QVVAgIoOMg1eDWINng4ooJlIpIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAig4yDV4NYg2eDioLMg0ODk4N8gVuDZygmSSkuLi4iLCAgICBJRF9SRUdJU1RSWV9JTVBPUlRSRUdJU1RSWUZJTEUKICAgICAgICBNRU5VSVRFTSAig4yDV4NYg2eDioLMg0eDToNYg3yBW4NnKCZFKS4uLiIsICAgIElEX1JFR0lTVFJZX0VYUE9SVFJFR0lTVFJZRklMRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICKDbINig2eDj4Fbg06DjINXg1iDZ4OKgsmQ2pGxKCZDKS4uLiIsIElEX1JFR0lTVFJZX0NPTk5FQ1RORVRXT1JLUkVHSVNUUlksIEdSQVlFRAogICAgICAgIE1FTlVJVEVNICKDbINig2eDj4Fbg06DjINXg1iDZ4OKgqmC55DYkmYoJkQpLi4uIiwgSURfUkVHSVNUUllfRElTQ09OTkVDVE5FVFdPUktSRUdJU1RSWSwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIojzjfwoJlApXHRDdHJsK1AiLCAgICAgICAgICAgICAgSURfUkVHSVNUUllfUFJJTlQsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICKPSZe5KCZ4KSIsICAgICAgICAgICAgICAgICAgICAgICBJRF9SRUdJU1RSWV9FWElUCiAgICBFTkQKICAgIFBPUFVQICKV0o9XKCZFKSIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIpXPjVgoJk0pIiwgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX01PRElGWQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIFBPUFVQICKQVotLKCZOKSIKICAgICAgICBCRUdJTgogICAgICAgICAgICBNRU5VSVRFTSAig0yBWygmSykiLCAgICAgICAgICAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0tFWQogICAgICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICAgICAgTUVOVUlURU0gIpW2jpqX8SgmUykiLCAgICAgICAgICAgICAgIElEX0VESVRfTkVXX1NUUklOR1ZBTFVFCiAgICAgICAgICAgIE1FTlVJVEVNICKDb4NDg2mDiigmQikiLCAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0JJTkFSWVZBTFVFCiAgICAgICAgICAgIE1FTlVJVEVNICJEV09SRJJsKCZEKSIsICAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0RXT1JEVkFMVUUKICAgICAgICBFTkQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAije2PnCgmRClcdERlbCIsICAgICAgICAgICAgICAgIElEX0VESVRfREVMRVRFCiAgICAgICAgTUVOVUlURU0gIpa8kU+CzJXPjVgoJlIpXHRGMiIsICAgICAgICAgICAgICAgICBJRF9FRElUX1JFTkFNRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICKDTIFblryC8INSg3OBWygmQykiLCAgICAgICAgICAgICAgSURfRURJVF9DT1BZS0VZTkFNRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICKMn431KCZGKVx0Q3RybCtGIiwgICAgICAgICAgICAgICBJRF9FRElUX0ZJTkQsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNICKOn4LMjJ+N9YzzleIoJngpXHRGMyIsICAgICAgICAgICAgICBJRF9FRElUX0ZJTkRORVhULCBHUkFZRUQKICAgIEVORAogICAgUE9QVVAgIpVcjqYoJlYpIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAig1iDZYFbg16DWINvgVsoJkIpIiwgICAgICAgICAgICAgICAgIElEX1ZJRVdfU1RBVFVTQkFSCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIpWqioQoJmwpIiwgICAgICAgICAgICAgICAgICAgICAgSURfVklFV19TUExJVAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICKDioN0g4yDYoNWg4UoJlIpXHRGNSIsICAgICAgICAgICAgICAgIElEX1ZJRVdfUkVGUkVTSAogICAgRU5ECiAgICBQT1BVUCAigqiLQ4LJk/yC6CgmRikiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICKCqItDgsmT/ILogsmSx4nBKCZBKSIsICAgICAgICAgIElEX0ZBVk9SSVRFU19BRERUT0ZBVk9SSVRFUwogICAgICAgICwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gIoKoi0OCyZP8guiCqYLnje2PnCgmUikiLCAgICAgICAgICAgSURfRkFWT1JJVEVTX1JFTU9WRUZBVk9SSVRFCiAgICAgICAgLCBHUkFZRUQKICAgIEVORAogICAgUE9QVVAgIoN3g4uDdigmSCkiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICKDd4OLg3YoJkgpXHRGMSIsICAgICAgICAgICAgSURfSEVMUF9IRUxQVE9QSUNTCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIoNvgVuDV4OHg5OP7pXxKCZBKSIsICAgICAgSURfSEVMUF9BQk9VVAogICAgRU5ECkVORAoKSURSX1BPUFVQX01FTlVTIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KICBQT1BVUCAiIgogIEJFR0lOCglNRU5VSVRFTSAilc+NWCgmTSkiLCAgICAgICAgICAgICAgICAgICAgIElEX0VESVRfTU9ESUZZCglNRU5VSVRFTSAig2+DQ4Npg4qDZoFbg16C8JXPjVgiLCAgICAgICAgICBJRF9FRElUX01PRElGWV9CSU4KCU1FTlVJVEVNIFNFUEFSQVRPUgoJTUVOVUlURU0gIo3tj5woJkQpXHREZWwiLCAgICAgICAgICAgICAgICBJRF9FRElUX0RFTEVURQoJTUVOVUlURU0gIpa8kU+CzJXPjVgoJlIpIiwgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX1JFTkFNRQogIEVORAogIFBPUFVQICIiCiAgQkVHSU4KICAgICAgICBQT1BVUCAikFaLSygmTikiCiAgICAgICAgQkVHSU4KICAgICAgICAgICAgTUVOVUlURU0gIoNMgVsoJkspIiwgICAgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX05FV19LRVkKICAgICAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgICAgIE1FTlVJVEVNICKVto6al/EoJlMpIiwgICAgICAgICAgICAgICBJRF9FRElUX05FV19TVFJJTkdWQUxVRQogICAgICAgICAgICBNRU5VSVRFTSAig2+DQ4Npg4ooJkIpIiwgICAgICAgICAgICAgICBJRF9FRElUX05FV19CSU5BUllWQUxVRQogICAgICAgICAgICBNRU5VSVRFTSAiRFdPUkSSbCgmRCkiLCAgICAgICAgICAgICAgICBJRF9FRElUX05FV19EV09SRFZBTFVFCiAgICAgICAgRU5ECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIo3tj5woJkQpXHREZWwiLCAgICAgICAgICAgICAgICBJRF9FRElUX0RFTEVURQogICAgICAgIE1FTlVJVEVNICKWvJFPgsyVz41YKCZSKVx0RjIiLCAgICAgICAgICAgICAgICAgSURfRURJVF9SRU5BTUUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAig0yBW5a8gvCDUoNzgVsoJkMpIiwgICAgICAgICAgICAgIElEX0VESVRfQ09QWUtFWU5BTUUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAijJ+N9SgmRilcdEN0cmwrRiIsICAgICAgICAgICAgICAgSURfRURJVF9GSU5ELCBHUkFZRUQKICBFTkQKRU5ECgoKLyoKICogRGlhbG9nCiAqLwoKSUREX0FCT1VUQk9YIERJQUxPRyBESVNDQVJEQUJMRSAgMjIsIDE3LCAyMzAsIDc1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICKDjINXg1iDZ4OKg0eDZoNCg16CyYLCgqKCxCIKRk9OVCA5LCAiTVMgVUkgR290aGljIgpCRUdJTgogICAgSUNPTiAgICAgICAgICAgIElESV9SRUdFRElULElESV9SRUdFRElULDE0LDksMTYsMTYKICAgIExURVhUICAgICAgICAgICAiUmVhY3RPUyCDjINXg1iDZ4OKg0eDZoNCg14gg2+BW4NXg4eDkyAxLjAiLElEQ19TVEFUSUMsNDksMTAsMTE5LDgsCiAgICAgICAgICAgICAgICAgICAgU1NfTk9QUkVGSVgKICAgIExURVhUICAgICAgICAgICAiQ29weXJpZ2h0IChDKSAyMDAyIFJlYWN0T1MgVGVhbSIsSURDX1NUQVRJQyw0OSwyMCwxMTksOAogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsSURPSywxOTUsNiwzMCwxMSxXU19HUk9VUApFTkQKCklERF9FRElUX1NUUklORyBESUFMT0cgRElTQ0FSREFCTEUgIDIyLCAxNywgMjEwLCA3NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAilbaOmpfxgsyV0o9XIgpGT05UIDksICJNUyBVSSBHb3RoaWMiCkJFR0lOCiAgICBMVEVYVCAgICAgICAgICAgIpJsgsyWvJFPOiIsSURDX1NUQVRJQyw1LDUsMTE5LDgKICAgIEVESVRURVhUICAgICAgICBJRENfVkFMVUVfTkFNRSw1LDE1LDIwMCwxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUCB8IFdTX0RJU0FCTEVECiAgICBMVEVYVCAgICAgICAgICAgIoNmgVuDXjoiLElEQ19TVEFUSUMsNSwzMCwxMTksOAogICAgRURJVFRFWFQgICAgICAgIElEQ19WQUxVRV9EQVRBLDUsNDAsMjAwLDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIixJRE9LLDE0MCw2MCwzMCwxMSxXU19HUk9VUAogICAgUFVTSEJVVFRPTiAgICKDTIODg5ODWoOLIixJRENBTkNFTCwxNzUsNjAsMzAsMTEsV1NfR1JPVVAKRU5ECgpJRERfRURJVF9EV09SRCBESUFMT0cgRElTQ0FSREFCTEUgIDIyLCAxNywgMjEwLCAxMDAKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIkRXT1JEkmyCzJXSj1ciCkZPTlQgOSwgIk1TIFVJIEdvdGhpYyIKQkVHSU4KICAgIExURVhUICAgICAgICAgICAikmyCzJa8kU86IixJRENfU1RBVElDLDUsNSwxMTksOAogICAgRURJVFRFWFQgICAgICAgIElEQ19WQUxVRV9OQU1FLDUsMTUsMjAwLDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QIHwgV1NfRElTQUJMRUQKICAgIExURVhUICAgICAgICAgICAig2aBW4NeOiIsSURDX1NUQVRJQyw1LDMwLDkwLDgKICAgIEVESVRURVhUICAgICAgICBJRENfVkFMVUVfREFUQSw1LDQwLDkwLDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCiAgICBHUk9VUEJPWCAgICAgICAgIoN4gVuDWCIsIElEQ19EV09SRF9CQVNFLCAxMjAsIDMwLCA4NSwgMzcsIEJTX0dST1VQQk9YCiAgICBBVVRPUkFESU9CVVRUT04gIjE2kGmQlCIsIElEQ19EV09SRF9IRVgsIDEzMCwgNDAsIDYwLCAxMCwgV1NfVEFCU1RPUAogICAgQVVUT1JBRElPQlVUVE9OICIxMJBpkJQiLCBJRENfRFdPUkRfREVDLCAxMzAsIDUyLCA2MCwgMTAsIFdTX1RBQlNUT1AKICAgIERFRlBVU0hCVVRUT04gICAiT0siLElET0ssMTQwLDgwLDMwLDExLFdTX0dST1VQCiAgICBQVVNIQlVUVE9OICAgIoNMg4ODk4Nag4siLElEQ0FOQ0VMLDE3NSw4MCwzMCwxMSxXU19HUk9VUApFTkQKCi8qCiAqIFN0cmluZyBUYWJsZQogKi8KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRFNfTElTVF9DT0xVTU5fTkFNRSAgICAilryRTyIKICAgIElEU19MSVNUX0NPTFVNTl9UWVBFICAgICKDXoNDg3YiCiAgICBJRFNfTElTVF9DT0xVTU5fREFUQSAgICAig2aBW4NeIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRFNfQVBQX1RJVExFICAgICAgICAgICAig4yDV4NYg2eDioNHg2aDQoNeIgogICAgSURDX1JFR0VESVQgICAgICAgICAgICAgIlJFR0VESVQiCiAgICBJRENfUkVHRURJVF9GUkFNRSAgICAgICAiUkVHRURJVF9GUkFNRSIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURfUkVHSVNUUllfTUVOVSAgICAgICAgIoOMg1eDWINng4qRU5HMgvCRgI3sgreC6YNSg32Dk4NoIgogICAgSURfRURJVF9NRU5VICAgICAgICAgICAgIpJsgsaDTIFbgvCV0o9XgreC6YNSg32Dk4NoIgogICAgSURfVklFV19NRU5VICAgICAgICAgICAgIoOMg1eDWINng4qDRYNCg5ODaINFgvCDSoNYg16DfYNDg1mCt4Lpg1KDfYOTg2giCiAgICBJRF9GQVZPUklURVNfTUVOVSAgICAgICAiguaCrY5ngqSDTIFbgsmDQYNOg1qDWIK3gumDUoN9g5ODaCIKICAgIElEX0hFTFBfTUVOVSAgICAgICAgICAgICKDjINXg1iDZ4OKg0eDZoNCg16CyYLCgqKCxILMg3eDi4N2guKP7pXxgvCVXI6mgreC6YNSg32Dk4NoIgogICAgSURfRURJVF9ORVdfTUVOVSAgICAgICAgIpBWgrWCooNMgVuC4pJsgvCN7JCsgreC6YNSg32Dk4NoIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRF9FRElUX01PRElGWSAgICAgICAgICAikmyCzINmgVuDXoLwlc+NWCIKICAgIElEX0VESVRfTkVXX0tFWSAgICAgICAgICKQVoK1gqKDTIFbgvCSx4nBIgogICAgSURfRURJVF9ORVdfU1RSSU5HVkFMVUUgIpBWgrWCopW2jpqX8YLwkseJwSIKICAgIElEX0VESVRfTkVXX0JJTkFSWVZBTFVFICKQVoK1gqKDb4NDg2mDioLwkseJwSIKICAgIElEX0VESVRfTkVXX0RXT1JEVkFMVUUgICKQVoK1gqJEV09SRJJsgvCSx4nBIgogICAgSURfUkVHSVNUUllfSU1QT1JUUkVHSVNUUllGSUxFICKDZYNMg1iDZ4N0g0CDQ4OLgvCDjINXg1iDZ4OKgsmDQ4OTg3yBW4NnIgogICAgSURfUkVHSVNUUllfRVhQT1JUUkVHSVNUUllGSUxFCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAig4yDV4NYg2eDioLMiOqVlILcgr2CzZFTlZSC8INlg0yDWINng3SDQINDg4uCyYNHg06DWIN8gVuDZyIKICAgIElEX1JFR0lTVFJZX0NPTk5FQ1RORVRXT1JLUkVHSVNUUlkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICKDioOCgVuDZ4NSg5ODc4OFgVuDXoLMg4yDV4NYg2eDioLJkNqRsSIKICAgIElEX1JFR0lTVFJZX0RJU0NPTk5FQ1RORVRXT1JLUkVHSVNUUlkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICKDioOCgVuDZ4NSg5ODc4OFgVuDXoLMg4yDV4NYg2eDioKpgueQ2JJmIgogICAgSURfUkVHSVNUUllfUFJJTlQgICAgICAgIoOMg1eDWINng4qCzIjqlZSC3IK9gs2RU5WUgvCI8438IgovKiAgICBJRF9IRUxQX0hFTFBUT1BJQ1MgICAgICAig4yDV4NYg2eDioNHg2aDQoNegsyDd4OLg3aC8IpKgq0iICovCiAgICBJRF9IRUxQX0FCT1VUICAgICAgICAgICAig3aDjYNPg4mDgILMj+6V8YFBg2+BW4NXg4eDk4FBkpiN7I7SgvCVXI6mIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRF9SRUdJU1RSWV9FWElUICAgICAgICAig4yDV4NYg2eDioNHg2aDQoNegvCPSZe5IgogICAgSURfRkFWT1JJVEVTX0FERFRPRkFWT1JJVEVTICKDTIFbgvCCqItDgsmT/ILogsmSx4nBIgogICAgSURfRkFWT1JJVEVTX1JFTU9WRUZBVk9SSVRFICKDTIFbgvCCqItDgsmT/ILogqmC543tj5wiCiAgICBJRF9WSUVXX1NUQVRVU0JBUiAgICAgICAig1iDZYFbg16DWINvgVuC8JVcjqaBRYlCgrciCiAgICBJRF9WSUVXX1NQTElUICAgICAgICAgICAig3mDQ4OTitSCzIK1gquC6ILMiMqSdYLwlc+NWCIKICAgIElEX1ZJRVdfUkVGUkVTSCAgICAgICAgICKDRYNCg5ODaINFgvCDioN0g4yDYoNWg4UiCiAgICBJRF9FRElUX0RFTEVURSAgICAgICAgICAikUmR8IK1gr2NgJbagvCN7Y+cIgogICAgSURfRURJVF9SRU5BTUUgICAgICAgICAgIpFJkfCCtYK9jYCW2oLMlryRT4Lwlc+NWCIKICAgIElEX0VESVRfQ09QWUtFWU5BTUUgICAgICKRSZHwgrWCvYNMgVuCzJa8kU+C8INOg4qDYoN2g3uBW4NogsmDUoNzgVsiCiAgICBJRF9FRElUX0ZJTkQgICAgICAgICAgICAig0yBW4FBkmyBQYNmgVuDXoKpgueVto6al/GC8IyfjfUiCiAgICBJRF9FRElUX0ZJTkRORVhUICAgICAgICAiiMiRT4LMjJ+N9Y/wjI+CyYKogqKCxI6fgsyM85XigvCMn431IgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRFNfRVJST1IJCSAgICAig0eDiYFbIgogICAgSURTX0JBRF9LRVkJCSAgICAig0yBWyAnJXMngqqPipO+gsWCq4LcgrmC8SIKICAgIElEU19CQURfVkFMVUUgICAgICAgICAgICKSbCAnJXMngqqPipO+gsWCq4LcgrmC8SIKICAgIElEU19VTlNVUFBPUlRFRF9UWVBFICAgICKCsYLMg16DQ4N2gsyDTIFbgs2V0o9XgsWCq4LcgrmC8SAoJWxkKSIKICAgIElEU19UT09fQklHX1ZBTFVFICAgICAgICKSbIKqkeWCq4K3gqyC3IK3ICglbGQpIgogICAgSURTX0RFTEVURV9CT1hfVElUTEUgICAgIpJsgsyN7Y+cim2URiIKICAgIElEU19ERUxFVEVfQk9YX1RFWFQgICAgICKWe5OWgskgJyVzJ4Lwje2PnIK1gtyCt4KpPyIKICAgIElEU19ORVdLRVkgICAgICAgICAgICAgICKQVoK1gqKDTIFbICMlZCIKICAgIElEU19ORVdWQUxVRSAgICAgICAgICAgICKQVoK1gqKSbCAjJWQiCkVORAoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCi8qCiAqIERpYWxvZwogKi8KCklERF9ESUFMT0cxIERJQUxPRyBESVNDQVJEQUJMRSAgNTAsIDUwLCAyNjgsIDk4ClNUWUxFIERTXzNETE9PSyB8IERTX0NPTlRST0wgfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19DTElQU0lCTElOR1MgfAogICAgV1NfQk9SREVSCkZPTlQgOSwgIk1TIFVJIEdvdGhpYyIKQkVHSU4KRU5ECgpJRERfRElBTE9HMiBESUFMT0cgRElTQ0FSREFCTEUgIDAsIDAsIDE4NywgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAig1+DQ4NBg42DTyIKRk9OVCA5LCAiTVMgVUkgR290aGljIgpCRUdJTgogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsSURPSywxMzAsNyw1MCwxNAogICAgUFVTSEJVVFRPTiAgICAgICKDTIODg5ODWoOLIixJRENBTkNFTCwxMzAsMjQsNTAsMTQKRU5ECgoKLyoKICogVEVYVElOQ0xVREUKICovCgoxIFRFWFRJTkNMVURFIERJU0NBUkRBQkxFCkJFR0lOCiAgICAicmVzb3VyY2UuaFwwIgpFTkQKCgoKLyoKICogU3RyaW5nIFRhYmxlCiAqLwoKLyoKICpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQogKkJFR0lOCiAqICAgIElEX0hFTFBfSEVMUFRPUElDUyAgICAgICKDjINXg1iDZ4OKg0eDZoNCg16CzIN3g4uDdoLwikqCrSIKICogICAgSURfSEVMUF9BQk9VVCAgICAgICAgICAgIoN2g42DT4OJg4CCzI/ulfGBQYNvgVuDV4OHg5OBQZKYjeyO0oLwlVyOpiIKICpFTkQKICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCg==