LyoKICogQ29weXJpZ2h0IDE5OTggSnVlcmdlbiBTY2htaWVkCiAqIENvcHlyaWdodCAyMDA0IFBpb3RyIENhYmFuCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfUE9MSVNILCBTVUJMQU5HX0RFRkFVTFQKCk1FTlVfMDAxIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KCU1FTlVJVEVNICImRHW/ZSBJa29ueSIsCUZDSURNX1NIVklFV19CSUdJQ09OCglNRU5VSVRFTSAiJk1hs2UgSWtvbnkiLAlGQ0lETV9TSFZJRVdfU01BTExJQ09OCglNRU5VSVRFTSAiJkxpc3RhIiwJCUZDSURNX1NIVklFV19MSVNUVklFVwoJTUVOVUlURU0gIiZTemN6ZWfzs3kiLAkJRkNJRE1fU0hWSUVXX1JFUE9SVFZJRVcKRU5ECgovKgogc2hlbGx2aWV3IGJhY2tncm91bmQgbWVudQoqLwpNRU5VXzAwMiBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCglQT1BVUCAiIgoJQkVHSU4KCSAgUE9QVVAgIiZXaWRvayIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAiJkR1v2UgSWtvbnkiLAlGQ0lETV9TSFZJRVdfQklHSUNPTgoJICAgIE1FTlVJVEVNICImTWGzZSBJa29ueSIsCUZDSURNX1NIVklFV19TTUFMTElDT04KCSAgICBNRU5VSVRFTSAiJkxpc3RhIiwJCUZDSURNX1NIVklFV19MSVNUVklFVwoJICAgIE1FTlVJVEVNICImU3pjemVn87N5IiwJRkNJRE1fU0hWSUVXX1JFUE9SVFZJRVcKCSAgRU5ECgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBQT1BVUCAiUm96bWllnOYgJmlrb255IHdlZLN1ZyIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAiJk5hend5IiwJMHgzMAkvKiBjb2x1bW4gMCAqLwoJICAgIE1FTlVJVEVNICImVHlwdSIsCTB4MzIJLyogY29sdW1uIDIgKi8KCSAgICBNRU5VSVRFTSAiJldpZWxrb5xjaSIsCTB4MzEJLyogLi4uICovCgkgICAgTUVOVUlURU0gIiZEYXR5IiwJMHgzMwoJICAgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICAgIE1FTlVJVEVNICImQXV0b3Jvem1pZXN6Y3phbmllIiwJRkNJRE1fU0hWSUVXX0FVVE9BUlJBTkdFCgkgIEVORAoJICBNRU5VSVRFTSAiJld5cvN3bmFqIGlrb255IiwJRkNJRE1fU0hWSUVXX1NOQVBUT0dSSUQKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICImT2Scd2llcnoiLAkJRkNJRE1fU0hWSUVXX1JFRlJFU0gKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJXJmtsZWoiLAkJRkNJRE1fU0hWSUVXX0lOU0VSVAoJICBNRU5VSVRFTSAiV2tsZWogcyZrcvN0IiwJRkNJRE1fU0hWSUVXX0lOU0VSVExJTksKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIFBPUFVQICImTm93eSIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAiJkZvbGRlciIsCUZDSURNX1NIVklFV19ORVdGT0xERVIKCSAgICBNRU5VSVRFTSAiJlNrcvN0IiwJRkNJRE1fU0hWSUVXX05FV0xJTksKCSAgICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgRU5ECgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiV7NhnGNpd2+cY2kiLAlGQ0lETV9TSFZJRVdfUFJPUEVSVElFUwoJRU5ECkVORAoKLyoKIHNoZWxsdmlldyBpdGVtIG1lbnUKKi8KTUVOVV9TSFZfRklMRSBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCglQT1BVUCAiIgoJQkVHSU4KCSAgTUVOVUlURU0gIiZFa3NwbG9ydWoiLAkJRkNJRE1fU0hWSUVXX0VYUExPUkUKCSAgTUVOVUlURU0gIiZPdHfzcnoiLAkJRkNJRE1fU0hWSUVXX09QRU4KCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICImV3l0bmlqIiwJCUZDSURNX1NIVklFV19DVVQKCSAgTUVOVUlURU0gIiZLb3BpdWoiLAkJRkNJRE1fU0hWSUVXX0NPUFkKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJVdHfzcnogJlNrcvN0IiwJRkNJRE1fU0hWSUVXX0NSRUFURUxJTksKCSAgTUVOVUlURU0gIiZVc3XxIiwJCUZDSURNX1NIVklFV19ERUxFVEUKCSAgTUVOVUlURU0gIiZabWll8SBuYXp36iIsCQlGQ0lETV9TSFZJRVdfUkVOQU1FCgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiV7MmYZxjaXdvnGNpIiwJRkNJRE1fU0hWSUVXX1BST1BFUlRJRVMKCUVORApFTkQKClNIQlJTRk9SRk9MREVSX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAxNSwgNDAsIDE4OCwgMTkyClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IERTX01PREFMRlJBTUUgfCBEU19TRVRGT05UIHwgRFNfM0RMT09LCkNBUFRJT04gIld5YmllcnogZm9sZGVyIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKIERFRlBVU0hCVVRUT04gIk9LIiwgMSwgODAsIDE3NiwgNTAsIDEyLCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICJBbnVsdWoiLCAyLCAxMzQsIDE3NiwgNTAsIDEyLCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKIExURVhUICIiLCBJRERfVElUTEUsIDQsIDQsIDE4MCwgMTIKIExURVhUICIiLCBJRERfU1RBVFVTLCA0LCAyNSwgMTgwLCAxMgogQ09OVFJPTCAiIiwgSUREX1RSRUVWSUVXLCAiU3lzVHJlZVZpZXczMiIsCiAJVFZTX0hBU0JVVFRPTlMgfCBUVlNfSEFTTElORVMgfCBUVlNfTElORVNBVFJPT1QgfAoJV1NfQk9SREVSIHwgV1NfVEFCU1RPUCwKCTQsIDQwLCAxODAsIDEyMAp9CgpTSEVMTF9BQk9VVF9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMTUsIDQwLCAyMTAsIDE1MgpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiTyAlcyIKRk9OVCAxMCwgIk1TIFNoZWxsIERsZyIKewogREVGUFVTSEJVVFRPTiAiT0siLCBJRE9LLCAxNTMsIDEzMywgNTAsIDEyLCBXU19UQUJTVE9QCiBMSVNUQk9YIDk5LCA4LCA2NSwgMTM3LCA4MiwgTEJTX05PVElGWSB8IFdTX1ZTQ1JPTEwgfCBXU19CT1JERVIKIElDT04gIiIsIDEwODgsIDEwLCAxMCwgMTQsIDE2CiBMVEVYVCAiIiwgMTAwLCAzMCwgMTAsIDEzNywgMTAKIExURVhUICIiLCAxMDEsIDMwLCAyMiwgMTM3LCAxMAogTFRFWFQgIk1vv2VzeiBrb3J6eXN0YeYgeiBXaW5lJ2EgZHpp6mtpOiIsIDk4LCA4LCA1NSwgMTM3LCAxMAp9CgpTSEVMTF9SVU5fRExHIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDAsIDAsIDIyNywgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiBJQ09OICIiLCAxMjI5NywgNywgMTEsIDE4LCAyMCwgV1NfVklTSUJMRQogTFRFWFQgIldwaXN6IG5henfqIHByb2dyYW11LCBrYXRhbG9ndSwgZG9rdW1lbnR1LCBhIFdpbmUgb3R3b3J6eSBnbyBkbGEgY2llYmllLiIsIDEyMjg5LCAzNiwgMTEsIDE4MiwgMTgKIExURVhUICImT3R383J6OiIsIDEyMzA1LCA3LCAzOSwgMjQsIDEwCiBDT05UUk9MICIiLCAxMjI5OCwgIkNPTUJPQk9YIiwgV1NfVEFCU1RPUCB8IFdTX0dST1VQIHwgV1NfVlNDUk9MTCB8IFdTX1ZJU0lCTEUgfCBDQlNfRElTQUJMRU5PU0NST0xMIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX0RST1BET1dOLCAzNiwgMzcsIDE4MywgMTAwCiBERUZQVVNIQlVUVE9OICJPSyIsIElET0ssIDYyLCA2MywgNTAsIDE0LCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICJBbnVsdWoiLCBJRENBTkNFTCwgMTE2LCA2MywgNTAsIDE0LCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICImUHJ6ZWdsuWRhai4uLiIsIDEyMjg4LCAxNzAsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKfQoKLyoKCXNwZWNpYWwgZm9sZGVycwoqLwpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CglJRFNfREVTS1RPUAkJIlB1bHBpdCIKCUlEU19NWUNPTVBVVEVSCQkiTfNqIGtvbXB1dGVyIgp9CgovKgoJY29udGV4dCBtZW51cwoqLwpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CglJRFNfVklFV19MQVJHRQkJIiZEdb9lIElrb255IgoJSURTX1ZJRVdfU01BTEwJCSImTWGzZSBJa29ueSIKCUlEU19WSUVXX0xJU1QJCSImTGlzdGEiCglJRFNfVklFV19ERVRBSUxTCSImU3pjemVn87N5IgoJSURTX1NFTEVDVAkJIlphem5hY3oiCglJRFNfT1BFTgkJIk90d/NyeiIKfQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewoJSURTX0NSRUFURUZPTERFUl9ERU5JRUQgIk5pZSBtb2fqIHV0d29yennmIG5vd2VnbyBrYXRhbG9ndTogQnJhayBkb3N06nB1LiIKCUlEU19DUkVBVEVGT0xERVJfQ0FQVElPTiAiQrO5ZCBwcnp5IHR3b3J6ZW5pdSBub3dlZ28ga2F0YWxvZ3UuIgoJSURTX0RFTEVURUlURU1fQ0FQVElPTiAiUG90d2llcmSfIHVzdW5p6mNpYSBwbGlrdSIKCUlEU19ERUxFVEVGT0xERVJfQ0FQVElPTiAiUG90d2llcmSfIHVzdW5p6mNpZSBrYXRhbG9ndSIKCUlEU19ERUxFVEVJVEVNX1RFWFQgIkN6eSBqZXN0ZZwgcGV3aWVuLCC/ZSBjaGNlc3ogdXN1brnmICclMSc/IgoJSURTX0RFTEVURU1VTFRJUExFX1RFWFQgIkN6eSBqZXN0ZZwgcGV3aWVuLCC/ZSBjaGNlc3ogdXN1brnmIHRlICUxIHBsaWtpPyIKCUlEU19PVkVSV1JJVEVGSUxFX1RFWFQgIlphc3S5cGnmIHBsaWsgJTE/IgoJSURTX09WRVJXUklURUZJTEVfQ0FQVElPTiAiUG90d2llcmSfIHphc3S5cGllbmllIHBsaWt1Igp9CgovKgljb2x1bW5zIGluIHRoZSBzaGVsbHZpZXcJKi8KU1RSSU5HVEFCTEUKQkVHSU4KCUlEU19TSFZfQ09MVU1OMQkJIlBsaWsiCglJRFNfU0hWX0NPTFVNTjIJCSJXaWVsa2+c5iIKCUlEU19TSFZfQ09MVU1OMwkJIlR5cCIKCUlEU19TSFZfQ09MVU1ONAkJIk1vZHlmaWthY2phIgoJSURTX1NIVl9DT0xVTU41CQkiQXRyeWJ1dHkiCglJRFNfU0hWX0NPTFVNTjYJCSJXaWVsa2+c5iIKCUlEU19TSFZfQ09MVU1ONwkJIkRvc3TqcG5hIHdpZWxrb5zmIgoJSURTX1NIVl9DT0xVTU44CQkiTmF6d2EiCglJRFNfU0hWX0NPTFVNTjkJCSJLb21lbnRhcnoiCkVORAoKLyogbWVzc2FnZSBib3ggc3RyaW5ncyAqLwpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgICAgICBJRFNfUkVTVEFSVF9USVRMRSAgICAgICAiVXJ1Y2hvbSBwb25vd25pZSIKICAgICAgIElEU19SRVNUQVJUX1BST01QVCAgICAgICJDenkgY2hjZXN6IHphc3ltdWxvd2HmIHpyZXN0YXJ0b3dhbmllIFdpbmRvd3NhPyIKICAgICAgIElEU19TSFVURE9XTl9USVRMRSAgICAgICJXebO5Y3oiCiAgICAgICBJRFNfU0hVVERPV05fUFJPTVBUICAgICAiQ3p5IGNoY2VzeiB3ebO5Y3p55iBzZXNq6iBXaW5lJ2E/Igp9Cg==