Re: [ITK-users] Reading DICOM series and visualize the volume with VTK
Jon Haitz Legarreta GorroƱo <[email protected]> Fri, 15 Mar 2019 13:52:11 -0400
| Newsgroups | gmane.comp.lib.vtk.user |
|---|---|
| Message-ID | <CAPUXxNGMMH9mxoR1ETAe1i62XRKCw+vjHTmwRLJccuctoUtdtg@mail.gmail.com> |
SW4gZmFjdCwgVlRLIGFsc28gdHJhbnNpdGlvbmVkIHRvIGRpc2NvdXJzZSBhIGZldyB3ZWVrcyBh Z286Cmh0dHBzOi8vZGlzY291cnNlLnZ0ay5vcmcKClNvIGZvciBhIGJldHRlciBleHBlcmllbmNl IGFuZCB0byBpbmNyZWFzZSB5b3VyIGNoYW5jZXMgb2YgZ2V0dGluZyBhbgphbnN3ZXIsIHlvdSdk IGJldHRlciBwb3N0IHlvdXIgcXVlc3Rpb24gYXQgZGlzY291cnNlIHJhdGhlciB0aGFuIHRvCnRo ZSBtYWlsaW5nIGxpc3RzLgoKSFRILApKT04gSEFJVFoKCgpPbiBGcmksIE1hciAxNSwgMjAxOSBh dCAxMjo1OCBQTSBExb5lbmFuIFp1a2nEhyA8ZHplbmFuekBnbWFpbC5jb20+IHdyb3RlOgo+Cj4g SGkgTWFyY28sCj4KPiB0aGF0IGlzIG1vcmUgb2YgYSBWVEsgcXVlc3Rpb24gdGhhbiBJVEsgb25l LCBiZXN0IGRpcmVjdGVkIGF0IHZ0a3VzZXJzQHZ0ay5vcmcuIEFsc28sIElUSyBoYXMgbWlncmF0 ZWQgdG8gYSBuZXcgZm9ydW0uIFBsZWFzZSBwb3N0IGZ1cnRoZXIgSVRLLXJlbGF0ZWQgcXVlc3Rp b25zIHRoZXJlIGluc3RlYWQgb2YgdGhpcyBtYWlsaW5nIGxpc3QuCj4KPiBSZWdhcmRzLAo+IETF vmVuYW4KPgo+IE9uIEZyaSwgTWFyIDE1LCAyMDE5IGF0IDEyOjU0IFBNIE1hcmNvIEZlc3R1Z2F0 byA8bWFyY28uZmVzdHVnYXRvQG91dGxvb2suaXQ+IHdyb3RlOgo+Pgo+PiBIaSBEemVuYW4gYW5k IHRoYW5rIHUgZm9yIHlvdXIgYW5zd2VyIEkndmUgdHJpZWQgdG8gZG8gYXMgdSBzdWdnZXN0ZWQs IGJ1dCBpIHJlY2VpdmUgYW4gZXJyb3IgdGVsbGluZyBtZSB0aGF0IG15IG1hcHBlciBkb2VzbnQg YWNjZXB0ICcnc2NhbGFyIGNlbGxzJycuLi5tYXliZSB0aGlzIGNvbm5lY3RvciBkb2VzbnQgd29y ayB3aXRoIG15IG1hcHBlcj8gaSd2ZSB0cmllZCB0byBzaW1wbHkgYWRkIHRoZSAnY29ubmVjdG9y JyB0byBteSBwaXBlbGluZToKPj4KPj4gcmVhZGVyIC0+IGNvbm5lY3RvciAtPiBtYXBwZXIgLT4g dm9sdW1lIC0+IHJlbmRlcmVyIC0+IHdpbmRvdwo+Pgo+PiBIZXJlJ3MgbXkgY29kZSBpZiB1IHdh bnQgdG8gY2hlY2sgaXQgKGl0IHN0aWxsIG5lZWRzIGEgYml0IG9mIGNsZWFuaW5nKS4uLmkgd291 bGQgYXBwcmVjaWF0ZSBpdCBhIGxvdCEhIEkgbmVlZCB0aGlzIHRvIHdvcmsgZm9yIG15IHByb2pl Y3QgOicoCj4+Cj4+ICAvLyBWVEsgaW5jbHVkZXMKPj4gI2luY2x1ZGUgInZ0a0RJQ09NSW1hZ2VS ZWFkZXIuaCIKPj4gI2luY2x1ZGUgInZ0a0ltYWdlRGF0YS5oIgo+PiAjaW5jbHVkZSAidnRrUmVu ZGVyZXIuaCIKPj4gI2luY2x1ZGUgInZ0a1JlbmRlcldpbmRvdy5oIgo+PiAjaW5jbHVkZSAidnRr UmVuZGVyV2luZG93SW50ZXJhY3Rvci5oIgo+PiAjaW5jbHVkZSAidnRrVm9sdW1lLmgiCj4+ICNp bmNsdWRlIDx2dGtJbnRlcmFjdG9yU3R5bGVUcmFja2JhbGxDYW1lcmEuaD4KPj4gI2luY2x1ZGUg PHZ0a1ZvbHVtZVByb3BlcnR5Lmg+Cj4+ICNpbmNsdWRlIDx2dGtTbWFydFBvaW50ZXIuaD4KPj4g I2luY2x1ZGUgPHZ0a1BpZWNld2lzZUZ1bmN0aW9uLmg+Cj4+ICNpbmNsdWRlIDx2dGtWb2x1bWVS YXlDYXN0Q29tcG9zaXRlRnVuY3Rpb24uaD4KPj4gI2luY2x1ZGUgPHZ0a0ZpeGVkUG9pbnRWb2x1 bWVSYXlDYXN0TWFwcGVyLmg+Cj4+ICNpbmNsdWRlIDxpdGtJbWFnZS5oPgo+PiAjaW5jbHVkZSA8 aXRrSW1hZ2VGaWxlUmVhZGVyLmg+Cj4+ICNpbmNsdWRlIDxpdGtJbWFnZVRvVlRLSW1hZ2VGaWx0 ZXIuaD4KPj4gI2luY2x1ZGUgInZ0a1ZlcnNpb24uaCIKPj4gI2luY2x1ZGUgInZ0a0ltYWdlVmll d2VyLmgiCj4+ICNpbmNsdWRlICJ2dGtJbWFnZU1hcHBlcjNELmgiCj4+ICNpbmNsdWRlICJ2dGtS ZW5kZXJXaW5kb3dJbnRlcmFjdG9yLmgiCj4+ICNpbmNsdWRlICJ2dGtTbWFydFBvaW50ZXIuaCIK Pj4gI2luY2x1ZGUgInZ0a0ltYWdlQWN0b3IuaCIKPj4gI2luY2x1ZGUgInZ0a0ludGVyYWN0b3JT dHlsZUltYWdlLmgiCj4+ICNpbmNsdWRlICJ2dGtSZW5kZXJlci5oIgo+PiAjaW5jbHVkZSAiaXRr SW1hZ2UuaCIKPj4gI2luY2x1ZGUgIml0a0dEQ01JbWFnZUlPLmgiCj4+ICNpbmNsdWRlICJpdGtH RENNU2VyaWVzRmlsZU5hbWVzLmgiCj4+ICNpbmNsdWRlICJpdGtJbWFnZVNlcmllc1JlYWRlci5o Igo+PiAjaW5jbHVkZSAiaXRrSW1hZ2VGaWxlV3JpdGVyLmgiCj4+Cj4+ICBpbnQgbWFpbihpbnQg YXJnYywgY2hhciAqYXJndltdKQo+PiB7Cj4+ICAgICAvLyBWZXJpZnkgdGhlIG51bWJlciBvZiBw YXJhbWV0ZXJzIGluIHRoZSBjb21tYW5kIGxpbmUKPj4gICAgIGlmKCBhcmdjIDwgMikKPj4gICAg IHsKPj4gICAgIHN0ZDo6Y2VyciA8PCAiVXNhZ2U6ICIgPDwgc3RkOjplbmRsOwo+PiAgICAgc3Rk OjpjZXJyIDw8IGFyZ3ZbMF0gPDwgIiBESUNPTWltYWdlc0RpcmVjdG9yeSAiIDw8IHN0ZDo6ZW5k bDsKPj4gICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Cj4+ICAgICB9Cj4+ICAvLyBTb2Z0d2FyZSBH dWlkZSA6IEJlZ2luQ29kZVNuaXBwZXQKPj4gICB0eXBlZGVmIHNpZ25lZCBzaG9ydCAgICBQaXhl bFR5cGU7Cj4+ICAgY29uc3QgdW5zaWduZWQgaW50ICAgICAgRGltZW5zaW9uID0gMzsKPj4gICB0 eXBlZGVmIGl0azo6SW1hZ2U8IFBpeGVsVHlwZSwgRGltZW5zaW9uID4gSW1hZ2VUeXBlOwo+PiAg IHR5cGVkZWYgaXRrOjpJbWFnZVRvVlRLSW1hZ2VGaWx0ZXI8SW1hZ2VUeXBlPiBDb25uZWN0b3JU eXBlOwo+Pgo+PiAgIENvbm5lY3RvclR5cGU6OlBvaW50ZXIgY29ubmVjdG9yID0gQ29ubmVjdG9y VHlwZTo6TmV3KCk7Cj4+Cj4+IC8vIFdlIHVzZSB0aGUgaW1hZ2UgdHlwZSBmb3IgaW5zdGFudGlh dGluZyB0aGUgdHlwZSBvZiB0aGUgc2VyaWVzIHJlYWRlciBhbmQKPj4gLy8gZm9yIGNvbnN0cnVj dGluZyBvbmUgb2JqZWN0IG9mIGl0cyB0eXBlLgo+Pgo+PiAgIHR5cGVkZWYgaXRrOjpJbWFnZVNl cmllc1JlYWRlcjwgSW1hZ2VUeXBlID4gICAgICAgIFJlYWRlclR5cGU7Cj4+ICAgUmVhZGVyVHlw ZTo6UG9pbnRlciByZWFkZXIgPSBSZWFkZXJUeXBlOjpOZXcoKTsKPj4KPj4gLy8gQSBHRENNSW1h Z2VJTyBvYmplY3QgaXMgY3JlYXRlZCBhbmQgY29ubmVjdGVkIHRvIHRoZSByZWFkZXIuIFRoaXMg b2JqZWN0IGlzCj4+IC8vIHRoZSBvbmUgdGhhdCBpcyBhd2FyZSBvZiB0aGUgaW50ZXJuYWwgaW50 cmljYWNpZXMgb2YgdGhlIERJQ09NIGZvcm1hdC4KPj4gLy8KPj4KPj4gICB0eXBlZGVmIGl0azo6 R0RDTUltYWdlSU8gICAgICAgSW1hZ2VJT1R5cGU7Cj4+ICAgSW1hZ2VJT1R5cGU6OlBvaW50ZXIg ZGljb21JTyA9IEltYWdlSU9UeXBlOjpOZXcoKTsKPj4KPj4gICByZWFkZXItPlNldEltYWdlSU8o IGRpY29tSU8gKTsKPj4KPj4gICB1c2luZyBOYW1lc0dlbmVyYXRvclR5cGUgPSBpdGs6OkdEQ01T ZXJpZXNGaWxlTmFtZXM7Cj4+ICAgTmFtZXNHZW5lcmF0b3JUeXBlOjpQb2ludGVyIG5hbWVHZW5l cmF0b3IgPSBOYW1lc0dlbmVyYXRvclR5cGU6Ok5ldygpOwo+Pgo+PiAgIG5hbWVHZW5lcmF0b3It PlNldFVzZVNlcmllc0RldGFpbHMoIHRydWUgKTsKPj4gICBuYW1lR2VuZXJhdG9yLT5TZXREaXJl Y3RvcnkoIGFyZ3ZbMV0gKTsKPj4KPj4gICB0cnkKPj4gICAgIHsKPj4gICAgIHN0ZDo6Y291dCA8 PCBzdGQ6OmVuZGwgPDwgIlRoZSBkaXJlY3Rvcnk6ICIgPDwgc3RkOjplbmRsOwo+PiAgICAgc3Rk Ojpjb3V0IDw8IHN0ZDo6ZW5kbCA8PCBhcmd2WzFdIDw8IHN0ZDo6ZW5kbCA8PCBzdGQ6OmVuZGw7 Cj4+ICAgICBzdGQ6OmNvdXQgPDwgIkNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgRElDT00gU2VyaWVz OiAiOwo+PiAgICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbCA8PCBzdGQ6OmVuZGw7Cj4+Cj4+Cj4+ IC8vIFNvZnR3YXJlIEd1aWRlIDogQmVnaW5MYXRleAo+PiAvLwo+PiAvLyBUaGUgR0RDTVNlcmll c0ZpbGVOYW1lcyBvYmplY3QgZmlyc3QgaWRlbnRpZmllcyB0aGUgbGlzdCBvZiBESUNPTSBzZXJp ZXMKPj4gLy8gcHJlc2VudCBpbiB0aGUgZ2l2ZW4gZGlyZWN0b3J5LiBXZSByZWNlaXZlIHRoYXQg bGlzdCBpbiBhIHJlZmVyZW5jZQo+PiAvLyB0byBhIGNvbnRhaW5lciBvZiBzdHJpbmdzIGFuZCB0 aGVuIHdlIGNhbiBkbyB0aGluZ3MgbGlrZSBwcmludCBvdXQgYWxsCj4+IC8vIHRoZSBzZXJpZXMg aWRlbnRpZmllcnMgdGhhdCB0aGUgZ2VuZXJhdG9yIGhhZCBmb3VuZC4gU2luY2UgdGhlIHByb2Nl c3Mgb2YKPj4gLy8gZmluZGluZyB0aGUgc2VyaWVzIGlkZW50aWZpZXJzIGNhbiBwb3RlbnRpYWxs eSB0aHJvdyBleGNlcHRpb25zLCBpdCBpcwo+PiAvLyB3aXNlIHRvIHB1dCB0aGlzIGNvZGUgaW5z aWRlIGEgXGNvZGV7dHJ5L2NhdGNofSBibG9jay4KPj4gLy8KPj4KPj4KPj4gICAgIHR5cGVkZWYg c3RkOjp2ZWN0b3I8IHN0ZDo6c3RyaW5nID4gICAgU2VyaWVzSWRDb250YWluZXI7Cj4+Cj4+ICAg ICBjb25zdCBTZXJpZXNJZENvbnRhaW5lciAmIHNlcmllc1VJRCA9IG5hbWVHZW5lcmF0b3ItPkdl dFNlcmllc1VJRHMoKTsKPj4KPj4gLy8gR2l2ZW4gdGhhdCBpdCBpcyBjb21tb24gdG8gZmluZCBt dWx0aXBsZSBESUNPTSBzZXJpZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LAo+PiAvLyB3ZSBtdXN0 IHRlbGwgdGhlIEdEQ00gY2xhc3NlcyB3aGF0IHNwZWNpZmljIHNlcmllcyB3ZSB3YW50IHRvIHJl YWQuIEluCj4+IC8vIHRoaXMgZXhhbXBsZSB3ZSBkbyB0aGlzIGJ5IGNoZWNraW5nIGZpcnN0IGlm IHRoZSB1c2VyIGhhcyBwcm92aWRlZCBhIHNlcmllcwo+PiAvLyBpZGVudGlmaWVyIGluIHRoZSBj b21tYW5kIGxpbmUgYXJndW1lbnRzLiBJZiBubyBzZXJpZXMgaWRlbnRpZmllciBoYXMgYmVlbgo+ PiAvLyBwYXNzZWQsIHRoZW4gd2Ugc2ltcGx5IHVzZSB0aGUgZmlyc3Qgc2VyaWVzIGZvdW5kIGR1 cmluZyB0aGUgZXhwbG9yYXRpb24gb2YKPj4gLy8gdGhlIGRpcmVjdG9yeS4KPj4KPj4KPj4gICAg IHN0ZDo6c3RyaW5nIHNlcmllc0lkZW50aWZpZXI7Cj4+Cj4+ICAgICAgc2VyaWVzSWRlbnRpZmll ciA9IHNlcmllc1VJRC5iZWdpbigpLT5jX3N0cigpOwo+Pgo+PiAgICAgc3RkOjpjb3V0IDw8IHN0 ZDo6ZW5kbCA8PCBzdGQ6OmVuZGw7Cj4+ICAgICBzdGQ6OmNvdXQgPDwgIk5vdyByZWFkaW5nIHNl cmllczogIiA8PCBzdGQ6OmVuZGwgPDwgc3RkOjplbmRsOwo+PiAgICAgc3RkOjpjb3V0IDw8IHNl cmllc0lkZW50aWZpZXIgPDwgc3RkOjplbmRsOwo+PiAgICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5k bCA8PCBzdGQ6OmVuZGw7Cj4+Cj4+Cj4+IC8vIFdlIHBhc3MgdGhlIHNlcmllcyBpZGVudGlmaWVy IHRvIHRoZSBuYW1lIGdlbmVyYXRvciBhbmQgYXNrIGZvciBhbGwgdGhlCj4+IC8vIGZpbGVuYW1l cyBhc3NvY2lhdGVkIHRvIHRoYXQgc2VyaWVzLiBUaGlzIGxpc3QgaXMgcmV0dXJuZWQgaW4gYSBj b250YWluZXIgb2YKPj4gLy8gc3RyaW5ncyBieSB0aGUgXGNvZGV7R2V0RmlsZU5hbWVzKCl9IG1l dGhvZC4KPj4KPj4KPj4gICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8IHN0ZDo6c3RyaW5nID4gICBG aWxlTmFtZXNDb250YWluZXI7Cj4+ICAgICBGaWxlTmFtZXNDb250YWluZXIgZmlsZU5hbWVzOwo+ Pgo+PiAgICAgZmlsZU5hbWVzID0gbmFtZUdlbmVyYXRvci0+R2V0RmlsZU5hbWVzKCBzZXJpZXNJ ZGVudGlmaWVyICk7Cj4+Cj4+IC8vCj4+IC8vIFRoZSBsaXN0IG9mIGZpbGVuYW1lcyBjYW4gbm93 IGJlIHBhc3NlZCB0byB0aGUgXGRveHlnZW57SW1hZ2VTZXJpZXNSZWFkZXJ9Cj4+IC8vIHVzaW5n IHRoZSBcY29kZXtTZXRGaWxlTmFtZXMoKX0gbWV0aG9kLgo+Pgo+Pgo+PiAgICAgcmVhZGVyLT5T ZXRGaWxlTmFtZXMoIGZpbGVOYW1lcyApOwo+Pgo+PiAvLyBGaW5hbGx5IHdlIGNhbiB0cmlnZ2Vy IHRoZSByZWFkaW5nIHByb2Nlc3MgYnkgaW52b2tpbmcgdGhlIFxjb2Rle1VwZGF0ZSgpfQo+PiAv LyBtZXRob2QgaW4gdGhlIHJlYWRlci4gVGhpcyBjYWxsIGFzIHVzdWFsIGlzIHBsYWNlZCBpbnNp ZGUgYSBcY29kZXt0cnkvY2F0Y2h9Cj4+IC8vIGJsb2NrLgo+Pgo+PiAgICAgdHJ5Cj4+ICAgICAg IHsKPj4gICAgICAgcmVhZGVyLT5VcGRhdGUoKTsKPj4gICAgICAgfQo+PiAgICAgY2F0Y2ggKGl0 azo6RXhjZXB0aW9uT2JqZWN0ICZleCkKPj4gICAgICAgewo+PiAgICAgICBzdGQ6OmNvdXQgPDwg ZXggPDwgc3RkOjplbmRsOwo+PiAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwo+PiAgICAgICB9 Cj4+IH0KPj4gICBjYXRjaCAoaXRrOjpFeGNlcHRpb25PYmplY3QgJmV4KQo+PiAgICAgewo+PiAg ICAgc3RkOjpjb3V0IDw8IGV4IDw8IHN0ZDo6ZW5kbDsKPj4gICAgIHJldHVybiBFWElUX0ZBSUxV UkU7Cj4+ICAgICB9Cj4+Cj4+ICAgLy8gVmlzdWFsaXphdGlvbiBwaXBlbGluZQo+Pgo+PiAgICAg Ly8gQ3JlYXRlIHRoZSByZW5kZXJlciwgcmVuZGVyIHdpbmRvdyBhbmQgaW50ZXJhY3Rvcgo+PiAg ICB2dGtSZW5kZXJlciAqcmVuZGVyZXIgPSB2dGtSZW5kZXJlcjo6TmV3KCk7Cj4+ICAgIHZ0a1Jl bmRlcldpbmRvdyAqcmVuV2luID0gdnRrUmVuZGVyV2luZG93OjpOZXcoKTsKPj4gICAgcmVuV2lu LT5BZGRSZW5kZXJlcihyZW5kZXJlcik7Cj4+Cj4+ICAgICB2dGtSZW5kZXJXaW5kb3dJbnRlcmFj dG9yICppcmVuID0gdnRrUmVuZGVyV2luZG93SW50ZXJhY3Rvcjo6TmV3KCk7Cj4+ICAgICBpcmVu LT5TZXRSZW5kZXJXaW5kb3cocmVuV2luKTsKPj4KPj4gICAgLy8gUmVhZCB0aGUgZGF0YQo+PiAg ICB2dGtJbWFnZURhdGEgKmlucHV0ID0gbnVsbHB0cjsKPj4KPj4gLyogICAgdnRrRElDT01JbWFn ZVJlYWRlciAqcmVhZGVyID0gdnRrRElDT01JbWFnZVJlYWRlcjo6TmV3KCk7Cj4+IC8vIHZ0a1RJ RkZSZWFkZXIgKnJlYWRlciA9IHZ0a1RJRkZSZWFkZXI6Ok5ldygpOwo+PiAgICByZWFkZXItPlNl dEZpbGVOYW1lKGFyZ3ZbMV0pOyAqLwo+PiAgICAvLyByZWFkZXItPlVwZGF0ZSgpOyAvLyByZWFk IGRhdGEKPj4KPj4KPj4gICAgY29ubmVjdG9yLT5TZXRJbnB1dChyZWFkZXItPkdldE91dHB1dCgp KTsKPj4KPj4gICAgIC8vIENyZWF0ZSBvdXIgdm9sdW1lIGFuZCBtYXBwZXIKPj4gICAgIHZ0a1Zv bHVtZSAqdm9sdW1lID0gdnRrVm9sdW1lOjpOZXcoKTsKPj4gICAgIHZ0a0ZpeGVkUG9pbnRWb2x1 bWVSYXlDYXN0TWFwcGVyICptYXBwZXIgPSB2dGtGaXhlZFBvaW50Vm9sdW1lUmF5Q2FzdE1hcHBl cjo6TmV3KCk7Cj4+IC8vIHZ0a1ZvbHVtZVJheUNhc3RDb21wb3NpdGVGdW5jdGlvbiAqY29tcG9z aXRlRnVuY3Rpb24gPSB2dGtWb2x1bWVSYXlDYXN0Q29tcG9zaXRlRnVuY3Rpb246Ok5ldygpOwo+ PiB2dGtJbnRlcmFjdG9yU3R5bGVUcmFja2JhbGxDYW1lcmEgKnN0eWxlQ2FtZXJhID0gdnRrSW50 ZXJhY3RvclN0eWxlVHJhY2tiYWxsQ2FtZXJhOjpOZXcoKTsKPj4KPj4gICAgIC8vIGNvbm5lY3Qg dXAgdGhlIHZvbHVtZSB0byB0aGUgcHJvcGVydHkgYW5kIHRoZSBtYXBwZXIKPj4gICAgIG1hcHBl ciAtPiBTZXRJbnB1dERhdGEoIGNvbm5lY3RvciAtPiBHZXRPdXRwdXQoKSApOwo+PiBtYXBwZXIg LT4gU2V0U2FtcGxlRGlzdGFuY2UoIDAuMSApOwo+Pgo+PiB2dGtTbWFydFBvaW50ZXI8dnRrVm9s dW1lUHJvcGVydHk+IHZvbHVtZVByb3BlcnR5ID0gdnRrU21hcnRQb2ludGVyPHZ0a1ZvbHVtZVBy b3BlcnR5Pjo6TmV3KCk7Cj4+Cj4+Cj4+IHZvbHVtZVByb3BlcnR5LT5TZXRJbnRlcnBvbGF0aW9u VHlwZVRvTGluZWFyKCk7IC8vIGJldHRlciBpbWFnZSBxdWFsaXR5IGJ1dCBjb21wdXRhdGlvbidz IGxvbmdlcgo+Pgo+Pgo+PiB2dGtTbWFydFBvaW50ZXI8dnRrUGllY2V3aXNlRnVuY3Rpb24+IHNj YWxhck9wYWNpdHkgPSB2dGtTbWFydFBvaW50ZXI8dnRrUGllY2V3aXNlRnVuY3Rpb24+OjpOZXco KTsKPj4gdnRrU21hcnRQb2ludGVyPHZ0a1BpZWNld2lzZUZ1bmN0aW9uPiBncmFkaWVudE9wYWNp dHkgPSB2dGtTbWFydFBvaW50ZXI8dnRrUGllY2V3aXNlRnVuY3Rpb24+OjpOZXcoKTsKPj4KPj4g ICBzY2FsYXJPcGFjaXR5LT5BZGRQb2ludCgwLCAgICAwLjAwKTsKPj4gICBzY2FsYXJPcGFjaXR5 LT5BZGRQb2ludCg1MDAsICAwLjE1KTsKPj4gICBzY2FsYXJPcGFjaXR5LT5BZGRQb2ludCgxMDAw LCAwLjE1KTsKPj4gICBzY2FsYXJPcGFjaXR5LT5BZGRQb2ludCgxMTUwLCAwLjg1KTsKPj4KPj4K Pj4gICBncmFkaWVudE9wYWNpdHktPkFkZFBvaW50KDAsICAgMC4wKTsKPj4gICBncmFkaWVudE9w YWNpdHktPkFkZFBvaW50KDkwLCAgMC41KTsKPj4gICBncmFkaWVudE9wYWNpdHktPkFkZFBvaW50 KDEwMCwgMS4wKTsKPj4KPj4KPj4gLy9zZXQgdGhlIHRyYW5zZmVyIGZ1bmN0aW9ucyB0byB0aGUg cHJvcGVydHkKPj4gdm9sdW1lUHJvcGVydHktPlNldFNjYWxhck9wYWNpdHkoc2NhbGFyT3BhY2l0 eSk7Cj4+IHZvbHVtZVByb3BlcnR5LT5TZXRHcmFkaWVudE9wYWNpdHkoZ3JhZGllbnRPcGFjaXR5 KTsKPj4KPj4gLy9zZXQgdGhlIHByb3BlcnR5IHRvIHRoZSB2b2x1bWUKPj4KPj4gdm9sdW1lLT5T ZXRQcm9wZXJ0eSh2b2x1bWVQcm9wZXJ0eSk7Cj4+Cj4+IHZvbHVtZS0+U2V0TWFwcGVyKCBtYXBw ZXIgKTsKPj4gICAgIGlyZW4gLT4gU2V0SW50ZXJhY3RvclN0eWxlKHN0eWxlQ2FtZXJhKTsKPj4g ICAgIC8vIFNldCB0aGUgZGVmYXVsdCB3aW5kb3cgc2l6ZQo+PiAgICAgcmVuV2luLT5TZXRTaXpl KDYwMCw2MDApOwo+Pgo+PiAgICAgLy8gQWRkIHRoZSB2b2x1bWUgdG8gdGhlIHNjZW5lCj4+ICAg ICByZW5kZXJlci0+QWRkVm9sdW1lKCB2b2x1bWUgKTsKPj4KPj4gICAgIC8vIGludGVyYWN0IHdp dGggZGF0YQo+PiAgICAgcmVuV2luLT5SZW5kZXIoKTsKPj4gICAgIGlyZW4gLT4gU3RhcnQoKTsK Pj4KPj4KPj4gICAgIHJldHVybiBFWElUX1NVQ0NFU1M7Cj4+ICAgfQo+Pgo+Pgo+Pgo+PiBJbnZp YXRvIGRhIE91dGxvb2sKPj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPj4gRGE6 IETFvmVuYW4gWnVracSHIDxkemVuYW56QGdtYWlsLmNvbT4KPj4gSW52aWF0bzogdmVuZXJkw6wg MTUgbWFyem8gMjAxOSAxNzoxOQo+PiBBOiBNYXJjbyBGZXN0dWdhdG8KPj4gQ2M6IGluc2lnaHQt dXNlcnNAaXRrLm9yZwo+PiBPZ2dldHRvOiBSZTogW0lUSy11c2Vyc10gUmVhZGluZyBESUNPTSBz ZXJpZXMgYW5kIHZpc3VhbGl6ZSB0aGUgdm9sdW1lIHdpdGggVlRLCj4+Cj4+IEhpIE1hcmNvLAo+ Pgo+PiB5b3UgY291bGQgY29tYmluZSB0aGF0IGV4YW1wbGUgd2l0aCBWVEsgVm9sdW1lUmVuZGVy aW5nIGV4YW1wbGUgYW5kIGNvbm5lY3QgdGhlbSB1c2luZyBJVEtWVEtHbHVlLgo+Pgo+PiBSZWdh cmRzLAo+PiBExb5lbmFuCj4+Cj4+IE9uIEZyaSwgTWFyIDE1LCAyMDE5IGF0IDc6MDAgQU0gTWFy Y28gRmVzdHVnYXRvIDxtYXJjby5mZXN0dWdhdG9Ab3V0bG9vay5pdD4gd3JvdGU6Cj4+Cj4+IEhp IGd1eXMhIEknbSB2ZXJ5IG5ldyB0byBJVEstVlRLLi4ud2hhdCBpIGhhdmUgdG8gZG8gaXMgcmVh ZGluZyAxOTkgZGljb20KPj4gaW1hZ2VzIHVzaW5nIElUSyBhbmQgdmlzdWFsaXplIHRoZSB2b2x1 bWUgdXNpbmcgVlRLLgo+PiBVc2luZyB0aGUgZXhhbXBsZSAiRGljb21TZXJpZXNSZWFkSW1hZ2VX cml0ZTIiIGltIGFibGUgdG8gcmVhZCB0aGUgc2VyaWVzCj4+IGFuZCBjcmVhdGUgYSAzRCB2b2x1 bWUgYnV0IGkgZG9udCBrbm93IGhvdyB0byB2aXN1YWxpemUgaXQgd2l0aCBWVEshCj4+IEFueSBo ZWxwPyA6KQo+PiBUaGFuayB1IGZvciB5b3VyIHRpbWUhCj4+Cj4+IEludmlhdG8gZGEgT3V0bG9v awo+PiBUaGUgSVRLIGNvbW11bml0eSBpcyB0cmFuc2l0aW9uaW5nIGZyb20gdGhpcyBtYWlsaW5n IGxpc3QgdG8gZGlzY291cnNlLml0ay5vcmcuIFBsZWFzZSBqb2luIHVzIHRoZXJlIQo+PiBfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+PiBQb3dlcmVkIGJ5IHd3dy5raXR3YXJlLmNv bQo+Pgo+PiBWaXNpdCBvdGhlciBLaXR3YXJlIG9wZW4tc291cmNlIHByb2plY3RzIGF0Cj4+IGh0 dHA6Ly93d3cua2l0d2FyZS5jb20vb3BlbnNvdXJjZS9vcGVuc291cmNlLmh0bWwKPj4KPj4gS2l0 d2FyZSBvZmZlcnMgSVRLIFRyYWluaW5nIENvdXJzZXMsIGZvciBtb3JlIGluZm9ybWF0aW9uIHZp c2l0Ogo+PiBodHRwOi8vd3d3LmtpdHdhcmUuY29tL3Byb2R1Y3RzL3Byb3RyYWluaW5nLnBocAo+ Pgo+PiBQbGVhc2Uga2VlcCBtZXNzYWdlcyBvbi10b3BpYyBhbmQgY2hlY2sgdGhlIElUSyBGQVEg YXQ6Cj4+IGh0dHA6Ly93d3cuaXRrLm9yZy9XaWtpL0lUS19GQVEKPj4KPj4gRm9sbG93IHRoaXMg bGluayB0byBzdWJzY3JpYmUvdW5zdWJzY3JpYmU6Cj4+IGh0dHBzOi8vaXRrLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2luc2lnaHQtdXNlcnMKPgo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCj4gUG93ZXJlZCBieSB3d3cua2l0d2FyZS5jb20KPgo+IFZpc2l0 IG90aGVyIEtpdHdhcmUgb3Blbi1zb3VyY2UgcHJvamVjdHMgYXQgaHR0cDovL3d3dy5raXR3YXJl LmNvbS9vcGVuc291cmNlL29wZW5zb3VyY2UuaHRtbAo+Cj4gUGxlYXNlIGtlZXAgbWVzc2FnZXMg b24tdG9waWMgYW5kIGNoZWNrIHRoZSBWVEsgRkFRIGF0OiBodHRwOi8vd3d3LnZ0ay5vcmcvV2lr aS9WVEtfRkFRCj4KPiBTZWFyY2ggdGhlIGxpc3QgYXJjaGl2ZXMgYXQ6IGh0dHA6Ly9tYXJrbWFp bC5vcmcvc2VhcmNoLz9xPXZ0a3VzZXJzCj4KPiBGb2xsb3cgdGhpcyBsaW5rIHRvIHN1YnNjcmli ZS91bnN1YnNjcmliZToKPiBodHRwczovL3Z0ay5vcmcvbWFpbG1hbi9saXN0aW5mby92dGt1c2Vy cwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpQb3dlcmVk IGJ5IHd3dy5raXR3YXJlLmNvbQoKVmlzaXQgb3RoZXIgS2l0d2FyZSBvcGVuLXNvdXJjZSBwcm9q ZWN0cyBhdCBodHRwOi8vd3d3LmtpdHdhcmUuY29tL29wZW5zb3VyY2Uvb3BlbnNvdXJjZS5odG1s CgpQbGVhc2Uga2VlcCBtZXNzYWdlcyBvbi10b3BpYyBhbmQgY2hlY2sgdGhlIFZUSyBGQVEgYXQ6 IGh0dHA6Ly93d3cudnRrLm9yZy9XaWtpL1ZUS19GQVEKClNlYXJjaCB0aGUgbGlzdCBhcmNoaXZl cyBhdDogaHR0cDovL21hcmttYWlsLm9yZy9zZWFyY2gvP3E9dnRrdXNlcnMKCkZvbGxvdyB0aGlz IGxpbmsgdG8gc3Vic2NyaWJlL3Vuc3Vic2NyaWJlOgpodHRwczovL3Z0ay5vcmcvbWFpbG1hbi9s aXN0aW5mby92dGt1c2Vycwo=