{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":482705651,"defaultBranch":"main","name":"dpdk-vhost-vfe","ownerLogin":"Mellanox","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2022-04-18T03:47:05.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/5813145?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1719553874.0","currentOid":""},"activityList":{"items":[{"before":"f84ba11458614fd5953c372f4fa5d17176fdc915","after":"48009f65c145a6b75c0f12fda98f31eab4d77ddb","ref":"refs/heads/main","pushedAt":"2024-07-16T09:59:15.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"kailiangz1","name":null,"path":"/kailiangz1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84052795?s=80&v=4"},"commit":{"message":"doc: vhost acceleration service","shortMessageHtmlLink":"doc: vhost acceleration service"}},{"before":"f6739e8d7a494ac1e0d8bc17af7ac5c982b2f7c1","after":"8171e7a20fad960aba170351acea28d2bd3cced0","ref":"refs/heads/v1.2","pushedAt":"2024-07-16T08:08:38.000Z","pushType":"push","commitsCount":4,"pusher":{"login":"kailiangz1","name":null,"path":"/kailiangz1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84052795?s=80&v=4"},"commit":{"message":"vdpa/virtio: Fix virtio reset time inaccurate\n\nReset time is not accurate if use sleep, use time stamp\ninstead.\n\nRM: 3983020\nSigned-off-by: Kailiang ","shortMessageHtmlLink":"vdpa/virtio: Fix virtio reset time inaccurate"}},{"before":"cb5645316c9587cf9082ade8df508824c91f17bf","after":"f84ba11458614fd5953c372f4fa5d17176fdc915","ref":"refs/heads/main","pushedAt":"2024-07-16T07:52:14.000Z","pushType":"pr_merge","commitsCount":3,"pusher":{"login":"kailiangz1","name":null,"path":"/kailiangz1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84052795?s=80&v=4"},"commit":{"message":"vdpa/virtio: Fix virtio reset time inaccurate\n\nReset time is not accurate if use sleep, use time stamp\ninstead.\n\nRM: 3983020\nSigned-off-by: Kailiang ","shortMessageHtmlLink":"vdpa/virtio: Fix virtio reset time inaccurate"}},{"before":"42262ea75eb2a8ae6f4b98705a29e1a3bcc0ae9a","after":"cb5645316c9587cf9082ade8df508824c91f17bf","ref":"refs/heads/main","pushedAt":"2024-07-16T07:51:54.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"kailiangz1","name":null,"path":"/kailiangz1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84052795?s=80&v=4"},"commit":{"message":"vdpa/virtio: remove HPA for memory table\n\nPreviously, we use HPA to handle corner case when vhostd and qemu crash\nat the same time, but to get HPA, we add a mmap flag MAP_POPULATE, which\nmakes the mmap time very long. This commit removes the usage of HPA and\nlet vhostd-ha to check vhost fd connection status to know if QEMU\ncrashes or not. If QEMU crashed, vhostd cleanup the memory table on\nrestart. Meanwhile, we also handle the case of device unplug, which will\nalso leads to socket disconnect.\n\nRM: 3958103\n\nSigned-off-by: Chenbo Xia ","shortMessageHtmlLink":"vdpa/virtio: remove HPA for memory table"}},{"before":"eb43c762870bff66531b10a45424dd538a33c291","after":"f6739e8d7a494ac1e0d8bc17af7ac5c982b2f7c1","ref":"refs/heads/v1.2","pushedAt":"2024-07-16T07:49:34.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"kailiangz1","name":null,"path":"/kailiangz1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84052795?s=80&v=4"},"commit":{"message":"vdpa/virtio: remove HPA for memory table\n\nPreviously, we use HPA to handle corner case when vhostd and qemu crash\nat the same time, but to get HPA, we add a mmap flag MAP_POPULATE, which\nmakes the mmap time very long. This commit removes the usage of HPA and\nlet vhostd-ha to check vhost fd connection status to know if QEMU\ncrashes or not. If QEMU crashed, vhostd cleanup the memory table on\nrestart. Meanwhile, we also handle the case of device unplug, which will\nalso leads to socket disconnect.\n\nRM: 3958103\n\nSigned-off-by: Chenbo Xia ","shortMessageHtmlLink":"vdpa/virtio: remove HPA for memory table"}},{"before":"852eb26bfdb95c5d82a8d473901dc84c37d88763","after":"42262ea75eb2a8ae6f4b98705a29e1a3bcc0ae9a","ref":"refs/heads/main","pushedAt":"2024-07-15T06:14:22.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kailiangz1","name":null,"path":"/kailiangz1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84052795?s=80&v=4"},"commit":{"message":"pkg: fix check_pf_reset.sh permissions\n\nSigned-off-by: Yajun Wu ","shortMessageHtmlLink":"pkg: fix check_pf_reset.sh permissions"}},{"before":"5acbed69f218660f7d213d87f31a27e6252febfd","after":"eb43c762870bff66531b10a45424dd538a33c291","ref":"refs/heads/v1.2","pushedAt":"2024-07-15T06:09:44.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kailiangz1","name":null,"path":"/kailiangz1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84052795?s=80&v=4"},"commit":{"message":"VFE version 1.27\n\nSigned-off-by: Kailiang ","shortMessageHtmlLink":"VFE version 1.27"}},{"before":"77b28c8d2c57efe945a221dc06095b8fc620c0c4","after":"852eb26bfdb95c5d82a8d473901dc84c37d88763","ref":"refs/heads/main","pushedAt":"2024-07-10T09:27:43.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"kailiangz1","name":null,"path":"/kailiangz1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84052795?s=80&v=4"},"commit":{"message":"app/virtio-ha: fix missing setting of QEMU PID\n\nWhen query VF context, we missed the setting of vm_pid,\nthis commit fixes this issue.\n\nSigned-off-by: Chenbo Xia ","shortMessageHtmlLink":"app/virtio-ha: fix missing setting of QEMU PID"}},{"before":"59eba3c83a93f2e4470742a4a6fb9e3d48fbfa6c","after":"5acbed69f218660f7d213d87f31a27e6252febfd","ref":"refs/heads/v1.2","pushedAt":"2024-07-10T09:23:44.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kailiangz1","name":null,"path":"/kailiangz1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84052795?s=80&v=4"},"commit":{"message":"VFE version 1.27\n\nSigned-off-by: Kailiang ","shortMessageHtmlLink":"VFE version 1.27"}},{"before":"e057a5f7c76f1254ea6138e2e17bba20f6065f3f","after":"59eba3c83a93f2e4470742a4a6fb9e3d48fbfa6c","ref":"refs/heads/v1.2","pushedAt":"2024-07-10T09:05:32.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"kailiangz1","name":null,"path":"/kailiangz1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84052795?s=80&v=4"},"commit":{"message":"app/virtio-ha: fix missing setting of QEMU PID\n\nWhen query VF context, we missed the setting of vm_pid,\nthis commit fixes this issue.\n\nSigned-off-by: Chenbo Xia ","shortMessageHtmlLink":"app/virtio-ha: fix missing setting of QEMU PID"}},{"before":"d21b162be470c188343743febdb3692408ef9327","after":"77b28c8d2c57efe945a221dc06095b8fc620c0c4","ref":"refs/heads/main","pushedAt":"2024-07-10T02:11:19.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"kailiangz1","name":null,"path":"/kailiangz1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84052795?s=80&v=4"},"commit":{"message":"pkg: fix check_pf_reset.sh permissions\n\nSigned-off-by: Yajun Wu ","shortMessageHtmlLink":"pkg: fix check_pf_reset.sh permissions"}},{"before":"003fc8921b031330e8b6b4a32335e89ad7ed68e0","after":"e057a5f7c76f1254ea6138e2e17bba20f6065f3f","ref":"refs/heads/v1.2","pushedAt":"2024-07-09T11:31:49.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kailiangz1","name":null,"path":"/kailiangz1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84052795?s=80&v=4"},"commit":{"message":"VFE version 1.27\n\nSigned-off-by: Kailiang ","shortMessageHtmlLink":"VFE version 1.27"}},{"before":"7c4c05c0f356fe58fe0308ec1ce1a84986acd839","after":"003fc8921b031330e8b6b4a32335e89ad7ed68e0","ref":"refs/heads/v1.2","pushedAt":"2024-07-09T11:29:33.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"kailiangz1","name":null,"path":"/kailiangz1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84052795?s=80&v=4"},"commit":{"message":"pkg: fix check_pf_reset.sh permissions\n\nSigned-off-by: Yajun Wu ","shortMessageHtmlLink":"pkg: fix check_pf_reset.sh permissions"}},{"before":"84ccedb964db420614a438d4e0162c8c5df1d1fa","after":"7c4c05c0f356fe58fe0308ec1ce1a84986acd839","ref":"refs/heads/v1.2","pushedAt":"2024-07-09T11:29:00.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kailiangz1","name":null,"path":"/kailiangz1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84052795?s=80&v=4"},"commit":{"message":"vdpa/virtio: fix container recovery\n\nDuring recovery, devices could be removed. So we need to make sure\ncontainer will not be destroyed when there are VFs that are to be\nrecovered belonging to the same container.\n\nSigned-off-by: Chenbo Xia ","shortMessageHtmlLink":"vdpa/virtio: fix container recovery"}},{"before":"814e8b0eeb8dfe755be5e4655ce865ca757a36d7","after":"d21b162be470c188343743febdb3692408ef9327","ref":"refs/heads/main","pushedAt":"2024-07-09T09:57:28.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"kailiangz1","name":null,"path":"/kailiangz1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84052795?s=80&v=4"},"commit":{"message":"vdpa/virtio: fix container recovery\n\nDuring recovery, devices could be removed. So we need to make sure\ncontainer will not be destroyed when there are VFs that are to be\nrecovered belonging to the same container.\n\nSigned-off-by: Chenbo Xia ","shortMessageHtmlLink":"vdpa/virtio: fix container recovery"}},{"before":"7c4c05c0f356fe58fe0308ec1ce1a84986acd839","after":"84ccedb964db420614a438d4e0162c8c5df1d1fa","ref":"refs/heads/v1.2","pushedAt":"2024-07-09T07:53:27.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"kailiangz1","name":null,"path":"/kailiangz1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84052795?s=80&v=4"},"commit":{"message":"VFE version 1.27\n\nSigned-off-by: Kailiang ","shortMessageHtmlLink":"VFE version 1.27"}},{"before":"5922b6931739d54006e237b25ce7cb7f79f77ce5","after":"7c4c05c0f356fe58fe0308ec1ce1a84986acd839","ref":"refs/heads/v1.2","pushedAt":"2024-07-09T04:15:30.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kailiangz1","name":null,"path":"/kailiangz1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84052795?s=80&v=4"},"commit":{"message":"vdpa/virtio: fix container recovery\n\nDuring recovery, devices could be removed. So we need to make sure\ncontainer will not be destroyed when there are VFs that are to be\nrecovered belonging to the same container.\n\nSigned-off-by: Chenbo Xia ","shortMessageHtmlLink":"vdpa/virtio: fix container recovery"}},{"before":"00f72985ec85fccd021599dacd9568678244f60e","after":"5922b6931739d54006e237b25ce7cb7f79f77ce5","ref":"refs/heads/v1.2","pushedAt":"2024-07-09T03:28:33.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"kailiangz1","name":null,"path":"/kailiangz1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84052795?s=80&v=4"},"commit":{"message":"vdpa/virtio: fix container recovery\n\nDuring recovery, devices could be removed. So we need to make sure\ncontainer will not be destroyed when there are VFs that are to be\nrecovered belonging to the same container.\n\nSigned-off-by: Chenbo Xia ","shortMessageHtmlLink":"vdpa/virtio: fix container recovery"}},{"before":"539308ea0fb6411edc8343006fe03751cb70a401","after":"00f72985ec85fccd021599dacd9568678244f60e","ref":"refs/heads/v1.2","pushedAt":"2024-07-09T03:22:31.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"kailiangz1","name":null,"path":"/kailiangz1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84052795?s=80&v=4"},"commit":{"message":"vdpa/virtio: add version print\n\nSigned-off-by: Yajun Wu ","shortMessageHtmlLink":"vdpa/virtio: add version print"}},{"before":"5b93e0fe74d49884ba66535618527dea7ee20ac7","after":"539308ea0fb6411edc8343006fe03751cb70a401","ref":"refs/heads/v1.2","pushedAt":"2024-07-09T03:17:35.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kailiangz1","name":null,"path":"/kailiangz1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84052795?s=80&v=4"},"commit":{"message":"vdpa/virtio: Do not join when thread cancle failed\n\nIf thread cancel failed, needn't to join because thread maybe\nalready stopped. And add flag when thread exit to avoid cancle\nagain.\n\nRM: 3973030\nSigned-off-by: Kailiang ","shortMessageHtmlLink":"vdpa/virtio: Do not join when thread cancle failed"}},{"before":"ecc9e0b6a93aef60bca6fa7fd460b516f192c0de","after":"5b93e0fe74d49884ba66535618527dea7ee20ac7","ref":"refs/heads/v1.2","pushedAt":"2024-07-09T02:57:34.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"kailiangz1","name":null,"path":"/kailiangz1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84052795?s=80&v=4"},"commit":{"message":"vdpa/virtio: Do not join when thread cancle failed\n\nIf thread cancel failed, needn't to join because thread maybe\nalready stopped. And add flag when thread exit to avoid cancle\nagain.\n\nRM: 3973030\nSigned-off-by: Kailiang ","shortMessageHtmlLink":"vdpa/virtio: Do not join when thread cancle failed"}},{"before":"3bb585fee819c456da24177c4ddcfcd64096f1f6","after":"ecc9e0b6a93aef60bca6fa7fd460b516f192c0de","ref":"refs/heads/v1.2","pushedAt":"2024-07-09T02:51:09.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"kailiangz1","name":null,"path":"/kailiangz1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84052795?s=80&v=4"},"commit":{"message":"vdpa/virtio: replace HPA with QEMU process ID\n\nBefore this commit, we use HPA for checking if old and new memory region\nis the same or not. This is for a corner case that when vhostd restart,\nqemu also restart, then qemu could send different memory region with same\ninfo (QEMU_VA, GPA, SIZE). Previously we use HPA to handle this case,\nbut the side effect is we need to use MAP_POPULATE flag for mmap call,\nwhich results in more time used in mmap. In real environment, the time\ncould be several seconds when mmap hundreds of GB memory.\n\nThis commit removes the usage of HPA and MAP_POPULATE flag, but use QEMU\nprocess id to handle the corner case.\n\nSigned-off-by: Chenbo Xia ","shortMessageHtmlLink":"vdpa/virtio: replace HPA with QEMU process ID"}},{"before":"fdd48d1add09a71609cf2cd1174aa7f8d55c0507","after":"814e8b0eeb8dfe755be5e4655ce865ca757a36d7","ref":"refs/heads/main","pushedAt":"2024-07-09T02:18:20.000Z","pushType":"pr_merge","commitsCount":3,"pusher":{"login":"kailiangz1","name":null,"path":"/kailiangz1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84052795?s=80&v=4"},"commit":{"message":"vdpa/virtio: replace HPA with QEMU process ID\n\nBefore this commit, we use HPA for checking if old and new memory region\nis the same or not. This is for a corner case that when vhostd restart,\nqemu also restart, then qemu could send different memory region with same\ninfo (QEMU_VA, GPA, SIZE). Previously we use HPA to handle this case,\nbut the side effect is we need to use MAP_POPULATE flag for mmap call,\nwhich results in more time used in mmap. In real environment, the time\ncould be several seconds when mmap hundreds of GB memory.\n\nThis commit removes the usage of HPA and MAP_POPULATE flag, but use QEMU\nprocess id to handle the corner case.\n\nSigned-off-by: Chenbo Xia ","shortMessageHtmlLink":"vdpa/virtio: replace HPA with QEMU process ID"}},{"before":"7554dac5cc7ebedb9354ee71e3764fdbae2abf50","after":"fdd48d1add09a71609cf2cd1174aa7f8d55c0507","ref":"refs/heads/main","pushedAt":"2024-06-28T05:50:38.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"kailiangz1","name":null,"path":"/kailiangz1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84052795?s=80&v=4"},"commit":{"message":"VFE version 24.07-rc2\n\nSigned-off-by: Kailiang ","shortMessageHtmlLink":"VFE version 24.07-rc2"}},{"before":"8a87bd7ab86af478b8f36f655a5cbfb5f7041c35","after":"3bb585fee819c456da24177c4ddcfcd64096f1f6","ref":"refs/heads/v1.2","pushedAt":"2024-06-27T07:25:24.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"kailiangz1","name":null,"path":"/kailiangz1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84052795?s=80&v=4"},"commit":{"message":"VFE version 1.26\n\nSigned-off-by: Kailiang ","shortMessageHtmlLink":"VFE version 1.26"}},{"before":"4cf519bc04b5e2c23da7c04bc615fdea1e89074e","after":"8a87bd7ab86af478b8f36f655a5cbfb5f7041c35","ref":"refs/heads/v1.2","pushedAt":"2024-06-26T01:52:40.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kailiangz1","name":null,"path":"/kailiangz1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84052795?s=80&v=4"},"commit":{"message":"app/vfe-vdpa: check null uuid when recovery\n\nWhen checking if two devices have the same UUID, add the check of\nUUID is null or not. If UUID is null, we don't need to increate the\nVM count.\n\nRM:3961003\n\nSigned-off-by: Chenbo Xia ","shortMessageHtmlLink":"app/vfe-vdpa: check null uuid when recovery"}},{"before":"4a04d8edd44f138bf6d310b28e638b0b284b0d58","after":"4cf519bc04b5e2c23da7c04bc615fdea1e89074e","ref":"refs/heads/v1.2","pushedAt":"2024-06-26T01:10:12.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"kailiangz1","name":null,"path":"/kailiangz1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84052795?s=80&v=4"},"commit":{"message":"app/vfe-vdpa: check null uuid when recovery\n\nWhen checking if two devices have the same UUID, add the check of\nUUID is null or not. If UUID is null, we don't need to increate the\nVM count.\n\nRM:3961003\n\nSigned-off-by: Chenbo Xia ","shortMessageHtmlLink":"app/vfe-vdpa: check null uuid when recovery"}},{"before":"e9fa2f51f4e64bb1aa8b81b34621ad50b7a3a4fa","after":"7554dac5cc7ebedb9354ee71e3764fdbae2abf50","ref":"refs/heads/main","pushedAt":"2024-06-25T07:25:30.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"kailiangz1","name":null,"path":"/kailiangz1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84052795?s=80&v=4"},"commit":{"message":"app/vfe-vdpa: check null uuid when recovery\n\nWhen checking if two devices have the same UUID, add the check of\nUUID is null or not. If UUID is null, we don't need to increate the\nVM count.\n\nRM:3961003\n\nSigned-off-by: Chenbo Xia ","shortMessageHtmlLink":"app/vfe-vdpa: check null uuid when recovery"}},{"before":"b5cb865cf2b94a0716d05e05464407dffc39aa89","after":"e9fa2f51f4e64bb1aa8b81b34621ad50b7a3a4fa","ref":"refs/heads/main","pushedAt":"2024-06-25T07:25:14.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"kailiangz1","name":null,"path":"/kailiangz1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84052795?s=80&v=4"},"commit":{"message":"vhost: fix null pointer reference of vdpa dev\n\nWhen reconnection thread access vdpa_dev in vsocket, it could be set to\nNULL in another thread, so this commit fixes the potential NULL pointer\nreference.\n\nRM: 3959758\n\nSigned-off-by: Chenbo Xia ","shortMessageHtmlLink":"vhost: fix null pointer reference of vdpa dev"}},{"before":"be7525c05063235fec2952d4f84a08bc4e6544d7","after":"b5cb865cf2b94a0716d05e05464407dffc39aa89","ref":"refs/heads/main","pushedAt":"2024-06-24T08:53:19.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"kailiangz1","name":null,"path":"/kailiangz1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84052795?s=80&v=4"},"commit":{"message":"app/vfe-vdpa: remove unnecessary error return\n\nIf vhostd restart when vhostd-ha does not have global container fd, it\nshould proceed with no restore information, instead of exit.\n\nSigned-off-by: Chenbo Xia ","shortMessageHtmlLink":"app/vfe-vdpa: remove unnecessary error return"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEgJzCmQA","startCursor":null,"endCursor":null}},"title":"Activity ยท Mellanox/dpdk-vhost-vfe"}