JESS: [EXTERNAL] Problems with fuzzy jess implementations

Martín Rodríguez <[email protected]> Tue, 2 Jul 2013 23:44:32 -0300
Newsgroups gmane.comp.java.jess
Message-ID <CAJoi6TKDF2ikTnLG7nC8TgWoRS2jnmnWk1r9+_7dcosQwV7RxQ@mail.gmail.com>
--047d7b5d47b803119304e09271c2
Content-Transfer-Encoding: 7bit
Content-Type: multipart/alternative;
 boundary=047d7b5d47b803116704e09271c0


--047d7b5d47b803116704e09271c0
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
 charset=iso-8859-1

Dear Doctor Orchar,

Hi my name is Martin Rodriguez and Im studen of engineering. As final
project Im developing a system with Jade, Jess and fuzzy jess.
The purpose of the system is to provide medical diagnosis.
Thats why i needed a rules based system with backward chaining, and I
choose Jess.

Well, my problem is when I begin to use FuzzyJ on my Jess files.

I send you as an attachment, a short file with the code complete.

My first problem occurs when I write the next rule:

*(defrule intensidad_tos*
* (declare (auto-focus TRUE))*
*        (check diagnostico-b)*
*        (answer (ident fuzzy_tos) (text ?ht&:(fuzzy-match ?ht
"secaContinua")))*
*=>*
*        (assert (tos (new nrc.fuzzy.FuzzyValue ?*fuzzyTos*
"secaContinua")))*
*)*
*
*
this code does not even compile and send me the next error message:

*Jess reported an error in routine ReteCompiler.addRule.**  Message: Can't
use funcalls in backchained patterns text.*

Well, my next and last problem is when I remove de line * (answer (ident
fuzzy_tos) (text ?ht&:(fuzzy-match ?ht "secaContinua"))) *on the rule
before, and I replace with
*(answer (ident fuzzy_tos) (text 5)).*
I response with a number 5 and the rule asserts the *tos FuzzyValue. *That
trigger the next rule:

*(defrule intensidad_dolor_cabeza*
* (declare (auto-focus TRUE))*
*        (check diagnostico-b)*
*        (tos ?t&:(fuzzy-match ?t "secaContinua"))*
*        (answer (ident fuzzy_dolor_cabeza) (text 5))*
*=>*
*        (assert (dolor_de_cabeza (new nrc.fuzzy.FuzzyValue
?*fuzzyDolorCabeza* "intenso")))*
*)*
*
*
but when this rule trigger, send me the next error:

*Jess reported an error in routine fuzzy-match*
* while executing (fuzzy-match ?t(0,0,0) "secaContinua")*
* while executing rule LHS (MTEQ)*
* while executing rule LHS (MTELN)*
* while executing rule LHS (TECT)*
* while executing (assert (interview::tos (new nrc.fuzzy.FuzzyValue
?*fuzzyTos* "secaContinua")))*
* while executing defrule interview::intensidad_tos.*
*  Message: Error during execution.*
*
*
Please, I send you the clp file complete on the attachment, and if you can
help me I'll be very grateful, because Im stuck with this problem.
Thanks again for your time!!

regards!!

Martin Rodriguez

--047d7b5d47b803116704e09271c0
Content-Type: text/html;
 charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Dear Doctor Orchar,<div><br></div><div style>Hi my name is=
 Martin Rodriguez and Im studen of engineering.=A0As final project Im devel=
oping a system with Jade, Jess and fuzzy jess.</div><div style>The purpose =
of the system is to provide medical diagnosis.</div>
<div style>Thats why i needed a rules based system with backward chaining, =
and I choose Jess.</div><div style><br></div><div style>Well, my problem is=
 when I begin to use FuzzyJ on my Jess files.</div><div style><br></div>
