Q2hhbmdlcyBmb3IgQVBSIDEuMC4yCgogICopIFN3aXRjaCB0byBsYXp5IGluaXRpYWxpemF0aW9uIG9mIHRoZSBwb2xsc2V0IHRoYXQncyB1c2VkIHdpdGhpbgogICAgIGFwcl9maWxlX3Qgb24gcGxhdGZvcm1zIHdoZXJlIGFwcl93YWl0X2Zvcl9pb19vcl90aW1lb3V0KCkgZG9lc24ndAogICAgIHVzZSBwb2xsKDIpLiAgKFRoaXMgZml4ZXMgYSBwZXJmb3JtYW5jZSBwcm9ibGVtIG9ic2VydmVkIGluIGh0dHBkLTIueAogICAgIG9uIE9TIFggZHVlIHRvIHRoZSB1c2Ugb2YgcG9sbCBub3cgYmVpbmcgZGlzYWJsZWQgYnkgZGVmYXVsdCBvbiB0aGF0CiAgICAgcGxhdGZvcm0uKSAgW0JyaWFuIFBhbmVdCgogICopIFN1cHBvcnQgQVBSX1NPX1NOREJVRiBhbmQgQVBSX1NPX1JDVkJVRiBvbiBXaW5kb3dzLiAgUFIgMzIxNzcuCiAgICAgW1NpbSA8c2dvYmJpIGRhdGFtYW5hZ2VtZW50Lml0PiwgSmVmZiBUcmF3aWNrXQoKICAqKSBNYWtlIGluc3RhbGwgcGFzc2VkIGEgc2hlbGwgZXhwYW5kZWQgbGlzdCBvZiBoZWFkZXIgZmlsZXMgdG8gdGhlCiAgICAgYnVpbGQvaW5zdGFsbC5zaCBzY3JpcHQsIHdoaWNoIGNhbiBvbmx5IGluc3RhbGwgb25lIGZpbGUgYXQgYSB0aW1lLgogICAgIENoYW5nZWQgdG8gaW5zdGFsbCBvbmUgaGVhZGVyIGZpbGUgYXQgYSB0aW1lLiBbSnVzdGluIEVyZW5rcmFudHosCiAgICAgR3JhaGFtIExlZ2dldHRdCgogICopIEFkZCBhIGJ1aWxkIHNjcmlwdCB0byBjcmVhdGUgYSBzb2xhcmlzIHBhY2thZ2UuIFtHcmFoYW0gTGVnZ2V0dF0KCiAgKikgW05ldFdhcmVdIEZpeGVkIHNvbWUgdHlwZSBtaXNtYXRjaGVzIGluIHRocmVhZHByb2MvbmV0d2FyZS9wcm9jLmMgYW5kCiAgICAgbG9ja3MvbmV0d2FyZS90aHJlYWRfbXV0ZXguYyB0aGF0IHByZXZlbnRlZCBBUFIgZnJvbSBidWlsZGluZyB3aXRoIHRoZQogICAgIGxhdGVzdCByZWxlYXNlIG9mIHRoZSBMaWJDIFNESy4gW0JyYWQgTmljaG9sZXNdCiAgICAgCiAgKikgRml4IGlzc3VlIHdpdGggcG9sbCgpIGZvbGxvd2VkIGJ5IG5ldCBJL08geWllbGRpbmcgRUFHQUlOIG9uCiAgICAgTWFjIE9TIDEwLjQgKERhcndpbiA4KS4gW1dpbGZyZWRvIFNhbmNoZXpdCgpDaGFuZ2VzIGZvciBBUFIgMS4wLjEKCiAgKikgRml4IEhVUCByZXR1cm4gY29kZXMgaW4gcG9sbHNldCB3aGVuIHVzaW5nIEtRdWV1ZS4KICAgICBbUGF1bCBRdWVybmFdCgogICopIFByZXZlbnQgdW5ib3VuZGVkIG1lbW9yeSB1c2UgZHVyaW5nIHJlcGVhdGVkIG9wZXJhdGlvbnMgb24gYSBoYXNoIHRhYmxlLgogICAgIFtKdWxpYW4gRm9hZCA8anVsaWFuZm9hZCBidG9wZW53b3JsZC5jb20+CgogICopIE1vdmVkIHJlcG9zaXRvcnkgdG8gU1ZOCiAgICAgW0hhY2thdGhvbl0KCiAgKikgamxpYnRvb2w6IElnbm9yZSAnLWV4cG9ydC1zeW1ib2xzLXJlZ2V4cCcgb3B0aW9uLgogICAgIFtKdXN0aW4gRXJlbmtyYW50el0KCiAgKikgZml4IGFwcl9maWxlX2R1cCBhbmQgYXByX2ZpbGVfZHVwMiB3aW4zMiBpbXBsZW1lbnRhdGlvbnMKICAgICB0byBjcmVhdGUgYSBtdXRleCBbU3RldmUgSGF5IDxzdGV2ZS5oYXkgdWsucmFkYW4uY29tPl0KCiAgKikgTWFrZXMgdGhlIHRocmVhZHMgdG8gYmVoYXZlIGxpa2Ugb24gcG9zaXguIElmIHRoZSB0aHJlYWQgaXMgY3JlYXRlZAogICAgIHdpdGhvdXQgQVBSX0RFVEFDSCBleHBlY3QgdGhhdCB0aGUgdGhyZWFkX2pvaW4gd2lsbCBiZSBjYWxsZWQsIHNvIGRvbid0CiAgICAgY2xvc2UgdGhlIGhhbmRsZSBpbiBhZHZhbmNlLCBpZiB0aGUgdGhyZWFkIGhhcyBhbHJlYWR5IGZpbmlzaGVkLgogICAgIFtNbGFkZW4gVHVya10KCiAgKikgVGhlIGFwci90ZXN0L01ha2VmaWxlLndpbiBpcyBtaXNzaW5nIGEgdGFyZ2V0IHRvIGJ1aWxkIGEKICAgICByZWFkY2hpbGQuZXhlIHRoYXQgdGVzdCBpcyBkZXBlbmRpbmcgb24gYnV0IGlzIG5ldmVyIGJ1aWx0LgogICAgIFtNbGFkZW4gVHVya10KCiAgKikgSW1wcm92ZSBhcHJfZmlsZV9nZXRzKCkgcGVyZm9ybWFuY2Ugb24gYnVmZmVyZWQgZmlsZXMuIFtKdXN0aW4gRXJlbmtyYW50el0KCiAgKikgV2luMzI6IEZpeCBidWcgaW4gYXByX3NvY2tldF9zZW5kZmlsZSB0aGF0IGludGVyZmVycmVkIHdpdGgKICAgICBXaW4zMiBMU1BzLiBQUiAyMzk4MiBbSmFuIEJpbGVrLCBCaWxsIFN0b2RkYXJkXQoKICAqKSBXaW4zMjogRml4IGJ1ZyB0cmFja2luZyB0aGUgZmlsZSBwb2ludGVyIG9uIGEgZmlsZSBvcGVuZWQgZm9yIAogICAgIG92ZXJsYXBwZWQvQVBSX1hUSFJFQUQgaW8uIFtCaWxsIFN0b2RkYXJkXQoKQ2hhbmdlcyB3aXRoIEFQUiAxLjAKCiAgKikgT25seSBpbnN0YWxsIGFwci0kTUFKT1ItY29uZmlnIGFuZCBhZGQgYXBwcm9wcmlhdGUgZGV0ZWN0aW9uIGNvZGUgdG8KICAgICBmaW5kX2Fwci5tNCAoQVBSX0ZJTkRfQVBSKS4gIFtNYXggQm93c2hlciA8bWF4YiB1a2YubmV0Pl0KCiAgKikgUmVtb3ZlIEFQUl9TVEFUVVNfSVNfU1VDQ0VTUygpIG1hY3JvLiAgW0p1c3RpbiBFcmVua3JhbnR6XQoKICAqKSBhcHJfcHJvY19jcmVhdGUoKSBvbiBVbml4OiBSZW1vdmUgdW5uZWNlc3NhcnkgY2hlY2sgZm9yIHJlYWQgCiAgICAgYWNjZXNzIHRvIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBvZiB0aGUgY2hpbGQgcHJvY2Vzcy4KICAgICBQUiAzMDEzNy4gIFtKZXJlbXkgQ2hhZHdpY2sgPGFwYWNoZSBqZGMucGFyb2RpdXMuY29tPl0KCiAgKikgQWRkIGpsaWJ0b29sIC0gZW5hYmxlZCB3aXRoICctLWVuYWJsZS1leHBlcmltZW50YWwtbGlidG9vbCcgb3B0aW9uLgogICAgIFtKdXN0aW4gRXJlbmtyYW50el0KCiAgKikgQWRkIHN1cHBvcnQgZm9yIEtRdWV1ZSBhbmQgc3lzX2Vwb2xsIHRvIGFwcl9wb2xsc2V0LiAgW1BhdWwgUXVlcm5hXQoKICAqKSBTdXBwb3J0IHRocmVhZGluZyBvbiBGcmVlQlNEIDUueCB3aGVyZSBrZXJuLm9zcmVsZGF0ZSA+PSA1MDIxMDIuCiAgICAgW0NyYWlnIFJvZHJpZ3VlcyA8cm9kcmlnYyBjcm9kcmlndWVzLm9yZz5dCgogICopIEFkZCBhbiBSUE0gc3BlYyBmaWxlIGRlcml2ZWQgZnJvbSBGZWRvcmEgQ29yZS4KICAgICBbR3JhaGFtIExlZ2dldHQsIEpvZSBPcnRvbl0KCiAgKikgRml4IGFwcl90aHJlYWRhdHRyX2RldGFjaF9zZXQoKSBvbiBNYWMgT1MgWC4gIFBSIDI4NDcyLgogICAgIFtJTk9VRSBTZWlpY2hpcm8gPGlub3VlIGFyaWVsLW5ldHdvcmtzLmNvbT5dCgogICopIENoYW5nZSBkZWZhdWx0IGludGVyLXByb2Nlc3MgbG9ja2luZyBtZWNoYW5pc21zOiBQT1NJWCBzZW1hcGhvcmVzCiAgICAgYW5kIHB0aHJlYWQgY3Jvc3MtcHJvY2VzcyBtdXRleGVzIGFyZSBub3QgdXNlZCBieSBkZWZhdWx0OyBvbiAKICAgICBTb2xhcmlzLCBmY250bCBsb2NrcyBhcmUgdXNlZCBieSBkZWZhdWx0LiAgW0pvZSBPcnRvbl0KCiAgKikgQWRkIGFwcl90aHJlYWRhdHRyX2d1YXJkc2l6ZV9zZXQoKSBmb3Igb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBzdGFjawogICAgIGd1YXJkIGFyZWEgc2l6ZSBmb3IgY3JlYXRlZCBjcmVhdGVkIGJ5IGFwcl90aHJlYWRfY3JlYXRlKCkuCiAgICAgW0pvZSBPcnRvbl0KCiAgKikgQWRkIGFwcl9zaG1fcmVtb3ZlKCkgZnVuY3Rpb24gZm9yIHJlbW92aW5nIGEgbmFtZWQgc2hhcmVkCiAgICAgbWVtb3J5IHNlZ21lbnQuICBbQW1pdCBBdGhhdmFsZSA8YW1pdF9hdGhhdmFsZSBwZXJzaXN0ZW50LmNvLmluPl0KCiAgKikgQWRkIGFwcl9zdHJ0b2ZmKCkgZnVuY3Rpb24gZm9yIGNvbnZlcnRpbmcgbnVtZXJpYyBzdHJpbmdzIGludG8gCiAgICAgYXByX29mZl90IHZhbHVlcy4gIFtBbmRy6SBNYWxvIDxuZCBwZXJsaWcuZGU+LCBKb2UgT3J0b25dCgogICopIEZpeCBzdGFjayBvdmVyZmxvdyB3aXRoIElQdjYgYXByX3NvY2tldF9hY2NlcHQoKSBvbiBXaW4zMi4KICAgICBQUiAyODQ3MS4gIFtpbm91ZSA8aW5vdWUgYXJpZWwtbmV0d29ya3MuY29tPl0KCiAgKikgQWRkIG5ldyBmdW5jdGlvbnMgYXByX3NpZ25hbF9ibG9jaywgYXByX3NpZ25hbF91bmJsb2NrIHRvIGJsb2NrL3VuYmxvY2sKICAgICB0aGUgZGVsaXZlcnkgb2YgYSBwYXJ0aWN1bGFyIHNpZ25hbC4gIFtNYWRodXN1ZGFuIE1hdGhpaGFsbGldCgogICopIEFkZCBzdXBwb3J0IGZvciBkZXZlbG9wZXJzIHRvIHVzZSB0aGVpciBvd24gaGFzaGluZyBmdW5jdGlvbiB3aXRoCiAgICAgYXByX2hhc2hfbWFrZV9jdXN0b20uICBbQW1pIEdhbmd1bGkgPGhzZV9hbWlAeWFob28uY28udWs+XQoKICAqKSBTdXBwb3J0ICJsYXJnZSBmaWxlcyIgYnkgZGVmYXVsdCBvbiAzMi1iaXQgVW5peCBwbGF0Zm9ybXMgd2hpY2gKICAgICBpbXBsZW1lbnQgdGhlIExGUyBzdGFuZGFyZC4gIFtKb2UgT3J0b25dCgogICopIEFkZCBhcHJfdGhyZWFkYXR0cl9zdGFja3NpemVfc2V0KCkgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQKICAgICBzdGFjayBzaXplIGZvciB0aHJlYWRzIGNyZWF0ZWQgYnkgYXByX3RocmVhZF9jcmVhdGUoKS4KICAgICBbSmVmZiBUcmF3aWNrXQoKICAqKSBUaGUgd2hvbGUgY29kZWJhc2Ugd2FzIHJlbGljZW5zZWQgYW5kIGlzIG5vdyBhdmFpbGFibGUgdW5kZXIKICAgICB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMpLgogICAgIFtBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbl0KCiAgKikgU3dpdGNoIHRvIGEgc2luZ2xlLCB0b3AtbGV2ZWwgbWFrZS4gW0dyZWcgU3RlaW5dCgogICopIG5ldyBlcnJvciBzdGF0dXMgQVBSX1NUQVRVU19JU19FTk9URU5PVUdIRU5UUk9QWSwgRG94eWdlbiBmaXhlcwogICAgIFtTYW5kZXIgVGVtbWUgPHNhbmRlciBhdCB0ZW1tZSBkb3QgbmV0XQoKICAqKSBBZGQgYXByX3NvY2tldF90eXBlX2dldCgpIGZvciByZXRyaWV2aW5nIHRoZSB0eXBlIChlLmcuLCBzdHJlYW0pCiAgICAgb2YgdGhlIHNvY2tldC4gIFtQaGlsaXBwZSBNLiBDaGlhc3Nvbl0KCiAgKikgUmVtb3ZlZCBkZXByZWNhdGVkIGludGVyZmFjZSBhcHJfcHJvY19vdGhlcl9jaGlsZF9jaGVjaygpIAogICAgIHRoYXQgYmVoYXZlZCBkaWZmZXJlbnRseSBiZXR3ZWVuIHdpbjMyIGFuZCB1bml4LgogICAgIFRoZSB1bml4IGJlaGF2b3IgaXMgbm93IGFjY29tcGxpc2hlZCB3aXRoCiAgICAgICAgIGFwcl9wcm9jX290aGVyX2NoaWxkX3JlZnJlc2hfYWxsKEFQUl9PQ19SRUFTT05fUkVTVEFSVCkKICAgICBUaGUgd2luMzIgYmVoYXZvciBpcyBub3cgYWNjb21wbGlzaGVkIHdpdGgKICAgICAgICAgYXByX3Byb2Nfb3RoZXJfY2hpbGRfcmVmcmVzaF9hbGwoQVBSX09DX1JFQVNPTl9SVU5OSU5HKQoKICAqKSBSZW1vdmVkIGFwcl9zb2NrZXRfb3B0X3tnZXR8c2V0fSguLi4sIEFQUl9TT19USU1FT1VUKSB3aGljaAogICAgIHdhcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGFwcl9zb2NrZXRfdGltZW91dF97Z2V0fHNldH0oKS4KCiAgKikgQ2hhbmdlIGkzODYgRnJlZUJTRCB0byB1c2UgdGhlIGFzbSByb3V0aW5lcyBpbiBhcHJfYXRvbWljLmgKICAgICB0byBvdmVyY29tZSBpc3N1ZXMgd2l0aCB0aGUgRnJlZUJTRCBhdG9taWMgZnVuY3Rpb25zIHJldHVybgogICAgIHR5cGUgb24gaTM4Ni4gW0RhdmlkIFJlaWRdCgogICopIEFkZGVkIG5ldyB2ZXJzaW9ucyBvZiB0aGUgYXByX2F0b21pYyBmdW5jdGlvbnMgZm9yCiAgICAgdXNlIHdpdGggMzItYml0IGludHMgIFtCcmlhbiBQYW5lXQoKICAqKSBUaGUgZm9sbG93aW5nIGRlcHJlY2F0ZWQgaW50ZXJmYWNlcyBoYXZlIGJlZW4gcmVtb3ZlZDoKCiAgICAgYXByX2FjY2VwdCAgICAgICAgICAgICAgICAgICAtPiBhcHJfc29ja2V0X2FjY2VwdAogICAgIGFwcl9hbGxvY2F0b3JfZ2V0X211dGV4ICAgICAgLT4gYXByX2FsbG9jYXRvcl9tdXRleF9nZXQKICAgICBhcHJfYWxsb2NhdG9yX2dldF9vd25lciAgICAgIC0+IGFwcl9hbGxvY2F0b3Jfb3duZXJfZ2V0CiAgICAgYXByX2FsbG9jYXRvcl9zZXRfbWF4X2ZyZWUgICAtPiBhcHJfYWxsb2NhdG9yX21heF9mcmVlX3NldAogICAgIGFwcl9hbGxvY2F0b3Jfc2V0X211dGV4ICAgICAgLT4gYXByX2FsbG9jYXRvcl9tdXRleF9zZXQKICAgICBhcHJfYWxsb2NhdG9yX3NldF9vd25lciAgICAgIC0+IGFwcl9hbGxvY2F0b3Jfb3duZXJfc2V0CiAgICAgYXByX2F0b21pY19hZGQgICAgICAgICAgICAgICAtPiBhcHJfYXRvbWljX2FkZDMyCiAgICAgYXByX2F0b21pY19jYXMgICAgICAgICAgICAgICAtPiBhcHJfYXRvbWljX2NhczMyCiAgICAgYXByX2F0b21pY19kZWMgICAgICAgICAgICAgICAtPiBhcHJfYXRvbWljX2RlYzMyCiAgICAgYXByX2F0b21pY19pbmMgICAgICAgICAgICAgICAtPiBhcHJfYXRvbWljX2luYzMyCiAgICAgYXByX2F0b21pY19yZWFkICAgICAgICAgICAgICAtPiBhcHJfYXRvbWljX3JlYWQzMgogICAgIGFwcl9hdG9taWNfc2V0ICAgICAgICAgICAgICAgLT4gYXByX2F0b21pY19zZXQzMgogICAgIGFwcl9iaW5kICAgICAgICAgICAgICAgICAgICAgLT4gYXByX3NvY2tldF9iaW5kCiAgICAgYXByX2NvbXBhcmVfZ3JvdXBzICAgICAgICAgICAtPiBhcHJfZ2lkX2NvbXBhcmUKICAgICBhcHJfY29tcGFyZV91c2VycyAgICAgICAgICAgIC0+IGFwcl91aWRfY29tcGFyZQogICAgIGFwcl9jb25uZWN0ICAgICAgICAgICAgICAgICAgLT4gYXByX3NvY2tldF9jb25uZWN0CiAgICAgYXByX2N1cnJlbnRfdXNlcmlkICAgICAgICAgICAtPiBhcHJfdWlkX2N1cnJlbnQKICAgICBhcHJfZXhwbG9kZV9sb2NhbHRpbWUgICAgICAgIC0+IGFwcl90aW1lX2V4cF9sdAogICAgIGFwcl9leHBsb2RlX3RpbWUgICAgICAgICAgICAgLT4gYXByX3RpbWVfZXhwX3R6CiAgICAgYXByX2ZpbGVuYW1lX29mX3BhdGhuYW1lICAgICAtPiBhcHJfZmlsZXBhdGhfbmFtZV9nZXQKICAgICBhcHJfZmlsZV9zZXRfaW5oZXJpdCAgICAgICAgIC0+IGFwcl9maWxlX2luaGVyaXRfc2V0CiAgICAgYXByX2ZpbGVfdW5zZXRfaW5oZXJpdCAgICAgICAtPiBhcHJfZmlsZV9pbmhlcml0X3Vuc2V0CiAgICAgYXByX2dldHNvY2tldG9wdCAgICAgICAgICAgICAtPiBhcHJfc29ja2V0X29wdF9nZXQKICAgICBhcHJfZ2V0X2dyb3VwaWQgICAgICAgICAgICAgIC0+IGFwcl9naWRfZ2V0CiAgICAgYXByX2dldF9ncm91cG5hbWUgICAgICAgICAgICAtPiBhcHJfZ2lkX25hbWVfZ2V0CiAgICAgYXByX2dldF9ob21lX2RpcmVjdG9yeSAgICAgICAtPiBhcHJfdWlkX2hvbWVwYXRoX2dldAogICAgIGFwcl9nZXRfdXNlcmlkICAgICAgICAgICAgICAgLT4gYXByX3VpZF9nZXQKICAgICBhcHJfZ2V0X3VzZXJuYW1lICAgICAgICAgICAgIC0+IGFwcl91aWRfbmFtZV9nZXQKICAgICBhcHJfZ3JvdXBfbmFtZV9nZXQgICAgICAgICAgIC0+IGFwcl9naWRfbmFtZV9nZXQKICAgICBhcHJfaW1wbG9kZV9nbXQgICAgICAgICAgICAgIC0+IGFwcl90aW1lX2V4cF9nbXRfZ2V0CiAgICAgYXByX2lzX2ZubWF0Y2ggICAgICAgICAgICAgICAtPiBhcHJfZm5tYXRjaF90ZXN0CiAgICAgYXByX2xpc3RlbiAgICAgICAgICAgICAgICAgICAtPiBhcHJfc29ja2V0X2xpc3RlbgogICAgIGFwcl9sc3RhdCAgICAgICAgICAgICAgICAgICAgLT4gYXByX3N0YXQKICAgICBhcHJfcG9vbF9nZXRfYWJvcnQgICAgICAgICAgIC0+IGFwcl9wb29sX2Fib3J0X2dldAogICAgIGFwcl9wb29sX2dldF9wYXJlbnQgICAgICAgICAgLT4gYXByX3Bvb2xfcGFyZW50X2dldAogICAgIGFwcl9wb29sX3NldF9hYm9ydCAgICAgICAgICAgLT4gYXByX3Bvb2xfYWJvcnRfc2V0CiAgICAgYXByX3Bvb2xfc3ViX21ha2UgICAgICAgICAgICAtPiBhcHJfcG9vbF9jcmVhdGVfZXgKICAgICBhcHJfcHJvY19vdGhlcl9jaGlsZF9yZWFkICAgIC0+IGFwcl9wcm9jX290aGVyX2NoaWxkX2FsZXJ0CiAgICAgYXByX3JlY3YgICAgICAgICAgICAgICAgICAgICAtPiBhcHJfc29ja2V0X3JlY3YKICAgICBhcHJfcmVjdmZyb20gICAgICAgICAgICAgICAgIC0+IGFwcl9zb2NrZXRfcmVjdmZyb20KICAgICBhcHJfc2VuZCAgICAgICAgICAgICAgICAgICAgIC0+IGFwcl9zb2NrZXRfc2VuZAogICAgIGFwcl9zZW5kZmlsZSAgICAgICAgICAgICAgICAgLT4gYXByX3NvY2tldF9zZW5kZmlsZQogICAgIGFwcl9zZW5kdG8gICAgICAgICAgICAgICAgICAgLT4gYXByX3NvY2tldF9zZW5kdG8KICAgICBhcHJfc2VuZHYgICAgICAgICAgICAgICAgICAgIC0+IGFwcl9zb2NrZXRfc2VuZHYKICAgICBhcHJfc2V0c29ja2V0b3B0ICAgICAgICAgICAgIC0+IGFwcl9zb2NrZXRfb3B0X3NldAogICAgIGFwcl9zaHV0ZG93biAgICAgICAgICAgICAgICAgLT4gYXByX3NvY2tldF9zaHV0ZG93bgogICAgIGFwcl9zaWduYWxfZ2V0X2Rlc2NyaXB0aW9uICAgLT4gYXByX3NpZ25hbF9kZXNjcmlwdGlvbl9nZXQKICAgICBhcHJfc29ja2FkZHJfaXBfc2V0ICAgICAgICAgIC0+IGFwcl9zb2NrYWRkcl9pbmZvX2dldAogICAgIGFwcl9zb2NrYWRkcl9wb3J0X2dldCAgICAgICAgLT4gKGFjY2VzcyBkaXJlY3RseSkKICAgICBhcHJfc29ja2FkZHJfcG9ydF9zZXQgICAgICAgIC0+IGFwcl9zb2NrYWRkcl9pbmZvX2dldAogICAgIGFwcl9zb2NrZXRfY3JlYXRlX2V4ICAgICAgICAgLT4gYXByX3NvY2tldF9jcmVhdGUKICAgICBhcHJfc29ja2V0X3NldF9pbmhlcml0ICAgICAgIC0+IGFwcl9zb2NrZXRfaW5oZXJpdF9zZXQKICAgICBhcHJfc29ja2V0X3Vuc2V0X2luaGVyaXQgICAgIC0+IGFwcl9zb2NrZXRfaW5oZXJpdF91bnNldAogICAgIEZOTV9OT01BVENIICAgICAgICAgICAgICAgICAgLT4gQVBSX0ZOTV9OT01BVENICiAgICAgRk5NX05PRVNDQVBFICAgICAgICAgICAgICAgICAtPiBBUFJfRk5NX05PRVNDQVBFCiAgICAgRk5NX1BBVEhOQU1FICAgICAgICAgICAgICAgICAtPiBBUFJfRk5NX1BBVEhOQU1FCiAgICAgRk5NX1BFUklPRCAgICAgICAgICAgICAgICAgICAtPiBBUFJfRk5NX1BFUklPRAogICAgIEZOTV9DQVNFX0JMSU5EICAgICAgICAgICAgICAgLT4gQVBSX0ZOTV9DQVNFX0JMSU5ECiAgICAgTUFYX1NFQ09ORFNfVE9fTElOR0VSICAgICAgICAtPiBBUFJfTUFYX1NFQ09ORFNfVE9fTElOR0VSCgogICAgIFRoZSBmb2xsb3dpbmcgaW50ZXJmYWNlcyBoYXZlIGZ1bmN0aW9uIGFyZ3VtZW50IGNoYW5nZXM6CgogICAgIGFwcl9tbWFwX2R1cAogICAgIGFwcl9zb2NrZXRfY3JlYXRlCgogICAgIFRoZSBmb2xsb3dpbmcgaGVhZGVyIGZpbGVzIGhhdmUgYmVlbiByZW1vdmVkOgoKICAgICBhcHJfY29tcGF0LmgKCgpDaGFuZ2VzIGZvciBBUFIgMC45LnggYW5kIGxhdGVyL2VhcmxpZXI6CgogICopIGh0dHA6Ly9zdm4uYXBhY2hlLm9yZy92aWV3dmMvYXByL2Fwci9icmFuY2hlcy8wLjkueC9DSEFOR0VTP3ZpZXc9bWFya3VwCg==