JESS: [EXTERNAL] Fwd: Problems with fuzzy jess implementations

Martín Rodríguez <[email protected]> Sun, 7 Jul 2013 19:30:18 -0300
Newsgroups gmane.comp.java.jess
Message-ID <CAJoi6TKoMRaPV-c-z6gHSUqOBLVYxKZQnqiUqNuMtuNQvdUwbw@mail.gmail.com>
--e89a8ff1ccae0877fe04e0f379bb
Content-Transfer-Encoding: 7bit
Content-Type: multipart/alternative;
 boundary=e89a8ff1ccae0877f904e0f379b9


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

Hi, I could overcome some problems with FuzzyJess implementation, and now I
have a fuzzy rule that never executes when it should.
My Clip run using BackwardChaining, Im sure that the *intensidad_tos *rule
assert the gripe fuzzyvalue fine, but the *global_influenza *rule never
trigger,

Somebody can help me with that??

Thanks!!!!

The code is the next:

*(defglobal ?*fuzzyDiagnosticoGripe* = (new FuzzyVariable
"Diagnostico_gripal" 0.0 5.0 "integer"))*
*
*
*
(defrule diagnostico_init
=>
        ;; the nrc FuzzyJess functions are loaded
        (load-package nrc.fuzzy.jess.FuzzyFunctions)
        (bind ?rlf (new RightLinearFunction))
        (bind ?llf (new LeftLinearFunction))
        ;; terms
        (?*fuzzyDiagnosticoGripe* addTerm "Comun" (new RFuzzySet 0.0 2.5
?rlf))
        (?*fuzzyDiagnosticoGripe* addTerm "N1H1" (new LFuzzySet 2.5 5.0
?llf))
)

(defrule intensidad_tos
(declare (auto-focus TRUE))
        (check diagnostico-b)
        (answer (ident fuzzy_tos) (text yes))
=>
        (assert (gripe (new nrc.fuzzy.FuzzyValue ?*fuzzyDiagnosticoGripe*
"N1H1")))
)

(defrule global_influenza
    (gripeGlobal ?gg&:(fuzzy-match ?gg "N1H1"))
 =>
   (MAIN::recommend-action "N1H1")
   (halt)
)
*

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

<div dir=3D"ltr">Hi, I could overcome some problems with FuzzyJess implemen=
tation, and now I have a fuzzy rule=A0that never executes when it should.<d=
iv style>My Clip run using BackwardChaining, Im sure that the=A0<b>intensid=
ad_tos </b>rule assert the gripe fuzzyvalue fine, but the=A0<b>global_influ=
enza </b>rule never trigger,</div>
<div style><br></div><div style>Somebody can help me with that??</div><div =
style><br></div><div style>Thanks!!!!</div><div style><br></div><div style>=
The code is the next:</div><div style><br></div><div style><b>(defglobal ?*=
fuzzyDiagnosticoGripe* =3D (new FuzzyVariable &quot;Diagnostico_gripal&quot=
; 0.0 5.0 &quot;integer&quot;))</b><br>
</div><div style><b><br></b></div><div style><b><div>(defrule diagnostico_i=
nit</div><div>=3D&gt;</div><div>=A0 =A0 =A0 =A0 ;; the nrc FuzzyJess functi=
ons are loaded</div><div>=A0 =A0 =A0 =A0 (load-package nrc.fuzzy.jess.Fuzzy=
Functions)</div>
<div>=A0 =A0 =A0 =A0 (bind ?rlf (new RightLinearFunction))</div><div>=A0 =
=A0 =A0 =A0 (bind ?llf (new LeftLinearFunction))</div><div>=A0 =A0 =A0 =A0 =
;; terms</div><div>=A0 =A0 =A0 =A0 (?*fuzzyDiagnosticoGripe* addTerm &quot;=
Comun&quot; (new RFuzzySet 0.0 2.5 ?rlf))</div>
<div>=A0 =A0 =A0 =A0 (?*fuzzyDiagnosticoGripe* addTerm &quot;N1H1&quot; (ne=
w LFuzzySet 2.5 5.0 ?llf))</div><div>)</div><div><br></div><div><div>(defru=
le intensidad_tos</div><div><span class=3D"" style=3D"white-space:pre">	</s=
pan>(declare (auto-focus TRUE))</div>
<div>=A0 =A0 =A0 =A0 (check diagnostico-b)</div><div>=A0 =A0 =A0 =A0 (answe=
r (ident fuzzy_tos) (text yes))</div><div>=3D&gt;</div><div>=A0 =A0 =A0 =A0=
 (assert (gripe (new nrc.fuzzy.FuzzyValue ?*fuzzyDiagnosticoGripe* &quot;N1=
H1&quot;)))</div><div>
)</div><div><br></div><div><font color=3D"#ff0000">(defrule global_influenz=
a</font></div><div><font color=3D"#ff0000">=A0 =A0 (gripeGlobal ?gg&amp;:(f=
uzzy-match ?gg &quot;N1H1&quot;))=A0</font></div><div><font color=3D"#ff000=
0">=A0=3D&gt;=A0</font></div>
<div><font color=3D"#ff0000">=A0 =A0(MAIN::recommend-action &quot;N1H1&quot=
;)</font></div><div><font color=3D"#ff0000">=A0 =A0(halt)</font></div><div>=
<font color=3D"#ff0000">)</font></div></div></b></div></div>

--e89a8ff1ccae0877f904e0f379b9--

--e89a8ff1ccae0877fe04e0f379bb
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==
--e89a8ff1ccae0877fe04e0f379bb--