metanorma-un 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/macos.yml +39 -0
  3. data/.github/workflows/ubuntu.yml +39 -0
  4. data/.github/workflows/windows.yml +42 -0
  5. data/.gitignore +1 -0
  6. data/.hound.yml +3 -0
  7. data/.rubocop.yml +10 -0
  8. data/CODE_OF_CONDUCT.md +74 -0
  9. data/Gemfile +11 -0
  10. data/LICENSE +25 -0
  11. data/README.adoc +141 -0
  12. data/Rakefile +6 -0
  13. data/bin/console +14 -0
  14. data/bin/rspec +17 -0
  15. data/bin/setup +8 -0
  16. data/lib/asciidoctor/un.rb +7 -0
  17. data/lib/asciidoctor/un/basicdoc.rng +1059 -0
  18. data/lib/asciidoctor/un/biblio.rng +1142 -0
  19. data/lib/asciidoctor/un/boilerplate.xml +57 -0
  20. data/lib/asciidoctor/un/converter.rb +209 -0
  21. data/lib/asciidoctor/un/isodoc.rng +1028 -0
  22. data/lib/asciidoctor/un/reqt.rng +171 -0
  23. data/lib/asciidoctor/un/un.rng +242 -0
  24. data/lib/asciidoctor/un/validate.rb +22 -0
  25. data/lib/isodoc/un.rb +10 -0
  26. data/lib/isodoc/un/base_convert.rb +227 -0
  27. data/lib/isodoc/un/html/header.html +225 -0
  28. data/lib/isodoc/un/html/html_unece_intro.html +15 -0
  29. data/lib/isodoc/un/html/html_unece_plenary_titlepage.html +100 -0
  30. data/lib/isodoc/un/html/html_unece_titlepage.html +81 -0
  31. data/lib/isodoc/un/html/htmlstyle.scss +1174 -0
  32. data/lib/isodoc/un/html/logo.jpg +0 -0
  33. data/lib/isodoc/un/html/scripts.html +84 -0
  34. data/lib/isodoc/un/html/scripts.pdf.html +72 -0
  35. data/lib/isodoc/un/html/unece.scss +801 -0
  36. data/lib/isodoc/un/html/word_unece_intro.html +15 -0
  37. data/lib/isodoc/un/html/word_unece_plenary_titlepage.html +160 -0
  38. data/lib/isodoc/un/html/word_unece_titlepage.html +30 -0
  39. data/lib/isodoc/un/html/wordstyle.scss +1141 -0
  40. data/lib/isodoc/un/html_convert.rb +121 -0
  41. data/lib/isodoc/un/metadata.rb +115 -0
  42. data/lib/isodoc/un/pdf_convert.rb +133 -0
  43. data/lib/isodoc/un/word_convert.rb +180 -0
  44. data/lib/metanorma-un.rb +8 -0
  45. data/lib/metanorma/un.rb +12 -0
  46. data/lib/metanorma/un/UN_emblem_blue.svg +193 -0
  47. data/lib/metanorma/un/input.rb +18 -0
  48. data/lib/metanorma/un/processor.rb +43 -0
  49. data/lib/metanorma/un/version.rb +5 -0
  50. data/metanorma-unece.gemspec +48 -0
  51. metadata +334 -0
