<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";
        color:black;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:"Courier New";
        color:black;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:199558338;
        mso-list-type:hybrid;
        mso-list-template-ids:1334497586 -1 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
        {mso-level-start-at:0;
        mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;
        mso-fareast-font-family:"Times New Roman";
        mso-bidi-font-family:Calibri;}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l1
        {mso-list-id:1885871744;
        mso-list-type:hybrid;
        mso-list-template-ids:-1281850172 -1 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l1:level1
        {mso-level-start-at:0;
        mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:20.25pt;
        text-indent:-.25in;
        font-family:Symbol;
        mso-fareast-font-family:"Times New Roman";
        mso-bidi-font-family:Calibri;}
@list l1:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:56.25pt;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l1:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:92.25pt;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l1:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:128.25pt;
        text-indent:-.25in;
        font-family:Symbol;}
@list l1:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:164.25pt;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l1:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:200.25pt;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l1:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:236.25pt;
        text-indent:-.25in;
        font-family:Symbol;}
@list l1:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:272.25pt;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l1:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:308.25pt;
        text-indent:-.25in;
        font-family:Wingdings;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style></head><body lang=EN-US link=blue vlink="#954F72"><div class=WordSection1><p class=MsoNormal>Yes, Leonard, for quite some time I have an X3D JSON PROTOtypeExpander.js that works with X3D PROTOs and EXTERNPROTOs and displays in X3DOM.  I don’t know how complete it is, and testers are welcome. My EXTERNPROTO expander runs on the server, so is not included in the message, but it is included in the link in the original message.  If someone can make the EXTERNPROTO expander work client side that would be great.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The EXTERNPROTO expander is generally called like:</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>                json = externPrototypeExpander(outfile, json);</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Where json is the parent json of the extern, and outfile is the parent X3D file being loaded (I think “” will probably do in a pinch.  I am not sure.).  The extern PROTOs will be included in the original JSON as a ProtoDeclare object.  You may have to run the flattener afterwards, and it is run as:</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><span style='font-size:14.0pt'>            <span style='color:black'>json = flattener(json);<o:p></o:p></span></span></p><p class=MsoNormal><span style='font-size:14.0pt;color:black'><o:p> </o:p></span></p><p class=MsoNormal>It removes empty objects from the JSON.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Yes, I would like someone to help me with VRMLScript for X3DOM, if someone is available.  I have a very barebones and incorrect implementation here:</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><a href="https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/Script.js">https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/Script.js</a></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Please help.  I don’t know the X3D event model, and I’m not likely to learn soon.  The X3D event model can be emulated in Browser-side JavaScript, but there’s only Cobweb for proof.<o:p></o:p></p><p class=MsoNormal><br>I have another version of flipper.html here that works with X3DOM and Cobweb adding the subscene later.  It works with Promises, but the functions still aren’t separated…close, but no cigar.  Take a look:</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><a href="https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/html/flipper.html">https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/html/flipper.html</a></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Sorry, I tend to use the XML version of “Proto”, and not the VRML “PROTO”.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>X3DJSONLD provides an infrastructure for X3D JSON Browser development, including X3D XML -> X3D JSON conversion on the server, and X3D JSON to X3D XML loading into X3DOM and Cobweb.  It also includes conversions from XML DOM to Java and Nashorn JavaScript for X3DJSAIL app development.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>There is definite potential for an XML PROTO expander, as I have written this code, but not seriously tested:</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><a href="https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/CompleteXMLPrototypeExpander.js">https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/CompleteXMLPrototypeExpander.js</a></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>So far, it’s still server-side.  If you’re going to modify it, split it into server and client-side pieces, please.  Complete is probably a misnomer…</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Thanks,</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>John</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Sent from <a href="https://go.microsoft.com/fwlink/?LinkId=550986">Mail</a> for Windows 10</p><p class=MsoNormal><o:p> </o:p></p><div style='mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal style='border:none;padding:0in'><b>From: </b><a href="mailto:Leonard.Daly@realism.com">Leonard Daly</a><br><b>Sent: </b>Saturday, May 20, 2017 7:17 PM<br><b>To: </b><a href="mailto:yottzumm@gmail.com">John Carlson</a>; <a href="mailto:andreasplesch@gmail.com">Andreas Plesch</a>; <a href="mailto:holger.seelig@yahoo.de">holger.seelig@yahoo.de</a><br><b>Cc: </b><a href="mailto:x3dom-users@lists.sourceforge.net">x3dom-users@lists.sourceforge.net</a>; <a href="mailto:x3d-public@web3d.org">X3D Graphics public mailing list</a><br><b>Subject: </b>Re: [x3dom-users] Cobweb_dom...Script Magic? Loading DOM subscenesafter parent in X3DOM and Cobweb.</p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal style='margin-bottom:12.0pt'><span style='color:black'>John,<o:p></o:p></span></p><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><p class=MsoNormal><span style='color:black'>Cobweb_dom, X3DOM experts, I need some help adding a child DOM scenegraph with prototypes to a parent DOM scenegraph after the <o:p></o:p></span></p></blockquote><p class=MsoNormal><span style='color:black'><br>Not sure how any of this applies to X3DOM as it does not have PROTOs. Assuming you mean X3D prototypes via PROTO or EXTERNPROTO. If you mean something else, please elaborate.<br><br><br>Leonard Daly<br><br><br><br><br><o:p></o:p></span></p><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><p class=MsoNormal><span style='color:black'>primary scene has been  loaded, and not before. I have an example of loading before the scene is loaded, and in a callback.  If you have an example with Promises instead of callback nesting, that would be more ideal, the second $.getJSON() (child scenegraph) might finish before the first $.getJSON() (parent scenegraph) if I don’t use promises or callback nesting. Also, Promises would allow me to separate the parent loading somewhat from the child loading, and create separate functions.  Also, X3DOM experts can provide an example with Promises as well.  Meanwhile, I will be reading about Promises.<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'> <o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>Here is my example so far:<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'><a href="https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/html/flipper.html">https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/html/flipper.html</a><br><br>Viewable here:<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'><a href="https://coderextreme.net/X3DJSONLD/src/main/html/flipper.html">https://coderextreme.net/X3DJSONLD/src/main/html/flipper.html</a><o:p></o:p></span></p><p class=MsoNormal><span style='color:black'> <o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>The white Box is the subscene of the dolphin scene.<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'> <o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>The following related code is from <a href="https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/loaderJQuery.js">https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/loaderJQuery.js</a><o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>and references code from:<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'> <o:p></o:p></span></p><p class=MsoNormal><span style='color:black'><a href="https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/X3DJSONLD.js">https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/X3DJSONLD.js</a><o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>[ actually, I think the last two reference each other – naughty ]<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'> <o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>Data is here:<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>[ child scenegraph ]<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'><a href="https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/data/abox.json">https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/data/abox.json</a><o:p></o:p></span></p><p class=MsoNormal><span style='color:black'> <o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>[ parent scenegraph ]<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'><a href="https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/data/flipp.json">https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/data/flipp.json</a><o:p></o:p></span></p><p class=MsoNormal><span style='color:black'> <o:p></o:p></span></p><p class=MsoNormal><span style='color:black'> <o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>Cobweb doesn’t need the prototypeExpander or the flattener (well, it might have with prototypes in cobweb_dom, but I think the last release fixed that…haven’t checked—here is a good test for you!).  This is a dual example, and I haven’t figured out how to conditionally run the prototypeExpander on only X3DOM code.  Please test without the PrototypeExpander.js and Flattener.js included, and remove X3DOM, since it won’t work in that case.  X3DOM folks can include the two JavaScript files which are here:<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'> <o:p></o:p></span></p><p class=MsoNormal><span style='color:black'><a href="https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/PrototypeExpander.js">https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/PrototypeExpander.js</a><o:p></o:p></span></p><p class=MsoNormal><span style='color:black'><a href="https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/Flattener.js">https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/Flattener.js</a><o:p></o:p></span></p><p class=MsoNormal><span style='color:black'> <o:p></o:p></span></p><p class=MsoNormal><span style='color:black'> <o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>You may provide your own appendInline (below) which doesn’t call loadSchema.  That may be too complex of a download.  That is, you probably don’t want to do all that JSON schema validation in your example.  Try to keep my code close to what it is otherwise.<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'> <o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>And if you start supporting X3D JSON in your viewers, that would be even better!<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'> <o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>John<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'> <o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>/**<o:p></o:p></span></p><p class=MsoNormalCxSpMiddle style='margin-left:56.25pt;mso-add-space:auto;text-indent:-.25in;line-height:105%;mso-list:l1 level1 lfo1'><![if !supportLists]><span style='font-family:Symbol;color:black'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>         </span></span></span><![endif]><span style='color:black'>Next is passed the element parameter<o:p></o:p></span></p><p class=MsoNormalCxSpMiddle style='margin-left:56.25pt;mso-add-space:auto;text-indent:-.25in;line-height:105%;mso-list:l1 level1 lfo1'><![if !supportLists]><span style='font-family:Symbol;color:black'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>         </span></span></span><![endif]><span style='color:black'>*/<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>function appendInline(element, url, next) {<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>        $.getJSON(url, function(json) {<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>                if (typeof prototypeExpander === 'function') {<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>                        json = prototypeExpander(url, json, "");<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>                } else {<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>                        console.error("Perhaps you need to include the PrototypeExpander.js?");<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>                }<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>                if (typeof flattener === 'function') {<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>                        json = flattener(json);<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>                } else {<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>                        console.error("Perhaps you need to include the Flattener.js?");<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>                }<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>                // must validate here because we call an inner method.<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>                loadSchema(json, url, doValidate, function() {<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>                        ConvertToX3DOM(json["X3D"]["Scene"], "Scene", element, url);<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>                        next(element);<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>                }, function(e) {<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>                        console.error(e);<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>                });<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>        }).fail(function(jqXHR, textStatus, errorThrown) { alert('getJSON request failed! ' + textStatus + ' ' + errorThrown); });<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>}<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'> <o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>/**<o:p></o:p></span></p><p class=MsoNormalCxSpMiddle style='margin-left:1.0in;mso-add-space:auto;text-indent:-.25in;line-height:105%;mso-list:l0 level1 lfo2'><![if !supportLists]><span style='font-family:Symbol;color:black'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>         </span></span></span><![endif]><span style='color:black'>Next is passed the selected element from selector<o:p></o:p></span></p><p class=MsoNormalCxSpMiddle style='margin-left:1.0in;mso-add-space:auto;text-indent:-.25in;line-height:105%;mso-list:l0 level1 lfo2'><![if !supportLists]><span style='font-family:Symbol;color:black'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>         </span></span></span><![endif]><span style='color:black'>Selector is the CSS selector to append inline to.<o:p></o:p></span></p><p class=MsoNormalCxSpMiddle style='margin-left:1.0in;mso-add-space:auto;text-indent:-.25in;line-height:105%;mso-list:l0 level1 lfo2'><![if !supportLists]><span style='font-family:Symbol;color:black'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>         </span></span></span><![endif]><span style='color:black'>*/<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>function loadSubscene(selector, url, next) {<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>        appendInline(document.querySelector(selector), url, next);<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>}<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'><br><br><br><o:p></o:p></span></p><pre>------------------------------------------------------------------------------</pre><pre>Check out the vibrant tech community on one of the world's most</pre><pre>engaging tech sites, Slashdot.org! <a href="http://sdm.link/slashdot">http://sdm.link/slashdot</a></pre><p class=MsoNormal><span style='color:black'><br><br><br><o:p></o:p></span></p><pre>_______________________________________________</pre><pre>X3dom-users mailing list</pre><pre><a href="mailto:X3dom-users@lists.sourceforge.net">X3dom-users@lists.sourceforge.net</a></pre><pre><a href="https://lists.sourceforge.net/lists/listinfo/x3dom-users">https://lists.sourceforge.net/lists/listinfo/x3dom-users</a></pre></blockquote><p><o:p> </o:p></p><p class=MsoNormal><span style='color:black'>-- <br></span><b><span style='font-size:13.5pt;color:#333366'>Leonard Daly</span></b><span style='color:#333366'><br>3D Systems & Cloud Consultant<br>LA ACM SIGGRAPH Chair<br>President, Daly Realism - <i>Creating the Future</i> </span><span style='color:black'><o:p></o:p></span></p><p class=MsoNormal><span style='color:black'><o:p> </o:p></span></p></div></body></html>