LyoKICogQ29weXJpZ2h0IDE5OTkgUGFibG8gU2FyYXR4YWdhCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfV0FMT04sIFNVQkxBTkdfREVGQVVMVAoKLyogCiAqIFNpIHZvcyB2b2xveiBhaWRlciBhdm91IGxpIHJhdG/7cm5hZWRqZSBkZXMgbGliZXMgcHJvZ3JhbWVzIOggd2Fsb24sCiAqIHZvcyBwb2xveiBzY3LucmUgYSBsJyBhZHJlc3NlIGVtaWxlIDxsaW51eC13YUBjaGFuYWUuYWxwaGFuZXQuY2g+CiAqLwoKU1lTTUVOVSBNRU5VIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUKewogTUVOVUlURU0gIiZSaWbpIiwgNjE3MjgKIE1FTlVJVEVNICImQm9kau4iLCA2MTQ1NgogTUVOVUlURU0gIiZHcmFuZGV1IiwgNjE0NDAKIE1FTlVJVEVNICLFIHB1IGdyYW4mZCIsIDYxNDcyCiBNRU5VSVRFTSAixSBwdSAmcHRpdCIsIDYxNDg4CiBNRU5VSVRFTSBTRVBBUkFUT1IKIE1FTlVJVEVNICImQ2xveXVcdEFsdC1GNCIsIDYxNTM2CiBNRU5VSVRFTSBTRVBBUkFUT1IKIE1FTlVJVEVNICJCYWd1ZXIgJkEgLi4uXHRDdHJsLUVjaGFwIiwgNjE3NDQKIE1FTlVJVEVNIFNFUEFSQVRPUgogTUVOVUlURU0gIsUgZGZhaXQgZGkgJldpbmUgLi4uIiwgNjE3NjEKIE1FTlVJVEVNIFNFUEFSQVRPUgogTUVOVUlURU0gIlNpdGl0Y2juIGVuZSBtYXJrZSBkaW5zIGwnIGNhbuUgZGkgZGlzYnVnYWVkamUiLCA2MTc2Mgp9CgpFRElUTUVOVSBNRU5VIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUKewoJUE9QVVAgIiIKCUJFR0lOCgkJTUVOVUlURU0gIiZEaXNm6SIsIEVNX1VORE8KCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiQ/QmcGVyIiwgV01fQ1VUCgkJTUVOVUlURU0gIiZDb3B57iIsIFdNX0NPUFkKCQlNRU5VSVRFTSAiQyZsYXBlciIsIFdNX1BBU1RFCgkJTUVOVUlURU0gIkRpcyZmYWNlciIsIFdNX0NMRUFSCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIiZUY2hld3ppIHRvdOVmd2FpdCIsIEVNX1NFVFNFTAoJRU5ECn0KCk1TR0JPWCBESUFMT0cgMTAwLCA4MCwgMjE2LCAxNjgKU1RZTEUgRFNfU1lTTU9EQUwgfCBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQkVHSU4KICAgICAgICBJQ09OICIiLCAxMDg4LCA4LCAyMCwgMTYsIDE2LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUKICAgICAgICBMVEVYVCAiIiwgMTAwLCAzMiwgNCwgMTc2LCA0OCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfR1JPVVAKICAgICAgICBQVVNIQlVUVE9OICImSSBWYSIsIDEsIDE2LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCiAgICAgICAgUFVTSEJVVFRPTiAiJlJpbm9uY+4iLCAyLCA2NCwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAogICAgICAgIFBVU0hCVVRUT04gIiZSaW5vbmPuIiwgMywgMTEyLCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCiAgICAgICAgUFVTSEJVVFRPTiAiUmkmcGV0ZXIiLCA0LCAxNjAsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKICAgICAgICBQVVNIQlVUVE9OICImUGFzc2VyIGh1dGUiLCA1LCAyMDgsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKICAgICAgICBQVVNIQlVUVE9OICImT3lpIiwgNiwgMjU2LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCiAgICAgICAgUFVTSEJVVFRPTiAiJk5lbmkiLCA3LCAzMDQsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKRU5ECgo=