<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://opensimulator.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://opensimulator.org/index.php?action=history&amp;feed=atom&amp;title=User%3AAllen_Kerensky%2FMyriad_Lite_Dev%2FMyriad_Lite_Armor-v0.0.6-20120212.lsl</id>
		<title>User:Allen Kerensky/Myriad Lite Dev/Myriad Lite Armor-v0.0.6-20120212.lsl - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://opensimulator.org/index.php?action=history&amp;feed=atom&amp;title=User%3AAllen_Kerensky%2FMyriad_Lite_Dev%2FMyriad_Lite_Armor-v0.0.6-20120212.lsl"/>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/index.php?title=User:Allen_Kerensky/Myriad_Lite_Dev/Myriad_Lite_Armor-v0.0.6-20120212.lsl&amp;action=history"/>
		<updated>2026-06-14T03:10:54Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.19.9</generator>

	<entry>
		<id>http://opensimulator.org/index.php?title=User:Allen_Kerensky/Myriad_Lite_Dev/Myriad_Lite_Armor-v0.0.6-20120212.lsl&amp;diff=27728&amp;oldid=prev</id>
		<title>Allen Kerensky: created</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/index.php?title=User:Allen_Kerensky/Myriad_Lite_Dev/Myriad_Lite_Armor-v0.0.6-20120212.lsl&amp;diff=27728&amp;oldid=prev"/>
				<updated>2012-02-23T22:44:42Z</updated>
		
		<summary type="html">&lt;p&gt;created&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Myriad_Lite_Armor-v0.0.6-20120212.lsl =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Myriad_Lite_Armor_v0.0.6-20120212.lsl&lt;br /&gt;
