IyA9PT09PT09PT09PT1MSUNFTlNFX1NUQVJUPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIG9yZy5vbmFwLmFhaQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgQ29weXJpZ2h0IKkgMjAxNy0yMDE4IEFUJlQgSW50ZWxsZWN0dWFsIFByb3BlcnR5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgojIENvcHlyaWdodCCpIDIwMTctMjAxOCBFdXJvcGVhbiBTb2Z0d2FyZSBNYXJrZXRpbmcgTHRkLgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojIAojICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojIAojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIyA9PT09PT09PT09PT1MSUNFTlNFX0VORD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKI1Jlc291cmNlIGtleT1FcnJvciBDb2RlfE1lc3NhZ2UgdGV4dHxSZXNvbHV0aW9uIHRleHQgfERlc2NyaXB0aW9uIHRleHQKIyMjIyMjIwojTmV3bGluZXMgY2FuIGJlIHV0aWxpemVkIHRvIGFkZCBzb21lIGNsYXJpdHkgZW5zdXJpbmcgY29udGludWluZyBsaW5lCiNoYXMgYXQgbGVhc3Qgb25lIGxlYWRpbmcgc3BhY2UKI1Jlc291cmNlS2V5PVwKIyAgICAgICAgICAgICBFUlIwMDAwRVwKIyAgICAgICAgICAgICBTYW1wbGUgZXJyb3IgbXNnIHR4dFwKIyAgICAgICAgICAgICBTYW1wbGUgcmVzb2x1dGlvbiBtc2dcCiMgICAgICAgICAgICAgU2FtcGxlIGRlc2NyaXB0aW9uIHR4dAojCiMjIyMjIwojRXJyb3IgY29kZSBjbGFzc2lmaWNhdGlvbiBjYXRlZ29yeQojMDAwIEluZm8vRGVidWcKIzEwMCBQZXJtaXNzaW9uIGVycm9ycwojMjAwIEF2YWlsYWJpbGl0eSBlcnJvcnMvVGltZW91dHMKIzMwMCBEYXRhIGVycm9ycwojNDAwIFNjaGVtYSBJbnRlcmZhY2UgdHlwZS92YWxpZGF0aW9uIGVycm9ycwojNTAwIEJ1c2luZXNzIHByb2Nlc3MgZXJyb3JzCiM5MDAgVW5rbm93biBlcnJvcnMKIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCkRJU1RSSUJVVElPTl9FVkVOVD1cCiAgICAgICAgICAgICAgICAgIEJBQkVMMDAwMUl8XAogICAgICAgICAgICAgICAgICBEaXN0cmlidXRpb24gZXZlbnQ6IHswfXxcCiAgICAgICAgICAgICAgICAgIEEgZGlzdHJpYnV0aW9uIGV2ZW50IHdhcyByZWNlaXZlZCBmcm9tIEFTREN8XAoKTUVTU0FHRV9BVURJVD1cCiAgICBCQUJFTDAwMDJJfFwKICAgIHswfXxcCiAgICB8XAoKTUVTU0FHRV9NRVRSSUM9XAogICAgQkFCRUwwMDAzSXxcCiAgICB7MH18XAogICAgfFwKClBST0NFU1NfUkVRVUVTVF9FUlJPUj1cCiAgICAgICAgICAgICAgICAgIEJBQkVMMDAwNEV8XAogICAgICAgICAgICAgICAgICBFcnJvciB3aGlsZSBwcm9jZXNzaW5nIFJFU1QgcmVxdWVzdC58XAoKSU5WQUxJRF9SRVFVRVNUX0pTT049XAogICAgICAgICAgICAgICAgICBCQUJFTDAwMDVFfFwKICAgICAgICAgICAgICAgICAgRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBKU09OIGluIHJlcXVlc3QgYm9keS58XAoKSU5WQUxJRF9DU0FSX0ZJTEU9XAogICAgICAgICAgICAgICAgICBCQUJFTDAwMDZFfFwKICAgICAgICAgICAgICAgICAgRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBDU0FSIGZpbGUufFwKClBST0NFU1NJTkdfVk5GX0NBVEFMT0dfRVJST1I9XAogICAgICAgICAgICAgICAgICBCQUJFTDAwMDdFfFwKICAgICAgICAgICAgICAgICAgRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBWTkYgQ2F0YWxvZy58XAoKQkFCRUxfUkVRVUVTVF9QQVlMT0FEPVwKCQkJCSAgQkFCRUwwMDA4SXxcCiAgICAgICAgICAgICAgICAgIEJhYmVsIHJlcXVlc3QgcGF5bG9hZDogezB9fFwKICAgICAgICAgICAgICAgICAgCkJBQkVMX1JFU1BPTlNFX1BBWUxPQUQ9XAoJCQkJICBCQUJFTDAwMDlJfFwKICAgICAgICAgICAgICAgICAgQmFiZWwgcmVzcG9uc2UgcGF5bG9hZDogezB9fFwKICAgIApNSVNTSU5HX1JFUVVFU1RfSUQ9XAoJCQkgICAgQkFCRUwwMDEwSXxcCgkJCSAgICBNaXNzaW5nIHJlcXVlc3QgSUQuIEFzc2lnbmVkIHswfXxcCgkJCSAgICAKTUlTU0lOR19TRVJWSUNFX01FVEFEQVRBPVwKICAgCQkJICAgIEJBQkVMMDAxMVd8XAogICAgICAgICAgICAgICAgVGhlIHNlcnZpY2Ugbm9kZSB0ZW1wbGF0ZTogezB9IGRvZXMgbm90IHByb3ZpZGUgYSBtZXRhZGF0YSBzZWN0aW9uLiBTa2lwcGluZy4uLnxcCgpURU1QX0ZJTEVfRVJST1I9XAogICAgICAgICAgICAgICAgICBCQUJFTDAwMTJFfFwKICAgICAgICAgICAgICAgICAgRXJyb3IgY3JlYXRpbmcgdGVtcG9yYXJ5IENTQVIgZmlsZS58XAogICAgICAgICAgICAgICAgICAKTE9BRF9QUk9QRVJUSUVTPVwKICAgICAgICAgICAgICAgICAgQkFCRUwwMDEzRXxcCiAgICAgICAgICAgICAgICAgIEVycm9yIGxvYWRpbmcgcHJvcGVydGllczogezB9fENvcnJlY3QgdGhlIGZpbGUgY29udGVudHN8XAogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIA==