Re: RESTful Toggle

"Greg Young [email protected] [rest-discuss]" <[email protected]> Wed, 9 Jul 2014 18:32:09 +0300
Newsgroups gmane.comp.web.services.rest
Message-ID <[email protected]>
--hTIYnFEU5QtT0NSX0krbMIBdpryMoTyjxNz6YDA
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable

A simple button press is no problem that's just the capture of a fact.=20

Sent from my iPhone

> On 09 Jul 2014, at 18:29, "'Simpson, Robby (GE Energy Management)' robby.=
[email protected] [rest-discuss]" <[email protected]> wrote=
:
>=20
> Hi Nick,
>=20
> Happy to elaborate.
>=20
> I'm certainly not heading down a hypothetical route, though I must admit =
I am interested in sticking close to a principled, clean design.
>=20
> This particular issue has arisen in the design of home automation systems=
.  Specifically, I'm working in a standards body (the ZigBee Alliance) that=
 has classically used a binary protocol that does not really adhere to any =
true architectural design (IMHO).  I've been engaged in work that started i=
n ZigBee and has now moved to IEEE (2030.5) that (attempts to) rigidly stic=
k to a RESTful HTTP design.  One request that has come up is to port toggle=
 switch capability to this standard.  Home automation manufacturers have ac=
tually implemented toggle switches this way in the past (see http://zigbee.=
org/Products/ByStandard/ZigBeeHomeAutomation.aspx).
>=20
> So, in short, I myself am not manufacturing a specific toggle switch, but=
 rather have been working in a standards body where others have requested t=
he inclusion of toggle switch functionality.  We also have some use cases f=
or a simple button press, which I see as a similar problem.
>=20
> Thanks,
> Robby
>=20
> From: "Nick Gall [email protected]<mailto:[email protected]> [rest-di=
scuss]" <[email protected]<mailto:rest-discuss-noreply@y=
ahoogroups.com>>
> Reply-To: Nick Gall <[email protected]<mailto:[email protected]>>
> Date: Wednesday, July 9, 2014 at 11:14 AM
> Cc: Rest List <[email protected]<mailto:rest-discuss@yahoogrou=
ps.com>>
> Subject: Re: [rest-discuss] RESTful Toggle
>=20
>=20
>=20
> Robby, I'd like to know more about the real world need for such an API. S=
ure, mechanical light switches DID work this way, but do home automation sy=
stems really offer a "toggle"? I'm trying to imagine why I would ever want =
to simply change the state of the lighting in my room, without caring if th=
e result was lights on or lights off. I can't.
>=20
> So are you programming a home automation system? If so, do you really nee=
d toggle, given my observation above?
>=20
> Or is this just a hypothetical question about the generic behavior of tog=
gle and how it maps to REST? If so, then it kind of feels like the perennia=
l, "Can REST do THIS?" questions that skeptics of REST would lob from time =
to time in the good old REST v WS-STAR WARS days. It kind of reminds me of =
the old chestnut, "How can I do two-phase commit in REST?"
>=20
> Or is your need for toggle behavior truly needed in some other actual dom=
ain? If so, could you please tell us a bit more about the domain and it's R=
EAL need for toggle behavior. With such context in mind, we can perhaps hel=
p you better map it into a RESTful API.
>=20
> Thanks.
>=20
> -- Nick
>=20
> Nick Gall
> Phone: +1.781.325.8370
> Other Contact Info: http://bit.ly/nickgall
>=20
>=20
> On Tue, Jul 8, 2014 at 5:28 PM, 'Simpson, Robby (GE Energy Management)' r=
[email protected]<mailto:[email protected]> [rest-discuss] <rest-discu=
[email protected]<mailto:[email protected]>> wr=
ote:
> Hi,
>=20
>=20
> I've been scratching my head over this one for a while and am hoping I ca=
n
> get some help.
>=20
>=20
> Imagine a light switch with one simple resource: /state , where state can
> be "On" or "Off."
>=20
>=20
> One can PUT to /state , changing /state to either "On" or "Off."
> Similarly, a GET to /state will tell you if the light is currently "On" o=
r
> "Off."
>=20
>=20
> Where I'm struggling is with a safe "Toggle" mechanism.  That is, if
> /state is "On", change it to "Off" and vice versa.
>=20
>=20
> I understand that one solution would be to simply perform a GET on /state
> and then PUT the opposite.  However, I am concerned with both the overhea=
d
> and latency this entails as well as the potential for a race condition
> (what if /state changes between the GET and the PUT?).
>=20
>=20
> Any solution I've looked at thus far seems to violate RESTful principles,
> particularly regarding idempotency.  In short, can one safely toggle?
>=20
>=20
> Any suggestions?
>=20
>=20
> Thanks,
> Robby
>=20
>=20
>=20
>=20
> ------------------------------------
> Posted by: "Simpson, Robby (GE Energy Management)" <[email protected]<=
mailto:[email protected]>>
> ------------------------------------
>=20
>=20
> ------------------------------------
>=20
> Yahoo Groups Links
>=20
>=20
>=20
>=20
>=20
>=20
>=20
>=20
> ------------------------------------
>=20
> ------------------------------------
>=20
>=20
> ------------------------------------
>=20
> Yahoo Groups Links
>=20
>=20
>=20

