NEWS
Gerätezustände aus FHEM zu einem ioBroker Gerät übertragen
-
Hi Leute,
ich habe mir für meine KNX Geräte die ich aus FHEM ansteuern möchte ein Script gebaut welches den FHEM Pfad in ioBroker überwacht und bestimmte States die in FHEM geändert werden in das KNX Gerät in ioBroker schreibt.
Vielleicht kann es jemand ja noch gebrauchen. Ich selbst brauchte es für das Rollo Modul aus FHEM.
Gruß
Blockly
<xml xmlns="http://www.w3.org/1999/xhtml"> <variables> <variable type="" id="i.%b@G.Ndf,q0^?}jD,[">wert_new</variable> </variables> <block type="on_ext" id="Uiq`EBWKk-4lY+6vwGAx" x="188" y="-487"> <mutation items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <comment pinned="true" h="304" w="1131">Funktion überträgt werte aus Fhem zu einem ioBroker Gerät RegExp(fhem.0.knx_.*state$) wird ausgelöst bei Geräten die mit "fhem.0.knx_" [fhem.0.knx_.*] beginnen und genau mit "state" [state$] enden Hier wird jeder Wert von Geräten übertrage die im Namen "fhem.0.knx_." enthalten haben Ablauf 1. In Fhem wird das Gerät "knx.0.Beleuchtung.EG.beleucht_eg_buero_decke_on_off" von "0" auf "1" geändert 2. Die Funktion "Falls Objekt .. wurde geändert" a. erkennt die Änderung b. ließt dynamisch den "Kanalnamen" und Wert des geänderten Gerätes aus, hier "knx.0.Beleuchtung.EG.beleucht_eg_buero_decke_on_off" c. wandelt true/fals/on/off in Zahlen um d. schreibt diesen in das ioBroker Gerät "knx.0.Beleuchtung.EG.beleucht_eg_buero_decke_on_off" </comment> <value name="OID0"> <shadow type="text" id="=QNkEg`G$gfgR/ND^!=z"> <field name="TEXT"></field> </shadow> <block type="regex" id="+u?/g8]$R8[!+m!DPU}I"> <field name="TEXT">(fhem.0.knx_.*state$)</field> </block> </value> <statement name="STATEMENT"> <block type="controls_if" id=":2.JsFf3TX3n/WdD`Ge%"> <mutation elseif="3" else="1"></mutation> <value name="IF0"> <block type="logic_compare" id="5iTbJL_{Zz*,eJGeY0LC"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="Og,-$meekrlQdtrVrm,S"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="logic_boolean" id="(|lbW.P_)+M{Ag{JBC{u"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="k4XjJB^V|GT]a*L8[.w?"> <field name="VAR" id="i.%b@G.Ndf,q0^?}jD,[" variabletype="">wert_new</field> <value name="VALUE"> <block type="convert_tonumber" id="/kw{xCGE`lfiscP-AA*b"> <value name="VALUE"> <block type="text" id="+@K4`OVo)ccvimQXMgQ]"> <field name="TEXT">1</field> </block> </value> </block> </value> </block> </statement> <value name="IF1"> <block type="logic_compare" id="A!];er|rk_NL)~d]zr8|"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="%tv)2~6O,IqkY(:J`XnF"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="logic_boolean" id=".9=-[:;6uiJDq21xy9-k"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> <statement name="DO1"> <block type="comment" id="FlrA(a3$4gAYDo,+I#pp"> <field name="COMMENT">wandelt false in 0 um</field> <next> <block type="variables_set" id="Da3)n?K4BM5lVi8y~o]j"> <field name="VAR" id="i.%b@G.Ndf,q0^?}jD,[" variabletype="">wert_new</field> <value name="VALUE"> <block type="convert_tonumber" id="L|^/Sy7+zV;V9]S=V80]"> <value name="VALUE"> <block type="text" id="JuOQ-tqi/H!|Pumt_fow"> <field name="TEXT">0</field> </block> </value> </block> </value> </block> </next> </block> </statement> <value name="IF2"> <block type="logic_compare" id="FJ7.~KswSYV3d7CPR8^f"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="sm,:t8Qo6^@NCZ@p(R-H"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="text" id="Oy;6pS@0En2/r9%?!lMU"> <field name="TEXT">on</field> </block> </value> </block> </value> <statement name="DO2"> <block type="comment" id="@s{b:A[[245O,-v~Q@q]"> <field name="COMMENT">wandelt true in 1 um</field> <next> <block type="variables_set" id="s}{v7p?Yk~rf6?:II5C~"> <field name="VAR" id="i.%b@G.Ndf,q0^?}jD,[" variabletype="">wert_new</field> <value name="VALUE"> <block type="convert_tonumber" id="PA;/jb=S`~cO0pigEf2/"> <value name="VALUE"> <block type="text" id="DT^P%0K`Tp%^KBhZ+rjy"> <field name="TEXT">1</field> </block> </value> </block> </value> </block> </next> </block> </statement> <value name="IF3"> <block type="logic_compare" id="p@[%TjPslwJft8*|j+9p"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="iU%#{@_`9d|3hKa8ot_."> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="text" id="(0D_$(EA=(:b0?Q^0A^4"> <field name="TEXT">off</field> </block> </value> </block> </value> <statement name="DO3"> <block type="comment" id="w~=0dKdk6GP1WDqcu-Mc"> <field name="COMMENT">wandelt off in 0 um</field> <next> <block type="variables_set" id="]{:^Vb?z!I{#*)!q!Yxv"> <field name="VAR" id="i.%b@G.Ndf,q0^?}jD,[" variabletype="">wert_new</field> <value name="VALUE"> <block type="convert_tonumber" id=".`YUGsW*C}LHyl*9m0=A"> <value name="VALUE"> <block type="text" id="Y@bWu=Fb^-AOe9O/SPYw"> <field name="TEXT">0</field> </block> </value> </block> </value> </block> </next> </block> </statement> <statement name="ELSE"> <block type="comment" id="m{@R6JwKt#OQl:*nd0gG"> <field name="COMMENT">wandelt on in 1 um</field> <next> <block type="variables_set" id="2M8/EX,8b:ny1YmD%0FW"> <field name="VAR" id="i.%b@G.Ndf,q0^?}jD,[" variabletype="">wert_new</field> <value name="VALUE"> <block type="convert_tonumber" id="c}xi}|ejw%GW,bmU~y~M"> <value name="VALUE"> <block type="on_source" id="4ygev?c0::)wc3lNdg@2"> <field name="ATTR">state.val</field> </block> </value> </block> </value> </block> </next> </block> </statement> <next> <block type="control_ex" id="d2d9|=*Zv+]ur,zmV.$6"> <field name="TYPE">false</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="T(R6(GyN:5j.Cd4BgZT;"> <field name="oid">Object ID</field> </shadow> <block type="on_source" id="-W[a{QVoJ5}v5tY^S@[Q"> <field name="ATTR">channelName</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="vic@E2tv]#Y(8HXq:#,7"> <field name="BOOL">TRUE</field> </shadow> <block type="variables_get" id=".XheyDcvscR-k%3#{1v="> <field name="VAR" id="i.%b@G.Ndf,q0^?}jD,[" variabletype="">wert_new</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="N$LRL(97cvRMcL[UwQbv"> <field name="NUM">0</field> </shadow> </value> <next> <block type="comment" id="shW;aqY)BbtXm^HWo(ja"> <field name="COMMENT">Debug - Was wurde geschrieben</field> <next> <block type="debug" id="^jK0brY6)k#S`LV[{q._"> <field name="Severity">warn</field> <value name="TEXT"> <shadow type="text" id="P~QdjpwcblQZTNsOZrjX"> <field name="TEXT">fhem.0.knx_0_*</field> </shadow> <block type="text_join" id="mN:KPvTWfZv#f(|I]^ZH"> <mutation items="3"></mutation> <value name="ADD0"> <block type="on_source" id=",@S65KkM5kc:)pGy?R6n"> <field name="ATTR">channelName</field> </block> </value> <value name="ADD1"> <block type="text" id="leYup5-4UxpQSWl$)?!V"> <field name="TEXT"> </field> </block> </value> <value name="ADD2"> <block type="variables_get" id="UMrkDb79gb#z8$Bz7#mN"> <field name="VAR" id="i.%b@G.Ndf,q0^?}jD,[" variabletype="">wert_new</field> </block> </value> </block> </value> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </xml>
Java
var wert_new; // Funktion überträgt werte aus Fhem zu einem ioBroker Gerät // RegExp(fhem.0.knx_.*state$) // wird ausgelöst bei Geräten die mit "fhem.0.knx_" // [fhem.0.knx_.*] beginnen und genau mit "state" [state$] enden // Hier wird jeder Wert von Geräten übertrage // die im Namen "fhem.0.knx_." enthalten haben // Ablauf // 1. In Fhem wird das Gerät "knx.0.Beleuchtung.EG.beleucht_eg_buero_decke_on_off" von "0" auf "1" geändert // 2. Die Funktion "Falls Objekt .. wurde geändert" // a. erkennt die Änderung // b. ließt dynamisch den "Kanalnamen" und Wert des geänderten Gerätes // aus, hier "knx.0.Beleuchtung.EG.beleucht_eg_buero_decke_on_off" // c. wandelt true/fals/on/off in Zahlen um // d. schreibt diesen in das ioBroker Gerät // "knx.0.Beleuchtung.EG.beleucht_eg_buero_decke_on_off" on({id: new RegExp("(fhem.0.knx_.*state$)"), change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if ((obj.state ? obj.state.val : "") == true) { wert_new = parseFloat('1'); } else if ((obj.state ? obj.state.val : "") == false) { // wandelt false in 0 um wert_new = parseFloat('0'); } else if ((obj.state ? obj.state.val : "") == 'on') { // wandelt true in 1 um wert_new = parseFloat('1'); } else if ((obj.state ? obj.state.val : "") == 'off') { // wandelt off in 0 um wert_new = parseFloat('0'); } else { // wandelt on in 1 um wert_new = parseFloat((obj.state ? obj.state.val : "")); } setStateDelayed(obj.channelName, wert_new, false, parseInt(0, 10), false); // Debug - Was wurde geschrieben console.warn(([obj.channelName,' ',wert_new].join(''))); }); //JTNDeG1sJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjE5OTklMkZ4aHRtbCUyMiUzRSUzQ3ZhcmlhYmxlcyUzRSUzQ3ZhcmlhYmxlJTIwdHlwZSUzRCUyMiUyMiUyMGlkJTNEJTIyaS4lMjViJTQwRy5OZGYlMkNxMCU1RSUzRiU3RGpEJTJDJTVCJTIyJTNFd2VydF9uZXclM0MlMkZ2YXJpYWJsZSUzRSUzQyUyRnZhcmlhYmxlcyUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMm9uX2V4dCUyMiUyMGlkJTNEJTIyVWlxJTYwRUJXS2stNGxZJTJCNnZ3R0F4JTIyJTIweCUzRCUyMjE4OCUyMiUyMHklM0QlMjItNDg3JTIyJTNFJTNDbXV0YXRpb24lMjBpdGVtcyUzRCUyMjElMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkNPTkRJVElPTiUyMiUzRW5lJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJBQ0tfQ09ORElUSU9OJTIyJTNFJTNDJTJGZmllbGQlM0UlM0Njb21tZW50JTIwcGlubmVkJTNEJTIydHJ1ZSUyMiUyMGglM0QlMjIzMDQlMjIlMjB3JTNEJTIyMTEzMSUyMiUzRUZ1bmt0aW9uJTIwJUMzJUJDYmVydHIlQzMlQTRndCUyMHdlcnRlJTIwYXVzJTIwRmhlbSUyMHp1JTIwZWluZW0lMjBpb0Jyb2tlciUyMEdlciVDMyVBNHQlMEElMjBSZWdFeHAoZmhlbS4wLmtueF8uKnN0YXRlJTI0KSUwQSUyMCUyMHdpcmQlMjBhdXNnZWwlQzMlQjZzdCUyMGJlaSUyMEdlciVDMyVBNHRlbiUyMGRpZSUyMG1pdCUyMCUyMmZoZW0uMC5rbnhfJTIyJTIwJTVCZmhlbS4wLmtueF8uKiU1RCUyMGJlZ2lubmVuJTIwdW5kJTIwZ2VuYXUlMjBtaXQlMjAlMjJzdGF0ZSUyMiUyMCU1QnN0YXRlJTI0JTVEJTIwZW5kZW4lMEFIaWVyJTIwd2lyZCUyMGplZGVyJTIwV2VydCUyMHZvbiUyMEdlciVDMyVBNHRlbiUyMCVDMyVCQ2JlcnRyYWdlJTIwZGllJTIwaW0lMjBOYW1lbiUyMCUyMmZoZW0uMC5rbnhfLiUyMiUyMGVudGhhbHRlbiUyMGhhYmVuJTBBJTIwQWJsYXVmJTBBJTIwJTIwMS4lMjBJbiUyMEZoZW0lMjB3aXJkJTIwZGFzJTIwR2VyJUMzJUE0dCUyMCUyMmtueC4wLkJlbGV1Y2h0dW5nLkVHLmJlbGV1Y2h0X2VnX2J1ZXJvX2RlY2tlX29uX29mZiUyMiUyMHZvbiUyMCUyMjAlMjIlMjBhdWYlMjAlMjIxJTIyJTIwZ2UlQzMlQTRuZGVydCUwQSUyMCUyMDIuJTIwRGllJTIwRnVua3Rpb24lMjAlMjJGYWxscyUyME9iamVrdCUyMC4uJTIwd3VyZGUlMjBnZSVDMyVBNG5kZXJ0JTIyJTBBJTIwJTIwJTIwJTIwJTIwYS4lMjBlcmtlbm50JTIwZGllJTIwJUMzJTg0bmRlcnVuZyUwQSUyMCUyMCUyMCUyMCUyMGIuJTIwbGllJUMzJTlGdCUyMGR5bmFtaXNjaCUyMGRlbiUyMCUyMkthbmFsbmFtZW4lMjIlMjB1bmQlMjBXZXJ0JTIwZGVzJTIwZ2UlQzMlQTRuZGVydGVuJTIwR2VyJUMzJUE0dGVzJTIwYXVzJTJDJTIwaGllciUyMCUyMmtueC4wLkJlbGV1Y2h0dW5nLkVHLmJlbGV1Y2h0X2VnX2J1ZXJvX2RlY2tlX29uX29mZiUyMiUwQSUyMCUyMCUyMCUyMCUyMGMuJTIwd2FuZGVsdCUyMHRydWUlMkZmYWxzJTJGb24lMkZvZmYlMjBpbiUyMFphaGxlbiUyMHVtJTBBJTIwJTIwJTIwJTIwJTIwZC4lMjBzY2hyZWlidCUyMGRpZXNlbiUyMGluJTIwZGFzJTIwaW9Ccm9rZXIlMjBHZXIlQzMlQTR0JTIwJTIya254LjAuQmVsZXVjaHR1bmcuRUcuYmVsZXVjaHRfZWdfYnVlcm9fZGVja2Vfb25fb2ZmJTIyJTNDJTJGY29tbWVudCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMk9JRDAlMjIlM0UlM0NzaGFkb3clMjB0eXBlJTNEJTIydGV4dCUyMiUyMGlkJTNEJTIyJTNEUU5rRWclNjBHJTI0Z2ZnUiUyRk5EJTVFISUzRHolMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJURVhUJTIyJTNFJTNDJTJGZmllbGQlM0UlM0MlMkZzaGFkb3clM0UlM0NibG9jayUyMHR5cGUlM0QlMjJyZWdleCUyMiUyMGlkJTNEJTIyJTJCdSUzRiUyRmc4JTVEJTI0UjglNUIhJTJCbSFEUFUlN0RJJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVEVYVCUyMiUzRShmaGVtLjAua254Xy4qc3RhdGUlMjQpJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDc3RhdGVtZW50JTIwbmFtZSUzRCUyMlNUQVRFTUVOVCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbnRyb2xzX2lmJTIyJTIwaWQlM0QlMjIlM0EyLkpzRmYzVFgzbiUyRldkRCU2MEdlJTI1JTIyJTNFJTNDbXV0YXRpb24lMjBlbHNlaWYlM0QlMjIzJTIyJTIwZWxzZSUzRCUyMjElMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMklGMCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmxvZ2ljX2NvbXBhcmUlMjIlMjBpZCUzRCUyMjVpVGJKTF8lN0JaeiolMkNlSkdlWTBMQyUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk9QJTIyJTNFRVElM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMkElMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJvbl9zb3VyY2UlMjIlMjBpZCUzRCUyMk9nJTJDLSUyNG1lZWtybFFkdHJWcm0lMkNTJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQVRUUiUyMiUzRXN0YXRlLnZhbCUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMkIlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJsb2dpY19ib29sZWFuJTIyJTIwaWQlM0QlMjIoJTdDbGJXLlBfKSUyQk0lN0JBZyU3QkpCQyU3QnUlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJCT09MJTIyJTNFVFJVRSUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0NzdGF0ZW1lbnQlMjBuYW1lJTNEJTIyRE8wJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydmFyaWFibGVzX3NldCUyMiUyMGlkJTNEJTIyazRYakpCJTVFViU3Q0dUJTVEYSpMOCU1Qi53JTNGJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVkFSJTIyJTIwaWQlM0QlMjJpLiUyNWIlNDBHLk5kZiUyQ3EwJTVFJTNGJTdEakQlMkMlNUIlMjIlMjB2YXJpYWJsZXR5cGUlM0QlMjIlMjIlM0V3ZXJ0X25ldyUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyVkFMVUUlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJjb252ZXJ0X3RvbnVtYmVyJTIyJTIwaWQlM0QlMjIlMkZrdyU3QnhDR0UlNjBsZmlzY1AtQUEqYiUyMiUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlZBTFVFJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydGV4dCUyMiUyMGlkJTNEJTIyJTJCJTQwSzQlNjBPVm8pY2N2aW1RWE1nUSU1RCUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlRFWFQlMjIlM0UxJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGc3RhdGVtZW50JTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIySUYxJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIybG9naWNfY29tcGFyZSUyMiUyMGlkJTNEJTIyQSElNUQlM0JlciU3Q3JrX05MKX5kJTVEenI4JTdDJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT1AlMjIlM0VFUSUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMm9uX3NvdXJjZSUyMiUyMGlkJTNEJTIyJTI1dHYpMn42TyUyQ0lxa1koJTNBSiU2MFhuRiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkFUVFIlMjIlM0VzdGF0ZS52YWwlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJCJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIybG9naWNfYm9vbGVhbiUyMiUyMGlkJTNEJTIyLjklM0QtJTVCJTNBJTNCNnVpSkRxMjF4eTktayUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkJPT0wlMjIlM0VGQUxTRSUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0NzdGF0ZW1lbnQlMjBuYW1lJTNEJTIyRE8xJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyY29tbWVudCUyMiUyMGlkJTNEJTIyRmxyQShhMyUyNDRnQVlEbyUyQyUyQkklMjNwcCUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkNPTU1FTlQlMjIlM0V3YW5kZWx0JTIwZmFsc2UlMjBpbiUyMDAlMjB1bSUzQyUyRmZpZWxkJTNFJTNDbmV4dCUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnZhcmlhYmxlc19zZXQlMjIlMjBpZCUzRCUyMkRhMyluJTNGSzRCTTVsVmk4eX5vJTVEaiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlZBUiUyMiUyMGlkJTNEJTIyaS4lMjViJTQwRy5OZGYlMkNxMCU1RSUzRiU3RGpEJTJDJTVCJTIyJTIwdmFyaWFibGV0eXBlJTNEJTIyJTIyJTNFd2VydF9uZXclM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlZBTFVFJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyY29udmVydF90b251bWJlciUyMiUyMGlkJTNEJTIyTCU3QyU1RSUyRlN5NyUyQnpWJTNCVjklNURTJTNEVjgwJTVEJTIyJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyVkFMVUUlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ0ZXh0JTIyJTIwaWQlM0QlMjJKdU9RLXRxaSUyRkghJTdDUHVtdF9mb3clMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJURVhUJTIyJTNFMCUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnN0YXRlbWVudCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMklGMiUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmxvZ2ljX2NvbXBhcmUlMjIlMjBpZCUzRCUyMkZKNy5+S3N3U1lWM2Q3Q1BSOCU1RWYlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPUCUyMiUzRUVRJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJBJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyb25fc291cmNlJTIyJTIwaWQlM0QlMjJzbSUyQyUzQXQ4UW82JTVFJTQwTkNaJTQwcChSLUglMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJBVFRSJTIyJTNFc3RhdGUudmFsJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQiUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnRleHQlMjIlMjBpZCUzRCUyMk95JTNCNnBTJTQwMEVuMiUyRnI5JTI1JTNGIWxNVSUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlRFWFQlMjIlM0VvbiUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0NzdGF0ZW1lbnQlMjBuYW1lJTNEJTIyRE8yJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyY29tbWVudCUyMiUyMGlkJTNEJTIyJTQwcyU3QmIlM0FBJTVCJTVCMjQ1TyUyQy12flElNDBxJTVEJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQ09NTUVOVCUyMiUzRXdhbmRlbHQlMjB0cnVlJTIwaW4lMjAxJTIwdW0lM0MlMkZmaWVsZCUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ2YXJpYWJsZXNfc2V0JTIyJTIwaWQlM0QlMjJzJTdEJTdCdjdwJTNGWWt+cmY2JTNGJTNBSUk1Q34lMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJWQVIlMjIlMjBpZCUzRCUyMmkuJTI1YiU0MEcuTmRmJTJDcTAlNUUlM0YlN0RqRCUyQyU1QiUyMiUyMHZhcmlhYmxldHlwZSUzRCUyMiUyMiUzRXdlcnRfbmV3JTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJWQUxVRSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbnZlcnRfdG9udW1iZXIlMjIlMjBpZCUzRCUyMlBBJTNCJTJGamIlM0RTJTYwfmNPMHBpZ0VmMiUyRiUyMiUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlZBTFVFJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydGV4dCUyMiUyMGlkJTNEJTIyRFQlNUVQJTI1MEslNjBUcCUyNSU1RUtCaFolMkJyanklMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJURVhUJTIyJTNFMSUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnN0YXRlbWVudCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMklGMyUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmxvZ2ljX2NvbXBhcmUlMjIlMjBpZCUzRCUyMnAlNDAlNUIlMjVUalBzbHdKZnQ4KiU3Q2olMkI5cCUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk9QJTIyJTNFRVElM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMkElMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJvbl9zb3VyY2UlMjIlMjBpZCUzRCUyMmlVJTI1JTIzJTdCJTQwXyU2MDlkJTdDM2hLYThvdF8uJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQVRUUiUyMiUzRXN0YXRlLnZhbCUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMkIlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ0ZXh0JTIyJTIwaWQlM0QlMjIoMERfJTI0KEVBJTNEKCUzQWIwJTNGUSU1RTBBJTVFNCUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlRFWFQlMjIlM0VvZmYlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDc3RhdGVtZW50JTIwbmFtZSUzRCUyMkRPMyUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbW1lbnQlMjIlMjBpZCUzRCUyMnd+JTNEMGRLZGs2R1AxV0RxY3UtTWMlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJDT01NRU5UJTIyJTNFd2FuZGVsdCUyMG9mZiUyMGluJTIwMCUyMHVtJTNDJTJGZmllbGQlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydmFyaWFibGVzX3NldCUyMiUyMGlkJTNEJTIyJTVEJTdCJTNBJTVFVmIlM0Z6IUklN0IlMjMqKSFxIVl4diUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlZBUiUyMiUyMGlkJTNEJTIyaS4lMjViJTQwRy5OZGYlMkNxMCU1RSUzRiU3RGpEJTJDJTVCJTIyJTIwdmFyaWFibGV0eXBlJTNEJTIyJTIyJTNFd2VydF9uZXclM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlZBTFVFJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyY29udmVydF90b251bWJlciUyMiUyMGlkJTNEJTIyLiU2MFlVR3NXKkMlN0RMSHlsKjltMCUzREElMjIlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJWQUxVRSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnRleHQlMjIlMjBpZCUzRCUyMlklNDBiV3UlM0RGYiU1RS1BT2U5TyUyRlNQWXclMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJURVhUJTIyJTNFMCUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnN0YXRlbWVudCUzRSUzQ3N0YXRlbWVudCUyMG5hbWUlM0QlMjJFTFNFJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyY29tbWVudCUyMiUyMGlkJTNEJTIybSU3QiU0MFI2SndLdCUyM09RbCUzQSpuZDBnRyUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkNPTU1FTlQlMjIlM0V3YW5kZWx0JTIwb24lMjBpbiUyMDElMjB1bSUzQyUyRmZpZWxkJTNFJTNDbmV4dCUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnZhcmlhYmxlc19zZXQlMjIlMjBpZCUzRCUyMjJNOCUyRkVYJTJDOGIlM0FueTFZbUQlMjUwRlclMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJWQVIlMjIlMjBpZCUzRCUyMmkuJTI1YiU0MEcuTmRmJTJDcTAlNUUlM0YlN0RqRCUyQyU1QiUyMiUyMHZhcmlhYmxldHlwZSUzRCUyMiUyMiUzRXdlcnRfbmV3JTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJWQUxVRSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbnZlcnRfdG9udW1iZXIlMjIlMjBpZCUzRCUyMmMlN0R4aSU3RCU3Q2VqdyUyNUdXJTJDYm1Vfnl+TSUyMiUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlZBTFVFJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyb25fc291cmNlJTIyJTIwaWQlM0QlMjI0eWdldiUzRmMwJTNBJTNBKXdjM2xOZGclNDAyJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQVRUUiUyMiUzRXN0YXRlLnZhbCUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnN0YXRlbWVudCUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJjb250cm9sX2V4JTIyJTIwaWQlM0QlMjJkMmQ5JTdDJTNEKlp2JTJCJTVEdXIlMkN6bVYuJTI0NiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlRZUEUlMjIlM0VmYWxzZSUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQ0xFQVJfUlVOTklORyUyMiUzRUZBTFNFJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJPSUQlMjIlM0UlM0NzaGFkb3clMjB0eXBlJTNEJTIyZmllbGRfb2lkJTIyJTIwaWQlM0QlMjJUKFI2KEd5TiUzQTVqLkNkNEJnWlQlM0IlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJvaWQlMjIlM0VPYmplY3QlMjBJRCUzQyUyRmZpZWxkJTNFJTNDJTJGc2hhZG93JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyb25fc291cmNlJTIyJTIwaWQlM0QlMjItVyU1QmElN0JRVm9KNSU3RHY1dFklNUVTJTQwJTVCUSUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkFUVFIlMjIlM0VjaGFubmVsTmFtZSUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlZBTFVFJTIyJTNFJTNDc2hhZG93JTIwdHlwZSUzRCUyMmxvZ2ljX2Jvb2xlYW4lMjIlMjBpZCUzRCUyMnZpYyU0MEUydHYlNUQlMjNZKDhIWHElM0ElMjMlMkM3JTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQk9PTCUyMiUzRVRSVUUlM0MlMkZmaWVsZCUzRSUzQyUyRnNoYWRvdyUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnZhcmlhYmxlc19nZXQlMjIlMjBpZCUzRCUyMi5YaGV5RGN2c2NSLWslMjUzJTIzJTdCMXYlM0QlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJWQVIlMjIlMjBpZCUzRCUyMmkuJTI1YiU0MEcuTmRmJTJDcTAlNUUlM0YlN0RqRCUyQyU1QiUyMiUyMHZhcmlhYmxldHlwZSUzRCUyMiUyMiUzRXdlcnRfbmV3JTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyREVMQVlfTVMlMjIlM0UlM0NzaGFkb3clMjB0eXBlJTNEJTIybWF0aF9udW1iZXIlMjIlMjBpZCUzRCUyMk4lMjRMUkwoOTdjdlJNY0wlNUJVd1FidiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk5VTSUyMiUzRTAlM0MlMkZmaWVsZCUzRSUzQyUyRnNoYWRvdyUzRSUzQyUyRnZhbHVlJTNFJTNDbmV4dCUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbW1lbnQlMjIlMjBpZCUzRCUyMnNoVyUzQmFxWSlCYnRYbSU1RUhXbyhqYSUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkNPTU1FTlQlMjIlM0VEZWJ1ZyUyMC0lMjBXYXMlMjB3dXJkZSUyMGdlc2NocmllYmVuJTNDJTJGZmllbGQlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyZGVidWclMjIlMjBpZCUzRCUyMiU1RWpLMGJyWTYpayUyM1MlNjBMViU1QiU3QnEuXyUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlNldmVyaXR5JTIyJTNFd2FybiUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyVEVYVCUyMiUzRSUzQ3NoYWRvdyUyMHR5cGUlM0QlMjJ0ZXh0JTIyJTIwaWQlM0QlMjJQflFkanB3Y2JsUVpUTnNPWnJqWCUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlRFWFQlMjIlM0VmaGVtLjAua254XzBfKiUzQyUyRmZpZWxkJTNFJTNDJTJGc2hhZG93JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydGV4dF9qb2luJTIyJTIwaWQlM0QlMjJtTiUzQUtQdlRXZlp2JTIzZiglN0NJJTVEJTVFWkglMjIlM0UlM0NtdXRhdGlvbiUyMGl0ZW1zJTNEJTIyMyUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQUREMCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMm9uX3NvdXJjZSUyMiUyMGlkJTNEJTIyJTJDJTQwUzY1S2tNNWtjJTNBKXBHeSUzRlI2biUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkFUVFIlMjIlM0VjaGFubmVsTmFtZSUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMkFERDElMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ0ZXh0JTIyJTIwaWQlM0QlMjJsZVl1cDUtNFV4cFFTV2wlMjQpJTNGIVYlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJURVhUJTIyJTNFJTIwJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQUREMiUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnZhcmlhYmxlc19nZXQlMjIlMjBpZCUzRCUyMlVNcmtEYjc5Z2IlMjN6OCUyNEJ6NyUyM21OJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVkFSJTIyJTIwaWQlM0QlMjJpLiUyNWIlNDBHLk5kZiUyQ3EwJTVFJTNGJTdEakQlMkMlNUIlMjIlMjB2YXJpYWJsZXR5cGUlM0QlMjIlMjIlM0V3ZXJ0X25ldyUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnN0YXRlbWVudCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGeG1sJTNF