LyoKICoJT0xFMk5MUyBsaWJyYXJ5CiAqCiAqCUNvcHlyaWdodCAxOTk1CU1hcnRpbiB2b24gTG9ld2lzCiAqLwoKLyoJQXQgdGhlIG1vbWVudCwgdGhlc2UgYXJlIG9ubHkgZW1wdHkgc3R1YnMuCiAqLwoKI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSAid2luZG93cy5oIgojaW5jbHVkZSAib2xlLmgiCiNpbmNsdWRlICJ3aW5ubHMuaCIKI2luY2x1ZGUgInN0ZGRlYnVnLmgiCiNpbmNsdWRlICJkZWJ1Zy5oIgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgICBHZXRVc2VyRGVmYXVsdExDSUQgICAgICAgKE9MRTJOTFMuMSkKICovCkRXT1JEIFdJTkFQSSBHZXRVc2VyRGVmYXVsdExDSUQoKQp7Ci8qIERlZmF1bHQgc29ydGluZywgbmV1dHJhbCBzdWJsYW5ndWFnZSAqLwojaWYgI0xBTkcoRW4pCglyZXR1cm4gOTsKI2VsaWYgI0xBTkcoRGUpCglyZXR1cm4gNzsKI2VsaWYgI0xBTkcoTm8pCglyZXR1cm4gMHgxNDsKI2Vsc2UKCS8qIE5ldXRyYWwgbGFuZ3VhZ2UgKi8KCXJldHVybiAwOwojZW5kaWYKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgR2V0U3lzdGVtRGVmYXVsdExDSUQgICAgICAgKE9MRTJOTFMuMikKICovCkRXT1JEIFdJTkFQSSBHZXRTeXN0ZW1EZWZhdWx0TENJRCgpCnsKCXJldHVybiBHZXRVc2VyRGVmYXVsdExDSUQoKTsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgR2V0VXNlckRlZmF1bHRMYW5nSUQgICAgICAgKE9MRTJOTFMuMykKICovCldPUkQgV0lOQVBJIEdldFVzZXJEZWZhdWx0TGFuZ0lEKCkKewoJcmV0dXJuIChXT1JEKUdldFVzZXJEZWZhdWx0TENJRCgpOwp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICBHZXRTeXN0ZW1EZWZhdWx0TGFuZ0lEICAgICAoT0xFMk5MUy40KQogKi8KV09SRCBXSU5BUEkgR2V0U3lzdGVtRGVmYXVsdExhbmdJRCgpCnsKCXJldHVybiBHZXRVc2VyRGVmYXVsdExhbmdJRCgpOwp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICBHZXRMb2NhbGVJbmZvQSAgICAgICAgICAgICAoT0xFMk5MUy41KQogKiBJcyB0aGUgbGFzdCBwYXJhbWV0ZXIgcmVhbGx5IFdPUkQgZm9yIFdpbjE2PwogKi8KaW50IFdJTkFQSSBHZXRMb2NhbGVJbmZvQShEV09SRCBsY2lkLERXT1JEIExDVHlwZSxMUFNUUiBidWYsV09SRCBsZW4pCnsKCWNoYXIgKnJldFN0cmluZzsKICAgIGludCByZXRMZW47CiAgICBkcHJpbnRmX29sZShzdGRkZWIsIkdldExvY2FsZUluZm9BKCU4bFgsJThsWCwlcCwlNFgpXG4iLAoJCQlsY2lkLExDVHlwZSxidWYsbGVuKTsKCS8qIFdpbmUgaXMgc3VwcG9ydGluZyBvbmx5IHRoZSBkZWZhdWx0IGxvY2FsZSAqLwoJaWYobGNpZCE9R2V0VXNlckRlZmF1bHRMQ0lEKCkpCgl7CgkJZHByaW50Zl9vbGUoc3RkbmltcCwiR2V0TG9jYWxlSW5mb0E6IFVua25vd24gbG9jYWxlXG4iKTsKCQlyZXR1cm4gMDsKCX0KCS8qIEFzIGFuIG9wdGlvbiwgd2UgY291bGQgb2J0YWluIHRoZSB2YWx1ZSBmcm9tIHdpbi5pbmkuCgkgICBUaGlzIHdvdWxkIG5vdCBtYXRjaCB0aGUgV2luZSBjb21waWxlLXRpbWUgb3B0aW9uLgoJICAgQWxzbywgbm90IGFsbCBpZGVudGlmaWVycyBhcmUgYXZhaWxhYmxlIGZyb20gd2luLmluaSAqLwoJcmV0U3RyaW5nPTA7CglyZXRMZW49MDsKCS8qIElmIHdlIGFyZSB0aHJvdWdoIGFsbCBvZiB0aGlzLCByZXRMZW4gc2hvdWxkIG5vdCBiZSB6ZXJvIGFueW1vcmUuCgkgICBJZiBpdCBpcywgdGhlIHZhbHVlIGlzIG5vdCBzdXBwb3J0ZWQgKi8KI2RlZmluZSBMT0NWQUwodHlwZSx2YWx1ZSkJaWYodHlwZT09TENUeXBlKQkJCVwKCQkJCQkJCQl7cmV0TGVuPXN0cmxlbih2YWx1ZSkrMTtcCgkJCQkJCQkJIHJldFN0cmluZz12YWx1ZTsgICAgICAgXAoJCQkJCQkJCX0KI2RlZmluZSBVTlNVUFBPUlRFRCh0eXBlKSAgIGlmKHR5cGU9PWxjaWQpcmV0U3RyaW5nPSN0eXBlOwoKLyogSSByZWFsbHkgd2lzaCBJIHdvdWxkIGtub3cgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgKi8KVU5TVVBQT1JURUQoTE9DQUxFX0lMQU5HVUFHRSkKVU5TVVBQT1JURUQoTE9DQUxFX1NMQU5HVUFHRSkKVU5TVVBQT1JURUQoTE9DQUxFX1NFTkdMQU5HVUFHRSkKVU5TVVBQT1JURUQoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSkKVU5TVVBQT1JURUQoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSkKVU5TVVBQT1JURUQoTE9DQUxFX0lDT1VOVFJZKQpVTlNVUFBPUlRFRChMT0NBTEVfU0NPVU5UUlkpClVOU1VQUE9SVEVEKExPQ0FMRV9TRU5HQ09VTlRSWSkKVU5TVVBQT1JURUQoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSkKVU5TVVBQT1JURUQoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSkKVU5TVVBQT1JURUQoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UpClVOU1VQUE9SVEVEKExPQ0FMRV9JREVGQVVMVENPVU5UUlkpClVOU1VQUE9SVEVEKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKQpVTlNVUFBPUlRFRChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpClVOU1VQUE9SVEVEKExPQ0FMRV9TTElTVCkKVU5TVVBQT1JURUQoTE9DQUxFX0lNRUFTVVJFKQpVTlNVUFBPUlRFRChMT0NBTEVfU0RFQ0lNQUwpClVOU1VQUE9SVEVEKExPQ0FMRV9TVEhPVVNBTkQpClVOU1VQUE9SVEVEKExPQ0FMRV9TR1JPVVBJTkcpClVOU1VQUE9SVEVEKExPQ0FMRV9JRElHSVRTKQpVTlNVUFBPUlRFRChMT0NBTEVfSUxaRVJPKQpVTlNVUFBPUlRFRChMT0NBTEVfSU5FR05VTUJFUikKVU5TVVBQT1JURUQoTE9DQUxFX1NOQVRJVkVESUdJVFMpClVOU1VQUE9SVEVEKExPQ0FMRV9TQ1VSUkVOQ1kpClVOU1VQUE9SVEVEKExPQ0FMRV9TSU5UTFNZTUJPTCkKVU5TVVBQT1JURUQoTE9DQUxFX1NNT05ERUNJTUFMU0VQKQpVTlNVUFBPUlRFRChMT0NBTEVfU01PTlRIT1VTQU5EU0VQKQpVTlNVUFBPUlRFRChMT0NBTEVfU01PTkdST1VQSU5HKQpVTlNVUFBPUlRFRChMT0NBTEVfSUNVUlJESUdJVFMpClVOU1VQUE9SVEVEKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpClVOU1VQUE9SVEVEKExPQ0FMRV9JQ1VSUkVOQ1kpClVOU1VQUE9SVEVEKExPQ0FMRV9JTkVHQ1VSUikKVU5TVVBQT1JURUQoTE9DQUxFX1NEQVRFKQpVTlNVUFBPUlRFRChMT0NBTEVfU1RJTUUpClVOU1VQUE9SVEVEKExPQ0FMRV9TU0hPUlREQVRFKQpVTlNVUFBPUlRFRChMT0NBTEVfU0xPTkdEQVRFKQpVTlNVUFBPUlRFRChMT0NBTEVfU1RJTUVGT1JNQVQpClVOU1VQUE9SVEVEKExPQ0FMRV9JREFURSkKVU5TVVBQT1JURUQoTE9DQUxFX0lMREFURSkKVU5TVVBQT1JURUQoTE9DQUxFX0lUSU1FKQpVTlNVUFBPUlRFRChMT0NBTEVfSVRJTUVNQVJLUE9TTikKVU5TVVBQT1JURUQoTE9DQUxFX0lDRU5UVVJZKQpVTlNVUFBPUlRFRChMT0NBTEVfSVRMWkVSTykKVU5TVVBQT1JURUQoTE9DQUxFX0lEQVlMWkVSTykKVU5TVVBQT1JURUQoTE9DQUxFX0lNT05MWkVSTykKVU5TVVBQT1JURUQoTE9DQUxFX1MxMTU5KQpVTlNVUFBPUlRFRChMT0NBTEVfUzIzNTkpClVOU1VQUE9SVEVEKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKQpVTlNVUFBPUlRFRChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpClVOU1VQUE9SVEVEKExPQ0FMRV9JRklSU1REQVlPRldFRUspClVOU1VQUE9SVEVEKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKQpVTlNVUFBPUlRFRChMT0NBTEVfU0RBWU5BTUUxKQpVTlNVUFBPUlRFRChMT0NBTEVfU0RBWU5BTUUyKQpVTlNVUFBPUlRFRChMT0NBTEVfU0RBWU5BTUUzKQpVTlNVUFBPUlRFRChMT0NBTEVfU0RBWU5BTUU0KQpVTlNVUFBPUlRFRChMT0NBTEVfU0RBWU5BTUU1KQpVTlNVUFBPUlRFRChMT0NBTEVfU0RBWU5BTUU2KQpVTlNVUFBPUlRFRChMT0NBTEVfU0RBWU5BTUU3KQpVTlNVUFBPUlRFRChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxKQpVTlNVUFBPUlRFRChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyKQpVTlNVUFBPUlRFRChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzKQpVTlNVUFBPUlRFRChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0KQpVTlNVUFBPUlRFRChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1KQpVTlNVUFBPUlRFRChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2KQpVTlNVUFBPUlRFRChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3KQpVTlNVUFBPUlRFRChMT0NBTEVfU01PTlRITkFNRTEpClVOU1VQUE9SVEVEKExPQ0FMRV9TTU9OVEhOQU1FMikKVU5TVVBQT1JURUQoTE9DQUxFX1NNT05USE5BTUUzKQpVTlNVUFBPUlRFRChMT0NBTEVfU01PTlRITkFNRTQpClVOU1VQUE9SVEVEKExPQ0FMRV9TTU9OVEhOQU1FNSkKVU5TVVBQT1JURUQoTE9DQUxFX1NNT05USE5BTUU2KQpVTlNVUFBPUlRFRChMT0NBTEVfU01PTlRITkFNRTcpClVOU1VQUE9SVEVEKExPQ0FMRV9TTU9OVEhOQU1FOCkKVU5TVVBQT1JURUQoTE9DQUxFX1NNT05USE5BTUU5KQpVTlNVUFBPUlRFRChMT0NBTEVfU01PTlRITkFNRTEwKQpVTlNVUFBPUlRFRChMT0NBTEVfU01PTlRITkFNRTExKQpVTlNVUFBPUlRFRChMT0NBTEVfU01PTlRITkFNRTEyKQpVTlNVUFBPUlRFRChMT0NBTEVfU01PTlRITkFNRTEzKQpVTlNVUFBPUlRFRChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMikKVU5TVVBQT1JURUQoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzKQpVTlNVUFBPUlRFRChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSkKVU5TVVBQT1JURUQoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2KQpVTlNVUFBPUlRFRChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCkKVU5TVVBQT1JURUQoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5KQpVTlNVUFBPUlRFRChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwKQpVTlNVUFBPUlRFRChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExKQpVTlNVUFBPUlRFRChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyKQpVTlNVUFBPUlRFRChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzKQpVTlNVUFBPUlRFRChMT0NBTEVfU1BPU0lUSVZFU0lHTikKVU5TVVBQT1JURUQoTE9DQUxFX1NORUdBVElWRVNJR04pClVOU1VQUE9SVEVEKExPQ0FMRV9JUE9TU0lHTlBPU04pClVOU1VQUE9SVEVEKExPQ0FMRV9JTkVHU0lHTlBPU04pClVOU1VQUE9SVEVEKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMpClVOU1VQUE9SVEVEKExPQ0FMRV9JUE9TU0VQQllTUEFDRSkKVU5TVVBQT1JURUQoTE9DQUxFX0lORUdTWU1QUkVDRURFUykKVU5TVVBQT1JURUQoTE9DQUxFX0lORUdTRVBCWVNQQUNFKQoKLyogTm93LCB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWMgZGVmaW5pdGlvbnMuIFRoZXkgZG9uJ3QgaGF2ZSB0byBiZQogICBjb21wbGV0ZSAqLwojaWYgI0xBTkcoRGUpCi8qIFRoaXMgZGVmaW5pdGlvbnMgYXBwbHkgdG8gR2VybWFueSBvbmx5LiBVc2VycyBpbiBBdXN0cmlhIAogICBvciBTd2l0emVybGFuZCBtaWdodCB3YW50IHRvIG1vZGlmeSB0aGVtICovCkxPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCI5IikKTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIkRldXRzY2giKQpMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiR2VybWFuIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImRldSIpCkxPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJEZXV0c2NoIikKTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiNDkiKQpMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCJEZXV0c2NobGFuZCIpCkxPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkRldXRzY2hsYW5kIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkRlIikKTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIkRldXRzY2hsYW5kIikKTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCI5IikKTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIjQ5IikKLyogRHVubm8KTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKQpMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKQoqLwpMT0NWQUwoTE9DQUxFX1NMSVNULCI7IikKTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiMCIpCkxPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiwiKQpMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiLiIpCi8qCkxPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKQoqLwpMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKQpMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpCi8qCkxPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikKSXMgdGhpcyAiMDEyMzQ1Njc4OSIgPz8KTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTKQoqLwpMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiRE0iKQovKgpMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MKQpMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQKQpMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCkKTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpCiovCkxPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKQovKgpMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykKKi8KTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKQpMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikKTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpCkxPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKQpMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkLk1NLnl5eXkiKQpMT0NWQUwoTE9DQUxFX1NMT05HREFURWksImRkZCwgZC4gTU1NTSB5eXl5IikKLyoKTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkKKi8KTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpCi8qCkxPQ1ZBTChMT0NBTEVfSUxEQVRFKQoqLwpMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKLyoKTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKQpMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKQoqLwpMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQovKgpMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykKTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pCkxPQ1ZBTChMT0NBTEVfUzExNTkpCkxPQ1ZBTChMT0NBTEVfUzIzNTkpCkxPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkKTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikKTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspCkxPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikKKi8KTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIk1vbnRhZyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJEaWVuc3RhZyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJNaXR0d29jaCIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJEb25uZXJzdGFnIikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIkZyZWl0YWciKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiU29ubmFiZW5kIikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIlNvbm50YWciKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiTW8iKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiRGkiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiTWkiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiRG8iKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiRnIiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiU2EiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiU28iKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJKYW51YXIiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJGZWJydWFyIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiTeRyeiIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIkFwcmlsIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiTWFpIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiSnVuaSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIkp1bGkiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJBdWd1c3QiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCJTZXB0ZW1iZXIiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwiT2t0b2JlciIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJOb3ZlbWJlciIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCJEZXplbWJlciIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCJKYW4iKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJGZWIiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCJN5HIiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJBcHIiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCJNYWkiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCJKdW4iKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCJKdWwiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJBdWciKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCJTZXAiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiT2t0IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIk5vdiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJEZXoiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKLyoKTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOKQpMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04pCkxPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOKQpMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTikKTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMpCkxPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UpCkxPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTKQpMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFKQoqLwojZW5kaWYgLyogTEFORyhEZSkgKi8KCi8qSW5zZXJ0IG90aGVyIGxhbmd1YWdlcyBoZXJlKi8KCgoKCWlmKCFyZXRMZW4pCgl7CgkJaWYoIXJldFN0cmluZylmcHJpbnRmKHN0ZGVyciwiVW5rb3duIExDIHR5cGUgJWxYXG4iLExDVHlwZSk7CgkJZWxzZSBmcHJpbnRmKHN0ZGVyciwiJyVzJyBub3Qgc3VwcG9ydGVkIGZvciB5b3VyIGxhbmd1YWdlLlxuIiwKCQkJcmV0U3RyaW5nKTsKCQlyZXR1cm4gMDsKCX0KCglpZihyZXRMZW4+bGVuKXJldExlbj1sZW47CglzdHJuY3B5KGJ1ZixyZXRTdHJpbmcsbGVuKTsKCXJldHVybiByZXRMZW47Cn0K