--hTIYnFEU5QtT0NSX0krbMIBdpryMoTyjxNz6YDA
Content-Type: text/html; charset=US-ASCII
Content-Transfer-Encoding: 7bit




<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
</head>






 
<body style="background-color: #fff;">
<span style="display:none">&nbsp;</span>

<!--~-|**|PrettyHtmlStartT|**|-~-->
<div id="ygrp-mlmsg" style="position:relative;">
  <div id="ygrp-msg" style="z-index: 1;">
<!--~-|**|PrettyHtmlEndT|**|-~-->

    <div id="ygrp-text" >
      
      
      <p>A simple button press is no problem that&#39;s just the capture of a fact. <br>
<br>
Sent from my iPhone<br>
<br>
&gt; On 09 Jul 2014, at 18:29, &quot;&#39;Simpson, Robby (GE Energy Management)&#39; [email protected] [rest-discuss]&quot; &lt;[email protected]&gt; wrote:<br>
&gt; <br>
&gt; Hi Nick,<br>
&gt; <br>
&gt; Happy to elaborate.<br>
&gt; <br>
&gt; I&#39;m certainly not heading down a hypothetical route, though I must admit I am interested in sticking close to a principled, clean design.<br>
&gt; <br>
&gt; This particular issue has arisen in the design of home automation systems.  Specifically, I&#39;m working in a standards body (the ZigBee Alliance) that has classically used a binary protocol that does not really adhere to any true architectural design (IMHO).  I&#39;ve been engaged in work that started in ZigBee and has now moved to IEEE (2030.5) that (attempts to) rigidly stick to a RESTful HTTP design.  One request that has come up is to port toggle switch capability to this standard.  Home automation manufacturers have actually implemented toggle switches this way in the past (see http://zigbee.org/Products/ByStandard/ZigBeeHomeAutomation.aspx).<br>
&gt; <br>
&gt; So, in short, I myself am not manufacturing a specific toggle switch, but rather have been working in a standards body where others have requested the inclusion of toggle switch functionality.  We also have some use cases for a simple button press, which I see as a similar problem.<br>
&gt; <br>
&gt; Thanks,<br>
&gt; Robby<br>
&gt; <br>
&gt; From: &quot;Nick Gall [email protected]&lt;mailto:[email protected]&gt; [rest-discuss]&quot; &lt;[email protected]&lt;mailto:[email protected]&gt;&gt;<br>
&gt; Reply-To: Nick Gall &lt;[email protected]&lt;mailto:[email protected]&gt;&gt;<br>
&gt; Date: Wednesday, July 9, 2014 at 11:14 AM<br>
&gt; Cc: Rest List &lt;[email protected]&lt;mailto:[email protected]&gt;&gt;<br>
&gt; Subject: Re: [rest-discuss] RESTful Toggle<br>
&gt; <br>
&gt; <br>
&gt; <br>
&gt; Robby, I&#39;d like to know more about the real world need for such an API. Sure, mechanical light switches DID work this way, but do home automation systems really offer a &quot;toggle&quot;? I&#39;m trying to imagine why I would ever want to simply change the state of the lighting in my room, without caring if the result was lights on or lights off. I can&#39;t.<br>
&gt; <br>
&gt; So are you programming a home automation system? If so, do you really need toggle, given my observation above?<br>
&gt; <br>
&gt; Or is this just a hypothetical question about the generic behavior of toggle and how it maps to REST? If so, then it kind of feels like the perennial, &quot;Can REST do THIS?&quot; questions that skeptics of REST would lob from time to time in the good old REST v WS-STAR WARS days. It kind of reminds me of the old chestnut, &quot;How can I do two-phase commit in REST?&quot;<br>
&gt; <br>
&gt; Or is your need for toggle behavior truly needed in some other actual domain? If so, could you please tell us a bit more about the domain and it&#39;s REAL need for toggle behavior. With such context in mind, we can perhaps help you better map it into a RESTful API.<br>
&gt; <br>
&gt; Thanks.<br>
&gt; <br>
&gt; -- Nick<br>
&gt; <br>
&gt; Nick Gall<br>
&gt; Phone: &#43;1.781.325.8370<br>
&gt; Other Contact Info: http://bit.ly/nickgall<br>
&gt; <br>
&gt; <br>
&gt; On Tue, Jul 8, 2014 at 5:28 PM, &#39;Simpson, Robby (GE Energy Management)&#39; [email protected]&lt;mailto:[email protected]&gt; [rest-discuss] &lt;[email protected]&lt;mailto:[email protected]&gt;&gt; wrote:<br>
&gt; Hi,<br>
&gt; <br>
&gt; <br>
&gt; I&#39;ve been scratching my head over this one for a while and am hoping I can<br>
&gt; get some help.<br>
&gt; <br>
&gt; <br>
&gt; Imagine a light switch with one simple resource: /state , where state can<br>
&gt; be &quot;On&quot; or &quot;Off.&quot;<br>
&gt; <br>
&gt; <br>
&gt; One can PUT to /state , changing /state to either &quot;On&quot; or &quot;Off.&quot;<br>
&gt; Similarly, a GET to /state will tell you if the light is currently &quot;On&quot; or<br>
&gt; &quot;Off.&quot;<br>
&gt; <br>
&gt; <br>
&gt; Where I&#39;m struggling is with a safe &quot;Toggle&quot; mechanism.  That is, if<br>
&gt; /state is &quot;On&quot;, change it to &quot;Off&quot; and vice versa.<br>
&gt; <br>
&gt; <br>
&gt; I understand that one solution would be to simply perform a GET on /state<br>
&gt; and then PUT the opposite.  However, I am concerned with both the overhead<br>
&gt; and latency this entails as well as the potential for a race condition<br>
&gt; (what if /state changes between the GET and the PUT?).<br>
&gt; <br>
&gt; <br>
&gt; Any solution I&#39;ve looked at thus far seems to violate RESTful principles,<br>
&gt; particularly regarding idempotency.  In short, can one safely toggle?<br>
&gt; <br>
&gt; <br>
&gt; Any suggestions?<br>
&gt; <br>
&gt; <br>
&gt; Thanks,<br>
&gt; Robby<br>
&gt; <br>
&gt; <br>
&gt; <br>
&gt; <br>
&gt; ------------------------------------<br>
&gt; Posted by: &quot;Simpson, Robby (GE Energy Management)&quot; &lt;[email protected]&lt;mailto:[email protected]&gt;&gt;<br>
&gt; ------------------------------------<br>
&gt; <br>
&gt; <br>
&gt; ------------------------------------<br>
&gt; <br>
&gt; Yahoo Groups Links<br>
&gt; <br>
&gt; <br>
&gt; <br>
&gt; <br>
&gt; <br>
&gt; <br>
&gt; <br>
&gt; <br>
&gt; ------------------------------------<br>
&gt; <br>
&gt; ------------------------------------<br>
&gt; <br>
&gt; <br>
&gt; ------------------------------------<br>
&gt; <br>
&gt; Yahoo Groups Links<br>
&gt; <br>
&gt; <br>
&gt; <br>
</p>

    </div>
     

    <!--~-|**|PrettyHtmlStart|**|-~-->
    <div style="color: #fff; height: 0;">__._,_.___</div>

          
  
 

    
    <div style="clear:both"> </div>

    <div id="fromDMARC" style="margin-top: 10px;">
        <hr style="height:2px ; border-width:0; color:#E3E3E3; background-color:#E3E3E3;">
        Posted by: Greg Young &lt;[email protected]&gt;        <hr style="height:2px ; border-width:0; color:#E3E3E3; background-color:#E3E3E3;">
     </div>
    <div style="clear:both"> </div>

    <table cellspacing=4px style="margin-top: 10px; margin-bottom: 10px; color: #2D50FD;">
      <tbody>
        <tr>
          <td style="font-size: 12px; font-family: arial; font-weight: bold; padding: 7px 5px 5px;"  >
                          <a style="text-decoration: none; color: #2D50FD" href="https://groups.yahoo.com/neo/groups/rest-discuss/conversations/messages/19674;_ylc=X3oDMTJxOXUxbzUzBF9TAzk3MzU5NzE0BGdycElkAzQzMTkyNTUEZ3Jwc3BJZAMxNzA1NzAxMDE0BG1zZ0lkAzE5Njc0BHNlYwNmdHIEc2xrA3JwbHkEc3RpbWUDMTQwNDkxOTkzMg--?act=reply&messageNum=19674">Reply via web post</a>
                      </td>
          <td>&bull;</td>
          <td style="font-size: 12px; font-family: arial; padding: 7px 5px 5px;" >
            <a href="mailto:[email protected]?subject=Re%3A%20%5Brest-discuss%5D%20RESTful%20Toggle" style="text-decoration: none; color: #2D50FD;">
               Reply to sender            </a>
          </td>
          <td>&bull;</td>
          <td style="font-size: 12px; font-family: arial; padding: 7px 5px 5px;">
            <a href="mailto:[email protected]?subject=Re%3A%20%5Brest-discuss%5D%20RESTful%20Toggle" style="text-decoration: none; color: #2D50FD">
              Reply to group            </a>
          </td>
          <td>&bull;</td>
          <td style="font-size: 12px; font-family: arial; padding: 7px 5px 5px;" >
            <a href="https://groups.yahoo.com/neo/groups/rest-discuss/conversations/newtopic;_ylc=X3oDMTJlcWNkN2Z2BF9TAzk3MzU5NzE0BGdycElkAzQzMTkyNTUEZ3Jwc3BJZAMxNzA1NzAxMDE0BHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTQwNDkxOTkzMg--" style="text-decoration: none; color: #2D50FD">Start a New Topic</a>
          </td>
          <td>&bull;</td>
          <td style="font-size: 12px; font-family: arial; padding: 7px 5px 5px;color: #2D50FD;" >
                            <a href="https://groups.yahoo.com/neo/groups/rest-discuss/conversations/topics/19657;_ylc=X3oDMTM2Y3RscGNkBF9TAzk3MzU5NzE0BGdycElkAzQzMTkyNTUEZ3Jwc3BJZAMxNzA1NzAxMDE0BG1zZ0lkAzE5Njc0BHNlYwNmdHIEc2xrA3Z0cGMEc3RpbWUDMTQwNDkxOTkzMgR0cGNJZAMxOTY1Nw--" style="text-decoration: none; color: #2D50FD;">Messages in this topic</a>
                (18)
                      </td>
        </tr>
      </tbody>
    </table>

        