<div style>I send you as an attachment, a short file with the code complete=
.</div><div style><br></div><div style>My first problem occurs when I write=
 the next rule:</div><div style><br></div><div style><div><b>(defrule inten=
sidad_tos</b></div>
<div><b><span class=3D"" style=3D"white-space:pre">	</span>(declare (auto-f=
ocus TRUE))</b></div><div><b>=A0 =A0 =A0 =A0 (check diagnostico-b)</b></div=
><div><b>=A0 =A0 =A0 =A0 (answer (ident fuzzy_tos) (text ?ht&amp;:(fuzzy-ma=
tch ?ht &quot;secaContinua&quot;)))</b></div>
<div><b>=3D&gt;</b></div><div><b>=A0 =A0 =A0 =A0 (assert (tos (new nrc.fuzz=
y.FuzzyValue ?*fuzzyTos* &quot;secaContinua&quot;)))</b></div><div><b>)</b>=
</div><div><b><br></b></div><div>this code does not even compile and send m=
e the next error message:<br>
</div><div><br></div><div><div><font color=3D"#ff0000"><b>Jess reported an =
error in routine ReteCompiler.addRule.</b></font><b style=3D"color:rgb(255,=
0,0)">=A0 Message: Can&#39;t use funcalls in backchained patterns text.</b>=
</div>
</div><div><br></div><div style><font color=3D"#000000">Well, my next and l=
ast problem is when I remove de line=A0</font><b>=A0(answer (ident fuzzy_to=
s) (text ?ht&amp;:(fuzzy-match ?ht &quot;secaContinua&quot;))) </b>on the r=
ule before, and I replace with</div>
<div style><b>(answer (ident fuzzy_tos) (text 5)).</b></div><div style>I re=
sponse with a number 5 and the rule asserts the <b>tos FuzzyValue. </b>That=
 trigger the next rule:</div><div style><br></div><div style><div><b>(defru=
le intensidad_dolor_cabeza</b></div>
<div><b><span class=3D"" style=3D"white-space:pre">	</span>(declare (auto-f=
ocus TRUE))</b></div><div><b>=A0 =A0 =A0 =A0 (check diagnostico-b)</b></div=
><div><b>=A0 =A0 =A0 =A0 (tos ?t&amp;:(fuzzy-match ?t &quot;secaContinua&qu=
ot;))</b></div><div>
<b>=A0 =A0 =A0 =A0 (answer (ident fuzzy_dolor_cabeza) (text 5))</b></div><d=
iv><b>=3D&gt;</b></div><div><b>=A0 =A0 =A0 =A0 (assert (dolor_de_cabeza (ne=
w nrc.fuzzy.FuzzyValue ?*fuzzyDolorCabeza* &quot;intenso&quot;)))</b></div>=
<div><b>)</b></div>
<div><b><br></b></div><div style>but when this rule trigger, send me the ne=
xt error:</div><div style><br></div><div style><div><b><font color=3D"#ff00=
00">Jess reported an error in routine fuzzy-match</font></b></div><div><b><=
font color=3D"#ff0000"><span class=3D"" style=3D"white-space:pre">	</span>w=
hile executing (fuzzy-match ?t(0,0,0) &quot;secaContinua&quot;)</font></b><=
/div>
<div><b><font color=3D"#ff0000"><span class=3D"" style=3D"white-space:pre">=
	</span>while executing rule LHS (MTEQ)</font></b></div><div><b><font color=
=3D"#ff0000"><span class=3D"" style=3D"white-space:pre">	</span>while execu=
ting rule LHS (MTELN)</font></b></div>
<div><b><font color=3D"#ff0000"><span class=3D"" style=3D"white-space:pre">=
	</span>while executing rule LHS (TECT)</font></b></div><div><b><font color=
=3D"#ff0000"><span class=3D"" style=3D"white-space:pre">	</span>while execu=
ting (assert (interview::tos (new nrc.fuzzy.FuzzyValue ?*fuzzyTos* &quot;se=
caContinua&quot;)))</font></b></div>
<div><b><font color=3D"#ff0000"><span class=3D"" style=3D"white-space:pre">=
	</span>while executing defrule interview::intensidad_tos.</font></b></div>=
