LyoKICogIE5vdGVwYWQgKEJ1bGdhcmlhbiByZXNvdXJjZXMpCiAqCiAqICBDb3B5cmlnaHQgMjAwNSBNaWxrbyBLcmFjaG91bm92CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCiNpbmNsdWRlICJub3RlcGFkX3Jlcy5oIgoKTEFOR1VBR0UgTEFOR19CVUxHQVJJQU4sIFNVQkxBTkdfREVGQVVMVAoKTUFJTl9NRU5VIE1FTlUKewogUE9QVVAgIibU4OnrIiB7CiAgTUVOVUlURU0gIibN7uJcdEN0cmwrTiIsICAgICAgICAgICBDTURfTkVXCiAgTUVOVUlURU0gIibO8uLu8OguLi5cdEN0cmwrTyIsICAgICBDTURfT1BFTgogIE1FTlVJVEVNICIm0fr18ODt6Fx0Q3RybCtTIiwgICAgIENNRF9TQVZFCiAgTUVOVUlURU0gItH69fDg7eggJurg8u4uLi4iLCAgICAgICBDTURfU0FWRV9BUwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImz+X34PIuLi5cdEN0cmwrUCIsICAgICAgICAgICAgQ01EX1BSSU5UCiAgTUVOVUlURU0gIs3g8fIm8O7p6ugg7eAg8fLw4O3o9uDy4C4uLiIsICAgIENNRF9QQUdFX1NFVFVQCiAgTUVOVUlURU0gIs3g8fLw7ibp6ugg7eAg7+X34PLg7eXy7i4uLiIsIENNRF9QUklOVEVSX1NFVFVQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIibI5/Xu5CIsICAgICAgICAgICAgIENNRF9FWElUCiB9ClBPUFVQICIm0OXk4Ory6PDg7eUiIHsKICBNRU5VSVRFTSAiJs7y7OXt6Fx0Q3RybCtaIiwgICAgIENNRF9VTkRPCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIibI5/Dl5uhcdEN0cmwrWCIsICAgICAgQ01EX0NVVAogIE1FTlVJVEVNICImyu7v6PDg6Vx0Q3RybCtDIiwgICAgIENNRF9DT1BZCiAgTUVOVUlURU0gIibC7Prq7ehcdEN0cmwrViIsICAgIENNRF9QQVNURQogIE1FTlVJVEVNICLI5yby8OjpXHREZWwiLCAgICAgIENNRF9ERUxFVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAizODw6ujw4OkgJuLx6Pfq7lx0Q3RybCtBIiwgICAgICAgQ01EX1NFTEVDVF9BTEwKICBNRU5VSVRFTSAiwvDl7OUvJsTg8uBcdEY1IiwgICAgQ01EX1RJTUVfREFURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImz/Dl7eDx/+kg5Prr4+gg8OXk7uLlIiwgIENNRF9XUkFQCiAgTUVOVUlURU0gIibY8Oj08i4uLiIsICAgICAgICAgIENNRF9GT05UCiB9ClBPUFVQICIm0vrw8eXt5SIgewogIE1FTlVJVEVNICIm0vrw8eguLi5cdEN0cmwrRiIsICAgQ01EX1NFQVJDSAogIE1FTlVJVEVNICLN4Ozl8OggJvHr5eTi4PlcdEYzIiwgIENNRF9TRUFSQ0hfTkVYVAogfQpQT1BVUCAiJs/u7O75IiB7CiAgTUVOVUlURU0gIibR+uT68Obg7ejlIiwgICAgICAgICBDTURfSEVMUF9DT05URU5UUwogIE1FTlVJVEVNICIm0vrw8eguLi4iLCAgICAgICAgQ01EX0hFTFBfU0VBUkNICiAgTUVOVUlURU0gIibP7uzu+SDn4CDv7uzu+fLgIiwgICAgIENNRF9IRUxQX09OX0hFTFAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJkFib3V0IE5vdGVwYWQiLCBDTURfSEVMUF9BQk9VVF9OT1RFUEFECiB9Cn0KCi8qIERpYWxvZyBgUGFnZSBzZXR1cCcgKi8KCkRJQUxPR19QQUdFU0VUVVAgRElBTE9HIDAsIDAsIDIyNSwgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQ0FQVElPTiAizeDx8vDu6eroIO3gIPHy8ODt6Pbg8uAiCnsKTFRFWFQgICAgIibD7vDl7SDq7uvu7fLo8vPrOiIsICAweDE0MCwgICAxMCwgMDcsIDY1LCAxNQpFRElUVEVYVCBJRENfUEFHRVNFVFVQX0hFQURFUlZBTFVFLCAgIDgwLCAwNSw5MCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIibE7uvl7SDq7uvu7fLo8vPrOiIsICAweDE0MiwgICAxMCwgMjQsIDY1LCAxNQpFRElUVEVYVCBJRENfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAgIDgwLCAyMiw5MCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkdST1VQQk9YICImw/Dg7ej26DoiLCAgICAgIDB4MTQ0LCAgICAgMTAsIDQzLDE2MCwgNDUKTFRFWFQgICAgIsTuJuvt4DoiLCAgICAgICAgMHgxNDUsICAgMjAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfTEVGVFZBTFVFLCAgICAgNTAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiw+4m8O3gOiIsICAgICAgICAgMHgxNDgsICAgIDIwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX1RPUFZBTFVFLCAgICAgIDUwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIsT/JvHt4DoiLCAgICAgICAweDE0QiwgMTAwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX1JJR0hUVkFMVUUsICAgMTMwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIsv/JuLgOiIsICAgICAgMHgxNEUsMTAwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX0JPVFRPTVZBTFVFLCAgMTMwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkRFRlBVU0hCVVRUT04gIk9LIiwgICAgICAgICBJRE9LLCAgICAgICAgICAgICAgICAgICAxODAsICAzLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAizvLs5e3oIiwgICAgIElEQ0FOQ0VMLCAgICAgICAgICAgICAgIDE4MCwgMjEsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICImz+7s7vkiLCAgICAgICBJREhFTFAsICAgICAgICAgICAgICAgIDE4MCwgMzksIDQwLCAxNSwgV1NfVEFCU1RPUAp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7ClNUUklOR19QQUdFU0VUVVBfSEVBREVSVkFMVUUsICAgIiZmIgpTVFJJTkdfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAgICJQYWdlICZwIgoKU1RSSU5HX05PVEVQQUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIsHl6+Xm7ejqIgpTVFJJTkdfRVJST1IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiw9DF2MrAIgpTVFJJTkdfV0FSTklORywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiz9DFxNPP0MXGxMXNyN8iClNUUklOR19JTkZPLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICLI7fTu8Ozg9uj/IgoKU1RSSU5HX1VOVElUTEVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIijt5e7n4OPr4OLl7SkiCgpTVFJJTkdfQUxMX0ZJTEVTLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiwvHo9+roIPTg6evu4uUgKCouKikiClNUUklOR19URVhUX0ZJTEVTX1RYVCwgICAgICAgICAgICAgICAgICAi0uXq8fLu4ugg9ODp6+7i5SAoKi50eHQpIgoKU1RSSU5HX1RPT0xBUkdFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgItTg6ev68iAnJXMnIOUg7/Dl6uDr5e3uIOPu6//sLCDn4CDk4CDh+uTlIO7y4u7w5e0uXG4gXArI5+/u6+fi4Ony5SDk8PPjIPDl5ODq8u7wLiIKU1RSSU5HX05PVEVYVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIs3lIPHy5SDi+uLl6+gg7ejq4Or64iDy5erx8i4gXApcbs3g7+j45fLlIO3l+e4g6CDu7+jy4Ony5SDu8u3u4u4uIgpTVFJJTkdfRE9FU05PVEVYSVNULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAi1ODp6/ryICclcydcbu3lIPH6+eXx8uLz4uBcblxuIFwKyPHq4PLlIOvoIOTgIPH65+Tg5OXy5SDt7uIg9ODp6z8iClNUUklOR19OT1RTQVZFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICLU4Onr+vIgJyVzJ1xu5SDh6Osg7/Du7OXt5e1cblxuIFwKyPHq4PLlIOvoIOTgIPH69fDg7ejy5SDv8O7s5e3o8uU/IgpTVFJJTkdfTk9URk9VTkQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJXMnIO3lIOzu5uUg5OAg4frk5SDt4Ozl8OXtLiIKU1RSSU5HX09VVF9PRl9NRU1PUlksICAgICAgICAgICAgICAgICAgICLN/+zgIOTu8fLg8vr37e4g7+Ds5fIg5+Ag5+Di+vD44uDt5SDt4CDy4OfoIFwK5+Dk4PfgLlxux+Dy4u7w5fLlIO3/6u7r6u4g7/Do6+7m5e3o/ywg5+Ag5OAg8+Ll6+j36PLlIPDg5+zl8OAg7eAg8eLu4e7k7eDy4CDv4Ozl8i4iCgp9Cg==