<!------- Start Nav Bar ------>




 

<!-- |**|begin egp html banner|**| -->
<div id="ygrp-vital" style="background-color: #f2f2f2; font-family: Verdana; font-size: 10px; margin-bottom: 10px; padding: 10px;">

    <span id="vithd" style="font-weight: bold; color: #333; text-transform: uppercase; "><a href="https://groups.yahoo.com/neo/groups/rest-discuss/info;_ylc=X3oDMTJlOW9qcDBvBF9TAzk3MzU5NzE0BGdycElkAzQzMTkyNTUEZ3Jwc3BJZAMxNzA1NzAxMDE0BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTQwNDkxOTkzMg--" style="text-decoration: none;">Visit Your Group</a></span>

     <ul style="list-style-type: none; margin: 0; padding: 0; display: inline;">
            <li style="border-right: 1px solid #000; font-weight: 700; display: inline; padding: 0 5px; margin-left: 0;">
      <span class="cat"><a href="https://groups.yahoo.com/neo/groups/rest-discuss/members/all;_ylc=X3oDMTJmdWMzYTgxBF9TAzk3MzU5NzE0BGdycElkAzQzMTkyNTUEZ3Jwc3BJZAMxNzA1NzAxMDE0BHNlYwN2dGwEc2xrA3ZtYnJzBHN0aW1lAzE0MDQ5MTk5MzI-" style="text-decoration: none;">New Members</a></span>
      <span class="ct" style="color: #ff7900;">2</span>
    </li>
                                              </ul>
  </div>


