[Insight-users] Results of Demons Deformable Registration

Lydia Ng lng at insightful.com
Thu, 19 Feb 2004 14:58:50 -0800


This is a multi-part message in MIME format.

------_=_NextPart_001_01C3F73B.F03AA08A
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Hi Hari,

What are the spacing values of your images?
Could you do an experiment for me? Can you repeat your registration =
using
either the cvs ITK or the updated DemonsRegistrationFunction class =
attached?

Thanks,
Lydia

> -----Original Message-----
> From: Hari sundar [mailto:hsundar at seas.upenn.edu]
> Sent: Thursday, February 19, 2004 2:36 PM
> To: Lydia Ng
> Subject: RE: [Insight-users] Results of Demons Deformable Registration
>=20
> Hi Lydia,
>=20
> I am using ITK 1.6. I am using it straight, this is not in a =
multi-scale
> framework. Will that make a difference ?
>=20
> The other image looks almost the same and has the same size/intensity
> ranges (same subject, same machine, same modality). Therefore, I did =
not
> use the histogram matching presprocessing.
>=20
> It's the simplest possible pipeline. I don't know why the images look
> corrupted.
>=20
> thanks,
> -Hari
>=20
> ------------------------------------------------------
> The Pipeline
> ------------------------------------------------------
> fixedImageReader->SetFileName( fixed );
> movingImageReader->SetFileName( moving );
>=20
> fixedImageCaster->SetInput( fixedImageReader->GetOutput() );
> movingImageCaster->SetInput( movingImageReader->GetOutput() );
>=20
> filter->SetFixedImage( fixedImageCaster->GetOutput() );
> filter->SetMovingImage( movingImageCaster->GetOutput() );
>=20
> filter->SetNumberOfIterations( 150 );
> filter->SetStandardDeviations( 5.0 );
>=20
> filter->Update();
>=20
>=20
> fieldWriter->SetInput( filter->GetOutput() );
> fieldWriter->SetFileName(defs);
>=20
> fieldWriter->Update();
>=20
> FixedImageType::Pointer fixedImage =3D fixedImageReader->GetOutput();
>=20
> warper->SetInput( movingImageReader->GetOutput() );
> warper->SetInterpolator( interpolator );
> warper->SetOutputSpacing( fixedImage->GetSpacing() );
> warper->SetOutputOrigin( fixedImage->GetOrigin() );
> warper->SetDeformationField( filter->GetOutput() );
>=20
> writer->SetFileName( warp );
>=20
> caster->SetInput( warper->GetOutput() );
> writer->SetInput( caster->GetOutput()   );
> writer->Update();
>=20
> ---------------------------------------------------------------
> On Thu, 2004-02-19 at 16:40, Lydia Ng wrote:
> > Hari,
> >
> > Which version of ITK are you using?
> > Are you using demons straight or in a multi-scale framework?
> > You only posted one image (orig.jpg) what does the other image look
> like?
> > Did you do any histogram matching preprocessing before hand? If so, =
have
> you
> > check if the output looks ok?
> >
> > - Lydia
> >
> > > -----Original Message-----
> > > From: Hari sundar [mailto:hsundar at seas.upenn.edu]
> > > Sent: Thursday, February 19, 2004 1:08 PM
> > > To: Insight-users at itk.org
> > > Subject: [Insight-users] Results of Demons Deformable Registration
> > >
> > > Hi,
> > >
> > > I tried to use the demons deformable registration example =
(modified)
> to
> > > register two 3D MR datasets. The registration results seem to be
> culled
> > > at some intensity level. Please see the attched images.
> > >
> > > Why is this happening ?
> > >
> > > thanks,
> > > -Hari
> > >
> >


------_=_NextPart_001_01C3F73B.F03AA08A
Content-Type: application/octet-stream;
	name="itkDemonsRegistrationFunction.txx"