@@ -0,0 +1,227 @@
1
+ require_relative "metadata"
2
+ require "fileutils"
3
+ require "roman-numerals"
4
+
5
+ module IsoDoc
6
+ module UN
7
+ module BaseConvert
8
+ def metadata_init(lang, script, labels)
9
+ @meta = Metadata.new(lang, script, labels)
10
+ @meta.set(:toc, @toc)
11
+ end
12
+
13
+ def annex_name(annex, name, div)
14
+ div.h1 **{ class: "Annex" } do |t|
15
+ t << "#{anchor(annex['id'], :label)}"
16
+ t.br
17
+ t.b do |b|
18
+ name&.children&.each { |c2| parse(c2, b) }
19
+ end
20
+ end
21
+ end
22
+
23
+ def i18n_init(lang, script)
24
+ super
25
+ @admonition_lbl = "Box"
26
+ @abstract_lbl = "Summary"
27
+ end
28
+
29
+ def fileloc(loc)
30
+ File.join(File.dirname(__FILE__), loc)
31
+ end
32
+
33
+ MIDDLE_CLAUSE = "//clause[parent::sections]".freeze
34
+
35
+ def initial_anchor_names(d)
36
+ preface_names(d.at(ns("//abstract")))
37
+ preface_names(d.at(ns("//foreword")))
38
+ preface_names(d.at(ns("//introduction")))
39
+ sequential_asset_names(d.xpath(ns("//foreword | //introduction")))
40
+ middle_section_asset_names(d)
41
+ clause_names(d, 0)
42
+ termnote_anchor_names(d)
43
+ termexample_anchor_names(d)
44
+ end
45
+
46
+ def clause_names(docxml, sect_num)
47
+ q = "//clause[parent::sections]"
48
+ @paranumber = 0
49
+ docxml.xpath(ns(q)).each_with_index do |c, i|
50
+ section_names(c, (i + sect_num), 1)
51
+ end
52
+ end
53
+
54
+ def levelnumber(num, lvl)
55
+ case lvl % 3
56
+ when 1 then RomanNumerals.to_roman(num)
57
+ when 2 then ("A".ord + num - 1).chr
58
+ when 0 then num.to_s
59
+ end
60
+ end
61
+
62
+ def annex_levelnum(num, lvl)
63
+ case lvl % 3
64
+ when 0 then RomanNumerals.to_roman(num)
65
+ when 1 then ("A".ord + num - 1).chr
66
+ when 2 then num.to_s
67
+ end
68
+ end
69
+
70
+ NONTERMINAL =
71
+ "./clause | ./term | ./terms | ./definitions | ./references".freeze
72
+
73
+ def leaf_section?(clause)
74
+ !clause.at(ns(NONTERMINAL)) &&
75
+ !%w(definitions annex terms).include?(clause.name) &&
76
+ clause.at(ns("./p | ./bibitem"))
77
+ end
78
+
79
+ def label_leaf_section(clause, lvl)
80
+ @paranumber += 1
81
+ @anchors[clause["id"]] = {label: @paranumber.to_s,
82
+ xref: "paragraph #{@paranumber}",
83
+ level: lvl, type: "paragraph" }
84
+ end
85
+
86
+ def label_annex_leaf_section(clause, num, lvl)
87
+ @paranumber += 1
88
+ @anchors[clause["id"]] = {label: @paranumber.to_s,
89
+ xref: "paragraph #{num}.#{@paranumber}",
90
+ level: lvl, type: "paragraph" }
91
+ end
92
+
93
+ def section_names(clause, num, lvl)
94
+ return num if clause.nil?
95
+ leaf_section?(clause) and label_leaf_section(clause, lvl) and return
96
+ num = num + 1
97
+ lbl = levelnumber(num, 1)
98
+ @anchors[clause["id"]] = { label: lbl, level: lvl, type: "clause",
99
+ xref: l10n("#{@clause_lbl} #{lbl}") }
100
+ i = 1
101
+ clause.xpath(ns(NONTERMINAL)).each do |c|
102
+ section_names1(c, "#{lbl}.#{levelnumber(i, lvl + 1)}", lvl + 1)
103
+ i += 1 if !leaf_section?(c)
104
+ end
105
+ num
106
+ end
107
+
108
+ def section_names1(clause, num, level)
109
+ leaf_section?(clause) and label_leaf_section(clause, level) and return
110
+ /\.(?<leafnum>[^.]+$)/ =~ num
111
+ @anchors[clause["id"]] = { label: leafnum, level: level, type: "clause",
112
+ xref: l10n("#{@clause_lbl} #{num}") }
113
+ i = 1
114
+ clause.xpath(ns(NONTERMINAL)).each do |c|
115
+ section_names1(c, "#{num}.#{levelnumber(i, level + 1)}", level + 1)
116
+ i += 1 if !leaf_section?(c)
117
+ end
118
+ end
119
+
120
+ def annex_name_lbl(clause, num)
121
+ l10n("<b>#{@annex_lbl} #{num}</b>")
122
+ end
123
+
124
+ def annex_names(clause, num)
125
+ hierarchical_asset_names(clause, num)
126
+ leaf_section?(clause) and
127
+ label_annex_leaf_section(clause, num, 1) and return
128
+ @anchors[clause["id"]] = { label: annex_name_lbl(clause, num),
129
+ type: "clause",
130
+ xref: "#{@annex_lbl} #{num}", level: 1 }
131
+ i = 1
132
+ clause.xpath(ns("./clause")).each do |c|
133
+ annex_names1(c, "#{num}.#{annex_levelnum(i, 2)}", 2)
134
+ i += 1 if !leaf_section?(c)
135
+ end
136
+ end
137
+
138
+ def annex_names1(clause, num, level)
139
+ leaf_section?(clause) and
140
+ label_annex_leaf_section(clause, num, level) and return
141
+ /\.(?<leafnum>[^.]+$)/ =~ num
142
+ @anchors[clause["id"]] = { label: leafnum, xref: "#{@annex_lbl} #{num}",
143
+ level: level, type: "clause" }
144
+ i = 1
145
+ clause.xpath(ns("./clause | ./references")).each do |c|
146
+ annex_names1(c, "#{num}.#{annex_levelnum(i, level + 1)}", level + 1)
147
+ i += 1 if !leaf_section?(c)
148
+ end
149
+ end
150
+
151
+ def back_anchor_names(docxml)
152
+ docxml.xpath(ns("//annex")).each_with_index do |c, i|
153
+ @paranumber = 0
154
+ annex_names(c, RomanNumerals.to_roman(i + 1))
155
+ end
156
+ docxml.xpath(ns("//bibliography/clause |"\
157
+ "//bibliography/references")).each do |b|
158
+ preface_names(b)
159
+ end
160
+ docxml.xpath(ns("//bibitem[not(ancestor::bibitem)]")).each do |ref|
161
+ reference_names(ref)
162
+ end
163
+ end
164
+
165
+ def sequential_admonition_names(clause)
166
+ i = 0
167
+ clause.xpath(ns(".//admonition")).each do |t|
168
+ i += 1 unless t["unnumbered"]
169
+ next if t["id"].nil? || t["id"].empty?
170
+ @anchors[t["id"]] = anchor_struct(i.to_s, nil, @admonition_lbl,
171
+ "box", t["unnumbered"])
172
+ end
173
+ end
174
+
175
+ def hierarchical_admonition_names(clause, num)
176
+ i = 0
177
+ clause.xpath(ns(".//admonition")).each do |t|
178
+ i += 1 unless t["unnumbered"]
179
+ next if t["id"].nil? || t["id"].empty?
180
+ @anchors[t["id"]] =
181
+ anchor_struct("#{num}.#{i}", nil, @admonition_lbl, "box",
182
+ t["unnumbered"])
183
+ end
184
+ end
185
+
186
+ def sequential_asset_names(clause)
187
+ super
188
+ sequential_admonition_names(clause)
189
+ end
190
+
191
+ def hierarchical_asset_names(clause, num)
192
+ super
193
+ hierarchical_admonition_names(clause, num)
194
+ end
195
+
196
+ def admonition_name_parse(node, div, name)
197
+ div.p **{ class: "AdmonitionTitle", style: "text-align:center;" } do |p|
198
+ lbl = anchor(node['id'], :label)
199
+ lbl.nil? or p << l10n("#{@admonition_lbl} #{lbl}")
200
+ name and !lbl.nil? and p << "&nbsp;&mdash; "
201
+ name and name.children.each { |n| parse(n, div) }
202
+ end
203
+ end
204
+
205
+ def admonition_parse(node, out)
206
+ name = node.at(ns("./name"))
207
+ out.div **{ class: "Admonition" } do |t|
208
+ admonition_name_parse(node, t, name) if name
209
+ node.children.each do |n|
210
+ parse(n, t) unless n.name == "name"
211
+ end
212
+ end
213
+ end
214
+
215
+ def inline_header_title(out, node, c1)
216
+ title = c1&.content || ""
217
+ out.span **{ class: "zzMoveToFollowing" } do |s|
218
+ if lbl = anchor(node['id'], :label)
219
+ s << "#{lbl}. " unless @suppressheadingnumbers
220
+ insert_tab(s, 1)
221
+ end
222
+ s << "#{title} "
223
+ end
224
+ end
225
+ end
226
+ end
227
+ end
@@ -0,0 +1,225 @@
1
+ <html xmlns:v="urn:schemas-microsoft-com:vml"
2
+ xmlns:o="urn:schemas-microsoft-com:office:office"
3
+ xmlns:w="urn:schemas-microsoft-com:office:word"
4
+ xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
5
+ xmlns:mv="http://macVmlSchemaUri" xmlns="http://www.w3.org/TR/REC-html40">
6
+
7
+ <head>
8
+ <meta name=Title content="">
9
+ <meta name=Keywords content="">
10
+ <meta http-equiv=Content-Type content="text/html; charset=utf-8">
11
+ <meta name=ProgId content=Word.Document>
12
+ <meta name=Generator content="Microsoft Word 15">
13
+ <meta name=Originator content="Microsoft Word 15">
14
+ <link id=Main-File rel=Main-File href="../{{ filename }}.html">
15
+ <!--[if gte mso 9]><xml>
16
+ <o:shapedefaults v:ext="edit" spidmax="2049"/>
17
+ </xml><![endif]-->
18
+ </head>
19
+
20
+ <body lang=EN link=blue vlink="#954F72">
21
+
22
+ <div style='mso-element:footnote-separator' id=fs>
23
+
24
+ <p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
25
+ normal'><span lang=EN-GB><span style='mso-special-character:footnote-separator'><![if !supportFootnotes]>
26
+
27
+ <hr align=left size=1 width="33%">
28
+
29
+ <![endif]></span></span></p>
30
+
31
+ </div>
32
+
33
+ <div style='mso-element:footnote-continuation-separator' id=fcs>
34
+
35
+ <p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
36
+ normal'><span lang=EN-GB><span style='mso-special-character:footnote-continuation-separator'><![if !supportFootnotes]>
37
+
38
+ <hr align=left size=1>
39
+
40
+ <![endif]></span></span></p>
41
+
42
+ </div>
43
+
44
+ <div style='mso-element:endnote-separator' id=es>
45
+
46
+ <p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
47
+ normal'><span lang=EN-GB><span style='mso-special-character:footnote-separator'><![if !supportFootnotes]>
48
+
49
+ <hr align=left size=1 width="33%">
50
+
51
+ <![endif]></span></span></p>
52
+
53
+ </div>
54
+
55
+ <div style='mso-element:endnote-continuation-separator' id=ecs>
56
+
57
+ <p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
58
+ normal'><span lang=EN-GB><span style='mso-special-character:footnote-continuation-separator'><![if !supportFootnotes]>
59
+
60
+ <hr align=left size=1>
61
+
62
+ <![endif]></span></span></p>
63
+
64
+ </div>
65
+
66
+ <div style='mso-element:header' id=eh1>
67
+
68
+ <p class=MsoHeader align=center style='text-align:center;line-height:12.0pt;
69
+ mso-line-height-rule:exactly'></p>
70
+
71
+ </div>
72
+
73
+ <div style='mso-element:header' id=h1>
74
+
75
+ <p class=MsoHeader align=center style='text-align:center;line-height:12.0pt;
76
+ mso-line-height-rule:exactly'></span></p>
77
+ </div>
78
+
79
+ <div style='mso-element:footer' id=ef1>
80
+
81
+ <p class=MsoFooter style='margin-top:12.0pt;line-height:12.0pt;mso-line-height-rule:
82
+ exactly'></p>
83
+
84
+ </div>
85
+
86
+ <div style='mso-element:header' id=eh2>
87
+ <p class=MsoHeader align=center style='text-align:center;line-height:12.0pt;
88
+ mso-line-height-rule:exactly'><span lang=EN-GB><b>{{ formatted_docnumber }}</b></span></p>
89
+
90
+ <div style='mso-element:para-border-div;border:none;border-bottom:solid windowtext 1.0pt;
91
+ mso-border-bottom-alt:solid windowtext .5pt;padding:0cm 0cm 1.0pt 0cm'>
92
+
93
+ <p class=MsoHeader align=center style='margin-bottom:12.0pt;text-align:center;
94
+ line-height:12.0pt;mso-line-height-rule:exactly;border:none;mso-border-bottom-alt:
95
+ solid windowtext .5pt;padding:0cm;mso-padding-alt:0cm 0cm 1.0pt 0cm'><span
96
+ lang=EN-US><o:p>&nbsp;</o:p></span></p>
97
+
98
+ </div>
99
+ </div>
100
+
101
+ <div style='mso-element:header' id=eh2l>
102
+ <p class=MsoHeaderLandscape align=center style='text-align:center;line-height:12.0pt;
103
+ mso-line-height-rule:exactly'><span lang=EN-GB><b>{{ formatted_docnumber }}</b></span></p>
104
+
105
+ <div style='mso-element:para-border-div;border:none;border-bottom:solid windowtext 1.0pt;
106
+ mso-border-bottom-alt:solid windowtext .5pt;padding:0cm 0cm 1.0pt 0cm'>
107
+
108
+ <p class=MsoHeaderLandscape align=center style='margin-bottom:12.0pt;text-align:center;
109
+ line-height:12.0pt;mso-line-height-rule:exactly;border:none;mso-border-bottom-alt:
110
+ solid windowtext .5pt;padding:0cm;mso-padding-alt:0cm 0cm 1.0pt 0cm'><span
111
+ lang=EN-US><o:p>&nbsp;</o:p></span></p>
112
+
113
+ </div>
114
+ </div>
115
+
116
+ <div style='mso-element:header' id=h2>
117
+
118
+ <p class=MsoHeader align=center style='text-align:center;line-height:12.0pt;
119
+ mso-line-height-rule:exactly'><span lang=EN-GB><b>{{ formatted_docnumber }}</b></span></p>
120
+
121
+ <div style='mso-element:para-border-div;border:none;border-bottom:solid windowtext 1.0pt;
122
+ mso-border-bottom-alt:solid windowtext .5pt;padding:0cm 0cm 1.0pt 0cm'>
123
+
124
+ <p class=MsoHeader align=center style='margin-bottom:12.0pt;text-align:center;
125
+ line-height:12.0pt;mso-line-height-rule:exactly;border:none;mso-border-bottom-alt:
126
+ solid windowtext .5pt;padding:0cm;mso-padding-alt:0cm 0cm 1.0pt 0cm'><span
127
+ lang=EN-US><o:p>&nbsp;</o:p></span></p>
128
+
129
+ </div>
130
+ </div>
131
+
132
+ <div style='mso-element:header' id=h2l>
133
+
134
+ <p class=MsoHeaderLandscape align=center style='text-align:center;line-height:12.0pt;
135
+ mso-line-height-rule:exactly'><span lang=EN-GB><b>{{ formatted_docnumber }}</b></span></p>
136
+
137
+ <div style='mso-element:para-border-div;border:none;border-bottom:solid windowtext 1.0pt;
138
+ mso-border-bottom-alt:solid windowtext .5pt;padding:0cm 0cm 1.0pt 0cm'>
139
+
140
+ <p class=MsoHeaderLandscape align=center style='margin-bottom:12.0pt;text-align:center;
141
+ line-height:12.0pt;mso-line-height-rule:exactly;border:none;mso-border-bottom-alt:
142
+ solid windowtext .5pt;padding:0cm;mso-padding-alt:0cm 0cm 1.0pt 0cm'><span
143
+ lang=EN-US><o:p>&nbsp;</o:p></span></p>
144
+
145
+ </div>
146
+ </div>
147
+
148
+
149
+ <div style='mso-element:footer' id=ef2>
150
+ <p class=MsoFooter style='line-height:12.0pt;mso-line-height-rule:exactly'></p>
151
+ </div>
152
+
153
+ <div style='mso-element:footer' id=ef2l>
154
+ <p class=MsoFooterLandscape style='line-height:12.0pt;mso-line-height-rule:exactly'></p>
155
+ </div>
156
+
157
+ <div style='mso-element:footer' id=f2>
158
+ <p class=MsoFooter style='line-height:12.0pt'></p>
159
+ </div>
160
+
161
+ <div style='mso-element:footer' id=f2l>
162
+ <p class=MsoFooterLandscape style='line-height:12.0pt'></p>
163
+ </div>
164
+
165
+ <div style='mso-element:footer' id=ef3>
166
+ <p class=MsoFooter align="center" style='text-align:center;margin-top:12.0pt;line-height:12.0pt;mso-line-height-rule:
167
+ exactly'><!--[if supportFields]><b><span
168
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
169
+ style='mso-element:field-begin'></span><span
170
+ style='mso-spacerun:yes'> </span>PAGE<span style='mso-spacerun:yes'>  
171
+ </span>\* MERGEFORMAT <span style='mso-element:field-separator'></span></span></b><![endif]--><b>
172
+ <span lang=EN-GB style='font-size:10.0pt;
173
+ mso-bidi-font-size:11.0pt'><span style='mso-no-proof:yes'>2</span></span></b><!--[if supportFields]><b>
174
+ <span lang=EN-GB style='font-size:10.0pt;
175
+ mso-bidi-font-size:11.0pt'><span style='mso-element:field-end'></span></span></b><![endif]--><span
176
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
177
+ style='mso-tab-count:0'>                                                                                                                                                                           </span></span></p>
178
+ </div>
179
+
180
+ <div style='mso-element:footer' id=ef3l>
181
+ <p class=MsoFooterLandscape align="center" style='text-align:center;margin-top:12.0pt;line-height:12.0pt;mso-line-height-rule:
182
+ exactly'><!--[if supportFields]><b><span
183
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
184
+ style='mso-element:field-begin'></span><span
185
+ style='mso-spacerun:yes'> </span>PAGE<span style='mso-spacerun:yes'>  
186
+ </span>\* MERGEFORMAT <span style='mso-element:field-separator'></span></span></b><![endif]--><b>
187
+ <span lang=EN-GB style='font-size:10.0pt;
188
+ mso-bidi-font-size:11.0pt'><span style='mso-no-proof:yes'>2</span></span></b><!--[if supportFields]><b>
189
+ <span lang=EN-GB style='font-size:10.0pt;
190
+ mso-bidi-font-size:11.0pt'><span style='mso-element:field-end'></span></span></b><![endif]--><span
191
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
192
+ style='mso-tab-count:0'>                                                                                                                                                                           </span></span></p>
193
+ </div>
194
+
195
+ <div style='mso-element:footer' id=f3>
196
+ <p class=MsoFooter align="center" style='text-align:center;line-height:12.0pt'><span lang=EN-GB
197
+ style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span style='mso-tab-count:0'>                                                                                                                                                                           </span></span><!--[if supportFields]><b>
198
+ <span lang=EN-GB style='font-size:10.0pt;
199
+ mso-bidi-font-size:11.0pt'><span style='mso-element:field-begin'></span>
200
+ PAGE<span style='mso-spacerun:yes'>   </span>\* MERGEFORMAT <span
201
+ style='mso-element:field-separator'></span></span></b><![endif]--><b>
202
+ <span lang=EN-GB style='font-size:10.0pt;
203
+ mso-bidi-font-size:11.0pt'><span style='mso-no-proof:yes'>3</span></span></b><!--[if supportFields]><b>
204
+ <span lang=EN-GB style='font-size:10.0pt;
205
+ mso-bidi-font-size:11.0pt'><span style='mso-element:field-end'></span></span></b><![endif]--><span
206
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><o:p></o:p></span></p>
207
+ </div>
208
+
209
+ <div style='mso-element:footer' id=f3l>
210
+ <p class=MsoFooterLandscape align="center" style='text-align:center;line-height:12.0pt'><span lang=EN-GB
211
+ style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span style='mso-tab-count:0'>                                                                                                                                                                           </span></span><!--[if supportFields]><b>
212
+ <span lang=EN-GB style='font-size:10.0pt;
213
+ mso-bidi-font-size:11.0pt'><span style='mso-element:field-begin'></span>
214
+ PAGE<span style='mso-spacerun:yes'>   </span>\* MERGEFORMAT <span
215
+ style='mso-element:field-separator'></span></span></b><![endif]--><b>
216
+ <span lang=EN-GB style='font-size:10.0pt;
217
+ mso-bidi-font-size:11.0pt'><span style='mso-no-proof:yes'>3</span></span></b><!--[if supportFields]><b>
218
+ <span lang=EN-GB style='font-size:10.0pt;
219
+ mso-bidi-font-size:11.0pt'><span style='mso-element:field-end'></span></span></b><![endif]--><span
220
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><o:p></o:p></span></p>
221
+ </div>
222
+
223
+ </body>
224
+
225
+ </html>