<div id="ft" style="font-family: Arial; font-size: 11px; margin-top: 5px; padding: 0 2px 0 0; clear: both;">
  <a href="https://groups.yahoo.com/neo;_ylc=X3oDMTJkbXZjM2lhBF9TAzk3MzU5NzE0BGdycElkAzQzMTkyNTUEZ3Jwc3BJZAMxNzA1NzAxMDE0BHNlYwNmdHIEc2xrA2dmcARzdGltZQMxNDA0OTE5OTMy" style="float: left;"><img src="http://l.yimg.com/ru/static/images/yg/img/email/new_logo/logo-groups-137x15.png" height="15" width="137" alt="Yahoo! Groups" style="border: 0;"/></a>
  <div style="color: #747575; float: right;"> &bull; <a href="https://info.yahoo.com/privacy/us/yahoo/groups/details.html" style="text-decoration: none;">Privacy</a> &bull; <a href="mailto:[email protected]?subject=Unsubscribe" style="text-decoration: none;">Unsubscribe</a> &bull; <a href="https://info.yahoo.com/legal/us/yahoo/utos/terms/" style="text-decoration: none;">Terms of Use</a> </div>
</div>
<br>

<!-- |**|end egp html banner|**| -->

  </div> <!-- ygrp-msg -->

 
  <!-- Sponsor -->
  <!-- |**|begin egp html banner|**| -->
  <div id="ygrp-sponsor" style="width:160px; float:right; clear:none; margin:0 0 25px 0; background: #fff;">