Content-Transfer-Encoding: base64
Content-Description: itkDemonsRegistrationFunction.txx
Content-Disposition: attachment;
	filename="itkDemonsRegistrationFunction.txx"

Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQoNCiAgUHJvZ3JhbTogICBJbnNpZ2h0IFNlZ21lbnRhdGlvbiAm
IFJlZ2lzdHJhdGlvbiBUb29sa2l0DQogIE1vZHVsZTogICAgJFJDU2ZpbGU6IGl0a0RlbW9uc1Jl
Z2lzdHJhdGlvbkZ1bmN0aW9uLnR4eCx2ICQNCiAgTGFuZ3VhZ2U6ICBDKysNCiAgRGF0ZTogICAg
ICAkRGF0ZTogMjAwNC8wMi8xMSAyMToyOToxMyAkDQogIFZlcnNpb246ICAgJFJldmlzaW9uOiAx
LjI1ICQNCg0KICBDb3B5cmlnaHQgKGMpIEluc2lnaHQgU29mdHdhcmUgQ29uc29ydGl1bS4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4NCiAgU2VlIElUS0NvcHlyaWdodC50eHQgb3IgaHR0cDovL3d3dy5p
dGsub3JnL0hUTUwvQ29weXJpZ2h0Lmh0bSBmb3IgZGV0YWlscy4NCg0KICAgICBUaGlzIHNvZnR3
YXJlIGlzIGRpc3RyaWJ1dGVkIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gDQog
ICAgIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgDQogICAgIFBVUlBPU0UuICBTZWUgdGhlIGFib3ZlIGNvcHlyaWdodCBu
b3RpY2VzIGZvciBtb3JlIGluZm9ybWF0aW9uLg0KDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8NCiNpZm5k
ZWYgX2l0a0RlbW9uc1JlZ2lzdHJhdGlvbkZ1bmN0aW9uX3R4eF8NCiNkZWZpbmUgX2l0a0RlbW9u
c1JlZ2lzdHJhdGlvbkZ1bmN0aW9uX3R4eF8NCg0KI2luY2x1ZGUgIml0a0RlbW9uc1JlZ2lzdHJh
dGlvbkZ1bmN0aW9uLmgiDQojaW5jbHVkZSAiaXRrRXhjZXB0aW9uT2JqZWN0LmgiDQojaW5jbHVk
ZSAidm5sL3ZubF9tYXRoLmgiDQoNCm5hbWVzcGFjZSBpdGsgew0KDQovKg0KICogRGVmYXVsdCBj
b25zdHJ1Y3Rvcg0KICovDQp0ZW1wbGF0ZSA8Y2xhc3MgVEZpeGVkSW1hZ2UsIGNsYXNzIFRNb3Zp
bmdJbWFnZSwgY2xhc3MgVERlZm9ybWF0aW9uRmllbGQ+DQpEZW1vbnNSZWdpc3RyYXRpb25GdW5j
dGlvbjxURml4ZWRJbWFnZSxUTW92aW5nSW1hZ2UsVERlZm9ybWF0aW9uRmllbGQ+DQo6OkRlbW9u
c1JlZ2lzdHJhdGlvbkZ1bmN0aW9uKCkNCnsNCg0KICBSYWRpdXNUeXBlIHI7DQogIHVuc2lnbmVk
IGludCBqOw0KICBmb3IoIGogPSAwOyBqIDwgSW1hZ2VEaW1lbnNpb247IGorKyApDQogICAgew0K
ICAgIHJbal0gPSAwOw0KICAgIH0NCiAgdGhpcy0+U2V0UmFkaXVzKHIpOw0KDQogIG1fVGltZVN0
ZXAgPSAxLjA7DQogIG1fRGVub21pbmF0b3JUaHJlc2hvbGQgPSAxZS05Ow0KICBtX0ludGVuc2l0
eURpZmZlcmVuY2VUaHJlc2hvbGQgPSAwLjAwMTsNCiAgbV9Nb3ZpbmdJbWFnZSA9IE5VTEw7DQog
IG1fRml4ZWRJbWFnZSA9IE5VTEw7DQogIG1fRml4ZWRJbWFnZVNwYWNpbmcuRmlsbCggMS4wICk7
DQogIG1fRml4ZWRJbWFnZU9yaWdpbi5GaWxsKCAwLjAgKTsNCiAgbV9Ob3JtYWxpemVyID0gMS4w
Ow0KICBtX0ZpeGVkSW1hZ2VHcmFkaWVudENhbGN1bGF0b3IgPSBHcmFkaWVudENhbGN1bGF0b3JU
eXBlOjpOZXcoKTsNCg0KDQogIHR5cGVuYW1lIERlZmF1bHRJbnRlcnBvbGF0b3JUeXBlOjpQb2lu
dGVyIGludGVycCA9DQogICAgRGVmYXVsdEludGVycG9sYXRvclR5cGU6Ok5ldygpOw0KDQogIG1f
TW92aW5nSW1hZ2VJbnRlcnBvbGF0b3IgPSBzdGF0aWNfY2FzdDxJbnRlcnBvbGF0b3JUeXBlKj4o
DQogICAgaW50ZXJwLkdldFBvaW50ZXIoKSApOw0KDQogIG1fTWV0cmljID0gTnVtZXJpY1RyYWl0
czxkb3VibGU+OjptYXgoKTsNCiAgbV9TdW1PZlNxdWFyZWREaWZmZXJlbmNlID0gMC4wOw0KICBt
X051bWJlck9mUGl4ZWxzUHJvY2Vzc2VkID0gMEw7DQogIG1fUk1TQ2hhbmdlID0gTnVtZXJpY1Ry
YWl0czxkb3VibGU+OjptYXgoKTsNCiAgbV9TdW1PZlNxdWFyZWRDaGFuZ2UgPSAwLjA7DQoNCn0N
Cg0KDQovKg0KICogU3RhbmRhcmQgIlByaW50U2VsZiIgbWV0aG9kLg0KICovDQp0ZW1wbGF0ZSA8
Y2xhc3MgVEZpeGVkSW1hZ2UsIGNsYXNzIFRNb3ZpbmdJbWFnZSwgY2xhc3MgVERlZm9ybWF0aW9u
RmllbGQ+DQp2b2lkDQpEZW1vbnNSZWdpc3RyYXRpb25GdW5jdGlvbjxURml4ZWRJbWFnZSxUTW92
aW5nSW1hZ2UsVERlZm9ybWF0aW9uRmllbGQ+DQo6OlByaW50U2VsZihzdGQ6Om9zdHJlYW0mIG9z
LCBJbmRlbnQgaW5kZW50KSBjb25zdA0Kew0KICBTdXBlcmNsYXNzOjpQcmludFNlbGYob3MsIGlu
ZGVudCk7DQoNCiAgb3MgPDwgaW5kZW50IDw8ICJNb3ZpbmdJbWFnZUl0ZXJwb2xhdG9yOiAiOw0K
ICBvcyA8PCBtX01vdmluZ0ltYWdlSW50ZXJwb2xhdG9yLkdldFBvaW50ZXIoKSA8PCBzdGQ6OmVu
ZGw7DQogIG9zIDw8IGluZGVudCA8PCAiRml4ZWRJbWFnZUdyYWRpZW50Q2FsY3VsYXRvcjogIjsN
CiAgb3MgPDwgbV9GaXhlZEltYWdlR3JhZGllbnRDYWxjdWxhdG9yLkdldFBvaW50ZXIoKSA8PCBz
dGQ6OmVuZGw7DQogIG9zIDw8IGluZGVudCA8PCAiRGVub21pbmF0b3JUaHJlc2hvbGQ6ICI7DQog
IG9zIDw8IG1fRGVub21pbmF0b3JUaHJlc2hvbGQgPDwgc3RkOjplbmRsOw0KICBvcyA8PCBpbmRl
bnQgPDwgIkludGVuc2l0eURpZmZlcmVuY2VUaHJlc2hvbGQ6ICI7DQogIG9zIDw8IG1fSW50ZW5z
aXR5RGlmZmVyZW5jZVRocmVzaG9sZCA8PCBzdGQ6OmVuZGw7DQoNCiAgb3MgPDwgaW5kZW50IDw8
ICJNZXRyaWM6ICI7DQogIG9zIDw8IG1fTWV0cmljIDw8IHN0ZDo6ZW5kbDsNCiAgb3MgPDwgaW5k
ZW50IDw8ICJTdW1PZlNxdWFyZWREaWZmZXJlbmNlOiAiOw0KICBvcyA8PCBtX1N1bU9mU3F1YXJl
ZERpZmZlcmVuY2UgPDwgc3RkOjplbmRsOw0KICBvcyA8PCBpbmRlbnQgPDwgIk51bWJlck9mUGl4
ZWxzUHJvY2Vzc2VkOiAiOw0KICBvcyA8PCBtX051bWJlck9mUGl4ZWxzUHJvY2Vzc2VkIDw8IHN0
ZDo6ZW5kbDsNCiAgb3MgPDwgaW5kZW50IDw8ICJSTVNDaGFuZ2U6ICI7DQogIG9zIDw8IG1fUk1T
Q2hhbmdlIDw8IHN0ZDo6ZW5kbDsNCiAgb3MgPDwgaW5kZW50IDw8ICJTdW1PZlNxdWFyZWRDaGFu
Z2U6ICI7DQogIG9zIDw8IG1fU3VtT2ZTcXVhcmVkQ2hhbmdlIDw8IHN0ZDo6ZW5kbDsNCg0KfQ0K
DQoNCi8qDQogKiBTZXQgdGhlIGZ1bmN0aW9uIHN0YXRlIHZhbHVlcyBiZWZvcmUgZWFjaCBpdGVy
YXRpb24NCiAqLw0KdGVtcGxhdGUgPGNsYXNzIFRGaXhlZEltYWdlLCBjbGFzcyBUTW92aW5nSW1h
Z2UsIGNsYXNzIFREZWZvcm1hdGlvbkZpZWxkPg0Kdm9pZA0KRGVtb25zUmVnaXN0cmF0aW9uRnVu
Y3Rpb248VEZpeGVkSW1hZ2UsVE1vdmluZ0ltYWdlLFREZWZvcm1hdGlvbkZpZWxkPg0KOjpJbml0
aWFsaXplSXRlcmF0aW9uKCkNCnsNCiAgaWYoICFtX01vdmluZ0ltYWdlIHx8ICFtX0ZpeGVkSW1h
Z2UgfHwgIW1fTW92aW5nSW1hZ2VJbnRlcnBvbGF0b3IgKQ0KICAgIHsNCiAgICBpdGtFeGNlcHRp
b25NYWNybyggPDwgIk1vdmluZ0ltYWdlLCBGaXhlZEltYWdlIGFuZC9vciBJbnRlcnBvbGF0b3Ig
bm90IHNldCIgKTsNCiAgICB9DQoNCiAgLy8gY2FjaGUgZml4ZWQgaW1hZ2UgaW5mb3JtYXRpb24N
CiAgbV9GaXhlZEltYWdlU3BhY2luZyAgICA9IG1fRml4ZWRJbWFnZS0+R2V0U3BhY2luZygpOw0K
ICBtX0ZpeGVkSW1hZ2VPcmlnaW4gICAgID0gbV9GaXhlZEltYWdlLT5HZXRPcmlnaW4oKTsNCg0K
ICAvLyBjb21wdXRlIHRoZSBub3JtYWxpemVyDQogIG1fTm9ybWFsaXplciAgICAgID0gMC4wOw0K
ICBmb3IoIHVuc2lnbmVkIGludCBrID0gMDsgayA8IEltYWdlRGltZW5zaW9uOyBrKysgKQ0KICAg
IHsNCiAgICBtX05vcm1hbGl6ZXIgKz0gbV9GaXhlZEltYWdlU3BhY2luZ1trXSAqIG1fRml4ZWRJ
bWFnZVNwYWNpbmdba107DQogICAgfQ0KICBtX05vcm1hbGl6ZXIgLz0gc3RhdGljX2Nhc3Q8ZG91
YmxlPiggSW1hZ2VEaW1lbnNpb24gKTsNCg0KDQogIC8vIHNldHVwIGdyYWRpZW50IGNhbGN1bGF0
b3INCiAgbV9GaXhlZEltYWdlR3JhZGllbnRDYWxjdWxhdG9yLT5TZXRJbnB1dEltYWdlKCBtX0Zp
eGVkSW1hZ2UgKTsNCg0KICAvLyBzZXR1cCBtb3ZpbmcgaW1hZ2UgaW50ZXJwb2xhdG9yDQogIG1f
TW92aW5nSW1hZ2VJbnRlcnBvbGF0b3ItPlNldElucHV0SW1hZ2UoIG1fTW92aW5nSW1hZ2UgKTsN
Cg0KICAvLyBpbml0aWFsaXplIG1ldHJpYyBjb21wdXRhdGlvbiB2YXJpYWJsZXMNCiAgbV9TdW1P
ZlNxdWFyZWREaWZmZXJlbmNlICA9IDAuMDsNCiAgbV9OdW1iZXJPZlBpeGVsc1Byb2Nlc3NlZCA9
IDBMOw0KICBtX1N1bU9mU3F1YXJlZENoYW5nZSAgICAgID0gMC4wOw0KDQp9DQoNCg0KLyoNCiAq
IENvbXB1dGUgdXBkYXRlIGF0IGEgc3BlY2lmeSBuZWlnaGJvdXJob29kDQogKi8NCnRlbXBsYXRl
IDxjbGFzcyBURml4ZWRJbWFnZSwgY2xhc3MgVE1vdmluZ0ltYWdlLCBjbGFzcyBURGVmb3JtYXRp
b25GaWVsZD4NCnR5cGVuYW1lIERlbW9uc1JlZ2lzdHJhdGlvbkZ1bmN0aW9uPFRGaXhlZEltYWdl
LFRNb3ZpbmdJbWFnZSxURGVmb3JtYXRpb25GaWVsZD4NCjo6UGl4ZWxUeXBlDQpEZW1vbnNSZWdp
c3RyYXRpb25GdW5jdGlvbjxURml4ZWRJbWFnZSxUTW92aW5nSW1hZ2UsVERlZm9ybWF0aW9uRmll
bGQ+DQo6OkNvbXB1dGVVcGRhdGUoY29uc3QgTmVpZ2hib3Job29kVHlwZSAmaXQsIHZvaWQgKiBn
ZCwNCiAgICAgICAgICAgICAgICBjb25zdCBGbG9hdE9mZnNldFR5cGUmIGl0a05vdFVzZWQob2Zm
c2V0KSkNCnsNCg0KICBQaXhlbFR5cGUgdXBkYXRlOw0KICB1bnNpZ25lZCBpbnQgajsNCg0KICBJ
bmRleFR5cGUgaW5kZXggPSBpdC5HZXRJbmRleCgpOw0KDQogIC8vIEdldCBmaXhlZCBpbWFnZSBy
ZWxhdGVkIGluZm9ybWF0aW9uDQogIGRvdWJsZSBmaXhlZFZhbHVlOw0KICBDb3ZhcmlhbnRWZWN0
b3JUeXBlIGZpeGVkR3JhZGllbnQ7DQogIGRvdWJsZSBmaXhlZEdyYWRpZW50U3F1YXJlZE1hZ25p
dHVkZSA9IDA7DQoNCiAgLy8gTm90ZTogbm8gbmVlZCB0byBjaGVjayB0aGUgaW5kZXggaXMgd2l0
aGluDQogIC8vIGZpeGVkIGltYWdlIGJ1ZmZlci4gVGhpcyBpcyBkb25lIGJ5IHRoZSBleHRlcm5h
bCBmaWx0ZXIuDQogIGZpeGVkVmFsdWUgPSAoZG91YmxlKSBtX0ZpeGVkSW1hZ2UtPkdldFBpeGVs
KCBpbmRleCApOw0KICBmaXhlZEdyYWRpZW50ID0gbV9GaXhlZEltYWdlR3JhZGllbnRDYWxjdWxh
dG9yLT5FdmFsdWF0ZUF0SW5kZXgoIGluZGV4ICk7DQogIGZvciggdW5zaWduZWQgaW50IGogPSAw
OyBqIDwgSW1hZ2VEaW1lbnNpb247IGorKyApDQogICAgew0KICAgIGZpeGVkR3JhZGllbnRTcXVh
cmVkTWFnbml0dWRlICs9IHZubF9tYXRoX3NxciggZml4ZWRHcmFkaWVudFtqXSApOw0KICAgIH0g
DQoNCiAgLy8gR2V0IG1vdmluZyBpbWFnZSByZWxhdGVkIGluZm9ybWF0aW9uDQogIGRvdWJsZSBt
b3ZpbmdWYWx1ZTsNCiAgUG9pbnRUeXBlIG1hcHBlZFBvaW50Ow0KDQogIGZvciggaiA9IDA7IGog
PCBJbWFnZURpbWVuc2lvbjsgaisrICkNCiAgICB7DQogICAgbWFwcGVkUG9pbnRbal0gPSBkb3Vi
bGUoIGluZGV4W2pdICkgKiBtX0ZpeGVkSW1hZ2VTcGFjaW5nW2pdICsgDQogICAgICBtX0ZpeGVk
SW1hZ2VPcmlnaW5bal07DQogICAgbWFwcGVkUG9pbnRbal0gKz0gaXQuR2V0Q2VudGVyUGl4ZWwo
KVtqXTsNCiAgICB9DQogIGlmKCBtX01vdmluZ0ltYWdlSW50ZXJwb2xhdG9yLT5Jc0luc2lkZUJ1
ZmZlciggbWFwcGVkUG9pbnQgKSApDQogICAgew0KICAgIG1vdmluZ1ZhbHVlID0gbV9Nb3ZpbmdJ
bWFnZUludGVycG9sYXRvci0+RXZhbHVhdGUoIG1hcHBlZFBvaW50ICk7DQogICAgfQ0KICBlbHNl
DQogICAgew0KICAgIGZvciggaiA9IDA7IGogPCBJbWFnZURpbWVuc2lvbjsgaisrICkNCiAgICAg
IHsNCiAgICAgIHVwZGF0ZVtqXSA9IDAuMDsNCiAgICAgIH0NCiAgICByZXR1cm4gdXBkYXRlOw0K
ICAgIH0NCg0KICAvKioNCiAgICogQ29tcHV0ZSBVcGRhdGUuDQogICAqIEluIHRoZSBvcmlnaW5h
bCBlcXVhdGlvbiB0aGUgZGVub21pbmF0b3IgaXMgZGVmaW5lZCBhcyAoZy1mKV4yICsgZ3JhZF9t
YWdeMi4NCiAgICogSG93ZXZlciB0aGVyZSBpcyBhIG1pc21hdGNoIGluIHVuaXRzIGJldHdlZW4g
dGhlIHR3byB0ZXJtcy4gDQogICAqIFRoZSB1bml0cyBmb3IgdGhlIHNlY29uZCB0ZXJtIGlzIGlu
dGVuc2l0eV4yL21tXjIgd2hpbGUgdGhlDQogICAqIHVuaXRzIGZvciB0aGUgZmlyc3QgdGVybSBp
cyBpbnRlbnNpdHleMi4gVGhpcyBtaXNtYXRjaCBpcyBwYXJ0aWN1bGFybHkNCiAgICogcHJvYmxl
bWF0aWMgd2hlbiB0aGUgZml4ZWQgaW1hZ2UgZG9lcyBub3QgaGF2ZSB1bml0IHNwYWNpbmcuDQog
ICAqIEluIHRoaXMgaW1wbGVtZW5hdGlvbiwgd2Ugbm9ybWFsaXplIHRoZSBmaXJzdCB0ZXJtIGJ5
IGEgZmFjdG9yIEssDQogICAqIHN1Y2ggdGhhdCBkZW5vbWluYXRvciA9IChnLWYpXjIvSyArIGdy
YWRfbWFnXjINCiAgICogd2hlcmUgSyA9IG1lYW4gc3F1YXJlIHNwYWNpbmcgdG8gY29tcGVuc2F0
ZSBmb3IgdGhlIG1pc21hdGNoIGluIHVuaXRzLg0KICAgKi8NCiAgZG91YmxlIHNwZWVkVmFsdWUg
PSBmaXhlZFZhbHVlIC0gbW92aW5nVmFsdWU7DQogIA0KICAvLyB1cGRhdGUgdGhlIG1ldHJpYw0K
ICBHbG9iYWxEYXRhU3RydWN0ICpnbG9iYWxEYXRhID0gKEdsb2JhbERhdGFTdHJ1Y3QgKilnZDsN
CiAgZ2xvYmFsRGF0YS0+bV9TdW1PZlNxdWFyZWREaWZmZXJlbmNlICs9IHZubF9tYXRoX3Nxcigg
c3BlZWRWYWx1ZSApOw0KICBnbG9iYWxEYXRhLT5tX051bWJlck9mUGl4ZWxzUHJvY2Vzc2VkICs9
IDE7DQoNCiAgZG91YmxlIGRlbm9taW5hdG9yID0gdm5sX21hdGhfc3FyKCBzcGVlZFZhbHVlICkg
LyBtX05vcm1hbGl6ZXIgKyANCiAgICBmaXhlZEdyYWRpZW50U3F1YXJlZE1hZ25pdHVkZTsNCg0K
ICBpZiAoIHZubF9tYXRoX2FicyhzcGVlZFZhbHVlKSA8IG1fSW50ZW5zaXR5RGlmZmVyZW5jZVRo
cmVzaG9sZCB8fCANCiAgICAgICBkZW5vbWluYXRvciA8IG1fRGVub21pbmF0b3JUaHJlc2hvbGQg
KQ0KICAgIHsNCiAgICBmb3IoIGogPSAwOyBqIDwgSW1hZ2VEaW1lbnNpb247IGorKyApDQogICAg
ICB7DQogICAgICB1cGRhdGVbal0gPSAwLjA7DQogICAgICB9DQogICAgcmV0dXJuIHVwZGF0ZTsN
CiAgICB9DQoNCiAgZm9yKCBqID0gMDsgaiA8IEltYWdlRGltZW5zaW9uOyBqKysgKQ0KICAgIHsN
CiAgICB1cGRhdGVbal0gPSBzcGVlZFZhbHVlICogZml4ZWRHcmFkaWVudFtqXSAvIGRlbm9taW5h
dG9yOw0KICAgIGdsb2JhbERhdGEtPm1fU3VtT2ZTcXVhcmVkQ2hhbmdlICs9IHZubF9tYXRoX3Nx
ciggdXBkYXRlW2pdICk7DQogICAgfQ0KDQogIHJldHVybiB1cGRhdGU7DQoNCn0NCg0KLyoNCiAq
IFVwZGF0ZSB0aGUgbWV0cmljIGFuZCByZWxlYXNlIHRoZSBwZXItdGhyZWFkLWdsb2JhbCBkYXRh
Lg0KICovDQp0ZW1wbGF0ZSA8Y2xhc3MgVEZpeGVkSW1hZ2UsIGNsYXNzIFRNb3ZpbmdJbWFnZSwg
Y2xhc3MgVERlZm9ybWF0aW9uRmllbGQ+DQp2b2lkDQpEZW1vbnNSZWdpc3RyYXRpb25GdW5jdGlv
bjxURml4ZWRJbWFnZSxUTW92aW5nSW1hZ2UsVERlZm9ybWF0aW9uRmllbGQ+DQo6OlJlbGVhc2VH
bG9iYWxEYXRhUG9pbnRlciggdm9pZCAqZ2QgKSBjb25zdA0Kew0KICBHbG9iYWxEYXRhU3RydWN0
ICogZ2xvYmFsRGF0YSA9IChHbG9iYWxEYXRhU3RydWN0ICopIGdkOw0KDQogIG1fTWV0cmljQ2Fs
Y3VsYXRpb25Mb2NrLkxvY2soKTsNCiAgbV9TdW1PZlNxdWFyZWREaWZmZXJlbmNlICArPSBnbG9i
YWxEYXRhLT5tX1N1bU9mU3F1YXJlZERpZmZlcmVuY2U7DQogIG1fTnVtYmVyT2ZQaXhlbHNQcm9j
ZXNzZWQgKz0gZ2xvYmFsRGF0YS0+bV9OdW1iZXJPZlBpeGVsc1Byb2Nlc3NlZDsNCiAgbV9TdW1P
ZlNxdWFyZWRDaGFuZ2UgKz0gZ2xvYmFsRGF0YS0+bV9TdW1PZlNxdWFyZWRDaGFuZ2U7DQogIGlm
ICggbV9OdW1iZXJPZlBpeGVsc1Byb2Nlc3NlZCApDQogICAgew0KICAgIG1fTWV0cmljID0gbV9T
dW1PZlNxdWFyZWREaWZmZXJlbmNlIC8gDQogICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxkb3Vi
bGU+KCBtX051bWJlck9mUGl4ZWxzUHJvY2Vzc2VkICk7IA0KICAgIG1fUk1TQ2hhbmdlID0gdmNs
X3NxcnQoIG1fU3VtT2ZTcXVhcmVkQ2hhbmdlIC8gDQogICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxkb3VibGU+KCBtX051bWJlck9mUGl4ZWxzUHJvY2Vzc2VkICkgKTsgDQogICAgfQ0KICBtX01l
dHJpY0NhbGN1bGF0aW9uTG9jay5VbmxvY2soKTsNCg0KICBkZWxldGUgZ2xvYmFsRGF0YTsNCn0N
Cg0KDQoNCn0gLy8gZW5kIG5hbWVzcGFjZSBpdGsNCg0KI2VuZGlmDQo=