// Copyright (c) 2012 By Allen Kerensky (OSG/SL)&lt;br /&gt;
// The Myriad RPG System was designed, written, and illustrated by Ashok Desai&lt;br /&gt;
// Myriad RPG licensed under the Creative Commons Attribution 2.0 UK: England and Wales&lt;br /&gt;
// http://creativecommons.org/licenses/by/2.0/uk/&lt;br /&gt;
// Myriad Lite software Copyright (c) 2011 by Allen Kerensky (OSG/SL)&lt;br /&gt;
// Baroun's Adventure Machine Copyright (c) 2008-2011 by Baroun Tardis (SL)&lt;br /&gt;
// Myriad Lite and Baroun's Adventure Machine licensed under the&lt;br /&gt;
// Creative Commons Attribution-Share Alike-Non-Commercial 3.0 Unported&lt;br /&gt;
// http://creativecommons.org/licenses/by-nc-sa/3.0/&lt;br /&gt;
// You must agree to the terms of this license before making any use of this software.&lt;br /&gt;
// If you do not agree to this license, simply delete these materials.&lt;br /&gt;
// There is no warranty, express or implied, for your use of these materials.&lt;br /&gt;
//============================================================================&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// MESSAGE FORMATS&lt;br /&gt;
//============================================================================&lt;br /&gt;
// CHANATTACH - IN - REGISTERATTACHMENTS&lt;br /&gt;
// CHANATTACH - OUT - ATTACHARMOR|int ARMORRATING|int ATTACHPOINT|string OBJECTNAME&lt;br /&gt;
// CHANATTACH - OUT - DETACHARMOR|int ARMORRATING|int ATTACHPOINT|string OBJECTNAME&lt;br /&gt;
// CHANATTACH - IN - ARMORHIT&lt;br /&gt;
// CHANATTACH - IN - ARMORBLOCKED&lt;br /&gt;
// CHANATTACH - IN - ARMORON&lt;br /&gt;
// CHANATTACH - IN - ARMOROFF&lt;br /&gt;
// CHANATTACH - IN - CHECKBATTERY&lt;br /&gt;
// CHANATTACH - IN - RECHARGE&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// CONSTANTS - variables which don't change over runtime&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Example Armor (Myriad PDF p64, Myriad Special Edition p98)&lt;br /&gt;
// Archaic Armor Ratings&lt;br /&gt;
// 1 Soft leather, heavy cloth&lt;br /&gt;
// 2 Hardened leather, thick hide&lt;br /&gt;
// 3 Chain mail, dragon hide&lt;br /&gt;
// 4 Full plate mail, mithril chain&lt;br /&gt;
// 5 Mithril plate mail&lt;br /&gt;
// Modern Armor Ratings&lt;br /&gt;
// 1 Leather jacket&lt;br /&gt;
// 2 Bullet-proof vest&lt;br /&gt;
// 3 SWAT tactical armor&lt;br /&gt;
// 4 Advanced military armor&lt;br /&gt;
// 5 Sci-fi powered battle armor&lt;br /&gt;
&lt;br /&gt;
string  VERSION = &amp;quot;0.0.6&amp;quot;; // version number&lt;br /&gt;
string  VERDATE = &amp;quot;20120212&amp;quot;; // version date&lt;br /&gt;
&lt;br /&gt;
integer ARMORRATING = 1; // the *actual* amount of protection THIS piece of armor provides&lt;br /&gt;
string  CHAN_PREFIX = &amp;quot;0x&amp;quot;; // channel prefix to convert to hexadecimal&lt;br /&gt;
string  DIV=&amp;quot;|&amp;quot;; // the divider used between fields on a Myriad Lite messages&lt;br /&gt;
integer MINATTACHPOINT = 1; // minimum allowed attachment point number&lt;br /&gt;
integer MAXATTACHPOINT = 30; // maximum allowed avatar/inworld attachpoint number for multiattach/HUD attach cheaters&lt;br /&gt;
integer MAXEFFECTTIME = 3; // maximum time to show armor hit/blocked effects&lt;br /&gt;
integer POWERARMOR; // does this armor burn power? configured in SETUP()&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// RUNTIME VARIABLES - variables which should change during runtime&lt;br /&gt;
//============================================================================&lt;br /&gt;
integer FLAG_DEBUG; // see debugging messages? Configured in SETUP();&lt;br /&gt;
key     WEARER = NULL_KEY; // holds UUID of last wearer, so we can send detach message to correct meter&lt;br /&gt;
integer ATTACHPOINT = 0; // the avatar position where armor attached to or detached from&lt;br /&gt;
integer CHANATTACH; // owner's attachment channel&lt;br /&gt;
integer HANDATTACH; // chat handle for attachment channel&lt;br /&gt;
integer ARMOR_ON; // is armor &amp;quot;on&amp;quot; and protecting when worn? configured in SETUP()&lt;br /&gt;
integer EFFECTTIME; // how much time is left to show armor effects&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// GLOBAL SETUP()&lt;br /&gt;
//============================================================================&lt;br /&gt;
SETUP() {&lt;br /&gt;
    FLAG_DEBUG = FALSE; // do we want debugging?&lt;br /&gt;
    ARMOR_ON = TRUE; // is power armor on and protecting by default&lt;br /&gt;
    POWERARMOR = TRUE; // is this a piece of power armor or not?&lt;br /&gt;
    WEARER = llGetOwner(); // set the default wearer key&lt;br /&gt;
    // calculate a dynamic chat channel based on owner key, for where the&lt;br /&gt;
    // wearer's ML HUD should be listening of attachment -specific events&lt;br /&gt;
    CHANATTACH = ATTACHCHANNEL(llGetOwner());&lt;br /&gt;
    // open a channel, listening on player HUD channel, save handle for later close if needed&lt;br /&gt;
    if ( HANDATTACH != 0 ) llListenRemove(HANDATTACH); // close an existing listerner first&lt;br /&gt;
    HANDATTACH = llListen(CHANATTACH,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// DEBUG - show debug chat with wearer name for sorting&lt;br /&gt;
//============================================================================&lt;br /&gt;
DEBUG(string dmessage) {&lt;br /&gt;
    if ( FLAG_DEBUG == TRUE ) llOwnerSay(&amp;quot;DEBUG: (&amp;quot;+llKey2Name(WEARER)+&amp;quot;): &amp;quot;+dmessage);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// RESET() - wrap the llResetScript so we can persist data if needed&lt;br /&gt;
//============================================================================&lt;br /&gt;
RESET() {&lt;br /&gt;
    llResetScript();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// VERSION&lt;br /&gt;
//============================================================================&lt;br /&gt;
GETVERSION() {&lt;br /&gt;
    integer dynchan = ATTACHCHANNEL(llGetOwner());&lt;br /&gt;
    llWhisper(dynchan,&amp;quot;VERSION=&amp;quot;+VERSION+DIV+&amp;quot;VERSIONDATE=&amp;quot;+VERDATE+DIV+llGetObjectName());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// ATTACHCHANNEL - calculate dynamic channels&lt;br /&gt;
//============================================================================&lt;br /&gt;
integer ATTACHCHANNEL(key forwho) {&lt;br /&gt;
    // FIXME validate key does if (uuid) work in OSgrid?&lt;br /&gt;
    if ( forwho == NULL_KEY ) return 0; // not valid&lt;br /&gt;
    return ((integer)(CHAN_PREFIX+llGetSubString((string)forwho,1,7)));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// ARMOR ON - ACTIVATE POWERED ARMOR&lt;br /&gt;
//============================================================================&lt;br /&gt;
ARMORON() {&lt;br /&gt;
    ARMOR_ON = TRUE;&lt;br /&gt;
    // your commands go here for armor special effect when starting up&lt;br /&gt;
    // *** BEGIN your special effect code here&lt;br /&gt;
    // ***&lt;br /&gt;
    // *** END your special effect code here&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// ARMOR OFF - DEACTIVATE POWERED ARMOR&lt;br /&gt;
//============================================================================&lt;br /&gt;
ARMOROFF() {&lt;br /&gt;
    if ( POWERARMOR == FALSE ) return;&lt;br /&gt;
    ARMOR_ON = FALSE;&lt;br /&gt;
    // your commands go here for armor special effect when shutting down&lt;br /&gt;
    // *** BEGIN your special effect code here&lt;br /&gt;
    // ***&lt;br /&gt;
    // *** END your special effect code here&lt;br /&gt;
    // ***&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// ARMORBATTERY() - SHOW SPECIAL ARMOR EFFECTS WHEN CHECKIGN ARMOR BATTERY LEVEL&lt;br /&gt;
//============================================================================&lt;br /&gt;
ARMORBATTERY() {&lt;br /&gt;
    // your commands go here for armor special effect when checking armor battery&lt;br /&gt;
    // *** BEGIN your special effect code here&lt;br /&gt;
    // ***&lt;br /&gt;
    // *** END your special effect code here&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// ARMORRECHARGE() - SHOW SPECIAL ARMOR EFFECTS WHEN RECHARGING ARMOR BATTERY LEVEL&lt;br /&gt;
//============================================================================&lt;br /&gt;
ARMORRECHARGE() {&lt;br /&gt;
    // your commands go here for armor special effect when recharging&lt;br /&gt;
    // *** BEGIN your special effect code here&lt;br /&gt;
    // ***&lt;br /&gt;
    // *** END your special effect code here&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// ARMORBATTERY() - SHOW SPECIAL ARMOR EFFECTS WHEN CHECKING ARMOR PROTECTION RATING&lt;br /&gt;
//============================================================================&lt;br /&gt;
ARMORCHECK() {&lt;br /&gt;
    // your commands go here for armor special effect when checking armor protection rating&lt;br /&gt;
    // *** BEGIN your special effect code here&lt;br /&gt;
    // ***&lt;br /&gt;
    // *** END your special effect code here&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// EFFECTHIT() - SHOW SPECIAL ARMOR EFFECTS WHEN ARMOR HIT BUT FAILS TO BLOCK&lt;br /&gt;
//============================================================================&lt;br /&gt;
EFFECTHIT() {&lt;br /&gt;
    // your commands go here for armor special effect when armor hit and does not block&lt;br /&gt;
    // *** BEGIN your special effect code here&lt;br /&gt;
    // ***&lt;br /&gt;
    // *** END your special effect code here&lt;br /&gt;
    EFFECTTIME = MAXEFFECTTIME; // load the countdown&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// EFFECTBLOCKED - CHANGE ARMOR EFFECT WHEN ARMOR HIT AND BLOCKS DAMAGE&lt;br /&gt;
//============================================================================&lt;br /&gt;
EFFECTBLOCKED() {&lt;br /&gt;
    // your commands go here for armor special effect when armor BLOCKS a hit&lt;br /&gt;
    // *** BEGIN your special effect code here&lt;br /&gt;
    // ***&lt;br /&gt;
    // *** END your special effect code here&lt;br /&gt;
    // ***        &lt;br /&gt;
    EFFECTTIME = MAXEFFECTTIME; // load the countdown&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// EFFECTOFF - RESET ARMOR TO NORMAL VIEW&lt;br /&gt;
//============================================================================&lt;br /&gt;
EFFECTOFF() {&lt;br /&gt;
    // your commands go here to turn off armor effects&lt;br /&gt;
    // *** BEGIN your special effect code here&lt;br /&gt;
    // ***&lt;br /&gt;
    // *** END your special effect code here&lt;br /&gt;
    // ***&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// DEFAULT&lt;br /&gt;
//============================================================================&lt;br /&gt;
default {&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // DEFAULT STATE ENTRY - begin our setup or call a setup block&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        SETUP(); // call the event-independent SETUP code&lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // DEFAULT ON_REZ&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    on_rez(integer start_param) {&lt;br /&gt;
        start_param = 0; // LSLINT&lt;br /&gt;
        SETUP(); // call event independent SETUP code        &lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // DEFAULT ATTACH - Called for detach too&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    attach(key id) {&lt;br /&gt;
        DEBUG(&amp;quot;attach(&amp;quot;+(string)id+&amp;quot;)&amp;quot;);&lt;br /&gt;
        if ( id == NULL_KEY ) { // on detach act fast&lt;br /&gt;
            llWhisper((integer)(CHAN_PREFIX+llGetSubString((string)llGetOwner(),1,7)),&amp;quot;ARMORDETACH&amp;quot;+DIV+(string)ARMORRATING+DIV+(string)POWERARMOR+DIV+(string)ATTACHPOINT+DIV+llGetObjectName());&lt;br /&gt;
            WEARER = NULL_KEY; // armor detached and reported as such, so we can forget previous wearer&lt;br /&gt;
            ATTACHPOINT = 0; // armor detached and reported as such, so we can forget previous attach point&lt;br /&gt;
            return;&lt;br /&gt;
        } // end of if id not equal null key    &lt;br /&gt;
        // is this an attach event or detach event?&lt;br /&gt;
        if ( id != NULL_KEY ) { // a valid key means its an attach&lt;br /&gt;
            SETUP(); // call event-independent SETUP code&lt;br /&gt;
            WEARER = id; // save who attached this armor piece for use during detach&lt;br /&gt;
            ATTACHPOINT = llGetAttached(); // where was this armor attached?&lt;br /&gt;
            // this should NOT be necessary, since it should match CHANPLAYER&lt;br /&gt;
            integer dynchan = ATTACHCHANNEL(WEARER);&lt;br /&gt;
            // send the ATTACHARMOR to ML HUD to register that this armor piece is worn&lt;br /&gt;
            llWhisper(dynchan,&amp;quot;ARMORATTACH&amp;quot;+DIV+(string)ARMORRATING+DIV+(string)POWERARMOR+DIV+(string)ATTACHPOINT+DIV+llGetObjectName());&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // DEFAULT CHANGED&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    changed(integer change) {&lt;br /&gt;
        if ( change &amp;amp; CHANGED_OWNER ) { // if armor has a new owner from take-from-ground or copy, resetup&lt;br /&gt;
            SETUP(); // call event-independent setup code, in this case to update channels&lt;br /&gt;
        }&lt;br /&gt;
        if ( ( change &amp;amp; CHANGED_REGION ) || ( change &amp;amp; CHANGED_TELEPORT ) ) {&lt;br /&gt;
            EFFECTOFF(); // stop effects before reset&lt;br /&gt;
            // FIXME - resets battery state&lt;br /&gt;
            RESET();&lt;br /&gt;
        }&lt;br /&gt;
    }    &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // DEFAULT LISTEN&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    listen(integer channel,string speakername,key speakerid,string message) {&lt;br /&gt;
        speakername = &amp;quot;&amp;quot;; // LSLINT&lt;br /&gt;
        speakerid = NULL_KEY; // LSLINT&lt;br /&gt;
        ATTACHPOINT = llGetAttached(); // get location we're attached to&lt;br /&gt;
        list tokens = llParseString2List(message,[&amp;quot;|&amp;quot;],[]);&lt;br /&gt;
        string command = llToLower(llStringTrim(llList2String(tokens,0),STRING_TRIM));&lt;br /&gt;
        if ( channel == CHANATTACH ) { // is this message on the attach channel?&lt;br /&gt;
            // General Myriad Lite System Commands&lt;br /&gt;
            if ( command == &amp;quot;reset&amp;quot; ) { RESET(); return; }&lt;br /&gt;
            if ( command == &amp;quot;version&amp;quot; ) { GETVERSION(); return; }&lt;br /&gt;
            if ( command == &amp;quot;debugon&amp;quot; ) { FLAG_DEBUG = TRUE; DEBUG(&amp;quot;on&amp;quot;); return; }&lt;br /&gt;
            if ( command == &amp;quot;debugoff&amp;quot; ) { FLAG_DEBUG = FALSE; DEBUG(&amp;quot;off&amp;quot;); return; }&lt;br /&gt;
            // Armor Commands&lt;br /&gt;
            if ( ( command == &amp;quot;registerattachments&amp;quot; ) &amp;amp;&amp;amp; ( ATTACHPOINT &amp;gt;= MINATTACHPOINT ) &amp;amp;&amp;amp; ( ATTACHPOINT &amp;lt;= MAXATTACHPOINT ) ) {&lt;br /&gt;
                WEARER = llGetOwner(); // get armor owner BUG: what if owner not equal wearer?&lt;br /&gt;
                // calculate the dynamic channel of the wearer&lt;br /&gt;
                integer dynchan = (integer)(CHAN_PREFIX+llGetSubString((string)WEARER,1,7));&lt;br /&gt;
                // send the ATTACHARMOR to ML HUD to register that this armor piece is worn&lt;br /&gt;
                llWhisper(dynchan,&amp;quot;ARMORATTACH&amp;quot;+DIV+(string)ARMORRATING+DIV+(string)POWERARMOR+DIV+(string)ATTACHPOINT+DIV+llGetObjectName());&lt;br /&gt;
                return; // message processed, exit early&lt;br /&gt;
            } // end of if message equal REGISTERATTACHMENTS&lt;br /&gt;
            if ( command == &amp;quot;armorreset&amp;quot; ) { RESET(); return;} // reset armor&lt;br /&gt;
            if ( command == &amp;quot;armoron&amp;quot; ) { ARMORON(); return;} // activate power armor&lt;br /&gt;
            if ( command == &amp;quot;armoroff&amp;quot; ) { ARMOROFF(); return;} // deactivate power armor&lt;br /&gt;
            if ( command == &amp;quot;armorbattery&amp;quot; ) { ARMORBATTERY(); return;} // show effects on armor battery level check&lt;br /&gt;
            if ( command == &amp;quot;armorrecharge&amp;quot; ) { ARMORRECHARGE(); return;} // show effects on armor recharge&lt;br /&gt;
            if ( command == &amp;quot;armorcheck&amp;quot; ) { ARMORCHECK(); return;} // show effects on armor check            &lt;br /&gt;
            if ( command == &amp;quot;armoreffecthit&amp;quot; ) { EFFECTHIT(); return; } // is this an armor hit?&lt;br /&gt;
            if ( command == &amp;quot;armoreffectblocked&amp;quot; ) { EFFECTBLOCKED(); return; } // did the armor block the hit too&lt;br /&gt;
            if ( command == &amp;quot;armoreffectoff&amp;quot; ) { EFFECTOFF(); return; } // time to turn off effects?&lt;br /&gt;
            // ML HUD sent a request for any attached items&lt;br /&gt;
        } // end if channel CHANATTACH&lt;br /&gt;
    } &lt;br /&gt;
       &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // TIMER CALLED TO TURN OFF THE SPECIAL EFFECTS&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    timer() {&lt;br /&gt;
        EFFECTTIME--;&lt;br /&gt;
        if ( EFFECTTIME &amp;lt;= 0 ) { &lt;br /&gt;
            EFFECTOFF(); // turn off special effects&lt;br /&gt;
            EFFECTTIME=0; // make it zero anyway&lt;br /&gt;
        } // timer expired, turn off effect&lt;br /&gt;
        if ( EFFECTTIME &amp;lt;= 0 || ARMOR_ON == FALSE ) llSetTimerEvent(0.0); // all timers done, stop timer events&lt;br /&gt;
    } // end timer&lt;br /&gt;
} // end default&lt;br /&gt;
//============================================================================&lt;br /&gt;
// END&lt;br /&gt;
//============================================================================&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>	</entry>

	</feed>