--- apiVersion: v1 items: - apiVersion: v1 data: cnibincopy.sh: |- #!/bin/bash set -e function log() { echo "$(date --iso-8601=seconds) [cnibincopy] ${1}" } DESTINATION_DIRECTORY=/host/opt/cni/bin/ # Perform validation of usage if [ -z "$RHEL8_SOURCE_DIRECTORY" ] || [ -z "$RHEL9_SOURCE_DIRECTORY" ] || [ -z "$DEFAULT_SOURCE_DIRECTORY" ]; then log "FATAL ERROR: You must set env variables: RHEL8_SOURCE_DIRECTORY, RHEL9_SOURCE_DIRECTORY, DEFAULT_SOURCE_DIRECTORY" exit 1 fi if [ ! -d "$DESTINATION_DIRECTORY" ]; then log "FATAL ERROR: Destination directory ($DESTINATION_DIRECTORY) does not exist" exit 1 fi # Collect host OS information . /host/etc/os-release rhelmajor= # detect which version we're using in order to copy the proper binaries case "${ID}" in rhcos|scos) RHEL_VERSION=$(echo "${CPE_NAME}" | cut -f 5 -d :) rhelmajor=$(echo $RHEL_VERSION | sed -E 's/([0-9]+)\.{1}[0-9]+(\.[0-9]+)?/\1/') ;; rhel|centos) rhelmajor=$(echo "${VERSION_ID}" | cut -f 1 -d .) ;; fedora) if [ "${VARIANT_ID}" == "coreos" ]; then rhelmajor=8 else log "FATAL ERROR: Unsupported Fedora variant=${VARIANT_ID}" exit 1 fi ;; *) log "FATAL ERROR: Unsupported OS ID=${ID}"; exit 1 ;; esac # Set which directory we'll copy from, detect if it exists sourcedir= founddir=false case "${rhelmajor}" in 8) if [ -d "${RHEL8_SOURCE_DIRECTORY}" ]; then sourcedir=${RHEL8_SOURCE_DIRECTORY} founddir=true fi ;; 9) if [ -d "${RHEL9_SOURCE_DIRECTORY}" ]; then sourcedir=${RHEL9_SOURCE_DIRECTORY} founddir=true fi ;; *) log "ERROR: RHEL Major Version Unsupported, rhelmajor=${rhelmajor}" ;; esac # When it doesn't exist, fall back to the original directory. if [ "$founddir" == false ]; then log "Source directory unavailable for OS version: ${rhelmajor}" sourcedir=$DEFAULT_SOURCE_DIRECTORY fi # Use a subdirectory called "upgrade" so we can atomically move fully copied files. # We now use --remove-destination after running into an issue with -f not working over symlinks UPGRADE_DIRECTORY=${DESTINATION_DIRECTORY}upgrade_$(uuidgen) rm -Rf $UPGRADE_DIRECTORY mkdir -p $UPGRADE_DIRECTORY cp -r --remove-destination ${sourcedir}* $UPGRADE_DIRECTORY if [ $? -eq 0 ]; then log "Successfully copied files in ${sourcedir} to $UPGRADE_DIRECTORY" else log "Failed to copy files in ${sourcedir} to $UPGRADE_DIRECTORY" rm -Rf $UPGRADE_DIRECTORY exit 1 fi mv -f $UPGRADE_DIRECTORY/* ${DESTINATION_DIRECTORY}/ if [ $? -eq 0 ]; then log "Successfully moved files in $UPGRADE_DIRECTORY to ${DESTINATION_DIRECTORY}" else log "Failed to move files in $UPGRADE_DIRECTORY to ${DESTINATION_DIRECTORY}" rm -Rf $UPGRADE_DIRECTORY exit 1 fi rm -Rf $UPGRADE_DIRECTORY kind: ConfigMap metadata: annotations: kubernetes.io/description: | This is a script used to copy CNI binaries based on host OS release.openshift.io/version: 4.21.25 creationTimestamp: "2026-07-23T11:30:17Z" managedFields: - apiVersion: v1 fieldsType: FieldsV1 fieldsV1: f:data: f:cnibincopy.sh: {} f:metadata: f:annotations: f:kubernetes.io/description: {} f:release.openshift.io/version: {} f:ownerReferences: k:{"uid":"781195ff-fb1a-49bd-b6fe-d72079369205"}: {} manager: cluster-network-operator/operconfig operation: Apply time: "2026-07-23T11:30:17Z" name: cni-copy-resources namespace: openshift-multus ownerReferences: - apiVersion: operator.openshift.io/v1 blockOwnerDeletion: true controller: true kind: Network name: cluster uid: 781195ff-fb1a-49bd-b6fe-d72079369205 resourceVersion: "2509" uid: 195d6135-f969-41fe-9b3e-78524eb213b9 - apiVersion: v1 data: allowlist.conf: |- ^net.ipv4.conf.IFNAME.accept_redirects$ ^net.ipv4.conf.IFNAME.accept_source_route$ ^net.ipv4.conf.IFNAME.arp_accept$ ^net.ipv4.conf.IFNAME.arp_notify$ ^net.ipv4.conf.IFNAME.disable_policy$ ^net.ipv4.conf.IFNAME.secure_redirects$ ^net.ipv4.conf.IFNAME.send_redirects$ ^net.ipv6.conf.IFNAME.accept_ra$ ^net.ipv6.conf.IFNAME.accept_redirects$ ^net.ipv6.conf.IFNAME.accept_source_route$ ^net.ipv6.conf.IFNAME.arp_accept$ ^net.ipv6.conf.IFNAME.arp_notify$ ^net.ipv6.neigh.IFNAME.base_reachable_time_ms$ ^net.ipv6.neigh.IFNAME.retrans_time_ms$ kind: ConfigMap metadata: annotations: kubernetes.io/description: | Sysctl allowlist for nodes. release.openshift.io/version: 4.21.25 creationTimestamp: "2026-07-23T11:30:17Z" managedFields: - apiVersion: v1 fieldsType: FieldsV1 fieldsV1: f:data: .: {} f:allowlist.conf: {} f:metadata: f:annotations: .: {} f:kubernetes.io/description: {} f:release.openshift.io/version: {} manager: network-operator operation: Update time: "2026-07-23T11:30:17Z" name: cni-sysctl-allowlist namespace: openshift-multus resourceVersion: "2503" uid: 5733de44-bd7d-442c-9944-9896a0cd99e0 - apiVersion: v1 data: allowlist.conf: |- ^net.ipv4.conf.IFNAME.accept_redirects$ ^net.ipv4.conf.IFNAME.accept_source_route$ ^net.ipv4.conf.IFNAME.arp_accept$ ^net.ipv4.conf.IFNAME.arp_notify$ ^net.ipv4.conf.IFNAME.disable_policy$ ^net.ipv4.conf.IFNAME.secure_redirects$ ^net.ipv4.conf.IFNAME.send_redirects$ ^net.ipv6.conf.IFNAME.accept_ra$ ^net.ipv6.conf.IFNAME.accept_redirects$ ^net.ipv6.conf.IFNAME.accept_source_route$ ^net.ipv6.conf.IFNAME.arp_accept$ ^net.ipv6.conf.IFNAME.arp_notify$ ^net.ipv6.neigh.IFNAME.base_reachable_time_ms$ ^net.ipv6.neigh.IFNAME.retrans_time_ms$ kind: ConfigMap metadata: annotations: kubernetes.io/description: | Sysctl allowlist for nodes. release.openshift.io/version: 4.21.25 creationTimestamp: "2026-07-23T11:30:17Z" managedFields: - apiVersion: v1 fieldsType: FieldsV1 fieldsV1: f:data: f:allowlist.conf: {} f:metadata: f:annotations: f:kubernetes.io/description: {} f:release.openshift.io/version: {} f:ownerReferences: k:{"uid":"781195ff-fb1a-49bd-b6fe-d72079369205"}: {} manager: cluster-network-operator/operconfig operation: Apply time: "2026-07-23T11:30:17Z" name: default-cni-sysctl-allowlist namespace: openshift-multus ownerReferences: - apiVersion: operator.openshift.io/v1 blockOwnerDeletion: true controller: true kind: Network name: cluster uid: 781195ff-fb1a-49bd-b6fe-d72079369205 resourceVersion: "2502" uid: f21cd843-5ac8-48af-ba85-5bbdd666e760 - apiVersion: v1 data: ca.crt: | -----BEGIN CERTIFICATE----- MIIDPDCCAiSgAwIBAgIIFiMiydM1/3owDQYJKoZIhvcNAQELBQAwJjESMBAGA1UE CxMJb3BlbnNoaWZ0MRAwDgYDVQQDEwdyb290LWNhMB4XDTI2MDcyMzExMjcxNFoX DTM2MDcyMDExMjcxNFowJjESMBAGA1UECxMJb3BlbnNoaWZ0MRAwDgYDVQQDEwdy b290LWNhMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA07PqkZ/VwVzT Gp2u/vP2aJK8h6aYuvZSa+AdrH+4XjoCjxyr9as7UzYWd6RJtLuXSlrP9bU5SD61 UEWPYcjWqWZsnHF5JrW5X+RdcgLEtYdcwgQSvry+e2IE2Ey24xOstlyyyn54bKYP f061OvpQ1MzggKNdwmG4uLSulvwE5KlUyA7RK6f1oa9QJ+gSxoaBez86pIlJAtHg XUtkviWqYZarhXOJPSWUTGRJ6vjKCgFF0WFnBecCuzgT2DnEgYoPNGEKKk9iLt+a NU/v59lvnUZ7VDfh/WpECPxtQQGXF9m5tmdDG0cpNpKNyfYzGqk/zWMJK+o8GD/h f36ws34KkQIDAQABo24wbDAOBgNVHQ8BAf8EBAMCAqQwDwYDVR0TAQH/BAUwAwEB /zBJBgNVHQ4EQgRA2L5iyGtCxD5yp+lz2tmiJXxf9mykTslZBjpfqZszMqeDF84d MNZwKcjWV9ZZqBIcfBnsicy+HJSZ/Yx8Lb5/+jANBgkqhkiG9w0BAQsFAAOCAQEA l1zJhYkU7EPk17o65e9g4CF17sT8HuZjR88jn6db3FDfA82A2gzRd8fBHPmhQv1X vY/OKUYdswHBYHnD8zjOU/rgqWAGTW8j94wL84VS0Inmcr+wfrMDxb+WVhUuNt06 UXsAif3dVqjkPd3aIUIzPRTA6BezLaFTlZrxsXy1IIXxWRSK486at0pqWKRRwAQ1 LWxEAfKEmPfGCg2t4L+VBnaPiJA/IIf/SlaK2zdctaleeBRx1k45F1D7jEObNXGa K2HZu8U8sXx3wWBEkekUNC93k40plBpSR9+oaJUMkRoXZgOWJxDAPmsbPYMvcDNK SVwvaTJMvwNAFn7wTdDEgg== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEADCCAuigAwIBAgIIH0AZ5M6TbfIwDQYJKoZIhvcNAQELBQAwJjESMBAGA1UE CxMJb3BlbnNoaWZ0MRAwDgYDVQQDEwdyb290LWNhMB4XDTI2MDcyMzExMjc0OVoX DTI3MDcyMzExMjc0OVowMDESMBAGA1UEChMJb3BlbnNoaWZ0MRowGAYDVQQDExFv cGVuc2hpZnQtaW5ncmVzczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB AL47/EIk+xwmLHh6u0xyDFpAR2QsZYMzErGdoD73EReXghf1Q3DXyzlcXRjGW4I/ 2UlQiWmQeytJ9gC+I7j5j4TJEez6qV4FtuzwgdwEp3NzIMa6egLg71Uj16r72hh2 DT+0a7zII5eBQ8P7uB+YH8ofW6b+MByxzWiyuZ/hVWBLX818uL7ipMck54SM+xsR IAngyuyfyLZcYI95lQR929/FP4nNa+yTBGg81DXUo77Uo0P6Q0WV5susNYhjueGK da6G/Dx2gbRt2vDUt/jZckns3RP/8p/0DWwqMhEAWLgW7NWT35vQ5oLnceOst1sV WqnMm16AVkjjMmOrVkvhqxECAwEAAaOCASYwggEiMA4GA1UdDwEB/wQEAwIFoDAd BgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBJBgNV HQ4EQgRAsNoZmLE3HDKoe0RiZWFuo3rs2AgGMlH0dc1+9D5ACuFC/2bhOOgGkZAa GUtyaPJaWeh9G/8xZWRZYNXI0xHrCzBLBgNVHSMERDBCgEDYvmLIa0LEPnKn6XPa 2aIlfF/2bKROyVkGOl+pmzMyp4MXzh0w1nApyNZX1lmoEhx8GeyJzL4clJn9jHwt vn/6MEsGA1UdEQREMEKCQCouYXBwcy41OTE4N2Y5Yi1lZjcyLTQ3YjQtODIzZC1h OTYxNDcxZWY3NTcucHJvZC5rb25mbHV4ZWFhcy5jb20wDQYJKoZIhvcNAQELBQAD ggEBAHec/hTSoCmX0Wpig0fz/AmbCF1xNhHMAM2kVh1jrfq73hqdxapMA24o1NM0 P8IHjt38ispPkF6ML8g4kXNK145E0X0inlj663U6Z6Qx/I+4Cl+ZGnyLWC2/jAPJ 0WJ1soALU72iExAodzZ5FWjIwP04bt6IIbPbNpSB2S8hRX64sh43QQFnLg6p1FTF F9gFA2cQoiQj/yrGzxYPXo44MjJneQ5MjjqBmn0OkqWQpgiJTAxxzzkgrj3srNYO iMqeCueT5jZqCHnF5+C6XgWAckCmVcIqbdBd9T3cLiIKjpNv68b+j9H2AVAJwKjM /+yeOjnShqQHxUYD7W1Ewdh3jnQ= -----END CERTIFICATE----- kind: ConfigMap metadata: annotations: kubernetes.io/description: Contains a CA bundle that can be used to verify the kube-apiserver when using internal endpoints such as the internal service IP or kubernetes.default.svc. No other usage is guaranteed across distributions of Kubernetes clusters. creationTimestamp: "2026-07-23T11:30:30Z" managedFields: - apiVersion: v1 fieldsType: FieldsV1 fieldsV1: f:data: .: {} f:ca.crt: {} f:metadata: f:annotations: .: {} f:kubernetes.io/description: {} manager: kube-controller-manager operation: Update time: "2026-07-23T11:30:30Z" name: kube-root-ca.crt namespace: openshift-multus resourceVersion: "3443" uid: b031b7e4-aee9-4ba9-857a-66c2f9fde3bd - apiVersion: v1 data: daemon-config.json: | { "cniVersion": "0.3.1", "chrootDir": "/hostroot", "logToStderr": true, "logLevel": "verbose", "binDir": "/var/lib/cni/bin", "perNodeCertificate": { "enabled": true, "bootstrapKubeconfig": "/var/lib/kubelet/kubeconfig", "certDir": "/etc/cni/multus/certs", "certDuration": "24h" }, "cniConfigDir": "/host/etc/cni/net.d", "multusConfigFile": "auto", "multusAutoconfigDir": "/host/run/multus/cni/net.d", "namespaceIsolation": true, "globalNamespaces": "default,openshift-multus,openshift-sriov-network-operator,openshift-cnv", "readinessindicatorfile": "/host/run/multus/cni/net.d/10-ovn-kubernetes.conf", "daemonSocketDir": "/run/multus/socket", "socketDir": "/host/run/multus/socket", "auxiliaryCNIChainName": "vendor-cni-chain" } kind: ConfigMap metadata: creationTimestamp: "2026-07-23T11:30:17Z" labels: app: multus tier: node managedFields: - apiVersion: v1 fieldsType: FieldsV1 fieldsV1: f:data: f:daemon-config.json: {} f:metadata: f:labels: f:app: {} f:tier: {} f:ownerReferences: k:{"uid":"781195ff-fb1a-49bd-b6fe-d72079369205"}: {} manager: cluster-network-operator/operconfig operation: Apply time: "2026-07-23T11:30:17Z" name: multus-daemon-config namespace: openshift-multus ownerReferences: - apiVersion: operator.openshift.io/v1 blockOwnerDeletion: true controller: true kind: Network name: cluster uid: 781195ff-fb1a-49bd-b6fe-d72079369205 resourceVersion: "2522" uid: d8882caf-bd76-4dd7-a62b-d7106d118a7c - apiVersion: v1 data: cabundle.crt: |- -----BEGIN CERTIFICATE----- MIIDUTCCAjmgAwIBAgIIY5pxBRSN2fUwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UE Awwrb3BlbnNoaWZ0LXNlcnZpY2Utc2VydmluZy1zaWduZXJAMTc4NDgwNjU3OTAe Fw0yNjA3MjMxMTM2MThaFw0yODA5MjAxMTM2MTlaMDYxNDAyBgNVBAMMK29wZW5z aGlmdC1zZXJ2aWNlLXNlcnZpbmctc2lnbmVyQDE3ODQ4MDY1NzkwggEiMA0GCSqG SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCiLcNEh9nIfif0tTG8/39vOKO+k+jaioow 8HRsowafEv0gJ7t4QE7tmpRbYbJTB1PNzzDVjSxvMzQjpTEBJbG3THUbGkxbkPM+ /6jVLWyPxv0DKMmKcBkq7Y6RZ0FLRSSUb7Bv9XwMBh/RM4toAyFqPNY0ekjYLj8f dtdALlzecwfXeXu3aSTycuh/BMYi9wBskSU05/idse+gO6+HA2FKmLzTkaB/Lqb3 X5TcL/7THOhteHAVRLg/DNxuV7ZSGPyd3Tj+FzH52+3gz4XGr/472AGSooSmKLaa XbTaZbL+5qp/W2mq3amPMF4EOeAf7sUdmZhVSmFS/lbzoxsTd95DAgMBAAGjYzBh MA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRjZJpe pRpgytXiqfr1u2bD5dQnMTAfBgNVHSMEGDAWgBRjZJpepRpgytXiqfr1u2bD5dQn MTANBgkqhkiG9w0BAQsFAAOCAQEAlH2N8CIpbFG8k6KkfT7Qpsu0Ekur+SchtXKQ 7N8a83YN7iz83lWnkzcv/iYvqHNV0MBtB99b07gaghfcyni+hXl8YdmMxk3OJuBe vhUHP0FrMuwtM5xBmB9+fbSFZNkJOvZwS/ZieU+GD1DIwR2RRK77VfzroUO1/x80 vkLEYOj+I06dZp7MPKXPvhkYHaTF6mX0aol1d2r7y4v3QDcEue1j2pYbnUo0iZZv lrWhy8Jy0sPm2nS6IVkPSAgnc5E9pD/295hqypLpDqRv/5RZkH5T1VP7K6seHrGQ F0E9gK1VmUgM9M8njEinCBrvf6VHin1gJrHV18rbaUw7LaeNuA== -----END CERTIFICATE----- kind: ConfigMap metadata: creationTimestamp: "2026-07-23T11:41:58Z" labels: opendatahub.io/managed: "true" managedFields: - apiVersion: v1 fieldsType: FieldsV1 fieldsV1: f:data: .: {} f:cabundle.crt: {} f:metadata: f:labels: .: {} f:opendatahub.io/managed: {} manager: manager operation: Update time: "2026-07-23T11:41:58Z" name: odh-kserve-custom-ca-bundle namespace: openshift-multus resourceVersion: "14853" uid: 1c641f49-34ea-4adc-9ef6-f6b3c2d10d16 - apiVersion: v1 data: service-ca.crt: | -----BEGIN CERTIFICATE----- MIIDUTCCAjmgAwIBAgIIY5pxBRSN2fUwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UE Awwrb3BlbnNoaWZ0LXNlcnZpY2Utc2VydmluZy1zaWduZXJAMTc4NDgwNjU3OTAe Fw0yNjA3MjMxMTM2MThaFw0yODA5MjAxMTM2MTlaMDYxNDAyBgNVBAMMK29wZW5z aGlmdC1zZXJ2aWNlLXNlcnZpbmctc2lnbmVyQDE3ODQ4MDY1NzkwggEiMA0GCSqG SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCiLcNEh9nIfif0tTG8/39vOKO+k+jaioow 8HRsowafEv0gJ7t4QE7tmpRbYbJTB1PNzzDVjSxvMzQjpTEBJbG3THUbGkxbkPM+ /6jVLWyPxv0DKMmKcBkq7Y6RZ0FLRSSUb7Bv9XwMBh/RM4toAyFqPNY0ekjYLj8f dtdALlzecwfXeXu3aSTycuh/BMYi9wBskSU05/idse+gO6+HA2FKmLzTkaB/Lqb3 X5TcL/7THOhteHAVRLg/DNxuV7ZSGPyd3Tj+FzH52+3gz4XGr/472AGSooSmKLaa XbTaZbL+5qp/W2mq3amPMF4EOeAf7sUdmZhVSmFS/lbzoxsTd95DAgMBAAGjYzBh MA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRjZJpe pRpgytXiqfr1u2bD5dQnMTAfBgNVHSMEGDAWgBRjZJpepRpgytXiqfr1u2bD5dQn MTANBgkqhkiG9w0BAQsFAAOCAQEAlH2N8CIpbFG8k6KkfT7Qpsu0Ekur+SchtXKQ 7N8a83YN7iz83lWnkzcv/iYvqHNV0MBtB99b07gaghfcyni+hXl8YdmMxk3OJuBe vhUHP0FrMuwtM5xBmB9+fbSFZNkJOvZwS/ZieU+GD1DIwR2RRK77VfzroUO1/x80 vkLEYOj+I06dZp7MPKXPvhkYHaTF6mX0aol1d2r7y4v3QDcEue1j2pYbnUo0iZZv lrWhy8Jy0sPm2nS6IVkPSAgnc5E9pD/295hqypLpDqRv/5RZkH5T1VP7K6seHrGQ F0E9gK1VmUgM9M8njEinCBrvf6VHin1gJrHV18rbaUw7LaeNuA== -----END CERTIFICATE----- kind: ConfigMap metadata: annotations: service.beta.openshift.io/inject-cabundle: "true" creationTimestamp: "2026-07-23T11:30:29Z" managedFields: - apiVersion: v1 fieldsType: FieldsV1 fieldsV1: f:data: {} f:metadata: f:annotations: .: {} f:service.beta.openshift.io/inject-cabundle: {} manager: kube-controller-manager operation: Update time: "2026-07-23T11:30:29Z" - apiVersion: v1 fieldsType: FieldsV1 fieldsV1: f:data: f:service-ca.crt: {} manager: service-ca-operator operation: Update time: "2026-07-23T11:36:31Z" name: openshift-service-ca.crt namespace: openshift-multus resourceVersion: "7808" uid: 43ad4431-56dc-49ca-9d08-53eff8fec7bc - apiVersion: v1 data: whereabouts.conf: | { "datastore": "kubernetes", "kubernetes": { "kubeconfig": "/etc/kubernetes/cni/net.d/whereabouts.d/whereabouts.kubeconfig" }, "reconciler_cron_expression": "30 4 * * *", "log_level": "verbose", "configuration_path": "/etc/kubernetes/cni/net.d/whereabouts.d" } kind: ConfigMap metadata: creationTimestamp: "2026-07-23T11:30:17Z" managedFields: - apiVersion: v1 fieldsType: FieldsV1 fieldsV1: f:data: f:whereabouts.conf: {} f:metadata: f:ownerReferences: k:{"uid":"781195ff-fb1a-49bd-b6fe-d72079369205"}: {} manager: cluster-network-operator/operconfig operation: Apply time: "2026-07-23T11:30:17Z" name: whereabouts-flatfile-config namespace: openshift-multus ownerReferences: - apiVersion: operator.openshift.io/v1 blockOwnerDeletion: true controller: true kind: Network name: cluster uid: 781195ff-fb1a-49bd-b6fe-d72079369205 resourceVersion: "2515" uid: 78b26564-aa70-452b-8c35-e3ff9dac4439 kind: ConfigMapList metadata: resourceVersion: "66248"