Real-time Class Detail Data
Class detail data is pushed in real-time during class. The types available are hands up, rewards, the position of the camera, authorize, enter the classroom, leave the classroom, kick out, mute all, mute individual, selector, responder, up and down the stage, network condition of the classroom(sent in summary every 5 mins), device detection in the classroom, message of teachers and students seeking help in the classroom, extension of the class, message of a user logging onto the ClassIn web-live page, details of starting the classroom recording, message of viewers' making reservation to watch the live stream on the ClassIn web-live page, details of watching the live stream on the webpage, 'like' on the live stream webpage and details of clicks on goods.
Use different 'cmd' values to identify different types of data.
Please note that some types of real-time data will also be included in the data type of Summary(cmd=end), which is a summary of teaching and learning events in the classroom. Summary data is sent after class. For example, you may subscribe to 'Summary data' to receive the details of students getting rewarded and entering/exiting the classroom instead of receiving the real-time data of hands up, rewards, enter the classroom etc separately.
Hands up
Key |
type |
Instruction |
Cmd |
Int32 |
cmd=67375105 |
Color |
String |
hands up+user ID |
Handsup |
Boolean |
True: Hands up; False: Hands down |
Rewards
Key |
type |
Instruction |
Cmd |
Int32 |
cmd=67375105 |
Color |
String |
award + users ID |
Times |
Int32 |
Count of times |
Position of the camera
Key |
type |
Instruction |
Cmd |
Int32 |
cmd=67375105 |
Color |
String |
webcamPosition + UID |
Area |
Struct |
coordinate of the camera |
└ X1 |
Int32 |
X coordinate of the upper left corner |
└ Y1 |
Int32 |
Y coordinate of the upper left corner |
L X2 |
Int32 |
X coordinate of the lower right corner |
L Y2 |
Int32 |
Y coordinate of the lower right corner |
OnTop |
Bool |
Whether the user is up on stage. 0:No; 1: Yes |
Channel |
Int32 |
Serial Number of camera. 0: main camera; 1: auxiliary camera |
Authorise
Key |
Type |
Instruction |
Cmd |
Int32 |
cmd=67371520 |
Operation |
Boolean |
True: authorized; False: cancel the authorization |
Enter the classroom
Key |
Type |
Instruction |
Cmd |
Int32 |
cmd=67371107 |
NickName |
String |
The user's nickname |
AllowEnterTime |
Int32 |
The time when the user is allowed to enter the classroom again after he/she is kicked out. |
UID |
Int32 |
User ID |
LoginMobile |
String |
Mobile phone no. |
LoginEmail |
String |
Email address |
ClientID |
Int32 |
When the instructor uses dual devices to enter the classroom, the first logged in device is 0, and the second logged in device is 1. |
Identity |
Int32 |
User's identity. 1:student, 2:audit student, 3:teacher, 4:co-teachert/assistant, 193:School principal, 194:Principal's assistant |
Device |
Int32 |
Type of client. 0:PC,1:iphone,2:ipad,3:web client,4:Android mobile phone,5:Android pad,6:Android TV,9:PC-x64 |
Exit the classroom
Key |
Type |
Instruction |
Cmd |
Int32 |
cmd=67371111 |
UID |
Int32 |
User ID |
Identity |
Int32 |
User's identity |
ClientID |
Int32 |
When the instructor uses dual devices to enter the classroom, the first logged in device is 0, and the second logged in device is 1. |
Reason |
Int32 |
Exit reason. 0: unknown exception, 1: normal exit, 2: classroom closed, 3: abnormal exit, 4: kicked out of the classroom, 5: service shutdown, 6: disconnection, 7: cancellation of the class, 8: change of user's role in the class, 54: duplicate login from the same client, 56: network connection interrupted, 60: logged out due to a new login from another client, 101: user exited the app by pressing the home button on their Android device, 102: user exited the app due to an incoming phone call, 111: app went into the background. |
Kicked out
Key |
Type |
Instruction |
Cmd |
Int32 |
cmd=67371523 |
Duration |
Int64 |
The time period of banning |
TargetUID |
Int32 |
UID of the student who is kicked out |
Operation |
Int32 |
1: Kicked out |
Mute
Key |
Type |
Instruction |
Cmd |
Int32 |
67371522: mute individual student; 67371586: mute all |
TargetUID |
Int32 |
UID of the students who is muted |
Operation |
Int32 |
1: mute; 0: allow to speak |
Selector
Key |
Type |
Instruction |
Area |
Struct |
The coordinate of the tool in the classroom |
└ X1,Y1,X2,Y2 |
Int32 |
Null |
Color |
String |
‘standaloneSelectorToolglobalData’: send questions. ‘standaloneSelectorTool’ + student UID: students answer the question. |
Cmd |
Int32 |
67375105 |
QSentTime |
Int32 |
ime when the tool is assigned |
CurState |
Int32 |
Status of the selector. 0:available; 1:in the process of assigning; 2:stop to choose |
QCollectTime |
Int32 |
Time to stop the selector |
CorrectItems |
String |
The correct answer |
Commited |
Int32 |
Student's status. 0: start, 1: in the process, 2: submit |
SelectedItem |
String |
Answers chosen by students |
AllItems |
String |
All alternative answers |
Participants |
Struct |
Details of participants |
└ ShowName |
String |
nickname |
└ Uid |
Int32 |
student UID |
L Identity |
Int32 |
Identity of the user who participated |
RecvQuestionTime |
Int32 |
Time when the student receives the selector |
LastCommitTime |
Int32 |
Time when the student submits answers |
Responder
Key |
Type |
Instruction |
Area |
Struct |
The coordinate of the tool in the classroom |
└ X1,Y1,X2,Y2 |
Int32 |
Null |
Color |
String |
standaloneResponderToolglobalData: teacher started the tool. standaloneResponderTool+UID: students participated |
Cmd |
Int32 |
67375105 |
RandomTopLeft |
Struct |
The coordinates of the random position of the responder tool |
└ X,Y |
Int32 |
Null |
Participants |
Struct |
Students participated in clicking the responder tool |
└ ShowName |
String |
The student's nickname |
└ Uid |
Int32 |
The student's ClassIn UID |
L Identity |
Int32 |
The identity of the participant |
EndTime |
Int32 |
Time when the activity ends |
CurState |
Int32 |
Current status. 0:Initial state,1:Begins,2:Students race to be the first one to click the Responder on the screen,3:In the status of wait when someone has successfully clicked the Responder, 4:End |
nId |
Int32 |
UID of the student who is the first to click the Responder |
FastestGuyTime |
Int32 |
Time duration of the Responder is clicked |
FastestGuyName |
String |
Name of the student who clicked the Responder first |
Up and down the stage
Key |
Type |
Instruction |
Cmd |
Int32 |
67371521 |
Operation |
Int32 |
0: down the stage,1: up on the stage |
Network condition during the class
A realtime condition of network/cpu of users in the classroom. The data is sent each 5 mintes. It is the summary of the condition in the lastest 5 mintes.
Parameter |
Type |
Description |
Cmd |
String |
Type as a string, 'Net' |
Data |
Object |
Status statistics |
└ localIP |
String |
mediaIp (Last digit hidden) |
└ socket |
String |
UDP/TCP, the protocol actually used for communication in the classroom media at the current reporting time |
└ mediaPort |
Integer |
Media port |
└ reportTime |
String |
Timestamp that triggered the data report |
└ mediaDuration |
Integer |
Length of the upload cycle (seconds) |
└ good |
Integer |
Total number of UDP status is Good |
└ normal |
Integer |
Total number of UDP status is Normal |
└ bad |
Integer |
Total number of UDP status is Bad |
└ poor |
Integer |
Total number of UDP status is Poor |
└ notReach |
Integer |
Total number of UDP status is Not Reach |
└ total |
Integer |
Total number of UDP |
└ avgDelay |
String |
Average delay of UDP |
└ avgVariance |
String |
Average variance of UDP |
└ loss |
Integer |
Actual packet loss of UDP |
└ udpTotalPkts |
Integer |
Total UDP test packets |
└ tcpGood |
Integer |
Total number of TCP status is Good |
└ tcpNormal |
Integer |
Total number of TCP status is Normal |
└ tcpBad |
Integer |
Total number of TCP status is Bad |
└ tcpPoor |
Integer |
Total number of TCP status is Poor |
└ tcpNotReach |
Integer |
Total number of TCP status is Not Reach |
└ tcpTotal |
Integer |
Total number of TCP |
└ tcpAvgDelay |
String |
Average delay of TCP |
└ tcpAvgVariance |
String |
Average variance of TCP |
└ gatewayGood |
Integer |
Total number of user gateway status is Good |
└ gatewayNormal |
Integer |
Total number of user gateway status is Normal |
└ gatewayBad |
Integer |
Total number of user gateway status is Bad |
└ gatewayPoor |
Integer |
Total number of user gateway status is Poor |
└ gatewayNotReach |
Integer |
Total number of user gateway status is Not Reach |
└ gatewayTotal |
Integer |
Total number of user gateway |
└ gatewayTtl |
String |
User gateway TTL |
└ gatewayAddress |
String |
User gateway |
└ gatewayAvgDelay |
String |
Average delay of user gateway |
└ gatewayAvgVariance |
String |
Average variance of user gateway |
└ gatewayLoss |
Integer |
Actual packet loss of user gateway |
└ gateway2Good |
Integer |
Total number of access gateway status is Good |
└ gateway2Normal |
Integer |
Total number of access gateway status is Normal |
└ gateway2Bad |
Integer |
Total number of access gateway statu is Bad |
└ gateway2Poor |
Integer |
Total number of access gateway status is Poor |
└ gateway2NotReach |
Integer |
Total number of access gateway status is Not Reach |
└ gateway2Total |
Integer |
Total number of access gateway |
└ gateway2Ttl |
String |
Access gateway TTL |
└ gateway2Address |
String |
Access gateway |
└ gateway2AvgDelay |
String |
Average delay of access gateway |
└ gateway2AvgVariance |
String |
Average variance of access gateway |
└ gateway2Loss |
String |
Actual packet loss of access gateway |
└ cpuLow |
Integer |
Total number of CPU status is Low |
└ cpuMedium |
Integer |
Total number of CPU status is Medium |
└ cpuHigh |
Integer |
Total number of CPU status is High |
└ cpuBusy |
Integer |
Total number of CPU status is Busy |
└ cpuTotal |
Integer |
Total number of CPU status check |
Example
{
"ClassID": 290274,
"ActionTime": 1521547386,
"UID": 1001920,
"CourseID": 122982,
"TimeStamp": 1521547387,
"Cmd": "Net",
"_id": "5ab0f87aa3251e6e49b9e892",
"SID": 1001920,
"Data": {
"avgVariance": "35.890",
"reportTime": "1720082915",
"gatewayAvgVariance": "38.284",
"gateway2Poor": 0,
"gatewayNormal": 0,
"total": 592,
"mediaPort": 8080,
"gateway2AvgDelay": "16.240",
"udpTotalPkts": 92,
"localIP": "123.24.205.*",
"avgDelay": "68.258",
"gatewayAvgDelay": "6.794",
"poor": 10,
"good": 560,
"notReach": 3,
"gateway2AvgVariance": "74.474",
"normal": 19,
"gatewayTtl": 1,
"gatewayTotal": 300,
"gateway2Loss": 6,
"gateway2Good": 293,
"gateway2NotReach": 6,
"loss": 4,
"gateway2Ttl": 3,
"gateway2Total": 299,
"gatewayLoss": 0,
"gatewayNotReach": 0,
"gateway2Address": "123.25.27.93",
"socket": "UDP",
"gateway2Bad": 0,
"gatewayPoor": 0,
"bad": 0,
"gateway2Normal": 0,
"gatewayGood": 300,
"gatewayBad": 0,
"mediaDuration": 300,
"gatewayAddress": "10.0.30.1",
"cpuHigh": 0,
"cpuMedium": 0,
"cpuBusy": 0,
"cpuLow": 299,
"cpuTotal": 299
}
}
Example
{
"ClassID": 290274,
"ActionTime": 1521547386,
"UID": 1001920,
"CourseID": 122982,
"TimeStamp": 1521547387,
"Cmd": "Net",
"_id": "5ab0f87aa3251e6e49b9e892",
"SID": 1001920,
"Data": {
"poor": 0,
"bad": 0,
"total": 331,
"good": 331,
"normal": 0,
"notReach": 0,
"cpuLow": 0,
"cpuMedium": 10,
"cpuHigh": 31,
"cpuBusy": 3,
"cpuTotal": 44,
"localIP": "1.2.3.*"
}
}
Equipment detection in the classroom
Key |
Type |
Instruction |
Cmd |
String |
string of 'Check' |
Data |
json object |
detail result of the device test |
└ OperatingSystem |
string |
OperatingSystem |
└ CPU |
string |
CPU info |
└ NetworkDelay |
string |
NetworkDelay |
└ FrameLoss |
string |
FrameLoss |
└ MicrophoneArbitrary |
number |
status of microphone,1 normal,2 disable or no equipment found |
└ HeadphoneArbitrary |
number |
status of Headphone,1 normal,2 disable or no equipment found |
└ CameraArbitrary |
number |
status of Camera,1 normal,2 disable or no equipment found |
└ EEO_VIDEO_DEVICE_NAME |
string |
selected camera |
└ EEO_AUDIO_DEVICE_NAME |
string |
selected microphone |
└ EEO_AUDIO_OUTPUT_NAME |
string |
selected headphone |
└ EEO_DEVICE_LIST |
json object |
equipment list |
└ camera |
array |
camera equipment list |
└ micphone |
array |
microphone equipment list |
└ speaker |
array |
speaker equipment list |
└ MicrophoneImpersonal |
number |
device test result of Microphone(1 normal, 2 abnormal or no audio data found), not valid for mobile device |
└ CameraImpersonal |
number |
device test result of Camera(1 normal, 2 abnormal or no audio data found), not valid for mobile device. |
└ HeadphoneImpersonal |
number |
device test result of Headphone(1 normal, 2 abnormal or no audio data found), not valid for mobile device |
└ MicrophoneAttachment |
string |
attachment for micrphone test |
└ HeadphoneAttachment |
string |
attachement for headphone test(should be empty recently) |
└ CameraAttachment |
string |
attachment for camera test |
└ ClassInVersion |
string |
version of classin app |
└ Mac |
string |
MAC address of the device |
└ addTime |
string |
time of the device test (timestamp) |
└ InfoSource |
number |
trigger of the data: 1 initialization of the equipment;2,selection of the equipment,3, finish the self equipment testing;4, changes of equipment;5 finish setting of the equipment;7, interrupt of the equipment testing; |
└ DeviceType |
number |
type of the device: 0, unknown; 1 Windows; 2 iPhone ; 3 iPad ; 4 Android Phone ; 5 Android Pad ; 6 Mac; |
└ ClientIP |
string |
IP of user (the last section is hidden) |
example
{
"ClassID": 290274,
"ActionTime": 1521547218,
"UID": 1001920,
"CourseID": 122982,
"TimeStamp": 1521547219,
"Cmd": "Check",
"_id": "5ab0f7d2a3251e6e49b9e88b",
"SID": 1001920,
"SafeKey": "7e0a589d8fd68a82a523ac86c95c9d1d",
"Data": {
"MicrophoneArbitrary": null,
"ClassInVersion": "2.1.1.60",
"EEO_AUDIO_OUTPUT_NAME": "\u626c\u58f0\u5668 (Realtek High Definition Au",
"FrameLoss": "",
"EEO_AUDIO_DEVICE_NAME": "\u9ea6\u514b\u98ce (HD Webcam C270)",
"CameraImpersonal": 0,
"addTime": 1521547218,
"CPU": "Intel(R) Core(TM) i5-4570 CPU @ 3.20GHz",
"OperatingSystem": "Windows 10 (1709)",
"Mac": "00:15:5D:33:74:C4",
"CameraArbitrary": null,
"EEO_VIDEO_DEVICE_NAME": "Logitech HD Webcam C270",
"ServerName": "EEO-A0134 (Auto)",
"HeadphoneAttachment": "",
"ClientIP": "10.0.1.*",
"MicrophoneAttachment": "https://root_url/upload/autocheck/",
"EEO_DEVICE_LIST": "{\"camera\": [\"Logitech HD Webcam C270\"], \"micphone\": [\"HD Webcam C270\"], \"speaker\": [\"LG HDR 4K\"]}",
"MicrophoneImpersonal": 0,
"CameraAttachment": "",
"HeadphoneArbitrary": null,
"InfoSource": 3,
"NetworkDelay": ""
}
}
Teachers and students seek help in the classroom
During the class, teachers and students in the classroom can send message to ask for help from ClassIn. (To allow students to seek help in the virual classroom, please enable the function in the school admin dashboard. Path: Profile-Setting-Classroom Setting-Swithes-18. Students seek help setting.)If there's help msg, this data would be sent at the sametime.
Key |
Type |
Instruction |
Cmd |
String |
'HelpInfo' |
ClassID |
int |
ID of the lesson that needs help |
Data |
json object |
details |
└ UID |
int |
UID of the user that seek help |
└ Message |
string |
content of the help msg |
└ UserList |
int array |
UID of users in the classroom |
example
{
"SID": 1000958,
"ClassID": 301417,
"Data": {
"UID": 1001558,
"Message": "Speaker is abnormal. The user can't hear sound",
"UserList": [1001558, 123456]
},
"Cmd": "HelpInfo"
}
Extend the class duration
During 8 to 3 minutes before the end of class, the teacher would have a chance to extend the class. The data is sent if the instructor extends the lesson. Note: You should enable the function of allowing the instructor to extend the lesson on the school admin dashboard first. Path: Profile-Setting-Classroom Setting-Switches-13. Class time extension setting)
Key |
Type |
Instruction |
Cmd |
String |
'ClassLen' |
StartTime |
Int32 |
start time of the class,unix timestamp |
PrelectTimeLength |
Int32 |
duration of the class after extension,by second |
CloseClassDelay |
Int32 |
how much time is delayed,by second |
example
{
"SID": 1000958,
"StartTime": 1568862650,
"PrelectTimeLength": 1200,
"CloseClassDelay": 1200,
"Cmd": "ClassLen"
}
The audience's info used to log in to the ClassIn web-live page
When you create a lesson and enable it to be live streamed on the ClassIn web-live page, you can set that only the logged-in viewers can watch the livestream. ClassIn uses mobile phone numbers and email addresses as account. This data is sent in real-time when the audience logged in to the ClassIn's web-live streaming page. The data will not be generated when the class is finished, and viewers log in to watch the playback.
Key |
Type |
Instruction |
Cmd |
String |
'LiveWebLogin' |
ClassID |
int |
Lesson ID |
Data |
json object |
content |
└ Telephone |
String |
The mobile phone number or email address of the audience, subject to the actual login account |
└ LoginTime |
int |
Time when the audience logged in. Unix timestamp |
└ Nickname |
String |
Nickname of the user |
example
{
"SID": 1000958,
"ClassID": 301417,
"Data": {
"Telephone": "10015584345",
"LoginTime": 1521547219,
"Nickname": "XiaoMing"
},
"Cmd": "LiveWebLogin"
}
recording start msg
The data contains the setting of the class cloud recording. It is sent eachtime when the teacher enters the virtual classroom and starts the classroom recording.
Key |
Type |
Instruction |
Cmd |
String |
string of 'LiveDetail' |
Data |
json object |
Details of the cloud recording |
└ Audio mode |
string |
Class recording mode: 'ClassIn Audio' means only the audio of the virtual classroom is recorded. 'System Audio' means the audio of the whole system is recorded. |
└ HighBitRate |
string |
BitRate of the recording: 'High', or 'Standard'(normal) |
└ IP |
string |
IP of the pusher: maybe a domain named with 'livepush.eeo.cn' or an IP address |
└ Micphone is recorded |
string |
Whether the Micphone's recorded. 'Yes' or 'No' |
└ Video Scope |
string |
The 'Desktop' is recorded OR only the 'Classroom' |
└ Video Size |
string |
Video Size : 'HD(1280*720)' or 'FHD(1920*1080)' |
example
{
"SID": 1001920,
"Data": {
"Audio mode": "ClassIn Audio",
"HighBitRate": "Standard",
"IP": "livepush.eeo.cn",
"Micphone is recorded": "Yes",
"Video Scope": "Desktop",
"Video Size": "HD(1280*720)"
},
"ClassID": 392429,
"Cmd": "LiveDetail"
}
Image of the blackboard writing in the virtual classroom
You can subscribe to this data to collect the blackboard writing generated during the class. The original file format of the blackboard writing is .edb in the ClassIn system, but we will send you in the image format. The data is sent in realtime when the instructor cleans the blackboard or when the lesson ends.
Key |
Type |
Instruction |
Cmd |
String |
'EdbImg' |
Url |
String |
Download address of the image |
GroupId |
int |
The group Id that the edb file belongs to. GroupId=0 means the blackboard writing was in the lesson's main classroom. The group id should always be 0, if you did not use the function of breakout rooms. |
example
{
"SID": 1001920,
"ClassID": 393472,
"Url": "http://www.eeo.cn/20200819/20200819_393472_0_bb_151823_853.jpg",
"GroupId": 0,
"Cmd": "EdbImg"
}
Audience make reservation for the live streaming on the ClassIn web-live page
When there is an upcoming live streaming class, the audience can make reservation in advance so as to receive reminder when the live streaming actually starts. This data is sent in real-time when the audience click Reservation on the ClassIn web-live page.
Key |
Type |
Instruction |
Cmd |
String |
'LiveReserve' |
|
ClassID |
Int |
Lesson ID |
Data |
object |
|
└ Telephone |
String |
The audience's ClassIn account that used to make reservation. Either be a mobile number or email address, subject to the actual login account. |
└ ReserveTime |
int |
The time when the audience submit the reservation. Unix timestamp |
example
{
"SID": 100088,
"ClassID": 10086,
"Cmd": "LiveReserve",
"Data": {
"Telephone": "15201114553",
"ReserveTime": 1625108250
}
}
Details of audience watching the live streaming on the ClassIn web-live page.
The data is sent in realtime when the viewer closes the ClassIn web-live page.
Please notice that in the following circumstances multiple data with same InTime and different Looktime will be sent:
when the viewers' network is unstable/when the viewer refreshes the page/when the device is in the sleep mode.
When such data is sent, please use(cmd,classid,telephone,intime) as unique key and only store the record with max Looktime.
Key |
Type |
Instruction |
Cmd |
String |
'LiveDataDetail' |
|
ClassID |
int |
lesson ID |
Data |
object |
|
└ Telephone |
String |
The viewer's ClassIn account. Either be a mobile phone number or email address, subject to the actual login account. If the user is not logged in , the data is a string starts with'yk_' |
└ Nickname |
String |
nick name of the user |
└ Intime |
int |
The time when user enter the live page. Unix timestamp |
└ LookTime |
int |
How much time the viewer watched. Seconds |
└ IP |
String |
IP address of user |
└ ClientType |
int |
The device that used: 1-PC browser,2-mobile browser,3-mini program in wechat |
Example
{
"SID": 100088,
"ClassID": 10086,
"Cmd": "LiveDataDetail",
"Data": {
"Telephone": "15201114553",
"Nickname": "husky2021",
"Intime": 1625108250,
"LookTime": 60,
"Ip": "127.0.0.1",
"ClientType": 1
}
}
Likes on the ClassIn web-live page
When viewing the livestream in the ClassIn web-live page, audience can click LIKEs on the page. This data is sent in realtime when user likes live streaming.
Key |
Type |
Instruction |
Cmd |
String |
'LiveLike' |
|
ClassID |
int |
lesson ID |
Data |
object |
|
└ Telephone |
String |
The ClassIn account. Can either be mobile phone numbers or email addresses, subject to the actual login account. If the user is not logged in , the data is a string starts with'yk_' |
└ Time |
int |
the time when user click LIKE. Unix timestamp |
Example
{
"SID": 100088,
"ClassID": 10086,
"Cmd": "LiveLike",
"Data": {
"Telephone": "15201114553",
"Time": 1625108250
}
}
Detail of clicks on goods on the ClassIn web-live page
The data is sent when students click on goods during the live class.
Key |
Type |
Instruction |
Cmd |
String |
'LiveGoodsClickDetail' |
|
ClassID |
int |
lesson ID |
Data |
object |
|
└ Telephone |
String |
ClassIn account. Either be mobile phone numbers or email addresses, subject to the actual login account. If the user is not logged in , the data is a string starts with'yk_'. |
└ Nickname |
String |
nick name of the user |
└ Time |
int |
when user clicks the good,Unix timestamp |
└ GoodNum |
int |
id of the good |
└ GoodName |
String |
name of the good |
Example
{
"SID": 100088,
"ClassID": 10086,
"Cmd": "LiveGoodsClickDetail",
"Data": {
"Telephone": "15201114553",
"Nickname": "husky2021",
"Time": 1625108250,
"GoodNum": 60,
"GoodName": "Gone with Wind"
}
}