<div><b><font color=3D"#ff0000">=A0 Message: Error during execution.</font>=
</b></div>
<div><b><font color=3D"#ff0000"><br></font></b></div><div style><font color=
=3D"#000000">Please, I send you the clp file complete on the attachment, an=
d if you can help me=A0I&#39;ll be very grateful, because Im stuck with thi=
s problem.</font></div>
<div style><font color=3D"#000000">Thanks again for your time!!</font></div=
><div style><font color=3D"#000000"><br></font></div><div style><font color=
=3D"#000000">regards!!</font></div><div style><font color=3D"#000000"><br><=
/font></div>
<div style><font color=3D"#000000">Martin Rodriguez</font></div><div><br></=
div></div></div></div></div>

--047d7b5d47b803116704e09271c0--

--047d7b5d47b803119304e09271c2
X-Attachment-Id: f_hinx5p1y0
Content-Type: application/octet-stream;
 name=Motor_Diagnostico_General.clp
Content-Disposition: attachment;
 filename=Motor_Diagnostico_General.clp
Content-Transfer-Encoding: base64

KGltcG9ydCBucmMuZnV6enkuKikNCihpbXBvcnQgbnJjLmZ1enp5Lmplc3MuRnV6enlNYWluKQ0K
DQo7O1RlbXBsYXRlcyBuZWNlc2FyaW9zIGVuIG1vZHVsbyBNQUlODQooZGVmdGVtcGxhdGUgcXVl
c3Rpb24gKHNsb3QgdGV4dCkgKHNsb3QgdHlwZSkgKHNsb3QgaWRlbnQpKQ0KKGRlZnRlbXBsYXRl
IGFuc3dlciAoc2xvdCBpZGVudCkgKHNsb3QgdGV4dCkpDQooZGVmdGVtcGxhdGUgcmVjb21tZW5k
YXRpb24gKHNsb3QgZXhwbGljYWNpb24pKQ0KDQooZGVmZnVuY3Rpb24gTUFJTjo6cmVjb21tZW5k
LWFjdGlvbiAoP2FjdGlvbikNCgkiRGEgbGEgaW5zdHJ1Y2Npb24gZmluYWwgYWwgdXN1YXJpbyIN
CgkocHJpbnRvdXQgdCA/YWN0aW9uIGNybGYpKQ0KDQo7O0Z1enp5IHZhcmlhYmxlcw0KKGRlZmds
b2JhbCA/KmZ1enp5VG9zKiA9IChuZXcgRnV6enlWYXJpYWJsZSAiSW50ZW5zaWRhZF9kZV9sYV90
b3MiIDAuMCA1LjAgImVudGVyb3MiKSkNCihkZWZnbG9iYWwgPypmdXp6eURvbG9yQ2FiZXphKiA9
IChuZXcgRnV6enlWYXJpYWJsZSAiSW50ZW5zaWRhZF9kZWxfZG9sb3JfZGVfY2FiZXphIiAwLjAg
NS4wICJlbnRlcm9zIikpDQooZGVmZ2xvYmFsID8qZnV6enlFc2NhbG9mcmlvcyogPSAobmV3IEZ1
enp5VmFyaWFibGUgIkZyZWN1ZW5jaWFfZGVfZXNjYWxvZnJpb3MiIDAuMCA1LjAgImVudGVyb3Mi
KSkNCihkZWZnbG9iYWwgPypmdXp6eUNhbnNhbmNpbyogPSAobmV3IEZ1enp5VmFyaWFibGUgIklu
dGVuc2lkYWRfZGVsX2NhbnNhbmNpbyIgMC4wIDUuMCAiZW50ZXJvcyIpKQ0KKGRlZmdsb2JhbCA/
KmZ1enp5RG9sb3JHYXJnYW50YSogPSAobmV3IEZ1enp5VmFyaWFibGUgIkludGVuc2lkYWRfZGVs
X2RvbG9yX2RlX2dhcmdhbnRhIiAwLjAgNS4wICJlbnRlcm9zIikpDQooZGVmZ2xvYmFsID8qZnV6
enlNb3F1ZW8qID0gKG5ldyBGdXp6eVZhcmlhYmxlICJGcmVjdWVuY2lhX2RlbF9tb3F1ZW8iIDAu
MCA1LjAgImVudGVyb3MiKSkNCihkZWZnbG9iYWwgPypmdXp6eURvbG9yZXNNdXNjdWxhcmVzKiA9
IChuZXcgRnV6enlWYXJpYWJsZSAiSW50ZW5zaWRhZF9kZV9sb3NfZG9sb3Jlc19tdXNjdWxhcmVz
IiAwLjAgNS4wICJlbnRlcm9zIikpDQooZGVmZ2xvYmFsID8qZnV6enlBcmRvck9qb3MqID0gKG5l
dyBGdXp6eVZhcmlhYmxlICJJbnRlbnNpZGFkX2RlbF9hcmRvcl9kZV9vam9zIiAwLjAgNS4wICJl
bnRlcm9zIikpDQoNCihkZWZnbG9iYWwgPypmdXp6eURpYWdub3N0aWNvR3JpcGUqID0gKG5ldyBG
dXp6eVZhcmlhYmxlICJEaWFnbm9zdGljb19ncmlwYWwiIDAuMCA1LjAgImVudGVyb3MiKSkNCg0K
OztGYWN0cw0KKGRlZmZhY3RzIE1BSU46OnF1ZXN0aW9uLWRhdGEJDQogICAgKHF1ZXN0aW9uIChp
ZGVudCBtYXlvcl9lZGFkKSAodHlwZSB5ZXMtbm8pICh0ZXh0ICJFcyBtYXlvciBkZSAxOCBhw7Fv
cz8iKSkNCiAgICAocXVlc3Rpb24gKGlkZW50IGZpZWJyZSkgKHR5cGUgeWVzLW5vKSAodGV4dCAi
VGllbmUgZmllYnJlIG8gZXN0YSBpbmhpYmlkYSBwb3IgYW50aXBpcmV0aWNvcz8iKSkNCiAgICAo
cXVlc3Rpb24gKGlkZW50IHRvc19kb2xvcl9nYXJnYW50YSkgKHR5cGUgeWVzLW5vKSAodGV4dCAi
VG9zIG8gZG9sb3IgZGUgZ2FyZ2FudGE/IikpICAgIA0KICAgIChxdWVzdGlvbiAoaWRlbnQgaW5p
Y2lvX2ZpZWJyZSkgKHR5cGUgeWVzLW5vKSAodGV4dCAiTGEgZmllYnJlIHR1dm8gaW5pY2lvIHN1
Yml0byBpZ3VhbCBvIG1heW9yIGEgMzkgwrpDPyIpKQ0KDQogICAgO0ZJWCBpbnRlZ2VyIG9yIG5v
dA0KICAgIChxdWVzdGlvbiAoaWRlbnQgZnV6enlfdG9zKSAodHlwZSBpbnRlZ2VyKSAodGV4dCAi
VG9zPywgTWVub3MgaW50ZW5zYSBvIFNlY2EgeSBDb250aW51YT8gKDAgYSA1KSIpKQ0KICAgIChx
dWVzdGlvbiAoaWRlbnQgZnV6enlfZG9sb3JfY2FiZXphKSAodHlwZSB0ZXh0KSAodGV4dCAiRG9s
b3IgZGUgY2FiZXphPywgZGUgbWVub3IgaW50ZW5zaWRhZCBvIGludGVuc28/ICgwIGEgNSkiKSkN
CiAgICAocXVlc3Rpb24gKGlkZW50IGZ1enp5X2VzY2Fsb2ZyaW9zKSAodHlwZSB0ZXh0KSAodGV4
dCAiRXNjYWxvZnJpb3M/LCBlc3BvcmFkaWNvcyBvIGZyZWN1ZW50ZXM/ICgwIGEgNSkiKSkNCiAg
ICAocXVlc3Rpb24gKGlkZW50IGZ1enp5X2NhbnNhbmNpbykgKHR5cGUgdGV4dCkgKHRleHQgIkNh
bnNhbmNpbz8sIE1vZGVyYWRvIG8gZXh0cmVtbyAoMCBhIDUpIikpDQogICAgKHF1ZXN0aW9uIChp
ZGVudCBmdXp6eV9kb2xvcl9nYXJnYW50YSkgKHR5cGUgdGV4dCkgKHRleHQgIkRvbG9yIGRlIGdh
cmdhbnRhPywgTW9kZXJhZG8gbyBFeHRyZW1vPyAoMCBhIDUpIikpDQogICAgKHF1ZXN0aW9uIChp
ZGVudCBmdXp6eV9tb3F1ZW8pICh0eXBlIHRleHQpICh0ZXh0ICJNb3F1ZW8/LCBQb2NvIG8gRnVl
cnRlIGNvbiBjb25nZXN0aW9uPyAoMCBhIDUpIikpDQogICAgKHF1ZXN0aW9uIChpZGVudCBmdXp6
eV9kb2xvcmVzX211c2N1bGFyZXMpICh0eXBlIHRleHQpICh0ZXh0ICJEb2xvcmVzIG11c2N1bGFy
ZXM/LCBtb2RlcmFkb3MgbyBpbnRlbnNvcz8gKDAgYSA1KSIpKQ0KICAgIChxdWVzdGlvbiAoaWRl
bnQgZnV6enlfYXJkb3Jfb2pvcykgKHR5cGUgdGV4dCkgKHRleHQgIkFyZG9yIGRlIG9qb3M/LCBs
ZXZlIG8gaW50ZW5zb3M/ICgwIGEgNSkiKSkNCikNCg0KKGRvLWJhY2t3YXJkLWNoYWluaW5nIGFu
c3dlcikNCg0KOyoqKioqKioqKioqKioqKioqKioqDQo7KiogTW9kdWxvIHRyaWdnZXIgKioNCjsq
KioqKioqKioqKioqKioqKioqKg0KDQooZGVmbW9kdWxlIHRyaWdnZXIpDQoNCihkZWZydWxlIHRy
aWdnZXI6OnN1cHBseS1hbnN3ZXJzDQoJKGRlY2xhcmUgKGF1dG8tZm9jdXMgVFJVRSkpDQoJKE1B
SU46Om5lZWQtYW5zd2VyIChpZGVudCA/aWQpKQ0KCShub3QgKE1BSU46OmFuc3dlciAoaWRlbnQg
P2lkKSkpDQoJKG5vdCAoTUFJTjo6YXNrID8pKQ0KPT4NCgkoYXNzZXJ0IChNQUlOOjphc2sgP2lk
KSkNCgkocmV0dXJuKSkNCg0KOyoqKioqKioqKioqKioqKioNCjsqKiBNb2R1bG8gYXNrICoqDQo7
KioqKioqKioqKioqKioqKg0KDQo7dHlwZXM6IHllcy1ubywgbnVtZXJpYywgdGV4dA0KDQooZGVm
bW9kdWxlIGFzaykNCjs7IEVzdGEgZnVuY2lvbiBjaGVxdWVhIHF1ZSBsbyBxdWUgc2UgcHJlZ3Vu
dGUgc2VhIHZhbGlkbw0KOzsgZW4gbnVlc3RybyBjYXNvIHZhIGEgc2VyLCB5ZXMtbm8geSBudW1l
cmljbyB5IHRleHRvIHF1ZSBlcyBsYSByZXNwdWVzdGEgRnV6enkNCg0KKGRlZmZ1bmN0aW9uIGlz
LW9mLXR5cGUgKD9hbnN3ZXIgP3R5cGUpDQogICAgIkNoZWNrIHRoYXQgdGhlIGFuc3dlciBoYXMg
dGhlIHJpZ2h0IGZvcm0iDQogICAgKGlmIChlcSA/dHlwZSB5ZXMtbm8pIHRoZW4NCgkocmV0dXJu
IChvciAoZXEgP2Fuc3dlciBzaSkgKGVxID9hbnN3ZXIgbm8pKSkpDQogICAgKGlmIChlcSA/dHlw
ZSBpbnRlZ2VyKSB0aGVuDQogICAgICAgIChyZXR1cm4gKGlzLWEtbnVtYmVyID9hbnN3ZXIpKSkN
CiAgICA7OyBwbGFpbiB0ZXh0DQogICAgKHJldHVybiAoPiAoc3RyLWxlbmd0aCA/YW5zd2VyKSAw
KSkpDQoNCjs7IEVzdGEgZnVuY2lvbiBkYSBsYSBwb3NpYmlsaWRhZCBhbCB1c3VhcmlvIGRlIGlu
Z3Jlc2FyIGxhIHByZWd1bnRhLiANCihkZWZmdW5jdGlvbiBhc2stdXNlciAoP3F1ZXN0aW9uID90
eXBlKQ0KCSJBc2sgYSBxdWVzdGlvbiwgYW5kIHJldHVybiB0aGUgYW5zd2VyIg0KCShiaW5kID9h
bnN3ZXIgIiIpDQoJKHdoaWxlIChub3QgKGlzLW9mLXR5cGUgP2Fuc3dlciA/dHlwZSkpIGRvDQoJ
KHByaW50b3V0IHQgP3F1ZXN0aW9uICIgIikNCgkoaWYgKGVxID90eXBlIHllcy1ubykgdGhlbg0K
CShwcmludG91dCB0ICIoc2kgbyBubykgIikpDQogICAgICAgIChpZiAoZXEgP3R5cGUgaW50ZWdl
cikgdGhlbg0KCShwcmludG91dCB0ICIoaW5ncmVzZSB1biBudW1lcm8pICIpKQ0KCShiaW5kID9h
bnN3ZXIgKHJlYWQpKSkNCgkocmV0dXJuID9hbnN3ZXIpKQ0KDQooZGVmcnVsZSBhc2stcXVlc3Rp
b24tYnktaWQNCgkiQXNrIGEgcXVlc3Rpb24gYW5kIGFzc2VydCB0aGUgYW5zd2VyIg0KCShkZWNs
YXJlIChhdXRvLWZvY3VzIFRSVUUpKQ0KCTs7IElmIHRoZXJlIGlzIGEgcXVlc3Rpb24gd2l0aCBp
ZGVudCA/aWQuLi4NCgkocXVlc3Rpb24gKGlkZW50ID9pZCkgKHRleHQgP3RleHQpICh0eXBlID90
eXBlKSkNCgk7OyAuLi4gYW5kIHRoZXJlIGlzIG5vIGFuc3dlciBmb3IgaXQNCgkobm90IChhbnN3
ZXIgKGlkZW50ID9pZCkpKQ0KCTs7IC4uLiBhbmQgdGhlIHRyaWdnZXIgZmFjdCBmb3IgdGhpcyBx
dWVzdGlvbiBleGlzdHMNCgk/YXNrIDwtIChNQUlOOjphc2sgP2lkKQ0KPT4NCgk7OyBBc2sgdGhl
IHF1ZXN0aW9uDQoJKGJpbmQgP2Fuc3dlciAoYXNrLXVzZXIgP3RleHQgP3R5cGUpKQ0KCTs7IEFz
c2VydCB0aGUgYW5zd2VyIGFzIGEgZmFjdA0KCShhc3NlcnQgKGFuc3dlciAoaWRlbnQgP2lkKSAo
dGV4dCA/YW5zd2VyKSkpDQoJOzsgUmVtb3ZlIHRoZSB0cmlnZ2VyDQoJKHJldHJhY3QgP2FzaykN
Cgk7OyBBbmQgZmluYWxseSwgZXhpdCB0aGlzIG1vZHVsZQ0KCShyZXR1cm4pKQ0KDQooZGVmZnVu
Y3Rpb24gaXMtYS1udW1iZXIgKD92YWx1ZSkNCiAgICAiUmV0dXJuIFRSVUUgaWYgP3ZhbHVlIGlz
IGEgbnVtYmVyIg0KICAgICh0cnkNCiAgICAoaW50ZWdlciA/dmFsdWUpDQogICAgKHJldHVybiBU
UlVFKQ0KICAgIGNhdGNoDQogICAgKHJldHVybiBGQUxTRSkpKQ0KDQo7KioqKioqKioqKioqKioq
KioqKioqKioNCjsqKiBNb2R1bG8gaW50ZXJ2aWV3ICAqKg0KOyoqKioqKioqKioqKioqKioqKioq
KioqDQoNCihkZWZtb2R1bGUgaW50ZXJ2aWV3KQ0KDQooZGVmcnVsZSBkaWFnb25vc3RpY29fYV9t
YXlvcl9lZGFkDQoJKGRlY2xhcmUgKGF1dG8tZm9jdXMgVFJVRSkpDQoJKGFuc3dlciAoaWRlbnQg
bWF5b3JfZWRhZCkgKHRleHQgbm8pKQ0KPT4NCgkoTUFJTjo6cmVjb21tZW5kLWFjdGlvbiAiQXVu
cXVlIGxhIGluZmx1ZW56YSBubyBzZSBwdWVkZSBkZXNjYXJ0YXIgZW4gZXN0ZSBwYWNpZW50ZSwg
ZXN0ZSBhbGdvcml0bW8gbm8gZGViZSBzZXIgdG9tYW5kbyBlbiBjdWVudGEgZW4gZWwgZGlhZ25v
c3RpY28uIENvbnN1bHRlIGEgdW4gbWVkaWNvIHBhcmEgZGlhZ25vc3RpY28gZGUgc3UgcG9zaWJs
ZSBlbmZlcm1lZGFkLiIpDQoJKGhhbHQpKQ0KDQooZGVmcnVsZSBkaWFnb25vc3RpY29fYV9maWVi
cmUNCgkoZGVjbGFyZSAoYXV0by1mb2N1cyBUUlVFKSkNCgkoYW5zd2VyIChpZGVudCBtYXlvcl9l
ZGFkKSAodGV4dCBzaSkpDQoJKGFuc3dlciAoaWRlbnQgZmllYnJlKSAodGV4dCBubykpDQo9Pg0K
CShNQUlOOjpyZWNvbW1lbmQtYWN0aW9uICJBdW5xdWUgbGEgaW5mbHVlbnphIG5vIHNlIHB1ZWRl
IGRlc2NhcnRhciBlbiBlc3RlIHBhY2llbnRlLCBlc3RlIGFsZ29yaXRtbyBubyBkZWJlIHNlciB0
b21hbmRvIGVuIGN1ZW50YSBlbiBlbCBkaWFnbm9zdGljby4gQ29uc3VsdGUgYSB1biBtZWRpY28g
cGFyYSBkaWFnbm9zdGljbyBkZSBzdSBwb3NpYmxlIGVuZmVybWVkYWQuIikNCgkoaGFsdCkpDQoN
CihkZWZydWxlIGRpYWdub3N0aWNvX2FfdG9zLWRvbG9yLWdhcmdhbnRhDQoJKGRlY2xhcmUgKGF1
dG8tZm9jdXMgVFJVRSkpDQoJKGFuc3dlciAoaWRlbnQgbWF5b3JfZWRhZCkgKHRleHQgc2kpKQ0K
CShhbnN3ZXIgKGlkZW50IGZpZWJyZSkgKHRleHQgc2kpKQ0KICAgICAgICAoYW5zd2VyIChpZGVu
dCB0b3NfZG9sb3JfZ2FyZ2FudGEpICh0ZXh0IG5vKSkNCj0+DQoJKE1BSU46OnJlY29tbWVuZC1h
Y3Rpb24gIkF1bnF1ZSBsYSBpbmZsdWVuemEgbm8gc2UgcHVlZGUgZGVzY2FydGFyIGVuIGVzdGUg
cGFjaWVudGUsIGVzdGUgYWxnb3JpdG1vIG5vIGRlYmUgc2VyIHRvbWFuZG8gZW4gY3VlbnRhIGVu
IGVsIGRpYWdub3N0aWNvLiBDb25zdWx0ZSBhIHVuIG1lZGljbyBwYXJhIGRpYWdub3N0aWNvIGRl
IHN1IHBvc2libGUgZW5mZXJtZWRhZC4iKQ0KCShoYWx0KSkNCg0KKGRlZnJ1bGUgZGlhZ25vc3Rp
Y29fYg0KCShkZWNsYXJlIChhdXRvLWZvY3VzIFRSVUUpKQ0KCShhbnN3ZXIgKGlkZW50IG1heW9y
X2VkYWQpICh0ZXh0IHNpKSkNCgkoYW5zd2VyIChpZGVudCBmaWVicmUpICh0ZXh0IHNpKSkNCiAg
ICAgICAgKGFuc3dlciAoaWRlbnQgdG9zX2RvbG9yX2dhcmdhbnRhKSAodGV4dCBzaSkpDQo9Pg0K
ICAgICAgICAoYXNzZXJ0IChjaGVjayBkaWFnbm9zdGljby1iKSkNCiAgICAgICAgOzsgdGhlIG5y
YyBGdXp6eUplc3MgZnVuY3Rpb25zIGFyZSBsb2FkZWQNCiAgICAgICAgKGxvYWQtcGFja2FnZSBu
cmMuZnV6enkuamVzcy5GdXp6eUZ1bmN0aW9ucykNCiAgICAgICAgKGJpbmQgP3JsZiAobmV3IFJp
Z2h0TGluZWFyRnVuY3Rpb24pKQ0KICAgICAgICAoYmluZCA/bGxmIChuZXcgTGVmdExpbmVhckZ1
bmN0aW9uKSkNCiAgICAgICAgOzsgdGVybXMgZm9yIHRoZSBhaXIgdGVtcGVyYXR1cmUgRnV6enkg
VmFyaWFibGUgYW5kIGZhbiBzcGVlZCBGdXp6eSBWYXJpYWJsZQ0KICAgICAgICAoPypmdXp6eVRv
cyogYWRkVGVybSAibWVub3NJbnRlbnNhIiAobmV3IFJGdXp6eVNldCAxLjAgMi41ID9ybGYpKQ0K
ICAgICAgICAoPypmdXp6eVRvcyogYWRkVGVybSAic2VjYUNvbnRpbnVhIiAobmV3IExGdXp6eVNl
dCAyLjUgNS4wID9sbGYpKQ0KICAgICAgICAoPypmdXp6eURvbG9yQ2FiZXphKiBhZGRUZXJtICJt
ZW5vc0ludGVuc28iIChuZXcgUkZ1enp5U2V0IDEuMCAyLjUgP3JsZikpDQogICAgICAgICg/KmZ1
enp5RG9sb3JDYWJlemEqIGFkZFRlcm0gImludGVuc28iIChuZXcgTEZ1enp5U2V0IDIuNSA1LjAg
P2xsZikpDQopDQoNCihkZWZydWxlIGludGVuc2lkYWRfdG9zDQoJKGRlY2xhcmUgKGF1dG8tZm9j
dXMgVFJVRSkpDQogICAgICAgIChjaGVjayBkaWFnbm9zdGljby1iKQ0KICAgICAgICA7OyhhbnN3
ZXIgKGlkZW50IGZ1enp5X3RvcykgKHRleHQgNSkpDQogICAgICAgIChhbnN3ZXIgKGlkZW50IGZ1
enp5X3RvcykgKHRleHQgP2h0JjooZnV6enktbWF0Y2ggP2h0ICJzZWNhQ29udGludWEiKSkpDQo9
Pg0KICAgICAgICAoYXNzZXJ0ICh0b3MgKG5ldyBucmMuZnV6enkuRnV6enlWYWx1ZSA/KmZ1enp5
VG9zKiAic2VjYUNvbnRpbnVhIikpKQ0KKQ0KDQooZGVmcnVsZSBpbnRlbnNpZGFkX2RvbG9yX2Nh
YmV6YQ0KCShkZWNsYXJlIChhdXRvLWZvY3VzIFRSVUUpKQ0KICAgICAgICAoY2hlY2sgZGlhZ25v
c3RpY28tYikNCiAgICAgICAgKHRvcyA/dCY6KGZ1enp5LW1hdGNoID90ICJzZWNhQ29udGludWEi
KSkNCiAgICAgICAgKGFuc3dlciAoaWRlbnQgZnV6enlfZG9sb3JfY2FiZXphKSAodGV4dCA1KSkN
Cj0+DQogICAgICAgIChhc3NlcnQgKGRvbG9yX2RlX2NhYmV6YSAobmV3IG5yYy5mdXp6eS5GdXp6
eVZhbHVlID8qZnV6enlEb2xvckNhYmV6YSogImludGVuc28iKSkpDQopDQoNCjsqKioqKioqKioq
KioqKkVORCBJTlRFUlZJRVcgTU9EVUxFKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioNCg==
--047d7b5d47b803119304e09271c2--