RGFuaWVsICgyNyBEZWMgMjAwMikKLSBQaGlsaXBwZSBSYW91bHQgcmVwb3J0ZWQgYSBidWcgd2l0aCBIVFRQUyBjb25uZWN0aW9ucyB3aGljaCBJIGV2aWRlbnRseQogIGFkZGVkIGluIG15IDE5IGRlYyBmaXguIEkgY29ycmVjdGVkIGl0LgoKRGFuaWVsICgyMCBEZWMpCi0gSWRlYSBmcm9tIHRoZSBEZWJpYW4gbGF0ZXN0IHBhdGNoOiB1c2UgQU1fTUFJTlRBSU5FUl9NT0RFIGluIHRoZSBjb25maWd1cmUKICBzY3JpcHQgdG8gbWFrZSB0aGUgZGVmYXVsdCBtYWtlZmlsZSBsZXNzIGNvbmZ1c2luZyAidG8gdGhlIGNhc3VhbAogIGluc3RhbGxlciIuCgpWZXJzaW9uIDcuMTAuMy1wcmUzICgyMCBEZWMpCgpEYW5pZWwgKDE5IERlYykKLSBNYXR0aGV3IEJsYWluIHBhdGNoZWQgdGhlIEN1cmxfYmFzZTY0X2RlY29kZSgpIGZ1bmN0aW9uLgoKLSBFdmFuIEpvcmRhbiByZXBvcnRlZCBpbiBidWcgcmVwb3J0ICM2NTMwMjIgdGhhdCB0aGUgU1NMX3JlYWQoKSB1c2FnZSB3YXMKICB3cm9uZywgYW5kIGl0IGNlcnRhaW5seSB3YXMuIEl0IGNvdWxkIGxlYWQgdG8gY3VybCB1c2luZyB0b28gbXVjaCBDUFUgZHVlIHRvCiAgYSBzdHVwaWQgbG9vcC4KCkRhbmllbCAoMTggRGVjKQotIEFzIHN1Z2dlc3RlZCBieSBNYXJndXMgRnJldWRlbnRoYWwsIENVUkxFX0hUVFBfTk9UX0ZPVU5EIHdhcyByZW5hbWVkIHRvCiAgQ1VSTEVfSFRUUF9SRVRVUk5FRF9FUlJPUiBzaW5jZSBpdCBpcyByZXR1cm5lZCBvbiBhbnkgPj0gNDAwIGNvZGUgd2hlbgogIENVUkxPUFRfRkFJTE9ORVJST1IgaXMgc2V0LgoKRGFuaWVsICgxNyBEZWMpCi0gQnVnIHJlcG9ydGVkICM2NTE0NjQsIHJlcG9ydGVkIGJ5IENocmlzdG9waGVyIFBhbG1lciwgcHJvdmlkZWQgYW4gZXhhbXBsZQogIHNvdXJjZSBjb2RlIHVzaW5nIHRoZSBtdWx0aSBpbnRlcmZhY2UgdGhhdCBoYW5nIHdoZW4gdHJ5aW5nIHRvIGNvbm5lY3QgdG8gYQogIHByb3h5IG9uIGEgbG9jYWxob3N0IHBvcnQgd2hlcmUgbm8gcHJveHkgd2FzIGxpc3RlbmluZy4gVGhpcyBidWcgd2FzIG5vdAogIHJlcGVhdGFibGUgb24gbGliY3VybHMgdGhhdCB3ZXJlIElQdjYtZW5hYmxlZC4KCkRhbmllbCAoMTYgRGVjKQotIENocmlzdG9waGVyIFBhbG1lciBhbHNvIG5vdGljZWQgd2hhdCBWb2p0ZWNoIEphbm90YSBhbHJlYWR5IHdhcwogIGV4cGVyaWVuY2luZzogVGhlIGF0dGVtcHRlZCBuYW1lIHJlc29sdmUgZml4IGZvciBnbGliYyAyLjIuOTMgY2F1c2VkIGxpYmN1cmwKICB0byBjcmFzaCB3aGVuIHVzZWQgb24gc29tZSBvbGRlciBnbGliYyB2ZXJzaW9ucy4gVGhlIHByb2JsZW0gaXMgb2YgY291cnNlCiAgdGhlIHNpbGxpbmVzcyBvZiB0aGUgMi4yLjkzLiBJIGNvbW1pdHRlZCBhIGZpeCB0aGF0IGhvcGVmdWxseSBzaG91bGQgbWFrZQogIHRoZSBiaW5hcnkgcnVuIGZpbmUgb24gZWl0aGVyIG9uZSBvZiB0aGUgdmVyc2lvbnMsIGV2ZW4gdGhvdWdoIHRoZSBzb2x1dGlvbgogIGlzIG5vdCBhcyBuaWNlIGFzIEknZCBsaWtlIGl0IHRvIGJlLgoKRGFuaWVsICgxMyBEZWMpCi0gQnVnIHJlcG9ydCAjNjUxNDYwIGJ5IENocmlzdG9waGVyIFIuIFBhbG1lciBzaG93ZWQgdGhhdCB3aGVuIHVzaW5nIGxpYmN1cmwKICB0byBmb3IgZXhhbXBsZSBnbyBvdmVyIGEgcHJveHkgb24gbG9jYWxob3N0LCBpdCB3b3VsZCBhdHRlbXB0IHRvIGNvbm5lY3QKICB0aHJvdWdoIHRoZSBwcm94eSBUV0lDRS4KCiAgSSBhZGRlZCB0ZXN0IGNhc2UgNTAzIHdpdGggd2hpY2ggSSBtYW5hZ2VkIHRvIHJlcGVhdCB0aGlzIHByb2JsZW0gYW5kIEkKICBmaXhlZCB0aGUgY29kZSB0byBub3QgcmUtYXR0ZW1wdCBhbnkgY29ubmVjdHMgKHdoaWNoIGFsc28gbWFkZSBpdCBhIG5pY2VyCiAgZml4IGZvciB0aGUgIzY1MDk0MSBidWcgbWVudGlvbmVkIGJlbG93KS4KCiAgVGhlIHN3cyBzZXJ2ZXIgd2FzIGV4dGVuZGVkIHRvIGRlYWwgd2l0aCBDT05ORUNUIGluIG9yZGVyIHRvIG1ha2UgdGVzdAogIGNhc2UgNTAzIGRvIGdvb2QuCgotIEV2YW4gSm9yZGFuIHBvc3RlZCBidWcgcmVwb3J0ICM2NTA5ODkgYWJvdXQgYSBtZW1vcnkgbGVhayBpbiB0aGUgcHVibGljIGtleQogIHJldHJpZXZpbmcgY29kZS4gSGUgcHJvdmlkZWQgYSBzdWdnZXN0ZWQgZml4IGFuZCBJIG1lcmVseSBhcHBsaWVkIGl0IQoKLSBCdWcgcmVwb3J0ICM2NTA5NDEsIHBvc3RlZCBieSBDaHJpc3RvcGhlciBSLiBQYWxtZXIgaWRlbnRpZmllZCBhIHByb2JsZW0KICB3aXRoIHRoZSBtdWx0aSBpbnRlcmZhY2UgYW5kIGdldHRpbmcgZmlsZTovLyBVUkxzLiBUaGlzIHdhcyBub3cgZml4ZWQgYW5kCiAgdGVzdCBjYXNlIDUwMiB3YXMgYWRkZWQgdG8gdmVyaWZ5IHRoaXMuCgpEYW5pZWwgKDEyIERlYykKLSBUZXN0IGNhc2UgNTAwIGFuZCA1MDEgYXJlIHRoZSBmaXJzdCBldmVyIGxpYmN1cmwgdGVzdCBjYXNlcyB0aGF0IHJ1bi4KCi0gTWFkZSAiY29uZmlndXJlIC0tZW5hYmxlLWRlYnVnIiBjdXQgb2ZmIGFsbCAtTyogb3B0aW9ucyB0byB0aGUgY29tcGlsZXIKCi0gRmluYWxseSBmaXhlZCB0aGUgdGVzdCBzdWl0ZSdzIGZ0cCBzZXJ2ZXIgc28gdGhhdCB0ZXN0IGNhc2UgNDAyIGRvZXNuJ3QKICBjYXVzZSB0aGUgZm9sbG93aW5nIHRlc3QgY2FzZSB0byBmYWlsIGFueW1vcmUhCgpEYW5pZWwgKDExIERlYykKLSBDVVJMX01BWF9XUklURV9TSVpFIGlzIG5vdyBkZWNyZWFzZWQgdG8gMTZLQiBzaW5jZSBpdCBtYWtlcyB0aGUgV2luZG93cwogIHZlcnNpb24gcGVyZm9ybSB1cGxvYWRzIG11Y2ggZmFzdGVyISEhIFJCcmFtYW50ZSBkaWQgbG90cyBvZiByZXNlYXJjaCBvbgogIHRoaXMgdG9waWMuCgotIEZpeGVkIHRoZSAjaW5jbHVkZSBpbiBjdXJsL2N1cmwuaCB0byBpbmNsdWRlIHRoZSBvdGhlciBmaWxlcyBvdXRzaWRlIHRoZQogIGV4dGVybiAiQyIgc2NvcGUuCgpEYW5pZWwgKDEwIERlYykKLSBNb3ZlZCBhcm91bmQgYW5kIGFkZGVkIG1vcmUgbG9naWM6CgogIEZpcnN0LCBQT1NUIGRhdGEgaXMgbmV2ZXIgc2VudCBhcyBwYXJ0IG9mIHRoZSByZXF1ZXN0IGhlYWRlcnMgaW4gdGhlIGh0dHAuYwogIGNvZGUuIEl0IGlzIGFsd2F5cyBzZW50IHRoZSAibm9ybWFsIiByZWFkIGNhbGxiYWNrIHRoZW4gc2VuZCgpIHdheS4gVGhpcyBub3cKICBlbmFibGVzIGEgcGxhaW4gSFRUUCBQT1NUIHRvIGJlIHNlbnQgY2h1bmtlZCBpZiB3ZSB3YW50IHRvLiBUaGlzIGFsc28KICByZWR1Y2VzIHRoZSByaXNrIG9mIGhhdmluZyB2ZXJ5IGJpZyBQT1NUcyBjYXVzaW5nIHByb2JsZW1zLgoKICBGdXJ0aGVyLCBzZW5kaW5nIG9mZiB0aGUgaW5pdGlhbCBIVFRQIHJlcXVlc3QgaXMgbm90IGRvbmUgdXNpbmcgYSBsb29wCiAgYW55bW9yZS4gSWYgaXQgd2Fzbid0IGFsbCBzZW50IG9mZiBpbiB0aGUgZmlyc3Qgc2VuZCgpLCB0aGUgcmVzdCBvZiB0aGUKICByZXF1ZXN0IGlzIHNlbnQgb2ZmIGluIHRoZSBub3JtYWwgdHJhbnNmZXIgc2VsZWN0KCkgbG9vcC4gVGhpcyBtYWtlcyBzZXZlcmFsCiAgdGhpbmdzIHBvc3NpYmxlLCBidXQgbWFpbmx5IGl0IG1ha2VzIGxpYmN1cmwgYmxvY2sgbGVzcyB3aGVuIHVzZWQgZnJvbSB0aGUKICBtdWx0aSBpbnRlcmZhY2UgYW5kIGl0IGFsc28gcmVkdWNlcyB0aGUgcmlzayBvZiBwcm9ibGVtcyB3aXRoIGlzc3VpbmcgdmVyeQogIGxhcmdlIHJlcXVlc3RzLgoKRGFuaWVsICg5IERlYykKLSBNb3ZlZCB0aGUgcmVhZCBjYWxsYmFjayBwb2ludGVyIGFuZCBkYXRhIHdpdGhpbiB0aGUgc3RydWN0cyB0byBhIG1vcmUKICBzdWl0YWJsZSBwbGFjZS4gVGhpcyBpbiBwcmVwYXJhdGlvbiBmb3IgYSBiZXR0ZXIgSFRUUC1yZXF1ZXN0IHNlbmRpbmcgY29kZQogIHdpdGhvdXQgKGEgc2lsbHkpIGxvb3AuCgotIFRoZSBEb2RkcyBmaXggc2VlbXMgbm90IHRvIHdvcmsuCgotIFZvanRlY2ggSmFub3RhIHRlc3RzIHByb3ZlZCB0aGF0IHRoZSByZXNvbHZlIGZpeCBmcm9tIG9jdCAyMXN0IGlzIG5vdCBnb29kCiAgZW5vdWdoIHNpbmNlIG9idmlvdXNseSBvbGRlciBnbGliY3MgbWlnaHQgcmV0dXJuIEVBR0FJTiB3aXRob3V0IHRoaXMgbWVhbmluZwogIHRoYXQgdGhlIGJ1ZmZlciB3YXMgdG9vIHNtYWxsLgoKLSBbdGhlIG90aGVyIGRheV0gTWFkZSBsaWJjdXJsIGxvb3Agb24gcmVjdigpIGFuZCBzZW5kKCkgbm93IHVudGlsIGRvbmUsIGFuZAogIHRoZW4gZ2V0IGJhY2sgdG8gc2VsZWN0KCkuIFByZXZpb3VzbHkgaXQgd2VudCBiYWNrIHRvIHNlbGVjdCgpIG1vcmUgb2Z0ZW4KICB3aGljaCByZWFsbHkgd2FzIGEgc2xpZ2h0IG92ZXJoZWFkLiBUaGlzIHdhcyBkdWUgdG8gdGhlIHJlcG9ydGVkIHBlcmZvcm1hbmNlCiAgcHJvYmxlbXMgb24gSFRUUCBQVVQgb24gV2luZG93cy4gSSBjb3VsZG4ndCBzZWUgYW55IG5vdGFibGUgZGlmZmVyZW5jZSBvbgogIExpbnV4Li4uCgpWZXJzaW9uIDcuMTAuMy1wcmUyICg0IERlYyAyMDAyKQoKRGFuaWVsICg0IERlYyAyMDAyKQotIExvdHMgb2Ygd29yayB3aXRoIE1hbGNvbG0gRG9kZHMgbWFkZSBtZSBhZGQgYSB0ZW1wb3JhcnkgY29kZSBmaXggdGhhdCBub3cKICBzaG9ydGVucyB0aGUgdGltZW91dCB3YWl0aW5nIGZvciB0aGUgMjI2IG9yIDI1MCBsaW5lIGFmdGVyIGEgY29tcGxldGVkCiAgRlRQIHRyYW5zZmVyLgoKICBJZiBubyBkYXRhIGlzIHJlY2VpdmVkIHdpdGhpbiA2MCBzZWNvbmRzLCB0aGlzIGlzIHRha2VuIGFzIGEgc2lnbiBvZiBhIGRlYWQKICBjb250cm9sIGNvbm5lY3Rpb24gYW5kIHdlIGJhaWwgb3V0LgoKRGFuaWVsICgzIERlYyAyMDAyKQotIFJhbHBoJ3MgYnVnIHJlcG9ydCAjNjQ0ODQxIGlkZW50aWZpZWQgYSBwcm9ibGVtIGluIHdoaWNoIGN1cmwgcmV0dXJuZWQgYQogIHRpbWVvdXQgZXJyb3IgY29kZSB3aGVuIGluIGZhY3QgdGhlIHByb2JsZW0gd2FzIG5vdCBhIHRpbWVvdXQuIFRoZSBwcm9wZXIKICBlcnJvciBzaG91bGQgbm93IGJlIHByb3BhZ2F0ZWQgYmV0dGVyIHdoZW4gdGhleSdyZSBkZXRlY3RlZCBpbiB0aGUgRlRQCiAgcmVzcG9uc2UgcmVhZGluZyBmdW5jdGlvbi4KCi0gVXBkYXRlZCB0aGUgQm9ybGFuZCBNYWtlZmlsZXMuCgpEYW5pZWwgKDIgRGVjIDIwMDIpCi0gTmljb2xhcyBCZXJsb3F1aW4gcHJvdmlkZWQgYSBwYXRjaCB0aGF0IGludHJvZHVjZWQgLS1jcmVhdGUtZGlycyB0byB0aGUKICBjb21tYW5kIGxpbmUgdG9vbC4gV2hlbiB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggLW8sIGl0IGxldHMgY3VybCBjcmVhdGUKICBbbm9uLWV4aXN0aW5nXSBkaXJlY3RvcmllcyB1c2VkIGluIC1vLCBzdWl0YWJseSB1c2VkIHdpdGggIy1jb21iaW5hdGlvbnMKICBzdWNoIGFzOgoKICAgICBjdXJsICJ3d3cuaW1hZ2VzLmNvbS97Zmxvd2VycyxjaXRpZXMscGFya3MsbW91bnRhaW5zfS9waWNfWzEtMTAwXS5qcGcgXAogICAgICAgLW8gImRpcl8jMS9waWMjMi5qcGciIC0tY3JlYXRlLWRpcnMKClZlcnNpb24gNy4xMC4zLXByZTEKCkRhbmllbCAoMjggTm92IDIwMDIpCi0gSSB2aXNpdGVkIExhcnMgTm9yZGdyZW4gYW5kIGhhZCBhIGdvIHdpdGggaGlzIHByb2JsZW0sIHdoaWNoIGxlYWQgbWUgdG8KICBpbXBsZW1lbnQgdGhpcyBmaXguIElmIGxpYmN1cmwgZGV0ZWN0cyB0aGUgYWRkZWQgY3VzdG9tIGhlYWRlcgogICJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCIsIGl0IHdpbGwgbm93IGVuYWJsZSBhIGNodW5rZWQgdHJhbnNmZXIuCgogIEFsc28sIGNodW5rZWQgdHJhbnNmZXIgZGlkbid0IHF1aXRlIHdvcmsgYmVmb3JlIGJ1dCBzZWVtcyB0byBkbyBzbyBub3cuCgotIEtqZXRpbCBKYWNvYnNlbiBwb2ludGVkIG91dCB0aGF0IC4vY29uZmlndXJlIC0tZGlzYWJsZS1pcHY2IC0td2l0aG91dC16bGliCiAgZGlkbid0IHdvcmsgb24gYW55IHBsYXRmb3JtLi4uCgpEYW5pZWwgKDI2IE5vdiAyMDAyKQotIEZpeGVkIGEgYmFkIGFkZHJpbmZvIGZyZWUgaW4gdGhlIGhvc3RpcC5jIGNvZGUsIGhhcmRseSBleHBvc2VkIGFueXdoZXJlCgotIERhbiBCZWNrZXIgZm91bmQgYW5kIGZpeGVkIGEgbWlub3IgbWVtb3J5IGxlYWsgb24gcGVyc2lzdGVudCBjb25ubmVjdGlvbnMKICB1c2luZyBDVVJMT1BUX1VTRVJQV0QuCgpEYW5pZWwgKDIyIE5vdiAyMDAyKQotIEJhc2VkIG9uIFJhbHBoIE1pdGNoZWxsJ3MgZXhjZWxsZW50IGFuYWx5c2lzIEkgZm91bmQgYSBidWcgaW4gdGhlIHRlc3Qgc3VpdGUKICB3ZWIgc2VydmVyIChzd3MpIHdoaWNoIG5vdyBsZXRzIHRlc3QgY2FzZSAzMDYgcnVuIGZpbmUgZXZlbiBpbiBjb21iaW5hdGlvbgogIHdpdGggdGhlIG90aGVyIHRlc3QgY2FzZXMuCgotIEp1YW4gSWduYWNpbyBIZXJ24XMgZm91bmQgYSBjcmFzaCBpbiB0aGUgdmVyYm9zZSBjb25uZWN0IG1lc3NhZ2UgdGhhdCBpcwogIHVzZWQgb24gcGVyc2lzdGVudCBjb25uZWN0aW9ucy4gVGhpcyBidWcgd2FzIGFkZGVkIGluIDcuMTAuMiBkdWUgdG8gdGhlCiAgcmVhcnJhbmdlZCBuYW1lIHJlc29sdmUgY29kZS4KCkRhbmllbCAoMjAgTm92IDIwMDIpCi0gS2pldGlsIEphY29ic2VuIHByb3ZpZGVkIGEgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzOgoKICAgQ1VSTE9QVF9QUklWQVRFIHN0b3JlcyBhIHByaXZhdGUgcG9pbnRlciBpbiB0aGUgY3VybCBoYW5kbGUuCgogICBDVVJMSU5GT19QUklWQVRFIHJldHJpZXZlcyB0aGUgcHJpdmF0ZSBwb2ludGVyIGZyb20gdGhlIGN1cmwgaGFuZGxlLgoKLSBLYXJvbCBQaWV0cnphayBwb2ludGVkIG91dCBob3cgY3VybC1jb25maWcgLS1jZmxhZ3MgZGlkbid0IG91dHB1dCBhIGdvb2QKICBpbmNsdWRlIGRpciBzbyBJJ3ZlIHJlbW92ZWQgdGhhdCBmb3Igbm93LgoKVmVyc2lvbiA3LjEwLjIgKDE4IE5vdiAyMDAyKQoKRGFuaWVsICgxMSBOb3YgMjAwMikKLSBEYXZlIEhhbGJha2tlbiBhZGRlZCBjdXJsX3ZlcnNpb25faW5mbyB0byBsaWIvbGliY3VybC5kZWYgdG8gbWFrZSBsaWJjdXJsCiAgcHJvcGVybHkgYnVpbGQgd2l0aCBNU1ZDIG9uIFdpbmRvd3MuCgpEYW5pZWwgKDggTm92IDIwMDIpCi0gRG9pbmcgSFRUUCBQVVQgd2l0aG91dCBhIHNwZWNpZmllZCBmaWxlIHNpemUgbm93IG1ha2VzIGxpYmN1cmwgdXNlCiAgVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQuCgpEYW5pZWwgKDcgTm92IDIwMDIpCi0gQnVnIHJlcG9ydCAjNjM0NjI1IGlkZW50aWZpZWQgaG93IGN1cmwgcmV0dXJuZWQgdGltZW91dCBpbW1lZGlhdGVseSB3aGVuCiAgQ1VSTE9QVF9DT05ORUNUVElNRU9VVCB3YXMgdXNlZCBhbmQgcHJvdmlkZWQgYSBmaXguCgpWZXJzaW9uIDcuMTAuMi1wcmU0ICg2IE5vdiAyMDAyKQoKRGFuaWVsICg1IE5vdiAyMDAyKQotIExlaGVsIEJlcm5hZHQgZm91bmQgb3V0IGFuZCBmaXhlZC4gbGliY3VybCBzZW50IGVycm9yIG1lc3NhZ2UgdG8gdGhlIGRlYnVnCiAgb3V0cHV0IHdoZW4gaXQgc3RvcmVkIHRoZSBlcnJvciBtZXNzYWdlLgoKLSBBdmVyeSBGYXkgZm91bmQgc29tZSBwcm9ibGVtcyB3aXRoIHRoZSBETlMgY2FjaGUgKHdoZW4gdGhlIGNhY2hlIHRpbWUgd2FzCiAgc2V0IHRvIDAgd2UgZ290IGEgbWVtb3J5IGxlYWssIGJ1dCB3aGVuIHRoZSBsZWFrIHdhcyBmaXhlZCBoZSBnb3QgYSBjcmFzaAogIHdoZW4gaGUgdXNlZCB0aGUgQ1VSTE9QVF9JTlRFUkZBQ0Ugd2l0aCB0aGF0KSB0aGF0IGhhZCBtZSBkbyBzb21lIHJlYWwKICByZXN0cnVjdHVyaW5nIHNvIHRoYXQgd2Ugbm93IGhhdmUgYSByZWZlcmVuY2UgY291bnRlciBpbiB0aGUgZG5zIGNhY2hlCiAgZW50cmllcyB0byBwcmV2ZW50IGFuIGVudHJ5IHRvIGdldCBmbHVzaGVkIHdoaWxlIHN0aWxsIGFjdHVhbGx5IGluIHVzZS4KCiAgSSBhbHNvIGRldGVjdGVkIHRoYXQgd2UgcHJldmlvdXNseSBkaWRuJ3QgdXBkYXRlIHRoZSB0aW1lIHN0YW1wIHdoZW4gd2UKICBleHRyYWN0ZWQgYW4gZW50cnkgZnJvbSB0aGUgY2FjaGUgc28gdGhhdCBtdXN0J3ZlIGJlZW4gYSByZWFzb24gZm9yIHNvbWUKICB2ZXJ5IHdlaXJkIGRucyBjYWNoZSBidWdzLgoKVmVyc2lvbiA3LjEwLjItcHJlMwoKRGFuaWVsICgzMSBPY3QgMjAwMikKLSBEb3duZ3JhZGVkIGF1dG9tYWtlIHRvIDEuNi4zIGluIGFuIGF0dGVtcHQgdG8gZml4IGN5Z3dpbiBwcm9ibGVtcy4gKEl0CiAgdHVybmVkIG91dCB0aGlzIGRpZG4ndCBoZWxwIHRob3VnaC4pCgotIERpc2FibGUgdGhlIEROUyBjYWNoZSAoYnkgc2V0dGluZyB0aGUgdGltZW91dCB0byAwKSBtYWRlIGxpYmN1cmwgbGVhawogIG1lbW9yeS4gQXZlcnkgRmF5IGJyb3VnaHQgdGhlIGV4YW1wbGUgY29kZSB0aGF0IHByb3ZlZCB0aGlzLgoKVmVyc2lvbiA3LjEwLjItcHJlMgoKRGFuaWVsICgyOCBPY3QgMjAwMikKLSBVcGdyYWRlZCB0byBhdXRvY29uZiAyLjU0IGFuZCBhdXRvbWFrZSAxLjcgb24gdGhlIHJlbGVhc2UtYnVpbGQgaG9zdC4KCi0gS2V2aW4gUm90aCBtYWRlIHRoZSBjb21tYW5kIGxpbmUgdG9vbCBjaGVjayBmb3IgYSBDVVJMX0NBX0JVTkRMRSBlbnZpcm9ubWVudAogIHZhcmlhYmxlIChpZiAtLWNhY2VydCBpc24ndCB1c2VkKSBhbmQgaWYgbm90IHNldCwgdGhlIFdpbmRvd3MgdmVyc2lvbiB3aWxsCiAgY2hlY2sgZm9yIGEgZmlsZSBuYW1lZCAiY3VybC1jYS1idW5kbGUuY3J0IiBpbiB0aGUgY3VycmVudCBkaXJlY3Rvcnkgb3IgdGhlCiAgZGlyZWN0b3J5IHdoZXJlIGN1cmwgaXMgbG9jYXRlZC4gVGhhdCBmaWxlIGlzIHRoZW4gdXNlZCBhcyBDQSByb290IGNlcnQKICBidW5kbGUuCgotIEF2ZXJ5IEZheSBwb2ludGVkIG91dCB0aGF0IGN1cmwncyBjb25maWd1cmUgc2NyaXAgZGlkbid0IGdldCByaWdodCBpZiB5b3UKICB1c2VkIGF1dG9jb25mIG5ld2VyIHRoYW4gMi41Mi4gVGhpcyB3YXMgZHVlIHRvIHNvbWUgYmFkbHkgcXVvdGVkIGNvZGUuCgpWZXJzaW9uIDcuMTAuMi1wcmUxCgpEYW5pZWwgKDIzIE9jdCAyMDAyKQotIEVtaWxpYW5vIElkYSBjb25maXJtZWQgdGhhdCB3ZSBub3cgYnVpbGQgcHJvcGVybHkgd2l0aCB0aGUgQm9ybGFuZCBDKysKICBjb21waWxlciB0b28uIFdlIG5lZWRlZCB5ZXQgYW5vdGhlciBmaXggZm9yIHRoZSBJU08gY3BwIGNoZWNrIGluIHRoZSBjdXJsLmgKICBoZWFkZXIgZmlsZS4KCi0gWWV0IGFub3RoZXIgZml4IHdhcyBuZWVkZWQgdG8gZ2V0IHRoZSBIVFRQIGRvd25sb2FkIHdpdGhvdXQgaGVhZGVycyB0byB3b3JrLgogIFRoaXMgdGltZSBpdCB3YXMgbmVlZGVkIGlmIHRoZSBmaXJzdCAiYmVsaWV2ZWQgaGVhZGVyIiB3YXMgcmVhZCBhbGwgaW4gdGhlCiAgZmlyc3QgcmVhZC4gVGVzdCAzMDYgaGFzIG5vdCBydW4gcHJvcGVybHkgc2luY2UgdGhlIDExdGggb2N0b2JlciBmaXguCgpEYW5pZWwgKDIxIE9jdCAyMDAyKQotIFp2aSBIYXInRWwgcG9pbnRlZCBvdXQgYSBwcm9ibGVtIHdpdGggY3VybCdzIG5hbWUgcmVzb2x2aW5nIG9uIFJlZGhhdCA4CiAgbWFjaGluZXMgKHJ1bm5pbmcgSVB2NiBkaXNhYmxlZCkuIE1hdHMgTGlkZWxsIGxldCBtZSB1c2UgYW4gYWNjb3VudCBvbiBoaXMKICBtYWNoaW5lIGFuZCBJIGNvdWxkIHZlcmlmeSB0aGF0IGdldGhvc3RieW5hbWVfcigpIGhhcyBiZWVuIGNoYW5nZWQgdG8gcmV0dXJuCiAgRUFHQUlOIGluc3RlYWQgb2YgRVJBTkdFIHdoZW4gdGhlIGdpdmVuIGJ1ZmZlciBzaXplIGlzIHRvbyBzbWFsbC4gVGhpcyBpcwogIGdsaWJjIDIuMi45My4KCi0gQWxiZXJ0IENoaW4gaGVscGVkIG1lIGdldCB0aGUgLW5vLXVuZGVmaW5lZCBvcHRpb24gY29ycmVjdGVkIGluCiAgbGliL01ha2VmaWxlLmFtIHNpbmNlIEN5Z3dpbiBidWlsZHMgd2FudCBpdCB0aGVyZSB3aGlsZSBTb2xhcmlzIGJ1aWxkcyBkb24ndAogIHdhbnQgaXQgcHJlc2VudC4gS2V2aW4gUm90aCBoZWxwZWQgbWUgdHJ5IGl0IG91dCBvbiBjeWd3aW4uCiAgCi0gTmlraXRhIFNjaG1pZHQgcHJvdmlkZWQgYSBidWcgZml4IGZvciBhIEZPTExPV0xPQ0FUSU9OIGJ1ZyBpbnRyb2R1Y2VkIHdoZW4KICB0aGUgLi4vIHN1cHBvcnQgZ290IGluICg3LjEwLjEpLgoKRGFuaWVsICgxOCBPY3QgMjAwMikKLSBGYWJyaXppbyBBbW1vbGxvIHBvaW50ZWQgb3V0IGEgcmVtYWluaW5nIHByb2JsZW0gd2l0aCBGT0xMT1dMT0NBVElPTiBpbgogIHRoZSBtdWx0aSBpbnRlcmZhY2UuCgpEYW5pZWwgKDE3IE9jdCAyMDAyKQotIFJpY2hhcmQgQ29vcGVyJ3MgZXhwZXJpbWVudGluZyBwcm92ZWQgdGhhdCAtaiAoQ1VSTE9QVF9DT09LSUVTRVNTSU9OKSBkaWRuJ3QKICB3b3JrIHF1aXRlIGFzIHN1cHBvc2VkLiBZb3UgbmVlZGVkIHRvIHNldCBpdCAqYmVmb3JlKiB5b3UgdXNlCiAgQ1VSTE9QVF9DT09LSUVGSUxFLCBhbmQgd2UgZG9udCcgd2FudCB0aGF0IGtpbmQgb2YgZGVwZW5kZW5jaWVzLgoKRGFuaWVsICgxNSBPY3QgMjAwMikKLSBBbmRy6XMgR2FyY+1hIHByb3ZpZGVkIGNvcnJlY3Rpb25zIGZvciBlcnJhdGFzIGluIGZvdXIgbGliY3VybCBtYW4gcGFnZXMuCgpEYW5pZWwgKDEzIE9jdCAyMDAyKQotIFN0YXJ0aW5nIG5vdywgd2UgZ2VuZXJhdGUgYW5kIGluY2x1ZGUgUERGIHZlcnNpb25zIG9mIGFsbCB0aGUgZG9jcyBpbiB0aGUKICByZWxlYXNlIGFyY2hpdmVzLgoKRGFuaWVsICgxMiBPY3QgMjAwMikKLSBUcnlpbmcgdG8gY29ubmVjdCB0byBhIGhvc3Qgb24gYSBiYWQgcG9ydCBudW1iZXIgY2F1c2VkIHRoZSBtdWx0aSBpbnRlcmZhY2UKICB0byBuZXZlciByZXR1cm4gZmFpbHVyZSBhbmQgaXQgYXBwZWFyZWQgdG8ga2VlcCBvbiB0cnlpbmcgZm9yZXZlciAoaXQganVzdAogIGRpZG4ndCBkbyBhbnl0aGluZykuCgpEYW5pZWwgKDExIE9jdCAyMDAyKQotIERvd25sb2FkaW5nIEhUVFAgd2l0aG91dCBoZWFkZXJzIGRpZG4ndCB3b3JrIDEwMCUsIHNvbWUgb2YgdGhlIGluaXRpYWwgZGF0YQogIGdvdCB3cml0dGVuIHR3aWNlLiBLZXZpbiBSb3RoIHJlcG9ydGVkLgoKLSBLZXZpbiBSb3RoIGZvdW5kIG91dCB0aGUgImNvbmZpZyBmaWxlIiBwYXJzZXIgaW4gdGhlIGNsaWVudCBjb2RlIGNvdWxkCiAgc2VnZmF1bHQsIGxpa2UgaWYgRE9TIG5ld2xpbmVzIHdlcmUgdXNlZC4KClZlcnNpb24gNy4xMC4xICgxMSBPY3QgMjAwMikKCkRhbmllbCAoMTAgT2N0IDIwMDIpCi0gSmVmZiBMYXdzb24gZml4ZWQgYSBmZXcgcHJvYmxlbXMgd2l0aCBjb25uZWN0aW9uIHJlLXVzZSB0aGF0IHJlbWFpbmVkIHdoZW4KICB5b3Ugc2V0IENVUkxPUFRfUFJPWFkgdG8gIiIuCgpEYW5pZWwgKDkgT2N0IDIwMDIpCi0gQ3JhaWcgRGF2aXNvbiBmb3VuZCBhIHRlcnJpYmxlIGZsYXcgYW5kIENyaXMgQmFpbGlmZiBoZWxwZWQgb3V0IGluIHRoZQogIHNlYXJjaC4gR2V0dGluZyBIVFRQIGRhdGEgZnJvbSBzZXJ2ZXJzIHdoZW4gdGhlIGhlYWRlcnMgYXJlIHNwbGl0IHVwIGluCiAgbXVsdGlwbGUgcmVhZHMsIGNvdWxkIGNhdXNlIGp1bmsgZGF0YSB0byBnZXQgaW5zZXJ0ZWQgYW1vbmcgdGhlIHNhdmVkCiAgaGVhZGVycy4gVGhpcyBvbmx5IGNvbmNlcm5zIEhUVFAoUykgaGVhZGVycy4KCkRhbmllbCAoOCBPY3QgMjAwMikKLSBWaW5jZW50IFBlbnF1ZXJjJ2ggZ2F2ZSB1cyB0aGUgZ29vZCBzdWdnZXN0aW9uIHRoYXQgd2hlbiB0aGUgRVJSUk9SQlVGRkVSCiAgaXMgc2V0IGludGVybmFsbHksIHRoZSBlcnJvciB0ZXh0IGlzIHNlbnQgdG8gdGhlIGRlYnVnIGZ1bmN0aW9uIGFzIHdlbGwuCgotIEkgZml4ZWQgdGhlIHRlbG5ldCBjb2RlIHRvIHRpbWVvdXQgcHJvcGVybHkgYXMgdGhlIG9wdGlvbiB0ZWxscyBpdCB0by4gT24KICBub24td2luZG93cyBwbGF0Zm9ybXMuCgpEYW5pZWwgKDcgT2N0IDIwMDIpCi0gSm9obiBDcm93IHBvaW50ZWQgb3V0IHRoYXQgbGliY3VybC10aGUtZ3VpZGUgd2Fzbid0IGluY2x1ZGVkIGluIHRoZSByZWxlYXNlCiAgdGFyYmFsbCEKCi0gS2V2aW4gUm90aCBwb2ludGVkIG91dCB0aGF0IG1ha2UgaW5zdGFsbCBkaWRuJ3QgZG8gcmlnaHQgaWYgYnVpbGQgb3V0c2lkZQogIHRoZSBzb3VyY2UgdHJlZSAoY2EtYnVuZGxlIHdpc2UpLgoKLSBGT0xMT1dMT0NBVElPTiBidWdmaXggZm9yIHRoZSBtdWx0aSBpbnRlcmZhY2UKCkRhbmllbCAoNCBPY3QgMjAwMikKLSBLZXZpbiBSb3RoIGdvdCBwcm9ibGVtcyB3aXRoIGhpcyBjeWd3aW4gYnVpbGQgd2l0aCAtbm8tdW5kZWZpbmVkIHdhcyBub3QKICBwcmVzZW50IGluIGxpYi9NYWtlZmlsZS5hbSBzbyBJIHB1dCBpdCBiYWNrIGluIHRoZXJlIGFnYWluLiBUaGUgcG9vciBvbmUgd2hvCiAgbmVlZHMgdG8gcmVtb3ZlIGl0IGFnYWluIG11c3Qgd3JpdGUgYSBjb25maWd1cmUgc2NyaXB0IHRvIGRldGVjdCB0aGF0IG5lZWQuCgotIFJhbHBoIE1pdGNoZWxsIHBvaW50ZWQgb3V0IHRoYXQgY3VybCB3YXMgYSBiaXQgbmFpdmUgYW5kIGRpZG4ndCBkZWFsIHdpdGggLi8KICBvciAuLi8gc3R1ZmYgaW4gdGhlIHN0cmluZyBwYXNzZWQgYmFjayBpbiBhIExvY2F0aW9uOiBoZWFkZXIgd2hlbiBmb2xsb3dpbmcKICBsb2NhdGlvbnMuCgotIEFsYmVydCBDaGluIGhlbHBlZCBtZSB0byB3b3JrIG91dCBhIGJldHRlciBjb25maWd1cmUuaW4gY2hlY2sgZm9yIHpsaWIsIGFuZAogIGJvdGggLS13aXRob3V0LXpsaWIgYW5kIC13aXRoLXpsaWIgc2VlbSB0byB3b3JrIHJhdGhlciB3ZWxsIHJpZ2h0IG5vdy4KCi0gWnZpIEhhcidFbCBpbXByb3ZpZWQgdGhlIE9wZW5TU0wgRU5HSU5FIGNoZWNrIGluIHRoZSBjb25maWd1cmUgc2NyaXB0IHRvCiAgYmVjb21lIG1vcmUgYWNjdXJhdGUuCgpEYW5pZWwgKDEgT2N0IDIwMDIpCi0gRGV0bGVmIFNjaG1pZXIgcG9pbnRlZCBvdXQgdGhlIGxhY2sgb2YgYSAtLXdpdGhvdXQtbGlieiBvcHRpb24gdG8gY29uZmlndXJlLAogIHNvIEkgYWRkZWQgb25lLgoKVmVyc2lvbiA3LjEwICgxIE9jdCAyMDAyKQoKRGFuaWVsICgzMCBTZXAgMjAwMikKLSBNb2RpZmllZCB0aGUgY3VybF92ZXJzaW9uX2luZm8oKSBwcm90byBhbmQgcmV0dXJuZWQgc3RydWN0IG9uY2UgYWdhaW4sIGFuZAogIHVwZGF0ZWQgdGhlIG1hbiBwYWdlIGFjY29yZGluZ2x5LgoKLSBDcmlzIEJhaWxpZmYgZm91bmQgb3V0IHRoYXQgdGhlIHByZS1yZWxlYXNlcyBjcmFzaGVkIG9uIG5hbWUgbG9va3VwcyBvbgogIG5hbWVzIHN1Y2ggYXMgImE6IiBvciAiYmF6OiIgKG9uIExpbnV4IHZlcnNpb25zIG5vdCBiZWluZyBpcHY2LWVuYWJsZWQpIGR1ZQogIHRvIHNvbWUgd2VpcmQgcmV0dXJuIGNvZGVzIGZyb20gZ2V0aG9zdGJ5bmFtZV9yKCkuIEknbGwgYmxhbWUgdGhlIGNvbXBsZXRlCiAgbGFjayBvZiBkb2NzIGluIHRoYXQgZGVwYXJ0bWVudC4gQ3JpcyBwcm92aWRlZCBhIGZpeCwgd2hpY2ggSSBtb2RpZmllZCBvbmx5CiAgc2xpZ2h0bHkuCgpEYW5pZWwgKDI3IFNlcCAyMDAyKQotIEFmdGVyIGEgc3VnZ2VzdGlvbiBmcm9tIENocmlzdGlhbiBLdXJ6IHRvIERlYmlhbiBjdXJsIHBhY2thZ2UgbWFpbnRhaW5lcgogIERvbWVuaWNvIEFuZHJlb2xpLCBJIG1hZGUgaXQgcG9zc2libGUgdG8gb3ZlcnJpZGUgdGhlIHByb3h5IGVudmlyb25tZW50CiAgdmFyaWFibGVzIGJldHRlci4gTm93LCBieSBzZXR0aW5nIC14ICIiIHlvdSBjYW4gZXhwbGljaXRseSB0ZWxsIGxpYmN1cmwgdG8KICBub3QgdXNlIGEgcHJveHksIG5vIG1hdHRlciB3aGFuIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc2F5LgoKVmVyc2lvbiA3LjEwLXByZTQKCkRhbmllbCAoMjYgU2VwIDIwMDIpCi0gRXh0ZW5kZWQgY3VybF92ZXJzaW9uX2luZm8oKSBtb3JlIGFuZCB3cm90ZSBhIG1hbiBwYWdlIGZvciBpdC4KCkRhbmllbCAoMjUgU2VwIDIwMDIpCi0gbGliY3VybCBjb3VsZCBsZWFrIG1lbW9yeSB3aGVuIGRvd25sb2FkaW5nIG11bHRpcGxlIGZpbGVzIHVzaW5nIGh0dHAgcmFuZ2VzLAogIHJlcG9ydGVkIGFuZCBmaXhlZCBieSBKZWFuLUx1YyBHdWV2ZWwuCgotIFdhbHRlciBKLiBNYWNrIHByb3ZpZGVkIGNvZGUgYW5kIGRvY3MgZm9yIHRoZSBuZXcgY3VybF9mcmVlKCkgZnVuY3Rpb24gdGhhdAogIHNoYWxsIGJlIHVzZWQgdG8gZnJlZSBtZW1vcnkgdGhhdCBpcyBhbGxvY2F0ZWQgYnkgbGliY3VybCBhbmQgcmV0dXJuZWQgYmFjawogIHRvIHRoZSBhcHBsaWNhdGlvbiwgYXMgY3VybF9lc2NhcGUoKSBhbmQgY3VybF91bmVzY2FwZSgpIGRvLgoKLSBZYXJyYW0gU3VuaWwgcG9pbnRlZCBvdXQgYSBmbGF3IGluIHRoZSBtdWx0aSBpbnRlcmZhY2Ugd2hlcmUgYSBmYWlsZWQKICBjb25uZWN0aW9uIGRpZG4ndCBjbG9zZSBkb3duIHByb3Blcmx5IGFuZCB0aHVzIGEgc2Vjb25kIHRyYW5zZmVyIHVzaW5nIHRoZQogIHNhbWUgaGFuZGxlIGZhaWxlZC4KCi0gQW5kculzIEdhcmPtYSBmaXhlZCBhIGZsYXcgdGhhdCBtYWRlIChhbW9uZyBvdGhlciB0aGluZ3MpIGRpY3QtZmV0Y2hlcwogIHJldHVybiBhIHJhbmRvbSB2YWx1ZS4KCkRhbmllbCAoMjQgU2VwIDIwMDIpCi0gV2V6IEZ1cmxvbmcgYnJvdWdodCBoaXMgaW5pdGlhbCBwYXRjaCB0aGF0IGludHJvZHVjZWQgY3VybF92ZXJzaW9uX2luZm8oKS4KICBXZSBtaWdodCBuZWVkIHRvIHR3ZWFrIGl0IHNvbWV3aGF0IGJlZm9yZSByZWxlYXNlLgoKRGFuaWVsICgyMCBTZXAgMjAwMikKLSBDcmFpZyBNYXJrd2FyZHQgZml4ZWQgYW5vdGhlciBUcnU2NCBJUCByZXNvbHZlIHByb2JsZW0uCgpEYW5pZWwgKDE5IFNlcCAyMDAyKQotIERvbGJuZWZmIEEuViBhbmQgU3Bpcmlkb25vZmYgQS5WIG1hZGUgdGhlIGZpbGU6Ly8gY29kZSB3b3JrIHdpdGggcmVzdW1lcwogIGluIHRoZSBzYW1lIHN0eWxlIG90aGVyIGNvZGUgZG9lcy4KCi0gSWxndWl6IExhdHlwb3YgZml4ZWQgYSBmbGF3IGluIHRoZSBjbGllbnQgY29kZSB3aGVuIGZldGNoaW5nIG11bHRpcGxlIFVSTHMKICBhbmQgLUMgLSB3YXMgdXNlZC4gVGhlIGZpcnN0IGZpbGUncyByZXN1bWUgcG9zaXRpb24gd2FzIHRoZW4gYWNjaWRlbnRhbGx5CiAgcmV1c2VkIG9uIGFsbCB0aGUgb3RoZXIgZmlsZXMgdG9vLgoKRGFuaWVsICgxOCBTZXAgMjAwMikKLSBUaGUgY3VybF9lYXN5X3NldG9wdC4zIG1hbiBwYWdlIHdhcyBncmVhdGx5IG1vZGlmaWVkIGFuZCB0aGUgb3B0aW9ucyBoYXZlCiAgbm93IGJlZW4gZ3JvdXBlZCBpbiBsb2dpY2FsIGdyb3VwcyBzbyB0aGF0IGl0IHNob3VsZCBiZSBzb21ld2hhdCBlYXNpZXIgdG8KICByZWFkIGl0IGFuZCBmaW5kIHRoaW5ncyB5b3Ugc2VhcmNoIGZvci4KCkRhbmllbCAoMTMgU2VwIDIwMDIpCi0gS2V2aW4gUm90aCBwaW5wb2ludGVkIGEgc2NhcnkgZmxhdyBpbiBsaWJjdXJsLCB3aGVuIHRoZSBIVFRQIHNlcnZlciBkb2Vzbid0CiAgc2VuZCBhbnkgaGVhZGVycyBiYWNrLCBvbmx5IHJhdyBjb250ZW50LiBSaWdodCwgdGhhdCBpcyBhIHZpb2xhdGlvbiBvZiB0aGUKICBzdGFuZGFyZCBidXQgc3RpbGwgaGFwcGVucyBhdCB0aW1lcyBhbmQgd2UgbmVlZCB0byBkZWFsIHdpdGggaXQuIFRlc3QgY2FzZQogIDMwNiB3YXMgYWRkZWQgdG8gdmVyaWZ5IHRoYXQgd2UgZG8gcmlnaHQgbm93LgoKVmVyc2lvbiA3LjEwLXByZTMKCkRhbmllbCAoMTEgU2VwIDIwMDIpCi0gTHVrYXN6IEN6ZWtpZXJkYSBmb3VuZCBvdXQgdGhhdCBjdXJsIGRpZG4ndCBzZW5kIGEgY29ycmVjdCBIVFRQIEhvc3Q6IGhlYWRlcgogIHdoZW4geW91IHNwZWNpZmllZCB0aGUgVVJMIHdpdGggYW4gSVB2NiBJUC1hZGRyZXNzLgoKRGFuaWVsICg0IFNlcCAyMDAyKQotIFN2ZW4gTmV1aGF1cyBtYWRlIC0tc2lsZW50IGJlaW5nIGFja25vd2xlZGdlZCBldmVuIHdoZW4gbXVsdGlwbGUgVVJMcwogIHdlcmUgdXNlZC4gSXQgdXNlZCB0byBvdXRwdXQgIlsxLzJdOiBodHRwOi8vaG9zdC9hLmh0bWwuZGUgLS0+IGEuaHRtbC5kIiBldGMKICBldmVuIHdoZW4gdG9sZCB0byBzaHV0IHVwLgoKRGFuaWVsICgzIFNlcCAyMDAyKQotIFVwZGF0ZWQgYWxsIHNvdXJjZSBjb2RlIGhlYWRlcnMgdG8gdXNlIE1JVC1saWNlbnNlIHJlZmVyZW5jZXMgb25seSwgYW5kCiAgcG9pbnQgdG8gdGhlIENPUFlJTkcgZmlsZSBhbmQgdGhlIGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbAogIFVSTC4gSSd2ZSBjdXQgb3V0IGFsbCByZWZlcmVuY2VzIHRvIE1QTCB0aGF0IEkgY291bGQgZmluZC4KCi0gQ29yZWN0ZWQgdGhlIG1ha2VmaWxlcyB0byBub3QgYWx3YXlzIHVzZSAtbHogd2hlbiBsaW5raW5nCgpWZXJzaW9uIDcuMTAtcHJlMgoKRGFuaWVsICgyIFNlcCAyMDAyKQotIEphbWVzIEdhbGxhZ2hlciBhZGRlZCBDb250ZW50LUVuY29kaW5nIHN1cHBvcnQgdG8gbGliY3VybCBzbyBub3cgY3VybCBhbmQKICBsaWJjdXJsLXVzaW5nIGFwcHMgY2FuIHJlcXVlc3QgY29tcHJlc3NlZCBjb250ZW50cyB1c2luZyB0aGUgJ2RlZmxhdGUnCiAgbWV0aG9kLiBTZWUgdGhlIHNwZWNpYWwgZmlsZSBsaWIvUkVBRE1FLmVuY29kaW5nIGZvciBkZXRhaWxzLgoKICBjdXJsIC0tY29tcHJlc3NlZCBpcyBub3cgdXNlZCB0byByZXF1ZXN0IGNvbXByZXNzZWQgY29udGVudHMuCgogIGN1cmwtY29uZmlnIC0tZmVhdHVyZSB3aWxsIGluY2x1ZGUgJ2xpYnonIGlmIHRoaXMgZmVhdHVyZSB3YXMgYXJvdW5kIHdoZW4KICB0aGUgbGlicmFyeSB3YXMgYnVpbHQuCgpEYW5pZWwgKDMwIEF1ZyAyMDAyKQotIEFwcGxpZWQgYW4gYW5vbnltb3VzIFNPQ0tTNS1wcm94eSBwYXRjaC4gTm90IHByb3Blcmx5IHdvcmtpbmcgaW4gYWxsCiAgc2l0dWF0aW9ucyB0aG91Z2gsIGFzIGFsbCBnZXRhZGRyaW5mbygpLXVzaW5nIGxpYmN1cmxzIHdpbGwgZmFpbCBvbiB0aGlzLgogIFRoaXMgaXMgYmVjYXVzZSBvZiB0aGUgc29tZXdoYXQgbmFpdmUgd2F5IHRoZSBjdXJyZW50IGNvZGUgdHJpZXMgdG8gZXh0cmFjdAogIHRoZSBJUCBhZGRyZXNzIG9mIHRoZSBwcm94eS4KCi0gRml4ZWQgdXAgdGhlIFNTTCBjZXJ0IGZpeGVzIGZyb20gdGhlIG90aGVyIGRheSBldmVuIG1vcmUgYWZ0ZXIgbW9yZSBpbnB1dHMKICBmcm9tIENyaXMuIEFkZGVkIHRocmVlIG5ldyBTU0wgZXJyb3IgY29kZXMgdG8gbWFrZSB0aGUKICBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUiBzbGlnaHRseSBsZXNzIG92ZXJsb2FkZWQuCgpEYW5pZWwgKDI3IEF1ZyAyMDAyKQotIEFmdGVyIGxvdHMgb2YgdGFsayB3aXRoIFRvbSBaZXJ1Y2hhLCBOaWNrIEdpbWJyb25lIGFuZCBDcmlzIEJhaWxpZmYgSQogIGRlY2lkZWQgdG8gdGFsayB0aGUgYm9sZCBwYXRoIGFuZCBJIG5vdyBtYWRlIGxpYmN1cmwgZG8gQ0EgY2VydGlmaWNhdGUKICB2ZXJpZmljYXRpb24gYnkgZGVmYXVsdC4gVGh1cyBsaWJyYXJ5IHVzZXJzIG5lZWQgdG8gZXhwbGljaXRseSB0dXJuIHRoaXMgb2ZmCiAgaWYgeW91IHdhbnQgdG8gY29ubmVjdCB0byBzaXRlcyB3aXRob3V0IHByb3BlciBjaGVja2luZy4gV2UgYWxzbyBpbnN0YWxsIGEKICBDQSBjZXJ0IGJ1bmRsZSBvbiAnbWFrZSBpbnN0YWxsJyBub3cuCgogIFRoZSBjdXJsIHRvb2wgbm93IHJlcXVpcmVzIHRoZSAtay8tLWluc2VjdXJlIG9wdGlvbiBpbiBvcmRlciB0byBhbGxvdwogIGNvbm5lY3Rpb25zIGFuZCBvcGVyYXRpb25zIG9uIFNTTCBzaXRlcyB0aGF0IGFyZW4ndCBwcm9wZXJseSB2ZXJpZmllZCB3aXRoCiAgLWNhZmlsZSBvciAtLWNhcGF0aC4KCiAgY3VybC1jb25maWcgLS1jYSBkaXNwbGF5cyB0aGUgYnVpbHQtaW4gcGF0aCB0byB0aGUgQ0EgY2VydCBidW5kbGUuCgpEYW5pZWwgKDI2IEF1ZyAyMDAyKQotIEFuZHJldyBGcmFuY2lzIGNsZWFuZWQgdXAgc29tZSBjb2RlIHRoYXQgbm93IGNvbXBpbGVzIGZpbmUgd2l0aG91dCB0aGUgbmVlZAogIGZvciB1Z2x5IE1TVkMgcHJhZ21hcy4KCi0gS2VpdGggTWFjRG9uYWxkIGZvdW5kIGEgbWlub3IgYnVnIGluIHNyYy9tYWluLmMgdGhhdCBtYWRlIGl0IGNsb3NlIHN0ZGluCiAgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIGZpbGUgaGFuZGxlLiBJdCBzaG91bGRuJ3QgaGF2ZSByZXN1bHRlZCBpbiBtdWNoCiAgdHJvdWJsZSBhcyBtb3N0IG9wZXJhdGluZyBzeXN0ZW1zIGNsb3NlIGFsbCBmaWxlIGhhbmRsZXMgb24gcHJvY2VzcyBleGl0CiAgYW55d2F5LgoKRGFuaWVsICgyMiBBdWcgMjAwMikKLSBNYXJrdXMgT2Jlcmh1bWVyIHByb3ZpZGVkIHNvbWUgZG9jdW1lbnRhdGlvbiBmb3IgaGlzIHByZXZpb3VzbHkgcHJvdmlkZWQKICBDVVJMT1BUX05PU0lHTkFMIGZpeC4KCi0gUGF0Y2hlZCB0aGUgbGliL01ha2VmaWxlLmFtIHRvIGhvcGVmdWxseSBubyBsb25nZXIgY29tcGxhaW4gb24gdW5kZWZpbmVkCiAgc3ltYm9scyB0aGF0IHNlZW1lZCB0byBvY2N1ciBvbiBidWlsZHMgd2l0aCBzaGFyZWQgT3BlblNTTCBsaWJyYXJpZXMgb24KICBTb2xhcmlzIGxhdGVseS4uLgoKRGFuaWVsICgyMCBBdWcgMjAwMikKLSBGaXhlZCBjb21waWxlciB3YXJuaW5ncyBvbiBNU0NWKysgY29tcGlsZXMuIFdlJ3JlIGxvb2tpbmcgZm9yIGhlbHAgaGVyZToKICByZW1vdmUgdGhlIHByYWdtYXMgZnJvbSBsaWIvY29uZmlnLXdpbjMyLmggYW5kIGFkanVzdCB0aGUgc291cmNlcyB3aGVyZQogIHRoZSB3YXJuaW5ncyBvY2N1ci4gSGlkaW5nIHRoZW0gd2l0aCBwcmFnbWFzIGxpa2UgdGhpcyBpcyBub3QgdGhlIGNvcnJlY3QKICB3YXkgb2YgZGVhbGluZyB3aXRoIGNvbXBpbGVyIHdhcm5pbmdzLgoKRGFuaWVsICgxMyBBdWcgMjAwMikKLSBVbHJpY2ggWmFkb3cgbWFkZSB0aGUgZ2xvYmFsIGluY2x1ZGUgZmlsZXMgaW4gY3VybC8qIGluY2x1ZGUgdGhlbXNlbHZlcwogIHVzaW5nICJjdXJsLmgiIGluc3RlYWQgb2YgPGN1cmwvY3VybC5oPiB3aGljaCB0aHVzIGFsbG93cyBwZW9wbGUgdG8gbW9yZQogIGZyZWVseSBkZWNpZGUgaG93IHRvIGluY2x1ZGUgY3VybCBhbmQgaG93IHRvIHNldHVwIHRoZWlyIGluY2x1ZGUgcGF0aHMuCgotIFN0ZXJsaW5nIEh1Z2hlcyBhZGRlZCB0aGUgY3VybF9zaGFyZSogaW50ZXJmYWNlLCBzb21ld2hhdCBhcyBkaXNjdXNzZWQKICBwcmV2aW91c2x5LgoKLSBK9nJuIEhhcnRyb3RoIHBvaW50ZWQgb3V0IHRoYXQgcG9sbCgpIHdhcyB1c2VkIGluIHRoZSBwcmUxIHNvdXJjZSBjb2RlIGFuZAogIGl0IGlzbid0IHZlcnkgcG9ydGFibGUsIHNvIG5vdyBJIGNoZWNrIGZvciBpdCBpbiB0aGUgY29uZmlndXJlIHNjcmlwdCBhbmQKICB3b3JrIGFyb3VuZCBpdC4KClZlcnNpb24gNy45LjktcHJlMQoKRGFuaWVsICgxMiBBdWcgMjAwMikKLSBBcHBsaWVkIG15IGluaXRpYWwgdGFrZSBvbiBtYWtpbmcgdGhlIG11bHRpIHN0dWZmIG1vcmUgYXN5bmNocm9ub3VzLiBDb25uZWN0cwogIHNob3VsZCBub3cgcmV0dXJuIGJhY2sgd2l0aG91dCAiaGFuZ2luZyIgdW50aWwgaXQgaGFzIGNvbm5lY3RlZCBmb3IgcmVhbC4KICBUaGlzIHNob3VsZCBhbHNvIGJlIHRoZSBjYXNlIGZvciBGVFAtUEFTViBjb25uZWN0cy4KCkRhbmllbCAoOSBBdWcgMjAwMikKLSBBcHBsaWVkIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyJ3MgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIENVUkxPUFRfTk9TSUdOQUwsCiAgd2hpY2ggZWZmZWN0aXZlbHkgcHJldmVudHMgbGliY3VybCBmcm9tIGRvaW5nIGFueXRoaW5nIHRoYXQgbWF5IGNhdXNlCiAgc2lnbmFscyB0byBnZXQgc2VudC4gVGhpcyBpcyBiYXNpY2x5IGZvciBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbnMgdGhhdAogIG5vdyBjYW4gdXNlIHRpbWVvdXRzIHByb3Blcmx5LCB3aXRob3V0IHJpc2tpbmcgYW55IHNpZ25hbHMgdG8gYnVyc3QgaW4gYW5kCiAgcnVpbiB0aGUgcGFydHkuCiAgCkRhbmllbCAoNSBBdWcgMjAwMikKLSBMdWthc3ogQ3pla2llcmRhIHJlcG9ydGVkIHRoYXQgUkZDMjczMi1zdHlsZSBsaXRlcmFsIElQdjYgYWRkcmVzc2VzIGRpZG4ndAogIHdvcmsuIFdoZW4gZGlkIHRoYXQgY29kZSB2YW5pc2g/IEFueXdheSwgaXQncyBiYWNrIGFnYWluIG5vdyBhbmQgc2VlbXMgdG8KICB3b3JrIQoKLSBKb25hdGFuIExhbmRlciBmb3VuZCBvdXQgdGhhdCBQT1NUaW5nIGFuIGVtcHR5IHN0cmluZyBkaWRuJ3Qgd29yayB3aXRoIHRoZQogIGNvbW1hbmQgbGluZSB0b29sLgoKRGFuaWVsICgzIEF1ZyAyMDAyKQotIEr2cm4gSGFydHJvdGggZml4ZWQgdGhlIGxpYmN1cmwuZGVmIGZpbGUgdG8gYnVpbGQgdGhlIHdpbmRvd3MgRExMIHdpdGgKICB0aGUgbXVsdGkgaW50ZXJmYWNlIGVuYWJsZWQuCgpEYW5pZWwgKDEgQXVnIDIwMDIpCi0gVGhlIGZ0cCBQT1JUIGNvbW1hbmQgbm93IHVzZXMgYSBiZXR0ZXIgZGVmYXVsdCBJUCBhZGRyZXNzLCBhcyBpdCB3aWxsCiAgZXh0cmFjdCBhbmQgdXNlIHRoZSBsb2NhbCBJUCBhZGRyZXNzIHVzZWQgYnkgdGhlIGNvbnRyb2wgY29ubmVjdGlvbi4KCi0gTW9kaWZpZWQgdGhlICNpbmNsdWRlIGxpbmVzIGluIGN1cmwvbXVsdGkuaCB0byB3b3JrIGJldHRlciBvbiBtb3JlCiAgcGxhdGZvcm1zLgoKRGFuaWVsICgzMSBKdWwgMjAwMikKLSBBdHRlbXB0ZWQgYSBmaXggZm9yIFJheSBEZUdlbm5hcm8ncyByZXBvcnRlZCBIUC1VWCBob3N0IG5hbWUgcmVzb2x2ZQogIHByb2JsZW1zLgoKRGFuaWVsICgzMCBKdWwgMjAwMikKLSBQcml5YSBSYW1ha3Jpc2huYW4gYW5kIFJ5YW4gSm9uZXMgY29tcGlsZXMgY3VybC9jdXJsLmggd2l0aCBhIEMrKyBjb21waWxlcgogIGFuZCBkb24ndCBnZXQgX19TVERDX18gZGVmaW5lZCwgd2hpY2ggcmVxdWlyZWQgdXMgdG8gZXh0ZW5kIHRoZSBwcmVwcm9jZXNzb3IKICBjaGVjayBmb3IgdGhlICMjIG9wZXJhdG9yIHVzYWdlLgoKLSBDb3JyZWN0IHRoZSBkZXNjcmlwdGlvbiBmb3IgQ1VSTE9QVF9QQVNTV0RGVU5DVElPTiwgaWYgc2V0IHRvIE5VTEwgdGhlCiAgaW50ZXJuYWwgZGVmYXVsdCBmdW5jdGlvbiB3aWxsIGJlIHB1dCBiYWNrLgoKLSBkYW5mdXp6IGF0IG1pbGsuY29tIGZvdW5kIG91dCB0aGF0IGxpYmN1cmwgYmFkbHkgYXNzdW1lZCBhIHNwYWNlIGFmdGVyCiAgJ1NldC1Db29raWU6JyBzbyBpZiBpdCB3YXNuJ3QgcHJlc2VudCwgaXQgY2F1c2VkIHRoZSBmaXJzdCBsZXR0ZXIgb2YgdGhlCiAgY29va2llIG5hbWUgdG8gZmFsbCBvZmYhCgpEYW5pZWwgKDI5IEp1bCAyMDAyKQotIFRoZSBwYXNzd29yZCBwcm9tcHQgYXNraW5nIGZvciB1c2VyIHBhc3N3b3JkIHVzZWQgc3Rkb3V0IGFuZCBub3cgdXNlcwogIHN0ZGVyciBpbnN0ZWFkIHRvIGJldHRlciBhbGxvdyByZWRpcmVjdGluZy4gSXQgYWxzbyBsZWFrZWQgYSBmb3BlbigpIGZpbGUKICBoYW5kbGUgdGhhdCBpcyBub3cgZml4ZWQuCgpEYW5pZWwgKDI4IEp1bCAyMDAyKQotIEhBVkVfU0VUVkJVRiB3YXMgbGVmdCBvdXQgZnJvbSBzcmMvbWFpbi5jIHdoaWNoIG1hZGUgLU4gbm90IHdvcmsuIEZvdW5kIG91dAogIGJ5IE0gVC4KCkRhbmllbCAoMjYgSnVuIDIwMDIpCi0gR2xlbiBOYWthbXVyYSBzb2x2ZWQgYSBjcmFzaCBpbiB0aGUgbmFtZSByZXNvbHZpbmcgZnVuY3Rpb24gZm9yIElQLW9ubHkKICBhZGRyZXNzZXMgb24gQWxwaGEgTGludXggKGF0IGxlYXN0KS4KCi0gVC4gQmhhcmF0aCBjb3JyZWN0ZWQgdGhlIGhpZ2ggcmVzb2x1dGlvbiB0aW1lciBpbnRyb2R1Y2VkIGluIDcuOS44LgoKRGFuaWVsICgyMiBKdW4gMjAwMikKLSBBbmRy6XMgR2FyY+1hIHBvaW50ZWQgb3V0IG1hbiBwYWdlIGVycm9ycyBpbiBjdXJsX2Zvcm1hZGQuMy4gSSBmaXhlZC4KCkRhbmllbCAoMTkgSnVuIDIwMDIpCi0gQ2hyaXMgQ29tYmVzIHBvaW50ZWQgb3V0IGEgZmxhdyBpbiBjdXJsX2VzY2FwZSgpLiBJIGZpeGVkLiBXZSBubyBsb25nZXIKICB0cmllcyB0byBnZW5lcmF0ZSBub3IgcGFyc2UgJysnIGluIFVSTHMuIFNwYWNlcyBiZWNvbWUgJTIwLCBhbmQgb25seSAlLWNvZGVzCiAgYXJlIHRyYW5zbGF0ZWQgYnkgY3VybF91bmVzY2FwZSgpLgoKRGFuaWVsICgxNSBKdW4gMjAwMikKLSBBZGRlZCAtLWxpbWl0LXJhdGUgdG8gdGhlIGN1cmwgdG9vbC4gQWxsb3dzIHRoZSB1c2VyIHRvIHNldCBhIG1heG1pbXVtCiAgdXBwZXIgbGltaXQgdG8gaG93IG11Y2ggYmFuZHdpZHRoIHRvIHVzZSBmb3IgdHJhbnNmZXJzLgoKLSBDVVJMT1BUX0JVRkZFUlNJWkUgd2FzIGFkZGVkIHRvIGxpYmN1cmwuIFRoaXMgc2V0cyBhIHByZWZlcmVkIHNpemUgZm9yIHRoZQogIHJlY2VpdmUgYnVmZmVyIGluIGxpYmN1cmwuIFRoZSBtYWluIHBvaW50IG9mIHRoaXMgd291bGQgYmUgdGhhdCB0aGUgd3JpdGUKICBjYWxsYmFjayBnZXRzIGNhbGxlZCBtb3JlIG9mdGVuIGFuZCB3aXRoIHNtYWxsZXIgY2h1bmtzLgoKRGFuaWVsICgxNCBKdW4gMjAwMikKLSBZYXJyYW0gU3VuaWwgZm91bmQgb3V0IHRoYXQgdGhlIFNvY2tldElzRGVhZCgpIGZ1bmN0aW9uIHBlcmZvcm1lZCBhIGxvdAogIGZhc3RlciBvbiBXaW5kb3dzIHdoZW4gcmVtb3ZpbmcgdGhlIDEgbWljcm9zZWNvbmQgdGltZW91dC4KCi0gSGFubm8gTC4gS3Jhbnpob2ZmIGZpeGVkIHRoZSBWQysrIHByb2plY3QgZmlsZXMuCgotIFRvbSBNYXR0aXNvbiBmb3VuZCBvdXQgdGhhdCBmdHAgdHJhbnNmZXJzIGNsb3NlZCB0aGUgY29ubmVjdGlvbiBhIGxpdHRsZQogIHRvbyBvZnRlbi4KCi0gTWlrbG9zIE5lbWV0aCBwb3N0ZWQgYSBWQysrIG1ha2VmaWxlIGZpeCBhbmQgc29tZSBJTlNUQUxMIGNvbW1lbnRzIG9uIGhvdwogIHRvIGRpc2FibGUgc3BlY2lmaWMgcHJvdG9jb2xzIHdoZW4gYnVpbGRpbmcgZm9yIFdpbmRvd3MuCgpWZXJzaW9uIDcuOS44CgpEYW5pZWwgKDEzIEp1biAyMDAyKQotIFRpbWUgdG8gbGV0IHRoaXMgYmFieSBnby4KCkRhbmllbCAoMTIgSnVuIDIwMDIpCi0gQ2hyaXMgQ29tYmVzIGFkZGVkIHRocmVlIG5ldyBvcHRpb25zIGZvciBjdXJsX2Zvcm1hZGQoKTogQ1VSTEZPUk1fQlVGRkVSLAogIENVUkxGT1JNX0JVRkZFUlBUUiwgQ1VSTEZPUk1fQlVGRkVSTEVOR1RILiAgVGhleSBhcmUgdXNlZCB0byBjcmVhdGUgYQogIG11bHRpcGFydCB0aGF0IGFwcGVhcnMgYXMgYSByZWd1bGFyIGZpbGUgdXBsb2FkLCBidXQgdGhlIGRhdGEgaXMgcHJvdmlkZWQKICB3aXRoIGEgcG9pbnRlciBhbmQgbGVuZ3RoLgogIAotIE5pY28gQmFnZ3VzIG1hZGUgdGhlIFZNUyB2ZXJzaW9uIHVzZSBzaWdzZXRqbXAoKSB0b28uCgotIEr2cm4gSGFydHJvdGggZml4ZWQgdGhlIG1pbmd3MzIgYnVpbGQgdXNpbmcgdGhlIG1tIGxpYi4KCi0gQXBwbGllZCBwYXRjaGVzIGJ5IEtyaXMgS2VubmF3YXkgdGhhdCBjb3JyZWN0IGZvcm1hdCBzdHJpbmcgcHJvYmxlbXMgaW4KICBsaWIvZnRwLmMgYW5kIGxpYi9sZGFwLmMuCgpWZXJzaW9uIDcuOS44LXByZTMKCkRhbmllbCAoMTEgSnVuIDIwMDIpCi0gSmFtZXMgQ29uZSBicm91Z2h0IHRoZSBpZGVhIG9mIHVzaW5nIHNpZ3NldGptcCgpIGluIHRoZSBzaWduYWwgaGFuZGxlciB0bwogIG1ha2UgdGhlIHRpbWUtb3V0IG9mIG5hbWUgbG9va3VwcyB0byB3b3JrLCBldmVuIHdoZW4gdGhlIHVuZGVybHlpbmcgbmFtZQogIHJlc29sdmVyIGxpYnJhcnkgdHJhcHMgRUlOVFIuIFRoZSB1c2Ugb2Ygc2lnc2V0am1wKCkgYW5kIHNpZ2xvbmdqbXAoKSBmb3IKICB0aGlzIG1heSBiZSBhIGJpdCBkcmFzdGljLCBhbmQgYWxzbyBub3QgbGlrZWx5IHRvIGV4aXN0IG9uIGFsbCBwbGF0Zm9ybXMuICBJCiAgYWRkZWQgY2FyZWZ1bCBjaGVja2luZyBmb3IgdGhpcyBpbiB0aGUgY29uZmlndXJlIHNjcmlwdCwgZXZlbiBjaGVja3MgZm9yIGl0CiAgYmVpbmcgYSBtYWNybyAod2hpY2ggc2VlbXMgdG8gYmUgdGhlIGNhc2UgaW4gZm9yIGV4YW1wbGUgTGludXgpLgoKICBzaWdzZXRqbXAoKSBzZWVtcyB0byBiZSBtZW50aW9uZWQgaW4gdGhlIFNpbmdsZSBVbml4IHNwZWNpZmljYXRpb24uCgotIE1pa2xvcyBOZW1ldGggYnJvdWdodCBhIHBhdGNoIHRoYXQgYWxsb3dzIGxpYmN1cmwgdG8gZ2V0IGJ1aWx0IHdpdGggc3BlY2lmaWMKICBwcm90b2NvbHMgZGlzYWJsZWQuIFRoaXMgaXMgZG9uZSBieSBydW5uaW5nIC4vY29uZmlndXJlCiAgLS1kaXNhYmxlLVtwcm90b2NvbF0uCgotIEZUUCByYW5nZSBkb3dubG9hZHMgY291bGQgbWFrZSBDVVJMRV9GVFBfV1JJVEVfRVJST1IgZ2V0IHJldHVybmVkLiBXZSBub3cKICBtYWtlIHByZWNhdXRpb25zIHRvIG5vdCByZXR1cm4gdGhpcyBmb3IgcmFuZ2UgZG93bmxvYWRzLgoKICBBZGRlZCB0ZXN0IGNhc2UgMTM1IHRoYXQgbWFrZXMgYW4gZnRwIHJhbmdlIGRvd25sb2FkLiBIYWQgdG8gdHdlYWsgdGhlCiAgcnVudGVzdHMucGwgc2NyaXB0IGEgYml0IHRvby4KCi0gQnVnIHJlcG9ydCAjNTY2ODM1IGlkZW50aWZpZWQgYSBzdHJsZW4oKSBvbiBhIE5VTEwgcG9pbnRlci4gQWRkZWQgYWRkaXRpb25hbAogIGNoZWNrIHRvIHByZXZlbnQgdGhpcy4KCkRhbmllbCAoMTAgSnVuIDIwMDIpCi0gRm91bmQgYW5kIGNvcnJlY3RlZCBhIGNvbm5lY3QgZmFpbHVyZSBwcm9ibGVtIHRoYXQgZGlkbid0IGNyZWF0ZSBhIGh1bWFuCiAgZXJyb3IgdGV4dC4KCi0gQWRkZWQgY29kZSB0byBjb21waWxlIHdpdGggT3BlblNTTCAwLjkuNy4gQmFzZWQgb24gcGF0Y2ggZnJvbSBKYWNvYiBNZXVzZXIKICBhbmQgY29tbWVudHMgZnJvbSBH9nR6IEJhYmluLUViZWxsLgoKLSBHYXV0YW0gTWFuaSBmb3VuZCBhIHNvY2tldCBkZXNjcmlwdG9yIGxlYWsgdGhhdCBoYXBwZW5lZCB3aGVuIEZUUCB0cmFuc2ZlcnMKICBmYWlsZWQgYW5kIHlvdSByZWludm9rZWQgY3VybF9lYXN5X3BlcmZvcm0oKS4KCkRhbmllbCAoNSBKdW4gMjAwMikKLSBHdXN0YWYgSHVpIGNvcnJlY3RlZCBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoKSBzbyB0aGF0IGl0IHdvbid0IGNyYXNoIG5vCiAgbWF0dGVyIHdoZW4geW91IGRlY2lkZSB0byByZW1vdmUgdGhlIENVUkwgaGFuZGxlLgoKLSBIQVZFX1JBTkRfU1RBVFVTIHdhcyBhZGRlZCB0byBsaWIvY29uZmlnLXdpbjMyLmggYnkgQW5kcmVhcyBPbHNzb24sIGFzIGl0CiAgbWFrZXMgd2luZG93cyBidWlsZHMgc3RvcCBjb21wbGFpbmluZyBhYm91dCAid2VhayBzZWVkaW5nIiB3aGVuIGl0IGluIGZhY3QKICBpc24ndC4KCi0gQW5vdGhlciA2NGJpdCBhcmNoaXRlY3R1cmUgY3Jhc2ggdGhhdCB3YXMgaW50cm9kdWNlZCBpbiA3LjkuNyB3YXMgbm93CiAgcmVtb3ZlZCwgYXMgYnVnIHJlcG9ydCAjNTY0NTg1IGNsYXJpZmllZC4gVGhpcyBoYXBwZW5lZCBkdWUgdG8gb3VyIGF0dGVtcHRzCiAgdG8gb25seSBhbGxvY2F0ZSBvbmx5IGFzIG11Y2ggbWVtb3J5IGFzIGlzIGFjdHVhbGx5IG5lZWRlZCBmb3IgbmFtZQogIHJlc29sdmluZyAodXNpbmcgcmVhbGxvYykgd2hpY2ggY2FsbGVkIGZvciBhIGZ1bmN0aW9uIHRoYXQgY291bGQgJ21vdmUnIGEKICBob3N0ZW50IHN0cnVjdCBpbiBtZW1vcnkuCgpWZXJzaW9uIDcuOS44LXByZTIKCkRhbmllbCAoMyBKdW4gMjAwMikKLSBULiBCaGFyYXRoIGZpeGVkIHRoZSBDVVJMSU5GT19SRURJUkVDVF9USU1FIHRvIHJldHVybiBhIGNvcnJlY3QgdGltZSBhbmQKICBtYWRlIHRoZSBDVVJMSU5GT19SRVFVRVNUX1NJWkUgcmV0dXJuIHRoZSBjb3JyZWN0IHRvdGFsIHJlcXVlc3Qgc2l6ZS4gSGUKICBhbHNvIG1hZGUgdGhlIHdpbjMyIHRpbWVycyB1c2UgaGlnaGVyIHJlc29sdXRpb24gdGhhbiBiZWZvcmUuCgpEYW5pZWwgKDI5IE1heSAyMDAyKQotIFJlbmF1ZCBDaGFpbGxhdCBtYWRlIG1lIGF3YXJlIG9mIHRoZSBmYWN0IHRoYXQgbGliY3VybCByZXR1cm5lZCBhbiBlcnJvciBpZgogIHlvdSB0cmllZCB0byBnZXQgYW4gZW1wdHkgRlRQIGZpbGUuIFRoaXMgc2VlbWVkIGxpa2UgYSB3cm9uZyB0aGluZyB0byBkbywgc28KICBub3cgaXQgbm8gbG9uZ2VyIGRvZXMgdGhhdCEgSSBqdXN0IGhvcGUgdGhhdCBubyBvbmUgYnVpbHQgYW55dGhpbmcgZmFuY3kKICB1cG9uIHRoaXMgdW5leHBlY3RlZCBiZWhhdmlvci4uLgoKRGFuaWVsICgyOCBNYXkgMjAwMikKLSBDcmlzIEJhaWxpZmYgYnJvdWdodCBDVVJMT1BUX0NBUEFUSCB0aGF0IHdvcmtzIGxpa2UgQ1VSTE9QVF9DQUlORk8gYnV0CiAgc3BlY2lmaWVzIGEgcGF0aCB0byBhIGRpcmVjdG9yeSB3aXRoIGNlcnRpZmljYXRlcyByYXRoZXIgdGhhbiBhIHNpbmdsZSBmaWxlCiAgd2l0aCB0aGVtIGFsbCBjb25jYXRlbmF0ZWQuIC0tY2FwYXRoIHdhcyBhZGRlZCB0byB0aGUgY29tbWFuZCBsaW5lIHRvb2wKICBmb3IgdGhlIHNhbWUgZnVuY3Rpb24uCgogIFdpbmRvd3MgdXNlcnMgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRoYXQgdGhlIGRpcmVjdG9yeSBzaG91bGQgYmUgc2V0dXAgd2l0aAogIHRoZSBjX3JlaGFzaCB0b29sIG9mIHRoZSBPcGVuU1NMIHBhY2thZ2UsIGFuZCB0aGF0IGNyZWF0ZXMgc3ltbGlua3MgYnkKICBkZWZhdWx0IHRoYXQgbmVlZCB0byBiZSByZXBsYWNlZCB3aXRoIGFjdHVhbCBjb3BpZXMgdG8gd29yayBvbiBXaW5kb3dzLgoKLSBHdXN0YWYgSHVpIHByb3ZpZGVkIG5ldyBjb2RlIHRoYXQgY2hhbmdlcyBob3cgY3VybF9tdWx0aV9pbmZvX3JlYWQoKQogIG1lc3NhZ2VzIGFyZSBzdG9yZWQsIHNvIHRoYXQgdGhleSBkb24ndCBoYXZlIHRvIGJlIGtlcHQgYXJvdW5kIGZvciB0aGUgbXVsdGkKICBoYW5kbGUncyBlbnRpcmUgbGlmZSB0aW1lLiBIZSBhbHNvIG1hZGUgaXQgcmV0dXJuIGZhaWx1cmUgY29kZXMgcHJvcGVybHkKICB3aGljaCBpdCBkaWRuJ3QgZG8gYmVmb3JlLgoKRGFuaWVsICgyNyBNYXkgMjAwMikKLSBHdXN0YWYgSHVpIHBvaW50ZWQgb3V0IHRoYXQgcnVubmluZyBjdXJsX211bHRpX3BlcmZvcm0oKSB3aXRob3V0IGRvaW5nCiAgY3VybF9tdWx0aV9mZHNldCgpIGZpcnN0IHdhcyBub3QgcmVhbGx5IGEgd29ya2luZyBjb21iby4gSSBhZGRlZCBhbiBpbnRlcm5hbAogIGNoZWNrIGZvciB0aGlzIGFuZCBoYXZlIHNvbWUgZXh0cmEgc2VsZWN0KCkgY29kZSB3aXRob3V0IHRpbWVvdXQgdG8gbWFrZSB0aGUKICBsaWJyYXJ5IGludGVybmFscyB3b3JrIGlkZW50aWNhbGx5IG5ldmVydGhlbGVzcy4gV2UgbWlnaHQgbmVlZCB0byBzb21laG93CiAgZWl0aGVyIGRvY3VtZW50IHRoYXQgb25jZSB5b3UndmUgdXNlZCB0aGUgKl9mZHNldCgpIHlvdSBzaG91bGQgcmVtYWluIHVzaW5nCiAgdGhlbSBpbiBzZWxlY3QoKSBvciB5b3Ugc2hvdWxkIGJsYW5rIHRoZW0gc29tZWhvdyBzbyB0aGF0IGxpYmN1cmwgd29uJ3QgZ28KICBjcmF6eS4KClZlcnNpb24gNy45LjgtcHJlMQoKRGFuaWVsICgyMiBNYXkgMjAwMikKLSBKYW1lcyBDb25lIGJyb3VnaHQgYW4gZXhjZWxsZW50IHBhdGNoLCBpbmNsdWRpbmcgc2V2ZXJhbCB0ZXN0cyBhbmQgZG9jcyEKICBDVVJMT1BUX05FVFJDIG5vdyB0YWtlcyBhbiBlbnVtIGFzIGFyZ3VtZW50IGluc3RlYWQgb2YgdGhlIHByZXZpb3VzIGJvb2xlYW4uCiAgLS1uZXRyYy1vcHRpb25hbCB3YXMgaW50cm9kdWNlZCBhcyBhbiBhZGRpdGlvbiB0byAtLW5ldHJjIHRvIGFsbG93IHRoZQogIGNvbW1hbmQgbGluZSBjbGllbnQgdG8gdGFrZSB1c2Ugb2YgYWxsIHRoYXQgbmV3IG5ldHJjIHN0dWZmLgoKLSBCdWcgcmVwb3J0ICM1NTg4ODggc2hvd2VkIGEgY2FzZSB3aGVyZSBsaWJjdXJsIHJlLXVzZWQgdGhlIHByZXZpb3VzIGhvc3QKICBuYW1lIHdoZW4gYSBjb25uZWN0aW9uIG92ZXIgYSBwcm94eSB3YXMgcmUtdXNlZCBidXQgdG8gYSBkaWZmZXJlbnQgdGFyZ2V0CiAgaG9zdC4KCkRhbmllbCAoMjEgTWF5IDIwMDIpCi0gRWRpbiBLYWRyaWJhc2ljIGhlbHBlZCBtZSBzb3J0IG91dCBhIHByb2JsZW0gdG8gbWFkZSBsaWJjdXJsIGNyYXNoIHdoZW4KICB0cnlpbmcgdG8gSFRUUCBQT1NUIGFuIGVtcHR5IHN0cmluZy4KCi0gQ2xhcmlmaWVkIHRoYXQgSnVlcmdlbiBXaWxrZSBkb25hdGVkIHRoZSBvcmlnaW5hbCB0ZXN0cy9zZXJ2ZXIvc3dzLmMgY29kZS4KCi0gSmVhbi1QaGlsaXBwZSBCYXJyZXR0ZS1MYVBpZXJyZSBtYWRlIGN1cmxfZm9ybWFkZCgpIHJldHVybiBhIHR5cGVkZWYgbmFtZWQKICBDVVJMRk9STWNvZGUgaW5zdGVhZCBvZiB0aGUgcHJldmlvdXMgJ2ludCcsIGFuZCB0aGUgdmFyaW91cyByZXR1cm4gY29kZXMgYXJlCiAgbm93IGdsb2JhbGx5IGV4cG9ydGVkLiBJdCBhbGxvd3MgYXBwbGljYXRpb25zIHRvIGJldHRlciBmaWd1cmUgb3V0IHdoYXQgZ29lcwogIHdyb25nIHdoZW4gY3VybF9mb3JtYWRkKCkgcmV0dXJucyBlcnJvcnMuCgpEYW5pZWwgKDIwIE1heSAyMDAyKQotIFJvbGFuZCBaaW1tZXJtYW5uIHBvaW50ZWQgb3V0IHRoYXQgU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfY2hhaW5fZmlsZSgpCiAgaXMgcHJlZmVyZWQgdG8gU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfZmlsZSgpLgoKRGFuaWVsICgxNyBNYXkgMjAwMikKLSBCdWcgcmVwb3J0ICM1NTY4NjkgcG9pbnRlZCBvdXQgdGhhdCBzcmMvd3JpdGVvdXQuYyBkaWRuJ3QgY29tcGlsZSBvbiBmcmVlYnNkCiAgYWZ0ZXIgbXkgQUlYIGZpeGVzIHRoZSBvdGhlciB3ZWVrLgoKLSBCdWcgcmVwb3J0ICM1NTY5MzAgcG9pbnRlZCBvdXQgYSBGcmVlQlNEIGNvcmUgZHVtcCBpbnRyb2R1Y2VkIGluIDcuOS43IGluCiAgdGhlIEROUyBzdHJ1Y3QgcmVhbGxvYyBzdHVmZi4gQWN0dWFsbHksIHRoaXMgY3Jhc2ggY291bGQgaGFwcGVuIG9uIGFsbAogIHN5c3RlbXMgdGhhdCBtYWRlIHRoZSBwYWNrX2hvc3RlbnQoKSBmdW5jdGlvbiBnZXQgaW52b2tlZC4KCi0gSSByZW1vdmVkIHNldmVyYWwgY29tcGlsZXIgd2FybmluZ3MgaW4gdGhlIHRlc3Qgc3VpdGUncyBIVFRQIHNlcnZlci4KClZlcnNpb24gNy45LjcKCkRhbmllbCAoMTAgTWF5IDIwMDIpCi0gS2V2aW4gUm90aCBhZGp1c3RlZCB0aGUgLS10cmFjZS1hc2NpaSBvdXRwdXQgc2xpZ2h0bHkuCgotIFBhdWwgSGFycmluZ3RvbiBmb3VuZCBvdXQgdGhhdCBzcmMvd3JpdGVvdXQuYyBuZWVkZWQgYW4gYWRkaXRpb25hbCBoZWFkZXIKICBmaWxlIGluY2x1ZGVkIGZvciBBSVggYnVpbGRzCgpWZXJzaW9uIDcuOS43LXByZTIKCkRhbmllbCAoNyBNYXkgMjAwMikKLSBVcGRhdGVkIHRoZSBtYW4gcGFnZSB3aXRoIC0tdHJhY2UtYXNjaWkgYW5kIC1qLy0tanVuay1zZXNzaW9uLWNvb2tpZXMuCgotIE1hZGUgLS10cmFjZS1hc2NpaSBkbyBwcmV0dHkgbXVjaCB0aGUgc2FtZSBhcyAtLXRyYWNlIGJ1dCB3aXRob3V0IHRoZSBoZXgKICBwYXJ0IGluIHRoZSBvdXRwdXQuCgotIEFkZGVkIENVUkxPUFRfQ09PS0lFU0VTU0lPTiB0aGF0IHdoZW4gZW5hYmxlZCBtYWtlcyBsaWJjdXJsIGlnbm9yZSBzZXNzaW9uCiAgY29va2llcyByZWFkIGZyb20gYSBmaWxlLiBUaGlzIG9wdGlvbiBpcyBlbmZvcmNlZCBieSB0aGUgY3VybCBjb21tYW5kIGxpbmUKICB0b29sIHVzaW5nIHRoZSBuZXcgLWovLS1qdW5rLXNlc3Npb24tY29va2llcyBvcHRpb24uIEFmdGVyIGRpc2N1c3Npb25zIHdpdGgKICBLZXZpbiBSb3RoLiBUaGlzIG1ha2VzIGl0IGVhc2llciB0byB1c2UgY3VybCB0byBmdWxseSBlbXVsYXRlIGEgYnJvd3NlcidzCiAgYmVoYXZpb3IsIGV2ZW4gd2hlbiBpdCBjb21lcyB0byAic2Vzc2lvbiBjb29raWVzIi4gU2Vzc2lvbiBjb29raWVzIGFyZQogIGNvb2tpZXMgdGhhdCBhIG5vcm1hbCBicm93c2VyIGRpc2NhcmRzIHdoZW4gdGhlIGJyb3dzZXIgaXMgc2h1dAogIGRvd24uIFRoZXkncmUgaWRlbnRpZmllZCBieSBub3QgaGF2aW5nIGFueSBleHBpcmUgZGF0ZS90aW1lLgoKLSBXaGVuIENVUkxPUFRfREVCVUdEQVRBIHdhcyBzZXQsIGl0IHJ1aW5lZCB0aGUgQ1VSTE9QVF9TVERFUlIgc2V0dGluZyBhbmQKICB0aGlzIHdhcyBkaXNjb3ZlcmVkIHdoZW4gLS10cmFjZSB3YXMgbWFkZSB0byBjcmFzaC4KCi0gVXNpbmcgLXYgYW5kIC0tdHJhY2UgYXQgdGhlIHNhbWUgdGltZSBjb25mdXNlZCBtYXR0ZXJzLiAtdiBpcyBub3cgcHJldHR5CiAgbXVjaCBpZ25vcmVkIHdoZW4gLS10cmFjZSBvciAtLXRyYWNlLWFzY2lpIGlzIHVzZWQuCgotIE1hZGUgLS10cmFjZSAoYW5kIC0tdHJhY2UtYXNjaWkpIHN1cHBvcnQgLSBhcyBmaWxlIG5hbWUgdG8gcGFzcyBvdXRwdXQgdG8KICBzdGRvdXQgaW5zdGVhZC4gSXQgbWFrZXMgaXQgY29uc2lzdGVudCB3aXRoIGhvdyBvdGhlciBvcHRpb25zIHdvcmsuCgpWZXJzaW9uIDcuOS43LXByZTEKCkRhbmllbCAoNiBNYXkgMjAwMikKLSBBZGRlZCBtdWx0aS1wb3N0LmMgdG8gdGhlIGV4YW1wbGVzIGRpcmVjdG9yeS4gSSBnb3QgdGhlIGJhc2ljIHNvdXJjZSBmb3IKICB0aGlzIGZyb20gR3VzdGFmIEh1aS4KCkRhbmllbCAoMyBNYXkgMjAwMikKLSBDVVJMX01BWF9XUklURV9TSVpFIGlzIG5vdyBhbiBleHBvcnRlZCAjZGVmaW5lIGluIHRoZSBjdXJsL2N1cmwuaCBoZWFkZXIgYW5kCiAgY2FuIGJlIHVzZWQgdG8gZmlndXJlIG91dCB0aGUgbWF4aW11bSBidWZmZXIgc2l6ZSB5b3VyIHdyaXRlIGNhbGxiYWNrIGNhbgogIGdldC4KCi0gQ1VSTE9QVF9SRUFEREFUQSBpcyBub3cgYW4gYWxpYXMgZm9yIENVUkxPUFRfSU5GSUxFIGFuZCBDVVJMT1BUX1dSSVRFREFURSBpcwogIGFuIGFsaWFzIGZvciBDVVJMT1BUX0ZJTEUuIFRoZXNlIHR3byB3ZXJlIGFkZGVkIGZvciBjb25mb3JtaXR5LiBNb3N0IG90aGVyCiAgY2FsbGJhY2sgZnVuY3Rpb24ncyB1c2VyZGF0YSBhcmUgcHJvdmlkZWQgd2l0aCBvcHRpb25zIHVzaW5nIGEgc2ltaWxhciBuYW1lLQogIHNjaGVtZS4KCi0gQWRkZWQgIi0tdHJhY2UgW2ZpbGVdIiB0byB0aGUgY29tbWFuZCBsaW5lIHRvb2wuIEl0IG1ha2VzIGEgdmVyeSBkZXRhaWxlZAogIHRyYWNlIGR1bXAgZ2V0IHN0b3JlZCwgd2l0aCBhIGZ1bGwgcHJvdG9jb2wgZHVtcCB0aGF0IGluY2x1ZGVzIGFsbCByZWNlaXZlZAogIGFuZCB0cmFuc21pdHRlZCBkYXRhLiBUaGlzIGNvdWxkIGJlIGEgdmVyeSBlZmZlY3RpdmUgdG9vbCBmb3IgZGVidWdnaW5nIHdoYXQKICBnb2VzIHdyb25nLiBUaGlzIGR1bXAgaW5jbHVkZXMgZXZlcnkgYnl0ZSB0aGUgd2F5IGl0IGlzIHNlbnQgdG8vcmVjZWl2ZWQKICBmcm9tIHRoZSBzZXJ2ZXIuIFRoZSBkdW1wIGlzIHRoZSBwbGFpbi10ZXh0IHZlcnNpb24sIHNvIFNTTCB0cmFuc2ZlcnMgd2lsbAogIHN0aWxsIGJlIHJlYWRhYmxlLgoKLSBJIGZvdW5kIG91dCB0aGF0IHRoZSBERUJVR0ZVTkNUSU9OIHdhcyBub3QgY2FsbGVkIHByb3Blcmx5IGV2ZXJ5d2hlcmUgYXMgd2UKICB3YW50ZWQgaXQgdG8uIEkgZml4ZWQgaXQuCgotIC1EIG5vdyBzdG9yZXMgYWxsIGhlYWRlcnMgdG8gdGhlIHNhbWUgZmlsZSBpZiBtdWx0aXBsZSBVUkxzIGFyZSBnaXZlbiBvbiB0aGUKICBjb21tYW5kIGxpbmUhIEtldmluIFJvdGggbWFkZSBtZSBhd2FyZSBvZiB0aGF0IGl0IGRpZG4ndCBhbHJlYWR5IGRvIHRoaXMhCgotIEd1c3RhZiBIdWkgd3JvdGUgYW4gZXhjZWxsZW50IGZvcm1wb3N0IGV4YW1wbGUgdGhhdCB1c2VkIHRoZSBtdWx0aQogIGludGVyZmFjZS4gIFVuZm9ydHVuYXRlbHksIGl0IGRpZG4ndCB3b3JrIGR1ZSB0byBzZXZlcmFsIGJ1Z3MgaW4gaG93CiAgdHJhbnNmZXJzIHdlcmUgbWFkZSB3aGVuIHRoZSBtdWx0aSBpbnRlcmZhY2Ugd2FzIHVzZWQuCgpEYW5pZWwgKDIgTWF5IDIwMDIpCi0gSGFubm8gS3Jhbnpob2ZmIGZvdW5kIG91dCB0aGF0IHdoZW4gZG9pbmcgbXVsdGlwbGUgdHJhbnNmZXJzIG9uIHRoZSBzYW1lCiAgZWFzeSBoYW5kbGUsIHRoZSBwcm9ncmVzcyBtZXRlciB3b3VsZCBzaG93IGEgYmFkICJjdXJyZW50bHkgZG93bmxvYWRlZAogIHZhbHVlIiB3aGVuIHRoZSB0cmFuc2ZlciBzdGFydHMuCgpEYW5pZWwgKDEgTWF5IDIwMDIpCi0gQXBwbGllZCBhbm90aGVyIHBhdGNoIGJ5IEphY2t5IExhbSB0byBtYWtlIHRoZSBuYW1lIHJlc29sdmUgaW5mbyByZWFsbG9jKCkKICBzdHVmZiB3b3JrIHByb3Blcmx5LgoKRGFuaWVsICgyOCBBcHJpbCAyMDAyKQotIGN1cmxfbXVsdGlfaW5mb19yZWFkKCkgaXMgbm93IGltcGxlbWVudGVkIQoKRGFuaWVsICgyNyBBcHJpbCAyMDAyKQotIFVwZGF0ZWQgQlVHUywgVE9ETywgRkFRLCBJTlNUQUxMIGFuZCBhZGRlZCBCSU5ESU5HUy4KCi0gSSB0aGluayBJIGZpeGVkIHRoZSBETlMgY2FjaGUgcHJ1bmUgY3JhY2ggSmFja3kgTGFtIGZvdW5kIGFuZCByZXBvcnRlZC4KCi0gSSBjbGVhbmVkIHVwIHRoZSBuYW1lIHByZWZpeCBzdHVmZiBpbiB0aGUgaGFzaCBhbmQgbGxpc3QgbW9kdWxlcy4KCi0gRlRQIHJlc3BvbnNlcyBzaG91bGQgbm93IGJlIGJldHRlciBvbiB0aW1pbmcgb3V0IHByb3Blcmx5LiBUaGUgdGltZW91dCB2YWx1ZQogIGlzIG1heGltdW0gdGltZW91dCBmb3IgdGhlIGVudGlyZSByZXF1ZXN0IG9wZXJhdGlvbiwgYnV0IGJlZm9yZSB0aGlzLCB0aGUKICB0aW1lb3V0IHdhcyB1c2VkIGFzIGEgbWF4aW11bSBhbGxvd2VkIHRpbWUgYmV0d2VlbiB0d28gcmVhZHMuLi4KCkRhbmllbCAoMjYgQXByaWwgMjAwMikKLSBGaXhlZCB0aGUgdGVzdCBzdWl0ZSBodHRwIHNlcnZlciB0byBub3QgdXNlIHNucHJpbnRmKCkgYW55bW9yZSBkdWUgdG8gYmV0dGVyCiAgcG9ydGFiaWxpdHkuCgpEYW5pZWwgKDI1IEFwcmlsIDIwMDIpCi0gV2l0aCBTdGVybGluZyBIdWdoZXMnIG5ldyBETlMgcHJ1bmluZywgSmFja3kgTGFtIGFza2VkIGlmIHRoaXMgd291bGRuJ3QKICBjYXVzZSBwcm9ibGVtcyBzaW5jZSB0aGUgcHJ1bmluZyBpcyBvbmx5IGNoZWNraW5nIHRoZSBlbnRyeSB0aW1lLCBhbmQgaXQKICBzdXJlIGNvdWxkIGNhdXNlIHByb2JsZW1zLiBUaGVyZWZvciwgSSd2ZSBub3cgYWRkZWQgYW5kIGNoYW5nZWQgY29kZSBzbyB0aGF0CiAgdGhpcyBzaG91bGQgbm90IGJlIGEgcHJvYmxlbS4gTm93aGVyZSBpbiB0aGUgY29kZSB3aWxsIGJlIHN0b3JlIG5hbWUKICByZXNvbHZlZCBpbmZvcm1hdGlvbiBhcm91bmQgc28gdGhhdCBhIHN1bnNlcXVlbnQgRE5TIGNhY2hlIHBydW5lIHNob3VsZAogIGNhdXNlIGEgcHJvYmxlbS4gVGhpcyBvZiBjb3Vyc2UgY2FsbGVkIGZvciBzb21lIG1pbGQgaW50ZXJuYWwgY2hhbmdlcy4KCkRhbmllbCAoMjMgQXByaWwgMjAwMikKLSBJbXByb3ZlZCB0aGUgJ25vX3Byb3h5JyBjaGVjaywgYXMgdXNpbmcgcG9ydCBudW1iZXJzIGluIHRoZSBVUkwgY29uZnVzZWQgaXQKICBwcmV2aW91c2x5LiBSZXBvcnRlZCBieSBFcndhbiBMZWdyYW5kIGluIGJ1ZyByZXBvcnQgIzU0NzQ4NC4KCi0gVGhlIC0taW50ZXJmYWNlIG9wdGlvbiBub3cgd29ya3MgZXZlbiBvbiBJUHY2IGVuYWJsZWQgYnVpbGRzLiBSZXBvcnRlZCBieQogICd0aG9yJy4KCkRhbmllbCAoMjIgQXByaWwgMjAwMikKLSBUaGUgI2RlZmluZXMgbmFtZXMgc3RhcnRpbmcgd2l0aCBUSU1FQ09ORCBub3cgaGFzIENVUkxfIHByZWZpeGVzLiAoVGhlIG9sZAogIG5hbWVzIGFyZSBzdGlsbCAjZGVmaW5lZCB0b28uKSBQb2ludGVkIG91dCBieSBSb2JlcnQgT2xzb24uCgotIEphY2t5IExhbSBicm91Z2h0IGNvZGUgdGhhdCBsZXRzIHRoZSBuYW1lIHJlc29sdmUgZnVuY3Rpb24gb25seSB1c2UgYXMgbXVjaAogIG1lbW9yeSBhcyBpdCBhY3R1YWxseSBuZWVkcy4gVGhpcyBvbmx5IHdvcmtzIG9uIGNlcnRhaW4gb3BlcmF0aW5nIHN5c3RlbXMsCiAgYnV0IGlzIHRvdGFsbHkgdHJhbnNwYXJhbnQgdG8gYWxsIHVzZXJzLgoKRGFuaWVsICgxOSBBcHJpbCAyMDAyKQotIEJqb3JuIFJlZXNlIGZpeGVkIHBhY2tfaG9zdGVudCB0byB3b3JrIHByb3Blcmx5IHdpdGggNjQgYml0IHBvaW50ZXJzLgoKRGFuaWVsICgxOCBBcHJpbCAyMDAyKQotIFN0ZXJsaW5nIEh1Z2hlcyBhZGRlZCBjb2RlIHRvIHBydW5lIG9sZCBETlMgY2FjaGUgZW50cmllcywgc2luY2UgSmFja3kgTGFtCiAgZXhwZXJpZW5jZWQgdmVyeSBiaWcgY2FjaGVzLgoKRGFuaWVsICgxNyBBcHJpbCAyMDAyKQotIERpcmsgTWFuc2tlIHBhdGNoZWQgdGhlIDMwMSByZXNwb25zZSB0byB3b3JrIGFnYWluc3QgdGhlIFJGQyBidXQgbW9yZSBsaWtlCiAgY29tbW9uIGJyb3dzZXJzIGRvLiBJZiBhIFBPU1QgZ2V0IGEgMzAxIGJhY2ssIGl0J2xsIHN3aXRjaCB0byBHRVQgaW4gdGhlCiAgbmV4dCByZXF1ZXN0IChpZiBsb2NhdGlvbi1mb2xsb3dpbmcgaXMgZW5hYmxlZCkuCgpEYW5pZWwgKDE2IEFwcmlsIDIwMDIpCi0gRGlyayBNYW5za2UgcG9zdGVkIGEgcGF0Y2ggb3JpZ2luYWxseSB3cml0dGVuIGJ5IEluZ28gV2lsa2VuIHRoYXQgaW50cm9kdWNlZAogIHR3byBuZXcgQ1VSTElORk9fKiB2YWx1ZXM6IENVUkxJTkZPX1JFRElSRUNUX1RJTUUgYW5kCiAgQ1VSTElORk9fUkVESVJFQ1RfQ09VTlQuCgpEYW5pZWwgKDE1IEFwcmlsIDIwMDIpCi0gSm9uYXRhbiBMYW5kZXIgcGF0Y2hlZCB0aGUgdmVyYm9zZSB0ZXh0ICdEaXNhYmxlcyBQT1NULCBnb2VzIHdpdGggR0VUJyB0bwogIHJlZmxlY3QgcmVhbGl0eSBiZXR0ZXIsIGxpa2Ugd2hlbiB0aGUgZmlyc3QgcmVxdWVzdCBpc24ndCBQT1NUIGFuZCB3aGVuCiAgdGhlIHNlY29uZCBpc24ndCBHRVQuLi4gOi0pCgotIENyYWlnIERhdmlzb24gcG9pbnRlZCBvdXQgdGhhdCB3aGVuIGN1cmxfZm9ybWFkZCgpaW5nIGEgZmlsZSB0aGF0IGRvZXNuJ3QKICBleGlzdCwgbGliY3VybCBkb2Vzbid0IHJldHVybiBlcnJvci4gTm93LCBjdXJsX2Vhc3lfcGVyZm9ybSgpIHdpbGwgcmV0dXJuCiAgQ1VSTEVfUkVBRF9FUlJPUiBpZiB0aGF0IGlzIHRoZSBjYXNlLiBUZXN0IDQxIHdhcyBhZGRlZCB0byB2ZXJpZnkgdGhpcy4KClZlcnNpb24gNy45LjYKCkRhbmllbCAoMTQgQXByaWwgMjAwMikKLSBEaXJrIE1hbnNrZSBicm91Z2h0IGEgZml4IHRoYXQgbWFrZXMgbGliY3VybCBzdHJpcCBvZmYgd2hpdGUgc3BhY2VzIGZyb20gdGhlCiAgYmVnaW5uaW5nIG9mIGNvb2tpZSBjb250ZW50cy4KCi0gSGFkIHRvIHBhdGNoIGluY2x1ZGUvY3VybC9jdXJsLmggc2luY2UgTVNWQyBkb2Vzbid0IHNldCB0aGUgX19TVERDX18gZGVmaW5lLgogIE1vb25lc2FteSBwb2ludGVkIG91dCB0aGUgcHJvYmxlbSwgQmpvcm4gUmVlc2UgdGhlIHNvbHV0aW9uLgoKVmVyc2lvbiA3LjkuNi1wcmU1CgpEYW5pZWwgKDEyIEFwcmlsIDIwMDIpCi0gRml4ZWQgdGhlIFRJTUVSX0NPTk5FQ1QgdG8gYmUgbW9yZSBhY2N1cmF0ZSBmb3IgRlRQIHRyYW5zZmVycy4gUHJldmlvdXNseQogIEZUUCB0cmFuc2ZlcnMgZ290IHRoZSAiY29ubmVjdCBkb25lIiB0aW1lIHNldCBhZnRlciB0aGUgaW5pdGlhbCBGVFAgY29tbWFuZHMKICBhbmQgbm90IGRpcmVjdGx5IGFmdGVyIHRoZSBUQ1AvSVAgY29ubmVjdCBhcyBpdCBzaG91bGQuCgogIEkgYWxzbyBtYWRlIHRoZSB0aW1lIHN0YW1wIGdldCBzZXQgZXZlbiBpZiB0aGUgY29ubmVjdCBpdHNlbGYgZmFpbHMsIHdoaWNoCiAgaXQgZGlkbid0IGRvIHByZXZpb3VzbHkuCgotIEplYW4tUGhpbGlwcGUgQmFycmV0dGUtTGFQaWVycmUgcHJvdmlkZWQgaGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcwogIENVUkxPUFRfREVCVUdGVU5DVElPTiBhbmQgQ1VSTE9QVF9ERUJVR0RBVEEuIFRoZXkgYWxsb3cgYSBwcm9ncmFtIHRvIGEgc2V0IGEKICBjYWxsYmFjayB0byByZWNlaXZlIGRlYnVnL2luZm9ybWF0aW9uIGRhdGEuIFRoYXQgaW5jbHVkZXMgaGVhZGVycyBhbmQgZGF0YQogIHRoYXQgaXMgcmVjZWl2ZWQgYW5kIHNlbnQuIENVUkxPUFRfVkVSQk9TRSBzdGlsbCBjb250cm9scyBpdC4KCiAgQnkgZGVmYXVsdCwgdGhlcmUgaXMgYW4gaW50ZXJuYWwgZGVidWdmdW5jdGlvbiB0aGF0IHdpbGwgbWFrZSB0aGluZ3MgbG9vawogIGFuZCB3b3JrIGFzIGJlZm9yZSBpZiBub3QgY2hhbmdlZC4KCkRhbmllbCAoMTAgQXByaWwgMjAwMikKLSBTZWJhc3RpZW4gV2lsbGVtaWpucyBmb3VuZCBvdXQgdGhhdCAteCBkaWRuJ3QgdXNlIHRoZSBkZWZhdWx0IHBvcnQgbnVtYmVyIGFzCiAgaXMgZG9jdW1lbnRlZC4gSXQgZG9lcyBub3cuCgotIGxpYmN1cmwtZXJyb3JzLjMgaXMgYSBuZXcgbWFuIHBhZ2UgYXR0ZW1wdGluZyB0byBkb2N1bWVudCBhbGwgbGliY3VybCBlcnJvcgogIGNvZGVzCgotIEFkZGVkIHR3byBuZXcgZXJyb3IgY29kZXMgYW5kIGNoYW5nZWQgdGhlIGJlaGF2aW91ciBvZiB0d28gb2xkIG9uZXMKICBzbGlnaHRseToKCiAgQ1VSTEVfV1JJVEVfRVJST1IKICAgVGhpcyBlcnJvciB3YXMgcmV0dXJuZWQgKmJvdGgqIGZvciBlcnJvcnMgdGhhdCBvY2N1cmVkIHdoZW4gd3JpdGluZwogICByZWNlaXZlZCBkYXRhIHRvIGEgbG9jYWwgZmlsZSwgYXMgd2VsbCBhcyB3aGVuIHdlIGdldCBwcm9ibGVtcyB3cml0aW5nIGRhdGEKICAgdG8gYSByZW1vdGUgc2VydmVyLiBDVVJMRV9TRU5EX0VSUk9SIGhhcyBub3cgYmVlbiBhZGRlZCBmb3IgdGhlIGxhdHRlcgogICBlcnJvci4KCiAgQ1VSTEVfUkVBRF9FUlJPUgogICBUaGlzIGVycm9yIHdhcyBzaW1pbGFybHkgcmV0dXJuZWQgKmJvdGgqIGZvciBlcnJvcnMgd2hlbiByZWFkaW5nIGEgbG9jYWwKICAgZmlsZSwgYXMgd2VsbCBhcyB3aGVuIGdldHRpbmcgcHJvYmxlbXMgd2hlbiByZWFkaW5nIG5ldHdvcmsgZGF0YS4KICAgQ1VSTEVfUkVDVl9FUlJPUiBoYXMgbm93IGJlZW4gYWRkZWQgZm9yIHRoZSBsYXR0ZXIgZXJyb3IuCgogKFR3byB0ZXN0IGNhc2VzIHdlcmUgYWRqdXN0ZWQgYWNjb3JkaW5nbHkuKQoKRGFuaWVsICg5IEFwcmlsIDIwMDIpCi0gcnVudGVzdHMucGwgbm93IHNldHMgdGhlIEhPTUUgdmFyaWFibGUgYmVmb3JlIHJ1bm5pbmcgY3VybCwgdG8gcHJldmVudCBhbnkKICBhY3R1YWwgfi8uY3VybHJjIGZpbGUgdG8gZm9vbCB0aGUgdGVzdHMhCgpWZXJzaW9uIDcuOS42LXByZTQKCkRhbmllbCAoOCBBcHJpbCAyMDAyKQotIE1pY2hhZWwgQ3VydGlzIHByb3ZpZGVkIG5ldyBmdW5jdGlvbmFsaXR5IGZvciBjdXJsIG9uIHNvbWUgcGxhdGZvcm1zLiBVc2luZwogIHRoZSAtLWVudmlyb25tZW50IG9wdGlvbiwgY3VybCB3aWxsICpzZXQqIGEgYnVuY2ggb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzCiAgdG8gdmFsdWVzLiBUaGUgbmFtZXMgYXJlIHRoZSBzYW1lIG9uZXMgYXMgZm9yIHRoZSAtdy8tLXdyaXRlb3V0IG9wdGlvbi4KCiAgRm9yIG5vdywgdGhpcyBvbmx5IHdvcmtzIG9uIHRoZSBSSVNDIE9TIHZlcnNpb24sIGFzIHRoaXMgZmVhdHVyZSByZWxpZXMgb24KICBib3RoIE9TIHN1cHBvcnQgYW5kIHRoYXQgaXQgbWF0Y2hlcyBPUyBwYXJhZGlnbXMuCgotIEphY2t5IExhbSBwcm92aWRlZCBhIGZpeCBmb3IgZ2V0dGluZyBoZWFkZXJzLW9ubHkgd2hlbiB0aGUgcmVwbHkgaXMgSFRUUC8xLjAKICBhbmQgMzA0LCBJIGVkaXRlZCBpdCBzbGlnaHRseS4KCkRhbmllbCAoNSBBcHJpbCAyMDAyKQotIEFzIHJlcXVlc3RlZCBieSBKYXkgR3JhdmVzLCB0aGUgJy5jdXJscmMnIGZpbGUgKG9yIF9jdXJscmMgYXMgaXQgaXMgY2FsbGVkCiAgd2hlbiB1c2VkIGluIHdpbmRvd3MpLCBpcyBub3cgbG9hZGVkIGZyb20gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlmIHRoZSBIT01FCiAgZW52aXJvbm1lbnQgdmFyaWFibGUgaXNuJ3Qgc2V0IChvciBpZiBpdCBpcyB0b28gbG9uZykuIEkgYWxzbyBlbmxhcmdlZCB0aGUKICBhcnJheSB1c2VkIHRvIHN0b3JlIHRoZSBmdWxsIGZpbGUgcGF0aCBpbiwgdG8gNTEyIGJ5dGVzLgoKLSBLZXZpbiBSb3RoIHBvaW50ZWQgb3V0IHRvIG1lIHdoeSB0aGUgIjE5IE1hcmNoIiBjaGFuZ2UgcmVnYXJkaW5nIC1HIGFuZCAtSQogIHdhcyBzdHVwaWQgYW5kIHRoZSBjaGFuZ2Ugd2FzIHJldmVydGVkLiBBZGRlZCB0ZXN0IGNhc2UgNDggdG8gdmVyaWZ5IHRoZQogIGZ1bmN0aW9uYWxpdHkuCgpWZXJzaW9uIDcuOS42LXByZTMKCkRhbmllbCAoNCBBcHJpbCAyMDAyKQotIEpvbmF0YW4gTGFuZGVyIGJyb3VnaHQgYSBwYXRjaCB0aGF0IG1ha2VzIGN1cmwvY3VybC5oIGNvbXBpbGUgbmljZWx5IG9uCiAgcHJlLUlTTyBjb21waWxlcnMsIGxpa2Ugd2hlbiB1c2luZyBnY2MgLXRyYWRpdGlvbmFsLgoKRGFuaWVsICgzIEFwcmlsIDIwMDIpCi0gSmFja3kgTGFtIGlkZW50aWZpZWQgYSBnbGl0Y2ggd2hlbiBnZXR0aW5nIGhlYWRlcnMtb25seSwgd2hlcmUgbGliY3VybCB3b3VsZAogICJoYW5nIiAxIHNlY29uZCBpbiB2YWluIGluIHRoZSBzZWxlY3QoKSBsb29wIGJlZm9yZSByZXR1cm5pbmcgYmFjay4KCi0gVG9yIEFybnRzZW4gYnJvdWdodCBhIHBhdGNoIGZvciBtdWx0aXBhcnQgZm9ybXBvc3RzLiBJdCB0dXJuZWQgb3V0IHRoYXQgdGhlCiAgIkNHSV9MaXRlIFBlcmwgcGFja2FnZSIgbWFrZXMgc29tZSBiYWQgYXNzdW1wdGlvbnMgb24gd2hhdCBsZXR0ZXJzIHRoYXQgbWF5CiAgYmUgdXNlZCBpbiBib3VuZGFyeSBzdHJpbmdzIGFuZCB0aHVzIGN1cmwgY291bGQgY29uZnVzZSBpdCBieSBpbmNsdWRpbmcgJysnCiAgYW5kICcvJy4gV2hpbGUgdGhpcyBpcyBzdGFuZGFyZHMtY29tcGxpYW50LCB3ZSBjaGFuZ2UgdGhlIGJlaGF2aW9yIHRvIHdvcmsKICBzbW9vdGhseSB3aXRoIGV4aXN0aW5nIHNvZnR3YXJlIGJhc2VkIG9uIHRoYXQgcGFja2FnZS4KCkRhbmllbCAoMiBBcHJpbCAyMDAyKQotIEdlcmhhcmQgSGVycmUgZmlsZWQgYnVnIHJlcG9ydCAjNTM2MjM4IHdoZXJlIGhlIHBvaW50ZWQgb3V0IGEgY3Jhc2ggaW4KICB2ZXJib3NlIEZUUCBwYXNzaXZlIHRyYW5zZmVycyBmb3IgQUlYLgoKLSBDbGFyZW5jZSBHYXJkbmVyIHBvaW50ZWQgb3V0IGEgbWlub3IgZmxhdyBpbiBob3cgbGliY3VybCBkaWRuJ3QgcHJvcGVybHkKICB0YWtlIGNhcmUgb2YgYWxsIGVycm9ycyB0aGF0IFNTTF9yZWFkKCkgY291bGQgcmV0dXJuLgoKLSBKYWNreSBMYW0gZml4ZWQgYSBNQUxMT0NERUJVRyBwcm9ibGVtIGluIGxpYi9nZXRpbmZvLmMKCkRhbmllbCAoMjcgTWFyY2ggMjAwMikKLSBULiBCaGFyYXRoIHBvaW50ZWQgb3V0IGEgZmxhdyBpbiB0aGUgY29ubmVjdGlvbiByZS11c2UgZnVuY3Rpb24gdGhhdCBkaWRuJ3QKICBjaGVjayBwcm94eSBjb25uZWN0aW9ucyBwcm9wZXJseSBmb3IgImRlYWRuZXNzIiBiZWZvcmUgdGhleSB3ZXJlIHJlLXVzZWQuCgotIFBlZHJvIE5ldmVzIGZvdW5kIG91dCB0aGF0IEhUVFAgUE9TVGluZyB3aXRoIC0tZGF0YS1iaW5hcnkgZGlkIG5vdCBwcm9wZXJseQogIHdvcmsgdW5kZXIgV2luZG93cyBhcyB0aGUgZmlsZSBzcGVjaWZpZWQgd2Fzbid0IHJlYWQgZnVsbHkgYmluYXJ5IQoKRGFuaWVsICgyNSBNYXJjaCAyMDAyKQotIEphY2t5IExhbSBicm91Z2h0IGEgZml4IHRoYXQgaW1wcm92ZXMgdHJlYXRtZW50IG9mIGNvb2tpZXMgdXNpbmcgaWRlbnRpY2FsCiAgZG9tYWlucyBidXQgd2l0aCBsZWFkaW5nIGRvdHMgcHJvcGVybHkuCgpEYW5pZWwgKDIyIE1hcmNoIDIwMDIpCi0gTWlrbG9zIE5lbWV0aCB1cGRhdGVkIHRoZSB3aW5kb3dzIHNlY3Rpb24gb2YgdGhlIGRvY3MvSU5TVEFMTCBmaWxlIGFuZCB0aGUKICB3aW5kb3dzIG1ha2VmaWxlcy4KCi0gSm9uIERpbGxvbiBwcm92aWRlZCB1cyB3aXRoIHNldmVyYWwgZ29vZC1sb29raW5nIGN1cmwgaW1hZ2VzIGZvcgogIHByb21vdGlvbi4gVmlldyB0aGVtIGhlcmUgaHR0cDovL2N1cmwuaGF4eC5zZS9pY29ucy5odG1sCgpEYW5pZWwgKDIwIE1hcmNoIDIwMDIpCi0gUGV0ZXIgVmVyaGFzIGZvdW5kIG91dCB0aGF0IENSTEYgcmVwbGFjZW1lbnQgaW4gdXBsb2FkcyB3YXMgbm90IHdvcmtpbmcuIEkKICBmaXhlZCBpdCwgYW5kIGFkZGVkIHRlc3QgY2FzZSAxMjggdGhhdCB2ZXJpZmllcyB0aGUgZnVuY3Rpb25hbGl0eS4KCi0gVGhlIGxpc3QgZm9ybWVybHkga25vd24gYXMgY3VybC1tYWluIGlzIG5vdyBuYW1lZCBjdXJsLXVzZXJzIGFuZCBpcyBob3N0ZWQKICBieSBzb3VyY2Vmb3JnZS4gU3VzYmNyaWJlIHRvIHRoZSBuZXcgbGlzdCwgZ2V0IG9mZiB0aGUgb2xkIG9uZS4KClZlcnNpb24gNy45LjYtcHJlMgoKRGFuaWVsICgxOSBNYXJjaCAyMDAyKQotIE1hZGUgLUcgYW5kIC1JIG9uIHRoZSBzYW1lIGNvbW1hbmQgbGluZSBjYXVzZSBhbiBlcnJvci4KCi0gTW92ZWQgdGhlIG11bHRpLmggZmlsZSB0byB0aGUgInB1YmxpYyIgaW5jbHVkZSBkaXJlY3RvcnkgYW5kIG1hZGUgaXQgZ2V0CiAgaW5jbHVkZWQgYnkgY3VybC5oIHNvIHRoYXQgbm8gZXh0cmEgaW5jbHVkZSBmaWxlcyB3aWxsIGJlIG5lY2Vzc2FyeSB0byB1c2UKICBpdC4KCiAgQWRkZWQgZG9jcyBhbmQgbWFuIHBhZ2VzIGZvciB0aGUgbXVsdGkgaW50ZXJmYWNlIHRvIHRoZSByZWxlYXNlIGFyY2hpdmUuCiAgQWRkZWQgdGhlIHRocmVlIGV4YW1wbGUgc291cmNlIGNvZGVzIHRvby4KCiAgTmVjZXNzYXJ5IHN0ZXBzIGluIG15IGNhbXBhaWduIHRvIHNuZWFrIGluIHRoZSBtdWx0aSBpbnRlcmZhY2UuLi4gOy0pCgotIFVwZGF0ZWQgdGhlIHllYXIgaW4gYWxsIGNvcHlyaWdodCBub3RpY2VzIGluIGFsbCBDIGFuZCBIIGZpbGVzLgoKRGFuaWVsICgxOCBNYXJjaCAyMDAyKQotIFRvbWFzIFN6ZXBlIGZvdW5kIG91dCB0aGF0IC1kIGFuZCAtRyBkaWRuJ3QgbWl4IGFzIHRoZXkgc2hvdWxkLiBJIGJyb2tlIHRoaXMKICBpbiA3LjkuNS4uLiBBZGRlZCB0ZXN0IGNhc2UgMzIgZm9yIHRoaXMuCgpWZXJzaW9uIDcuOS42LXByZTEKCkRhbmllbCAoMTYgTWFyY2ggMjAwMikKLSBQZXRlciBWZXJoYXMgcG9pbnRlZCBvdXQgdGhhdCB0aGUgY3VybF9lc2NhcGUgYW5kIGN1cmxfdW5zY2FwZSBtYW4gcGFnZXMKICBjb250YWluZWQgZmFjdHVhbCBlcnJvcnMuCgotIEFsYmVydCBDaG95IGZvdW5kIGFuZCBjb3JyZWN0ZWQgYSBwcm9ibGVtIHdpdGggdGhlIHZlcmJvc2Ugb3V0cHV0IHdoZW4gZG9pbmcKICBQQVNWIGZ0cCB0cmFuc2ZlcnMuIEl0IGNvdWxkIG1ha2UgbGliY3VybCBjcmFzaC4KCiAgRGV0YWlscyBpbiBidWcgcmVwb3J0ICM1MzA1NjI6CiAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9mdW5jPWRldGFpbCZhdGlkPTEwMDk3NiZhaWQ9NTMwNTYyJmdyb3VwX2lkPTk3NgoKRGFuaWVsICgxNSBNYXJjaCAyMDAyKQotIEp1bi1pY2hpcm8gaXRvanVuIEhhZ2lubyBmaWxlZCBidWcgcmVwb3J0ICM1MzAyMDQgdGhhdCBjbGVhcmx5IHBvaW50ZWQgb3V0CiAgdGhlIFBGX0lORVQgZml4IGZyb20gRmVicnVhcnkgMTkgYXMgYSBub3QtdmVyeS1nb29kIGZpeCBhcyBpdCBicm9rZSBJUHY2CiAgY2FwYWJpbGl0eSEgVGhhdCBwYXRjaCBpcyBub3cgcmV2ZXJ0ZWQuCgogIFRoZSBwcm9ibGVtIHdpdGggc2xvdyBuYW1lIGxvb2t1cHMgd2l0aCBnZXRhZGRyaW5mbygpIG9uIG5vbi1JUHY2IGVuYWJsZWQKICBob3N0cyBhcmUgaW5zdGVhZCBtYWRlIGJ5IGZpcnN0IGNoZWNraW5nIGlmIHRoZSBzdGFjayBpcyBJUHY2LWVuYWJsZWQgYW5kIGlmCiAgbm90LCB0aGUgUEZfSU5FVCBpcyB1c2VkIGFuZCBvdGhlcndpc2Ugd2UgZ28gd2l0aCB0aGUgZnVsbCBQRl9VTlNQRUMuCgotIFQuIEJoYXJhdGggcG9pbnRlZCBvdXQgdGhhdCB3aGVuIHdlIHJldHVybiBhbiAiZXJyb3IiIGZyb20gYSBXUklURUZVTkNUSU9OCiAgYXMgZGVzY3JpYmVkIGluIHRoZSBtYW4gcGFnZSwgbGliY3VybCBkaWQgbm90IHJldHVybiB0aGUgZG9jdW1lbnRlZCBlcnJvcgogIGNvZGUgKENVUkxFX1dSSVRFX0VSUk9SKSBidXQgd291bGQgaW5zdGVhZCByZXR1cm4gQ1VSTEVfUkVBRF9FUlJPUi4gVGhpcyBpcwogIG5vdyBjb3JyZWN0ZWQuCgpEYW5pZWwgKDE0IE1hcmNoIDIwMDIpCi0gU2V0dGluZyBDVVJMT1BUX1BPU1Qgd2l0aG91dCBzZXR0aW5nIENVUkxPUFRfUE9TVEZJRUxEUyBub3cgcmVhZCB0aGUgUE9TVC0KICBkYXRhIGZyb20gdGhlIGNhbGxiYWNrLgoKLSBUaGUgR09QSEVSIHN1cHBvcnQgc2VlbXMgdG8gYmUgYnJva2VuLiBJIGRvbid0IHRoaW5rIEknbGwgZXZlbiBzdGFydCBmaXhpbmcKICBpdCB1bnRpbCBzb21lb25lIGVsc2UgZmluZHMgb3V0Li4uIDotKQoKRGFuaWVsICgxMyBNYXJjaCAyMDAyKQotIFRyeWluZyAnY3VybCAtSSBmdHAuc3VuZXQuc2UnIG9yIHNpbWlsYXIgZGlkIGEgU0laRSBvbiBhIHNpbGx5ICIobmlsKSIKICBzdHJpbmcuIElmIHN1Y2ggYSBmaWxlIHdvdWxkIGJlIHByZXNlbnQsIGN1cmwgcmV0dXJuZWQgdGhlIHNpemUgb2YgaXQhIE5vdwogIHdlIHByZXZlbnQgdGhpcy4KCi0gQ3VybF9zZW5kZigpIHdhcyBmaXhlZCB0byBkZWFsIHdpdGggc2l0dWF0aW9uIHdoZXJlIEN1cmxfd3JpdGUoKSB3b3VsZCd2ZQogIGJsb2NrZWQgYW5kIHRodXMgcmV0dXJuIC0xLgoKLSBTZXR0aW5nIENVUkxPUFRfUFJPR1JFU1NGVU5DVElPTiB0byBOVUxMIG5vdyByZXN0b3JlcyB0aGUgaW50ZXJuYWwgZnVuY3Rpb24uCgotIEFsbCBDVVJMRk9STV8qIG9wdGlvbnMgY2FuIG5vdyBiZSB1c2VkIGluIGEgQ1VSTEZPUk1fQVJSQVkgZXhjZXB0IHRoZQogIENVUkxGT1JNX0FSUkFZIGl0c2VsZi4gVGhpcyB3YXMgbmVjZXNzYXJ5IHNpbmNlIHdlIGNvdWxkbid0IGV4cGFuZCB0aGUKICBDVVJMRk9STV8qIGxpc3QgcHJvcHJlbHkgYW5kIHVucmVzdHJpY3RlZCB1bnRpbCB0aGlzIHdhcyB0aGUgY2FzZS4gSXQgd2FzCiAgYWxzbyBhIGJpdCBwZWN1bGlhciB0byB1c2VycyB3aHkgc29tZSBvcHRpb25zIGNvdWxkIGJlIHVzZWQgaW4gYW4gYXJyYXkKICB3aGlsZSBvdGhlcnMgY291bGRuJ3QuCgotIFJlbW92ZWQgc29tZSBzaWxseSBDUkxGIGxpbmVzIHRoYXQgaGFkIGFjY2lkZW50YWxseSBzbGlwcGVkIGludG8gc3JjL21haW4uYwogIE5pY28gQmFnZ3VzIHBvaW50ZWQgdGhlbSBvdXQgdG8gbWUuCgpEYW5pZWwgKDExIE1hcmNoIDIwMDIpCi0gQ1VSTEZPUk1fRklMRU5BTUUgd2FzIGFkZGVkLiBUaGlzIGNhbiBiZSBzZXQgd2hlbiBjcmVhdGluZyBhIGZpbGUgdXBsb2FkCiAgcGFydCwgdG8gc2V0IHRoZSAnZmlsZW5hbWUnIGZpZWxkIHRvIGEgY3VzdG9tIHZhbHVlLiBJZiB0aGlzIGlzbid0IHVzZWQsCiAgdGhlIGFjdHVhbGx5IHVzZWQgZmlsZW5hbWUgd2lsbCBiZSBpbmNsdWRlZCBpbnN0ZWFkIChhcyBsaWJjdXJsIGFsd2F5cyBoYXMKICBkb25lKS4gY3VybCB3YXMgYWRqdXN0ZWQgYWNjb3JkaW5nbHksIGFuZCBub3cgLUYgYWNjZXB0cyBhICdmaWxlbmFtZT0nIGZpZWxkCiAgdG9vLCBhbmQgYWxsb3dzIGNvbnN0cnVjdHMgc3VjaCBhczoKCiAgICAtRiAnbmFtZT1AZmlsZW5hbWU7ZmlsZW5hbWU9L2Rldi9udWxsJwoKICBhbmQgdGhpcyBjYW4gYmUgY29tYmluZWQgd2l0aCB0eXBlPSB0b28sIGluIGEgbWFubmVyIHNpbWlsYXIgdG86CgogICAtRiAiZmlsZT1AbG9nL3Rlc3QzOS50eHQ7ZmlsZW5hbWU9ZmFrZXJmaWxlO3R5cGU9bW9vL2Zvb2JhciIKCiAgVGVzdCBjYXNlIDM5IHdhcyBhZGRlZCB0byB2ZXJpZnkgdGhpcyBmdW5jdGlvbmFsaXR5LgoKLSBUaGUgc3RydWN0IGZvcm1lcmx5IGtub3duIGFzIEh0dHBQb3N0IGlzIG5vdyBuYW1lZCBjdXJsX2h0dHBwb3N0IHRvIHByb3Blcmx5CiAgdXNlIHRoZSBjdXJsIG5hbWUgc3BhY2UuIEkgYWRkZWQgYSAjZGVmaW5lIGZvciB0aGUgb2xkIG5hbWUgdG8gbWFrZSBleGlzdGluZwogIHByb2dyYW1zIGNvbXBpbGUgZXZlbiB3aGVuIHRoaXMgbmV3IGluY2x1ZGUgZmlsZSBpcyB1c2VkLgoKRGFuaWVsICg4IE1hcmNoIDIwMDIpCi0gQ2xpZmZvcmQgYWxzbyBkaXNjb3ZlcmVkIHRoYXQgaWYgdGhlIGNsaWVudCBjb2RlIGZhaWxlZCBlYXJseSwgYXMgd2hlbiBkb2luZwogICJjdXJsIC1PIiBvbmx5LCBpdCB3b3VsZCBkbyBmY2xvc2UoTlVMTCkgd2hpY2ggY2F1c2VkIGEgc2VnbWVudGF0aW9uIGZhdWx0CiAgb24gc29tZSBzeXN0ZW1zLgoKLSBDbGlmZm9yZCBXb2xmIHByb3ZpZGVkIGEgcGF0Y2ggdGhhdCBtYWRlIC0tcHJvZ3Jlc3MtYmFyIHdvcmsgYWdhaW4uCgotIEkgY2xvc2VkIGJ1ZyByZXBvcnQgIzUyNzAzMiBieSBtYWtpbmcgc3VyZSB0aGF0IHdlIGFkZCBhIG5ld2xpbmUgYWZ0ZXIgYQogIHRyYW5zZmVyIHdoZW4gLS1wcm9ncmVzcy1iYXIgaGFzIGJlZW4gdXNlZC4gQmVmb3JlLCB3aXRob3V0IHRoZSBuZXdsaW5lLCBpdAogIG1hZGUgdGhlIHN1YnNlcXVlbnQgdGV4dCBjb21lIG91dCB3cm9uZy4KClZlcnNpb24gNy45LjUKCkRhbmllbCAoNyBNYXJjaCAyMDAyKQotIEFkZGVkIGRvY3MvS05PV05fQlVHUyB0byB0aGUgcmVsZWFzZSBhcmNoaXZlLgoKRGFuaWVsICg2IE1hcmNoIDIwMDIpCi0gS2V2aW4gUm90aCBjb3JyZWN0ZWQgYSBmbGF3IGluIHRoZSBjdXJsIGNsaWVudCBnbG9iYmluZyBjb2RlIHRoYXQgbWFkZSBpdAogIG1lc3MgdXAgYmFja3NsYXNoZXMuIFRoaXMgd2FzIG1vc3Qgbm90YWJsZSBvbiB3aW5kb3dzIChjeWd3aW4pIG1hY2hpbmVzIHdoZW4KICB1c2luZyBmaWxlOi8vLgoKLSBCcmFkIHByb3ZpZGVkIGFub3RoZXIgZml4IGZvciBidWlsZGluZyBvdXRzaWRlIHRoZSBzb3VyY2UtdHJlZS4KCi0gUmFscGggTWl0Y2hlbGwgcGF0Y2hlZCBhd2F5IGEgZmV3IGNvbXBpbGVyIHdhcm5pbmdzIGluIHRlc3RzL3NlcnZlci9zd3MuYwoKRGFuaWVsICg1IE1hcmNoIDIwMDIpCi0gSSBub3RpY2VkIHRoYXQgdGhlIHR5cGVkZWYgaW4gY3VybC5oIGZvciB0aGUgcHJvZ3Jlc3MgY2FsbGJhY2sgcHJvdG90eXBlIHdhcwogIHdyb25nIGFuZCB0aHVzIGFwcGxpY2F0aW9ucyB0aGF0IHVzZWQgaXQgd291bGQgbm90IGdldCB0aGUgcHJvcGVyIGlucHV0CiAgZGF0YS4gSXQgdXNlZCBzaXplX3Qgd2hlcmUgdGhlIGltcGxlbWVudGF0aW9uIGFjdHVhbGx5IHVzZXMgZG91YmxlcyEKCiAgSSB3aXNoIEkgY291bGQgYmxhbWUgc29tZW9uZSBlbHNlLCBidXQgdGhpcyB3YXMgbXkgZmF1bHQuIEFnYWluLgoKVmVyc2lvbiA3LjkuNS1wcmU2CgpEYW5pZWwgKDQgTWFyY2ggMjAwMikKLSBDdXQgb2ZmIHRoZSBjaGFuZ2VzIGRvbmUgZHVyaW5nIDIwMDEgZnJvbSB0aGlzIGNoYW5nZWxvZyBmaWxlIGFuZCBwdXQgdGhlbQogIGluIGEgc2VwYXJhdGUgZmlsZSAoQ0hBTkdFUy4yMDAxKSwgYXZhaWxhYmxlIGZyb20gQ1ZTIG9mIGNvdXJzZS4KCi0gSSByZW1vdmVkIHRoZSBtdWx0aSBkaXJlY3RvcnkuIFRoZSBleGFtcGxlIHNvdXJjZXMgd2VyZSBtb3ZlZCB0byB0aGUKICBkb2NzL2V4YW1wbGVzIGRpcmVjdG9yeSB3aGVyZSB0aGV5IGJlbG9uZy4KCi0gV3JvdGUgNyBuZXcgbWFuIHBhZ2VzIGZvciB0aGUgY3VycmVudCBmdW5jdGlvbnMgaW4gdGhlIG5ldyBtdWx0aSBpbnRlcmZhY2UuCiAgVGhleSdyZSBhbGwgc3RpbGwgcHJldHR5IGJhc2ljLCBidXQgd2UgY2FuIHVzZSB0aGVtIGFzIGEgc3RhcnQgYW5kIGFkZCBtb3JlCiAgY29udGVudHMgdG8gdGhlbSB3aGVuIHdlIGZpZ3VyZSBvdXQgd2hhdCB0byB3cml0ZS4gVGhlIGxhcmdlIGFtb3VudCBvZiBtYW4KICBwYWdlcyBmb3IgbGliY3VybCBub3cgcHJlc2VudCBtYWRlIG1lIGRlY2lkZSB0byBwdXQgdGhlbSBpbiBhIG5ldyBzZXBhcmF0ZQogIHN1YmRpcmVjdG9yeSBpbiB0aGUgZG9jcyBkaXJlY3RvcnkuIE5hbWVkIGxpYmN1cmwuCgotIEdpdXNlcHBlIENvcmJlbGxpIHByb3ZpZGVkIGEgdGVtcGxhdGUgZmlsZSBmb3IgdGhlIEVQTSBwYWNrYWdlIG1hbmFnZXIsIGl0CiAgZ2V0cyBnZW5lcmF0ZWQgbmljZWx5IGJ5IHRoZSBjb25maWd1cmUgc2NyaXB0IG5vdy4KClZlcnNpb24gNy45LjUtcHJlNQoKRGFuaWVsICgxIE1hcmNoIDIwMDIpCi0gTW92ZWQgdGhlIG1lbWFuYWx5emUucGwgc2NyaXB0IGludG8gdGhlIHRlc3RzLyBkaXIgYW5kIGFkZGVkIGl0IHRvIHRoZQogIHJlbGVhc2UgYXJjaGl2ZXMuIEl0IHdhcyBwcmV2aW91c2x5IG9ubHkgcHJlc2VudCBpbiB0aGUgQ1ZTIHRyZWUuCgotIE1vZGlmaWVkIHRoZSBGZWJydWFyeSAxN3RoIEhvc3Q6IGZpeCwgYXMgYnVnIHJlcG9ydCAjNTIzNzE4IHBvaW50ZWQgb3V0IHRoYXQKICBpdCBjYXVzZWQgY3Jhc2hlcyEKCi0gTmljbyBCYWdndXMgYWRkZWQgbW9yZSBlcnJvciBjb2RlcyB0byB0aGUgVk1TIHN0dWZmLgoKLSBXZXNsZXkgTGF4dG9uIGJyb3VnaHQgdGhlIGNvZGUgdGhhdCBpbnRyb2R1Y2VkIHRoZSBuZXcgQ1VSTE9QVF9QUkVRVU9URQogIG9wdGlvbi4gSXQgaXMganVzdCBhbm90aGVyIEZUUCBxdW90ZSBvcHRpb24gdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeQogIGEgbGlzdCBvZiBGVFAgY29tbWFuZHMgdG8gaXNzdWUgKmp1c3QgYmVmb3JlKiB0aGUgdHJhbnNmZXIgY29tbWFuZCAoUkVUUiBvcgogIFNUT1IgZXRjKS4gSXQgaGFzIHR1cm5lZCB1cCBhIGZldyBzeXN0ZW1zIHRoYXQgcmVhbGx5IG5lZWQgdGhpcy4KCiAgVGhlIGN1cmwgY29tbWFuZCBsaW5lIHRvb2wgY2FuIGFsc28gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcyBieSBwcmVmaXhpbmcgdGhlCiAgcXVvdGUgY29tbWFuZHMgd2l0aCBhIHBsdXMgKCspIGluIHNpbWlsYXIgc3R5bGUgdGhhdCBwb3N0IHRyYW5zZmVyIHF1b3RlCiAgY29tbWFuZHMgYXJlIHNwZWNpZmllZC4KCiAgVGhpcyBpcyBub3QgeWV0IGRvY3VtZW50ZWQuIFRoZXJlIGlzIG5vIHRlc3QgY2FzZSBmb3IgdGhpcyB5ZXQuCgpEYW5pZWwgKDI4IEZlYnJ1YXJ5IDIwMDIpCi0gUmFscGggTWl0Y2hlbGwgbWFkZSBzb21lIHNlcmlvdXMgZWZmb3J0cyBhbmQgcHV0IGEgbG90IG9mIHN3ZWF0IGluIHNldHRpbmcKICB1cCBzY3JpcHRzIGFuZCB0aGluZ3MgZm9yIG1lIHRvIGJlIGFibGUgdG8gcmVwZWF0IGhpcyBwcm9ibGVtcywgYW5kIEkKICBmaW5hbGx5IGNvdWxkLiAgSSBmb3VuZCBhIHByb2JsZW0gd2l0aCB0aGUgaGVhZGVyIGJ5dGUgY291bnRlciB0aGF0IHdhc24ndAogIGluY3JlYXNlZCBwcm9wZXJseSBhbmQgdGh1cyB3ZSBjb3VsZCByZXR1cm4gQ1VSTEVfR09UX05PVEhJTkcgd2hlbiB3ZSBpbgogIGZhY3QgaGFkIHJlY2VpdmVkIGRhdGEuCgpEYW5pZWwgKDI3IEZlYnJ1YXJ5IDIwMDIpCi0gSSBoYWQgdG8gcmV2ZXJ0IHRoZSBub24tc3BhY2UgcGFyc2luZyBjb29raWUgZml4IEkgcG9zdGVkIHRvIHRoZSBtYWlsaW5nCiAgbGlzdC4gRXhwaXJlIGRhdGVzIGRvIGhhdmUgc3BhY2VzIGFuZCBzdGlsbCBuZWVkIHRvIGdldCBwYXJzZWQgcHJvcGVybHkhCiAgSW5zdGVhZCB3ZSBqdXN0IGlnbm9yZSB0cmFpbGluZyB3aGl0ZSBzcGFjZSBhbmQgaXQgc2VlbXMgdG8gd29yay4uLgoKRGFuaWVsICgyNiBGZWJydWFyeSAyMDAyKQotIE1hZGUgdGhlIGNvb2tpZSBwcm9wZXJ0eSAnTWF4LUFnZScgd29yaywganVzdCBzaW5jZSB3ZSBhbHJlYWR5IHRyaWVkIHRvCiAgc3VwcG9ydCBpdCwgaXQgaXMgYmV0dGVyIHRvIGRvIGl0IHJpZ2h0LiBObyBvbmUgdXNlcyB0aGlzIGFueXdheS4KCi0gVGhlIGNvb2tpZSBwYXJzZXIgY291bGQgY3Jhc2ggaWYgYSByZWFsbHkgd2VpcmQgKGlsbGVnYWwpIGNvb2tpZSBsaW5lIHdhcwogIHJlY2VpdmVkLiBJIGFsc28gbWFkZSBpdCBiZXR0ZXIgZGlzY2FyZCByZWFsbHkgb2RkbHkgZm9ybWF0dGVkIGxpbmVzIGJldHRlci4KCiAgTWFkZSB0aGUgY29va2llIGphciBzdG9yZSB0aGUgc2Vjb25kIGZpZWxkIGZyb20gdGhlIGxlZnQgdXNpbmcgdGhlIHN5bnRheAogIHRoYXQgTmV0c2NhcGUgYW5kIE1vemlsbGEgcHJvYmFibHkgbGlrZS4gQ3VybCBpdHNlbGYgaWdub3JlcyBpdC4KCiAgQWRkZWQgdGVzdCBjYXNlIDMxIGZvciB0aGVzZSBjYXNlcy4KCiAgQ2xheSBMb3ZlbGVzcycgZW1haWwgcmVnYXJkaW5nIHNvbWUgY29va2llIGlzc3VlcyBzdGFydGVkIG15IGNsZWFudXAuCgotIEtldmluIFJvdGggcG9pbnRlZCBvdXQgdGhhdCBteSBhdXRvbWFrZSBmaWRkbGVzIGJyb2tlIHRoZSBhYmlsaXR5IHRvIGJ1aWxkCiAgb3V0c2lkZSB0aGUgc291cmNlLXRyZWUgYW5kIEkgcG9zdGVkIGEgcGF0Y2ggdG8gdGhlIG1haWxpbmcgbGlzdCB0aGF0IGJyaW5ncwogIHRoaXMgYWJpbGl0eSBiYWNrLgoKVmVyc2lvbiA3LjkuNS1wcmU0CgpEYW5pZWwgKDI1IEZlYnJ1YXJ5IDIwMDIpCi0gRmlkZGxlZCB3aXRoIHRoZSBhdXRvbWFrZSBmaWxlcyB0byBtYWtlIGFsbCBzb3VyY2UgZmlsZXMgaW4gdGhlIGxpYgogIGRpcmVjdG9yeSBub3QgaGF2ZSAuLi9zcmMgaW4gdGhlIGluY2x1ZGUgcGF0aCwgYW5kIHRoZSBzcmMgc291cmNlcyBzaG91bGRuJ3QKICBoYXZlIC4uL2xpYiEKCi0gQWxsIDc5IHRlc3QgY2FzZXMgcmFuIE9LIHVuZGVyIExpbnV4IGFuZCBTb2xhcmlzIHVzaW5nIHRoZSBuZXcgSFRUUCBzZXJ2ZXIKICBpbiB0aGUgdGVzdCBzdWl0ZS4gVGhlIG5ldyBIVFRQIHNlcnZlciB3YXMgZmlyc3QgZG9uYXRlZCBieSBHZW9yZyBIb3JuIGFuZAogIHN1YnNlcXVlbnRseSBtb2RpZmllZCB0byB3b3JrIHdpdGggdGhlIHRlc3Qgc3VpdGUuIEl0IGlzIGN1cnJlbnRseSBzdGlsbCBub3QKICBwb3J0YWJsZSBlbm91Z2ggdG8gcnVuIG9uICJhbGwgb3ZlciIgYnV0IHRoaXMgaXMgYSBzdGFydCBhbmQgSSBjYW4gcnVuIGFsbAogIGN1cmwgdGVzdHMgb24gbXkgbWFjaGluZXMuIFRoaXMgaXMgYW4gaW1wb3J0YW50IHJlcXVpcmVtZW50IGZvciB0aGUgdXBjb21pbmcKICBwdWJsaWMgcmVsZWFzZS4KCi0gVXNpbmcgLWQgYW5kIC1JIG9uIHRoZSBzYW1lIGNvbW1hbmQgbGluZSBub3cgcmVwb3J0cyBhbiBlcnJvciwgYXMgaXQgaW1wbGllcwogIHR3byBkaWZmZXJlbnQgSFRUUCByZXF1ZXN0cyB0aGF0IGNhbid0IGJlIG1peGVkLgoKLSBKZWZmcmV5IFBvaGxtZXllciBwcm92aWRlZCBhIHBhdGNoIHRoYXQgbWFkZSB0aGUgLXcvLS13cml0ZS1vdXQgb3B0aW9uCiAgc3VwcG9ydCAle2NvbnRlbnRfdHlwZX0gdG8gZ2V0IHRoZSBjb250ZW50IHR5cGUgb2YgdGhlIHJlY2VudCBkb3dubG9hZC4KCi0gS2V2aW4gUm90aCByZXBvcnRlZCB0aGF0IHByZTIgYW5kIHByZTMgZGlkbid0IGNvbXBpbGUgcHJvcGVybHkgb24gY3lnd2luLAogIGFuZCB0aGlzIHdhcyBiZWNhdXNlIEkgdXNlZCAjaWZkZWYgSEFWRV9XSU5TT0NLX0ggaW4gbGliL211bHRpLmggdG8gZmlndXJlCiAgb3V0IGlmIHdlIGNvdWxkIGluY2x1ZGUgd2luc29jay5oIHdoaWNoIHR1cm5zIG91dCBub3QgdG8gYmUgYSB3aXNlIGNob2ljZSB0bwogIGRvIG9uIGN5Z3dpbiBzaW5jZSBpdCBoYXMgdGhlIGZpbGUgYnV0IGNhbid0IGluY2x1ZGUgaXQhCgpEYW5pZWwgKDIyIEZlYnJ1YXJ5IDIwMDIpCi0gQWRkZWQgc3JjL2NvbmZpZy12bXMuaCB0byB0aGUgcmVsZWFzZSBhcmNoaXZlLgoKLSBGaXhlZCB0aGUgY29ubmVjdGlvbiB0aW1lb3V0IHZhbHVlIGFnYWluLCB0aGUgY2hhbmdlIGZyb20gRmVicnVhcnkgMTggd2Fzbid0CiAgY29tcGxldGUuCgpWZXJzaW9uIDcuOS41LXByZTMKCkRhbmllbCAoMjEgRmVicnVhcnkgMjAwMikKLSBLZXZpbiBSb3RoIGFuZCBBbmRy6XMgR2FyY+1hIGJvdGggZm91bmQgb3V0IHRoYXQgbGliL2NvbmZpZy5oLmluIHdhcyBtaXNzaW5nCiAgaW4gdGhlIHByZS1yZWxlYXNlIGFyY2hpdmUgYW5kIHRodXMgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgZmFpbGVkLgoKVmVyc2lvbiA3LjkuNS1wcmUyCgpEYW5pZWwgKDIwIEZlYnJ1YXJ5IDIwMDIpCi0gQW5kculzIEdhcmPtYSBwcm92aWRlZCBhIHNvbHV0aW9uIHRvIGJ1ZyByZXBvcnQgIzUxNTIyOC4gdGhlIHRvdGFsIHRpbWUKICBjb3VudGVyIHdhcyBub3Qgc2V0IGNvcnJlY3RseSB3aGVuIC1JIHdhcyB1c2VkIGR1cmluZyBzb21lIGNvbmRpdGlvbnMgKGFsbAogIGhlYWRlcnMgd2VyZSByZWFkIGluIG9uZSBzaW5nbGUgcmVhZCkuCgotIE5pY28gQmFnZ3VzIHByb3ZpZGVkIGEgaHVnZSBwYXRjaCB3aXRoIG1pbm9yIHR3ZWFrcyBhbGwgb3ZlciB0byBtYWtlIGN1cmwKICBjb21waWxlIG5pY2VseSBvbiBWTVMuCgpEYW5pZWwgKDE5IEZlYnJ1YXJ5IDIwMDIpCi0gUmljayBSaWNoYXJkc29uIGZvdW5kIG91dCB0aGF0IGJ5IHJlcGxhY2luZyBQRl9VTlNQRUMgd2l0aCBQRl9JTkVUIGluIHRoZQogIGdldGFkZHJpbmZvKCkgY2FsbHMsIGhlIGNvdWxkIHNwZWVkIHVwIHNvbWUgbmFtZSByZXNvbHZpbmcgY2FsbHMgd2l0aCBhbgogIG9yZGVyIG9mIG1hZ25pdHVkZXMgb24gaGlzIFJlZGhhdCBMaW51eCA3LjIuCgotIFBoaWxpcCBHbGFkc3RvbmUgZm91bmQgYSBzZWNvbmQgSU5BRERSX05PTkUgcHJvYmxlbSB3aGVyZSB3ZSB1c2VkIGxvbmcKICBpbnRlYWQgb2YgaW5fYWRkcl90IHdoaWNoIGNhdXNlZCA2NGJpdCBwcm9ibGVtb3MuIFdlIHJlYWxseSBzaG91bGRuJ3QgZGVmaW5lCiAgdGhhdCBvbiB0d28gZGlmZmVyZW50IHBsYWNlcy4KCkRhbmllbCAoMTggRmVicnVhcnkgMjAwMikKLSBQaGlsaXAgR2xhZHN0b25lIGZvdW5kIGEgcHJvYmxlbSBpbiBob3cgSFRUUCByZXF1ZXN0cyB3ZXJlIHNlbnQgaWYgdGhlCiAgcmVxdWVzdCBjb3VsZG4ndCBiZSBzZW50IGFsbCBhdCBvbmNlLgoKLSBFbWlsIGZvdW5kIGFuZCBjb3JyZWN0ZWQgYSBiYWQgY29ubmVjdGlvbiB0aW1lb3V0IGNvbXBhcmlzb24gdGhhdCBtYWRlIGN1cmwKICB1c2UgdGhlIGxvbmdlc3Qgb2YgY29ubmVjdC10aW1lb3V0IGFuZCB0aW1vdXQgYXMgYSB0aW1lb3V0IHZhbHVlLCBpbnN0ZWFkIG9mCiAgdGhlIHNob3J0ZXN0IGFzIGl0IHdhcyBzdXBwb3NlZCB0byEKCi0gQXJvbiBSb2JlcnRzIHByb3ZpZGVkIHVwZGF0ZWQgaW5mb3JtYXRpb24gYWJvdXQgTERBUCBVUkwgc3ludGF4IHRvIGdvIGludG8KICB0aGUgbWFudWFsIGFzIGEgcmVwbGFjZW1lbnQgZm9yIHRoZSBvbGQgcmVmZXJlbmNlcy4KCkRhbmllbCAoMTcgRmVicnVhcnkgMjAwMikKLSBQaGlsaXAgR2xhZHN0b25lIHBvaW50ZWQgb3V0IHR3byBtaXNzaW5nIGluY2x1ZGUgZmlsZXMgdGhhdCBtYWRlIGN1cmwgY29yZQogIGR1bXAgb24gNjRiaXQgYXJjaGl0ZWN0dXJlcy4gV2UgbmVlZCB0byBwYXkgbW9yZSBhdHRlbnRpb24gb24gdGhlc2UgZGV0YWlscy4KICBJdCBpcyAqbGV0aGFsKiB0byBmb3IgZXhhbXBsZSBmb3JnZXQgdGhlIG1hbGxvYygpIHByb3RvdHlwZSwgYXMgJ2ludCcgaXMKICAzMmJpdCBhbmQgbWFsbG9jKCkgbXVzdCByZXR1cm4gYSA2NGJpdCBwb2ludGVyIG9uIHRoZXNlIHBsYXRmb3Jtcy4KCi0gR2lhc2xhcyBHZW9yZ2lvcyBmaXhlZCBhIHByb2JsZW0gd2l0aCBIb3N0OiBoZWFkZXJzIG9uIHJlcGVhdGVkIHJlcXVlc3RzIG9uCiAgdGhlIHNhbWUgaGFuZGxlIHVzaW5nIGEgcHJveHkuCgpEYW5pZWwgKDggRmVicnVhcnkgMjAwMikKLSBIYW5ubyBMLiBLcmFuemhvZmYgYWNjdXJhdGVseSBmb3VuZCBvdXQgdGhhdCBkaXNhYmxpbmcgdGhlIEV4cGVjdDogaGVhZGVyCiAgd2hlbiBkb2luZyBtdWx0aXBhcnQgZm9ybXBvc3RzIGRpZG4ndCB3b3JrIHZlcnkgd2VsbC4gSXQgZGlzYWJsZWQgb3RoZXIKICBwYXJ0cyBvZiB0aGUgcmVxdWVzdCBoZWFkZXIgdG9vLCByZXN1bHRpbmcgaW4gYSBicm9rZW4gaGVhZGVyLiBXaGVuIEkgZml4ZWQKICB0aGlzLCBJIGFsc28gbm90aWNlZCB0aGF0IHRoZSBDb250ZW50LVR5cGUgd2Fzbid0IHBvc3NpYmxlIHRvIGRpc2FibGUuIEl0IGlzCiAgbm93LCBldmVuIHRob3VnaCBpdCBwcm9iYWJseSBpcyByZWFsbHkgc3R1cGlkIHRvIHRyeSB0byBkbyB0aGlzIChiZWNhdXNlIG9mCiAgdGhlIGJvdW5kYXJ5IHN0cmluZyB0aGF0IGlzIGluY2x1ZGVkIGluIHRoZSBpbnRlcm5hbGx5IGdlbmVyYXRlZCBoZWFkZXIsCiAgdXNlZCBhcyBmb3JtIHBhcnQgc2VwYXJhdG9yLikKCkRhbmllbCAoNyBGZWJydWFyeSAyMDAyKQotIEkgbW92ZWQgdGhlIGNvbmZpZyouaCBmaWxlcyBmcm9tIHRoZSByb290IGRpcmVjdG9yeSB0byB0aGUgbGliLyBkaXJlY3RvcnkuCgotIEkndmUgYWRkZWQgdGhlIG5ldyB0ZXN0IHN1aXRlIEhUVFAgc2VydmVyIHRvIHRoZSBDVlMgcmVwb3NpdG9yeSwgSXQgc2VlbXMgdG8KICB3b3JrIHByZXR0eSBnb29kIG5vdywgYnV0IHdlIG11c3QgbWFrZSBpdCBnZXQgdXNlZCBieSB0aGUgdGVzdCBzY3JpcHRzCiAgcHJvcGVybHkgYW5kIHRoZW4gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpdCBjb21waWxlcywgYnVpbGRzIGFuZCBydW5zIG9uCiAgbW9zdCBvcGVyYXRpbmcgc3lzdGVtcy4KClZlcnNpb24gNy45LjUtcHJlMQoKRGFuaWVsICg2IEZlYnJ1YXJ5IDIwMDIpCi0gTWlrbG9zIE5lbWV0aCBwcm92aWRlZCB1cGRhdGVkIHdpbmRvd3MgbWFrZWZpbGVzIGFuZCBJTlNUQUxMIGRvY3MuCgotIE1yIExhcnJ5IEZhaG5vZSBmb3VuZCBhIHByb2JsZW0gd2l0aCBmb3JtcG9zdHMgYW5kIEkgbWFuYWdlZCB0byB0cmFjayBkb3duCiAgYW5kIHBhdGNoIHRoaXMgYnVnLiBUaGlzIHdhcyBhY3R1YWxseSB0d28gYnVncywgYXMgdGhlIHBvc3RlZCBzaXplIHdhcyBhbHNvCiAgc2FpZCB0byBiZSB0d28gYnl0ZXMgdG9vIGxhcmdlLgoKLSBCcmVudCBCZWFyZHNsZXkgZm91bmQgb3V0IGFuZCBicm91Z2h0IGEgY29ycmVjdGlvbiBmb3IgdGhlCiAgQ1VSTElORk9fQ09OVEVOVF9UWVBFIHBhcnNlciB0aGF0IHdhcyBvZmYgb25lIGJ5dGUuIFRoaXMgd2FzIG15IGZhdWx0LCBJCiAgYWNjaWRlbnRhbHkgYnJva2UgR2lhc2xhcyBHZW9yZ2lvcycgcGF0Y2guCgpEYW5pZWwgKDUgRmVicnVhcnkgMjAwMikKLSBLZXZpbiBSb3RoIGZvdW5kIHlldCBhbm90aGVyIFNTTCBkb3dubG9hZCBwcm9ibGVtLgoKVmVyc2lvbiA3LjkuNAoKLSBubyBjaGFuZ2VzIHNpbmNlIHByZS1yZWxlYXNlCgpWZXJzaW9uIDcuOS40LXByZTIKCkRhbmllbCAoMyBGZWJydWFyeSAyMDAyKQotIEVyaWMgTWVsdmlsbGUgcHJvdmlkZWQgYSBmZXcgc3BlbGxpbmcgY29ycmVjdGlvbnMgaW4gdGhlIGN1cmwgbWFuIHBhZ2UuCgpEYW5pZWwgKDEgRmVicnVhcnkgMjAwMikKLSBBbmRyZWFzIERhbW0gY29ycmVjdGVkIHRoZSB1bmNvbmRpdGlvbmFsIHVzZSBvZiBnbXRpbWUoKSBpbiBnZXRkYXRlLCBpdCBub3cKICB1c2VzIGdtdGltZV9yKCkgb24gYWxsIGhvc3RzIHRoYXQgaGF2ZSBpdC4KCkRhbmllbCAoMzEgSmFudWFyeSAyMDAyKQotIEFuIGFub255bW91cyBidWcgcmVwb3J0IGlkZW50aWZpZWQgYSBwcm9ibGVtIGluIHRoZSBETlMgY2FjaGluZyB3aGljaCBtYWRlIGl0CiAgc29tZXRpbWVzIGFsbG9jYXRlIG9uZSBieXRlIHRvbyBsaXR0bGUgdG8gc3RvcmUgdGhlIGNhY2hlIGVudHJ5IGluLiBUaGlzCiAgaGFwcGVuZWQgd2hlbiB0aGUgcG9ydCBudW1iZXIgc3RhcnRlZCB3aXRoIDEhCgotIEFsYmVydCBDaGluIHByb3ZpZGVkIGEgcGF0Y2ggdGhhdCBpbXByb3ZlcyB0aGUgZ2V0aG9zdGJ5bmFtZV9yKCkgY29uZmlndXJlCiAgY2hlY2sgb24gSFAtVVggMTEuMDAuCgpWZXJzaW9uIDcuOS40LXByZTEKCkRhbmllbCAoMzAgSmFudWFyeSAyMDAyKQotIEdlb3JnIEhvcm4gZm91bmQgYW5vdGhlciB3YXkgdGhlIFNTTCByZWFkaW5nIGZhaWxlZCBkdWUgdG8gdGhlIG5vbi1ibG9ja2luZwogIHN0YXRlIG9mIHRoZSBzb2NrZXRzISBJIGZpeGVkLgoKRGFuaWVsICgyOSBKYW51YXJ5IDIwMDIpCi0gTXVsdGlwYXJ0IGZvcm1wb3N0cyBub3cgc2VuZCB0aGUgZnVsbCByZXF1ZXN0IHByb3Blcmx5LCBpbmNsdWRpbmcgdGhlIENSTEYuCiAgVGhleSB3ZXJlIHByZXZpb3VzbHkgdHJlYXRlZCBhcyBwYXJ0IG9mIHRoZSBwb3N0IGRhdGEuCgotIFRoZSB1cGxvYWQgYnl0ZSBjb3VudGVyIGJ1Z2dlZC4KCi0gVC4gQmhhcmF0aCBwb2ludGVkIG91dCB0aGF0IHdlIHNlZWQgU1NMIG9uIGV2ZXJ5IGNvbm5lY3QsIHdoaWNoIGlzIGEgdGltZS0KICBjb25zdW1pbmcgb3BlcmF0aW9uIHRoYXQgc2hvdWxkIG9ubHkgYmUgbmVlZGVkIHRvIGRvIG9uY2UuIFdlIHBhdGNoZWQKICBsaWJjdXJsIHRvIG5vdyBvbmx5IHNlZWQgb24gdGhlIGZpcnN0IGNvbm5lY3Qgd2hlbiB1bnNlZWRlZC4gVGhlIHNlZWRlZAogIHN0YXR1cyBpcyBnbG9iYWwgc28gaXQnbGwgbm93IG9ubHkgaGFwcGVuIG9uY2UgZHVyaW5nIGEgcHJvZ3JhbSdzIGxpZmUgdGltZS4KCiAgSWYgdGhlIHJhbmRvbV9maWxlIG9yIGVnZHNvY2tldCBpcyBzZXQsIHRoZSBzZWVkIHdpbGwgYmUgcmUtbWFkZSB0aG91Z2guCgotIEdpYXNsYXMgR2Vvcmdpb3MgaW50cm9kdWNlZCBDVVJMSU5GT19DT05URU5UX1RZUEUgdGhhdCBsZXRzCiAgY3VybF9lYXN5X2dldGluZm8oKSByZWFkIHRoZSBjb250ZW50LXR5cGUgZnJvbSB0aGUgcHJldmlvdXMgcmVxdWVzdC4KCkRhbmllbCAoMjggSmFudWFyeSAyMDAyKQotIEtqZXRpbCBKYWNvYnNlbiBmb3VuZCBhIHdheSB0byBjcmFzaCBjdXJsIGFuZCBhZnRlciBtdWNoIGRlYnVnZ2luZywgaXQKICB0dXJuZWQgb3V0IGl0IHdhcyBhIElQdjQtbGludXggb25seSBwcm9ibGVtIGludHJvZHVjZWQgaW4gNy45LjMgcmVsYXRlZCB0bwogIG5hbWUgcmVzb2x2aW5nLgoKLSBBbmRyZWFzIERhbW0gcG9zdGVkIGEgaHVnZSBwYXRjaCB0aGF0IG1hZGUgdGhlIGN1cmxfZ2V0ZGF0ZSgpIGZ1bmN0aW9uIGZ1bGx5CiAgcmVlbnRyYW50IQoKLSBTdGV2ZSBNYXJ4IHBvaW50ZWQgb3V0IHRoYXQgeW91IGNvdWxkbid0IG1peCBDVVJMT1BUX0NVU1RPTVJFUVVFU1Qgd2l0aAogIENVUkxPUFRfUE9TVEZJRUxEUy4gWW91IGNhbiBub3chCgpEYW5pZWwgKDI1IEphbnVhcnkgMjAwMikKLSBLcmlzaG5lbmR1IE1hanVtZGFyIHBvaW50ZWQgb3V0IHRoYXQgdGhlIGhlYWRlciBsZW5ndGggY291bnRlciB3YXMgbm90IHJlc2V0CiAgYmV0d2VlbiBtdWx0aXBsZSByZXF1ZXN0cyBvbiB0aGUgc2FtZSBoYW5kbGUuCgotIFBlZHJvIE5ldmVzIHJpZ2h0ZnVsbHkgcXVlc3Rpb25lZCB3aHkgY3VybCBhbHdheXMgYXBwZW5kIFxyXG4gdG8gdGhlIGRhdGEKICB0aGF0IGlzIHNlbnQgaW4gSFRUUCBQT1NUIHJlcXVlc3RzLiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGJyb2tlIHRoZSB0ZXN0IHN1aXRlCiAgYXMgdGhlIHRlc3QgSFRUUCBzZXJ2ZXIgaXMgbGFtZSBlbm91Z2ggbm90IHRvIGRlYWwgd2l0aCB0aGlzLi4uIDotTwoKLSBGb2xsb3dpbmcgTG9jYXRpb246IGhlYWRlcnMgd2hlbiB0aGUgY29ubmVjdGlvbiBkaWRuJ3QgY2xvc2UgZGlkbid0IHdvcmsgYXMKICBsaWJjdXJsIGRpZG4ndCBwcm9wZXJseSBzdG9wIHJlYWRpbmcuIFRoaXMgcHJvYmxlbSB3YXMgYWRkZWQgaW4gNy45LjMgZHVlIHRvCiAgdGhlIHJlc3RydWN0dXJlZCBpbnRlcm5hbHMuICdGcmFuaycgcG9zdGVkIGEgYnVnIHJlcG9ydCBhYm91dCB0aGlzLgoKRGFuaWVsICgyNCBKYW51YXJ5IDIwMDIpCi0gS2V2aW4gUm90aCB2ZXJ5IHF1aWNrbHkgc3BvdHRlZCB0aGF0IHdlIHdyb25nbHkgaW5zdGFsbGVkIHRoZSBleGFtcGxlCiAgcHJvZ3JhbXMgdGhhdCB3ZXJlIGJ1aWx0IGluIHRoZSBtdWx0aSBkaXJlY3RvcnksIHdoZW4gJ21ha2UgaW5zdGFsbCcgd2FzCiAgdXNlZC4gOi0vCgpWZXJzaW9uIDcuOS4zCgpEYW5pZWwgKDIzIEphbnVhcnkgMjAwMikKLSBBbmRy6XMgR2FyY+1hIGZvdW5kIGEgcGVyc2lzdGFuY3kgcHJvYmxlbSB3aGVuIGRvaW5nIEhUVFAgSEVBRCwgdGhhdCBtYWRlCiAgY3VybCAiaGFuZyIgdW50aWwgdGhlIGNvbm5lY3Rpb24gd2FzIGNsb3NlZCBieSB0aGUgc2VydmVyLiBUaGlzIHByb2JsZW0gaGFzCiAgYmVlbiBpbnRyb2R1Y2VkIGluIDcuOS4zIGR1ZSB0byBpbnRlcm5hbCByZXdyaXRlcywgdGhpcyB3YXMgbm90IHByZXNlbnQgaW4KICA3LjkuMi4KClZlcnNpb24gNy45LjMtcHJlNAoKRGFuaWVsICgxOSBKYW51YXJ5IDIwMDIpCi0gQW50b25pbyBmaWxlZCBidWcgcmVwb3J0ICM1MDU1MTQgYW5kIHByb3ZpZGVkIGEgZml4ISBXaGVuIGRvaW5nIG11bHRpcGFydAogIGZvcm1wb3N0cywgbGliY3VybCB3b3VsZCBpbmNsdWRlIGFuIGVycm9yIHRleHQgaW4gdGhlIGFjdHVhbCBwb3N0IGlmIGEKICBzcGVjaWZpZWQgZmlsZSB3YXNuJ3QgZm91bmQuIFRoaXMgaXMgbm90IGxpYmN1cmwncyBqb2IuIEluc3RlYWQgd2UgYWRkIGFuCiAgZW1wdHkgcGFydC4KCkRhbmllbCAoMTggSmFudWFyeSAyMDAyKQotIFBsYXllZCBhcm91bmQgd2l0aCBzdHJpY3RlciBjb21waWxlciB3YXJuaW5ncyBmb3IgZ2NjICh3aGVuIC4vY29uZmlndXJlCiAgLS1lbmFibGUtZGVidWcgaXMgdXNlZCkgYW5kIGNoYW5nZWQgc29tZSBtaW5vciB0aGluZ3MgdG8gc3RvcCB0aGUgd2FybmluZ3MuCgotIENvbW1lbnRlZCBvdXQgdGhlICdsb25nIGxvbmcnIGFuZCAnbG9uZyBkb3VibGUnIGNoZWNrcyBpbiBjb25maWd1cmUuaW4sIGFzCiAgd2UgZG9uJ3QgY3VycmVudGx5IHVzZSB0aGVtIGFueXdheSBhbmQgdGhlIGNvZGUgaW4gbGliL21wcmludGYuYyB0aGF0IHVzZQogIHRoZW0gY2F1c2VzIHdhcm5pbmdzLgoKLSBTYXVsIEdvb2QgYW5kIGpvbmF0YW4gcG9pbnRlZCBvdXQgTWFjIE9TIFggYnVpbGQgcHJvYmxlbXMgd2l0aCBwcmUzIGFuZCBob3cKICB0byBjb3JyZWN0IHRoZW0uIFR3byBjb21waWxlciB3YXJuaW5ncyB3ZXJlIHJlbW92ZWQgYXMgd2VsbC4KCi0gQW5kculzIEdhcmPtYSBmaXhlZCB0d28gbWlub3IgbWluZ3czMiBidWlsZGluZyBwcm9ibGVtcy4KClZlcnNpb24gNy45LjMtcHJlMwoKRGFuaWVsICgxNyBKYW51YXJ5IDIwMDIpCi0gZG9jcy9saWJjdXJsLXRoZS1ndWlkZSBpcyBhIG5ldyB0dXRvcmlhbCBmb3Igb3VyIGxpYmN1cmwgcHJvZ3JhbW1pbmcKICBmcmllbmRzLgoKLSBSaWNoYXJkIEFyY2hlciBicm91Z2h0IGJhY2sgdGhlIGFiaWxpdHkgdG8gY29tcGlsZSBhbmQgYnVpbGQgd2l0aCBPcGVuU1NMCiAgdmVyc2lvbnMgYmVmb3JlIDAuOS41LgogIFtodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2Z1bmM9ZGV0YWlsJmF0aWQ9MTAwOTc2JmFpZD01MDQxNjMmZ3JvdXBfaWQ9OTc2XQoKLSBUaGUgRE5TIGNhY2hlIGNvZGUgZGlkbid0IHRha2UgdGhlIHBvcnQgbnVtYmVyIGludG8gYWNjb3VudCwgd2hpY2ggbWFkZSBpdAogIHdvcmsgcmF0aGVyIGJhZCBvbiBJUHY2LWVuYWJsZWQgaG9zdHMgKGVzcGVjaWFsbHkgd2hlbiBkb2luZyBwYXNzaXZlCiAgRlRQKS4gU3RlcmxpbmcgZml4ZWQgaXQuCgpEYW5pZWwgKDE2IEphbnVhcnkgMjAwMikKLSBHZW9yZyBIb3JuIGNvdWxkIG1ha2UgYSB0cmFuc2ZlciB0aW1lLW91dCB3aXRob3V0IGVycm9yIHRleHQuIEkgZm91bmQgaXQgYW5kCiAgY29ycmVjdGVkIGl0LgoKLSBTU0wgd3JpdGVzIGRpZG4ndCB3b3JrLCB0aGV5IHJldHVybiBhbiB1bmluaXRpYWxpemVkIHZhbHVlIHRoYXQgY2F1c2VkCiAgaGF2b2MgYWxsIG92ZXIuIEdlb3JnIEhvcm4gZXhwZXJpZW5jZWQgdGhpcy4KCi0gS2V2aW4gUm90aCBwYXRjaGVkIHRoZSBjdXJsX3ZlcnNpb24oKSBmdW5jdGlvbiB0byB1c2UgdGhlIHByb3BlciBPcGVuU1NMCiAgZnVuY3Rpb24gZm9yIHZlcnNpb24gaW5mb3JtYXRpb24uIFRoaXMgd2F5LCBjdXJsIHdpbGwgcmVwb3J0IHRoZSB2ZXJzaW9uIG9mCiAgdGhlIFNTTCBsaWJyYXJ5IGFjdHVhbGx5IHJ1bm5pbmcgcmlnaHQgbm93LCBub3QgdGhlIG9uZSB0aGF0IGhhZCBpdHMgaGVhZGVycwogIGluc3RhbGxlZCB3aGVuIGxpYmN1cmwgd2FzIGJ1aWx0LiBNYWlubHkgaW50ZXJzdGluZyB3aGVuIHJ1bm5pbmcgd2l0aCBzaGFyZWQKICBPcGVuU1NMIGxpYnJhcmllcy4gIAoKVmVyc2lvbiA3LjkuMy1wcmUyCgpEYW5pZWwgKDE2IEphbnVhcnkgMjAwMikKLSBNb2ZpZWQgdGhlIG1haW4gdHJhbnNmZXIgbG9vcCBhbmQgcmVsYXRlZCBzdHVmZiB0byBkZWFsIHdpdGggbm9uLWJsb2NraW5nCiAgc29ja2V0cyBpbiB0aGUgdXBsb2FkIHNlY3Rpb24uIFdoaWxlIGRvaW5nIHRoaXMsIEkndmUgbm93IHNlcGFyYXRlZCB0aGUKICBjb25uZWN0aW9uIG9yaWVudGVkIGJ1ZmZlcnMgdG8gaGF2ZSBvbmUgZm9yIGRvd25sb2FkcyBhbmQgb25lIGZvciB1cGxvYWRzCiAgKGFzIHR3byBjYW4gaGFwcGVuIHNpbXVsdGFuZW91c2x5KS4gSSBhbHNvIHNocnVuayB0aGUgYnVmZmVycyB0byAyMEsKICBlYWNoLiBBcyB3ZSBoYXZlIGEgc2NyYXRjaCBidWZmZXIgdHdpY2UgdGhlIHNpemUgb2YgdGhlIHVwbG9hZCBidWZmZXIsIHdlCiAgYXJyaXZlZCBhdCA4MEsgZm9yIGJ1ZmZlcnMgY29tcGFyZWQgd2l0aCB0aGUgcHJldmlvdXMgMTUwSy4KCi0gQWRkZWQgdGhlIC0tY2Mgb3B0aW9uIHRvIGN1cmwtY29uZmlnIGNvbW1hbmQgYXMgaXQgZW5hYmxlcyBzbyB2ZXJ5IGNvb2wKICBvbmUtbGluZXJzLiBIYXZlIGEgZ28gYSB0aGlzIG9uZSwgYnVpbGRpbmcgdGhlIHNpbXBsZS5jIGV4YW1wbGU6CgogICAgICAgICQgYGN1cmwtY29uZmlnIC0tY2MgLS1jZmxhZ3MgLS1saWJzYCAtbyBleGFtcGxlIHNpbXBsZS5jCgpEYW5pZWwgKDE0IEphbnVhcnkgMjAwMikKLSBJIG1hZGUgYWxsIHNvY2tldCByZWFkcyAocmVjdikgaGFuZGxlIEVXT1VMREJMT0NLLiBJIGhvcGUgbmljZWx5LiBOb3cgd2UKICBvbmx5IG5lZWQgdG8gYWRkcmVzcyBhbGwgd3JpdGVzIChzZW5kKSB0b28gYW5kIHRoZW4gSSdtIHJlYWR5IGZvciBhbm90aGVyCiAgcHJlLXJlbGVhc2UuLi4KCi0gU3RvbmVkIEVsaXBvdCBwYXRjaGVkIHRoZSBpbl9hZGRyX3QgY29uZmlndXJlIHRlc3QgdG8gbWFrZSBpdCB3b3JrIGJldHRlciBvbgogIG1vcmUgcGxhdGZvcm1zLgoKRGFuaWVsICg5IEphbnVhcnkgMjAwMikKLSBDcmlzIEJhaWxpZmYgZm91bmQgb3V0IHRoYXQgZmlsbGluZyB1cCBjdXJsJ3MgU1NMIHNlc3Npb24gY2FjaGUgY2F1c2VkIGEKICBjcmFzaCEKCi0gUG9zdGVkIHRoZSBjdXJsIHF1ZXN0aW9ubmFpcmUgb24gdGhlIHdlYiBzaXRlLiBJZiB5b3UgaGF2ZW4ndCBwb3N0ZWQgeW91cgogIG9waW5pb25zIHRoZXJlIHlldCwgZ28gdGhlcmUgYW5kIGRvIGl0IG5vdyB3aGlsZSBpdCBpcyBzdGlsbCB0aGVyZToKCiAgICAgICAgaHR0cDovL2N1cmwuaGF4eC5zZS9xLwoKLSBHZW9yZyBIb3JuIHF1aWNrbHkgZm91bmQgb3V0IHRoYXQgdGhlIFNTTCByZWFkaW5nIG5vIGxvbmdlciB3b3JrZWQgYXMKICBzdXBwb3NlZCBzaW5jZSB0aGUgc3dpdGNoIHRvIG5vbi1ibG9ja2luZyBzb2NrZXRzLiBJJ3ZlIG1hZGUgYSBxdWljayBwYXRjaAogIChmb3IgcmVhZGluZyBvbmx5KSBidXQgd2Ugc2hvdWxkIGltcHJvdmUgaXQgZXZlbiBmdXJ0aGVyLgoKVmVyc2lvbiA3LjkuMy1wcmUxCgpEYW5pZWwgKDcgSmFudWFyeSAyMDAyKQotIEkgbWFkZSB0aGUgJ2Jvb2wnIHR5cGVkZWYgdXNlIGFuICJ1bnNpZ25lZCBjaGFyIi4gSXQgbWFrZXMgaXQgdGhlIHNhbWUgb24KICBhbGwgcGxhdGZvcm1zLCBubyBtYXR0ZXIgd2hhdCB0aGUgcGxhdGZvcm0gdGhpbmtzIHRoZSBkZWZhdWx0IGZvcm1hdCBmb3IKICBjaGFyIGlzLiBUaGlzIHdhcyBub3RpY2VkIHNpbmNlIHdlIG1hZGUgYSBzaWxseSBjb21wYXJpc29uIGludm9sdmluZyBzdWNoIGEKICBib29sIHZhcmlhYmxlLCBhbmQgb25seSBvbmUgY29tcGlsZXIvcGxhdGZvcm0gY29tYmluYXRpb24gKG9uIERlYmlhbiBMaW51eCkKICBjb21wbGFpbmVkIGFib3V0IGl0ICh0aGF0IGhhcHBlbmVkIHRvIGhhdmUgaXRzIGNoYXIgdW5zaWduZWQgYnkgZGVmYXVsdCkuCgotIEJ1ZyByZXBvcnQgIzQ5NTI5MCBpZGVudGlmaWVkIGEgY29va2llIHBhcnNpbmcgcHJvYmxlbSB0aGF0IHdhcyBjb3JyZWN0ZWQuCiAgV2hlbiBhIFNldC1Db29raWU6IGxpbmUgaXMgcmVjZWl2ZWQgd2l0aG91dCBhIHRyYWlsaW5nIHNlbWljb2xvbiwgbGliY3VybAogIGRpZG4ndCByZWFkIHRoZSBsYXN0ICJuYW1lPXZhbHVlIiBwYWlyIG9mIHRoZSBsaW5lLCBsZWFkaW5nIHRvIGNvbmZ1c2lvbnMuLi4KCi0gU3RlcmxpbmcgY29tbWl0dGVkIGhpcyB1cGRhdGVkIEROUyBjYWNoZSBjb2RlLgoKLSBJIHdvcmtlZCB3aXRoIEdlb3JnIEhvcm4gYW5kIGNvbW1lbnRzIGZyb20gR/Z0eiBCYWJpbi1FYmVsbCBhbmQgc3dpdGNoZWQKICBjdXJsJ3Mgc29ja2V0IG9wZXJhdGlvbnMgY29tcGxldGVseSBvdmVyIHRvIG5vbi1ibG9ja2luZyBmb3IgdGhlIGVudGlyZQogIG9wZXJhdGlvbiAocHJldmlvdXNseSB3ZSB1c2VkIG5vbi1ibG9ja2luZyBvbmx5IGZvciB0aGUgY29ubmVjdGlvbiBwaGFzZSkuCiAgV2UgaGFkIHRvIGRvIHRoaXMgdG8gbWFrZSB0aGUgU1NMIGNvbm5lY3Rpb24gcGhhc2UgdGltZW91dCBwcm9wZXJseSB3aXRob3V0CiAgdGhlIHVzZSBvZiBzaWduYWxzLiBBIGxpdHRsZSBleHRyYSBjb2RlIHRvIGRlYWwgd2l0aCB0aGlzIHdhcyBhZGRlZC4KCi0gVC4gQmhhcmF0aCBwb2ludGVkIG91dCBhIHNsaWdodGx5IG9ic2N1cmUgY29va2llIGVuZ2luZSBmbGF3LgoKLSBQZXRlIFN1IHBvaW50ZWQgb3V0IHRoYXQgbGliY3VybCBkaWRuJ3QgdHJlYXQgSFRUUCBjb2RlIDIwNCBhcyBpdCBzaG91bGQuCiAgMjA0LXJlcGxpZXMgbmV2ZXIgcHJvdmlkZXMgYSByZXNwb25zZS1ib2R5LiBUaGlzIHJlc3VsdGVkIGluIGJhZCBwZXJzaXN0YW50CiAgYmVoYXZpb3Igd2hlbiAyMDQgd2FzIHJlY2VpdmVkLgoKRGFuaWVsICg1IEphbnVhcnkgMjAwMikKLSBTTSB1cGRhdGVkIHRoZSBWQysrIGxpYnJhcnkgTWFrZWZpbGVzIGZvciB0aGUgbmV3IHNvdXJjZSBmaWxlcy4KCkRhbmllbCAoNCBKYW51YXJ5IDIwMDIpCi0gSSBkaXNjb3ZlcmVkIHRoYXQgd2Ugd3JvbmdseSB1c2VkIGluZXRfbnRvYSgpIChpbnN0ZWFkIG9mIGluZXRfbnRvYV9yKCkgaW4KICB0d28gcGxhY2VzIGluIHRoZSBzb3VyY2UgY29kZSkuIE9uZSBoYXBwZW5lZCB3aXRoIFZFUkJPU0Ugc2V0IG9uIGNvbm5lY3RzLAogIGFuZCB0aGUgb3RoZXIgd2hlbiBWRVJCT1NFIHdhcyBvbiBhbmQga3JiNCBvdmVyIG5hdCB3YXMgdXNlZC4uLiBJIGhvbmVzdGx5CiAgZG9uJ3QgdGhpbmsgYW55b25lIGhhcyBzdWZmZXJlZCBmcm9tIHRoZXNlIG1pc3Rha2VzLgoKLSBJIHJlcGxhY2VkIGEgbG90IG9mIHNpbGx5IG9jY3VyYW5jZXMgb2YgcHJpbnRmKCkgdG8gaW5zdGVhZCB1c2UgdGhlIG1vcmUKICBhcHByb3ByaWF0ZSBDdXJsX2luZm9mKCkgb3IgQ3VybF9mYWlsZigpLiBUaGUga3JiNCBhbmQgdGVsbmV0IGNvZGUgd2VyZQogIGFmZmVjdGVkLgoKLSBQaGlsaXAgR2xhZHN0b25lIGZvdW5kIGEgZmV3IG1vcmUgcHJvYmxlbXMgd2l0aCA2NC1iaXQgYXJjaHMgKHRoZSA2NC1iaXQKICBzcGFyYyBvbiBzb2xhcmlzIDgpLgoKLSBBZnRlciBkaXNjdXNzaW9ucyBvbiB0aGUgbGliY3VybCBsaXN0IHdpdGggUmFvdWwgQ3JpZGxpZywgSSBqdXN0IG1hZGUgRlRQCiAgcmVzcG9uc2UgbGluZXMgZ2V0IHBhc3NlZCB0byB0aGUgaGVhZGVyIGNhbGxiYWNrIGlmIHN1Y2ggYSBvbmUgaXMKICByZWdpc3RlcmVkLiBJdCdsbCBtYWtlIGl0IHBvc3NpYmxlIGZvciBhbnkgYXBwbGljYXRpb24gdG8gZ2V0IGFsbCB0aGUKICByZXNwb25zZXMgYW4gRlRQIHNlcnZlciBzZW5kcyB0byBsaWJjdXJsLgoKRGFuaWVsICgzIEphbnVhcnkgMjAwMikKLSBTdGVybGluZyBIdWdoZXMgYnJvdWdodCBhIGZldyBidWNrZXRzIG9mIGNvZGUuIE5vdywgbGliY3VybCB3aWxsCiAgYXV0b21hdGljYWxseSBjYWNoZSBETlMgbG9va3VwcyBhbmQgcmUtdXNlIHRoZSBwcmV2aW91cyByZXN1bHRzIGZpcnN0IGlmIGFueQogIHN1Y2ggaXMgYXZhaWxhYmxlLiBJdCBncmVhdGx5IGltcHJvdmVzIHNwZWVkIHdoZW4gZG9pbmcgbWFueSByZXBlYXRlZAogIG9wZXJhdGlvbnMgdG8gdGhlIHNhbWUgaG9zdC4KCi0gQXMgdGhlIHRlc3QgY2FzZSB1c2VzIC0taW5jbHVkZSBhbmQgdGhlbiAtLWhlYWQsIEkgaGFkIHRvIG1vZGlmeSBzcmMvbWFpbi5jCiAgdG8gZGVhbCB3aXRoIHRoaXMgc2l0dWF0aW9uIHNsaWdodGx5IGJldHRlciB0aGFuIHByZXZpb3VzbHkuIFdoZW4gZG9uZSwgd2UKICBoYXZlIDEwMCUgZ29vZCB0ZXN0cyBhZ2FpbiBpbiB0aGUgbWFpbiBicmFuY2guCgpEYW5pZWwgKDIgSmFudWFyeSAyMDAyKQotIE1hZGUgdGVzdCBjYXNlIDI1IHJ1biBhZ2FpbiBpbiB0aGUgbXVsdGktZGV2IGJyYW5jaC4gQnV0IGl0IHNlZW1zIHRoYXQgdGhlCiAgY2hhbmdlcyBkb25lIG9uIGRlYy0yMCBtYWRlIHRlc3QgY2FzZSAxMDQgY2Vhc2UgdG8gd29yayAoaW4gYm90aCBicmFuY2hlcykuCgotIFBoaWxpcCBHbGFkc3RvbmUgcG9pbnRlZCBvdXQgYSBmZXcgcG9ydGFiaWxpdHkgcHJvYmxlbXMgaW4gdGhlIHNvdXJjZSBjb2RlCiAgdGhhdCBkaWRuJ3QgY29tcGlsZSBvbiA2NC1iaXQgc3BhcmNzIHVzaW5nIFN1bidzIG5hdGl2ZSBjb21waWxlci4K