LyoKICoJT0xFMk5MUyBsaWJyYXJ5CiAqCiAqCUNvcHlyaWdodCAxOTk1CU1hcnRpbiB2b24gTG9ld2lzCiAqLwoKLyoJQXQgdGhlIG1vbWVudCwgdGhlc2UgYXJlIG9ubHkgZW1wdHkgc3R1YnMuCiAqLwoKI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSAid2luZG93cy5oIgojaW5jbHVkZSAib2xlLmgiCiNpbmNsdWRlICJvcHRpb25zLmgiCiNpbmNsdWRlICJ3aW5ubHMuaCIKI2luY2x1ZGUgInN0ZGRlYnVnLmgiCiNpbmNsdWRlICJkZWJ1Zy5oIgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgICBHZXRVc2VyRGVmYXVsdExDSUQgICAgICAgKE9MRTJOTFMuMSkKICovCkRXT1JEIFdJTkFQSSBHZXRVc2VyRGVmYXVsdExDSUQoKQp7Ci8qIERlZmF1bHQgc29ydGluZywgbmV1dHJhbCBzdWJsYW5ndWFnZSAqLwogICAgc3dpdGNoKE9wdGlvbnMubGFuZ3VhZ2UpCiAgICB7CiAgICBjYXNlIExBTkdfRW46IHJldHVybiAweDA5OwogICAgY2FzZSBMQU5HX0VzOiByZXR1cm4gMHgwNzsgLyogSnVzdCBhIEd1ZXNzIDotKSAqLwogICAgY2FzZSBMQU5HX0RlOiByZXR1cm4gMHgwNzsKICAgIGNhc2UgTEFOR19ObzogcmV0dXJuIDB4MTQ7CiAgICBjYXNlIExBTkdfRnI6CiAgICBjYXNlIExBTkdfRmk6CiAgICBjYXNlIExBTkdfRGE6CiAgICBjYXNlIExBTkdfQ3o6CiAgICBjYXNlIExBTkdfRW86CiAgICBkZWZhdWx0OgoJcmV0dXJuIDA7ICAvKiBOZXV0cmFsIGxhbmd1YWdlICovCiAgICB9Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgIEdldFN5c3RlbURlZmF1bHRMQ0lEICAgICAgIChPTEUyTkxTLjIpCiAqLwpEV09SRCBXSU5BUEkgR2V0U3lzdGVtRGVmYXVsdExDSUQoKQp7CglyZXR1cm4gR2V0VXNlckRlZmF1bHRMQ0lEKCk7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgIEdldFVzZXJEZWZhdWx0TGFuZ0lEICAgICAgIChPTEUyTkxTLjMpCiAqLwpXT1JEIFdJTkFQSSBHZXRVc2VyRGVmYXVsdExhbmdJRCgpCnsKCXJldHVybiAoV09SRClHZXRVc2VyRGVmYXVsdExDSUQoKTsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgR2V0U3lzdGVtRGVmYXVsdExhbmdJRCAgICAgKE9MRTJOTFMuNCkKICovCldPUkQgV0lOQVBJIEdldFN5c3RlbURlZmF1bHRMYW5nSUQoKQp7CglyZXR1cm4gR2V0VXNlckRlZmF1bHRMYW5nSUQoKTsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgR2V0TG9jYWxlSW5mb0EgICAgICAgICAgICAgKE9MRTJOTFMuNSkKICogSXMgdGhlIGxhc3QgcGFyYW1ldGVyIHJlYWxseSBXT1JEIGZvciBXaW4xNj8KICovCmludCBXSU5BUEkgR2V0TG9jYWxlSW5mb0EoRFdPUkQgbGNpZCxEV09SRCBMQ1R5cGUsTFBTVFIgYnVmLFdPUkQgbGVuKQp7CgljaGFyICpyZXRTdHJpbmc7CiAgICBpbnQgcmV0TGVuOwogICAgZHByaW50Zl9vbGUoc3RkZGViLCJHZXRMb2NhbGVJbmZvQSglOGxYLCU4bFgsJXAsJTRYKVxuIiwKCQkJbGNpZCxMQ1R5cGUsYnVmLGxlbik7CgkvKiBXaW5lIGlzIHN1cHBvcnRpbmcgb25seSB0aGUgZGVmYXVsdCBsb2NhbGUgKi8KCWlmKGxjaWQhPUdldFVzZXJEZWZhdWx0TENJRCgpKQoJewoJCWRwcmludGZfb2xlKHN0ZG5pbXAsIkdldExvY2FsZUluZm9BOiBVbmtub3duIGxvY2FsZVxuIik7CgkJcmV0dXJuIDA7Cgl9CgkvKiBBcyBhbiBvcHRpb24sIHdlIGNvdWxkIG9idGFpbiB0aGUgdmFsdWUgZnJvbSB3aW4uaW5pLgoJICAgVGhpcyB3b3VsZCBub3QgbWF0Y2ggdGhlIFdpbmUgY29tcGlsZS10aW1lIG9wdGlvbi4KCSAgIEFsc28sIG5vdCBhbGwgaWRlbnRpZmllcnMgYXJlIGF2YWlsYWJsZSBmcm9tIHdpbi5pbmkgKi8KCXJldFN0cmluZz0wOwoJcmV0TGVuPTA7CgkvKiBJZiB3ZSBhcmUgdGhyb3VnaCBhbGwgb2YgdGhpcywgcmV0TGVuIHNob3VsZCBub3QgYmUgemVybyBhbnltb3JlLgoJICAgSWYgaXQgaXMsIHRoZSB2YWx1ZSBpcyBub3Qgc3VwcG9ydGVkICovCiNkZWZpbmUgTE9DVkFMKHR5cGUsdmFsdWUpCWlmKHR5cGU9PUxDVHlwZSkJCQlcCgkJCQkJCQkJe3JldExlbj1zdHJsZW4odmFsdWUpKzE7XAoJCQkJCQkJCSByZXRTdHJpbmc9dmFsdWU7ICAgICAgIFwKCQkJCQkJCQl9CiNkZWZpbmUgVU5TVVBQT1JURUQodHlwZSkgICBpZih0eXBlPT1sY2lkKXJldFN0cmluZz0jdHlwZTsKCi8qIEkgcmVhbGx5IHdpc2ggSSB3b3VsZCBrbm93IGEgYmV0dGVyIHdheSB0byBkbyB0aGlzICovClVOU1VQUE9SVEVEKExPQ0FMRV9JTEFOR1VBR0UpClVOU1VQUE9SVEVEKExPQ0FMRV9TTEFOR1VBR0UpClVOU1VQUE9SVEVEKExPQ0FMRV9TRU5HTEFOR1VBR0UpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUpClVOU1VQUE9SVEVEKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUpClVOU1VQUE9SVEVEKExPQ0FMRV9JQ09VTlRSWSkKVU5TVVBQT1JURUQoTE9DQUxFX1NDT1VOVFJZKQpVTlNVUFBPUlRFRChMT0NBTEVfU0VOR0NPVU5UUlkpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUpClVOU1VQUE9SVEVEKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUpClVOU1VQUE9SVEVEKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFKQpVTlNVUFBPUlRFRChMT0NBTEVfSURFRkFVTFRDT1VOVFJZKQpVTlNVUFBPUlRFRChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkKVU5TVVBQT1JURUQoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKQpVTlNVUFBPUlRFRChMT0NBTEVfU0xJU1QpClVOU1VQUE9SVEVEKExPQ0FMRV9JTUVBU1VSRSkKVU5TVVBQT1JURUQoTE9DQUxFX1NERUNJTUFMKQpVTlNVUFBPUlRFRChMT0NBTEVfU1RIT1VTQU5EKQpVTlNVUFBPUlRFRChMT0NBTEVfU0dST1VQSU5HKQpVTlNVUFBPUlRFRChMT0NBTEVfSURJR0lUUykKVU5TVVBQT1JURUQoTE9DQUxFX0lMWkVSTykKVU5TVVBQT1JURUQoTE9DQUxFX0lORUdOVU1CRVIpClVOU1VQUE9SVEVEKExPQ0FMRV9TTkFUSVZFRElHSVRTKQpVTlNVUFBPUlRFRChMT0NBTEVfU0NVUlJFTkNZKQpVTlNVUFBPUlRFRChMT0NBTEVfU0lOVExTWU1CT0wpClVOU1VQUE9SVEVEKExPQ0FMRV9TTU9OREVDSU1BTFNFUCkKVU5TVVBQT1JURUQoTE9DQUxFX1NNT05USE9VU0FORFNFUCkKVU5TVVBQT1JURUQoTE9DQUxFX1NNT05HUk9VUElORykKVU5TVVBQT1JURUQoTE9DQUxFX0lDVVJSRElHSVRTKQpVTlNVUFBPUlRFRChMT0NBTEVfSUlOVExDVVJSRElHSVRTKQpVTlNVUFBPUlRFRChMT0NBTEVfSUNVUlJFTkNZKQpVTlNVUFBPUlRFRChMT0NBTEVfSU5FR0NVUlIpClVOU1VQUE9SVEVEKExPQ0FMRV9TREFURSkKVU5TVVBQT1JURUQoTE9DQUxFX1NUSU1FKQpVTlNVUFBPUlRFRChMT0NBTEVfU1NIT1JUREFURSkKVU5TVVBQT1JURUQoTE9DQUxFX1NMT05HREFURSkKVU5TVVBQT1JURUQoTE9DQUxFX1NUSU1FRk9STUFUKQpVTlNVUFBPUlRFRChMT0NBTEVfSURBVEUpClVOU1VQUE9SVEVEKExPQ0FMRV9JTERBVEUpClVOU1VQUE9SVEVEKExPQ0FMRV9JVElNRSkKVU5TVVBQT1JURUQoTE9DQUxFX0lUSU1FTUFSS1BPU04pClVOU1VQUE9SVEVEKExPQ0FMRV9JQ0VOVFVSWSkKVU5TVVBQT1JURUQoTE9DQUxFX0lUTFpFUk8pClVOU1VQUE9SVEVEKExPQ0FMRV9JREFZTFpFUk8pClVOU1VQUE9SVEVEKExPQ0FMRV9JTU9OTFpFUk8pClVOU1VQUE9SVEVEKExPQ0FMRV9TMTE1OSkKVU5TVVBQT1JURUQoTE9DQUxFX1MyMzU5KQpVTlNVUFBPUlRFRChMT0NBTEVfSUNBTEVOREFSVFlQRSkKVU5TVVBQT1JURUQoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKQpVTlNVUFBPUlRFRChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKQpVTlNVUFBPUlRFRChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikKVU5TVVBQT1JURUQoTE9DQUxFX1NEQVlOQU1FMSkKVU5TVVBQT1JURUQoTE9DQUxFX1NEQVlOQU1FMikKVU5TVVBQT1JURUQoTE9DQUxFX1NEQVlOQU1FMykKVU5TVVBQT1JURUQoTE9DQUxFX1NEQVlOQU1FNCkKVU5TVVBQT1JURUQoTE9DQUxFX1NEQVlOQU1FNSkKVU5TVVBQT1JURUQoTE9DQUxFX1NEQVlOQU1FNikKVU5TVVBQT1JURUQoTE9DQUxFX1NEQVlOQU1FNykKVU5TVVBQT1JURUQoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSkKVU5TVVBQT1JURUQoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMikKVU5TVVBQT1JURUQoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMykKVU5TVVBQT1JURUQoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCkKVU5TVVBQT1JURUQoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSkKVU5TVVBQT1JURUQoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNikKVU5TVVBQT1JURUQoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNykKVU5TVVBQT1JURUQoTE9DQUxFX1NNT05USE5BTUUxKQpVTlNVUFBPUlRFRChMT0NBTEVfU01PTlRITkFNRTIpClVOU1VQUE9SVEVEKExPQ0FMRV9TTU9OVEhOQU1FMykKVU5TVVBQT1JURUQoTE9DQUxFX1NNT05USE5BTUU0KQpVTlNVUFBPUlRFRChMT0NBTEVfU01PTlRITkFNRTUpClVOU1VQUE9SVEVEKExPQ0FMRV9TTU9OVEhOQU1FNikKVU5TVVBQT1JURUQoTE9DQUxFX1NNT05USE5BTUU3KQpVTlNVUFBPUlRFRChMT0NBTEVfU01PTlRITkFNRTgpClVOU1VQUE9SVEVEKExPQ0FMRV9TTU9OVEhOQU1FOSkKVU5TVVBQT1JURUQoTE9DQUxFX1NNT05USE5BTUUxMCkKVU5TVVBQT1JURUQoTE9DQUxFX1NNT05USE5BTUUxMSkKVU5TVVBQT1JURUQoTE9DQUxFX1NNT05USE5BTUUxMikKVU5TVVBQT1JURUQoTE9DQUxFX1NNT05USE5BTUUxMykKVU5TVVBQT1JURUQoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxKQpVTlNVUFBPUlRFRChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMykKVU5TVVBQT1JURUQoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0KQpVTlNVUFBPUlRFRChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNikKVU5TVVBQT1JURUQoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3KQpVTlNVUFBPUlRFRChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSkKVU5TVVBQT1JURUQoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCkKVU5TVVBQT1JURUQoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSkKVU5TVVBQT1JURUQoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMikKVU5TVVBQT1JURUQoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMykKVU5TVVBQT1JURUQoTE9DQUxFX1NQT1NJVElWRVNJR04pClVOU1VQUE9SVEVEKExPQ0FMRV9TTkVHQVRJVkVTSUdOKQpVTlNVUFBPUlRFRChMT0NBTEVfSVBPU1NJR05QT1NOKQpVTlNVUFBPUlRFRChMT0NBTEVfSU5FR1NJR05QT1NOKQpVTlNVUFBPUlRFRChMT0NBTEVfSVBPU1NZTVBSRUNFREVTKQpVTlNVUFBPUlRFRChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UpClVOU1VQUE9SVEVEKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMpClVOU1VQUE9SVEVEKExPQ0FMRV9JTkVHU0VQQllTUEFDRSkKCi8qIE5vdywgdGhlIGxhbmd1YWdlIHNwZWNpZmljIGRlZmluaXRpb25zLiBUaGV5IGRvbid0IGhhdmUgdG8gYmUKICAgY29tcGxldGUgKi8KICAgIHN3aXRjaChPcHRpb25zLmxhbmd1YWdlKQogICAgewogICAgY2FzZSBMQU5HX0RlOgovKiBUaGlzIGRlZmluaXRpb25zIGFwcGx5IHRvIEdlcm1hbnkgb25seS4gVXNlcnMgaW4gQXVzdHJpYSAKICAgb3IgU3dpdHplcmxhbmQgbWlnaHQgd2FudCB0byBtb2RpZnkgdGhlbSAqLwpMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiOSIpCkxPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCJEZXV0c2NoIikKTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkdlcm1hbiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJkZXUiKQpMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiRGV1dHNjaCIpCkxPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIjQ5IikKTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiRGV1dHNjaGxhbmQiKQpMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJEZXV0c2NobGFuZCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJEZSIpCkxPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJEZXV0c2NobGFuZCIpCkxPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiOSIpCkxPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCI0OSIpCi8qIER1bm5vCkxPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkKTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkKKi8KTE9DVkFMKExPQ0FMRV9TTElTVCwiOyIpCkxPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIjAiKQpMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIsIikKTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIi4iKQovKgpMT0NWQUwoTE9DQUxFX1NHUk9VUElORykKKi8KTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikKTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKQovKgpMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpCklzIHRoaXMgIjAxMjM0NTY3ODkiID8/CkxPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUykKKi8KTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIkRNIikKLyoKTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCkKTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCkKTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVApCkxPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKQoqLwpMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikKLyoKTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpCiovCkxPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikKTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpCkxPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKQpMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikKTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC5NTS55eXl5IikKTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikKLyoKTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkKKi8KTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpCi8qCkxPQ1ZBTChMT0NBTEVfSUxEQVRFKQoqLwpMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKLyoKTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKQpMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKQoqLwpMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQovKgpMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykKTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pCkxPQ1ZBTChMT0NBTEVfUzExNTkpCkxPQ1ZBTChMT0NBTEVfUzIzNTkpCkxPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkKTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikKTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspCkxPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikKKi8KTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIk1vbnRhZyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJEaWVuc3RhZyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJNaXR0d29jaCIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJEb25uZXJzdGFnIikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIkZyZWl0YWciKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiU29ubmFiZW5kIikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIlNvbm50YWciKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiTW8iKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiRGkiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiTWkiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiRG8iKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiRnIiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiU2EiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiU28iKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJKYW51YXIiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJGZWJydWFyIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiTeRyeiIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIkFwcmlsIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiTWFpIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiSnVuaSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIkp1bGkiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJBdWd1c3QiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCJTZXB0ZW1iZXIiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwiT2t0b2JlciIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJOb3ZlbWJlciIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCJEZXplbWJlciIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCJKYW4iKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJGZWIiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCJN5HIiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJBcHIiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCJNYWkiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCJKdW4iKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCJKdWwiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJBdWciKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCJTZXAiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiT2t0IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIk5vdiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJEZXoiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKLyoKTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOKQpMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04pCkxPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOKQpMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTikKTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMpCkxPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UpCkxPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTKQpMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFKQoqLwogICAgYnJlYWs7ICAvKiBMQU5HKERlKSAqLwoKICAgIGNhc2UgTEFOR19EYToKLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIjkiKSAqLwpMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiRGFuc2siKQpMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiRGFuaXNoIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImRhbiIpCkxPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJEYW5zayIpCkxPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIjQ1IikKTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiRGFubWFyayIpCkxPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkRlbm1hcmsiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiRGEiKQpMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiRGFubWFyayIpCi8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiOSIpICovCkxPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCI0NSIpCi8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KTE9DVkFMKExPQ0FMRV9TTElTVCwiOyIpCkxPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIjAiKQpMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIsIikKTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIi4iKQovKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikKTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKQovKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCi8qIExPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUykgKi8KTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksImtyIikKLyogTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCkgKi8KTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpCkxPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikKLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCkxPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKQovKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKQpMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikKTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpCkxPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKQpMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKQpMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKQovKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLwpMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikKLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCkxPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQovKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCi8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCkxPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCi8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KLyogTE9DVkFMKExPQ0FMRV9TMTE1OSkgKi8KLyogTE9DVkFMKExPQ0FMRV9TMjM1OSkgKi8KLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLwpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiTWFuZGFnIikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIlRpcnNkYWciKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiT25zZGFnIikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsIlRvcnNkYWciKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiRnJlZGFnIikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIkz4cmRhZyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJT+G5kYWciKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiTWEiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiVGkiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiT24iKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiVG8iKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiRnIiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiTPgiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiU/giKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJKYW51YXIiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJGZWJydWFyIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiTWFydHMiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJBcHJpbCIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIk1haiIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIkp1bmkiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJKdWxpIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiQXVndXN0IikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiU2VwdGVtYmVyIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIk9rdG9iZXIiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiTm92ZW1iZXIiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiRGVjZW1iZXIiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiSmFuIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiRmViIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiTWFyIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiQXByIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiTWFqIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiSnVuIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiSnVsIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiQXVnIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiU2VwIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIk9rdCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJOb3YiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiRGVjIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCi8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTikgKi8KLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTikgKi8KLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04pICovCi8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUykgKi8KLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSkgKi8KICAgIGJyZWFrOyAvKiBMQU5HKERhKSAqLwoKICAgIGNhc2UgTEFOR19FbzoKLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIjkiKSBJU08gbnVtZXJpY2FsIElEIGZvciBsYW5ndWFnZSBUT0RPICovCkxPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCJFc3BlcmFudG8iKQpMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiRXNwZXJhbnRvIikKLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImRldSIpICovCkxPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJFc3BlcmFudG8iKQovKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCI0OSIpIG5vdCBvZmZpY2lhbCBpbiBhbnkgb25lIGNvdW50cnkgKi8KLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiRGV1dHNjaGxhbmQiKSAqLwovKiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJHZXJtYW55IikgKi8KLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkRlIikgKi8KLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIkRldXRzY2hsYW5kIikgKi8KLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCI5IikgSVNPIElEIG9mIGxhbmcgVE9ETyAqLwovKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiNDkiKSAqLwpMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsMykgLyogaXMgdGhpcyByaWdodD8gVE9ETyAqLwpMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFLDMpIC8qIGlzIHRoaXMgcmlnaHQ/IFRPRE8gKi8KTE9DVkFMKExPQ0FMRV9TTElTVCwiOyIpCkxPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIjAiKQpMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIsIikKTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIi4iKQovKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikKTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKQovKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCi8qIExPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUykgKi8KTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIk5MRyIpIC8qIGFjY291bnRpbmcgY3VycmVuY3kgb2YgVUVBICovCi8qIExPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wpICovCi8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVApICovCi8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQKSAqLwovKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCi8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLwpMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpCkxPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKQpMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikKTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpCkxPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwieXl5eS5tbS5kZCIpCkxPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpCi8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCkxPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKQovKiBMT0NWQUwoTE9DQUxFX0lMREFURSkgKi8KTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCi8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KLyogTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkgKi8KTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCi8qIExPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKSAqLwovKiBMT0NWQUwoTE9DQUxFX1MxMTU5KSAqLwovKiBMT0NWQUwoTE9DQUxFX1MyMzU5KSAqLwovKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCi8qIExPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpICovCi8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJsdW5kbyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJtYXJkbyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJtZXJrcmVkbyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCK8Yf1kbyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJ2ZW5kcmVkbyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJzYWJhdG8iKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiZGltYW7mbyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJsdSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJtYSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJtZSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCK8YSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJ2ZSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJzYSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJkaSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsImphbnVhcm8iKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJmZWJydWFybyIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIm1hcnRvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiYXByaWxvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwibWFqbyIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsImp1bmlvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywianVsaW8iKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJh/Wd1c3RvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwic2VwdGVtYnJvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIm9rdG9icm8iKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwibm92ZW1icm8iKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiZGVjZW1icm8iKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiamFuIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiZmViIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywibWFyIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiYXByIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwibWFqIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwianVuIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywianVsIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiYf1nIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwic2VwIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIm9rdCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJub3YiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiZGVjIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCi8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTikgKi8KLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTikgKi8KLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04pICovCi8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUykgKi8KLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSkgKi8KICAgIGJyZWFrOyAgLyogTEFORyhFbykgKi8KCi8qSW5zZXJ0IG90aGVyIGxhbmd1YWdlcyBoZXJlKi8KCiAgICBkZWZhdWx0OgoJYnJlYWs7CiAgICB9ICAvKiBzd2l0Y2ggKi8KCglpZighcmV0TGVuKQoJewoJCWlmKCFyZXRTdHJpbmcpZnByaW50ZihzdGRlcnIsIlVua293biBMQyB0eXBlICVsWFxuIixMQ1R5cGUpOwoJCWVsc2UgZnByaW50ZihzdGRlcnIsIiclcycgbm90IHN1cHBvcnRlZCBmb3IgeW91ciBsYW5ndWFnZS5cbiIsCgkJCXJldFN0cmluZyk7CgkJcmV0dXJuIDA7Cgl9CgoJaWYocmV0TGVuPmxlbilyZXRMZW49bGVuOwoJbHN0cmNweW4oYnVmLHJldFN0cmluZyxsZW4pOwoJcmV0dXJuIHJldExlbjsKfQoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgQ29tcGFyZVN0cmluZ0EgICAgICAgKE9MRTJOTFMuOCkKICogVGhpcyBpbXBsZW1lbnRhdGlvbiBpZ25vcmVzIHRoZSBsb2NhbGUsIGFuZCB0cnVzdHMgaW4gbGliYwogKi8KaW50IENvbXBhcmVTdHJpbmdBKERXT1JEIGxjaWQsIERXT1JEIGZkd1N0eWxlLCAKCWNoYXIgKnMxLCBpbnQgbDEsIGNoYXIgKnMyLGludCBsMikKewoJaW50IGxlbixyZXQ7CglpZihmZHdTdHlsZSAmIE5PUk1fSUdOT1JFTk9OU1BBQ0UpCgl7CgkJZnByaW50ZihzdGRuaW1wLCAiQ29tcGFyZVN0cmluZ0E6IElHTk9SRU5PTlNQQUNFIG5vdCBzdXBwcnRlZFxuIik7Cgl9CglpZihmZHdTdHlsZSAmIE5PUk1fSUdOT1JFU1lNQk9MUykKCQlmcHJpbnRmKHN0ZG5pbXAsICJDb21wYXJlU3RyaW5nQTogSUdOT1JFU1lNQk9MUyBub3Qgc3VwcG9ydGVkXG4iKTsKCS8qIElzIHN0cmNtcCBkZWZhdWx0aW5nIHRvIHN0cmluZyBzb3J0IG9yIHRvIHdvcmQgc29ydD8/ICovCgkvKiBGSVhNRTogSGFuZGxlIE5PUk1fU1RSSU5HU09SVCAqLwoJbDEgPSAobDE9PS0xKT9zdHJsZW4oczEpOmwxOwoJbDIgPSAobDI9PS0xKT9zdHJsZW4oczIpOmwyOwoJbGVuID0gbDE8bDIgPyBsMTpsMjsKCXJldCA9IChmZHdTdHlsZSAmIE5PUk1fSUdOT1JFQ0FTRSkgPwoJCWxzdHJuY21waShzMSxzMixsZW4pCToKCQlzdHJuY21wKHMxLHMyLGxlbik7CgkvKiBub3QgZXF1YWwsIHJldHVybiAxIG9yIDMgKi8KCWlmKHJldCE9MClyZXR1cm4gcmV0KzI7CgkvKiBzYW1lIGxlbiwgcmV0dXJuIDIgKi8KCWlmKGwxPT1sMilyZXR1cm4gMjsKCS8qIHRoZSBsb25nZXIgb25lIGlzIGxleGljYWxseSBncmVhdGVyICovCglyZXR1cm4gKGwxPGwyKT8gMSA6IDM7Cn0KCg==