------_=_NextPart_001_01C3F73B.F03AA08A
Content-Type: application/octet-stream;
	name="itkDemonsRegistrationFunction.h"
Content-Transfer-Encoding: base64
Content-Description: itkDemonsRegistrationFunction.h
Content-Disposition: attachment;
	filename="itkDemonsRegistrationFunction.h"

Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQoNCiAgUHJvZ3JhbTogICBJbnNpZ2h0IFNlZ21lbnRhdGlvbiAm
IFJlZ2lzdHJhdGlvbiBUb29sa2l0DQogIE1vZHVsZTogICAgJFJDU2ZpbGU6IGl0a0RlbW9uc1Jl
Z2lzdHJhdGlvbkZ1bmN0aW9uLmgsdiAkDQogIExhbmd1YWdlOiAgQysrDQogIERhdGU6ICAgICAg
JERhdGU6IDIwMDQvMDIvMTEgMjE6Mjk6MTMgJA0KICBWZXJzaW9uOiAgICRSZXZpc2lvbjogMS4y
NSAkDQoNCiAgQ29weXJpZ2h0IChjKSBJbnNpZ2h0IFNvZnR3YXJlIENvbnNvcnRpdW0uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuDQogIFNlZSBJVEtDb3B5cmlnaHQudHh0IG9yIGh0dHA6Ly93d3cuaXRr
Lm9yZy9IVE1ML0NvcHlyaWdodC5odG0gZm9yIGRldGFpbHMuDQoNCiAgICAgVGhpcyBzb2Z0d2Fy
ZSBpcyBkaXN0cmlidXRlZCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuDQogICAg
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVINCiAgICAgUFVSUE9TRS4gIFNlZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj
ZXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uDQoNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLw0KI2lmbmRlZiBf
aXRrRGVtb25zUmVnaXN0cmF0aW9uRnVuY3Rpb25faF8NCiNkZWZpbmUgX2l0a0RlbW9uc1JlZ2lz
dHJhdGlvbkZ1bmN0aW9uX2hfDQoNCiNpbmNsdWRlICJpdGtQREVEZWZvcm1hYmxlUmVnaXN0cmF0
aW9uRnVuY3Rpb24uaCINCiNpbmNsdWRlICJpdGtQb2ludC5oIg0KI2luY2x1ZGUgIml0a0NvdmFy
aWFudFZlY3Rvci5oIg0KI2luY2x1ZGUgIml0a0ludGVycG9sYXRlSW1hZ2VGdW5jdGlvbi5oIg0K
I2luY2x1ZGUgIml0a0xpbmVhckludGVycG9sYXRlSW1hZ2VGdW5jdGlvbi5oIg0KI2luY2x1ZGUg
Iml0a0NlbnRyYWxEaWZmZXJlbmNlSW1hZ2VGdW5jdGlvbi5oIg0KDQpuYW1lc3BhY2UgaXRrIHsN
Cg0KLyoqDQoqIFxjbGFzcyBEZW1vbnNSZWdpc3RyYXRpb25GdW5jdGlvbg0KKg0KKiBUaGlzIGNs
YXNzIGVuY2Fwc3VsYXRlIHRoZSBQREUgd2hpY2ggZHJpdmVzIHRoZSBkZW1vbnMgcmVnaXN0cmF0
aW9uDQoqIGFsZ29yaXRobS4gSXQgaXMgdXNlZCBieSBEZW1vbnNSZWdpc3RyYXRpb25GaWx0ZXIg
dG8gY29tcHV0ZSB0aGUNCiogb3V0cHV0IGRlZm9ybWF0aW9uIGZpZWxkIHdoaWNoIHdpbGwgbWFw
IGEgbW92aW5nIGltYWdlIG9udG8gYQ0KKiBhIGZpeGVkIGltYWdlLg0KKg0KKiBOb24taW50ZWdl
ciBtb3ZpbmcgaW1hZ2UgdmFsdWVzIGFyZSBvYnRhaW5lZCBieSB1c2luZw0KKiBpbnRlcnBvbGF0
aW9uLiBUaGUgZGVmYXVsdCBpbnRlcnBvbGF0b3IgaXMgb2YgdHlwZQ0KKiBMaW5lYXJJbnRlcnBv
bGF0ZUltYWdlRnVuY3Rpb24uIFRoZSB1c2VyIG1heSBzZXQgb3RoZXINCiogaW50ZXJwb2xhdG9y
cyB2aWEgbWV0aG9kIFNldE1vdmluZ0ltYWdlSW50ZXJwb2xhdG9yLiBOb3RlIHRoYXQgdGhlIGlu
cHV0DQoqIGludGVycG9sYXRvciBtdXN0IGRlcml2ZSBmcm9tIGJhc2VjbGFzcyBJbnRlcnBvbGF0
ZUltYWdlRnVuY3Rpb24uDQoqDQoqIFRoaXMgY2xhc3MgaXMgdGVtcGxhdGVkIG92ZXIgdGhlIGZp
eGVkIGltYWdlIHR5cGUsIG1vdmluZyBpbWFnZSB0eXBlLA0KKiBhbmQgdGhlIGRlZm9ybWF0aW9u
IGZpZWxkIHR5cGUuDQoqDQoqIFx3YXJuaW5nIFRoaXMgZmlsdGVyIGFzc3VtZXMgdGhhdCB0aGUg
Zml4ZWQgaW1hZ2UgdHlwZSwgbW92aW5nIGltYWdlIHR5cGUNCiogYW5kIGRlZm9ybWF0aW9uIGZp
ZWxkIHR5cGUgYWxsIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGRpbWVuc2lvbnMuDQoqDQoqIFxz
YSBEZW1vbnNSZWdpc3RyYXRpb25GaWx0ZXINCiogXGluZ3JvdXAgRmluaXRlRGlmZmVyZW5jZUZ1
bmN0aW9ucw0KKi8NCnRlbXBsYXRlPGNsYXNzIFRGaXhlZEltYWdlLCBjbGFzcyBUTW92aW5nSW1h
Z2UsIGNsYXNzIFREZWZvcm1hdGlvbkZpZWxkPg0KY2xhc3MgSVRLX0VYUE9SVCBEZW1vbnNSZWdp
c3RyYXRpb25GdW5jdGlvbiA6DQogICAgcHVibGljIFBERURlZm9ybWFibGVSZWdpc3RyYXRpb25G
dW5jdGlvbjwgVEZpeGVkSW1hZ2UsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVE1vdmluZ0ltYWdlLCANClREZWZvcm1hdGlvbkZpZWxkPg0Kew0KcHVibGlj
Og0KICAvKiogU3RhbmRhcmQgY2xhc3MgdHlwZWRlZnMuICovDQogIHR5cGVkZWYgRGVtb25zUmVn
aXN0cmF0aW9uRnVuY3Rpb24gICAgU2VsZjsNCiAgdHlwZWRlZiBQREVEZWZvcm1hYmxlUmVnaXN0
cmF0aW9uRnVuY3Rpb248IFRGaXhlZEltYWdlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVE1vdmluZ0ltYWdlLCBURGVmb3JtYXRpb25GaWVsZCANCiA+ICAg
IFN1cGVyY2xhc3M7DQogIHR5cGVkZWYgU21hcnRQb2ludGVyPFNlbGY+IFBvaW50ZXI7DQogIHR5
cGVkZWYgU21hcnRQb2ludGVyPGNvbnN0IFNlbGY+IENvbnN0UG9pbnRlcjsNCg0KICAvKiogTWV0
aG9kIGZvciBjcmVhdGlvbiB0aHJvdWdoIHRoZSBvYmplY3QgZmFjdG9yeS4gKi8NCiAgaXRrTmV3
TWFjcm8oU2VsZik7DQoNCiAgLyoqIFJ1bi10aW1lIHR5cGUgaW5mb3JtYXRpb24gKGFuZCByZWxh
dGVkIG1ldGhvZHMpLiAqLw0KICBpdGtUeXBlTWFjcm8oIERlbW9uc1JlZ2lzdHJhdGlvbkZ1bmN0
aW9uLA0KICAgICAgICAgICAgICAgIFBERURlZm9ybWFibGVSZWdpc3RyYXRpb25GdW5jdGlvbiAp
Ow0KDQogIC8qKiBNb3ZpbmdJbWFnZSBpbWFnZSB0eXBlLiAqLw0KICB0eXBlZGVmIHR5cGVuYW1l
IFN1cGVyY2xhc3M6Ok1vdmluZ0ltYWdlVHlwZSAgICAgTW92aW5nSW1hZ2VUeXBlOw0KICB0eXBl
ZGVmIHR5cGVuYW1lIFN1cGVyY2xhc3M6Ok1vdmluZ0ltYWdlUG9pbnRlciAgTW92aW5nSW1hZ2VQ
b2ludGVyOw0KDQogIC8qKiBGaXhlZEltYWdlIGltYWdlIHR5cGUuICovDQogIHR5cGVkZWYgdHlw
ZW5hbWUgU3VwZXJjbGFzczo6Rml4ZWRJbWFnZVR5cGUgICAgIEZpeGVkSW1hZ2VUeXBlOw0KICB0
eXBlZGVmIHR5cGVuYW1lIFN1cGVyY2xhc3M6OkZpeGVkSW1hZ2VQb2ludGVyICBGaXhlZEltYWdl
UG9pbnRlcjsNCiAgdHlwZWRlZiB0eXBlbmFtZSBGaXhlZEltYWdlVHlwZTo6SW5kZXhUeXBlICAg
ICAgSW5kZXhUeXBlOw0KICB0eXBlZGVmIHR5cGVuYW1lIEZpeGVkSW1hZ2VUeXBlOjpTaXplVHlw
ZSAgICAgICBTaXplVHlwZTsNCiAgdHlwZWRlZiB0eXBlbmFtZSBGaXhlZEltYWdlVHlwZTo6U3Bh
Y2luZ1R5cGUgICAgU3BhY2luZ1R5cGU7DQoNCiAgLyoqIERlZm9ybWF0aW9uIGZpZWxkIHR5cGUu
ICovDQogIHR5cGVkZWYgdHlwZW5hbWUgU3VwZXJjbGFzczo6RGVmb3JtYXRpb25GaWVsZFR5cGUg
ICAgRGVmb3JtYXRpb25GaWVsZFR5cGU7DQogIHR5cGVkZWYgdHlwZW5hbWUgU3VwZXJjbGFzczo6
RGVmb3JtYXRpb25GaWVsZFR5cGVQb2ludGVyDQogIERlZm9ybWF0aW9uRmllbGRUeXBlUG9pbnRl
cjsNCg0KICAvKiogSW5oZXJpdCBzb21lIGVudW1zIGZyb20gdGhlIHN1cGVyY2xhc3MuICovDQog
IGl0a1N0YXRpY0NvbnN0TWFjcm8oSW1hZ2VEaW1lbnNpb24sIHVuc2lnbmVkIA0KaW50LFN1cGVy
Y2xhc3M6OkltYWdlRGltZW5zaW9uKTsNCg0KICAvKiogSW5oZXJpdCBzb21lIGVudW1zIGZyb20g
dGhlIHN1cGVyY2xhc3MuICovDQogIHR5cGVkZWYgdHlwZW5hbWUgU3VwZXJjbGFzczo6UGl4ZWxU
eXBlICAgICBQaXhlbFR5cGU7DQogIHR5cGVkZWYgdHlwZW5hbWUgU3VwZXJjbGFzczo6UmFkaXVz
VHlwZSAgICBSYWRpdXNUeXBlOw0KICB0eXBlZGVmIHR5cGVuYW1lIFN1cGVyY2xhc3M6Ok5laWdo
Ym9yaG9vZFR5cGUgICAgTmVpZ2hib3Job29kVHlwZTsNCiAgdHlwZWRlZiB0eXBlbmFtZSBTdXBl
cmNsYXNzOjpGbG9hdE9mZnNldFR5cGUgIEZsb2F0T2Zmc2V0VHlwZTsNCiAgdHlwZWRlZiB0eXBl
bmFtZSBTdXBlcmNsYXNzOjpUaW1lU3RlcFR5cGUgVGltZVN0ZXBUeXBlOw0KDQogIC8qKiBJbnRl
cnBvbGF0b3IgdHlwZS4gKi8NCiAgdHlwZWRlZiBkb3VibGUgQ29vcmRSZXBUeXBlOw0KICB0eXBl
ZGVmIEludGVycG9sYXRlSW1hZ2VGdW5jdGlvbjxNb3ZpbmdJbWFnZVR5cGUsQ29vcmRSZXBUeXBl
PiANCkludGVycG9sYXRvclR5cGU7DQogIHR5cGVkZWYgdHlwZW5hbWUgSW50ZXJwb2xhdG9yVHlw
ZTo6UG9pbnRlciAgICAgICAgIEludGVycG9sYXRvclBvaW50ZXI7DQogIHR5cGVkZWYgdHlwZW5h
bWUgSW50ZXJwb2xhdG9yVHlwZTo6UG9pbnRUeXBlICAgICAgIFBvaW50VHlwZTsNCiAgdHlwZWRl
ZiBMaW5lYXJJbnRlcnBvbGF0ZUltYWdlRnVuY3Rpb248TW92aW5nSW1hZ2VUeXBlLENvb3JkUmVw
VHlwZT4NCiAgRGVmYXVsdEludGVycG9sYXRvclR5cGU7DQoNCiAgLyoqIENvdmFyaWFudCB2ZWN0
b3IgdHlwZS4gKi8NCiAgdHlwZWRlZiBDb3ZhcmlhbnRWZWN0b3I8ZG91YmxlLGl0a0dldFN0YXRp
Y0NvbnN0TWFjcm8oSW1hZ2VEaW1lbnNpb24pPiANCkNvdmFyaWFudFZlY3RvclR5cGU7DQoNCiAg
LyoqIEdyYWRpZW50IGNhbGN1bGF0b3IgdHlwZS4gKi8NCiAgdHlwZWRlZiBDZW50cmFsRGlmZmVy
ZW5jZUltYWdlRnVuY3Rpb248Rml4ZWRJbWFnZVR5cGU+IA0KR3JhZGllbnRDYWxjdWxhdG9yVHlw
ZTsNCiAgdHlwZWRlZiB0eXBlbmFtZSBHcmFkaWVudENhbGN1bGF0b3JUeXBlOjpQb2ludGVyICAg
DQpHcmFkaWVudENhbGN1bGF0b3JQb2ludGVyOw0KDQogIC8qKiBTZXQgdGhlIG1vdmluZyBpbWFn
ZSBpbnRlcnBvbGF0b3IuICovDQogIHZvaWQgU2V0TW92aW5nSW1hZ2VJbnRlcnBvbGF0b3IoIElu
dGVycG9sYXRvclR5cGUgKiBwdHIgKQ0KICB7IG1fTW92aW5nSW1hZ2VJbnRlcnBvbGF0b3IgPSBw
dHI7IH0NCg0KICAvKiogR2V0IHRoZSBtb3ZpbmcgaW1hZ2UgaW50ZXJwb2xhdG9yLiAqLw0KICBJ
bnRlcnBvbGF0b3JUeXBlICogR2V0TW92aW5nSW1hZ2VJbnRlcnBvbGF0b3Iodm9pZCkNCiAgeyBy
ZXR1cm4gbV9Nb3ZpbmdJbWFnZUludGVycG9sYXRvcjsgfQ0KDQogIC8qKiBUaGlzIGNsYXNzIHVz
ZXMgYSBjb25zdGFudCB0aW1lc3RlcCBvZiAxLiAqLw0KICB2aXJ0dWFsIFRpbWVTdGVwVHlwZSBD
b21wdXRlR2xvYmFsVGltZVN0ZXAodm9pZCAqIGl0a05vdFVzZWQoR2xvYmFsRGF0YSkpIA0KY29u
c3QNCiAgeyByZXR1cm4gbV9UaW1lU3RlcDsgfQ0KDQogIC8qKiBSZXR1cm4gYSBwb2ludGVyIHRv
IGEgZ2xvYmFsIGRhdGEgc3RydWN0dXJlIHRoYXQgaXMgcGFzc2VkIHRvDQogICAqIHRoaXMgb2Jq
ZWN0IGZyb20gdGhlIHNvbHZlciBhdCBlYWNoIGNhbGN1bGF0aW9uLiAgKi8NCiAgdmlydHVhbCB2
b2lkICpHZXRHbG9iYWxEYXRhUG9pbnRlcigpIGNvbnN0DQogIHsNCiAgICBHbG9iYWxEYXRhU3Ry
dWN0ICpnbG9iYWwgPSBuZXcgR2xvYmFsRGF0YVN0cnVjdCgpOw0KICAgIGdsb2JhbC0+bV9TdW1P
ZlNxdWFyZWREaWZmZXJlbmNlICA9IDAuMDsNCiAgICBnbG9iYWwtPm1fTnVtYmVyT2ZQaXhlbHNQ
cm9jZXNzZWQgPSAwTDsNCiAgICBnbG9iYWwtPm1fU3VtT2ZTcXVhcmVkQ2hhbmdlICAgICAgPSAw
Ow0KICAgIHJldHVybiBnbG9iYWw7DQogIH0NCg0KICAvKiogUmVsZWFzZSBtZW1vcnkgZm9yIGds
b2JhbCBkYXRhIHN0cnVjdHVyZS4gKi8NCiAgdmlydHVhbCB2b2lkIFJlbGVhc2VHbG9iYWxEYXRh
UG9pbnRlciggdm9pZCAqR2xvYmFsRGF0YSApIGNvbnN0Ow0KDQogIC8qKiBTZXQgdGhlIG9iamVj
dCdzIHN0YXRlIGJlZm9yZSBlYWNoIGl0ZXJhdGlvbi4gKi8NCiAgdmlydHVhbCB2b2lkIEluaXRp
YWxpemVJdGVyYXRpb24oKTsNCg0KICAvKiogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGEgZmlu
aXRlIGRpZmZlcmVuY2Ugc29sdmVyIGltYWdlIGZpbHRlciBhdA0KICAgKiBlYWNoIHBpeGVsIHRo
YXQgZG9lcyBub3QgbGllIG9uIGEgZGF0YSBzZXQgYm91bmRhcnkgKi8NCiAgdmlydHVhbCBQaXhl
bFR5cGUgIENvbXB1dGVVcGRhdGUoY29uc3QgTmVpZ2hib3Job29kVHlwZSAmbmVpZ2hib3Job29k
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpnbG9iYWxEYXRhLA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdE9mZnNldFR5cGUg
Jm9mZnNldCA9IA0KRmxvYXRPZmZzZXRUeXBlKDAuMCkpOw0KDQogIC8qKiBHZXQgdGhlIG1ldHJp
YyB2YWx1ZS4gVGhlIG1ldHJpYyB2YWx1ZSBpcyB0aGUgbWVhbiBzcXVhcmUgZGlmZmVyZW5jZSAN
CiAgICogaW4gaW50ZW5zaXR5IGJldHdlZW4gdGhlIGZpeGVkIGltYWdlIGFuZCB0cmFuc2Zvcm1p
bmcgbW92aW5nIGltYWdlIA0KICAgKiBjb21wdXRlZCBvdmVyIHRoZSB0aGUgb3ZlcmxhcHBpbmcg
cmVnaW9uIGJldHdlZW4gdGhlIHR3byBpbWFnZXMuICovDQogIHZpcnR1YWwgZG91YmxlIEdldE1l
dHJpYygpIGNvbnN0DQogICAgeyByZXR1cm4gbV9NZXRyaWM7IH0NCg0KICAvKiogR2V0IHRoZSBy
bXMgY2hhbmdlIGluIGRlZm9ybWF0aW9uIGZpZWxkLiAqLw0KICB2aXJ0dWFsIGRvdWJsZSBHZXRS
TVNDaGFuZ2UoKSBjb25zdA0KICAgIHsgcmV0dXJuIG1fUk1TQ2hhbmdlOyB9DQoNCnByb3RlY3Rl
ZDoNCiAgRGVtb25zUmVnaXN0cmF0aW9uRnVuY3Rpb24oKTsNCiAgfkRlbW9uc1JlZ2lzdHJhdGlv
bkZ1bmN0aW9uKCkge30NCiAgdm9pZCBQcmludFNlbGYoc3RkOjpvc3RyZWFtJiBvcywgSW5kZW50
IGluZGVudCkgY29uc3Q7DQoNCiAgLyoqIEZpeGVkSW1hZ2UgaW1hZ2UgbmVpZ2hib3Job29kIGl0
ZXJhdG9yIHR5cGUuICovDQogIHR5cGVkZWYgQ29uc3ROZWlnaGJvcmhvb2RJdGVyYXRvcjxGaXhl
ZEltYWdlVHlwZT4gDQpGaXhlZEltYWdlTmVpZ2hib3Job29kSXRlcmF0b3JUeXBlOw0KDQogIC8q
KiBBIGdsb2JhbCBkYXRhIHR5cGUgZm9yIHRoaXMgY2xhc3Mgb2YgZXF1YXRpb24uIFVzZWQgdG8g
c3RvcmUNCiAgICogaW5mb3JtYXRpb24gZm9yIGNvbXB1dGluZyB0aGUgbWV0cmljLiAqLw0KICBz
dHJ1Y3QgR2xvYmFsRGF0YVN0cnVjdA0KICB7DQogICAgZG91YmxlICAgICAgICAgIG1fU3VtT2ZT
cXVhcmVkRGlmZmVyZW5jZTsNCiAgICB1bnNpZ25lZCBsb25nICAgbV9OdW1iZXJPZlBpeGVsc1By
b2Nlc3NlZDsNCiAgICBkb3VibGUgICAgICAgICAgbV9TdW1PZlNxdWFyZWRDaGFuZ2U7DQogIH07
DQoNCnByaXZhdGU6DQogIERlbW9uc1JlZ2lzdHJhdGlvbkZ1bmN0aW9uKGNvbnN0IFNlbGYmKTsg
Ly9wdXJwb3NlbHkgbm90IGltcGxlbWVudGVkDQogIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFNlbGYm
KTsgLy9wdXJwb3NlbHkgbm90IGltcGxlbWVudGVkDQoNCiAgLyoqIENhY2hlIGZpeGVkIGltYWdl
IGluZm9ybWF0aW9uLiAqLw0KICBTcGFjaW5nVHlwZSAgICAgICAgICAgICAgICAgICAgIG1fRml4
ZWRJbWFnZVNwYWNpbmc7DQogIFBvaW50VHlwZSAgICAgICAgICAgICAgICAgICAgICAgbV9GaXhl
ZEltYWdlT3JpZ2luOw0KICBkb3VibGUgICAgICAgICAgICAgICAgICAgICAgICAgIG1fTm9ybWFs
aXplcjsNCg0KICAvKiogRnVuY3Rpb24gdG8gY29tcHV0ZSBkZXJpdmF0aXZlcyBvZiB0aGUgZml4
ZWQgaW1hZ2UuICovDQogIEdyYWRpZW50Q2FsY3VsYXRvclBvaW50ZXIgICAgICAgbV9GaXhlZElt
YWdlR3JhZGllbnRDYWxjdWxhdG9yOw0KDQogIC8qKiBGdW5jdGlvbiB0byBpbnRlcnBvbGF0ZSB0
aGUgbW92aW5nIGltYWdlLiAqLw0KICBJbnRlcnBvbGF0b3JQb2ludGVyICAgICAgICAgICAgIG1f
TW92aW5nSW1hZ2VJbnRlcnBvbGF0b3I7DQoNCiAgLyoqIFRoZSBnbG9iYWwgdGltZXN0ZXAuICov
DQogIFRpbWVTdGVwVHlwZSAgICAgICAgICAgICAgICAgICAgbV9UaW1lU3RlcDsNCg0KICAvKiog
VGhyZXNob2xkIGJlbG93IHdoaWNoIHRoZSBkZW5vbWluYXRvciB0ZXJtIGlzIGNvbnNpZGVyZWQg
emVyby4gKi8NCiAgZG91YmxlICAgICAgICAgICAgICAgICAgICAgICAgICBtX0Rlbm9taW5hdG9y
VGhyZXNob2xkOw0KDQogIC8qKiBUaHJlc2hvbGQgYmVsb3cgd2hpY2ggdHdvIGludGVuc2l0eSB2
YWx1ZSBhcmUgYXNzdW1lZCB0byBtYXRjaC4gKi8NCiAgZG91YmxlICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX0ludGVuc2l0eURpZmZlcmVuY2VUaHJlc2hvbGQ7DQoNCiAgLyoqIFRoZSBtZXRy
aWMgdmFsdWUgaXMgdGhlIG1lYW4gc3F1YXJlIGRpZmZlcmVuY2UgaW4gaW50ZW5zaXR5IGJldHdl
ZW4NCiAgICogdGhlIGZpeGVkIGltYWdlIGFuZCB0cmFuc2Zvcm1pbmcgbW92aW5nIGltYWdlIGNv
bXB1dGVkIG92ZXIgdGhlIA0KICAgKiB0aGUgb3ZlcmxhcHBpbmcgcmVnaW9uIGJldHdlZW4gdGhl
IHR3byBpbWFnZXMuICovDQogIG11dGFibGUgZG91YmxlICAgICAgICAgICAgICAgICAgbV9NZXRy
aWM7DQogIG11dGFibGUgZG91YmxlICAgICAgICAgICAgICAgICAgbV9TdW1PZlNxdWFyZWREaWZm
ZXJlbmNlOw0KICBtdXRhYmxlIHVuc2lnbmVkIGxvbmcgICAgICAgICAgIG1fTnVtYmVyT2ZQaXhl
bHNQcm9jZXNzZWQ7DQogIG11dGFibGUgZG91YmxlICAgICAgICAgICAgICAgICAgbV9STVNDaGFu
Z2U7DQogIG11dGFibGUgZG91YmxlICAgICAgICAgICAgICAgICAgbV9TdW1PZlNxdWFyZWRDaGFu
Z2U7DQoNCiAgLyoqIE11dGV4IGxvY2sgdG8gcHJvdGVjdCBtb2RpZmljYXRpb24gdG8gbWV0cmlj
LiAqLw0KICBtdXRhYmxlIFNpbXBsZUZhc3RNdXRleExvY2sgICAgIG1fTWV0cmljQ2FsY3VsYXRp
b25Mb2NrOw0KDQp9Ow0KDQoNCn0gLy8gZW5kIG5hbWVzcGFjZSBpdGsNCg0KI2lmbmRlZiBJVEtf
TUFOVUFMX0lOU1RBTlRJQVRJT04NCiNpbmNsdWRlICJpdGtEZW1vbnNSZWdpc3RyYXRpb25GdW5j
dGlvbi50eHgiDQojZW5kaWYNCg0KI2VuZGlmDQoNCg==

------_=_NextPart_001_01C3F73B.F03AA08A--