<!-- Start Recommendations -->
<div id="ygrp-reco">
     </div>
<!-- End Recommendations -->



  </div>   <!-- |**|end egp html banner|**| -->

  <div style="clear:both; color: #FFF; font-size:1px;">.</div>
</div>

  <img src="http://geo.yahoo.com/serv?s=97359714/grpId=4319255/grpspId=1705701014/msgId=19674/stime=1404919932" width="1" height="1"> <br>

<img src="http://y.analytics.yahoo.com/fpc.pl?ywarid=515FB27823A7407E&a=10001310322279&js=no&resp=img" width="1" height="1"> 

<div style="color: #fff; height: 0;">__,_._,___</div>
<!--~-|**|PrettyHtmlEnd|**|-~-->

</body>

<!--~-|**|PrettyHtmlStart|**|-~-->
<head>
  <style type="text/css">
  <!--
  #ygrp-mkp {
  border: 1px solid #d8d8d8;
  font-family: Arial;
  margin: 10px 0;
  padding: 0 10px;
}

#ygrp-mkp hr {
  border: 1px solid #d8d8d8;
}

#ygrp-mkp #hd {
  color: #628c2a;
  font-size: 85%;
  font-weight: 700;
  line-height: 122%;
  margin: 10px 0;
}

#ygrp-mkp #ads {
  margin-bottom: 10px;
}

#ygrp-mkp .ad {
  padding: 0 0;
}

#ygrp-mkp .ad p {
  margin: 0;
}

#ygrp-mkp .ad a {
  color: #0000ff;
  text-decoration: none;
}
  #ygrp-sponsor #ygrp-lc {
  font-family: Arial;
}

#ygrp-sponsor #ygrp-lc #hd {
  margin: 10px 0px;
  font-weight: 700;
  font-size: 78%;
  line-height: 122%;
}

