ATLAS Offline Software
ZdcSubBlock.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 
6 #ifndef ZDCSUBBLOCK_H
7 #define ZDCSUBBLOCK_H
8 
9 #include <stdint.h>
10 #include <vector>
11 
13 
14 #include "ZdcSrcIdMap.h"
15 
16 
34 class ZdcSubBlock {
35 
36  public:
39  STATUS };
40 
41  enum DataFormats { NEUTRAL = 0,
45 
54 
55  ZdcSubBlock();
56  ~ZdcSubBlock();
57 
59  void clear();
60 
62  int dataWords() const;
63 
65  void setHeader(int wordId, int version, int format, int seqno, int crate,
66  int module, int slices2, int slices1);
67 
68  // Return unpacked header data
69  int wordId() const;
70  int version() const;
71  int format() const;
72  int seqno() const;
73  int slice() const;
74  int crate() const;
75  int module() const;
76  int slices2() const;
77  int slices1() const;
78 
79  // Return unpacked error status data
80  uint32_t failingBCN() const;
81  bool glinkTimeout() const;
82  bool glinkDown() const;
83  bool upstreamError() const;
84  bool daqOverflow() const;
85  bool bcnMismatch() const;
86  bool glinkProtocol() const;
87  bool glinkParity() const;
88 
90  uint32_t subStatus() const;
91 
93  void setBunchCrossing(int bc);
95  int bunchCrossing() const;
96 
98  // (OFFLINE_FRAGMENTS_NAMESPACE::PointerType = uint32_t*)
102 
104  // (FullEventAssembler<L1CaloSrcIdMap>::RODDATA = vector<uint32_t>)
106 
109  bool upstreamError, bool daqOverflow, bool bcnMismatch,
110  bool glinkProtocol, bool glinkParity);
111 
113  void setDaqOverflow(int bit = 1);
115  void setGlinkParity(int bit = 1);
116 
118  static SubBlockWordType wordType(uint32_t word);
120  static int wordId(uint32_t word);
122  static int format(uint32_t word);
124  static int seqno(uint32_t word);
126  static int module(uint32_t word);
127 
128  // Unpacking error code. Set by derived classes
130  void setUnpackErrorCode(int code);
132  int unpackErrorCode() const;
134  std::string unpackErrorMsg() const;
135 
136  // Packing utilities
138  static int minBits(uint32_t datum) ;
140  static int parityBit(int init, uint32_t datum, int nbits) ;
142  void packer(uint32_t datum, int nbits);
144  void packerFlush();
146  void setStreamed();
148  uint32_t unpacker(int nbits);
150  void unpackerInit();
152  bool unpackerSuccess() const;
153 
154  // Neutral format packing utilities
156  void packerNeutral(int pin, uint32_t datum, int nbits);
158  void packerNeutralParity(int pin);
160  uint32_t unpackerNeutral(int pin, int nbits);
162  bool unpackerNeutralParityError(int pin);
163 
164  private:
165  // Constants.
166  // Header and status ID
167  static const int s_headerBit = 30;
168  static const int s_statusBit = 28;
169  static const uint32_t s_headerMask = 0x3;
170  static const uint32_t s_statusMask = 0x1;
171  static const uint32_t s_headerVal = 0x3;
172  static const uint32_t s_statusVal = 0x1;
173  // Header word data positions and masks
174  static const int s_wordIdBit = 28;
175  static const int s_versionBit = 25;
176  static const int s_formatBit = 22;
177  static const int s_seqnoBit = 16;
178  static const int s_crateBit = 12;
179  static const int s_moduleBit = 8;
180  static const int s_slices2Bit = 3;
181  static const int s_slices1Bit = 0;
182  static const uint32_t s_wordIdMask = 0xf;
183  static const uint32_t s_versionMask = 0x7;
184  static const uint32_t s_formatMask = 0x7;
185  static const uint32_t s_seqnoMask = 0x3f;
186  static const uint32_t s_crateMask = 0xf;
187  static const uint32_t s_moduleMask = 0xf;
188  static const uint32_t s_slices2Mask = 0x1f;
189  static const uint32_t s_slices1Mask = 0x7;
190  // Status word data positions and masks
191  static const int s_failingBcnBit = 22;
192  static const int s_glinkTimeoutBit = 7;
193  static const int s_glinkDownBit = 6;
194  static const int s_upstreamErrorBit = 4;
195  static const int s_daqOverflowBit = 3;
196  static const int s_bcnMismatchBit = 2;
197  static const int s_glinkProtocolBit = 1;
198  static const int s_glinkParityBit = 0;
199  static const uint32_t s_failingBcnMask = 0x3f;
200  // Packing word sizes and masks
201  static const int s_maxWordBits = 32;
202  static const int s_maxStreamedBits = 31;
203  static const uint32_t s_maxWordMask = 0xffffffff;
204  static const uint32_t s_maxStreamedMask = 0x7fffffff;
205  // Neutral packing
206  static const int s_maxPins = 20;
207  static const uint32_t s_glinkDavSet = 0x400000;
208 
217  // Used for bit-packing
223  std::vector<uint32_t>::const_iterator m_dataPos;
224  std::vector<uint32_t>::const_iterator m_dataPosEnd;
225  // Used for neutral bit packing
226  std::vector<int> m_currentPinBit;
227  std::vector<int> m_oddParity;
231  std::vector<uint32_t> m_data;
232 
233 };
234 
235 inline int ZdcSubBlock::dataWords() const
236 {
237  return m_dataWords;
238 }
239 
240 inline int ZdcSubBlock::wordId() const
241 {
242  return (m_header >> s_wordIdBit) & s_wordIdMask;
243 }
244 
245 inline int ZdcSubBlock::version() const
246 {
247  return (m_header >> s_versionBit) & s_versionMask;
248 }
249 
250 inline int ZdcSubBlock::format() const
251 {
252  return (m_header >> s_formatBit) & s_formatMask;
253 }
254 
255 inline int ZdcSubBlock::seqno() const
256 {
257  return (m_header >> s_seqnoBit) & s_seqnoMask;
258 }
259 
260 inline int ZdcSubBlock::slice() const
261 {
262  return seqno();
263 }
264 
265 inline int ZdcSubBlock::crate() const
266 {
267  return (m_header >> s_crateBit) & s_crateMask;
268 }
269 
270 inline int ZdcSubBlock::module() const
271 {
272  return (m_header >> s_moduleBit) & s_moduleMask;
273 }
274 
275 inline int ZdcSubBlock::slices2() const
276 {
277  return (m_header >> s_slices2Bit) & s_slices2Mask;
278 }
279 
280 inline int ZdcSubBlock::slices1() const
281 {
282  return (m_header >> s_slices1Bit) & s_slices1Mask;
283 }
284 
286 {
288 }
289 
290 inline bool ZdcSubBlock::glinkTimeout() const
291 {
292  return m_trailer & (0x1 << s_glinkTimeoutBit);
293 }
294 
295 inline bool ZdcSubBlock::glinkDown() const
296 {
297  return m_trailer & (0x1 << s_glinkDownBit);
298 }
299 
300 inline bool ZdcSubBlock::upstreamError() const
301 {
302  return m_trailer & (0x1 << s_upstreamErrorBit);
303 }
304 
305 inline bool ZdcSubBlock::daqOverflow() const
306 {
307  return m_trailer & (0x1 << s_daqOverflowBit);
308 }
309 
310 inline bool ZdcSubBlock::bcnMismatch() const
311 {
312  return m_trailer & (0x1 << s_bcnMismatchBit);
313 }
314 
315 inline bool ZdcSubBlock::glinkProtocol() const
316 {
317  return m_trailer & (0x1 << s_glinkProtocolBit);
318 }
319 
320 inline bool ZdcSubBlock::glinkParity() const
321 {
322  return m_trailer & (0x1 << s_glinkParityBit);
323 }
324 
326 {
327  return m_trailer;
328 }
329 
330 inline void ZdcSubBlock::setBunchCrossing(const int bc)
331 {
332  if (bc) m_bunchCrossing = bc;
333 }
334 
335 inline int ZdcSubBlock::bunchCrossing() const
336 {
337  return m_bunchCrossing;
338 }
339 
340 inline void ZdcSubBlock::setUnpackErrorCode(const int code)
341 {
343 }
344 
346 {
347  return m_unpackError;
348 }
349 
351 {
354 }
355 
356 inline bool ZdcSubBlock::unpackerSuccess() const
357 {
358  return m_unpackerFlag;
359 }
360 
361 #endif
ZdcSubBlock::m_trailer
uint32_t m_trailer
Sub-Block Status Trailer.
Definition: ZdcSubBlock.h:212
ZdcSubBlock::glinkTimeout
bool glinkTimeout() const
Definition: ZdcSubBlock.h:290
ZdcSubBlock::unpackerInit
void unpackerInit()
Initialise unpacker.
Definition: ZdcSubBlock.cxx:352
ZdcSubBlock::m_data
std::vector< uint32_t > m_data
Sub-Block data.
Definition: ZdcSubBlock.h:231
ZdcSubBlock::DATA
@ DATA
Definition: ZdcSubBlock.h:38
ZdcSubBlock::setDaqOverflow
void setDaqOverflow(int bit=1)
Set DAQ FIFO Overflow bit in Sub-status word.
Definition: ZdcSubBlock.cxx:186
ZdcSubBlock::NEUTRAL
@ NEUTRAL
Definition: ZdcSubBlock.h:41
ZdcSubBlock::subStatus
uint32_t subStatus() const
Return Sub-status word.
Definition: ZdcSubBlock.h:325
ZdcSubBlock::bcnMismatch
bool bcnMismatch() const
Definition: ZdcSubBlock.h:310
ZdcSubBlock::glinkProtocol
bool glinkProtocol() const
Definition: ZdcSubBlock.h:315
ZdcSubBlock::m_dataPosEnd
std::vector< uint32_t >::const_iterator m_dataPosEnd
Definition: ZdcSubBlock.h:224
ZdcSubBlock::s_seqnoMask
static const uint32_t s_seqnoMask
Definition: ZdcSubBlock.h:185
ZdcSubBlock::write
void write(FullEventAssembler< ZdcSrcIdMap >::RODDATA *theROD) const
Output complete packed sub-block to ROD vector.
Definition: ZdcSubBlock.cxx:147
ZdcSubBlock::s_glinkDavSet
static const uint32_t s_glinkDavSet
Definition: ZdcSubBlock.h:207
ZdcSubBlock::s_wordIdBit
static const int s_wordIdBit
Definition: ZdcSubBlock.h:174
ZdcSubBlock::unpackerNeutral
uint32_t unpackerNeutral(int pin, int nbits)
Unpack given number of bits of neutral data for given pin.
Definition: ZdcSubBlock.cxx:392
ZdcSubBlock::setUnpackErrorCode
void setUnpackErrorCode(int code)
Set the unpacking error code.
Definition: ZdcSubBlock.h:340
ZdcSubBlock::m_bunchCrossing
int m_bunchCrossing
Bunch Crossing number (neutral format only)
Definition: ZdcSubBlock.h:214
ZdcSubBlock::SUPERCOMPRESSED
@ SUPERCOMPRESSED
Definition: ZdcSubBlock.h:44
ZdcSubBlock::UNPACK_DATA_TRUNCATED
@ UNPACK_DATA_TRUNCATED
Definition: ZdcSubBlock.h:51
ZdcSubBlock::wordId
int wordId() const
Definition: ZdcSubBlock.h:240
ZdcSubBlock::s_formatBit
static const int s_formatBit
Definition: ZdcSubBlock.h:176
ZdcSubBlock::s_maxStreamedBits
static const int s_maxStreamedBits
Definition: ZdcSubBlock.h:202
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
ZdcSubBlock::m_maxBits
int m_maxBits
Definition: ZdcSubBlock.h:220
ZdcSubBlock::s_maxStreamedMask
static const uint32_t s_maxStreamedMask
Definition: ZdcSubBlock.h:204
ZdcSubBlock::s_upstreamErrorBit
static const int s_upstreamErrorBit
Definition: ZdcSubBlock.h:194
ZdcSubBlock::s_maxWordMask
static const uint32_t s_maxWordMask
Definition: ZdcSubBlock.h:203
ZdcSubBlock::dataWords
int dataWords() const
Return number of data words.
Definition: ZdcSubBlock.h:235
ZdcSubBlock::setHeader
void setHeader(int wordId, int version, int format, int seqno, int crate, int module, int slices2, int slices1)
Store header data.
Definition: ZdcSubBlock.cxx:102
ZdcSubBlock::m_currentBit
int m_currentBit
Definition: ZdcSubBlock.h:219
ZdcSubBlock::UNPACK_FORMAT
@ UNPACK_FORMAT
Definition: ZdcSubBlock.h:48
ZdcSubBlock::upstreamError
bool upstreamError() const
Definition: ZdcSubBlock.h:300
ZdcSubBlock::slices1
int slices1() const
Definition: ZdcSubBlock.h:280
ZdcSubBlock::UnpackErrorType
UnpackErrorType
Definition: ZdcSubBlock.h:46
ZdcSubBlock::glinkParity
bool glinkParity() const
Definition: ZdcSubBlock.h:320
ZdcSubBlock::minBits
static int minBits(uint32_t datum)
Return the minimum number of bits needed for given data.
Definition: ZdcSubBlock.cxx:245
ZdcSubBlock::unpackErrorCode
int unpackErrorCode() const
Return the unpacking error code.
Definition: ZdcSubBlock.h:345
ZdcSubBlock::s_statusMask
static const uint32_t s_statusMask
Definition: ZdcSubBlock.h:170
ZdcSubBlock::s_statusBit
static const int s_statusBit
Definition: ZdcSubBlock.h:168
ZdcSubBlock::m_oddParity
std::vector< int > m_oddParity
Definition: ZdcSubBlock.h:227
ZdcSubBlock::s_glinkTimeoutBit
static const int s_glinkTimeoutBit
Definition: ZdcSubBlock.h:192
ZdcSubBlock::m_dataWords
int m_dataWords
Current number of data words.
Definition: ZdcSubBlock.h:229
ZdcSubBlock::seqno
int seqno() const
Definition: ZdcSubBlock.h:255
ZdcSubBlock::m_currentPinBit
std::vector< int > m_currentPinBit
Definition: ZdcSubBlock.h:226
ZdcSubBlock::COMPRESSED
@ COMPRESSED
Definition: ZdcSubBlock.h:43
ZdcSubBlock::s_glinkParityBit
static const int s_glinkParityBit
Definition: ZdcSubBlock.h:198
ZdcSubBlock::UNPACK_WORD_ID
@ UNPACK_WORD_ID
Definition: ZdcSubBlock.h:53
ZdcSubBlock::unpackerNeutralParityError
bool unpackerNeutralParityError(int pin)
Unpack and test G-Link parity bit for given pin.
Definition: ZdcSubBlock.cxx:408
ZdcSubBlock::packerFlush
void packerFlush()
Flush the current data word padded with zeros.
Definition: ZdcSubBlock.cxx:296
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
ZdcSubBlock::~ZdcSubBlock
~ZdcSubBlock()
Definition: ZdcSubBlock.cxx:79
ZdcSubBlock::m_bitword
uint32_t m_bitword
Definition: ZdcSubBlock.h:218
ZdcSubBlock::s_slices1Bit
static const int s_slices1Bit
Definition: ZdcSubBlock.h:181
ZdcSubBlock::wordType
static SubBlockWordType wordType(uint32_t word)
Word identification.
Definition: ZdcSubBlock.cxx:422
ZdcSubBlock::crate
int crate() const
Definition: ZdcSubBlock.h:265
ZdcSubBlock::STATUS
@ STATUS
Definition: ZdcSubBlock.h:39
ZdcSubBlock::s_crateMask
static const uint32_t s_crateMask
Definition: ZdcSubBlock.h:186
ZdcSubBlock::version
int version() const
Definition: ZdcSubBlock.h:245
ZdcSubBlock::s_versionMask
static const uint32_t s_versionMask
Definition: ZdcSubBlock.h:183
ZdcSubBlock::s_versionBit
static const int s_versionBit
Definition: ZdcSubBlock.h:175
OFFLINE_FRAGMENTS_NAMESPACE::PointerType
const DataType * PointerType
Definition: RawEvent.h:25
ZdcSubBlock::s_failingBcnMask
static const uint32_t s_failingBcnMask
Definition: ZdcSubBlock.h:199
ZdcSubBlock::m_header
uint32_t m_header
Sub-Block Header.
Definition: ZdcSubBlock.h:210
histSizes.code
code
Definition: histSizes.py:129
ZdcSubBlock::ZdcSubBlock
ZdcSubBlock()
Definition: ZdcSubBlock.cxx:66
ZdcSubBlock::bunchCrossing
int bunchCrossing() const
Return the Bunch Crossing number (neutral format only)
Definition: ZdcSubBlock.h:335
ZdcSubBlock::format
int format() const
Definition: ZdcSubBlock.h:250
ZdcSubBlock::UNPACK_COMPRESSION_VERSION
@ UNPACK_COMPRESSION_VERSION
Definition: ZdcSubBlock.h:49
ZdcSrcIdMap.h
ZdcSubBlock::HEADER
@ HEADER
Definition: ZdcSubBlock.h:37
ZdcSubBlock::s_headerVal
static const uint32_t s_headerVal
Definition: ZdcSubBlock.h:171
ZdcSubBlock::s_bcnMismatchBit
static const int s_bcnMismatchBit
Definition: ZdcSubBlock.h:196
ZdcSubBlock::m_maxMask
uint32_t m_maxMask
Definition: ZdcSubBlock.h:221
ZdcSubBlock::setStatus
void setStatus(uint32_t failingBCN, bool glinkTimeout, bool glinkDown, bool upstreamError, bool daqOverflow, bool bcnMismatch, bool glinkProtocol, bool glinkParity)
Store error status trailer.
Definition: ZdcSubBlock.cxx:160
ZdcSubBlock::packerNeutralParity
void packerNeutralParity(int pin)
Pack current G-Link parity bit for given pin.
Definition: ZdcSubBlock.cxx:382
ZdcSubBlock::s_statusVal
static const uint32_t s_statusVal
Definition: ZdcSubBlock.h:172
ZdcSubBlock::m_unpackError
int m_unpackError
Unpacking error code.
Definition: ZdcSubBlock.h:216
ZdcSubBlock::UNPACK_COMPRESSION_SLICES
@ UNPACK_COMPRESSION_SLICES
Definition: ZdcSubBlock.h:50
FullEventAssembler.h
ZdcSubBlock::s_slices2Bit
static const int s_slices2Bit
Definition: ZdcSubBlock.h:180
ZdcSubBlock::s_glinkProtocolBit
static const int s_glinkProtocolBit
Definition: ZdcSubBlock.h:197
ZdcSubBlock::slices2
int slices2() const
Definition: ZdcSubBlock.h:275
ZdcSubBlock::daqOverflow
bool daqOverflow() const
Definition: ZdcSubBlock.h:305
ZdcSubBlock::s_crateBit
static const int s_crateBit
Definition: ZdcSubBlock.h:178
ZdcSubBlock::s_maxPins
static const int s_maxPins
Definition: ZdcSubBlock.h:206
ZdcSubBlock::UNPACK_VERSION
@ UNPACK_VERSION
Definition: ZdcSubBlock.h:47
WriteBchToCool.beg
beg
Definition: WriteBchToCool.py:69
ZdcSubBlock::UNCOMPRESSED
@ UNCOMPRESSED
Definition: ZdcSubBlock.h:42
ZdcSubBlock::packerNeutral
void packerNeutral(int pin, uint32_t datum, int nbits)
Pack given neutral data from given pin.
Definition: ZdcSubBlock.cxx:364
ZdcSubBlock::SubBlockWordType
SubBlockWordType
Definition: ZdcSubBlock.h:37
ZdcSubBlock::setBunchCrossing
void setBunchCrossing(int bc)
Set the Bunch Crossing number (neutral format only)
Definition: ZdcSubBlock.h:330
ZdcSubBlock::failingBCN
uint32_t failingBCN() const
Definition: ZdcSubBlock.h:285
python.PyKernel.init
def init(v_theApp, v_rootStream=None)
Definition: PyKernel.py:45
ZdcSubBlock::unpacker
uint32_t unpacker(int nbits)
Unpack given number of bits of data.
Definition: ZdcSubBlock.cxx:309
ZdcSubBlock::slice
int slice() const
Definition: ZdcSubBlock.h:260
ZdcSubBlock::UNPACK_SOURCE_ID
@ UNPACK_SOURCE_ID
Definition: ZdcSubBlock.h:52
ZdcSubBlock::packer
void packer(uint32_t datum, int nbits)
Pack given data into given number of bits.
Definition: ZdcSubBlock.cxx:271
ZdcSubBlock::UNPACK_NONE
@ UNPACK_NONE
Definition: ZdcSubBlock.h:46
ZdcSubBlock::DataFormats
DataFormats
Definition: ZdcSubBlock.h:41
ZdcSubBlock::s_headerBit
static const int s_headerBit
ZdcSubBlock.cxx this is a base class derived (copyed) from LVL1 I do not think we need this this way;...
Definition: ZdcSubBlock.h:167
ZdcSubBlock::s_daqOverflowBit
static const int s_daqOverflowBit
Definition: ZdcSubBlock.h:195
ZdcSubBlock::unpackerSuccess
bool unpackerSuccess() const
Return unpacker success flag.
Definition: ZdcSubBlock.h:356
ZdcSubBlock::module
int module() const
Definition: ZdcSubBlock.h:270
ZdcSubBlock::read
OFFLINE_FRAGMENTS_NAMESPACE::PointerType read(const OFFLINE_FRAGMENTS_NAMESPACE::PointerType beg, const OFFLINE_FRAGMENTS_NAMESPACE::PointerType end)
Input complete packed sub-block from ROD array.
Definition: ZdcSubBlock.cxx:121
ZdcSubBlock::s_slices2Mask
static const uint32_t s_slices2Mask
Definition: ZdcSubBlock.h:188
ZdcSubBlock::glinkDown
bool glinkDown() const
Definition: ZdcSubBlock.h:295
ZdcSubBlock
Zdc Sub Block base class.
Definition: ZdcSubBlock.h:34
ZdcSubBlock::s_moduleMask
static const uint32_t s_moduleMask
Definition: ZdcSubBlock.h:187
ZdcSubBlock::s_maxWordBits
static const int s_maxWordBits
Definition: ZdcSubBlock.h:201
ZdcSubBlock::setGlinkParity
void setGlinkParity(int bit=1)
Set G-Link Parity bit in Sub-status word.
Definition: ZdcSubBlock.cxx:196
ZdcSubBlock::s_slices1Mask
static const uint32_t s_slices1Mask
Definition: ZdcSubBlock.h:189
ZdcSubBlock::s_moduleBit
static const int s_moduleBit
Definition: ZdcSubBlock.h:179
FullEventAssembler::RODDATA
std::vector< uint32_t > RODDATA
ROD data as a vector of unsigned int.
Definition: FullEventAssembler.h:54
ZdcSubBlock::m_dataPos
std::vector< uint32_t >::const_iterator m_dataPos
Definition: ZdcSubBlock.h:223
ZdcSubBlock::s_glinkDownBit
static const int s_glinkDownBit
Definition: ZdcSubBlock.h:193
ZdcSubBlock::m_unpackerFlag
bool m_unpackerFlag
Definition: ZdcSubBlock.h:222
ZdcSubBlock::parityBit
static int parityBit(int init, uint32_t datum, int nbits)
Return the parity bit for given data.
Definition: ZdcSubBlock.cxx:260
ZdcSubBlock::s_formatMask
static const uint32_t s_formatMask
Definition: ZdcSubBlock.h:184
ZdcSubBlock::s_seqnoBit
static const int s_seqnoBit
Definition: ZdcSubBlock.h:177
ZdcSubBlock::s_wordIdMask
static const uint32_t s_wordIdMask
Definition: ZdcSubBlock.h:182
ZdcSubBlock::setStreamed
void setStreamed()
Set continuous bit streaming for compressed formats.
Definition: ZdcSubBlock.h:350
ZdcSubBlock::s_failingBcnBit
static const int s_failingBcnBit
Definition: ZdcSubBlock.h:191
ZdcSubBlock::s_headerMask
static const uint32_t s_headerMask
Definition: ZdcSubBlock.h:169
ZdcSubBlock::clear
void clear()
Clear all data.
Definition: ZdcSubBlock.cxx:85
ZdcSubBlock::unpackErrorMsg
std::string unpackErrorMsg() const
Return the unpacking error message for printing.
Definition: ZdcSubBlock.cxx:206