LyoKICogUmVnZWRpdCAoUnVzc2lhbiByZXNvdXJjZXMpCiAqCiAqIENvcHlyaWdodCAyMDAzIElnb3IgU3RlcGluCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfUlVTU0lBTiwgU1VCTEFOR19ERUZBVUxUCgovKgogKiBNZW51CiAqLwoKSURSX1JFR0VESVRfTUVOVSBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAiJtDl5fHy8CIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIibI7O/u8PLo8O7i4PL8IPTg6esg8OXl8fLw4C4uLiIsICAgIElEX1JFR0lTVFJZX0lNUE9SVFJFR0lTVFJZRklMRQogICAgICAgIE1FTlVJVEVNICIm3erx7+7w8ujw7uLg8vwg9ODp6yDw5eXx8vDgLi4uIiwgICAgSURfUkVHSVNUUllfRVhQT1JUUkVHSVNUUllGSUxFCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIibP7uTq6/736PL8IPHl8uXi7ukg8OXl8fLwLi4uIiwgSURfUkVHSVNUUllfQ09OTkVDVE5FVFdPUktSRUdJU1RSWSwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gIibO8urr/vfo8vwg8eXy5eLu6SDw5eXx8vAuLi4iLCAgSURfUkVHSVNUUllfRElTQ09OTkVDVE5FVFdPUktSRUdJU1RSWSwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIibN4O/l9+Dy4PL8XHRDdHJsK1AiLCAgICAgICAgICAgICAgSURfUkVHSVNUUllfUFJJTlQsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICLCJvvp8ugiLCAgICAgICAgICAgICAgICAgICAgICAgSURfUkVHSVNUUllfRVhJVAogICAgRU5ECiAgICBQT1BVUCAiJs/w4OLq4CIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIibI5+zl7ejy/CIsICAgICAgICAgICAgICAgICAgICAgSURfRURJVF9NT0RJRlkKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBQT1BVUCAi0e7n5Cbg8vwiCiAgICAgICAgQkVHSU4KICAgICAgICAgICAgTUVOVUlURU0gIsrrJv73IiwgICAgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX05FV19LRVkKICAgICAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgICAgIE1FTlVJVEVNICIm0fLw7uru4u7lIOft4Pfl7ejlIiwgICAgICAgICAgICAgICBJRF9FRElUX05FV19TVFJJTkdWQUxVRQogICAgICAgICAgICBNRU5VSVRFTSAiJsHo7eDw7e7lIOft4Pfl7ejlIiwgICAgICAgICAgICAgICBJRF9FRElUX05FV19CSU5BUllWQUxVRQogICAgICAgICAgICBNRU5VSVRFTSAiJkRXT1JEIOft4Pfl7ejlIiwgICAgICAgICAgICAgICAgSURfRURJVF9ORVdfRFdPUkRWQUxVRQogICAgICAgIEVORAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICIm0+Tg6+jy/Fx0RGVsIiwgICAgICAgICAgICAgICAgSURfRURJVF9ERUxFVEUKICAgICAgICBNRU5VSVRFTSAiJs/l8OXo7OXt7uLg8vxcdEYyIiwgICAgICAgICAgIElEX0VESVRfUkVOQU1FCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gItEm6u7v6PDu4uDy/CDo7P8g6uv+9+AiLCAgICAgICAgICAgICAgSURfRURJVF9DT1BZS0VZTkFNRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImzeDp8uhcdEN0cmwrRiIsICAgICAgICAgICAgICAgSURfRURJVF9GSU5ELCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSAizeDp8uggJuTg6+XlXHRGMyIsICAgICAgICAgICAgICBJRF9FRElUX0ZJTkRORVhULCBHUkFZRUQKICAgIEVORAogICAgUE9QVVAgIibC6OQiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICLR8vDu6uAgJvHu8fLu/+3o/yIsICAgICAgICAgICAgICAgICBJRF9WSUVXX1NUQVRVU0JBUgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICIm0ODn5OXr6PL8IiwgICAgICAgICAgICAgICAgICAgICAgSURfVklFV19TUExJVAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImzuHt7uLo8vxcdEY1IiwgICAgICAgICAgICAgICAgSURfVklFV19SRUZSRVNICiAgICBFTkQKICAgIFBPUFVQICImyOfh8ODt7e7lIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJsTu4eDi6PL8IOIg6Ofh8ODt7e7lIiwgICAgICAgICAgSURfRkFWT1JJVEVTX0FERFRPRkFWT1JJVEVTCiAgICAgICAgTUVOVUlURU0gIibT5ODr6PL8IOjnIOjn4fDg7e3u4+4iLCAgICAgICAgICAgSURfRkFWT1JJVEVTX1JFTU9WRUZBVk9SSVRFCiAgICBFTkQKICAgIFBPUFVQICIm0e/w4OLq4CIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIibR7uTl8Obg7ejlIiwgICAgICAgICAgICAgICAgSURfSEVMUF9IRUxQVE9QSUNTCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIibOIPDl5ODq8u7w5SDw5eXx8vDgIiwgICAgICBJRF9IRUxQX0FCT1VUCiAgICBFTkQKRU5ECgoKLyoKICogRGlhbG9nCiAqLwoKLyoKICogU3RyaW5nIFRhYmxlCiAqLwoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEU19MSVNUX0NPTFVNTl9OQU1FICAgICLI7P8iCiAgICBJRFNfTElTVF9DT0xVTU5fVFlQRSAgICAi0ujvIgogICAgSURTX0xJU1RfQ09MVU1OX0RBVEEgICAgIsTg7e375SIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURTX0FQUF9USVRMRSAgICAgICAgICAgItDl5ODq8u7wIPDl5fHy8OAiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEX1JFR0lTVFJZX01FTlUgICAgICAgICLR7uTl8Obo8iDq7uzg7eT7IOTr/yDw4OHu8vsg8SDw5ePo8fLw7uwg4iD25evu7CIKICAgIElEX0VESVRfTUVOVSAgICAgICAgICAgICLR7uTl8Obo8iDq7uzg7eT7IOTr/yDw5eTg6vLo8O7i4O3o/yDn7eD35e3o6SDo6+gg6uv+9+XpIgogICAgSURfVklFV19NRU5VICAgICAgICAgICAgItHu5OXw5ujyIOru7ODt5Psg5Ov/IO3g8fLw7unq6CDu6u3gIPDl5fHy8OAiCiAgICBJRF9GQVZPUklURVNfTUVOVSAgICAgICAi0e7k5fDm6PIg6u7s4O3k+yDk6/8g5O7x8vPv4CDqIPfg8fLuIOjx7+7r/Ofz5ez77CDq6/734OwiCiAgICBJRF9IRUxQX01FTlUgICAgICAgICAgICAi0e7k5fDm6PIg6u7s4O3k+yDk6/8g7vLu4fDg5uXt6P8g8e/w4OLq6CDoIOjt9O7w7OD26Ogg7iDw5eTg6vLu8OUg8OXl8fLw4CIKICAgIElEX0VESVRfTkVXX01FTlUgICAgICAgICLR7uTl8Obo8iDq7uzg7eT7IOTr/yDx7ufk4O3o/yDt7uL79SDq6/735ekg6OvoIOft4Pfl7ejpIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRF9FRElUX01PRElGWSAgICAgICAgICAiyOfs5e3/5fIg5+3g9+Xt6OUg7+Dw4Ozl8vDgIgogICAgSURfRURJVF9ORVdfS0VZICAgICAgICAgIsTu4eDi6//l8iDt7uL76SDq6/73IgogICAgSURfRURJVF9ORVdfU1RSSU5HVkFMVUUgIsTu4eDi6//l8iDt7uLu5SDx8vDu6u7i7uUg5+3g9+Xt6OUiCiAgICBJRF9FRElUX05FV19CSU5BUllWQUxVRSAixO7h4OLr/+XyIO3u4u7lIOHo7eDw7e7lIOft4Pfl7ejlIgogICAgSURfRURJVF9ORVdfRFdPUkRWQUxVRSAgIsTu4eDi6//l8iDt7uLu5SBEV09SRC3n7eD35e3o5SIKICAgIElEX1JFR0lTVFJZX0lNUE9SVFJFR0lTVFJZRklMRSAiyOzv7vDy6PDz5fIg8uXq8fLu4u7pIPTg6esg4iDw5eXx8vAiCiAgICBJRF9SRUdJU1RSWV9FWFBPUlRSRUdJU1RSWUZJTEUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICLd6vHv7vDy6PDz5fIg4uXx/CDw5eXx8vAg6OvoIOXj7iD34PHy/CDiIPLl6vHy7uLu6SD04OnrIgogICAgSURfUkVHSVNUUllfQ09OTkVDVE5FVFdPUktSRUdJU1RSWQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIs/u5Orr/vfg5fLx/yDqIPDl5fHy8PMg8+Tg67jt7e7j7iDq7uzv/P7y5fDgIgogICAgSURfUkVHSVNUUllfRElTQ09OTkVDVE5FVFdPUktSRUdJU1RSWQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIs7y6uv+9+Dl8vH/IO7yIPDl5fHy8OAg8+Tg67jt7e7j7iDq7uzv/P7y5fDgIgogICAgSURfUkVHSVNUUllfUFJJTlQgICAgICAgIs/l9+Dy4OXyIOLl8fwg8OXl8fLwIOjr6CDl4+4g9+Dx8vwiCi8qICAgIElEX0hFTFBfSEVMUFRPUElDUyAgICAgICJPcGVucyByZWdpc3RyeSBlZGl0b3IgaGVscCIgKi8KICAgIElEX0hFTFBfQUJPVVQgICAgICAgICAgICLO8u7h8ODm4OXyIOjt9O7w7OD26P4g7iDv8O7j8ODs7OUsIO3u7OXwIOLl8PHo6CDoIPHv6PHu6iDg4vLu8O7iIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRF9SRUdJU1RSWV9FWElUICAgICAgICAiwvv17uQg6Ocg8OXk4Ory7vDgIPDl5fHy8OAiCiAgICBJRF9GQVZPUklURVNfQUREVE9GQVZPUklURVMgIsTu4eDi6PL8IOrr/vcg4iDo5+Hw4O3t7uUiCiAgICBJRF9GQVZPUklURVNfUkVNT1ZFRkFWT1JJVEUgItPk4Ovo8vwg6uv+9yDo5yDo5+Hw4O3t7uPuIgogICAgSURfVklFV19TVEFUVVNCQVIgICAgICAgIs/u6uDn4PL8IOjr6CDx6vD78vwg8fLw7urzIPHu8fLu/+3o/yIKICAgIElEX1ZJRVdfU1BMSVQgICAgICAgICAgICLI5+zl7ejy/CDv7ufo9uj+IPDg5+Tl6+jy5ev/IOzl5uTzIOTi8+z/IO/g7eXr/+zoIgogICAgSURfVklFV19SRUZSRVNIICAgICAgICAgIs7h7e7i6//l8iDu6u3uIgogICAgSURfRURJVF9ERUxFVEUgICAgICAgICAgItPk4Ov/5fIg4vvk5evl7ejlIgogICAgSURfRURJVF9SRU5BTUUgICAgICAgICAgIs/l8OXo7OXt7uL74uDl8iDi++Tl6+Xt6OUiCiAgICBJRF9FRElUX0NPUFlLRVlOQU1FICAgICAiyu7v6PDz5fIg6Oz/IOL75OXr5e3t7uPuIOrr/vfgIOIg4fP05fAg7uHs5e3gIgogICAgSURfRURJVF9GSU5EICAgICAgICAgICAgIsj55fIg8uXq8fLu4vP+IPHy8O7q8yDiIOrr/vflLCDn7eD35e3o6CDo6+gg5ODt7fv1IgogICAgSURfRURJVF9GSU5ETkVYVCAgICAgICAgIsj55fIg8evl5PP++eXlIPHu4u/g5OXt6OUg8uXq8fLgLCDn4OTg7e3u4+4g4iDv8OXk++Tz+eXsIO/u6PHq5SIKRU5ECgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovKgogKiBURVhUSU5DTFVERQogKi8KCjEgVEVYVElOQ0xVREUgRElTQ0FSREFCTEUKQkVHSU4KICAgICJyZXNvdXJjZS5oXDAiCkVORAoKCgovKgogKiBTdHJpbmcgVGFibGUKICovCgovKgogKlNUUklOR1RBQkxFIERJU0NBUkRBQkxFCiAqQkVHSU4KICogICAgSURfSEVMUF9IRUxQVE9QSUNTICAgICAgIk9wZW5zIFJlZ2lzdHJ5IEVkaXRvciBIZWxwLiIKICogICAgSURfSEVMUF9BQk9VVCAgICAgICAgICAgIkRpc3BsYXlzIHByb2dyYW0gaW5mb3JtYXRpb24sIHZlcnNpb24gbnVtYmVyLCBhbmQgY29weXJpZ2h0LiIKICpFTkQKICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCg==