<!DOCTYPE html>
<html lang="en">
	<head>
		<title>ics - sections.go</title>
		<link type="text/css" rel="stylesheet" href="/style/src.css">
	</head>
	<body>
		<h1><a href="/ics">ics</a> - sections.go</h1>
		<pre>
<span class="hidden"><a id="L1" href="#L1">     1</a>  </span><span>package ics</span>
<span class="hidden"><a id="L2" href="#L2">     2</a>  </span>
<span class="hidden"><a id="L3" href="#L3">     3</a>  </span><span class="text">// File automatically generated with ./genSections.sh</span>
<span class="hidden"><a id="L4" href="#L4">     4</a>  </span>
<span class="hidden"><a id="L5" href="#L5">     5</a>  </span><span>import (</span>
<span class="hidden"><a id="L6" href="#L6">     6</a>  </span><span>	&#34;errors&#34;</span>
<span class="hidden"><a id="L7" href="#L7">     7</a>  </span><span>	&#34;fmt&#34;</span>
<span class="hidden"><a id="L8" href="#L8">     8</a>  </span><span>	&#34;io&#34;</span>
<span class="hidden"><a id="L9" href="#L9">     9</a>  </span><span>	&#34;strings&#34;</span>
<span class="hidden"><a id="L10" href="#L10">    10</a>  </span>
<span class="hidden"><a id="L11" href="#L11">    11</a>  </span><span>	&#34;vimagination.zapto.org</span><span>/parser&#34;</span>
<span class="hidden"><a id="L12" href="#L12">    12</a>  </span><span>)</span>
<span class="hidden"><a id="L13" href="#L13">    13</a>  </span>
<span class="hidden"><a id="L14" href="#L14">    14</a>  </span><span class="text">// Calendar represents a iCalendar object.</span>
<span class="hidden"><a id="L15" href="#L15">    15</a>  </span><span>type Calendar struct {</span>
<span class="hidden"><a id="L16" href="#L16">    16</a>  </span><span>	Version   PropVersion</span>
<span class="hidden"><a id="L17" href="#L17">    17</a>  </span><span>	ProductID PropProductID</span>
<span class="hidden"><a id="L18" href="#L18">    18</a>  </span><span>	Event     []Event</span>
<span class="hidden"><a id="L19" href="#L19">    19</a>  </span><span>	Todo      []Todo</span>
<span class="hidden"><a id="L20" href="#L20">    20</a>  </span><span>	Journal   []Journal</span>
<span class="hidden"><a id="L21" href="#L21">    21</a>  </span><span>	FreeBusy  []FreeBusy</span>
<span class="hidden"><a id="L22" href="#L22">    22</a>  </span><span>	Timezone  []Timezone</span>
<span class="hidden"><a id="L23" href="#L23">    23</a>  </span><span>}</span>
<span class="hidden"><a id="L24" href="#L24">    24</a>  </span>
<span class="hidden"><a id="L25" href="#L25">    25</a>  </span><span>func (s *Calendar) decode(t tokeniser) error {</span>
<span class="hidden"><a id="L26" href="#L26">    26</a>  </span><span>	var requiredVersion, requiredProductID bool</span>
<span class="hidden"><a id="L27" href="#L27">    27</a>  </span>
<span class="hidden"><a id="L28" href="#L28">    28</a>  </span><span>Loop:</span>
<span class="hidden"><a id="L29" href="#L29">    29</a>  </span><span>	for {</span>
<span class="hidden"><a id="L30" href="#L30">    30</a>  </span><span>		p, err := t.GetPhrase()</span>
<span class="hidden"><a id="L31" href="#L31">    31</a>  </span><span>		if err != nil {</span>
<span class="hidden"><a id="L32" href="#L32">    32</a>  </span><span>			return fmt.Errorf(errDecodingType, cCalendar, err)</span>
<span class="hidden"><a id="L33" href="#L33">    33</a>  </span><span>		} else if p.Type == parser.PhraseDone {</span>
<span class="hidden"><a id="L34" href="#L34">    34</a>  </span><span>			return fmt.Errorf(errDecodingType, cCalendar, io.ErrUnexpectedEOF)</span>
<span class="hidden"><a id="L35" href="#L35">    35</a>  </span><span>		}</span>
<span class="hidden"><a id="L36" href="#L36">    36</a>  </span>
<span class="hidden"><a id="L37" href="#L37">    37</a>  </span><span>		params := p.Data[1 : len(p.Data)-1]</span>
<span class="hidden"><a id="L38" href="#L38">    38</a>  </span><span>		value := p.Data[len(p.Data)-1].Data</span>
<span class="hidden"><a id="L39" href="#L39">    39</a>  </span>
<span class="hidden"><a id="L40" href="#L40">    40</a>  </span><span>		switch strings.ToUpper(p.Data[0].Data) {</span>
<span class="hidden"><a id="L41" href="#L41">    41</a>  </span><span>		case &#34;BEGIN&#34;:</span>
<span class="hidden"><a id="L42" href="#L42">    42</a>  </span><span>			switch n := strings.ToUpper(value); n {</span>
<span class="hidden"><a id="L43" href="#L43">    43</a>  </span><span>			case &#34;VEVENT&#34;:</span>
<span class="hidden"><a id="L44" href="#L44">    44</a>  </span><span>				var e Event</span>
<span class="hidden"><a id="L45" href="#L45">    45</a>  </span>
<span class="hidden"><a id="L46" href="#L46">    46</a>  </span><span>				if err := e.decode(t); err != nil {</span>
<span class="hidden"><a id="L47" href="#L47">    47</a>  </span><span>					return fmt.Errorf(errDecodingProp, cCalendar, cEvent, err)</span>
<span class="hidden"><a id="L48" href="#L48">    48</a>  </span><span>				}</span>
<span class="hidden"><a id="L49" href="#L49">    49</a>  </span>
<span class="hidden"><a id="L50" href="#L50">    50</a>  </span><span>				s.Event = append(s.Event, e)</span>
<span class="hidden"><a id="L51" href="#L51">    51</a>  </span><span>			case &#34;VTODO&#34;:</span>
<span class="hidden"><a id="L52" href="#L52">    52</a>  </span><span>				var e Todo</span>
<span class="hidden"><a id="L53" href="#L53">    53</a>  </span>
<span class="hidden"><a id="L54" href="#L54">    54</a>  </span><span>				if err := e.decode(t); err != nil {</span>
<span class="hidden"><a id="L55" href="#L55">    55</a>  </span><span>					return fmt.Errorf(errDecodingProp, cCalendar, cTodo, err)</span>
<span class="hidden"><a id="L56" href="#L56">    56</a>  </span><span>				}</span>
<span class="hidden"><a id="L57" href="#L57">    57</a>  </span>
<span class="hidden"><a id="L58" href="#L58">    58</a>  </span><span>				s.Todo = append(s.Todo, e)</span>
<span class="hidden"><a id="L59" href="#L59">    59</a>  </span><span>			case &#34;VJOURNAL&#34;:</span>
<span class="hidden"><a id="L60" href="#L60">    60</a>  </span><span>				var e Journal</span>
<span class="hidden"><a id="L61" href="#L61">    61</a>  </span>
<span class="hidden"><a id="L62" href="#L62">    62</a>  </span><span>				if err := e.decode(t); err != nil {</span>
<span class="hidden"><a id="L63" href="#L63">    63</a>  </span><span>					return fmt.Errorf(errDecodingProp, cCalendar, cJournal, err)</span>
<span class="hidden"><a id="L64" href="#L64">    64</a>  </span><span>				}</span>
<span class="hidden"><a id="L65" href="#L65">    65</a>  </span>
<span class="hidden"><a id="L66" href="#L66">    66</a>  </span><span>				s.Journal = append(s.Journal, e)</span>
<span class="hidden"><a id="L67" href="#L67">    67</a>  </span><span>			case &#34;VFREEBUSY&#34;:</span>
<span class="hidden"><a id="L68" href="#L68">    68</a>  </span><span>				var e FreeBusy</span>
<span class="hidden"><a id="L69" href="#L69">    69</a>  </span>
<span class="hidden"><a id="L70" href="#L70">    70</a>  </span><span>				if err := e.decode(t); err != nil {</span>
<span class="hidden"><a id="L71" href="#L71">    71</a>  </span><span>					return fmt.Errorf(errDecodingProp, cCalendar, cFreeBusy, err)</span>
<span class="hidden"><a id="L72" href="#L72">    72</a>  </span><span>				}</span>
<span class="hidden"><a id="L73" href="#L73">    73</a>  </span>
<span class="hidden"><a id="L74" href="#L74">    74</a>  </span><span>				s.FreeBusy = append(s.FreeBusy, e)</span>
<span class="hidden"><a id="L75" href="#L75">    75</a>  </span><span>			case &#34;VTIMEZONE&#34;:</span>
<span class="hidden"><a id="L76" href="#L76">    76</a>  </span><span>				var e Timezone</span>
<span class="hidden"><a id="L77" href="#L77">    77</a>  </span>
<span class="hidden"><a id="L78" href="#L78">    78</a>  </span><span>				if err := e.decode(t); err != nil {</span>
<span class="hidden"><a id="L79" href="#L79">    79</a>  </span><span>					return fmt.Errorf(errDecodingProp, cCalendar, cTimezone, err)</span>
<span class="hidden"><a id="L80" href="#L80">    80</a>  </span><span>				}</span>
<span class="hidden"><a id="L81" href="#L81">    81</a>  </span>
<span class="hidden"><a id="L82" href="#L82">    82</a>  </span><span>				s.Timezone = append(s.Timezone, e)</span>
<span class="hidden"><a id="L83" href="#L83">    83</a>  </span><span>			default:</span>
<span class="hidden"><a id="L84" href="#L84">    84</a>  </span><span>				if err := decodeDummy(t, n); err != nil {</span>
<span class="hidden"><a id="L85" href="#L85">    85</a>  </span><span>					return fmt.Errorf(errDecodingType, cCalendar, err)</span>
<span class="hidden"><a id="L86" href="#L86">    86</a>  </span><span>				}</span>
<span class="hidden"><a id="L87" href="#L87">    87</a>  </span><span>			}</span>
<span class="hidden"><a id="L88" href="#L88">    88</a>  </span><span>		case &#34;VERSION&#34;:</span>
<span class="hidden"><a id="L89" href="#L89">    89</a>  </span><span>			if requiredVersion {</span>
<span class="hidden"><a id="L90" href="#L90">    90</a>  </span><span>				return fmt.Errorf(errMultiple, cCalendar, cVersion)</span>
<span class="hidden"><a id="L91" href="#L91">    91</a>  </span><span>			}</span>
<span class="hidden"><a id="L92" href="#L92">    92</a>  </span>
<span class="hidden"><a id="L93" href="#L93">    93</a>  </span><span>			requiredVersion = true</span>
<span class="hidden"><a id="L94" href="#L94">    94</a>  </span>
<span class="hidden"><a id="L95" href="#L95">    95</a>  </span><span>			if err := s.Version.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L96" href="#L96">    96</a>  </span><span>				return fmt.Errorf(errDecodingProp, cCalendar, cVersion, err)</span>
<span class="hidden"><a id="L97" href="#L97">    97</a>  </span><span>			}</span>
<span class="hidden"><a id="L98" href="#L98">    98</a>  </span><span>		case &#34;PRODID&#34;:</span>
<span class="hidden"><a id="L99" href="#L99">    99</a>  </span><span>			if requiredProductID {</span>
<span class="hidden"><a id="L100" href="#L100">   100</a>  </span><span>				return fmt.Errorf(errMultiple, cCalendar, cProductID)</span>
<span class="hidden"><a id="L101" href="#L101">   101</a>  </span><span>			}</span>
<span class="hidden"><a id="L102" href="#L102">   102</a>  </span>
<span class="hidden"><a id="L103" href="#L103">   103</a>  </span><span>			requiredProductID = true</span>
<span class="hidden"><a id="L104" href="#L104">   104</a>  </span>
<span class="hidden"><a id="L105" href="#L105">   105</a>  </span><span>			if err := s.ProductID.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L106" href="#L106">   106</a>  </span><span>				return fmt.Errorf(errDecodingProp, cCalendar, cProductID, err)</span>
<span class="hidden"><a id="L107" href="#L107">   107</a>  </span><span>			}</span>
<span class="hidden"><a id="L108" href="#L108">   108</a>  </span><span>		case &#34;END&#34;:</span>
<span class="hidden"><a id="L109" href="#L109">   109</a>  </span><span>			if value != &#34;VCALENDAR&#34; {</span>
<span class="hidden"><a id="L110" href="#L110">   110</a>  </span><span>				return fmt.Errorf(errDecodingType, cCalendar, ErrInvalidEnd)</span>
<span class="hidden"><a id="L111" href="#L111">   111</a>  </span><span>			}</span>
<span class="hidden"><a id="L112" href="#L112">   112</a>  </span>
<span class="hidden"><a id="L113" href="#L113">   113</a>  </span><span>			break Loop</span>
<span class="hidden"><a id="L114" href="#L114">   114</a>  </span><span>		}</span>
<span class="hidden"><a id="L115" href="#L115">   115</a>  </span><span>	}</span>
<span class="hidden"><a id="L116" href="#L116">   116</a>  </span>
<span class="hidden"><a id="L117" href="#L117">   117</a>  </span><span>	if !requiredVersion || !requiredProductID {</span>
<span class="hidden"><a id="L118" href="#L118">   118</a>  </span><span>		return fmt.Errorf(errDecodingType, cCalendar, ErrMissingRequired)</span>
<span class="hidden"><a id="L119" href="#L119">   119</a>  </span><span>	}</span>
<span class="hidden"><a id="L120" href="#L120">   120</a>  </span>
<span class="hidden"><a id="L121" href="#L121">   121</a>  </span><span>	return nil</span>
<span class="hidden"><a id="L122" href="#L122">   122</a>  </span><span>}</span>
<span class="hidden"><a id="L123" href="#L123">   123</a>  </span>
<span class="hidden"><a id="L124" href="#L124">   124</a>  </span><span>func (s *Calendar) encode(w writer) {</span>
<span class="hidden"><a id="L125" href="#L125">   125</a>  </span><span>	w.WriteString(&#34;BEGIN:VCALENDAR\r\n&#34;)</span>
<span class="hidden"><a id="L126" href="#L126">   126</a>  </span><span>	s.Version.encode(w)</span>
<span class="hidden"><a id="L127" href="#L127">   127</a>  </span><span>	s.ProductID.encode(w)</span>
<span class="hidden"><a id="L128" href="#L128">   128</a>  </span>
<span class="hidden"><a id="L129" href="#L129">   129</a>  </span><span>	for n := range s.Event {</span>
<span class="hidden"><a id="L130" href="#L130">   130</a>  </span><span>		s.Event[n].encode(w)</span>
<span class="hidden"><a id="L131" href="#L131">   131</a>  </span><span>	}</span>
<span class="hidden"><a id="L132" href="#L132">   132</a>  </span>
<span class="hidden"><a id="L133" href="#L133">   133</a>  </span><span>	for n := range s.Todo {</span>
<span class="hidden"><a id="L134" href="#L134">   134</a>  </span><span>		s.Todo[n].encode(w)</span>
<span class="hidden"><a id="L135" href="#L135">   135</a>  </span><span>	}</span>
<span class="hidden"><a id="L136" href="#L136">   136</a>  </span>
<span class="hidden"><a id="L137" href="#L137">   137</a>  </span><span>	for n := range s.Journal {</span>
<span class="hidden"><a id="L138" href="#L138">   138</a>  </span><span>		s.Journal[n].encode(w)</span>
<span class="hidden"><a id="L139" href="#L139">   139</a>  </span><span>	}</span>
<span class="hidden"><a id="L140" href="#L140">   140</a>  </span>
<span class="hidden"><a id="L141" href="#L141">   141</a>  </span><span>	for n := range s.FreeBusy {</span>
<span class="hidden"><a id="L142" href="#L142">   142</a>  </span><span>		s.FreeBusy[n].encode(w)</span>
<span class="hidden"><a id="L143" href="#L143">   143</a>  </span><span>	}</span>
<span class="hidden"><a id="L144" href="#L144">   144</a>  </span>
<span class="hidden"><a id="L145" href="#L145">   145</a>  </span><span>	for n := range s.Timezone {</span>
<span class="hidden"><a id="L146" href="#L146">   146</a>  </span><span>		s.Timezone[n].encode(w)</span>
<span class="hidden"><a id="L147" href="#L147">   147</a>  </span><span>	}</span>
<span class="hidden"><a id="L148" href="#L148">   148</a>  </span>
<span class="hidden"><a id="L149" href="#L149">   149</a>  </span><span>	w.WriteString(&#34;END:VCALENDAR\r\n&#34;)</span>
<span class="hidden"><a id="L150" href="#L150">   150</a>  </span><span>}</span>
<span class="hidden"><a id="L151" href="#L151">   151</a>  </span>
<span class="hidden"><a id="L152" href="#L152">   152</a>  </span><span>func (s *Calendar) valid() error {</span>
<span class="hidden"><a id="L153" href="#L153">   153</a>  </span><span>	if err := s.Version.valid(); err != nil {</span>
<span class="hidden"><a id="L154" href="#L154">   154</a>  </span><span>		return fmt.Errorf(errValidatingProp, cCalendar, cVersion, err)</span>
<span class="hidden"><a id="L155" href="#L155">   155</a>  </span><span>	}</span>
<span class="hidden"><a id="L156" href="#L156">   156</a>  </span>
<span class="hidden"><a id="L157" href="#L157">   157</a>  </span><span>	if err := s.ProductID.valid(); err != nil {</span>
<span class="hidden"><a id="L158" href="#L158">   158</a>  </span><span>		return fmt.Errorf(errValidatingProp, cCalendar, cProductID, err)</span>
<span class="hidden"><a id="L159" href="#L159">   159</a>  </span><span>	}</span>
<span class="hidden"><a id="L160" href="#L160">   160</a>  </span>
<span class="hidden"><a id="L161" href="#L161">   161</a>  </span><span>	for n := range s.Event {</span>
<span class="hidden"><a id="L162" href="#L162">   162</a>  </span><span>		if err := s.Event[n].valid(); err != nil {</span>
<span class="hidden"><a id="L163" href="#L163">   163</a>  </span><span>			return fmt.Errorf(errValidatingProp, cCalendar, cEvent, err)</span>
<span class="hidden"><a id="L164" href="#L164">   164</a>  </span><span>		}</span>
<span class="hidden"><a id="L165" href="#L165">   165</a>  </span><span>	}</span>
<span class="hidden"><a id="L166" href="#L166">   166</a>  </span>
<span class="hidden"><a id="L167" href="#L167">   167</a>  </span><span>	for n := range s.Todo {</span>
<span class="hidden"><a id="L168" href="#L168">   168</a>  </span><span>		if err := s.Todo[n].valid(); err != nil {</span>
<span class="hidden"><a id="L169" href="#L169">   169</a>  </span><span>			return fmt.Errorf(errValidatingProp, cCalendar, cTodo, err)</span>
<span class="hidden"><a id="L170" href="#L170">   170</a>  </span><span>		}</span>
<span class="hidden"><a id="L171" href="#L171">   171</a>  </span><span>	}</span>
<span class="hidden"><a id="L172" href="#L172">   172</a>  </span>
<span class="hidden"><a id="L173" href="#L173">   173</a>  </span><span>	for n := range s.Journal {</span>
<span class="hidden"><a id="L174" href="#L174">   174</a>  </span><span>		if err := s.Journal[n].valid(); err != nil {</span>
<span class="hidden"><a id="L175" href="#L175">   175</a>  </span><span>			return fmt.Errorf(errValidatingProp, cCalendar, cJournal, err)</span>
<span class="hidden"><a id="L176" href="#L176">   176</a>  </span><span>		}</span>
<span class="hidden"><a id="L177" href="#L177">   177</a>  </span><span>	}</span>
<span class="hidden"><a id="L178" href="#L178">   178</a>  </span>
<span class="hidden"><a id="L179" href="#L179">   179</a>  </span><span>	for n := range s.FreeBusy {</span>
<span class="hidden"><a id="L180" href="#L180">   180</a>  </span><span>		if err := s.FreeBusy[n].valid(); err != nil {</span>
<span class="hidden"><a id="L181" href="#L181">   181</a>  </span><span>			return fmt.Errorf(errValidatingProp, cCalendar, cFreeBusy, err)</span>
<span class="hidden"><a id="L182" href="#L182">   182</a>  </span><span>		}</span>
<span class="hidden"><a id="L183" href="#L183">   183</a>  </span><span>	}</span>
<span class="hidden"><a id="L184" href="#L184">   184</a>  </span>
<span class="hidden"><a id="L185" href="#L185">   185</a>  </span><span>	for n := range s.Timezone {</span>
<span class="hidden"><a id="L186" href="#L186">   186</a>  </span><span>		if err := s.Timezone[n].valid(); err != nil {</span>
<span class="hidden"><a id="L187" href="#L187">   187</a>  </span><span>			return fmt.Errorf(errValidatingProp, cCalendar, cTimezone, err)</span>
<span class="hidden"><a id="L188" href="#L188">   188</a>  </span><span>		}</span>
<span class="hidden"><a id="L189" href="#L189">   189</a>  </span><span>	}</span>
<span class="hidden"><a id="L190" href="#L190">   190</a>  </span>
<span class="hidden"><a id="L191" href="#L191">   191</a>  </span><span>	return nil</span>
<span class="hidden"><a id="L192" href="#L192">   192</a>  </span><span>}</span>
<span class="hidden"><a id="L193" href="#L193">   193</a>  </span>
<span class="hidden"><a id="L194" href="#L194">   194</a>  </span><span class="text">// Event provides a group of components that describe an event.</span>
<span class="hidden"><a id="L195" href="#L195">   195</a>  </span><span>type Event struct {</span>
<span class="hidden"><a id="L196" href="#L196">   196</a>  </span><span>	DateTimeStamp       PropDateTimeStamp</span>
<span class="hidden"><a id="L197" href="#L197">   197</a>  </span><span>	UID                 PropUID</span>
<span class="hidden"><a id="L198" href="#L198">   198</a>  </span><span>	DateTimeStart       *PropDateTimeStart</span>
<span class="hidden"><a id="L199" href="#L199">   199</a>  </span><span>	Class               *PropClass</span>
<span class="hidden"><a id="L200" href="#L200">   200</a>  </span><span>	Created             *PropCreated</span>
<span class="hidden"><a id="L201" href="#L201">   201</a>  </span><span>	Description         *PropDescription</span>
<span class="hidden"><a id="L202" href="#L202">   202</a>  </span><span>	Geo                 *PropGeo</span>
<span class="hidden"><a id="L203" href="#L203">   203</a>  </span><span>	LastModified        *PropLastModified</span>
<span class="hidden"><a id="L204" href="#L204">   204</a>  </span><span>	Location            *PropLocation</span>
<span class="hidden"><a id="L205" href="#L205">   205</a>  </span><span>	Organizer           *PropOrganizer</span>
<span class="hidden"><a id="L206" href="#L206">   206</a>  </span><span>	Priority            *PropPriority</span>
<span class="hidden"><a id="L207" href="#L207">   207</a>  </span><span>	Sequence            *PropSequence</span>
<span class="hidden"><a id="L208" href="#L208">   208</a>  </span><span>	Status              *PropStatus</span>
<span class="hidden"><a id="L209" href="#L209">   209</a>  </span><span>	Summary             *PropSummary</span>
<span class="hidden"><a id="L210" href="#L210">   210</a>  </span><span>	TimeTransparency    *PropTimeTransparency</span>
<span class="hidden"><a id="L211" href="#L211">   211</a>  </span><span>	URL                 *PropURL</span>
<span class="hidden"><a id="L212" href="#L212">   212</a>  </span><span>	RecurrenceID        *PropRecurrenceID</span>
<span class="hidden"><a id="L213" href="#L213">   213</a>  </span><span>	RecurrenceRule      *PropRecurrenceRule</span>
<span class="hidden"><a id="L214" href="#L214">   214</a>  </span><span>	DateTimeEnd         *PropDateTimeEnd</span>
<span class="hidden"><a id="L215" href="#L215">   215</a>  </span><span>	Duration            *PropDuration</span>
<span class="hidden"><a id="L216" href="#L216">   216</a>  </span><span>	Attachment          []PropAttachment</span>
<span class="hidden"><a id="L217" href="#L217">   217</a>  </span><span>	Attendee            []PropAttendee</span>
<span class="hidden"><a id="L218" href="#L218">   218</a>  </span><span>	Categories          []PropCategories</span>
<span class="hidden"><a id="L219" href="#L219">   219</a>  </span><span>	Comment             []PropComment</span>
<span class="hidden"><a id="L220" href="#L220">   220</a>  </span><span>	Contact             []PropContact</span>
<span class="hidden"><a id="L221" href="#L221">   221</a>  </span><span>	ExceptionDateTime   []PropExceptionDateTime</span>
<span class="hidden"><a id="L222" href="#L222">   222</a>  </span><span>	RequestStatus       []PropRequestStatus</span>
<span class="hidden"><a id="L223" href="#L223">   223</a>  </span><span>	RelatedTo           []PropRelatedTo</span>
<span class="hidden"><a id="L224" href="#L224">   224</a>  </span><span>	Resources           []PropResources</span>
<span class="hidden"><a id="L225" href="#L225">   225</a>  </span><span>	RecurrenceDateTimes []PropRecurrenceDateTimes</span>
<span class="hidden"><a id="L226" href="#L226">   226</a>  </span><span>	Alarm               []Alarm</span>
<span class="hidden"><a id="L227" href="#L227">   227</a>  </span><span>}</span>
<span class="hidden"><a id="L228" href="#L228">   228</a>  </span>
<span class="hidden"><a id="L229" href="#L229">   229</a>  </span><span>func (s *Event) decode(t tokeniser) error {</span>
<span class="hidden"><a id="L230" href="#L230">   230</a>  </span><span>	var requiredDateTimeStamp, requiredUID bool</span>
<span class="hidden"><a id="L231" href="#L231">   231</a>  </span>
<span class="hidden"><a id="L232" href="#L232">   232</a>  </span><span>Loop:</span>
<span class="hidden"><a id="L233" href="#L233">   233</a>  </span><span>	for {</span>
<span class="hidden"><a id="L234" href="#L234">   234</a>  </span><span>		p, err := t.GetPhrase()</span>
<span class="hidden"><a id="L235" href="#L235">   235</a>  </span><span>		if err != nil {</span>
<span class="hidden"><a id="L236" href="#L236">   236</a>  </span><span>			return fmt.Errorf(errDecodingType, cEvent, err)</span>
<span class="hidden"><a id="L237" href="#L237">   237</a>  </span><span>		} else if p.Type == parser.PhraseDone {</span>
<span class="hidden"><a id="L238" href="#L238">   238</a>  </span><span>			return fmt.Errorf(errDecodingType, cEvent, io.ErrUnexpectedEOF)</span>
<span class="hidden"><a id="L239" href="#L239">   239</a>  </span><span>		}</span>
<span class="hidden"><a id="L240" href="#L240">   240</a>  </span>
<span class="hidden"><a id="L241" href="#L241">   241</a>  </span><span>		params := p.Data[1 : len(p.Data)-1]</span>
<span class="hidden"><a id="L242" href="#L242">   242</a>  </span><span>		value := p.Data[len(p.Data)-1].Data</span>
<span class="hidden"><a id="L243" href="#L243">   243</a>  </span>
<span class="hidden"><a id="L244" href="#L244">   244</a>  </span><span>		switch strings.ToUpper(p.Data[0].Data) {</span>
<span class="hidden"><a id="L245" href="#L245">   245</a>  </span><span>		case &#34;BEGIN&#34;:</span>
<span class="hidden"><a id="L246" href="#L246">   246</a>  </span><span>			switch n := strings.ToUpper(value); n {</span>
<span class="hidden"><a id="L247" href="#L247">   247</a>  </span><span>			case &#34;VALARM&#34;:</span>
<span class="hidden"><a id="L248" href="#L248">   248</a>  </span><span>				var e Alarm</span>
<span class="hidden"><a id="L249" href="#L249">   249</a>  </span>
<span class="hidden"><a id="L250" href="#L250">   250</a>  </span><span>				if err := e.decode(t); err != nil {</span>
<span class="hidden"><a id="L251" href="#L251">   251</a>  </span><span>					return fmt.Errorf(errDecodingProp, cEvent, cAlarm, err)</span>
<span class="hidden"><a id="L252" href="#L252">   252</a>  </span><span>				}</span>
<span class="hidden"><a id="L253" href="#L253">   253</a>  </span>
<span class="hidden"><a id="L254" href="#L254">   254</a>  </span><span>				s.Alarm = append(s.Alarm, e)</span>
<span class="hidden"><a id="L255" href="#L255">   255</a>  </span><span>			default:</span>
<span class="hidden"><a id="L256" href="#L256">   256</a>  </span><span>				if err := decodeDummy(t, n); err != nil {</span>
<span class="hidden"><a id="L257" href="#L257">   257</a>  </span><span>					return fmt.Errorf(errDecodingType, cEvent, err)</span>
<span class="hidden"><a id="L258" href="#L258">   258</a>  </span><span>				}</span>
<span class="hidden"><a id="L259" href="#L259">   259</a>  </span><span>			}</span>
<span class="hidden"><a id="L260" href="#L260">   260</a>  </span><span>		case &#34;DTSTAMP&#34;:</span>
<span class="hidden"><a id="L261" href="#L261">   261</a>  </span><span>			if requiredDateTimeStamp {</span>
<span class="hidden"><a id="L262" href="#L262">   262</a>  </span><span>				return fmt.Errorf(errMultiple, cEvent, cDateTimeStamp)</span>
<span class="hidden"><a id="L263" href="#L263">   263</a>  </span><span>			}</span>
<span class="hidden"><a id="L264" href="#L264">   264</a>  </span>
<span class="hidden"><a id="L265" href="#L265">   265</a>  </span><span>			requiredDateTimeStamp = true</span>
<span class="hidden"><a id="L266" href="#L266">   266</a>  </span>
<span class="hidden"><a id="L267" href="#L267">   267</a>  </span><span>			if err := s.DateTimeStamp.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L268" href="#L268">   268</a>  </span><span>				return fmt.Errorf(errDecodingProp, cEvent, cDateTimeStamp, err)</span>
<span class="hidden"><a id="L269" href="#L269">   269</a>  </span><span>			}</span>
<span class="hidden"><a id="L270" href="#L270">   270</a>  </span><span>		case &#34;UID&#34;:</span>
<span class="hidden"><a id="L271" href="#L271">   271</a>  </span><span>			if requiredUID {</span>
<span class="hidden"><a id="L272" href="#L272">   272</a>  </span><span>				return fmt.Errorf(errMultiple, cEvent, cUID)</span>
<span class="hidden"><a id="L273" href="#L273">   273</a>  </span><span>			}</span>
<span class="hidden"><a id="L274" href="#L274">   274</a>  </span>
<span class="hidden"><a id="L275" href="#L275">   275</a>  </span><span>			requiredUID = true</span>
<span class="hidden"><a id="L276" href="#L276">   276</a>  </span>
<span class="hidden"><a id="L277" href="#L277">   277</a>  </span><span>			if err := s.UID.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L278" href="#L278">   278</a>  </span><span>				return fmt.Errorf(errDecodingProp, cEvent, cUID, err)</span>
<span class="hidden"><a id="L279" href="#L279">   279</a>  </span><span>			}</span>
<span class="hidden"><a id="L280" href="#L280">   280</a>  </span><span>		case &#34;DTSTART&#34;:</span>
<span class="hidden"><a id="L281" href="#L281">   281</a>  </span><span>			if s.DateTimeStart != nil {</span>
<span class="hidden"><a id="L282" href="#L282">   282</a>  </span><span>				return fmt.Errorf(errMultiple, cEvent, cDateTimeStart)</span>
<span class="hidden"><a id="L283" href="#L283">   283</a>  </span><span>			}</span>
<span class="hidden"><a id="L284" href="#L284">   284</a>  </span>
<span class="hidden"><a id="L285" href="#L285">   285</a>  </span><span>			s.DateTimeStart = new(PropDateTimeStart)</span>
<span class="hidden"><a id="L286" href="#L286">   286</a>  </span>
<span class="hidden"><a id="L287" href="#L287">   287</a>  </span><span>			if err := s.DateTimeStart.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L288" href="#L288">   288</a>  </span><span>				return fmt.Errorf(errDecodingProp, cEvent, cDateTimeStart, err)</span>
<span class="hidden"><a id="L289" href="#L289">   289</a>  </span><span>			}</span>
<span class="hidden"><a id="L290" href="#L290">   290</a>  </span><span>		case &#34;CLASS&#34;:</span>
<span class="hidden"><a id="L291" href="#L291">   291</a>  </span><span>			if s.Class != nil {</span>
<span class="hidden"><a id="L292" href="#L292">   292</a>  </span><span>				return fmt.Errorf(errMultiple, cEvent, cClass)</span>
<span class="hidden"><a id="L293" href="#L293">   293</a>  </span><span>			}</span>
<span class="hidden"><a id="L294" href="#L294">   294</a>  </span>
<span class="hidden"><a id="L295" href="#L295">   295</a>  </span><span>			s.Class = new(PropClass)</span>
<span class="hidden"><a id="L296" href="#L296">   296</a>  </span>
<span class="hidden"><a id="L297" href="#L297">   297</a>  </span><span>			if err := s.Class.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L298" href="#L298">   298</a>  </span><span>				return fmt.Errorf(errDecodingProp, cEvent, cClass, err)</span>
<span class="hidden"><a id="L299" href="#L299">   299</a>  </span><span>			}</span>
<span class="hidden"><a id="L300" href="#L300">   300</a>  </span><span>		case &#34;CREATED&#34;:</span>
<span class="hidden"><a id="L301" href="#L301">   301</a>  </span><span>			if s.Created != nil {</span>
<span class="hidden"><a id="L302" href="#L302">   302</a>  </span><span>				return fmt.Errorf(errMultiple, cEvent, cCreated)</span>
<span class="hidden"><a id="L303" href="#L303">   303</a>  </span><span>			}</span>
<span class="hidden"><a id="L304" href="#L304">   304</a>  </span>
<span class="hidden"><a id="L305" href="#L305">   305</a>  </span><span>			s.Created = new(PropCreated)</span>
<span class="hidden"><a id="L306" href="#L306">   306</a>  </span>
<span class="hidden"><a id="L307" href="#L307">   307</a>  </span><span>			if err := s.Created.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L308" href="#L308">   308</a>  </span><span>				return fmt.Errorf(errDecodingProp, cEvent, cCreated, err)</span>
<span class="hidden"><a id="L309" href="#L309">   309</a>  </span><span>			}</span>
<span class="hidden"><a id="L310" href="#L310">   310</a>  </span><span>		case &#34;DESCRIPTION&#34;:</span>
<span class="hidden"><a id="L311" href="#L311">   311</a>  </span><span>			if s.Description != nil {</span>
<span class="hidden"><a id="L312" href="#L312">   312</a>  </span><span>				return fmt.Errorf(errMultiple, cEvent, cDescription)</span>
<span class="hidden"><a id="L313" href="#L313">   313</a>  </span><span>			}</span>
<span class="hidden"><a id="L314" href="#L314">   314</a>  </span>
<span class="hidden"><a id="L315" href="#L315">   315</a>  </span><span>			s.Description = new(PropDescription)</span>
<span class="hidden"><a id="L316" href="#L316">   316</a>  </span>
<span class="hidden"><a id="L317" href="#L317">   317</a>  </span><span>			if err := s.Description.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L318" href="#L318">   318</a>  </span><span>				return fmt.Errorf(errDecodingProp, cEvent, cDescription, err)</span>
<span class="hidden"><a id="L319" href="#L319">   319</a>  </span><span>			}</span>
<span class="hidden"><a id="L320" href="#L320">   320</a>  </span><span>		case &#34;GEO&#34;:</span>
<span class="hidden"><a id="L321" href="#L321">   321</a>  </span><span>			if s.Geo != nil {</span>
<span class="hidden"><a id="L322" href="#L322">   322</a>  </span><span>				return fmt.Errorf(errMultiple, cEvent, cGeo)</span>
<span class="hidden"><a id="L323" href="#L323">   323</a>  </span><span>			}</span>
<span class="hidden"><a id="L324" href="#L324">   324</a>  </span>
<span class="hidden"><a id="L325" href="#L325">   325</a>  </span><span>			s.Geo = new(PropGeo)</span>
<span class="hidden"><a id="L326" href="#L326">   326</a>  </span>
<span class="hidden"><a id="L327" href="#L327">   327</a>  </span><span>			if err := s.Geo.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L328" href="#L328">   328</a>  </span><span>				return fmt.Errorf(errDecodingProp, cEvent, cGeo, err)</span>
<span class="hidden"><a id="L329" href="#L329">   329</a>  </span><span>			}</span>
<span class="hidden"><a id="L330" href="#L330">   330</a>  </span><span>		case &#34;LAST-MOD&#34;:</span>
<span class="hidden"><a id="L331" href="#L331">   331</a>  </span><span>			if s.LastModified != nil {</span>
<span class="hidden"><a id="L332" href="#L332">   332</a>  </span><span>				return fmt.Errorf(errMultiple, cEvent, cLastModified)</span>
<span class="hidden"><a id="L333" href="#L333">   333</a>  </span><span>			}</span>
<span class="hidden"><a id="L334" href="#L334">   334</a>  </span>
<span class="hidden"><a id="L335" href="#L335">   335</a>  </span><span>			s.LastModified = new(PropLastModified)</span>
<span class="hidden"><a id="L336" href="#L336">   336</a>  </span>
<span class="hidden"><a id="L337" href="#L337">   337</a>  </span><span>			if err := s.LastModified.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L338" href="#L338">   338</a>  </span><span>				return fmt.Errorf(errDecodingProp, cEvent, cLastModified, err)</span>
<span class="hidden"><a id="L339" href="#L339">   339</a>  </span><span>			}</span>
<span class="hidden"><a id="L340" href="#L340">   340</a>  </span><span>		case &#34;LOCATION&#34;:</span>
<span class="hidden"><a id="L341" href="#L341">   341</a>  </span><span>			if s.Location != nil {</span>
<span class="hidden"><a id="L342" href="#L342">   342</a>  </span><span>				return fmt.Errorf(errMultiple, cEvent, cLocation)</span>
<span class="hidden"><a id="L343" href="#L343">   343</a>  </span><span>			}</span>
<span class="hidden"><a id="L344" href="#L344">   344</a>  </span>
<span class="hidden"><a id="L345" href="#L345">   345</a>  </span><span>			s.Location = new(PropLocation)</span>
<span class="hidden"><a id="L346" href="#L346">   346</a>  </span>
<span class="hidden"><a id="L347" href="#L347">   347</a>  </span><span>			if err := s.Location.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L348" href="#L348">   348</a>  </span><span>				return fmt.Errorf(errDecodingProp, cEvent, cLocation, err)</span>
<span class="hidden"><a id="L349" href="#L349">   349</a>  </span><span>			}</span>
<span class="hidden"><a id="L350" href="#L350">   350</a>  </span><span>		case &#34;ORGANIZER&#34;:</span>
<span class="hidden"><a id="L351" href="#L351">   351</a>  </span><span>			if s.Organizer != nil {</span>
<span class="hidden"><a id="L352" href="#L352">   352</a>  </span><span>				return fmt.Errorf(errMultiple, cEvent, cOrganizer)</span>
<span class="hidden"><a id="L353" href="#L353">   353</a>  </span><span>			}</span>
<span class="hidden"><a id="L354" href="#L354">   354</a>  </span>
<span class="hidden"><a id="L355" href="#L355">   355</a>  </span><span>			s.Organizer = new(PropOrganizer)</span>
<span class="hidden"><a id="L356" href="#L356">   356</a>  </span>
<span class="hidden"><a id="L357" href="#L357">   357</a>  </span><span>			if err := s.Organizer.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L358" href="#L358">   358</a>  </span><span>				return fmt.Errorf(errDecodingProp, cEvent, cOrganizer, err)</span>
<span class="hidden"><a id="L359" href="#L359">   359</a>  </span><span>			}</span>
<span class="hidden"><a id="L360" href="#L360">   360</a>  </span><span>		case &#34;PRIORITY&#34;:</span>
<span class="hidden"><a id="L361" href="#L361">   361</a>  </span><span>			if s.Priority != nil {</span>
<span class="hidden"><a id="L362" href="#L362">   362</a>  </span><span>				return fmt.Errorf(errMultiple, cEvent, cPriority)</span>
<span class="hidden"><a id="L363" href="#L363">   363</a>  </span><span>			}</span>
<span class="hidden"><a id="L364" href="#L364">   364</a>  </span>
<span class="hidden"><a id="L365" href="#L365">   365</a>  </span><span>			s.Priority = new(PropPriority)</span>
<span class="hidden"><a id="L366" href="#L366">   366</a>  </span>
<span class="hidden"><a id="L367" href="#L367">   367</a>  </span><span>			if err := s.Priority.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L368" href="#L368">   368</a>  </span><span>				return fmt.Errorf(errDecodingProp, cEvent, cPriority, err)</span>
<span class="hidden"><a id="L369" href="#L369">   369</a>  </span><span>			}</span>
<span class="hidden"><a id="L370" href="#L370">   370</a>  </span><span>		case &#34;SEQUENCE&#34;:</span>
<span class="hidden"><a id="L371" href="#L371">   371</a>  </span><span>			if s.Sequence != nil {</span>
<span class="hidden"><a id="L372" href="#L372">   372</a>  </span><span>				return fmt.Errorf(errMultiple, cEvent, cSequence)</span>
<span class="hidden"><a id="L373" href="#L373">   373</a>  </span><span>			}</span>
<span class="hidden"><a id="L374" href="#L374">   374</a>  </span>
<span class="hidden"><a id="L375" href="#L375">   375</a>  </span><span>			s.Sequence = new(PropSequence)</span>
<span class="hidden"><a id="L376" href="#L376">   376</a>  </span>
<span class="hidden"><a id="L377" href="#L377">   377</a>  </span><span>			if err := s.Sequence.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L378" href="#L378">   378</a>  </span><span>				return fmt.Errorf(errDecodingProp, cEvent, cSequence, err)</span>
<span class="hidden"><a id="L379" href="#L379">   379</a>  </span><span>			}</span>
<span class="hidden"><a id="L380" href="#L380">   380</a>  </span><span>		case &#34;STATUS&#34;:</span>
<span class="hidden"><a id="L381" href="#L381">   381</a>  </span><span>			if s.Status != nil {</span>
<span class="hidden"><a id="L382" href="#L382">   382</a>  </span><span>				return fmt.Errorf(errMultiple, cEvent, cStatus)</span>
<span class="hidden"><a id="L383" href="#L383">   383</a>  </span><span>			}</span>
<span class="hidden"><a id="L384" href="#L384">   384</a>  </span>
<span class="hidden"><a id="L385" href="#L385">   385</a>  </span><span>			s.Status = new(PropStatus)</span>
<span class="hidden"><a id="L386" href="#L386">   386</a>  </span>
<span class="hidden"><a id="L387" href="#L387">   387</a>  </span><span>			if err := s.Status.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L388" href="#L388">   388</a>  </span><span>				return fmt.Errorf(errDecodingProp, cEvent, cStatus, err)</span>
<span class="hidden"><a id="L389" href="#L389">   389</a>  </span><span>			}</span>
<span class="hidden"><a id="L390" href="#L390">   390</a>  </span><span>		case &#34;SUMMARY&#34;:</span>
<span class="hidden"><a id="L391" href="#L391">   391</a>  </span><span>			if s.Summary != nil {</span>
<span class="hidden"><a id="L392" href="#L392">   392</a>  </span><span>				return fmt.Errorf(errMultiple, cEvent, cSummary)</span>
<span class="hidden"><a id="L393" href="#L393">   393</a>  </span><span>			}</span>
<span class="hidden"><a id="L394" href="#L394">   394</a>  </span>
<span class="hidden"><a id="L395" href="#L395">   395</a>  </span><span>			s.Summary = new(PropSummary)</span>
<span class="hidden"><a id="L396" href="#L396">   396</a>  </span>
<span class="hidden"><a id="L397" href="#L397">   397</a>  </span><span>			if err := s.Summary.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L398" href="#L398">   398</a>  </span><span>				return fmt.Errorf(errDecodingProp, cEvent, cSummary, err)</span>
<span class="hidden"><a id="L399" href="#L399">   399</a>  </span><span>			}</span>
<span class="hidden"><a id="L400" href="#L400">   400</a>  </span><span>		case &#34;TRANSP&#34;:</span>
<span class="hidden"><a id="L401" href="#L401">   401</a>  </span><span>			if s.TimeTransparency != nil {</span>
<span class="hidden"><a id="L402" href="#L402">   402</a>  </span><span>				return fmt.Errorf(errMultiple, cEvent, cTimeTransparency)</span>
<span class="hidden"><a id="L403" href="#L403">   403</a>  </span><span>			}</span>
<span class="hidden"><a id="L404" href="#L404">   404</a>  </span>
<span class="hidden"><a id="L405" href="#L405">   405</a>  </span><span>			s.TimeTransparency = new(PropTimeTransparency)</span>
<span class="hidden"><a id="L406" href="#L406">   406</a>  </span>
<span class="hidden"><a id="L407" href="#L407">   407</a>  </span><span>			if err := s.TimeTransparency.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L408" href="#L408">   408</a>  </span><span>				return fmt.Errorf(errDecodingProp, cEvent, cTimeTransparency, err)</span>
<span class="hidden"><a id="L409" href="#L409">   409</a>  </span><span>			}</span>
<span class="hidden"><a id="L410" href="#L410">   410</a>  </span><span>		case &#34;URL&#34;:</span>
<span class="hidden"><a id="L411" href="#L411">   411</a>  </span><span>			if s.URL != nil {</span>
<span class="hidden"><a id="L412" href="#L412">   412</a>  </span><span>				return fmt.Errorf(errMultiple, cEvent, cURL)</span>
<span class="hidden"><a id="L413" href="#L413">   413</a>  </span><span>			}</span>
<span class="hidden"><a id="L414" href="#L414">   414</a>  </span>
<span class="hidden"><a id="L415" href="#L415">   415</a>  </span><span>			s.URL = new(PropURL)</span>
<span class="hidden"><a id="L416" href="#L416">   416</a>  </span>
<span class="hidden"><a id="L417" href="#L417">   417</a>  </span><span>			if err := s.URL.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L418" href="#L418">   418</a>  </span><span>				return fmt.Errorf(errDecodingProp, cEvent, cURL, err)</span>
<span class="hidden"><a id="L419" href="#L419">   419</a>  </span><span>			}</span>
<span class="hidden"><a id="L420" href="#L420">   420</a>  </span><span>		case &#34;RECURRENCE-ID&#34;:</span>
<span class="hidden"><a id="L421" href="#L421">   421</a>  </span><span>			if s.RecurrenceID != nil {</span>
<span class="hidden"><a id="L422" href="#L422">   422</a>  </span><span>				return fmt.Errorf(errMultiple, cEvent, cRecurrenceID)</span>
<span class="hidden"><a id="L423" href="#L423">   423</a>  </span><span>			}</span>
<span class="hidden"><a id="L424" href="#L424">   424</a>  </span>
<span class="hidden"><a id="L425" href="#L425">   425</a>  </span><span>			s.RecurrenceID = new(PropRecurrenceID)</span>
<span class="hidden"><a id="L426" href="#L426">   426</a>  </span>
<span class="hidden"><a id="L427" href="#L427">   427</a>  </span><span>			if err := s.RecurrenceID.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L428" href="#L428">   428</a>  </span><span>				return fmt.Errorf(errDecodingProp, cEvent, cRecurrenceID, err)</span>
<span class="hidden"><a id="L429" href="#L429">   429</a>  </span><span>			}</span>
<span class="hidden"><a id="L430" href="#L430">   430</a>  </span><span>		case &#34;RRULE&#34;:</span>
<span class="hidden"><a id="L431" href="#L431">   431</a>  </span><span>			if s.RecurrenceRule != nil {</span>
<span class="hidden"><a id="L432" href="#L432">   432</a>  </span><span>				return fmt.Errorf(errMultiple, cEvent, cRecurrenceRule)</span>
<span class="hidden"><a id="L433" href="#L433">   433</a>  </span><span>			}</span>
<span class="hidden"><a id="L434" href="#L434">   434</a>  </span>
<span class="hidden"><a id="L435" href="#L435">   435</a>  </span><span>			s.RecurrenceRule = new(PropRecurrenceRule)</span>
<span class="hidden"><a id="L436" href="#L436">   436</a>  </span>
<span class="hidden"><a id="L437" href="#L437">   437</a>  </span><span>			if err := s.RecurrenceRule.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L438" href="#L438">   438</a>  </span><span>				return fmt.Errorf(errDecodingProp, cEvent, cRecurrenceRule, err)</span>
<span class="hidden"><a id="L439" href="#L439">   439</a>  </span><span>			}</span>
<span class="hidden"><a id="L440" href="#L440">   440</a>  </span><span>		case &#34;DTEND&#34;:</span>
<span class="hidden"><a id="L441" href="#L441">   441</a>  </span><span>			if s.DateTimeEnd != nil {</span>
<span class="hidden"><a id="L442" href="#L442">   442</a>  </span><span>				return fmt.Errorf(errMultiple, cEvent, cDateTimeEnd)</span>
<span class="hidden"><a id="L443" href="#L443">   443</a>  </span><span>			}</span>
<span class="hidden"><a id="L444" href="#L444">   444</a>  </span>
<span class="hidden"><a id="L445" href="#L445">   445</a>  </span><span>			s.DateTimeEnd = new(PropDateTimeEnd)</span>
<span class="hidden"><a id="L446" href="#L446">   446</a>  </span>
<span class="hidden"><a id="L447" href="#L447">   447</a>  </span><span>			if err := s.DateTimeEnd.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L448" href="#L448">   448</a>  </span><span>				return fmt.Errorf(errDecodingProp, cEvent, cDateTimeEnd, err)</span>
<span class="hidden"><a id="L449" href="#L449">   449</a>  </span><span>			}</span>
<span class="hidden"><a id="L450" href="#L450">   450</a>  </span><span>		case &#34;DURATION&#34;:</span>
<span class="hidden"><a id="L451" href="#L451">   451</a>  </span><span>			if s.Duration != nil {</span>
<span class="hidden"><a id="L452" href="#L452">   452</a>  </span><span>				return fmt.Errorf(errMultiple, cEvent, cDuration)</span>
<span class="hidden"><a id="L453" href="#L453">   453</a>  </span><span>			}</span>
<span class="hidden"><a id="L454" href="#L454">   454</a>  </span>
<span class="hidden"><a id="L455" href="#L455">   455</a>  </span><span>			s.Duration = new(PropDuration)</span>
<span class="hidden"><a id="L456" href="#L456">   456</a>  </span>
<span class="hidden"><a id="L457" href="#L457">   457</a>  </span><span>			if err := s.Duration.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L458" href="#L458">   458</a>  </span><span>				return fmt.Errorf(errDecodingProp, cEvent, cDuration, err)</span>
<span class="hidden"><a id="L459" href="#L459">   459</a>  </span><span>			}</span>
<span class="hidden"><a id="L460" href="#L460">   460</a>  </span><span>		case &#34;ATTACH&#34;:</span>
<span class="hidden"><a id="L461" href="#L461">   461</a>  </span><span>			var e PropAttachment</span>
<span class="hidden"><a id="L462" href="#L462">   462</a>  </span>
<span class="hidden"><a id="L463" href="#L463">   463</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L464" href="#L464">   464</a>  </span><span>				return fmt.Errorf(errDecodingProp, cEvent, cAttachment, err)</span>
<span class="hidden"><a id="L465" href="#L465">   465</a>  </span><span>			}</span>
<span class="hidden"><a id="L466" href="#L466">   466</a>  </span>
<span class="hidden"><a id="L467" href="#L467">   467</a>  </span><span>			s.Attachment = append(s.Attachment, e)</span>
<span class="hidden"><a id="L468" href="#L468">   468</a>  </span><span>		case &#34;ATTENDEE&#34;:</span>
<span class="hidden"><a id="L469" href="#L469">   469</a>  </span><span>			var e PropAttendee</span>
<span class="hidden"><a id="L470" href="#L470">   470</a>  </span>
<span class="hidden"><a id="L471" href="#L471">   471</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L472" href="#L472">   472</a>  </span><span>				return fmt.Errorf(errDecodingProp, cEvent, cAttendee, err)</span>
<span class="hidden"><a id="L473" href="#L473">   473</a>  </span><span>			}</span>
<span class="hidden"><a id="L474" href="#L474">   474</a>  </span>
<span class="hidden"><a id="L475" href="#L475">   475</a>  </span><span>			s.Attendee = append(s.Attendee, e)</span>
<span class="hidden"><a id="L476" href="#L476">   476</a>  </span><span>		case &#34;CATEGORIES&#34;:</span>
<span class="hidden"><a id="L477" href="#L477">   477</a>  </span><span>			var e PropCategories</span>
<span class="hidden"><a id="L478" href="#L478">   478</a>  </span>
<span class="hidden"><a id="L479" href="#L479">   479</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L480" href="#L480">   480</a>  </span><span>				return fmt.Errorf(errDecodingProp, cEvent, cCategories, err)</span>
<span class="hidden"><a id="L481" href="#L481">   481</a>  </span><span>			}</span>
<span class="hidden"><a id="L482" href="#L482">   482</a>  </span>
<span class="hidden"><a id="L483" href="#L483">   483</a>  </span><span>			s.Categories = append(s.Categories, e)</span>
<span class="hidden"><a id="L484" href="#L484">   484</a>  </span><span>		case &#34;COMMENT&#34;:</span>
<span class="hidden"><a id="L485" href="#L485">   485</a>  </span><span>			var e PropComment</span>
<span class="hidden"><a id="L486" href="#L486">   486</a>  </span>
<span class="hidden"><a id="L487" href="#L487">   487</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L488" href="#L488">   488</a>  </span><span>				return fmt.Errorf(errDecodingProp, cEvent, cComment, err)</span>
<span class="hidden"><a id="L489" href="#L489">   489</a>  </span><span>			}</span>
<span class="hidden"><a id="L490" href="#L490">   490</a>  </span>
<span class="hidden"><a id="L491" href="#L491">   491</a>  </span><span>			s.Comment = append(s.Comment, e)</span>
<span class="hidden"><a id="L492" href="#L492">   492</a>  </span><span>		case &#34;CONTACT&#34;:</span>
<span class="hidden"><a id="L493" href="#L493">   493</a>  </span><span>			var e PropContact</span>
<span class="hidden"><a id="L494" href="#L494">   494</a>  </span>
<span class="hidden"><a id="L495" href="#L495">   495</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L496" href="#L496">   496</a>  </span><span>				return fmt.Errorf(errDecodingProp, cEvent, cContact, err)</span>
<span class="hidden"><a id="L497" href="#L497">   497</a>  </span><span>			}</span>
<span class="hidden"><a id="L498" href="#L498">   498</a>  </span>
<span class="hidden"><a id="L499" href="#L499">   499</a>  </span><span>			s.Contact = append(s.Contact, e)</span>
<span class="hidden"><a id="L500" href="#L500">   500</a>  </span><span>		case &#34;EXDATE&#34;:</span>
<span class="hidden"><a id="L501" href="#L501">   501</a>  </span><span>			var e PropExceptionDateTime</span>
<span class="hidden"><a id="L502" href="#L502">   502</a>  </span>
<span class="hidden"><a id="L503" href="#L503">   503</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L504" href="#L504">   504</a>  </span><span>				return fmt.Errorf(errDecodingProp, cEvent, cExceptionDateTime, err)</span>
<span class="hidden"><a id="L505" href="#L505">   505</a>  </span><span>			}</span>
<span class="hidden"><a id="L506" href="#L506">   506</a>  </span>
<span class="hidden"><a id="L507" href="#L507">   507</a>  </span><span>			s.ExceptionDateTime = append(s.ExceptionDateTime, e)</span>
<span class="hidden"><a id="L508" href="#L508">   508</a>  </span><span>		case &#34;REQUEST-STATUS&#34;:</span>
<span class="hidden"><a id="L509" href="#L509">   509</a>  </span><span>			var e PropRequestStatus</span>
<span class="hidden"><a id="L510" href="#L510">   510</a>  </span>
<span class="hidden"><a id="L511" href="#L511">   511</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L512" href="#L512">   512</a>  </span><span>				return fmt.Errorf(errDecodingProp, cEvent, cRequestStatus, err)</span>
<span class="hidden"><a id="L513" href="#L513">   513</a>  </span><span>			}</span>
<span class="hidden"><a id="L514" href="#L514">   514</a>  </span>
<span class="hidden"><a id="L515" href="#L515">   515</a>  </span><span>			s.RequestStatus = append(s.RequestStatus, e)</span>
<span class="hidden"><a id="L516" href="#L516">   516</a>  </span><span>		case &#34;RELATED-TO&#34;:</span>
<span class="hidden"><a id="L517" href="#L517">   517</a>  </span><span>			var e PropRelatedTo</span>
<span class="hidden"><a id="L518" href="#L518">   518</a>  </span>
<span class="hidden"><a id="L519" href="#L519">   519</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L520" href="#L520">   520</a>  </span><span>				return fmt.Errorf(errDecodingProp, cEvent, cRelatedTo, err)</span>
<span class="hidden"><a id="L521" href="#L521">   521</a>  </span><span>			}</span>
<span class="hidden"><a id="L522" href="#L522">   522</a>  </span>
<span class="hidden"><a id="L523" href="#L523">   523</a>  </span><span>			s.RelatedTo = append(s.RelatedTo, e)</span>
<span class="hidden"><a id="L524" href="#L524">   524</a>  </span><span>		case &#34;RESOURCES&#34;:</span>
<span class="hidden"><a id="L525" href="#L525">   525</a>  </span><span>			var e PropResources</span>
<span class="hidden"><a id="L526" href="#L526">   526</a>  </span>
<span class="hidden"><a id="L527" href="#L527">   527</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L528" href="#L528">   528</a>  </span><span>				return fmt.Errorf(errDecodingProp, cEvent, cResources, err)</span>
<span class="hidden"><a id="L529" href="#L529">   529</a>  </span><span>			}</span>
<span class="hidden"><a id="L530" href="#L530">   530</a>  </span>
<span class="hidden"><a id="L531" href="#L531">   531</a>  </span><span>			s.Resources = append(s.Resources, e)</span>
<span class="hidden"><a id="L532" href="#L532">   532</a>  </span><span>		case &#34;RDATE&#34;:</span>
<span class="hidden"><a id="L533" href="#L533">   533</a>  </span><span>			var e PropRecurrenceDateTimes</span>
<span class="hidden"><a id="L534" href="#L534">   534</a>  </span>
<span class="hidden"><a id="L535" href="#L535">   535</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L536" href="#L536">   536</a>  </span><span>				return fmt.Errorf(errDecodingProp, cEvent, cRecurrenceDateTimes, err)</span>
<span class="hidden"><a id="L537" href="#L537">   537</a>  </span><span>			}</span>
<span class="hidden"><a id="L538" href="#L538">   538</a>  </span>
<span class="hidden"><a id="L539" href="#L539">   539</a>  </span><span>			s.RecurrenceDateTimes = append(s.RecurrenceDateTimes, e)</span>
<span class="hidden"><a id="L540" href="#L540">   540</a>  </span><span>		case &#34;END&#34;:</span>
<span class="hidden"><a id="L541" href="#L541">   541</a>  </span><span>			if value != &#34;VEVENT&#34; {</span>
<span class="hidden"><a id="L542" href="#L542">   542</a>  </span><span>				return fmt.Errorf(errDecodingType, cEvent, ErrInvalidEnd)</span>
<span class="hidden"><a id="L543" href="#L543">   543</a>  </span><span>			}</span>
<span class="hidden"><a id="L544" href="#L544">   544</a>  </span>
<span class="hidden"><a id="L545" href="#L545">   545</a>  </span><span>			break Loop</span>
<span class="hidden"><a id="L546" href="#L546">   546</a>  </span><span>		}</span>
<span class="hidden"><a id="L547" href="#L547">   547</a>  </span><span>	}</span>
<span class="hidden"><a id="L548" href="#L548">   548</a>  </span>
<span class="hidden"><a id="L549" href="#L549">   549</a>  </span><span>	if !requiredDateTimeStamp || !requiredUID {</span>
<span class="hidden"><a id="L550" href="#L550">   550</a>  </span><span>		return fmt.Errorf(errDecodingType, cEvent, ErrMissingRequired)</span>
<span class="hidden"><a id="L551" href="#L551">   551</a>  </span><span>	}</span>
<span class="hidden"><a id="L552" href="#L552">   552</a>  </span>
<span class="hidden"><a id="L553" href="#L553">   553</a>  </span><span>	if s.DateTimeEnd != nil &amp;&amp; s.Duration != nil {</span>
<span class="hidden"><a id="L554" href="#L554">   554</a>  </span><span>		return fmt.Errorf(errDecodingType, cEvent, ErrRequirementNotMet)</span>
<span class="hidden"><a id="L555" href="#L555">   555</a>  </span><span>	}</span>
<span class="hidden"><a id="L556" href="#L556">   556</a>  </span>
<span class="hidden"><a id="L557" href="#L557">   557</a>  </span><span>	return nil</span>
<span class="hidden"><a id="L558" href="#L558">   558</a>  </span><span>}</span>
<span class="hidden"><a id="L559" href="#L559">   559</a>  </span>
<span class="hidden"><a id="L560" href="#L560">   560</a>  </span><span>func (s *Event) encode(w writer) {</span>
<span class="hidden"><a id="L561" href="#L561">   561</a>  </span><span>	w.WriteString(&#34;BEGIN:VEVENT\r\n&#34;)</span>
<span class="hidden"><a id="L562" href="#L562">   562</a>  </span><span>	s.DateTimeStamp.encode(w)</span>
<span class="hidden"><a id="L563" href="#L563">   563</a>  </span><span>	s.UID.encode(w)</span>
<span class="hidden"><a id="L564" href="#L564">   564</a>  </span>
<span class="hidden"><a id="L565" href="#L565">   565</a>  </span><span>	if s.DateTimeStart != nil {</span>
<span class="hidden"><a id="L566" href="#L566">   566</a>  </span><span>		s.DateTimeStart.encode(w)</span>
<span class="hidden"><a id="L567" href="#L567">   567</a>  </span><span>	}</span>
<span class="hidden"><a id="L568" href="#L568">   568</a>  </span>
<span class="hidden"><a id="L569" href="#L569">   569</a>  </span><span>	if s.Class != nil {</span>
<span class="hidden"><a id="L570" href="#L570">   570</a>  </span><span>		s.Class.encode(w)</span>
<span class="hidden"><a id="L571" href="#L571">   571</a>  </span><span>	}</span>
<span class="hidden"><a id="L572" href="#L572">   572</a>  </span>
<span class="hidden"><a id="L573" href="#L573">   573</a>  </span><span>	if s.Created != nil {</span>
<span class="hidden"><a id="L574" href="#L574">   574</a>  </span><span>		s.Created.encode(w)</span>
<span class="hidden"><a id="L575" href="#L575">   575</a>  </span><span>	}</span>
<span class="hidden"><a id="L576" href="#L576">   576</a>  </span>
<span class="hidden"><a id="L577" href="#L577">   577</a>  </span><span>	if s.Description != nil {</span>
<span class="hidden"><a id="L578" href="#L578">   578</a>  </span><span>		s.Description.encode(w)</span>
<span class="hidden"><a id="L579" href="#L579">   579</a>  </span><span>	}</span>
<span class="hidden"><a id="L580" href="#L580">   580</a>  </span>
<span class="hidden"><a id="L581" href="#L581">   581</a>  </span><span>	if s.Geo != nil {</span>
<span class="hidden"><a id="L582" href="#L582">   582</a>  </span><span>		s.Geo.encode(w)</span>
<span class="hidden"><a id="L583" href="#L583">   583</a>  </span><span>	}</span>
<span class="hidden"><a id="L584" href="#L584">   584</a>  </span>
<span class="hidden"><a id="L585" href="#L585">   585</a>  </span><span>	if s.LastModified != nil {</span>
<span class="hidden"><a id="L586" href="#L586">   586</a>  </span><span>		s.LastModified.encode(w)</span>
<span class="hidden"><a id="L587" href="#L587">   587</a>  </span><span>	}</span>
<span class="hidden"><a id="L588" href="#L588">   588</a>  </span>
<span class="hidden"><a id="L589" href="#L589">   589</a>  </span><span>	if s.Location != nil {</span>
<span class="hidden"><a id="L590" href="#L590">   590</a>  </span><span>		s.Location.encode(w)</span>
<span class="hidden"><a id="L591" href="#L591">   591</a>  </span><span>	}</span>
<span class="hidden"><a id="L592" href="#L592">   592</a>  </span>
<span class="hidden"><a id="L593" href="#L593">   593</a>  </span><span>	if s.Organizer != nil {</span>
<span class="hidden"><a id="L594" href="#L594">   594</a>  </span><span>		s.Organizer.encode(w)</span>
<span class="hidden"><a id="L595" href="#L595">   595</a>  </span><span>	}</span>
<span class="hidden"><a id="L596" href="#L596">   596</a>  </span>
<span class="hidden"><a id="L597" href="#L597">   597</a>  </span><span>	if s.Priority != nil {</span>
<span class="hidden"><a id="L598" href="#L598">   598</a>  </span><span>		s.Priority.encode(w)</span>
<span class="hidden"><a id="L599" href="#L599">   599</a>  </span><span>	}</span>
<span class="hidden"><a id="L600" href="#L600">   600</a>  </span>
<span class="hidden"><a id="L601" href="#L601">   601</a>  </span><span>	if s.Sequence != nil {</span>
<span class="hidden"><a id="L602" href="#L602">   602</a>  </span><span>		s.Sequence.encode(w)</span>
<span class="hidden"><a id="L603" href="#L603">   603</a>  </span><span>	}</span>
<span class="hidden"><a id="L604" href="#L604">   604</a>  </span>
<span class="hidden"><a id="L605" href="#L605">   605</a>  </span><span>	if s.Status != nil {</span>
<span class="hidden"><a id="L606" href="#L606">   606</a>  </span><span>		s.Status.encode(w)</span>
<span class="hidden"><a id="L607" href="#L607">   607</a>  </span><span>	}</span>
<span class="hidden"><a id="L608" href="#L608">   608</a>  </span>
<span class="hidden"><a id="L609" href="#L609">   609</a>  </span><span>	if s.Summary != nil {</span>
<span class="hidden"><a id="L610" href="#L610">   610</a>  </span><span>		s.Summary.encode(w)</span>
<span class="hidden"><a id="L611" href="#L611">   611</a>  </span><span>	}</span>
<span class="hidden"><a id="L612" href="#L612">   612</a>  </span>
<span class="hidden"><a id="L613" href="#L613">   613</a>  </span><span>	if s.TimeTransparency != nil {</span>
<span class="hidden"><a id="L614" href="#L614">   614</a>  </span><span>		s.TimeTransparency.encode(w)</span>
<span class="hidden"><a id="L615" href="#L615">   615</a>  </span><span>	}</span>
<span class="hidden"><a id="L616" href="#L616">   616</a>  </span>
<span class="hidden"><a id="L617" href="#L617">   617</a>  </span><span>	if s.URL != nil {</span>
<span class="hidden"><a id="L618" href="#L618">   618</a>  </span><span>		s.URL.encode(w)</span>
<span class="hidden"><a id="L619" href="#L619">   619</a>  </span><span>	}</span>
<span class="hidden"><a id="L620" href="#L620">   620</a>  </span>
<span class="hidden"><a id="L621" href="#L621">   621</a>  </span><span>	if s.RecurrenceID != nil {</span>
<span class="hidden"><a id="L622" href="#L622">   622</a>  </span><span>		s.RecurrenceID.encode(w)</span>
<span class="hidden"><a id="L623" href="#L623">   623</a>  </span><span>	}</span>
<span class="hidden"><a id="L624" href="#L624">   624</a>  </span>
<span class="hidden"><a id="L625" href="#L625">   625</a>  </span><span>	if s.RecurrenceRule != nil {</span>
<span class="hidden"><a id="L626" href="#L626">   626</a>  </span><span>		s.RecurrenceRule.encode(w)</span>
<span class="hidden"><a id="L627" href="#L627">   627</a>  </span><span>	}</span>
<span class="hidden"><a id="L628" href="#L628">   628</a>  </span>
<span class="hidden"><a id="L629" href="#L629">   629</a>  </span><span>	if s.DateTimeEnd != nil {</span>
<span class="hidden"><a id="L630" href="#L630">   630</a>  </span><span>		s.DateTimeEnd.encode(w)</span>
<span class="hidden"><a id="L631" href="#L631">   631</a>  </span><span>	}</span>
<span class="hidden"><a id="L632" href="#L632">   632</a>  </span>
<span class="hidden"><a id="L633" href="#L633">   633</a>  </span><span>	if s.Duration != nil {</span>
<span class="hidden"><a id="L634" href="#L634">   634</a>  </span><span>		s.Duration.encode(w)</span>
<span class="hidden"><a id="L635" href="#L635">   635</a>  </span><span>	}</span>
<span class="hidden"><a id="L636" href="#L636">   636</a>  </span>
<span class="hidden"><a id="L637" href="#L637">   637</a>  </span><span>	for n := range s.Attachment {</span>
<span class="hidden"><a id="L638" href="#L638">   638</a>  </span><span>		s.Attachment[n].encode(w)</span>
<span class="hidden"><a id="L639" href="#L639">   639</a>  </span><span>	}</span>
<span class="hidden"><a id="L640" href="#L640">   640</a>  </span>
<span class="hidden"><a id="L641" href="#L641">   641</a>  </span><span>	for n := range s.Attendee {</span>
<span class="hidden"><a id="L642" href="#L642">   642</a>  </span><span>		s.Attendee[n].encode(w)</span>
<span class="hidden"><a id="L643" href="#L643">   643</a>  </span><span>	}</span>
<span class="hidden"><a id="L644" href="#L644">   644</a>  </span>
<span class="hidden"><a id="L645" href="#L645">   645</a>  </span><span>	for n := range s.Categories {</span>
<span class="hidden"><a id="L646" href="#L646">   646</a>  </span><span>		s.Categories[n].encode(w)</span>
<span class="hidden"><a id="L647" href="#L647">   647</a>  </span><span>	}</span>
<span class="hidden"><a id="L648" href="#L648">   648</a>  </span>
<span class="hidden"><a id="L649" href="#L649">   649</a>  </span><span>	for n := range s.Comment {</span>
<span class="hidden"><a id="L650" href="#L650">   650</a>  </span><span>		s.Comment[n].encode(w)</span>
<span class="hidden"><a id="L651" href="#L651">   651</a>  </span><span>	}</span>
<span class="hidden"><a id="L652" href="#L652">   652</a>  </span>
<span class="hidden"><a id="L653" href="#L653">   653</a>  </span><span>	for n := range s.Contact {</span>
<span class="hidden"><a id="L654" href="#L654">   654</a>  </span><span>		s.Contact[n].encode(w)</span>
<span class="hidden"><a id="L655" href="#L655">   655</a>  </span><span>	}</span>
<span class="hidden"><a id="L656" href="#L656">   656</a>  </span>
<span class="hidden"><a id="L657" href="#L657">   657</a>  </span><span>	for n := range s.ExceptionDateTime {</span>
<span class="hidden"><a id="L658" href="#L658">   658</a>  </span><span>		s.ExceptionDateTime[n].encode(w)</span>
<span class="hidden"><a id="L659" href="#L659">   659</a>  </span><span>	}</span>
<span class="hidden"><a id="L660" href="#L660">   660</a>  </span>
<span class="hidden"><a id="L661" href="#L661">   661</a>  </span><span>	for n := range s.RequestStatus {</span>
<span class="hidden"><a id="L662" href="#L662">   662</a>  </span><span>		s.RequestStatus[n].encode(w)</span>
<span class="hidden"><a id="L663" href="#L663">   663</a>  </span><span>	}</span>
<span class="hidden"><a id="L664" href="#L664">   664</a>  </span>
<span class="hidden"><a id="L665" href="#L665">   665</a>  </span><span>	for n := range s.RelatedTo {</span>
<span class="hidden"><a id="L666" href="#L666">   666</a>  </span><span>		s.RelatedTo[n].encode(w)</span>
<span class="hidden"><a id="L667" href="#L667">   667</a>  </span><span>	}</span>
<span class="hidden"><a id="L668" href="#L668">   668</a>  </span>
<span class="hidden"><a id="L669" href="#L669">   669</a>  </span><span>	for n := range s.Resources {</span>
<span class="hidden"><a id="L670" href="#L670">   670</a>  </span><span>		s.Resources[n].encode(w)</span>
<span class="hidden"><a id="L671" href="#L671">   671</a>  </span><span>	}</span>
<span class="hidden"><a id="L672" href="#L672">   672</a>  </span>
<span class="hidden"><a id="L673" href="#L673">   673</a>  </span><span>	for n := range s.RecurrenceDateTimes {</span>
<span class="hidden"><a id="L674" href="#L674">   674</a>  </span><span>		s.RecurrenceDateTimes[n].encode(w)</span>
<span class="hidden"><a id="L675" href="#L675">   675</a>  </span><span>	}</span>
<span class="hidden"><a id="L676" href="#L676">   676</a>  </span>
<span class="hidden"><a id="L677" href="#L677">   677</a>  </span><span>	for n := range s.Alarm {</span>
<span class="hidden"><a id="L678" href="#L678">   678</a>  </span><span>		s.Alarm[n].encode(w)</span>
<span class="hidden"><a id="L679" href="#L679">   679</a>  </span><span>	}</span>
<span class="hidden"><a id="L680" href="#L680">   680</a>  </span>
<span class="hidden"><a id="L681" href="#L681">   681</a>  </span><span>	w.WriteString(&#34;END:VEVENT\r\n&#34;)</span>
<span class="hidden"><a id="L682" href="#L682">   682</a>  </span><span>}</span>
<span class="hidden"><a id="L683" href="#L683">   683</a>  </span>
<span class="hidden"><a id="L684" href="#L684">   684</a>  </span><span>func (s *Event) valid() error {</span>
<span class="hidden"><a id="L685" href="#L685">   685</a>  </span><span>	if err := s.DateTimeStamp.valid(); err != nil {</span>
<span class="hidden"><a id="L686" href="#L686">   686</a>  </span><span>		return fmt.Errorf(errValidatingProp, cEvent, cDateTimeStamp, err)</span>
<span class="hidden"><a id="L687" href="#L687">   687</a>  </span><span>	}</span>
<span class="hidden"><a id="L688" href="#L688">   688</a>  </span>
<span class="hidden"><a id="L689" href="#L689">   689</a>  </span><span>	if err := s.UID.valid(); err != nil {</span>
<span class="hidden"><a id="L690" href="#L690">   690</a>  </span><span>		return fmt.Errorf(errValidatingProp, cEvent, cUID, err)</span>
<span class="hidden"><a id="L691" href="#L691">   691</a>  </span><span>	}</span>
<span class="hidden"><a id="L692" href="#L692">   692</a>  </span>
<span class="hidden"><a id="L693" href="#L693">   693</a>  </span><span>	if s.DateTimeStart != nil {</span>
<span class="hidden"><a id="L694" href="#L694">   694</a>  </span><span>		if err := s.DateTimeStart.valid(); err != nil {</span>
<span class="hidden"><a id="L695" href="#L695">   695</a>  </span><span>			return fmt.Errorf(errValidatingProp, cEvent, cDateTimeStart, err)</span>
<span class="hidden"><a id="L696" href="#L696">   696</a>  </span><span>		}</span>
<span class="hidden"><a id="L697" href="#L697">   697</a>  </span><span>	}</span>
<span class="hidden"><a id="L698" href="#L698">   698</a>  </span>
<span class="hidden"><a id="L699" href="#L699">   699</a>  </span><span>	if s.Class != nil {</span>
<span class="hidden"><a id="L700" href="#L700">   700</a>  </span><span>		if err := s.Class.valid(); err != nil {</span>
<span class="hidden"><a id="L701" href="#L701">   701</a>  </span><span>			return fmt.Errorf(errValidatingProp, cEvent, cClass, err)</span>
<span class="hidden"><a id="L702" href="#L702">   702</a>  </span><span>		}</span>
<span class="hidden"><a id="L703" href="#L703">   703</a>  </span><span>	}</span>
<span class="hidden"><a id="L704" href="#L704">   704</a>  </span>
<span class="hidden"><a id="L705" href="#L705">   705</a>  </span><span>	if s.Created != nil {</span>
<span class="hidden"><a id="L706" href="#L706">   706</a>  </span><span>		if err := s.Created.valid(); err != nil {</span>
<span class="hidden"><a id="L707" href="#L707">   707</a>  </span><span>			return fmt.Errorf(errValidatingProp, cEvent, cCreated, err)</span>
<span class="hidden"><a id="L708" href="#L708">   708</a>  </span><span>		}</span>
<span class="hidden"><a id="L709" href="#L709">   709</a>  </span><span>	}</span>
<span class="hidden"><a id="L710" href="#L710">   710</a>  </span>
<span class="hidden"><a id="L711" href="#L711">   711</a>  </span><span>	if s.Description != nil {</span>
<span class="hidden"><a id="L712" href="#L712">   712</a>  </span><span>		if err := s.Description.valid(); err != nil {</span>
<span class="hidden"><a id="L713" href="#L713">   713</a>  </span><span>			return fmt.Errorf(errValidatingProp, cEvent, cDescription, err)</span>
<span class="hidden"><a id="L714" href="#L714">   714</a>  </span><span>		}</span>
<span class="hidden"><a id="L715" href="#L715">   715</a>  </span><span>	}</span>
<span class="hidden"><a id="L716" href="#L716">   716</a>  </span>
<span class="hidden"><a id="L717" href="#L717">   717</a>  </span><span>	if s.Geo != nil {</span>
<span class="hidden"><a id="L718" href="#L718">   718</a>  </span><span>		if err := s.Geo.valid(); err != nil {</span>
<span class="hidden"><a id="L719" href="#L719">   719</a>  </span><span>			return fmt.Errorf(errValidatingProp, cEvent, cGeo, err)</span>
<span class="hidden"><a id="L720" href="#L720">   720</a>  </span><span>		}</span>
<span class="hidden"><a id="L721" href="#L721">   721</a>  </span><span>	}</span>
<span class="hidden"><a id="L722" href="#L722">   722</a>  </span>
<span class="hidden"><a id="L723" href="#L723">   723</a>  </span><span>	if s.LastModified != nil {</span>
<span class="hidden"><a id="L724" href="#L724">   724</a>  </span><span>		if err := s.LastModified.valid(); err != nil {</span>
<span class="hidden"><a id="L725" href="#L725">   725</a>  </span><span>			return fmt.Errorf(errValidatingProp, cEvent, cLastModified, err)</span>
<span class="hidden"><a id="L726" href="#L726">   726</a>  </span><span>		}</span>
<span class="hidden"><a id="L727" href="#L727">   727</a>  </span><span>	}</span>
<span class="hidden"><a id="L728" href="#L728">   728</a>  </span>
<span class="hidden"><a id="L729" href="#L729">   729</a>  </span><span>	if s.Location != nil {</span>
<span class="hidden"><a id="L730" href="#L730">   730</a>  </span><span>		if err := s.Location.valid(); err != nil {</span>
<span class="hidden"><a id="L731" href="#L731">   731</a>  </span><span>			return fmt.Errorf(errValidatingProp, cEvent, cLocation, err)</span>
<span class="hidden"><a id="L732" href="#L732">   732</a>  </span><span>		}</span>
<span class="hidden"><a id="L733" href="#L733">   733</a>  </span><span>	}</span>
<span class="hidden"><a id="L734" href="#L734">   734</a>  </span>
<span class="hidden"><a id="L735" href="#L735">   735</a>  </span><span>	if s.Organizer != nil {</span>
<span class="hidden"><a id="L736" href="#L736">   736</a>  </span><span>		if err := s.Organizer.valid(); err != nil {</span>
<span class="hidden"><a id="L737" href="#L737">   737</a>  </span><span>			return fmt.Errorf(errValidatingProp, cEvent, cOrganizer, err)</span>
<span class="hidden"><a id="L738" href="#L738">   738</a>  </span><span>		}</span>
<span class="hidden"><a id="L739" href="#L739">   739</a>  </span><span>	}</span>
<span class="hidden"><a id="L740" href="#L740">   740</a>  </span>
<span class="hidden"><a id="L741" href="#L741">   741</a>  </span><span>	if s.Priority != nil {</span>
<span class="hidden"><a id="L742" href="#L742">   742</a>  </span><span>		if err := s.Priority.valid(); err != nil {</span>
<span class="hidden"><a id="L743" href="#L743">   743</a>  </span><span>			return fmt.Errorf(errValidatingProp, cEvent, cPriority, err)</span>
<span class="hidden"><a id="L744" href="#L744">   744</a>  </span><span>		}</span>
<span class="hidden"><a id="L745" href="#L745">   745</a>  </span><span>	}</span>
<span class="hidden"><a id="L746" href="#L746">   746</a>  </span>
<span class="hidden"><a id="L747" href="#L747">   747</a>  </span><span>	if s.Sequence != nil {</span>
<span class="hidden"><a id="L748" href="#L748">   748</a>  </span><span>		if err := s.Sequence.valid(); err != nil {</span>
<span class="hidden"><a id="L749" href="#L749">   749</a>  </span><span>			return fmt.Errorf(errValidatingProp, cEvent, cSequence, err)</span>
<span class="hidden"><a id="L750" href="#L750">   750</a>  </span><span>		}</span>
<span class="hidden"><a id="L751" href="#L751">   751</a>  </span><span>	}</span>
<span class="hidden"><a id="L752" href="#L752">   752</a>  </span>
<span class="hidden"><a id="L753" href="#L753">   753</a>  </span><span>	if s.Status != nil {</span>
<span class="hidden"><a id="L754" href="#L754">   754</a>  </span><span>		if err := s.Status.valid(); err != nil {</span>
<span class="hidden"><a id="L755" href="#L755">   755</a>  </span><span>			return fmt.Errorf(errValidatingProp, cEvent, cStatus, err)</span>
<span class="hidden"><a id="L756" href="#L756">   756</a>  </span><span>		}</span>
<span class="hidden"><a id="L757" href="#L757">   757</a>  </span><span>	}</span>
<span class="hidden"><a id="L758" href="#L758">   758</a>  </span>
<span class="hidden"><a id="L759" href="#L759">   759</a>  </span><span>	if s.Summary != nil {</span>
<span class="hidden"><a id="L760" href="#L760">   760</a>  </span><span>		if err := s.Summary.valid(); err != nil {</span>
<span class="hidden"><a id="L761" href="#L761">   761</a>  </span><span>			return fmt.Errorf(errValidatingProp, cEvent, cSummary, err)</span>
<span class="hidden"><a id="L762" href="#L762">   762</a>  </span><span>		}</span>
<span class="hidden"><a id="L763" href="#L763">   763</a>  </span><span>	}</span>
<span class="hidden"><a id="L764" href="#L764">   764</a>  </span>
<span class="hidden"><a id="L765" href="#L765">   765</a>  </span><span>	if s.TimeTransparency != nil {</span>
<span class="hidden"><a id="L766" href="#L766">   766</a>  </span><span>		if err := s.TimeTransparency.valid(); err != nil {</span>
<span class="hidden"><a id="L767" href="#L767">   767</a>  </span><span>			return fmt.Errorf(errValidatingProp, cEvent, cTimeTransparency, err)</span>
<span class="hidden"><a id="L768" href="#L768">   768</a>  </span><span>		}</span>
<span class="hidden"><a id="L769" href="#L769">   769</a>  </span><span>	}</span>
<span class="hidden"><a id="L770" href="#L770">   770</a>  </span>
<span class="hidden"><a id="L771" href="#L771">   771</a>  </span><span>	if s.URL != nil {</span>
<span class="hidden"><a id="L772" href="#L772">   772</a>  </span><span>		if err := s.URL.valid(); err != nil {</span>
<span class="hidden"><a id="L773" href="#L773">   773</a>  </span><span>			return fmt.Errorf(errValidatingProp, cEvent, cURL, err)</span>
<span class="hidden"><a id="L774" href="#L774">   774</a>  </span><span>		}</span>
<span class="hidden"><a id="L775" href="#L775">   775</a>  </span><span>	}</span>
<span class="hidden"><a id="L776" href="#L776">   776</a>  </span>
<span class="hidden"><a id="L777" href="#L777">   777</a>  </span><span>	if s.RecurrenceID != nil {</span>
<span class="hidden"><a id="L778" href="#L778">   778</a>  </span><span>		if err := s.RecurrenceID.valid(); err != nil {</span>
<span class="hidden"><a id="L779" href="#L779">   779</a>  </span><span>			return fmt.Errorf(errValidatingProp, cEvent, cRecurrenceID, err)</span>
<span class="hidden"><a id="L780" href="#L780">   780</a>  </span><span>		}</span>
<span class="hidden"><a id="L781" href="#L781">   781</a>  </span><span>	}</span>
<span class="hidden"><a id="L782" href="#L782">   782</a>  </span>
<span class="hidden"><a id="L783" href="#L783">   783</a>  </span><span>	if s.RecurrenceRule != nil {</span>
<span class="hidden"><a id="L784" href="#L784">   784</a>  </span><span>		if err := s.RecurrenceRule.valid(); err != nil {</span>
<span class="hidden"><a id="L785" href="#L785">   785</a>  </span><span>			return fmt.Errorf(errValidatingProp, cEvent, cRecurrenceRule, err)</span>
<span class="hidden"><a id="L786" href="#L786">   786</a>  </span><span>		}</span>
<span class="hidden"><a id="L787" href="#L787">   787</a>  </span><span>	}</span>
<span class="hidden"><a id="L788" href="#L788">   788</a>  </span>
<span class="hidden"><a id="L789" href="#L789">   789</a>  </span><span>	if s.DateTimeEnd != nil {</span>
<span class="hidden"><a id="L790" href="#L790">   790</a>  </span><span>		if err := s.DateTimeEnd.valid(); err != nil {</span>
<span class="hidden"><a id="L791" href="#L791">   791</a>  </span><span>			return fmt.Errorf(errValidatingProp, cEvent, cDateTimeEnd, err)</span>
<span class="hidden"><a id="L792" href="#L792">   792</a>  </span><span>		}</span>
<span class="hidden"><a id="L793" href="#L793">   793</a>  </span><span>	}</span>
<span class="hidden"><a id="L794" href="#L794">   794</a>  </span>
<span class="hidden"><a id="L795" href="#L795">   795</a>  </span><span>	if s.Duration != nil {</span>
<span class="hidden"><a id="L796" href="#L796">   796</a>  </span><span>		if err := s.Duration.valid(); err != nil {</span>
<span class="hidden"><a id="L797" href="#L797">   797</a>  </span><span>			return fmt.Errorf(errValidatingProp, cEvent, cDuration, err)</span>
<span class="hidden"><a id="L798" href="#L798">   798</a>  </span><span>		}</span>
<span class="hidden"><a id="L799" href="#L799">   799</a>  </span><span>	}</span>
<span class="hidden"><a id="L800" href="#L800">   800</a>  </span>
<span class="hidden"><a id="L801" href="#L801">   801</a>  </span><span>	for n := range s.Attachment {</span>
<span class="hidden"><a id="L802" href="#L802">   802</a>  </span><span>		if err := s.Attachment[n].valid(); err != nil {</span>
<span class="hidden"><a id="L803" href="#L803">   803</a>  </span><span>			return fmt.Errorf(errValidatingProp, cEvent, cAttachment, err)</span>
<span class="hidden"><a id="L804" href="#L804">   804</a>  </span><span>		}</span>
<span class="hidden"><a id="L805" href="#L805">   805</a>  </span><span>	}</span>
<span class="hidden"><a id="L806" href="#L806">   806</a>  </span>
<span class="hidden"><a id="L807" href="#L807">   807</a>  </span><span>	for n := range s.Attendee {</span>
<span class="hidden"><a id="L808" href="#L808">   808</a>  </span><span>		if err := s.Attendee[n].valid(); err != nil {</span>
<span class="hidden"><a id="L809" href="#L809">   809</a>  </span><span>			return fmt.Errorf(errValidatingProp, cEvent, cAttendee, err)</span>
<span class="hidden"><a id="L810" href="#L810">   810</a>  </span><span>		}</span>
<span class="hidden"><a id="L811" href="#L811">   811</a>  </span><span>	}</span>
<span class="hidden"><a id="L812" href="#L812">   812</a>  </span>
<span class="hidden"><a id="L813" href="#L813">   813</a>  </span><span>	for n := range s.Categories {</span>
<span class="hidden"><a id="L814" href="#L814">   814</a>  </span><span>		if err := s.Categories[n].valid(); err != nil {</span>
<span class="hidden"><a id="L815" href="#L815">   815</a>  </span><span>			return fmt.Errorf(errValidatingProp, cEvent, cCategories, err)</span>
<span class="hidden"><a id="L816" href="#L816">   816</a>  </span><span>		}</span>
<span class="hidden"><a id="L817" href="#L817">   817</a>  </span><span>	}</span>
<span class="hidden"><a id="L818" href="#L818">   818</a>  </span>
<span class="hidden"><a id="L819" href="#L819">   819</a>  </span><span>	for n := range s.Comment {</span>
<span class="hidden"><a id="L820" href="#L820">   820</a>  </span><span>		if err := s.Comment[n].valid(); err != nil {</span>
<span class="hidden"><a id="L821" href="#L821">   821</a>  </span><span>			return fmt.Errorf(errValidatingProp, cEvent, cComment, err)</span>
<span class="hidden"><a id="L822" href="#L822">   822</a>  </span><span>		}</span>
<span class="hidden"><a id="L823" href="#L823">   823</a>  </span><span>	}</span>
<span class="hidden"><a id="L824" href="#L824">   824</a>  </span>
<span class="hidden"><a id="L825" href="#L825">   825</a>  </span><span>	for n := range s.Contact {</span>
<span class="hidden"><a id="L826" href="#L826">   826</a>  </span><span>		if err := s.Contact[n].valid(); err != nil {</span>
<span class="hidden"><a id="L827" href="#L827">   827</a>  </span><span>			return fmt.Errorf(errValidatingProp, cEvent, cContact, err)</span>
<span class="hidden"><a id="L828" href="#L828">   828</a>  </span><span>		}</span>
<span class="hidden"><a id="L829" href="#L829">   829</a>  </span><span>	}</span>
<span class="hidden"><a id="L830" href="#L830">   830</a>  </span>
<span class="hidden"><a id="L831" href="#L831">   831</a>  </span><span>	for n := range s.ExceptionDateTime {</span>
<span class="hidden"><a id="L832" href="#L832">   832</a>  </span><span>		if err := s.ExceptionDateTime[n].valid(); err != nil {</span>
<span class="hidden"><a id="L833" href="#L833">   833</a>  </span><span>			return fmt.Errorf(errValidatingProp, cEvent, cExceptionDateTime, err)</span>
<span class="hidden"><a id="L834" href="#L834">   834</a>  </span><span>		}</span>
<span class="hidden"><a id="L835" href="#L835">   835</a>  </span><span>	}</span>
<span class="hidden"><a id="L836" href="#L836">   836</a>  </span>
<span class="hidden"><a id="L837" href="#L837">   837</a>  </span><span>	for n := range s.RequestStatus {</span>
<span class="hidden"><a id="L838" href="#L838">   838</a>  </span><span>		if err := s.RequestStatus[n].valid(); err != nil {</span>
<span class="hidden"><a id="L839" href="#L839">   839</a>  </span><span>			return fmt.Errorf(errValidatingProp, cEvent, cRequestStatus, err)</span>
<span class="hidden"><a id="L840" href="#L840">   840</a>  </span><span>		}</span>
<span class="hidden"><a id="L841" href="#L841">   841</a>  </span><span>	}</span>
<span class="hidden"><a id="L842" href="#L842">   842</a>  </span>
<span class="hidden"><a id="L843" href="#L843">   843</a>  </span><span>	for n := range s.RelatedTo {</span>
<span class="hidden"><a id="L844" href="#L844">   844</a>  </span><span>		if err := s.RelatedTo[n].valid(); err != nil {</span>
<span class="hidden"><a id="L845" href="#L845">   845</a>  </span><span>			return fmt.Errorf(errValidatingProp, cEvent, cRelatedTo, err)</span>
<span class="hidden"><a id="L846" href="#L846">   846</a>  </span><span>		}</span>
<span class="hidden"><a id="L847" href="#L847">   847</a>  </span><span>	}</span>
<span class="hidden"><a id="L848" href="#L848">   848</a>  </span>
<span class="hidden"><a id="L849" href="#L849">   849</a>  </span><span>	for n := range s.Resources {</span>
<span class="hidden"><a id="L850" href="#L850">   850</a>  </span><span>		if err := s.Resources[n].valid(); err != nil {</span>
<span class="hidden"><a id="L851" href="#L851">   851</a>  </span><span>			return fmt.Errorf(errValidatingProp, cEvent, cResources, err)</span>
<span class="hidden"><a id="L852" href="#L852">   852</a>  </span><span>		}</span>
<span class="hidden"><a id="L853" href="#L853">   853</a>  </span><span>	}</span>
<span class="hidden"><a id="L854" href="#L854">   854</a>  </span>
<span class="hidden"><a id="L855" href="#L855">   855</a>  </span><span>	for n := range s.RecurrenceDateTimes {</span>
<span class="hidden"><a id="L856" href="#L856">   856</a>  </span><span>		if err := s.RecurrenceDateTimes[n].valid(); err != nil {</span>
<span class="hidden"><a id="L857" href="#L857">   857</a>  </span><span>			return fmt.Errorf(errValidatingProp, cEvent, cRecurrenceDateTimes, err)</span>
<span class="hidden"><a id="L858" href="#L858">   858</a>  </span><span>		}</span>
<span class="hidden"><a id="L859" href="#L859">   859</a>  </span><span>	}</span>
<span class="hidden"><a id="L860" href="#L860">   860</a>  </span>
<span class="hidden"><a id="L861" href="#L861">   861</a>  </span><span>	for n := range s.Alarm {</span>
<span class="hidden"><a id="L862" href="#L862">   862</a>  </span><span>		if err := s.Alarm[n].valid(); err != nil {</span>
<span class="hidden"><a id="L863" href="#L863">   863</a>  </span><span>			return fmt.Errorf(errValidatingProp, cEvent, cAlarm, err)</span>
<span class="hidden"><a id="L864" href="#L864">   864</a>  </span><span>		}</span>
<span class="hidden"><a id="L865" href="#L865">   865</a>  </span><span>	}</span>
<span class="hidden"><a id="L866" href="#L866">   866</a>  </span>
<span class="hidden"><a id="L867" href="#L867">   867</a>  </span><span>	return nil</span>
<span class="hidden"><a id="L868" href="#L868">   868</a>  </span><span>}</span>
<span class="hidden"><a id="L869" href="#L869">   869</a>  </span>
<span class="hidden"><a id="L870" href="#L870">   870</a>  </span><span class="text">// Todo provides a group of components that describe a to-do.</span>
<span class="hidden"><a id="L871" href="#L871">   871</a>  </span><span>type Todo struct {</span>
<span class="hidden"><a id="L872" href="#L872">   872</a>  </span><span>	DateTimeStamp       PropDateTimeStamp</span>
<span class="hidden"><a id="L873" href="#L873">   873</a>  </span><span>	UID                 PropUID</span>
<span class="hidden"><a id="L874" href="#L874">   874</a>  </span><span>	Class               *PropClass</span>
<span class="hidden"><a id="L875" href="#L875">   875</a>  </span><span>	Completed           *PropCompleted</span>
<span class="hidden"><a id="L876" href="#L876">   876</a>  </span><span>	Created             *PropCreated</span>
<span class="hidden"><a id="L877" href="#L877">   877</a>  </span><span>	Description         *PropDescription</span>
<span class="hidden"><a id="L878" href="#L878">   878</a>  </span><span>	DateTimeStart       *PropDateTimeStart</span>
<span class="hidden"><a id="L879" href="#L879">   879</a>  </span><span>	Geo                 *PropGeo</span>
<span class="hidden"><a id="L880" href="#L880">   880</a>  </span><span>	LastModified        *PropLastModified</span>
<span class="hidden"><a id="L881" href="#L881">   881</a>  </span><span>	Location            *PropLocation</span>
<span class="hidden"><a id="L882" href="#L882">   882</a>  </span><span>	Organizer           *PropOrganizer</span>
<span class="hidden"><a id="L883" href="#L883">   883</a>  </span><span>	PercentComplete     *PropPercentComplete</span>
<span class="hidden"><a id="L884" href="#L884">   884</a>  </span><span>	Priority            *PropPriority</span>
<span class="hidden"><a id="L885" href="#L885">   885</a>  </span><span>	RecurrenceID        *PropRecurrenceID</span>
<span class="hidden"><a id="L886" href="#L886">   886</a>  </span><span>	Sequence            *PropSequence</span>
<span class="hidden"><a id="L887" href="#L887">   887</a>  </span><span>	Status              *PropStatus</span>
<span class="hidden"><a id="L888" href="#L888">   888</a>  </span><span>	Summary             *PropSummary</span>
<span class="hidden"><a id="L889" href="#L889">   889</a>  </span><span>	URL                 *PropURL</span>
<span class="hidden"><a id="L890" href="#L890">   890</a>  </span><span>	Due                 *PropDue</span>
<span class="hidden"><a id="L891" href="#L891">   891</a>  </span><span>	Duration            *PropDuration</span>
<span class="hidden"><a id="L892" href="#L892">   892</a>  </span><span>	Attachment          []PropAttachment</span>
<span class="hidden"><a id="L893" href="#L893">   893</a>  </span><span>	Attendee            []PropAttendee</span>
<span class="hidden"><a id="L894" href="#L894">   894</a>  </span><span>	Categories          []PropCategories</span>
<span class="hidden"><a id="L895" href="#L895">   895</a>  </span><span>	Comment             []PropComment</span>
<span class="hidden"><a id="L896" href="#L896">   896</a>  </span><span>	Contact             []PropContact</span>
<span class="hidden"><a id="L897" href="#L897">   897</a>  </span><span>	ExceptionDateTime   []PropExceptionDateTime</span>
<span class="hidden"><a id="L898" href="#L898">   898</a>  </span><span>	RequestStatus       []PropRequestStatus</span>
<span class="hidden"><a id="L899" href="#L899">   899</a>  </span><span>	RelatedTo           []PropRelatedTo</span>
<span class="hidden"><a id="L900" href="#L900">   900</a>  </span><span>	Resources           []PropResources</span>
<span class="hidden"><a id="L901" href="#L901">   901</a>  </span><span>	RecurrenceDateTimes []PropRecurrenceDateTimes</span>
<span class="hidden"><a id="L902" href="#L902">   902</a>  </span><span>	Alarm               []Alarm</span>
<span class="hidden"><a id="L903" href="#L903">   903</a>  </span><span>}</span>
<span class="hidden"><a id="L904" href="#L904">   904</a>  </span>
<span class="hidden"><a id="L905" href="#L905">   905</a>  </span><span>func (s *Todo) decode(t tokeniser) error {</span>
<span class="hidden"><a id="L906" href="#L906">   906</a>  </span><span>	var requiredDateTimeStamp, requiredUID bool</span>
<span class="hidden"><a id="L907" href="#L907">   907</a>  </span>
<span class="hidden"><a id="L908" href="#L908">   908</a>  </span><span>Loop:</span>
<span class="hidden"><a id="L909" href="#L909">   909</a>  </span><span>	for {</span>
<span class="hidden"><a id="L910" href="#L910">   910</a>  </span><span>		p, err := t.GetPhrase()</span>
<span class="hidden"><a id="L911" href="#L911">   911</a>  </span><span>		if err != nil {</span>
<span class="hidden"><a id="L912" href="#L912">   912</a>  </span><span>			return fmt.Errorf(errDecodingType, cTodo, err)</span>
<span class="hidden"><a id="L913" href="#L913">   913</a>  </span><span>		} else if p.Type == parser.PhraseDone {</span>
<span class="hidden"><a id="L914" href="#L914">   914</a>  </span><span>			return fmt.Errorf(errDecodingType, cTodo, io.ErrUnexpectedEOF)</span>
<span class="hidden"><a id="L915" href="#L915">   915</a>  </span><span>		}</span>
<span class="hidden"><a id="L916" href="#L916">   916</a>  </span>
<span class="hidden"><a id="L917" href="#L917">   917</a>  </span><span>		params := p.Data[1 : len(p.Data)-1]</span>
<span class="hidden"><a id="L918" href="#L918">   918</a>  </span><span>		value := p.Data[len(p.Data)-1].Data</span>
<span class="hidden"><a id="L919" href="#L919">   919</a>  </span>
<span class="hidden"><a id="L920" href="#L920">   920</a>  </span><span>		switch strings.ToUpper(p.Data[0].Data) {</span>
<span class="hidden"><a id="L921" href="#L921">   921</a>  </span><span>		case &#34;BEGIN&#34;:</span>
<span class="hidden"><a id="L922" href="#L922">   922</a>  </span><span>			switch n := strings.ToUpper(value); n {</span>
<span class="hidden"><a id="L923" href="#L923">   923</a>  </span><span>			case &#34;VALARM&#34;:</span>
<span class="hidden"><a id="L924" href="#L924">   924</a>  </span><span>				var e Alarm</span>
<span class="hidden"><a id="L925" href="#L925">   925</a>  </span>
<span class="hidden"><a id="L926" href="#L926">   926</a>  </span><span>				if err := e.decode(t); err != nil {</span>
<span class="hidden"><a id="L927" href="#L927">   927</a>  </span><span>					return fmt.Errorf(errDecodingProp, cTodo, cAlarm, err)</span>
<span class="hidden"><a id="L928" href="#L928">   928</a>  </span><span>				}</span>
<span class="hidden"><a id="L929" href="#L929">   929</a>  </span>
<span class="hidden"><a id="L930" href="#L930">   930</a>  </span><span>				s.Alarm = append(s.Alarm, e)</span>
<span class="hidden"><a id="L931" href="#L931">   931</a>  </span><span>			default:</span>
<span class="hidden"><a id="L932" href="#L932">   932</a>  </span><span>				if err := decodeDummy(t, n); err != nil {</span>
<span class="hidden"><a id="L933" href="#L933">   933</a>  </span><span>					return fmt.Errorf(errDecodingType, cTodo, err)</span>
<span class="hidden"><a id="L934" href="#L934">   934</a>  </span><span>				}</span>
<span class="hidden"><a id="L935" href="#L935">   935</a>  </span><span>			}</span>
<span class="hidden"><a id="L936" href="#L936">   936</a>  </span><span>		case &#34;DTSTAMP&#34;:</span>
<span class="hidden"><a id="L937" href="#L937">   937</a>  </span><span>			if requiredDateTimeStamp {</span>
<span class="hidden"><a id="L938" href="#L938">   938</a>  </span><span>				return fmt.Errorf(errMultiple, cTodo, cDateTimeStamp)</span>
<span class="hidden"><a id="L939" href="#L939">   939</a>  </span><span>			}</span>
<span class="hidden"><a id="L940" href="#L940">   940</a>  </span>
<span class="hidden"><a id="L941" href="#L941">   941</a>  </span><span>			requiredDateTimeStamp = true</span>
<span class="hidden"><a id="L942" href="#L942">   942</a>  </span>
<span class="hidden"><a id="L943" href="#L943">   943</a>  </span><span>			if err := s.DateTimeStamp.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L944" href="#L944">   944</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTodo, cDateTimeStamp, err)</span>
<span class="hidden"><a id="L945" href="#L945">   945</a>  </span><span>			}</span>
<span class="hidden"><a id="L946" href="#L946">   946</a>  </span><span>		case &#34;UID&#34;:</span>
<span class="hidden"><a id="L947" href="#L947">   947</a>  </span><span>			if requiredUID {</span>
<span class="hidden"><a id="L948" href="#L948">   948</a>  </span><span>				return fmt.Errorf(errMultiple, cTodo, cUID)</span>
<span class="hidden"><a id="L949" href="#L949">   949</a>  </span><span>			}</span>
<span class="hidden"><a id="L950" href="#L950">   950</a>  </span>
<span class="hidden"><a id="L951" href="#L951">   951</a>  </span><span>			requiredUID = true</span>
<span class="hidden"><a id="L952" href="#L952">   952</a>  </span>
<span class="hidden"><a id="L953" href="#L953">   953</a>  </span><span>			if err := s.UID.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L954" href="#L954">   954</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTodo, cUID, err)</span>
<span class="hidden"><a id="L955" href="#L955">   955</a>  </span><span>			}</span>
<span class="hidden"><a id="L956" href="#L956">   956</a>  </span><span>		case &#34;CLASS&#34;:</span>
<span class="hidden"><a id="L957" href="#L957">   957</a>  </span><span>			if s.Class != nil {</span>
<span class="hidden"><a id="L958" href="#L958">   958</a>  </span><span>				return fmt.Errorf(errMultiple, cTodo, cClass)</span>
<span class="hidden"><a id="L959" href="#L959">   959</a>  </span><span>			}</span>
<span class="hidden"><a id="L960" href="#L960">   960</a>  </span>
<span class="hidden"><a id="L961" href="#L961">   961</a>  </span><span>			s.Class = new(PropClass)</span>
<span class="hidden"><a id="L962" href="#L962">   962</a>  </span>
<span class="hidden"><a id="L963" href="#L963">   963</a>  </span><span>			if err := s.Class.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L964" href="#L964">   964</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTodo, cClass, err)</span>
<span class="hidden"><a id="L965" href="#L965">   965</a>  </span><span>			}</span>
<span class="hidden"><a id="L966" href="#L966">   966</a>  </span><span>		case &#34;COMPLETED&#34;:</span>
<span class="hidden"><a id="L967" href="#L967">   967</a>  </span><span>			if s.Completed != nil {</span>
<span class="hidden"><a id="L968" href="#L968">   968</a>  </span><span>				return fmt.Errorf(errMultiple, cTodo, cCompleted)</span>
<span class="hidden"><a id="L969" href="#L969">   969</a>  </span><span>			}</span>
<span class="hidden"><a id="L970" href="#L970">   970</a>  </span>
<span class="hidden"><a id="L971" href="#L971">   971</a>  </span><span>			s.Completed = new(PropCompleted)</span>
<span class="hidden"><a id="L972" href="#L972">   972</a>  </span>
<span class="hidden"><a id="L973" href="#L973">   973</a>  </span><span>			if err := s.Completed.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L974" href="#L974">   974</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTodo, cCompleted, err)</span>
<span class="hidden"><a id="L975" href="#L975">   975</a>  </span><span>			}</span>
<span class="hidden"><a id="L976" href="#L976">   976</a>  </span><span>		case &#34;CREATED&#34;:</span>
<span class="hidden"><a id="L977" href="#L977">   977</a>  </span><span>			if s.Created != nil {</span>
<span class="hidden"><a id="L978" href="#L978">   978</a>  </span><span>				return fmt.Errorf(errMultiple, cTodo, cCreated)</span>
<span class="hidden"><a id="L979" href="#L979">   979</a>  </span><span>			}</span>
<span class="hidden"><a id="L980" href="#L980">   980</a>  </span>
<span class="hidden"><a id="L981" href="#L981">   981</a>  </span><span>			s.Created = new(PropCreated)</span>
<span class="hidden"><a id="L982" href="#L982">   982</a>  </span>
<span class="hidden"><a id="L983" href="#L983">   983</a>  </span><span>			if err := s.Created.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L984" href="#L984">   984</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTodo, cCreated, err)</span>
<span class="hidden"><a id="L985" href="#L985">   985</a>  </span><span>			}</span>
<span class="hidden"><a id="L986" href="#L986">   986</a>  </span><span>		case &#34;DESCRIPTION&#34;:</span>
<span class="hidden"><a id="L987" href="#L987">   987</a>  </span><span>			if s.Description != nil {</span>
<span class="hidden"><a id="L988" href="#L988">   988</a>  </span><span>				return fmt.Errorf(errMultiple, cTodo, cDescription)</span>
<span class="hidden"><a id="L989" href="#L989">   989</a>  </span><span>			}</span>
<span class="hidden"><a id="L990" href="#L990">   990</a>  </span>
<span class="hidden"><a id="L991" href="#L991">   991</a>  </span><span>			s.Description = new(PropDescription)</span>
<span class="hidden"><a id="L992" href="#L992">   992</a>  </span>
<span class="hidden"><a id="L993" href="#L993">   993</a>  </span><span>			if err := s.Description.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L994" href="#L994">   994</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTodo, cDescription, err)</span>
<span class="hidden"><a id="L995" href="#L995">   995</a>  </span><span>			}</span>
<span class="hidden"><a id="L996" href="#L996">   996</a>  </span><span>		case &#34;DTSTART&#34;:</span>
<span class="hidden"><a id="L997" href="#L997">   997</a>  </span><span>			if s.DateTimeStart != nil {</span>
<span class="hidden"><a id="L998" href="#L998">   998</a>  </span><span>				return fmt.Errorf(errMultiple, cTodo, cDateTimeStart)</span>
<span class="hidden"><a id="L999" href="#L999">   999</a>  </span><span>			}</span>
<span class="hidden"><a id="L1000" href="#L1000">  1000</a>  </span>
<span class="hidden"><a id="L1001" href="#L1001">  1001</a>  </span><span>			s.DateTimeStart = new(PropDateTimeStart)</span>
<span class="hidden"><a id="L1002" href="#L1002">  1002</a>  </span>
<span class="hidden"><a id="L1003" href="#L1003">  1003</a>  </span><span>			if err := s.DateTimeStart.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1004" href="#L1004">  1004</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTodo, cDateTimeStart, err)</span>
<span class="hidden"><a id="L1005" href="#L1005">  1005</a>  </span><span>			}</span>
<span class="hidden"><a id="L1006" href="#L1006">  1006</a>  </span><span>		case &#34;GEO&#34;:</span>
<span class="hidden"><a id="L1007" href="#L1007">  1007</a>  </span><span>			if s.Geo != nil {</span>
<span class="hidden"><a id="L1008" href="#L1008">  1008</a>  </span><span>				return fmt.Errorf(errMultiple, cTodo, cGeo)</span>
<span class="hidden"><a id="L1009" href="#L1009">  1009</a>  </span><span>			}</span>
<span class="hidden"><a id="L1010" href="#L1010">  1010</a>  </span>
<span class="hidden"><a id="L1011" href="#L1011">  1011</a>  </span><span>			s.Geo = new(PropGeo)</span>
<span class="hidden"><a id="L1012" href="#L1012">  1012</a>  </span>
<span class="hidden"><a id="L1013" href="#L1013">  1013</a>  </span><span>			if err := s.Geo.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1014" href="#L1014">  1014</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTodo, cGeo, err)</span>
<span class="hidden"><a id="L1015" href="#L1015">  1015</a>  </span><span>			}</span>
<span class="hidden"><a id="L1016" href="#L1016">  1016</a>  </span><span>		case &#34;LAST-MOD&#34;:</span>
<span class="hidden"><a id="L1017" href="#L1017">  1017</a>  </span><span>			if s.LastModified != nil {</span>
<span class="hidden"><a id="L1018" href="#L1018">  1018</a>  </span><span>				return fmt.Errorf(errMultiple, cTodo, cLastModified)</span>
<span class="hidden"><a id="L1019" href="#L1019">  1019</a>  </span><span>			}</span>
<span class="hidden"><a id="L1020" href="#L1020">  1020</a>  </span>
<span class="hidden"><a id="L1021" href="#L1021">  1021</a>  </span><span>			s.LastModified = new(PropLastModified)</span>
<span class="hidden"><a id="L1022" href="#L1022">  1022</a>  </span>
<span class="hidden"><a id="L1023" href="#L1023">  1023</a>  </span><span>			if err := s.LastModified.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1024" href="#L1024">  1024</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTodo, cLastModified, err)</span>
<span class="hidden"><a id="L1025" href="#L1025">  1025</a>  </span><span>			}</span>
<span class="hidden"><a id="L1026" href="#L1026">  1026</a>  </span><span>		case &#34;LOCATION&#34;:</span>
<span class="hidden"><a id="L1027" href="#L1027">  1027</a>  </span><span>			if s.Location != nil {</span>
<span class="hidden"><a id="L1028" href="#L1028">  1028</a>  </span><span>				return fmt.Errorf(errMultiple, cTodo, cLocation)</span>
<span class="hidden"><a id="L1029" href="#L1029">  1029</a>  </span><span>			}</span>
<span class="hidden"><a id="L1030" href="#L1030">  1030</a>  </span>
<span class="hidden"><a id="L1031" href="#L1031">  1031</a>  </span><span>			s.Location = new(PropLocation)</span>
<span class="hidden"><a id="L1032" href="#L1032">  1032</a>  </span>
<span class="hidden"><a id="L1033" href="#L1033">  1033</a>  </span><span>			if err := s.Location.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1034" href="#L1034">  1034</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTodo, cLocation, err)</span>
<span class="hidden"><a id="L1035" href="#L1035">  1035</a>  </span><span>			}</span>
<span class="hidden"><a id="L1036" href="#L1036">  1036</a>  </span><span>		case &#34;ORGANIZER&#34;:</span>
<span class="hidden"><a id="L1037" href="#L1037">  1037</a>  </span><span>			if s.Organizer != nil {</span>
<span class="hidden"><a id="L1038" href="#L1038">  1038</a>  </span><span>				return fmt.Errorf(errMultiple, cTodo, cOrganizer)</span>
<span class="hidden"><a id="L1039" href="#L1039">  1039</a>  </span><span>			}</span>
<span class="hidden"><a id="L1040" href="#L1040">  1040</a>  </span>
<span class="hidden"><a id="L1041" href="#L1041">  1041</a>  </span><span>			s.Organizer = new(PropOrganizer)</span>
<span class="hidden"><a id="L1042" href="#L1042">  1042</a>  </span>
<span class="hidden"><a id="L1043" href="#L1043">  1043</a>  </span><span>			if err := s.Organizer.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1044" href="#L1044">  1044</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTodo, cOrganizer, err)</span>
<span class="hidden"><a id="L1045" href="#L1045">  1045</a>  </span><span>			}</span>
<span class="hidden"><a id="L1046" href="#L1046">  1046</a>  </span><span>		case &#34;PERCENT-COMPLETE&#34;:</span>
<span class="hidden"><a id="L1047" href="#L1047">  1047</a>  </span><span>			if s.PercentComplete != nil {</span>
<span class="hidden"><a id="L1048" href="#L1048">  1048</a>  </span><span>				return fmt.Errorf(errMultiple, cTodo, cPercentComplete)</span>
<span class="hidden"><a id="L1049" href="#L1049">  1049</a>  </span><span>			}</span>
<span class="hidden"><a id="L1050" href="#L1050">  1050</a>  </span>
<span class="hidden"><a id="L1051" href="#L1051">  1051</a>  </span><span>			s.PercentComplete = new(PropPercentComplete)</span>
<span class="hidden"><a id="L1052" href="#L1052">  1052</a>  </span>
<span class="hidden"><a id="L1053" href="#L1053">  1053</a>  </span><span>			if err := s.PercentComplete.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1054" href="#L1054">  1054</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTodo, cPercentComplete, err)</span>
<span class="hidden"><a id="L1055" href="#L1055">  1055</a>  </span><span>			}</span>
<span class="hidden"><a id="L1056" href="#L1056">  1056</a>  </span><span>		case &#34;PRIORITY&#34;:</span>
<span class="hidden"><a id="L1057" href="#L1057">  1057</a>  </span><span>			if s.Priority != nil {</span>
<span class="hidden"><a id="L1058" href="#L1058">  1058</a>  </span><span>				return fmt.Errorf(errMultiple, cTodo, cPriority)</span>
<span class="hidden"><a id="L1059" href="#L1059">  1059</a>  </span><span>			}</span>
<span class="hidden"><a id="L1060" href="#L1060">  1060</a>  </span>
<span class="hidden"><a id="L1061" href="#L1061">  1061</a>  </span><span>			s.Priority = new(PropPriority)</span>
<span class="hidden"><a id="L1062" href="#L1062">  1062</a>  </span>
<span class="hidden"><a id="L1063" href="#L1063">  1063</a>  </span><span>			if err := s.Priority.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1064" href="#L1064">  1064</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTodo, cPriority, err)</span>
<span class="hidden"><a id="L1065" href="#L1065">  1065</a>  </span><span>			}</span>
<span class="hidden"><a id="L1066" href="#L1066">  1066</a>  </span><span>		case &#34;RECURRENCE-ID&#34;:</span>
<span class="hidden"><a id="L1067" href="#L1067">  1067</a>  </span><span>			if s.RecurrenceID != nil {</span>
<span class="hidden"><a id="L1068" href="#L1068">  1068</a>  </span><span>				return fmt.Errorf(errMultiple, cTodo, cRecurrenceID)</span>
<span class="hidden"><a id="L1069" href="#L1069">  1069</a>  </span><span>			}</span>
<span class="hidden"><a id="L1070" href="#L1070">  1070</a>  </span>
<span class="hidden"><a id="L1071" href="#L1071">  1071</a>  </span><span>			s.RecurrenceID = new(PropRecurrenceID)</span>
<span class="hidden"><a id="L1072" href="#L1072">  1072</a>  </span>
<span class="hidden"><a id="L1073" href="#L1073">  1073</a>  </span><span>			if err := s.RecurrenceID.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1074" href="#L1074">  1074</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTodo, cRecurrenceID, err)</span>
<span class="hidden"><a id="L1075" href="#L1075">  1075</a>  </span><span>			}</span>
<span class="hidden"><a id="L1076" href="#L1076">  1076</a>  </span><span>		case &#34;SEQUENCE&#34;:</span>
<span class="hidden"><a id="L1077" href="#L1077">  1077</a>  </span><span>			if s.Sequence != nil {</span>
<span class="hidden"><a id="L1078" href="#L1078">  1078</a>  </span><span>				return fmt.Errorf(errMultiple, cTodo, cSequence)</span>
<span class="hidden"><a id="L1079" href="#L1079">  1079</a>  </span><span>			}</span>
<span class="hidden"><a id="L1080" href="#L1080">  1080</a>  </span>
<span class="hidden"><a id="L1081" href="#L1081">  1081</a>  </span><span>			s.Sequence = new(PropSequence)</span>
<span class="hidden"><a id="L1082" href="#L1082">  1082</a>  </span>
<span class="hidden"><a id="L1083" href="#L1083">  1083</a>  </span><span>			if err := s.Sequence.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1084" href="#L1084">  1084</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTodo, cSequence, err)</span>
<span class="hidden"><a id="L1085" href="#L1085">  1085</a>  </span><span>			}</span>
<span class="hidden"><a id="L1086" href="#L1086">  1086</a>  </span><span>		case &#34;STATUS&#34;:</span>
<span class="hidden"><a id="L1087" href="#L1087">  1087</a>  </span><span>			if s.Status != nil {</span>
<span class="hidden"><a id="L1088" href="#L1088">  1088</a>  </span><span>				return fmt.Errorf(errMultiple, cTodo, cStatus)</span>
<span class="hidden"><a id="L1089" href="#L1089">  1089</a>  </span><span>			}</span>
<span class="hidden"><a id="L1090" href="#L1090">  1090</a>  </span>
<span class="hidden"><a id="L1091" href="#L1091">  1091</a>  </span><span>			s.Status = new(PropStatus)</span>
<span class="hidden"><a id="L1092" href="#L1092">  1092</a>  </span>
<span class="hidden"><a id="L1093" href="#L1093">  1093</a>  </span><span>			if err := s.Status.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1094" href="#L1094">  1094</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTodo, cStatus, err)</span>
<span class="hidden"><a id="L1095" href="#L1095">  1095</a>  </span><span>			}</span>
<span class="hidden"><a id="L1096" href="#L1096">  1096</a>  </span><span>		case &#34;SUMMARY&#34;:</span>
<span class="hidden"><a id="L1097" href="#L1097">  1097</a>  </span><span>			if s.Summary != nil {</span>
<span class="hidden"><a id="L1098" href="#L1098">  1098</a>  </span><span>				return fmt.Errorf(errMultiple, cTodo, cSummary)</span>
<span class="hidden"><a id="L1099" href="#L1099">  1099</a>  </span><span>			}</span>
<span class="hidden"><a id="L1100" href="#L1100">  1100</a>  </span>
<span class="hidden"><a id="L1101" href="#L1101">  1101</a>  </span><span>			s.Summary = new(PropSummary)</span>
<span class="hidden"><a id="L1102" href="#L1102">  1102</a>  </span>
<span class="hidden"><a id="L1103" href="#L1103">  1103</a>  </span><span>			if err := s.Summary.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1104" href="#L1104">  1104</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTodo, cSummary, err)</span>
<span class="hidden"><a id="L1105" href="#L1105">  1105</a>  </span><span>			}</span>
<span class="hidden"><a id="L1106" href="#L1106">  1106</a>  </span><span>		case &#34;URL&#34;:</span>
<span class="hidden"><a id="L1107" href="#L1107">  1107</a>  </span><span>			if s.URL != nil {</span>
<span class="hidden"><a id="L1108" href="#L1108">  1108</a>  </span><span>				return fmt.Errorf(errMultiple, cTodo, cURL)</span>
<span class="hidden"><a id="L1109" href="#L1109">  1109</a>  </span><span>			}</span>
<span class="hidden"><a id="L1110" href="#L1110">  1110</a>  </span>
<span class="hidden"><a id="L1111" href="#L1111">  1111</a>  </span><span>			s.URL = new(PropURL)</span>
<span class="hidden"><a id="L1112" href="#L1112">  1112</a>  </span>
<span class="hidden"><a id="L1113" href="#L1113">  1113</a>  </span><span>			if err := s.URL.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1114" href="#L1114">  1114</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTodo, cURL, err)</span>
<span class="hidden"><a id="L1115" href="#L1115">  1115</a>  </span><span>			}</span>
<span class="hidden"><a id="L1116" href="#L1116">  1116</a>  </span><span>		case &#34;DUE&#34;:</span>
<span class="hidden"><a id="L1117" href="#L1117">  1117</a>  </span><span>			if s.Due != nil {</span>
<span class="hidden"><a id="L1118" href="#L1118">  1118</a>  </span><span>				return fmt.Errorf(errMultiple, cTodo, cDue)</span>
<span class="hidden"><a id="L1119" href="#L1119">  1119</a>  </span><span>			}</span>
<span class="hidden"><a id="L1120" href="#L1120">  1120</a>  </span>
<span class="hidden"><a id="L1121" href="#L1121">  1121</a>  </span><span>			s.Due = new(PropDue)</span>
<span class="hidden"><a id="L1122" href="#L1122">  1122</a>  </span>
<span class="hidden"><a id="L1123" href="#L1123">  1123</a>  </span><span>			if err := s.Due.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1124" href="#L1124">  1124</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTodo, cDue, err)</span>
<span class="hidden"><a id="L1125" href="#L1125">  1125</a>  </span><span>			}</span>
<span class="hidden"><a id="L1126" href="#L1126">  1126</a>  </span><span>		case &#34;DURATION&#34;:</span>
<span class="hidden"><a id="L1127" href="#L1127">  1127</a>  </span><span>			if s.Duration != nil {</span>
<span class="hidden"><a id="L1128" href="#L1128">  1128</a>  </span><span>				return fmt.Errorf(errMultiple, cTodo, cDuration)</span>
<span class="hidden"><a id="L1129" href="#L1129">  1129</a>  </span><span>			}</span>
<span class="hidden"><a id="L1130" href="#L1130">  1130</a>  </span>
<span class="hidden"><a id="L1131" href="#L1131">  1131</a>  </span><span>			s.Duration = new(PropDuration)</span>
<span class="hidden"><a id="L1132" href="#L1132">  1132</a>  </span>
<span class="hidden"><a id="L1133" href="#L1133">  1133</a>  </span><span>			if err := s.Duration.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1134" href="#L1134">  1134</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTodo, cDuration, err)</span>
<span class="hidden"><a id="L1135" href="#L1135">  1135</a>  </span><span>			}</span>
<span class="hidden"><a id="L1136" href="#L1136">  1136</a>  </span><span>		case &#34;ATTACH&#34;:</span>
<span class="hidden"><a id="L1137" href="#L1137">  1137</a>  </span><span>			var e PropAttachment</span>
<span class="hidden"><a id="L1138" href="#L1138">  1138</a>  </span>
<span class="hidden"><a id="L1139" href="#L1139">  1139</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1140" href="#L1140">  1140</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTodo, cAttachment, err)</span>
<span class="hidden"><a id="L1141" href="#L1141">  1141</a>  </span><span>			}</span>
<span class="hidden"><a id="L1142" href="#L1142">  1142</a>  </span>
<span class="hidden"><a id="L1143" href="#L1143">  1143</a>  </span><span>			s.Attachment = append(s.Attachment, e)</span>
<span class="hidden"><a id="L1144" href="#L1144">  1144</a>  </span><span>		case &#34;ATTENDEE&#34;:</span>
<span class="hidden"><a id="L1145" href="#L1145">  1145</a>  </span><span>			var e PropAttendee</span>
<span class="hidden"><a id="L1146" href="#L1146">  1146</a>  </span>
<span class="hidden"><a id="L1147" href="#L1147">  1147</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1148" href="#L1148">  1148</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTodo, cAttendee, err)</span>
<span class="hidden"><a id="L1149" href="#L1149">  1149</a>  </span><span>			}</span>
<span class="hidden"><a id="L1150" href="#L1150">  1150</a>  </span>
<span class="hidden"><a id="L1151" href="#L1151">  1151</a>  </span><span>			s.Attendee = append(s.Attendee, e)</span>
<span class="hidden"><a id="L1152" href="#L1152">  1152</a>  </span><span>		case &#34;CATEGORIES&#34;:</span>
<span class="hidden"><a id="L1153" href="#L1153">  1153</a>  </span><span>			var e PropCategories</span>
<span class="hidden"><a id="L1154" href="#L1154">  1154</a>  </span>
<span class="hidden"><a id="L1155" href="#L1155">  1155</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1156" href="#L1156">  1156</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTodo, cCategories, err)</span>
<span class="hidden"><a id="L1157" href="#L1157">  1157</a>  </span><span>			}</span>
<span class="hidden"><a id="L1158" href="#L1158">  1158</a>  </span>
<span class="hidden"><a id="L1159" href="#L1159">  1159</a>  </span><span>			s.Categories = append(s.Categories, e)</span>
<span class="hidden"><a id="L1160" href="#L1160">  1160</a>  </span><span>		case &#34;COMMENT&#34;:</span>
<span class="hidden"><a id="L1161" href="#L1161">  1161</a>  </span><span>			var e PropComment</span>
<span class="hidden"><a id="L1162" href="#L1162">  1162</a>  </span>
<span class="hidden"><a id="L1163" href="#L1163">  1163</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1164" href="#L1164">  1164</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTodo, cComment, err)</span>
<span class="hidden"><a id="L1165" href="#L1165">  1165</a>  </span><span>			}</span>
<span class="hidden"><a id="L1166" href="#L1166">  1166</a>  </span>
<span class="hidden"><a id="L1167" href="#L1167">  1167</a>  </span><span>			s.Comment = append(s.Comment, e)</span>
<span class="hidden"><a id="L1168" href="#L1168">  1168</a>  </span><span>		case &#34;CONTACT&#34;:</span>
<span class="hidden"><a id="L1169" href="#L1169">  1169</a>  </span><span>			var e PropContact</span>
<span class="hidden"><a id="L1170" href="#L1170">  1170</a>  </span>
<span class="hidden"><a id="L1171" href="#L1171">  1171</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1172" href="#L1172">  1172</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTodo, cContact, err)</span>
<span class="hidden"><a id="L1173" href="#L1173">  1173</a>  </span><span>			}</span>
<span class="hidden"><a id="L1174" href="#L1174">  1174</a>  </span>
<span class="hidden"><a id="L1175" href="#L1175">  1175</a>  </span><span>			s.Contact = append(s.Contact, e)</span>
<span class="hidden"><a id="L1176" href="#L1176">  1176</a>  </span><span>		case &#34;EXDATE&#34;:</span>
<span class="hidden"><a id="L1177" href="#L1177">  1177</a>  </span><span>			var e PropExceptionDateTime</span>
<span class="hidden"><a id="L1178" href="#L1178">  1178</a>  </span>
<span class="hidden"><a id="L1179" href="#L1179">  1179</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1180" href="#L1180">  1180</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTodo, cExceptionDateTime, err)</span>
<span class="hidden"><a id="L1181" href="#L1181">  1181</a>  </span><span>			}</span>
<span class="hidden"><a id="L1182" href="#L1182">  1182</a>  </span>
<span class="hidden"><a id="L1183" href="#L1183">  1183</a>  </span><span>			s.ExceptionDateTime = append(s.ExceptionDateTime, e)</span>
<span class="hidden"><a id="L1184" href="#L1184">  1184</a>  </span><span>		case &#34;REQUEST-STATUS&#34;:</span>
<span class="hidden"><a id="L1185" href="#L1185">  1185</a>  </span><span>			var e PropRequestStatus</span>
<span class="hidden"><a id="L1186" href="#L1186">  1186</a>  </span>
<span class="hidden"><a id="L1187" href="#L1187">  1187</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1188" href="#L1188">  1188</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTodo, cRequestStatus, err)</span>
<span class="hidden"><a id="L1189" href="#L1189">  1189</a>  </span><span>			}</span>
<span class="hidden"><a id="L1190" href="#L1190">  1190</a>  </span>
<span class="hidden"><a id="L1191" href="#L1191">  1191</a>  </span><span>			s.RequestStatus = append(s.RequestStatus, e)</span>
<span class="hidden"><a id="L1192" href="#L1192">  1192</a>  </span><span>		case &#34;RELATED-TO&#34;:</span>
<span class="hidden"><a id="L1193" href="#L1193">  1193</a>  </span><span>			var e PropRelatedTo</span>
<span class="hidden"><a id="L1194" href="#L1194">  1194</a>  </span>
<span class="hidden"><a id="L1195" href="#L1195">  1195</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1196" href="#L1196">  1196</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTodo, cRelatedTo, err)</span>
<span class="hidden"><a id="L1197" href="#L1197">  1197</a>  </span><span>			}</span>
<span class="hidden"><a id="L1198" href="#L1198">  1198</a>  </span>
<span class="hidden"><a id="L1199" href="#L1199">  1199</a>  </span><span>			s.RelatedTo = append(s.RelatedTo, e)</span>
<span class="hidden"><a id="L1200" href="#L1200">  1200</a>  </span><span>		case &#34;RESOURCES&#34;:</span>
<span class="hidden"><a id="L1201" href="#L1201">  1201</a>  </span><span>			var e PropResources</span>
<span class="hidden"><a id="L1202" href="#L1202">  1202</a>  </span>
<span class="hidden"><a id="L1203" href="#L1203">  1203</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1204" href="#L1204">  1204</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTodo, cResources, err)</span>
<span class="hidden"><a id="L1205" href="#L1205">  1205</a>  </span><span>			}</span>
<span class="hidden"><a id="L1206" href="#L1206">  1206</a>  </span>
<span class="hidden"><a id="L1207" href="#L1207">  1207</a>  </span><span>			s.Resources = append(s.Resources, e)</span>
<span class="hidden"><a id="L1208" href="#L1208">  1208</a>  </span><span>		case &#34;RDATE&#34;:</span>
<span class="hidden"><a id="L1209" href="#L1209">  1209</a>  </span><span>			var e PropRecurrenceDateTimes</span>
<span class="hidden"><a id="L1210" href="#L1210">  1210</a>  </span>
<span class="hidden"><a id="L1211" href="#L1211">  1211</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1212" href="#L1212">  1212</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTodo, cRecurrenceDateTimes, err)</span>
<span class="hidden"><a id="L1213" href="#L1213">  1213</a>  </span><span>			}</span>
<span class="hidden"><a id="L1214" href="#L1214">  1214</a>  </span>
<span class="hidden"><a id="L1215" href="#L1215">  1215</a>  </span><span>			s.RecurrenceDateTimes = append(s.RecurrenceDateTimes, e)</span>
<span class="hidden"><a id="L1216" href="#L1216">  1216</a>  </span><span>		case &#34;END&#34;:</span>
<span class="hidden"><a id="L1217" href="#L1217">  1217</a>  </span><span>			if value != &#34;VTODO&#34; {</span>
<span class="hidden"><a id="L1218" href="#L1218">  1218</a>  </span><span>				return fmt.Errorf(errDecodingType, cTodo, ErrInvalidEnd)</span>
<span class="hidden"><a id="L1219" href="#L1219">  1219</a>  </span><span>			}</span>
<span class="hidden"><a id="L1220" href="#L1220">  1220</a>  </span>
<span class="hidden"><a id="L1221" href="#L1221">  1221</a>  </span><span>			break Loop</span>
<span class="hidden"><a id="L1222" href="#L1222">  1222</a>  </span><span>		}</span>
<span class="hidden"><a id="L1223" href="#L1223">  1223</a>  </span><span>	}</span>
<span class="hidden"><a id="L1224" href="#L1224">  1224</a>  </span>
<span class="hidden"><a id="L1225" href="#L1225">  1225</a>  </span><span>	if !requiredDateTimeStamp || !requiredUID {</span>
<span class="hidden"><a id="L1226" href="#L1226">  1226</a>  </span><span>		return fmt.Errorf(errDecodingType, cTodo, ErrMissingRequired)</span>
<span class="hidden"><a id="L1227" href="#L1227">  1227</a>  </span><span>	}</span>
<span class="hidden"><a id="L1228" href="#L1228">  1228</a>  </span>
<span class="hidden"><a id="L1229" href="#L1229">  1229</a>  </span><span>	if s.Duration != nil &amp;&amp; (s.DateTimeStart == nil) {</span>
<span class="hidden"><a id="L1230" href="#L1230">  1230</a>  </span><span>		return fmt.Errorf(errDecodingType, cTodo, ErrRequirementNotMet)</span>
<span class="hidden"><a id="L1231" href="#L1231">  1231</a>  </span><span>	}</span>
<span class="hidden"><a id="L1232" href="#L1232">  1232</a>  </span>
<span class="hidden"><a id="L1233" href="#L1233">  1233</a>  </span><span>	if s.Due != nil &amp;&amp; s.Duration != nil {</span>
<span class="hidden"><a id="L1234" href="#L1234">  1234</a>  </span><span>		return fmt.Errorf(errDecodingType, cTodo, ErrRequirementNotMet)</span>
<span class="hidden"><a id="L1235" href="#L1235">  1235</a>  </span><span>	}</span>
<span class="hidden"><a id="L1236" href="#L1236">  1236</a>  </span>
<span class="hidden"><a id="L1237" href="#L1237">  1237</a>  </span><span>	return nil</span>
<span class="hidden"><a id="L1238" href="#L1238">  1238</a>  </span><span>}</span>
<span class="hidden"><a id="L1239" href="#L1239">  1239</a>  </span>
<span class="hidden"><a id="L1240" href="#L1240">  1240</a>  </span><span>func (s *Todo) encode(w writer) {</span>
<span class="hidden"><a id="L1241" href="#L1241">  1241</a>  </span><span>	w.WriteString(&#34;BEGIN:VTODO\r\n&#34;)</span>
<span class="hidden"><a id="L1242" href="#L1242">  1242</a>  </span><span>	s.DateTimeStamp.encode(w)</span>
<span class="hidden"><a id="L1243" href="#L1243">  1243</a>  </span><span>	s.UID.encode(w)</span>
<span class="hidden"><a id="L1244" href="#L1244">  1244</a>  </span>
<span class="hidden"><a id="L1245" href="#L1245">  1245</a>  </span><span>	if s.Class != nil {</span>
<span class="hidden"><a id="L1246" href="#L1246">  1246</a>  </span><span>		s.Class.encode(w)</span>
<span class="hidden"><a id="L1247" href="#L1247">  1247</a>  </span><span>	}</span>
<span class="hidden"><a id="L1248" href="#L1248">  1248</a>  </span>
<span class="hidden"><a id="L1249" href="#L1249">  1249</a>  </span><span>	if s.Completed != nil {</span>
<span class="hidden"><a id="L1250" href="#L1250">  1250</a>  </span><span>		s.Completed.encode(w)</span>
<span class="hidden"><a id="L1251" href="#L1251">  1251</a>  </span><span>	}</span>
<span class="hidden"><a id="L1252" href="#L1252">  1252</a>  </span>
<span class="hidden"><a id="L1253" href="#L1253">  1253</a>  </span><span>	if s.Created != nil {</span>
<span class="hidden"><a id="L1254" href="#L1254">  1254</a>  </span><span>		s.Created.encode(w)</span>
<span class="hidden"><a id="L1255" href="#L1255">  1255</a>  </span><span>	}</span>
<span class="hidden"><a id="L1256" href="#L1256">  1256</a>  </span>
<span class="hidden"><a id="L1257" href="#L1257">  1257</a>  </span><span>	if s.Description != nil {</span>
<span class="hidden"><a id="L1258" href="#L1258">  1258</a>  </span><span>		s.Description.encode(w)</span>
<span class="hidden"><a id="L1259" href="#L1259">  1259</a>  </span><span>	}</span>
<span class="hidden"><a id="L1260" href="#L1260">  1260</a>  </span>
<span class="hidden"><a id="L1261" href="#L1261">  1261</a>  </span><span>	if s.DateTimeStart != nil {</span>
<span class="hidden"><a id="L1262" href="#L1262">  1262</a>  </span><span>		s.DateTimeStart.encode(w)</span>
<span class="hidden"><a id="L1263" href="#L1263">  1263</a>  </span><span>	}</span>
<span class="hidden"><a id="L1264" href="#L1264">  1264</a>  </span>
<span class="hidden"><a id="L1265" href="#L1265">  1265</a>  </span><span>	if s.Geo != nil {</span>
<span class="hidden"><a id="L1266" href="#L1266">  1266</a>  </span><span>		s.Geo.encode(w)</span>
<span class="hidden"><a id="L1267" href="#L1267">  1267</a>  </span><span>	}</span>
<span class="hidden"><a id="L1268" href="#L1268">  1268</a>  </span>
<span class="hidden"><a id="L1269" href="#L1269">  1269</a>  </span><span>	if s.LastModified != nil {</span>
<span class="hidden"><a id="L1270" href="#L1270">  1270</a>  </span><span>		s.LastModified.encode(w)</span>
<span class="hidden"><a id="L1271" href="#L1271">  1271</a>  </span><span>	}</span>
<span class="hidden"><a id="L1272" href="#L1272">  1272</a>  </span>
<span class="hidden"><a id="L1273" href="#L1273">  1273</a>  </span><span>	if s.Location != nil {</span>
<span class="hidden"><a id="L1274" href="#L1274">  1274</a>  </span><span>		s.Location.encode(w)</span>
<span class="hidden"><a id="L1275" href="#L1275">  1275</a>  </span><span>	}</span>
<span class="hidden"><a id="L1276" href="#L1276">  1276</a>  </span>
<span class="hidden"><a id="L1277" href="#L1277">  1277</a>  </span><span>	if s.Organizer != nil {</span>
<span class="hidden"><a id="L1278" href="#L1278">  1278</a>  </span><span>		s.Organizer.encode(w)</span>
<span class="hidden"><a id="L1279" href="#L1279">  1279</a>  </span><span>	}</span>
<span class="hidden"><a id="L1280" href="#L1280">  1280</a>  </span>
<span class="hidden"><a id="L1281" href="#L1281">  1281</a>  </span><span>	if s.PercentComplete != nil {</span>
<span class="hidden"><a id="L1282" href="#L1282">  1282</a>  </span><span>		s.PercentComplete.encode(w)</span>
<span class="hidden"><a id="L1283" href="#L1283">  1283</a>  </span><span>	}</span>
<span class="hidden"><a id="L1284" href="#L1284">  1284</a>  </span>
<span class="hidden"><a id="L1285" href="#L1285">  1285</a>  </span><span>	if s.Priority != nil {</span>
<span class="hidden"><a id="L1286" href="#L1286">  1286</a>  </span><span>		s.Priority.encode(w)</span>
<span class="hidden"><a id="L1287" href="#L1287">  1287</a>  </span><span>	}</span>
<span class="hidden"><a id="L1288" href="#L1288">  1288</a>  </span>
<span class="hidden"><a id="L1289" href="#L1289">  1289</a>  </span><span>	if s.RecurrenceID != nil {</span>
<span class="hidden"><a id="L1290" href="#L1290">  1290</a>  </span><span>		s.RecurrenceID.encode(w)</span>
<span class="hidden"><a id="L1291" href="#L1291">  1291</a>  </span><span>	}</span>
<span class="hidden"><a id="L1292" href="#L1292">  1292</a>  </span>
<span class="hidden"><a id="L1293" href="#L1293">  1293</a>  </span><span>	if s.Sequence != nil {</span>
<span class="hidden"><a id="L1294" href="#L1294">  1294</a>  </span><span>		s.Sequence.encode(w)</span>
<span class="hidden"><a id="L1295" href="#L1295">  1295</a>  </span><span>	}</span>
<span class="hidden"><a id="L1296" href="#L1296">  1296</a>  </span>
<span class="hidden"><a id="L1297" href="#L1297">  1297</a>  </span><span>	if s.Status != nil {</span>
<span class="hidden"><a id="L1298" href="#L1298">  1298</a>  </span><span>		s.Status.encode(w)</span>
<span class="hidden"><a id="L1299" href="#L1299">  1299</a>  </span><span>	}</span>
<span class="hidden"><a id="L1300" href="#L1300">  1300</a>  </span>
<span class="hidden"><a id="L1301" href="#L1301">  1301</a>  </span><span>	if s.Summary != nil {</span>
<span class="hidden"><a id="L1302" href="#L1302">  1302</a>  </span><span>		s.Summary.encode(w)</span>
<span class="hidden"><a id="L1303" href="#L1303">  1303</a>  </span><span>	}</span>
<span class="hidden"><a id="L1304" href="#L1304">  1304</a>  </span>
<span class="hidden"><a id="L1305" href="#L1305">  1305</a>  </span><span>	if s.URL != nil {</span>
<span class="hidden"><a id="L1306" href="#L1306">  1306</a>  </span><span>		s.URL.encode(w)</span>
<span class="hidden"><a id="L1307" href="#L1307">  1307</a>  </span><span>	}</span>
<span class="hidden"><a id="L1308" href="#L1308">  1308</a>  </span>
<span class="hidden"><a id="L1309" href="#L1309">  1309</a>  </span><span>	if s.Due != nil {</span>
<span class="hidden"><a id="L1310" href="#L1310">  1310</a>  </span><span>		s.Due.encode(w)</span>
<span class="hidden"><a id="L1311" href="#L1311">  1311</a>  </span><span>	}</span>
<span class="hidden"><a id="L1312" href="#L1312">  1312</a>  </span>
<span class="hidden"><a id="L1313" href="#L1313">  1313</a>  </span><span>	if s.Duration != nil {</span>
<span class="hidden"><a id="L1314" href="#L1314">  1314</a>  </span><span>		s.Duration.encode(w)</span>
<span class="hidden"><a id="L1315" href="#L1315">  1315</a>  </span><span>	}</span>
<span class="hidden"><a id="L1316" href="#L1316">  1316</a>  </span>
<span class="hidden"><a id="L1317" href="#L1317">  1317</a>  </span><span>	for n := range s.Attachment {</span>
<span class="hidden"><a id="L1318" href="#L1318">  1318</a>  </span><span>		s.Attachment[n].encode(w)</span>
<span class="hidden"><a id="L1319" href="#L1319">  1319</a>  </span><span>	}</span>
<span class="hidden"><a id="L1320" href="#L1320">  1320</a>  </span>
<span class="hidden"><a id="L1321" href="#L1321">  1321</a>  </span><span>	for n := range s.Attendee {</span>
<span class="hidden"><a id="L1322" href="#L1322">  1322</a>  </span><span>		s.Attendee[n].encode(w)</span>
<span class="hidden"><a id="L1323" href="#L1323">  1323</a>  </span><span>	}</span>
<span class="hidden"><a id="L1324" href="#L1324">  1324</a>  </span>
<span class="hidden"><a id="L1325" href="#L1325">  1325</a>  </span><span>	for n := range s.Categories {</span>
<span class="hidden"><a id="L1326" href="#L1326">  1326</a>  </span><span>		s.Categories[n].encode(w)</span>
<span class="hidden"><a id="L1327" href="#L1327">  1327</a>  </span><span>	}</span>
<span class="hidden"><a id="L1328" href="#L1328">  1328</a>  </span>
<span class="hidden"><a id="L1329" href="#L1329">  1329</a>  </span><span>	for n := range s.Comment {</span>
<span class="hidden"><a id="L1330" href="#L1330">  1330</a>  </span><span>		s.Comment[n].encode(w)</span>
<span class="hidden"><a id="L1331" href="#L1331">  1331</a>  </span><span>	}</span>
<span class="hidden"><a id="L1332" href="#L1332">  1332</a>  </span>
<span class="hidden"><a id="L1333" href="#L1333">  1333</a>  </span><span>	for n := range s.Contact {</span>
<span class="hidden"><a id="L1334" href="#L1334">  1334</a>  </span><span>		s.Contact[n].encode(w)</span>
<span class="hidden"><a id="L1335" href="#L1335">  1335</a>  </span><span>	}</span>
<span class="hidden"><a id="L1336" href="#L1336">  1336</a>  </span>
<span class="hidden"><a id="L1337" href="#L1337">  1337</a>  </span><span>	for n := range s.ExceptionDateTime {</span>
<span class="hidden"><a id="L1338" href="#L1338">  1338</a>  </span><span>		s.ExceptionDateTime[n].encode(w)</span>
<span class="hidden"><a id="L1339" href="#L1339">  1339</a>  </span><span>	}</span>
<span class="hidden"><a id="L1340" href="#L1340">  1340</a>  </span>
<span class="hidden"><a id="L1341" href="#L1341">  1341</a>  </span><span>	for n := range s.RequestStatus {</span>
<span class="hidden"><a id="L1342" href="#L1342">  1342</a>  </span><span>		s.RequestStatus[n].encode(w)</span>
<span class="hidden"><a id="L1343" href="#L1343">  1343</a>  </span><span>	}</span>
<span class="hidden"><a id="L1344" href="#L1344">  1344</a>  </span>
<span class="hidden"><a id="L1345" href="#L1345">  1345</a>  </span><span>	for n := range s.RelatedTo {</span>
<span class="hidden"><a id="L1346" href="#L1346">  1346</a>  </span><span>		s.RelatedTo[n].encode(w)</span>
<span class="hidden"><a id="L1347" href="#L1347">  1347</a>  </span><span>	}</span>
<span class="hidden"><a id="L1348" href="#L1348">  1348</a>  </span>
<span class="hidden"><a id="L1349" href="#L1349">  1349</a>  </span><span>	for n := range s.Resources {</span>
<span class="hidden"><a id="L1350" href="#L1350">  1350</a>  </span><span>		s.Resources[n].encode(w)</span>
<span class="hidden"><a id="L1351" href="#L1351">  1351</a>  </span><span>	}</span>
<span class="hidden"><a id="L1352" href="#L1352">  1352</a>  </span>
<span class="hidden"><a id="L1353" href="#L1353">  1353</a>  </span><span>	for n := range s.RecurrenceDateTimes {</span>
<span class="hidden"><a id="L1354" href="#L1354">  1354</a>  </span><span>		s.RecurrenceDateTimes[n].encode(w)</span>
<span class="hidden"><a id="L1355" href="#L1355">  1355</a>  </span><span>	}</span>
<span class="hidden"><a id="L1356" href="#L1356">  1356</a>  </span>
<span class="hidden"><a id="L1357" href="#L1357">  1357</a>  </span><span>	for n := range s.Alarm {</span>
<span class="hidden"><a id="L1358" href="#L1358">  1358</a>  </span><span>		s.Alarm[n].encode(w)</span>
<span class="hidden"><a id="L1359" href="#L1359">  1359</a>  </span><span>	}</span>
<span class="hidden"><a id="L1360" href="#L1360">  1360</a>  </span>
<span class="hidden"><a id="L1361" href="#L1361">  1361</a>  </span><span>	w.WriteString(&#34;END:VTODO\r\n&#34;)</span>
<span class="hidden"><a id="L1362" href="#L1362">  1362</a>  </span><span>}</span>
<span class="hidden"><a id="L1363" href="#L1363">  1363</a>  </span>
<span class="hidden"><a id="L1364" href="#L1364">  1364</a>  </span><span>func (s *Todo) valid() error {</span>
<span class="hidden"><a id="L1365" href="#L1365">  1365</a>  </span><span>	if err := s.DateTimeStamp.valid(); err != nil {</span>
<span class="hidden"><a id="L1366" href="#L1366">  1366</a>  </span><span>		return fmt.Errorf(errValidatingProp, cTodo, cDateTimeStamp, err)</span>
<span class="hidden"><a id="L1367" href="#L1367">  1367</a>  </span><span>	}</span>
<span class="hidden"><a id="L1368" href="#L1368">  1368</a>  </span>
<span class="hidden"><a id="L1369" href="#L1369">  1369</a>  </span><span>	if err := s.UID.valid(); err != nil {</span>
<span class="hidden"><a id="L1370" href="#L1370">  1370</a>  </span><span>		return fmt.Errorf(errValidatingProp, cTodo, cUID, err)</span>
<span class="hidden"><a id="L1371" href="#L1371">  1371</a>  </span><span>	}</span>
<span class="hidden"><a id="L1372" href="#L1372">  1372</a>  </span>
<span class="hidden"><a id="L1373" href="#L1373">  1373</a>  </span><span>	if s.Class != nil {</span>
<span class="hidden"><a id="L1374" href="#L1374">  1374</a>  </span><span>		if err := s.Class.valid(); err != nil {</span>
<span class="hidden"><a id="L1375" href="#L1375">  1375</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTodo, cClass, err)</span>
<span class="hidden"><a id="L1376" href="#L1376">  1376</a>  </span><span>		}</span>
<span class="hidden"><a id="L1377" href="#L1377">  1377</a>  </span><span>	}</span>
<span class="hidden"><a id="L1378" href="#L1378">  1378</a>  </span>
<span class="hidden"><a id="L1379" href="#L1379">  1379</a>  </span><span>	if s.Completed != nil {</span>
<span class="hidden"><a id="L1380" href="#L1380">  1380</a>  </span><span>		if err := s.Completed.valid(); err != nil {</span>
<span class="hidden"><a id="L1381" href="#L1381">  1381</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTodo, cCompleted, err)</span>
<span class="hidden"><a id="L1382" href="#L1382">  1382</a>  </span><span>		}</span>
<span class="hidden"><a id="L1383" href="#L1383">  1383</a>  </span><span>	}</span>
<span class="hidden"><a id="L1384" href="#L1384">  1384</a>  </span>
<span class="hidden"><a id="L1385" href="#L1385">  1385</a>  </span><span>	if s.Created != nil {</span>
<span class="hidden"><a id="L1386" href="#L1386">  1386</a>  </span><span>		if err := s.Created.valid(); err != nil {</span>
<span class="hidden"><a id="L1387" href="#L1387">  1387</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTodo, cCreated, err)</span>
<span class="hidden"><a id="L1388" href="#L1388">  1388</a>  </span><span>		}</span>
<span class="hidden"><a id="L1389" href="#L1389">  1389</a>  </span><span>	}</span>
<span class="hidden"><a id="L1390" href="#L1390">  1390</a>  </span>
<span class="hidden"><a id="L1391" href="#L1391">  1391</a>  </span><span>	if s.Description != nil {</span>
<span class="hidden"><a id="L1392" href="#L1392">  1392</a>  </span><span>		if err := s.Description.valid(); err != nil {</span>
<span class="hidden"><a id="L1393" href="#L1393">  1393</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTodo, cDescription, err)</span>
<span class="hidden"><a id="L1394" href="#L1394">  1394</a>  </span><span>		}</span>
<span class="hidden"><a id="L1395" href="#L1395">  1395</a>  </span><span>	}</span>
<span class="hidden"><a id="L1396" href="#L1396">  1396</a>  </span>
<span class="hidden"><a id="L1397" href="#L1397">  1397</a>  </span><span>	if s.DateTimeStart != nil {</span>
<span class="hidden"><a id="L1398" href="#L1398">  1398</a>  </span><span>		if err := s.DateTimeStart.valid(); err != nil {</span>
<span class="hidden"><a id="L1399" href="#L1399">  1399</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTodo, cDateTimeStart, err)</span>
<span class="hidden"><a id="L1400" href="#L1400">  1400</a>  </span><span>		}</span>
<span class="hidden"><a id="L1401" href="#L1401">  1401</a>  </span><span>	}</span>
<span class="hidden"><a id="L1402" href="#L1402">  1402</a>  </span>
<span class="hidden"><a id="L1403" href="#L1403">  1403</a>  </span><span>	if s.Geo != nil {</span>
<span class="hidden"><a id="L1404" href="#L1404">  1404</a>  </span><span>		if err := s.Geo.valid(); err != nil {</span>
<span class="hidden"><a id="L1405" href="#L1405">  1405</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTodo, cGeo, err)</span>
<span class="hidden"><a id="L1406" href="#L1406">  1406</a>  </span><span>		}</span>
<span class="hidden"><a id="L1407" href="#L1407">  1407</a>  </span><span>	}</span>
<span class="hidden"><a id="L1408" href="#L1408">  1408</a>  </span>
<span class="hidden"><a id="L1409" href="#L1409">  1409</a>  </span><span>	if s.LastModified != nil {</span>
<span class="hidden"><a id="L1410" href="#L1410">  1410</a>  </span><span>		if err := s.LastModified.valid(); err != nil {</span>
<span class="hidden"><a id="L1411" href="#L1411">  1411</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTodo, cLastModified, err)</span>
<span class="hidden"><a id="L1412" href="#L1412">  1412</a>  </span><span>		}</span>
<span class="hidden"><a id="L1413" href="#L1413">  1413</a>  </span><span>	}</span>
<span class="hidden"><a id="L1414" href="#L1414">  1414</a>  </span>
<span class="hidden"><a id="L1415" href="#L1415">  1415</a>  </span><span>	if s.Location != nil {</span>
<span class="hidden"><a id="L1416" href="#L1416">  1416</a>  </span><span>		if err := s.Location.valid(); err != nil {</span>
<span class="hidden"><a id="L1417" href="#L1417">  1417</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTodo, cLocation, err)</span>
<span class="hidden"><a id="L1418" href="#L1418">  1418</a>  </span><span>		}</span>
<span class="hidden"><a id="L1419" href="#L1419">  1419</a>  </span><span>	}</span>
<span class="hidden"><a id="L1420" href="#L1420">  1420</a>  </span>
<span class="hidden"><a id="L1421" href="#L1421">  1421</a>  </span><span>	if s.Organizer != nil {</span>
<span class="hidden"><a id="L1422" href="#L1422">  1422</a>  </span><span>		if err := s.Organizer.valid(); err != nil {</span>
<span class="hidden"><a id="L1423" href="#L1423">  1423</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTodo, cOrganizer, err)</span>
<span class="hidden"><a id="L1424" href="#L1424">  1424</a>  </span><span>		}</span>
<span class="hidden"><a id="L1425" href="#L1425">  1425</a>  </span><span>	}</span>
<span class="hidden"><a id="L1426" href="#L1426">  1426</a>  </span>
<span class="hidden"><a id="L1427" href="#L1427">  1427</a>  </span><span>	if s.PercentComplete != nil {</span>
<span class="hidden"><a id="L1428" href="#L1428">  1428</a>  </span><span>		if err := s.PercentComplete.valid(); err != nil {</span>
<span class="hidden"><a id="L1429" href="#L1429">  1429</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTodo, cPercentComplete, err)</span>
<span class="hidden"><a id="L1430" href="#L1430">  1430</a>  </span><span>		}</span>
<span class="hidden"><a id="L1431" href="#L1431">  1431</a>  </span><span>	}</span>
<span class="hidden"><a id="L1432" href="#L1432">  1432</a>  </span>
<span class="hidden"><a id="L1433" href="#L1433">  1433</a>  </span><span>	if s.Priority != nil {</span>
<span class="hidden"><a id="L1434" href="#L1434">  1434</a>  </span><span>		if err := s.Priority.valid(); err != nil {</span>
<span class="hidden"><a id="L1435" href="#L1435">  1435</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTodo, cPriority, err)</span>
<span class="hidden"><a id="L1436" href="#L1436">  1436</a>  </span><span>		}</span>
<span class="hidden"><a id="L1437" href="#L1437">  1437</a>  </span><span>	}</span>
<span class="hidden"><a id="L1438" href="#L1438">  1438</a>  </span>
<span class="hidden"><a id="L1439" href="#L1439">  1439</a>  </span><span>	if s.RecurrenceID != nil {</span>
<span class="hidden"><a id="L1440" href="#L1440">  1440</a>  </span><span>		if err := s.RecurrenceID.valid(); err != nil {</span>
<span class="hidden"><a id="L1441" href="#L1441">  1441</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTodo, cRecurrenceID, err)</span>
<span class="hidden"><a id="L1442" href="#L1442">  1442</a>  </span><span>		}</span>
<span class="hidden"><a id="L1443" href="#L1443">  1443</a>  </span><span>	}</span>
<span class="hidden"><a id="L1444" href="#L1444">  1444</a>  </span>
<span class="hidden"><a id="L1445" href="#L1445">  1445</a>  </span><span>	if s.Sequence != nil {</span>
<span class="hidden"><a id="L1446" href="#L1446">  1446</a>  </span><span>		if err := s.Sequence.valid(); err != nil {</span>
<span class="hidden"><a id="L1447" href="#L1447">  1447</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTodo, cSequence, err)</span>
<span class="hidden"><a id="L1448" href="#L1448">  1448</a>  </span><span>		}</span>
<span class="hidden"><a id="L1449" href="#L1449">  1449</a>  </span><span>	}</span>
<span class="hidden"><a id="L1450" href="#L1450">  1450</a>  </span>
<span class="hidden"><a id="L1451" href="#L1451">  1451</a>  </span><span>	if s.Status != nil {</span>
<span class="hidden"><a id="L1452" href="#L1452">  1452</a>  </span><span>		if err := s.Status.valid(); err != nil {</span>
<span class="hidden"><a id="L1453" href="#L1453">  1453</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTodo, cStatus, err)</span>
<span class="hidden"><a id="L1454" href="#L1454">  1454</a>  </span><span>		}</span>
<span class="hidden"><a id="L1455" href="#L1455">  1455</a>  </span><span>	}</span>
<span class="hidden"><a id="L1456" href="#L1456">  1456</a>  </span>
<span class="hidden"><a id="L1457" href="#L1457">  1457</a>  </span><span>	if s.Summary != nil {</span>
<span class="hidden"><a id="L1458" href="#L1458">  1458</a>  </span><span>		if err := s.Summary.valid(); err != nil {</span>
<span class="hidden"><a id="L1459" href="#L1459">  1459</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTodo, cSummary, err)</span>
<span class="hidden"><a id="L1460" href="#L1460">  1460</a>  </span><span>		}</span>
<span class="hidden"><a id="L1461" href="#L1461">  1461</a>  </span><span>	}</span>
<span class="hidden"><a id="L1462" href="#L1462">  1462</a>  </span>
<span class="hidden"><a id="L1463" href="#L1463">  1463</a>  </span><span>	if s.URL != nil {</span>
<span class="hidden"><a id="L1464" href="#L1464">  1464</a>  </span><span>		if err := s.URL.valid(); err != nil {</span>
<span class="hidden"><a id="L1465" href="#L1465">  1465</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTodo, cURL, err)</span>
<span class="hidden"><a id="L1466" href="#L1466">  1466</a>  </span><span>		}</span>
<span class="hidden"><a id="L1467" href="#L1467">  1467</a>  </span><span>	}</span>
<span class="hidden"><a id="L1468" href="#L1468">  1468</a>  </span>
<span class="hidden"><a id="L1469" href="#L1469">  1469</a>  </span><span>	if s.Due != nil {</span>
<span class="hidden"><a id="L1470" href="#L1470">  1470</a>  </span><span>		if err := s.Due.valid(); err != nil {</span>
<span class="hidden"><a id="L1471" href="#L1471">  1471</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTodo, cDue, err)</span>
<span class="hidden"><a id="L1472" href="#L1472">  1472</a>  </span><span>		}</span>
<span class="hidden"><a id="L1473" href="#L1473">  1473</a>  </span><span>	}</span>
<span class="hidden"><a id="L1474" href="#L1474">  1474</a>  </span>
<span class="hidden"><a id="L1475" href="#L1475">  1475</a>  </span><span>	if s.Duration != nil {</span>
<span class="hidden"><a id="L1476" href="#L1476">  1476</a>  </span><span>		if err := s.Duration.valid(); err != nil {</span>
<span class="hidden"><a id="L1477" href="#L1477">  1477</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTodo, cDuration, err)</span>
<span class="hidden"><a id="L1478" href="#L1478">  1478</a>  </span><span>		}</span>
<span class="hidden"><a id="L1479" href="#L1479">  1479</a>  </span><span>	}</span>
<span class="hidden"><a id="L1480" href="#L1480">  1480</a>  </span>
<span class="hidden"><a id="L1481" href="#L1481">  1481</a>  </span><span>	for n := range s.Attachment {</span>
<span class="hidden"><a id="L1482" href="#L1482">  1482</a>  </span><span>		if err := s.Attachment[n].valid(); err != nil {</span>
<span class="hidden"><a id="L1483" href="#L1483">  1483</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTodo, cAttachment, err)</span>
<span class="hidden"><a id="L1484" href="#L1484">  1484</a>  </span><span>		}</span>
<span class="hidden"><a id="L1485" href="#L1485">  1485</a>  </span><span>	}</span>
<span class="hidden"><a id="L1486" href="#L1486">  1486</a>  </span>
<span class="hidden"><a id="L1487" href="#L1487">  1487</a>  </span><span>	for n := range s.Attendee {</span>
<span class="hidden"><a id="L1488" href="#L1488">  1488</a>  </span><span>		if err := s.Attendee[n].valid(); err != nil {</span>
<span class="hidden"><a id="L1489" href="#L1489">  1489</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTodo, cAttendee, err)</span>
<span class="hidden"><a id="L1490" href="#L1490">  1490</a>  </span><span>		}</span>
<span class="hidden"><a id="L1491" href="#L1491">  1491</a>  </span><span>	}</span>
<span class="hidden"><a id="L1492" href="#L1492">  1492</a>  </span>
<span class="hidden"><a id="L1493" href="#L1493">  1493</a>  </span><span>	for n := range s.Categories {</span>
<span class="hidden"><a id="L1494" href="#L1494">  1494</a>  </span><span>		if err := s.Categories[n].valid(); err != nil {</span>
<span class="hidden"><a id="L1495" href="#L1495">  1495</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTodo, cCategories, err)</span>
<span class="hidden"><a id="L1496" href="#L1496">  1496</a>  </span><span>		}</span>
<span class="hidden"><a id="L1497" href="#L1497">  1497</a>  </span><span>	}</span>
<span class="hidden"><a id="L1498" href="#L1498">  1498</a>  </span>
<span class="hidden"><a id="L1499" href="#L1499">  1499</a>  </span><span>	for n := range s.Comment {</span>
<span class="hidden"><a id="L1500" href="#L1500">  1500</a>  </span><span>		if err := s.Comment[n].valid(); err != nil {</span>
<span class="hidden"><a id="L1501" href="#L1501">  1501</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTodo, cComment, err)</span>
<span class="hidden"><a id="L1502" href="#L1502">  1502</a>  </span><span>		}</span>
<span class="hidden"><a id="L1503" href="#L1503">  1503</a>  </span><span>	}</span>
<span class="hidden"><a id="L1504" href="#L1504">  1504</a>  </span>
<span class="hidden"><a id="L1505" href="#L1505">  1505</a>  </span><span>	for n := range s.Contact {</span>
<span class="hidden"><a id="L1506" href="#L1506">  1506</a>  </span><span>		if err := s.Contact[n].valid(); err != nil {</span>
<span class="hidden"><a id="L1507" href="#L1507">  1507</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTodo, cContact, err)</span>
<span class="hidden"><a id="L1508" href="#L1508">  1508</a>  </span><span>		}</span>
<span class="hidden"><a id="L1509" href="#L1509">  1509</a>  </span><span>	}</span>
<span class="hidden"><a id="L1510" href="#L1510">  1510</a>  </span>
<span class="hidden"><a id="L1511" href="#L1511">  1511</a>  </span><span>	for n := range s.ExceptionDateTime {</span>
<span class="hidden"><a id="L1512" href="#L1512">  1512</a>  </span><span>		if err := s.ExceptionDateTime[n].valid(); err != nil {</span>
<span class="hidden"><a id="L1513" href="#L1513">  1513</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTodo, cExceptionDateTime, err)</span>
<span class="hidden"><a id="L1514" href="#L1514">  1514</a>  </span><span>		}</span>
<span class="hidden"><a id="L1515" href="#L1515">  1515</a>  </span><span>	}</span>
<span class="hidden"><a id="L1516" href="#L1516">  1516</a>  </span>
<span class="hidden"><a id="L1517" href="#L1517">  1517</a>  </span><span>	for n := range s.RequestStatus {</span>
<span class="hidden"><a id="L1518" href="#L1518">  1518</a>  </span><span>		if err := s.RequestStatus[n].valid(); err != nil {</span>
<span class="hidden"><a id="L1519" href="#L1519">  1519</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTodo, cRequestStatus, err)</span>
<span class="hidden"><a id="L1520" href="#L1520">  1520</a>  </span><span>		}</span>
<span class="hidden"><a id="L1521" href="#L1521">  1521</a>  </span><span>	}</span>
<span class="hidden"><a id="L1522" href="#L1522">  1522</a>  </span>
<span class="hidden"><a id="L1523" href="#L1523">  1523</a>  </span><span>	for n := range s.RelatedTo {</span>
<span class="hidden"><a id="L1524" href="#L1524">  1524</a>  </span><span>		if err := s.RelatedTo[n].valid(); err != nil {</span>
<span class="hidden"><a id="L1525" href="#L1525">  1525</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTodo, cRelatedTo, err)</span>
<span class="hidden"><a id="L1526" href="#L1526">  1526</a>  </span><span>		}</span>
<span class="hidden"><a id="L1527" href="#L1527">  1527</a>  </span><span>	}</span>
<span class="hidden"><a id="L1528" href="#L1528">  1528</a>  </span>
<span class="hidden"><a id="L1529" href="#L1529">  1529</a>  </span><span>	for n := range s.Resources {</span>
<span class="hidden"><a id="L1530" href="#L1530">  1530</a>  </span><span>		if err := s.Resources[n].valid(); err != nil {</span>
<span class="hidden"><a id="L1531" href="#L1531">  1531</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTodo, cResources, err)</span>
<span class="hidden"><a id="L1532" href="#L1532">  1532</a>  </span><span>		}</span>
<span class="hidden"><a id="L1533" href="#L1533">  1533</a>  </span><span>	}</span>
<span class="hidden"><a id="L1534" href="#L1534">  1534</a>  </span>
<span class="hidden"><a id="L1535" href="#L1535">  1535</a>  </span><span>	for n := range s.RecurrenceDateTimes {</span>
<span class="hidden"><a id="L1536" href="#L1536">  1536</a>  </span><span>		if err := s.RecurrenceDateTimes[n].valid(); err != nil {</span>
<span class="hidden"><a id="L1537" href="#L1537">  1537</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTodo, cRecurrenceDateTimes, err)</span>
<span class="hidden"><a id="L1538" href="#L1538">  1538</a>  </span><span>		}</span>
<span class="hidden"><a id="L1539" href="#L1539">  1539</a>  </span><span>	}</span>
<span class="hidden"><a id="L1540" href="#L1540">  1540</a>  </span>
<span class="hidden"><a id="L1541" href="#L1541">  1541</a>  </span><span>	for n := range s.Alarm {</span>
<span class="hidden"><a id="L1542" href="#L1542">  1542</a>  </span><span>		if err := s.Alarm[n].valid(); err != nil {</span>
<span class="hidden"><a id="L1543" href="#L1543">  1543</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTodo, cAlarm, err)</span>
<span class="hidden"><a id="L1544" href="#L1544">  1544</a>  </span><span>		}</span>
<span class="hidden"><a id="L1545" href="#L1545">  1545</a>  </span><span>	}</span>
<span class="hidden"><a id="L1546" href="#L1546">  1546</a>  </span>
<span class="hidden"><a id="L1547" href="#L1547">  1547</a>  </span><span>	return nil</span>
<span class="hidden"><a id="L1548" href="#L1548">  1548</a>  </span><span>}</span>
<span class="hidden"><a id="L1549" href="#L1549">  1549</a>  </span>
<span class="hidden"><a id="L1550" href="#L1550">  1550</a>  </span><span class="text">// Journal provides a group of components that describe a journal entry.</span>
<span class="hidden"><a id="L1551" href="#L1551">  1551</a>  </span><span>type Journal struct {</span>
<span class="hidden"><a id="L1552" href="#L1552">  1552</a>  </span><span>	DateTimeStamp       PropDateTimeStamp</span>
<span class="hidden"><a id="L1553" href="#L1553">  1553</a>  </span><span>	UID                 PropUID</span>
<span class="hidden"><a id="L1554" href="#L1554">  1554</a>  </span><span>	Class               *PropClass</span>
<span class="hidden"><a id="L1555" href="#L1555">  1555</a>  </span><span>	Created             *PropCreated</span>
<span class="hidden"><a id="L1556" href="#L1556">  1556</a>  </span><span>	DateTimeStart       *PropDateTimeStart</span>
<span class="hidden"><a id="L1557" href="#L1557">  1557</a>  </span><span>	LastModified        *PropLastModified</span>
<span class="hidden"><a id="L1558" href="#L1558">  1558</a>  </span><span>	Organizer           *PropOrganizer</span>
<span class="hidden"><a id="L1559" href="#L1559">  1559</a>  </span><span>	RecurrenceID        *PropRecurrenceID</span>
<span class="hidden"><a id="L1560" href="#L1560">  1560</a>  </span><span>	Sequence            *PropSequence</span>
<span class="hidden"><a id="L1561" href="#L1561">  1561</a>  </span><span>	Status              *PropStatus</span>
<span class="hidden"><a id="L1562" href="#L1562">  1562</a>  </span><span>	Summary             *PropSummary</span>
<span class="hidden"><a id="L1563" href="#L1563">  1563</a>  </span><span>	URL                 *PropURL</span>
<span class="hidden"><a id="L1564" href="#L1564">  1564</a>  </span><span>	RecurrenceRule      *PropRecurrenceRule</span>
<span class="hidden"><a id="L1565" href="#L1565">  1565</a>  </span><span>	Attachment          []PropAttachment</span>
<span class="hidden"><a id="L1566" href="#L1566">  1566</a>  </span><span>	Attendee            []PropAttendee</span>
<span class="hidden"><a id="L1567" href="#L1567">  1567</a>  </span><span>	Categories          []PropCategories</span>
<span class="hidden"><a id="L1568" href="#L1568">  1568</a>  </span><span>	Comment             []PropComment</span>
<span class="hidden"><a id="L1569" href="#L1569">  1569</a>  </span><span>	Contact             []PropContact</span>
<span class="hidden"><a id="L1570" href="#L1570">  1570</a>  </span><span>	Description         []PropDescription</span>
<span class="hidden"><a id="L1571" href="#L1571">  1571</a>  </span><span>	ExceptionDateTime   []PropExceptionDateTime</span>
<span class="hidden"><a id="L1572" href="#L1572">  1572</a>  </span><span>	RequestStatus       []PropRequestStatus</span>
<span class="hidden"><a id="L1573" href="#L1573">  1573</a>  </span><span>	RelatedTo           []PropRelatedTo</span>
<span class="hidden"><a id="L1574" href="#L1574">  1574</a>  </span><span>	Resources           []PropResources</span>
<span class="hidden"><a id="L1575" href="#L1575">  1575</a>  </span><span>	RecurrenceDateTimes []PropRecurrenceDateTimes</span>
<span class="hidden"><a id="L1576" href="#L1576">  1576</a>  </span><span>}</span>
<span class="hidden"><a id="L1577" href="#L1577">  1577</a>  </span>
<span class="hidden"><a id="L1578" href="#L1578">  1578</a>  </span><span>func (s *Journal) decode(t tokeniser) error {</span>
<span class="hidden"><a id="L1579" href="#L1579">  1579</a>  </span><span>	var requiredDateTimeStamp, requiredUID bool</span>
<span class="hidden"><a id="L1580" href="#L1580">  1580</a>  </span>
<span class="hidden"><a id="L1581" href="#L1581">  1581</a>  </span><span>Loop:</span>
<span class="hidden"><a id="L1582" href="#L1582">  1582</a>  </span><span>	for {</span>
<span class="hidden"><a id="L1583" href="#L1583">  1583</a>  </span><span>		p, err := t.GetPhrase()</span>
<span class="hidden"><a id="L1584" href="#L1584">  1584</a>  </span><span>		if err != nil {</span>
<span class="hidden"><a id="L1585" href="#L1585">  1585</a>  </span><span>			return fmt.Errorf(errDecodingType, cJournal, err)</span>
<span class="hidden"><a id="L1586" href="#L1586">  1586</a>  </span><span>		} else if p.Type == parser.PhraseDone {</span>
<span class="hidden"><a id="L1587" href="#L1587">  1587</a>  </span><span>			return fmt.Errorf(errDecodingType, cJournal, io.ErrUnexpectedEOF)</span>
<span class="hidden"><a id="L1588" href="#L1588">  1588</a>  </span><span>		}</span>
<span class="hidden"><a id="L1589" href="#L1589">  1589</a>  </span>
<span class="hidden"><a id="L1590" href="#L1590">  1590</a>  </span><span>		params := p.Data[1 : len(p.Data)-1]</span>
<span class="hidden"><a id="L1591" href="#L1591">  1591</a>  </span><span>		value := p.Data[len(p.Data)-1].Data</span>
<span class="hidden"><a id="L1592" href="#L1592">  1592</a>  </span>
<span class="hidden"><a id="L1593" href="#L1593">  1593</a>  </span><span>		switch strings.ToUpper(p.Data[0].Data) {</span>
<span class="hidden"><a id="L1594" href="#L1594">  1594</a>  </span><span>		case &#34;BEGIN&#34;:</span>
<span class="hidden"><a id="L1595" href="#L1595">  1595</a>  </span><span>			switch n := strings.ToUpper(value); n {</span>
<span class="hidden"><a id="L1596" href="#L1596">  1596</a>  </span><span>			default:</span>
<span class="hidden"><a id="L1597" href="#L1597">  1597</a>  </span><span>				if err := decodeDummy(t, n); err != nil {</span>
<span class="hidden"><a id="L1598" href="#L1598">  1598</a>  </span><span>					return fmt.Errorf(errDecodingType, cJournal, err)</span>
<span class="hidden"><a id="L1599" href="#L1599">  1599</a>  </span><span>				}</span>
<span class="hidden"><a id="L1600" href="#L1600">  1600</a>  </span><span>			}</span>
<span class="hidden"><a id="L1601" href="#L1601">  1601</a>  </span><span>		case &#34;DTSTAMP&#34;:</span>
<span class="hidden"><a id="L1602" href="#L1602">  1602</a>  </span><span>			if requiredDateTimeStamp {</span>
<span class="hidden"><a id="L1603" href="#L1603">  1603</a>  </span><span>				return fmt.Errorf(errMultiple, cJournal, cDateTimeStamp)</span>
<span class="hidden"><a id="L1604" href="#L1604">  1604</a>  </span><span>			}</span>
<span class="hidden"><a id="L1605" href="#L1605">  1605</a>  </span>
<span class="hidden"><a id="L1606" href="#L1606">  1606</a>  </span><span>			requiredDateTimeStamp = true</span>
<span class="hidden"><a id="L1607" href="#L1607">  1607</a>  </span>
<span class="hidden"><a id="L1608" href="#L1608">  1608</a>  </span><span>			if err := s.DateTimeStamp.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1609" href="#L1609">  1609</a>  </span><span>				return fmt.Errorf(errDecodingProp, cJournal, cDateTimeStamp, err)</span>
<span class="hidden"><a id="L1610" href="#L1610">  1610</a>  </span><span>			}</span>
<span class="hidden"><a id="L1611" href="#L1611">  1611</a>  </span><span>		case &#34;UID&#34;:</span>
<span class="hidden"><a id="L1612" href="#L1612">  1612</a>  </span><span>			if requiredUID {</span>
<span class="hidden"><a id="L1613" href="#L1613">  1613</a>  </span><span>				return fmt.Errorf(errMultiple, cJournal, cUID)</span>
<span class="hidden"><a id="L1614" href="#L1614">  1614</a>  </span><span>			}</span>
<span class="hidden"><a id="L1615" href="#L1615">  1615</a>  </span>
<span class="hidden"><a id="L1616" href="#L1616">  1616</a>  </span><span>			requiredUID = true</span>
<span class="hidden"><a id="L1617" href="#L1617">  1617</a>  </span>
<span class="hidden"><a id="L1618" href="#L1618">  1618</a>  </span><span>			if err := s.UID.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1619" href="#L1619">  1619</a>  </span><span>				return fmt.Errorf(errDecodingProp, cJournal, cUID, err)</span>
<span class="hidden"><a id="L1620" href="#L1620">  1620</a>  </span><span>			}</span>
<span class="hidden"><a id="L1621" href="#L1621">  1621</a>  </span><span>		case &#34;CLASS&#34;:</span>
<span class="hidden"><a id="L1622" href="#L1622">  1622</a>  </span><span>			if s.Class != nil {</span>
<span class="hidden"><a id="L1623" href="#L1623">  1623</a>  </span><span>				return fmt.Errorf(errMultiple, cJournal, cClass)</span>
<span class="hidden"><a id="L1624" href="#L1624">  1624</a>  </span><span>			}</span>
<span class="hidden"><a id="L1625" href="#L1625">  1625</a>  </span>
<span class="hidden"><a id="L1626" href="#L1626">  1626</a>  </span><span>			s.Class = new(PropClass)</span>
<span class="hidden"><a id="L1627" href="#L1627">  1627</a>  </span>
<span class="hidden"><a id="L1628" href="#L1628">  1628</a>  </span><span>			if err := s.Class.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1629" href="#L1629">  1629</a>  </span><span>				return fmt.Errorf(errDecodingProp, cJournal, cClass, err)</span>
<span class="hidden"><a id="L1630" href="#L1630">  1630</a>  </span><span>			}</span>
<span class="hidden"><a id="L1631" href="#L1631">  1631</a>  </span><span>		case &#34;CREATED&#34;:</span>
<span class="hidden"><a id="L1632" href="#L1632">  1632</a>  </span><span>			if s.Created != nil {</span>
<span class="hidden"><a id="L1633" href="#L1633">  1633</a>  </span><span>				return fmt.Errorf(errMultiple, cJournal, cCreated)</span>
<span class="hidden"><a id="L1634" href="#L1634">  1634</a>  </span><span>			}</span>
<span class="hidden"><a id="L1635" href="#L1635">  1635</a>  </span>
<span class="hidden"><a id="L1636" href="#L1636">  1636</a>  </span><span>			s.Created = new(PropCreated)</span>
<span class="hidden"><a id="L1637" href="#L1637">  1637</a>  </span>
<span class="hidden"><a id="L1638" href="#L1638">  1638</a>  </span><span>			if err := s.Created.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1639" href="#L1639">  1639</a>  </span><span>				return fmt.Errorf(errDecodingProp, cJournal, cCreated, err)</span>
<span class="hidden"><a id="L1640" href="#L1640">  1640</a>  </span><span>			}</span>
<span class="hidden"><a id="L1641" href="#L1641">  1641</a>  </span><span>		case &#34;DTSTART&#34;:</span>
<span class="hidden"><a id="L1642" href="#L1642">  1642</a>  </span><span>			if s.DateTimeStart != nil {</span>
<span class="hidden"><a id="L1643" href="#L1643">  1643</a>  </span><span>				return fmt.Errorf(errMultiple, cJournal, cDateTimeStart)</span>
<span class="hidden"><a id="L1644" href="#L1644">  1644</a>  </span><span>			}</span>
<span class="hidden"><a id="L1645" href="#L1645">  1645</a>  </span>
<span class="hidden"><a id="L1646" href="#L1646">  1646</a>  </span><span>			s.DateTimeStart = new(PropDateTimeStart)</span>
<span class="hidden"><a id="L1647" href="#L1647">  1647</a>  </span>
<span class="hidden"><a id="L1648" href="#L1648">  1648</a>  </span><span>			if err := s.DateTimeStart.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1649" href="#L1649">  1649</a>  </span><span>				return fmt.Errorf(errDecodingProp, cJournal, cDateTimeStart, err)</span>
<span class="hidden"><a id="L1650" href="#L1650">  1650</a>  </span><span>			}</span>
<span class="hidden"><a id="L1651" href="#L1651">  1651</a>  </span><span>		case &#34;LAST-MOD&#34;:</span>
<span class="hidden"><a id="L1652" href="#L1652">  1652</a>  </span><span>			if s.LastModified != nil {</span>
<span class="hidden"><a id="L1653" href="#L1653">  1653</a>  </span><span>				return fmt.Errorf(errMultiple, cJournal, cLastModified)</span>
<span class="hidden"><a id="L1654" href="#L1654">  1654</a>  </span><span>			}</span>
<span class="hidden"><a id="L1655" href="#L1655">  1655</a>  </span>
<span class="hidden"><a id="L1656" href="#L1656">  1656</a>  </span><span>			s.LastModified = new(PropLastModified)</span>
<span class="hidden"><a id="L1657" href="#L1657">  1657</a>  </span>
<span class="hidden"><a id="L1658" href="#L1658">  1658</a>  </span><span>			if err := s.LastModified.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1659" href="#L1659">  1659</a>  </span><span>				return fmt.Errorf(errDecodingProp, cJournal, cLastModified, err)</span>
<span class="hidden"><a id="L1660" href="#L1660">  1660</a>  </span><span>			}</span>
<span class="hidden"><a id="L1661" href="#L1661">  1661</a>  </span><span>		case &#34;ORGANIZER&#34;:</span>
<span class="hidden"><a id="L1662" href="#L1662">  1662</a>  </span><span>			if s.Organizer != nil {</span>
<span class="hidden"><a id="L1663" href="#L1663">  1663</a>  </span><span>				return fmt.Errorf(errMultiple, cJournal, cOrganizer)</span>
<span class="hidden"><a id="L1664" href="#L1664">  1664</a>  </span><span>			}</span>
<span class="hidden"><a id="L1665" href="#L1665">  1665</a>  </span>
<span class="hidden"><a id="L1666" href="#L1666">  1666</a>  </span><span>			s.Organizer = new(PropOrganizer)</span>
<span class="hidden"><a id="L1667" href="#L1667">  1667</a>  </span>
<span class="hidden"><a id="L1668" href="#L1668">  1668</a>  </span><span>			if err := s.Organizer.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1669" href="#L1669">  1669</a>  </span><span>				return fmt.Errorf(errDecodingProp, cJournal, cOrganizer, err)</span>
<span class="hidden"><a id="L1670" href="#L1670">  1670</a>  </span><span>			}</span>
<span class="hidden"><a id="L1671" href="#L1671">  1671</a>  </span><span>		case &#34;RECURRENCE-ID&#34;:</span>
<span class="hidden"><a id="L1672" href="#L1672">  1672</a>  </span><span>			if s.RecurrenceID != nil {</span>
<span class="hidden"><a id="L1673" href="#L1673">  1673</a>  </span><span>				return fmt.Errorf(errMultiple, cJournal, cRecurrenceID)</span>
<span class="hidden"><a id="L1674" href="#L1674">  1674</a>  </span><span>			}</span>
<span class="hidden"><a id="L1675" href="#L1675">  1675</a>  </span>
<span class="hidden"><a id="L1676" href="#L1676">  1676</a>  </span><span>			s.RecurrenceID = new(PropRecurrenceID)</span>
<span class="hidden"><a id="L1677" href="#L1677">  1677</a>  </span>
<span class="hidden"><a id="L1678" href="#L1678">  1678</a>  </span><span>			if err := s.RecurrenceID.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1679" href="#L1679">  1679</a>  </span><span>				return fmt.Errorf(errDecodingProp, cJournal, cRecurrenceID, err)</span>
<span class="hidden"><a id="L1680" href="#L1680">  1680</a>  </span><span>			}</span>
<span class="hidden"><a id="L1681" href="#L1681">  1681</a>  </span><span>		case &#34;SEQUENCE&#34;:</span>
<span class="hidden"><a id="L1682" href="#L1682">  1682</a>  </span><span>			if s.Sequence != nil {</span>
<span class="hidden"><a id="L1683" href="#L1683">  1683</a>  </span><span>				return fmt.Errorf(errMultiple, cJournal, cSequence)</span>
<span class="hidden"><a id="L1684" href="#L1684">  1684</a>  </span><span>			}</span>
<span class="hidden"><a id="L1685" href="#L1685">  1685</a>  </span>
<span class="hidden"><a id="L1686" href="#L1686">  1686</a>  </span><span>			s.Sequence = new(PropSequence)</span>
<span class="hidden"><a id="L1687" href="#L1687">  1687</a>  </span>
<span class="hidden"><a id="L1688" href="#L1688">  1688</a>  </span><span>			if err := s.Sequence.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1689" href="#L1689">  1689</a>  </span><span>				return fmt.Errorf(errDecodingProp, cJournal, cSequence, err)</span>
<span class="hidden"><a id="L1690" href="#L1690">  1690</a>  </span><span>			}</span>
<span class="hidden"><a id="L1691" href="#L1691">  1691</a>  </span><span>		case &#34;STATUS&#34;:</span>
<span class="hidden"><a id="L1692" href="#L1692">  1692</a>  </span><span>			if s.Status != nil {</span>
<span class="hidden"><a id="L1693" href="#L1693">  1693</a>  </span><span>				return fmt.Errorf(errMultiple, cJournal, cStatus)</span>
<span class="hidden"><a id="L1694" href="#L1694">  1694</a>  </span><span>			}</span>
<span class="hidden"><a id="L1695" href="#L1695">  1695</a>  </span>
<span class="hidden"><a id="L1696" href="#L1696">  1696</a>  </span><span>			s.Status = new(PropStatus)</span>
<span class="hidden"><a id="L1697" href="#L1697">  1697</a>  </span>
<span class="hidden"><a id="L1698" href="#L1698">  1698</a>  </span><span>			if err := s.Status.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1699" href="#L1699">  1699</a>  </span><span>				return fmt.Errorf(errDecodingProp, cJournal, cStatus, err)</span>
<span class="hidden"><a id="L1700" href="#L1700">  1700</a>  </span><span>			}</span>
<span class="hidden"><a id="L1701" href="#L1701">  1701</a>  </span><span>		case &#34;SUMMARY&#34;:</span>
<span class="hidden"><a id="L1702" href="#L1702">  1702</a>  </span><span>			if s.Summary != nil {</span>
<span class="hidden"><a id="L1703" href="#L1703">  1703</a>  </span><span>				return fmt.Errorf(errMultiple, cJournal, cSummary)</span>
<span class="hidden"><a id="L1704" href="#L1704">  1704</a>  </span><span>			}</span>
<span class="hidden"><a id="L1705" href="#L1705">  1705</a>  </span>
<span class="hidden"><a id="L1706" href="#L1706">  1706</a>  </span><span>			s.Summary = new(PropSummary)</span>
<span class="hidden"><a id="L1707" href="#L1707">  1707</a>  </span>
<span class="hidden"><a id="L1708" href="#L1708">  1708</a>  </span><span>			if err := s.Summary.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1709" href="#L1709">  1709</a>  </span><span>				return fmt.Errorf(errDecodingProp, cJournal, cSummary, err)</span>
<span class="hidden"><a id="L1710" href="#L1710">  1710</a>  </span><span>			}</span>
<span class="hidden"><a id="L1711" href="#L1711">  1711</a>  </span><span>		case &#34;URL&#34;:</span>
<span class="hidden"><a id="L1712" href="#L1712">  1712</a>  </span><span>			if s.URL != nil {</span>
<span class="hidden"><a id="L1713" href="#L1713">  1713</a>  </span><span>				return fmt.Errorf(errMultiple, cJournal, cURL)</span>
<span class="hidden"><a id="L1714" href="#L1714">  1714</a>  </span><span>			}</span>
<span class="hidden"><a id="L1715" href="#L1715">  1715</a>  </span>
<span class="hidden"><a id="L1716" href="#L1716">  1716</a>  </span><span>			s.URL = new(PropURL)</span>
<span class="hidden"><a id="L1717" href="#L1717">  1717</a>  </span>
<span class="hidden"><a id="L1718" href="#L1718">  1718</a>  </span><span>			if err := s.URL.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1719" href="#L1719">  1719</a>  </span><span>				return fmt.Errorf(errDecodingProp, cJournal, cURL, err)</span>
<span class="hidden"><a id="L1720" href="#L1720">  1720</a>  </span><span>			}</span>
<span class="hidden"><a id="L1721" href="#L1721">  1721</a>  </span><span>		case &#34;RRULE&#34;:</span>
<span class="hidden"><a id="L1722" href="#L1722">  1722</a>  </span><span>			if s.RecurrenceRule != nil {</span>
<span class="hidden"><a id="L1723" href="#L1723">  1723</a>  </span><span>				return fmt.Errorf(errMultiple, cJournal, cRecurrenceRule)</span>
<span class="hidden"><a id="L1724" href="#L1724">  1724</a>  </span><span>			}</span>
<span class="hidden"><a id="L1725" href="#L1725">  1725</a>  </span>
<span class="hidden"><a id="L1726" href="#L1726">  1726</a>  </span><span>			s.RecurrenceRule = new(PropRecurrenceRule)</span>
<span class="hidden"><a id="L1727" href="#L1727">  1727</a>  </span>
<span class="hidden"><a id="L1728" href="#L1728">  1728</a>  </span><span>			if err := s.RecurrenceRule.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1729" href="#L1729">  1729</a>  </span><span>				return fmt.Errorf(errDecodingProp, cJournal, cRecurrenceRule, err)</span>
<span class="hidden"><a id="L1730" href="#L1730">  1730</a>  </span><span>			}</span>
<span class="hidden"><a id="L1731" href="#L1731">  1731</a>  </span><span>		case &#34;ATTACH&#34;:</span>
<span class="hidden"><a id="L1732" href="#L1732">  1732</a>  </span><span>			var e PropAttachment</span>
<span class="hidden"><a id="L1733" href="#L1733">  1733</a>  </span>
<span class="hidden"><a id="L1734" href="#L1734">  1734</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1735" href="#L1735">  1735</a>  </span><span>				return fmt.Errorf(errDecodingProp, cJournal, cAttachment, err)</span>
<span class="hidden"><a id="L1736" href="#L1736">  1736</a>  </span><span>			}</span>
<span class="hidden"><a id="L1737" href="#L1737">  1737</a>  </span>
<span class="hidden"><a id="L1738" href="#L1738">  1738</a>  </span><span>			s.Attachment = append(s.Attachment, e)</span>
<span class="hidden"><a id="L1739" href="#L1739">  1739</a>  </span><span>		case &#34;ATTENDEE&#34;:</span>
<span class="hidden"><a id="L1740" href="#L1740">  1740</a>  </span><span>			var e PropAttendee</span>
<span class="hidden"><a id="L1741" href="#L1741">  1741</a>  </span>
<span class="hidden"><a id="L1742" href="#L1742">  1742</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1743" href="#L1743">  1743</a>  </span><span>				return fmt.Errorf(errDecodingProp, cJournal, cAttendee, err)</span>
<span class="hidden"><a id="L1744" href="#L1744">  1744</a>  </span><span>			}</span>
<span class="hidden"><a id="L1745" href="#L1745">  1745</a>  </span>
<span class="hidden"><a id="L1746" href="#L1746">  1746</a>  </span><span>			s.Attendee = append(s.Attendee, e)</span>
<span class="hidden"><a id="L1747" href="#L1747">  1747</a>  </span><span>		case &#34;CATEGORIES&#34;:</span>
<span class="hidden"><a id="L1748" href="#L1748">  1748</a>  </span><span>			var e PropCategories</span>
<span class="hidden"><a id="L1749" href="#L1749">  1749</a>  </span>
<span class="hidden"><a id="L1750" href="#L1750">  1750</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1751" href="#L1751">  1751</a>  </span><span>				return fmt.Errorf(errDecodingProp, cJournal, cCategories, err)</span>
<span class="hidden"><a id="L1752" href="#L1752">  1752</a>  </span><span>			}</span>
<span class="hidden"><a id="L1753" href="#L1753">  1753</a>  </span>
<span class="hidden"><a id="L1754" href="#L1754">  1754</a>  </span><span>			s.Categories = append(s.Categories, e)</span>
<span class="hidden"><a id="L1755" href="#L1755">  1755</a>  </span><span>		case &#34;COMMENT&#34;:</span>
<span class="hidden"><a id="L1756" href="#L1756">  1756</a>  </span><span>			var e PropComment</span>
<span class="hidden"><a id="L1757" href="#L1757">  1757</a>  </span>
<span class="hidden"><a id="L1758" href="#L1758">  1758</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1759" href="#L1759">  1759</a>  </span><span>				return fmt.Errorf(errDecodingProp, cJournal, cComment, err)</span>
<span class="hidden"><a id="L1760" href="#L1760">  1760</a>  </span><span>			}</span>
<span class="hidden"><a id="L1761" href="#L1761">  1761</a>  </span>
<span class="hidden"><a id="L1762" href="#L1762">  1762</a>  </span><span>			s.Comment = append(s.Comment, e)</span>
<span class="hidden"><a id="L1763" href="#L1763">  1763</a>  </span><span>		case &#34;CONTACT&#34;:</span>
<span class="hidden"><a id="L1764" href="#L1764">  1764</a>  </span><span>			var e PropContact</span>
<span class="hidden"><a id="L1765" href="#L1765">  1765</a>  </span>
<span class="hidden"><a id="L1766" href="#L1766">  1766</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1767" href="#L1767">  1767</a>  </span><span>				return fmt.Errorf(errDecodingProp, cJournal, cContact, err)</span>
<span class="hidden"><a id="L1768" href="#L1768">  1768</a>  </span><span>			}</span>
<span class="hidden"><a id="L1769" href="#L1769">  1769</a>  </span>
<span class="hidden"><a id="L1770" href="#L1770">  1770</a>  </span><span>			s.Contact = append(s.Contact, e)</span>
<span class="hidden"><a id="L1771" href="#L1771">  1771</a>  </span><span>		case &#34;DESCRIPTION&#34;:</span>
<span class="hidden"><a id="L1772" href="#L1772">  1772</a>  </span><span>			var e PropDescription</span>
<span class="hidden"><a id="L1773" href="#L1773">  1773</a>  </span>
<span class="hidden"><a id="L1774" href="#L1774">  1774</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1775" href="#L1775">  1775</a>  </span><span>				return fmt.Errorf(errDecodingProp, cJournal, cDescription, err)</span>
<span class="hidden"><a id="L1776" href="#L1776">  1776</a>  </span><span>			}</span>
<span class="hidden"><a id="L1777" href="#L1777">  1777</a>  </span>
<span class="hidden"><a id="L1778" href="#L1778">  1778</a>  </span><span>			s.Description = append(s.Description, e)</span>
<span class="hidden"><a id="L1779" href="#L1779">  1779</a>  </span><span>		case &#34;EXDATE&#34;:</span>
<span class="hidden"><a id="L1780" href="#L1780">  1780</a>  </span><span>			var e PropExceptionDateTime</span>
<span class="hidden"><a id="L1781" href="#L1781">  1781</a>  </span>
<span class="hidden"><a id="L1782" href="#L1782">  1782</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1783" href="#L1783">  1783</a>  </span><span>				return fmt.Errorf(errDecodingProp, cJournal, cExceptionDateTime, err)</span>
<span class="hidden"><a id="L1784" href="#L1784">  1784</a>  </span><span>			}</span>
<span class="hidden"><a id="L1785" href="#L1785">  1785</a>  </span>
<span class="hidden"><a id="L1786" href="#L1786">  1786</a>  </span><span>			s.ExceptionDateTime = append(s.ExceptionDateTime, e)</span>
<span class="hidden"><a id="L1787" href="#L1787">  1787</a>  </span><span>		case &#34;REQUEST-STATUS&#34;:</span>
<span class="hidden"><a id="L1788" href="#L1788">  1788</a>  </span><span>			var e PropRequestStatus</span>
<span class="hidden"><a id="L1789" href="#L1789">  1789</a>  </span>
<span class="hidden"><a id="L1790" href="#L1790">  1790</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1791" href="#L1791">  1791</a>  </span><span>				return fmt.Errorf(errDecodingProp, cJournal, cRequestStatus, err)</span>
<span class="hidden"><a id="L1792" href="#L1792">  1792</a>  </span><span>			}</span>
<span class="hidden"><a id="L1793" href="#L1793">  1793</a>  </span>
<span class="hidden"><a id="L1794" href="#L1794">  1794</a>  </span><span>			s.RequestStatus = append(s.RequestStatus, e)</span>
<span class="hidden"><a id="L1795" href="#L1795">  1795</a>  </span><span>		case &#34;RELATED-TO&#34;:</span>
<span class="hidden"><a id="L1796" href="#L1796">  1796</a>  </span><span>			var e PropRelatedTo</span>
<span class="hidden"><a id="L1797" href="#L1797">  1797</a>  </span>
<span class="hidden"><a id="L1798" href="#L1798">  1798</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1799" href="#L1799">  1799</a>  </span><span>				return fmt.Errorf(errDecodingProp, cJournal, cRelatedTo, err)</span>
<span class="hidden"><a id="L1800" href="#L1800">  1800</a>  </span><span>			}</span>
<span class="hidden"><a id="L1801" href="#L1801">  1801</a>  </span>
<span class="hidden"><a id="L1802" href="#L1802">  1802</a>  </span><span>			s.RelatedTo = append(s.RelatedTo, e)</span>
<span class="hidden"><a id="L1803" href="#L1803">  1803</a>  </span><span>		case &#34;RESOURCES&#34;:</span>
<span class="hidden"><a id="L1804" href="#L1804">  1804</a>  </span><span>			var e PropResources</span>
<span class="hidden"><a id="L1805" href="#L1805">  1805</a>  </span>
<span class="hidden"><a id="L1806" href="#L1806">  1806</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1807" href="#L1807">  1807</a>  </span><span>				return fmt.Errorf(errDecodingProp, cJournal, cResources, err)</span>
<span class="hidden"><a id="L1808" href="#L1808">  1808</a>  </span><span>			}</span>
<span class="hidden"><a id="L1809" href="#L1809">  1809</a>  </span>
<span class="hidden"><a id="L1810" href="#L1810">  1810</a>  </span><span>			s.Resources = append(s.Resources, e)</span>
<span class="hidden"><a id="L1811" href="#L1811">  1811</a>  </span><span>		case &#34;RDATE&#34;:</span>
<span class="hidden"><a id="L1812" href="#L1812">  1812</a>  </span><span>			var e PropRecurrenceDateTimes</span>
<span class="hidden"><a id="L1813" href="#L1813">  1813</a>  </span>
<span class="hidden"><a id="L1814" href="#L1814">  1814</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L1815" href="#L1815">  1815</a>  </span><span>				return fmt.Errorf(errDecodingProp, cJournal, cRecurrenceDateTimes, err)</span>
<span class="hidden"><a id="L1816" href="#L1816">  1816</a>  </span><span>			}</span>
<span class="hidden"><a id="L1817" href="#L1817">  1817</a>  </span>
<span class="hidden"><a id="L1818" href="#L1818">  1818</a>  </span><span>			s.RecurrenceDateTimes = append(s.RecurrenceDateTimes, e)</span>
<span class="hidden"><a id="L1819" href="#L1819">  1819</a>  </span><span>		case &#34;END&#34;:</span>
<span class="hidden"><a id="L1820" href="#L1820">  1820</a>  </span><span>			if value != &#34;VJOURNAL&#34; {</span>
<span class="hidden"><a id="L1821" href="#L1821">  1821</a>  </span><span>				return fmt.Errorf(errDecodingType, cJournal, ErrInvalidEnd)</span>
<span class="hidden"><a id="L1822" href="#L1822">  1822</a>  </span><span>			}</span>
<span class="hidden"><a id="L1823" href="#L1823">  1823</a>  </span>
<span class="hidden"><a id="L1824" href="#L1824">  1824</a>  </span><span>			break Loop</span>
<span class="hidden"><a id="L1825" href="#L1825">  1825</a>  </span><span>		}</span>
<span class="hidden"><a id="L1826" href="#L1826">  1826</a>  </span><span>	}</span>
<span class="hidden"><a id="L1827" href="#L1827">  1827</a>  </span>
<span class="hidden"><a id="L1828" href="#L1828">  1828</a>  </span><span>	if !requiredDateTimeStamp || !requiredUID {</span>
<span class="hidden"><a id="L1829" href="#L1829">  1829</a>  </span><span>		return fmt.Errorf(errDecodingType, cJournal, ErrMissingRequired)</span>
<span class="hidden"><a id="L1830" href="#L1830">  1830</a>  </span><span>	}</span>
<span class="hidden"><a id="L1831" href="#L1831">  1831</a>  </span>
<span class="hidden"><a id="L1832" href="#L1832">  1832</a>  </span><span>	return nil</span>
<span class="hidden"><a id="L1833" href="#L1833">  1833</a>  </span><span>}</span>
<span class="hidden"><a id="L1834" href="#L1834">  1834</a>  </span>
<span class="hidden"><a id="L1835" href="#L1835">  1835</a>  </span><span>func (s *Journal) encode(w writer) {</span>
<span class="hidden"><a id="L1836" href="#L1836">  1836</a>  </span><span>	w.WriteString(&#34;BEGIN:VJOURNAL\r\n&#34;)</span>
<span class="hidden"><a id="L1837" href="#L1837">  1837</a>  </span><span>	s.DateTimeStamp.encode(w)</span>
<span class="hidden"><a id="L1838" href="#L1838">  1838</a>  </span><span>	s.UID.encode(w)</span>
<span class="hidden"><a id="L1839" href="#L1839">  1839</a>  </span>
<span class="hidden"><a id="L1840" href="#L1840">  1840</a>  </span><span>	if s.Class != nil {</span>
<span class="hidden"><a id="L1841" href="#L1841">  1841</a>  </span><span>		s.Class.encode(w)</span>
<span class="hidden"><a id="L1842" href="#L1842">  1842</a>  </span><span>	}</span>
<span class="hidden"><a id="L1843" href="#L1843">  1843</a>  </span>
<span class="hidden"><a id="L1844" href="#L1844">  1844</a>  </span><span>	if s.Created != nil {</span>
<span class="hidden"><a id="L1845" href="#L1845">  1845</a>  </span><span>		s.Created.encode(w)</span>
<span class="hidden"><a id="L1846" href="#L1846">  1846</a>  </span><span>	}</span>
<span class="hidden"><a id="L1847" href="#L1847">  1847</a>  </span>
<span class="hidden"><a id="L1848" href="#L1848">  1848</a>  </span><span>	if s.DateTimeStart != nil {</span>
<span class="hidden"><a id="L1849" href="#L1849">  1849</a>  </span><span>		s.DateTimeStart.encode(w)</span>
<span class="hidden"><a id="L1850" href="#L1850">  1850</a>  </span><span>	}</span>
<span class="hidden"><a id="L1851" href="#L1851">  1851</a>  </span>
<span class="hidden"><a id="L1852" href="#L1852">  1852</a>  </span><span>	if s.LastModified != nil {</span>
<span class="hidden"><a id="L1853" href="#L1853">  1853</a>  </span><span>		s.LastModified.encode(w)</span>
<span class="hidden"><a id="L1854" href="#L1854">  1854</a>  </span><span>	}</span>
<span class="hidden"><a id="L1855" href="#L1855">  1855</a>  </span>
<span class="hidden"><a id="L1856" href="#L1856">  1856</a>  </span><span>	if s.Organizer != nil {</span>
<span class="hidden"><a id="L1857" href="#L1857">  1857</a>  </span><span>		s.Organizer.encode(w)</span>
<span class="hidden"><a id="L1858" href="#L1858">  1858</a>  </span><span>	}</span>
<span class="hidden"><a id="L1859" href="#L1859">  1859</a>  </span>
<span class="hidden"><a id="L1860" href="#L1860">  1860</a>  </span><span>	if s.RecurrenceID != nil {</span>
<span class="hidden"><a id="L1861" href="#L1861">  1861</a>  </span><span>		s.RecurrenceID.encode(w)</span>
<span class="hidden"><a id="L1862" href="#L1862">  1862</a>  </span><span>	}</span>
<span class="hidden"><a id="L1863" href="#L1863">  1863</a>  </span>
<span class="hidden"><a id="L1864" href="#L1864">  1864</a>  </span><span>	if s.Sequence != nil {</span>
<span class="hidden"><a id="L1865" href="#L1865">  1865</a>  </span><span>		s.Sequence.encode(w)</span>
<span class="hidden"><a id="L1866" href="#L1866">  1866</a>  </span><span>	}</span>
<span class="hidden"><a id="L1867" href="#L1867">  1867</a>  </span>
<span class="hidden"><a id="L1868" href="#L1868">  1868</a>  </span><span>	if s.Status != nil {</span>
<span class="hidden"><a id="L1869" href="#L1869">  1869</a>  </span><span>		s.Status.encode(w)</span>
<span class="hidden"><a id="L1870" href="#L1870">  1870</a>  </span><span>	}</span>
<span class="hidden"><a id="L1871" href="#L1871">  1871</a>  </span>
<span class="hidden"><a id="L1872" href="#L1872">  1872</a>  </span><span>	if s.Summary != nil {</span>
<span class="hidden"><a id="L1873" href="#L1873">  1873</a>  </span><span>		s.Summary.encode(w)</span>
<span class="hidden"><a id="L1874" href="#L1874">  1874</a>  </span><span>	}</span>
<span class="hidden"><a id="L1875" href="#L1875">  1875</a>  </span>
<span class="hidden"><a id="L1876" href="#L1876">  1876</a>  </span><span>	if s.URL != nil {</span>
<span class="hidden"><a id="L1877" href="#L1877">  1877</a>  </span><span>		s.URL.encode(w)</span>
<span class="hidden"><a id="L1878" href="#L1878">  1878</a>  </span><span>	}</span>
<span class="hidden"><a id="L1879" href="#L1879">  1879</a>  </span>
<span class="hidden"><a id="L1880" href="#L1880">  1880</a>  </span><span>	if s.RecurrenceRule != nil {</span>
<span class="hidden"><a id="L1881" href="#L1881">  1881</a>  </span><span>		s.RecurrenceRule.encode(w)</span>
<span class="hidden"><a id="L1882" href="#L1882">  1882</a>  </span><span>	}</span>
<span class="hidden"><a id="L1883" href="#L1883">  1883</a>  </span>
<span class="hidden"><a id="L1884" href="#L1884">  1884</a>  </span><span>	for n := range s.Attachment {</span>
<span class="hidden"><a id="L1885" href="#L1885">  1885</a>  </span><span>		s.Attachment[n].encode(w)</span>
<span class="hidden"><a id="L1886" href="#L1886">  1886</a>  </span><span>	}</span>
<span class="hidden"><a id="L1887" href="#L1887">  1887</a>  </span>
<span class="hidden"><a id="L1888" href="#L1888">  1888</a>  </span><span>	for n := range s.Attendee {</span>
<span class="hidden"><a id="L1889" href="#L1889">  1889</a>  </span><span>		s.Attendee[n].encode(w)</span>
<span class="hidden"><a id="L1890" href="#L1890">  1890</a>  </span><span>	}</span>
<span class="hidden"><a id="L1891" href="#L1891">  1891</a>  </span>
<span class="hidden"><a id="L1892" href="#L1892">  1892</a>  </span><span>	for n := range s.Categories {</span>
<span class="hidden"><a id="L1893" href="#L1893">  1893</a>  </span><span>		s.Categories[n].encode(w)</span>
<span class="hidden"><a id="L1894" href="#L1894">  1894</a>  </span><span>	}</span>
<span class="hidden"><a id="L1895" href="#L1895">  1895</a>  </span>
<span class="hidden"><a id="L1896" href="#L1896">  1896</a>  </span><span>	for n := range s.Comment {</span>
<span class="hidden"><a id="L1897" href="#L1897">  1897</a>  </span><span>		s.Comment[n].encode(w)</span>
<span class="hidden"><a id="L1898" href="#L1898">  1898</a>  </span><span>	}</span>
<span class="hidden"><a id="L1899" href="#L1899">  1899</a>  </span>
<span class="hidden"><a id="L1900" href="#L1900">  1900</a>  </span><span>	for n := range s.Contact {</span>
<span class="hidden"><a id="L1901" href="#L1901">  1901</a>  </span><span>		s.Contact[n].encode(w)</span>
<span class="hidden"><a id="L1902" href="#L1902">  1902</a>  </span><span>	}</span>
<span class="hidden"><a id="L1903" href="#L1903">  1903</a>  </span>
<span class="hidden"><a id="L1904" href="#L1904">  1904</a>  </span><span>	for n := range s.Description {</span>
<span class="hidden"><a id="L1905" href="#L1905">  1905</a>  </span><span>		s.Description[n].encode(w)</span>
<span class="hidden"><a id="L1906" href="#L1906">  1906</a>  </span><span>	}</span>
<span class="hidden"><a id="L1907" href="#L1907">  1907</a>  </span>
<span class="hidden"><a id="L1908" href="#L1908">  1908</a>  </span><span>	for n := range s.ExceptionDateTime {</span>
<span class="hidden"><a id="L1909" href="#L1909">  1909</a>  </span><span>		s.ExceptionDateTime[n].encode(w)</span>
<span class="hidden"><a id="L1910" href="#L1910">  1910</a>  </span><span>	}</span>
<span class="hidden"><a id="L1911" href="#L1911">  1911</a>  </span>
<span class="hidden"><a id="L1912" href="#L1912">  1912</a>  </span><span>	for n := range s.RequestStatus {</span>
<span class="hidden"><a id="L1913" href="#L1913">  1913</a>  </span><span>		s.RequestStatus[n].encode(w)</span>
<span class="hidden"><a id="L1914" href="#L1914">  1914</a>  </span><span>	}</span>
<span class="hidden"><a id="L1915" href="#L1915">  1915</a>  </span>
<span class="hidden"><a id="L1916" href="#L1916">  1916</a>  </span><span>	for n := range s.RelatedTo {</span>
<span class="hidden"><a id="L1917" href="#L1917">  1917</a>  </span><span>		s.RelatedTo[n].encode(w)</span>
<span class="hidden"><a id="L1918" href="#L1918">  1918</a>  </span><span>	}</span>
<span class="hidden"><a id="L1919" href="#L1919">  1919</a>  </span>
<span class="hidden"><a id="L1920" href="#L1920">  1920</a>  </span><span>	for n := range s.Resources {</span>
<span class="hidden"><a id="L1921" href="#L1921">  1921</a>  </span><span>		s.Resources[n].encode(w)</span>
<span class="hidden"><a id="L1922" href="#L1922">  1922</a>  </span><span>	}</span>
<span class="hidden"><a id="L1923" href="#L1923">  1923</a>  </span>
<span class="hidden"><a id="L1924" href="#L1924">  1924</a>  </span><span>	for n := range s.RecurrenceDateTimes {</span>
<span class="hidden"><a id="L1925" href="#L1925">  1925</a>  </span><span>		s.RecurrenceDateTimes[n].encode(w)</span>
<span class="hidden"><a id="L1926" href="#L1926">  1926</a>  </span><span>	}</span>
<span class="hidden"><a id="L1927" href="#L1927">  1927</a>  </span>
<span class="hidden"><a id="L1928" href="#L1928">  1928</a>  </span><span>	w.WriteString(&#34;END:VJOURNAL\r\n&#34;)</span>
<span class="hidden"><a id="L1929" href="#L1929">  1929</a>  </span><span>}</span>
<span class="hidden"><a id="L1930" href="#L1930">  1930</a>  </span>
<span class="hidden"><a id="L1931" href="#L1931">  1931</a>  </span><span>func (s *Journal) valid() error {</span>
<span class="hidden"><a id="L1932" href="#L1932">  1932</a>  </span><span>	if err := s.DateTimeStamp.valid(); err != nil {</span>
<span class="hidden"><a id="L1933" href="#L1933">  1933</a>  </span><span>		return fmt.Errorf(errValidatingProp, cJournal, cDateTimeStamp, err)</span>
<span class="hidden"><a id="L1934" href="#L1934">  1934</a>  </span><span>	}</span>
<span class="hidden"><a id="L1935" href="#L1935">  1935</a>  </span>
<span class="hidden"><a id="L1936" href="#L1936">  1936</a>  </span><span>	if err := s.UID.valid(); err != nil {</span>
<span class="hidden"><a id="L1937" href="#L1937">  1937</a>  </span><span>		return fmt.Errorf(errValidatingProp, cJournal, cUID, err)</span>
<span class="hidden"><a id="L1938" href="#L1938">  1938</a>  </span><span>	}</span>
<span class="hidden"><a id="L1939" href="#L1939">  1939</a>  </span>
<span class="hidden"><a id="L1940" href="#L1940">  1940</a>  </span><span>	if s.Class != nil {</span>
<span class="hidden"><a id="L1941" href="#L1941">  1941</a>  </span><span>		if err := s.Class.valid(); err != nil {</span>
<span class="hidden"><a id="L1942" href="#L1942">  1942</a>  </span><span>			return fmt.Errorf(errValidatingProp, cJournal, cClass, err)</span>
<span class="hidden"><a id="L1943" href="#L1943">  1943</a>  </span><span>		}</span>
<span class="hidden"><a id="L1944" href="#L1944">  1944</a>  </span><span>	}</span>
<span class="hidden"><a id="L1945" href="#L1945">  1945</a>  </span>
<span class="hidden"><a id="L1946" href="#L1946">  1946</a>  </span><span>	if s.Created != nil {</span>
<span class="hidden"><a id="L1947" href="#L1947">  1947</a>  </span><span>		if err := s.Created.valid(); err != nil {</span>
<span class="hidden"><a id="L1948" href="#L1948">  1948</a>  </span><span>			return fmt.Errorf(errValidatingProp, cJournal, cCreated, err)</span>
<span class="hidden"><a id="L1949" href="#L1949">  1949</a>  </span><span>		}</span>
<span class="hidden"><a id="L1950" href="#L1950">  1950</a>  </span><span>	}</span>
<span class="hidden"><a id="L1951" href="#L1951">  1951</a>  </span>
<span class="hidden"><a id="L1952" href="#L1952">  1952</a>  </span><span>	if s.DateTimeStart != nil {</span>
<span class="hidden"><a id="L1953" href="#L1953">  1953</a>  </span><span>		if err := s.DateTimeStart.valid(); err != nil {</span>
<span class="hidden"><a id="L1954" href="#L1954">  1954</a>  </span><span>			return fmt.Errorf(errValidatingProp, cJournal, cDateTimeStart, err)</span>
<span class="hidden"><a id="L1955" href="#L1955">  1955</a>  </span><span>		}</span>
<span class="hidden"><a id="L1956" href="#L1956">  1956</a>  </span><span>	}</span>
<span class="hidden"><a id="L1957" href="#L1957">  1957</a>  </span>
<span class="hidden"><a id="L1958" href="#L1958">  1958</a>  </span><span>	if s.LastModified != nil {</span>
<span class="hidden"><a id="L1959" href="#L1959">  1959</a>  </span><span>		if err := s.LastModified.valid(); err != nil {</span>
<span class="hidden"><a id="L1960" href="#L1960">  1960</a>  </span><span>			return fmt.Errorf(errValidatingProp, cJournal, cLastModified, err)</span>
<span class="hidden"><a id="L1961" href="#L1961">  1961</a>  </span><span>		}</span>
<span class="hidden"><a id="L1962" href="#L1962">  1962</a>  </span><span>	}</span>
<span class="hidden"><a id="L1963" href="#L1963">  1963</a>  </span>
<span class="hidden"><a id="L1964" href="#L1964">  1964</a>  </span><span>	if s.Organizer != nil {</span>
<span class="hidden"><a id="L1965" href="#L1965">  1965</a>  </span><span>		if err := s.Organizer.valid(); err != nil {</span>
<span class="hidden"><a id="L1966" href="#L1966">  1966</a>  </span><span>			return fmt.Errorf(errValidatingProp, cJournal, cOrganizer, err)</span>
<span class="hidden"><a id="L1967" href="#L1967">  1967</a>  </span><span>		}</span>
<span class="hidden"><a id="L1968" href="#L1968">  1968</a>  </span><span>	}</span>
<span class="hidden"><a id="L1969" href="#L1969">  1969</a>  </span>
<span class="hidden"><a id="L1970" href="#L1970">  1970</a>  </span><span>	if s.RecurrenceID != nil {</span>
<span class="hidden"><a id="L1971" href="#L1971">  1971</a>  </span><span>		if err := s.RecurrenceID.valid(); err != nil {</span>
<span class="hidden"><a id="L1972" href="#L1972">  1972</a>  </span><span>			return fmt.Errorf(errValidatingProp, cJournal, cRecurrenceID, err)</span>
<span class="hidden"><a id="L1973" href="#L1973">  1973</a>  </span><span>		}</span>
<span class="hidden"><a id="L1974" href="#L1974">  1974</a>  </span><span>	}</span>
<span class="hidden"><a id="L1975" href="#L1975">  1975</a>  </span>
<span class="hidden"><a id="L1976" href="#L1976">  1976</a>  </span><span>	if s.Sequence != nil {</span>
<span class="hidden"><a id="L1977" href="#L1977">  1977</a>  </span><span>		if err := s.Sequence.valid(); err != nil {</span>
<span class="hidden"><a id="L1978" href="#L1978">  1978</a>  </span><span>			return fmt.Errorf(errValidatingProp, cJournal, cSequence, err)</span>
<span class="hidden"><a id="L1979" href="#L1979">  1979</a>  </span><span>		}</span>
<span class="hidden"><a id="L1980" href="#L1980">  1980</a>  </span><span>	}</span>
<span class="hidden"><a id="L1981" href="#L1981">  1981</a>  </span>
<span class="hidden"><a id="L1982" href="#L1982">  1982</a>  </span><span>	if s.Status != nil {</span>
<span class="hidden"><a id="L1983" href="#L1983">  1983</a>  </span><span>		if err := s.Status.valid(); err != nil {</span>
<span class="hidden"><a id="L1984" href="#L1984">  1984</a>  </span><span>			return fmt.Errorf(errValidatingProp, cJournal, cStatus, err)</span>
<span class="hidden"><a id="L1985" href="#L1985">  1985</a>  </span><span>		}</span>
<span class="hidden"><a id="L1986" href="#L1986">  1986</a>  </span><span>	}</span>
<span class="hidden"><a id="L1987" href="#L1987">  1987</a>  </span>
<span class="hidden"><a id="L1988" href="#L1988">  1988</a>  </span><span>	if s.Summary != nil {</span>
<span class="hidden"><a id="L1989" href="#L1989">  1989</a>  </span><span>		if err := s.Summary.valid(); err != nil {</span>
<span class="hidden"><a id="L1990" href="#L1990">  1990</a>  </span><span>			return fmt.Errorf(errValidatingProp, cJournal, cSummary, err)</span>
<span class="hidden"><a id="L1991" href="#L1991">  1991</a>  </span><span>		}</span>
<span class="hidden"><a id="L1992" href="#L1992">  1992</a>  </span><span>	}</span>
<span class="hidden"><a id="L1993" href="#L1993">  1993</a>  </span>
<span class="hidden"><a id="L1994" href="#L1994">  1994</a>  </span><span>	if s.URL != nil {</span>
<span class="hidden"><a id="L1995" href="#L1995">  1995</a>  </span><span>		if err := s.URL.valid(); err != nil {</span>
<span class="hidden"><a id="L1996" href="#L1996">  1996</a>  </span><span>			return fmt.Errorf(errValidatingProp, cJournal, cURL, err)</span>
<span class="hidden"><a id="L1997" href="#L1997">  1997</a>  </span><span>		}</span>
<span class="hidden"><a id="L1998" href="#L1998">  1998</a>  </span><span>	}</span>
<span class="hidden"><a id="L1999" href="#L1999">  1999</a>  </span>
<span class="hidden"><a id="L2000" href="#L2000">  2000</a>  </span><span>	if s.RecurrenceRule != nil {</span>
<span class="hidden"><a id="L2001" href="#L2001">  2001</a>  </span><span>		if err := s.RecurrenceRule.valid(); err != nil {</span>
<span class="hidden"><a id="L2002" href="#L2002">  2002</a>  </span><span>			return fmt.Errorf(errValidatingProp, cJournal, cRecurrenceRule, err)</span>
<span class="hidden"><a id="L2003" href="#L2003">  2003</a>  </span><span>		}</span>
<span class="hidden"><a id="L2004" href="#L2004">  2004</a>  </span><span>	}</span>
<span class="hidden"><a id="L2005" href="#L2005">  2005</a>  </span>
<span class="hidden"><a id="L2006" href="#L2006">  2006</a>  </span><span>	for n := range s.Attachment {</span>
<span class="hidden"><a id="L2007" href="#L2007">  2007</a>  </span><span>		if err := s.Attachment[n].valid(); err != nil {</span>
<span class="hidden"><a id="L2008" href="#L2008">  2008</a>  </span><span>			return fmt.Errorf(errValidatingProp, cJournal, cAttachment, err)</span>
<span class="hidden"><a id="L2009" href="#L2009">  2009</a>  </span><span>		}</span>
<span class="hidden"><a id="L2010" href="#L2010">  2010</a>  </span><span>	}</span>
<span class="hidden"><a id="L2011" href="#L2011">  2011</a>  </span>
<span class="hidden"><a id="L2012" href="#L2012">  2012</a>  </span><span>	for n := range s.Attendee {</span>
<span class="hidden"><a id="L2013" href="#L2013">  2013</a>  </span><span>		if err := s.Attendee[n].valid(); err != nil {</span>
<span class="hidden"><a id="L2014" href="#L2014">  2014</a>  </span><span>			return fmt.Errorf(errValidatingProp, cJournal, cAttendee, err)</span>
<span class="hidden"><a id="L2015" href="#L2015">  2015</a>  </span><span>		}</span>
<span class="hidden"><a id="L2016" href="#L2016">  2016</a>  </span><span>	}</span>
<span class="hidden"><a id="L2017" href="#L2017">  2017</a>  </span>
<span class="hidden"><a id="L2018" href="#L2018">  2018</a>  </span><span>	for n := range s.Categories {</span>
<span class="hidden"><a id="L2019" href="#L2019">  2019</a>  </span><span>		if err := s.Categories[n].valid(); err != nil {</span>
<span class="hidden"><a id="L2020" href="#L2020">  2020</a>  </span><span>			return fmt.Errorf(errValidatingProp, cJournal, cCategories, err)</span>
<span class="hidden"><a id="L2021" href="#L2021">  2021</a>  </span><span>		}</span>
<span class="hidden"><a id="L2022" href="#L2022">  2022</a>  </span><span>	}</span>
<span class="hidden"><a id="L2023" href="#L2023">  2023</a>  </span>
<span class="hidden"><a id="L2024" href="#L2024">  2024</a>  </span><span>	for n := range s.Comment {</span>
<span class="hidden"><a id="L2025" href="#L2025">  2025</a>  </span><span>		if err := s.Comment[n].valid(); err != nil {</span>
<span class="hidden"><a id="L2026" href="#L2026">  2026</a>  </span><span>			return fmt.Errorf(errValidatingProp, cJournal, cComment, err)</span>
<span class="hidden"><a id="L2027" href="#L2027">  2027</a>  </span><span>		}</span>
<span class="hidden"><a id="L2028" href="#L2028">  2028</a>  </span><span>	}</span>
<span class="hidden"><a id="L2029" href="#L2029">  2029</a>  </span>
<span class="hidden"><a id="L2030" href="#L2030">  2030</a>  </span><span>	for n := range s.Contact {</span>
<span class="hidden"><a id="L2031" href="#L2031">  2031</a>  </span><span>		if err := s.Contact[n].valid(); err != nil {</span>
<span class="hidden"><a id="L2032" href="#L2032">  2032</a>  </span><span>			return fmt.Errorf(errValidatingProp, cJournal, cContact, err)</span>
<span class="hidden"><a id="L2033" href="#L2033">  2033</a>  </span><span>		}</span>
<span class="hidden"><a id="L2034" href="#L2034">  2034</a>  </span><span>	}</span>
<span class="hidden"><a id="L2035" href="#L2035">  2035</a>  </span>
<span class="hidden"><a id="L2036" href="#L2036">  2036</a>  </span><span>	for n := range s.Description {</span>
<span class="hidden"><a id="L2037" href="#L2037">  2037</a>  </span><span>		if err := s.Description[n].valid(); err != nil {</span>
<span class="hidden"><a id="L2038" href="#L2038">  2038</a>  </span><span>			return fmt.Errorf(errValidatingProp, cJournal, cDescription, err)</span>
<span class="hidden"><a id="L2039" href="#L2039">  2039</a>  </span><span>		}</span>
<span class="hidden"><a id="L2040" href="#L2040">  2040</a>  </span><span>	}</span>
<span class="hidden"><a id="L2041" href="#L2041">  2041</a>  </span>
<span class="hidden"><a id="L2042" href="#L2042">  2042</a>  </span><span>	for n := range s.ExceptionDateTime {</span>
<span class="hidden"><a id="L2043" href="#L2043">  2043</a>  </span><span>		if err := s.ExceptionDateTime[n].valid(); err != nil {</span>
<span class="hidden"><a id="L2044" href="#L2044">  2044</a>  </span><span>			return fmt.Errorf(errValidatingProp, cJournal, cExceptionDateTime, err)</span>
<span class="hidden"><a id="L2045" href="#L2045">  2045</a>  </span><span>		}</span>
<span class="hidden"><a id="L2046" href="#L2046">  2046</a>  </span><span>	}</span>
<span class="hidden"><a id="L2047" href="#L2047">  2047</a>  </span>
<span class="hidden"><a id="L2048" href="#L2048">  2048</a>  </span><span>	for n := range s.RequestStatus {</span>
<span class="hidden"><a id="L2049" href="#L2049">  2049</a>  </span><span>		if err := s.RequestStatus[n].valid(); err != nil {</span>
<span class="hidden"><a id="L2050" href="#L2050">  2050</a>  </span><span>			return fmt.Errorf(errValidatingProp, cJournal, cRequestStatus, err)</span>
<span class="hidden"><a id="L2051" href="#L2051">  2051</a>  </span><span>		}</span>
<span class="hidden"><a id="L2052" href="#L2052">  2052</a>  </span><span>	}</span>
<span class="hidden"><a id="L2053" href="#L2053">  2053</a>  </span>
<span class="hidden"><a id="L2054" href="#L2054">  2054</a>  </span><span>	for n := range s.RelatedTo {</span>
<span class="hidden"><a id="L2055" href="#L2055">  2055</a>  </span><span>		if err := s.RelatedTo[n].valid(); err != nil {</span>
<span class="hidden"><a id="L2056" href="#L2056">  2056</a>  </span><span>			return fmt.Errorf(errValidatingProp, cJournal, cRelatedTo, err)</span>
<span class="hidden"><a id="L2057" href="#L2057">  2057</a>  </span><span>		}</span>
<span class="hidden"><a id="L2058" href="#L2058">  2058</a>  </span><span>	}</span>
<span class="hidden"><a id="L2059" href="#L2059">  2059</a>  </span>
<span class="hidden"><a id="L2060" href="#L2060">  2060</a>  </span><span>	for n := range s.Resources {</span>
<span class="hidden"><a id="L2061" href="#L2061">  2061</a>  </span><span>		if err := s.Resources[n].valid(); err != nil {</span>
<span class="hidden"><a id="L2062" href="#L2062">  2062</a>  </span><span>			return fmt.Errorf(errValidatingProp, cJournal, cResources, err)</span>
<span class="hidden"><a id="L2063" href="#L2063">  2063</a>  </span><span>		}</span>
<span class="hidden"><a id="L2064" href="#L2064">  2064</a>  </span><span>	}</span>
<span class="hidden"><a id="L2065" href="#L2065">  2065</a>  </span>
<span class="hidden"><a id="L2066" href="#L2066">  2066</a>  </span><span>	for n := range s.RecurrenceDateTimes {</span>
<span class="hidden"><a id="L2067" href="#L2067">  2067</a>  </span><span>		if err := s.RecurrenceDateTimes[n].valid(); err != nil {</span>
<span class="hidden"><a id="L2068" href="#L2068">  2068</a>  </span><span>			return fmt.Errorf(errValidatingProp, cJournal, cRecurrenceDateTimes, err)</span>
<span class="hidden"><a id="L2069" href="#L2069">  2069</a>  </span><span>		}</span>
<span class="hidden"><a id="L2070" href="#L2070">  2070</a>  </span><span>	}</span>
<span class="hidden"><a id="L2071" href="#L2071">  2071</a>  </span>
<span class="hidden"><a id="L2072" href="#L2072">  2072</a>  </span><span>	return nil</span>
<span class="hidden"><a id="L2073" href="#L2073">  2073</a>  </span><span>}</span>
<span class="hidden"><a id="L2074" href="#L2074">  2074</a>  </span>
<span class="hidden"><a id="L2075" href="#L2075">  2075</a>  </span><span class="text">// FreeBusy provides a group of components that describe either a request for</span>
<span class="hidden"><a id="L2076" href="#L2076">  2076</a>  </span><span class="text">// free/busy time, describe a response to a request for free/busy time, or</span>
<span class="hidden"><a id="L2077" href="#L2077">  2077</a>  </span><span class="text">// describe a published set of busy time.</span>
<span class="hidden"><a id="L2078" href="#L2078">  2078</a>  </span><span>type FreeBusy struct {</span>
<span class="hidden"><a id="L2079" href="#L2079">  2079</a>  </span><span>	DateTimeStamp PropDateTimeStamp</span>
<span class="hidden"><a id="L2080" href="#L2080">  2080</a>  </span><span>	UID           PropUID</span>
<span class="hidden"><a id="L2081" href="#L2081">  2081</a>  </span><span>	Contact       *PropContact</span>
<span class="hidden"><a id="L2082" href="#L2082">  2082</a>  </span><span>	DateTimeStart *PropDateTimeStart</span>
<span class="hidden"><a id="L2083" href="#L2083">  2083</a>  </span><span>	DateTimeEnd   *PropDateTimeEnd</span>
<span class="hidden"><a id="L2084" href="#L2084">  2084</a>  </span><span>	Organizer     *PropOrganizer</span>
<span class="hidden"><a id="L2085" href="#L2085">  2085</a>  </span><span>	URL           *PropURL</span>
<span class="hidden"><a id="L2086" href="#L2086">  2086</a>  </span><span>	Attendee      []PropAttendee</span>
<span class="hidden"><a id="L2087" href="#L2087">  2087</a>  </span><span>	Comment       []PropComment</span>
<span class="hidden"><a id="L2088" href="#L2088">  2088</a>  </span><span>	FreeBusy      []PropFreeBusy</span>
<span class="hidden"><a id="L2089" href="#L2089">  2089</a>  </span><span>	RequestStatus []PropRequestStatus</span>
<span class="hidden"><a id="L2090" href="#L2090">  2090</a>  </span><span>}</span>
<span class="hidden"><a id="L2091" href="#L2091">  2091</a>  </span>
<span class="hidden"><a id="L2092" href="#L2092">  2092</a>  </span><span>func (s *FreeBusy) decode(t tokeniser) error {</span>
<span class="hidden"><a id="L2093" href="#L2093">  2093</a>  </span><span>	var requiredDateTimeStamp, requiredUID bool</span>
<span class="hidden"><a id="L2094" href="#L2094">  2094</a>  </span>
<span class="hidden"><a id="L2095" href="#L2095">  2095</a>  </span><span>Loop:</span>
<span class="hidden"><a id="L2096" href="#L2096">  2096</a>  </span><span>	for {</span>
<span class="hidden"><a id="L2097" href="#L2097">  2097</a>  </span><span>		p, err := t.GetPhrase()</span>
<span class="hidden"><a id="L2098" href="#L2098">  2098</a>  </span><span>		if err != nil {</span>
<span class="hidden"><a id="L2099" href="#L2099">  2099</a>  </span><span>			return fmt.Errorf(errDecodingType, cFreeBusy, err)</span>
<span class="hidden"><a id="L2100" href="#L2100">  2100</a>  </span><span>		} else if p.Type == parser.PhraseDone {</span>
<span class="hidden"><a id="L2101" href="#L2101">  2101</a>  </span><span>			return fmt.Errorf(errDecodingType, cFreeBusy, io.ErrUnexpectedEOF)</span>
<span class="hidden"><a id="L2102" href="#L2102">  2102</a>  </span><span>		}</span>
<span class="hidden"><a id="L2103" href="#L2103">  2103</a>  </span>
<span class="hidden"><a id="L2104" href="#L2104">  2104</a>  </span><span>		params := p.Data[1 : len(p.Data)-1]</span>
<span class="hidden"><a id="L2105" href="#L2105">  2105</a>  </span><span>		value := p.Data[len(p.Data)-1].Data</span>
<span class="hidden"><a id="L2106" href="#L2106">  2106</a>  </span>
<span class="hidden"><a id="L2107" href="#L2107">  2107</a>  </span><span>		switch strings.ToUpper(p.Data[0].Data) {</span>
<span class="hidden"><a id="L2108" href="#L2108">  2108</a>  </span><span>		case &#34;BEGIN&#34;:</span>
<span class="hidden"><a id="L2109" href="#L2109">  2109</a>  </span><span>			switch n := strings.ToUpper(value); n {</span>
<span class="hidden"><a id="L2110" href="#L2110">  2110</a>  </span><span>			default:</span>
<span class="hidden"><a id="L2111" href="#L2111">  2111</a>  </span><span>				if err := decodeDummy(t, n); err != nil {</span>
<span class="hidden"><a id="L2112" href="#L2112">  2112</a>  </span><span>					return fmt.Errorf(errDecodingType, cFreeBusy, err)</span>
<span class="hidden"><a id="L2113" href="#L2113">  2113</a>  </span><span>				}</span>
<span class="hidden"><a id="L2114" href="#L2114">  2114</a>  </span><span>			}</span>
<span class="hidden"><a id="L2115" href="#L2115">  2115</a>  </span><span>		case &#34;DTSTAMP&#34;:</span>
<span class="hidden"><a id="L2116" href="#L2116">  2116</a>  </span><span>			if requiredDateTimeStamp {</span>
<span class="hidden"><a id="L2117" href="#L2117">  2117</a>  </span><span>				return fmt.Errorf(errMultiple, cFreeBusy, cDateTimeStamp)</span>
<span class="hidden"><a id="L2118" href="#L2118">  2118</a>  </span><span>			}</span>
<span class="hidden"><a id="L2119" href="#L2119">  2119</a>  </span>
<span class="hidden"><a id="L2120" href="#L2120">  2120</a>  </span><span>			requiredDateTimeStamp = true</span>
<span class="hidden"><a id="L2121" href="#L2121">  2121</a>  </span>
<span class="hidden"><a id="L2122" href="#L2122">  2122</a>  </span><span>			if err := s.DateTimeStamp.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2123" href="#L2123">  2123</a>  </span><span>				return fmt.Errorf(errDecodingProp, cFreeBusy, cDateTimeStamp, err)</span>
<span class="hidden"><a id="L2124" href="#L2124">  2124</a>  </span><span>			}</span>
<span class="hidden"><a id="L2125" href="#L2125">  2125</a>  </span><span>		case &#34;UID&#34;:</span>
<span class="hidden"><a id="L2126" href="#L2126">  2126</a>  </span><span>			if requiredUID {</span>
<span class="hidden"><a id="L2127" href="#L2127">  2127</a>  </span><span>				return fmt.Errorf(errMultiple, cFreeBusy, cUID)</span>
<span class="hidden"><a id="L2128" href="#L2128">  2128</a>  </span><span>			}</span>
<span class="hidden"><a id="L2129" href="#L2129">  2129</a>  </span>
<span class="hidden"><a id="L2130" href="#L2130">  2130</a>  </span><span>			requiredUID = true</span>
<span class="hidden"><a id="L2131" href="#L2131">  2131</a>  </span>
<span class="hidden"><a id="L2132" href="#L2132">  2132</a>  </span><span>			if err := s.UID.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2133" href="#L2133">  2133</a>  </span><span>				return fmt.Errorf(errDecodingProp, cFreeBusy, cUID, err)</span>
<span class="hidden"><a id="L2134" href="#L2134">  2134</a>  </span><span>			}</span>
<span class="hidden"><a id="L2135" href="#L2135">  2135</a>  </span><span>		case &#34;CONTACT&#34;:</span>
<span class="hidden"><a id="L2136" href="#L2136">  2136</a>  </span><span>			if s.Contact != nil {</span>
<span class="hidden"><a id="L2137" href="#L2137">  2137</a>  </span><span>				return fmt.Errorf(errMultiple, cFreeBusy, cContact)</span>
<span class="hidden"><a id="L2138" href="#L2138">  2138</a>  </span><span>			}</span>
<span class="hidden"><a id="L2139" href="#L2139">  2139</a>  </span>
<span class="hidden"><a id="L2140" href="#L2140">  2140</a>  </span><span>			s.Contact = new(PropContact)</span>
<span class="hidden"><a id="L2141" href="#L2141">  2141</a>  </span>
<span class="hidden"><a id="L2142" href="#L2142">  2142</a>  </span><span>			if err := s.Contact.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2143" href="#L2143">  2143</a>  </span><span>				return fmt.Errorf(errDecodingProp, cFreeBusy, cContact, err)</span>
<span class="hidden"><a id="L2144" href="#L2144">  2144</a>  </span><span>			}</span>
<span class="hidden"><a id="L2145" href="#L2145">  2145</a>  </span><span>		case &#34;DTSTART&#34;:</span>
<span class="hidden"><a id="L2146" href="#L2146">  2146</a>  </span><span>			if s.DateTimeStart != nil {</span>
<span class="hidden"><a id="L2147" href="#L2147">  2147</a>  </span><span>				return fmt.Errorf(errMultiple, cFreeBusy, cDateTimeStart)</span>
<span class="hidden"><a id="L2148" href="#L2148">  2148</a>  </span><span>			}</span>
<span class="hidden"><a id="L2149" href="#L2149">  2149</a>  </span>
<span class="hidden"><a id="L2150" href="#L2150">  2150</a>  </span><span>			s.DateTimeStart = new(PropDateTimeStart)</span>
<span class="hidden"><a id="L2151" href="#L2151">  2151</a>  </span>
<span class="hidden"><a id="L2152" href="#L2152">  2152</a>  </span><span>			if err := s.DateTimeStart.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2153" href="#L2153">  2153</a>  </span><span>				return fmt.Errorf(errDecodingProp, cFreeBusy, cDateTimeStart, err)</span>
<span class="hidden"><a id="L2154" href="#L2154">  2154</a>  </span><span>			}</span>
<span class="hidden"><a id="L2155" href="#L2155">  2155</a>  </span><span>		case &#34;DTEND&#34;:</span>
<span class="hidden"><a id="L2156" href="#L2156">  2156</a>  </span><span>			if s.DateTimeEnd != nil {</span>
<span class="hidden"><a id="L2157" href="#L2157">  2157</a>  </span><span>				return fmt.Errorf(errMultiple, cFreeBusy, cDateTimeEnd)</span>
<span class="hidden"><a id="L2158" href="#L2158">  2158</a>  </span><span>			}</span>
<span class="hidden"><a id="L2159" href="#L2159">  2159</a>  </span>
<span class="hidden"><a id="L2160" href="#L2160">  2160</a>  </span><span>			s.DateTimeEnd = new(PropDateTimeEnd)</span>
<span class="hidden"><a id="L2161" href="#L2161">  2161</a>  </span>
<span class="hidden"><a id="L2162" href="#L2162">  2162</a>  </span><span>			if err := s.DateTimeEnd.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2163" href="#L2163">  2163</a>  </span><span>				return fmt.Errorf(errDecodingProp, cFreeBusy, cDateTimeEnd, err)</span>
<span class="hidden"><a id="L2164" href="#L2164">  2164</a>  </span><span>			}</span>
<span class="hidden"><a id="L2165" href="#L2165">  2165</a>  </span><span>		case &#34;ORGANIZER&#34;:</span>
<span class="hidden"><a id="L2166" href="#L2166">  2166</a>  </span><span>			if s.Organizer != nil {</span>
<span class="hidden"><a id="L2167" href="#L2167">  2167</a>  </span><span>				return fmt.Errorf(errMultiple, cFreeBusy, cOrganizer)</span>
<span class="hidden"><a id="L2168" href="#L2168">  2168</a>  </span><span>			}</span>
<span class="hidden"><a id="L2169" href="#L2169">  2169</a>  </span>
<span class="hidden"><a id="L2170" href="#L2170">  2170</a>  </span><span>			s.Organizer = new(PropOrganizer)</span>
<span class="hidden"><a id="L2171" href="#L2171">  2171</a>  </span>
<span class="hidden"><a id="L2172" href="#L2172">  2172</a>  </span><span>			if err := s.Organizer.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2173" href="#L2173">  2173</a>  </span><span>				return fmt.Errorf(errDecodingProp, cFreeBusy, cOrganizer, err)</span>
<span class="hidden"><a id="L2174" href="#L2174">  2174</a>  </span><span>			}</span>
<span class="hidden"><a id="L2175" href="#L2175">  2175</a>  </span><span>		case &#34;URL&#34;:</span>
<span class="hidden"><a id="L2176" href="#L2176">  2176</a>  </span><span>			if s.URL != nil {</span>
<span class="hidden"><a id="L2177" href="#L2177">  2177</a>  </span><span>				return fmt.Errorf(errMultiple, cFreeBusy, cURL)</span>
<span class="hidden"><a id="L2178" href="#L2178">  2178</a>  </span><span>			}</span>
<span class="hidden"><a id="L2179" href="#L2179">  2179</a>  </span>
<span class="hidden"><a id="L2180" href="#L2180">  2180</a>  </span><span>			s.URL = new(PropURL)</span>
<span class="hidden"><a id="L2181" href="#L2181">  2181</a>  </span>
<span class="hidden"><a id="L2182" href="#L2182">  2182</a>  </span><span>			if err := s.URL.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2183" href="#L2183">  2183</a>  </span><span>				return fmt.Errorf(errDecodingProp, cFreeBusy, cURL, err)</span>
<span class="hidden"><a id="L2184" href="#L2184">  2184</a>  </span><span>			}</span>
<span class="hidden"><a id="L2185" href="#L2185">  2185</a>  </span><span>		case &#34;ATTENDEE&#34;:</span>
<span class="hidden"><a id="L2186" href="#L2186">  2186</a>  </span><span>			var e PropAttendee</span>
<span class="hidden"><a id="L2187" href="#L2187">  2187</a>  </span>
<span class="hidden"><a id="L2188" href="#L2188">  2188</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2189" href="#L2189">  2189</a>  </span><span>				return fmt.Errorf(errDecodingProp, cFreeBusy, cAttendee, err)</span>
<span class="hidden"><a id="L2190" href="#L2190">  2190</a>  </span><span>			}</span>
<span class="hidden"><a id="L2191" href="#L2191">  2191</a>  </span>
<span class="hidden"><a id="L2192" href="#L2192">  2192</a>  </span><span>			s.Attendee = append(s.Attendee, e)</span>
<span class="hidden"><a id="L2193" href="#L2193">  2193</a>  </span><span>		case &#34;COMMENT&#34;:</span>
<span class="hidden"><a id="L2194" href="#L2194">  2194</a>  </span><span>			var e PropComment</span>
<span class="hidden"><a id="L2195" href="#L2195">  2195</a>  </span>
<span class="hidden"><a id="L2196" href="#L2196">  2196</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2197" href="#L2197">  2197</a>  </span><span>				return fmt.Errorf(errDecodingProp, cFreeBusy, cComment, err)</span>
<span class="hidden"><a id="L2198" href="#L2198">  2198</a>  </span><span>			}</span>
<span class="hidden"><a id="L2199" href="#L2199">  2199</a>  </span>
<span class="hidden"><a id="L2200" href="#L2200">  2200</a>  </span><span>			s.Comment = append(s.Comment, e)</span>
<span class="hidden"><a id="L2201" href="#L2201">  2201</a>  </span><span>		case &#34;FREEBUSY&#34;:</span>
<span class="hidden"><a id="L2202" href="#L2202">  2202</a>  </span><span>			var e PropFreeBusy</span>
<span class="hidden"><a id="L2203" href="#L2203">  2203</a>  </span>
<span class="hidden"><a id="L2204" href="#L2204">  2204</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2205" href="#L2205">  2205</a>  </span><span>				return fmt.Errorf(errDecodingProp, cFreeBusy, cFreeBusy, err)</span>
<span class="hidden"><a id="L2206" href="#L2206">  2206</a>  </span><span>			}</span>
<span class="hidden"><a id="L2207" href="#L2207">  2207</a>  </span>
<span class="hidden"><a id="L2208" href="#L2208">  2208</a>  </span><span>			s.FreeBusy = append(s.FreeBusy, e)</span>
<span class="hidden"><a id="L2209" href="#L2209">  2209</a>  </span><span>		case &#34;REQUEST-STATUS&#34;:</span>
<span class="hidden"><a id="L2210" href="#L2210">  2210</a>  </span><span>			var e PropRequestStatus</span>
<span class="hidden"><a id="L2211" href="#L2211">  2211</a>  </span>
<span class="hidden"><a id="L2212" href="#L2212">  2212</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2213" href="#L2213">  2213</a>  </span><span>				return fmt.Errorf(errDecodingProp, cFreeBusy, cRequestStatus, err)</span>
<span class="hidden"><a id="L2214" href="#L2214">  2214</a>  </span><span>			}</span>
<span class="hidden"><a id="L2215" href="#L2215">  2215</a>  </span>
<span class="hidden"><a id="L2216" href="#L2216">  2216</a>  </span><span>			s.RequestStatus = append(s.RequestStatus, e)</span>
<span class="hidden"><a id="L2217" href="#L2217">  2217</a>  </span><span>		case &#34;END&#34;:</span>
<span class="hidden"><a id="L2218" href="#L2218">  2218</a>  </span><span>			if value != &#34;VFREEBUSY&#34; {</span>
<span class="hidden"><a id="L2219" href="#L2219">  2219</a>  </span><span>				return fmt.Errorf(errDecodingType, cFreeBusy, ErrInvalidEnd)</span>
<span class="hidden"><a id="L2220" href="#L2220">  2220</a>  </span><span>			}</span>
<span class="hidden"><a id="L2221" href="#L2221">  2221</a>  </span>
<span class="hidden"><a id="L2222" href="#L2222">  2222</a>  </span><span>			break Loop</span>
<span class="hidden"><a id="L2223" href="#L2223">  2223</a>  </span><span>		}</span>
<span class="hidden"><a id="L2224" href="#L2224">  2224</a>  </span><span>	}</span>
<span class="hidden"><a id="L2225" href="#L2225">  2225</a>  </span>
<span class="hidden"><a id="L2226" href="#L2226">  2226</a>  </span><span>	if !requiredDateTimeStamp || !requiredUID {</span>
<span class="hidden"><a id="L2227" href="#L2227">  2227</a>  </span><span>		return fmt.Errorf(errDecodingType, cFreeBusy, ErrMissingRequired)</span>
<span class="hidden"><a id="L2228" href="#L2228">  2228</a>  </span><span>	}</span>
<span class="hidden"><a id="L2229" href="#L2229">  2229</a>  </span>
<span class="hidden"><a id="L2230" href="#L2230">  2230</a>  </span><span>	return nil</span>
<span class="hidden"><a id="L2231" href="#L2231">  2231</a>  </span><span>}</span>
<span class="hidden"><a id="L2232" href="#L2232">  2232</a>  </span>
<span class="hidden"><a id="L2233" href="#L2233">  2233</a>  </span><span>func (s *FreeBusy) encode(w writer) {</span>
<span class="hidden"><a id="L2234" href="#L2234">  2234</a>  </span><span>	w.WriteString(&#34;BEGIN:VFREEBUSY\r\n&#34;)</span>
<span class="hidden"><a id="L2235" href="#L2235">  2235</a>  </span><span>	s.DateTimeStamp.encode(w)</span>
<span class="hidden"><a id="L2236" href="#L2236">  2236</a>  </span><span>	s.UID.encode(w)</span>
<span class="hidden"><a id="L2237" href="#L2237">  2237</a>  </span>
<span class="hidden"><a id="L2238" href="#L2238">  2238</a>  </span><span>	if s.Contact != nil {</span>
<span class="hidden"><a id="L2239" href="#L2239">  2239</a>  </span><span>		s.Contact.encode(w)</span>
<span class="hidden"><a id="L2240" href="#L2240">  2240</a>  </span><span>	}</span>
<span class="hidden"><a id="L2241" href="#L2241">  2241</a>  </span>
<span class="hidden"><a id="L2242" href="#L2242">  2242</a>  </span><span>	if s.DateTimeStart != nil {</span>
<span class="hidden"><a id="L2243" href="#L2243">  2243</a>  </span><span>		s.DateTimeStart.encode(w)</span>
<span class="hidden"><a id="L2244" href="#L2244">  2244</a>  </span><span>	}</span>
<span class="hidden"><a id="L2245" href="#L2245">  2245</a>  </span>
<span class="hidden"><a id="L2246" href="#L2246">  2246</a>  </span><span>	if s.DateTimeEnd != nil {</span>
<span class="hidden"><a id="L2247" href="#L2247">  2247</a>  </span><span>		s.DateTimeEnd.encode(w)</span>
<span class="hidden"><a id="L2248" href="#L2248">  2248</a>  </span><span>	}</span>
<span class="hidden"><a id="L2249" href="#L2249">  2249</a>  </span>
<span class="hidden"><a id="L2250" href="#L2250">  2250</a>  </span><span>	if s.Organizer != nil {</span>
<span class="hidden"><a id="L2251" href="#L2251">  2251</a>  </span><span>		s.Organizer.encode(w)</span>
<span class="hidden"><a id="L2252" href="#L2252">  2252</a>  </span><span>	}</span>
<span class="hidden"><a id="L2253" href="#L2253">  2253</a>  </span>
<span class="hidden"><a id="L2254" href="#L2254">  2254</a>  </span><span>	if s.URL != nil {</span>
<span class="hidden"><a id="L2255" href="#L2255">  2255</a>  </span><span>		s.URL.encode(w)</span>
<span class="hidden"><a id="L2256" href="#L2256">  2256</a>  </span><span>	}</span>
<span class="hidden"><a id="L2257" href="#L2257">  2257</a>  </span>
<span class="hidden"><a id="L2258" href="#L2258">  2258</a>  </span><span>	for n := range s.Attendee {</span>
<span class="hidden"><a id="L2259" href="#L2259">  2259</a>  </span><span>		s.Attendee[n].encode(w)</span>
<span class="hidden"><a id="L2260" href="#L2260">  2260</a>  </span><span>	}</span>
<span class="hidden"><a id="L2261" href="#L2261">  2261</a>  </span>
<span class="hidden"><a id="L2262" href="#L2262">  2262</a>  </span><span>	for n := range s.Comment {</span>
<span class="hidden"><a id="L2263" href="#L2263">  2263</a>  </span><span>		s.Comment[n].encode(w)</span>
<span class="hidden"><a id="L2264" href="#L2264">  2264</a>  </span><span>	}</span>
<span class="hidden"><a id="L2265" href="#L2265">  2265</a>  </span>
<span class="hidden"><a id="L2266" href="#L2266">  2266</a>  </span><span>	for n := range s.FreeBusy {</span>
<span class="hidden"><a id="L2267" href="#L2267">  2267</a>  </span><span>		s.FreeBusy[n].encode(w)</span>
<span class="hidden"><a id="L2268" href="#L2268">  2268</a>  </span><span>	}</span>
<span class="hidden"><a id="L2269" href="#L2269">  2269</a>  </span>
<span class="hidden"><a id="L2270" href="#L2270">  2270</a>  </span><span>	for n := range s.RequestStatus {</span>
<span class="hidden"><a id="L2271" href="#L2271">  2271</a>  </span><span>		s.RequestStatus[n].encode(w)</span>
<span class="hidden"><a id="L2272" href="#L2272">  2272</a>  </span><span>	}</span>
<span class="hidden"><a id="L2273" href="#L2273">  2273</a>  </span>
<span class="hidden"><a id="L2274" href="#L2274">  2274</a>  </span><span>	w.WriteString(&#34;END:VFREEBUSY\r\n&#34;)</span>
<span class="hidden"><a id="L2275" href="#L2275">  2275</a>  </span><span>}</span>
<span class="hidden"><a id="L2276" href="#L2276">  2276</a>  </span>
<span class="hidden"><a id="L2277" href="#L2277">  2277</a>  </span><span>func (s *FreeBusy) valid() error {</span>
<span class="hidden"><a id="L2278" href="#L2278">  2278</a>  </span><span>	if err := s.DateTimeStamp.valid(); err != nil {</span>
<span class="hidden"><a id="L2279" href="#L2279">  2279</a>  </span><span>		return fmt.Errorf(errValidatingProp, cFreeBusy, cDateTimeStamp, err)</span>
<span class="hidden"><a id="L2280" href="#L2280">  2280</a>  </span><span>	}</span>
<span class="hidden"><a id="L2281" href="#L2281">  2281</a>  </span>
<span class="hidden"><a id="L2282" href="#L2282">  2282</a>  </span><span>	if err := s.UID.valid(); err != nil {</span>
<span class="hidden"><a id="L2283" href="#L2283">  2283</a>  </span><span>		return fmt.Errorf(errValidatingProp, cFreeBusy, cUID, err)</span>
<span class="hidden"><a id="L2284" href="#L2284">  2284</a>  </span><span>	}</span>
<span class="hidden"><a id="L2285" href="#L2285">  2285</a>  </span>
<span class="hidden"><a id="L2286" href="#L2286">  2286</a>  </span><span>	if s.Contact != nil {</span>
<span class="hidden"><a id="L2287" href="#L2287">  2287</a>  </span><span>		if err := s.Contact.valid(); err != nil {</span>
<span class="hidden"><a id="L2288" href="#L2288">  2288</a>  </span><span>			return fmt.Errorf(errValidatingProp, cFreeBusy, cContact, err)</span>
<span class="hidden"><a id="L2289" href="#L2289">  2289</a>  </span><span>		}</span>
<span class="hidden"><a id="L2290" href="#L2290">  2290</a>  </span><span>	}</span>
<span class="hidden"><a id="L2291" href="#L2291">  2291</a>  </span>
<span class="hidden"><a id="L2292" href="#L2292">  2292</a>  </span><span>	if s.DateTimeStart != nil {</span>
<span class="hidden"><a id="L2293" href="#L2293">  2293</a>  </span><span>		if err := s.DateTimeStart.valid(); err != nil {</span>
<span class="hidden"><a id="L2294" href="#L2294">  2294</a>  </span><span>			return fmt.Errorf(errValidatingProp, cFreeBusy, cDateTimeStart, err)</span>
<span class="hidden"><a id="L2295" href="#L2295">  2295</a>  </span><span>		}</span>
<span class="hidden"><a id="L2296" href="#L2296">  2296</a>  </span><span>	}</span>
<span class="hidden"><a id="L2297" href="#L2297">  2297</a>  </span>
<span class="hidden"><a id="L2298" href="#L2298">  2298</a>  </span><span>	if s.DateTimeEnd != nil {</span>
<span class="hidden"><a id="L2299" href="#L2299">  2299</a>  </span><span>		if err := s.DateTimeEnd.valid(); err != nil {</span>
<span class="hidden"><a id="L2300" href="#L2300">  2300</a>  </span><span>			return fmt.Errorf(errValidatingProp, cFreeBusy, cDateTimeEnd, err)</span>
<span class="hidden"><a id="L2301" href="#L2301">  2301</a>  </span><span>		}</span>
<span class="hidden"><a id="L2302" href="#L2302">  2302</a>  </span><span>	}</span>
<span class="hidden"><a id="L2303" href="#L2303">  2303</a>  </span>
<span class="hidden"><a id="L2304" href="#L2304">  2304</a>  </span><span>	if s.Organizer != nil {</span>
<span class="hidden"><a id="L2305" href="#L2305">  2305</a>  </span><span>		if err := s.Organizer.valid(); err != nil {</span>
<span class="hidden"><a id="L2306" href="#L2306">  2306</a>  </span><span>			return fmt.Errorf(errValidatingProp, cFreeBusy, cOrganizer, err)</span>
<span class="hidden"><a id="L2307" href="#L2307">  2307</a>  </span><span>		}</span>
<span class="hidden"><a id="L2308" href="#L2308">  2308</a>  </span><span>	}</span>
<span class="hidden"><a id="L2309" href="#L2309">  2309</a>  </span>
<span class="hidden"><a id="L2310" href="#L2310">  2310</a>  </span><span>	if s.URL != nil {</span>
<span class="hidden"><a id="L2311" href="#L2311">  2311</a>  </span><span>		if err := s.URL.valid(); err != nil {</span>
<span class="hidden"><a id="L2312" href="#L2312">  2312</a>  </span><span>			return fmt.Errorf(errValidatingProp, cFreeBusy, cURL, err)</span>
<span class="hidden"><a id="L2313" href="#L2313">  2313</a>  </span><span>		}</span>
<span class="hidden"><a id="L2314" href="#L2314">  2314</a>  </span><span>	}</span>
<span class="hidden"><a id="L2315" href="#L2315">  2315</a>  </span>
<span class="hidden"><a id="L2316" href="#L2316">  2316</a>  </span><span>	for n := range s.Attendee {</span>
<span class="hidden"><a id="L2317" href="#L2317">  2317</a>  </span><span>		if err := s.Attendee[n].valid(); err != nil {</span>
<span class="hidden"><a id="L2318" href="#L2318">  2318</a>  </span><span>			return fmt.Errorf(errValidatingProp, cFreeBusy, cAttendee, err)</span>
<span class="hidden"><a id="L2319" href="#L2319">  2319</a>  </span><span>		}</span>
<span class="hidden"><a id="L2320" href="#L2320">  2320</a>  </span><span>	}</span>
<span class="hidden"><a id="L2321" href="#L2321">  2321</a>  </span>
<span class="hidden"><a id="L2322" href="#L2322">  2322</a>  </span><span>	for n := range s.Comment {</span>
<span class="hidden"><a id="L2323" href="#L2323">  2323</a>  </span><span>		if err := s.Comment[n].valid(); err != nil {</span>
<span class="hidden"><a id="L2324" href="#L2324">  2324</a>  </span><span>			return fmt.Errorf(errValidatingProp, cFreeBusy, cComment, err)</span>
<span class="hidden"><a id="L2325" href="#L2325">  2325</a>  </span><span>		}</span>
<span class="hidden"><a id="L2326" href="#L2326">  2326</a>  </span><span>	}</span>
<span class="hidden"><a id="L2327" href="#L2327">  2327</a>  </span>
<span class="hidden"><a id="L2328" href="#L2328">  2328</a>  </span><span>	for n := range s.FreeBusy {</span>
<span class="hidden"><a id="L2329" href="#L2329">  2329</a>  </span><span>		if err := s.FreeBusy[n].valid(); err != nil {</span>
<span class="hidden"><a id="L2330" href="#L2330">  2330</a>  </span><span>			return fmt.Errorf(errValidatingProp, cFreeBusy, cFreeBusy, err)</span>
<span class="hidden"><a id="L2331" href="#L2331">  2331</a>  </span><span>		}</span>
<span class="hidden"><a id="L2332" href="#L2332">  2332</a>  </span><span>	}</span>
<span class="hidden"><a id="L2333" href="#L2333">  2333</a>  </span>
<span class="hidden"><a id="L2334" href="#L2334">  2334</a>  </span><span>	for n := range s.RequestStatus {</span>
<span class="hidden"><a id="L2335" href="#L2335">  2335</a>  </span><span>		if err := s.RequestStatus[n].valid(); err != nil {</span>
<span class="hidden"><a id="L2336" href="#L2336">  2336</a>  </span><span>			return fmt.Errorf(errValidatingProp, cFreeBusy, cRequestStatus, err)</span>
<span class="hidden"><a id="L2337" href="#L2337">  2337</a>  </span><span>		}</span>
<span class="hidden"><a id="L2338" href="#L2338">  2338</a>  </span><span>	}</span>
<span class="hidden"><a id="L2339" href="#L2339">  2339</a>  </span>
<span class="hidden"><a id="L2340" href="#L2340">  2340</a>  </span><span>	return nil</span>
<span class="hidden"><a id="L2341" href="#L2341">  2341</a>  </span><span>}</span>
<span class="hidden"><a id="L2342" href="#L2342">  2342</a>  </span>
<span class="hidden"><a id="L2343" href="#L2343">  2343</a>  </span><span class="text">// Timezone provide a group of components that defines a time zone.</span>
<span class="hidden"><a id="L2344" href="#L2344">  2344</a>  </span><span>type Timezone struct {</span>
<span class="hidden"><a id="L2345" href="#L2345">  2345</a>  </span><span>	TimezoneID   PropTimezoneID</span>
<span class="hidden"><a id="L2346" href="#L2346">  2346</a>  </span><span>	LastModified *PropLastModified</span>
<span class="hidden"><a id="L2347" href="#L2347">  2347</a>  </span><span>	TimezoneURL  *PropTimezoneURL</span>
<span class="hidden"><a id="L2348" href="#L2348">  2348</a>  </span><span>	Standard     []Standard</span>
<span class="hidden"><a id="L2349" href="#L2349">  2349</a>  </span><span>	Daylight     []Daylight</span>
<span class="hidden"><a id="L2350" href="#L2350">  2350</a>  </span><span>}</span>
<span class="hidden"><a id="L2351" href="#L2351">  2351</a>  </span>
<span class="hidden"><a id="L2352" href="#L2352">  2352</a>  </span><span>func (s *Timezone) decode(t tokeniser) error {</span>
<span class="hidden"><a id="L2353" href="#L2353">  2353</a>  </span><span>	var requiredTimezoneID bool</span>
<span class="hidden"><a id="L2354" href="#L2354">  2354</a>  </span>
<span class="hidden"><a id="L2355" href="#L2355">  2355</a>  </span><span>Loop:</span>
<span class="hidden"><a id="L2356" href="#L2356">  2356</a>  </span><span>	for {</span>
<span class="hidden"><a id="L2357" href="#L2357">  2357</a>  </span><span>		p, err := t.GetPhrase()</span>
<span class="hidden"><a id="L2358" href="#L2358">  2358</a>  </span><span>		if err != nil {</span>
<span class="hidden"><a id="L2359" href="#L2359">  2359</a>  </span><span>			return fmt.Errorf(errDecodingType, cTimezone, err)</span>
<span class="hidden"><a id="L2360" href="#L2360">  2360</a>  </span><span>		} else if p.Type == parser.PhraseDone {</span>
<span class="hidden"><a id="L2361" href="#L2361">  2361</a>  </span><span>			return fmt.Errorf(errDecodingType, cTimezone, io.ErrUnexpectedEOF)</span>
<span class="hidden"><a id="L2362" href="#L2362">  2362</a>  </span><span>		}</span>
<span class="hidden"><a id="L2363" href="#L2363">  2363</a>  </span>
<span class="hidden"><a id="L2364" href="#L2364">  2364</a>  </span><span>		params := p.Data[1 : len(p.Data)-1]</span>
<span class="hidden"><a id="L2365" href="#L2365">  2365</a>  </span><span>		value := p.Data[len(p.Data)-1].Data</span>
<span class="hidden"><a id="L2366" href="#L2366">  2366</a>  </span>
<span class="hidden"><a id="L2367" href="#L2367">  2367</a>  </span><span>		switch strings.ToUpper(p.Data[0].Data) {</span>
<span class="hidden"><a id="L2368" href="#L2368">  2368</a>  </span><span>		case &#34;BEGIN&#34;:</span>
<span class="hidden"><a id="L2369" href="#L2369">  2369</a>  </span><span>			switch n := strings.ToUpper(value); n {</span>
<span class="hidden"><a id="L2370" href="#L2370">  2370</a>  </span><span>			case &#34;STANDARD&#34;:</span>
<span class="hidden"><a id="L2371" href="#L2371">  2371</a>  </span><span>				var e Standard</span>
<span class="hidden"><a id="L2372" href="#L2372">  2372</a>  </span>
<span class="hidden"><a id="L2373" href="#L2373">  2373</a>  </span><span>				if err := e.decode(t); err != nil {</span>
<span class="hidden"><a id="L2374" href="#L2374">  2374</a>  </span><span>					return fmt.Errorf(errDecodingProp, cTimezone, cStandard, err)</span>
<span class="hidden"><a id="L2375" href="#L2375">  2375</a>  </span><span>				}</span>
<span class="hidden"><a id="L2376" href="#L2376">  2376</a>  </span>
<span class="hidden"><a id="L2377" href="#L2377">  2377</a>  </span><span>				s.Standard = append(s.Standard, e)</span>
<span class="hidden"><a id="L2378" href="#L2378">  2378</a>  </span><span>			case &#34;DAYLIGHT&#34;:</span>
<span class="hidden"><a id="L2379" href="#L2379">  2379</a>  </span><span>				var e Daylight</span>
<span class="hidden"><a id="L2380" href="#L2380">  2380</a>  </span>
<span class="hidden"><a id="L2381" href="#L2381">  2381</a>  </span><span>				if err := e.decode(t); err != nil {</span>
<span class="hidden"><a id="L2382" href="#L2382">  2382</a>  </span><span>					return fmt.Errorf(errDecodingProp, cTimezone, cDaylight, err)</span>
<span class="hidden"><a id="L2383" href="#L2383">  2383</a>  </span><span>				}</span>
<span class="hidden"><a id="L2384" href="#L2384">  2384</a>  </span>
<span class="hidden"><a id="L2385" href="#L2385">  2385</a>  </span><span>				s.Daylight = append(s.Daylight, e)</span>
<span class="hidden"><a id="L2386" href="#L2386">  2386</a>  </span><span>			default:</span>
<span class="hidden"><a id="L2387" href="#L2387">  2387</a>  </span><span>				if err := decodeDummy(t, n); err != nil {</span>
<span class="hidden"><a id="L2388" href="#L2388">  2388</a>  </span><span>					return fmt.Errorf(errDecodingType, cTimezone, err)</span>
<span class="hidden"><a id="L2389" href="#L2389">  2389</a>  </span><span>				}</span>
<span class="hidden"><a id="L2390" href="#L2390">  2390</a>  </span><span>			}</span>
<span class="hidden"><a id="L2391" href="#L2391">  2391</a>  </span><span>		case &#34;TZID&#34;:</span>
<span class="hidden"><a id="L2392" href="#L2392">  2392</a>  </span><span>			if requiredTimezoneID {</span>
<span class="hidden"><a id="L2393" href="#L2393">  2393</a>  </span><span>				return fmt.Errorf(errMultiple, cTimezone, cTimezoneID)</span>
<span class="hidden"><a id="L2394" href="#L2394">  2394</a>  </span><span>			}</span>
<span class="hidden"><a id="L2395" href="#L2395">  2395</a>  </span>
<span class="hidden"><a id="L2396" href="#L2396">  2396</a>  </span><span>			requiredTimezoneID = true</span>
<span class="hidden"><a id="L2397" href="#L2397">  2397</a>  </span>
<span class="hidden"><a id="L2398" href="#L2398">  2398</a>  </span><span>			if err := s.TimezoneID.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2399" href="#L2399">  2399</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTimezone, cTimezoneID, err)</span>
<span class="hidden"><a id="L2400" href="#L2400">  2400</a>  </span><span>			}</span>
<span class="hidden"><a id="L2401" href="#L2401">  2401</a>  </span><span>		case &#34;LAST-MOD&#34;:</span>
<span class="hidden"><a id="L2402" href="#L2402">  2402</a>  </span><span>			if s.LastModified != nil {</span>
<span class="hidden"><a id="L2403" href="#L2403">  2403</a>  </span><span>				return fmt.Errorf(errMultiple, cTimezone, cLastModified)</span>
<span class="hidden"><a id="L2404" href="#L2404">  2404</a>  </span><span>			}</span>
<span class="hidden"><a id="L2405" href="#L2405">  2405</a>  </span>
<span class="hidden"><a id="L2406" href="#L2406">  2406</a>  </span><span>			s.LastModified = new(PropLastModified)</span>
<span class="hidden"><a id="L2407" href="#L2407">  2407</a>  </span>
<span class="hidden"><a id="L2408" href="#L2408">  2408</a>  </span><span>			if err := s.LastModified.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2409" href="#L2409">  2409</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTimezone, cLastModified, err)</span>
<span class="hidden"><a id="L2410" href="#L2410">  2410</a>  </span><span>			}</span>
<span class="hidden"><a id="L2411" href="#L2411">  2411</a>  </span><span>		case &#34;TZURL&#34;:</span>
<span class="hidden"><a id="L2412" href="#L2412">  2412</a>  </span><span>			if s.TimezoneURL != nil {</span>
<span class="hidden"><a id="L2413" href="#L2413">  2413</a>  </span><span>				return fmt.Errorf(errMultiple, cTimezone, cTimezoneURL)</span>
<span class="hidden"><a id="L2414" href="#L2414">  2414</a>  </span><span>			}</span>
<span class="hidden"><a id="L2415" href="#L2415">  2415</a>  </span>
<span class="hidden"><a id="L2416" href="#L2416">  2416</a>  </span><span>			s.TimezoneURL = new(PropTimezoneURL)</span>
<span class="hidden"><a id="L2417" href="#L2417">  2417</a>  </span>
<span class="hidden"><a id="L2418" href="#L2418">  2418</a>  </span><span>			if err := s.TimezoneURL.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2419" href="#L2419">  2419</a>  </span><span>				return fmt.Errorf(errDecodingProp, cTimezone, cTimezoneURL, err)</span>
<span class="hidden"><a id="L2420" href="#L2420">  2420</a>  </span><span>			}</span>
<span class="hidden"><a id="L2421" href="#L2421">  2421</a>  </span><span>		case &#34;END&#34;:</span>
<span class="hidden"><a id="L2422" href="#L2422">  2422</a>  </span><span>			if value != &#34;VTIMEZONE&#34; {</span>
<span class="hidden"><a id="L2423" href="#L2423">  2423</a>  </span><span>				return fmt.Errorf(errDecodingType, cTimezone, ErrInvalidEnd)</span>
<span class="hidden"><a id="L2424" href="#L2424">  2424</a>  </span><span>			}</span>
<span class="hidden"><a id="L2425" href="#L2425">  2425</a>  </span>
<span class="hidden"><a id="L2426" href="#L2426">  2426</a>  </span><span>			break Loop</span>
<span class="hidden"><a id="L2427" href="#L2427">  2427</a>  </span><span>		}</span>
<span class="hidden"><a id="L2428" href="#L2428">  2428</a>  </span><span>	}</span>
<span class="hidden"><a id="L2429" href="#L2429">  2429</a>  </span>
<span class="hidden"><a id="L2430" href="#L2430">  2430</a>  </span><span>	if !requiredTimezoneID {</span>
<span class="hidden"><a id="L2431" href="#L2431">  2431</a>  </span><span>		return fmt.Errorf(errDecodingType, cTimezone, ErrMissingRequired)</span>
<span class="hidden"><a id="L2432" href="#L2432">  2432</a>  </span><span>	}</span>
<span class="hidden"><a id="L2433" href="#L2433">  2433</a>  </span>
<span class="hidden"><a id="L2434" href="#L2434">  2434</a>  </span><span>	if s.Standard == nil &amp;&amp; s.Daylight == nil {</span>
<span class="hidden"><a id="L2435" href="#L2435">  2435</a>  </span><span>		return fmt.Errorf(errDecodingType, cTimezone, ErrRequirementNotMet)</span>
<span class="hidden"><a id="L2436" href="#L2436">  2436</a>  </span><span>	}</span>
<span class="hidden"><a id="L2437" href="#L2437">  2437</a>  </span>
<span class="hidden"><a id="L2438" href="#L2438">  2438</a>  </span><span>	return nil</span>
<span class="hidden"><a id="L2439" href="#L2439">  2439</a>  </span><span>}</span>
<span class="hidden"><a id="L2440" href="#L2440">  2440</a>  </span>
<span class="hidden"><a id="L2441" href="#L2441">  2441</a>  </span><span>func (s *Timezone) encode(w writer) {</span>
<span class="hidden"><a id="L2442" href="#L2442">  2442</a>  </span><span>	w.WriteString(&#34;BEGIN:VTIMEZONE\r\n&#34;)</span>
<span class="hidden"><a id="L2443" href="#L2443">  2443</a>  </span><span>	s.TimezoneID.encode(w)</span>
<span class="hidden"><a id="L2444" href="#L2444">  2444</a>  </span>
<span class="hidden"><a id="L2445" href="#L2445">  2445</a>  </span><span>	if s.LastModified != nil {</span>
<span class="hidden"><a id="L2446" href="#L2446">  2446</a>  </span><span>		s.LastModified.encode(w)</span>
<span class="hidden"><a id="L2447" href="#L2447">  2447</a>  </span><span>	}</span>
<span class="hidden"><a id="L2448" href="#L2448">  2448</a>  </span>
<span class="hidden"><a id="L2449" href="#L2449">  2449</a>  </span><span>	if s.TimezoneURL != nil {</span>
<span class="hidden"><a id="L2450" href="#L2450">  2450</a>  </span><span>		s.TimezoneURL.encode(w)</span>
<span class="hidden"><a id="L2451" href="#L2451">  2451</a>  </span><span>	}</span>
<span class="hidden"><a id="L2452" href="#L2452">  2452</a>  </span>
<span class="hidden"><a id="L2453" href="#L2453">  2453</a>  </span><span>	for n := range s.Standard {</span>
<span class="hidden"><a id="L2454" href="#L2454">  2454</a>  </span><span>		s.Standard[n].encode(w)</span>
<span class="hidden"><a id="L2455" href="#L2455">  2455</a>  </span><span>	}</span>
<span class="hidden"><a id="L2456" href="#L2456">  2456</a>  </span>
<span class="hidden"><a id="L2457" href="#L2457">  2457</a>  </span><span>	for n := range s.Daylight {</span>
<span class="hidden"><a id="L2458" href="#L2458">  2458</a>  </span><span>		s.Daylight[n].encode(w)</span>
<span class="hidden"><a id="L2459" href="#L2459">  2459</a>  </span><span>	}</span>
<span class="hidden"><a id="L2460" href="#L2460">  2460</a>  </span>
<span class="hidden"><a id="L2461" href="#L2461">  2461</a>  </span><span>	w.WriteString(&#34;END:VTIMEZONE\r\n&#34;)</span>
<span class="hidden"><a id="L2462" href="#L2462">  2462</a>  </span><span>}</span>
<span class="hidden"><a id="L2463" href="#L2463">  2463</a>  </span>
<span class="hidden"><a id="L2464" href="#L2464">  2464</a>  </span><span>func (s *Timezone) valid() error {</span>
<span class="hidden"><a id="L2465" href="#L2465">  2465</a>  </span><span>	if err := s.TimezoneID.valid(); err != nil {</span>
<span class="hidden"><a id="L2466" href="#L2466">  2466</a>  </span><span>		return fmt.Errorf(errValidatingProp, cTimezone, cTimezoneID, err)</span>
<span class="hidden"><a id="L2467" href="#L2467">  2467</a>  </span><span>	}</span>
<span class="hidden"><a id="L2468" href="#L2468">  2468</a>  </span>
<span class="hidden"><a id="L2469" href="#L2469">  2469</a>  </span><span>	if s.LastModified != nil {</span>
<span class="hidden"><a id="L2470" href="#L2470">  2470</a>  </span><span>		if err := s.LastModified.valid(); err != nil {</span>
<span class="hidden"><a id="L2471" href="#L2471">  2471</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTimezone, cLastModified, err)</span>
<span class="hidden"><a id="L2472" href="#L2472">  2472</a>  </span><span>		}</span>
<span class="hidden"><a id="L2473" href="#L2473">  2473</a>  </span><span>	}</span>
<span class="hidden"><a id="L2474" href="#L2474">  2474</a>  </span>
<span class="hidden"><a id="L2475" href="#L2475">  2475</a>  </span><span>	if s.TimezoneURL != nil {</span>
<span class="hidden"><a id="L2476" href="#L2476">  2476</a>  </span><span>		if err := s.TimezoneURL.valid(); err != nil {</span>
<span class="hidden"><a id="L2477" href="#L2477">  2477</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTimezone, cTimezoneURL, err)</span>
<span class="hidden"><a id="L2478" href="#L2478">  2478</a>  </span><span>		}</span>
<span class="hidden"><a id="L2479" href="#L2479">  2479</a>  </span><span>	}</span>
<span class="hidden"><a id="L2480" href="#L2480">  2480</a>  </span>
<span class="hidden"><a id="L2481" href="#L2481">  2481</a>  </span><span>	for n := range s.Standard {</span>
<span class="hidden"><a id="L2482" href="#L2482">  2482</a>  </span><span>		if err := s.Standard[n].valid(); err != nil {</span>
<span class="hidden"><a id="L2483" href="#L2483">  2483</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTimezone, cStandard, err)</span>
<span class="hidden"><a id="L2484" href="#L2484">  2484</a>  </span><span>		}</span>
<span class="hidden"><a id="L2485" href="#L2485">  2485</a>  </span><span>	}</span>
<span class="hidden"><a id="L2486" href="#L2486">  2486</a>  </span>
<span class="hidden"><a id="L2487" href="#L2487">  2487</a>  </span><span>	for n := range s.Daylight {</span>
<span class="hidden"><a id="L2488" href="#L2488">  2488</a>  </span><span>		if err := s.Daylight[n].valid(); err != nil {</span>
<span class="hidden"><a id="L2489" href="#L2489">  2489</a>  </span><span>			return fmt.Errorf(errValidatingProp, cTimezone, cDaylight, err)</span>
<span class="hidden"><a id="L2490" href="#L2490">  2490</a>  </span><span>		}</span>
<span class="hidden"><a id="L2491" href="#L2491">  2491</a>  </span><span>	}</span>
<span class="hidden"><a id="L2492" href="#L2492">  2492</a>  </span>
<span class="hidden"><a id="L2493" href="#L2493">  2493</a>  </span><span>	return nil</span>
<span class="hidden"><a id="L2494" href="#L2494">  2494</a>  </span><span>}</span>
<span class="hidden"><a id="L2495" href="#L2495">  2495</a>  </span>
<span class="hidden"><a id="L2496" href="#L2496">  2496</a>  </span><span class="text">// Standard represents standard timezone rules.</span>
<span class="hidden"><a id="L2497" href="#L2497">  2497</a>  </span><span>type Standard struct {</span>
<span class="hidden"><a id="L2498" href="#L2498">  2498</a>  </span><span>	DateTimeStart       PropDateTimeStart</span>
<span class="hidden"><a id="L2499" href="#L2499">  2499</a>  </span><span>	TimezoneOffsetTo    PropTimezoneOffsetTo</span>
<span class="hidden"><a id="L2500" href="#L2500">  2500</a>  </span><span>	TimezoneOffsetFrom  PropTimezoneOffsetFrom</span>
<span class="hidden"><a id="L2501" href="#L2501">  2501</a>  </span><span>	RecurrenceRule      *PropRecurrenceRule</span>
<span class="hidden"><a id="L2502" href="#L2502">  2502</a>  </span><span>	Comment             []PropComment</span>
<span class="hidden"><a id="L2503" href="#L2503">  2503</a>  </span><span>	RecurrenceDateTimes []PropRecurrenceDateTimes</span>
<span class="hidden"><a id="L2504" href="#L2504">  2504</a>  </span><span>	TimezoneName        []PropTimezoneName</span>
<span class="hidden"><a id="L2505" href="#L2505">  2505</a>  </span><span>}</span>
<span class="hidden"><a id="L2506" href="#L2506">  2506</a>  </span>
<span class="hidden"><a id="L2507" href="#L2507">  2507</a>  </span><span>func (s *Standard) decode(t tokeniser) error {</span>
<span class="hidden"><a id="L2508" href="#L2508">  2508</a>  </span><span>	var requiredDateTimeStart, requiredTimezoneOffsetTo, requiredTimezoneOffsetFrom bool</span>
<span class="hidden"><a id="L2509" href="#L2509">  2509</a>  </span>
<span class="hidden"><a id="L2510" href="#L2510">  2510</a>  </span><span>Loop:</span>
<span class="hidden"><a id="L2511" href="#L2511">  2511</a>  </span><span>	for {</span>
<span class="hidden"><a id="L2512" href="#L2512">  2512</a>  </span><span>		p, err := t.GetPhrase()</span>
<span class="hidden"><a id="L2513" href="#L2513">  2513</a>  </span><span>		if err != nil {</span>
<span class="hidden"><a id="L2514" href="#L2514">  2514</a>  </span><span>			return fmt.Errorf(errDecodingType, cStandard, err)</span>
<span class="hidden"><a id="L2515" href="#L2515">  2515</a>  </span><span>		} else if p.Type == parser.PhraseDone {</span>
<span class="hidden"><a id="L2516" href="#L2516">  2516</a>  </span><span>			return fmt.Errorf(errDecodingType, cStandard, io.ErrUnexpectedEOF)</span>
<span class="hidden"><a id="L2517" href="#L2517">  2517</a>  </span><span>		}</span>
<span class="hidden"><a id="L2518" href="#L2518">  2518</a>  </span>
<span class="hidden"><a id="L2519" href="#L2519">  2519</a>  </span><span>		params := p.Data[1 : len(p.Data)-1]</span>
<span class="hidden"><a id="L2520" href="#L2520">  2520</a>  </span><span>		value := p.Data[len(p.Data)-1].Data</span>
<span class="hidden"><a id="L2521" href="#L2521">  2521</a>  </span>
<span class="hidden"><a id="L2522" href="#L2522">  2522</a>  </span><span>		switch strings.ToUpper(p.Data[0].Data) {</span>
<span class="hidden"><a id="L2523" href="#L2523">  2523</a>  </span><span>		case &#34;BEGIN&#34;:</span>
<span class="hidden"><a id="L2524" href="#L2524">  2524</a>  </span><span>			switch n := strings.ToUpper(value); n {</span>
<span class="hidden"><a id="L2525" href="#L2525">  2525</a>  </span><span>			default:</span>
<span class="hidden"><a id="L2526" href="#L2526">  2526</a>  </span><span>				if err := decodeDummy(t, n); err != nil {</span>
<span class="hidden"><a id="L2527" href="#L2527">  2527</a>  </span><span>					return fmt.Errorf(errDecodingType, cStandard, err)</span>
<span class="hidden"><a id="L2528" href="#L2528">  2528</a>  </span><span>				}</span>
<span class="hidden"><a id="L2529" href="#L2529">  2529</a>  </span><span>			}</span>
<span class="hidden"><a id="L2530" href="#L2530">  2530</a>  </span><span>		case &#34;DTSTART&#34;:</span>
<span class="hidden"><a id="L2531" href="#L2531">  2531</a>  </span><span>			if requiredDateTimeStart {</span>
<span class="hidden"><a id="L2532" href="#L2532">  2532</a>  </span><span>				return fmt.Errorf(errMultiple, cStandard, cDateTimeStart)</span>
<span class="hidden"><a id="L2533" href="#L2533">  2533</a>  </span><span>			}</span>
<span class="hidden"><a id="L2534" href="#L2534">  2534</a>  </span>
<span class="hidden"><a id="L2535" href="#L2535">  2535</a>  </span><span>			requiredDateTimeStart = true</span>
<span class="hidden"><a id="L2536" href="#L2536">  2536</a>  </span>
<span class="hidden"><a id="L2537" href="#L2537">  2537</a>  </span><span>			if err := s.DateTimeStart.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2538" href="#L2538">  2538</a>  </span><span>				return fmt.Errorf(errDecodingProp, cStandard, cDateTimeStart, err)</span>
<span class="hidden"><a id="L2539" href="#L2539">  2539</a>  </span><span>			}</span>
<span class="hidden"><a id="L2540" href="#L2540">  2540</a>  </span><span>		case &#34;TZOFFSETTO&#34;:</span>
<span class="hidden"><a id="L2541" href="#L2541">  2541</a>  </span><span>			if requiredTimezoneOffsetTo {</span>
<span class="hidden"><a id="L2542" href="#L2542">  2542</a>  </span><span>				return fmt.Errorf(errMultiple, cStandard, cTimezoneOffsetTo)</span>
<span class="hidden"><a id="L2543" href="#L2543">  2543</a>  </span><span>			}</span>
<span class="hidden"><a id="L2544" href="#L2544">  2544</a>  </span>
<span class="hidden"><a id="L2545" href="#L2545">  2545</a>  </span><span>			requiredTimezoneOffsetTo = true</span>
<span class="hidden"><a id="L2546" href="#L2546">  2546</a>  </span>
<span class="hidden"><a id="L2547" href="#L2547">  2547</a>  </span><span>			if err := s.TimezoneOffsetTo.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2548" href="#L2548">  2548</a>  </span><span>				return fmt.Errorf(errDecodingProp, cStandard, cTimezoneOffsetTo, err)</span>
<span class="hidden"><a id="L2549" href="#L2549">  2549</a>  </span><span>			}</span>
<span class="hidden"><a id="L2550" href="#L2550">  2550</a>  </span><span>		case &#34;TZOFFSETFROM&#34;:</span>
<span class="hidden"><a id="L2551" href="#L2551">  2551</a>  </span><span>			if requiredTimezoneOffsetFrom {</span>
<span class="hidden"><a id="L2552" href="#L2552">  2552</a>  </span><span>				return fmt.Errorf(errMultiple, cStandard, cTimezoneOffsetFrom)</span>
<span class="hidden"><a id="L2553" href="#L2553">  2553</a>  </span><span>			}</span>
<span class="hidden"><a id="L2554" href="#L2554">  2554</a>  </span>
<span class="hidden"><a id="L2555" href="#L2555">  2555</a>  </span><span>			requiredTimezoneOffsetFrom = true</span>
<span class="hidden"><a id="L2556" href="#L2556">  2556</a>  </span>
<span class="hidden"><a id="L2557" href="#L2557">  2557</a>  </span><span>			if err := s.TimezoneOffsetFrom.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2558" href="#L2558">  2558</a>  </span><span>				return fmt.Errorf(errDecodingProp, cStandard, cTimezoneOffsetFrom, err)</span>
<span class="hidden"><a id="L2559" href="#L2559">  2559</a>  </span><span>			}</span>
<span class="hidden"><a id="L2560" href="#L2560">  2560</a>  </span><span>		case &#34;RRULE&#34;:</span>
<span class="hidden"><a id="L2561" href="#L2561">  2561</a>  </span><span>			if s.RecurrenceRule != nil {</span>
<span class="hidden"><a id="L2562" href="#L2562">  2562</a>  </span><span>				return fmt.Errorf(errMultiple, cStandard, cRecurrenceRule)</span>
<span class="hidden"><a id="L2563" href="#L2563">  2563</a>  </span><span>			}</span>
<span class="hidden"><a id="L2564" href="#L2564">  2564</a>  </span>
<span class="hidden"><a id="L2565" href="#L2565">  2565</a>  </span><span>			s.RecurrenceRule = new(PropRecurrenceRule)</span>
<span class="hidden"><a id="L2566" href="#L2566">  2566</a>  </span>
<span class="hidden"><a id="L2567" href="#L2567">  2567</a>  </span><span>			if err := s.RecurrenceRule.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2568" href="#L2568">  2568</a>  </span><span>				return fmt.Errorf(errDecodingProp, cStandard, cRecurrenceRule, err)</span>
<span class="hidden"><a id="L2569" href="#L2569">  2569</a>  </span><span>			}</span>
<span class="hidden"><a id="L2570" href="#L2570">  2570</a>  </span><span>		case &#34;COMMENT&#34;:</span>
<span class="hidden"><a id="L2571" href="#L2571">  2571</a>  </span><span>			var e PropComment</span>
<span class="hidden"><a id="L2572" href="#L2572">  2572</a>  </span>
<span class="hidden"><a id="L2573" href="#L2573">  2573</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2574" href="#L2574">  2574</a>  </span><span>				return fmt.Errorf(errDecodingProp, cStandard, cComment, err)</span>
<span class="hidden"><a id="L2575" href="#L2575">  2575</a>  </span><span>			}</span>
<span class="hidden"><a id="L2576" href="#L2576">  2576</a>  </span>
<span class="hidden"><a id="L2577" href="#L2577">  2577</a>  </span><span>			s.Comment = append(s.Comment, e)</span>
<span class="hidden"><a id="L2578" href="#L2578">  2578</a>  </span><span>		case &#34;RDATE&#34;:</span>
<span class="hidden"><a id="L2579" href="#L2579">  2579</a>  </span><span>			var e PropRecurrenceDateTimes</span>
<span class="hidden"><a id="L2580" href="#L2580">  2580</a>  </span>
<span class="hidden"><a id="L2581" href="#L2581">  2581</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2582" href="#L2582">  2582</a>  </span><span>				return fmt.Errorf(errDecodingProp, cStandard, cRecurrenceDateTimes, err)</span>
<span class="hidden"><a id="L2583" href="#L2583">  2583</a>  </span><span>			}</span>
<span class="hidden"><a id="L2584" href="#L2584">  2584</a>  </span>
<span class="hidden"><a id="L2585" href="#L2585">  2585</a>  </span><span>			s.RecurrenceDateTimes = append(s.RecurrenceDateTimes, e)</span>
<span class="hidden"><a id="L2586" href="#L2586">  2586</a>  </span><span>		case &#34;TZNAME&#34;:</span>
<span class="hidden"><a id="L2587" href="#L2587">  2587</a>  </span><span>			var e PropTimezoneName</span>
<span class="hidden"><a id="L2588" href="#L2588">  2588</a>  </span>
<span class="hidden"><a id="L2589" href="#L2589">  2589</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2590" href="#L2590">  2590</a>  </span><span>				return fmt.Errorf(errDecodingProp, cStandard, cTimezoneName, err)</span>
<span class="hidden"><a id="L2591" href="#L2591">  2591</a>  </span><span>			}</span>
<span class="hidden"><a id="L2592" href="#L2592">  2592</a>  </span>
<span class="hidden"><a id="L2593" href="#L2593">  2593</a>  </span><span>			s.TimezoneName = append(s.TimezoneName, e)</span>
<span class="hidden"><a id="L2594" href="#L2594">  2594</a>  </span><span>		case &#34;END&#34;:</span>
<span class="hidden"><a id="L2595" href="#L2595">  2595</a>  </span><span>			if value != &#34;STANDARD&#34; {</span>
<span class="hidden"><a id="L2596" href="#L2596">  2596</a>  </span><span>				return fmt.Errorf(errDecodingType, cStandard, ErrInvalidEnd)</span>
<span class="hidden"><a id="L2597" href="#L2597">  2597</a>  </span><span>			}</span>
<span class="hidden"><a id="L2598" href="#L2598">  2598</a>  </span>
<span class="hidden"><a id="L2599" href="#L2599">  2599</a>  </span><span>			break Loop</span>
<span class="hidden"><a id="L2600" href="#L2600">  2600</a>  </span><span>		}</span>
<span class="hidden"><a id="L2601" href="#L2601">  2601</a>  </span><span>	}</span>
<span class="hidden"><a id="L2602" href="#L2602">  2602</a>  </span>
<span class="hidden"><a id="L2603" href="#L2603">  2603</a>  </span><span>	if !requiredDateTimeStart || !requiredTimezoneOffsetTo || !requiredTimezoneOffsetFrom {</span>
<span class="hidden"><a id="L2604" href="#L2604">  2604</a>  </span><span>		return fmt.Errorf(errDecodingType, cStandard, ErrMissingRequired)</span>
<span class="hidden"><a id="L2605" href="#L2605">  2605</a>  </span><span>	}</span>
<span class="hidden"><a id="L2606" href="#L2606">  2606</a>  </span>
<span class="hidden"><a id="L2607" href="#L2607">  2607</a>  </span><span>	return nil</span>
<span class="hidden"><a id="L2608" href="#L2608">  2608</a>  </span><span>}</span>
<span class="hidden"><a id="L2609" href="#L2609">  2609</a>  </span>
<span class="hidden"><a id="L2610" href="#L2610">  2610</a>  </span><span>func (s *Standard) encode(w writer) {</span>
<span class="hidden"><a id="L2611" href="#L2611">  2611</a>  </span><span>	w.WriteString(&#34;BEGIN:STANDARD\r\n&#34;)</span>
<span class="hidden"><a id="L2612" href="#L2612">  2612</a>  </span><span>	s.DateTimeStart.encode(w)</span>
<span class="hidden"><a id="L2613" href="#L2613">  2613</a>  </span><span>	s.TimezoneOffsetTo.encode(w)</span>
<span class="hidden"><a id="L2614" href="#L2614">  2614</a>  </span><span>	s.TimezoneOffsetFrom.encode(w)</span>
<span class="hidden"><a id="L2615" href="#L2615">  2615</a>  </span>
<span class="hidden"><a id="L2616" href="#L2616">  2616</a>  </span><span>	if s.RecurrenceRule != nil {</span>
<span class="hidden"><a id="L2617" href="#L2617">  2617</a>  </span><span>		s.RecurrenceRule.encode(w)</span>
<span class="hidden"><a id="L2618" href="#L2618">  2618</a>  </span><span>	}</span>
<span class="hidden"><a id="L2619" href="#L2619">  2619</a>  </span>
<span class="hidden"><a id="L2620" href="#L2620">  2620</a>  </span><span>	for n := range s.Comment {</span>
<span class="hidden"><a id="L2621" href="#L2621">  2621</a>  </span><span>		s.Comment[n].encode(w)</span>
<span class="hidden"><a id="L2622" href="#L2622">  2622</a>  </span><span>	}</span>
<span class="hidden"><a id="L2623" href="#L2623">  2623</a>  </span>
<span class="hidden"><a id="L2624" href="#L2624">  2624</a>  </span><span>	for n := range s.RecurrenceDateTimes {</span>
<span class="hidden"><a id="L2625" href="#L2625">  2625</a>  </span><span>		s.RecurrenceDateTimes[n].encode(w)</span>
<span class="hidden"><a id="L2626" href="#L2626">  2626</a>  </span><span>	}</span>
<span class="hidden"><a id="L2627" href="#L2627">  2627</a>  </span>
<span class="hidden"><a id="L2628" href="#L2628">  2628</a>  </span><span>	for n := range s.TimezoneName {</span>
<span class="hidden"><a id="L2629" href="#L2629">  2629</a>  </span><span>		s.TimezoneName[n].encode(w)</span>
<span class="hidden"><a id="L2630" href="#L2630">  2630</a>  </span><span>	}</span>
<span class="hidden"><a id="L2631" href="#L2631">  2631</a>  </span>
<span class="hidden"><a id="L2632" href="#L2632">  2632</a>  </span><span>	w.WriteString(&#34;END:STANDARD\r\n&#34;)</span>
<span class="hidden"><a id="L2633" href="#L2633">  2633</a>  </span><span>}</span>
<span class="hidden"><a id="L2634" href="#L2634">  2634</a>  </span>
<span class="hidden"><a id="L2635" href="#L2635">  2635</a>  </span><span>func (s *Standard) valid() error {</span>
<span class="hidden"><a id="L2636" href="#L2636">  2636</a>  </span><span>	if err := s.DateTimeStart.valid(); err != nil {</span>
<span class="hidden"><a id="L2637" href="#L2637">  2637</a>  </span><span>		return fmt.Errorf(errValidatingProp, cStandard, cDateTimeStart, err)</span>
<span class="hidden"><a id="L2638" href="#L2638">  2638</a>  </span><span>	}</span>
<span class="hidden"><a id="L2639" href="#L2639">  2639</a>  </span>
<span class="hidden"><a id="L2640" href="#L2640">  2640</a>  </span><span>	if err := s.TimezoneOffsetTo.valid(); err != nil {</span>
<span class="hidden"><a id="L2641" href="#L2641">  2641</a>  </span><span>		return fmt.Errorf(errValidatingProp, cStandard, cTimezoneOffsetTo, err)</span>
<span class="hidden"><a id="L2642" href="#L2642">  2642</a>  </span><span>	}</span>
<span class="hidden"><a id="L2643" href="#L2643">  2643</a>  </span>
<span class="hidden"><a id="L2644" href="#L2644">  2644</a>  </span><span>	if err := s.TimezoneOffsetFrom.valid(); err != nil {</span>
<span class="hidden"><a id="L2645" href="#L2645">  2645</a>  </span><span>		return fmt.Errorf(errValidatingProp, cStandard, cTimezoneOffsetFrom, err)</span>
<span class="hidden"><a id="L2646" href="#L2646">  2646</a>  </span><span>	}</span>
<span class="hidden"><a id="L2647" href="#L2647">  2647</a>  </span>
<span class="hidden"><a id="L2648" href="#L2648">  2648</a>  </span><span>	if s.RecurrenceRule != nil {</span>
<span class="hidden"><a id="L2649" href="#L2649">  2649</a>  </span><span>		if err := s.RecurrenceRule.valid(); err != nil {</span>
<span class="hidden"><a id="L2650" href="#L2650">  2650</a>  </span><span>			return fmt.Errorf(errValidatingProp, cStandard, cRecurrenceRule, err)</span>
<span class="hidden"><a id="L2651" href="#L2651">  2651</a>  </span><span>		}</span>
<span class="hidden"><a id="L2652" href="#L2652">  2652</a>  </span><span>	}</span>
<span class="hidden"><a id="L2653" href="#L2653">  2653</a>  </span>
<span class="hidden"><a id="L2654" href="#L2654">  2654</a>  </span><span>	for n := range s.Comment {</span>
<span class="hidden"><a id="L2655" href="#L2655">  2655</a>  </span><span>		if err := s.Comment[n].valid(); err != nil {</span>
<span class="hidden"><a id="L2656" href="#L2656">  2656</a>  </span><span>			return fmt.Errorf(errValidatingProp, cStandard, cComment, err)</span>
<span class="hidden"><a id="L2657" href="#L2657">  2657</a>  </span><span>		}</span>
<span class="hidden"><a id="L2658" href="#L2658">  2658</a>  </span><span>	}</span>
<span class="hidden"><a id="L2659" href="#L2659">  2659</a>  </span>
<span class="hidden"><a id="L2660" href="#L2660">  2660</a>  </span><span>	for n := range s.RecurrenceDateTimes {</span>
<span class="hidden"><a id="L2661" href="#L2661">  2661</a>  </span><span>		if err := s.RecurrenceDateTimes[n].valid(); err != nil {</span>
<span class="hidden"><a id="L2662" href="#L2662">  2662</a>  </span><span>			return fmt.Errorf(errValidatingProp, cStandard, cRecurrenceDateTimes, err)</span>
<span class="hidden"><a id="L2663" href="#L2663">  2663</a>  </span><span>		}</span>
<span class="hidden"><a id="L2664" href="#L2664">  2664</a>  </span><span>	}</span>
<span class="hidden"><a id="L2665" href="#L2665">  2665</a>  </span>
<span class="hidden"><a id="L2666" href="#L2666">  2666</a>  </span><span>	for n := range s.TimezoneName {</span>
<span class="hidden"><a id="L2667" href="#L2667">  2667</a>  </span><span>		if err := s.TimezoneName[n].valid(); err != nil {</span>
<span class="hidden"><a id="L2668" href="#L2668">  2668</a>  </span><span>			return fmt.Errorf(errValidatingProp, cStandard, cTimezoneName, err)</span>
<span class="hidden"><a id="L2669" href="#L2669">  2669</a>  </span><span>		}</span>
<span class="hidden"><a id="L2670" href="#L2670">  2670</a>  </span><span>	}</span>
<span class="hidden"><a id="L2671" href="#L2671">  2671</a>  </span>
<span class="hidden"><a id="L2672" href="#L2672">  2672</a>  </span><span>	return nil</span>
<span class="hidden"><a id="L2673" href="#L2673">  2673</a>  </span><span>}</span>
<span class="hidden"><a id="L2674" href="#L2674">  2674</a>  </span>
<span class="hidden"><a id="L2675" href="#L2675">  2675</a>  </span><span class="text">// Daylight represents daylight savings timezone rules.</span>
<span class="hidden"><a id="L2676" href="#L2676">  2676</a>  </span><span>type Daylight struct {</span>
<span class="hidden"><a id="L2677" href="#L2677">  2677</a>  </span><span>	DateTimeStart       PropDateTimeStart</span>
<span class="hidden"><a id="L2678" href="#L2678">  2678</a>  </span><span>	TimezoneOffsetTo    PropTimezoneOffsetTo</span>
<span class="hidden"><a id="L2679" href="#L2679">  2679</a>  </span><span>	TimezoneOffsetFrom  PropTimezoneOffsetFrom</span>
<span class="hidden"><a id="L2680" href="#L2680">  2680</a>  </span><span>	RecurrenceRule      *PropRecurrenceRule</span>
<span class="hidden"><a id="L2681" href="#L2681">  2681</a>  </span><span>	Comment             []PropComment</span>
<span class="hidden"><a id="L2682" href="#L2682">  2682</a>  </span><span>	RecurrenceDateTimes []PropRecurrenceDateTimes</span>
<span class="hidden"><a id="L2683" href="#L2683">  2683</a>  </span><span>	TimezoneName        []PropTimezoneName</span>
<span class="hidden"><a id="L2684" href="#L2684">  2684</a>  </span><span>}</span>
<span class="hidden"><a id="L2685" href="#L2685">  2685</a>  </span>
<span class="hidden"><a id="L2686" href="#L2686">  2686</a>  </span><span>func (s *Daylight) decode(t tokeniser) error {</span>
<span class="hidden"><a id="L2687" href="#L2687">  2687</a>  </span><span>	var requiredDateTimeStart, requiredTimezoneOffsetTo, requiredTimezoneOffsetFrom bool</span>
<span class="hidden"><a id="L2688" href="#L2688">  2688</a>  </span>
<span class="hidden"><a id="L2689" href="#L2689">  2689</a>  </span><span>Loop:</span>
<span class="hidden"><a id="L2690" href="#L2690">  2690</a>  </span><span>	for {</span>
<span class="hidden"><a id="L2691" href="#L2691">  2691</a>  </span><span>		p, err := t.GetPhrase()</span>
<span class="hidden"><a id="L2692" href="#L2692">  2692</a>  </span><span>		if err != nil {</span>
<span class="hidden"><a id="L2693" href="#L2693">  2693</a>  </span><span>			return fmt.Errorf(errDecodingType, cDaylight, err)</span>
<span class="hidden"><a id="L2694" href="#L2694">  2694</a>  </span><span>		} else if p.Type == parser.PhraseDone {</span>
<span class="hidden"><a id="L2695" href="#L2695">  2695</a>  </span><span>			return fmt.Errorf(errDecodingType, cDaylight, io.ErrUnexpectedEOF)</span>
<span class="hidden"><a id="L2696" href="#L2696">  2696</a>  </span><span>		}</span>
<span class="hidden"><a id="L2697" href="#L2697">  2697</a>  </span>
<span class="hidden"><a id="L2698" href="#L2698">  2698</a>  </span><span>		params := p.Data[1 : len(p.Data)-1]</span>
<span class="hidden"><a id="L2699" href="#L2699">  2699</a>  </span><span>		value := p.Data[len(p.Data)-1].Data</span>
<span class="hidden"><a id="L2700" href="#L2700">  2700</a>  </span>
<span class="hidden"><a id="L2701" href="#L2701">  2701</a>  </span><span>		switch strings.ToUpper(p.Data[0].Data) {</span>
<span class="hidden"><a id="L2702" href="#L2702">  2702</a>  </span><span>		case &#34;BEGIN&#34;:</span>
<span class="hidden"><a id="L2703" href="#L2703">  2703</a>  </span><span>			switch n := strings.ToUpper(value); n {</span>
<span class="hidden"><a id="L2704" href="#L2704">  2704</a>  </span><span>			default:</span>
<span class="hidden"><a id="L2705" href="#L2705">  2705</a>  </span><span>				if err := decodeDummy(t, n); err != nil {</span>
<span class="hidden"><a id="L2706" href="#L2706">  2706</a>  </span><span>					return fmt.Errorf(errDecodingType, cDaylight, err)</span>
<span class="hidden"><a id="L2707" href="#L2707">  2707</a>  </span><span>				}</span>
<span class="hidden"><a id="L2708" href="#L2708">  2708</a>  </span><span>			}</span>
<span class="hidden"><a id="L2709" href="#L2709">  2709</a>  </span><span>		case &#34;DTSTART&#34;:</span>
<span class="hidden"><a id="L2710" href="#L2710">  2710</a>  </span><span>			if requiredDateTimeStart {</span>
<span class="hidden"><a id="L2711" href="#L2711">  2711</a>  </span><span>				return fmt.Errorf(errMultiple, cDaylight, cDateTimeStart)</span>
<span class="hidden"><a id="L2712" href="#L2712">  2712</a>  </span><span>			}</span>
<span class="hidden"><a id="L2713" href="#L2713">  2713</a>  </span>
<span class="hidden"><a id="L2714" href="#L2714">  2714</a>  </span><span>			requiredDateTimeStart = true</span>
<span class="hidden"><a id="L2715" href="#L2715">  2715</a>  </span>
<span class="hidden"><a id="L2716" href="#L2716">  2716</a>  </span><span>			if err := s.DateTimeStart.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2717" href="#L2717">  2717</a>  </span><span>				return fmt.Errorf(errDecodingProp, cDaylight, cDateTimeStart, err)</span>
<span class="hidden"><a id="L2718" href="#L2718">  2718</a>  </span><span>			}</span>
<span class="hidden"><a id="L2719" href="#L2719">  2719</a>  </span><span>		case &#34;TZOFFSETTO&#34;:</span>
<span class="hidden"><a id="L2720" href="#L2720">  2720</a>  </span><span>			if requiredTimezoneOffsetTo {</span>
<span class="hidden"><a id="L2721" href="#L2721">  2721</a>  </span><span>				return fmt.Errorf(errMultiple, cDaylight, cTimezoneOffsetTo)</span>
<span class="hidden"><a id="L2722" href="#L2722">  2722</a>  </span><span>			}</span>
<span class="hidden"><a id="L2723" href="#L2723">  2723</a>  </span>
<span class="hidden"><a id="L2724" href="#L2724">  2724</a>  </span><span>			requiredTimezoneOffsetTo = true</span>
<span class="hidden"><a id="L2725" href="#L2725">  2725</a>  </span>
<span class="hidden"><a id="L2726" href="#L2726">  2726</a>  </span><span>			if err := s.TimezoneOffsetTo.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2727" href="#L2727">  2727</a>  </span><span>				return fmt.Errorf(errDecodingProp, cDaylight, cTimezoneOffsetTo, err)</span>
<span class="hidden"><a id="L2728" href="#L2728">  2728</a>  </span><span>			}</span>
<span class="hidden"><a id="L2729" href="#L2729">  2729</a>  </span><span>		case &#34;TZOFFSETFROM&#34;:</span>
<span class="hidden"><a id="L2730" href="#L2730">  2730</a>  </span><span>			if requiredTimezoneOffsetFrom {</span>
<span class="hidden"><a id="L2731" href="#L2731">  2731</a>  </span><span>				return fmt.Errorf(errMultiple, cDaylight, cTimezoneOffsetFrom)</span>
<span class="hidden"><a id="L2732" href="#L2732">  2732</a>  </span><span>			}</span>
<span class="hidden"><a id="L2733" href="#L2733">  2733</a>  </span>
<span class="hidden"><a id="L2734" href="#L2734">  2734</a>  </span><span>			requiredTimezoneOffsetFrom = true</span>
<span class="hidden"><a id="L2735" href="#L2735">  2735</a>  </span>
<span class="hidden"><a id="L2736" href="#L2736">  2736</a>  </span><span>			if err := s.TimezoneOffsetFrom.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2737" href="#L2737">  2737</a>  </span><span>				return fmt.Errorf(errDecodingProp, cDaylight, cTimezoneOffsetFrom, err)</span>
<span class="hidden"><a id="L2738" href="#L2738">  2738</a>  </span><span>			}</span>
<span class="hidden"><a id="L2739" href="#L2739">  2739</a>  </span><span>		case &#34;RRULE&#34;:</span>
<span class="hidden"><a id="L2740" href="#L2740">  2740</a>  </span><span>			if s.RecurrenceRule != nil {</span>
<span class="hidden"><a id="L2741" href="#L2741">  2741</a>  </span><span>				return fmt.Errorf(errMultiple, cDaylight, cRecurrenceRule)</span>
<span class="hidden"><a id="L2742" href="#L2742">  2742</a>  </span><span>			}</span>
<span class="hidden"><a id="L2743" href="#L2743">  2743</a>  </span>
<span class="hidden"><a id="L2744" href="#L2744">  2744</a>  </span><span>			s.RecurrenceRule = new(PropRecurrenceRule)</span>
<span class="hidden"><a id="L2745" href="#L2745">  2745</a>  </span>
<span class="hidden"><a id="L2746" href="#L2746">  2746</a>  </span><span>			if err := s.RecurrenceRule.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2747" href="#L2747">  2747</a>  </span><span>				return fmt.Errorf(errDecodingProp, cDaylight, cRecurrenceRule, err)</span>
<span class="hidden"><a id="L2748" href="#L2748">  2748</a>  </span><span>			}</span>
<span class="hidden"><a id="L2749" href="#L2749">  2749</a>  </span><span>		case &#34;COMMENT&#34;:</span>
<span class="hidden"><a id="L2750" href="#L2750">  2750</a>  </span><span>			var e PropComment</span>
<span class="hidden"><a id="L2751" href="#L2751">  2751</a>  </span>
<span class="hidden"><a id="L2752" href="#L2752">  2752</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2753" href="#L2753">  2753</a>  </span><span>				return fmt.Errorf(errDecodingProp, cDaylight, cComment, err)</span>
<span class="hidden"><a id="L2754" href="#L2754">  2754</a>  </span><span>			}</span>
<span class="hidden"><a id="L2755" href="#L2755">  2755</a>  </span>
<span class="hidden"><a id="L2756" href="#L2756">  2756</a>  </span><span>			s.Comment = append(s.Comment, e)</span>
<span class="hidden"><a id="L2757" href="#L2757">  2757</a>  </span><span>		case &#34;RDATE&#34;:</span>
<span class="hidden"><a id="L2758" href="#L2758">  2758</a>  </span><span>			var e PropRecurrenceDateTimes</span>
<span class="hidden"><a id="L2759" href="#L2759">  2759</a>  </span>
<span class="hidden"><a id="L2760" href="#L2760">  2760</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2761" href="#L2761">  2761</a>  </span><span>				return fmt.Errorf(errDecodingProp, cDaylight, cRecurrenceDateTimes, err)</span>
<span class="hidden"><a id="L2762" href="#L2762">  2762</a>  </span><span>			}</span>
<span class="hidden"><a id="L2763" href="#L2763">  2763</a>  </span>
<span class="hidden"><a id="L2764" href="#L2764">  2764</a>  </span><span>			s.RecurrenceDateTimes = append(s.RecurrenceDateTimes, e)</span>
<span class="hidden"><a id="L2765" href="#L2765">  2765</a>  </span><span>		case &#34;TZNAME&#34;:</span>
<span class="hidden"><a id="L2766" href="#L2766">  2766</a>  </span><span>			var e PropTimezoneName</span>
<span class="hidden"><a id="L2767" href="#L2767">  2767</a>  </span>
<span class="hidden"><a id="L2768" href="#L2768">  2768</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2769" href="#L2769">  2769</a>  </span><span>				return fmt.Errorf(errDecodingProp, cDaylight, cTimezoneName, err)</span>
<span class="hidden"><a id="L2770" href="#L2770">  2770</a>  </span><span>			}</span>
<span class="hidden"><a id="L2771" href="#L2771">  2771</a>  </span>
<span class="hidden"><a id="L2772" href="#L2772">  2772</a>  </span><span>			s.TimezoneName = append(s.TimezoneName, e)</span>
<span class="hidden"><a id="L2773" href="#L2773">  2773</a>  </span><span>		case &#34;END&#34;:</span>
<span class="hidden"><a id="L2774" href="#L2774">  2774</a>  </span><span>			if value != &#34;DAYLIGHT&#34; {</span>
<span class="hidden"><a id="L2775" href="#L2775">  2775</a>  </span><span>				return fmt.Errorf(errDecodingType, cDaylight, ErrInvalidEnd)</span>
<span class="hidden"><a id="L2776" href="#L2776">  2776</a>  </span><span>			}</span>
<span class="hidden"><a id="L2777" href="#L2777">  2777</a>  </span>
<span class="hidden"><a id="L2778" href="#L2778">  2778</a>  </span><span>			break Loop</span>
<span class="hidden"><a id="L2779" href="#L2779">  2779</a>  </span><span>		}</span>
<span class="hidden"><a id="L2780" href="#L2780">  2780</a>  </span><span>	}</span>
<span class="hidden"><a id="L2781" href="#L2781">  2781</a>  </span>
<span class="hidden"><a id="L2782" href="#L2782">  2782</a>  </span><span>	if !requiredDateTimeStart || !requiredTimezoneOffsetTo || !requiredTimezoneOffsetFrom {</span>
<span class="hidden"><a id="L2783" href="#L2783">  2783</a>  </span><span>		return fmt.Errorf(errDecodingType, cDaylight, ErrMissingRequired)</span>
<span class="hidden"><a id="L2784" href="#L2784">  2784</a>  </span><span>	}</span>
<span class="hidden"><a id="L2785" href="#L2785">  2785</a>  </span>
<span class="hidden"><a id="L2786" href="#L2786">  2786</a>  </span><span>	return nil</span>
<span class="hidden"><a id="L2787" href="#L2787">  2787</a>  </span><span>}</span>
<span class="hidden"><a id="L2788" href="#L2788">  2788</a>  </span>
<span class="hidden"><a id="L2789" href="#L2789">  2789</a>  </span><span>func (s *Daylight) encode(w writer) {</span>
<span class="hidden"><a id="L2790" href="#L2790">  2790</a>  </span><span>	w.WriteString(&#34;BEGIN:DAYLIGHT\r\n&#34;)</span>
<span class="hidden"><a id="L2791" href="#L2791">  2791</a>  </span><span>	s.DateTimeStart.encode(w)</span>
<span class="hidden"><a id="L2792" href="#L2792">  2792</a>  </span><span>	s.TimezoneOffsetTo.encode(w)</span>
<span class="hidden"><a id="L2793" href="#L2793">  2793</a>  </span><span>	s.TimezoneOffsetFrom.encode(w)</span>
<span class="hidden"><a id="L2794" href="#L2794">  2794</a>  </span>
<span class="hidden"><a id="L2795" href="#L2795">  2795</a>  </span><span>	if s.RecurrenceRule != nil {</span>
<span class="hidden"><a id="L2796" href="#L2796">  2796</a>  </span><span>		s.RecurrenceRule.encode(w)</span>
<span class="hidden"><a id="L2797" href="#L2797">  2797</a>  </span><span>	}</span>
<span class="hidden"><a id="L2798" href="#L2798">  2798</a>  </span>
<span class="hidden"><a id="L2799" href="#L2799">  2799</a>  </span><span>	for n := range s.Comment {</span>
<span class="hidden"><a id="L2800" href="#L2800">  2800</a>  </span><span>		s.Comment[n].encode(w)</span>
<span class="hidden"><a id="L2801" href="#L2801">  2801</a>  </span><span>	}</span>
<span class="hidden"><a id="L2802" href="#L2802">  2802</a>  </span>
<span class="hidden"><a id="L2803" href="#L2803">  2803</a>  </span><span>	for n := range s.RecurrenceDateTimes {</span>
<span class="hidden"><a id="L2804" href="#L2804">  2804</a>  </span><span>		s.RecurrenceDateTimes[n].encode(w)</span>
<span class="hidden"><a id="L2805" href="#L2805">  2805</a>  </span><span>	}</span>
<span class="hidden"><a id="L2806" href="#L2806">  2806</a>  </span>
<span class="hidden"><a id="L2807" href="#L2807">  2807</a>  </span><span>	for n := range s.TimezoneName {</span>
<span class="hidden"><a id="L2808" href="#L2808">  2808</a>  </span><span>		s.TimezoneName[n].encode(w)</span>
<span class="hidden"><a id="L2809" href="#L2809">  2809</a>  </span><span>	}</span>
<span class="hidden"><a id="L2810" href="#L2810">  2810</a>  </span>
<span class="hidden"><a id="L2811" href="#L2811">  2811</a>  </span><span>	w.WriteString(&#34;END:DAYLIGHT\r\n&#34;)</span>
<span class="hidden"><a id="L2812" href="#L2812">  2812</a>  </span><span>}</span>
<span class="hidden"><a id="L2813" href="#L2813">  2813</a>  </span>
<span class="hidden"><a id="L2814" href="#L2814">  2814</a>  </span><span>func (s *Daylight) valid() error {</span>
<span class="hidden"><a id="L2815" href="#L2815">  2815</a>  </span><span>	if err := s.DateTimeStart.valid(); err != nil {</span>
<span class="hidden"><a id="L2816" href="#L2816">  2816</a>  </span><span>		return fmt.Errorf(errValidatingProp, cDaylight, cDateTimeStart, err)</span>
<span class="hidden"><a id="L2817" href="#L2817">  2817</a>  </span><span>	}</span>
<span class="hidden"><a id="L2818" href="#L2818">  2818</a>  </span>
<span class="hidden"><a id="L2819" href="#L2819">  2819</a>  </span><span>	if err := s.TimezoneOffsetTo.valid(); err != nil {</span>
<span class="hidden"><a id="L2820" href="#L2820">  2820</a>  </span><span>		return fmt.Errorf(errValidatingProp, cDaylight, cTimezoneOffsetTo, err)</span>
<span class="hidden"><a id="L2821" href="#L2821">  2821</a>  </span><span>	}</span>
<span class="hidden"><a id="L2822" href="#L2822">  2822</a>  </span>
<span class="hidden"><a id="L2823" href="#L2823">  2823</a>  </span><span>	if err := s.TimezoneOffsetFrom.valid(); err != nil {</span>
<span class="hidden"><a id="L2824" href="#L2824">  2824</a>  </span><span>		return fmt.Errorf(errValidatingProp, cDaylight, cTimezoneOffsetFrom, err)</span>
<span class="hidden"><a id="L2825" href="#L2825">  2825</a>  </span><span>	}</span>
<span class="hidden"><a id="L2826" href="#L2826">  2826</a>  </span>
<span class="hidden"><a id="L2827" href="#L2827">  2827</a>  </span><span>	if s.RecurrenceRule != nil {</span>
<span class="hidden"><a id="L2828" href="#L2828">  2828</a>  </span><span>		if err := s.RecurrenceRule.valid(); err != nil {</span>
<span class="hidden"><a id="L2829" href="#L2829">  2829</a>  </span><span>			return fmt.Errorf(errValidatingProp, cDaylight, cRecurrenceRule, err)</span>
<span class="hidden"><a id="L2830" href="#L2830">  2830</a>  </span><span>		}</span>
<span class="hidden"><a id="L2831" href="#L2831">  2831</a>  </span><span>	}</span>
<span class="hidden"><a id="L2832" href="#L2832">  2832</a>  </span>
<span class="hidden"><a id="L2833" href="#L2833">  2833</a>  </span><span>	for n := range s.Comment {</span>
<span class="hidden"><a id="L2834" href="#L2834">  2834</a>  </span><span>		if err := s.Comment[n].valid(); err != nil {</span>
<span class="hidden"><a id="L2835" href="#L2835">  2835</a>  </span><span>			return fmt.Errorf(errValidatingProp, cDaylight, cComment, err)</span>
<span class="hidden"><a id="L2836" href="#L2836">  2836</a>  </span><span>		}</span>
<span class="hidden"><a id="L2837" href="#L2837">  2837</a>  </span><span>	}</span>
<span class="hidden"><a id="L2838" href="#L2838">  2838</a>  </span>
<span class="hidden"><a id="L2839" href="#L2839">  2839</a>  </span><span>	for n := range s.RecurrenceDateTimes {</span>
<span class="hidden"><a id="L2840" href="#L2840">  2840</a>  </span><span>		if err := s.RecurrenceDateTimes[n].valid(); err != nil {</span>
<span class="hidden"><a id="L2841" href="#L2841">  2841</a>  </span><span>			return fmt.Errorf(errValidatingProp, cDaylight, cRecurrenceDateTimes, err)</span>
<span class="hidden"><a id="L2842" href="#L2842">  2842</a>  </span><span>		}</span>
<span class="hidden"><a id="L2843" href="#L2843">  2843</a>  </span><span>	}</span>
<span class="hidden"><a id="L2844" href="#L2844">  2844</a>  </span>
<span class="hidden"><a id="L2845" href="#L2845">  2845</a>  </span><span>	for n := range s.TimezoneName {</span>
<span class="hidden"><a id="L2846" href="#L2846">  2846</a>  </span><span>		if err := s.TimezoneName[n].valid(); err != nil {</span>
<span class="hidden"><a id="L2847" href="#L2847">  2847</a>  </span><span>			return fmt.Errorf(errValidatingProp, cDaylight, cTimezoneName, err)</span>
<span class="hidden"><a id="L2848" href="#L2848">  2848</a>  </span><span>		}</span>
<span class="hidden"><a id="L2849" href="#L2849">  2849</a>  </span><span>	}</span>
<span class="hidden"><a id="L2850" href="#L2850">  2850</a>  </span>
<span class="hidden"><a id="L2851" href="#L2851">  2851</a>  </span><span>	return nil</span>
<span class="hidden"><a id="L2852" href="#L2852">  2852</a>  </span><span>}</span>
<span class="hidden"><a id="L2853" href="#L2853">  2853</a>  </span>
<span class="hidden"><a id="L2854" href="#L2854">  2854</a>  </span><span class="text">// AlarmAudio provides a group of components that define an Audio Alarm.</span>
<span class="hidden"><a id="L2855" href="#L2855">  2855</a>  </span><span>type AlarmAudio struct {</span>
<span class="hidden"><a id="L2856" href="#L2856">  2856</a>  </span><span>	Trigger       PropTrigger</span>
<span class="hidden"><a id="L2857" href="#L2857">  2857</a>  </span><span>	Duration      *PropDuration</span>
<span class="hidden"><a id="L2858" href="#L2858">  2858</a>  </span><span>	Repeat        *PropRepeat</span>
<span class="hidden"><a id="L2859" href="#L2859">  2859</a>  </span><span>	Attachment    []PropAttachment</span>
<span class="hidden"><a id="L2860" href="#L2860">  2860</a>  </span><span>	UID           *PropUID</span>
<span class="hidden"><a id="L2861" href="#L2861">  2861</a>  </span><span>	AlarmAgent    []PropAlarmAgent</span>
<span class="hidden"><a id="L2862" href="#L2862">  2862</a>  </span><span>	AlarmStatus   *PropAlarmStatus</span>
<span class="hidden"><a id="L2863" href="#L2863">  2863</a>  </span><span>	LastTriggered []PropLastTriggered</span>
<span class="hidden"><a id="L2864" href="#L2864">  2864</a>  </span><span>	Acknowledged  *PropAcknowledged</span>
<span class="hidden"><a id="L2865" href="#L2865">  2865</a>  </span><span>	Proximity     *PropProximity</span>
<span class="hidden"><a id="L2866" href="#L2866">  2866</a>  </span><span>	GeoLocation   []PropGeoLocation</span>
<span class="hidden"><a id="L2867" href="#L2867">  2867</a>  </span><span>	RelatedTo     *PropRelatedTo</span>
<span class="hidden"><a id="L2868" href="#L2868">  2868</a>  </span><span>	DefaultAlarm  *PropDefaultAlarm</span>
<span class="hidden"><a id="L2869" href="#L2869">  2869</a>  </span><span>}</span>
<span class="hidden"><a id="L2870" href="#L2870">  2870</a>  </span>
<span class="hidden"><a id="L2871" href="#L2871">  2871</a>  </span><span>func (s *AlarmAudio) decode(t tokeniser) error {</span>
<span class="hidden"><a id="L2872" href="#L2872">  2872</a>  </span><span>	var requiredTrigger bool</span>
<span class="hidden"><a id="L2873" href="#L2873">  2873</a>  </span>
<span class="hidden"><a id="L2874" href="#L2874">  2874</a>  </span><span>Loop:</span>
<span class="hidden"><a id="L2875" href="#L2875">  2875</a>  </span><span>	for {</span>
<span class="hidden"><a id="L2876" href="#L2876">  2876</a>  </span><span>		p, err := t.GetPhrase()</span>
<span class="hidden"><a id="L2877" href="#L2877">  2877</a>  </span><span>		if err != nil {</span>
<span class="hidden"><a id="L2878" href="#L2878">  2878</a>  </span><span>			return fmt.Errorf(errDecodingType, cAlarmAudio, err)</span>
<span class="hidden"><a id="L2879" href="#L2879">  2879</a>  </span><span>		} else if p.Type == parser.PhraseDone {</span>
<span class="hidden"><a id="L2880" href="#L2880">  2880</a>  </span><span>			return fmt.Errorf(errDecodingType, cAlarmAudio, io.ErrUnexpectedEOF)</span>
<span class="hidden"><a id="L2881" href="#L2881">  2881</a>  </span><span>		}</span>
<span class="hidden"><a id="L2882" href="#L2882">  2882</a>  </span>
<span class="hidden"><a id="L2883" href="#L2883">  2883</a>  </span><span>		params := p.Data[1 : len(p.Data)-1]</span>
<span class="hidden"><a id="L2884" href="#L2884">  2884</a>  </span><span>		value := p.Data[len(p.Data)-1].Data</span>
<span class="hidden"><a id="L2885" href="#L2885">  2885</a>  </span>
<span class="hidden"><a id="L2886" href="#L2886">  2886</a>  </span><span>		switch strings.ToUpper(p.Data[0].Data) {</span>
<span class="hidden"><a id="L2887" href="#L2887">  2887</a>  </span><span>		case &#34;BEGIN&#34;:</span>
<span class="hidden"><a id="L2888" href="#L2888">  2888</a>  </span><span>			switch n := strings.ToUpper(value); n {</span>
<span class="hidden"><a id="L2889" href="#L2889">  2889</a>  </span><span>			default:</span>
<span class="hidden"><a id="L2890" href="#L2890">  2890</a>  </span><span>				if err := decodeDummy(t, n); err != nil {</span>
<span class="hidden"><a id="L2891" href="#L2891">  2891</a>  </span><span>					return fmt.Errorf(errDecodingType, cAlarmAudio, err)</span>
<span class="hidden"><a id="L2892" href="#L2892">  2892</a>  </span><span>				}</span>
<span class="hidden"><a id="L2893" href="#L2893">  2893</a>  </span><span>			}</span>
<span class="hidden"><a id="L2894" href="#L2894">  2894</a>  </span><span>		case &#34;TRIGGER&#34;:</span>
<span class="hidden"><a id="L2895" href="#L2895">  2895</a>  </span><span>			if requiredTrigger {</span>
<span class="hidden"><a id="L2896" href="#L2896">  2896</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmAudio, cTrigger)</span>
<span class="hidden"><a id="L2897" href="#L2897">  2897</a>  </span><span>			}</span>
<span class="hidden"><a id="L2898" href="#L2898">  2898</a>  </span>
<span class="hidden"><a id="L2899" href="#L2899">  2899</a>  </span><span>			requiredTrigger = true</span>
<span class="hidden"><a id="L2900" href="#L2900">  2900</a>  </span>
<span class="hidden"><a id="L2901" href="#L2901">  2901</a>  </span><span>			if err := s.Trigger.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2902" href="#L2902">  2902</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmAudio, cTrigger, err)</span>
<span class="hidden"><a id="L2903" href="#L2903">  2903</a>  </span><span>			}</span>
<span class="hidden"><a id="L2904" href="#L2904">  2904</a>  </span><span>		case &#34;DURATION&#34;:</span>
<span class="hidden"><a id="L2905" href="#L2905">  2905</a>  </span><span>			if s.Duration != nil {</span>
<span class="hidden"><a id="L2906" href="#L2906">  2906</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmAudio, cDuration)</span>
<span class="hidden"><a id="L2907" href="#L2907">  2907</a>  </span><span>			}</span>
<span class="hidden"><a id="L2908" href="#L2908">  2908</a>  </span>
<span class="hidden"><a id="L2909" href="#L2909">  2909</a>  </span><span>			s.Duration = new(PropDuration)</span>
<span class="hidden"><a id="L2910" href="#L2910">  2910</a>  </span>
<span class="hidden"><a id="L2911" href="#L2911">  2911</a>  </span><span>			if err := s.Duration.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2912" href="#L2912">  2912</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmAudio, cDuration, err)</span>
<span class="hidden"><a id="L2913" href="#L2913">  2913</a>  </span><span>			}</span>
<span class="hidden"><a id="L2914" href="#L2914">  2914</a>  </span><span>		case &#34;REPEAT&#34;:</span>
<span class="hidden"><a id="L2915" href="#L2915">  2915</a>  </span><span>			if s.Repeat != nil {</span>
<span class="hidden"><a id="L2916" href="#L2916">  2916</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmAudio, cRepeat)</span>
<span class="hidden"><a id="L2917" href="#L2917">  2917</a>  </span><span>			}</span>
<span class="hidden"><a id="L2918" href="#L2918">  2918</a>  </span>
<span class="hidden"><a id="L2919" href="#L2919">  2919</a>  </span><span>			s.Repeat = new(PropRepeat)</span>
<span class="hidden"><a id="L2920" href="#L2920">  2920</a>  </span>
<span class="hidden"><a id="L2921" href="#L2921">  2921</a>  </span><span>			if err := s.Repeat.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2922" href="#L2922">  2922</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmAudio, cRepeat, err)</span>
<span class="hidden"><a id="L2923" href="#L2923">  2923</a>  </span><span>			}</span>
<span class="hidden"><a id="L2924" href="#L2924">  2924</a>  </span><span>		case &#34;ATTACH&#34;:</span>
<span class="hidden"><a id="L2925" href="#L2925">  2925</a>  </span><span>			var e PropAttachment</span>
<span class="hidden"><a id="L2926" href="#L2926">  2926</a>  </span>
<span class="hidden"><a id="L2927" href="#L2927">  2927</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2928" href="#L2928">  2928</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmAudio, cAttachment, err)</span>
<span class="hidden"><a id="L2929" href="#L2929">  2929</a>  </span><span>			}</span>
<span class="hidden"><a id="L2930" href="#L2930">  2930</a>  </span>
<span class="hidden"><a id="L2931" href="#L2931">  2931</a>  </span><span>			s.Attachment = append(s.Attachment, e)</span>
<span class="hidden"><a id="L2932" href="#L2932">  2932</a>  </span><span>		case &#34;UID&#34;:</span>
<span class="hidden"><a id="L2933" href="#L2933">  2933</a>  </span><span>			if s.UID != nil {</span>
<span class="hidden"><a id="L2934" href="#L2934">  2934</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmAudio, cUID)</span>
<span class="hidden"><a id="L2935" href="#L2935">  2935</a>  </span><span>			}</span>
<span class="hidden"><a id="L2936" href="#L2936">  2936</a>  </span>
<span class="hidden"><a id="L2937" href="#L2937">  2937</a>  </span><span>			s.UID = new(PropUID)</span>
<span class="hidden"><a id="L2938" href="#L2938">  2938</a>  </span>
<span class="hidden"><a id="L2939" href="#L2939">  2939</a>  </span><span>			if err := s.UID.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2940" href="#L2940">  2940</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmAudio, cUID, err)</span>
<span class="hidden"><a id="L2941" href="#L2941">  2941</a>  </span><span>			}</span>
<span class="hidden"><a id="L2942" href="#L2942">  2942</a>  </span><span>		case &#34;ALARM-AGENT&#34;:</span>
<span class="hidden"><a id="L2943" href="#L2943">  2943</a>  </span><span>			var e PropAlarmAgent</span>
<span class="hidden"><a id="L2944" href="#L2944">  2944</a>  </span>
<span class="hidden"><a id="L2945" href="#L2945">  2945</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2946" href="#L2946">  2946</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmAudio, cAlarmAgent, err)</span>
<span class="hidden"><a id="L2947" href="#L2947">  2947</a>  </span><span>			}</span>
<span class="hidden"><a id="L2948" href="#L2948">  2948</a>  </span>
<span class="hidden"><a id="L2949" href="#L2949">  2949</a>  </span><span>			s.AlarmAgent = append(s.AlarmAgent, e)</span>
<span class="hidden"><a id="L2950" href="#L2950">  2950</a>  </span><span>		case &#34;STATUS&#34;:</span>
<span class="hidden"><a id="L2951" href="#L2951">  2951</a>  </span><span>			if s.AlarmStatus != nil {</span>
<span class="hidden"><a id="L2952" href="#L2952">  2952</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmAudio, cAlarmStatus)</span>
<span class="hidden"><a id="L2953" href="#L2953">  2953</a>  </span><span>			}</span>
<span class="hidden"><a id="L2954" href="#L2954">  2954</a>  </span>
<span class="hidden"><a id="L2955" href="#L2955">  2955</a>  </span><span>			s.AlarmStatus = new(PropAlarmStatus)</span>
<span class="hidden"><a id="L2956" href="#L2956">  2956</a>  </span>
<span class="hidden"><a id="L2957" href="#L2957">  2957</a>  </span><span>			if err := s.AlarmStatus.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2958" href="#L2958">  2958</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmAudio, cAlarmStatus, err)</span>
<span class="hidden"><a id="L2959" href="#L2959">  2959</a>  </span><span>			}</span>
<span class="hidden"><a id="L2960" href="#L2960">  2960</a>  </span><span>		case &#34;LAST-TRIGGERED&#34;:</span>
<span class="hidden"><a id="L2961" href="#L2961">  2961</a>  </span><span>			var e PropLastTriggered</span>
<span class="hidden"><a id="L2962" href="#L2962">  2962</a>  </span>
<span class="hidden"><a id="L2963" href="#L2963">  2963</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2964" href="#L2964">  2964</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmAudio, cLastTriggered, err)</span>
<span class="hidden"><a id="L2965" href="#L2965">  2965</a>  </span><span>			}</span>
<span class="hidden"><a id="L2966" href="#L2966">  2966</a>  </span>
<span class="hidden"><a id="L2967" href="#L2967">  2967</a>  </span><span>			s.LastTriggered = append(s.LastTriggered, e)</span>
<span class="hidden"><a id="L2968" href="#L2968">  2968</a>  </span><span>		case &#34;ACKNOWLEDGED&#34;:</span>
<span class="hidden"><a id="L2969" href="#L2969">  2969</a>  </span><span>			if s.Acknowledged != nil {</span>
<span class="hidden"><a id="L2970" href="#L2970">  2970</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmAudio, cAcknowledged)</span>
<span class="hidden"><a id="L2971" href="#L2971">  2971</a>  </span><span>			}</span>
<span class="hidden"><a id="L2972" href="#L2972">  2972</a>  </span>
<span class="hidden"><a id="L2973" href="#L2973">  2973</a>  </span><span>			s.Acknowledged = new(PropAcknowledged)</span>
<span class="hidden"><a id="L2974" href="#L2974">  2974</a>  </span>
<span class="hidden"><a id="L2975" href="#L2975">  2975</a>  </span><span>			if err := s.Acknowledged.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2976" href="#L2976">  2976</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmAudio, cAcknowledged, err)</span>
<span class="hidden"><a id="L2977" href="#L2977">  2977</a>  </span><span>			}</span>
<span class="hidden"><a id="L2978" href="#L2978">  2978</a>  </span><span>		case &#34;PROXIMITY&#34;:</span>
<span class="hidden"><a id="L2979" href="#L2979">  2979</a>  </span><span>			if s.Proximity != nil {</span>
<span class="hidden"><a id="L2980" href="#L2980">  2980</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmAudio, cProximity)</span>
<span class="hidden"><a id="L2981" href="#L2981">  2981</a>  </span><span>			}</span>
<span class="hidden"><a id="L2982" href="#L2982">  2982</a>  </span>
<span class="hidden"><a id="L2983" href="#L2983">  2983</a>  </span><span>			s.Proximity = new(PropProximity)</span>
<span class="hidden"><a id="L2984" href="#L2984">  2984</a>  </span>
<span class="hidden"><a id="L2985" href="#L2985">  2985</a>  </span><span>			if err := s.Proximity.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2986" href="#L2986">  2986</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmAudio, cProximity, err)</span>
<span class="hidden"><a id="L2987" href="#L2987">  2987</a>  </span><span>			}</span>
<span class="hidden"><a id="L2988" href="#L2988">  2988</a>  </span><span>		case &#34;GEO-LOCATION&#34;:</span>
<span class="hidden"><a id="L2989" href="#L2989">  2989</a>  </span><span>			var e PropGeoLocation</span>
<span class="hidden"><a id="L2990" href="#L2990">  2990</a>  </span>
<span class="hidden"><a id="L2991" href="#L2991">  2991</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L2992" href="#L2992">  2992</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmAudio, cGeoLocation, err)</span>
<span class="hidden"><a id="L2993" href="#L2993">  2993</a>  </span><span>			}</span>
<span class="hidden"><a id="L2994" href="#L2994">  2994</a>  </span>
<span class="hidden"><a id="L2995" href="#L2995">  2995</a>  </span><span>			s.GeoLocation = append(s.GeoLocation, e)</span>
<span class="hidden"><a id="L2996" href="#L2996">  2996</a>  </span><span>		case &#34;RELATED-TO&#34;:</span>
<span class="hidden"><a id="L2997" href="#L2997">  2997</a>  </span><span>			if s.RelatedTo != nil {</span>
<span class="hidden"><a id="L2998" href="#L2998">  2998</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmAudio, cRelatedTo)</span>
<span class="hidden"><a id="L2999" href="#L2999">  2999</a>  </span><span>			}</span>
<span class="hidden"><a id="L3000" href="#L3000">  3000</a>  </span>
<span class="hidden"><a id="L3001" href="#L3001">  3001</a>  </span><span>			s.RelatedTo = new(PropRelatedTo)</span>
<span class="hidden"><a id="L3002" href="#L3002">  3002</a>  </span>
<span class="hidden"><a id="L3003" href="#L3003">  3003</a>  </span><span>			if err := s.RelatedTo.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3004" href="#L3004">  3004</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmAudio, cRelatedTo, err)</span>
<span class="hidden"><a id="L3005" href="#L3005">  3005</a>  </span><span>			}</span>
<span class="hidden"><a id="L3006" href="#L3006">  3006</a>  </span><span>		case &#34;DEFAULT-ALARM&#34;:</span>
<span class="hidden"><a id="L3007" href="#L3007">  3007</a>  </span><span>			if s.DefaultAlarm != nil {</span>
<span class="hidden"><a id="L3008" href="#L3008">  3008</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmAudio, cDefaultAlarm)</span>
<span class="hidden"><a id="L3009" href="#L3009">  3009</a>  </span><span>			}</span>
<span class="hidden"><a id="L3010" href="#L3010">  3010</a>  </span>
<span class="hidden"><a id="L3011" href="#L3011">  3011</a>  </span><span>			s.DefaultAlarm = new(PropDefaultAlarm)</span>
<span class="hidden"><a id="L3012" href="#L3012">  3012</a>  </span>
<span class="hidden"><a id="L3013" href="#L3013">  3013</a>  </span><span>			if err := s.DefaultAlarm.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3014" href="#L3014">  3014</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmAudio, cDefaultAlarm, err)</span>
<span class="hidden"><a id="L3015" href="#L3015">  3015</a>  </span><span>			}</span>
<span class="hidden"><a id="L3016" href="#L3016">  3016</a>  </span><span>		case &#34;END&#34;:</span>
<span class="hidden"><a id="L3017" href="#L3017">  3017</a>  </span><span>			if value != &#34;VALARM&#34; {</span>
<span class="hidden"><a id="L3018" href="#L3018">  3018</a>  </span><span>				return fmt.Errorf(errDecodingType, cAlarmAudio, ErrInvalidEnd)</span>
<span class="hidden"><a id="L3019" href="#L3019">  3019</a>  </span><span>			}</span>
<span class="hidden"><a id="L3020" href="#L3020">  3020</a>  </span>
<span class="hidden"><a id="L3021" href="#L3021">  3021</a>  </span><span>			break Loop</span>
<span class="hidden"><a id="L3022" href="#L3022">  3022</a>  </span><span>		}</span>
<span class="hidden"><a id="L3023" href="#L3023">  3023</a>  </span><span>	}</span>
<span class="hidden"><a id="L3024" href="#L3024">  3024</a>  </span>
<span class="hidden"><a id="L3025" href="#L3025">  3025</a>  </span><span>	if !requiredTrigger {</span>
<span class="hidden"><a id="L3026" href="#L3026">  3026</a>  </span><span>		return fmt.Errorf(errDecodingType, cAlarmAudio, ErrMissingRequired)</span>
<span class="hidden"><a id="L3027" href="#L3027">  3027</a>  </span><span>	}</span>
<span class="hidden"><a id="L3028" href="#L3028">  3028</a>  </span>
<span class="hidden"><a id="L3029" href="#L3029">  3029</a>  </span><span>	if s.GeoLocation != nil &amp;&amp; (s.Proximity == nil) {</span>
<span class="hidden"><a id="L3030" href="#L3030">  3030</a>  </span><span>		return fmt.Errorf(errDecodingType, cAlarmAudio, ErrRequirementNotMet)</span>
<span class="hidden"><a id="L3031" href="#L3031">  3031</a>  </span><span>	}</span>
<span class="hidden"><a id="L3032" href="#L3032">  3032</a>  </span>
<span class="hidden"><a id="L3033" href="#L3033">  3033</a>  </span><span>	return nil</span>
<span class="hidden"><a id="L3034" href="#L3034">  3034</a>  </span><span>}</span>
<span class="hidden"><a id="L3035" href="#L3035">  3035</a>  </span>
<span class="hidden"><a id="L3036" href="#L3036">  3036</a>  </span><span>func (s *AlarmAudio) encode(w writer) {</span>
<span class="hidden"><a id="L3037" href="#L3037">  3037</a>  </span><span>	s.Trigger.encode(w)</span>
<span class="hidden"><a id="L3038" href="#L3038">  3038</a>  </span>
<span class="hidden"><a id="L3039" href="#L3039">  3039</a>  </span><span>	if s.Duration != nil {</span>
<span class="hidden"><a id="L3040" href="#L3040">  3040</a>  </span><span>		s.Duration.encode(w)</span>
<span class="hidden"><a id="L3041" href="#L3041">  3041</a>  </span><span>	}</span>
<span class="hidden"><a id="L3042" href="#L3042">  3042</a>  </span>
<span class="hidden"><a id="L3043" href="#L3043">  3043</a>  </span><span>	if s.Repeat != nil {</span>
<span class="hidden"><a id="L3044" href="#L3044">  3044</a>  </span><span>		s.Repeat.encode(w)</span>
<span class="hidden"><a id="L3045" href="#L3045">  3045</a>  </span><span>	}</span>
<span class="hidden"><a id="L3046" href="#L3046">  3046</a>  </span>
<span class="hidden"><a id="L3047" href="#L3047">  3047</a>  </span><span>	for n := range s.Attachment {</span>
<span class="hidden"><a id="L3048" href="#L3048">  3048</a>  </span><span>		s.Attachment[n].encode(w)</span>
<span class="hidden"><a id="L3049" href="#L3049">  3049</a>  </span><span>	}</span>
<span class="hidden"><a id="L3050" href="#L3050">  3050</a>  </span>
<span class="hidden"><a id="L3051" href="#L3051">  3051</a>  </span><span>	if s.UID != nil {</span>
<span class="hidden"><a id="L3052" href="#L3052">  3052</a>  </span><span>		s.UID.encode(w)</span>
<span class="hidden"><a id="L3053" href="#L3053">  3053</a>  </span><span>	}</span>
<span class="hidden"><a id="L3054" href="#L3054">  3054</a>  </span>
<span class="hidden"><a id="L3055" href="#L3055">  3055</a>  </span><span>	for n := range s.AlarmAgent {</span>
<span class="hidden"><a id="L3056" href="#L3056">  3056</a>  </span><span>		s.AlarmAgent[n].encode(w)</span>
<span class="hidden"><a id="L3057" href="#L3057">  3057</a>  </span><span>	}</span>
<span class="hidden"><a id="L3058" href="#L3058">  3058</a>  </span>
<span class="hidden"><a id="L3059" href="#L3059">  3059</a>  </span><span>	if s.AlarmStatus != nil {</span>
<span class="hidden"><a id="L3060" href="#L3060">  3060</a>  </span><span>		s.AlarmStatus.encode(w)</span>
<span class="hidden"><a id="L3061" href="#L3061">  3061</a>  </span><span>	}</span>
<span class="hidden"><a id="L3062" href="#L3062">  3062</a>  </span>
<span class="hidden"><a id="L3063" href="#L3063">  3063</a>  </span><span>	for n := range s.LastTriggered {</span>
<span class="hidden"><a id="L3064" href="#L3064">  3064</a>  </span><span>		s.LastTriggered[n].encode(w)</span>
<span class="hidden"><a id="L3065" href="#L3065">  3065</a>  </span><span>	}</span>
<span class="hidden"><a id="L3066" href="#L3066">  3066</a>  </span>
<span class="hidden"><a id="L3067" href="#L3067">  3067</a>  </span><span>	if s.Acknowledged != nil {</span>
<span class="hidden"><a id="L3068" href="#L3068">  3068</a>  </span><span>		s.Acknowledged.encode(w)</span>
<span class="hidden"><a id="L3069" href="#L3069">  3069</a>  </span><span>	}</span>
<span class="hidden"><a id="L3070" href="#L3070">  3070</a>  </span>
<span class="hidden"><a id="L3071" href="#L3071">  3071</a>  </span><span>	if s.Proximity != nil {</span>
<span class="hidden"><a id="L3072" href="#L3072">  3072</a>  </span><span>		s.Proximity.encode(w)</span>
<span class="hidden"><a id="L3073" href="#L3073">  3073</a>  </span><span>	}</span>
<span class="hidden"><a id="L3074" href="#L3074">  3074</a>  </span>
<span class="hidden"><a id="L3075" href="#L3075">  3075</a>  </span><span>	for n := range s.GeoLocation {</span>
<span class="hidden"><a id="L3076" href="#L3076">  3076</a>  </span><span>		s.GeoLocation[n].encode(w)</span>
<span class="hidden"><a id="L3077" href="#L3077">  3077</a>  </span><span>	}</span>
<span class="hidden"><a id="L3078" href="#L3078">  3078</a>  </span>
<span class="hidden"><a id="L3079" href="#L3079">  3079</a>  </span><span>	if s.RelatedTo != nil {</span>
<span class="hidden"><a id="L3080" href="#L3080">  3080</a>  </span><span>		s.RelatedTo.encode(w)</span>
<span class="hidden"><a id="L3081" href="#L3081">  3081</a>  </span><span>	}</span>
<span class="hidden"><a id="L3082" href="#L3082">  3082</a>  </span>
<span class="hidden"><a id="L3083" href="#L3083">  3083</a>  </span><span>	if s.DefaultAlarm != nil {</span>
<span class="hidden"><a id="L3084" href="#L3084">  3084</a>  </span><span>		s.DefaultAlarm.encode(w)</span>
<span class="hidden"><a id="L3085" href="#L3085">  3085</a>  </span><span>	}</span>
<span class="hidden"><a id="L3086" href="#L3086">  3086</a>  </span>
<span class="hidden"><a id="L3087" href="#L3087">  3087</a>  </span><span>}</span>
<span class="hidden"><a id="L3088" href="#L3088">  3088</a>  </span>
<span class="hidden"><a id="L3089" href="#L3089">  3089</a>  </span><span>func (s *AlarmAudio) valid() error {</span>
<span class="hidden"><a id="L3090" href="#L3090">  3090</a>  </span><span>	if err := s.Trigger.valid(); err != nil {</span>
<span class="hidden"><a id="L3091" href="#L3091">  3091</a>  </span><span>		return fmt.Errorf(errValidatingProp, cAlarmAudio, cTrigger, err)</span>
<span class="hidden"><a id="L3092" href="#L3092">  3092</a>  </span><span>	}</span>
<span class="hidden"><a id="L3093" href="#L3093">  3093</a>  </span>
<span class="hidden"><a id="L3094" href="#L3094">  3094</a>  </span><span>	if s.Duration != nil {</span>
<span class="hidden"><a id="L3095" href="#L3095">  3095</a>  </span><span>		if err := s.Duration.valid(); err != nil {</span>
<span class="hidden"><a id="L3096" href="#L3096">  3096</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmAudio, cDuration, err)</span>
<span class="hidden"><a id="L3097" href="#L3097">  3097</a>  </span><span>		}</span>
<span class="hidden"><a id="L3098" href="#L3098">  3098</a>  </span><span>	}</span>
<span class="hidden"><a id="L3099" href="#L3099">  3099</a>  </span>
<span class="hidden"><a id="L3100" href="#L3100">  3100</a>  </span><span>	if s.Repeat != nil {</span>
<span class="hidden"><a id="L3101" href="#L3101">  3101</a>  </span><span>		if err := s.Repeat.valid(); err != nil {</span>
<span class="hidden"><a id="L3102" href="#L3102">  3102</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmAudio, cRepeat, err)</span>
<span class="hidden"><a id="L3103" href="#L3103">  3103</a>  </span><span>		}</span>
<span class="hidden"><a id="L3104" href="#L3104">  3104</a>  </span><span>	}</span>
<span class="hidden"><a id="L3105" href="#L3105">  3105</a>  </span>
<span class="hidden"><a id="L3106" href="#L3106">  3106</a>  </span><span>	for n := range s.Attachment {</span>
<span class="hidden"><a id="L3107" href="#L3107">  3107</a>  </span><span>		if err := s.Attachment[n].valid(); err != nil {</span>
<span class="hidden"><a id="L3108" href="#L3108">  3108</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmAudio, cAttachment, err)</span>
<span class="hidden"><a id="L3109" href="#L3109">  3109</a>  </span><span>		}</span>
<span class="hidden"><a id="L3110" href="#L3110">  3110</a>  </span><span>	}</span>
<span class="hidden"><a id="L3111" href="#L3111">  3111</a>  </span>
<span class="hidden"><a id="L3112" href="#L3112">  3112</a>  </span><span>	if s.UID != nil {</span>
<span class="hidden"><a id="L3113" href="#L3113">  3113</a>  </span><span>		if err := s.UID.valid(); err != nil {</span>
<span class="hidden"><a id="L3114" href="#L3114">  3114</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmAudio, cUID, err)</span>
<span class="hidden"><a id="L3115" href="#L3115">  3115</a>  </span><span>		}</span>
<span class="hidden"><a id="L3116" href="#L3116">  3116</a>  </span><span>	}</span>
<span class="hidden"><a id="L3117" href="#L3117">  3117</a>  </span>
<span class="hidden"><a id="L3118" href="#L3118">  3118</a>  </span><span>	for n := range s.AlarmAgent {</span>
<span class="hidden"><a id="L3119" href="#L3119">  3119</a>  </span><span>		if err := s.AlarmAgent[n].valid(); err != nil {</span>
<span class="hidden"><a id="L3120" href="#L3120">  3120</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmAudio, cAlarmAgent, err)</span>
<span class="hidden"><a id="L3121" href="#L3121">  3121</a>  </span><span>		}</span>
<span class="hidden"><a id="L3122" href="#L3122">  3122</a>  </span><span>	}</span>
<span class="hidden"><a id="L3123" href="#L3123">  3123</a>  </span>
<span class="hidden"><a id="L3124" href="#L3124">  3124</a>  </span><span>	if s.AlarmStatus != nil {</span>
<span class="hidden"><a id="L3125" href="#L3125">  3125</a>  </span><span>		if err := s.AlarmStatus.valid(); err != nil {</span>
<span class="hidden"><a id="L3126" href="#L3126">  3126</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmAudio, cAlarmStatus, err)</span>
<span class="hidden"><a id="L3127" href="#L3127">  3127</a>  </span><span>		}</span>
<span class="hidden"><a id="L3128" href="#L3128">  3128</a>  </span><span>	}</span>
<span class="hidden"><a id="L3129" href="#L3129">  3129</a>  </span>
<span class="hidden"><a id="L3130" href="#L3130">  3130</a>  </span><span>	for n := range s.LastTriggered {</span>
<span class="hidden"><a id="L3131" href="#L3131">  3131</a>  </span><span>		if err := s.LastTriggered[n].valid(); err != nil {</span>
<span class="hidden"><a id="L3132" href="#L3132">  3132</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmAudio, cLastTriggered, err)</span>
<span class="hidden"><a id="L3133" href="#L3133">  3133</a>  </span><span>		}</span>
<span class="hidden"><a id="L3134" href="#L3134">  3134</a>  </span><span>	}</span>
<span class="hidden"><a id="L3135" href="#L3135">  3135</a>  </span>
<span class="hidden"><a id="L3136" href="#L3136">  3136</a>  </span><span>	if s.Acknowledged != nil {</span>
<span class="hidden"><a id="L3137" href="#L3137">  3137</a>  </span><span>		if err := s.Acknowledged.valid(); err != nil {</span>
<span class="hidden"><a id="L3138" href="#L3138">  3138</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmAudio, cAcknowledged, err)</span>
<span class="hidden"><a id="L3139" href="#L3139">  3139</a>  </span><span>		}</span>
<span class="hidden"><a id="L3140" href="#L3140">  3140</a>  </span><span>	}</span>
<span class="hidden"><a id="L3141" href="#L3141">  3141</a>  </span>
<span class="hidden"><a id="L3142" href="#L3142">  3142</a>  </span><span>	if s.Proximity != nil {</span>
<span class="hidden"><a id="L3143" href="#L3143">  3143</a>  </span><span>		if err := s.Proximity.valid(); err != nil {</span>
<span class="hidden"><a id="L3144" href="#L3144">  3144</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmAudio, cProximity, err)</span>
<span class="hidden"><a id="L3145" href="#L3145">  3145</a>  </span><span>		}</span>
<span class="hidden"><a id="L3146" href="#L3146">  3146</a>  </span><span>	}</span>
<span class="hidden"><a id="L3147" href="#L3147">  3147</a>  </span>
<span class="hidden"><a id="L3148" href="#L3148">  3148</a>  </span><span>	for n := range s.GeoLocation {</span>
<span class="hidden"><a id="L3149" href="#L3149">  3149</a>  </span><span>		if err := s.GeoLocation[n].valid(); err != nil {</span>
<span class="hidden"><a id="L3150" href="#L3150">  3150</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmAudio, cGeoLocation, err)</span>
<span class="hidden"><a id="L3151" href="#L3151">  3151</a>  </span><span>		}</span>
<span class="hidden"><a id="L3152" href="#L3152">  3152</a>  </span><span>	}</span>
<span class="hidden"><a id="L3153" href="#L3153">  3153</a>  </span>
<span class="hidden"><a id="L3154" href="#L3154">  3154</a>  </span><span>	if s.RelatedTo != nil {</span>
<span class="hidden"><a id="L3155" href="#L3155">  3155</a>  </span><span>		if err := s.RelatedTo.valid(); err != nil {</span>
<span class="hidden"><a id="L3156" href="#L3156">  3156</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmAudio, cRelatedTo, err)</span>
<span class="hidden"><a id="L3157" href="#L3157">  3157</a>  </span><span>		}</span>
<span class="hidden"><a id="L3158" href="#L3158">  3158</a>  </span><span>	}</span>
<span class="hidden"><a id="L3159" href="#L3159">  3159</a>  </span>
<span class="hidden"><a id="L3160" href="#L3160">  3160</a>  </span><span>	if s.DefaultAlarm != nil {</span>
<span class="hidden"><a id="L3161" href="#L3161">  3161</a>  </span><span>		if err := s.DefaultAlarm.valid(); err != nil {</span>
<span class="hidden"><a id="L3162" href="#L3162">  3162</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmAudio, cDefaultAlarm, err)</span>
<span class="hidden"><a id="L3163" href="#L3163">  3163</a>  </span><span>		}</span>
<span class="hidden"><a id="L3164" href="#L3164">  3164</a>  </span><span>	}</span>
<span class="hidden"><a id="L3165" href="#L3165">  3165</a>  </span>
<span class="hidden"><a id="L3166" href="#L3166">  3166</a>  </span><span>	return nil</span>
<span class="hidden"><a id="L3167" href="#L3167">  3167</a>  </span><span>}</span>
<span class="hidden"><a id="L3168" href="#L3168">  3168</a>  </span>
<span class="hidden"><a id="L3169" href="#L3169">  3169</a>  </span><span class="text">// AlarmDisplay provides a group of components that define a Display Alarm.</span>
<span class="hidden"><a id="L3170" href="#L3170">  3170</a>  </span><span>type AlarmDisplay struct {</span>
<span class="hidden"><a id="L3171" href="#L3171">  3171</a>  </span><span>	Description   PropDescription</span>
<span class="hidden"><a id="L3172" href="#L3172">  3172</a>  </span><span>	Trigger       PropTrigger</span>
<span class="hidden"><a id="L3173" href="#L3173">  3173</a>  </span><span>	Duration      *PropDuration</span>
<span class="hidden"><a id="L3174" href="#L3174">  3174</a>  </span><span>	Repeat        *PropRepeat</span>
<span class="hidden"><a id="L3175" href="#L3175">  3175</a>  </span><span>	UID           *PropUID</span>
<span class="hidden"><a id="L3176" href="#L3176">  3176</a>  </span><span>	AlarmAgent    []PropAlarmAgent</span>
<span class="hidden"><a id="L3177" href="#L3177">  3177</a>  </span><span>	AlarmStatus   *PropAlarmStatus</span>
<span class="hidden"><a id="L3178" href="#L3178">  3178</a>  </span><span>	LastTriggered []PropLastTriggered</span>
<span class="hidden"><a id="L3179" href="#L3179">  3179</a>  </span><span>	Acknowledged  *PropAcknowledged</span>
<span class="hidden"><a id="L3180" href="#L3180">  3180</a>  </span><span>	Proximity     *PropProximity</span>
<span class="hidden"><a id="L3181" href="#L3181">  3181</a>  </span><span>	GeoLocation   []PropGeoLocation</span>
<span class="hidden"><a id="L3182" href="#L3182">  3182</a>  </span><span>	RelatedTo     *PropRelatedTo</span>
<span class="hidden"><a id="L3183" href="#L3183">  3183</a>  </span><span>	DefaultAlarm  *PropDefaultAlarm</span>
<span class="hidden"><a id="L3184" href="#L3184">  3184</a>  </span><span>}</span>
<span class="hidden"><a id="L3185" href="#L3185">  3185</a>  </span>
<span class="hidden"><a id="L3186" href="#L3186">  3186</a>  </span><span>func (s *AlarmDisplay) decode(t tokeniser) error {</span>
<span class="hidden"><a id="L3187" href="#L3187">  3187</a>  </span><span>	var requiredDescription, requiredTrigger bool</span>
<span class="hidden"><a id="L3188" href="#L3188">  3188</a>  </span>
<span class="hidden"><a id="L3189" href="#L3189">  3189</a>  </span><span>Loop:</span>
<span class="hidden"><a id="L3190" href="#L3190">  3190</a>  </span><span>	for {</span>
<span class="hidden"><a id="L3191" href="#L3191">  3191</a>  </span><span>		p, err := t.GetPhrase()</span>
<span class="hidden"><a id="L3192" href="#L3192">  3192</a>  </span><span>		if err != nil {</span>
<span class="hidden"><a id="L3193" href="#L3193">  3193</a>  </span><span>			return fmt.Errorf(errDecodingType, cAlarmDisplay, err)</span>
<span class="hidden"><a id="L3194" href="#L3194">  3194</a>  </span><span>		} else if p.Type == parser.PhraseDone {</span>
<span class="hidden"><a id="L3195" href="#L3195">  3195</a>  </span><span>			return fmt.Errorf(errDecodingType, cAlarmDisplay, io.ErrUnexpectedEOF)</span>
<span class="hidden"><a id="L3196" href="#L3196">  3196</a>  </span><span>		}</span>
<span class="hidden"><a id="L3197" href="#L3197">  3197</a>  </span>
<span class="hidden"><a id="L3198" href="#L3198">  3198</a>  </span><span>		params := p.Data[1 : len(p.Data)-1]</span>
<span class="hidden"><a id="L3199" href="#L3199">  3199</a>  </span><span>		value := p.Data[len(p.Data)-1].Data</span>
<span class="hidden"><a id="L3200" href="#L3200">  3200</a>  </span>
<span class="hidden"><a id="L3201" href="#L3201">  3201</a>  </span><span>		switch strings.ToUpper(p.Data[0].Data) {</span>
<span class="hidden"><a id="L3202" href="#L3202">  3202</a>  </span><span>		case &#34;BEGIN&#34;:</span>
<span class="hidden"><a id="L3203" href="#L3203">  3203</a>  </span><span>			switch n := strings.ToUpper(value); n {</span>
<span class="hidden"><a id="L3204" href="#L3204">  3204</a>  </span><span>			default:</span>
<span class="hidden"><a id="L3205" href="#L3205">  3205</a>  </span><span>				if err := decodeDummy(t, n); err != nil {</span>
<span class="hidden"><a id="L3206" href="#L3206">  3206</a>  </span><span>					return fmt.Errorf(errDecodingType, cAlarmDisplay, err)</span>
<span class="hidden"><a id="L3207" href="#L3207">  3207</a>  </span><span>				}</span>
<span class="hidden"><a id="L3208" href="#L3208">  3208</a>  </span><span>			}</span>
<span class="hidden"><a id="L3209" href="#L3209">  3209</a>  </span><span>		case &#34;DESCRIPTION&#34;:</span>
<span class="hidden"><a id="L3210" href="#L3210">  3210</a>  </span><span>			if requiredDescription {</span>
<span class="hidden"><a id="L3211" href="#L3211">  3211</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmDisplay, cDescription)</span>
<span class="hidden"><a id="L3212" href="#L3212">  3212</a>  </span><span>			}</span>
<span class="hidden"><a id="L3213" href="#L3213">  3213</a>  </span>
<span class="hidden"><a id="L3214" href="#L3214">  3214</a>  </span><span>			requiredDescription = true</span>
<span class="hidden"><a id="L3215" href="#L3215">  3215</a>  </span>
<span class="hidden"><a id="L3216" href="#L3216">  3216</a>  </span><span>			if err := s.Description.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3217" href="#L3217">  3217</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmDisplay, cDescription, err)</span>
<span class="hidden"><a id="L3218" href="#L3218">  3218</a>  </span><span>			}</span>
<span class="hidden"><a id="L3219" href="#L3219">  3219</a>  </span><span>		case &#34;TRIGGER&#34;:</span>
<span class="hidden"><a id="L3220" href="#L3220">  3220</a>  </span><span>			if requiredTrigger {</span>
<span class="hidden"><a id="L3221" href="#L3221">  3221</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmDisplay, cTrigger)</span>
<span class="hidden"><a id="L3222" href="#L3222">  3222</a>  </span><span>			}</span>
<span class="hidden"><a id="L3223" href="#L3223">  3223</a>  </span>
<span class="hidden"><a id="L3224" href="#L3224">  3224</a>  </span><span>			requiredTrigger = true</span>
<span class="hidden"><a id="L3225" href="#L3225">  3225</a>  </span>
<span class="hidden"><a id="L3226" href="#L3226">  3226</a>  </span><span>			if err := s.Trigger.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3227" href="#L3227">  3227</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmDisplay, cTrigger, err)</span>
<span class="hidden"><a id="L3228" href="#L3228">  3228</a>  </span><span>			}</span>
<span class="hidden"><a id="L3229" href="#L3229">  3229</a>  </span><span>		case &#34;DURATION&#34;:</span>
<span class="hidden"><a id="L3230" href="#L3230">  3230</a>  </span><span>			if s.Duration != nil {</span>
<span class="hidden"><a id="L3231" href="#L3231">  3231</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmDisplay, cDuration)</span>
<span class="hidden"><a id="L3232" href="#L3232">  3232</a>  </span><span>			}</span>
<span class="hidden"><a id="L3233" href="#L3233">  3233</a>  </span>
<span class="hidden"><a id="L3234" href="#L3234">  3234</a>  </span><span>			s.Duration = new(PropDuration)</span>
<span class="hidden"><a id="L3235" href="#L3235">  3235</a>  </span>
<span class="hidden"><a id="L3236" href="#L3236">  3236</a>  </span><span>			if err := s.Duration.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3237" href="#L3237">  3237</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmDisplay, cDuration, err)</span>
<span class="hidden"><a id="L3238" href="#L3238">  3238</a>  </span><span>			}</span>
<span class="hidden"><a id="L3239" href="#L3239">  3239</a>  </span><span>		case &#34;REPEAT&#34;:</span>
<span class="hidden"><a id="L3240" href="#L3240">  3240</a>  </span><span>			if s.Repeat != nil {</span>
<span class="hidden"><a id="L3241" href="#L3241">  3241</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmDisplay, cRepeat)</span>
<span class="hidden"><a id="L3242" href="#L3242">  3242</a>  </span><span>			}</span>
<span class="hidden"><a id="L3243" href="#L3243">  3243</a>  </span>
<span class="hidden"><a id="L3244" href="#L3244">  3244</a>  </span><span>			s.Repeat = new(PropRepeat)</span>
<span class="hidden"><a id="L3245" href="#L3245">  3245</a>  </span>
<span class="hidden"><a id="L3246" href="#L3246">  3246</a>  </span><span>			if err := s.Repeat.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3247" href="#L3247">  3247</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmDisplay, cRepeat, err)</span>
<span class="hidden"><a id="L3248" href="#L3248">  3248</a>  </span><span>			}</span>
<span class="hidden"><a id="L3249" href="#L3249">  3249</a>  </span><span>		case &#34;UID&#34;:</span>
<span class="hidden"><a id="L3250" href="#L3250">  3250</a>  </span><span>			if s.UID != nil {</span>
<span class="hidden"><a id="L3251" href="#L3251">  3251</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmDisplay, cUID)</span>
<span class="hidden"><a id="L3252" href="#L3252">  3252</a>  </span><span>			}</span>
<span class="hidden"><a id="L3253" href="#L3253">  3253</a>  </span>
<span class="hidden"><a id="L3254" href="#L3254">  3254</a>  </span><span>			s.UID = new(PropUID)</span>
<span class="hidden"><a id="L3255" href="#L3255">  3255</a>  </span>
<span class="hidden"><a id="L3256" href="#L3256">  3256</a>  </span><span>			if err := s.UID.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3257" href="#L3257">  3257</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmDisplay, cUID, err)</span>
<span class="hidden"><a id="L3258" href="#L3258">  3258</a>  </span><span>			}</span>
<span class="hidden"><a id="L3259" href="#L3259">  3259</a>  </span><span>		case &#34;ALARM-AGENT&#34;:</span>
<span class="hidden"><a id="L3260" href="#L3260">  3260</a>  </span><span>			var e PropAlarmAgent</span>
<span class="hidden"><a id="L3261" href="#L3261">  3261</a>  </span>
<span class="hidden"><a id="L3262" href="#L3262">  3262</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3263" href="#L3263">  3263</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmDisplay, cAlarmAgent, err)</span>
<span class="hidden"><a id="L3264" href="#L3264">  3264</a>  </span><span>			}</span>
<span class="hidden"><a id="L3265" href="#L3265">  3265</a>  </span>
<span class="hidden"><a id="L3266" href="#L3266">  3266</a>  </span><span>			s.AlarmAgent = append(s.AlarmAgent, e)</span>
<span class="hidden"><a id="L3267" href="#L3267">  3267</a>  </span><span>		case &#34;STATUS&#34;:</span>
<span class="hidden"><a id="L3268" href="#L3268">  3268</a>  </span><span>			if s.AlarmStatus != nil {</span>
<span class="hidden"><a id="L3269" href="#L3269">  3269</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmDisplay, cAlarmStatus)</span>
<span class="hidden"><a id="L3270" href="#L3270">  3270</a>  </span><span>			}</span>
<span class="hidden"><a id="L3271" href="#L3271">  3271</a>  </span>
<span class="hidden"><a id="L3272" href="#L3272">  3272</a>  </span><span>			s.AlarmStatus = new(PropAlarmStatus)</span>
<span class="hidden"><a id="L3273" href="#L3273">  3273</a>  </span>
<span class="hidden"><a id="L3274" href="#L3274">  3274</a>  </span><span>			if err := s.AlarmStatus.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3275" href="#L3275">  3275</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmDisplay, cAlarmStatus, err)</span>
<span class="hidden"><a id="L3276" href="#L3276">  3276</a>  </span><span>			}</span>
<span class="hidden"><a id="L3277" href="#L3277">  3277</a>  </span><span>		case &#34;LAST-TRIGGERED&#34;:</span>
<span class="hidden"><a id="L3278" href="#L3278">  3278</a>  </span><span>			var e PropLastTriggered</span>
<span class="hidden"><a id="L3279" href="#L3279">  3279</a>  </span>
<span class="hidden"><a id="L3280" href="#L3280">  3280</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3281" href="#L3281">  3281</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmDisplay, cLastTriggered, err)</span>
<span class="hidden"><a id="L3282" href="#L3282">  3282</a>  </span><span>			}</span>
<span class="hidden"><a id="L3283" href="#L3283">  3283</a>  </span>
<span class="hidden"><a id="L3284" href="#L3284">  3284</a>  </span><span>			s.LastTriggered = append(s.LastTriggered, e)</span>
<span class="hidden"><a id="L3285" href="#L3285">  3285</a>  </span><span>		case &#34;ACKNOWLEDGED&#34;:</span>
<span class="hidden"><a id="L3286" href="#L3286">  3286</a>  </span><span>			if s.Acknowledged != nil {</span>
<span class="hidden"><a id="L3287" href="#L3287">  3287</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmDisplay, cAcknowledged)</span>
<span class="hidden"><a id="L3288" href="#L3288">  3288</a>  </span><span>			}</span>
<span class="hidden"><a id="L3289" href="#L3289">  3289</a>  </span>
<span class="hidden"><a id="L3290" href="#L3290">  3290</a>  </span><span>			s.Acknowledged = new(PropAcknowledged)</span>
<span class="hidden"><a id="L3291" href="#L3291">  3291</a>  </span>
<span class="hidden"><a id="L3292" href="#L3292">  3292</a>  </span><span>			if err := s.Acknowledged.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3293" href="#L3293">  3293</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmDisplay, cAcknowledged, err)</span>
<span class="hidden"><a id="L3294" href="#L3294">  3294</a>  </span><span>			}</span>
<span class="hidden"><a id="L3295" href="#L3295">  3295</a>  </span><span>		case &#34;PROXIMITY&#34;:</span>
<span class="hidden"><a id="L3296" href="#L3296">  3296</a>  </span><span>			if s.Proximity != nil {</span>
<span class="hidden"><a id="L3297" href="#L3297">  3297</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmDisplay, cProximity)</span>
<span class="hidden"><a id="L3298" href="#L3298">  3298</a>  </span><span>			}</span>
<span class="hidden"><a id="L3299" href="#L3299">  3299</a>  </span>
<span class="hidden"><a id="L3300" href="#L3300">  3300</a>  </span><span>			s.Proximity = new(PropProximity)</span>
<span class="hidden"><a id="L3301" href="#L3301">  3301</a>  </span>
<span class="hidden"><a id="L3302" href="#L3302">  3302</a>  </span><span>			if err := s.Proximity.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3303" href="#L3303">  3303</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmDisplay, cProximity, err)</span>
<span class="hidden"><a id="L3304" href="#L3304">  3304</a>  </span><span>			}</span>
<span class="hidden"><a id="L3305" href="#L3305">  3305</a>  </span><span>		case &#34;GEO-LOCATION&#34;:</span>
<span class="hidden"><a id="L3306" href="#L3306">  3306</a>  </span><span>			var e PropGeoLocation</span>
<span class="hidden"><a id="L3307" href="#L3307">  3307</a>  </span>
<span class="hidden"><a id="L3308" href="#L3308">  3308</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3309" href="#L3309">  3309</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmDisplay, cGeoLocation, err)</span>
<span class="hidden"><a id="L3310" href="#L3310">  3310</a>  </span><span>			}</span>
<span class="hidden"><a id="L3311" href="#L3311">  3311</a>  </span>
<span class="hidden"><a id="L3312" href="#L3312">  3312</a>  </span><span>			s.GeoLocation = append(s.GeoLocation, e)</span>
<span class="hidden"><a id="L3313" href="#L3313">  3313</a>  </span><span>		case &#34;RELATED-TO&#34;:</span>
<span class="hidden"><a id="L3314" href="#L3314">  3314</a>  </span><span>			if s.RelatedTo != nil {</span>
<span class="hidden"><a id="L3315" href="#L3315">  3315</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmDisplay, cRelatedTo)</span>
<span class="hidden"><a id="L3316" href="#L3316">  3316</a>  </span><span>			}</span>
<span class="hidden"><a id="L3317" href="#L3317">  3317</a>  </span>
<span class="hidden"><a id="L3318" href="#L3318">  3318</a>  </span><span>			s.RelatedTo = new(PropRelatedTo)</span>
<span class="hidden"><a id="L3319" href="#L3319">  3319</a>  </span>
<span class="hidden"><a id="L3320" href="#L3320">  3320</a>  </span><span>			if err := s.RelatedTo.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3321" href="#L3321">  3321</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmDisplay, cRelatedTo, err)</span>
<span class="hidden"><a id="L3322" href="#L3322">  3322</a>  </span><span>			}</span>
<span class="hidden"><a id="L3323" href="#L3323">  3323</a>  </span><span>		case &#34;DEFAULT-ALARM&#34;:</span>
<span class="hidden"><a id="L3324" href="#L3324">  3324</a>  </span><span>			if s.DefaultAlarm != nil {</span>
<span class="hidden"><a id="L3325" href="#L3325">  3325</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmDisplay, cDefaultAlarm)</span>
<span class="hidden"><a id="L3326" href="#L3326">  3326</a>  </span><span>			}</span>
<span class="hidden"><a id="L3327" href="#L3327">  3327</a>  </span>
<span class="hidden"><a id="L3328" href="#L3328">  3328</a>  </span><span>			s.DefaultAlarm = new(PropDefaultAlarm)</span>
<span class="hidden"><a id="L3329" href="#L3329">  3329</a>  </span>
<span class="hidden"><a id="L3330" href="#L3330">  3330</a>  </span><span>			if err := s.DefaultAlarm.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3331" href="#L3331">  3331</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmDisplay, cDefaultAlarm, err)</span>
<span class="hidden"><a id="L3332" href="#L3332">  3332</a>  </span><span>			}</span>
<span class="hidden"><a id="L3333" href="#L3333">  3333</a>  </span><span>		case &#34;END&#34;:</span>
<span class="hidden"><a id="L3334" href="#L3334">  3334</a>  </span><span>			if value != &#34;VALARM&#34; {</span>
<span class="hidden"><a id="L3335" href="#L3335">  3335</a>  </span><span>				return fmt.Errorf(errDecodingType, cAlarmDisplay, ErrInvalidEnd)</span>
<span class="hidden"><a id="L3336" href="#L3336">  3336</a>  </span><span>			}</span>
<span class="hidden"><a id="L3337" href="#L3337">  3337</a>  </span>
<span class="hidden"><a id="L3338" href="#L3338">  3338</a>  </span><span>			break Loop</span>
<span class="hidden"><a id="L3339" href="#L3339">  3339</a>  </span><span>		}</span>
<span class="hidden"><a id="L3340" href="#L3340">  3340</a>  </span><span>	}</span>
<span class="hidden"><a id="L3341" href="#L3341">  3341</a>  </span>
<span class="hidden"><a id="L3342" href="#L3342">  3342</a>  </span><span>	if !requiredDescription || !requiredTrigger {</span>
<span class="hidden"><a id="L3343" href="#L3343">  3343</a>  </span><span>		return fmt.Errorf(errDecodingType, cAlarmDisplay, ErrMissingRequired)</span>
<span class="hidden"><a id="L3344" href="#L3344">  3344</a>  </span><span>	}</span>
<span class="hidden"><a id="L3345" href="#L3345">  3345</a>  </span>
<span class="hidden"><a id="L3346" href="#L3346">  3346</a>  </span><span>	if s.GeoLocation != nil &amp;&amp; (s.Proximity == nil) {</span>
<span class="hidden"><a id="L3347" href="#L3347">  3347</a>  </span><span>		return fmt.Errorf(errDecodingType, cAlarmDisplay, ErrRequirementNotMet)</span>
<span class="hidden"><a id="L3348" href="#L3348">  3348</a>  </span><span>	}</span>
<span class="hidden"><a id="L3349" href="#L3349">  3349</a>  </span>
<span class="hidden"><a id="L3350" href="#L3350">  3350</a>  </span><span>	return nil</span>
<span class="hidden"><a id="L3351" href="#L3351">  3351</a>  </span><span>}</span>
<span class="hidden"><a id="L3352" href="#L3352">  3352</a>  </span>
<span class="hidden"><a id="L3353" href="#L3353">  3353</a>  </span><span>func (s *AlarmDisplay) encode(w writer) {</span>
<span class="hidden"><a id="L3354" href="#L3354">  3354</a>  </span><span>	s.Description.encode(w)</span>
<span class="hidden"><a id="L3355" href="#L3355">  3355</a>  </span><span>	s.Trigger.encode(w)</span>
<span class="hidden"><a id="L3356" href="#L3356">  3356</a>  </span>
<span class="hidden"><a id="L3357" href="#L3357">  3357</a>  </span><span>	if s.Duration != nil {</span>
<span class="hidden"><a id="L3358" href="#L3358">  3358</a>  </span><span>		s.Duration.encode(w)</span>
<span class="hidden"><a id="L3359" href="#L3359">  3359</a>  </span><span>	}</span>
<span class="hidden"><a id="L3360" href="#L3360">  3360</a>  </span>
<span class="hidden"><a id="L3361" href="#L3361">  3361</a>  </span><span>	if s.Repeat != nil {</span>
<span class="hidden"><a id="L3362" href="#L3362">  3362</a>  </span><span>		s.Repeat.encode(w)</span>
<span class="hidden"><a id="L3363" href="#L3363">  3363</a>  </span><span>	}</span>
<span class="hidden"><a id="L3364" href="#L3364">  3364</a>  </span>
<span class="hidden"><a id="L3365" href="#L3365">  3365</a>  </span><span>	if s.UID != nil {</span>
<span class="hidden"><a id="L3366" href="#L3366">  3366</a>  </span><span>		s.UID.encode(w)</span>
<span class="hidden"><a id="L3367" href="#L3367">  3367</a>  </span><span>	}</span>
<span class="hidden"><a id="L3368" href="#L3368">  3368</a>  </span>
<span class="hidden"><a id="L3369" href="#L3369">  3369</a>  </span><span>	for n := range s.AlarmAgent {</span>
<span class="hidden"><a id="L3370" href="#L3370">  3370</a>  </span><span>		s.AlarmAgent[n].encode(w)</span>
<span class="hidden"><a id="L3371" href="#L3371">  3371</a>  </span><span>	}</span>
<span class="hidden"><a id="L3372" href="#L3372">  3372</a>  </span>
<span class="hidden"><a id="L3373" href="#L3373">  3373</a>  </span><span>	if s.AlarmStatus != nil {</span>
<span class="hidden"><a id="L3374" href="#L3374">  3374</a>  </span><span>		s.AlarmStatus.encode(w)</span>
<span class="hidden"><a id="L3375" href="#L3375">  3375</a>  </span><span>	}</span>
<span class="hidden"><a id="L3376" href="#L3376">  3376</a>  </span>
<span class="hidden"><a id="L3377" href="#L3377">  3377</a>  </span><span>	for n := range s.LastTriggered {</span>
<span class="hidden"><a id="L3378" href="#L3378">  3378</a>  </span><span>		s.LastTriggered[n].encode(w)</span>
<span class="hidden"><a id="L3379" href="#L3379">  3379</a>  </span><span>	}</span>
<span class="hidden"><a id="L3380" href="#L3380">  3380</a>  </span>
<span class="hidden"><a id="L3381" href="#L3381">  3381</a>  </span><span>	if s.Acknowledged != nil {</span>
<span class="hidden"><a id="L3382" href="#L3382">  3382</a>  </span><span>		s.Acknowledged.encode(w)</span>
<span class="hidden"><a id="L3383" href="#L3383">  3383</a>  </span><span>	}</span>
<span class="hidden"><a id="L3384" href="#L3384">  3384</a>  </span>
<span class="hidden"><a id="L3385" href="#L3385">  3385</a>  </span><span>	if s.Proximity != nil {</span>
<span class="hidden"><a id="L3386" href="#L3386">  3386</a>  </span><span>		s.Proximity.encode(w)</span>
<span class="hidden"><a id="L3387" href="#L3387">  3387</a>  </span><span>	}</span>
<span class="hidden"><a id="L3388" href="#L3388">  3388</a>  </span>
<span class="hidden"><a id="L3389" href="#L3389">  3389</a>  </span><span>	for n := range s.GeoLocation {</span>
<span class="hidden"><a id="L3390" href="#L3390">  3390</a>  </span><span>		s.GeoLocation[n].encode(w)</span>
<span class="hidden"><a id="L3391" href="#L3391">  3391</a>  </span><span>	}</span>
<span class="hidden"><a id="L3392" href="#L3392">  3392</a>  </span>
<span class="hidden"><a id="L3393" href="#L3393">  3393</a>  </span><span>	if s.RelatedTo != nil {</span>
<span class="hidden"><a id="L3394" href="#L3394">  3394</a>  </span><span>		s.RelatedTo.encode(w)</span>
<span class="hidden"><a id="L3395" href="#L3395">  3395</a>  </span><span>	}</span>
<span class="hidden"><a id="L3396" href="#L3396">  3396</a>  </span>
<span class="hidden"><a id="L3397" href="#L3397">  3397</a>  </span><span>	if s.DefaultAlarm != nil {</span>
<span class="hidden"><a id="L3398" href="#L3398">  3398</a>  </span><span>		s.DefaultAlarm.encode(w)</span>
<span class="hidden"><a id="L3399" href="#L3399">  3399</a>  </span><span>	}</span>
<span class="hidden"><a id="L3400" href="#L3400">  3400</a>  </span>
<span class="hidden"><a id="L3401" href="#L3401">  3401</a>  </span><span>}</span>
<span class="hidden"><a id="L3402" href="#L3402">  3402</a>  </span>
<span class="hidden"><a id="L3403" href="#L3403">  3403</a>  </span><span>func (s *AlarmDisplay) valid() error {</span>
<span class="hidden"><a id="L3404" href="#L3404">  3404</a>  </span><span>	if err := s.Description.valid(); err != nil {</span>
<span class="hidden"><a id="L3405" href="#L3405">  3405</a>  </span><span>		return fmt.Errorf(errValidatingProp, cAlarmDisplay, cDescription, err)</span>
<span class="hidden"><a id="L3406" href="#L3406">  3406</a>  </span><span>	}</span>
<span class="hidden"><a id="L3407" href="#L3407">  3407</a>  </span>
<span class="hidden"><a id="L3408" href="#L3408">  3408</a>  </span><span>	if err := s.Trigger.valid(); err != nil {</span>
<span class="hidden"><a id="L3409" href="#L3409">  3409</a>  </span><span>		return fmt.Errorf(errValidatingProp, cAlarmDisplay, cTrigger, err)</span>
<span class="hidden"><a id="L3410" href="#L3410">  3410</a>  </span><span>	}</span>
<span class="hidden"><a id="L3411" href="#L3411">  3411</a>  </span>
<span class="hidden"><a id="L3412" href="#L3412">  3412</a>  </span><span>	if s.Duration != nil {</span>
<span class="hidden"><a id="L3413" href="#L3413">  3413</a>  </span><span>		if err := s.Duration.valid(); err != nil {</span>
<span class="hidden"><a id="L3414" href="#L3414">  3414</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmDisplay, cDuration, err)</span>
<span class="hidden"><a id="L3415" href="#L3415">  3415</a>  </span><span>		}</span>
<span class="hidden"><a id="L3416" href="#L3416">  3416</a>  </span><span>	}</span>
<span class="hidden"><a id="L3417" href="#L3417">  3417</a>  </span>
<span class="hidden"><a id="L3418" href="#L3418">  3418</a>  </span><span>	if s.Repeat != nil {</span>
<span class="hidden"><a id="L3419" href="#L3419">  3419</a>  </span><span>		if err := s.Repeat.valid(); err != nil {</span>
<span class="hidden"><a id="L3420" href="#L3420">  3420</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmDisplay, cRepeat, err)</span>
<span class="hidden"><a id="L3421" href="#L3421">  3421</a>  </span><span>		}</span>
<span class="hidden"><a id="L3422" href="#L3422">  3422</a>  </span><span>	}</span>
<span class="hidden"><a id="L3423" href="#L3423">  3423</a>  </span>
<span class="hidden"><a id="L3424" href="#L3424">  3424</a>  </span><span>	if s.UID != nil {</span>
<span class="hidden"><a id="L3425" href="#L3425">  3425</a>  </span><span>		if err := s.UID.valid(); err != nil {</span>
<span class="hidden"><a id="L3426" href="#L3426">  3426</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmDisplay, cUID, err)</span>
<span class="hidden"><a id="L3427" href="#L3427">  3427</a>  </span><span>		}</span>
<span class="hidden"><a id="L3428" href="#L3428">  3428</a>  </span><span>	}</span>
<span class="hidden"><a id="L3429" href="#L3429">  3429</a>  </span>
<span class="hidden"><a id="L3430" href="#L3430">  3430</a>  </span><span>	for n := range s.AlarmAgent {</span>
<span class="hidden"><a id="L3431" href="#L3431">  3431</a>  </span><span>		if err := s.AlarmAgent[n].valid(); err != nil {</span>
<span class="hidden"><a id="L3432" href="#L3432">  3432</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmDisplay, cAlarmAgent, err)</span>
<span class="hidden"><a id="L3433" href="#L3433">  3433</a>  </span><span>		}</span>
<span class="hidden"><a id="L3434" href="#L3434">  3434</a>  </span><span>	}</span>
<span class="hidden"><a id="L3435" href="#L3435">  3435</a>  </span>
<span class="hidden"><a id="L3436" href="#L3436">  3436</a>  </span><span>	if s.AlarmStatus != nil {</span>
<span class="hidden"><a id="L3437" href="#L3437">  3437</a>  </span><span>		if err := s.AlarmStatus.valid(); err != nil {</span>
<span class="hidden"><a id="L3438" href="#L3438">  3438</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmDisplay, cAlarmStatus, err)</span>
<span class="hidden"><a id="L3439" href="#L3439">  3439</a>  </span><span>		}</span>
<span class="hidden"><a id="L3440" href="#L3440">  3440</a>  </span><span>	}</span>
<span class="hidden"><a id="L3441" href="#L3441">  3441</a>  </span>
<span class="hidden"><a id="L3442" href="#L3442">  3442</a>  </span><span>	for n := range s.LastTriggered {</span>
<span class="hidden"><a id="L3443" href="#L3443">  3443</a>  </span><span>		if err := s.LastTriggered[n].valid(); err != nil {</span>
<span class="hidden"><a id="L3444" href="#L3444">  3444</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmDisplay, cLastTriggered, err)</span>
<span class="hidden"><a id="L3445" href="#L3445">  3445</a>  </span><span>		}</span>
<span class="hidden"><a id="L3446" href="#L3446">  3446</a>  </span><span>	}</span>
<span class="hidden"><a id="L3447" href="#L3447">  3447</a>  </span>
<span class="hidden"><a id="L3448" href="#L3448">  3448</a>  </span><span>	if s.Acknowledged != nil {</span>
<span class="hidden"><a id="L3449" href="#L3449">  3449</a>  </span><span>		if err := s.Acknowledged.valid(); err != nil {</span>
<span class="hidden"><a id="L3450" href="#L3450">  3450</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmDisplay, cAcknowledged, err)</span>
<span class="hidden"><a id="L3451" href="#L3451">  3451</a>  </span><span>		}</span>
<span class="hidden"><a id="L3452" href="#L3452">  3452</a>  </span><span>	}</span>
<span class="hidden"><a id="L3453" href="#L3453">  3453</a>  </span>
<span class="hidden"><a id="L3454" href="#L3454">  3454</a>  </span><span>	if s.Proximity != nil {</span>
<span class="hidden"><a id="L3455" href="#L3455">  3455</a>  </span><span>		if err := s.Proximity.valid(); err != nil {</span>
<span class="hidden"><a id="L3456" href="#L3456">  3456</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmDisplay, cProximity, err)</span>
<span class="hidden"><a id="L3457" href="#L3457">  3457</a>  </span><span>		}</span>
<span class="hidden"><a id="L3458" href="#L3458">  3458</a>  </span><span>	}</span>
<span class="hidden"><a id="L3459" href="#L3459">  3459</a>  </span>
<span class="hidden"><a id="L3460" href="#L3460">  3460</a>  </span><span>	for n := range s.GeoLocation {</span>
<span class="hidden"><a id="L3461" href="#L3461">  3461</a>  </span><span>		if err := s.GeoLocation[n].valid(); err != nil {</span>
<span class="hidden"><a id="L3462" href="#L3462">  3462</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmDisplay, cGeoLocation, err)</span>
<span class="hidden"><a id="L3463" href="#L3463">  3463</a>  </span><span>		}</span>
<span class="hidden"><a id="L3464" href="#L3464">  3464</a>  </span><span>	}</span>
<span class="hidden"><a id="L3465" href="#L3465">  3465</a>  </span>
<span class="hidden"><a id="L3466" href="#L3466">  3466</a>  </span><span>	if s.RelatedTo != nil {</span>
<span class="hidden"><a id="L3467" href="#L3467">  3467</a>  </span><span>		if err := s.RelatedTo.valid(); err != nil {</span>
<span class="hidden"><a id="L3468" href="#L3468">  3468</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmDisplay, cRelatedTo, err)</span>
<span class="hidden"><a id="L3469" href="#L3469">  3469</a>  </span><span>		}</span>
<span class="hidden"><a id="L3470" href="#L3470">  3470</a>  </span><span>	}</span>
<span class="hidden"><a id="L3471" href="#L3471">  3471</a>  </span>
<span class="hidden"><a id="L3472" href="#L3472">  3472</a>  </span><span>	if s.DefaultAlarm != nil {</span>
<span class="hidden"><a id="L3473" href="#L3473">  3473</a>  </span><span>		if err := s.DefaultAlarm.valid(); err != nil {</span>
<span class="hidden"><a id="L3474" href="#L3474">  3474</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmDisplay, cDefaultAlarm, err)</span>
<span class="hidden"><a id="L3475" href="#L3475">  3475</a>  </span><span>		}</span>
<span class="hidden"><a id="L3476" href="#L3476">  3476</a>  </span><span>	}</span>
<span class="hidden"><a id="L3477" href="#L3477">  3477</a>  </span>
<span class="hidden"><a id="L3478" href="#L3478">  3478</a>  </span><span>	return nil</span>
<span class="hidden"><a id="L3479" href="#L3479">  3479</a>  </span><span>}</span>
<span class="hidden"><a id="L3480" href="#L3480">  3480</a>  </span>
<span class="hidden"><a id="L3481" href="#L3481">  3481</a>  </span><span class="text">// AlarmEmail provides a group of components that define an Email Alarm.</span>
<span class="hidden"><a id="L3482" href="#L3482">  3482</a>  </span><span>type AlarmEmail struct {</span>
<span class="hidden"><a id="L3483" href="#L3483">  3483</a>  </span><span>	Description   PropDescription</span>
<span class="hidden"><a id="L3484" href="#L3484">  3484</a>  </span><span>	Trigger       PropTrigger</span>
<span class="hidden"><a id="L3485" href="#L3485">  3485</a>  </span><span>	Summary       PropSummary</span>
<span class="hidden"><a id="L3486" href="#L3486">  3486</a>  </span><span>	Attendee      *PropAttendee</span>
<span class="hidden"><a id="L3487" href="#L3487">  3487</a>  </span><span>	Duration      *PropDuration</span>
<span class="hidden"><a id="L3488" href="#L3488">  3488</a>  </span><span>	Repeat        *PropRepeat</span>
<span class="hidden"><a id="L3489" href="#L3489">  3489</a>  </span><span>	UID           *PropUID</span>
<span class="hidden"><a id="L3490" href="#L3490">  3490</a>  </span><span>	AlarmAgent    []PropAlarmAgent</span>
<span class="hidden"><a id="L3491" href="#L3491">  3491</a>  </span><span>	AlarmStatus   *PropAlarmStatus</span>
<span class="hidden"><a id="L3492" href="#L3492">  3492</a>  </span><span>	LastTriggered []PropLastTriggered</span>
<span class="hidden"><a id="L3493" href="#L3493">  3493</a>  </span><span>	Acknowledged  *PropAcknowledged</span>
<span class="hidden"><a id="L3494" href="#L3494">  3494</a>  </span><span>	Proximity     *PropProximity</span>
<span class="hidden"><a id="L3495" href="#L3495">  3495</a>  </span><span>	GeoLocation   []PropGeoLocation</span>
<span class="hidden"><a id="L3496" href="#L3496">  3496</a>  </span><span>	RelatedTo     *PropRelatedTo</span>
<span class="hidden"><a id="L3497" href="#L3497">  3497</a>  </span><span>	DefaultAlarm  *PropDefaultAlarm</span>
<span class="hidden"><a id="L3498" href="#L3498">  3498</a>  </span><span>}</span>
<span class="hidden"><a id="L3499" href="#L3499">  3499</a>  </span>
<span class="hidden"><a id="L3500" href="#L3500">  3500</a>  </span><span>func (s *AlarmEmail) decode(t tokeniser) error {</span>
<span class="hidden"><a id="L3501" href="#L3501">  3501</a>  </span><span>	var requiredDescription, requiredTrigger, requiredSummary bool</span>
<span class="hidden"><a id="L3502" href="#L3502">  3502</a>  </span>
<span class="hidden"><a id="L3503" href="#L3503">  3503</a>  </span><span>Loop:</span>
<span class="hidden"><a id="L3504" href="#L3504">  3504</a>  </span><span>	for {</span>
<span class="hidden"><a id="L3505" href="#L3505">  3505</a>  </span><span>		p, err := t.GetPhrase()</span>
<span class="hidden"><a id="L3506" href="#L3506">  3506</a>  </span><span>		if err != nil {</span>
<span class="hidden"><a id="L3507" href="#L3507">  3507</a>  </span><span>			return fmt.Errorf(errDecodingType, cAlarmEmail, err)</span>
<span class="hidden"><a id="L3508" href="#L3508">  3508</a>  </span><span>		} else if p.Type == parser.PhraseDone {</span>
<span class="hidden"><a id="L3509" href="#L3509">  3509</a>  </span><span>			return fmt.Errorf(errDecodingType, cAlarmEmail, io.ErrUnexpectedEOF)</span>
<span class="hidden"><a id="L3510" href="#L3510">  3510</a>  </span><span>		}</span>
<span class="hidden"><a id="L3511" href="#L3511">  3511</a>  </span>
<span class="hidden"><a id="L3512" href="#L3512">  3512</a>  </span><span>		params := p.Data[1 : len(p.Data)-1]</span>
<span class="hidden"><a id="L3513" href="#L3513">  3513</a>  </span><span>		value := p.Data[len(p.Data)-1].Data</span>
<span class="hidden"><a id="L3514" href="#L3514">  3514</a>  </span>
<span class="hidden"><a id="L3515" href="#L3515">  3515</a>  </span><span>		switch strings.ToUpper(p.Data[0].Data) {</span>
<span class="hidden"><a id="L3516" href="#L3516">  3516</a>  </span><span>		case &#34;BEGIN&#34;:</span>
<span class="hidden"><a id="L3517" href="#L3517">  3517</a>  </span><span>			switch n := strings.ToUpper(value); n {</span>
<span class="hidden"><a id="L3518" href="#L3518">  3518</a>  </span><span>			default:</span>
<span class="hidden"><a id="L3519" href="#L3519">  3519</a>  </span><span>				if err := decodeDummy(t, n); err != nil {</span>
<span class="hidden"><a id="L3520" href="#L3520">  3520</a>  </span><span>					return fmt.Errorf(errDecodingType, cAlarmEmail, err)</span>
<span class="hidden"><a id="L3521" href="#L3521">  3521</a>  </span><span>				}</span>
<span class="hidden"><a id="L3522" href="#L3522">  3522</a>  </span><span>			}</span>
<span class="hidden"><a id="L3523" href="#L3523">  3523</a>  </span><span>		case &#34;DESCRIPTION&#34;:</span>
<span class="hidden"><a id="L3524" href="#L3524">  3524</a>  </span><span>			if requiredDescription {</span>
<span class="hidden"><a id="L3525" href="#L3525">  3525</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmEmail, cDescription)</span>
<span class="hidden"><a id="L3526" href="#L3526">  3526</a>  </span><span>			}</span>
<span class="hidden"><a id="L3527" href="#L3527">  3527</a>  </span>
<span class="hidden"><a id="L3528" href="#L3528">  3528</a>  </span><span>			requiredDescription = true</span>
<span class="hidden"><a id="L3529" href="#L3529">  3529</a>  </span>
<span class="hidden"><a id="L3530" href="#L3530">  3530</a>  </span><span>			if err := s.Description.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3531" href="#L3531">  3531</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmEmail, cDescription, err)</span>
<span class="hidden"><a id="L3532" href="#L3532">  3532</a>  </span><span>			}</span>
<span class="hidden"><a id="L3533" href="#L3533">  3533</a>  </span><span>		case &#34;TRIGGER&#34;:</span>
<span class="hidden"><a id="L3534" href="#L3534">  3534</a>  </span><span>			if requiredTrigger {</span>
<span class="hidden"><a id="L3535" href="#L3535">  3535</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmEmail, cTrigger)</span>
<span class="hidden"><a id="L3536" href="#L3536">  3536</a>  </span><span>			}</span>
<span class="hidden"><a id="L3537" href="#L3537">  3537</a>  </span>
<span class="hidden"><a id="L3538" href="#L3538">  3538</a>  </span><span>			requiredTrigger = true</span>
<span class="hidden"><a id="L3539" href="#L3539">  3539</a>  </span>
<span class="hidden"><a id="L3540" href="#L3540">  3540</a>  </span><span>			if err := s.Trigger.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3541" href="#L3541">  3541</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmEmail, cTrigger, err)</span>
<span class="hidden"><a id="L3542" href="#L3542">  3542</a>  </span><span>			}</span>
<span class="hidden"><a id="L3543" href="#L3543">  3543</a>  </span><span>		case &#34;SUMMARY&#34;:</span>
<span class="hidden"><a id="L3544" href="#L3544">  3544</a>  </span><span>			if requiredSummary {</span>
<span class="hidden"><a id="L3545" href="#L3545">  3545</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmEmail, cSummary)</span>
<span class="hidden"><a id="L3546" href="#L3546">  3546</a>  </span><span>			}</span>
<span class="hidden"><a id="L3547" href="#L3547">  3547</a>  </span>
<span class="hidden"><a id="L3548" href="#L3548">  3548</a>  </span><span>			requiredSummary = true</span>
<span class="hidden"><a id="L3549" href="#L3549">  3549</a>  </span>
<span class="hidden"><a id="L3550" href="#L3550">  3550</a>  </span><span>			if err := s.Summary.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3551" href="#L3551">  3551</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmEmail, cSummary, err)</span>
<span class="hidden"><a id="L3552" href="#L3552">  3552</a>  </span><span>			}</span>
<span class="hidden"><a id="L3553" href="#L3553">  3553</a>  </span><span>		case &#34;ATTENDEE&#34;:</span>
<span class="hidden"><a id="L3554" href="#L3554">  3554</a>  </span><span>			if s.Attendee != nil {</span>
<span class="hidden"><a id="L3555" href="#L3555">  3555</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmEmail, cAttendee)</span>
<span class="hidden"><a id="L3556" href="#L3556">  3556</a>  </span><span>			}</span>
<span class="hidden"><a id="L3557" href="#L3557">  3557</a>  </span>
<span class="hidden"><a id="L3558" href="#L3558">  3558</a>  </span><span>			s.Attendee = new(PropAttendee)</span>
<span class="hidden"><a id="L3559" href="#L3559">  3559</a>  </span>
<span class="hidden"><a id="L3560" href="#L3560">  3560</a>  </span><span>			if err := s.Attendee.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3561" href="#L3561">  3561</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmEmail, cAttendee, err)</span>
<span class="hidden"><a id="L3562" href="#L3562">  3562</a>  </span><span>			}</span>
<span class="hidden"><a id="L3563" href="#L3563">  3563</a>  </span><span>		case &#34;DURATION&#34;:</span>
<span class="hidden"><a id="L3564" href="#L3564">  3564</a>  </span><span>			if s.Duration != nil {</span>
<span class="hidden"><a id="L3565" href="#L3565">  3565</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmEmail, cDuration)</span>
<span class="hidden"><a id="L3566" href="#L3566">  3566</a>  </span><span>			}</span>
<span class="hidden"><a id="L3567" href="#L3567">  3567</a>  </span>
<span class="hidden"><a id="L3568" href="#L3568">  3568</a>  </span><span>			s.Duration = new(PropDuration)</span>
<span class="hidden"><a id="L3569" href="#L3569">  3569</a>  </span>
<span class="hidden"><a id="L3570" href="#L3570">  3570</a>  </span><span>			if err := s.Duration.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3571" href="#L3571">  3571</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmEmail, cDuration, err)</span>
<span class="hidden"><a id="L3572" href="#L3572">  3572</a>  </span><span>			}</span>
<span class="hidden"><a id="L3573" href="#L3573">  3573</a>  </span><span>		case &#34;REPEAT&#34;:</span>
<span class="hidden"><a id="L3574" href="#L3574">  3574</a>  </span><span>			if s.Repeat != nil {</span>
<span class="hidden"><a id="L3575" href="#L3575">  3575</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmEmail, cRepeat)</span>
<span class="hidden"><a id="L3576" href="#L3576">  3576</a>  </span><span>			}</span>
<span class="hidden"><a id="L3577" href="#L3577">  3577</a>  </span>
<span class="hidden"><a id="L3578" href="#L3578">  3578</a>  </span><span>			s.Repeat = new(PropRepeat)</span>
<span class="hidden"><a id="L3579" href="#L3579">  3579</a>  </span>
<span class="hidden"><a id="L3580" href="#L3580">  3580</a>  </span><span>			if err := s.Repeat.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3581" href="#L3581">  3581</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmEmail, cRepeat, err)</span>
<span class="hidden"><a id="L3582" href="#L3582">  3582</a>  </span><span>			}</span>
<span class="hidden"><a id="L3583" href="#L3583">  3583</a>  </span><span>		case &#34;UID&#34;:</span>
<span class="hidden"><a id="L3584" href="#L3584">  3584</a>  </span><span>			if s.UID != nil {</span>
<span class="hidden"><a id="L3585" href="#L3585">  3585</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmEmail, cUID)</span>
<span class="hidden"><a id="L3586" href="#L3586">  3586</a>  </span><span>			}</span>
<span class="hidden"><a id="L3587" href="#L3587">  3587</a>  </span>
<span class="hidden"><a id="L3588" href="#L3588">  3588</a>  </span><span>			s.UID = new(PropUID)</span>
<span class="hidden"><a id="L3589" href="#L3589">  3589</a>  </span>
<span class="hidden"><a id="L3590" href="#L3590">  3590</a>  </span><span>			if err := s.UID.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3591" href="#L3591">  3591</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmEmail, cUID, err)</span>
<span class="hidden"><a id="L3592" href="#L3592">  3592</a>  </span><span>			}</span>
<span class="hidden"><a id="L3593" href="#L3593">  3593</a>  </span><span>		case &#34;ALARM-AGENT&#34;:</span>
<span class="hidden"><a id="L3594" href="#L3594">  3594</a>  </span><span>			var e PropAlarmAgent</span>
<span class="hidden"><a id="L3595" href="#L3595">  3595</a>  </span>
<span class="hidden"><a id="L3596" href="#L3596">  3596</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3597" href="#L3597">  3597</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmEmail, cAlarmAgent, err)</span>
<span class="hidden"><a id="L3598" href="#L3598">  3598</a>  </span><span>			}</span>
<span class="hidden"><a id="L3599" href="#L3599">  3599</a>  </span>
<span class="hidden"><a id="L3600" href="#L3600">  3600</a>  </span><span>			s.AlarmAgent = append(s.AlarmAgent, e)</span>
<span class="hidden"><a id="L3601" href="#L3601">  3601</a>  </span><span>		case &#34;STATUS&#34;:</span>
<span class="hidden"><a id="L3602" href="#L3602">  3602</a>  </span><span>			if s.AlarmStatus != nil {</span>
<span class="hidden"><a id="L3603" href="#L3603">  3603</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmEmail, cAlarmStatus)</span>
<span class="hidden"><a id="L3604" href="#L3604">  3604</a>  </span><span>			}</span>
<span class="hidden"><a id="L3605" href="#L3605">  3605</a>  </span>
<span class="hidden"><a id="L3606" href="#L3606">  3606</a>  </span><span>			s.AlarmStatus = new(PropAlarmStatus)</span>
<span class="hidden"><a id="L3607" href="#L3607">  3607</a>  </span>
<span class="hidden"><a id="L3608" href="#L3608">  3608</a>  </span><span>			if err := s.AlarmStatus.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3609" href="#L3609">  3609</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmEmail, cAlarmStatus, err)</span>
<span class="hidden"><a id="L3610" href="#L3610">  3610</a>  </span><span>			}</span>
<span class="hidden"><a id="L3611" href="#L3611">  3611</a>  </span><span>		case &#34;LAST-TRIGGERED&#34;:</span>
<span class="hidden"><a id="L3612" href="#L3612">  3612</a>  </span><span>			var e PropLastTriggered</span>
<span class="hidden"><a id="L3613" href="#L3613">  3613</a>  </span>
<span class="hidden"><a id="L3614" href="#L3614">  3614</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3615" href="#L3615">  3615</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmEmail, cLastTriggered, err)</span>
<span class="hidden"><a id="L3616" href="#L3616">  3616</a>  </span><span>			}</span>
<span class="hidden"><a id="L3617" href="#L3617">  3617</a>  </span>
<span class="hidden"><a id="L3618" href="#L3618">  3618</a>  </span><span>			s.LastTriggered = append(s.LastTriggered, e)</span>
<span class="hidden"><a id="L3619" href="#L3619">  3619</a>  </span><span>		case &#34;ACKNOWLEDGED&#34;:</span>
<span class="hidden"><a id="L3620" href="#L3620">  3620</a>  </span><span>			if s.Acknowledged != nil {</span>
<span class="hidden"><a id="L3621" href="#L3621">  3621</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmEmail, cAcknowledged)</span>
<span class="hidden"><a id="L3622" href="#L3622">  3622</a>  </span><span>			}</span>
<span class="hidden"><a id="L3623" href="#L3623">  3623</a>  </span>
<span class="hidden"><a id="L3624" href="#L3624">  3624</a>  </span><span>			s.Acknowledged = new(PropAcknowledged)</span>
<span class="hidden"><a id="L3625" href="#L3625">  3625</a>  </span>
<span class="hidden"><a id="L3626" href="#L3626">  3626</a>  </span><span>			if err := s.Acknowledged.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3627" href="#L3627">  3627</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmEmail, cAcknowledged, err)</span>
<span class="hidden"><a id="L3628" href="#L3628">  3628</a>  </span><span>			}</span>
<span class="hidden"><a id="L3629" href="#L3629">  3629</a>  </span><span>		case &#34;PROXIMITY&#34;:</span>
<span class="hidden"><a id="L3630" href="#L3630">  3630</a>  </span><span>			if s.Proximity != nil {</span>
<span class="hidden"><a id="L3631" href="#L3631">  3631</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmEmail, cProximity)</span>
<span class="hidden"><a id="L3632" href="#L3632">  3632</a>  </span><span>			}</span>
<span class="hidden"><a id="L3633" href="#L3633">  3633</a>  </span>
<span class="hidden"><a id="L3634" href="#L3634">  3634</a>  </span><span>			s.Proximity = new(PropProximity)</span>
<span class="hidden"><a id="L3635" href="#L3635">  3635</a>  </span>
<span class="hidden"><a id="L3636" href="#L3636">  3636</a>  </span><span>			if err := s.Proximity.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3637" href="#L3637">  3637</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmEmail, cProximity, err)</span>
<span class="hidden"><a id="L3638" href="#L3638">  3638</a>  </span><span>			}</span>
<span class="hidden"><a id="L3639" href="#L3639">  3639</a>  </span><span>		case &#34;GEO-LOCATION&#34;:</span>
<span class="hidden"><a id="L3640" href="#L3640">  3640</a>  </span><span>			var e PropGeoLocation</span>
<span class="hidden"><a id="L3641" href="#L3641">  3641</a>  </span>
<span class="hidden"><a id="L3642" href="#L3642">  3642</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3643" href="#L3643">  3643</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmEmail, cGeoLocation, err)</span>
<span class="hidden"><a id="L3644" href="#L3644">  3644</a>  </span><span>			}</span>
<span class="hidden"><a id="L3645" href="#L3645">  3645</a>  </span>
<span class="hidden"><a id="L3646" href="#L3646">  3646</a>  </span><span>			s.GeoLocation = append(s.GeoLocation, e)</span>
<span class="hidden"><a id="L3647" href="#L3647">  3647</a>  </span><span>		case &#34;RELATED-TO&#34;:</span>
<span class="hidden"><a id="L3648" href="#L3648">  3648</a>  </span><span>			if s.RelatedTo != nil {</span>
<span class="hidden"><a id="L3649" href="#L3649">  3649</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmEmail, cRelatedTo)</span>
<span class="hidden"><a id="L3650" href="#L3650">  3650</a>  </span><span>			}</span>
<span class="hidden"><a id="L3651" href="#L3651">  3651</a>  </span>
<span class="hidden"><a id="L3652" href="#L3652">  3652</a>  </span><span>			s.RelatedTo = new(PropRelatedTo)</span>
<span class="hidden"><a id="L3653" href="#L3653">  3653</a>  </span>
<span class="hidden"><a id="L3654" href="#L3654">  3654</a>  </span><span>			if err := s.RelatedTo.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3655" href="#L3655">  3655</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmEmail, cRelatedTo, err)</span>
<span class="hidden"><a id="L3656" href="#L3656">  3656</a>  </span><span>			}</span>
<span class="hidden"><a id="L3657" href="#L3657">  3657</a>  </span><span>		case &#34;DEFAULT-ALARM&#34;:</span>
<span class="hidden"><a id="L3658" href="#L3658">  3658</a>  </span><span>			if s.DefaultAlarm != nil {</span>
<span class="hidden"><a id="L3659" href="#L3659">  3659</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmEmail, cDefaultAlarm)</span>
<span class="hidden"><a id="L3660" href="#L3660">  3660</a>  </span><span>			}</span>
<span class="hidden"><a id="L3661" href="#L3661">  3661</a>  </span>
<span class="hidden"><a id="L3662" href="#L3662">  3662</a>  </span><span>			s.DefaultAlarm = new(PropDefaultAlarm)</span>
<span class="hidden"><a id="L3663" href="#L3663">  3663</a>  </span>
<span class="hidden"><a id="L3664" href="#L3664">  3664</a>  </span><span>			if err := s.DefaultAlarm.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3665" href="#L3665">  3665</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmEmail, cDefaultAlarm, err)</span>
<span class="hidden"><a id="L3666" href="#L3666">  3666</a>  </span><span>			}</span>
<span class="hidden"><a id="L3667" href="#L3667">  3667</a>  </span><span>		case &#34;END&#34;:</span>
<span class="hidden"><a id="L3668" href="#L3668">  3668</a>  </span><span>			if value != &#34;VALARM&#34; {</span>
<span class="hidden"><a id="L3669" href="#L3669">  3669</a>  </span><span>				return fmt.Errorf(errDecodingType, cAlarmEmail, ErrInvalidEnd)</span>
<span class="hidden"><a id="L3670" href="#L3670">  3670</a>  </span><span>			}</span>
<span class="hidden"><a id="L3671" href="#L3671">  3671</a>  </span>
<span class="hidden"><a id="L3672" href="#L3672">  3672</a>  </span><span>			break Loop</span>
<span class="hidden"><a id="L3673" href="#L3673">  3673</a>  </span><span>		}</span>
<span class="hidden"><a id="L3674" href="#L3674">  3674</a>  </span><span>	}</span>
<span class="hidden"><a id="L3675" href="#L3675">  3675</a>  </span>
<span class="hidden"><a id="L3676" href="#L3676">  3676</a>  </span><span>	if !requiredDescription || !requiredTrigger || !requiredSummary {</span>
<span class="hidden"><a id="L3677" href="#L3677">  3677</a>  </span><span>		return fmt.Errorf(errDecodingType, cAlarmEmail, ErrMissingRequired)</span>
<span class="hidden"><a id="L3678" href="#L3678">  3678</a>  </span><span>	}</span>
<span class="hidden"><a id="L3679" href="#L3679">  3679</a>  </span>
<span class="hidden"><a id="L3680" href="#L3680">  3680</a>  </span><span>	if s.GeoLocation != nil &amp;&amp; (s.Proximity == nil) {</span>
<span class="hidden"><a id="L3681" href="#L3681">  3681</a>  </span><span>		return fmt.Errorf(errDecodingType, cAlarmEmail, ErrRequirementNotMet)</span>
<span class="hidden"><a id="L3682" href="#L3682">  3682</a>  </span><span>	}</span>
<span class="hidden"><a id="L3683" href="#L3683">  3683</a>  </span>
<span class="hidden"><a id="L3684" href="#L3684">  3684</a>  </span><span>	if t := s.Duration == nil; t == (s.Repeat == nil) {</span>
<span class="hidden"><a id="L3685" href="#L3685">  3685</a>  </span><span>		return fmt.Errorf(errDecodingType, cAlarmEmail, ErrRequirementNotMet)</span>
<span class="hidden"><a id="L3686" href="#L3686">  3686</a>  </span><span>	}</span>
<span class="hidden"><a id="L3687" href="#L3687">  3687</a>  </span>
<span class="hidden"><a id="L3688" href="#L3688">  3688</a>  </span><span>	return nil</span>
<span class="hidden"><a id="L3689" href="#L3689">  3689</a>  </span><span>}</span>
<span class="hidden"><a id="L3690" href="#L3690">  3690</a>  </span>
<span class="hidden"><a id="L3691" href="#L3691">  3691</a>  </span><span>func (s *AlarmEmail) encode(w writer) {</span>
<span class="hidden"><a id="L3692" href="#L3692">  3692</a>  </span><span>	s.Description.encode(w)</span>
<span class="hidden"><a id="L3693" href="#L3693">  3693</a>  </span><span>	s.Trigger.encode(w)</span>
<span class="hidden"><a id="L3694" href="#L3694">  3694</a>  </span><span>	s.Summary.encode(w)</span>
<span class="hidden"><a id="L3695" href="#L3695">  3695</a>  </span>
<span class="hidden"><a id="L3696" href="#L3696">  3696</a>  </span><span>	if s.Attendee != nil {</span>
<span class="hidden"><a id="L3697" href="#L3697">  3697</a>  </span><span>		s.Attendee.encode(w)</span>
<span class="hidden"><a id="L3698" href="#L3698">  3698</a>  </span><span>	}</span>
<span class="hidden"><a id="L3699" href="#L3699">  3699</a>  </span>
<span class="hidden"><a id="L3700" href="#L3700">  3700</a>  </span><span>	if s.Duration != nil {</span>
<span class="hidden"><a id="L3701" href="#L3701">  3701</a>  </span><span>		s.Duration.encode(w)</span>
<span class="hidden"><a id="L3702" href="#L3702">  3702</a>  </span><span>	}</span>
<span class="hidden"><a id="L3703" href="#L3703">  3703</a>  </span>
<span class="hidden"><a id="L3704" href="#L3704">  3704</a>  </span><span>	if s.Repeat != nil {</span>
<span class="hidden"><a id="L3705" href="#L3705">  3705</a>  </span><span>		s.Repeat.encode(w)</span>
<span class="hidden"><a id="L3706" href="#L3706">  3706</a>  </span><span>	}</span>
<span class="hidden"><a id="L3707" href="#L3707">  3707</a>  </span>
<span class="hidden"><a id="L3708" href="#L3708">  3708</a>  </span><span>	if s.UID != nil {</span>
<span class="hidden"><a id="L3709" href="#L3709">  3709</a>  </span><span>		s.UID.encode(w)</span>
<span class="hidden"><a id="L3710" href="#L3710">  3710</a>  </span><span>	}</span>
<span class="hidden"><a id="L3711" href="#L3711">  3711</a>  </span>
<span class="hidden"><a id="L3712" href="#L3712">  3712</a>  </span><span>	for n := range s.AlarmAgent {</span>
<span class="hidden"><a id="L3713" href="#L3713">  3713</a>  </span><span>		s.AlarmAgent[n].encode(w)</span>
<span class="hidden"><a id="L3714" href="#L3714">  3714</a>  </span><span>	}</span>
<span class="hidden"><a id="L3715" href="#L3715">  3715</a>  </span>
<span class="hidden"><a id="L3716" href="#L3716">  3716</a>  </span><span>	if s.AlarmStatus != nil {</span>
<span class="hidden"><a id="L3717" href="#L3717">  3717</a>  </span><span>		s.AlarmStatus.encode(w)</span>
<span class="hidden"><a id="L3718" href="#L3718">  3718</a>  </span><span>	}</span>
<span class="hidden"><a id="L3719" href="#L3719">  3719</a>  </span>
<span class="hidden"><a id="L3720" href="#L3720">  3720</a>  </span><span>	for n := range s.LastTriggered {</span>
<span class="hidden"><a id="L3721" href="#L3721">  3721</a>  </span><span>		s.LastTriggered[n].encode(w)</span>
<span class="hidden"><a id="L3722" href="#L3722">  3722</a>  </span><span>	}</span>
<span class="hidden"><a id="L3723" href="#L3723">  3723</a>  </span>
<span class="hidden"><a id="L3724" href="#L3724">  3724</a>  </span><span>	if s.Acknowledged != nil {</span>
<span class="hidden"><a id="L3725" href="#L3725">  3725</a>  </span><span>		s.Acknowledged.encode(w)</span>
<span class="hidden"><a id="L3726" href="#L3726">  3726</a>  </span><span>	}</span>
<span class="hidden"><a id="L3727" href="#L3727">  3727</a>  </span>
<span class="hidden"><a id="L3728" href="#L3728">  3728</a>  </span><span>	if s.Proximity != nil {</span>
<span class="hidden"><a id="L3729" href="#L3729">  3729</a>  </span><span>		s.Proximity.encode(w)</span>
<span class="hidden"><a id="L3730" href="#L3730">  3730</a>  </span><span>	}</span>
<span class="hidden"><a id="L3731" href="#L3731">  3731</a>  </span>
<span class="hidden"><a id="L3732" href="#L3732">  3732</a>  </span><span>	for n := range s.GeoLocation {</span>
<span class="hidden"><a id="L3733" href="#L3733">  3733</a>  </span><span>		s.GeoLocation[n].encode(w)</span>
<span class="hidden"><a id="L3734" href="#L3734">  3734</a>  </span><span>	}</span>
<span class="hidden"><a id="L3735" href="#L3735">  3735</a>  </span>
<span class="hidden"><a id="L3736" href="#L3736">  3736</a>  </span><span>	if s.RelatedTo != nil {</span>
<span class="hidden"><a id="L3737" href="#L3737">  3737</a>  </span><span>		s.RelatedTo.encode(w)</span>
<span class="hidden"><a id="L3738" href="#L3738">  3738</a>  </span><span>	}</span>
<span class="hidden"><a id="L3739" href="#L3739">  3739</a>  </span>
<span class="hidden"><a id="L3740" href="#L3740">  3740</a>  </span><span>	if s.DefaultAlarm != nil {</span>
<span class="hidden"><a id="L3741" href="#L3741">  3741</a>  </span><span>		s.DefaultAlarm.encode(w)</span>
<span class="hidden"><a id="L3742" href="#L3742">  3742</a>  </span><span>	}</span>
<span class="hidden"><a id="L3743" href="#L3743">  3743</a>  </span>
<span class="hidden"><a id="L3744" href="#L3744">  3744</a>  </span><span>}</span>
<span class="hidden"><a id="L3745" href="#L3745">  3745</a>  </span>
<span class="hidden"><a id="L3746" href="#L3746">  3746</a>  </span><span>func (s *AlarmEmail) valid() error {</span>
<span class="hidden"><a id="L3747" href="#L3747">  3747</a>  </span><span>	if err := s.Description.valid(); err != nil {</span>
<span class="hidden"><a id="L3748" href="#L3748">  3748</a>  </span><span>		return fmt.Errorf(errValidatingProp, cAlarmEmail, cDescription, err)</span>
<span class="hidden"><a id="L3749" href="#L3749">  3749</a>  </span><span>	}</span>
<span class="hidden"><a id="L3750" href="#L3750">  3750</a>  </span>
<span class="hidden"><a id="L3751" href="#L3751">  3751</a>  </span><span>	if err := s.Trigger.valid(); err != nil {</span>
<span class="hidden"><a id="L3752" href="#L3752">  3752</a>  </span><span>		return fmt.Errorf(errValidatingProp, cAlarmEmail, cTrigger, err)</span>
<span class="hidden"><a id="L3753" href="#L3753">  3753</a>  </span><span>	}</span>
<span class="hidden"><a id="L3754" href="#L3754">  3754</a>  </span>
<span class="hidden"><a id="L3755" href="#L3755">  3755</a>  </span><span>	if err := s.Summary.valid(); err != nil {</span>
<span class="hidden"><a id="L3756" href="#L3756">  3756</a>  </span><span>		return fmt.Errorf(errValidatingProp, cAlarmEmail, cSummary, err)</span>
<span class="hidden"><a id="L3757" href="#L3757">  3757</a>  </span><span>	}</span>
<span class="hidden"><a id="L3758" href="#L3758">  3758</a>  </span>
<span class="hidden"><a id="L3759" href="#L3759">  3759</a>  </span><span>	if s.Attendee != nil {</span>
<span class="hidden"><a id="L3760" href="#L3760">  3760</a>  </span><span>		if err := s.Attendee.valid(); err != nil {</span>
<span class="hidden"><a id="L3761" href="#L3761">  3761</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmEmail, cAttendee, err)</span>
<span class="hidden"><a id="L3762" href="#L3762">  3762</a>  </span><span>		}</span>
<span class="hidden"><a id="L3763" href="#L3763">  3763</a>  </span><span>	}</span>
<span class="hidden"><a id="L3764" href="#L3764">  3764</a>  </span>
<span class="hidden"><a id="L3765" href="#L3765">  3765</a>  </span><span>	if s.Duration != nil {</span>
<span class="hidden"><a id="L3766" href="#L3766">  3766</a>  </span><span>		if err := s.Duration.valid(); err != nil {</span>
<span class="hidden"><a id="L3767" href="#L3767">  3767</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmEmail, cDuration, err)</span>
<span class="hidden"><a id="L3768" href="#L3768">  3768</a>  </span><span>		}</span>
<span class="hidden"><a id="L3769" href="#L3769">  3769</a>  </span><span>	}</span>
<span class="hidden"><a id="L3770" href="#L3770">  3770</a>  </span>
<span class="hidden"><a id="L3771" href="#L3771">  3771</a>  </span><span>	if s.Repeat != nil {</span>
<span class="hidden"><a id="L3772" href="#L3772">  3772</a>  </span><span>		if err := s.Repeat.valid(); err != nil {</span>
<span class="hidden"><a id="L3773" href="#L3773">  3773</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmEmail, cRepeat, err)</span>
<span class="hidden"><a id="L3774" href="#L3774">  3774</a>  </span><span>		}</span>
<span class="hidden"><a id="L3775" href="#L3775">  3775</a>  </span><span>	}</span>
<span class="hidden"><a id="L3776" href="#L3776">  3776</a>  </span>
<span class="hidden"><a id="L3777" href="#L3777">  3777</a>  </span><span>	if s.UID != nil {</span>
<span class="hidden"><a id="L3778" href="#L3778">  3778</a>  </span><span>		if err := s.UID.valid(); err != nil {</span>
<span class="hidden"><a id="L3779" href="#L3779">  3779</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmEmail, cUID, err)</span>
<span class="hidden"><a id="L3780" href="#L3780">  3780</a>  </span><span>		}</span>
<span class="hidden"><a id="L3781" href="#L3781">  3781</a>  </span><span>	}</span>
<span class="hidden"><a id="L3782" href="#L3782">  3782</a>  </span>
<span class="hidden"><a id="L3783" href="#L3783">  3783</a>  </span><span>	for n := range s.AlarmAgent {</span>
<span class="hidden"><a id="L3784" href="#L3784">  3784</a>  </span><span>		if err := s.AlarmAgent[n].valid(); err != nil {</span>
<span class="hidden"><a id="L3785" href="#L3785">  3785</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmEmail, cAlarmAgent, err)</span>
<span class="hidden"><a id="L3786" href="#L3786">  3786</a>  </span><span>		}</span>
<span class="hidden"><a id="L3787" href="#L3787">  3787</a>  </span><span>	}</span>
<span class="hidden"><a id="L3788" href="#L3788">  3788</a>  </span>
<span class="hidden"><a id="L3789" href="#L3789">  3789</a>  </span><span>	if s.AlarmStatus != nil {</span>
<span class="hidden"><a id="L3790" href="#L3790">  3790</a>  </span><span>		if err := s.AlarmStatus.valid(); err != nil {</span>
<span class="hidden"><a id="L3791" href="#L3791">  3791</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmEmail, cAlarmStatus, err)</span>
<span class="hidden"><a id="L3792" href="#L3792">  3792</a>  </span><span>		}</span>
<span class="hidden"><a id="L3793" href="#L3793">  3793</a>  </span><span>	}</span>
<span class="hidden"><a id="L3794" href="#L3794">  3794</a>  </span>
<span class="hidden"><a id="L3795" href="#L3795">  3795</a>  </span><span>	for n := range s.LastTriggered {</span>
<span class="hidden"><a id="L3796" href="#L3796">  3796</a>  </span><span>		if err := s.LastTriggered[n].valid(); err != nil {</span>
<span class="hidden"><a id="L3797" href="#L3797">  3797</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmEmail, cLastTriggered, err)</span>
<span class="hidden"><a id="L3798" href="#L3798">  3798</a>  </span><span>		}</span>
<span class="hidden"><a id="L3799" href="#L3799">  3799</a>  </span><span>	}</span>
<span class="hidden"><a id="L3800" href="#L3800">  3800</a>  </span>
<span class="hidden"><a id="L3801" href="#L3801">  3801</a>  </span><span>	if s.Acknowledged != nil {</span>
<span class="hidden"><a id="L3802" href="#L3802">  3802</a>  </span><span>		if err := s.Acknowledged.valid(); err != nil {</span>
<span class="hidden"><a id="L3803" href="#L3803">  3803</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmEmail, cAcknowledged, err)</span>
<span class="hidden"><a id="L3804" href="#L3804">  3804</a>  </span><span>		}</span>
<span class="hidden"><a id="L3805" href="#L3805">  3805</a>  </span><span>	}</span>
<span class="hidden"><a id="L3806" href="#L3806">  3806</a>  </span>
<span class="hidden"><a id="L3807" href="#L3807">  3807</a>  </span><span>	if s.Proximity != nil {</span>
<span class="hidden"><a id="L3808" href="#L3808">  3808</a>  </span><span>		if err := s.Proximity.valid(); err != nil {</span>
<span class="hidden"><a id="L3809" href="#L3809">  3809</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmEmail, cProximity, err)</span>
<span class="hidden"><a id="L3810" href="#L3810">  3810</a>  </span><span>		}</span>
<span class="hidden"><a id="L3811" href="#L3811">  3811</a>  </span><span>	}</span>
<span class="hidden"><a id="L3812" href="#L3812">  3812</a>  </span>
<span class="hidden"><a id="L3813" href="#L3813">  3813</a>  </span><span>	for n := range s.GeoLocation {</span>
<span class="hidden"><a id="L3814" href="#L3814">  3814</a>  </span><span>		if err := s.GeoLocation[n].valid(); err != nil {</span>
<span class="hidden"><a id="L3815" href="#L3815">  3815</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmEmail, cGeoLocation, err)</span>
<span class="hidden"><a id="L3816" href="#L3816">  3816</a>  </span><span>		}</span>
<span class="hidden"><a id="L3817" href="#L3817">  3817</a>  </span><span>	}</span>
<span class="hidden"><a id="L3818" href="#L3818">  3818</a>  </span>
<span class="hidden"><a id="L3819" href="#L3819">  3819</a>  </span><span>	if s.RelatedTo != nil {</span>
<span class="hidden"><a id="L3820" href="#L3820">  3820</a>  </span><span>		if err := s.RelatedTo.valid(); err != nil {</span>
<span class="hidden"><a id="L3821" href="#L3821">  3821</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmEmail, cRelatedTo, err)</span>
<span class="hidden"><a id="L3822" href="#L3822">  3822</a>  </span><span>		}</span>
<span class="hidden"><a id="L3823" href="#L3823">  3823</a>  </span><span>	}</span>
<span class="hidden"><a id="L3824" href="#L3824">  3824</a>  </span>
<span class="hidden"><a id="L3825" href="#L3825">  3825</a>  </span><span>	if s.DefaultAlarm != nil {</span>
<span class="hidden"><a id="L3826" href="#L3826">  3826</a>  </span><span>		if err := s.DefaultAlarm.valid(); err != nil {</span>
<span class="hidden"><a id="L3827" href="#L3827">  3827</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmEmail, cDefaultAlarm, err)</span>
<span class="hidden"><a id="L3828" href="#L3828">  3828</a>  </span><span>		}</span>
<span class="hidden"><a id="L3829" href="#L3829">  3829</a>  </span><span>	}</span>
<span class="hidden"><a id="L3830" href="#L3830">  3830</a>  </span>
<span class="hidden"><a id="L3831" href="#L3831">  3831</a>  </span><span>	return nil</span>
<span class="hidden"><a id="L3832" href="#L3832">  3832</a>  </span><span>}</span>
<span class="hidden"><a id="L3833" href="#L3833">  3833</a>  </span>
<span class="hidden"><a id="L3834" href="#L3834">  3834</a>  </span><span class="text">// AlarmURI provides a group of components that define a URI Alarm.</span>
<span class="hidden"><a id="L3835" href="#L3835">  3835</a>  </span><span>type AlarmURI struct {</span>
<span class="hidden"><a id="L3836" href="#L3836">  3836</a>  </span><span>	URI           PropURI</span>
<span class="hidden"><a id="L3837" href="#L3837">  3837</a>  </span><span>	Duration      *PropDuration</span>
<span class="hidden"><a id="L3838" href="#L3838">  3838</a>  </span><span>	Repeat        *PropRepeat</span>
<span class="hidden"><a id="L3839" href="#L3839">  3839</a>  </span><span>	UID           *PropUID</span>
<span class="hidden"><a id="L3840" href="#L3840">  3840</a>  </span><span>	AlarmAgent    []PropAlarmAgent</span>
<span class="hidden"><a id="L3841" href="#L3841">  3841</a>  </span><span>	AlarmStatus   *PropAlarmStatus</span>
<span class="hidden"><a id="L3842" href="#L3842">  3842</a>  </span><span>	LastTriggered []PropLastTriggered</span>
<span class="hidden"><a id="L3843" href="#L3843">  3843</a>  </span><span>	Acknowledged  *PropAcknowledged</span>
<span class="hidden"><a id="L3844" href="#L3844">  3844</a>  </span><span>	Proximity     *PropProximity</span>
<span class="hidden"><a id="L3845" href="#L3845">  3845</a>  </span><span>	GeoLocation   []PropGeoLocation</span>
<span class="hidden"><a id="L3846" href="#L3846">  3846</a>  </span><span>	RelatedTo     *PropRelatedTo</span>
<span class="hidden"><a id="L3847" href="#L3847">  3847</a>  </span><span>	DefaultAlarm  *PropDefaultAlarm</span>
<span class="hidden"><a id="L3848" href="#L3848">  3848</a>  </span><span>}</span>
<span class="hidden"><a id="L3849" href="#L3849">  3849</a>  </span>
<span class="hidden"><a id="L3850" href="#L3850">  3850</a>  </span><span>func (s *AlarmURI) decode(t tokeniser) error {</span>
<span class="hidden"><a id="L3851" href="#L3851">  3851</a>  </span><span>	var requiredURI bool</span>
<span class="hidden"><a id="L3852" href="#L3852">  3852</a>  </span>
<span class="hidden"><a id="L3853" href="#L3853">  3853</a>  </span><span>Loop:</span>
<span class="hidden"><a id="L3854" href="#L3854">  3854</a>  </span><span>	for {</span>
<span class="hidden"><a id="L3855" href="#L3855">  3855</a>  </span><span>		p, err := t.GetPhrase()</span>
<span class="hidden"><a id="L3856" href="#L3856">  3856</a>  </span><span>		if err != nil {</span>
<span class="hidden"><a id="L3857" href="#L3857">  3857</a>  </span><span>			return fmt.Errorf(errDecodingType, cAlarmURI, err)</span>
<span class="hidden"><a id="L3858" href="#L3858">  3858</a>  </span><span>		} else if p.Type == parser.PhraseDone {</span>
<span class="hidden"><a id="L3859" href="#L3859">  3859</a>  </span><span>			return fmt.Errorf(errDecodingType, cAlarmURI, io.ErrUnexpectedEOF)</span>
<span class="hidden"><a id="L3860" href="#L3860">  3860</a>  </span><span>		}</span>
<span class="hidden"><a id="L3861" href="#L3861">  3861</a>  </span>
<span class="hidden"><a id="L3862" href="#L3862">  3862</a>  </span><span>		params := p.Data[1 : len(p.Data)-1]</span>
<span class="hidden"><a id="L3863" href="#L3863">  3863</a>  </span><span>		value := p.Data[len(p.Data)-1].Data</span>
<span class="hidden"><a id="L3864" href="#L3864">  3864</a>  </span>
<span class="hidden"><a id="L3865" href="#L3865">  3865</a>  </span><span>		switch strings.ToUpper(p.Data[0].Data) {</span>
<span class="hidden"><a id="L3866" href="#L3866">  3866</a>  </span><span>		case &#34;BEGIN&#34;:</span>
<span class="hidden"><a id="L3867" href="#L3867">  3867</a>  </span><span>			switch n := strings.ToUpper(value); n {</span>
<span class="hidden"><a id="L3868" href="#L3868">  3868</a>  </span><span>			default:</span>
<span class="hidden"><a id="L3869" href="#L3869">  3869</a>  </span><span>				if err := decodeDummy(t, n); err != nil {</span>
<span class="hidden"><a id="L3870" href="#L3870">  3870</a>  </span><span>					return fmt.Errorf(errDecodingType, cAlarmURI, err)</span>
<span class="hidden"><a id="L3871" href="#L3871">  3871</a>  </span><span>				}</span>
<span class="hidden"><a id="L3872" href="#L3872">  3872</a>  </span><span>			}</span>
<span class="hidden"><a id="L3873" href="#L3873">  3873</a>  </span><span>		case &#34;URI&#34;:</span>
<span class="hidden"><a id="L3874" href="#L3874">  3874</a>  </span><span>			if requiredURI {</span>
<span class="hidden"><a id="L3875" href="#L3875">  3875</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmURI, cURI)</span>
<span class="hidden"><a id="L3876" href="#L3876">  3876</a>  </span><span>			}</span>
<span class="hidden"><a id="L3877" href="#L3877">  3877</a>  </span>
<span class="hidden"><a id="L3878" href="#L3878">  3878</a>  </span><span>			requiredURI = true</span>
<span class="hidden"><a id="L3879" href="#L3879">  3879</a>  </span>
<span class="hidden"><a id="L3880" href="#L3880">  3880</a>  </span><span>			if err := s.URI.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3881" href="#L3881">  3881</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmURI, cURI, err)</span>
<span class="hidden"><a id="L3882" href="#L3882">  3882</a>  </span><span>			}</span>
<span class="hidden"><a id="L3883" href="#L3883">  3883</a>  </span><span>		case &#34;DURATION&#34;:</span>
<span class="hidden"><a id="L3884" href="#L3884">  3884</a>  </span><span>			if s.Duration != nil {</span>
<span class="hidden"><a id="L3885" href="#L3885">  3885</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmURI, cDuration)</span>
<span class="hidden"><a id="L3886" href="#L3886">  3886</a>  </span><span>			}</span>
<span class="hidden"><a id="L3887" href="#L3887">  3887</a>  </span>
<span class="hidden"><a id="L3888" href="#L3888">  3888</a>  </span><span>			s.Duration = new(PropDuration)</span>
<span class="hidden"><a id="L3889" href="#L3889">  3889</a>  </span>
<span class="hidden"><a id="L3890" href="#L3890">  3890</a>  </span><span>			if err := s.Duration.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3891" href="#L3891">  3891</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmURI, cDuration, err)</span>
<span class="hidden"><a id="L3892" href="#L3892">  3892</a>  </span><span>			}</span>
<span class="hidden"><a id="L3893" href="#L3893">  3893</a>  </span><span>		case &#34;REPEAT&#34;:</span>
<span class="hidden"><a id="L3894" href="#L3894">  3894</a>  </span><span>			if s.Repeat != nil {</span>
<span class="hidden"><a id="L3895" href="#L3895">  3895</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmURI, cRepeat)</span>
<span class="hidden"><a id="L3896" href="#L3896">  3896</a>  </span><span>			}</span>
<span class="hidden"><a id="L3897" href="#L3897">  3897</a>  </span>
<span class="hidden"><a id="L3898" href="#L3898">  3898</a>  </span><span>			s.Repeat = new(PropRepeat)</span>
<span class="hidden"><a id="L3899" href="#L3899">  3899</a>  </span>
<span class="hidden"><a id="L3900" href="#L3900">  3900</a>  </span><span>			if err := s.Repeat.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3901" href="#L3901">  3901</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmURI, cRepeat, err)</span>
<span class="hidden"><a id="L3902" href="#L3902">  3902</a>  </span><span>			}</span>
<span class="hidden"><a id="L3903" href="#L3903">  3903</a>  </span><span>		case &#34;UID&#34;:</span>
<span class="hidden"><a id="L3904" href="#L3904">  3904</a>  </span><span>			if s.UID != nil {</span>
<span class="hidden"><a id="L3905" href="#L3905">  3905</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmURI, cUID)</span>
<span class="hidden"><a id="L3906" href="#L3906">  3906</a>  </span><span>			}</span>
<span class="hidden"><a id="L3907" href="#L3907">  3907</a>  </span>
<span class="hidden"><a id="L3908" href="#L3908">  3908</a>  </span><span>			s.UID = new(PropUID)</span>
<span class="hidden"><a id="L3909" href="#L3909">  3909</a>  </span>
<span class="hidden"><a id="L3910" href="#L3910">  3910</a>  </span><span>			if err := s.UID.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3911" href="#L3911">  3911</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmURI, cUID, err)</span>
<span class="hidden"><a id="L3912" href="#L3912">  3912</a>  </span><span>			}</span>
<span class="hidden"><a id="L3913" href="#L3913">  3913</a>  </span><span>		case &#34;ALARM-AGENT&#34;:</span>
<span class="hidden"><a id="L3914" href="#L3914">  3914</a>  </span><span>			var e PropAlarmAgent</span>
<span class="hidden"><a id="L3915" href="#L3915">  3915</a>  </span>
<span class="hidden"><a id="L3916" href="#L3916">  3916</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3917" href="#L3917">  3917</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmURI, cAlarmAgent, err)</span>
<span class="hidden"><a id="L3918" href="#L3918">  3918</a>  </span><span>			}</span>
<span class="hidden"><a id="L3919" href="#L3919">  3919</a>  </span>
<span class="hidden"><a id="L3920" href="#L3920">  3920</a>  </span><span>			s.AlarmAgent = append(s.AlarmAgent, e)</span>
<span class="hidden"><a id="L3921" href="#L3921">  3921</a>  </span><span>		case &#34;STATUS&#34;:</span>
<span class="hidden"><a id="L3922" href="#L3922">  3922</a>  </span><span>			if s.AlarmStatus != nil {</span>
<span class="hidden"><a id="L3923" href="#L3923">  3923</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmURI, cAlarmStatus)</span>
<span class="hidden"><a id="L3924" href="#L3924">  3924</a>  </span><span>			}</span>
<span class="hidden"><a id="L3925" href="#L3925">  3925</a>  </span>
<span class="hidden"><a id="L3926" href="#L3926">  3926</a>  </span><span>			s.AlarmStatus = new(PropAlarmStatus)</span>
<span class="hidden"><a id="L3927" href="#L3927">  3927</a>  </span>
<span class="hidden"><a id="L3928" href="#L3928">  3928</a>  </span><span>			if err := s.AlarmStatus.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3929" href="#L3929">  3929</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmURI, cAlarmStatus, err)</span>
<span class="hidden"><a id="L3930" href="#L3930">  3930</a>  </span><span>			}</span>
<span class="hidden"><a id="L3931" href="#L3931">  3931</a>  </span><span>		case &#34;LAST-TRIGGERED&#34;:</span>
<span class="hidden"><a id="L3932" href="#L3932">  3932</a>  </span><span>			var e PropLastTriggered</span>
<span class="hidden"><a id="L3933" href="#L3933">  3933</a>  </span>
<span class="hidden"><a id="L3934" href="#L3934">  3934</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3935" href="#L3935">  3935</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmURI, cLastTriggered, err)</span>
<span class="hidden"><a id="L3936" href="#L3936">  3936</a>  </span><span>			}</span>
<span class="hidden"><a id="L3937" href="#L3937">  3937</a>  </span>
<span class="hidden"><a id="L3938" href="#L3938">  3938</a>  </span><span>			s.LastTriggered = append(s.LastTriggered, e)</span>
<span class="hidden"><a id="L3939" href="#L3939">  3939</a>  </span><span>		case &#34;ACKNOWLEDGED&#34;:</span>
<span class="hidden"><a id="L3940" href="#L3940">  3940</a>  </span><span>			if s.Acknowledged != nil {</span>
<span class="hidden"><a id="L3941" href="#L3941">  3941</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmURI, cAcknowledged)</span>
<span class="hidden"><a id="L3942" href="#L3942">  3942</a>  </span><span>			}</span>
<span class="hidden"><a id="L3943" href="#L3943">  3943</a>  </span>
<span class="hidden"><a id="L3944" href="#L3944">  3944</a>  </span><span>			s.Acknowledged = new(PropAcknowledged)</span>
<span class="hidden"><a id="L3945" href="#L3945">  3945</a>  </span>
<span class="hidden"><a id="L3946" href="#L3946">  3946</a>  </span><span>			if err := s.Acknowledged.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3947" href="#L3947">  3947</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmURI, cAcknowledged, err)</span>
<span class="hidden"><a id="L3948" href="#L3948">  3948</a>  </span><span>			}</span>
<span class="hidden"><a id="L3949" href="#L3949">  3949</a>  </span><span>		case &#34;PROXIMITY&#34;:</span>
<span class="hidden"><a id="L3950" href="#L3950">  3950</a>  </span><span>			if s.Proximity != nil {</span>
<span class="hidden"><a id="L3951" href="#L3951">  3951</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmURI, cProximity)</span>
<span class="hidden"><a id="L3952" href="#L3952">  3952</a>  </span><span>			}</span>
<span class="hidden"><a id="L3953" href="#L3953">  3953</a>  </span>
<span class="hidden"><a id="L3954" href="#L3954">  3954</a>  </span><span>			s.Proximity = new(PropProximity)</span>
<span class="hidden"><a id="L3955" href="#L3955">  3955</a>  </span>
<span class="hidden"><a id="L3956" href="#L3956">  3956</a>  </span><span>			if err := s.Proximity.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3957" href="#L3957">  3957</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmURI, cProximity, err)</span>
<span class="hidden"><a id="L3958" href="#L3958">  3958</a>  </span><span>			}</span>
<span class="hidden"><a id="L3959" href="#L3959">  3959</a>  </span><span>		case &#34;GEO-LOCATION&#34;:</span>
<span class="hidden"><a id="L3960" href="#L3960">  3960</a>  </span><span>			var e PropGeoLocation</span>
<span class="hidden"><a id="L3961" href="#L3961">  3961</a>  </span>
<span class="hidden"><a id="L3962" href="#L3962">  3962</a>  </span><span>			if err := e.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3963" href="#L3963">  3963</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmURI, cGeoLocation, err)</span>
<span class="hidden"><a id="L3964" href="#L3964">  3964</a>  </span><span>			}</span>
<span class="hidden"><a id="L3965" href="#L3965">  3965</a>  </span>
<span class="hidden"><a id="L3966" href="#L3966">  3966</a>  </span><span>			s.GeoLocation = append(s.GeoLocation, e)</span>
<span class="hidden"><a id="L3967" href="#L3967">  3967</a>  </span><span>		case &#34;RELATED-TO&#34;:</span>
<span class="hidden"><a id="L3968" href="#L3968">  3968</a>  </span><span>			if s.RelatedTo != nil {</span>
<span class="hidden"><a id="L3969" href="#L3969">  3969</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmURI, cRelatedTo)</span>
<span class="hidden"><a id="L3970" href="#L3970">  3970</a>  </span><span>			}</span>
<span class="hidden"><a id="L3971" href="#L3971">  3971</a>  </span>
<span class="hidden"><a id="L3972" href="#L3972">  3972</a>  </span><span>			s.RelatedTo = new(PropRelatedTo)</span>
<span class="hidden"><a id="L3973" href="#L3973">  3973</a>  </span>
<span class="hidden"><a id="L3974" href="#L3974">  3974</a>  </span><span>			if err := s.RelatedTo.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3975" href="#L3975">  3975</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmURI, cRelatedTo, err)</span>
<span class="hidden"><a id="L3976" href="#L3976">  3976</a>  </span><span>			}</span>
<span class="hidden"><a id="L3977" href="#L3977">  3977</a>  </span><span>		case &#34;DEFAULT-ALARM&#34;:</span>
<span class="hidden"><a id="L3978" href="#L3978">  3978</a>  </span><span>			if s.DefaultAlarm != nil {</span>
<span class="hidden"><a id="L3979" href="#L3979">  3979</a>  </span><span>				return fmt.Errorf(errMultiple, cAlarmURI, cDefaultAlarm)</span>
<span class="hidden"><a id="L3980" href="#L3980">  3980</a>  </span><span>			}</span>
<span class="hidden"><a id="L3981" href="#L3981">  3981</a>  </span>
<span class="hidden"><a id="L3982" href="#L3982">  3982</a>  </span><span>			s.DefaultAlarm = new(PropDefaultAlarm)</span>
<span class="hidden"><a id="L3983" href="#L3983">  3983</a>  </span>
<span class="hidden"><a id="L3984" href="#L3984">  3984</a>  </span><span>			if err := s.DefaultAlarm.decode(params, value); err != nil {</span>
<span class="hidden"><a id="L3985" href="#L3985">  3985</a>  </span><span>				return fmt.Errorf(errDecodingProp, cAlarmURI, cDefaultAlarm, err)</span>
<span class="hidden"><a id="L3986" href="#L3986">  3986</a>  </span><span>			}</span>
<span class="hidden"><a id="L3987" href="#L3987">  3987</a>  </span><span>		case &#34;END&#34;:</span>
<span class="hidden"><a id="L3988" href="#L3988">  3988</a>  </span><span>			if value != &#34;VALARM&#34; {</span>
<span class="hidden"><a id="L3989" href="#L3989">  3989</a>  </span><span>				return fmt.Errorf(errDecodingType, cAlarmURI, ErrInvalidEnd)</span>
<span class="hidden"><a id="L3990" href="#L3990">  3990</a>  </span><span>			}</span>
<span class="hidden"><a id="L3991" href="#L3991">  3991</a>  </span>
<span class="hidden"><a id="L3992" href="#L3992">  3992</a>  </span><span>			break Loop</span>
<span class="hidden"><a id="L3993" href="#L3993">  3993</a>  </span><span>		}</span>
<span class="hidden"><a id="L3994" href="#L3994">  3994</a>  </span><span>	}</span>
<span class="hidden"><a id="L3995" href="#L3995">  3995</a>  </span>
<span class="hidden"><a id="L3996" href="#L3996">  3996</a>  </span><span>	if !requiredURI {</span>
<span class="hidden"><a id="L3997" href="#L3997">  3997</a>  </span><span>		return fmt.Errorf(errDecodingType, cAlarmURI, ErrMissingRequired)</span>
<span class="hidden"><a id="L3998" href="#L3998">  3998</a>  </span><span>	}</span>
<span class="hidden"><a id="L3999" href="#L3999">  3999</a>  </span>
<span class="hidden"><a id="L4000" href="#L4000">  4000</a>  </span><span>	if s.GeoLocation != nil &amp;&amp; (s.Proximity == nil) {</span>
<span class="hidden"><a id="L4001" href="#L4001">  4001</a>  </span><span>		return fmt.Errorf(errDecodingType, cAlarmURI, ErrRequirementNotMet)</span>
<span class="hidden"><a id="L4002" href="#L4002">  4002</a>  </span><span>	}</span>
<span class="hidden"><a id="L4003" href="#L4003">  4003</a>  </span>
<span class="hidden"><a id="L4004" href="#L4004">  4004</a>  </span><span>	if t := s.Duration == nil; t == (s.Repeat == nil) {</span>
<span class="hidden"><a id="L4005" href="#L4005">  4005</a>  </span><span>		return fmt.Errorf(errDecodingType, cAlarmURI, ErrRequirementNotMet)</span>
<span class="hidden"><a id="L4006" href="#L4006">  4006</a>  </span><span>	}</span>
<span class="hidden"><a id="L4007" href="#L4007">  4007</a>  </span>
<span class="hidden"><a id="L4008" href="#L4008">  4008</a>  </span><span>	return nil</span>
<span class="hidden"><a id="L4009" href="#L4009">  4009</a>  </span><span>}</span>
<span class="hidden"><a id="L4010" href="#L4010">  4010</a>  </span>
<span class="hidden"><a id="L4011" href="#L4011">  4011</a>  </span><span>func (s *AlarmURI) encode(w writer) {</span>
<span class="hidden"><a id="L4012" href="#L4012">  4012</a>  </span><span>	s.URI.encode(w)</span>
<span class="hidden"><a id="L4013" href="#L4013">  4013</a>  </span>
<span class="hidden"><a id="L4014" href="#L4014">  4014</a>  </span><span>	if s.Duration != nil {</span>
<span class="hidden"><a id="L4015" href="#L4015">  4015</a>  </span><span>		s.Duration.encode(w)</span>
<span class="hidden"><a id="L4016" href="#L4016">  4016</a>  </span><span>	}</span>
<span class="hidden"><a id="L4017" href="#L4017">  4017</a>  </span>
<span class="hidden"><a id="L4018" href="#L4018">  4018</a>  </span><span>	if s.Repeat != nil {</span>
<span class="hidden"><a id="L4019" href="#L4019">  4019</a>  </span><span>		s.Repeat.encode(w)</span>
<span class="hidden"><a id="L4020" href="#L4020">  4020</a>  </span><span>	}</span>
<span class="hidden"><a id="L4021" href="#L4021">  4021</a>  </span>
<span class="hidden"><a id="L4022" href="#L4022">  4022</a>  </span><span>	if s.UID != nil {</span>
<span class="hidden"><a id="L4023" href="#L4023">  4023</a>  </span><span>		s.UID.encode(w)</span>
<span class="hidden"><a id="L4024" href="#L4024">  4024</a>  </span><span>	}</span>
<span class="hidden"><a id="L4025" href="#L4025">  4025</a>  </span>
<span class="hidden"><a id="L4026" href="#L4026">  4026</a>  </span><span>	for n := range s.AlarmAgent {</span>
<span class="hidden"><a id="L4027" href="#L4027">  4027</a>  </span><span>		s.AlarmAgent[n].encode(w)</span>
<span class="hidden"><a id="L4028" href="#L4028">  4028</a>  </span><span>	}</span>
<span class="hidden"><a id="L4029" href="#L4029">  4029</a>  </span>
<span class="hidden"><a id="L4030" href="#L4030">  4030</a>  </span><span>	if s.AlarmStatus != nil {</span>
<span class="hidden"><a id="L4031" href="#L4031">  4031</a>  </span><span>		s.AlarmStatus.encode(w)</span>
<span class="hidden"><a id="L4032" href="#L4032">  4032</a>  </span><span>	}</span>
<span class="hidden"><a id="L4033" href="#L4033">  4033</a>  </span>
<span class="hidden"><a id="L4034" href="#L4034">  4034</a>  </span><span>	for n := range s.LastTriggered {</span>
<span class="hidden"><a id="L4035" href="#L4035">  4035</a>  </span><span>		s.LastTriggered[n].encode(w)</span>
<span class="hidden"><a id="L4036" href="#L4036">  4036</a>  </span><span>	}</span>
<span class="hidden"><a id="L4037" href="#L4037">  4037</a>  </span>
<span class="hidden"><a id="L4038" href="#L4038">  4038</a>  </span><span>	if s.Acknowledged != nil {</span>
<span class="hidden"><a id="L4039" href="#L4039">  4039</a>  </span><span>		s.Acknowledged.encode(w)</span>
<span class="hidden"><a id="L4040" href="#L4040">  4040</a>  </span><span>	}</span>
<span class="hidden"><a id="L4041" href="#L4041">  4041</a>  </span>
<span class="hidden"><a id="L4042" href="#L4042">  4042</a>  </span><span>	if s.Proximity != nil {</span>
<span class="hidden"><a id="L4043" href="#L4043">  4043</a>  </span><span>		s.Proximity.encode(w)</span>
<span class="hidden"><a id="L4044" href="#L4044">  4044</a>  </span><span>	}</span>
<span class="hidden"><a id="L4045" href="#L4045">  4045</a>  </span>
<span class="hidden"><a id="L4046" href="#L4046">  4046</a>  </span><span>	for n := range s.GeoLocation {</span>
<span class="hidden"><a id="L4047" href="#L4047">  4047</a>  </span><span>		s.GeoLocation[n].encode(w)</span>
<span class="hidden"><a id="L4048" href="#L4048">  4048</a>  </span><span>	}</span>
<span class="hidden"><a id="L4049" href="#L4049">  4049</a>  </span>
<span class="hidden"><a id="L4050" href="#L4050">  4050</a>  </span><span>	if s.RelatedTo != nil {</span>
<span class="hidden"><a id="L4051" href="#L4051">  4051</a>  </span><span>		s.RelatedTo.encode(w)</span>
<span class="hidden"><a id="L4052" href="#L4052">  4052</a>  </span><span>	}</span>
<span class="hidden"><a id="L4053" href="#L4053">  4053</a>  </span>
<span class="hidden"><a id="L4054" href="#L4054">  4054</a>  </span><span>	if s.DefaultAlarm != nil {</span>
<span class="hidden"><a id="L4055" href="#L4055">  4055</a>  </span><span>		s.DefaultAlarm.encode(w)</span>
<span class="hidden"><a id="L4056" href="#L4056">  4056</a>  </span><span>	}</span>
<span class="hidden"><a id="L4057" href="#L4057">  4057</a>  </span>
<span class="hidden"><a id="L4058" href="#L4058">  4058</a>  </span><span>}</span>
<span class="hidden"><a id="L4059" href="#L4059">  4059</a>  </span>
<span class="hidden"><a id="L4060" href="#L4060">  4060</a>  </span><span>func (s *AlarmURI) valid() error {</span>
<span class="hidden"><a id="L4061" href="#L4061">  4061</a>  </span><span>	if err := s.URI.valid(); err != nil {</span>
<span class="hidden"><a id="L4062" href="#L4062">  4062</a>  </span><span>		return fmt.Errorf(errValidatingProp, cAlarmURI, cURI, err)</span>
<span class="hidden"><a id="L4063" href="#L4063">  4063</a>  </span><span>	}</span>
<span class="hidden"><a id="L4064" href="#L4064">  4064</a>  </span>
<span class="hidden"><a id="L4065" href="#L4065">  4065</a>  </span><span>	if s.Duration != nil {</span>
<span class="hidden"><a id="L4066" href="#L4066">  4066</a>  </span><span>		if err := s.Duration.valid(); err != nil {</span>
<span class="hidden"><a id="L4067" href="#L4067">  4067</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmURI, cDuration, err)</span>
<span class="hidden"><a id="L4068" href="#L4068">  4068</a>  </span><span>		}</span>
<span class="hidden"><a id="L4069" href="#L4069">  4069</a>  </span><span>	}</span>
<span class="hidden"><a id="L4070" href="#L4070">  4070</a>  </span>
<span class="hidden"><a id="L4071" href="#L4071">  4071</a>  </span><span>	if s.Repeat != nil {</span>
<span class="hidden"><a id="L4072" href="#L4072">  4072</a>  </span><span>		if err := s.Repeat.valid(); err != nil {</span>
<span class="hidden"><a id="L4073" href="#L4073">  4073</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmURI, cRepeat, err)</span>
<span class="hidden"><a id="L4074" href="#L4074">  4074</a>  </span><span>		}</span>
<span class="hidden"><a id="L4075" href="#L4075">  4075</a>  </span><span>	}</span>
<span class="hidden"><a id="L4076" href="#L4076">  4076</a>  </span>
<span class="hidden"><a id="L4077" href="#L4077">  4077</a>  </span><span>	if s.UID != nil {</span>
<span class="hidden"><a id="L4078" href="#L4078">  4078</a>  </span><span>		if err := s.UID.valid(); err != nil {</span>
<span class="hidden"><a id="L4079" href="#L4079">  4079</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmURI, cUID, err)</span>
<span class="hidden"><a id="L4080" href="#L4080">  4080</a>  </span><span>		}</span>
<span class="hidden"><a id="L4081" href="#L4081">  4081</a>  </span><span>	}</span>
<span class="hidden"><a id="L4082" href="#L4082">  4082</a>  </span>
<span class="hidden"><a id="L4083" href="#L4083">  4083</a>  </span><span>	for n := range s.AlarmAgent {</span>
<span class="hidden"><a id="L4084" href="#L4084">  4084</a>  </span><span>		if err := s.AlarmAgent[n].valid(); err != nil {</span>
<span class="hidden"><a id="L4085" href="#L4085">  4085</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmURI, cAlarmAgent, err)</span>
<span class="hidden"><a id="L4086" href="#L4086">  4086</a>  </span><span>		}</span>
<span class="hidden"><a id="L4087" href="#L4087">  4087</a>  </span><span>	}</span>
<span class="hidden"><a id="L4088" href="#L4088">  4088</a>  </span>
<span class="hidden"><a id="L4089" href="#L4089">  4089</a>  </span><span>	if s.AlarmStatus != nil {</span>
<span class="hidden"><a id="L4090" href="#L4090">  4090</a>  </span><span>		if err := s.AlarmStatus.valid(); err != nil {</span>
<span class="hidden"><a id="L4091" href="#L4091">  4091</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmURI, cAlarmStatus, err)</span>
<span class="hidden"><a id="L4092" href="#L4092">  4092</a>  </span><span>		}</span>
<span class="hidden"><a id="L4093" href="#L4093">  4093</a>  </span><span>	}</span>
<span class="hidden"><a id="L4094" href="#L4094">  4094</a>  </span>
<span class="hidden"><a id="L4095" href="#L4095">  4095</a>  </span><span>	for n := range s.LastTriggered {</span>
<span class="hidden"><a id="L4096" href="#L4096">  4096</a>  </span><span>		if err := s.LastTriggered[n].valid(); err != nil {</span>
<span class="hidden"><a id="L4097" href="#L4097">  4097</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmURI, cLastTriggered, err)</span>
<span class="hidden"><a id="L4098" href="#L4098">  4098</a>  </span><span>		}</span>
<span class="hidden"><a id="L4099" href="#L4099">  4099</a>  </span><span>	}</span>
<span class="hidden"><a id="L4100" href="#L4100">  4100</a>  </span>
<span class="hidden"><a id="L4101" href="#L4101">  4101</a>  </span><span>	if s.Acknowledged != nil {</span>
<span class="hidden"><a id="L4102" href="#L4102">  4102</a>  </span><span>		if err := s.Acknowledged.valid(); err != nil {</span>
<span class="hidden"><a id="L4103" href="#L4103">  4103</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmURI, cAcknowledged, err)</span>
<span class="hidden"><a id="L4104" href="#L4104">  4104</a>  </span><span>		}</span>
<span class="hidden"><a id="L4105" href="#L4105">  4105</a>  </span><span>	}</span>
<span class="hidden"><a id="L4106" href="#L4106">  4106</a>  </span>
<span class="hidden"><a id="L4107" href="#L4107">  4107</a>  </span><span>	if s.Proximity != nil {</span>
<span class="hidden"><a id="L4108" href="#L4108">  4108</a>  </span><span>		if err := s.Proximity.valid(); err != nil {</span>
<span class="hidden"><a id="L4109" href="#L4109">  4109</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmURI, cProximity, err)</span>
<span class="hidden"><a id="L4110" href="#L4110">  4110</a>  </span><span>		}</span>
<span class="hidden"><a id="L4111" href="#L4111">  4111</a>  </span><span>	}</span>
<span class="hidden"><a id="L4112" href="#L4112">  4112</a>  </span>
<span class="hidden"><a id="L4113" href="#L4113">  4113</a>  </span><span>	for n := range s.GeoLocation {</span>
<span class="hidden"><a id="L4114" href="#L4114">  4114</a>  </span><span>		if err := s.GeoLocation[n].valid(); err != nil {</span>
<span class="hidden"><a id="L4115" href="#L4115">  4115</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmURI, cGeoLocation, err)</span>
<span class="hidden"><a id="L4116" href="#L4116">  4116</a>  </span><span>		}</span>
<span class="hidden"><a id="L4117" href="#L4117">  4117</a>  </span><span>	}</span>
<span class="hidden"><a id="L4118" href="#L4118">  4118</a>  </span>
<span class="hidden"><a id="L4119" href="#L4119">  4119</a>  </span><span>	if s.RelatedTo != nil {</span>
<span class="hidden"><a id="L4120" href="#L4120">  4120</a>  </span><span>		if err := s.RelatedTo.valid(); err != nil {</span>
<span class="hidden"><a id="L4121" href="#L4121">  4121</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmURI, cRelatedTo, err)</span>
<span class="hidden"><a id="L4122" href="#L4122">  4122</a>  </span><span>		}</span>
<span class="hidden"><a id="L4123" href="#L4123">  4123</a>  </span><span>	}</span>
<span class="hidden"><a id="L4124" href="#L4124">  4124</a>  </span>
<span class="hidden"><a id="L4125" href="#L4125">  4125</a>  </span><span>	if s.DefaultAlarm != nil {</span>
<span class="hidden"><a id="L4126" href="#L4126">  4126</a>  </span><span>		if err := s.DefaultAlarm.valid(); err != nil {</span>
<span class="hidden"><a id="L4127" href="#L4127">  4127</a>  </span><span>			return fmt.Errorf(errValidatingProp, cAlarmURI, cDefaultAlarm, err)</span>
<span class="hidden"><a id="L4128" href="#L4128">  4128</a>  </span><span>		}</span>
<span class="hidden"><a id="L4129" href="#L4129">  4129</a>  </span><span>	}</span>
<span class="hidden"><a id="L4130" href="#L4130">  4130</a>  </span>
<span class="hidden"><a id="L4131" href="#L4131">  4131</a>  </span><span>	return nil</span>
<span class="hidden"><a id="L4132" href="#L4132">  4132</a>  </span><span>}</span>
<span class="hidden"><a id="L4133" href="#L4133">  4133</a>  </span>
<span class="hidden"><a id="L4134" href="#L4134">  4134</a>  </span><span class="text">// AlarmNone.</span>
<span class="hidden"><a id="L4135" href="#L4135">  4135</a>  </span><span>type AlarmNone struct{}</span>
<span class="hidden"><a id="L4136" href="#L4136">  4136</a>  </span>
<span class="hidden"><a id="L4137" href="#L4137">  4137</a>  </span><span>func (s *AlarmNone) decode(t tokeniser) error {</span>
<span class="hidden"><a id="L4138" href="#L4138">  4138</a>  </span><span>Loop:</span>
<span class="hidden"><a id="L4139" href="#L4139">  4139</a>  </span><span>	for {</span>
<span class="hidden"><a id="L4140" href="#L4140">  4140</a>  </span><span>		p, err := t.GetPhrase()</span>
<span class="hidden"><a id="L4141" href="#L4141">  4141</a>  </span><span>		if err != nil {</span>
<span class="hidden"><a id="L4142" href="#L4142">  4142</a>  </span><span>			return fmt.Errorf(errDecodingType, cAlarmNone, err)</span>
<span class="hidden"><a id="L4143" href="#L4143">  4143</a>  </span><span>		} else if p.Type == parser.PhraseDone {</span>
<span class="hidden"><a id="L4144" href="#L4144">  4144</a>  </span><span>			return fmt.Errorf(errDecodingType, cAlarmNone, io.ErrUnexpectedEOF)</span>
<span class="hidden"><a id="L4145" href="#L4145">  4145</a>  </span><span>		}</span>
<span class="hidden"><a id="L4146" href="#L4146">  4146</a>  </span>
<span class="hidden"><a id="L4147" href="#L4147">  4147</a>  </span><span>		value := p.Data[len(p.Data)-1].Data</span>
<span class="hidden"><a id="L4148" href="#L4148">  4148</a>  </span>
<span class="hidden"><a id="L4149" href="#L4149">  4149</a>  </span><span>		switch strings.ToUpper(p.Data[0].Data) {</span>
<span class="hidden"><a id="L4150" href="#L4150">  4150</a>  </span><span>		case &#34;BEGIN&#34;:</span>
<span class="hidden"><a id="L4151" href="#L4151">  4151</a>  </span><span>			switch n := strings.ToUpper(value); n {</span>
<span class="hidden"><a id="L4152" href="#L4152">  4152</a>  </span><span>			default:</span>
<span class="hidden"><a id="L4153" href="#L4153">  4153</a>  </span><span>				if err := decodeDummy(t, n); err != nil {</span>
<span class="hidden"><a id="L4154" href="#L4154">  4154</a>  </span><span>					return fmt.Errorf(errDecodingType, cAlarmNone, err)</span>
<span class="hidden"><a id="L4155" href="#L4155">  4155</a>  </span><span>				}</span>
<span class="hidden"><a id="L4156" href="#L4156">  4156</a>  </span><span>			}</span>
<span class="hidden"><a id="L4157" href="#L4157">  4157</a>  </span><span>		case &#34;END&#34;:</span>
<span class="hidden"><a id="L4158" href="#L4158">  4158</a>  </span><span>			if value != &#34;VALARM&#34; {</span>
<span class="hidden"><a id="L4159" href="#L4159">  4159</a>  </span><span>				return fmt.Errorf(errDecodingType, cAlarmNone, ErrInvalidEnd)</span>
<span class="hidden"><a id="L4160" href="#L4160">  4160</a>  </span><span>			}</span>
<span class="hidden"><a id="L4161" href="#L4161">  4161</a>  </span>
<span class="hidden"><a id="L4162" href="#L4162">  4162</a>  </span><span>			break Loop</span>
<span class="hidden"><a id="L4163" href="#L4163">  4163</a>  </span><span>		}</span>
<span class="hidden"><a id="L4164" href="#L4164">  4164</a>  </span><span>	}</span>
<span class="hidden"><a id="L4165" href="#L4165">  4165</a>  </span><span>	return nil</span>
<span class="hidden"><a id="L4166" href="#L4166">  4166</a>  </span><span>}</span>
<span class="hidden"><a id="L4167" href="#L4167">  4167</a>  </span>
<span class="hidden"><a id="L4168" href="#L4168">  4168</a>  </span><span>func (s *AlarmNone) encode(w writer) {</span>
<span class="hidden"><a id="L4169" href="#L4169">  4169</a>  </span><span>}</span>
<span class="hidden"><a id="L4170" href="#L4170">  4170</a>  </span>
<span class="hidden"><a id="L4171" href="#L4171">  4171</a>  </span><span>func (s *AlarmNone) valid() error {</span>
<span class="hidden"><a id="L4172" href="#L4172">  4172</a>  </span><span>	return nil</span>
<span class="hidden"><a id="L4173" href="#L4173">  4173</a>  </span><span>}</span>
<span class="hidden"><a id="L4174" href="#L4174">  4174</a>  </span>
<span class="hidden"><a id="L4175" href="#L4175">  4175</a>  </span><span class="text">// decodeDummy reads unknown sections, discarding the data.</span>
<span class="hidden"><a id="L4176" href="#L4176">  4176</a>  </span><span>func decodeDummy(t tokeniser, n string) error {</span>
<span class="hidden"><a id="L4177" href="#L4177">  4177</a>  </span><span>	for {</span>
<span class="hidden"><a id="L4178" href="#L4178">  4178</a>  </span><span>		p, err := t.GetPhrase()</span>
<span class="hidden"><a id="L4179" href="#L4179">  4179</a>  </span><span>		if err != nil {</span>
<span class="hidden"><a id="L4180" href="#L4180">  4180</a>  </span><span>			return err</span>
<span class="hidden"><a id="L4181" href="#L4181">  4181</a>  </span><span>		} else if p.Type == parser.PhraseDone {</span>
<span class="hidden"><a id="L4182" href="#L4182">  4182</a>  </span><span>			return io.ErrUnexpectedEOF</span>
<span class="hidden"><a id="L4183" href="#L4183">  4183</a>  </span><span>		}</span>
<span class="hidden"><a id="L4184" href="#L4184">  4184</a>  </span>
<span class="hidden"><a id="L4185" href="#L4185">  4185</a>  </span><span>		switch strings.ToUpper(p.Data[0].Data) {</span>
<span class="hidden"><a id="L4186" href="#L4186">  4186</a>  </span><span>		case &#34;BEGIN&#34;:</span>
<span class="hidden"><a id="L4187" href="#L4187">  4187</a>  </span><span>			if err := decodeDummy(t, p.Data[len(p.Data)-1].Data); err != nil {</span>
<span class="hidden"><a id="L4188" href="#L4188">  4188</a>  </span><span>				return err</span>
<span class="hidden"><a id="L4189" href="#L4189">  4189</a>  </span><span>			}</span>
<span class="hidden"><a id="L4190" href="#L4190">  4190</a>  </span><span>		case &#34;END&#34;:</span>
<span class="hidden"><a id="L4191" href="#L4191">  4191</a>  </span><span>			if strings.ToUpper(p.Data[len(p.Data)-1].Data) == n {</span>
<span class="hidden"><a id="L4192" href="#L4192">  4192</a>  </span><span>				return nil</span>
<span class="hidden"><a id="L4193" href="#L4193">  4193</a>  </span><span>			}</span>
<span class="hidden"><a id="L4194" href="#L4194">  4194</a>  </span>
<span class="hidden"><a id="L4195" href="#L4195">  4195</a>  </span><span>			return ErrInvalidEnd</span>
<span class="hidden"><a id="L4196" href="#L4196">  4196</a>  </span><span>		}</span>
<span class="hidden"><a id="L4197" href="#L4197">  4197</a>  </span><span>	}</span>
<span class="hidden"><a id="L4198" href="#L4198">  4198</a>  </span><span>}</span>
<span class="hidden"><a id="L4199" href="#L4199">  4199</a>  </span>
<span class="hidden"><a id="L4200" href="#L4200">  4200</a>  </span><span class="text">// Errors.</span>
<span class="hidden"><a id="L4201" href="#L4201">  4201</a>  </span><span>var (</span>
<span class="hidden"><a id="L4202" href="#L4202">  4202</a>  </span><span>	ErrInvalidEnd        = errors.New(&#34;invalid end of section&#34;)</span>
<span class="hidden"><a id="L4203" href="#L4203">  4203</a>  </span><span>	ErrMissingRequired   = errors.New(&#34;required property missing&#34;)</span>
<span class="hidden"><a id="L4204" href="#L4204">  4204</a>  </span><span>	ErrRequirementNotMet = errors.New(&#34;requirement not met&#34;)</span>
<span class="hidden"><a id="L4205" href="#L4205">  4205</a>  </span><span>)</span>
<span class="hidden"><a id="L4206" href="#L4206">  4206</a>  </span>
<span class="hidden"><a id="L4207" href="#L4207">  4207</a>  </span><span>const (</span>
<span class="hidden"><a id="L4208" href="#L4208">  4208</a>  </span><span>	errMultiple   = &#34;error decoding %s: multiple %s&#34;</span>
<span class="hidden"><a id="L4209" href="#L4209">  4209</a>  </span><span>	cCalendar     = &#34;Calendar&#34;</span>
<span class="hidden"><a id="L4210" href="#L4210">  4210</a>  </span><span>	cEvent        = &#34;Event&#34;</span>
<span class="hidden"><a id="L4211" href="#L4211">  4211</a>  </span><span>	cTodo         = &#34;Todo&#34;</span>
<span class="hidden"><a id="L4212" href="#L4212">  4212</a>  </span><span>	cJournal      = &#34;Journal&#34;</span>
<span class="hidden"><a id="L4213" href="#L4213">  4213</a>  </span><span>	cTimezone     = &#34;Timezone&#34;</span>
<span class="hidden"><a id="L4214" href="#L4214">  4214</a>  </span><span>	cStandard     = &#34;Standard&#34;</span>
<span class="hidden"><a id="L4215" href="#L4215">  4215</a>  </span><span>	cDaylight     = &#34;Daylight&#34;</span>
<span class="hidden"><a id="L4216" href="#L4216">  4216</a>  </span><span>	cAlarmAudio   = &#34;AlarmAudio&#34;</span>
<span class="hidden"><a id="L4217" href="#L4217">  4217</a>  </span><span>	cAlarmDisplay = &#34;AlarmDisplay&#34;</span>
<span class="hidden"><a id="L4218" href="#L4218">  4218</a>  </span><span>	cAlarmEmail   = &#34;AlarmEmail&#34;</span>
<span class="hidden"><a id="L4219" href="#L4219">  4219</a>  </span><span>	cAlarmURI     = &#34;AlarmURI&#34;</span>
<span class="hidden"><a id="L4220" href="#L4220">  4220</a>  </span><span>	cAlarmNone    = &#34;AlarmNone&#34;</span>
<span class="hidden"><a id="L4221" href="#L4221">  4221</a>  </span><span>)</span>
<span class="hidden"><a id="L4222" href="#L4222">  4222</a>  </span></pre>
	</body>
</html>