#ygrp-sponsor #ygrp-lc .ad {
  margin-bottom: 10px;
  padding: 0 0;
}

  #actions {
    font-family: Verdana;
    font-size: 11px;
    padding: 10px 0;
  }

  #activity {
    background-color: #e0ecee;
    float: left;
    font-family: Verdana;
    font-size: 10px;
    padding: 10px;
  }

  #activity span {
    font-weight: 700;
  }

  #activity span:first-child {
    text-transform: uppercase;
  }

  #activity span a {
    color: #5085b6;
    text-decoration: none;
  }

  #activity span span {
    color: #ff7900;
  }

  #activity span .underline {
    text-decoration: underline;
  }

  .attach {
    clear: both;
    display: table;
    font-family: Arial;
    font-size: 12px;
    padding: 10px 0;
    width: 400px;
  }

  .attach div a {
    text-decoration: none;
  }

  .attach img {
    border: none;
    padding-right: 5px;
  }

  .attach label {
    display: block;
    margin-bottom: 5px;
  }

  .attach label a {
    text-decoration: none;
  }
  
  blockquote {
    margin: 0 0 0 4px;
  }

  .bold {
    font-family: Arial;
    font-size: 13px;
    font-weight: 700;
  }

  .bold a {
    text-decoration: none;
  }

  dd.last p a {
    font-family: Verdana;
    font-weight: 700;
  }

  dd.last p span {
    margin-right: 10px;
    font-family: Verdana;
    font-weight: 700;
  }

  dd.last p span.yshortcuts {
    margin-right: 0;
  }

  div.attach-table div div a {
    text-decoration: none;
  }

  div.attach-table {
    width: 400px;
  }

  div.file-title a, div.file-title a:active, div.file-title a:hover, div.file-title a:visited {
    text-decoration: none;
  }

  div.photo-title a, div.photo-title a:active, div.photo-title a:hover, div.photo-title a:visited {
    text-decoration: none;
  }

  div#ygrp-mlmsg #ygrp-msg p a span.yshortcuts {
    font-family: Verdana;
    font-size: 10px;
    font-weight: normal;
  }

  .green {
    color: #628c2a;
  }

  .MsoNormal {
    margin: 0 0 0 0;
  }

  o {
    font-size: 0;
  }

  #photos div {
    float: left;
    width: 72px;
  }

  #photos div div {
    border: 1px solid #666666;
    height: 62px;
    overflow: hidden;
    width: 62px;
  }

  #photos div label {
    color: #666666;
    font-size: 10px;
    overflow: hidden;
    text-align: center;
    white-space: nowrap;
    width: 64px;
  }

  #reco-category {
    font-size: 77%;
  }

  #reco-desc {
    font-size: 77%;
  }

  .replbq {
    margin: 4px;
  }

  #ygrp-actbar div a:first-child {
   /* border-right: 0px solid #000;*/
    margin-right: 2px;
    padding-right: 5px;
  }

  #ygrp-mlmsg {
    font-size: 13px;
    font-family: Arial, helvetica,clean, sans-serif;
    *font-size: small;
    *font: x-small;
  }

  #ygrp-mlmsg table {
    font-size: inherit;
    font: 100%;
  }

  #ygrp-mlmsg select, input, textarea {
    font: 99% Arial, Helvetica, clean, sans-serif;
  }

  #ygrp-mlmsg pre, code {
    font:115% monospace;
    *font-size:100%;
  }

  #ygrp-mlmsg * {
    line-height: 1.22em;
  }

  #ygrp-mlmsg #logo {
    padding-bottom: 10px;
  }


  #ygrp-msg p a {
    font-family: Verdana;
  }

  #ygrp-msg p#attach-count span {
    color: #1E66AE;
    font-weight: 700;
  }

  #ygrp-reco #reco-head {
    color: #ff7900;
    font-weight: 700;
  }

  #ygrp-reco {
    margin-bottom: 20px;
    padding: 0px;
  }

  #ygrp-sponsor #ov li a {
    font-size: 130%;
    text-decoration: none;
  }

  #ygrp-sponsor #ov li {
    font-size: 77%;
    list-style-type: square;
    padding: 6px 0;
  } 

  #ygrp-sponsor #ov ul {
    margin: 0;
    padding: 0 0 0 8px;
  }

  #ygrp-text {
    font-family: Georgia;
  }

  #ygrp-text p {
    margin: 0 0 1em 0;
  }

  #ygrp-text tt {
    font-size: 120%;
  }

  #ygrp-vital ul li:last-child {
    border-right: none !important; 
  } 
  -->
  </style>
</head>

<!--~-|**|PrettyHtmlEnd|**|-~-->
</html>
<!-- end group email -->


--hTIYnFEU5QtT0NSX0krbMIBdpryMoTyjxNz6YDA--